From 85a63cec1fc8f734317699c62cfe97563872fbc0 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 8 Sep 2022 12:06:29 +0800 Subject: [PATCH 001/793] #comment removed two CreateEntity function overloads and added a default value to desired EID instead --- .../ECS_Base/System/SHEntityManager.cpp | 65 +++------------- .../Engine/ECS_Base/System/SHEntityManager.h | 75 ++++--------------- 2 files changed, 24 insertions(+), 116 deletions(-) diff --git a/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.cpp b/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.cpp index 4aa38112..240c0b32 100644 --- a/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.cpp +++ b/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.cpp @@ -52,63 +52,20 @@ namespace SHADE return entityHandle.GetIndex(entityID); } - EntityID SHEntityManager::CreateEntity(std::vectorconst& componentTypeIDs, std::string const& name,EntityID parentEID) - { - EntityID eID = entityHandle.GetNewHandle(); - EntityIndex eIndex = entityHandle.GetIndex(eID); - if (eIndex > entityVec.size()) - { - assert("FATAL ERROR: EntityIndex out of range in Entity Creation"); - } - else if (eIndex == entityVec.size()) - { - entityVec.emplace_back(std::make_unique()); - } - else - { - if (!entityVec[eIndex]) - { - //There is still an entity stored there.Something went wrong - assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); - } - - //Reset it to a newly constructed entity - entityVec[eIndex].reset(new SHEntity()); - } - - - entityVec[eIndex]->entityID = eID; - entityVec[eIndex]->name = name; - for (auto& id : componentTypeIDs) - { - SHComponentManager::AddComponent(eID, id); - } - - //(SHComponentManager::AddComponent(eID), ...); - /*if (entityHandle.IsValid(parentEID) == false) - { - entityVec[eIndex]->sceneNode.ConnectToRoot(); - } - else - { - entityVec[eIndex]->SetParent(parentEID); - }*/ - - - //TODO Link to Scene graph. - - return eID; - - } - EntityID SHEntityManager::CreateEntity(std::vectorconst& componentTypeIDs, EntityID desiredEID, std::string const& name, EntityID parentEID) { - EntityID eID ; - - if (entityHandle.ClaimHandle(desiredEID) == true) - eID = desiredEID; - else + EntityID eID; + if (desiredEID == MAX_EID) + { eID = entityHandle.GetNewHandle(); + } + else + { + if (entityHandle.ClaimHandle(desiredEID) == true) + eID = desiredEID; + else + eID = entityHandle.GetNewHandle(); + } EntityIndex eIndex = entityHandle.GetIndex(eID); diff --git a/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.h b/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.h index 11e896d5..7afece52 100644 --- a/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.h +++ b/SHADE_Engine/src/Engine/ECS_Base/System/SHEntityManager.h @@ -81,55 +81,21 @@ namespace SHADE * EntityID of the new Entity ***************************************************************************/ template - static std::enable_if_t<(... && std::is_base_of_v), EntityID> CreateEntity(std::string const& name = "Default", EntityID parentEID = MAX_EID) - { - EntityID eID = entityHandle.GetNewHandle(); - EntityIndex eIndex = entityHandle.GetIndex(eID); - if (eIndex > entityVec.size()) - { - assert("FATAL ERROR: EntityIndex out of range in Entity Creation"); - } - else if (eIndex == entityVec.size()) - { - entityVec.emplace_back(std::make_unique()); - } - else - { - if (!entityVec[eIndex]) - { - //There is still an entity stored there.Something went wrong - assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); - } - - //Reset it to a newly constructed entity - entityVec[eIndex].reset(new SHEntity()); - } - entityVec[eIndex]->entityID = eID; - entityVec[eIndex]->name = name; - (SHComponentManager::AddComponent(eID),...); - - /*if (entityHandle.IsValid(parentEID) == false) - { - entityVec[eIndex]->sceneNode.ConnectToRoot(); - } - else - { - entityVec[eIndex]->SetParent(parentEID); - }*/ - - //TODO Link up with Scene graph - - return eID; - } - - template - static std::enable_if_t<(... && std::is_base_of_v), EntityID> CreateEntity(EntityID desiredEID, std::string const& name = "Default", EntityID parentEID = MAX_EID) + static std::enable_if_t<(... && std::is_base_of_v), EntityID> CreateEntity(EntityID desiredEID = MAX_EID, std::string const& name = "Default", EntityID parentEID = MAX_EID) { EntityID eID; - if (entityHandle.ClaimHandle(desiredEID) == true) - eID = desiredEID; - else + if (desiredEID == MAX_EID) + { eID = entityHandle.GetNewHandle(); + } + else + { + if (entityHandle.ClaimHandle(desiredEID) == true) + eID = desiredEID; + else + eID = entityHandle.GetNewHandle(); + } + EntityIndex eIndex = entityHandle.GetIndex(eID); if (eIndex > entityVec.size()) { @@ -179,21 +145,6 @@ namespace SHADE - /************************************************************************** - * \brief - * Create Entity using a vector of ComponentTypeIDs. - * \param componentTypeIDs - * Vector of ComponentTypeIDs. This assumes that CreateSparseSet is called - * for these ComponentTypes. - * \param name - * Name of the Entity (this is not unique) - * \param parentEID - * The entity ID of the parent. This does not call UpdateHierarchy hence - * the parent of the entity is not updated until UpdateHierarchy is called. - * \return - * EntityID of the new Entity - ***************************************************************************/ - static EntityID CreateEntity(std::vectorconst& componentTypeIDs,std::string const& name = "Default", EntityID parentEID = MAX_EID); /************************************************************************** * \brief @@ -209,7 +160,7 @@ namespace SHADE * \return * EntityID of the new Entity ***************************************************************************/ - static EntityID CreateEntity(std::vectorconst& componentTypeIDs, EntityID desiredEID, std::string const& name = "Default", EntityID parentEID = MAX_EID); + static EntityID CreateEntity(std::vectorconst& componentTypeIDs, EntityID desiredEID = MAX_EID, std::string const& name = "Default", EntityID parentEID = MAX_EID); /************************************************************************** * \brief From 32dc894608e8ee9f6e5186cf55ac1244650be727 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 8 Sep 2022 19:37:49 +0800 Subject: [PATCH 002/793] SHEditor Base --- SHADE_Engine/src/Editor/SHEditor.cpp | 62 +++++++++++++++++++++++ SHADE_Engine/src/Editor/SHEditor.h | 25 +++++++++ SHADE_Engine/src/Editor/SHEditorBackend.h | 3 ++ 3 files changed, 90 insertions(+) create mode 100644 SHADE_Engine/src/Editor/SHEditor.cpp create mode 100644 SHADE_Engine/src/Editor/SHEditor.h create mode 100644 SHADE_Engine/src/Editor/SHEditorBackend.h diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp new file mode 100644 index 00000000..17b09291 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -0,0 +1,62 @@ +#include "SHpch.h" +#include "SHEditor.h" +#include "SHEditorBackend.h" + +namespace SHADE +{ + void SHEditor::Initialize() + { + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + + SetupWin32Backend(); + SetupVulkanBackend(); + + } + + void SHEditor::Update() + { + NewFrame(); + + //Add all windows to draw list, Perform necessary updates + + ImGui::Render(); + } + + void SHEditor::Render() + { + ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), ) + } + + void SHEditor::Exit() + { + ShutdownVulkanBackend(); + ShutdownWin32Backend(); + ImGui::DestroyContext(); + } + + void SHEditor::SetupVulkanBackend() + { + ImGui_ImplVulkan_InitInfo initInfo; + + ImGui_ImplVulkan_Init(&initInfo, VK_NULL_HANDLE); + } + + void SHEditor::ShutdownVulkanBackend() + { + ImGui_ImplVulkan_Shutdown(); + } + + void SHEditor::NewFrame() + { + } + + void SHEditor::SetupWin32Backend() + { + //ImGui_ImplWin32_Init(/*hwnd*/); + } + + void SHEditor::ShutdownWin32Backend() + { + } +} diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h new file mode 100644 index 00000000..a3b03421 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -0,0 +1,25 @@ +#pragma once + +namespace SHADE +{ + class SHEditor + { + public: + + static void Initialize(); + + static void Update(); + + static void Render(); + + static void Exit(); + + private: + static void SetupWin32Backend(); + static void ShutdownWin32Backend(); + static void SetupVulkanBackend(); + static void ShutdownVulkanBackend(); + + static void NewFrame(); + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditorBackend.h b/SHADE_Engine/src/Editor/SHEditorBackend.h new file mode 100644 index 00000000..29a19f86 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditorBackend.h @@ -0,0 +1,3 @@ +#pragma once +#include +#include \ No newline at end of file From 28ab89cf91ea04a3d47cb6770266e578e10248d8 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 8 Sep 2022 20:34:44 +0800 Subject: [PATCH 003/793] set up backend functions --- SHADE_Engine/src/Editor/SHEditor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 17b09291..79043aeb 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -25,7 +25,7 @@ namespace SHADE void SHEditor::Render() { - ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), ) + //ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), ) } void SHEditor::Exit() @@ -38,7 +38,7 @@ namespace SHADE void SHEditor::SetupVulkanBackend() { ImGui_ImplVulkan_InitInfo initInfo; - + //initInfo.Device = ImGui_ImplVulkan_Init(&initInfo, VK_NULL_HANDLE); } From cecbca26c5c94bf563535e85512a29083d4e3d41 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 8 Sep 2022 20:55:56 +0800 Subject: [PATCH 004/793] Fixed some warnings in ResourceLibrary and SparseSet --- SHADE_Engine/src/Resource/Handle.h | 2 +- SHADE_Engine/src/Resource/ResourceLibrary.h | 2 +- SHADE_Engine/src/Resource/ResourceLibrary.hpp | 8 ++++---- SHADE_Engine/src/Resource/SparseSet.hpp | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/Handle.h index 34662112..afaec8e1 100644 --- a/SHADE_Engine/src/Resource/Handle.h +++ b/SHADE_Engine/src/Resource/Handle.h @@ -139,7 +139,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - ResourceLibrary* library; + ResourceLibrary* library = nullptr; /*-----------------------------------------------------------------------------*/ /* Friend Declarations */ diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.h b/SHADE_Engine/src/Resource/ResourceLibrary.h index b05dc499..01a78d16 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.h +++ b/SHADE_Engine/src/Resource/ResourceLibrary.h @@ -69,7 +69,7 @@ namespace SHADE /* Helper Functions */ /*-----------------------------------------------------------------------------*/ void assertHandleValid(Handle handle) const; - int getAvailableFreeIndex(); + uint32_t getAvailableFreeIndex(); }; /// diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.hpp b/SHADE_Engine/src/Resource/ResourceLibrary.hpp index 2ad856c6..9aa72ead 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.hpp +++ b/SHADE_Engine/src/Resource/ResourceLibrary.hpp @@ -35,13 +35,13 @@ namespace SHADE } else { - handle.id.Data.Version = 0; - versionCounts.insert(handle.id.Data.Index, handle.id.Data.Version); + handle.id.Data.Version = 0U; + versionCounts.insert(static_cast(handle.id.Data.Index), handle.id.Data.Version); } handle.library = this; // Create the resource - [[maybe_unused]] T& obj = objects.insert(handle.id.Data.Index, std::forward(args) ...); + [[maybe_unused]] T& obj = objects.insert(static_cast(handle.id.Data.Index), std::forward(args) ...); // Handling SelfHandle assignment if constexpr (std::is_base_of_v, T>) @@ -89,7 +89,7 @@ namespace SHADE } template - inline int ResourceLibrary::getAvailableFreeIndex() + inline uint32_t ResourceLibrary::getAvailableFreeIndex() { // Get from the free list if present if (!freeList.empty()) diff --git a/SHADE_Engine/src/Resource/SparseSet.hpp b/SHADE_Engine/src/Resource/SparseSet.hpp index 70e15f29..ec89790b 100644 --- a/SHADE_Engine/src/Resource/SparseSet.hpp +++ b/SHADE_Engine/src/Resource/SparseSet.hpp @@ -56,7 +56,7 @@ namespace SHADE throw std::invalid_argument("An element at this index does not exist!"); // Swap with the last element - const int BACK_IDX = denseArray.size() - 1; + const auto BACK_IDX = denseArray.size() - 1; std::swap(denseArray[sparseArray[idx]], denseArray.back()); denseArray.pop_back(); // Update the sparse set by swapping the indices @@ -110,7 +110,7 @@ namespace SHADE // We need to resize the array if (idx >= sparseArray.size()) { - const int NEW_SIZE = idx + 1; + const auto NEW_SIZE = idx + 1; sparseArray.resize(NEW_SIZE, INVALID); inverseSparseArray.resize(NEW_SIZE, INVALID); } @@ -123,7 +123,7 @@ namespace SHADE auto& insertedElem = denseArray.emplace_back(std::forward(args) ...); // Update sparse and inverse sparse arrays - const index_type DENSE_IDX = denseArray.size() - 1; + const auto DENSE_IDX = denseArray.size() - 1; sparseArray[idx] = DENSE_IDX; inverseSparseArray[DENSE_IDX] = idx; From fe6c5be8c60ad0aa82118a2e1d2d3adae208b3f6 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 11:20:38 +0800 Subject: [PATCH 005/793] Graphics System called in application --- SHADE_Application/SHADE_Application.vcxproj | 8 +++--- SHADE_Application/premake5.lua | 8 ++++++ .../src/Application/SBApplication.cpp | 8 ++++++ .../src/Application/SBApplication.h | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 25 +++++++++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.h | 19 +++++++++++--- 6 files changed, 54 insertions(+), 15 deletions(-) diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 11bbb48f..ab1ac84c 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -59,8 +59,8 @@ Use SBpch.h Level4 - _DEBUG;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + NOMINMAX;_DEBUG;%(PreprocessorDefinitions) + ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -79,8 +79,8 @@ Use SBpch.h Level4 - _RELEASE;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + NOMINMAX;_RELEASE;%(PreprocessorDefinitions) + ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) Full true true diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index c10b1002..4f2711e7 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -22,6 +22,9 @@ project "SHADE_Application" includedirs { "%{IncludeDir.spdlog}/include", + "%{IncludeDir.VULKAN}/include", + "%{IncludeDir.VMA}/include", + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", "../SHADE_Engine/src", "src" } @@ -39,6 +42,11 @@ project "SHADE_Application" postbuildcommands { } + + defines + { + "NOMINMAX" + } warnings 'Extra' diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 184b9611..2a4a18af 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -1,5 +1,6 @@ #include "SBpch.h" #include "SBApplication.h" +#include "Engine/ECS_Base/System/SHSystemManager.h" #ifdef SHEDITOR #include "Editor/SHEditor.h" @@ -23,6 +24,11 @@ namespace Sandbox { window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); + SHADE::SHSystemManager::CreateSystem("Graphics System"); + SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem("Graphics System")); + graphicsSystem->SetWindow(&window); + + SHADE::SHSystemManager::Init(); #ifdef SHEDITOR #else @@ -44,6 +50,8 @@ namespace Sandbox void SBApplication::Exit(void) { + SHADE::SHSystemManager::Exit(); + #ifdef SHEDITOR #else #endif diff --git a/SHADE_Application/src/Application/SBApplication.h b/SHADE_Application/src/Application/SBApplication.h index a1bf11eb..94e296b1 100644 --- a/SHADE_Application/src/Application/SBApplication.h +++ b/SHADE_Application/src/Application/SBApplication.h @@ -1,6 +1,7 @@ #ifndef SB_APPLICATION_H #define SB_APPLICATION_H #include +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" //using namespace SHADE; namespace Sandbox diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index ad70a18f..7bc2f9ee 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -25,11 +25,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*---------------------------------------------------------------------------------*/ - SHGraphicsSystem::SHGraphicsSystem(SHWindow& window) + void SHGraphicsSystem::Init(void) { - // Save the SHWindow - this->window = &window; - // Set Up Instance SHVkInstance::Init(true, true, true); @@ -39,10 +36,10 @@ namespace SHADE device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); // Construct surface - surface = device->CreateSurface(window.GetHWND()); + surface = device->CreateSurface(window->GetHWND()); // Construct Swapchain - auto windowDims = window.GetWindowSize(); + auto windowDims = window->GetWindowSize(); swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams { .surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm}, @@ -51,7 +48,7 @@ namespace SHADE .vsyncOn = false, // TODO: Set to true when shipping game }); - window.RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) + window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) { renderContext.SetIsResized(true); }); @@ -127,7 +124,13 @@ namespace SHADE /* RENDERGRAPH END TESTING */ /*-----------------------------------------------------------------------*/ } - SHGraphicsSystem::~SHGraphicsSystem() + + void SHGraphicsSystem::Run(float dt) + { + + } + + void SHGraphicsSystem::Exit(void) { //renderPass.Free(); renderContext.Destroy(); @@ -235,4 +238,10 @@ namespace SHADE void SHGraphicsSystem::RemoveSegment(Handle segment) { } + + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept + { + window = wind; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index e1dff379..322ad98f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/SHVulkanIncludes.h" #include "Graphics/MiddleEnd/PerFrame/SHRenderContext.h" #include "Graphics/RenderGraph/SHRenderGraph.h" +#include "Engine/ECS_Base/System/SHSystem.h" namespace SHADE { @@ -61,7 +62,7 @@ namespace SHADE portions of the screen. */ /***********************************************************************************/ - class SHGraphicsSystem + class SHGraphicsSystem : public SHSystem { public: /*-----------------------------------------------------------------------------*/ @@ -72,8 +73,15 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ - SHGraphicsSystem(SHWindow& window); - ~SHGraphicsSystem(); + SHGraphicsSystem (void) = default; + ~SHGraphicsSystem(void) noexcept = default; + + /*-----------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*-----------------------------------------------------------------------------*/ + virtual void Init(void) override; + virtual void Run (float dt) override; + virtual void Exit(void) override; /*-----------------------------------------------------------------------------*/ /* Lifecycle Functions */ @@ -93,6 +101,11 @@ namespace SHADE Handle AddSegment(const VkViewport& viewport, Handle imageToUse); void RemoveSegment(Handle segment); + /*-----------------------------------------------------------------------------*/ + /* Setters */ + /*-----------------------------------------------------------------------------*/ + void SetWindow (SHWindow* wind) noexcept; + /*-----------------------------------------------------------------------------*/ /* Getters (Temporary) */ /*-----------------------------------------------------------------------------*/ From bed017e5399de35045d7b2de38a2383cb9250b3e Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 13:28:57 +0800 Subject: [PATCH 006/793] Fixed some warnings and premake files now include hpp files --- SHADE_Application/premake5.lua | 3 ++- SHADE_Engine/SHADE_Engine.vcxproj | 3 +++ SHADE_Engine/SHADE_Engine.vcxproj.filters | 9 +++++++++ SHADE_Engine/premake5.lua | 4 ++-- .../src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp | 4 ++-- SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp | 4 ++++ SHADE_Engine/src/Resource/SparseSet.hpp | 2 +- 7 files changed, 23 insertions(+), 6 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 4f2711e7..74a3d0de 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -14,7 +14,8 @@ project "SHADE_Application" files { "%{prj.location}/src/**.h", - "%{prj.location}/src/**.c", + "%{prj.location}/src/**.hpp", + "%{prj.location}/src/**.c", "%{prj.location}/src/**.cpp", "%{prj.location}/src/**.glsl", } diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 71ffb25f..3d1c506f 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -173,8 +173,11 @@ + + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index f38a78a9..ceb9b80f 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -321,12 +321,21 @@ Resource + + Resource + Resource + + Resource + Resource + + Resource + Scene diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index a94284df..fbc800d3 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -12,10 +12,10 @@ project "SHADE_Engine" files { "%{prj.location}/src/**.h", + "%{prj.location}/src/**.hpp", "%{prj.location}/src/**.c", "%{prj.location}/src/**.cpp", - "%{prj.location}/src/**.glsl", - "%{wks.location}/Dependencies/stb_image/**.cpp" + "%{prj.location}/src/**.glsl" } includedirs diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp index 511af8fc..d815fb7e 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp @@ -180,10 +180,10 @@ namespace SHADE return; } - SHLOG_ERROR("Successfully queried Physical Devices:"); + SHLOG_TRACE("Successfully queried Physical Devices:"); for (auto const& device : physicalDevices) { - SHLOG_ERROR(std::string_view (std::string("\t-") + GetDeviceTypeName(device.getProperties().deviceType) + device.getProperties().deviceName.operator std::string())); + SHLOG_TRACE(std::string_view (std::string("\t-") + GetDeviceTypeName(device.getProperties().deviceType) + device.getProperties().deviceName.operator std::string())); } } } diff --git a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp index 4dd6f9d6..f46d5d17 100644 --- a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp +++ b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp @@ -19,10 +19,14 @@ namespace SHADE vkPresentModes = physicalDeviceHdl->GetVkPhysicalDevice().getSurfacePresentModesKHR(surfaceHdl->GetVkSurface()); if (vkSurfaceFormats.size() == 0) + { SHLOG_ERROR("Failed to get surface formats from the physical device. "); + } if (vkPresentModes.size() == 0) + { SHLOG_ERROR("Failed to get present modes from the physical device. "); + } } vk::SurfaceFormatKHR SHVkSwapchain::ChooseSwapSurfaceFormat(std::vector const& surfaceFormats) const noexcept diff --git a/SHADE_Engine/src/Resource/SparseSet.hpp b/SHADE_Engine/src/Resource/SparseSet.hpp index ec89790b..5afcdee7 100644 --- a/SHADE_Engine/src/Resource/SparseSet.hpp +++ b/SHADE_Engine/src/Resource/SparseSet.hpp @@ -123,7 +123,7 @@ namespace SHADE auto& insertedElem = denseArray.emplace_back(std::forward(args) ...); // Update sparse and inverse sparse arrays - const auto DENSE_IDX = denseArray.size() - 1; + const auto DENSE_IDX = static_cast(denseArray.size()) - 1; sparseArray[idx] = DENSE_IDX; inverseSparseArray[DENSE_IDX] = idx; From 94a358995a07b7c2ca8e937f2669b83dea73a164 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 13:32:55 +0800 Subject: [PATCH 007/793] Window is rendering black screen --- SHADE_Application/src/Application/SBApplication.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 2a4a18af..69662415 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -38,13 +38,17 @@ namespace Sandbox void SBApplication::Update(void) { + SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem("Graphics System")); + //TODO: Change true to window is open while (!window.WindowShouldClose()) { + graphicsSystem->BeginRender(); #ifdef SHEDITOR #else #endif - } + graphicsSystem->EndRender(); + } } From 78f8a9e4559c25daef4dda9e9c8a98a61e25588d Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 13:55:00 +0800 Subject: [PATCH 008/793] Getter for physical device --- SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 322ad98f..9b867744 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -112,6 +112,7 @@ namespace SHADE Handle GetDevice() const { return device; } Handle GetSwapchain() const { return swapchain; } Handle GetSurface() const { return surface; } + Handle GetPhysicalDevice() const {return physicalDevice;} //Handle GetRenderPass() const { return renderPass; } From fe954271cba7efcfd46ec9a6945e86acd8c94927 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 14:02:48 +0800 Subject: [PATCH 009/793] Getter for queue --- SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 9b867744..c3c94a6f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -113,6 +113,7 @@ namespace SHADE Handle GetSwapchain() const { return swapchain; } Handle GetSurface() const { return surface; } Handle GetPhysicalDevice() const {return physicalDevice;} + Handle GetQueue () const {return queue;} //Handle GetRenderPass() const { return renderPass; } From d7954245d66dd84e6d43c88125eeca833b28c434 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 14:21:13 +0800 Subject: [PATCH 010/793] Created a descriptor pool for Graphics System --- .../Descriptors/SHVkDescriptorPool.cpp | 70 ++++++++++++------- .../Graphics/Descriptors/SHVkDescriptorPool.h | 4 +- .../Graphics/Devices/SHVkLogicalDevice.cpp | 6 ++ .../src/Graphics/Devices/SHVkLogicalDevice.h | 3 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 + .../MiddleEnd/Interface/SHGraphicsSystem.h | 5 +- 6 files changed, 61 insertions(+), 29 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp index 87d43255..77663ab8 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp @@ -7,32 +7,52 @@ namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructor */ - /*---------------------------------------------------------------------------------*/ - SHVkDescriptorPool::SHVkDescriptorPool(Handle device, const Config& config) - : device { device } + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructor */ + /*---------------------------------------------------------------------------------*/ + SHVkDescriptorPool::SHVkDescriptorPool(Handle device, const Config& config) + : device{ device } + { + // Create the Pool + const vk::DescriptorPoolCreateInfo POOL_CREATE_INFO { - // Create the Pool - const vk::DescriptorPoolCreateInfo POOL_CREATE_INFO - { - .flags = config.Flags, - .maxSets = config.MaxSets, - .poolSizeCount = static_cast(config.Limits.size()), - .pPoolSizes = config.Limits.data() - }; - pool = device->GetVkLogicalDevice().createDescriptorPool(POOL_CREATE_INFO); - } + .flags = config.Flags, + .maxSets = config.MaxSets, + .poolSizeCount = static_cast(config.Limits.size()), + .pPoolSizes = config.Limits.data() + }; + pool = device->GetVkLogicalDevice().createDescriptorPool(POOL_CREATE_INFO); + } - SHVkDescriptorPool::~SHVkDescriptorPool() noexcept - { - if (pool) - device->GetVkLogicalDevice().destroyDescriptorPool(pool); - } + SHVkDescriptorPool::SHVkDescriptorPool(SHVkDescriptorPool&& rhs) noexcept + : device{ rhs.device } + , pool{ rhs.pool } + { + rhs.pool = VK_NULL_HANDLE; + } - std::vector> SHVkDescriptorPool::Allocate(const std::vector>& layouts, std::vector const& variableDescCounts) - { - SHVkInstance::GetResourceManager().Create(device, GetHandle(), layouts, variableDescCounts); - return {}; - } + SHVkDescriptorPool::~SHVkDescriptorPool() noexcept + { + if (pool) + device->GetVkLogicalDevice().destroyDescriptorPool(pool); + } + + SHVkDescriptorPool& SHVkDescriptorPool::operator=(SHVkDescriptorPool&& rhs) noexcept + { + if (&rhs == this) + return *this; + + device = rhs.device; + pool = rhs.pool; + + rhs.pool = VK_NULL_HANDLE; + + return *this; + } + + std::vector> SHVkDescriptorPool::Allocate(const std::vector>& layouts, std::vector const& variableDescCounts) + { + SHVkInstance::GetResourceManager().Create(device, GetHandle(), layouts, variableDescCounts); + return {}; + } } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index c3059b8b..9314d940 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -65,7 +65,7 @@ namespace SHADE /// SHVkDescriptorPool(Handle device, const Config& config = {}); SHVkDescriptorPool(const SHVkDescriptorPool&) = delete; - SHVkDescriptorPool(SHVkDescriptorPool&& rhs) noexcept = default; + SHVkDescriptorPool(SHVkDescriptorPool&& rhs) noexcept; /// /// Destructor which will unload and deallocate all resources for this Pool. /// @@ -75,7 +75,7 @@ namespace SHADE /* Overloaded Operators */ /*-----------------------------------------------------------------------------*/ SHVkDescriptorPool& operator=(const SHVkDescriptorPool&) = delete; - SHVkDescriptorPool& operator=(SHVkDescriptorPool&& rhs) noexcept = default; + SHVkDescriptorPool& operator=(SHVkDescriptorPool&& rhs) noexcept; /*-----------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index aa442805..0fa1c864 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -509,6 +509,12 @@ namespace SHADE } + Handle SHVkLogicalDevice::CreateDescriptorPools(const SHVkDescriptorPool::Config& config /*= {}*/) noexcept + { + return SHVkInstance::GetResourceManager().Create (GetHandle(), config); + + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index b8eec993..78108b94 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -17,7 +17,7 @@ #include "Graphics/Pipeline/SHPipelineState.h" #include "Graphics/Pipeline/SHPipelineType.h" #include "vk_mem_alloc.h" -//#include "Graphics/DescriptorSets/SHDescriptorPool.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" namespace SHADE @@ -165,6 +165,7 @@ namespace SHADE Handle CreateRenderpass (std::span const vkDescriptions, std::span const spDescs, std::span const spDeps) noexcept; Handle CreateFramebuffer (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; Handle CreateDescriptorSetLayout (std::vector const& bindings) noexcept; + Handle CreateDescriptorPools (const SHVkDescriptorPool::Config& config = {}) noexcept; Handle CreatePipelineLayout (SHPipelineLayoutParams& pipelineLayoutParams) noexcept; Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7bc2f9ee..9c395c9d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -86,6 +86,8 @@ namespace SHADE + descPool = device->CreateDescriptorPools(); + /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index c3c94a6f..fabef927 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/PerFrame/SHRenderContext.h" #include "Graphics/RenderGraph/SHRenderGraph.h" #include "Engine/ECS_Base/System/SHSystem.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" namespace SHADE { @@ -113,7 +114,8 @@ namespace SHADE Handle GetSwapchain() const { return swapchain; } Handle GetSurface() const { return surface; } Handle GetPhysicalDevice() const {return physicalDevice;} - Handle GetQueue () const {return queue;} + Handle GetQueue() const { return queue; } + Handle GetDescriptorPool() const { return descPool; } //Handle GetRenderPass() const { return renderPass; } @@ -127,6 +129,7 @@ namespace SHADE Handle surface; Handle swapchain; Handle queue; + Handle descPool; //Handle renderPass; // Potentially bring out? std::vector screenSegments; SHRenderContext renderContext; From ae372f29171c403d6ad78caaa5f509a97d1ce244 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 14:34:09 +0800 Subject: [PATCH 011/793] Getter for renderpass in render node --- .../Graphics/RenderGraph/SHRenderGraph.cpp | 24 +++++++++++++++++++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 10 ++++++++ 2 files changed, 34 insertions(+) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index a86913e4..68af135f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -517,6 +517,22 @@ namespace SHADE return subpasses.at(subpassIndexing[subpassName]); } + /***************************************************************************/ + /*! + + \brief + Get the renderpass from the node. + + \return + Handle to the renderpass. + + */ + /***************************************************************************/ + Handle SHRenderGraphNode::GetRenderpass(void) const noexcept + { + return renderpass; + } + /***************************************************************************/ /*! @@ -938,4 +954,12 @@ namespace SHADE ConfigureFramebuffers(); } + Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept + { + if (nodeIndexing.contains(nodeName)) + return nodes[nodeIndexing.at(nodeName)]; + + return {}; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index f81e84bd..dc6b7c42 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -180,6 +180,11 @@ namespace SHADE /*-----------------------------------------------------------------------*/ Handle AddSubpass (std::string subpassName) noexcept; + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + Handle GetRenderpass (void) const noexcept; + friend class SHRenderGraph; }; @@ -227,6 +232,11 @@ namespace SHADE void AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint32_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; + + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + Handle GetNode (std::string const& nodeName) const noexcept; }; } From 361237ede16ec120c2dd8de43b2586868986c59b Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 14:38:09 +0800 Subject: [PATCH 012/793] GETTER FOR RENDER GRAPH --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 5 +++++ .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 9c395c9d..d9761adf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -246,4 +246,9 @@ namespace SHADE window = wind; } + SHRenderGraph const& SHGraphicsSystem::GetRenderGraph(void) const noexcept + { + return renderGraph; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index fabef927..27d03fd3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -116,6 +116,8 @@ namespace SHADE Handle GetPhysicalDevice() const {return physicalDevice;} Handle GetQueue() const { return queue; } Handle GetDescriptorPool() const { return descPool; } + SHRenderGraph const& GetRenderGraph (void) const noexcept; + //Handle GetRenderPass() const { return renderPass; } From 09c1d2654dd4271a44f6a0bc201fbdcba43f66e6 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 9 Sep 2022 16:02:34 +0800 Subject: [PATCH 013/793] WIP --- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 8 ++++++++ SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 68af135f..4ad29f73 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -954,6 +954,14 @@ namespace SHADE ConfigureFramebuffers(); } + void SHRenderGraph::Execute(void) noexcept + { + for (auto& node : nodes) + { + + } + } + Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept { if (nodeIndexing.contains(nodeName)) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index dc6b7c42..7ba49e84 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -228,10 +228,11 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; - void AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint32_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); - Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; - void Generate (void) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; + void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint32_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); + Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; + void Generate (void) noexcept; + void Execute (void) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From a8d00a29ec2c20298b4be831ee0c75b18bffc0b1 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 9 Sep 2022 16:04:49 +0800 Subject: [PATCH 014/793] [WIP] Editor: ImGui-Vulkan integration --- .../src/Application/SBApplication.cpp | 13 +++- SHADE_Engine/SHADE_Engine.vcxproj | 3 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 12 +++ SHADE_Engine/src/Editor/SHEditor.cpp | 73 +++++++++++++++++-- SHADE_Engine/src/Editor/SHEditor.h | 12 ++- 5 files changed, 100 insertions(+), 13 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 69662415..d7c71422 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -2,9 +2,10 @@ #include "SBApplication.h" #include "Engine/ECS_Base/System/SHSystemManager.h" +#define SHEDITOR #ifdef SHEDITOR #include "Editor/SHEditor.h" -#include "Scenes/SBEditorScene.h" +//#include "Scenes/SBEditorScene.h" #endif // SHEDITOR #include @@ -29,8 +30,8 @@ namespace Sandbox graphicsSystem->SetWindow(&window); SHADE::SHSystemManager::Init(); - #ifdef SHEDITOR + SHADE::SHEditor::Initialize(window.GetHWND()); #else #endif @@ -43,9 +44,14 @@ namespace Sandbox //TODO: Change true to window is open while (!window.WindowShouldClose()) { + #ifdef SHEDITOR + //SHADE::SHEditor::PreRender(); + #endif graphicsSystem->BeginRender(); #ifdef SHEDITOR - #else + SHADE::SHEditor::PreRender(); + SHADE::SHEditor::Update(); + SHADE::SHEditor::Render(); #endif graphicsSystem->EndRender(); } @@ -54,6 +60,7 @@ namespace Sandbox void SBApplication::Exit(void) { + //SHADE::SHEditor::Exit(); SHADE::SHSystemManager::Exit(); #ifdef SHEDITOR diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 3d1c506f..3d673b09 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -102,6 +102,8 @@ + + @@ -186,6 +188,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index ceb9b80f..e26cacc4 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -1,6 +1,9 @@ + + {8C1A20B0-78BC-4A86-6177-5EDA4DB8D1D6} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -108,6 +111,12 @@ + + Editor + + + Editor + Engine\ECS_Base\Components @@ -354,6 +363,9 @@ + + Editor + Engine\ECS_Base\Components diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 79043aeb..b3bac9d1 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -2,16 +2,41 @@ #include "SHEditor.h" #include "SHEditorBackend.h" +#include +#include + +#include +#include +#include +#include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Graphics/Debugging/SHVulkanDebugUtil.h" + +#include "Tools/SHLogger.h" + namespace SHADE { - void SHEditor::Initialize() + Handle SHEditor::cmdPool; + Handle SHEditor::cmdBuffer; + + void SHEditor::Initialize(HWND hwnd) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); - SetupWin32Backend(); + SetupWin32Backend(hwnd); SetupVulkanBackend(); + //ImGuiIO& io = ImGui::GetIO(); + + //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; + //io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; + + } + + void SHEditor::PreRender() + { + cmdPool->Reset(); } void SHEditor::Update() @@ -19,13 +44,21 @@ namespace SHADE NewFrame(); //Add all windows to draw list, Perform necessary updates + ImGui::ShowDemoWindow(); ImGui::Render(); } void SHEditor::Render() { - //ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), ) + ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmdBuffer->GetVkCommandBuffer()); + + ImGuiIO& io = ImGui::GetIO(); + if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } } void SHEditor::Exit() @@ -38,8 +71,31 @@ namespace SHADE void SHEditor::SetupVulkanBackend() { ImGui_ImplVulkan_InitInfo initInfo; - //initInfo.Device = - ImGui_ImplVulkan_Init(&initInfo, VK_NULL_HANDLE); + + initInfo.Instance = SHVkInstance::GetVkInstance(); + auto gfxSystem = reinterpret_cast(SHSystemManager::GetSystem("Graphics System")); + initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice(); + initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice(); + initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue(); + initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages(); + initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle(); + initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; + initInfo.Allocator = nullptr; + initInfo.PipelineCache = nullptr; + initInfo.Subpass = 0; + initInfo.CheckVkResultFn = [](VkResult err) + { + if (err == VK_SUCCESS) + return; + SHVulkanDebugUtil::ReportVkError(vk::Result(err), "Editor Error"); + }; + + ImGui_ImplVulkan_Init(&initInfo, gfxSystem->GetRenderGraph().GetNode("G-Buffer")->GetRenderpass()->GetVkRenderpass()); + + cmdPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + cmdBuffer = cmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + + ImGui_ImplVulkan_CreateFontsTexture(cmdBuffer->GetVkCommandBuffer()); } void SHEditor::ShutdownVulkanBackend() @@ -49,11 +105,14 @@ namespace SHADE void SHEditor::NewFrame() { + ImGui_ImplWin32_NewFrame(); + ImGui_ImplVulkan_NewFrame(); + ImGui::NewFrame(); } - void SHEditor::SetupWin32Backend() + void SHEditor::SetupWin32Backend(HWND hwnd) { - //ImGui_ImplWin32_Init(/*hwnd*/); + ImGui_ImplWin32_Init(hwnd); } void SHEditor::ShutdownWin32Backend() diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index a3b03421..be83e22b 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -1,4 +1,5 @@ #pragma once +#include "Graphics/Commands/SHVkCommandPool.h" namespace SHADE { @@ -6,7 +7,9 @@ namespace SHADE { public: - static void Initialize(); + static void Initialize(HWND hwnd); + + static void PreRender(); static void Update(); @@ -15,11 +18,14 @@ namespace SHADE static void Exit(); private: - static void SetupWin32Backend(); + static void SetupWin32Backend(HWND hwnd); static void ShutdownWin32Backend(); static void SetupVulkanBackend(); static void ShutdownVulkanBackend(); static void NewFrame(); + + static Handle cmdPool; + static Handle cmdBuffer; }; -} \ No newline at end of file +} From 4b8c842615dd4708a62b55de7b5abcd1b4a0e984 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 9 Sep 2022 21:46:30 +0800 Subject: [PATCH 015/793] [WIP] SHADE ImGui Vulkan Backend --- SHADE_Engine/SHADE_Engine.vcxproj | 2 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 2 + .../Editor/Backend/SHImGuiVulkanBackend.cpp | 613 ++++++++++++++++++ .../src/Editor/Backend/SHImGuiVulkanBackend.h | 62 ++ SHADE_Engine/src/Editor/SHEditor.cpp | 22 +- 5 files changed, 693 insertions(+), 8 deletions(-) create mode 100644 SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp create mode 100644 SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 3d673b09..cd596fc6 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -102,6 +102,7 @@ + @@ -188,6 +189,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index e26cacc4..d890c070 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -361,6 +361,7 @@ Tools + @@ -541,5 +542,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp new file mode 100644 index 00000000..63fd39b8 --- /dev/null +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -0,0 +1,613 @@ + +#include +#include + +#include + +#include "SHImGuiVulkanBackend.h" + +#include + + +#include "Tools/SHLogger.h" +namespace SHADE +{ +#define GETINSTANCE \ + ImGuiIO& io = ImGui::GetIO(); \ + SHBreachInstance& instance = *reinterpret_cast(io.UserData); + + /* + #==============================================================# + || Embedded Shaders || + #==============================================================# + */ + // glsl_shader.vert, compiled with: + // # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert + /* + #version 450 core + layout(location = 0) in vec2 aPos; + layout(location = 1) in vec2 aUV; + layout(location = 2) in vec4 aColor; + layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc; + + out gl_PerVertex { vec4 gl_Position; }; + layout(location = 0) out struct { vec4 Color; vec2 UV; } Out; + + void main() + { + Out.Color = aColor; + Out.UV = aUV; + gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); + } + */ + static uint32_t __glsl_shader_vert_spv[] = + { + 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, + 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, + 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, + 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, + 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, + 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, + 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, + 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, + 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, + 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, + 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, + 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, + 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, + 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, + 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, + 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, + 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, + 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, + 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, + 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, + 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, + 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, + 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, + 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, + 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, + 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, + 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, + 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, + 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, + 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, + 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, + 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, + 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, + 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, + 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, + 0x0000002d,0x0000002c,0x000100fd,0x00010038 + }; + + // glsl_shader.frag, compiled with: + // # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag + /* + #version 450 core + layout(location = 0) out vec4 fColor; + layout(set=0, binding=0) uniform sampler2D sTexture; + layout(location = 0) in struct { vec4 Color; vec2 UV; } In; + void main() + { + fColor = In.Color * texture(sTexture, In.UV.st); + } + */ + static uint32_t __glsl_shader_frag_spv[] = + { + 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000d,0x00030010, + 0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00040005,0x00000009,0x6c6f4366,0x0000726f,0x00030005,0x0000000b,0x00000000, + 0x00050006,0x0000000b,0x00000000,0x6f6c6f43,0x00000072,0x00040006,0x0000000b,0x00000001, + 0x00005655,0x00030005,0x0000000d,0x00006e49,0x00050005,0x00000016,0x78655473,0x65727574, + 0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,0x0000001e, + 0x00000000,0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021, + 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003, + 0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040017,0x0000000a,0x00000006, + 0x00000002,0x0004001e,0x0000000b,0x00000007,0x0000000a,0x00040020,0x0000000c,0x00000001, + 0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040015,0x0000000e,0x00000020, + 0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000001, + 0x00000007,0x00090019,0x00000013,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x0003001b,0x00000014,0x00000013,0x00040020,0x00000015,0x00000000, + 0x00000014,0x0004003b,0x00000015,0x00000016,0x00000000,0x0004002b,0x0000000e,0x00000018, + 0x00000001,0x00040020,0x00000019,0x00000001,0x0000000a,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000010,0x00000011,0x0000000d, + 0x0000000f,0x0004003d,0x00000007,0x00000012,0x00000011,0x0004003d,0x00000014,0x00000017, + 0x00000016,0x00050041,0x00000019,0x0000001a,0x0000000d,0x00000018,0x0004003d,0x0000000a, + 0x0000001b,0x0000001a,0x00050057,0x00000007,0x0000001c,0x00000017,0x0000001b,0x00050085, + 0x00000007,0x0000001d,0x00000012,0x0000001c,0x0003003e,0x00000009,0x0000001d,0x000100fd, + 0x00010038 + }; + + /* + #==============================================================# + || ImGui Push Constants || + #==============================================================# + */ + struct ImGui_Push_Constants + { + std::array scale; + std::array translate; + }; + + void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice) noexcept + { + if (ImGui::GetCurrentContext() == nullptr) + { + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + } + else { SHLOG_WARNING("ImGui context already exists") }; + + ImGuiIO& io = ImGui::GetIO(); + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking + io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows + io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. + //io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; // We can create multi-viewports on the Renderer side (optional) + //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) + io.BackendRendererName = "SHImGuiVulkanBackend"; + + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + ImGuiPlatformIO& platformIO = ImGui::GetPlatformIO(); + platformIO.Renderer_CreateWindow = CreateChildWindow; + platformIO.Renderer_DestroyWindow = DestroyChildWindow; + platformIO.Renderer_SetWindowSize = SetChildWindowSize; + platformIO.Renderer_RenderWindow = RenderChildWindow; + platformIO.Renderer_SwapBuffers = ChildSwapBuffers; + + platformIO.Platform_CreateWindow = CreateChildWindow; + platformIO.Platform_DestroyWindow = DestroyChildWindow; + platformIO.Platform_ShowWindow = [](ImGuiViewport* pViewport) {}; + platformIO.Platform_SetWindowPos = SetChildWindowPos; + platformIO.Platform_GetWindowPos = GetChildWindowPos; + platformIO.Platform_SetWindowSize = SetChildWindowSize; + platformIO.Platform_GetWindowSize = GetChildWindowSize; + //platform_io.Platform_SetWindowFocus = ImGui_ImplGlfw_SetWindowFocus; + //platform_io.Platform_GetWindowFocus = ImGui_ImplGlfw_GetWindowFocus; + //platform_io.Platform_GetWindowMinimized = ImGui_ImplGlfw_GetWindowMinimized; + platformIO.Platform_SetWindowTitle = [](ImGuiViewport* pViewport, const char*) {}; + platformIO.Platform_RenderWindow = RenderChildWindow; + platformIO.Platform_SwapBuffers = ChildSwapBuffers; + + platformIO.Monitors.resize(0); + ImGuiPlatformMonitor monitor; + monitor.MainPos = monitor.WorkPos = {}; + monitor.MainSize = monitor.WorkSize = {}; + platformIO.Monitors.push_back(monitor); + }//if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + + //associate io keymap with engine input keymap + + //Initialize instance + auto instance = std::make_unique(); + instance->InitializePipeline(io); + instance->lastFrameTime = std::chrono::high_resolution_clock::now(); + io.UserData = instance.release(); + + ImGuiViewport* viewport = ImGui::GetMainViewport(); + viewport->RendererUserData = io.UserData; + viewport->PlatformHandle = io.UserData; + } + + void SHImGuiVulkanBackend::Render(void) noexcept + { + ImGui::Render(); + ImDrawData* drawData = ImGui::GetDrawData(); + //TODO: instance draw data + } + + void SHImGuiVulkanBackend::CreateChildWindow(ImGuiViewport* viewport) noexcept + { + GETINSTANCE + + auto& info = *new SHImGuiWindow{ instance.device }; + viewport->RendererUserData = &info; + } + + void SHImGuiVulkanBackend::DestroyChildWindow(ImGuiViewport* viewport) noexcept + { + GETINSTANCE + + auto info = reinterpret_cast(viewport->RendererUserData); + delete info; + viewport->RendererUserData = nullptr; + } + + ImVec2 SHImGuiVulkanBackend::GetChildWindowSize(ImGuiViewport* viewport) noexcept + { + auto info = reinterpret_cast(viewport->RendererUserData); + return{}; + } + + void SHImGuiVulkanBackend::SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept + { + + } + + ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept + { + } + + void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept + { + } + + void SHImGuiVulkanBackend::RenderChildWindow(ImGuiViewport* viewport, void*) noexcept + { + } + + void SHImGuiVulkanBackend::ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept + { + } + + + void SHImGuiVulkanBackend::SHImGuiWindow::InitializeBuffers(void) noexcept + { + for (auto& primBuffer : primitiveBuffers) + { + primBuffer.vertexBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawVert) * 3000, + nullptr, + sizeof(ImDrawVert) * 3000, + vk::BufferUsageFlagBits::eVertexBuffer, + VMA_MEMORY_USAGE_AUTO, + VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags + + primBuffer.indicesBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawIdx) * 3000, + nullptr, + sizeof(ImDrawIdx) * 3000, + vk::BufferUsageFlagBits::eIndexBuffer, + VMA_MEMORY_USAGE_AUTO, + VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags + + } + } + + + + void SHImGuiVulkanBackend::SHBreachInstance::CreateFontsTexture(Handle image, ImGuiIO& io) noexcept + { + // Build texture atlas + unsigned char* pixels; + int width, height; + + // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. + // If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. + io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); + + + + // Create the texture in xgpu + { + std::array Mip{ height * width * sizeof(std::uint32_t) }; + xgpu::texture::setup Setup; + + Setup.m_Height = height; + Setup.m_Width = width; + Setup.m_MipChain = Mip; + Setup.m_Data = { reinterpret_cast(pixels), Mip[0].m_Size }; + + if (auto Err = m_Device.Create(Texture, Setup); Err) + return Err; + } + + // We could put here the texture id if we wanted + io.Fonts->TexID = nullptr; + + return nullptr; + + } +} +#include +#include + +#include + +#include "SHImGuiVulkanBackend.h" + +#include + + +#include "Tools/SHLogger.h" +namespace SHADE +{ +#define GETINSTANCE \ + ImGuiIO& io = ImGui::GetIO(); \ + SHBreachInstance& instance = *reinterpret_cast(io.UserData); + + /* + #==============================================================# + || Embedded Shaders || + #==============================================================# + */ + // glsl_shader.vert, compiled with: + // # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert + /* + #version 450 core + layout(location = 0) in vec2 aPos; + layout(location = 1) in vec2 aUV; + layout(location = 2) in vec4 aColor; + layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc; + + out gl_PerVertex { vec4 gl_Position; }; + layout(location = 0) out struct { vec4 Color; vec2 UV; } Out; + + void main() + { + Out.Color = aColor; + Out.UV = aUV; + gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); + } + */ + static uint32_t __glsl_shader_vert_spv[] = + { + 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, + 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, + 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, + 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, + 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, + 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, + 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, + 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, + 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, + 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, + 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, + 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, + 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, + 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, + 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, + 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, + 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, + 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, + 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, + 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, + 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, + 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, + 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, + 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, + 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, + 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, + 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, + 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, + 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, + 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, + 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, + 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, + 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, + 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, + 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, + 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, + 0x0000002d,0x0000002c,0x000100fd,0x00010038 + }; + + // glsl_shader.frag, compiled with: + // # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag + /* + #version 450 core + layout(location = 0) out vec4 fColor; + layout(set=0, binding=0) uniform sampler2D sTexture; + layout(location = 0) in struct { vec4 Color; vec2 UV; } In; + void main() + { + fColor = In.Color * texture(sTexture, In.UV.st); + } + */ + static uint32_t __glsl_shader_frag_spv[] = + { + 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, + 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000d,0x00030010, + 0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x00000000,0x00040005,0x00000009,0x6c6f4366,0x0000726f,0x00030005,0x0000000b,0x00000000, + 0x00050006,0x0000000b,0x00000000,0x6f6c6f43,0x00000072,0x00040006,0x0000000b,0x00000001, + 0x00005655,0x00030005,0x0000000d,0x00006e49,0x00050005,0x00000016,0x78655473,0x65727574, + 0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,0x0000001e, + 0x00000000,0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021, + 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, + 0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003, + 0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040017,0x0000000a,0x00000006, + 0x00000002,0x0004001e,0x0000000b,0x00000007,0x0000000a,0x00040020,0x0000000c,0x00000001, + 0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040015,0x0000000e,0x00000020, + 0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000001, + 0x00000007,0x00090019,0x00000013,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x0003001b,0x00000014,0x00000013,0x00040020,0x00000015,0x00000000, + 0x00000014,0x0004003b,0x00000015,0x00000016,0x00000000,0x0004002b,0x0000000e,0x00000018, + 0x00000001,0x00040020,0x00000019,0x00000001,0x0000000a,0x00050036,0x00000002,0x00000004, + 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000010,0x00000011,0x0000000d, + 0x0000000f,0x0004003d,0x00000007,0x00000012,0x00000011,0x0004003d,0x00000014,0x00000017, + 0x00000016,0x00050041,0x00000019,0x0000001a,0x0000000d,0x00000018,0x0004003d,0x0000000a, + 0x0000001b,0x0000001a,0x00050057,0x00000007,0x0000001c,0x00000017,0x0000001b,0x00050085, + 0x00000007,0x0000001d,0x00000012,0x0000001c,0x0003003e,0x00000009,0x0000001d,0x000100fd, + 0x00010038 + }; + + /* + #==============================================================# + || ImGui Push Constants || + #==============================================================# + */ + struct ImGui_Push_Constants + { + std::array scale; + std::array translate; + }; + + void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice) noexcept + { + if (ImGui::GetCurrentContext() == nullptr) + { + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + } + else { SHLOG_WARNING("ImGui context already exists") }; + + ImGuiIO& io = ImGui::GetIO(); + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking + io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows + io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. + //io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; // We can create multi-viewports on the Renderer side (optional) + //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) + io.BackendRendererName = "SHImGuiVulkanBackend"; + + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + ImGuiPlatformIO& platformIO = ImGui::GetPlatformIO(); + platformIO.Renderer_CreateWindow = CreateChildWindow; + platformIO.Renderer_DestroyWindow = DestroyChildWindow; + platformIO.Renderer_SetWindowSize = SetChildWindowSize; + platformIO.Renderer_RenderWindow = RenderChildWindow; + platformIO.Renderer_SwapBuffers = ChildSwapBuffers; + + platformIO.Platform_CreateWindow = CreateChildWindow; + platformIO.Platform_DestroyWindow = DestroyChildWindow; + platformIO.Platform_ShowWindow = [](ImGuiViewport* pViewport) {}; + platformIO.Platform_SetWindowPos = SetChildWindowPos; + platformIO.Platform_GetWindowPos = GetChildWindowPos; + platformIO.Platform_SetWindowSize = SetChildWindowSize; + platformIO.Platform_GetWindowSize = GetChildWindowSize; + //platform_io.Platform_SetWindowFocus = ImGui_ImplGlfw_SetWindowFocus; + //platform_io.Platform_GetWindowFocus = ImGui_ImplGlfw_GetWindowFocus; + //platform_io.Platform_GetWindowMinimized = ImGui_ImplGlfw_GetWindowMinimized; + platformIO.Platform_SetWindowTitle = [](ImGuiViewport* pViewport, const char*) {}; + platformIO.Platform_RenderWindow = RenderChildWindow; + platformIO.Platform_SwapBuffers = ChildSwapBuffers; + + platformIO.Monitors.resize(0); + ImGuiPlatformMonitor monitor; + monitor.MainPos = monitor.WorkPos = {}; + monitor.MainSize = monitor.WorkSize = {}; + platformIO.Monitors.push_back(monitor); + }//if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + + //associate io keymap with engine input keymap + + //Initialize instance + auto instance = std::make_unique(); + instance->InitializePipeline(io); + instance->lastFrameTime = std::chrono::high_resolution_clock::now(); + io.UserData = instance.release(); + + ImGuiViewport* viewport = ImGui::GetMainViewport(); + viewport->RendererUserData = io.UserData; + viewport->PlatformHandle = io.UserData; + } + + void SHImGuiVulkanBackend::Render(void) noexcept + { + ImGui::Render(); + ImDrawData* drawData = ImGui::GetDrawData(); + //TODO: instance draw data + } + + void SHImGuiVulkanBackend::CreateChildWindow(ImGuiViewport* viewport) noexcept + { + GETINSTANCE + + auto& info = *new SHImGuiWindow{ instance.device }; + viewport->RendererUserData = &info; + } + + void SHImGuiVulkanBackend::DestroyChildWindow(ImGuiViewport* viewport) noexcept + { + GETINSTANCE + + auto info = reinterpret_cast(viewport->RendererUserData); + delete info; + viewport->RendererUserData = nullptr; + } + + ImVec2 SHImGuiVulkanBackend::GetChildWindowSize(ImGuiViewport* viewport) noexcept + { + auto info = reinterpret_cast(viewport->RendererUserData); + return{}; + } + + void SHImGuiVulkanBackend::SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept + { + + } + + ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept + { + } + + void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept + { + } + + void SHImGuiVulkanBackend::RenderChildWindow(ImGuiViewport* viewport, void*) noexcept + { + } + + void SHImGuiVulkanBackend::ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept + { + } + + + void SHImGuiVulkanBackend::SHImGuiWindow::InitializeBuffers(void) noexcept + { + for (auto& primBuffer : primitiveBuffers) + { + primBuffer.vertexBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawVert) * 3000, + nullptr, + sizeof(ImDrawVert) * 3000, + vk::BufferUsageFlagBits::eVertexBuffer, + VMA_MEMORY_USAGE_AUTO, + VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags + + primBuffer.indicesBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawIdx) * 3000, + nullptr, + sizeof(ImDrawIdx) * 3000, + vk::BufferUsageFlagBits::eIndexBuffer, + VMA_MEMORY_USAGE_AUTO, + VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags + + } + } + + void SHImGuiVulkanBackend::SHBreachInstance::CreateFontsTexture(Handle image, ImGuiIO& io) noexcept + { + // Build texture atlas + unsigned char* pixels; + int width, height; + + // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. + // If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. + io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); + + + + // Create the texture in xgpu + { + std::array Mip{ height * width * sizeof(std::uint32_t) }; + xgpu::texture::setup Setup; + + Setup.m_Height = height; + Setup.m_Width = width; + Setup.m_MipChain = Mip; + Setup.m_Data = { reinterpret_cast(pixels), Mip[0].m_Size }; + + if (auto Err = m_Device.Create(Texture, Setup); Err) + return Err; + } + + // We could put here the texture id if we wanted + io.Fonts->TexID = nullptr; + + return nullptr; + + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h new file mode 100644 index 00000000..df513df7 --- /dev/null +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Images/SHVkImage.h" +#include +#include +#include +#include "Graphics/Swapchain/SHVkSwapchain.h" +#include +#include "Graphics/Debugging/SHVulkanDebugUtil.h" + +namespace SHADE +{ + class SHImGuiVulkanBackend + { + struct SHImGuiWindow + { + struct Buffers + { + Handle vertexBuffer; + Handle indicesBuffer; + + }; + + Handle device; + std::array primitiveBuffers; + + public: + void InitializeBuffers(void) noexcept; + + }; + + struct SHBreachInstance : public SHImGuiWindow + { + Handle pipeline; + std::chrono::time_point lastFrameTime; + public: + void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; + void InitializePipeline(ImGuiIO& io) noexcept; + }; + public: + static void CreateInstance(Handle const& logicalDevice) noexcept; + static void Render(void) noexcept; + + + static void EnableDocking(void) noexcept; + + //Platform specific functions + static void CreateChildWindow(ImGuiViewport* viewport) noexcept; + static void DestroyChildWindow(ImGuiViewport* viewport) noexcept; + static ImVec2 GetChildWindowSize(ImGuiViewport* viewport) noexcept; + static void SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept; + static ImVec2 GetChildWindowPos(ImGuiViewport* viewport) noexcept; + static void SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept; + static void RenderChildWindow(ImGuiViewport* viewport, void*) noexcept; + static void ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept; + + private: + + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index b3bac9d1..ab3a220a 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -3,8 +3,8 @@ #include "SHEditorBackend.h" #include -#include +#include #include #include #include @@ -13,6 +13,8 @@ #include "Tools/SHLogger.h" +extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); + namespace SHADE { Handle SHEditor::cmdPool; @@ -23,14 +25,15 @@ namespace SHADE IMGUI_CHECKVERSION(); ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); + + //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; + SetupWin32Backend(hwnd); SetupVulkanBackend(); - //ImGuiIO& io = ImGui::GetIO(); - - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; - //io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; } @@ -44,7 +47,7 @@ namespace SHADE NewFrame(); //Add all windows to draw list, Perform necessary updates - ImGui::ShowDemoWindow(); + //ImGui::ShowDemoWindow(); ImGui::Render(); } @@ -59,6 +62,7 @@ namespace SHADE ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); } + } void SHEditor::Exit() @@ -83,6 +87,7 @@ namespace SHADE initInfo.Allocator = nullptr; initInfo.PipelineCache = nullptr; initInfo.Subpass = 0; + initInfo.CheckVkResultFn = [](VkResult err) { if (err == VK_SUCCESS) @@ -105,8 +110,8 @@ namespace SHADE void SHEditor::NewFrame() { - ImGui_ImplWin32_NewFrame(); ImGui_ImplVulkan_NewFrame(); + ImGui_ImplWin32_NewFrame(); ImGui::NewFrame(); } @@ -118,4 +123,5 @@ namespace SHADE void SHEditor::ShutdownWin32Backend() { } + } From bf447c1d1d7dcbdef7ec0a807074791cd33ee64b Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 11 Sep 2022 20:03:11 +0800 Subject: [PATCH 016/793] Auto stash before merge of "SP3-4-editor" and "origin/SP3-4-editor" --- SHADE_Engine/src/Graphics/Images/SHVkImage.cpp | 10 +++++++++- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index 11fbe5dd..003e36ec 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -11,6 +11,8 @@ namespace SHADE SHVkImage::SHVkImage( VmaAllocator const& vmaAllocator, SHImageCreateParams const& imageDetails, + unsigned char* data, + uint32_t dataSize, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags ) noexcept @@ -64,7 +66,13 @@ namespace SHADE VmaAllocationInfo allocInfo{}; VkImage tempImage; - vmaCreateImage(vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo&(), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + auto result = vmaCreateImage(vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo&(), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + + if (result != VK_SUCCESS) + SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); + else + SHVulkanDebugUtil::ReportVkSuccess("Successfully created image. "); + vkImage = tempImage; //if (allocFlags & ) diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 53066075..48ad1b75 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -86,10 +86,11 @@ namespace SHADE /*-----------------------------------------------------------------------*/ SHVkImage(void) noexcept = default; - // TODO: Might need to add flags to parameters SHVkImage( VmaAllocator const& vmaAllocator, SHImageCreateParams const& imageDetails, + unsigned char* data, + uint32_t dataSize, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags ) noexcept; From 47e9e3d3f285d9bd056c42330c45adbfe4d913eb Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 11 Sep 2022 22:34:55 +0800 Subject: [PATCH 017/793] WIP --- .../src/Graphics/Buffers/SHVkBuffer.cpp | 2 + .../src/Graphics/Buffers/SHVkBuffer.h | 1 - .../Graphics/Commands/SHVkCommandBuffer.cpp | 6 + .../src/Graphics/Commands/SHVkCommandBuffer.h | 3 + .../src/Graphics/Images/SHVkImage.cpp | 239 ++++++++++++++---- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 50 +++- 6 files changed, 236 insertions(+), 65 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 4158d3c3..7913574c 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -33,6 +33,8 @@ namespace SHADE }; cmdBufferHdl->GetVkCommandBuffer().copyBuffer(stagingBuffer, vkBuffer, 1, ©Region); } + + // TODO: Need to destroy staging buffer. Obviously not here but after the command has finished executing. } vk::Buffer SHVkBuffer::GetVkBuffer(void) const noexcept diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index 2ad3e4e9..9df1a1d0 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -48,7 +48,6 @@ namespace SHADE vk::BufferUsageFlags bufferUsageFlags; //! Reference to the allocator - //VmaAllocator const& vmaAllocator; std::reference_wrapper vmaAllocator; /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 6a307230..a9753416 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -406,6 +406,12 @@ namespace SHADE } + + //void SHVkCommandBuffer::PipelineBarrier(vk::PipelineStageFlags ) const noexcept + //{ + // //vkCommandBuffer.pipelineBarrier() + //} + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 08fc45f7..4f89f813 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -114,6 +114,9 @@ namespace SHADE void DrawArrays (uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const noexcept; void DrawIndexed (uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept; + // memory barriers + //void PipelineBarrier (void) const noexcept; + // Push Constant variable setting template void SetPushConstantVariable(std::string variableName, T const& data) noexcept diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index 003e36ec..3cd311d3 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -5,16 +5,88 @@ #include "Tools/SHLogger.h" #include "SHVkImageView.h" #include "Graphics/Instance/SHVkInstance.h" +#include "Graphics/Buffers/SHVkBuffer.h" namespace SHADE { + /***************************************************************************/ + /*! + + \brief + If an image is a GPU only resource, we need to prep a staging buffer + to use for transferring data to the GPU. #NoteToSelf: I don't really + like this because its duplicate code. Should try to find a way to utilize + the logical device for this. + + \param data + Data to transfer. + + \param srcSize + Size in bytes of the data. + + */ + /***************************************************************************/ + void SHVkImage::PrepStagingBuffer(void* data, uint32_t srcSize) noexcept + { + // For creation of buffer + vk::BufferCreateInfo bufferInfo{}; + + // size stored same as GPU buffer + bufferInfo.size = srcSize; + + // We just want to set the transfer bit + bufferInfo.usage = vk::BufferUsageFlagBits::eTransferSrc; + + // sharing mode exclusive + bufferInfo.sharingMode = vk::SharingMode::eExclusive; + + // Set to auto detect bits + VmaAllocationCreateInfo allocCreateInfo{}; + allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; + + // We want to just write all at once. Using random access bit could make this slow + allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; + + // parameters of a vmaAllocation retrieved via vmaGetAllocationInfo + VmaAllocationInfo allocInfo; + + // results of allocation + VmaAllocation stagingAlloc; + + // To get around VMA's usage for C version of vulkan, create a temp first..., + VkBuffer tempBuffer{}; + + // Create the buffer... + vmaCreateBuffer(*vmaAllocator, + &bufferInfo.operator VkBufferCreateInfo & (), // TODO: Verify if this works (can use renderdoc to check buffer variables?) + &allocCreateInfo, + &tempBuffer, &stagingAlloc, &allocInfo); + + // then assign it to the hpp version + stagingBuffer = tempBuffer; + + // Just map, copy then unmap + void* stagingBufferMappedPtr = nullptr; + vmaMapMemory(*vmaAllocator, stagingAlloc, &stagingBufferMappedPtr); + + if (stagingBufferMappedPtr) + std::memcpy(static_cast(stagingBufferMappedPtr), static_cast(data), srcSize); + + const VkDeviceSize offsets = 0; + const VkDeviceSize sizes = srcSize; + vmaFlushAllocations(*vmaAllocator, 1, &stagingAlloc, &offsets, &sizes); + + vmaUnmapMemory(*vmaAllocator, stagingAlloc); + } + SHVkImage::SHVkImage( - VmaAllocator const& vmaAllocator, - SHImageCreateParams const& imageDetails, - unsigned char* data, - uint32_t dataSize, - VmaMemoryUsage memUsage, - VmaAllocationCreateFlags allocFlags + VmaAllocator const* allocator, + SHImageCreateParams const& imageDetails, + unsigned char* data, + uint32_t dataSize, + std::span inMipOffsets, + VmaMemoryUsage memUsage, + VmaAllocationCreateFlags allocFlags ) noexcept : imageType { imageDetails.imageType } , width{ imageDetails.width } @@ -25,6 +97,11 @@ namespace SHADE , imageFormat{ imageDetails.imageFormat } , usageFlags{} , createFlags{} + , vmaAllocator{allocator} + , mipOffsets { inMipOffsets } + , boundToCoherent{false} + , randomAccessOptimized {false} + , mappedPtr{nullptr} { for (auto& bit : imageDetails.usageBits) usageFlags |= bit; @@ -66,7 +143,7 @@ namespace SHADE VmaAllocationInfo allocInfo{}; VkImage tempImage; - auto result = vmaCreateImage(vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo&(), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo&(), &allocCreateInfo, &tempImage, &alloc, &allocInfo); if (result != VK_SUCCESS) SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); @@ -75,55 +152,43 @@ namespace SHADE vkImage = tempImage; - //if (allocFlags & ) + // At this point the image and device memory have been created. + + if (allocFlags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) + randomAccessOptimized = true; + + // TODO: This constructor can only create a GPU only resource for now. Due to time constraint, I was trying to create a ctor + // fast to finish up the ImGUI backend. In the future, there definitely needs to be more versatility to the constructor. + + // Get the memory property flags + VkMemoryPropertyFlags memPropFlags; + vmaGetAllocationMemoryProperties(*vmaAllocator, alloc, &memPropFlags); + + // mainly host visible. Can be cached (need to flush/invalidate), uncached (always coherent) and coherent (virtual). + //if (memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) + //{ + // // If memory is marked to be coherent between CPU and GPU (no need flush/invalidate) (TODO: Verify if VMA_ALLOCATION_CREATE_MAPPED_BIT is used when VMA_MEMORY_USAGE_AUTO is set) + // // TODO: also verify that coherent bit = pointer is already mapped + // if (memPropFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) + // { + // boundToCoherent = true; + // mappedPtr = allocInfo.pMappedData; + // } + // else + // mappedPtr = nullptr; + + // if (data) + // MapWriteUnmap(data, srcSize, 0, 0); + //} + //else + //{ + // We can prep first so that we can do transfers later via 1 cmd buffer recording + PrepStagingBuffer(data, dataSize); + + //} } - /***************************************************************************/ - /*! - - \brief - This is mainly used for images that aren't created internally because - they cannot be created in the traditional way (e.g. swapchain images). - - \param inVkImage - Image already created outside - - \param width - Width of the image - - \param height - Height of the image - - \param depth - Depth of the image - - \param levels - Number of levels in the image - - \param arrayLayers - if the image is an array, this value will be > 1. - - \param imageFormat - Format of the image - - */ - /***************************************************************************/ - SHVkImage::SHVkImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t arrayLayers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept - : vkImage (inVkImage) - , width{ inWidth } - , height{ inHeight } - , depth{ inDepth } - , mipLevelCount{ levels } - , layerCount{ arrayLayers } - , imageFormat{ format } - , usageFlags{flags} - , alloc{} - , imageType{type} - , createFlags{} - { - } - - SHVkImage::SHVkImage(VmaAllocator const& vmaAllocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept + SHVkImage::SHVkImage(VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept : width {w} , height{h} , depth {1} @@ -132,6 +197,7 @@ namespace SHADE , imageFormat{format} , usageFlags{usage} , createFlags {create} + , vmaAllocator {allocator} { vk::ImageCreateInfo imageCreateInfo{}; imageCreateInfo.imageType = vk::ImageType::e2D; @@ -157,7 +223,7 @@ namespace SHADE VmaAllocationInfo allocInfo{}; VkImage tempImage; - auto result = vmaCreateImage(vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); vkImage = tempImage; if (result != VK_SUCCESS) @@ -171,6 +237,69 @@ namespace SHADE return SHVkInstance::GetResourceManager().Create(inLogicalDeviceHdl, parent, createParams); } + void SHVkImage::TransferToDeviceResource(Handle const& cmdBufferHdl) noexcept + { + // prepare copy regions + std::vector copyRegions{mipOffsets.size()}; + + for (uint32_t i = 0; i < mipOffsets.size(); ++i) + { + copyRegions[i].bufferOffset = mipOffsets[i]; + copyRegions[i].bufferRowLength = 0; // for padding + copyRegions[i].bufferImageHeight = 0; // for padding + copyRegions[i].imageSubresource.aspectMask = vk::ImageAspectFlagBits::eColor; // TODO: Need to change this to base it off image format. + copyRegions[i].imageSubresource.mipLevel = i; + copyRegions[i].imageSubresource.baseArrayLayer = 0; // TODO: Array textures not supported yet + copyRegions[i].imageSubresource.layerCount = layerCount; + copyRegions[i].imageOffset = vk::Offset3D{ 0,0,0 }; + copyRegions[i].imageExtent = vk::Extent3D{ width >> i, height >> i, 1 }; + } + + } + + void SHVkImage::TransitionImage(vk::ImageLayout oldLayout, vk::ImageLayout newLayout) noexcept + { + vk::ImageMemoryBarrier barrier{}; + barrier.oldLayout = oldLayout; + barrier.newLayout = newLayout; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.image = vkImage; + barrier.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor; // TODO: Need to change this to base it off image format. + barrier.subresourceRange.baseMipLevel = 0; + barrier.subresourceRange.levelCount = mipLevelCount; + barrier.subresourceRange.baseArrayLayer = 0; + barrier.subresourceRange.layerCount = layerCount; + + vk::PipelineStageFlagBits srcStage = vk::PipelineStageFlagBits::eTopOfPipe; + vk::PipelineStageFlagBits dstStage = vk::PipelineStageFlagBits::eTopOfPipe; + + if (oldLayout == vk::ImageLayout::eUndefined && newLayout == vk::ImageLayout::eTransferDstOptimal) + { + srcStage = vk::PipelineStageFlagBits::eTopOfPipe; + dstStage = vk::PipelineStageFlagBits::eTransfer; + + barrier.srcAccessMask = vk::AccessFlagBits::eNone; + barrier.dstAccessMask = vk::AccessFlagBits::eTransferWrite; + } + else if (oldLayout == vk::ImageLayout::eTransferDstOptimal && newLayout == vk::ImageLayout::eShaderReadOnlyOptimal) + { + srcStage = vk::PipelineStageFlagBits::eTransfer; + + // TODO, what if we want to access in compute shader + dstStage = vk::PipelineStageFlagBits::eFragmentShader; + + barrier.srcAccessMask = vk::AccessFlagBits::eTransferWrite; + barrier.dstAccessMask = vk::AccessFlagBits::eShaderRead; + } + else + { + SHLOG_ERROR("Image layouts are invalid. "); + } + + //cmdBufferHdl + } + void SHVkImage::LinkWithExteriorImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t layers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept { vkImage = inVkImage; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 48ad1b75..2884cd63 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -10,6 +10,7 @@ namespace SHADE { class SHVkLogicalDevice; class SHVkImageView; + class SHVkCommandBuffer; struct SHImageCreateParams { @@ -47,6 +48,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ + //! Pointer to the vma allocator. #NoteToSelf: Not super proud of this being a pointer. + //! The only reason why this is a pointer is because a reference_wrapper cannot be default constructed. + //! And the reason why we want a default constructor is because sometimes we don't want to create images + //! but merely link them from outside (swapchain images) + VmaAllocator const* vmaAllocator; + //! 1D, 2D or 3D vk::ImageType imageType = vk::ImageType::e2D; @@ -80,6 +87,29 @@ namespace SHADE //! allocation object containing details of an allocation VmaAllocation alloc{}; + //! Whether or not this image is HOST_VISIBLE and random access optimized + bool randomAccessOptimized; + + //! Whether or not the memory the image is bound to is memory coherent (updates on CPU can be seen on GPU without flushing cache) + bool boundToCoherent; + + //! Persistently mapped pointer if applicable (will be void if image is + //! not created with the correct flags). Note that this is only used for + //! persistent mapping. One time updates do not use this pointer. + void* mappedPtr; + + //! Staging buffer for images purely in the GPU + vk::Buffer stagingBuffer; + + //! Mipmap offsets for initializing the vk::BufferImageCopy during transfer to GPU resource + std::span mipOffsets; + + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void PrepStagingBuffer(void* data, uint32_t srcSize) noexcept; + + public: /*-----------------------------------------------------------------------*/ /* CTOR AND DTOR */ @@ -87,16 +117,16 @@ namespace SHADE SHVkImage(void) noexcept = default; SHVkImage( - VmaAllocator const& vmaAllocator, - SHImageCreateParams const& imageDetails, - unsigned char* data, - uint32_t dataSize, - VmaMemoryUsage memUsage, - VmaAllocationCreateFlags allocFlags + VmaAllocator const* allocator, + SHImageCreateParams const& imageDetails, + unsigned char* data, + uint32_t dataSize, + std::span inMipOffsets, + VmaMemoryUsage memUsage, + VmaAllocationCreateFlags allocFlags ) noexcept; - SHVkImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t arrayLayers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept; - SHVkImage(VmaAllocator const& vmaAllocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept; + SHVkImage(VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept; SHVkImage(SHVkImage&& rhs) noexcept = default; SHVkImage& operator=(SHVkImage && rhs) noexcept = default; @@ -104,7 +134,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - Handle CreateImageView(Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; + Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; + void TransferToDeviceResource (Handle const& cmdBufferHdl) noexcept; + void TransitionImage (vk::ImageLayout oldLayout, vk::ImageLayout newLayout) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ From ba5bea9d53a359340802ce36dea052065764e6f5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 13:26:25 +0800 Subject: [PATCH 018/793] Added dotnet dependencies acquisition --- Dependencies.bat | 18 ++++++- Dependencies.lua | 1 + SHADE_Engine/SHADE_Engine.vcxproj | 35 +++++++------ SHADE_Engine/SHADE_Engine.vcxproj.filters | 64 +++++++++++++++++------ SHADE_Engine/premake5.lua | 13 +++-- 5 files changed, 96 insertions(+), 35 deletions(-) diff --git a/Dependencies.bat b/Dependencies.bat index bbce926b..ecbd80b3 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -17,10 +17,11 @@ echo "J - imnodes" echo "K - tracy" echo "L - RTTR" echo "M - yamlcpp" +echo "N - dotnet" echo --------------------------------------------------- echo. -choice /C ABCDEFGHIJKLM /T 10 /D A +choice /C ABCDEFGHIJKLMN /T 10 /D A set _e=%ERRORLEVEL% if %_e%==1 goto VMA @@ -36,6 +37,7 @@ if %_e%==10 goto imnodes if %_e%==11 goto tracy if %_e%==12 goto RTTR if %_e%==13 goto yamlcpp +if %_e%==14 goto dotnet :VMA echo -----------------------VMA---------------------------- @@ -107,6 +109,20 @@ if %_e%==12 (goto :done) else (goto :yamlcpp) echo -----------------------yamlcpp---------------------------- rmdir "Dependencies/yamlcpp" /S /Q git clone https://github.com/SHADE-DP/yaml-cpp.git "Dependencies/yamlcpp" +if %_e%==13 (goto :done) else (goto :dotnet) + +:dotnet +echo -----------------------dotnet---------------------------- +rmdir "Dependencies/dotnet" /S /Q +mkdir "Dependencies/dotnet/include" +mkdir "Dependencies/dotnet/bin" +powershell -Command "& {wget https://raw.githubusercontent.com/dotnet/runtime/main/src/coreclr/hosts/inc/coreclrhost.h -OutFile "Dependencies/dotnet/include/coreclrhost.h"}" +powershell -Command "& {wget https://download.visualstudio.microsoft.com/download/pr/8686fa48-b378-424e-908b-afbd66d6e120/2d75d5c3574fb5d917c5a3cd3f624287/dotnet-sdk-6.0.400-win-x64.zip -OutFile "Dependencies/dotnet/dotnet.zip"}" +powershell -Command "& {Expand-Archive -LiteralPath Dependencies/dotnet/dotnet.zip -DestinationPath Dependencies/dotnet/tmp}" +robocopy "Dependencies/dotnet/tmp/shared/Microsoft.NETCore.App/6.0.8/" "Dependencies/dotnet/bin/" *.dll /ns /nfl /ndl /nc /njh +rmdir "Dependencies/dotnet/tmp/" /s /q +del "Dependencies/dotnet/dotnet.zip" +powershell -Command "& {Remove-Item "Dependencies/dotnet/dotnet.zip"}" :done echo DONE! diff --git a/Dependencies.lua b/Dependencies.lua index 32382cf9..7f1281ab 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -13,3 +13,4 @@ IncludeDir["RTTR"] = "%{wks.location}/Dependencies/RTTR" IncludeDir["ktx"] = "%{wks.location}/Dependencies/ktx" IncludeDir["reactphysics3d"] = "%{wks.location}/Dependencies/reactphysics3d" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" +IncludeDir["dotnet"] = "%{wks.location}/Dependencies/dotnet" diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 07b7eb4a..b7f87645 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -19,13 +19,13 @@ - StaticLibrary + DynamicLibrary true Unicode v142 - StaticLibrary + DynamicLibrary false Unicode v142 @@ -41,16 +41,18 @@ + true bin\Debug_x86_64\SHADE_Engine\ bin-int\Debug_x86_64\SHADE_Engine\ SHADE_Engine - .lib + .dll + false bin\Release_x86_64\SHADE_Engine\ bin-int\Release_x86_64\SHADE_Engine\ SHADE_Engine - .lib + .dll @@ -58,7 +60,7 @@ SHpch.h Level4 _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_DEBUG;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -69,11 +71,13 @@ Windows true - - vulkan-1.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + bin\Debug_x86_64\SHADE_Engine\SHADE_Engine.lib + + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -81,7 +85,7 @@ SHpch.h Level4 _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_RELEASE;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;%(AdditionalIncludeDirectories) Full true true @@ -95,11 +99,13 @@ Windows true true - - vulkan-1.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + bin\Release_x86_64\SHADE_Engine\SHADE_Engine.lib + + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -190,7 +196,6 @@ - @@ -246,13 +251,13 @@ - + Create @@ -284,4 +289,4 @@ - + \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 8e6cedf2..fd513c56 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -94,6 +94,12 @@ {B3B14D12-9FC1-F9E2-087B-5E01F4A9E87B} + + {AFF4887C-9B2B-8A0D-4418-7010302E060F} + + + {F1B75745-5D6D-D03A-E661-CA115216C73E} + {AC05897C-983C-8A0D-4129-70102D3F060F} @@ -315,6 +321,27 @@ Graphics\Windowing\Surface + + Math + + + Math + + + Math + + + Math + + + Math\Vector + + + Math\Vector + + + Math\Vector + Meta @@ -343,16 +370,9 @@ Tools - - - - - - - - - - + + Tools + @@ -514,6 +534,24 @@ Graphics\Windowing\Surface + + Math + + + Math + + + Math + + + Math\Vector + + + Math\Vector + + + Math\Vector + Resource @@ -530,11 +568,5 @@ Tools - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index a94284df..ac128ac5 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -1,5 +1,5 @@ project "SHADE_Engine" - kind "StaticLib" + kind "SharedLib" language "C++" cppdialect "C++latest" targetdir ("bin/" .. outputdir .. "/%{prj.name}") @@ -12,6 +12,7 @@ project "SHADE_Engine" files { "%{prj.location}/src/**.h", + "%{prj.location}/src/**.hpp", "%{prj.location}/src/**.c", "%{prj.location}/src/**.cpp", "%{prj.location}/src/**.glsl", @@ -35,7 +36,8 @@ project "SHADE_Engine" "%{IncludeDir.RTTR}/include", "%{IncludeDir.reactphysics3d}/include", "%{IncludeDir.VULKAN}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", + "%{IncludeDir.dotnet}/include", } libdirs @@ -57,7 +59,7 @@ project "SHADE_Engine" "reactphysics3d", "imgui", "spdlog", - "vulkan-1.lib" + "vulkan-1.lib", } defines @@ -83,6 +85,11 @@ project "SHADE_Engine" "spdlog", } + postbuildcommands + { + "xcopy /s /r /y /q \"%{IncludeDir.dotnet}/bin\" \"$(OutDir)\"" + } + warnings 'Extra' filter "configurations:Debug" From 548b09df060763c7a85ec643976d4366d8adba30 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 16:04:22 +0800 Subject: [PATCH 019/793] Added SHScriptEngine and SHDotNetRuntime for managed code execution --- SHADE_Engine/SHADE_Engine.vcxproj | 12 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 42 ++ .../src/Engine/ECS_Base/Entity/SHEntity.cpp | 2 +- .../src/Engine/ECS_Base/Entity/SHEntity.h | 2 +- .../src/Scripting/SHDotNetRuntime.cpp | 198 +++++++ SHADE_Engine/src/Scripting/SHDotNetRuntime.h | 149 +++++ .../src/Scripting/SHDotNetRuntime.hpp | 61 +++ SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 509 ++++++++++++++++++ SHADE_Engine/src/Scripting/SHScriptEngine.h | 258 +++++++++ SHADE_Engine/src/Tools/SHStringUtils.cpp | 52 ++ SHADE_Engine/src/Tools/SHStringUtils.h | 81 +++ SHADE_Engine/src/Tools/SHStringUtils.hpp | 46 ++ 12 files changed, 1410 insertions(+), 2 deletions(-) create mode 100644 SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp create mode 100644 SHADE_Engine/src/Scripting/SHDotNetRuntime.h create mode 100644 SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp create mode 100644 SHADE_Engine/src/Scripting/SHScriptEngine.cpp create mode 100644 SHADE_Engine/src/Scripting/SHScriptEngine.h create mode 100644 SHADE_Engine/src/Tools/SHStringUtils.cpp create mode 100644 SHADE_Engine/src/Tools/SHStringUtils.h create mode 100644 SHADE_Engine/src/Tools/SHStringUtils.hpp diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index b7f87645..fbb9599b 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -187,15 +187,24 @@ + + + + + + + + + @@ -262,9 +271,12 @@ Create + + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index fd513c56..77e4ac1f 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -109,6 +109,9 @@ {B3F7140E-1F0C-3DBF-E88D-E01E546139F0} + + {985A7358-04C5-27CF-4D03-D974B9AC0524} + {16CF2D0E-82E3-55BF-4B65-F91EB73852F0} @@ -327,6 +330,9 @@ Math + + Math + Math @@ -348,12 +354,21 @@ Resource + + Resource + Resource + + Resource + Resource + + Resource + Scene @@ -361,6 +376,15 @@ Scene + + Scripting + + + Scripting + + + Scripting + Tools @@ -373,6 +397,15 @@ Tools + + Tools + + + Tools + + + Tools + @@ -559,6 +592,12 @@ Scene + + Scripting + + + Scripting + Tools @@ -568,5 +607,8 @@ Tools + + Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.cpp b/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.cpp index 6005fb01..edf29ec7 100644 --- a/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.cpp +++ b/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.cpp @@ -28,7 +28,7 @@ namespace SHADE //SHEntityManager::RemoveEntity(this->entityID); } - EntityID SHEntity::GetEID() noexcept + EntityID SHEntity::GetEID() const noexcept { return this->entityID; } diff --git a/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.h b/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.h index d499042c..6f2ae36b 100644 --- a/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.h +++ b/SHADE_Engine/src/Engine/ECS_Base/Entity/SHEntity.h @@ -77,7 +77,7 @@ namespace SHADE * \return uint32_t * The entityID of this Entity object. ***************************************************************************/ - EntityID GetEID() noexcept; + EntityID GetEID() const noexcept; /*!************************************************************************* * \brief Set the Active object diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp new file mode 100644 index 00000000..2d0cec1e --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp @@ -0,0 +1,198 @@ +/*************************************************************************************//*! +\file SHDotNetRuntime.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 2, 2021 +\brief Contains the definition of the SHDotNetRuntime class. + Implementation of code to set up code for SHDotNetRuntime is based on the + following repository: + https://github.com/mjrousos/SampleCoreCLRHost + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//**************************************************************************************/ +// Precompiled Header +#include +// Primary Header +#include "SHDotNetRuntime.h" +// Standard Library +#include +// External Dependencies +#include // PathRemoveFileSpecA +#include "Tools/SHLogger.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*---------------------------------------------------------------------------------*/ + SHDotNetRuntime::SHDotNetRuntime(bool autoInit) + { + if (autoInit) + { + Init(); + } + } + + SHDotNetRuntime::~SHDotNetRuntime() + { + if (IsLoaded()) + { + try + { + Exit(); + } + catch (std::runtime_error& e) + { + SHLOG_ERROR(e.what()); + } + } + } + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void SHDotNetRuntime::Init() + { + // State checking, in case there was an unload before, we must ensure that the state is valid + if (initialised) + throw std::runtime_error("[DotNetRuntime] Failed to initialise as it was already initialised or was deinitialised into an invalid state."); + + // Get the current executable directory + std::string runtimePath(MAX_PATH, '\0'); + GetModuleFileNameA(nullptr, runtimePath.data(), MAX_PATH); + PathRemoveFileSpecA(runtimePath.data()); + // Since PathRemoveFileSpecA() removes from data(), the size is not updated, so we must manually update it + runtimePath.resize(std::strlen(runtimePath.data())); + + // Do not need to load the library if it was previously loaded + if (coreClr == nullptr) + { + // Construct the CoreCLR path + std::string coreClrPath(runtimePath); // Works + coreClrPath += "\\coreclr.dll"; + + // Load the CoreCLR DLL + coreClr = LoadLibraryExA(coreClrPath.c_str(), nullptr, 0); + if (!coreClr) + { + std::ostringstream oss; + oss << "[DotNetRuntime] Error #" << GetLastError() << " Failed to load CoreCLR from \"" << coreClrPath << "\"\n"; + throw std::runtime_error(oss.str()); + } + + // Step 2: Get CoreCLR hosting functions + initializeCoreClr = getCoreClrFunctionPtr("coreclr_initialize"); + createManagedDelegate = getCoreClrFunctionPtr("coreclr_create_delegate"); + shutdownCoreClr = getCoreClrFunctionPtr("coreclr_shutdown"); + } + + // Step 3: Construct AppDomain properties used when starting the runtime + // Construct the trusted platform assemblies (TPA) list + // This is the list of assemblies that .NET Core can load as + // trusted system assemblies (similar to the .NET Framework GAC). + // For this host (as with most), assemblies next to CoreCLR will + // be included in the TPA list + std::string tpaList = buildTpaList(runtimePath); + + // Define CoreCLR properties + std::array propertyKeys = + { + "TRUSTED_PLATFORM_ASSEMBLIES", // Trusted assemblies (like the GAC) + "APP_PATHS", // Directories to probe for application assemblies + // "APP_NI_PATHS", // Directories to probe for application native images (not used in this sample) + // "NATIVE_DLL_SEARCH_DIRECTORIES", // Directories to probe for native dlls (not used in this sample) + }; + std::array propertyValues = + { + tpaList.c_str(), + runtimePath.c_str() + }; + + // Step 4: Start the CoreCLR runtime + int result = initializeCoreClr + ( + runtimePath.c_str(), // AppDomain base path + "SHADEHost", // AppDomain friendly name + propertyKeys.size(), // Property count + propertyKeys.data(), // Property names + propertyValues.data(), // Property values + &hostHandle, // Host handle + &domainId // AppDomain ID + ); + + // Check if intiialization of CoreCLR failed + throwIfFailed("[DotNetRuntime] Failed to initialize CoreCLR.", result); + + initialised = true; + SHLOG_INFO("[DotNetRuntime] Successfully loaded the .NET 5.0 Runtime."); + } + + void SHDotNetRuntime::Exit() + { + // State checking, in case there was an unload before, we must ensure that the state is valid + if (!initialised) + throw std::runtime_error("[DotNetRuntime] Failed to deinitialise as it was not initialised before."); + + // Shutdown CoreCLR + int result = shutdownCoreClr(hostHandle, domainId); + throwIfFailed("[DotNetRuntime] Failed to shut down CoreCLR.", result); + + // Unset pointers + hostHandle = nullptr; + domainId = 0; + initialised = false; + + SHLOG_INFO("[DotNetRuntime] Successfully shut down the .NET 5.0 Runtime."); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + std::string SHDotNetRuntime::buildTpaList(const std::string& directory) + { + // Constants + static const std::string SEARCH_PATH = directory + "\\*.dll"; + static constexpr char PATH_DELIMITER = ';'; + + // Create a osstream object to compile the string + std::ostringstream tpaList; + + // Search the current directory for the TPAs (.DLLs) + WIN32_FIND_DATAA findData; + HANDLE fileHandle = FindFirstFileA(SEARCH_PATH.c_str(), &findData); + if (fileHandle != INVALID_HANDLE_VALUE) + { + do + { + // Append the assembly to the list + tpaList << directory << '\\' << findData.cFileName << PATH_DELIMITER; + + // Note that the CLR does not guarantee which assembly will be loaded if an assembly + // is in the TPA list multiple times (perhaps from different paths or perhaps with different NI/NI.dll + // extensions. Therefore, a real host should probably add items to the list in priority order and only + // add a file if it's not already present on the list. + // + // For this simple sample, though, and because we're only loading TPA assemblies from a single path, + // and have no native images, we can ignore that complication. + } + while (FindNextFileA(fileHandle, &findData)); + FindClose(fileHandle); + } + + return tpaList.str(); + } + + void SHDotNetRuntime::throwIfFailed(const std::string& errMsg, int resultCode) + { + if (resultCode < 0) + { + std::ostringstream oss; + oss << std::hex << std::setfill('0') << std::setw(8) + << errMsg + << " Error 0x" << resultCode << "\n"; + throw std::runtime_error(oss.str()); + } + } +} diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.h b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h new file mode 100644 index 00000000..22f8d9c7 --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h @@ -0,0 +1,149 @@ +/*************************************************************************************//*! +\file SHDotNetRuntime.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 2, 2021 +\brief Contains the interface of a wrapper class for interfacing with the + .NET 5 Runtime. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//**************************************************************************************/ +#pragma once + +// Standard Libraries +#include // std::setfill, std::setw +#include // std::runtime_error +#include // std::string +#include // std::ostringstream +// External Dependencies +#include // HMODULE +#include // coreclr_* + +namespace SHADE +{ + /********************************************************************************//*! + @brief Class that encapsulates the state of the .NET Core Runtime lifecycle. + *//*********************************************************************************/ + class SHDotNetRuntime + { + public: + /*----------------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*----------------------------------------------------------------------------------*/ + /****************************************************************************//*! + @brief Default constructor that immediately initializes the CoreCLR. + + @param[in] autoInit + If true, loads the CoreCLR by calling Init(). + *//*****************************************************************************/ + SHDotNetRuntime(bool autoInit = true); + /****************************************************************************//*! + @brief Destructor that unloads the CoreCLR if it has not been unloaded + yet. + *//*****************************************************************************/ + ~SHDotNetRuntime(); + + // Disallow copy and moving + SHDotNetRuntime(const SHDotNetRuntime&) = delete; + SHDotNetRuntime(SHDotNetRuntime&&) = delete; + + /*----------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*----------------------------------------------------------------------------------*/ + /****************************************************************************//*! + @brief Loads the CoreCLR and grabs pointers to bootstrapping functions and + kickstarts the CoreCLR. + + @throws SystemExitException + Thrown if there is a failure in loading the CLR and related functions. + *//*****************************************************************************/ + void Init(); + /****************************************************************************//*! + @brief Unloads the CoreCLR. + + @throws SystemExitException + Thrown if there is a failure in unloading the CLR. + *//*****************************************************************************/ + void Exit(); + + /*----------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*----------------------------------------------------------------------------------*/ + /****************************************************************************//*! + @brief Checks if the DotNetRuntime has successfully been initialised. + + @return True if this DotNetRuntime has been initialised. + *//*****************************************************************************/ + inline bool IsLoaded() { return coreClr != nullptr; } + /****************************************************************************//*! + @brief Retrieves a function pointer from the a CLR assembly based on the + specified assembly, type and function names. + + @tparam FunctionType + Type of the function pointer that the specified function name will + provide. + + @params[in] assemblyName + Name of the CoreCLR assembly that contains the function. + @params[in] typeName + Name of the CoreCLR type in the assembly that contains the function. + Nested types are separated by a period(.). + @params[in] functionName + Name of the CoreCLR function to get a pointer to. + + @returns Pointer to the function in the assembly that was specified. + *//*****************************************************************************/ + template + FunctionType GetFunctionPtr(const std::string_view& assemblyName, + const std::string_view& typeName, + const std::string_view& functionName); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + bool initialised = false; + // References to CoreCLR key components + HMODULE coreClr = nullptr; + void* hostHandle = nullptr; + unsigned int domainId = 0; + // Function Pointers to CoreCLR functions + coreclr_initialize_ptr initializeCoreClr = nullptr; + coreclr_create_delegate_ptr createManagedDelegate = nullptr; + coreclr_shutdown_ptr shutdownCoreClr = nullptr; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + /****************************************************************************//*! + @brief Retrieves a function pointer from the CoreCLR based on the specified + function name. + + @tparam FunctionType + Type of the function pointer that the specified function name will + provide. + + @params[in] functionName + Name of the CoreCLR function to get a pointer to. + + @returns Pointer to the function in the CoreCLR that was specified. + *//*****************************************************************************/ + template + FunctionType getCoreClrFunctionPtr(const std::string& functionName); + /****************************************************************************//*! + @brief Compiles a semicolon separated string of trusted platform assemblies by + searching the specified directory. + + @params[in] directory + Path to the directory where the trusted platform assemblies reside. + + @returns Semicolon separated string of trusted platform assemblies. + *//*****************************************************************************/ + static std::string buildTpaList(const std::string& directory); + static void throwIfFailed(const std::string& errMsg, int resultCode); + }; +} // namespace PlushieEngine::Scripts + +#include "SHDotNetRuntime.hpp" diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp new file mode 100644 index 00000000..3498bc63 --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp @@ -0,0 +1,61 @@ +/*************************************************************************************//*! +\file SHDotNetRuntime.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 2, 2021 +\brief Contains the implementation of the template functions of the + DotNetRuntime class. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//**************************************************************************************/ +#pragma once + +// Primary Include +#include "SHDotNetRuntime.h" + +namespace SHADE +{ + template + FunctionType SHDotNetRuntime::GetFunctionPtr(const std::string_view & assemblyName, + const std::string_view & typeName, + const std::string_view & functionName) + { + FunctionType managedDelegate = nullptr; + int result = createManagedDelegate + ( + hostHandle, + domainId, + assemblyName.data(), + typeName.data(), + functionName.data(), + reinterpret_cast(&managedDelegate) + ); + + // Check if it failed + if (result < 0) + { + std::ostringstream oss; + oss << std::hex << std::setfill('0') << std::setw(8) + << "[DotNetRuntime] Failed to get pointer to function \"" + << typeName << "." << functionName << "\" in assembly (" << assemblyName << "). " + << "Error 0x" << result << "\n"; + throw std::runtime_error(oss.str()); + } + + return managedDelegate; + } + template + FunctionType SHDotNetRuntime::getCoreClrFunctionPtr(const std::string& functionName) + { + FunctionType fPtr = reinterpret_cast(GetProcAddress(coreClr, functionName.c_str())); + if (!fPtr) + { + std::ostringstream oss; + oss << "[DotNetRuntime] Unable to get pointer to function: \"" << functionName << "\""; + throw std::runtime_error(oss.str()); + } + return fPtr; + } +} diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp new file mode 100644 index 00000000..ac8ad84c --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -0,0 +1,509 @@ +/************************************************************************************//*! +\file SHScriptEngine.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2021 +\brief Contains the implementation for ScriptEngine class. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include +// Primary Header +#include "SHScriptEngine.h" +// Standard Library +#include // std::fstream +#include // std::filesystem::canonical, std::filesystem::remove +// Project Headers +#include "Tools/SHLogger.h" +#include "Tools/SHStringUtils.h" + +namespace SHADE +{ + /*--------------------------------------------------------------------------------*/ + /* Static Definitions */ + /*--------------------------------------------------------------------------------*/ + const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string(DEFAULT_CSHARP_LIB_NAME); + + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHScriptEngine::SHScriptEngine() + {} + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void SHScriptEngine::Init() + { + // Do not allow initialization if already initialised + if (dotNet.IsLoaded()) + { + SHLOG_ERROR("[ScriptEngine] Attempted to initialise an already loaded DotNetRuntime."); + return; + } + + dotNet.Init(); + + // Load all the helpers + loadFunctions(); + + // Generate script assembly if it hasn't been before + if (!fileExists(std::string(MANAGED_SCRIPT_LIB_NAME) + ".dll")) + { + BuildScriptAssembly(); + } + + // Initialise the CSharp Engine + csEngineInit(); + + // Link events + // - Entity Creation + /*onEntityCreate = [this](const SHEntity& e) + { + csGOLibNotifyNewEntity(e.GetEID()); + }; + ECS::OnEntityCreated += onEntityCreate;*/ + // - Entity Destruction + /*onEntityDestroy = [this](const SHEntity& e) + { + csScriptsRemoveAll(e.GetEID()); + csGOLibNotifyDestroyEntity(e.GetEID()); + }; + ECS::OnEntityDestroy += onEntityDestroy;*/ + } + void SHScriptEngine::UnloadScriptAssembly() + { + csEngineUnloadScripts(); + } + void SHScriptEngine::LoadScriptAssembly() + { + csEngineLoadScripts(); + } + void SHScriptEngine::ReloadScriptAssembly() + { + csEngineReloadScripts(); + } + void SHScriptEngine::ExecuteFixedUpdates() + { + csScriptsExecuteFixedUpdate(); + } + + void SHScriptEngine::ExecuteOnTrigger() + { + csScriptsExecuteOnTrigger(); + } + + void SHScriptEngine::Exit() + { + // Do not allow deinitialization if not initialised + if (!dotNet.IsLoaded()) + { + SHLOG_ERROR("[ScriptEngine] Attempted to clean up an unloaded DotNetRuntime."); + return; + } + + // Unlink events + /*ECS::OnEntityCreated -= onEntityCreate; + ECS::OnEntityDestroy -= onEntityDestroy;*/ + + // Clean up the CSharp Engine + csEngineExit(); + + // Shut down the CLR + dotNet.Exit(); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Manipulation Functions */ + /*---------------------------------------------------------------------------------*/ + bool SHScriptEngine::AddScript(const SHEntity& entity, const std::string_view& scriptName) const + { + return csScriptsAdd(entity.GetEID(), scriptName.data()); + } + void SHScriptEngine::RemoveAllScripts(const SHEntity& entity) const + { + csScriptsRemoveAll(entity.GetEID()); + } + void SHScriptEngine::RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) const + { + csScriptsRemoveAllImmediately(entity.GetEID(), callOnDestroy); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Serialisation Functions */ + /*---------------------------------------------------------------------------------*/ + std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) const + { + // Create buffer needed to store serialised script data + constexpr int BUFFER_SIZE = 10240; + std::unique_ptr buffer { new char[BUFFER_SIZE] }; + std::memset(buffer.get(), 0, BUFFER_SIZE); + + // Attempt to serialise the script + std::string result; + if (csScriptsSerialise(entity.GetEID(), buffer.get(), BUFFER_SIZE)) + { + result = std::string(buffer.get()); + } + else + { + SHLOG_ERROR("[ScriptEngine] Failed to serialise scripts as string buffer is too small!"); + } + + // Return an empty string since we failed to serialise + return result; + } + + /*---------------------------------------------------------------------------------*/ + /* Script Serialisation Functions */ + /*---------------------------------------------------------------------------------*/ + void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) const + { + csScriptDeserialise(entity.GetEID(), yaml.c_str()); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Editor Functions */ + /*---------------------------------------------------------------------------------*/ + void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) const + { + csEditorRenderScripts(entity.GetEID()); + } + + /*---------------------------------------------------------------------------------*/ + /* Static Utility Functions */ + /*---------------------------------------------------------------------------------*/ + bool SHScriptEngine::BuildScriptAssembly(bool debug) + { + constexpr std::string_view BUILD_LOG_PATH = "../Build.log"; + + // Prepare directory (delete useless files) + deleteFolder("net5.0"); + deleteFolder("ref"); + deleteFolder("../PlushieGameManaged"); + deleteFolder("../obj"); + + // Attempt to build the assembly + std::ostringstream oss; + oss << "[ScriptEngine] Building " << (debug ? " debug " : "") << "Managed Script Assembly (" << MANAGED_SCRIPT_LIB_NAME << ")!"; + SHLOG_INFO(oss.str()); + oss.str(""); + const bool BUILD_SUCCESS = execProcess + ( + L"C:\\Windows\\system32\\cmd.exe", + L"/K \"dotnet build \"../PlushieGameManaged.csproj\" -c Debug -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet & exit\"" + ) == 0; + if (BUILD_SUCCESS) + { + // Copy to built dll to the working directory and replace + std::filesystem::copy_file("./tmp/PlushieGameManaged.dll", "PlushieGameManaged.dll", std::filesystem::copy_options::overwrite_existing); + + oss << "[ScriptEngine] Successfully built Managed Script Assembly (" << MANAGED_SCRIPT_LIB_NAME << ")!"; + SHLOG_INFO(oss.str()); + } + else + { + oss << "[ScriptEngine] Failed to build Managed Script Assembly (" << MANAGED_SCRIPT_LIB_NAME << ")!"; + SHLOG_ERROR(oss.str()); + } + + // Clean up built files + deleteFolder("./tmp"); + + // Read the build log and output to the console + dumpBuildLog(BUILD_LOG_PATH); + // Delete the build log file since we no longer need it + deleteFile(BUILD_LOG_PATH); + + return BUILD_SUCCESS; + } + + void SHScriptEngine::GenerateScriptsCsProjFile(const std::filesystem::path& path) + { + // Sample + static std::string_view FILE_CONTENTS = +"\n\ + \n\ + net5.0\n\ + x64\n\ + Release;Debug\n\ + \n\ + \n\ + .\\bin_Release-x64\n\ + x64\n\ + \n\ + \n\ + .\\bin_Debug-x64\n\ + x64\n\ + DEBUG;TRACE\n\ + false\n\ + full\n\ + true\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + .\\bin\\PlushieAPI.dll\n\ + \n\ + \n\ +"; + + // Attempt to create the file + std::ofstream file(path); + if (!file.is_open()) + throw std::runtime_error("Unable to create CsProj file!"); + + // Fill the file + file << FILE_CONTENTS; + + // Close + file.close(); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void SHScriptEngine::loadFunctions() + { + std::ostringstream oss; + oss << "[ScriptEngine] Loading \"" << DEFAULT_CSHARP_LIB_NAME << "\" CLR library."; + SHLOG_INFO(oss.str()); + + // Load functions + csEngineInit = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".EngineInterface", + "Init" + ); + csEngineLoadScripts = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".EngineInterface", + "LoadScriptAssembly" + ); + csEngineUnloadScripts = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".EngineInterface", + "UnloadScriptAssembly" + ); + csEngineReloadScripts = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".EngineInterface", + "ReloadScriptAssembly" + ); + csEngineExit = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".EngineInterface", + "Exit" + ); + csScriptsFrameSetUp = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "FrameSetUp" + ); + csScriptsExecuteOnTrigger = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteOnTrigger" + ); + csScriptsExecuteFixedUpdate = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteFixedUpdate" + ); + csScriptsExecuteUpdate = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteUpdate" + ); + csScriptsExecuteLateUpdate = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteLateUpdate" + ); + csScriptsFrameCleanUp = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "FrameCleanUp" + ); + csScriptsAdd = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "AddScriptViaName" + ); + csScriptsRemoveAll = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "RemoveAllScripts" + ); + csScriptsRemoveAllImmediately = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "RemoveAllScriptsImmediately" + ); + csScriptsSerialise = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "SerialiseScripts" + ); + csScriptsSerialiseJson = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "SerialiseScriptsJson" + ); + csScriptDeserialise = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "DeserialiseScript" + ); + csGOLibNotifyNewEntity = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".GameObjectLibrary", + "NotifyNewGameObject" + ); + csGOLibNotifyDestroyEntity = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".GameObjectLibrary", + "NotifyDestroyGameObject" + ); + csEditorRenderScripts = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".Editor", + "RenderScriptsInInspector" + ); + } + + void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) + { + std::ifstream buildLog(buildLogPath); + + // Fail to open + if (!buildLog.is_open()) + return; + + // Process line by line + std::string line; + while (std::getline(buildLog, line)) + { + if (line.find("error") != line.npos) + { + SHLOG_ERROR(line); + } + else + { + SHLOG_WARNING(line); + } + } + } + void SHScriptEngine::deleteFile(const std::string_view& filePath) + { + try + { + std::filesystem::remove(std::filesystem::canonical(filePath)); + } + catch (...) {} // Ignore deletion failures + } + + void SHScriptEngine::deleteFolder(const std::string_view& filePath) + { + try + { + std::filesystem::remove_all(std::filesystem::canonical(filePath)); + } + catch (...) {} // Ignore deletion failures + } + + bool SHScriptEngine::fileExists(const std::string_view& filePath) + { + std::error_code error; + if (std::filesystem::exists(filePath, error)) + { + return true; + } + return false; + } + + DWORD SHScriptEngine::execProcess(const std::wstring& path, const std::wstring& args) + { + STARTUPINFOW startInfo; + PROCESS_INFORMATION procInfo; + ZeroMemory(&startInfo, sizeof(startInfo)); + ZeroMemory(&procInfo, sizeof(procInfo)); + startInfo.cb = sizeof(startInfo); + + std::wstring argsWstr = args; + + // Start Process + const auto SUCCESS = CreateProcess + ( + path.data(), argsWstr.data(), + nullptr, nullptr, false, NULL, nullptr, nullptr, + &startInfo, &procInfo + ); + + // Error Check + if (!SUCCESS) + { + auto err = GetLastError(); + std::ostringstream oss; + oss << "[ScriptEngine] Failed to launch process. Error code: " << std::hex << err + << " (" << SHStringUtils::GetWin32ErrorMessage(err) << ")"; + throw std::runtime_error(oss.str()); + } + + // Wait for execution to end + DWORD status; + while (true) + { + const auto SUCCESS = GetExitCodeProcess(procInfo.hProcess, &status); + if (!SUCCESS) + { + auto err = GetLastError(); + std::ostringstream oss; + oss << "[ScriptEngine] Failed to query process. Error code: " << std::hex << err + << " (" << SHStringUtils::GetWin32ErrorMessage(err) << ")"; + throw std::runtime_error(oss.str()); + } + + // Break only if process ends + if (status != STILL_ACTIVE) + { + CloseHandle(procInfo.hProcess); + CloseHandle(procInfo.hThread); + return status; + } + } + } + +} diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h new file mode 100644 index 00000000..85e3ac3f --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -0,0 +1,258 @@ +/************************************************************************************//*! +\file ScriptEngine.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2021 +\brief Contains the interface for ScriptEngine class. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +// Project Headers +#include "SHDotNetRuntime.h" +#include "Engine/ECS_Base/SHECSMacros.h" +#include "Engine/ECS_Base/Entity/SHEntity.h" + +namespace SHADE +{ + /// + /// Manages initialisation of the DotNetRuntime and interfacing with CLR code written + /// and executed on .NET. + /// + class SHScriptEngine + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors & Destructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Default Constructor + /// + SHScriptEngine(); + + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Initialises the DotNetRuntime and retrieves function pointers to all + /// functions on the CLR used to interface with the engine. + /// + void Init(); + /// + /// Loads the managed script assembly. Ensure this is only called after + /// UnloadScriptAssembly() has been called. + /// + void UnloadScriptAssembly(); + /// + /// Unloads the managed script assembly. + /// Take note that this will clear all existing scripts, ensure that the scene + /// is saved before doing so. + /// + void LoadScriptAssembly(); + /// + /// Reloads the managed script assembly. + /// Take note that this will clear all existing scripts, ensure that the scene + /// is saved before doing so. + /// + void ReloadScriptAssembly(); + /// + /// Executes the FixedUpdate()s of the PlushieScripts that are attached to + /// Entities. + /// + void ExecuteFixedUpdates(); + /// + /// Executes the OnTrigger() family of functions of the PlushieScripts that are + /// attached to Entities. + /// + void ExecuteOnTrigger(); + /// + /// Shuts down the DotNetRuntime. + /// + void Exit(); + + /*-----------------------------------------------------------------------------*/ + /* Script Manipulation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Script to a specified Entity. Note that while you can call this + /// multiple times on a specified Entity, it will work for all intents and + /// purposes but GetScript<T>() (C# only) currently only + /// gives you the first PlushieScript added of the specified type. + /// + /// The entity to add a script to. + /// Type name of the script to add. + /// + /// True if successfully added. False otherwise with the error logged to the + /// console. + /// + bool AddScript(const SHEntity& entity, const std::string_view& scriptName) const; + /// + /// Removes all Scripts attached to the specified Entity. Does not do anything + /// if the specified Entity is invalid or does not have any PlushieScripts + /// attached. + /// + /// The entity to remove the scripts from. + void RemoveAllScripts(const SHEntity& entity) const; + /// + /// Removes all Scripts attached to the specified Entity. Unlike + /// RemoveAllScripts(), this removes all the scripts immediately. + /// Does not do anything if the specified Entity is invalid or does not have any + /// PlushieScripts attached. + /// + /// The entity to remove the scripts from. + /// + /// Whether or not to call OnDestroy on the scripts. This is ignored if not in + /// play mode. + /// + void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) const; + + /*-----------------------------------------------------------------------------*/ + /* Script Serialisation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Generates a JSON string that represents the set of Scripts attached to the + /// specified Entity. + /// + /// The Entity to Serialise. + /// + /// String that represents the set of scripts attached to the specified Entity. + /// + std::string SerialiseScripts(const SHEntity& entity) const; + /// + /// Loads the specified JSON string and creates a Script for the specified Entity + /// based on the specified JSON string. + /// + /// The Entity to deserialise a Script on to. + /// + /// The JSON string that represents the Script to load into the Entity. + /// + void DeserialiseScript(const SHEntity& entity, const std::string& yaml) const; + + /*-----------------------------------------------------------------------------*/ + /* Script Editor Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Renders the set of attached PlushieScripts for the specified Entity into the + /// inspector. + ///
+ /// This function is meant for consumption from native code in the inspector + /// rendering code. + ///
+ /// The Entity to render the PlushieScripts of. + void RenderScriptsInInspector(const SHEntity& entity) const; + + /*-----------------------------------------------------------------------------*/ + /* Static Utility Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Utilises execution of a external batch file for invoking the dotnet build + /// tool to compile C# scripts in the Assets folder into the PlushieGameManaged + /// C# assembly DLL. + /// + /// + /// Whether or not a debug build will be built. Only debug built C# assemblies + /// can be debugged. + /// + /// Whether or not the build succeeded. + static bool BuildScriptAssembly(bool debug = false); + /// + /// Generates a .csproj file for editing and compiling the C# scripts. + /// + /// File path to the generated file. + static void GenerateScriptsCsProjFile(const std::filesystem::path& path); + + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using CsFuncPtr = void(*)(void); + using CsScriptManipFuncPtr = bool(*)(EntityID, const char*); + using CsScriptBasicFuncPtr = void(*)(EntityID); + using CsScriptOptionalFuncPtr = void(*)(EntityID, bool); + using CsScriptSerialiseFuncPtr = bool(*)(EntityID, char*, int); + using CsScriptDeserialiseFuncPtr = bool(*)(EntityID, const char*); + using CsScriptSerialiseJsonFuncPtr = bool(*)(EntityID, void*); + using CsScriptEditorFuncPtr = void(*)(EntityID); + + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + static constexpr std::string_view DEFAULT_CSHARP_LIB_NAME = "SHADEAPI"; + static constexpr std::string_view MANAGED_SCRIPT_LIB_NAME = "SHADEManaged"; + static const std::string DEFAULT_CSHARP_NAMESPACE; + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + SHDotNetRuntime dotNet {false}; + // Function Pointers to CLR Code + // - Engine Init + CsFuncPtr csEngineInit = nullptr; + CsFuncPtr csEngineLoadScripts = nullptr; + CsFuncPtr csEngineUnloadScripts = nullptr; + CsFuncPtr csEngineReloadScripts = nullptr; + CsFuncPtr csEngineExit = nullptr; + // - Scripts Store + CsFuncPtr csScriptsFrameSetUp = nullptr; + CsFuncPtr csScriptsExecuteOnTrigger = nullptr; + CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; + CsFuncPtr csScriptsExecuteUpdate = nullptr; + CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsFrameCleanUp = nullptr; + CsScriptManipFuncPtr csScriptsAdd = nullptr; + CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; + CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; + CsScriptSerialiseFuncPtr csScriptsSerialise = nullptr; + CsScriptDeserialiseFuncPtr csScriptDeserialise = nullptr; + CsScriptSerialiseJsonFuncPtr csScriptsSerialiseJson = nullptr; + CsScriptSerialiseJsonFuncPtr csScriptDeserialiseJson = nullptr; + // - GameObject Library + CsScriptBasicFuncPtr csGOLibNotifyNewEntity = nullptr; + CsScriptBasicFuncPtr csGOLibNotifyDestroyEntity = nullptr; + // - Editor + CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; + // Delegates + /*ECS::EntityEvent::Delegate onEntityCreate; + ECS::EntityEvent::Delegate onEntityDestroy;*/ + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Loads all the function pointers to CLR code that we need to execute. + /// + void loadFunctions(); + /// + /// Reads the file via the specified path that represents a build log of error + /// and warning messages. + /// + /// + /// File path to the build log of script builds done by BuildScriptAssembly() to + /// dump and process. + /// + static void dumpBuildLog(const std::string_view& buildLogPath); + /// + /// Deletes the file as specified by the file path. + /// + /// File path to the file to delete. + static void deleteFile(const std::string_view& filePath); + /// + /// Deletes the folder and all files in it as specified by the file path. + /// + /// File path to the file to delete. + static void deleteFolder(const std::string_view& filePath); + /// + /// Checks if a specified file exists. + /// + /// File path to the file to check. + /// True if the file exists + static bool fileExists(const std::string_view& filePath); + static DWORD execProcess(const std::wstring& path, const std::wstring& args); + }; +} // namespace PlushieEngine diff --git a/SHADE_Engine/src/Tools/SHStringUtils.cpp b/SHADE_Engine/src/Tools/SHStringUtils.cpp new file mode 100644 index 00000000..a8dc4a0c --- /dev/null +++ b/SHADE_Engine/src/Tools/SHStringUtils.cpp @@ -0,0 +1,52 @@ +/************************************************************************************//*! +\file StringUtilities.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 29, 2021 +\brief Contains the definition of functions for working with strings. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include +// Primary Header +#include "SHStringUtils.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Utility Functions */ + /*---------------------------------------------------------------------------------*/ + std::vector SHStringUtils::Split(const std::string& str, const char& delim) + { + return Split(str, delim); + } + std::vector SHStringUtils::Split(const std::wstring& str, const wchar_t& delim) + { + return Split(str, delim); + } + std::string SHStringUtils::WstrToStr(const std::wstring& wstr) + { + static std::vector buffer; + const int STR_SIZE = WideCharToMultiByte(CP_UTF8, 0, wstr.data(), static_cast(wstr.size()), nullptr, 0, nullptr, nullptr) + 1 /* Null Terminator */; + buffer.resize(STR_SIZE); + WideCharToMultiByte(CP_UTF8, 0, wstr.data(), static_cast(wstr.size()), buffer.data(), MAX_PATH, nullptr, nullptr); + return std::string(buffer.data()); + } + std::wstring SHStringUtils::StrToWstr(const std::string& str) + { + static std::vector buffer; + const int WSTR_SIZE = MultiByteToWideChar(CP_UTF8, 0, str.data(), static_cast(str.size()), nullptr, 0) + 1 /* Null Terminator */; + buffer.resize(WSTR_SIZE); + MultiByteToWideChar(CP_UTF8, 0, str.data(), static_cast(str.size()), buffer.data(), WSTR_SIZE); + return std::wstring(buffer.data()); + } + + std::string SHStringUtils::GetWin32ErrorMessage(unsigned long errorCode) + { + return std::system_category().message(errorCode); + } + +} // namespace PlushieEngine \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHStringUtils.h b/SHADE_Engine/src/Tools/SHStringUtils.h new file mode 100644 index 00000000..abfe9146 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHStringUtils.h @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file StringUtilities.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 29, 2021 +\brief Contains the declaration of functions for working with files and folders. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Standard Libraries +#include // std::basic_string +#include // std::vector + +namespace SHADE +{ + /// + /// Contains useful functions for operating on strings. + /// + class SHStringUtils + { + public: + /*-----------------------------------------------------------------------------*/ + /* Utility Functions */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Splits a string separated by a specified delimiter into a vector of strings. + /// + /// Internal type of each element in the string. + /// Read only reference to the string to split. + /// Read only reference to the delimiter. + /// Vector of strings that have been split. + template + static std::vector> Split(const std::basic_string& str, const T& delim); + /// + /// Splits a string separated by a specified delimiter into a vector of strings. + /// Overload of Split() to allow for string literals to be accepted. + /// + /// Read only reference to the string to split. + /// Read only reference to the delimiter. + /// Vector of strings that have been split. + static std::vector Split(const std::string& str, const char& delim); + /// + /// Splits a string separated by a specified delimiter into a vector of strings. + /// Overload of Split() to allow for wide string literals to be accepted. + /// + /// Read only reference to the string to split. + /// Read only reference to the delimiter. + /// Vector of strings that have been split. + static std::vector Split(const std::wstring& str, const wchar_t& delim); + /// + /// Converts a wstring to a string. + /// + /// wstring to convert. + /// The converted wstring in string form. + static std::string WstrToStr(const std::wstring& wstr); + /// + /// Converts a string to a wstring. + /// + /// string to convert. + /// The converted string in wstring form. + static std::wstring StrToWstr(const std::string& str); + /// + /// Retrieves the error message associated with a Win32 error code. + /// + /// Win32 error code to decode. + /// String that represents the Win32 error. + static std::string GetWin32ErrorMessage(unsigned long errorCode); + + private: + /*-------------------------------------------------------------------------------*/ + /* Constructors/Destructors */ + /*-------------------------------------------------------------------------------*/ + SHStringUtils() = delete; + }; +} // namespace PlushieEngine + +#include "SHStringUtils.hpp" diff --git a/SHADE_Engine/src/Tools/SHStringUtils.hpp b/SHADE_Engine/src/Tools/SHStringUtils.hpp new file mode 100644 index 00000000..5b4caecb --- /dev/null +++ b/SHADE_Engine/src/Tools/SHStringUtils.hpp @@ -0,0 +1,46 @@ +/************************************************************************************//*! +\file StringUtilities.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 29, 2021 +\brief Contains the implementation of template functions for working with files + and folders. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Primary Header +#include "SHStringUtils.h" + +namespace SHADE +{ + /*-------------------------------------------------------------------------------*/ + /* Template Function Definitions */ + /*-------------------------------------------------------------------------------*/ + template + inline std::vector> SHStringUtils::Split(const std::basic_string& str, const T& delim) + { + std::vector> results; + std::basic_string remaining = str; + + // Go through looking for delimiters + while (true) + { + const size_t DELIM_POS = remaining.find_first_of(delim); + results.emplace_back(remaining.substr(0, DELIM_POS)); + + // Check if we hit the end of the string + if (DELIM_POS == remaining.npos) + { + break; + } + + // Otherwise, cut the remainder + remaining = remaining.substr(DELIM_POS + 1); + } + + return results; + } +} // namespace PlushieEngine \ No newline at end of file From 1400a25c4d2dd9357e452402df0c463d89993920 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 17:46:01 +0800 Subject: [PATCH 020/793] Added SHADE_Managed project and added patched premake5.exe --- Premake/premake5.exe | Bin 1371136 -> 1594368 bytes SHADE.sln | 6 +++ SHADE_Engine/SHADE_Engine.vcxproj | 4 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 12 +++--- SHADE_Managed/premake5.lua | 45 ++++++++++++++++++++++ premake5.lua | 1 + 6 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 SHADE_Managed/premake5.lua diff --git a/Premake/premake5.exe b/Premake/premake5.exe index f081fe1f6c990b2eb01ef5f3143857176e479bcf..c25bb3fb7f81d1c9647bd0e565caab567532570f 100644 GIT binary patch literal 1594368 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

ueQPvu-|5IYv1=(VM6-h7RCHE_AGh!S$QVM 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≧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%0AvHj5Rvpg+kjTx6?UuV(0 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 z zZ(i*TPKQ-lOh@cT3?5ikRruHU?5F*i-k=w(C=uIbA<>HG06vFd%A}j6zJOP@UaQHp z+vM8B$En8nH@CKT_O=d*C9_(=+GruxZqH({ra$3U}jUuNM8K0tv9Tr*$_JA}`>~w}#^&+Ne%jIE(VR#kEGHqjlj;Y(VF{#+QJhA=Gs4rRA9* zynjC*3^)j>2I5D?GW<*^aN$}uotGeD{b@A}>rX!)gz=QQ!0M%eIq!hWs=T!9h`m4y zq@7yLZLt!s6q==l+i!Y9w`#XxZkU5%gD{9`s@JtzcDz=` zr8izVe9yeX(5(tjpS2dzoFuB!ful}|gHg%|0UX$XFHhI9t_Zz)QdGhYb9mfMQct7) zYXH|LNwkk7Vucc=%BV6VYCLDV)s%GB*>*iJ(4(8Wg&;^lEkw6&7IzL)BE5uG2tGnB z(&!eko;1Y?Nb)fO!Q^NoRbLpd4EVFQ(@;4&dqkFcm4+#zD!RKV`yt>)WO?Q0NQPQT zYjlCBoU4GHxQN4SIfd-*JUT4TiPXecU>cgzr8vhFdbQ0}+(8wBvRHl|*oO`*&-UP& z@bqwfHOLF_s1W>cx;uZx`q1J8`#k&$BRB@WF$(S?q!UCL>0t@iXi|GOH@k^aLmHQDbz?u zw;reeRa;`!T47P?UO)O5kY-Y<|9+*jW?O1tVYpJ;wV#S8JWLldc{Oq5nUv;NqkArHlx zNSLU9aYa;F9SVApkHDB6eb#MFa7Abo8aqDgGo^{EeWc7L-S+QC+KHfcKe@oW6-?<w!z(~J?&Fl;)$8-`;L5{LJkKA5 ze_n!q^^!^xdKw~hH|n*g7Xv;hQM-Z1i>esYW3|TXt%OBQ}*a%c5`*58*ychu? zh(6v?M6iGzaVRhx4JUIk)b}P?6c>VsK2L)8Z89g@GP?$?ejEvII1NS*hpa9{QJlO4 zV2s@f#eUq>QE8)=>uo2RiK-8_l)TS|8EYNr!ybcE&>P(n3ajC1 z7cZ>UpJP+7j)R#?dec)WtnU*<>VJ0+qYqsrv`hjkka99@;zdy$btM$;kYdfn*)>l} zC_ou62m^Ppa>-jsp@?;H1>RKzJFt?K@XxHtswoS>4XfHUcC0L_8P?%t`~uTS+-e0r zpB)sI+1Qssl7+DLwsUZ7E<$6^ea>D=nWle&4fxNPQE0(GNo{06-{ZNxjxYc{qpe^} zv16eVIv+LVm|Zfw$Bb)r$Mn$*bExgJOJ>N?kx@GRFGL3MF}ZBhoDg9V^E}e80zuMW z3@Dy7gI$mE4N0{tFFytaOrw*p}^w}OwWm9+&Z{&~@ z267TXqTgXMFOh{RW$@lEW*JPA=Ops>uBPLPp~T!ehTQ;M6j#a67o_uJrbCh*A8j2T z9Uj9RY!s_&q#4r}?VaC>GWq~8GZy=CF=h>MK*;pLc%FZoj2yl}{5Ydi*p@Cvgfdd< z@Qo5`S`1eM+K3X66eMMtpk_hnElT+3UEC4E9pI!W8U(W5h{Xsu!WXqD{|m)}6(L=q z;^9p$Rto46WG*jKG|@cJ0HQ@yIDFH|KxttAH`OAEWDp2hMB^-ixB?-A&Dn1FlZ4kF zAFe)hPTae06m&*e1wcFaxGh1>fwPLBIxBwVAvA{MK81@vEYz>z?IB9)=wk9(LbBih z9D!LdHN)n+F_kKo^+H43xI`{!-+{3<*j>`qH02mx2Q%q@7Yu zLGz@0LtS#LiXVz?{ZNHxt{65Un=Yq`y=) zO>pzZ6?VaOT3j{qFb# zqV@=<2f`1LB}_C;GjS^MWT98|5rs6wlHVc#s z!M8HWQshIrS0OhJVpu&d2wbcfwiXr9ItQ_`%t#5*F+W4Up{v~***m3_=eT(TXOS^u z?m#i24wql1#=V2qs5@?;EVF1PfxxZ5V3>7@nMNPm?zzan$`1NX30olqi}&{&4if-RutAmhWb0((v>MHuFC0}7T|3&E-s8}=Z$n#g6`~YD|*Q09U86p zU19BoEMJ*2@wyDPP8C7KoXhCJ`kh7&vibrHx+(*aXkDd|Dss^Lj2e_p&0LJxip$nz z5$9;RsAV&dfau(|1&|`Mf@{7X@xpJZ$}OyRu!iCIF(edTn8n@?XD6=MiQm67_C(z( z>+?EZ5G&jcWP3o;*QL<#ilE}80Fa%+M1knSyaK2Jly@V`q>Un?Ds~SLokd)EsjH#O zYgGU@55^K4H-r}(g-mz_k_xoR`2OV8JzTy=OhoJe@rEt#0JXa(_(eMuj=|+jPj^@- zinmJv`=7qX(y}>@395|=)v@M zCvBdB5_WVrk2k)AGayR7V$r1+1Na8=ziOgGu?Mv;r!*SC(^_GiE4AC&mCZfM73W-J zmGK6TicU7iEyEPvs1d%)*~T6D$BFGDezdq-cXWY>u^e;S8!$+Sh7!`C=hyMTBJ5R>vZRNUI~BAU1)+jl358IW>)e&ck!V&{ zr0V<#VNuS8C!*7-Xtw{Gub52bNt`o3SZ)K8qn6_twjBrgz|D!y!TuBa^fr zHX!{pc#VRQTY0&-Kr03+%l?2Umw1Pz{m1MvghAJC0Xw6{HMCcl{Ih<+;UwYEUbnz} z1)4TEp`!{;U`)OWTI3!HM?aD1)%kMCo8BIdx1nq~tCC83NXDP!%n8Z_mef=r#l`R? zTDZ~7q#^0Bu%HQbJl4eqJ}!6CaN&)fM;7Ck6lGkQ8a z`eF_wM~ED7G3kyE^pXz#KvzHi@ZETbhto5WU?@WvF(~Y(c%c|EsSn_nJLY(4l?njL-Hh;KvuN2>1)|)NrRJsSZ>0tWv*A$0(Jy;TGPA{ zzu5Wd&{v>cToO3s6!?jPD1UC&u4MqoiomkE1{Z(DCl4KI@MEQL02#?@q{Opz*5!3&8P58=%*;{Nw+KzvAt4(-zY)lykmq5x(dyb_LVXesnU3k6`{xcd+) zU1va1)sfdi>FNRX&OywYy9`dks(9Ct@cJRg%XArsAK?|&R7%twC)cncnFlJT@SpT3 zB0!mwBH1A6Fqs&nuq}7(I}slhogOKiOy;}B(*39D!hU#Ta(^{X0cwI>l26 zVj!Z5LCsv)f>?nCLxfi^mcO{aB{0Fs_5LBx+526lYy{cNNcSvNdo=FRR^WI5?iKn(_`|qd+!~7jS0wHrl+; z)!r>CfnB|J0frDheBB1%vx>bs^44)-wmjJ78?k~z*l69Vo%s40+(r|!lWsLB=c(D( z2N(SlgvhqZ9(?IVPRd2VZO{Zy^KB1kB6FY?WR+2G*a?c!S}xsi5(K>vsMwV?v~TP0 z4f{iLEG<12ODhwKrdq22|g|lfxV|(P&R0I}QY$qD%PPJ!h8gC&dqGB)v+a zV3&-AKL`tGMR*dP<^t^i%EHlzup`AX1t$wCv{r9G4rHom176WpqLVsAC)RO0E*VcX7i~ z(#}uLkp2#vn=T}<7nf|1)*97?k)S=)(B*=u*7Rhuv+6SA<%Ok{TmcvIf2*V~E2l2= zO|}&pd;Zqgl`bt?jS(m;!epQAcPA+wp&zVi7`V1?Mh`&SvGDl0Hs7 zt$|pmvMI$|jK^DQCM%FOVI?E%`N~X&>$`W|Q8#@@o+LcJ#X%99W{~E`~hb)!*`R-?&Qt+a8#F#t0_*G)z!k><+6fG z2}Ilkbu2B}XK-hLDNGMlv8SLqsrCa)bIX;i)bHWv#20%--_+)E$E~H>5igQixd#@l zZbnlo*i&S{^KDbF79U|Z+C{uHjcHe}z3-n5@b&uqd~|Phb%OUL`mIT`AJB%7udAKz zTR2q1gtpqB$fU2r7)-NeEngrc=QAMX2YcSxcZW2W7KSl;)h50K%Le_{{2we5Lv`;O5*?6-a zK6R|7*@Y0UXvghEJ~JYB#C8)Uka)wY=`U0j#m5T^W$Vn!p%)g67`H>1L=Erj@f3{+ zcx93h=sg;VaAqa+oU)E6yUiP`G%JVm8^5KC9-v0DChRT(OUU6yPa4x#T)DA@dIIaO zJcFpKkX@sRSWMWyj-bboGSq@;bZ&BpOljCy9Zx`<8&Jz;&l;G4Hs*2w4dMl~^^5c2 zcU^f#X9MmzN5g$_j@azsK`A_(^8qh0;FYvV@6~{pb@WSPW}ZJA4W(YpK70+y+}U9) zPL@Qwd>LRU&*bg4Cg(`d=9znVadHI51pEx!uI^c~<#IS>L#3d*NrI!tCcF3mDi+$E zTlM>}JksEXKbWU3^j)dOpKD;Vq(TQE;_I^E7wdv-$iYczpr*e5bh9)`%N zRN(#WP{Ur3VeWapKv0zqkft;lfD_sY)>bjJV(|xJavQ;yki|D9;Icb%HZS&dMm6dlCc>H(NR7MZ$~W!POd?6a6p{3 zdW!tfYS8^d4pEZ^tc44&_&yWaO82p%|P8$fOe_ar-wPd-r-!%je>UTAmY(Zl-b%%#+x`X^8?XO4^np)FCr~Qqh}N z{1x%|JJF;BXUBm!3$lThqG5WLP(gzHOaiDuo?*P?ZYpPfKGaNW5QsusYQsv(1R-OG z5-EjXq%LB6lT-LEjz@_WD1OP*zrsYfZo%*grQ`%o9;c0^Ll{V5>!@vClV&8i9qs^N zQ;$2|L{_K!9zS7Ul#8h?If8}p)c&@b!!aB%nIJ#HX}V>gp5=&uNQ|;nPLD-8(6yTG z)9}#JeBhAULXYE!WfH=*Ri*@U&fz%jf&_JEr)Is^3sH1CCqJpmcIm#o%w zr!ij)V+8)ogY%KZwg^bY_5m-;Z20q@g4bdiP^k}ErfN-Vk2)uK=;Om2;3z>>jo#N<93dAb4<$dnS+|l@VssscM>x zq!K?|ef-zj-A7o9KHNZr{KE$*p0Q-W%wUnl&0){zh%}M43A!i1ltVJxekNZ<|H`(L z1)#D9$?#u*kawdHm3TI;>|f-ETHu-}ryIe*mG?yy9H0h3fAQk}YLWo(wQb*QBGB@z zo-|uHYFL-LEZ4q?=Vb}cn#pL5%RGYr+77nD<9@f(!})sxp8`Ci00$r-2VpR!rR$C9 ztt`VvTHU`bMb{dplu{_CWF`^`tqa%QmhVphh_W78~0-j;@PtHC>(=6UJ zjfVBX#dq*^bf1>8Cs|T-97?IxZ9erKiz2f^yZcZCp{TK6W}S*~2vN&?md)3WLdQ@l z>&iG${OKBk&IrtsbwZh-@t3}5T(nS_xd{$&(mp_Q>|?ch7Yz-**n(k#Cro@gG5Eky zOQi0N#l?2`*+>e3v3VA^@amz-LVC>H>;!RT4e<{yeVmx;j3fS)uY$S}8n!zGG;7KE zAlZxQF1Dn?)R&A6(z~g!Xpn3{#`Qg)v*m>Y8{s{e)DerS-e|5Y--6zZp>R8CRg^dT zM^a5W=6l$6mhM094bF}2++PhJSPz1e)=11!0WFdkt$o%uHehu@6KoU)Lg2Nuf9+xy za7MxfACMTCoTd~XYGOJV_ugXO9&WcF$a(glpBPud;iJn}H2CXop&FfP%20$FU21zy zIVo{6pr~2rsV734qAwG6p|tBe_f?l0&O^N}`)EzT9+XCOmb~}M=H*5QF7)t-h*kU- z&hz!BjLn!wep*n!v2uH@L-G+HpUJXWOKTKTYlfAoQG`H-Hk57nI}gvW{cW7eADJZm z=>+uOU;@3-xp^JnLUk$RJzrb-_D1uiJ-IluNrU%X2Rv0lS zv1-%>ZaSN*fJ%dCbd_~2%0`#qgA4ErXtQfr?jx#FlY`2`HnZ*kb>ikC=W(P5b86yF zSei<#u049>mHV;7yd6Bvr#(5<+2{Jf&W>81rq;D0y50({%sSOl4y+o=Hun*93Y=mvz*|vnl%ff4sWgrY0G-V z9I$*k0g6k*Ow*9EHGuz2SD#zb!8?UY{jfF=J@NUA7ppHD&6~^eLpiM#rnOhtV(#G& z00LK3^3X1fMdY{$h@G`!y{0TdLCA9jfeuXhH>L-eGE>Vyd~vb@iXh+iiP{}w~39k0U0MQ>(au|sP9o( z0-|+o;Zd-qT5lrKu1!vTj=-ti+PmKQYqzo0qzq4sYk?{qB*_CC?I9+WEKX26O&&Z^ z4TVii=%OwVlwvau?4_)1k?Xa@Pq`%6g;3DR3AAa-Bspz@)I`lYu&7R##=hFwfURsX zN=hRfLb$~NE2X%FHK8L)ggL_*b`|oZHUId~^JRhgIsqd4Hm96ytLqELX4J@s(PlAk z(?q@1ElYZg(`EaS*jD^2DDu^vhf)QN068gfRf!7IErY^frxZqm36HAS z7y;L=#TB$`KYZ48Zef0{E9#v{0buYlv$J!IkSgsyHvJe8I=?1$f`2(uJ{J^j6Tl78 zZo&-NOCpH;yfjLqNMnKOR2e7LLvtP}!P1n1O)$0efXNcUhofNZMW}9Cg@+$+Onyq- zO9aN|#YGQFyR3z!`+Ha(vW=G?P)O0Sz35;QHI4ARV43pjf$$0>RnReu!}6)U`jq5; zJx-W5fGbXKbz7ALt_wR%OC)fg(W_}TO41N;dsK+P#e+s8VuCkuRKamu5}YBs9p&rJ|C(W>dO-=6{g5nalu@_ST?N0f6nqZ($=47!^l%AS z6sE4Fu*X;*e5h?4JhN?&Rc0y^g}7}i#4P!)T-oV4lR{H{Zw+YX8GZtP5h=Q;4UnW9 zQ?zBwy=2pY!2qRF5Oz+{sA#$xFGL;Sxm2niN1{y$2QMT6EH<0abQQKoc-2V{4|f2$ zn!St|dq_xiYWa>c5#<+I05gM~3XDDX7Bf@KdfuBrT}%VmSzA{yQ9+YQiU}0wyPTcD-HR$WRzQ+t+U^HyZuxr2=rCw28w`a&AGY*95 z%5xvuWJBG$zgo^UEwXArZlk2;5mtg2)*_3kPz?!C+)_TgJyWq@EI36+duBSfnfM$9ZUpq&y=q*Fa64Q;^Uu zdHwJM`>bh%g@xC-XuAna$87>#yw$0r&*QkBw-eZf?d_5-RFG%A68eG_FmG=5l0{ka zq3^Ki%jWGMrsvy4mh`2kTg4gJVbh#@R*F>3RjbY*=~aVdCmX6f{P^`+r~S?CJ9k$Q z{OPNeyLV2$SvhI9zg;;wxqH&S{dN1xukL>H)2}{muWzm0-P%}NxwCeAd*$}+%{wcP zw(mY#SzFs!ySx3%Z@0D|ZN#l^Z2uCXW;_$h4Gq`goMTQQ1SO3l9eDk0UZ18d%e3Yx z#@u3MYwhZSN-rU}Dj;L{6dG+$NGgYNqrn=>29)KoIVDy;NF@|&+R#A>28-g!YUKMH&e5%}sLHm+%*iQ_=Tbm7L!Gd{3%q!eM zV*?8z5hMG^A$4wTmlt-a9)_zip+2inDtypb2bF>}j$r5`oKG{o+EEXm4atg;85|>P4n) z7V(mlAfKGZD{*gVv)ewyStlJe^>$NGP|7>J{@Jq_$7@=fQ#2Rb^@LffrZ7JXh{Z&S zwH=Ol=g44EGSkEMB_3nqSt?!yahGeW7A#1mW~u}}n&ExPW?{&uouNPfc zT^%l^M-bL-e|hKbS6~0~n{U@2ZQyC9?;h{`%Wrm{?Cl@?m#2qE&%XcR$KU=}h5%4X zU&M7JZYx)hPjQW^Ba57u{drkP((SY;O;UN4rqHC4)k4_cG#`Pz(of#%$qUfWJu9Li z*78E|mI7nWit##Qmf*n(0{l#PH->GXP?MKlFK{n5??Qsdrl6kox@VoNhc;v2k9(~w zvD3xF2VDu15PF6{$DR{$U$c@(J%=ArDXj(n+*!Q!IiLH1%<)!U0&)<>%PVmnsuH1Bi7Qi`&cVUuG69Eo~^28%NXEP(3 z-47vlqy&rNYY-AMppc$=5GJAPB4~^UrGmyshSz*THuR5R&kikv_l=qe0A^YnkW#jUq%9Z+c#%D{<%XoBQUOyT7#0IpAq4RF+}4fig*wfHQJ6!S!7za4D=s@u zsJ0`F4<2)b9r37e1?l4={JguZ({yfOp@y^&dz!3JZoViqszDf#$OfVWQ3FF%Ese*6 zbWyi~K?%VFrP~e7tl-I(#u!`fB7)mfLq4{N+e{L)6i#O&zviUz#7#mEOFH?R@eS*$NjQ)i76) zUafCXs}>YVps^RrSBHf-E2BIX$09B&vSPRlK+lLo7@FpLQV+3r#M~nGBM9AqFfzXd zT06mma@af5cREFL@Mi?RNgZxz&P%2YV%OkMqqibD+(mDmg0T@4b&;tnx8?E$ib5&s zGBEtXH31_+kT{+a1*C^7YtW0?lChq2__D(9!Hb5vvz8%wC(!1sS*99EvT>r~s_ai; zPvr$(#f0>c|8O9{Rq%IXhQ5k~R4r#z#vCbK3pt?$U;QcrSf7=Rokc2z79(vlQw6`} zv0Y7&it%&NdkrCAPyoP|k^?BrU##n!uGFALuZM#VPbm`l<@GjHrAm`@!=fd5sol>C zStYcN`IKAnGMSvR?(htcIPfl^3Z&L}-1^X99mJwCj0M<3GjXX^j6@L;gU?_%x<3?! zkQWtsC;|p7BND|TNtgz?jabQfzQcVb9MNsm8KWt`8J$&sAr)4dI<%*Hc(T)r%U;@i z>UIXAvEdaMd7~Z?#u#TTZHDY+2}mS;;}~VBciR1Zt#RG1(k$P?%3oxh^l^vmJQm4kPxPn`j4pd*IN&Z;0T7hwD|A8fY_QayQA7bMH zm0?oYy402D87K9#FyWdWQ~W^vG;nlJ=DG*}?rsNZvXfzoomijr&U%OjE{_6C>cvRh z4o;8_vhzqHdZ{i&7T`rIw*sE2!VA*e6AW!OJ_uHZ?_N@Hl13*P8cgNc8gxQIZf**z z#k&Z7>Lly#RVKtt1u-g>Y>~nVeeL_+gwJ0cO4#+9Beu2;k$$VTEiN1GwuaZHn`>)e z3grA=39 zaSEeZb*vEf>E00I>v1pb$Tk}S`@ZD;x}*ql~k-4M-z1y!H*2x zqK-JNSEF1@>Or>gjuLBuD>H>@@EPY4l#L$Phe4=vHtwe5xy8^pmp|vw&^`u21ak2tL%VBykTTQ$g}F-zN$-e+ z`45`}CvsIMoW>R5=7MKbP1%pDA6!&jR|r6bMWa&6WU@vRiuG9wSK~*jomH!L=rZsm zY)P=+(?gOV9zF)0iYmz4?gk2lB%zG8lGV>anAtOzj>T=lU9S#admQ&h2%ZNMH0iUR zjn5fF^&p%@IOZ@@|0d$-@|9*MeWVxNs)4>WGL^pf3p15jP0|x=n*+=Z3^(?HB}8K& z{+p&?HY8C`kFdH>8a5-!yW9~{zees<9NOrxkxw|Lj0J> zi#VZ_4;*D&FR<=?lT#S|a;QqzKO8%@?d4Lh&gAq`L53o`-$a#wBAyf-4a&Yc=3Ag< zfwAE_12DEjM1Td!dfD=Ai}9IhYFk*wq_||g2f5kAWyEz~>p++|om{v zabyVq*oom3xNw4s2#Kb46-M|n6OO{x6sa;^RblH>7XK6l<^i|4?ws43nW;!$2cdMCriAxC?sbChw+B}Q(8Kon?%|f` zfxflOv?9~`d?^JsI>@YY=^o{>%?Eg`>^^Xf(+(#mI2pIQGu70Tn*hsWtKQ8p?lT7H zpmRS=K5xh4B42#bf*$hiTqEptsGJOzO&VpD!xB;XI17DK=2rYos;rrcPe4l=#_bH~ ztccXpeWh-i3bnFy+_U4V1~0d54HA;;oX2?I`+L92$+go!{yp()m@r;KqrS32>yCzg zDdw$emd%YF1ZYGF_RFhbua6qp{z`*14 zseM)5z@6MU2`n~3!?G?a;!0O9#;S1^cSpica%Tkr*=$5r9Hw$YCT2Xpd=he-N!&hG zD@8FsGT4}w^R}2?iOp%}4i37`>P+R_i`vW(6Xs7Q=c@FUvlIF{Z;;fMjN-nkt*kI} z32{}%HU9Fa;LHMVHDSFBHL%MSYORTyTC=5xDDoOsei`f48xbzS5cSqM&LQ!9b^8s7 zCamW}oU$Gr?L67S42ANxGd8C;KS&^R>5!LmFs7RyeeQdFsqG$Hh2B?*Fv#>KjgccMM833{EVPiC5?IfOZB?I%vQZB-J%X+r3D zbLS~yxm;iMi7((EFx(>DvIHAt7lv`HSq2PCq_u#YY_2GNF<81=)A0#sFhY5foKRW& z^~C^hY{0Jrg-OONpuvR*yJRa>n(UGkp%!GbnlxsaaGZH@&Q_QM7-d%QGl+RonJF8y zfUkzCeq9l+BbfynyOFNqS_IY8w{dImwl^N?t=eVy>R?&H%dIo)PrBVsgYFVwS`7&L zu)Z)!2~mQ0AXo4bN7Vv^dMHO=5PtkY!u*w>AZsj1PBan{Lj}x4rt*&oSO-xTn3>XG z+)fMa;VnE(2SamWHvYsJ4)nR|Y)i@Bc^Jz?lF8{jl#x(>u~bYa#e}bvmnlpKh8-fE zmiBy})=c&N_J44`#DL zP||RrW!SG}n87hsIEt2&gE1ak0N}=$oX`ryHoh1fN}y4dk(fCZH*nl<9Pb|-?d^_Q#S<8q-voYO6PT5kNy}1_7H+?k zx~S)P6xYqlZnF|nt4Bh3d3C@fEm#A`&_O$(L8AxM=>hvrJTAs22| z!;sgwV!x7KIZm@uaY6@762RdEeghaK{A%w21sOS z-VCO=fITm;zCkvUwjDJ7Qlq-`l|)Fzl^6Wktrbx!BSr(jgJBIXn7;NB>hbBFq>v$#wEbUvR*iFJy`fiMrhf<^0rpdH*)O`f=f(~K&RHV}_ zdpm-Z?S3Z;SOvCD=5D_!*S@TLMN9OeFlZG4fgz~0CVm@CQ#}Zl2t8?dC0=}T%~S{{g$}nfLesIiz-4^5Mt!l{G0lnfU&=x&Vo*U(_95sd zwi;+Qf)Uv?#}#Hq-c{$-y*X)&w*>SCNaUEHOWags*a~n6&7=Yz@R#ZE>n=(!XK5x8 z>Q65Q0}{0HHb!?PH3z4~Ok^e_lOxe9bQhQ^w)~aiIBA=-9)>cLP0HHT!FJ*m0@=8n zo(&P;mYWu{t<+YcA!WJtMeX+5+8S)Ej)+Y>S^`$t=}(q9d~YtII^MGaIq(Kmffe#9 zV1-SC$%OE{8`TS@nf8-xxhyr=)G(!>EhkkKMOG$nyr^_&t)kjsZIP|;Cz+2V8LQ!M zm)uq~b{Xg2t9V{wkBa0R_Ofsr$a$zBuRIcBiuj83xWS z`#5;Se=w&YmC|*9hU6O;V+~Ef@&ljswI@f2 z$D+!6O_4W-M>ReDZU`b~3YDnBoV<0OO#iveQl%A$h{#IFy^R2vEo8572b#jh>lhKz z$2jXbRwLsvH8(6GEy$0s(bNl5jk=jiapt5-3(6=0&{}u!woyM=KYFYuQg~#+-VXqN z5L*t%IM{X7U$=U1E~eMt-FftM{poLyOYM|E>9odxW_nATzunzDp57dXmxDg7xEsvI zxEl06na7Xv`rRsaAoZUT-62puS_i9O9qQ++@V;6_#Dd9CuIkmpctrOOl?<`gXG%6D ziimYwHELXwQSrsyYT z87DuuhWHuB_x0Tq?D*n_g90;>gU_M?Tx|a9yP<=x@2=jHzPyXC@5*RwP+n6;gY`Wp zE@CyVD;rr%G|bpiVz#s&77@lm2Q>`1fq$tT-U3TH;hIa=5lG>(<%Sst6PX0E@bywy zaaIfs!dL~DB|dUPUwi~}gb@m3z|b=UXX`Di4LH%jWT^G|!V)mZr3K0dtzup3v7hLkBv#C02_HLz4wbc`M`?DpwQ;%JmE| zyFq8I05Xo1|K5Wz;j$5e3;o3fID-&F>9{bJz7j(8GGU1VH#~Vb?Vl%%$PkwBAQB=- zBv%bkNr;n~PMqWJ1ddQB3YuZ>DhTX>BqoTgv{GdGZnL$dlw}kbgl%mVA{mN$#c88cSq3eD3Du7merlR$uaR>(Z(T+8ejI9W0dTQW#o(HuhjMa}GOVHPmc@toh$>3)t>=9*4 zYUz^GlyU1Fhl|eYu>jc=`HBg$SOx&u8omXP2VIJrGSpCDuLL;k>sJB1^^OMl0>sj% z0v+;U_yr)&bbeYywSe`;@pmveC)1GcpMuK4rz(`P&s*YvrSzc(Mn_1Zg5oq0=34~; zR4!Ub;Pr-be1^tdPZg+?1NN{J2t9oo)uM^z%83VnVK~cyY|WkFa>5OD2_TV~!!6_= zVV{8|T_{(>kyCoUd+tpj6hJZ#iS3{Po>Oz4OOl7If_~e}(toe2sKob?&wFZ>!(YAEQy*e(*w+e;`im znCWSV44Gfko2goO$JzGSP~dqok^Vuh!^ikUFF|Xb4#S?A9&IQnsFqU})=^UV4H}@# zaB+o>@DV!EJ9^)?A#?iB= z7&L+z)g`>a^~d{%M@PRs@J1G^N?wSbv(h&u%!=@juS@rKVBb{w60NB)eZGg1+SKVA zUS}H0Y;V8?R5ce)%E3HTc)Iop5=6=sD&YfV^Z_0ujj$?F;pZxk-r$4}2QPTvBM1 z(RM(4$;`n16bGo{P#Unr*aGMr#xVBaCM(RGH{XE~9L=jXqU3C&D+V8i2IKJ(@8rouvrBH)+}2lF~=zS^xzky>gpoUo0=9N|EmlY;;u7p+Iwo z%=TQURdEQeugW%6&6p*=s%BS`tFNHXg;h*)*2w1pYYZDVAaTxo+DX!9){TVF#T#2`Hp{pSDz1=1 zktE;@OpH!4tZ+E+P3a*h5poOy^GCOZ(>6POk+DQAQqEnh2AqbZz|pj_vUqh)t^1#E z*KR*7G_WXDU?B03VG2tF{u&e9osjb%*o6%$P>*&2ZsusHb>ELruG?ushH_GLf=4|l zQ*a6#GOR@xfemrM1zJi*lrKh#nl zj^D{zc^5jzTF~FwqBhocDuWQK{odjs&Og%`O!#R7DkDk&z4z0 zTMku2H|@IAoKD3?kkt#z4S2l<=JTLt5Ba6b60x7)u{l^e#~B=WLko|h5k_bUkoCa2 zxm2CvP*2;#h63%SLl$QL|5EoZ?QI^*y4aeXJRI#zGCkOkbqLxNbhTy6md~a@Qf3xK zG9+cohm!G7AV|R`0W1KN#HFp@kz|_uflTsG@)I)1AcH(lGRPoX(IF$lx*}86lIGnS&!rX>z8Xx=-d={OOw^j%?B^vTH5<{9vbv|5 zCta=Kl8?&^b|eQ7m++hLVgwd^Ke(YwH~)6FU&(@R(To(ITU({VbkajfAorN8;|Wut{C z>6k>f|GUQRwZ`qA8@D&K$Xh9Zmv*4qEH&0}Z83duYgrh0bGV216n(tT4zZ5nKbX?|FQzEVsvAwzCs|6) z6*G-es}d*1dwK^r77_;ib9pAIt&Pv_yG-ogiEteFzISp-U?5O z{)(b7!D$|sCFG&E2LiIb&z4UtrIKtYxR=qM5D6eKfIUO(ek>#R(Sw3R))@%p&WAI^ zLy{h1>)^5yuq4-YVbV~BE7gV-Yu%3ko<#%zDE9sa(Sd5L*)T^SIgSrmg(eDV#H5{; z%r-N51uf0t_61y63pep#Xq)wo4OcW!G574ojOc_g7A&f^1}aqm_<@B)EpF?{=2-83j<0QS0d7`OeA-0LI*p!RAVMH8cONz>jMv)X- z6YgR{z|4Zp08vg44t}}$O3VnK-+TpWUO-TJJelCw?$JDStr-s2gn3hZTAbq*EHn*9 z4@^=Zm7Moimd<6uR80Q1bE9ZLoi2kM%I@l;@w@Nyn1KO68UD(|2otiq=Tb7Q7;lx! zR#_N{TGdnumk;xI8NVgXC_=_p*F8ai)gM26hYw&DYbT ztQfy5imA7rz!PZt&4L-U!DyO6I5c4=f^mxj za=j89j<^y5Pj1t-GXB@l6CN(Dsx+=Ncu*Sl5Kn7_ zZ{E4&ttX`W64=5DX~OCQE-yG>E4X&r=lj#V|8V#g45{E-`2{>!9 zrjpc+A@Zi7?D-UCx_z9Iun0T2FRElxVO!s0wq&K2BZ^DjAsjn!9`h9|dr-3a&V_dt z;*!M~Vu^oYY36G;J4y+E)G47+xubRD;tdxGv30S7=i>C~SoS7^umzqdh4Lws5fX7E zJZjE&fyhL#rhi#8O6Ay9bTNZL#!E<99yd0xDg`x(AL0FvZjWW0+C3P}XZ;;ZZ$TTw zs>C~&P_MO4Z$?KmAPWB^917!-En^L{W z6EvWK{Va(Jb5?{h_C}Tx;@m302ulzBfGQNaR$2x9;&Zy$D6H~54&1UH4TZ!y9vZ0c zyPH!!Sv0XHi@=iLtZm`psXSKczfnlkv!DmG3>loLDraK2iohf$n2urv4jfPZOBmP2 zG?{gvn~!-m&%?ZhqAibb%0$)aC{Mc?sLjC;_qsWWtMXnKvP$!{j8Mkon1YlU7YSYI zrnaIF?nI$g29r!_oys|!0$rl0S()L0<~8IMIjV*-y1&&~iwk4o>5}wbPQsIKE#4X7 z(HYqsU_dm<#-8#(6O>x~h7TxEoNf;T93@>cmJ#QAO!fS%f3%LZRYnbwR}lOd5qfZ( z1%V_@Bk3nTOX(lGIR4^qHc%m!V!Kfu!1n`GQ*qEc95c|YT*GC5MWj{)k*(}XB!4o1 zqP!+^PH7@i50eBhmU;8k?B__sh-p!Toid6%D!A|{PW|+ z%SHU9T=Z;uJaOg96 z7=nSXWC}@#I)#@rRv}-w#TrwqeDzU6m2{c(LGP4VbQbr~&IN=ib=v{H%gcd;W zVxG5Aku|TCbfpa7SLn5=9iKjKeunW%Q|5w8_aEeqjCEFuxs51Ar-@i2A8=wB3g35c zPJM|e=yIlhl>qyEOX!&?38AY`Qq@8GnkCKatnnXaW2R$eUB+;5>s2hHOCWUkKq|=4bA$>?V>Q-=LRDxNihLs81t|51v!_s{E~R)?xib1y zr9P<#Re&lwQB*1eAFdX(O=ZQ9y7Vm@03$gUL=g*d6<=db1&A)6p#`Owi-`@qIyA%M zYV-KpmKs9%H{5eRzTS>gF(v9WgU~lf_=O+hdgI3>>5h^{RqRytynQhB%Gs`ymR0xo zHQ-oXgS${ty*D27AiA!0f=~*8(jP#)ZMB=zR|qF&eH<7eT0i}|uv1^$MEei|`1_iF zpbqg@<0HF~sIAEBBNC;E(kN$X5ztk7+OA{*DIYXA(^}UwZt`e|h5Pa2my7Mu>tC^i z13l4NOWCmV&&{6p=4GD_UPCWXtx0#@YCJa@r4$saaOiaBl+y&n|C{!`Hy3#f|Gd8S z-oKxlUEA?wDKq6QOzrQUsW#VuMkhBspjAI^QqQuHzV*Ef(=MX-pvV%oAztzV1G*%n zu9YLUQB7LYovW`;jYd?+A2)v(oV*FoMmHM!urayJS(Df&*pIH-J3aV$N!zCQ#)0J+Y z+7KEQYB3S=NW{L*@0%EJ-CWY%2mD#mu}_aM3QDG-mY7B(scrL|uT0Eb4+`x2oT@Q|rBed(Wpao)fg==6__UdYT5)1=Ax46k z0P#HIg)YZxlC~=~(l9TPi8s0X`GiUMEl+^$p-95wgiJ0vIog?(TN1;H%^knb>cAo2 zY6Ed6sVbsAA-VMJ&1sl*n7%wk;+#yByoi)FR!L;e)G%E9c-+Ju?9#EZ)h5)mZ|{VC zCfMk*o~&%NSH%&gU~hh>-`|r_pzUB=1a240(D#AFm2gacVJ(c@@;77-S%rAm5Lm!Z z3w-z^?PH4niV99~KtK_igJU0@b^eh!UQDET8*AzJvi)~r2Zx5+pYD&yyK&7ai4AEq zk-6z2uLxagN)6J+$Hrz~LmpD*CTxFmbh2qqMN0^T!<#AXyKORRIv-325yT%ie-R!~ z9F$iprzS4&@MH~n)XKH^Iudydl`BS2Df zr%6IkpjW2T{@Lr(3xyJ1|F$RSSYz6L`=EUX#xqwpnD~8I1+Jr((Z+_l0?F)3p-XPd z&=`mR5r4kLzyE@N@A2=y$G`s-|Nb}p`@iw;zeX&?JNUQ7n27)5fAcT=^IzHDf3m*~ z`@3v^zqY@t_E%SPx#fuKQP|)>)740)n1qM#(k0(s`p}U2%!Hjh_pS)B`GR)cHY~fFT`rrQt#sB}XzyGKG{lDz*|6_muU;F$2+21n$nvx?6 zx9}qmsUW}6uh`Et7pl5>g8R){1oep)^s)skBL5iLj3X#4DZ zI!j*XR8wq=FK*GH_t$U_i79j_z{7-7clOh8{SsM%a!UIx&UCW3@d&;;tlpWbIKEm_ z5VtoxP>@oadFqK%j6Cw&q7VM552Uvc!K@s^&FP>VfJm2uD45>uUcj zrQzVjg)Wq&`Kz9J847Pu!nX4(sNI;3u)EXFSPa=|yRm|37c_X_ z(hk@Y9-4R^g_tu?G73+);Xl1-AZvylnBKMnz!&7JB;1e2`QT{yKVxwnmTWmu1`q=o zMw-l_Ps1w}_4PMpKvI7y=dWH0dri;@_qI6tc+pWdxX!nDb`}ZFETXg1!WH;I7`%!P zP@*kZVd$XtgikxP7uP|>nxTn~h_04*<`OO)LXm|*FnfFw?w1TW34f9Z)Mi%+DsV4@ zD7;!3`zI}_T1Vp0eV@_r`*;cu{x%Dvp}viW9=ZN2JR%cI{7`@v7JWWfh79ylbS+AB^bGOkyW$>ATgq=H7awMw8d z^eZwjtn%EAl4 zyb0@c(N5&NAbh~;!dyC05XQn$98Dw`qx##563ubS`W6S3uwJPkBssj(HgZ{|WbACn zY+xm}2=NKRh+_u+xRKQljp9a_-8D`JjPocf?*qn3e{|lP(ZE)&VBFN)u|gnRBBnwe zavaN0c1>*zF*-QFNd||L5cwP(WS|qe57(Eoo9yBC@btolM(K`Yy4%;~49)s9q3O?) zb-Y;1^q->cbG4bSy*J$hP024&p~y+~>Wmh_v#K4a3-)6AF8pmoG(s@g`IHG->8z~c z&>!e70CEJ{+WX5P!~3i2XF{iD3IPHql8j_d|Djo>8CM_rg))HR2_NASf(5}Mz)kt# zQ%+Jg#qP5DDwtfJCgMvV5|=>V5f!G#W))k;YcjWnG0M>7;uVRA!Fv1>ao(H4G#FT!tFHe%sjC!tm*dZ z_x|vs*27$p9~5Zh2t3n;%QY$>-uG%pSyrWFedXX$b_fV63a#+M$71boPw#PFe)6Q!(Gw z9o)rD%!;wqekQ}pc}Ok7rXeYhQI#oW)3s2dG*N*big1BdF^i3?toq4HP!h!yE9X(> zL|ck4y8s&2b96CG4L(Mq@qR1(3jJQlP9&|9QMQyi9|TLlq+lcUY1OLqH#ef2F+wZv zJbCei3(q<?j; z!A))gn8pI@qsbaqlUO-#PrT{#q%FCIx-Z+&JZI(PWYRyuVp^5yC_q*JToH z^XB&OoZ6|rM;JR)C?b3QS_q2gs%yjrTH}_<;BYuAlHf&0TEj@elw|ggq}8hIO{|(p zkz=?w;3Y8O8m_#~qi||fu5^ZiQ{C;`jeq{^^XL2PUw{7DKdZ&_eEJ5D#Je4p0Y33c z-jCR_)9!*h*1;i`Su6FL+TUqJcdDyu9Ii6n=A=c1F8=v1cOn74a z5&a~M{`9B+<$wAQVxRrf|Ez!i$^XJ;`%n0Hul;5FLHmB?eYn|Zbc)9XMzdj`*VW>Q zl&6f_X%UmTW5bJL*M3`$ib+6{J4)b#IELB?g!8G!@;-)GbNNAaNt=h9YcYp6Yhj2o zjmk`2EGC^c{hQ(x)mXlb&~=okh6n5}M8X!;Xob<3M}AX~QdKIyrqEIQv0UjjC!{9* zqXZO`t#%J@FQnhc_!fPSXxXb&XjFWu(a8|mt+E9XE;&5tShz)61yKs)y)mEp^FdRZ z<&Y1jhk%^oemET$Qux3`R%AA-Muw6YR-*Yh1WYUY6LQ`18fg3;$0*)x&DgArp;+st zQ4sb)4)!t~V;M)3EkHANHJcOpbnl0i-L+LbAXACz)@W!WxlkD91dr9=`lH4xxsqKd z&by2Cxz-HkGgvaKnJ|=Wv7~n~B7m@E+%}eS;i)w^!Lmv2wPHGXoLrngoJSG@Rw8=d z_gRSxT%wPnNGQz!KsZ7LrxH`ACYDsrYniz&5ugQGeMgVegw}98WzTuC4;=+inCdId z?D<$kwbzu%?jI#I5EY)UI!^ySs2HLo=RO{<-g^UM>5-fb$Ieh7*P@FN_`Nh^z!AY? z@BH;X!(4-mPP^X4?;_@VTvY$P=;cG|l#1lJe5^ThD3paG!*;vbrd&u^xJZKzw8Wa; z=gj>8izeeGTrvkxtacbbolrhf*W>bZ27lTBCCmb~_DrQvZT}$mKdqU%sr^ZOppvk1 z>Ez-Jsf;BE>lNdfRF;yS&MWX7ah182O-2a98du#&tRh$uMy@d&pE5KAZ~aLz`D_Qw zlBFcV6U9Ig7f=)ymC|0<*8~Pv^!<@~Uj_F}POBYA;{N1qf2;ovvQ`JS0%S>ls9s4# ztY2-B`0CO%;*+Ia?JPmZ=C3#TB9+dYbOlNV#EVdrCTnx;)bR3@M4vWCDjJUgh}C4a zB5`uDM&dQ^8FV%bGxVhw+@Dg+g$%(!n9r$#@sn+xZPZa$+1eDT`eKY?Gd_O}waT<5 zhg5;fj+Cpxh%7B^%|$(6iZ0Xu)WvKQPcEXc@;3^*M#n{<<%1FJu{HBXRH$mk4vIp? z+zuHn=8ME#JgX;q&hH=Zlm^W`(^vMOw4C-ipds59uWM4GVye4#UQGzd_N$TLfl=U- z89nrj{L4E8`+9X4UH=^&mvz5R8d5n53|Q8p=kN!Y^sCY3%Rh`WDkXvRFC*Qvy;VFm z12l8kf3D0%?i5csDdrFBe5)nSK!Rn1lDRwJ57&^6mUSS zMi`~~vsYPYvnH01lm5__X{P_jqMN2Rp z{M;3=nqKrRveJ(vvS0=vn{Nt00zw+OSyt?cWSG$q&r%SJis{HxTpeZ%3V#Hn6m|+j z#8vCld}V^nrgsxp@Gu2*mz>x63E=SH*il6#WYyPGLk2FO7Mns6AC1=L^nr<1b1;Oz zA&%&58p}zvgyjwRi{{k$QA#lzyClS)j6GUzD5g^&y4*-w5Av~sR&*bBElz1>1o1^5 zc5W3pslTzN$2B6i%R>KBIuAu}ZM)=z$dh;Tbv_1$lrxZ(V;)qHjl3gHA2yc~}@ zc(WJA7@68s*-!frDST?z@RDOnZ)(TR(9l3Qe8X=!49oe&YskYabR?XE+urE(oILlt zP_v2Mx;koEXSBBzBR2rS1q{oDMO4#fONx27?B{vkLElrSq!LIO@bh zd~~;Tu3yB06_hlAyoMza*2!6q2}#5#MuVXo74a`f46${H2eGh#STsJJs9aGr!CJr+ zOADht?KumE#><6l6s%M&tS};0&?i3tLeSa&jDcmr_WKncSh6?0cjwNR$O ze$oablnohJELq+1Rn*hCl2*1uLnepWtEZK0!FuK`2vbOH9TiLGnSmxqUi{2jmORl3 zt<42RuW&=8kmx9&c34mJ_!v?sb_ow#!FWbv;o-~%M@p$uWPJ6(ludTl;f9!<2`uY1 z;DjihNv`(PF9zVr06Ak7n1}I9YXilyyoq}?OrdOx@wy5tT*_YU<6IjyBP;+J0K=*Z zVd&h@?rZSr%jK{Bk8Xsp6gC?A%dIj7$z!m~0numBW-nOpvxdHe& z?3eL&Cx&TE(DgN-CRcsW%Y}$JR@m7^%9QqWIsIwY>uhA`xY88rwB4B9_Xol@4 zj<9u}wrdg~AO2*FHRxs4G|L7pn_@u;C`!H<0W|A^>}WY%b1ZZm%IUtAg#JJ$MldtbWF z`>d9t306x2-CbVk)-AsfOP&yos;p00N`+C!`$6tejG`mi%rzEouo!_*IN(ws)a{+^y^R;kpyKf9Ps=hYor@FL zQ~=1$Y$*mkTIXc1-ql?=GocUCKPea&z?`Ys0G|jEG8^=04d93PIM~N?JbQw8W5T|M z7=No38HO%x%XesE@IqTG!o3>*+>oH}T24^5Uc+?P^Pf<&34-NM&;qugj1)aFE(`ECrfK7{mY;chOlZ{t(;K(5XaU$y0c;&ehxH?PSnb~5+F zcEhe5PtV6=47A7)G2-acsobB)78Mq!aeHffYmIwdZXAMClHHV{gl&V5ICnL=)6yG0 z*g+}UUa=eYX0i!m=OIk#xR`cbMB12rEp=U4+uK8>&_Ip^K+v6;*P6I{$F(wSd-S4p zMX$l8q0`vsTc^dctu%AfRbJ}({>J9U{?95?6Y5Cgj$@z!OdMpyKtxbL?O{34XDfeR zTi@7RyCPI?rT~_`hTtS+`39~mEXfApQe=D60>BJjPeBRUybXjOyH*3^h=Xp(DbVnb zJkfy>YVNG)u|S(bM%k@~3xrLT6$8Hs?0Tk4Aj>e;K$bk=FGc>Nn@W7~&#Zl6f#r#{ z3R$g20bZ8hVIL~|eK;QQ>ax0#w|IGmqY7z~+#O&b{if@OXeLXg?@5A7K(`ZL^qXbxu%}7xR@&%(+sKNJ@0I@PkBm^UF^enH!5V}`7C7J zP#RAy8R`L5s9>yMjK@1gPH4c6#teBajPr6pJ*zh&MCqzB02)Lg$1&JqIHwp)lIAJK zUc(iR?DHOObeM!AHU|LnO2NiYyH{a!K?x;YM9QX~Xs`TT8uii*6Tzy=Q08e#UvTiF z_-kLh#1gu);Jd5(;$A|ETTgYxGnUikOIrw5ieSVujn^BMc7C-`0A8Aiu-o;}9SK^x z-6m)P+CB}i=T04FU`Cabg>iMX60rFeqJ|%;>KXQ)rRas`)v#=`1_3?w4AH^Y3{i?! zfD0zo`o;0H)O)XNcKp`od$k&ll-!NwqKSuyd5Ya~I!PkTgAq>;({O<5IxHn_1QCz? zjt8S`2{U5jkSz9?!f6p3t7585U5>n|6+o9@h}0s?8;h2XBU~62Y=l#=2WJvp!15D) zfsR9{B4eqrLnp9{>CQ%7qkNY_hHHh~@nRxEElFJ$;%JX8M-wxaz2T8nm!q_xQw11m zXF^3f`pKPoIgkt!Mq7~LHb1fh#WXv}1nq`jEhnXTB(mrUPAi~`rz;Q`#0x0Bn6!vd zHbO#Ta&JJcV1QXuRQiX#H&IeZSOH_|099zrsuckXa1u#u^fhZ#7_18v2Z*IlGIue6^`9yMp8Y~^&bS}JER&( zgBpQ&T?o%*eiudlKnP+PIPl0oUzZOsNmnh7MKS3NdYxmT7?46HW1MF6rv_pUQAbs| zJmBG(EGX`MxG{j!ez;upkL2)NO9qRr%L!iKLDuN>ZNI9x5YR=QUG_<_ZW9d+FJKLX zX;?SZ>Ox6%PQ~FA8@oPkA`)>hQnwuoXivTQLZ&pNRFK<|glHsopwN{V1XRzvU5M>I-@#(1sH9^k-2(-}@LE-^EQ*{62#io8oW2n88uof>xK&O52h_PCMX#1r>C$`xZ9 z8RkOGvqKK2B|d_%Yc1g^V0G-1FAr@bO-z$Dg1yj0Ss=KU*sGm#T*6klC6g*D_zI=5 z{8^b4s?|yY@=(Wj1gSS@sCfkQLXeEf5mYCwf)R(HKw)=skR6L<+JniTW6Oz)Rt=$Sy4?Z>u(MvbRkrrT}B5 zu(it&0Ci&M17f3iq&=!B;v6U0vWzG?3d97n6cTDs^JOs|JEX zUs+sC7uh1gF%KwIu0Vd14vY<18Ww&-H(et%Iv0fIEAwbmvX%OgS*>h>!vq-&wJ>Y- zraV&+;GRt9-$JS5ic->umSq7`|y294emv!H@eh9n!xIqmLYxI#b!9|&3 z_uE}qQEUnraVAp0G+^Cbc!$7Kh&@N!%nd6e+oxYGMFcXnPObEgPO~zBOTzTvSGCC) z6zHdq;H81E9PjY9I`<>CQHI`{ZW%?95gJ9q3{m6L@pmQNW>c7riU|nlRx8~+A%O#6 zd#p1;<2&tA4)}AiF#>Vpft`3yo^eeU8x}n{!^0!&FQkGf?^Z{;kUbt9sV%R0a^bSK zY}u4I?=&@tag-{DMk#})F&0XBS(>N4Vr?IVS#WO@YFHsxdz~m>#(4{rD922$|klU93&? z7?!ozr!x+y&ik}G*@Ny=^g<9M?&f<{ZEsdS0&OQFiDCnrw}rH|G~@ZV)2cEd)k;lI zhvvi;9kVPA&T$$?)!%n*Sw`@Q;?bB26J5m2M7LvBHa;UArZhZVj)&saEf!G*t#l0} z3BoI-)WU-4p@lFU+-4|Asq{ErD_g6(+jyg!eCCJZ-$R{{L-8+dubKeYt&l9?p2`@T zMka3GPe<+yx}Yk*50{tc5MhBfImMPa3VGEE^tCHE2K=>yp2%?>`_bN6>HK-+>BiR6 z`F)T`&>wD2KO%N|dsWbE-vQ&@oc^o4Drlr4e6idI3InleZ!#F;ieF4~YhFx|C?+$U zQ{XvJ(~F!7mD|ex&JuwHC`9g)6yqxH26zw*7XtipA?%)>k`e4+mTQb8dG_0KR8C5U z{_^QQZs_=RdfJ*isM;DI=Aho* zPj#g@clwki8Vr{*C(hIuzyqtKmrnEdSN1nL2=EcCOA_8X<)Tz8u%L(Fx&thkvNH)@ zElDiif=ON3c`&7`oR1ln8#%17aD>LyFho%m@JYp9*>8>aC-VV?l$pc&t*V3RhtgVJ zaH(Vp1PpM{9N1w|Q%Mp;C;aVtzp*15LkZ9X%O&=BG_dRL7N3e1)spV=TQNOD7n`=E zjOjXl{fC=ng&^dNTHaf~Mp#tG3OYif&+(p20XZ3PLKfq19Y|{;f(o4ta)?5TM8ihM#?3Cb6rVhKFDYum#))Yrk*3ZHeR3?`g zZ#_tHpYjDT*!CF3t^^1U5!fjOV5O>}r?j`9{I_eJ{f!^jIyvPtln{6;Vs$B?ot=76 zK#ITwufzAMO1vJt{4CQJ8D2FC#$fDO)YF{sT% z$$b;@sO{urgbyak_-2NS!iErvNXI2ja!=2xZB%uMIZ}kHxBsu$hOmy7N{SUq8CNJY zUE4#0-fJccoZ?zee#FDtVS$%IV}yfuqza9-t=k%_RttHzB~4y-v!-~it!$AOapgpc zsn!uN7KE54nWkGvE@0^JNTN0o&@7HmV1w6Z)Ybxcg}_7s@b2(!ntOPDG#Is+sHpYm zlaIjP0D#ty#hV`-hBPejhkX1;(J%#ut)N`O->TY3A=hTgg)~PBxn^jEOynKGZ?E^} z)~K!7bfWj=j+4Gl#o&Ur^orI8VM`VNx>Tt*-`=?28yuc?V7N2MvG{VhNY!xhC4K;- z#g`NRp6K_?zi0SPt{$gw39to2ry-eUrA;361Ua;|*lzbkktnP@iss7Xq$T_5CHjZT z%N_FfkywWp5Aay#OW^x*@^aRA1xMzzJ)#m2ky`cb>}hC?xow4(KCL0;eE3w)YpdN} zT%>l#^Cj)5TC5g-IkSH0i`}xig{Bo@HCz;1gVlluxm8)b$$4~h%GbGdEJ_0|C*ZZYLKK|;SgSXbNHBWn zZC5(0XHB&(X-E$na6U!lIXRrtcBo`KMA|iR%^$Dp)q^AuA_v{WtD%a#l&Xij$jS{sl~BzBM~%a(oStS{Ak4znkc7_%n6-JU&xRQc1Y=-HtZyWLy5yY_zhO! z8l2r6W~>wuS#Ee1P{8~Yo`^}pP$^$aKcW6#&hd(l zGA)m;?T8(xAYpEwUP~D?gz~{0gJIytstUnWgM881r$E#H)mPCb+ULUo=!gnvtgwXZ znDZft#4M5Aoe;x??jdO_6_S8b92B(-NX5Ez+BudgjSXN99J}(rl#Ey7jhDXV40=gl z-gM^leu=mlCH8PFbUr^=tmXD0iD(Lasw0 zOG&ROrb9PZ5eg{mDj^h(qj4jH91Pp@rmWDh(|b)Oemz7EG!FMXi^~4qpeh1Xm=-^WBL0MyV&fd8 z3Q4&;Qwtg8pW@;s1L)vnL2p+zvmN$W6@ALFNAmo&WjM|xAi_ocTybckJLCX0Oh7MEwQ z{^l5HE!~q*;NpNFLWv3vTy%^FM^wdKcIXyDE(`1ag*!bwu7Ll-9UA}r{5EkJO!)|X ziuAW)r^ibiNDo!;215fcIV>yr4HHx2lzB!f*-Y#^>W8PGleezGwT!MTj-4cpaUVQAq?Z2WO3BEvdnma*Wb{n%hKw2rsvuJd zCnOfcl)z=rCfM(djk=`r&`@0)Yp6{>i;j1Ofdqj7M zL{=QbZZ#V=iD=xw#sU$_cs_jHF~oSrQ8c<3$xDd9GOHjOn8 z52UJ3xXZ%il7SV1?bchAF7IQ51}?uB5#f8Jv;I>F2DY)P7CR9$G(UMS<MFwJ^vezBggVnBvg4O{Q;utGN6~rtaWTm!t+>i!J$TXOfPLkIpyl1GdE@q96YPl z5c-iL-{q#+Sd5fmuGhA z8bWs9TmVn&!4?Z@>#V_jK=@C2btvw?-2CijtJVHu>E;q{@(_nmN3?A(8X@q8kf+AB zcxa^E2Z+kH7NL$dl*4O_{Bje~o1|S(1x-3%27az!-!Kq-WEXTKXC)lc#7S`^0>~^E zffT%V!>fJg)8u>IEZ9mH0O$@;n(#DIEbXq0=Hf5xYtj!ZLDES9yBn3D(%ie?Wux1= z2f4T%jvuDCHCioY9LeFh?ydfr6TlEv0pskWHYD~=s{H$BonLMi2s(G<pTbC<*KNAd>0>5WzBT2ABDpc#zdAUXmiw2BW!|W>A3S%Im%6R+-Sqt*$$6p z`(7gKq9T;oX54^^acV{E4$l|`5WCa64<0`F`u!8+5VBxJKok*EDjwRl4GmmdoOfeD57JayF z*QFlXN?hLv0iy}e-6?azBoCr8H+AUfm1^XLET|NQ$j{}(EM~SBMw5iKB|*f^tc zQ<0jLl`cQL3FzAbYV9Xp-_ZY|Z_$VzLt$WQ0XK$)@@sm!ESHJLjfJEd1>-T$oU$v! zBU)a)iYOUQnA+>Wia|n!lBM?_hZw)3gJSNx>f75kErJ1+mTXGzMEI8GMUbg$w5^v6 z#*j00f>lNojw~nrXm1O$wW8@LG_NLFkEXL7UEQ0_SQn{yT}ZuE>2HZSdDq1QB+DNt zkEMTp*Z|UANgi7zlg^?I1cm4K%HvBA+R+UsP5ohc$kC~gLfLAe5;+mhCiI$XId3Gx z@dt?S3RWp`X^r&8?07mEosSbE*Hx@ml!D+Jm#CuL$wpCr$p%A?J8y`%MC6&%BUm_S z*}%JZZXgM^tGA*&hj#&kkxTcr-biCGEk1Hj=)T5axf9i8gO|Nkw&}4rUa-`h=v5$C zfiZatGggEA)72>-<>*_Lr-$obO%Ge^mbn^4b!AhzEJdBt*#U;o0=PMq3TA?Ml&9EK zT8qGjK`MFgqn;qM62Fc*3nR z6{w|}f~S=QF$akC5#sb!7sfmjpb#lqAsqvuW&(mG@gyMmN?Jl??Mc{?35<52i;C-vpUaS0J4%UKlGlUD>P=@+np!jR!r5)@0+Ny-uhqjBB(|Msr|~;o-`; z8NmBiEr6Eha=LL)9DrnJgipx>xbd&gh^%uDj6dkb*)hk z+{L3lqfRt>gGuk4FFS;1i1=KC1F?NsxHBjM~g-{j!`LGZ)I>@-?1%;&E3P|gC(_KoFX-A6nn=T{jBrvt=rh(N7pH6-3YHr_ zBYGfJUd2~L>#QvxR?x&t8nydqV2p$*RV@nYv=f&8It6lSNh2riO6IOgI~?eWmN-J} zq=h55e2K82PklUj;qV)LD;3Iq@C!l*Z7d57yK-muL+wJOAn&$e!AXqIoLDsKLJE{9 zz6iM>B~5La`q3CV26g_MukJitS-X4Z?w!upUp`#>^3I*k>fQSfzhbX;tfp+zRZQ5x zrHX-(M%6BvHwrnWjCGq^{kQ7X8I&ld=$KFpQI4hT%sp3ArGjl*Q{Wz&BQql)P)2I# z30syu3&D|C98@jFgE`u{I`T2X@jU9?|5B*8_HeC0JyuMJcfHO5`uigw7R= z9%&6Rs|1P|kt^5)cI->}DTL7PrYi=SDiMAc}8IKO-pCiQVCsWHL9~Q^gPi- zhlO~0Qer$TQY!sdJtq1^N);6d+N6(v2_qA7^Ea84Co=UeVO$lBEXp={6pO!a=hhGG}Xy)J^UH+8p6NG*n)RuMtl5xSD*Zt!R(UK(R3dmz2CKY94@oBQi)Uq86}<(I3SJNH&rI(HuGiX&Ub z2EuJnT{WwiFL+_OHt4ip=&ZtvNQbZaj*vzdOSBRpq28BE3k4-U^YKngWL_J*(+s{- zC6FJjtf)QIp4^K@SMTFSHhs(oui^M5sxQz*`U9lv7_U_1ekoVK(bfm7mBoIz@0iE{ zm0)(9@fE763ri;_#RoKMQWSVo+hUN$X^Wk3nfWkn6B&Z$*GSaYBWdNmdBlmvyRm7< z&7S#h(!hU{PH7!Xc~dFM+Sc9GwI|=)`}&(ZUq8Hm ze|7ciJJ4I!zUi!9MF(@1OjIz?S5*(7hi0+H!@M>SM!JaiG@CCN(x`F2eJ?pnzyiA0 zI~)%CN9&`>+7KleVg-~+oQls5@wyvL{v@E^Qc>j(EmL3>5E$!>S{+PG2 zBa;v`Ytm4};fMzt%2ZHtKH?Z&WSe$W)C!8ayx$0sjwaFrIGrO`p+oMA;WH!XSF+ZG zlPaHjrjscTMSNWA@#O+oCQF6Uqa+&ZmxeH)sQUgQv26OO26|oL_3YAOuK$FC(1VfE z2?$WH-&9pDxj{(hSevaGvy8ULiUk>iuVhUYULRjQS)IFl3n!Uop4;GNmfD_p8|zWA7v8~E=N-J){h<-DR=!S(Fv^Wc#^ZF&*o zvicCVSxnFm@+|hrU3=r9x z@5ialu3%9*8ofr!Z!PIP7K`PEnUqWswBsL@h{kVo%}iGB_@s9x2Fhr1qK-%llw^b_ z5;9A!TLqxPpzr}UT^~BzTk9K7pYI|{>GsygCJ<>Zdb9&&0~ozJh=cMcBt{+OiUepstHzO)*H?WLisSoI02Fh5?AMGBj@WVJ+ed#27lc9?_U`6cNaQ zPXW(BdyLfK@B*eUvHxJq2B*^nCkr}1nyTR(k*fP0Yrf_ASobY{g>0Z{3@vbhSWS%! z!{(xrlX6ZhfH6zDv2+kAvZ|9+sM|sdNtMAMLMmJPJwl{3J>`Uk8lNdDavv1amNVFY z6E$F}YoOriIeO4@N%bpB0Ea5$Y+5Mo54Wdp5^N+_=W;+wg#}LHv()5KvbZAj*)US8?-^EV_~5DW zsjkJBII4OxGO<}%UBsu!HlwZz?<#4tGCY#W5u(nfBL>~rTYv__eM*}T&Eqw!at2$H z3s}CP#=?*&Fln!E4%MFI}=E@e6+|VSO<-fn@%491*c9-Lc9Nw5&fHM!PfovyI zMk#1p5L*J{i@V8P^?55rC@nzeE1jV%N8C5BX^XDfg@Q7m#U(&W(U*3nxnS zkutXwh~o-2NH{Iva0yVKO3-}kJU_yAKJ=l~scgxsSzQ)w@MLC%J)r7WSYNojga(uc z6Dn2pHs$kB`TE^$K(Y1xw|Kf-p}*H#qeHjmtkij#KWe=es7YV}pT}3+>YDT@XlQ@D zqNf~l**2NT7Zi^2ah@q0JkB$HBRvv?x>1BsIwlhceoQ7X{KIu&KmlduP-RUwVUyOgU5T9Kj?%!B z{uRdZjOmytegfS~)?1EQON{>VL${iyj@Vw$%$?b~7uK{&GvsBiyo7&6vCM&{CyNI( zN(qv)#MK0=!855<4=rIZV(aV>?MC}z9>I_XN8fRKdwpHEW)TohH=jT4Zfvb@?>-azVOM_%ps)xf z(L^=$DaQnYku8W^WVE(D3EGTs2Gzk3VKO-$yeA@y7CSv+vG!uE^L&5h$>thj#;mPx zypZMz{WW(=${(0qgy0*vVs3b2NxP_&^Pv=$7~zO3A`NS(&vLkGKG#u`W(H%!aL3P)jVIz5lKyatxId6e5vpHnisT!p_ZG>b zlPtQFfu@VM&!>~yLTFlZ5%DtNC+1hXi=kZLtO69oJZG+ter0Z)rD)-^*5-C+WwVQ? z+jduWevJo7Y`*^<715Sv$(Ofx4*KvDRNh6nv&xWpP|OF9IP$a z<;@isCT8Virgyo;08tWCi0*Be&Y`r7a@d1Q&J<;_7eS2Og~;6^-Qn8*5e>8&6Fl;RLN$ESxU)ArhXiAAOs(kK7NVyG^(kHh*t>7V< zRBLfbz`u3+Y6`6+&emRZHlMGqt#&Q+5a(7G^K(rX;k0gHDqC1IDXg4BC#O`l#)%Z= zdAbsY87j&`wn);JEE*gv)RNYi z7Y928-B{&|E+ahQ(63G6lrkf>e`PR2${By1!MDPX+tXr`f{sP=VscqM0lwGA~EDT z07eqV$O>a&!wUgL1oUx$tJ0CPPqj>c7iCZH9i%U>kd38~OaWgKW#dt~_YURT%ER1- zhp8Z4fu0_A;#FFC+zd&RjuYtf0ef;qxWdc_AHxhgv?05gas_eK!ApE&CGOs}68OOqC&P1xqCYLsAtBLV@s~lu~Y1VWS~DGBjGeDr8DG(xZ9e3)Oh-Qqj5gPF__g}Zor>fKknXb;CA$=Aun7j z>!ZU)1u1TH@ZUl+|A<%^H8ex%p}&nHr3|NvWEfraw^1f$Tygf4`D)($8ILcSL1l1p z4wdt!I*S5Sok!(z#nq+5N!0DUcu_Z-${@mgx{6HM<7GzT`YTQ7e)WKB2D0!ANkN&pe~;;(wFm>|DHC+v z`}ev}HuecElvD_%l3zV2m8^ppi>BK$X;~zzbW-@tU-zI&=~w$++0IE-gxm~p`39c` znOO7sTYT&__kMoHaGp#01dHnp2aCC7V1Mn|PB09h7G52;TC~>aPHHe+#eK^Y*%OJX zR%FM{_Ri1UogY^Axc2OB?5N5~%R$t?K5dDew>+1pV$DqIzwh6MaO4Pw;rlLL z<%zt?&TV4^o^AXWH6CxS{kXO%bWEC)Iq2W=($pOvBD^;IMxFr)b_LQ_xBFY8oz4$M zR%VMZ5qGwq?Qp-X*5d9DYb&d3YCKbV<|vj+v6axaP+y6po+?Lps|ztNL_*ptL<4=L z-XfE*I&^H7k<+)l8oXpdDV-XcL*v6+^~We-25UfPZEtUT7kj4ljjfHy&pFgc_9lq{ z@$qDPa}N~Q_;F=_O{}WBTcS_7O^{fg!;p7^D?>fJ8b}_k*s&2>=ZBTu?#5pCISjK; zx3GO=f{de^no~ed3A0f#jbKC)~~#L!2+Nx&7U>mHqBdE4y18 zTTl18D|_9w-QDe7o5o>AT2jTls590`vl(!N^^-K^jdA-g=Xk#3sLT{{ zl%wqIr#tarrvS@VFj{pcL%epUq57}Wmx`)YeX1(veXGc;?jtxPapAKkZrGy=2vr`0 zHATUMpTYI;O&?DD{i7vg$H)qMKks1;H3?Bo(h3CR+`T;KVSy%jWzG{H`}PiBiGN}p z6$m`xFSi8yOR=$-bglNXYDF33mT@~sjI5?sRffOUV;@6Cr$7W*#VsUEI0MVbm8D** z6UCaveys1p@cPsC?w_kiIIC{c2EK1Rxv=R{>~E5bJ_n2Sbnu!AN>Kf#LLGShMTWyc z&hGOqQnHMTY3CB3DmJgDFIkICq6S{JrTg`-tJgTE;sD?}GkTWdWtyWd&H^w&dV6d0 z=Pq=9*Z+g)#{-`=N+#}WP>|ve6iLTaUITUe#I0j054Z3*!5geg>HqY^^Z0ZG@8;pj z7+i*Hlu)47Q68IwgXXQ{(HY*$m2tZz`TdE)(5lRpOv{tn+e5269Nns{KCdoRH)|N7 zm(Ioogn_(OmRxTx8fVz;Eug^)&=qy_X4sSy)8aVUx$PB%l`HRpL? z6Z0G|6f~C{Wy)_=Ymx^mJa#ewR*7xHsd?*EUNvB;xc7zVyCN#;8KaRpsCejg{fJr% zfWt~+c-V?F4`WF1;cq&d#S5P%*(>y-sN1peDoC-bRfD*>df6xvW*Edw#nMyI-E-_d za7(9PZw&ix=*pYVp(FA?F6yJwgd-ljvK=-bL8!@IrhH^=8&(kweiRAf{oO}S$mHNYF7u; zxb+h>hsog_fG`hT%-%r6T@fmdxvYYYit<_I*8D1#Dy{xEIax7P=il|w$`uTPFuD2C z<|3Fh^0#l2#42jjzD-*h`Ws_Pt|(60k!b==FB8p9(4e6>TCckt35#GFp|17$Zp zm1a?e3L_1Agd(08Q3=V(!l;_NQ2RKhxNb~;9B{|LVNHVYR~5Cv*UPqE zKzYIsx-*B^Fk*{!0cvEOP9~`iU0vx<2xsGCnMbtww;r@0qyEuG4fK!R?iEaZMOl`< z;!7@!vMieh;vkkp22%~}Puc%;b4hD3JZsMme{+#^!rwf|8Mn_6A_Er!+nThXf7<6W z2EMwGO;K<`i;1Y27c^04L&J?AVcVx=>N?0g$<$BF6E`rKSdte%7p&2C|FqASabyej zv6R|ohgb{M!;HWSwlUWYU42FmT2K(Dzle8X! z8qfOcXmg+OzG7j$?U#+!9vl;}Pb-#T+9@1p34c-6qbgxS)&{hl+!$vOw-k1TDKG@E zK?_F6Y?l&CXh!N9qG_!J1n>Ya#)S67B0n-oey5q_2FOs~vs0v(S}u&CHvb9z1$n%m zieyY^r+9o6W3f_1GGvrNurSA@G!k^r4|nd<)6u&gp0Ocr?XE(Df2V|)1Ew5_f!so; zMZtV(?AntL?BUT7IYzhq^pLcH1xa*tq2?YZMvTyzfV+&ap@e6#TgNJFl3vowT=XD8 zOrzOVz)6GJ6>Ebl!@!Fxc!Vd9be3|3)Vc^5Nd*hVtyJ1+dOjTdp>Q^CPr5mw6l~pqo7TT|>&(cX{vGA%{v{1PUd6s5n_YlS0KN`KmGBSe= z0=*YIEq{vG$%2I<1Q)Aj*J@z7c;}>v~WR)UCkKa;>c2cCIe# zxmH*s510<(>scC8;4XlqM{K zV}5xiMZ6`n=knf4B22lxNB_*AK`3*ixr*MT5LSt@$mhr<^in+~Bbn$@VFk9raup9o z)z0(1{q1MX9E1@)Q7@?f9I%e~WI)NtSXRiW5n@*o*J%Zp%GE7+ZdxM|+!Z)!Zocj$ThRLTFO$LlAS+%< z(()Q7xlW<-swUY+j>3fJ1WRW3F6Z6fXN@w;v@cU(tErREZHtgGzJmd($===T;g%s! z^W#3c{~pr_mlNaW-7c4e1WdFiykXoyB&{@Y69;d38iJ=JC2O|Sy83of8=&pNb@NDj z&5cHukH;~@jB}%L<2wJdTKHq87Hv9dZ8>a2s_Ci1z)2bk8xd7MFnNygpPt0QaI$mc?qn9jeT~o4c@N$-SefIgrz+_N!WegVrZ8~k8xzdZfSRz zdcAq)#Mb)rI$j_m`i%Z77GE%`h9Tl&nJiUeCobG&Ua|rB5X!@Lq#{0~=&6h)npn}a z)xo4twui^shn6;17)qIn@sxCsQAOf)MBfdob-gi|kSa9;;H0RO8pzz2BURFL5nqoQ zpSARwCGV4m4>_AtZ1#3<{)RhaCnVO zrwky;qe%A}i2)#C9M4te$@gglbqzr+XekXGs*p_SW@19{t0rU=(}Ywpv)3u9r4<{( zzlUn$U8$SmIo9Uj#!9}*Y5|T(rhKqSwy%M|BPOJ6JyNeU)WjLev?nHrwwek=`-vcI zlOl$)Qfg3-3P7_@OtB{Z4}UT&lZF!oe+hna4ReSlv)-KA#IwFG+dGr$Rad~(_iVB= zW^JDqvIv<2yY^L@wDNF;<@7UyviT`^4De)^&Cs==*rm~Pa|oGLCx*>U=O#DtR|%O5 z3|Y<8RJne_$m<~?42Sj|_qA}}WNV-D9!j3-eM=@9B)l#SZN;)eD|A(fLc;hz9>l7> zp?v;oVn!IsejC4egbxHb@4H3qOv=5T&d!epqxRe0Jv>ko72~sDs9GPK;-0`%HzH^4 z_h+Z8{T?3X6l%eV=Zw}Qme?_u9VY2<$cBVuI36U`wX8hQVjxAUZ!Laz+v1XYG4H$_4)J-z#7yBZ!=EqX69pwpo^Xir;nR&X0!35+qb9i zt35lMw$BE=$!Iz{p230n?Dmldkhpy|6?VOS@6Mh3&F>L&!J2deYRA%6cx$jwNc3Ps zLdP~Jb>7RAG}=vhq=rm?hU3*)|70}5iSeGsn2cwOIBk=H$vU7FMMsyPUj3roha0qx zD*;%|$ZQExH3O-b%_Ihr4m)ijD!j;JikFtcb_~`uIWpw|@pyJV!NHL455iE@g_o%g zzbG<@?~R9n*8Vg$^frqOF@{M)G|3CMjO(wVT)4T1Jbw9-ad*eT!N(U8M%VT z?WI%|_ESc{SqvvDh#wzX(3QYWX@oM|QHcgCHz)USpKNV)16OhO{PdAPaChg~p4e6P z-wdYfXct=zxI>I47fZ6t0b;hGSa3r&?iN!M5ZI_W&%A_Oc*)645-sE9;ZtW1v;YzJ z{mp3{;Sy`HyX~Z%gu{$EZcYt0_<&+xS+9gZ<93dM4=or(nXGc)ql=DGJ6#{dNQ>Y} z*aw4n!7Tth6%vyowrJq}6ZCm-$T4gCM_eI7=^VP>vnMr@987XGHi65Q?fPia(;(Ss5&dynZm8JrAo zx~z$WEV-1{APkBiiT~AaEcatfB!Fq3^(QC&DHs+XcA#xqZ*06Ptv_SQqbuMbTu=i< z8Tu+fOg#uQKSAecq`fmRLUX5w%r^57z(B)62ZY0`=%Q^IQc{mAA>+RsktWUvR(#qL znC-5o2k6G*zA+FYdmGj0IG(ym_>%!PuyZ9SA-kGnjAZq_B$bA+Ok%e z&sXe)&Omn@a2BIL?oTb#-fpljK6uDtu9-Qys zIhA*WowYIG9G7^O(fb(2Iz(1_1&%R0Tm*hg1Y^m&~hLcLSSx5c;Slq0%bX<`*&f;XEt1RSA+s^}~+YV-ob7Uz8 z_lz+p*pdv9WL_a~BY`-1w6`|*q)ymDkUtB=vw`EF%9yDz&jdk2q;x_g#RDD+ydZ5a zo!eKInLyGwlpJM0f6v^umKDLJP3^iC&&p9E9q;LO@MGr;<@sbC(t-hbA| zwN&~Ei*lJ9^LM-0px^+dPtD$?bZhqd6o+&Di-3zsag=e)p-%AeX*F;vqi7*sfIWxp zyg#76 zxh@F^!AikO|3P+aB2A9?mWVt80G@0ri|$6aHoA_hk`vH=3wj)?T5ecOIS#rcx{oMW zr!7sA?69(eLLfGH2GYRly7JV1hk>R#MhPM!?Uh>_iRgvSa53@?rQSihf(il$jt<8-$5SXQ+gP z%2?SHksjL&`G6?X94+OtnvG%{>U40dj*BampCIIz*K~pjwgI!G)z>94iVp3E3Hh{4 z5N^OM*b%fH?GE}W3!}DK-X{fI^hf(_dLq4yLdO@2GY* zv!<0Q(LR~ZAxBvSnSL3Iq*fJW8rP1490B?zBaRzjuArMsbE&z7RMa_B$TDR~h6K~e z5xKUS{jjjiz6HDb>=^B62th2 z^)2N?Q+$ya^~Db9_*1TE^9Mus;x=lZztw4pzmE7Hka#j095p|xO(Oed2+l=4wyR8U|5yNn+F9m@g&EA#C$PfejDxUm*}E^(H@G23%OI~T zHTT)z4yHHmry~3iV&FqWNzfkVBD#xbE>0Vxcf*GE0B3pNG*+FSqvLpKa{+#jz4KXi zzm>|%%HT3if+%6$8Vye`08!+KV9z!V+RS@Z#&I1skmCne%MUXV584AEr{k0goDKsxVNNZx;N9zct$xvT(D!_Np9RcYOJro z0b{kXzqYr}$7Kx^UQx&683y)yn$4RMm=ckp7I47JC*xaRDiuW}xvD&ekrZS25c~$N zgL&;uTgIjPY-MAsyVpVd+SWo*#yoZD-D!00KlrxQZlf5wfc? zvyq6Sd5u)G0Db^S#NYxkTL4iNu`0ALX9+B%G8xRnBL)!aMko@^P@aSm{u8fFy;|s! z?06kxW7lZ{o+RhK_jEZJ9CgKim1v^Q2i!A5aJkWGe}!+U<1I`oECa=6=B|_7u_5g-RZ#2!4c$Pr^ z+~9xLZzQFq7mnycujfA-P4tPS;rYaQh?TrQ2t>>w86&w7y%7LaeUSS5;!T})r9cd+uBFufNGL!_Y&XbL z+JkDI16ENlIC3Yh5$i~pn-4GH%*U=G4D2zxwg~>X^^kdT@v_szmxw z6N0jC>8VoAz~IkT{=61cbIju3@O+M_kNu;Arqz+q1A*E~bq{)jb`s#>Dk%k!w`f}f zx6ky?-ipR=i_9W|93z1%1suT2qpK<17|Ss3Ji3s1h<9MBsyEjWF{b~Ku?=1CJd9b$ z={;=5EIyfGxy%y57jvORZf~yPWkzA=M54zc%!>dhbYmX&f zeVj_O0r~8(H=1VIe?|!Q%{3N4c37uE%g>&4LengO&j@@AFNj&otSu{BsEOF_E6+Fg zB_Elq{o_Myf@5Vw=UwYC{4R-x0^6^DWmKTI{ac-?LKu>~P&z2vTaJc;8YU3%0<8a! z01)*ypt!TWw~>%;Jem#?+U)Gz_lj(KJiQ-lrp|rH)5TsF@Bm%QAP6a-gfdhJVu^jc zA<&5>g8mRnJm1>jyK;gDV8E%9oBs#_`FwL_WmDV0J{i*wPpl;+_BS^17F~c~T1RMM zXQlJ!m8S?wuMl=bYA}9hDDl(A*6Q|8Ypa|wz#)0lvRFnr1!Y{h3NT*ilPZn{o>7T) zk;m6nk~}`K5~{B3KGQt>7ohQ(<#|oZV@+3FpnQr@X-(nD!uSY>!x0F0hyxHwN37^V z27us(c^?bu+x`mWQK@P)8MEp^0QpL7MS4osJRkBn50?kEA-w#_3k;z!Kbni*;(!LG z0zA;}2t!S?vo)872ZAB3oW&Gf2nwkO(k~VdZD}84hPTyfx7%U$lva|?XeRd-{O47| zA`oL`F$-n^f#rsCNmIMI*EAO+$pLcmH@1O_nj`kUY{NwG+^b1Gc0#ezT;vWVkQet> zqRi5|fyiElr!GQbFO_7u#AZ9h#6RJfB?5>8DGCgN9~$zLgHerM*#`31_qH%modFQ- z0Iz!bCLA|X7BR{W%uDUG9P({g=X>^Hs!ZQ*E`94}&TuB8BNBSu|4Zu-rqv~wk>$t|e!MtLL|7j`N(v>R z@E1zLy{Ee5tW**Ot6<{DzX0?58ki>~nBUjHRFW0p{^F&b+K4V8`coL11sQ(oM8;oy z*boaqOVhEdYk-?bM-8gub`Gl+EDiEasURak^F}1O9AGg05l+D-Gd%J&d(&!u{}`9g zbv}Z3QT3#+$T$>vr~5v(TJQn@hY92yLJAbF&B`LY_zr2{xeiNe!%)q8SI&^o3> z4(k?df@Eaej*)a&%$O~bMyyqK(?P76R>Jo|U#dB4PKgIvLTzoK=khwx2w^v9^U%5X zBYlWyo&_h%Zy6#Si)*1wER+0FMx6jtVQtAEb0w)gsJW{o>?u#0$GGZYdW>|wPK8mz z>Acs|UYOP(SVWIuW?0!mZnC~5Dvcvz(p?(8RG~?lL8DGhUG|I!>`Keqc3uKCAYG(3 zR{>{?GpsL4S3O5yU0AJPJP|VjjL(B%2$AYHC#d)(c<8|9w60YCQp$;fCA-vu>P0j? zQ|P7+rm*0eattjl!)0hR*}3wpCY-6*cqL|^GiN$<1Q&+@=<#_J3`$@?|7ox${WU6LBpg; zKIvt8BI>FRF)q(ZL!+^_1NDHE$cM#7mCbJtG0fuqR_YnGkRY@YAIUOcUr2k(ORH`;VhY&#h%Y_zz%iEiLJqx7aqcuN!XdR5ZDYHLi{`w9 ziT~b)q01l@`2Xg#bra8Xm2TS+;kKM~bf=RZ1NDyqPEyU&h4iSBPBsln8oXQMo*n)= zf`8`p*^Y;XPoWWQLt+5XS?`+4}=YTsJ= z40N_0w!|}PD(%P)Z&CXU8gNj<{chjP+Z=OCpx(Dd+qe&?zhUonX9M+QKqgI)h1As0 zISwBNHdHLuit36M!8yCwpwwZlrDkvEwiv?MMqRTVQH-M97LEmx)((#wBr%{JWY!#@ zk|V*52H0}LORcJGV_T0q`MhZn+i^^}e4xJE{f7@T1w0vg9=sw7sJrkQL6Uz9LYCtO zpp>0?VZleI0)#u=I?5Qqep% ztfI~pU4&U37!QtF4Zn@?GKpe?&A=3I)w^3gY=EA8KRTJ7zs4E+OH57t7k|m$=6j_- zyhziEG;51+{{Pt{Y00v+3tA_E}%a=D>oQn7>g+FWEysO1!gRHgk zHPfg7xyf@CKR9mTZ64TbrqJ|zZ*T||JPdmyJgfu?A&>%CkZ*W^1;_1^)6wh0Q{nA! zj@A;t5DYI$g{O~%5dk|U$Z$JY{p*)qP&ZYblL- znbUgt=5z@wbY9(LN0q>kRwas0jyZzJ z6v238m=51O2mzBqOGfGnDww<~((9B@=!kGyZsSoVgLh%u&-WQ7u0 z9VAE-hH#x!Z{w6|m`Jpx#Bajc49H}lsOb%5`2f^@V7pg*(ADOTiy{n@D-BiQd#tY^ zSWhZjRk^!5;jOO@(Mja;Z7G;YCVuhHycE>-3u1TOPM)XL13Qgxz}2iSWWp{}r~ zV_f{5V0|-CcBgGUZbJil=!hRY1@yXdnl7FfW89%dRF{LGL&IT1mwwGaA$;007&hi! zUxrKfY|V`!dN4qMd%{CCJ8D2&A5W3JIdCA)+bCI9Ww$j{QWE8g2PdbeuW>Ns{g{lP zEr_B<4l{kFtRIOh1368#2*)S9l|m=NGJ(+vPANMG)~cK@OmIXP%qzEeYKhPmEtW8z z7eco1zJL_uNdiE?e4|to;>d2|Mla5<%<3bN7dpL-|bNcBDT`r`C)tO=SL0kE`s8OjWq5`+v-`f5{1WpXaEL` zuuvl=XhT+StFPptzcrR~+G%ws*szq&=xh(}&`Zhso`E`>9*sP(Df&}X=!*-a>Q99^ z8|V^ZQ-YNwj-<;XNEmEQsytMHW53|R|3b7BtV*~dVIews+^YCn zuazLKo61HSFg#VhZAm-RQ$)i|cDb?#9lo5=jhrJ&+Tw4YJ8ga!M+D+TEJ<-t!dhzT zZ(+=M@FGd3ic|pf7~}=+t%nCg*>82=((vV11c)m0FjQHwYLS7fVJ4dhMEVMXiJSE* zDq=EU2cC+HI$%B|x`zS3CHf7A(+A*D<6j}t43>#=3p!gDTy~(b=~{N*sM{OEt5SUb zOF81>Sd-~n+L~++Dq9UX?31mw>9Wcl>QSn*T`m}?trUxIaGjMnk(l4%vQzY(4W&$8 z*gQqyXsJ}#s!m9T{4=vkz&0}es;tpXU`Adc>rAW5d)C?9Gs1DlWSEiemi*1LsGTVR)wj&ebApu z>^=g}TASv}z89V&@SHV&uq4d_X7X6b-kW}Z7C_PE_}L+YToSPEQ>t2oA3d$oT;=xHH=aH~NG0N4{Ah-5YA_k{)TG7?*86+i z`&2Nyoj;VH6oQg^__A$r2l-L6qr!J#L~+R>3)@c`d!=GL6Xjtd<+CRxxEuLxQ+t_R z5)HMO){YAwc@9w9vNcHJe{3V6D?Dc9oFQ1f&@zM02Cr)8rph9+P_c)p#52sps4&)5 zrdDU?;N|e-UKbOQ(N5EIDX4k>R7Uh(y9K@1fN4(vHA&un9h$4DLQxI9y zljJttA5>?7%H6Vtx>Dn7Xq+?=*7B0e#H899neeq~c$DQ_*3OG?3iK3Tm{Cz@s&Jp| zpUtj$$m7qet18b*Qi%G$G$|G|tNG1y!ng?G--IUysrm>J#7fWw)9FEBM!Af?Nv`B) zc1Xee5Mr1o&tw3f$`#b;rwK+*1Q;`_yh;rs(S56MpiXWwwgg8qrUz5tNl1A4_~_x$ zApBmRpYZqKWV#2V0u*3*!Z9$2n&A{mE1xSU&2T_?j&$d|ovWNom<+FQiWC$&hDdvi z^arP-|B}5w%Z|BAdVD^|#!%|o#M#^Y+vafg8_qT32t>d|wMmXcGDouR#&M99gxH#P zt#d{hWg{KB_LJ%q|)nwo-^ZrX)Jv=wYha|RR)Y+YgALbM`b%X*=k2W8ZEd|hjNE{mP7 z7y5(^iefl8IX|>^kqAII{+*%`Hy{t~OuHg$_ejo`=*cP0*_=F_9O3}(Z1?;nvRJs_ zE*P_*d!4y<+zd|7LnWM_u09O zjXcW6$t{PZzr1~-2D8R{IaJ(uyNe*$>0~gR;mYo~{}mA;&`fo8v4Zq-62p9O0!U1f zO*w?)?ad9U)Q+?WgZ9w|tY~2A@k%60Ip!ZAN=gteE(`4Rbw#v5AuH_;4YpZ&<>Og* zp8X~-h)r^fChz#TGdZqFkbw_osJ92}GaruL+A#A0UV6EOBY8#HGZb+Kn=+g`Ghxo6 z=>}GghHWX50jW?UFb;jD3z;X|W=39?L4~QG8?VGJCU9G&K?RYL!5%b6PPRf6&pKk_ z-Pav1y&B@J)3uO|yHO?{rNUON1*q;k=$VyMtyqQvyU%vx}{a9GIxV zzOL$?oQORDoJ5V?a_s*&JU}ow*^437aN+O3)gp@+jGqT{Q|Z@dTRaECVuzy{S3~*< znKsD^2#-sR@`F{?NpLV54d4rb>ZDs1c^fcaAPYm8XY_8sceG5|^&l*x6vg%nrxjFf z3_xSSXETrh!Zt02(Haa5f*>rx%?}U|%wvO)zT5JH#9_9oR4a6D5Tepi0_ZFUY@v~MdBF}h+Pf1C zKj2HyGviqz%VZI*j^PPab-PR?

;94Plorg|M?B~Cb7Z{ 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%0DkJ0oMHXBr+L&@7PAXDNRu0TbUnuc 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 MKnckv{#&+x1O1aqrT_o{ literal 1371136 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%0AS296p8GJnhhbV3G)DK)M7wo#-(udn@bMkhA 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
f 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

-c_vJ`Q7XXS=^f`H4LVvb&~;!Ir6Y~x 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�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 diff --git a/SHADE.sln b/SHADE.sln index ff6afa61..67bacd3b 100644 --- a/SHADE.sln +++ b/SHADE.sln @@ -29,6 +29,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Engine", "SHADE_Engin {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Managed", "SHADE_Managed\SHADE_Managed.vcxproj", "{16DB1400-829B-9036-4BD6-D9B3B755D512}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -71,6 +73,10 @@ Global {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Debug|x64.Build.0 = Debug|x64 {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Release|x64.ActiveCfg = Release|x64 {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Release|x64.Build.0 = Release|x64 + {16DB1400-829B-9036-4BD6-D9B3B755D512}.Debug|x64.ActiveCfg = Debug|x64 + {16DB1400-829B-9036-4BD6-D9B3B755D512}.Debug|x64.Build.0 = Debug|x64 + {16DB1400-829B-9036-4BD6-D9B3B755D512}.Release|x64.ActiveCfg = Release|x64 + {16DB1400-829B-9036-4BD6-D9B3B755D512}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index fbb9599b..4d6a75e9 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -201,10 +201,10 @@ - - + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 77e4ac1f..67d6bec9 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -394,18 +394,18 @@ Tools - - Tools - - - Tools - Tools Tools + + Tools + + + Tools + diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua new file mode 100644 index 00000000..55ab382c --- /dev/null +++ b/SHADE_Managed/premake5.lua @@ -0,0 +1,45 @@ +project "SHADE_Managed" + kind "SharedLib" + language "C++" + clr "NetCore" + dotnetframework "net5.0" + cppdialect "C++17" + targetdir ("bin/" .. outputdir .. "/%{prj.name}") + objdir ("bin-int/" .. outputdir .. "/%{prj.name}") + systemversion "latest" + pchheader "SHpch.h" + pchsource "%{prj.location}/src/SHpch.cpp" + staticruntime "on" + + files + { + "%{prj.location}/src/**.hxx", + "%{prj.location}/src/**.h++", + "%{prj.location}/src/**.cxx", + } + + includedirs + { + "%{prj.location}/src", + "%{IncludeDir.assimp}/include", + "%{IncludeDir.imgui}", + "%{IncludeDir.imguizmo}", + "%{IncludeDir.imnodes}", + "%{IncludeDir.yamlcpp}", + "%{IncludeDir.RTTR}/include", + } + + flags + { + "MultiProcessorCompile" + } + + warnings 'Extra' + + filter "configurations:Debug" + symbols "On" + defines {"_DEBUG"} + + filter "configurations:Release" + optimize "On" + defines{"_RELEASE"} diff --git a/premake5.lua b/premake5.lua index d54f8e40..be512c36 100644 --- a/premake5.lua +++ b/premake5.lua @@ -19,6 +19,7 @@ workspace "SHADE" include "SHADE_Application" include "SHADE_Engine" + include "SHADE_Managed" group "Dependencies" include "Dependencies/msdf" From 2fb61609e9978a49f5731609c2efedc6e6cec83d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 18:17:59 +0800 Subject: [PATCH 021/793] Added C# Math functions and types along with DisposableAssemblyLoadContext --- SHADE_Managed/SHADE_Managed.vcxproj.filters | 44 ++ SHADE_Managed/premake5.lua | 4 + .../Engine/DisposableAssemblyLoadContext.cxx | 36 ++ .../Engine/DisposableAssemblyLoadContext.hxx | 39 ++ SHADE_Managed/src/Math/Math.cxx | 57 +++ SHADE_Managed/src/Math/Math.hxx | 92 ++++ SHADE_Managed/src/Math/Vector2.cxx | 266 +++++++++++ SHADE_Managed/src/Math/Vector2.hxx | 398 ++++++++++++++++ SHADE_Managed/src/Math/Vector3.cxx | 281 ++++++++++++ SHADE_Managed/src/Math/Vector3.hxx | 425 ++++++++++++++++++ SHADE_Managed/src/SHpch.cpp | 10 + SHADE_Managed/src/SHpch.h | 31 ++ 12 files changed, 1683 insertions(+) create mode 100644 SHADE_Managed/SHADE_Managed.vcxproj.filters create mode 100644 SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx create mode 100644 SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx create mode 100644 SHADE_Managed/src/Math/Math.cxx create mode 100644 SHADE_Managed/src/Math/Math.hxx create mode 100644 SHADE_Managed/src/Math/Vector2.cxx create mode 100644 SHADE_Managed/src/Math/Vector2.hxx create mode 100644 SHADE_Managed/src/Math/Vector3.cxx create mode 100644 SHADE_Managed/src/Math/Vector3.hxx create mode 100644 SHADE_Managed/src/SHpch.cpp create mode 100644 SHADE_Managed/src/SHpch.h diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters new file mode 100644 index 00000000..86a64c06 --- /dev/null +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} + + + {AFF4887C-9B2B-8A0D-4418-7010302E060F} + + + {4D6F1AE8-B94E-9983-C266-245A2EC5FFE4} + + + + + Engine + + + Math + + + Math + + + Math + + + + + + Engine + + + Math + + + Math + + + Math + + + + \ No newline at end of file diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 55ab382c..61f42fc2 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -16,6 +16,10 @@ project "SHADE_Managed" "%{prj.location}/src/**.hxx", "%{prj.location}/src/**.h++", "%{prj.location}/src/**.cxx", + "%{prj.location}/src/**.h", + "%{prj.location}/src/**.hpp", + "%{prj.location}/src/**.c", + "%{prj.location}/src/**.cpp", } includedirs diff --git a/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx b/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx new file mode 100644 index 00000000..7ee674a4 --- /dev/null +++ b/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file DisposableAssemblyLoadContext.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Jan 20, 2022 +\brief Contains the implementation of the managed DisposableAssemblyLoadContext + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "DisposableAssemblyLoadContext.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + DisposableAssemblyLoadContext::DisposableAssemblyLoadContext() + : AssemblyLoadContext { true } + {} + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + System::Reflection::Assembly^ DisposableAssemblyLoadContext::Load(System::Reflection::AssemblyName^ assemblyName) + { + return nullptr; + } +} // namespace PlushieAPI \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx b/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx new file mode 100644 index 00000000..433dd85e --- /dev/null +++ b/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx @@ -0,0 +1,39 @@ +/************************************************************************************//*! +\file DisposableAssemblyLoadContext.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Jan 20, 2022 +\brief Contains the definitions of the managed DisposableAssemblyLoadContext + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + ///

    + /// Custom AssemblyLoadContext marked as collectible so that it can be unloaded. + /// + private ref class DisposableAssemblyLoadContext : public System::Runtime::Loader::AssemblyLoadContext + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------*/ + /// + /// Default Constructor + /// + DisposableAssemblyLoadContext(); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + System::Reflection::Assembly^ Load(System::Reflection::AssemblyName^ assemblyName) override; + }; +} // namespace PlushieAPI \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Math.cxx b/SHADE_Managed/src/Math/Math.cxx new file mode 100644 index 00000000..5ec850a1 --- /dev/null +++ b/SHADE_Managed/src/Math/Math.cxx @@ -0,0 +1,57 @@ +/************************************************************************************//*! +\file Math.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 11, 2021 +\brief Contains the implementation of the functions of the managed Math struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Math/Math.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Utility Functions */ + /*---------------------------------------------------------------------------------*/ + double Math::Wrap(double value, double min, double max) + { + while (value < min) + { + value = max - (min - value); + } + while (value > max) + { + value = min + (value - max); + } + return value; + } + double Math::DegreesToRadians(double degrees) + { + return degrees * Deg2Rad; + } + double Math::RadiansToDegrees(double radians) + { + return radians * Rad2Deg; + } + double Math::Lerp(double a, double b, double t) + { + return LerpUnclamped(a, b, System::Math::Clamp(t, 0.0, 1.0)); + } + double Math::LerpUnclamped(double a, double b, double t) + { + return a + t * (b - a); + } + + double Math::InverseLerp(double a, double b, double value) + { + return (value - a) / (b - a); + } +} diff --git a/SHADE_Managed/src/Math/Math.hxx b/SHADE_Managed/src/Math/Math.hxx new file mode 100644 index 00000000..3ddc5149 --- /dev/null +++ b/SHADE_Managed/src/Math/Math.hxx @@ -0,0 +1,92 @@ +/************************************************************************************//*! +\file Math.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 11, 2021 +\brief Contains the definition of the managed Math static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Contains utility Math functions. + /// + public ref class Math abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Static Constants */ + /*-----------------------------------------------------------------------------*/ + /// + /// Degrees-to-radians conversion constant + /// + static constexpr double Deg2Rad = System::Math::PI / 180.0; + /// + /// Radians-to-degrees conversion constant + /// + static constexpr double Rad2Deg = 180.0 / System::Math::PI; + /// + /// Small value used for single precision floating point comparisons. + /// + static constexpr float Epsilon = 0.001f; + + /*-----------------------------------------------------------------------------*/ + /* Utility Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Wraps a value if they get to low or too high. + /// + /// Value to wrap. + /// Minimum value to wrap at. + /// Maximum value to wrap at. + /// Wrapped value. + static double Wrap(double value, double min, double max); + /// + /// Converts an angle from degree representation to radian representation. + /// + /// Degree-based angle to convert. + /// The specified angle in radians. + static double DegreesToRadians(double degrees); + /// + /// Converts an angle from radian representation to degree representation. + /// + /// Radian-based angle to convert. + /// The specified angle in degrees. + static double RadiansToDegrees(double radians); + /// + /// Linearly interpolates between a and b by t. + /// The parameter t is clamped to the range [0, 1]. + /// + /// The start value. + /// The end value. + /// The interpolation value between the two double. + /// The interpolated double result between the two double values. + static double Lerp(double a, double b, double t); + /// + /// Linearly interpolates between a and b by t. + /// The parameter t is not clamped and a value based on a and b is supported. + /// If t is less than zero, or greater than one, then LerpUnclamped will result + /// in a return value outside the range a to b. + /// + /// The start value. + /// The end value. + /// The interpolation value between the two double. + /// The interpolated double result between the two double values. + static double LerpUnclamped(double a, double b, double t); + /// + /// Calculates the linear parameter t that produces the interpolant value within the range [a, b]. + /// + /// Start value. + /// End value. + /// Value between start and end. + /// Percentage of value between start and end. + static double InverseLerp(double a, double b, double value); + }; +} diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx new file mode 100644 index 00000000..276c6ea8 --- /dev/null +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -0,0 +1,266 @@ +/************************************************************************************//*! +\file Vector2.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2021 +\brief Contains the definitions of functions of the Vector2 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Math/Vector2.hxx" +// Standard Libraries +#include +#include +// Project Headers +#include "Math.hxx" +// Undefinitions +#undef min +#undef max + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Vector2::Vector2(double _x) + : Vector2 { _x, 0.0 } + {} + Vector2::Vector2(double _x, double _y) + : x { _x } + , y { _y } + {} + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void Vector2::Normalise() + { + *this = GetNormalised(); + } + + Vector2 Vector2::GetNormalised() + { + return *this / GetMagnitude(); + } + + double Vector2::GetMagnitude() + { + return sqrt(x * x + y * y); + } + + double Vector2::GetSqrMagnitude() + { + return x * x + y * y; + } + + double Vector2::AngleFromRightRadians() + { + return atan2(y, x); + } + + double Vector2::AngleFromRightDegrees() + { + return Math::RadiansToDegrees(AngleFromRightRadians()); + } + + bool Vector2::IsNearPoint(Vector2 point) + { + return IsNearPoint(point, Math::Epsilon); + } + + bool Vector2::IsNearPoint(Vector2 point, double tolerance) + { + return (*this - point).GetSqrMagnitude() < (tolerance * tolerance); + } + + /*---------------------------------------------------------------------------------*/ + /* IEquatable */ + /*---------------------------------------------------------------------------------*/ + bool Vector2::Equals(Object^ o) + { + try + { + Vector2 vec = safe_cast(o); + return Equals(vec); + } + catch (System::InvalidCastException^) + { + return false; + } + } + + /*---------------------------------------------------------------------------------*/ + /* Object Overrides */ + /*---------------------------------------------------------------------------------*/ + bool Vector2::Equals(Vector2 other) + { + return IsNear(*this, other); + } + int Vector2::GetHashCode() + { + const int HASH = 19; + return x.GetHashCode() * HASH + y.GetHashCode(); + } + + /*---------------------------------------------------------------------------------*/ + /* Static Functions */ + /*---------------------------------------------------------------------------------*/ + bool Vector2::IsNear(Vector2 lhs, Vector2 rhs) + { + return IsNear(lhs, rhs, Math::Epsilon); + } + bool Vector2::IsNear(Vector2 lhs, Vector2 rhs, double tolerance) + { + return (std::abs(lhs.x) - std::abs(rhs.x)) < tolerance + && + (std::abs(lhs.y) - std::abs(rhs.y)) < tolerance; + } + double Vector2::Dot(Vector2 lhs, Vector2 rhs) + { + return lhs.x * rhs.x + lhs.y * rhs.y; + } + + Vector2 Vector2::Perpendicular(Vector2 lhs) + { + return Perpendicular(lhs, true); + } + + Vector2 Vector2::Perpendicular(Vector2 lhs, bool inward) + { + if (inward) + { + return Vector2 + ( + -lhs.y, lhs.x + ); + } + else + { + return Vector2 + ( + lhs.y, -lhs.x + ); + } + } + + Vector2 Vector2::Project(Vector2 vec, Vector2 direction) + { + return direction.GetNormalised() * vec.GetMagnitude(); + } + Vector2 Vector2::Reflect(Vector2 vec, Vector2 normal) + { + return vec - (Project(vec, normal.GetNormalised()) * 2.0); + } + Vector2 Vector2::RotateRadians(Vector2 vec, double radians) + { + const double SINE = sin(radians); + const double COSINE = cos(radians); + + return Vector2 + ( + vec.x * COSINE - vec.y * SINE, + vec.x * SINE + vec.y * COSINE + ); + } + Vector2 Vector2::RotateDegrees(Vector2 vec, double degrees) + { + return RotateRadians(vec, Math::DegreesToRadians(degrees)); + } + Vector2 Vector2::Min(Vector2 lhs, Vector2 rhs) + { + double lx = lhs.x, rx = rhs.x; + double ly = lhs.y, ry = rhs.y; + + return Vector2(std::min(lx, rx), + std::min(ly, ry)); + } + Vector2 Vector2::Max(Vector2 lhs, Vector2 rhs) + { + double lx = lhs.x, rx = rhs.x; + double ly = lhs.y, ry = rhs.y; + + return Vector2(std::max(lx, rx), + std::max(ly, ry)); + } + Vector2 Vector2::Lerp(Vector2 a, Vector2 b, double t) + { + return LerpUnclamped(a, b, std::clamp(t, 0.0, 1.0)); + } + Vector2 Vector2::LerpUnclamped(Vector2 a, Vector2 b, double t) + { + return a + ((b - a) * t); + } + Vector2 Vector2::MoveTowards(Vector2 current, Vector2 target, double maxDistanceDelta) + { + // Ignore if it is exactly on the same point + if (current == target) + return target; + + // Calculate new position + const Vector2 DELTA = (target - current).GetNormalised() * maxDistanceDelta; + Vector2 newPos = current + DELTA; + + // Check if check if is behind or ahead of target + const Vector2 DIFF = target - newPos; + if (Dot(DELTA, DIFF) < 0.0) + { + newPos = target; + } + return newPos; + } + Vector2 Vector2::operator+(Vector2 lhs, Vector2 rhs) + { + return Vector2 + ( + lhs.x + rhs.x, + lhs.y + rhs.y + ); + } + Vector2 Vector2::operator-(Vector2 lhs, Vector2 rhs) + { + return Vector2 + ( + lhs.x - rhs.x, + lhs.y - rhs.y + ); + } + Vector2 Vector2::operator*(Vector2 lhs, Vector2 rhs) + { + return Vector2 + ( + lhs.x * rhs.x, + lhs.y * rhs.y + ); + } + Vector2 Vector2::operator*(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x * rhs, + lhs.y * rhs + ); + } + Vector2 Vector2::operator/(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x / rhs, + lhs.y / rhs + ); + } + bool Vector2::operator==(Vector2 lhs, Vector2 rhs) + { + return lhs.Equals(rhs); + } + bool Vector2::operator!=(Vector2 lhs, Vector2 rhs) + { + return !(lhs == rhs); + } +} // namespace PlushieAPI::Mathematics \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx new file mode 100644 index 00000000..c52cdc72 --- /dev/null +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -0,0 +1,398 @@ +/************************************************************************************//*! +\file Vector2.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2021 +\brief Contains the definitions of Vector2 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Standard Libraries +#include + +namespace SHADE +{ + /// + /// CLR version of the the PlushieEngine's Vector2 class that represents a + /// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct. + /// + [StructLayout(LayoutKind::Sequential)] + public value struct Vector2 : public System::IEquatable + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + #pragma region Constants + /// + /// Shorthand for writing Vector2(0, -1). + /// + static const Vector2 Down = Vector2(0.0, -1.0); + /// + /// Shorthand for writing Vector2(-1, 0). + /// + static const Vector2 Left = Vector2(-1.0, 0.0); + /// + /// Shorthand for writing Vector2(double.NegativeInfinity, + /// double.NegativeInfinity). + /// + static const Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), + std::numeric_limits::lowest()); + /// + /// Shorthand for writing Vector2(1, 1). + /// + static const Vector2 One = Vector2(1.0, 1.0); + /// + /// Shorthand for writing Vector2(double.PositiveInfinity, + /// double.PositiveInfinity). + /// + static const Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), + std::numeric_limits::max()); + /// + /// Shorthand for writing Vector2(1, 0). + /// + static const Vector2 Right = Vector2(1.0, 0.0); + /// + /// Shorthand for writing Vector2(0, 1). + /// + static const Vector2 Up = Vector2(0.0, 1.0); + /// + /// Shorthand for writing Vector2(0, 0). + /// + static const Vector2 Zero = Vector2(0.0, 0.0); + #pragma endregion + + /*-----------------------------------------------------------------------------*/ + /* Public Members */ + /*-----------------------------------------------------------------------------*/ + /// + /// X-component of the Vector2. + /// + double x; + /// + /// Y-component of the Vector2. + /// + double y; + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor to construct a Vector2 with the specified components with the + /// Y-component set to 0.0. + /// + /// X-coordinate to set. + Vector2(double _x); + /// + /// Constructor to construct a Vector2 with the specified components.. + /// + /// X-coordinate to set. + /// Y-coordinate to set. + Vector2(double _x, double _y); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Normalises this current Vector2. This changes the data of this Vector2. + /// If you would like to get a copy, use GetNormalised() instead. + /// This function does nothing to a zero vector. + /// + void Normalise(); + /// + /// Creates a copy of this Vector2 and returns a normalized version. + /// + /// + /// Returns a normalised copy of this Vector2. + /// If this Vector2 is a zero vector, a zero vector will be returned. + /// + Vector2 GetNormalised(); + /// + /// Calculates and returns the magnitude of this Vector2. Note that this function + /// incurs a performance cost from the square root calculation. If you do not + /// need the precise magnitude, consider using GetSqrMagnitude() instead. + /// + /// Returns the length of this Vector2. + double GetMagnitude(); + /// + /// Calculates and returns the squared magnitude of this Vector2. + /// + /// Returns the squared length of this Vector2. + double GetSqrMagnitude(); + /// + /// Calculates and returns the angle of this vector from the right vector. This + /// function returns values between -Math.PI and Math.PI. + /// + /// Returns the angle of this vector from the right vector in radians. + double AngleFromRightRadians(); + /// + /// Calculates and returns the angle of this vector from the right vector. This + /// function returns values between -180.0 and 180.0. + /// + /// Returns the angle of this vector from the right vector in degrees. + double AngleFromRightDegrees(); + /// + /// Checks if a specified point is near this Vector2 that represents a point with + /// a tolerance value of PLS_EPSILON. + /// + /// The other point to check if we are near. + /// + /// True if this Vector2 representing a point and the specified point are within + /// the range of the specified tolerance. False otherwise. + /// + bool IsNearPoint(Vector2 point); + /// + /// Checks if a specified point is near this Vector2 that represents a point. + /// + /// The other point to check if we are near. + /// + /// The amount of tolerance before we consider these points as "near". + /// + /// + /// True if this Vector2 representing a point and the specified point are within + /// the range of the specified tolerance. False otherwise. + /// + bool IsNearPoint(Vector2 point, double tolerance); + + /*-----------------------------------------------------------------------------*/ + /* IEquatable */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with an object of the same type. + /// + /// The object to compare with. + /// True if both objects are the same. + virtual bool Equals(Vector2 other); + + /*-----------------------------------------------------------------------------*/ + /* Object */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with another unboxed object. + /// + /// The unboxed object to compare with. + /// True if both objects are the same. + bool Equals(Object^ o) override; + /// + /// Gets a unique hash for this object. + /// + /// Unique hash for this object. + int GetHashCode() override; + + /*-----------------------------------------------------------------------------*/ + /* Static Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Checks if two specified Vector2s are near in value. + /// + /// Vector2 to check if is near in value. + /// Another Vector2 to check if is near in value. + /// + /// True if the two Vector2s are within the tolerance value specified + /// + static bool IsNear(Vector2 lhs, Vector2 rhs); + /// + /// Checks if two specified Vector2s are near in value. + /// + /// Vector2 to check if is near in value. + /// Another Vector2 to check if is near in value. + /// + /// Amount of tolerance to do the comparison with. + /// + /// + /// True if the two Vector2s are within the tolerance value specified + /// + static bool IsNear(Vector2 lhs, Vector2 rhs, double tolerance); + /// + /// Computes and returns the dot product of 2 specified Vector2s. + /// + /// Vector2 to calculate dot product with. + /// Another Vector2 to calculate dot product with. + /// + /// Scalar value representing the dot product of the two Vector2s. + /// + static double Dot(Vector2 lhs, Vector2 rhs); + /// + /// Computes the inward perpendicular Vector2 to the specified Vector2. + /// Equivalent to calling Perpendicular(lhs, true). This means, the + /// resultant Vector2 is rotated 90-degrees in a counter-clockwise. + /// + /// Vector2 to find a perpendicular of. + /// + /// The perpendicular Vector2 relative to the specified Vector2. + /// + static Vector2 Perpendicular(Vector2 lhs); + /// + /// Computes a perpendicular Vector2 to the specified Vector2. + /// + /// Vector2 to find a perpendicular of. + /// + /// Whether the inward perpendicular Vector is retrieved. If true, the + /// resultant vector is rotated 90-degrees in a counter-clockwise. + /// + /// The perpendicular Vector2 relative to the specified Vector2. + /// + static Vector2 Perpendicular(Vector2 lhs, bool inward); + /// + /// Computes and returns a Vector2 projection. + /// + /// Vector2 to project. + /// Vector2 to project onto. + /// The Vector2 that represents the projected vec onto direction. + static Vector2 Project(Vector2 vec, Vector2 direction); + /// + /// Reflects a Vector2 across another Vector2. + /// + /// A Vector2 to reflect. + /// A normal to reflect the Vector2 across. + /// The Vector2 that represents vec reflected across normal. + static Vector2 Reflect(Vector2 vec, Vector2 normal); + /// + /// Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector2 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in radians. + /// + /// The Vector2 that represents the rotated vector. + static Vector2 RotateRadians(Vector2 vec, double radians); + /// + /// Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector2 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in degrees. + /// + /// The Vector2 that represents the rotated vector. + static Vector2 RotateDegrees(Vector2 vec, double degrees); + /// + /// Computes and returns a Vector2 that is made from the smallest components of + /// the two specified Vector2s. + /// + /// Vector2 to calculate minimum Vector2 with. + /// Another Vector2 to calculate minimum Vector2 with. + /// + /// The Vector2 that contains the smallest components of the two specified + /// Vector2s. + /// + static Vector2 Min(Vector2 lhs, Vector2 rhs); + /// + /// Computes and returns a Vector2 that is made from the largest components of + /// the two specified Vector2s. + /// + /// Vector2 to calculate maximum Vector2 with. + /// Another Vector2 to calculate maximum Vector2 with. + /// + /// The Vector2 that contains the largest components of the two specified + /// Vector2s. + /// + static Vector2 Max(Vector2 lhs, Vector2 rhs); + /// + /// Linearly interpolates between two specified points. + /// This is most commonly used to find a point some fraction of the way along a + /// line between two endpoints. + /// + /// The start Vector2, returned when t = 0.0. + /// The end Vector2, returned when t = 1.0. + /// + /// Value used to interpolate between a and b which is clamped to + /// the range[0, 1]. + /// + /// The interpolated Vector2. + static Vector2 Lerp(Vector2 a, Vector2 b, double t); + /// + /// Linearly interpolates between two specified points. + /// This is most commonly used to find a point some fraction of the way along a + /// line between two endpoints. + /// Unlike Lerp(), t is not clamped to a range at all. + /// + /// The start Vector2, returned when t = 0.0. + /// The end Vector2, returned when t = 1.0. + /// Value used to interpolate between a and b. + /// The interpolated Vector2. + static Vector2 LerpUnclamped(Vector2 a, Vector2 b, double t); + /// + /// Moves a point current towards target. + /// Similar to Lerp(), however, the function will ensure that the distance never + /// exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the + /// vector away from target + /// + /// The current position of the point. + /// The target position to move to. + /// Maximum distance moved per call. + /// Vector representing the moved point. + static Vector2 MoveTowards(Vector2 current, Vector2 target, double maxDistanceDelta); + + /*-----------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds two Vector2s together and returns the result. + /// + /// Vector2 to add. + /// Another Vector2 to add. + /// The result of lhs added to rhs + static Vector2 operator+(Vector2 lhs, Vector2 rhs); + /// + /// Subtracts a Vector2 from another Vector2 and returns the result. + /// + /// Vector2 to subtract from. + /// Another Vector2 to subtract. + /// The result of rhs subtracted from lhs. + static Vector2 operator-(Vector2 lhs, Vector2 rhs); + /// + /// Calculates the component-wise multiplication of two Vector2s and returns the + /// result. + /// + /// Vector2 to multiply with. + /// Another Vector2 to multiply with. + /// The result of rhs subtracted from lhs. + static Vector2 operator*(Vector2 lhs, Vector2 rhs); + /// + /// Calculates the multiplication of a Vector2 with a scalar value and returns + /// the result. + /// + /// Vector2 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. + static Vector2 operator*(Vector2 lhs, double rhs); + /// + /// Calculates the division of a Vector2 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector2 to divide with. + /// The result of the scalar division. + static Vector2 operator/(Vector2 lhs, double rhs); + /// + /// Checks if two Vector2s are approximately equal. This is equivalent to + /// calling Vector2.IsNear() with default tolerance values. + /// + /// Vector2 to compare. + /// Another Vector2 to compare. + /// + /// True if all components are approximately equal within the default + /// tolerance value. + /// + static bool operator==(Vector2 lhs, Vector2 rhs); + /// + /// Checks if two Vector2s are not approximately equal. This is equivalent to + /// calling !Vector2.IsNear() with default tolerance values. + /// + /// Vector2 to compare. + /// Another Vector2 to compare. + /// + /// True if all components are not approximately equal within the default + /// tolerance value. + /// + static bool operator!=(Vector2 lhs, Vector2 rhs); + }; +} diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx new file mode 100644 index 00000000..4f8ea8b0 --- /dev/null +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -0,0 +1,281 @@ +/************************************************************************************//*! +\file Vector3.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 24, 2021 +\brief Contains the definitions of functions of the Vector3 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Vector3.hxx" +// Standard Libraries +#include +#include +// Project Headers +#include "Math.hxx" +// Undefinitions +#undef min +#undef max + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Vector3::Vector3(double _x) + : Vector3 {_x, 0.0, 0.0} + {} + Vector3::Vector3(double _x, double _y) + : Vector3 {_x, _y, 0.0} + {} + Vector3::Vector3(double _x, double _y, double _z) + : x { _x } + , y { _y } + , z { _z } + {} + Vector3::Vector3(Vector2 vec) + : Vector3(vec.x, vec.y) + {} + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void Vector3::Normalise() + { + *this = GetNormalised(); + } + + Vector3 Vector3::GetNormalised() + { + return *this / GetSqrMagnitude(); + } + + double Vector3::GetMagnitude() + { + return sqrt(x * x + y * y + z * z); + } + + double Vector3::GetSqrMagnitude() + { + return x * x + y * y + z * z; + } + + double Vector3::Angle2DFromRightRadians() + { + return atan2(y, x); + } + + double Vector3::Angle2DFromRightDegrees() + { + return Math::RadiansToDegrees(Angle2DFromRightRadians()); + } + + bool Vector3::IsNearPoint(Vector3 point) + { + return IsNearPoint(point, Math::Epsilon); + } + + bool Vector3::IsNearPoint(Vector3 point, double tolerance) + { + return (*this - point).GetSqrMagnitude() < (tolerance * tolerance); + } + + /*---------------------------------------------------------------------------------*/ + /* IEquatable */ + /*---------------------------------------------------------------------------------*/ + bool Vector3::Equals(Object^ o) + { + try + { + Vector3 vec = safe_cast(o); + return Equals(vec); + } + catch (System::InvalidCastException^) + { + return false; + } + } + + /*---------------------------------------------------------------------------------*/ + /* Object Overrides */ + /*---------------------------------------------------------------------------------*/ + bool Vector3::Equals(Vector3 other) + { + return IsNear(*this, other); + } + int Vector3::GetHashCode() + { + const int HASH = 19; + const int HASH2 = 23; + return x.GetHashCode() * HASH + y.GetHashCode() * HASH2 + z.GetHashCode(); + } + + /*---------------------------------------------------------------------------------*/ + /* Static Functions */ + /*---------------------------------------------------------------------------------*/ + bool Vector3::IsNear(Vector3 lhs, Vector3 rhs) + { + return IsNear(lhs, rhs, Math::Epsilon); + } + bool Vector3::IsNear(Vector3 lhs, Vector3 rhs, double tolerance) + { + return (std::abs(lhs.x) - std::abs(rhs.x)) < tolerance + && + (std::abs(lhs.y) - std::abs(rhs.y)) < tolerance + && + (std::abs(lhs.z) - std::abs(rhs.z)) < tolerance; + } + double Vector3::Dot(Vector3 lhs, Vector3 rhs) + { + return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; + } + Vector3 Vector3::Cross(Vector3 lhs, Vector3 rhs) + { + return Vector3(lhs.y * rhs.z - lhs.z * rhs.y, + lhs.z * rhs.x - lhs.x * rhs.z, + lhs.x * rhs.y - lhs.y * rhs.x); + } + Vector3 Vector3::Project(Vector3 vec, Vector3 direction) + { + return direction.GetNormalised() * vec.GetMagnitude(); + } + Vector3 Vector3::Reflect(Vector3 vec, Vector3 normal) + { + return vec - (Project(vec, normal.GetNormalised()) * 2.0); + } + Vector3 Vector3::RotateRadians(Vector3 vec, double radians) + { + const double SINE = sin(radians); + const double COSINE = cos(radians); + + return Vector3 + ( + vec.x * COSINE - vec.y * SINE, + vec.x * SINE + vec.y * COSINE, + vec.z + ); + } + Vector3 Vector3::RotateDegrees(Vector3 vec, double degrees) + { + return RotateRadians(vec, Math::DegreesToRadians(degrees)); + } + Vector3 Vector3::Min(Vector3 lhs, Vector3 rhs) + { + double lx = lhs.x, rx = rhs.x; + double ly = lhs.y, ry = rhs.y; + double lz = lhs.z, rz = rhs.z; + + return Vector3(std::min(lx, rx), + std::min(ly, ry), + std::min(lz, rz)); + } + Vector3 Vector3::Max(Vector3 lhs, Vector3 rhs) + { + double lx = lhs.x, rx = rhs.x; + double ly = lhs.y, ry = rhs.y; + double lz = lhs.z, rz = rhs.z; + + return Vector3(std::max(lx, rx), + std::max(ly, ry), + std::max(lz, rz)); + } + Vector3 Vector3::Lerp(Vector3 a, Vector3 b, double t) + { + return LerpUnclamped(a, b, std::clamp(t, 0.0, 1.0)); + } + Vector3 Vector3::LerpUnclamped(Vector3 a, Vector3 b, double t) + { + return a + ((b - a) * t); + } + Vector3 Vector3::MoveTowards(Vector3 current, Vector3 target, double maxDistanceDelta) + { + // Ignore if it is exactly on the same point + if (current == target) + return target; + + // Calculate new position + const Vector3 DELTA = (target - current).GetNormalised() * maxDistanceDelta; + Vector3 newPos = current + DELTA; + + // Check if check if is behind or ahead of target + const Vector3 DIFF = target - newPos; + if (Dot(DELTA, DIFF) < 0.0) + { + newPos = target; + } + return newPos; + } + Vector3 Vector3::operator+(Vector3 lhs, Vector3 rhs) + { + return Vector3 + ( + lhs.x + rhs.x, + lhs.y + rhs.y, + lhs.z + rhs.z + ); + } + Vector3 Vector3::operator-(Vector3 lhs, Vector3 rhs) + { + return Vector3 + ( + lhs.x - rhs.x, + lhs.y - rhs.y, + lhs.z - rhs.z + ); + } + Vector3 Vector3::operator*(Vector3 lhs, Vector3 rhs) + { + return Vector3 + ( + lhs.x * rhs.x, + lhs.y * rhs.y, + lhs.z * rhs.z + ); + } + Vector3 Vector3::operator*(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x * rhs, + lhs.y * rhs, + lhs.z * rhs + ); + } + Vector3 Vector3::operator/(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x / rhs, + lhs.y / rhs, + lhs.z / rhs + ); + } + bool Vector3::operator==(Vector3 lhs, Vector3 rhs) + { + return lhs.Equals(rhs); + } + bool Vector3::operator!=(Vector3 lhs, Vector3 rhs) + { + return !(lhs == rhs); + } + + /*---------------------------------------------------------------------------------*/ + /* Conversion Operators */ + /*---------------------------------------------------------------------------------*/ + Vector3::operator Vector2(Vector3 vec) + { + return Vector2(vec.x, vec.y); + } + + Vector3::operator Vector3(Vector2 vec) + { + return Vector3(vec); + } +} // namespace PlushieAPI::Mathematics \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx new file mode 100644 index 00000000..ab05ddc9 --- /dev/null +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -0,0 +1,425 @@ +/************************************************************************************//*! +\file Vector3.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 24, 2021 +\brief Contains the definitions of Vector3 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Standard Libraries +#include +// Project Includes +#include "Vector2.hxx" + +namespace SHADE +{ + /// + /// CLR version of the the PlushieEngine's Vector3 class that represents a + /// 3-Dimensional Vector. Designed to closely match Unity's Vector3 struct. + /// + [StructLayout(LayoutKind::Sequential)] + public value struct Vector3 : public System::IEquatable + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + #pragma region Constants + /// + /// Shorthand for writing Vector3(0, 0, -1). + /// + static const Vector3 Back = Vector3(0.0, 0.0, -1.0); + /// + /// Shorthand for writing Vector3(0, -1, 0). + /// + static const Vector3 Down = Vector3(0.0, -1.0, 0.0); + /// + /// Shorthand for writing Vector3(0, 0, 1). + /// + static const Vector3 Forward = Vector3(0.0, 0.0, 1.0); + /// + /// Shorthand for writing Vector3(-1, 0, 0). + /// + static const Vector3 Left = Vector3(-1.0, 0.0, 0.0); + /// + /// Shorthand for writing Vector3(double.NegativeInfinity, + /// double.NegativeInfinity, double.NegativeInfinity). + /// + static const Vector3 NegativeInfinity = Vector3(std::numeric_limits::lowest(), + std::numeric_limits::lowest(), + std::numeric_limits::lowest()); + /// + /// Shorthand for writing Vector3(1, 1, 1). + /// + static const Vector3 One = Vector3(1.0, 1.0, 1.0); + /// + /// Shorthand for writing Vector3(double.PositiveInfinity, + /// double.PositiveInfinity, double.PositiveInfinity). + /// + static const Vector3 PositiveInfinity = Vector3(std::numeric_limits::max(), + std::numeric_limits::max(), + std::numeric_limits::max()); + /// + /// Shorthand for writing Vector3(1, 0, 0). + /// + static const Vector3 Right = Vector3(1.0, 0.0, 0.0); + /// + /// Shorthand for writing Vector3(0, 1, 0). + /// + static const Vector3 Up = Vector3(0.0, 1.0, 0.0); + /// + /// Shorthand for writing Vector3(0, 0, 0). + /// + static const Vector3 Zero = Vector3(0.0, 0.0, 0.0); + #pragma endregion + + /*-----------------------------------------------------------------------------*/ + /* Public Members */ + /*-----------------------------------------------------------------------------*/ + /// + /// X-component of the Vector3. + /// + double x; + /// + /// Y-component of the Vector3. + /// + double y; + /// + /// Z-component of the Vector3. + /// + double z; + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor to construct a Vector3 with the specified components with the + /// Y and Z-component set to 0.0. + /// + /// X-coordinate to set. + Vector3(double _x); + /// + /// Constructor to construct a Vector3 with the specified components with the + /// Z-component set to 0.0. + /// + /// X-coordinate to set. + /// Y-coordinate to set. + Vector3(double _x, double _y); + /// + /// Constructor to construct a Vector3 with the specified components. + /// + /// X-coordinate to set. + /// Y-coordinate to set. + /// Z-coordinate to set. + Vector3(double _x, double _y, double _z); + /// + /// Conversion constructor to construct a Vector3 using a Vector2. + /// + /// + Vector3(Vector2 vec); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Normalises this current Vector3. This changes the data of this Vector3. + /// If you would like to get a copy, use GetNormalised() instead. + /// This function does nothing to a zero vector. + /// + void Normalise(); + /// + /// Creates a copy of this Vector3 and returns a normalized version. + /// + /// + /// Returns a normalised copy of this Vector3. + /// If this Vector3 is a zero vector, a zero vector will be returned. + /// + Vector3 GetNormalised(); + /// + /// Calculates and returns the magnitude of this Vector3. Note that this function + /// incurs a performance cost from the square root calculation. If you do not + /// need the precise magnitude, consider using GetSqrMagnitude() instead. + /// + /// Returns the length of this Vector3. + double GetMagnitude(); + /// + /// Calculates and returns the squared magnitude of this Vector3. + /// + /// Returns the squared length of this Vector3. + double GetSqrMagnitude(); + /// + /// Calculates and returns the angle of this vector from the right vector. This + /// function returns values between -Math.PI and Math.PI. + /// + /// Returns the angle of this vector from the right vector in radians. + double Angle2DFromRightRadians(); + /// + /// Calculates and returns the angle of this vector from the right vector. This + /// function returns values between -180.0 and 180.0. + /// + /// Returns the angle of this vector from the right vector in degrees. + double Angle2DFromRightDegrees(); + /// + /// Checks if a specified point is near this Vector3 that represents a point with + /// a tolerance value of PLS_EPSILON. + /// + /// The other point to check if we are near. + /// + /// True if this Vector3 representing a point and the specified point are within + /// the range of the specified tolerance. False otherwise. + /// + bool IsNearPoint(Vector3 point); + /// + /// Checks if a specified point is near this Vector3 that represents a point. + /// + /// The other point to check if we are near. + /// + /// The amount of tolerance before we consider these points as "near". + /// + /// + /// True if this Vector3 representing a point and the specified point are within + /// the range of the specified tolerance. False otherwise. + /// + bool IsNearPoint(Vector3 point, double tolerance); + + /*-----------------------------------------------------------------------------*/ + /* IEquatable */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with an object of the same type. + /// + /// The object to compare with. + /// True if both objects are the same. + virtual bool Equals(Vector3 other); + + /*-----------------------------------------------------------------------------*/ + /* Object */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with another unboxed object. + /// + /// The unboxed object to compare with. + /// True if both objects are the same. + bool Equals(Object^ o) override; + /// + /// Gets a unique hash for this object. + /// + /// Unique hash for this object. + int GetHashCode() override; + + /*-----------------------------------------------------------------------------*/ + /* Static Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Checks if two specified Vector3s are near in value. + /// + /// Vector3 to check if is near in value. + /// Another Vector3 to check if is near in value. + /// + /// True if the two Vector3s are within the tolerance value specified + /// + static bool IsNear(Vector3 lhs, Vector3 rhs); + /// + /// Checks if two specified Vector3s are near in value. + /// + /// Vector3 to check if is near in value. + /// Another Vector3 to check if is near in value. + /// Amount of tolerance to do the comparison with. + /// + /// True if the two Vector3s are within the tolerance value specified + /// + static bool IsNear(Vector3 lhs, Vector3 rhs, double tolerance); + /// + /// Computes and returns the dot product of 2 specified Vector3s. + /// + /// Vector3 to calculate dot product with. + /// Another Vector3 to calculate dot product with. + /// Scalar value representing the dot product of the two Vector3s. + static double Dot(Vector3 lhs, Vector3 rhs); + /// + /// Computes and returns the cross product of 2 specified Vector3s. + /// + /// Vector3 to calculate cross product with. + /// Another Vector3 to calculate cross product with. + /// The cross product of the two Vector3s. + static Vector3 Cross(Vector3 lhs, Vector3 rhs); + /// + /// Computes and returns a Vector3 projection. + /// + /// Vector3 to project. + /// Vector3 to project onto. + /// The Vector3 that represents the projected vec onto direction. + static Vector3 Project(Vector3 vec, Vector3 direction); + /// + /// Reflects a Vector3 across another Vector3. + /// + /// A Vector3 to reflect. + /// A normal to reflect the Vector3 across. + /// The Vector3 that represents vec reflected across normal. + static Vector3 Reflect(Vector3 vec, Vector3 normal); + /// + /// Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector3 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in radians. + /// + /// The Vector3 that represents the rotated vector. + static Vector3 RotateRadians(Vector3 vec, double radians); + /// + /// Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector3 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in degrees. + /// + /// The Vector3 that represents the rotated vector. + static Vector3 RotateDegrees(Vector3 vec, double degrees); + /// + /// Computes and returns a Vector3 that is made from the smallest components of + /// the two specified Vector3s. + /// + /// Vector3 to calculate minimum Vector3 with. + /// Another Vector3 to calculate minimum Vector3 with. + /// + /// The Vector3 that contains the smallest components of the two specified + /// Vector3s. + /// + static Vector3 Min(Vector3 lhs, Vector3 rhs); + /// + /// Computes and returns a Vector3 that is made from the largest components of + /// the two specified Vector3s. + /// + /// Vector3 to calculate maximum Vector3 with. + /// Another Vector3 to calculate maximum Vector3 with. + /// + /// The Vector3 that contains the largest components of the two specified + /// Vector3s. + /// + static Vector3 Max(Vector3 lhs, Vector3 rhs); + /// + /// Linearly interpolates between two specified points. + /// This is most commonly used to find a point some fraction of the way along a + /// line between two endpoints. + /// + /// The start Vector3, returned when t = 0.0. + /// The end Vector3, returned when t = 1.0. + /// + /// Value used to interpolate between a and b which is clamped to + /// the range[0, 1]. + /// + /// The interpolated Vector3. + static Vector3 Lerp(Vector3 a, Vector3 b, double t); + /// + /// Linearly interpolates between two specified points. + /// This is most commonly used to find a point some fraction of the way along a + /// line between two endpoints. + /// Unlike Lerp(), t is not clamped to a range at all. + /// + /// The start Vector3, returned when t = 0.0. + /// The end Vector3, returned when t = 1.0. + /// Value used to interpolate between a and b. + /// The interpolated Vector3. + static Vector3 LerpUnclamped(Vector3 a, Vector3 b, double t); + /// + /// Moves a point current towards target. + /// Similar to Lerp(), however, the function will ensure that the distance never + /// exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the + /// vector away from target + /// + /// The current position of the point. + /// The target position to move to. + /// Maximum distance moved per call. + /// Vector representing the moved point. + static Vector3 MoveTowards(Vector3 current, Vector3 target, double maxDistanceDelta); + + /*-----------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds two Vector3s together and returns the result. + /// + /// Vector3 to add. + /// Another Vector3 to add. + /// The result of lhs added to rhs + static Vector3 operator+(Vector3 lhs, Vector3 rhs); + /// + /// Subtracts a Vector3 from another Vector3 and returns the result. + /// + /// Vector3 to subtract from. + /// Another Vector3 to subtract. + /// The result of rhs subtracted from lhs. + static Vector3 operator-(Vector3 lhs, Vector3 rhs); + /// + /// Calculates the component-wise multiplication of two Vector3s and returns the + /// result. + /// + /// Vector3 to multiply with. + /// Another Vector3 to multiply with. + /// The result of rhs subtracted from lhs. + static Vector3 operator*(Vector3 lhs, Vector3 rhs); + /// + /// Calculates the multiplication of a Vector3 with a scalar value and returns + /// the result. + /// + /// Vector3 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. + static Vector3 operator*(Vector3 lhs, double rhs); + /// + /// Calculates the division of a Vector3 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector3 to divide with. + /// The result of the scalar division. + static Vector3 operator/(Vector3 lhs, double rhs); + /// + /// Checks if two Vector3s are approximately equal. This is equivalent to + /// calling Vector3.IsNear() with default tolerance values. + /// + /// Vector3 to compare. + /// Another Vector3 to compare. + /// + /// True if all components are approximately equal within the default + /// tolerance value. + /// + static bool operator==(Vector3 lhs, Vector3 rhs); + /// + /// Checks if two Vector3s are not approximately equal. This is equivalent to + /// calling !Vector3.IsNear() with default tolerance values. + /// + /// Vector3 to compare. + /// Another Vector3 to compare. + /// + /// True if all components are not approximately equal within the default + /// tolerance value. + /// + static bool operator!=(Vector3 lhs, Vector3 rhs); + + /*-----------------------------------------------------------------------------*/ + /* Conversion Operators */ + /*-----------------------------------------------------------------------------*/ + /// + /// Explicit conversion operator to enable explicit casting from a Vector3 to a + /// Vector2. + /// + /// Vector3 to convert from. + static explicit operator Vector2(Vector3 vec); + /// + /// Explicit conversion operator to enable explicit casting from a Vector2 to a + /// Vector3. + /// + /// Vector2 to convert from. + static explicit operator Vector3(Vector2 vec); + }; +} // namespace PlushieAPI::Mathematics diff --git a/SHADE_Managed/src/SHpch.cpp b/SHADE_Managed/src/SHpch.cpp new file mode 100644 index 00000000..2a36c693 --- /dev/null +++ b/SHADE_Managed/src/SHpch.cpp @@ -0,0 +1,10 @@ +/**************************************************************************************** + * \file SHpch.h + * \brief Empty source file for generating SHADE Engine's precompiled header. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include "SHpch.h" \ No newline at end of file diff --git a/SHADE_Managed/src/SHpch.h b/SHADE_Managed/src/SHpch.h new file mode 100644 index 00000000..b54a8a5b --- /dev/null +++ b/SHADE_Managed/src/SHpch.h @@ -0,0 +1,31 @@ +/**************************************************************************************** + * \file SHpch.h + * \brief Precompiled header file for SHADE Engine. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +// C RunTime Header Files +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include From b0e9469e4ec571627d6374406a45c9f3f0310b1d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 19:00:54 +0800 Subject: [PATCH 022/793] Added Entity and WIP GameObject --- SHADE_Managed/SHADE_Managed.vcxproj.filters | 12 + SHADE_Managed/premake5.lua | 1 + SHADE_Managed/src/Scripts/Entity.cxx | 28 ++ SHADE_Managed/src/Scripts/Entity.hxx | 41 +++ SHADE_Managed/src/Scripts/GameObject.cxx | 205 ++++++++++++++ SHADE_Managed/src/Scripts/GameObject.hxx | 282 ++++++++++++++++++++ 6 files changed, 569 insertions(+) create mode 100644 SHADE_Managed/src/Scripts/Entity.cxx create mode 100644 SHADE_Managed/src/Scripts/Entity.hxx create mode 100644 SHADE_Managed/src/Scripts/GameObject.cxx create mode 100644 SHADE_Managed/src/Scripts/GameObject.hxx diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters index 86a64c06..182a3937 100644 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -25,6 +25,12 @@ Math + + Scripts + + + Scripts + @@ -40,5 +46,11 @@ Math + + Scripts + + + Scripts + \ No newline at end of file diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 61f42fc2..27ed920f 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -31,6 +31,7 @@ project "SHADE_Managed" "%{IncludeDir.imnodes}", "%{IncludeDir.yamlcpp}", "%{IncludeDir.RTTR}/include", + "%{wks.location}/SHADE_Engine/src" } flags diff --git a/SHADE_Managed/src/Scripts/Entity.cxx b/SHADE_Managed/src/Scripts/Entity.cxx new file mode 100644 index 00000000..bd915c42 --- /dev/null +++ b/SHADE_Managed/src/Scripts/Entity.cxx @@ -0,0 +1,28 @@ +/************************************************************************************//*! +\file Entity.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the EntityUtils managed + static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Entity.hxx" +// External Dependencies +#include "Engine/ECS_Base/System/SHEntityManager.h" + +namespace SHADE +{ + bool EntityUtils::IsValid(Entity^ entity) + { + return SHEntityManager::IsValidEID(static_cast(entity)); + } +} diff --git a/SHADE_Managed/src/Scripts/Entity.hxx b/SHADE_Managed/src/Scripts/Entity.hxx new file mode 100644 index 00000000..525522c2 --- /dev/null +++ b/SHADE_Managed/src/Scripts/Entity.hxx @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file Entity.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definitions of a managed Entity identifier and declarations + of useful utility functions for working with Entity identifiers. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Engine/ECS_Base/Entity/SHEntity.h" + +namespace SHADE +{ + /// + /// Managed representation of a native ECS Entity. + /// + using Entity = System::UInt32; + + /// + /// Static class that contains useful utility functions for working with Entity. + /// + private ref class EntityUtils abstract sealed + { + public: + /// + /// Checks if the specified entity is valid. This is done by checking if it + /// matches Pls::Entity::INVALID. + /// + /// The Entity to check. + /// True if the specified Entity is valid. + static bool IsValid(Entity^ entity); + }; +} diff --git a/SHADE_Managed/src/Scripts/GameObject.cxx b/SHADE_Managed/src/Scripts/GameObject.cxx new file mode 100644 index 00000000..3fe1c92f --- /dev/null +++ b/SHADE_Managed/src/Scripts/GameObject.cxx @@ -0,0 +1,205 @@ +/************************************************************************************//*! +\file GameObject.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the GameObject managed class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "GameObject.hxx" +// External Dependencies +#include "Engine/ECS_Base/System/SHEntityManager.h" +// Project Headers + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Static Functions */ + /*---------------------------------------------------------------------------------*/ + GameObject GameObject::Create() + { + throw gcnew System::NotImplementedException(); + } + + void GameObject::Destroy(GameObject obj) + { + SHEntityManager::DestroyEntity(static_cast(obj.GetEntity())); + } + + System::Nullable GameObject::Find(System::String ^ name) + { + // Search the GameObjectLibrary for an Entity with the specified name + throw gcnew System::NotImplementedException(); + } + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + System::String^ GameObject::Name::get() + { + throw gcnew System::NotImplementedException(); + } + bool GameObject::IsActiveSelf::get() + { + throw gcnew System::NotImplementedException(); + } + bool GameObject::IsActiveInHierarchy::get() + { + throw gcnew System::NotImplementedException(); + } + + /*---------------------------------------------------------------------------------*/ + /* GameObject Property Functions */ + /*---------------------------------------------------------------------------------*/ + void GameObject::SetName(System::String^ name) + { + throw gcnew System::NotImplementedException(); + } + void GameObject::SetActive(bool active) + { + throw gcnew System::NotImplementedException(); + } + + /*---------------------------------------------------------------------------------*/ + /* Component Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T GameObject::AddComponent() + { + throw gcnew System::NotImplementedException(); + //return ECS::AddComponent(GetNativeEntity()); + } + + generic + T GameObject::GetComponent() + { + throw gcnew System::NotImplementedException(); + //return ECS::GetComponent(GetNativeEntity()); + } + + generic + T GameObject::GetComponentInChildren() + { + throw gcnew System::NotImplementedException(); + //return ECS::GetComponentInChildren(GetNativeEntity()); + } + + generic + T GameObject::EnsureComponent() + { + throw gcnew System::NotImplementedException(); + //return ECS::EnsureComponent(GetNativeEntity()); + } + + generic + void GameObject::RemoveComponent() + { + throw gcnew System::NotImplementedException(); + //ECS::RemoveComponent(GetNativeEntity()); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T GameObject::AddScript() + { + throw gcnew System::NotImplementedException(); + //return ScriptStore::AddScript(entity); + } + + generic + T GameObject::GetScript() + { + throw gcnew System::NotImplementedException(); + //return ScriptStore::GetScript(entity); + } + + generic + T GameObject::GetScriptInChildren() + { + throw gcnew System::NotImplementedException(); + //return ScriptStore::GetScriptInChildren(entity); + } + + generic + System::Collections::Generic::IEnumerable^ GameObject::GetScripts() + { + throw gcnew System::NotImplementedException(); + //return ScriptStore::GetScripts(entity); + } + + generic + void GameObject::RemoveScript() + { + throw gcnew System::NotImplementedException(); + //ScriptStore::RemoveScript(entity); + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + GameObject::GameObject(EntityID entity) + : entity { entity } + {} + + GameObject::GameObject(Entity entity) + : entity { entity } + {} + + /*---------------------------------------------------------------------------------*/ + /* Getters */ + /*---------------------------------------------------------------------------------*/ + SHEntity GameObject::GetNativeEntity() + { + throw gcnew System::NotImplementedException(); + //return Convert::ToNative(entity); + } + + /*---------------------------------------------------------------------------------*/ + /* IEquatable */ + /*---------------------------------------------------------------------------------*/ + bool GameObject::Equals(GameObject other) + { + return entity == other.entity; + } + + /*---------------------------------------------------------------------------------*/ + /* Object */ + /*---------------------------------------------------------------------------------*/ + bool GameObject::Equals(Object^ o) + { + try + { + GameObject^ cmp = safe_cast(o); + return Equals(cmp); + } + catch (System::InvalidCastException^) + { + return false; + } + } + + int GameObject::GetHashCode() + { + return entity.GetHashCode(); + } + + bool GameObject::operator==(GameObject lhs, GameObject rhs) + { + return lhs.Equals(rhs); + } + + bool GameObject::operator!=(GameObject lhs, GameObject rhs) + { + return !(lhs == rhs); + } +} diff --git a/SHADE_Managed/src/Scripts/GameObject.hxx b/SHADE_Managed/src/Scripts/GameObject.hxx new file mode 100644 index 00000000..0b030354 --- /dev/null +++ b/SHADE_Managed/src/Scripts/GameObject.hxx @@ -0,0 +1,282 @@ +/************************************************************************************//*! +\file GameObject.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definitions of the GameObject managed class which define an + abstraction for working with Entities in managed code. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Entity.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + ref class PlushieScript; + ref class BaseComponent; + + /*---------------------------------------------------------------------------------*/ + /* Class Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Lightweight object for an PlushieEngine Entity that allows for easy access + /// to Component and Script operations. + /// + public value class GameObject : public System::IEquatable + { + public: + /*-----------------------------------------------------------------------------*/ + /* Static Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a new GameObject in the current Scene. If multiple Scenes are loaded, + /// and you would like to create an object in a specific Scene, call the Scene's + /// CreateGameObject(). + /// + /// GameObject that represents the newly created GameObject. + static GameObject Create(); + /// + /// Destroys the specified GameObject. Note that the specified GameObject will no + /// longer be a valid GameObject after this function is called. + /// + /// The GameObject to be destroyed. + static void Destroy(GameObject obj); + /// + /// Retrieves a GameObject with the specified name. If there are multiple + /// GameObjects with the same name, the first found GameObject will be retrieved. + /// There is no guaranteed order of which GameObject is considered "first". + /// + /// Name of the GameObject to find. + /// GameObject that has the specified name. Null if not found. + static System::Nullable Find(System::String^ name); + + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Name of the object that this Entity represents. + /// + property System::String^ Name + { + System::String^ get(); + } + /// + /// Whether or not this Entity alone, is active. This does not mean that this + /// object is active in the scene. For example, if this Entity's parent is not + /// active, then this Entity would also be not active. + /// + property bool IsActiveSelf + { + bool get(); + } + /// + /// Whether or not this Entity is active in the Scene hierarchy. + /// + property bool IsActiveInHierarchy + { + bool get(); + } + + /*-----------------------------------------------------------------------------*/ + /* GameObject Property Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Sets the name of this GameObject. + /// + /// The name to set. + void SetName(System::String^ name); + /// + /// Sets the active state of this GameObject. + ///
    + /// The actual "activeness" of this GameObject is still dependent on the parents' + /// active states. + ///
    + /// + /// Whether to activate or deactivate this GameObject. + /// + void SetActive(bool active); + + /*-----------------------------------------------------------------------------*/ + /* Component Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Component to this GameObject. + /// + /// Type of the Component to add. + /// Reference to the Component that was added. + generic where T : BaseComponent + T AddComponent(); + /// + /// Gets a Component from this GameObject. + /// + /// Type of the Component to get. + /// + /// Reference to the Component or null if this GameObject does not have the + /// specified Component. + /// + generic where T : BaseComponent + T GetComponent(); + /// + /// Retrieves the first Component from this GameObject's children that matches + /// the specified type. + /// + /// Type of the Component to get. + /// + /// Reference to the Component or null if neither of this GameObject's children + /// does not have the specified Component. + /// + generic where T : BaseComponent + T GetComponentInChildren(); + /// + /// Ensures a Component on this GameObject. + /// + /// Type of the Component to ensure. + /// + /// Reference to the Component. + /// + generic where T : BaseComponent + T EnsureComponent(); + /// + /// Removes a Component from this GameObject. If no Component exists to begin + /// with, nothing happens. + /// + /// Type of the Component to get. + generic where T : BaseComponent + void RemoveComponent(); + + /*-----------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a PlushieScript of the specified type to this GameObject. + /// + /// Type of PlushieScript to add. + /// Reference to the created PlushieScript. + generic where T : ref class, PlushieScript + T AddScript(); + /// + /// Retrieves a PlushieScript of the specified type from this GameObject. + /// If multiple PlushieScripts of the same specified type are added on the same + /// GameObject, this will retrieve the first one added. + /// + /// Type of PlushieScript to retrieve. + /// Reference to the PlushieScript to retrieve. + generic where T : ref class, PlushieScript + T GetScript(); + /// + /// Retrieves a PlushieScript of the specified type from child GameObjects. + /// If multiple PlushieScripts of the same specified type are added on the same + /// child GameObject, this will retrieve the first one added. + /// + /// Type of PlushieScript to retrieve. + /// Reference to the PlushieScript to retrieve. + generic where T : ref class, PlushieScript + T GetScriptInChildren(); + /// + /// Retrieves a immutable list of PlushieScripts of the specified type from this + /// GameObject. + /// + /// Type of PlushieScripts to retrieve. + /// Immutable list of PlushieScripts of the specified type. + generic where T : ref class, PlushieScript + System::Collections::Generic::IEnumerable^ GetScripts(); + /// + /// Removes all PlushieScripts of the specified type from this GameObject. + /// + /// Type of PLushieScripts to remove. + generic where T : ref class, PlushieScript + void RemoveScript(); + + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for the GameObject. + /// + /// + /// The ECS Entity that this GameObject should represent. + /// + GameObject(SHEntity entity); + /// + /// Constructor for the GameObject. + /// + /// + /// Managed numerical representation of the ECS Entity that this GameObject + /// should represent. + /// + GameObject(Entity entity); + + /*-----------------------------------------------------------------------------*/ + /* Getters */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves the CLR Entity object that this GameObject represents. + /// + /// Entity object that this GameObject represents. + inline Entity GetEntity() { return entity; } + /// + /// Retrieves the native Entity object that this GameObject represents. + /// + /// Native Entity object that this GameObject represents. + SHEntity GetNativeEntity(); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Entity entity; + + public: + /*-----------------------------------------------------------------------------*/ + /* IEquatable */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with an object of the same type. + /// + /// The object to compare with. + /// True if both objects are the same. + virtual bool Equals(GameObject other); + + /*-----------------------------------------------------------------------------*/ + /* Object */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with another unboxed object. + /// + /// The unboxed object to compare with. + /// True if both objects are the same. + bool Equals(Object^ o) override; + /// + /// Gets a unique hash for this object. + /// + /// Unique hash for this object. + int GetHashCode() override; + /// + /// Checks if two GameObject references are the same. + /// + /// GameObject to check. + /// Another GameObject to check with. + /// True if both Components are the same. + static bool operator==(GameObject lhs, GameObject rhs); + /// + /// Checks if two GameObject references are different. + /// + /// GameObject to check. + /// Another GameObject to check with. + /// True if both Components are different. + static bool operator!=(GameObject lhs, GameObject rhs); + }; + +} + From 506d3a1c3520c6466bb5be46bfd46de4f5ac7a28 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 12 Sep 2022 20:08:01 +0800 Subject: [PATCH 023/793] WIP --- SHADE_Engine/SHADE_Engine.vcxproj | 2 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 11 +- .../Editor/Backend/SHImGuiVulkanBackend.cpp | 334 +----------------- .../src/Editor/Backend/SHImGuiVulkanBackend.h | 3 + .../Graphics/Commands/SHVkCommandBuffer.cpp | 19 + .../src/Graphics/Commands/SHVkCommandBuffer.h | 9 +- .../Graphics/Devices/SHVkLogicalDevice.cpp | 7 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 25 +- .../src/Graphics/Images/SHVkImage.cpp | 30 +- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 6 +- 10 files changed, 104 insertions(+), 342 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index cd596fc6..c8dbf732 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -276,4 +276,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index d890c070..1324473d 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -4,6 +4,9 @@ {8C1A20B0-78BC-4A86-6177-5EDA4DB8D1D6} + + {43EDC149-2FBB-B54F-184F-267604BC91B4} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -111,6 +114,9 @@ + + Editor\Backend + Editor @@ -361,9 +367,11 @@ Tools - + + Editor\Backend + Editor @@ -542,6 +550,5 @@ Tools - \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp index 63fd39b8..29a8e703 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -235,6 +235,7 @@ namespace SHADE ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept { + return {}; } void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept @@ -254,14 +255,14 @@ namespace SHADE { for (auto& primBuffer : primitiveBuffers) { - primBuffer.vertexBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawVert) * 3000, + primBuffer.vertexBuffer = device->CreateBuffer(sizeof(ImDrawVert) * 3000, nullptr, sizeof(ImDrawVert) * 3000, vk::BufferUsageFlagBits::eVertexBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags - primBuffer.indicesBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawIdx) * 3000, + primBuffer.indicesBuffer = device->CreateBuffer(sizeof(ImDrawIdx) * 3000, nullptr, sizeof(ImDrawIdx) * 3000, vk::BufferUsageFlagBits::eIndexBuffer, @@ -283,331 +284,28 @@ namespace SHADE // If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); + SHImageCreateParams createParams{}; + createParams.imageType = vk::ImageType::e2D; + createParams.width = width; + createParams.height = height; + createParams.depth = 1; + createParams.levels = 1; + createParams.arrayLayers = 1; + createParams.imageFormat = vk::Format::eR8G8B8A8Unorm; + createParams.usageFlags = vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst; + createParams.createFlags = {}; + fontsMipOffset.push_back(0); - // Create the texture in xgpu - { - std::array Mip{ height * width * sizeof(std::uint32_t) }; - xgpu::texture::setup Setup; - - Setup.m_Height = height; - Setup.m_Width = width; - Setup.m_MipChain = Mip; - Setup.m_Data = { reinterpret_cast(pixels), Mip[0].m_Size }; - - if (auto Err = m_Device.Create(Texture, Setup); Err) - return Err; - } + fontsTexture = device->CreateImage(createParams, pixels, width * height * sizeof(uint32_t), fontsMipOffset, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, {}); // We could put here the texture id if we wanted io.Fonts->TexID = nullptr; - - return nullptr; - - } -} -#include -#include - -#include - -#include "SHImGuiVulkanBackend.h" - -#include - - -#include "Tools/SHLogger.h" -namespace SHADE -{ -#define GETINSTANCE \ - ImGuiIO& io = ImGui::GetIO(); \ - SHBreachInstance& instance = *reinterpret_cast(io.UserData); - - /* - #==============================================================# - || Embedded Shaders || - #==============================================================# - */ - // glsl_shader.vert, compiled with: - // # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert - /* - #version 450 core - layout(location = 0) in vec2 aPos; - layout(location = 1) in vec2 aUV; - layout(location = 2) in vec4 aColor; - layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc; - - out gl_PerVertex { vec4 gl_Position; }; - layout(location = 0) out struct { vec4 Color; vec2 UV; } Out; - - void main() - { - Out.Color = aColor; - Out.UV = aUV; - gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); - } - */ - static uint32_t __glsl_shader_vert_spv[] = - { - 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, - 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, - 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, - 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, - 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, - 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, - 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, - 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, - 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, - 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, - 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, - 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, - 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, - 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, - 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, - 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, - 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, - 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, - 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, - 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, - 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, - 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, - 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, - 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, - 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, - 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, - 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, - 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, - 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, - 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, - 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, - 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, - 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, - 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, - 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, - 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, - 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, - 0x0000002d,0x0000002c,0x000100fd,0x00010038 - }; - - // glsl_shader.frag, compiled with: - // # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag - /* - #version 450 core - layout(location = 0) out vec4 fColor; - layout(set=0, binding=0) uniform sampler2D sTexture; - layout(location = 0) in struct { vec4 Color; vec2 UV; } In; - void main() - { - fColor = In.Color * texture(sTexture, In.UV.st); - } - */ - static uint32_t __glsl_shader_frag_spv[] = - { - 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000d,0x00030010, - 0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00040005,0x00000009,0x6c6f4366,0x0000726f,0x00030005,0x0000000b,0x00000000, - 0x00050006,0x0000000b,0x00000000,0x6f6c6f43,0x00000072,0x00040006,0x0000000b,0x00000001, - 0x00005655,0x00030005,0x0000000d,0x00006e49,0x00050005,0x00000016,0x78655473,0x65727574, - 0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,0x0000001e, - 0x00000000,0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021, - 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, - 0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003, - 0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040017,0x0000000a,0x00000006, - 0x00000002,0x0004001e,0x0000000b,0x00000007,0x0000000a,0x00040020,0x0000000c,0x00000001, - 0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040015,0x0000000e,0x00000020, - 0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000001, - 0x00000007,0x00090019,0x00000013,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, - 0x00000001,0x00000000,0x0003001b,0x00000014,0x00000013,0x00040020,0x00000015,0x00000000, - 0x00000014,0x0004003b,0x00000015,0x00000016,0x00000000,0x0004002b,0x0000000e,0x00000018, - 0x00000001,0x00040020,0x00000019,0x00000001,0x0000000a,0x00050036,0x00000002,0x00000004, - 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000010,0x00000011,0x0000000d, - 0x0000000f,0x0004003d,0x00000007,0x00000012,0x00000011,0x0004003d,0x00000014,0x00000017, - 0x00000016,0x00050041,0x00000019,0x0000001a,0x0000000d,0x00000018,0x0004003d,0x0000000a, - 0x0000001b,0x0000001a,0x00050057,0x00000007,0x0000001c,0x00000017,0x0000001b,0x00050085, - 0x00000007,0x0000001d,0x00000012,0x0000001c,0x0003003e,0x00000009,0x0000001d,0x000100fd, - 0x00010038 - }; - - /* - #==============================================================# - || ImGui Push Constants || - #==============================================================# - */ - struct ImGui_Push_Constants - { - std::array scale; - std::array translate; - }; - - void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice) noexcept - { - if (ImGui::GetCurrentContext() == nullptr) - { - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - } - else { SHLOG_WARNING("ImGui context already exists") }; - - ImGuiIO& io = ImGui::GetIO(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - //io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; // We can create multi-viewports on the Renderer side (optional) - //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) - io.BackendRendererName = "SHImGuiVulkanBackend"; - - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGuiPlatformIO& platformIO = ImGui::GetPlatformIO(); - platformIO.Renderer_CreateWindow = CreateChildWindow; - platformIO.Renderer_DestroyWindow = DestroyChildWindow; - platformIO.Renderer_SetWindowSize = SetChildWindowSize; - platformIO.Renderer_RenderWindow = RenderChildWindow; - platformIO.Renderer_SwapBuffers = ChildSwapBuffers; - - platformIO.Platform_CreateWindow = CreateChildWindow; - platformIO.Platform_DestroyWindow = DestroyChildWindow; - platformIO.Platform_ShowWindow = [](ImGuiViewport* pViewport) {}; - platformIO.Platform_SetWindowPos = SetChildWindowPos; - platformIO.Platform_GetWindowPos = GetChildWindowPos; - platformIO.Platform_SetWindowSize = SetChildWindowSize; - platformIO.Platform_GetWindowSize = GetChildWindowSize; - //platform_io.Platform_SetWindowFocus = ImGui_ImplGlfw_SetWindowFocus; - //platform_io.Platform_GetWindowFocus = ImGui_ImplGlfw_GetWindowFocus; - //platform_io.Platform_GetWindowMinimized = ImGui_ImplGlfw_GetWindowMinimized; - platformIO.Platform_SetWindowTitle = [](ImGuiViewport* pViewport, const char*) {}; - platformIO.Platform_RenderWindow = RenderChildWindow; - platformIO.Platform_SwapBuffers = ChildSwapBuffers; - - platformIO.Monitors.resize(0); - ImGuiPlatformMonitor monitor; - monitor.MainPos = monitor.WorkPos = {}; - monitor.MainSize = monitor.WorkSize = {}; - platformIO.Monitors.push_back(monitor); - }//if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - - //associate io keymap with engine input keymap - - //Initialize instance - auto instance = std::make_unique(); - instance->InitializePipeline(io); - instance->lastFrameTime = std::chrono::high_resolution_clock::now(); - io.UserData = instance.release(); - - ImGuiViewport* viewport = ImGui::GetMainViewport(); - viewport->RendererUserData = io.UserData; - viewport->PlatformHandle = io.UserData; } - void SHImGuiVulkanBackend::Render(void) noexcept - { - ImGui::Render(); - ImDrawData* drawData = ImGui::GetDrawData(); - //TODO: instance draw data - } - - void SHImGuiVulkanBackend::CreateChildWindow(ImGuiViewport* viewport) noexcept - { - GETINSTANCE - - auto& info = *new SHImGuiWindow{ instance.device }; - viewport->RendererUserData = &info; - } - - void SHImGuiVulkanBackend::DestroyChildWindow(ImGuiViewport* viewport) noexcept - { - GETINSTANCE - - auto info = reinterpret_cast(viewport->RendererUserData); - delete info; - viewport->RendererUserData = nullptr; - } - - ImVec2 SHImGuiVulkanBackend::GetChildWindowSize(ImGuiViewport* viewport) noexcept - { - auto info = reinterpret_cast(viewport->RendererUserData); - return{}; - } - - void SHImGuiVulkanBackend::SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept + void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io) noexcept { } - ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept - { - } - - void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept - { - } - - void SHImGuiVulkanBackend::RenderChildWindow(ImGuiViewport* viewport, void*) noexcept - { - } - - void SHImGuiVulkanBackend::ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept - { - } - - - void SHImGuiVulkanBackend::SHImGuiWindow::InitializeBuffers(void) noexcept - { - for (auto& primBuffer : primitiveBuffers) - { - primBuffer.vertexBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawVert) * 3000, - nullptr, - sizeof(ImDrawVert) * 3000, - vk::BufferUsageFlagBits::eVertexBuffer, - VMA_MEMORY_USAGE_AUTO, - VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags - - primBuffer.indicesBuffer = logicalDeviceHdl->CreateBuffer(sizeof(ImDrawIdx) * 3000, - nullptr, - sizeof(ImDrawIdx) * 3000, - vk::BufferUsageFlagBits::eIndexBuffer, - VMA_MEMORY_USAGE_AUTO, - VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags - - } - } - - void SHImGuiVulkanBackend::SHBreachInstance::CreateFontsTexture(Handle image, ImGuiIO& io) noexcept - { - // Build texture atlas - unsigned char* pixels; - int width, height; - - // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. - // If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - - - // Create the texture in xgpu - { - std::array Mip{ height * width * sizeof(std::uint32_t) }; - xgpu::texture::setup Setup; - - Setup.m_Height = height; - Setup.m_Width = width; - Setup.m_MipChain = Mip; - Setup.m_Data = { reinterpret_cast(pixels), Mip[0].m_Size }; - - if (auto Err = m_Device.Create(Texture, Setup); Err) - return Err; - } - - // We could put here the texture id if we wanted - io.Fonts->TexID = nullptr; - - return nullptr; - - } } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h index df513df7..fdfa4160 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Images/SHVkImage.h" @@ -35,6 +36,8 @@ namespace SHADE { Handle pipeline; std::chrono::time_point lastFrameTime; + Handle fontsTexture; + std::vector fontsMipOffset; public: void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; void InitializePipeline(ImGuiIO& io) noexcept; diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index a9753416..0cc9138e 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -407,6 +407,25 @@ namespace SHADE } + void SHVkCommandBuffer::PipelineBarrier ( + vk::PipelineStageFlags srcStage, + vk::PipelineStageFlags dstStage, + vk::DependencyFlags deps, + std::vector const& memoryBarriers, + std::vector const& bufferMemoryBarriers, + std::vector const& imageMemoryBarriers + ) const noexcept + { + vkCommandBuffer.pipelineBarrier ( + srcStage, + dstStage, + deps, + memoryBarriers, + bufferMemoryBarriers, + imageMemoryBarriers + ); + } + //void SHVkCommandBuffer::PipelineBarrier(vk::PipelineStageFlags ) const noexcept //{ // //vkCommandBuffer.pipelineBarrier() diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 4f89f813..932a0d47 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -115,7 +115,14 @@ namespace SHADE void DrawIndexed (uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept; // memory barriers - //void PipelineBarrier (void) const noexcept; + void PipelineBarrier ( + vk::PipelineStageFlags srcStage, + vk::PipelineStageFlags dstStage, + vk::DependencyFlags deps, + std::vector const& memoryBarriers, + std::vector const& bufferMemoryBarriers, + std::vector const& imageMemoryBarriers + ) const noexcept; // Push Constant variable setting template diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 0fa1c864..69e76246 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -418,7 +418,12 @@ namespace SHADE /***************************************************************************/ Handle SHVkLogicalDevice::CreateImage(uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) const noexcept { - return SHVkInstance::GetResourceManager().Create(std::cref(vmaAllocator), w, h, levels, format, usage, create); + return SHVkInstance::GetResourceManager().Create(&vmaAllocator, w, h, levels, format, usage, create); + } + + Handle SHVkLogicalDevice::CreateImage(SHImageCreateParams const& imageDetails, unsigned char* data, uint32_t dataSize, std::span inMipOffsets, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags) noexcept + { + return SHVkInstance::GetResourceManager().Create(&vmaAllocator, imageDetails, data, dataSize, inMipOffsets, memUsage, allocFlags); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 78108b94..d50d27f0 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -19,6 +19,7 @@ #include "vk_mem_alloc.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" +#include "Graphics/Images/SHVkImage.h" namespace SHADE { @@ -29,7 +30,6 @@ namespace SHADE class SHVkSurface; class SHVkSwapchain; class SHVkBuffer; - class SHVkImage; class SHVkFence; class SHVkSemaphore; class SHVkShaderModule; @@ -138,14 +138,23 @@ namespace SHADE ) const noexcept; Handle CreateImage ( - uint32_t w, - uint32_t h, - uint8_t levels, - vk::Format format, - vk::ImageUsageFlags usage, - vk::ImageCreateFlags create + uint32_t w, + uint32_t h, + uint8_t levels, + vk::Format format, + vk::ImageUsageFlags usage, + vk::ImageCreateFlags create ) const noexcept; - + + Handle CreateImage ( + SHImageCreateParams const& imageDetails, + unsigned char* data, + uint32_t dataSize, + std::span inMipOffsets, + VmaMemoryUsage memUsage, + VmaAllocationCreateFlags allocFlags + ) noexcept; + Handle CreateShaderModule ( std::vector const& binaryData, std::string entryPoint, diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index 3cd311d3..f3d5a7b5 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -103,11 +103,8 @@ namespace SHADE , randomAccessOptimized {false} , mappedPtr{nullptr} { - for (auto& bit : imageDetails.usageBits) - usageFlags |= bit; - - for (auto& bit : imageDetails.createBits) - createFlags |= bit; + usageFlags = imageDetails.usageFlags; + createFlags = imageDetails.createFlags; // If marked as 2D array compatible, image type MUST be 3D if (createFlags & vk::ImageCreateFlagBits::e2DArrayCompatible) @@ -257,9 +254,27 @@ namespace SHADE } - void SHVkImage::TransitionImage(vk::ImageLayout oldLayout, vk::ImageLayout newLayout) noexcept + /***************************************************************************/ + /*! + + \brief + Does not perform any image transitions but prepares a barrier for image + transitioning. Pipeline barrier will be issued outside this call after + this preparation function, or at least, it should be. + + \param oldLayout + Old layout of the image. + + \param newLayout + new layout of the image to transition to. + + \param barrier + Barrier to modify to prepare the image for transitioning. + + */ + /***************************************************************************/ + void SHVkImage::PrepareImageTransition(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept { - vk::ImageMemoryBarrier barrier{}; barrier.oldLayout = oldLayout; barrier.newLayout = newLayout; barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; @@ -297,7 +312,6 @@ namespace SHADE SHLOG_ERROR("Image layouts are invalid. "); } - //cmdBufferHdl } void SHVkImage::LinkWithExteriorImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t layers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 2884cd63..a30b90e6 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -36,10 +36,10 @@ namespace SHADE vk::Format imageFormat; //! Image usage bits - std::span usageBits; + vk::ImageUsageFlags usageFlags; //! Image create flags - std::span createBits; + vk::ImageCreateFlags createFlags; }; class SHVkImage @@ -136,7 +136,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; void TransferToDeviceResource (Handle const& cmdBufferHdl) noexcept; - void TransitionImage (vk::ImageLayout oldLayout, vk::ImageLayout newLayout) noexcept; + void PrepareImageTransition (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ From 216a9ac7cb2e2a09c2308c927f416433984cdb2b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 12 Sep 2022 22:42:46 +0800 Subject: [PATCH 024/793] Added Script class --- SHADE_Managed/SHADE_Managed.vcxproj.filters | 37 ++- SHADE_Managed/premake5.lua | 16 +- .../src/{Scripts => Engine}/Entity.cxx | 0 .../src/{Scripts => Engine}/Entity.hxx | 0 .../src/{Scripts => Engine}/GameObject.cxx | 0 .../src/{Scripts => Engine}/GameObject.hxx | 0 SHADE_Managed/src/Scripts/Script.cxx | 171 +++++++++++ SHADE_Managed/src/Scripts/Script.hxx | 274 ++++++++++++++++++ SHADE_Managed/src/Utility/Convert.cxx | 49 ++++ SHADE_Managed/src/Utility/Convert.hxx | 68 +++++ SHADE_Managed/src/Utility/Debug.cxx | 112 +++++++ SHADE_Managed/src/Utility/Debug.hxx | 240 +++++++++++++++ .../DisposableAssemblyLoadContext.cxx | 0 .../DisposableAssemblyLoadContext.hxx | 0 14 files changed, 958 insertions(+), 9 deletions(-) rename SHADE_Managed/src/{Scripts => Engine}/Entity.cxx (100%) rename SHADE_Managed/src/{Scripts => Engine}/Entity.hxx (100%) rename SHADE_Managed/src/{Scripts => Engine}/GameObject.cxx (100%) rename SHADE_Managed/src/{Scripts => Engine}/GameObject.hxx (100%) create mode 100644 SHADE_Managed/src/Scripts/Script.cxx create mode 100644 SHADE_Managed/src/Scripts/Script.hxx create mode 100644 SHADE_Managed/src/Utility/Convert.cxx create mode 100644 SHADE_Managed/src/Utility/Convert.hxx create mode 100644 SHADE_Managed/src/Utility/Debug.cxx create mode 100644 SHADE_Managed/src/Utility/Debug.hxx rename SHADE_Managed/src/{Engine => Utility}/DisposableAssemblyLoadContext.cxx (100%) rename SHADE_Managed/src/{Engine => Utility}/DisposableAssemblyLoadContext.hxx (100%) diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters index 182a3937..c83321cd 100644 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -10,9 +10,15 @@ {4D6F1AE8-B94E-9983-C266-245A2EC5FFE4} + + {594615A9-C525-9444-CE3D-1F1B3A9CFAA5} + - + + Engine + + Engine @@ -25,15 +31,24 @@ Math - + Scripts - - Scripts + + Utility + + + Utility + + + Utility - + + Engine + + Engine @@ -46,11 +61,17 @@ Math - + Scripts - - Scripts + + Utility + + + Utility + + + Utility \ No newline at end of file diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 27ed920f..137e950e 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -25,7 +25,7 @@ project "SHADE_Managed" includedirs { "%{prj.location}/src", - "%{IncludeDir.assimp}/include", + "%{IncludeDir.spdlog}/include", "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", @@ -34,11 +34,25 @@ project "SHADE_Managed" "%{wks.location}/SHADE_Engine/src" } + links + { + "yaml-cpp", + "imgui", + "spdlog", + } + flags { "MultiProcessorCompile" } + dependson + { + "yaml-cpp", + "imgui", + "spdlog", + } + warnings 'Extra' filter "configurations:Debug" diff --git a/SHADE_Managed/src/Scripts/Entity.cxx b/SHADE_Managed/src/Engine/Entity.cxx similarity index 100% rename from SHADE_Managed/src/Scripts/Entity.cxx rename to SHADE_Managed/src/Engine/Entity.cxx diff --git a/SHADE_Managed/src/Scripts/Entity.hxx b/SHADE_Managed/src/Engine/Entity.hxx similarity index 100% rename from SHADE_Managed/src/Scripts/Entity.hxx rename to SHADE_Managed/src/Engine/Entity.hxx diff --git a/SHADE_Managed/src/Scripts/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx similarity index 100% rename from SHADE_Managed/src/Scripts/GameObject.cxx rename to SHADE_Managed/src/Engine/GameObject.cxx diff --git a/SHADE_Managed/src/Scripts/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx similarity index 100% rename from SHADE_Managed/src/Scripts/GameObject.hxx rename to SHADE_Managed/src/Engine/GameObject.hxx diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx new file mode 100644 index 00000000..ecd27325 --- /dev/null +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -0,0 +1,171 @@ +/************************************************************************************//*! +\file Script.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the PlushieScript managed + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Script.hxx" +// Project Headers +#include "Utility/Debug.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Component Access Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T Script::AddComponent() + { + return owner.AddComponent(); + } + generic + T Script::GetComponent() + { + return owner.GetComponent(); + } + + generic + T Script::GetComponentInChildren() + { + return owner.GetComponentInChildren(); + } + + generic + T Script::EnsureComponent() + { + return owner.EnsureComponent(); + } + generic + void Script::RemoveComponent() + { + throw gcnew System::NotImplementedException; + //ECS::RemoveComponent(owner.GetNativeEntity()); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T Script::AddScript() + { + throw gcnew System::NotImplementedException; + //return ScriptStore::AddScript(owner.GetEntity()); + } + generic + T Script::GetScript() + { + throw gcnew System::NotImplementedException; + //return ScriptStore::GetScript(owner.GetEntity()); + } + + generic + T Script::GetScriptInChildren() + { + throw gcnew System::NotImplementedException; + //return ScriptStore::GetScriptInChildren(owner.GetEntity()); + } + + generic + System::Collections::Generic::IEnumerable^ Script::GetScripts() + { + throw gcnew System::NotImplementedException; + //return ScriptStore::GetScripts(owner.GetEntity()); + } + + generic + void Script::RemoveScript() + { + throw gcnew System::NotImplementedException; + //ScriptStore::RemoveScript(owner.GetEntity()); + } + + /*---------------------------------------------------------------------------------*/ + /* "All-time" Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::OnAttached() + { + SAFE_NATIVE_CALL_BEGIN + onAttached(); + SAFE_NATIVE_CALL_END(this) + } + void Script::OnDetached() + { + SAFE_NATIVE_CALL_BEGIN + onDetatched(); + SAFE_NATIVE_CALL_END(this) + } + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::Awake() + { + SAFE_NATIVE_CALL_BEGIN + awake(); + SAFE_NATIVE_CALL_END(this) + } + void Script::Start() + { + SAFE_NATIVE_CALL_BEGIN + start(); + SAFE_NATIVE_CALL_END(this) + } + void Script::FixedUpdate() + { + SAFE_NATIVE_CALL_BEGIN + fixedUpdate(); + SAFE_NATIVE_CALL_END(this) + } + void Script::Update() + { + SAFE_NATIVE_CALL_BEGIN + update(); + SAFE_NATIVE_CALL_END(this) + } + void Script::LateUpdate() + { + SAFE_NATIVE_CALL_BEGIN + lateUpdate(); + SAFE_NATIVE_CALL_END(this) + } + void Script::OnDestroy() + { + SAFE_NATIVE_CALL_BEGIN + onDestroy(); + SAFE_NATIVE_CALL_END(this) + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Script::Script(GameObject gameObj) + : owner { gameObj } + {} + + /*---------------------------------------------------------------------------------*/ + /* Virtual "All-Time" Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::onAttached() {} + void Script::onDetatched() {} + + /*---------------------------------------------------------------------------------*/ + /* Virtual Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::awake() {} + void Script::start() {} + void Script::fixedUpdate() {} + void Script::update() {} + void Script::lateUpdate() {} + void Script::onDestroy() {} +}// namespace PlushieAPI diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx new file mode 100644 index 00000000..cef9f4cd --- /dev/null +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -0,0 +1,274 @@ +/************************************************************************************//*! +\file Script.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the Script class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Engine/GameObject.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + ref class BaseComponent; + + /*---------------------------------------------------------------------------------*/ + /* Class Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Class that forms the basis of all "script"-objects that can be attached to + /// Entities to update each Entity's Components via C# code. + /// + public ref class Script + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// GameObject that this Script belongs to. + /// + property GameObject Owner + { + GameObject get() { return owner; } + } + + /*-----------------------------------------------------------------------------*/ + /* Component Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Component to the GameObject that this Script belongs to. + /// + /// + /// Type of the Component to add. Must be derived from BaseComponent. + /// + /// Reference to the Component that was added. + generic where T : BaseComponent + T AddComponent(); + /// + /// Gets a Component from the GameObject that this Script belongs to. + /// + /// + /// Type of the Component to get. Must be derived from BaseComponent. + /// + /// Reference to the Component that was retrieved. + generic where T : BaseComponent + T GetComponent(); + /// + /// Retrieves the first Component from this GameObject's children that matches + /// the specified type. + /// + /// + /// Type of the Component to get. Must be derived from BaseComponent. + /// + /// Reference to the Component that was retrieved. + generic where T : BaseComponent + T GetComponentInChildren(); + /// + /// Ensures a Component on the GameObject that this Script belongs to. + /// + /// + /// Type of the Component to ensure. Must be derived from BaseComponent. + /// + /// Reference to the Component. + generic where T : BaseComponent + T EnsureComponent(); + /// + /// Removes a Component from the GameObject that this Script belongs to. + /// + /// + /// Type of the Component to remove. Must be derived from BaseComponent. + /// + generic where T : BaseComponent + void RemoveComponent(); + + /*-----------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Script to this GameObject. + /// + /// + /// Type of script to add. + /// This needs to be a default constructable Script. + /// + /// Reference to the script added + generic where T : ref class, Script + T AddScript(); + /// + /// Retrieves the first Script from this GameObject that matches the specified + /// type. + /// + /// + /// Type of script to get. + /// This needs to be a default constructable Script. + /// + /// Reference to the script added + generic where T : ref class, Script + T GetScript(); + /// + /// Retrieves the first Script from this GameObject's children that matches the + /// specified type. + /// + /// + /// Type of script to get. + /// This needs to be a default constructable Script. + /// + /// Reference to the script added + generic where T : ref class, Script + T GetScriptInChildren(); + /// + /// Retrieves a immutable list of scripts from the specified Entity that + /// matches the specified type. + ///
    + /// Note that this function allocates. It should be used sparingly. + ///
    + /// + /// Type of scripts to get. + /// This needs to be a default constructable Script. + /// + /// + /// Immutable list of references to scripts of the specified type. + /// + generic where T : ref class, Script + System::Collections::Generic::IEnumerable^ GetScripts(); + /// + /// Removes all Scripts of the specified type from this GameObject. + /// + /// + /// Type of script to remove. + /// This needs to be a default constructable Script. + /// + generic where T : ref class, Script + void RemoveScript(); + + internal: + /*-----------------------------------------------------------------------------*/ + /* "All-Time" Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Used to call onAttached(). This is called immediately when this script is + /// attached to a GameObject. + /// + void OnAttached(); + /// + /// Used to call onDetached(). This is called immediately when this script is + /// detached from a GameObject. + /// + void OnDetached(); + + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Used to call awake(). This should be called on the first frame that the + /// attached GameObject is active if they are a part of the scene. + /// + void Awake(); + /// + /// Used to call start(). This should be called on the first frame that the + /// attached GameObject is active but always after Awake(). + /// + void Start(); + /// + /// Used to call fixedUpdate(). This should be called in sync with Physics + /// update steps and thus in most cases will execute more than Update() will. + /// This will be called immediately before a Physics update step. + /// + void FixedUpdate(); + /// + /// Used to call update(). This should be called every frame before physics and + /// collision resolution. + /// + void Update(); + /// + /// Used to call lateUpdate(). This should be called every frame after physics + /// and collision resolution but before rendering. + /// + void LateUpdate(); + /// + /// Used to call onDestroy(). This should be called at the end of the frame + /// where the attached GameObject or this script is destroyed directly or + /// indirectly due to destruction of the owner. + /// + void OnDestroy(); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for Script to tie it to a specific GameObject. + /// Constructors of derived Scripts should call this Constructor. + /// + /// + /// GameObject that this Script will be tied to. + /// + Script(GameObject gameObj); + + /*-----------------------------------------------------------------------------*/ + /* Virtual "All-Time" Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Called immediately once this script is attached to a GameObject. + /// + virtual void onAttached(); + /// + /// Called immediately once this script is detached from a GameObject. + /// + virtual void onDetatched(); + + /*-----------------------------------------------------------------------------*/ + /* Virtual Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Called on the first frame that the attached GameObject is active if they are + /// a part of the scene. + /// + virtual void awake(); + /// + /// Called on the first frame that the attached GameObject is active but always + /// after Awake(). + /// + virtual void start(); + /// + /// Called every frame in sync with Physics update steps and thus in most cases + /// will execute more than update() will. This will be called immediately before + /// a Physics update step. + /// + virtual void fixedUpdate(); + /// + /// Called every frame before physics and collision resolution. + /// + virtual void update(); + /// + /// Called every frame after physics and collision resolution but before + /// rendering. + /// + virtual void lateUpdate(); + /// + /// Called just before the end of the frame where the attached GameObject or + /// this script is destroyed directly or indirectly due to destruction of the + /// owner. + /// + virtual void onDestroy(); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + GameObject owner; + }; + +} // namespace PlushieAPI diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx new file mode 100644 index 00000000..e9b0c732 --- /dev/null +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -0,0 +1,49 @@ +/************************************************************************************//*! +\file Convert.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the Convert managed static + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Convert.hxx" +// External Dependencies +#include "Engine/ECS_Base/System//SHEntityManager.h" +#include + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* ECS Conversions */ + /*---------------------------------------------------------------------------------*/ + SHEntity Convert::ToNative(Entity rawId) + { + return *SHEntityManager::GetEntityByID(rawId); + } + Entity Convert::ToCLI(SHEntity entity) + { + return static_cast(entity.GetEID()); + } + + /*---------------------------------------------------------------------------------*/ + /* String Conversions */ + /*---------------------------------------------------------------------------------*/ + std::string Convert::ToNative(System::String^ str) + { + return msclr::interop::marshal_as(str); + } + + System::String^ Convert::ToCLI(const std::string& str) + { + return msclr::interop::marshal_as(str); + } +} // namespace PlushieAPI diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx new file mode 100644 index 00000000..1281ebb4 --- /dev/null +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -0,0 +1,68 @@ +/************************************************************************************//*! +\file Convert.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the Convert static class and the + declaration of its functions. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Engine/ECS_Base/Entity/SHEntity.h" +// Project Includes +#include "Engine/Entity.hxx" + +namespace SHADE +{ + /// + /// Provides functions easy and consistent syntax for converting between custom + /// managed and native types that are aligned. + /// + class Convert + { + public: + /*-----------------------------------------------------------------------------*/ + /* Deleted Destructors (Static Class) */ + /*-----------------------------------------------------------------------------*/ + Convert() = delete; + + /*-----------------------------------------------------------------------------*/ + /* ECS Conversions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Converts from a managed Entity (UInt32) to a native Entity. + /// + /// Raw ID of an Entity. + /// Native representation of the specified Entity. + static SHEntity ToNative(Entity rawId); + /// + /// Converts from a native Entity to a managed Entity (UInt32). + /// + /// Native Entity to convert from. + /// Managed representation of the specified Entity. + static Entity ToCLI(SHEntity entity); + + /*-----------------------------------------------------------------------------*/ + /* String Conversions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Converts from a managed String to a native std::string. + /// + /// The managed String to convert from. + /// Native copy of a managed String. + static std::string ToNative(System::String^ str); + /// + /// Converts from a native std::Stringto a managed String. + /// + /// The native std::string to convert from. + /// Managed copy of a native std::string. + static System::String^ ToCLI(const std::string& str); + }; +} diff --git a/SHADE_Managed/src/Utility/Debug.cxx b/SHADE_Managed/src/Utility/Debug.cxx new file mode 100644 index 00000000..70392bf1 --- /dev/null +++ b/SHADE_Managed/src/Utility/Debug.cxx @@ -0,0 +1,112 @@ +/************************************************************************************//*! +\file Debug.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the Debug managed static + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Debug.hxx" +// Standard Libraries +#include +// External Dependencies +#include "Tools/SHLogger.h" +// Project Headers +#include "Convert.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Logging Functions */ + /*---------------------------------------------------------------------------------*/ + void Debug::Log(System::String^ str) + { + SHLOG_INFO(Convert::ToNative(str)); + } + + void Debug::Log(System::String^ str, Object^ owner) + { + Log(str, owner->GetType()->Name); + } + void Debug::Log(System::String^ str, System::String^ throwerName) + { + Log("[" + throwerName + "] " + str); + } + void Debug::Log(System::String^ str, const std::string& throwerName) + { + std::ostringstream oss; + oss << "[" << throwerName << "] " << Convert::ToNative(str); + SHLOG_INFO(oss.str()); + } + void Debug::LogWarning(System::String^ str) + { + SHLOG_WARNING(Convert::ToNative(str)); + } + void Debug::LogWarning(System::String^ str, Object^ thrower) + { + LogWarning(str, thrower->GetType()->Name); + } + void Debug::LogWarning(System::String^ str, System::String^ throwerName) + { + LogWarning("[" + throwerName + "] " + str); + } + + void Debug::LogWarning(System::String^ str, const std::string& throwerName) + { + std::ostringstream oss; + oss << "[" << throwerName << "] " << Convert::ToNative(str); + SHLOG_WARNING(oss.str()); + } + void Debug::LogError(System::String^ str) + { + SHLOG_ERROR(Convert::ToNative(str)); + } + void Debug::LogError(System::String^ str, Object^ thrower) + { + LogError(str, thrower->GetType()->Name); + } + void Debug::LogErrorNative(System::String^ str, const std::string& throwerName) + { + std::ostringstream oss; + oss << "[" << throwerName << "] -> " << Convert::ToNative(str); + SHLOG_ERROR(oss.str()); + } + void Debug::LogError(System::String^ str, System::String^ throwerName) + { + LogError("[" + throwerName + "] " + str); + } + void Debug::LogException(System::Exception^ exception) + { + LogError("Unhandled exception: " + exception->ToString(), exception->Source); + } + + void Debug::LogException(System::Exception^ exception, Object^ thrower) + { + LogError("Unhandled exception: " + exception->ToString(), thrower->GetType()->Name); + } + void Debug::LogException(const std::exception& exception, Object^ thrower) + { + LogExceptionNative(exception, Convert::ToNative(thrower->GetType()->Name)); + } + void Debug::LogExceptionNative(System::Exception^ exception, const std::string& throwerName) + { + std::ostringstream oss; + oss << "[" << throwerName << "] Unhandled exception: " << Convert::ToNative(exception->ToString()); + SHLOG_ERROR(oss.str()); + } + void Debug::LogExceptionNative(const std::exception& exception, const std::string& throwerName) + { + std::ostringstream oss; + oss << "[" << throwerName << "] Unhandled exception: " << exception.what(); + SHLOG_ERROR(oss.str()); + } +} diff --git a/SHADE_Managed/src/Utility/Debug.hxx b/SHADE_Managed/src/Utility/Debug.hxx new file mode 100644 index 00000000..e6176792 --- /dev/null +++ b/SHADE_Managed/src/Utility/Debug.hxx @@ -0,0 +1,240 @@ +/************************************************************************************//*! +\file Debug.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 30, 2021 +\brief Contains the definition of the Debug static class and the declaration of + its functions. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Standard Library +#include +#include + +/*-------------------------------------------------------------------------------------*/ +/* Macro Functions */ +/*-------------------------------------------------------------------------------------*/ +/// +/// Macro expansion that is used together with SAFE_NATIVE_CALL_END or +/// SAFE_NATIVE_CALL_END_N to wrap the body of a function with a try and catch that +/// catches native and managed exceptions. This is needed to prevent crashes when calling +/// managed code from native code. +/// + +#define SAFE_NATIVE_CALL_BEGIN try { +/// +/// Macro expansion that is used together with SAFE_NATIVE_CALL_BEGIN or to wrap the body +/// of a function with a try and catch that catches native and managed exceptions. This +/// is needed to prevent crashes when calling managed code from native code. +///
    +/// Use this instead of SAFE_NATIVE_CALL_END_N if passing in managed types as the owner. +///
    +/// +/// The managed object that owns the function that this macro encapsulates. +/// +#define SAFE_NATIVE_CALL_END(OWNER) \ +} \ +catch (System::Exception^ e) \ +{ \ + Debug::LogException(e); \ +} \ +catch (const std::exception& e) \ +{ \ + Debug::LogException(e, OWNER); \ +} \ +catch (...) \ +{ \ + Debug::LogError("Unsupported native exception.", OWNER); \ +} \ +/// +/// Macro expansion that is used together with SAFE_NATIVE_CALL_BEGIN or to wrap the body +/// of a function with a try and catch that catches native and managed exceptions. This +/// is needed to prevent crashes when calling managed code from native code. +///
    +/// Use this instead of SAFE_NATIVE_CALL_END if passing in a native string that specifies +/// the owner. +///
    +/// +/// The managed object that owns the function that this macro encapsulates. +/// + +#define SAFE_NATIVE_CALL_END_N(OWNER) \ +} \ +catch (System::Exception^ e) \ +{ \ + Debug::LogExceptionNative(e, OWNER); \ +} \ +catch (const std::exception& e) \ +{ \ + Debug::LogExceptionNative(e, OWNER); \ +} \ +catch (...) \ +{ \ + Debug::LogErrorNative("Unsupported native exception.", OWNER); \ +} \ + +/*-------------------------------------------------------------------------------------*/ +/* Type Definitions */ +/*-------------------------------------------------------------------------------------*/ +namespace SHADE +{ + /// + /// Static class that contains the functions for working with time. + /// + public ref class Debug abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Logging Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Logs a message to the output. + /// + /// The string to output. + static void Log(System::String^ str); + /// + /// Logs a message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Object that sent the message to label the message. + /// The name of the object will be used. + /// + static void Log(System::String^ str, Object^ owner); + /// + /// Logs a message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that sent the message to label the message. + /// The name of the object will be used. + /// + static void Log(System::String^ str, System::String^ throwerName); + /// + /// Logs a message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that sent the message to label the message. + /// The name of the object will be used. + /// + static void Log(System::String^ str, const std::string& throwerName); + /// + /// Logs a warning message to the output. + /// + /// The string to output. + static void LogWarning(System::String^ str); + /// + /// Logs a warning message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Object that threw the warning to label the warning message. + /// The name of the object will be used. + /// + static void LogWarning(System::String^ str, Object^ thrower); + /// + /// Logs a warning message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that threw the warning to label the warning message. + /// The name of the object will be used. + /// + static void LogWarning(System::String^ str, System::String^ throwerName); + /// + /// Logs a warning message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that threw the warning to label the warning message. + /// The name of the object will be used. + /// + static void LogWarning(System::String^ str, const std::string& throwerName); + /// + /// Logs a error message to the output. + /// + /// The string to output. + static void LogError(System::String^ str); + /// + /// Logs a error message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Object that threw the error to label the error message. + /// The name of the object will be used. + /// + static void LogError(System::String^ str, Object^ thrower); + /// + /// Logs a error message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that threw the error to label the error message. + /// The name of the object will be used. + /// + static void LogErrorNative(System::String^ str, const std::string& throwerName); + /// + /// Logs a error message to the output with a label such that it looks like this: + /// "[Label] Message" + /// + /// The string to output. + /// + /// Name of the object that threw the error to label the error message. + /// The name of the object will be used. + /// + static void LogError(System::String^ str, System::String^ throwerName); + /// + /// Logs an exception that is formatted nicely to the output. + /// + /// Exception to log. + static void LogException(System::Exception^ exception); + /// + /// Logs an exception that is formatted nicely to the output. + /// + /// Exception to log. + /// + /// Object that threw the exception to label the exception message. + /// The name of the object will be used. + /// + static void LogException(System::Exception^ exception, Object^ thrower); + /// + /// Logs a native exception that is formatted nicely to the output. + /// Equivalent to calling + /// LogException(exception, Convert::ToNative(thrower->GetType()->Name)); + /// + /// Native exception to log. + /// + /// Object that threw the exception to label the exception message. + /// The name of the object will be used. + /// + static void LogException(const std::exception& exception, Object^ thrower); + /// + /// Logs an exception that is formatted nicely to the output. + /// + /// Name of the one responsible for the exception. + /// Exception to log. + static void LogExceptionNative(System::Exception^ exception, const std::string& throwerName); + /// + /// Logs a native exception that is formatted nicely to the output. + /// + /// Native exception to log. + /// Name of the one responsible for the exception. + static void LogExceptionNative(const std::exception& exception, const std::string& throwerName); + }; +} diff --git a/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx similarity index 100% rename from SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.cxx rename to SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx diff --git a/SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx similarity index 100% rename from SHADE_Managed/src/Engine/DisposableAssemblyLoadContext.hxx rename to SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx From 5a6ff60fe1ccf09030c46fdadac1388ddd8ef94b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 00:18:33 +0800 Subject: [PATCH 025/793] Added ScriptStore --- SHADE.sln | 5 + SHADE_Managed/SHADE_Managed.vcxproj.filters | 6 + SHADE_Managed/src/Scripts/ScriptStore.cxx | 673 ++++++++++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.hxx | 305 +++++++++ 4 files changed, 989 insertions(+) create mode 100644 SHADE_Managed/src/Scripts/ScriptStore.cxx create mode 100644 SHADE_Managed/src/Scripts/ScriptStore.hxx diff --git a/SHADE.sln b/SHADE.sln index 67bacd3b..fadd2bea 100644 --- a/SHADE.sln +++ b/SHADE.sln @@ -30,6 +30,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Engine", "SHADE_Engin EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Managed", "SHADE_Managed\SHADE_Managed.vcxproj", "{16DB1400-829B-9036-4BD6-D9B3B755D512}" + ProjectSection(ProjectDependencies) = postProject + {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {88F1A057-74BE-FB62-9DD7-E90A890331F1} + {C0FF640D-2C14-8DBE-F595-301E616989EF} = {C0FF640D-2C14-8DBE-F595-301E616989EF} + {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters index c83321cd..ae83954d 100644 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -34,6 +34,9 @@ Scripts + + Scripts + Utility @@ -64,6 +67,9 @@ Scripts + + Scripts + Utility diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx new file mode 100644 index 00000000..86329f29 --- /dev/null +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -0,0 +1,673 @@ +/************************************************************************************//*! +\file ScriptStore.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the ScriptStore managed + static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "ScriptStore.hxx" +// Standard Libraries +#include +// Project Headers +#include "Utility/Debug.hxx" +#include "Utility/Convert.hxx" +#include "Tools/SHLogger.h" +#include "Script.hxx" +#include "Engine/Entity.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Scripts Manipulation Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T ScriptStore::AddScript(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + throw gcnew System::ArgumentException("Invalid Entity provided to add a Script to."); + + System::Collections::Generic::List ^ entityScriptList; + + // Check if storage for scripts of this entity exists + if (!scripts.ContainsKey(entity)) + { + // Create a new list for this set of scripts + entityScriptList = gcnew System::Collections::Generic::List(); + scripts.Add(entity, entityScriptList); + } + else + { + entityScriptList = scripts[entity]; + } + + // Create the script and add it in + array^ params = gcnew array{GameObject(entity)}; + Script^ script = safe_cast(System::Activator::CreateInstance(T::typeid, params)); + entityScriptList->Add(script); + awakeList.Add(script); + startList.Add(script); + script->OnAttached(); + + return safe_cast(script); + } + + bool ScriptStore::AddScriptViaName(Entity entity, System::String^ scriptName) + { + SAFE_NATIVE_CALL_BEGIN + Script^ script; + return AddScriptViaNameWithRef(entity, scriptName, script); + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + return false; + } + + bool ScriptStore::AddScriptViaNameWithRef(Entity entity, System::String^ scriptName, Script^% createdScript) + { + // Check if we are set up to get scripts + if (addScriptMethod == nullptr) + { + Debug::LogError("[ScriptStore] Native AddScript() was not loaded. Unable to add scripts."); + return false; + } + + // Get the script if it exists + System::Type^ scriptType = getScriptType(scriptName); + if (scriptType == nullptr) + { + std::ostringstream oss; + oss << "[ScriptStore] No Script named " + << Convert::ToNative(scriptName) + << " found!"; + SHLOG_ERROR(oss.str()); + return false; + } + + // Otherwise, add the script + System::Reflection::MethodInfo^ method = addScriptMethod->MakeGenericMethod(scriptType); + try + { + array^ params = gcnew array{entity}; + createdScript = safe_cast(method->Invoke(nullptr, params)); + } + catch (System::Exception^ e) + { + std::ostringstream oss; + oss << "[ScriptStore] Failed to add Script named \"" << Convert::ToNative(scriptName) + << "\" to Entity #" << entity << "! (" << Convert::ToNative(e->GetType()->Name) << ")"; + SHLOG_ERROR(oss.str()); + return false; + } + return true; + } + + generic + T ScriptStore::GetScript(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); + } + + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + { + return T(); + } + + // Search for and obtain + for each (Script^ script in scripts[entity]) + { + try + { + T actualScript = safe_cast(script); + return actualScript; + } + catch (System::InvalidCastException^) + { + continue; + } + } + + return T(); + } + + generic + T ScriptStore::GetScriptInChildren(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); + } + + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + { + return T(); + } + + // Get Transform component and get the children list + throw gcnew System::NotImplementedException; + //Pls::Transform* tf = Pls::ECS::GetComponent(Convert::ToNative(entity)); + //if (tf == nullptr) + // return T(); + + //// Search direct children first + //for (const auto& child : tf->GetChildren()) + //{ + // T script = GetScript(Convert::ToCLI(child)); + // if (script != nullptr) + // return script; + //} + + //// Search their children + //for (const auto& child : tf->GetChildren()) + //{ + // T script = GetScriptInChildren(Convert::ToCLI(child)); + // if (script != nullptr) + // return script; + //} + + // None here + return T(); + } + + generic + System::Collections::Generic::IEnumerable^ ScriptStore::GetScripts(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); + } + + // Create a list to store entries + System::Collections::Generic::List^ foundScripts = gcnew System::Collections::Generic::List(); + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + { + return foundScripts; + } + + // Search for and obtain + for each (Script^ script in scripts[entity]) + { + try + { + T actualScript = safe_cast(script); + foundScripts->Add(actualScript); + } + catch (System::InvalidCastException^) + { + continue; + } + } + + return foundScripts; + } + System::Collections::Generic::IEnumerable^ ScriptStore::GetAllScripts(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + return nullptr; + + // Check if entity exists in the script storage + if (scripts.ContainsKey(entity)) + { + return scripts[entity]; + } + return nullptr; + } + generic + void ScriptStore::RemoveScript(Entity entity) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + throw gcnew System::ArgumentException("Invalid Entity provided to remove a Script from."); + + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + { + Debug::LogError("[ScriptStore] Attempted to remove a Script that does not belong to the specified Entity!"); + return; + } + + // Search for and obtain + for each (Script^ script in scripts[entity]) + { + try + { + safe_cast(script); + removeScript(script); + } + catch (System::InvalidCastException^) + { + continue; + } + } + } + bool ScriptStore::RemoveScript(Entity entity, Script^ script) + { + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + Debug::LogError("[ScriptStore] Attempted to remove a Script from an invalid Entity!"); + return false; + } + + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + { + Debug::LogError("[ScriptStore] Attempted to remove a Script that does not belong to the specified Entity!"); + return false; + } + + // Check if the script exists to begin with + if (!scripts[entity]->Contains(script)) + { + Debug::LogError("[ScriptStore] Attempted to remove a Script that does not belong to the specified Entity!"); + return false; + } + + // Script found, queue it for deletion + removeScript(script); + return true; + } + void ScriptStore::RemoveAllScripts(Entity entity) + { + SAFE_NATIVE_CALL_BEGIN + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); + return; + } + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + return; + + // Search for and clear + System::Collections::Generic::List^ scriptList = scripts[entity]; + for each (Script^ script in scriptList) + { + removeScript(script); + } + scriptList->Clear(); + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + void ScriptStore::RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy) + { + SAFE_NATIVE_CALL_BEGIN + // Check if entity exists and is a valid GameObject + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + { + Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); + return; + } + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + return; + + // Clear all + System::Collections::Generic::List^ scriptList = scripts[entity]; + for each (Script ^ script in scriptList) + { + // Call OnDestroy only if indicated and also in play mode + if (callOnDestroy) + { + script->OnDestroy(); + } + script->OnDetached(); + + // Remove scripts from awakening if they were not woken up to begin with + awakeList.Remove(script); + startList.Remove(script); + } + scriptList->Clear(); + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void ScriptStore::Init() + { + // Create an enumerable list of script types + refreshScriptTypeList(); + // Get stored methods for interop variants of functions + getGenericMethods(); + } + void ScriptStore::FrameSetUp() + { + SAFE_NATIVE_CALL_BEGIN + // Clear the awake queue + for each (Script^ script in awakeList) + { + script->Awake(); + } + awakeList.Clear(); + + // Clear the start queue + for each (Script^ script in startList) + { + if (script->Owner.IsActiveInHierarchy) + { + script->Start(); + } + else + { + inactiveStartList.Add(script); + } + } + startList.Clear(); + startList.AddRange(%inactiveStartList); + inactiveStartList.Clear(); + + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + void ScriptStore::FrameCleanUp() + { + SAFE_NATIVE_CALL_BEGIN + // Clear the queue + while (disposalQueue.Count > 0) + { + Script^ script = disposalQueue.Dequeue(); + /*if (Application::IsPlaying) + { + script->OnDestroy(); + + }*/ + auto entity = script->Owner.GetEntity(); + auto scriptList = scripts[script->Owner.GetEntity()]; + scriptList->Remove(script); + if (scriptList->Count <= 0) + { + scripts.Remove(entity); + } + } + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + void ScriptStore::Exit() + { + SAFE_NATIVE_CALL_BEGIN + // Run the deinit all scripts if needed + //if (Application::IsPlaying) + { + Debug::Log("Running OnDestroy() for scripts."); + for each (System::Collections::Generic::KeyValuePair entity in scripts) + { + for each (Script^ script in entity.Value) + { + script->OnDestroy(); + } + } + } + + // Clear Script Storage + scripts.Clear(); + awakeList.Clear(); + startList.Clear(); + disposalQueue.Clear(); + scriptTypeList = nullptr; + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + + /*---------------------------------------------------------------------------------*/ + /* Script Information Functions */ + /*---------------------------------------------------------------------------------*/ + System::Collections::Generic::IEnumerable^ ScriptStore::GetAvailableScriptList() + { + return scriptTypeList; + } + + /*---------------------------------------------------------------------------------*/ + /* Script Execution Functions */ + /*---------------------------------------------------------------------------------*/ + void ScriptStore::ExecuteFixedUpdate() + { + SAFE_NATIVE_CALL_BEGIN + for each (System::Collections::Generic::KeyValuePair entity in scripts) + { + // Check active state + if (!isEntityActive(entity.Key)) + continue; + + // Update each script + for each (Script^ script in entity.Value) + { + script->FixedUpdate(); + } + } + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + void ScriptStore::ExecuteUpdate() + { + SAFE_NATIVE_CALL_BEGIN + for each (System::Collections::Generic::KeyValuePair entity in scripts) + { + // Check active state + if (!isEntityActive(entity.Key)) + continue; + + // Update each script + for each (Script^ script in entity.Value) + { + script->Update(); + } + } + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + void ScriptStore::ExecuteLateUpdate() + { + SAFE_NATIVE_CALL_BEGIN + for each (System::Collections::Generic::KeyValuePair entity in scripts) + { + // Check active state + if (!isEntityActive(entity.Key)) + continue; + + // Update each script + for each (Script^ script in entity.Value) + { + script->LateUpdate(); + } + } + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + } + bool ScriptStore::SerialiseScripts(Entity entity, System::Text::StringBuilder^ buffer, int bufferSize) + { + SAFE_NATIVE_CALL_BEGIN + // Create a buffer that we can work with temporarily + System::Text::StringBuilder^ jsonString = gcnew System::Text::StringBuilder(); + + // Check if entity exists and is a valid GameObject, otherwise nothing + if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + return true; + + + // Check if entity exists in the script storage + if (!scripts.ContainsKey(entity)) + return true; + + // Serialise each script + System::Collections::Generic::List^ scriptList = scripts[entity]; + for (int i = 0; i < scriptList->Count; ++i) + { + throw gcnew System::NotFiniteNumberException; + //jsonString->Append(ReflectionUtilities::Serialise(scriptList[i])); + + // Only add separator if is not last script + if (i != scriptList->Count - 1) + { + jsonString->Append(",\r\n"); + } + } + + // Check if the size is too big + if (jsonString->Length > bufferSize) + return false; + + // Otherwise we copy it over + buffer->Clear(); + buffer->Append(jsonString->ToString()); + return true; + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + return false; + } + + bool ScriptStore::DeserialiseScript(Entity entity, System::String^ json) + { + SAFE_NATIVE_CALL_BEGIN + // Check if entity exists and is a valid GameObject, otherwise nothing + if (!EntityUtils::IsValid(entity)/* || !GameObjectLibrary::Contains(entity)*/) + return false; + + // Get the name of the script + const int FIRST_QUOTE = json->IndexOf('\"'); + const int FIRST_COLON = json->IndexOf(':'); + if (FIRST_QUOTE < 0 || FIRST_COLON < 0) // No script name, it's invalid + return false; + const int SCRIPT_NAME_START = FIRST_QUOTE + 1; + const int SCRIPT_NAME_END = FIRST_COLON - 1; + System::String^ typeName = json->Substring(SCRIPT_NAME_START, SCRIPT_NAME_END - SCRIPT_NAME_START); + + // Create the script + Script^ script; + if (AddScriptViaNameWithRef(entity, typeName, script)) + { + // Copy the data in + throw gcnew System::NotImplementedException; + //ReflectionUtilities::Deserialise(json, script); + return true; + } + + SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + return false; + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void ScriptStore::removeScript(Script^ script) + { + // Prepare for disposal + disposalQueue.Enqueue(script); + + // Also remove it fromm awake and start queues if they were created but not initialised + awakeList.Remove(script); + startList.Remove(script); + script->OnDetached(); + } + + namespace + { + /* Select Many */ + ref struct Pair + { + System::Reflection::Assembly^ assembly; + System::Type^ type; + }; + + System::Collections::Generic::IEnumerable^ selectorFunc(System::Reflection::Assembly^ assembly) + { + return assembly->GetExportedTypes(); + } + Pair^ resultSelectorFunc(System::Reflection::Assembly^ assembly, System::Type^ type) + { + Pair^ p = gcnew Pair(); + p->assembly = assembly; + p->type = type; + return p; + } + + /* Where */ + bool predicateFunc(Pair^ pair) + { + return pair->type->IsSubclassOf(PlushieScript::typeid) && !pair->type->IsAbstract; + } + + /* Select */ + System::Type^ selectorFunc(Pair^ pair) + { + return pair->type; + } + } + + void ScriptStore::refreshScriptTypeList() + { + using namespace System; + using namespace System::Reflection; + using namespace System::Linq; + using namespace System::Collections::Generic; + + /* Select Many: Types in Loaded Assemblies */ + IEnumerable^ assemblies = AppDomain::CurrentDomain->GetAssemblies(); + Func^>^ collectionSelector = gcnew Func^>(selectorFunc); + Func^ resultSelector = gcnew Func(resultSelectorFunc); + IEnumerable^ selectManyResult = Enumerable::SelectMany(assemblies, collectionSelector, resultSelector); + + /* Where: Are concrete PlushieScripts */ + Func^ predicate = gcnew Func(predicateFunc); + IEnumerable^ whereResult = Enumerable::Where(selectManyResult, predicate); + + /* Select: Select them all */ + Func^ selector = gcnew Func(selectorFunc); + scriptTypeList = Enumerable::Select(whereResult, selector); + + // Log + std::ostringstream oss; + oss << "[ScriptStore] Successfully retrieved references to " << Enumerable::Count(scriptTypeList) + << " Script(s) from currently loaded assemblies."; + SHLOG_INFO(oss.str()); + } + + void ScriptStore::getGenericMethods() + { + addScriptMethod = ScriptStore::typeid->GetMethod("AddScript"); + if (addScriptMethod == nullptr) + { + SHLOG_ERROR("[ScriptStore] Failed to get MethodInfo of \"AddScript()\". Adding of scripts from native code will fail."); + } + } + + System::Type^ ScriptStore::getScriptType(System::String^ scriptName) + { + // Remove any whitespaces just in case + scriptName = scriptName->Trim(); + + // Look for the correct script + for each (System::Type^ type in scriptTypeList) + { + if (type->FullName == scriptName || type->Name == scriptName) + { + return type; + } + } + + return nullptr; + } + + bool ScriptStore::isEntityActive(Entity entity) + { + // Check active state + return Convert::ToNative(entity).isActive; + } +} // namespace SHADE diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx new file mode 100644 index 00000000..91c98ce9 --- /dev/null +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -0,0 +1,305 @@ +/************************************************************************************//*! +\file ScriptStore.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definitions of the GameObject managed class which define an + abstraction for working with Entities in managed code. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Engine/Entity.hxx" +#include "Script.hxx" + +namespace SHADE +{ + /// + /// Responsible for managing all scripts attached to Entities as well as executing + /// all lifecycle functions of scripts. + /// + public ref class ScriptStore abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Scripts Manipulation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Script to a specified Entity. + /// + /// + /// Type of script to add. + /// This needs to be a default constructable PlushieScript. + /// + /// The entity to add a script to. + /// Reference to the script added. + /// + /// If the specified Entity is invalid. + /// + generic where T : ref class, Script + static T AddScript(Entity entity); + /// + /// Adds a Script to a specified Entity. + ///
    + /// This function is meant for consumption from native code. If you are writing + /// in C# or C++/CLI, use AddScript<T>() instead as it is faster. + ///
    + /// The entity to add a script to. + /// The entity to add a script to. + /// + /// True if successfully added. False otherwise with the error logged to the + /// console. + /// + static bool AddScriptViaName(Entity entity, System::String^ scriptName); + /// + /// Adds a Script to a specified Entity. + ///
    + /// This function is meant for consumption from native code or for serialisation + /// purposes. If you are writing in C# or C++/CLI and not doing serialisation, + /// use AddScript<T>() instead as it is faster. + ///
    + /// The entity to add a script to. + /// The entity to add a script to. + /// + /// Out parameter handle to the Script that was created. + /// + /// + /// True if successfully added. False otherwise with the error logged to the + /// console. + /// + static bool AddScriptViaNameWithRef(Entity entity, System::String^ scriptName, [Out] Script^% createdScript); + /// + /// Retrieves the first Script from the specified Entity that matches the + /// specified type. + /// + /// + /// Type of script to get. + /// This needs to be a default constructable Script. + /// + /// + /// The entity which the script to retrieve is attached. + /// + /// + /// Reference to the script. This can be null if no script of the specified + /// type is attached. + /// + /// + /// If the specified Entity is invalid. + /// + generic where T : ref class, Script + static T GetScript(Entity entity); + /// + /// Retrieves the first Script from the specified Entity's children that matches + /// the specified type. + /// + /// + /// Type of script to get. + /// This needs to be a default constructable Script. + /// + /// + /// The entity which the script to retrieve is attached. + /// + /// + /// Reference to the script. This can be null if no script of the specified + /// type is attached. + /// + /// + /// If the specified Entity is invalid. + /// + generic where T : ref class, Script + static T GetScriptInChildren(Entity entity); + /// + /// Retrieves a immutable list of scripts from the specified Entity that + /// matches the specified type. + ///
    + /// Note that this function allocates. It should be used sparingly. + ///
    + /// + /// Type of scripts to get. + /// This needs to be a default constructable Script. + /// + /// + /// The entity which the scripts to retrieve are attached. + /// + /// + /// Immutable list of references to scripts of the specified type. + /// + generic where T : ref class, Script + static System::Collections::Generic::IEnumerable ^ GetScripts(Entity entity); + /// + /// Retrieves an immutable list of all scripts attached to a specified Entity. + /// + /// + /// The entity which the scripts to retrieve are attached. + /// + /// + /// Immutable list of references to scripts attached to the specified Entity. + /// This can also be null if there are no scripts at all or an invalid Entity + /// was specified. + /// + static System::Collections::Generic::IEnumerable^ GetAllScripts(Entity entity); + /// + /// Removes all Scripts of the specified type from the specified Entity. + /// + /// + /// Type of script to remove. + /// This needs to be a default constructable Script. + /// + /// The entity to remove the script from. + /// + /// If the specified Entity is invalid. + /// + generic where T : ref class, Script + static void RemoveScript(Entity entity); + /// + /// Removes a specific script from the + /// + /// The entity to remove the script from. + /// The script to remove. + /// True if successfully removed. False otherwise. + static bool RemoveScript(Entity entity, Script^ script); + /// + /// Removes all Scripts attached to the specified Entity. Does not do anything + /// if the specified Entity is invalid or does not have any Scripts + /// attached. + /// + /// The entity to remove the scripts from. + static void RemoveAllScripts(Entity entity); + /// + /// Removes all Scripts attached to the specified Entity. Unlike + /// RemoveAllScripts(), this removes all the scripts immediately. + /// Does not do anything if the specified Entity is invalid or does not have any + /// Scripts attached. + /// + /// The entity to remove the scripts from. + /// + /// Whether or not to call OnDestroy on the scripts.This is ignored if not in + /// play mode. + /// + static void RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy); + + internal: + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Initializes the ScriptStore to allocate and pre-populate reflection data. + /// + static void Init(); + /// + /// Sets up scripts that were marked for initialization. This calls the Awake() + /// and Start() for Scripts that have yet to have done so. + /// + static void FrameSetUp(); + /// + /// Cleans up scripts that were marked for deletion. This calls the OnDestroy() + /// for these Scripts. + /// + static void FrameCleanUp(); + /// + /// Cleans up data stored in the ScriptStore to free up memory for garbage + /// collection. + /// + static void Exit(); + + /*-----------------------------------------------------------------------------*/ + /* Script Information Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves a immutable list of available scripts that can be added. + /// + /// Immutable list of available scripts that can be added. + static System::Collections::Generic::IEnumerable^ GetAvailableScriptList(); + + /*-----------------------------------------------------------------------------*/ + /* Script Execution Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Executes FixedUpdate() for all scripts. + /// + static void ExecuteFixedUpdate(); + /// + /// Executes Update() for all scripts. + /// + static void ExecuteUpdate(); + /// + /// Executes LateUpdate() for all scripts. + /// + static void ExecuteLateUpdate(); + /// + /// Executes OnTrigger functions for all scripts. + /// + static void ExecuteOnTrigger(); + + /*-----------------------------------------------------------------------------*/ + /* Serialisation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Generates a JSON string that represents the set of Scripts attached + /// to the specified Entity. + ///

    + /// This function should only be called from native unmanaged code. + ///
    + /// The Entity to Serialise. + /// + /// StringBuilder handle that maps to a native char array that will contain the + /// serialised string. + /// + /// + /// The size of the char array. + /// + /// + /// True if serialisation is successful. False if the buffer is too small for + /// the serialised output. + /// + static bool SerialiseScripts(Entity entity, System::Text::StringBuilder^ buffer, int bufferSize); + /// + /// Processes a JSON string that represents a single Script and attaches + /// it onto the specified Entity. + ///

    + /// This function should only be called from native unmanaged code. + ///
    + /// + /// The Entity to attach the deserialised Scripts to. + /// + /// + /// JSON string that describes the Script to serialise. + /// + /// + static bool DeserialiseScript(Entity entity, System::String^ json); + + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definition */ + /*-----------------------------------------------------------------------------*/ + using ScriptList = System::Collections::Generic::List; + using ScriptDictionary = System::Collections::Generic::Dictionary; + using ScriptQueue = System::Collections::Generic::Queue; + + /*-----------------------------------------------------------------------------*/ + /* Static Data Members */ + /*-----------------------------------------------------------------------------*/ + static ScriptDictionary scripts; + static ScriptList awakeList; + static ScriptList startList; + static ScriptList inactiveStartList; + static ScriptQueue disposalQueue; + static System::Collections::Generic::IEnumerable^ scriptTypeList; + static System::Reflection::MethodInfo^ addScriptMethod; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void removeScript(Script^ script); + static void refreshScriptTypeList(); + static void getGenericMethods(); + static System::Type^ getScriptType(System::String^ scriptName); + static bool isEntityActive(Entity entity); + }; +} // namespace PlushieAPI \ No newline at end of file From ccdb1d0e19b8aa7c52fe7f2f40c5647ab45ef23e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 00:18:54 +0800 Subject: [PATCH 026/793] Added shlwapi.lib linker input for SHADE_Engine --- SHADE_Engine/SHADE_Engine.vcxproj | 4 ++-- SHADE_Engine/premake5.lua | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 4d6a75e9..2613f1dc 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -71,7 +71,7 @@ Windows true - vulkan-1.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) + vulkan-1.lib;shlwapi.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) bin\Debug_x86_64\SHADE_Engine\SHADE_Engine.lib @@ -99,7 +99,7 @@ Windows true true - vulkan-1.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) + vulkan-1.lib;shlwapi.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) bin\Release_x86_64\SHADE_Engine\SHADE_Engine.lib diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index ac128ac5..83c3821b 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -60,6 +60,7 @@ project "SHADE_Engine" "imgui", "spdlog", "vulkan-1.lib", + "shlwapi.lib" } defines From 8f7d8cd8bc29726570b4332fdcafc7e54fc2dd57 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 13 Sep 2022 09:13:39 +0800 Subject: [PATCH 027/793] Added vertex attributes --- SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp | 9 +++++++++ SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h | 2 ++ SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp | 5 ++++- .../src/Graphics/VertexDescriptors/SHVertexAttribute.h | 5 ++++- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp index 29a8e703..f00a2072 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -305,7 +305,16 @@ namespace SHADE void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io) noexcept { + SHVertexInputState vInputState{}; + vInputState.AddBinding(false, true, + { + SHVertexAttribute(SHAttribFormat::FLOAT_2D), + SHVertexAttribute(SHAttribFormat::FLOAT_2D), + SHVertexAttribute(SHAttribFormat::UINT32_1D), + } + ); + //Handle newPipeline = device->CreatePipeline() } } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h index fdfa4160..387d173d 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -35,11 +35,13 @@ namespace SHADE struct SHBreachInstance : public SHImGuiWindow { Handle pipeline; + Handle renderpass; std::chrono::time_point lastFrameTime; Handle fontsTexture; std::vector fontsMipOffset; public: void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; + void InitializeRenderpass (void) noexcept; void InitializePipeline(ImGuiIO& io) noexcept; }; public: diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp index 8179444f..6094958e 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp @@ -117,7 +117,7 @@ namespace SHADE dirty = isDirty; } - std::tuple SHVertexInputState::GetInfoFromAttribFormat(SHAttribFormat attribFormat) const noexcept + std::tuple SHVertexInputState::GetInfoFromAttribFormat(SHAttribFormat attribFormat) const noexcept { switch (attribFormat) { @@ -138,6 +138,9 @@ namespace SHADE case SHAttribFormat::MAT_4D: return std::make_tuple(4, 16, vk::Format::eR32G32B32A32Sfloat); break; + + case SHAttribFormat::UINT32_1D: + return std::make_tuple(1, 4, vk::Format::eR32Uint); } return std::make_tuple(0, 0, vk::Format::eR32Sfloat); } diff --git a/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h b/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h index fd8ee3d1..b216f5f4 100644 --- a/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h +++ b/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h @@ -18,7 +18,10 @@ namespace SHADE // that a mat2 can be interpreted as (x, y, x, y), (o, o, o, o) instead of (x, y, o, o), (o, o, o, o)? MAT_2D, MAT_3D, - MAT_4D + MAT_4D, + + // integer formats + UINT32_1D, }; struct SHVertexAttribute From 4ed417cbea3b7762467a26df1c8e3f06f4e5d85d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 11:43:49 +0800 Subject: [PATCH 028/793] Added EngineInterface --- .../src/Scripting/SHDotNetRuntime.cpp | 2 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 8 +- SHADE_Engine/src/Scripting/SHScriptEngine.h | 4 +- SHADE_Managed/SHADE_Managed.vcxproj.filters | 7 + SHADE_Managed/src/AssemblyInfo.cxx | 39 +++++ SHADE_Managed/src/Engine/EngineInterface.cxx | 138 ++++++++++++++++++ SHADE_Managed/src/Engine/EngineInterface.hxx | 90 ++++++++++++ SHADE_Managed/src/Utility/Debug.cxx | 12 ++ SHADE_Managed/src/Utility/Debug.hxx | 15 ++ 9 files changed, 308 insertions(+), 7 deletions(-) create mode 100644 SHADE_Managed/src/AssemblyInfo.cxx create mode 100644 SHADE_Managed/src/Engine/EngineInterface.cxx create mode 100644 SHADE_Managed/src/Engine/EngineInterface.hxx diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp index 2d0cec1e..6226949e 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp @@ -115,7 +115,7 @@ namespace SHADE ( runtimePath.c_str(), // AppDomain base path "SHADEHost", // AppDomain friendly name - propertyKeys.size(), // Property count + static_cast(propertyKeys.size()), // Property count propertyKeys.data(), // Property names propertyValues.data(), // Property values &hostHandle, // Host handle diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index ac8ad84c..5f816066 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -244,10 +244,10 @@ namespace SHADE true\n\ \n\ \n\ - \n\ - \n\ - \n\ - \n\ + \n\ + \n\ + \n\ + \n\ \n\ \n\ \n\ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 85e3ac3f..bd9fb079 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -183,8 +183,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constants */ /*-----------------------------------------------------------------------------*/ - static constexpr std::string_view DEFAULT_CSHARP_LIB_NAME = "SHADEAPI"; - static constexpr std::string_view MANAGED_SCRIPT_LIB_NAME = "SHADEManaged"; + static constexpr std::string_view DEFAULT_CSHARP_LIB_NAME = "SHADE_Managed"; + static constexpr std::string_view MANAGED_SCRIPT_LIB_NAME = "SHADE_Scripting"; static const std::string DEFAULT_CSHARP_NAMESPACE; /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters index ae83954d..776142d3 100644 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -15,6 +15,9 @@ + + Engine + Engine @@ -48,6 +51,10 @@
    + + + Engine + Engine diff --git a/SHADE_Managed/src/AssemblyInfo.cxx b/SHADE_Managed/src/AssemblyInfo.cxx new file mode 100644 index 00000000..234bda73 --- /dev/null +++ b/SHADE_Managed/src/AssemblyInfo.cxx @@ -0,0 +1,39 @@ +/************************************************************************************//*! +\file AssemblyInfo.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 24, 2021 +\brief Defines the properties of this managed .NET Assembly. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +/*-------------------------------------------------------------------------------------*/ +/* Using Declarations */ +/*-------------------------------------------------------------------------------------*/ +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +/*-------------------------------------------------------------------------------------*/ +/* Assembly Properties */ +/*-------------------------------------------------------------------------------------*/ +[assembly:AssemblyTitleAttribute(L"SHADE_Managed")]; +[assembly:AssemblyDescriptionAttribute(L"")]; +[assembly:AssemblyConfigurationAttribute(L"")]; +[assembly:AssemblyCompanyAttribute(L"")]; +[assembly:AssemblyProductAttribute(L"SHADE_Managed")]; +[assembly:AssemblyCopyrightAttribute(L"Copyright (C) 2022 DigiPen Institute of Technology")]; +[assembly:AssemblyTrademarkAttribute(L"")]; +[assembly:AssemblyCultureAttribute(L"")]; + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; diff --git a/SHADE_Managed/src/Engine/EngineInterface.cxx b/SHADE_Managed/src/Engine/EngineInterface.cxx new file mode 100644 index 00000000..27645342 --- /dev/null +++ b/SHADE_Managed/src/Engine/EngineInterface.cxx @@ -0,0 +1,138 @@ +/************************************************************************************//*! +\file EngineInterface.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the implementation of the managed EngineInterface static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "EngineInterface.hxx" +// Standard Libraries +#include +// Project Headers +#include "Utility/Convert.hxx" +#include "Utility/Debug.hxx" +#include "Scripts/ScriptStore.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + static EngineInterface::EngineInterface() + { + exceptionHandler = gcnew System::UnhandledExceptionEventHandler(unhandledExceptionHandler); + managedLibPath = System::Reflection::Assembly::GetExecutingAssembly()->Location->Replace("SHADE_Managed.dll", ManagedLibraryName + ".dll"); + } + + /*---------------------------------------------------------------------------------*/ + /* Interop Static Functions */ + /*---------------------------------------------------------------------------------*/ + void EngineInterface::Init() + { + SAFE_NATIVE_CALL_BEGIN + // Set up exception handler + System::AppDomain::CurrentDomain->UnhandledException += exceptionHandler; + LoadScriptAssembly(); + Debug::Log("[EngineInterface] Successfully initialized managed runtime."); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") + } + void EngineInterface::UnloadScriptAssembly() + { + SAFE_NATIVE_CALL_BEGIN + std::ostringstream oss; + oss << "[EngineInterface] Unloading " << Convert::ToNative(ManagedLibraryName) << ".dll"; + ScriptStore::Exit(); + + // Unload the script + scriptContext->Unload(); + scriptContext = nullptr; + System::GC::Collect(); + System::GC::WaitForPendingFinalizers(); + + // Unload the assembly File + if (managedLibFile != nullptr) + { + managedLibFile->Close(); + managedLibFile = nullptr; + } + + oss.str(""); + oss << "[EngineInterface] Successfully unloaded " << Convert::ToNative(ManagedLibraryName) << ".dll"; + Debug::Log(oss.str()); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") + } + void EngineInterface::LoadScriptAssembly() + { + SAFE_NATIVE_CALL_BEGIN + scriptContext = gcnew DisposableAssemblyLoadContext(); + loadManagedLibrary(); + ScriptStore::Init(); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") + } + void EngineInterface::ReloadScriptAssembly() + { + SAFE_NATIVE_CALL_BEGIN + // Stop scripts + UnloadScriptAssembly(); + // Reload assembly and restart scripts runtime + LoadScriptAssembly(); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") + } + void EngineInterface::Exit() + { + SAFE_NATIVE_CALL_BEGIN + // Clean up ScriptStore + ScriptStore::Exit(); + scriptContext->Unload(); + + // Release exception handler + System::AppDomain::CurrentDomain->UnhandledException -= exceptionHandler; + SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void EngineInterface::loadManagedLibrary() + { + using namespace System::IO; + + std::ostringstream oss; + try + { + oss << "[EngineInterface] Loading " << Convert::ToNative(ManagedLibraryName) << ".dll"; + managedLibFile = File::Open(managedLibPath, FileMode::Open, FileAccess::Read); + scriptContext->LoadFromStream(managedLibFile); + oss.str(""); + oss << "[EngineInterface] Successfully loaded " << Convert::ToNative(ManagedLibraryName) << ".dll"; + Debug::Log(oss.str()); + } + catch (System::Exception^ e) + { + oss << "[EngineInterface] Unable to load " << Convert::ToNative(ManagedLibraryName) << ".dll!" + << "(" << Convert::ToNative(e->ToString()) << ")"; + Debug::LogError(oss.str()); + } + } + + /*---------------------------------------------------------------------------------*/ + /* Exception Handler Functions */ + /*---------------------------------------------------------------------------------*/ + void EngineInterface::unhandledExceptionHandler(System::Object^ sender, System::UnhandledExceptionEventArgs^ e) + { + std::ostringstream oss; + oss << "[EngineInterface] Unhandled managed exception: " + << Convert::ToNative(e->ExceptionObject->GetType()->ToString()) << ": " + << Convert::ToNative(e->ExceptionObject->ToString()); + Debug::LogError(oss.str()); + } +} diff --git a/SHADE_Managed/src/Engine/EngineInterface.hxx b/SHADE_Managed/src/Engine/EngineInterface.hxx new file mode 100644 index 00000000..7bd5e010 --- /dev/null +++ b/SHADE_Managed/src/Engine/EngineInterface.hxx @@ -0,0 +1,90 @@ +/************************************************************************************//*! +\file EngineInterface.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definitions of the managed EngineInterface static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Utility/DisposableAssemblyLoadContext.hxx" + +namespace SHADE +{ + /// + /// Static class that contains the functions for interfacing with the core + /// PlushieEngine written in C++ for managing the lifecycle of managed code. + /// + private ref class EngineInterface abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + /// + /// Name of the Managed Library that contains the C# scripts written externally. + /// + literal System::String^ ManagedLibraryName = "SHADE_Scripting"; + + /*-----------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------*/ + static EngineInterface(); + + /*-----------------------------------------------------------------------------*/ + /* Interop Static Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Initialises all required components for managed code. + /// + static void Init(); + /// + /// Unloads the managed script assembly. + /// Take note that this will clear all existing scripts, ensure that the scene + /// is saved before doing so. + /// + static void UnloadScriptAssembly(); + /// + /// Loads the managed script assembly. Ensure this is only called after + /// UnloadScriptAssembly() has been called. + /// + static void LoadScriptAssembly(); + /// + /// Reloads the managed script assembly. + /// Take note that this will clear all existing scripts, ensure that the scene + /// is saved before doing so. + /// Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). + /// + static void ReloadScriptAssembly(); + /// + /// Cleans up all required components for managed code. + /// + static void Exit(); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + static DisposableAssemblyLoadContext^ scriptContext; + static System::UnhandledExceptionEventHandler^ exceptionHandler; + static System::String^ managedLibPath; + static System::IO::FileStream^ managedLibFile; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void loadManagedLibrary(); + + /*-----------------------------------------------------------------------------*/ + /* Exception Handler Functions */ + /*-----------------------------------------------------------------------------*/ + static void unhandledExceptionHandler(System::Object^ sender, System::UnhandledExceptionEventArgs^ e); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Utility/Debug.cxx b/SHADE_Managed/src/Utility/Debug.cxx index 70392bf1..bba0136f 100644 --- a/SHADE_Managed/src/Utility/Debug.cxx +++ b/SHADE_Managed/src/Utility/Debug.cxx @@ -28,6 +28,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Logging Functions */ /*---------------------------------------------------------------------------------*/ + void Debug::Log(const std::string& str) + { + SHLOG_INFO(str); + } void Debug::Log(System::String^ str) { SHLOG_INFO(Convert::ToNative(str)); @@ -47,6 +51,10 @@ namespace SHADE oss << "[" << throwerName << "] " << Convert::ToNative(str); SHLOG_INFO(oss.str()); } + void Debug::LogWarning(const std::string& str) + { + SHLOG_WARNING(str); + } void Debug::LogWarning(System::String^ str) { SHLOG_WARNING(Convert::ToNative(str)); @@ -66,6 +74,10 @@ namespace SHADE oss << "[" << throwerName << "] " << Convert::ToNative(str); SHLOG_WARNING(oss.str()); } + void Debug::LogError(const std::string& str) + { + SHLOG_ERROR(str); + } void Debug::LogError(System::String^ str) { SHLOG_ERROR(Convert::ToNative(str)); diff --git a/SHADE_Managed/src/Utility/Debug.hxx b/SHADE_Managed/src/Utility/Debug.hxx index e6176792..28f2bc88 100644 --- a/SHADE_Managed/src/Utility/Debug.hxx +++ b/SHADE_Managed/src/Utility/Debug.hxx @@ -98,6 +98,11 @@ namespace SHADE /// Logs a message to the output. ///

/// The string to output. + static void Log(const std::string& str); + /// + /// Logs a message to the output. + /// + /// The string to output. static void Log(System::String^ str); /// /// Logs a message to the output with a label such that it looks like this: @@ -133,6 +138,11 @@ namespace SHADE /// Logs a warning message to the output. /// /// The string to output. + static void LogWarning(const std::string& str); + /// + /// Logs a warning message to the output. + /// + /// The string to output. static void LogWarning(System::String^ str); /// /// Logs a warning message to the output with a label such that it looks like this: @@ -168,6 +178,11 @@ namespace SHADE /// Logs a error message to the output. /// /// The string to output. + static void LogError(const std::string& str); + /// + /// Logs a error message to the output. + /// + /// The string to output. static void LogError(System::String^ str); /// /// Logs a error message to the output with a label such that it looks like this: From 1cabcefe0f345b72d642762a452f34b7e021153e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 13 Sep 2022 13:37:32 +0800 Subject: [PATCH 029/793] SP3-102 Initial port of 200 resource manager into 300 Asset manager --- SHADE_Engine/SHADE_Engine.vcxproj | 11 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 48 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 89 ++ SHADE_Engine/src/Assets/SHAssetManager.cpp | 1013 +++++++++++++++++ SHADE_Engine/src/Assets/SHAssetManager.h | 199 ++++ SHADE_Engine/src/Assets/SHAssetMeta.cpp | 102 ++ SHADE_Engine/src/Assets/SHAssetMeta.h | 82 ++ .../src/Assets/SHAssetMetaHandler.cpp | 131 +++ SHADE_Engine/src/Assets/SHAssetMetaHandler.h | 51 + 9 files changed, 1706 insertions(+), 20 deletions(-) create mode 100644 SHADE_Engine/src/Assets/SHAssetMacros.h create mode 100644 SHADE_Engine/src/Assets/SHAssetManager.cpp create mode 100644 SHADE_Engine/src/Assets/SHAssetManager.h create mode 100644 SHADE_Engine/src/Assets/SHAssetMeta.cpp create mode 100644 SHADE_Engine/src/Assets/SHAssetMeta.h create mode 100644 SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp create mode 100644 SHADE_Engine/src/Assets/SHAssetMetaHandler.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 178b98f7..0300064c 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -102,6 +102,10 @@ + + + + @@ -183,9 +187,9 @@ - + @@ -193,6 +197,9 @@ + + + @@ -253,11 +260,11 @@ - Create + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index c28e339e..7feecdc7 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -1,6 +1,9 @@ + + {3824E0A7-24C6-0A7E-0D81-1ED2F9C191CE} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -117,6 +120,18 @@ + + Assets + + + Assets + + + Assets + + + Assets + Engine\ECS_Base\Components @@ -364,6 +379,9 @@ Scene + + Scene + Scene @@ -376,22 +394,20 @@ Tools - - - - - - - - - - - Tools + + Assets + + + Assets + + + Assets + Engine\ECS_Base\Components @@ -576,6 +592,9 @@ Resource + + Scene + Scene @@ -588,12 +607,5 @@ Tools - - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h new file mode 100644 index 00000000..b84165fb --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -0,0 +1,89 @@ +/****************************************************************************** + * \file SHAssetMacros.h + * \author Loh Xiao Qi + * \brief Macros and typedefs for assets + * + * \copyright Copyright (c) 2022 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#ifndef SH_RESOURCE_MACROS_H +#define SH_RESOURCE_MACROS_H + +#include +#include +#include + +// FMOD Fwd Declare +namespace FMOD +{ + class Sound; + class System; + class ChannelGroup; + class Channel; +} +enum FMOD_RESULT : int; +enum FMOD_SPEAKERMODE : int; + +// Typedefs +typedef uint32_t AssetID; +typedef std::string AssetName; +typedef std::filesystem::path AssetPath; +typedef unsigned char* AssetData; +typedef std::string AssetMetaVersion; +typedef std::string AssetExtension; +typedef unsigned char AssetTypeMeta; + +typedef FMOD::Sound* SHSound; + +// Asset Meta Version +#define RESOURCE_META_VER "1.0" + +// Asset type enum +enum class AssetType : AssetTypeMeta +{ + AUDIO = 0, + SHADER, + MATERIAL, + IMAGE, + TEXTURE, + MESH, + SCRIPT, + SCENE, + PREFAB, + AUDIO_WAV +}; + +// RESOURCE EXTENSIONS +#define META_EXTENSION ".shmeta" +#define IMAGE_EXTENSION ".png" +#define AUDIO_EXTENSION ".ogg" +#define AUDIO_WAV_EXTENSION ".wav" +#define SHADER_EXTENSION ".glsl" +#define SCRIPT_EXTENSION ".cs" +#define SCENE_EXTENSION ".SHADE" +#define PREFAB_EXTENSION ".SHPrefab" +#define MATERIAL_EXTENSION ".SHMat" +#define TEXTURE_EXTENSION ".dds" +#define MESH_EXTENSION ".gltf" + +std::string const EXTENSIONS[] = { + AUDIO_EXTENSION, + SHADER_EXTENSION, + MATERIAL_EXTENSION, + IMAGE_EXTENSION, + TEXTURE_EXTENSION, + MESH_EXTENSION, + SCRIPT_EXTENSION, + SCENE_EXTENSION, + PREFAB_EXTENSION, + AUDIO_WAV_EXTENSION +}; + +// Error flags +#define FILE_NOT_FOUND_ERR "FILE NOT FOUND" +#define META_NOT_FOUND_ERR "META NOT FOUND" +#define RESOURCE_NOT_FOUND_ERR "RESOURCE NOT FOUND" +#define EXT_DOES_NOT_EXIST "TYPE DOES NOT HAVE EXTENSION DEFINED" + +#endif // !SH_RESOURCE_MACROS_H diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp new file mode 100644 index 00000000..65acc232 --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -0,0 +1,1013 @@ +/****************************************************************************** + * \file SHAssetManager.cpp + * \author Loh Xiao Qi + * \brief Implementations for SHAssetManager.h + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited. + ******************************************************************************/ +#include "SHpch.h" +#include +#include +#include "SHAssetManager.h" +#include "SHAssetMetaHandler.h" +#include "Filesystem/SHFileSystem.h" + +namespace SHADE +{ + FMOD::System* SHAssetManager::audioSystem; + std::unordered_map* SHAssetManager::audioSoundList; + + std::vector SHAssetManager::metaCollection; + std::unordered_map SHAssetManager::pathRegistry; + std::unordered_map SHAssetManager::typeRegistry; + std::unordered_map SHAssetManager::nameIDRegistry; + std::unordered_map SHAssetManager::idNameRegistry; + std::unordered_map SHAssetManager::filenameRegistry; + std::unordered_map SHAssetManager::filenameReverse; + + /**************************************************************************** + * \brief Static function to generate resource ID. + ****************************************************************************/ + AssetID SHAssetManager::GenerateAssetID() noexcept + { + std::default_random_engine randEngine{ + static_cast(std::chrono::system_clock::now().time_since_epoch().count()) }; + std::mt19937 idGen{ randEngine() }; + AssetID result{ idGen() }; + while (result == 0) + { + result = idGen(); + } + return result; + } + + /**************************************************************************** + * Generate path relative to exe + * + * \param p - std::filesystem::path containing file + * \return std::filesystem::path - containing full relative path + ****************************************************************************/ + AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept + { + if (!IsRecognised(path.extension().string().c_str())) + { + //TODO:ASSERT UNRECOGNISED FILE TYPE + return std::filesystem::path(); + } + + AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str()); + std::string folder; + switch (type) + { + case AssetType::AUDIO: + folder = AUDIO_FOLDER; + break; + case AssetType::AUDIO_WAV: + folder = AUDIO_FOLDER; + break; + case AssetType::IMAGE: + folder = IMAGES_FOLDER; + break; + default: + //TODO:ASSERT UNSUPPORTED FILE TYPE + return std::filesystem::path(); + } + + return std::filesystem::path(RESOURCE_ROOT + folder + path.filename().string()); + } + + /**************************************************************************** + * \brief Deallocates all memory used by image data + ****************************************************************************/ + void SHAssetManager::UnloadImages() noexcept + { + for (auto& [key, value] : imageData) + { + stbi_image_free(value.data); + } + + imageData.clear(); + } + + bool SHAssetManager::UpdateSpriteSetIndices(std::shared_ptr& set) noexcept + { + return SHSpriteSetLibrary::UpdateIndicesAuto(set); + } + + bool SHAssetManager::IsRecognised(char const* ext) noexcept + { + for (auto const& e : EXTENSIONS) + { + if (strcmp(ext, e.c_str()) == 0) + { + return true; + } + } + + return false; + } + + /**************************************************************************** + * \brief Deallocate all memory used by resource data + ****************************************************************************/ + void SHAssetManager::Unload() noexcept + { + for (auto const& meta : metaCollection) + { + SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.GetID()].string().append(META_EXTENSION)); + } + UnloadImages(); + } + + /**************************************************************************** + * \param Name of resource + + * \brief Gets resource ID + ****************************************************************************/ + AssetID SHAssetManager::GetIDFromName(AssetName const& name) noexcept + { + if (nameIDRegistry.find(name) == nameIDRegistry.end()) + { + // Error resource does not exist + return 0; + } + else + { + return nameIDRegistry[name]; + } + } + + std::vector SHAssetManager::GetIDFromNames(std::initializer_list const& files) noexcept + { + std::vector result; + for (auto const& file : files) + { + result.push_back(GetIDFromName(file)); + } + + return result; + } + + /**************************************************************************** + * \param file name + + * \brief Returns resource ID from provided file name + ****************************************************************************/ + AssetID SHAssetManager::GetIDFromFilename(std::string const& name) noexcept + { + if (filenameRegistry.find(name) == filenameRegistry.end()) + { + // Error resource does not exist + return 0; + } + else + { + return filenameRegistry[name]; + } + } + + /**************************************************************************** + * \brief Get filename from resource ID. + * + * \param id - id of asset + * \return std::string + ****************************************************************************/ + std::string SHAssetManager::GetFilenameFromID(AssetID id) noexcept + { + if (filenameReverse.find(id) == filenameReverse.end()) + { + // Error resource does not exist + return FILE_NOT_FOUND_ERR; + } + else + { + return filenameReverse[id]; + } + } + + /**************************************************************************** + * \brief Get asset name from resource ID. + * + * \param id - resource id + * \return - std::string + ****************************************************************************/ + AssetName SHAssetManager::GetNameFromID(AssetID id) noexcept + { + if (idNameRegistry.find(id) == idNameRegistry.end()) + { + // Error + return "INVALID"; + } + else + { + return idNameRegistry[id]; + } + } + + /**************************************************************************** + * \param list of file names + + * \brief Returns vector of resource IDs + ****************************************************************************/ + std::vector SHAssetManager::GetIDFromFilenames(std::initializer_list const& files) noexcept + { + std::vector result; + for (auto const& file : files) + { + result.push_back(GetIDFromFilename(file)); + } + + return result; + } + + /**************************************************************************** + * \brief Get record of all resources currently loaded with name and id. + * + * \return const& to unordered_map + ****************************************************************************/ + std::unordered_map const& SHAssetManager::GetAllAssets() noexcept + { + return nameIDRegistry; + } + + /**************************************************************************** + * \brief Get type of asset from ID + * + * \param resource id of file + * \return AssetType enum class value + ****************************************************************************/ + AssetType SHAssetManager::GetTypeFromID(AssetID id) noexcept + { + return typeRegistry[id]; + } + + /**************************************************************************** + * \brief Get registered path of asset. + * + * \param resource id of file + * \return std::filesystem::path + ****************************************************************************/ + AssetPath SHAssetManager::GetPathFromID(AssetID id) noexcept + { + return pathRegistry[id]; + } + + /**************************************************************************** + * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM + * RESOURCES CREATED BY THE ENGINE. + * + * \param type of resource + * \param name of resource + * \return resource id generated for new asset + ****************************************************************************/ + AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept + { + AssetID id{ GenerateAssetID() }; + SHAssetMeta meta; + meta.SetID(id); + meta.SetType(type); + meta.SetVersion(RESOURCE_META_VER); + + std::string folder; + switch (type) + { + case AssetType::SPRITE_SET: + folder = SPRITE_SET_FOLDER; + break; + default: + folder = ""; + break; + } + AssetPath path{ RESOURCE_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; + + metaCollection.push_back(meta); + pathRegistry[id] = path; + typeRegistry[id] = type; + idNameRegistry[id] = name; + nameIDRegistry[name] = id; + filenameRegistry[name + SHAssetMetaHandler::GetExtensionFromType(type)] = id; + filenameReverse[id] = name + SHAssetMetaHandler::GetExtensionFromType(type); + + SHAssetMetaHandler::WriteMetaData(meta, path.string() + META_EXTENSION); + + return id; + } + + /**************************************************************************** + * \brief Import new resource from outside editor window. + * + * \param path - c style string to full path + * \return resource if generated for new + ****************************************************************************/ + AssetID SHAssetManager::ImportNewAsset(char const* p) noexcept + { + std::filesystem::path path{ p }; + for (auto const& pa : pathRegistry) + { + if (std::strcmp(pa.second.string().c_str(), path.filename().string().c_str()) == 0) + { + return pa.first; + } + } + + std::filesystem::path newPath{ GenerateLocalPath(path) }; + if (newPath.empty()) + { + //TODO: Assert imported file is not recognised + std::cout << "Unsupported File Formate: " << path.filename() << "\n"; + return 0; + } + + std::filesystem::copy(path, newPath); + + AssetID id{ RetrieveAsset(newPath.string().c_str()) }; + if (id != 0) + { + LoadData(id); + } + + return id; + } + + /**************************************************************************** + * \brief Search through resources folder for new unregistered assets. + * Takes in no params and returns nothing. Only updates internally. + ****************************************************************************/ + void SHAssetManager::RefreshAllAssets() noexcept + { + std::vector metaFiles; + std::vector resourceFiles; + + SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); + //std::vector resourceFilesVerified; + std::vector resourceFilesNew; + + for (auto const& resource : resourceFiles) + { + bool found = false; + for (auto it {metaFiles.begin()}; it != metaFiles.end(); ++it) + { + std::string fileExtCheck{ resource.filename().string() }; + fileExtCheck += META_EXTENSION; + if (it->filename().string() == fileExtCheck) + { + metaFiles.erase(it); + found = true; + break; + } + } + + if (!found && IsRecognised(resource.extension().string().c_str())) + { + resourceFilesNew.push_back(resource); + } + } + + std::vector newLoad; + newLoad.reserve(resourceFilesNew.size()); + + //TODO: Handle if meta does not match all resources (if meta exist and asset doesnt, vice versa) + for (auto const& file : resourceFilesNew) + { + newLoad.push_back(RegisterAssetNew(file)); + } + + //UpdateAllSpriteSets(); + + } + + /**************************************************************************** + * \param Asset ID to image resource + + * \brief Gets image raw data from provided ID. + ****************************************************************************/ + SHImageRawData const* SHAssetManager::GetImageRawData(AssetID const& id) noexcept + { + if (imageData.find(id) == imageData.end()) + { + // Error resource does not exist + return 0; + } + else + { + return &imageData[id]; + } + } + + /**************************************************************************** + * \param resource ID + + * \brief Gets image dimensions of image file + ****************************************************************************/ + SHUMathVec2i SHAssetManager::GetImageDimensions(AssetID const& image) noexcept + { + SHImageRawData const* const data = GetImageRawData(image); + if (data != nullptr) + { + return SHUMathVec2i{ data->width, data->height }; + } + return SHUMathVec2i(); + } + + /**************************************************************************** + * \param vector containing resource IDs + + * \brief Checks if all images referred to by resource IDs have the same + * dimensions. To be used when checking images in the same batch + ****************************************************************************/ + bool SHAssetManager::MatchImageFiles(std::vector const& files) noexcept + { + if (files.size() == 0) + { + std::cout << "Nothing to compare. Image files list is empty or doesn't contain enough to compare. " << std::endl; + return false; + } + + if (!imageData.contains(*files.begin())) + { + std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl; + return false; + } + + auto const& firstElement = GetImageRawData(*files.begin()); + for (auto it = files.begin() + 1; it < files.end(); ++it) + { + if (imageData.contains(*it)) + { + if (firstElement->CompareProperties(*GetImageRawData(*it)) == false) + { + std::cout << "Comparison failed. Not all images are the same. " << std::endl; + return false; + } + } + else + { + std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl; + return false; + } + } + return true; + } + + /**************************************************************************** + * \brief Create sprite set with single image. + * + * \param imageName - file name of image + * \return result of creation + ****************************************************************************/ + bool SHAssetManager::AddSpriteSet(std::string const& imageName) noexcept + { + if (spriteSetNameRegistry.find(imageName) == spriteSetNameRegistry.end()) + { + std::shared_ptr ptr = SHSpriteSetLibrary::AddSpriteSet(imageName); + if (ptr != nullptr) + { + AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, imageName) }; + ptr->SetImageRef(filenameRegistry[imageName]); + spriteSetData[id] = ptr; + spriteSetNameRegistry[imageName] = id; + return true; + } + } + return false; + } + + /**************************************************************************** + * \brief Create sprite set with single image (Asset ID). + * + * \param id - resource id of single image + * \return resource id of sprite set created + ****************************************************************************/ + AssetID SHAssetManager::AddSpriteSet(AssetID id) noexcept + { + AssetName newName{ idNameRegistry[id] }; + newName += "SpriteSet"; + if (spriteSetNameRegistry.find(newName) == spriteSetNameRegistry.end()) + { + AssetID ssID{ CreateEmptySpriteSet(newName) }; + if (ssID) + { + std::shared_ptr ptr = spriteSetData[ssID]; + if (ptr != nullptr) + { + ptr->SetImageRef(id); + UpdateSpriteSetIndices(ptr); + SHSpriteSetLibrary::WriteSpriteSet( + ptr, + pathRegistry[ssID] + ); + return ssID; + } + } + } + + return 0; + } + + /**************************************************************************** + * \brief Create empty sprite set without any image references. + * + * \param setName - std::string sprite set name + * \return resource ID of sprite set created + ****************************************************************************/ + AssetID SHAssetManager::CreateEmptySpriteSet(std::string setName) noexcept + { + if (spriteSetNameRegistry.find(setName) == spriteSetNameRegistry.end()) + { + std::shared_ptr ptr = std::make_shared(setName); + if (ptr != nullptr) + { + AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, setName) }; + spriteSetData[id] = ptr; + spriteSetNameRegistry[setName] = id; + return id; + } + } + return 0; + } + + /**************************************************************************** + * \brief Get ID of sprite set by name. + * + * \param name - name of sprite set std::string + * \return resource iD + ****************************************************************************/ + AssetID SHAssetManager::GetSpriteSet(std::string name) noexcept + { + if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end()) + { + return 0; + } + + return spriteSetNameRegistry[name]; + } + + /**************************************************************************** + * \brief Get name of sprite set from resource ID. + * + * \param id - resource id + * \return std::string sprite set name + ****************************************************************************/ + std::string SHAssetManager::GetSpriteSetName(AssetID id) noexcept + { + for (auto const& entry : spriteSetNameRegistry) + { + if (entry.second == id) + { + return entry.first; + } + } + + return std::string("NO SUCH SPRITE SET"); + } + + /**************************************************************************** + * \brief Get data of sprite set with sprite set name. + * + * \param name - std::string sprite set name + * \return pointer to sprite set + ****************************************************************************/ + std::shared_ptr SHAssetManager::GetSpriteSetData(std::string name) noexcept + { + if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end()) + { + return nullptr; + } + return spriteSetData[spriteSetNameRegistry[name]]; + } + + /**************************************************************************** + * \brief Get data of sprite set with sprite set resource id. + * + * \param id - sprite set resource id + * \return pointer to sprite set + ****************************************************************************/ + std::shared_ptr SHAssetManager::GetSpriteSetData(AssetID id) noexcept + { + return spriteSetData[id]; + } + + /**************************************************************************** + * \brief Add event to frame in sprite set. + * + * \param spriteSet - sprite set resource ID + * \param evt - pointer to method in script class + * \param soh - script object handle to script instance object + * \param frame - target frame in sprite set + ****************************************************************************/ + void SHAssetManager::AddSpriteEvent(AssetID spriteSet, MonoMethod* evt, uint32_t soh, size_t frame) noexcept + { + SHSpriteSet& set = *spriteSetData[spriteSet]; + set.ModifyFrameEvent(static_cast(frame), evt, soh); + } + + /**************************************************************************** + * \brief Remove event from frame in sprite set. + * + * \param spriteSet - sprite set resource iD + * \param frame - target frame + ****************************************************************************/ + void SHAssetManager::RemoveSpriteEvent(AssetID spriteSet, size_t frame) noexcept + { + SHSpriteSet& set = *spriteSetData[spriteSet]; + set.ModifyFrameEvent(static_cast(frame), nullptr, 0); + } + + /**************************************************************************** + * \brief Write sprite set to memory in system. + * + * \param id - sprite set resource id + ****************************************************************************/ + void SHAssetManager::SaveSpriteSet(AssetID id) noexcept + { + SHAssetMeta meta; + for (auto const& met : metaCollection) + { + if (met.GetID() == id) + { + meta = met; + break; + } + } + SHSpriteSetLibrary::WriteSpriteSet( + spriteSetData[id], + pathRegistry[id] + ); + } + + /**************************************************************************** + * \brief Update all texture layer indices in sprite set. + ****************************************************************************/ + void SHAssetManager::UpdateAllSpriteSets() noexcept + { + for (auto& data : spriteSetData) + { + SHSpriteSetLibrary::UpdateIndicesAuto(data.second); + } + } + + std::shared_ptr SHAssetManager::GetAtlas(AssetID id) noexcept + { + auto const it = spriteSetData.find(id); + if (it == spriteSetData.end()) + { + return nullptr; + } + + return it->second->GetAtlasData(); + } + + bool SHAssetManager::SliceSpriteFixed(AssetID id, uint32_t cols, uint32_t rows) noexcept + { + std::shared_ptr atlas = nullptr; + + auto const it = spriteSetData.find(id); + if (it == spriteSetData.end()) + { + // TODO error log no sprite set found for data + return false; + } + else + { + atlas = std::make_shared(SHAtlasSlicer::FixedSlice(idNameRegistry[id], imageData[id], cols, rows)); + } + + std::vector slices; + slices.reserve(atlas->slices.size()); + for (auto const& slice : atlas->slices) + { + AssetID newID{ GenerateAssetID() }; + typeRegistry[newID] = AssetType::IMAGE; + idNameRegistry[newID] = slice.name; + nameIDRegistry[slice.name] = newID; + spriteSetNameRegistry[slice.name] = newID; + + slices.emplace_back(newID); + } + + auto& spriteSet = spriteSetData[id]; + spriteSet->SetAtlas(true); + spriteSet->SetIsAnimation(true); + spriteSet->SetAtlasData(atlas); + SHSpriteSetLibrary::UpdateIndicesAuto(spriteSet); + + SHSpriteSetLibrary::WriteSpriteSet( + spriteSet, + pathRegistry[id] + ); + + return true; + } + + bool SHAssetManager::SliceSpriteAuto(AssetID id) noexcept + { + std::shared_ptr atlas = nullptr; + auto const it = spriteSetData.find(id); + if (it == spriteSetData.end()) + { + // TODO error log sprite set does not exist + return false; + } + else + { + atlas = std::make_shared(SHAtlasSlicer::AutoSlice(idNameRegistry[id], imageData[id])); + } + + auto& spriteSet = spriteSetData[id]; + spriteSet->SetAtlas(true); + spriteSet->SetIsAnimation(false); + std::vector slices; + slices.reserve(atlas->slices.size()); + for (auto const& slice : atlas->slices) + { + AssetID newID{ GenerateAssetID() }; + + std::shared_ptr newSpriteSet = std::make_shared(slice.name); + newSpriteSet->SetImageRef(id); + SHSpriteSetLibrary::UpdateIndicesAuto(newSpriteSet); + spriteSetData[newID] = newSpriteSet; + typeRegistry[newID] = AssetType::IMAGE; + idNameRegistry[newID] = slice.name; + nameIDRegistry[slice.name] = newID; + spriteSetNameRegistry[slice.name] = newID; + + slices.emplace_back(newID); + } + spriteSet->SetAtlasData(atlas); + spriteSet->SetNonFixedSlicesID(slices); + + return true; + } + + /**************************************************************************** + * \param Pointer to FMOD system + * \param reference to vector containing class holding sound data + + * \brief Loads all audio resource data into memory and fmod system + ****************************************************************************/ + void SHAssetManager::LoadAllAudio(FMOD::System* system, std::unordered_map& soundList) + { + audioSystem = system; + audioSoundList = &soundList; + + for (auto const& meta : metaCollection) + { + if (meta.GetType() == AssetType::AUDIO || meta.GetType() == AssetType::AUDIO_WAV) + { + char name[256], newName[256]; + SHSound sound; + system->createSound(pathRegistry[meta.GetID()].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound); + + sound->getName(newName, 256); + std::vector::size_type i = 0; + for (auto& snd : soundList) + { + snd.second->getName(name, 256); + if (strcmp(name, newName) == 0) // sound already exists in soundList + { + sound->release(); + } + ++i; + } + soundList.emplace(meta.GetID(),sound); + } + } + } + + /**************************************************************************** + * \param Path for meta data file + * \param Path for resource file + + * \brief Links meta data to resource in registries. Meta data should + * already exist + ****************************************************************************/ + void SHAssetManager::RegisterAsset(AssetPath const& metaPath, AssetPath const& path) noexcept + { + SHAssetMeta meta = SHAssetMetaHandler::RetrieveMetaData(metaPath); + + metaCollection.push_back(meta); + pathRegistry.emplace(meta.GetID(), path); + typeRegistry.emplace(meta.GetID(), meta.GetType()); + nameIDRegistry.emplace(GetNameFromPath(path), meta.GetID()); + idNameRegistry.emplace(meta.GetID(), GetNameFromPath(path)); + filenameRegistry.emplace(path.filename().string(), meta.GetID()); + filenameReverse.emplace(meta.GetID(), path.filename().string()); + } + + /**************************************************************************** + * \param Path for resource file + + * \brief Creates new meta data for new resource. + ****************************************************************************/ + SHAssetMeta SHAssetManager::RegisterAssetNew(AssetPath const& resource) noexcept + { + SHAssetMeta meta; + meta.SetID(GenerateAssetID()); + meta.SetType(SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string())); + meta.SetVersion(RESOURCE_META_VER); + + metaCollection.push_back(meta); + pathRegistry.emplace(meta.GetID(), resource); + typeRegistry.emplace(meta.GetID(), meta.GetType()); + nameIDRegistry.emplace(GetNameFromPath(resource), meta.GetID()); + idNameRegistry.emplace(meta.GetID(), GetNameFromPath(resource)); + filenameRegistry.emplace(resource.filename().string(), meta.GetID()); + filenameReverse.emplace(meta.GetID(), resource.filename().string()); + + //LoadData(meta.GetID()); + + SHAssetMetaHandler::WriteMetaData(meta, resource.string() + META_EXTENSION); + return metaCollection.back(); + } + + /**************************************************************************** + * \brief Load all resources that are in the folder + ****************************************************************************/ + void SHAssetManager::Load() noexcept + { + RetrieveAssets(); + LoadAllData(); + + //SHShaderLibrary::Load(); + SHShaderLibrary::Load(); + + // Load all the default meshes + SHMeshLibrary::Load(); + + // Initialize all array textures + SHTexture2DArrayContainer::Init(); + + UpdateAllSpriteSets(); + } + + /**************************************************************************** + * \brief Load resource data into memory + ****************************************************************************/ + void SHAssetManager::LoadAllData() noexcept + { + for (auto const& meta : metaCollection) + { + if (meta.GetType() == AssetType::IMAGE) + { + SHImageRawData data; + std::string string{ pathRegistry[meta.GetID()].string() }; + SHImageLibrary::LoadImageFromFile(string, data); + imageData.emplace(meta.GetID(), data); + } + else if (meta.GetType() == AssetType::SPRITE_SET) + { + std::shared_ptr data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[meta.GetID()]); + UpdateSpriteSetIndices(data); + spriteSetNameRegistry[data->GetSpriteSetName()] = meta.GetID(); + spriteSetData.emplace(meta.GetID(), data); + } + else if (meta.GetType() == AssetType::WAYPOINTS_C) + { + std::shared_ptr data = SHWaypointLibrary::LoadWaypointCollection(pathRegistry[meta.GetID()]); + waypointData.emplace(meta.GetID(), data); + } + } + } + + void SHAssetManager::LoadData(AssetID id) noexcept + { + AssetType type{ typeRegistry[id] }; + if (type == AssetType::IMAGE) + { + SHImageRawData data; + std::string string{ pathRegistry[id].string() }; + SHImageLibrary::LoadImageFromFile(string, data); + imageData.emplace(id, data); + SHTexture2DArrayContainer::AddImageToTexture(imageData[id], idNameRegistry[id]); + } + else if (type == AssetType::AUDIO || type == AssetType::AUDIO_WAV) + { + char name[256], newName[256]; + SHSound sound; + audioSystem->createSound(pathRegistry[id].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound); + + sound->getName(newName, 256); + std::vector::size_type i = 0; + for (auto& snd : *audioSoundList) + { + snd.second->getName(name, 256); + if (strcmp(name, newName) == 0) // sound already exists in soundList + { + sound->release(); + } + ++i; + } + audioSoundList->emplace(id,sound); + } + else if (type == AssetType::SPRITE_SET) + { + std::shared_ptr data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[id]); + UpdateSpriteSetIndices(data); + spriteSetNameRegistry[data->GetSpriteSetName()] = id; + spriteSetData.emplace(id, data); + } + } + + /**************************************************************************** + * \brief Retrieve all resource files and meta files from filesystem + ****************************************************************************/ + void SHAssetManager::RetrieveAssets() noexcept + { + std::vector metaFiles; + std::vector resourceFiles; + + SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); + + for (auto const& meta : metaFiles) + { + for (std::vector::const_iterator it{ resourceFiles.cbegin() }; + it != resourceFiles.cend(); + ++it) + { + // Asset exists for meta file + std::string fileExtCheck{ it->filename().string() }; + fileExtCheck += META_EXTENSION; + if (meta.filename().string() == fileExtCheck) + { + RegisterAsset(meta, *it); + resourceFiles.erase(it); + break; + } + } + } + + //TODO: Handle if meta does not match all resources (if meta exist and asset doesnt, vice versa) + for (auto const& file : resourceFiles) + { + if (IsRecognised(file.extension().string().c_str())) + { + SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file), file.string() + META_EXTENSION); + } + else + { + std::cout << "Unsupported File Format: " << file.filename() << "\n"; + } + } + } + + AssetID SHAssetManager::RetrieveAsset(char const* path) noexcept + { + std::filesystem::path p{ path }; + if (IsRecognised(p.extension().string().c_str())) + { + SHAssetMeta const& meta{ RegisterAssetNew(p) }; + SHAssetMetaHandler::WriteMetaData(meta, p.string() + META_EXTENSION); + return meta.GetID(); + } + else + { + std::cout << "Unsupported File Format: " << p.filename() << "\n"; + } + + // Assert that file imported is not recognised + return 0; + } + + /**************************************************************************** + * \param Full path of file + + * \brief Extracts file name from path. Formats file name into readable + * with spaces and capitalises first letter of every word + ****************************************************************************/ + AssetName SHAssetManager::GetNameFromPath(AssetPath filepath) noexcept + { + std::string name{ filepath.filename().string() }; + name = name.substr(0, name.find_last_of('.')); + + //if (name[0] <= 122 && name[0] >= 97) + //{ + // name[0] -= 32; + //} + + //for (size_t i{ 1 }; i < name.length(); ++i) + //{ + // // Replace all underscores with spaces + // if (name[i] == '_') + // { + // name[i] = ' '; + // continue; + // } + + // if (name[i + 1] <= 'Z' && name[i + 1] >= 'A' + // && name[i] <= 'z' && name[i] >= 'a') + // { + // name.insert(i + 1, 1, ' '); + // continue; + // } + + // if (name[i - 1] == ' ' && name[i] <= 'z' && name[i] >= 'a') + // { + // name[i] -= 32; + // } + //} + + return name; + } +} diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h new file mode 100644 index 00000000..16375b4b --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -0,0 +1,199 @@ +/****************************************************************************** + * \file SHAssetManager.h + * \author Loh Xiao Qi + * \brief Interface for resource manager, to be used by engine side + * operations. + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited. +******************************************************************************/ +#ifndef SH_RESOURCE_MANAGER_H +#define SH_RESOURCE_MANAGER_H + +#include +#include +#include +#include "SHAssetMeta.h" + +#include + +struct _MonoMethod; + +namespace SHADE +{ + class SHAssetManager + { + public: + /**************************************************************************** + * \brief Static function to generate resource ID. + ****************************************************************************/ + static AssetID GenerateAssetID() noexcept; + + /**************************************************************************** + * Generate path relative to exe + * + * \param p - std::filesystem::path containing file + * \return std::filesystem::path - containing full relative path + ****************************************************************************/ + static AssetPath GenerateLocalPath(AssetPath p) noexcept; + + /**************************************************************************** + * \brief Deallocate all memory used by resource data + ****************************************************************************/ + static void Unload() noexcept; + + /**************************************************************************** + * \brief Load all resources that are in the folder + ****************************************************************************/ + static void Load() noexcept; + + // General------------------------------------------------------------------/ + /**************************************************************************** + * \param Name of resource + + * \brief Gets resource ID + ****************************************************************************/ + static AssetID GetIDFromName(AssetName const&) noexcept; + + /**************************************************************************** + * \param Name of resource + + * \brief Gets resource ID + ****************************************************************************/ + static std::vector GetIDFromNames(std::initializer_list const&) noexcept; + + /**************************************************************************** + * \brief Get asset name from resource ID. + * + * \param id - resource id + * \return - std::string + ****************************************************************************/ + static AssetName GetNameFromID(AssetID) noexcept; + + /**************************************************************************** + * \param file name + + * \brief Returns resource ID from provided file name + ****************************************************************************/ + static AssetID GetIDFromFilename(std::string const&) noexcept; + + /**************************************************************************** + * \brief Get filename from resource ID. + * + * \param id - id of asset + * \return std::string + ****************************************************************************/ + static std::string GetFilenameFromID(AssetID id) noexcept; + + /**************************************************************************** + * \param list of file names + + * \brief Returns vector of resource IDs + ****************************************************************************/ + static std::vector GetIDFromFilenames(std::initializer_list const&) noexcept; + + /**************************************************************************** + * \brief Get record of all resources currently loaded with name and id. + * + * \return const& to unordered_map + ****************************************************************************/ + static std::unordered_map const& GetAllAssets() noexcept; + + /**************************************************************************** + * \brief Get type of asset from ID + * + * \param resource id of file + * \return AssetType enum class value + ****************************************************************************/ + static AssetType GetTypeFromID(AssetID) noexcept; + + /**************************************************************************** + * \brief Get registered path of asset. + * + * \param resource id of file + * \return std::filesystem::path + ****************************************************************************/ + static AssetPath GetPathFromID(AssetID) noexcept; + + /**************************************************************************** + * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM + * RESOURCES CREATED BY THE ENGINE. + * + * \param type of resource + * \param name of resource + * \return resource id generated for new asset + ****************************************************************************/ + static AssetID CreateNewAsset(AssetType, AssetName) noexcept; + + /**************************************************************************** + * \brief Import new resource from outside editor window. + * + * \param path - c style string to full path + * \return resource if generated for new + ****************************************************************************/ + static AssetID ImportNewAsset(char const* path) noexcept; + + /**************************************************************************** + * \brief Search through resources folder for new unregistered assets. + * Takes in no params and returns nothing. Only updates internally. + ****************************************************************************/ + static void RefreshAllAssets() noexcept; + // -------------------------------------------------------------------------/ + + private: + /**************************************************************************** + * \brief Load resource data into memory + ****************************************************************************/ + static void LoadAllData() noexcept; + + static void LoadData(AssetID id) noexcept; + + /**************************************************************************** + * \brief Retrieve all resource files and meta files from filesystem + ****************************************************************************/ + static void RetrieveAssets() noexcept; + + static AssetID RetrieveAsset(char const* path) noexcept; + + /**************************************************************************** + * \param Full path of file + + * \brief Extracts file name from path. Formats file name into readable + * with spaces and capitalises first letter of every word + ****************************************************************************/ + static AssetName GetNameFromPath(AssetPath) noexcept; + + /**************************************************************************** + * \param Path for meta data file + * \param Path for resource file + + * \brief Links meta data to resource in registries. Meta data should + * already exist + ****************************************************************************/ + static void RegisterAsset(AssetPath const&, AssetPath const&) noexcept; + + /**************************************************************************** + * \param Path for resource file + + * \brief Creates new meta data for new resource. + ****************************************************************************/ + static SHAssetMeta RegisterAssetNew(AssetPath const&) noexcept; + + static bool IsRecognised(char const*) noexcept; + + static FMOD::System* audioSystem; + static std::unordered_map* audioSoundList; + + // For all resources + static std::vector metaCollection; + static std::unordered_map pathRegistry; + static std::unordered_map typeRegistry; + static std::unordered_map idNameRegistry; + static std::unordered_map nameIDRegistry; + static std::unordered_map filenameRegistry; + static std::unordered_map filenameReverse; + }; +} + +#endif // !SH_RESOURCE_MANAGER_H diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.cpp b/SHADE_Engine/src/Assets/SHAssetMeta.cpp new file mode 100644 index 00000000..e8608159 --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetMeta.cpp @@ -0,0 +1,102 @@ +/****************************************************************************** + * \file SHResourceMeta.cpp + * \author Loh Xiao Qi + * \brief Implementation for SHResourceMeta.h + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#include "SHpch.h" +#include "SHResourceMeta.h" + +namespace SHADE +{ + /**************************************************************************** + * \brief Default constructor + ****************************************************************************/ + SHResourceMeta::SHResourceMeta() noexcept : id{ 0 }, type{ResourceType::INVALID} + { + + } + + /**************************************************************************** + * \param copy + + * \brief copy constructor + ****************************************************************************/ + SHResourceMeta::SHResourceMeta(SHResourceMeta const& ref) noexcept + { + ver = ref.ver; + id = ref.id; + type = ref.type; + } + + /**************************************************************************** + * \param reference + + * \brief copy assignment operator overload + ****************************************************************************/ + SHResourceMeta& SHResourceMeta::operator=(SHResourceMeta const& ref) noexcept + { + ver = ref.ver; + id = ref.id; + type = ref.type; + + return *this; + } + + /**************************************************************************** + * \param std::string representation for meta resource file version + + * \brief Set meta version for data file + ****************************************************************************/ + void SHResourceMeta::SetVersion(ResourceMetaVersion vers) noexcept + { + ver = vers; + } + + /**************************************************************************** + * \param ID of resource + + * \brief Set ID + ****************************************************************************/ + void SHResourceMeta::SetID(ResourceID idin) noexcept + { + this->id = idin; + } + + /**************************************************************************** + * \param Enum class value + + * \brief Set Resource Type + ****************************************************************************/ + void SHResourceMeta::SetType(ResourceType rType) noexcept + { + this->type = rType; + } + + /**************************************************************************** + * \brief Get version + ****************************************************************************/ + ResourceMetaVersion SHResourceMeta::GetVersion() const noexcept + { + return ver; + } + + /**************************************************************************** + * \brief Get ID + ****************************************************************************/ + ResourceID SHResourceMeta::GetID() const noexcept + { + return id; + } + + /**************************************************************************** + * \brief Get resource type + ****************************************************************************/ + ResourceType SHResourceMeta::GetType() const noexcept + { + return type; + } +} diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.h b/SHADE_Engine/src/Assets/SHAssetMeta.h new file mode 100644 index 00000000..9f2e6b5c --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetMeta.h @@ -0,0 +1,82 @@ +/****************************************************************************** + * \file SHAssetMeta.h + * \author Loh Xiao Qi + * \brief Class to hold meta data values for resources + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#ifndef SH_RESOURCE_META_H +#define SH_RESOURCE_META_H + +#include "SHAssetMacros.h" + +namespace SHADE +{ + class SHAssetMeta + { + public: + /**************************************************************************** + * \brief Default constructor + ****************************************************************************/ + SHAssetMeta() noexcept; + + /**************************************************************************** + * \param copy + + * \brief copy constructor + ****************************************************************************/ + SHAssetMeta(SHAssetMeta const&) noexcept; + + /**************************************************************************** + * \param reference + + * \brief copy assignment operator overload + ****************************************************************************/ + SHAssetMeta& operator=(SHAssetMeta const&) noexcept; + + /**************************************************************************** + * \param std::string representation for meta resource file version + + * \brief Set meta version for data file + ****************************************************************************/ + void SetVersion(AssetMetaVersion) noexcept; + + /**************************************************************************** + * \param ID of resource + + * \brief Set ID + ****************************************************************************/ + void SetID(AssetID) noexcept; + + /**************************************************************************** + * \param Enum class value + + * \brief Set Asset Type + ****************************************************************************/ + void SetType(AssetType) noexcept; + + /**************************************************************************** + * \brief Get version + ****************************************************************************/ + AssetMetaVersion GetVersion() const noexcept; + + /**************************************************************************** + * \brief Get ID + ****************************************************************************/ + AssetID GetID() const noexcept; + + /**************************************************************************** + * \brief Get resouce type + ****************************************************************************/ + AssetType GetType() const noexcept; + + private: + AssetMetaVersion ver; + AssetID id; + AssetType type; + }; +} + +#endif // !SH_RESOURCE_META_H diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp new file mode 100644 index 00000000..9493f56c --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -0,0 +1,131 @@ +/****************************************************************************** + * \file SHAssetMetaHandler.cpp + * \author Loh Xiao Qi + * \brief Implementations for SHAssetMetaHandler.h + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#include "SHpch.h" +#include "SHAssetMetaHandler.h" +#include +#include + +namespace SHADE +{ + /**************************************************************************** + * \param reference to ifstream file to read line from + * \param reference to string to store line into + + * \brief Helper function to retrieve field value from meta data file + * for processing + ****************************************************************************/ + void GetFieldValue(std::ifstream& file, std::string& line) noexcept + { + line = ""; + std::getline(file, line); + line = line.substr(line.find_last_of(':') + 2, line.length()); + } + + /**************************************************************************** + * \param String containing extension of resource file + + * \brief Get correct resource type from file extension of resource. + ****************************************************************************/ + AssetType SHAssetMetaHandler::GetTypeFromExtension(AssetExtension ext) noexcept + { + for (int i{0}; i < EXTENSIONS->size()) + } + + /**************************************************************************** + * \param String containing extension of resource file + + * \brief Get correct resource type from file extension of resource. + ****************************************************************************/ + AssetExtension SHAssetMetaHandler::GetExtensionFromType(AssetType type) noexcept + { + switch (type) + { + case AssetType::AUDIO: + return AUDIO_EXTENSION; + case AssetType::AUDIO_WAV: + return AUDIO_WAV_EXTENSION; + case AssetType::IMAGE: + return IMAGE_EXTENSION; + case AssetType::SPRITE_SET: + return SPRITE_SET_EXTENSION; + case AssetType::SCRIPT: + return SCRIPT_EXTENSION; + case AssetType::WAYPOINTS_C: + return WAYPOINT_EXTENSION; + case AssetType::PREFAB: + return PREFAB_EXTENSION; + default: + break; + } + + return EXT_DOES_NOT_EXIST; + } + + /**************************************************************************** + * \param Create class containing meta data from meta file + + * \brief path to meta data file + ****************************************************************************/ + SHAssetMeta SHAssetMetaHandler::RetrieveMetaData(AssetPath const& path) noexcept + { + std::ifstream metaFile{ path.string(), std::ios_base::in }; + if (!metaFile.is_open()) + { + // Error unable to open + } + + std::string line; + SHAssetMeta meta; + + // Get file version + GetFieldValue(metaFile, line); + meta.SetVersion(line); + + // Get resource id + GetFieldValue(metaFile, line); + std::stringstream idStream{ line }; + AssetID id; + idStream >> id; + meta.SetID(id); + + // Get resource type + GetFieldValue(metaFile, line); + std::stringstream typeStream{ line }; + AssetTypeMeta type; + typeStream >> type; + meta.SetType(SHAssetMetaHandler::GetTypeFromString(type)); + + metaFile.close(); + + return meta; + } + + /**************************************************************************** + * \param Asset meta data to be written into + * \param Path to be written into + + * \brief Writes meta data into text file + ****************************************************************************/ + void SHAssetMetaHandler::WriteMetaData(SHAssetMeta const& meta, AssetPath const& path) noexcept + { + std::ofstream metaFile{ path, std::ios_base::out }; + + if (!metaFile.is_open()) + { + // Log error + } + + metaFile << "Meta Version: " << meta.GetVersion() << "\n"; + metaFile << "ID: " << meta.GetID() << "\n"; + metaFile << "Type: " << GetStringFromType(meta.GetType()) << std::endl; + metaFile.close(); + } + +} diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.h b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h new file mode 100644 index 00000000..69095600 --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h @@ -0,0 +1,51 @@ +/****************************************************************************** + * \file SHAssetMetaHandler.h + * \author Loh Xiao Qi + * \brief Handler classes for meta data for all resources + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#ifndef SH_RESOURCE_META_HANDLER_H +#define SH_RESOURCE_META_HANDLER_H + +#include "SHAssetMacros.h" +#include "SHAssetMeta.h" + +namespace SHADE +{ + struct SHAssetMetaHandler + { + /**************************************************************************** + * \param String containing extension of resource file + + * \brief Get correct resource type from file extension of resource. + ****************************************************************************/ + static AssetType GetTypeFromExtension(AssetExtension) noexcept; + + /**************************************************************************** + * \param String containing extension of resource file + + * \brief Get correct resource type from file extension of resource. + ****************************************************************************/ + static AssetExtension GetExtensionFromType(AssetType) noexcept; + + /**************************************************************************** + * \param Create class containing meta data from meta file + + * \brief path to meta data file + ****************************************************************************/ + static SHAssetMeta RetrieveMetaData(AssetPath const&) noexcept; + + /**************************************************************************** + * \param Asset meta data to be written into + * \param Path to be written into + + * \brief Writes meta data into text file + ****************************************************************************/ + static void WriteMetaData(SHAssetMeta const&, AssetPath const&) noexcept; + }; +} + +#endif // !SH_RESOURCE_META_HANDLER_H From b674805547ddf16414176e6c502ad9712048f82e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 13:51:11 +0800 Subject: [PATCH 030/793] Added ECS and Component classes for SHADE_Managed --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 18 -- SHADE_Engine/src/Scripting/SHScriptEngine.h | 5 +- SHADE_Managed/SHADE_Managed.vcxproj.filters | 23 ++ SHADE_Managed/src/Components/Component.cxx | 107 ++++++++ SHADE_Managed/src/Components/Component.h++ | 41 +++ SHADE_Managed/src/Components/Component.hxx | 200 ++++++++++++++ SHADE_Managed/src/Engine/ECS.cxx | 255 ++++++++++++++++++ SHADE_Managed/src/Engine/ECS.h++ | 60 +++++ SHADE_Managed/src/Engine/ECS.hxx | 174 ++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 52 ++-- 10 files changed, 883 insertions(+), 52 deletions(-) create mode 100644 SHADE_Managed/src/Components/Component.cxx create mode 100644 SHADE_Managed/src/Components/Component.h++ create mode 100644 SHADE_Managed/src/Components/Component.hxx create mode 100644 SHADE_Managed/src/Engine/ECS.cxx create mode 100644 SHADE_Managed/src/Engine/ECS.h++ create mode 100644 SHADE_Managed/src/Engine/ECS.hxx diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 5f816066..d40605e4 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -60,12 +60,6 @@ namespace SHADE csEngineInit(); // Link events - // - Entity Creation - /*onEntityCreate = [this](const SHEntity& e) - { - csGOLibNotifyNewEntity(e.GetEID()); - }; - ECS::OnEntityCreated += onEntityCreate;*/ // - Entity Destruction /*onEntityDestroy = [this](const SHEntity& e) { @@ -384,18 +378,6 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "DeserialiseScript" ); - csGOLibNotifyNewEntity = dotNet.GetFunctionPtr - ( - DEFAULT_CSHARP_LIB_NAME, - DEFAULT_CSHARP_NAMESPACE + ".GameObjectLibrary", - "NotifyNewGameObject" - ); - csGOLibNotifyDestroyEntity = dotNet.GetFunctionPtr - ( - DEFAULT_CSHARP_LIB_NAME, - DEFAULT_CSHARP_NAMESPACE + ".GameObjectLibrary", - "NotifyDestroyGameObject" - ); csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index bd9fb079..8182da5a 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -212,9 +212,6 @@ namespace SHADE CsScriptDeserialiseFuncPtr csScriptDeserialise = nullptr; CsScriptSerialiseJsonFuncPtr csScriptsSerialiseJson = nullptr; CsScriptSerialiseJsonFuncPtr csScriptDeserialiseJson = nullptr; - // - GameObject Library - CsScriptBasicFuncPtr csGOLibNotifyNewEntity = nullptr; - CsScriptBasicFuncPtr csGOLibNotifyDestroyEntity = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; // Delegates @@ -255,4 +252,4 @@ namespace SHADE static bool fileExists(const std::string_view& filePath); static DWORD execProcess(const std::wstring& path, const std::wstring& args); }; -} // namespace PlushieEngine +} diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters index 776142d3..c1901bac 100644 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ b/SHADE_Managed/SHADE_Managed.vcxproj.filters @@ -1,6 +1,9 @@ + + {6B7DD516-5735-1764-C03C-F0BFAC13B254} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -15,6 +18,12 @@ + + Components + + + Engine + Engine @@ -52,6 +61,12 @@ + + Components + + + Engine + Engine @@ -87,4 +102,12 @@ Utility + + + Components + + + Engine + + \ No newline at end of file diff --git a/SHADE_Managed/src/Components/Component.cxx b/SHADE_Managed/src/Components/Component.cxx new file mode 100644 index 00000000..ccb056c2 --- /dev/null +++ b/SHADE_Managed/src/Components/Component.cxx @@ -0,0 +1,107 @@ +/************************************************************************************//*! +\file Component.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 27, 2021 +\brief Contains the definition of the functions for the Component class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Components/Component.hxx" +// External Dependencies +#include "Engine/ECS.hxx" +// Project Headers +#include "Scripts/ScriptStore.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Component Access Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T BaseComponent::AddComponent() + { + return ECS::AddComponent(owner.GetNativeEntity()); + } + generic + T BaseComponent::GetComponent() + { + return ECS::GetComponent(owner.GetNativeEntity()); + } + generic + void BaseComponent::RemoveComponent() + { + ECS::RemoveComponent(owner.GetNativeEntity()); + } + + /*---------------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T BaseComponent::AddScript() + { + return ScriptStore::AddScript(owner.GetEntity()); + } + generic + T BaseComponent::GetScript() + { + return ScriptStore::GetScript(owner.GetEntity()); + } + + generic + System::Collections::Generic::IEnumerable^ BaseComponent::GetScripts() + { + return ScriptStore::GetScripts(owner.GetEntity()); + } + + generic + void BaseComponent::RemoveScript() + { + ScriptStore::RemoveScript(owner.GetEntity()); + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + BaseComponent::BaseComponent(Entity entity) + : owner { entity } + {} + + /*---------------------------------------------------------------------------------*/ + /* IEquatable */ + /*---------------------------------------------------------------------------------*/ + bool BaseComponent::Equals(BaseComponent^ other) + { + if (other == nullptr) + return false; + return owner == other->owner; + } + + /*---------------------------------------------------------------------------------*/ + /* Object */ + /*---------------------------------------------------------------------------------*/ + bool BaseComponent::Equals(Object^ o) + { + try + { + BaseComponent^ cmp = safe_cast(o); + return Equals(cmp); + } + catch (System::InvalidCastException^) + { + return false; + } + } + + int BaseComponent::GetHashCode() + { + return owner.GetHashCode(); + } +} diff --git a/SHADE_Managed/src/Components/Component.h++ b/SHADE_Managed/src/Components/Component.h++ new file mode 100644 index 00000000..e2a20998 --- /dev/null +++ b/SHADE_Managed/src/Components/Component.h++ @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file Component.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 27, 2021 +\brief Contains the definition of templated functions for the managed Component + classes. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Include +#include "Component.hxx" +// Project includes +#include "Utility/Convert.hxx" +#include "Engine/ECS.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + template + Component::Component(Entity entity) + : BaseComponent { entity } + {} + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + template + typename Component::NativeComponent* Component::GetNativeComponent() + { + return ECS::GetNativeComponent(owner.GetEntity()); + } +} diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx new file mode 100644 index 00000000..4f8e5bab --- /dev/null +++ b/SHADE_Managed/src/Components/Component.hxx @@ -0,0 +1,200 @@ +/************************************************************************************//*! +\file Component.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 27, 2021 +\brief Contains the definition of the managed Component classes with the + declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Engine/ECS_Base/Components/SHComponent.h" +// Project Includes +#include "Engine/Entity.hxx" +#include "Scripts/Script.hxx" + +namespace SHADE +{ + /// + /// Class that serves as the base for a wrapper class to Components in native code. + /// + public ref class BaseComponent : public System::IEquatable + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves the GameObject that this Component belongs to. + /// + property GameObject Owner + { + GameObject get() { return owner; } + } + + /*-----------------------------------------------------------------------------*/ + /* Component Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Component to this GameObject. + /// + /// Type of the Component to add. + /// Reference to the Component that was added. + generic where T : BaseComponent + T AddComponent(); + /// + /// Gets a Component from this GameObject. + /// + /// Type of the Component to get. + /// + /// Reference to the Component or null if this GameObject does not have the + /// specified Component. + /// + generic where T : BaseComponent + T GetComponent(); + /// + /// Removes a Component from this GameObject. If no Component exists to begin + /// with, nothing happens. + /// + /// Type of the Component to get. + generic where T : BaseComponent + void RemoveComponent(); + + /*-----------------------------------------------------------------------------*/ + /* Script Access Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a PlushieScript of the specified type to this GameObject. + /// + /// Type of PlushieScript to add. + /// Reference to the created PlushieScript. + generic where T : ref class, PlushieScript + T AddScript(); + /// + /// Retrieves a PlushieScript of the specified type from this GameObject. + /// If multiple PlushieScripts of the same specified type are added on the same + /// GameObject, this will retrieve the first one added. + /// + /// Type of PlushieScript to add. + /// Reference to the PlushieScript to retrieve. + generic where T : ref class, PlushieScript + T GetScript(); + /// + /// Retrieves a immutable list of PlushieScripts of the specified type from this + /// GameObject. + /// + /// Type of PlushieScripts to Get. + /// Immutable list of PlushieScripts of the specified type. + generic where T : ref class, PlushieScript + System::Collections::Generic::IEnumerable^ GetScripts(); + /// + /// Removes all PlushieScripts of the specified type from this GameObject. + /// + /// Type of PLushieScripts to remove. + generic where T : ref class, PlushieScript + void RemoveScript(); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for BaseComponent to tie it to a specific Entity. + /// Constructors of derived Components should call this Constructor. + /// + /// Entity that this Component will be tied to. + BaseComponent(Entity entity); + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + /// + /// Entity that this Component belongs to. + /// + GameObject owner; + + public: + /*-----------------------------------------------------------------------------*/ + /* IEquatable */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with an object of the same type. + /// + /// The object to compare with. + /// True if both objects are the same. + virtual bool Equals(BaseComponent^ other); + + /*-----------------------------------------------------------------------------*/ + /* Object */ + /*-----------------------------------------------------------------------------*/ + /// + /// Compares equality with another unboxed object. + /// + /// The unboxed object to compare with. + /// True if both objects are the same. + bool Equals(Object^ o) override; + /// + /// Gets a unique hash for this object. + /// + /// Unique hash for this object. + int GetHashCode() override; + }; + + /// + /// C++ template for the BaseComponent class used to generate common template-able + /// functions and types. + /// + /// + /// Type of the native component that this Component wraps. + /// + template + public ref class Component : public BaseComponent + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Type of the native component that this Component wraps. + /// + using NativeComponent = NativeType; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves a pointer to the native unmanaged component that is tied to the + /// Entity described by the owner value. + /// + /// + /// Pointer to the native component. Will be nullptr if it does not exist. + /// + /// + /// Thrown if the internal ID stored by this native component is invalid. + /// + /// + /// Thrown if an attempt to retrieve the native component fails. + /// + NativeComponent* GetNativeComponent(); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for Component to tie it to a specific Entity. + /// Constructors of derived Components should call this Constructor. + /// + /// Entity that this Component will be tied to. + Component(Entity entity); + }; +} + +#include "Component.h++" diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx new file mode 100644 index 00000000..5d63afc8 --- /dev/null +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -0,0 +1,255 @@ +/************************************************************************************//*! +\file ECS.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definition of the functions for the ECS managed static + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "ECS.hxx" +// Standard Library +#include +#include +// External Dependencies +#include "Engine/ECS_Base/System/SHEntityManager.h" +// Project Headers +#include "Utility/Convert.hxx" +#include "Utility/Debug.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Component Manipulation Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T ECS::AddComponent(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to add Component \"" + << msclr::interop::marshal_as(componentType->Name) + << "\" to invalid Entity."; + Debug::LogError(oss.str()); + return T(); + } + + // Add based on the correct component + for each(ComponentSet^ type in componentMap) + { + if (componentType == type->Type) + { + // Attempt to add + type->AddFunction(entity); + + // Return the managed component + return createManagedComponent(entity); + } + } + + std::ostringstream oss; + oss << "[ECS] Failed to add unsupported Component \"" + << Convert::ToNative(componentType->Name) + << "\" to Entity #" + << entity; + Debug::LogError(oss.str()); + return T(); + } + generic + T ECS::GetComponent(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to retrieve Component \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + return T(); + } + + // Get based on the correct component + for each(ComponentSet^ type in componentMap) + { + if (componentType == type->Type) + { + if (type->HasFunction(entity)) + { + return createManagedComponent(entity); + } + else + { + return T(); + } + } + } + + std::ostringstream oss; + oss << "[ECS] Failed to retrieve unsupported Component \"" + << Convert::ToNative(componentType->Name) + << "\" to Entity #" + << entity; + Debug::LogError(oss.str()); + return T(); + } + + generic + T ECS::GetComponentInChildren(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to retrieve Component \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + return T(); + } + + // Get Transform component and get the children list + throw gcnew System::NotImplementedException; + //Pls::Transform* tf = Pls::ECS::GetComponent(entity); + //if (tf == nullptr) + // return T(); + + //// Search direct children first + //for (const auto& child : tf->GetChildren()) + //{ + // T component = GetComponent(child); + // if (component != nullptr) + // return component; + //} + + //// Search their children + //for (const auto& child : tf->GetChildren()) + //{ + // T script = GetComponentInChildren(child); + // if (script != nullptr) + // return script; + //} + + // None here + return T(); + } + + generic + T ECS::EnsureComponent(EntityID entity) + { + if (HasComponent(entity)) + { + AddComponent(entity); + } + + return GetComponent(entity); + } + generic + bool ECS::HasComponent(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to check existence of Component \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + return false; + } + + // Add based on the correct component + for each(ComponentSet^ type in componentMap) + { + if (componentType == type->Type) + { + return type->HasFunction(entity); + } + } + + std::ostringstream oss; + oss << "[ECS] Attempted to check existence of unsupported Component \"" + << msclr::interop::marshal_as(componentType->Name) + << "\" from Entity #" + << entity; + Debug::LogError(oss.str()); + + return false; + } + generic + void ECS::RemoveComponent(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to remove Component \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + } + + // Add based on the correct component + for each(ComponentSet^ type in componentMap) + { + if (componentType == type->Type) + { + type->RemoveFunction(entity); + return; + } + } + + std::ostringstream oss; + oss << "[ECS] Attempted to remove unsupported Component \"" + << msclr::interop::marshal_as(componentType->Name) + << "\" from Entity #" + << entity; + Debug::LogError(oss.str()); + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + static ECS::ECS() + { + // TODO + // componentMap.Add(createComponentSet()); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + generic + T ECS::createManagedComponent(EntityID entity) + { + using namespace System::Reflection; + + array^ params = gcnew array{ Convert::ToCLI(entity) }; + return safe_cast(Activator::CreateInstance + ( + T::typeid, + BindingFlags::Instance | BindingFlags::NonPublic | BindingFlags::CreateInstance, + nullptr, params, nullptr) + ); + } +} diff --git a/SHADE_Managed/src/Engine/ECS.h++ b/SHADE_Managed/src/Engine/ECS.h++ new file mode 100644 index 00000000..b411c8bd --- /dev/null +++ b/SHADE_Managed/src/Engine/ECS.h++ @@ -0,0 +1,60 @@ +/************************************************************************************//*! +\file ECS.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 27, 2021 +\brief Contains the definition of templated functions for the managed Component + classes. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Include +#include "ECS.hxx" +// External Dependencies +#include "Engine/ECS_Base/System/SHComponentManager.h" +#include "Engine/ECS_Base/System/SHEntityManager.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Static Functions */ + /*---------------------------------------------------------------------------------*/ + template + NativeComponent* ECS::GetNativeComponent(Entity entity) + { + // Get native Entity + SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); + + // Entity Validity Check + if (nativeEntity == nullptr) + throw gcnew System::InvalidOperationException("Attempted to get native Component to an invalid Entity."); + + // Null Check + NativeComponent* component = SHComponentManager::GetComponent_s(nativeEntity); + if (component == nullptr) + throw gcnew System::NullReferenceException("Attempted to get a native Component that does not exist."); + + return component; + } + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + template + ECS::ComponentSet ECS::createComponentSet() + { + return ComponentSet + { + ManagedType::typeid, + SHComponentManager::AddComponent, + SHComponentManager::EnsureComponent, + SHComponentManager::HasComponent, + SHComponentManager::RemoveComponent + }; + } +} diff --git a/SHADE_Managed/src/Engine/ECS.hxx b/SHADE_Managed/src/Engine/ECS.hxx new file mode 100644 index 00000000..c0c95aff --- /dev/null +++ b/SHADE_Managed/src/Engine/ECS.hxx @@ -0,0 +1,174 @@ +/************************************************************************************//*! +\file ECS.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2021 +\brief Contains the definitions of the GameObject managed class which define an + abstraction for working with Entities in managed code. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Engine/ECS_Base/System/SHComponentManager.h" +// Project Includes +#include "Components/Component.hxx" + +namespace SHADE +{ + /// + /// Static class which contains functions that map Pls::ECS's Component manipulation + /// functions to managed generic functions. + /// + private ref class ECS abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Component Manipulation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a Component to the specified Entity. + /// + /// Type of the Component to add. + /// + /// Entity object that should have the specified Component added to. + /// + /// Reference to the Component that was added. + generic where T : BaseComponent + static T AddComponent(EntityID entity); + /// + /// Gets a Component from the specified Entity. + /// + /// Type of the Component to get. + /// Entity object to get the Component from. + /// + /// Reference to the Component or null if the Entity does not have the + /// specified Component. + /// + generic where T : BaseComponent + static T GetComponent(EntityID entity); + /// + /// Retrieves the first Component from the specified GameObjectt's children that + /// matches the specified type. + /// + /// Type of the Component to get. + /// Entity object to get the Component from. + /// + /// Reference to the Component or null if the Entity does not have the + /// specified Component. + /// + generic where T : BaseComponent + static T GetComponentInChildren(EntityID entity); + /// + /// Ensures a Component on the specified Entity. + /// + /// Type of the Component to ensure. + /// Entity object to ensure the Component on. + /// Reference to the Component. + generic where T : BaseComponent + static T EnsureComponent(EntityID entity); + /// + /// Checks if the specified Entity has the specified Component. + /// + /// Type of the Component to check for. + /// Entity object to check for the Component. + /// + /// True if the specified Entity has the specified Component. False otherwise. + /// + generic where T : BaseComponent + static bool HasComponent(EntityID entity); + /// + /// Removes a Component from the specified Entity. + /// + /// Type of the Component to remove. + /// + /// Entity object that should have the specified Component removed from/ + /// + generic where T : BaseComponent + static void RemoveComponent(EntityID entity); + + internal: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Pointer to a function for Component manipulation operations. + /// + using ComponentFunc = void(*)(const EntityID&); + using ComponentHasFunc = bool(*)(const EntityID&); + /// + /// Contains a set of Component related data used for resolving operations for + /// each Component. + /// + value struct ComponentSet + { + public: + System::Type^ Type; + ComponentFunc AddFunction; + ComponentHasFunc HasFunction; + ComponentFunc RemoveFunction; + + }; + + /*-----------------------------------------------------------------------------*/ + /* Static Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves a pointer to the native unmanaged component of the specified + /// Entity. + /// + /// + /// Pointer to the native component. Will be nullptr if it does not exist. + /// + /// + /// Thrown if the Entity specified is invalid. + /// + /// + /// Thrown if an attempt to retrieve the native component fails. + /// + template + static NativeComponent* GetNativeComponent(Entity entity); + + private: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Static constructor to initialize static data + /// + static ECS(); + + /*-----------------------------------------------------------------------------*/ + /* Static Data Members */ + /*-----------------------------------------------------------------------------*/ + static System::Collections::Generic::List componentMap; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a ComponentSet for a pair of Native and Managed Components. + /// + /// Type of the Native Component. + /// Type of the Managed Component. + /// ComponentSet for the parameters specified. + template + static ComponentSet createComponentSet(); + /// + /// Creates an instance of the Managed representation of a Component with a + /// native Entity. + /// + /// Type of Component to create. + /// Native Entity that this Component is tied to. + /// The created Managed representation of the Component. + generic where T : BaseComponent + static T createManagedComponent(EntityID entity); + }; +} + +#include "ECS.h++" diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 86329f29..54572559 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -33,8 +33,8 @@ namespace SHADE generic T ScriptStore::AddScript(Entity entity) { - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to add a Script to."); System::Collections::Generic::List ^ entityScriptList; @@ -113,12 +113,9 @@ namespace SHADE generic T ScriptStore::GetScript(Entity entity) { - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) - { + // Check if entity exists + if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); - } - // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) @@ -147,10 +144,8 @@ namespace SHADE T ScriptStore::GetScriptInChildren(Entity entity) { // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) - { + if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); - } // Check if entity exists in the script storage @@ -189,10 +184,8 @@ namespace SHADE System::Collections::Generic::IEnumerable^ ScriptStore::GetScripts(Entity entity) { // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) - { + if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); - } // Create a list to store entries System::Collections::Generic::List^ foundScripts = gcnew System::Collections::Generic::List(); @@ -221,8 +214,8 @@ namespace SHADE } System::Collections::Generic::IEnumerable^ ScriptStore::GetAllScripts(Entity entity) { - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) return nullptr; // Check if entity exists in the script storage @@ -235,8 +228,8 @@ namespace SHADE generic void ScriptStore::RemoveScript(Entity entity) { - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to remove a Script from."); @@ -263,8 +256,8 @@ namespace SHADE } bool ScriptStore::RemoveScript(Entity entity, Script^ script) { - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) { Debug::LogError("[ScriptStore] Attempted to remove a Script from an invalid Entity!"); return false; @@ -292,8 +285,8 @@ namespace SHADE void ScriptStore::RemoveAllScripts(Entity entity) { SAFE_NATIVE_CALL_BEGIN - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) { Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); return; @@ -315,8 +308,8 @@ namespace SHADE void ScriptStore::RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy) { SAFE_NATIVE_CALL_BEGIN - // Check if entity exists and is a valid GameObject - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists + if (!EntityUtils::IsValid(entity)) { Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); return; @@ -393,7 +386,6 @@ namespace SHADE /*if (Application::IsPlaying) { script->OnDestroy(); - }*/ auto entity = script->Owner.GetEntity(); auto scriptList = scripts[script->Owner.GetEntity()]; @@ -498,8 +490,8 @@ namespace SHADE // Create a buffer that we can work with temporarily System::Text::StringBuilder^ jsonString = gcnew System::Text::StringBuilder(); - // Check if entity exists and is a valid GameObject, otherwise nothing - if (!EntityUtils::IsValid(entity) /*|| !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists, otherwise nothing + if (!EntityUtils::IsValid(entity)) return true; @@ -511,7 +503,7 @@ namespace SHADE System::Collections::Generic::List^ scriptList = scripts[entity]; for (int i = 0; i < scriptList->Count; ++i) { - throw gcnew System::NotFiniteNumberException; + throw gcnew System::NotImplementedException; //jsonString->Append(ReflectionUtilities::Serialise(scriptList[i])); // Only add separator if is not last script @@ -536,8 +528,8 @@ namespace SHADE bool ScriptStore::DeserialiseScript(Entity entity, System::String^ json) { SAFE_NATIVE_CALL_BEGIN - // Check if entity exists and is a valid GameObject, otherwise nothing - if (!EntityUtils::IsValid(entity)/* || !GameObjectLibrary::Contains(entity)*/) + // Check if entity exists, otherwise nothing + if (!EntityUtils::IsValid(entity)) return false; // Get the name of the script @@ -670,4 +662,4 @@ namespace SHADE // Check active state return Convert::ToNative(entity).isActive; } -} // namespace SHADE +} From 8b8f0a076d6ae349143dcbbb22949871d0f3fd4f Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 13:57:01 +0800 Subject: [PATCH 031/793] Added const to some functions --- SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp | 12 ++++++---- SHADE_Engine/src/ECS_Base/Entity/SHEntity.h | 22 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp index 6005fb01..08139158 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp @@ -28,7 +28,7 @@ namespace SHADE //SHEntityManager::RemoveEntity(this->entityID); } - EntityID SHEntity::GetEID() noexcept + EntityID SHEntity::GetEID()const noexcept { return this->entityID; } @@ -39,6 +39,10 @@ namespace SHADE SHComponentManager::SetActive(entityID, active); } + bool SHEntity::GetActive(void) const noexcept + { + return isActive; + } void SHEntity::SetParent(SHEntity* newParent) noexcept @@ -53,20 +57,20 @@ namespace SHADE //TODO } - SHEntity* SHEntity::GetParent() noexcept + SHEntity* SHEntity::GetParent()const noexcept { //TODO return nullptr; } - std::vectorconst& SHEntity::GetChildren() noexcept + std::vectorconst& SHEntity::GetChildren()const noexcept { //TODO return std::vector{}; } - std::vectorconst& SHEntity::GetChildrenID() noexcept + std::vectorconst& SHEntity::GetChildrenID()const noexcept { return std::vector{}; } diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h index d499042c..0e00c8af 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h @@ -63,7 +63,7 @@ namespace SHADE * Returns nullptr if the entity does not have such Component. ***************************************************************************/ template - std::enable_if_t, T*> GetComponent() noexcept + std::enable_if_t, T*> GetComponent()const noexcept { return SHComponentManager::GetComponent_s(entityID); @@ -77,7 +77,7 @@ namespace SHADE * \return uint32_t * The entityID of this Entity object. ***************************************************************************/ - EntityID GetEID() noexcept; + EntityID GetEID()const noexcept; /*!************************************************************************* * \brief Set the Active object @@ -91,6 +91,7 @@ namespace SHADE ***************************************************************************/ virtual void SetActive(bool active) noexcept; + bool GetActive(void)const noexcept; /************************************************************************** @@ -124,7 +125,7 @@ namespace SHADE * Returns a pointer to the parent entity. * Returns a nullptr if the parent node is the root node. ***************************************************************************/ - SHEntity* GetParent() noexcept; + SHEntity* GetParent()const noexcept; /************************************************************************** @@ -133,7 +134,7 @@ namespace SHADE * \return * Return a vector of SHEntity pointers of the children belonging to this entity. ***************************************************************************/ - std::vectorconst& GetChildren() noexcept; + std::vectorconst& GetChildren()const noexcept; /************************************************************************** * \brief @@ -141,11 +142,13 @@ namespace SHADE * \return * return a vector of EntityID of the children belonging to this entity. ***************************************************************************/ - std::vectorconst& GetChildrenID() noexcept; - + std::vectorconst& GetChildrenID()const noexcept; + //Name of the entity. This name is non-unique and only used for the editor. std::string name; - bool isActive; + + + private: @@ -156,6 +159,11 @@ namespace SHADE EntityID entityID; + //Entity active state. This should only be set using the SetActive function which will + //set the active state of all components of this entity. + bool isActive; + + }; } From 51fc65b825fc184ef05a46ef2b936b837548c3de Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 14:07:40 +0800 Subject: [PATCH 032/793] Added some typedefs --- SHADE_Engine/src/ECS_Base/SHECSMacros.h | 2 ++ .../src/ECS_Base/System/SHComponentManager.h | 22 ++++++++++++------- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 5 +++++ .../src/ECS_Base/System/SHSystemManager.h | 7 +++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/SHECSMacros.h b/SHADE_Engine/src/ECS_Base/SHECSMacros.h index 5243e20f..0a8971e7 100644 --- a/SHADE_Engine/src/ECS_Base/SHECSMacros.h +++ b/SHADE_Engine/src/ECS_Base/SHECSMacros.h @@ -11,6 +11,8 @@ typedef uint16_t EntityIndex; typedef uint32_t ComponentTypeID; + + const EntityIndex MAX_EID = 51000; diff --git a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h index 2f6ff504..2c747663 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h @@ -25,6 +25,10 @@ namespace SHADE { + + + typedef SHFamilyID ComponentFamily; + class SHComponentManager { private: @@ -36,6 +40,8 @@ namespace SHADE friend struct SHSceneNode; + + /************************************************************************** @@ -225,7 +231,7 @@ namespace SHADE * \return * none ***************************************************************************/ - static void AddComponent(EntityID entityID, uint32_t componentTypeID) noexcept + static void AddComponent(EntityID entityID, ComponentTypeID componentTypeID) noexcept { componentSet.GetSparseSet_ID(componentTypeID)->Add(EntityHandleGenerator::GetIndex(entityID)); @@ -277,7 +283,7 @@ namespace SHADE * \return bool * True if the entity has a component of specified type. ***************************************************************************/ - static bool HasComponent_ID(EntityID entityID, uint32_t componentTypeID) noexcept; + static bool HasComponent_ID(EntityID entityID, ComponentTypeID componentTypeID) noexcept; /*!************************************************************************* @@ -362,7 +368,7 @@ namespace SHADE * \return * ***************************************************************************/ - static void SwapInDenseByIndexHash_ID(EntityIndex index, EntityID hash, uint32_t componentTypeID) noexcept; + static void SwapInDenseByIndexHash_ID(EntityIndex index, EntityID hash, ComponentTypeID componentTypeID) noexcept; @@ -385,7 +391,7 @@ namespace SHADE * \return * The number of components in the component sparse set. ***************************************************************************/ - static EntityIndex ComponentCount_ID(uint32_t componentTypeID) + static EntityIndex ComponentCount_ID(ComponentTypeID componentTypeID) { return componentSet.GetSparseSet_ID(componentTypeID)->Count(); } @@ -402,9 +408,9 @@ namespace SHADE static void SetActive(EntityID entityID, bool active) noexcept; template - static std::enable_if_t<(... && std::is_base_of_v), uint32_t> CreateComponentGroup(uint32_t numOwningComponents) + static std::enable_if_t<(... && std::is_base_of_v), uint32_t> CreateComponentGroup(ComponentTypeID numOwningComponents) { - std::vector templateIDs{ (SHFamilyID::GetID())... }; + std::vector templateIDs{ (ComponentFamily::GetID())... }; for (auto& g : componentGroups) { @@ -421,11 +427,11 @@ namespace SHADE } SHComponentGroup grp; - for (uint32_t i = 0; i < numOwningComponents; ++i) + for (ComponentTypeID i = 0; i < numOwningComponents; ++i) { grp.ownedComponentTypes.push_back(templateIDs[i]); } - for (uint32_t i = 0; i < templateIDs.size(); ++i) + for (ComponentTypeID i = 0; i < templateIDs.size(); ++i) { grp.componentTypeIDs.push_back(templateIDs[i]); } diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 1a304605..817b9718 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -11,8 +11,13 @@ #ifndef SH_SYSTEM_H #define SH_SYSTEM_H + + namespace SHADE { + + + class SHSystem { protected: diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h index d5a4866d..a81370e9 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h @@ -20,11 +20,16 @@ #include #include #include "../System/SHSystem.h" - +#include "../General/SHFamily.h" namespace SHADE { + typedef uint32_t SystemTypeID; + typedef uint32_t SystemVersionID; + typedef uint64_t SystemID; + typedef SHFamilyID SystemFamily; + class SHSystemManager { //type definition for the container we use to store our system From 3b9d14944e5e00c56471ef284218223c8bec1c7e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 13 Sep 2022 14:23:33 +0800 Subject: [PATCH 033/793] SP3-102 Changed all previous references to updated versions. Removed function call to obsolete functons --- SHADE_Engine/src/Assets/SHAssetMacros.h | 18 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 565 +----------------- SHADE_Engine/src/Assets/SHAssetManager.h | 8 +- SHADE_Engine/src/Assets/SHAssetMeta.cpp | 26 +- .../src/Assets/SHAssetMetaHandler.cpp | 34 +- 5 files changed, 62 insertions(+), 589 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index b84165fb..0b82a0f0 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -7,8 +7,8 @@ * or disclosure of this file or its contents without the prior * written consent of Digipen Institute of Technology is prohibited ******************************************************************************/ -#ifndef SH_RESOURCE_MACROS_H -#define SH_RESOURCE_MACROS_H +#ifndef SH_ASSET_MACROS_H +#define SH_ASSET_MACROS_H #include #include @@ -37,11 +37,12 @@ typedef unsigned char AssetTypeMeta; typedef FMOD::Sound* SHSound; // Asset Meta Version -#define RESOURCE_META_VER "1.0" +#define ASSET_META_VER "1.0" // Asset type enum -enum class AssetType : AssetTypeMeta +enum class AssetType : int { + INVALID = -1, AUDIO = 0, SHADER, MATERIAL, @@ -54,7 +55,10 @@ enum class AssetType : AssetTypeMeta AUDIO_WAV }; -// RESOURCE EXTENSIONS +//Directory +#define ASSET_ROOT "./Assets/" + +// ASSET EXTENSIONS #define META_EXTENSION ".shmeta" #define IMAGE_EXTENSION ".png" #define AUDIO_EXTENSION ".ogg" @@ -83,7 +87,7 @@ std::string const EXTENSIONS[] = { // Error flags #define FILE_NOT_FOUND_ERR "FILE NOT FOUND" #define META_NOT_FOUND_ERR "META NOT FOUND" -#define RESOURCE_NOT_FOUND_ERR "RESOURCE NOT FOUND" +#define ASSET_NOT_FOUND_ERR "ASSET NOT FOUND" #define EXT_DOES_NOT_EXIST "TYPE DOES NOT HAVE EXTENSION DEFINED" -#endif // !SH_RESOURCE_MACROS_H +#endif // !SH_ASSET_MACROS_H diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 65acc232..aaaa78ab 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -43,72 +43,6 @@ namespace SHADE return result; } - /**************************************************************************** - * Generate path relative to exe - * - * \param p - std::filesystem::path containing file - * \return std::filesystem::path - containing full relative path - ****************************************************************************/ - AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept - { - if (!IsRecognised(path.extension().string().c_str())) - { - //TODO:ASSERT UNRECOGNISED FILE TYPE - return std::filesystem::path(); - } - - AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str()); - std::string folder; - switch (type) - { - case AssetType::AUDIO: - folder = AUDIO_FOLDER; - break; - case AssetType::AUDIO_WAV: - folder = AUDIO_FOLDER; - break; - case AssetType::IMAGE: - folder = IMAGES_FOLDER; - break; - default: - //TODO:ASSERT UNSUPPORTED FILE TYPE - return std::filesystem::path(); - } - - return std::filesystem::path(RESOURCE_ROOT + folder + path.filename().string()); - } - - /**************************************************************************** - * \brief Deallocates all memory used by image data - ****************************************************************************/ - void SHAssetManager::UnloadImages() noexcept - { - for (auto& [key, value] : imageData) - { - stbi_image_free(value.data); - } - - imageData.clear(); - } - - bool SHAssetManager::UpdateSpriteSetIndices(std::shared_ptr& set) noexcept - { - return SHSpriteSetLibrary::UpdateIndicesAuto(set); - } - - bool SHAssetManager::IsRecognised(char const* ext) noexcept - { - for (auto const& e : EXTENSIONS) - { - if (strcmp(ext, e.c_str()) == 0) - { - return true; - } - } - - return false; - } - /**************************************************************************** * \brief Deallocate all memory used by resource data ****************************************************************************/ @@ -118,7 +52,6 @@ namespace SHADE { SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.GetID()].string().append(META_EXTENSION)); } - UnloadImages(); } /**************************************************************************** @@ -139,6 +72,26 @@ namespace SHADE } } + AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept + { + if (!IsRecognised(path.extension().string().c_str())) + { + //TODO:ASSERT UNRECOGNISED FILE TYPE + return std::filesystem::path(); + } + + AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str()); + std::string folder; + switch (type) + { + default: + //TODO:ASSERT UNSUPPORTED FILE TYPE + return std::filesystem::path(); + } + + return std::filesystem::path(ASSET_ROOT + folder + path.filename().string()); + } + std::vector SHAssetManager::GetIDFromNames(std::initializer_list const& files) noexcept { std::vector result; @@ -256,7 +209,7 @@ namespace SHADE /**************************************************************************** * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM - * RESOURCES CREATED BY THE ENGINE. + * ASSETS CREATED BY THE ENGINE. * * \param type of resource * \param name of resource @@ -268,19 +221,16 @@ namespace SHADE SHAssetMeta meta; meta.SetID(id); meta.SetType(type); - meta.SetVersion(RESOURCE_META_VER); + meta.SetVersion(ASSET_META_VER); std::string folder; switch (type) { - case AssetType::SPRITE_SET: - folder = SPRITE_SET_FOLDER; - break; default: folder = ""; break; } - AssetPath path{ RESOURCE_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; + AssetPath path{ ASSET_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; metaCollection.push_back(meta); pathRegistry[id] = path; @@ -340,7 +290,7 @@ namespace SHADE std::vector metaFiles; std::vector resourceFiles; - SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); + //SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); //std::vector resourceFilesVerified; std::vector resourceFilesNew; @@ -378,404 +328,6 @@ namespace SHADE } - /**************************************************************************** - * \param Asset ID to image resource - - * \brief Gets image raw data from provided ID. - ****************************************************************************/ - SHImageRawData const* SHAssetManager::GetImageRawData(AssetID const& id) noexcept - { - if (imageData.find(id) == imageData.end()) - { - // Error resource does not exist - return 0; - } - else - { - return &imageData[id]; - } - } - - /**************************************************************************** - * \param resource ID - - * \brief Gets image dimensions of image file - ****************************************************************************/ - SHUMathVec2i SHAssetManager::GetImageDimensions(AssetID const& image) noexcept - { - SHImageRawData const* const data = GetImageRawData(image); - if (data != nullptr) - { - return SHUMathVec2i{ data->width, data->height }; - } - return SHUMathVec2i(); - } - - /**************************************************************************** - * \param vector containing resource IDs - - * \brief Checks if all images referred to by resource IDs have the same - * dimensions. To be used when checking images in the same batch - ****************************************************************************/ - bool SHAssetManager::MatchImageFiles(std::vector const& files) noexcept - { - if (files.size() == 0) - { - std::cout << "Nothing to compare. Image files list is empty or doesn't contain enough to compare. " << std::endl; - return false; - } - - if (!imageData.contains(*files.begin())) - { - std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl; - return false; - } - - auto const& firstElement = GetImageRawData(*files.begin()); - for (auto it = files.begin() + 1; it < files.end(); ++it) - { - if (imageData.contains(*it)) - { - if (firstElement->CompareProperties(*GetImageRawData(*it)) == false) - { - std::cout << "Comparison failed. Not all images are the same. " << std::endl; - return false; - } - } - else - { - std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl; - return false; - } - } - return true; - } - - /**************************************************************************** - * \brief Create sprite set with single image. - * - * \param imageName - file name of image - * \return result of creation - ****************************************************************************/ - bool SHAssetManager::AddSpriteSet(std::string const& imageName) noexcept - { - if (spriteSetNameRegistry.find(imageName) == spriteSetNameRegistry.end()) - { - std::shared_ptr ptr = SHSpriteSetLibrary::AddSpriteSet(imageName); - if (ptr != nullptr) - { - AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, imageName) }; - ptr->SetImageRef(filenameRegistry[imageName]); - spriteSetData[id] = ptr; - spriteSetNameRegistry[imageName] = id; - return true; - } - } - return false; - } - - /**************************************************************************** - * \brief Create sprite set with single image (Asset ID). - * - * \param id - resource id of single image - * \return resource id of sprite set created - ****************************************************************************/ - AssetID SHAssetManager::AddSpriteSet(AssetID id) noexcept - { - AssetName newName{ idNameRegistry[id] }; - newName += "SpriteSet"; - if (spriteSetNameRegistry.find(newName) == spriteSetNameRegistry.end()) - { - AssetID ssID{ CreateEmptySpriteSet(newName) }; - if (ssID) - { - std::shared_ptr ptr = spriteSetData[ssID]; - if (ptr != nullptr) - { - ptr->SetImageRef(id); - UpdateSpriteSetIndices(ptr); - SHSpriteSetLibrary::WriteSpriteSet( - ptr, - pathRegistry[ssID] - ); - return ssID; - } - } - } - - return 0; - } - - /**************************************************************************** - * \brief Create empty sprite set without any image references. - * - * \param setName - std::string sprite set name - * \return resource ID of sprite set created - ****************************************************************************/ - AssetID SHAssetManager::CreateEmptySpriteSet(std::string setName) noexcept - { - if (spriteSetNameRegistry.find(setName) == spriteSetNameRegistry.end()) - { - std::shared_ptr ptr = std::make_shared(setName); - if (ptr != nullptr) - { - AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, setName) }; - spriteSetData[id] = ptr; - spriteSetNameRegistry[setName] = id; - return id; - } - } - return 0; - } - - /**************************************************************************** - * \brief Get ID of sprite set by name. - * - * \param name - name of sprite set std::string - * \return resource iD - ****************************************************************************/ - AssetID SHAssetManager::GetSpriteSet(std::string name) noexcept - { - if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end()) - { - return 0; - } - - return spriteSetNameRegistry[name]; - } - - /**************************************************************************** - * \brief Get name of sprite set from resource ID. - * - * \param id - resource id - * \return std::string sprite set name - ****************************************************************************/ - std::string SHAssetManager::GetSpriteSetName(AssetID id) noexcept - { - for (auto const& entry : spriteSetNameRegistry) - { - if (entry.second == id) - { - return entry.first; - } - } - - return std::string("NO SUCH SPRITE SET"); - } - - /**************************************************************************** - * \brief Get data of sprite set with sprite set name. - * - * \param name - std::string sprite set name - * \return pointer to sprite set - ****************************************************************************/ - std::shared_ptr SHAssetManager::GetSpriteSetData(std::string name) noexcept - { - if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end()) - { - return nullptr; - } - return spriteSetData[spriteSetNameRegistry[name]]; - } - - /**************************************************************************** - * \brief Get data of sprite set with sprite set resource id. - * - * \param id - sprite set resource id - * \return pointer to sprite set - ****************************************************************************/ - std::shared_ptr SHAssetManager::GetSpriteSetData(AssetID id) noexcept - { - return spriteSetData[id]; - } - - /**************************************************************************** - * \brief Add event to frame in sprite set. - * - * \param spriteSet - sprite set resource ID - * \param evt - pointer to method in script class - * \param soh - script object handle to script instance object - * \param frame - target frame in sprite set - ****************************************************************************/ - void SHAssetManager::AddSpriteEvent(AssetID spriteSet, MonoMethod* evt, uint32_t soh, size_t frame) noexcept - { - SHSpriteSet& set = *spriteSetData[spriteSet]; - set.ModifyFrameEvent(static_cast(frame), evt, soh); - } - - /**************************************************************************** - * \brief Remove event from frame in sprite set. - * - * \param spriteSet - sprite set resource iD - * \param frame - target frame - ****************************************************************************/ - void SHAssetManager::RemoveSpriteEvent(AssetID spriteSet, size_t frame) noexcept - { - SHSpriteSet& set = *spriteSetData[spriteSet]; - set.ModifyFrameEvent(static_cast(frame), nullptr, 0); - } - - /**************************************************************************** - * \brief Write sprite set to memory in system. - * - * \param id - sprite set resource id - ****************************************************************************/ - void SHAssetManager::SaveSpriteSet(AssetID id) noexcept - { - SHAssetMeta meta; - for (auto const& met : metaCollection) - { - if (met.GetID() == id) - { - meta = met; - break; - } - } - SHSpriteSetLibrary::WriteSpriteSet( - spriteSetData[id], - pathRegistry[id] - ); - } - - /**************************************************************************** - * \brief Update all texture layer indices in sprite set. - ****************************************************************************/ - void SHAssetManager::UpdateAllSpriteSets() noexcept - { - for (auto& data : spriteSetData) - { - SHSpriteSetLibrary::UpdateIndicesAuto(data.second); - } - } - - std::shared_ptr SHAssetManager::GetAtlas(AssetID id) noexcept - { - auto const it = spriteSetData.find(id); - if (it == spriteSetData.end()) - { - return nullptr; - } - - return it->second->GetAtlasData(); - } - - bool SHAssetManager::SliceSpriteFixed(AssetID id, uint32_t cols, uint32_t rows) noexcept - { - std::shared_ptr atlas = nullptr; - - auto const it = spriteSetData.find(id); - if (it == spriteSetData.end()) - { - // TODO error log no sprite set found for data - return false; - } - else - { - atlas = std::make_shared(SHAtlasSlicer::FixedSlice(idNameRegistry[id], imageData[id], cols, rows)); - } - - std::vector slices; - slices.reserve(atlas->slices.size()); - for (auto const& slice : atlas->slices) - { - AssetID newID{ GenerateAssetID() }; - typeRegistry[newID] = AssetType::IMAGE; - idNameRegistry[newID] = slice.name; - nameIDRegistry[slice.name] = newID; - spriteSetNameRegistry[slice.name] = newID; - - slices.emplace_back(newID); - } - - auto& spriteSet = spriteSetData[id]; - spriteSet->SetAtlas(true); - spriteSet->SetIsAnimation(true); - spriteSet->SetAtlasData(atlas); - SHSpriteSetLibrary::UpdateIndicesAuto(spriteSet); - - SHSpriteSetLibrary::WriteSpriteSet( - spriteSet, - pathRegistry[id] - ); - - return true; - } - - bool SHAssetManager::SliceSpriteAuto(AssetID id) noexcept - { - std::shared_ptr atlas = nullptr; - auto const it = spriteSetData.find(id); - if (it == spriteSetData.end()) - { - // TODO error log sprite set does not exist - return false; - } - else - { - atlas = std::make_shared(SHAtlasSlicer::AutoSlice(idNameRegistry[id], imageData[id])); - } - - auto& spriteSet = spriteSetData[id]; - spriteSet->SetAtlas(true); - spriteSet->SetIsAnimation(false); - std::vector slices; - slices.reserve(atlas->slices.size()); - for (auto const& slice : atlas->slices) - { - AssetID newID{ GenerateAssetID() }; - - std::shared_ptr newSpriteSet = std::make_shared(slice.name); - newSpriteSet->SetImageRef(id); - SHSpriteSetLibrary::UpdateIndicesAuto(newSpriteSet); - spriteSetData[newID] = newSpriteSet; - typeRegistry[newID] = AssetType::IMAGE; - idNameRegistry[newID] = slice.name; - nameIDRegistry[slice.name] = newID; - spriteSetNameRegistry[slice.name] = newID; - - slices.emplace_back(newID); - } - spriteSet->SetAtlasData(atlas); - spriteSet->SetNonFixedSlicesID(slices); - - return true; - } - - /**************************************************************************** - * \param Pointer to FMOD system - * \param reference to vector containing class holding sound data - - * \brief Loads all audio resource data into memory and fmod system - ****************************************************************************/ - void SHAssetManager::LoadAllAudio(FMOD::System* system, std::unordered_map& soundList) - { - audioSystem = system; - audioSoundList = &soundList; - - for (auto const& meta : metaCollection) - { - if (meta.GetType() == AssetType::AUDIO || meta.GetType() == AssetType::AUDIO_WAV) - { - char name[256], newName[256]; - SHSound sound; - system->createSound(pathRegistry[meta.GetID()].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound); - - sound->getName(newName, 256); - std::vector::size_type i = 0; - for (auto& snd : soundList) - { - snd.second->getName(name, 256); - if (strcmp(name, newName) == 0) // sound already exists in soundList - { - sound->release(); - } - ++i; - } - soundList.emplace(meta.GetID(),sound); - } - } - } - /**************************************************************************** * \param Path for meta data file * \param Path for resource file @@ -806,7 +358,7 @@ namespace SHADE SHAssetMeta meta; meta.SetID(GenerateAssetID()); meta.SetType(SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string())); - meta.SetVersion(RESOURCE_META_VER); + meta.SetVersion(ASSET_META_VER); metaCollection.push_back(meta); pathRegistry.emplace(meta.GetID(), resource); @@ -829,17 +381,6 @@ namespace SHADE { RetrieveAssets(); LoadAllData(); - - //SHShaderLibrary::Load(); - SHShaderLibrary::Load(); - - // Load all the default meshes - SHMeshLibrary::Load(); - - // Initialize all array textures - SHTexture2DArrayContainer::Init(); - - UpdateAllSpriteSets(); } /**************************************************************************** @@ -849,65 +390,12 @@ namespace SHADE { for (auto const& meta : metaCollection) { - if (meta.GetType() == AssetType::IMAGE) - { - SHImageRawData data; - std::string string{ pathRegistry[meta.GetID()].string() }; - SHImageLibrary::LoadImageFromFile(string, data); - imageData.emplace(meta.GetID(), data); - } - else if (meta.GetType() == AssetType::SPRITE_SET) - { - std::shared_ptr data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[meta.GetID()]); - UpdateSpriteSetIndices(data); - spriteSetNameRegistry[data->GetSpriteSetName()] = meta.GetID(); - spriteSetData.emplace(meta.GetID(), data); - } - else if (meta.GetType() == AssetType::WAYPOINTS_C) - { - std::shared_ptr data = SHWaypointLibrary::LoadWaypointCollection(pathRegistry[meta.GetID()]); - waypointData.emplace(meta.GetID(), data); - } } } void SHAssetManager::LoadData(AssetID id) noexcept { AssetType type{ typeRegistry[id] }; - if (type == AssetType::IMAGE) - { - SHImageRawData data; - std::string string{ pathRegistry[id].string() }; - SHImageLibrary::LoadImageFromFile(string, data); - imageData.emplace(id, data); - SHTexture2DArrayContainer::AddImageToTexture(imageData[id], idNameRegistry[id]); - } - else if (type == AssetType::AUDIO || type == AssetType::AUDIO_WAV) - { - char name[256], newName[256]; - SHSound sound; - audioSystem->createSound(pathRegistry[id].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound); - - sound->getName(newName, 256); - std::vector::size_type i = 0; - for (auto& snd : *audioSoundList) - { - snd.second->getName(name, 256); - if (strcmp(name, newName) == 0) // sound already exists in soundList - { - sound->release(); - } - ++i; - } - audioSoundList->emplace(id,sound); - } - else if (type == AssetType::SPRITE_SET) - { - std::shared_ptr data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[id]); - UpdateSpriteSetIndices(data); - spriteSetNameRegistry[data->GetSpriteSetName()] = id; - spriteSetData.emplace(id, data); - } } /**************************************************************************** @@ -918,7 +406,8 @@ namespace SHADE std::vector metaFiles; std::vector resourceFiles; - SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); + //TODO: Write new function for file manager to loop through all files + //SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); for (auto const& meta : metaFiles) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 16375b4b..217c64ec 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -30,13 +30,7 @@ namespace SHADE ****************************************************************************/ static AssetID GenerateAssetID() noexcept; - /**************************************************************************** - * Generate path relative to exe - * - * \param p - std::filesystem::path containing file - * \return std::filesystem::path - containing full relative path - ****************************************************************************/ - static AssetPath GenerateLocalPath(AssetPath p) noexcept; + static AssetPath GenerateLocalPath(AssetPath path) noexcept; /**************************************************************************** * \brief Deallocate all memory used by resource data diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.cpp b/SHADE_Engine/src/Assets/SHAssetMeta.cpp index e8608159..60fc45d0 100644 --- a/SHADE_Engine/src/Assets/SHAssetMeta.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMeta.cpp @@ -1,21 +1,21 @@ /****************************************************************************** - * \file SHResourceMeta.cpp + * \file SHAssetMeta.cpp * \author Loh Xiao Qi - * \brief Implementation for SHResourceMeta.h + * \brief Implementation for SHAssetMeta.h * * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction * or disclosure of this file or its contents without the prior * written consent of Digipen Institute of Technology is prohibited ******************************************************************************/ #include "SHpch.h" -#include "SHResourceMeta.h" +#include "SHAssetMeta.h" namespace SHADE { /**************************************************************************** * \brief Default constructor ****************************************************************************/ - SHResourceMeta::SHResourceMeta() noexcept : id{ 0 }, type{ResourceType::INVALID} + SHAssetMeta::SHAssetMeta() noexcept : id{ 0 }, type{AssetType::INVALID} { } @@ -25,7 +25,7 @@ namespace SHADE * \brief copy constructor ****************************************************************************/ - SHResourceMeta::SHResourceMeta(SHResourceMeta const& ref) noexcept + SHAssetMeta::SHAssetMeta(SHAssetMeta const& ref) noexcept { ver = ref.ver; id = ref.id; @@ -37,7 +37,7 @@ namespace SHADE * \brief copy assignment operator overload ****************************************************************************/ - SHResourceMeta& SHResourceMeta::operator=(SHResourceMeta const& ref) noexcept + SHAssetMeta& SHAssetMeta::operator=(SHAssetMeta const& ref) noexcept { ver = ref.ver; id = ref.id; @@ -51,7 +51,7 @@ namespace SHADE * \brief Set meta version for data file ****************************************************************************/ - void SHResourceMeta::SetVersion(ResourceMetaVersion vers) noexcept + void SHAssetMeta::SetVersion(AssetMetaVersion vers) noexcept { ver = vers; } @@ -61,7 +61,7 @@ namespace SHADE * \brief Set ID ****************************************************************************/ - void SHResourceMeta::SetID(ResourceID idin) noexcept + void SHAssetMeta::SetID(AssetID idin) noexcept { this->id = idin; } @@ -69,9 +69,9 @@ namespace SHADE /**************************************************************************** * \param Enum class value - * \brief Set Resource Type + * \brief Set Asset Type ****************************************************************************/ - void SHResourceMeta::SetType(ResourceType rType) noexcept + void SHAssetMeta::SetType(AssetType rType) noexcept { this->type = rType; } @@ -79,7 +79,7 @@ namespace SHADE /**************************************************************************** * \brief Get version ****************************************************************************/ - ResourceMetaVersion SHResourceMeta::GetVersion() const noexcept + AssetMetaVersion SHAssetMeta::GetVersion() const noexcept { return ver; } @@ -87,7 +87,7 @@ namespace SHADE /**************************************************************************** * \brief Get ID ****************************************************************************/ - ResourceID SHResourceMeta::GetID() const noexcept + AssetID SHAssetMeta::GetID() const noexcept { return id; } @@ -95,7 +95,7 @@ namespace SHADE /**************************************************************************** * \brief Get resource type ****************************************************************************/ - ResourceType SHResourceMeta::GetType() const noexcept + AssetType SHAssetMeta::GetType() const noexcept { return type; } diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 9493f56c..d18869a9 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -35,7 +35,13 @@ namespace SHADE ****************************************************************************/ AssetType SHAssetMetaHandler::GetTypeFromExtension(AssetExtension ext) noexcept { - for (int i{0}; i < EXTENSIONS->size()) + for (int i{0}; i < EXTENSIONS->size(); ++i) + { + if (ext == EXTENSIONS[i]) + { + return static_cast(i); + } + } } /**************************************************************************** @@ -45,27 +51,7 @@ namespace SHADE ****************************************************************************/ AssetExtension SHAssetMetaHandler::GetExtensionFromType(AssetType type) noexcept { - switch (type) - { - case AssetType::AUDIO: - return AUDIO_EXTENSION; - case AssetType::AUDIO_WAV: - return AUDIO_WAV_EXTENSION; - case AssetType::IMAGE: - return IMAGE_EXTENSION; - case AssetType::SPRITE_SET: - return SPRITE_SET_EXTENSION; - case AssetType::SCRIPT: - return SCRIPT_EXTENSION; - case AssetType::WAYPOINTS_C: - return WAYPOINT_EXTENSION; - case AssetType::PREFAB: - return PREFAB_EXTENSION; - default: - break; - } - - return EXT_DOES_NOT_EXIST; + return EXTENSIONS[static_cast(type)]; } /**************************************************************************** @@ -100,7 +86,7 @@ namespace SHADE std::stringstream typeStream{ line }; AssetTypeMeta type; typeStream >> type; - meta.SetType(SHAssetMetaHandler::GetTypeFromString(type)); + meta.SetType(static_cast(type)); metaFile.close(); @@ -124,7 +110,7 @@ namespace SHADE metaFile << "Meta Version: " << meta.GetVersion() << "\n"; metaFile << "ID: " << meta.GetID() << "\n"; - metaFile << "Type: " << GetStringFromType(meta.GetType()) << std::endl; + metaFile << "Type: " << static_cast(meta.GetType()) << std::endl; metaFile.close(); } From d483916cc59c0cf17ed48677d8d804be74b267c3 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 14:28:32 +0800 Subject: [PATCH 034/793] Changed SystemManager to use SystemID map instead of using a string map --- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 1 + .../src/ECS_Base/System/SHSystemManager.cpp | 11 ------ .../src/ECS_Base/System/SHSystemManager.h | 35 ++++++++++++++----- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 817b9718..dd84fe64 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -55,6 +55,7 @@ namespace SHADE virtual void Exit() = 0; }; + } #endif \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp index 67d6f781..5b861161 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp @@ -19,17 +19,6 @@ namespace SHADE SHSystemManager::SystemContainer SHSystemManager::systemContainer; - SHSystem* SHSystemManager::GetSystem(std::string name) - { - if (systemContainer.find(name) == systemContainer.end()) - { - assert("Get System Error: No system with such name exist."); - return nullptr; - } - - return systemContainer.find(name)->second.get(); - } - void SHSystemManager::Init() noexcept { for (auto& system : systemContainer) diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h index a81370e9..dada878b 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "../System/SHSystem.h" #include "../General/SHFamily.h" @@ -33,7 +34,7 @@ namespace SHADE class SHSystemManager { //type definition for the container we use to store our system - using SystemContainer = std::unordered_map>; + using SystemContainer = std::unordered_map>; private: static SystemContainer systemContainer; @@ -57,14 +58,18 @@ namespace SHADE * none ***************************************************************************/ template - static std::enable_if_t, void> CreateSystem(std::string const& name) + static std::enable_if_t, void> CreateSystem() { - if (systemContainer.find(name) != systemContainer.end()) - { - assert("System Creation Error: System with the same name already exist."); - } + SystemTypeID typeID = SystemFamily::GetID(); - systemContainer.emplace(name, std::make_unique()); + SystemVersionID version = 0; + SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; + while (systemContainer.find(id) != systemContainer.end()) + { + ++version; + SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; + } + systemContainer.emplace(id, std::make_unique()); } @@ -77,7 +82,21 @@ namespace SHADE * \return * Base System pointer. ***************************************************************************/ - static SHSystem* GetSystem(std::string name); + template + static std::enable_if_t, T*> GetSystem(SystemVersionID version = 0) + { + SystemTypeID typeID = SystemFamily::GetID(); + + SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; + + if (systemContainer.find(id) == systemContainer.end()) + { + std::cout << "System Manager error: System Version " << version << " does not exit." << std::endl; + return nullptr; + } + + return (T*)systemContainer.find(id)->second.get(); + } /************************************************************************** * \brief From 0ed5cecbf329a52ca7168871316e6037ce6f7357 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 15:18:56 +0800 Subject: [PATCH 035/793] Fixed ECS references in various files in SHADE_Managed --- SHADE.sln | 1 + SHADE_Application/SHADE_Application.vcxproj | 7 +++- SHADE_Application/premake5.lua | 5 ++- SHADE_Engine/SHADE_Engine.vcxproj | 4 +- SHADE_Engine/premake5.lua | 2 +- SHADE_Engine/src/Scripting/SHScriptEngine.h | 4 +- SHADE_Managed/premake5.lua | 3 +- SHADE_Managed/src/Components/Component.cxx | 6 +-- SHADE_Managed/src/Components/Component.hxx | 32 +++++++-------- SHADE_Managed/src/Engine/ECS.cxx | 2 +- SHADE_Managed/src/Engine/ECS.h++ | 4 +- SHADE_Managed/src/Engine/ECS.hxx | 2 +- SHADE_Managed/src/Engine/Entity.hxx | 2 +- SHADE_Managed/src/Engine/GameObject.cxx | 43 +++++++++----------- SHADE_Managed/src/Engine/GameObject.hxx | 44 ++++++++++----------- SHADE_Managed/src/Scripts/ScriptStore.cxx | 13 +++--- SHADE_Managed/src/Utility/Convert.cxx | 4 -- SHADE_Managed/src/Utility/Convert.hxx | 8 +--- SHADE_Managed/src/Utility/Debug.cxx | 23 +++++------ 19 files changed, 100 insertions(+), 109 deletions(-) diff --git a/SHADE.sln b/SHADE.sln index fadd2bea..fedf0fbb 100644 --- a/SHADE.sln +++ b/SHADE.sln @@ -34,6 +34,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Managed", "SHADE_Mana {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {88F1A057-74BE-FB62-9DD7-E90A890331F1} {C0FF640D-2C14-8DBE-F595-301E616989EF} = {C0FF640D-2C14-8DBE-F595-301E616989EF} {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} + {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} = {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} EndProjectSection EndProject Global diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 11bbb48f..3d7011b4 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -64,7 +64,7 @@ EditAndContinue Disabled false - MultiThreadedDebug + MultiThreadedDebugDLL true stdcpplatest @@ -86,7 +86,7 @@ true false true - MultiThreaded + MultiThreadedDLL true stdcpplatest @@ -114,6 +114,9 @@ {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} + + {16DB1400-829B-9036-4BD6-D9B3B755D512} + diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index c10b1002..c46115b3 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -7,7 +7,7 @@ project "SHADE_Application" systemversion "latest" pchheader "SBpch.h" pchsource "%{prj.location}/src/SBpch.cpp" - staticruntime "on" + staticruntime "off" entrypoint "wWinMainCRTStartup" system ("windows") @@ -33,7 +33,8 @@ project "SHADE_Application" links { - "SHADE_Engine" + "SHADE_Engine", + "SHADE_Managed" } postbuildcommands diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index ca421c40..62beed9f 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -64,7 +64,7 @@ EditAndContinue Disabled false - MultiThreadedDebug + MultiThreadedDebugDLL true stdcpplatest @@ -91,7 +91,7 @@ true false true - MultiThreaded + MultiThreadedDLL true stdcpplatest diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 39866d72..0eb5b93d 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -7,7 +7,7 @@ project "SHADE_Engine" systemversion "latest" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" - staticruntime "on" + staticruntime "off" files { diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 8182da5a..91533c0f 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -16,8 +16,8 @@ of DigiPen Institute of Technology is prohibited. // Project Headers #include "SHDotNetRuntime.h" -#include "Engine/ECS_Base/SHECSMacros.h" -#include "Engine/ECS_Base/Entity/SHEntity.h" +#include "ECS_Base/SHECSMacros.h" +#include "ECS_Base/Entity/SHEntity.h" namespace SHADE { diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 137e950e..835bea1a 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -9,7 +9,7 @@ project "SHADE_Managed" systemversion "latest" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" - staticruntime "on" + staticruntime "off" files { @@ -51,6 +51,7 @@ project "SHADE_Managed" "yaml-cpp", "imgui", "spdlog", + "SHADE_Engine" } warnings 'Extra' diff --git a/SHADE_Managed/src/Components/Component.cxx b/SHADE_Managed/src/Components/Component.cxx index ccb056c2..a6afc5cc 100644 --- a/SHADE_Managed/src/Components/Component.cxx +++ b/SHADE_Managed/src/Components/Component.cxx @@ -28,17 +28,17 @@ namespace SHADE generic T BaseComponent::AddComponent() { - return ECS::AddComponent(owner.GetNativeEntity()); + return ECS::AddComponent(owner.GetEntity()); } generic T BaseComponent::GetComponent() { - return ECS::GetComponent(owner.GetNativeEntity()); + return ECS::GetComponent(owner.GetEntity()); } generic void BaseComponent::RemoveComponent() { - ECS::RemoveComponent(owner.GetNativeEntity()); + ECS::RemoveComponent(owner.GetEntity()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx index 4f8e5bab..670e4e21 100644 --- a/SHADE_Managed/src/Components/Component.hxx +++ b/SHADE_Managed/src/Components/Component.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Engine/ECS_Base/Components/SHComponent.h" +#include "ECS_Base/Components/SHComponent.h" // Project Includes #include "Engine/Entity.hxx" #include "Scripts/Script.hxx" @@ -71,34 +71,34 @@ namespace SHADE /* Script Access Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Adds a PlushieScript of the specified type to this GameObject. + /// Adds a Script of the specified type to this GameObject. /// - /// Type of PlushieScript to add. - /// Reference to the created PlushieScript. - generic where T : ref class, PlushieScript + /// Type of Script to add. + /// Reference to the created Script. + generic where T : ref class, Script T AddScript(); /// - /// Retrieves a PlushieScript of the specified type from this GameObject. - /// If multiple PlushieScripts of the same specified type are added on the same + /// Retrieves a Script of the specified type from this GameObject. + /// If multiple Scripts of the same specified type are added on the same /// GameObject, this will retrieve the first one added. /// - /// Type of PlushieScript to add. - /// Reference to the PlushieScript to retrieve. - generic where T : ref class, PlushieScript + /// Type of Script to add. + /// Reference to the Script to retrieve. + generic where T : ref class, Script T GetScript(); /// - /// Retrieves a immutable list of PlushieScripts of the specified type from this + /// Retrieves a immutable list of Scripts of the specified type from this /// GameObject. /// - /// Type of PlushieScripts to Get. - /// Immutable list of PlushieScripts of the specified type. - generic where T : ref class, PlushieScript + /// Type of Scripts to Get. + /// Immutable list of Scripts of the specified type. + generic where T : ref class, Script System::Collections::Generic::IEnumerable^ GetScripts(); /// - /// Removes all PlushieScripts of the specified type from this GameObject. + /// Removes all Scripts of the specified type from this GameObject. /// /// Type of PLushieScripts to remove. - generic where T : ref class, PlushieScript + generic where T : ref class, Script void RemoveScript(); protected: diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 5d63afc8..a6ea0b96 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -20,7 +20,7 @@ of DigiPen Institute of Technology is prohibited. #include #include // External Dependencies -#include "Engine/ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/System/SHEntityManager.h" // Project Headers #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" diff --git a/SHADE_Managed/src/Engine/ECS.h++ b/SHADE_Managed/src/Engine/ECS.h++ index b411c8bd..e5ede5f2 100644 --- a/SHADE_Managed/src/Engine/ECS.h++ +++ b/SHADE_Managed/src/Engine/ECS.h++ @@ -17,8 +17,8 @@ of DigiPen Institute of Technology is prohibited. // Primary Include #include "ECS.hxx" // External Dependencies -#include "Engine/ECS_Base/System/SHComponentManager.h" -#include "Engine/ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/System/SHComponentManager.h" +#include "ECS_Base/System/SHEntityManager.h" namespace SHADE { diff --git a/SHADE_Managed/src/Engine/ECS.hxx b/SHADE_Managed/src/Engine/ECS.hxx index c0c95aff..72c88e11 100644 --- a/SHADE_Managed/src/Engine/ECS.hxx +++ b/SHADE_Managed/src/Engine/ECS.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Engine/ECS_Base/System/SHComponentManager.h" +#include "ECS_Base/System/SHComponentManager.h" // Project Includes #include "Components/Component.hxx" diff --git a/SHADE_Managed/src/Engine/Entity.hxx b/SHADE_Managed/src/Engine/Entity.hxx index 525522c2..7be9340b 100644 --- a/SHADE_Managed/src/Engine/Entity.hxx +++ b/SHADE_Managed/src/Engine/Entity.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Engine/ECS_Base/Entity/SHEntity.h" +#include "ECS_Base/Entity/SHEntity.h" namespace SHADE { diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 3fe1c92f..de4c614e 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -16,8 +16,10 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "GameObject.hxx" // External Dependencies -#include "Engine/ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/System/SHEntityManager.h" // Project Headers +#include "ECS.hxx" +#include "Scripts/ScriptStore.hxx" namespace SHADE { @@ -74,36 +76,31 @@ namespace SHADE generic T GameObject::AddComponent() { - throw gcnew System::NotImplementedException(); - //return ECS::AddComponent(GetNativeEntity()); + return ECS::AddComponent(entity); } generic T GameObject::GetComponent() { - throw gcnew System::NotImplementedException(); - //return ECS::GetComponent(GetNativeEntity()); + return ECS::GetComponent(entity); } generic T GameObject::GetComponentInChildren() { - throw gcnew System::NotImplementedException(); - //return ECS::GetComponentInChildren(GetNativeEntity()); + return ECS::GetComponentInChildren(entity); } generic T GameObject::EnsureComponent() { - throw gcnew System::NotImplementedException(); - //return ECS::EnsureComponent(GetNativeEntity()); + return ECS::EnsureComponent(entity); } generic void GameObject::RemoveComponent() { - throw gcnew System::NotImplementedException(); - //ECS::RemoveComponent(GetNativeEntity()); + ECS::RemoveComponent(entity); } /*---------------------------------------------------------------------------------*/ @@ -112,36 +109,31 @@ namespace SHADE generic T GameObject::AddScript() { - throw gcnew System::NotImplementedException(); - //return ScriptStore::AddScript(entity); + return ScriptStore::AddScript(entity); } generic T GameObject::GetScript() { - throw gcnew System::NotImplementedException(); - //return ScriptStore::GetScript(entity); + return ScriptStore::GetScript(entity); } generic T GameObject::GetScriptInChildren() { - throw gcnew System::NotImplementedException(); - //return ScriptStore::GetScriptInChildren(entity); + return ScriptStore::GetScriptInChildren(entity); } generic System::Collections::Generic::IEnumerable^ GameObject::GetScripts() { - throw gcnew System::NotImplementedException(); - //return ScriptStore::GetScripts(entity); + return ScriptStore::GetScripts(entity); } generic void GameObject::RemoveScript() { - throw gcnew System::NotImplementedException(); - //ScriptStore::RemoveScript(entity); + ScriptStore::RemoveScript(entity); } /*---------------------------------------------------------------------------------*/ @@ -158,10 +150,13 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Getters */ /*---------------------------------------------------------------------------------*/ - SHEntity GameObject::GetNativeEntity() + SHEntity& GameObject::GetNativeEntity() { - throw gcnew System::NotImplementedException(); - //return Convert::ToNative(entity); + SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); + if (nativeEntity == nullptr) + throw gcnew System::InvalidOperationException("[GameObject] Unable to obtain native Entity for GameObject."); + + return *nativeEntity; } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 0b030354..780b2957 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -22,7 +22,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ - ref class PlushieScript; + ref class Script; ref class BaseComponent; /*---------------------------------------------------------------------------------*/ @@ -158,43 +158,43 @@ namespace SHADE /* Script Access Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Adds a PlushieScript of the specified type to this GameObject. + /// Adds a Script of the specified type to this GameObject. /// - /// Type of PlushieScript to add. - /// Reference to the created PlushieScript. - generic where T : ref class, PlushieScript + /// Type of Script to add. + /// Reference to the created Script. + generic where T : ref class, Script T AddScript(); /// - /// Retrieves a PlushieScript of the specified type from this GameObject. - /// If multiple PlushieScripts of the same specified type are added on the same + /// Retrieves a Script of the specified type from this GameObject. + /// If multiple Scripts of the same specified type are added on the same /// GameObject, this will retrieve the first one added. /// - /// Type of PlushieScript to retrieve. - /// Reference to the PlushieScript to retrieve. - generic where T : ref class, PlushieScript + /// Type of Script to retrieve. + /// Reference to the Script to retrieve. + generic where T : ref class, Script T GetScript(); /// - /// Retrieves a PlushieScript of the specified type from child GameObjects. - /// If multiple PlushieScripts of the same specified type are added on the same + /// Retrieves a Script of the specified type from child GameObjects. + /// If multiple Scripts of the same specified type are added on the same /// child GameObject, this will retrieve the first one added. /// - /// Type of PlushieScript to retrieve. - /// Reference to the PlushieScript to retrieve. - generic where T : ref class, PlushieScript + /// Type of Script to retrieve. + /// Reference to the Script to retrieve. + generic where T : ref class, Script T GetScriptInChildren(); /// - /// Retrieves a immutable list of PlushieScripts of the specified type from this + /// Retrieves a immutable list of Scripts of the specified type from this /// GameObject. /// - /// Type of PlushieScripts to retrieve. - /// Immutable list of PlushieScripts of the specified type. - generic where T : ref class, PlushieScript + /// Type of Scripts to retrieve. + /// Immutable list of Scripts of the specified type. + generic where T : ref class, Script System::Collections::Generic::IEnumerable^ GetScripts(); /// - /// Removes all PlushieScripts of the specified type from this GameObject. + /// Removes all Scripts of the specified type from this GameObject. /// /// Type of PLushieScripts to remove. - generic where T : ref class, PlushieScript + generic where T : ref class, Script void RemoveScript(); internal: @@ -229,7 +229,7 @@ namespace SHADE /// Retrieves the native Entity object that this GameObject represents. /// /// Native Entity object that this GameObject represents. - SHEntity GetNativeEntity(); + SHEntity& GetNativeEntity(); private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 54572559..8a574084 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -21,7 +21,6 @@ of DigiPen Institute of Technology is prohibited. // Project Headers #include "Utility/Debug.hxx" #include "Utility/Convert.hxx" -#include "Tools/SHLogger.h" #include "Script.hxx" #include "Engine/Entity.hxx" @@ -88,7 +87,7 @@ namespace SHADE oss << "[ScriptStore] No Script named " << Convert::ToNative(scriptName) << " found!"; - SHLOG_ERROR(oss.str()); + Debug::LogError(oss.str()); return false; } @@ -104,7 +103,7 @@ namespace SHADE std::ostringstream oss; oss << "[ScriptStore] Failed to add Script named \"" << Convert::ToNative(scriptName) << "\" to Entity #" << entity << "! (" << Convert::ToNative(e->GetType()->Name) << ")"; - SHLOG_ERROR(oss.str()); + Debug::LogError(oss.str()); return false; } return true; @@ -593,7 +592,7 @@ namespace SHADE /* Where */ bool predicateFunc(Pair^ pair) { - return pair->type->IsSubclassOf(PlushieScript::typeid) && !pair->type->IsAbstract; + return pair->type->IsSubclassOf(Script::typeid) && !pair->type->IsAbstract; } /* Select */ @@ -616,7 +615,7 @@ namespace SHADE Func^ resultSelector = gcnew Func(resultSelectorFunc); IEnumerable^ selectManyResult = Enumerable::SelectMany(assemblies, collectionSelector, resultSelector); - /* Where: Are concrete PlushieScripts */ + /* Where: Are concrete Scripts */ Func^ predicate = gcnew Func(predicateFunc); IEnumerable^ whereResult = Enumerable::Where(selectManyResult, predicate); @@ -628,7 +627,7 @@ namespace SHADE std::ostringstream oss; oss << "[ScriptStore] Successfully retrieved references to " << Enumerable::Count(scriptTypeList) << " Script(s) from currently loaded assemblies."; - SHLOG_INFO(oss.str()); + Debug::Log(oss.str()); } void ScriptStore::getGenericMethods() @@ -636,7 +635,7 @@ namespace SHADE addScriptMethod = ScriptStore::typeid->GetMethod("AddScript"); if (addScriptMethod == nullptr) { - SHLOG_ERROR("[ScriptStore] Failed to get MethodInfo of \"AddScript()\". Adding of scripts from native code will fail."); + Debug::LogError("[ScriptStore] Failed to get MethodInfo of \"AddScript()\". Adding of scripts from native code will fail."); } } diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index e9b0c732..2c0b7e65 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -25,10 +25,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ECS Conversions */ /*---------------------------------------------------------------------------------*/ - SHEntity Convert::ToNative(Entity rawId) - { - return *SHEntityManager::GetEntityByID(rawId); - } Entity Convert::ToCLI(SHEntity entity) { return static_cast(entity.GetEID()); diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index 1281ebb4..241e5863 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Engine/ECS_Base/Entity/SHEntity.h" +#include "ECS_Base/Entity/SHEntity.h" // Project Includes #include "Engine/Entity.hxx" @@ -37,12 +37,6 @@ namespace SHADE /* ECS Conversions */ /*-----------------------------------------------------------------------------*/ /// - /// Converts from a managed Entity (UInt32) to a native Entity. - /// - /// Raw ID of an Entity. - /// Native representation of the specified Entity. - static SHEntity ToNative(Entity rawId); - /// /// Converts from a native Entity to a managed Entity (UInt32). /// /// Native Entity to convert from. diff --git a/SHADE_Managed/src/Utility/Debug.cxx b/SHADE_Managed/src/Utility/Debug.cxx index bba0136f..e9234e94 100644 --- a/SHADE_Managed/src/Utility/Debug.cxx +++ b/SHADE_Managed/src/Utility/Debug.cxx @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "Tools/SHLogger.h" // Project Headers #include "Convert.hxx" +#include "SHLog.h" namespace SHADE { @@ -30,11 +31,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void Debug::Log(const std::string& str) { - SHLOG_INFO(str); + SHLog::Info(str); } void Debug::Log(System::String^ str) { - SHLOG_INFO(Convert::ToNative(str)); + SHLog::Info(Convert::ToNative(str)); } void Debug::Log(System::String^ str, Object^ owner) @@ -49,15 +50,15 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] " << Convert::ToNative(str); - SHLOG_INFO(oss.str()); + SHLog::Info(oss.str()); } void Debug::LogWarning(const std::string& str) { - SHLOG_WARNING(str); + SHLog::Warning(str); } void Debug::LogWarning(System::String^ str) { - SHLOG_WARNING(Convert::ToNative(str)); + SHLog::Warning(Convert::ToNative(str)); } void Debug::LogWarning(System::String^ str, Object^ thrower) { @@ -72,15 +73,15 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] " << Convert::ToNative(str); - SHLOG_WARNING(oss.str()); + SHLog::Warning(oss.str()); } void Debug::LogError(const std::string& str) { - SHLOG_ERROR(str); + SHLog::Error(str); } void Debug::LogError(System::String^ str) { - SHLOG_ERROR(Convert::ToNative(str)); + SHLog::Error(Convert::ToNative(str)); } void Debug::LogError(System::String^ str, Object^ thrower) { @@ -90,7 +91,7 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] -> " << Convert::ToNative(str); - SHLOG_ERROR(oss.str()); + SHLog::Error(oss.str()); } void Debug::LogError(System::String^ str, System::String^ throwerName) { @@ -113,12 +114,12 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << Convert::ToNative(exception->ToString()); - SHLOG_ERROR(oss.str()); + SHLog::Error(oss.str()); } void Debug::LogExceptionNative(const std::exception& exception, const std::string& throwerName) { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << exception.what(); - SHLOG_ERROR(oss.str()); + SHLog::Error(oss.str()); } } From e9241feb69608b5cd4f6ceedc958473d0dea6714 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 15:26:23 +0800 Subject: [PATCH 036/793] moved all managers to their own folder --- .../SHComponentManager.cpp | 0 .../{System => Managers}/SHComponentManager.h | 0 .../{System => Managers}/SHEntityManager.cpp | 0 .../{System => Managers}/SHEntityManager.h | 0 .../{System => Managers}/SHSystemManager.cpp | 0 .../{System => Managers}/SHSystemManager.h | 0 SHADE_Engine/src/ECS_Base/System/SHSystem.h | 36 ++++++++++++++++++- 7 files changed, 35 insertions(+), 1 deletion(-) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHComponentManager.cpp (100%) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHComponentManager.h (100%) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHEntityManager.cpp (100%) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHEntityManager.h (100%) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHSystemManager.cpp (100%) rename SHADE_Engine/src/ECS_Base/{System => Managers}/SHSystemManager.h (100%) diff --git a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHComponentManager.cpp rename to SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp diff --git a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHComponentManager.h rename to SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h diff --git a/SHADE_Engine/src/ECS_Base/System/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHEntityManager.cpp rename to SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp diff --git a/SHADE_Engine/src/ECS_Base/System/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHEntityManager.h rename to SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHSystemManager.cpp rename to SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h similarity index 100% rename from SHADE_Engine/src/ECS_Base/System/SHSystemManager.h rename to SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index dd84fe64..dd25db69 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -16,7 +16,7 @@ namespace SHADE { - + class SHSystemManager; class SHSystem { @@ -54,8 +54,42 @@ namespace SHADE ***************************************************************************/ virtual void Exit() = 0; + + protected: + SystemID systemID{}; + }; + + + + + class SHTestSystem : public SHSystem + { + public: + + SHTestSystem() = default; + ~SHTestSystem() = default; + + int value{5}; + + void Init() + { + + } + + void Run(float dt) + { + + } + + void Exit() + { + + } + }; + + } #endif \ No newline at end of file From 8842269c6d3baa4a764e2a9e86bc7a0ae1520616 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 15:36:03 +0800 Subject: [PATCH 037/793] Changed everything to use pragma once --- SHADE_Engine/SHADE_Engine.vcxproj | 12 +++---- SHADE_Engine/SHADE_Engine.vcxproj.filters | 33 ++++++++++--------- .../src/ECS_Base/Components/SHComponent.h | 3 +- .../ECS_Base/Components/SHComponentGroup.cpp | 2 +- .../ECS_Base/Components/SHComponentGroup.h | 7 +--- SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp | 4 +-- SHADE_Engine/src/ECS_Base/Entity/SHEntity.h | 8 ++--- .../src/ECS_Base/General/SHSparseBase.h | 3 +- .../src/ECS_Base/General/SHSparseSet.h | 3 +- .../ECS_Base/General/SHSparseSetContainer.h | 3 +- .../ECS_Base/Managers/SHComponentManager.h | 8 ++--- .../src/ECS_Base/Managers/SHEntityManager.h | 8 +---- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 2 +- .../src/ECS_Base/System/SHSystemRoutine.h | 1 + SHADE_Engine/src/Scene/SHSceneGraph.cpp | 2 +- SHADE_Engine/src/Scene/SHSceneManager.cpp | 6 ++-- 16 files changed, 43 insertions(+), 62 deletions(-) create mode 100644 SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index e54c82ec..663c60aa 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -110,11 +110,11 @@ + + + - - - @@ -196,9 +196,9 @@ - - - + + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7486fad4..19ff17bf 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -13,6 +13,9 @@ {07FEB307-F3F6-D259-1C29-B8DE0881B265} + + {37718753-A387-85E9-ECFE-100B58545671} + {EE037863-5A8F-E527-63A0-681CCFAA4128} @@ -141,21 +144,21 @@ ECS_Base\General + + ECS_Base\Managers + + + ECS_Base\Managers + + + ECS_Base\Managers + ECS_Base - - ECS_Base\System - - - ECS_Base\System - ECS_Base\System - - ECS_Base\System - Engine @@ -393,14 +396,14 @@ ECS_Base\Entity - - ECS_Base\System + + ECS_Base\Managers - - ECS_Base\System + + ECS_Base\Managers - - ECS_Base\System + + ECS_Base\Managers Engine diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h index c9c5e6f1..20335eab 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h @@ -9,8 +9,7 @@ *********************************************************************/ -#ifndef SH_COMPONENT_H -#define SH_COMPONENT_H +#pragma once #include "SHpch.h" #include "../SHECSMacros.h" diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.cpp b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.cpp index 3ccb7778..2627d9fb 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.cpp +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.cpp @@ -14,7 +14,7 @@ #include "SHpch.h" #include "SHComponentGroup.h" -#include "../System/SHComponentManager.h" +#include "../Managers/SHComponentManager.h" namespace SHADE diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h index 3f67aff0..2b20ec13 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h @@ -12,9 +12,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ - -#ifndef SH_COMPONENT_GROUP -#define SH_COMPONENT_GROUP +#pragma once #include "../SHECSMacros.h" #include "../General/SHFamily.h" @@ -180,6 +178,3 @@ namespace SHADE }; } - - -#endif diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp index 08139158..ef613390 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp @@ -9,9 +9,9 @@ *********************************************************************/ #include "SHpch.h" #include "SHEntity.h" -#include "../System/SHEntityManager.h" +#include "../Managers/SHEntityManager.h" //#include "Scene/SHSceneGraph.h" -#include "../System/SHComponentManager.h" +#include "../Managers/SHComponentManager.h" namespace SHADE { diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h index 0e00c8af..ab73f45f 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h @@ -8,12 +8,11 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_ENTITY_H -#define SH_ENTITY_H +#pragma once #include "../SHECSMacros.h" #include "../Components/SHComponent.h" -#include "../System/SHComponentManager.h" +#include "../Managers/SHComponentManager.h" //#include "../../Scene/SHSceneNode.h" @@ -166,6 +165,3 @@ namespace SHADE }; } - - -#endif diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h b/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h index 2deebe74..f83d3052 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h @@ -10,8 +10,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_SPARSE_BASE_H -#define SH_SPARSE_BASE_H +#pragma once #include "../SHECSMacros.h" diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h b/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h index 3473eb37..6dada871 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h @@ -9,8 +9,7 @@ or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_SPARSE_SET_H -#define SH_SPARSE_SET_H +#pragma once #include "../SHECSMacros.h" #include "../General/SHSparseBase.h" diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h b/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h index 8698d1f5..dbba0021 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h @@ -10,8 +10,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_SPARSE_SET_CONTAINER_H -#define SH_SPARSE_SET_CONTAINER_H +#pragma once #include "SHSparseSet.h" #include "SHFamily.h" diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 2c747663..995e8b24 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -12,8 +12,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_ENGINE_H -#define SH_ENGINE_H +#pragma once #include "../General/SHSparseSetContainer.h" #include "../Components/SHComponent.h" @@ -477,7 +476,4 @@ namespace SHADE -} - - -#endif +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index 7afece52..bec60a17 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -12,9 +12,7 @@ or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ - -#ifndef SH_ENTITY_MANAGER_H -#define SH_ENTITY_MANAGER_H +#pragma once #include #include @@ -198,7 +196,3 @@ namespace SHADE } - - - -#endif diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index dd25db69..0d48c721 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -56,7 +56,7 @@ namespace SHADE protected: - SystemID systemID{}; + }; diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -0,0 +1 @@ +#pragma once diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 9c99fb5a..9fddf10e 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -14,7 +14,7 @@ #include "SHSceneGraph.h" // Project Headers -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" #include "Tools/SHLogger.h" #include "Tools/SHException.h" diff --git a/SHADE_Engine/src/Scene/SHSceneManager.cpp b/SHADE_Engine/src/Scene/SHSceneManager.cpp index a60df922..d5223af8 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.cpp +++ b/SHADE_Engine/src/Scene/SHSceneManager.cpp @@ -10,11 +10,11 @@ *********************************************************************/ #include "SHpch.h" #include "SHSceneManager.h" -#include "ECS_Base/System/SHComponentManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" //#include "Input/SHInputManager.h" //#include "Rendering/Window/SHRenderingWindow.h" -#include "ECS_Base/System/SHEntityManager.h" -#include "ECS_Base/System/SHSystemManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" //#include "FRC/SHFrameRateController.h" //#include "ECS_Base/System/SHApplication.h" From f342fdcb950ef3276b73353ae5bd22954ed04893 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 13 Sep 2022 15:36:34 +0800 Subject: [PATCH 038/793] changed more stuff to pragma once --- SHADE_Engine/SHADE_Engine.vcxproj | 1 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 1 + SHADE_Engine/src/ECS_Base/Components/SHComponent.h | 1 - SHADE_Engine/src/ECS_Base/General/SHFamily.h | 9 ++------- SHADE_Engine/src/ECS_Base/General/SHHandleGenerator.h | 8 ++------ SHADE_Engine/src/ECS_Base/General/SHSparseBase.h | 5 +---- SHADE_Engine/src/ECS_Base/General/SHSparseSet.h | 4 +--- .../src/ECS_Base/General/SHSparseSetContainer.h | 3 --- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h | 10 ++-------- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 9 ++------- SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h | 3 +++ 11 files changed, 15 insertions(+), 39 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 663c60aa..1831bff6 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -115,6 +115,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 19ff17bf..70a5b407 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -385,6 +385,7 @@ Tools + diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h index 20335eab..66d1d8c4 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h @@ -117,4 +117,3 @@ namespace SHADE }; } -#endif diff --git a/SHADE_Engine/src/ECS_Base/General/SHFamily.h b/SHADE_Engine/src/ECS_Base/General/SHFamily.h index f97bbe0e..5815703f 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHFamily.h +++ b/SHADE_Engine/src/ECS_Base/General/SHFamily.h @@ -11,8 +11,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_FAMILY_H -#define SH_FAMILY_H +#pragma once #include "../SHECSMacros.h" @@ -81,8 +80,4 @@ namespace SHADE template ComponentTypeID SHFamilyID::currentID = 0; -} - - - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/General/SHHandleGenerator.h b/SHADE_Engine/src/ECS_Base/General/SHHandleGenerator.h index 48ae2132..7c68f66d 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHHandleGenerator.h +++ b/SHADE_Engine/src/ECS_Base/General/SHHandleGenerator.h @@ -11,8 +11,7 @@ or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_HANDLE_GENERATOR_H -#define SH_HANDLE_GENERATOR_H +#pragma once #include #include @@ -299,7 +298,4 @@ namespace SHADE typedef SHHandleGenerator EntityHandleGenerator; -} - - -#endif +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h b/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h index f83d3052..913fca5a 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseBase.h @@ -43,7 +43,4 @@ namespace SHADE }; -} - - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h b/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h index 6dada871..8e096a37 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseSet.h @@ -350,6 +350,4 @@ namespace SHADE } }; -} - -#endif +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h b/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h index dbba0021..8f8814f6 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h +++ b/SHADE_Engine/src/ECS_Base/General/SHSparseSetContainer.h @@ -242,6 +242,3 @@ namespace SHADE }; } - - -#endif diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index dada878b..7d4e8c27 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -10,9 +10,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ - -#ifndef SH_SYSTEM_MANAGER_H -#define SH_SYSTEM_MANAGER_H +#pragma once #include @@ -119,8 +117,4 @@ namespace SHADE }; -} - - - -#endif +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 0d48c721..3a0694e2 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -8,10 +8,7 @@ consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ -#ifndef SH_SYSTEM_H -#define SH_SYSTEM_H - - +#pragma once namespace SHADE { @@ -90,6 +87,4 @@ namespace SHADE }; -} - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h index 6f70f09b..531a62b0 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -1 +1,4 @@ #pragma once + + + From 23a599abe80ede12ae76429e810a18c39509b35c Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 13 Sep 2022 16:34:05 +0800 Subject: [PATCH 039/793] SP3-107 SP3-108 Initial port from 200 Removed unused classes Changing Event package for better ease of use --- SHADE_Engine/SHADE_Engine.vcxproj | 8 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 24 ++++ SHADE_Engine/src/Common/SHCommonTypes.h | 28 ++++ SHADE_Engine/src/Events/SHEvent.cpp | 49 +++++++ SHADE_Engine/src/Events/SHEvent.h | 45 +++++++ SHADE_Engine/src/Events/SHEventManager.cpp | 144 +++++++++++++++++++++ SHADE_Engine/src/Events/SHEventManager.h | 112 ++++++++++++++++ SHADE_Engine/src/Events/SHEventReceiver.h | 35 +++++ SHADE_Engine/src/SHpch.h | 3 + 9 files changed, 447 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/Common/SHCommonTypes.h create mode 100644 SHADE_Engine/src/Events/SHEvent.cpp create mode 100644 SHADE_Engine/src/Events/SHEvent.h create mode 100644 SHADE_Engine/src/Events/SHEventManager.cpp create mode 100644 SHADE_Engine/src/Events/SHEventManager.h create mode 100644 SHADE_Engine/src/Events/SHEventReceiver.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index e54c82ec..8da6f80c 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -102,6 +102,7 @@ + @@ -116,6 +117,9 @@ + + + @@ -200,6 +204,8 @@ + + @@ -286,4 +292,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7486fad4..f0d769f0 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -1,6 +1,9 @@ + + {8EEA3EAC-7A8C-6982-6347-7DD64F88F0D2} + {1AB26817-067F-C322-2F98-B1CA1BC4F8B0} @@ -19,6 +22,9 @@ {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} + + {3A8963B1-262B-8E87-0FE6-A1DBFB2615D8} + {8A8E2B37-7646-6D84-DF4D-46E0CB240875} @@ -117,6 +123,9 @@ + + Common + ECS_Base\Components @@ -159,6 +168,15 @@ Engine + + Events + + + Events + + + Events + Filesystem @@ -405,6 +423,12 @@ Engine + + Events + + + Events + Filesystem diff --git a/SHADE_Engine/src/Common/SHCommonTypes.h b/SHADE_Engine/src/Common/SHCommonTypes.h new file mode 100644 index 00000000..97ef7928 --- /dev/null +++ b/SHADE_Engine/src/Common/SHCommonTypes.h @@ -0,0 +1,28 @@ +/************************************************************************************//*! +\file SHCommonTypes.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the definitions of type alias for commonly used units for + clarity and convenience. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Type used to mark a value that is supposed to represent a size in bytes. + */ + /***********************************************************************************/ + using Byte = size_t; +} diff --git a/SHADE_Engine/src/Events/SHEvent.cpp b/SHADE_Engine/src/Events/SHEvent.cpp new file mode 100644 index 00000000..4ac7c612 --- /dev/null +++ b/SHADE_Engine/src/Events/SHEvent.cpp @@ -0,0 +1,49 @@ +/****************************************************************************** + * \file SHEvent.cpp + * \author Loh Xiao Qi + * \brief Implementation of SHEvent.h Initialise data member of smart pointer + * to package data. Return the package pointer and package type + * accordingly. + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#include "SHpch.h" +#include "SHEvent.h" +#include + +namespace SHADE +{ + /**************************************************************************** + * \param PackagePtr - smart pointer to package data. + + * \brief Constructor for Event. User needs to dynamically allocate memory + * for package data and pass in the smart pointer so the data member + * can be initialised properly. + ****************************************************************************/ + SHEvent::SHEvent(PackagePtr pkg) + : package{ std::move(pkg) } + { + + } + + /**************************************************************************** + * \brief Get pointer to data package. + * + * \return Smart pointer to Package Base, needs to be cast to correct + * derived class. + ****************************************************************************/ + ConstPackagePtr& SHEvent::GetData() const + { + return package; + } + + /**************************************************************************** + * \brief Gets the type of package. + ****************************************************************************/ + SHPackageType SHEvent::GetType() const + { + return package->GetPackageType(); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEvent.h b/SHADE_Engine/src/Events/SHEvent.h new file mode 100644 index 00000000..fc128a17 --- /dev/null +++ b/SHADE_Engine/src/Events/SHEvent.h @@ -0,0 +1,45 @@ +/****************************************************************************** + * \file SHEventBase.h + * \author Loh Xiao Qi + * \brief Event base abstract class declaration + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior written consent + * of Digipen Institute of Technology is prohibited. +******************************************************************************/ +#ifndef SH_EVENT_BASE_H +#define SH_EVENT_BASE_H + +namespace SHADE +{ + class SHEvent + { + public: + /**************************************************************************** + * \param PackagePtr - smart pointer to package data. + + * \brief Constructor for Event. User needs to dynamically allocate memory + * for package data and pass in the smart pointer so the data member + * can be initialised properly. + ****************************************************************************/ + SHEvent(PackagePtr); + + /**************************************************************************** + * \brief Get pointer to data package. + * + * \return Smart pointer to Package Base, needs to be cast to correct + * derived class. + ****************************************************************************/ + PackagePtr const& GetData() const; + + /**************************************************************************** + * \brief Gets the type of package. + ****************************************************************************/ + SHPackageType GetType() const; + private: + PackagePtr package; + }; +} + + +#endif // !SH_EVENT_BASE_H diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp new file mode 100644 index 00000000..b1038da8 --- /dev/null +++ b/SHADE_Engine/src/Events/SHEventManager.cpp @@ -0,0 +1,144 @@ +/****************************************************************************** + * \file SHEventManager.cpp + * \author Loh Xiao Qi + * \brief Function Implmentations for SHEventManager + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior + * written consent of Digipen Institute of Technology is prohibited + ******************************************************************************/ +#include "SHpch.h" +#include "SHEventManager.h" + +namespace SHADE +{ + SHEventManager* SHEventManager::instance; + + /**************************************************************************** + * \brief Ctor and Dtor. Dtor will delete instance of self stored at + * data member instance. + ****************************************************************************/ + SHEventManager::SHEventManager() + { + + } + + /**************************************************************************** + * \brief Exit function to terminate the manager properly and deallocate + * memory. + ****************************************************************************/ + void SHEventManager::Exit() + { + delete instance; + } + + /**************************************************************************** + * \brief Returns singleton instance of event manager in heap memory. If + * instance does not exist, one is created immediately. + ****************************************************************************/ + SHEventManager& SHEventManager::GetEventManagerInstance() + { + // Create instance of event manager and return + if (!instance) + { + instance = new SHEventManager(); + } + + return *instance; + } + + /**************************************************************************** + * \brief Returns function pointer to entry point for events. + ****************************************************************************/ + EventManagerListener SHEventManager::GetListenerFunction() + { + return &(instance->CatchEvent); + } + + /**************************************************************************** + * \param ListenerConstPtr - Const pointer to listener that sent event. + * \param EventType - Templated type for every type of event + + * \brief Receives event from the listeners. + ****************************************************************************/ + void SHEventManager::CatchEvent(SHEvent event) + { + + // Do something with the event + + instance->Broadcast(event); + } + + /**************************************************************************** + * \param ResponseFunction - function pointer from receiver to be passed + * into event manager to be called when events are broadcasted. + * \param SHPackageType - package type that corresponding subscriber is + * subscribing to. + + * \brief Links a function pointer from a subscriber to a particular + * package type + ****************************************************************************/ + void SHEventManager::SubscribeTo(SHPackageType pkgType, ReceiverPtr receiver) + { + SHEventManager::GetEventManagerInstance().RegisterReceiverToType(pkgType, receiver); + } + + void SHEventManager::StaticSubscribeTo(SHPackageType pkgType, ResponseFunction func) + { + SHEventManager::GetEventManagerInstance().RegisterStaticReceiverToType(pkgType, func); + } + + /**************************************************************************** + * \param ReceiverPtr - Pointer to receiver + * \param ListenerConstPtr - Const pointer to listener that receiver is + * subscribing to. + + * \brief Registers receiver as a subscriber to listener in the registry. + ****************************************************************************/ + void SHEventManager::RegisterReceiverToType( + SHPackageType pkgType, ReceiverPtr receiver) + { + if (packageReceiverRegistry.contains(pkgType)) + { + packageReceiverRegistry[pkgType].emplace_back(receiver); + } + else + { + packageReceiverRegistry.emplace(pkgType, std::vector{ receiver }); + } + } + + void SHEventManager::RegisterStaticReceiverToType(SHPackageType pkgType, ResponseFunction func) + { + if (staticPackageReceiverRegistry.contains(pkgType)) + { + staticPackageReceiverRegistry[pkgType].emplace_back(func); + } + else + { + staticPackageReceiverRegistry.emplace(pkgType, std::vector{ func }); + } + } + + /**************************************************************************** + * \param ListenerConstPtr - Const pointer to listener that sent event. + * \param EventType - Event data + + * \brief Broadcast event to all receivers that are subscribed to this + * listener. + ****************************************************************************/ + void SHEventManager::Broadcast(SHEvent const& event) + { + ResponseVec& receivers{ packageReceiverRegistry[event.GetType()] }; + for (auto& receiver : receivers) + { + receiver->Receive(event.GetData()); + } + + auto& funcs{ staticPackageReceiverRegistry[event.GetType()] }; + for (auto func : funcs) + { + func(event.GetData()); + } + } +} diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h new file mode 100644 index 00000000..e8d499dc --- /dev/null +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -0,0 +1,112 @@ +/****************************************************************************** + * \file SHEventManager.h + * \author Loh Xiao Qi + * \brief Class declaration for event manager. + * + * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * or disclosure of this file or its contents without the prior written consent + * of Digipen Institute of Technology is prohibited. +******************************************************************************/ +#ifndef SH_EVENT_MANAGER_H +#define SH_EVENT_MANAGER_H + +#include "SHEvent.h" +#include "SHEventReceiver.h" +#include +#include +#include + +namespace SHADE +{ + using ResponseFunction = std::function; + using ReceiverPtr = std::shared_ptr; + using ResponseVec = std::vector; + using StaticResponseVec = std::vector; + + using EventManagerListener = std::function; + + class SHEventManager + { + public: + /**************************************************************************** + * \brief Ctor and Dtor. Dtor will delete instance of self stored at + * data member instance. + ****************************************************************************/ + SHEventManager(); + + /**************************************************************************** + * \brief Returns singleton instance of event manager in heap memory. If + * instance does not exist, one is created immediately. + ****************************************************************************/ + static SHEventManager& GetEventManagerInstance(); + + /**************************************************************************** + * \brief Returns function pointer to entry point for events. + ****************************************************************************/ + static EventManagerListener GetListenerFunction(); + + /**************************************************************************** + * \brief Exit function to terminate the manager properly and deallocate + * memory. + ****************************************************************************/ + static void Exit(); + + /**************************************************************************** + * \param ListenerConstPtr - Const pointer to listener that sent event. + * \param EventType - Templated type for every type of event + + * \brief Receives event from the listeners. + ****************************************************************************/ + static void CatchEvent(SHEvent); + + /**************************************************************************** + * \param ResponseFunction - function pointer from receiver to be passed + * into event manager to be called when events are broadcasted. + * \param SHPackageType - package type that corresponding subscriber is + * subscribing to. + + * \brief Links a function pointer from a subscriber to a particular + * package type + ****************************************************************************/ + void SubscribeTo(SHPackageType, ReceiverPtr); + + void StaticSubscribeTo(SHPackageType, ResponseFunction); + private: + // Singleton instance + static SHEventManager* instance; + + // Registry for broadcasters and subscribers + std::unordered_map< + SHPackageType, + ResponseVec> packageReceiverRegistry; + + // Registry for static broadcasters and subscribers + std::unordered_map< + SHPackageType, + StaticResponseVec> staticPackageReceiverRegistry; + + /**************************************************************************** + * \param ListenerConstPtr - Const pointer to listener that sent event. + * \param EventType - Event data + + * \brief Broadcast event to all receivers that are subscribed to this + * listener. + ****************************************************************************/ + void Broadcast(SHEvent const&); + + /**************************************************************************** + * \param ReceiverPtr - Pointer to receiver + * \param ListenerConstPtr - Const pointer to listener that receiver is + * subscribing to. + + * \brief Registers receiver as a subscriber to listener in the registry. + ****************************************************************************/ + void RegisterReceiverToType(SHPackageType, ReceiverPtr); + + void RegisterStaticReceiverToType(SHPackageType, ResponseFunction); + + }; + +} + +#endif // !SH_EVENTS_MANAGER_H diff --git a/SHADE_Engine/src/Events/SHEventReceiver.h b/SHADE_Engine/src/Events/SHEventReceiver.h new file mode 100644 index 00000000..387b8a97 --- /dev/null +++ b/SHADE_Engine/src/Events/SHEventReceiver.h @@ -0,0 +1,35 @@ +#ifndef SH_EVENT_RECEIVER_H +#define SH_EVENT_RECEIVER_H + +#include "SHEvent.h" + +namespace SHADE +{ + class SHEventReceiver + { + private: + public: + virtual void Receive(PackagePtr) = 0; + }; + + template + class SHEventReceiverSpec : public SHEventReceiver + { + private: + T* object; + void(T::*callback)(PackagePtr); + + public: + SHEventReceiverSpec(T* obj, void(T::*cb)(PackagePtr)) + :SHEventReceiver(), object{obj}, callback{ cb } + { + + } + + void Receive(PackagePtr evt) + { + (object->*callback)(evt); + } + }; +} +#endif // !SH_EVENT_RECEIVER_H diff --git a/SHADE_Engine/src/SHpch.h b/SHADE_Engine/src/SHpch.h index 0342eedb..43a832f3 100644 --- a/SHADE_Engine/src/SHpch.h +++ b/SHADE_Engine/src/SHpch.h @@ -30,3 +30,6 @@ #include #include #include +#include + +#include "Common/SHCommonTypes.h" From d643fe66b0b17beaebea32fe525f6953f1850c6a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 17:16:36 +0800 Subject: [PATCH 040/793] Fixed errors in SHADE_Managed --- SHADE_Managed/src/Engine/ECS.cxx | 4 ++-- SHADE_Managed/src/Engine/Entity.cxx | 2 +- SHADE_Managed/src/Math/Vector2.hxx | 12 +++++++----- SHADE_Managed/src/Math/Vector3.hxx | 2 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 11 ++++++++++- SHADE_Managed/src/Scripts/ScriptStore.hxx | 2 +- SHADE_Managed/src/Utility/Convert.cxx | 2 +- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index a6ea0b96..5aceceee 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -244,8 +244,8 @@ namespace SHADE { using namespace System::Reflection; - array^ params = gcnew array{ Convert::ToCLI(entity) }; - return safe_cast(Activator::CreateInstance + array^ params = gcnew array{ static_cast(entity) }; + return safe_cast(System::Activator::CreateInstance ( T::typeid, BindingFlags::Instance | BindingFlags::NonPublic | BindingFlags::CreateInstance, diff --git a/SHADE_Managed/src/Engine/Entity.cxx b/SHADE_Managed/src/Engine/Entity.cxx index bd915c42..ba1a31c6 100644 --- a/SHADE_Managed/src/Engine/Entity.cxx +++ b/SHADE_Managed/src/Engine/Entity.cxx @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Entity.hxx" // External Dependencies -#include "Engine/ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/System/SHEntityManager.h" namespace SHADE { diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index c52cdc72..c19828f4 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -16,13 +16,17 @@ of DigiPen Institute of Technology is prohibited. // Standard Libraries #include +// Undefine +#undef min +#undef max + namespace SHADE { /// /// CLR version of the the PlushieEngine's Vector2 class that represents a /// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct. /// - [StructLayout(LayoutKind::Sequential)] + [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] public value struct Vector2 : public System::IEquatable { public: @@ -42,8 +46,7 @@ namespace SHADE /// Shorthand for writing Vector2(double.NegativeInfinity, /// double.NegativeInfinity). /// - static const Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), - std::numeric_limits::lowest()); + static const Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); /// /// Shorthand for writing Vector2(1, 1). /// @@ -52,8 +55,7 @@ namespace SHADE /// Shorthand for writing Vector2(double.PositiveInfinity, /// double.PositiveInfinity). /// - static const Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), - std::numeric_limits::max()); + static const Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); /// /// Shorthand for writing Vector2(1, 0). /// diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index ab05ddc9..fb2fe8fc 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -24,7 +24,7 @@ namespace SHADE /// CLR version of the the PlushieEngine's Vector3 class that represents a /// 3-Dimensional Vector. Designed to closely match Unity's Vector3 struct. /// - [StructLayout(LayoutKind::Sequential)] + [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] public value struct Vector3 : public System::IEquatable { public: diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 8a574084..79a75bda 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -18,6 +18,8 @@ of DigiPen Institute of Technology is prohibited. #include "ScriptStore.hxx" // Standard Libraries #include +// External Dependencies +#include "ECS_Base/System/SHEntityManager.h" // Project Headers #include "Utility/Debug.hxx" #include "Utility/Convert.hxx" @@ -658,7 +660,14 @@ namespace SHADE bool ScriptStore::isEntityActive(Entity entity) { + // Get native Entity + SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); + + // Entity Validity Check + if (nativeEntity == nullptr) + throw gcnew System::InvalidOperationException("Attempted to get native Component to an invalid Entity."); + // Check active state - return Convert::ToNative(entity).isActive; + return nativeEntity->isActive; } } diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 91c98ce9..798c4cb6 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -73,7 +73,7 @@ namespace SHADE /// True if successfully added. False otherwise with the error logged to the /// console. /// - static bool AddScriptViaNameWithRef(Entity entity, System::String^ scriptName, [Out] Script^% createdScript); + static bool AddScriptViaNameWithRef(Entity entity, System::String^ scriptName, [System::Runtime::InteropServices::Out] Script^% createdScript); /// /// Retrieves the first Script from the specified Entity that matches the /// specified type. diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 2c0b7e65..8a8aff70 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Convert.hxx" // External Dependencies -#include "Engine/ECS_Base/System//SHEntityManager.h" +#include "ECS_Base/System//SHEntityManager.h" #include namespace SHADE From 073cf902a93ee444465c079d21804c12efee2687 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 18:37:05 +0800 Subject: [PATCH 041/793] Fixed warnings and errors in Vector2/3 and GameObject --- SHADE_Managed/src/Engine/GameObject.cxx | 4 ++-- SHADE_Managed/src/Engine/GameObject.hxx | 2 +- SHADE_Managed/src/Math/Vector2.cxx | 4 ++-- SHADE_Managed/src/Math/Vector2.hxx | 16 ++++++++-------- SHADE_Managed/src/Math/Vector3.cxx | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index de4c614e..da9343c4 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -139,8 +139,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ - GameObject::GameObject(EntityID entity) - : entity { entity } + GameObject::GameObject(const SHEntity& entity) + : entity { entity.GetEID() } {} GameObject::GameObject(Entity entity) diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 780b2957..723d9cec 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -207,7 +207,7 @@ namespace SHADE /// /// The ECS Entity that this GameObject should represent. /// - GameObject(SHEntity entity); + GameObject(const SHEntity& entity); /// /// Constructor for the GameObject. /// diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index 276c6ea8..d12ec72a 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -204,11 +204,11 @@ namespace SHADE return target; // Calculate new position - const Vector2 DELTA = (target - current).GetNormalised() * maxDistanceDelta; + Vector2 DELTA = (target - current).GetNormalised() * maxDistanceDelta; Vector2 newPos = current + DELTA; // Check if check if is behind or ahead of target - const Vector2 DIFF = target - newPos; + Vector2 DIFF = target - newPos; if (Dot(DELTA, DIFF) < 0.0) { newPos = target; diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index c19828f4..fc01595d 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -37,37 +37,37 @@ namespace SHADE /// /// Shorthand for writing Vector2(0, -1). /// - static const Vector2 Down = Vector2(0.0, -1.0); + static Vector2 Down = Vector2(0.0, -1.0); /// /// Shorthand for writing Vector2(-1, 0). /// - static const Vector2 Left = Vector2(-1.0, 0.0); + static Vector2 Left = Vector2(-1.0, 0.0); /// /// Shorthand for writing Vector2(double.NegativeInfinity, /// double.NegativeInfinity). /// - static const Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); + static Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); /// /// Shorthand for writing Vector2(1, 1). /// - static const Vector2 One = Vector2(1.0, 1.0); + static Vector2 One = Vector2(1.0, 1.0); /// /// Shorthand for writing Vector2(double.PositiveInfinity, /// double.PositiveInfinity). /// - static const Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); + static Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); /// /// Shorthand for writing Vector2(1, 0). /// - static const Vector2 Right = Vector2(1.0, 0.0); + static Vector2 Right = Vector2(1.0, 0.0); /// /// Shorthand for writing Vector2(0, 1). /// - static const Vector2 Up = Vector2(0.0, 1.0); + static Vector2 Up = Vector2(0.0, 1.0); /// /// Shorthand for writing Vector2(0, 0). /// - static const Vector2 Zero = Vector2(0.0, 0.0); + static Vector2 Zero = Vector2(0.0, 0.0); #pragma endregion /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index 4f8ea8b0..e8dc2c2f 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -201,11 +201,11 @@ namespace SHADE return target; // Calculate new position - const Vector3 DELTA = (target - current).GetNormalised() * maxDistanceDelta; + Vector3 DELTA = (target - current).GetNormalised() * maxDistanceDelta; Vector3 newPos = current + DELTA; // Check if check if is behind or ahead of target - const Vector3 DIFF = target - newPos; + Vector3 DIFF = target - newPos; if (Dot(DELTA, DIFF) < 0.0) { newPos = target; From 9c833da88a599852c1ad70cf4e3e0878a4b6dbeb Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 18:42:43 +0800 Subject: [PATCH 042/793] Added implementation for various GameObject functions --- SHADE_Managed/src/Engine/GameObject.cxx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index da9343c4..3896fac5 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -28,7 +28,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ GameObject GameObject::Create() { - throw gcnew System::NotImplementedException(); + return GameObject(SHEntityManager::CreateEntity()); } void GameObject::Destroy(GameObject obj) @@ -47,11 +47,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ System::String^ GameObject::Name::get() { - throw gcnew System::NotImplementedException(); + return Convert::ToCLI(GetNativeEntity().name); + } bool GameObject::IsActiveSelf::get() { - throw gcnew System::NotImplementedException(); + return GetNativeEntity().isActive; } bool GameObject::IsActiveInHierarchy::get() { @@ -63,11 +64,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void GameObject::SetName(System::String^ name) { - throw gcnew System::NotImplementedException(); + GetNativeEntity().name = Convert::ToNative(name); } void GameObject::SetActive(bool active) { - throw gcnew System::NotImplementedException(); + GetNativeEntity().isActive = active; } /*---------------------------------------------------------------------------------*/ From 4ccfd399af1d1936c2c04eb2a8d635327b7edd63 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 13 Sep 2022 19:46:51 +0800 Subject: [PATCH 043/793] Renderpass execution and descriptor set writes --- SHADE_Engine/SHADE_Engine.vcxproj | 4 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 2 + .../Editor/Backend/SHImGuiVulkanBackend.cpp | 28 +++- .../src/Editor/Backend/SHImGuiVulkanBackend.h | 5 +- .../Graphics/Commands/SHVkCommandBuffer.cpp | 5 + .../src/Graphics/Commands/SHVkCommandBuffer.h | 4 +- .../Descriptors/SHDescriptorSetUpdater.cpp | 84 +++++++++++ .../Descriptors/SHDescriptorSetUpdater.h | 60 ++++++++ .../Descriptors/SHVkDescriptorSetGroup.cpp | 107 +++++++++++++- .../Descriptors/SHVkDescriptorSetGroup.h | 132 ++++++++++-------- .../Descriptors/SHVkDescriptorSetLayout.cpp | 5 + .../Descriptors/SHVkDescriptorSetLayout.h | 1 + .../Graphics/Devices/SHVkLogicalDevice.cpp | 16 +++ .../src/Graphics/Devices/SHVkLogicalDevice.h | 3 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 - .../Graphics/RenderGraph/SHRenderGraph.cpp | 86 +++++++++++- .../src/Graphics/RenderGraph/SHRenderGraph.h | 51 ++++++- .../Graphics/Shaders/SHShaderReflected.cpp | 2 +- .../src/Graphics/Shaders/SHShaderReflected.h | 5 +- 19 files changed, 515 insertions(+), 87 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp create mode 100644 SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index c8dbf732..08f58da4 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -128,6 +128,7 @@ + @@ -206,6 +207,7 @@ + @@ -276,4 +278,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 1324473d..8e6c7d90 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -367,6 +367,7 @@ Tools + @@ -550,5 +551,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp index f00a2072..1ec09e05 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -40,7 +40,7 @@ namespace SHADE gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); } */ - static uint32_t __glsl_shader_vert_spv[] = + static std::vector __glsl_shader_vert_spv = { 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, @@ -97,7 +97,7 @@ namespace SHADE fColor = In.Color * texture(sTexture, In.UV.st); } */ - static uint32_t __glsl_shader_frag_spv[] = + static std::vector __glsl_shader_frag_spv = { 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, @@ -137,7 +137,7 @@ namespace SHADE std::array translate; }; - void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice) noexcept + void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex) noexcept { if (ImGui::GetCurrentContext() == nullptr) { @@ -189,7 +189,7 @@ namespace SHADE //Initialize instance auto instance = std::make_unique(); - instance->InitializePipeline(io); + instance->InitializePipeline(io, renderpass, subpassIndex); instance->lastFrameTime = std::chrono::high_resolution_clock::now(); io.UserData = instance.release(); @@ -303,7 +303,7 @@ namespace SHADE io.Fonts->TexID = nullptr; } - void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io) noexcept + void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept { SHVertexInputState vInputState{}; vInputState.AddBinding(false, true, @@ -314,7 +314,23 @@ namespace SHADE } ); - //Handle newPipeline = device->CreatePipeline() + Handle vs = device->CreateShaderModule(__glsl_shader_vert_spv, "main", vk::ShaderStageFlagBits::eVertex, "__glsl_shader_vert_spv"); + Handle fs = device->CreateShaderModule(__glsl_shader_frag_spv, "main", vk::ShaderStageFlagBits::eFragment, "__glsl_shader_frag_spv"); + + SHPipelineLayoutParams pipelineLayoutParams + { + .shaderModules = std::move (std::vector> + { + vs, + fs, + }), + }; + + Handle pipelineLayouot = device->CreatePipelineLayout(pipelineLayoutParams); + Handle newPipeline = device->CreatePipeline(pipelineLayouot, nullptr, renderpass, subpassIndex, SH_PIPELINE_TYPE::GRAPHICS); + newPipeline->GetPipelineState().SetVertexInputState(vInputState); + newPipeline->ConstructPipeline(); + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h index 387d173d..d6ebf84d 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -41,11 +41,10 @@ namespace SHADE std::vector fontsMipOffset; public: void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; - void InitializeRenderpass (void) noexcept; - void InitializePipeline(ImGuiIO& io) noexcept; + void InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept; }; public: - static void CreateInstance(Handle const& logicalDevice) noexcept; + static void CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex) noexcept; static void Render(void) noexcept; diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 0cc9138e..5b2d15fe 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -202,6 +202,11 @@ namespace SHADE vkCommandBuffer.endRenderPass(); } + void SHVkCommandBuffer::NextSubpass(void) noexcept + { + vkCommandBuffer.nextSubpass(commandBufferType == SH_CMD_BUFFER_TYPE::PRIMARY ? vk::SubpassContents::eInline : vk::SubpassContents::eSecondaryCommandBuffers); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 932a0d47..d2171c25 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -96,11 +96,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ void Reset(void); - // Begins and Ends + // Begins, Ends and Nexts void BeginRecording (void) noexcept; void EndRecording (void) noexcept; void BeginRenderpass (Handle const& renderpassHdl, Handle const& framebufferHdl, vk::Offset2D offset = {0, 0}, vk::Extent2D extent = {0, 0}) noexcept; void EndRenderpass (void) noexcept; + void NextSubpass (void) noexcept; // Dynamic State void SetviewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; @@ -124,6 +125,7 @@ namespace SHADE std::vector const& imageMemoryBarriers ) const noexcept; + // Push Constant variable setting template void SetPushConstantVariable(std::string variableName, T const& data) noexcept diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp new file mode 100644 index 00000000..a1b1cbc2 --- /dev/null +++ b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp @@ -0,0 +1,84 @@ +#include "SHpch.h" +#include "SHDescriptorSetUpdater.h" + +namespace SHADE +{ + + SHDescriptorWriteInfo::SHDescriptorWriteInfo(SHDescriptorWriteInfo&& rhs) noexcept + : descImageInfos{ std::move(rhs.descImageInfos) } + , descBufferInfos{ std::move(rhs.descBufferInfos) } + , descTexelBufferInfos{std::move (rhs.descTexelBufferInfos)} + { + + } + + SHDescriptorWriteInfo::SHDescriptorWriteInfo(void) noexcept + : descImageInfos{} + , descBufferInfos{} + , descTexelBufferInfos{} + { + + } + + /***************************************************************************/ + /*! + + \brief + Links the write infos to the vulkan write descriptor sets. + + */ + /***************************************************************************/ + void SHDescriptorSetUpdater::LinkInfoToWriteDescSet(void) noexcept + { + for (uint32_t i = 0; i < writeInfos.size(); ++i) + { + writeDescSets[i].pImageInfo = writeInfos[i].descImageInfos.data(); + writeDescSets[i].pBufferInfo = writeInfos[i].descBufferInfos.data(); + writeDescSets[i].pTexelBufferView = writeInfos[i].descTexelBufferInfos.data(); + } + } + + SHDescriptorWriteInfo& SHDescriptorWriteInfo::operator=(SHDescriptorWriteInfo&& rhs) noexcept + { + if (&rhs == this) + return *this; + + descImageInfos = std::move(rhs.descImageInfos); + descBufferInfos = std::move(rhs.descBufferInfos); + descTexelBufferInfos = std::move(rhs.descTexelBufferInfos); + + return *this; + } + + + SHDescriptorSetUpdater::SHDescriptorSetUpdater(SHDescriptorSetUpdater&& rhs) noexcept + : writeInfos{ std::move(rhs.writeInfos) } + , writeHashMap {std::move (rhs.writeHashMap)} + { + + } + + SHDescriptorSetUpdater::SHDescriptorSetUpdater(void) noexcept + : writeInfos{} + , writeHashMap{} + { + + } + + std::vector const& SHDescriptorSetUpdater::GetWriteDescriptorSets(void) const noexcept + { + return writeDescSets; + } + + SHDescriptorSetUpdater& SHDescriptorSetUpdater::operator=(SHDescriptorSetUpdater&& rhs) noexcept + { + if (&rhs == this) + return *this; + + writeInfos = std::move (rhs.writeInfos); + writeHashMap = std::move (rhs.writeHashMap); + + return *this; + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h new file mode 100644 index 00000000..7a5ae967 --- /dev/null +++ b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include "Graphics/SHVulkanIncludes.h" +#include "Graphics/Shaders/SHShaderReflected.h" + +namespace SHADE +{ + // Vulkan doesn't use all of the information when looking at a writeDescriptorSet. It all + // depends on the descriptor type. This struct plays it safe by having members that would + // accommodate all types of descriptors. + class SHDescriptorWriteInfo + { + //! When we want to update a descriptor that is an image, it goes in here + std::vector descImageInfos; + + //! When we want to update a descriptor that is a buffer, it goes in here + std::vector descBufferInfos; + + //! When we want to update a descriptor that is an texel buffer, it goes in here + std::vector descTexelBufferInfos; + + public: + SHDescriptorWriteInfo (void) noexcept; + SHDescriptorWriteInfo (SHDescriptorWriteInfo&& rhs) noexcept; + SHDescriptorWriteInfo& operator= (SHDescriptorWriteInfo&& rhs) noexcept; + + friend class SHVkDescriptorSetGroup; + friend class SHDescriptorSetUpdater; + }; + + class SHDescriptorSetUpdater + { + private: + //! When we want to update descriptor sets, this will get passed into vkUpdateDescriptorSets. + //! Each write will correspond to a binding from a set. If the binding is a variable + //! sized binding, pImageInfo (e.g.) will point to an array of vk::DescriptorImageInfo. + std::vector writeInfos; + + //! When we want to update a write, we need to use this to identify the index of the write. + std::unordered_map writeHashMap; + + //! We keep this here because we want this to be immediately passable to vkUpdateDescriptorSets + std::vector writeDescSets; + + void LinkInfoToWriteDescSet(void) noexcept; + + public: + SHDescriptorSetUpdater (void) noexcept; + SHDescriptorSetUpdater(SHDescriptorSetUpdater&& rhs) noexcept; + SHDescriptorSetUpdater& operator= (SHDescriptorSetUpdater&& rhs) noexcept; + + public: + std::vector const& GetWriteDescriptorSets (void) const noexcept; + + friend class SHVkDescriptorSetGroup; + }; +} + diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index 6bdc5601..16143aa5 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -42,9 +42,11 @@ namespace SHADE { // Create the layout for each concurrent frame std::vector vkLayouts{ layouts.size() }; - for (auto& layout : layouts) + + //for (auto& layout : layouts) + for (uint32_t i = 0; i < layouts.size(); ++i) { - vkLayouts.push_back(layout->GetVkHandle()); + vkLayouts.push_back(layouts[i]->GetVkHandle()); } // Check for variable descriptor count @@ -67,6 +69,66 @@ namespace SHADE // allocate descriptor sets descSets = device->GetVkLogicalDevice().allocateDescriptorSets(DESC_SET_LAYOUT_CREATE_INFO); + + + + // Now we want to prepare the write descriptor sets for writing later. + for (uint32_t i = 0; i < layouts.size(); ++i) + { + auto const& bindings = layouts[i]->GetBindings(); + for (auto& binding : bindings) + { + BindingAndSetHash writeHash = binding.BindPoint; + writeHash |= static_cast(i) << 32; + + // new write for the binding + updater.writeInfos.emplace_back(); + updater.writeHashMap.try_emplace(writeHash, updater.writeInfos.size() - 1); + auto& writeInfo = updater.writeInfos.back(); + + updater.writeDescSets.emplace_back(); + auto& writeDescSet = updater.writeDescSets.back(); + + // Initialize info for write + writeDescSet.descriptorType = binding.Type; + writeDescSet.dstArrayElement = 0; + writeDescSet.dstSet = descSets[i]; + writeDescSet.dstBinding = binding.BindPoint; + + // Descriptor count for the write descriptor set. Usually this is set to 1, but if binding is variable sized, set to info passed in + uint32_t descriptorCount = (binding.flags & vk::DescriptorBindingFlagBits::eVariableDescriptorCount) ? variableDescCounts[i] : 1; + writeDescSet.descriptorCount = descriptorCount; + + switch (binding.Type) + { + //case vk::DescriptorType::eSampler: + //case vk::DescriptorType::eSampledImage: + case vk::DescriptorType::eCombinedImageSampler: + writeInfo.descImageInfos.resize(descriptorCount); + break; + //case vk::DescriptorType::eStorageImage: + // break; + case vk::DescriptorType::eUniformTexelBuffer: + case vk::DescriptorType::eStorageTexelBuffer: + case vk::DescriptorType::eUniformBuffer: + case vk::DescriptorType::eStorageBuffer: + writeInfo.descImageInfos.resize (descriptorCount); + break; + //case vk::DescriptorType::eUniformBufferDynamic: + // break; + //case vk::DescriptorType::eStorageBufferDynamic: + // break; + //case vk::DescriptorType::eInputAttachment: + // break; + //case vk::DescriptorType::eInlineUniformBlock: + // break; + default: + break; + } + } + } + // Link all the writeDescSet data for vkUpdateDescriptorSets to write to the linked descriptors + updater.LinkInfoToWriteDescSet(); } /***************************************************************************/ @@ -82,4 +144,45 @@ namespace SHADE if (!descSets.empty()) device->GetVkLogicalDevice().freeDescriptorSets(descPool->GetVkHandle(), descSets); } + + /***************************************************************************/ + /*! + + \brief + Modifies a descriptor write info. #NoteToSelf: This function does NOT + need to modify the writeDescSets. Those are already linked before. + + \param imageViewsAndSamplers + Image and view samplers + + */ + /***************************************************************************/ + void SHVkDescriptorSetGroup::ModifyWriteDescImage(uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept + { + // Find the target writeDescSet + BindingAndSetHash writeHash = binding; + writeHash |= static_cast(set) << 32; + auto& writeInfo = updater.writeInfos[updater.writeHashMap.at(writeHash)]; + + if (imageViewsAndSamplers.size() > writeInfo.descImageInfos.size()) + { + SHLOG_ERROR("Attempting write too many descriptors into descriptor set. Failed to write to vk::WriteDescriptorSet. "); + } + + for (uint32_t i = 0; i < imageViewsAndSamplers.size(); ++i) + { + // write sampler and image view + auto& ivs = imageViewsAndSamplers[i]; + writeInfo.descImageInfos[i].imageView = ivs.first; + writeInfo.descImageInfos[i].sampler = ivs.second; + } + } + + + void SHVkDescriptorSetGroup::UpdateDescriptorSet(void) noexcept + { + device->UpdateDescriptorSets(updater.GetWriteDescriptorSets()); + } + + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index b95859bb..9e311e9a 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -1,71 +1,89 @@ - #pragma once +#pragma once // Project Includes #include "Graphics/SHVulkanIncludes.h" #include "Resource/Handle.h" +#include "Graphics/Shaders/SHShaderReflected.h" +#include "SHDescriptorSetUpdater.h" namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ - class SHVkLogicalDevice; - class SHVkDescriptorPool; - class SHVkDescriptorSetLayout; + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkLogicalDevice; + class SHVkDescriptorPool; + class SHVkDescriptorSetLayout; - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// + /// + class SHVkDescriptorSetGroup + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ /// - /// + /// Constructs a Descriptor Set with the specified layout using the specified + /// pool meant for use with the specified surface. This Set will be created with + /// multiple Vulkan Descriptor Set objects based on the max number of concurrent + /// frames for the specified surface. /// - class SHVkDescriptorSetGroup - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*-----------------------------------------------------------------------------*/ - /// - /// Constructs a Descriptor Set with the specified layout using the specified - /// pool meant for use with the specified surface. This Set will be created with - /// multiple Vulkan Descriptor Set objects based on the max number of concurrent - /// frames for the specified surface. - /// - /// Vulkan logical device used to create the Set. - /// Descriptor Pool used to create the Set. - /// Descriptor Set Layout to create the Set with. - SHVkDescriptorSetGroup(Handle deviceHdl, Handle pool, - std::vector> const& layouts, - std::vector const& variableDescCounts); - SHVkDescriptorSetGroup(const SHVkDescriptorSetGroup&) = delete; - SHVkDescriptorSetGroup(SHVkDescriptorSetGroup&& rhs) noexcept = default; - /// - /// Destructor which will unload and deallocate all resources for this Descriptor Set. - /// - ~SHVkDescriptorSetGroup() noexcept; + /// Vulkan logical device used to create the Set. + /// Descriptor Pool used to create the Set. + /// Descriptor Set Layout to create the Set with. + SHVkDescriptorSetGroup(Handle deviceHdl, Handle pool, + std::vector> const& layouts, + std::vector const& variableDescCounts); + SHVkDescriptorSetGroup(const SHVkDescriptorSetGroup&) = delete; + SHVkDescriptorSetGroup(SHVkDescriptorSetGroup&& rhs) noexcept = default; + /// + /// Destructor which will unload and deallocate all resources for this Descriptor Set. + /// + ~SHVkDescriptorSetGroup() noexcept; - /*-----------------------------------------------------------------------------*/ - /* Overloaded Operators */ - /*-----------------------------------------------------------------------------*/ - SHVkDescriptorSetGroup& operator=(const SHVkDescriptorSetGroup&) = delete; - SHVkDescriptorSetGroup& operator=(SHVkDescriptorSetGroup&& rhs) noexcept = default; + /*-----------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------*/ + SHVkDescriptorSetGroup& operator=(const SHVkDescriptorSetGroup&) = delete; + SHVkDescriptorSetGroup& operator=(SHVkDescriptorSetGroup&& rhs) noexcept = default; - /*-----------------------------------------------------------------------------*/ - /* Getter Functions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Retrieves the handle to the Vulkan Descriptor Set handle. - /// - /// Handle to the Vulkan Descriptor Set. - [[nodiscard]] - inline const std::vector& GetVkHandle() { return descSets; } + /*-----------------------------------------------------------------------------*/ + /* Descriptor set writing */ + /*-----------------------------------------------------------------------------*/ + void ModifyWriteDescImage (uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept; + void UpdateDescriptorSet (void) noexcept; - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - Handle device; - Handle descPool; - std::vector descSets; - }; + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves the handle to the Vulkan Descriptor Set handle. + /// + /// Handle to the Vulkan Descriptor Set. + [[nodiscard]] + inline const std::vector& GetVkHandle() { return descSets; } + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + //! Device required to allocate descriptor sets + Handle device; + + //! Descriptor pool to allocate descriptor sets + Handle descPool; + + //! Descriptor sets + std::vector descSets; + + //! for updating descriptor sets. We want to cache this so that we don't create the + //! write structs at runtime. + SHDescriptorSetUpdater updater; + + }; } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp index 36eaa8e8..da1a3645 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp @@ -85,6 +85,11 @@ namespace SHADE device->GetVkLogicalDevice().destroyDescriptorSetLayout(setLayout); } + std::vector const& SHVkDescriptorSetLayout::GetBindings(void) const noexcept + { + return layoutDesc; + } + SHVkDescriptorSetLayout& SHVkDescriptorSetLayout::operator=(SHVkDescriptorSetLayout&& rhs) noexcept { if (&rhs == this) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h index 590fd787..1acba189 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h @@ -96,6 +96,7 @@ namespace SHADE /// /// Handle to the Vulkan Descriptor Set Layout handle. inline const vk::DescriptorSetLayout& GetVkHandle() const { return setLayout; } + std::vector const& GetBindings (void) const noexcept; private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 69e76246..da4947f2 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -552,6 +552,22 @@ namespace SHADE return SHVkInstance::GetResourceManager().Create(GetHandle()); } + /***************************************************************************/ + /*! + + \brief + Writes to descriptor sets. + + \param writeDescSets + Descriptor sets to write to. + + */ + /***************************************************************************/ + void SHVkLogicalDevice::UpdateDescriptorSets(std::vector const& writeDescSets) noexcept + { + vkLogicalDevice.updateDescriptorSets(writeDescSets, {}); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index d50d27f0..c359d1d3 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -38,6 +38,7 @@ namespace SHADE class SHVkFramebuffer; class SHVkImageView; class SHShaderBlockInterface; + class SHVkDescriptorSetGroup; /***************************************************************************/ /*! @@ -179,6 +180,8 @@ namespace SHADE Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; + void UpdateDescriptorSets (std::vector const& writeDescSets) noexcept; + /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index d9761adf..4d4ca4f4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -84,8 +84,6 @@ namespace SHADE //commandBuffers[i] = commandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); // works } - - descPool = device->CreateDescriptorPools(); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 68af135f..8a7ce8a0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -209,9 +209,10 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHSubpass::SHSubpass(std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHSubpass::SHSubpass(Handle const& parent, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } + , parentNode{ parent } { } @@ -333,6 +334,38 @@ namespace SHADE inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); } + void SHRenderGraphNode::SHSubpass::Execute(Handle& commandBuffer) noexcept + { + // Draw all the batches + + // Draw all the exterior draw calls + for (auto& drawCall : exteriorDrawCalls) + { + drawCall(commandBuffer); + } + } + + void SHRenderGraphNode::SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept + { + exteriorDrawCalls.push_back(newDrawCall); + } + + /***************************************************************************/ + /*! + + \brief + Getter for parent renderpass. + + \return + Returns the parent renderpass the subpass belongs to. + + */ + /***************************************************************************/ + Handle const& SHRenderGraphNode::SHSubpass::GetParentNode(void) const noexcept + { + return parentNode; + } + /***************************************************************************/ /*! @@ -512,11 +545,26 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager.Create(&resourceAttachmentMapping, ptrToResources)); - subpassIndexing.try_emplace(subpassName, subpasses.size() - 1); + subpasses.emplace_back(resourceManager.Create(GetHandle(), &resourceAttachmentMapping, ptrToResources)); + subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); return subpasses.at(subpassIndexing[subpassName]); } + void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept + { + commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); + + for (auto& subpass : subpasses) + { + subpass->Execute(commandBuffer); + + // Go to next subpass + commandBuffer->NextSubpass(); + } + + commandBuffer->EndRenderpass(); + } + /***************************************************************************/ /*! @@ -560,7 +608,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint32_t levels /*= 1*/, vk::ImageCreateFlagBits createFlags /*= {}*/) + void SHRenderGraph::AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint8_t levels /*= 1*/, vk::ImageCreateFlagBits createFlags /*= {}*/) { // If we set to if (w == static_cast(-1) && h == static_cast(-1)) @@ -832,6 +880,20 @@ namespace SHADE } } + /***************************************************************************/ + /*! + + \brief + Configures command pools and command buffers. + + */ + /***************************************************************************/ + void SHRenderGraph::ConfigureCommands(void) noexcept + { + commandPool = logicalDeviceHdl->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + commandBuffers.resize(static_cast(swapchainHdl->GetNumImages())); + } + /***************************************************************************/ /*! @@ -929,7 +991,7 @@ namespace SHADE } nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources)); - nodeIndexing.emplace(nodeName, nodes.size() - 1); + nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } @@ -952,6 +1014,20 @@ namespace SHADE ConfigureSubpasses(); ConfigureRenderpasses(); ConfigureFramebuffers(); + ConfigureCommands(); + } + + void SHRenderGraph::Execute(uint32_t frameIndex) noexcept + { + auto& cmdBuffer = commandBuffers[frameIndex]; + cmdBuffer->BeginRecording(); + + for (auto& node : nodes) + { + node->Execute(commandBuffers[frameIndex], frameIndex); + } + + cmdBuffer->EndRenderpass(); } Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index dc6b7c42..ea913baa 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -15,6 +15,8 @@ namespace SHADE class SHVkImage; class SHVkImageView; class SHVkFramebuffer; + class SHVkCommandPool; + class SHVkCommandBuffer; // Used for attachment description creation for renderpass node enum class SH_ATT_DESC_TYPE @@ -72,25 +74,44 @@ namespace SHADE friend class SHRenderGraph; }; - class SHRenderGraphNode + class SHRenderGraphNode : public ISelfHandle { public: class SHSubpass { public: - SHSubpass(std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + /*-----------------------------------------------------------------------*/ + /* CTORS AND DTORS */ + /*-----------------------------------------------------------------------*/ + SHSubpass(Handle const& parent, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + // Preparation functions void AddColorOutput (std::string resourceToReference) noexcept; void AddDepthOutput (std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; void AddInput (std::string resourceToReference) noexcept; + + // Runtime functions + void Execute (Handle& commandBuffer) noexcept; + void AddExteriorDrawCalls (std::function&)> const& newDrawCall) noexcept; + + /*-----------------------------------------------------------------------*/ + /* GETTERS AND SETTERS */ + /*-----------------------------------------------------------------------*/ + Handle const& GetParentNode (void) const noexcept; private: /*---------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*---------------------------------------------------------------------*/ + //! The parent renderpass that this subpass belongs to + Handle parentNode; + //! Color attachments std::vector colorReferences; @@ -106,6 +127,14 @@ namespace SHADE //! Pointer to resources in the render graph (for getting handle IDs) std::unordered_map> const* ptrToResources; + //! Sometimes there exists entities that we want to render onto a render target + //! but don't want it to come from the batching system. An example would be ImGUI. + //! For these entities we want to link a function from the outside and draw them + //! after we draw everything from the batch. Because of this, these draw calls + //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING + //! COMPLEX. + std::vector&)>> exteriorDrawCalls; + friend class SHRenderGraphNode; friend class SHRenderGraph; }; @@ -179,6 +208,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle AddSubpass (std::string subpassName) noexcept; + void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -198,6 +228,7 @@ namespace SHADE void ConfigureSubpasses (void) noexcept; void ConfigureRenderpasses (void) noexcept; void ConfigureFramebuffers (void) noexcept; + void ConfigureCommands (void) noexcept; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ @@ -219,6 +250,13 @@ namespace SHADE //! Resource library for graph handles ResourceManager resourceManager; + //! Command pool for the render graph + Handle commandPool; + + //! Command buffers for the render graph + std::vector> commandBuffers; + + public: /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ @@ -228,10 +266,11 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; - void AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint32_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); - Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; - void Generate (void) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; + void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); + Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; + void Generate (void) noexcept; + void Execute (uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp index 8beb7d98..1e5fb074 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp @@ -189,7 +189,7 @@ namespace SHADE Handle SHShaderDescriptorBindingInfo::GetShaderBlockInterface(uint32_t set, uint32_t binding) const noexcept { - SHShaderDescriptorBindingInfo::BindingAndSetHash hash = binding; + BindingAndSetHash hash = binding; hash |= static_cast(set) << 32; if (blockInterfaces.contains(hash)) return blockInterfaces.at(hash); diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h index 1250b54f..88c7a2e1 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h @@ -9,11 +9,10 @@ namespace SHADE { + using BindingAndSetHash = uint64_t; + struct SHShaderDescriptorBindingInfo { - public: - using BindingAndSetHash = uint64_t; - private: /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ From cfa12eb86515cabca60441dfaf6579c5089050f4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 20:28:34 +0800 Subject: [PATCH 044/793] Added NOMINMAX to SHADE_Managed --- SHADE_Managed/premake5.lua | 6 ++++++ SHADE_Managed/src/Math/Vector2.cxx | 3 --- SHADE_Managed/src/Math/Vector2.hxx | 4 ---- SHADE_Managed/src/Math/Vector3.cxx | 3 --- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 835bea1a..b68fadb6 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -39,6 +39,12 @@ project "SHADE_Managed" "yaml-cpp", "imgui", "spdlog", + "SHADE_Engine" + } + + defines + { + "NOMINMAX" } flags diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index d12ec72a..d40e2323 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -20,9 +20,6 @@ of DigiPen Institute of Technology is prohibited. #include // Project Headers #include "Math.hxx" -// Undefinitions -#undef min -#undef max namespace SHADE { diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index fc01595d..26d4ae6a 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -16,10 +16,6 @@ of DigiPen Institute of Technology is prohibited. // Standard Libraries #include -// Undefine -#undef min -#undef max - namespace SHADE { /// diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index e8dc2c2f..26ff5a72 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -20,9 +20,6 @@ of DigiPen Institute of Technology is prohibited. #include // Project Headers #include "Math.hxx" -// Undefinitions -#undef min -#undef max namespace SHADE { From 0c28199acf2bc94fdf4e3f15f512df9fedaff3eb Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 20:30:32 +0800 Subject: [PATCH 045/793] Converted SHScriptEngine to static and replaced json references with yaml --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 62 ++++++++------ SHADE_Engine/src/Scripting/SHScriptEngine.h | 85 +++++++++---------- SHADE_Managed/src/Scripts/ScriptStore.cxx | 8 +- SHADE_Managed/src/Scripts/ScriptStore.hxx | 8 +- 4 files changed, 79 insertions(+), 84 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index d40605e4..6653284d 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -26,12 +26,25 @@ namespace SHADE /* Static Definitions */ /*--------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string(DEFAULT_CSHARP_LIB_NAME); - - /*---------------------------------------------------------------------------------*/ - /* Constructors/Destructors */ - /*---------------------------------------------------------------------------------*/ - SHScriptEngine::SHScriptEngine() - {} + SHDotNetRuntime SHScriptEngine::dotNet { false }; + SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineInit = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineLoadScripts = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineUnloadScripts = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineReloadScripts = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineExit = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsFrameSetUp = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteFixedUpdate = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteUpdate = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteLateUpdate = nullptr; + SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsFrameCleanUp = nullptr; + SHScriptEngine::CsScriptManipFuncPtr SHScriptEngine::csScriptsAdd = nullptr; + SHScriptEngine::CsScriptBasicFuncPtr SHScriptEngine::csScriptsRemoveAll = nullptr; + SHScriptEngine::CsScriptOptionalFuncPtr SHScriptEngine::csScriptsRemoveAllImmediately = nullptr; + SHScriptEngine::CsScriptSerialiseFuncPtr SHScriptEngine::csScriptsSerialise = nullptr; + SHScriptEngine::CsScriptDeserialiseFuncPtr SHScriptEngine::csScriptDeserialise = nullptr; + SHScriptEngine::CsScriptSerialiseYamlFuncPtr SHScriptEngine::csScriptsSerialiseYaml = nullptr; + SHScriptEngine::CsScriptSerialiseYamlFuncPtr SHScriptEngine::csScriptDeserialiseYaml = nullptr; + SHScriptEngine::CsScriptEditorFuncPtr SHScriptEngine::csEditorRenderScripts = nullptr; /*---------------------------------------------------------------------------------*/ /* Lifecycle Functions */ @@ -85,11 +98,6 @@ namespace SHADE csScriptsExecuteFixedUpdate(); } - void SHScriptEngine::ExecuteOnTrigger() - { - csScriptsExecuteOnTrigger(); - } - void SHScriptEngine::Exit() { // Do not allow deinitialization if not initialised @@ -113,15 +121,15 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Manipulation Functions */ /*---------------------------------------------------------------------------------*/ - bool SHScriptEngine::AddScript(const SHEntity& entity, const std::string_view& scriptName) const + bool SHScriptEngine::AddScript(const SHEntity& entity, const std::string_view& scriptName) { return csScriptsAdd(entity.GetEID(), scriptName.data()); } - void SHScriptEngine::RemoveAllScripts(const SHEntity& entity) const + void SHScriptEngine::RemoveAllScripts(const SHEntity& entity) { csScriptsRemoveAll(entity.GetEID()); } - void SHScriptEngine::RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) const + void SHScriptEngine::RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) { csScriptsRemoveAllImmediately(entity.GetEID(), callOnDestroy); } @@ -129,7 +137,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) const + std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) { // Create buffer needed to store serialised script data constexpr int BUFFER_SIZE = 10240; @@ -154,7 +162,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) const + void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) { csScriptDeserialise(entity.GetEID(), yaml.c_str()); } @@ -162,7 +170,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Editor Functions */ /*---------------------------------------------------------------------------------*/ - void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) const + void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) { csEditorRenderScripts(entity.GetEID()); } @@ -312,12 +320,6 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "FrameSetUp" ); - csScriptsExecuteOnTrigger = dotNet.GetFunctionPtr - ( - DEFAULT_CSHARP_LIB_NAME, - DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", - "ExecuteOnTrigger" - ); csScriptsExecuteFixedUpdate = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, @@ -360,17 +362,17 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "RemoveAllScriptsImmediately" ); - csScriptsSerialise = dotNet.GetFunctionPtr + /*csScriptsSerialise = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "SerialiseScripts" ); - csScriptsSerialiseJson = dotNet.GetFunctionPtr + csScriptsSerialiseYaml = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", - "SerialiseScriptsJson" + "SerialiseScriptsYaml" ); csScriptDeserialise = dotNet.GetFunctionPtr ( @@ -378,12 +380,18 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "DeserialiseScript" ); + csScriptDeserialiseYaml = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "SerialiseScriptsYaml" + ); csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".Editor", "RenderScriptsInInspector" - ); + );*/ } void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 91533c0f..a375c864 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -29,13 +29,10 @@ namespace SHADE { public: /*-----------------------------------------------------------------------------*/ - /* Constructors & Destructors */ + /* Constructor */ /*-----------------------------------------------------------------------------*/ - /// - /// Default Constructor - /// - SHScriptEngine(); - + SHScriptEngine() = delete; + /*-----------------------------------------------------------------------------*/ /* Lifecycle Functions */ /*-----------------------------------------------------------------------------*/ @@ -43,38 +40,33 @@ namespace SHADE /// Initialises the DotNetRuntime and retrieves function pointers to all /// functions on the CLR used to interface with the engine. /// - void Init(); + static void Init(); /// /// Loads the managed script assembly. Ensure this is only called after /// UnloadScriptAssembly() has been called. /// - void UnloadScriptAssembly(); + static void UnloadScriptAssembly(); /// /// Unloads the managed script assembly. /// Take note that this will clear all existing scripts, ensure that the scene /// is saved before doing so. /// - void LoadScriptAssembly(); + static void LoadScriptAssembly(); /// /// Reloads the managed script assembly. /// Take note that this will clear all existing scripts, ensure that the scene /// is saved before doing so. /// - void ReloadScriptAssembly(); + static void ReloadScriptAssembly(); /// /// Executes the FixedUpdate()s of the PlushieScripts that are attached to /// Entities. /// - void ExecuteFixedUpdates(); - /// - /// Executes the OnTrigger() family of functions of the PlushieScripts that are - /// attached to Entities. - /// - void ExecuteOnTrigger(); + static void ExecuteFixedUpdates(); /// /// Shuts down the DotNetRuntime. /// - void Exit(); + static void Exit(); /*-----------------------------------------------------------------------------*/ /* Script Manipulation Functions */ @@ -91,14 +83,14 @@ namespace SHADE /// True if successfully added. False otherwise with the error logged to the /// console. /// - bool AddScript(const SHEntity& entity, const std::string_view& scriptName) const; + static bool AddScript(const SHEntity& entity, const std::string_view& scriptName); /// /// Removes all Scripts attached to the specified Entity. Does not do anything /// if the specified Entity is invalid or does not have any PlushieScripts /// attached. /// /// The entity to remove the scripts from. - void RemoveAllScripts(const SHEntity& entity) const; + static void RemoveAllScripts(const SHEntity& entity); /// /// Removes all Scripts attached to the specified Entity. Unlike /// RemoveAllScripts(), this removes all the scripts immediately. @@ -110,7 +102,7 @@ namespace SHADE /// Whether or not to call OnDestroy on the scripts. This is ignored if not in /// play mode. /// - void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) const; + static void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy); /*-----------------------------------------------------------------------------*/ /* Script Serialisation Functions */ @@ -123,16 +115,16 @@ namespace SHADE /// /// String that represents the set of scripts attached to the specified Entity. /// - std::string SerialiseScripts(const SHEntity& entity) const; + static std::string SerialiseScripts(const SHEntity& entity); /// /// Loads the specified JSON string and creates a Script for the specified Entity /// based on the specified JSON string. /// /// The Entity to deserialise a Script on to. /// - /// The JSON string that represents the Script to load into the Entity. + /// The YAML string that represents the Script to load into the Entity. /// - void DeserialiseScript(const SHEntity& entity, const std::string& yaml) const; + static void DeserialiseScript(const SHEntity& entity, const std::string& yaml); /*-----------------------------------------------------------------------------*/ /* Script Editor Functions */ @@ -145,7 +137,7 @@ namespace SHADE /// rendering code. /// /// The Entity to render the PlushieScripts of. - void RenderScriptsInInspector(const SHEntity& entity) const; + static void RenderScriptsInInspector(const SHEntity& entity); /*-----------------------------------------------------------------------------*/ /* Static Utility Functions */ @@ -177,7 +169,7 @@ namespace SHADE using CsScriptOptionalFuncPtr = void(*)(EntityID, bool); using CsScriptSerialiseFuncPtr = bool(*)(EntityID, char*, int); using CsScriptDeserialiseFuncPtr = bool(*)(EntityID, const char*); - using CsScriptSerialiseJsonFuncPtr = bool(*)(EntityID, void*); + using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); using CsScriptEditorFuncPtr = void(*)(EntityID); /*-----------------------------------------------------------------------------*/ @@ -190,30 +182,29 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - SHDotNetRuntime dotNet {false}; + static SHDotNetRuntime dotNet; // Function Pointers to CLR Code - // - Engine Init - CsFuncPtr csEngineInit = nullptr; - CsFuncPtr csEngineLoadScripts = nullptr; - CsFuncPtr csEngineUnloadScripts = nullptr; - CsFuncPtr csEngineReloadScripts = nullptr; - CsFuncPtr csEngineExit = nullptr; + // - Engine Lifecycle + static CsFuncPtr csEngineInit; + static CsFuncPtr csEngineLoadScripts; + static CsFuncPtr csEngineUnloadScripts; + static CsFuncPtr csEngineReloadScripts; + static CsFuncPtr csEngineExit; // - Scripts Store - CsFuncPtr csScriptsFrameSetUp = nullptr; - CsFuncPtr csScriptsExecuteOnTrigger = nullptr; - CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; - CsFuncPtr csScriptsExecuteUpdate = nullptr; - CsFuncPtr csScriptsExecuteLateUpdate = nullptr; - CsFuncPtr csScriptsFrameCleanUp = nullptr; - CsScriptManipFuncPtr csScriptsAdd = nullptr; - CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; - CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; - CsScriptSerialiseFuncPtr csScriptsSerialise = nullptr; - CsScriptDeserialiseFuncPtr csScriptDeserialise = nullptr; - CsScriptSerialiseJsonFuncPtr csScriptsSerialiseJson = nullptr; - CsScriptSerialiseJsonFuncPtr csScriptDeserialiseJson = nullptr; + static CsFuncPtr csScriptsFrameSetUp; + static CsFuncPtr csScriptsExecuteFixedUpdate; + static CsFuncPtr csScriptsExecuteUpdate; + static CsFuncPtr csScriptsExecuteLateUpdate; + static CsFuncPtr csScriptsFrameCleanUp; + static CsScriptManipFuncPtr csScriptsAdd; + static CsScriptBasicFuncPtr csScriptsRemoveAll; + static CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately; + static CsScriptSerialiseFuncPtr csScriptsSerialise; + static CsScriptDeserialiseFuncPtr csScriptDeserialise; + static CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml; + static CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml; // - Editor - CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; + static CsScriptEditorFuncPtr csEditorRenderScripts; // Delegates /*ECS::EntityEvent::Delegate onEntityCreate; ECS::EntityEvent::Delegate onEntityDestroy;*/ @@ -224,7 +215,7 @@ namespace SHADE /// /// Loads all the function pointers to CLR code that we need to execute. /// - void loadFunctions(); + static void loadFunctions(); /// /// Reads the file via the specified path that represents a build log of error /// and warning messages. diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 79a75bda..9a9eff54 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -526,7 +526,7 @@ namespace SHADE return false; } - bool ScriptStore::DeserialiseScript(Entity entity, System::String^ json) + bool ScriptStore::DeserialiseScript(Entity entity, System::String^ yaml) { SAFE_NATIVE_CALL_BEGIN // Check if entity exists, otherwise nothing @@ -534,13 +534,13 @@ namespace SHADE return false; // Get the name of the script - const int FIRST_QUOTE = json->IndexOf('\"'); - const int FIRST_COLON = json->IndexOf(':'); + const int FIRST_QUOTE = yaml->IndexOf('\"'); + const int FIRST_COLON = yaml->IndexOf(':'); if (FIRST_QUOTE < 0 || FIRST_COLON < 0) // No script name, it's invalid return false; const int SCRIPT_NAME_START = FIRST_QUOTE + 1; const int SCRIPT_NAME_END = FIRST_COLON - 1; - System::String^ typeName = json->Substring(SCRIPT_NAME_START, SCRIPT_NAME_END - SCRIPT_NAME_START); + System::String^ typeName = yaml->Substring(SCRIPT_NAME_START, SCRIPT_NAME_END - SCRIPT_NAME_START); // Create the script Script^ script; diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 798c4cb6..cc0c1db5 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -232,10 +232,6 @@ namespace SHADE /// Executes LateUpdate() for all scripts. /// static void ExecuteLateUpdate(); - /// - /// Executes OnTrigger functions for all scripts. - /// - static void ExecuteOnTrigger(); /*-----------------------------------------------------------------------------*/ /* Serialisation Functions */ @@ -268,11 +264,11 @@ namespace SHADE /// /// The Entity to attach the deserialised Scripts to. /// - /// + /// /// JSON string that describes the Script to serialise. /// /// - static bool DeserialiseScript(Entity entity, System::String^ json); + static bool DeserialiseScript(Entity entity, System::String^ yaml); private: /*-----------------------------------------------------------------------------*/ From 8e45b5895e578a9b2e236b37d54f6e7b9955c975 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 20:31:08 +0800 Subject: [PATCH 046/793] Removed references to SHLogger in Debug.cxx --- SHADE_Managed/src/Utility/Debug.cxx | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/SHADE_Managed/src/Utility/Debug.cxx b/SHADE_Managed/src/Utility/Debug.cxx index e9234e94..330375b0 100644 --- a/SHADE_Managed/src/Utility/Debug.cxx +++ b/SHADE_Managed/src/Utility/Debug.cxx @@ -18,11 +18,8 @@ of DigiPen Institute of Technology is prohibited. #include "Debug.hxx" // Standard Libraries #include -// External Dependencies -#include "Tools/SHLogger.h" // Project Headers #include "Convert.hxx" -#include "SHLog.h" namespace SHADE { @@ -31,11 +28,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void Debug::Log(const std::string& str) { - SHLog::Info(str); + std::cout << str << std::endl; } void Debug::Log(System::String^ str) { - SHLog::Info(Convert::ToNative(str)); + System::Console::WriteLine(str); } void Debug::Log(System::String^ str, Object^ owner) @@ -50,15 +47,15 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] " << Convert::ToNative(str); - SHLog::Info(oss.str()); + std::cout << oss.str() << std::endl; } void Debug::LogWarning(const std::string& str) { - SHLog::Warning(str); + std::cout << str << std::endl; } void Debug::LogWarning(System::String^ str) { - SHLog::Warning(Convert::ToNative(str)); + System::Console::WriteLine(str); } void Debug::LogWarning(System::String^ str, Object^ thrower) { @@ -73,15 +70,15 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] " << Convert::ToNative(str); - SHLog::Warning(oss.str()); + std::cout << oss.str() << std::endl; } void Debug::LogError(const std::string& str) { - SHLog::Error(str); + std::cout << str << std::endl; } void Debug::LogError(System::String^ str) { - SHLog::Error(Convert::ToNative(str)); + System::Console::WriteLine(str); } void Debug::LogError(System::String^ str, Object^ thrower) { @@ -91,7 +88,7 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] -> " << Convert::ToNative(str); - SHLog::Error(oss.str()); + std::cout << oss.str() << std::endl; } void Debug::LogError(System::String^ str, System::String^ throwerName) { @@ -114,12 +111,12 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << Convert::ToNative(exception->ToString()); - SHLog::Error(oss.str()); + std::cout << oss.str() << std::endl; } void Debug::LogExceptionNative(const std::exception& exception, const std::string& throwerName) { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << exception.what(); - SHLog::Error(oss.str()); + std::cout << oss.str() << std::endl; } } From 91709b16c3eed7d1113aedbd9c92f71e62a3b01d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 20:35:30 +0800 Subject: [PATCH 047/793] Changed out and intermediatery directories for all projects to use shared directories --- SHADE_Application/SHADE_Application.vcxproj | 8 ++++---- SHADE_Application/premake5.lua | 4 ++-- SHADE_Engine/SHADE_Engine.vcxproj | 9 +++++---- SHADE_Engine/SHADE_Engine.vcxproj.filters | 1 + SHADE_Engine/premake5.lua | 4 ++-- premake5.lua | 5 +++-- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 2616224e..59d25053 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -42,15 +42,15 @@ true - bin\Debug_x86_64\SHADE_Application\ - bin-int\Debug_x86_64\SHADE_Application\ + ..\bin\Debug\ + ..\bin_int\Debug\SHADE_Application\ SHADE_Application .exe false - bin\Release_x86_64\SHADE_Application\ - bin-int\Release_x86_64\SHADE_Application\ + ..\bin\Release\ + ..\bin_int\Release\SHADE_Application\ SHADE_Application .exe diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 8c17bf55..d7f47246 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -2,8 +2,8 @@ project "SHADE_Application" kind "WindowedApp" language "C++" cppdialect "C++latest" - targetdir ("bin/" .. outputdir .. "/%{prj.name}") - objdir ("bin-int/" .. outputdir .. "/%{prj.name}") + targetdir (outputdir) + objdir (interdir) systemversion "latest" pchheader "SBpch.h" pchsource "%{prj.location}/src/SBpch.cpp" diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 1c50ecc0..57c76f8e 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -41,14 +41,14 @@ - bin\Debug_x86_64\SHADE_Engine\ - bin-int\Debug_x86_64\SHADE_Engine\ + ..\bin\Debug\ + ..\bin_int\Debug\SHADE_Engine\ SHADE_Engine .lib - bin\Release_x86_64\SHADE_Engine\ - bin-int\Release_x86_64\SHADE_Engine\ + ..\bin\Release\ + ..\bin_int\Release\SHADE_Engine\ SHADE_Engine .lib @@ -183,6 +183,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7486fad4..6af93131 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -360,6 +360,7 @@ Resource + Scene diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index c858d538..ddd9eaaa 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -2,8 +2,8 @@ project "SHADE_Engine" kind "StaticLib" language "C++" cppdialect "C++latest" - targetdir ("bin/" .. outputdir .. "/%{prj.name}") - objdir ("bin-int/" .. outputdir .. "/%{prj.name}") + targetdir (outputdir) + objdir (interdir) systemversion "latest" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" diff --git a/premake5.lua b/premake5.lua index d54f8e40..afb72a33 100644 --- a/premake5.lua +++ b/premake5.lua @@ -14,8 +14,9 @@ workspace "SHADE" { "MultiProcessorCompile" } - - outputdir = "%{cfg.buildcfg}_%{cfg.architecture}" + + outputdir = "%{wks.location}/bin/%{cfg.buildcfg}" + interdir = "%{wks.location}/bin_int" include "SHADE_Application" include "SHADE_Engine" From cba3aa0663d837c5bdf02e807ef5c71d0b264c5f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 13 Sep 2022 21:08:13 +0800 Subject: [PATCH 048/793] Converted SHADE_Engine to a DLL project and exported common use classes --- SHADE.sln | 3 ++ SHADE_Application/SHADE_Application.vcxproj | 4 +-- SHADE_Application/premake5.lua | 3 +- SHADE_Engine/SHADE_Engine.vcxproj | 24 ++++++------- SHADE_Engine/premake5.lua | 5 +-- .../src/ECS_Base/Components/SHComponent.h | 3 +- SHADE_Engine/src/ECS_Base/Entity/SHEntity.h | 3 +- .../src/ECS_Base/System/SHComponentManager.h | 3 +- .../src/ECS_Base/System/SHEntityManager.h | 3 +- .../src/Graphics/Windowing/SHWindow.h | 3 +- SHADE_Engine/src/SH_API.h | 36 +++++++++++++++++++ SHADE_Engine/src/Tools/SHExceptionHandler.h | 4 ++- SHADE_Engine/src/Tools/SHLogger.h | 3 +- premake5.lua | 4 +-- 14 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 SHADE_Engine/src/SH_API.h diff --git a/SHADE.sln b/SHADE.sln index ff6afa61..e0cb4ef9 100644 --- a/SHADE.sln +++ b/SHADE.sln @@ -2,6 +2,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Application", "SHADE_Application\SHADE_Application.vcxproj", "{BDC70008-29DE-FE9D-7255-8ABFDEAACF25}" + ProjectSection(ProjectDependencies) = postProject + {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{53E47842-3FC8-3998-A828-34EB942B241A}" EndProject diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 59d25053..20e738cc 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -60,7 +60,7 @@ SBpch.h Level4 _DEBUG;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -80,7 +80,7 @@ SBpch.h Level4 _RELEASE;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;%(AdditionalIncludeDirectories) Full true true diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index d7f47246..9eb3a41c 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -23,7 +23,8 @@ project "SHADE_Application" { "%{IncludeDir.spdlog}/include", "../SHADE_Engine/src", - "src" + "src", + "%{IncludeDir.dotnet}/include", } flags diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 57c76f8e..9b4d09ae 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -19,13 +19,13 @@ - StaticLibrary + DynamicLibrary true Unicode v142 - StaticLibrary + DynamicLibrary false Unicode v142 @@ -41,23 +41,25 @@ + true ..\bin\Debug\ ..\bin_int\Debug\SHADE_Engine\ SHADE_Engine - .lib + .dll + false ..\bin\Release\ ..\bin_int\Release\SHADE_Engine\ SHADE_Engine - .lib + .dll Use SHpch.h Level4 - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_DEBUG;%(PreprocessorDefinitions) + _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) EditAndContinue Disabled @@ -69,18 +71,17 @@ Windows true - - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + ..\bin\Debug\SHADE_Engine.lib + Use SHpch.h Level4 - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_RELEASE;%(PreprocessorDefinitions) + _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) Full true @@ -95,11 +96,10 @@ Windows true true - - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + ..\bin\Release\SHADE_Engine.lib + diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index ddd9eaaa..681de634 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -1,5 +1,5 @@ project "SHADE_Engine" - kind "StaticLib" + kind "SharedLib" language "C++" cppdialect "C++latest" targetdir (outputdir) @@ -66,7 +66,8 @@ project "SHADE_Engine" "_LIB", "_GLFW_INCLUDE_NONE", "MSDFGEN_USE_CPP11", - "NOMINMAX" + "NOMINMAX", + "SH_API_EXPORT" } flags diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h index c9c5e6f1..edd8436c 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h @@ -14,13 +14,14 @@ #include "SHpch.h" #include "../SHECSMacros.h" +#include "SH_API.h" namespace SHADE { class SHComponentManager; - class SHComponent + class SH_API SHComponent { friend SHComponentManager; diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h index d499042c..685ba99a 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h @@ -15,6 +15,7 @@ #include "../Components/SHComponent.h" #include "../System/SHComponentManager.h" //#include "../../Scene/SHSceneNode.h" +#include "SH_API.h" @@ -23,7 +24,7 @@ namespace SHADE class SHComponentManager; class SHEntityManager; - class SHEntity + class SH_API SHEntity { public: diff --git a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h index 2f6ff504..75db35d5 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHComponentManager.h @@ -19,13 +19,14 @@ #include "../Components/SHComponent.h" #include "../Components/SHComponentGroup.h" //#include "Scene/SHSceneNode.h" +#include "SH_API.h" #include namespace SHADE { - class SHComponentManager + class SH_API SHComponentManager { private: diff --git a/SHADE_Engine/src/ECS_Base/System/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/System/SHEntityManager.h index 11e896d5..802ef75d 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHEntityManager.h @@ -22,11 +22,12 @@ #include "../Components/SHComponent.h" #include "../General/SHHandleGenerator.h" #include "../SHECSMacros.h" +#include "SH_API.h" namespace SHADE { - class SHEntityManager + class SH_API SHEntityManager { private: static std::vector> entityVec; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index a70058a1..1e08dcb0 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -5,6 +5,7 @@ #include #include #include "SHWindowMap.h" +#include "SH_API.h" namespace SHADE { @@ -67,7 +68,7 @@ namespace SHADE std::string icoPath = ""; }; - class SHWindow + class SH_API SHWindow { public: using SHVec2 = std::pair; diff --git a/SHADE_Engine/src/SH_API.h b/SHADE_Engine/src/SH_API.h new file mode 100644 index 00000000..64d1eebe --- /dev/null +++ b/SHADE_Engine/src/SH_API.h @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file SH_API.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 13, 2022 +\brief Contains dllexport and dllimport macros for the SHADE Engine. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Select the correct export system based on the compiler +#if defined SH_LIB +# define SH_API +#else +# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER +# define SH_EXPORT __declspec(dllexport) +# define SH_IMPORT __declspec(dllimport) +# elif defined __GNUC__ && __GNUC__ >= 4 +# define SH_EXPORT __attribute__((visibility("default"))) +# define SH_IMPORT __attribute__((visibility("default"))) +# else /* Unsupported compiler */ +# define SH_EXPORT +# define SH_IMPORT +# endif + // Define the correct +# ifndef SH_API +# if defined SH_API_EXPORT +# define SH_API SH_EXPORT +# else +# define SH_API SH_IMPORT +# endif +# endif +#endif \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHExceptionHandler.h b/SHADE_Engine/src/Tools/SHExceptionHandler.h index dd1d7596..32cda608 100644 --- a/SHADE_Engine/src/Tools/SHExceptionHandler.h +++ b/SHADE_Engine/src/Tools/SHExceptionHandler.h @@ -12,13 +12,15 @@ #include +#include "SH_API.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHExceptionHandler + class SH_API SHExceptionHandler { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Tools/SHLogger.h b/SHADE_Engine/src/Tools/SHLogger.h index ac5f9308..dfb7dffd 100644 --- a/SHADE_Engine/src/Tools/SHLogger.h +++ b/SHADE_Engine/src/Tools/SHLogger.h @@ -15,6 +15,7 @@ #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE #include +#include "SH_API.h" /*-------------------------------------------------------------------------------------*/ /* Macros */ @@ -27,7 +28,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHLogger + class SH_API SHLogger { public: /*---------------------------------------------------------------------------------*/ diff --git a/premake5.lua b/premake5.lua index afb72a33..e136702a 100644 --- a/premake5.lua +++ b/premake5.lua @@ -12,14 +12,14 @@ workspace "SHADE" flags { - "MultiProcessorCompile" + "MultiProcessorCompile" } outputdir = "%{wks.location}/bin/%{cfg.buildcfg}" interdir = "%{wks.location}/bin_int" - include "SHADE_Application" include "SHADE_Engine" + include "SHADE_Application" group "Dependencies" include "Dependencies/msdf" From a3e4b0a845b36df3b09bc21d2b24f69c7adcb3e5 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 14 Sep 2022 09:14:18 +0800 Subject: [PATCH 049/793] update premakes for spdlog changes --- SHADE_Application/premake5.lua | 12 ++++++++++-- SHADE_Engine/premake5.lua | 4 +--- premake5.lua | 1 - 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 9eb3a41c..8aa03a13 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -14,6 +14,7 @@ project "SHADE_Application" files { "%{prj.location}/src/**.h", + "%{prj.location}/src/**.hpp", "%{prj.location}/src/**.c", "%{prj.location}/src/**.cpp", "%{prj.location}/src/**.glsl", @@ -34,9 +35,14 @@ project "SHADE_Application" links { - "SHADE_Engine" + "SHADE_Engine", } + libdirs + { + "%{IncludeDir.spdlog}/lib", + } + postbuildcommands { } @@ -46,7 +52,9 @@ project "SHADE_Application" filter "configurations:Debug" symbols "On" defines {"_DEBUG"} + links{"spdlogd.lib"} filter "configurations:Release" optimize "On" - defines{"_RELEASE"} \ No newline at end of file + defines{"_RELEASE"} + links{"spdlog.lib"} diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 681de634..841eaab3 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -35,7 +35,7 @@ project "SHADE_Engine" "%{IncludeDir.RTTR}/include", "%{IncludeDir.reactphysics3d}/include", "%{IncludeDir.VULKAN}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" } libdirs @@ -56,7 +56,6 @@ project "SHADE_Engine" "msdf-atlas-gen", "reactphysics3d", "imgui", - "spdlog", "vulkan-1.lib", "shaderc_shared.lib" } @@ -82,7 +81,6 @@ project "SHADE_Engine" "msdf-atlas-gen", "reactphysics3d", "imgui", - "spdlog", } warnings 'Extra' diff --git a/premake5.lua b/premake5.lua index e136702a..45ed41fa 100644 --- a/premake5.lua +++ b/premake5.lua @@ -24,7 +24,6 @@ workspace "SHADE" group "Dependencies" include "Dependencies/msdf" include "Dependencies/imgui" - include "Dependencies/spdlog" --include "Dependencies/tracy" include "Dependencies/yamlcpp" include "Dependencies/reactphysics3d" From b7cd1bed48c0daeada4df0ece694fea8ce7fa6fe Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Wed, 14 Sep 2022 10:32:50 +0800 Subject: [PATCH 050/793] Added System Routines --- SHADE_Engine/SHADE_Engine.vcxproj | 4 ++ SHADE_Engine/SHADE_Engine.vcxproj.filters | 4 ++ .../src/ECS_Base/Managers/SHSystemManager.cpp | 35 +++++++++++-- .../src/ECS_Base/Managers/SHSystemManager.h | 40 +++++++++------ SHADE_Engine/src/ECS_Base/SHECSMacros.h | 4 +- .../ECS_Base/System/SHFixedSystemRoutine.cpp | 20 ++++++++ .../ECS_Base/System/SHFixedSystemRoutine.h | 31 ++++++++++++ .../src/ECS_Base/System/SHRoutineStats.h | 27 ++++++++++ SHADE_Engine/src/ECS_Base/System/SHSystem.h | 17 +++---- .../src/ECS_Base/System/SHSystemRoutine.cpp | 21 ++++++++ .../src/ECS_Base/System/SHSystemRoutine.h | 49 +++++++++++++++++++ 11 files changed, 224 insertions(+), 28 deletions(-) create mode 100644 SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp create mode 100644 SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h create mode 100644 SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h create mode 100644 SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 1831bff6..d84f3c05 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -114,6 +114,8 @@ + + @@ -200,6 +202,8 @@ + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 70a5b407..8fc412c5 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -386,6 +386,8 @@ Tools + + @@ -587,5 +589,7 @@ Tools + + \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp index 5b861161..acf7cba3 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp @@ -14,10 +14,14 @@ #include "SHSystemManager.h" #include +#include +#include +#include + namespace SHADE { SHSystemManager::SystemContainer SHSystemManager::systemContainer; - + SHSystemManager::SystemRoutineContainer SHSystemManager::systemRoutineContainer; void SHSystemManager::Init() noexcept { @@ -30,11 +34,36 @@ namespace SHADE } } + void SHSystemManager::RunRoutines(bool editorPause) noexcept + { + for (auto& routine : systemRoutineContainer) + { + if (editorPause == true) + { + if (routine.get()->IsRunInEditorPause) + { + std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now(); + routine.get()->Execute(0.0); + std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now(); + routine.get()->stats.executionTime = std::chrono::duration(end - start).count(); + } + } + else + { + std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now(); + routine.get()->Execute(0.0); + std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now(); + routine.get()->stats.executionTime = std::chrono::duration(end - start).count(); + } + } + } + + void SHSystemManager::Exit() noexcept { - for (auto& system : systemContainer) + for (SystemContainer::reverse_iterator it = systemContainer.rbegin(); it != systemContainer.rend(); ++it) { - system.second->Exit(); + (*it).second->Exit(); //delete system.second; } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index 7d4e8c27..616a8db3 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -13,30 +13,29 @@ #pragma once -#include +#include #include #include #include #include #include "../System/SHSystem.h" #include "../General/SHFamily.h" +#include "../System/SHSystemRoutine.h" namespace SHADE { - typedef uint32_t SystemTypeID; - typedef uint32_t SystemVersionID; - typedef uint64_t SystemID; + typedef SHFamilyID SystemFamily; class SHSystemManager { //type definition for the container we use to store our system - using SystemContainer = std::unordered_map>; - + using SystemContainer = std::map>; + using SystemRoutineContainer = std::vector>; private: static SystemContainer systemContainer; - + static SystemRoutineContainer systemRoutineContainer; public: /*!************************************************************************* @@ -47,12 +46,12 @@ namespace SHADE ~SHSystemManager() = delete; /************************************************************************** - * \brief + * \brief * Create a system of type T and map it to a name. * throws an error if a system with the same name already exists. * \param name * name of the system - * \return + * \return * none ***************************************************************************/ template @@ -61,7 +60,7 @@ namespace SHADE SystemTypeID typeID = SystemFamily::GetID(); SystemVersionID version = 0; - SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; + SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; while (systemContainer.find(id) != systemContainer.end()) { ++version; @@ -73,11 +72,11 @@ namespace SHADE } /************************************************************************** - * \brief + * \brief * Get a pointer to the System with a specified name. * \param name * Name of the system in the map - * \return + * \return * Base System pointer. ***************************************************************************/ template @@ -97,13 +96,26 @@ namespace SHADE } /************************************************************************** - * \brief + * \brief * Call the Init function of all systems. - * \return + * \return * none ***************************************************************************/ static void Init() noexcept; + static void RunRoutines(bool editorPause) noexcept; + + template + static void RegisterRoutine(SystemVersionID version = 0) noexcept + { + SHSystem* system = GetSystem(version); + if (system == nullptr) + return; + systemRoutineContainer.emplace_back(std::make_unique()); + + } + + /************************************************************************** * \brief * Call the Exit function of all systems. diff --git a/SHADE_Engine/src/ECS_Base/SHECSMacros.h b/SHADE_Engine/src/ECS_Base/SHECSMacros.h index 0a8971e7..02615ca4 100644 --- a/SHADE_Engine/src/ECS_Base/SHECSMacros.h +++ b/SHADE_Engine/src/ECS_Base/SHECSMacros.h @@ -9,7 +9,9 @@ typedef uint32_t EntityID; typedef uint16_t EntityIndex; typedef uint32_t ComponentTypeID; - +typedef uint32_t SystemTypeID; +typedef uint32_t SystemVersionID; +typedef uint64_t SystemID; diff --git a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp new file mode 100644 index 00000000..2c97bfb4 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp @@ -0,0 +1,20 @@ +#include "SHFixedSystemRoutine.h" +#include "../SHECSMacros.h" + +namespace SHADE +{ + + void SHFixedSystemRoutine::Execute(double dt) + { + accumulatedTime += dt; + int counter = 0; + while (accumulatedTime >= fixedTimeStep) + { + ++counter; + accumulatedTime -= fixedTimeStep; + FixedExecute(fixedTimeStep); + } + stats.numSteps = counter; + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h new file mode 100644 index 00000000..d9a2b510 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h @@ -0,0 +1,31 @@ +#pragma once + + +#include "SHSystemRoutine.h" +#define DEFAULT_FIXED_STEP 1.0/60.0 + +namespace SHADE +{ + class SHFixedSystemRoutine: public SHSystemRoutine + { + private: + double accumulatedTime; + double fixedTimeStep; + + protected: + SHFixedSystemRoutine(double timeStep = DEFAULT_FIXED_STEP, std::string routineName = "Default Fixed Routine Name", bool editorPause = false) + :SHSystemRoutine(routineName, editorPause), accumulatedTime(0.0), fixedTimeStep(timeStep){} + + + + public: + ~SHFixedSystemRoutine() = default; + + virtual void Execute(double dt) noexcept; + + virtual void FixedExecute(double dt) noexcept {}; + + }; + + +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h b/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h new file mode 100644 index 00000000..e294264a --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +namespace SHADE +{ + struct SHRoutineStats + { + SHRoutineStats(std::string name) + :name(name) + { + } + std::string name; + double executionTime; + int numSteps{1}; + + friend std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats); + }; + + std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats) + { + os << stats.name << ": Execution Time: " << stats.executionTime << " Number of steps: " << stats.numSteps << std::endl; + } + + +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 3a0694e2..a2964a91 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -37,13 +37,13 @@ namespace SHADE ***************************************************************************/ virtual void Init() = 0; - /*!************************************************************************* - * \brief - * Pure virtual Run function. Derived class must implement this - * \param dt - * Delta time - ***************************************************************************/ - virtual void Run(float dt) = 0; + ///*!************************************************************************* + // * \brief + // * Pure virtual Run function. Derived class must implement this + // * \param dt + // * Delta time + //***************************************************************************/ + //virtual void Run(float dt) = 0; /*!************************************************************************* * \brief @@ -75,10 +75,7 @@ namespace SHADE } - void Run(float dt) - { - } void Exit() { diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp new file mode 100644 index 00000000..83107c60 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp @@ -0,0 +1,21 @@ +#include "SHSystemRoutine.h" + +namespace SHADE +{ + + SHSystem* SHSystemRoutine::GetSystem() const noexcept + { + return system; + } + + std::string const SHSystemRoutine::GetName()const noexcept + { + return name; + } + + SHRoutineStats const& SHSystemRoutine::GetStats()const noexcept + { + return stats; + } + +} diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h index 531a62b0..cdb62438 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -1,4 +1,53 @@ + + + #pragma once +#include "../SHECSMacros.h" +#include "SHRoutineStats.h" +#include "SHSystem.h" +#include + + +namespace SHADE +{ + + class SHSystemManager; + + + class SHSystemRoutine + { + friend class SHSystemManager; + protected: + + SHSystemRoutine(std::string routineName = "Default Routine Name", bool editorPause = false) + :system(nullptr), name(routineName), stats(routineName),IsRunInEditorPause(editorPause){}; + + + SHSystem* system; + std::string name; + SHRoutineStats stats; + + //Whether or not this routine should run when the editor is still in pause + bool IsRunInEditorPause; + + + public: + ~SHSystemRoutine() = default; + + + SHSystem* GetSystem()const noexcept; + std::string const GetName() const noexcept; + SHRoutineStats const& GetStats()const noexcept; + + virtual void Execute(double dt) noexcept {}; + }; + + + + +} + + From 44ef3a500f3404b112e14237542e4f9aecc04498 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 14 Sep 2022 13:29:14 +0800 Subject: [PATCH 051/793] Added post build command to copy spdlog.dll to output --- SHADE.sln | 11 ----------- SHADE_Application/SHADE_Application.vcxproj | 4 ++++ SHADE_Engine/SHADE_Engine.vcxproj | 9 ++++++--- SHADE_Engine/premake5.lua | 5 +++++ 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/SHADE.sln b/SHADE.sln index e0cb4ef9..96aa6455 100644 --- a/SHADE.sln +++ b/SHADE.sln @@ -2,9 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Application", "SHADE_Application\SHADE_Application.vcxproj", "{BDC70008-29DE-FE9D-7255-8ABFDEAACF25}" - ProjectSection(ProjectDependencies) = postProject - {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} - EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{53E47842-3FC8-3998-A828-34EB942B241A}" EndProject @@ -18,8 +15,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msdfgen", "Dependencies\msd EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reactphysics3d", "Dependencies\reactphysics3d\reactphysics3d.vcxproj", "{2ECAB41A-1A98-A820-032C-1947EF988485}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spdlog", "Dependencies\spdlog\spdlog.vcxproj", "{8EAD431C-7A4F-6EF2-630A-82464F4BF542}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yaml-cpp", "Dependencies\yamlcpp\yaml-cpp.vcxproj", "{88F1A057-74BE-FB62-9DD7-E90A890331F1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Engine", "SHADE_Engine\SHADE_Engine.vcxproj", "{3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}" @@ -29,7 +24,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Engine", "SHADE_Engin {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} = {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} {2ECAB41A-1A98-A820-032C-1947EF988485} = {2ECAB41A-1A98-A820-032C-1947EF988485} {C0FF640D-2C14-8DBE-F595-301E616989EF} = {C0FF640D-2C14-8DBE-F595-301E616989EF} - {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {8EAD431C-7A4F-6EF2-630A-82464F4BF542} EndProjectSection EndProject Global @@ -62,10 +56,6 @@ Global {2ECAB41A-1A98-A820-032C-1947EF988485}.Debug|x64.Build.0 = Debug|x64 {2ECAB41A-1A98-A820-032C-1947EF988485}.Release|x64.ActiveCfg = Release|x64 {2ECAB41A-1A98-A820-032C-1947EF988485}.Release|x64.Build.0 = Release|x64 - {8EAD431C-7A4F-6EF2-630A-82464F4BF542}.Debug|x64.ActiveCfg = Debug|x64 - {8EAD431C-7A4F-6EF2-630A-82464F4BF542}.Debug|x64.Build.0 = Debug|x64 - {8EAD431C-7A4F-6EF2-630A-82464F4BF542}.Release|x64.ActiveCfg = Release|x64 - {8EAD431C-7A4F-6EF2-630A-82464F4BF542}.Release|x64.Build.0 = Release|x64 {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Debug|x64.ActiveCfg = Debug|x64 {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Debug|x64.Build.0 = Debug|x64 {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Release|x64.ActiveCfg = Release|x64 @@ -84,7 +74,6 @@ Global {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} = {53E47842-3FC8-3998-A828-34EB942B241A} {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} = {53E47842-3FC8-3998-A828-34EB942B241A} {2ECAB41A-1A98-A820-032C-1947EF988485} = {53E47842-3FC8-3998-A828-34EB942B241A} - {8EAD431C-7A4F-6EF2-630A-82464F4BF542} = {53E47842-3FC8-3998-A828-34EB942B241A} {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {53E47842-3FC8-3998-A828-34EB942B241A} EndGlobalSection EndGlobal diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 20e738cc..65a17de9 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -71,6 +71,8 @@ Windows true + spdlogd.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup @@ -94,6 +96,8 @@ Windows true true + spdlog.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 9b4d09ae..327995ca 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -75,6 +75,9 @@ libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) ..\bin\Debug\SHADE_Engine.lib + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" + @@ -100,6 +103,9 @@ libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) ..\bin\Release\SHADE_Engine.lib + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" + @@ -280,9 +286,6 @@ {C0FF640D-2C14-8DBE-F595-301E616989EF} - - {8EAD431C-7A4F-6EF2-630A-82464F4BF542} - diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 841eaab3..41693aa8 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -83,6 +83,11 @@ project "SHADE_Engine" "imgui", } + postbuildcommands + { + "xcopy /s /r /y /q \"%{IncludeDir.spdlog}/bin\" \"$(OutDir)\"" + } + warnings 'Extra' filter "configurations:Debug" From fdc8a61c1d8f190d2a283cf726f8fec060d5966e Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 14 Sep 2022 16:01:40 +0800 Subject: [PATCH 052/793] Added SHWindow to SHImguiWindow --- .../Editor/Backend/SHImGuiVulkanBackend.cpp | 37 ++++++++++++++++--- .../src/Editor/Backend/SHImGuiVulkanBackend.h | 18 ++++----- .../src/Graphics/Windowing/SHWindow.cpp | 2 +- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp index 1ec09e05..740ae683 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -137,7 +137,7 @@ namespace SHADE std::array translate; }; - void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex) noexcept + void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex, SHWindow& mainWindow) noexcept { if (ImGui::GetCurrentContext() == nullptr) { @@ -189,6 +189,7 @@ namespace SHADE //Initialize instance auto instance = std::make_unique(); + instance->window = mainWindow; instance->InitializePipeline(io, renderpass, subpassIndex); instance->lastFrameTime = std::chrono::high_resolution_clock::now(); io.UserData = instance.release(); @@ -200,9 +201,10 @@ namespace SHADE void SHImGuiVulkanBackend::Render(void) noexcept { + GETINSTANCE ImGui::Render(); ImDrawData* drawData = ImGui::GetDrawData(); - //TODO: instance draw data + //instance.Render(io, drawData, ) } void SHImGuiVulkanBackend::CreateChildWindow(ImGuiViewport* viewport) noexcept @@ -210,6 +212,7 @@ namespace SHADE GETINSTANCE auto& info = *new SHImGuiWindow{ instance.device }; + info.window.Create({}, instance.window.GetHWND()); viewport->RendererUserData = &info; } @@ -217,7 +220,9 @@ namespace SHADE { GETINSTANCE - auto info = reinterpret_cast(viewport->RendererUserData); + auto info = reinterpret_cast(viewport->RendererUserData); + info->window.Close(); + info->window.Destroy(); delete info; viewport->RendererUserData = nullptr; } @@ -230,20 +235,37 @@ namespace SHADE void SHImGuiVulkanBackend::SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept { - + auto& info = *reinterpret_cast(viewport->RendererUserData); + SetWindowPos + ( + info.window.GetHWND(), + HWND_TOPMOST, + -1, + -1, + static_cast(size.x), + static_cast(size.y), + SWP_NOMOVE | SWP_NOZORDER + ); } ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept { - return {}; + auto& info = *reinterpret_cast(viewport->RendererUserData); + auto [x, y] = info.window.GetWindowSize(); + return {static_cast(x), static_cast(y)}; } void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept { + auto& info = *reinterpret_cast(viewport->RendererUserData); + info.window.SetPosition(size.x, size.y); } void SHImGuiVulkanBackend::RenderChildWindow(ImGuiViewport* viewport, void*) noexcept { + GETINSTANCE; + auto& info = *reinterpret_cast(viewport->RendererUserData); + //info.Render(io, viewport->DrawData, instance);; } void SHImGuiVulkanBackend::ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept @@ -272,6 +294,11 @@ namespace SHADE } } + void SHImGuiVulkanBackend::SHImGuiWindow::Render(ImGuiIO& io, ImDrawData* drawData, + Handle descriptorSetGroup) + { + + } void SHImGuiVulkanBackend::SHBreachInstance::CreateFontsTexture(Handle image, ImGuiIO& io) noexcept diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h index d6ebf84d..65b88ccf 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -1,15 +1,16 @@ #pragma once #include -#include +#include "Graphics/Instance/SHVkInstance.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Images/SHVkImage.h" -#include -#include -#include +#include "Graphics/Devices/SHVkPhysicalDevice.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/Swapchain/SHVkSwapchain.h" -#include +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Debugging/SHVulkanDebugUtil.h" +#include "Graphics/Windowing/SHWindow.h" namespace SHADE { @@ -21,15 +22,14 @@ namespace SHADE { Handle vertexBuffer; Handle indicesBuffer; - }; - Handle device; + SHWindow window; std::array primitiveBuffers; public: void InitializeBuffers(void) noexcept; - + void Render(ImGuiIO& io, ImDrawData* drawData, Handle descriptorSetGroup); }; struct SHBreachInstance : public SHImGuiWindow @@ -44,7 +44,7 @@ namespace SHADE void InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept; }; public: - static void CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex) noexcept; + static void CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex, SHWindow& mainWindow) noexcept; static void Render(void) noexcept; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 6ac6672b..957ffc34 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -222,7 +222,7 @@ namespace SHADE return true; { MSG Message; - while (PeekMessageW(&Message, NULL, 0, 0, PM_REMOVE)) + while (PeekMessageW(&Message, wndHWND, 0, 0, PM_REMOVE)) { if (WM_QUIT == Message.message) { From 803b29146ea4394d008daecdbc11f55f91b20612 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Wed, 14 Sep 2022 17:57:36 +0800 Subject: [PATCH 053/793] Fixed memory error with SHLogger & spdlog The logger needs to be registered outside the library. As such, a macro SHLOG_REGISTER has been added, as well as a variable to the actual logger. The logger needs to be passed into the macro anywhere outside the library after it has been initialised to work on the dll. This has already been done right before the application runs. --- SHADE_Application/src/WinMain.cpp | 6 ++++-- SHADE_Engine/src/Tools/SHLogger.cpp | 17 ++++++++++------- SHADE_Engine/src/Tools/SHLogger.h | 13 ++++++++++--- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/SHADE_Application/src/WinMain.cpp b/SHADE_Application/src/WinMain.cpp index ea1ac5fe..e993d23f 100644 --- a/SHADE_Application/src/WinMain.cpp +++ b/SHADE_Application/src/WinMain.cpp @@ -26,13 +26,15 @@ INT WINAPI wWinMain ) { const SHADE::SHLogger::Config LOGGER_CONFIG{ .directoryPath = "./logs/" }; - SHADE::SHLogger::Initialise(LOGGER_CONFIG); + auto logger = SHADE::SHLogger::Initialise(LOGGER_CONFIG); try { #ifndef SHEDITOR //ShowWindow(::GetConsoleWindow(), SW_HIDE); - #endif + #endif + + SHLOG_REGISTER(logger) SHLOG_INFO("sup") diff --git a/SHADE_Engine/src/Tools/SHLogger.cpp b/SHADE_Engine/src/Tools/SHLogger.cpp index 7b39e979..9b6e5da2 100644 --- a/SHADE_Engine/src/Tools/SHLogger.cpp +++ b/SHADE_Engine/src/Tools/SHLogger.cpp @@ -30,8 +30,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ - unsigned char SHLogger::configFlags = DEFAULT_CONFIG_FLAG; - SHLogger::DateFormat SHLogger::dateFormat = SHLogger::DateFormat::DD_MM_YY; + unsigned char SHLogger::configFlags = DEFAULT_CONFIG_FLAG; + SHLogger::DateFormat SHLogger::dateFormat = SHLogger::DateFormat::DD_MM_YY; + SHLogger::Logger SHLogger::logger = nullptr; std::string SHLogger::trivialPattern; std::string SHLogger::verbosePattern; @@ -142,7 +143,7 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHLogger::Initialise(const Config& config) + SHLogger::Logger SHLogger::Initialise(const Config& config) { SetConfig(config); @@ -176,10 +177,10 @@ namespace SHADE FILE_SINK->set_pattern(trivialPattern + "%v"); // Create and register logger with spdlog - const auto LOGGER = std::make_shared(SHLOGGER_NAME, sinks.begin(), sinks.end()); - LOGGER->set_level(spdlog::level::trace); - LOGGER->flush_on(spdlog::level::trace); - register_logger(LOGGER); + logger = std::make_shared(SHLOGGER_NAME, sinks.begin(), sinks.end()); + logger->set_level(spdlog::level::trace); + logger->flush_on(spdlog::level::trace); + spdlog::register_logger(logger); // Flush every 3 seconds spdlog::flush_every(std::chrono::seconds(config.flushTime)); @@ -190,6 +191,8 @@ namespace SHADE { std::cout << "Log initialisation failed: " << e.what() << std::endl; } + + return logger; } void SHLogger::Shutdown() noexcept diff --git a/SHADE_Engine/src/Tools/SHLogger.h b/SHADE_Engine/src/Tools/SHLogger.h index dfb7dffd..f6ffda47 100644 --- a/SHADE_Engine/src/Tools/SHLogger.h +++ b/SHADE_Engine/src/Tools/SHLogger.h @@ -35,6 +35,8 @@ namespace SHADE /* Type Definitions */ /*---------------------------------------------------------------------------------*/ + using Logger = std::shared_ptr; + enum class ClockFormat { _12HR, _24HR }; enum class DateFormat @@ -107,7 +109,7 @@ namespace SHADE * @brief Creates a console and a file to log to. * @param[in] config The configuration parameters for the logger. */ - static void Initialise (const Config& config = Config{}); + static Logger Initialise (const Config& config = Config{}); static void Shutdown () noexcept; /** @@ -127,7 +129,9 @@ namespace SHADE static constexpr short DEFAULT_CONSOLE_LEN = 1024; static unsigned char configFlags; // Initialised 0 0 FuncLine# FuncFileName Date TimeFormat Time - static DateFormat dateFormat; + static DateFormat dateFormat; + + static Logger logger; static std::string trivialPattern; static std::string verbosePattern; @@ -172,4 +176,7 @@ namespace SHADE #define SHLOGV_CRITICAL(format, ...) SHADE::SHLogger::UseVerbosePattern(); SPDLOG_LOGGER_CRITICAL(spdlog::get(SHLOGGER_NAME), format, ## __VA_ARGS__); // Misc Logging Macros -#define SHLOG_FLOOR() SHADE::SHLogger::UseTrivialPattern(); SPDLOG_LOGGER_INFO(spdlog::get(SHLOGGER_NAME), "--------------------------------"); \ No newline at end of file +#define SHLOG_FLOOR() SHADE::SHLogger::UseTrivialPattern(); SPDLOG_LOGGER_INFO(spdlog::get(SHLOGGER_NAME), "--------------------------------"); + +// For use outside the library to register the logger +#define SHLOG_REGISTER(logger) spdlog::register_logger(logger); spdlog::set_level(spdlog::level::level_enum::trace); \ No newline at end of file From 5a1abe6530cc4ade97ca5663a7ff99b5cd158c2c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 14 Sep 2022 19:18:54 +0800 Subject: [PATCH 054/793] Auto stash before merge of "SP3-4-editor" and "origin/SP3-4-editor" --- .../Editor/Backend/SHImGuiVulkanBackend.cpp | 35 ++++++++++++++++++- .../src/Editor/Backend/SHImGuiVulkanBackend.h | 24 +++++++++++-- .../src/Graphics/Images/SHVkSampler.cpp | 6 ++++ .../src/Graphics/Images/SHVkSampler.h | 26 ++++++++++++++ 4 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp create mode 100644 SHADE_Engine/src/Graphics/Images/SHVkSampler.h diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp index 740ae683..676625bb 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp @@ -199,7 +199,7 @@ namespace SHADE viewport->PlatformHandle = io.UserData; } - void SHImGuiVulkanBackend::Render(void) noexcept + void SHImGuiVulkanBackend::Render(Handle const& commandBuffer) noexcept { GETINSTANCE ImGui::Render(); @@ -324,14 +324,22 @@ namespace SHADE fontsMipOffset.push_back(0); + // Create image. Data should be in staging only now fontsTexture = device->CreateImage(createParams, pixels, width * height * sizeof(uint32_t), fontsMipOffset, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, {}); + // TODO: Copy the image to device memory here + // 1. Start record + // 2. Do transfer + // 3. End record + // 4. execute cmd buffer + // We could put here the texture id if we wanted io.Fonts->TexID = nullptr; } void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept { + // Vertex input state SHVertexInputState vInputState{}; vInputState.AddBinding(false, true, { @@ -341,9 +349,11 @@ namespace SHADE } ); + // Shaders Handle vs = device->CreateShaderModule(__glsl_shader_vert_spv, "main", vk::ShaderStageFlagBits::eVertex, "__glsl_shader_vert_spv"); Handle fs = device->CreateShaderModule(__glsl_shader_frag_spv, "main", vk::ShaderStageFlagBits::eFragment, "__glsl_shader_frag_spv"); + // pipeline layout initialize shaders SHPipelineLayoutParams pipelineLayoutParams { .shaderModules = std::move (std::vector> @@ -353,11 +363,34 @@ namespace SHADE }), }; + // Create pipeline layout Handle pipelineLayouot = device->CreatePipelineLayout(pipelineLayoutParams); + + // Create pipeline (but dont construct it yet) Handle newPipeline = device->CreatePipeline(pipelineLayouot, nullptr, renderpass, subpassIndex, SH_PIPELINE_TYPE::GRAPHICS); + + // Set the vertex input state newPipeline->GetPipelineState().SetVertexInputState(vInputState); + + // Actually construct the pipeline newPipeline->ConstructPipeline(); + SHVkDescriptorPool::Config config + { + .MaxSets = 10, + .Flags = {}, + }; + + // Create a descriptor pool + descriptorPool = device->CreateDescriptorPools(config); + + // Allocate descriptor sets required for the fonts + descriptorSetGroup = + } + + void SHImGuiVulkanBackend::SHBreachInstance::Render(Handle const& commandBuffer, ImGuiIO& io, ImDrawData* draw_data, Handle const& descriptorSetGroup) noexcept + { + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h index 65b88ccf..47f31e4c 100644 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h @@ -23,8 +23,13 @@ namespace SHADE Handle vertexBuffer; Handle indicesBuffer; }; + //Required to create stuff Handle device; + + // Window of the imgui window SHWindow window; + + // Buffers required to draw the imgui entities std::array primitiveBuffers; public: @@ -34,18 +39,33 @@ namespace SHADE struct SHBreachInstance : public SHImGuiWindow { + // pipeline/shaders used to render imgui entities Handle pipeline; - Handle renderpass; + + // Last frame time std::chrono::time_point lastFrameTime; + + // Fonts texture Handle fontsTexture; + + // mip maps for font image (should just contain 1) std::vector fontsMipOffset; + + // Descriptor pool rquired to allocate descriptor sets + Handle descriptorPool; + + // Descriptor set required to store font texture + Handle descriptorSetGroup; + public: void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; void InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept; + void Render (Handle const& commandBuffer, ImGuiIO& io, ImDrawData* draw_data, Handle const& descriptorSetGroup) noexcept; + }; public: static void CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex, SHWindow& mainWindow) noexcept; - static void Render(void) noexcept; + static void Render(Handle const& commandBuffer) noexcept; static void EnableDocking(void) noexcept; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp new file mode 100644 index 00000000..f6117022 --- /dev/null +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -0,0 +1,6 @@ +#include "SHVkSampler.h" + +namespace SHADE +{ + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h new file mode 100644 index 00000000..5c6fcaad --- /dev/null +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -0,0 +1,26 @@ +#pragma once + +#include "Graphics/SHVulkanIncludes.h" + +namespace SHADE +{ + struct SHVkSamplerParams + { + vk::Filter minFilter; + vk::Filter maxFilter; + }; + + class SHVkSampler + { + private: + //! The vulkan sampler handler + vk::Sampler vkSampler; + + public: + SHVkSampler () noexcept; + SHVkSampler (SHVkSampler&& rhs) noexcept; + SHVkSampler&& operator=(SHVkSampler&& rhs) noexcept; + + }; +} + From 7459e198462c962e6fc2adea24a77f722e0b4561 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 14 Sep 2022 19:19:24 +0800 Subject: [PATCH 055/793] Changes --- SHADE_Engine/SHADE_Engine.vcxproj | 2 ++ SHADE_Engine/SHADE_Engine.vcxproj.filters | 2 ++ SHADE_Engine/src/Graphics/Images/SHVkSampler.h | 1 + 3 files changed, 5 insertions(+) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 08f58da4..694485a8 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -139,6 +139,7 @@ + @@ -217,6 +218,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 8e6c7d90..ebf959ad 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -368,6 +368,7 @@ Tools + @@ -552,5 +553,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h index 5c6fcaad..50603d69 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -8,6 +8,7 @@ namespace SHADE { vk::Filter minFilter; vk::Filter maxFilter; + vk::Filter maxFilter; }; class SHVkSampler From 921680d472192196bb0e2d659a7c8d615a8680de Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 14 Sep 2022 19:19:54 +0800 Subject: [PATCH 056/793] Deleted editor folder --- .../Editor/Backend/SHImGuiVulkanBackend.cpp | 396 ------------------ .../src/Editor/Backend/SHImGuiVulkanBackend.h | 86 ---- SHADE_Engine/src/Editor/SHEditor.cpp | 127 ------ SHADE_Engine/src/Editor/SHEditor.h | 31 -- SHADE_Engine/src/Editor/SHEditorBackend.h | 3 - 5 files changed, 643 deletions(-) delete mode 100644 SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp delete mode 100644 SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h delete mode 100644 SHADE_Engine/src/Editor/SHEditor.cpp delete mode 100644 SHADE_Engine/src/Editor/SHEditor.h delete mode 100644 SHADE_Engine/src/Editor/SHEditorBackend.h diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp deleted file mode 100644 index 676625bb..00000000 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.cpp +++ /dev/null @@ -1,396 +0,0 @@ - -#include -#include - -#include - -#include "SHImGuiVulkanBackend.h" - -#include - - -#include "Tools/SHLogger.h" -namespace SHADE -{ -#define GETINSTANCE \ - ImGuiIO& io = ImGui::GetIO(); \ - SHBreachInstance& instance = *reinterpret_cast(io.UserData); - - /* - #==============================================================# - || Embedded Shaders || - #==============================================================# - */ - // glsl_shader.vert, compiled with: - // # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert - /* - #version 450 core - layout(location = 0) in vec2 aPos; - layout(location = 1) in vec2 aUV; - layout(location = 2) in vec4 aColor; - layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc; - - out gl_PerVertex { vec4 gl_Position; }; - layout(location = 0) out struct { vec4 Color; vec2 UV; } Out; - - void main() - { - Out.Color = aColor; - Out.UV = aUV; - gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); - } - */ - static std::vector __glsl_shader_vert_spv = - { - 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, - 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, - 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, - 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, - 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, - 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, - 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, - 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, - 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, - 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, - 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, - 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, - 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, - 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, - 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, - 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, - 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, - 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, - 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, - 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, - 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, - 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, - 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, - 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, - 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, - 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, - 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, - 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, - 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, - 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, - 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, - 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, - 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, - 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, - 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, - 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, - 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, - 0x0000002d,0x0000002c,0x000100fd,0x00010038 - }; - - // glsl_shader.frag, compiled with: - // # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag - /* - #version 450 core - layout(location = 0) out vec4 fColor; - layout(set=0, binding=0) uniform sampler2D sTexture; - layout(location = 0) in struct { vec4 Color; vec2 UV; } In; - void main() - { - fColor = In.Color * texture(sTexture, In.UV.st); - } - */ - static std::vector __glsl_shader_frag_spv = - { - 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000d,0x00030010, - 0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00040005,0x00000009,0x6c6f4366,0x0000726f,0x00030005,0x0000000b,0x00000000, - 0x00050006,0x0000000b,0x00000000,0x6f6c6f43,0x00000072,0x00040006,0x0000000b,0x00000001, - 0x00005655,0x00030005,0x0000000d,0x00006e49,0x00050005,0x00000016,0x78655473,0x65727574, - 0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,0x0000001e, - 0x00000000,0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021, - 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, - 0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003, - 0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040017,0x0000000a,0x00000006, - 0x00000002,0x0004001e,0x0000000b,0x00000007,0x0000000a,0x00040020,0x0000000c,0x00000001, - 0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040015,0x0000000e,0x00000020, - 0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000001, - 0x00000007,0x00090019,0x00000013,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, - 0x00000001,0x00000000,0x0003001b,0x00000014,0x00000013,0x00040020,0x00000015,0x00000000, - 0x00000014,0x0004003b,0x00000015,0x00000016,0x00000000,0x0004002b,0x0000000e,0x00000018, - 0x00000001,0x00040020,0x00000019,0x00000001,0x0000000a,0x00050036,0x00000002,0x00000004, - 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000010,0x00000011,0x0000000d, - 0x0000000f,0x0004003d,0x00000007,0x00000012,0x00000011,0x0004003d,0x00000014,0x00000017, - 0x00000016,0x00050041,0x00000019,0x0000001a,0x0000000d,0x00000018,0x0004003d,0x0000000a, - 0x0000001b,0x0000001a,0x00050057,0x00000007,0x0000001c,0x00000017,0x0000001b,0x00050085, - 0x00000007,0x0000001d,0x00000012,0x0000001c,0x0003003e,0x00000009,0x0000001d,0x000100fd, - 0x00010038 - }; - - /* - #==============================================================# - || ImGui Push Constants || - #==============================================================# - */ - struct ImGui_Push_Constants - { - std::array scale; - std::array translate; - }; - - void SHImGuiVulkanBackend::CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex, SHWindow& mainWindow) noexcept - { - if (ImGui::GetCurrentContext() == nullptr) - { - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - } - else { SHLOG_WARNING("ImGui context already exists") }; - - ImGuiIO& io = ImGui::GetIO(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - //io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; // We can create multi-viewports on the Renderer side (optional) - //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) - io.BackendRendererName = "SHImGuiVulkanBackend"; - - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGuiPlatformIO& platformIO = ImGui::GetPlatformIO(); - platformIO.Renderer_CreateWindow = CreateChildWindow; - platformIO.Renderer_DestroyWindow = DestroyChildWindow; - platformIO.Renderer_SetWindowSize = SetChildWindowSize; - platformIO.Renderer_RenderWindow = RenderChildWindow; - platformIO.Renderer_SwapBuffers = ChildSwapBuffers; - - platformIO.Platform_CreateWindow = CreateChildWindow; - platformIO.Platform_DestroyWindow = DestroyChildWindow; - platformIO.Platform_ShowWindow = [](ImGuiViewport* pViewport) {}; - platformIO.Platform_SetWindowPos = SetChildWindowPos; - platformIO.Platform_GetWindowPos = GetChildWindowPos; - platformIO.Platform_SetWindowSize = SetChildWindowSize; - platformIO.Platform_GetWindowSize = GetChildWindowSize; - //platform_io.Platform_SetWindowFocus = ImGui_ImplGlfw_SetWindowFocus; - //platform_io.Platform_GetWindowFocus = ImGui_ImplGlfw_GetWindowFocus; - //platform_io.Platform_GetWindowMinimized = ImGui_ImplGlfw_GetWindowMinimized; - platformIO.Platform_SetWindowTitle = [](ImGuiViewport* pViewport, const char*) {}; - platformIO.Platform_RenderWindow = RenderChildWindow; - platformIO.Platform_SwapBuffers = ChildSwapBuffers; - - platformIO.Monitors.resize(0); - ImGuiPlatformMonitor monitor; - monitor.MainPos = monitor.WorkPos = {}; - monitor.MainSize = monitor.WorkSize = {}; - platformIO.Monitors.push_back(monitor); - }//if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - - //associate io keymap with engine input keymap - - //Initialize instance - auto instance = std::make_unique(); - instance->window = mainWindow; - instance->InitializePipeline(io, renderpass, subpassIndex); - instance->lastFrameTime = std::chrono::high_resolution_clock::now(); - io.UserData = instance.release(); - - ImGuiViewport* viewport = ImGui::GetMainViewport(); - viewport->RendererUserData = io.UserData; - viewport->PlatformHandle = io.UserData; - } - - void SHImGuiVulkanBackend::Render(Handle const& commandBuffer) noexcept - { - GETINSTANCE - ImGui::Render(); - ImDrawData* drawData = ImGui::GetDrawData(); - //instance.Render(io, drawData, ) - } - - void SHImGuiVulkanBackend::CreateChildWindow(ImGuiViewport* viewport) noexcept - { - GETINSTANCE - - auto& info = *new SHImGuiWindow{ instance.device }; - info.window.Create({}, instance.window.GetHWND()); - viewport->RendererUserData = &info; - } - - void SHImGuiVulkanBackend::DestroyChildWindow(ImGuiViewport* viewport) noexcept - { - GETINSTANCE - - auto info = reinterpret_cast(viewport->RendererUserData); - info->window.Close(); - info->window.Destroy(); - delete info; - viewport->RendererUserData = nullptr; - } - - ImVec2 SHImGuiVulkanBackend::GetChildWindowSize(ImGuiViewport* viewport) noexcept - { - auto info = reinterpret_cast(viewport->RendererUserData); - return{}; - } - - void SHImGuiVulkanBackend::SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept - { - auto& info = *reinterpret_cast(viewport->RendererUserData); - SetWindowPos - ( - info.window.GetHWND(), - HWND_TOPMOST, - -1, - -1, - static_cast(size.x), - static_cast(size.y), - SWP_NOMOVE | SWP_NOZORDER - ); - } - - ImVec2 SHImGuiVulkanBackend::GetChildWindowPos(ImGuiViewport* viewport) noexcept - { - auto& info = *reinterpret_cast(viewport->RendererUserData); - auto [x, y] = info.window.GetWindowSize(); - return {static_cast(x), static_cast(y)}; - } - - void SHImGuiVulkanBackend::SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept - { - auto& info = *reinterpret_cast(viewport->RendererUserData); - info.window.SetPosition(size.x, size.y); - } - - void SHImGuiVulkanBackend::RenderChildWindow(ImGuiViewport* viewport, void*) noexcept - { - GETINSTANCE; - auto& info = *reinterpret_cast(viewport->RendererUserData); - //info.Render(io, viewport->DrawData, instance);; - } - - void SHImGuiVulkanBackend::ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept - { - } - - - void SHImGuiVulkanBackend::SHImGuiWindow::InitializeBuffers(void) noexcept - { - for (auto& primBuffer : primitiveBuffers) - { - primBuffer.vertexBuffer = device->CreateBuffer(sizeof(ImDrawVert) * 3000, - nullptr, - sizeof(ImDrawVert) * 3000, - vk::BufferUsageFlagBits::eVertexBuffer, - VMA_MEMORY_USAGE_AUTO, - VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags - - primBuffer.indicesBuffer = device->CreateBuffer(sizeof(ImDrawIdx) * 3000, - nullptr, - sizeof(ImDrawIdx) * 3000, - vk::BufferUsageFlagBits::eIndexBuffer, - VMA_MEMORY_USAGE_AUTO, - VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // alloc flags - - } - } - - void SHImGuiVulkanBackend::SHImGuiWindow::Render(ImGuiIO& io, ImDrawData* drawData, - Handle descriptorSetGroup) - { - - } - - - void SHImGuiVulkanBackend::SHBreachInstance::CreateFontsTexture(Handle image, ImGuiIO& io) noexcept - { - // Build texture atlas - unsigned char* pixels; - int width, height; - - // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. - // If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - SHImageCreateParams createParams{}; - createParams.imageType = vk::ImageType::e2D; - createParams.width = width; - createParams.height = height; - createParams.depth = 1; - createParams.levels = 1; - createParams.arrayLayers = 1; - createParams.imageFormat = vk::Format::eR8G8B8A8Unorm; - createParams.usageFlags = vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst; - createParams.createFlags = {}; - - fontsMipOffset.push_back(0); - - // Create image. Data should be in staging only now - fontsTexture = device->CreateImage(createParams, pixels, width * height * sizeof(uint32_t), fontsMipOffset, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, {}); - - // TODO: Copy the image to device memory here - // 1. Start record - // 2. Do transfer - // 3. End record - // 4. execute cmd buffer - - // We could put here the texture id if we wanted - io.Fonts->TexID = nullptr; - } - - void SHImGuiVulkanBackend::SHBreachInstance::InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept - { - // Vertex input state - SHVertexInputState vInputState{}; - vInputState.AddBinding(false, true, - { - SHVertexAttribute(SHAttribFormat::FLOAT_2D), - SHVertexAttribute(SHAttribFormat::FLOAT_2D), - SHVertexAttribute(SHAttribFormat::UINT32_1D), - } - ); - - // Shaders - Handle vs = device->CreateShaderModule(__glsl_shader_vert_spv, "main", vk::ShaderStageFlagBits::eVertex, "__glsl_shader_vert_spv"); - Handle fs = device->CreateShaderModule(__glsl_shader_frag_spv, "main", vk::ShaderStageFlagBits::eFragment, "__glsl_shader_frag_spv"); - - // pipeline layout initialize shaders - SHPipelineLayoutParams pipelineLayoutParams - { - .shaderModules = std::move (std::vector> - { - vs, - fs, - }), - }; - - // Create pipeline layout - Handle pipelineLayouot = device->CreatePipelineLayout(pipelineLayoutParams); - - // Create pipeline (but dont construct it yet) - Handle newPipeline = device->CreatePipeline(pipelineLayouot, nullptr, renderpass, subpassIndex, SH_PIPELINE_TYPE::GRAPHICS); - - // Set the vertex input state - newPipeline->GetPipelineState().SetVertexInputState(vInputState); - - // Actually construct the pipeline - newPipeline->ConstructPipeline(); - - SHVkDescriptorPool::Config config - { - .MaxSets = 10, - .Flags = {}, - }; - - // Create a descriptor pool - descriptorPool = device->CreateDescriptorPools(config); - - // Allocate descriptor sets required for the fonts - descriptorSetGroup = - } - - void SHImGuiVulkanBackend::SHBreachInstance::Render(Handle const& commandBuffer, ImGuiIO& io, ImDrawData* draw_data, Handle const& descriptorSetGroup) noexcept - { - - } - -} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h b/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h deleted file mode 100644 index 47f31e4c..00000000 --- a/SHADE_Engine/src/Editor/Backend/SHImGuiVulkanBackend.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -#include -#include "Graphics/Instance/SHVkInstance.h" -#include "Graphics/Buffers/SHVkBuffer.h" -#include "Graphics/Images/SHVkImage.h" -#include "Graphics/Devices/SHVkPhysicalDevice.h" -#include "Graphics/Devices/SHVkLogicalDevice.h" -#include "Graphics/Pipeline/SHVkPipeline.h" -#include "Graphics/Swapchain/SHVkSwapchain.h" -#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" -#include "Graphics/Debugging/SHVulkanDebugUtil.h" -#include "Graphics/Windowing/SHWindow.h" - -namespace SHADE -{ - class SHImGuiVulkanBackend - { - struct SHImGuiWindow - { - struct Buffers - { - Handle vertexBuffer; - Handle indicesBuffer; - }; - //Required to create stuff - Handle device; - - // Window of the imgui window - SHWindow window; - - // Buffers required to draw the imgui entities - std::array primitiveBuffers; - - public: - void InitializeBuffers(void) noexcept; - void Render(ImGuiIO& io, ImDrawData* drawData, Handle descriptorSetGroup); - }; - - struct SHBreachInstance : public SHImGuiWindow - { - // pipeline/shaders used to render imgui entities - Handle pipeline; - - // Last frame time - std::chrono::time_point lastFrameTime; - - // Fonts texture - Handle fontsTexture; - - // mip maps for font image (should just contain 1) - std::vector fontsMipOffset; - - // Descriptor pool rquired to allocate descriptor sets - Handle descriptorPool; - - // Descriptor set required to store font texture - Handle descriptorSetGroup; - - public: - void CreateFontsTexture (Handle image, ImGuiIO& io) noexcept; - void InitializePipeline(ImGuiIO& io, Handle const& renderpass, uint32_t subpassIndex) noexcept; - void Render (Handle const& commandBuffer, ImGuiIO& io, ImDrawData* draw_data, Handle const& descriptorSetGroup) noexcept; - - }; - public: - static void CreateInstance(Handle const& logicalDevice, Handle const& renderpass, uint32_t subpassIndex, SHWindow& mainWindow) noexcept; - static void Render(Handle const& commandBuffer) noexcept; - - - static void EnableDocking(void) noexcept; - - //Platform specific functions - static void CreateChildWindow(ImGuiViewport* viewport) noexcept; - static void DestroyChildWindow(ImGuiViewport* viewport) noexcept; - static ImVec2 GetChildWindowSize(ImGuiViewport* viewport) noexcept; - static void SetChildWindowSize(ImGuiViewport* viewport, ImVec2 size) noexcept; - static ImVec2 GetChildWindowPos(ImGuiViewport* viewport) noexcept; - static void SetChildWindowPos(ImGuiViewport* viewport, ImVec2 size) noexcept; - static void RenderChildWindow(ImGuiViewport* viewport, void*) noexcept; - static void ChildSwapBuffers(ImGuiViewport* viewport, void*) noexcept; - - private: - - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp deleted file mode 100644 index ab3a220a..00000000 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "SHpch.h" -#include "SHEditor.h" -#include "SHEditorBackend.h" - -#include - -#include -#include -#include -#include -#include "Graphics/Swapchain/SHVkSwapchain.h" -#include "Graphics/Debugging/SHVulkanDebugUtil.h" - -#include "Tools/SHLogger.h" - -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -namespace SHADE -{ - Handle SHEditor::cmdPool; - Handle SHEditor::cmdBuffer; - - void SHEditor::Initialize(HWND hwnd) - { - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - - ImGuiIO& io = ImGui::GetIO(); - - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; - - SetupWin32Backend(hwnd); - SetupVulkanBackend(); - - - } - - void SHEditor::PreRender() - { - cmdPool->Reset(); - } - - void SHEditor::Update() - { - NewFrame(); - - //Add all windows to draw list, Perform necessary updates - //ImGui::ShowDemoWindow(); - - ImGui::Render(); - } - - void SHEditor::Render() - { - ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmdBuffer->GetVkCommandBuffer()); - - ImGuiIO& io = ImGui::GetIO(); - if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindowsDefault(); - } - - } - - void SHEditor::Exit() - { - ShutdownVulkanBackend(); - ShutdownWin32Backend(); - ImGui::DestroyContext(); - } - - void SHEditor::SetupVulkanBackend() - { - ImGui_ImplVulkan_InitInfo initInfo; - - initInfo.Instance = SHVkInstance::GetVkInstance(); - auto gfxSystem = reinterpret_cast(SHSystemManager::GetSystem("Graphics System")); - initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice(); - initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice(); - initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue(); - initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages(); - initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle(); - initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; - initInfo.Allocator = nullptr; - initInfo.PipelineCache = nullptr; - initInfo.Subpass = 0; - - initInfo.CheckVkResultFn = [](VkResult err) - { - if (err == VK_SUCCESS) - return; - SHVulkanDebugUtil::ReportVkError(vk::Result(err), "Editor Error"); - }; - - ImGui_ImplVulkan_Init(&initInfo, gfxSystem->GetRenderGraph().GetNode("G-Buffer")->GetRenderpass()->GetVkRenderpass()); - - cmdPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); - cmdBuffer = cmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - - ImGui_ImplVulkan_CreateFontsTexture(cmdBuffer->GetVkCommandBuffer()); - } - - void SHEditor::ShutdownVulkanBackend() - { - ImGui_ImplVulkan_Shutdown(); - } - - void SHEditor::NewFrame() - { - ImGui_ImplVulkan_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - } - - void SHEditor::SetupWin32Backend(HWND hwnd) - { - ImGui_ImplWin32_Init(hwnd); - } - - void SHEditor::ShutdownWin32Backend() - { - } - -} diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h deleted file mode 100644 index be83e22b..00000000 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once -#include "Graphics/Commands/SHVkCommandPool.h" - -namespace SHADE -{ - class SHEditor - { - public: - - static void Initialize(HWND hwnd); - - static void PreRender(); - - static void Update(); - - static void Render(); - - static void Exit(); - - private: - static void SetupWin32Backend(HWND hwnd); - static void ShutdownWin32Backend(); - static void SetupVulkanBackend(); - static void ShutdownVulkanBackend(); - - static void NewFrame(); - - static Handle cmdPool; - static Handle cmdBuffer; - }; -} diff --git a/SHADE_Engine/src/Editor/SHEditorBackend.h b/SHADE_Engine/src/Editor/SHEditorBackend.h deleted file mode 100644 index 29a19f86..00000000 --- a/SHADE_Engine/src/Editor/SHEditorBackend.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once -#include -#include \ No newline at end of file From e67b90c6a8375d11eee4e753ed8809b917b62208 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 14 Sep 2022 20:07:13 +0800 Subject: [PATCH 057/793] Added calls to SHScriptEngine in SBApplication --- SHADE_Application/src/Application/SBApplication.cpp | 12 ++++++++---- SHADE_Engine/src/Scripting/SHScriptEngine.h | 3 ++- SHADE_Managed/premake5.lua | 2 -- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0cb1ecd1..aa0f5a9b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -6,12 +6,12 @@ #include "Scenes/SBEditorScene.h" #endif // SHEDITOR -#include "Tools/SHLogger.h" - #include #include #include +#include "Scripting/SHScriptEngine.h" + namespace Sandbox { bool paused = false; @@ -23,14 +23,15 @@ namespace Sandbox _In_ INT nCmdShow ) { - SHLOG_TITLE("Initialising SBApplication") - + window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); #ifdef SHEDITOR #else #endif + // Set up scripting + SHADE::SHScriptEngine::Init(); } void SBApplication::Update(void) @@ -47,6 +48,9 @@ namespace Sandbox void SBApplication::Exit(void) { + // Shutdown scripting + SHADE::SHScriptEngine::Exit(); + #ifdef SHEDITOR #else #endif diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index a375c864..5114125c 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -18,6 +18,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHDotNetRuntime.h" #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/Entity/SHEntity.h" +#include "SH_API.h" namespace SHADE { @@ -25,7 +26,7 @@ namespace SHADE /// Manages initialisation of the DotNetRuntime and interfacing with CLR code written /// and executed on .NET. /// - class SHScriptEngine + class SH_API SHScriptEngine { public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index b68fadb6..0cbf0288 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -38,7 +38,6 @@ project "SHADE_Managed" { "yaml-cpp", "imgui", - "spdlog", "SHADE_Engine" } @@ -56,7 +55,6 @@ project "SHADE_Managed" { "yaml-cpp", "imgui", - "spdlog", "SHADE_Engine" } From 7c64a128960c91f09dfea79aecf3d8ac20c87e7e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 14 Sep 2022 20:09:01 +0800 Subject: [PATCH 058/793] Moved spdlog lib link to SHADE_Engine and removed KTX references in Premake --- SHADE_Application/SHADE_Application.vcxproj | 4 ---- SHADE_Application/premake5.lua | 11 ----------- SHADE_Engine/SHADE_Engine.vcxproj | 9 ++++----- SHADE_Engine/SHADE_Engine.vcxproj.filters | 1 - SHADE_Engine/premake5.lua | 7 +++---- 5 files changed, 7 insertions(+), 25 deletions(-) diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 65a17de9..20e738cc 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -71,8 +71,6 @@ Windows true - spdlogd.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup @@ -96,8 +94,6 @@ Windows true true - spdlog.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 8aa03a13..7698f954 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -37,24 +37,13 @@ project "SHADE_Application" { "SHADE_Engine", } - - libdirs - { - "%{IncludeDir.spdlog}/lib", - } - - postbuildcommands - { - } warnings 'Extra' filter "configurations:Debug" symbols "On" defines {"_DEBUG"} - links{"spdlogd.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE"} - links{"spdlog.lib"} diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 2fb0ebb4..79c16edd 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -71,8 +71,8 @@ Windows true - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) + vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Debug\SHADE_Engine.lib @@ -99,8 +99,8 @@ Windows true true - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) + vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Release\SHADE_Engine.lib @@ -180,7 +180,6 @@ - diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index e92c1d2e..6af93131 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -383,7 +383,6 @@ Tools - diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 41693aa8..47b679e4 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -45,8 +45,7 @@ project "SHADE_Engine" "%{IncludeDir.assimp}/lib/Debug", "%{IncludeDir.assimp}/lib/Release", "%{IncludeDir.RTTR}/lib", - "%{IncludeDir.ktx}/lib/Debug", - "%{IncludeDir.ktx}/lib/Release", + "%{IncludeDir.spdlog}/lib" } links @@ -93,11 +92,11 @@ project "SHADE_Engine" filter "configurations:Debug" symbols "On" defines {"_DEBUG"} - links{"assimp-vc142-mtd.lib", "ktxd.lib", "librttr_core_d.lib"} + links{"assimp-vc142-mtd.lib", "librttr_core_d.lib", "spdlogd.lib"} --links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE"} - links{"assimp-vc142-mt.lib", "ktx.lib", "librttr_core.lib"} + links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} --links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file From 95c3609d211551e1a963fca438f9dcd64ee6d3be Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 14 Sep 2022 20:26:31 +0800 Subject: [PATCH 059/793] Removed all references to Plushie --- SHADE_Engine/src/Scripting/SHDotNetRuntime.h | 2 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 12 ++++++------ SHADE_Engine/src/Scripting/SHScriptEngine.h | 14 +++++++------- SHADE_Engine/src/Tools/SHStringUtils.cpp | 2 +- SHADE_Engine/src/Tools/SHStringUtils.h | 2 +- SHADE_Engine/src/Tools/SHStringUtils.hpp | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.h b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h index 22f8d9c7..2eb69788 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.h +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h @@ -144,6 +144,6 @@ namespace SHADE static std::string buildTpaList(const std::string& directory); static void throwIfFailed(const std::string& errMsg, int resultCode); }; -} // namespace PlushieEngine::Scripts +} #include "SHDotNetRuntime.hpp" diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 6653284d..682841cd 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -25,7 +25,7 @@ namespace SHADE /*--------------------------------------------------------------------------------*/ /* Static Definitions */ /*--------------------------------------------------------------------------------*/ - const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string(DEFAULT_CSHARP_LIB_NAME); + const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); SHDotNetRuntime SHScriptEngine::dotNet { false }; SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineInit = nullptr; SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineLoadScripts = nullptr; @@ -185,7 +185,7 @@ namespace SHADE // Prepare directory (delete useless files) deleteFolder("net5.0"); deleteFolder("ref"); - deleteFolder("../PlushieGameManaged"); + deleteFolder("../SHADE_Scripting"); deleteFolder("../obj"); // Attempt to build the assembly @@ -196,12 +196,12 @@ namespace SHADE const bool BUILD_SUCCESS = execProcess ( L"C:\\Windows\\system32\\cmd.exe", - L"/K \"dotnet build \"../PlushieGameManaged.csproj\" -c Debug -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet & exit\"" + L"/K \"dotnet build \"../SHADE_Scripting.csproj\" -c Debug -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet & exit\"" ) == 0; if (BUILD_SUCCESS) { // Copy to built dll to the working directory and replace - std::filesystem::copy_file("./tmp/PlushieGameManaged.dll", "PlushieGameManaged.dll", std::filesystem::copy_options::overwrite_existing); + std::filesystem::copy_file("./tmp/SHADE_Managed.dll", "SHADE_Managed.dll", std::filesystem::copy_options::overwrite_existing); oss << "[ScriptEngine] Successfully built Managed Script Assembly (" << MANAGED_SCRIPT_LIB_NAME << ")!"; SHLOG_INFO(oss.str()); @@ -256,8 +256,8 @@ namespace SHADE \n\ \n\ \n\ - \n\ - .\\bin\\PlushieAPI.dll\n\ + \n\ + .\\bin\\SHADE_Managed.dll\n\ \n\ \n\ "; diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 5114125c..442c0053 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -60,7 +60,7 @@ namespace SHADE /// static void ReloadScriptAssembly(); /// - /// Executes the FixedUpdate()s of the PlushieScripts that are attached to + /// Executes the FixedUpdate()s of the Scripts that are attached to /// Entities. /// static void ExecuteFixedUpdates(); @@ -76,7 +76,7 @@ namespace SHADE /// Adds a Script to a specified Entity. Note that while you can call this /// multiple times on a specified Entity, it will work for all intents and /// purposes but GetScript<T>() (C# only) currently only - /// gives you the first PlushieScript added of the specified type. + /// gives you the first Script added of the specified type. /// /// The entity to add a script to. /// Type name of the script to add. @@ -87,7 +87,7 @@ namespace SHADE static bool AddScript(const SHEntity& entity, const std::string_view& scriptName); /// /// Removes all Scripts attached to the specified Entity. Does not do anything - /// if the specified Entity is invalid or does not have any PlushieScripts + /// if the specified Entity is invalid or does not have any Scripts /// attached. /// /// The entity to remove the scripts from. @@ -96,7 +96,7 @@ namespace SHADE /// Removes all Scripts attached to the specified Entity. Unlike /// RemoveAllScripts(), this removes all the scripts immediately. /// Does not do anything if the specified Entity is invalid or does not have any - /// PlushieScripts attached. + /// Scripts attached. /// /// The entity to remove the scripts from. /// @@ -131,13 +131,13 @@ namespace SHADE /* Script Editor Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Renders the set of attached PlushieScripts for the specified Entity into the + /// Renders the set of attached Scripts for the specified Entity into the /// inspector. ///
/// This function is meant for consumption from native code in the inspector /// rendering code. ///
- /// The Entity to render the PlushieScripts of. + /// The Entity to render the Scripts of. static void RenderScriptsInInspector(const SHEntity& entity); /*-----------------------------------------------------------------------------*/ @@ -145,7 +145,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /// /// Utilises execution of a external batch file for invoking the dotnet build - /// tool to compile C# scripts in the Assets folder into the PlushieGameManaged + /// tool to compile C# scripts in the Assets folder into the SHADE_Scripting /// C# assembly DLL. /// /// diff --git a/SHADE_Engine/src/Tools/SHStringUtils.cpp b/SHADE_Engine/src/Tools/SHStringUtils.cpp index a8dc4a0c..a2594888 100644 --- a/SHADE_Engine/src/Tools/SHStringUtils.cpp +++ b/SHADE_Engine/src/Tools/SHStringUtils.cpp @@ -49,4 +49,4 @@ namespace SHADE return std::system_category().message(errorCode); } -} // namespace PlushieEngine \ No newline at end of file +} \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHStringUtils.h b/SHADE_Engine/src/Tools/SHStringUtils.h index abfe9146..1c895b99 100644 --- a/SHADE_Engine/src/Tools/SHStringUtils.h +++ b/SHADE_Engine/src/Tools/SHStringUtils.h @@ -76,6 +76,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ SHStringUtils() = delete; }; -} // namespace PlushieEngine +} #include "SHStringUtils.hpp" diff --git a/SHADE_Engine/src/Tools/SHStringUtils.hpp b/SHADE_Engine/src/Tools/SHStringUtils.hpp index 5b4caecb..8b83187a 100644 --- a/SHADE_Engine/src/Tools/SHStringUtils.hpp +++ b/SHADE_Engine/src/Tools/SHStringUtils.hpp @@ -43,4 +43,4 @@ namespace SHADE return results; } -} // namespace PlushieEngine \ No newline at end of file +} \ No newline at end of file From 57393ad7e48be9effeece77ebf27bf712b6c9613 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 14 Sep 2022 20:29:40 +0800 Subject: [PATCH 060/793] Updated projects to use .NET 6.0 --- SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp | 4 ++-- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 ++-- SHADE_Managed/premake5.lua | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp index 6226949e..89603524 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp @@ -126,7 +126,7 @@ namespace SHADE throwIfFailed("[DotNetRuntime] Failed to initialize CoreCLR.", result); initialised = true; - SHLOG_INFO("[DotNetRuntime] Successfully loaded the .NET 5.0 Runtime."); + SHLOG_INFO("[DotNetRuntime] Successfully loaded the .NET 6.0 Runtime."); } void SHDotNetRuntime::Exit() @@ -144,7 +144,7 @@ namespace SHADE domainId = 0; initialised = false; - SHLOG_INFO("[DotNetRuntime] Successfully shut down the .NET 5.0 Runtime."); + SHLOG_INFO("[DotNetRuntime] Successfully shut down the .NET 6.0 Runtime."); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 682841cd..cb8f24c9 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -183,7 +183,7 @@ namespace SHADE constexpr std::string_view BUILD_LOG_PATH = "../Build.log"; // Prepare directory (delete useless files) - deleteFolder("net5.0"); + deleteFolder("net6.0"); deleteFolder("ref"); deleteFolder("../SHADE_Scripting"); deleteFolder("../obj"); @@ -229,7 +229,7 @@ namespace SHADE static std::string_view FILE_CONTENTS = "\n\ \n\ - net5.0\n\ + net6.0\n\ x64\n\ Release;Debug\n\ \n\ diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 0cbf0288..4651e68e 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -2,7 +2,7 @@ project "SHADE_Managed" kind "SharedLib" language "C++" clr "NetCore" - dotnetframework "net5.0" + dotnetframework "net6.0" cppdialect "C++17" targetdir ("bin/" .. outputdir .. "/%{prj.name}") objdir ("bin-int/" .. outputdir .. "/%{prj.name}") From 599f1e4ffe3da497916c5bcd62e1e668c2e8619a Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 14 Sep 2022 21:47:39 +0800 Subject: [PATCH 061/793] add sdl to dependencies --- Dependencies.bat | 18 +++++++++++++++++- Dependencies.lua | 1 + SHADE_Application/premake5.lua | 4 ++++ SHADE_Engine/premake5.lua | 13 +++++++------ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Dependencies.bat b/Dependencies.bat index bbce926b..ab015bab 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -17,10 +17,11 @@ echo "J - imnodes" echo "K - tracy" echo "L - RTTR" echo "M - yamlcpp" +echo "O - SDL" echo --------------------------------------------------- echo. -choice /C ABCDEFGHIJKLM /T 10 /D A +choice /C ABCDEFGHIJKLMNO /T 10 /D A set _e=%ERRORLEVEL% if %_e%==1 goto VMA @@ -36,6 +37,7 @@ if %_e%==10 goto imnodes if %_e%==11 goto tracy if %_e%==12 goto RTTR if %_e%==13 goto yamlcpp +if %_e%==15 goto SDL :VMA echo -----------------------VMA---------------------------- @@ -107,6 +109,20 @@ if %_e%==12 (goto :done) else (goto :yamlcpp) echo -----------------------yamlcpp---------------------------- rmdir "Dependencies/yamlcpp" /S /Q git clone https://github.com/SHADE-DP/yaml-cpp.git "Dependencies/yamlcpp" +if %_e%==13 (goto :done) else (goto :SDL) + +:SDL +echo -----------------------SDL---------------------------- +rmdir "Dependencies/SDL" /S /Q +mkdir "Dependencies/SDL/include" +mkdir "Dependencies/SDL/lib" +powershell -Command "& {wget https://github.com/libsdl-org/SDL/releases/download/release-2.24.0/SDL2-devel-2.24.0-VC.zip -OutFile "Dependencies/SDL/SDL.zip"}" +powershell -Command "& {Expand-Archive -LiteralPath Dependencies/SDL/SDL.zip -DestinationPath Dependencies/SDL/tmp}" +robocopy "Dependencies/SDL/tmp/SDL2-2.24.0/lib/x64" "Dependencies/SDL/lib/" /ns /nfl /ndl /nc /njh +robocopy "Dependencies/SDL/tmp/SDL2-2.24.0/include/" "Dependencies/SDL/include/" /ns /nfl /ndl /nc /njh +rmdir "Dependencies/SDL/tmp/" /s /q +del "Dependencies/SDL/SDL.zip" +powershell -Command "& {Remove-Item "Dependencies/SDL/SDL.zip"}" :done echo DONE! diff --git a/Dependencies.lua b/Dependencies.lua index 32382cf9..712f1a89 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -12,4 +12,5 @@ IncludeDir["yamlcpp"] = "%{wks.location}/Dependencies/yamlcpp/include" IncludeDir["RTTR"] = "%{wks.location}/Dependencies/RTTR" IncludeDir["ktx"] = "%{wks.location}/Dependencies/ktx" IncludeDir["reactphysics3d"] = "%{wks.location}/Dependencies/reactphysics3d" +IncludeDir["SDL"] = "%{wks.location}/Dependencies/SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 8aa03a13..0830a8e1 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -26,6 +26,7 @@ project "SHADE_Application" "../SHADE_Engine/src", "src", "%{IncludeDir.dotnet}/include", + "%{IncludeDir.SDL}/include", } flags @@ -36,11 +37,14 @@ project "SHADE_Application" links { "SHADE_Engine", + "SDL2.lib", + "SDL2main.lib" } libdirs { "%{IncludeDir.spdlog}/lib", + "%{IncludeDir.SDL}/lib", } postbuildcommands diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 41693aa8..12b526b1 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -31,7 +31,7 @@ project "SHADE_Engine" "%{IncludeDir.tracy}", "%{IncludeDir.VMA}/include", "%{IncludeDir.yamlcpp}", - "%{IncludeDir.ktx}/include", + "%{IncludeDir.SDL}/include", "%{IncludeDir.RTTR}/include", "%{IncludeDir.reactphysics3d}/include", "%{IncludeDir.VULKAN}/include", @@ -45,8 +45,7 @@ project "SHADE_Engine" "%{IncludeDir.assimp}/lib/Debug", "%{IncludeDir.assimp}/lib/Release", "%{IncludeDir.RTTR}/lib", - "%{IncludeDir.ktx}/lib/Debug", - "%{IncludeDir.ktx}/lib/Release", + "%{IncludeDir.SDL}/lib", } links @@ -57,7 +56,9 @@ project "SHADE_Engine" "reactphysics3d", "imgui", "vulkan-1.lib", - "shaderc_shared.lib" + "shaderc_shared.lib", + "SDL2.lib", + "SDL2main.lib" } defines @@ -93,11 +94,11 @@ project "SHADE_Engine" filter "configurations:Debug" symbols "On" defines {"_DEBUG"} - links{"assimp-vc142-mtd.lib", "ktxd.lib", "librttr_core_d.lib"} + links{"assimp-vc142-mtd.lib", "librttr_core_d.lib"} --links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE"} - links{"assimp-vc142-mt.lib", "ktx.lib", "librttr_core.lib"} + links{"assimp-vc142-mt.lib", "librttr_core.lib"} --links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file From a2353e44463b1be81b54b0f6fe859fc1e9d31d0e Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Wed, 14 Sep 2022 22:00:00 +0800 Subject: [PATCH 062/793] frc commit, not connected yet --- SHADE_Engine/SHADE_Engine.vcxproj | 2 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 2 + .../src/FRC/SHFramerateController.cpp | 134 ++++++++++++++++++ SHADE_Engine/src/FRC/SHFramerateController.h | 62 ++++++++ 4 files changed, 200 insertions(+) create mode 100644 SHADE_Engine/src/FRC/SHFramerateController.cpp create mode 100644 SHADE_Engine/src/FRC/SHFramerateController.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index e54c82ec..92534760 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -117,6 +117,7 @@ + @@ -201,6 +202,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7486fad4..a0e2fd55 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -382,6 +382,7 @@ Tools + @@ -583,5 +584,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/FRC/SHFramerateController.cpp b/SHADE_Engine/src/FRC/SHFramerateController.cpp new file mode 100644 index 00000000..d64c6336 --- /dev/null +++ b/SHADE_Engine/src/FRC/SHFramerateController.cpp @@ -0,0 +1,134 @@ +/********************************************************************* + * \file SHFramerateController.cpp + * \author Ryan Wang Nian Jing + * \brief Definition for functions of the framerate controller + * Handles changing of scenes and manages loop (timestep, etc.) + * + * \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. + *********************************************************************/ + +#include +#include +#include +#include "SHFramerateController.h" +#include "../Tools/SHLogger.h" + +namespace SHADE +{ + //Init statics + double SHFramerateController::fixedTimestep = 0.01; + SHScene* SHFramerateController::previousScene = nullptr; + SHScene* SHFramerateController::currentScene = nullptr; + SHScene* SHFramerateController::nextScene = nullptr; + bool SHFramerateController::toRestart = false; + bool SHFramerateController::toQuit = false; + + //Scene manager loop + void SHFramerateController::Run(SHScene* firstScene) + { + if (firstScene == nullptr) + { + SHLOG_ERROR("Do not pass a nullptr as the firstScene"); + return; + } + + //Set quit and restart flags to false + toQuit = false; + toRestart = false; + + //Set the first scene to run + previousScene = firstScene; + currentScene = firstScene; + nextScene = firstScene; + + while (!toQuit) + { + if (toRestart) + { + //Restart current scene + currentScene = previousScene; + nextScene = previousScene; + toRestart = false; + } + else + { + //Move to a new scene + currentScene->Load(); + } + + //Call init function of current scene + currentScene->Init(); + + //Have an initial value + //This frame time will fluctuate + //SHOULD be larger than the fixed timestep + //TODO this might need to be changed + double variableLastFrameTime = fixedTimestep; + + //Time accumulator for meshing between fixed and variable timesteps + double accumulator = 0.0; + + //Start state loop + while (currentScene == nextScene && !toQuit && !toRestart) + { + //Use of new STL timing functions + //https://en.cppreference.com/w/cpp/chrono + std::chrono::duration deltaTime; + + auto startTime = std::chrono::high_resolution_clock::now(); + + //Whittle down the accumulator by continuously simulating + for (; accumulator > fixedTimestep; accumulator -= fixedTimestep) + { + MSG msg; + if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + //TODO change to double + currentScene->Update((float)fixedTimestep); + } + + //Interpolation + //Manage the alpha value well + //https://randomascii.wordpress.com/2012/02/13/dont-store-that-in-a-float/ + //Key points: + //1) Any time you add or subtract floats of widely varying + // magnitudes, you need to watch for loss of precision + //2) Sometimes using double instead of float is the correct + // solution, but often a more stable algorithm is more important + //3) calcT() should probably use double (to give sufficient + // precision after many hours of gameplay) + + //TODO awaiting approval to use this + //double alpha = accumulator / fixedTimestep; + + //assert alpha does not go out of range + + currentScene->Render(); + + auto endTime = std::chrono::high_resolution_clock::now(); + deltaTime = endTime - startTime; + variableLastFrameTime = deltaTime.count(); + + //Increase accumulator + accumulator += variableLastFrameTime; + } + + //Free once out of scene loop + currentScene->Free(); + + //Check if not to restart state + //If so, unload + if (!toRestart) currentScene->Unload(); + + //Shift forward scenes + previousScene = currentScene; + currentScene = nextScene; + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/FRC/SHFramerateController.h b/SHADE_Engine/src/FRC/SHFramerateController.h new file mode 100644 index 00000000..26f276d8 --- /dev/null +++ b/SHADE_Engine/src/FRC/SHFramerateController.h @@ -0,0 +1,62 @@ +/********************************************************************* + * \file SHFramerateController.h + * \author Ryan Wang Nian Jing + * \brief Declaration for the framerate controller + * Handles changing of scenes and manages loop (timestep, etc.) + * + * \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. + *********************************************************************/ + +#ifndef SH_FRAMERATECONTROLLER_H +#define SH_FRAMERATECONTROLLER_H +#pragma once + +#include "../Scene/SHScene.h" + +namespace SHADE +{ + class SHFramerateController + { + private: + //scene pointers + static SHScene* previousScene; + static SHScene* currentScene; + static SHScene* nextScene; + + //Flags + //Whether the flag has been raised for the game to be quit + static bool toQuit; + + //Whether the flag has been raised for the current scene to restart + static bool toRestart; + + public: + //Fixed timestep value for physics. Default at 1/100th of a second. + //Should be lower than the variable refresh rate + static double fixedTimestep; + + //Scene Manager Loop + //This loop is vital to the game because it runs for as long as the game + //runs. Before entering, initialise vital systems for game. After exiting, + //free these vital systems before finishing the main() function and + //terminating the game + //Parameter of firstScene is what scene the game should start with + static void Run(SHScene* firstScene); + + //Set the flag to restart the current game scene + static inline void RestartScene() { toRestart = true; } + + //Set the flag to halt running of the scene manager and quit the game + static inline void QuitGame() { toQuit = true; } + + //Set the next scene to be excuted + //This will tell the scene manager to + //halt execution of the current scene and prepare + //execution of the next + static inline void SetNextScene(SHScene* const next) { nextScene = next; } + }; +} + +#endif \ No newline at end of file From 7bc0dfb399f021c05749aaf68f47e7402c83a647 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 00:33:12 +0800 Subject: [PATCH 063/793] Set working directory of the application to be the executable location --- .../src/Application/SBApplication.cpp | 4 +- SHADE_Engine/SHADE_Engine.vcxproj | 7 ++-- SHADE_Engine/SHADE_Engine.vcxproj.filters | 7 +++- SHADE_Engine/premake5.lua | 3 +- SHADE_Engine/src/Tools/SHFileUtilties.cpp | 30 +++++++++++++++ SHADE_Engine/src/Tools/SHFileUtilties.h | 38 +++++++++++++++++++ 6 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 SHADE_Engine/src/Tools/SHFileUtilties.cpp create mode 100644 SHADE_Engine/src/Tools/SHFileUtilties.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0cb1ecd1..dc497dbe 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -7,6 +7,7 @@ #endif // SHEDITOR #include "Tools/SHLogger.h" +#include "Tools/SHFileUtilties.h" #include #include @@ -23,7 +24,8 @@ namespace Sandbox _In_ INT nCmdShow ) { - SHLOG_TITLE("Initialising SBApplication") + // Set working directory + SHADE::SHFileUtilities::SetWorkDirToExecDir(); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 2fb0ebb4..752a329c 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -71,7 +71,7 @@ Windows true - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) + vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) ..\bin\Debug\SHADE_Engine.lib @@ -99,7 +99,7 @@ Windows true true - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) + vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) ..\bin\Release\SHADE_Engine.lib @@ -180,7 +180,6 @@ - @@ -197,6 +196,7 @@ + @@ -269,6 +269,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index e92c1d2e..31c76d27 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -377,13 +377,15 @@ Tools + + Tools + Tools Tools - @@ -582,6 +584,9 @@ Tools + + Tools + Tools diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 41693aa8..4d215f5a 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -57,7 +57,8 @@ project "SHADE_Engine" "reactphysics3d", "imgui", "vulkan-1.lib", - "shaderc_shared.lib" + "shaderc_shared.lib", + "shlwapi" } defines diff --git a/SHADE_Engine/src/Tools/SHFileUtilties.cpp b/SHADE_Engine/src/Tools/SHFileUtilties.cpp new file mode 100644 index 00000000..0e75b16a --- /dev/null +++ b/SHADE_Engine/src/Tools/SHFileUtilties.cpp @@ -0,0 +1,30 @@ +/************************************************************************************//*! +\file SHFileUtilities.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 15, 2022 +\brief Contains the definition of functions of the SHFileUtilities static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include "SHpch.h" +// Primary Header +#include "SHFileUtilties.h" +// Standard Libraries +#include +// External Dependencies +#include // GetModuleFileName, PathRemoveFileSpec + +namespace SHADE +{ + void SHFileUtilities::SetWorkDirToExecDir() + { + TCHAR currentExecFilePath[MAX_PATH] = { '\0' }; + GetModuleFileName(nullptr, currentExecFilePath, MAX_PATH); + PathRemoveFileSpec(currentExecFilePath); + std::filesystem::current_path(currentExecFilePath); + } +} diff --git a/SHADE_Engine/src/Tools/SHFileUtilties.h b/SHADE_Engine/src/Tools/SHFileUtilties.h new file mode 100644 index 00000000..b9ba164b --- /dev/null +++ b/SHADE_Engine/src/Tools/SHFileUtilties.h @@ -0,0 +1,38 @@ +/************************************************************************************//*! +\file SHFileUtilities.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 15, 2022 +\brief Contains the SHFileUtilities static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ + +// Project Headers +#include "SH_API.h" + +namespace SHADE +{ + /*!************************************************************************************ + + \class SHFileUtilities + + \brief + Static class that contains functions for working with files and directories. + + **************************************************************************************/ + class SH_API SHFileUtilities + { + public: + /*!********************************************************************************** + + \brief + Sets the application's current working directory to the application executable's + directory. + + ************************************************************************************/ + static void SetWorkDirToExecDir(); + }; +} From 5e4eabc58232ef636d3c9c37ab0c935c0cb6346d Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 15 Sep 2022 00:48:43 +0800 Subject: [PATCH 064/793] [WIP] SDL Window wrap --- Dependencies.bat | 1 - .../src/Application/SBApplication.cpp | 5 +-- .../src/Application/SBApplication.h | 4 ++- .../Graphics/Windowing/SDL/SHSDLWindow.cpp | 36 +++++++++++++++++++ .../src/Graphics/Windowing/SDL/SHSDLWindow.h | 21 +++++++++++ 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp create mode 100644 SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h diff --git a/Dependencies.bat b/Dependencies.bat index ab015bab..14c8ca03 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -121,7 +121,6 @@ powershell -Command "& {Expand-Archive -LiteralPath Dependencies/SDL/SDL.zip -De robocopy "Dependencies/SDL/tmp/SDL2-2.24.0/lib/x64" "Dependencies/SDL/lib/" /ns /nfl /ndl /nc /njh robocopy "Dependencies/SDL/tmp/SDL2-2.24.0/include/" "Dependencies/SDL/include/" /ns /nfl /ndl /nc /njh rmdir "Dependencies/SDL/tmp/" /s /q -del "Dependencies/SDL/SDL.zip" powershell -Command "& {Remove-Item "Dependencies/SDL/SDL.zip"}" :done diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0cb1ecd1..1bc1bcbd 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -23,9 +23,10 @@ namespace Sandbox _In_ INT nCmdShow ) { - SHLOG_TITLE("Initialising SBApplication") - + //SHLOG_TITLE("Initialising SBApplication") + SHADE::SHSDLWindow::InitPlatform(); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); + sdlWindow.CreateSDLWindow(window.GetHWND()); #ifdef SHEDITOR #else diff --git a/SHADE_Application/src/Application/SBApplication.h b/SHADE_Application/src/Application/SBApplication.h index a1bf11eb..65bcd582 100644 --- a/SHADE_Application/src/Application/SBApplication.h +++ b/SHADE_Application/src/Application/SBApplication.h @@ -1,6 +1,7 @@ #ifndef SB_APPLICATION_H #define SB_APPLICATION_H -#include +#include +#include "Graphics/Windowing/SHWindow.h" //using namespace SHADE; namespace Sandbox @@ -9,6 +10,7 @@ namespace Sandbox { private: SHADE::SHWindow window; + SHADE::SHSDLWindow sdlWindow; //SHAppConfig config; public: SBApplication() = default; diff --git a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp new file mode 100644 index 00000000..0725dd7a --- /dev/null +++ b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp @@ -0,0 +1,36 @@ +#include "SHpch.h" + +#include "SHSDLWindow.h" + +#include "Tools/SHLogger.h" + +namespace SHADE +{ + SHSDLWindow::~SHSDLWindow() + { + SDL_DestroyWindow(sdlWindow); + } + + void SHSDLWindow::InitPlatform(void) noexcept + { + SDL_Init(SDL_INIT_EVERYTHING); + } + + void SHSDLWindow::CreateSDLWindow(const char* title, int x, int y, int width, int height) noexcept + { + sdlWindow = SDL_CreateWindow(title, x, y, width, height, 0); + if (sdlWindow == nullptr) + { + SHLOG_ERROR("Failed to create window") + } + } + + void SHSDLWindow::CreateSDLWindow(HWND hwnd) noexcept + { + sdlWindow = SDL_CreateWindowFrom(hwnd); + if (sdlWindow == nullptr) + { + SHLOG_ERROR("Failed to create window from existing native Win32 Window") + } + } +} diff --git a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h new file mode 100644 index 00000000..d53bdcf9 --- /dev/null +++ b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h @@ -0,0 +1,21 @@ +#pragma once +#include +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN 0 +#include + +namespace SHADE +{ + class SHSDLWindow + { + public: + SHSDLWindow() = default; + ~SHSDLWindow(); + + static void InitPlatform(void) noexcept; + void CreateSDLWindow(const char* title, int x, int y, int width, int height) noexcept; + void CreateSDLWindow(HWND hwnd) noexcept; + + private: + SDL_Window* sdlWindow = nullptr; + }; +} From a3b166001342bb6c93ddf474ffcf5d2786b845aa Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 01:46:11 +0800 Subject: [PATCH 065/793] SP3-108 Removed old event register method added new events define --- SHADE_Engine/SHADE_Engine.vcxproj | 4 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 4 +- SHADE_Engine/src/Events/SHEvent.cpp | 49 ---------------------- SHADE_Engine/src/Events/SHEvent.h | 43 +++++-------------- SHADE_Engine/src/Events/SHEventDefines.h | 10 +++++ SHADE_Engine/src/Events/SHEventManager.cpp | 49 +++++++++++----------- SHADE_Engine/src/Events/SHEventManager.h | 23 ++++------ SHADE_Engine/src/Events/SHEventReceiver.h | 10 ++--- 8 files changed, 61 insertions(+), 131 deletions(-) delete mode 100644 SHADE_Engine/src/Events/SHEvent.cpp create mode 100644 SHADE_Engine/src/Events/SHEventDefines.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 8da6f80c..9d619853 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -118,6 +118,7 @@ + @@ -204,7 +205,6 @@ - @@ -292,4 +292,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index f0d769f0..3cfa1b29 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -400,6 +400,7 @@ Tools + @@ -423,9 +424,6 @@ Engine - - Events - Events diff --git a/SHADE_Engine/src/Events/SHEvent.cpp b/SHADE_Engine/src/Events/SHEvent.cpp deleted file mode 100644 index 4ac7c612..00000000 --- a/SHADE_Engine/src/Events/SHEvent.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * \file SHEvent.cpp - * \author Loh Xiao Qi - * \brief Implementation of SHEvent.h Initialise data member of smart pointer - * to package data. Return the package pointer and package type - * accordingly. - * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction - * or disclosure of this file or its contents without the prior - * written consent of Digipen Institute of Technology is prohibited - ******************************************************************************/ -#include "SHpch.h" -#include "SHEvent.h" -#include - -namespace SHADE -{ - /**************************************************************************** - * \param PackagePtr - smart pointer to package data. - - * \brief Constructor for Event. User needs to dynamically allocate memory - * for package data and pass in the smart pointer so the data member - * can be initialised properly. - ****************************************************************************/ - SHEvent::SHEvent(PackagePtr pkg) - : package{ std::move(pkg) } - { - - } - - /**************************************************************************** - * \brief Get pointer to data package. - * - * \return Smart pointer to Package Base, needs to be cast to correct - * derived class. - ****************************************************************************/ - ConstPackagePtr& SHEvent::GetData() const - { - return package; - } - - /**************************************************************************** - * \brief Gets the type of package. - ****************************************************************************/ - SHPackageType SHEvent::GetType() const - { - return package->GetPackageType(); - } -} \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEvent.h b/SHADE_Engine/src/Events/SHEvent.h index fc128a17..c6d5c97b 100644 --- a/SHADE_Engine/src/Events/SHEvent.h +++ b/SHADE_Engine/src/Events/SHEvent.h @@ -1,45 +1,22 @@ /****************************************************************************** - * \file SHEventBase.h + * \file SHEvent.h * \author Loh Xiao Qi - * \brief Event base abstract class declaration + * \brief Event class declaration * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * \copyright Copyright (c) 2022 Digipen Institute of Technology. Reproduction * or disclosure of this file or its contents without the prior written consent * of Digipen Institute of Technology is prohibited. ******************************************************************************/ -#ifndef SH_EVENT_BASE_H -#define SH_EVENT_BASE_H +#pragma once + +#include "SHEventDefines.h" namespace SHADE { - class SHEvent + struct SHEvent { - public: - /**************************************************************************** - * \param PackagePtr - smart pointer to package data. - - * \brief Constructor for Event. User needs to dynamically allocate memory - * for package data and pass in the smart pointer so the data member - * can be initialised properly. - ****************************************************************************/ - SHEvent(PackagePtr); - - /**************************************************************************** - * \brief Get pointer to data package. - * - * \return Smart pointer to Package Base, needs to be cast to correct - * derived class. - ****************************************************************************/ - PackagePtr const& GetData() const; - - /**************************************************************************** - * \brief Gets the type of package. - ****************************************************************************/ - SHPackageType GetType() const; - private: - PackagePtr package; + SHEventIdentifier type; + SHEventDataPtr data; + SHEventHandle handle; }; } - - -#endif // !SH_EVENT_BASE_H diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h new file mode 100644 index 00000000..4087caa0 --- /dev/null +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -0,0 +1,10 @@ +#pragma once +#include "SHpch.h" + +typedef uint32_t SHEventIdentifier; +typedef uint32_t SHEventHandle; +typedef void* SHEventDataPtr; + +//Add your event identifiers here: + +constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp index b1038da8..7798c944 100644 --- a/SHADE_Engine/src/Events/SHEventManager.cpp +++ b/SHADE_Engine/src/Events/SHEventManager.cpp @@ -72,20 +72,33 @@ namespace SHADE /**************************************************************************** * \param ResponseFunction - function pointer from receiver to be passed * into event manager to be called when events are broadcasted. - * \param SHPackageType - package type that corresponding subscriber is + * \param SHEventIdentifier - package type that corresponding subscriber is * subscribing to. * \brief Links a function pointer from a subscriber to a particular * package type ****************************************************************************/ - void SHEventManager::SubscribeTo(SHPackageType pkgType, ReceiverPtr receiver) + void SHEventManager::SubscribeTo(SHEventIdentifier pkgType, ReceiverPtr receiver) { SHEventManager::GetEventManagerInstance().RegisterReceiverToType(pkgType, receiver); } - void SHEventManager::StaticSubscribeTo(SHPackageType pkgType, ResponseFunction func) + template + T* SHEventManager::BroadcastData(T data, SHEventIdentifier eventType) { - SHEventManager::GetEventManagerInstance().RegisterStaticReceiverToType(pkgType, func); + SHEventDataPtr ptr = new std::byte[sizeof(data)]; + + std::memcpy(ptr, &data, sizeof(data)); + + CatchEvent( + { + eventType, + ptr, + handleCounter++ + } + ); + + return reinterpret_cast(ptr); } /**************************************************************************** @@ -96,7 +109,7 @@ namespace SHADE * \brief Registers receiver as a subscriber to listener in the registry. ****************************************************************************/ void SHEventManager::RegisterReceiverToType( - SHPackageType pkgType, ReceiverPtr receiver) + SHEventIdentifier pkgType, ReceiverPtr receiver) { if (packageReceiverRegistry.contains(pkgType)) { @@ -108,18 +121,6 @@ namespace SHADE } } - void SHEventManager::RegisterStaticReceiverToType(SHPackageType pkgType, ResponseFunction func) - { - if (staticPackageReceiverRegistry.contains(pkgType)) - { - staticPackageReceiverRegistry[pkgType].emplace_back(func); - } - else - { - staticPackageReceiverRegistry.emplace(pkgType, std::vector{ func }); - } - } - /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. * \param EventType - Event data @@ -129,16 +130,16 @@ namespace SHADE ****************************************************************************/ void SHEventManager::Broadcast(SHEvent const& event) { - ResponseVec& receivers{ packageReceiverRegistry[event.GetType()] }; + ResponseVec& receivers{ packageReceiverRegistry[event.type] }; for (auto& receiver : receivers) { - receiver->Receive(event.GetData()); + receiver->Receive(event.data); } - auto& funcs{ staticPackageReceiverRegistry[event.GetType()] }; - for (auto func : funcs) - { - func(event.GetData()); - } + //auto& funcs{ staticPackageReceiverRegistry[event.GetType()] }; + //for (auto func : funcs) + //{ + // func(event.GetData()); + //} } } diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index e8d499dc..4f9b4350 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -12,13 +12,12 @@ #include "SHEvent.h" #include "SHEventReceiver.h" -#include #include #include namespace SHADE { - using ResponseFunction = std::function; + using ResponseFunction = std::function; using ReceiverPtr = std::shared_ptr; using ResponseVec = std::vector; using StaticResponseVec = std::vector; @@ -68,22 +67,19 @@ namespace SHADE * \brief Links a function pointer from a subscriber to a particular * package type ****************************************************************************/ - void SubscribeTo(SHPackageType, ReceiverPtr); + void SubscribeTo(SHEventIdentifier, ReceiverPtr); - void StaticSubscribeTo(SHPackageType, ResponseFunction); + template + T* BroadcastData(T data, SHEventIdentifier eventType); private: // Singleton instance static SHEventManager* instance; // Registry for broadcasters and subscribers - std::unordered_map< - SHPackageType, - ResponseVec> packageReceiverRegistry; + std::unordered_map packageReceiverRegistry; + std::unordered_map dataEventMap; - // Registry for static broadcasters and subscribers - std::unordered_map< - SHPackageType, - StaticResponseVec> staticPackageReceiverRegistry; + SHEventHandle handleCounter; /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. @@ -101,12 +97,9 @@ namespace SHADE * \brief Registers receiver as a subscriber to listener in the registry. ****************************************************************************/ - void RegisterReceiverToType(SHPackageType, ReceiverPtr); - - void RegisterStaticReceiverToType(SHPackageType, ResponseFunction); + void RegisterReceiverToType(SHEventIdentifier, ReceiverPtr); }; - } #endif // !SH_EVENTS_MANAGER_H diff --git a/SHADE_Engine/src/Events/SHEventReceiver.h b/SHADE_Engine/src/Events/SHEventReceiver.h index 387b8a97..ab379901 100644 --- a/SHADE_Engine/src/Events/SHEventReceiver.h +++ b/SHADE_Engine/src/Events/SHEventReceiver.h @@ -9,7 +9,7 @@ namespace SHADE { private: public: - virtual void Receive(PackagePtr) = 0; + virtual void Receive(SHEventDataPtr) = 0; }; template @@ -17,16 +17,16 @@ namespace SHADE { private: T* object; - void(T::*callback)(PackagePtr); + void(T::*callback)(SHEventDataPtr); public: - SHEventReceiverSpec(T* obj, void(T::*cb)(PackagePtr)) - :SHEventReceiver(), object{obj}, callback{ cb } + SHEventReceiverSpec(T* obj, void(T::* cb)(SHEventDataPtr)) + :SHEventReceiver(), object{ obj }, callback{ cb } { } - void Receive(PackagePtr evt) + void Receive(SHEventDataPtr evt) override { (object->*callback)(evt); } From 8e601e60e5b7dcd19678bca42b949b2f3755aeb3 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 01:51:04 +0800 Subject: [PATCH 066/793] Added SHCommonTypes header file Changed C++ std from latest to 20 Updated premake program --- Premake/premake5.exe | Bin 1371136 -> 1568256 bytes SHADE_Application/SHADE_Application.vcxproj | 4 +-- SHADE_Application/premake5.lua | 2 +- SHADE_Engine/SHADE_Engine.vcxproj | 13 ++++----- SHADE_Engine/SHADE_Engine.vcxproj.filters | 1 + SHADE_Engine/premake5.lua | 2 +- SHADE_Engine/src/SHCommonTypes.h | 28 ++++++++++++++++++++ SHADE_Engine/src/SHpch.h | 2 ++ 8 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 SHADE_Engine/src/SHCommonTypes.h diff --git a/Premake/premake5.exe b/Premake/premake5.exe index f081fe1f6c990b2eb01ef5f3143857176e479bcf..1a637aa93c942a9268937d8732abf463ebe8bddc 100644 GIT binary patch literal 1568256 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
f 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

-c_vJ`Q7XXS=^f`H4LVvb&~;!Ir6Y~x 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�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 diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 20e738cc..b3490a70 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -66,7 +66,7 @@ false MultiThreadedDebugDLL true - stdcpplatest + stdcpp20 Windows @@ -88,7 +88,7 @@ true MultiThreadedDLL true - stdcpplatest + stdcpp20 Windows diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 7698f954..5c408fb5 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -1,7 +1,7 @@ project "SHADE_Application" kind "WindowedApp" language "C++" - cppdialect "C++latest" + cppdialect "C++20" targetdir (outputdir) objdir (interdir) systemversion "latest" diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 752a329c..7ccf0e8e 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -66,13 +66,13 @@ false MultiThreadedDebugDLL true - stdcpplatest + stdcpp20 Windows true - vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) + vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Debug\SHADE_Engine.lib @@ -93,14 +93,14 @@ true MultiThreadedDLL true - stdcpplatest + stdcpp20 Windows true true - vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) + vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Release\SHADE_Engine.lib @@ -189,6 +189,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 31c76d27..1bbdea43 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -360,6 +360,7 @@ Resource + diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 72889103..f10369a5 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -1,7 +1,7 @@ project "SHADE_Engine" kind "SharedLib" language "C++" - cppdialect "C++latest" + cppdialect "C++20" targetdir (outputdir) objdir (interdir) systemversion "latest" diff --git a/SHADE_Engine/src/SHCommonTypes.h b/SHADE_Engine/src/SHCommonTypes.h new file mode 100644 index 00000000..97ef7928 --- /dev/null +++ b/SHADE_Engine/src/SHCommonTypes.h @@ -0,0 +1,28 @@ +/************************************************************************************//*! +\file SHCommonTypes.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the definitions of type alias for commonly used units for + clarity and convenience. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Type used to mark a value that is supposed to represent a size in bytes. + */ + /***********************************************************************************/ + using Byte = size_t; +} diff --git a/SHADE_Engine/src/SHpch.h b/SHADE_Engine/src/SHpch.h index 0342eedb..1db73cb9 100644 --- a/SHADE_Engine/src/SHpch.h +++ b/SHADE_Engine/src/SHpch.h @@ -30,3 +30,5 @@ #include #include #include + +#include "SHCommonTypes.h" \ No newline at end of file From 196ef93fed5494bd90905fb49a425822f5f91564 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 09:11:02 +0800 Subject: [PATCH 067/793] CSProj for SHADE_Scripting is now generated if a build is attempted without it existing --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index cb8f24c9..5302cb17 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -182,6 +182,13 @@ namespace SHADE { constexpr std::string_view BUILD_LOG_PATH = "../Build.log"; + // Generate csproj file if it doesn't exist + static const std::filesystem::path CSPROJ_PATH = "../SHADE_Scripting.csproj"; + if (!std::filesystem::exists(CSPROJ_PATH)) + { + GenerateScriptsCsProjFile(CSPROJ_PATH); + } + // Prepare directory (delete useless files) deleteFolder("net6.0"); deleteFolder("ref"); From 169822c2216efcd89ad27d72df8ddc9a06828338 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 15 Sep 2022 09:16:13 +0800 Subject: [PATCH 068/793] Render graph execution fixed GetVkQueue function deleted. More specific function implemented (Present). --- .../src/Application/SBApplication.cpp | 1 + .../Graphics/Commands/SHVkCommandBuffer.cpp | 22 +++++- .../src/Graphics/Commands/SHVkCommandBuffer.h | 2 + .../src/Graphics/Commands/SHVkCommandPool.cpp | 15 ++-- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 26 ++++--- .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +- .../src/Graphics/Queues/SHVkQueue.cpp | 73 +++++++++++++++---- SHADE_Engine/src/Graphics/Queues/SHVkQueue.h | 5 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 23 ++++-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 3 +- 10 files changed, 127 insertions(+), 47 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index a30237dc..c47b8016 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -48,6 +48,7 @@ namespace Sandbox //SHADE::SHEditor::PreRender(); //#endif graphicsSystem->BeginRender(); + graphicsSystem->Run(1.0f); //#ifdef SHEDITOR //SHADE::SHEditor::PreRender(); //SHADE::SHEditor::Update(); diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 5b2d15fe..f83087dd 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -76,7 +76,10 @@ namespace SHADE // Check if command buffer is ready to record. if (cmdBufferState != SH_CMD_BUFFER_STATE::INITIAL) { - SHLOG_ERROR("Command buffer not in initial state, cannot begin recording. "); + SHLOG_ERROR("Command buffer not in initial state, cannot begin recording. Command buffer could be: \n" + "- corrupted and in invalid state\n" + "- in executable state\n" + "- in pending state\n"); return; } @@ -182,7 +185,9 @@ namespace SHADE // Check if render area is optimal if (!IsRenderAreaOptimal(renderpassHdl, framebufferExtent, renderPassInfo.renderArea)) + { SHLOG_ERROR("Render area in renderpass begin info is not optimal. See Vulkan vkGetRenderAreaGranularity for details."); + } // Begin the render pass vkCommandBuffer.beginRenderPass (&renderPassInfo, vk::SubpassContents::eInline); @@ -431,6 +436,16 @@ namespace SHADE ); } + bool SHVkCommandBuffer::IsReadyToSubmit(void) const noexcept + { + return cmdBufferState == SH_CMD_BUFFER_STATE::EXECUTABLE; + } + + void SHVkCommandBuffer::HandlePostSubmit(void) noexcept + { + SetState(SH_CMD_BUFFER_STATE::PENDING); + } + //void SHVkCommandBuffer::PipelineBarrier(vk::PipelineStageFlags ) const noexcept //{ // //vkCommandBuffer.pipelineBarrier() @@ -493,9 +508,7 @@ namespace SHADE { vk::Extent2D granularity = parentPool->GetLogicalDevice()->GetVkLogicalDevice().getRenderAreaGranularity(renderpassHdl->GetVkRenderpass()); - return (renderArea.offset.x % granularity.width == 0 && renderArea.offset.y % granularity.height == 0 && - (renderArea.extent.width % granularity.width || renderArea.offset.x + renderArea.extent.width == framebufferExtent.width) && - (renderArea.extent.height % granularity.height || renderArea.offset.y + renderArea.extent.height == framebufferExtent.height)); + return (renderArea.offset.x % granularity.width == 0 && renderArea.offset.y % granularity.height == 0 && (renderArea.extent.width % granularity.width || renderArea.offset.x + renderArea.extent.width == framebufferExtent.width) && (renderArea.extent.height % granularity.height || renderArea.offset.y + renderArea.extent.height == framebufferExtent.height)); } /***************************************************************************/ @@ -559,6 +572,7 @@ namespace SHADE , usageFlags{} , commandBufferCount{ 0 } , parentPool{commandPool} + , pushConstantData{} { vk::CommandBufferAllocateInfo allocateInfo{}; diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index d2171c25..948092bf 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -125,6 +125,8 @@ namespace SHADE std::vector const& imageMemoryBarriers ) const noexcept; + bool IsReadyToSubmit (void) const noexcept; + void HandlePostSubmit (void) noexcept; // Push Constant variable setting template diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp index 5cf4bea4..881ee998 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp @@ -150,20 +150,19 @@ namespace SHADE logicalDeviceHdl->GetVkLogicalDevice().resetCommandPool(vkCommandPool, vk::CommandPoolResetFlagBits::eReleaseResources); for (auto& primary : primaries) { - if (primary->GetState() != SH_CMD_BUFFER_STATE::PENDING) - primary->SetState(SH_CMD_BUFFER_STATE::INITIAL); - else - SHLOG_ERROR("Primary command buffer in pending state, could not reset. "); + // #NoteToSelf: Since there is no way to set the state of a command buffer back to initial, we just hard set it to initial. Ditto for secondaries. + //if (primary->GetState() != SH_CMD_BUFFER_STATE::PENDING) + primary->SetState(SH_CMD_BUFFER_STATE::INITIAL); + + // From the spec: Any primary command buffer allocated from another VkCommandPool that is in the recording or // executable state and has a secondary command buffer allocated from commandPool recorded into it, // becomes invalid. TODO: Might want to check and throw exception for these conditions after making sure this actually happens using validation layers. } for (auto& secondary : secondaries) { - if (secondary->GetState() != SH_CMD_BUFFER_STATE::PENDING) - secondary->SetState(SH_CMD_BUFFER_STATE::INITIAL); - else - SHLOG_ERROR("Secondary command buffer in pending state, could not reset. "); + //if (secondary->GetState() != SH_CMD_BUFFER_STATE::PENDING) + secondary->SetState(SH_CMD_BUFFER_STATE::INITIAL); // TODO: Ditto from TODO in primary check } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 4d4ca4f4..63fd7466 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -54,7 +54,7 @@ namespace SHADE }); // Create graphics queue - queue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); + graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); // Create Render Context @@ -101,7 +101,7 @@ namespace SHADE auto node = renderGraph.AddNode("G-Buffer", { "Position", "Normals", "Composite" }, {}); // no predecessors // First subpass to write to G-Buffer - auto writeSubpass = node->AddSubpass("G-Buffer Write"); + auto writeSubpass = node->AddSubpass("G-Buffer Write"); writeSubpass->AddColorOutput("Position"); writeSubpass->AddColorOutput("Normals"); @@ -111,11 +111,11 @@ namespace SHADE compositeSubpass->AddInput("Normals"); compositeSubpass->AddInput("Position"); - auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present"}, {"G-Buffer"}); - auto bloomSubpass = compositeNode->AddSubpass("Downsample"); - bloomSubpass->AddInput("Composite"); - bloomSubpass->AddColorOutput("Downscale"); - bloomSubpass->AddColorOutput("Present"); + //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present"}, {"G-Buffer"}); + //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); + //bloomSubpass->AddInput("Composite"); + // bloomSubpass->AddColorOutput("Downscale"); + // bloomSubpass->AddColorOutput("Present"); renderGraph.Generate(); @@ -127,6 +127,14 @@ namespace SHADE void SHGraphicsSystem::Run(float dt) { + auto const& frameData = renderContext.GetCurrentFrameData(); + + renderGraph.Execute(renderContext.GetCurrentFrame()); + + graphicsQueue->SubmitCommandBuffer({ renderGraph.GetCommandBuffer(renderContext.GetCurrentFrame()) }, + { frameData.semRenderFinishHdl }, + { frameData.semImgAvailableHdl }, + vk::PipelineStageFlagBits::eColorAttachmentOutput | vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests); } @@ -134,7 +142,7 @@ namespace SHADE { //renderPass.Free(); renderContext.Destroy(); - queue.Free(); + graphicsQueue.Free(); swapchain.Free(); surface.Free(); device.Free(); @@ -208,7 +216,7 @@ namespace SHADE presentInfo.pImageIndices = &CURR_FRAME_IDX; // #BackEndTest: queues an image for presentation - if (auto result = device->GetQueue(SH_Q_FAM::GRAPHICS, 0)->GetVkQueue().presentKHR(&presentInfo); result != vk::Result::eSuccess) + if (auto result = graphicsQueue->Present(swapchain, {currFrameData.semRenderFinishHdl}, CURR_FRAME_IDX); result != vk::Result::eSuccess) { // If swapchain is incompatible/outdated if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 27d03fd3..8c803e1d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -114,7 +114,7 @@ namespace SHADE Handle GetSwapchain() const { return swapchain; } Handle GetSurface() const { return surface; } Handle GetPhysicalDevice() const {return physicalDevice;} - Handle GetQueue() const { return queue; } + Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } SHRenderGraph const& GetRenderGraph (void) const noexcept; @@ -130,7 +130,7 @@ namespace SHADE Handle device; Handle surface; Handle swapchain; - Handle queue; + Handle graphicsQueue; Handle descPool; //Handle renderPass; // Potentially bring out? std::vector screenSegments; diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp index 9f8c529c..6ed6def6 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp @@ -5,6 +5,7 @@ #include "Graphics/Synchronization/SHVkSemaphore.h" #include "Graphics/Synchronization/SHVkFence.h" #include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/Swapchain/SHVkSwapchain.h" namespace SHADE @@ -31,14 +32,10 @@ namespace SHADE } - vk::Queue SHVkQueue::GetVkQueue(void) const noexcept + void SHVkQueue::SubmitCommandBuffer(std::initializer_list> cmdBuffers, std::initializer_list> signalSems /*= {}*/, std::initializer_list> waitSems /*= {}*/, vk::PipelineStageFlags waitDstStageMask /*= {}*/, Handle const& optionalFence /*= {}*/) noexcept { - return vkQueue; - } - - void SHVkQueue::SubmitCommandBuffer(std::initializer_list> cmdBuffers, std::initializer_list> signalSems /*= {}*/, std::initializer_list> waitSems /*= {}*/, vk::PipelineStageFlagBits waitDstStageMask /*= {}*/, Handle const& optionalFence /*= {}*/) noexcept - { - std::vector vkWaitSems{ waitSems.size() }; + // prepare wait sems + std::array vkWaitSems{ }; uint32_t i = 0; for (auto& sem : waitSems) { @@ -46,7 +43,8 @@ namespace SHADE ++i; } - std::vector vkSignalSems{ signalSems.size() }; + // prepare signal sems + std::array vkSignalSems{ }; i = 0; for (auto& sem : signalSems) { @@ -54,33 +52,76 @@ namespace SHADE ++i; } - std::vector vkCmdBuffers{ cmdBuffers.size() }; + // prepare cmd buffers + std::array vkCmdBuffers{ }; i = 0; for (auto& cmdBuffer : cmdBuffers) { + // Check if command buffer is in executable state + if (!cmdBuffer->IsReadyToSubmit()) + { + SHLOG_ERROR("Command buffer is not in executable state. Cannot submit command buffer. "); + return; + } + vkCmdBuffers[i] = cmdBuffer->GetVkCommandBuffer(); ++i; } - vk::PipelineStageFlags mask = waitDstStageMask; - + // Prepare submit info vk::SubmitInfo submitInfo { - .waitSemaphoreCount = static_cast(vkWaitSems.size()), + .waitSemaphoreCount = static_cast(waitSems.size()), .pWaitSemaphores = vkWaitSems.data(), - .pWaitDstStageMask = &mask, - .commandBufferCount = static_cast(vkCmdBuffers.size()), + .pWaitDstStageMask = &waitDstStageMask, + .commandBufferCount = static_cast(cmdBuffers.size()), .pCommandBuffers = vkCmdBuffers.data(), - .signalSemaphoreCount = static_cast(vkSignalSems.size()), + .signalSemaphoreCount = static_cast(signalSems.size()), .pSignalSemaphores = vkSignalSems.data(), }; - // #BackEndTest: Submit the queue + // Submit the queue if (auto result = vkQueue.submit(1, &submitInfo, (optionalFence) ? optionalFence->GetVkFence() : nullptr); result != vk::Result::eSuccess) { SHVulkanDebugUtil::ReportVkError(result, "Failed to submit command buffer. "); } + else // if success + { + // Change all command buffers to pending state + for (Handle cmdBuffer : cmdBuffers) + { + cmdBuffer->HandlePostSubmit(); + } + } + } + vk::Result SHVkQueue::Present(Handle const& swapchain, std::initializer_list> waitSems, uint32_t frameIndex) noexcept + { + vk::PresentInfoKHR presentInfo{}; + + // prepare wait sems + std::array vkWaitSems{ }; + uint32_t i = 0; + for (auto& sem : waitSems) + { + vkWaitSems[i] = sem->GetVkSem(); + ++i; + } + + // prepare presentation information + presentInfo.waitSemaphoreCount = static_cast(waitSems.size()); + presentInfo.pWaitSemaphores = vkWaitSems.data(); + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); + presentInfo.pImageIndices = &frameIndex; + + // Present swapchain image. + auto result = vkQueue.presentKHR(&presentInfo); + if (result != vk::Result::eSuccess) + { + SHLOGV_ERROR ("Failed to present swapchain image. "); + } + return result; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h index 203ae59e..042bc4bb 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h @@ -11,6 +11,7 @@ namespace SHADE class SHVkCommandBuffer; class SHVkFence; class SHVkSemaphore; + class SHVkSwapchain; enum class SH_QUEUE_FAMILY_ARRAY_INDEX : std::size_t { @@ -45,9 +46,9 @@ namespace SHADE public: SHVkQueue(vk::Queue inVkQueue, SHQueueFamilyIndex parent, Handle const& inLogicalDeviceHdl) noexcept; - vk::Queue GetVkQueue(void) const noexcept; - void SubmitCommandBuffer(std::initializer_list> cmdBuffers, std::initializer_list> signalSems = {}, std::initializer_list> waitSems = {}, vk::PipelineStageFlagBits waitDstStageMask = {}, Handle const& fence = {}) noexcept; + void SubmitCommandBuffer (std::initializer_list> cmdBuffers, std::initializer_list> signalSems = {}, std::initializer_list> waitSems = {}, vk::PipelineStageFlags waitDstStageMask = {}, Handle const& fence = {}) noexcept; + vk::Result Present (Handle const& swapchain, std::initializer_list> waitSems, uint32_t frameIndex) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 71bac1e6..76106d67 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -552,14 +552,16 @@ namespace SHADE void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept { + frameIndex = (framebuffers.size() > 1) ? frameIndex : 0; commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); - for (auto& subpass : subpasses) + for (uint32_t i = 0; i < subpasses.size(); ++i) { - subpass->Execute(commandBuffer); + subpasses[i]->Execute(commandBuffer); - // Go to next subpass - commandBuffer->NextSubpass(); + // Go to next subpass if not last subpass + if (i != subpasses.size() - 1) + commandBuffer->NextSubpass(); } commandBuffer->EndRenderpass(); @@ -892,6 +894,10 @@ namespace SHADE { commandPool = logicalDeviceHdl->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); commandBuffers.resize(static_cast(swapchainHdl->GetNumImages())); + for (auto& cmdBuffer : commandBuffers) + { + cmdBuffer = commandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + } } /***************************************************************************/ @@ -1019,6 +1025,8 @@ namespace SHADE void SHRenderGraph::Execute(uint32_t frameIndex) noexcept { + commandPool->Reset(); + auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); @@ -1027,7 +1035,7 @@ namespace SHADE node->Execute(commandBuffers[frameIndex], frameIndex); } - cmdBuffer->EndRenderpass(); + cmdBuffer->EndRecording(); } Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept @@ -1038,4 +1046,9 @@ namespace SHADE return {}; } + Handle const& SHRenderGraph::GetCommandBuffer(uint32_t frameIndex) const noexcept + { + return commandBuffers[frameIndex]; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index ea913baa..91f3f2ca 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -275,7 +275,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - Handle GetNode (std::string const& nodeName) const noexcept; + Handle GetNode (std::string const& nodeName) const noexcept; + Handle const& GetCommandBuffer (uint32_t frameIndex) const noexcept; }; } From 79828740fd20e60bcfba05f39dcee8b5a2d41589 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 09:21:51 +0800 Subject: [PATCH 069/793] Fixed hot reloading copying the wrong DLL --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 5302cb17..47c722dd 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -208,7 +208,7 @@ namespace SHADE if (BUILD_SUCCESS) { // Copy to built dll to the working directory and replace - std::filesystem::copy_file("./tmp/SHADE_Managed.dll", "SHADE_Managed.dll", std::filesystem::copy_options::overwrite_existing); + std::filesystem::copy_file("./tmp/SHADE_Scripting.dll", "SHADE_Scripting.dll", std::filesystem::copy_options::overwrite_existing); oss << "[ScriptEngine] Successfully built Managed Script Assembly (" << MANAGED_SCRIPT_LIB_NAME << ")!"; SHLOG_INFO(oss.str()); From 9a97d12d96019d2333b193fac01296cd58ed380f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 09:23:40 +0800 Subject: [PATCH 070/793] Fixed SHADE_Managed target and intermediate directory paths --- SHADE_Managed/premake5.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 4651e68e..42d0482f 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -4,8 +4,8 @@ project "SHADE_Managed" clr "NetCore" dotnetframework "net6.0" cppdialect "C++17" - targetdir ("bin/" .. outputdir .. "/%{prj.name}") - objdir ("bin-int/" .. outputdir .. "/%{prj.name}") + targetdir (outputdir) + objdir (interdir) systemversion "latest" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" From bd69c6043aa1b85f198df04ec312f5387c10db26 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 15 Sep 2022 09:26:43 +0800 Subject: [PATCH 071/793] SDL Updates --- Dependencies.bat | 64 +++++++++---------- Dependencies.lua | 1 - .../src/Application/SBApplication.cpp | 6 +- .../src/Application/SBApplication.h | 4 +- .../Graphics/Windowing/SDL/SHSDLWindow.cpp | 36 ----------- .../src/Graphics/Windowing/SDL/SHSDLWindow.h | 21 ------ 6 files changed, 37 insertions(+), 95 deletions(-) delete mode 100644 SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp delete mode 100644 SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h diff --git a/Dependencies.bat b/Dependencies.bat index 14c8ca03..f156b91c 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -8,16 +8,15 @@ echo "A - All" echo "B - VMA" echo "C - msdf" echo "D - assimp" -echo "E - ktx" -echo "F - spdlog" -echo "G - reactphysics3d" -echo "H - imgui" -echo "I - imguizmo" -echo "J - imnodes" -echo "K - tracy" -echo "L - RTTR" -echo "M - yamlcpp" -echo "O - SDL" +echo "E - spdlog" +echo "F - reactphysics3d" +echo "G - imgui" +echo "H - imguizmo" +echo "I - imnodes" +echo "J - tracy" +echo "K - RTTR" +echo "L - yamlcpp" +echo "N - SDL" echo --------------------------------------------------- echo. @@ -28,16 +27,15 @@ if %_e%==1 goto VMA if %_e%==2 goto VMA if %_e%==3 goto MSDF if %_e%==4 goto assimp -if %_e%==5 goto ktx -if %_e%==6 goto spdlog -if %_e%==7 goto reactphysics3d -if %_e%==8 goto imgui -if %_e%==9 goto imguizmo -if %_e%==10 goto imnodes -if %_e%==11 goto tracy -if %_e%==12 goto RTTR -if %_e%==13 goto yamlcpp -if %_e%==15 goto SDL +if %_e%==5 goto spdlog +if %_e%==6 goto reactphysics3d +if %_e%==7 goto imgui +if %_e%==8 goto imguizmo +if %_e%==9 goto imnodes +if %_e%==10 goto tracy +if %_e%==11 goto RTTR +if %_e%==12 goto yamlcpp +if %_e%==14 goto SDL :VMA echo -----------------------VMA---------------------------- @@ -57,59 +55,59 @@ rmdir "Dependencies/assimp" /S /Q git clone https://github.com/SHADE-DP/assimp.git "Dependencies/assimp" if %_e%==4 (goto :done) else (goto :ktx) -:ktx -rmdir "Dependencies/ktx" /S /Q -echo -----------------------ktx---------------------------- -git clone https://github.com/SHADE-DP/ktx.git "Dependencies/ktx" -if %_e%==5 (goto :done) else (goto :spdlog) +@REM :ktx +@REM rmdir "Dependencies/ktx" /S /Q +@REM echo -----------------------ktx---------------------------- +@REM git clone https://github.com/SHADE-DP/ktx.git "Dependencies/ktx" +@REM if %_e%==5 (goto :done) else (goto :spdlog) :spdlog echo -----------------------spdlog---------------------------- rmdir "Dependencies/spdlog" /S /Q git clone https://github.com/SHADE-DP/spdlog.git "Dependencies/spdlog" -if %_e%==6 (goto :done) else (goto :reactphysics3d) +if %_e%==5 (goto :done) else (goto :reactphysics3d) :reactphysics3d echo -----------------------reactphysics3d---------------------------- rmdir "Dependencies/reactphysics3d" /S /Q git clone https://github.com/SHADE-DP/reactphysics3d.git "Dependencies/reactphysics3d" -if %_e%==7 (goto :done) else (goto :imgui) +if %_e%==6 (goto :done) else (goto :imgui) :imgui echo -----------------------imgui---------------------------- rmdir "Dependencies/imgui" /S /Q git clone https://github.com/SHADE-DP/imgui.git "Dependencies/imgui" -if %_e%==8 (goto :done) else (goto :imguizmo) +if %_e%==7 (goto :done) else (goto :imguizmo) :imguizmo echo -----------------------imguizmo---------------------------- rmdir "Dependencies/imguizmo" /S /Q git clone https://github.com/SHADE-DP/ImGuizmo.git "Dependencies/imguizmo" -if %_e%==9 (goto :done) else (goto :imnodes) +if %_e%==8 (goto :done) else (goto :imnodes) :imnodes echo -----------------------imnodes---------------------------- rmdir "Dependencies/imnodes" /S /Q git clone https://github.com/SHADE-DP/imnodes.git "Dependencies/imnodes" -if %_e%==10 (goto :done) else (goto :tracy) +if %_e%==9 (goto :done) else (goto :tracy) :tracy echo -----------------------tracy---------------------------- rmdir "Dependencies/tracy" /S /Q git clone https://github.com/SHADE-DP/tracy.git "Dependencies/tracy" -if %_e%==11 (goto :done) else (goto :RTTR) +if %_e%==10 (goto :done) else (goto :RTTR) :RTTR echo -----------------------RTTR---------------------------- rmdir "Dependencies/RTTR" /S /Q git clone https://github.com/SHADE-DP/RTTR.git "Dependencies/RTTR" -if %_e%==12 (goto :done) else (goto :yamlcpp) +if %_e%==11 (goto :done) else (goto :yamlcpp) :yamlcpp echo -----------------------yamlcpp---------------------------- rmdir "Dependencies/yamlcpp" /S /Q git clone https://github.com/SHADE-DP/yaml-cpp.git "Dependencies/yamlcpp" -if %_e%==13 (goto :done) else (goto :SDL) +if %_e%==12 (goto :done) else (goto :SDL) :SDL echo -----------------------SDL---------------------------- diff --git a/Dependencies.lua b/Dependencies.lua index 712f1a89..d2d6cdfd 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -10,7 +10,6 @@ IncludeDir["tracy"] = "%{wks.location}/Dependencies/tracy" IncludeDir["VMA"] = "%{wks.location}/Dependencies/VMA" IncludeDir["yamlcpp"] = "%{wks.location}/Dependencies/yamlcpp/include" IncludeDir["RTTR"] = "%{wks.location}/Dependencies/RTTR" -IncludeDir["ktx"] = "%{wks.location}/Dependencies/ktx" IncludeDir["reactphysics3d"] = "%{wks.location}/Dependencies/reactphysics3d" IncludeDir["SDL"] = "%{wks.location}/Dependencies/SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 1bc1bcbd..057e851c 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace Sandbox { @@ -24,9 +25,9 @@ namespace Sandbox ) { //SHLOG_TITLE("Initialising SBApplication") - SHADE::SHSDLWindow::InitPlatform(); + SDL_Init(SDL_INIT_VIDEO); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); - sdlWindow.CreateSDLWindow(window.GetHWND()); + SDL_CreateWindowFrom(window.GetHWND()); #ifdef SHEDITOR #else @@ -48,6 +49,7 @@ namespace Sandbox void SBApplication::Exit(void) { + SDL_DestroyWindow(sdlWindow); #ifdef SHEDITOR #else #endif diff --git a/SHADE_Application/src/Application/SBApplication.h b/SHADE_Application/src/Application/SBApplication.h index 65bcd582..9a6e4153 100644 --- a/SHADE_Application/src/Application/SBApplication.h +++ b/SHADE_Application/src/Application/SBApplication.h @@ -1,6 +1,6 @@ #ifndef SB_APPLICATION_H #define SB_APPLICATION_H -#include +#include #include "Graphics/Windowing/SHWindow.h" //using namespace SHADE; @@ -10,7 +10,7 @@ namespace Sandbox { private: SHADE::SHWindow window; - SHADE::SHSDLWindow sdlWindow; + SDL_Window* sdlWindow; //SHAppConfig config; public: SBApplication() = default; diff --git a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp deleted file mode 100644 index 0725dd7a..00000000 --- a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "SHpch.h" - -#include "SHSDLWindow.h" - -#include "Tools/SHLogger.h" - -namespace SHADE -{ - SHSDLWindow::~SHSDLWindow() - { - SDL_DestroyWindow(sdlWindow); - } - - void SHSDLWindow::InitPlatform(void) noexcept - { - SDL_Init(SDL_INIT_EVERYTHING); - } - - void SHSDLWindow::CreateSDLWindow(const char* title, int x, int y, int width, int height) noexcept - { - sdlWindow = SDL_CreateWindow(title, x, y, width, height, 0); - if (sdlWindow == nullptr) - { - SHLOG_ERROR("Failed to create window") - } - } - - void SHSDLWindow::CreateSDLWindow(HWND hwnd) noexcept - { - sdlWindow = SDL_CreateWindowFrom(hwnd); - if (sdlWindow == nullptr) - { - SHLOG_ERROR("Failed to create window from existing native Win32 Window") - } - } -} diff --git a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h b/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h deleted file mode 100644 index d53bdcf9..00000000 --- a/SHADE_Engine/src/Graphics/Windowing/SDL/SHSDLWindow.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -#include -#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN 0 -#include - -namespace SHADE -{ - class SHSDLWindow - { - public: - SHSDLWindow() = default; - ~SHSDLWindow(); - - static void InitPlatform(void) noexcept; - void CreateSDLWindow(const char* title, int x, int y, int width, int height) noexcept; - void CreateSDLWindow(HWND hwnd) noexcept; - - private: - SDL_Window* sdlWindow = nullptr; - }; -} From 8f09c0b34c50e1045b902758c01784b847ebae6b Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 09:31:37 +0800 Subject: [PATCH 072/793] Replaced premake exe with custom compiled one --- Premake/premake5.exe | Bin 1568256 -> 1594368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Premake/premake5.exe b/Premake/premake5.exe index 1a637aa93c942a9268937d8732abf463ebe8bddc..c25bb3fb7f81d1c9647bd0e565caab567532570f 100644 GIT binary patch delta 581406 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 bX7tfke{1bv zjed*y=+_Q@Yi(_r)<-+>t+kcBjd4RTD@xDeF{nJP`3b9H(X+L`p0MWmPgG+pXQG2` z%>K4P1csJqsxsC@pj50|*vdq0oh~MD)gFoxxA(@X-P2<(AFAyfJa%z(oFd|>P>JVqT=1~5UU97! ze-bCRw_dCDK51=hxps{<>ZG;DsL^k7mVT^10Bs{OH-H(uCBiGecJatJB#~4z$MtnN z62xQMwK)Rl1M9fz3a#p-wO>QG`F*ynmUIfn3=Mi~&QsRcQ+99Tyu!Z!v1_!8r?BP= zU+(arj^+yco}jm#LIjoX9m-jl_~9IZ9fXV6xADB^Pq_J5ScX$?o_GY~uq43f2)X$N zTDCCPxVI(&_BzNR2fq~T5PrO(w$H{86WEiX)O+NNYU;e6g!iDwuO_|o3c9bRmP%Lx z6Pi%Z1TwFICvuhoH%f-P@`xsCv;El6z`X=(MhuY)Uf3Q308!h$q6y=xnjUO+Bd1&0 zt$*HvYAz!|05F0z(K{c?$?dd>KUkaPrX?d2p`!^l#Zt(TFq+}&_*e8F0=K;RAYj}E z8qkwoLj}xS7N@=V1LS4MhNv+pY9y}-?e@07^B&$NZUwep&~Y^omR>87P5FrKtfQbw z@lfsz2F`(pN5JBod~Ewcq8ktMWX5@?U|X+0i9!yg2BQ?&i9F&p3LF(-{=f)SeIOnn zwhVSdCiAAK0jGsftwk}%0D6<=BCy1OHjJ$zdLo)f6Qj{YVGtW6 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 mG@NpoU)_Y*r(T8 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

    c@1rh>@>D_oNF)p9kfA{7@fVv%F>U)mfgr=_dau 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

    *60}t0hsq04^qK&=Oc?ySRs_R}R4R63fN8MD>@$ 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 delta 558014 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%0AH2hvx$h0su>sVlu6rZ>0!>&&+He(xpb91cF&k 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�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


    T|jgG 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 /// Shorthand for writing Vector2(0, -1). /// - static Vector2 Down = Vector2(0.0, -1.0); + static initonly Vector2 Down = Vector2(0.0, -1.0); /// /// Shorthand for writing Vector2(-1, 0). /// - static Vector2 Left = Vector2(-1.0, 0.0); + static initonly Vector2 Left = Vector2(-1.0, 0.0); /// /// Shorthand for writing Vector2(double.NegativeInfinity, /// double.NegativeInfinity). /// - static Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); + static initonly Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); /// /// Shorthand for writing Vector2(1, 1). /// - static Vector2 One = Vector2(1.0, 1.0); + static initonly Vector2 One = Vector2(1.0, 1.0); /// /// Shorthand for writing Vector2(double.PositiveInfinity, /// double.PositiveInfinity). /// - static Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); + static initonly Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); /// /// Shorthand for writing Vector2(1, 0). /// - static Vector2 Right = Vector2(1.0, 0.0); + static initonly Vector2 Right = Vector2(1.0, 0.0); /// /// Shorthand for writing Vector2(0, 1). /// - static Vector2 Up = Vector2(0.0, 1.0); + static initonly Vector2 Up = Vector2(0.0, 1.0); /// /// Shorthand for writing Vector2(0, 0). /// - static Vector2 Zero = Vector2(0.0, 0.0); + static initonly Vector2 Zero = Vector2(0.0, 0.0); #pragma endregion /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index fb2fe8fc..e6cdc7d4 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -35,49 +35,49 @@ namespace SHADE /// /// Shorthand for writing Vector3(0, 0, -1). /// - static const Vector3 Back = Vector3(0.0, 0.0, -1.0); + static initonly Vector3 Back = Vector3(0.0, 0.0, -1.0); /// /// Shorthand for writing Vector3(0, -1, 0). /// - static const Vector3 Down = Vector3(0.0, -1.0, 0.0); + static initonly Vector3 Down = Vector3(0.0, -1.0, 0.0); /// /// Shorthand for writing Vector3(0, 0, 1). /// - static const Vector3 Forward = Vector3(0.0, 0.0, 1.0); + static initonly Vector3 Forward = Vector3(0.0, 0.0, 1.0); /// /// Shorthand for writing Vector3(-1, 0, 0). /// - static const Vector3 Left = Vector3(-1.0, 0.0, 0.0); + static initonly Vector3 Left = Vector3(-1.0, 0.0, 0.0); /// /// Shorthand for writing Vector3(double.NegativeInfinity, /// double.NegativeInfinity, double.NegativeInfinity). /// - static const Vector3 NegativeInfinity = Vector3(std::numeric_limits::lowest(), + static initonly Vector3 NegativeInfinity = Vector3(std::numeric_limits::lowest(), std::numeric_limits::lowest(), std::numeric_limits::lowest()); /// /// Shorthand for writing Vector3(1, 1, 1). /// - static const Vector3 One = Vector3(1.0, 1.0, 1.0); + static initonly Vector3 One = Vector3(1.0, 1.0, 1.0); /// /// Shorthand for writing Vector3(double.PositiveInfinity, /// double.PositiveInfinity, double.PositiveInfinity). /// - static const Vector3 PositiveInfinity = Vector3(std::numeric_limits::max(), + static initonly Vector3 PositiveInfinity = Vector3(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); /// /// Shorthand for writing Vector3(1, 0, 0). /// - static const Vector3 Right = Vector3(1.0, 0.0, 0.0); + static initonly Vector3 Right = Vector3(1.0, 0.0, 0.0); /// /// Shorthand for writing Vector3(0, 1, 0). /// - static const Vector3 Up = Vector3(0.0, 1.0, 0.0); + static initonly Vector3 Up = Vector3(0.0, 1.0, 0.0); /// /// Shorthand for writing Vector3(0, 0, 0). /// - static const Vector3 Zero = Vector3(0.0, 0.0, 0.0); + static initonly Vector3 Zero = Vector3(0.0, 0.0, 0.0); #pragma endregion /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx index 7ee674a4..ebf2e987 100644 --- a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx +++ b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx @@ -29,7 +29,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - System::Reflection::Assembly^ DisposableAssemblyLoadContext::Load(System::Reflection::AssemblyName^ assemblyName) + System::Reflection::Assembly^ DisposableAssemblyLoadContext::Load(System::Reflection::AssemblyName^) { return nullptr; } From 382d75528a4396ecbc9fbc1806bbc03d45bb84e9 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 12:50:48 +0800 Subject: [PATCH 081/793] Removed and ignored VS project and solution files --- .gitignore | 5 + SHADE.sln | 90 --- SHADE_Application/SHADE_Application.vcxproj | 130 ---- .../SHADE_Application.vcxproj.filters | 30 - SHADE_Engine/SHADE_Engine.vcxproj | 317 --------- SHADE_Engine/SHADE_Engine.vcxproj.filters | 646 ------------------ SHADE_Managed/SHADE_Managed.vcxproj.filters | 113 --- 7 files changed, 5 insertions(+), 1326 deletions(-) delete mode 100644 SHADE.sln delete mode 100644 SHADE_Application/SHADE_Application.vcxproj delete mode 100644 SHADE_Application/SHADE_Application.vcxproj.filters delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj.filters delete mode 100644 SHADE_Managed/SHADE_Managed.vcxproj.filters diff --git a/.gitignore b/.gitignore index fba41f1e..c7fefb6e 100644 --- a/.gitignore +++ b/.gitignore @@ -353,4 +353,9 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ +# Generated Files [Dd]ependencies/ +*.vcxproj +*.vcxproj.filters +*.sln +*.csproj diff --git a/SHADE.sln b/SHADE.sln deleted file mode 100644 index e317c752..00000000 --- a/SHADE.sln +++ /dev/null @@ -1,90 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Application", "SHADE_Application\SHADE_Application.vcxproj", "{BDC70008-29DE-FE9D-7255-8ABFDEAACF25}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{53E47842-3FC8-3998-A828-34EB942B241A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImGui", "Dependencies\imgui\ImGui.vcxproj", "{C0FF640D-2C14-8DBE-F595-301E616989EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "Dependencies\msdf\msdfgen\freetype\freetype.vcxproj", "{89895BD8-7556-B6E3-9E6F-A48B8A9BEB71}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msdf-atlas-gen", "Dependencies\msdf\msdf-atlas-gen.vcxproj", "{38BD587B-248B-4C81-0D1F-BDA7F98B28E6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msdfgen", "Dependencies\msdf\msdfgen\msdfgen.vcxproj", "{8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reactphysics3d", "Dependencies\reactphysics3d\reactphysics3d.vcxproj", "{2ECAB41A-1A98-A820-032C-1947EF988485}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yaml-cpp", "Dependencies\yamlcpp\yaml-cpp.vcxproj", "{88F1A057-74BE-FB62-9DD7-E90A890331F1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Engine", "SHADE_Engine\SHADE_Engine.vcxproj", "{3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}" - ProjectSection(ProjectDependencies) = postProject - {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {88F1A057-74BE-FB62-9DD7-E90A890331F1} - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} = {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} = {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} - {2ECAB41A-1A98-A820-032C-1947EF988485} = {2ECAB41A-1A98-A820-032C-1947EF988485} - {C0FF640D-2C14-8DBE-F595-301E616989EF} = {C0FF640D-2C14-8DBE-F595-301E616989EF} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SHADE_Managed", "SHADE_Managed\SHADE_Managed.vcxproj", "{16DB1400-829B-9036-4BD6-D9B3B755D512}" - ProjectSection(ProjectDependencies) = postProject - {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {88F1A057-74BE-FB62-9DD7-E90A890331F1} - {C0FF640D-2C14-8DBE-F595-301E616989EF} = {C0FF640D-2C14-8DBE-F595-301E616989EF} - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} = {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25}.Debug|x64.ActiveCfg = Debug|x64 - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25}.Debug|x64.Build.0 = Debug|x64 - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25}.Release|x64.ActiveCfg = Release|x64 - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25}.Release|x64.Build.0 = Release|x64 - {C0FF640D-2C14-8DBE-F595-301E616989EF}.Debug|x64.ActiveCfg = Debug|x64 - {C0FF640D-2C14-8DBE-F595-301E616989EF}.Debug|x64.Build.0 = Debug|x64 - {C0FF640D-2C14-8DBE-F595-301E616989EF}.Release|x64.ActiveCfg = Release|x64 - {C0FF640D-2C14-8DBE-F595-301E616989EF}.Release|x64.Build.0 = Release|x64 - {89895BD8-7556-B6E3-9E6F-A48B8A9BEB71}.Debug|x64.ActiveCfg = Debug|x64 - {89895BD8-7556-B6E3-9E6F-A48B8A9BEB71}.Debug|x64.Build.0 = Debug|x64 - {89895BD8-7556-B6E3-9E6F-A48B8A9BEB71}.Release|x64.ActiveCfg = Release|x64 - {89895BD8-7556-B6E3-9E6F-A48B8A9BEB71}.Release|x64.Build.0 = Release|x64 - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6}.Debug|x64.ActiveCfg = Debug|x64 - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6}.Debug|x64.Build.0 = Debug|x64 - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6}.Release|x64.ActiveCfg = Release|x64 - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6}.Release|x64.Build.0 = Release|x64 - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA}.Debug|x64.ActiveCfg = Debug|x64 - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA}.Debug|x64.Build.0 = Debug|x64 - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA}.Release|x64.ActiveCfg = Release|x64 - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA}.Release|x64.Build.0 = Release|x64 - {2ECAB41A-1A98-A820-032C-1947EF988485}.Debug|x64.ActiveCfg = Debug|x64 - {2ECAB41A-1A98-A820-032C-1947EF988485}.Debug|x64.Build.0 = Debug|x64 - {2ECAB41A-1A98-A820-032C-1947EF988485}.Release|x64.ActiveCfg = Release|x64 - {2ECAB41A-1A98-A820-032C-1947EF988485}.Release|x64.Build.0 = Release|x64 - {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Debug|x64.ActiveCfg = Debug|x64 - {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Debug|x64.Build.0 = Debug|x64 - {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Release|x64.ActiveCfg = Release|x64 - {88F1A057-74BE-FB62-9DD7-E90A890331F1}.Release|x64.Build.0 = Release|x64 - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Debug|x64.ActiveCfg = Debug|x64 - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Debug|x64.Build.0 = Debug|x64 - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Release|x64.ActiveCfg = Release|x64 - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0}.Release|x64.Build.0 = Release|x64 - {16DB1400-829B-9036-4BD6-D9B3B755D512}.Debug|x64.ActiveCfg = Debug|x64 - {16DB1400-829B-9036-4BD6-D9B3B755D512}.Debug|x64.Build.0 = Debug|x64 - {16DB1400-829B-9036-4BD6-D9B3B755D512}.Release|x64.ActiveCfg = Release|x64 - {16DB1400-829B-9036-4BD6-D9B3B755D512}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {C0FF640D-2C14-8DBE-F595-301E616989EF} = {53E47842-3FC8-3998-A828-34EB942B241A} - {89895BD8-7556-B6E3-9E6F-A48B8A9BEB71} = {53E47842-3FC8-3998-A828-34EB942B241A} - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} = {53E47842-3FC8-3998-A828-34EB942B241A} - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} = {53E47842-3FC8-3998-A828-34EB942B241A} - {2ECAB41A-1A98-A820-032C-1947EF988485} = {53E47842-3FC8-3998-A828-34EB942B241A} - {88F1A057-74BE-FB62-9DD7-E90A890331F1} = {53E47842-3FC8-3998-A828-34EB942B241A} - EndGlobalSection -EndGlobal diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj deleted file mode 100644 index 268076af..00000000 --- a/SHADE_Application/SHADE_Application.vcxproj +++ /dev/null @@ -1,130 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25} - true - Win32Proj - SHADE_Application - 10.0 - - - - Application - true - Unicode - v142 - - - Application - false - Unicode - v142 - - - - - - - - - - - - - true - ..\bin\Debug\ - ..\bin_int\Debug\SHADE_Application\ - SHADE_Application - .exe - - - false - ..\bin\Release\ - ..\bin_int\Release\SHADE_Application\ - SHADE_Application - .exe - - - - Use - SBpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _DEBUG;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) - EditAndContinue - Disabled - false - MultiThreadedDebugDLL - true - stdcpp20 - - - Windows - true - SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) - wWinMainCRTStartup - - - - - Use - SBpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _RELEASE;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) - Full - true - true - false - true - MultiThreadedDLL - true - stdcpp20 - - - Windows - true - true - SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) - wWinMainCRTStartup - - - - - - - - - - - Create - - - - - - - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - - - {16DB1400-829B-9036-4BD6-D9B3B755D512} - - - - - - \ No newline at end of file diff --git a/SHADE_Application/SHADE_Application.vcxproj.filters b/SHADE_Application/SHADE_Application.vcxproj.filters deleted file mode 100644 index 1234632d..00000000 --- a/SHADE_Application/SHADE_Application.vcxproj.filters +++ /dev/null @@ -1,30 +0,0 @@ - - - - - {D9DE78AF-4594-F1A4-CE88-EB7B3A3DE8A8} - - - {86EEB3D0-7290-DEA6-5B4B-F2FA478C65F7} - - - - - Application - - - - Scenes - - - - - Application - - - - Scenes - - - - \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj deleted file mode 100644 index 4fd19678..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ /dev/null @@ -1,317 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - true - Win32Proj - SHADE_Engine - 10.0 - - - - DynamicLibrary - true - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - - - - - - - - - - - true - ..\bin\Debug\ - ..\bin_int\Debug\SHADE_Engine\ - SHADE_Engine - .dll - - - false - ..\bin\Release\ - ..\bin_int\Release\SHADE_Engine\ - SHADE_Engine - .dll - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;%(AdditionalIncludeDirectories) - EditAndContinue - Disabled - false - MultiThreadedDebugDLL - true - stdcpp20 - - - Windows - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Debug\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;%(AdditionalIncludeDirectories) - Full - true - true - false - true - MultiThreadedDLL - true - stdcpp20 - - - Windows - true - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Release\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - - - - - - - - - - - - - - {88F1A057-74BE-FB62-9DD7-E90A890331F1} - - - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} - - - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} - - - {2ECAB41A-1A98-A820-032C-1947EF988485} - - - {C0FF640D-2C14-8DBE-F595-301E616989EF} - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters deleted file mode 100644 index 4eabf09d..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ /dev/null @@ -1,646 +0,0 @@ - - - - - {1AB26817-067F-C322-2F98-B1CA1BC4F8B0} - - - {EFD23933-5B34-1741-E4A1-5DF350024E00} - - - {261D0942-92A8-7606-9BB9-F9FA07C4D206} - - - {07FEB307-F3F6-D259-1C29-B8DE0881B265} - - - {EE037863-5A8F-E527-63A0-681CCFAA4128} - - - {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} - - - {80E7870B-ECF0-877C-756C-9E7CE174937C} - - - {8A8E2B37-7646-6D84-DF4D-46E0CB240875} - - - {1653CE33-0220-293F-2B39-17E717655ECD} - - - {92C817CE-7EC1-3620-A7F3-1BA5934B162C} - - - {17C745C0-83DD-4356-CC54-CF7738AA14DE} - - - {51443AC7-3D28-FB1C-A688-F56F928BE59E} - - - {573A6CF2-43C9-F5BB-ECE7-09B7D8550662} - - - {08DBDC43-F4D3-FB95-1D06-E11A095EDBA1} - - - {4AD5CA42-3664-540C-DF82-6807CBF064B2} - - - {FB5EE099-67EA-4D5E-70FB-D052DC05AA5E} - - - {BA26540B-263D-52A1-6FB4-DDC2DB092329} - - - {4B204703-3704-0859-A064-02AC8C67F2DA} - - - {EBA1D3FF-D75C-C3AB-8014-3CF66CAE0D3C} - - - {8CDBA7C9-F8E8-D5AF-81CF-D19AEDDBA166} - - - {2460C057-1070-6C28-7929-D14665585BC1} - - - {FBD334F8-67EA-328E-B061-BEAF1CB70316} - - - {1DD51CAD-8960-8A71-9271-0D66FE7BE671} - - - {57DAB30C-4369-3DD6-EC87-51D1D8F54D7C} - - - {9C0DAFD9-086F-8CE7-91DC-D299FD3CC3A6} - - - {EF2D07CC-DB26-261E-0459-0BA3F0B0052A} - - - {3AEF06DD-A6D2-151D-AFD5-43591B38DC6D} - - - {245F5AB0-1085-2417-F9CA-A9E2E58F49E3} - - - {03DB39DE-EFBE-FA33-581F-F5864422E5B5} - - - {576DF841-4392-47C2-6CDD-2C52586146E0} - - - {75F29FE5-6102-4CB6-CABB-B0D4B6EA3A4F} - - - {5BAB2A92-478F-EBE7-B0EF-E53A9CF2D569} - - - {B3B14D12-9FC1-F9E2-087B-5E01F4A9E87B} - - - {AFF4887C-9B2B-8A0D-4418-7010302E060F} - - - {F1B75745-5D6D-D03A-E661-CA115216C73E} - - - {AC05897C-983C-8A0D-4129-70102D3F060F} - - - {ED6CDF9B-D939-3AA7-0253-284FEE7E6F35} - - - {B3F7140E-1F0C-3DBF-E88D-E01E546139F0} - - - {985A7358-04C5-27CF-4D03-D974B9AC0524} - - - {16CF2D0E-82E3-55BF-4B65-F91EB73852F0} - - - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - Engine - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math - - - Math - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Meta - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - - - - Scene - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - Engine - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Resource - - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - \ No newline at end of file diff --git a/SHADE_Managed/SHADE_Managed.vcxproj.filters b/SHADE_Managed/SHADE_Managed.vcxproj.filters deleted file mode 100644 index c1901bac..00000000 --- a/SHADE_Managed/SHADE_Managed.vcxproj.filters +++ /dev/null @@ -1,113 +0,0 @@ - - - - - {6B7DD516-5735-1764-C03C-F0BFAC13B254} - - - {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} - - - {AFF4887C-9B2B-8A0D-4418-7010302E060F} - - - {4D6F1AE8-B94E-9983-C266-245A2EC5FFE4} - - - {594615A9-C525-9444-CE3D-1F1B3A9CFAA5} - - - - - Components - - - Engine - - - Engine - - - Engine - - - Engine - - - Math - - - Math - - - Math - - - - Scripts - - - Scripts - - - Utility - - - Utility - - - Utility - - - - - - Components - - - Engine - - - Engine - - - Engine - - - Engine - - - Math - - - Math - - - Math - - - - Scripts - - - Scripts - - - Utility - - - Utility - - - Utility - - - - - Components - - - Engine - - - \ No newline at end of file From 5af0bf7d25fa6d2d498cc4f42c2a35c20dd3d730 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 18:33:36 +0800 Subject: [PATCH 082/793] Instructions on how to use events --- SHADE_Engine/src/Events/SHEventManager.cpp | 11 +------- SHADE_Engine/src/Events/SHEventManager.h | 33 ++++++++++++++++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp index 2b4d15f1..1cede2a0 100644 --- a/SHADE_Engine/src/Events/SHEventManager.cpp +++ b/SHADE_Engine/src/Events/SHEventManager.cpp @@ -16,16 +16,7 @@ namespace SHADE std::unordered_map SHEventManager::dataEventMap; SHEventHandle SHEventManager::handleCounter{ 0 }; - - - /**************************************************************************** - * \brief Returns function pointer to entry point for events. - ****************************************************************************/ - EventManagerListener SHEventManager::GetListenerFunction() - { - return &CatchEvent; - } - + /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. * \param EventType - Templated type for every type of event diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index 35acd4de..fd09d323 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -17,7 +17,33 @@ /****************************************************************************** INSTRUCTIONS FOR USE: On broadcaster side: - 1. + 1. Create a struct/class to contain the data that you would need to send + in the event. + 2. Create unique event identifier in SHEventDefines.h, follow the example + provided. + 3. When ready to send the event, call + SHEventManager::BroadcastEvent(exampleClass, EVENT_IDENTIFIER); + + Headers required: SHEventManager.h + + On Receiver side: + 1. Create a function with the signature: + SHEventHandle FunctionName(SHEvent); + 2. In the init function of the class, copy the below in and replace the + necessary: + + std::shared_ptr> thisReceiver{ + std::make_shared>(this, &ReceiverClass::ReceiveFunction) + }; + ReceiverPtr receiver = std::dynamic_pointer_cast(thisReceiver); + SHEventManager::SubscribeTo(EVENT_IDENTIFIER, receiver); + + 3. Note: The EventIdentifier should match all that is defined in + SHEventDefines.h so check there. When the receiver catches the event, it + needs to know the struct that the broadcaster is using to cast the void* + properly. + + Headers required: SHEventManager.h, SHEventReceiver.h ******************************************************************************/ namespace SHADE @@ -32,10 +58,6 @@ namespace SHADE class SHEventManager { public: - /**************************************************************************** - * \brief Returns function pointer to entry point for events. - ****************************************************************************/ - static EventManagerListener GetListenerFunction(); /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. @@ -86,4 +108,5 @@ namespace SHADE static void RegisterReceiverToType(SHEventIdentifier, ReceiverPtr); }; + } From e1074887c8b78db2b75dbc0df59812875f2aafbe Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 18:34:07 +0800 Subject: [PATCH 083/793] Added instructions --- SHADE_Engine/src/Events/SHEventManager.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index fd09d323..c831b63f 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -44,6 +44,8 @@ properly. Headers required: SHEventManager.h, SHEventReceiver.h + + If you have any questions/suggestions for improvement lmk. ******************************************************************************/ namespace SHADE From f9743f394d039ec193272bfc4eb310eac83e831e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 18:37:05 +0800 Subject: [PATCH 084/793] Added some lines in comments for clarity --- SHADE_Engine/src/Events/SHEventDefines.h | 1 - SHADE_Engine/src/Events/SHEventManager.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 4087caa0..76b403bd 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -6,5 +6,4 @@ typedef uint32_t SHEventHandle; typedef void* SHEventDataPtr; //Add your event identifiers here: - constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index c831b63f..f2f19fef 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -38,6 +38,8 @@ ReceiverPtr receiver = std::dynamic_pointer_cast(thisReceiver); SHEventManager::SubscribeTo(EVENT_IDENTIFIER, receiver); + ReceiverClass is the class that the receiver is in. E.g., SHPhysicsSystem + 3. Note: The EventIdentifier should match all that is defined in SHEventDefines.h so check there. When the receiver catches the event, it needs to know the struct that the broadcaster is using to cast the void* From f0b9f19f4d80c7d9e64e23d69bd2826bdc952f35 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 16 Sep 2022 12:33:42 +0800 Subject: [PATCH 085/793] clear color value fix --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 14 +++++------ .../Graphics/RenderGraph/SHRenderGraph.cpp | 6 +++-- .../Graphics/Renderpass/SHVkRenderpass.cpp | 23 ++++++++++++++----- .../src/Graphics/Renderpass/SHVkRenderpass.h | 5 +++- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 63fd7466..4926ebc0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -98,12 +98,12 @@ namespace SHADE renderGraph.AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); renderGraph.AddResource("Downscale", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); renderGraph.AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = renderGraph.AddNode("G-Buffer", { "Position", "Normals", "Composite" }, {}); // no predecessors + auto node = renderGraph.AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors // First subpass to write to G-Buffer auto writeSubpass = node->AddSubpass("G-Buffer Write"); writeSubpass->AddColorOutput("Position"); - writeSubpass->AddColorOutput("Normals"); + writeSubpass->AddColorOutput("Present"); // Second subpass to read from G-Buffer auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); @@ -111,11 +111,11 @@ namespace SHADE compositeSubpass->AddInput("Normals"); compositeSubpass->AddInput("Position"); - //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present"}, {"G-Buffer"}); - //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); - //bloomSubpass->AddInput("Composite"); - // bloomSubpass->AddColorOutput("Downscale"); - // bloomSubpass->AddColorOutput("Present"); + //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present" }, { "G-Buffer" }); + //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); + //bloomSubpass->AddInput("Composite"); + //bloomSubpass->AddColorOutput("Downscale"); + //bloomSubpass->AddColorOutput("Present"); renderGraph.Generate(); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 76106d67..a2647b74 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -459,10 +459,10 @@ namespace SHADE // We set this to clear first. If later we find out that some predecessor is writing to the same attachment, // we set the pred's storeOp to eStore and "this" loadOp to eLoad. newDesc.loadOp = vk::AttachmentLoadOp::eClear; - newDesc.storeOp = vk::AttachmentStoreOp::eDontCare; + newDesc.storeOp = vk::AttachmentStoreOp::eStore; newDesc.stencilLoadOp = vk::AttachmentLoadOp::eClear; - newDesc.stencilStoreOp = vk::AttachmentStoreOp::eDontCare; + newDesc.stencilStoreOp = vk::AttachmentStoreOp::eStore; newDesc.format = attResources[i]->resourceFormat; @@ -1030,6 +1030,8 @@ namespace SHADE auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); + cmdBuffer->SetviewportScissor(1920.0f, 1080.0f, 1920, 1080); + for (auto& node : nodes) { node->Execute(commandBuffers[frameIndex], frameIndex); diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp index 53e3326e..29de5954 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp @@ -29,11 +29,17 @@ namespace SHADE /***************************************************************************/ SHVkRenderpass::SHVkRenderpass(Handle const& inLogicalDeviceHdl, std::span const vkDescriptions, std::vector const& subpasses) noexcept : logicalDeviceHdl {inLogicalDeviceHdl} + , numAttDescs {static_cast(vkDescriptions.size())} , clearColors{} { - // TODO: temporary only - clearColors[0].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; - clearColors[1].depthStencil = vk::ClearDepthStencilValue(1.0f, 0); + for (uint32_t i = 0; i < vkDescriptions.size(); ++i) + { + if (SHVkUtil::IsDepthStencilAttachment(vkDescriptions[i].format)) + clearColors[i].depthStencil = vk::ClearDepthStencilValue(1.0f, 0); + else + clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; + } + vk::RenderPassCreateInfo renderPassCreateInfo{}; std::vector subpassDeps; @@ -164,11 +170,16 @@ namespace SHADE SHVkRenderpass::SHVkRenderpass(Handle const& inLogicalDeviceHdl, std::span const vkDescriptions, std::span const spDescs, std::span const spDeps) noexcept : logicalDeviceHdl{ inLogicalDeviceHdl } + , numAttDescs{ static_cast(vkDescriptions.size()) } , clearColors{} { - // TODO: temporary only - clearColors[0].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; - clearColors[1].depthStencil = vk::ClearDepthStencilValue(1.0f, 0); + for (uint32_t i = 0; i < vkDescriptions.size(); ++i) + { + if (SHVkUtil::IsDepthStencilAttachment(vkDescriptions[i].format)) + clearColors[i].depthStencil = vk::ClearDepthStencilValue(1.0f, 0); + else + clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; + } subpassDescriptions.resize (spDescs.size()); for (uint32_t i = 0; i < subpassDescriptions.size(); ++i) diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index 6ffd6c38..b0ae7445 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -17,7 +17,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* STATIC CONSTEXPR VALUES */ /*-----------------------------------------------------------------------*/ - static constexpr uint32_t NUM_CLEAR_COLORS = 2; + static constexpr uint32_t NUM_CLEAR_COLORS = 10; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ @@ -34,6 +34,9 @@ namespace SHADE //! Clear colors for the color and depth std::array clearColors; + // number of attachment descriptions + uint32_t numAttDescs; + public: /*-----------------------------------------------------------------------*/ /* CTOR AND DTOR */ From b933b0f7fc06f82f27e776a8da58a1bd90259831 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 13:13:38 +0800 Subject: [PATCH 086/793] Added SerializeField attribute --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 +-- .../Serialisation/SerializeFieldAttribute.hxx | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 47c722dd..3116d680 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -483,8 +483,8 @@ namespace SHADE DWORD status; while (true) { - const auto SUCCESS = GetExitCodeProcess(procInfo.hProcess, &status); - if (!SUCCESS) + const auto EXEC_SUCCESS = GetExitCodeProcess(procInfo.hProcess, &status); + if (!EXEC_SUCCESS) { auto err = GetLastError(); std::ostringstream oss; diff --git a/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx new file mode 100644 index 00000000..6036a7f5 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx @@ -0,0 +1,35 @@ +/************************************************************************************//*! +\file SerializeFieldAttribute.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 5, 2021 +\brief Contains the definition of the managed SerializeField Attribute class with + the declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Simple attribute to mark that a field in a Script should be serialised. + /// + [System::AttributeUsage(AttributeTargets::Field)] + public ref class SerializeField : public System::Attribute + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Default Constructor + /// + SerializeField() = default; + }; +} + From 6f67c1acc7de3fbaae5e80b07d2e532d7b767658 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 16 Sep 2022 13:55:29 +0800 Subject: [PATCH 087/793] Base Editor (WIP, no vulkan) --- .../src/Application/SBApplication.cpp | 1 + SHADE_Engine/src/Editor/SHEditor.cpp | 67 +++++++++++++++++++ SHADE_Engine/src/Editor/SHEditor.h | 19 ++++++ 3 files changed, 87 insertions(+) create mode 100644 SHADE_Engine/src/Editor/SHEditor.cpp create mode 100644 SHADE_Engine/src/Editor/SHEditor.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 171f4995..cbf3e5d9 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -60,6 +60,7 @@ namespace Sandbox SHADE::SHScriptEngine::Exit(); SDL_DestroyWindow(sdlWindow); + SDL_Quit(); #ifdef SHEDITOR #else #endif diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp new file mode 100644 index 00000000..f4fa5158 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -0,0 +1,67 @@ +#include "SHpch.h" +#include "SHEditor.h" + +#include + +//IMGUI Backend includes +#include +#include + +#include "ECS_Base/System/SHSystemManager.h" +#include "Graphics/Instance/SHVkInstance.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" + +namespace SHADE +{ + void SHEditor::Initialise(SDL_Window* sdlWindow) + { + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + + ImGui_ImplSDL2_InitForVulkan(sdlWindow); + + auto* gfxSystem = reinterpret_cast(SHSystemManager::GetSystem("Graphics System")); + + ImGui_ImplVulkan_InitInfo initInfo{}; + initInfo.Instance = SHVkInstance::GetVkInstance(); + initInfo.PhysicalDevice = + + ImGui_ImplVulkan_DestroyFontUploadObjects(); + + } + + void SHEditor::PreRender() + { + NewFrame(); + + ImGui::ShowDemoWindow(); + } + + void SHEditor::Render() + { + ImGui::Render(); + } + + void SHEditor::Exit() + { + ImGui_ImplVulkan_Shutdown(); + ImGui_ImplSDL2_Shutdown(); + ImGui::DestroyContext(); + } + + + void SHEditor::InitBackend() + { + } + + void SHEditor::NewFrame() + { + ImGui_ImplVulkan_NewFrame(); + ImGui_ImplSDL2_NewFrame(); + ImGui::NewFrame(); + } + + void SHEditor::EndFrame() + { + } +} diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h new file mode 100644 index 00000000..d9f726a6 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +namespace SHADE +{ + class SHEditor + { + public: + static void Initialise(SDL_Window* sdlWindow); + static void PreRender(); + static void Render(); + static void Exit(); + private: + static void InitBackend(); + static void NewFrame(); + static void EndFrame(); + }; +} \ No newline at end of file From da582e0f1d74c9255483b17944b0e96d9a9b340a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 13:58:08 +0800 Subject: [PATCH 088/793] added serial --- .../src/Serialisation/ReflectionUtilities.cxx | 429 ++++++++++++++++++ .../src/Serialisation/ReflectionUtilities.hxx | 73 +++ .../Serialisation/SerialiseFieldAttribute.cxx | 27 ++ .../Serialisation/SerializeFieldAttribute.hxx | 4 +- 4 files changed, 531 insertions(+), 2 deletions(-) create mode 100644 SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx create mode 100644 SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx create mode 100644 SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx new file mode 100644 index 00000000..8ea4a44e --- /dev/null +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -0,0 +1,429 @@ +/************************************************************************************//*! +\file ReflectionUtilities.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 6, 2021 +\brief Contains the definition of the functions for the ReflectionUtilities + managed static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Serialisation/ReflectionUtilities.hxx" +// External Dependencies + +// Project Includes +#include "SerializeFieldAttribute.hxx" +#include "Utility/Convert.hxx" + +/*-------------------------------------------------------------------------------------*/ +/* Macro Functions */ +/*-------------------------------------------------------------------------------------*/ +/// +/// Macro expansion that is used in FieldToRapidJsonValue() to check the type of a field +/// named "fieldInfo" against the specified type and if it matches, store said field +/// of an object named "object" it into rapidjson::Value called "jsonValue" as that +/// specified type. +/// +/// The type to check. +#define PRIMITIVE_FIELD_CAST(T) \ +(fieldInfo->FieldType == T::typeid) \ +{ \ + jsonValue = safe_cast(fieldInfo->GetValue(object)); \ +} \ +/// +/// Macro expansion that is used in RapidJsonValueToField() to check the type of a field +/// named "fieldInfo" against the specified type and if it matches, retrieves the value +/// using the function FUNC provided from a rapidjson::Value called "jsonValue" and sets +/// the value of the field to the retrieved value. +/// +/// The type to check. +/// Member function of jsonValue to use to retrieve the data. +#define PRIMITIVE_FIELD_ASSIGN(T, FUNC) \ +(fieldInfo->FieldType == T::typeid) \ +{ \ + fieldInfo->SetValue(object, jsonValue.FUNC()); \ +} \ +/// +/// Macro expansion that is used in RapidJsonValueToField() to retrieve the specified +/// member of a Vector type that is stored into a Vector named "vec". +/// +/// The name of the member to retrieve. +#define PRIMITIVE_VECTOR_FIELD_ASSIGN(MEMBER) \ +iter = jsonValue.FindMember(#MEMBER); \ +if (iter != jsonValue.MemberEnd()) \ +{ \ + vec.MEMBER = iter->value.GetDouble(); \ +} \ +/// +/// Macro expansion that is used in RapidJsonValueToField() to retrieve the specified +/// member of a Color type that is stored into a Color named "col". +/// +/// The name of the member to retrieve. +#define PRIMITIVE_COLOR_FIELD_ASSIGN(MEMBER) \ +iter = jsonValue.FindMember(#MEMBER); \ +if (iter != jsonValue.MemberEnd()) \ +{ \ + col.MEMBER = iter->value.GetFloat(); \ +} \ +/// +/// Macro expansion that is used to write the name of a field named fieldInfo into a +/// rapidjson writer called writer. +/// +#define PRIMITIVE_WRITE_FIELD_NAME writer.String(Convert::ToNative(fieldInfo->Name).c_str()); +/// +/// Macro expansion that is used in serialiseFieldJson() to check the type of a field +/// named "fieldInfo" against the specified type and if it matches, writes the value +/// using the function FUNC in to a rapidjson writer object named "writer". +/// +/// The type to check. +/// +/// Member function of the rapidjson writer object to use to write the data. +/// +#define PRIMITIVE_FIELD_SERIALISE_JSON(T, FUNC) \ +(fieldInfo->FieldType == T::typeid) \ +{ \ + PRIMITIVE_WRITE_FIELD_NAME \ + writer.FUNC(safe_cast(fieldInfo->GetValue(object))); \ +} \ +/// +/// Macro expansion that is used in serialiseFieldJson() to write the specified +/// member of a Vector named "vec" using the rapidjson writer named "writer". +/// +/// The name of the member to write. +#define PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(MEMBER) \ +writer.String(#MEMBER); \ +writer.Double(vec.MEMBER); \ +/*-------------------------------------------------------------------------------------*/ +/* Function Definitions */ +/*-------------------------------------------------------------------------------------*/ +namespace SHADE +{ + System::Collections::Generic::IEnumerable^ ReflectionUtilities::GetInstanceFields(System::Object^ object) + { + using namespace System::Reflection; + + return object->GetType()->GetFields + ( + BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance + ); + } + + bool ReflectionUtilities::FieldIsSerialisable(System::Reflection::FieldInfo^ fieldInfo) + { + return fieldInfo->IsPublic || fieldInfo->GetCustomAttributes(SerializeField::typeid, true)->Length > 0; + } + + /*---------------------------------------------------------------------------------*/ + /* Serialisation Functions */ + /*---------------------------------------------------------------------------------*/ + //void ReflectionUtilities::Serialise(System::Object^ object, YAML::Emitter& yaml) + //{ + // // Create YAML object + // yaml << YAML::Key << Convert::ToNative(object->GetType().FullName); + // yaml << YAML::BeginMap; + + // // Get all fields + // IEnumerable^ fields = GetInstanceFields(object); + // for each (FieldInfo^ field in fields) + // { + // // Ignore private and non-SerialiseField + // if (!FieldIsSerialisable(field)) + // continue; + + // // Serialise + // rapidjson::Value jsonValue = FieldToRapidJsonValue(field, object, allocator); + // rapidjson::Value key(Convert::ToNative(field->Name).c_str(), allocator); + // scriptRoot.AddMember(key.Move(), jsonValue, allocator); + // } + + // /* Add the Script JSON Object to the JSON root node*/ + // rapidjson::Value key(Convert::ToNative(object->GetType()->FullName).c_str(), allocator); + // json.AddMember(key.Move(), scriptRoot, allocator); + + // /* Prepare to send to the caller */ + // // Convert to string + // rapidjson::StringBuffer buffer; + // rapidjson::PrettyWriter writer(buffer); + // json.Accept(writer); + + // // Return the result + // return Convert::ToCLI(std::string(buffer.GetString())); + //} + //void ReflectionUtilities::Deserialise(System::String^ jsonString, Object^ object) + //{ + // // Load the JSON + // rapidjson::Document json; + // auto& allocator = json.GetAllocator(); + // json.Parse(Convert::ToNative(jsonString).c_str()); + + // // Get the root object + // auto scriptRoot = json.MemberBegin(); + // if (scriptRoot == json.MemberEnd()) + // { + // Pls::Debug::LogError("[ReflectionUtilities] Attempted read of corrupted serialised object."); + // return; + // } + // + // // Get all fields + // IEnumerable^ fields = GetInstanceFields(object); + // for each (FieldInfo^ field in fields) + // { + // // Ignore private and non-SerialiseField + // if (!FieldIsSerialisable(field)) + // continue; + + // // Deserialise + // auto iter = scriptRoot->value.FindMember(Convert::ToNative(field->Name).c_str()); + // if (iter != scriptRoot->value.MemberEnd()) + // { + // // Get the data and set it in + // RapidJsonValueToField(iter->value, field, object); + + // } + // } + //} + //void ReflectionUtilities::Serialise(Object^ object, JsonWriter& writer) + //{ + // /* Script Name */ + // writer.String(Convert::ToNative(object->GetType()->FullName).c_str()); + + // /* Script Contents */ + // writer.StartObject(); + // IEnumerable^ fields = GetInstanceFields(object); + // for each (FieldInfo^ field in fields) + // { + // // Ignore private and non-SerialiseField + // if (!FieldIsSerialisable(field)) + // continue; + + // // Serialise + // serialiseFieldJson(field, object, writer); + // } + // writer.EndObject(); + //} + + ///*---------------------------------------------------------------------------------*/ + ///* Serialisation Helper Functions */ + ///*---------------------------------------------------------------------------------*/ + //rapidjson::Value ReflectionUtilities::FieldToRapidJsonValue(FieldInfo^ fieldInfo, Object^ object, JsonAllocator& allocator) + //{ + // rapidjson::Value jsonValue; + + // // Check each type of value and convert it into a rapidjson::Value + // if PRIMITIVE_FIELD_CAST(Int16) + // else if PRIMITIVE_FIELD_CAST(Int32) + // else if PRIMITIVE_FIELD_CAST(Int64) + // else if PRIMITIVE_FIELD_CAST(UInt16) + // else if PRIMITIVE_FIELD_CAST(UInt32) + // else if PRIMITIVE_FIELD_CAST(UInt64) + // else if PRIMITIVE_FIELD_CAST(Byte) + // else if PRIMITIVE_FIELD_CAST(bool) + // else if PRIMITIVE_FIELD_CAST(float) + // else if PRIMITIVE_FIELD_CAST(double) + // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) + // { + // jsonValue = safe_cast(fieldInfo->GetValue(object)); + // } + // else if (fieldInfo->FieldType == String::typeid) + // { + // String^ str = safe_cast(fieldInfo->GetValue(object)); + // jsonValue.SetString(Convert::ToNative(str).c_str(), str->Length, allocator); + // } + // else if (fieldInfo->FieldType == Vector2::typeid) + // { + // jsonValue.SetObject(); + // Vector2 vec = safe_cast(fieldInfo->GetValue(object)); + // jsonValue.AddMember(rapidjson::Value("x"), rapidjson::Value(vec.x), allocator); + // jsonValue.AddMember(rapidjson::Value("y"), rapidjson::Value(vec.y), allocator); + // } + // else if (fieldInfo->FieldType == Vector3::typeid) + // { + // jsonValue.SetObject(); + // Vector3 vec = safe_cast(fieldInfo->GetValue(object)); + // jsonValue.AddMember(rapidjson::Value("x"), rapidjson::Value(vec.x), allocator); + // jsonValue.AddMember(rapidjson::Value("y"), rapidjson::Value(vec.y), allocator); + // jsonValue.AddMember(rapidjson::Value("z"), rapidjson::Value(vec.z), allocator); + // } + // else if (fieldInfo->FieldType == Color::typeid) + // { + // jsonValue.SetObject(); + // Color col = safe_cast(fieldInfo->GetValue(object)); + // jsonValue.AddMember(rapidjson::Value("r"), rapidjson::Value(col.r), allocator); + // jsonValue.AddMember(rapidjson::Value("g"), rapidjson::Value(col.g), allocator); + // jsonValue.AddMember(rapidjson::Value("b"), rapidjson::Value(col.b), allocator); + // jsonValue.AddMember(rapidjson::Value("a"), rapidjson::Value(col.a), allocator); + // } + // else if (IResourceID::typeid->IsAssignableFrom(fieldInfo->FieldType)) + // { + // IResourceID^ rscId = safe_cast(fieldInfo->GetValue(object)); + // jsonValue = rscId->Id; + // } + // else // Not any of the supported types + // { + // Pls::Debug::LogWarning(Convert::ToNative(String::Format + // ( + // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialisation.", + // fieldInfo->Name, fieldInfo->FieldType) + // )); + // } + // return jsonValue; + //} + //void ReflectionUtilities::RapidJsonValueToField(const rapidjson::Value& jsonValue, FieldInfo^ fieldInfo, Object^ object) + //{ + // if PRIMITIVE_FIELD_ASSIGN(Int16, GetInt) + // else if PRIMITIVE_FIELD_ASSIGN(Int32, GetInt) + // else if PRIMITIVE_FIELD_ASSIGN(Int64, GetInt64) + // else if PRIMITIVE_FIELD_ASSIGN(UInt16, GetUint) + // else if PRIMITIVE_FIELD_ASSIGN(UInt32, GetUint) + // else if PRIMITIVE_FIELD_ASSIGN(UInt64, GetUint64) + // else if PRIMITIVE_FIELD_ASSIGN(Byte, GetInt) + // else if PRIMITIVE_FIELD_ASSIGN(bool, GetBool) + // else if PRIMITIVE_FIELD_ASSIGN(float, GetFloat) + // else if PRIMITIVE_FIELD_ASSIGN(double, GetDouble) + // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) + // { + // fieldInfo->SetValue(object, jsonValue.GetInt()); + // } + // else if (fieldInfo->FieldType == String::typeid) + // { + // fieldInfo->SetValue(object, Convert::ToCLI(jsonValue.GetString())); + // } + // else if (fieldInfo->FieldType == Vector2::typeid) + // { + // Vector2 vec; + // auto iter = jsonValue.MemberEnd(); + // PRIMITIVE_VECTOR_FIELD_ASSIGN(x) + // PRIMITIVE_VECTOR_FIELD_ASSIGN(y) + // fieldInfo->SetValue(object, vec); + // } + // else if (fieldInfo->FieldType == Vector3::typeid) + // { + // Vector3 vec; + // auto iter = jsonValue.MemberEnd(); + // PRIMITIVE_VECTOR_FIELD_ASSIGN(x) + // PRIMITIVE_VECTOR_FIELD_ASSIGN(y) + // PRIMITIVE_VECTOR_FIELD_ASSIGN(z) + // fieldInfo->SetValue(object, vec); + // } + // else if (fieldInfo->FieldType == Color::typeid) + // { + // Color col; + // auto iter = jsonValue.MemberEnd(); + // PRIMITIVE_COLOR_FIELD_ASSIGN(r) + // PRIMITIVE_COLOR_FIELD_ASSIGN(g) + // PRIMITIVE_COLOR_FIELD_ASSIGN(b) + // PRIMITIVE_COLOR_FIELD_ASSIGN(a) + // fieldInfo->SetValue(object, col); + // } + // else if (IResourceIDInternal::typeid->IsAssignableFrom(fieldInfo->FieldType)) + // { + // IResourceIDInternal^ rsc = safe_cast(Activator::CreateInstance(fieldInfo->FieldType)); + // rsc->Id = jsonValue.GetInt64(); + // fieldInfo->SetValue(object, rsc); + // } + // else // Not any of the supported types + // { + // Pls::Debug::LogWarning(Convert::ToNative(String::Format + // ( + // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", + // fieldInfo->Name, fieldInfo->FieldType) + // )); + // } + //} + + ///*---------------------------------------------------------------------------------*/ + ///* Internal Serialisation Helper Functions */ + ///*---------------------------------------------------------------------------------*/ + //void ReflectionUtilities::serialiseFieldJson(FieldInfo^ fieldInfo, Object^ object, JsonWriter& writer) + //{ + // if PRIMITIVE_FIELD_SERIALISE_JSON(Int16, Int) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(Int32, Int) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(Int64, Int64) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt16, Uint) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt32, Uint) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt64, Uint64) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(Byte, Int) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(bool, Bool) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(float, Double) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(double, Double) + // else if PRIMITIVE_FIELD_SERIALISE_JSON(double, Double) + // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) + // { + // PRIMITIVE_WRITE_FIELD_NAME + // writer.Int(safe_cast(fieldInfo->GetValue(object))); + + // } + // else if (fieldInfo->FieldType == String::typeid) + // { + // PRIMITIVE_WRITE_FIELD_NAME + // writer.String(Convert::ToNative(safe_cast(fieldInfo->GetValue(object))).c_str()); + + // } + // else if (fieldInfo->FieldType == Vector2::typeid) + // { + // // Get handle to the Vector to edit + // Vector2 vec = safe_cast(fieldInfo->GetValue(object)); + + // // Write the vector data + // PRIMITIVE_WRITE_FIELD_NAME + // writer.StartObject(); + // { + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(x) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(y) + // } + // writer.EndObject(); + // } + // else if (fieldInfo->FieldType == Vector3::typeid) + // { + // // Get handle to the Vector to edit + // Vector3 vec = safe_cast(fieldInfo->GetValue(object)); + + // // Write the vector data + // PRIMITIVE_WRITE_FIELD_NAME + // writer.StartObject(); + // { + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(x) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(y) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(z) + // } + // writer.EndObject(); + // } + // else if (fieldInfo->FieldType == Color::typeid) + // { + // // Get handle to the Vector to edit + // Color vec = safe_cast(fieldInfo->GetValue(object)); + + // // Write the vector data + // PRIMITIVE_WRITE_FIELD_NAME + // writer.StartObject(); + // { + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(r) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(g) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(b) + // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(a) + // } + // writer.EndObject(); + // } + // else if (IResourceID::typeid->IsAssignableFrom(fieldInfo->FieldType)) + // { + // PRIMITIVE_WRITE_FIELD_NAME + // IResourceID^ rsc = safe_cast(fieldInfo->GetValue(object)); + // writer.Int64(rsc->Id); + // } + // else // Not any of the supported types + // { + // Pls::Debug::LogWarning(Convert::ToNative(String::Format + // ( + // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialisation.", + // fieldInfo->Name, fieldInfo->FieldType) + // )); + // } + //} +} diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx new file mode 100644 index 00000000..f312ec05 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -0,0 +1,73 @@ +/************************************************************************************//*! +\file ReflectionUtilities.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 6, 2021 +\brief Contains the definition of the managed ReflectionUtilities static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include +#include + + +namespace SHADE +{ + /// + /// Contains useful static functions for working with Reflection. + /// + private ref class ReflectionUtilities abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + + /*-----------------------------------------------------------------------------*/ + /* Utility Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves a set of all non-static (instance) fields from a specified object. + /// + /// The object to get non-static fields from. + /// Immutable list of non-static fields. + static System::Collections::Generic::IEnumerable^ GetInstanceFields(System::Object^ object); + /// + /// Checks if a specified field is a candidate for serialisation. This means that + /// the field is public or private with the [SerialiseField] attribute. + /// + /// The field to check. + /// + /// True if the specified field is a candidate for serialisation. + /// + static bool FieldIsSerialisable(System::Reflection::FieldInfo^ fieldInfo); + + /*-----------------------------------------------------------------------------*/ + /* Serialisation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a JSON node that represents the specified object and its associated + /// serialisable fields. Public fields and fields marked with the SerialiseField + /// attribute will be serialised. + /// + /// The object to serialise. + //static void Serialise(Object^ object, YAML::Emitter& yaml); + /// + /// Deserialises a JSON string and copies the deserialised data into the + /// specified object if there are matching fields. + /// + /// + /// The JSON string that contains the data to copy into this PlushieScript + /// object. + /// + /// The object to copy deserialised data into. + //static void Deserialise(System::String^ jsonString, Object^ object); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx b/SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx new file mode 100644 index 00000000..c371d200 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx @@ -0,0 +1,27 @@ +/************************************************************************************//*! +\file SerializeFieldAttribute.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 5, 2021 +\brief Contains the definition of the functions of the managed SerializeField + Attribute class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "SerializeFieldAttribute.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + SerializeField::SerializeField() + {} +} diff --git a/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx index 6036a7f5..533ded2a 100644 --- a/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx +++ b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx @@ -19,7 +19,7 @@ namespace SHADE /// /// Simple attribute to mark that a field in a Script should be serialised. /// - [System::AttributeUsage(AttributeTargets::Field)] + [System::AttributeUsage(System::AttributeTargets::Field)] public ref class SerializeField : public System::Attribute { public: @@ -29,7 +29,7 @@ namespace SHADE /// /// Default Constructor /// - SerializeField() = default; + SerializeField(); }; } From aaf3d67eedce3c399aca91e95795db0937d6e09d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 14:02:55 +0800 Subject: [PATCH 089/793] Downgraded back to .NET 5.0 due to lack of VS 2019 support --- SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp | 4 ++-- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 ++-- SHADE_Managed/premake5.lua | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp index 89603524..6226949e 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.cpp @@ -126,7 +126,7 @@ namespace SHADE throwIfFailed("[DotNetRuntime] Failed to initialize CoreCLR.", result); initialised = true; - SHLOG_INFO("[DotNetRuntime] Successfully loaded the .NET 6.0 Runtime."); + SHLOG_INFO("[DotNetRuntime] Successfully loaded the .NET 5.0 Runtime."); } void SHDotNetRuntime::Exit() @@ -144,7 +144,7 @@ namespace SHADE domainId = 0; initialised = false; - SHLOG_INFO("[DotNetRuntime] Successfully shut down the .NET 6.0 Runtime."); + SHLOG_INFO("[DotNetRuntime] Successfully shut down the .NET 5.0 Runtime."); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 47c722dd..09f6ecec 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -190,7 +190,7 @@ namespace SHADE } // Prepare directory (delete useless files) - deleteFolder("net6.0"); + deleteFolder("net5.0"); deleteFolder("ref"); deleteFolder("../SHADE_Scripting"); deleteFolder("../obj"); @@ -236,7 +236,7 @@ namespace SHADE static std::string_view FILE_CONTENTS = "\n\ \n\ - net6.0\n\ + net5.0\n\ x64\n\ Release;Debug\n\ \n\ diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 092e92af..e50e9e86 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -2,7 +2,7 @@ project "SHADE_Managed" kind "SharedLib" language "C++" clr "NetCore" - dotnetframework "net6.0" + dotnetframework "net5.0" cppdialect "C++17" targetdir (outputdir) objdir (interdir) From 7315d3038fe32d087a303fdc2ddcbd2d7b07d331 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 16 Sep 2022 14:14:51 +0800 Subject: [PATCH 090/793] Fixed outdated header includes in cxx files Changed references to isActive to function calls --- SHADE_Managed/src/Engine/ECS.cxx | 2 +- SHADE_Managed/src/Engine/ECS.h++ | 4 ++-- SHADE_Managed/src/Engine/ECS.hxx | 2 +- SHADE_Managed/src/Engine/Entity.cxx | 2 +- SHADE_Managed/src/Engine/GameObject.cxx | 6 +++--- SHADE_Managed/src/Scripts/ScriptStore.cxx | 4 ++-- SHADE_Managed/src/Utility/Convert.cxx | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 5aceceee..e4405006 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -20,7 +20,7 @@ of DigiPen Institute of Technology is prohibited. #include #include // External Dependencies -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" // Project Headers #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" diff --git a/SHADE_Managed/src/Engine/ECS.h++ b/SHADE_Managed/src/Engine/ECS.h++ index e5ede5f2..daaa859f 100644 --- a/SHADE_Managed/src/Engine/ECS.h++ +++ b/SHADE_Managed/src/Engine/ECS.h++ @@ -17,8 +17,8 @@ of DigiPen Institute of Technology is prohibited. // Primary Include #include "ECS.hxx" // External Dependencies -#include "ECS_Base/System/SHComponentManager.h" -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" namespace SHADE { diff --git a/SHADE_Managed/src/Engine/ECS.hxx b/SHADE_Managed/src/Engine/ECS.hxx index 72c88e11..da73f14c 100644 --- a/SHADE_Managed/src/Engine/ECS.hxx +++ b/SHADE_Managed/src/Engine/ECS.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "ECS_Base/System/SHComponentManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" // Project Includes #include "Components/Component.hxx" diff --git a/SHADE_Managed/src/Engine/Entity.cxx b/SHADE_Managed/src/Engine/Entity.cxx index ba1a31c6..22e8a8c2 100644 --- a/SHADE_Managed/src/Engine/Entity.cxx +++ b/SHADE_Managed/src/Engine/Entity.cxx @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Entity.hxx" // External Dependencies -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" namespace SHADE { diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 3896fac5..1fbc3b4a 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -16,7 +16,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "GameObject.hxx" // External Dependencies -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" // Project Headers #include "ECS.hxx" #include "Scripts/ScriptStore.hxx" @@ -52,7 +52,7 @@ namespace SHADE } bool GameObject::IsActiveSelf::get() { - return GetNativeEntity().isActive; + return GetNativeEntity().GetActive(); } bool GameObject::IsActiveInHierarchy::get() { @@ -68,7 +68,7 @@ namespace SHADE } void GameObject::SetActive(bool active) { - GetNativeEntity().isActive = active; + GetNativeEntity().SetActive(active); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 9a9eff54..d30cad6b 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -19,7 +19,7 @@ of DigiPen Institute of Technology is prohibited. // Standard Libraries #include // External Dependencies -#include "ECS_Base/System/SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" // Project Headers #include "Utility/Debug.hxx" #include "Utility/Convert.hxx" @@ -668,6 +668,6 @@ namespace SHADE throw gcnew System::InvalidOperationException("Attempted to get native Component to an invalid Entity."); // Check active state - return nativeEntity->isActive; + return nativeEntity->GetActive(); } } diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 8a8aff70..d222fbb3 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Convert.hxx" // External Dependencies -#include "ECS_Base/System//SHEntityManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" #include namespace SHADE From a42a8b0c4626bfbe2e128aa9d17c542c7fd6cfd2 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 16 Sep 2022 14:20:21 +0800 Subject: [PATCH 091/793] SH_API EVERYWHERE --- SHADE_Application/src/Application/SBApplication.cpp | 2 +- SHADE_Engine/src/ECS_Base/System/SHSystemManager.h | 3 ++- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 2 +- .../src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h | 3 ++- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h | 9 +++++---- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 61be1ae0..a378ff36 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -1,6 +1,6 @@ #include "SBpch.h" #include "SBApplication.h" -#include "Engine/ECS_Base/System/SHSystemManager.h" +#include "ECS_Base/System/SHSystemManager.h" #define SHEDITOR #ifdef SHEDITOR diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h index d5a4866d..d4b960f9 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemManager.h @@ -20,12 +20,13 @@ #include #include #include "../System/SHSystem.h" +#include "SH_API.h" namespace SHADE { - class SHSystemManager + class SH_API SHSystemManager { //type definition for the container we use to store our system using SystemContainer = std::unordered_map>; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index eeaf6b12..f0a14930 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -63,7 +63,7 @@ namespace SHADE portions of the screen. */ /***********************************************************************************/ - class SHGraphicsSystem : public SHSystem + class SH_API SHGraphicsSystem : public SHSystem { public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h index 7ed8cb82..04cea4e4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h @@ -3,6 +3,7 @@ #include #include "SHPerFrameData.h" +#include "SH_API.h" namespace SHADE { @@ -16,7 +17,7 @@ namespace SHADE //! render context in SHADE engine has is that it requires users to call these explicitly in the middle end. While there //! is little reason the flow of the render context should deviate from its intended usage, we want to leave it up to //! users to explicitly call functions from here so we don't risk losing opportunities for different usage. - class SHRenderContext + class SH_API SHRenderContext { private: //! container of frame data. Note that the manager owns the data, but the frame data themselves do not own anything. diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 91f3f2ca..719c2d46 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -3,6 +3,7 @@ #include "Graphics/Renderpass/SHVkRenderpass.h" #include "Resource/ResourceLibrary.h" +#include "SH_API.h" #include #include @@ -28,7 +29,7 @@ namespace SHADE DEPTH_STENCIL, }; - class SHRenderGraphResource + class SH_API SHRenderGraphResource { private: /*-----------------------------------------------------------------------*/ @@ -74,11 +75,11 @@ namespace SHADE friend class SHRenderGraph; }; - class SHRenderGraphNode : public ISelfHandle + class SH_API SHRenderGraphNode : public ISelfHandle { public: - class SHSubpass + class SH_API SHSubpass { public: /*-----------------------------------------------------------------------*/ @@ -218,7 +219,7 @@ namespace SHADE friend class SHRenderGraph; }; - class SHRenderGraph + class SH_API SHRenderGraph { private: /*-----------------------------------------------------------------------*/ From 4546b84c061464fa26f76afecd995d527d8b2e2c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 15:37:22 +0800 Subject: [PATCH 092/793] Added YAML serialization of scripts --- .../src/Serialisation/ReflectionUtilities.cxx | 535 ++++++------------ .../src/Serialisation/ReflectionUtilities.h++ | 54 ++ .../src/Serialisation/ReflectionUtilities.hxx | 34 +- 3 files changed, 249 insertions(+), 374 deletions(-) create mode 100644 SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 8ea4a44e..2a9cc57c 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -16,41 +16,17 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" // Primary Header #include "Serialisation/ReflectionUtilities.hxx" -// External Dependencies - // Project Includes #include "SerializeFieldAttribute.hxx" #include "Utility/Convert.hxx" +#include "Math/Vector2.hxx" +#include "Math/Vector3.hxx" +#include "Utility/Debug.hxx" /*-------------------------------------------------------------------------------------*/ /* Macro Functions */ /*-------------------------------------------------------------------------------------*/ /// -/// Macro expansion that is used in FieldToRapidJsonValue() to check the type of a field -/// named "fieldInfo" against the specified type and if it matches, store said field -/// of an object named "object" it into rapidjson::Value called "jsonValue" as that -/// specified type. -/// -/// The type to check. -#define PRIMITIVE_FIELD_CAST(T) \ -(fieldInfo->FieldType == T::typeid) \ -{ \ - jsonValue = safe_cast(fieldInfo->GetValue(object)); \ -} \ -/// -/// Macro expansion that is used in RapidJsonValueToField() to check the type of a field -/// named "fieldInfo" against the specified type and if it matches, retrieves the value -/// using the function FUNC provided from a rapidjson::Value called "jsonValue" and sets -/// the value of the field to the retrieved value. -/// -/// The type to check. -/// Member function of jsonValue to use to retrieve the data. -#define PRIMITIVE_FIELD_ASSIGN(T, FUNC) \ -(fieldInfo->FieldType == T::typeid) \ -{ \ - fieldInfo->SetValue(object, jsonValue.FUNC()); \ -} \ -/// /// Macro expansion that is used in RapidJsonValueToField() to retrieve the specified /// member of a Vector type that is stored into a Vector named "vec". /// @@ -61,45 +37,7 @@ if (iter != jsonValue.MemberEnd()) \ { \ vec.MEMBER = iter->value.GetDouble(); \ } \ -/// -/// Macro expansion that is used in RapidJsonValueToField() to retrieve the specified -/// member of a Color type that is stored into a Color named "col". -/// -/// The name of the member to retrieve. -#define PRIMITIVE_COLOR_FIELD_ASSIGN(MEMBER) \ -iter = jsonValue.FindMember(#MEMBER); \ -if (iter != jsonValue.MemberEnd()) \ -{ \ - col.MEMBER = iter->value.GetFloat(); \ -} \ -/// -/// Macro expansion that is used to write the name of a field named fieldInfo into a -/// rapidjson writer called writer. -/// -#define PRIMITIVE_WRITE_FIELD_NAME writer.String(Convert::ToNative(fieldInfo->Name).c_str()); -/// -/// Macro expansion that is used in serialiseFieldJson() to check the type of a field -/// named "fieldInfo" against the specified type and if it matches, writes the value -/// using the function FUNC in to a rapidjson writer object named "writer". -/// -/// The type to check. -/// -/// Member function of the rapidjson writer object to use to write the data. -/// -#define PRIMITIVE_FIELD_SERIALISE_JSON(T, FUNC) \ -(fieldInfo->FieldType == T::typeid) \ -{ \ - PRIMITIVE_WRITE_FIELD_NAME \ - writer.FUNC(safe_cast(fieldInfo->GetValue(object))); \ -} \ -/// -/// Macro expansion that is used in serialiseFieldJson() to write the specified -/// member of a Vector named "vec" using the rapidjson writer named "writer". -/// -/// The name of the member to write. -#define PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(MEMBER) \ -writer.String(#MEMBER); \ -writer.Double(vec.MEMBER); \ + /*-------------------------------------------------------------------------------------*/ /* Function Definitions */ /*-------------------------------------------------------------------------------------*/ @@ -123,307 +61,182 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - //void ReflectionUtilities::Serialise(System::Object^ object, YAML::Emitter& yaml) - //{ - // // Create YAML object - // yaml << YAML::Key << Convert::ToNative(object->GetType().FullName); - // yaml << YAML::BeginMap; + void ReflectionUtilities::Serialise(System::Object^ object, YAML::Emitter& yaml) + { + using namespace System::Reflection; - // // Get all fields - // IEnumerable^ fields = GetInstanceFields(object); - // for each (FieldInfo^ field in fields) - // { - // // Ignore private and non-SerialiseField - // if (!FieldIsSerialisable(field)) - // continue; + // Create YAML object + yaml << YAML::Key << Convert::ToNative(object->GetType()->FullName); + yaml << YAML::BeginMap; - // // Serialise - // rapidjson::Value jsonValue = FieldToRapidJsonValue(field, object, allocator); - // rapidjson::Value key(Convert::ToNative(field->Name).c_str(), allocator); - // scriptRoot.AddMember(key.Move(), jsonValue, allocator); - // } + // Get all fields + System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); + for each (FieldInfo^ field in fields) + { + // Ignore private and non-SerialiseField + if (!FieldIsSerialisable(field)) + continue; - // /* Add the Script JSON Object to the JSON root node*/ - // rapidjson::Value key(Convert::ToNative(object->GetType()->FullName).c_str(), allocator); - // json.AddMember(key.Move(), scriptRoot, allocator); + // Serialise + writeFieldIntoYaml(field, object, yaml); + } - // /* Prepare to send to the caller */ - // // Convert to string - // rapidjson::StringBuffer buffer; - // rapidjson::PrettyWriter writer(buffer); - // json.Accept(writer); + yaml << YAML::EndMap; + } + void ReflectionUtilities::Deserialise(YAML::Node& yamlNode, Object^ object) + { + using namespace System::Reflection; - // // Return the result - // return Convert::ToCLI(std::string(buffer.GetString())); - //} - //void ReflectionUtilities::Deserialise(System::String^ jsonString, Object^ object) - //{ - // // Load the JSON - // rapidjson::Document json; - // auto& allocator = json.GetAllocator(); - // json.Parse(Convert::ToNative(jsonString).c_str()); + // Load the YAML + if (!yamlNode.IsMap()) + { + // Invalid + Debug::LogError + ( + System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of \"{0}\" script.", + object->GetType()->FullName) + ); + return; + } + // Get all fields + System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); + for each (FieldInfo^ field in fields) + { + // Ignore private and non-SerialiseField + if (!FieldIsSerialisable(field)) + continue; - // // Get the root object - // auto scriptRoot = json.MemberBegin(); - // if (scriptRoot == json.MemberEnd()) - // { - // Pls::Debug::LogError("[ReflectionUtilities] Attempted read of corrupted serialised object."); - // return; - // } - // - // // Get all fields - // IEnumerable^ fields = GetInstanceFields(object); - // for each (FieldInfo^ field in fields) - // { - // // Ignore private and non-SerialiseField - // if (!FieldIsSerialisable(field)) - // continue; + // Deserialise + const std::string FIELD_NAME = Convert::ToNative(field->Name); + if (yamlNode[FIELD_NAME]) + { + writeYamlIntoField(field, object, yamlNode[FIELD_NAME]); + } + } + } + /*---------------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void ReflectionUtilities::writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Emitter& yaml) + { + // Field Name + yaml << YAML::Key << Convert::ToNative(fieldInfo->Name); - // // Deserialise - // auto iter = scriptRoot->value.FindMember(Convert::ToNative(field->Name).c_str()); - // if (iter != scriptRoot->value.MemberEnd()) - // { - // // Get the data and set it in - // RapidJsonValueToField(iter->value, field, object); + // Field Value + yaml << YAML::Value; + if (fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml(fieldInfo, object, yaml) || + fieldInsertYaml(fieldInfo, object, yaml) || + fieldInsertYaml(fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml) || + fieldInsertYaml (fieldInfo, object, yaml)) + { + return; + } + else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) + { + yaml << safe_cast(fieldInfo->GetValue(object)); + } + else if (fieldInfo->FieldType == System::String::typeid) + { + System::String^ str = safe_cast(fieldInfo->GetValue(object)); + yaml << Convert::ToNative(str); + } + else if (fieldInfo->FieldType == Vector2::typeid) + { + Vector2 vec = safe_cast(fieldInfo->GetValue(object)); + yaml << YAML::BeginSeq << YAML::Flow << vec.x << vec.y << YAML::EndSeq; + } + else if (fieldInfo->FieldType == Vector3::typeid) + { + Vector3 vec = safe_cast(fieldInfo->GetValue(object)); + yaml << YAML::BeginSeq << YAML::Flow << vec.x << vec.y << vec.z << YAML::EndSeq; + } + else // Not any of the supported types + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", + fieldInfo->Name, fieldInfo->FieldType) + )); + } + } - // } - // } - //} - //void ReflectionUtilities::Serialise(Object^ object, JsonWriter& writer) - //{ - // /* Script Name */ - // writer.String(Convert::ToNative(object->GetType()->FullName).c_str()); - - // /* Script Contents */ - // writer.StartObject(); - // IEnumerable^ fields = GetInstanceFields(object); - // for each (FieldInfo^ field in fields) - // { - // // Ignore private and non-SerialiseField - // if (!FieldIsSerialisable(field)) - // continue; - - // // Serialise - // serialiseFieldJson(field, object, writer); - // } - // writer.EndObject(); - //} - - ///*---------------------------------------------------------------------------------*/ - ///* Serialisation Helper Functions */ - ///*---------------------------------------------------------------------------------*/ - //rapidjson::Value ReflectionUtilities::FieldToRapidJsonValue(FieldInfo^ fieldInfo, Object^ object, JsonAllocator& allocator) - //{ - // rapidjson::Value jsonValue; - - // // Check each type of value and convert it into a rapidjson::Value - // if PRIMITIVE_FIELD_CAST(Int16) - // else if PRIMITIVE_FIELD_CAST(Int32) - // else if PRIMITIVE_FIELD_CAST(Int64) - // else if PRIMITIVE_FIELD_CAST(UInt16) - // else if PRIMITIVE_FIELD_CAST(UInt32) - // else if PRIMITIVE_FIELD_CAST(UInt64) - // else if PRIMITIVE_FIELD_CAST(Byte) - // else if PRIMITIVE_FIELD_CAST(bool) - // else if PRIMITIVE_FIELD_CAST(float) - // else if PRIMITIVE_FIELD_CAST(double) - // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) - // { - // jsonValue = safe_cast(fieldInfo->GetValue(object)); - // } - // else if (fieldInfo->FieldType == String::typeid) - // { - // String^ str = safe_cast(fieldInfo->GetValue(object)); - // jsonValue.SetString(Convert::ToNative(str).c_str(), str->Length, allocator); - // } - // else if (fieldInfo->FieldType == Vector2::typeid) - // { - // jsonValue.SetObject(); - // Vector2 vec = safe_cast(fieldInfo->GetValue(object)); - // jsonValue.AddMember(rapidjson::Value("x"), rapidjson::Value(vec.x), allocator); - // jsonValue.AddMember(rapidjson::Value("y"), rapidjson::Value(vec.y), allocator); - // } - // else if (fieldInfo->FieldType == Vector3::typeid) - // { - // jsonValue.SetObject(); - // Vector3 vec = safe_cast(fieldInfo->GetValue(object)); - // jsonValue.AddMember(rapidjson::Value("x"), rapidjson::Value(vec.x), allocator); - // jsonValue.AddMember(rapidjson::Value("y"), rapidjson::Value(vec.y), allocator); - // jsonValue.AddMember(rapidjson::Value("z"), rapidjson::Value(vec.z), allocator); - // } - // else if (fieldInfo->FieldType == Color::typeid) - // { - // jsonValue.SetObject(); - // Color col = safe_cast(fieldInfo->GetValue(object)); - // jsonValue.AddMember(rapidjson::Value("r"), rapidjson::Value(col.r), allocator); - // jsonValue.AddMember(rapidjson::Value("g"), rapidjson::Value(col.g), allocator); - // jsonValue.AddMember(rapidjson::Value("b"), rapidjson::Value(col.b), allocator); - // jsonValue.AddMember(rapidjson::Value("a"), rapidjson::Value(col.a), allocator); - // } - // else if (IResourceID::typeid->IsAssignableFrom(fieldInfo->FieldType)) - // { - // IResourceID^ rscId = safe_cast(fieldInfo->GetValue(object)); - // jsonValue = rscId->Id; - // } - // else // Not any of the supported types - // { - // Pls::Debug::LogWarning(Convert::ToNative(String::Format - // ( - // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialisation.", - // fieldInfo->Name, fieldInfo->FieldType) - // )); - // } - // return jsonValue; - //} - //void ReflectionUtilities::RapidJsonValueToField(const rapidjson::Value& jsonValue, FieldInfo^ fieldInfo, Object^ object) - //{ - // if PRIMITIVE_FIELD_ASSIGN(Int16, GetInt) - // else if PRIMITIVE_FIELD_ASSIGN(Int32, GetInt) - // else if PRIMITIVE_FIELD_ASSIGN(Int64, GetInt64) - // else if PRIMITIVE_FIELD_ASSIGN(UInt16, GetUint) - // else if PRIMITIVE_FIELD_ASSIGN(UInt32, GetUint) - // else if PRIMITIVE_FIELD_ASSIGN(UInt64, GetUint64) - // else if PRIMITIVE_FIELD_ASSIGN(Byte, GetInt) - // else if PRIMITIVE_FIELD_ASSIGN(bool, GetBool) - // else if PRIMITIVE_FIELD_ASSIGN(float, GetFloat) - // else if PRIMITIVE_FIELD_ASSIGN(double, GetDouble) - // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) - // { - // fieldInfo->SetValue(object, jsonValue.GetInt()); - // } - // else if (fieldInfo->FieldType == String::typeid) - // { - // fieldInfo->SetValue(object, Convert::ToCLI(jsonValue.GetString())); - // } - // else if (fieldInfo->FieldType == Vector2::typeid) - // { - // Vector2 vec; - // auto iter = jsonValue.MemberEnd(); - // PRIMITIVE_VECTOR_FIELD_ASSIGN(x) - // PRIMITIVE_VECTOR_FIELD_ASSIGN(y) - // fieldInfo->SetValue(object, vec); - // } - // else if (fieldInfo->FieldType == Vector3::typeid) - // { - // Vector3 vec; - // auto iter = jsonValue.MemberEnd(); - // PRIMITIVE_VECTOR_FIELD_ASSIGN(x) - // PRIMITIVE_VECTOR_FIELD_ASSIGN(y) - // PRIMITIVE_VECTOR_FIELD_ASSIGN(z) - // fieldInfo->SetValue(object, vec); - // } - // else if (fieldInfo->FieldType == Color::typeid) - // { - // Color col; - // auto iter = jsonValue.MemberEnd(); - // PRIMITIVE_COLOR_FIELD_ASSIGN(r) - // PRIMITIVE_COLOR_FIELD_ASSIGN(g) - // PRIMITIVE_COLOR_FIELD_ASSIGN(b) - // PRIMITIVE_COLOR_FIELD_ASSIGN(a) - // fieldInfo->SetValue(object, col); - // } - // else if (IResourceIDInternal::typeid->IsAssignableFrom(fieldInfo->FieldType)) - // { - // IResourceIDInternal^ rsc = safe_cast(Activator::CreateInstance(fieldInfo->FieldType)); - // rsc->Id = jsonValue.GetInt64(); - // fieldInfo->SetValue(object, rsc); - // } - // else // Not any of the supported types - // { - // Pls::Debug::LogWarning(Convert::ToNative(String::Format - // ( - // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", - // fieldInfo->Name, fieldInfo->FieldType) - // )); - // } - //} - - ///*---------------------------------------------------------------------------------*/ - ///* Internal Serialisation Helper Functions */ - ///*---------------------------------------------------------------------------------*/ - //void ReflectionUtilities::serialiseFieldJson(FieldInfo^ fieldInfo, Object^ object, JsonWriter& writer) - //{ - // if PRIMITIVE_FIELD_SERIALISE_JSON(Int16, Int) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(Int32, Int) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(Int64, Int64) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt16, Uint) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt32, Uint) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(UInt64, Uint64) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(Byte, Int) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(bool, Bool) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(float, Double) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(double, Double) - // else if PRIMITIVE_FIELD_SERIALISE_JSON(double, Double) - // else if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) - // { - // PRIMITIVE_WRITE_FIELD_NAME - // writer.Int(safe_cast(fieldInfo->GetValue(object))); - - // } - // else if (fieldInfo->FieldType == String::typeid) - // { - // PRIMITIVE_WRITE_FIELD_NAME - // writer.String(Convert::ToNative(safe_cast(fieldInfo->GetValue(object))).c_str()); - - // } - // else if (fieldInfo->FieldType == Vector2::typeid) - // { - // // Get handle to the Vector to edit - // Vector2 vec = safe_cast(fieldInfo->GetValue(object)); - - // // Write the vector data - // PRIMITIVE_WRITE_FIELD_NAME - // writer.StartObject(); - // { - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(x) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(y) - // } - // writer.EndObject(); - // } - // else if (fieldInfo->FieldType == Vector3::typeid) - // { - // // Get handle to the Vector to edit - // Vector3 vec = safe_cast(fieldInfo->GetValue(object)); - - // // Write the vector data - // PRIMITIVE_WRITE_FIELD_NAME - // writer.StartObject(); - // { - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(x) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(y) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(z) - // } - // writer.EndObject(); - // } - // else if (fieldInfo->FieldType == Color::typeid) - // { - // // Get handle to the Vector to edit - // Color vec = safe_cast(fieldInfo->GetValue(object)); - - // // Write the vector data - // PRIMITIVE_WRITE_FIELD_NAME - // writer.StartObject(); - // { - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(r) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(g) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(b) - // PRIMITIVE_VECTOR_FIELD_SERIALISE_JSON(a) - // } - // writer.EndObject(); - // } - // else if (IResourceID::typeid->IsAssignableFrom(fieldInfo->FieldType)) - // { - // PRIMITIVE_WRITE_FIELD_NAME - // IResourceID^ rsc = safe_cast(fieldInfo->GetValue(object)); - // writer.Int64(rsc->Id); - // } - // else // Not any of the supported types - // { - // Pls::Debug::LogWarning(Convert::ToNative(String::Format - // ( - // "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialisation.", - // fieldInfo->Name, fieldInfo->FieldType) - // )); - // } - //} + void ReflectionUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + if (fieldInfo->FieldType == System::Int16::typeid) + { + fieldInfo->SetValue(object, node.as()); + } + if (fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node)) + { + return; + } + else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) + { + fieldInfo->SetValue(object, node.as()); + } + else if (fieldInfo->FieldType == System::String::typeid) + { + fieldInfo->SetValue(object, Convert::ToCLI(node.as())); + } + else if (fieldInfo->FieldType == Vector2::typeid) + { + if (node.IsSequence() && node.size() == 2) + { + Vector2 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + fieldInfo->SetValue(object, vec); + } + else + { + Debug::LogWarning + ( + System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of a Vector2 \"{0}\" field in \"{1}\" script.", + fieldInfo->Name, object->GetType()->FullName) + ); + } + } + else if (fieldInfo->FieldType == Vector3::typeid) + { + if (node.IsSequence() && node.size() == 3) + { + Vector3 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + vec.z = node[2].as(); + fieldInfo->SetValue(object, vec); + } + else + { + Debug::LogWarning + ( + System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of a Vector3 \"{0}\" field in \"{1}\" script.", + fieldInfo->Name, object->GetType()->FullName) + ); + } + } + else // Not any of the supported types + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", + fieldInfo->Name, fieldInfo->FieldType) + )); + } + } } diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ new file mode 100644 index 00000000..88469b34 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ @@ -0,0 +1,54 @@ +/************************************************************************************//*! +\file ReflectionUtilities.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 16, 2022 +\brief Contains the definition of the template functions of the managed + ReflectionUtilities static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Header +#include "ReflectionUtilities.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + template + bool ReflectionUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Emitter& emitter) + { + if (fieldInfo->FieldType == FieldType::typeid) + { + emitter << safe_cast(fieldInfo->GetValue(object)); + return true; + } + + return false; + } + + template + bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + return fieldAssignYaml(fieldInfo, object, node); + } + + template + bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + if (fieldInfo->FieldType == FieldType::typeid) + { + fieldInfo->SetValue(object, node.as()); + return true; + } + + return false; + } +} diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index f312ec05..53f8fa1d 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -14,9 +14,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include -#include - +#include namespace SHADE { @@ -26,10 +24,6 @@ namespace SHADE private ref class ReflectionUtilities abstract sealed { public: - /*-----------------------------------------------------------------------------*/ - /* Type Definitions */ - /*-----------------------------------------------------------------------------*/ - /*-----------------------------------------------------------------------------*/ /* Utility Functions */ /*-----------------------------------------------------------------------------*/ @@ -58,16 +52,30 @@ namespace SHADE /// attribute will be serialised. /// /// The object to serialise. - //static void Serialise(Object^ object, YAML::Emitter& yaml); + static void Serialise(System::Object^ object, YAML::Emitter& yaml); /// - /// Deserialises a JSON string and copies the deserialised data into the - /// specified object if there are matching fields. + /// Deserialises a YAML node that contains a map of Scripts and copies the + /// deserialised data into the specified object if there are matching fields. /// - /// + /// /// The JSON string that contains the data to copy into this PlushieScript /// object. /// /// The object to copy deserialised data into. - //static void Deserialise(System::String^ jsonString, Object^ object); + static void Deserialise(YAML::Node& yamlNode, Object^ object); + + /*-----------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Emitter& yaml); + template + static bool fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Emitter& emitter); + static void writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + template + static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + template + static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); }; -} \ No newline at end of file +} + +#include "ReflectionUtilities.h++" \ No newline at end of file From 0f63ee10d07ce2d06816d070b5b19dbf3952c897 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 16:37:50 +0800 Subject: [PATCH 093/793] Converted SHScriptEngine into a SHSystem --- .../src/Application/SBApplication.cpp | 6 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 29 ++------ SHADE_Engine/src/Scripting/SHScriptEngine.h | 73 ++++++++++--------- 3 files changed, 43 insertions(+), 65 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index f4c76db7..a89ea833 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -37,7 +37,7 @@ namespace Sandbox SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); SHADE::SHSystemManager::RegisterRoutine(1); - + SHADE::SHSystemManager::CreateSystem(); graphicsSystem->SetWindow(&window); SDL_CreateWindowFrom(window.GetHWND()); @@ -47,9 +47,6 @@ namespace Sandbox //SHADE::SHEditor::Initialize(window.GetHWND()); #else #endif - - // Set up scripting - SHADE::SHScriptEngine::Init(); } void SBApplication::Update(void) @@ -76,7 +73,6 @@ namespace Sandbox void SBApplication::Exit(void) { - SHADE::SHScriptEngine::Exit(); SHADE::SHSystemManager::Exit(); SDL_DestroyWindow(sdlWindow); #ifdef SHEDITOR diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index b5a33c6d..c5490b1e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -26,25 +26,6 @@ namespace SHADE /* Static Definitions */ /*--------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); - SHDotNetRuntime SHScriptEngine::dotNet { false }; - SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineInit = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineLoadScripts = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineUnloadScripts = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineReloadScripts = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csEngineExit = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsFrameSetUp = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteFixedUpdate = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteUpdate = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsExecuteLateUpdate = nullptr; - SHScriptEngine::CsFuncPtr SHScriptEngine::csScriptsFrameCleanUp = nullptr; - SHScriptEngine::CsScriptManipFuncPtr SHScriptEngine::csScriptsAdd = nullptr; - SHScriptEngine::CsScriptBasicFuncPtr SHScriptEngine::csScriptsRemoveAll = nullptr; - SHScriptEngine::CsScriptOptionalFuncPtr SHScriptEngine::csScriptsRemoveAllImmediately = nullptr; - SHScriptEngine::CsScriptSerialiseFuncPtr SHScriptEngine::csScriptsSerialise = nullptr; - SHScriptEngine::CsScriptDeserialiseFuncPtr SHScriptEngine::csScriptDeserialise = nullptr; - SHScriptEngine::CsScriptSerialiseYamlFuncPtr SHScriptEngine::csScriptsSerialiseYaml = nullptr; - SHScriptEngine::CsScriptSerialiseYamlFuncPtr SHScriptEngine::csScriptDeserialiseYaml = nullptr; - SHScriptEngine::CsScriptEditorFuncPtr SHScriptEngine::csEditorRenderScripts = nullptr; /*---------------------------------------------------------------------------------*/ /* Lifecycle Functions */ @@ -137,7 +118,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) + std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) const { // Create buffer needed to store serialised script data constexpr int BUFFER_SIZE = 10240; @@ -162,7 +143,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) + void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) const { csScriptDeserialise(entity.GetEID(), yaml.c_str()); } @@ -170,7 +151,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Editor Functions */ /*---------------------------------------------------------------------------------*/ - void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) + void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) const { csEditorRenderScripts(entity.GetEID()); } @@ -178,7 +159,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Static Utility Functions */ /*---------------------------------------------------------------------------------*/ - bool SHScriptEngine::BuildScriptAssembly(bool debug) + bool SHScriptEngine::BuildScriptAssembly(bool debug) const { constexpr std::string_view BUILD_LOG_PATH = "../Build.log"; @@ -230,7 +211,7 @@ namespace SHADE return BUILD_SUCCESS; } - void SHScriptEngine::GenerateScriptsCsProjFile(const std::filesystem::path& path) + void SHScriptEngine::GenerateScriptsCsProjFile(const std::filesystem::path& path) const { // Sample static std::string_view FILE_CONTENTS = diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 442c0053..4988f594 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -18,6 +18,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHDotNetRuntime.h" #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/Entity/SHEntity.h" +#include "ECS_Base/System/SHSystem.h" #include "SH_API.h" namespace SHADE @@ -26,13 +27,13 @@ namespace SHADE /// Manages initialisation of the DotNetRuntime and interfacing with CLR code written /// and executed on .NET. /// - class SH_API SHScriptEngine + class SH_API SHScriptEngine : public SHSystem { public: /*-----------------------------------------------------------------------------*/ /* Constructor */ /*-----------------------------------------------------------------------------*/ - SHScriptEngine() = delete; + SHScriptEngine() = default; /*-----------------------------------------------------------------------------*/ /* Lifecycle Functions */ @@ -41,33 +42,33 @@ namespace SHADE /// Initialises the DotNetRuntime and retrieves function pointers to all /// functions on the CLR used to interface with the engine. /// - static void Init(); + void Init() override; /// /// Loads the managed script assembly. Ensure this is only called after /// UnloadScriptAssembly() has been called. /// - static void UnloadScriptAssembly(); + void UnloadScriptAssembly(); /// /// Unloads the managed script assembly. /// Take note that this will clear all existing scripts, ensure that the scene /// is saved before doing so. /// - static void LoadScriptAssembly(); + void LoadScriptAssembly(); /// /// Reloads the managed script assembly. /// Take note that this will clear all existing scripts, ensure that the scene /// is saved before doing so. /// - static void ReloadScriptAssembly(); + void ReloadScriptAssembly(); /// /// Executes the FixedUpdate()s of the Scripts that are attached to /// Entities. /// - static void ExecuteFixedUpdates(); + void ExecuteFixedUpdates(); /// /// Shuts down the DotNetRuntime. /// - static void Exit(); + void Exit() override; /*-----------------------------------------------------------------------------*/ /* Script Manipulation Functions */ @@ -84,14 +85,14 @@ namespace SHADE /// True if successfully added. False otherwise with the error logged to the /// console. /// - static bool AddScript(const SHEntity& entity, const std::string_view& scriptName); + bool AddScript(const SHEntity& entity, const std::string_view& scriptName); /// /// Removes all Scripts attached to the specified Entity. Does not do anything /// if the specified Entity is invalid or does not have any Scripts /// attached. /// /// The entity to remove the scripts from. - static void RemoveAllScripts(const SHEntity& entity); + void RemoveAllScripts(const SHEntity& entity); /// /// Removes all Scripts attached to the specified Entity. Unlike /// RemoveAllScripts(), this removes all the scripts immediately. @@ -103,7 +104,7 @@ namespace SHADE /// Whether or not to call OnDestroy on the scripts. This is ignored if not in /// play mode. /// - static void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy); + void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy); /*-----------------------------------------------------------------------------*/ /* Script Serialisation Functions */ @@ -116,7 +117,7 @@ namespace SHADE /// /// String that represents the set of scripts attached to the specified Entity. /// - static std::string SerialiseScripts(const SHEntity& entity); + std::string SerialiseScripts(const SHEntity& entity) const; /// /// Loads the specified JSON string and creates a Script for the specified Entity /// based on the specified JSON string. @@ -125,7 +126,7 @@ namespace SHADE /// /// The YAML string that represents the Script to load into the Entity. /// - static void DeserialiseScript(const SHEntity& entity, const std::string& yaml); + void DeserialiseScript(const SHEntity& entity, const std::string& yaml) const; /*-----------------------------------------------------------------------------*/ /* Script Editor Functions */ @@ -138,7 +139,7 @@ namespace SHADE /// rendering code. /// /// The Entity to render the Scripts of. - static void RenderScriptsInInspector(const SHEntity& entity); + void RenderScriptsInInspector(const SHEntity& entity) const; /*-----------------------------------------------------------------------------*/ /* Static Utility Functions */ @@ -153,12 +154,12 @@ namespace SHADE /// can be debugged. /// /// Whether or not the build succeeded. - static bool BuildScriptAssembly(bool debug = false); + bool BuildScriptAssembly(bool debug = false) const; /// /// Generates a .csproj file for editing and compiling the C# scripts. /// /// File path to the generated file. - static void GenerateScriptsCsProjFile(const std::filesystem::path& path); + void GenerateScriptsCsProjFile(const std::filesystem::path& path) const; private: /*-----------------------------------------------------------------------------*/ @@ -183,29 +184,29 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - static SHDotNetRuntime dotNet; + SHDotNetRuntime dotNet { false }; // Function Pointers to CLR Code // - Engine Lifecycle - static CsFuncPtr csEngineInit; - static CsFuncPtr csEngineLoadScripts; - static CsFuncPtr csEngineUnloadScripts; - static CsFuncPtr csEngineReloadScripts; - static CsFuncPtr csEngineExit; + CsFuncPtr csEngineInit = nullptr; + CsFuncPtr csEngineLoadScripts = nullptr; + CsFuncPtr csEngineUnloadScripts = nullptr; + CsFuncPtr csEngineReloadScripts = nullptr; + CsFuncPtr csEngineExit = nullptr; // - Scripts Store - static CsFuncPtr csScriptsFrameSetUp; - static CsFuncPtr csScriptsExecuteFixedUpdate; - static CsFuncPtr csScriptsExecuteUpdate; - static CsFuncPtr csScriptsExecuteLateUpdate; - static CsFuncPtr csScriptsFrameCleanUp; - static CsScriptManipFuncPtr csScriptsAdd; - static CsScriptBasicFuncPtr csScriptsRemoveAll; - static CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately; - static CsScriptSerialiseFuncPtr csScriptsSerialise; - static CsScriptDeserialiseFuncPtr csScriptDeserialise; - static CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml; - static CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml; + CsFuncPtr csScriptsFrameSetUp = nullptr; + CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; + CsFuncPtr csScriptsExecuteUpdate = nullptr; + CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsFrameCleanUp = nullptr; + CsScriptManipFuncPtr csScriptsAdd = nullptr; + CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; + CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; + CsScriptSerialiseFuncPtr csScriptsSerialise = nullptr; + CsScriptDeserialiseFuncPtr csScriptDeserialise = nullptr; + CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr; + CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml = nullptr; // - Editor - static CsScriptEditorFuncPtr csEditorRenderScripts; + CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; // Delegates /*ECS::EntityEvent::Delegate onEntityCreate; ECS::EntityEvent::Delegate onEntityDestroy;*/ @@ -216,7 +217,7 @@ namespace SHADE /// /// Loads all the function pointers to CLR code that we need to execute. /// - static void loadFunctions(); + void loadFunctions(); /// /// Reads the file via the specified path that represents a build log of error /// and warning messages. From eb8cbaeebb47be0ebcf7797d83c04af9e3db7603 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 16 Sep 2022 16:40:42 +0800 Subject: [PATCH 094/793] init vulkan for imgui --- .../src/Application/SBApplication.cpp | 31 ++++++----- SHADE_Engine/src/Editor/SHEditor.cpp | 52 ++++++++++++++++--- SHADE_Engine/src/Editor/SHEditor.h | 14 ++++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 16 +++--- .../MiddleEnd/Interface/SHGraphicsSystem.h | 1 + .../src/Graphics/Queues/SHVkQueue.cpp | 5 ++ SHADE_Engine/src/Graphics/Queues/SHVkQueue.h | 1 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 5 ++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 2 +- 9 files changed, 99 insertions(+), 28 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index fb6fd803..279ee81e 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -4,7 +4,7 @@ #define SHEDITOR #ifdef SHEDITOR -//#include "Editor/SHEditor.h" +#include "Editor/SHEditor.h" //#include "Scenes/SBEditorScene.h" #endif // SHEDITOR @@ -14,6 +14,7 @@ #include #include #include +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN 1 #include #include "Scripting/SHScriptEngine.h" @@ -40,11 +41,13 @@ namespace Sandbox graphicsSystem->SetWindow(&window); - SDL_CreateWindowFrom(window.GetHWND()); + sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); + //auto [w, h] = window.GetWindowSize(); + //SDL_SetWindowSize(sdlWindow, w, h); SHADE::SHSystemManager::Init(); #ifdef SHEDITOR - //SHADE::SHEditor::Initialize(window.GetHWND()); + SHADE::SHEditor::Initialise(sdlWindow); #else #endif @@ -60,15 +63,18 @@ namespace Sandbox while (!window.WindowShouldClose()) { //#ifdef SHEDITOR - //SHADE::SHEditor::PreRender(); //#endif graphicsSystem->BeginRender(); - graphicsSystem->Run(1.0f); - //#ifdef SHEDITOR - //SHADE::SHEditor::PreRender(); - //SHADE::SHEditor::Update(); + + #ifdef SHEDITOR + SHADE::SHEditor::PreRender(); //SHADE::SHEditor::Render(); - //#endif + #endif + + #ifdef SHEDITOR + SHADE::SHEditor::Render(); + #endif + graphicsSystem->Run(1.0f); graphicsSystem->EndRender(); } } @@ -76,13 +82,14 @@ namespace Sandbox void SBApplication::Exit(void) { + #ifdef SHEDITOR + SHADE::SHEditor::Exit(); + #endif + SHADE::SHScriptEngine::Exit(); SHADE::SHSystemManager::Exit(); SDL_DestroyWindow(sdlWindow); SDL_Quit(); - #ifdef SHEDITOR - #else - #endif } } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index f4fa5158..91fc750b 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -3,31 +3,63 @@ #include +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/Instance/SHVkInstance.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/Swapchain/SHVkSwapchain.h" + //IMGUI Backend includes #include #include - -#include "ECS_Base/System/SHSystemManager.h" -#include "Graphics/Instance/SHVkInstance.h" -#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" - namespace SHADE { + Handle SHEditor::imguiCommandPool; + Handle SHEditor::imguiCommandBuffer; + void SHEditor::Initialise(SDL_Window* sdlWindow) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); (void)io; + + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; + ImGui_ImplSDL2_InitForVulkan(sdlWindow); - auto* gfxSystem = reinterpret_cast(SHSystemManager::GetSystem("Graphics System")); + auto* gfxSystem = reinterpret_cast(SHSystemManager::GetSystem()); ImGui_ImplVulkan_InitInfo initInfo{}; initInfo.Instance = SHVkInstance::GetVkInstance(); - initInfo.PhysicalDevice = + initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice(); + initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice(); + initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue(); + initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle(); + initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages(); + initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; + + imguiCommandPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + imguiCommandBuffer = imguiCommandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + + auto renderPass = gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetRenderpass(); + ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass()); + + imguiCommandBuffer->BeginRecording(); + ImGui_ImplVulkan_CreateFontsTexture(imguiCommandBuffer->GetVkCommandBuffer()); + imguiCommandBuffer->EndRecording(); ImGui_ImplVulkan_DestroyFontUploadObjects(); + gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { + ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); + }); + + //ImGuiIO& io = ImGui::GetIO(); + //int w, h; + //SDL_GetWindowSize(sdlWindow, &w, &h); + //io.DisplaySize = { static_cast(w),static_cast(h)}; } void SHEditor::PreRender() @@ -40,6 +72,12 @@ namespace SHADE void SHEditor::Render() { ImGui::Render(); + ImGuiIO& io = ImGui::GetIO(); + if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } } void SHEditor::Exit() diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index d9f726a6..18ce92c1 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -1,10 +1,17 @@ #pragma once +#include "SH_API.h" #include +#include "Resource/Handle.h" + + namespace SHADE { - class SHEditor + class SHVkCommandBuffer; + class SHVkCommandPool; + + class SH_API SHEditor { public: static void Initialise(SDL_Window* sdlWindow); @@ -15,5 +22,8 @@ namespace SHADE static void InitBackend(); static void NewFrame(); static void EndFrame(); + + static Handle imguiCommandPool; + static Handle imguiCommandBuffer; }; -} \ No newline at end of file +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 573e1905..bb5bfc8b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -104,15 +104,19 @@ namespace SHADE // First subpass to write to G-Buffer auto writeSubpass = node->AddSubpass("G-Buffer Write"); writeSubpass->AddColorOutput("Position"); - writeSubpass->AddColorOutput("Present"); + //writeSubpass->AddColorOutput("Present"); // Second subpass to read from G-Buffer - auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); - compositeSubpass->AddColorOutput("Composite"); - compositeSubpass->AddInput("Normals"); - compositeSubpass->AddInput("Position"); + //auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); + // compositeSubpass->AddColorOutput("Composite"); + // compositeSubpass->AddInput("Normals"); + // compositeSubpass->AddInput("Position"); - //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present" }, { "G-Buffer" }); + auto imguiNode = renderGraph.AddNode("ImGui Node", { "Present" }, {}); // no predecessors + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); + + //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present" }, { "G-Buffer" }); //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); //bloomSubpass->AddInput("Composite"); //bloomSubpass->AddColorOutput("Downscale"); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index d5d71450..bd1ccc9b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -147,6 +147,7 @@ namespace SHADE SHRenderContext renderContext; //std::array, NUM_FRAME_BUFFERS> frameBuffers; //std::array, NUM_FRAME_BUFFERS> commandBuffers; + // Not Owned Resources SHWindow* window; // Renderers diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp index 6ed6def6..828f2974 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp @@ -124,4 +124,9 @@ namespace SHADE return result; } + vk::Queue SHVkQueue::GetVkQueue() noexcept + { + return vkQueue; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h index 042bc4bb..9d865ee9 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h @@ -49,6 +49,7 @@ namespace SHADE void SubmitCommandBuffer (std::initializer_list> cmdBuffers, std::initializer_list> signalSems = {}, std::initializer_list> waitSems = {}, vk::PipelineStageFlags waitDstStageMask = {}, Handle const& fence = {}) noexcept; vk::Result Present (Handle const& swapchain, std::initializer_list> waitSems, uint32_t frameIndex) noexcept; + vk::Queue GetVkQueue() noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index a2647b74..41633e55 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -583,6 +583,11 @@ namespace SHADE return renderpass; } + Handle SHRenderGraphNode::GetSubpass(std::string_view subpassName) const noexcept + { + return subpasses[subpassIndexing.at(subpassName.data())]; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 719c2d46..fb843bc2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -215,7 +215,7 @@ namespace SHADE /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ Handle GetRenderpass (void) const noexcept; - + Handle GetSubpass(std::string_view subpassName) const noexcept; friend class SHRenderGraph; }; From c83a5a379e2a16d054ee7c9877478355476ab512 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 16 Sep 2022 17:02:36 +0800 Subject: [PATCH 095/793] Added Awake, Start, Update, LateUpdate, OnDestroy calls via SystemRoutines --- .../src/Application/SBApplication.cpp | 12 +++- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 3 +- .../src/ECS_Base/System/SHSystemRoutine.h | 3 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 1 - SHADE_Engine/src/Scripting/SHScriptEngine.h | 31 ++++++++- .../src/Scripting/SHScriptEngineRoutines.cpp | 63 +++++++++++++++++++ 6 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index a89ea833..8f17863f 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -34,11 +34,19 @@ namespace Sandbox SDL_Init(SDL_INIT_VIDEO); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); + + // Create Systems SHADE::SHSystemManager::CreateSystem(); - SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::RegisterRoutine(1); SHADE::SHSystemManager::CreateSystem(); + // Create Routines + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(1); + SHADE::SHSystemManager::RegisterRoutine(); + + SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); graphicsSystem->SetWindow(&window); SDL_CreateWindowFrom(window.GetHWND()); diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 19b16f72..93ea6a59 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -11,13 +11,14 @@ #pragma once #include "../SHECSMacros.h" +#include "SH_API.h" namespace SHADE { class SHSystemManager; - class SHSystem + class SH_API SHSystem { private: SystemID systemID; diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h index cdb62438..2b6d8dc1 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -7,6 +7,7 @@ #include "SHRoutineStats.h" #include "SHSystem.h" #include +#include "SH_API.h" namespace SHADE @@ -15,7 +16,7 @@ namespace SHADE class SHSystemManager; - class SHSystemRoutine + class SH_API SHSystemRoutine { friend class SHSystemManager; protected: diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index c5490b1e..78b4d544 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -483,5 +483,4 @@ namespace SHADE } } } - } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 4988f594..f3d69dd5 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -19,6 +19,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/Entity/SHEntity.h" #include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHSystemRoutine.h" #include "SH_API.h" namespace SHADE @@ -27,9 +28,37 @@ namespace SHADE /// Manages initialisation of the DotNetRuntime and interfacing with CLR code written /// and executed on .NET. /// - class SH_API SHScriptEngine : public SHSystem + class SH_API SHScriptEngine final : public SHSystem { public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + class SH_API FrameSetUpRoutine final : public SHSystemRoutine + { + public: + FrameSetUpRoutine(); + void Execute(double dt) noexcept override final; + }; + class SH_API UpdateRoutine final : public SHSystemRoutine + { + public: + UpdateRoutine(); + void Execute(double dt) noexcept override final; + }; + class SH_API LateUpdateRoutine final : public SHSystemRoutine + { + public: + LateUpdateRoutine(); + void Execute(double dt) noexcept override final; + }; + class SH_API FrameCleanUpRoutine final : public SHSystemRoutine + { + public: + FrameCleanUpRoutine(); + void Execute(double dt) noexcept override final; + }; + /*-----------------------------------------------------------------------------*/ /* Constructor */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp new file mode 100644 index 00000000..5467fc56 --- /dev/null +++ b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp @@ -0,0 +1,63 @@ +/************************************************************************************//*! +\file SHScriptEngineRoutines.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2021 +\brief Contains the implementation or functions of SystemRoutines in the + SHScriptEngine class. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include +// Primary Header +#include "SHScriptEngine.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - FrameSetUpRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHScriptEngine::FrameSetUpRoutine::FrameSetUpRoutine() + : SHSystemRoutine("Script Engine Frame Set Up", false) + {} + void SHScriptEngine::FrameSetUpRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->csScriptsFrameSetUp(); + } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - UpdateRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHScriptEngine::UpdateRoutine::UpdateRoutine() + : SHSystemRoutine("Script Engine Update", false) + {} + void SHScriptEngine::UpdateRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->csScriptsExecuteUpdate(); + } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - LateUpdateRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHScriptEngine::LateUpdateRoutine::LateUpdateRoutine() + : SHSystemRoutine("Script Engine Late Update", false) + {} + void SHScriptEngine::LateUpdateRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->csScriptsExecuteLateUpdate(); + } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - FrameCleanUpRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHScriptEngine::FrameCleanUpRoutine::FrameCleanUpRoutine() + : SHSystemRoutine("Script Engine Frame Clean Up", false) + {} + void SHScriptEngine::FrameCleanUpRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->csScriptsFrameCleanUp(); + } +} From 2f2567044a63b23cfae8abe00458d6dc97aea1f5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 16 Sep 2022 17:28:27 +0800 Subject: [PATCH 096/793] Submitted command buffer :D --- SHADE_Application/src/Application/SBApplication.cpp | 2 +- SHADE_Engine/src/Editor/SHEditor.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 279ee81e..4216ba03 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -33,7 +33,7 @@ namespace Sandbox // Set working directory SHADE::SHFileUtilities::SetWorkDirToExecDir(); - SDL_Init(SDL_INIT_VIDEO); + SDL_Init(SDL_INIT_EVERYTHING); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 91fc750b..6d0f1a28 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -49,6 +49,7 @@ namespace SHADE imguiCommandBuffer->BeginRecording(); ImGui_ImplVulkan_CreateFontsTexture(imguiCommandBuffer->GetVkCommandBuffer()); imguiCommandBuffer->EndRecording(); + gfxSystem->GetQueue()->SubmitCommandBuffer({imguiCommandBuffer}, {}, {}, vk::PipelineStageFlagBits::eNone, {}); ImGui_ImplVulkan_DestroyFontUploadObjects(); @@ -67,6 +68,12 @@ namespace SHADE NewFrame(); ImGui::ShowDemoWindow(); + ImGui::Begin("Your mom"); + if (ImGui::Button("OP")) + { + std::cout << "HEHEHEOHEIOHIEOH\n"; + } + ImGui::End(); } void SHEditor::Render() From 5171ddd2bf2a2d6fcaddfb9c7ef848e246393f25 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 17 Sep 2022 03:20:24 +0800 Subject: [PATCH 097/793] Added SHLog class and changed Debug::Log to use SHLog --- SHADE_Engine/src/Tools/SHLog.cpp | 54 +++++++++++++++++++++++++++++ SHADE_Engine/src/Tools/SHLog.h | 48 +++++++++++++++++++++++++ SHADE_Managed/src/Utility/Debug.cxx | 30 ++++++++-------- 3 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 SHADE_Engine/src/Tools/SHLog.cpp create mode 100644 SHADE_Engine/src/Tools/SHLog.h diff --git a/SHADE_Engine/src/Tools/SHLog.cpp b/SHADE_Engine/src/Tools/SHLog.cpp new file mode 100644 index 00000000..2d0b7b58 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHLog.cpp @@ -0,0 +1,54 @@ +/************************************************************************************//*! +\file SHLog.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the definition of functions of the SHLog static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include "SHpch.h" +// Primary Header +#include "SHLog.h" +// Project Includes +#include "SHLogger.h" + +namespace SHADE +{ + void SHLog::Info(const std::string& msg) noexcept + { + SHLOG_INFO(msg) + } + + void SHLog::Warning(const std::string& msg) noexcept + { + SHLOG_WARNING(msg) + } + + + void SHLog::Error(const std::string& msg) noexcept + { + SHLOG_ERROR(msg) + } + + void SHLog::Critical(const std::string& msg) noexcept + { + SHLOG_CRITICAL(msg) + } + + void SHLog::Floor() noexcept + { + SHLOG_FLOOR() + } + +#ifdef _DEBUG + void SHLog::Trace(const std::string& msg) noexcept + { + SHLOG_TRACE(msg) + } +#endif + +} diff --git a/SHADE_Engine/src/Tools/SHLog.h b/SHADE_Engine/src/Tools/SHLog.h new file mode 100644 index 00000000..b77042db --- /dev/null +++ b/SHADE_Engine/src/Tools/SHLog.h @@ -0,0 +1,48 @@ +/************************************************************************************//*! +\file SHLog.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the SHLog static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ + +// Standard Library +#include +// Project Headers +#include "SH_API.h" + +namespace SHADE +{ + /*!************************************************************************************ + + \class SHLog + + \brief + Static class that contains wrapper functions for SHLogger's macros. + + **************************************************************************************/ + class SH_API SHLog + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + SHLog() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Logging Functions */ + /*---------------------------------------------------------------------------------*/ + static void Info(const std::string& msg) noexcept; + static void Warning(const std::string& msg) noexcept; + static void Error(const std::string& msg) noexcept; + static void Critical(const std::string& msg) noexcept; + static void Floor() noexcept; +#ifdef _DEBUG + static void Trace(const std::string& msg) noexcept; +#endif + }; +} diff --git a/SHADE_Managed/src/Utility/Debug.cxx b/SHADE_Managed/src/Utility/Debug.cxx index 330375b0..8a107ab3 100644 --- a/SHADE_Managed/src/Utility/Debug.cxx +++ b/SHADE_Managed/src/Utility/Debug.cxx @@ -18,6 +18,8 @@ of DigiPen Institute of Technology is prohibited. #include "Debug.hxx" // Standard Libraries #include +// External Libraries +#include "Tools/SHLog.h" // Project Headers #include "Convert.hxx" @@ -28,11 +30,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void Debug::Log(const std::string& str) { - std::cout << str << std::endl; + SHLog::Info(str); } void Debug::Log(System::String^ str) - { - System::Console::WriteLine(str); + { + SHLog::Info(Convert::ToNative(str)); } void Debug::Log(System::String^ str, Object^ owner) @@ -47,15 +49,15 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] " << Convert::ToNative(str); - std::cout << oss.str() << std::endl; + Log(oss.str()); } void Debug::LogWarning(const std::string& str) { - std::cout << str << std::endl; + SHLog::Warning(str); } void Debug::LogWarning(System::String^ str) - { - System::Console::WriteLine(str); + { + SHLog::Warning(Convert::ToNative(str)); } void Debug::LogWarning(System::String^ str, Object^ thrower) { @@ -69,16 +71,16 @@ namespace SHADE void Debug::LogWarning(System::String^ str, const std::string& throwerName) { std::ostringstream oss; - oss << "[" << throwerName << "] " << Convert::ToNative(str); - std::cout << oss.str() << std::endl; + oss << "[" << throwerName << "] " << Convert::ToNative(str); + LogWarning(oss.str()); } void Debug::LogError(const std::string& str) { - std::cout << str << std::endl; + SHLog::Error(str); } void Debug::LogError(System::String^ str) { - System::Console::WriteLine(str); + SHLog::Error(Convert::ToNative(str)); } void Debug::LogError(System::String^ str, Object^ thrower) { @@ -88,7 +90,7 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] -> " << Convert::ToNative(str); - std::cout << oss.str() << std::endl; + LogError(oss.str()); } void Debug::LogError(System::String^ str, System::String^ throwerName) { @@ -111,12 +113,12 @@ namespace SHADE { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << Convert::ToNative(exception->ToString()); - std::cout << oss.str() << std::endl; + LogError(oss.str()); } void Debug::LogExceptionNative(const std::exception& exception, const std::string& throwerName) { std::ostringstream oss; oss << "[" << throwerName << "] Unhandled exception: " << exception.what(); - std::cout << oss.str() << std::endl; + LogError(oss.str()); } } From 3766a10edd878a7c5d20b37dcbbfe591a1ef7251 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 17 Sep 2022 22:28:03 +0800 Subject: [PATCH 098/793] WIP --- .../src/Application/SBApplication.cpp | 6 +- .../Graphics/Commands/SHVkCommandBuffer.cpp | 2 +- .../src/Graphics/Commands/SHVkCommandBuffer.h | 2 +- .../src/Graphics/Images/SHVkImage.cpp | 3 +- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 2 +- .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 151 ++++++ .../Graphics/MiddleEnd/Interface/SHCamera.h | 80 +++ .../MiddleEnd/Interface/SHGraphicsConstants.h | 82 +++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 485 +++++++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 251 +++++---- .../MiddleEnd/Interface/SHMaterial.cpp | 67 +++ .../Graphics/MiddleEnd/Interface/SHMaterial.h | 75 +++ .../MiddleEnd/Interface/SHMaterial.hpp | 59 +++ .../Interface/SHMaterialInstance.cpp | 62 +++ .../MiddleEnd/Interface/SHMaterialInstance.h | 82 +++ .../Interface/SHMaterialInstance.hpp | 85 +++ .../MiddleEnd/Interface/SHMeshLibrary.cpp | 201 ++++++++ .../MiddleEnd/Interface/SHMeshLibrary.h | 187 +++++++ .../MiddleEnd/Interface/SHRenderTarget.cpp | 2 +- .../MiddleEnd/Interface/SHRenderable.cpp | 49 ++ .../MiddleEnd/Interface/SHRenderable.h | 60 +++ .../MiddleEnd/Interface/SHRenderer.cpp | 57 ++ .../Graphics/MiddleEnd/Interface/SHRenderer.h | 81 +++ .../MiddleEnd/Interface/SHViewport.cpp | 74 +++ .../Graphics/MiddleEnd/Interface/SHViewport.h | 81 +++ .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 52 ++ .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 57 ++ .../Pipeline/SHPipelineLayoutParams.h | 2 +- .../src/Graphics/Pipeline/SHPipelineState.h | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 2 +- .../BlockInterface/SHShaderBlockInterface.cpp | 50 +- .../BlockInterface/SHShaderBlockInterface.h | 8 +- 32 files changed, 2131 insertions(+), 328 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 4216ba03..5420e8c5 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -2,7 +2,7 @@ #include "SBApplication.h" #include "ECS_Base/Managers/SHSystemManager.h" -#define SHEDITOR +//#define SHEDITOR #ifdef SHEDITOR #include "Editor/SHEditor.h" //#include "Scenes/SBEditorScene.h" @@ -76,7 +76,9 @@ namespace Sandbox #endif graphicsSystem->Run(1.0f); graphicsSystem->EndRender(); - } + + SHADE::SHSystemManager::RunRoutines(false, 0.016f); + } } diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index f83087dd..b0139f8e 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -255,7 +255,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkCommandBuffer::SetviewportScissor(float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX /*= 0.0f*/, float vpY /*= 0.0f*/, int32_t sX /*= 0.0f*/, int32_t sY /*= 0.0f*/, float vpMinDepth /*= 0.0f*/, float vpMaxDepth /*= 1.0f*/) noexcept + void SHVkCommandBuffer::SetViewportScissor(float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX /*= 0.0f*/, float vpY /*= 0.0f*/, int32_t sX /*= 0.0f*/, int32_t sY /*= 0.0f*/, float vpMinDepth /*= 0.0f*/, float vpMaxDepth /*= 1.0f*/) noexcept { vk::Viewport dynamicViewport { diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 948092bf..888b805a 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -104,7 +104,7 @@ namespace SHADE void NextSubpass (void) noexcept; // Dynamic State - void SetviewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; + void SetViewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; // Binding Commands void BindPipeline (Handle const& pipelineHdl) noexcept; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index f3d5a7b5..6ec1c9f2 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -234,7 +234,7 @@ namespace SHADE return SHVkInstance::GetResourceManager().Create(inLogicalDeviceHdl, parent, createParams); } - void SHVkImage::TransferToDeviceResource(Handle const& cmdBufferHdl) noexcept + void SHVkImage::TransferToDeviceResource(void) noexcept { // prepare copy regions std::vector copyRegions{mipOffsets.size()}; @@ -252,6 +252,7 @@ namespace SHADE copyRegions[i].imageExtent = vk::Extent3D{ width >> i, height >> i, 1 }; } + //PrepareImageTransition(); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index a30b90e6..eec8dc7e 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -135,7 +135,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; - void TransferToDeviceResource (Handle const& cmdBufferHdl) noexcept; + void TransferToDeviceResource (void) noexcept; void PrepareImageTransition (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp new file mode 100644 index 00000000..2f8fb9ea --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -0,0 +1,151 @@ +/************************************************************************************//*! +\file SHCamera.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHCamera.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* View Set Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up) + { + const SHVec3 VIEW = (target - pos).Normalized(); + const SHVec3 RIGHT = SHVec3::Cross(VIEW, up).Normalized(); + const SHVec3 UP = SHVec3::Cross(RIGHT, VIEW); + + viewMatrix = SHMatrix::Identity; + viewMatrix(0, 0) = RIGHT[0]; + viewMatrix(1, 0) = RIGHT[1]; + viewMatrix(2, 0) = RIGHT[2]; + viewMatrix(0, 1) = UP[0]; + viewMatrix(1, 1) = UP[1]; + viewMatrix(2, 1) = UP[2]; + viewMatrix(0, 2) = -VIEW[0]; + viewMatrix(1, 2) = -VIEW[1]; + viewMatrix(2, 2) = -VIEW[2]; + viewMatrix(3, 0) = -RIGHT.Dot(pos); + viewMatrix(3, 1) = -UP.Dot(pos); + viewMatrix(3, 2) = VIEW.Dot(pos); + + isDirty = true; + } + + /*---------------------------------------------------------------------------------*/ + /* Projection Set Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::SetPerspective(float fov, float width, float height, float zNear, float zFar) + { + const float ASPECT_RATIO = width / height; + const float TAN_HALF_FOV = tan(fov * 0.5f); + projMatrix = SHMatrix::Identity; + projMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); + projMatrix(1, 1) = 1.0f / TAN_HALF_FOV; + projMatrix(2, 2) = zFar / (zFar - zNear); + projMatrix(2, 3) = 1.0f; + projMatrix(3, 2) = -(zFar * zNear) / (zFar - zNear); + + isDirty = true; + } + void SHCamera::SetOrthographic(float width, float height, float zNear, float zFar) + { + const float R = width * 0.5f; + const float L = -R; + const float T = height * 0.5f; + const float B = -T; + + projMatrix = SHMatrix::Identity; + projMatrix(0, 0) = 2.0f / (R - L); + projMatrix(1, 1) = 2.0f / (B - T); + projMatrix(2, 2) = 1.0f / (zFar - zNear); + projMatrix(3, 0) = -(R + L) / (R - L); + projMatrix(3, 1) = -(B + T) / (B - T); + projMatrix(3, 2) = -zNear / (zFar - zNear); + + isDirty = true; + } + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + SHMathMat4f SHCamera::GetViewMatrix() const + { + return viewMatrix; + } + + SHMathMat4f SHCamera::GetProjectionMatrix() const + { + return projMatrix; + } + SHMathMat4f SHCamera::GetViewProjectionMatrix() + { + updateMatrices(); + return vpMatrix; + } + + SHMathMat4f SHCamera::GetInverseViewMatrix() const + { + return inverseVpMatrix; + } + + SHMathMat4f SHCamera::GetInverseProjectionMatrix() const + { + return inverseProjMatrix; + } + + SHMathMat4f SHCamera::GetInverseViewProjectionMatrix() + { + updateMatrices(); + return inverseViewMatrix; + } + + /*---------------------------------------------------------------------------------*/ + /* Mapping Functions */ + /*---------------------------------------------------------------------------------*/ + SHVec3 SHCamera::ScreenToWorld(const SHVec3& vec) const + { + return multiplyHomogenous(inverseVpMatrix, vec); + } + SHVec3 SHCamera::WorldToScreen(const SHVec3& vec) const + { + return multiplyHomogenous(vpMatrix, vec); + } + SHVec3 SHCamera::CameraToWorld(const SHVec3& vec) const + { + return multiplyHomogenous(inverseViewMatrix, vec); + } + SHVec3 SHCamera::WorldToCamera(const SHVec3& vec) const + { + return multiplyHomogenous(viewMatrix, vec); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::updateMatrices() + { + if (isDirty) + { + vpMatrix = viewMatrix * projMatrix; + inverseVpMatrix = vpMatrix; + inverseVpMatrix.Inverse(); + } + } + SHVec3 SHCamera::multiplyHomogenous(const SHMathMat4f& mat, const SHVec3& vec) + { + const SHVec4 HOMO_VEC = { vec[0], vec[1], vec[2], 1.0f }; + const SHVec4 RESULT = mat * HOMO_VEC; + return SHVec3 { RESULT[0], RESULT[1], RESULT[2] }; + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h new file mode 100644 index 00000000..fa6e31b5 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h @@ -0,0 +1,80 @@ +/************************************************************************************//*! +\file SHCamera.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Math/SHMath.h" + +namespace SHADE +{ + /***********************************************************************************/ + /*! + \brief + Object that manages the view and projection transformations for rendering + a 3D scene. + */ + /***********************************************************************************/ + class SHCamera + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------*/ + /* View Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up); + + /*-----------------------------------------------------------------------------*/ + /* Projection Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetPerspective(float fov, float width, float height, float zNear, float zFar); + void SetOrthographic(float width, float height, float zNear, float zFar); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + SHMatrix GetViewMatrix() const; + SHMatrix GetProjectionMatrix() const; + SHMatrix GetViewProjectionMatrix(); + SHMatrix GetInverseViewMatrix() const; + SHMatrix GetInverseProjectionMatrix() const; + SHMatrix GetInverseViewProjectionMatrix(); + + /*-----------------------------------------------------------------------------*/ + /* Mapping Functions */ + /*-----------------------------------------------------------------------------*/ + SHVec3 ScreenToWorld(const SHVec3& vec) const; + SHVec3 WorldToScreen(const SHVec3& vec) const; + SHVec3 CameraToWorld(const SHVec3& vec) const; + SHVec3 WorldToCamera(const SHVec3& vec) const; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + SHMatrix viewMatrix; + SHMatrix projMatrix; + SHMatrix vpMatrix; + SHMatrix inverseViewMatrix; + SHMatrix inverseProjMatrix; + SHMatrix inverseVpMatrix; + bool isDirty; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void updateMatrices(); + static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHMatrix& vec); + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h new file mode 100644 index 00000000..b3bd52d0 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -0,0 +1,82 @@ +/************************************************************************************//*! +\file SHGraphicsSystem.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains definition of constants that relate to the SHGraphicsSystem. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +namespace SHADE +{ + /***********************************************************************************/ + /*! + \brief + Contains definition of constants related to the Graphics System. + */ + /***********************************************************************************/ + struct SHGraphicsConstants + { + public: + struct DescriptorSetIndex + { + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for static global values like generic data, and + texture samplers + */ + /***************************************************************************/ + static constexpr uint32_t STATIC_GLOBALS = 0; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for dynamic global values like lights. + */ + /***************************************************************************/ + static constexpr uint32_t DYNAMIC_GLOBALS = 1; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for high frequency changing global values like + camera matrices. + */ + /***************************************************************************/ + static constexpr uint32_t HIGH_FREQUENCY_GLOBALS = 2; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for per-instance/material changing values. + */ + /***************************************************************************/ + static constexpr uint32_t PER_INSTANCE = 3; + + }; + + struct DescriptorSetBindings + { + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for per instance material values. + */ + /***************************************************************************/ + static constexpr uint32_t BATCHED_PER_INST_DATA = 0; + }; + + /*******************************************************************************/ + /*! + \brief + Number of frame buffers used by the Graphics System. + */ + /*******************************************************************************/ + static constexpr int NUM_FRAME_BUFFERS = 3; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index bb5bfc8b..e19aee57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -3,14 +3,14 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 -\brief +\brief + - Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ -#include "SHPch.h" +#include "SHpch.h" #include "SHGraphicsSystem.h" #include "Graphics/Instance/SHVkInstance.h" @@ -19,251 +19,370 @@ of DigiPen Institute of Technology is prohibited. //#include "SHRenderer.h" #include "Graphics/Windowing/SHWindow.h" #include "Graphics/MiddleEnd/PerFrame/SHPerFrameData.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" +#include "Graphics/MiddleEnd/Interface/SHRenderer.h" +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*---------------------------------------------------------------------------------*/ - void SHGraphicsSystem::Init(void) - { - // Set Up Instance - SHVkInstance::Init(true, true, true); + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + void SHGraphicsSystem::Init(void) + { + /*-----------------------------------------------------------------------*/ + /* BACKEND BOILERPLATE */ + /*-----------------------------------------------------------------------*/ + // Set Up Instance + SHVkInstance::Init(true, true, true); - // Get Physical Device and Construct Logical Device - // TODO: Provide configuration for these options - physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); - device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); + // Get Physical Device and Construct Logical Device + // TODO: Provide configuration for these options + physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); + device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); - // Construct surface - surface = device->CreateSurface(window->GetHWND()); + // Construct surface + surface = device->CreateSurface(window->GetHWND()); - // Construct Swapchain - auto windowDims = window->GetWindowSize(); - swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams - { - .surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm}, - .depthFormats {vk::Format::eD32Sfloat, vk::Format::eD32SfloatS8Uint, vk::Format::eD24UnormS8Uint}, - .presentModes {vk::PresentModeKHR::eFifo, vk::PresentModeKHR::eMailbox, vk::PresentModeKHR::eImmediate}, - .vsyncOn = false, // TODO: Set to true when shipping game - }); + // Construct Swapchain + auto windowDims = window->GetWindowSize(); + swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams + { + .surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm}, + .depthFormats {vk::Format::eD32Sfloat, vk::Format::eD32SfloatS8Uint, vk::Format::eD24UnormS8Uint}, + .presentModes {vk::PresentModeKHR::eFifo, vk::PresentModeKHR::eMailbox, vk::PresentModeKHR::eImmediate}, + .vsyncOn = false, // TODO: Set to true when shipping game + }); - window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) - { - renderContext.SetIsResized(true); - }); + // Register callback to notify render context upon a window resize + window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) + { + renderContext.SetIsResized(true); + }); - // Create graphics queue - graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); - + // Create graphics queue + graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); - // Create Render Context - renderContext.Init - ( - device, - SHPerFrameDataParams - { - .swapchainHdl = swapchain, - .numThreads = 1, - .cmdPoolQueueFamilyType = SH_Q_FAM::GRAPHICS, - .cmdPoolResetMode = SH_CMD_POOL_RESET::POOL_BASED, - .cmdBufferTransient = true, - } - ); - // Create Frame and Command Buffers - for (int i = 0; i < NUM_FRAME_BUFFERS; ++i) - { - //frameBuffers[i] = device->CreateFramebuffer(renderPass, { renderContext.GetFrameData(i).swapchainImageViewHdl }, windowDims[0], windowDims[1]); - SHPerFrameData& frameData = renderContext.GetFrameData(i); + // Create Render Context + renderContext.Init + ( + device, + SHPerFrameDataParams + { + .swapchainHdl = swapchain, + .numThreads = 1, + .cmdPoolQueueFamilyType = SH_Q_FAM::GRAPHICS, + .cmdPoolResetMode = SH_CMD_POOL_RESET::POOL_BASED, + .cmdBufferTransient = true, + } + ); - if (frameData.cmdPoolHdls.empty()) - throw std::runtime_error("No command pools available!"); + // Create a descriptor pool + descPool = device->CreateDescriptorPools(); - Handle commandPool = frameData.cmdPoolHdls[0]; - //commandBuffers[i] = commandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); // works - } - - descPool = device->CreateDescriptorPools(); + // Create generic command buffer + transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::TRANSFER, SH_CMD_POOL_RESET::POOL_BASED, true); + transferCmdBuffer = transferCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - /*-----------------------------------------------------------------------*/ - /* RENDERGRAPH TESTING */ - /*-----------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------*/ + /* MIDDLE END SETUP + - Viewports + - Renderer + - Render graph in renderers + - Render graph command buffer semaphores + - Default vertex input state + /*-----------------------------------------------------------------------*/ + // Set Up Cameras + screenCamera = resourceManager.Create(); + screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); + screenCamera->SetOrthographic(windowDims.first, windowDims.second, 0.01f, 100.0f); + worldCamera = resourceManager.Create(); + worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); + worldCamera->SetPerspective(90.0f, windowDims.first, windowDims.second, 0.0f, 100.0f); - renderGraph.Init(device, swapchain); - renderGraph.AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Downscale", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = renderGraph.AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors - - // First subpass to write to G-Buffer + // Create Default Viewport + defaultViewport = AddViewport(vk::Viewport(0, 0, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); + + // Create Debug Renderers + debugScreenRenderer = defaultViewport->AddRenderer(resourceManager); + debugScreenRenderer->SetCamera(screenCamera); + debugWorldRenderer = defaultViewport->AddRenderer(resourceManager); + debugWorldRenderer->SetCamera(worldCamera); + + // Add world renderer to default viewport + worldRenderer = defaultViewport->AddRenderer(resourceManager); + worldRenderer->SetCamera(worldCamera); + + // Get render graph from default viewport world renderer + auto worldRenderGraph = worldRenderer->GetRenderGraph(); + + // Initialize world render graph + worldRenderGraph->Init(device, swapchain); + worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); + auto node = worldRenderGraph->AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors + + //First subpass to write to G-Buffer auto writeSubpass = node->AddSubpass("G-Buffer Write"); writeSubpass->AddColorOutput("Position"); - //writeSubpass->AddColorOutput("Present"); + writeSubpass->AddColorOutput("Normals"); - // Second subpass to read from G-Buffer - //auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); - // compositeSubpass->AddColorOutput("Composite"); - // compositeSubpass->AddInput("Normals"); - // compositeSubpass->AddInput("Position"); + //Second subpass to read from G-Buffer + auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); + compositeSubpass->AddColorOutput("Present"); // TODO: This should be "Composite" and then composite will write to swapchain image "Present" + compositeSubpass->AddInput("Normals"); + compositeSubpass->AddInput("Position"); - auto imguiNode = renderGraph.AddNode("ImGui Node", { "Present" }, {}); // no predecessors - auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - imguiSubpass->AddColorOutput("Present"); + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); - //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present" }, { "G-Buffer" }); - //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); - //bloomSubpass->AddInput("Composite"); - //bloomSubpass->AddColorOutput("Downscale"); - //bloomSubpass->AddColorOutput("Present"); + worldRenderGraph->Generate(); - renderGraph.Generate(); + // Create Semaphore + for (auto& semaHandle : graphSemaphores) + { + semaHandle = device->CreateSemaphore(); + } + ConfigureDefaultVertexInputState(); + //pipelineLibrary.Init(device, &defaultVertexInputState, ); + } - /*-----------------------------------------------------------------------*/ - /* RENDERGRAPH END TESTING */ - /*-----------------------------------------------------------------------*/ - } - - void SHGraphicsSystem::Run(float dt) noexcept + /***************************************************************************/ + /*! + + \brief + Main render loop. Loops through viewports -> renderers -> invoke render + graphs sequentially using semaphores. + + \param dt + + \return + + */ + /***************************************************************************/ + void SHGraphicsSystem::Run(double dt) noexcept { + // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); - renderGraph.Execute(renderContext.GetCurrentFrame()); + // semaphore index. This is for render graphs to have semaphores to signal that the next render graph will use to wait on. + bool semIndex = 0; - graphicsQueue->SubmitCommandBuffer({ renderGraph.GetCommandBuffer(renderContext.GetCurrentFrame()) }, - { frameData.semRenderFinishHdl }, - { frameData.semImgAvailableHdl }, - vk::PipelineStageFlagBits::eColorAttachmentOutput | vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests); + // For every viewport + for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) + { + auto const& renderers = viewports[vpIndex]->GetRenderers(); + // For every renderer + for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) + { + // Draw first + renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + + // get render graph + auto rg = renderers[renIndex]->GetRenderGraph(); + + // submit a command buffer from the current render graph and make it wait for the previous render graph before submitting it to GPU. + graphicsQueue->SubmitCommandBuffer + ( + { rg->GetCommandBuffer(renderContext.GetCurrentFrame()) }, + { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex]}, + { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex]}, + {} + ); + + semIndex = !semIndex; + } + } } void SHGraphicsSystem::Exit(void) - { - //renderPass.Free(); - renderContext.Destroy(); - graphicsQueue.Free(); - swapchain.Free(); - surface.Free(); - device.Free(); + { + renderContext.Destroy(); + graphicsQueue.Free(); + swapchain.Free(); + surface.Free(); + device.Free(); - SHVkInstance::Destroy(); - } + SHVkInstance::Destroy(); + } - /*---------------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*---------------------------------------------------------------------------------*/ - /***************************************************************************/ - /*! - - \brief - Checks for window resize and acquire next image in swapchain. - - - - */ - /***************************************************************************/ - void SHGraphicsSystem::BeginRender() - { + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + /***************************************************************************/ + /*! + + \brief + Checks for window resize and acquire next image in swapchain. + + + + */ + /***************************************************************************/ + void SHGraphicsSystem::BeginRender() + { auto windowDims = window->GetWindowSize(); if (renderContext.GetResizeAndReset()) - { + { device->WaitIdle(); // Resize the swapchain swapchain->Resize(surface, windowDims.first, windowDims.second); renderContext.HandleResize(); - } + } - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - - // #BackEndTest: For for the fence initialized by queue submit - renderContext.WaitForFence(); + const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - // #BackEndTest: Acquire the next image in the swapchain available - renderContext.AcquireNextIamge(); + // #BackEndTest: For for the fence initialized by queue submit + renderContext.WaitForFence(); - // #BackEndTest: Get the current frame from frame manager - auto& currFrameData = renderContext.GetCurrentFrameData(); + // #BackEndTest: Acquire the next image in the swapchain available + renderContext.AcquireNextIamge(); - // #BackEndTest: Reset command pool - if (currFrameData.cmdPoolHdls.empty()) - throw std::runtime_error("No command pools available!"); - currFrameData.cmdPoolHdls[0]->Reset(); + // #BackEndTest: Get the current frame from frame manager + auto& currFrameData = renderContext.GetCurrentFrameData(); - } + // #BackEndTest: Reset command pool + if (currFrameData.cmdPoolHdls.empty()) + throw std::runtime_error("No command pools available!"); + currFrameData.cmdPoolHdls[0]->Reset(); - /***************************************************************************/ - /*! - - \brief - Check if need to resize and advance the frame in the render context. - - */ - /***************************************************************************/ - void SHGraphicsSystem::EndRender() - { - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - auto& currFrameData = renderContext.GetCurrentFrameData(); + } - // #BackEndTest: Prepare to present current image - vk::PresentInfoKHR presentInfo{}; - presentInfo.waitSemaphoreCount = 1; - presentInfo.pWaitSemaphores = &currFrameData.semRenderFinishHdl->GetVkSem(); - presentInfo.swapchainCount = 1; - presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); - presentInfo.pImageIndices = &CURR_FRAME_IDX; + /***************************************************************************/ + /*! - // #BackEndTest: queues an image for presentation - if (auto result = graphicsQueue->Present(swapchain, {currFrameData.semRenderFinishHdl}, CURR_FRAME_IDX); result != vk::Result::eSuccess) - { - // If swapchain is incompatible/outdated - if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) - { + \brief + Check if need to resize and advance the frame in the render context. + + */ + /***************************************************************************/ + void SHGraphicsSystem::EndRender() + { + const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); + auto& currFrameData = renderContext.GetCurrentFrameData(); + + // #BackEndTest: Prepare to present current image + vk::PresentInfoKHR presentInfo{}; + presentInfo.waitSemaphoreCount = 1; + presentInfo.pWaitSemaphores = &currFrameData.semRenderFinishHdl->GetVkSem(); + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); + presentInfo.pImageIndices = &CURR_FRAME_IDX; + + // #BackEndTest: queues an image for presentation + if (auto result = graphicsQueue->Present(swapchain, { currFrameData.semRenderFinishHdl }, CURR_FRAME_IDX); result != vk::Result::eSuccess) + { + // If swapchain is incompatible/outdated + if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) + { auto windowDims = window->GetWindowSize(); swapchain->Resize(surface, windowDims.first, windowDims.second); renderContext.HandleResize(); - } - } - - // #BackEndTest: Cycle frame count - renderContext.AdvanceFrame(); - } - //Handle SHGraphicsSystem::AddRenderer() - //{ - // return Handle(); - //} - //void SHGraphicsSystem::RemoveRenderer(Handle renderer) - //{ - //} - Handle SHGraphicsSystem::AddSegment(const VkViewport& viewport, Handle imageToUse) - { - return Handle(); - } - void SHGraphicsSystem::RemoveSegment(Handle segment) - { - } + } + } + // #BackEndTest: Cycle frame count + renderContext.AdvanceFrame(); + } + + Handle SHGraphicsSystem::AddViewport(const vk::Viewport& viewport) + { + // Create the viewport + auto vp = SHVkInstance::GetResourceManager().Create(device, viewport); + viewports.emplace_back(vp); + return vp; + } + + void SHGraphicsSystem::RemoveViewport(Handle viewport) + { + // Check if the viewport exists + auto iter = std::find(viewports.begin(), viewports.end(), viewport); + if (iter == viewports.end()) + throw std::invalid_argument("Attempted to remove viewport that does not belong to this Graphics System."); + + // Remove + viewport.Free(); + viewports.erase(iter); + } + + Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader) + { + // Retrieve pipeline from pipeline storage or create if unavailable + auto shaderPair = std::make_pair(vertShader, fragShader); + Handle pipeline = pipelineLibrary.GetDrawPipline(shaderPair); + if (!pipeline) + { + pipeline = pipelineLibrary.CreateDrawPipeline + ( + shaderPair, + + ); + } + + // Create material + auto mat = resourceManager.Create(); + mat->SetPipeline(pipeline); + + return mat; + } + + void SHGraphicsSystem::RemoveMaterial(Handle material) + { + resourceManager.Free(material); + } + + Handle SHGraphicsSystem::AddMaterialInstance(Handle material) + { + return resourceManager.Create(material); + } + + void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) + { + resourceManager.Free(materialInstance); + } + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { - window = wind; + window = wind; } - SHRenderGraph const& SHGraphicsSystem::GetRenderGraph(void) const noexcept + void SHGraphicsSystem::ConfigureDefaultVertexInputState(void) noexcept { - return renderGraph; + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // positions at binding 0 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_2D)}); // UVs at binding 1 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 + defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) } - void SHGraphicsSystem::SHGraphicsSystemRoutine::Execute(double dt) noexcept + void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept { + reinterpret_cast(system)->BeginRender(); + } + + void SHGraphicsSystem::RenderRoutine::Execute(double dt) noexcept + { + reinterpret_cast(system)->Run(dt); + } + + void SHGraphicsSystem::EndRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->EndRender(); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index bd1ccc9b..55238ce6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -3,11 +3,11 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 -\brief +\brief + - Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once @@ -24,138 +24,161 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" +#include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" namespace SHADE { - - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ - class SHVkPhysicalDevice; - class SHVkLogicalDevice; - class SHVkSurface; - class SHVkSwapchain; - class SHScreenSegment; - //class SHRenderer; - class SHWindow; - class SHVkImage; - class SHVkFramebuffer; - class SHVkCommandBuffer; - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - /***********************************************************************************/ - /*! - \brief - Represents an axis aligned box on the screen to render to along with the - specified Image to render to that spot. - */ - /***********************************************************************************/ - struct SHScreenSegment - { - VkViewport Viewport; - Handle ImageToUse; - }; + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkPhysicalDevice; + class SHVkLogicalDevice; + class SHVkSurface; + class SHVkSwapchain; + class SHScreenSegment; + class SHWindow; + class SHVkImage; + class SHVkFramebuffer; + class SHVkCommandBuffer; + class SHRenderer; + class SHViewport; + class SHCamera; + class SHVkShaderModule; - /***********************************************************************************/ - /*! - \brief - Manages the lifecycle and provides an interface for rendering multiple objects to - portions of the screen. - */ - /***********************************************************************************/ - class SH_API SHGraphicsSystem : public SHSystem - { - public: - class SH_API SHGraphicsSystemRoutine : public SHSystemRoutine + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Manages the lifecycle and provides an interface for rendering multiple objects to + portions of the screen. + */ + /***********************************************************************************/ + class SH_API SHGraphicsSystem : public SHSystem + { + public: + class SH_API BeginRoutine final : public SHSystemRoutine { - public: - virtual void Execute(double dt) noexcept override; + public: + virtual void Execute(double dt) noexcept override final; + }; + class SH_API RenderRoutine final : public SHSystemRoutine + { + public: + virtual void Execute(double dt) noexcept override final; + }; + class SH_API EndRoutine final : public SHSystemRoutine + { + public: + virtual void Execute(double dt) noexcept override final; }; - public: - /*-----------------------------------------------------------------------------*/ - /* Constants */ - /*-----------------------------------------------------------------------------*/ - static constexpr int NUM_FRAME_BUFFERS = 3; + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + static constexpr int NUM_FRAME_BUFFERS = 3; - /*-----------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*-----------------------------------------------------------------------------*/ - SHGraphicsSystem (void) = default; - ~SHGraphicsSystem(void) noexcept = default; + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHGraphicsSystem(void) = default; + ~SHGraphicsSystem(void) noexcept = default; - /*-----------------------------------------------------------------------------*/ - /* SHSystem overrides */ - /*-----------------------------------------------------------------------------*/ - virtual void Init(void) override; - void Run (float dt) noexcept; - virtual void Exit(void) override; + /*-----------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*-----------------------------------------------------------------------------*/ + virtual void Init(void) override final; + void Run(double dt) noexcept; + virtual void Exit(void) override final; - /*-----------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*-----------------------------------------------------------------------------*/ - void BeginRender(); - void EndRender(); + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + void BeginRender(); + void EndRender(); - /*-----------------------------------------------------------------------------*/ - /* Renderers Registration Functions */ - /*-----------------------------------------------------------------------------*/ - //Handle AddRenderer(); - //void RemoveRenderer(Handle renderer); + /*-----------------------------------------------------------------------------*/ + /* Viewport Registration Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddViewport(const vk::Viewport& viewport); + void RemoveViewport(Handle viewport); - /*-----------------------------------------------------------------------------*/ - /* Viewport Registration Functions */ - /*-----------------------------------------------------------------------------*/ - Handle AddSegment(const VkViewport& viewport, Handle imageToUse); - void RemoveSegment(Handle segment); + /*-----------------------------------------------------------------------------*/ + /* Material Creation Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddMaterial(Handle vertShader, Handle fragShader); + void RemoveMaterial(Handle material);; + Handle AddMaterialInstance(Handle material); + void RemoveMaterialInstance(Handle materialInstance); + - /*-----------------------------------------------------------------------------*/ - /* Setters */ - /*-----------------------------------------------------------------------------*/ - void SetWindow (SHWindow* wind) noexcept; + /*-----------------------------------------------------------------------------*/ + /* Setters */ + /*-----------------------------------------------------------------------------*/ + void SetWindow(SHWindow* wind) noexcept; - /*-----------------------------------------------------------------------------*/ - /* Getters (Temporary) */ - /*-----------------------------------------------------------------------------*/ - Handle GetDevice() const { return device; } - Handle GetSwapchain() const { return swapchain; } - Handle GetSurface() const { return surface; } - Handle GetPhysicalDevice() const {return physicalDevice;} + /*-----------------------------------------------------------------------------*/ + /* Getters (Temporary) */ + /*-----------------------------------------------------------------------------*/ + Handle GetDevice() const { return device; } + Handle GetSwapchain() const { return swapchain; } + Handle GetSurface() const { return surface; } + Handle GetPhysicalDevice() const { return physicalDevice; } Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } - SHRenderGraph const& GetRenderGraph (void) const noexcept; + //SHRenderGraph const& GetRenderGraph(void) const noexcept; - //Handle GetRenderPass() const { return renderPass; } + //Handle GetRenderPass() const { return renderPass; } - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - // Owned Resources - Handle physicalDevice; - Handle device; - Handle surface; - Handle swapchain; - Handle graphicsQueue; - Handle descPool; - //Handle renderPass; // Potentially bring out? - std::vector screenSegments; - SHRenderContext renderContext; - //std::array, NUM_FRAME_BUFFERS> frameBuffers; - //std::array, NUM_FRAME_BUFFERS> commandBuffers; + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Owned Vulkan Resources + Handle physicalDevice; + Handle device; + Handle surface; + Handle swapchain; + Handle graphicsQueue; + Handle descPool; + Handle transferCmdPool; + Handle transferCmdBuffer; + SHRenderContext renderContext; + std::array, 2> graphSemaphores; - // Not Owned Resources - SHWindow* window; - // Renderers - //Handle debugWorldRenderer; - //Handle debugScreenRenderer; - //std::vector renderers; - SHRenderGraph renderGraph; + // Not Owned Resources + SHWindow* window; - friend SHGraphicsSystemRoutine; - }; + SHPipelineLibrary pipelineLibrary; + + std::vector globalDescSetLayouts; + + // Middle End Resources + ResourceManager resourceManager; + // Viewports + Handle defaultViewport; // Whole screen + std::vector> viewports; // Additional viewports + // Debug Renderers + Handle debugWorldRenderer; + Handle debugScreenRenderer; + + // Temp Cameras + Handle worldCamera; + Handle screenCamera; + + // Temp renderers + Handle worldRenderer; + + SHVertexInputState defaultVertexInputState; + + /*-----------------------------------------------------------------------------*/ + /* Private member functions */ + /*-----------------------------------------------------------------------------*/ + void ConfigureDefaultVertexInputState (void) noexcept; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp new file mode 100644 index 00000000..71e72331 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp @@ -0,0 +1,67 @@ +#include "SHpch.h" +#include "SHMaterial.h" + +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "SHGraphicsConstants.h" +#include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Pipeline Functions */ + /*---------------------------------------------------------------------------------*/ + void SHMaterial::SetPipeline(Handle _pipeline) + { + pipeline = _pipeline; + + // Set up properties based on the pipeline + if (!pipeline) + { + // Clear memory and all that + propMemory.reset(); + return; + } + + // Allocate memory for properties + propMemorySize = getShaderBlockInterface()->GetBytesRequired(); + propMemory.reset(new char[propMemorySize]); + ResetProperties(); + } + + Handle SHMaterial::GetPipeline() const + { + return pipeline; + } + + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + void SHMaterial::ResetProperties() + { + // Reset all the properties to default values + memset(propMemory.get(), 0, propMemorySize); + } + + void SHMaterial::ExportProperties(void* dest) const noexcept + { + memcpy(dest, propMemory.get(), propMemorySize); + } + + size_t SHMaterial::GetPropertiesMemorySize() const noexcept + { + return getShaderBlockInterface()->GetBytesRequired(); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHMaterial::getShaderBlockInterface() const noexcept + { + return pipeline->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + ); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h new file mode 100644 index 00000000..692d857f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h @@ -0,0 +1,75 @@ +/************************************************************************************//*! +\file SHMaterial.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains the class definition of SHMaterial. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" +#include "SHCommonTypes.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkPipeline; + class SHShaderBlockInterface; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Describes a Pipeline along with it's associated properties for this instance. + */ + /***********************************************************************************/ + class SHMaterial + { + public: + /*-----------------------------------------------------------------------------*/ + /* Pipeline Functions */ + /*-----------------------------------------------------------------------------*/ + void SetPipeline(Handle _pipeline); + Handle GetPipeline() const; + + /*-----------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------*/ + template + void SetProperty(const std::string& key, const T& value); + template + T& GetProperty(const std::string& key); + template + const T& GetProperty(const std::string& key) const; + void ResetProperties(); + void ExportProperties(void* dest) const noexcept; + Byte GetPropertiesMemorySize() const noexcept; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle pipeline; + std::unique_ptr propMemory; + Byte propMemorySize; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + Handle getShaderBlockInterface() const noexcept; + }; +} + +#include "SHMaterial.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp new file mode 100644 index 00000000..49587921 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp @@ -0,0 +1,59 @@ +/************************************************************************************//*! +\file SHMaterial.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the template function definitions of SHMaterial. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "SHMaterial.h" + +#include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" + + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + template + void SHMaterial::SetProperty(const std::string& key, const T& value) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Get offset and modify the memory directly + T* dataPtr = propMemory.get() + PROP_INFO->offset; + *dataPtr = value; + } + template + T& SHMaterial::GetProperty(const std::string& key) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Get offset and return the memory directly + T* dataPtr = propMemory.get() + PROP_INFO->offset; + return *dataPtr; + } + template + const T& SHMaterial::GetProperty(const std::string& key) const + { + return const_cast(const_cast(this)->GetProperty(key)); + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp new file mode 100644 index 00000000..5f697208 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp @@ -0,0 +1,62 @@ +/************************************************************************************//*! +\file SHMaterialInstance.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the definition of functions of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMaterialInstance.h" +#include "Tools/SHLogger.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------------*/ + SHMaterialInstance::SHMaterialInstance(Handle material) + : baseMaterial { material } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHMaterialInstance::ResetProperties() noexcept + { + + // Reset all the properties to default values + memset(dataStore.get(), 0, dataStoreSize); + overrideData.clear(); + dataStore.reset(); + } + + void SHMaterialInstance::ExportProperties(void* dest) const + { + assert(dataStore != nullptr); + + if (!baseMaterial) + throw std::runtime_error("[SHMaterialInstance] Attempted to set export a Material Instance with no base Material!"); + + // Copy default data from Material + baseMaterial->ExportProperties(dest); + + // Follow up with copying our data over + const auto SHADER_INFO = getShaderBlockInterface(); + for (const auto& data : overrideData) + { + // Get memory offset to the data + SHShaderBlockInterface::Variable variable = SHADER_INFO->GetVariable(data.Index); + if (variable == nullptr) + { + SHLOG_WARNING("[SHMaterialInstance] Invalid override data indices provided. Skipping."); + continue; + } + const auto DATA_OFFSET = variable->offset; + memcpy_s(dest + DATA_OFFSET, dataStore.get() + data.StoredDataOffset, data.DataSize); + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h new file mode 100644 index 00000000..d2b222e6 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h @@ -0,0 +1,82 @@ +/************************************************************************************//*! +\file SHMaterialInstance.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the class definition of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHMaterial; + class SHGraphicsSystem; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Describes an instance of a SHMaterial that can be used to describe how to render + a SHRenderable. + */ + /***********************************************************************************/ + class SHMaterialInstance + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + struct OverrideData + { + size_t Index; + size_t DataSize; + size_t StoredDataOffset; + }; + + /*-----------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------*/ + SHMaterialInstance(Handle material = {}); + + /*-----------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------*/ + template + void SetProperty(const std::string& key, const T& value); + template + T& GetProperty(const std::string& key); + template + const T& GetProperty(const std::string& key) const; + void ResetProperties() noexcept; + void ExportProperties(void* dest) const; + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetBaseMaterial() const { return baseMaterial; } + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle baseMaterial; + std::vector overrideData; + std::unique_ptr dataStore; + size_t dataStoreSize = 0; + }; +} + +#include "SHMaterialInstance.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp new file mode 100644 index 00000000..9980dfae --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp @@ -0,0 +1,85 @@ +/************************************************************************************//*! +\file SHMaterialInstance.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the definition of functions templates of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +#include "SHMaterialInstance.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + template + void SHMaterialInstance::SetProperty(const std::string& key, const T& value) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Allocate data store if it was empty + if (dataStore == nullptr) + { + dataStoreSize = SHADER_INFO->GetBytesRequired();dataStoreSize + dataStore.reset(new char[dataStoreSize]); + } + + OverrideData od; + od.Index = SHADER_INFO.GetVariableIndex(key); + od.DataSize = sizeof(T); + if (overrideData.empty()) + { + od.StoredDataOffset = 0; + } + else + { + const OverrideData& lastInsertedData = overrideData.back(); + od.StoredDataOffset = lastInsertedData.StoredDataOffset + lastInsertedData.DataSize; + } + + // Get offset and modify the memory directly + T* dataPtr = dataStore.get() + od.StoredDataOffset; + *dataPtr = value; + + // Save the override data information + overrideData.emplace_back(std::move(od)); + } + template + T& SHMaterialInstance::GetProperty(const std::string& key) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to get an invalid property!"); + } + + // Search Override Data for the property + uint32_t PROP_IDX = SHADER_INFO.GetVariableIndex(key); + auto prop = std::find(overrideData.begin(), overrideData.end(), [&](const OverrideData& data) + { + return PROP_IDX == data.Index; + }); + if (prop == overrideData.end()) + throw std::invalid_argument("Attempted to get an property that was not set previously!"); + + // Get offset and return the memory directly + T* dataPtr = dataStore.get() + prop->StoredDataOffset; + return *dataPtr; + } + template + const T& SHMaterialInstance::GetProperty(const std::string& key) const + { + return const_cast(const_cast(this)->GetProperty(key)); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp new file mode 100644 index 00000000..3474fea3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp @@ -0,0 +1,201 @@ +/************************************************************************************//*! +\file SHMeshLibrary.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains definitions for all of the functions of the classes that deal + with storage and management of vertex and index buffers of meshes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMeshLibrary.h" + +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "../../SHVkUtil.h" + +namespace SHADE +{ + SHADE::Handle SHMeshLibrary::AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices) + { + isDirty = true; + + auto handle = meshes.Create(); + meshAddJobs.emplace_back( MeshAddJob + { + vertexCount, + positions, + texCoords, + tangents, + normals, + indexCount, + indices, + handle + }); + return handle; + } + + void SHMeshLibrary::RemoveMesh(Handle mesh) + { + if (!mesh) + throw std::invalid_argument("Attempted to remove a Mesh that did not belong to the Mesh Library!"); + + meshRemoveJobs.emplace_back(mesh); + isDirty = true; + } + + void SHMeshLibrary::BuildBuffers(Handle device, Handle cmdBuffer) + { + // No changes + if (!isDirty) + return; + + // Remove + if (!meshRemoveJobs.empty()) + { + // - Remove from order list + for (const auto& meshToRemove : meshRemoveJobs) + { + auto searchResult = std::find(meshOrder.begin(), meshOrder.end(), meshToRemove); + // Shouldn't happen, ignore + if (searchResult == meshOrder.end()) + continue; + + // Remove from mesh list + meshOrder.erase(searchResult); + } + meshRemoveJobs.clear(); + // - Shift existing elements in to close up the gaps + int32_t nextVertInsertPoint = 0; + uint32_t nextIdxInsertPoint = 0; + for (auto& mesh : meshOrder) + { + // Check if already in the correct place + if (nextVertInsertPoint != mesh->FirstVertex) + { + /* There's a gap, we need to shift */ + // Vertices + vertPosStorage.erase(vertPosStorage.begin() + nextVertInsertPoint, vertPosStorage.begin() + mesh->FirstVertex); + vertTexCoordStorage.erase(vertTexCoordStorage.begin() + nextVertInsertPoint, vertTexCoordStorage.begin() + mesh->FirstVertex); + vertTangentStorage.erase(vertTangentStorage.begin() + nextVertInsertPoint, vertTangentStorage.begin() + mesh->FirstVertex); + vertNormalStorage.erase(vertNormalStorage.begin() + nextVertInsertPoint, vertNormalStorage.begin() + mesh->FirstVertex); + // - Update mesh data + mesh->FirstVertex = nextVertInsertPoint; + + // Indices + indexStorage.erase(indexStorage.begin() + nextIdxInsertPoint, indexStorage.begin() + mesh->FirstIndex); + // - Update mesh data + mesh->FirstIndex = nextIdxInsertPoint; + + // Prepare for next + nextVertInsertPoint += mesh->VertexCount; + nextIdxInsertPoint += mesh->IndexCount; + } + } + } + + // Add + if (!meshAddJobs.empty()) + { + // - Compute updated size + size_t newVertElems = vertPosStorage.size(); + size_t newIdxElems = indexStorage.size(); + for (const auto& addJob : meshAddJobs) + { + newVertElems += addJob.VertexCount; + newIdxElems += addJob.IndexCount; + } + // - Reserve new memory + vertPosStorage .reserve(newVertElems); + vertTexCoordStorage.reserve(newVertElems); + vertTangentStorage .reserve(newVertElems); + vertNormalStorage .reserve(newVertElems); + indexStorage .reserve(newIdxElems); + // - Append new data + for (auto& addJob : meshAddJobs) + { + // Update handle + SHMesh& meshData = *addJob.Handle; + meshData = SHMesh + { + .FirstVertex = static_cast(vertPosStorage.size()), + .VertexCount = static_cast(addJob.VertexCount), + .FirstIndex = static_cast(indexStorage.size()), + .IndexCount = static_cast(addJob.IndexCount), + }; + + // Copy into storage + vertPosStorage.insert + ( + vertPosStorage.end(), + addJob.VertexPositions, addJob.VertexPositions + addJob.VertexCount + ); + vertTexCoordStorage.insert + ( + vertTexCoordStorage.end(), + addJob.VertexTexCoords, addJob.VertexTexCoords + addJob.VertexCount + ); + vertTangentStorage.insert + ( + vertTangentStorage.end(), + addJob.VertexTangents, addJob.VertexTangents + addJob.VertexCount + ); + vertNormalStorage.insert + ( + vertNormalStorage.end(), + addJob.VertexNormals, addJob.VertexNormals + addJob.VertexCount + ); + indexStorage.insert + ( + indexStorage.end(), + addJob.Indices, addJob.Indices + addJob.IndexCount + ); + } + meshAddJobs.clear(); + } + + // Send to GPU + using BuffUsage = vk::BufferUsageFlagBits; + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertPosBuffer, + vertPosStorage.data(), + static_cast(vertPosStorage.size()) * sizeof(SHMesh::VertexPosition), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertTexCoordBuffer, + vertTexCoordStorage.data(), + static_cast(vertTexCoordStorage.size()) * sizeof(SHMesh::VertexTexCoord), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertTangentBuffer, + vertTangentStorage.data(), + static_cast(vertTangentStorage.size()) * sizeof(SHMesh::VertexTangent), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertNormalBuffer, + vertNormalStorage.data(), + static_cast(vertNormalStorage.size()) * sizeof(SHMesh::VertexNormal), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, indexBuffer, + indexStorage.data(), + static_cast(indexStorage.size()) * sizeof(SHMesh::Index), + BuffUsage::eIndexBuffer + ); + + isDirty = false; + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h new file mode 100644 index 00000000..f8a89687 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h @@ -0,0 +1,187 @@ +/************************************************************************************//*! +\file SHMeshLibrary.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains definitions for all of the classes that deal with storage and + management of vertex and index buffers of meshes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" +#include "Resource/ResourceLibrary.h" +#include "SHVertex.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkLogicalDevice; + class SHVkCommandBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Represents a single mesh that is stored in a SHMeshLibrary. + */ + /***********************************************************************************/ + class SHMesh + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using Index = uint32_t; + using VertexPosition = SHMathVec3f; + using VertexTexCoord = SHMathVec2f; + using VertexTangent = SHMathVec3f; + using VertexNormal = SHMathVec3f; + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + int32_t FirstVertex; + uint32_t VertexCount; + uint32_t FirstIndex; + uint32_t IndexCount; + }; + /***********************************************************************************/ + /*! + \brief + Manages storage for all Meshes in the Graphics System as a single set of Vertex + and Index Buffers. + */ + /***********************************************************************************/ + class SHMeshLibrary + { + public: + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /*******************************************************************************/ + /*! + + \brief + Adds a mesh to the Mesh Library. But this does not mean that the meshes have + been added yet. A call to "BuildBuffers()" is required to transfer all + meshes into the GPU. + + \param vertexCount + Number of vertices in this Mesh. + \param positions + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + \param texCoords + Pointer to the first in a contiguous array of SHMathVec2s that define vertex + texture coordinates. + \param tangents + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + tangents. + \param normals + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + normals. + \param indexCount + Number of indices in this mesh. + \param indices + Pointer to the first in a contiguous array of uint32_ts that define mesh + indicies. + + \return + Handle to the created Mesh. This is not valid to be used until a call to + BuildBuffers(). + + */ + /*******************************************************************************/ + Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); + /*******************************************************************************/ + /*! + + \brief + Removes a mesh from the MeshLibrary. But this does not mean that the meshes + have been removed yet. A call to "BuildBuffers()" is required to finalise all + changes. + + \param mesh + Handle to the mesh to remove. + + */ + /*******************************************************************************/ + void RemoveMesh(Handle mesh); + /***************************************************************************/ + /*! + + \brief + Finalises all changes to the MeshLibrary into the GPU buffers. + + \param device + Device used to create and update the buffers. + \param cmdBuffer + Command buffer used to set up transfers of data in the GPU memory. This + call must be preceded by calls to cmdBuffer's BeginRecording() and ended + with EndRecording(). Do recall to also submit the cmdBuffer to a transfer + queue. + */ + /***************************************************************************/ + void BuildBuffers(Handle device, Handle cmdBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetVertexPositionsBuffer() const noexcept { return vertPosBuffer; } + Handle GetVertexTexCoordsBuffer() const noexcept { return vertTexCoordBuffer; } + Handle GetVertexTangentsBuffer() const noexcept { return vertTangentBuffer; } + Handle GetVertexNormalsBuffer() const noexcept { return vertNormalBuffer; } + Handle GetIndexBuffer() const { return indexBuffer; } + + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definition */ + /*-----------------------------------------------------------------------------*/ + struct MeshAddJob + { + uint32_t VertexCount = 0; + const SHMesh::VertexPosition* VertexPositions = nullptr; + const SHMesh::VertexTexCoord* VertexTexCoords = nullptr; + const SHMesh::VertexTangent * VertexTangents = nullptr; + const SHMesh::VertexNormal * VertexNormals = nullptr; + uint32_t IndexCount = 0; + const SHMesh::Index * Indices = nullptr; + Handle Handle; + }; + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Manipulation Queues + std::vector meshAddJobs; + std::vector> meshRemoveJobs; + // Tracking + ResourceLibrary meshes{}; + std::vector> meshOrder; + // CPU Storage + std::vector vertPosStorage; + std::vector vertTexCoordStorage; + std::vector vertTangentStorage; + std::vector vertNormalStorage; + std::vector indexStorage; + // GPU Storage + Handle vertPosBuffer{}; + Handle vertTexCoordBuffer{}; + Handle vertTangentBuffer{}; + Handle vertNormalBuffer{}; + Handle indexBuffer {}; + // Flags + bool isDirty = true; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp index eec4d28a..e728ff68 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp @@ -1,2 +1,2 @@ -#include "SHPch.h" +#include "SHpch.h" #include "SHRenderTarget.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp new file mode 100644 index 00000000..41a8d8d0 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -0,0 +1,49 @@ +/************************************************************************************//*! +\file SHRenderable.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 19, 2022 +\brief Contains the definition of functions of the SHRenderable Component class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHRenderable.h" +#include "ECS_Base/Managers/SHSystemManager.h" + +namespace SHADE +{ + void SHRenderable::SetMaterial(Handle materialInstance) + { + if (material) + { + material.Free(); + material = {}; + } + + sharedMaterial = materialInstance; + } + + Handle SHRenderable::GetMaterial() const + { + if (material) + return material; + + return sharedMaterial; + } + + Handle SHRenderable::GetModifiableMaterial() + { + // Create a copy if it wasn't created + if (!material) + { + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + material = gfxSystem->AddMaterialInstance(sharedMaterial->GetBaseMaterial()); + } + + return material; + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h new file mode 100644 index 00000000..4d85abd8 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -0,0 +1,60 @@ +/************************************************************************************//*! +\file SHRenderable.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 19, 2022 +\brief Contains the definition of the SHRenderable Component class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Resource/Handle.h" +//#include "SHTransform.h" +#include "ECS_Base/Components/SHComponent.h" +#include "Math/SHMatrix.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHMaterialInstance; + class SHMesh; + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /*************************************************************************************/ + /*! + \brief + Represents an object that should be rendered. + */ + /*************************************************************************************/ + class SHRenderable : public SHComponent, public ISelfHandle + { + public: + /*-------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-------------------------------------------------------------------------------*/ + void SetMaterial(Handle materialInstance); + Handle GetMaterial() const; + Handle GetModifiableMaterial(); + + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + Handle Mesh; + SHMatrix TransformMatrix; // TODO: Replace with Transform component + + private: + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + Handle sharedMaterial; + Handle material; + }; +} + diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp new file mode 100644 index 00000000..6a5b86e3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -0,0 +1,57 @@ +/************************************************************************************//*! +\file SHRenderer.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHRenderer.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "SHViewport.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Framebuffer/SHVkFramebuffer.h" +#include "SHMaterial.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHRenderer::SHRenderer(Handle viewport, ResourceManager& resourceManager) + : renderGraph{resourceManager.Create ()} + { + + } + SHRenderer::~SHRenderer() + { + } + + /*-----------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------*/ + void SHRenderer::SetCamera(Handle _camera) + { + camera = _camera; + } + + /*---------------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*---------------------------------------------------------------------------------*/ + void SHRenderer::Draw(uint32_t frameIndex) const noexcept + { + renderGraph->Execute(frameIndex); + } + + Handle SHRenderer::GetRenderGraph(void) const noexcept + { + return renderGraph; + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h new file mode 100644 index 00000000..000fec4f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file SHRenderer.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +// Project Includes +#include "SHCamera.h" +#include "Resource/Handle.h" +#include "SHGraphicsConstants.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkRenderpass; + class SHVkFramebuffer; + class SHMaterial; + class SHVkLogicalDevice; + class SHViewport; + class SHVkImageView; + class SHVkCommandBuffer; + class SHCamera; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Brings together a set of Cameras and objects with various Pipelines to render + them as part of a set. Multiple Renderers can exist to render objects differently + in a separate step. + */ + /***********************************************************************************/ + class SHRenderer + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHRenderer(Handle viewport, ResourceManager& resourceManager); + ~SHRenderer(); + + /*-----------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------*/ + void SetCamera(Handle _camera); + + /*-----------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*-----------------------------------------------------------------------------*/ + void Draw(uint32_t frameIndex) const noexcept; + + /*-----------------------------------------------------------------------------*/ + /* Setters and Getters */ + /*-----------------------------------------------------------------------------*/ + Handle GetRenderGraph (void) const noexcept; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle camera; + Handle renderGraph; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp new file mode 100644 index 00000000..47f9ec5a --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -0,0 +1,74 @@ +/************************************************************************************//*! +\file SHViewport.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 27, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHViewport.h" + +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/Instance/SHVkInstance.h" +#include "Tools/SHLogger.h" +#include "SHRenderer.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHViewport::SHViewport(Handle device, const vk::Viewport& viewport) + : device { device } + , viewport { viewport } + {} + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void SHViewport::SetUp(Handle commandBuffer) + { + commandBuffer->SetViewportScissor + ( + viewport.x, + viewport.y, + static_cast(viewport.width), + static_cast(viewport.height), + viewport.minDepth, + viewport.maxDepth + ); + } + + /*---------------------------------------------------------------------------------*/ + /* Renderer Registration Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHViewport::AddRenderer(ResourceManager& resourceManager) + { + // Create the renderer + auto renderer = SHVkInstance::GetResourceManager().Create(GetHandle(), resourceManager); + + // Store + renderers.emplace_back(renderer); + + // Return + return renderer; + } + void SHViewport::RemoveRenderer(Handle renderer) + { + auto iter = std::find(renderers.begin(), renderers.end(), renderer); + if (iter == renderers.end()) + { + SHLOG_WARNING("Attempted to remove a Renderer that does not belong to a viewport!"); + return; + } + + // Remove it + iter->Free(); + renderers.erase(iter); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h new file mode 100644 index 00000000..01637db3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file SHViewport.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 27, 2022 +\brief Contains the class definition of SHViewport. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// External Dependencies +#include "Graphics/SHVulkanIncludes.h" +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHRenderer; + class SHVkCommandBuffer; + class SHVkLogicalDevice; + class SHVkImageView; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Brings together a set of Renderers that render to the same segment of an image. + */ + /***********************************************************************************/ + class SHViewport : public ISelfHandle + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHViewport(Handle device, const vk::Viewport& viewport); + + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + void SetUp(Handle commandBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Renderers Registration Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddRenderer(ResourceManager& resourceManager); + void RemoveRenderer(Handle renderer); + + /*-----------------------------------------------------------------------------*/ + /* Getters */ + /*-----------------------------------------------------------------------------*/ + float GetX() const { return viewport.x; } + float GetY() const { return viewport.y; } + float GetWidth() const { return viewport.width; } + float GetHeight() const { return viewport.height; } + float GetMinDepth() const { return viewport.minDepth; } + float GetMaxDepth() const { return viewport.maxDepth; } + const std::vector>& GetRenderers() const { return renderers; } + + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle device; + vk::Viewport viewport; + std::vector> renderers; + }; + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp new file mode 100644 index 00000000..45bb87ba --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -0,0 +1,52 @@ +#include "SHpch.h" +#include "SHPipelineLibrary.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" + +namespace SHADE +{ + + Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, uint32_t subpass, SHVertexInputState const& vertexInput, std::vector> const& globalDescSetLayouts) noexcept + { + SHPipelineLayoutParams params + { + .shaderModules = {vsFsPair.first, vsFsPair.second}, + .globalDescSetLayouts = globalDescSetLayouts + }; + + // Create the pipeline layout + auto pipelineLayout = logicalDevice->CreatePipelineLayout(params); + + // Create the pipeline and configure the default vertex input state + auto newPipeline = logicalDevice->CreatePipeline(pipelineLayout, nullptr, renderpass, subpass, SH_PIPELINE_TYPE::GRAPHICS); + newPipeline->GetPipelineState().SetVertexInputState(vertexInput); + + // Actually construct the pipeline + newPipeline->ConstructPipeline(); + + // Emplace the new pipeline + pipelines.emplace (vsFsPair, newPipeline); + } + + void SHPipelineLibrary::Init(Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept + { + logicalDevice = device; + vertexInputState = viState; + globalDescSetLayouts = globalLayouts; + } + + Handle SHPipelineLibrary::GetDrawPipline(std::pair, Handle> const& vsFsPair) noexcept + { + // return the pipeline requested for + if (pipelines.contains(vsFsPair)) + return pipelines.at(vsFsPair); + else + return {}; + } + + bool SHPipelineLibrary::CheckDrawPipelineExistence(std::pair, Handle> const& vsFsPair) noexcept + { + // Returns if a pipeline exists or not + return pipelines.contains(vsFsPair); + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h new file mode 100644 index 00000000..fe69e87b --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Graphics/Pipeline/SHVkPipeline.h" + + +namespace SHADE +{ + class SHVRenderpass; + class SHVkDescriptorSetLayouts; + class SHVkPipeline; + + + // Pipeline library is a PURELY MIDDLE END SYSTEM. It is responsible for only creating pipelines from shaders and caching + // them so that they don't need to be recreated again. + class SHPipelineLibrary + { + private: + // TOOD: Move this somewhere eventually. Can use for other things + struct SHHandlePairHash + { + template + std::size_t operator() (std::pair const& pair) const + { + return std::hash()(pair.first.GetId()) ^ std::hash()(pair.second.GetId()); + } + }; + + //! Logical Device required for creation of pipelines + Handle logicalDevice; + + //! a map of pipelines that are hashed using a pair of shader module handles + std::unordered_map, Handle>, Handle, SHHandlePairHash> pipelines; + + //! Default vertex input state for pipeline creation + SHVertexInputState const* vertexInputState; + + std::vector> const* globalDescSetLayouts; + + + public: + void Init (Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept; + + // Draw pipeline functions. used only when creating pipelines for drawing using a vertex and fragment shader + Handle CreateDrawPipeline ( + std::pair, Handle> const& vsFsPair, + Handle renderpass, + uint32_t subpass, + SHVertexInputState const& vertexInput, + std::vector> const& globalDescSetLayouts + ) noexcept; + Handle GetDrawPipline (std::pair, Handle> const& vsFsPair) noexcept; + bool CheckDrawPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; + + }; +} diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h index 961b3f4c..493bd114 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h @@ -23,7 +23,7 @@ namespace SHADE //! used just for textures or lights for example). In that case, we still //! want to use the layout to initialize the pipeline layout but we do not //! want to use it for allocating descriptor sets. - std::vector> globalDescSetLayouts = {}; + std::vector> const& globalDescSetLayouts = {}; }; } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index 7c24aab7..e692163b 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -189,7 +189,7 @@ namespace SHADE /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - template , SHVertexInputState>>> + template , SHVertexInputState>>> void SetVertexInputState (T&& state) noexcept; void SetInputAssemblyState(SHInputAssemblyState const& state) noexcept; void SetRasterizationState(SHRasterizationState const& state) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 41633e55..0181bdad 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -1035,7 +1035,7 @@ namespace SHADE auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); - cmdBuffer->SetviewportScissor(1920.0f, 1080.0f, 1920, 1080); + cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); for (auto& node : nodes) { diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp index 2135b9dd..cfa26e4c 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp @@ -6,30 +6,49 @@ namespace SHADE void SHShaderBlockInterface::AddVariable(std::string name, Variable&& newVariable) noexcept { - variables.try_emplace (std::move(name), std::move (newVariable)); + // Check if this is already inside + if (variableIndexing.contains(name)) + { + SHLOG_WARNING("[SHShaderBlockInterface] Attempted to specify a variable with a duplicate name. This will be ignored."); + return; + } + variableIndexing.emplace_back(std::move(newVariable)); + variables.try_emplace (std::move(name), static_cast(variableIndexing.size() - 1)); } SHShaderBlockInterface::Variable const* const SHShaderBlockInterface::GetVariable(std::string const& variableName) const noexcept { - if (variables.contains(variableName)) - return &variables.at(variableName); + if (variableIndexing.contains(variableName)) + return &variables.at(variableIndexing.at(variableName).second); return nullptr; } - SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept - : variables{} - , bytesRequired{ 0 } + SHADE::SHShaderBlockInterface::Variable const* const SHShaderBlockInterface::GetVariable(uint32_t index) const noexcept { + if (variableIndexing.size() < index) + return &variables.at(index); + return nullptr; } + uint32_t SHShaderBlockInterface::GetVariableIndex(std::string const& variableName) const noexcept + { + if (!variableIndexing.contains(variableName)) + throw std::invalid_argument("Attempted to retrieve index to variable that does not exist!"); + + return variableIndexing.at(variableName).second; + } + + SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept + : bytesRequired{ 0 } + {} + SHShaderBlockInterface::SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept - : variables{ std::move(rhs.variables) } - , bytesRequired {std::move (rhs.bytesRequired)} - { - - } + : variables { std::move(rhs.variables) } + , variableIndexing { std::move(rhs.variableIndexing) } + , bytesRequired { std::move (rhs.bytesRequired) } + {} void SHShaderBlockInterface::SetBytesRequired(uint32_t bytes) noexcept { @@ -46,16 +65,11 @@ namespace SHADE { if (&rhs == this) return *this; - + variables = std::move(rhs.variables); + variableIndexing = std::move(rhs.variableIndexing); bytesRequired = std::move(rhs.bytesRequired); return *this; } - - SHShaderBlockInterface::~SHShaderBlockInterface(void) noexcept - { - variables.clear(); - } - } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h index 38c01bde..ee7e7726 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h @@ -15,8 +15,9 @@ namespace SHADE }; private: - //! container of variable information - std::unordered_map variables; + //! containers of variable information + std::vector variables; + std::unordered_map variableIndexing; //! bytes required by the block (includes padding). This variable is required uint32_t bytesRequired; @@ -24,12 +25,13 @@ namespace SHADE public: void AddVariable (std::string name, Variable&& newVariable) noexcept; Variable const* const GetVariable (std::string const& variableName) const noexcept; + Variable const* const GetVariable(uint32_t index) const noexcept; + uint32_t GetVariableIndex(std::string const& variableName) const; /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ SHShaderBlockInterface(void) noexcept; - ~SHShaderBlockInterface(void) noexcept; SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept; SHShaderBlockInterface& operator=(SHShaderBlockInterface&& rhs) noexcept; From bff27a7188bd31e520a1dfaf3f7f672fa5dfaab0 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 17 Sep 2022 22:28:03 +0800 Subject: [PATCH 099/793] Added a bunch of KW's files for batching Prepared Graphics system for merging with batcher --- .../src/Application/SBApplication.cpp | 6 +- .../Graphics/Commands/SHVkCommandBuffer.cpp | 2 +- .../src/Graphics/Commands/SHVkCommandBuffer.h | 2 +- .../src/Graphics/Images/SHVkImage.cpp | 3 +- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 2 +- .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 151 ++++++ .../Graphics/MiddleEnd/Interface/SHCamera.h | 80 +++ .../MiddleEnd/Interface/SHGraphicsConstants.h | 82 +++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 485 +++++++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 251 +++++---- .../MiddleEnd/Interface/SHMaterial.cpp | 67 +++ .../Graphics/MiddleEnd/Interface/SHMaterial.h | 75 +++ .../MiddleEnd/Interface/SHMaterial.hpp | 59 +++ .../Interface/SHMaterialInstance.cpp | 62 +++ .../MiddleEnd/Interface/SHMaterialInstance.h | 82 +++ .../Interface/SHMaterialInstance.hpp | 85 +++ .../MiddleEnd/Interface/SHMeshLibrary.cpp | 201 ++++++++ .../MiddleEnd/Interface/SHMeshLibrary.h | 187 +++++++ .../MiddleEnd/Interface/SHRenderTarget.cpp | 2 +- .../MiddleEnd/Interface/SHRenderable.cpp | 49 ++ .../MiddleEnd/Interface/SHRenderable.h | 60 +++ .../MiddleEnd/Interface/SHRenderer.cpp | 57 ++ .../Graphics/MiddleEnd/Interface/SHRenderer.h | 81 +++ .../MiddleEnd/Interface/SHViewport.cpp | 74 +++ .../Graphics/MiddleEnd/Interface/SHViewport.h | 81 +++ .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 52 ++ .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 57 ++ .../Pipeline/SHPipelineLayoutParams.h | 2 +- .../src/Graphics/Pipeline/SHPipelineState.h | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 2 +- .../BlockInterface/SHShaderBlockInterface.cpp | 50 +- .../BlockInterface/SHShaderBlockInterface.h | 8 +- 32 files changed, 2131 insertions(+), 328 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 4216ba03..5420e8c5 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -2,7 +2,7 @@ #include "SBApplication.h" #include "ECS_Base/Managers/SHSystemManager.h" -#define SHEDITOR +//#define SHEDITOR #ifdef SHEDITOR #include "Editor/SHEditor.h" //#include "Scenes/SBEditorScene.h" @@ -76,7 +76,9 @@ namespace Sandbox #endif graphicsSystem->Run(1.0f); graphicsSystem->EndRender(); - } + + SHADE::SHSystemManager::RunRoutines(false, 0.016f); + } } diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index f83087dd..b0139f8e 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -255,7 +255,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkCommandBuffer::SetviewportScissor(float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX /*= 0.0f*/, float vpY /*= 0.0f*/, int32_t sX /*= 0.0f*/, int32_t sY /*= 0.0f*/, float vpMinDepth /*= 0.0f*/, float vpMaxDepth /*= 1.0f*/) noexcept + void SHVkCommandBuffer::SetViewportScissor(float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX /*= 0.0f*/, float vpY /*= 0.0f*/, int32_t sX /*= 0.0f*/, int32_t sY /*= 0.0f*/, float vpMinDepth /*= 0.0f*/, float vpMaxDepth /*= 1.0f*/) noexcept { vk::Viewport dynamicViewport { diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 948092bf..888b805a 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -104,7 +104,7 @@ namespace SHADE void NextSubpass (void) noexcept; // Dynamic State - void SetviewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; + void SetViewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; // Binding Commands void BindPipeline (Handle const& pipelineHdl) noexcept; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index f3d5a7b5..6ec1c9f2 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -234,7 +234,7 @@ namespace SHADE return SHVkInstance::GetResourceManager().Create(inLogicalDeviceHdl, parent, createParams); } - void SHVkImage::TransferToDeviceResource(Handle const& cmdBufferHdl) noexcept + void SHVkImage::TransferToDeviceResource(void) noexcept { // prepare copy regions std::vector copyRegions{mipOffsets.size()}; @@ -252,6 +252,7 @@ namespace SHADE copyRegions[i].imageExtent = vk::Extent3D{ width >> i, height >> i, 1 }; } + //PrepareImageTransition(); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index a30b90e6..eec8dc7e 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -135,7 +135,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; - void TransferToDeviceResource (Handle const& cmdBufferHdl) noexcept; + void TransferToDeviceResource (void) noexcept; void PrepareImageTransition (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp new file mode 100644 index 00000000..2f8fb9ea --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -0,0 +1,151 @@ +/************************************************************************************//*! +\file SHCamera.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHCamera.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* View Set Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up) + { + const SHVec3 VIEW = (target - pos).Normalized(); + const SHVec3 RIGHT = SHVec3::Cross(VIEW, up).Normalized(); + const SHVec3 UP = SHVec3::Cross(RIGHT, VIEW); + + viewMatrix = SHMatrix::Identity; + viewMatrix(0, 0) = RIGHT[0]; + viewMatrix(1, 0) = RIGHT[1]; + viewMatrix(2, 0) = RIGHT[2]; + viewMatrix(0, 1) = UP[0]; + viewMatrix(1, 1) = UP[1]; + viewMatrix(2, 1) = UP[2]; + viewMatrix(0, 2) = -VIEW[0]; + viewMatrix(1, 2) = -VIEW[1]; + viewMatrix(2, 2) = -VIEW[2]; + viewMatrix(3, 0) = -RIGHT.Dot(pos); + viewMatrix(3, 1) = -UP.Dot(pos); + viewMatrix(3, 2) = VIEW.Dot(pos); + + isDirty = true; + } + + /*---------------------------------------------------------------------------------*/ + /* Projection Set Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::SetPerspective(float fov, float width, float height, float zNear, float zFar) + { + const float ASPECT_RATIO = width / height; + const float TAN_HALF_FOV = tan(fov * 0.5f); + projMatrix = SHMatrix::Identity; + projMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); + projMatrix(1, 1) = 1.0f / TAN_HALF_FOV; + projMatrix(2, 2) = zFar / (zFar - zNear); + projMatrix(2, 3) = 1.0f; + projMatrix(3, 2) = -(zFar * zNear) / (zFar - zNear); + + isDirty = true; + } + void SHCamera::SetOrthographic(float width, float height, float zNear, float zFar) + { + const float R = width * 0.5f; + const float L = -R; + const float T = height * 0.5f; + const float B = -T; + + projMatrix = SHMatrix::Identity; + projMatrix(0, 0) = 2.0f / (R - L); + projMatrix(1, 1) = 2.0f / (B - T); + projMatrix(2, 2) = 1.0f / (zFar - zNear); + projMatrix(3, 0) = -(R + L) / (R - L); + projMatrix(3, 1) = -(B + T) / (B - T); + projMatrix(3, 2) = -zNear / (zFar - zNear); + + isDirty = true; + } + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + SHMathMat4f SHCamera::GetViewMatrix() const + { + return viewMatrix; + } + + SHMathMat4f SHCamera::GetProjectionMatrix() const + { + return projMatrix; + } + SHMathMat4f SHCamera::GetViewProjectionMatrix() + { + updateMatrices(); + return vpMatrix; + } + + SHMathMat4f SHCamera::GetInverseViewMatrix() const + { + return inverseVpMatrix; + } + + SHMathMat4f SHCamera::GetInverseProjectionMatrix() const + { + return inverseProjMatrix; + } + + SHMathMat4f SHCamera::GetInverseViewProjectionMatrix() + { + updateMatrices(); + return inverseViewMatrix; + } + + /*---------------------------------------------------------------------------------*/ + /* Mapping Functions */ + /*---------------------------------------------------------------------------------*/ + SHVec3 SHCamera::ScreenToWorld(const SHVec3& vec) const + { + return multiplyHomogenous(inverseVpMatrix, vec); + } + SHVec3 SHCamera::WorldToScreen(const SHVec3& vec) const + { + return multiplyHomogenous(vpMatrix, vec); + } + SHVec3 SHCamera::CameraToWorld(const SHVec3& vec) const + { + return multiplyHomogenous(inverseViewMatrix, vec); + } + SHVec3 SHCamera::WorldToCamera(const SHVec3& vec) const + { + return multiplyHomogenous(viewMatrix, vec); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void SHCamera::updateMatrices() + { + if (isDirty) + { + vpMatrix = viewMatrix * projMatrix; + inverseVpMatrix = vpMatrix; + inverseVpMatrix.Inverse(); + } + } + SHVec3 SHCamera::multiplyHomogenous(const SHMathMat4f& mat, const SHVec3& vec) + { + const SHVec4 HOMO_VEC = { vec[0], vec[1], vec[2], 1.0f }; + const SHVec4 RESULT = mat * HOMO_VEC; + return SHVec3 { RESULT[0], RESULT[1], RESULT[2] }; + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h new file mode 100644 index 00000000..fa6e31b5 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h @@ -0,0 +1,80 @@ +/************************************************************************************//*! +\file SHCamera.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Math/SHMath.h" + +namespace SHADE +{ + /***********************************************************************************/ + /*! + \brief + Object that manages the view and projection transformations for rendering + a 3D scene. + */ + /***********************************************************************************/ + class SHCamera + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------*/ + /* View Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up); + + /*-----------------------------------------------------------------------------*/ + /* Projection Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetPerspective(float fov, float width, float height, float zNear, float zFar); + void SetOrthographic(float width, float height, float zNear, float zFar); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + SHMatrix GetViewMatrix() const; + SHMatrix GetProjectionMatrix() const; + SHMatrix GetViewProjectionMatrix(); + SHMatrix GetInverseViewMatrix() const; + SHMatrix GetInverseProjectionMatrix() const; + SHMatrix GetInverseViewProjectionMatrix(); + + /*-----------------------------------------------------------------------------*/ + /* Mapping Functions */ + /*-----------------------------------------------------------------------------*/ + SHVec3 ScreenToWorld(const SHVec3& vec) const; + SHVec3 WorldToScreen(const SHVec3& vec) const; + SHVec3 CameraToWorld(const SHVec3& vec) const; + SHVec3 WorldToCamera(const SHVec3& vec) const; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + SHMatrix viewMatrix; + SHMatrix projMatrix; + SHMatrix vpMatrix; + SHMatrix inverseViewMatrix; + SHMatrix inverseProjMatrix; + SHMatrix inverseVpMatrix; + bool isDirty; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void updateMatrices(); + static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHMatrix& vec); + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h new file mode 100644 index 00000000..b3bd52d0 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -0,0 +1,82 @@ +/************************************************************************************//*! +\file SHGraphicsSystem.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains definition of constants that relate to the SHGraphicsSystem. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +namespace SHADE +{ + /***********************************************************************************/ + /*! + \brief + Contains definition of constants related to the Graphics System. + */ + /***********************************************************************************/ + struct SHGraphicsConstants + { + public: + struct DescriptorSetIndex + { + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for static global values like generic data, and + texture samplers + */ + /***************************************************************************/ + static constexpr uint32_t STATIC_GLOBALS = 0; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for dynamic global values like lights. + */ + /***************************************************************************/ + static constexpr uint32_t DYNAMIC_GLOBALS = 1; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for high frequency changing global values like + camera matrices. + */ + /***************************************************************************/ + static constexpr uint32_t HIGH_FREQUENCY_GLOBALS = 2; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for per-instance/material changing values. + */ + /***************************************************************************/ + static constexpr uint32_t PER_INSTANCE = 3; + + }; + + struct DescriptorSetBindings + { + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for per instance material values. + */ + /***************************************************************************/ + static constexpr uint32_t BATCHED_PER_INST_DATA = 0; + }; + + /*******************************************************************************/ + /*! + \brief + Number of frame buffers used by the Graphics System. + */ + /*******************************************************************************/ + static constexpr int NUM_FRAME_BUFFERS = 3; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index bb5bfc8b..e19aee57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -3,14 +3,14 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 -\brief +\brief + - Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ -#include "SHPch.h" +#include "SHpch.h" #include "SHGraphicsSystem.h" #include "Graphics/Instance/SHVkInstance.h" @@ -19,251 +19,370 @@ of DigiPen Institute of Technology is prohibited. //#include "SHRenderer.h" #include "Graphics/Windowing/SHWindow.h" #include "Graphics/MiddleEnd/PerFrame/SHPerFrameData.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" +#include "Graphics/MiddleEnd/Interface/SHRenderer.h" +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*---------------------------------------------------------------------------------*/ - void SHGraphicsSystem::Init(void) - { - // Set Up Instance - SHVkInstance::Init(true, true, true); + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + void SHGraphicsSystem::Init(void) + { + /*-----------------------------------------------------------------------*/ + /* BACKEND BOILERPLATE */ + /*-----------------------------------------------------------------------*/ + // Set Up Instance + SHVkInstance::Init(true, true, true); - // Get Physical Device and Construct Logical Device - // TODO: Provide configuration for these options - physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); - device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); + // Get Physical Device and Construct Logical Device + // TODO: Provide configuration for these options + physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); + device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); - // Construct surface - surface = device->CreateSurface(window->GetHWND()); + // Construct surface + surface = device->CreateSurface(window->GetHWND()); - // Construct Swapchain - auto windowDims = window->GetWindowSize(); - swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams - { - .surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm}, - .depthFormats {vk::Format::eD32Sfloat, vk::Format::eD32SfloatS8Uint, vk::Format::eD24UnormS8Uint}, - .presentModes {vk::PresentModeKHR::eFifo, vk::PresentModeKHR::eMailbox, vk::PresentModeKHR::eImmediate}, - .vsyncOn = false, // TODO: Set to true when shipping game - }); + // Construct Swapchain + auto windowDims = window->GetWindowSize(); + swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams + { + .surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm}, + .depthFormats {vk::Format::eD32Sfloat, vk::Format::eD32SfloatS8Uint, vk::Format::eD24UnormS8Uint}, + .presentModes {vk::PresentModeKHR::eFifo, vk::PresentModeKHR::eMailbox, vk::PresentModeKHR::eImmediate}, + .vsyncOn = false, // TODO: Set to true when shipping game + }); - window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) - { - renderContext.SetIsResized(true); - }); + // Register callback to notify render context upon a window resize + window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) + { + renderContext.SetIsResized(true); + }); - // Create graphics queue - graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); - + // Create graphics queue + graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); - // Create Render Context - renderContext.Init - ( - device, - SHPerFrameDataParams - { - .swapchainHdl = swapchain, - .numThreads = 1, - .cmdPoolQueueFamilyType = SH_Q_FAM::GRAPHICS, - .cmdPoolResetMode = SH_CMD_POOL_RESET::POOL_BASED, - .cmdBufferTransient = true, - } - ); - // Create Frame and Command Buffers - for (int i = 0; i < NUM_FRAME_BUFFERS; ++i) - { - //frameBuffers[i] = device->CreateFramebuffer(renderPass, { renderContext.GetFrameData(i).swapchainImageViewHdl }, windowDims[0], windowDims[1]); - SHPerFrameData& frameData = renderContext.GetFrameData(i); + // Create Render Context + renderContext.Init + ( + device, + SHPerFrameDataParams + { + .swapchainHdl = swapchain, + .numThreads = 1, + .cmdPoolQueueFamilyType = SH_Q_FAM::GRAPHICS, + .cmdPoolResetMode = SH_CMD_POOL_RESET::POOL_BASED, + .cmdBufferTransient = true, + } + ); - if (frameData.cmdPoolHdls.empty()) - throw std::runtime_error("No command pools available!"); + // Create a descriptor pool + descPool = device->CreateDescriptorPools(); - Handle commandPool = frameData.cmdPoolHdls[0]; - //commandBuffers[i] = commandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); // works - } - - descPool = device->CreateDescriptorPools(); + // Create generic command buffer + transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::TRANSFER, SH_CMD_POOL_RESET::POOL_BASED, true); + transferCmdBuffer = transferCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - /*-----------------------------------------------------------------------*/ - /* RENDERGRAPH TESTING */ - /*-----------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------*/ + /* MIDDLE END SETUP + - Viewports + - Renderer + - Render graph in renderers + - Render graph command buffer semaphores + - Default vertex input state + /*-----------------------------------------------------------------------*/ + // Set Up Cameras + screenCamera = resourceManager.Create(); + screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); + screenCamera->SetOrthographic(windowDims.first, windowDims.second, 0.01f, 100.0f); + worldCamera = resourceManager.Create(); + worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); + worldCamera->SetPerspective(90.0f, windowDims.first, windowDims.second, 0.0f, 100.0f); - renderGraph.Init(device, swapchain); - renderGraph.AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Downscale", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - renderGraph.AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = renderGraph.AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors - - // First subpass to write to G-Buffer + // Create Default Viewport + defaultViewport = AddViewport(vk::Viewport(0, 0, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); + + // Create Debug Renderers + debugScreenRenderer = defaultViewport->AddRenderer(resourceManager); + debugScreenRenderer->SetCamera(screenCamera); + debugWorldRenderer = defaultViewport->AddRenderer(resourceManager); + debugWorldRenderer->SetCamera(worldCamera); + + // Add world renderer to default viewport + worldRenderer = defaultViewport->AddRenderer(resourceManager); + worldRenderer->SetCamera(worldCamera); + + // Get render graph from default viewport world renderer + auto worldRenderGraph = worldRenderer->GetRenderGraph(); + + // Initialize world render graph + worldRenderGraph->Init(device, swapchain); + worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); + auto node = worldRenderGraph->AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors + + //First subpass to write to G-Buffer auto writeSubpass = node->AddSubpass("G-Buffer Write"); writeSubpass->AddColorOutput("Position"); - //writeSubpass->AddColorOutput("Present"); + writeSubpass->AddColorOutput("Normals"); - // Second subpass to read from G-Buffer - //auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); - // compositeSubpass->AddColorOutput("Composite"); - // compositeSubpass->AddInput("Normals"); - // compositeSubpass->AddInput("Position"); + //Second subpass to read from G-Buffer + auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); + compositeSubpass->AddColorOutput("Present"); // TODO: This should be "Composite" and then composite will write to swapchain image "Present" + compositeSubpass->AddInput("Normals"); + compositeSubpass->AddInput("Position"); - auto imguiNode = renderGraph.AddNode("ImGui Node", { "Present" }, {}); // no predecessors - auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - imguiSubpass->AddColorOutput("Present"); + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); - //auto compositeNode = renderGraph.AddNode("Bloom", { "Composite", "Downscale", "Present" }, { "G-Buffer" }); - //auto bloomSubpass = compositeNode->AddSubpass("Downsample"); - //bloomSubpass->AddInput("Composite"); - //bloomSubpass->AddColorOutput("Downscale"); - //bloomSubpass->AddColorOutput("Present"); + worldRenderGraph->Generate(); - renderGraph.Generate(); + // Create Semaphore + for (auto& semaHandle : graphSemaphores) + { + semaHandle = device->CreateSemaphore(); + } + ConfigureDefaultVertexInputState(); + //pipelineLibrary.Init(device, &defaultVertexInputState, ); + } - /*-----------------------------------------------------------------------*/ - /* RENDERGRAPH END TESTING */ - /*-----------------------------------------------------------------------*/ - } - - void SHGraphicsSystem::Run(float dt) noexcept + /***************************************************************************/ + /*! + + \brief + Main render loop. Loops through viewports -> renderers -> invoke render + graphs sequentially using semaphores. + + \param dt + + \return + + */ + /***************************************************************************/ + void SHGraphicsSystem::Run(double dt) noexcept { + // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); - renderGraph.Execute(renderContext.GetCurrentFrame()); + // semaphore index. This is for render graphs to have semaphores to signal that the next render graph will use to wait on. + bool semIndex = 0; - graphicsQueue->SubmitCommandBuffer({ renderGraph.GetCommandBuffer(renderContext.GetCurrentFrame()) }, - { frameData.semRenderFinishHdl }, - { frameData.semImgAvailableHdl }, - vk::PipelineStageFlagBits::eColorAttachmentOutput | vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests); + // For every viewport + for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) + { + auto const& renderers = viewports[vpIndex]->GetRenderers(); + // For every renderer + for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) + { + // Draw first + renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + + // get render graph + auto rg = renderers[renIndex]->GetRenderGraph(); + + // submit a command buffer from the current render graph and make it wait for the previous render graph before submitting it to GPU. + graphicsQueue->SubmitCommandBuffer + ( + { rg->GetCommandBuffer(renderContext.GetCurrentFrame()) }, + { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex]}, + { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex]}, + {} + ); + + semIndex = !semIndex; + } + } } void SHGraphicsSystem::Exit(void) - { - //renderPass.Free(); - renderContext.Destroy(); - graphicsQueue.Free(); - swapchain.Free(); - surface.Free(); - device.Free(); + { + renderContext.Destroy(); + graphicsQueue.Free(); + swapchain.Free(); + surface.Free(); + device.Free(); - SHVkInstance::Destroy(); - } + SHVkInstance::Destroy(); + } - /*---------------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*---------------------------------------------------------------------------------*/ - /***************************************************************************/ - /*! - - \brief - Checks for window resize and acquire next image in swapchain. - - - - */ - /***************************************************************************/ - void SHGraphicsSystem::BeginRender() - { + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + /***************************************************************************/ + /*! + + \brief + Checks for window resize and acquire next image in swapchain. + + + + */ + /***************************************************************************/ + void SHGraphicsSystem::BeginRender() + { auto windowDims = window->GetWindowSize(); if (renderContext.GetResizeAndReset()) - { + { device->WaitIdle(); // Resize the swapchain swapchain->Resize(surface, windowDims.first, windowDims.second); renderContext.HandleResize(); - } + } - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - - // #BackEndTest: For for the fence initialized by queue submit - renderContext.WaitForFence(); + const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - // #BackEndTest: Acquire the next image in the swapchain available - renderContext.AcquireNextIamge(); + // #BackEndTest: For for the fence initialized by queue submit + renderContext.WaitForFence(); - // #BackEndTest: Get the current frame from frame manager - auto& currFrameData = renderContext.GetCurrentFrameData(); + // #BackEndTest: Acquire the next image in the swapchain available + renderContext.AcquireNextIamge(); - // #BackEndTest: Reset command pool - if (currFrameData.cmdPoolHdls.empty()) - throw std::runtime_error("No command pools available!"); - currFrameData.cmdPoolHdls[0]->Reset(); + // #BackEndTest: Get the current frame from frame manager + auto& currFrameData = renderContext.GetCurrentFrameData(); - } + // #BackEndTest: Reset command pool + if (currFrameData.cmdPoolHdls.empty()) + throw std::runtime_error("No command pools available!"); + currFrameData.cmdPoolHdls[0]->Reset(); - /***************************************************************************/ - /*! - - \brief - Check if need to resize and advance the frame in the render context. - - */ - /***************************************************************************/ - void SHGraphicsSystem::EndRender() - { - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); - auto& currFrameData = renderContext.GetCurrentFrameData(); + } - // #BackEndTest: Prepare to present current image - vk::PresentInfoKHR presentInfo{}; - presentInfo.waitSemaphoreCount = 1; - presentInfo.pWaitSemaphores = &currFrameData.semRenderFinishHdl->GetVkSem(); - presentInfo.swapchainCount = 1; - presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); - presentInfo.pImageIndices = &CURR_FRAME_IDX; + /***************************************************************************/ + /*! - // #BackEndTest: queues an image for presentation - if (auto result = graphicsQueue->Present(swapchain, {currFrameData.semRenderFinishHdl}, CURR_FRAME_IDX); result != vk::Result::eSuccess) - { - // If swapchain is incompatible/outdated - if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) - { + \brief + Check if need to resize and advance the frame in the render context. + + */ + /***************************************************************************/ + void SHGraphicsSystem::EndRender() + { + const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); + auto& currFrameData = renderContext.GetCurrentFrameData(); + + // #BackEndTest: Prepare to present current image + vk::PresentInfoKHR presentInfo{}; + presentInfo.waitSemaphoreCount = 1; + presentInfo.pWaitSemaphores = &currFrameData.semRenderFinishHdl->GetVkSem(); + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); + presentInfo.pImageIndices = &CURR_FRAME_IDX; + + // #BackEndTest: queues an image for presentation + if (auto result = graphicsQueue->Present(swapchain, { currFrameData.semRenderFinishHdl }, CURR_FRAME_IDX); result != vk::Result::eSuccess) + { + // If swapchain is incompatible/outdated + if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) + { auto windowDims = window->GetWindowSize(); swapchain->Resize(surface, windowDims.first, windowDims.second); renderContext.HandleResize(); - } - } - - // #BackEndTest: Cycle frame count - renderContext.AdvanceFrame(); - } - //Handle SHGraphicsSystem::AddRenderer() - //{ - // return Handle(); - //} - //void SHGraphicsSystem::RemoveRenderer(Handle renderer) - //{ - //} - Handle SHGraphicsSystem::AddSegment(const VkViewport& viewport, Handle imageToUse) - { - return Handle(); - } - void SHGraphicsSystem::RemoveSegment(Handle segment) - { - } + } + } + // #BackEndTest: Cycle frame count + renderContext.AdvanceFrame(); + } + + Handle SHGraphicsSystem::AddViewport(const vk::Viewport& viewport) + { + // Create the viewport + auto vp = SHVkInstance::GetResourceManager().Create(device, viewport); + viewports.emplace_back(vp); + return vp; + } + + void SHGraphicsSystem::RemoveViewport(Handle viewport) + { + // Check if the viewport exists + auto iter = std::find(viewports.begin(), viewports.end(), viewport); + if (iter == viewports.end()) + throw std::invalid_argument("Attempted to remove viewport that does not belong to this Graphics System."); + + // Remove + viewport.Free(); + viewports.erase(iter); + } + + Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader) + { + // Retrieve pipeline from pipeline storage or create if unavailable + auto shaderPair = std::make_pair(vertShader, fragShader); + Handle pipeline = pipelineLibrary.GetDrawPipline(shaderPair); + if (!pipeline) + { + pipeline = pipelineLibrary.CreateDrawPipeline + ( + shaderPair, + + ); + } + + // Create material + auto mat = resourceManager.Create(); + mat->SetPipeline(pipeline); + + return mat; + } + + void SHGraphicsSystem::RemoveMaterial(Handle material) + { + resourceManager.Free(material); + } + + Handle SHGraphicsSystem::AddMaterialInstance(Handle material) + { + return resourceManager.Create(material); + } + + void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) + { + resourceManager.Free(materialInstance); + } + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { - window = wind; + window = wind; } - SHRenderGraph const& SHGraphicsSystem::GetRenderGraph(void) const noexcept + void SHGraphicsSystem::ConfigureDefaultVertexInputState(void) noexcept { - return renderGraph; + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // positions at binding 0 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_2D)}); // UVs at binding 1 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 + defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) } - void SHGraphicsSystem::SHGraphicsSystemRoutine::Execute(double dt) noexcept + void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept { + reinterpret_cast(system)->BeginRender(); + } + + void SHGraphicsSystem::RenderRoutine::Execute(double dt) noexcept + { + reinterpret_cast(system)->Run(dt); + } + + void SHGraphicsSystem::EndRoutine::Execute(double) noexcept + { + reinterpret_cast(system)->EndRender(); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index bd1ccc9b..55238ce6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -3,11 +3,11 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 -\brief +\brief + - Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once @@ -24,138 +24,161 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" +#include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" namespace SHADE { - - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ - class SHVkPhysicalDevice; - class SHVkLogicalDevice; - class SHVkSurface; - class SHVkSwapchain; - class SHScreenSegment; - //class SHRenderer; - class SHWindow; - class SHVkImage; - class SHVkFramebuffer; - class SHVkCommandBuffer; - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - /***********************************************************************************/ - /*! - \brief - Represents an axis aligned box on the screen to render to along with the - specified Image to render to that spot. - */ - /***********************************************************************************/ - struct SHScreenSegment - { - VkViewport Viewport; - Handle ImageToUse; - }; + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkPhysicalDevice; + class SHVkLogicalDevice; + class SHVkSurface; + class SHVkSwapchain; + class SHScreenSegment; + class SHWindow; + class SHVkImage; + class SHVkFramebuffer; + class SHVkCommandBuffer; + class SHRenderer; + class SHViewport; + class SHCamera; + class SHVkShaderModule; - /***********************************************************************************/ - /*! - \brief - Manages the lifecycle and provides an interface for rendering multiple objects to - portions of the screen. - */ - /***********************************************************************************/ - class SH_API SHGraphicsSystem : public SHSystem - { - public: - class SH_API SHGraphicsSystemRoutine : public SHSystemRoutine + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Manages the lifecycle and provides an interface for rendering multiple objects to + portions of the screen. + */ + /***********************************************************************************/ + class SH_API SHGraphicsSystem : public SHSystem + { + public: + class SH_API BeginRoutine final : public SHSystemRoutine { - public: - virtual void Execute(double dt) noexcept override; + public: + virtual void Execute(double dt) noexcept override final; + }; + class SH_API RenderRoutine final : public SHSystemRoutine + { + public: + virtual void Execute(double dt) noexcept override final; + }; + class SH_API EndRoutine final : public SHSystemRoutine + { + public: + virtual void Execute(double dt) noexcept override final; }; - public: - /*-----------------------------------------------------------------------------*/ - /* Constants */ - /*-----------------------------------------------------------------------------*/ - static constexpr int NUM_FRAME_BUFFERS = 3; + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + static constexpr int NUM_FRAME_BUFFERS = 3; - /*-----------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*-----------------------------------------------------------------------------*/ - SHGraphicsSystem (void) = default; - ~SHGraphicsSystem(void) noexcept = default; + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHGraphicsSystem(void) = default; + ~SHGraphicsSystem(void) noexcept = default; - /*-----------------------------------------------------------------------------*/ - /* SHSystem overrides */ - /*-----------------------------------------------------------------------------*/ - virtual void Init(void) override; - void Run (float dt) noexcept; - virtual void Exit(void) override; + /*-----------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*-----------------------------------------------------------------------------*/ + virtual void Init(void) override final; + void Run(double dt) noexcept; + virtual void Exit(void) override final; - /*-----------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*-----------------------------------------------------------------------------*/ - void BeginRender(); - void EndRender(); + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + void BeginRender(); + void EndRender(); - /*-----------------------------------------------------------------------------*/ - /* Renderers Registration Functions */ - /*-----------------------------------------------------------------------------*/ - //Handle AddRenderer(); - //void RemoveRenderer(Handle renderer); + /*-----------------------------------------------------------------------------*/ + /* Viewport Registration Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddViewport(const vk::Viewport& viewport); + void RemoveViewport(Handle viewport); - /*-----------------------------------------------------------------------------*/ - /* Viewport Registration Functions */ - /*-----------------------------------------------------------------------------*/ - Handle AddSegment(const VkViewport& viewport, Handle imageToUse); - void RemoveSegment(Handle segment); + /*-----------------------------------------------------------------------------*/ + /* Material Creation Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddMaterial(Handle vertShader, Handle fragShader); + void RemoveMaterial(Handle material);; + Handle AddMaterialInstance(Handle material); + void RemoveMaterialInstance(Handle materialInstance); + - /*-----------------------------------------------------------------------------*/ - /* Setters */ - /*-----------------------------------------------------------------------------*/ - void SetWindow (SHWindow* wind) noexcept; + /*-----------------------------------------------------------------------------*/ + /* Setters */ + /*-----------------------------------------------------------------------------*/ + void SetWindow(SHWindow* wind) noexcept; - /*-----------------------------------------------------------------------------*/ - /* Getters (Temporary) */ - /*-----------------------------------------------------------------------------*/ - Handle GetDevice() const { return device; } - Handle GetSwapchain() const { return swapchain; } - Handle GetSurface() const { return surface; } - Handle GetPhysicalDevice() const {return physicalDevice;} + /*-----------------------------------------------------------------------------*/ + /* Getters (Temporary) */ + /*-----------------------------------------------------------------------------*/ + Handle GetDevice() const { return device; } + Handle GetSwapchain() const { return swapchain; } + Handle GetSurface() const { return surface; } + Handle GetPhysicalDevice() const { return physicalDevice; } Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } - SHRenderGraph const& GetRenderGraph (void) const noexcept; + //SHRenderGraph const& GetRenderGraph(void) const noexcept; - //Handle GetRenderPass() const { return renderPass; } + //Handle GetRenderPass() const { return renderPass; } - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - // Owned Resources - Handle physicalDevice; - Handle device; - Handle surface; - Handle swapchain; - Handle graphicsQueue; - Handle descPool; - //Handle renderPass; // Potentially bring out? - std::vector screenSegments; - SHRenderContext renderContext; - //std::array, NUM_FRAME_BUFFERS> frameBuffers; - //std::array, NUM_FRAME_BUFFERS> commandBuffers; + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Owned Vulkan Resources + Handle physicalDevice; + Handle device; + Handle surface; + Handle swapchain; + Handle graphicsQueue; + Handle descPool; + Handle transferCmdPool; + Handle transferCmdBuffer; + SHRenderContext renderContext; + std::array, 2> graphSemaphores; - // Not Owned Resources - SHWindow* window; - // Renderers - //Handle debugWorldRenderer; - //Handle debugScreenRenderer; - //std::vector renderers; - SHRenderGraph renderGraph; + // Not Owned Resources + SHWindow* window; - friend SHGraphicsSystemRoutine; - }; + SHPipelineLibrary pipelineLibrary; + + std::vector globalDescSetLayouts; + + // Middle End Resources + ResourceManager resourceManager; + // Viewports + Handle defaultViewport; // Whole screen + std::vector> viewports; // Additional viewports + // Debug Renderers + Handle debugWorldRenderer; + Handle debugScreenRenderer; + + // Temp Cameras + Handle worldCamera; + Handle screenCamera; + + // Temp renderers + Handle worldRenderer; + + SHVertexInputState defaultVertexInputState; + + /*-----------------------------------------------------------------------------*/ + /* Private member functions */ + /*-----------------------------------------------------------------------------*/ + void ConfigureDefaultVertexInputState (void) noexcept; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp new file mode 100644 index 00000000..71e72331 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp @@ -0,0 +1,67 @@ +#include "SHpch.h" +#include "SHMaterial.h" + +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "SHGraphicsConstants.h" +#include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Pipeline Functions */ + /*---------------------------------------------------------------------------------*/ + void SHMaterial::SetPipeline(Handle _pipeline) + { + pipeline = _pipeline; + + // Set up properties based on the pipeline + if (!pipeline) + { + // Clear memory and all that + propMemory.reset(); + return; + } + + // Allocate memory for properties + propMemorySize = getShaderBlockInterface()->GetBytesRequired(); + propMemory.reset(new char[propMemorySize]); + ResetProperties(); + } + + Handle SHMaterial::GetPipeline() const + { + return pipeline; + } + + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + void SHMaterial::ResetProperties() + { + // Reset all the properties to default values + memset(propMemory.get(), 0, propMemorySize); + } + + void SHMaterial::ExportProperties(void* dest) const noexcept + { + memcpy(dest, propMemory.get(), propMemorySize); + } + + size_t SHMaterial::GetPropertiesMemorySize() const noexcept + { + return getShaderBlockInterface()->GetBytesRequired(); + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHMaterial::getShaderBlockInterface() const noexcept + { + return pipeline->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + ); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h new file mode 100644 index 00000000..692d857f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h @@ -0,0 +1,75 @@ +/************************************************************************************//*! +\file SHMaterial.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains the class definition of SHMaterial. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" +#include "SHCommonTypes.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkPipeline; + class SHShaderBlockInterface; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Describes a Pipeline along with it's associated properties for this instance. + */ + /***********************************************************************************/ + class SHMaterial + { + public: + /*-----------------------------------------------------------------------------*/ + /* Pipeline Functions */ + /*-----------------------------------------------------------------------------*/ + void SetPipeline(Handle _pipeline); + Handle GetPipeline() const; + + /*-----------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------*/ + template + void SetProperty(const std::string& key, const T& value); + template + T& GetProperty(const std::string& key); + template + const T& GetProperty(const std::string& key) const; + void ResetProperties(); + void ExportProperties(void* dest) const noexcept; + Byte GetPropertiesMemorySize() const noexcept; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle pipeline; + std::unique_ptr propMemory; + Byte propMemorySize; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + Handle getShaderBlockInterface() const noexcept; + }; +} + +#include "SHMaterial.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp new file mode 100644 index 00000000..49587921 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp @@ -0,0 +1,59 @@ +/************************************************************************************//*! +\file SHMaterial.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the template function definitions of SHMaterial. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "SHMaterial.h" + +#include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" + + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + template + void SHMaterial::SetProperty(const std::string& key, const T& value) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Get offset and modify the memory directly + T* dataPtr = propMemory.get() + PROP_INFO->offset; + *dataPtr = value; + } + template + T& SHMaterial::GetProperty(const std::string& key) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Get offset and return the memory directly + T* dataPtr = propMemory.get() + PROP_INFO->offset; + return *dataPtr; + } + template + const T& SHMaterial::GetProperty(const std::string& key) const + { + return const_cast(const_cast(this)->GetProperty(key)); + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp new file mode 100644 index 00000000..5f697208 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp @@ -0,0 +1,62 @@ +/************************************************************************************//*! +\file SHMaterialInstance.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the definition of functions of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMaterialInstance.h" +#include "Tools/SHLogger.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------------*/ + SHMaterialInstance::SHMaterialInstance(Handle material) + : baseMaterial { material } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHMaterialInstance::ResetProperties() noexcept + { + + // Reset all the properties to default values + memset(dataStore.get(), 0, dataStoreSize); + overrideData.clear(); + dataStore.reset(); + } + + void SHMaterialInstance::ExportProperties(void* dest) const + { + assert(dataStore != nullptr); + + if (!baseMaterial) + throw std::runtime_error("[SHMaterialInstance] Attempted to set export a Material Instance with no base Material!"); + + // Copy default data from Material + baseMaterial->ExportProperties(dest); + + // Follow up with copying our data over + const auto SHADER_INFO = getShaderBlockInterface(); + for (const auto& data : overrideData) + { + // Get memory offset to the data + SHShaderBlockInterface::Variable variable = SHADER_INFO->GetVariable(data.Index); + if (variable == nullptr) + { + SHLOG_WARNING("[SHMaterialInstance] Invalid override data indices provided. Skipping."); + continue; + } + const auto DATA_OFFSET = variable->offset; + memcpy_s(dest + DATA_OFFSET, dataStore.get() + data.StoredDataOffset, data.DataSize); + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h new file mode 100644 index 00000000..d2b222e6 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h @@ -0,0 +1,82 @@ +/************************************************************************************//*! +\file SHMaterialInstance.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the class definition of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHMaterial; + class SHGraphicsSystem; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Describes an instance of a SHMaterial that can be used to describe how to render + a SHRenderable. + */ + /***********************************************************************************/ + class SHMaterialInstance + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + struct OverrideData + { + size_t Index; + size_t DataSize; + size_t StoredDataOffset; + }; + + /*-----------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------*/ + SHMaterialInstance(Handle material = {}); + + /*-----------------------------------------------------------------------------*/ + /* Property Functions */ + /*-----------------------------------------------------------------------------*/ + template + void SetProperty(const std::string& key, const T& value); + template + T& GetProperty(const std::string& key); + template + const T& GetProperty(const std::string& key) const; + void ResetProperties() noexcept; + void ExportProperties(void* dest) const; + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetBaseMaterial() const { return baseMaterial; } + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle baseMaterial; + std::vector overrideData; + std::unique_ptr dataStore; + size_t dataStoreSize = 0; + }; +} + +#include "SHMaterialInstance.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp new file mode 100644 index 00000000..9980dfae --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp @@ -0,0 +1,85 @@ +/************************************************************************************//*! +\file SHMaterialInstance.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 17, 2022 +\brief Contains the definition of functions templates of SHMaterialInstance. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +#include "SHMaterialInstance.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Property Functions */ + /*---------------------------------------------------------------------------------*/ + template + void SHMaterialInstance::SetProperty(const std::string& key, const T& value) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to set an invalid property!"); + } + + // Allocate data store if it was empty + if (dataStore == nullptr) + { + dataStoreSize = SHADER_INFO->GetBytesRequired();dataStoreSize + dataStore.reset(new char[dataStoreSize]); + } + + OverrideData od; + od.Index = SHADER_INFO.GetVariableIndex(key); + od.DataSize = sizeof(T); + if (overrideData.empty()) + { + od.StoredDataOffset = 0; + } + else + { + const OverrideData& lastInsertedData = overrideData.back(); + od.StoredDataOffset = lastInsertedData.StoredDataOffset + lastInsertedData.DataSize; + } + + // Get offset and modify the memory directly + T* dataPtr = dataStore.get() + od.StoredDataOffset; + *dataPtr = value; + + // Save the override data information + overrideData.emplace_back(std::move(od)); + } + template + T& SHMaterialInstance::GetProperty(const std::string& key) + { + const auto SHADER_INFO = getShaderBlockInterface(); + const auto PROP_INFO = SHADER_INFO->GetVariable(key); + if (PROP_INFO == nullptr) + { + throw std::invalid_argument("Attempted to get an invalid property!"); + } + + // Search Override Data for the property + uint32_t PROP_IDX = SHADER_INFO.GetVariableIndex(key); + auto prop = std::find(overrideData.begin(), overrideData.end(), [&](const OverrideData& data) + { + return PROP_IDX == data.Index; + }); + if (prop == overrideData.end()) + throw std::invalid_argument("Attempted to get an property that was not set previously!"); + + // Get offset and return the memory directly + T* dataPtr = dataStore.get() + prop->StoredDataOffset; + return *dataPtr; + } + template + const T& SHMaterialInstance::GetProperty(const std::string& key) const + { + return const_cast(const_cast(this)->GetProperty(key)); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp new file mode 100644 index 00000000..3474fea3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp @@ -0,0 +1,201 @@ +/************************************************************************************//*! +\file SHMeshLibrary.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains definitions for all of the functions of the classes that deal + with storage and management of vertex and index buffers of meshes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMeshLibrary.h" + +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "../../SHVkUtil.h" + +namespace SHADE +{ + SHADE::Handle SHMeshLibrary::AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices) + { + isDirty = true; + + auto handle = meshes.Create(); + meshAddJobs.emplace_back( MeshAddJob + { + vertexCount, + positions, + texCoords, + tangents, + normals, + indexCount, + indices, + handle + }); + return handle; + } + + void SHMeshLibrary::RemoveMesh(Handle mesh) + { + if (!mesh) + throw std::invalid_argument("Attempted to remove a Mesh that did not belong to the Mesh Library!"); + + meshRemoveJobs.emplace_back(mesh); + isDirty = true; + } + + void SHMeshLibrary::BuildBuffers(Handle device, Handle cmdBuffer) + { + // No changes + if (!isDirty) + return; + + // Remove + if (!meshRemoveJobs.empty()) + { + // - Remove from order list + for (const auto& meshToRemove : meshRemoveJobs) + { + auto searchResult = std::find(meshOrder.begin(), meshOrder.end(), meshToRemove); + // Shouldn't happen, ignore + if (searchResult == meshOrder.end()) + continue; + + // Remove from mesh list + meshOrder.erase(searchResult); + } + meshRemoveJobs.clear(); + // - Shift existing elements in to close up the gaps + int32_t nextVertInsertPoint = 0; + uint32_t nextIdxInsertPoint = 0; + for (auto& mesh : meshOrder) + { + // Check if already in the correct place + if (nextVertInsertPoint != mesh->FirstVertex) + { + /* There's a gap, we need to shift */ + // Vertices + vertPosStorage.erase(vertPosStorage.begin() + nextVertInsertPoint, vertPosStorage.begin() + mesh->FirstVertex); + vertTexCoordStorage.erase(vertTexCoordStorage.begin() + nextVertInsertPoint, vertTexCoordStorage.begin() + mesh->FirstVertex); + vertTangentStorage.erase(vertTangentStorage.begin() + nextVertInsertPoint, vertTangentStorage.begin() + mesh->FirstVertex); + vertNormalStorage.erase(vertNormalStorage.begin() + nextVertInsertPoint, vertNormalStorage.begin() + mesh->FirstVertex); + // - Update mesh data + mesh->FirstVertex = nextVertInsertPoint; + + // Indices + indexStorage.erase(indexStorage.begin() + nextIdxInsertPoint, indexStorage.begin() + mesh->FirstIndex); + // - Update mesh data + mesh->FirstIndex = nextIdxInsertPoint; + + // Prepare for next + nextVertInsertPoint += mesh->VertexCount; + nextIdxInsertPoint += mesh->IndexCount; + } + } + } + + // Add + if (!meshAddJobs.empty()) + { + // - Compute updated size + size_t newVertElems = vertPosStorage.size(); + size_t newIdxElems = indexStorage.size(); + for (const auto& addJob : meshAddJobs) + { + newVertElems += addJob.VertexCount; + newIdxElems += addJob.IndexCount; + } + // - Reserve new memory + vertPosStorage .reserve(newVertElems); + vertTexCoordStorage.reserve(newVertElems); + vertTangentStorage .reserve(newVertElems); + vertNormalStorage .reserve(newVertElems); + indexStorage .reserve(newIdxElems); + // - Append new data + for (auto& addJob : meshAddJobs) + { + // Update handle + SHMesh& meshData = *addJob.Handle; + meshData = SHMesh + { + .FirstVertex = static_cast(vertPosStorage.size()), + .VertexCount = static_cast(addJob.VertexCount), + .FirstIndex = static_cast(indexStorage.size()), + .IndexCount = static_cast(addJob.IndexCount), + }; + + // Copy into storage + vertPosStorage.insert + ( + vertPosStorage.end(), + addJob.VertexPositions, addJob.VertexPositions + addJob.VertexCount + ); + vertTexCoordStorage.insert + ( + vertTexCoordStorage.end(), + addJob.VertexTexCoords, addJob.VertexTexCoords + addJob.VertexCount + ); + vertTangentStorage.insert + ( + vertTangentStorage.end(), + addJob.VertexTangents, addJob.VertexTangents + addJob.VertexCount + ); + vertNormalStorage.insert + ( + vertNormalStorage.end(), + addJob.VertexNormals, addJob.VertexNormals + addJob.VertexCount + ); + indexStorage.insert + ( + indexStorage.end(), + addJob.Indices, addJob.Indices + addJob.IndexCount + ); + } + meshAddJobs.clear(); + } + + // Send to GPU + using BuffUsage = vk::BufferUsageFlagBits; + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertPosBuffer, + vertPosStorage.data(), + static_cast(vertPosStorage.size()) * sizeof(SHMesh::VertexPosition), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertTexCoordBuffer, + vertTexCoordStorage.data(), + static_cast(vertTexCoordStorage.size()) * sizeof(SHMesh::VertexTexCoord), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertTangentBuffer, + vertTangentStorage.data(), + static_cast(vertTangentStorage.size()) * sizeof(SHMesh::VertexTangent), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, vertNormalBuffer, + vertNormalStorage.data(), + static_cast(vertNormalStorage.size()) * sizeof(SHMesh::VertexNormal), + BuffUsage::eVertexBuffer + ); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, indexBuffer, + indexStorage.data(), + static_cast(indexStorage.size()) * sizeof(SHMesh::Index), + BuffUsage::eIndexBuffer + ); + + isDirty = false; + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h new file mode 100644 index 00000000..f8a89687 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h @@ -0,0 +1,187 @@ +/************************************************************************************//*! +\file SHMeshLibrary.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains definitions for all of the classes that deal with storage and + management of vertex and index buffers of meshes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" +#include "Resource/ResourceLibrary.h" +#include "SHVertex.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkLogicalDevice; + class SHVkCommandBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Represents a single mesh that is stored in a SHMeshLibrary. + */ + /***********************************************************************************/ + class SHMesh + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using Index = uint32_t; + using VertexPosition = SHMathVec3f; + using VertexTexCoord = SHMathVec2f; + using VertexTangent = SHMathVec3f; + using VertexNormal = SHMathVec3f; + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + int32_t FirstVertex; + uint32_t VertexCount; + uint32_t FirstIndex; + uint32_t IndexCount; + }; + /***********************************************************************************/ + /*! + \brief + Manages storage for all Meshes in the Graphics System as a single set of Vertex + and Index Buffers. + */ + /***********************************************************************************/ + class SHMeshLibrary + { + public: + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /*******************************************************************************/ + /*! + + \brief + Adds a mesh to the Mesh Library. But this does not mean that the meshes have + been added yet. A call to "BuildBuffers()" is required to transfer all + meshes into the GPU. + + \param vertexCount + Number of vertices in this Mesh. + \param positions + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + \param texCoords + Pointer to the first in a contiguous array of SHMathVec2s that define vertex + texture coordinates. + \param tangents + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + tangents. + \param normals + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + normals. + \param indexCount + Number of indices in this mesh. + \param indices + Pointer to the first in a contiguous array of uint32_ts that define mesh + indicies. + + \return + Handle to the created Mesh. This is not valid to be used until a call to + BuildBuffers(). + + */ + /*******************************************************************************/ + Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); + /*******************************************************************************/ + /*! + + \brief + Removes a mesh from the MeshLibrary. But this does not mean that the meshes + have been removed yet. A call to "BuildBuffers()" is required to finalise all + changes. + + \param mesh + Handle to the mesh to remove. + + */ + /*******************************************************************************/ + void RemoveMesh(Handle mesh); + /***************************************************************************/ + /*! + + \brief + Finalises all changes to the MeshLibrary into the GPU buffers. + + \param device + Device used to create and update the buffers. + \param cmdBuffer + Command buffer used to set up transfers of data in the GPU memory. This + call must be preceded by calls to cmdBuffer's BeginRecording() and ended + with EndRecording(). Do recall to also submit the cmdBuffer to a transfer + queue. + */ + /***************************************************************************/ + void BuildBuffers(Handle device, Handle cmdBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetVertexPositionsBuffer() const noexcept { return vertPosBuffer; } + Handle GetVertexTexCoordsBuffer() const noexcept { return vertTexCoordBuffer; } + Handle GetVertexTangentsBuffer() const noexcept { return vertTangentBuffer; } + Handle GetVertexNormalsBuffer() const noexcept { return vertNormalBuffer; } + Handle GetIndexBuffer() const { return indexBuffer; } + + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definition */ + /*-----------------------------------------------------------------------------*/ + struct MeshAddJob + { + uint32_t VertexCount = 0; + const SHMesh::VertexPosition* VertexPositions = nullptr; + const SHMesh::VertexTexCoord* VertexTexCoords = nullptr; + const SHMesh::VertexTangent * VertexTangents = nullptr; + const SHMesh::VertexNormal * VertexNormals = nullptr; + uint32_t IndexCount = 0; + const SHMesh::Index * Indices = nullptr; + Handle Handle; + }; + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Manipulation Queues + std::vector meshAddJobs; + std::vector> meshRemoveJobs; + // Tracking + ResourceLibrary meshes{}; + std::vector> meshOrder; + // CPU Storage + std::vector vertPosStorage; + std::vector vertTexCoordStorage; + std::vector vertTangentStorage; + std::vector vertNormalStorage; + std::vector indexStorage; + // GPU Storage + Handle vertPosBuffer{}; + Handle vertTexCoordBuffer{}; + Handle vertTangentBuffer{}; + Handle vertNormalBuffer{}; + Handle indexBuffer {}; + // Flags + bool isDirty = true; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp index eec4d28a..e728ff68 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderTarget.cpp @@ -1,2 +1,2 @@ -#include "SHPch.h" +#include "SHpch.h" #include "SHRenderTarget.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp new file mode 100644 index 00000000..41a8d8d0 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -0,0 +1,49 @@ +/************************************************************************************//*! +\file SHRenderable.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 19, 2022 +\brief Contains the definition of functions of the SHRenderable Component class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHRenderable.h" +#include "ECS_Base/Managers/SHSystemManager.h" + +namespace SHADE +{ + void SHRenderable::SetMaterial(Handle materialInstance) + { + if (material) + { + material.Free(); + material = {}; + } + + sharedMaterial = materialInstance; + } + + Handle SHRenderable::GetMaterial() const + { + if (material) + return material; + + return sharedMaterial; + } + + Handle SHRenderable::GetModifiableMaterial() + { + // Create a copy if it wasn't created + if (!material) + { + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + material = gfxSystem->AddMaterialInstance(sharedMaterial->GetBaseMaterial()); + } + + return material; + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h new file mode 100644 index 00000000..4d85abd8 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -0,0 +1,60 @@ +/************************************************************************************//*! +\file SHRenderable.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 19, 2022 +\brief Contains the definition of the SHRenderable Component class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Resource/Handle.h" +//#include "SHTransform.h" +#include "ECS_Base/Components/SHComponent.h" +#include "Math/SHMatrix.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHMaterialInstance; + class SHMesh; + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /*************************************************************************************/ + /*! + \brief + Represents an object that should be rendered. + */ + /*************************************************************************************/ + class SHRenderable : public SHComponent, public ISelfHandle + { + public: + /*-------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-------------------------------------------------------------------------------*/ + void SetMaterial(Handle materialInstance); + Handle GetMaterial() const; + Handle GetModifiableMaterial(); + + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + Handle Mesh; + SHMatrix TransformMatrix; // TODO: Replace with Transform component + + private: + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + Handle sharedMaterial; + Handle material; + }; +} + diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp new file mode 100644 index 00000000..6a5b86e3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -0,0 +1,57 @@ +/************************************************************************************//*! +\file SHRenderer.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" + +#include "SHRenderer.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "SHViewport.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Framebuffer/SHVkFramebuffer.h" +#include "SHMaterial.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHRenderer::SHRenderer(Handle viewport, ResourceManager& resourceManager) + : renderGraph{resourceManager.Create ()} + { + + } + SHRenderer::~SHRenderer() + { + } + + /*-----------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------*/ + void SHRenderer::SetCamera(Handle _camera) + { + camera = _camera; + } + + /*---------------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*---------------------------------------------------------------------------------*/ + void SHRenderer::Draw(uint32_t frameIndex) const noexcept + { + renderGraph->Execute(frameIndex); + } + + Handle SHRenderer::GetRenderGraph(void) const noexcept + { + return renderGraph; + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h new file mode 100644 index 00000000..000fec4f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file SHRenderer.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 21, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +// Project Includes +#include "SHCamera.h" +#include "Resource/Handle.h" +#include "SHGraphicsConstants.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkRenderpass; + class SHVkFramebuffer; + class SHMaterial; + class SHVkLogicalDevice; + class SHViewport; + class SHVkImageView; + class SHVkCommandBuffer; + class SHCamera; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Brings together a set of Cameras and objects with various Pipelines to render + them as part of a set. Multiple Renderers can exist to render objects differently + in a separate step. + */ + /***********************************************************************************/ + class SHRenderer + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHRenderer(Handle viewport, ResourceManager& resourceManager); + ~SHRenderer(); + + /*-----------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------*/ + void SetCamera(Handle _camera); + + /*-----------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*-----------------------------------------------------------------------------*/ + void Draw(uint32_t frameIndex) const noexcept; + + /*-----------------------------------------------------------------------------*/ + /* Setters and Getters */ + /*-----------------------------------------------------------------------------*/ + Handle GetRenderGraph (void) const noexcept; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle camera; + Handle renderGraph; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp new file mode 100644 index 00000000..47f9ec5a --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -0,0 +1,74 @@ +/************************************************************************************//*! +\file SHViewport.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 27, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHViewport.h" + +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/Instance/SHVkInstance.h" +#include "Tools/SHLogger.h" +#include "SHRenderer.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHViewport::SHViewport(Handle device, const vk::Viewport& viewport) + : device { device } + , viewport { viewport } + {} + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void SHViewport::SetUp(Handle commandBuffer) + { + commandBuffer->SetViewportScissor + ( + viewport.x, + viewport.y, + static_cast(viewport.width), + static_cast(viewport.height), + viewport.minDepth, + viewport.maxDepth + ); + } + + /*---------------------------------------------------------------------------------*/ + /* Renderer Registration Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHViewport::AddRenderer(ResourceManager& resourceManager) + { + // Create the renderer + auto renderer = SHVkInstance::GetResourceManager().Create(GetHandle(), resourceManager); + + // Store + renderers.emplace_back(renderer); + + // Return + return renderer; + } + void SHViewport::RemoveRenderer(Handle renderer) + { + auto iter = std::find(renderers.begin(), renderers.end(), renderer); + if (iter == renderers.end()) + { + SHLOG_WARNING("Attempted to remove a Renderer that does not belong to a viewport!"); + return; + } + + // Remove it + iter->Free(); + renderers.erase(iter); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h new file mode 100644 index 00000000..01637db3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file SHViewport.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 27, 2022 +\brief Contains the class definition of SHViewport. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// External Dependencies +#include "Graphics/SHVulkanIncludes.h" +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHRenderer; + class SHVkCommandBuffer; + class SHVkLogicalDevice; + class SHVkImageView; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Brings together a set of Renderers that render to the same segment of an image. + */ + /***********************************************************************************/ + class SHViewport : public ISelfHandle + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHViewport(Handle device, const vk::Viewport& viewport); + + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + void SetUp(Handle commandBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Renderers Registration Functions */ + /*-----------------------------------------------------------------------------*/ + Handle AddRenderer(ResourceManager& resourceManager); + void RemoveRenderer(Handle renderer); + + /*-----------------------------------------------------------------------------*/ + /* Getters */ + /*-----------------------------------------------------------------------------*/ + float GetX() const { return viewport.x; } + float GetY() const { return viewport.y; } + float GetWidth() const { return viewport.width; } + float GetHeight() const { return viewport.height; } + float GetMinDepth() const { return viewport.minDepth; } + float GetMaxDepth() const { return viewport.maxDepth; } + const std::vector>& GetRenderers() const { return renderers; } + + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle device; + vk::Viewport viewport; + std::vector> renderers; + }; + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp new file mode 100644 index 00000000..45bb87ba --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -0,0 +1,52 @@ +#include "SHpch.h" +#include "SHPipelineLibrary.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" + +namespace SHADE +{ + + Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, uint32_t subpass, SHVertexInputState const& vertexInput, std::vector> const& globalDescSetLayouts) noexcept + { + SHPipelineLayoutParams params + { + .shaderModules = {vsFsPair.first, vsFsPair.second}, + .globalDescSetLayouts = globalDescSetLayouts + }; + + // Create the pipeline layout + auto pipelineLayout = logicalDevice->CreatePipelineLayout(params); + + // Create the pipeline and configure the default vertex input state + auto newPipeline = logicalDevice->CreatePipeline(pipelineLayout, nullptr, renderpass, subpass, SH_PIPELINE_TYPE::GRAPHICS); + newPipeline->GetPipelineState().SetVertexInputState(vertexInput); + + // Actually construct the pipeline + newPipeline->ConstructPipeline(); + + // Emplace the new pipeline + pipelines.emplace (vsFsPair, newPipeline); + } + + void SHPipelineLibrary::Init(Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept + { + logicalDevice = device; + vertexInputState = viState; + globalDescSetLayouts = globalLayouts; + } + + Handle SHPipelineLibrary::GetDrawPipline(std::pair, Handle> const& vsFsPair) noexcept + { + // return the pipeline requested for + if (pipelines.contains(vsFsPair)) + return pipelines.at(vsFsPair); + else + return {}; + } + + bool SHPipelineLibrary::CheckDrawPipelineExistence(std::pair, Handle> const& vsFsPair) noexcept + { + // Returns if a pipeline exists or not + return pipelines.contains(vsFsPair); + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h new file mode 100644 index 00000000..fe69e87b --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Graphics/Pipeline/SHVkPipeline.h" + + +namespace SHADE +{ + class SHVRenderpass; + class SHVkDescriptorSetLayouts; + class SHVkPipeline; + + + // Pipeline library is a PURELY MIDDLE END SYSTEM. It is responsible for only creating pipelines from shaders and caching + // them so that they don't need to be recreated again. + class SHPipelineLibrary + { + private: + // TOOD: Move this somewhere eventually. Can use for other things + struct SHHandlePairHash + { + template + std::size_t operator() (std::pair const& pair) const + { + return std::hash()(pair.first.GetId()) ^ std::hash()(pair.second.GetId()); + } + }; + + //! Logical Device required for creation of pipelines + Handle logicalDevice; + + //! a map of pipelines that are hashed using a pair of shader module handles + std::unordered_map, Handle>, Handle, SHHandlePairHash> pipelines; + + //! Default vertex input state for pipeline creation + SHVertexInputState const* vertexInputState; + + std::vector> const* globalDescSetLayouts; + + + public: + void Init (Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept; + + // Draw pipeline functions. used only when creating pipelines for drawing using a vertex and fragment shader + Handle CreateDrawPipeline ( + std::pair, Handle> const& vsFsPair, + Handle renderpass, + uint32_t subpass, + SHVertexInputState const& vertexInput, + std::vector> const& globalDescSetLayouts + ) noexcept; + Handle GetDrawPipline (std::pair, Handle> const& vsFsPair) noexcept; + bool CheckDrawPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; + + }; +} diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h index 961b3f4c..493bd114 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h @@ -23,7 +23,7 @@ namespace SHADE //! used just for textures or lights for example). In that case, we still //! want to use the layout to initialize the pipeline layout but we do not //! want to use it for allocating descriptor sets. - std::vector> globalDescSetLayouts = {}; + std::vector> const& globalDescSetLayouts = {}; }; } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index 7c24aab7..e692163b 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -189,7 +189,7 @@ namespace SHADE /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - template , SHVertexInputState>>> + template , SHVertexInputState>>> void SetVertexInputState (T&& state) noexcept; void SetInputAssemblyState(SHInputAssemblyState const& state) noexcept; void SetRasterizationState(SHRasterizationState const& state) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 41633e55..0181bdad 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -1035,7 +1035,7 @@ namespace SHADE auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); - cmdBuffer->SetviewportScissor(1920.0f, 1080.0f, 1920, 1080); + cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); for (auto& node : nodes) { diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp index 2135b9dd..cfa26e4c 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp @@ -6,30 +6,49 @@ namespace SHADE void SHShaderBlockInterface::AddVariable(std::string name, Variable&& newVariable) noexcept { - variables.try_emplace (std::move(name), std::move (newVariable)); + // Check if this is already inside + if (variableIndexing.contains(name)) + { + SHLOG_WARNING("[SHShaderBlockInterface] Attempted to specify a variable with a duplicate name. This will be ignored."); + return; + } + variableIndexing.emplace_back(std::move(newVariable)); + variables.try_emplace (std::move(name), static_cast(variableIndexing.size() - 1)); } SHShaderBlockInterface::Variable const* const SHShaderBlockInterface::GetVariable(std::string const& variableName) const noexcept { - if (variables.contains(variableName)) - return &variables.at(variableName); + if (variableIndexing.contains(variableName)) + return &variables.at(variableIndexing.at(variableName).second); return nullptr; } - SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept - : variables{} - , bytesRequired{ 0 } + SHADE::SHShaderBlockInterface::Variable const* const SHShaderBlockInterface::GetVariable(uint32_t index) const noexcept { + if (variableIndexing.size() < index) + return &variables.at(index); + return nullptr; } + uint32_t SHShaderBlockInterface::GetVariableIndex(std::string const& variableName) const noexcept + { + if (!variableIndexing.contains(variableName)) + throw std::invalid_argument("Attempted to retrieve index to variable that does not exist!"); + + return variableIndexing.at(variableName).second; + } + + SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept + : bytesRequired{ 0 } + {} + SHShaderBlockInterface::SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept - : variables{ std::move(rhs.variables) } - , bytesRequired {std::move (rhs.bytesRequired)} - { - - } + : variables { std::move(rhs.variables) } + , variableIndexing { std::move(rhs.variableIndexing) } + , bytesRequired { std::move (rhs.bytesRequired) } + {} void SHShaderBlockInterface::SetBytesRequired(uint32_t bytes) noexcept { @@ -46,16 +65,11 @@ namespace SHADE { if (&rhs == this) return *this; - + variables = std::move(rhs.variables); + variableIndexing = std::move(rhs.variableIndexing); bytesRequired = std::move(rhs.bytesRequired); return *this; } - - SHShaderBlockInterface::~SHShaderBlockInterface(void) noexcept - { - variables.clear(); - } - } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h index 38c01bde..ee7e7726 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h @@ -15,8 +15,9 @@ namespace SHADE }; private: - //! container of variable information - std::unordered_map variables; + //! containers of variable information + std::vector variables; + std::unordered_map variableIndexing; //! bytes required by the block (includes padding). This variable is required uint32_t bytesRequired; @@ -24,12 +25,13 @@ namespace SHADE public: void AddVariable (std::string name, Variable&& newVariable) noexcept; Variable const* const GetVariable (std::string const& variableName) const noexcept; + Variable const* const GetVariable(uint32_t index) const noexcept; + uint32_t GetVariableIndex(std::string const& variableName) const; /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ SHShaderBlockInterface(void) noexcept; - ~SHShaderBlockInterface(void) noexcept; SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept; SHShaderBlockInterface& operator=(SHShaderBlockInterface&& rhs) noexcept; From 6706f9acf0554994095ad9ca1462a02e0b6c278f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 17 Sep 2022 22:33:11 +0800 Subject: [PATCH 100/793] SP3-108 Created templated derived classes for events to accommodate for automatic type sending ability --- SHADE_Engine/src/Events/SHEvent.h | 12 +++++++++- SHADE_Engine/src/Events/SHEventDefines.h | 1 - SHADE_Engine/src/Events/SHEventManager.cpp | 24 ++++++++------------ SHADE_Engine/src/Events/SHEventManager.h | 26 ++++++++++++++-------- SHADE_Engine/src/Events/SHEventReceiver.h | 8 +++---- 5 files changed, 41 insertions(+), 30 deletions(-) diff --git a/SHADE_Engine/src/Events/SHEvent.h b/SHADE_Engine/src/Events/SHEvent.h index 2ca6648e..217609d3 100644 --- a/SHADE_Engine/src/Events/SHEvent.h +++ b/SHADE_Engine/src/Events/SHEvent.h @@ -16,7 +16,17 @@ namespace SHADE struct SHEvent { SHEventIdentifier type; - SHEventDataPtr dataPtr; SHEventHandle handle; }; + + template + struct SHEventSpec : SHEvent + { + SHEventSpec(SHEventIdentifier t, SHEventHandle e, T* dp) + :SHEvent{ t, e }, data{ dp } {} + + std::shared_ptr data; + }; + + using SHEventPtr = std::shared_ptr; } diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 76b403bd..db8d7752 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -3,7 +3,6 @@ typedef uint32_t SHEventIdentifier; typedef uint32_t SHEventHandle; -typedef void* SHEventDataPtr; //Add your event identifiers here: constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp index 1cede2a0..4372cf6d 100644 --- a/SHADE_Engine/src/Events/SHEventManager.cpp +++ b/SHADE_Engine/src/Events/SHEventManager.cpp @@ -13,7 +13,6 @@ namespace SHADE { std::unordered_map SHEventManager::packageReceiverRegistry; - std::unordered_map SHEventManager::dataEventMap; SHEventHandle SHEventManager::handleCounter{ 0 }; @@ -23,7 +22,7 @@ namespace SHADE * \brief Receives event from the listeners. ****************************************************************************/ - void SHEventManager::CatchEvent(SHEvent event) + void SHEventManager::CatchEvent(SHEventPtr event) { // Do something with the event @@ -46,21 +45,16 @@ namespace SHADE } template - T* SHEventManager::BroadcastEvent(T data, SHEventIdentifier eventType) + void SHEventManager::BroadcastEvent(T data, SHEventIdentifier eventType) { - SHEventDataPtr ptr = new std::byte[sizeof(data)]; - - std::memcpy(ptr, &data, sizeof(data)); + std::shared_ptr data = std::make_shared(data); CatchEvent( - { - eventType, - ptr, - handleCounter++ - } + reinterpret_cast + ( + std::make_shared>(eventType, handleCounter++, data) + ) ); - - return reinterpret_cast(ptr); } /**************************************************************************** @@ -90,9 +84,9 @@ namespace SHADE * \brief Broadcast event to all receivers that are subscribed to this * listener. ****************************************************************************/ - void SHEventManager::Broadcast(SHEvent const& event) + void SHEventManager::Broadcast(SHEventPtr event) { - ResponseVec& receivers{ packageReceiverRegistry[event.type] }; + ResponseVec& receivers{ packageReceiverRegistry[event->type] }; for (auto& receiver : receivers) { receiver->Receive(event); diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index f2f19fef..b9ea370c 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -24,11 +24,16 @@ 3. When ready to send the event, call SHEventManager::BroadcastEvent(exampleClass, EVENT_IDENTIFIER); + NOTE: If your custom struct to contain data requires a deep copy, please + overload the assignment operator accordingly. It is fine to send + a single object of a basic type such as int/float. + Headers required: SHEventManager.h On Receiver side: 1. Create a function with the signature: - SHEventHandle FunctionName(SHEvent); + SHEventHandle FunctionName(SHEventPtr); + 2. In the init function of the class, copy the below in and replace the necessary: @@ -42,8 +47,12 @@ 3. Note: The EventIdentifier should match all that is defined in SHEventDefines.h so check there. When the receiver catches the event, it - needs to know the struct that the broadcaster is using to cast the void* - properly. + needs to know the struct that the broadcaster is using to cast the event + ptr as such: + + reinterpret_cast>>(event) + + 4. Inside the new ptr should be a shared pointer of const CustomClass type. Headers required: SHEventManager.h, SHEventReceiver.h @@ -52,13 +61,13 @@ namespace SHADE { - using ResponseFunction = std::function; + //using ResponseFunction = std::function; using ReceiverPtr = std::shared_ptr; using ResponseVec = std::vector; - using StaticResponseVec = std::vector; using EventManagerListener = std::function; + class SHEventManager { public: @@ -69,7 +78,7 @@ namespace SHADE * \brief Receives event from the listeners. ****************************************************************************/ - static void CatchEvent(SHEvent); + static void CatchEvent(SHEventPtr); /**************************************************************************** * \param ResponseFunction - function pointer from receiver to be passed @@ -83,13 +92,12 @@ namespace SHADE static void SubscribeTo(SHEventIdentifier, ReceiverPtr); template - static T* BroadcastEvent(T data, SHEventIdentifier eventType); + static void BroadcastEvent(T data, SHEventIdentifier eventType); private: // Registry for broadcasters and subscribers static std::unordered_map packageReceiverRegistry; - static std::unordered_map dataEventMap; static SHEventHandle handleCounter; @@ -100,7 +108,7 @@ namespace SHADE * \brief Broadcast event to all receivers that are subscribed to this * listener. ****************************************************************************/ - static void Broadcast(SHEvent const&); + static void Broadcast(SHEventPtr event); /**************************************************************************** * \param ReceiverPtr - Pointer to receiver diff --git a/SHADE_Engine/src/Events/SHEventReceiver.h b/SHADE_Engine/src/Events/SHEventReceiver.h index f968e579..e6e5e757 100644 --- a/SHADE_Engine/src/Events/SHEventReceiver.h +++ b/SHADE_Engine/src/Events/SHEventReceiver.h @@ -8,7 +8,7 @@ namespace SHADE { private: public: - virtual void Receive(SHEvent) = 0; + virtual void Receive(SHEventPtr) = 0; }; template @@ -16,16 +16,16 @@ namespace SHADE { private: T* object; - SHEventHandle(T::*callback)(SHEvent); + SHEventHandle(T::*callback)(SHEventPtr); public: - SHEventReceiverSpec(T* obj, void(T::* cb)(SHEventDataPtr)) + SHEventReceiverSpec(T* obj, void(T::* cb)(SHEventPtr)) :SHEventReceiver(), object{ obj }, callback{ cb } { } - void Receive(SHEvent evt) override + void Receive(SHEventPtr evt) override { (object->*callback)(evt); } From c1a3a6acf16840e5047ab1e583ddc1a3bc01d2e0 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 17 Sep 2022 23:32:03 +0800 Subject: [PATCH 101/793] Created global descriptor set layouts --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 78 ++++++++++++++++++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 3 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 6 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 4 +- 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index e19aee57..893ea182 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -40,7 +40,6 @@ namespace SHADE SHVkInstance::Init(true, true, true); // Get Physical Device and Construct Logical Device - // TODO: Provide configuration for these options physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); @@ -153,8 +152,10 @@ namespace SHADE semaHandle = device->CreateSemaphore(); } + + ConfigureDefaultVertexInputState(); - //pipelineLibrary.Init(device, &defaultVertexInputState, ); + pipelineLibrary.Init(device, &defaultVertexInputState, &globalDescSetLayouts); } /***************************************************************************/ @@ -361,6 +362,79 @@ namespace SHADE window = wind; } + void SHGraphicsSystem::ConfigureGlobalDescLayouts(void) noexcept + { + SHVkDescriptorSetLayout::Binding genericDataBinding + { + .Type = vk::DescriptorType::eUniformBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + SHVkDescriptorSetLayout::Binding texturesBinding + { + .Type = vk::DescriptorType::eCombinedImageSampler, + .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, + .BindPoint = 1, + .DescriptorCount = 2000, // we can have up to 2000 textures for now + .flags = vk::DescriptorBindingFlagBits::eVariableDescriptorCount, + }; + + // For global data (generic data and textures) + Handle staticGlobalLayout = device->CreateDescriptorSetLayout({genericDataBinding, texturesBinding}); + + + + + + SHVkDescriptorSetLayout::Binding lightBinding + { + .Type = vk::DescriptorType::eStorageBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For Dynamic global data (lights) + Handle dynamicGlobalLayout = device->CreateDescriptorSetLayout({ lightBinding }); + + + + + + SHVkDescriptorSetLayout::Binding cameraDataBinding + { + .Type = vk::DescriptorType::eUniformBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eVertex, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For High frequency global data (camera) + Handle cameraDataGlobalLayout = device->CreateDescriptorSetLayout({ cameraDataBinding }); + + + + + + SHVkDescriptorSetLayout::Binding materialDataBinding + { + .Type = vk::DescriptorType::eStorageBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For High frequency global data (camera) + Handle materialDataPerInstanceLayout = device->CreateDescriptorSetLayout({ materialDataBinding }); + + globalDescSetLayouts.push_back(staticGlobalLayout); + globalDescSetLayouts.push_back(dynamicGlobalLayout); + globalDescSetLayouts.push_back(cameraDataGlobalLayout); + globalDescSetLayouts.push_back(materialDataPerInstanceLayout); + } + void SHGraphicsSystem::ConfigureDefaultVertexInputState(void) noexcept { defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // positions at binding 0 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 55238ce6..4f20afd4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -156,7 +156,7 @@ namespace SHADE SHPipelineLibrary pipelineLibrary; - std::vector globalDescSetLayouts; + std::vector> globalDescSetLayouts; // Middle End Resources ResourceManager resourceManager; @@ -179,6 +179,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Private member functions */ /*-----------------------------------------------------------------------------*/ + void ConfigureGlobalDescLayouts (void) noexcept; void ConfigureDefaultVertexInputState (void) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 45bb87ba..ed3900d5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -5,12 +5,12 @@ namespace SHADE { - Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, uint32_t subpass, SHVertexInputState const& vertexInput, std::vector> const& globalDescSetLayouts) noexcept + Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, uint32_t subpass) noexcept { SHPipelineLayoutParams params { .shaderModules = {vsFsPair.first, vsFsPair.second}, - .globalDescSetLayouts = globalDescSetLayouts + .globalDescSetLayouts = *globalDescSetLayouts }; // Create the pipeline layout @@ -18,7 +18,7 @@ namespace SHADE // Create the pipeline and configure the default vertex input state auto newPipeline = logicalDevice->CreatePipeline(pipelineLayout, nullptr, renderpass, subpass, SH_PIPELINE_TYPE::GRAPHICS); - newPipeline->GetPipelineState().SetVertexInputState(vertexInput); + newPipeline->GetPipelineState().SetVertexInputState(*vertexInputState); // Actually construct the pipeline newPipeline->ConstructPipeline(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index fe69e87b..264caca5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -46,9 +46,7 @@ namespace SHADE Handle CreateDrawPipeline ( std::pair, Handle> const& vsFsPair, Handle renderpass, - uint32_t subpass, - SHVertexInputState const& vertexInput, - std::vector> const& globalDescSetLayouts + uint32_t subpass ) noexcept; Handle GetDrawPipline (std::pair, Handle> const& vsFsPair) noexcept; bool CheckDrawPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; From 1c8a434b26f529cba9f44ca78ff9eead15ec0f8f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 17 Sep 2022 23:32:29 +0800 Subject: [PATCH 102/793] Added Batcher classes and fixed errors --- .../src/Application/SBApplication.cpp | 4 +- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 3 +- .../src/ECS_Base/System/SHSystemRoutine.h | 3 +- SHADE_Engine/src/Editor/SHEditor.cpp | 8 +- .../src/Graphics/Buffers/SHVkBuffer.cpp | 109 ++++++----- .../src/Graphics/Buffers/SHVkBuffer.h | 39 ++-- .../Graphics/Commands/SHVkCommandBuffer.cpp | 27 +++ .../src/Graphics/Commands/SHVkCommandBuffer.h | 3 +- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 181 ++++++++++++++++++ .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 101 ++++++++++ .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 107 +++++++++++ .../Graphics/MiddleEnd/Batching/SHBatcher.h | 63 ++++++ .../MiddleEnd/Batching/SHSuperBatch.cpp | 99 ++++++++++ .../MiddleEnd/Batching/SHSuperBatch.h | 76 ++++++++ .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 40 ++-- .../Graphics/MiddleEnd/Interface/SHCamera.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 + .../Interface/SHMaterialInstance.cpp | 23 ++- .../MiddleEnd/Interface/SHMaterialInstance.h | 6 + .../Interface/SHMaterialInstance.hpp | 6 +- .../MiddleEnd/Interface/SHMeshLibrary.h | 10 +- .../MiddleEnd/Interface/SHRenderable.cpp | 4 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 3 +- .../MiddleEnd/Interface/SHViewport.cpp | 1 + .../Graphics/MiddleEnd/Interface/SHViewport.h | 1 + .../src/Graphics/Pipeline/SHPipelineState.cpp | 2 +- .../src/Graphics/Pipeline/SHPipelineState.h | 2 +- .../src/Graphics/Renderpass/SHVkRenderpass.h | 4 + SHADE_Engine/src/Graphics/SHVkUtil.cpp | 29 +++ SHADE_Engine/src/Graphics/SHVkUtil.h | 40 ++++ .../BlockInterface/SHShaderBlockInterface.cpp | 15 +- SHADE_Engine/src/Resource/Handle.h | 4 +- SHADE_Engine/src/Resource/Handle.hpp | 6 +- SHADE_Engine/src/Resource/ResourceLibrary.h | 4 +- 34 files changed, 907 insertions(+), 120 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 5420e8c5..da13491b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -37,7 +37,9 @@ namespace Sandbox window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::RegisterRoutine(1); + SHADE::SHSystemManager::RegisterRoutine(1); + SHADE::SHSystemManager::RegisterRoutine(1); + SHADE::SHSystemManager::RegisterRoutine(1); graphicsSystem->SetWindow(&window); diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 19b16f72..93ea6a59 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -11,13 +11,14 @@ #pragma once #include "../SHECSMacros.h" +#include "SH_API.h" namespace SHADE { class SHSystemManager; - class SHSystem + class SH_API SHSystem { private: SystemID systemID; diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h index cdb62438..2b6d8dc1 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -7,6 +7,7 @@ #include "SHRoutineStats.h" #include "SHSystem.h" #include +#include "SH_API.h" namespace SHADE @@ -15,7 +16,7 @@ namespace SHADE class SHSystemManager; - class SHSystemRoutine + class SH_API SHSystemRoutine { friend class SHSystemManager; protected: diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6d0f1a28..89814bc5 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -43,8 +43,8 @@ namespace SHADE imguiCommandPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); imguiCommandBuffer = imguiCommandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - auto renderPass = gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetRenderpass(); - ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass()); + /*auto renderPass = gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetRenderpass(); + ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass());*/ imguiCommandBuffer->BeginRecording(); ImGui_ImplVulkan_CreateFontsTexture(imguiCommandBuffer->GetVkCommandBuffer()); @@ -53,9 +53,9 @@ namespace SHADE ImGui_ImplVulkan_DestroyFontUploadObjects(); - gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { + /*gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); - }); + });*/ //ImGuiIO& io = ImGui::GetIO(); //int w, h; diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 7913574c..20b94626 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -33,8 +33,20 @@ namespace SHADE }; cmdBufferHdl->GetVkCommandBuffer().copyBuffer(stagingBuffer, vkBuffer, 1, ©Region); } + } - // TODO: Need to destroy staging buffer. Obviously not here but after the command has finished executing. + void SHVkBuffer::ResizeNoCopy(uint32_t newSize) + { + Destroy(); + vk::Buffer tempBuffer; + std::tie(tempBuffer, std::ignore) = createBuffer(newSize); + vkBuffer = tempBuffer; + } + + void SHVkBuffer::ResizeReplace(uint32_t newSize, void* data, uint32_t srcSize) + { + Destroy(); + Init(newSize, data, srcSize, bufferUsageFlags, allocCreateInfo.usage, allocCreateInfo.flags); } vk::Buffer SHVkBuffer::GetVkBuffer(void) const noexcept @@ -195,12 +207,12 @@ namespace SHADE // results of allocation VmaAllocation stagingAlloc; - // To get around VMA's usage for C version of vulkan, create a temp first..., + // To get around VMA's usage for C version of Vulkan, create a temp first..., VkBuffer tempBuffer{}; // Create the buffer... vmaCreateBuffer(vmaAllocator, - &bufferInfo.operator VkBufferCreateInfo & (), // TODO: Verify if this works (can use renderdoc to check buffer variables?) + &bufferInfo.operator VkBufferCreateInfo & (), // TODO: Verify if this works (can use RenderDoc to check buffer variables?) &allocCreateInfo, &tempBuffer, &stagingAlloc, &allocInfo); @@ -221,6 +233,32 @@ namespace SHADE vmaUnmapMemory(vmaAllocator, stagingAlloc); } + std::pair SHVkBuffer::createBuffer(uint32_t size) + { + // Modify the size based on the parameter + sizeStored = size; + bufferCreateInfo.size = sizeStored; + + // parameters of a vmaAllocation retrieved via vmaGetAllocationInfo + VmaAllocationInfo allocInfo; + + // To get around VMA's usage for C version of vulkan, create a temp first..., + VkBuffer tempBuffer{}; + + // Create the buffer... + auto result = vmaCreateBuffer(vmaAllocator, + &bufferCreateInfo.operator VkBufferCreateInfo & (), + &allocCreateInfo, + &tempBuffer, &alloc, &allocInfo); + + if (result != VK_SUCCESS) + SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan buffer. "); + else + SHVulkanDebugUtil::ReportVkSuccess("Successfully created buffer. "); + + return { tempBuffer, allocInfo }; + } + /***************************************************************************/ /*! @@ -230,17 +268,15 @@ namespace SHADE */ /***************************************************************************/ SHVkBuffer::SHVkBuffer(std::reference_wrapper allocator) noexcept - : vkBuffer{} - , stagingBuffer{} - , sizeStored{ 0 } - , mappedPtr{ nullptr } - , alloc {nullptr} - , randomAccessOptimized{false} - , boundToCoherent {false} - , vmaAllocator{allocator} - { - - } + : vkBuffer{} + , stagingBuffer{} + , sizeStored{ 0 } + , mappedPtr{ nullptr } + , alloc {nullptr} + , randomAccessOptimized{false} + , boundToCoherent {false} + , vmaAllocator{allocator} + {} SHVkBuffer::SHVkBuffer( uint32_t inSize, @@ -266,6 +302,8 @@ namespace SHADE , boundToCoherent{ rhs.boundToCoherent} , vmaAllocator{ rhs.vmaAllocator } , bufferUsageFlags {rhs.bufferUsageFlags} + , bufferCreateInfo { rhs.bufferCreateInfo } + , allocCreateInfo { rhs.allocCreateInfo } { rhs.vkBuffer = VK_NULL_HANDLE; @@ -285,6 +323,8 @@ namespace SHADE boundToCoherent = rhs.boundToCoherent; vmaAllocator = std::move (rhs.vmaAllocator); rhs.vkBuffer = VK_NULL_HANDLE; + bufferCreateInfo = rhs.bufferCreateInfo; + allocCreateInfo = rhs.allocCreateInfo; bufferUsageFlags = rhs.bufferUsageFlags; return *this; @@ -344,47 +384,26 @@ namespace SHADE { sizeStored = inSize; - // For creation of buffer - vk::BufferCreateInfo bufferInfo{}; + // Set the buffer flags + bufferUsageFlags = bufferUsage; // initialize size and usage (vertex, index, uniform, etc) - bufferInfo.size = sizeStored; - bufferInfo.usage = bufferUsage; - bufferInfo.sharingMode = vk::SharingMode::eExclusive; + bufferCreateInfo = vk::BufferCreateInfo{}; + bufferCreateInfo.usage = bufferUsageFlags; + bufferCreateInfo.sharingMode = vk::SharingMode::eExclusive; // Prepare allocation parameters for call to create buffers later - VmaAllocationCreateInfo allocCreateInfo{}; + allocCreateInfo = VmaAllocationCreateInfo{}; allocCreateInfo.usage = memUsage; // If vma allocation flags include dedicated bit, immediately activate dst bit if (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) - bufferInfo.usage |= vk::BufferUsageFlagBits::eTransferDst; - + bufferCreateInfo.usage |= vk::BufferUsageFlagBits::eTransferDst; allocCreateInfo.flags = allocFlags; - // parameters of a vmaAllocation retrieved via vmaGetAllocationInfo - VmaAllocationInfo allocInfo; - - // To get around VMA's usage for C version of vulkan, create a temp first..., - VkBuffer tempBuffer{}; - - // Create the buffer... - auto result = vmaCreateBuffer(vmaAllocator, - &bufferInfo.operator VkBufferCreateInfo &(), - &allocCreateInfo, - &tempBuffer, &alloc, &allocInfo); - - if (result != VK_SUCCESS) - SHVulkanDebugUtil::ReportVkError(vk::Result (result), "Failed to create vulkan buffer. "); - else - SHVulkanDebugUtil::ReportVkSuccess("Successfully created buffer. "); - - // ...then assign it to the hpp version + auto [tempBuffer, allocInfo] = createBuffer(sizeStored); vkBuffer = tempBuffer; - // Set the buffer flags - bufferUsageFlags = bufferInfo.usage; - // This probably means that a HOST_CACHED memory type is used on allocation if (allocFlags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) randomAccessOptimized = true; @@ -456,7 +475,7 @@ namespace SHADE /***************************************************************************/ void SHVkBuffer::Destroy(void) noexcept { - vmaDestroyBuffer(vmaAllocator, vkBuffer, alloc); + if (vkBuffer) + vmaDestroyBuffer(vmaAllocator, vkBuffer, alloc); } - } diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index 9df1a1d0..7f4e0889 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -47,13 +47,18 @@ namespace SHADE //! buffer usage info flags vk::BufferUsageFlags bufferUsageFlags; + vk::BufferCreateInfo bufferCreateInfo; + VmaAllocationCreateInfo allocCreateInfo; + //! Reference to the allocator + //VmaAllocator const& vmaAllocator; std::reference_wrapper vmaAllocator; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void PrepStagingBuffer (void* data, uint32_t srcSize) noexcept; + std::pair createBuffer(uint32_t size); public: /*-----------------------------------------------------------------------*/ @@ -62,13 +67,13 @@ namespace SHADE SHVkBuffer (void) noexcept = delete; SHVkBuffer (std::reference_wrapper allocator) noexcept; SHVkBuffer ( - uint32_t inSize, + uint32_t inSize, void* data, uint32_t srcSize, std::reference_wrapper allocator, vk::BufferUsageFlags bufferUsage, - VmaMemoryUsage memUsage, - VmaAllocationCreateFlags allocFlags + VmaMemoryUsage memUsage = VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlags allocFlags = {} ) noexcept; SHVkBuffer(SHVkBuffer&& rhs) noexcept; SHVkBuffer& operator=(SHVkBuffer&& rhs) noexcept; @@ -78,21 +83,23 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - void Init ( - uint32_t inSize, - void* data, - uint32_t srcSize, - vk::BufferUsageFlags bufferUsage, - VmaMemoryUsage memUsage, - VmaAllocationCreateFlags allocFlags - ) noexcept; - void Destroy (void) noexcept; + void Init ( + uint32_t inSize, + void* data, + uint32_t srcSize, + vk::BufferUsageFlags bufferUsage, + VmaMemoryUsage memUsage, + VmaAllocationCreateFlags allocFlags + ) noexcept; + void Destroy (void) noexcept; - void Map (void) noexcept; - void Unmap (void) noexcept; - void WriteToMemory (void* data, uint32_t sizeToWrite, uint32_t srcOffset, uint32_t dstOffset) noexcept; - void MapWriteUnmap (void* data, uint32_t sizeToWrite, uint32_t srcOffset, uint32_t dstOffset) noexcept; + void Map (void) noexcept; + void Unmap (void) noexcept; + void WriteToMemory (void* data, uint32_t sizeToWrite, uint32_t srcOffset, uint32_t dstOffset) noexcept; + void MapWriteUnmap (void* data, uint32_t sizeToWrite, uint32_t srcOffset, uint32_t dstOffset) noexcept; void TransferToDeviceResource(Handle const& cmdBufferHdl) noexcept; + void ResizeNoCopy (uint32_t newSize); + void ResizeReplace (uint32_t newSize, void* data, uint32_t srcSize); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index b0139f8e..b393971c 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -451,6 +451,33 @@ namespace SHADE // //vkCommandBuffer.pipelineBarrier() //} + /***************************************************************************/ + /*! + + \brief + Issues a multi indirect draw call. + + \param indirectDrawData + SHVkBuffer containing the data for the multi indirect draw call. + \param drawCount + Number of multi indirect draw sub-calls stored in indirectDrawData. + + */ + /***************************************************************************/ + + void SHVkCommandBuffer::DrawMultiIndirect(Handle indirectDrawData, uint32_t drawCount) + { + if (cmdBufferState != SH_CMD_BUFFER_STATE::RECORDING) + { + SHLOG_ERROR("Command buffer must have started recording before a pipeline can be bound."); + return; + } + + vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); + } + + + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 888b805a..c478bddf 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -96,7 +96,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ void Reset(void); - // Begins, Ends and Nexts + // Begins and Ends void BeginRecording (void) noexcept; void EndRecording (void) noexcept; void BeginRenderpass (Handle const& renderpassHdl, Handle const& framebufferHdl, vk::Offset2D offset = {0, 0}, vk::Extent2D extent = {0, 0}) noexcept; @@ -127,6 +127,7 @@ namespace SHADE bool IsReadyToSubmit (void) const noexcept; void HandlePostSubmit (void) noexcept; + void DrawMultiIndirect (Handle indirectDrawData, uint32_t drawCount); // Push Constant variable setting template diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp new file mode 100644 index 00000000..0a38e40b --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -0,0 +1,181 @@ +/************************************************************************************//*! +\file SHBatch.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains the definition of SHBatch's functions. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHBatch.h" + +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/SHVkUtil.h" +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* SHBatch - Usage Functions */ + /*---------------------------------------------------------------------------------*/ + SHBatch::SHBatch(Handle pipeline) + : pipeline { pipeline } + { + if (!pipeline) + throw std::invalid_argument("Attempted to create a SHBatch with an invalid SHPipeline!"); + } + + void SHBatch::Add(Handle renderable) + { + // Check if we have a SubBatch with the same mesh yet + auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) + { + return batch.Mesh == renderable->Mesh; + }); + + // Create one if not found + if (subBatch == subBatches.end()) + { + subBatches.emplace_back(renderable->Mesh); + subBatch = subBatches.end() - 1; + } + + // Add renderable in + subBatch->Renderables.insert(renderable); + } + + void SHBatch::Remove(Handle renderable) + { + // Check if we have a SubBatch with the same mesh yet + auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) + { + return batch.Mesh == renderable->Mesh; + }); + + // Attempt to remove if it exists + if (subBatch == subBatches.end()) + return; + + subBatch->Renderables.erase(renderable); + } + + void SHBatch::Clear() + { + subBatches.clear(); + + // Clear CPU buffers + drawData.clear(); + transformData.clear(); + matPropsData.reset(); + matPropsDataSize = 0; + + + // Clear GPU buffers + drawDataBuffer.Free(); + transformDataBuffer.Free(); + matPropsBuffer.Free(); + } + + void SHBatch::Build(Handle device, Handle cmdBuffer) + { + // No need to build as there are no changes + if (!isDirty) + return; + + // Count number of elements + size_t numTotalElements = 0; + for (const auto& subBatch : subBatches) + { + numTotalElements += subBatch.Renderables.size(); + } + + // Generate CPU buffers + // - Draw data + drawData.reserve(subBatches.size()); + drawData.clear(); + // - Transform data + transformData.reserve(numTotalElements); + transformData.clear(); + // - Material Properties Data + const Byte SINGLE_MAT_PROPS_SIZE = pipeline->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + )->GetBytesRequired(); + const Byte MATPROPS_TOTAL_BYTES = drawData.size() * SINGLE_MAT_PROPS_SIZE; + if (matPropsDataSize < MATPROPS_TOTAL_BYTES) + { + matPropsData.reset(new char[MATPROPS_TOTAL_BYTES]); + matPropsDataSize = MATPROPS_TOTAL_BYTES; + } + + // Build Sub Batches + uint32_t nextInstanceIndex = 0; + char* propsCurrPtr = matPropsData.get(); + for (auto& subBatch : subBatches) + { + // Create command + drawData.emplace_back(vk::DrawIndexedIndirectCommand + { + .indexCount = subBatch.Mesh->IndexCount, + .instanceCount = static_cast(subBatch.Renderables.size()), + .firstIndex = subBatch.Mesh->FirstIndex, + .vertexOffset = subBatch.Mesh->FirstVertex, + .firstInstance = nextInstanceIndex + }); + + // Fill in buffers (CPU) + for (Handle renderable : subBatch.Renderables) + { + // Transform + transformData.emplace_back(renderable->TransformMatrix); + // Material Properties + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + propsCurrPtr += SINGLE_MAT_PROPS_SIZE; + } + } + + // Send all buffered data to the GPU buffers + using BuffUsage = vk::BufferUsageFlagBits; + // - Draw Data + const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, drawDataBuffer, drawData.data(), DRAW_DATA_BYTES, + BuffUsage::eIndirectBuffer + ); + // - Transform Buffer + const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, transformDataBuffer, transformData.data(), TF_DATA_BYTES, + BuffUsage::eVertexBuffer + ); + // - Material Properties Buffer + SHVkUtil::EnsureBufferAndCopyData + ( + device, cmdBuffer, matPropsBuffer, matPropsData.get(), static_cast(MATPROPS_TOTAL_BYTES), + BuffUsage::eStorageBuffer + ); + + isDirty = false; + } + + /*---------------------------------------------------------------------------------*/ + /* SHBatch - Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void SHBatch::Draw(Handle cmdBuffer) + { + cmdBuffer->DrawMultiIndirect(drawDataBuffer, static_cast(drawData.size())); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h new file mode 100644 index 00000000..e87c16ef --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -0,0 +1,101 @@ +/************************************************************************************//*! +\file SHBatch.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains the definition of SHSubBatch and SHBatch. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// External Dependencies +#include "Graphics/SHVulkanIncludes.h" +// Project Includes +#include "Resource/Handle.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Math/SHMatrix.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkCommandBuffer; + class SHVkPipeline; + class SHMesh; + class SHRenderable; + class SHVkLogicalDevice; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Describes a segment of the sub batch operation. + */ + /***********************************************************************************/ + struct SHSubBatch + { + public: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle Mesh; + std::unordered_set> Renderables; + }; + /***********************************************************************************/ + /*! + \brief + Describes a segment of the sub batch operation. + */ + /***********************************************************************************/ + class SHBatch + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHBatch(Handle pipeline); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + void Add(Handle renderable); + void Remove(Handle renderable); + void Clear(); + void Build(Handle device, Handle cmdBuffer); + void Draw(Handle cmdBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetPipeline() const noexcept { return pipeline; }; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Batch Properties + Handle pipeline; + // Batch Tree + std::vector subBatches; + bool isDirty = true; + // CPU Buffers + std::vector drawData; + std::vector transformData; + std::unique_ptr matPropsData; + Byte matPropsDataSize = 0; + // GPU Buffers + Handle drawDataBuffer; + Handle transformDataBuffer; + Handle matPropsBuffer; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp new file mode 100644 index 00000000..ced97876 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -0,0 +1,107 @@ +/************************************************************************************//*! +\file SHBatcher.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHBatcher.h" +// STL Includes +#include +// Project Includes +#include "SHSuperBatch.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Graphics/Pipeline/SHVkPipeline.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + void SHBatcher::Init(const std::vector& _renderables, Handle _renderGraph) + { + renderables = &_renderables; + renderGraph = _renderGraph; + } + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void SHBatcher::PrepareBatches() + { + // Iterate through all renderables and send it into the batching + for (auto iter = renderables->cbegin(); iter != renderables->cend(); ++iter) + { + AddToBatch(iter->GetHandle()); + } + } + + void SHBatcher::AddToBatch(Handle renderable) + { + // Get Subpass Index for this renderables pipeline + const SHSubPassIndex SUB_PASS_IDX = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpassIndex(); + + + // Check if there is a SuperBatch for the specific RenderPass + auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](const SHSuperBatch& superBatch) + { + return superBatch.GetSubpassId() == SUB_PASS_IDX; + }); + + // Create if it doesn't exist + if (superBatch == superBatches.end()) + { + superBatches.emplace_back(SUB_PASS_IDX); + superBatch = superBatches.end(); + } + + // Add the Renderable + superBatch->Add(renderable->GetHandle()); + } + + void SHBatcher::RemoveFromBatch(Handle renderable) + { + // Get Subpass Index for this renderables pipeline + const SHSubPassIndex SUB_PASS_IDX = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpassIndex(); + + // Check if there is a SuperBatch for the specific RenderPass + auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](const SHSuperBatch& superBatch) + { + return superBatch.GetSubpassId() == SUB_PASS_IDX; + }); + + // Remove if it exists + if (superBatch == superBatches.end()) + return; + + superBatch->Remove(renderable); + } + + void SHBatcher::FinaliseBatches(Handle device, Handle cmdBuffer) + { + // Build SuperBatches + for (auto& batch : superBatches) + { + batch.Build(device, cmdBuffer); + } + } + + void SHBatcher::ClearBatches() + { + for (auto& batch : superBatches) + { + batch.Clear(); + } + superBatches.clear(); + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h new file mode 100644 index 00000000..ccbbd1d0 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -0,0 +1,63 @@ +/************************************************************************************//*! +\file SHBatcher.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHRenderable; + class SHRenderGraph; + class SHSuperBatch; + class SHVkLogicalDevice; + class SHVkCommandBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Handles batching of all Renderables assigned to a specific Renderer. + */ + /***********************************************************************************/ + class SHBatcher + { + public: + /*-----------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------*/ + void Init(const std::vector& _renderables, Handle _renderGraph); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + void PrepareBatches(); + void AddToBatch(Handle renderable); + void RemoveFromBatch(Handle renderable); + void FinaliseBatches(Handle device, Handle cmdBuffer); + void ClearBatches(); + + private: + const std::vector* renderables = nullptr; + Handle renderGraph; + // Children + std::vector superBatches; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp new file mode 100644 index 00000000..6ca498f3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -0,0 +1,99 @@ +/************************************************************************************//*! +\file SHSuperBatch.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the definition of SHSuperBatch's functions. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHSuperBatch.h" + +#include "SHBatch.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + + SHSuperBatch::SHSuperBatch(SHSubPassIndex subPass) + : subpassIndex { subPass } + {} + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void SHSuperBatch::Add(Handle renderable) noexcept + { + const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); + + // Check if we have a batch with the same pipeline first + auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) + { + return batch.GetPipeline() == PIPELINE; + }); + + + // Create one if not found + if (batch == batches.end()) + { + batches.emplace_back(PIPELINE); + batch = batches.end() - 1; + } + + // Add renderable in + batch->Add(renderable); + } + + void SHSuperBatch::Remove(Handle renderable) noexcept + { + const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); + + // Check if we have a Batch with the same pipeline yet + auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) + { + return batch.GetPipeline() == PIPELINE; + }); + + // Attempt to remove if it exists + if (batch == batches.end()) + return; + + batch->Remove(renderable); + } + + void SHSuperBatch::Clear() noexcept + { + for (auto& batch : batches) + { + batch.Clear(); + } + batches.clear(); + } + + void SHSuperBatch::Build(Handle device, Handle cmdBuffer) noexcept + { + // Build all batches + for (auto& batch : batches) + { + batch.Build(device, cmdBuffer); + } + } + + void SHSuperBatch::Draw(Handle cmdBuffer) noexcept + { + // Build all batches + for (auto& batch : batches) + { + batch.Draw(cmdBuffer); + } + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h new file mode 100644 index 00000000..55f23dbb --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -0,0 +1,76 @@ +/************************************************************************************//*! +\file SHSuperBatch.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 8, 2022 +\brief Contains the definition of SHSuperBatch. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Graphics/SHVulkanIncludes.h" +// Project Includes +#include "Resource/Handle.h" +#include "SHBatch.h" +#include "Graphics/Pipeline/SHVkPipeline.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkCommandBuffer; + class SHMesh; + class SHRenderable; + class SHVkLogicalDevice; + class SHSubpass; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Stores and manages data for all of the batches associated with a specific SubPass + within a RenderGraph. + */ + /***********************************************************************************/ + class SHSuperBatch + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHSuperBatch(SHSubPassIndex subPass); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + void Add(Handle renderable) noexcept; + void Remove(Handle renderable) noexcept; + void Clear() noexcept; + void Build(Handle device, Handle cmdBuffer) noexcept; + void Draw(Handle cmdBuffer) noexcept; + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + SHSubPassIndex GetSubpassId() const noexcept { return subpassIndex; }; + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Batch Properties + SHSubPassIndex subpassIndex; + // Children + std::vector batches; + }; +} + diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp index 2f8fb9ea..7e7412b9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -21,23 +21,23 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHCamera::SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up) { - const SHVec3 VIEW = (target - pos).Normalized(); - const SHVec3 RIGHT = SHVec3::Cross(VIEW, up).Normalized(); - const SHVec3 UP = SHVec3::Cross(RIGHT, VIEW); + SHVec3 view = target - pos; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(right, view); viewMatrix = SHMatrix::Identity; - viewMatrix(0, 0) = RIGHT[0]; - viewMatrix(1, 0) = RIGHT[1]; - viewMatrix(2, 0) = RIGHT[2]; + viewMatrix(0, 0) = right[0]; + viewMatrix(1, 0) = right[1]; + viewMatrix(2, 0) = right[2]; viewMatrix(0, 1) = UP[0]; viewMatrix(1, 1) = UP[1]; viewMatrix(2, 1) = UP[2]; - viewMatrix(0, 2) = -VIEW[0]; - viewMatrix(1, 2) = -VIEW[1]; - viewMatrix(2, 2) = -VIEW[2]; - viewMatrix(3, 0) = -RIGHT.Dot(pos); + viewMatrix(0, 2) = -view[0]; + viewMatrix(1, 2) = -view[1]; + viewMatrix(2, 2) = -view[2]; + viewMatrix(3, 0) = -right.Dot(pos); viewMatrix(3, 1) = -UP.Dot(pos); - viewMatrix(3, 2) = VIEW.Dot(pos); + viewMatrix(3, 2) = view.Dot(pos); isDirty = true; } @@ -79,32 +79,32 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - SHMathMat4f SHCamera::GetViewMatrix() const + SHMatrix SHCamera::GetViewMatrix() const { return viewMatrix; } - SHMathMat4f SHCamera::GetProjectionMatrix() const + SHMatrix SHCamera::GetProjectionMatrix() const { return projMatrix; } - SHMathMat4f SHCamera::GetViewProjectionMatrix() + SHMatrix SHCamera::GetViewProjectionMatrix() { updateMatrices(); return vpMatrix; } - SHMathMat4f SHCamera::GetInverseViewMatrix() const + SHMatrix SHCamera::GetInverseViewMatrix() const { return inverseVpMatrix; } - SHMathMat4f SHCamera::GetInverseProjectionMatrix() const + SHMatrix SHCamera::GetInverseProjectionMatrix() const { return inverseProjMatrix; } - SHMathMat4f SHCamera::GetInverseViewProjectionMatrix() + SHMatrix SHCamera::GetInverseViewProjectionMatrix() { updateMatrices(); return inverseViewMatrix; @@ -138,11 +138,11 @@ namespace SHADE if (isDirty) { vpMatrix = viewMatrix * projMatrix; - inverseVpMatrix = vpMatrix; - inverseVpMatrix.Inverse(); + inverseVpMatrix = SHMatrix::Inverse(vpMatrix); } } - SHVec3 SHCamera::multiplyHomogenous(const SHMathMat4f& mat, const SHVec3& vec) + + SHVec3 SHCamera::multiplyHomogenous(const SHMatrix& mat, const SHVec3& vec) { const SHVec4 HOMO_VEC = { vec[0], vec[1], vec[2], 1.0f }; const SHVec4 RESULT = mat * HOMO_VEC; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h index fa6e31b5..c54f29ed 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h @@ -75,6 +75,6 @@ namespace SHADE /* Helper Functions */ /*-----------------------------------------------------------------------------*/ void updateMatrices(); - static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHMatrix& vec); + static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHVec3& vec); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 4f20afd4..7dcf12c0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -46,6 +46,8 @@ namespace SHADE class SHViewport; class SHCamera; class SHVkShaderModule; + class SHMaterial; + class SHMaterialInstance; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp index 5f697208..8b0778d2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp @@ -11,6 +11,10 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #include "SHpch.h" #include "SHMaterialInstance.h" + +#include "SHGraphicsConstants.h" +#include "SHMaterial.h" +#include "Graphics/Pipeline/SHVkPipeline.h" #include "Tools/SHLogger.h" namespace SHADE @@ -39,7 +43,7 @@ namespace SHADE assert(dataStore != nullptr); if (!baseMaterial) - throw std::runtime_error("[SHMaterialInstance] Attempted to set export a Material Instance with no base Material!"); + throw std::runtime_error("[SHMaterialInstance] Attempted to set export a Material Instance with no base Material!"); // Copy default data from Material baseMaterial->ExportProperties(dest); @@ -49,14 +53,27 @@ namespace SHADE for (const auto& data : overrideData) { // Get memory offset to the data - SHShaderBlockInterface::Variable variable = SHADER_INFO->GetVariable(data.Index); + const SHShaderBlockInterface::Variable* variable = SHADER_INFO->GetVariable(data.Index); if (variable == nullptr) { SHLOG_WARNING("[SHMaterialInstance] Invalid override data indices provided. Skipping."); continue; } const auto DATA_OFFSET = variable->offset; - memcpy_s(dest + DATA_OFFSET, dataStore.get() + data.StoredDataOffset, data.DataSize); + memcpy(static_cast(dest) + DATA_OFFSET, dataStore.get() + data.StoredDataOffset, data.DataSize); } } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHMaterialInstance::getShaderBlockInterface() const noexcept + { + return baseMaterial->GetPipeline()->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + ); + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h index d2b222e6..db0201b7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h @@ -14,6 +14,7 @@ of DigiPen Institute of Technology is prohibited. #include // Project Includes #include "Resource/Handle.h" +#include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" namespace SHADE { @@ -76,6 +77,11 @@ namespace SHADE std::vector overrideData; std::unique_ptr dataStore; size_t dataStoreSize = 0; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + Handle getShaderBlockInterface() const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp index 9980dfae..0aead306 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp @@ -30,12 +30,12 @@ namespace SHADE // Allocate data store if it was empty if (dataStore == nullptr) { - dataStoreSize = SHADER_INFO->GetBytesRequired();dataStoreSize + dataStoreSize = SHADER_INFO->GetBytesRequired(); dataStore.reset(new char[dataStoreSize]); } OverrideData od; - od.Index = SHADER_INFO.GetVariableIndex(key); + od.Index = SHADER_INFO->GetVariableIndex(key); od.DataSize = sizeof(T); if (overrideData.empty()) { @@ -65,7 +65,7 @@ namespace SHADE } // Search Override Data for the property - uint32_t PROP_IDX = SHADER_INFO.GetVariableIndex(key); + uint32_t PROP_IDX = SHADER_INFO->GetVariableIndex(key); auto prop = std::find(overrideData.begin(), overrideData.end(), [&](const OverrideData& data) { return PROP_IDX == data.Index; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h index f8a89687..ffebb74d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Resource/Handle.h" #include "Resource/ResourceLibrary.h" -#include "SHVertex.h" +#include "Math/SHMath.h" namespace SHADE { @@ -44,10 +44,10 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------*/ using Index = uint32_t; - using VertexPosition = SHMathVec3f; - using VertexTexCoord = SHMathVec2f; - using VertexTangent = SHMathVec3f; - using VertexNormal = SHMathVec3f; + using VertexPosition = SHVec3; + using VertexTexCoord = SHVec2; + using VertexTangent = SHVec3; + using VertexNormal = SHVec3; /*-----------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 41a8d8d0..eb59ee14 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -13,6 +13,8 @@ of DigiPen Institute of Technology is prohibited. #include "SHRenderable.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "SHGraphicsSystem.h" +#include "SHMaterialInstance.h" namespace SHADE { @@ -46,4 +48,4 @@ namespace SHADE return material; } -} \ No newline at end of file +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 000fec4f..7bc143e6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -18,7 +18,6 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "SHCamera.h" #include "Resource/Handle.h" -#include "SHGraphicsConstants.h" #include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE @@ -76,6 +75,6 @@ namespace SHADE /* Data Members */ /*-----------------------------------------------------------------------------*/ Handle camera; - Handle renderGraph; + Handle renderGraph; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 47f9ec5a..565ee04f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -17,6 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Instance/SHVkInstance.h" #include "Tools/SHLogger.h" #include "SHRenderer.h" +#include "Resource/ResourceLibrary.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 01637db3..e970e32c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -28,6 +28,7 @@ namespace SHADE class SHVkCommandBuffer; class SHVkLogicalDevice; class SHVkImageView; + class ResourceManager; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp index 6094958e..0b4f033f 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp @@ -107,7 +107,7 @@ namespace SHADE return renderpassHdl; } - uint32_t SHVkPipelineState::GetSubpassIndex(void) const noexcept + SHSubPassIndex SHVkPipelineState::GetSubpassIndex(void) const noexcept { return subpassIndex; } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index e692163b..08c35060 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -208,7 +208,7 @@ namespace SHADE SHDepthStencilState const& GetDepthStencilState (void) const noexcept; SHColorBlendState const& GetColorBlenState (void) const noexcept; Handle const& GetRenderpass (void) const noexcept; - uint32_t GetSubpassIndex (void) const noexcept; + SHSubPassIndex GetSubpassIndex (void) const noexcept; void SetDirty(bool isDirty) noexcept; }; diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index b0ae7445..afed0736 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -10,6 +10,10 @@ namespace SHADE { class SHVkLogicalDevice; class SHVkFramebuffer; + /*-----------------------------------------------------------------------*/ + /* TYPE DEFINTIIONS */ + /*-----------------------------------------------------------------------*/ + using SHSubPassIndex = uint32_t; class SHVkRenderpass { diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index 2fa03fbf..0c6af0d9 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -1,6 +1,10 @@ #include "SHPch.h" #include "SHVkUtil.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" + namespace SHADE { @@ -19,4 +23,29 @@ namespace SHADE IsDepthOnlyFormat(format); } + void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) + { + if (bufferHandle) + { + // Resize + bufferHandle->ResizeReplace(size, src, size); + } + else + { + // Create new + using BuffUsage = vk::BufferUsageFlagBits; + bufferHandle = device->CreateBuffer + ( + size, + src, + size, + usage | BuffUsage::eTransferDst, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT + ); + } + + // Order transfers + bufferHandle->TransferToDeviceResource(cmdBuffer); + } } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index 4513f59c..fdbb9dee 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -3,13 +3,53 @@ #include "SHVulkanIncludes.h" +#include "Resource/Handle.h" + namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkLogicalDevice; + class SHVkCommandBuffer; + class SHVkBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ class SHVkUtil { public: static bool IsDepthOnlyFormat (vk::Format format) noexcept; static bool IsDepthStencilAttachment(vk::Format format) noexcept; + /***********************************************************************************/ + /*! + + \brief + Ensures that the specified bufferHandle contains a buffer that fits the specified + size and creates it if it does not exist. This follows by issuing a transfer + command into the created buffer. + + All created buffers will use VMA_MEMORY_USAGE_AUTO and + VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. + + \param device + Device used to create the SHVkBuffer. + \param cmdBuffer + CommandBuffer which commands for issuing transferring the data to the GPU. + \param bufferHandle + Reference to the handle that holds any existing buffer or will be used to hold the + created buffer. + \param src + Data to copy from. + \param size + Size of data to copy. + \param usage + Usage flags for the buffer. + + */ + /***********************************************************************************/ + static void EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); }; } diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp index cfa26e4c..7ed50c59 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp @@ -1,5 +1,6 @@ #include "SHPch.h" #include "SHShaderBlockInterface.h" +#include "Tools/SHLogger.h" namespace SHADE { @@ -12,14 +13,14 @@ namespace SHADE SHLOG_WARNING("[SHShaderBlockInterface] Attempted to specify a variable with a duplicate name. This will be ignored."); return; } - variableIndexing.emplace_back(std::move(newVariable)); - variables.try_emplace (std::move(name), static_cast(variableIndexing.size() - 1)); + variables.emplace_back(std::move(newVariable)); + variableIndexing.try_emplace(std::move(name), static_cast(variables.size() - 1)); } SHShaderBlockInterface::Variable const* const SHShaderBlockInterface::GetVariable(std::string const& variableName) const noexcept { if (variableIndexing.contains(variableName)) - return &variables.at(variableIndexing.at(variableName).second); + return &variables.at(variableIndexing.at(variableName)); return nullptr; } @@ -32,12 +33,12 @@ namespace SHADE return nullptr; } - uint32_t SHShaderBlockInterface::GetVariableIndex(std::string const& variableName) const noexcept + uint32_t SHShaderBlockInterface::GetVariableIndex(std::string const& variableName) const { if (!variableIndexing.contains(variableName)) throw std::invalid_argument("Attempted to retrieve index to variable that does not exist!"); - return variableIndexing.at(variableName).second; + return variableIndexing.at(variableName); } SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept @@ -47,7 +48,7 @@ namespace SHADE SHShaderBlockInterface::SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept : variables { std::move(rhs.variables) } , variableIndexing { std::move(rhs.variableIndexing) } - , bytesRequired { std::move (rhs.bytesRequired) } + , bytesRequired { rhs.bytesRequired } {} void SHShaderBlockInterface::SetBytesRequired(uint32_t bytes) noexcept @@ -68,7 +69,7 @@ namespace SHADE variables = std::move(rhs.variables); variableIndexing = std::move(rhs.variableIndexing); - bytesRequired = std::move(rhs.bytesRequired); + bytesRequired = rhs.bytesRequired; return *this; } diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/Handle.h index afaec8e1..c56e29bd 100644 --- a/SHADE_Engine/src/Resource/Handle.h +++ b/SHADE_Engine/src/Resource/Handle.h @@ -10,7 +10,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ template class ResourceLibrary; - + /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ @@ -89,7 +89,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ Handle() = default; ~Handle() = default; - + /*-----------------------------------------------------------------------------*/ /* Usage Functions */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Resource/Handle.hpp b/SHADE_Engine/src/Resource/Handle.hpp index d7f48ba1..0c6e6bf4 100644 --- a/SHADE_Engine/src/Resource/Handle.hpp +++ b/SHADE_Engine/src/Resource/Handle.hpp @@ -14,16 +14,16 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* HandleBase - Overloaded Operators */ - /*---------------------------------------------------------------------------------*/ inline HandleBase::operator bool() const + /*---------------------------------------------------------------------------------*/ { return id.Raw != INVALID_ID.Raw; } - + /*---------------------------------------------------------------------------------*/ /* Handle - Usage Functions */ /*---------------------------------------------------------------------------------*/ - template + template inline void Handle::Free() { library->Free(*this); diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.h b/SHADE_Engine/src/Resource/ResourceLibrary.h index 01a78d16..4588b9fe 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.h +++ b/SHADE_Engine/src/Resource/ResourceLibrary.h @@ -62,14 +62,14 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ SparseSet objects; SparseSet versionCounts; - std::queue freeList; + std::queue freeList; uint32_t lastIdx = 0; /*-----------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------*/ void assertHandleValid(Handle handle) const; - uint32_t getAvailableFreeIndex(); + uint32_t getAvailableFreeIndex(); }; /// From 6e4d6abd1c72c279be82b0e6198ece43248204f5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 17 Sep 2022 23:37:16 +0800 Subject: [PATCH 103/793] Fixed Handle<> include issues --- .../src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h | 2 +- SHADE_Engine/src/Resource/Handle.hpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index 264caca5..52cb8e9c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -23,7 +23,7 @@ namespace SHADE template std::size_t operator() (std::pair const& pair) const { - return std::hash()(pair.first.GetId()) ^ std::hash()(pair.second.GetId()); + return std::hash(pair.first.GetId()) ^ std::hash(pair.second.GetId()); } }; diff --git a/SHADE_Engine/src/Resource/Handle.hpp b/SHADE_Engine/src/Resource/Handle.hpp index 0c6e6bf4..64918e0f 100644 --- a/SHADE_Engine/src/Resource/Handle.hpp +++ b/SHADE_Engine/src/Resource/Handle.hpp @@ -1,6 +1,7 @@ #pragma once // Primary Header #include "Handle.h" +#include "ResourceLibrary.h" namespace SHADE { From a3aa708b3402b0ab86c15f89ccc6df2c88a94b74 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 00:49:27 +0800 Subject: [PATCH 104/793] Fixed numerous template errors and warnings --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 20 ++-- .../MiddleEnd/Interface/SHMeshLibrary.h | 2 +- .../MiddleEnd/Interface/SHRenderer.cpp | 8 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 100 +++++++++--------- .../Graphics/MiddleEnd/Interface/SHViewport.h | 2 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 2 + .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 11 +- SHADE_Engine/src/Resource/Handle.h | 27 +++++ SHADE_Engine/src/Resource/Handle.hpp | 20 ++++ 10 files changed, 116 insertions(+), 77 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 0a38e40b..a4d3cb50 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -14,6 +14,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHBatch.h" #include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 893ea182..0e44ac8e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -100,13 +100,13 @@ namespace SHADE // Set Up Cameras screenCamera = resourceManager.Create(); screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); - screenCamera->SetOrthographic(windowDims.first, windowDims.second, 0.01f, 100.0f); + screenCamera->SetOrthographic(static_cast(windowDims.first), static_cast(windowDims.second), 0.01f, 100.0f); worldCamera = resourceManager.Create(); worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); - worldCamera->SetPerspective(90.0f, windowDims.first, windowDims.second, 0.0f, 100.0f); + worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); // Create Default Viewport - defaultViewport = AddViewport(vk::Viewport(0, 0, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); + defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); // Create Debug Renderers debugScreenRenderer = defaultViewport->AddRenderer(resourceManager); @@ -171,7 +171,7 @@ namespace SHADE */ /***************************************************************************/ - void SHGraphicsSystem::Run(double dt) noexcept + void SHGraphicsSystem::Run(double) noexcept { // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); @@ -182,13 +182,13 @@ namespace SHADE // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) { - auto const& renderers = viewports[vpIndex]->GetRenderers(); + auto& renderers = viewports[vpIndex]->GetRenderers(); // For every renderer for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) { // Draw first - renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); // get render graph auto rg = renderers[renIndex]->GetRenderGraph(); @@ -328,11 +328,11 @@ namespace SHADE Handle pipeline = pipelineLibrary.GetDrawPipline(shaderPair); if (!pipeline) { - pipeline = pipelineLibrary.CreateDrawPipeline - ( - shaderPair, + /*pipeline = pipelineLibrary.CreateDrawPipeline + ( + shaderPair, - ); + );*/ } // Create material diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h index ffebb74d..e9923385 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h @@ -104,7 +104,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); + Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); /*******************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 6a5b86e3..ab6a97d2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -25,12 +25,10 @@ namespace SHADE /* Constructor/Destructors */ /*---------------------------------------------------------------------------------*/ SHRenderer::SHRenderer(Handle viewport, ResourceManager& resourceManager) - : renderGraph{resourceManager.Create ()} + : viewport { viewport } + , renderGraph { resourceManager.Create ()} { - } - SHRenderer::~SHRenderer() - { } /*-----------------------------------------------------------------------------*/ @@ -44,7 +42,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Drawing Functions */ /*---------------------------------------------------------------------------------*/ - void SHRenderer::Draw(uint32_t frameIndex) const noexcept + void SHRenderer::Draw(uint32_t frameIndex) noexcept { renderGraph->Execute(frameIndex); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 7bc143e6..ed0c6ec3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -22,59 +22,59 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ - class SHVkBuffer; - class SHVkRenderpass; - class SHVkFramebuffer; - class SHMaterial; - class SHVkLogicalDevice; - class SHViewport; - class SHVkImageView; - class SHVkCommandBuffer; - class SHCamera; + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkRenderpass; + class SHVkFramebuffer; + class SHMaterial; + class SHVkLogicalDevice; + class SHViewport; + class SHVkImageView; + class SHVkCommandBuffer; + class SHCamera; - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - /***********************************************************************************/ - /*! - \brief - Brings together a set of Cameras and objects with various Pipelines to render - them as part of a set. Multiple Renderers can exist to render objects differently - in a separate step. - */ - /***********************************************************************************/ - class SHRenderer - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*-----------------------------------------------------------------------------*/ - SHRenderer(Handle viewport, ResourceManager& resourceManager); - ~SHRenderer(); + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Brings together a set of Cameras and objects with various Pipelines to render + them as part of a set. Multiple Renderers can exist to render objects differently + in a separate step. + */ + /***********************************************************************************/ + class SHRenderer + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + SHRenderer(Handle viewport, ResourceManager& resourceManager); - /*-----------------------------------------------------------------------------*/ - /* Camera Registration */ - /*-----------------------------------------------------------------------------*/ - void SetCamera(Handle _camera); + /*-----------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------*/ + void SetCamera(Handle _camera); - /*-----------------------------------------------------------------------------*/ - /* Drawing Functions */ - /*-----------------------------------------------------------------------------*/ - void Draw(uint32_t frameIndex) const noexcept; + /*-----------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*-----------------------------------------------------------------------------*/ + void Draw(uint32_t frameIndex) noexcept; - /*-----------------------------------------------------------------------------*/ - /* Setters and Getters */ - /*-----------------------------------------------------------------------------*/ - Handle GetRenderGraph (void) const noexcept; + /*-----------------------------------------------------------------------------*/ + /* Setters and Getters */ + /*-----------------------------------------------------------------------------*/ + Handle GetRenderGraph (void) const noexcept; - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - Handle camera; - Handle renderGraph; - }; + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Handle viewport; + Handle camera; + Handle renderGraph; + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index e970e32c..33179477 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -67,7 +67,7 @@ namespace SHADE float GetHeight() const { return viewport.height; } float GetMinDepth() const { return viewport.minDepth; } float GetMaxDepth() const { return viewport.maxDepth; } - const std::vector>& GetRenderers() const { return renderers; } + std::vector>& GetRenderers() { return renderers; } private: diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index ed3900d5..7e9c2cbd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -25,6 +25,8 @@ namespace SHADE // Emplace the new pipeline pipelines.emplace (vsFsPair, newPipeline); + + return newPipeline; } void SHPipelineLibrary::Init(Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index 52cb8e9c..c2a5a916 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -4,7 +4,6 @@ #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Pipeline/SHVkPipeline.h" - namespace SHADE { class SHVRenderpass; @@ -18,20 +17,12 @@ namespace SHADE { private: // TOOD: Move this somewhere eventually. Can use for other things - struct SHHandlePairHash - { - template - std::size_t operator() (std::pair const& pair) const - { - return std::hash(pair.first.GetId()) ^ std::hash(pair.second.GetId()); - } - }; //! Logical Device required for creation of pipelines Handle logicalDevice; //! a map of pipelines that are hashed using a pair of shader module handles - std::unordered_map, Handle>, Handle, SHHandlePairHash> pipelines; + std::unordered_map, Handle>, Handle> pipelines; //! Default vertex input state for pipeline creation SHVertexInputState const* vertexInputState; diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/Handle.h index c56e29bd..a0272290 100644 --- a/SHADE_Engine/src/Resource/Handle.h +++ b/SHADE_Engine/src/Resource/Handle.h @@ -190,6 +190,33 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ Handle handle; }; + +} + +namespace std +{ + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// std::hash template specialization for Handle + /// + /// Type for the Handle. + template + struct hash> + { + std::size_t operator() (const SHADE::Handle& hdl) const; + }; + /// + /// std::hash template specialization for std::pair, Handle> + /// + /// Type for the first Handle. + /// Type for the second Handle. + template + struct hash, SHADE::Handle>> + { + std::size_t operator() (std::pair, SHADE::Handle> const& pair) const; + }; } #include "Handle.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Resource/Handle.hpp b/SHADE_Engine/src/Resource/Handle.hpp index 64918e0f..27cdd1cd 100644 --- a/SHADE_Engine/src/Resource/Handle.hpp +++ b/SHADE_Engine/src/Resource/Handle.hpp @@ -95,3 +95,23 @@ namespace SHADE handle = hdl; } } + +namespace std +{ + /*---------------------------------------------------------------------------------*/ + /* std::hash Template Specializations */ + /*---------------------------------------------------------------------------------*/ + template + std::size_t hash>::operator()(const SHADE::Handle& hdl) const + { + return std::hash{}(hdl.GetId().Raw); + } + + template + std::size_t hash, SHADE::Handle>>::operator()( + std::pair, SHADE::Handle> const& pair) const + { + + return std::hash{}(pair.first.GetId().Raw) ^ std::hash{}(pair.second.GetId().Raw); + } +} From 7a126bf1fc950514c350684d3612c278a2bf6cfa Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 14:49:15 +0800 Subject: [PATCH 105/793] SHViewport now takes in a RenderGraph instead of creating one --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 6 +-- .../MiddleEnd/Interface/SHRenderer.cpp | 52 +++++++++---------- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 2 +- .../MiddleEnd/Interface/SHViewport.cpp | 4 +- .../Graphics/MiddleEnd/Interface/SHViewport.h | 2 +- 5 files changed, 32 insertions(+), 34 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 0e44ac8e..d05ece2e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -109,13 +109,13 @@ namespace SHADE defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); // Create Debug Renderers - debugScreenRenderer = defaultViewport->AddRenderer(resourceManager); + debugScreenRenderer = defaultViewport->AddRenderer(resourceManager,); debugScreenRenderer->SetCamera(screenCamera); - debugWorldRenderer = defaultViewport->AddRenderer(resourceManager); + debugWorldRenderer = defaultViewport->AddRenderer(resourceManager, ); debugWorldRenderer->SetCamera(worldCamera); // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager); + worldRenderer = defaultViewport->AddRenderer(resourceManager, ); worldRenderer->SetCamera(worldCamera); // Get render graph from default viewport world renderer diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index ab6a97d2..d2c447d1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -21,35 +21,33 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*---------------------------------------------------------------------------------*/ - SHRenderer::SHRenderer(Handle viewport, ResourceManager& resourceManager) - : viewport { viewport } - , renderGraph { resourceManager.Create ()} - { - - } + /*-----------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------------*/ + SHRenderer::SHRenderer(Handle viewport, Handle renderGraph) + : viewport { viewport } + , renderGraph { renderGraph } + {} - /*-----------------------------------------------------------------------------*/ - /* Camera Registration */ - /*-----------------------------------------------------------------------------*/ - void SHRenderer::SetCamera(Handle _camera) - { - camera = _camera; - } + /*-----------------------------------------------------------------------------------*/ + /* Camera Registration */ + /*-----------------------------------------------------------------------------------*/ + void SHRenderer::SetCamera(Handle _camera) + { + camera = _camera; + } - /*---------------------------------------------------------------------------------*/ - /* Drawing Functions */ - /*---------------------------------------------------------------------------------*/ - void SHRenderer::Draw(uint32_t frameIndex) noexcept - { - renderGraph->Execute(frameIndex); - } + /*-----------------------------------------------------------------------------------*/ + /* Drawing Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHRenderer::Draw(uint32_t frameIndex) noexcept + { + renderGraph->Execute(frameIndex); + } - Handle SHRenderer::GetRenderGraph(void) const noexcept - { - return renderGraph; - } + Handle SHRenderer::GetRenderGraph(void) const noexcept + { + return renderGraph; + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index ed0c6ec3..4b7e354f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -52,7 +52,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ - SHRenderer(Handle viewport, ResourceManager& resourceManager); + SHRenderer(Handle viewport, Handle renderGraph); /*-----------------------------------------------------------------------------*/ /* Camera Registration */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 565ee04f..56265a3f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -48,10 +48,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Renderer Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHViewport::AddRenderer(ResourceManager& resourceManager) + Handle SHViewport::AddRenderer(ResourceManager& resourceManager, Handle renderGraph) { // Create the renderer - auto renderer = SHVkInstance::GetResourceManager().Create(GetHandle(), resourceManager); + auto renderer = SHVkInstance::GetResourceManager().Create(GetHandle(), renderGraph); // Store renderers.emplace_back(renderer); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 33179477..0e378c54 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -55,7 +55,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Renderers Registration Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddRenderer(ResourceManager& resourceManager); + Handle AddRenderer(ResourceManager& resourceManager, Handle renderGraph); void RemoveRenderer(Handle renderer); /*-----------------------------------------------------------------------------*/ From 8c30e656f7b38697fb597e5d590ccda020c89114 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 14:58:32 +0800 Subject: [PATCH 106/793] Modified AddMaterial() to take in a subpass --- .../Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 11 ++++++----- .../Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 5 ++--- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index d05ece2e..376f19a7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -321,18 +321,19 @@ namespace SHADE viewports.erase(iter); } - Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader) + Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader, Handle subpass) { // Retrieve pipeline from pipeline storage or create if unavailable auto shaderPair = std::make_pair(vertShader, fragShader); Handle pipeline = pipelineLibrary.GetDrawPipline(shaderPair); if (!pipeline) - { - /*pipeline = pipelineLibrary.CreateDrawPipeline + { + pipeline = pipelineLibrary.CreateDrawPipeline ( shaderPair, - - );*/ + subpass->GetParentNode()->GetRenderpass(), + subpass->GetIndex() + ); } // Create material diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 7dcf12c0..8dad518f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -25,11 +25,10 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE { - - /*---------------------------------------------------------------------------------*/ /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ @@ -112,7 +111,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Material Creation Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddMaterial(Handle vertShader, Handle fragShader); + Handle AddMaterial(Handle vertShader, Handle fragShader, Handle subpass); void RemoveMaterial(Handle material);; Handle AddMaterialInstance(Handle material); void RemoveMaterialInstance(Handle materialInstance); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index fb843bc2..377d4a76 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -105,6 +105,7 @@ namespace SHADE /* GETTERS AND SETTERS */ /*-----------------------------------------------------------------------*/ Handle const& GetParentNode (void) const noexcept; + SHSubPassIndex GetIndex() const noexcept { return 0; } // TODO private: /*---------------------------------------------------------------------*/ From ec40754eb93d71ad387b0c57f6b192c1981df7a5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 18 Sep 2022 15:23:10 +0800 Subject: [PATCH 107/793] Render graph, graphics system and pipeline library changes lel Solved errors Graphics system AddMaterial now takes in a subpass Pipeline library now stored in render graph node instead since pipelines have to be compatible with a renderpass. Renderers now bind render graphs instead of storing them --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 45 +++++++++---------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 - .../MiddleEnd/Interface/SHViewport.cpp | 1 + .../Graphics/MiddleEnd/Interface/SHViewport.h | 1 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 44 +++++++++++++++--- .../src/Graphics/RenderGraph/SHRenderGraph.h | 28 +++++++++--- 6 files changed, 82 insertions(+), 39 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 376f19a7..fdbf1753 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -96,7 +96,11 @@ namespace SHADE - Render graph in renderers - Render graph command buffer semaphores - Default vertex input state + - Global descriptor set layouts /*-----------------------------------------------------------------------*/ + ConfigureGlobalDescLayouts(); + ConfigureDefaultVertexInputState(); + // Set Up Cameras screenCamera = resourceManager.Create(); screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); @@ -107,22 +111,12 @@ namespace SHADE // Create Default Viewport defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); - - // Create Debug Renderers - debugScreenRenderer = defaultViewport->AddRenderer(resourceManager,); - debugScreenRenderer->SetCamera(screenCamera); - debugWorldRenderer = defaultViewport->AddRenderer(resourceManager, ); - debugWorldRenderer->SetCamera(worldCamera); - - // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, ); - worldRenderer->SetCamera(worldCamera); // Get render graph from default viewport world renderer - auto worldRenderGraph = worldRenderer->GetRenderGraph(); + auto worldRenderGraph = resourceManager.Create(); // Initialize world render graph - worldRenderGraph->Init(device, swapchain); + worldRenderGraph->Init(device, swapchain, &defaultVertexInputState, &globalDescSetLayouts); worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); @@ -152,10 +146,17 @@ namespace SHADE semaHandle = device->CreateSemaphore(); } - + // Create Debug Renderers + debugScreenRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); + debugScreenRenderer->SetCamera(screenCamera); + debugWorldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); + debugWorldRenderer->SetCamera(worldCamera); + + // Add world renderer to default viewport + worldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); + worldRenderer->SetCamera(worldCamera); + - ConfigureDefaultVertexInputState(); - pipelineLibrary.Init(device, &defaultVertexInputState, &globalDescSetLayouts); } /***************************************************************************/ @@ -325,19 +326,13 @@ namespace SHADE { // Retrieve pipeline from pipeline storage or create if unavailable auto shaderPair = std::make_pair(vertShader, fragShader); - Handle pipeline = pipelineLibrary.GetDrawPipline(shaderPair); - if (!pipeline) - { - pipeline = pipelineLibrary.CreateDrawPipeline - ( - shaderPair, - subpass->GetParentNode()->GetRenderpass(), - subpass->GetIndex() - ); - } // Create material auto mat = resourceManager.Create(); + + auto renderGraphNode = subpass->GetParentNode(); + auto pipeline = renderGraphNode->GetOrCreatePipeline(std::make_pair(vertShader, fragShader), subpass->GetIndex()); + mat->SetPipeline(pipeline); return mat; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 8dad518f..af8e98a6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -24,7 +24,6 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" -#include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE @@ -155,7 +154,6 @@ namespace SHADE // Not Owned Resources SHWindow* window; - SHPipelineLibrary pipelineLibrary; std::vector> globalDescSetLayouts; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 56265a3f..74bfadff 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -18,6 +18,7 @@ of DigiPen Institute of Technology is prohibited. #include "Tools/SHLogger.h" #include "SHRenderer.h" #include "Resource/ResourceLibrary.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 0e378c54..6c75861c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -29,6 +29,7 @@ namespace SHADE class SHVkLogicalDevice; class SHVkImageView; class ResourceManager; + class SHRenderGraph; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 0181bdad..ba456b78 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -209,10 +209,11 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHSubpass::SHSubpass(Handle const& parent, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHSubpass::SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } + , subpassIndex {index} { } @@ -366,6 +367,11 @@ namespace SHADE return parentNode; } + SHADE::SHSubPassIndex SHRenderGraphNode::SHSubpass::GetIndex() const noexcept + { + return subpassIndex; + } + /***************************************************************************/ /*! @@ -433,7 +439,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} @@ -447,6 +453,9 @@ namespace SHADE , resourceManager{ rm } , ptrToResources{ resources } { + // pipeline library initialization + pipelineLibrary.Init(logicalDeviceHdl, defaultViState, globalLayouts); + attachmentDescriptions.resize(attResources.size()); bool containsSwapchainImage = false; @@ -545,7 +554,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager.Create(GetHandle(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(resourceManager.Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); return subpasses.at(subpassIndexing[subpassName]); } @@ -567,6 +576,29 @@ namespace SHADE commandBuffer->EndRenderpass(); } + Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, uint32_t subpassIndex) noexcept + { + // verify subpass exists + if (subpassIndex >= subpasses.size() - 1) + { + SHLOG_ERROR("Subpass index passed in is not valid. RenderGraphNode does not have that many passes. "); + return {}; + } + + Handle pipeline = pipelineLibrary.GetDrawPipline(vsFsPair); + if (!pipeline) + { + pipeline = pipelineLibrary.CreateDrawPipeline + ( + vsFsPair, + renderpass, + subpassIndex + ); + } + + return pipeline; + } + /***************************************************************************/ /*! @@ -920,10 +952,12 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain) noexcept + void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept { logicalDeviceHdl = logicalDevice; swapchainHdl = swapchain; + vertexInputState = defaultViState; + globalDescSetLayouts = globalLayouts; } /***************************************************************************/ @@ -1001,7 +1035,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources)); + nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources, vertexInputState, globalDescSetLayouts)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 377d4a76..3353e0a0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -4,6 +4,7 @@ #include "Graphics/Renderpass/SHVkRenderpass.h" #include "Resource/ResourceLibrary.h" #include "SH_API.h" +#include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include #include @@ -85,7 +86,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHSubpass(Handle const& parent, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; @@ -100,17 +101,20 @@ namespace SHADE // Runtime functions void Execute (Handle& commandBuffer) noexcept; void AddExteriorDrawCalls (std::function&)> const& newDrawCall) noexcept; - + /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ /*-----------------------------------------------------------------------*/ Handle const& GetParentNode (void) const noexcept; - SHSubPassIndex GetIndex() const noexcept { return 0; } // TODO + SHSubPassIndex GetIndex() const noexcept; private: /*---------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*---------------------------------------------------------------------*/ + //! The index of the subpass in the render graph + uint32_t subpassIndex; + //! The parent renderpass that this subpass belongs to Handle parentNode; @@ -137,6 +141,7 @@ namespace SHADE //! COMPLEX. std::vector&)>> exteriorDrawCalls; + friend class SHRenderGraphNode; friend class SHRenderGraph; }; @@ -185,6 +190,9 @@ namespace SHADE //! Pointer to resources in the render graph (for getting handle IDs) std::unordered_map> const* ptrToResources; + //! Every renderpass will require a pipeline library that will contain pipelines compatible with this renderpass + SHPipelineLibrary pipelineLibrary; + //! Whether or not the node has finished execution bool executed; @@ -202,15 +210,16 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode (ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode (ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - Handle AddSubpass (std::string subpassName) noexcept; - void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; + Handle AddSubpass (std::string subpassName) noexcept; + void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; + Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, uint32_t subpassIndex) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -258,6 +267,11 @@ namespace SHADE //! Command buffers for the render graph std::vector> commandBuffers; + //! Default vertex input state for pipeline creation + SHVertexInputState const* vertexInputState; + + //! Global descriptor set layouts to use for pipeline creation + std::vector> const* globalDescSetLayouts; public: /*-----------------------------------------------------------------------*/ @@ -268,7 +282,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; From b3d9a54d8f0a293a6f0dae53f0d7ed55401bbbc3 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 18 Sep 2022 16:46:08 +0800 Subject: [PATCH 108/793] Added entity creation event and entity destroyed events --- .../src/ECS_Base/Events/SHEntityCreationEvent.h | 12 ++++++++++++ .../src/ECS_Base/Events/SHEntityDestroyedEvent.h | 11 +++++++++++ .../src/ECS_Base/Managers/SHEntityManager.cpp | 10 ++++++++++ SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h | 11 +++++++++++ SHADE_Engine/src/Events/SHEventDefines.h | 4 +++- 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h create mode 100644 SHADE_Engine/src/ECS_Base/Events/SHEntityDestroyedEvent.h diff --git a/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h b/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h new file mode 100644 index 00000000..728d80f6 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ECS_Base/Entity/SHEntity.h" + +namespace SHADE +{ + struct SHEntityCreationEvent + { + EntityID eid; + std::vector componentTypeIDs; + }; +} diff --git a/SHADE_Engine/src/ECS_Base/Events/SHEntityDestroyedEvent.h b/SHADE_Engine/src/ECS_Base/Events/SHEntityDestroyedEvent.h new file mode 100644 index 00000000..770f0c4e --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/Events/SHEntityDestroyedEvent.h @@ -0,0 +1,11 @@ +#pragma once + +#include "ECS_Base/Entity/SHEntity.h" + +namespace SHADE +{ + struct SHEntityDestroyedEvent + { + EntityID eid; + }; +} diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index 240c0b32..fddd52cc 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -103,6 +103,10 @@ namespace SHADE SHComponentManager::AddComponent(eID, id); } + //set up event stuff + SHEntityCreationEvent event{ eID,componentTypeIDs }; + SHEventManager::BroadcastEvent(event, SH_ENTITY_CREATION_EVENT); + //(SHComponentManager::AddComponent(eID), ...); //if (entityHandle.IsValid(parentEID) == false) @@ -153,6 +157,12 @@ namespace SHADE entityHandle.RemoveHandle(eID); entityVec[eIndex].reset(nullptr); + + + SHEntityDestroyedEvent event{eID}; + SHEventManager::BroadcastEvent(event, SH_ENTITY_DESTROYED_EVENT); + + } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index 2d8a3ce5..a9560fa3 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -20,6 +20,9 @@ #include "../Components/SHComponent.h" #include "../General/SHHandleGenerator.h" #include "../SHECSMacros.h" +#include "ECS_Base/Events/SHEntityCreationEvent.h" +#include "ECS_Base/Events/SHEntityDestroyedEvent.h" +#include "Events/SHEventManager.h" #include "SH_API.h" namespace SHADE @@ -125,6 +128,14 @@ namespace SHADE entityVec[eIndex]->name = name; (SHComponentManager::AddComponent(eID), ...); + //set up event stuff + std::vector typeIDVec; + (typeIDVec.push_back(ComponentFamily::GetID()), ...); + + SHEntityCreationEvent event{ eID,typeIDVec }; + SHEventManager::BroadcastEvent(event, SH_ENTITY_CREATION_EVENT); + + /*if (entityHandle.IsValid(parentEID) == false) { entityVec[eIndex]->sceneNode.ConnectToRoot(); diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 76b403bd..37849ffa 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -6,4 +6,6 @@ typedef uint32_t SHEventHandle; typedef void* SHEventDataPtr; //Add your event identifiers here: -constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; \ No newline at end of file +constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; +constexpr SHEventIdentifier SH_ENTITY_DESTROYED_EVENT{ 1 }; +constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT{ 2 }; From 96ec1afcddee4ad22ca62d5f923cea08921db774 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 17:02:02 +0800 Subject: [PATCH 109/793] Changed batching system to use SHRenderable* instead of handles --- SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp | 6 +++--- SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h | 6 +++--- .../src/Graphics/MiddleEnd/Batching/SHBatcher.cpp | 8 +++++--- .../src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp | 4 ++-- .../src/Graphics/MiddleEnd/Batching/SHSuperBatch.h | 4 ++-- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index a4d3cb50..f4a229bb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -35,7 +35,7 @@ namespace SHADE throw std::invalid_argument("Attempted to create a SHBatch with an invalid SHPipeline!"); } - void SHBatch::Add(Handle renderable) + void SHBatch::Add(const SHRenderable* renderable) { // Check if we have a SubBatch with the same mesh yet auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) @@ -54,7 +54,7 @@ namespace SHADE subBatch->Renderables.insert(renderable); } - void SHBatch::Remove(Handle renderable) + void SHBatch::Remove(const SHRenderable* renderable) { // Check if we have a SubBatch with the same mesh yet auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) @@ -136,7 +136,7 @@ namespace SHADE }); // Fill in buffers (CPU) - for (Handle renderable : subBatch.Renderables) + for (const SHRenderable* renderable : subBatch.Renderables) { // Transform transformData.emplace_back(renderable->TransformMatrix); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index e87c16ef..8bc32f8f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -49,7 +49,7 @@ namespace SHADE /* Data Members */ /*-----------------------------------------------------------------------------*/ Handle Mesh; - std::unordered_set> Renderables; + std::unordered_set Renderables; }; /***********************************************************************************/ /*! @@ -68,8 +68,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Usage Functions */ /*-----------------------------------------------------------------------------*/ - void Add(Handle renderable); - void Remove(Handle renderable); + void Add(const SHRenderable* renderable); + void Remove(const SHRenderable* renderable); void Clear(); void Build(Handle device, Handle cmdBuffer); void Draw(Handle cmdBuffer); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index ced97876..2843ebb6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Commands/SHVkCommandBuffer.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "Graphics/Pipeline/SHVkPipeline.h" +#include "ECS_Base/Managers/SHComponentManager.h" namespace SHADE { @@ -30,7 +31,7 @@ namespace SHADE void SHBatcher::Init(const std::vector& _renderables, Handle _renderGraph) { renderables = &_renderables; - renderGraph = _renderGraph; + renderGraph = _renderGraph; } /*---------------------------------------------------------------------------------*/ @@ -38,8 +39,9 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHBatcher::PrepareBatches() { - // Iterate through all renderables and send it into the batching - for (auto iter = renderables->cbegin(); iter != renderables->cend(); ++iter) + // Iterate through all renderables and send it into the batching + auto& renderables = SHComponentManager::GetDense(); + for (auto iter = renderables.cbegin(); iter != renderables.cend(); ++iter) { AddToBatch(iter->GetHandle()); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 6ca498f3..34887b12 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -30,7 +30,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - void SHSuperBatch::Add(Handle renderable) noexcept + void SHSuperBatch::Add(const SHRenderable* renderable) noexcept { const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); @@ -52,7 +52,7 @@ namespace SHADE batch->Add(renderable); } - void SHSuperBatch::Remove(Handle renderable) noexcept + void SHSuperBatch::Remove(const SHRenderable* renderable) noexcept { const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index 55f23dbb..dbae5bc9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -52,8 +52,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Usage Functions */ /*-----------------------------------------------------------------------------*/ - void Add(Handle renderable) noexcept; - void Remove(Handle renderable) noexcept; + void Add(const SHRenderable* renderable) noexcept; + void Remove(const SHRenderable* renderable) noexcept; void Clear() noexcept; void Build(Handle device, Handle cmdBuffer) noexcept; void Draw(Handle cmdBuffer) noexcept; From 28a5f8e4e5c33f54916fb8eb5636eec860f34167 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 18 Sep 2022 22:34:48 +0800 Subject: [PATCH 110/793] Auto stash before merge of "SP3-1-Rendering" and "origin/SP3-1-Rendering" --- .../src/Application/SBApplication.cpp | 1 + .../Graphics/Devices/SHVkLogicalDevice.cpp | 2 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 3 +- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 20 +-- .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 61 +++++--- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 10 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 4 +- .../MiddleEnd/Batching/SHSuperBatch.h | 7 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 26 +++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 7 +- .../MiddleEnd/Interface/SHRenderable.cpp | 42 ++++- .../MiddleEnd/Interface/SHRenderable.h | 21 ++- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 2 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 3 +- .../src/Graphics/Pipeline/SHPipelineState.cpp | 9 +- .../src/Graphics/Pipeline/SHPipelineState.h | 40 ++--- .../src/Graphics/Pipeline/SHVkPipeline.cpp | 9 +- .../src/Graphics/Pipeline/SHVkPipeline.h | 3 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 39 +++-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 146 +++++++++--------- 20 files changed, 285 insertions(+), 170 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index da13491b..58b6cb84 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -37,6 +37,7 @@ namespace Sandbox window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); + SHADE::SHSystemManager::RegisterRoutine(1); SHADE::SHSystemManager::RegisterRoutine(1); SHADE::SHSystemManager::RegisterRoutine(1); SHADE::SHSystemManager::RegisterRoutine(1); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index da4947f2..8252929d 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -486,7 +486,7 @@ namespace SHADE */ /***************************************************************************/ - Handle SHVkLogicalDevice::CreatePipeline(Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, uint32_t subpass, SH_PIPELINE_TYPE type) noexcept + Handle SHVkLogicalDevice::CreatePipeline(Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass, SH_PIPELINE_TYPE type) noexcept { return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutHdl, state, renderpassHdl, subpass, type); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index c359d1d3..01764e80 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -39,6 +39,7 @@ namespace SHADE class SHVkImageView; class SHShaderBlockInterface; class SHVkDescriptorSetGroup; + class SHSubpass; /***************************************************************************/ /*! @@ -167,7 +168,7 @@ namespace SHADE Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, - uint32_t subpass, + Handle subpass, SH_PIPELINE_TYPE type ) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index f4a229bb..e7c2f9ef 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -29,7 +29,7 @@ namespace SHADE /* SHBatch - Usage Functions */ /*---------------------------------------------------------------------------------*/ SHBatch::SHBatch(Handle pipeline) - : pipeline { pipeline } + : pipeline{ pipeline } { if (!pipeline) throw std::invalid_argument("Attempted to create a SHBatch with an invalid SHPipeline!"); @@ -59,8 +59,8 @@ namespace SHADE // Check if we have a SubBatch with the same mesh yet auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) { - return batch.Mesh == renderable->Mesh; - }); + return batch.Mesh == renderable->Mesh; + }); // Attempt to remove if it exists if (subBatch == subBatches.end()) @@ -127,13 +127,13 @@ namespace SHADE { // Create command drawData.emplace_back(vk::DrawIndexedIndirectCommand - { - .indexCount = subBatch.Mesh->IndexCount, - .instanceCount = static_cast(subBatch.Renderables.size()), - .firstIndex = subBatch.Mesh->FirstIndex, - .vertexOffset = subBatch.Mesh->FirstVertex, - .firstInstance = nextInstanceIndex - }); + { + .indexCount = subBatch.Mesh->IndexCount, + .instanceCount = static_cast(subBatch.Renderables.size()), + .firstIndex = subBatch.Mesh->FirstIndex, + .vertexOffset = subBatch.Mesh->FirstVertex, + .firstInstance = nextInstanceIndex + }); // Fill in buffers (CPU) for (const SHRenderable* renderable : subBatch.Renderables) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index 2843ebb6..a37bbe72 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -22,16 +22,16 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "Graphics/Pipeline/SHVkPipeline.h" #include "ECS_Base/Managers/SHComponentManager.h" +#include "Tools/SHLogger.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ /* Lifecycle Functions */ /*---------------------------------------------------------------------------------*/ - void SHBatcher::Init(const std::vector& _renderables, Handle _renderGraph) + void SHBatcher::Init(Handle _renderGraph) { - renderables = &_renderables; - renderGraph = _renderGraph; + renderGraph = _renderGraph; } /*---------------------------------------------------------------------------------*/ @@ -39,53 +39,56 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHBatcher::PrepareBatches() { - // Iterate through all renderables and send it into the batching - auto& renderables = SHComponentManager::GetDense(); + // Iterate through all renderables and send it into the batching + auto& renderables = SHComponentManager::GetDense(); for (auto iter = renderables.cbegin(); iter != renderables.cend(); ++iter) { - AddToBatch(iter->GetHandle()); + AddToBatch(&(*iter)); } } - void SHBatcher::AddToBatch(Handle renderable) + void SHBatcher::AddToBatch(SHRenderable const* renderable) { // Get Subpass Index for this renderables pipeline - const SHSubPassIndex SUB_PASS_IDX = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpassIndex(); + const Handle SUBPASS = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass(); - // Check if there is a SuperBatch for the specific RenderPass - auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](const SHSuperBatch& superBatch) + // Check if there is a SuperBatch for the specific Subpass + auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](Handle superBatch) { - return superBatch.GetSubpassId() == SUB_PASS_IDX; + return superBatch->GetSubpass() == SUBPASS; }); - // Create if it doesn't exist + // Ignore and emit a warning if it doesn't exist if (superBatch == superBatches.end()) { - superBatches.emplace_back(SUB_PASS_IDX); - superBatch = superBatches.end(); + SHLOG_WARNING("A renderable was attempted to be added to a SuperBatch which does not exist."); + return; } // Add the Renderable - superBatch->Add(renderable->GetHandle()); + (*superBatch)->Add(renderable); } - void SHBatcher::RemoveFromBatch(Handle renderable) + void SHBatcher::RemoveFromBatch(SHRenderable const* renderable) { // Get Subpass Index for this renderables pipeline - const SHSubPassIndex SUB_PASS_IDX = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpassIndex(); + const Handle SUBPASS = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass(); // Check if there is a SuperBatch for the specific RenderPass - auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](const SHSuperBatch& superBatch) + auto superBatch = std::find_if(superBatches.begin(), superBatches.end(), [&](Handle superBatch) { - return superBatch.GetSubpassId() == SUB_PASS_IDX; + return superBatch->GetSubpass() == SUBPASS; }); // Remove if it exists if (superBatch == superBatches.end()) + { + SHLOG_WARNING("A renderable was attempted to be removed from a SuperBatch which does not exist."); return; + } - superBatch->Remove(renderable); + (*superBatch)->Remove(renderable); } void SHBatcher::FinaliseBatches(Handle device, Handle cmdBuffer) @@ -93,7 +96,7 @@ namespace SHADE // Build SuperBatches for (auto& batch : superBatches) { - batch.Build(device, cmdBuffer); + batch->Build(device, cmdBuffer); } } @@ -101,9 +104,23 @@ namespace SHADE { for (auto& batch : superBatches) { - batch.Clear(); + batch->Clear(); } superBatches.clear(); } + void SHBatcher::RegisterSuperBatch(Handle superBatch) + { + superBatches.emplace_back(superBatch); + } + + void SHBatcher::DeregisterSuperBatch(Handle superBatch) + { + auto sbIter = std::find(superBatches.begin(), superBatches.end(), superBatch); + if (sbIter == superBatches.end()) + return; + + superBatches.erase(sbIter); + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index ccbbd1d0..60cc0c56 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -43,21 +43,23 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Lifecycle Functions */ /*-----------------------------------------------------------------------------*/ - void Init(const std::vector& _renderables, Handle _renderGraph); + void Init(Handle _renderGraph); /*-----------------------------------------------------------------------------*/ /* Usage Functions */ /*-----------------------------------------------------------------------------*/ void PrepareBatches(); - void AddToBatch(Handle renderable); - void RemoveFromBatch(Handle renderable); + void AddToBatch(SHRenderable const* renderable); + void RemoveFromBatch(SHRenderable const* renderable); void FinaliseBatches(Handle device, Handle cmdBuffer); void ClearBatches(); + void RegisterSuperBatch(Handle superBatch); + void DeregisterSuperBatch(Handle superBatch); private: const std::vector* renderables = nullptr; Handle renderGraph; // Children - std::vector superBatches; + std::vector> superBatches; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 34887b12..4d05dec7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -23,8 +23,8 @@ namespace SHADE /* Constructor/Destructors */ /*---------------------------------------------------------------------------------*/ - SHSuperBatch::SHSuperBatch(SHSubPassIndex subPass) - : subpassIndex { subPass } + SHSuperBatch::SHSuperBatch(Handle sp) + : subpass { sp } {} /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index dbae5bc9..f70fd6d3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -47,7 +47,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ - SHSuperBatch(SHSubPassIndex subPass); + SHSuperBatch(Handle sp); /*-----------------------------------------------------------------------------*/ /* Usage Functions */ @@ -61,16 +61,15 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Getter Functions */ /*-----------------------------------------------------------------------------*/ - SHSubPassIndex GetSubpassId() const noexcept { return subpassIndex; }; + Handle GetSubpass() const noexcept { return subpass; }; private: /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ // Batch Properties - SHSubPassIndex subpassIndex; + Handle subpass; // Children std::vector batches; }; } - diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index fdbf1753..09177993 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -24,6 +24,9 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" namespace SHADE { @@ -322,7 +325,7 @@ namespace SHADE viewports.erase(iter); } - Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader, Handle subpass) + Handle SHGraphicsSystem::AddMaterial(Handle vertShader, Handle fragShader, Handle subpass) { // Retrieve pipeline from pipeline storage or create if unavailable auto shaderPair = std::make_pair(vertShader, fragShader); @@ -331,7 +334,7 @@ namespace SHADE auto mat = resourceManager.Create(); auto renderGraphNode = subpass->GetParentNode(); - auto pipeline = renderGraphNode->GetOrCreatePipeline(std::make_pair(vertShader, fragShader), subpass->GetIndex()); + auto pipeline = renderGraphNode->GetOrCreatePipeline(std::make_pair(vertShader, fragShader), subpass); mat->SetPipeline(pipeline); @@ -449,10 +452,27 @@ namespace SHADE { reinterpret_cast(system)->Run(dt); } - + void SHGraphicsSystem::EndRoutine::Execute(double) noexcept { reinterpret_cast(system)->EndRender(); } + void SHGraphicsSystem::BatcherDispatcherRoutine::Execute(double) noexcept + { + auto& renderables = SHComponentManager::GetDense(); + for (auto& renderable : renderables) + { + if (!renderable.WasMaterialChanged()) + continue; + + // Remove from old material's SuperBatch + Handle oldSuperBatch = renderable.GetPrevMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + oldSuperBatch->Remove(&renderable); + + // Add to new SuperBatch + Handle newSuperBatch = renderable.GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + newSuperBatch->Add(&renderable); + } + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index af8e98a6..1c1d7710 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -75,6 +75,11 @@ namespace SHADE public: virtual void Execute(double dt) noexcept override final; }; + class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine + { + public: + virtual void Execute(double dt) noexcept override final; + }; public: /*-----------------------------------------------------------------------------*/ @@ -110,7 +115,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Material Creation Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddMaterial(Handle vertShader, Handle fragShader, Handle subpass); + Handle AddMaterial(Handle vertShader, Handle fragShader, Handle subpass); void RemoveMaterial(Handle material);; Handle AddMaterialInstance(Handle material); void RemoveMaterialInstance(Handle materialInstance); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index eb59ee14..bf681a81 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -18,7 +18,19 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - void SHRenderable::SetMaterial(Handle materialInstance) + /*-----------------------------------------------------------------------------------*/ + /* SHComponent Lifecycle Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHRenderable::OnCreate() + { + materialChanged = true; + sharedMaterial = {}; + material = {}; + oldMaterial = {}; + + } + + void SHRenderable::OnDestroy() { if (material) { @@ -26,7 +38,33 @@ namespace SHADE material = {}; } - sharedMaterial = materialInstance; + // Remove from SuperBatch + Handle superBatch = sharedMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + superBatch->Remove(this); + } + + /*-----------------------------------------------------------------------------------*/ + /* Material Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHRenderable::SetMaterial(Handle materialInstance) + { + // Ignore if same material set + if (!material && sharedMaterial == materialInstance) + return; + + // Free copies of materials if any + if (material) + { + material.Free(); + material = {}; + } + + // Flag that material was changed + materialChanged = true; + oldMaterial = sharedMaterial->GetBaseMaterial(); + + // Update the material + sharedMaterial = materialInstance; } Handle SHRenderable::GetMaterial() const diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index 4d85abd8..eda27925 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -23,6 +23,7 @@ namespace SHADE /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ class SHMaterialInstance; + class SHMaterial; class SHMesh; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -33,16 +34,28 @@ namespace SHADE Represents an object that should be rendered. */ /*************************************************************************************/ - class SHRenderable : public SHComponent, public ISelfHandle + class SHRenderable final : public SHComponent { public: /*-------------------------------------------------------------------------------*/ - /* Usage Functions */ + /* SHComponent Lifecycle Functions */ /*-------------------------------------------------------------------------------*/ - void SetMaterial(Handle materialInstance); + void OnCreate() override final; + void OnDestroy() override final; + + /*-------------------------------------------------------------------------------*/ + /* Material Functions */ + /*-------------------------------------------------------------------------------*/ + void SetMaterial(Handle materialInstance); Handle GetMaterial() const; Handle GetModifiableMaterial(); + /*-------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-------------------------------------------------------------------------------*/ + bool WasMaterialChanged() const noexcept { return materialChanged; } + Handle GetPrevMaterial() const noexcept { return oldMaterial; } + /*-------------------------------------------------------------------------------*/ /* Data Members */ /*-------------------------------------------------------------------------------*/ @@ -55,6 +68,8 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ Handle sharedMaterial; Handle material; + bool materialChanged = true; + Handle oldMaterial; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 7e9c2cbd..636b8e68 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -5,7 +5,7 @@ namespace SHADE { - Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, uint32_t subpass) noexcept + Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, Handle subpass) noexcept { SHPipelineLayoutParams params { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index c2a5a916..8f41781a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -9,6 +9,7 @@ namespace SHADE class SHVRenderpass; class SHVkDescriptorSetLayouts; class SHVkPipeline; + class SHSubpass; // Pipeline library is a PURELY MIDDLE END SYSTEM. It is responsible for only creating pipelines from shaders and caching @@ -37,7 +38,7 @@ namespace SHADE Handle CreateDrawPipeline ( std::pair, Handle> const& vsFsPair, Handle renderpass, - uint32_t subpass + Handle subpass ) noexcept; Handle GetDrawPipline (std::pair, Handle> const& vsFsPair) noexcept; bool CheckDrawPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp index 0b4f033f..e7c245db 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp @@ -1,5 +1,6 @@ #include "SHPch.h" #include "SHPipelineState.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE { @@ -61,10 +62,10 @@ namespace SHADE renderpassHdl = inRenderpassHdl; } - void SHVkPipelineState::SetSubpassIndex(uint32_t index) noexcept + void SHVkPipelineState::SetSubpass(Handle sp) noexcept { dirty = true; - subpassIndex = index; + subpass = sp; } SHVertexInputState const& SHVkPipelineState::GetVertexInputState(void) const noexcept @@ -107,9 +108,9 @@ namespace SHADE return renderpassHdl; } - SHSubPassIndex SHVkPipelineState::GetSubpassIndex(void) const noexcept + Handle SHVkPipelineState::GetSubpass(void) noexcept { - return subpassIndex; + return subpass; } void SHVkPipelineState::SetDirty(bool isDirty) noexcept diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index 08c35060..559ccc88 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -8,6 +8,8 @@ namespace SHADE { + class SHSubpass; + // This is mainly for non-interleaved attributes where we have a separate buffer for // each vertex attribute. struct SHVertexInputState @@ -152,31 +154,31 @@ namespace SHADE bool dirty{ false }; //! Vertex input state - SHVertexInputState vertexInputState; + SHVertexInputState vertexInputState; //! Input assembly - SHInputAssemblyState inputAssemblyState; + SHInputAssemblyState inputAssemblyState; //! Rasterization state - SHRasterizationState rasterizationState; + SHRasterizationState rasterizationState; //! Viewport state - SHViewportState viewportState; + SHViewportState viewportState; //! Multisample state - SHMultisampleState multisampleState; + SHMultisampleState multisampleState; //! Depth Stencil state - SHDepthStencilState depthStencilState; + SHDepthStencilState depthStencilState; //! Color blend state - SHColorBlendState colorBlendState; + SHColorBlendState colorBlendState; //! Renderpass that is compatible with the pipeline - Handle renderpassHdl; + Handle renderpassHdl; //! Subpass index - uint32_t subpassIndex; + Handle subpass; friend class SHVkPipeline; public: @@ -198,17 +200,17 @@ namespace SHADE void SetDepthStencilState (SHDepthStencilState const& state) noexcept; void SetColorBlenState (SHColorBlendState const& state) noexcept; void SetRenderpass (Handle const& inRenderpassHdl) noexcept; - void SetSubpassIndex (uint32_t index) noexcept; + void SetSubpass (Handle sp) noexcept; - SHVertexInputState const& GetVertexInputState (void) const noexcept; - SHInputAssemblyState const& GetInputAssemblyState (void) const noexcept; - SHRasterizationState const& GetRasterizationState (void) const noexcept; - SHViewportState const& GetViewportState (void) const noexcept; - SHMultisampleState const& GetMultisampleState (void) const noexcept; - SHDepthStencilState const& GetDepthStencilState (void) const noexcept; - SHColorBlendState const& GetColorBlenState (void) const noexcept; - Handle const& GetRenderpass (void) const noexcept; - SHSubPassIndex GetSubpassIndex (void) const noexcept; + SHVertexInputState const& GetVertexInputState (void) const noexcept; + SHInputAssemblyState const& GetInputAssemblyState (void) const noexcept; + SHRasterizationState const& GetRasterizationState (void) const noexcept; + SHViewportState const& GetViewportState (void) const noexcept; + SHMultisampleState const& GetMultisampleState (void) const noexcept; + SHDepthStencilState const& GetDepthStencilState (void) const noexcept; + SHColorBlendState const& GetColorBlenState (void) const noexcept; + Handle const& GetRenderpass (void) const noexcept; + Handle GetSubpass (void) noexcept; void SetDirty(bool isDirty) noexcept; }; diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index 263ae578..6a20ab55 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -3,6 +3,7 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Debugging/SHVulkanDebugUtil.h" +#include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE { @@ -154,7 +155,7 @@ namespace SHADE gpCreateInfo.layout = pipelineLayout->GetVkPipelineLayout(); gpCreateInfo.renderPass = pipelineState.GetRenderpass()->GetVkRenderpass(); - gpCreateInfo.subpass = pipelineState.GetSubpassIndex(); + gpCreateInfo.subpass = pipelineState.GetSubpass()->GetIndex(); gpCreateInfo.basePipelineHandle = VK_NULL_HANDLE; gpCreateInfo.basePipelineIndex = -1; @@ -204,7 +205,7 @@ namespace SHADE */ /***************************************************************************/ - SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, uint32_t subpass, SH_PIPELINE_TYPE type) noexcept + SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass, SH_PIPELINE_TYPE type) noexcept : pipelineState{ } // copy the pipeline state , pipelineType {type} , vkPipeline {VK_NULL_HANDLE} @@ -222,8 +223,8 @@ namespace SHADE } else { - pipelineState.SetRenderpass(renderpassHdl); - pipelineState.SetSubpassIndex(subpass); + pipelineState.SetRenderpass (renderpassHdl); + pipelineState.SetSubpass (subpass); } } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index 9a9d78f4..6edf0e98 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -9,6 +9,7 @@ namespace SHADE { class SHVkLogicalDevice; + class SHSubpass; class SHVkPipeline { @@ -50,7 +51,7 @@ namespace SHADE Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, - uint32_t subpass, + Handle subpass, SH_PIPELINE_TYPE type) noexcept; SHVkPipeline (SHVkPipeline&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index ba456b78..1c995e12 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -209,13 +209,13 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHSubpass::SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHSubpass::SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } , subpassIndex {index} { - + superBatch = rm.Create(GetHandle()); } /***************************************************************************/ @@ -229,7 +229,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHSubpass::SHSubpass(SHSubpass&& rhs) noexcept + SHSubpass::SHSubpass(SHSubpass&& rhs) noexcept : colorReferences{ std::move(rhs.colorReferences) } , depthReferences{ std::move(rhs.depthReferences) } , inputReferences{ std::move(rhs.inputReferences) } @@ -250,7 +250,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHSubpass& SHRenderGraphNode::SHSubpass::operator=(SHSubpass&& rhs) noexcept + SHSubpass& SHSubpass::operator=(SHSubpass&& rhs) noexcept { if (this == &rhs) return *this; @@ -276,7 +276,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraphNode::SHSubpass::AddColorOutput(std::string resourceToReference) noexcept + void SHSubpass::AddColorOutput(std::string resourceToReference) noexcept { colorReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); } @@ -297,7 +297,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraphNode::SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType) noexcept + void SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType) noexcept { vk::ImageLayout imageLayout; switch (attachmentDescriptionType) @@ -330,12 +330,12 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraphNode::SHSubpass::AddInput(std::string resourceToReference) noexcept + void SHSubpass::AddInput(std::string resourceToReference) noexcept { inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); } - void SHRenderGraphNode::SHSubpass::Execute(Handle& commandBuffer) noexcept + void SHSubpass::Execute(Handle& commandBuffer) noexcept { // Draw all the batches @@ -346,7 +346,7 @@ namespace SHADE } } - void SHRenderGraphNode::SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept + void SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept { exteriorDrawCalls.push_back(newDrawCall); } @@ -362,16 +362,21 @@ namespace SHADE */ /***************************************************************************/ - Handle const& SHRenderGraphNode::SHSubpass::GetParentNode(void) const noexcept + Handle const& SHSubpass::GetParentNode(void) const noexcept { return parentNode; } - SHADE::SHSubPassIndex SHRenderGraphNode::SHSubpass::GetIndex() const noexcept + SHADE::SHSubPassIndex SHSubpass::GetIndex() const noexcept { return subpassIndex; } + Handle SHSubpass::GetSuperBatch(void) const noexcept + { + return superBatch; + } + /***************************************************************************/ /*! @@ -544,7 +549,7 @@ namespace SHADE */ /***************************************************************************/ - Handle SHRenderGraphNode::AddSubpass(std::string subpassName) noexcept + Handle SHRenderGraphNode::AddSubpass(std::string subpassName) noexcept { // if subpass already exists, don't add. if (subpassIndexing.contains(subpassName)) @@ -554,7 +559,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager.Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); return subpasses.at(subpassIndexing[subpassName]); } @@ -576,10 +581,10 @@ namespace SHADE commandBuffer->EndRenderpass(); } - Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, uint32_t subpassIndex) noexcept + Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept { // verify subpass exists - if (subpassIndex >= subpasses.size() - 1) + if (subpass->GetIndex() >= subpasses.size() - 1) { SHLOG_ERROR("Subpass index passed in is not valid. RenderGraphNode does not have that many passes. "); return {}; @@ -592,7 +597,7 @@ namespace SHADE ( vsFsPair, renderpass, - subpassIndex + subpass ); } @@ -615,7 +620,7 @@ namespace SHADE return renderpass; } - Handle SHRenderGraphNode::GetSubpass(std::string_view subpassName) const noexcept + Handle SHRenderGraphNode::GetSubpass(std::string_view subpassName) const noexcept { return subpasses[subpassIndexing.at(subpassName.data())]; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 3353e0a0..f563841e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -5,6 +5,7 @@ #include "Resource/ResourceLibrary.h" #include "SH_API.h" #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" +#include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" #include #include @@ -19,6 +20,7 @@ namespace SHADE class SHVkFramebuffer; class SHVkCommandPool; class SHVkCommandBuffer; + class SHRenderGraphNode; // Used for attachment description creation for renderpass node enum class SH_ATT_DESC_TYPE @@ -30,6 +32,7 @@ namespace SHADE DEPTH_STENCIL, }; + class SH_API SHRenderGraphResource { private: @@ -70,7 +73,78 @@ namespace SHADE SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept; SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; - ~SHRenderGraphResource (void) noexcept; + ~SHRenderGraphResource(void) noexcept; + + friend class SHRenderGraphNode; + friend class SHRenderGraph; + }; + + + class SH_API SHSubpass : public ISelfHandle + { + private: + /*---------------------------------------------------------------------*/ + /* PRIVATE MEMBER VARIABLES */ + /*---------------------------------------------------------------------*/ + //! The index of the subpass in the render graph + uint32_t subpassIndex; + + //! The parent renderpass that this subpass belongs to + Handle parentNode; + + //! + Handle superBatch; + + //! Color attachments + std::vector colorReferences; + + //! Depth attachments + std::vector depthReferences; + + //! Input attachments + std::vector inputReferences; + + //! For getting attachment reference indices using handles + std::unordered_map const* resourceAttachmentMapping; + + //! Pointer to resources in the render graph (for getting handle IDs) + std::unordered_map> const* ptrToResources; + + //! Sometimes there exists entities that we want to render onto a render target + //! but don't want it to come from the batching system. An example would be ImGUI. + //! For these entities we want to link a function from the outside and draw them + //! after we draw everything from the batch. Because of this, these draw calls + //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING + //! COMPLEX. + std::vector&)>> exteriorDrawCalls; + + public: + /*-----------------------------------------------------------------------*/ + /* CTORS AND DTORS */ + /*-----------------------------------------------------------------------*/ + SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(SHSubpass&& rhs) noexcept; + SHSubpass& operator=(SHSubpass&& rhs) noexcept; + + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + // Preparation functions + void AddColorOutput(std::string resourceToReference) noexcept; + void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; + void AddInput(std::string resourceToReference) noexcept; + + // Runtime functions + void Execute(Handle& commandBuffer) noexcept; + void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; + + /*-----------------------------------------------------------------------*/ + /* GETTERS AND SETTERS */ + /*-----------------------------------------------------------------------*/ + Handle const& GetParentNode(void) const noexcept; + SHSubPassIndex GetIndex() const noexcept; + Handle GetSuperBatch (void) const noexcept; + friend class SHRenderGraphNode; friend class SHRenderGraph; @@ -78,74 +152,6 @@ namespace SHADE class SH_API SHRenderGraphNode : public ISelfHandle { - public: - - class SH_API SHSubpass - { - public: - /*-----------------------------------------------------------------------*/ - /* CTORS AND DTORS */ - /*-----------------------------------------------------------------------*/ - SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; - SHSubpass(SHSubpass&& rhs) noexcept; - SHSubpass& operator=(SHSubpass&& rhs) noexcept; - - /*-----------------------------------------------------------------------*/ - /* PUBLIC MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - // Preparation functions - void AddColorOutput (std::string resourceToReference) noexcept; - void AddDepthOutput (std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; - void AddInput (std::string resourceToReference) noexcept; - - // Runtime functions - void Execute (Handle& commandBuffer) noexcept; - void AddExteriorDrawCalls (std::function&)> const& newDrawCall) noexcept; - - /*-----------------------------------------------------------------------*/ - /* GETTERS AND SETTERS */ - /*-----------------------------------------------------------------------*/ - Handle const& GetParentNode (void) const noexcept; - SHSubPassIndex GetIndex() const noexcept; - - private: - /*---------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*---------------------------------------------------------------------*/ - //! The index of the subpass in the render graph - uint32_t subpassIndex; - - //! The parent renderpass that this subpass belongs to - Handle parentNode; - - //! Color attachments - std::vector colorReferences; - - //! Depth attachments - std::vector depthReferences; - - //! Input attachments - std::vector inputReferences; - - //! For getting attachment reference indices using handles - std::unordered_map const* resourceAttachmentMapping; - - //! Pointer to resources in the render graph (for getting handle IDs) - std::unordered_map> const* ptrToResources; - - //! Sometimes there exists entities that we want to render onto a render target - //! but don't want it to come from the batching system. An example would be ImGUI. - //! For these entities we want to link a function from the outside and draw them - //! after we draw everything from the batch. Because of this, these draw calls - //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING - //! COMPLEX. - std::vector&)>> exteriorDrawCalls; - - - friend class SHRenderGraphNode; - friend class SHRenderGraph; - }; - private: /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ @@ -219,7 +225,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ Handle AddSubpass (std::string subpassName) noexcept; void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; - Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, uint32_t subpassIndex) noexcept; + Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From 41daaaba9ca238bc0e394312728f9f2209aa615d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 23:11:08 +0800 Subject: [PATCH 111/793] Added SHPrimitiveGenerator --- .../Graphics/MiddleEnd/Meshes/SHMeshData.h | 36 +++ .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 206 ++++++++++++++++++ .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 60 +++++ 3 files changed, 302 insertions(+) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h new file mode 100644 index 00000000..2f7d320b --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file SHPrimitiveGenerator.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 18, 2022 +\brief Contains the static class definition of SHPrimitiveGenerator. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Math/SHMath.h" +#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" + +namespace SHADE +{ + /*************************************************************************************/ + /*! + \brief + Static class that contains functions for generating 3D primitives. + */ + /*************************************************************************************/ + struct SHMeshData + { + std::vector VertexPositions; + std::vector VertexTexCoords; + std::vector VertexTangents; + std::vector VertexNormals; + std::vector Indices; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp new file mode 100644 index 00000000..59f43712 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -0,0 +1,206 @@ +/************************************************************************************//*! +\file SHPrimitiveGenerator.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Aug 30, 2022 +\brief Contains definitions for all of the functions of the classes that deal + with storage and management of vertex and index buffers of meshes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHPrimitiveGenerator.h" + +namespace SHADE +{ + SHMeshData SHPrimitiveGenerator::Cube() noexcept + { + SHMeshData mesh; + + mesh.VertexPositions = + { + // front + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3( 0.5f, -0.5f, 0.5f), + SHVec3( 0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + + // back + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, -0.5f), + SHVec3( 0.5f, 0.5f, -0.5f), + SHVec3( 0.5f, -0.5f, -0.5f), + + // top + SHVec3(-0.5f, 0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3( 0.5f, 0.5f, 0.5f), + SHVec3( 0.5f, 0.5f, -0.5f), + + // bottom + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3( 0.5f, -0.5f, -0.5f), + SHVec3( 0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + + // right + SHVec3(0.5f, -0.5f, -0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + + // left + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, -0.5f) + }; + + mesh.VertexTexCoords = + { + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), + + + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), + + + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), + + + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), + + + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), + + + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f) + }; + + mesh.VertexTangents = + { + // front + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + + // back + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f), + + // top + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + + // bottom + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + + // right + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + + // left + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f) + + }; + + mesh.VertexNormals = + { + // front + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f), + SHVec3(0.0f, 0.0f, 1.0f), + + //back + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), + + // top + SHVec3(0.0f, 1.0f, 0.0f), + SHVec3(0.0f, 1.0f, 0.0f), + SHVec3(0.0f, 1.0f, 0.0f), + SHVec3(0.0f, 1.0f, 0.0f), + + // bottom + SHVec3(0.0f, -1.0f, 0.0f), + SHVec3(0.0f, -1.0f, 0.0f), + SHVec3(0.0f, -1.0f, 0.0f), + SHVec3(0.0f, -1.0f, 0.0f), + + // right + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), + + // left + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f), + SHVec3(-1.0f, 0.0f, 0.0f) + }; + + mesh.Indices = + { + 0, 1, 2, 0, 2, 3, + 4, 5, 6, 4, 6, 7, + 8, 9, 10, 8, 10, 11, + 12, 13, 14, 12, 14, 15, + 16, 17, 18, 16, 18, 19, + 20, 21, 22, 20, 22, 23 + }; + + return mesh; + } + + Handle SHPrimitiveGenerator::Cube(SHMeshLibrary& meshLibrary) noexcept + { + SHMeshData meshData = Cube(); + return meshLibrary.AddMesh + ( + meshData.VertexPositions.size(), + meshData.VertexPositions.data(), + meshData.VertexTexCoords.data(), + meshData.VertexTangents.data(), + meshData.VertexNormals.data(), + meshData.Indices.size(), + meshData.Indices.data() + ); + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h new file mode 100644 index 00000000..88b243f5 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -0,0 +1,60 @@ +/************************************************************************************//*! +\file SHPrimitiveGenerator.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 18, 2022 +\brief Contains the static class definition of SHPrimitiveGenerator. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Math/SHMath.h" +#include "SHMeshData.h" + +namespace SHADE +{ + /*************************************************************************************/ + /*! + \brief + Static class that contains functions for generating 3D primitives. + */ + /*************************************************************************************/ + class SHPrimitiveGenerator + { + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + SHPrimitiveGenerator() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Primitive Generation Functions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Produces a cube and stores the data in a SHMeshData object. + + \return + SHMeshData object containing vertex data for the cube. + */ + /***********************************************************************************/ + [[nodiscard]] static SHMeshData Cube() noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a cube and constructs a SHMesh using the SHMeshLibrary provided. + + \param meshLibrary + Reference to the SHMeshLibrary to procude and store a cube mesh in. + + \return + SHMesh object that points to the generated cube mesh in the SHMeshLibrary. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; + }; +} \ No newline at end of file From b9185eab185fe038ec9e50fb6b73dc86f71c4e7f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 18 Sep 2022 23:23:48 +0800 Subject: [PATCH 112/793] Added Mesh Registration Functions to SHGraphicsSystem and a SHGraphicsSystem compatible version of mesh generation functions for SHPrimitiveGenerator --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 21 ++++++ .../MiddleEnd/Interface/SHGraphicsSystem.h | 71 +++++++++++++++++-- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 54 +++++++++----- .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 25 +++++-- 4 files changed, 140 insertions(+), 31 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 09177993..cc3bd124 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -355,6 +355,27 @@ namespace SHADE { resourceManager.Free(materialInstance); } + + /*---------------------------------------------------------------------------------*/ + /* Mesh Registration Functions */ + /*---------------------------------------------------------------------------------*/ + SHADE::Handle SHGraphicsSystem::AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices) + { + return meshLibrary.AddMesh(vertexCount, positions, texCoords, tangents, normals, indexCount, indices); + } + + void SHGraphicsSystem::RemoveMesh(Handle mesh) + { + meshLibrary.RemoveMesh(mesh); + } + + void SHGraphicsSystem::BuildMeshBuffers() + { + transferCmdBuffer->BeginRecording(); + meshLibrary.BuildBuffers(device, transferCmdBuffer); + transferCmdBuffer->EndRecording(); + queue->SubmitCommandBuffer({ transferCmdBuffer }); + } void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 1c1d7710..7c8cd6a3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -25,6 +25,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/RenderGraph/SHRenderGraph.h" +#include "SHMeshLibrary.h" namespace SHADE { @@ -120,6 +121,67 @@ namespace SHADE Handle AddMaterialInstance(Handle material); void RemoveMaterialInstance(Handle materialInstance); + /*-----------------------------------------------------------------------------*/ + /* Mesh Registration Functions */ + /*-----------------------------------------------------------------------------*/ + /*******************************************************************************/ + /*! + + \brief + Adds a mesh to the Mesh Library. But this does not mean that the meshes have + been added yet. A call to "BuildBuffers()" is required to transfer all + meshes into the GPU. + + \param vertexCount + Number of vertices in this Mesh. + \param positions + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + \param texCoords + Pointer to the first in a contiguous array of SHMathVec2s that define vertex + texture coordinates. + \param tangents + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + tangents. + \param normals + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + normals. + \param indexCount + Number of indices in this mesh. + \param indices + Pointer to the first in a contiguous array of uint32_ts that define mesh + indices. + + \return + Handle to the created Mesh. This is not valid to be used until a call to + BuildBuffers(). + + */ + /*******************************************************************************/ + Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); + /*******************************************************************************/ + /*! + + \brief + Removes a mesh from the MeshLibrary. But this does not mean that the meshes + have been removed yet. A call to "BuildBuffers()" is required to finalise all + changes. + + \param mesh + Handle to the mesh to remove. + + */ + /*******************************************************************************/ + void RemoveMesh(Handle mesh); + /***************************************************************************/ + /*! + + \brief + Finalises all changes to the MeshLibrary into the GPU buffers. + + */ + /***************************************************************************/ + void BuildMeshBuffers(); /*-----------------------------------------------------------------------------*/ /* Setters */ @@ -154,16 +216,13 @@ namespace SHADE Handle transferCmdPool; Handle transferCmdBuffer; SHRenderContext renderContext; - std::array, 2> graphSemaphores; - + std::array, 2> graphSemaphores; // Not Owned Resources SHWindow* window; - - std::vector> globalDescSetLayouts; - // Middle End Resources - ResourceManager resourceManager; + ResourceManager resourceManager; + SHMeshLibrary meshLibrary; // Viewports Handle defaultViewport; // Whole screen std::vector> viewports; // Additional viewports diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index 59f43712..d096da53 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -13,6 +13,8 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" #include "SHPrimitiveGenerator.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" + namespace SHADE { SHMeshData SHPrimitiveGenerator::Cube() noexcept @@ -34,10 +36,10 @@ namespace SHADE SHVec3( 0.5f, -0.5f, -0.5f), // top - SHVec3(-0.5f, 0.5f, -0.5f), - SHVec3(-0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3( 0.5f, 0.5f, 0.5f), + SHVec3( 0.5f, 0.5f, -0.5f), // bottom SHVec3(-0.5f, -0.5f, -0.5f), @@ -66,10 +68,10 @@ namespace SHADE SHVec2(0.0f, 0.0f), - SHVec2(0.0f, 1.0f), - SHVec2(1.0f, 1.0f), - SHVec2(1.0f, 0.0f), - SHVec2(0.0f, 0.0f), + SHVec2(0.0f, 1.0f), + SHVec2(1.0f, 1.0f), + SHVec2(1.0f, 0.0f), + SHVec2(0.0f, 0.0f), SHVec2(0.0f, 1.0f), @@ -148,7 +150,7 @@ namespace SHADE SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, -1.0f), - SHVec3(0.0f, 0.0f, -1.0f), + SHVec3(0.0f, 0.0f, -1.0f), // top SHVec3(0.0f, 1.0f, 0.0f), @@ -160,13 +162,13 @@ namespace SHADE SHVec3(0.0f, -1.0f, 0.0f), SHVec3(0.0f, -1.0f, 0.0f), SHVec3(0.0f, -1.0f, 0.0f), - SHVec3(0.0f, -1.0f, 0.0f), + SHVec3(0.0f, -1.0f, 0.0f), // right SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), - SHVec3(1.0f, 0.0f, 0.0f), + SHVec3(1.0f, 0.0f, 0.0f), // left SHVec3(-1.0f, 0.0f, 0.0f), @@ -192,15 +194,29 @@ namespace SHADE { SHMeshData meshData = Cube(); return meshLibrary.AddMesh - ( - meshData.VertexPositions.size(), - meshData.VertexPositions.data(), - meshData.VertexTexCoords.data(), - meshData.VertexTangents.data(), - meshData.VertexNormals.data(), - meshData.Indices.size(), - meshData.Indices.data() + ( + meshData.VertexPositions.size(), + meshData.VertexPositions.data(), + meshData.VertexTexCoords.data(), + meshData.VertexTangents.data(), + meshData.VertexNormals.data(), + meshData.Indices.size(), + meshData.Indices.data() ); } + Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept + { + SHMeshData meshData = Cube(); + return gfxSystem.AddMesh + ( + meshData.VertexPositions.size(), + meshData.VertexPositions.data(), + meshData.VertexTexCoords.data(), + meshData.VertexTangents.data(), + meshData.VertexNormals.data(), + meshData.Indices.size(), + meshData.Indices.data() + ); + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index 88b243f5..493d7e35 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -17,12 +17,12 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*************************************************************************************/ - /*! - \brief - Static class that contains functions for generating 3D primitives. - */ - /*************************************************************************************/ + /*************************************************************************************/ + /*! + \brief + Static class that contains functions for generating 3D primitives. + */ + /*************************************************************************************/ class SHPrimitiveGenerator { /*---------------------------------------------------------------------------------*/ @@ -56,5 +56,18 @@ namespace SHADE */ /***********************************************************************************/ [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a cube and constructs a SHMesh using the SHGraphicsSystem provided. + + \param gfxSystem + Reference to the SHGraphicsSystem to produce and store a cube mesh in. + + \return + SHMesh object that points to the generated cube mesh in the SHGraphicsSystem. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; }; } \ No newline at end of file From 643efbe1bb84b88c63b82703258cec5cea132e94 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 19 Sep 2022 00:00:07 +0800 Subject: [PATCH 113/793] WIP --- .../src/Application/SBApplication.cpp | 4 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 36 ++++++--- .../MiddleEnd/Interface/SHGraphicsSystem.h | 18 ++++- .../MiddleEnd/Interface/SHRenderable.cpp | 4 +- .../Shaders/SHShaderSourceLibrary.cpp | 36 +++++++++ .../MiddleEnd/Shaders/SHShaderSourceLibrary.h | 3 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 5 +- TempShaderFolder/TestCubeFs.glsl | 72 ++++++++++++++++++ TempShaderFolder/TestCubeFs.spv | Bin 0 -> 632 bytes TempShaderFolder/TestCubeVs.glsl | 53 +++++++++++++ TempShaderFolder/TestCubeVs.spv | Bin 0 -> 1428 bytes 11 files changed, 212 insertions(+), 19 deletions(-) create mode 100644 TempShaderFolder/TestCubeFs.glsl create mode 100644 TempShaderFolder/TestCubeFs.spv create mode 100644 TempShaderFolder/TestCubeVs.glsl create mode 100644 TempShaderFolder/TestCubeVs.spv diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 58b6cb84..aa9c2347 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -18,6 +18,7 @@ #include #include "Scripting/SHScriptEngine.h" +#include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" namespace Sandbox { @@ -56,6 +57,9 @@ namespace Sandbox // Set up scripting SHADE::SHScriptEngine::Init(); + + // Create temp meshes + } void SBApplication::Update(void) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 09177993..f4a7d402 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -127,19 +127,20 @@ namespace SHADE auto node = worldRenderGraph->AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors //First subpass to write to G-Buffer - auto writeSubpass = node->AddSubpass("G-Buffer Write"); - writeSubpass->AddColorOutput("Position"); - writeSubpass->AddColorOutput("Normals"); + auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); + gBufferWriteSubpass->AddColorOutput("Present"); + //writeSubpass->AddColorOutput("Normals"); - //Second subpass to read from G-Buffer - auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); - compositeSubpass->AddColorOutput("Present"); // TODO: This should be "Composite" and then composite will write to swapchain image "Present" - compositeSubpass->AddInput("Normals"); - compositeSubpass->AddInput("Position"); + // //Second subpass to read from G-Buffer + //auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); + //compositeSubpass->AddColorOutput("Present"); // TODO: This should be "Composite" and then composite will write to swapchain image "Present" + //compositeSubpass->AddInput("Normals"); + //compositeSubpass->AddInput("Position"); - auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); - auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - imguiSubpass->AddColorOutput("Present"); + // TODO: Use macro to add this node when SH_EDITOR is enabled + //auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + //auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + //imguiSubpass->AddColorOutput("Present"); worldRenderGraph->Generate(); @@ -160,6 +161,19 @@ namespace SHADE worldRenderer->SetCamera(worldCamera); + // TODO: This is VERY temporarily here until a more solid resource management system is implemented + shaderSourceLibrary.Init("../../TempShaderFolder/"); + + shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); + shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); + + shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); + auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); + auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); + //triVS->Reflect(); + //triFS->Reflect(); + + AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 1c1d7710..f1eca3cc 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -25,6 +25,8 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/RenderGraph/SHRenderGraph.h" +#include "Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h" +#include "Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h" namespace SHADE { @@ -159,27 +161,35 @@ namespace SHADE // Not Owned Resources SHWindow* window; - + // Global descriptor set layouts std::vector> globalDescSetLayouts; // Middle End Resources ResourceManager resourceManager; + // Viewports Handle defaultViewport; // Whole screen std::vector> viewports; // Additional viewports + // Debug Renderers Handle debugWorldRenderer; Handle debugScreenRenderer; + // Temp renderers + Handle worldRenderer; + // Temp Cameras Handle worldCamera; Handle screenCamera; - // Temp renderers - Handle worldRenderer; - + // Default vertex input state (used by everything). SHVertexInputState defaultVertexInputState; + // TODO: Temporary only until resource library from Xiao Qi is implemented + SHShaderSourceLibrary shaderSourceLibrary; + SHShaderModuleLibrary shaderModuleLibrary; + + /*-----------------------------------------------------------------------------*/ /* Private member functions */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index bf681a81..1ad82a80 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -24,8 +24,8 @@ namespace SHADE void SHRenderable::OnCreate() { materialChanged = true; - sharedMaterial = {}; - material = {}; + sharedMaterial = {}; + material = {}; oldMaterial = {}; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp index dd0f1612..d9bf9ddc 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp @@ -269,4 +269,40 @@ namespace SHADE } + SHShaderData::SHShaderData(SHShaderData const& rhs) noexcept + : spirvBinary{rhs.spirvBinary} + , shaderType{ rhs.shaderType} + , name{rhs.name } + , id{rhs.id } + { + + } + + SHShaderData& SHShaderData::operator=(SHShaderData const& rhs) noexcept + { + if (this == &rhs) + return *this; + + spirvBinary = rhs.spirvBinary; + shaderType = rhs.shaderType; + name = rhs.name; + id = rhs.id; + + + return *this; + } + + SHShaderData& SHShaderData::operator=(SHShaderData&& rhs) noexcept + { + if (this == &rhs) + return *this; + + spirvBinary = std::move(rhs.spirvBinary); + shaderType = std::move (rhs.shaderType); + name = std::move (rhs.name); + id = std::move (rhs.id); + + return *this; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h index 505afa97..bb346111 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h @@ -25,7 +25,10 @@ namespace SHADE uint32_t id; SHShaderData(void) noexcept; + SHShaderData(SHShaderData const& rhs) noexcept; SHShaderData(SHShaderData&& rhs) noexcept; + SHShaderData& operator= (SHShaderData&& rhs) noexcept; + SHShaderData& operator= (SHShaderData const& rhs) noexcept; }; // TODO: This class is purely temporary and will be converted/changed when XQ implements his resource manager diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 1c995e12..ee5049e3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -1,4 +1,4 @@ -#include "SHPch.h" +#include "SHPch.h" #include "SHRenderGraph.h" #include "Graphics/Swapchain/SHVkSwapchain.h" #include "Graphics/Framebuffer/SHVkFramebuffer.h" @@ -338,6 +338,7 @@ namespace SHADE void SHSubpass::Execute(Handle& commandBuffer) noexcept { // Draw all the batches + superBatch->Draw(commandBuffer); // Draw all the exterior draw calls for (auto& drawCall : exteriorDrawCalls) @@ -584,7 +585,7 @@ namespace SHADE Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept { // verify subpass exists - if (subpass->GetIndex() >= subpasses.size() - 1) + if (subpass->GetIndex() >= subpasses.size()) { SHLOG_ERROR("Subpass index passed in is not valid. RenderGraphNode does not have that many passes. "); return {}; diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl new file mode 100644 index 00000000..dc069eda --- /dev/null +++ b/TempShaderFolder/TestCubeFs.glsl @@ -0,0 +1,72 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable + +layout(location = 0) in struct +{ + //mat3 BTN; + vec4 vertColor; + //vec3 localSpacePosition; + //vec2 uv; + //vec3 localLightPosition; + //vec3 localEyePosition; + +} In; + +//layout(std140, push_constant) uniform TestPushConstant +//{ +// mat4 pvMat; +// vec4 lightPosition; +// vec4 eyePosition; +// vec4 ambientColor; +// vec4 lightColor; +// +//} testPushConstant; + +layout(location = 0) out vec4 outColor; + +//layout(binding = 0) uniform sampler2D diffuseMap; +//layout(binding = 1) uniform sampler2D normalMap; +//layout(binding = 2) uniform sampler2D aoMap; +//layout(binding = 3) uniform sampler2D glossinessMap; +//layout(binding = 4) uniform sampler2D samplerRoughnessMap; + +void main() +{ + //vec3 normal; + + //// Get the tangent space normal from normal map. It is a BC5 texture and therefore only use red and green + //normal.xy = (texture (normalMap, In.uv).gr * 2.0f) - 1.0f; + + //// z value is derived (TODO: Find out what this does) + //normal.z = sqrt(1.0f - dot(normal.xy, normal.xy)); + + //// Transform the normal from tangent space to local space + //normal = In.BTN * normal; + + //// Get the vector from fragment to light + //vec3 localLightDir = normalize(In.localLightPosition - In.localSpacePosition); + + //// get the value of dot between normal from texture and frag to light + //float diffuse = max(0, dot(normal, localLightDir)); + + //// sample the diffuse texture + //vec4 diffuseColor = texture (diffuseMap, In.uv) * In.vertColor; + + //vec3 eyeDirection = normalize(In.localSpacePosition - In.localEyePosition); + + //const float shininess = mix(1, 100, 1 - texture (samplerRoughnessMap, In.uv).r); + + //float specular = pow(max(0, dot(normal, normalize(localLightDir - eyeDirection))), shininess); + + //outColor.rgb = testPushConstant.ambientColor.rgb * diffuseColor.rgb * texture (aoMap, In.uv).rgb; + + //outColor.rgb += testPushConstant.lightColor.rgb * (specular.rrr * 0.4 + diffuse.rrr * diffuseColor.rgb); + + //const float gamma = testPushConstant.eyePosition.w; + //outColor.rgb = pow(outColor.rgb, vec3(1.0f / gamma)); + //outColor.a = diffuseColor.a; + + + outColor = In.vertColor; +} \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv new file mode 100644 index 0000000000000000000000000000000000000000..f0dbc4493589074291db908844fbb1e8c2e3fb59 GIT binary patch literal 632 zcmY*VT}#725L}z4t*!l1)VEUcQ7A>K2%=C$f)FU^4>-=`sL_~&d=&h9{wiMtXVO&a z!QS4?&CczuRXc5p>_}U>vM=j3lo}Y3jx@^bxX9jv4>5p_JRZQwf~&|Eit11}u9`pHsmvrg)wxmGtM*N*;+Hq$<=KA?u7YT(LLDs& zy)a literal 0 HcmV?d00001 diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl new file mode 100644 index 00000000..f7dce787 --- /dev/null +++ b/TempShaderFolder/TestCubeVs.glsl @@ -0,0 +1,53 @@ +#version 450 +#extension GL_KHR_vulkan_glsl : enable + +layout(location = 0) in vec3 aVertexPos; +layout(location = 1) in vec2 aUV; +layout(location = 2) in vec3 aNormal; +layout(location = 3) in vec3 aTangent; +layout(location = 4) in mat4 worldTransform; + +//layout(std140, push_constant) uniform TestPushConstant +//{ +// mat4 pvMat; +// vec4 lightPosition; +// vec4 eyePosition; +// vec4 ambientColor; +// vec4 lightColor; +// +//} testPushConstant; + +layout(location = 0) out struct +{ + //mat3 BTN; + vec4 vertColor; + //vec3 localSpacePosition; + //vec2 uv; + //vec3 localLightPosition; + //vec3 localEyePosition; + +} Out; + +void main() +{ + //const float gamma = testPushConstant.eyePosition.w; + //mat4 W2L = inverse(worldTransform); + + //// Since attributes are instanced we want the local positions of light and eye (camera) + //Out.localLightPosition = vec3(W2L * vec4(testPushConstant.lightPosition.xyz, 1.0f)); + //Out.localEyePosition = vec3(W2L * vec4(testPushConstant.eyePosition.xyz, 1.0f)); + + //vec3 biTangent = normalize(cross(aNormal, aTangent)); + + //gl_Position = testPushConstant.pvMat * worldTransform * vec4(aVertexPos, 1.0); + + //// Since the normal we are sampling is in tangent space, we want to later convert them to local space + //// so we need this matrix to multiply with the sampled texel of the normal map. + //Out.BTN = mat3(aTangent, biTangent, aNormal); + //Out.localSpacePosition = aVertexPos; + //Out.uv = aUV; + + // render NDC first + gl_Position = vec4(aVertexPos, 1.0); + Out.vertColor = vec4 (aVertexPos, 1.0f); +} \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv new file mode 100644 index 0000000000000000000000000000000000000000..2b0d3b93c0c4a570f997eae1f3763e05cb6cbbab GIT binary patch literal 1428 zcmZ9KUr!T36vfB33kU)t3aD6$AgDFO2Q?-}jX|?MG!_H$y4kb~*<{&mwp;x3u5>IEwPqC@-RKf?`Xam|QlF zi#SWg&RRY9v3#5s$MFwUW>1-;XXOr)c=SFV7hyVxra7iTZjvO^oTqy-2bQNF^9ajU zR2Qyk?%HhGmy0je?O~Q=x!u>aGwe?at7n$sms7_xTVsyS3?%9^Hz`TJv z<_=(LkmqfH-G1H)m>T4}6{gmzROq&qB~QGjXhyyxTbEvs*<$p!gy-ZtGFG?3R~1u# zQ+QsU{cvqX+{K+i4(mwAD|h#PRbjp_9Cengt~{4I;AI($zOKtt2R-Ml$kPKn=Yg3W z9Q)DUlo|8$E&AJv*h_D1MZ6bca+~tx;5ZA++~KIbE6;h%3;hFm>cFE1?^T@ZW&c0S zcVW+l^pE7J&5Swku{=3=_JjFua4+=UsEd|GPrt=@@~_2m|5X`x|7>3^^DH^JDYsT} zoauDy703BU>WH2;Wb8*zo*BN=xy Date: Mon, 19 Sep 2022 00:11:44 +0800 Subject: [PATCH 114/793] Accounted for Shaders with no SHShaderBlockInterface --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 22 +++++++++++------- .../MiddleEnd/Interface/SHGraphicsConstants.h | 11 +++++++++ .../MiddleEnd/Interface/SHMaterial.cpp | 23 ++++++++++++++----- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index e7c2f9ef..036e97c7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -107,18 +107,20 @@ namespace SHADE transformData.reserve(numTotalElements); transformData.clear(); // - Material Properties Data - const Byte SINGLE_MAT_PROPS_SIZE = pipeline->GetPipelineLayout()->GetShaderBlockInterface - ( - SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, - SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, - vk::ShaderStageFlagBits::eFragment - )->GetBytesRequired(); + const Handle SHADER_INFO = pipeline->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + ); + const Byte SINGLE_MAT_PROPS_SIZE = SHADER_INFO->GetBytesRequired(); const Byte MATPROPS_TOTAL_BYTES = drawData.size() * SINGLE_MAT_PROPS_SIZE; if (matPropsDataSize < MATPROPS_TOTAL_BYTES) { matPropsData.reset(new char[MATPROPS_TOTAL_BYTES]); matPropsDataSize = MATPROPS_TOTAL_BYTES; } + const bool EMPTY_MAT_PROPS = MATPROPS_TOTAL_BYTES <= 0; // Build Sub Batches uint32_t nextInstanceIndex = 0; @@ -141,8 +143,11 @@ namespace SHADE // Transform transformData.emplace_back(renderable->TransformMatrix); // Material Properties - renderable->GetMaterial()->ExportProperties(propsCurrPtr); - propsCurrPtr += SINGLE_MAT_PROPS_SIZE; + if (!EMPTY_MAT_PROPS) + { + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + propsCurrPtr += SINGLE_MAT_PROPS_SIZE; + } } } @@ -177,6 +182,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHBatch::Draw(Handle cmdBuffer) { + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer, 0); cmdBuffer->DrawMultiIndirect(drawDataBuffer, static_cast(drawData.size())); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index b3bd52d0..648be460 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -71,6 +71,17 @@ namespace SHADE static constexpr uint32_t BATCHED_PER_INST_DATA = 0; }; + struct VertexBufferBindings + { + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TRANSFORM = 4; + }; + /*******************************************************************************/ /*! \brief diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp index 71e72331..36e30010 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp @@ -22,9 +22,17 @@ namespace SHADE return; } - // Allocate memory for properties - propMemorySize = getShaderBlockInterface()->GetBytesRequired(); - propMemory.reset(new char[propMemorySize]); + // Allocate memory for properties + const Handle SHADER_INFO = getShaderBlockInterface(); + propMemorySize = SHADER_INFO ? SHADER_INFO->GetBytesRequired() : 0; + if (propMemorySize <= 0) + { + propMemory.reset(); + } + else + { + propMemory.reset(new char[propMemorySize]); + } ResetProperties(); } @@ -39,17 +47,20 @@ namespace SHADE void SHMaterial::ResetProperties() { // Reset all the properties to default values - memset(propMemory.get(), 0, propMemorySize); + if (propMemory) + memset(propMemory.get(), 0, propMemorySize); } void SHMaterial::ExportProperties(void* dest) const noexcept { - memcpy(dest, propMemory.get(), propMemorySize); + if (propMemory) + memcpy(dest, propMemory.get(), propMemorySize); } size_t SHMaterial::GetPropertiesMemorySize() const noexcept { - return getShaderBlockInterface()->GetBytesRequired(); + const Handle SHADER_INFO = getShaderBlockInterface(); + return SHADER_INFO ? SHADER_INFO->GetBytesRequired() : 0; } /*---------------------------------------------------------------------------------*/ From f1e6031d2e664348fe4f589bf5719d4db42f07c9 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Mon, 19 Sep 2022 14:32:01 +0800 Subject: [PATCH 115/793] Added Transform, adjusted alignment in math files for better readability on smaller screens --- SHADE_Application/SHADE_Application.vcxproj | 2 +- .../src/Application/SBApplication.cpp | 10 +- SHADE_Engine/SHADE_Engine.vcxproj | 5 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 7 + SHADE_Engine/src/Math/SHMath.h | 5 +- SHADE_Engine/src/Math/SHMathHelpers.h | 22 +-- SHADE_Engine/src/Math/SHMathHelpers.hpp | 24 +++- SHADE_Engine/src/Math/SHMatrix.cpp | 19 --- SHADE_Engine/src/Math/SHMatrix.h | 129 +++++++++--------- SHADE_Engine/src/Math/SHQuaternion.cpp | 30 +++- SHADE_Engine/src/Math/SHQuaternion.h | 84 ++++++------ SHADE_Engine/src/Math/SHTransform.cpp | 60 ++++++++ SHADE_Engine/src/Math/SHTransform.h | 64 +++++++++ SHADE_Engine/src/Math/Vector/SHVec2.h | 64 ++++----- SHADE_Engine/src/Math/Vector/SHVec3.h | 72 +++++----- SHADE_Engine/src/Math/Vector/SHVec4.h | 74 +++++----- SHADE_Engine/src/SHpch.h | 5 + SHADE_Engine/src/Tools/SHLogger.h | 30 ++-- 18 files changed, 445 insertions(+), 261 deletions(-) create mode 100644 SHADE_Engine/src/Math/SHTransform.cpp create mode 100644 SHADE_Engine/src/Math/SHTransform.h diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 2616224e..9a566252 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -66,7 +66,7 @@ false MultiThreadedDebugDLL true - stdcpplatest + stdcpp20 Windows diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 184b9611..4ff1a0c2 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -6,6 +6,9 @@ #include "Scenes/SBEditorScene.h" #endif // SHEDITOR +#include "Math/SHMath.h" +#include "Tools/SHLogger.h" + #include #include #include @@ -17,11 +20,14 @@ namespace Sandbox ( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, - _In_ LPWSTR lpCmdLine, + _In_ LPWSTR lpCmdLine, _In_ INT nCmdShow ) { - + + SHADE::SHQuaternion aroundZ20{ SHADE::SHVec3::UnitZ, SHADE::SHMath::DegreesToRadians(20.0f) }; + SHLOG_INFO("Angle is {}", SHADE::SHMath::RadiansToDegrees(aroundZ20.GetAngle())) + window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); #ifdef SHEDITOR diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 1c50ecc0..60a09861 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -64,7 +64,7 @@ false MultiThreadedDebugDLL true - stdcpplatest + stdcpp20 Windows @@ -174,8 +174,10 @@ + + @@ -250,6 +252,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7486fad4..42084b70 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -339,6 +339,9 @@ Math + + Math + Math\Vector @@ -382,6 +385,7 @@ Tools + @@ -555,6 +559,9 @@ Math + + Math + Math\Vector diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 9763abe2..55bf73a9 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -6,4 +6,7 @@ #include "Vector/SHVec3.h" #include "Vector/SHVec4.h" -#include "SHMatrix.h" \ No newline at end of file +#include "SHQuaternion.h" +#include "SHMatrix.h" + +#include "SHTransform.h" \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHMathHelpers.h b/SHADE_Engine/src/Math/SHMathHelpers.h index 9135230e..1580ce47 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.h +++ b/SHADE_Engine/src/Math/SHMathHelpers.h @@ -56,25 +56,31 @@ namespace SHADE /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - static void Initialise (); + static void Initialise (); template - [[nodiscard]] static constexpr T DegreesToRadians (T angleInDeg); + [[nodiscard]] static T Min (T lhs, T rhs); template - [[nodiscard]] static constexpr T RadiansToDegrees (T angleInRad); + [[nodiscard]] static T Max (T lhs, T rhs); template - [[nodiscard]] static T Lerp (T a, T b, T alpha); + [[nodiscard]] static T DegreesToRadians (T angleInDeg); template - [[nodiscard]] static T ClampedLerp (T a, T b, T alpha, T alphaMin, T alphaMax); + [[nodiscard]] static T RadiansToDegrees (T angleInRad); template - [[nodiscard]] static T Wrap (T value, T min, T max); + [[nodiscard]] static T Lerp (T a, T b, T alpha); + + template + [[nodiscard]] static T ClampedLerp (T a, T b, T alpha, T alphaMin, T alphaMax); + + template + [[nodiscard]] static T Wrap (T value, T min, T max); template - [[nodiscard]] static T GenerateRandomNumber (T lowerBound = 0, T upperBound = 1); + [[nodiscard]] static T GenerateRandomNumber (T lowerBound = 0, T upperBound = 1); /** * @brief Compares two floating-point values for equality within given tolerances. @@ -86,7 +92,7 @@ namespace SHADE * @returns True if the values are equal within the specified tolerances. */ template - [[nodiscard]] static bool CompareFloat (T lhs, T rhs, T absTolerance = EPSILON, T relTolerance = EPSILON); + [[nodiscard]] static bool CompareFloat (T lhs, T rhs, T absTolerance = EPSILON, T relTolerance = EPSILON); private: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHMathHelpers.hpp b/SHADE_Engine/src/Math/SHMathHelpers.hpp index f0a1de12..4b49a9a5 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.hpp +++ b/SHADE_Engine/src/Math/SHMathHelpers.hpp @@ -13,11 +13,8 @@ // Primary Header #include "SHMathHelpers.h" -#include #include -// TODOs (Diren): Include pch? - namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -25,13 +22,25 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ template - constexpr T SHMath::DegreesToRadians(T angleInDeg) + T SHMath::Min(T lhs, T rhs) + { + return lhs < rhs ? lhs : rhs; + } + + template + T SHMath::Max(T lhs, T rhs) + { + return lhs > rhs ? lhs : rhs; + } + + template + T SHMath::DegreesToRadians(T angleInDeg) { return angleInDeg * static_cast(PI / 180.0f); } template - constexpr T SHMath::RadiansToDegrees(T angleInRad) + T SHMath::RadiansToDegrees(T angleInRad) { return angleInRad * static_cast(180.0f / PI); } @@ -82,9 +91,10 @@ namespace SHADE template - bool CompareFloat(T lhs, T rhs, T absTolerance, T relTolerance) + bool SHMath::CompareFloat(T lhs, T rhs, T absTolerance, T relTolerance) { - return std::fabs(lhs - rhs) <= std::max(absTolerance, relTolerance * std::max(abs(lhs), abs(rhs))); + const T RTOL = relTolerance * Max(std::fabs(lhs), std::fabs(rhs)); + return std::fabs(lhs - rhs) <= MAX(absTolerance, RTOL); } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHMatrix.cpp b/SHADE_Engine/src/Math/SHMatrix.cpp index 8e8281d0..94c17914 100644 --- a/SHADE_Engine/src/Math/SHMatrix.cpp +++ b/SHADE_Engine/src/Math/SHMatrix.cpp @@ -362,7 +362,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixTranslation(x, y, z)); - result.Transpose(); return result; } @@ -371,7 +370,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixTranslation(pos.x, pos.y, pos.z)); - result.Transpose(); return result; } @@ -382,7 +380,6 @@ namespace SHADE const XMVECTOR A = XMLoadFloat3(&axis); XMStoreFloat4x4(&result, XMMatrixRotationAxis(A, angleInRad)); - result.Transpose(); return result; } @@ -391,7 +388,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYaw(pitch, yaw, roll)); - result.Transpose(); return result; } @@ -400,7 +396,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYaw(eulerAngles.x, eulerAngles.y, eulerAngles.z)); - result.Transpose(); return result; } @@ -411,7 +406,6 @@ namespace SHADE const XMVECTOR Q = XMLoadFloat4(&q); XMStoreFloat4x4(&result, XMMatrixRotationQuaternion(Q)); - result.Transpose(); return result; } @@ -420,7 +414,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixRotationX(angleInRad)); - result.Transpose(); return result; } @@ -429,7 +422,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixRotationY(angleInRad)); - result.Transpose(); return result; } @@ -438,7 +430,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixRotationZ(angleInRad)); - result.Transpose(); return result; } @@ -476,7 +467,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixLookAtRH(EYE, TGT, UP)); - result.Transpose(); return result; } @@ -490,7 +480,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixLookAtLH(EYE, TGT, UP)); - result.Transpose(); return result; } @@ -512,7 +501,6 @@ namespace SHADE result._42 = pos.y; result._43 = pos.z; - result.Transpose(); return result; } @@ -534,7 +522,6 @@ namespace SHADE result._42 = pos.x; result._43 = pos.x; - result.Transpose(); return result; } @@ -544,7 +531,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixPerspectiveFovRH(fov, aspectRatio, nearPlane, farPlane)); - result.Transpose(); return result; } @@ -554,7 +540,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixPerspectiveFovLH(fov, aspectRatio, nearPlane, farPlane)); - result.Transpose(); return result; } @@ -564,7 +549,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixPerspectiveRH(width, height, nearPlane, farPlane)); - result.Transpose(); return result; } @@ -574,7 +558,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixPerspectiveLH(width, height, nearPlane, farPlane)); - result.Transpose(); return result; } @@ -584,7 +567,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixOrthographicRH(width, height, nearPlane, farPlane)); - result.Transpose(); return result; } @@ -594,7 +576,6 @@ namespace SHADE XMStoreFloat4x4(&result, XMMatrixOrthographicLH(width, height, nearPlane, farPlane)); - result.Transpose(); return result; } diff --git a/SHADE_Engine/src/Math/SHMatrix.h b/SHADE_Engine/src/Math/SHMatrix.h index 2aab05ab..f5d7c173 100644 --- a/SHADE_Engine/src/Math/SHMatrix.h +++ b/SHADE_Engine/src/Math/SHMatrix.h @@ -49,96 +49,99 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHMatrix (const SHMatrix& rhs) = default; - SHMatrix (SHMatrix&& rhs) = default; - ~SHMatrix () = default; + SHMatrix (const SHMatrix& rhs) = default; + SHMatrix (SHMatrix&& rhs) = default; + ~SHMatrix () = default; - SHMatrix () noexcept; - SHMatrix ( const SHVec4& r0, - const SHVec4& r1, - const SHVec4& r2, - const SHVec4& r3 = SHVec4::UnitW - ) noexcept; - SHMatrix ( - float m00, float m01, float m02, float m03, - float m10, float m11, float m12, float m13, - float m20, float m21, float m22, float m23, - float m30 = 0.0f, float m31 = 0.0f, float m32 = 0.0f, float m33 = 1.0f - ) noexcept; + SHMatrix () noexcept; + SHMatrix + ( + const SHVec4& r0, + const SHVec4& r1, + const SHVec4& r2, + const SHVec4& r3 = SHVec4::UnitW + ) noexcept; + SHMatrix + ( + float m00, float m01, float m02, float m03, + float m10, float m11, float m12, float m13, + float m20, float m21, float m22, float m23, + float m30 = 0.0f, float m31 = 0.0f, float m32 = 0.0f, float m33 = 1.0f + ) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHMatrix& operator= (const SHMatrix& rhs) = default; - SHMatrix& operator= (SHMatrix&& rhs) = default; + SHMatrix& operator= (const SHMatrix& rhs) = default; + SHMatrix& operator= (SHMatrix&& rhs) = default; - SHMatrix& operator+= (const SHMatrix& rhs) noexcept; - SHMatrix& operator-= (const SHMatrix& rhs) noexcept; - SHMatrix& operator*= (const SHMatrix& rhs) noexcept; - SHMatrix& operator*= (float rhs) noexcept; - SHMatrix& operator/= (const SHMatrix& rhs) noexcept; - SHMatrix& operator/= (float rhs) noexcept; + SHMatrix& operator+= (const SHMatrix& rhs) noexcept; + SHMatrix& operator-= (const SHMatrix& rhs) noexcept; + SHMatrix& operator*= (const SHMatrix& rhs) noexcept; + SHMatrix& operator*= (float rhs) noexcept; + SHMatrix& operator/= (const SHMatrix& rhs) noexcept; + SHMatrix& operator/= (float rhs) noexcept; - SHMatrix operator+ (const SHMatrix& rhs) const noexcept; - SHMatrix operator- (const SHMatrix& rhs) const noexcept; - SHMatrix operator- () const noexcept; - SHMatrix operator* (const SHMatrix& rhs) const noexcept; - SHVec3 operator* (const SHVec3& rhs) const noexcept; - SHVec4 operator* (const SHVec4& rhs) const noexcept; - SHMatrix operator* (float rhs) const noexcept; - SHMatrix operator/ (const SHMatrix& rhs) const noexcept; - SHMatrix operator/ (float rhs) const noexcept; + [[nodiscard]] SHMatrix operator+ (const SHMatrix& rhs) const noexcept; + [[nodiscard]] SHMatrix operator- (const SHMatrix& rhs) const noexcept; + [[nodiscard]] SHMatrix operator- () const noexcept; + [[nodiscard]] SHMatrix operator* (const SHMatrix& rhs) const noexcept; + [[nodiscard]] SHVec3 operator* (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec4 operator* (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHMatrix operator* (float rhs) const noexcept; + [[nodiscard]] SHMatrix operator/ (const SHMatrix& rhs) const noexcept; + [[nodiscard]] SHMatrix operator/ (float rhs) const noexcept; - bool operator== (const SHMatrix& rhs) const noexcept; - bool operator!= (const SHMatrix& rhs) const noexcept; + [[nodiscard]] bool operator== (const SHMatrix& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHMatrix& rhs) const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Transpose () noexcept; - void Invert () noexcept; + void Transpose () noexcept; + void Invert () noexcept; - [[nodiscard]] float Determinant () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] float Determinant () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHMatrix Transpose (const SHMatrix& matrix) noexcept; - [[nodiscard]] static SHMatrix Inverse (const SHMatrix& matrix) noexcept; + [[nodiscard]] static SHMatrix Transpose (const SHMatrix& matrix) noexcept; + [[nodiscard]] static SHMatrix Inverse (const SHMatrix& matrix) noexcept; - [[nodiscard]] static SHMatrix Translate (float x, float y, float z) noexcept; - [[nodiscard]] static SHMatrix Translate (const SHVec3& pos) noexcept; + [[nodiscard]] static SHMatrix Translate (float x, float y, float z) noexcept; + [[nodiscard]] static SHMatrix Translate (const SHVec3& pos) noexcept; - [[nodiscard]] static SHMatrix Rotate (const SHVec3& axis, float angleInRad) noexcept; - [[nodiscard]] static SHMatrix Rotate (float yaw, float pitch, float roll) noexcept; - [[nodiscard]] static SHMatrix Rotate (const SHVec3& eulerAngles) noexcept; - [[nodiscard]] static SHMatrix Rotate (const SHQuaternion& q) noexcept; - [[nodiscard]] static SHMatrix RotateX (float angleInRad) noexcept; - [[nodiscard]] static SHMatrix RotateY (float angleInRad) noexcept; - [[nodiscard]] static SHMatrix RotateZ (float angleInRad) noexcept; + [[nodiscard]] static SHMatrix Rotate (const SHVec3& axis, float angleInRad) noexcept; + [[nodiscard]] static SHMatrix Rotate (float yaw, float pitch, float roll) noexcept; + [[nodiscard]] static SHMatrix Rotate (const SHVec3& eulerAngles) noexcept; + [[nodiscard]] static SHMatrix Rotate (const SHQuaternion& q) noexcept; + [[nodiscard]] static SHMatrix RotateX (float angleInRad) noexcept; + [[nodiscard]] static SHMatrix RotateY (float angleInRad) noexcept; + [[nodiscard]] static SHMatrix RotateZ (float angleInRad) noexcept; - [[nodiscard]] static SHMatrix Scale (float uniformScaleFactor) noexcept; - [[nodiscard]] static SHMatrix Scale (float x, float y, float z) noexcept; - [[nodiscard]] static SHMatrix Scale (const SHVec3& scale) noexcept; + [[nodiscard]] static SHMatrix Scale (float uniformScaleFactor) noexcept; + [[nodiscard]] static SHMatrix Scale (float x, float y, float z) noexcept; + [[nodiscard]] static SHMatrix Scale (const SHVec3& scale) noexcept; - [[nodiscard]] static SHMatrix LookAtRH (const SHVec3& eye, const SHVec3& target, const SHVec3& up) noexcept; - [[nodiscard]] static SHMatrix LookAtLH (const SHVec3& eye, const SHVec3& target, const SHVec3& up) noexcept; - [[nodiscard]] static SHMatrix CamToWorldRH (const SHVec3& pos, const SHVec3& forward, const SHVec3& up) noexcept; - [[nodiscard]] static SHMatrix CamToWorldLH (const SHVec3& pos, const SHVec3& forward, const SHVec3& up) noexcept; - [[nodiscard]] static SHMatrix PerspectiveFovRH (float fov, float aspectRatio, float nearPlane, float farPlane) noexcept; - [[nodiscard]] static SHMatrix PerspectiveFovLH (float fov, float aspectRatio, float nearPlane, float farPlane) noexcept; - [[nodiscard]] static SHMatrix PerspectiveRH (float width, float height, float nearPlane, float farPlane) noexcept; - [[nodiscard]] static SHMatrix PerspectiveLH (float width, float height, float nearPlane, float farPlane) noexcept; - [[nodiscard]] static SHMatrix OrthographicRH (float width, float height, float nearPlane, float farPlane) noexcept; - [[nodiscard]] static SHMatrix OrthographicLH (float width, float height, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix LookAtRH (const SHVec3& eye, const SHVec3& target, const SHVec3& up) noexcept; + [[nodiscard]] static SHMatrix LookAtLH (const SHVec3& eye, const SHVec3& target, const SHVec3& up) noexcept; + [[nodiscard]] static SHMatrix CamToWorldRH (const SHVec3& pos, const SHVec3& forward, const SHVec3& up) noexcept; + [[nodiscard]] static SHMatrix CamToWorldLH (const SHVec3& pos, const SHVec3& forward, const SHVec3& up) noexcept; + [[nodiscard]] static SHMatrix PerspectiveFovRH (float fov, float aspectRatio, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix PerspectiveFovLH (float fov, float aspectRatio, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix PerspectiveRH (float width, float height, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix PerspectiveLH (float width, float height, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix OrthographicRH (float width, float height, float nearPlane, float farPlane) noexcept; + [[nodiscard]] static SHMatrix OrthographicLH (float width, float height, float nearPlane, float farPlane) noexcept; // TODO(Diren): Billboard, Shadow, Projection & Reflection }; - SHMatrix operator*(float lhs, const SHMatrix& rhs) noexcept; + SHMatrix operator*(float lhs, const SHMatrix& rhs) noexcept; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index 208f131d..36921f3f 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -180,6 +180,34 @@ namespace SHADE return rhs * lhs; } + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + float SHQuaternion::GetAngle() const noexcept + { + XMVECTOR axis; + float angle; + + const XMVECTOR Q = XMLoadFloat4(this); + XMQuaternionToAxisAngle(&axis, &angle, Q); + return angle; + } + + SHVec4 SHQuaternion::GetAxisAngle() const noexcept + { + XMVECTOR axis; + float angle; + + const XMVECTOR Q = XMLoadFloat4(this); + XMQuaternionToAxisAngle(&axis, &angle, Q); + + + return SHVec4{XMVectorGetX(axis), XMVectorGetY(axis), XMVectorGetZ(axis), angle}; + } + + + /*-----------------------------------------------------------------------------------*/ /* Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -230,7 +258,7 @@ namespace SHADE { std::stringstream ss; ss << std::fixed << std::setprecision(3); - ss << "<" << x << ", " << y << ", " << z << ", " << w <<">"; + ss << "<" << w << ", " << x << ", " << y << ", " << z <<">"; return ss.str(); } diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index 27088284..820392fa 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -20,6 +20,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ class SHVec3; + class SHVec4; class SHMatrix; /*-----------------------------------------------------------------------------------*/ @@ -39,68 +40,75 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHQuaternion (const SHQuaternion& rhs) = default; - SHQuaternion (SHQuaternion&& rhs) = default; + SHQuaternion (const SHQuaternion& rhs) = default; + SHQuaternion (SHQuaternion&& rhs) = default; - SHQuaternion () noexcept; - SHQuaternion (float x, float y, float z, float w) noexcept; - SHQuaternion (float yaw, float pitch, float roll) noexcept; - SHQuaternion (const SHVec3& eulerAngles) noexcept; - SHQuaternion (const SHVec3& axis, float angleInRad) noexcept; - SHQuaternion (const SHMatrix& rotationMatrix) noexcept; + SHQuaternion () noexcept; + SHQuaternion (float x, float y, float z, float w) noexcept; + SHQuaternion (float yaw, float pitch, float roll) noexcept; + SHQuaternion (const SHVec3& eulerAngles) noexcept; + SHQuaternion (const SHVec3& axis, float angleInRad) noexcept; + SHQuaternion (const SHMatrix& rotationMatrix) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHQuaternion& operator= (const SHQuaternion& rhs) = default; - [[nodiscard]] SHQuaternion& operator= (SHQuaternion&& rhs) = default; + SHQuaternion& operator= (const SHQuaternion& rhs) = default; + SHQuaternion& operator= (SHQuaternion&& rhs) = default; + + SHQuaternion& operator+= (const SHQuaternion& rhs) noexcept; + SHQuaternion& operator-= (const SHQuaternion& rhs) noexcept; + SHQuaternion& operator*= (const SHQuaternion& rhs) noexcept; + SHQuaternion& operator*= (float rhs) noexcept; + SHQuaternion& operator/= (const SHQuaternion& rhs) noexcept; - [[nodiscard]] SHQuaternion& operator+= (const SHQuaternion& rhs) noexcept; - [[nodiscard]] SHQuaternion& operator-= (const SHQuaternion& rhs) noexcept; - [[nodiscard]] SHQuaternion& operator*= (const SHQuaternion& rhs) noexcept; - [[nodiscard]] SHQuaternion& operator*= (float rhs) noexcept; - [[nodiscard]] SHQuaternion& operator/= (const SHQuaternion& rhs) noexcept; + [[nodiscard]] SHQuaternion operator+ (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] SHQuaternion operator- (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] SHQuaternion operator- () const noexcept; + [[nodiscard]] SHQuaternion operator* (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] SHQuaternion operator* (float rhs) const noexcept; + [[nodiscard]] SHQuaternion operator/ (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion operator+ (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion operator- (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion operator- () const noexcept; - [[nodiscard]] SHQuaternion operator* (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion operator* (float rhs) const noexcept; - [[nodiscard]] SHQuaternion operator/ (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] bool operator== (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] bool operator== (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] bool operator!= (const SHQuaternion& rhs) const noexcept; + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] float GetAngle () const noexcept; + [[nodiscard]] SHVec4 GetAxisAngle () const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Invert () noexcept; + void Invert () noexcept; - [[nodiscard]] float Length () const noexcept; - [[nodiscard]] float LengthSquared () const noexcept; - [[nodiscard]] float Dot (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion RotateTowards (const SHQuaternion& target, float maxAngleInRad) const noexcept; + [[nodiscard]] float Length () const noexcept; + [[nodiscard]] float LengthSquared () const noexcept; + [[nodiscard]] float Dot (const SHQuaternion& rhs) const noexcept; + [[nodiscard]] SHQuaternion RotateTowards (const SHQuaternion& target, float maxAngleInRad) const noexcept; - [[nodiscard]] SHVec3 ToEuler () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] SHVec3 ToEuler () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHQuaternion Normalise (const SHQuaternion& q) noexcept; - [[nodiscard]] static SHQuaternion Conjugate (const SHQuaternion& q) noexcept; - [[nodiscard]] static SHQuaternion Inverse (const SHQuaternion& q) noexcept; - [[nodiscard]] static float Angle (const SHQuaternion& q1, const SHQuaternion& q2) noexcept; + [[nodiscard]] static SHQuaternion Normalise (const SHQuaternion& q) noexcept; + [[nodiscard]] static SHQuaternion Conjugate (const SHQuaternion& q) noexcept; + [[nodiscard]] static SHQuaternion Inverse (const SHQuaternion& q) noexcept; + [[nodiscard]] static float Angle (const SHQuaternion& q1, const SHQuaternion& q2) noexcept; - [[nodiscard]] static SHQuaternion Lerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; - [[nodiscard]] static SHQuaternion Slerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; + [[nodiscard]] static SHQuaternion Lerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; + [[nodiscard]] static SHQuaternion Slerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; - [[nodiscard]] static SHQuaternion Rotate (const SHVec3& from, const SHVec3& to) noexcept; + [[nodiscard]] static SHQuaternion Rotate (const SHVec3& from, const SHVec3& to) noexcept; }; - SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept; + SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHTransform.cpp b/SHADE_Engine/src/Math/SHTransform.cpp new file mode 100644 index 00000000..757ac5b6 --- /dev/null +++ b/SHADE_Engine/src/Math/SHTransform.cpp @@ -0,0 +1,60 @@ +/**************************************************************************************** + * \file SHTransform.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Transform. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHTransform.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Stai Definitions */ + /*-----------------------------------------------------------------------------------*/ + + + + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHTransform::SHTransform() noexcept + : position { SHVec3::Zero } + , rotation { SHVec3::Zero } + , scale { SHVec3::One } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHMatrix& SHTransform::GetTRS() const + { + return trs; + } + + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHMatrix& SHTransform::ComputeTRS() + { + + const SHMatrix T = SHMatrix::Translate(position); + const SHMatrix R = SHMatrix::Rotate(rotation); + const SHMatrix S = SHMatrix::Scale(scale); + + trs = S * R * T; + + return trs; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHTransform.h b/SHADE_Engine/src/Math/SHTransform.h new file mode 100644 index 00000000..a6d9a1b2 --- /dev/null +++ b/SHADE_Engine/src/Math/SHTransform.h @@ -0,0 +1,64 @@ +/**************************************************************************************** + * \file SHTransform.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Transform. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include "SHMath.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHTransform + { + public: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + static const SHTransform Identity; + + SHVec3 position; + SHVec3 rotation; + SHVec3 scale; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHTransform (const SHTransform&) = default; + SHTransform (SHTransform&&) = default; + + SHTransform& operator= (const SHTransform&) = default; + SHTransform& operator= (SHTransform&&) = default; + + ~SHTransform () = default; + + SHTransform () noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] const SHMatrix& GetTRS() const; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + const SHMatrix& ComputeTRS(); + + private: + SHMatrix trs; + }; + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index a64d4bb0..0b272b40 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -45,53 +45,53 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHVec2 (const SHVec2& rhs) = default; - SHVec2 (SHVec2&& rhs) = default; - ~SHVec2 () = default; + SHVec2 (const SHVec2& rhs) = default; + SHVec2 (SHVec2&& rhs) = default; + ~SHVec2 () = default; - SHVec2 () noexcept; - SHVec2 (float x, float y) noexcept; + SHVec2 () noexcept; + SHVec2 (float x, float y) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec2& operator= (const SHVec2& rhs) = default; - [[nodiscard]] SHVec2& operator= (SHVec2&& rhs) = default; + SHVec2& operator= (const SHVec2& rhs) = default; + SHVec2& operator= (SHVec2&& rhs) = default; - [[nodiscard]] SHVec2& operator+= (const SHVec2& rhs) noexcept; - [[nodiscard]] SHVec2& operator-= (const SHVec2& rhs) noexcept; - [[nodiscard]] SHVec2& operator*= (const SHVec2& rhs) noexcept; - [[nodiscard]] SHVec2& operator*= (float rhs) noexcept; - [[nodiscard]] SHVec2& operator/= (const SHVec2& rhs) noexcept; - [[nodiscard]] SHVec2& operator/= (float rhs) noexcept; + SHVec2& operator+= (const SHVec2& rhs) noexcept; + SHVec2& operator-= (const SHVec2& rhs) noexcept; + SHVec2& operator*= (const SHVec2& rhs) noexcept; + SHVec2& operator*= (float rhs) noexcept; + SHVec2& operator/= (const SHVec2& rhs) noexcept; + SHVec2& operator/= (float rhs) noexcept; - [[nodiscard]] SHVec2 operator+ (const SHVec2& rhs) const noexcept; - [[nodiscard]] SHVec2 operator- (const SHVec2& rhs) const noexcept; - [[nodiscard]] SHVec2 operator- () const noexcept; - [[nodiscard]] SHVec2 operator* (const SHVec2& rhs) const noexcept; - [[nodiscard]] SHVec2 operator* (float rhs) const noexcept; - [[nodiscard]] SHVec2 operator/ (const SHVec2& rhs) const noexcept; - [[nodiscard]] SHVec2 operator/ (float rhs) const noexcept; + [[nodiscard]] SHVec2 operator+ (const SHVec2& rhs) const noexcept; + [[nodiscard]] SHVec2 operator- (const SHVec2& rhs) const noexcept; + [[nodiscard]] SHVec2 operator- () const noexcept; + [[nodiscard]] SHVec2 operator* (const SHVec2& rhs) const noexcept; + [[nodiscard]] SHVec2 operator* (float rhs) const noexcept; + [[nodiscard]] SHVec2 operator/ (const SHVec2& rhs) const noexcept; + [[nodiscard]] SHVec2 operator/ (float rhs) const noexcept; - [[nodiscard]] bool operator== (const SHVec2& rhs) const noexcept; - [[nodiscard]] bool operator!= (const SHVec2& rhs) const noexcept; + [[nodiscard]] bool operator== (const SHVec2& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHVec2& rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); - [[nodiscard]] float operator[] (int index) const; - [[nodiscard]] float operator[] (size_t index) const; + [[nodiscard]] float operator[] (int index); + [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] float Length () const noexcept; - [[nodiscard]] float LengthSquared () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] float Length () const noexcept; + [[nodiscard]] float LengthSquared () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; - [[nodiscard]] float Dot (const SHVec2& rhs) const noexcept; - [[nodiscard]] SHVec2 Cross (const SHVec2& rhs) const noexcept; + [[nodiscard]] float Dot (const SHVec2& rhs) const noexcept; + [[nodiscard]] SHVec2 Cross (const SHVec2& rhs) const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ @@ -117,6 +117,6 @@ namespace SHADE [[nodiscard]] static float Cross (const SHVec2& lhs, const SHVec2& rhs) noexcept; }; - SHVec2 operator* (float lhs, const SHVec2& rhs) noexcept; + SHVec2 operator* (float lhs, const SHVec2& rhs) noexcept; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index e172e824..059c5708 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -50,62 +50,62 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHVec3 (const SHVec3& rhs) = default; - SHVec3 (SHVec3&& rhs) = default; - ~SHVec3 () = default; + SHVec3 (const SHVec3& rhs) = default; + SHVec3 (SHVec3&& rhs) = default; + ~SHVec3 () = default; - SHVec3 () noexcept; - SHVec3 (float x, float y, float z) noexcept; + SHVec3 () noexcept; + SHVec3 (float x, float y, float z) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec3& operator= (const SHVec3& rhs) = default; - [[nodiscard]] SHVec3& operator= (SHVec3&& rhs) = default; + SHVec3& operator= (const SHVec3& rhs) = default; + SHVec3& operator= (SHVec3&& rhs) = default; - [[nodiscard]] SHVec3& operator+= (const SHVec3& rhs) noexcept; - [[nodiscard]] SHVec3& operator-= (const SHVec3& rhs) noexcept; - [[nodiscard]] SHVec3& operator*= (const SHVec3& rhs) noexcept; - [[nodiscard]] SHVec3& operator*= (float rhs) noexcept; - [[nodiscard]] SHVec3& operator/= (const SHVec3& rhs) noexcept; - [[nodiscard]] SHVec3& operator/= (float rhs) noexcept; + SHVec3& operator+= (const SHVec3& rhs) noexcept; + SHVec3& operator-= (const SHVec3& rhs) noexcept; + SHVec3& operator*= (const SHVec3& rhs) noexcept; + SHVec3& operator*= (float rhs) noexcept; + SHVec3& operator/= (const SHVec3& rhs) noexcept; + SHVec3& operator/= (float rhs) noexcept; - [[nodiscard]] SHVec3 operator+ (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator- (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator- () const noexcept; - [[nodiscard]] SHVec3 operator* (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator* (float rhs) const noexcept; - [[nodiscard]] SHVec3 operator/ (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator/ (float rhs) const noexcept; + [[nodiscard]] SHVec3 operator+ (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator- (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator- () const noexcept; + [[nodiscard]] SHVec3 operator* (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator* (float rhs) const noexcept; + [[nodiscard]] SHVec3 operator/ (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator/ (float rhs) const noexcept; - [[nodiscard]] bool operator== (const SHVec3& rhs) const noexcept; - [[nodiscard]] bool operator!= (const SHVec3& rhs) const noexcept; + [[nodiscard]] bool operator== (const SHVec3& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHVec3& rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); - [[nodiscard]] float operator[] (int index) const; - [[nodiscard]] float operator[] (size_t index) const; + [[nodiscard]] float operator[] (int index); + [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] float Length () const noexcept; - [[nodiscard]] float LengthSquared () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] float Length () const noexcept; + [[nodiscard]] float LengthSquared () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; - [[nodiscard]] float Dot (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 Cross (const SHVec3& rhs) const noexcept; + [[nodiscard]] float Dot (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 Cross (const SHVec3& rhs) const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHVec3 Normalise (const SHVec3& v) noexcept; - [[nodiscard]] static SHVec3 Abs (const SHVec3& v) noexcept; - [[nodiscard]] static SHVec3 Min (const std::initializer_list& vs) noexcept; - [[nodiscard]] static SHVec3 Max (const std::initializer_list& vs) noexcept; + [[nodiscard]] static SHVec3 Normalise (const SHVec3& v) noexcept; + [[nodiscard]] static SHVec3 Abs (const SHVec3& v) noexcept; + [[nodiscard]] static SHVec3 Min (const std::initializer_list& vs) noexcept; + [[nodiscard]] static SHVec3 Max (const std::initializer_list& vs) noexcept; [[nodiscard]] static SHVec3 Clamp (const SHVec3& v, const SHVec3& vMin, const SHVec3& vMax) noexcept; [[nodiscard]] static SHVec3 Lerp (const SHVec3& a, const SHVec3& b, float t) noexcept; [[nodiscard]] static SHVec3 ClampedLerp (const SHVec3& a, const SHVec3& b, float t, float tMin = 0.0f, float tMax = 1.0f) noexcept; @@ -124,6 +124,6 @@ namespace SHADE [[nodiscard]] static SHVec3 Transform (const SHVec3& v, const SHMatrix& transformMtx) noexcept; }; - SHVec3 operator* (float lhs, const SHVec3& rhs) noexcept; + SHVec3 operator* (float lhs, const SHVec3& rhs) noexcept; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index c4caf2c8..36793fe0 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -45,57 +45,57 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHVec4 (const SHVec4& rhs) = default; - SHVec4 (SHVec4&& rhs) = default; - ~SHVec4 () = default; + SHVec4 (const SHVec4& rhs) = default; + SHVec4 (SHVec4&& rhs) = default; + ~SHVec4 () = default; - SHVec4 () noexcept; - SHVec4 (float x, float y, float z, float w) noexcept; + SHVec4 () noexcept; + SHVec4 (float x, float y, float z, float w) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec4& operator= (const SHVec4& rhs) = default; - [[nodiscard]] SHVec4& operator= (SHVec4&& rhs) = default; - - [[nodiscard]] SHVec4& operator+= (const SHVec4& rhs) noexcept; - [[nodiscard]] SHVec4& operator-= (const SHVec4& rhs) noexcept; - [[nodiscard]] SHVec4& operator*= (const SHVec4& rhs) noexcept; - [[nodiscard]] SHVec4& operator*= (float rhs) noexcept; - [[nodiscard]] SHVec4& operator/= (const SHVec4& rhs) noexcept; - [[nodiscard]] SHVec4& operator/= (float rhs) noexcept; + SHVec4& operator= (const SHVec4& rhs) = default; + SHVec4& operator= (SHVec4&& rhs) = default; - [[nodiscard]] SHVec4 operator+ (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 operator- (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 operator- () const noexcept; - [[nodiscard]] SHVec4 operator* (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 operator* (float rhs) const noexcept; - [[nodiscard]] SHVec4 operator/ (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 operator/ (float rhs) const noexcept; + SHVec4& operator+= (const SHVec4& rhs) noexcept; + SHVec4& operator-= (const SHVec4& rhs) noexcept; + SHVec4& operator*= (const SHVec4& rhs) noexcept; + SHVec4& operator*= (float rhs) noexcept; + SHVec4& operator/= (const SHVec4& rhs) noexcept; + SHVec4& operator/= (float rhs) noexcept; - [[nodiscard]] bool operator== (const SHVec4& rhs) const noexcept; - [[nodiscard]] bool operator!= (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 operator+ (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 operator- (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 operator- () const noexcept; + [[nodiscard]] SHVec4 operator* (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 operator* (float rhs) const noexcept; + [[nodiscard]] SHVec4 operator/ (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 operator/ (float rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); - [[nodiscard]] float operator[] (int index) const; - [[nodiscard]] float operator[] (size_t index) const; + [[nodiscard]] bool operator== (const SHVec4& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHVec4& rhs) const noexcept; + + [[nodiscard]] float operator[] (int index); + [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] float Length () const noexcept; - [[nodiscard]] float Length3D () const noexcept; - [[nodiscard]] float LengthSquared () const noexcept; - [[nodiscard]] float LengthSquared3D () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] float Length () const noexcept; + [[nodiscard]] float Length3D () const noexcept; + [[nodiscard]] float LengthSquared () const noexcept; + [[nodiscard]] float LengthSquared3D () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; - [[nodiscard]] float Dot (const SHVec4& rhs) const noexcept; - [[nodiscard]] float Dot3D (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 Cross3D (const SHVec4& rhs) const noexcept; - [[nodiscard]] SHVec4 Cross (const SHVec4& v1, const SHVec4& v2) const noexcept; + [[nodiscard]] float Dot (const SHVec4& rhs) const noexcept; + [[nodiscard]] float Dot3D (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 Cross3D (const SHVec4& rhs) const noexcept; + [[nodiscard]] SHVec4 Cross (const SHVec4& v1, const SHVec4& v2) const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ @@ -128,6 +128,6 @@ namespace SHADE }; - SHVec4 operator* (float lhs, const SHVec4& rhs) noexcept; + SHVec4 operator* (float lhs, const SHVec4& rhs) noexcept; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/SHpch.h b/SHADE_Engine/src/SHpch.h index 0342eedb..1adf7af3 100644 --- a/SHADE_Engine/src/SHpch.h +++ b/SHADE_Engine/src/SHpch.h @@ -9,7 +9,10 @@ #pragma once + + #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define NOMINMAX // Windows Header Files #include // C RunTime Header Files @@ -30,3 +33,5 @@ #include #include #include + +#include "Tools/SHLogger.h" diff --git a/SHADE_Engine/src/Tools/SHLogger.h b/SHADE_Engine/src/Tools/SHLogger.h index ac5f9308..2ba4abaf 100644 --- a/SHADE_Engine/src/Tools/SHLogger.h +++ b/SHADE_Engine/src/Tools/SHLogger.h @@ -70,33 +70,33 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static const std::string& GetTrivialPattern () noexcept { return trivialPattern; } - [[nodiscard]] static const std::string& GetVerbosePattern () noexcept { return verbosePattern; } + [[nodiscard]] static const std::string& GetTrivialPattern () noexcept { return trivialPattern; } + [[nodiscard]] static const std::string& GetVerbosePattern () noexcept { return verbosePattern; } /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - static void SetTrivialPattern (const std::string& pattern) noexcept { trivialPattern = pattern; } - static void SetVerbosePattern (const std::string& pattern) noexcept { verbosePattern = pattern; } + static void SetTrivialPattern (const std::string& pattern) noexcept { trivialPattern = pattern; } + static void SetVerbosePattern (const std::string& pattern) noexcept { verbosePattern = pattern; } - static void SetConfig (const Config& config) noexcept; + static void SetConfig (const Config& config) noexcept; - static void SetShowTime (bool showTime) noexcept; - static void SetShowDate (bool showDate) noexcept; - static void SetShowFunctionFileName (bool showFunctionFileName) noexcept; - static void SetShowFunctionLineNumber (bool showFunctionLineNumber) noexcept; + static void SetShowTime (bool showTime) noexcept; + static void SetShowDate (bool showDate) noexcept; + static void SetShowFunctionFileName (bool showFunctionFileName) noexcept; + static void SetShowFunctionLineNumber (bool showFunctionLineNumber) noexcept; - static void SetClockFormat (ClockFormat newClockFormat) noexcept; - static void SetDateFormat (DateFormat newDateFormat) noexcept; + static void SetClockFormat (ClockFormat newClockFormat) noexcept; + static void SetDateFormat (DateFormat newDateFormat) noexcept; - static void SetFileName (const std::string& logFileName) noexcept; - static void SetDirectoryPath (const std::filesystem::path& logDirectoryPath) noexcept; + static void SetFileName (const std::string& logFileName) noexcept; + static void SetDirectoryPath (const std::filesystem::path& logDirectoryPath) noexcept; - static void SetFlushTime (int seconds) noexcept; - static void SetFlushTime (size_t seconds) noexcept { spdlog::flush_every(std::chrono::seconds(seconds)); } + static void SetFlushTime (int seconds) noexcept; + static void SetFlushTime (size_t seconds) noexcept { spdlog::flush_every(std::chrono::seconds(seconds)); } /*---------------------------------------------------------------------------------*/ /* Function Members */ From d025abe43a20fc790be828f9dfd372e8e1b2cebf Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 19 Sep 2022 15:32:03 +0800 Subject: [PATCH 116/793] Render graph execution now takes in graph scope buffers --- SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp | 5 +++++ SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h | 1 + .../Descriptors/SHVkDescriptorSetGroup.cpp | 16 ++++++++++++++++ .../Descriptors/SHVkDescriptorSetGroup.h | 2 ++ .../src/Graphics/Devices/SHVkLogicalDevice.cpp | 5 +++++ .../src/Graphics/Devices/SHVkLogicalDevice.h | 3 ++- .../src/Graphics/RenderGraph/SHRenderGraph.cpp | 16 +++++++++++++--- .../src/Graphics/RenderGraph/SHRenderGraph.h | 2 +- 8 files changed, 45 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 20b94626..841813e4 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -54,6 +54,11 @@ namespace SHADE return vkBuffer; } + vk::BufferUsageFlags SHVkBuffer::GetUsageBits(void) const noexcept + { + return bufferUsageFlags; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index 7f4e0889..49f22e37 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -105,6 +105,7 @@ namespace SHADE /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ vk::Buffer GetVkBuffer (void) const noexcept; + vk::BufferUsageFlags GetUsageBits(void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index 16143aa5..0f4ee31c 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -185,4 +185,20 @@ namespace SHADE } + void SHVkDescriptorSetGroup::UpdateSingleDescriptorSetImages(uint32_t set, uint32_t binding) noexcept + { + vk::WriteDescriptorSet writeDescSet{}; + + // Initialize info for write + writeDescSet.descriptorType = vk::DescriptorType::eCombinedImageSampler; + writeDescSet.dstArrayElement = 0; + writeDescSet.dstSet = descSets[set]; + writeDescSet.dstBinding = binding; + + writeDescSet.pImageInfo = updater.writeInfos[set].descImageInfos.data(); + writeDescSet.descriptorCount = updater.writeInfos[set].descImageInfos.size(); + + device->UpdateDescriptorSet(writeDescSet); + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index 9e311e9a..25685e3e 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -59,6 +59,8 @@ namespace SHADE void ModifyWriteDescImage (uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept; void UpdateDescriptorSet (void) noexcept; + void UpdateSingleDescriptorSetImages (uint32_t set, uint32_t binding) noexcept; + /*-----------------------------------------------------------------------------*/ /* Getter Functions */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 8252929d..b009f4ed 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -568,6 +568,11 @@ namespace SHADE vkLogicalDevice.updateDescriptorSets(writeDescSets, {}); } + void SHVkLogicalDevice::UpdateDescriptorSet(vk::WriteDescriptorSet const& writeDescSet) noexcept + { + vkLogicalDevice.updateDescriptorSets(1, &writeDescSet, 0, {}); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 01764e80..6c2a096d 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -181,7 +181,8 @@ namespace SHADE Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; - void UpdateDescriptorSets (std::vector const& writeDescSets) noexcept; + void UpdateDescriptorSets(std::vector const& writeDescSets) noexcept; + void UpdateDescriptorSet (vk::WriteDescriptorSet const& writeDescSet) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index ee5049e3..22ba9695 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -6,6 +6,7 @@ #include "Graphics/Images/SHVkImage.h" #include "Graphics/Images/SHVkImageView.h" #include "Graphics/Framebuffer/SHVkFramebuffer.h" +#include "Graphics/Buffers/SHVkBuffer.h" #include "Tools/SHLogger.h" namespace SHADE @@ -1068,20 +1069,29 @@ namespace SHADE ConfigureCommands(); } - void SHRenderGraph::Execute(uint32_t frameIndex) noexcept + // TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a + // better way to manage these + void SHRenderGraph::Execute(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept { commandPool->Reset(); auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); + // TODO: DON'T HARDCODE THIS cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); - for (auto& node : nodes) + for (auto& [buffer, bindingPoint]: graphScopeBuffers) { - node->Execute(commandBuffers[frameIndex], frameIndex); + if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eVertexBuffer) + cmdBuffer->BindVertexBuffer(bindingPoint, buffer, 0); + else if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eIndexBuffer) + cmdBuffer->BindIndexBuffer(buffer, 0); } + for (auto& node : nodes) + node->Execute(commandBuffers[frameIndex], frameIndex); + cmdBuffer->EndRecording(); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index f563841e..48701d87 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -292,7 +292,7 @@ namespace SHADE void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; - void Execute (uint32_t frameIndex) noexcept; + void Execute (uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From 44611115fe5eeef45cfc8bac029d37e569aafa6a Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 19 Sep 2022 15:41:52 +0800 Subject: [PATCH 117/793] Added Scene graph functionality (un tested) --- SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp | 43 +++++++++++++++---- SHADE_Engine/src/ECS_Base/Entity/SHEntity.h | 7 +++ .../ECS_Base/Events/SHEntityCreationEvent.h | 1 + .../src/ECS_Base/Managers/SHEntityManager.cpp | 20 ++++++++- .../src/ECS_Base/Managers/SHEntityManager.h | 14 ++++-- SHADE_Engine/src/Scene/SHScene.h | 7 ++- SHADE_Engine/src/Scene/SHSceneManager.cpp | 6 +++ SHADE_Engine/src/Scene/SHSceneManager.h | 9 ++++ 8 files changed, 93 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp index 2683a6e9..3ef138ac 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.cpp @@ -47,32 +47,57 @@ namespace SHADE void SHEntity::SetParent(SHEntity* newParent) noexcept { - (void)newParent; - //TODO + SHSceneManager::GetCurrentSceneGraph().SetParent(GetEID(), newParent->GetEID()); } void SHEntity::SetParent(EntityID newParentID) noexcept { - (void)newParentID; - //TODO + SHSceneManager::GetCurrentSceneGraph().SetParent(GetEID(), newParentID); } SHEntity* SHEntity::GetParent()const noexcept { - //TODO - return nullptr; + SHSceneNode* parent = SHSceneManager::GetCurrentSceneGraph().GetParent(GetEID()); + if (parent != nullptr) + return SHEntityManager::GetEntityByID(parent->GetEntityID()); + else + return nullptr; + } + + EntityID SHEntity::GetParentEID()const noexcept + { + SHSceneNode* parent = SHSceneManager::GetCurrentSceneGraph().GetParent(GetEID()); + if (parent != nullptr) + return parent->GetEntityID(); + else + return MAX_EID; } std::vectorconst& SHEntity::GetChildren()const noexcept { - //TODO - return std::vector{}; + std::vector childrenEntity; + + auto& childrenNodes = SHSceneManager::GetCurrentSceneGraph().GetChildren(GetEID()); + for (auto& childNode : childrenNodes) + { + childrenEntity.push_back(SHEntityManager::GetEntityByID(childNode->GetEntityID())); + } + + return childrenEntity; } std::vectorconst& SHEntity::GetChildrenID()const noexcept { - return std::vector{}; + std::vector childrenEntity; + + auto& childrenNodes = SHSceneManager::GetCurrentSceneGraph().GetChildren(GetEID()); + for (auto& childNode : childrenNodes) + { + childrenEntity.push_back(childNode->GetEntityID()); + } + + return childrenEntity; } } diff --git a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h index e499e260..690895e8 100644 --- a/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h +++ b/SHADE_Engine/src/ECS_Base/Entity/SHEntity.h @@ -127,6 +127,13 @@ namespace SHADE ***************************************************************************/ SHEntity* GetParent()const noexcept; + /******************************************************************** + * \brief + * Get the entity ID of the parent. + * \return + * return the entity ID of the parent + ********************************************************************/ + EntityID GetParentEID() const noexcept; /************************************************************************** * \brief diff --git a/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h b/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h index 728d80f6..709d5147 100644 --- a/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h +++ b/SHADE_Engine/src/ECS_Base/Events/SHEntityCreationEvent.h @@ -8,5 +8,6 @@ namespace SHADE { EntityID eid; std::vector componentTypeIDs; + EntityID parentEID; }; } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index fddd52cc..bbf8d400 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -103,8 +103,16 @@ namespace SHADE SHComponentManager::AddComponent(eID, id); } + + //Link up with scene graph. + + if (parentEID != MAX_EID) + SHSceneManager::GetCurrentSceneGraph().AddNode(eID, SHSceneManager::GetCurrentSceneGraph().GetNode(parentEID)); + else + SHSceneManager::GetCurrentSceneGraph().AddNode(eID); + //set up event stuff - SHEntityCreationEvent event{ eID,componentTypeIDs }; + SHEntityCreationEvent event{ eID,componentTypeIDs, parentEID }; SHEventManager::BroadcastEvent(event, SH_ENTITY_CREATION_EVENT); //(SHComponentManager::AddComponent(eID), ...); @@ -138,6 +146,14 @@ namespace SHADE //Call all the children to Destroy themselves first before the parent is destroyed. if (entityVec[eIndex]) { + auto& children = SHSceneManager::GetCurrentSceneGraph().GetChildren(eID); + for (auto& child : children) + { + DestroyEntity(child->GetEntityID()); + } + + SHSceneManager::GetCurrentSceneGraph().RemoveNode(eID); + //auto& children = entityVec[eIndex]->GetChildrenID(); //while(!children.empty()) //{ @@ -159,6 +175,8 @@ namespace SHADE entityVec[eIndex].reset(nullptr); + + SHEntityDestroyedEvent event{eID}; SHEventManager::BroadcastEvent(event, SH_ENTITY_DESTROYED_EVENT); diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index a9560fa3..7259c5e8 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -23,6 +23,7 @@ #include "ECS_Base/Events/SHEntityCreationEvent.h" #include "ECS_Base/Events/SHEntityDestroyedEvent.h" #include "Events/SHEventManager.h" +#include "Scene/SHSceneManager.h" #include "SH_API.h" namespace SHADE @@ -132,10 +133,19 @@ namespace SHADE std::vector typeIDVec; (typeIDVec.push_back(ComponentFamily::GetID()), ...); - SHEntityCreationEvent event{ eID,typeIDVec }; + + //Link up with scene graph. + + if (parentEID != MAX_EID) + SHSceneManager::GetCurrentSceneGraph().AddNode(eID, SHSceneManager::GetCurrentSceneGraph().GetNode(parentEID)); + else + SHSceneManager::GetCurrentSceneGraph().AddNode(eID); + + SHEntityCreationEvent event{ eID,typeIDVec,parentEID }; SHEventManager::BroadcastEvent(event, SH_ENTITY_CREATION_EVENT); + /*if (entityHandle.IsValid(parentEID) == false) { entityVec[eIndex]->sceneNode.ConnectToRoot(); @@ -146,8 +156,6 @@ namespace SHADE }*/ - //Link up with scene graph. - return eID; } diff --git a/SHADE_Engine/src/Scene/SHScene.h b/SHADE_Engine/src/Scene/SHScene.h index 18aeffdc..372981a6 100644 --- a/SHADE_Engine/src/Scene/SHScene.h +++ b/SHADE_Engine/src/Scene/SHScene.h @@ -12,6 +12,7 @@ #define SH_SCENE_H #include +#include "SHSceneGraph.h" namespace SHADE { @@ -19,15 +20,19 @@ namespace SHADE class SHScene { private: + SHSceneGraph sceneGraph; + protected: SHScene() = default; public: + virtual ~SHScene() = default; + std::string sceneName; - virtual ~SHScene() = default; + SHSceneGraph& GetSceneGraph() noexcept { return sceneGraph; } virtual void Load() = 0; virtual void Init() = 0; diff --git a/SHADE_Engine/src/Scene/SHSceneManager.cpp b/SHADE_Engine/src/Scene/SHSceneManager.cpp index d5223af8..2baf0b9c 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.cpp +++ b/SHADE_Engine/src/Scene/SHSceneManager.cpp @@ -37,6 +37,12 @@ namespace SHADE std::function SHSceneManager::newScene = []() {}; //void (*SHSceneManager::prevSceneCreate)() = []() {}; + + SHSceneGraph& SHSceneManager::GetCurrentSceneGraph() noexcept + { + return currentScene->GetSceneGraph(); + } + void SHSceneManager::UpdateSceneManager() noexcept { if (sceneChanged == false) diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index 4139309d..bdd8f596 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -57,6 +57,15 @@ namespace SHADE //boolean to check if the programme has been terminated. static bool quit; + /******************************************************************** + * \brief + * Get the scene graph of the current scene. + * \return + * A reference to the scene graph of the current active scene. + ********************************************************************/ + static SHSceneGraph& GetCurrentSceneGraph() noexcept; + + /*!************************************************************************* * \brief * Initialize scene manager and loads a default scene From f4082470070ba921bac4e1ffe8339ae3ffb32039 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 19 Sep 2022 15:52:51 +0800 Subject: [PATCH 118/793] Linked MeshLibrary to RenderGraph --- .../src/Application/SBApplication.cpp | 3 +- .../MiddleEnd/Interface/SHGraphicsConstants.h | 28 +++++++++++++++++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 27 +++++++++--------- .../MiddleEnd/Interface/SHRenderer.cpp | 4 +-- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 2 +- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 1 + .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 12 +++++++- 7 files changed, 58 insertions(+), 19 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index aa9c2347..d2bcd760 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -59,7 +59,8 @@ namespace Sandbox SHADE::SHScriptEngine::Init(); // Create temp meshes - + SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); + graphicsSystem->BuildMeshBuffers(); } void SBApplication::Update(void) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 648be460..c26d7576 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -73,6 +73,34 @@ namespace SHADE struct VertexBufferBindings { + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t POSITION = 0; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TEX_COORD = 1; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t NORMAL = 2; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TANGENT = 3; /***************************************************************************/ /*! \brief diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 1a4d9306..579ba9a6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -27,6 +27,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/Managers/SHComponentManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" +#include "SHGraphicsConstants.h" namespace SHADE { @@ -197,6 +198,16 @@ namespace SHADE // semaphore index. This is for render graphs to have semaphores to signal that the next render graph will use to wait on. bool semIndex = 0; + using BufferPair = std::pair, uint32_t>; + const std::initializer_list MESH_DATA = + { + std::make_pair(meshLibrary.GetVertexPositionsBuffer(), SHGraphicsConstants::VertexBufferBindings::POSITION), + std::make_pair(meshLibrary.GetVertexTexCoordsBuffer(), SHGraphicsConstants::VertexBufferBindings::TEX_COORD), + std::make_pair(meshLibrary.GetVertexNormalsBuffer(), SHGraphicsConstants::VertexBufferBindings::NORMAL), + std::make_pair(meshLibrary.GetVertexTangentsBuffer(), SHGraphicsConstants::VertexBufferBindings::TANGENT), + std::make_pair(meshLibrary.GetIndexBuffer(), 0), + }; + // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) { @@ -206,7 +217,7 @@ namespace SHADE for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) { // Draw first - renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + renderers[renIndex]->Draw(renderContext.GetCurrentFrame(), MESH_DATA); // get render graph auto rg = renderers[renIndex]->GetRenderGraph(); @@ -388,7 +399,7 @@ namespace SHADE transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); - queue->SubmitCommandBuffer({ transferCmdBuffer }); + graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); } void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept @@ -418,10 +429,6 @@ namespace SHADE // For global data (generic data and textures) Handle staticGlobalLayout = device->CreateDescriptorSetLayout({genericDataBinding, texturesBinding}); - - - - SHVkDescriptorSetLayout::Binding lightBinding { .Type = vk::DescriptorType::eStorageBufferDynamic, @@ -433,10 +440,6 @@ namespace SHADE // For Dynamic global data (lights) Handle dynamicGlobalLayout = device->CreateDescriptorSetLayout({ lightBinding }); - - - - SHVkDescriptorSetLayout::Binding cameraDataBinding { .Type = vk::DescriptorType::eUniformBufferDynamic, @@ -448,10 +451,6 @@ namespace SHADE // For High frequency global data (camera) Handle cameraDataGlobalLayout = device->CreateDescriptorSetLayout({ cameraDataBinding }); - - - - SHVkDescriptorSetLayout::Binding materialDataBinding { .Type = vk::DescriptorType::eStorageBufferDynamic, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index d2c447d1..37493176 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -40,9 +40,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------------*/ - void SHRenderer::Draw(uint32_t frameIndex) noexcept + void SHRenderer::Draw(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept { - renderGraph->Execute(frameIndex); + renderGraph->Execute(frameIndex, graphScopeBuffers); } Handle SHRenderer::GetRenderGraph(void) const noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 4b7e354f..459f62ac 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -62,7 +62,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ - void Draw(uint32_t frameIndex) noexcept; + void Draw(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index d096da53..36fa0b26 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -14,6 +14,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHPrimitiveGenerator.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index 493d7e35..e338a9d8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -14,17 +14,27 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Math/SHMath.h" #include "SHMeshData.h" +#include "SH_API.h" namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHGraphicsSystem; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ /*************************************************************************************/ /*! \brief Static class that contains functions for generating 3D primitives. */ /*************************************************************************************/ - class SHPrimitiveGenerator + class SH_API SHPrimitiveGenerator { + public: /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ From a05ca4111726ff4e30f3424bbf95a679ab09911c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 19 Sep 2022 15:58:31 +0800 Subject: [PATCH 119/793] Fixed issue with SystemRoutines being created with the wrong version --- SHADE_Application/src/Application/SBApplication.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index d2bcd760..5797771f 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -38,10 +38,10 @@ namespace Sandbox window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::RegisterRoutine(1); - SHADE::SHSystemManager::RegisterRoutine(1); - SHADE::SHSystemManager::RegisterRoutine(1); - SHADE::SHSystemManager::RegisterRoutine(1); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); graphicsSystem->SetWindow(&window); From 471ec27a6de13c0f77e7713119eebdf83258b2a4 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Mon, 19 Sep 2022 16:50:06 +0800 Subject: [PATCH 120/793] Added Bounding Box --- SHADE_Engine/SHADE_Engine.vcxproj | 4 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 4 + .../src/Math/Geometry/SHBoundingBox.cpp | 267 ++++++++++++++++++ .../src/Math/Geometry/SHBoundingBox.h | 87 ++++++ SHADE_Engine/src/Math/Geometry/SHShape.cpp | 26 ++ SHADE_Engine/src/Math/Geometry/SHShape.h | 78 +++++ SHADE_Engine/src/Math/SHMathHelpers.h | 6 + SHADE_Engine/src/Math/SHMathHelpers.hpp | 26 ++ SHADE_Engine/src/Math/Vector/SHVec2.cpp | 4 + SHADE_Engine/src/Math/Vector/SHVec2.h | 5 +- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 4 + SHADE_Engine/src/Math/Vector/SHVec3.h | 1 + 12 files changed, 510 insertions(+), 2 deletions(-) create mode 100644 SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp create mode 100644 SHADE_Engine/src/Math/Geometry/SHBoundingBox.h create mode 100644 SHADE_Engine/src/Math/Geometry/SHShape.cpp create mode 100644 SHADE_Engine/src/Math/Geometry/SHShape.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 60a09861..e69a8f9c 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -172,6 +172,8 @@ + + @@ -249,6 +251,8 @@ + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 42084b70..747538f2 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -386,6 +386,8 @@ Tools + + @@ -590,5 +592,7 @@ Tools + + \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp new file mode 100644 index 00000000..44f01a4b --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -0,0 +1,267 @@ +/**************************************************************************************** + * \file SHBoundingBox.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a 3-Dimensional Axis Aligned Bounding Box + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHBoundingBox.h" +// Project Headers +#include "Math/SHMathHelpers.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHBoundingBox::SHBoundingBox(const SHVec3& c, SHVec3& hE) noexcept + : SHShape {} + , center { c } + , halfExtents { hE } + { + type = Type::BOUNDING_BOX; + } + + SHBoundingBox::SHBoundingBox(const SHVec3* vertices, size_t numVertices) noexcept + : SHShape {} + { + type = Type::BOUNDING_BOX; + + if (vertices == nullptr || numVertices < 2) + { + SHLOG_ERROR("Insufficient number of vertices passed into bounding box constructor!") + return; + } + + SHVec3 min { std::numeric_limits::max() }; + SHVec3 max { std::numeric_limits::min() }; + + for (size_t i = 0; i < numVertices; ++i) + { + const SHVec3& v = vertices[i]; + + min.x = SHMath::Min(min.x, v.x); + min.y = SHMath::Min(min.y, v.y); + min.z = SHMath::Min(min.z, v.z); + + max.x = SHMath::Max(max.x, v.x); + max.y = SHMath::Max(max.y, v.y); + max.z = SHMath::Max(max.z, v.z); + } + + center = SHVec3::Lerp(min, max, 0.5f); + halfExtents = SHVec3::Abs((max - min) * 0.5f); + } + + SHBoundingBox::SHBoundingBox(const SHBoundingBox* boxes, size_t numBoxes) noexcept + : SHShape {} + { + type = Type::BOUNDING_BOX; + + if (boxes == nullptr || numBoxes == 0) + { + SHLOG_ERROR("Insufficient number of boxes passed into bounding box constructor!") + return; + } + + center = boxes->center; + halfExtents = boxes->halfExtents; + + for (size_t i = 1; i < numBoxes; ++i) + *this = Combine(*this, boxes[i]); + } + + SHBoundingBox::SHBoundingBox(const SHBoundingBox& rhs) noexcept + : SHShape {} + , center { rhs.center } + , halfExtents { rhs.halfExtents } + { + type = Type::BOUNDING_BOX; + } + + SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept + : SHShape {} + , center { rhs.center } + , halfExtents { rhs.halfExtents } + { + type = Type::BOUNDING_BOX; + } + + SHBoundingBox& SHBoundingBox::operator=(const SHBoundingBox& rhs) noexcept + { + if (rhs.type != Type::BOUNDING_BOX) + { + SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") + } + else + { + center = rhs.center; + halfExtents = rhs.halfExtents; + } + + return *this; + } + + SHBoundingBox& SHBoundingBox::operator=(SHBoundingBox&& rhs) noexcept + { + if (rhs.type != Type::BOUNDING_BOX) + { + SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") + } + else + { + center = rhs.center; + halfExtents = rhs.halfExtents; + } + + return *this; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHVec3& SHBoundingBox::GetCenter() const noexcept + { + return center; + } + + const SHVec3& SHBoundingBox::GetHalfExtents() const noexcept + { + return halfExtents; + } + + SHVec3 SHBoundingBox::GetMin() const noexcept + { + return center - halfExtents; + } + + SHVec3 SHBoundingBox::GetMax() const noexcept + { + return center + halfExtents; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHBoundingBox::SetCenter(const SHVec3& newCenter) noexcept + { + center = newCenter; + } + + void SHBoundingBox::SetHalfExtents(const SHVec3& newHalfExtents) noexcept + { + halfExtents = newHalfExtents; + } + + void SHBoundingBox::SetMin(const SHVec3& min) noexcept + { + const SHVec3 MAX = center + halfExtents; + + center = SHVec3::Lerp(min, MAX, 0.5f); + halfExtents = SHVec3::Abs((MAX - min) * 0.5f); + } + + void SHBoundingBox::SetMax(const SHVec3& max) noexcept + { + const SHVec3 MIN = center - halfExtents; + + center = SHVec3::Lerp(MIN, max, 0.5f); + halfExtents = SHVec3::Abs((max - MIN) * 0.5f); + } + + void SHBoundingBox::SetMinMax(const SHVec3& min, const SHVec3& max) noexcept + { + center = SHVec3::Lerp(min, max, 0.5f); + halfExtents = SHVec3::Abs((max - min) * 0.5f); + } + + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHBoundingBox::TestPoint(const SHVec3& point) noexcept + { + const SHVec3 V = SHVec3::Abs(point - center); + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + if (V[i] > halfExtents[i]) + return false; + } + + return true; + } + + bool SHBoundingBox::Contains(const SHBoundingBox& rhs) const noexcept + { + const SHVec3 V = SHVec3::Abs(rhs.center - center); + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + if (V[i] > rhs.halfExtents[i]) + return false; + } + + return true; + } + + float SHBoundingBox::Volume() const noexcept + { + return 8.0f * (halfExtents.x * halfExtents.y * halfExtents.z); + } + + float SHBoundingBox::SurfaceArea() const noexcept + { + return 8.0f * ((halfExtents.x * halfExtents.y) + + (halfExtents.x * halfExtents.z) + + (halfExtents.y * halfExtents.z)); + } + + /*-----------------------------------------------------------------------------------*/ + /* Static Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHBoundingBox SHBoundingBox::Combine(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept + { + if (lhs.Contains(rhs)) + return lhs; + + if (rhs.Contains(lhs)) + return rhs; + + const SHVec3 LHS_MIN = lhs.GetMin(); + const SHVec3 LHS_MAX = lhs.GetMax(); + const SHVec3 RHS_MIN = rhs.GetMin(); + const SHVec3 RHS_MAX = rhs.GetMax(); + + SHVec3 min = SHVec3::Min({ LHS_MIN, RHS_MIN }); + SHVec3 max = SHVec3::Max({ LHS_MAX, RHS_MAX }); + + SHBoundingBox result{ lhs }; + result.SetMinMax(min, max); + return result; + } + + bool SHBoundingBox::Intersect(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept + { + const SHVec3 V = SHVec3::Abs(lhs.center - rhs.center); + const SHVec3 D = lhs.halfExtents + rhs.halfExtents; + + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + if (V[i] > D[i]) + return false; + } + + return true; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h new file mode 100644 index 00000000..8c397aff --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -0,0 +1,87 @@ +/**************************************************************************************** + * \file SHBoundingBox.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a 3-Dimensional Axis Aligned Bounding Box + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "SHShape.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SHBoundingBox : public SHShape + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHBoundingBox (const SHVec3& center, SHVec3& halfExtents) noexcept; + SHBoundingBox (const SHVec3* vertices, size_t numVertices) noexcept; + SHBoundingBox (const SHBoundingBox* boxes, size_t numBoxes) noexcept; + + SHBoundingBox (const SHBoundingBox& rhs) noexcept; + SHBoundingBox (SHBoundingBox&& rhs) noexcept; + + SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; + SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] const SHVec3& GetCenter () const noexcept; + [[nodiscard]] const SHVec3& GetHalfExtents () const noexcept; + [[nodiscard]] SHVec3 GetMin () const noexcept; + [[nodiscard]] SHVec3 GetMax () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetCenter (const SHVec3& newCenter) noexcept; + void SetHalfExtents (const SHVec3& newHalfExtents) noexcept; + void SetMin (const SHVec3& min) noexcept; + void SetMax (const SHVec3& max) noexcept; + void SetMinMax (const SHVec3& min, const SHVec3& max) noexcept; + + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; + + [[nodiscard]] bool Contains (const SHBoundingBox& rhs) const noexcept; + [[nodiscard]] float Volume () const noexcept; + [[nodiscard]] float SurfaceArea () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Static Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] static SHBoundingBox Combine (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; + [[nodiscard]] static bool Intersect (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + SHVec3 center; + SHVec3 halfExtents; + }; + + +} // namespace SHADE + diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.cpp b/SHADE_Engine/src/Math/Geometry/SHShape.cpp new file mode 100644 index 00000000..02aaff58 --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHShape.cpp @@ -0,0 +1,26 @@ +/**************************************************************************************** + * \file SHShape.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a shape. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHShape.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHShape::SHShape() + : type { Type::NONE } + {} + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h new file mode 100644 index 00000000..3dbe47e2 --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -0,0 +1,78 @@ +/**************************************************************************************** + * \file SHShape.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a shape. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "Math/SHTransform.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SHShape + { + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class Type + { + BOUNDING_BOX + , RAY + , TRIANGLE + + , COUNT + , NONE = -1 + }; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + bool isIntersecting; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + virtual ~SHShape () = default; + + SHShape (const SHShape&) = default; + SHShape (SHShape&&) = default; + + SHShape& operator=(const SHShape&) = default; + SHShape& operator=(SHShape&&) = default; + + SHShape(); + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] Type GetType() const; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] virtual bool TestPoint (const SHVec3& point) noexcept = 0; + + protected: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + Type type; + }; +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHMathHelpers.h b/SHADE_Engine/src/Math/SHMathHelpers.h index 1580ce47..88c47fbd 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.h +++ b/SHADE_Engine/src/Math/SHMathHelpers.h @@ -61,9 +61,15 @@ namespace SHADE template [[nodiscard]] static T Min (T lhs, T rhs); + template + [[nodiscard]] static T Min (const std::initializer_list& values); + template [[nodiscard]] static T Max (T lhs, T rhs); + template + [[nodiscard]] static T Max (const std::initializer_list& values); + template [[nodiscard]] static T DegreesToRadians (T angleInDeg); diff --git a/SHADE_Engine/src/Math/SHMathHelpers.hpp b/SHADE_Engine/src/Math/SHMathHelpers.hpp index 4b49a9a5..0e5fc5fa 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.hpp +++ b/SHADE_Engine/src/Math/SHMathHelpers.hpp @@ -27,12 +27,38 @@ namespace SHADE return lhs < rhs ? lhs : rhs; } + template + T SHMath::Min(const std::initializer_list& values) + { + T min = *(values.begin()); + + for (auto value : values) + { + min = Min(min, value); + } + + return min; + } + template T SHMath::Max(T lhs, T rhs) { return lhs > rhs ? lhs : rhs; } + template + T SHMath::Max(const std::initializer_list& values) + { + T max = *(values.begin()); + + for (auto value : values) + { + max = Min(max, value); + } + + return max; + } + template T SHMath::DegreesToRadians(T angleInDeg) { diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.cpp b/SHADE_Engine/src/Math/Vector/SHVec2.cpp index 72c80a50..2d2eafd2 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec2.cpp @@ -38,6 +38,10 @@ namespace SHADE : XMFLOAT2( 0.0f, 0.0f ) {} + SHVec2::SHVec2(float n) noexcept + : XMFLOAT2( n, n ) + {} + SHVec2::SHVec2(float _x, float _y) noexcept : XMFLOAT2( _x, _y ) {} diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index 0b272b40..f57c7b5b 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -49,8 +49,9 @@ namespace SHADE SHVec2 (SHVec2&& rhs) = default; ~SHVec2 () = default; - SHVec2 () noexcept; - SHVec2 (float x, float y) noexcept; + SHVec2 () noexcept; + SHVec2 (float n) noexcept; + SHVec2 (float x, float y) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 73030f9c..194f7964 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -43,6 +43,10 @@ namespace SHADE : XMFLOAT3( 0.0f, 0.0f, 0.0f ) {} + SHVec3::SHVec3(float n) noexcept + : XMFLOAT3( n, n, n ) + {} + SHVec3::SHVec3(float _x, float _y, float _z) noexcept : XMFLOAT3( _x, _y, _z ) {} diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index 059c5708..76318499 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -55,6 +55,7 @@ namespace SHADE ~SHVec3 () = default; SHVec3 () noexcept; + SHVec3 (float n) noexcept; SHVec3 (float x, float y, float z) noexcept; /*---------------------------------------------------------------------------------*/ From a867ecbcbf7ee66330d2b59a5a297b0f9fe04f05 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 19 Sep 2022 17:08:08 +0800 Subject: [PATCH 121/793] SP3-108 Shifted definitions for functions in Event Manager from cpp to hpp --- .../src/ECS_Base/Managers/SHEntityManager.h | 2 +- SHADE_Engine/src/Events/SHEvent.h | 4 +- SHADE_Engine/src/Events/SHEventManager.cpp | 101 ------------------ .../{SHEventManager.h => SHEventManager.hpp} | 97 +++++++++++------ 4 files changed, 67 insertions(+), 137 deletions(-) delete mode 100644 SHADE_Engine/src/Events/SHEventManager.cpp rename SHADE_Engine/src/Events/{SHEventManager.h => SHEventManager.hpp} (78%) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index a9560fa3..193fb17d 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -22,7 +22,7 @@ #include "../SHECSMacros.h" #include "ECS_Base/Events/SHEntityCreationEvent.h" #include "ECS_Base/Events/SHEntityDestroyedEvent.h" -#include "Events/SHEventManager.h" +#include "Events/SHEventManager.hpp" #include "SH_API.h" namespace SHADE diff --git a/SHADE_Engine/src/Events/SHEvent.h b/SHADE_Engine/src/Events/SHEvent.h index 217609d3..6d246f3d 100644 --- a/SHADE_Engine/src/Events/SHEvent.h +++ b/SHADE_Engine/src/Events/SHEvent.h @@ -22,11 +22,11 @@ namespace SHADE template struct SHEventSpec : SHEvent { - SHEventSpec(SHEventIdentifier t, SHEventHandle e, T* dp) + SHEventSpec(SHEventIdentifier t, SHEventHandle e, std::shared_ptr dp) :SHEvent{ t, e }, data{ dp } {} std::shared_ptr data; }; - using SHEventPtr = std::shared_ptr; + using SHEventPtr = std::shared_ptr; } diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp deleted file mode 100644 index 4372cf6d..00000000 --- a/SHADE_Engine/src/Events/SHEventManager.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/****************************************************************************** - * \file SHEventManager.cpp - * \author Loh Xiao Qi - * \brief Function Implmentations for SHEventManager - * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction - * or disclosure of this file or its contents without the prior - * written consent of Digipen Institute of Technology is prohibited - ******************************************************************************/ -#include "SHpch.h" -#include "SHEventManager.h" - -namespace SHADE -{ - std::unordered_map SHEventManager::packageReceiverRegistry; - - SHEventHandle SHEventManager::handleCounter{ 0 }; - - /**************************************************************************** - * \param ListenerConstPtr - Const pointer to listener that sent event. - * \param EventType - Templated type for every type of event - - * \brief Receives event from the listeners. - ****************************************************************************/ - void SHEventManager::CatchEvent(SHEventPtr event) - { - - // Do something with the event - - Broadcast(event); - } - - /**************************************************************************** - * \param ResponseFunction - function pointer from receiver to be passed - * into event manager to be called when events are broadcasted. - * \param SHEventIdentifier - package type that corresponding subscriber is - * subscribing to. - - * \brief Links a function pointer from a subscriber to a particular - * package type - ****************************************************************************/ - void SHEventManager::SubscribeTo(SHEventIdentifier pkgType, ReceiverPtr receiver) - { - RegisterReceiverToType(pkgType, receiver); - } - - template - void SHEventManager::BroadcastEvent(T data, SHEventIdentifier eventType) - { - std::shared_ptr data = std::make_shared(data); - - CatchEvent( - reinterpret_cast - ( - std::make_shared>(eventType, handleCounter++, data) - ) - ); - } - - /**************************************************************************** - * \param ReceiverPtr - Pointer to receiver - * \param ListenerConstPtr - Const pointer to listener that receiver is - * subscribing to. - - * \brief Registers receiver as a subscriber to listener in the registry. - ****************************************************************************/ - void SHEventManager::RegisterReceiverToType( - SHEventIdentifier pkgType, ReceiverPtr receiver) - { - if (packageReceiverRegistry.contains(pkgType)) - { - packageReceiverRegistry[pkgType].emplace_back(receiver); - } - else - { - packageReceiverRegistry.emplace(pkgType, std::vector{ receiver }); - } - } - - /**************************************************************************** - * \param ListenerConstPtr - Const pointer to listener that sent event. - * \param EventType - Event data - - * \brief Broadcast event to all receivers that are subscribed to this - * listener. - ****************************************************************************/ - void SHEventManager::Broadcast(SHEventPtr event) - { - ResponseVec& receivers{ packageReceiverRegistry[event->type] }; - for (auto& receiver : receivers) - { - receiver->Receive(event); - } - - //auto& funcs{ ackageReceiverRegistry[event.GetType()] }; - //for (auto func : funcs) - //{ - // func(event.GetData()); - //} - } -} diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.hpp similarity index 78% rename from SHADE_Engine/src/Events/SHEventManager.h rename to SHADE_Engine/src/Events/SHEventManager.hpp index b9ea370c..f511518a 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * \file SHEventManager.h + * \file SHEventManager.hpp * \author Loh Xiao Qi * \brief Class declaration for event manager. * @@ -9,10 +9,9 @@ ******************************************************************************/ #pragma once +#include "SHpch.h" #include "SHEvent.h" #include "SHEventReceiver.h" -#include -#include /****************************************************************************** INSTRUCTIONS FOR USE: @@ -28,7 +27,7 @@ overload the assignment operator accordingly. It is fine to send a single object of a basic type such as int/float. - Headers required: SHEventManager.h + Headers required: SHEventManager.hpp On Receiver side: 1. Create a function with the signature: @@ -54,7 +53,7 @@ 4. Inside the new ptr should be a shared pointer of const CustomClass type. - Headers required: SHEventManager.h, SHEventReceiver.h + Headers required: SHEventManager.hpp, SHEventReceiver.h If you have any questions/suggestions for improvement lmk. ******************************************************************************/ @@ -70,6 +69,48 @@ namespace SHADE class SHEventManager { + private: + + // Registry for broadcasters and subscribers + inline static std::unordered_map packageReceiverRegistry; + + inline static SHEventHandle handleCounter {0}; + + /**************************************************************************** + * \param ListenerConstPtr - Const pointer to listener that sent event. + * \param EventType - Event data + + * \brief Broadcast event to all receivers that are subscribed to this + * listener. + ****************************************************************************/ + static void Broadcast(SHEventPtr event) + { + ResponseVec& receivers{ packageReceiverRegistry[event->type] }; + for (auto& receiver : receivers) + { + receiver->Receive(event); + } + } + + /**************************************************************************** + * \param ReceiverPtr - Pointer to receiver + * \param ListenerConstPtr - Const pointer to listener that receiver is + * subscribing to. + + * \brief Registers receiver as a subscriber to listener in the registry. + ****************************************************************************/ + static void RegisterReceiverToType(SHEventIdentifier pkgType, ReceiverPtr receiver) + { + if (packageReceiverRegistry.find(pkgType) == packageReceiverRegistry.end()) + { + packageReceiverRegistry.emplace(pkgType, std::vector{ receiver }); + } + else + { + packageReceiverRegistry[pkgType].emplace_back(receiver); + } + } + public: /**************************************************************************** @@ -78,7 +119,13 @@ namespace SHADE * \brief Receives event from the listeners. ****************************************************************************/ - static void CatchEvent(SHEventPtr); + static void CatchEvent(SHEventPtr event) + { + + // Do something with the event + + Broadcast(event); + } /**************************************************************************** * \param ResponseFunction - function pointer from receiver to be passed @@ -89,36 +136,20 @@ namespace SHADE * \brief Links a function pointer from a subscriber to a particular * package type ****************************************************************************/ - static void SubscribeTo(SHEventIdentifier, ReceiverPtr); + static void SubscribeTo(SHEventIdentifier pkgType, ReceiverPtr receiver) + { + RegisterReceiverToType(pkgType, receiver); + } template - static void BroadcastEvent(T data, SHEventIdentifier eventType); - - private: - - // Registry for broadcasters and subscribers - static std::unordered_map packageReceiverRegistry; - - static SHEventHandle handleCounter; - - /**************************************************************************** - * \param ListenerConstPtr - Const pointer to listener that sent event. - * \param EventType - Event data - - * \brief Broadcast event to all receivers that are subscribed to this - * listener. - ****************************************************************************/ - static void Broadcast(SHEventPtr event); - - /**************************************************************************** - * \param ReceiverPtr - Pointer to receiver - * \param ListenerConstPtr - Const pointer to listener that receiver is - * subscribing to. - - * \brief Registers receiver as a subscriber to listener in the registry. - ****************************************************************************/ - static void RegisterReceiverToType(SHEventIdentifier, ReceiverPtr); + static void BroadcastEvent(T data, SHEventIdentifier eventType) + { + std::shared_ptr ptr = std::make_shared(data); + CatchEvent( + std::make_shared>(eventType, handleCounter++, ptr) + ); + } }; } From ceb96938fbc4b76ff1787422d8e6aeb72a880c3c Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 19 Sep 2022 17:28:59 +0800 Subject: [PATCH 122/793] Added SHAPI to Scene graph --- SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h | 2 +- SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp | 6 +++--- SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h | 2 +- SHADE_Engine/src/Scene/SHSceneGraph.h | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h index cdb62438..889c46ea 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.h @@ -40,7 +40,7 @@ namespace SHADE std::string const GetName() const noexcept; SHRoutineStats const& GetStats()const noexcept; - virtual void Execute(double dt) noexcept {}; + virtual void Execute(double dt) noexcept { (void)dt; }; }; diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp index c9d8477b..050d0c2e 100644 --- a/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp @@ -30,9 +30,9 @@ namespace SHADE SHLOG_INFO("Test for add and remove component") EntityID id1 = SHEntityManager::CreateEntity(); - EntityID id2 = SHEntityManager::CreateEntity(); - EntityID id3 = SHEntityManager::CreateEntity(); - + SHEntityManager::CreateEntity(); + SHEntityManager::CreateEntity(); + SHComponentManager::AddComponent(id1); } diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h index 7231b323..12da5e37 100644 --- a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h @@ -30,7 +30,7 @@ namespace SHADE virtual void Execute(double dt) noexcept { - + (void)dt; std::cout << GetName() << " System Version: " << GetSystem()->GetSystemVersion() << std::endl; } }; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 20830065..b569bb78 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -14,6 +14,7 @@ // Project Headers #include "ECS_Base/Entity/SHEntity.h" +#include "SH_API.h" namespace SHADE { @@ -21,7 +22,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHSceneNode + class SH_API SHSceneNode { public: /*---------------------------------------------------------------------------------*/ @@ -75,7 +76,7 @@ namespace SHADE std::vector children; }; - class SHSceneGraph + class SH_API SHSceneGraph { public: /*---------------------------------------------------------------------------------*/ From 4023b9d1365d1bfd149ac1a17d4346a78e7aa397 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 19 Sep 2022 18:37:57 +0800 Subject: [PATCH 123/793] Added tests for rendering and fixed bugs with Batching system --- .../src/Application/SBApplication.cpp | 15 +++++++- .../ECS_Base/Components/SHComponentGroup.h | 4 ++- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 35 +++++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 26 ++++++++++++-- .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +++ .../MiddleEnd/Interface/SHRenderable.cpp | 10 +++++- .../MiddleEnd/Interface/SHRenderable.h | 10 ++++-- .../Graphics/RenderGraph/SHRenderGraph.cpp | 20 ++++++++++- .../src/Graphics/RenderGraph/SHRenderGraph.h | 15 +++++--- SHADE_Engine/src/Math/SHMatrix.h | 3 +- 10 files changed, 112 insertions(+), 30 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 5797771f..c804bf5e 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -19,6 +19,8 @@ #include "Scripting/SHScriptEngine.h" #include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" namespace Sandbox { @@ -42,6 +44,7 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHComponentManager::CreateComponentSparseSet(); graphicsSystem->SetWindow(&window); @@ -59,8 +62,18 @@ namespace Sandbox SHADE::SHScriptEngine::Init(); // Create temp meshes - SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); + const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); graphicsSystem->BuildMeshBuffers(); + + // Create Materials + auto matInst = graphicsSystem->AddMaterialInstance(); + + // Create entity and add mesh + auto entity = SHADE::SHEntityManager::CreateEntity(); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); + renderable.Mesh = CUBE_MESH; + renderable.SetMaterial(matInst); + renderable.TransformMatrix.Scale(2.0f, 2.0f, 2.0f); } void SBApplication::Update(void) diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h index 2b20ec13..a1b13ea1 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponentGroup.h @@ -22,6 +22,8 @@ #include #include +#include "SH_API.h" + namespace SHADE { enum class OWNERSHIP_TYPE @@ -34,7 +36,7 @@ namespace SHADE //template - class SHComponentGroup + class SH_API SHComponentGroup { public: diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 036e97c7..dd5a8b96 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -113,14 +113,19 @@ namespace SHADE SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, vk::ShaderStageFlagBits::eFragment ); - const Byte SINGLE_MAT_PROPS_SIZE = SHADER_INFO->GetBytesRequired(); - const Byte MATPROPS_TOTAL_BYTES = drawData.size() * SINGLE_MAT_PROPS_SIZE; - if (matPropsDataSize < MATPROPS_TOTAL_BYTES) + const bool EMPTY_MAT_PROPS = !SHADER_INFO; + Byte singleMatPropSize = 0; + Byte matPropTotalBytes = 0; + if (!EMPTY_MAT_PROPS) { - matPropsData.reset(new char[MATPROPS_TOTAL_BYTES]); - matPropsDataSize = MATPROPS_TOTAL_BYTES; + singleMatPropSize = SHADER_INFO->GetBytesRequired(); + matPropTotalBytes = drawData.size() * singleMatPropSize; + if (matPropsDataSize < matPropTotalBytes) + { + matPropsData.reset(new char[matPropTotalBytes]); + matPropsDataSize = matPropTotalBytes; + } } - const bool EMPTY_MAT_PROPS = MATPROPS_TOTAL_BYTES <= 0; // Build Sub Batches uint32_t nextInstanceIndex = 0; @@ -129,13 +134,13 @@ namespace SHADE { // Create command drawData.emplace_back(vk::DrawIndexedIndirectCommand - { - .indexCount = subBatch.Mesh->IndexCount, - .instanceCount = static_cast(subBatch.Renderables.size()), - .firstIndex = subBatch.Mesh->FirstIndex, - .vertexOffset = subBatch.Mesh->FirstVertex, - .firstInstance = nextInstanceIndex - }); + { + .indexCount = subBatch.Mesh->IndexCount, + .instanceCount = static_cast(subBatch.Renderables.size()), + .firstIndex = subBatch.Mesh->FirstIndex, + .vertexOffset = subBatch.Mesh->FirstVertex, + .firstInstance = nextInstanceIndex + }); // Fill in buffers (CPU) for (const SHRenderable* renderable : subBatch.Renderables) @@ -146,7 +151,7 @@ namespace SHADE if (!EMPTY_MAT_PROPS) { renderable->GetMaterial()->ExportProperties(propsCurrPtr); - propsCurrPtr += SINGLE_MAT_PROPS_SIZE; + propsCurrPtr += singleMatPropSize; } } } @@ -170,7 +175,7 @@ namespace SHADE // - Material Properties Buffer SHVkUtil::EnsureBufferAndCopyData ( - device, cmdBuffer, matPropsBuffer, matPropsData.get(), static_cast(MATPROPS_TOTAL_BYTES), + device, cmdBuffer, matPropsBuffer, matPropsData.get(), static_cast(matPropTotalBytes), BuffUsage::eStorageBuffer ); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 579ba9a6..018c3472 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -174,7 +174,7 @@ namespace SHADE //triVS->Reflect(); //triFS->Reflect(); - AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); + defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); } /***************************************************************************/ @@ -262,6 +262,14 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::BeginRender() { + // Finalise all batches + for (auto vp : viewports) + for (auto renderer : vp->GetRenderers()) + { + renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame()); + } + + // Resize auto windowDims = window->GetWindowSize(); if (renderContext.GetResizeAndReset()) { @@ -376,6 +384,11 @@ namespace SHADE return resourceManager.Create(material); } + SHADE::Handle SHGraphicsSystem::AddMaterialInstance() + { + return AddMaterialInstance(defaultMaterial); + } + void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) { resourceManager.Free(materialInstance); @@ -500,12 +513,19 @@ namespace SHADE continue; // Remove from old material's SuperBatch - Handle oldSuperBatch = renderable.GetPrevMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); - oldSuperBatch->Remove(&renderable); + Handle prevMaterial = renderable.GetPrevMaterial(); + if (prevMaterial) + { + Handle oldSuperBatch = prevMaterial->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + oldSuperBatch->Remove(&renderable); + } // Add to new SuperBatch Handle newSuperBatch = renderable.GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); newSuperBatch->Add(&renderable); + + // Unset change flag + renderable.ResetChangedFlag(); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 9c608475..2475550b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -120,6 +120,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ Handle AddMaterial(Handle vertShader, Handle fragShader, Handle subpass); void RemoveMaterial(Handle material);; + Handle AddMaterialInstance(); Handle AddMaterialInstance(Handle material); void RemoveMaterialInstance(Handle materialInstance); @@ -249,6 +250,9 @@ namespace SHADE SHShaderSourceLibrary shaderSourceLibrary; SHShaderModuleLibrary shaderModuleLibrary; + // Temp Materials + Handle defaultMaterial; + /*-----------------------------------------------------------------------------*/ /* Private member functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 1ad82a80..984e753b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -61,7 +61,8 @@ namespace SHADE // Flag that material was changed materialChanged = true; - oldMaterial = sharedMaterial->GetBaseMaterial(); + if (sharedMaterial) + oldMaterial = sharedMaterial->GetBaseMaterial(); // Update the material sharedMaterial = materialInstance; @@ -86,4 +87,11 @@ namespace SHADE return material; } + + void SHRenderable::ResetChangedFlag() + { + materialChanged = false; + oldMaterial = {}; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index eda27925..0d48b5cb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. //#include "SHTransform.h" #include "ECS_Base/Components/SHComponent.h" #include "Math/SHMatrix.h" +#include "SH_API.h" namespace SHADE { @@ -34,7 +35,7 @@ namespace SHADE Represents an object that should be rendered. */ /*************************************************************************************/ - class SHRenderable final : public SHComponent + class SH_API SHRenderable final : public SHComponent { public: /*-------------------------------------------------------------------------------*/ @@ -54,7 +55,12 @@ namespace SHADE /* Getter Functions */ /*-------------------------------------------------------------------------------*/ bool WasMaterialChanged() const noexcept { return materialChanged; } - Handle GetPrevMaterial() const noexcept { return oldMaterial; } + Handle GetPrevMaterial() const noexcept { return oldMaterial; } + + /*-------------------------------------------------------------------------------*/ + /* Batcher Dispatcher Functions */ + /*-------------------------------------------------------------------------------*/ + void ResetChangedFlag(); // TODO: Lock it so that only SHBatcherDispatcher can access this /*-------------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 22ba9695..c1f11b40 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -563,7 +563,12 @@ namespace SHADE // Add subpass to container and create mapping for it subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); - return subpasses.at(subpassIndexing[subpassName]); + Handle subpass = subpasses.back(); + + // Register the SuperBatch + batcher.RegisterSuperBatch(subpass->GetSuperBatch()); + + return subpass; } void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept @@ -606,6 +611,11 @@ namespace SHADE return pipeline; } + void SHRenderGraphNode::FinaliseBatch(Handle commandBuffer) + { + batcher.FinaliseBatches(logicalDeviceHdl, commandBuffer); + } + /***************************************************************************/ /*! @@ -1095,6 +1105,14 @@ namespace SHADE cmdBuffer->EndRecording(); } + void SHRenderGraph::FinaliseBatch(uint32_t frameIndex) + { + for (auto& node : nodes) + { + node->FinaliseBatch(commandBuffers[frameIndex]); + } + } + Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept { if (nodeIndexing.contains(nodeName)) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 48701d87..3346fd17 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -9,6 +9,7 @@ #include #include +#include "../MiddleEnd/Batching/SHBatcher.h" namespace SHADE { @@ -205,6 +206,7 @@ namespace SHADE //! Whether or not the node has been configured already or not bool configured; + SHBatcher batcher; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ @@ -224,8 +226,10 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle AddSubpass (std::string subpassName) noexcept; + // TODO: RemoveSubpass() void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; + void FinaliseBatch(Handle commandBuffer); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -288,11 +292,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; - void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); - Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; - void Generate (void) noexcept; - void Execute (uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; + void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); + Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; + void Generate (void) noexcept; + void Execute (uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; + void FinaliseBatch(uint32_t frameIndex); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Math/SHMatrix.h b/SHADE_Engine/src/Math/SHMatrix.h index 2aab05ab..96aefec3 100644 --- a/SHADE_Engine/src/Math/SHMatrix.h +++ b/SHADE_Engine/src/Math/SHMatrix.h @@ -14,6 +14,7 @@ #include #include "Vector/SHVec4.h" +#include "SH_API.h" namespace SHADE { @@ -32,7 +33,7 @@ namespace SHADE /** * @brief Interface for a Column-Major Row Vector 4x4 Matrix. */ - class SHMatrix : public DirectX::XMFLOAT4X4 + class SH_API SHMatrix : public DirectX::XMFLOAT4X4 { public: /*---------------------------------------------------------------------------------*/ From c6e1ba7f152202af58336975f706d9f0a6c44702 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 19 Sep 2022 18:40:27 +0800 Subject: [PATCH 124/793] Added tinyddsloader to dependencies --- Dependencies.bat | 11 ++++++++++- Dependencies.lua | 1 + SHADE_Engine/SHADE_Engine.vcxproj | 4 ++-- SHADE_Engine/premake5.lua | 1 + SHADE_Engine/src/Assets/SHAssetManager.h | 1 + 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Dependencies.bat b/Dependencies.bat index 0b1e1a54..7c1d159d 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -18,10 +18,11 @@ echo "K - RTTR" echo "L - yamlcpp" echo "M - SDL" echo "N - dotnet" +echo "O - tinyddsloader" echo --------------------------------------------------- echo. -choice /C ABCDEFGHIJKLMN /T 10 /D A +choice /C ABCDEFGHIJKLMNO /T 10 /D A set _e=%ERRORLEVEL% if %_e%==1 goto VMA @@ -38,6 +39,7 @@ if %_e%==11 goto RTTR if %_e%==12 goto yamlcpp if %_e%==13 goto SDL if %_e%==14 goto dotnet +if %_e%==15 goto tinyddsloader :VMA echo -----------------------VMA---------------------------- @@ -136,6 +138,13 @@ robocopy "Dependencies/dotnet/tmp/shared/Microsoft.NETCore.App/6.0.8/" "Dependen rmdir "Dependencies/dotnet/tmp/" /s /q del "Dependencies/dotnet/dotnet.zip" powershell -Command "& {Remove-Item "Dependencies/dotnet/dotnet.zip"}" +if %_e%==14 (goto :done) else (goto :tinyddsloader) + + +:tinyddsloader +echo --------------------tinyddsloader------------------------- +rmdir "Dependencies/tinyddsloader" /S /Q +git clone https://github.com/benikabocha/tinyddsloader.git "Dependencies/tinyddsloader" :done echo DONE! diff --git a/Dependencies.lua b/Dependencies.lua index 9877a70e..5ef15cd6 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -14,3 +14,4 @@ IncludeDir["reactphysics3d"] = "%{wks.location}/Dependencies/reactphysics3d" IncludeDir["SDL"] = "%{wks.location}/Dependencies/SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" IncludeDir["dotnet"] = "%{wks.location}/Dependencies/dotnet" +IncludeDir["tinyddsloader"] = "%{wks.location}/Dependencies/tinyddsloader" diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 2313d425..d1739037 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -46,7 +46,7 @@ ..\bin_int\Debug\SHADE_Engine\ SHADE_Engine .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) + ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;..\Dependencies\tinyddsloader;$(IncludePath) false @@ -54,7 +54,7 @@ ..\bin_int\Release\SHADE_Engine\ SHADE_Engine .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) + ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;..\Dependencies\tinyddsloader;$(IncludePath) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 74f19f96..f4ef1218 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -41,6 +41,7 @@ project "SHADE_Engine" "%{IncludeDir.VULKAN}/include", "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", "%{IncludeDir.dotnet}/include", + "%{IncludeDir.tinyddsloader}" } externalwarnings "Off" diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 217c64ec..8db008c9 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -15,6 +15,7 @@ #include #include #include "SHAssetMeta.h" +#include "tinyddsloader.h" #include From 9e09896984db6ae3f13a44b19a9239363fe2801d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 19 Sep 2022 20:15:39 +0800 Subject: [PATCH 125/793] Fixed SHVkBuffer move and reworked batching buffers to be host visible --- .../src/Graphics/Buffers/SHVkBuffer.cpp | 4 +-- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 33 +++++++++++++------ .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 2 +- .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 4 +-- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 2 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 4 +-- .../MiddleEnd/Batching/SHSuperBatch.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 ++--- .../Graphics/RenderGraph/SHRenderGraph.cpp | 10 +++--- .../src/Graphics/RenderGraph/SHRenderGraph.h | 4 +-- SHADE_Engine/src/Graphics/SHVkUtil.cpp | 23 +++++++++++++ SHADE_Engine/src/Graphics/SHVkUtil.h | 32 ++++++++++++++++-- 12 files changed, 95 insertions(+), 33 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 841813e4..4bfc1e4b 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -301,7 +301,7 @@ namespace SHADE : vkBuffer{std::move (rhs.vkBuffer)} , stagingBuffer{ std::move (rhs.stagingBuffer)} , sizeStored{ std::move (rhs.sizeStored) } - , mappedPtr{ nullptr } + , mappedPtr{ std::move(rhs.mappedPtr) } , alloc{ std::move (rhs.alloc) } , randomAccessOptimized{ rhs.randomAccessOptimized } , boundToCoherent{ rhs.boundToCoherent} @@ -322,7 +322,7 @@ namespace SHADE vkBuffer = std::move(rhs.vkBuffer); stagingBuffer = std::move(rhs.stagingBuffer); sizeStored = std::move(rhs.sizeStored); - mappedPtr = nullptr; + mappedPtr = std::move(rhs.mappedPtr); alloc = std::move(rhs.alloc); randomAccessOptimized = rhs.randomAccessOptimized; boundToCoherent = rhs.boundToCoherent; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index dd5a8b96..08ffa88e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -86,7 +86,7 @@ namespace SHADE matPropsBuffer.Free(); } - void SHBatch::Build(Handle device, Handle cmdBuffer) + void SHBatch::Build(Handle device) { // No need to build as there are no changes if (!isDirty) @@ -159,25 +159,37 @@ namespace SHADE // Send all buffered data to the GPU buffers using BuffUsage = vk::BufferUsageFlagBits; // - Draw Data + if (drawDataBuffer) + drawDataBuffer->Unmap(); const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); - SHVkUtil::EnsureBufferAndCopyData + SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, cmdBuffer, drawDataBuffer, drawData.data(), DRAW_DATA_BYTES, + device, drawDataBuffer, drawData.data(), DRAW_DATA_BYTES, BuffUsage::eIndirectBuffer ); + drawDataBuffer->Map(); // - Transform Buffer + if (transformDataBuffer) + transformDataBuffer->Unmap(); const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); - SHVkUtil::EnsureBufferAndCopyData + SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, cmdBuffer, transformDataBuffer, transformData.data(), TF_DATA_BYTES, + device, transformDataBuffer, transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); + transformDataBuffer->Map(); // - Material Properties Buffer - SHVkUtil::EnsureBufferAndCopyData - ( - device, cmdBuffer, matPropsBuffer, matPropsData.get(), static_cast(matPropTotalBytes), - BuffUsage::eStorageBuffer - ); + if (!EMPTY_MAT_PROPS) + { + if (matPropsBuffer) + matPropsBuffer->Unmap(); + SHVkUtil::EnsureBufferAndCopyHostVisibleData + ( + device, matPropsBuffer, matPropsData.get(), static_cast(matPropTotalBytes), + BuffUsage::eStorageBuffer + ); + matPropsBuffer->Map(); + } isDirty = false; } @@ -187,6 +199,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHBatch::Draw(Handle cmdBuffer) { + cmdBuffer->BindPipeline(pipeline); cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer, 0); cmdBuffer->DrawMultiIndirect(drawDataBuffer, static_cast(drawData.size())); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index 8bc32f8f..a5b808ff 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -71,7 +71,7 @@ namespace SHADE void Add(const SHRenderable* renderable); void Remove(const SHRenderable* renderable); void Clear(); - void Build(Handle device, Handle cmdBuffer); + void Build(Handle device); void Draw(Handle cmdBuffer); /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index a37bbe72..c92d9585 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -91,12 +91,12 @@ namespace SHADE (*superBatch)->Remove(renderable); } - void SHBatcher::FinaliseBatches(Handle device, Handle cmdBuffer) + void SHBatcher::FinaliseBatches(Handle device) { // Build SuperBatches for (auto& batch : superBatches) { - batch->Build(device, cmdBuffer); + batch->Build(device); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 60cc0c56..8206fcc0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -51,7 +51,7 @@ namespace SHADE void PrepareBatches(); void AddToBatch(SHRenderable const* renderable); void RemoveFromBatch(SHRenderable const* renderable); - void FinaliseBatches(Handle device, Handle cmdBuffer); + void FinaliseBatches(Handle device); void ClearBatches(); void RegisterSuperBatch(Handle superBatch); void DeregisterSuperBatch(Handle superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 4d05dec7..09d2a720 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -78,12 +78,12 @@ namespace SHADE batches.clear(); } - void SHSuperBatch::Build(Handle device, Handle cmdBuffer) noexcept + void SHSuperBatch::Build(Handle device) noexcept { // Build all batches for (auto& batch : batches) { - batch.Build(device, cmdBuffer); + batch.Build(device); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index f70fd6d3..b44dd349 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -55,7 +55,7 @@ namespace SHADE void Add(const SHRenderable* renderable) noexcept; void Remove(const SHRenderable* renderable) noexcept; void Clear() noexcept; - void Build(Handle device, Handle cmdBuffer) noexcept; + void Build(Handle device) noexcept; void Draw(Handle cmdBuffer) noexcept; /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 018c3472..9c9606b2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -152,10 +152,10 @@ namespace SHADE } // Create Debug Renderers - debugScreenRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); + /*debugScreenRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); debugScreenRenderer->SetCamera(screenCamera); debugWorldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); - debugWorldRenderer->SetCamera(worldCamera); + debugWorldRenderer->SetCamera(worldCamera);*/ // Add world renderer to default viewport worldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); @@ -227,7 +227,7 @@ namespace SHADE ( { rg->GetCommandBuffer(renderContext.GetCurrentFrame()) }, { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex]}, - { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex]}, + { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex ]}, {} ); @@ -266,7 +266,7 @@ namespace SHADE for (auto vp : viewports) for (auto renderer : vp->GetRenderers()) { - renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame()); + renderer->GetRenderGraph()->FinaliseBatch(); } // Resize diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index c1f11b40..d5fd1d4c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -611,9 +611,9 @@ namespace SHADE return pipeline; } - void SHRenderGraphNode::FinaliseBatch(Handle commandBuffer) + void SHRenderGraphNode::FinaliseBatch() { - batcher.FinaliseBatches(logicalDeviceHdl, commandBuffer); + batcher.FinaliseBatches(logicalDeviceHdl); } /***************************************************************************/ @@ -1100,16 +1100,16 @@ namespace SHADE } for (auto& node : nodes) - node->Execute(commandBuffers[frameIndex], frameIndex); + node->Execute(cmdBuffer, frameIndex); cmdBuffer->EndRecording(); } - void SHRenderGraph::FinaliseBatch(uint32_t frameIndex) + void SHRenderGraph::FinaliseBatch() { for (auto& node : nodes) { - node->FinaliseBatch(commandBuffers[frameIndex]); + node->FinaliseBatch(); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 3346fd17..baf38c5a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -229,7 +229,7 @@ namespace SHADE // TODO: RemoveSubpass() void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; - void FinaliseBatch(Handle commandBuffer); + void FinaliseBatch(); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -297,7 +297,7 @@ namespace SHADE Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; void Execute (uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; - void FinaliseBatch(uint32_t frameIndex); + void FinaliseBatch(); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index 0c6af0d9..c570caf2 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -48,4 +48,27 @@ namespace SHADE // Order transfers bufferHandle->TransferToDeviceResource(cmdBuffer); } + + void SHVkUtil::EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) + { + if (bufferHandle) + { + // Resize + bufferHandle->ResizeReplace(size, src, size); // TODO: Set to host visible method? + } + else + { + // Create new + using BuffUsage = vk::BufferUsageFlagBits; + bufferHandle = device->CreateBuffer + ( + size, + src, + size, + usage, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + ); + } + } } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index fdbb9dee..46ebf096 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -26,9 +26,9 @@ namespace SHADE /*! \brief - Ensures that the specified bufferHandle contains a buffer that fits the specified - size and creates it if it does not exist. This follows by issuing a transfer - command into the created buffer. + Ensures that the specified bufferHandle contains a non-host visible buffer that + fits the specified size and creates it if it does not exist. This follows by + issuing a transfer command into the created buffer. All created buffers will use VMA_MEMORY_USAGE_AUTO and VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. @@ -50,6 +50,32 @@ namespace SHADE */ /***********************************************************************************/ static void EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); + /***********************************************************************************/ + /*! + + \brief + Ensures that the specified bufferHandle contains a host visible buffer that fits + the specified size and creates it if it does not exist. This follows by copying + the data from the specified source to the buffer. + + All created buffers will use VMA_MEMORY_USAGE_AUTO and + VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT. + + \param device + Device used to create the SHVkBuffer. + \param bufferHandle + Reference to the handle that holds any existing buffer or will be used to hold the + created buffer. + \param src + Data to copy from. + \param size + Size of data to copy. + \param usage + Usage flags for the buffer. + + */ + /***********************************************************************************/ + static void EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); }; } From 8ad0eee032563d6366d285f731a8edc910aef5bb Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 19 Sep 2022 21:31:23 +0800 Subject: [PATCH 126/793] Fixed vertex data buffer being incorrect --- .../src/Application/SBApplication.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 14 +++++++------- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 4 ++-- .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 6 ++++++ .../src/Graphics/Pipeline/SHPipelineState.cpp | 2 ++ .../src/Graphics/Pipeline/SHVkPipeline.cpp | 2 +- TempShaderFolder/TestCubeFs.glsl | 2 +- TempShaderFolder/TestCubeFs.spv | Bin 632 -> 592 bytes 8 files changed, 20 insertions(+), 12 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index c804bf5e..805e8148 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -73,7 +73,7 @@ namespace Sandbox auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); - renderable.TransformMatrix.Scale(2.0f, 2.0f, 2.0f); + renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); } void SBApplication::Update(void) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 9c9606b2..ea18b817 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -121,11 +121,11 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain, &defaultVertexInputState, &globalDescSetLayouts); - worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Composite", "Position", "Normals", "Present" }, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Composite", "Position", "Normals",*/ "Present" }, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); @@ -485,9 +485,9 @@ namespace SHADE { defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // positions at binding 0 defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_2D)}); // UVs at binding 1 - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 - defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) + //defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 + //defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 + //defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) } void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index 36fa0b26..2080265b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -193,7 +193,7 @@ namespace SHADE Handle SHPrimitiveGenerator::Cube(SHMeshLibrary& meshLibrary) noexcept { - SHMeshData meshData = Cube(); + static SHMeshData meshData = Cube(); return meshLibrary.AddMesh ( meshData.VertexPositions.size(), @@ -208,7 +208,7 @@ namespace SHADE Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept { - SHMeshData meshData = Cube(); + static SHMeshData meshData = Cube(); return gfxSystem.AddMesh ( meshData.VertexPositions.size(), diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index e338a9d8..dd059a29 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -79,5 +79,11 @@ namespace SHADE */ /***********************************************************************************/ [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + [[nodiscard]] static SHMeshData genCubeData() noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp index e7c245db..f8934bf6 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp @@ -204,6 +204,8 @@ namespace SHADE // Offset is 0 at first (for first element) uint32_t offset = 0; + binding.binding = static_cast(bindings.size() - 1); + // for every attribute passed in for (auto const& attrib : inAttribs) { diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index 6a20ab55..1c47c21a 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -206,7 +206,7 @@ namespace SHADE */ /***************************************************************************/ SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass, SH_PIPELINE_TYPE type) noexcept - : pipelineState{ } // copy the pipeline state + : pipelineState{ } , pipelineType {type} , vkPipeline {VK_NULL_HANDLE} , logicalDeviceHdl{ inLogicalDeviceHdl } diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index dc069eda..7d49eda4 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -68,5 +68,5 @@ void main() //outColor.a = diffuseColor.a; - outColor = In.vertColor; + outColor = vec4 (1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv index f0dbc4493589074291db908844fbb1e8c2e3fb59..669dc8b8a5cbe234e67679632cc1f1c6cc42a491 100644 GIT binary patch delta 185 zcmeyta)E`HnMs+Qfq{{Mi-DJceKvc2Qo@C@=eZVj1JXiU;(OR0Ga{<4fZ+=>_EuCzzxJ8F=Q+U)C)2bB(DI}#|xwx gffyua4dwHJ#3m~;$&1(lRdWJ)Ad~(A)mZ>B0Eo*FbpQYW delta 225 zcmcb>@`Ht!nMs+Qfq{{Mi-DIxXd Date: Tue, 20 Sep 2022 00:03:29 +0800 Subject: [PATCH 127/793] Fixed SHSceneManager not SH_API-ed --- SHADE_Engine/src/Scene/SHSceneManager.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index bdd8f596..9682e4c2 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -16,11 +16,12 @@ #include "ECS_Base/General/SHFamily.h" #include "SHScene.h" #include +#include "SH_API.h" namespace SHADE { - class SHSceneManager + class SH_API SHSceneManager { private: //boolean to check if the scene has been changed From 34685e6726fbdd283b4a61e23d0bbd0af16f9e7d Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 00:48:27 +0800 Subject: [PATCH 128/793] Regenerated project files --- SHADE_Application/SHADE_Application.vcxproj | 29 ++-- SHADE_Engine/SHADE_Engine.vcxproj | 109 +++++++++---- SHADE_Engine/SHADE_Engine.vcxproj.filters | 168 ++++++++++++++++++-- 3 files changed, 255 insertions(+), 51 deletions(-) diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index 9a566252..0a7457a0 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -42,25 +42,28 @@ true - bin\Debug_x86_64\SHADE_Application\ - bin-int\Debug_x86_64\SHADE_Application\ + ..\bin\Debug\ + ..\bin_int\Debug\SHADE_Application\ SHADE_Application .exe + ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;$(IncludePath) false - bin\Release_x86_64\SHADE_Application\ - bin-int\Release_x86_64\SHADE_Application\ + ..\bin\Release\ + ..\bin_int\Release\SHADE_Application\ SHADE_Application .exe + ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;$(IncludePath) Use SBpch.h Level4 - _DEBUG;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + 4251;%(DisableSpecificWarnings) + NOMINMAX;_DEBUG;%(PreprocessorDefinitions) + ..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -71,6 +74,8 @@ Windows true + SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup @@ -79,8 +84,9 @@ Use SBpch.h Level4 - _RELEASE;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories) + 4251;%(DisableSpecificWarnings) + NOMINMAX;_RELEASE;%(PreprocessorDefinitions) + ..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) Full true true @@ -88,12 +94,14 @@ true MultiThreadedDLL true - stdcpplatest + stdcpp20 Windows true true + SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup @@ -114,6 +122,9 @@ {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} + + {16DB1400-829B-9036-4BD6-D9B3B755D512} + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index e69a8f9c..03e1e0b3 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -19,13 +19,13 @@ - StaticLibrary + DynamicLibrary true Unicode v142 - StaticLibrary + DynamicLibrary false Unicode v142 @@ -41,24 +41,29 @@ - bin\Debug_x86_64\SHADE_Engine\ - bin-int\Debug_x86_64\SHADE_Engine\ + true + ..\bin\Debug\ + ..\bin_int\Debug\SHADE_Engine\ SHADE_Engine - .lib + .dll + ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) - bin\Release_x86_64\SHADE_Engine\ - bin-int\Release_x86_64\SHADE_Engine\ + false + ..\bin\Release\ + ..\bin_int\Release\SHADE_Engine\ SHADE_Engine - .lib + .dll + ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) Use SHpch.h Level4 - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_DEBUG;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + 4251;%(DisableSpecificWarnings) + _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) + src;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -69,19 +74,24 @@ Windows true + vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) + ..\bin\Debug\SHADE_Engine.lib - - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mtd.lib;ktxd.lib;librttr_core_d.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" +xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" +xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + Use SHpch.h Level4 - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;_RELEASE;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + 4251;%(DisableSpecificWarnings) + _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) + src;%(AdditionalIncludeDirectories) Full true true @@ -89,33 +99,51 @@ true MultiThreadedDLL true - stdcpplatest + stdcpp20 Windows true true + vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) + ..\bin\Release\SHADE_Engine.lib - - vulkan-1.lib;shaderc_shared.lib;assimp-vc142-mt.lib;ktx.lib;librttr_core.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\ktx\lib\Debug;..\Dependencies\ktx\lib\Release;%(AdditionalLibraryDirectories) - + + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" +xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" +xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + + + + + + + - - + + - + + + + + + + + + @@ -126,6 +154,7 @@ + @@ -136,6 +165,7 @@ + @@ -185,25 +215,41 @@ + + + + + + + + + + + + - - - + + + + + + + @@ -213,6 +259,7 @@ + @@ -222,6 +269,7 @@ + @@ -266,9 +314,13 @@ + + + + @@ -286,9 +338,6 @@ {C0FF640D-2C14-8DBE-F595-301E616989EF} - - {8EAD431C-7A4F-6EF2-630A-82464F4BF542} - diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 747538f2..2311e8dd 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -1,6 +1,9 @@ + + {8EEA3EAC-7A8C-6982-6347-7DD64F88F0D2} + {1AB26817-067F-C322-2F98-B1CA1BC4F8B0} @@ -10,15 +13,30 @@ {261D0942-92A8-7606-9BB9-F9FA07C4D206} + + {BEBC9142-2A48-FF06-3359-82FB9F635B07} + {07FEB307-F3F6-D259-1C29-B8DE0881B265} + + {37718753-A387-85E9-ECFE-100B58545671} + {EE037863-5A8F-E527-63A0-681CCFAA4128} + + {078AA1A3-F318-2B6D-9C37-3F6888A53B13} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} + + {3A8963B1-262B-8E87-0FE6-A1DBFB2615D8} + + + {80E7870B-ECF0-877C-756C-9E7CE174937C} + {8A8E2B37-7646-6D84-DF4D-46E0CB240875} @@ -100,6 +118,9 @@ {AFF4887C-9B2B-8A0D-4418-7010302E060F} + + {EAD6C33D-5697-3F74-1FD2-88F18B518450} + {F1B75745-5D6D-D03A-E661-CA115216C73E} @@ -112,11 +133,17 @@ {B3F7140E-1F0C-3DBF-E88D-E01E546139F0} + + {985A7358-04C5-27CF-4D03-D974B9AC0524} + {16CF2D0E-82E3-55BF-4B65-F91EB73852F0} + + Common + ECS_Base\Components @@ -126,6 +153,12 @@ ECS_Base\Entity + + ECS_Base\Events + + + ECS_Base\Events + ECS_Base\General @@ -141,24 +174,57 @@ ECS_Base\General + + ECS_Base\Managers + + + ECS_Base\Managers + + + ECS_Base\Managers + ECS_Base - + ECS_Base\System - + ECS_Base\System ECS_Base\System - + ECS_Base\System + + ECS_Base\UnitTesting + + + ECS_Base\UnitTesting + + + ECS_Base\UnitTesting + Engine + + Events + + + Events + + + Events + + + Events + + + FRC + Filesystem @@ -189,6 +255,9 @@ Graphics\Descriptors + + Graphics\Descriptors + Graphics\Descriptors @@ -219,6 +288,9 @@ Graphics\Images + + Graphics\Images + Graphics\Instance @@ -327,12 +399,21 @@ Graphics\Windowing\Surface + + Math\Geometry + + + Math\Geometry + Math Math + + Math + Math @@ -357,12 +438,23 @@ Resource + + Resource + Resource + + Resource + Resource + + Resource + + + Scene @@ -373,21 +465,39 @@ Scene + + Scripting + + + Scripting + + + Scripting + Tools Tools + + Tools + Tools + + Tools + + + Tools + Tools - - - + + Tools + @@ -399,18 +509,30 @@ ECS_Base\Entity - + + ECS_Base\Managers + + + ECS_Base\Managers + + + ECS_Base\Managers + + ECS_Base\System - + ECS_Base\System - - ECS_Base\System + + ECS_Base\UnitTesting Engine + + FRC + Filesystem @@ -438,6 +560,9 @@ Graphics\Descriptors + + Graphics\Descriptors + Graphics\Descriptors @@ -465,6 +590,9 @@ Graphics\Images + + Graphics\Images + Graphics\Instance @@ -552,6 +680,12 @@ Graphics\Windowing\Surface + + Math\Geometry + + + Math\Geometry + Math @@ -583,16 +717,26 @@ Scene + + Scripting + + + Scripting + Tools Tools + + Tools + Tools - - + + Tools + \ No newline at end of file From c0290b718593b2669768dfff55dce1c1563d3847 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 01:31:59 +0800 Subject: [PATCH 129/793] Added fixes to scene graph. Read description for details. 1. Scene graph creates a root on construction. EntityID is set to MaxEID. The root is not intended to be modified. 2. When adding a node, if the 2nd arg (parent) is omitted, the node will be a child of the root. --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 99 ++++++++++++++++++++----- SHADE_Engine/src/Scene/SHSceneGraph.h | 58 +++++++-------- 2 files changed, 109 insertions(+), 48 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 9fddf10e..c13b5cc7 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -76,7 +76,10 @@ namespace SHADE SHSceneGraph::SHSceneGraph() noexcept : root { nullptr } - {} + { + // The root is set to the maximum entity. It should not be interfaced with. + root = AllocateNode(MAX_EID); + } SHSceneGraph::~SHSceneGraph() noexcept { @@ -90,6 +93,8 @@ namespace SHADE for (auto* node : entityNodeMap | std::views::values) ReleaseNode(node); + delete root; + #ifdef _DEBUG SHLOG_INFO("Scene Graph Destroyed Successfully!") #endif @@ -99,23 +104,38 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ + EntityID SHSceneNode::GetEntityID() const noexcept + { + return entityID; + } + + SHSceneNode* SHSceneNode::GetParent() const noexcept + { + return parent; + } + + std::vector& SHSceneNode::GetChildren() noexcept + { + return children; + } + SHSceneNode* SHSceneNode::GetChild(EntityID childID) const noexcept { + //////////////////////////////////////// // Error handling + if (!SHEntityManager::IsValidEID(childID)) { - if (!SHEntityManager::IsValidEID(childID)) - { - SHLOG_ERROR("Child Entity {} is invalid! Unable to get child from Entity {}", childID, entityID) - return nullptr; - } - - if (children.empty()) - { - SHLOG_WARNING("Entity {} has no children!", entityID) - return nullptr; - } + SHLOG_ERROR("Child Entity {} is invalid! Unable to get child from Entity {}", childID, entityID) + return nullptr; } + if (children.empty()) + { + SHLOG_WARNING("Entity {} has no children!", entityID) + return nullptr; + } + //////////////////////////////////////// + // Find child const auto ENTITY_MATCH = [&](const SHSceneNode* node) { return node->GetEntityID() == childID; }; @@ -129,7 +149,7 @@ namespace SHADE return *CHILD_ITER; } - SHSceneNode* SHSceneGraph::GetRoot() const noexcept + const SHSceneNode* SHSceneGraph::GetRoot() const noexcept { if (root != nullptr) return root; @@ -140,6 +160,8 @@ namespace SHADE SHSceneNode* SHSceneGraph::GetNode(EntityID entityID) const noexcept { + //////////////////////////////////////// + // Error handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid! Unable to Get Scene node!", entityID) @@ -152,12 +174,15 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to Get Scene node!", entityID) return nullptr; } + //////////////////////////////////////// return NODE_ITER->second; } SHSceneNode* SHSceneGraph::GetParent(EntityID entityID) const noexcept { + //////////////////////////////////////// + // Error handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid! Unable to get Parent node!", entityID) @@ -170,13 +195,15 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to get Parent node!", entityID) return nullptr; } + //////////////////////////////////////// return NODE_ITER->second->GetParent(); } SHSceneNode* SHSceneGraph::GetChild(EntityID entityID, SHSceneNode* childNode) const noexcept { - // Error Handling + //////////////////////////////////////// + // Error handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) @@ -203,12 +230,15 @@ namespace SHADE SHLOG_WARNING("Entity {} is not a child of Entity {}!", childNode->GetEntityID(), entityID) return nullptr; } + //////////////////////////////////////// return *CHILD_ITER; } SHSceneNode* SHSceneGraph::GetChild(EntityID entityID, EntityID childEntityID) const noexcept { + //////////////////////////////////////// + // Error handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) @@ -221,14 +251,15 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) return nullptr; } + //////////////////////////////////////// return NODE_ITER->second->GetChild(childEntityID); } const std::vector& SHSceneGraph::GetChildren(EntityID entityID) const noexcept { - // TODO(Diren): Discuss with team best way to handle this - + //////////////////////////////////////// + // Error handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) @@ -241,6 +272,7 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) return root->GetChildren(); } + //////////////////////////////////////// return NODE_ITER->second->GetChildren(); } @@ -254,6 +286,7 @@ namespace SHADE if (parentNode == nullptr) SHLOG_WARNING("Removing Entity {}'s parent", entityID) + // Handle self assignment if (parentNode == parent) return; @@ -264,6 +297,8 @@ namespace SHADE void SHSceneGraph::SetParent(EntityID entityID, SHSceneNode* parent) const noexcept { + //////////////////////////////////////// + // Error Handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) @@ -276,12 +311,15 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) return; } + //////////////////////////////////////// NODE_ITER->second->SetParent(parent); } void SHSceneGraph::SetParent(EntityID entityID, EntityID parent) const noexcept { + //////////////////////////////////////// + // Error Handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid! Unable to set parent of an invalid entity!", entityID) @@ -307,6 +345,7 @@ namespace SHADE SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to parent to Entity {}", parent, entityID) return; } + //////////////////////////////////////// SHSceneNode* currentNode = NODE_ITER->second; currentNode->SetParent(PARENT_ITER->second); @@ -318,22 +357,32 @@ namespace SHADE void SHSceneNode::AddChild(SHSceneNode* newChild) noexcept { + //////////////////////////////////////// + // Error Handling if (newChild == nullptr) { SHLOG_WARNING("Attempting to add a non-existent child to an entity!") return; } + //////////////////////////////////////// + if (newChild->parent) + newChild->parent->RemoveChild(newChild); + + newChild->parent = this; children.emplace_back(newChild); } bool SHSceneNode::RemoveChild(EntityID childID) noexcept { + //////////////////////////////////////// + // Error Handling if (!SHEntityManager::IsValidEID(childID)) { SHLOG_ERROR("Entity {} is invalid!", childID) return false; } + //////////////////////////////////////// SHSceneNode* removedChild = nullptr; const auto ENTITY_MATCH = [&](SHSceneNode* node) @@ -348,18 +397,23 @@ namespace SHADE }; children.end() = std::remove_if(children.begin(), children.end(), ENTITY_MATCH); - removedChild->parent = nullptr; - return removedChild == nullptr; + if (removedChild) + removedChild->parent = nullptr; + + return removedChild != nullptr; } bool SHSceneNode::RemoveChild(SHSceneNode* childToRemove) noexcept { + //////////////////////////////////////// + // Error Handling if (childToRemove == nullptr) { SHLOG_WARNING("Attempting to remove non-existent child from Entity {}", entityID) return false; } + //////////////////////////////////////// children.end() = std::remove(children.begin(), children.end(), childToRemove); childToRemove->parent = nullptr; @@ -378,19 +432,26 @@ namespace SHADE SHSceneNode* SHSceneGraph::AddNode(EntityID entityID, SHSceneNode* parent) { + //////////////////////////////////////// + // Error Handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) return nullptr; } + //////////////////////////////////////// if (auto NODE_ITER = entityNodeMap.find(entityID); NODE_ITER != entityNodeMap.end()) { SHLOG_WARNING("Entity {} already exists in the scene!", entityID) return NODE_ITER->second; } - + SHSceneNode* newNode = AllocateNode(entityID); + + if (parent == nullptr) + parent = root; + newNode->SetParent(parent); return newNode; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index b569bb78..280e541b 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -35,40 +35,40 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - ~SHSceneNode () = default; + ~SHSceneNode () = default; - SHSceneNode (EntityID eid, SHSceneNode* parent = nullptr) noexcept; - SHSceneNode (const SHSceneNode& rhs) noexcept; - SHSceneNode (SHSceneNode&& rhs) noexcept; - SHSceneNode& operator= (const SHSceneNode& rhs) noexcept; - SHSceneNode& operator= (SHSceneNode&& rhs) noexcept; + SHSceneNode (EntityID eid, SHSceneNode* parent = nullptr) noexcept; + SHSceneNode (const SHSceneNode& rhs) noexcept; + SHSceneNode (SHSceneNode&& rhs) noexcept; + SHSceneNode& operator= (const SHSceneNode& rhs) noexcept; + SHSceneNode& operator= (SHSceneNode&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] EntityID GetEntityID () const noexcept { return entityID ;} - [[nodiscard]] SHSceneNode* GetParent () const noexcept { return parent; } - [[nodiscard]] std::vector& GetChildren () noexcept { return children; } + [[nodiscard]] EntityID GetEntityID () const noexcept; + [[nodiscard]] SHSceneNode* GetParent () const noexcept; + [[nodiscard]] std::vector& GetChildren () noexcept; - [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; + [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetParent (SHSceneNode* parentNode) noexcept; + void SetParent (SHSceneNode* parentNode) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void AddChild (SHSceneNode* newChild) noexcept; + void AddChild (SHSceneNode* newChild) noexcept; - bool RemoveChild (EntityID childID) noexcept; - bool RemoveChild (SHSceneNode* childToRemove) noexcept; + bool RemoveChild (EntityID childID) noexcept; + bool RemoveChild (SHSceneNode* childToRemove) noexcept; - void RemoveAllChildren () noexcept; + void RemoveAllChildren () noexcept; private: EntityID entityID; @@ -89,19 +89,19 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHSceneGraph () noexcept; - ~SHSceneGraph () noexcept; + SHSceneGraph () noexcept; + ~SHSceneGraph () noexcept; - SHSceneGraph (const SHSceneGraph&) = delete; - SHSceneGraph (SHSceneGraph&&) = delete; - SHSceneGraph& operator= (const SHSceneGraph&) = delete; - SHSceneGraph& operator= (SHSceneGraph&&) = delete; + SHSceneGraph (const SHSceneGraph&) = delete; + SHSceneGraph (SHSceneGraph&&) = delete; + SHSceneGraph& operator= (const SHSceneGraph&) = delete; + SHSceneGraph& operator= (SHSceneGraph&&) = delete; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHSceneNode* GetRoot () const noexcept; + [[nodiscard]] const SHSceneNode* GetRoot () const noexcept; [[nodiscard]] SHSceneNode* GetNode (EntityID entityID) const noexcept; [[nodiscard]] SHSceneNode* GetParent (EntityID entityID) const noexcept; [[nodiscard]] SHSceneNode* GetChild (EntityID entityID, SHSceneNode* childNode) const noexcept; @@ -112,17 +112,17 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetParent (EntityID entityID, SHSceneNode* parent) const noexcept; - void SetParent (EntityID entityID, EntityID parent) const noexcept; + void SetParent (EntityID entityID, SHSceneNode* parent) const noexcept; + void SetParent (EntityID entityID, EntityID parent) const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHSceneNode* AddNode (EntityID entityID, SHSceneNode* parent = nullptr); - bool RemoveNode (EntityID entityID) noexcept; - bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; - void Reset () noexcept; + SHSceneNode* AddNode (EntityID entityID, SHSceneNode* parent = nullptr); + bool RemoveNode (EntityID entityID) noexcept; + bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; + void Reset () noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -137,7 +137,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHSceneNode* AllocateNode (EntityID entityID); - void ReleaseNode (SHSceneNode* node) noexcept; + void ReleaseNode (SHSceneNode* node) noexcept; }; From 77330511eedd0cc7746a0198d28e0284bbcfce4d Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 20 Sep 2022 09:27:13 +0800 Subject: [PATCH 130/793] Fixed pipeline default color blend state Remember to switch winding back to CCW after rendering in world space --- .../src/Graphics/Pipeline/SHPipelineState.h | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index 559ccc88..a43035f5 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -64,7 +64,7 @@ namespace SHADE vk::CullModeFlags cull_mode{ vk::CullModeFlagBits::eBack }; //! CW or CCW - vk::FrontFace frontFacingOrientation{ vk::FrontFace::eCounterClockwise }; + vk::FrontFace frontFacingOrientation{ vk::FrontFace::eClockwise }; bool depthBias{ VK_FALSE }; }; @@ -122,7 +122,7 @@ namespace SHADE bool depthWrite{ VK_TRUE }; // Note: Using Reversed depth-buffer for increased precision, so Greater depth values are kept - vk::CompareOp depthCompare{ vk::CompareOp::eGreater }; + vk::CompareOp depthCompare{ vk::CompareOp::eLess }; bool depthBounds{ VK_FALSE }; @@ -135,11 +135,24 @@ namespace SHADE struct SHColorBlendState { - VkBool32 logic_op_enable{ VK_TRUE }; + VkBool32 logic_op_enable{ VK_FALSE }; vk::LogicOp logic_op{ VK_LOGIC_OP_COPY }; - std::vector attachments; + std::vector attachments = + { + vk::PipelineColorBlendAttachmentState + { + .blendEnable = true, + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + } + }; }; // TODO: Specialization constants From d9213fe35d4421961fb50de1339823b17d94ba3e Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 20 Sep 2022 10:39:52 +0800 Subject: [PATCH 131/793] Moved a bunch of global data from Graphics System to new class New class in SHGraphicsGlobalData --- .../GlobalData/SHGraphicsGlobalData.cpp | 103 ++++++++++++++++++ .../GlobalData/SHGraphicsGlobalData.h | 38 +++++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 80 +------------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 19 +--- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 10 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 9 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 11 +- .../src/Graphics/RenderGraph/SHRenderGraph.h | 14 +-- 8 files changed, 172 insertions(+), 112 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp new file mode 100644 index 00000000..46480a6a --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -0,0 +1,103 @@ +#include "SHpch.h" +#include "SHGraphicsGlobalData.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Pipeline/SHPipelineState.h" +#include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" + +namespace SHADE +{ + + void SHGraphicsGlobalData::InitDescSetLayouts(Handle logicalDevice) noexcept + { + SHVkDescriptorSetLayout::Binding genericDataBinding + { + .Type = vk::DescriptorType::eUniformBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + SHVkDescriptorSetLayout::Binding texturesBinding + { + .Type = vk::DescriptorType::eCombinedImageSampler, + .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, + .BindPoint = 1, + .DescriptorCount = 2000, // we can have up to 2000 textures for now + .flags = vk::DescriptorBindingFlagBits::eVariableDescriptorCount, + }; + + // For global data (generic data and textures) + Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ genericDataBinding, texturesBinding }); + + SHVkDescriptorSetLayout::Binding lightBinding + { + .Type = vk::DescriptorType::eStorageBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For Dynamic global data (lights) + Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ lightBinding }); + + SHVkDescriptorSetLayout::Binding cameraDataBinding + { + .Type = vk::DescriptorType::eUniformBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eVertex, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For High frequency global data (camera) + Handle cameraDataGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ cameraDataBinding }); + + SHVkDescriptorSetLayout::Binding materialDataBinding + { + .Type = vk::DescriptorType::eStorageBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // For High frequency global data (camera) + Handle materialDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout({ materialDataBinding }); + + globalDescSetLayouts.push_back(staticGlobalLayout); + globalDescSetLayouts.push_back(dynamicGlobalLayout); + globalDescSetLayouts.push_back(cameraDataGlobalLayout); + globalDescSetLayouts.push_back(materialDataPerInstanceLayout); + } + + + void SHGraphicsGlobalData::InitGlobalDescSets(Handle logicalDevice) noexcept + { + //globalDescSets = logicalDevice->set + } + + void SHGraphicsGlobalData::InitDefaultVertexInputState(void) noexcept + { + defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // positions at binding 0 + defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_2D) }); // UVs at binding 1 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 + defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 + defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) + } + + void SHGraphicsGlobalData::Init(Handle logicalDevice) noexcept + { + InitDescSetLayouts(logicalDevice); + InitDefaultVertexInputState(); + } + + std::vector> const& SHGraphicsGlobalData::GetDescSetLayouts(void) const noexcept + { + return globalDescSetLayouts; + } + + + SHVertexInputState const& SHGraphicsGlobalData::GetDefaultViState(void) const noexcept + { + return defaultVertexInputState; + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h new file mode 100644 index 00000000..59ca7f63 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -0,0 +1,38 @@ +#pragma once + +#include "SH_API.h" +#include "Graphics/Pipeline/SHPipelineState.h" + +namespace SHADE +{ + class SHVkLogicalDevice; + class SHVkDescriptorSetLayout; + + class SH_API SHGraphicsGlobalData + { + private: + //! Global descriptor set layouts. Used to allocate descriptor sets + std::vector> globalDescSetLayouts; + + //! Global Descriptor sets + Handle globalDescSets; + + //! Default vertex input state (used by everything). + SHVertexInputState defaultVertexInputState; + + void InitDescSetLayouts (Handle logicalDevice) noexcept; + void InitGlobalDescSets (Handle logicalDevice) noexcept; + void InitDefaultVertexInputState(void) noexcept; + public: + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void Init (Handle logicalDevice) noexcept; + + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + std::vector> const& GetDescSetLayouts (void) const noexcept; + SHVertexInputState const& GetDefaultViState (void) const noexcept; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index ea18b817..e4f3e69e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -28,6 +28,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" #include "SHGraphicsConstants.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" namespace SHADE { @@ -100,10 +101,11 @@ namespace SHADE - Render graph in renderers - Render graph command buffer semaphores - Default vertex input state - - Global descriptor set layouts + - Global data /*-----------------------------------------------------------------------*/ - ConfigureGlobalDescLayouts(); - ConfigureDefaultVertexInputState(); + + globalData = resourceManager.Create(); + globalData->Init(device); // Set Up Cameras screenCamera = resourceManager.Create(); @@ -120,7 +122,7 @@ namespace SHADE auto worldRenderGraph = resourceManager.Create(); // Initialize world render graph - worldRenderGraph->Init(device, swapchain, &defaultVertexInputState, &globalDescSetLayouts); + worldRenderGraph->Init(device, swapchain, globalData); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); @@ -420,76 +422,6 @@ namespace SHADE window = wind; } - void SHGraphicsSystem::ConfigureGlobalDescLayouts(void) noexcept - { - SHVkDescriptorSetLayout::Binding genericDataBinding - { - .Type = vk::DescriptorType::eUniformBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, - .BindPoint = 0, - .DescriptorCount = 1, - }; - - SHVkDescriptorSetLayout::Binding texturesBinding - { - .Type = vk::DescriptorType::eCombinedImageSampler, - .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, - .BindPoint = 1, - .DescriptorCount = 2000, // we can have up to 2000 textures for now - .flags = vk::DescriptorBindingFlagBits::eVariableDescriptorCount, - }; - - // For global data (generic data and textures) - Handle staticGlobalLayout = device->CreateDescriptorSetLayout({genericDataBinding, texturesBinding}); - - SHVkDescriptorSetLayout::Binding lightBinding - { - .Type = vk::DescriptorType::eStorageBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = 0, - .DescriptorCount = 1, - }; - - // For Dynamic global data (lights) - Handle dynamicGlobalLayout = device->CreateDescriptorSetLayout({ lightBinding }); - - SHVkDescriptorSetLayout::Binding cameraDataBinding - { - .Type = vk::DescriptorType::eUniformBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eVertex, - .BindPoint = 0, - .DescriptorCount = 1, - }; - - // For High frequency global data (camera) - Handle cameraDataGlobalLayout = device->CreateDescriptorSetLayout({ cameraDataBinding }); - - SHVkDescriptorSetLayout::Binding materialDataBinding - { - .Type = vk::DescriptorType::eStorageBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = 0, - .DescriptorCount = 1, - }; - - // For High frequency global data (camera) - Handle materialDataPerInstanceLayout = device->CreateDescriptorSetLayout({ materialDataBinding }); - - globalDescSetLayouts.push_back(staticGlobalLayout); - globalDescSetLayouts.push_back(dynamicGlobalLayout); - globalDescSetLayouts.push_back(cameraDataGlobalLayout); - globalDescSetLayouts.push_back(materialDataPerInstanceLayout); - } - - void SHGraphicsSystem::ConfigureDefaultVertexInputState(void) noexcept - { - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // positions at binding 0 - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_2D)}); // UVs at binding 1 - //defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 - //defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 - //defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) - } - void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept { reinterpret_cast(system)->BeginRender(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 2475550b..5b40c3b9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -223,11 +223,12 @@ namespace SHADE // Not Owned Resources SHWindow* window; - // Global descriptor set layouts - std::vector> globalDescSetLayouts; + // global data (descriptor sets as well) + Handle globalData; + // Middle End Resources - ResourceManager resourceManager; - SHMeshLibrary meshLibrary; + ResourceManager resourceManager; + SHMeshLibrary meshLibrary; // Viewports Handle defaultViewport; // Whole screen std::vector> viewports; // Additional viewports @@ -243,21 +244,11 @@ namespace SHADE Handle worldCamera; Handle screenCamera; - // Default vertex input state (used by everything). - SHVertexInputState defaultVertexInputState; - // TODO: Temporary only until resource library from Xiao Qi is implemented SHShaderSourceLibrary shaderSourceLibrary; SHShaderModuleLibrary shaderModuleLibrary; // Temp Materials Handle defaultMaterial; - - - /*-----------------------------------------------------------------------------*/ - /* Private member functions */ - /*-----------------------------------------------------------------------------*/ - void ConfigureGlobalDescLayouts (void) noexcept; - void ConfigureDefaultVertexInputState (void) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 636b8e68..e09a4945 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -1,6 +1,7 @@ #include "SHpch.h" #include "SHPipelineLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" namespace SHADE { @@ -10,7 +11,7 @@ namespace SHADE SHPipelineLayoutParams params { .shaderModules = {vsFsPair.first, vsFsPair.second}, - .globalDescSetLayouts = *globalDescSetLayouts + .globalDescSetLayouts = globalData->GetDescSetLayouts() }; // Create the pipeline layout @@ -18,7 +19,7 @@ namespace SHADE // Create the pipeline and configure the default vertex input state auto newPipeline = logicalDevice->CreatePipeline(pipelineLayout, nullptr, renderpass, subpass, SH_PIPELINE_TYPE::GRAPHICS); - newPipeline->GetPipelineState().SetVertexInputState(*vertexInputState); + newPipeline->GetPipelineState().SetVertexInputState(globalData->GetDefaultViState()); // Actually construct the pipeline newPipeline->ConstructPipeline(); @@ -29,11 +30,10 @@ namespace SHADE return newPipeline; } - void SHPipelineLibrary::Init(Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept + void SHPipelineLibrary::Init(Handle device, Handle inGlobalData) noexcept { logicalDevice = device; - vertexInputState = viState; - globalDescSetLayouts = globalLayouts; + globalData = inGlobalData; } Handle SHPipelineLibrary::GetDrawPipline(std::pair, Handle> const& vsFsPair) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index 8f41781a..a16976f7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -10,7 +10,7 @@ namespace SHADE class SHVkDescriptorSetLayouts; class SHVkPipeline; class SHSubpass; - + class SHGraphicsGlobalData; // Pipeline library is a PURELY MIDDLE END SYSTEM. It is responsible for only creating pipelines from shaders and caching // them so that they don't need to be recreated again. @@ -25,14 +25,13 @@ namespace SHADE //! a map of pipelines that are hashed using a pair of shader module handles std::unordered_map, Handle>, Handle> pipelines; - //! Default vertex input state for pipeline creation - SHVertexInputState const* vertexInputState; + // Global data + Handle globalData; - std::vector> const* globalDescSetLayouts; public: - void Init (Handle device, SHVertexInputState const* viState, std::vector> const* globalLayouts) noexcept; + void Init (Handle device, Handle inGlobalData) noexcept; // Draw pipeline functions. used only when creating pipelines for drawing using a vertex and fragment shader Handle CreateDrawPipeline ( diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index d5fd1d4c..d91c474c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -446,7 +446,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept + SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} @@ -461,7 +461,7 @@ namespace SHADE , ptrToResources{ resources } { // pipeline library initialization - pipelineLibrary.Init(logicalDeviceHdl, defaultViState, globalLayouts); + pipelineLibrary.Init(logicalDeviceHdl, globalData); attachmentDescriptions.resize(attResources.size()); @@ -969,12 +969,11 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept + void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept { logicalDeviceHdl = logicalDevice; swapchainHdl = swapchain; - vertexInputState = defaultViState; - globalDescSetLayouts = globalLayouts; + globalData = inGlobalData; } /***************************************************************************/ @@ -1052,7 +1051,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources, vertexInputState, globalDescSetLayouts)); + nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources, globalData)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index baf38c5a..bfeb8faf 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -6,10 +6,10 @@ #include "SH_API.h" #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" +#include "../MiddleEnd/Batching/SHBatcher.h" #include #include -#include "../MiddleEnd/Batching/SHBatcher.h" namespace SHADE { @@ -22,6 +22,7 @@ namespace SHADE class SHVkCommandPool; class SHVkCommandBuffer; class SHRenderGraphNode; + class SHGraphicsGlobalData; // Used for attachment description creation for renderpass node enum class SH_ATT_DESC_TYPE @@ -218,7 +219,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode (ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; + SHRenderGraphNode (ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; @@ -277,11 +278,8 @@ namespace SHADE //! Command buffers for the render graph std::vector> commandBuffers; - //! Default vertex input state for pipeline creation - SHVertexInputState const* vertexInputState; - - //! Global descriptor set layouts to use for pipeline creation - std::vector> const* globalDescSetLayouts; + //! Handle to global data + Handle globalData; public: /*-----------------------------------------------------------------------*/ @@ -292,7 +290,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain, SHVertexInputState const* defaultViState, std::vector> const* globalLayouts) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept; void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; From 147292f91cd96a966836e1b36ed6feb5eee7344f Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 20 Sep 2022 12:15:06 +0800 Subject: [PATCH 132/793] Fence is broken. The neighbour's kids went to knock it down again. --- .../Graphics/Debugging/SHVkDebugMessenger.cpp | 2 +- .../src/Graphics/Debugging/SHVkDebugMessenger.h | 8 ++++---- .../src/Graphics/Debugging/SHVulkanDebugUtil.cpp | 1 + .../src/Graphics/Devices/SHVkLogicalDevice.cpp | 11 ++++++++++- .../src/Graphics/Devices/SHVkLogicalDevice.h | 1 + .../src/Graphics/Devices/SHVkPhysicalDevice.cpp | 2 +- .../src/Graphics/Devices/SHVkPhysicalDevice.h | 2 +- .../MiddleEnd/GlobalData/SHGraphicsGlobalData.h | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 16 ++++++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.h | 1 + 10 files changed, 31 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.cpp b/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.cpp index d5f0dfe0..3ca5c94d 100644 --- a/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.cpp +++ b/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.cpp @@ -52,7 +52,7 @@ namespace SHADE { vk::DebugUtilsMessengerCreateInfoEXT debMsgCreateInfo; InitializeDebugCreateInfo(debMsgCreateInfo, - GenMessengerSeverity(SH_DEBUG_MSG_SEV::S_VERBOSE, SH_DEBUG_MSG_SEV::S_WARNING, SH_DEBUG_MSG_SEV::S_ERROR), + GenMessengerSeverity(SH_DEBUG_MSG_SEV::S_INFO, SH_DEBUG_MSG_SEV::S_VERBOSE, SH_DEBUG_MSG_SEV::S_WARNING, SH_DEBUG_MSG_SEV::S_ERROR), GenMessengerType(SH_DEBUG_MSG_TYPE::T_GENERAL, SH_DEBUG_MSG_TYPE::T_VALIDATION, SH_DEBUG_MSG_TYPE::T_PERFORMANCE)); if (vk::Result result = SHVkInstance::GetVkInstance().createDebugUtilsMessengerEXT(&debMsgCreateInfo, nullptr, &debugMessenger); result != vk::Result::eSuccess) diff --git a/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.h b/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.h index 577090a5..79a34353 100644 --- a/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.h +++ b/SHADE_Engine/src/Graphics/Debugging/SHVkDebugMessenger.h @@ -8,10 +8,10 @@ namespace SHADE enum class SH_DEBUG_MSG_SEV : VkDebugUtilsMessageSeverityFlagsEXT { S_VERBOSE = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, - S_INFO = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, - S_WARNING = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, - S_ERROR = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, - S_FLAG = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, + S_INFO = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, + S_WARNING = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + S_ERROR = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, + S_FLAG = VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT, }; enum class SH_DEBUG_MSG_TYPE : VkDebugUtilsMessageTypeFlagsEXT diff --git a/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp b/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp index 0152e6c9..c8a1fe1a 100644 --- a/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp +++ b/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp @@ -93,6 +93,7 @@ namespace SHADE std::string toLogger = "Vulkan Warning: " + std::string(SHVulkanDebugUtil::VkResultToString(vkResult)) + " | " + std::string(message); SHLOGV_ERROR(toLogger); + std::cout << std::endl; } diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index b009f4ed..6eda48aa 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -15,6 +15,7 @@ #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "Graphics/Images/SHVkImageView.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" namespace SHADE { @@ -179,10 +180,13 @@ namespace SHADE // for wide lines features.wideLines = true; + vk::PhysicalDeviceDescriptorIndexingFeatures descIndexingFeature{}; + descIndexingFeature.descriptorBindingVariableDescriptorCount = true; + // Prepare to create the device vk::DeviceCreateInfo deviceCreateInfo { - .pNext = nullptr, + .pNext = &descIndexingFeature, .queueCreateInfoCount = static_cast(queueCreateInfos.size()), .pQueueCreateInfos = queueCreateInfos.data(), .enabledLayerCount = 0, // deprecated and ignored @@ -520,6 +524,11 @@ namespace SHADE } + Handle SHVkLogicalDevice::CreateDescriptorSetGroup(void) noexcept + { + return {}; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 6c2a096d..330c5f7b 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -177,6 +177,7 @@ namespace SHADE Handle CreateFramebuffer (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; Handle CreateDescriptorSetLayout (std::vector const& bindings) noexcept; Handle CreateDescriptorPools (const SHVkDescriptorPool::Config& config = {}) noexcept; + Handle CreateDescriptorSetGroup (void) noexcept; Handle CreatePipelineLayout (SHPipelineLayoutParams& pipelineLayoutParams) noexcept; Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp index efe624a5..00a5666b 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp @@ -26,7 +26,7 @@ namespace SHADE queueFamilyProperties = vkPhysicalDevice.getQueueFamilyProperties(); - deviceFeatures = vkPhysicalDevice.getFeatures(); + deviceFeatures = vkPhysicalDevice.getFeatures2(); } SHVkPhysicalDevice::SHVkPhysicalDevice(SHVkPhysicalDevice&& rhs) noexcept diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.h index c47ab9a9..a273da74 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.h @@ -19,7 +19,7 @@ namespace SHADE vk::PhysicalDeviceProperties deviceProperties{}; vk::PhysicalDeviceMemoryProperties memoryProperties{}; - vk::PhysicalDeviceFeatures deviceFeatures{}; + vk::PhysicalDeviceFeatures2 deviceFeatures{}; std::vector queueFamilyProperties{}; public: diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index 59ca7f63..44b45a24 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -7,6 +7,7 @@ namespace SHADE { class SHVkLogicalDevice; class SHVkDescriptorSetLayout; + class SHVkDescriptorSetGroup; class SH_API SHGraphicsGlobalData { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index e4f3e69e..c624625c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -47,7 +47,7 @@ namespace SHADE // Get Physical Device and Construct Logical Device physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); - + // Construct surface surface = device->CreateSurface(window->GetHWND()); @@ -69,6 +69,7 @@ namespace SHADE // Create graphics queue graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); + transferQueue = device->GetQueue(SH_Q_FAM::TRANSFER, 0); // Create Render Context @@ -219,7 +220,7 @@ namespace SHADE for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) { // Draw first - renderers[renIndex]->Draw(renderContext.GetCurrentFrame(), MESH_DATA); + renderers[renIndex]->Draw(renderContext.GetCurrentFrame(), MESH_DATA); // get render graph auto rg = renderers[renIndex]->GetRenderGraph(); @@ -228,9 +229,10 @@ namespace SHADE graphicsQueue->SubmitCommandBuffer ( { rg->GetCommandBuffer(renderContext.GetCurrentFrame()) }, - { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex]}, - { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex ]}, - {} + { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex] }, + { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex] }, + { vk::PipelineStageFlagBits::eColorAttachmentOutput }, + { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.fenceHdl : Handle{} } ); semIndex = !semIndex; @@ -314,6 +316,8 @@ namespace SHADE const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); auto& currFrameData = renderContext.GetCurrentFrameData(); + renderContext.ResetFence(); + // #BackEndTest: Prepare to present current image vk::PresentInfoKHR presentInfo{}; presentInfo.waitSemaphoreCount = 1; @@ -414,7 +418,7 @@ namespace SHADE transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); - graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); + transferQueue->SubmitCommandBuffer({ transferCmdBuffer }); } void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 5b40c3b9..9d6bf99c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -215,6 +215,7 @@ namespace SHADE Handle surface; Handle swapchain; Handle graphicsQueue; + Handle transferQueue; Handle descPool; Handle transferCmdPool; Handle transferCmdBuffer; From 0bc3a23161d151c5112371e22926bda10393fbe4 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 20 Sep 2022 14:15:09 +0800 Subject: [PATCH 133/793] Fixed the fence with high quality wood --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 22 ++++++++++--------- .../Graphics/RenderGraph/SHRenderGraph.cpp | 12 +++++----- .../src/Graphics/RenderGraph/SHRenderGraph.h | 6 ++--- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index c624625c..2bf8e504 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -122,8 +122,14 @@ namespace SHADE // Get render graph from default viewport world renderer auto worldRenderGraph = resourceManager.Create(); + std::vector> renderContextCmdPools{swapchain->GetNumImages()}; + for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) + { + renderContextCmdPools[i] = renderContext.GetFrameData(i).cmdPoolHdls[0]; + } + // Initialize world render graph - worldRenderGraph->Init(device, swapchain, globalData); + worldRenderGraph->Init(device, swapchain, renderContextCmdPools, globalData); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); @@ -211,6 +217,9 @@ namespace SHADE std::make_pair(meshLibrary.GetIndexBuffer(), 0), }; + renderContext.ResetFence(); + + // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) { @@ -292,6 +301,7 @@ namespace SHADE // #BackEndTest: Acquire the next image in the swapchain available renderContext.AcquireNextIamge(); + const uint32_t CURR_FRAME_IDX_2 = renderContext.GetCurrentFrame(); // #BackEndTest: Get the current frame from frame manager auto& currFrameData = renderContext.GetCurrentFrameData(); @@ -301,6 +311,7 @@ namespace SHADE throw std::runtime_error("No command pools available!"); currFrameData.cmdPoolHdls[0]->Reset(); + } /***************************************************************************/ @@ -316,15 +327,6 @@ namespace SHADE const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); auto& currFrameData = renderContext.GetCurrentFrameData(); - renderContext.ResetFence(); - - // #BackEndTest: Prepare to present current image - vk::PresentInfoKHR presentInfo{}; - presentInfo.waitSemaphoreCount = 1; - presentInfo.pWaitSemaphores = &currFrameData.semRenderFinishHdl->GetVkSem(); - presentInfo.swapchainCount = 1; - presentInfo.pSwapchains = &swapchain->GetVkSwapchain(); - presentInfo.pImageIndices = &CURR_FRAME_IDX; // #BackEndTest: queues an image for presentation if (auto result = graphicsQueue->Present(swapchain, { currFrameData.semRenderFinishHdl }, CURR_FRAME_IDX); result != vk::Result::eSuccess) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index d91c474c..e07029e3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -946,11 +946,12 @@ namespace SHADE /***************************************************************************/ void SHRenderGraph::ConfigureCommands(void) noexcept { - commandPool = logicalDeviceHdl->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + //commandPools.resize (static_cast(swapchainHdl->GetNumImages())); commandBuffers.resize(static_cast(swapchainHdl->GetNumImages())); - for (auto& cmdBuffer : commandBuffers) + + for (uint32_t i = 0; i < commandBuffers.size(); ++i) { - cmdBuffer = commandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + commandBuffers[i] = commandPools[i]->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); } } @@ -969,11 +970,12 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept + void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, std::vector> const& cmdPools, Handle inGlobalData) noexcept { logicalDeviceHdl = logicalDevice; swapchainHdl = swapchain; globalData = inGlobalData; + commandPools = cmdPools; } /***************************************************************************/ @@ -1082,7 +1084,7 @@ namespace SHADE // better way to manage these void SHRenderGraph::Execute(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept { - commandPool->Reset(); + //commandPools[frameIndex]->Reset(); auto& cmdBuffer = commandBuffers[frameIndex]; cmdBuffer->BeginRecording(); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index bfeb8faf..0ecda65a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -272,8 +272,8 @@ namespace SHADE //! Resource library for graph handles ResourceManager resourceManager; - //! Command pool for the render graph - Handle commandPool; + //! Command pool for the render graph. DO NOT RESET OR FREE THESE, THEY ARE NON-OWNING. TODO: If application is multithreaded, we need more pools. + std::vector> commandPools; //! Command buffers for the render graph std::vector> commandBuffers; @@ -290,7 +290,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain, std::vector> const& cmdPools, Handle inGlobalData) noexcept; void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; From f4bf895e45f3ce71431324f9298b0ca3c07db412 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 15:35:10 +0800 Subject: [PATCH 134/793] Fixed constness of functions in scene graph --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 2 +- SHADE_Engine/src/Scene/SHSceneGraph.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index c13b5cc7..305c3fc0 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -114,7 +114,7 @@ namespace SHADE return parent; } - std::vector& SHSceneNode::GetChildren() noexcept + const std::vector& SHSceneNode::GetChildren() const noexcept { return children; } diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 280e541b..38fcc414 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -47,11 +47,11 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] EntityID GetEntityID () const noexcept; - [[nodiscard]] SHSceneNode* GetParent () const noexcept; - [[nodiscard]] std::vector& GetChildren () noexcept; + [[nodiscard]] EntityID GetEntityID () const noexcept; + [[nodiscard]] SHSceneNode* GetParent () const noexcept; + [[nodiscard]] const std::vector& GetChildren () const noexcept; - [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; + [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ From 7f173b3207cf8e5a073cbd77d9b5c4f84826a8d8 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 16:10:47 +0800 Subject: [PATCH 135/793] Added SH_API to Math Classes --- SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h | 2 +- SHADE_Engine/src/Math/Geometry/SHBoundingBox.h | 3 ++- SHADE_Engine/src/Math/Geometry/SHShape.h | 3 ++- SHADE_Engine/src/Math/SHMathHelpers.h | 5 ++++- SHADE_Engine/src/Math/SHMatrix.h | 4 +++- SHADE_Engine/src/Math/SHQuaternion.h | 5 ++++- SHADE_Engine/src/Math/SHTransform.h | 4 +++- SHADE_Engine/src/Math/Vector/SHVec2.h | 5 ++++- SHADE_Engine/src/Math/Vector/SHVec3.h | 5 ++++- SHADE_Engine/src/Math/Vector/SHVec4.h | 5 ++++- SHADE_Engine/src/Scene/SHSceneManager.h | 8 ++++++-- 11 files changed, 37 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 20720760..60625d6a 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -36,7 +36,7 @@ namespace SHADE //The Container of all Componentgroups static std::vector componentGroups; - friend struct SHSceneNode; + friend class SHSceneNode; diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index 8c397aff..b60c6c29 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -12,6 +12,7 @@ // Project Headers #include "SHShape.h" +#include "SH_API.h" namespace SHADE { @@ -19,7 +20,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHBoundingBox : public SHShape + class SH_API SHBoundingBox : public SHShape { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 3dbe47e2..87396c6d 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -12,6 +12,7 @@ // Project Headers #include "Math/SHTransform.h" +#include "SH_API.h" namespace SHADE { @@ -19,7 +20,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHShape + class SH_API SHShape { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHMathHelpers.h b/SHADE_Engine/src/Math/SHMathHelpers.h index 88c47fbd..427011a6 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.h +++ b/SHADE_Engine/src/Math/SHMathHelpers.h @@ -15,6 +15,9 @@ #include #include +// Project Headers +#include "SH_API.h" + namespace SHADE { @@ -35,7 +38,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHMath + class SH_API SHMath { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHMatrix.h b/SHADE_Engine/src/Math/SHMatrix.h index f5d7c173..95f87146 100644 --- a/SHADE_Engine/src/Math/SHMatrix.h +++ b/SHADE_Engine/src/Math/SHMatrix.h @@ -13,6 +13,8 @@ #include #include +// Project Headers +#include "SH_API.h" #include "Vector/SHVec4.h" namespace SHADE @@ -32,7 +34,7 @@ namespace SHADE /** * @brief Interface for a Column-Major Row Vector 4x4 Matrix. */ - class SHMatrix : public DirectX::XMFLOAT4X4 + class SH_API SHMatrix : public DirectX::XMFLOAT4X4 { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index 820392fa..61b55ef9 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -13,6 +13,9 @@ #include #include +// Project Headers +#include "SH_API.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -27,7 +30,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHQuaternion : public DirectX::XMFLOAT4 + class SH_API SHQuaternion : public DirectX::XMFLOAT4 { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHTransform.h b/SHADE_Engine/src/Math/SHTransform.h index a6d9a1b2..8908b8eb 100644 --- a/SHADE_Engine/src/Math/SHTransform.h +++ b/SHADE_Engine/src/Math/SHTransform.h @@ -10,6 +10,8 @@ #pragma once +// Project Headers +#include "SH_API.h" #include "SHMath.h" namespace SHADE @@ -18,7 +20,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - struct SHTransform + struct SH_API SHTransform { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index f57c7b5b..3e6287aa 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -14,6 +14,9 @@ #include #include +// Project Headers +#include "SH_API.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -25,7 +28,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHVec2 : public DirectX::XMFLOAT2 + class SH_API SHVec2 : public DirectX::XMFLOAT2 { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index 76318499..476d7b0f 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -14,6 +14,9 @@ #include #include +// Project Headers +#include "SH_API.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -25,7 +28,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHVec3 : public DirectX::XMFLOAT3 + class SH_API SHVec3 : public DirectX::XMFLOAT3 { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index 36793fe0..a4a5208a 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -14,6 +14,9 @@ #include #include +// Project Headers +#include "SH_API.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -25,7 +28,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SHVec4 : public DirectX::XMFLOAT4 + class SH_API SHVec4 : public DirectX::XMFLOAT4 { public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index bdd8f596..83ebab0f 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -13,14 +13,18 @@ #define SH_SCENE_MANAGER_H -#include "ECS_Base/General/SHFamily.h" + #include "SHScene.h" #include +//Project Headers +#include "SH_API.h" +#include "ECS_Base/General/SHFamily.h" + namespace SHADE { - class SHSceneManager + class SH_API SHSceneManager { private: //boolean to check if the scene has been changed From c194765889c05ee1aaec5cdb92bb4041fb67b6d5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 20 Sep 2022 16:12:47 +0800 Subject: [PATCH 136/793] More warnings fixed. More graphics constants. --- .../Descriptors/SHVkDescriptorSetGroup.cpp | 2 +- .../Graphics/Devices/SHVkLogicalDevice.cpp | 6 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 4 +- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 1 - .../GlobalData/SHGraphicsGlobalData.cpp | 16 +- .../GlobalData/SHGraphicsGlobalData.h | 2 +- .../MiddleEnd/Interface/SHGraphicsConstants.h | 234 ++++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +- .../Interface/SHMaterialInstance.cpp | 2 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 2 + .../MiddleEnd/Interface/SHViewport.cpp | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 14 +- 13 files changed, 168 insertions(+), 123 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index 0f4ee31c..aeea6818 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -196,7 +196,7 @@ namespace SHADE writeDescSet.dstBinding = binding; writeDescSet.pImageInfo = updater.writeInfos[set].descImageInfos.data(); - writeDescSet.descriptorCount = updater.writeInfos[set].descImageInfos.size(); + writeDescSet.descriptorCount = static_cast(updater.writeInfos[set].descImageInfos.size()); device->UpdateDescriptorSet(writeDescSet); } diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 6eda48aa..0b7e4fdf 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -524,9 +524,11 @@ namespace SHADE } - Handle SHVkLogicalDevice::CreateDescriptorSetGroup(void) noexcept + Handle SHVkLogicalDevice::CreateDescriptorSetGroup(Handle pool, + std::vector> const& layouts, + std::vector const& variableDescCounts) noexcept { - return {}; + return SHVkInstance::GetResourceManager().Create(GetHandle(), pool, layouts, variableDescCounts); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 330c5f7b..6b73e38e 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -177,7 +177,9 @@ namespace SHADE Handle CreateFramebuffer (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; Handle CreateDescriptorSetLayout (std::vector const& bindings) noexcept; Handle CreateDescriptorPools (const SHVkDescriptorPool::Config& config = {}) noexcept; - Handle CreateDescriptorSetGroup (void) noexcept; + Handle CreateDescriptorSetGroup(Handle pool, + std::vector> const& layouts, + std::vector const& variableDescCounts) noexcept; Handle CreatePipelineLayout (SHPipelineLayoutParams& pipelineLayoutParams) noexcept; Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 8206fcc0..4c8ac811 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -57,7 +57,6 @@ namespace SHADE void DeregisterSuperBatch(Handle superBatch); private: - const std::vector* renderables = nullptr; Handle renderGraph; // Children std::vector> superBatches; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 46480a6a..5289b635 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -13,7 +13,7 @@ namespace SHADE { .Type = vk::DescriptorType::eUniformBufferDynamic, .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, - .BindPoint = 0, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::GENERIC_DATA, .DescriptorCount = 1, }; @@ -21,7 +21,7 @@ namespace SHADE { .Type = vk::DescriptorType::eCombinedImageSampler, .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, - .BindPoint = 1, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA, .DescriptorCount = 2000, // we can have up to 2000 textures for now .flags = vk::DescriptorBindingFlagBits::eVariableDescriptorCount, }; @@ -33,7 +33,7 @@ namespace SHADE { .Type = vk::DescriptorType::eStorageBufferDynamic, .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = 0, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::LIGHTS_DATA, .DescriptorCount = 1, }; @@ -44,7 +44,7 @@ namespace SHADE { .Type = vk::DescriptorType::eUniformBufferDynamic, .Stage = vk::ShaderStageFlagBits::eVertex, - .BindPoint = 0, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, .DescriptorCount = 1, }; @@ -55,7 +55,7 @@ namespace SHADE { .Type = vk::DescriptorType::eStorageBufferDynamic, .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = 0, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, .DescriptorCount = 1, }; @@ -68,12 +68,6 @@ namespace SHADE globalDescSetLayouts.push_back(materialDataPerInstanceLayout); } - - void SHGraphicsGlobalData::InitGlobalDescSets(Handle logicalDevice) noexcept - { - //globalDescSets = logicalDevice->set - } - void SHGraphicsGlobalData::InitDefaultVertexInputState(void) noexcept { defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // positions at binding 0 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index 44b45a24..fb595250 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -2,6 +2,7 @@ #include "SH_API.h" #include "Graphics/Pipeline/SHPipelineState.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" namespace SHADE { @@ -22,7 +23,6 @@ namespace SHADE SHVertexInputState defaultVertexInputState; void InitDescSetLayouts (Handle logicalDevice) noexcept; - void InitGlobalDescSets (Handle logicalDevice) noexcept; void InitDefaultVertexInputState(void) noexcept; public: /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index c26d7576..0818ebab 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -16,106 +16,142 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /***********************************************************************************/ + /***********************************************************************************/ + /*! + \brief + Contains definition of constants related to the Graphics System. + */ + /***********************************************************************************/ + struct SHGraphicsConstants + { + public: + struct DescriptorSetIndex + { + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for static global values like generic data, and + texture samplers + */ + /***************************************************************************/ + static constexpr uint32_t STATIC_GLOBALS = 0; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for dynamic global values like lights. + */ + /***************************************************************************/ + static constexpr uint32_t DYNAMIC_GLOBALS = 1; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for high frequency changing global values like + camera matrices. + */ + /***************************************************************************/ + static constexpr uint32_t HIGH_FREQUENCY_GLOBALS = 2; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for per-instance/material changing values. + */ + /***************************************************************************/ + static constexpr uint32_t PER_INSTANCE = 3; + + }; + + struct DescriptorSetBindings + { + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for generic data. + + */ + /***************************************************************************/ + static constexpr uint32_t GENERIC_DATA = 0; + + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for combined image sampler data. + + */ + /***************************************************************************/ + static constexpr uint32_t IMAGE_AND_SAMPLERS_DATA = 1; + + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for lights. + + */ + /***************************************************************************/ + static constexpr uint32_t LIGHTS_DATA = 0; + + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for lights. + + */ + /***************************************************************************/ + static constexpr uint32_t CAMERA_DATA = 0; + + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for per instance material values. + */ + /***************************************************************************/ + static constexpr uint32_t BATCHED_PER_INST_DATA = 0; + }; + + struct VertexBufferBindings + { + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t POSITION = 0; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TEX_COORD = 1; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t NORMAL = 2; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TANGENT = 3; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the transform matrix buffer. + */ + /***************************************************************************/ + static constexpr uint32_t TRANSFORM = 4; + }; + + /*******************************************************************************/ /*! \brief - Contains definition of constants related to the Graphics System. + Number of frame buffers used by the Graphics System. */ - /***********************************************************************************/ - struct SHGraphicsConstants - { - public: - struct DescriptorSetIndex - { - /***************************************************************************/ - /*! - \brief - DescriptorSet Index for static global values like generic data, and - texture samplers - */ - /***************************************************************************/ - static constexpr uint32_t STATIC_GLOBALS = 0; - /***************************************************************************/ - /*! - \brief - DescriptorSet Index for dynamic global values like lights. - */ - /***************************************************************************/ - static constexpr uint32_t DYNAMIC_GLOBALS = 1; - /***************************************************************************/ - /*! - \brief - DescriptorSet Index for high frequency changing global values like - camera matrices. - */ - /***************************************************************************/ - static constexpr uint32_t HIGH_FREQUENCY_GLOBALS = 2; - /***************************************************************************/ - /*! - \brief - DescriptorSet Index for per-instance/material changing values. - */ - /***************************************************************************/ - static constexpr uint32_t PER_INSTANCE = 3; - - }; - - struct DescriptorSetBindings - { - /***************************************************************************/ - /*! - \brief - DescriptorSet binding for per instance material values. - */ - /***************************************************************************/ - static constexpr uint32_t BATCHED_PER_INST_DATA = 0; - }; - - struct VertexBufferBindings - { - /***************************************************************************/ - /*! - \brief - Vertex buffer bindings for the transform matrix buffer. - */ - /***************************************************************************/ - static constexpr uint32_t POSITION = 0; - /***************************************************************************/ - /*! - \brief - Vertex buffer bindings for the transform matrix buffer. - */ - /***************************************************************************/ - static constexpr uint32_t TEX_COORD = 1; - /***************************************************************************/ - /*! - \brief - Vertex buffer bindings for the transform matrix buffer. - */ - /***************************************************************************/ - static constexpr uint32_t NORMAL = 2; - /***************************************************************************/ - /*! - \brief - Vertex buffer bindings for the transform matrix buffer. - */ - /***************************************************************************/ - static constexpr uint32_t TANGENT = 3; - /***************************************************************************/ - /*! - \brief - Vertex buffer bindings for the transform matrix buffer. - */ - /***************************************************************************/ - static constexpr uint32_t TRANSFORM = 4; - }; - - /*******************************************************************************/ - /*! - \brief - Number of frame buffers used by the Graphics System. - */ - /*******************************************************************************/ - static constexpr int NUM_FRAME_BUFFERS = 3; - }; + /*******************************************************************************/ + static constexpr int NUM_FRAME_BUFFERS = 3; + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 2bf8e504..2f8f501d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -117,7 +117,7 @@ namespace SHADE worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); // Create Default Viewport - defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, window->GetWindowSize().first, window->GetWindowSize().second, 0.0f, 1.0f)); + defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); // Get render graph from default viewport world renderer auto worldRenderGraph = resourceManager.Create(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 9d6bf99c..3dc452be 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -161,7 +161,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); + Handle AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices); /*******************************************************************************/ /*! @@ -222,7 +222,7 @@ namespace SHADE SHRenderContext renderContext; std::array, 2> graphSemaphores; // Not Owned Resources - SHWindow* window; + SHWindow* window = nullptr; // global data (descriptor sets as well) Handle globalData; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp index 8b0778d2..57a91941 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp @@ -53,7 +53,7 @@ namespace SHADE for (const auto& data : overrideData) { // Get memory offset to the data - const SHShaderBlockInterface::Variable* variable = SHADER_INFO->GetVariable(data.Index); + const SHShaderBlockInterface::Variable* variable = SHADER_INFO->GetVariable(static_cast(data.Index)); if (variable == nullptr) { SHLOG_WARNING("[SHMaterialInstance] Invalid override data indices provided. Skipping."); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 459f62ac..5fca8162 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -34,6 +34,8 @@ namespace SHADE class SHVkImageView; class SHVkCommandBuffer; class SHCamera; + class SHVkDescriptorSetGroup; + class SHGraphicsGlobalData; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 74bfadff..1bbab6a4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -52,7 +52,7 @@ namespace SHADE Handle SHViewport::AddRenderer(ResourceManager& resourceManager, Handle renderGraph) { // Create the renderer - auto renderer = SHVkInstance::GetResourceManager().Create(GetHandle(), renderGraph); + auto renderer = resourceManager.Create(GetHandle(), renderGraph); // Store renderers.emplace_back(renderer); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index e07029e3..d7404db2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -214,7 +214,11 @@ namespace SHADE : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } - , subpassIndex {index} + , subpassIndex{ index } + , superBatch{} + , colorReferences{} + , depthReferences{} + , inputReferences{} { superBatch = rm.Create(GetHandle()); } @@ -231,7 +235,10 @@ namespace SHADE */ /***************************************************************************/ SHSubpass::SHSubpass(SHSubpass&& rhs) noexcept - : colorReferences{ std::move(rhs.colorReferences) } + : subpassIndex{ std::move(rhs.subpassIndex) } + , parentNode{ std::move(rhs.parentNode) } + , superBatch{ std::move(rhs.superBatch) } + , colorReferences{ std::move(rhs.colorReferences) } , depthReferences{ std::move(rhs.depthReferences) } , inputReferences{ std::move(rhs.inputReferences) } , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } @@ -256,6 +263,9 @@ namespace SHADE if (this == &rhs) return *this; + subpassIndex = std::move(rhs.subpassIndex); + parentNode = std::move(rhs.parentNode); + superBatch = std::move(rhs.superBatch); colorReferences = std::move(rhs.colorReferences); depthReferences = std::move(rhs.depthReferences); inputReferences = std::move(rhs.inputReferences); From 9896c5c913e237188c7c417a5b272aa85b43547a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 20 Sep 2022 16:23:03 +0800 Subject: [PATCH 137/793] Added CallbackAction and CallbackEvent --- SHADE_Managed/src/Events/CallbackAction.cxx | 48 ++++++++++++ SHADE_Managed/src/Events/CallbackAction.hxx | 57 ++++++++++++++ SHADE_Managed/src/Events/CallbackEvent.cxx | 71 +++++++++++++++++ SHADE_Managed/src/Events/CallbackEvent.hxx | 85 +++++++++++++++++++++ SHADE_Managed/src/Math/Vector2.hxx | 2 +- 5 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 SHADE_Managed/src/Events/CallbackAction.cxx create mode 100644 SHADE_Managed/src/Events/CallbackAction.hxx create mode 100644 SHADE_Managed/src/Events/CallbackEvent.cxx create mode 100644 SHADE_Managed/src/Events/CallbackEvent.hxx diff --git a/SHADE_Managed/src/Events/CallbackAction.cxx b/SHADE_Managed/src/Events/CallbackAction.cxx new file mode 100644 index 00000000..0ad356c1 --- /dev/null +++ b/SHADE_Managed/src/Events/CallbackAction.cxx @@ -0,0 +1,48 @@ +/************************************************************************************//*! +\file CallbackAction.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2022 +\brief Contains the definition of the functions for the CallbackAction managed + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "CallbackAction.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + generic + CallbackAction::CallbackAction(System::Reflection::MethodInfo^ method) + : CallbackAction(method, nullptr) + {} + generic + CallbackAction::CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj) + : method { method } + , object { obj } + { + paramArray = gcnew cli::array(1); + } + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + generic + void CallbackAction::Invoke(T1 param1) + { + // Set parameters + paramArray[0] = safe_cast(param1); + // Invoke + method->Invoke(object, paramArray); + } +} diff --git a/SHADE_Managed/src/Events/CallbackAction.hxx b/SHADE_Managed/src/Events/CallbackAction.hxx new file mode 100644 index 00000000..f8b50266 --- /dev/null +++ b/SHADE_Managed/src/Events/CallbackAction.hxx @@ -0,0 +1,57 @@ +/************************************************************************************//*! +\file CallbackAction.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2021 +\brief Contains the definition of the managed CallbackAction class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Holds a function and their associated object for invoking later. + /// + /// Type of the first parameter. + generic + public ref class CallbackAction + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a CallbackAction with the specified static method. + /// + /// MethodInfo representing the method to call. + /// Object to call the method on. Set null if static. + CallbackAction(System::Reflection::MethodInfo^ method); + /// + /// Constructs a CallbackAction with the specified instance method and object + /// which will invoke the method. + /// + /// MethodInfo representing the method to call. + /// Object to call the method on. + CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Invokes this action with the specified parameters. + /// + /// + void Invoke(T1 param1); + + private: + System::Reflection::MethodInfo^ method; + cli::array^ paramArray; + System::Object^ object; + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Events/CallbackEvent.cxx b/SHADE_Managed/src/Events/CallbackEvent.cxx new file mode 100644 index 00000000..9ba82ef2 --- /dev/null +++ b/SHADE_Managed/src/Events/CallbackEvent.cxx @@ -0,0 +1,71 @@ +/************************************************************************************//*! +\file CallbackEvent.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2022 +\brief Contains the definition of the functions for the CallbackEvent managed + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "CallbackEvent.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + generic + CallbackEvent::CallbackEvent() + { + actions = gcnew System::Collections::Generic::List ^>(); + } + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + generic + System::Collections::Generic::IEnumerable^>^ CallbackEvent::Actions::get() + { + return actions; + } + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + generic + void CallbackEvent::AddAction(CallbackAction^ action) + { + actions->Add(action); + } + generic + void CallbackEvent::AddAction(System::Reflection::MethodInfo^ method) + { + actions->Add(gcnew CallbackAction(method)); + } + generic + void CallbackEvent::AddAction(System::Reflection::MethodInfo^ method, System::Object^ object) + { + actions->Add(gcnew CallbackAction(method, object)); + } + generic + void CallbackEvent::RemoveAction(CallbackAction^ action) + { + actions->Remove(action); + } + generic + void CallbackEvent::Invoke(T1 param1) + { + for each (CallbackAction^ action in actions) + { + action->Invoke(param1); + } + } +} diff --git a/SHADE_Managed/src/Events/CallbackEvent.hxx b/SHADE_Managed/src/Events/CallbackEvent.hxx new file mode 100644 index 00000000..d0d6d2f1 --- /dev/null +++ b/SHADE_Managed/src/Events/CallbackEvent.hxx @@ -0,0 +1,85 @@ +/************************************************************************************//*! +\file CallbackEvent.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2021 +\brief Contains the definition of the managed CallbackEvent class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "CallbackAction.hxx" + +namespace SHADE +{ + /// + /// Holds a set of CallbackActions that can be invoked together at a later time. + /// + /// Type of the first parameter. + generic + public ref class CallbackEvent + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Default Constructor + /// + CallbackEvent(); + + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Read only access to the list of Actions + /// + property System::Collections::Generic::IEnumerable^>^ Actions + { + System::Collections::Generic::IEnumerable^>^ get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Adds the specified CallbackAction to the CallbackEvent. + /// + /// CallbackAction to add. + void AddAction(CallbackAction^ action); + /// + /// Adds a specified static method as a CallbackAction to the CallbackEvent. + /// + /// Method to add. + void AddAction(System::Reflection::MethodInfo^ method); + /// + /// Adds a specified instance method and associated object as a CallbackAction to + /// the CallbackEvent. + /// + /// Method to add. + /// Object that will call the specified method. + void AddAction(System::Reflection::MethodInfo^ method, System::Object^ object); + /// + /// Removes the specified CallbackAction from the CallbackEvent. + /// + /// CallbackAction to remove. + void RemoveAction(CallbackAction^ action); + /// + /// Invokes all CallbackActions registered with this CallbackEvent with the + /// specified parameters. + /// + /// + void Invoke(T1 param1); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + System::Collections::Generic::List^>^ actions; + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index 69a6110f..9253a703 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -19,7 +19,7 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// CLR version of the the PlushieEngine's Vector2 class that represents a + /// CLR version of the the SHADE Engine's Vector2 class that represents a /// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct. /// [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] From f461a0e658bb156eea44bfbeb2de24d88e818218 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 20 Sep 2022 16:37:29 +0800 Subject: [PATCH 138/793] Modified generate.bat to delete all generated files before generating files --- generate.bat | 3 +++ 1 file changed, 3 insertions(+) diff --git a/generate.bat b/generate.bat index ce7f2916..b81fce81 100644 --- a/generate.bat +++ b/generate.bat @@ -1,2 +1,5 @@ +erase /s /q *.vcxproj +erase /s /q *.vcxproj.filters + call Premake\premake5 vs2019 PAUSE \ No newline at end of file From cc6d1dd95b231b0afe6a323b5c056ce34a870925 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 17:20:57 +0800 Subject: [PATCH 139/793] Added Transform Component --- SHADE_Engine/SHADE_Engine.vcxproj | 6 +- SHADE_Engine/SHADE_Engine.vcxproj.filters | 6 +- SHADE_Engine/src/Math/Geometry/SHShape.h | 2 +- .../src/Math/{ => Transform}/SHTransform.cpp | 31 ++++- .../src/Math/{ => Transform}/SHTransform.h | 19 ++- .../Math/Transform/SHTransformComponent.cpp | 129 ++++++++++++++++++ .../src/Math/Transform/SHTransformComponent.h | 115 ++++++++++++++++ 7 files changed, 293 insertions(+), 15 deletions(-) rename SHADE_Engine/src/Math/{ => Transform}/SHTransform.cpp (65%) rename SHADE_Engine/src/Math/{ => Transform}/SHTransform.h (73%) create mode 100644 SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp create mode 100644 SHADE_Engine/src/Math/Transform/SHTransformComponent.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 03e1e0b3..235ce56a 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -209,7 +209,8 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - + + @@ -304,7 +305,8 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 2311e8dd..7e279e59 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -420,7 +420,7 @@ Math - + Math @@ -498,6 +498,7 @@ Tools + @@ -695,7 +696,7 @@ Math - + Math @@ -738,5 +739,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 87396c6d..84b7bbe7 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -11,7 +11,7 @@ #pragma once // Project Headers -#include "Math/SHTransform.h" +#include "Math/Transform/SHTransform.h" #include "SH_API.h" namespace SHADE diff --git a/SHADE_Engine/src/Math/SHTransform.cpp b/SHADE_Engine/src/Math/Transform/SHTransform.cpp similarity index 65% rename from SHADE_Engine/src/Math/SHTransform.cpp rename to SHADE_Engine/src/Math/Transform/SHTransform.cpp index 757ac5b6..e1b8cf2b 100644 --- a/SHADE_Engine/src/Math/SHTransform.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransform.cpp @@ -16,21 +16,41 @@ namespace SHADE { /*-----------------------------------------------------------------------------------*/ - /* Stai Definitions */ + /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ - + const SHTransform SHTransform::Identity { SHVec3::Zero, SHVec3::Zero, SHVec3::One }; /*-----------------------------------------------------------------------------------*/ /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ SHTransform::SHTransform() noexcept - : position { SHVec3::Zero } - , rotation { SHVec3::Zero } - , scale { SHVec3::One } + : position { SHVec3::Zero } + , rotation { SHVec3::Zero } + , scale { SHVec3::One } {} + SHTransform::SHTransform(const SHVec3& pos, const SHVec3& rot, const SHVec3& scl) noexcept + : position { pos } + , rotation { rot } + , scale { scl } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHTransform::operator==(const SHTransform& rhs) const noexcept + { + return !(position != rhs.position || rotation != rhs.rotation || scale != rhs.scale); + } + + bool SHTransform::operator!=(const SHTransform& rhs) const noexcept + { + return (position != rhs.position || rotation != rhs.rotation || scale != rhs.scale); + } + /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -40,7 +60,6 @@ namespace SHADE return trs; } - /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHTransform.h b/SHADE_Engine/src/Math/Transform/SHTransform.h similarity index 73% rename from SHADE_Engine/src/Math/SHTransform.h rename to SHADE_Engine/src/Math/Transform/SHTransform.h index 8908b8eb..4256bf83 100644 --- a/SHADE_Engine/src/Math/SHTransform.h +++ b/SHADE_Engine/src/Math/Transform/SHTransform.h @@ -12,7 +12,7 @@ // Project Headers #include "SH_API.h" -#include "SHMath.h" +#include "Math/SHMath.h" namespace SHADE { @@ -39,13 +39,20 @@ namespace SHADE SHTransform (const SHTransform&) = default; SHTransform (SHTransform&&) = default; + ~SHTransform () = default; + + SHTransform () noexcept; + SHTransform (const SHVec3& pos, const SHVec3& rot, const SHVec3& scl) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ SHTransform& operator= (const SHTransform&) = default; SHTransform& operator= (SHTransform&&) = default; - ~SHTransform () = default; - - SHTransform () noexcept; + [[nodiscard]] bool operator==(const SHTransform& rhs) const noexcept; + [[nodiscard]] bool operator!=(const SHTransform& rhs) const noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -60,6 +67,10 @@ namespace SHADE const SHMatrix& ComputeTRS(); private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + SHMatrix trs; }; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp new file mode 100644 index 00000000..29b8b0bb --- /dev/null +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -0,0 +1,129 @@ +/**************************************************************************************** + * \file SHTransformComponent.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Transform Component + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHTransformComponent.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHTransformComponent::SHTransformComponent() noexcept + : SHComponent {} + , parent { nullptr } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHTransform* SHTransformComponent::GetParent() const noexcept + { + return parent; + } + + const SHVec3& SHTransformComponent::GetLocalPosition() const noexcept + { + return local.position; + } + + const SHVec3& SHTransformComponent::GetLocalRotation() const noexcept + { + return local.rotation; + } + + const SHVec3& SHTransformComponent::GetLocalScale() const noexcept + { + return local.scale; + } + + const SHVec3& SHTransformComponent::GetWorldPosition() const noexcept + { + return world.position; + } + + const SHVec3& SHTransformComponent::GetWorldRotation() const noexcept + { + return world.rotation; + } + + const SHVec3& SHTransformComponent::GetWorldScale() const noexcept + { + return world.scale; + } + + SHMatrix SHTransformComponent::GetLocalToWorld() const noexcept + { + return parent != nullptr ? parent->GetTRS() : SHMatrix::Identity; + } + + SHMatrix SHTransformComponent::GetWorldToLocal() const noexcept + { + return parent != nullptr ? SHMatrix::Inverse(parent->GetTRS()) : SHMatrix::Identity; + } + + const SHMatrix& SHTransformComponent::GetTRS() const noexcept + { + return world.GetTRS(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHTransformComponent::SetParent(const SHTransform* parentTransform) noexcept + { + if (parent == nullptr) + SHLOG_WARNING("Removing parent transform from Entity {}", GetEID()) + + parent = parentTransform; + } + + void SHTransformComponent::SetLocalPosition(const SHVec3& newLocalPosition) noexcept + { + local.position = newLocalPosition; + updateQueue.push({ UpdateCommandType::LOCAL_POSITION, newLocalPosition }); + } + + void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept + { + local.rotation = newLocalRotation; + updateQueue.push({ UpdateCommandType::LOCAL_ROTATION, newLocalRotation }); + } + + void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept + { + local.scale = newLocalScale; + updateQueue.push({ UpdateCommandType::LOCAL_SCALE, newLocalScale }); + } + + void SHTransformComponent::SetWorldPosition(const SHVec3& newWorldPosition) noexcept + { + world.position = newWorldPosition; + updateQueue.push({ UpdateCommandType::WORLD_POSITION, newWorldPosition }); + } + + void SHTransformComponent::SetWorldRotation(const SHVec3& newWorldRotation) noexcept + { + world.rotation = newWorldRotation; + updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation }); + } + + void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept + { + world.scale = newWorldScale; + updateQueue.push({ UpdateCommandType::WORLD_SCALE, newWorldScale }); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h new file mode 100644 index 00000000..eeaf758f --- /dev/null +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -0,0 +1,115 @@ +/**************************************************************************************** + * \file SHTransformComponent.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Transform Component + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "SH_API.h" +#include "ECS_Base/Components/SHComponent.h" +#include "SHTransform.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHTransformComponent : public SHComponent + { + public: + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + ~SHTransformComponent () override = default; + + SHTransformComponent () noexcept; + + // TODO(Diren): Do I implement these in a specific manner or delete? + SHTransformComponent (const SHTransformComponent&) = delete; + SHTransformComponent (SHTransformComponent&&) = delete; + SHTransformComponent& operator=(const SHTransformComponent&) = delete; + SHTransformComponent& operator=(SHTransformComponent&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] const SHTransform* GetParent () const noexcept; + + [[nodiscard]] const SHVec3& GetLocalPosition () const noexcept; + [[nodiscard]] const SHVec3& GetLocalRotation () const noexcept; + [[nodiscard]] const SHVec3& GetLocalScale () const noexcept; + [[nodiscard]] const SHVec3& GetWorldPosition () const noexcept; + [[nodiscard]] const SHVec3& GetWorldRotation () const noexcept; + [[nodiscard]] const SHVec3& GetWorldScale () const noexcept; + + [[nodiscard]] SHMatrix GetLocalToWorld () const noexcept; + [[nodiscard]] SHMatrix GetWorldToLocal () const noexcept; + + [[nodiscard]] const SHMatrix& GetTRS () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetParent (const SHTransform* parentTransform) noexcept; + + void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; + void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; + void SetLocalScale (const SHVec3& newLocalScale) noexcept; + void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; + void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; + void SetWorldScale (const SHVec3& newWorldScale) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class UpdateCommandType + { + LOCAL_POSITION + , LOCAL_ROTATION + , LOCAL_SCALE + , WORLD_POSITION + , WORLD_ROTATION + , WORLD_SCALE + }; + + struct UpdateCommand + { + public: + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + + UpdateCommandType type; + SHVec3 data; + }; + + using UpdateQueue = std::queue; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + const SHTransform* parent; + SHTransform local; + SHTransform world; + + UpdateQueue updateQueue; + }; + + +} // namespace SHADE \ No newline at end of file From 5f305f96090a8290ec3eaeed54e1f983c7296ca9 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 20 Sep 2022 18:13:13 +0800 Subject: [PATCH 140/793] Added SHTextureLibrary stub --- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 41 +++++ .../MiddleEnd/Textures/SHTextureLibrary.h | 142 ++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp new file mode 100644 index 00000000..97b72977 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file SHTextureLibrary.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2022 +\brief Contains definitions for all of the functions of the classes that deal + with storage and management of buffers for textures. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHTextureLibrary.h" + +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" +#include "Graphics/SHVkUtil.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData) + { + return {}; + } + + void SHTextureLibrary::Remove(Handle mesh) + { + + } + + void SHTextureLibrary::BuildBuffers(Handle device, Handle cmdBuffer) + { + + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h new file mode 100644 index 00000000..a0167cba --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -0,0 +1,142 @@ +/************************************************************************************//*! +\file SHTextureLibrary.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 20, 2022 +\brief Contains definitions for all of the classes that deal with storage and + management of textures. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" +#include "Resource/ResourceLibrary.h" +#include "Math/SHMath.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + class SHVkLogicalDevice; + class SHVkCommandBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + class SHTexture + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using PixelChannel = uint8_t; + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + }; + /***********************************************************************************/ + /*! + \brief + Manages storage for all textures in the Graphics System as a single set of + textures. + */ + /***********************************************************************************/ + class SHTextureLibrary + { + public: + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /*******************************************************************************/ + /*! + + \brief + Adds a texture to the Texture Library. But this does not mean that the + textures have been added yet. A call to "BuildBuffers()" is required to + transfer all textures into the GPU. + + \param pixelCount + Number of pixels in this Mesh. + \param positions + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + + \return + Handle to the created Texture. This is not valid to be used until a call to + BuildBuffers(). + + */ + /*******************************************************************************/ + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData); + /*******************************************************************************/ + /*! + + \brief + Removes a mesh from the Texture Library. But this does not mean that the + textures have been removed yet. A call to "BuildBuffers()" is required to + finalise all changes. + + \param mesh + Handle to the mesh to remove. + + */ + /*******************************************************************************/ + void Remove(Handle mesh); + /***************************************************************************/ + /*! + + \brief + Finalises all changes to the Texture Library into the GPU buffers. + + \param device + Device used to create and update the buffers. + \param cmdBuffer + Command buffer used to set up transfers of data in the GPU memory. This + call must be preceded by calls to cmdBuffer's BeginRecording() and ended + with EndRecording(). Do recall to also submit the cmdBuffer to a transfer + queue. + */ + /***************************************************************************/ + void BuildBuffers(Handle device, Handle cmdBuffer); + + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetTextureBuffer() const noexcept { return texStorageBuffer; } + + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definition */ + /*-----------------------------------------------------------------------------*/ + struct AddJob + { + uint32_t PixelCount = 0; + const SHTexture::PixelChannel* PixelData = nullptr; + Handle Handle; + }; + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + // Manipulation Queues + std::vector addJobs; + std::vector> removeJobs; + // Tracking + ResourceLibrary textures{}; + std::vector> texOrder; + // CPU Storage + std::vector texStorage; + // GPU Storage + Handle texStorageBuffer{}; + // Flags + bool isDirty = true; + }; +} From 3cd538562cbb6a5152678d869317a07bd8dfeb1c Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 20 Sep 2022 19:32:28 +0800 Subject: [PATCH 141/793] More Scene Graph Fixes --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 42 +++++++++++++++---------- SHADE_Engine/src/Scene/SHSceneManager.h | 2 +- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 305c3fc0..821388b0 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -155,7 +155,7 @@ namespace SHADE return root; SHLOG_WARNING("Scene has no root object!") - return nullptr; + return nullptr; } SHSceneNode* SHSceneGraph::GetNode(EntityID entityID) const noexcept @@ -284,12 +284,17 @@ namespace SHADE void SHSceneNode::SetParent(SHSceneNode* parentNode) noexcept { if (parentNode == nullptr) + { SHLOG_WARNING("Removing Entity {}'s parent", entityID) + } // Handle self assignment if (parentNode == parent) return; + if (parent) + parent->RemoveChild(this); + parent = parentNode; // Update parent's children parent->AddChild(this); @@ -339,7 +344,7 @@ namespace SHADE return; } - auto PARENT_ITER = entityNodeMap.find(entityID); + auto PARENT_ITER = entityNodeMap.find(parent); if (PARENT_ITER == entityNodeMap.end()) { SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to parent to Entity {}", parent, entityID) @@ -384,24 +389,21 @@ namespace SHADE } //////////////////////////////////////// - SHSceneNode* removedChild = nullptr; - const auto ENTITY_MATCH = [&](SHSceneNode* node) + auto childIter = std::find_if(children.begin(), children.end(), [&](SHSceneNode* node) { - if (node->GetEntityID() == childID) - { - removedChild = node; - return true; - } + return node->GetEntityID() == childID; + }); + if (childIter == children.end()) + { + SHLOG_WARNING("Unable to remove Entity {} from Entity {} since it is not it's child!", childID, entityID) return false; - }; + } - children.end() = std::remove_if(children.begin(), children.end(), ENTITY_MATCH); + (*childIter)->parent = nullptr; + childIter = children.erase(childIter); - if (removedChild) - removedChild->parent = nullptr; - - return removedChild != nullptr; + return true; } bool SHSceneNode::RemoveChild(SHSceneNode* childToRemove) noexcept @@ -415,7 +417,14 @@ namespace SHADE } //////////////////////////////////////// - children.end() = std::remove(children.begin(), children.end(), childToRemove); + auto childIter = std::find(children.begin(), children.end(), childToRemove); + if (childIter == children.end()) + { + SHLOG_WARNING("Unable to remove Entity {} from Entity {} since it is not it's child!", childToRemove->entityID, entityID) + return false; + } + + childIter = children.erase(childIter); childToRemove->parent = nullptr; return true; @@ -429,7 +438,6 @@ namespace SHADE children.clear(); } - SHSceneNode* SHSceneGraph::AddNode(EntityID entityID, SHSceneNode* parent) { //////////////////////////////////////// diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index bdd8f596..72db1274 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -20,7 +20,7 @@ namespace SHADE { - class SHSceneManager + class SH_API SHSceneManager { private: //boolean to check if the scene has been changed From 9c69d41a4e8e0d870e7c189491b011442b07dc95 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Wed, 21 Sep 2022 00:49:52 +0800 Subject: [PATCH 142/793] Added 90% of transform component & transform system. --- SHADE_Engine/SHADE_Engine.vcxproj | 2 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 2 + .../src/Math/Transform/SHTransform.cpp | 9 -- SHADE_Engine/src/Math/Transform/SHTransform.h | 20 +-- .../Math/Transform/SHTransformComponent.cpp | 53 +++++--- .../src/Math/Transform/SHTransformComponent.h | 30 +++-- .../src/Math/Transform/SHTransformSystem.cpp | 121 ++++++++++++++++++ .../src/Math/Transform/SHTransformSystem.h | 57 +++++++++ 8 files changed, 239 insertions(+), 55 deletions(-) create mode 100644 SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp create mode 100644 SHADE_Engine/src/Math/Transform/SHTransformSystem.h diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 235ce56a..37ddf8f5 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -211,6 +211,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -307,6 +308,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 7e279e59..f52aebb0 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -499,6 +499,7 @@ Tools + @@ -740,5 +741,6 @@ Tools + \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransform.cpp b/SHADE_Engine/src/Math/Transform/SHTransform.cpp index e1b8cf2b..f51d73ec 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransform.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransform.cpp @@ -51,15 +51,6 @@ namespace SHADE return (position != rhs.position || rotation != rhs.rotation || scale != rhs.scale); } - /*-----------------------------------------------------------------------------------*/ - /* Getter Function Definitions */ - /*-----------------------------------------------------------------------------------*/ - - const SHMatrix& SHTransform::GetTRS() const - { - return trs; - } - /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Transform/SHTransform.h b/SHADE_Engine/src/Math/Transform/SHTransform.h index 4256bf83..9edd7fdd 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransform.h +++ b/SHADE_Engine/src/Math/Transform/SHTransform.h @@ -29,9 +29,11 @@ namespace SHADE static const SHTransform Identity; - SHVec3 position; - SHVec3 rotation; - SHVec3 scale; + SHVec3 position; + SHVec3 rotation; + SHVec3 scale; + + SHMatrix trs; /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ @@ -54,24 +56,12 @@ namespace SHADE [[nodiscard]] bool operator==(const SHTransform& rhs) const noexcept; [[nodiscard]] bool operator!=(const SHTransform& rhs) const noexcept; - /*---------------------------------------------------------------------------------*/ - /* Getter Functions */ - /*---------------------------------------------------------------------------------*/ - - [[nodiscard]] const SHMatrix& GetTRS() const; - /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ const SHMatrix& ComputeTRS(); - private: - /*---------------------------------------------------------------------------------*/ - /* Data Members */ - /*---------------------------------------------------------------------------------*/ - - SHMatrix trs; }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index 29b8b0bb..af56b67a 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -21,16 +21,15 @@ namespace SHADE SHTransformComponent::SHTransformComponent() noexcept : SHComponent {} - , parent { nullptr } {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - const SHTransform* SHTransformComponent::GetParent() const noexcept + bool SHTransformComponent::HasChanged() const noexcept { - return parent; + return dirty; } const SHVec3& SHTransformComponent::GetLocalPosition() const noexcept @@ -63,65 +62,83 @@ namespace SHADE return world.scale; } - SHMatrix SHTransformComponent::GetLocalToWorld() const noexcept + const SHMatrix& SHTransformComponent::GetLocalToWorld() const noexcept { - return parent != nullptr ? parent->GetTRS() : SHMatrix::Identity; + return local.trs; } SHMatrix SHTransformComponent::GetWorldToLocal() const noexcept { - return parent != nullptr ? SHMatrix::Inverse(parent->GetTRS()) : SHMatrix::Identity; + return SHMatrix::Inverse(local.trs); } const SHMatrix& SHTransformComponent::GetTRS() const noexcept { - return world.GetTRS(); + return world.trs; } /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHTransformComponent::SetParent(const SHTransform* parentTransform) noexcept - { - if (parent == nullptr) - SHLOG_WARNING("Removing parent transform from Entity {}", GetEID()) - - parent = parentTransform; - } - void SHTransformComponent::SetLocalPosition(const SHVec3& newLocalPosition) noexcept { + dirty = true; local.position = newLocalPosition; - updateQueue.push({ UpdateCommandType::LOCAL_POSITION, newLocalPosition }); } void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept { + dirty = true; local.rotation = newLocalRotation; - updateQueue.push({ UpdateCommandType::LOCAL_ROTATION, newLocalRotation }); + } + + void SHTransformComponent::SetLocalRotation(float pitch, float yaw, float roll) noexcept + { + dirty = true; + + local.rotation.x = pitch; + local.rotation.y = yaw; + local.rotation.z = roll; } void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept { + dirty = true; local.scale = newLocalScale; - updateQueue.push({ UpdateCommandType::LOCAL_SCALE, newLocalScale }); } void SHTransformComponent::SetWorldPosition(const SHVec3& newWorldPosition) noexcept { + dirty = true; + world.position = newWorldPosition; updateQueue.push({ UpdateCommandType::WORLD_POSITION, newWorldPosition }); } void SHTransformComponent::SetWorldRotation(const SHVec3& newWorldRotation) noexcept { + dirty = true; + world.rotation = newWorldRotation; updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation }); } + void SHTransformComponent::SetWorldRotation(float pitch, float yaw, float roll) noexcept + { + dirty = true; + + world.rotation.x = pitch; + world.rotation.y = yaw; + world.rotation.z = roll; + + updateQueue.push({ UpdateCommandType::WORLD_ROTATION, SHVec3{ pitch, yaw, roll} }); + } + void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept { + dirty = true; + world.scale = newWorldScale; updateQueue.push({ UpdateCommandType::WORLD_SCALE, newWorldScale }); } diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index eeaf758f..c3fa8a01 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -25,8 +25,14 @@ namespace SHADE class SH_API SHTransformComponent : public SHComponent { - public: + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + friend class SHTransformSystem; + + public: /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -45,7 +51,7 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] const SHTransform* GetParent () const noexcept; + [[nodiscard]] bool HasChanged () const noexcept; [[nodiscard]] const SHVec3& GetLocalPosition () const noexcept; [[nodiscard]] const SHVec3& GetLocalRotation () const noexcept; @@ -54,7 +60,7 @@ namespace SHADE [[nodiscard]] const SHVec3& GetWorldRotation () const noexcept; [[nodiscard]] const SHVec3& GetWorldScale () const noexcept; - [[nodiscard]] SHMatrix GetLocalToWorld () const noexcept; + [[nodiscard]] const SHMatrix& GetLocalToWorld () const noexcept; [[nodiscard]] SHMatrix GetWorldToLocal () const noexcept; [[nodiscard]] const SHMatrix& GetTRS () const noexcept; @@ -63,13 +69,13 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetParent (const SHTransform* parentTransform) noexcept; - void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; + void SetLocalRotation (float pitch, float yaw, float roll) noexcept; void SetLocalScale (const SHVec3& newLocalScale) noexcept; void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; + void SetWorldRotation (float pitch, float yaw, float roll) noexcept; void SetWorldScale (const SHVec3& newWorldScale) noexcept; private: @@ -79,10 +85,7 @@ namespace SHADE enum class UpdateCommandType { - LOCAL_POSITION - , LOCAL_ROTATION - , LOCAL_SCALE - , WORLD_POSITION + WORLD_POSITION , WORLD_ROTATION , WORLD_SCALE }; @@ -104,11 +107,12 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - const SHTransform* parent; - SHTransform local; - SHTransform world; + bool dirty; - UpdateQueue updateQueue; + SHTransform local; // Local TRS holds Local To World Transform + SHTransform world; + + UpdateQueue updateQueue; }; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp new file mode 100644 index 00000000..b9701020 --- /dev/null +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -0,0 +1,121 @@ +/**************************************************************************************** + * \file SHTransformSystem.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for the Transform System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHTransformSystem.h" + +// Project Headers +#include "Scene/SHSceneManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHTransformSystem::SHTransformSystem() + : SHSystemRoutine { "Transform Routine", false } + {} + + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHTransformSystem::Execute(double dt) noexcept + { + // Get the current scene graph to traverse and update + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + UpdateEntity(sceneGraph.GetRoot()); + + // Clear all dirty flags + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHTransformSystem::UpdateEntity(const SHSceneNode* node) + { + const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); + const bool HAS_PARENT_CHANGED = NODE_TRANSFORM && NODE_TRANSFORM->dirty; + + for (const auto* child : node->GetChildren()) + { + const bool HAS_TRANSFORM = SHComponentManager::HasComponent(child->GetEntityID()); + if (!HAS_TRANSFORM) + continue; + + auto* childTransform = SHComponentManager::GetComponent(child->GetEntityID()); + + if (childTransform->dirty || HAS_PARENT_CHANGED) + UpdateTransform(*childTransform, NODE_TRANSFORM); + + UpdateEntity(child); + } + } + + void SHTransformSystem::UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent) + { + SHMatrix localToWorld = SHMatrix::Identity; + SHMatrix worldToLocal = SHMatrix::Identity; + + if (parent) + { + localToWorld = parent->GetTRS(); + worldToLocal = SHMatrix::Inverse(tf.local.trs); + } + + while (!tf.updateQueue.empty()) + { + const auto& UPDATE_COMMAND = tf.updateQueue.front(); + + switch (UPDATE_COMMAND.type) + { + case SHTransformComponent::UpdateCommandType::WORLD_POSITION: + { + tf.local.position = SHVec3::Transform(UPDATE_COMMAND.data, worldToLocal); + break; + } + case SHTransformComponent::UpdateCommandType::WORLD_ROTATION: + { + tf.local.rotation = tf.world.rotation; + if (parent) + tf.local.rotation -= parent->GetLocalRotation(); + + break; + } + case SHTransformComponent::UpdateCommandType::WORLD_SCALE: + { + tf.local.scale = tf.world.scale; + if (parent) + tf.local.scale /= parent->GetLocalScale(); + + break; + } + default: break; // Redundant + } + + tf.updateQueue.pop(); + } + + tf.local.trs = localToWorld; + + tf.world.position = SHVec3::Transform(tf.local.position, localToWorld); + tf.world.rotation = tf.local.rotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); + tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); + + tf.world.ComputeTRS(); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h new file mode 100644 index 00000000..516bd209 --- /dev/null +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -0,0 +1,57 @@ +/**************************************************************************************** + * \file SHTransformSystem.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for the Transform System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "SHTransformComponent.h" +#include "Scene/SHSceneGraph.h" +#include "ECS_Base/System/SHSystemRoutine.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHTransformSystem : public SHSystemRoutine + { + public: + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHTransformSystem (); + ~SHTransformSystem () = default; + + SHTransformSystem (const SHTransformSystem&) = delete; + SHTransformSystem (SHTransformSystem&&) = delete; + + SHTransformSystem& operator= (const SHTransformSystem&) = delete; + SHTransformSystem& operator= (SHTransformSystem&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void Execute(double dt) noexcept override; + + private: + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + static void UpdateEntity (const SHSceneNode* node); + static void UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); + }; + + +} // namespace SHADE \ No newline at end of file From 415e47780ca2d129df5598fa517148b9556a29a7 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 21 Sep 2022 14:54:57 +0800 Subject: [PATCH 143/793] Completed Transform System --- .../Math/Transform/SHTransformComponent.cpp | 38 +++++++++++++++++++ .../src/Math/Transform/SHTransformComponent.h | 17 +++++---- .../src/Math/Transform/SHTransformSystem.cpp | 4 +- .../src/Math/Transform/SHTransformSystem.h | 4 ++ 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index af56b67a..cdc5105f 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -21,8 +21,46 @@ namespace SHADE SHTransformComponent::SHTransformComponent() noexcept : SHComponent {} + , dirty { true } {} + SHTransformComponent::SHTransformComponent(const SHTransformComponent& rhs) noexcept + : SHComponent {} + , dirty { true } + , local { rhs.local } + , world { rhs.world } + {} + + SHTransformComponent::SHTransformComponent(SHTransformComponent&& rhs) noexcept + : SHComponent {} + , dirty { true } + , local { std::move(rhs.local) } + , world { std::move(rhs.world) } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHTransformComponent& SHTransformComponent::operator=(const SHTransformComponent& rhs) noexcept + { + dirty = true; + local = rhs.local; + world = rhs.world; + + return *this; + } + + SHTransformComponent& SHTransformComponent::operator=(SHTransformComponent&& rhs) noexcept + { + dirty = true; + local = std::move(rhs.local); + world = std::move(rhs.world); + + return *this; + } + + /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index c3fa8a01..7f7dd473 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -37,15 +37,18 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - ~SHTransformComponent () override = default; + ~SHTransformComponent () override = default; - SHTransformComponent () noexcept; + SHTransformComponent () noexcept; + SHTransformComponent (const SHTransformComponent& rhs) noexcept; + SHTransformComponent (SHTransformComponent&& rhs) noexcept; - // TODO(Diren): Do I implement these in a specific manner or delete? - SHTransformComponent (const SHTransformComponent&) = delete; - SHTransformComponent (SHTransformComponent&&) = delete; - SHTransformComponent& operator=(const SHTransformComponent&) = delete; - SHTransformComponent& operator=(SHTransformComponent&&) = delete; + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHTransformComponent& operator=(const SHTransformComponent& rhs) noexcept; + SHTransformComponent& operator=(SHTransformComponent&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index b9701020..6a1daff2 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -37,8 +37,6 @@ namespace SHADE // Get the current scene graph to traverse and update auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); UpdateEntity(sceneGraph.GetRoot()); - - // Clear all dirty flags } /*-----------------------------------------------------------------------------------*/ @@ -62,6 +60,8 @@ namespace SHADE UpdateTransform(*childTransform, NODE_TRANSFORM); UpdateEntity(child); + + childTransform->dirty = false; } } diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 516bd209..5eebd292 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -35,6 +35,10 @@ namespace SHADE SHTransformSystem (const SHTransformSystem&) = delete; SHTransformSystem (SHTransformSystem&&) = delete; + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + SHTransformSystem& operator= (const SHTransformSystem&) = delete; SHTransformSystem& operator= (SHTransformSystem&&) = delete; From 8d2b6aec466a68277cc59a7fa66dea6204782bb2 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 21 Sep 2022 15:41:30 +0800 Subject: [PATCH 144/793] Descriptor set fix and camera descriptor set Fixed SHVkDescriptorSetGroup bug with vkLayouts inside the ctor Added descriptor set to renderer for camera Logical Device now stores a buffer alignment variable for UBOs --- .../Graphics/Commands/SHVkCommandBuffer.cpp | 6 ++++ .../src/Graphics/Commands/SHVkCommandBuffer.h | 2 ++ .../Descriptors/SHVkDescriptorSetGroup.cpp | 5 ++- .../Descriptors/SHVkDescriptorSetGroup.h | 7 ++-- .../Graphics/Devices/SHVkLogicalDevice.cpp | 33 ++++++++++--------- .../src/Graphics/Devices/SHVkLogicalDevice.h | 21 ++++++++---- .../Graphics/Devices/SHVkPhysicalDevice.cpp | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- .../MiddleEnd/Interface/SHRenderer.cpp | 18 ++++++++-- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 24 +++++++++++--- .../MiddleEnd/Interface/SHViewport.cpp | 4 +-- .../Graphics/MiddleEnd/Interface/SHViewport.h | 4 ++- SHADE_Engine/src/SHpch.h | 1 + 13 files changed, 93 insertions(+), 35 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index b393971c..6898b7e0 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -8,6 +8,7 @@ #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" namespace SHADE @@ -353,6 +354,11 @@ namespace SHADE } } + void SHVkCommandBuffer::BindDescriptorSet(Handle descSetGroup, vk::PipelineBindPoint bindPoint, uint32_t firstSet, std::span dynamicOffsets) + { + vkCommandBuffer.bindDescriptorSets (bindPoint, boundPipelineLayoutHdl->GetVkPipelineLayout(), firstSet, descSetGroup->GetVkHandle(), dynamicOffsets); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index c478bddf..d945fce8 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -15,6 +15,7 @@ namespace SHADE class SHVkFramebuffer; class SHVkPipeline; class SHVkBuffer; + class SHVkDescriptorSetGroup; enum class SH_CMD_BUFFER_TYPE { @@ -110,6 +111,7 @@ namespace SHADE void BindPipeline (Handle const& pipelineHdl) noexcept; void BindVertexBuffer (uint32_t bindingPoint, Handle const& buffer, vk::DeviceSize offset) noexcept; void BindIndexBuffer (Handle const& buffer, uint32_t startingIndex) const noexcept; + void BindDescriptorSet (Handle descSetGroup, vk::PipelineBindPoint bindPoint, uint32_t firstSet, std::span dynamicOffsets); // Draw Commands void DrawArrays (uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const noexcept; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index aeea6818..4e83d319 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -46,12 +46,15 @@ namespace SHADE //for (auto& layout : layouts) for (uint32_t i = 0; i < layouts.size(); ++i) { - vkLayouts.push_back(layouts[i]->GetVkHandle()); + vkLayouts[i] = layouts[i]->GetVkHandle(); } // Check for variable descriptor count if (variableDescCounts.size() != layouts.size()) + { SHLOG_ERROR("Number of variable descriptor counts does not match number of layouts. If a layout does not use variable counts, pass in 0. "); + return; + } // Prepare variable descriptor counts vk::DescriptorSetVariableDescriptorCountAllocateInfo variableAllocInfo{}; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index 25685e3e..b65fb1e6 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -56,10 +56,10 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Descriptor set writing */ /*-----------------------------------------------------------------------------*/ - void ModifyWriteDescImage (uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept; - void UpdateDescriptorSet (void) noexcept; + void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept; + void UpdateDescriptorSet(void) noexcept; - void UpdateSingleDescriptorSetImages (uint32_t set, uint32_t binding) noexcept; + void UpdateSingleDescriptorSetImages(uint32_t set, uint32_t binding) noexcept; /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -70,6 +70,7 @@ namespace SHADE /// Handle to the Vulkan Descriptor Set. [[nodiscard]] inline const std::vector& GetVkHandle() { return descSets; } + inline const uint32_t GetNumDescriptorSets(void) const noexcept { return static_cast(descSets.size()); } private: /*-----------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 0b7e4fdf..a956af2c 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -208,21 +208,8 @@ namespace SHADE InitializeVMA(); - // TODO: Create pipeline caches - // TODO: Create Descriptor pools - //auto poolSizes = std::array - //{ - // SHDescriptorPoolSize {SHDescriptorType::COMBINED_SAMPLER, 1000} // hard coded descriptor count - //}; - - //SHDescriptorPoolParams poolParams - //{ - // .poolSizes = poolSizes, - // .maxDescriptorSets = 1000, - //}; - - //descriptorPool.Initialize(*this, poolParams); - //deviceStorage.Init(*this, queueFamilyIndices.indices[static_cast(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS)].value()); + uboBufferMemoryAlignment = parentPhysicalDeviceHdl->GetDeviceProperties().limits.minUniformBufferOffsetAlignment; + ssboBufferMemoryAlignment = parentPhysicalDeviceHdl->GetDeviceProperties().limits.minStorageBufferOffsetAlignment; } SHVkLogicalDevice::SHVkLogicalDevice(SHVkLogicalDevice&& rhs) noexcept @@ -299,6 +286,17 @@ namespace SHADE return VkMemoryPropertyFlagBits::VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM; } + uint32_t SHVkLogicalDevice::PadUBOSize(uint32_t originalSize) const noexcept + { + uint32_t alignedSize = originalSize; + //uint32_t minBuffer + if (uboBufferMemoryAlignment > 0) + { + alignedSize = (alignedSize + uboBufferMemoryAlignment - 1) & ~(uboBufferMemoryAlignment - 1); + } + return alignedSize; + } + /***************************************************************************/ /*! @@ -672,6 +670,11 @@ namespace SHADE return static_cast(SH_Q_FAM::INVALID); } + Handle SHVkLogicalDevice::GetParentPhysicalDevice(void) const noexcept + { + return parentPhysicalDeviceHdl; + } + //SHDescriptorPool const& SHLogicalDevice::GetDescriptorPool(void) const noexcept //{ // return descriptorPool; diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 6b73e38e..6c59572a 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -69,7 +69,11 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - //vk::DeviceSize bufferMemoryAlignment{ 64 }; + //! UBO alignment + vk::DeviceSize uboBufferMemoryAlignment; + + //! SSBO alignment + vk::DeviceSize ssboBufferMemoryAlignment; //! Vulkan handle vk::Device vkLogicalDevice; @@ -113,9 +117,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ + // Miscellaneous functions void WaitIdle (void) noexcept; uint32_t FindMemoryType (uint32_t typeFilter, vk::MemoryPropertyFlags properties); - + uint32_t PadUBOSize (uint32_t originalSize) const noexcept; + + // creation functions Handle CreateSurface (HWND const& windowHandle) const noexcept; Handle CreateSwapchain ( Handle const& surfaceHdl, @@ -190,10 +197,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - vk::Device const& GetVkLogicalDevice (void) const noexcept; - Handle const& GetQueue (SH_Q_FAM queueFamArrayIndex, uint8_t queueIndex) const; - VmaAllocator const& GetVMAAllocator (void) noexcept; - SHQueueFamilyIndex GetQueueFamilyIndex (SH_Q_FAM family) const noexcept; + vk::Device const& GetVkLogicalDevice (void) const noexcept; + Handle const& GetQueue (SH_Q_FAM queueFamArrayIndex, uint8_t queueIndex) const; + VmaAllocator const& GetVMAAllocator (void) noexcept; + SHQueueFamilyIndex GetQueueFamilyIndex (SH_Q_FAM family) const noexcept; + + Handle GetParentPhysicalDevice (void) const noexcept; //vk::DeviceSize GetBufferAlignment (void) const noexcept; //SHDescriptorPool const& GetDescriptorPool(void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp index 00a5666b..53b352b7 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDevice.cpp @@ -27,6 +27,7 @@ namespace SHADE queueFamilyProperties = vkPhysicalDevice.getQueueFamilyProperties(); deviceFeatures = vkPhysicalDevice.getFeatures2(); + } SHVkPhysicalDevice::SHVkPhysicalDevice(SHVkPhysicalDevice&& rhs) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 2f8f501d..1130a02b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -167,7 +167,7 @@ namespace SHADE debugWorldRenderer->SetCamera(worldCamera);*/ // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); + worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), descPool, globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 37493176..90e137fe 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -18,16 +18,23 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" namespace SHADE { /*-----------------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------------*/ - SHRenderer::SHRenderer(Handle viewport, Handle renderGraph) + SHRenderer::SHRenderer(Handle logicalDevice, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph) : viewport { viewport } , renderGraph { renderGraph } - {} + { + cameraDescriptorSet = logicalDevice->CreateDescriptorSetGroup(descriptorPool, { cameraDescLayout }, { 1 }); + cpuCameraData.resize(numFrames); + + cameraDataAlignedSize = logicalDevice->PadUBOSize(sizeof(SHShaderCameraData)); + } /*-----------------------------------------------------------------------------------*/ /* Camera Registration */ @@ -45,6 +52,13 @@ namespace SHADE renderGraph->Execute(frameIndex, graphScopeBuffers); } + void SHRenderer::BindDescriptorSet(Handle cmdBuffer, uint32_t frameIndex) noexcept + { + std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; + + cmdBuffer->BindDescriptorSet(cameraDescriptorSet, vk::PipelineBindPoint::eGraphics, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + } + Handle SHRenderer::GetRenderGraph(void) const noexcept { return renderGraph; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 5fca8162..843ad6bf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -19,6 +19,8 @@ of DigiPen Institute of Technology is prohibited. #include "SHCamera.h" #include "Resource/Handle.h" #include "Graphics/RenderGraph/SHRenderGraph.h" +#include "Math/SHMath.h" +#include namespace SHADE { @@ -36,6 +38,13 @@ namespace SHADE class SHCamera; class SHVkDescriptorSetGroup; class SHGraphicsGlobalData; + class SHVkDescriptorPool; + + struct SHShaderCameraData + { + SHVec4 cameraPosition; + SHMatrix viewProjectionMatrix; + }; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -54,7 +63,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ - SHRenderer(Handle viewport, Handle renderGraph); + SHRenderer(Handle logicalDevice, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph); /*-----------------------------------------------------------------------------*/ /* Camera Registration */ @@ -65,6 +74,7 @@ namespace SHADE /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ void Draw(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; + void BindDescriptorSet (Handle cmdBuffer, uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ @@ -75,8 +85,14 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - Handle viewport; - Handle camera; - Handle renderGraph; + //! Vulkan UBOs need to be aligned, this is pad SHShaderCameraData struct + uint32_t cameraDataAlignedSize; + + Handle viewport; + Handle camera; + Handle renderGraph; + Handle cameraDescriptorSet; + std::vector cpuCameraData; + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 1bbab6a4..1e38acf1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -49,10 +49,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Renderer Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHViewport::AddRenderer(ResourceManager& resourceManager, Handle renderGraph) + Handle SHViewport::AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph) { // Create the renderer - auto renderer = resourceManager.Create(GetHandle(), renderGraph); + auto renderer = resourceManager.Create(device, numFrames, descriptorPool, cameraDescLayout, GetHandle(), renderGraph); // Store renderers.emplace_back(renderer); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 6c75861c..608446a3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -30,6 +30,8 @@ namespace SHADE class SHVkImageView; class ResourceManager; class SHRenderGraph; + class SHVkDescriptorPool; + class SHVkDescriptorSetLayout; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -56,7 +58,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Renderers Registration Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddRenderer(ResourceManager& resourceManager, Handle renderGraph); + Handle AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); void RemoveRenderer(Handle renderer); /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/SHpch.h b/SHADE_Engine/src/SHpch.h index 43a832f3..018113f0 100644 --- a/SHADE_Engine/src/SHpch.h +++ b/SHADE_Engine/src/SHpch.h @@ -31,5 +31,6 @@ #include #include #include +#include #include "Common/SHCommonTypes.h" From 270c8240c1e672aeaf75ea2aac456b2c5458e649 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 21 Sep 2022 16:29:54 +0800 Subject: [PATCH 145/793] Shifted Graphics system to SBTestScene --- .../src/Application/SBApplication.cpp | 26 +++++++------------ SHADE_Application/src/Scenes/SBTestScene.cpp | 20 ++++++++++++++ SHADE_Engine/src/Scene/SHSceneGraph.cpp | 2 +- SHADE_Engine/src/Scene/SHSceneManager.h | 1 + 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 805e8148..fa8a1888 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -21,6 +21,11 @@ #include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" #include "ECS_Base/Managers/SHEntityManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Scene/SHSceneManager.h" + +#include "Scenes/SBTestScene.h" + +using namespace SHADE; namespace Sandbox { @@ -45,7 +50,7 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHComponentManager::CreateComponentSparseSet(); - + graphicsSystem->SetWindow(&window); sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); @@ -61,28 +66,17 @@ namespace Sandbox // Set up scripting SHADE::SHScriptEngine::Init(); - // Create temp meshes - const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); - graphicsSystem->BuildMeshBuffers(); - - // Create Materials - auto matInst = graphicsSystem->AddMaterialInstance(); - - // Create entity and add mesh - auto entity = SHADE::SHEntityManager::CreateEntity(); - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); - renderable.Mesh = CUBE_MESH; - renderable.SetMaterial(matInst); - renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); + SHSceneManager::InitSceneManager("TestScene"); } void SBApplication::Update(void) { SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - //TODO: Change true to window is open while (!window.WindowShouldClose()) { + SHSceneManager::UpdateSceneManager(); + SHSceneManager::SceneUpdate(1/60.0f); //#ifdef SHEDITOR //#endif graphicsSystem->BeginRender(); @@ -108,7 +102,7 @@ namespace Sandbox #ifdef SHEDITOR SHADE::SHEditor::Exit(); #endif - + SHSceneManager::Exit(); SHADE::SHScriptEngine::Exit(); SHADE::SHSystemManager::Exit(); SDL_DestroyWindow(sdlWindow); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 46b1bb84..873d0fed 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -1,6 +1,13 @@ #include "SBpch.h" #include "SBTestScene.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Scene/SHSceneManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" + using namespace SHADE; namespace Sandbox @@ -21,7 +28,20 @@ namespace Sandbox } void SBTestScene::Init() { + SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); + // Create temp meshes + const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); + graphicsSystem->BuildMeshBuffers(); + // Create Materials + auto matInst = graphicsSystem->AddMaterialInstance(); + + // Create entity and add mesh + auto entity = SHADE::SHEntityManager::CreateEntity(); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); + renderable.Mesh = CUBE_MESH; + renderable.SetMaterial(matInst); + renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); } void SBTestScene::Update(float dt) { diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 821388b0..7a03e71d 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -8,7 +8,7 @@ * of DigiPen Institute of Technology is prohibited. ****************************************************************************************/ -#include +#include "SHpch.h" // Primary Header #include "SHSceneGraph.h" diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index 72db1274..9682e4c2 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -16,6 +16,7 @@ #include "ECS_Base/General/SHFamily.h" #include "SHScene.h" #include +#include "SH_API.h" namespace SHADE { From ac379e3ef320fa8fbfe592e41500b13306a4424d Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 21 Sep 2022 18:23:01 +0800 Subject: [PATCH 146/793] Added method to scene graph to easily traverse and execute a unary function --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 14 ++++++++++++ SHADE_Engine/src/Scene/SHSceneGraph.h | 30 ++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 821388b0..f5df85d7 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -507,6 +507,11 @@ namespace SHADE ReleaseNode(node); } + void SHSceneGraph::Traverse (const UnaryPredicate& predicate) const + { + TraverseAndInvokePredicate(root, predicate); + } + /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -541,4 +546,13 @@ namespace SHADE delete node; } + void SHSceneGraph::TraverseAndInvokePredicate(const SHSceneNode* node, const UnaryPredicate& predicate) + { + for (auto* child : node->children) + { + predicate(child); + TraverseAndInvokePredicate(child, predicate); + } + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 38fcc414..bdb8f52c 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -18,12 +18,25 @@ namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + + class SHSceneGraph; + /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ class SH_API SHSceneNode { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHSceneGraph; + public: /*---------------------------------------------------------------------------------*/ /* Data Members */ @@ -71,6 +84,10 @@ namespace SHADE void RemoveAllChildren () noexcept; private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + EntityID entityID; SHSceneNode* parent; std::vector children; @@ -83,7 +100,10 @@ namespace SHADE /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - using EntityNodeMap = std::unordered_map; + using EntityNodeMap = std::unordered_map; + + using UnaryPredicate = void (*)(SHSceneNode*); + /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ @@ -124,6 +144,9 @@ namespace SHADE bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; void Reset () noexcept; + void Traverse (const UnaryPredicate& predicate) const; + + private: /*---------------------------------------------------------------------------------*/ /* Data Members */ @@ -136,8 +159,9 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHSceneNode* AllocateNode (EntityID entityID); - void ReleaseNode (SHSceneNode* node) noexcept; + SHSceneNode* AllocateNode (EntityID entityID); + void ReleaseNode (SHSceneNode* node) noexcept; + static void TraverseAndInvokePredicate (const SHSceneNode* node, const UnaryPredicate& predicate); }; From 14eed4c7260acaa792d48c080f4349a7ffd0a52b Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 21 Sep 2022 18:30:20 +0800 Subject: [PATCH 147/793] Added missing active check in transform system --- .../src/Math/Transform/SHTransformSystem.cpp | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 6a1daff2..879c2d34 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -16,6 +16,8 @@ // Project Headers #include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Tools/SHException.h" namespace SHADE { @@ -35,8 +37,8 @@ namespace SHADE void SHTransformSystem::Execute(double dt) noexcept { // Get the current scene graph to traverse and update - auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - UpdateEntity(sceneGraph.GetRoot()); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + UpdateEntity(SCENE_GRAPH.GetRoot()); } /*-----------------------------------------------------------------------------------*/ @@ -50,6 +52,20 @@ namespace SHADE for (const auto* child : node->GetChildren()) { + // Active states of entities should sync with scene nodes + const bool IS_NODE_ACTIVE = child->isActive; + + #ifdef _DEBUG + const bool IS_ENTITY_ACTIVE = SHEntityManager::GetEntityByID(child->GetEntityID())->GetActive(); + SHASSERT(IS_NODE_ACTIVE == IS_ENTITY_ACTIVE, "Entity and Node active states are not synced!") + #endif + + if (!IS_NODE_ACTIVE) + { + UpdateEntity(child); + continue; + } + const bool HAS_TRANSFORM = SHComponentManager::HasComponent(child->GetEntityID()); if (!HAS_TRANSFORM) continue; @@ -61,13 +77,14 @@ namespace SHADE UpdateEntity(child); + // Clear dirty flag after all children are updated childTransform->dirty = false; } } void SHTransformSystem::UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent) { - SHMatrix localToWorld = SHMatrix::Identity; + SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; if (parent) @@ -103,7 +120,8 @@ namespace SHADE break; } - default: break; // Redundant + // Redundant + default: break; } tf.updateQueue.pop(); From ba4d85a4e1d10ace8df91dd42d9d89ef39fdeb19 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 21 Sep 2022 22:20:52 +0800 Subject: [PATCH 148/793] SP3-103 SP3-104 Implementing Mesh Loader for asset manager to use assimp to load gltf Loading of dds from gltf file planned ahead --- .gitignore | 2 + SHADE_Engine/SHADE_Engine.vcxproj | 346 -------- SHADE_Engine/SHADE_Engine.vcxproj.filters | 745 ------------------ .../src/Assets/Libraries/SHMeshLoader.cpp | 31 + .../src/Assets/Libraries/SHMeshLoader.h | 15 + SHADE_Engine/src/Assets/SHAsset.h | 16 + SHADE_Engine/src/Assets/SHAssetManager.cpp | 184 +---- SHADE_Engine/src/Assets/SHAssetManager.h | 53 +- SHADE_Engine/src/Assets/SHAssetMeta.cpp | 102 --- SHADE_Engine/src/Assets/SHAssetMeta.h | 60 +- .../src/Assets/SHAssetMetaHandler.cpp | 15 +- 11 files changed, 106 insertions(+), 1463 deletions(-) delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj.filters create mode 100644 SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h create mode 100644 SHADE_Engine/src/Assets/SHAsset.h delete mode 100644 SHADE_Engine/src/Assets/SHAssetMeta.cpp diff --git a/.gitignore b/.gitignore index c7fefb6e..1fbf8160 100644 --- a/.gitignore +++ b/.gitignore @@ -359,3 +359,5 @@ MigrationBackup/ *.vcxproj.filters *.sln *.csproj + +*.filters diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj deleted file mode 100644 index d1739037..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ /dev/null @@ -1,346 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - true - Win32Proj - SHADE_Engine - 10.0 - - - - DynamicLibrary - true - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - - - - - - - - - - - true - ..\bin\Debug\ - ..\bin_int\Debug\SHADE_Engine\ - SHADE_Engine - .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;..\Dependencies\tinyddsloader;$(IncludePath) - - - false - ..\bin\Release\ - ..\bin_int\Release\SHADE_Engine\ - SHADE_Engine - .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;..\Dependencies\tinyddsloader;$(IncludePath) - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) - src;%(AdditionalIncludeDirectories) - EditAndContinue - Disabled - false - MultiThreadedDebugDLL - true - stdcpp20 - - - Windows - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Debug\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) - src;%(AdditionalIncludeDirectories) - Full - true - true - false - true - MultiThreadedDLL - true - stdcpp20 - - - Windows - true - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Release\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - - - - - - - - - - - - - - {88F1A057-74BE-FB62-9DD7-E90A890331F1} - - - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} - - - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} - - - {2ECAB41A-1A98-A820-032C-1947EF988485} - - - {C0FF640D-2C14-8DBE-F595-301E616989EF} - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters deleted file mode 100644 index 46dceac0..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ /dev/null @@ -1,745 +0,0 @@ - - - - - {3824E0A7-24C6-0A7E-0D81-1ED2F9C191CE} - - - {8EEA3EAC-7A8C-6982-6347-7DD64F88F0D2} - - - {1AB26817-067F-C322-2F98-B1CA1BC4F8B0} - - - {EFD23933-5B34-1741-E4A1-5DF350024E00} - - - {261D0942-92A8-7606-9BB9-F9FA07C4D206} - - - {BEBC9142-2A48-FF06-3359-82FB9F635B07} - - - {07FEB307-F3F6-D259-1C29-B8DE0881B265} - - - {37718753-A387-85E9-ECFE-100B58545671} - - - {EE037863-5A8F-E527-63A0-681CCFAA4128} - - - {078AA1A3-F318-2B6D-9C37-3F6888A53B13} - - - {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} - - - {3A8963B1-262B-8E87-0FE6-A1DBFB2615D8} - - - {80E7870B-ECF0-877C-756C-9E7CE174937C} - - - {8A8E2B37-7646-6D84-DF4D-46E0CB240875} - - - {1653CE33-0220-293F-2B39-17E717655ECD} - - - {92C817CE-7EC1-3620-A7F3-1BA5934B162C} - - - {17C745C0-83DD-4356-CC54-CF7738AA14DE} - - - {51443AC7-3D28-FB1C-A688-F56F928BE59E} - - - {573A6CF2-43C9-F5BB-ECE7-09B7D8550662} - - - {08DBDC43-F4D3-FB95-1D06-E11A095EDBA1} - - - {4AD5CA42-3664-540C-DF82-6807CBF064B2} - - - {FB5EE099-67EA-4D5E-70FB-D052DC05AA5E} - - - {BA26540B-263D-52A1-6FB4-DDC2DB092329} - - - {4B204703-3704-0859-A064-02AC8C67F2DA} - - - {EBA1D3FF-D75C-C3AB-8014-3CF66CAE0D3C} - - - {8CDBA7C9-F8E8-D5AF-81CF-D19AEDDBA166} - - - {2460C057-1070-6C28-7929-D14665585BC1} - - - {FBD334F8-67EA-328E-B061-BEAF1CB70316} - - - {1DD51CAD-8960-8A71-9271-0D66FE7BE671} - - - {57DAB30C-4369-3DD6-EC87-51D1D8F54D7C} - - - {9C0DAFD9-086F-8CE7-91DC-D299FD3CC3A6} - - - {EF2D07CC-DB26-261E-0459-0BA3F0B0052A} - - - {3AEF06DD-A6D2-151D-AFD5-43591B38DC6D} - - - {245F5AB0-1085-2417-F9CA-A9E2E58F49E3} - - - {03DB39DE-EFBE-FA33-581F-F5864422E5B5} - - - {576DF841-4392-47C2-6CDD-2C52586146E0} - - - {75F29FE5-6102-4CB6-CABB-B0D4B6EA3A4F} - - - {5BAB2A92-478F-EBE7-B0EF-E53A9CF2D569} - - - {B3B14D12-9FC1-F9E2-087B-5E01F4A9E87B} - - - {AFF4887C-9B2B-8A0D-4418-7010302E060F} - - - {F1B75745-5D6D-D03A-E661-CA115216C73E} - - - {AC05897C-983C-8A0D-4129-70102D3F060F} - - - {ED6CDF9B-D939-3AA7-0253-284FEE7E6F35} - - - {B3F7140E-1F0C-3DBF-E88D-E01E546139F0} - - - {985A7358-04C5-27CF-4D03-D974B9AC0524} - - - {16CF2D0E-82E3-55BF-4B65-F91EB73852F0} - - - - - Assets - - - Assets - - - Assets - - - Assets - - - Common - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\Events - - - ECS_Base\Events - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\UnitTesting - - - ECS_Base\UnitTesting - - - ECS_Base\UnitTesting - - - Engine - - - Events - - - Events - - - Events - - - Events - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math - - - Math - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Meta - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - - - - Scene - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - - - Assets - - - Assets - - - Assets - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\UnitTesting - - - Engine - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Resource - - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp new file mode 100644 index 00000000..9a1a4599 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -0,0 +1,31 @@ +#include "SHpch.h" +#include "SHMeshLoader.h" +#include +#include + +namespace SHADE +{ + Assimp::Importer SHMeshLoader::aiImporter; + + bool SHMeshLoader::LoadMesh(AssetPath path) + { + const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), + aiProcess_Triangulate + // Make sure we get triangles rather than nvert polygons + | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping + | aiProcess_TransformUVCoords + // preprocess UV transformations (scaling, translation ...) + | aiProcess_FindInstances + // search for instanced meshes and remove them by references to one master + | aiProcess_CalcTangentSpace + // calculate tangents and bitangents if possible + | aiProcess_JoinIdenticalVertices + // join identical vertices/ optimize indexing + | aiProcess_RemoveRedundantMaterials // remove redundant materials + | aiProcess_FindInvalidData + // detect invalid model data, such as invalid normal vectors + | aiProcess_PreTransformVertices // pre-transform all vertices + | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs + ); + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h new file mode 100644 index 00000000..32f295df --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -0,0 +1,15 @@ +#pragma once +#include "../SHAssetMacros.h" +#include + +namespace SHADE +{ + class SHMeshLoader + { + private: + static Assimp::Importer aiImporter; + + public: + static bool LoadMesh(AssetPath path); + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h new file mode 100644 index 00000000..1f05b742 --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Filesystem/SHFileSystem.h" +#include "SHAssetMacros.h" + +namespace SHADE +{ + struct SHAsset + { + AssetName name; + AssetID ID; + AssetType type; + AssetPath path; + FolderLocation location; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index aaaa78ab..98c019ce 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -13,6 +13,7 @@ #include "SHAssetManager.h" #include "SHAssetMetaHandler.h" #include "Filesystem/SHFileSystem.h" +#include namespace SHADE { @@ -20,12 +21,7 @@ namespace SHADE std::unordered_map* SHAssetManager::audioSoundList; std::vector SHAssetManager::metaCollection; - std::unordered_map SHAssetManager::pathRegistry; - std::unordered_map SHAssetManager::typeRegistry; - std::unordered_map SHAssetManager::nameIDRegistry; - std::unordered_map SHAssetManager::idNameRegistry; - std::unordered_map SHAssetManager::filenameRegistry; - std::unordered_map SHAssetManager::filenameReverse; + std::unordered_map SHAssetManager::assetRegistry; /**************************************************************************** * \brief Static function to generate resource ID. @@ -50,25 +46,7 @@ namespace SHADE { for (auto const& meta : metaCollection) { - SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.GetID()].string().append(META_EXTENSION)); - } - } - - /**************************************************************************** - * \param Name of resource - - * \brief Gets resource ID - ****************************************************************************/ - AssetID SHAssetManager::GetIDFromName(AssetName const& name) noexcept - { - if (nameIDRegistry.find(name) == nameIDRegistry.end()) - { - // Error resource does not exist - return 0; - } - else - { - return nameIDRegistry[name]; + SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.id].string().append(META_EXTENSION)); } } @@ -92,89 +70,6 @@ namespace SHADE return std::filesystem::path(ASSET_ROOT + folder + path.filename().string()); } - std::vector SHAssetManager::GetIDFromNames(std::initializer_list const& files) noexcept - { - std::vector result; - for (auto const& file : files) - { - result.push_back(GetIDFromName(file)); - } - - return result; - } - - /**************************************************************************** - * \param file name - - * \brief Returns resource ID from provided file name - ****************************************************************************/ - AssetID SHAssetManager::GetIDFromFilename(std::string const& name) noexcept - { - if (filenameRegistry.find(name) == filenameRegistry.end()) - { - // Error resource does not exist - return 0; - } - else - { - return filenameRegistry[name]; - } - } - - /**************************************************************************** - * \brief Get filename from resource ID. - * - * \param id - id of asset - * \return std::string - ****************************************************************************/ - std::string SHAssetManager::GetFilenameFromID(AssetID id) noexcept - { - if (filenameReverse.find(id) == filenameReverse.end()) - { - // Error resource does not exist - return FILE_NOT_FOUND_ERR; - } - else - { - return filenameReverse[id]; - } - } - - /**************************************************************************** - * \brief Get asset name from resource ID. - * - * \param id - resource id - * \return - std::string - ****************************************************************************/ - AssetName SHAssetManager::GetNameFromID(AssetID id) noexcept - { - if (idNameRegistry.find(id) == idNameRegistry.end()) - { - // Error - return "INVALID"; - } - else - { - return idNameRegistry[id]; - } - } - - /**************************************************************************** - * \param list of file names - - * \brief Returns vector of resource IDs - ****************************************************************************/ - std::vector SHAssetManager::GetIDFromFilenames(std::initializer_list const& files) noexcept - { - std::vector result; - for (auto const& file : files) - { - result.push_back(GetIDFromFilename(file)); - } - - return result; - } - /**************************************************************************** * \brief Get record of all resources currently loaded with name and id. * @@ -185,28 +80,6 @@ namespace SHADE return nameIDRegistry; } - /**************************************************************************** - * \brief Get type of asset from ID - * - * \param resource id of file - * \return AssetType enum class value - ****************************************************************************/ - AssetType SHAssetManager::GetTypeFromID(AssetID id) noexcept - { - return typeRegistry[id]; - } - - /**************************************************************************** - * \brief Get registered path of asset. - * - * \param resource id of file - * \return std::filesystem::path - ****************************************************************************/ - AssetPath SHAssetManager::GetPathFromID(AssetID id) noexcept - { - return pathRegistry[id]; - } - /**************************************************************************** * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM * ASSETS CREATED BY THE ENGINE. @@ -219,9 +92,8 @@ namespace SHADE { AssetID id{ GenerateAssetID() }; SHAssetMeta meta; - meta.SetID(id); - meta.SetType(type); - meta.SetVersion(ASSET_META_VER); + meta.id = id; + meta.type = type; std::string folder; switch (type) @@ -340,12 +212,12 @@ namespace SHADE SHAssetMeta meta = SHAssetMetaHandler::RetrieveMetaData(metaPath); metaCollection.push_back(meta); - pathRegistry.emplace(meta.GetID(), path); - typeRegistry.emplace(meta.GetID(), meta.GetType()); - nameIDRegistry.emplace(GetNameFromPath(path), meta.GetID()); - idNameRegistry.emplace(meta.GetID(), GetNameFromPath(path)); - filenameRegistry.emplace(path.filename().string(), meta.GetID()); - filenameReverse.emplace(meta.GetID(), path.filename().string()); + pathRegistry.emplace(meta.id, path); + typeRegistry.emplace(meta.id, meta.type); + nameIDRegistry.emplace(GetNameFromPath(path), meta.id); + idNameRegistry.emplace(meta.id, GetNameFromPath(path)); + filenameRegistry.emplace(path.filename().string(), meta.id); + filenameReverse.emplace(meta.id, path.filename().string()); } /**************************************************************************** @@ -356,24 +228,36 @@ namespace SHADE SHAssetMeta SHAssetManager::RegisterAssetNew(AssetPath const& resource) noexcept { SHAssetMeta meta; - meta.SetID(GenerateAssetID()); - meta.SetType(SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string())); - meta.SetVersion(ASSET_META_VER); + meta.id = GenerateAssetID(); + meta.type = SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string()); metaCollection.push_back(meta); - pathRegistry.emplace(meta.GetID(), resource); - typeRegistry.emplace(meta.GetID(), meta.GetType()); - nameIDRegistry.emplace(GetNameFromPath(resource), meta.GetID()); - idNameRegistry.emplace(meta.GetID(), GetNameFromPath(resource)); - filenameRegistry.emplace(resource.filename().string(), meta.GetID()); - filenameReverse.emplace(meta.GetID(), resource.filename().string()); + pathRegistry.emplace(meta.id, resource); + typeRegistry.emplace(meta.id, meta.type); + nameIDRegistry.emplace(GetNameFromPath(resource), meta.id); + idNameRegistry.emplace(meta.id, GetNameFromPath(resource)); + filenameRegistry.emplace(resource.filename().string(), meta.id); + filenameReverse.emplace(meta.id, resource.filename().string()); - //LoadData(meta.GetID()); + //LoadData(meta.id); SHAssetMetaHandler::WriteMetaData(meta, resource.string() + META_EXTENSION); return metaCollection.back(); } + bool SHAssetManager::IsRecognised(char const* ext) noexcept + { + for (auto const& e : EXTENSIONS) + { + if (strcmp(ext, e.c_str()) == 0) + { + return true; + } + } + + return false; + } + /**************************************************************************** * \brief Load all resources that are in the folder ****************************************************************************/ @@ -448,7 +332,7 @@ namespace SHADE { SHAssetMeta const& meta{ RegisterAssetNew(p) }; SHAssetMetaHandler::WriteMetaData(meta, p.string() + META_EXTENSION); - return meta.GetID(); + return meta.id; } else { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 8db008c9..5b57c91c 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -16,6 +16,7 @@ #include #include "SHAssetMeta.h" #include "tinyddsloader.h" +#include "SHAsset.h" #include @@ -43,51 +44,6 @@ namespace SHADE ****************************************************************************/ static void Load() noexcept; - // General------------------------------------------------------------------/ - /**************************************************************************** - * \param Name of resource - - * \brief Gets resource ID - ****************************************************************************/ - static AssetID GetIDFromName(AssetName const&) noexcept; - - /**************************************************************************** - * \param Name of resource - - * \brief Gets resource ID - ****************************************************************************/ - static std::vector GetIDFromNames(std::initializer_list const&) noexcept; - - /**************************************************************************** - * \brief Get asset name from resource ID. - * - * \param id - resource id - * \return - std::string - ****************************************************************************/ - static AssetName GetNameFromID(AssetID) noexcept; - - /**************************************************************************** - * \param file name - - * \brief Returns resource ID from provided file name - ****************************************************************************/ - static AssetID GetIDFromFilename(std::string const&) noexcept; - - /**************************************************************************** - * \brief Get filename from resource ID. - * - * \param id - id of asset - * \return std::string - ****************************************************************************/ - static std::string GetFilenameFromID(AssetID id) noexcept; - - /**************************************************************************** - * \param list of file names - - * \brief Returns vector of resource IDs - ****************************************************************************/ - static std::vector GetIDFromFilenames(std::initializer_list const&) noexcept; - /**************************************************************************** * \brief Get record of all resources currently loaded with name and id. * @@ -182,12 +138,7 @@ namespace SHADE // For all resources static std::vector metaCollection; - static std::unordered_map pathRegistry; - static std::unordered_map typeRegistry; - static std::unordered_map idNameRegistry; - static std::unordered_map nameIDRegistry; - static std::unordered_map filenameRegistry; - static std::unordered_map filenameReverse; + static std::unordered_map assetRegistry; }; } diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.cpp b/SHADE_Engine/src/Assets/SHAssetMeta.cpp deleted file mode 100644 index 60fc45d0..00000000 --- a/SHADE_Engine/src/Assets/SHAssetMeta.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/****************************************************************************** - * \file SHAssetMeta.cpp - * \author Loh Xiao Qi - * \brief Implementation for SHAssetMeta.h - * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction - * or disclosure of this file or its contents without the prior - * written consent of Digipen Institute of Technology is prohibited - ******************************************************************************/ -#include "SHpch.h" -#include "SHAssetMeta.h" - -namespace SHADE -{ - /**************************************************************************** - * \brief Default constructor - ****************************************************************************/ - SHAssetMeta::SHAssetMeta() noexcept : id{ 0 }, type{AssetType::INVALID} - { - - } - - /**************************************************************************** - * \param copy - - * \brief copy constructor - ****************************************************************************/ - SHAssetMeta::SHAssetMeta(SHAssetMeta const& ref) noexcept - { - ver = ref.ver; - id = ref.id; - type = ref.type; - } - - /**************************************************************************** - * \param reference - - * \brief copy assignment operator overload - ****************************************************************************/ - SHAssetMeta& SHAssetMeta::operator=(SHAssetMeta const& ref) noexcept - { - ver = ref.ver; - id = ref.id; - type = ref.type; - - return *this; - } - - /**************************************************************************** - * \param std::string representation for meta resource file version - - * \brief Set meta version for data file - ****************************************************************************/ - void SHAssetMeta::SetVersion(AssetMetaVersion vers) noexcept - { - ver = vers; - } - - /**************************************************************************** - * \param ID of resource - - * \brief Set ID - ****************************************************************************/ - void SHAssetMeta::SetID(AssetID idin) noexcept - { - this->id = idin; - } - - /**************************************************************************** - * \param Enum class value - - * \brief Set Asset Type - ****************************************************************************/ - void SHAssetMeta::SetType(AssetType rType) noexcept - { - this->type = rType; - } - - /**************************************************************************** - * \brief Get version - ****************************************************************************/ - AssetMetaVersion SHAssetMeta::GetVersion() const noexcept - { - return ver; - } - - /**************************************************************************** - * \brief Get ID - ****************************************************************************/ - AssetID SHAssetMeta::GetID() const noexcept - { - return id; - } - - /**************************************************************************** - * \brief Get resource type - ****************************************************************************/ - AssetType SHAssetMeta::GetType() const noexcept - { - return type; - } -} diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.h b/SHADE_Engine/src/Assets/SHAssetMeta.h index 9f2e6b5c..c591e0dd 100644 --- a/SHADE_Engine/src/Assets/SHAssetMeta.h +++ b/SHADE_Engine/src/Assets/SHAssetMeta.h @@ -14,66 +14,8 @@ namespace SHADE { - class SHAssetMeta + struct SHAssetMeta { - public: - /**************************************************************************** - * \brief Default constructor - ****************************************************************************/ - SHAssetMeta() noexcept; - - /**************************************************************************** - * \param copy - - * \brief copy constructor - ****************************************************************************/ - SHAssetMeta(SHAssetMeta const&) noexcept; - - /**************************************************************************** - * \param reference - - * \brief copy assignment operator overload - ****************************************************************************/ - SHAssetMeta& operator=(SHAssetMeta const&) noexcept; - - /**************************************************************************** - * \param std::string representation for meta resource file version - - * \brief Set meta version for data file - ****************************************************************************/ - void SetVersion(AssetMetaVersion) noexcept; - - /**************************************************************************** - * \param ID of resource - - * \brief Set ID - ****************************************************************************/ - void SetID(AssetID) noexcept; - - /**************************************************************************** - * \param Enum class value - - * \brief Set Asset Type - ****************************************************************************/ - void SetType(AssetType) noexcept; - - /**************************************************************************** - * \brief Get version - ****************************************************************************/ - AssetMetaVersion GetVersion() const noexcept; - - /**************************************************************************** - * \brief Get ID - ****************************************************************************/ - AssetID GetID() const noexcept; - - /**************************************************************************** - * \brief Get resouce type - ****************************************************************************/ - AssetType GetType() const noexcept; - - private: - AssetMetaVersion ver; AssetID id; AssetType type; }; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index d18869a9..ae5eab2a 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -70,23 +70,19 @@ namespace SHADE std::string line; SHAssetMeta meta; - // Get file version - GetFieldValue(metaFile, line); - meta.SetVersion(line); - // Get resource id GetFieldValue(metaFile, line); std::stringstream idStream{ line }; AssetID id; idStream >> id; - meta.SetID(id); + meta.id = id; // Get resource type GetFieldValue(metaFile, line); std::stringstream typeStream{ line }; AssetTypeMeta type; typeStream >> type; - meta.SetType(static_cast(type)); + meta.type = static_cast(type); metaFile.close(); @@ -107,10 +103,9 @@ namespace SHADE { // Log error } - - metaFile << "Meta Version: " << meta.GetVersion() << "\n"; - metaFile << "ID: " << meta.GetID() << "\n"; - metaFile << "Type: " << static_cast(meta.GetType()) << std::endl; + + metaFile << "ID: " << meta.id << "\n"; + metaFile << "Type: " << static_cast(meta.type) << std::endl; metaFile.close(); } From 124b367413668e6eba9140e0b98c0f6b266e6ca6 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 21 Sep 2022 22:24:52 +0800 Subject: [PATCH 149/793] Fixed SHTransform compile error Include header in math path wrong Added proj and filter ignore into git (again) --- .gitignore | 2 + SHADE_Application/SHADE_Application.vcxproj | 132 ---- SHADE_Engine/SHADE_Engine.vcxproj | 349 --------- SHADE_Engine/SHADE_Engine.vcxproj.filters | 746 -------------------- SHADE_Engine/src/Math/SHMath.h | 2 +- 5 files changed, 3 insertions(+), 1228 deletions(-) delete mode 100644 SHADE_Application/SHADE_Application.vcxproj delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj delete mode 100644 SHADE_Engine/SHADE_Engine.vcxproj.filters diff --git a/.gitignore b/.gitignore index c7fefb6e..1fbf8160 100644 --- a/.gitignore +++ b/.gitignore @@ -359,3 +359,5 @@ MigrationBackup/ *.vcxproj.filters *.sln *.csproj + +*.filters diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj deleted file mode 100644 index 0a7457a0..00000000 --- a/SHADE_Application/SHADE_Application.vcxproj +++ /dev/null @@ -1,132 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {BDC70008-29DE-FE9D-7255-8ABFDEAACF25} - true - Win32Proj - SHADE_Application - 10.0 - - - - Application - true - Unicode - v142 - - - Application - false - Unicode - v142 - - - - - - - - - - - - - true - ..\bin\Debug\ - ..\bin_int\Debug\SHADE_Application\ - SHADE_Application - .exe - ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;$(IncludePath) - - - false - ..\bin\Release\ - ..\bin_int\Release\SHADE_Application\ - SHADE_Application - .exe - ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;$(IncludePath) - - - - Use - SBpch.h - Level4 - 4251;%(DisableSpecificWarnings) - NOMINMAX;_DEBUG;%(PreprocessorDefinitions) - ..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) - EditAndContinue - Disabled - false - MultiThreadedDebugDLL - true - stdcpp20 - - - Windows - true - SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) - wWinMainCRTStartup - - - - - Use - SBpch.h - Level4 - 4251;%(DisableSpecificWarnings) - NOMINMAX;_RELEASE;%(PreprocessorDefinitions) - ..\SHADE_Engine\src;src;..\Dependencies\dotnet\include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) - Full - true - true - false - true - MultiThreadedDLL - true - stdcpp20 - - - Windows - true - true - SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) - wWinMainCRTStartup - - - - - - - - - - - Create - - - - - - - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - - - {16DB1400-829B-9036-4BD6-D9B3B755D512} - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj deleted file mode 100644 index 37ddf8f5..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ /dev/null @@ -1,349 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {3F92E998-2BF5-783D-D47A-B1F3C0BC44C0} - true - Win32Proj - SHADE_Engine - 10.0 - - - - DynamicLibrary - true - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - - - - - - - - - - - true - ..\bin\Debug\ - ..\bin_int\Debug\SHADE_Engine\ - SHADE_Engine - .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) - - - false - ..\bin\Release\ - ..\bin_int\Release\SHADE_Engine\ - SHADE_Engine - .dll - ..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\Dependencies\dotnet\include;$(IncludePath) - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) - src;%(AdditionalIncludeDirectories) - EditAndContinue - Disabled - false - MultiThreadedDebugDLL - true - stdcpp20 - - - Windows - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Debug\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - Use - SHpch.h - Level4 - 4251;%(DisableSpecificWarnings) - _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) - src;%(AdditionalIncludeDirectories) - Full - true - true - false - true - MultiThreadedDLL - true - stdcpp20 - - - Windows - true - true - vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) - ..\bin\Release\SHADE_Engine.lib - - - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" -xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" -xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - - - - - - - - - - - - - - {88F1A057-74BE-FB62-9DD7-E90A890331F1} - - - {8900D8DD-F5DF-5679-FEF7-E14F6A56BDDA} - - - {38BD587B-248B-4C81-0D1F-BDA7F98B28E6} - - - {2ECAB41A-1A98-A820-032C-1947EF988485} - - - {C0FF640D-2C14-8DBE-F595-301E616989EF} - - - - - - \ No newline at end of file diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters deleted file mode 100644 index f52aebb0..00000000 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ /dev/null @@ -1,746 +0,0 @@ - - - - - {8EEA3EAC-7A8C-6982-6347-7DD64F88F0D2} - - - {1AB26817-067F-C322-2F98-B1CA1BC4F8B0} - - - {EFD23933-5B34-1741-E4A1-5DF350024E00} - - - {261D0942-92A8-7606-9BB9-F9FA07C4D206} - - - {BEBC9142-2A48-FF06-3359-82FB9F635B07} - - - {07FEB307-F3F6-D259-1C29-B8DE0881B265} - - - {37718753-A387-85E9-ECFE-100B58545671} - - - {EE037863-5A8F-E527-63A0-681CCFAA4128} - - - {078AA1A3-F318-2B6D-9C37-3F6888A53B13} - - - {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} - - - {3A8963B1-262B-8E87-0FE6-A1DBFB2615D8} - - - {80E7870B-ECF0-877C-756C-9E7CE174937C} - - - {8A8E2B37-7646-6D84-DF4D-46E0CB240875} - - - {1653CE33-0220-293F-2B39-17E717655ECD} - - - {92C817CE-7EC1-3620-A7F3-1BA5934B162C} - - - {17C745C0-83DD-4356-CC54-CF7738AA14DE} - - - {51443AC7-3D28-FB1C-A688-F56F928BE59E} - - - {573A6CF2-43C9-F5BB-ECE7-09B7D8550662} - - - {08DBDC43-F4D3-FB95-1D06-E11A095EDBA1} - - - {4AD5CA42-3664-540C-DF82-6807CBF064B2} - - - {FB5EE099-67EA-4D5E-70FB-D052DC05AA5E} - - - {BA26540B-263D-52A1-6FB4-DDC2DB092329} - - - {4B204703-3704-0859-A064-02AC8C67F2DA} - - - {EBA1D3FF-D75C-C3AB-8014-3CF66CAE0D3C} - - - {8CDBA7C9-F8E8-D5AF-81CF-D19AEDDBA166} - - - {2460C057-1070-6C28-7929-D14665585BC1} - - - {FBD334F8-67EA-328E-B061-BEAF1CB70316} - - - {1DD51CAD-8960-8A71-9271-0D66FE7BE671} - - - {57DAB30C-4369-3DD6-EC87-51D1D8F54D7C} - - - {9C0DAFD9-086F-8CE7-91DC-D299FD3CC3A6} - - - {EF2D07CC-DB26-261E-0459-0BA3F0B0052A} - - - {3AEF06DD-A6D2-151D-AFD5-43591B38DC6D} - - - {245F5AB0-1085-2417-F9CA-A9E2E58F49E3} - - - {03DB39DE-EFBE-FA33-581F-F5864422E5B5} - - - {576DF841-4392-47C2-6CDD-2C52586146E0} - - - {75F29FE5-6102-4CB6-CABB-B0D4B6EA3A4F} - - - {5BAB2A92-478F-EBE7-B0EF-E53A9CF2D569} - - - {B3B14D12-9FC1-F9E2-087B-5E01F4A9E87B} - - - {AFF4887C-9B2B-8A0D-4418-7010302E060F} - - - {EAD6C33D-5697-3F74-1FD2-88F18B518450} - - - {F1B75745-5D6D-D03A-E661-CA115216C73E} - - - {AC05897C-983C-8A0D-4129-70102D3F060F} - - - {ED6CDF9B-D939-3AA7-0253-284FEE7E6F35} - - - {B3F7140E-1F0C-3DBF-E88D-E01E546139F0} - - - {985A7358-04C5-27CF-4D03-D974B9AC0524} - - - {16CF2D0E-82E3-55BF-4B65-F91EB73852F0} - - - - - Common - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\Events - - - ECS_Base\Events - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\General - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\UnitTesting - - - ECS_Base\UnitTesting - - - ECS_Base\UnitTesting - - - Engine - - - Events - - - Events - - - Events - - - Events - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math\Geometry - - - Math\Geometry - - - Math - - - Math - - - Math - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Meta - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - Resource - - - - - - Scene - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - - - - - ECS_Base\Components - - - ECS_Base\Components - - - ECS_Base\Entity - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\Managers - - - ECS_Base\System - - - ECS_Base\System - - - ECS_Base\UnitTesting - - - Engine - - - FRC - - - Filesystem - - - Graphics\Buffers - - - Graphics\Commands - - - Graphics\Commands - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Debugging - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Descriptors - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Devices - - - Graphics\Framebuffer - - - Graphics\Images - - - Graphics\Images - - - Graphics\Images - - - Graphics\Instance - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\Interface - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\PerFrame - - - Graphics\MiddleEnd\Shaders - - - Graphics\MiddleEnd\Shaders - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Pipeline - - - Graphics\Queues - - - Graphics\RenderGraph - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics\Renderpass - - - Graphics - - - Graphics - - - Graphics\Shaders\BlockInterface - - - Graphics\Shaders - - - Graphics\Shaders - - - Graphics\Shaders\spirv-reflect - - - Graphics\Swapchain - - - Graphics\Synchronization - - - Graphics\Synchronization - - - Graphics\VertexDescriptors - - - Graphics\Windowing - - - Graphics\Windowing - - - Graphics\Windowing\Surface - - - Math\Geometry - - - Math\Geometry - - - Math - - - Math - - - Math - - - Math - - - Math\Vector - - - Math\Vector - - - Math\Vector - - - Resource - - - - Scene - - - Scene - - - Scripting - - - Scripting - - - Tools - - - Tools - - - Tools - - - Tools - - - Tools - - - - - \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 55bf73a9..5fcea9fc 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -9,4 +9,4 @@ #include "SHQuaternion.h" #include "SHMatrix.h" -#include "SHTransform.h" \ No newline at end of file +#include "Transform/SHTransform.h" \ No newline at end of file From d2e2e85726b688589f5b24da72c3c1f654535f8c Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 21 Sep 2022 22:54:15 +0800 Subject: [PATCH 150/793] Added build path ignore Readded output dir and removed interdir from premake Added DEBUG guards in SHVkPhysicalDeviceLibrary when using SHLOG_TRACE --- .gitignore | 1 + .../src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp | 5 ++++- premake5.lua | 7 +++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 1fbf8160..1110510c 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ x86/ bld/ [Bb]in/ [Bb]in-int/ +[Bb]in_int/ [Oo]bj/ [Ll]og/ [Ll]ogs/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp index d815fb7e..3cf0a8e6 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp @@ -1,4 +1,4 @@ -#include "SHPch.h" +#include "SHpch.h" #include #include #include "SHVkPhysicalDeviceLibrary.h" @@ -180,10 +180,13 @@ namespace SHADE return; } + #ifdef DEBUG SHLOG_TRACE("Successfully queried Physical Devices:"); for (auto const& device : physicalDevices) { SHLOG_TRACE(std::string_view (std::string("\t-") + GetDeviceTypeName(device.getProperties().deviceType) + device.getProperties().deviceName.operator std::string())); } + #endif + } } diff --git a/premake5.lua b/premake5.lua index 450be7d7..ab1e6d27 100644 --- a/premake5.lua +++ b/premake5.lua @@ -7,16 +7,15 @@ workspace "SHADE" configurations { "Debug", - "Release", + "Release" } flags { - "MultiProcessorCompile" + "MultiProcessorCompile" } - outputdir = "%{wks.location}/bin/%{cfg.buildcfg}" - interdir = "%{wks.location}/bin_int" + outputdir = "bin/%{cfg.architecture}" include "SHADE_Engine" include "SHADE_Application" From 3d9abcf19ca550e3f850e9e232af76b5dd73ac07 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 09:19:18 +0800 Subject: [PATCH 151/793] Implemented image creation for textures in the texture bank --- SHADE_Engine/SHADE_Engine.vcxproj | 34 +++++ SHADE_Engine/SHADE_Engine.vcxproj.filters | 143 +++++++++++++++++- .../Graphics/Commands/SHVkCommandBuffer.cpp | 63 ++++---- .../src/Graphics/Commands/SHVkCommandBuffer.h | 6 +- .../src/Graphics/Images/SHVkImage.cpp | 33 +--- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 4 +- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 115 +++++++++++++- .../MiddleEnd/Textures/SHTextureLibrary.h | 35 +++-- SHADE_Engine/src/Math/SHMath.h | 2 +- 9 files changed, 350 insertions(+), 85 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 37ddf8f5..2aa3b608 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -138,6 +138,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -167,13 +168,31 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + + + + + + + + + + + + + + + + + + @@ -250,6 +269,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -273,12 +293,26 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + + + + + + + + + + + + + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index f52aebb0..74be0df1 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -28,6 +28,9 @@ {078AA1A3-F318-2B6D-9C37-3F6888A53B13} + + {8C1A20B0-78BC-4A86-6177-5EDA4DB8D1D6} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -70,15 +73,30 @@ {4B204703-3704-0859-A064-02AC8C67F2DA} + + {7A02D7B0-E60F-0597-6FF6-0082DB02D14D} + + + {85EFB65D-F107-9E87-BAB4-2D21268C3221} + {EBA1D3FF-D75C-C3AB-8014-3CF66CAE0D3C} + + {1F603FFC-8B22-7386-D4D2-011340D44B64} + {8CDBA7C9-F8E8-D5AF-81CF-D19AEDDBA166} + + {D04C14FB-3C5A-42E1-C540-3ECC314D0E98} + {2460C057-1070-6C28-7929-D14665585BC1} + + {7E76F08B-EA83-1E72-736A-1A5DDF76EA28} + {FBD334F8-67EA-328E-B061-BEAF1CB70316} @@ -121,6 +139,9 @@ {EAD6C33D-5697-3F74-1FD2-88F18B518450} + + {3AB383AD-2681-77B3-0F15-E8D9FB815318} + {F1B75745-5D6D-D03A-E661-CA115216C73E} @@ -207,6 +228,9 @@ ECS_Base\UnitTesting + + Editor + Engine @@ -294,18 +318,69 @@ Graphics\Instance + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\GlobalData + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Meshes + + + Graphics\MiddleEnd\Meshes + Graphics\MiddleEnd\PerFrame Graphics\MiddleEnd\PerFrame + + Graphics\MiddleEnd\Pipeline + Graphics\MiddleEnd\Shaders @@ -315,6 +390,9 @@ Graphics\MiddleEnd\Shaders + + Graphics\MiddleEnd\Textures + Graphics\Pipeline @@ -421,7 +499,13 @@ Math - Math + Math\Transform + + + Math\Transform + + + Math\Transform Math\Vector @@ -498,8 +582,6 @@ Tools - - @@ -529,6 +611,9 @@ ECS_Base\UnitTesting + + Editor + Engine @@ -598,24 +683,66 @@ Graphics\Instance + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\GlobalData + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Meshes + Graphics\MiddleEnd\PerFrame Graphics\MiddleEnd\PerFrame + + Graphics\MiddleEnd\Pipeline + Graphics\MiddleEnd\Shaders Graphics\MiddleEnd\Shaders + + Graphics\MiddleEnd\Textures + Graphics\Pipeline @@ -698,7 +825,13 @@ Math - Math + Math\Transform + + + Math\Transform + + + Math\Transform Math\Vector @@ -740,7 +873,5 @@ Tools - - \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 6898b7e0..cddb6cdb 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -8,6 +8,7 @@ #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Images/SHVkImage.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" @@ -421,9 +422,42 @@ namespace SHADE vkCommandBuffer.drawIndexed(indexCount, 1, firstIndex, vertexOffset, 0); } + + /***************************************************************************/ + /*! + \brief + Issues a multi indirect draw call. - void SHVkCommandBuffer::PipelineBarrier ( + \param indirectDrawData + SHVkBuffer containing the data for the multi indirect draw call. + \param drawCount + Number of multi indirect draw sub-calls stored in indirectDrawData. + + */ + /***************************************************************************/ + + void SHVkCommandBuffer::DrawMultiIndirect(Handle indirectDrawData, uint32_t drawCount) + { + if (cmdBufferState != SH_CMD_BUFFER_STATE::RECORDING) + { + SHLOG_ERROR("Command buffer must have started recording before a pipeline can be bound."); + return; + } + + vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); + } + + void SHVkCommandBuffer::CopyBufferToImage(const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo) + { + vkCommandBuffer.copyBufferToImage + ( + src, dst, vk::ImageLayout::eTransferDstOptimal, + static_cast(copyInfo.size()), copyInfo.data() + ); + } + + void SHVkCommandBuffer::PipelineBarrier( vk::PipelineStageFlags srcStage, vk::PipelineStageFlags dstStage, vk::DependencyFlags deps, @@ -457,33 +491,6 @@ namespace SHADE // //vkCommandBuffer.pipelineBarrier() //} - /***************************************************************************/ - /*! - - \brief - Issues a multi indirect draw call. - - \param indirectDrawData - SHVkBuffer containing the data for the multi indirect draw call. - \param drawCount - Number of multi indirect draw sub-calls stored in indirectDrawData. - - */ - /***************************************************************************/ - - void SHVkCommandBuffer::DrawMultiIndirect(Handle indirectDrawData, uint32_t drawCount) - { - if (cmdBufferState != SH_CMD_BUFFER_STATE::RECORDING) - { - SHLOG_ERROR("Command buffer must have started recording before a pipeline can be bound."); - return; - } - - vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); - } - - - /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index d945fce8..f780638a 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -15,6 +15,7 @@ namespace SHADE class SHVkFramebuffer; class SHVkPipeline; class SHVkBuffer; + class SHVkImage; class SHVkDescriptorSetGroup; enum class SH_CMD_BUFFER_TYPE @@ -116,6 +117,10 @@ namespace SHADE // Draw Commands void DrawArrays (uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const noexcept; void DrawIndexed (uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept; + void DrawMultiIndirect (Handle indirectDrawData, uint32_t drawCount); + + // Buffer Copy + void CopyBufferToImage (const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo); // memory barriers void PipelineBarrier ( @@ -129,7 +134,6 @@ namespace SHADE bool IsReadyToSubmit (void) const noexcept; void HandlePostSubmit (void) noexcept; - void DrawMultiIndirect (Handle indirectDrawData, uint32_t drawCount); // Push Constant variable setting template diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index 6ec1c9f2..b8bf273e 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -234,7 +234,7 @@ namespace SHADE return SHVkInstance::GetResourceManager().Create(inLogicalDeviceHdl, parent, createParams); } - void SHVkImage::TransferToDeviceResource(void) noexcept + void SHVkImage::TransferToDeviceResource(Handle cmdBufferHdl) noexcept { // prepare copy regions std::vector copyRegions{mipOffsets.size()}; @@ -252,7 +252,7 @@ namespace SHADE copyRegions[i].imageExtent = vk::Extent3D{ width >> i, height >> i, 1 }; } - //PrepareImageTransition(); + cmdBufferHdl->CopyBufferToImage(stagingBuffer, vkImage, copyRegions); } /***************************************************************************/ @@ -274,7 +274,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkImage::PrepareImageTransition(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept + void SHVkImage::PrepareImageTransitionInfo(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept { barrier.oldLayout = oldLayout; barrier.newLayout = newLayout; @@ -286,33 +286,6 @@ namespace SHADE barrier.subresourceRange.levelCount = mipLevelCount; barrier.subresourceRange.baseArrayLayer = 0; barrier.subresourceRange.layerCount = layerCount; - - vk::PipelineStageFlagBits srcStage = vk::PipelineStageFlagBits::eTopOfPipe; - vk::PipelineStageFlagBits dstStage = vk::PipelineStageFlagBits::eTopOfPipe; - - if (oldLayout == vk::ImageLayout::eUndefined && newLayout == vk::ImageLayout::eTransferDstOptimal) - { - srcStage = vk::PipelineStageFlagBits::eTopOfPipe; - dstStage = vk::PipelineStageFlagBits::eTransfer; - - barrier.srcAccessMask = vk::AccessFlagBits::eNone; - barrier.dstAccessMask = vk::AccessFlagBits::eTransferWrite; - } - else if (oldLayout == vk::ImageLayout::eTransferDstOptimal && newLayout == vk::ImageLayout::eShaderReadOnlyOptimal) - { - srcStage = vk::PipelineStageFlagBits::eTransfer; - - // TODO, what if we want to access in compute shader - dstStage = vk::PipelineStageFlagBits::eFragmentShader; - - barrier.srcAccessMask = vk::AccessFlagBits::eTransferWrite; - barrier.dstAccessMask = vk::AccessFlagBits::eShaderRead; - } - else - { - SHLOG_ERROR("Image layouts are invalid. "); - } - } void SHVkImage::LinkWithExteriorImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t layers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index eec8dc7e..91d4f2d2 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -135,8 +135,8 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; - void TransferToDeviceResource (void) noexcept; - void PrepareImageTransition (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; + void TransferToDeviceResource (Handle cmdBufferHdl) noexcept; + void PrepareImageTransitionInfo (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 97b72977..3be4dd11 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -13,29 +13,130 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" #include "SHTextureLibrary.h" +#include "Graphics/SHVulkanIncludes.h" + #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Commands/SHVkCommandBuffer.h" #include "Graphics/SHVkUtil.h" +#include "Tools/SHLogger.h" namespace SHADE { - /*-----------------------------------------------------------------------------*/ - /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData) + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, int mipLevels) { - return {}; + isDirty = true; + + auto handle = resourceManager.Create(); + addJobs.emplace_back(AddJob { pixelCount, pixelData, format, mipLevels }); + return handle; } - void SHTextureLibrary::Remove(Handle mesh) + void SHTextureLibrary::Remove(Handle texture) { + if (!texture) + throw std::invalid_argument("Attempted to remove a Texture that did not belong to the Texture Library!"); + removeJobs.emplace_back(texture); + isDirty = true; } - void SHTextureLibrary::BuildBuffers(Handle device, Handle cmdBuffer) + void SHTextureLibrary::BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout) { + /* Remove Textures */ + std::vector pipelineBarriers(addJobs.size()); + /* Add Textures */ + // Transition + for (int i = 0; auto& job : addJobs) + { + job.Image = resourceManager.Create(); + job.Image->PrepareImageTransitionInfo(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, pipelineBarriers[i]); + ++i; + } + vk::PipelineStageFlagBits srcStage = vk::PipelineStageFlagBits::eTopOfPipe; + vk::PipelineStageFlagBits dstStage = vk::PipelineStageFlagBits::eTopOfPipe; + preparePipelineBarriers(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, srcStage, dstStage, pipelineBarriers); + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, pipelineBarriers); + + // Copy + for (auto& job : addJobs) + { + job.Image->TransferToDeviceResource(cmdBuffer); + } + + // Transition + for (int i = 0; auto & job : addJobs) + { + // Transition + job.Image->PrepareImageTransitionInfo(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, pipelineBarriers[i]); + } + preparePipelineBarriers(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, srcStage, dstStage, pipelineBarriers); + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, pipelineBarriers); + + // Execute Commands + graphicsQueue->SubmitCommandBuffer({ cmdBuffer }); + device->WaitIdle(); + + // Create Image View + for (auto& job : addJobs) + { + const SHImageViewDetails DETAILS + { + .viewType = vk::ImageViewType::e2D, + .format = job.TextureFormat, + .imageAspectFlags = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .mipLevelCount = job.MipLevels, + .baseArrayLayer = 0, + .layerCount = 0 + }; + job.Handle->ImageView = job.Image->CreateImageView(device, job.Image, DETAILS); + } + + // Build Descriptor + Handle descSetGroup = descPool->Allocate({ descLayout }, { 1 }).front(); + + + isDirty = false; + } + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void SHTextureLibrary::preparePipelineBarriers(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::PipelineStageFlagBits& srcStage, vk::PipelineStageFlagBits& dstStage, std::vector& barriers) + { + if (oldLayout == vk::ImageLayout::eUndefined && newLayout == vk::ImageLayout::eTransferDstOptimal) + { + srcStage = vk::PipelineStageFlagBits::eTopOfPipe; + dstStage = vk::PipelineStageFlagBits::eTransfer; + + for (auto& barrier : barriers) + { + barrier.srcAccessMask = vk::AccessFlagBits::eNone; + barrier.dstAccessMask = vk::AccessFlagBits::eTransferWrite; + } + } + else if (oldLayout == vk::ImageLayout::eTransferDstOptimal && newLayout == vk::ImageLayout::eShaderReadOnlyOptimal) + { + srcStage = vk::PipelineStageFlagBits::eTransfer; + + // TODO, what if we want to access in compute shader + dstStage = vk::PipelineStageFlagBits::eFragmentShader; + + for (auto& barrier : barriers) + { + barrier.srcAccessMask = vk::AccessFlagBits::eTransferWrite; + barrier.dstAccessMask = vk::AccessFlagBits::eShaderRead; + } + } + else + { + SHLOG_ERROR("Image layouts are invalid. "); + } } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index a0167cba..d30b02ed 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -37,11 +37,15 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------*/ - using PixelChannel = uint8_t; + using PixelChannel = void; + using TextureFormat = vk::Format; // TODO: Change + using Index = uint32_t; /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ + Handle ImageView; + Index TextureArrayIndex = std::numeric_limits::max(); }; /***********************************************************************************/ /*! @@ -61,7 +65,7 @@ namespace SHADE \brief Adds a texture to the Texture Library. But this does not mean that the - textures have been added yet. A call to "BuildBuffers()" is required to + textures have been added yet. A call to "BuildImages()" is required to transfer all textures into the GPU. \param pixelCount @@ -69,20 +73,22 @@ namespace SHADE \param positions Pointer to the first in a contiguous array of SHMathVec3s that define vertex positions. + \param format + Format of the texture loaded in. \return Handle to the created Texture. This is not valid to be used until a call to - BuildBuffers(). + BuildImages(). */ /*******************************************************************************/ - Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData); + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, int mipLevels); /*******************************************************************************/ /*! \brief Removes a mesh from the Texture Library. But this does not mean that the - textures have been removed yet. A call to "BuildBuffers()" is required to + textures have been removed yet. A call to "BuildImages()" is required to finalise all changes. \param mesh @@ -106,7 +112,7 @@ namespace SHADE queue. */ /***************************************************************************/ - void BuildBuffers(Handle device, Handle cmdBuffer); + void BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -119,10 +125,14 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ struct AddJob { - uint32_t PixelCount = 0; - const SHTexture::PixelChannel* PixelData = nullptr; - Handle Handle; + uint32_t PixelCount = 0; + const SHTexture::PixelChannel* PixelData = nullptr; + SHTexture::TextureFormat TextureFormat = {}; + int MipLevels = 0; + Handle Image; + Handle Handle; }; + /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ @@ -130,7 +140,7 @@ namespace SHADE std::vector addJobs; std::vector> removeJobs; // Tracking - ResourceLibrary textures{}; + ResourceManager resourceManager; std::vector> texOrder; // CPU Storage std::vector texStorage; @@ -138,5 +148,10 @@ namespace SHADE Handle texStorageBuffer{}; // Flags bool isDirty = true; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void preparePipelineBarriers(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::PipelineStageFlagBits& srcStage, vk::PipelineStageFlagBits& dstStage, std::vector& barriers); }; } diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 55bf73a9..5fcea9fc 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -9,4 +9,4 @@ #include "SHQuaternion.h" #include "SHMatrix.h" -#include "SHTransform.h" \ No newline at end of file +#include "Transform/SHTransform.h" \ No newline at end of file From ba181eb9c908ec63cf55bdaf543f77479832d451 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 22 Sep 2022 09:23:40 +0800 Subject: [PATCH 152/793] Shifted Command buffers outside of render graph Command buffers now exist in renderer instead Graphics system that calls the renderer, begins and ends the renderer recording in it's main loop as well --- SHADE_Engine/SHADE_Engine.vcxproj | 34 +++++ SHADE_Engine/SHADE_Engine.vcxproj.filters | 143 +++++++++++++++++- .../Descriptors/SHVkDescriptorPool.cpp | 5 +- .../Graphics/Descriptors/SHVkDescriptorPool.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 36 ++++- .../MiddleEnd/Interface/SHRenderer.cpp | 21 ++- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 12 +- .../MiddleEnd/Interface/SHViewport.cpp | 4 +- .../Graphics/MiddleEnd/Interface/SHViewport.h | 3 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 44 +----- .../src/Graphics/RenderGraph/SHRenderGraph.h | 12 +- SHADE_Engine/src/Math/SHMath.h | 2 +- 12 files changed, 239 insertions(+), 79 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 37ddf8f5..2aa3b608 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -138,6 +138,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -167,13 +168,31 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + + + + + + + + + + + + + + + + + + @@ -250,6 +269,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + @@ -273,12 +293,26 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)" + + + + + + + + + + + + + + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index f52aebb0..74be0df1 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -28,6 +28,9 @@ {078AA1A3-F318-2B6D-9C37-3F6888A53B13} + + {8C1A20B0-78BC-4A86-6177-5EDA4DB8D1D6} + {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} @@ -70,15 +73,30 @@ {4B204703-3704-0859-A064-02AC8C67F2DA} + + {7A02D7B0-E60F-0597-6FF6-0082DB02D14D} + + + {85EFB65D-F107-9E87-BAB4-2D21268C3221} + {EBA1D3FF-D75C-C3AB-8014-3CF66CAE0D3C} + + {1F603FFC-8B22-7386-D4D2-011340D44B64} + {8CDBA7C9-F8E8-D5AF-81CF-D19AEDDBA166} + + {D04C14FB-3C5A-42E1-C540-3ECC314D0E98} + {2460C057-1070-6C28-7929-D14665585BC1} + + {7E76F08B-EA83-1E72-736A-1A5DDF76EA28} + {FBD334F8-67EA-328E-B061-BEAF1CB70316} @@ -121,6 +139,9 @@ {EAD6C33D-5697-3F74-1FD2-88F18B518450} + + {3AB383AD-2681-77B3-0F15-E8D9FB815318} + {F1B75745-5D6D-D03A-E661-CA115216C73E} @@ -207,6 +228,9 @@ ECS_Base\UnitTesting + + Editor + Engine @@ -294,18 +318,69 @@ Graphics\Instance + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\GlobalData + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Meshes + + + Graphics\MiddleEnd\Meshes + Graphics\MiddleEnd\PerFrame Graphics\MiddleEnd\PerFrame + + Graphics\MiddleEnd\Pipeline + Graphics\MiddleEnd\Shaders @@ -315,6 +390,9 @@ Graphics\MiddleEnd\Shaders + + Graphics\MiddleEnd\Textures + Graphics\Pipeline @@ -421,7 +499,13 @@ Math - Math + Math\Transform + + + Math\Transform + + + Math\Transform Math\Vector @@ -498,8 +582,6 @@ Tools - - @@ -529,6 +611,9 @@ ECS_Base\UnitTesting + + Editor + Engine @@ -598,24 +683,66 @@ Graphics\Instance + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\Batching + + + Graphics\MiddleEnd\GlobalData + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + Graphics\MiddleEnd\Interface + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Interface + + + Graphics\MiddleEnd\Meshes + Graphics\MiddleEnd\PerFrame Graphics\MiddleEnd\PerFrame + + Graphics\MiddleEnd\Pipeline + Graphics\MiddleEnd\Shaders Graphics\MiddleEnd\Shaders + + Graphics\MiddleEnd\Textures + Graphics\Pipeline @@ -698,7 +825,13 @@ Math - Math + Math\Transform + + + Math\Transform + + + Math\Transform Math\Vector @@ -740,7 +873,5 @@ Tools - - \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp index 77663ab8..6b770c3d 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp @@ -50,9 +50,8 @@ namespace SHADE return *this; } - std::vector> SHVkDescriptorPool::Allocate(const std::vector>& layouts, std::vector const& variableDescCounts) + Handle SHVkDescriptorPool::Allocate(const std::vector>& layouts, std::vector const& variableDescCounts) { - SHVkInstance::GetResourceManager().Create(device, GetHandle(), layouts, variableDescCounts); - return {}; + return SHVkInstance::GetResourceManager().Create(device, GetHandle(), layouts, variableDescCounts); } } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index 9314d940..b862ec09 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -101,7 +101,7 @@ namespace SHADE /// Handles to the created Descriptor Sets. If this DescriptorPool has run out of /// space, lesser number of Handles will be returned. /// - std::vector> Allocate(const std::vector>& layouts, std::vector const& variableDescCounts); + Handle Allocate(const std::vector>& layouts, std::vector const& variableDescCounts); private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 1130a02b..b38fa275 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -29,6 +29,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" #include "SHGraphicsConstants.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "Graphics/Buffers/SHVkBuffer.h" namespace SHADE { @@ -129,7 +130,7 @@ namespace SHADE } // Initialize world render graph - worldRenderGraph->Init(device, swapchain, renderContextCmdPools, globalData); + worldRenderGraph->Init(device, swapchain, globalData); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); @@ -167,7 +168,7 @@ namespace SHADE debugWorldRenderer->SetCamera(worldCamera);*/ // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), descPool, globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); + worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); @@ -228,16 +229,37 @@ namespace SHADE // For every renderer for (int renIndex = 0; renIndex < static_cast(renderers.size()); ++renIndex) { - // Draw first - renderers[renIndex]->Draw(renderContext.GetCurrentFrame(), MESH_DATA); + /*-----------------------------------------------------------------------*/ + /* Renderer start */ + /*-----------------------------------------------------------------------*/ + // get command buffer of the renderer in the current frame + auto currentCmdBuffer = renderers[renIndex]->GetCommandBuffer(renderContext.GetCurrentFrame()); - // get render graph - auto rg = renderers[renIndex]->GetRenderGraph(); + // Begin recording the command buffer + currentCmdBuffer->BeginRecording(); + + // Bind all the buffers required for meshes + for (auto& [buffer, bindingPoint] : MESH_DATA) + { + if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eVertexBuffer) + currentCmdBuffer->BindVertexBuffer(bindingPoint, buffer, 0); + else if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eIndexBuffer) + currentCmdBuffer->BindIndexBuffer(buffer, 0); + } + + // Draw first + renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + + // End the command buffer recording + currentCmdBuffer->EndRecording(); + /*-----------------------------------------------------------------------*/ + /* Renderer end */ + /*-----------------------------------------------------------------------*/ // submit a command buffer from the current render graph and make it wait for the previous render graph before submitting it to GPU. graphicsQueue->SubmitCommandBuffer ( - { rg->GetCommandBuffer(renderContext.GetCurrentFrame()) }, + { currentCmdBuffer }, { (vpIndex == viewports.size() - 1 && renIndex == renderers.size() - 1) ? frameData.semRenderFinishHdl : graphSemaphores[!semIndex] }, { (vpIndex == 0 && renIndex == 0) ? frameData.semImgAvailableHdl : graphSemaphores[semIndex] }, { vk::PipelineStageFlagBits::eColorAttachmentOutput }, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 90e137fe..223ceb4f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -20,20 +20,28 @@ of DigiPen Institute of Technology is prohibited. #include "SHMaterial.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Buffers/SHVkBuffer.h" namespace SHADE { /*-----------------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------------*/ - SHRenderer::SHRenderer(Handle logicalDevice, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph) + SHRenderer::SHRenderer(Handle logicalDevice, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph) : viewport { viewport } , renderGraph { renderGraph } { - cameraDescriptorSet = logicalDevice->CreateDescriptorSetGroup(descriptorPool, { cameraDescLayout }, { 1 }); + commandBuffers.resize(static_cast(numFrames)); + + for (uint32_t i = 0; i < commandBuffers.size(); ++i) + commandBuffers[i] = cmdPools[i]->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + + cameraDescriptorSet = descriptorPool->Allocate({ cameraDescLayout }, { 1 }); cpuCameraData.resize(numFrames); cameraDataAlignedSize = logicalDevice->PadUBOSize(sizeof(SHShaderCameraData)); + + cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); } /*-----------------------------------------------------------------------------------*/ @@ -47,9 +55,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------------*/ - void SHRenderer::Draw(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept + void SHRenderer::Draw(uint32_t frameIndex) noexcept { - renderGraph->Execute(frameIndex, graphScopeBuffers); + renderGraph->Execute(frameIndex, commandBuffers[frameIndex]); } void SHRenderer::BindDescriptorSet(Handle cmdBuffer, uint32_t frameIndex) noexcept @@ -64,4 +72,9 @@ namespace SHADE return renderGraph; } + Handle SHRenderer::GetCommandBuffer(uint32_t frameIndex) const noexcept + { + return commandBuffers[frameIndex]; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 843ad6bf..bbb7773b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -39,6 +39,7 @@ namespace SHADE class SHVkDescriptorSetGroup; class SHGraphicsGlobalData; class SHVkDescriptorPool; + class SHVkBuffer; struct SHShaderCameraData { @@ -63,7 +64,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ - SHRenderer(Handle logicalDevice, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph); + SHRenderer(Handle logicalDevice, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph); /*-----------------------------------------------------------------------------*/ /* Camera Registration */ @@ -73,13 +74,14 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ - void Draw(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; + void Draw(uint32_t frameIndex) noexcept; void BindDescriptorSet (Handle cmdBuffer, uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ /*-----------------------------------------------------------------------------*/ Handle GetRenderGraph (void) const noexcept; + Handle GetCommandBuffer(uint32_t frameIndex) const noexcept; private: /*-----------------------------------------------------------------------------*/ @@ -92,7 +94,13 @@ namespace SHADE Handle camera; Handle renderGraph; Handle cameraDescriptorSet; + Handle cameraBuffer; std::vector cpuCameraData; + + //! Command buffers for the render graph + std::vector> commandBuffers; + + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 1e38acf1..25c5bca2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -49,10 +49,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Renderer Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHViewport::AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph) + Handle SHViewport::AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph) { // Create the renderer - auto renderer = resourceManager.Create(device, numFrames, descriptorPool, cameraDescLayout, GetHandle(), renderGraph); + auto renderer = resourceManager.Create(device, numFrames, cmdPools, descriptorPool, cameraDescLayout, GetHandle(), renderGraph); // Store renderers.emplace_back(renderer); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 608446a3..d97d62ce 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -32,6 +32,7 @@ namespace SHADE class SHRenderGraph; class SHVkDescriptorPool; class SHVkDescriptorSetLayout; + class SHVkCommandPool; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -58,7 +59,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Renderers Registration Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); + Handle AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); void RemoveRenderer(Handle renderer); /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index d7404db2..d02e8f7d 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -946,25 +946,6 @@ namespace SHADE } } - /***************************************************************************/ - /*! - - \brief - Configures command pools and command buffers. - - */ - /***************************************************************************/ - void SHRenderGraph::ConfigureCommands(void) noexcept - { - //commandPools.resize (static_cast(swapchainHdl->GetNumImages())); - commandBuffers.resize(static_cast(swapchainHdl->GetNumImages())); - - for (uint32_t i = 0; i < commandBuffers.size(); ++i) - { - commandBuffers[i] = commandPools[i]->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - } - } - /***************************************************************************/ /*! @@ -980,12 +961,11 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, std::vector> const& cmdPools, Handle inGlobalData) noexcept + void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept { logicalDeviceHdl = logicalDevice; swapchainHdl = swapchain; globalData = inGlobalData; - commandPools = cmdPools; } /***************************************************************************/ @@ -1087,33 +1067,17 @@ namespace SHADE ConfigureSubpasses(); ConfigureRenderpasses(); ConfigureFramebuffers(); - ConfigureCommands(); } // TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a // better way to manage these - void SHRenderGraph::Execute(uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept + void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer) noexcept { - //commandPools[frameIndex]->Reset(); - - auto& cmdBuffer = commandBuffers[frameIndex]; - cmdBuffer->BeginRecording(); - // TODO: DON'T HARDCODE THIS cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); - for (auto& [buffer, bindingPoint]: graphScopeBuffers) - { - if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eVertexBuffer) - cmdBuffer->BindVertexBuffer(bindingPoint, buffer, 0); - else if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eIndexBuffer) - cmdBuffer->BindIndexBuffer(buffer, 0); - } - for (auto& node : nodes) node->Execute(cmdBuffer, frameIndex); - - cmdBuffer->EndRecording(); } void SHRenderGraph::FinaliseBatch() @@ -1132,9 +1096,5 @@ namespace SHADE return {}; } - Handle const& SHRenderGraph::GetCommandBuffer(uint32_t frameIndex) const noexcept - { - return commandBuffers[frameIndex]; - } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 0ecda65a..cbb9586d 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -250,7 +250,6 @@ namespace SHADE void ConfigureSubpasses (void) noexcept; void ConfigureRenderpasses (void) noexcept; void ConfigureFramebuffers (void) noexcept; - void ConfigureCommands (void) noexcept; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ @@ -271,12 +270,6 @@ namespace SHADE //! Resource library for graph handles ResourceManager resourceManager; - - //! Command pool for the render graph. DO NOT RESET OR FREE THESE, THEY ARE NON-OWNING. TODO: If application is multithreaded, we need more pools. - std::vector> commandPools; - - //! Command buffers for the render graph - std::vector> commandBuffers; //! Handle to global data Handle globalData; @@ -290,18 +283,17 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain, std::vector> const& cmdPools, Handle inGlobalData) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept; void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; - void Execute (uint32_t frameIndex, std::initializer_list, uint32_t>> graphScopeBuffers) noexcept; + void Execute (uint32_t frameIndex, Handle cmdBuffer) noexcept; void FinaliseBatch(); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ Handle GetNode (std::string const& nodeName) const noexcept; - Handle const& GetCommandBuffer (uint32_t frameIndex) const noexcept; }; } diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 55bf73a9..5fcea9fc 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -9,4 +9,4 @@ #include "SHQuaternion.h" #include "SHMatrix.h" -#include "SHTransform.h" \ No newline at end of file +#include "Transform/SHTransform.h" \ No newline at end of file From edfa8c8acef1989601268bc18a1b6f338ba17a46 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 10:03:03 +0800 Subject: [PATCH 153/793] Fixed premake outputdir and interdir --- premake5.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/premake5.lua b/premake5.lua index ab1e6d27..8b6c5a29 100644 --- a/premake5.lua +++ b/premake5.lua @@ -15,7 +15,8 @@ workspace "SHADE" "MultiProcessorCompile" } - outputdir = "bin/%{cfg.architecture}" + outputdir = "%{wks.location}/bin/%{cfg.buildcfg}" + interdir = "%{wks.location}/bin_int" include "SHADE_Engine" include "SHADE_Application" From af1d24d874b990acde823fbeeace6121c36c87b1 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 10:52:07 +0800 Subject: [PATCH 154/793] Fixed certain DLLs and includes missing when copying --- Dependencies.lua | 28 ++++++++++++++-------------- SHADE_Engine/premake5.lua | 24 ++++++++++++------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Dependencies.lua b/Dependencies.lua index 9877a70e..824b512d 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -1,16 +1,16 @@ IncludeDir = {} -IncludeDir["assimp"] = "%{wks.location}/Dependencies/assimp" -IncludeDir["imgui"] = "%{wks.location}/Dependencies/imgui" -IncludeDir["imguizmo"] = "%{wks.location}/Dependencies/imguizmo" -IncludeDir["imnodes"] = "%{wks.location}/Dependencies/imnodes" -IncludeDir["msdf_atlas_gen"] = "%{wks.location}/Dependencies/msdf" -IncludeDir["msdfgen"] = "%{wks.location}/Dependencies/msdf/msdfgen" -IncludeDir["spdlog"] = "%{wks.location}/Dependencies/spdlog" -IncludeDir["tracy"] = "%{wks.location}/Dependencies/tracy" -IncludeDir["VMA"] = "%{wks.location}/Dependencies/VMA" -IncludeDir["yamlcpp"] = "%{wks.location}/Dependencies/yamlcpp/include" -IncludeDir["RTTR"] = "%{wks.location}/Dependencies/RTTR" -IncludeDir["reactphysics3d"] = "%{wks.location}/Dependencies/reactphysics3d" -IncludeDir["SDL"] = "%{wks.location}/Dependencies/SDL" +IncludeDir["assimp"] = "%{wks.location}\\Dependencies\\assimp" +IncludeDir["imgui"] = "%{wks.location}\\Dependencies\\imgui" +IncludeDir["imguizmo"] = "%{wks.location}\\Dependencies\\imguizmo" +IncludeDir["imnodes"] = "%{wks.location}\\Dependencies\\imnodes" +IncludeDir["msdf_atlas_gen"] = "%{wks.location}\\Dependencies\\msdf" +IncludeDir["msdfgen"] = "%{wks.location}\\Dependencies\\msdf\\msdfgen" +IncludeDir["spdlog"] = "%{wks.location}\\Dependencies\\spdlog" +IncludeDir["tracy"] = "%{wks.location}\\Dependencies\\tracy" +IncludeDir["VMA"] = "%{wks.location}\\Dependencies\\VMA" +IncludeDir["yamlcpp"] = "%{wks.location}\\Dependencies\\yamlcpp\\include" +IncludeDir["RTTR"] = "%{wks.location}\\Dependencies\\RTTR" +IncludeDir["reactphysics3d"] = "%{wks.location}\\Dependencies\\reactphysics3d" +IncludeDir["SDL"] = "%{wks.location}\\Dependencies\\SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" -IncludeDir["dotnet"] = "%{wks.location}/Dependencies/dotnet" +IncludeDir["dotnet"] = "%{wks.location}\\Dependencies\\dotnet" diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 74f19f96..84acd8fa 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -25,22 +25,22 @@ project "SHADE_Engine" externalincludedirs { - "%{IncludeDir.assimp}/include", + "%{IncludeDir.assimp}\\include", "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", "%{IncludeDir.msdf_atlas_gen}", "%{IncludeDir.msdfgen}", - "%{IncludeDir.spdlog}/include", + "%{IncludeDir.spdlog}\\include", "%{IncludeDir.tracy}", - "%{IncludeDir.VMA}/include", + "%{IncludeDir.VMA}\\include", "%{IncludeDir.yamlcpp}", - "%{IncludeDir.SDL}/include", - "%{IncludeDir.RTTR}/include", - "%{IncludeDir.reactphysics3d}/include", - "%{IncludeDir.VULKAN}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", - "%{IncludeDir.dotnet}/include", + "%{IncludeDir.SDL}\\include", + "%{IncludeDir.RTTR}\\include", + "%{IncludeDir.reactphysics3d}\\include", + "%{IncludeDir.VULKAN}\\include", + "%{IncludeDir.VULKAN}\\Source\\SPIRV-Reflect", + "%{IncludeDir.dotnet}\\include", } externalwarnings "Off" @@ -100,9 +100,9 @@ project "SHADE_Engine" postbuildcommands { - "xcopy /s /r /y /q \"%{IncludeDir.spdlog}/bin\" \"$(OutDir)\"", - "xcopy /r /y /q \"%{IncludeDir.SDL}/lib/SDL2.dll\" \"$(OutDir)\"", - "xcopy /s /r /y /q \"%{IncludeDir.dotnet}/bin\" \"$(OutDir)\"" + "xcopy /s /r /y /q \"%{IncludeDir.spdlog}\\bin\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.SDL}\\lib\\SDL2.dll\" \"$(OutDir)\"", + "xcopy /s /r /y /q \"%{IncludeDir.dotnet}\\bin\" \"$(OutDir)\"" } warnings 'Extra' From 21a3d6ecd778cc9a2b3c80a9ba7944f9f45038dd Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 11:22:51 +0800 Subject: [PATCH 155/793] Added test code for scripts --- SHADE_Application/src/Scenes/SBTestScene.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 873d0fed..072a15de 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -7,6 +7,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Scripting/SHScriptEngine.h" using namespace SHADE; @@ -42,6 +43,8 @@ namespace Sandbox renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); + SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); + scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(entity), "TestScript"); } void SBTestScene::Update(float dt) { From 8ac6ef95d6d9c7d0d9ee56007d1090e9870058ba Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 11:26:06 +0800 Subject: [PATCH 156/793] SP3-103 Implemented library to load GLTF with assimp and processmesh --- .../src/Assets/Asset Types/SHMeshAsset.h | 16 ++++ .../src/Assets/Libraries/SHMeshLoader.cpp | 89 ++++++++++++++++++- .../src/Assets/Libraries/SHMeshLoader.h | 8 +- 3 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h new file mode 100644 index 00000000..e2a3c373 --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include "Math/SHMath.h" + +namespace SHADE +{ + struct SHMeshAsset + { + std::vector vertexPosition; + std::vector texCoords; + std::vector vertexTangent; + std::vector vertexNormal; + std::vector indices; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 9a1a4599..60ae7ed0 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -1,13 +1,83 @@ #include "SHpch.h" #include "SHMeshLoader.h" -#include #include namespace SHADE { Assimp::Importer SHMeshLoader::aiImporter; - bool SHMeshLoader::LoadMesh(AssetPath path) + void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) + { + for (size_t i {0}; i < node.mNumMeshes; ++i) + { + aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; + meshes.push_back(ProcessMesh(*mesh, scene)); + } + + for (size_t i{ 0 }; i < node.mNumMeshes; ++i) + { + ProcessNode(*node.mChildren[i], scene, meshes); + } + } + + SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) + { + (void)scene; + + SHMeshAsset result; + + for (size_t i{0}; i < mesh.mNumVertices; ++i) + { + // Vertex position + SHVec3 vertex; + vertex.x = mesh.mVertices[i].x; + vertex.y = mesh.mVertices[i].y; + vertex.z = mesh.mVertices[i].z; + result.vertexPosition.push_back(vertex); + + // Tex coords + SHVec2 texCoord{0.f, 0.f}; + if (mesh.mTextureCoords[0]) + { + texCoord.x = mesh.mTextureCoords[0][i].x; + texCoord.y = mesh.mTextureCoords[0][i].y; + } + result.texCoords.push_back(texCoord); + + // Normals + SHVec3 normal{0.f, 0.f, 0.f}; + if (mesh.mNormals) + { + normal.x = mesh.mNormals[i].x; + normal.y = mesh.mNormals[i].y; + normal.z = mesh.mNormals[i].z; + } + result.vertexNormal.push_back(normal); + + // Tangent + SHVec3 tangent{0.f, 0.f, 0.f}; + if (mesh.mTangents) + { + tangent.x = mesh.mTangents[i].x; + tangent.y = mesh.mTangents[i].y; + tangent.z = mesh.mTangents[i].z; + } + result.vertexTangent.push_back(tangent); + } + + for (size_t i {0}; i < mesh.mNumFaces; ++i) + { + aiFace face = mesh.mFaces[i]; + for (size_t j{0}; j < face.mNumIndices; ++j) + { + result.indices.push_back(face.mIndices[j]); + } + } + + return result; + } + + bool SHMeshLoader::LoadMesh(std::vector& meshes, std::vector& images, AssetPath path) { const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), aiProcess_Triangulate @@ -27,5 +97,20 @@ namespace SHADE | aiProcess_PreTransformVertices // pre-transform all vertices | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs ); + + if (!scene || !scene->HasMeshes()) + { + SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); + return false; + } + + for (size_t i {0}; i < scene->mNumTextures; ++i) + { + images.push_back(AssetPath(scene->mTextures[i]->mFilename.C_Str())); + } + + ProcessNode(*scene->mRootNode, *scene, meshes); + + return true; } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index 32f295df..233bd837 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -1,6 +1,9 @@ #pragma once #include "../SHAssetMacros.h" #include +#include +#include "../Asset Types/SHMeshAsset.h" +#include namespace SHADE { @@ -9,7 +12,10 @@ namespace SHADE private: static Assimp::Importer aiImporter; + static void ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes); + + static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene); public: - static bool LoadMesh(AssetPath path); + static bool LoadMesh(std::vector& meshes, std::vector& images, AssetPath path); }; } \ No newline at end of file From 495824080696cbe62bd979ab286118d322fd4ae6 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 11:37:24 +0800 Subject: [PATCH 157/793] Added implementation of GetComponentInChildren() for scripts --- SHADE_Managed/src/Engine/ECS.cxx | 45 ++++++++++++--------- SHADE_Managed/src/Engine/GameObject.cxx | 2 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 48 ++++++++++++----------- 3 files changed, 52 insertions(+), 43 deletions(-) diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index e4405006..36bef851 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -21,6 +21,9 @@ of DigiPen Institute of Technology is prohibited. #include // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" +#include "Scene/SHSceneManager.h" +#include "Scene/SHSceneGraph.h" +#include "Tools/SHLog.h" // Project Headers #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" @@ -124,27 +127,31 @@ namespace SHADE return T(); } - // Get Transform component and get the children list - throw gcnew System::NotImplementedException; - //Pls::Transform* tf = Pls::ECS::GetComponent(entity); - //if (tf == nullptr) - // return T(); + // Get Entity's SceneGraphNode + SHSceneNode* sceneGraphNode = SHSceneManager::GetCurrentSceneGraph().GetNode(entity); + if (sceneGraphNode == nullptr) + { + std::ostringstream oss; + oss << "[ECS_CLI] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + return T(); + } - //// Search direct children first - //for (const auto& child : tf->GetChildren()) - //{ - // T component = GetComponent(child); - // if (component != nullptr) - // return component; - //} + // Search direct children first + for (const auto& child : sceneGraphNode->GetChildren()) + { + T component = GetComponent(child->GetEntityID()); + if (component != nullptr) + return component; + } - //// Search their children - //for (const auto& child : tf->GetChildren()) - //{ - // T script = GetComponentInChildren(child); - // if (script != nullptr) - // return script; - //} + // Search their children + for (const auto& child : sceneGraphNode->GetChildren()) + { + T component = GetComponentInChildren(child->GetEntityID()); + if (component != nullptr) + return component; + } // None here return T(); diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 1fbc3b4a..8c78e399 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -56,7 +56,7 @@ namespace SHADE } bool GameObject::IsActiveInHierarchy::get() { - throw gcnew System::NotImplementedException(); + return true; // TODO: Update once we have an equivalent on the Entity object } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index d30cad6b..089da002 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -20,6 +20,7 @@ of DigiPen Institute of Technology is prohibited. #include // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" +#include "Tools/SHLog.h" // Project Headers #include "Utility/Debug.hxx" #include "Utility/Convert.hxx" @@ -147,7 +148,6 @@ namespace SHADE // Check if entity exists and is a valid GameObject if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to get a Script from."); - // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) @@ -155,27 +155,31 @@ namespace SHADE return T(); } - // Get Transform component and get the children list - throw gcnew System::NotImplementedException; - //Pls::Transform* tf = Pls::ECS::GetComponent(Convert::ToNative(entity)); - //if (tf == nullptr) - // return T(); + // Get Entity's SceneGraphNode + SHSceneNode* sceneGraphNode = SHSceneManager::GetCurrentSceneGraph().GetNode(entity); + if (sceneGraphNode == nullptr) + { + std::ostringstream oss; + oss << "[ECS_CLI] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + return T(); + } - //// Search direct children first - //for (const auto& child : tf->GetChildren()) - //{ - // T script = GetScript(Convert::ToCLI(child)); - // if (script != nullptr) - // return script; - //} + // Search direct children first + for (const auto& child : sceneGraphNode->GetChildren()) + { + T script = GetScript(child->GetEntityID()); + if (script != nullptr) + return script; + } - //// Search their children - //for (const auto& child : tf->GetChildren()) - //{ - // T script = GetScriptInChildren(Convert::ToCLI(child)); - // if (script != nullptr) - // return script; - //} + // Search their children + for (const auto& child : sceneGraphNode->GetChildren()) + { + T script = GetScript(child->GetEntityID()); + if (script != nullptr) + return script; + } // None here return T(); @@ -232,7 +236,6 @@ namespace SHADE // Check if entity exists if (!EntityUtils::IsValid(entity)) throw gcnew System::ArgumentException("Invalid Entity provided to remove a Script from."); - // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) @@ -263,8 +266,7 @@ namespace SHADE Debug::LogError("[ScriptStore] Attempted to remove a Script from an invalid Entity!"); return false; } - - + // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) { From 5ff375113ff658a78b0ea1177bb453bdd7d3632c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 11:39:50 +0800 Subject: [PATCH 158/793] Removed CallbackAction and CallbackEvent for moving to C# library in future --- SHADE_Managed/src/Events/CallbackAction.cxx | 48 ------------ SHADE_Managed/src/Events/CallbackAction.hxx | 57 -------------- SHADE_Managed/src/Events/CallbackEvent.cxx | 71 ----------------- SHADE_Managed/src/Events/CallbackEvent.hxx | 85 --------------------- 4 files changed, 261 deletions(-) delete mode 100644 SHADE_Managed/src/Events/CallbackAction.cxx delete mode 100644 SHADE_Managed/src/Events/CallbackAction.hxx delete mode 100644 SHADE_Managed/src/Events/CallbackEvent.cxx delete mode 100644 SHADE_Managed/src/Events/CallbackEvent.hxx diff --git a/SHADE_Managed/src/Events/CallbackAction.cxx b/SHADE_Managed/src/Events/CallbackAction.cxx deleted file mode 100644 index 0ad356c1..00000000 --- a/SHADE_Managed/src/Events/CallbackAction.cxx +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************************//*! -\file CallbackAction.cxx -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 20, 2022 -\brief Contains the definition of the functions for the CallbackAction managed - class. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2021 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -// Precompiled Headers -#include "SHpch.h" -// Primary Header -#include "CallbackAction.hxx" - -namespace SHADE -{ - /*---------------------------------------------------------------------------------*/ - /* Constructors */ - /*---------------------------------------------------------------------------------*/ - generic - CallbackAction::CallbackAction(System::Reflection::MethodInfo^ method) - : CallbackAction(method, nullptr) - {} - generic - CallbackAction::CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj) - : method { method } - , object { obj } - { - paramArray = gcnew cli::array(1); - } - - /*---------------------------------------------------------------------------------*/ - /* Usage Functions */ - /*---------------------------------------------------------------------------------*/ - generic - void CallbackAction::Invoke(T1 param1) - { - // Set parameters - paramArray[0] = safe_cast(param1); - // Invoke - method->Invoke(object, paramArray); - } -} diff --git a/SHADE_Managed/src/Events/CallbackAction.hxx b/SHADE_Managed/src/Events/CallbackAction.hxx deleted file mode 100644 index f8b50266..00000000 --- a/SHADE_Managed/src/Events/CallbackAction.hxx +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************************//*! -\file CallbackAction.hxx -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 20, 2021 -\brief Contains the definition of the managed CallbackAction class. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -#pragma once - -namespace SHADE -{ - /// - /// Holds a function and their associated object for invoking later. - /// - /// Type of the first parameter. - generic - public ref class CallbackAction - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructors */ - /*-----------------------------------------------------------------------------*/ - /// - /// Constructs a CallbackAction with the specified static method. - /// - /// MethodInfo representing the method to call. - /// Object to call the method on. Set null if static. - CallbackAction(System::Reflection::MethodInfo^ method); - /// - /// Constructs a CallbackAction with the specified instance method and object - /// which will invoke the method. - /// - /// MethodInfo representing the method to call. - /// Object to call the method on. - CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj); - - /*-----------------------------------------------------------------------------*/ - /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Invokes this action with the specified parameters. - /// - /// - void Invoke(T1 param1); - - private: - System::Reflection::MethodInfo^ method; - cli::array^ paramArray; - System::Object^ object; - }; -} \ No newline at end of file diff --git a/SHADE_Managed/src/Events/CallbackEvent.cxx b/SHADE_Managed/src/Events/CallbackEvent.cxx deleted file mode 100644 index 9ba82ef2..00000000 --- a/SHADE_Managed/src/Events/CallbackEvent.cxx +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************************//*! -\file CallbackEvent.cxx -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 20, 2022 -\brief Contains the definition of the functions for the CallbackEvent managed - class. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2021 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -// Precompiled Headers -#include "SHpch.h" -// Primary Header -#include "CallbackEvent.hxx" - -namespace SHADE -{ - /*---------------------------------------------------------------------------------*/ - /* Constructors */ - /*---------------------------------------------------------------------------------*/ - generic - CallbackEvent::CallbackEvent() - { - actions = gcnew System::Collections::Generic::List ^>(); - } - - /*---------------------------------------------------------------------------------*/ - /* Properties */ - /*---------------------------------------------------------------------------------*/ - generic - System::Collections::Generic::IEnumerable^>^ CallbackEvent::Actions::get() - { - return actions; - } - - /*---------------------------------------------------------------------------------*/ - /* Usage Functions */ - /*---------------------------------------------------------------------------------*/ - generic - void CallbackEvent::AddAction(CallbackAction^ action) - { - actions->Add(action); - } - generic - void CallbackEvent::AddAction(System::Reflection::MethodInfo^ method) - { - actions->Add(gcnew CallbackAction(method)); - } - generic - void CallbackEvent::AddAction(System::Reflection::MethodInfo^ method, System::Object^ object) - { - actions->Add(gcnew CallbackAction(method, object)); - } - generic - void CallbackEvent::RemoveAction(CallbackAction^ action) - { - actions->Remove(action); - } - generic - void CallbackEvent::Invoke(T1 param1) - { - for each (CallbackAction^ action in actions) - { - action->Invoke(param1); - } - } -} diff --git a/SHADE_Managed/src/Events/CallbackEvent.hxx b/SHADE_Managed/src/Events/CallbackEvent.hxx deleted file mode 100644 index d0d6d2f1..00000000 --- a/SHADE_Managed/src/Events/CallbackEvent.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************************//*! -\file CallbackEvent.hxx -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 20, 2021 -\brief Contains the definition of the managed CallbackEvent class. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -#pragma once - -#include "CallbackAction.hxx" - -namespace SHADE -{ - /// - /// Holds a set of CallbackActions that can be invoked together at a later time. - /// - /// Type of the first parameter. - generic - public ref class CallbackEvent - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructors */ - /*-----------------------------------------------------------------------------*/ - /// - /// Default Constructor - /// - CallbackEvent(); - - /*-----------------------------------------------------------------------------*/ - /* Properties */ - /*-----------------------------------------------------------------------------*/ - /// - /// Read only access to the list of Actions - /// - property System::Collections::Generic::IEnumerable^>^ Actions - { - System::Collections::Generic::IEnumerable^>^ get(); - } - - /*-----------------------------------------------------------------------------*/ - /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Adds the specified CallbackAction to the CallbackEvent. - /// - /// CallbackAction to add. - void AddAction(CallbackAction^ action); - /// - /// Adds a specified static method as a CallbackAction to the CallbackEvent. - /// - /// Method to add. - void AddAction(System::Reflection::MethodInfo^ method); - /// - /// Adds a specified instance method and associated object as a CallbackAction to - /// the CallbackEvent. - /// - /// Method to add. - /// Object that will call the specified method. - void AddAction(System::Reflection::MethodInfo^ method, System::Object^ object); - /// - /// Removes the specified CallbackAction from the CallbackEvent. - /// - /// CallbackAction to remove. - void RemoveAction(CallbackAction^ action); - /// - /// Invokes all CallbackActions registered with this CallbackEvent with the - /// specified parameters. - /// - /// - void Invoke(T1 param1); - - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - System::Collections::Generic::List^>^ actions; - }; -} \ No newline at end of file From 6f1592e16fd8c5e603aa9dd2b82b98e1b04155d5 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 11:40:24 +0800 Subject: [PATCH 159/793] SP3-103 SP3-102 Added call to mesh loader in asset manager. Removed old references to previous maps and vectors. --- SHADE_Engine/src/Assets/SHAsset.h | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 92 ++++++++----------- SHADE_Engine/src/Assets/SHAssetManager.h | 30 ++---- SHADE_Engine/src/Assets/SHAssetMeta.h | 24 ----- .../src/Assets/SHAssetMetaHandler.cpp | 12 ++- SHADE_Engine/src/Assets/SHAssetMetaHandler.h | 6 +- 6 files changed, 60 insertions(+), 106 deletions(-) delete mode 100644 SHADE_Engine/src/Assets/SHAssetMeta.h diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h index 1f05b742..0ba2285f 100644 --- a/SHADE_Engine/src/Assets/SHAsset.h +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -8,7 +8,7 @@ namespace SHADE struct SHAsset { AssetName name; - AssetID ID; + AssetID id; AssetType type; AssetPath path; FolderLocation location; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 98c019ce..d674e019 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -13,16 +13,19 @@ #include "SHAssetManager.h" #include "SHAssetMetaHandler.h" #include "Filesystem/SHFileSystem.h" -#include + +#include "Libraries/SHMeshLoader.h" namespace SHADE { FMOD::System* SHAssetManager::audioSystem; std::unordered_map* SHAssetManager::audioSoundList; - std::vector SHAssetManager::metaCollection; + std::vector SHAssetManager::assetCollection; std::unordered_map SHAssetManager::assetRegistry; + std::unordered_map SHAssetManager::meshCollection; + /**************************************************************************** * \brief Static function to generate resource ID. ****************************************************************************/ @@ -44,9 +47,9 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::Unload() noexcept { - for (auto const& meta : metaCollection) + for (auto const& asset : assetCollection) { - SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.id].string().append(META_EXTENSION)); + SHAssetMetaHandler::WriteMetaData(asset); } } @@ -75,9 +78,9 @@ namespace SHADE * * \return const& to unordered_map ****************************************************************************/ - std::unordered_map const& SHAssetManager::GetAllAssets() noexcept + std::vector const& SHAssetManager::GetAllAssets() noexcept { - return nameIDRegistry; + assetCollection; } /**************************************************************************** @@ -91,7 +94,7 @@ namespace SHADE AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept { AssetID id{ GenerateAssetID() }; - SHAssetMeta meta; + SHAsset meta; meta.id = id; meta.type = type; @@ -104,15 +107,9 @@ namespace SHADE } AssetPath path{ ASSET_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; - metaCollection.push_back(meta); - pathRegistry[id] = path; - typeRegistry[id] = type; - idNameRegistry[id] = name; - nameIDRegistry[name] = id; - filenameRegistry[name + SHAssetMetaHandler::GetExtensionFromType(type)] = id; - filenameReverse[id] = name + SHAssetMetaHandler::GetExtensionFromType(type); + SHAssetMetaHandler::WriteMetaData(meta); - SHAssetMetaHandler::WriteMetaData(meta, path.string() + META_EXTENSION); + assetCollection.push_back(meta); return id; } @@ -125,20 +122,12 @@ namespace SHADE ****************************************************************************/ AssetID SHAssetManager::ImportNewAsset(char const* p) noexcept { - std::filesystem::path path{ p }; - for (auto const& pa : pathRegistry) - { - if (std::strcmp(pa.second.string().c_str(), path.filename().string().c_str()) == 0) - { - return pa.first; - } - } + std::filesystem::path const path{ p }; - std::filesystem::path newPath{ GenerateLocalPath(path) }; + std::filesystem::path const newPath{ GenerateLocalPath(path) }; if (newPath.empty()) { - //TODO: Assert imported file is not recognised - std::cout << "Unsupported File Formate: " << path.filename() << "\n"; + SHLOG_WARNING("Unsupported file format for asset: {}", path.string()); return 0; } @@ -187,7 +176,7 @@ namespace SHADE } } - std::vector newLoad; + std::vector newLoad; newLoad.reserve(resourceFilesNew.size()); //TODO: Handle if meta does not match all resources (if meta exist and asset doesnt, vice versa) @@ -209,15 +198,9 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::RegisterAsset(AssetPath const& metaPath, AssetPath const& path) noexcept { - SHAssetMeta meta = SHAssetMetaHandler::RetrieveMetaData(metaPath); + SHAsset const meta = SHAssetMetaHandler::RetrieveMetaData(metaPath); - metaCollection.push_back(meta); - pathRegistry.emplace(meta.id, path); - typeRegistry.emplace(meta.id, meta.type); - nameIDRegistry.emplace(GetNameFromPath(path), meta.id); - idNameRegistry.emplace(meta.id, GetNameFromPath(path)); - filenameRegistry.emplace(path.filename().string(), meta.id); - filenameReverse.emplace(meta.id, path.filename().string()); + assetCollection.push_back(meta); } /**************************************************************************** @@ -225,24 +208,16 @@ namespace SHADE * \brief Creates new meta data for new resource. ****************************************************************************/ - SHAssetMeta SHAssetManager::RegisterAssetNew(AssetPath const& resource) noexcept + SHAsset SHAssetManager::RegisterAssetNew(AssetPath const& resource) noexcept { - SHAssetMeta meta; + SHAsset meta; meta.id = GenerateAssetID(); meta.type = SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string()); - metaCollection.push_back(meta); - pathRegistry.emplace(meta.id, resource); - typeRegistry.emplace(meta.id, meta.type); - nameIDRegistry.emplace(GetNameFromPath(resource), meta.id); - idNameRegistry.emplace(meta.id, GetNameFromPath(resource)); - filenameRegistry.emplace(resource.filename().string(), meta.id); - filenameReverse.emplace(meta.id, resource.filename().string()); + assetCollection.push_back(meta); - //LoadData(meta.id); - - SHAssetMetaHandler::WriteMetaData(meta, resource.string() + META_EXTENSION); - return metaCollection.back(); + SHAssetMetaHandler::WriteMetaData(meta); + return assetCollection.back(); } bool SHAssetManager::IsRecognised(char const* ext) noexcept @@ -258,6 +233,17 @@ namespace SHADE return false; } + void SHAssetManager::LoadGLTF(SHAsset asset) noexcept + { + std::vector meshes; + std::vector imagePaths; + SHMeshLoader::LoadMesh(meshes, imagePaths, asset.path); + + //TODO Recognise new meshes as asset as well and write mesh into binary + + + } + /**************************************************************************** * \brief Load all resources that are in the folder ****************************************************************************/ @@ -272,14 +258,14 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::LoadAllData() noexcept { - for (auto const& meta : metaCollection) + for (auto const& asset : assetCollection) { } } void SHAssetManager::LoadData(AssetID id) noexcept { - AssetType type{ typeRegistry[id] }; + (void)id; } /**************************************************************************** @@ -316,7 +302,7 @@ namespace SHADE { if (IsRecognised(file.extension().string().c_str())) { - SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file), file.string() + META_EXTENSION); + SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file)); } else { @@ -330,8 +316,8 @@ namespace SHADE std::filesystem::path p{ path }; if (IsRecognised(p.extension().string().c_str())) { - SHAssetMeta const& meta{ RegisterAssetNew(p) }; - SHAssetMetaHandler::WriteMetaData(meta, p.string() + META_EXTENSION); + SHAsset const& meta{ RegisterAssetNew(p) }; + SHAssetMetaHandler::WriteMetaData(meta); return meta.id; } else diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 5b57c91c..6c5112fb 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -14,11 +14,10 @@ #include #include #include -#include "SHAssetMeta.h" #include "tinyddsloader.h" #include "SHAsset.h" -#include +#include "Asset Types/SHMeshAsset.h" struct _MonoMethod; @@ -49,23 +48,7 @@ namespace SHADE * * \return const& to unordered_map ****************************************************************************/ - static std::unordered_map const& GetAllAssets() noexcept; - - /**************************************************************************** - * \brief Get type of asset from ID - * - * \param resource id of file - * \return AssetType enum class value - ****************************************************************************/ - static AssetType GetTypeFromID(AssetID) noexcept; - - /**************************************************************************** - * \brief Get registered path of asset. - * - * \param resource id of file - * \return std::filesystem::path - ****************************************************************************/ - static AssetPath GetPathFromID(AssetID) noexcept; + static std::vector const& GetAllAssets() noexcept; /**************************************************************************** * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM @@ -129,16 +112,21 @@ namespace SHADE * \brief Creates new meta data for new resource. ****************************************************************************/ - static SHAssetMeta RegisterAssetNew(AssetPath const&) noexcept; + static SHAsset RegisterAssetNew(AssetPath const&) noexcept; static bool IsRecognised(char const*) noexcept; + // Specialised load calls + void LoadGLTF(SHAsset asset) noexcept; + static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; // For all resources - static std::vector metaCollection; + static std::vector assetCollection; static std::unordered_map assetRegistry; + + static std::unordered_map meshCollection; }; } diff --git a/SHADE_Engine/src/Assets/SHAssetMeta.h b/SHADE_Engine/src/Assets/SHAssetMeta.h deleted file mode 100644 index c591e0dd..00000000 --- a/SHADE_Engine/src/Assets/SHAssetMeta.h +++ /dev/null @@ -1,24 +0,0 @@ -/****************************************************************************** - * \file SHAssetMeta.h - * \author Loh Xiao Qi - * \brief Class to hold meta data values for resources - * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction - * or disclosure of this file or its contents without the prior - * written consent of Digipen Institute of Technology is prohibited - ******************************************************************************/ -#ifndef SH_RESOURCE_META_H -#define SH_RESOURCE_META_H - -#include "SHAssetMacros.h" - -namespace SHADE -{ - struct SHAssetMeta - { - AssetID id; - AssetType type; - }; -} - -#endif // !SH_RESOURCE_META_H diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index ae5eab2a..d9cc73e1 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -59,7 +59,7 @@ namespace SHADE * \brief path to meta data file ****************************************************************************/ - SHAssetMeta SHAssetMetaHandler::RetrieveMetaData(AssetPath const& path) noexcept + SHAsset SHAssetMetaHandler::RetrieveMetaData(AssetPath const& path) noexcept { std::ifstream metaFile{ path.string(), std::ios_base::in }; if (!metaFile.is_open()) @@ -68,7 +68,7 @@ namespace SHADE } std::string line; - SHAssetMeta meta; + SHAsset meta; // Get resource id GetFieldValue(metaFile, line); @@ -95,13 +95,17 @@ namespace SHADE * \brief Writes meta data into text file ****************************************************************************/ - void SHAssetMetaHandler::WriteMetaData(SHAssetMeta const& meta, AssetPath const& path) noexcept + void SHAssetMetaHandler::WriteMetaData(SHAsset const& meta) noexcept { + std::string path{ meta.path.string() }; + path.append(META_EXTENSION); + std::ofstream metaFile{ path, std::ios_base::out }; if (!metaFile.is_open()) { - // Log error + SHLOG_ERROR("Asset write path is invalid: {}", path); + return; } metaFile << "ID: " << meta.id << "\n"; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.h b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h index 69095600..88b5329d 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.h +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h @@ -11,7 +11,7 @@ #define SH_RESOURCE_META_HANDLER_H #include "SHAssetMacros.h" -#include "SHAssetMeta.h" +#include "SHAsset.h" namespace SHADE { @@ -36,7 +36,7 @@ namespace SHADE * \brief path to meta data file ****************************************************************************/ - static SHAssetMeta RetrieveMetaData(AssetPath const&) noexcept; + static SHAsset RetrieveMetaData(AssetPath const&) noexcept; /**************************************************************************** * \param Asset meta data to be written into @@ -44,7 +44,7 @@ namespace SHADE * \brief Writes meta data into text file ****************************************************************************/ - static void WriteMetaData(SHAssetMeta const&, AssetPath const&) noexcept; + static void WriteMetaData(SHAsset const&) noexcept; }; } From 8ea845e9f761119bef2e6ec0261269a70bf5644a Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 11:42:29 +0800 Subject: [PATCH 160/793] Changed slash in dependencies lua --- Dependencies.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependencies.lua b/Dependencies.lua index 623afdbc..9ae406f0 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -14,4 +14,4 @@ IncludeDir["reactphysics3d"] = "%{wks.location}\\Dependencies\\reactphysics3d" IncludeDir["SDL"] = "%{wks.location}\\Dependencies\\SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" IncludeDir["dotnet"] = "%{wks.location}\\Dependencies\\dotnet" -IncludeDir["tinyddsloader"] = "%{wks.location}/Dependencies/tinyddsloader" +IncludeDir["tinyddsloader"] = "%{wks.location}\\Dependencies\\tinyddsloader" From 7ddf665460b326c3872338da35ec8e8051cb83ff Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 22 Sep 2022 12:12:44 +0800 Subject: [PATCH 161/793] Updated Descriptor sets Descriptor set layouts now have set index stored in them It should be noted that when passed into a pipeline layout as global descriptor sets, these don't matter since the pipeline layout will use these in the order that they are passed in. --- .../Descriptors/SHDescriptorSetUpdater.cpp | 22 ---- .../Descriptors/SHDescriptorSetUpdater.h | 6 -- .../Descriptors/SHVkDescriptorSetGroup.cpp | 102 +++++++++++++----- .../Descriptors/SHVkDescriptorSetGroup.h | 22 +++- .../Descriptors/SHVkDescriptorSetLayout.cpp | 10 +- .../Descriptors/SHVkDescriptorSetLayout.h | 4 +- .../Graphics/Devices/SHVkLogicalDevice.cpp | 4 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 2 +- .../src/Graphics/Images/SHVkSampler.cpp | 5 + .../src/Graphics/Images/SHVkSampler.h | 1 + .../GlobalData/SHGraphicsGlobalData.cpp | 8 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +- .../MiddleEnd/Interface/SHRenderer.cpp | 6 ++ .../Graphics/Pipeline/SHVkPipelineLayout.cpp | 2 +- SHADE_Engine/src/Graphics/SHVkUtil.cpp | 10 ++ SHADE_Engine/src/Graphics/SHVkUtil.h | 2 + SHADE_Engine/src/Graphics/SHVulkanDefines.h | 2 + SHADE_Engine/src/Graphics/SHVulkanIncludes.h | 1 + .../src/Graphics/Shaders/SHShaderReflected.h | 2 - .../ShaderDescriptorDefinitions.glsl | 11 ++ TempShaderFolder/TestCubeVs.glsl | 8 ++ TempShaderFolder/TestCubeVs.spv | Bin 1428 -> 1680 bytes 22 files changed, 163 insertions(+), 75 deletions(-) create mode 100644 TempShaderFolder/ShaderDescriptorDefinitions.glsl diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp index a1b1cbc2..6cd7ddfd 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.cpp @@ -20,23 +20,6 @@ namespace SHADE } - /***************************************************************************/ - /*! - - \brief - Links the write infos to the vulkan write descriptor sets. - - */ - /***************************************************************************/ - void SHDescriptorSetUpdater::LinkInfoToWriteDescSet(void) noexcept - { - for (uint32_t i = 0; i < writeInfos.size(); ++i) - { - writeDescSets[i].pImageInfo = writeInfos[i].descImageInfos.data(); - writeDescSets[i].pBufferInfo = writeInfos[i].descBufferInfos.data(); - writeDescSets[i].pTexelBufferView = writeInfos[i].descTexelBufferInfos.data(); - } - } SHDescriptorWriteInfo& SHDescriptorWriteInfo::operator=(SHDescriptorWriteInfo&& rhs) noexcept { @@ -65,11 +48,6 @@ namespace SHADE } - std::vector const& SHDescriptorSetUpdater::GetWriteDescriptorSets(void) const noexcept - { - return writeDescSets; - } - SHDescriptorSetUpdater& SHDescriptorSetUpdater::operator=(SHDescriptorSetUpdater&& rhs) noexcept { if (&rhs == this) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h index 7a5ae967..8595d2a0 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHDescriptorSetUpdater.h @@ -41,10 +41,6 @@ namespace SHADE //! When we want to update a write, we need to use this to identify the index of the write. std::unordered_map writeHashMap; - //! We keep this here because we want this to be immediately passable to vkUpdateDescriptorSets - std::vector writeDescSets; - - void LinkInfoToWriteDescSet(void) noexcept; public: SHDescriptorSetUpdater (void) noexcept; @@ -52,8 +48,6 @@ namespace SHADE SHDescriptorSetUpdater& operator= (SHDescriptorSetUpdater&& rhs) noexcept; public: - std::vector const& GetWriteDescriptorSets (void) const noexcept; - friend class SHVkDescriptorSetGroup; }; } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index 4e83d319..f579d377 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -7,6 +7,11 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" #include "Tools/SHLogger.h" +#include "Graphics/Images/SHVkImage.h" +#include "Graphics/Images/SHVkImageView.h" +#include "Graphics/Images/SHVkSampler.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -39,6 +44,7 @@ namespace SHADE : device{deviceHdl} , descPool {pool} , descSets{} + , layoutsUsed {layouts} { // Create the layout for each concurrent frame std::vector vkLayouts{ layouts.size() }; @@ -47,6 +53,7 @@ namespace SHADE for (uint32_t i = 0; i < layouts.size(); ++i) { vkLayouts[i] = layouts[i]->GetVkHandle(); + setIndexing.emplace(layouts[i]->GetSetIndex(), i); } // Check for variable descriptor count @@ -73,34 +80,22 @@ namespace SHADE // allocate descriptor sets descSets = device->GetVkLogicalDevice().allocateDescriptorSets(DESC_SET_LAYOUT_CREATE_INFO); - - - // Now we want to prepare the write descriptor sets for writing later. + // Now we want to prepare the write descriptor sets info for writing later. for (uint32_t i = 0; i < layouts.size(); ++i) { auto const& bindings = layouts[i]->GetBindings(); for (auto& binding : bindings) { BindingAndSetHash writeHash = binding.BindPoint; - writeHash |= static_cast(i) << 32; + writeHash |= static_cast(layouts[i]->GetSetIndex()) << 32; // new write for the binding updater.writeInfos.emplace_back(); updater.writeHashMap.try_emplace(writeHash, updater.writeInfos.size() - 1); auto& writeInfo = updater.writeInfos.back(); - updater.writeDescSets.emplace_back(); - auto& writeDescSet = updater.writeDescSets.back(); - - // Initialize info for write - writeDescSet.descriptorType = binding.Type; - writeDescSet.dstArrayElement = 0; - writeDescSet.dstSet = descSets[i]; - writeDescSet.dstBinding = binding.BindPoint; - // Descriptor count for the write descriptor set. Usually this is set to 1, but if binding is variable sized, set to info passed in uint32_t descriptorCount = (binding.flags & vk::DescriptorBindingFlagBits::eVariableDescriptorCount) ? variableDescCounts[i] : 1; - writeDescSet.descriptorCount = descriptorCount; switch (binding.Type) { @@ -114,8 +109,10 @@ namespace SHADE case vk::DescriptorType::eUniformTexelBuffer: case vk::DescriptorType::eStorageTexelBuffer: case vk::DescriptorType::eUniformBuffer: + case vk::DescriptorType::eUniformBufferDynamic: case vk::DescriptorType::eStorageBuffer: - writeInfo.descImageInfos.resize (descriptorCount); + case vk::DescriptorType::eStorageBufferDynamic: + writeInfo.descBufferInfos.resize (descriptorCount); break; //case vk::DescriptorType::eUniformBufferDynamic: // break; @@ -130,8 +127,6 @@ namespace SHADE } } } - // Link all the writeDescSet data for vkUpdateDescriptorSets to write to the linked descriptors - updater.LinkInfoToWriteDescSet(); } /***************************************************************************/ @@ -160,7 +155,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkDescriptorSetGroup::ModifyWriteDescImage(uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept + void SHVkDescriptorSetGroup::ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle>> const& imageViewsAndSamplers) noexcept { // Find the target writeDescSet BindingAndSetHash writeHash = binding; @@ -176,32 +171,81 @@ namespace SHADE { // write sampler and image view auto& ivs = imageViewsAndSamplers[i]; - writeInfo.descImageInfos[i].imageView = ivs.first; - writeInfo.descImageInfos[i].sampler = ivs.second; + writeInfo.descImageInfos[i].imageView = ivs.first->GetImageView(); + writeInfo.descImageInfos[i].sampler = ivs.second->GetVkSampler(); } } - - void SHVkDescriptorSetGroup::UpdateDescriptorSet(void) noexcept + void SHVkDescriptorSetGroup::ModifyWriteDescBuffer(uint32_t set, uint32_t binding, std::span> const& buffers) noexcept { - device->UpdateDescriptorSets(updater.GetWriteDescriptorSets()); + // Find the target writeDescSet + BindingAndSetHash writeHash = binding; + writeHash |= static_cast(set) << 32; + auto& writeInfo = updater.writeInfos[updater.writeHashMap.at(writeHash)]; + + if (buffers.size() > writeInfo.descBufferInfos.size()) + { + SHLOG_ERROR("Attempting write too many descriptors into descriptor set. Failed to write to vk::WriteDescriptorSet. "); + } + + for (uint32_t i = 0; i < buffers.size(); ++i) + { + // write sampler and image view + auto& buffer = buffers[i]; + writeInfo.descBufferInfos[i].buffer = buffer->GetVkBuffer(); + } + } - - void SHVkDescriptorSetGroup::UpdateSingleDescriptorSetImages(uint32_t set, uint32_t binding) noexcept + void SHVkDescriptorSetGroup::UpdateDescriptorSetImages(uint32_t set, uint32_t binding) noexcept { vk::WriteDescriptorSet writeDescSet{}; + // Get binding + set hash + BindingAndSetHash bsHash = SHVkUtil::GenBindingSetHash(set, binding); + + // to index a set + uint32_t setIndex = setIndexing[bsHash]; + + // to index a write for a binding + uint32_t writeInfoIndex = updater.writeHashMap[bsHash]; + // Initialize info for write - writeDescSet.descriptorType = vk::DescriptorType::eCombinedImageSampler; + writeDescSet.descriptorType = layoutsUsed[setIndex]->GetBindings()[binding].Type; writeDescSet.dstArrayElement = 0; - writeDescSet.dstSet = descSets[set]; + writeDescSet.dstSet = descSets[setIndex]; writeDescSet.dstBinding = binding; - writeDescSet.pImageInfo = updater.writeInfos[set].descImageInfos.data(); - writeDescSet.descriptorCount = static_cast(updater.writeInfos[set].descImageInfos.size()); + writeDescSet.pImageInfo = updater.writeInfos[writeInfoIndex].descImageInfos.data(); + writeDescSet.descriptorCount = static_cast(updater.writeInfos[writeInfoIndex].descImageInfos.size()); device->UpdateDescriptorSet(writeDescSet); } + void SHVkDescriptorSetGroup::UpdateDescriptorSetBuffer(uint32_t set, uint32_t binding) noexcept + { + vk::WriteDescriptorSet writeDescSet{}; + + // Get binding + set hash + BindingAndSetHash bsHash = SHVkUtil::GenBindingSetHash(set, binding); + + // to index a set + uint32_t setIndex = setIndexing[bsHash]; + + // to index a write for a binding + uint32_t writeInfoIndex = updater.writeHashMap[bsHash]; + + // Initialize info for write + writeDescSet.descriptorType = layoutsUsed[setIndex]->GetBindings()[binding].Type; + writeDescSet.dstArrayElement = 0; + writeDescSet.dstSet = descSets[setIndex]; + writeDescSet.dstBinding = binding; + + writeDescSet.pBufferInfo = updater.writeInfos[writeInfoIndex].descBufferInfos.data(); + writeDescSet.descriptorCount = static_cast(updater.writeInfos[writeInfoIndex].descBufferInfos.size()); + + device->UpdateDescriptorSet(writeDescSet); + + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index b65fb1e6..bc87ff1d 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -14,6 +14,10 @@ namespace SHADE class SHVkLogicalDevice; class SHVkDescriptorPool; class SHVkDescriptorSetLayout; + class SHVkSampler; + class SHVkImage; + class SHVkImageView; + class SHVkBuffer; /*---------------------------------------------------------------------------------*/ @@ -54,12 +58,14 @@ namespace SHADE SHVkDescriptorSetGroup& operator=(SHVkDescriptorSetGroup&& rhs) noexcept = default; /*-----------------------------------------------------------------------------*/ - /* Descriptor set writing */ + /* Public member functions */ /*-----------------------------------------------------------------------------*/ - void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::vector> const& imageViewsAndSamplers) noexcept; - void UpdateDescriptorSet(void) noexcept; + void UpdateDescriptorSetImages(uint32_t set, uint32_t binding) noexcept; + void UpdateDescriptorSetBuffer(uint32_t set, uint32_t binding) noexcept; + + void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle>> const& imageViewsAndSamplers) noexcept; + void ModifyWriteDescBuffer (uint32_t set, uint32_t binding, std::span> const& buffers) noexcept; - void UpdateSingleDescriptorSetImages(uint32_t set, uint32_t binding) noexcept; /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -81,9 +87,17 @@ namespace SHADE //! Descriptor pool to allocate descriptor sets Handle descPool; + //! Sometimes when we pass in a layout, the set of the layout used in the + //! shader cannot be used to index into descSets. This is to mitigate that issue + //! when we update descriptor sets. + std::unordered_map setIndexing; + //! Descriptor sets std::vector descSets; + //! Layouts used to create this descriptor set group + std::vector> layoutsUsed; + //! for updating descriptor sets. We want to cache this so that we don't create the //! write structs at runtime. SHDescriptorSetUpdater updater; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp index da1a3645..002aa29d 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp @@ -7,9 +7,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructor/Destructor */ /*---------------------------------------------------------------------------------*/ - SHVkDescriptorSetLayout::SHVkDescriptorSetLayout(Handle device, const std::vector& bindings) + SHVkDescriptorSetLayout::SHVkDescriptorSetLayout(Handle device, SetIndex set, const std::vector& bindings) : device { device } , layoutDesc { bindings } + , setIndex {set} { // Check if auto-binding point calculation configuration is valid bool autoCalc = false; @@ -74,6 +75,7 @@ namespace SHADE : device {rhs.device} , setLayout {rhs.setLayout} , layoutDesc{std::move (rhs.layoutDesc)} + , setIndex {rhs.setIndex} { rhs.setLayout = VK_NULL_HANDLE; } @@ -90,6 +92,11 @@ namespace SHADE return layoutDesc; } + SetIndex SHVkDescriptorSetLayout::GetSetIndex(void) const noexcept + { + return setIndex; + } + SHVkDescriptorSetLayout& SHVkDescriptorSetLayout::operator=(SHVkDescriptorSetLayout&& rhs) noexcept { if (&rhs == this) @@ -98,6 +105,7 @@ namespace SHADE device = rhs.device; setLayout = rhs.setLayout; layoutDesc = std::move(rhs.layoutDesc); + setIndex = rhs.setIndex; rhs.setLayout = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h index 1acba189..9b436026 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h @@ -74,7 +74,7 @@ namespace SHADE /// /// /// - SHVkDescriptorSetLayout(Handle device, const std::vector& bindings); + SHVkDescriptorSetLayout(Handle device, SetIndex setIndex, const std::vector& bindings); SHVkDescriptorSetLayout(const SHVkDescriptorSetLayout&) = delete; SHVkDescriptorSetLayout(SHVkDescriptorSetLayout&& rhs) noexcept; /// @@ -97,6 +97,7 @@ namespace SHADE /// Handle to the Vulkan Descriptor Set Layout handle. inline const vk::DescriptorSetLayout& GetVkHandle() const { return setLayout; } std::vector const& GetBindings (void) const noexcept; + SetIndex GetSetIndex (void) const noexcept; private: /*-----------------------------------------------------------------------------*/ @@ -105,5 +106,6 @@ namespace SHADE Handle device; vk::DescriptorSetLayout setLayout; std::vector layoutDesc; // Stores description of the layout + SetIndex setIndex; // Index of the set }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index a956af2c..64508a2b 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -510,9 +510,9 @@ namespace SHADE } - Handle SHVkLogicalDevice::CreateDescriptorSetLayout(std::vector const& bindings) noexcept + Handle SHVkLogicalDevice::CreateDescriptorSetLayout(SetIndex setIndex, std::vector const& bindings) noexcept { - return SHVkInstance::GetResourceManager().Create (GetHandle(), bindings); + return SHVkInstance::GetResourceManager().Create (GetHandle(), setIndex, bindings); } diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 6c59572a..365e68c9 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -182,7 +182,7 @@ namespace SHADE Handle CreateRenderpass (std::span const vkDescriptions, std::vector const& subpasses) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::span const spDescs, std::span const spDeps) noexcept; Handle CreateFramebuffer (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; - Handle CreateDescriptorSetLayout (std::vector const& bindings) noexcept; + Handle CreateDescriptorSetLayout (SetIndex setIndex, std::vector const& bindings) noexcept; Handle CreateDescriptorPools (const SHVkDescriptorPool::Config& config = {}) noexcept; Handle CreateDescriptorSetGroup(Handle pool, std::vector> const& layouts, diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index e7a97126..b4bbf89b 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -4,4 +4,9 @@ namespace SHADE { + vk::Sampler SHVkSampler::GetVkSampler(void) const noexcept + { + return vkSampler; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h index d58edb8f..eae23adf 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -22,6 +22,7 @@ namespace SHADE SHVkSampler (SHVkSampler&& rhs) noexcept; SHVkSampler&& operator=(SHVkSampler&& rhs) noexcept; + vk::Sampler GetVkSampler (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 5289b635..d9ffa6b5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -27,7 +27,7 @@ namespace SHADE }; // For global data (generic data and textures) - Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ genericDataBinding, texturesBinding }); + Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS,{ genericDataBinding, texturesBinding }); SHVkDescriptorSetLayout::Binding lightBinding { @@ -38,7 +38,7 @@ namespace SHADE }; // For Dynamic global data (lights) - Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ lightBinding }); + Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, { lightBinding }); SHVkDescriptorSetLayout::Binding cameraDataBinding { @@ -49,7 +49,7 @@ namespace SHADE }; // For High frequency global data (camera) - Handle cameraDataGlobalLayout = logicalDevice->CreateDescriptorSetLayout({ cameraDataBinding }); + Handle cameraDataGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, { cameraDataBinding }); SHVkDescriptorSetLayout::Binding materialDataBinding { @@ -60,7 +60,7 @@ namespace SHADE }; // For High frequency global data (camera) - Handle materialDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout({ materialDataBinding }); + Handle materialDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, { materialDataBinding }); globalDescSetLayouts.push_back(staticGlobalLayout); globalDescSetLayouts.push_back(dynamicGlobalLayout); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index b38fa275..1026d01b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -204,6 +204,7 @@ namespace SHADE { // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); + uint32_t frameIndex = renderContext.GetCurrentFrame(); // semaphore index. This is for render graphs to have semaphores to signal that the next render graph will use to wait on. bool semIndex = 0; @@ -233,7 +234,7 @@ namespace SHADE /* Renderer start */ /*-----------------------------------------------------------------------*/ // get command buffer of the renderer in the current frame - auto currentCmdBuffer = renderers[renIndex]->GetCommandBuffer(renderContext.GetCurrentFrame()); + auto currentCmdBuffer = renderers[renIndex]->GetCommandBuffer(frameIndex); // Begin recording the command buffer currentCmdBuffer->BeginRecording(); @@ -247,8 +248,11 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } + // bind camera data + renderers[renIndex]->BindDescriptorSet(currentCmdBuffer, frameIndex); + // Draw first - renderers[renIndex]->Draw(renderContext.GetCurrentFrame()); + renderers[renIndex]->Draw(frameIndex); // End the command buffer recording currentCmdBuffer->EndRecording(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 223ceb4f..fd702968 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -42,6 +42,12 @@ namespace SHADE cameraDataAlignedSize = logicalDevice->PadUBOSize(sizeof(SHShaderCameraData)); cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + + std::array cameraBufferArray{cameraBuffer}; + + cameraDescriptorSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, std::span>{ cameraBufferArray.data(), cameraBufferArray.size()}); + + cameraDescriptorSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA); } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp index cc738aed..fc40f394 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp @@ -198,7 +198,7 @@ namespace SHADE // 1 descriptor set layout for every descriptor set detected. for (auto const& set : setsWithBindings) { - auto newDescriptorSetLayout = logicalDeviceHdl->CreateDescriptorSetLayout(set.second); + auto newDescriptorSetLayout = logicalDeviceHdl->CreateDescriptorSetLayout(set.first, set.second); descriptorSetLayoutsAllocate.push_back(newDescriptorSetLayout); } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index c570caf2..e4f9f37e 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -71,4 +71,14 @@ namespace SHADE ); } } + + BindingAndSetHash SHVkUtil::GenBindingSetHash(uint32_t set, uint32_t binding) noexcept + { + // Find the target writeDescSet + BindingAndSetHash writeHash = binding; + writeHash |= static_cast(set) << 32; + + return writeHash; + } + } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index 46ebf096..cba5b062 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -76,6 +76,8 @@ namespace SHADE */ /***********************************************************************************/ static void EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); + + static BindingAndSetHash GenBindingSetHash (uint32_t set, uint32_t binding) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/SHVulkanDefines.h b/SHADE_Engine/src/Graphics/SHVulkanDefines.h index 542f379d..2f625f7e 100644 --- a/SHADE_Engine/src/Graphics/SHVulkanDefines.h +++ b/SHADE_Engine/src/Graphics/SHVulkanDefines.h @@ -6,6 +6,8 @@ namespace SHADE { using SHQueueFamilyIndex = uint32_t; + using BindingAndSetHash = uint64_t; + using SetIndex = uint32_t; } diff --git a/SHADE_Engine/src/Graphics/SHVulkanIncludes.h b/SHADE_Engine/src/Graphics/SHVulkanIncludes.h index 472226a0..63aa672b 100644 --- a/SHADE_Engine/src/Graphics/SHVulkanIncludes.h +++ b/SHADE_Engine/src/Graphics/SHVulkanIncludes.h @@ -6,5 +6,6 @@ #define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1 #define VULKAN_HPP_NO_NODISCARD_WARNINGS #include +#include "Graphics/SHVulkanDefines.h" #endif diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h index 88c7a2e1..3986f823 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.h @@ -9,8 +9,6 @@ namespace SHADE { - using BindingAndSetHash = uint64_t; - struct SHShaderDescriptorBindingInfo { private: diff --git a/TempShaderFolder/ShaderDescriptorDefinitions.glsl b/TempShaderFolder/ShaderDescriptorDefinitions.glsl new file mode 100644 index 00000000..c70a9f5b --- /dev/null +++ b/TempShaderFolder/ShaderDescriptorDefinitions.glsl @@ -0,0 +1,11 @@ +#define SET_STATIC_GLOBALS 0 +#define SET_DYNAMIC_GLOBALS 1 +#define SET_HIGH_FREQUENCY_GLOBALS 2 + +#define BINDING_GENERIC_DATA 0 +#define BINDING_IMAGE_AND_SAMPLERS_DATA 1 +#define BINDING_LIGHTS_DATA 0 +#define BINDING_CAMERA_DATA 0 +#define BINDING_BATCHED_PER_INST_DATA 0 + + diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index f7dce787..08c465a0 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -1,6 +1,8 @@ #version 450 #extension GL_KHR_vulkan_glsl : enable +//#include "ShaderDescriptorDefinitions.glsl" + layout(location = 0) in vec3 aVertexPos; layout(location = 1) in vec2 aUV; layout(location = 2) in vec3 aNormal; @@ -28,6 +30,12 @@ layout(location = 0) out struct } Out; +layout(set = 2, binding = 0) uniform CameraData +{ + vec4 position; + mat4 vpMat; +} cameraData; + void main() { //const float gamma = testPushConstant.eyePosition.w; diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index 2b0d3b93c0c4a570f997eae1f3763e05cb6cbbab..be24aa3a944eff08f83a27869e46ef93dcc93eae 100644 GIT binary patch delta 293 zcmbQjJ%N{(nMs+Qfq{{Mi-DIxe#voP(Rt6mg1_tNE+|;5(m&B4p1_m}D1c`w_ zL4I*&NoIZ?h|LC7%Lrtb75FBW0BMkZJs_P7*FX6kw9PW?IXrD+jd@ dWRNBhD**YrKpLbGp;Bdp1`vZ(-aV!)n3^0DNT#AOHXW From 8cfe58a3adf51b77034cd9d6e49f3f5fff0157b6 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 12:29:30 +0800 Subject: [PATCH 162/793] SP3-103 SP3-104 Implemented DDS loading and error reporting Not tested --- .../src/Assets/Asset Types/SHDDSAsset.h | 11 ++++ .../src/Assets/Libraries/SHDDSLoader.cpp | 50 +++++++++++++++++++ .../src/Assets/Libraries/SHDDSLoader.h | 18 +++++++ .../src/Assets/Libraries/SHMeshLoader.h | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 10 ++-- SHADE_Engine/src/Assets/SHAssetManager.h | 2 + 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h create mode 100644 SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h new file mode 100644 index 00000000..30f22c4e --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h @@ -0,0 +1,11 @@ +#pragma once + +#include "tinyddsloader.h" + +namespace SHADE +{ + struct SHDDSAsset + { + tinyddsloader::DDSFile image; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp new file mode 100644 index 00000000..bcd7b65b --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp @@ -0,0 +1,50 @@ +#include "SHpch.h" +#include "SHDDSLoader.h" + +namespace SHADE +{ + std::string SHDDSLoader::TinyDDSResultToString(tinyddsloader::Result value) + { + switch (value) + { + case tinyddsloader::Result::ErrorFileOpen: + return "File open err"; + case tinyddsloader::Result::ErrorRead: + return "File read err"; + case tinyddsloader::Result::ErrorMagicWord: + return "File header magicword err"; + case tinyddsloader::Result::ErrorSize: + return "File size err"; + case tinyddsloader::Result::ErrorVerify: + return "Pixel format err"; + case tinyddsloader::Result::ErrorNotSupported: + return "Unsupported format"; + case tinyddsloader::Result::ErrorInvalidData: + return "Invalid data"; + default: + return "Unknown"; + } + } + + void SHDDSLoader::LoadImageAsset(std::vector const& paths, std::vector& images) + { + std::vector result; + tinyddsloader::Result loadResult = tinyddsloader::Result::Success; + AssetPath lastPath; + for (auto const& path : paths) + { + if (loadResult == tinyddsloader::Result::Success) + { + result.emplace_back(); + } + else + { + SHLOG_ERROR("Unable to load DDS file: {} at {}", TinyDDSResultToString(loadResult), lastPath.string()); + } + loadResult = result.back().image.Load(path.string().c_str()); + lastPath = path; + } + + std::swap(images, result); + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h new file mode 100644 index 00000000..4a136db4 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h @@ -0,0 +1,18 @@ +#pragma once +#define TINYDDSLOADER_IMPLEMENTATION + +#include "../SHAssetMacros.h" +#include "../Asset Types/SHDDSAsset.h" +#include "tinyddsloader.h" +#include + +namespace SHADE +{ + class SHDDSLoader + { + private: + static std::string TinyDDSResultToString(tinyddsloader::Result value); + public: + static void LoadImageAsset(std::vector const& paths, std::vector& images); + }; +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index 233bd837..8580102e 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -1,7 +1,7 @@ #pragma once -#include "../SHAssetMacros.h" #include #include +#include "../SHAssetMacros.h" #include "../Asset Types/SHMeshAsset.h" #include diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index d674e019..c9147a7b 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -15,6 +15,7 @@ #include "Filesystem/SHFileSystem.h" #include "Libraries/SHMeshLoader.h" +#include "Libraries/SHDDSLoader.h" namespace SHADE { @@ -25,6 +26,7 @@ namespace SHADE std::unordered_map SHAssetManager::assetRegistry; std::unordered_map SHAssetManager::meshCollection; + std::unordered_map SHAssetManager::ddsCollection; /**************************************************************************** * \brief Static function to generate resource ID. @@ -80,7 +82,7 @@ namespace SHADE ****************************************************************************/ std::vector const& SHAssetManager::GetAllAssets() noexcept { - assetCollection; + return assetCollection; } /**************************************************************************** @@ -237,11 +239,13 @@ namespace SHADE { std::vector meshes; std::vector imagePaths; + std::vector images; + SHMeshLoader::LoadMesh(meshes, imagePaths, asset.path); + SHDDSLoader::LoadImageAsset(imagePaths, images); //TODO Recognise new meshes as asset as well and write mesh into binary - - + //TODO } /**************************************************************************** diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 6c5112fb..8cef4fed 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -18,6 +18,7 @@ #include "SHAsset.h" #include "Asset Types/SHMeshAsset.h" +#include "Asset Types/SHDDSAsset.h" struct _MonoMethod; @@ -127,6 +128,7 @@ namespace SHADE static std::unordered_map assetRegistry; static std::unordered_map meshCollection; + static std::unordered_map ddsCollection; }; } From 5bc24b09d4ef27acb4a23d89ccb939528a142e40 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 12:31:26 +0800 Subject: [PATCH 163/793] Added generalisation of csproj file location --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 107 ++++++++++-------- SHADE_Engine/src/Scripting/SHScriptEngine.h | 9 +- TempScriptsFolder/TestScript.cs | 11 ++ 3 files changed, 77 insertions(+), 50 deletions(-) create mode 100644 TempScriptsFolder/TestScript.cs diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 78b4d544..56f93812 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -22,14 +22,16 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*--------------------------------------------------------------------------------*/ - /* Static Definitions */ - /*--------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Static Definitions */ + /*----------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); + const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; + const std::string SHScriptEngine::CSPROJ_PATH = std::string(CSPROJ_DIR) + "\\SHADE_Scripting.csproj"; - /*---------------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------------*/ void SHScriptEngine::Init() { // Do not allow initialization if already initialised @@ -99,9 +101,9 @@ namespace SHADE dotNet.Exit(); } - /*---------------------------------------------------------------------------------*/ - /* Script Manipulation Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Script Manipulation Functions */ + /*-----------------------------------------------------------------------------------*/ bool SHScriptEngine::AddScript(const SHEntity& entity, const std::string_view& scriptName) { return csScriptsAdd(entity.GetEID(), scriptName.data()); @@ -140,41 +142,40 @@ namespace SHADE return result; } - /*---------------------------------------------------------------------------------*/ - /* Script Serialisation Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Script Serialisation Functions */ + /*-----------------------------------------------------------------------------------*/ void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) const { csScriptDeserialise(entity.GetEID(), yaml.c_str()); } - /*---------------------------------------------------------------------------------*/ - /* Script Editor Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Script Editor Functions */ + /*-----------------------------------------------------------------------------------*/ void SHScriptEngine::RenderScriptsInInspector(const SHEntity& entity) const { csEditorRenderScripts(entity.GetEID()); } - /*---------------------------------------------------------------------------------*/ - /* Static Utility Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Static Utility Functions */ + /*-----------------------------------------------------------------------------------*/ bool SHScriptEngine::BuildScriptAssembly(bool debug) const { - constexpr std::string_view BUILD_LOG_PATH = "../Build.log"; + static const std::string BUILD_LOG_PATH = "../Build.log"; // Generate csproj file if it doesn't exist - static const std::filesystem::path CSPROJ_PATH = "../SHADE_Scripting.csproj"; if (!std::filesystem::exists(CSPROJ_PATH)) { GenerateScriptsCsProjFile(CSPROJ_PATH); } // Prepare directory (delete useless files) - deleteFolder("net5.0"); - deleteFolder("ref"); - deleteFolder("../SHADE_Scripting"); - deleteFolder("../obj"); + deleteFolder(CSPROJ_DIR + "\\net5.0"); + deleteFolder(CSPROJ_DIR + "\\ref"); + deleteFolder(CSPROJ_DIR + "\\obj"); + deleteFolder(CSPROJ_DIR + "\\bin"); // Attempt to build the assembly std::ostringstream oss; @@ -184,7 +185,7 @@ namespace SHADE const bool BUILD_SUCCESS = execProcess ( L"C:\\Windows\\system32\\cmd.exe", - L"/K \"dotnet build \"../SHADE_Scripting.csproj\" -c Debug -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet & exit\"" + L"/K \"" + generateBuildCommand(debug) + L" & exit\"" ) == 0; if (BUILD_SUCCESS) { @@ -202,6 +203,7 @@ namespace SHADE // Clean up built files deleteFolder("./tmp"); + deleteFolder(CSPROJ_DIR + "\\obj"); // Read the build log and output to the console dumpBuildLog(BUILD_LOG_PATH); @@ -209,7 +211,7 @@ namespace SHADE deleteFile(BUILD_LOG_PATH); return BUILD_SUCCESS; - } + } void SHScriptEngine::GenerateScriptsCsProjFile(const std::filesystem::path& path) const { @@ -222,11 +224,11 @@ namespace SHADE Release;Debug\n\ \n\ \n\ - .\\bin_Release-x64\n\ + .\\bin\\Release\n\ x64\n\ \n\ \n\ - .\\bin_Debug-x64\n\ + .\\bin\\Debug\n\ x64\n\ DEBUG;TRACE\n\ false\n\ @@ -245,7 +247,8 @@ namespace SHADE \n\ \n\ \n\ - .\\bin\\SHADE_Managed.dll\n\ + ..\\bin\\Debug\\SHADE_Managed.dll\ + ..\\bin\\Release\\SHADE_Managed.dll\ \n\ \n\ "; @@ -262,9 +265,9 @@ namespace SHADE file.close(); } - /*---------------------------------------------------------------------------------*/ - /* Helper Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------------*/ void SHScriptEngine::loadFunctions() { std::ostringstream oss; @@ -404,25 +407,25 @@ namespace SHADE } } } - void SHScriptEngine::deleteFile(const std::string_view& filePath) + void SHScriptEngine::deleteFile(const std::string& filePath) { - try - { - std::filesystem::remove(std::filesystem::canonical(filePath)); - } - catch (...) {} // Ignore deletion failures - } - - void SHScriptEngine::deleteFolder(const std::string_view& filePath) + try { - try - { - std::filesystem::remove_all(std::filesystem::canonical(filePath)); - } - catch (...) {} // Ignore deletion failures + std::filesystem::remove(std::filesystem::canonical(filePath)); } + catch (...) {} // Ignore deletion failures + } + + void SHScriptEngine::deleteFolder(const std::string& filePath) + { + try + { + std::filesystem::remove_all(std::filesystem::canonical(filePath)); + } + catch (...) {} // Ignore deletion failures + } - bool SHScriptEngine::fileExists(const std::string_view& filePath) + bool SHScriptEngine::fileExists(const std::filesystem::path& filePath) { std::error_code error; if (std::filesystem::exists(filePath, error)) @@ -483,4 +486,14 @@ namespace SHADE } } } + + std::wstring SHScriptEngine::generateBuildCommand(bool debug) + { + std::wostringstream oss; + oss << "dotnet build \"" << SHStringUtils::StrToWstr(CSPROJ_PATH) << "\" -c "; + oss << debug ? "Debug" : "Release"; + oss << " -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet"; + return oss.str(); + } + } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index f3d69dd5..fa205266 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -208,6 +208,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ static constexpr std::string_view DEFAULT_CSHARP_LIB_NAME = "SHADE_Managed"; static constexpr std::string_view MANAGED_SCRIPT_LIB_NAME = "SHADE_Scripting"; + static const std::string CSPROJ_DIR; + static const std::string CSPROJ_PATH; static const std::string DEFAULT_CSHARP_NAMESPACE; /*-----------------------------------------------------------------------------*/ @@ -260,18 +262,19 @@ namespace SHADE /// Deletes the file as specified by the file path. /// /// File path to the file to delete. - static void deleteFile(const std::string_view& filePath); + static void deleteFile(const std::string& filePath); /// /// Deletes the folder and all files in it as specified by the file path. /// /// File path to the file to delete. - static void deleteFolder(const std::string_view& filePath); + static void deleteFolder(const std::string& filePath); /// /// Checks if a specified file exists. /// /// File path to the file to check. /// True if the file exists - static bool fileExists(const std::string_view& filePath); + static bool fileExists(const std::filesystem::path& filePath); static DWORD execProcess(const std::wstring& path, const std::wstring& args); + static std::wstring generateBuildCommand(bool debug); }; } diff --git a/TempScriptsFolder/TestScript.cs b/TempScriptsFolder/TestScript.cs new file mode 100644 index 00000000..0e4823a2 --- /dev/null +++ b/TempScriptsFolder/TestScript.cs @@ -0,0 +1,11 @@ +using SHADE; + +public class TestScript : Script +{ + public TestScript(GameObject gameObj) : base(gameObj) {} + + protected override void update() + { + Debug.Log("TestScript.Update()"); + } +} \ No newline at end of file From e87c4c8dc846a5c391905f48e7dbba663e2b3742 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 12:39:05 +0800 Subject: [PATCH 164/793] Fixed SHTextureLibrary compiler errors --- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 2 +- .../Graphics/MiddleEnd/Textures/SHTextureLibrary.h | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 3be4dd11..80be81df 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -26,7 +26,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, int mipLevels) + Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, uint32_t mipLevels) { isDirty = true; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index d30b02ed..5cf974ef 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -18,6 +18,7 @@ of DigiPen Institute of Technology is prohibited. #include "Resource/Handle.h" #include "Resource/ResourceLibrary.h" #include "Math/SHMath.h" +#include "Graphics/SHVulkanIncludes.h" namespace SHADE { @@ -27,6 +28,11 @@ namespace SHADE class SHVkBuffer; class SHVkLogicalDevice; class SHVkCommandBuffer; + class SHVkImage; + class SHVkImageView; + class SHVkQueue; + class SHVkDescriptorPool; + class SHVkDescriptorSetLayout; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -37,7 +43,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------*/ - using PixelChannel = void; + using PixelChannel = float; using TextureFormat = vk::Format; // TODO: Change using Index = uint32_t; @@ -82,7 +88,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, int mipLevels); + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, uint32_t mipLevels); /*******************************************************************************/ /*! @@ -112,7 +118,7 @@ namespace SHADE queue. */ /***************************************************************************/ - void BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue); + void BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -128,7 +134,7 @@ namespace SHADE uint32_t PixelCount = 0; const SHTexture::PixelChannel* PixelData = nullptr; SHTexture::TextureFormat TextureFormat = {}; - int MipLevels = 0; + uint32_t MipLevels = 0; Handle Image; Handle Handle; }; From 8066c3cd6a181e4b092867ef34acdf7b9a708bb2 Mon Sep 17 00:00:00 2001 From: Glence Date: Thu, 22 Sep 2022 14:05:53 +0800 Subject: [PATCH 165/793] added audioSystem(the base not working yet) added components to use the audioSystme --- Dependencies.lua | 1 + SHADE_Engine/premake5.lua | 8 +- .../AudioSystem/SHAudioListenerComponent.cpp | 58 ++ .../AudioSystem/SHAudioListenerComponent.h | 42 ++ .../AudioSystem/SHAudioSourceComponent.cpp | 89 +++ .../src/AudioSystem/SHAudioSourceComponent.h | 60 ++ .../src/AudioSystem/SHAudioSystem.cpp | 563 ++++++++++++++++++ SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 100 ++++ 8 files changed, 918 insertions(+), 3 deletions(-) create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp create mode 100644 SHADE_Engine/src/AudioSystem/SHAudioSystem.h diff --git a/Dependencies.lua b/Dependencies.lua index 824b512d..8e8df730 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -14,3 +14,4 @@ IncludeDir["reactphysics3d"] = "%{wks.location}\\Dependencies\\reactphysics3d" IncludeDir["SDL"] = "%{wks.location}\\Dependencies\\SDL" IncludeDir["VULKAN"] = "$(VULKAN_SDK)" IncludeDir["dotnet"] = "%{wks.location}\\Dependencies\\dotnet" +IncludeDir["fmod"] = "%{wks.location}\\Dependencies\\fmod" \ No newline at end of file diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 84acd8fa..00415139 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -41,6 +41,7 @@ project "SHADE_Engine" "%{IncludeDir.VULKAN}\\include", "%{IncludeDir.VULKAN}\\Source\\SPIRV-Reflect", "%{IncludeDir.dotnet}\\include", + "%{IncludeDir.fmod}\\include", } externalwarnings "Off" @@ -53,7 +54,8 @@ project "SHADE_Engine" "%{IncludeDir.assimp}/lib/Release", "%{IncludeDir.RTTR}/lib", "%{IncludeDir.SDL}/lib", - "%{IncludeDir.spdlog}/lib" + "%{IncludeDir.spdlog}/lib", + "%{IncludeDir.fmod}/lib", } links @@ -111,10 +113,10 @@ project "SHADE_Engine" symbols "On" defines {"_DEBUG"} links{"assimp-vc142-mtd.lib", "librttr_core_d.lib", "spdlogd.lib"} - --links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} + links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE"} links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} - --links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file + links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp new file mode 100644 index 00000000..c496ff07 --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp @@ -0,0 +1,58 @@ +/********************************************************************* +* \file SHAudioListenerComponent.cpp +* \author Glence Low +* \brief Definition of the SHAudioListenerComponent class. +* +* \copyright Copyright (c) 2021 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. +*********************************************************************/ + +#include "SHpch.h" +#include "SHAudioListenerComponent.h" +#include "ECS_Base/System/SHSystemManager.h" + +namespace SHADE +{ + const SHMathVec3f SHAudioListenerComponent::GetPos() const + { + return pos; + } + + const SHMathVec3f SHAudioListenerComponent::GetVel() const + { + return vel; + } + + const SHMathVec3f SHAudioListenerComponent::GetForward() const + { + return forward; + } + + const SHMathVec3f SHAudioListenerComponent::GetUp() const + { + return up; + } + + void SHAudioListenerComponent::SetPos(SHMathVec3f p) + { + pos = p; + } + + void SHAudioListenerComponent::SetVel(SHMathVec3f v) + { + vel = v; + } + + void SHAudioListenerComponent::SetForward(SHMathVec3f f) + { + forward = f; + } + + void SHAudioListenerComponent::SetUp(SHMathVec3f u) + { + up = u; + } + +} + diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h new file mode 100644 index 00000000..4b024e79 --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h @@ -0,0 +1,42 @@ +#pragma once +/********************************************************************* + * \file SHAudioListenerComponent.h + * \author Glence Low + * \brief Declaration of the SHAudioListenerComponent class. + * + * \copyright Copyright (c) 2021 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. +*********************************************************************/ + +#pragma once +#include "ECS_Base/Components/SHComponent.h" +#include "Math/SHMathVec.h" + +namespace SHADE +{ + class SHAudioListenerComponent : public SHComponent + { + friend class SHAudioSystem; + public: + + SHAudioListenerComponent() = default; + ~SHAudioListenerComponent() = default; + + const SHMathVec3f GetPos() const; + const SHMathVec3f GetVel() const; + const SHMathVec3f GetForward() const; + const SHMathVec3f GetUp() const; + + void SetPos(SHMathVec3f p); + void SetVel(SHMathVec3f v); + void SetForward(SHMathVec3f f); + void SetUp(SHMathVec3f u); + + + + private: + SHMathVec3f pos{}, vel{}, forward{}, up{ 0.f,1.f,0.f }; + }; +}//namespace SHADE + diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp new file mode 100644 index 00000000..9d216439 --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp @@ -0,0 +1,89 @@ +/********************************************************************* +* \file SHAudioSourceComponet.cpp +* \author Glence Low +* \brief Definition of the SHAudioSourceComponet class. +* +* \copyright Copyright (c) 2021 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. +*********************************************************************/ + +#include "SHpch.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "AudioSystem/SHAudioSystem.h" +#include "SHAudioSourceComponent.h" + +namespace SHADE +{ + /** + * @brief play the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::PlaySoundSFX(EntityID id, bool loop, bool spatial) + { + SHSystemManager::GetSystem()->PlaySFX(id, GetEID(),loop,spatial); + } + + //void SHAudioSourceComponent::PlayOneShot(const char* path, bool isSFX, bool spatial) + //{ + // auto AudioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + // AudioSystem->PlayEventOnce(path, isSFX, spatial ? GetEID() : MAX_EID, spatial); + //} + + //void SHAudioSourceComponent::PlayEvent(const char* path, bool isSFX, bool spatial) + //{ + // auto AudioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + + // auto guid = AudioSystem->GetEventGUID(path); + // if (guid.has_value()) + // { + // if (FMOD::Studio::EventInstance* instance = AudioSystem->CreateEventInstance(guid.value())) + // { + // eventInstances.push_back(instance); + // AudioSystem->PlayEventInstance(instance, isSFX, GetEID(), spatial); + // } + // } + //} + + void SHAudioSourceComponent::PlaySoundBGM(EntityID id, bool loop, bool spatial) + { + SHSystemManager::GetSystem()->PlayBGM(id, GetEID(), loop, spatial); + } + + /** + * @brief Stop the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::StopSound(EntityID id) + { + SHSystemManager::GetSystem()->StopSound(id); + } + + /** + * @brief Mute the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::SetMute(EntityID id, bool mute) + { + SHSystemManager::GetSystem()->SetMute(id, mute); + } + + //void SHAudioSourceComponent::PlayEventInstance(size_t index, bool isSFX, bool spatial) + //{ + // if (index < eventInstances.size()) + // { + // eventInstances[index]->start(); + // dynamic_cast(SHSystemManager::GetSystem("Audio"))->PlayEventInstance(eventInstances[index], isSFX, GetEID(), spatial); + // } + //} + + //void SHAudioSourceComponent::StopEventInstance(size_t index) + //{ + // if(index < eventInstances.size()) + // eventInstances[index]->stop(FMOD_STUDIO_STOP_ALLOWFADEOUT); + //} +} + diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h new file mode 100644 index 00000000..98459b7e --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h @@ -0,0 +1,60 @@ +/********************************************************************* + * \file SHAudioSourceComponet.h + * \author Glence Low + * \brief Declaration of the SHAudioSourceComponet class. + * + * \copyright Copyright (c) 2021 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. +*********************************************************************/ + +#pragma once +#include "ECS_Base/Components/SHComponent.h" +#include "ECS_Base/SHECSMacros.h" + +namespace SHADE +{ + class SHAudioSourceComponent : public SHComponent + { + public: + /** + * @brief default constructor for the component + * + */ + SHAudioSourceComponent() = default; + + + /** + * @brief default destructor for the component + * + */ + ~SHAudioSourceComponent() = default; + + /** + * @brief play the sound + * + * @param index where the sound is in the index + */ + void PlaySoundSFX(EntityID id, bool loop = false, bool spatial = false); + + void PlaySoundBGM(EntityID id, bool loop = false, bool spatial = false); + + /** + * @brief Stop the sound + * + * @param index where the sound is in the index + */ + void StopSound(EntityID id); + + /** + * @brief Mute the sound + * + * @param index where the sound is in the index + */ + void SetMute(EntityID id, bool mute); + + private: + + }; +}//namespace SHADE + diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp new file mode 100644 index 00000000..43301457 --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -0,0 +1,563 @@ +#include "SHpch.h" +//#include "ECS_Base/System/SHSystemManager.h" +#include "SHAudioSystem.h" +#include "Scene/SHSceneManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" + +#include + +//#include "Components/SHAudioListenerComponent.h" +//#include "Components/SHAudioSourceComponent.h" +//#include "ECS_Base/System/SHComponentManager.h" +//#include "Resource Manager/SHResourceManager.h" +#include "Math/Transform/SHTransformComponent.h" +#pragma warning(push) +#pragma warning(disable:26812) //disable warning about preference of enum class over enum as ImGuizmo uses enums +//#include "fmod_errors.h" +//#include "fmod.hpp" +//#include "fmod_studio.hpp" +#include +#include +#include +namespace SHADE +{ + SHAudioSystem::SHAudioSystem() + : system(nullptr) + , extraDriverData(nullptr) + , soundList() + , bgmChannelGroup(nullptr) + , sfxChannelGroup(nullptr) + , masterGroup(nullptr) + , audioChannels() + , result(FMOD_RESULT_FORCEINT) + , bgmVolume(0.5F) + , sfxVolume(1.F) + , masterVolume(1.0F) + , version(0) + , speakerMode(FMOD_SPEAKERMODE_5POINT1) + , paused(false) + { + result = FMOD::Studio::System::create(&system); + ErrorCheck(); + } + + SHAudioSystem::~SHAudioSystem() + { + } + + void SHADE::SHAudioSystem::Init() + { + + //SHComponentManager::CreateComponentSparseSet(); + //SHComponentManager::CreateComponentSparseSet(); + + denseListener = &SHComponentManager::GetDense(); + system->getCoreSystem(&coreSystem); + //result = coreSystem->getVersion(&version); + //ErrorCheck(); + //if (version < FMOD_VERSION) + //{ + // std::cout << "VERISION" << version << "\n"; + // std::cerr << "FMOD version mismatch." << std::endl; + //} + + result = system->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL, extraDriverData); + ErrorCheck(); + + coreSystem->setSoftwareFormat(0, speakerMode, 0); + + result = coreSystem->createChannelGroup("SFX", &sfxChannelGroup); + ErrorCheck(); + + result = coreSystem->createChannelGroup("BGM", &bgmChannelGroup); + ErrorCheck(); + + result = coreSystem->getMasterChannelGroup(&masterGroup); + ErrorCheck(); + + result = masterGroup->addGroup(bgmChannelGroup); + ErrorCheck(); + + result = masterGroup->addGroup(sfxChannelGroup); + ErrorCheck(); + + //TODO: GET VOLUME DATA FROM FILE + bgmChannelGroup->setVolume(bgmVolume); + sfxChannelGroup->setVolume(sfxVolume); + masterGroup->setVolume(masterVolume); + + SHResourceManager::LoadAllAudio(system, soundList); + + //TODO: Move to SHResourceManager (LoadAllAudio to load all .bank files and store SHBanks in bankMap) + //result = system->loadBankFile("resources/audio/banks/Master.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank); + //ErrorCheck(); + //result = system->loadBankFile("resources/audio/banks/Master.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank); + //ErrorCheck(); + //result = system->loadBankFile("resources/audio/banks/Music.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &musicBank); + //ErrorCheck(); + //result = system->loadBankFile("resources/audio/banks/SFX.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &sfxBank); + //ErrorCheck(); + //LoadBank("resources/audio/banks/Master.bank"); + //LoadBank("resources/audio/banks/Master.strings.bank"); + //LoadBank("resources/audio/banks/Music.bank"); + //LoadBank("resources/audio/banks/SFX.bank"); + //auto clip = CreateAudioClip("event:/SFX/Dawn/Dawn_Attack"); + //clip->Play(); + //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); + } + + void SHADE::SHAudioSystem::Run(float dt) + { + static_cast(dt); + system->update(); + if (!denseListener->empty()) + { + SHAudioListenerComponent& listener = denseListener->at(0); + SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); + listener.SetPos(listenerTransform->GetLocalPosition()); + listener.SetForward({ (listenerTransform->GetScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); + FMOD_VECTOR pos = { listener.pos[0] ,listener.pos[1] ,0.f }; + FMOD_VECTOR forward = { listener.forward[0] ,listener.forward[1] ,listener.forward[2] }; + FMOD_VECTOR up = { listener.up[0] ,listener.up[1] ,listener.up[2] }; + coreSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); + } + //int channels; + //system->getChannelsPlaying(&channels); + //std::cout << "ACTIVE CHANNELS: " << channels << std::endl; + } + + void SHADE::SHAudioSystem::Exit() + { + for (auto& event : eventMap) + { + result = event.second->releaseAllInstances(); + ErrorCheck(); + } + + /* for (auto& bank : bankMap) + { + result = bank.second->unload(); + ErrorCheck(); + }*/ + + for (auto& sound : soundList) + { + result = sound.second->release(); + ErrorCheck(); + } + + if (bgmChannelGroup) + { + result = bgmChannelGroup->release(); + ErrorCheck(); + } + + if (sfxChannelGroup) + { + result = sfxChannelGroup->release(); + ErrorCheck(); + } + + if (system) + { + result = system->release(); + ErrorCheck(); + } + } + + void SHAudioSystem::ErrorCheck() const + { + if (result != FMOD_OK) + std::cerr << "Audio system error: " << FMOD_ErrorString(result) << std::endl; + } + + void SHAudioSystem::PlayEventOnce(const char* path, bool isSFX, EntityID eid, bool spatial) + { + if (paused) + return; + auto it = eventMap.find(path); + if (it != eventMap.end()) + { + FMOD::Studio::EventInstance* event = nullptr; + it->second->createInstance(&event); + if (event) + { + + event->setVolume(masterVolume * (isSFX ? sfxVolume : bgmVolume)); + if (spatial) + { + if (SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid)) + { + FMOD_3D_ATTRIBUTES attributes{ {} }; + attributes.forward.z = 1.0f; + attributes.up.y = 1.0f; + SHAudioListenerComponent& listener = denseListener->at(0); + SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); + if (listenerTransform) + { + attributes.position.z = listenerTransform->GetLocalPosition()[2]; + } + attributes.position.x = audioTransform->GetLocalPosition()[0]; + attributes.position.y = audioTransform->GetLocalPosition()[1]; + event->set3DAttributes(&attributes); + } + } + event->start(); + event->release(); + } + } + } + + void SHAudioSystem::PlaySFX(ResourceID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f) + { + SHSound sound = soundList[id]; + int index = GetAvailableChannelIndex(); + if (index >= 0) + { + unsigned int mode{}; + mode |= (loop ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF); + mode |= (spatial ? FMOD_3D : FMOD_2D); + sound->setMode(mode); + result = coreSystem->playSound(sound, sfxChannelGroup, false, &audioChannels[index]); + if (spatial && SHComponentManager::HasComponent(eid)) + { + SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid); + FMOD_VECTOR fpos{ audioTransform->GetLocalPosition()[0],audioTransform->GetLocalPosition()[1] ,0.f}; + audioChannels[index]->set3DAttributes(&fpos, nullptr); + audioChannels[index]->setMode(mode); + audioChannels[index]->set3DMinMaxDistance(min, max); + } + ErrorCheck(); + } + } + + void SHAudioSystem::PlayBGM(ResourceID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f) + { + SHSound sound = soundList[id]; + int index = GetAvailableChannelIndex(); + if (index >= 0) + { + unsigned int mode{}; + mode |= (loop ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF); + mode |= (spatial ? FMOD_3D : FMOD_2D); + sound->setMode(mode); + result = coreSystem->playSound(sound, bgmChannelGroup, false, &audioChannels[index]); + if (spatial && SHComponentManager::HasComponent(eid)) + { + SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid); + FMOD_VECTOR fpos{ audioTransform->GetLocalPosition()[0],audioTransform->GetLocalPosition()[1] ,0.f }; + audioChannels[index]->set3DAttributes(&fpos, nullptr); + audioChannels[index]->setMode(mode); + audioChannels[index]->set3DMinMaxDistance(min, max); + } + ErrorCheck(); + } + } + + void SHAudioSystem::SetMute(ResourceID id, bool mute) + { + SHSound sound; + for (auto& channel : audioChannels) + { + channel->getCurrentSound(&sound); + if (soundList.find(id)->second == sound) // tbc + { + channel->setMute(mute); + } + } + } + + void SHAudioSystem::StopSound(ResourceID id) + { + SHSound sound; + for (auto& channel : audioChannels) + { + channel->getCurrentSound(&sound); + if (soundList.find(id)->second == sound) // tbc + { + channel->stop(); + } + } + } + + void SHAudioSystem::StopAllSounds() + { + for (auto& channel : audioChannels) + { + bool isPlaying{ false }; + if (channel->isPlaying(&isPlaying) == FMOD_OK && isPlaying) + channel->stop(); + } + } + + std::optional SHAudioSystem::GetEventGUID(const char* path) + { + FMOD_GUID guid; + FMOD::Studio::EventDescription* event; + result = system->getEvent(path, &event); + ErrorCheck(); + if (result == FMOD_OK) + { + result = event->getID(&guid); + ErrorCheck(); + if (result == FMOD_OK) + { + return guid; + } + } + return std::nullopt; + } + + AudioClip* SHAudioSystem::CreateAudioClip(const char* path) + { + AudioClipID newID{}; + AudioClip* clip = nullptr; + auto it = eventMap.find(path); + if (it != eventMap.end()) + { + FMOD::Studio::EventInstance* event = nullptr; + it->second->createInstance(&event); + if (event) + { + //event->start(); + newID = clipID; + clipID++; + eventInstances.emplace(newID, AudioClip(newID, event)); + clip = &eventInstances[newID]; + } + } + return clip; + } + + //std::vector SHAudioSystem::GetAllEvents() + //{ + // int count{}; + // stringsBank->getEventCount(&count); + + // std::vector events(count); + // auto eventData = events.data(); + // int finalCount{}; + // stringsBank->getEventList(eventData, count, &finalCount); + // std::vector eventNames; + // std::transform(events.begin(), events.end(), std::back_inserter(eventNames), [](FMOD::Studio::EventDescription* event) + // { + // char path[256]; + // event->getPath(path, 256, nullptr); + // return path; + // }); + // return eventNames; + //} + + //void SHAudioSystem::PlayEventInstance(FMOD::Studio::EventInstance* instance, bool isSFX, EntityID eid, bool spatial) + //{ + // instance->setVolume(masterVolume * (isSFX ? sfxVolume : bgmVolume)); + // FMOD::ChannelGroup* channelGroup; + // if (spatial) + // { + // if (SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid)) + // { + // FMOD_3D_ATTRIBUTES attributes{ {} }; + // attributes.forward.z = 1.0f; + // attributes.up.y = 1.0f; + // SHAudioListenerComponent& listener = denseListener->at(0); + // SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); + // if (listenerTransform) + // { + // attributes.position.z = listenerTransform->GetTranslation()[2]; + // } + // attributes.position.x = audioTransform->GetTranslation()[0]; + // attributes.position.y = audioTransform->GetTranslation()[1]; + // instance->set3DAttributes(&attributes); + // } + // } + // instance->start(); + //} + + int SHAudioSystem::GetAvailableChannelIndex() + { + bool isPlaying = false; + for (int i = 0; i < AUDIO_SYS_MAX_CHANNELS; ++i) + { + audioChannels[i]->isPlaying(&isPlaying); + if (!isPlaying) + return i; + } + return -1; + } + + float SHAudioSystem::GetBgmVolume() + { + return bgmVolume; + } + float SHAudioSystem::GetSfxVolume() + { + return sfxVolume; + } + float SHAudioSystem::GetMasterVolume() + { + return masterVolume; + } + void SHAudioSystem::SetBgmVolume(float const bgmvol) + { + bgmChannelGroup->setVolume(bgmvol); + } + void SHAudioSystem::SetSfxVolume(float const sfxvol) + { + sfxChannelGroup->setVolume(sfxvol); + } + void SHAudioSystem::SetMasterVolume(float const mastervol) + { + masterGroup->setVolume(mastervol); + } + + void SHAudioSystem::SetPaused(bool pause) + { + paused = pause; + for (auto const& channel : audioChannels) + { + channel->setPaused(paused); + } + for (auto const& event : eventMap) + { + int instanceCount = 0; + event.second->getInstanceCount(&instanceCount); + std::vector instances(instanceCount); + event.second->getInstanceList(instances.data(), instances.size(), &instanceCount); + for (auto const& instance : instances) + { + instance->setPaused(pause); + } + } + } + + bool SHAudioSystem::GetPaused() const + { + return paused; + } + + SHVec3 SHAudioSystem::GetListenerPosition() + { + auto &listener = denseListener->at(0); + SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); + if (listenerTransform) + { + return listenerTransform->GetLocalPosition(); + } + return {}; + } + + //void SHAudioSystem::LoadBank(const char* path) + //{ + // FMOD::Studio::Bank* bank = nullptr; + // result = system->loadBankFile(path, FMOD_STUDIO_LOAD_BANK_NORMAL, &bank); + // ErrorCheck(); + // if (result != FMOD_OK) + // return; + // bankMap.emplace(path, bank); + // bank->loadSampleData(); + // int numOfEvents; + // bank->getEventCount(&numOfEvents); + // if (numOfEvents > 0) + // { + // std::vector events(numOfEvents); + // bank->getEventList(events.data(), numOfEvents, &numOfEvents); + // char eventName[512]; + // for (int i{}; i < numOfEvents; ++i) + // { + // FMOD::Studio::EventDescription* event = events[i]; + // event->getPath(eventName, 512, nullptr); + // eventMap.emplace(eventName, event); + // } + // } + //} + + AudioClip::AudioClip(AudioClipID clipID, FMOD::Studio::EventInstance* inst) + :instance(inst), id(clipID) + { + } + + AudioClip::~AudioClip() + { + } + + void AudioClip::Play(bool isSfx) + { + if (!instance) + return; + instance->start(); + auto audioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + instance->setVolume(audioSystem->GetMasterVolume() * (isSfx ? audioSystem->GetSfxVolume() : audioSystem->GetBgmVolume())); + } + + void AudioClip::Play(SHVec3 position, bool isSfx) + { + if (!instance) + return; + instance->start(); + FMOD_3D_ATTRIBUTES attributes{ {} }; + attributes.forward.z = 1.0f; + attributes.up.y = 1.0f; + + SHVec3 listenerPos = dynamic_cast(SHSystemManager::GetSystem("Audio"))->GetListenerPosition(); + attributes.position.x = position[0]; + attributes.position.y = position[1]; + attributes.position.z = listenerPos[2]; + instance->set3DAttributes(&attributes); + auto audioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + instance->setVolume(audioSystem->GetMasterVolume() * (isSfx ? audioSystem->GetSfxVolume() : audioSystem->GetBgmVolume())); + } + + void AudioClip::Stop(bool fadeOut) + { + if (!instance) + return; + instance->stop(fadeOut ? FMOD_STUDIO_STOP_ALLOWFADEOUT : FMOD_STUDIO_STOP_IMMEDIATE); + } + + void AudioClip::SetPause(bool pause) + { + if (!instance) + return; + instance->setPaused(pause); + } + + bool AudioClip::IsPaused() + { + if (!instance) + return true; + + bool paused{}; + instance->getPaused(&paused); + return paused; + } + + + void AudioClip::SetParameter(const char* paramName, float value) + { + if (!instance) + return; + instance->setParameterByName(paramName, value); + } + + void AudioClip::SetParameterLabel(const char* paramName, const char* label) + { + if (!instance) + return; + instance->setParameterByNameWithLabel(paramName, label); + } + + float AudioClip::GetParameterValue(const char* paramName) + { + if (!instance) + return {}; + float value{}; + instance->getParameterByName(paramName, &value); + return value; + } + +} + +#pragma warning(pop) + + diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h new file mode 100644 index 00000000..f459d57c --- /dev/null +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -0,0 +1,100 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/SHECSMacros.h" +#include "Math/SHMath.h" +#include +#define AUDIO_SYS_MAX_CHANNELS 1024 + +namespace SHADE +{ + typedef FMOD::Sound* SHSound; + typedef FMOD::Studio::Bank* SHBank; + + class SHAudioListenerComponent; + typedef uint64_t AudioClipID; + class AudioClip + { + public: + AudioClip() = default; + AudioClip(AudioClipID clipID, FMOD::Studio::EventInstance* inst); + ~AudioClip(); + void Play(bool isSfx = true); + void Play(SHVec3 position, bool isSfx = true); + void Stop(bool fadeOut = true); + + void SetPause(bool pause); + bool IsPaused(); + void SetParameter(const char* paramName, float value); + void SetParameterLabel(const char* paramName, const char* label); + float GetParameterValue(const char* paramName); + friend class SHAudioSystem; + private: + FMOD::Studio::EventInstance* instance; + AudioClipID id; + }; + + class SHAudioSystem : public SHSystem + { + public: + SHAudioSystem(); + ~SHAudioSystem(); + + void Init(); + void Run(float dt); + void Exit(); + + int GetAvailableChannelIndex(); + /*std::vector::size_type CreateSound(const char* filepath, bool loop = false);*/ + void PlaySFX(EntityID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f); + void PlayBGM(EntityID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f); + void PlayEventOnce(const char* path, bool isSFX = true, EntityID eid = MAX_EID, bool spatial = false); + void SetMute(EntityID id, bool); + void StopSound(EntityID id); + void StopAllSounds(); + + std::optional GetEventGUID(const char* path); + AudioClip* CreateAudioClip(const char* path); + //std::vector GetAllEvents(); + + float GetBgmVolume(); + float GetSfxVolume(); + float GetMasterVolume(); + void SetBgmVolume(float const bgmvol); + void SetSfxVolume(float const sfxvol); + void SetMasterVolume(float const mastervol); + void SetPaused(bool pause); + bool GetPaused() const; + SHVec3 GetListenerPosition(); + void LoadBank(const char* path); + private: + bool paused; + void ErrorCheck() const; + FMOD::Studio::System* system; + FMOD::System* coreSystem; + + void* extraDriverData; + std::unordered_map soundList; + //std::unordered_map bankMap; + //std::unordered_map bankMap; + std::unordered_map eventMap; + std::unordered_map eventInstances; + FMOD::ChannelGroup* bgmChannelGroup, * sfxChannelGroup, * masterGroup; + FMOD::Channel* audioChannels[AUDIO_SYS_MAX_CHANNELS]; + FMOD_RESULT result; + float bgmVolume, sfxVolume, masterVolume; + unsigned int version; + FMOD_SPEAKERMODE speakerMode; + //SHBank masterBank, stringsBank, musicBank, sfxBank; //To do: change to map of banks loaded by resource manager + + std::vector* denseListener; + AudioClipID clipID = 0; + }; + +} + From ed143661b376305f4b06942c8eef6f422f62d48a Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 14:26:07 +0800 Subject: [PATCH 166/793] Scene node active states propagate down the hierarchy Vulkan is throwing an exception... --- .../src/Math/Transform/SHTransformSystem.cpp | 2 +- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 77 ++++++++++++++----- SHADE_Engine/src/Scene/SHSceneGraph.h | 25 +++--- 3 files changed, 71 insertions(+), 33 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 879c2d34..f420834d 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -53,7 +53,7 @@ namespace SHADE for (const auto* child : node->GetChildren()) { // Active states of entities should sync with scene nodes - const bool IS_NODE_ACTIVE = child->isActive; + const bool IS_NODE_ACTIVE = child->IsActive(); #ifdef _DEBUG const bool IS_ENTITY_ACTIVE = SHEntityManager::GetEntityByID(child->GetEntityID())->GetActive(); diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 82e4fd7e..84c7f1c5 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -25,14 +25,14 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHSceneNode::SHSceneNode(EntityID eid, SHSceneNode* parent) noexcept - : isActive { true } + : active { true } , entityID { eid } , parent { parent } {} SHSceneNode::SHSceneNode(const SHSceneNode& rhs) noexcept - : isActive { rhs.isActive } + : active { rhs.active } , entityID { rhs.entityID } , parent { rhs.parent } { @@ -40,7 +40,7 @@ namespace SHADE } SHSceneNode::SHSceneNode(SHSceneNode&& rhs) noexcept - : isActive { rhs.isActive } + : active { rhs.active } , entityID { rhs.entityID } , parent { rhs.parent } { @@ -52,9 +52,9 @@ namespace SHADE if (this == &rhs) return *this; - isActive = rhs.isActive; - entityID = rhs.entityID; - parent = rhs.parent; + active = rhs.active; + entityID = rhs.entityID; + parent = rhs.parent; children.clear(); std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); @@ -64,9 +64,9 @@ namespace SHADE SHSceneNode& SHSceneNode::operator=(SHSceneNode&& rhs) noexcept { - isActive = rhs.isActive; - entityID = rhs.entityID; - parent = rhs.parent; + active = rhs.active; + entityID = rhs.entityID; + parent = rhs.parent; children.clear(); std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); @@ -104,6 +104,11 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ + bool SHSceneNode::IsActive() const noexcept + { + return active; + } + EntityID SHSceneNode::GetEntityID() const noexcept { return entityID; @@ -154,7 +159,7 @@ namespace SHADE if (root != nullptr) return root; - SHLOG_WARNING("Scene has no root object!") + SHLOG_ERROR("Scene has no root object!") return nullptr; } @@ -171,7 +176,7 @@ namespace SHADE const auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to Get Scene node!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to Get Scene node!", entityID) return nullptr; } //////////////////////////////////////// @@ -192,7 +197,7 @@ namespace SHADE const auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to get Parent node!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to get Parent node!", entityID) return nullptr; } //////////////////////////////////////// @@ -213,7 +218,7 @@ namespace SHADE const auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene!", entityID) return nullptr; } @@ -248,7 +253,7 @@ namespace SHADE const auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene!", entityID) return nullptr; } //////////////////////////////////////// @@ -269,7 +274,7 @@ namespace SHADE const auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene!", entityID) return root->GetChildren(); } //////////////////////////////////////// @@ -277,6 +282,27 @@ namespace SHADE return NODE_ITER->second->GetChildren(); } + bool SHSceneGraph::IsActiveInHierarchy(EntityID entityID) const noexcept + { + //////////////////////////////////////// + // Error handling + if (!SHEntityManager::IsValidEID(entityID)) + { + SHLOG_ERROR("Entity {} is invalid!", entityID) + return false; + } + + const auto NODE_ITER = entityNodeMap.find(entityID); + if (NODE_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene!", entityID) + return false; + } + //////////////////////////////////////// + + return NODE_ITER->second->IsActive(); + } + /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -289,7 +315,7 @@ namespace SHADE } // Handle self assignment - if (parentNode == parent) + if (parent && parentNode->entityID == parent->entityID) return; if (parent) @@ -300,6 +326,16 @@ namespace SHADE parent->AddChild(this); } + void SHSceneNode::SetActive(bool newActiveState) noexcept + { + active = newActiveState; + + for (auto* child : children) + { + SetActive(newActiveState); + } + } + void SHSceneGraph::SetParent(EntityID entityID, SHSceneNode* parent) const noexcept { //////////////////////////////////////// @@ -318,6 +354,9 @@ namespace SHADE } //////////////////////////////////////// + if (parent == nullptr) + parent = root; + NODE_ITER->second->SetParent(parent); } @@ -340,14 +379,14 @@ namespace SHADE auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to set parent!", entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to set parent!", entityID) return; } auto PARENT_ITER = entityNodeMap.find(parent); if (PARENT_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} cannot be found in the scene! Unable to parent to Entity {}", parent, entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to parent to Entity {}", parent, entityID) return; } //////////////////////////////////////// @@ -476,7 +515,7 @@ namespace SHADE auto NODE_ITER = entityNodeMap.find(entityID); if (NODE_ITER == entityNodeMap.end()) { - SHLOG_WARNING("Entity {} does not exist in the scene!", entityID) + SHLOG_ERROR("Entity {} does not exist in the scene!", entityID) return false; } diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index bdb8f52c..39afbb31 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -38,12 +38,6 @@ namespace SHADE friend class SHSceneGraph; public: - /*---------------------------------------------------------------------------------*/ - /* Data Members */ - /*---------------------------------------------------------------------------------*/ - - bool isActive; - /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -60,6 +54,7 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ + [[nodiscard]] bool IsActive () const noexcept; [[nodiscard]] EntityID GetEntityID () const noexcept; [[nodiscard]] SHSceneNode* GetParent () const noexcept; [[nodiscard]] const std::vector& GetChildren () const noexcept; @@ -70,7 +65,8 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetParent (SHSceneNode* parentNode) noexcept; + void SetParent (SHSceneNode* parentNode) noexcept; + void SetActive (bool newActiveState) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -88,6 +84,7 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ + bool active; EntityID entityID; SHSceneNode* parent; std::vector children; @@ -121,12 +118,14 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] const SHSceneNode* GetRoot () const noexcept; - [[nodiscard]] SHSceneNode* GetNode (EntityID entityID) const noexcept; - [[nodiscard]] SHSceneNode* GetParent (EntityID entityID) const noexcept; - [[nodiscard]] SHSceneNode* GetChild (EntityID entityID, SHSceneNode* childNode) const noexcept; - [[nodiscard]] SHSceneNode* GetChild (EntityID entityID, EntityID childEntityID) const noexcept; - [[nodiscard]] const std::vector& GetChildren (EntityID entityID) const noexcept; + [[nodiscard]] const SHSceneNode* GetRoot () const noexcept; + [[nodiscard]] SHSceneNode* GetNode (EntityID entityID) const noexcept; + [[nodiscard]] SHSceneNode* GetParent (EntityID entityID) const noexcept; + [[nodiscard]] SHSceneNode* GetChild (EntityID entityID, SHSceneNode* childNode) const noexcept; + [[nodiscard]] SHSceneNode* GetChild (EntityID entityID, EntityID childEntityID) const noexcept; + [[nodiscard]] const std::vector& GetChildren (EntityID entityID) const noexcept; + + [[nodiscard]] bool IsActiveInHierarchy (EntityID entityID) const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ From 2d93c9559d0fba3573e471758e85a7ecb20c6da0 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 14:54:06 +0800 Subject: [PATCH 167/793] Restructured Transform system to match intended system structure --- .../src/Math/Transform/SHTransformSystem.cpp | 12 ++++-- .../src/Math/Transform/SHTransformSystem.h | 42 +++++++++++++++---- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 879c2d34..125de0e2 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -21,12 +21,18 @@ namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHTransformSystem::TransformUpdateRoutine SHTransformSystem::UpdateRoutine; + /*-----------------------------------------------------------------------------------*/ /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHTransformSystem::SHTransformSystem() - : SHSystemRoutine { "Transform Routine", false } + SHTransformSystem::TransformUpdateRoutine::TransformUpdateRoutine() + : SHSystemRoutine { "Transform Update", false } {} @@ -34,7 +40,7 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHTransformSystem::Execute(double dt) noexcept + void SHTransformSystem::TransformUpdateRoutine::Execute(double dt) noexcept { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 5eebd292..4d62475a 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -21,19 +21,18 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHTransformSystem : public SHSystemRoutine + class SH_API SHTransformSystem : public SHSystem { public: - /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHTransformSystem (); - ~SHTransformSystem () = default; + SHTransformSystem () = default; + ~SHTransformSystem () = default; - SHTransformSystem (const SHTransformSystem&) = delete; - SHTransformSystem (SHTransformSystem&&) = delete; + SHTransformSystem (const SHTransformSystem&) = delete; + SHTransformSystem (SHTransformSystem&&) = delete; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -43,10 +42,37 @@ namespace SHADE SHTransformSystem& operator= (SHTransformSystem&&) = delete; /*---------------------------------------------------------------------------------*/ - /* Function Members */ + /* System Routines */ /*---------------------------------------------------------------------------------*/ - void Execute(double dt) noexcept override; + class TransformUpdateRoutine : public SHSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + TransformUpdateRoutine (); + ~TransformUpdateRoutine () = default; + + TransformUpdateRoutine (const TransformUpdateRoutine&) = delete; + TransformUpdateRoutine (TransformUpdateRoutine&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-------------------------------------------------------------------------------*/ + + TransformUpdateRoutine& operator= (const TransformUpdateRoutine&) = delete; + TransformUpdateRoutine& operator= (TransformUpdateRoutine&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + void Execute(double dt) noexcept override; + }; + + static TransformUpdateRoutine UpdateRoutine; private: /*---------------------------------------------------------------------------------*/ From cda7330c5b92731c43157d1cfb0bde71d79360d6 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 14:56:58 +0800 Subject: [PATCH 168/793] Removed static data member for transform update routine --- SHADE_Engine/src/Math/Transform/SHTransformSystem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 4d62475a..c57cbdbd 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -72,7 +72,7 @@ namespace SHADE void Execute(double dt) noexcept override; }; - static TransformUpdateRoutine UpdateRoutine; + //static TransformUpdateRoutine UpdateRoutine; private: /*---------------------------------------------------------------------------------*/ From 38dbd0c2179bb0e15084307ccad587a3f80aab2f Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 15:49:00 +0800 Subject: [PATCH 169/793] Removed static data member...again... --- SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index f229cbdd..adbdf746 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -25,7 +25,7 @@ namespace SHADE /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHTransformSystem::TransformUpdateRoutine SHTransformSystem::UpdateRoutine; + //SHTransformSystem::TransformUpdateRoutine SHTransformSystem::UpdateRoutine; /*-----------------------------------------------------------------------------------*/ /* Constructors & Destructor Definitions */ @@ -40,7 +40,7 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHTransformSystem::TransformUpdateRoutine::Execute(double dt) noexcept + void SHTransformSystem::TransformUpdateRoutine::Execute(double) noexcept { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); From 3b533ac03d73cda934791767ca1452ce74c7c796 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 16:40:49 +0800 Subject: [PATCH 170/793] Added faulty registration to entityDestroyed event --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 45 +++++++++++++------ SHADE_Engine/src/Scripting/SHScriptEngine.h | 13 +++++- TempScriptsFolder/TestScript.cs | 12 +++++ 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 56f93812..fada5b70 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -16,9 +16,14 @@ of DigiPen Institute of Technology is prohibited. // Standard Library #include // std::fstream #include // std::filesystem::canonical, std::filesystem::remove +#include // std::shared_ptr // Project Headers #include "Tools/SHLogger.h" #include "Tools/SHStringUtils.h" +#include "ECS_Base/Events/SHEntityDestroyedEvent.h" +#include "Events/SHEvent.h" +#include "Events/SHEventReceiver.h" +#include "Events/SHEventManager.hpp" namespace SHADE { @@ -54,15 +59,9 @@ namespace SHADE // Initialise the CSharp Engine csEngineInit(); - - // Link events - // - Entity Destruction - /*onEntityDestroy = [this](const SHEntity& e) - { - csScriptsRemoveAll(e.GetEID()); - csGOLibNotifyDestroyEntity(e.GetEID()); - }; - ECS::OnEntityDestroy += onEntityDestroy;*/ + + // Register entity creation events + registerEvents(); } void SHScriptEngine::UnloadScriptAssembly() { @@ -257,13 +256,23 @@ namespace SHADE std::ofstream file(path); if (!file.is_open()) throw std::runtime_error("Unable to create CsProj file!"); - + // Fill the file file << FILE_CONTENTS; - + // Close file.close(); - } + } + + /*-----------------------------------------------------------------------------------*/ + /* Event Handler Functions */ + /*-----------------------------------------------------------------------------------*/ + SHEventHandle SHScriptEngine::onEntityDestroyed(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + csScriptsRemoveAll(eventData->data->eid); + return eventData->handle; + } /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ @@ -385,6 +394,17 @@ namespace SHADE );*/ } + void SHScriptEngine::registerEvents() + { + // Register for entity destroyed event + std::shared_ptr> destroyedEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onEntityDestroyed) + }; + ReceiverPtr receiver = std::dynamic_pointer_cast(destroyedEventReceiver); + SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, receiver); + } + void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) { std::ifstream buildLog(buildLogPath); @@ -495,5 +515,4 @@ namespace SHADE oss << " -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet"; return oss.str(); } - } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index fa205266..0994bb5d 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -15,12 +15,14 @@ of DigiPen Institute of Technology is prohibited. #include // Project Headers +#include "SH_API.h" #include "SHDotNetRuntime.h" #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/Entity/SHEntity.h" #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" -#include "SH_API.h" +#include "Events/SHEventDefines.h" +#include "Events/SHEvent.h" namespace SHADE { @@ -242,6 +244,11 @@ namespace SHADE /*ECS::EntityEvent::Delegate onEntityCreate; ECS::EntityEvent::Delegate onEntityDestroy;*/ + /*-----------------------------------------------------------------------------*/ + /* Event Handler Functions */ + /*-----------------------------------------------------------------------------*/ + SHEventHandle onEntityDestroyed(SHEventPtr eventPtr); + /*-----------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------*/ @@ -250,6 +257,10 @@ namespace SHADE /// void loadFunctions(); /// + /// Registers events for the scripting system + /// + void registerEvents(); + /// /// Reads the file via the specified path that represents a build log of error /// and warning messages. /// diff --git a/TempScriptsFolder/TestScript.cs b/TempScriptsFolder/TestScript.cs index 0e4823a2..c1ed5bd5 100644 --- a/TempScriptsFolder/TestScript.cs +++ b/TempScriptsFolder/TestScript.cs @@ -4,8 +4,20 @@ public class TestScript : Script { public TestScript(GameObject gameObj) : base(gameObj) {} + protected override void awake() + { + Debug.Log("TestScript.Awake()"); + } + protected override void start() + { + Debug.Log("TestScript.Start()"); + } protected override void update() { Debug.Log("TestScript.Update()"); } + protected override void onDestroy() + { + Debug.Log("TestScript.OnDestroy()"); + } } \ No newline at end of file From 5bd35cec612412fbbfba4d32a64202128e1ad8ff Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 22 Sep 2022 17:07:59 +0800 Subject: [PATCH 171/793] Fixed SHEventReceiver constructor callback return signature. --- SHADE_Engine/src/Events/SHEventReceiver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Events/SHEventReceiver.h b/SHADE_Engine/src/Events/SHEventReceiver.h index e6e5e757..e2edd4dc 100644 --- a/SHADE_Engine/src/Events/SHEventReceiver.h +++ b/SHADE_Engine/src/Events/SHEventReceiver.h @@ -19,7 +19,7 @@ namespace SHADE SHEventHandle(T::*callback)(SHEventPtr); public: - SHEventReceiverSpec(T* obj, void(T::* cb)(SHEventPtr)) + SHEventReceiverSpec(T* obj, SHEventHandle(T::* cb)(SHEventPtr)) :SHEventReceiver(), object{ obj }, callback{ cb } { From 1bede86ff60c9a3070f3bb46b7dea0bc4e6ae600 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 17:25:43 +0800 Subject: [PATCH 172/793] Awake(), Start() and Update(), OnDestroy() for scripts now all run as intended --- SHADE_Application/src/Scenes/SBTestScene.cpp | 9 ++++---- SHADE_Application/src/Scenes/SBTestScene.h | 1 + SHADE_Managed/src/Scripts/ScriptStore.cxx | 24 +++----------------- 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 072a15de..c59fa234 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -38,18 +38,19 @@ namespace Sandbox auto matInst = graphicsSystem->AddMaterialInstance(); // Create entity and add mesh - auto entity = SHADE::SHEntityManager::CreateEntity(); - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); + testObj = SHADE::SHEntityManager::CreateEntity(); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(entity), "TestScript"); + scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testObj), "TestScript"); } void SBTestScene::Update(float dt) { (void)dt; - + if (GetKeyState(VK_SPACE) & 0x8000) + SHADE::SHEntityManager::DestroyEntity(testObj); } void SBTestScene::Render() diff --git a/SHADE_Application/src/Scenes/SBTestScene.h b/SHADE_Application/src/Scenes/SBTestScene.h index 6776c671..4d4a3207 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.h +++ b/SHADE_Application/src/Scenes/SBTestScene.h @@ -9,6 +9,7 @@ namespace Sandbox { private: EntityID camera; + EntityID testObj; public: diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 089da002..252ab071 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -287,14 +287,7 @@ namespace SHADE } void ScriptStore::RemoveAllScripts(Entity entity) { - SAFE_NATIVE_CALL_BEGIN - // Check if entity exists - if (!EntityUtils::IsValid(entity)) - { - Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); - return; - } - + SAFE_NATIVE_CALL_BEGIN // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) return; @@ -311,13 +304,6 @@ namespace SHADE void ScriptStore::RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy) { SAFE_NATIVE_CALL_BEGIN - // Check if entity exists - if (!EntityUtils::IsValid(entity)) - { - Debug::LogError("[ScriptStore] Attempted to remove Scripts from an invalid Entity!"); - return; - } - // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) return; @@ -386,10 +372,7 @@ namespace SHADE while (disposalQueue.Count > 0) { Script^ script = disposalQueue.Dequeue(); - /*if (Application::IsPlaying) - { - script->OnDestroy(); - }*/ + script->OnDestroy(); auto entity = script->Owner.GetEntity(); auto scriptList = scripts[script->Owner.GetEntity()]; scriptList->Remove(script); @@ -496,7 +479,6 @@ namespace SHADE // Check if entity exists, otherwise nothing if (!EntityUtils::IsValid(entity)) return true; - // Check if entity exists in the script storage if (!scripts.ContainsKey(entity)) @@ -667,7 +649,7 @@ namespace SHADE // Entity Validity Check if (nativeEntity == nullptr) - throw gcnew System::InvalidOperationException("Attempted to get native Component to an invalid Entity."); + return false; // Check active state return nativeEntity->GetActive(); From cb31628e663a0f0fb1ef7eb829d41f06740c1f4e Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 22 Sep 2022 19:38:43 +0800 Subject: [PATCH 173/793] Dummy pipeline layout ctor created Renderer now can update and bind descriptor set --- SHADE_Application/src/Scenes/SBTestScene.cpp | 18 +++++-- SHADE_Application/src/Scenes/SBTestScene.h | 2 +- .../src/Graphics/Buffers/SHVkBuffer.cpp | 49 ++++++----------- .../src/Graphics/Buffers/SHVkBuffer.h | 4 +- .../Graphics/Commands/SHVkCommandBuffer.cpp | 5 ++ .../src/Graphics/Commands/SHVkCommandBuffer.h | 1 + .../Descriptors/SHVkDescriptorSetGroup.cpp | 4 +- .../Descriptors/SHVkDescriptorSetGroup.h | 2 +- .../Graphics/Devices/SHVkLogicalDevice.cpp | 7 ++- .../src/Graphics/Devices/SHVkLogicalDevice.h | 3 +- .../GlobalData/SHGraphicsGlobalData.cpp | 9 ++++ .../GlobalData/SHGraphicsGlobalData.h | 6 +++ .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 34 ++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 7 +-- .../MiddleEnd/Interface/SHRenderer.cpp | 16 ++++-- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 8 ++- .../Pipeline/SHPipelineLayoutParams.h | 9 ++++ .../src/Graphics/Pipeline/SHPipelineState.h | 2 +- .../Graphics/Pipeline/SHVkPipelineLayout.cpp | 50 +++++++++++++++--- .../Graphics/Pipeline/SHVkPipelineLayout.h | 3 +- TempShaderFolder/TestCubeVs.glsl | 3 +- TempShaderFolder/TestCubeVs.spv | Bin 1680 -> 1768 bytes 22 files changed, 161 insertions(+), 81 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 873d0fed..aef39ddd 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -7,6 +7,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Math/Transform/SHTransformComponent.h" using namespace SHADE; @@ -28,6 +29,8 @@ namespace Sandbox } void SBTestScene::Init() { + SHComponentManager::CreateComponentSparseSet(); + SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); @@ -37,16 +40,25 @@ namespace Sandbox auto matInst = graphicsSystem->AddMaterialInstance(); // Create entity and add mesh - auto entity = SHADE::SHEntityManager::CreateEntity(); - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(entity); + testEntity = SHADE::SHEntityManager::CreateEntity(); + SHComponentManager::AddComponent(testEntity); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testEntity); + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testEntity); + renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); + + transform.SetWorldPosition (SHVec3 (0.0f, 0.0f, 2.0f)); } void SBTestScene::Update(float dt) { - (void)dt; + static float rotation = 0.0f; + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testEntity); + transform.SetWorldRotation (rotation, 0.0f, 0.0f); + + rotation += dt * 10.0f; } void SBTestScene::Render() diff --git a/SHADE_Application/src/Scenes/SBTestScene.h b/SHADE_Application/src/Scenes/SBTestScene.h index 6776c671..bb382477 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.h +++ b/SHADE_Application/src/Scenes/SBTestScene.h @@ -9,7 +9,7 @@ namespace Sandbox { private: EntityID camera; - + unsigned int testEntity; public: virtual void Load(); diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 4bfc1e4b..59916731 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -49,6 +49,11 @@ namespace SHADE Init(newSize, data, srcSize, bufferUsageFlags, allocCreateInfo.usage, allocCreateInfo.flags); } + void SHVkBuffer::FlushAllocation(uint32_t srcOffset, uint32_t dstOffset) noexcept + { + vmaFlushAllocation(vmaAllocator, alloc, srcOffset, dstOffset); + } + vk::Buffer SHVkBuffer::GetVkBuffer(void) const noexcept { return vkBuffer; @@ -72,8 +77,7 @@ namespace SHADE /***************************************************************************/ void SHVkBuffer::Map(void) noexcept { - if (!boundToCoherent) - vmaMapMemory(vmaAllocator, alloc, &mappedPtr); + vmaMapMemory(vmaAllocator, alloc, &mappedPtr); } /***************************************************************************/ @@ -90,11 +94,8 @@ namespace SHADE /***************************************************************************/ void SHVkBuffer::Unmap(void) noexcept { - if (!boundToCoherent) - { - vmaUnmapMemory(vmaAllocator, alloc); - mappedPtr = nullptr; - } + vmaUnmapMemory(vmaAllocator, alloc); + mappedPtr = nullptr; } /***************************************************************************/ @@ -132,9 +133,7 @@ namespace SHADE Otherwise, only the copying is carried out. In the instance where memory is non-coherent but HOST_VISIBLE, we want to - write to data and then unmap and flush it immediately. If you want to write - to memory in random-access fashion, consider, mapping, writing a few - things, unmapping then flushing. + write to data and then unmap and flush it immediately. \param vmaAllocator The VMA allocator object. @@ -155,18 +154,11 @@ namespace SHADE /***************************************************************************/ void SHVkBuffer::MapWriteUnmap(void* data, uint32_t sizeToWrite, uint32_t srcOffset, uint32_t dstOffset) noexcept { - if (!boundToCoherent) - { - // map from host visible memory to pointer, do a DMA, and then unmap - Map(); - WriteToMemory(data, sizeToWrite, srcOffset, dstOffset); - Unmap(); - } - else - { - if (mappedPtr) - std::memcpy(static_cast(mappedPtr) + dstOffset, static_cast(data) + srcOffset, sizeToWrite); - } + // map from host visible memory to pointer, do a DMA, and then unmap + Map(); + WriteToMemory(data, sizeToWrite, srcOffset, dstOffset); + Unmap(); + FlushAllocation(srcOffset, dstOffset); } /***************************************************************************/ @@ -279,7 +271,6 @@ namespace SHADE , mappedPtr{ nullptr } , alloc {nullptr} , randomAccessOptimized{false} - , boundToCoherent {false} , vmaAllocator{allocator} {} @@ -304,7 +295,6 @@ namespace SHADE , mappedPtr{ std::move(rhs.mappedPtr) } , alloc{ std::move (rhs.alloc) } , randomAccessOptimized{ rhs.randomAccessOptimized } - , boundToCoherent{ rhs.boundToCoherent} , vmaAllocator{ rhs.vmaAllocator } , bufferUsageFlags {rhs.bufferUsageFlags} , bufferCreateInfo { rhs.bufferCreateInfo } @@ -325,7 +315,6 @@ namespace SHADE mappedPtr = std::move(rhs.mappedPtr); alloc = std::move(rhs.alloc); randomAccessOptimized = rhs.randomAccessOptimized; - boundToCoherent = rhs.boundToCoherent; vmaAllocator = std::move (rhs.vmaAllocator); rhs.vkBuffer = VK_NULL_HANDLE; bufferCreateInfo = rhs.bufferCreateInfo; @@ -430,16 +419,12 @@ namespace SHADE // mainly host visible. Can be cached (need to flush/invalidate), uncached (always coherent) and coherent (virtual). if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { - // If memory is marked to be coherent between CPU and GPU (no need flush/invalidate) (TODO: Verify if VMA_ALLOCATION_CREATE_MAPPED_BIT is used when VMA_MEMORY_USAGE_AUTO is set) - // TODO: also verify that coherent bit = pointer is already mapped - if (memPropFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) - { - boundToCoherent = true; - mappedPtr = allocInfo.pMappedData; - } + if (allocFlags | VMA_ALLOCATION_CREATE_MAPPED_BIT) + mappedPtr = allocInfo.pMappedData; else mappedPtr = nullptr; + if (data) MapWriteUnmap(data, srcSize, 0, 0); } diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index 49f22e37..648a07e8 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -41,9 +41,6 @@ namespace SHADE //! If initialized with vma random access flag, this is true bool randomAccessOptimized; - //! Whether or not this buffer is bound to coherent memory - bool boundToCoherent; - //! buffer usage info flags vk::BufferUsageFlags bufferUsageFlags; @@ -100,6 +97,7 @@ namespace SHADE void TransferToDeviceResource(Handle const& cmdBufferHdl) noexcept; void ResizeNoCopy (uint32_t newSize); void ResizeReplace (uint32_t newSize, void* data, uint32_t srcSize); + void FlushAllocation (uint32_t srcOffset, uint32_t dstOffset) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index cddb6cdb..83095371 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -491,6 +491,11 @@ namespace SHADE // //vkCommandBuffer.pipelineBarrier() //} + void SHVkCommandBuffer::ForceSetPipelineLayout(Handle pipelineLayout) noexcept + { + boundPipelineLayoutHdl = pipelineLayout; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index f780638a..c18527b3 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -141,6 +141,7 @@ namespace SHADE { memcpy (static_cast(pushConstantData) + boundPipelineLayoutHdl->GetPushConstantInterface().GetOffset(variableName), &data, sizeof (T)); }; + void ForceSetPipelineLayout (Handle pipelineLayout) noexcept; void SubmitPushConstants (void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index f579d377..c1732535 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -176,7 +176,7 @@ namespace SHADE } } - void SHVkDescriptorSetGroup::ModifyWriteDescBuffer(uint32_t set, uint32_t binding, std::span> const& buffers) noexcept + void SHVkDescriptorSetGroup::ModifyWriteDescBuffer(uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept { // Find the target writeDescSet BindingAndSetHash writeHash = binding; @@ -193,6 +193,8 @@ namespace SHADE // write sampler and image view auto& buffer = buffers[i]; writeInfo.descBufferInfos[i].buffer = buffer->GetVkBuffer(); + writeInfo.descBufferInfos[i].offset = offset; + writeInfo.descBufferInfos[i].range = range; } } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index bc87ff1d..d92d55e9 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -64,7 +64,7 @@ namespace SHADE void UpdateDescriptorSetBuffer(uint32_t set, uint32_t binding) noexcept; void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle>> const& imageViewsAndSamplers) noexcept; - void ModifyWriteDescBuffer (uint32_t set, uint32_t binding, std::span> const& buffers) noexcept; + void ModifyWriteDescBuffer (uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept; /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 64508a2b..65b0d9ca 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -467,7 +467,12 @@ namespace SHADE */ /***************************************************************************/ - Handle SHVkLogicalDevice::CreatePipelineLayout(SHPipelineLayoutParams& pipelineLayoutParams) noexcept + Handle SHVkLogicalDevice::CreatePipelineLayout(SHPipelineLayoutParams const& pipelineLayoutParams) noexcept + { + return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutParams); + } + + Handle SHVkLogicalDevice::CreatePipelineLayoutDummy(SHPipelineLayoutParamsDummy const& pipelineLayoutParams) noexcept { return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutParams); } diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 365e68c9..3a27e4b1 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -187,7 +187,8 @@ namespace SHADE Handle CreateDescriptorSetGroup(Handle pool, std::vector> const& layouts, std::vector const& variableDescCounts) noexcept; - Handle CreatePipelineLayout (SHPipelineLayoutParams& pipelineLayoutParams) noexcept; + Handle CreatePipelineLayout(SHPipelineLayoutParams const& pipelineLayoutParams) noexcept; + Handle CreatePipelineLayoutDummy(SHPipelineLayoutParamsDummy const& pipelineLayoutParams) noexcept; Handle CreateFence (void) const noexcept; Handle CreateSemaphore (void) const noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index d9ffa6b5..ee6d0e8c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -2,6 +2,7 @@ #include "SHGraphicsGlobalData.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Pipeline/SHPipelineState.h" +#include "Graphics/Pipeline/SHVkPipelineLayout.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" namespace SHADE @@ -66,6 +67,9 @@ namespace SHADE globalDescSetLayouts.push_back(dynamicGlobalLayout); globalDescSetLayouts.push_back(cameraDataGlobalLayout); globalDescSetLayouts.push_back(materialDataPerInstanceLayout); + + + dummyPipelineLayout = logicalDevice->CreatePipelineLayoutDummy(SHPipelineLayoutParamsDummy{globalDescSetLayouts}); } void SHGraphicsGlobalData::InitDefaultVertexInputState(void) noexcept @@ -94,4 +98,9 @@ namespace SHADE return defaultVertexInputState; } + Handle SHGraphicsGlobalData::GetDummyPipelineLayout(void) const noexcept + { + return dummyPipelineLayout; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index fb595250..9333d0ab 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -9,6 +9,7 @@ namespace SHADE class SHVkLogicalDevice; class SHVkDescriptorSetLayout; class SHVkDescriptorSetGroup; + class SHVkPipelineLayout; class SH_API SHGraphicsGlobalData { @@ -22,6 +23,10 @@ namespace SHADE //! Default vertex input state (used by everything). SHVertexInputState defaultVertexInputState; + //! Since we want to bind global data but can't do so without a pipeline layout, + //! we create a dummy pipeline layout to use it for binding. + Handle dummyPipelineLayout; + void InitDescSetLayouts (Handle logicalDevice) noexcept; void InitDefaultVertexInputState(void) noexcept; public: @@ -35,5 +40,6 @@ namespace SHADE /*-----------------------------------------------------------------------*/ std::vector> const& GetDescSetLayouts (void) const noexcept; SHVertexInputState const& GetDefaultViState (void) const noexcept; + Handle GetDummyPipelineLayout (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp index 7e7412b9..992aff05 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -22,24 +22,24 @@ namespace SHADE void SHCamera::SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up) { SHVec3 view = target - pos; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(right, view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(right, view); - viewMatrix = SHMatrix::Identity; - viewMatrix(0, 0) = right[0]; - viewMatrix(1, 0) = right[1]; - viewMatrix(2, 0) = right[2]; - viewMatrix(0, 1) = UP[0]; - viewMatrix(1, 1) = UP[1]; - viewMatrix(2, 1) = UP[2]; - viewMatrix(0, 2) = -view[0]; - viewMatrix(1, 2) = -view[1]; - viewMatrix(2, 2) = -view[2]; - viewMatrix(3, 0) = -right.Dot(pos); - viewMatrix(3, 1) = -UP.Dot(pos); - viewMatrix(3, 2) = view.Dot(pos); - - isDirty = true; + viewMatrix = SHMatrix::Identity; + viewMatrix(0, 0) = UP[0]; + viewMatrix(1, 0) = UP[1]; + viewMatrix(2, 0) = UP[2]; + viewMatrix(0, 1) = right[0]; + viewMatrix(1, 1) = right[1]; + viewMatrix(2, 1) = right[2]; + viewMatrix(0, 2) = view[0]; + viewMatrix(1, 2) = view[1]; + viewMatrix(2, 2) = view[2]; + viewMatrix(3, 0) = -UP.Dot(pos); + viewMatrix(3, 1) = -right.Dot(pos); + viewMatrix(3, 2) = -view.Dot(pos); + + isDirty = true; } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 1026d01b..cee00c9b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -114,7 +114,7 @@ namespace SHADE screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); screenCamera->SetOrthographic(static_cast(windowDims.first), static_cast(windowDims.second), 0.01f, 100.0f); worldCamera = resourceManager.Create(); - worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); + worldCamera->SetLookAt(SHVec3(1.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 2.0f), SHVec3(0.0f, 1.0f, 0.0f)); worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); // Create Default Viewport @@ -221,7 +221,6 @@ namespace SHADE renderContext.ResetFence(); - // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) { @@ -239,6 +238,8 @@ namespace SHADE // Begin recording the command buffer currentCmdBuffer->BeginRecording(); + currentCmdBuffer->ForceSetPipelineLayout(globalData->GetDummyPipelineLayout()); + // Bind all the buffers required for meshes for (auto& [buffer, bindingPoint] : MESH_DATA) { @@ -249,7 +250,7 @@ namespace SHADE } // bind camera data - renderers[renIndex]->BindDescriptorSet(currentCmdBuffer, frameIndex); + renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); // Draw first renderers[renIndex]->Draw(frameIndex); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index fd702968..c7e2a86d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -37,15 +37,14 @@ namespace SHADE commandBuffers[i] = cmdPools[i]->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); cameraDescriptorSet = descriptorPool->Allocate({ cameraDescLayout }, { 1 }); - cpuCameraData.resize(numFrames); cameraDataAlignedSize = logicalDevice->PadUBOSize(sizeof(SHShaderCameraData)); - cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); std::array cameraBufferArray{cameraBuffer}; - cameraDescriptorSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, std::span>{ cameraBufferArray.data(), cameraBufferArray.size()}); + cameraDescriptorSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, std::span>{ cameraBufferArray.data(), cameraBufferArray.size()}, 0, sizeof (SHShaderCameraData)); cameraDescriptorSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA); } @@ -66,13 +65,20 @@ namespace SHADE renderGraph->Execute(frameIndex, commandBuffers[frameIndex]); } - void SHRenderer::BindDescriptorSet(Handle cmdBuffer, uint32_t frameIndex) noexcept + void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept { - std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; + cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); + cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); + + std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; cmdBuffer->BindDescriptorSet(cameraDescriptorSet, vk::PipelineBindPoint::eGraphics, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); } + void SHRenderer::UpdateCameraDataToBuffer(void) noexcept + { + } + Handle SHRenderer::GetRenderGraph(void) const noexcept { return renderGraph; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index bbb7773b..255ab289 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -75,7 +75,8 @@ namespace SHADE /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ void Draw(uint32_t frameIndex) noexcept; - void BindDescriptorSet (Handle cmdBuffer, uint32_t frameIndex) noexcept; + void UpdateDataAndBind (Handle cmdBuffer, uint32_t frameIndex) noexcept; + void UpdateCameraDataToBuffer (void) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ @@ -95,7 +96,10 @@ namespace SHADE Handle renderGraph; Handle cameraDescriptorSet; Handle cameraBuffer; - std::vector cpuCameraData; + + // we really only need 1 copy even though we need %swapchainImages copies for + // GPU. + SHShaderCameraData cpuCameraData; //! Command buffers for the render graph std::vector> commandBuffers; diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h index 493bd114..093e03d4 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h @@ -25,6 +25,15 @@ namespace SHADE //! want to use it for allocating descriptor sets. std::vector> const& globalDescSetLayouts = {}; }; + + struct SHPipelineLayoutParamsDummy + { + /*-----------------------------------------------------------------------*/ + /* MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + + std::vector> const& globalDescSetLayouts = {}; + }; } #endif diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index a43035f5..2769d6cc 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -64,7 +64,7 @@ namespace SHADE vk::CullModeFlags cull_mode{ vk::CullModeFlagBits::eBack }; //! CW or CCW - vk::FrontFace frontFacingOrientation{ vk::FrontFace::eClockwise }; + vk::FrontFace frontFacingOrientation{ vk::FrontFace::eCounterClockwise }; bool depthBias{ VK_FALSE }; }; diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp index fc40f394..25be112e 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp @@ -254,12 +254,6 @@ namespace SHADE // Clear pc ranges vkPcRanges.clear(); - // Kill all descriptor set layouts - for (auto& layout : descriptorSetLayoutsGlobal) - SHVkInstance::GetResourceManager().Free(layout); - - descriptorSetLayoutsGlobal.clear(); - for (auto& layout : descriptorSetLayoutsAllocate) SHVkInstance::GetResourceManager().Free(layout); @@ -285,9 +279,9 @@ namespace SHADE */ /***************************************************************************/ - SHVkPipelineLayout::SHVkPipelineLayout(Handle const& inLogicalDeviceHdl, SHPipelineLayoutParams& pipelineLayoutParams) noexcept + SHVkPipelineLayout::SHVkPipelineLayout(Handle const& inLogicalDeviceHdl, SHPipelineLayoutParams const& pipelineLayoutParams) noexcept : vkPipelineLayout {VK_NULL_HANDLE} - , shaderModules{std::move (pipelineLayoutParams.shaderModules)} + , shaderModules{pipelineLayoutParams.shaderModules} , logicalDeviceHdl {inLogicalDeviceHdl} , pushConstantInterface{} , vkPcRanges{} @@ -308,6 +302,46 @@ namespace SHADE RecreateIfNeeded (); } + + SHVkPipelineLayout::SHVkPipelineLayout(Handle const& inLogicalDeviceHdl, SHPipelineLayoutParamsDummy const& pipelineLayoutParams) noexcept + : vkPipelineLayout{ VK_NULL_HANDLE } + , shaderModules{ } + , logicalDeviceHdl{ inLogicalDeviceHdl } + , pushConstantInterface{} + , vkPcRanges{} + , descriptorSetLayoutsGlobal{} + , descriptorSetLayoutsAllocate{} + , vkDescriptorSetLayoutsAllocate{} + , vkDescriptorSetLayoutsPipeline{} + + { + vkDescriptorSetLayoutsPipeline.resize(pipelineLayoutParams.globalDescSetLayouts.size()); + for (uint32_t i = 0; auto& layout : vkDescriptorSetLayoutsPipeline) + { + layout = pipelineLayoutParams.globalDescSetLayouts[i]->GetVkHandle(); + ++i; + } + + vk::PipelineLayoutCreateInfo plCreateInfo{}; + + // Set push constant data to pipeline layout + plCreateInfo.pushConstantRangeCount = 0; + plCreateInfo.pPushConstantRanges = nullptr; + + // To initialize the descriptor set layouts for the pipeline layout. + plCreateInfo.setLayoutCount = static_cast(vkDescriptorSetLayoutsPipeline.size()); + plCreateInfo.pSetLayouts = vkDescriptorSetLayoutsPipeline.data(); + + if (auto const RESULT = logicalDeviceHdl->GetVkLogicalDevice().createPipelineLayout(&plCreateInfo, nullptr, &vkPipelineLayout); RESULT != vk::Result::eSuccess) + { + SHVulkanDebugUtil::ReportVkError(RESULT, "Failed to create Pipeline Layout. "); + return; + } + else + SHVulkanDebugUtil::ReportVkSuccess("Successfully created Pipeline Layout. "); + + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h index bce827a7..e43ceb73 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h @@ -57,7 +57,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHVkPipelineLayout (Handle const& inLogicalDeviceHdl, SHPipelineLayoutParams& pipelineLayoutParams) noexcept; + SHVkPipelineLayout(Handle const& inLogicalDeviceHdl, SHPipelineLayoutParams const& pipelineLayoutParams) noexcept; + SHVkPipelineLayout(Handle const& inLogicalDeviceHdl, SHPipelineLayoutParamsDummy const& pipelineLayoutParams) noexcept; SHVkPipelineLayout (SHVkPipelineLayout&& rhs) noexcept; ~SHVkPipelineLayout (void) noexcept; SHVkPipelineLayout& operator= (SHVkPipelineLayout&& rhs) noexcept; diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index 08c465a0..1e3a11d7 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -56,6 +56,7 @@ void main() //Out.uv = aUV; // render NDC first - gl_Position = vec4(aVertexPos, 1.0); + //gl_Position = vec4(aVertexPos, 1.0f); + gl_Position = cameraData.vpMat * vec4 (aVertexPos, 1.0f); Out.vertColor = vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index be24aa3a944eff08f83a27869e46ef93dcc93eae..f0b31ea23f835273164024fc22e42f8e3c4cc918 100644 GIT binary patch literal 1768 zcmZ9LYflqF6ovA)6cQnt1#>m=i~9Dg9|GoNw`AM0r!p4p%3jC{`b}#7qs2w-+Gw^LtyZIX*zODl z?P2^Q@Y;bNdhMp&^2?c)S}q13ZLFE~OPV{m^>FmqrpMD+&=t&MughQqHC z8*`)x{bsn?ahwB=*>Us|j=nh#AC7x$D1wiUxa(6*m~kW(963t~PBmaO*Di5-;0Z@w z){(cN9Q1Va65bGI5U0PD1f`h1Vcsen`^;;u z%E-$;-~}0DO_=_Ym%1wY(o@%C@?RI`Jn-ZP(`z`F?}mKxqhHQqt!GM$e`xGVtCUZ^rbH=GI~e9-b$JFDCNQQR(m)Fo0uO+Y5Fpf|^dXR_|oJT=)`F;hZ}nK#o;x7x?;<~Z#)pTBqp zW66{p5zew%aCTY$0~^LTi<0Y-JCYsAuH=DaPg2rvO8U1pmsPdZ?zTFeR{KM@HyU-v z>5nMrMqwOu`(YCF((pWhH(TI^aW9(mi-d|8#rhTXJ+B&PQTHfFPJ<*3zRMMw;n>86 z<1h_}vCtXE=R6J%T_^ZfSFOP-q+d+`n1Do2cJ{W7{ha!7gS-_dg`RJo1F}0e~y~6%O zVa%K5wa3^ChV~e<1Y>RBFHHh!! zKDDUt&)$&FIuysByW;%+bAWU05~dHxVf4*DUza&;U-IknS*v2ft7{K^VXw=Ymaa)Q z)B}0(>2pp0v(hyQYcKb&%I4f#^5>-CgH>fQL!W~fQWI}MnwrF4=RR*0j5CDIwxo%Hkqe*u2BY>p zY4R~I`1hr$0}da5C&zp*yO(_41A8{be<)3DW=y_E(!{{okI#DntIFqo;S-1dM4Dc} z;p21fU@!Hy(Bx)uhCf1hQ*VSauT=@N`Ye=lt>u{11-71J^x%0LIY#~?bwp2_686I< z&dlE{FY~@7;f}e-x9S8RzVCzYqu9q?`Cu$xvnCs?*hf9bihXPgV}DITyx2!WKKJSS Mz=!`=Szk&10e+KzwEzGB From 495d2b4b66e512fc84ce77617b139fdeb1bc579a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 20:04:53 +0800 Subject: [PATCH 174/793] Added per-frame update of gpu transforms buffer --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 26 ++++++++++++------- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 1 + .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 8 ++++++ .../Graphics/MiddleEnd/Batching/SHBatcher.h | 1 + .../MiddleEnd/Batching/SHSuperBatch.cpp | 8 ++++++ .../MiddleEnd/Batching/SHSuperBatch.h | 1 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 8 ++++++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 1 + 8 files changed, 45 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 08ffa88e..c2090fc0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -86,6 +86,23 @@ namespace SHADE matPropsBuffer.Free(); } + void SHBatch::UpdateTransformBuffer() + { + // Reset Transform Data + transformData.clear(); + + // Populate on the CPU + for (auto& subBatch : subBatches) + for (const SHRenderable* renderable : subBatch.Renderables) + { + // Transform + transformData.emplace_back(renderable->TransformMatrix); + } + + // Transfer to GPU + transformDataBuffer->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); + } + void SHBatch::Build(Handle device) { // No need to build as there are no changes @@ -159,36 +176,27 @@ namespace SHADE // Send all buffered data to the GPU buffers using BuffUsage = vk::BufferUsageFlagBits; // - Draw Data - if (drawDataBuffer) - drawDataBuffer->Unmap(); const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, drawDataBuffer, drawData.data(), DRAW_DATA_BYTES, BuffUsage::eIndirectBuffer ); - drawDataBuffer->Map(); // - Transform Buffer - if (transformDataBuffer) - transformDataBuffer->Unmap(); const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, transformDataBuffer, transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); - transformDataBuffer->Map(); // - Material Properties Buffer if (!EMPTY_MAT_PROPS) { - if (matPropsBuffer) - matPropsBuffer->Unmap(); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, matPropsBuffer, matPropsData.get(), static_cast(matPropTotalBytes), BuffUsage::eStorageBuffer ); - matPropsBuffer->Map(); } isDirty = false; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index a5b808ff..f438d6c1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -71,6 +71,7 @@ namespace SHADE void Add(const SHRenderable* renderable); void Remove(const SHRenderable* renderable); void Clear(); + void UpdateTransformBuffer(); void Build(Handle device); void Draw(Handle cmdBuffer); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index c92d9585..ea216ed5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -109,6 +109,14 @@ namespace SHADE superBatches.clear(); } + void SHBatcher::UpdateTransformBuffer() + { + for (auto& batch : superBatches) + { + batch->UpdateTransformBuffer(); + } + } + void SHBatcher::RegisterSuperBatch(Handle superBatch) { superBatches.emplace_back(superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 4c8ac811..89dea2eb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -53,6 +53,7 @@ namespace SHADE void RemoveFromBatch(SHRenderable const* renderable); void FinaliseBatches(Handle device); void ClearBatches(); + void UpdateTransformBuffer(); void RegisterSuperBatch(Handle superBatch); void DeregisterSuperBatch(Handle superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 09d2a720..8b7ea619 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -78,6 +78,14 @@ namespace SHADE batches.clear(); } + void SHSuperBatch::UpdateTransformBuffer() + { + for (auto& batch : batches) + { + batch.UpdateTransformBuffer(); + } + } + void SHSuperBatch::Build(Handle device) noexcept { // Build all batches diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index b44dd349..6151e56e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -55,6 +55,7 @@ namespace SHADE void Add(const SHRenderable* renderable) noexcept; void Remove(const SHRenderable* renderable) noexcept; void Clear() noexcept; + void UpdateTransformBuffer(); void Build(Handle device) noexcept; void Draw(Handle cmdBuffer) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index d02e8f7d..f53f3e99 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -348,6 +348,9 @@ namespace SHADE void SHSubpass::Execute(Handle& commandBuffer) noexcept { + // Ensure correct transforms are provided + superBatch->UpdateTransformBuffer(); + // Draw all the batches superBatch->Draw(commandBuffer); @@ -626,6 +629,11 @@ namespace SHADE batcher.FinaliseBatches(logicalDeviceHdl); } + void SHRenderGraphNode::UpdateBatchTransforms() + { + batcher.UpdateTransformBuffer(); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index cbb9586d..16770475 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -231,6 +231,7 @@ namespace SHADE void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; void FinaliseBatch(); + void UpdateBatchTransforms(); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From 0250687e06c0ce3d3cad92ecc1c69903a7373691 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 20:25:23 +0800 Subject: [PATCH 175/793] Instantiated Transform System & Update Routine --- SHADE_Application/src/Application/SBApplication.cpp | 11 ++++++++++- .../src/Math/Transform/SHTransformSystem.cpp | 12 ++++++++++-- SHADE_Engine/src/Math/Transform/SHTransformSystem.h | 13 +++++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 53cc1e40..938b0b57 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -22,6 +22,7 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" +#include "Math/Transform/SHTransformSystem.h" #include "Scenes/SBTestScene.h" @@ -45,8 +46,10 @@ namespace Sandbox window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); // Create Systems - SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); + // TODO(Diren): Create Physics System here + SHADE::SHSystemManager::CreateSystem(); + SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); // Create Routines @@ -54,6 +57,12 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); + + // TODO(Diren): Register Physics System & Routines here + + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index adbdf746..64ad9f43 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -25,8 +25,6 @@ namespace SHADE /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ - //SHTransformSystem::TransformUpdateRoutine SHTransformSystem::UpdateRoutine; - /*-----------------------------------------------------------------------------------*/ /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -47,6 +45,16 @@ namespace SHADE UpdateEntity(SCENE_GRAPH.GetRoot()); } + void SHTransformSystem::Init() + { + + } + + void SHTransformSystem::Exit() + { + + } + /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index c57cbdbd..02c3b6c6 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -21,7 +21,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHTransformSystem : public SHSystem + class SH_API SHTransformSystem final : public SHSystem { public: /*---------------------------------------------------------------------------------*/ @@ -29,7 +29,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHTransformSystem () = default; - ~SHTransformSystem () = default; + ~SHTransformSystem () override = default; SHTransformSystem (const SHTransformSystem&) = delete; SHTransformSystem (SHTransformSystem&&) = delete; @@ -45,7 +45,7 @@ namespace SHADE /* System Routines */ /*---------------------------------------------------------------------------------*/ - class TransformUpdateRoutine : public SHSystemRoutine + class SH_API TransformUpdateRoutine final: public SHSystemRoutine { public: /*-------------------------------------------------------------------------------*/ @@ -72,7 +72,12 @@ namespace SHADE void Execute(double dt) noexcept override; }; - //static TransformUpdateRoutine UpdateRoutine; + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void Init () override; + void Exit () override; private: /*---------------------------------------------------------------------------------*/ From 2c0fa3a6b27172a0bb358978feae8578be8b0cac Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 20:25:42 +0800 Subject: [PATCH 176/793] Fixed warning from scene graph when adding new nodes to root. --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 84c7f1c5..da2dcffd 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -497,9 +497,16 @@ namespace SHADE SHSceneNode* newNode = AllocateNode(entityID); if (parent == nullptr) + { + // Specific handling for root to avoid a warning when removing a non-existent child parent = root; - - newNode->SetParent(parent); + newNode->parent = root; + root->children.emplace_back(newNode); + } + else + { + newNode->SetParent(parent); + } return newNode; } From 6d646851e256ab6698edff14798c23504cdeb6db Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 22 Sep 2022 20:39:46 +0800 Subject: [PATCH 177/793] Added missing transpose to transform update and a test component to application --- SHADE_Application/src/Scenes/SBTestScene.cpp | 9 +++++++-- .../src/Math/Transform/SHTransformSystem.cpp | 12 +++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index c59fa234..751e17a8 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -8,6 +8,7 @@ #include "Scene/SHSceneManager.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Scripting/SHScriptEngine.h" +#include "Math/Transform/SHTransformComponent.h" using namespace SHADE; @@ -38,11 +39,15 @@ namespace Sandbox auto matInst = graphicsSystem->AddMaterialInstance(); // Create entity and add mesh - testObj = SHADE::SHEntityManager::CreateEntity(); + testObj = SHADE::SHEntityManager::CreateEntity(); auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); - renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); + // Create transform + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); + transform.SetLocalPosition(SHVec3{ 0.0f, 0.0f, 2.0f }); + + renderable.TransformMatrix = SHMatrix::Translate(0.0f, 0.0f, 2.0f); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testObj), "TestScript"); } diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 64ad9f43..18e54a89 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -74,11 +74,9 @@ namespace SHADE SHASSERT(IS_NODE_ACTIVE == IS_ENTITY_ACTIVE, "Entity and Node active states are not synced!") #endif + // Anything below is inactive if (!IS_NODE_ACTIVE) - { - UpdateEntity(child); - continue; - } + break; const bool HAS_TRANSFORM = SHComponentManager::HasComponent(child->GetEntityID()); if (!HAS_TRANSFORM) @@ -104,7 +102,7 @@ namespace SHADE if (parent) { localToWorld = parent->GetTRS(); - worldToLocal = SHMatrix::Inverse(tf.local.trs); + worldToLocal = SHMatrix::Inverse(localToWorld); } while (!tf.updateQueue.empty()) @@ -148,6 +146,10 @@ namespace SHADE tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); tf.world.ComputeTRS(); + + // Transpose TRS to column major + tf.local.trs.Transpose(); + tf.world.trs.Transpose(); } } // namespace SHADE \ No newline at end of file From 5c4384b589ce146828a8c83a64b16c720338f21b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 22 Sep 2022 20:53:03 +0800 Subject: [PATCH 178/793] Fixed SHVkBuffer initial copy data for mapped buffers and made the cube spin --- .../src/Application/SBApplication.cpp | 6 +++-- SHADE_Application/src/Scenes/SBTestScene.cpp | 21 +++++++++--------- SHADE_Application/src/Scenes/SBTestScene.h | 2 +- .../src/Graphics/Buffers/SHVkBuffer.cpp | 14 ++++++++---- .../MiddleEnd/Interface/SHRenderable.cpp | 1 - TempShaderFolder/TestCubeVs.glsl | 2 +- TempShaderFolder/TestCubeVs.spv | Bin 1768 -> 1804 bytes 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 53cc1e40..93d1cdff 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -22,8 +22,8 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" - #include "Scenes/SBTestScene.h" +#include "Math/Transform/SHTransformComponent.h" using namespace SHADE; @@ -58,8 +58,10 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + // Set up graphics system and windows graphicsSystem->SetWindow(&window); sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 93d4e19b..e6082d3f 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -30,8 +30,6 @@ namespace Sandbox } void SBTestScene::Init() { - SHComponentManager::CreateComponentSparseSet(); - SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); @@ -41,27 +39,28 @@ namespace Sandbox auto matInst = graphicsSystem->AddMaterialInstance(); // Create entity and add mesh - testEntity = SHADE::SHEntityManager::CreateEntity(); - SHComponentManager::AddComponent(testEntity); - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testEntity); - auto& transform = *SHADE::SHComponentManager::GetComponent_s(testEntity); + testObj = SHADE::SHEntityManager::CreateEntity(); + //SHComponentManager::AddComponent(testObj); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); renderable.TransformMatrix.Translate(0.0f, 0.0f, 2.0f); - - transform.SetWorldPosition (SHVec3 (0.0f, 0.0f, 2.0f)); // Add script SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testEntity), "TestScript"); + scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testObj), "TestScript"); } + void SBTestScene::Update(float dt) { static float rotation = 0.0f; - auto& transform = *SHADE::SHComponentManager::GetComponent_s(testEntity); - transform.SetWorldRotation (rotation, 0.0f, 0.0f); + auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); + SHTransform tf; + tf.rotation = SHVec3(rotation, 0.0f, 0.0f); + renderable.TransformMatrix = tf.ComputeTRS(); rotation += dt * 10.0f; diff --git a/SHADE_Application/src/Scenes/SBTestScene.h b/SHADE_Application/src/Scenes/SBTestScene.h index bb382477..81ee3e7b 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.h +++ b/SHADE_Application/src/Scenes/SBTestScene.h @@ -9,7 +9,7 @@ namespace Sandbox { private: EntityID camera; - unsigned int testEntity; + EntityID testObj; public: virtual void Load(); diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 59916731..da4bc292 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -419,14 +419,20 @@ namespace SHADE // mainly host visible. Can be cached (need to flush/invalidate), uncached (always coherent) and coherent (virtual). if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { - if (allocFlags | VMA_ALLOCATION_CREATE_MAPPED_BIT) - mappedPtr = allocInfo.pMappedData; + const bool CREATE_MAPPED = allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT; + + if (CREATE_MAPPED) + mappedPtr = allocInfo.pMappedData; else mappedPtr = nullptr; - if (data) - MapWriteUnmap(data, srcSize, 0, 0); + { + if (CREATE_MAPPED) + WriteToMemory(data, srcSize, 0, 0); + else + MapWriteUnmap(data, srcSize, 0, 0); + } } else { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 984e753b..32a6a99a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -27,7 +27,6 @@ namespace SHADE sharedMaterial = {}; material = {}; oldMaterial = {}; - } void SHRenderable::OnDestroy() diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index 1e3a11d7..b2d52104 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -57,6 +57,6 @@ void main() // render NDC first //gl_Position = vec4(aVertexPos, 1.0f); - gl_Position = cameraData.vpMat * vec4 (aVertexPos, 1.0f); + gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); Out.vertColor = vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index f0b31ea23f835273164024fc22e42f8e3c4cc918..eb9a1209e697acf798dc5ab441bdbdfed631bc9c 100644 GIT binary patch literal 1804 zcmZ9LYflqF6o$uM06{=RE-KcRdPflzh>1~S3Mn6|U_ib$lXfMWY`4vJTQ8sd3;L7% zRemw?eRg-qhH1{udEfKSnKNgm#X^13m`i5b%$i-3js;T?W6X@1NakkixV1TqyPMlP zTPWsCF%hDfH&+tBq;JpqAz)T^LspSJmc5j1%XVZ%{R*1@XmLrqHe2oH;bF72-|h?s z?P2^q@Y;bNdhMF$S&>`4gFzTE>G9HrCAgMa`Yudd^6XzxJb`dlK1j_@y89QZ0SA z>9KW2xT1L|jzJHcKUQZN{h%L-N5fqmj^f1U&g|z?`K9FU>_?@yfp9swM|)z!GcTk( zb0Cg>Gu-Sr&H=~lIC=?3-yDYz$2~R`!AD2j^{Fn*IFJgCoaF?k8Zerx7dSoegd;EO z$lFv7db)lA*Mu3w-5XA8Dkblk-ZF^OuRNw_VCo>wn+Lo7c>iF|x+oUDCIrS`mN%if zDqGQd>ISp_lD<=#t1`w$hA+!!zct}$&FJAO^5~(*N`nDt=p0zG|M z)66-k7yWI`#Ng3`-950M>!~q6-=V*+IBTi7B9H$AKCwrdiNTQz%ss=g_jAqU<1FZ3 zXl8GC^kCiroU4U*kjK0O@UC7jdFUg9J^qT}O~2QdzAVe=9sPPEB|TY@!8?3YKK=Qv zHNaiFLz}0FNNZ K|EH|4Wd8wmlZ7(? literal 1768 zcmZ9LYflqF6ovA)6cQnt1#>m=i~9Dg9|GoNw`AM0r!p4p%3jC{`b}#7qs2w-+Gw^LtyZIX*zODl z?P2^Q@Y;bNdhMp&^2?c)S}q13ZLFE~OPV{m^>FmqrpMD+&=t&MughQqHC z8*`)x{bsn?ahwB=*>Us|j=nh#AC7x$D1wiUxa(6*m~kW(963t~PBmaO*Di5-;0Z@w z){(cN9Q1Va65bGI5U0PD1f`h1Vcsen`^;;u z%E-$;-~}0DO_=_Ym%1wY(o@%C@?RI`Jn-ZP(`z`F?}mKxqhHQqt!GM$e`xGVtCUZ^rbH=GI~e9-b$JFDCNQQ Date: Thu, 22 Sep 2022 22:58:14 +0800 Subject: [PATCH 179/793] Changed editor pause for transform system to true --- SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 18e54a89..f61f3e42 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -30,7 +30,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHTransformSystem::TransformUpdateRoutine::TransformUpdateRoutine() - : SHSystemRoutine { "Transform Update", false } + : SHSystemRoutine { "Transform Update", true } {} From a0c29c666fe51aba6b6fee0b9b9fd3683829a880 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Fri, 23 Sep 2022 13:14:46 +0800 Subject: [PATCH 180/793] progress on input manager, near ready for PR --- .../src/Input/SHInputManagerSystem.cpp | 147 +++++ SHADE_Engine/src/Input/SHInputManagerSystem.h | 559 ++++++++++++++++++ 2 files changed, 706 insertions(+) create mode 100644 SHADE_Engine/src/Input/SHInputManagerSystem.cpp create mode 100644 SHADE_Engine/src/Input/SHInputManagerSystem.h diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp new file mode 100644 index 00000000..d5e9bb3f --- /dev/null +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp @@ -0,0 +1,147 @@ +/********************************************************************* + * \file SHInputManagerSystem.cpp + * \author Ryan Wang Nian Jing + * \brief Definition of input manager. + * Handles input from keyboard and mouse. Soon to include controller. + * + * \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. + *********************************************************************/ + +#pragma once +#include "SHInputManagerSystem.h" + +namespace SHADE +{ + /*------------------------------------------------------------------------*/ + /* Static defines */ + /*------------------------------------------------------------------------*/ + + unsigned SHInputManagerSystem::keyCount = 0; + bool SHInputManagerSystem::keys[MAX_KEYS]; + bool SHInputManagerSystem::keysLast[MAX_KEYS]; + double SHInputManagerSystem::keysHeldTime[MAX_KEYS]; + double SHInputManagerSystem::keysReleasedTime[MAX_KEYS]; + + unsigned SHInputManagerSystem::keyToggleCount = 0; + bool SHInputManagerSystem::keysToggle[MAX_KEYS]; + bool SHInputManagerSystem::keysToggleLast[MAX_KEYS]; + double SHInputManagerSystem::keysToggleOnTime[MAX_KEYS]; + double SHInputManagerSystem::keysToggleOffTime[MAX_KEYS]; + + int SHInputManagerSystem::mouseScreenX = 0; + int SHInputManagerSystem::mouseScreenY = 0; + int SHInputManagerSystem::mouseScreenXLast = 0; + int SHInputManagerSystem::mouseScreenYLast = 0; + int SHInputManagerSystem::mouseWheelVerticalDelta = 0; + int SHInputManagerSystem::mouseWheelVerticalDeltaPoll = 0; + + void SHInputManagerSystem::InputManagerRoutine:: + FixedExecute(double dt) noexcept + { + //Keyboard and Mouse Buttons//////////////////////////////////////////////// + //Poll + unsigned char keyboardState[MAX_KEYS]; + GetKeyboardState(keyboardState); + keyCount = 0; + keyToggleCount = 0; + for (size_t i = 0; i < MAX_KEYS; ++i) + { + //Ignore shift, ctrl and alt since they are split to left and right + if (static_cast(i) == SH_KEYCODE::SHIFT || + static_cast(i) == SH_KEYCODE::CTRL || + static_cast(i) == SH_KEYCODE::ALT) + continue; + + //Pressed state + if (keyboardState[i] & 0b10000000) + { + ++keyCount; + keys[i] = true; + } + else keys[i] = false; + + //Toggle state + if (keyboardState[i] & 0b00000001) + { + ++keyToggleCount; + keysToggle[i] = true; + } + else keysToggle[i] = false; + } + + //Timers + for (size_t i = 0; i < MAX_KEYS; ++i) + { + if (keys[i]) //Key is down + { + if (!keysLast[i]) //Key was just pressed + { + keysHeldTime[i] = 0.0; //Reset timer + } + keysHeldTime[i] += dt; //Tick up + } + else //Key is up + { + if (keysLast[i]) //Key was just released + { + keysReleasedTime[i] = 0.0; //Reset timer + } + keysReleasedTime[i] += dt; //Tick up + } + } + + //Write to lastKeys + memcpy(keysLast, keys, sizeof(keys)); + + //Mouse Positioning///////////////////////////////////// + //https://stackoverflow.com/a/6423739 + + //Get cursor position, even when it is outside window + POINT p; + GetCursorPos(&p); + mouseScreenX = p.x; + mouseScreenY = p.y; + + //Mouse wheel vertical delta updating + mouseWheelVerticalDelta = 0; + mouseWheelVerticalDelta = mouseWheelVerticalDeltaPoll; + mouseWheelVerticalDeltaPoll = 0; + } + + bool SHInputManagerSystem::AnyKeyDown(SH_KEYCODE* firstDetected) noexcept + { + for (size_t i = 0; i < MAX_KEYS; ++i) + { + if (keys[i] && !keysLast[i]) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManagerSystem::AnyKey(SH_KEYCODE* firstDetected) noexcept + { + for (size_t i = 0; i < MAX_KEYS; ++i) + { + if (keys[i]) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManagerSystem::AnyKeyUp(SH_KEYCODE* firstDetected) noexcept + { + for (size_t i = 0; i < MAX_KEYS; ++i) + { + + } + } + +} //namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManagerSystem.h new file mode 100644 index 00000000..39c97d6f --- /dev/null +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.h @@ -0,0 +1,559 @@ +/********************************************************************* + * \file SHInputManagerSystem.h + * \author Ryan Wang Nian Jing + * \brief Declaration of input manager. + * Handles input from keyboard and mouse. Soon to include controller. + * + * \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction + or disclosure of this file or its contents without the prior written + consent of DigiPen Institute of Technology is prohibited. + *********************************************************************/ + +#pragma once +//#include +#include "../../SHADE_Managed/src/SHpch.h" +#include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHFixedSystemRoutine.h" + +namespace SHADE +{ + class SH_API SHInputManagerSystem : public SHSystem + { + public: + class SH_API InputManagerRoutine : public SHFixedSystemRoutine + { + public: + virtual void FixedExecute(double dt) noexcept override final; + }; + + public: + /*------------------------------------------------------------------------*/ + /* Enumerations */ + /*------------------------------------------------------------------------*/ + enum class SH_KEYCODE + { + LMB = 0X01, + RMB = 0X02, + CANCEL = 0X03, + MMB = 0X04, + XMB1 = 0X05, + XMB2 = 0X06, + + BACKSPACE = 0X08, + TAB = 0X09, + + CLEAR = 0X0C, + ENTER = 0X0D, + + SHIFT = 0X10, //USE LEFT OR RIGHT SHIFT INSTEAD + CTRL = 0X11, //USE LEFT OR RIGHT CTRL INSTEAD + ALT = 0X12, //USE LEFT OR RIGHT ALT INSTEAD + PAUSE = 0X13, + CAPS_LOCK = 0X14, + IME_KANA = 0X15, + IME_HANGUL = 0X15, + IME_ON = 0X16, + IME_JUNJA = 0X17, + IME_FINAL = 0X18, + IME_HANJA = 0X19, + IME_KANJI = 0X19, + IME_OFF = 0X1A, + ESCAPE = 0X1B, + IME_CONVERT = 0X1C, + IME_NONCONVERT = 0X1D, + IME_ACCEPT = 0X1E, + IME_MODECHANGE = 0X1F, + SPACE = 0X20, + PAGE_UP = 0X21, + PAGE_DOWN = 0X22, + END = 0X23, + HOME = 0X24, + LEFT_ARROW = 0X25, + UP_ARROW = 0X26, + RIGHT_ARROW = 0X27, + DOWN_ARROW = 0X28, + SELECT = 0X29, + PRINT = 0X2A, + EXECUTE = 0X2B, + PRINT_SCREEN = 0X2C, + INSERT = 0X2D, + DEL = 0X2E, + HELP = 0X2F, + + NUMBER_0 = 0X30, + NUMBER_1, + NUMBER_2, + NUMBER_3, + NUMBER_4, + NUMBER_5, + NUMBER_6, + NUMBER_7, + NUMBER_8, + NUMBER_9, + + A = 0X41, + B, + C, + D, + E, + F, + G, + H, + I, + J, + K, + L, + M, + N, + O, + P, + Q, + R, + S, + T, + U, + V, + W, + X, + Y, + Z, + + LEFT_WINDOWS = 0X5B, + RIGHT_WINDOWS, + APPS, + + SLEEP = 0X5F, + + NUMPAD_0 = 0X60, + NUMPAD_1, + NUMPAD_2, + NUMPAD_3, + NUMPAD_4, + NUMPAD_5, + NUMPAD_6, + NUMPAD_7, + NUMPAD_8, + NUMPAD_9, + + MULTIPLY = 0X6A, + ADD, + SEPARATOR, + SUBTRACT, + DECIMAL, + DIVIDE, + + F1 = 0X70, + F2, + F3, + F4, + F5, + F6, + F7, + F8, + F9, + F10, + F11, + F12, + F13, + F14, + F15, + F16, + F17, + F18, + F19, + F20, + F21, + F22, + F23, + F24, + + NUM_LOCK = 0X90, + SCROLL_LOCK = 0X91, + + OEM_PC98_NUMPAD_EQUAL = 0X92, + OEM_FUJITSU_DICTIONARY = 0X92, + OEM_FUJITSU_UNREGISTER, + OEM_FUJITSU_REGISTER, + OEM_FUJITSU_LEFT_THUMB, + OEM_FUJITSU_RIGHT_THUMB, + + LEFT_SHIFT = 0XA0, + RIGHT_SHIFT, + LEFT_CTRL, + RIGHT_CTRL, + LEFT_ALT, + RIGHT_ALT, + BROWSER_BACK, + BROWSER_FORWARD, + BROWSER_REFRESH, + BROWSER_STOP, + BROWSER_SEARCH, + BROWSER_FAVOURITES, + BROWSER_HOME, + VOLUME_MUTE, + VOLUME_DOWN, + VOLUME_UP, + MEDIA_NEXT_TRACK, + MEDIA_PREVIOUS_TRACK, + MEDIA_STOP, + MEDIA_PLAY_PAUSE, + LAUNCH_MAIL, + LAUNCH_MEDIA_SELECT, + LAUNCH_APP_1, + LAUNCH_APP_2, + + OEM_1 = 0XBA, + OEM_PLUS, + OEM_COMMA, + OEM_MINUS, + OEM_PERIOD, + OEM_2, + OEM_3, + + GAMEPAD_A = 0XC3, + GAMEPAD_B, + GAMEPAD_X, + GAMEPAD_Y, + GAMEPAD_RIGHTSHOULDER, + GAMEPAD_LEFTSHOULDER, + GAMEPAD_LEFTTRIGGER, + GAMEPAD_RIGHTTRIGGER, + GAMEPAD_DPAD_UP, + GAMEPAD_DPAD_DOWN, + GAMEPAD_DPAD_LEFT, + GAMEPAD_DPAD_RIGHT, + GAMEPAD_MENU, + GAMEPAD_VIEW, + GAMEPAD_LEFT_THUMBSTICK_BUTTON, + GAMEPAD_RIGHT_THUMBSTICK_BUTTON, + GAMEPAD_LEFT_THUMBSTICK_UP, + GAMEPAD_LEFT_THUMBSTICK_DOWN, + GAMEPAD_LEFT_THUMBSTICK_RIGHT, + GAMEPAD_LEFT_THUMBSTICK_LEFT, + GAMEPAD_RIGHT_THUMBSTICK_UP, + GAMEPAD_RIGHT_THUMBSTICK_DOWN, + GAMEPAD_RIGHT_THUMBSTICK_RIGHT, + GAMEPAD_RIGHT_THUMBSTICK_LEFT, + + OEM_4, + OEM_5, + OEM_6, + OEM_7, + OEM_8, + + OEM_AX = 0XE1, + OEM_102, + OEM_ICO_HELP, + OEM_ICO_00, + IME_PROCESS, + OEM_ICO_CLEAR, + PACKET, + + OEM_RESET = 0XE9, + OEM_JUMP, + OEM_PA1, + OEM_PA2, + OEM_PA3, + OEM_WSCTRL, + OEM_CUSEL, + OEM_ATTN, + OEM_FINISH, + OEM_COPY, + OEM_AUTO, + OEM_ENLW, + OEM_BACKTAB, + + ATTN, + CRSEL, + EXSEL, + EREOF, + PLAY, + ZOOM, + NONAME, + PA_1, + OEM_CLEAR + }; + + public: + /*------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*------------------------------------------------------------------------*/ + SHInputManagerSystem() noexcept = default; + ~SHInputManagerSystem() noexcept = default; + + SHInputManagerSystem(const SHInputManagerSystem&) = delete; + SHInputManagerSystem(SHInputManagerSystem&&) = delete; + + SHInputManagerSystem& operator= (const SHInputManagerSystem&) = delete; + SHInputManagerSystem& operator= (SHInputManagerSystem&&) = delete; + + /*------------------------------------------------------------------------*/ + /* SHSystem Overrides */ + /*------------------------------------------------------------------------*/ + virtual void Init() override final; + virtual void Exit() override final; + + /*------------------------------------------------------------------------*/ + /* Member Functions */ + /*------------------------------------------------------------------------*/ + + //Needs to be linked to WM_MOUSEWHEEL in wndProc + static inline void PollWheelVerticalDelta(WPARAM wParam) noexcept + { + mouseWheelVerticalDeltaPoll += GET_WHEEL_DELTA_WPARAM(wParam); + } + + //For testing purposes + //static void PrintCurrentState() noexcept; + + /*------------------------------------------------------------------------*/ + /* Input state accessors (KB & M) */ + /*------------------------------------------------------------------------*/ + //Get how many keys are presently down + static inline unsigned GetKeyCount() noexcept + { + return keyCount; + } + + //How many keys are presently toggled + static inline unsigned GetKeyToggleCount() noexcept + { + return keyToggleCount; + } + + //Any key pressed in THIS FRAME ONLY + //Keys being held beforehand don't count + //Output parameter is which key was first to be detected + static bool AnyKeyDown(SH_KEYCODE* firstKey = nullptr) noexcept; + + //Any key is being held down + //Return false if no key being held + //Output parameter is which key was first to be detected + static bool AnyKey(SH_KEYCODE* firstKey = nullptr) noexcept; + + //Any key released in THIS FRAME ONLY + //Keys that are released beforehand don't count + //Output parameter is which key was first to be detected + static bool AnyKeyUp(SH_KEYCODE* firstKey = nullptr) noexcept; + + //Check if a particular key was pressed down in THIS FRAME ONLY + //Keys being held beforehand don't count + //Output parameter is how long the key has been released for prior + static inline bool GetKeyDown (SH_KEYCODE key, + double* releasedTime = nullptr) noexcept + { + if (releasedTime) *releasedTime = keysReleasedTime[static_cast(key)]; + return (keys[static_cast(key)] && !keysLast[static_cast(key)]); + } + + //Check if a particular key was toggled on in THIS FRAME ONLY + //Keys that stay toggled on afterwards don't count + //Output parameter is how long the key has been toggled off for prior + static inline bool GetKeyToggleOn (SH_KEYCODE key, + double* toggleOffTime = nullptr) noexcept + { + if (toggleOffTime) + *toggleOffTime = keysToggleOffTime[static_cast(key)]; + return (keysToggle[static_cast(key)] && + !keysToggleLast[static_cast(key)]); + } + + //Check if a particular key is presently being held down on + //Output parameter is how long the key has been held and released + static inline bool GetKey(SH_KEYCODE key, + double* heldTime = nullptr, double* releasedTime = nullptr) noexcept + { + if (heldTime) *heldTime = keysHeldTime[static_cast(key)]; + if (releasedTime) *releasedTime = keysReleasedTime[static_cast(key)]; + return keys[static_cast(key)]; + } + + //Check if a particular key is presently toggled on + //Output parameter is how long the key has been toggled on and off + static inline bool GetKeyToggle(SH_KEYCODE key, + double* onTime = nullptr, double* offTime = nullptr) noexcept + { + if (onTime) *onTime = keysToggleOnTime[static_cast(key)]; + if (offTime) *offTime = keysToggleOffTime[static_cast(key)]; + return keysToggle[static_cast(key)]; + } + + //Check if a particular key was released in THIS FRAME ONLY + //Keys already released beforehand don't count + //Output parameter is how long the key has been held for prior + static inline bool GetKeyUp(SH_KEYCODE key, + double* heldTime = nullptr) noexcept + { + if (heldTime) *heldTime = keysHeldTime[static_cast(key)]; + return (!keys[static_cast(key)] && keysLast[static_cast(key)]); + } + + //Check if a particular key was toggled off in THIS FRAME ONLY + //Keys that stay toggled off afterwards don't count + //Output parameter is how long the key has been toggled on for prior + static inline bool GetKeyToggleOff(SH_KEYCODE key, + double* toggleOnTime = nullptr) noexcept + { + if (toggleOnTime) + *toggleOnTime = keysToggleOnTime[static_cast(key)]; + return (!keysToggle[static_cast(key)] && + keysToggleLast[static_cast(key)]); + } + + //Mouse///////////// + + //Get the mouse location with respect to the screen + static inline void GetMouseScreenPosition (int* x = nullptr, + int* y = nullptr) noexcept + { + if (x) *x = mouseScreenX; + if (y) *y = mouseScreenY; + } + + //Get the mouse location with respect to current window + static inline void GetMouseWindowPosition (int* x = nullptr, + int* y = nullptr) noexcept + { + POINT p{ mouseScreenX, mouseScreenY }; + ScreenToClient(GetActiveWindow(), &p); + if (x) *x = mouseScreenX; + if (y) *y = mouseScreenY; + } + + //Get the mouse wheel vertical delta + static inline int GetMouseWheelVerticalDelta() noexcept + { + return mouseWheelVerticalDelta; + } + + //GET INPUT TIMINGS/////////////////////////////////////////////////////////// + + //Keyboard///////////// + + //How long has this key been held down for + static inline double GetKeyHeldTime(SH_KEYCODE key) noexcept + { + return keysHeldTime[static_cast(key)]; + } + + //How long has this key been released for + static inline double GetKeyReleasedTime(SH_KEYCODE key) noexcept + { + return keysReleasedTime[static_cast(key)]; + } + + //How long has this key been toggled on for + static inline double GetKeyToggleOnTime(SH_KEYCODE key) noexcept + { + return keysToggleOnTime[static_cast(key)]; + } + + //How long has this keen been toggled off for + static inline double GetKeyToggleOffTime(SH_KEYCODE key) noexcept + { + return keysToggleOffTime[static_cast(key)]; + } + + /*------------------------------------------------------------------------*/ + /* Other Functions */ + /*------------------------------------------------------------------------*/ + + //Mouse//////////////////////// + + //Move mouse cursor to a position on the screen + static inline void SetMouseScreenPosition(int x = 0, int y = 0) noexcept + { + SetCursorPos(x, y); + } + + //Move mouse cursor to a position on the active window + static inline void SetMouseWindowPosition(int x = 0, int y = 0) noexcept + { + POINT p{ x, y }; + ClientToScreen(GetActiveWindow(), &p); + SetCursorPos(p.x, p.y); + } + + private: + /*------------------------------------------------------------------------*/ + /* Constants */ + /*------------------------------------------------------------------------*/ + static constexpr size_t MAX_KEYS = UCHAR_MAX + 1; + + /*------------------------------------------------------------------------*/ + /* Data Members */ + /*------------------------------------------------------------------------*/ + + //KEYBOARD AND MOUSE BUTTONS//////////////////////////////////////////////// + + //How many keys are presently being pressed + static unsigned keyCount; + + //Key states of all keys presently + //true for being pressed, false for released + static bool keys[MAX_KEYS]; + + //Key states of all keys in the last frame + //true for being pressed, false for released + static bool keysLast[MAX_KEYS]; + + //Key held durations + //Stops ticking up when released + //Will be reset when held again + static double keysHeldTime[MAX_KEYS]; + + //Key released durations + //Stops ticking up when held + //Will be reset when off again + static double keysReleasedTime[MAX_KEYS]; + + //How many keys are presently being toggled + static unsigned keyToggleCount; + + //Toggle key states of keys (not neccessarily just caps/num/scroll locks) + static bool keysToggle[MAX_KEYS]; + + //Toggle key states of keys in the last frame + static bool keysToggleLast[MAX_KEYS]; + + //Key toggle durations + //Stops ticking up when untoggled + //Will be reset when toggled again + static double keysToggleOnTime[MAX_KEYS]; + + //Key untoggle durations + //Stops ticking up when toggled + //Will be reset when untoggled again + static double keysToggleOffTime[MAX_KEYS]; + + //MOUSE VARIABLES/////////////////////////////////////////////////////////// + + //Present horizontal positioning of the mouse WRT the screen + static int mouseScreenX; + //Present vertical positioning of the mouse WRT the screen + static int mouseScreenY; + + //Horizontal positioning of the mouse WRT screen in last frame + static int mouseScreenXLast; + //Vertical positioning of the mouse WRT screen in the last frame + static int mouseScreenYLast; + + //For polling mouse wheel events, not to be read + static int mouseWheelVerticalDeltaPoll; + //Mouse wheel vertical rotation speed. Positive is rotation AWAY from user + static int mouseWheelVerticalDelta; + + //CONTROLLER VARIABLES////////////////////////////////////////////////////// + + //OTHER VARIABLES/////////////////////////////////////////////////////////// + + //Axis bindings + //X + + //Y + + //Other mappings + + //Buffer + }; +} \ No newline at end of file From c2e948a100ca027017234697b59dc3b1a4009d60 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Fri, 23 Sep 2022 15:48:00 +0800 Subject: [PATCH 181/793] Fixed active state checks in transform system Apparently entity and scene node active states do not sync.... --- .../src/Math/Transform/SHTransformSystem.cpp | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index f61f3e42..8f05f96f 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -66,17 +66,8 @@ namespace SHADE for (const auto* child : node->GetChildren()) { - // Active states of entities should sync with scene nodes - const bool IS_NODE_ACTIVE = child->IsActive(); - - #ifdef _DEBUG - const bool IS_ENTITY_ACTIVE = SHEntityManager::GetEntityByID(child->GetEntityID())->GetActive(); - SHASSERT(IS_NODE_ACTIVE == IS_ENTITY_ACTIVE, "Entity and Node active states are not synced!") - #endif - - // Anything below is inactive - if (!IS_NODE_ACTIVE) - break; + + const bool HAS_TRANSFORM = SHComponentManager::HasComponent(child->GetEntityID()); if (!HAS_TRANSFORM) @@ -84,8 +75,13 @@ namespace SHADE auto* childTransform = SHComponentManager::GetComponent(child->GetEntityID()); - if (childTransform->dirty || HAS_PARENT_CHANGED) - UpdateTransform(*childTransform, NODE_TRANSFORM); + // Only update if node in hierarchy and component are both active + const bool IS_NODE_ACTIVE = child->IsActive(); + if (IS_NODE_ACTIVE && childTransform->isActive) + { + if (childTransform->dirty || HAS_PARENT_CHANGED) + UpdateTransform(*childTransform, NODE_TRANSFORM); + } UpdateEntity(child); From 23f0f9f77e68cf050e58f7de3f84c6c02e3b521f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 23 Sep 2022 16:24:08 +0800 Subject: [PATCH 182/793] Triple buffered the batching buffers --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 177 +++++++++++------- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 22 ++- .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 10 +- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 4 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 14 +- .../MiddleEnd/Batching/SHSuperBatch.h | 6 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 25 +-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 7 +- 9 files changed, 158 insertions(+), 109 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index c2090fc0..1ac783e0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -33,6 +33,9 @@ namespace SHADE { if (!pipeline) throw std::invalid_argument("Attempted to create a SHBatch with an invalid SHPipeline!"); + + // Mark all as dirty + setAllDirtyFlags(); } void SHBatch::Add(const SHRenderable* renderable) @@ -52,6 +55,9 @@ namespace SHADE // Add renderable in subBatch->Renderables.insert(renderable); + + // Mark all as dirty + setAllDirtyFlags(); } void SHBatch::Remove(const SHRenderable* renderable) @@ -67,6 +73,10 @@ namespace SHADE return; subBatch->Renderables.erase(renderable); + + // Mark all as dirty + for (bool& dirt : isDirty) + dirt = true; } void SHBatch::Clear() @@ -81,13 +91,22 @@ namespace SHADE // Clear GPU buffers - drawDataBuffer.Free(); - transformDataBuffer.Free(); - matPropsBuffer.Free(); + for (int i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) + { + drawDataBuffer[i].Free(); + transformDataBuffer[i].Free(); + matPropsBuffer[i].Free(); + } } - void SHBatch::UpdateTransformBuffer() + void SHBatch::UpdateTransformBuffer(uint32_t frameIndex) { + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + { + SHLOG_WARNING("[SHBatch] Attempted to update transform buffers with an invalid frame index."); + return; + } + // Reset Transform Data transformData.clear(); @@ -100,13 +119,19 @@ namespace SHADE } // Transfer to GPU - transformDataBuffer->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); + transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); } - void SHBatch::Build(Handle device) + void SHBatch::Build(Handle device, uint32_t frameIndex) { + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + { + SHLOG_WARNING("[SHBatch] Attempted to update build batch buffers with an invalid frame index."); + return; + } + // No need to build as there are no changes - if (!isDirty) + if (!isDirty[frameIndex]) return; // Count number of elements @@ -116,61 +141,67 @@ namespace SHADE numTotalElements += subBatch.Renderables.size(); } - // Generate CPU buffers - // - Draw data - drawData.reserve(subBatches.size()); - drawData.clear(); - // - Transform data - transformData.reserve(numTotalElements); - transformData.clear(); - // - Material Properties Data - const Handle SHADER_INFO = pipeline->GetPipelineLayout()->GetShaderBlockInterface - ( - SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, - SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, - vk::ShaderStageFlagBits::eFragment - ); - const bool EMPTY_MAT_PROPS = !SHADER_INFO; - Byte singleMatPropSize = 0; - Byte matPropTotalBytes = 0; - if (!EMPTY_MAT_PROPS) + // Generate CPU buffers if there are changes + if (isCPUBuffersDirty) { - singleMatPropSize = SHADER_INFO->GetBytesRequired(); - matPropTotalBytes = drawData.size() * singleMatPropSize; - if (matPropsDataSize < matPropTotalBytes) + // - Draw data + drawData.reserve(subBatches.size()); + drawData.clear(); + // - Transform data + transformData.reserve(numTotalElements); + transformData.clear(); + // - Material Properties Data + const Handle SHADER_INFO = pipeline->GetPipelineLayout()->GetShaderBlockInterface + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + vk::ShaderStageFlagBits::eFragment + ); + const bool EMPTY_MAT_PROPS = !SHADER_INFO; + Byte singleMatPropSize = 0; + Byte matPropTotalBytes = 0; + if (!EMPTY_MAT_PROPS) { - matPropsData.reset(new char[matPropTotalBytes]); - matPropsDataSize = matPropTotalBytes; - } - } - - // Build Sub Batches - uint32_t nextInstanceIndex = 0; - char* propsCurrPtr = matPropsData.get(); - for (auto& subBatch : subBatches) - { - // Create command - drawData.emplace_back(vk::DrawIndexedIndirectCommand - { - .indexCount = subBatch.Mesh->IndexCount, - .instanceCount = static_cast(subBatch.Renderables.size()), - .firstIndex = subBatch.Mesh->FirstIndex, - .vertexOffset = subBatch.Mesh->FirstVertex, - .firstInstance = nextInstanceIndex - }); - - // Fill in buffers (CPU) - for (const SHRenderable* renderable : subBatch.Renderables) - { - // Transform - transformData.emplace_back(renderable->TransformMatrix); - // Material Properties - if (!EMPTY_MAT_PROPS) + singleMatPropSize = SHADER_INFO->GetBytesRequired(); + matPropTotalBytes = drawData.size() * singleMatPropSize; + if (matPropsDataSize < matPropTotalBytes) { - renderable->GetMaterial()->ExportProperties(propsCurrPtr); - propsCurrPtr += singleMatPropSize; + matPropsData.reset(new char[matPropTotalBytes]); + matPropsDataSize = matPropTotalBytes; } } + + // Build Sub Batches + uint32_t nextInstanceIndex = 0; + char* propsCurrPtr = matPropsData.get(); + for (auto& subBatch : subBatches) + { + // Create command + drawData.emplace_back(vk::DrawIndexedIndirectCommand + { + .indexCount = subBatch.Mesh->IndexCount, + .instanceCount = static_cast(subBatch.Renderables.size()), + .firstIndex = subBatch.Mesh->FirstIndex, + .vertexOffset = subBatch.Mesh->FirstVertex, + .firstInstance = nextInstanceIndex + }); + + // Fill in buffers (CPU) + for (const SHRenderable* renderable : subBatch.Renderables) + { + // Transform + transformData.emplace_back(renderable->TransformMatrix); + // Material Properties + if (!EMPTY_MAT_PROPS) + { + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + propsCurrPtr += singleMatPropSize; + } + } + } + + // Successfully update CPU buffers + isCPUBuffersDirty = false; } // Send all buffered data to the GPU buffers @@ -179,36 +210,52 @@ namespace SHADE const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, drawDataBuffer, drawData.data(), DRAW_DATA_BYTES, + device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, BuffUsage::eIndirectBuffer ); // - Transform Buffer const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, transformDataBuffer, transformData.data(), TF_DATA_BYTES, + device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); // - Material Properties Buffer - if (!EMPTY_MAT_PROPS) + if (matPropsData) { SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, matPropsBuffer, matPropsData.get(), static_cast(matPropTotalBytes), + device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), BuffUsage::eStorageBuffer ); } - isDirty = false; + isDirty[frameIndex] = false; } /*---------------------------------------------------------------------------------*/ /* SHBatch - Usage Functions */ /*---------------------------------------------------------------------------------*/ - void SHBatch::Draw(Handle cmdBuffer) + void SHBatch::Draw(Handle cmdBuffer, uint32_t frameIndex) { + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + { + SHLOG_WARNING("[SHBatch] Attempted to draw a batch with an invalid frame index."); + return; + } + cmdBuffer->BindPipeline(pipeline); - cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer, 0); - cmdBuffer->DrawMultiIndirect(drawDataBuffer, static_cast(drawData.size())); + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); + cmdBuffer->DrawMultiIndirect(drawDataBuffer[frameIndex], static_cast(drawData.size())); + } + + /*---------------------------------------------------------------------------------*/ + /* SHBatch - Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void SHBatch::setAllDirtyFlags() + { + for (bool& dirt : isDirty) + dirt = true; + isCPUBuffersDirty = true; } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index f438d6c1..a572adca 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -14,12 +14,14 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include +#include // External Dependencies #include "Graphics/SHVulkanIncludes.h" // Project Includes #include "Resource/Handle.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" #include "Math/SHMatrix.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" namespace SHADE { @@ -71,9 +73,9 @@ namespace SHADE void Add(const SHRenderable* renderable); void Remove(const SHRenderable* renderable); void Clear(); - void UpdateTransformBuffer(); - void Build(Handle device); - void Draw(Handle cmdBuffer); + void UpdateTransformBuffer(uint32_t frameIndex); + void Build(Handle device, uint32_t frameIndex); + void Draw(Handle cmdBuffer, uint32_t frameIndex); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -88,15 +90,21 @@ namespace SHADE Handle pipeline; // Batch Tree std::vector subBatches; - bool isDirty = true; + std::array isDirty; // CPU Buffers std::vector drawData; std::vector transformData; std::unique_ptr matPropsData; Byte matPropsDataSize = 0; + bool isCPUBuffersDirty = true; // GPU Buffers - Handle drawDataBuffer; - Handle transformDataBuffer; - Handle matPropsBuffer; + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> drawDataBuffer; + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> transformDataBuffer; + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> matPropsBuffer; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void setAllDirtyFlags(); }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index ea216ed5..ecd99a20 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -91,12 +91,12 @@ namespace SHADE (*superBatch)->Remove(renderable); } - void SHBatcher::FinaliseBatches(Handle device) + void SHBatcher::FinaliseBatches(Handle device, uint32_t frameIndex) { // Build SuperBatches for (auto& batch : superBatches) { - batch->Build(device); + batch->Build(device, frameIndex); } } @@ -109,11 +109,11 @@ namespace SHADE superBatches.clear(); } - void SHBatcher::UpdateTransformBuffer() - { + void SHBatcher::UpdateTransformBuffer(uint32_t frameIndex) +{ for (auto& batch : superBatches) { - batch->UpdateTransformBuffer(); + batch->UpdateTransformBuffer(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 89dea2eb..b4fff203 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -51,9 +51,9 @@ namespace SHADE void PrepareBatches(); void AddToBatch(SHRenderable const* renderable); void RemoveFromBatch(SHRenderable const* renderable); - void FinaliseBatches(Handle device); + void FinaliseBatches(Handle device, uint32_t frameIndex); void ClearBatches(); - void UpdateTransformBuffer(); + void UpdateTransformBuffer(uint32_t frameIndex); void RegisterSuperBatch(Handle superBatch); void DeregisterSuperBatch(Handle superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 8b7ea619..a259f2cf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -78,29 +78,29 @@ namespace SHADE batches.clear(); } - void SHSuperBatch::UpdateTransformBuffer() - { + void SHSuperBatch::UpdateTransformBuffer(uint32_t frameIndex) +{ for (auto& batch : batches) { - batch.UpdateTransformBuffer(); + batch.UpdateTransformBuffer(frameIndex); } } - void SHSuperBatch::Build(Handle device) noexcept + void SHSuperBatch::Build(Handle device, uint32_t frameIndex) noexcept { // Build all batches for (auto& batch : batches) { - batch.Build(device); + batch.Build(device, frameIndex); } } - void SHSuperBatch::Draw(Handle cmdBuffer) noexcept + void SHSuperBatch::Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept { // Build all batches for (auto& batch : batches) { - batch.Draw(cmdBuffer); + batch.Draw(cmdBuffer, frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index 6151e56e..5379ee61 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -55,9 +55,9 @@ namespace SHADE void Add(const SHRenderable* renderable) noexcept; void Remove(const SHRenderable* renderable) noexcept; void Clear() noexcept; - void UpdateTransformBuffer(); - void Build(Handle device) noexcept; - void Draw(Handle cmdBuffer) noexcept; + void UpdateTransformBuffer(uint32_t frameIndex); + void Build(Handle device, uint32_t frameIndex) noexcept; + void Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index cee00c9b..a68812f8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -306,7 +306,7 @@ namespace SHADE for (auto vp : viewports) for (auto renderer : vp->GetRenderers()) { - renderer->GetRenderGraph()->FinaliseBatch(); + renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame()); } // Resize diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index f53f3e99..ecf9059c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -346,13 +346,13 @@ namespace SHADE inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); } - void SHSubpass::Execute(Handle& commandBuffer) noexcept + void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept { // Ensure correct transforms are provided - superBatch->UpdateTransformBuffer(); + superBatch->UpdateTransformBuffer(frameIndex); // Draw all the batches - superBatch->Draw(commandBuffer); + superBatch->Draw(commandBuffer, frameIndex); // Draw all the exterior draw calls for (auto& drawCall : exteriorDrawCalls) @@ -591,7 +591,7 @@ namespace SHADE for (uint32_t i = 0; i < subpasses.size(); ++i) { - subpasses[i]->Execute(commandBuffer); + subpasses[i]->Execute(commandBuffer, frameIndex); // Go to next subpass if not last subpass if (i != subpasses.size() - 1) @@ -624,14 +624,9 @@ namespace SHADE return pipeline; } - void SHRenderGraphNode::FinaliseBatch() - { - batcher.FinaliseBatches(logicalDeviceHdl); - } - - void SHRenderGraphNode::UpdateBatchTransforms() - { - batcher.UpdateTransformBuffer(); + void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex) +{ + batcher.FinaliseBatches(logicalDeviceHdl, frameIndex); } /***************************************************************************/ @@ -1088,11 +1083,11 @@ namespace SHADE node->Execute(cmdBuffer, frameIndex); } - void SHRenderGraph::FinaliseBatch() - { + void SHRenderGraph::FinaliseBatch(uint32_t frameIndex) +{ for (auto& node : nodes) { - node->FinaliseBatch(); + node->FinaliseBatch(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 16770475..b8c00417 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -137,7 +137,7 @@ namespace SHADE void AddInput(std::string resourceToReference) noexcept; // Runtime functions - void Execute(Handle& commandBuffer) noexcept; + void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; /*-----------------------------------------------------------------------*/ @@ -230,8 +230,7 @@ namespace SHADE // TODO: RemoveSubpass() void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; - void FinaliseBatch(); - void UpdateBatchTransforms(); + void FinaliseBatch(uint32_t frameIndex); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -289,7 +288,7 @@ namespace SHADE Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; void Execute (uint32_t frameIndex, Handle cmdBuffer) noexcept; - void FinaliseBatch(); + void FinaliseBatch(uint32_t frameIndex); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From 77cccd63be66d2e0991c29f5c3d1c0751bc06ff1 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 23 Sep 2022 16:41:44 +0800 Subject: [PATCH 183/793] Renderables now use TransformComponent's matrix --- SHADE_Application/src/Scenes/SBTestScene.cpp | 10 ++------ .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 24 +++++++++++++++++-- .../MiddleEnd/Interface/SHRenderable.cpp | 1 - .../MiddleEnd/Interface/SHRenderable.h | 1 - 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index c642aa67..1c4af3a7 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -45,11 +45,7 @@ namespace Sandbox renderable.Mesh = CUBE_MESH; renderable.SetMaterial(matInst); - // Create transform - auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); - transform.SetLocalPosition(SHVec3{ 0.0f, 0.0f, 2.0f }); - renderable.TransformMatrix = SHMatrix::Translate(0.0f, 0.0f, 2.0f); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testObj), "TestScript"); } @@ -58,11 +54,9 @@ namespace Sandbox { static float rotation = 0.0f; - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); - SHTransform tf; - tf.rotation = SHVec3(rotation, 0.0f, 0.0f); - renderable.TransformMatrix = tf.ComputeTRS(); + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); + transform.SetLocalRotation(rotation, 0.0f, 0.0f); rotation += dt * 10.0f; // Destroy entity if space is pressed diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 1ac783e0..9d496821 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -22,6 +22,8 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "Math/Transform/SHTransformComponent.h" namespace SHADE { @@ -115,7 +117,16 @@ namespace SHADE for (const SHRenderable* renderable : subBatch.Renderables) { // Transform - transformData.emplace_back(renderable->TransformMatrix); + auto transform = SHComponentManager::GetComponent_s(renderable->GetEID()); + if (!transform) + { + SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); + transformData.emplace_back(); + } + else + { + transformData.emplace_back(transform->GetTRS()); + } } // Transfer to GPU @@ -190,7 +201,16 @@ namespace SHADE for (const SHRenderable* renderable : subBatch.Renderables) { // Transform - transformData.emplace_back(renderable->TransformMatrix); + auto transform = SHComponentManager::GetComponent_s(renderable->GetEID()); + if (!transform) + { + SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); + transformData.emplace_back(); + } + else + { + transformData.emplace_back(transform->GetTRS()); + } // Material Properties if (!EMPTY_MAT_PROPS) { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 32a6a99a..5199565c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -92,5 +92,4 @@ namespace SHADE materialChanged = false; oldMaterial = {}; } - } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index 0d48b5cb..3bb7cfda 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -66,7 +66,6 @@ namespace SHADE /* Data Members */ /*-------------------------------------------------------------------------------*/ Handle Mesh; - SHMatrix TransformMatrix; // TODO: Replace with Transform component private: /*-------------------------------------------------------------------------------*/ From f8391d6c9e6bf3ae48bf2b8dbe1e84a06e36c566 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 23 Sep 2022 16:45:06 +0800 Subject: [PATCH 184/793] Modified TestScene space bar input to not destroy the object, only remove scripts --- SHADE_Application/src/Scenes/SBTestScene.cpp | 7 +++++-- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 12 ++++++------ SHADE_Engine/src/Scripting/SHScriptEngine.h | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 1c4af3a7..f5985715 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -47,7 +47,7 @@ namespace Sandbox renderable.SetMaterial(matInst); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(*SHADE::SHEntityManager::GetEntityByID(testObj), "TestScript"); + scriptEngine->AddScript(testObj, "TestScript"); } void SBTestScene::Update(float dt) @@ -61,7 +61,10 @@ namespace Sandbox // Destroy entity if space is pressed if (GetKeyState(VK_SPACE) & 0x8000) - SHADE::SHEntityManager::DestroyEntity(testObj); + { + SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); + scriptEngine->RemoveAllScripts(testObj); + } } void SBTestScene::Render() diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index fada5b70..0c508a34 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -103,17 +103,17 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Script Manipulation Functions */ /*-----------------------------------------------------------------------------------*/ - bool SHScriptEngine::AddScript(const SHEntity& entity, const std::string_view& scriptName) + bool SHScriptEngine::AddScript(EntityID entity, const std::string_view& scriptName) { - return csScriptsAdd(entity.GetEID(), scriptName.data()); + return csScriptsAdd(entity, scriptName.data()); } - void SHScriptEngine::RemoveAllScripts(const SHEntity& entity) + void SHScriptEngine::RemoveAllScripts(EntityID entity) { - csScriptsRemoveAll(entity.GetEID()); + csScriptsRemoveAll(entity); } - void SHScriptEngine::RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy) + void SHScriptEngine::RemoveAllScriptsImmediately(EntityID entity, bool callOnDestroy) { - csScriptsRemoveAllImmediately(entity.GetEID(), callOnDestroy); + csScriptsRemoveAllImmediately(entity, callOnDestroy); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 0994bb5d..08852e90 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -116,14 +116,14 @@ namespace SHADE /// True if successfully added. False otherwise with the error logged to the /// console. /// - bool AddScript(const SHEntity& entity, const std::string_view& scriptName); + bool AddScript(EntityID entity, const std::string_view& scriptName); /// /// Removes all Scripts attached to the specified Entity. Does not do anything /// if the specified Entity is invalid or does not have any Scripts /// attached. /// /// The entity to remove the scripts from. - void RemoveAllScripts(const SHEntity& entity); + void RemoveAllScripts(EntityID entity); /// /// Removes all Scripts attached to the specified Entity. Unlike /// RemoveAllScripts(), this removes all the scripts immediately. @@ -135,7 +135,7 @@ namespace SHADE /// Whether or not to call OnDestroy on the scripts. This is ignored if not in /// play mode. /// - void RemoveAllScriptsImmediately(const SHEntity& entity, bool callOnDestroy); + void RemoveAllScriptsImmediately(EntityID entity, bool callOnDestroy); /*-----------------------------------------------------------------------------*/ /* Script Serialisation Functions */ From 800732706ef7a18dea432d4cbbcff96b971f7a4f Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Fri, 23 Sep 2022 17:42:31 +0800 Subject: [PATCH 185/793] input pch move, init, exit, etc definitions --- .../src/Input/SHInputManagerSystem.cpp | 35 ++++++++++++++++++- SHADE_Engine/src/Input/SHInputManagerSystem.h | 2 +- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp index d5e9bb3f..cbc49d7d 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp @@ -10,6 +10,7 @@ *********************************************************************/ #pragma once +#include #include "SHInputManagerSystem.h" namespace SHADE @@ -37,6 +38,33 @@ namespace SHADE int SHInputManagerSystem::mouseWheelVerticalDelta = 0; int SHInputManagerSystem::mouseWheelVerticalDeltaPoll = 0; + void SHInputManagerSystem::Init() + { + keyCount = 0; + SecureZeroMemory(keys, sizeof(keys)); + SecureZeroMemory(keysLast, sizeof(keysLast)); + SecureZeroMemory(keysHeldTime, sizeof(keysHeldTime)); + SecureZeroMemory(keysReleasedTime, sizeof(keysReleasedTime)); + + keyToggleCount = 0; + SecureZeroMemory(keysToggle, sizeof(keysToggle)); + SecureZeroMemory(keysToggleLast, sizeof(keysToggleLast)); + SecureZeroMemory(keysToggleOnTime, sizeof(keysToggleOnTime)); + SecureZeroMemory(keysToggleOffTime, sizeof(keysToggleOffTime)); + + mouseScreenX = 0; + mouseScreenY = 0; + mouseScreenXLast = 0; + mouseScreenYLast = 0; + mouseWheelVerticalDelta = 0; + mouseWheelVerticalDeltaPoll = 0; + } + + void SHInputManagerSystem::Exit() + { + //No dynamically allocated memory. Nothing to do here. + } + void SHInputManagerSystem::InputManagerRoutine:: FixedExecute(double dt) noexcept { @@ -140,8 +168,13 @@ namespace SHADE { for (size_t i = 0; i < MAX_KEYS; ++i) { - + if (!keys[i] && keysLast[i]) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } } + return false; } } //namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManagerSystem.h index 39c97d6f..6ee73ae9 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.h +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.h @@ -11,7 +11,7 @@ #pragma once //#include -#include "../../SHADE_Managed/src/SHpch.h" +//#include "../../SHADE_Managed/src/SHpch.h" #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" From bb382461115fb4f7d9b4abd160aadfd3edbbb5fa Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 23 Sep 2022 18:49:04 +0800 Subject: [PATCH 186/793] Added stress test code for 20000 objects --- SHADE_Application/src/Scenes/SBTestScene.cpp | 43 ++++++++++++++----- SHADE_Application/src/Scenes/SBTestScene.h | 1 + .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 3 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 2 +- .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 36 ++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 3 +- 6 files changed, 57 insertions(+), 31 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index f5985715..0caf3c7e 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -38,26 +38,49 @@ namespace Sandbox // Create Materials auto matInst = graphicsSystem->AddMaterialInstance(); - // Create entity and add mesh - testObj = SHADE::SHEntityManager::CreateEntity(); - auto& renderable = *SHADE::SHComponentManager::GetComponent_s(testObj); - auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); + // Create Stress Test Objects + static const SHVec3 TEST_OBJ_SCALE = { 0.2f, 0.2f, 0.2f }; + constexpr int NUM_ROWS = 200; + constexpr int NUM_COLS = 100; + static const SHVec3 TEST_OBJ_SPACING = { 1.0f, 1.0f, 1.0f }; + static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ), 0.0f, 0.0f }; + for (int z = 0; z < NUM_ROWS; ++z) + for (int x = 0; x < NUM_COLS; ++x) + { + auto entity = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = CUBE_MESH; - renderable.SetMaterial(matInst); + renderable.Mesh = CUBE_MESH; + renderable.SetMaterial(matInst); + // Set initial positions + transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, 0.0f, z * TEST_OBJ_SPACING.z }); + //transform.SetLocalScale(TEST_OBJ_SCALE); + + stressTestObjects.emplace_back(entity); + } + + // Create blank entity with a script + testObj = SHADE::SHEntityManager::CreateEntity(); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->AddScript(testObj, "TestScript"); } void SBTestScene::Update(float dt) { - static float rotation = 0.0f; + /*static float rotation = 0.0f; - auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); + auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); - transform.SetLocalRotation(rotation, 0.0f, 0.0f); - rotation += dt * 10.0f; + transform.SetLocalRotation(rotation, 0.0f, 0.0f); + rotation += dt * 10.0f;*/ + /*static float rotation = 0.0f; + + auto& transform = *SHADE::SHComponentManager::GetComponent_s(stressTestObjects[0]); + + transform.SetWorldPosition({rotation, 0.0f, 0.0f}); + rotation += dt * 10.0f;*/ // Destroy entity if space is pressed if (GetKeyState(VK_SPACE) & 0x8000) diff --git a/SHADE_Application/src/Scenes/SBTestScene.h b/SHADE_Application/src/Scenes/SBTestScene.h index 81ee3e7b..3a1598d5 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.h +++ b/SHADE_Application/src/Scenes/SBTestScene.h @@ -10,6 +10,7 @@ namespace Sandbox private: EntityID camera; EntityID testObj; + std::vector stressTestObjects; public: virtual void Load(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 9d496821..a68ee7fa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -117,7 +117,7 @@ namespace SHADE for (const SHRenderable* renderable : subBatch.Renderables) { // Transform - auto transform = SHComponentManager::GetComponent_s(renderable->GetEID()); + auto transform = SHComponentManager::GetComponent(renderable->GetEID()); if (!transform) { SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); @@ -211,6 +211,7 @@ namespace SHADE { transformData.emplace_back(transform->GetTRS()); } + // Material Properties if (!EMPTY_MAT_PROPS) { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index a259f2cf..633d40a9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -79,7 +79,7 @@ namespace SHADE } void SHSuperBatch::UpdateTransformBuffer(uint32_t frameIndex) -{ + { for (auto& batch : batches) { batch.UpdateTransformBuffer(frameIndex); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp index 992aff05..4a1117c3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -22,24 +22,24 @@ namespace SHADE void SHCamera::SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up) { SHVec3 view = target - pos; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(right, view); - - viewMatrix = SHMatrix::Identity; - viewMatrix(0, 0) = UP[0]; - viewMatrix(1, 0) = UP[1]; - viewMatrix(2, 0) = UP[2]; - viewMatrix(0, 1) = right[0]; - viewMatrix(1, 1) = right[1]; - viewMatrix(2, 1) = right[2]; - viewMatrix(0, 2) = view[0]; - viewMatrix(1, 2) = view[1]; - viewMatrix(2, 2) = view[2]; - viewMatrix(3, 0) = -UP.Dot(pos); - viewMatrix(3, 1) = -right.Dot(pos); - viewMatrix(3, 2) = -view.Dot(pos); - - isDirty = true; + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(right, view); + + viewMatrix = SHMatrix::Identity; + viewMatrix(0, 0) = UP[0]; + viewMatrix(1, 0) = UP[1]; + viewMatrix(2, 0) = UP[2]; + viewMatrix(0, 1) = right[0]; + viewMatrix(1, 1) = right[1]; + viewMatrix(2, 1) = right[2]; + viewMatrix(0, 2) = view[0]; + viewMatrix(1, 2) = view[1]; + viewMatrix(2, 2) = view[2]; + viewMatrix(3, 0) = -UP.Dot(pos); + viewMatrix(3, 1) = -right.Dot(pos); + viewMatrix(3, 2) = -view.Dot(pos); + + isDirty = true; } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index a68812f8..48f16713 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -114,7 +114,8 @@ namespace SHADE screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); screenCamera->SetOrthographic(static_cast(windowDims.first), static_cast(windowDims.second), 0.01f, 100.0f); worldCamera = resourceManager.Create(); - worldCamera->SetLookAt(SHVec3(1.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 2.0f), SHVec3(0.0f, 1.0f, 0.0f)); + //worldCamera->SetLookAt(SHVec3(1.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 2.0f), SHVec3(0.0f, 1.0f, 0.0f)); + worldCamera->SetLookAt(SHVec3(0.0f, 5.0f, -1.0f), SHVec3(0.0f, 0.0f, 2.0f), SHVec3(0.0f, 1.0f, 0.0f)); worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); // Create Default Viewport From bd54b16e0170834d33b11cd740289f1af7df6acd Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 23 Sep 2022 18:50:40 +0800 Subject: [PATCH 187/793] Ctor for compute pipelines --- .../Graphics/Devices/SHVkLogicalDevice.cpp | 4 +-- .../src/Graphics/Devices/SHVkLogicalDevice.h | 6 ++-- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 2 +- .../src/Graphics/Pipeline/SHVkPipeline.cpp | 35 ++++++++++++++++--- .../src/Graphics/Pipeline/SHVkPipeline.h | 6 ++-- 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 65b0d9ca..5ed17511 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -493,9 +493,9 @@ namespace SHADE */ /***************************************************************************/ - Handle SHVkLogicalDevice::CreatePipeline(Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass, SH_PIPELINE_TYPE type) noexcept + Handle SHVkLogicalDevice::CreateGraphicsPipeline(Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass) noexcept { - return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutHdl, state, renderpassHdl, subpass, type); + return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutHdl, state, renderpassHdl, subpass); } diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 3a27e4b1..8a197ef8 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -21,6 +21,7 @@ #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" #include "Graphics/Images/SHVkImage.h" + namespace SHADE { /*-----------------------------------------------------------------------*/ @@ -171,12 +172,11 @@ namespace SHADE std::string const& shaderName ) noexcept; - Handle CreatePipeline ( + Handle CreateGraphicsPipeline ( Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, - Handle subpass, - SH_PIPELINE_TYPE type + Handle subpass ) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::vector const& subpasses) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index e09a4945..92d832f1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -18,7 +18,7 @@ namespace SHADE auto pipelineLayout = logicalDevice->CreatePipelineLayout(params); // Create the pipeline and configure the default vertex input state - auto newPipeline = logicalDevice->CreatePipeline(pipelineLayout, nullptr, renderpass, subpass, SH_PIPELINE_TYPE::GRAPHICS); + auto newPipeline = logicalDevice->CreateGraphicsPipeline(pipelineLayout, nullptr, renderpass, subpass); newPipeline->GetPipelineState().SetVertexInputState(globalData->GetDefaultViState()); // Actually construct the pipeline diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index 1c47c21a..c03fd2a7 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -179,7 +179,7 @@ namespace SHADE /*! \brief - Non-default ctor. + Non-default ctor for creating graphics pipeline. \param inLogicalDeviceHdl Needed for creation and destruction. @@ -200,14 +200,12 @@ namespace SHADE The subpass that this pipeline will be used in. If state is not nullptr, this parameter is ignored. - \param type - The type of the pipeline. */ /***************************************************************************/ - SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass, SH_PIPELINE_TYPE type) noexcept + SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass) noexcept : pipelineState{ } - , pipelineType {type} + , pipelineType {SH_PIPELINE_TYPE::GRAPHICS} , vkPipeline {VK_NULL_HANDLE} , logicalDeviceHdl{ inLogicalDeviceHdl } , pipelineLayout { inPipelineLayout } @@ -250,6 +248,33 @@ namespace SHADE vkPipeline = VK_NULL_HANDLE; } + /***************************************************************************/ + /*! + + \brief + Just to differentiate between compute and graphics pipeline, we will + have a constructor that takes in less parameters; sufficient for the + compute pipeline to be created. + + \param inLogicalDeviceHdl + \param inPipelineLayout + + \return + + */ + /***************************************************************************/ + SHVkPipeline::SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout) noexcept + : pipelineState{ } + , pipelineType{ SH_PIPELINE_TYPE::COMPUTE } + , vkPipeline{ VK_NULL_HANDLE } + , logicalDeviceHdl{ inLogicalDeviceHdl } + , pipelineLayout{ inPipelineLayout } + , created{ false } + + { + + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index 6edf0e98..fe55a41e 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -51,8 +51,10 @@ namespace SHADE Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, - Handle subpass, - SH_PIPELINE_TYPE type) noexcept; + Handle subpass) noexcept; + + SHVkPipeline(Handle const& inLogicalDeviceHdl, + Handle const& inPipelineLayout) noexcept; SHVkPipeline (SHVkPipeline&& rhs) noexcept; ~SHVkPipeline (void) noexcept; From 187142d5c3e67f4ee403ac9032a6f81f582105f4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 23 Sep 2022 19:57:29 +0800 Subject: [PATCH 188/793] Added Transform Component C# interface --- SHADE_Engine/src/Math/Transform/SHTransform.h | 4 +- SHADE_Managed/src/Components/Transform.cxx | 107 ++++++++++++++++ SHADE_Managed/src/Components/Transform.hxx | 121 ++++++++++++++++++ SHADE_Managed/src/Engine/ECS.cxx | 5 +- SHADE_Managed/src/Engine/ECS.h++ | 10 +- SHADE_Managed/src/Engine/ECS.hxx | 7 +- SHADE_Managed/src/Utility/Convert.cxx | 28 +++- SHADE_Managed/src/Utility/Convert.hxx | 32 +++++ 8 files changed, 297 insertions(+), 17 deletions(-) create mode 100644 SHADE_Managed/src/Components/Transform.cxx create mode 100644 SHADE_Managed/src/Components/Transform.hxx diff --git a/SHADE_Engine/src/Math/Transform/SHTransform.h b/SHADE_Engine/src/Math/Transform/SHTransform.h index 9edd7fdd..c1a0e565 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransform.h +++ b/SHADE_Engine/src/Math/Transform/SHTransform.h @@ -12,7 +12,9 @@ // Project Headers #include "SH_API.h" -#include "Math/SHMath.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/SHMatrix.h" namespace SHADE { diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx new file mode 100644 index 00000000..e065015e --- /dev/null +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -0,0 +1,107 @@ +/************************************************************************************//*! +\file Transform.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 23, 2022 +\brief Contains the definition of the functions of the managed Transform class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Transform.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + Vector3 Transform::LocalPosition::get() + { + return Convert::ToCLI(GetNativeComponent()->GetLocalPosition()); + } + void Transform::LocalPosition::set(Vector3 val) + { + GetNativeComponent()->SetLocalPosition(Convert::ToNative(val)); + } + Vector3 Transform::LocalRotation::get() + { + return Convert::ToCLI(GetNativeComponent()->GetLocalRotation()); + } + void Transform::LocalRotation::set(Vector3 val) + { + GetNativeComponent()->SetLocalPosition(Convert::ToNative(val)); + } + Vector3 Transform::LocalScale::get() + { + return Convert::ToCLI(GetNativeComponent()->GetLocalScale()); + + } + void Transform::LocalScale::set(Vector3 val) + { + GetNativeComponent()->SetLocalScale(Convert::ToNative(val)); + } + Vector3 Transform::GlobalPosition::get() + { + return Convert::ToCLI(GetNativeComponent()->GetWorldPosition()); + } + void Transform::GlobalPosition::set(Vector3 val) + { + GetNativeComponent()->SetWorldPosition(Convert::ToNative(val)); + } + Vector3 Transform::GlobalRotation::get() + { + return Convert::ToCLI(GetNativeComponent()->GetWorldRotation()); + } + void Transform::GlobalRotation::set(Vector3 val) + { + GetNativeComponent()->SetWorldRotation(Convert::ToNative(val)); + } + Vector3 Transform::GlobalScale::get() + { + return Convert::ToCLI(GetNativeComponent()->GetWorldScale()); + + } + void Transform::GlobalScale::set(Vector3 val) + { + GetNativeComponent()->SetWorldScale(Convert::ToNative(val)); + } + Transform^ Transform::Parent::get() + { + auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(owner.GetEntity()); + if (!node) + throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); + + const auto PARENT = node->GetParent(); + return PARENT ? gcnew Transform(PARENT->GetEntityID()) : nullptr; + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Transform::Transform(Entity entity) + : Component(entity) + {} + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + + void Transform::SetParent(Transform^ parent, bool worldPositionStays) + { + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto node = sceneGraph.GetNode(owner.GetEntity()); + if (!node) + throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); + + if (parent) + node->SetParent(sceneGraph.GetNode(parent->owner.GetEntity())); + else + sceneGraph.SetParent(parent->owner.GetEntity(), nullptr); + } +} diff --git a/SHADE_Managed/src/Components/Transform.hxx b/SHADE_Managed/src/Components/Transform.hxx new file mode 100644 index 00000000..9efd2927 --- /dev/null +++ b/SHADE_Managed/src/Components/Transform.hxx @@ -0,0 +1,121 @@ +/************************************************************************************//*! +\file Transform.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 23, 2022 +\brief Contains the definition of the managed Transform class with the + declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +#include "Utility/Convert.hxx" +// External Dependencies +#include "Math/Transform/SHTransformComponent.h" + +namespace SHADE +{ + /// + /// CLR version of the the SHADE Engine's TransformComponent. + /// + public ref class Transform : public Component + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a Transform Component that represents a native Transform component + /// tied to the specified Entity. + /// + /// Entity that this Component will be tied to. + Transform(Entity entity); + + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Local position stored by this Transform. + /// + property Vector3 LocalPosition + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Local Z-axis rotation angle stored by this Transform in Radians. + /// + property Vector3 LocalRotation + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Local scale stored by this Transform. + /// + property Vector3 LocalScale + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Global position stored by this Transform. + /// + property Vector3 GlobalPosition + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Global Z-axis rotation angle stored by this Transform in Radians. + /// + property Vector3 GlobalRotation + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Global scale stored by this Transform. + /// Note that this operation is expensive. + /// + property Vector3 GlobalScale + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Parent Transform that affects this Transform. + /// + property Transform^ Parent + { + Transform^ get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Sets the parent of this Transform component. + /// + /// + /// Entity that contains the Transform component that this Transform will be + /// parented to. If null, unparenting will occur. + /// + /// + /// If true, the transform values of this Transform component will retain their + /// pre-parent-change global transforms. The local transform values will be + /// modified to ensure that the global transforms do not change. + /// + void SetParent(Transform^ parent, bool worldPositionStays); + }; +} + diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 36bef851..4d62f643 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -21,12 +21,14 @@ of DigiPen Institute of Technology is prohibited. #include // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" +#include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneManager.h" #include "Scene/SHSceneGraph.h" #include "Tools/SHLog.h" // Project Headers #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" +#include "Components/Transform.hxx" namespace SHADE { @@ -239,8 +241,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ static ECS::ECS() { - // TODO - // componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/ECS.h++ b/SHADE_Managed/src/Engine/ECS.h++ index daaa859f..f2588294 100644 --- a/SHADE_Managed/src/Engine/ECS.h++ +++ b/SHADE_Managed/src/Engine/ECS.h++ @@ -28,15 +28,8 @@ namespace SHADE template NativeComponent* ECS::GetNativeComponent(Entity entity) { - // Get native Entity - SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); - - // Entity Validity Check - if (nativeEntity == nullptr) - throw gcnew System::InvalidOperationException("Attempted to get native Component to an invalid Entity."); - // Null Check - NativeComponent* component = SHComponentManager::GetComponent_s(nativeEntity); + NativeComponent* component = SHComponentManager::GetComponent_s(entity); if (component == nullptr) throw gcnew System::NullReferenceException("Attempted to get a native Component that does not exist."); @@ -52,7 +45,6 @@ namespace SHADE { ManagedType::typeid, SHComponentManager::AddComponent, - SHComponentManager::EnsureComponent, SHComponentManager::HasComponent, SHComponentManager::RemoveComponent }; diff --git a/SHADE_Managed/src/Engine/ECS.hxx b/SHADE_Managed/src/Engine/ECS.hxx index da73f14c..0563f678 100644 --- a/SHADE_Managed/src/Engine/ECS.hxx +++ b/SHADE_Managed/src/Engine/ECS.hxx @@ -99,8 +99,8 @@ namespace SHADE /// /// Pointer to a function for Component manipulation operations. /// - using ComponentFunc = void(*)(const EntityID&); - using ComponentHasFunc = bool(*)(const EntityID&); + using ComponentFunc = void(*)(EntityID) noexcept; + using ComponentHasFunc = bool(*)(EntityID) noexcept; /// /// Contains a set of Component related data used for resolving operations for /// each Component. @@ -108,11 +108,10 @@ namespace SHADE value struct ComponentSet { public: - System::Type^ Type; + System::Type^ Type; ComponentFunc AddFunction; ComponentHasFunc HasFunction; ComponentFunc RemoveFunction; - }; /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index d222fbb3..661eb3e4 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -17,8 +17,8 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Convert.hxx" // External Dependencies -#include "ECS_Base/Managers/SHEntityManager.h" #include +#include "ECS_Base/Managers/SHEntityManager.h" namespace SHADE { @@ -30,6 +30,32 @@ namespace SHADE return static_cast(entity.GetEID()); } + /*---------------------------------------------------------------------------------*/ + /* Math Conversions */ + /*---------------------------------------------------------------------------------*/ + SHVec3 Convert::ToNative(Vector3 vec) + { + const double X = vec.x; + const double Y = vec.y; + const double Z = vec.z; + return SHVec3(X, Y, Z); + } + Vector3 Convert::ToCLI(const SHVec3& vec) + { + return Vector3(vec.x, vec.y, vec.z); + } + SHVec2 Convert::ToNative(Vector2 vec) + { + const double X = vec.x; + const double Y = vec.y; + return SHVec2(X, Y); + } + + Vector2 Convert::ToCLI(const SHVec2& vec) + { + return Vector2(vec.x, vec.y); + } + /*---------------------------------------------------------------------------------*/ /* String Conversions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index 241e5863..b41ffef4 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -16,8 +16,12 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "ECS_Base/Entity/SHEntity.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" // Project Includes #include "Engine/Entity.hxx" +#include "Math/Vector2.hxx" +#include "Math/Vector3.hxx" namespace SHADE { @@ -43,6 +47,34 @@ namespace SHADE /// Managed representation of the specified Entity. static Entity ToCLI(SHEntity entity); + /*-----------------------------------------------------------------------------*/ + /* Math Conversions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Converts from a managed Vector3 to a native Vector3. + /// + /// The managed Vector3 to convert from. + /// Native copy of a managed Vector3. + static SHVec3 ToNative(Vector3 vec); + /// + /// Converts from a native Vector3 to a managed Vector3. + /// + /// The native Vector3 to convert from. + /// Managed copy of a native Vector3. + static Vector3 ToCLI(const SHVec3& vec); + /// + /// Converts from a managed Vector2 to a native Vector2. + /// + /// The managed Vector2 to convert from. + /// Native copy of a managed Vector2. + static SHVec2 ToNative(Vector2 vec); + /// + /// Converts from a native Vector2 to a managed Vector2. + /// + /// The native Vector2 to convert from. + /// Managed copy of a native Vector2. + static Vector2 ToCLI(const SHVec2& vec); + /*-----------------------------------------------------------------------------*/ /* String Conversions */ /*-----------------------------------------------------------------------------*/ From 759c87e2a19655246630ca8f3773d51d7abf8669 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 24 Sep 2022 02:07:47 +0800 Subject: [PATCH 189/793] Material data on the GPU is now updated when material data changes --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 85 ++++++++++++++++++- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 7 ++ .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 6 +- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 2 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 3 +- .../MiddleEnd/Batching/SHSuperBatch.h | 4 +- .../Interface/SHMaterialInstance.cpp | 5 +- .../MiddleEnd/Interface/SHMaterialInstance.h | 6 +- .../Interface/SHMaterialInstance.hpp | 3 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 4 +- 10 files changed, 109 insertions(+), 16 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index a68ee7fa..4667d5db 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -58,6 +58,9 @@ namespace SHADE // Add renderable in subBatch->Renderables.insert(renderable); + // Also add material instance in + referencedMatInstances.insert(renderable->GetMaterial()); + // Mark all as dirty setAllDirtyFlags(); } @@ -67,8 +70,8 @@ namespace SHADE // Check if we have a SubBatch with the same mesh yet auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) { - return batch.Mesh == renderable->Mesh; - }); + return batch.Mesh == renderable->Mesh; + }); // Attempt to remove if it exists if (subBatch == subBatches.end()) @@ -76,6 +79,22 @@ namespace SHADE subBatch->Renderables.erase(renderable); + // Check if other renderables in subBatches contain the same material instance + bool matUnused = true; + for (const auto& subBatch : subBatches) + for (const auto& rend : subBatch.Renderables) + { + if (rend->GetMaterial() == renderable->GetMaterial()) + { + matUnused = false; + break; + } + } + + // Material is no longer in this library, so we remove it + if (matUnused) + referencedMatInstances.erase(renderable->GetMaterial()); + // Mark all as dirty for (bool& dirt : isDirty) dirt = true; @@ -101,7 +120,63 @@ namespace SHADE } } - void SHBatch::UpdateTransformBuffer(uint32_t frameIndex) + void SHBatch::UpdateMaterialBuffer(uint32_t frameIndex) + { + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + { + SHLOG_WARNING("[SHBatch] Attempted to update transform buffers with an invalid frame index."); + return; + } + + // Check if there are even material properties to update + if (!matPropsData) + return; + + // Check if any materials have changed + bool hasChanged = false; + for (auto material : referencedMatInstances) + { + if (material->HasChanged()) + { + hasChanged = true; + break; + } + } + + // We need to update all the material buffers if the materials have changed + if (hasChanged) + { + for (auto& dirt : matBufferDirty) + dirt = true; + } + + // Check if this frame's buffer is dirty + if (!matBufferDirty[frameIndex]) + return; + + // Build CPI Buffer + uint32_t nextInstanceIndex = 0; + char* propsCurrPtr = matPropsData.get(); + for (auto& subBatch : subBatches) + for (const SHRenderable* renderable : subBatch.Renderables) + { + + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + propsCurrPtr += singleMatPropSize; + } + + // Transfer to GPU + SHVkUtil::EnsureBufferAndCopyHostVisibleData + ( + device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), + vk::BufferUsageFlagBits::eStorageBuffer + ); + + // This frame is updated + matBufferDirty[frameIndex] = false; + } + + void SHBatch::UpdateTransformBuffer(uint32_t frameIndex) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -169,7 +244,6 @@ namespace SHADE vk::ShaderStageFlagBits::eFragment ); const bool EMPTY_MAT_PROPS = !SHADER_INFO; - Byte singleMatPropSize = 0; Byte matPropTotalBytes = 0; if (!EMPTY_MAT_PROPS) { @@ -252,6 +326,9 @@ namespace SHADE } isDirty[frameIndex] = false; + + // Save logical device + this->device = device; } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index a572adca..d40a66ea 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -34,6 +34,7 @@ namespace SHADE class SHMesh; class SHRenderable; class SHVkLogicalDevice; + class SHMaterialInstance; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -73,6 +74,7 @@ namespace SHADE void Add(const SHRenderable* renderable); void Remove(const SHRenderable* renderable); void Clear(); + void UpdateMaterialBuffer(uint32_t frameIndex); void UpdateTransformBuffer(uint32_t frameIndex); void Build(Handle device, uint32_t frameIndex); void Draw(Handle cmdBuffer, uint32_t frameIndex); @@ -86,8 +88,12 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ + // Resources + Handle device; // Batch Properties Handle pipeline; + std::unordered_set> referencedMatInstances; + std::array matBufferDirty; // Batch Tree std::vector subBatches; std::array isDirty; @@ -96,6 +102,7 @@ namespace SHADE std::vector transformData; std::unique_ptr matPropsData; Byte matPropsDataSize = 0; + Byte singleMatPropSize = 0; bool isCPUBuffersDirty = true; // GPU Buffers std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> drawDataBuffer; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index ecd99a20..c4320aac 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -109,11 +109,11 @@ namespace SHADE superBatches.clear(); } - void SHBatcher::UpdateTransformBuffer(uint32_t frameIndex) -{ + void SHBatcher::UpdateBuffers(uint32_t frameIndex) + { for (auto& batch : superBatches) { - batch->UpdateTransformBuffer(frameIndex); + batch->UpdateBuffers(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index b4fff203..985e8e16 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -53,7 +53,7 @@ namespace SHADE void RemoveFromBatch(SHRenderable const* renderable); void FinaliseBatches(Handle device, uint32_t frameIndex); void ClearBatches(); - void UpdateTransformBuffer(uint32_t frameIndex); + void UpdateBuffers(uint32_t frameIndex); void RegisterSuperBatch(Handle superBatch); void DeregisterSuperBatch(Handle superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 633d40a9..b0173399 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -78,10 +78,11 @@ namespace SHADE batches.clear(); } - void SHSuperBatch::UpdateTransformBuffer(uint32_t frameIndex) + void SHSuperBatch::UpdateBuffers(uint32_t frameIndex) { for (auto& batch : batches) { + batch.UpdateMaterialBuffer(frameIndex); batch.UpdateTransformBuffer(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index 5379ee61..a09fc64e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -54,8 +54,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ void Add(const SHRenderable* renderable) noexcept; void Remove(const SHRenderable* renderable) noexcept; - void Clear() noexcept; - void UpdateTransformBuffer(uint32_t frameIndex); + void Clear() noexcept; + void UpdateBuffers(uint32_t frameIndex); void Build(Handle device, uint32_t frameIndex) noexcept; void Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp index 57a91941..0e5a61dd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.cpp @@ -38,7 +38,7 @@ namespace SHADE dataStore.reset(); } - void SHMaterialInstance::ExportProperties(void* dest) const + void SHMaterialInstance::ExportProperties(void* dest) { assert(dataStore != nullptr); @@ -62,6 +62,9 @@ namespace SHADE const auto DATA_OFFSET = variable->offset; memcpy(static_cast(dest) + DATA_OFFSET, dataStore.get() + data.StoredDataOffset, data.DataSize); } + + // Data was exported so unflag + dataWasChanged = false; } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h index db0201b7..5d6c4925 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h @@ -62,12 +62,13 @@ namespace SHADE template const T& GetProperty(const std::string& key) const; void ResetProperties() noexcept; - void ExportProperties(void* dest) const; + void ExportProperties(void* dest); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ /*-----------------------------------------------------------------------------*/ - Handle GetBaseMaterial() const { return baseMaterial; } + Handle GetBaseMaterial() const noexcept { return baseMaterial; } + bool HasChanged() const noexcept { return dataWasChanged; } private: /*-----------------------------------------------------------------------------*/ @@ -77,6 +78,7 @@ namespace SHADE std::vector overrideData; std::unique_ptr dataStore; size_t dataStoreSize = 0; + bool dataWasChanged = false; /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp index 0aead306..b3dc6c3a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.hpp @@ -53,6 +53,9 @@ namespace SHADE // Save the override data information overrideData.emplace_back(std::move(od)); + + // Flag + dataWasChanged = true; } template T& SHMaterialInstance::GetProperty(const std::string& key) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index ecf9059c..6070361f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -348,8 +348,8 @@ namespace SHADE void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept { - // Ensure correct transforms are provided - superBatch->UpdateTransformBuffer(frameIndex); + // Ensure updated transforms and materials are provided + superBatch->UpdateBuffers(frameIndex); // Draw all the batches superBatch->Draw(commandBuffer, frameIndex); From 15f12a2608fc2fa398fe855e803bfc8f9e11d4cc Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 24 Sep 2022 02:13:09 +0800 Subject: [PATCH 190/793] Fixed warnings in SHBatch.cpp --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 4667d5db..7b2ebd49 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -81,8 +81,8 @@ namespace SHADE // Check if other renderables in subBatches contain the same material instance bool matUnused = true; - for (const auto& subBatch : subBatches) - for (const auto& rend : subBatch.Renderables) + for (const auto& sb : subBatches) + for (const auto& rend : sb.Renderables) { if (rend->GetMaterial() == renderable->GetMaterial()) { @@ -134,7 +134,7 @@ namespace SHADE // Check if any materials have changed bool hasChanged = false; - for (auto material : referencedMatInstances) + for (const auto& material : referencedMatInstances) { if (material->HasChanged()) { @@ -155,12 +155,10 @@ namespace SHADE return; // Build CPI Buffer - uint32_t nextInstanceIndex = 0; char* propsCurrPtr = matPropsData.get(); for (auto& subBatch : subBatches) for (const SHRenderable* renderable : subBatch.Renderables) { - renderable->GetMaterial()->ExportProperties(propsCurrPtr); propsCurrPtr += singleMatPropSize; } @@ -205,10 +203,10 @@ namespace SHADE } // Transfer to GPU - transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); + transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); } - void SHBatch::Build(Handle device, uint32_t frameIndex) + void SHBatch::Build(Handle _device, uint32_t frameIndex) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -305,14 +303,14 @@ namespace SHADE const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, + _device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, BuffUsage::eIndirectBuffer ); // - Transform Buffer const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, + _device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); // - Material Properties Buffer @@ -320,7 +318,7 @@ namespace SHADE { SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), + _device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), BuffUsage::eStorageBuffer ); } @@ -328,7 +326,7 @@ namespace SHADE isDirty[frameIndex] = false; // Save logical device - this->device = device; + this->device = _device; } /*---------------------------------------------------------------------------------*/ From 225c247a8582d9de776c9cbb128f2dca2ff0fe66 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 12:59:21 +0800 Subject: [PATCH 191/793] Added missing SDL line back into engine premake --- SHADE_Engine/premake5.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 1c102939..e8a4992b 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -35,6 +35,7 @@ project "SHADE_Engine" "%{IncludeDir.tracy}", "%{IncludeDir.VMA}\\include", "%{IncludeDir.yamlcpp}", + "%{IncludeDir.SDL}\\include", "%{IncludeDir.RTTR}\\include", "%{IncludeDir.reactphysics3d}\\include", "%{IncludeDir.VULKAN}\\include", From cb73a8c5d14b3d8362f9019eb2443c5ec0b347c1 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 13:36:09 +0800 Subject: [PATCH 192/793] Added file list in filesystem --- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 11 +++++++++++ SHADE_Engine/src/Filesystem/SHFileSystem.h | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 5663dadd..16175578 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -80,6 +80,12 @@ namespace SHADE { if (!dirEntry.is_directory()) { + folder->files.emplace_back( + dirEntry.path().filename().string(), + dirEntry.path().string(), + dirEntry.path().extension().string() + ); + continue; } @@ -103,6 +109,11 @@ namespace SHADE } } + FolderPointer SHFileSystem::GetRoot() noexcept + { + return root; + } + FolderPointer SHFileSystem::CreateFolder(FolderPath path, FolderLocation parent, FolderHandle location, FolderName name) noexcept { assert( diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index 9b8b94a2..8df794fd 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -14,12 +14,22 @@ namespace SHADE typedef uint64_t FolderLocation; typedef uint64_t FolderHandle; typedef std::string FolderName; + typedef std::string FileName; typedef std::string FolderPath; + typedef std::string FilePath; + typedef std::string FileExt; typedef SHFolder* FolderPointer; constexpr char FOLDER_BIT_ALLOCATE{ 4 }; constexpr char FOLDER_MAX_DEPTH{ 16 }; + struct SHFile + { + FileName name; + FilePath path; + FileExt ext; + }; + class SHFolder { public: @@ -28,6 +38,7 @@ namespace SHADE FolderHandle id; FolderName name; std::vector subFolders; + std::vector files; bool folded; @@ -45,6 +56,8 @@ namespace SHADE static void StartupFillDirectories(FolderPath path) noexcept; + static FolderPointer GetRoot() noexcept; + private: static FolderPointer root; From a8a2e90c266435602bc5013de13cc9852d379c30 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 13:36:43 +0800 Subject: [PATCH 193/793] SP3-237 Added header data type into mesh asset in preparation for compilation of mesh --- SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h | 11 +++++++++++ SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp | 9 ++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index e2a3c373..8babfa67 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -5,8 +5,19 @@ namespace SHADE { + struct SHMeshAssetHeader + { + uint32_t vertexCount; + uint32_t indexCount; + }; + struct SHMeshAsset { + bool compiled; + bool changed; + + SHMeshAssetHeader header; + std::vector vertexPosition; std::vector texCoords; std::vector vertexTangent; diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 60ae7ed0..c48cc2a5 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -24,7 +24,11 @@ namespace SHADE { (void)scene; - SHMeshAsset result; + SHMeshAsset result + { + .compiled = false, + .changed = false + }; for (size_t i{0}; i < mesh.mNumVertices; ++i) { @@ -74,6 +78,9 @@ namespace SHADE } } + result.header.vertexCount = result.vertexPosition.size(); + result.header.indexCount = result.indices.size(); + return result; } From a907c7c575eeab1357300bbeb2f06ba0d658e52d Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 13:37:12 +0800 Subject: [PATCH 194/793] SP3-103 SP3-104 Testing set up for loading gltf and dds --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 90 +++++++++++++--------- SHADE_Engine/src/Assets/SHAssetManager.h | 3 + 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index c9147a7b..239a2e72 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -29,7 +29,7 @@ namespace SHADE std::unordered_map SHAssetManager::ddsCollection; /**************************************************************************** - * \brief Static function to generate resource ID. + * \brief Static function to generate asset ID. ****************************************************************************/ AssetID SHAssetManager::GenerateAssetID() noexcept { @@ -45,7 +45,7 @@ namespace SHADE } /**************************************************************************** - * \brief Deallocate all memory used by resource data + * \brief Deallocate all memory used by asset data ****************************************************************************/ void SHAssetManager::Unload() noexcept { @@ -76,7 +76,7 @@ namespace SHADE } /**************************************************************************** - * \brief Get record of all resources currently loaded with name and id. + * \brief Get record of all assets currently loaded with name and id. * * \return const& to unordered_map ****************************************************************************/ @@ -86,12 +86,12 @@ namespace SHADE } /**************************************************************************** - * \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM + * \brief Create record for new asset. CAN ONLY CREATE FOR CUSTOM * ASSETS CREATED BY THE ENGINE. * - * \param type of resource - * \param name of resource - * \return resource id generated for new asset + * \param type of asset + * \param name of asset + * \return asset id generated for new asset ****************************************************************************/ AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept { @@ -117,10 +117,10 @@ namespace SHADE } /**************************************************************************** - * \brief Import new resource from outside editor window. + * \brief Import new asset from outside editor window. * * \param path - c style string to full path - * \return resource if generated for new + * \return asset if generated for new ****************************************************************************/ AssetID SHAssetManager::ImportNewAsset(char const* p) noexcept { @@ -145,24 +145,24 @@ namespace SHADE } /**************************************************************************** - * \brief Search through resources folder for new unregistered assets. + * \brief Search through assets folder for new unregistered assets. * Takes in no params and returns nothing. Only updates internally. ****************************************************************************/ void SHAssetManager::RefreshAllAssets() noexcept { std::vector metaFiles; - std::vector resourceFiles; + std::vector AssetFiles; - //SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); - //std::vector resourceFilesVerified; - std::vector resourceFilesNew; + //SHFileSystem::LoadAllFiles(metaFiles, AssetFiles); + //std::vector AssetFilesVerified; + std::vector AssetFilesNew; - for (auto const& resource : resourceFiles) + for (auto const& asset : AssetFiles) { bool found = false; for (auto it {metaFiles.begin()}; it != metaFiles.end(); ++it) { - std::string fileExtCheck{ resource.filename().string() }; + std::string fileExtCheck{ asset.filename().string() }; fileExtCheck += META_EXTENSION; if (it->filename().string() == fileExtCheck) { @@ -172,17 +172,17 @@ namespace SHADE } } - if (!found && IsRecognised(resource.extension().string().c_str())) + if (!found && IsRecognised(asset.extension().string().c_str())) { - resourceFilesNew.push_back(resource); + AssetFilesNew.push_back(asset); } } std::vector newLoad; - newLoad.reserve(resourceFilesNew.size()); + newLoad.reserve(AssetFilesNew.size()); - //TODO: Handle if meta does not match all resources (if meta exist and asset doesnt, vice versa) - for (auto const& file : resourceFilesNew) + //TODO: Handle if meta does not match all assets (if meta exist and asset doesnt, vice versa) + for (auto const& file : AssetFilesNew) { newLoad.push_back(RegisterAssetNew(file)); } @@ -191,11 +191,26 @@ namespace SHADE } + void SHAssetManager::LoadDataTemp(std::string p) noexcept + { + AssetPath path{ p }; + + LoadGLTF( + { + .name {path.filename().string()}, + .id {0}, + .type {AssetType::MESH}, + .path {path}, + .location {0} + } + ); + } + /**************************************************************************** * \param Path for meta data file - * \param Path for resource file + * \param Path for asset file - * \brief Links meta data to resource in registries. Meta data should + * \brief Links meta data to asset in registries. Meta data should * already exist ****************************************************************************/ void SHAssetManager::RegisterAsset(AssetPath const& metaPath, AssetPath const& path) noexcept @@ -206,15 +221,15 @@ namespace SHADE } /**************************************************************************** - * \param Path for resource file + * \param Path for asset file - * \brief Creates new meta data for new resource. + * \brief Creates new meta data for new asset. ****************************************************************************/ - SHAsset SHAssetManager::RegisterAssetNew(AssetPath const& resource) noexcept + SHAsset SHAssetManager::RegisterAssetNew(AssetPath const& asset) noexcept { SHAsset meta; meta.id = GenerateAssetID(); - meta.type = SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string()); + meta.type = SHAssetMetaHandler::GetTypeFromExtension(asset.extension().string()); assetCollection.push_back(meta); @@ -249,7 +264,7 @@ namespace SHADE } /**************************************************************************** - * \brief Load all resources that are in the folder + * \brief Load all assets that are in the folder ****************************************************************************/ void SHAssetManager::Load() noexcept { @@ -258,7 +273,7 @@ namespace SHADE } /**************************************************************************** - * \brief Load resource data into memory + * \brief Load asset data into memory ****************************************************************************/ void SHAssetManager::LoadAllData() noexcept { @@ -273,20 +288,21 @@ namespace SHADE } /**************************************************************************** - * \brief Retrieve all resource files and meta files from filesystem + * \brief Retrieve all asset files and meta files from filesystem ****************************************************************************/ void SHAssetManager::RetrieveAssets() noexcept { std::vector metaFiles; - std::vector resourceFiles; + std::vector AssetFiles; //TODO: Write new function for file manager to loop through all files - //SHFileSystem::LoadAllFiles(metaFiles, resourceFiles); + SHFileSystem::StartupFillDirectories(ASSET_ROOT); + FolderPointer rootFolder = SHFileSystem::GetRoot(); for (auto const& meta : metaFiles) { - for (std::vector::const_iterator it{ resourceFiles.cbegin() }; - it != resourceFiles.cend(); + for (std::vector::const_iterator it{ AssetFiles.cbegin() }; + it != AssetFiles.cend(); ++it) { // Asset exists for meta file @@ -295,14 +311,14 @@ namespace SHADE if (meta.filename().string() == fileExtCheck) { RegisterAsset(meta, *it); - resourceFiles.erase(it); + AssetFiles.erase(it); break; } } } - //TODO: Handle if meta does not match all resources (if meta exist and asset doesnt, vice versa) - for (auto const& file : resourceFiles) + //TODO: Handle if meta does not match all assets (if meta exist and asset doesnt, vice versa) + for (auto const& file : AssetFiles) { if (IsRecognised(file.extension().string().c_str())) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 8cef4fed..acd89454 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -76,6 +76,9 @@ namespace SHADE static void RefreshAllAssets() noexcept; // -------------------------------------------------------------------------/ + //TODO: TEMPORARY FOR TESTING GLTF & DDS + static void LoadDataTemp(std::string path) noexcept; + private: /**************************************************************************** * \brief Load resource data into memory From 78a20173e005e9894e4c187dcfe2fb047c3aa1b9 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 16:07:26 +0800 Subject: [PATCH 195/793] Changed AssetType underlying type Added mesh name to mesh asset object Added in static token for LoadGLTF function Fixed warning in GetTypeFromExtension --- SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h | 2 ++ SHADE_Engine/src/Assets/SHAssetMacros.h | 9 +++++---- SHADE_Engine/src/Assets/SHAssetManager.h | 4 ++-- SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp | 2 ++ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index 8babfa67..a927d54b 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -18,6 +18,8 @@ namespace SHADE SHMeshAssetHeader header; + std::string meshName; + std::vector vertexPosition; std::vector texCoords; std::vector vertexTangent; diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 0b82a0f0..4a90cd58 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -40,10 +40,10 @@ typedef FMOD::Sound* SHSound; #define ASSET_META_VER "1.0" // Asset type enum -enum class AssetType : int +enum class AssetType : uint8_t { - INVALID = -1, - AUDIO = 0, + INVALID = 0, + AUDIO = 1, SHADER, MATERIAL, IMAGE, @@ -52,7 +52,8 @@ enum class AssetType : int SCRIPT, SCENE, PREFAB, - AUDIO_WAV + AUDIO_WAV, + DDS }; //Directory diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index acd89454..99ad602b 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -30,7 +30,7 @@ namespace SHADE /**************************************************************************** * \brief Static function to generate resource ID. ****************************************************************************/ - static AssetID GenerateAssetID() noexcept; + static AssetID GenerateAssetID(AssetType type) noexcept; static AssetPath GenerateLocalPath(AssetPath path) noexcept; @@ -121,7 +121,7 @@ namespace SHADE static bool IsRecognised(char const*) noexcept; // Specialised load calls - void LoadGLTF(SHAsset asset) noexcept; + static void LoadGLTF(SHAsset asset) noexcept; static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index d9cc73e1..aabb0dc0 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -42,6 +42,8 @@ namespace SHADE return static_cast(i); } } + + return AssetType::INVALID; } /**************************************************************************** From a39230ce42033c83d202b71b1808fd489c558d06 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 16:07:51 +0800 Subject: [PATCH 196/793] More setting up for testing of gltf loading --- .../src/Assets/Libraries/SHMeshLoader.cpp | 9 +++--- SHADE_Engine/src/Assets/SHAssetManager.cpp | 28 +++++++++++++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index c48cc2a5..6f50d4dc 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -25,10 +25,11 @@ namespace SHADE (void)scene; SHMeshAsset result - { - .compiled = false, - .changed = false - }; + { + .compiled { false}, + .changed { false }, + .meshName { mesh.mName.C_Str() } + }; for (size_t i{0}; i < mesh.mNumVertices; ++i) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 239a2e72..b5d701db 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -31,15 +31,19 @@ namespace SHADE /**************************************************************************** * \brief Static function to generate asset ID. ****************************************************************************/ - AssetID SHAssetManager::GenerateAssetID() noexcept + AssetID SHAssetManager::GenerateAssetID(AssetType type) noexcept { std::default_random_engine randEngine{ static_cast(std::chrono::system_clock::now().time_since_epoch().count()) }; std::mt19937 idGen{ randEngine() }; - AssetID result{ idGen() }; + AssetID result{ static_cast(type) << 24}; + AssetID unique{ idGen() & ((1 << 24) - 1) }; + + result |= unique; + while (result == 0) { - result = idGen(); + result = GenerateAssetID(type); } return result; } @@ -95,7 +99,7 @@ namespace SHADE ****************************************************************************/ AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept { - AssetID id{ GenerateAssetID() }; + AssetID id{ GenerateAssetID(type) }; SHAsset meta; meta.id = id; meta.type = type; @@ -204,6 +208,8 @@ namespace SHADE .location {0} } ); + + SHLOG_INFO("Loaded meshes\n"); } /**************************************************************************** @@ -228,8 +234,8 @@ namespace SHADE SHAsset SHAssetManager::RegisterAssetNew(AssetPath const& asset) noexcept { SHAsset meta; - meta.id = GenerateAssetID(); meta.type = SHAssetMetaHandler::GetTypeFromExtension(asset.extension().string()); + meta.id = GenerateAssetID(meta.type); assetCollection.push_back(meta); @@ -260,7 +266,17 @@ namespace SHADE SHDDSLoader::LoadImageAsset(imagePaths, images); //TODO Recognise new meshes as asset as well and write mesh into binary - //TODO + //TODO + + for (auto const& mesh : meshes) + { + meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh); + } + + for (auto const& image : images) + { + ddsCollection.emplace(GenerateAssetID(AssetType::DDS), image); + } } /**************************************************************************** From d7b5ae9f024254dd2bcaaca29cb4bd15f2c44439 Mon Sep 17 00:00:00 2001 From: Glence Date: Sat, 24 Sep 2022 19:13:23 +0800 Subject: [PATCH 197/793] audiosystem base level done along with its components --- SHADE_Application/premake5.lua | 3 +- .../src/Application/SBApplication.cpp | 8 ++ .../AudioSystem/SHAudioListenerComponent.cpp | 18 ++--- .../AudioSystem/SHAudioListenerComponent.h | 20 ++--- .../AudioSystem/SHAudioSourceComponent.cpp | 8 +- .../src/AudioSystem/SHAudioSourceComponent.h | 4 +- .../src/AudioSystem/SHAudioSystem.cpp | 76 ++++++++++--------- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 20 +++-- 8 files changed, 92 insertions(+), 65 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 50bd41b2..7e3675aa 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -33,7 +33,8 @@ project "SHADE_Application" "%{IncludeDir.spdlog}/include", "%{IncludeDir.VULKAN}/include", "%{IncludeDir.VMA}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", + "%{IncludeDir.fmod}/include" } externalwarnings "Off" diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 938b0b57..e689cabd 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -23,6 +23,9 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformSystem.h" +#include "AudioSystem/SHAudioSystem.h" +#include "AudioSystem/SHAudioSourceComponent.h" +#include "AudioSystem/SHAudioListenerComponent.h" #include "Scenes/SBTestScene.h" @@ -51,6 +54,7 @@ namespace Sandbox SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); + SHADE::SHSystemManager::CreateSystem(); // Create Routines SHADE::SHSystemManager::RegisterRoutine(); @@ -69,6 +73,10 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + // Set up graphics system and windows graphicsSystem->SetWindow(&window); sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp index c496ff07..342d4702 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp @@ -10,46 +10,46 @@ #include "SHpch.h" #include "SHAudioListenerComponent.h" -#include "ECS_Base/System/SHSystemManager.h" +//#include "ECS_Base/System/SHSystemManager.h" namespace SHADE { - const SHMathVec3f SHAudioListenerComponent::GetPos() const + const SHVec3 SHAudioListenerComponent::GetPos() const { return pos; } - const SHMathVec3f SHAudioListenerComponent::GetVel() const + const SHVec3 SHAudioListenerComponent::GetVel() const { return vel; } - const SHMathVec3f SHAudioListenerComponent::GetForward() const + const SHVec3 SHAudioListenerComponent::GetForward() const { return forward; } - const SHMathVec3f SHAudioListenerComponent::GetUp() const + const SHVec3 SHAudioListenerComponent::GetUp() const { return up; } - void SHAudioListenerComponent::SetPos(SHMathVec3f p) + void SHAudioListenerComponent::SetPos(SHVec3 p) { pos = p; } - void SHAudioListenerComponent::SetVel(SHMathVec3f v) + void SHAudioListenerComponent::SetVel(SHVec3 v) { vel = v; } - void SHAudioListenerComponent::SetForward(SHMathVec3f f) + void SHAudioListenerComponent::SetForward(SHVec3 f) { forward = f; } - void SHAudioListenerComponent::SetUp(SHMathVec3f u) + void SHAudioListenerComponent::SetUp(SHVec3 u) { up = u; } diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h index 4b024e79..d0e39bdc 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h @@ -11,7 +11,7 @@ #pragma once #include "ECS_Base/Components/SHComponent.h" -#include "Math/SHMathVec.h" +#include "Math/SHMath.h" namespace SHADE { @@ -23,20 +23,20 @@ namespace SHADE SHAudioListenerComponent() = default; ~SHAudioListenerComponent() = default; - const SHMathVec3f GetPos() const; - const SHMathVec3f GetVel() const; - const SHMathVec3f GetForward() const; - const SHMathVec3f GetUp() const; + const SHVec3 GetPos() const; + const SHVec3 GetVel() const; + const SHVec3 GetForward() const; + const SHVec3 GetUp() const; - void SetPos(SHMathVec3f p); - void SetVel(SHMathVec3f v); - void SetForward(SHMathVec3f f); - void SetUp(SHMathVec3f u); + void SetPos(SHVec3 p); + void SetVel(SHVec3 v); + void SetForward(SHVec3 f); + void SetUp(SHVec3 u); private: - SHMathVec3f pos{}, vel{}, forward{}, up{ 0.f,1.f,0.f }; + SHVec3 pos{}, vel{}, forward{}, up{ 0.f,1.f,0.f }; }; }//namespace SHADE diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp index 9d216439..891ea1e1 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp @@ -20,9 +20,9 @@ namespace SHADE * * @param index where the sound is in the index */ - void SHAudioSourceComponent::PlaySoundSFX(EntityID id, bool loop, bool spatial) + void SHAudioSourceComponent::PlaySoundSFX(EntityID id, bool loop, bool spatial, float min , float max ) { - SHSystemManager::GetSystem()->PlaySFX(id, GetEID(),loop,spatial); + SHSystemManager::GetSystem()->PlaySFX(id, GetEID(),loop,spatial, min, max); } //void SHAudioSourceComponent::PlayOneShot(const char* path, bool isSFX, bool spatial) @@ -46,9 +46,9 @@ namespace SHADE // } //} - void SHAudioSourceComponent::PlaySoundBGM(EntityID id, bool loop, bool spatial) + void SHAudioSourceComponent::PlaySoundBGM(EntityID id, bool loop, bool spatial, float min, float max) { - SHSystemManager::GetSystem()->PlayBGM(id, GetEID(), loop, spatial); + SHSystemManager::GetSystem()->PlayBGM(id, GetEID(), loop, spatial, min, max); } /** diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h index 98459b7e..987dc3d4 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.h @@ -35,9 +35,9 @@ namespace SHADE * * @param index where the sound is in the index */ - void PlaySoundSFX(EntityID id, bool loop = false, bool spatial = false); + void PlaySoundSFX(EntityID id, bool loop = false, bool spatial = false, float min = 5.0f, float max = 1000.f); - void PlaySoundBGM(EntityID id, bool loop = false, bool spatial = false); + void PlaySoundBGM(EntityID id, bool loop = false, bool spatial = false, float min = 5.0f, float max = 1000.f); /** * @brief Stop the sound diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 43301457..c0ad46cd 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -3,27 +3,25 @@ #include "SHAudioSystem.h" #include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" #include "ECS_Base/Managers/SHEntityManager.h" #include -//#include "Components/SHAudioListenerComponent.h" -//#include "Components/SHAudioSourceComponent.h" +#include "AudioSystem/SHAudioListenerComponent.h" +#include "AudioSystem/SHAudioSourceComponent.h" //#include "ECS_Base/System/SHComponentManager.h" //#include "Resource Manager/SHResourceManager.h" #include "Math/Transform/SHTransformComponent.h" #pragma warning(push) #pragma warning(disable:26812) //disable warning about preference of enum class over enum as ImGuizmo uses enums -//#include "fmod_errors.h" -//#include "fmod.hpp" -//#include "fmod_studio.hpp" #include #include #include namespace SHADE { SHAudioSystem::SHAudioSystem() - : system(nullptr) + : fmodStudioSystem(nullptr) , extraDriverData(nullptr) , soundList() , bgmChannelGroup(nullptr) @@ -38,7 +36,7 @@ namespace SHADE , speakerMode(FMOD_SPEAKERMODE_5POINT1) , paused(false) { - result = FMOD::Studio::System::create(&system); + result = FMOD::Studio::System::create(&fmodStudioSystem); ErrorCheck(); } @@ -49,11 +47,11 @@ namespace SHADE void SHADE::SHAudioSystem::Init() { - //SHComponentManager::CreateComponentSparseSet(); - //SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); denseListener = &SHComponentManager::GetDense(); - system->getCoreSystem(&coreSystem); + fmodStudioSystem->getCoreSystem(&fmodSystem); //result = coreSystem->getVersion(&version); //ErrorCheck(); //if (version < FMOD_VERSION) @@ -62,18 +60,18 @@ namespace SHADE // std::cerr << "FMOD version mismatch." << std::endl; //} - result = system->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL, extraDriverData); + result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL, extraDriverData); ErrorCheck(); - coreSystem->setSoftwareFormat(0, speakerMode, 0); + fmodSystem->setSoftwareFormat(0, speakerMode, 0); - result = coreSystem->createChannelGroup("SFX", &sfxChannelGroup); + result = fmodSystem->createChannelGroup("SFX", &sfxChannelGroup); ErrorCheck(); - result = coreSystem->createChannelGroup("BGM", &bgmChannelGroup); + result = fmodSystem->createChannelGroup("BGM", &bgmChannelGroup); ErrorCheck(); - result = coreSystem->getMasterChannelGroup(&masterGroup); + result = fmodSystem->getMasterChannelGroup(&masterGroup); ErrorCheck(); result = masterGroup->addGroup(bgmChannelGroup); @@ -87,7 +85,7 @@ namespace SHADE sfxChannelGroup->setVolume(sfxVolume); masterGroup->setVolume(masterVolume); - SHResourceManager::LoadAllAudio(system, soundList); + //SHResourceManager::LoadAllAudio(system, soundList); //TODO: Move to SHResourceManager (LoadAllAudio to load all .bank files and store SHBanks in bankMap) //result = system->loadBankFile("resources/audio/banks/Master.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank); @@ -110,23 +108,33 @@ namespace SHADE void SHADE::SHAudioSystem::Run(float dt) { static_cast(dt); - system->update(); + fmodStudioSystem->update(); if (!denseListener->empty()) { SHAudioListenerComponent& listener = denseListener->at(0); SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); - listener.SetPos(listenerTransform->GetLocalPosition()); - listener.SetForward({ (listenerTransform->GetScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); - FMOD_VECTOR pos = { listener.pos[0] ,listener.pos[1] ,0.f }; - FMOD_VECTOR forward = { listener.forward[0] ,listener.forward[1] ,listener.forward[2] }; - FMOD_VECTOR up = { listener.up[0] ,listener.up[1] ,listener.up[2] }; - coreSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); + if (listenerTransform) + { + listener.SetPos(listenerTransform->GetLocalPosition()); + listener.SetForward({ (listenerTransform->GetLocalScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); + FMOD_VECTOR pos = { listener.pos[0] ,listener.pos[1] ,0.f }; + FMOD_VECTOR forward = { listener.forward[0] ,listener.forward[1] ,listener.forward[2] }; + FMOD_VECTOR up = { listener.up[0] ,listener.up[1] ,listener.up[2] }; + fmodSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); + } } //int channels; //system->getChannelsPlaying(&channels); //std::cout << "ACTIVE CHANNELS: " << channels << std::endl; } + SHAudioSystem::AudioRoutine::AudioRoutine() + : SHSystemRoutine("Audio Routine", false) {} + void SHAudioSystem::AudioRoutine::Execute(double dt) noexcept + { + reinterpret_cast(system)->Run(dt); + } + void SHADE::SHAudioSystem::Exit() { for (auto& event : eventMap) @@ -161,7 +169,7 @@ namespace SHADE if (system) { - result = system->release(); + result = fmodStudioSystem->release(); ErrorCheck(); } } @@ -209,7 +217,7 @@ namespace SHADE } } - void SHAudioSystem::PlaySFX(ResourceID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f) + void SHAudioSystem::PlaySFX(EntityID id, EntityID eid, const bool& loop, const bool& spatial, float min, float max) { SHSound sound = soundList[id]; int index = GetAvailableChannelIndex(); @@ -219,7 +227,7 @@ namespace SHADE mode |= (loop ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF); mode |= (spatial ? FMOD_3D : FMOD_2D); sound->setMode(mode); - result = coreSystem->playSound(sound, sfxChannelGroup, false, &audioChannels[index]); + result = fmodSystem->playSound(sound, sfxChannelGroup, false, &audioChannels[index]); if (spatial && SHComponentManager::HasComponent(eid)) { SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid); @@ -232,7 +240,7 @@ namespace SHADE } } - void SHAudioSystem::PlayBGM(ResourceID id, EntityID eid, const bool& loop, const bool& spatial, float min = 5.0f, float max = 1000.0f) + void SHAudioSystem::PlayBGM(EntityID id, EntityID eid, const bool& loop, const bool& spatial, float min, float max) { SHSound sound = soundList[id]; int index = GetAvailableChannelIndex(); @@ -242,7 +250,7 @@ namespace SHADE mode |= (loop ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF); mode |= (spatial ? FMOD_3D : FMOD_2D); sound->setMode(mode); - result = coreSystem->playSound(sound, bgmChannelGroup, false, &audioChannels[index]); + result = fmodSystem->playSound(sound, bgmChannelGroup, false, &audioChannels[index]); if (spatial && SHComponentManager::HasComponent(eid)) { SHTransformComponent* audioTransform = SHComponentManager::GetComponent_s(eid); @@ -255,7 +263,7 @@ namespace SHADE } } - void SHAudioSystem::SetMute(ResourceID id, bool mute) + void SHAudioSystem::SetMute(EntityID id, bool mute) { SHSound sound; for (auto& channel : audioChannels) @@ -268,7 +276,7 @@ namespace SHADE } } - void SHAudioSystem::StopSound(ResourceID id) + void SHAudioSystem::StopSound(EntityID id) { SHSound sound; for (auto& channel : audioChannels) @@ -295,7 +303,7 @@ namespace SHADE { FMOD_GUID guid; FMOD::Studio::EventDescription* event; - result = system->getEvent(path, &event); + result = fmodStudioSystem->getEvent(path, &event); ErrorCheck(); if (result == FMOD_OK) { @@ -486,7 +494,7 @@ namespace SHADE if (!instance) return; instance->start(); - auto audioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + auto audioSystem = SHSystemManager::GetSystem(); instance->setVolume(audioSystem->GetMasterVolume() * (isSfx ? audioSystem->GetSfxVolume() : audioSystem->GetBgmVolume())); } @@ -499,12 +507,12 @@ namespace SHADE attributes.forward.z = 1.0f; attributes.up.y = 1.0f; - SHVec3 listenerPos = dynamic_cast(SHSystemManager::GetSystem("Audio"))->GetListenerPosition(); + auto audioSystem = SHSystemManager::GetSystem(); + SHVec3 listenerPos = audioSystem->GetListenerPosition(); attributes.position.x = position[0]; attributes.position.y = position[1]; attributes.position.z = listenerPos[2]; instance->set3DAttributes(&attributes); - auto audioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); instance->setVolume(audioSystem->GetMasterVolume() * (isSfx ? audioSystem->GetSfxVolume() : audioSystem->GetBgmVolume())); } diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index f459d57c..5fc29b7c 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -4,11 +4,13 @@ #include #include #include -#include #include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHSystemRoutine.h" #include "ECS_Base/SHECSMacros.h" #include "Math/SHMath.h" #include +#include +#include "SH_API.h" #define AUDIO_SYS_MAX_CHANNELS 1024 namespace SHADE @@ -17,7 +19,9 @@ namespace SHADE typedef FMOD::Studio::Bank* SHBank; class SHAudioListenerComponent; + typedef uint64_t AudioClipID; + class AudioClip { public: @@ -39,7 +43,7 @@ namespace SHADE AudioClipID id; }; - class SHAudioSystem : public SHSystem + class SH_API SHAudioSystem : public SHSystem { public: SHAudioSystem(); @@ -47,6 +51,12 @@ namespace SHADE void Init(); void Run(float dt); + class SH_API AudioRoutine final : public SHSystemRoutine + { + public: + AudioRoutine(); + void Execute(double dt) noexcept override final; + }; void Exit(); int GetAvailableChannelIndex(); @@ -71,12 +81,12 @@ namespace SHADE void SetPaused(bool pause); bool GetPaused() const; SHVec3 GetListenerPosition(); - void LoadBank(const char* path); + //void LoadBank(const char* path); private: + FMOD::Studio::System* fmodStudioSystem; + FMOD::System* fmodSystem; bool paused; void ErrorCheck() const; - FMOD::Studio::System* system; - FMOD::System* coreSystem; void* extraDriverData; std::unordered_map soundList; From 18eca1897eedecf22b3157bb6aa6393673d74c4f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 24 Sep 2022 22:52:42 +0800 Subject: [PATCH 198/793] Added in post build command to copy assimp dll Added in SH_API to asset manager class --- SHADE_Application/premake5.lua | 3 ++- SHADE_Engine/premake5.lua | 8 +++++++- SHADE_Engine/src/Assets/SHAssetManager.h | 14 +++----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 50bd41b2..2d214d92 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -33,7 +33,8 @@ project "SHADE_Application" "%{IncludeDir.spdlog}/include", "%{IncludeDir.VULKAN}/include", "%{IncludeDir.VMA}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", + "%{IncludeDir.tinyddsloader}" } externalwarnings "Off" diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index e8a4992b..842cf00a 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -103,9 +103,15 @@ project "SHADE_Engine" { "xcopy /s /r /y /q \"%{IncludeDir.spdlog}\\bin\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.SDL}\\lib\\SDL2.dll\" \"$(OutDir)\"", - "xcopy /s /r /y /q \"%{IncludeDir.dotnet}\\bin\" \"$(OutDir)\"" + "xcopy /s /r /y /q \"%{IncludeDir.dotnet}\\bin\" \"$(OutDir)\"" } + filter "configurations:Debug" + postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\""} + + filter "configurations:Release" + postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + warnings 'Extra' filter "configurations:Debug" diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 99ad602b..f9ebe6f3 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -8,23 +8,17 @@ * or disclosure of this file or its contents without the prior * written consent of Digipen Institute of Technology is prohibited. ******************************************************************************/ -#ifndef SH_RESOURCE_MANAGER_H -#define SH_RESOURCE_MANAGER_H - -#include -#include -#include +#pragma once #include "tinyddsloader.h" #include "SHAsset.h" #include "Asset Types/SHMeshAsset.h" #include "Asset Types/SHDDSAsset.h" - -struct _MonoMethod; +#include "SH_API.h" namespace SHADE { - class SHAssetManager + class SH_API SHAssetManager { public: /**************************************************************************** @@ -134,5 +128,3 @@ namespace SHADE static std::unordered_map ddsCollection; }; } - -#endif // !SH_RESOURCE_MANAGER_H From a0a57e7c29f44e3a018fbc836fe4f81b86bd79b1 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 25 Sep 2022 00:13:17 +0800 Subject: [PATCH 199/793] Added test assets Test line to call asset manager temporary load --- Assets/RaccoonBag_Color_Ver4.dds | Bin 0 -> 1398256 bytes Assets/RaccoonPreTexturedVer1_Base9.dds | Bin 0 -> 349680 bytes Assets/racoon.bin | Bin 0 -> 425120 bytes Assets/racoon.fbx | Bin 0 -> 713836 bytes Assets/racoon.gltf | 5027 +++++++++++++++++ .../src/Application/SBApplication.cpp | 4 + 6 files changed, 5031 insertions(+) create mode 100644 Assets/RaccoonBag_Color_Ver4.dds create mode 100644 Assets/RaccoonPreTexturedVer1_Base9.dds create mode 100644 Assets/racoon.bin create mode 100644 Assets/racoon.fbx create mode 100644 Assets/racoon.gltf diff --git a/Assets/RaccoonBag_Color_Ver4.dds b/Assets/RaccoonBag_Color_Ver4.dds new file mode 100644 index 0000000000000000000000000000000000000000..a229bc003901f51edcc8c3255bdc3e4eaf958909 GIT binary patch literal 1398256 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

    Y$&tmI=^!~WT@xcD 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

    j-aL#;@tg#qnHMywW(47cuV>um8@T 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 O(AQ;sUC!t^@c#g{ro_tt literal 0 HcmV?d00001 diff --git a/Assets/racoon.fbx b/Assets/racoon.fbx new file mode 100644 index 0000000000000000000000000000000000000000..88320648e54cb29b0bc135888bec9b936e91953d GIT binary patch literal 713836 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%0Dga@&SOf#U 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%0D?yz#WoN|Y!lS+rn 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 RJm!lBcaz+Vnv_5B{{b&sbnXBE literal 0 HcmV?d00001 diff --git a/Assets/racoon.gltf b/Assets/racoon.gltf new file mode 100644 index 00000000..2bdf5e38 --- /dev/null +++ b/Assets/racoon.gltf @@ -0,0 +1,5027 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.3.27", + "version" : "2.0" + }, + "extensionsUsed" : [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 55 + ] + } + ], + "nodes" : [ + { + "name" : "L_Toe_end", + "rotation" : [ + -1.304514398725587e-07, + -4.8278069232242024e-14, + -3.113858042524953e-07, + 1 + ], + "translation" : [ + 2.9270432744255004e-09, + 0.02392714098095894, + 1.3476908478082805e-10 + ] + }, + { + "children" : [ + 0 + ], + "name" : "L_Toe", + "rotation" : [ + 0.32702386379241943, + 1.1310142156162328e-07, + 1.641405731334089e-07, + 0.945016086101532 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + -8.650776095464607e-09, + 0.03380582109093666, + -2.448857117087755e-09 + ] + }, + { + "children" : [ + 1 + ], + "name" : "L_Feet", + "rotation" : [ + 0.516292929649353, + -0.020581310614943504, + -0.05452270060777664, + 0.854426920413971 + ], + "translation" : [ + 1.2865877252465907e-09, + 0.06353945285081863, + 2.6193447411060333e-10 + ] + }, + { + "children" : [ + 2 + ], + "name" : "L_Shin", + "rotation" : [ + -0.054226718842983246, + 0.00034972387948073447, + -0.0027083493769168854, + 0.9985249042510986 + ], + "scale" : [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation" : [ + -8.217813984856548e-09, + 0.012935775332152843, + -1.1059455573558807e-09 + ] + }, + { + "children" : [ + 3 + ], + "name" : "L_Knee", + "rotation" : [ + -0.117364302277565, + -0.00023353073629550636, + -0.005353146698325872, + 0.9930744767189026 + ], + "scale" : [ + 1, + 1.0000001192092896, + 1 + ], + "translation" : [ + -7.161837345392996e-09, + 0.08009886741638184, + -3.725290298461914e-09 + ] + }, + { + "children" : [ + 4 + ], + "name" : "L_Thigh", + "rotation" : [ + 0.005340703763067722, + -0.08032803982496262, + -0.9945576786994934, + 0.06613556295633316 + ], + "scale" : [ + 1.0000009536743164, + 1.0000001192092896, + 1.0000014305114746 + ], + "translation" : [ + 0.06634333729743958, + 0.021777987480163574, + -0.000205356627702713 + ] + }, + { + "name" : "Head_end", + "rotation" : [ + 0, + 3.552713678800501e-15, + 0, + 1 + ], + "translation" : [ + -8.470329472543003e-22, + 0.11583378911018372, + 0 + ] + }, + { + "children" : [ + 6 + ], + "name" : "Head", + "rotation" : [ + 0, + 5.960462701182223e-08, + 0, + 1 + ], + "scale" : [ + 1, + 0.9999999403953552, + 1 + ], + "translation" : [ + 0, + 0.022377878427505493, + 0 + ] + }, + { + "children" : [ + 7 + ], + "name" : "Neck", + "translation" : [ + 0, + 0.10304805636405945, + 0 + ] + }, + { + "name" : "L_Hand_end", + "rotation" : [ + 1.3239958462918366e-08, + -2.4324227076988336e-09, + 1.4901161193847656e-08, + 1 + ], + "translation" : [ + 2.2351740014414645e-08, + 0.016836093738675117, + -5.329070518200751e-15 + ] + }, + { + "children" : [ + 9 + ], + "name" : "L_Hand", + "rotation" : [ + -0.10859407484531403, + -0.0013414795976132154, + -0.012280543334782124, + 0.9940094351768494 + ], + "scale" : [ + 1, + 1, + 0.9999999403953552 + ], + "translation" : [ + -5.215407838932151e-08, + 0.030574528500437737, + 4.579678858362968e-09 + ] + }, + { + "children" : [ + 10 + ], + "name" : "L_Forearm", + "rotation" : [ + 0.03182216361165047, + -0.010124370455741882, + -0.05386859551072121, + 0.9979895353317261 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + -1.4001724224499412e-08, + 0.011892830953001976, + -4.656612873077393e-10 + ] + }, + { + "children" : [ + 11 + ], + "name" : "L_Elbow", + "rotation" : [ + 0.13403145968914032, + 0.0004466302052605897, + 0.0229647234082222, + 0.9907108545303345 + ], + "translation" : [ + 9.490547014934236e-09, + 0.07338026165962219, + 1.862645149230957e-09 + ] + }, + { + "children" : [ + 12 + ], + "name" : "L_Shoulder", + "rotation" : [ + -0.05528340861201286, + 0.01580565795302391, + -0.27442947030067444, + 0.9598866701126099 + ], + "translation" : [ + 1.1175854908174188e-08, + 0.034574370831251144, + -3.3306690738754696e-15 + ] + }, + { + "children" : [ + 13 + ], + "name" : "L_Clavicle", + "rotation" : [ + -4.527326780134899e-08, + -2.4482876170850432e-08, + -0.6586140990257263, + 0.7524808645248413 + ], + "scale" : [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation" : [ + 0.03500552102923393, + 0.07119831442832947, + -6.646381223163189e-10 + ] + }, + { + "name" : "R_Hand_end", + "rotation" : [ + 1.3239958462918366e-08, + 2.4324227076988336e-09, + -1.4901161193847656e-08, + 1 + ], + "translation" : [ + -2.2351740014414645e-08, + 0.016836093738675117, + -5.329070518200751e-15 + ] + }, + { + "children" : [ + 15 + ], + "name" : "R_Hand", + "rotation" : [ + -0.10859407484531403, + 0.0013414795976132154, + 0.012280543334782124, + 0.9940094351768494 + ], + "scale" : [ + 1, + 1, + 0.9999999403953552 + ], + "translation" : [ + 5.215407838932151e-08, + 0.030574528500437737, + 4.579678858362968e-09 + ] + }, + { + "children" : [ + 16 + ], + "name" : "R_Forearm", + "rotation" : [ + 0.03182216361165047, + 0.010124370455741882, + 0.05386859551072121, + 0.9979895353317261 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + 1.4001724224499412e-08, + 0.011892830953001976, + -4.656612873077393e-10 + ] + }, + { + "children" : [ + 17 + ], + "name" : "R_Elbow", + "rotation" : [ + 0.13403145968914032, + -0.0004466302052605897, + -0.0229647234082222, + 0.9907108545303345 + ], + "translation" : [ + -9.490547014934236e-09, + 0.07338026165962219, + 1.862645149230957e-09 + ] + }, + { + "children" : [ + 18 + ], + "name" : "R_Shoulder", + "rotation" : [ + -0.05528340861201286, + -0.01580565795302391, + 0.27442947030067444, + 0.9598866701126099 + ], + "translation" : [ + -1.1175854908174188e-08, + 0.034574370831251144, + -3.3306690738754696e-15 + ] + }, + { + "children" : [ + 19 + ], + "name" : "R_Clavicle", + "rotation" : [ + -4.527326780134899e-08, + 2.4482876170850432e-08, + 0.6586140990257263, + 0.7524808645248413 + ], + "scale" : [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation" : [ + -0.03500552102923393, + 0.07119831442832947, + -6.646381223163189e-10 + ] + }, + { + "name" : "L_IK_Arm_Pole_end", + "rotation" : [ + -8.14913803104389e-10, + -2.8273916541365907e-08, + 3.597233089180918e-08, + 1 + ], + "translation" : [ + 1.3742706528319104e-08, + 0.04507105425000191, + 1.6264998237147665e-08 + ] + }, + { + "children" : [ + 21 + ], + "name" : "L_IK_Arm_Pole", + "rotation" : [ + -0.3575689494609833, + -0.6109033823013306, + 0.6082502007484436, + 0.3591284155845642 + ], + "scale" : [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation" : [ + 0.0021197572350502014, + -0.04126967862248421, + -0.053202081471681595 + ] + }, + { + "children" : [ + 22 + ], + "name" : "L_IK_Arm_Target", + "rotation" : [ + -0.0011026781285181642, + 0.0018760154489427805, + -0.8620717525482178, + 0.5067814588546753 + ], + "scale" : [ + 0.9999999403953552, + 1, + 1 + ], + "translation" : [ + 0.17300567030906677, + 0.02745041251182556, + 3.304734264020226e-10 + ] + }, + { + "name" : "R_IK_Arm_Pole_end", + "rotation" : [ + -8.14913803104389e-10, + 2.8273916541365907e-08, + -3.597233089180918e-08, + 1 + ], + "translation" : [ + -1.3742706528319104e-08, + 0.04507105425000191, + 1.6264998237147665e-08 + ] + }, + { + "children" : [ + 24 + ], + "name" : "R_IK_Arm_Pole", + "rotation" : [ + -0.3575689494609833, + 0.6109033823013306, + -0.6082502007484436, + 0.3591284155845642 + ], + "scale" : [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation" : [ + -0.0021197572350502014, + -0.04126967862248421, + -0.053202081471681595 + ] + }, + { + "children" : [ + 25 + ], + "name" : "R_IK_Arm_Target", + "rotation" : [ + -0.0011026781285181642, + -0.0018760154489427805, + 0.8620717525482178, + 0.5067814588546753 + ], + "scale" : [ + 0.9999999403953552, + 1, + 1 + ], + "translation" : [ + -0.17300567030906677, + 0.02745041251182556, + 3.304734264020226e-10 + ] + }, + { + "children" : [ + 8, + 14, + 20, + 23, + 26 + ], + "name" : "Upper_Spine", + "translation" : [ + 0, + 0.06622835993766785, + 0 + ] + }, + { + "children" : [ + 27 + ], + "name" : "Lower_Spine", + "translation" : [ + 0, + 0.06622838973999023, + 0 + ] + }, + { + "name" : "Tail_end", + "translation" : [ + 0, + 0.07595176249742508, + -1.3838050705317073e-09 + ] + }, + { + "children" : [ + 29 + ], + "name" : "Tail", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + -5.8597615213960615e-18, + 0.03983837366104126, + -0.09847982972860336 + ] + }, + { + "name" : "L_Hip_end", + "translation" : [ + 0, + 0.032987553626298904, + -1.5967565047958487e-09 + ] + }, + { + "children" : [ + 31 + ], + "name" : "L_Hip", + "translation" : [ + 0.06953180581331253, + 0.04957667365670204, + 0.061330340802669525 + ] + }, + { + "name" : "L_Butt_end", + "translation" : [ + 0, + 0.03298754245042801, + 1.3750955929481279e-09 + ] + }, + { + "children" : [ + 33 + ], + "name" : "L_Butt", + "translation" : [ + 0.06953180581331253, + -0.0007792188553139567, + -0.04653617739677429 + ] + }, + { + "name" : "R_Toe_end", + "rotation" : [ + -1.304514398725587e-07, + 4.8278069232242024e-14, + 3.113858042524953e-07, + 1 + ], + "translation" : [ + -2.9270432744255004e-09, + 0.02392714098095894, + 1.3476908478082805e-10 + ] + }, + { + "children" : [ + 35 + ], + "name" : "R_Toe", + "rotation" : [ + 0.32702386379241943, + -1.1310142156162328e-07, + -1.641405731334089e-07, + 0.945016086101532 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + 8.650776095464607e-09, + 0.03380582109093666, + -2.448857117087755e-09 + ] + }, + { + "children" : [ + 36 + ], + "name" : "R_Feet", + "rotation" : [ + 0.516292929649353, + 0.020581310614943504, + 0.05452270060777664, + 0.854426920413971 + ], + "translation" : [ + -1.2865877252465907e-09, + 0.06353945285081863, + 2.6193447411060333e-10 + ] + }, + { + "children" : [ + 37 + ], + "name" : "R_Shin", + "rotation" : [ + -0.054226718842983246, + -0.00034972387948073447, + 0.0027083493769168854, + 0.9985249042510986 + ], + "scale" : [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation" : [ + 8.217813984856548e-09, + 0.012935775332152843, + -1.1059455573558807e-09 + ] + }, + { + "children" : [ + 38 + ], + "name" : "R_Knee", + "rotation" : [ + -0.117364302277565, + 0.00023353073629550636, + 0.005353146698325872, + 0.9930744767189026 + ], + "scale" : [ + 1, + 1.0000001192092896, + 1 + ], + "translation" : [ + 7.161837345392996e-09, + 0.08009886741638184, + -3.725290298461914e-09 + ] + }, + { + "children" : [ + 39 + ], + "name" : "R_Thigh", + "rotation" : [ + 0.005340703763067722, + 0.08032803982496262, + 0.9945576786994934, + 0.06613556295633316 + ], + "scale" : [ + 1.0000009536743164, + 1.0000001192092896, + 1.0000014305114746 + ], + "translation" : [ + -0.06634333729743958, + 0.021777987480163574, + -0.000205356627702713 + ] + }, + { + "name" : "R_Hip_end", + "translation" : [ + 0, + 0.032987553626298904, + -1.5967565047958487e-09 + ] + }, + { + "children" : [ + 41 + ], + "name" : "R_Hip", + "translation" : [ + -0.06953180581331253, + 0.04957667365670204, + 0.061330340802669525 + ] + }, + { + "name" : "R_Butt_end", + "translation" : [ + 0, + 0.03298754245042801, + 1.3750955929481279e-09 + ] + }, + { + "children" : [ + 43 + ], + "name" : "R_Butt", + "translation" : [ + -0.06953180581331253, + -0.0007792188553139567, + -0.04653617739677429 + ] + }, + { + "children" : [ + 5, + 28, + 30, + 32, + 34, + 40, + 42, + 44 + ], + "name" : "Pelvis", + "translation" : [ + 0, + 0.15915730595588684, + 0 + ] + }, + { + "name" : "L_IK_Leg_Pole_end", + "translation" : [ + 0, + 0.04320859909057617, + 2.2203057170600005e-09 + ] + }, + { + "children" : [ + 46 + ], + "name" : "L_IK_Leg_Pole", + "rotation" : [ + 0, + 0, + -1, + 0 + ], + "translation" : [ + -0.008841380476951599, + -0.08020301908254623, + 0.0748630166053772 + ] + }, + { + "children" : [ + 47 + ], + "name" : "L_IK_Leg_Target", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + 0.08565311133861542, + 0.027707800269126892, + 0.00015427125617861748 + ] + }, + { + "name" : "R_IK_Leg_Pole_end", + "translation" : [ + 0, + 0.04320859909057617, + 2.2203057170600005e-09 + ] + }, + { + "children" : [ + 49 + ], + "name" : "R_IK_Leg_Pole", + "rotation" : [ + 0, + 0, + -1, + 0 + ], + "translation" : [ + 0.008841380476951599, + -0.08020301908254623, + 0.0748630166053772 + ] + }, + { + "children" : [ + 50 + ], + "name" : "R_IK_Leg_Target", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + -0.08565311133861542, + 0.027707800269126892, + 0.00015427125617861748 + ] + }, + { + "children" : [ + 45, + 48, + 51 + ], + "name" : "Root" + }, + { + "mesh" : 0, + "name" : "Bag", + "skin" : 0 + }, + { + "mesh" : 1, + "name" : "Raccoon", + "skin" : 0 + }, + { + "children" : [ + 53, + 54, + 52 + ], + "name" : "Armature" + } + ], + "animations" : [ + { + "channels" : [ + { + "sampler" : 0, + "target" : { + "node" : 52, + "path" : "translation" + } + }, + { + "sampler" : 1, + "target" : { + "node" : 52, + "path" : "rotation" + } + }, + { + "sampler" : 2, + "target" : { + "node" : 52, + "path" : "scale" + } + }, + { + "sampler" : 3, + "target" : { + "node" : 45, + "path" : "translation" + } + }, + { + "sampler" : 4, + "target" : { + "node" : 45, + "path" : "rotation" + } + }, + { + "sampler" : 5, + "target" : { + "node" : 45, + "path" : "scale" + } + }, + { + "sampler" : 6, + "target" : { + "node" : 5, + "path" : "translation" + } + }, + { + "sampler" : 7, + "target" : { + "node" : 5, + "path" : "rotation" + } + }, + { + "sampler" : 8, + "target" : { + "node" : 5, + "path" : "scale" + } + }, + { + "sampler" : 9, + "target" : { + "node" : 4, + "path" : "translation" + } + }, + { + "sampler" : 10, + "target" : { + "node" : 4, + "path" : "rotation" + } + }, + { + "sampler" : 11, + "target" : { + "node" : 4, + "path" : "scale" + } + }, + { + "sampler" : 12, + "target" : { + "node" : 3, + "path" : "translation" + } + }, + { + "sampler" : 13, + "target" : { + "node" : 3, + "path" : "rotation" + } + }, + { + "sampler" : 14, + "target" : { + "node" : 3, + "path" : "scale" + } + }, + { + "sampler" : 15, + "target" : { + "node" : 2, + "path" : "translation" + } + }, + { + "sampler" : 16, + "target" : { + "node" : 2, + "path" : "rotation" + } + }, + { + "sampler" : 17, + "target" : { + "node" : 2, + "path" : "scale" + } + }, + { + "sampler" : 18, + "target" : { + "node" : 1, + "path" : "translation" + } + }, + { + "sampler" : 19, + "target" : { + "node" : 1, + "path" : "rotation" + } + }, + { + "sampler" : 20, + "target" : { + "node" : 1, + "path" : "scale" + } + }, + { + "sampler" : 21, + "target" : { + "node" : 0, + "path" : "translation" + } + }, + { + "sampler" : 22, + "target" : { + "node" : 0, + "path" : "rotation" + } + }, + { + "sampler" : 23, + "target" : { + "node" : 0, + "path" : "scale" + } + }, + { + "sampler" : 24, + "target" : { + "node" : 28, + "path" : "translation" + } + }, + { + "sampler" : 25, + "target" : { + "node" : 28, + "path" : "rotation" + } + }, + { + "sampler" : 26, + "target" : { + "node" : 28, + "path" : "scale" + } + }, + { + "sampler" : 27, + "target" : { + "node" : 27, + "path" : "translation" + } + }, + { + "sampler" : 28, + "target" : { + "node" : 27, + "path" : "rotation" + } + }, + { + "sampler" : 29, + "target" : { + "node" : 27, + "path" : "scale" + } + }, + { + "sampler" : 30, + "target" : { + "node" : 8, + "path" : "translation" + } + }, + { + "sampler" : 31, + "target" : { + "node" : 8, + "path" : "rotation" + } + }, + { + "sampler" : 32, + "target" : { + "node" : 8, + "path" : "scale" + } + }, + { + "sampler" : 33, + "target" : { + "node" : 7, + "path" : "translation" + } + }, + { + "sampler" : 34, + "target" : { + "node" : 7, + "path" : "rotation" + } + }, + { + "sampler" : 35, + "target" : { + "node" : 7, + "path" : "scale" + } + }, + { + "sampler" : 36, + "target" : { + "node" : 6, + "path" : "translation" + } + }, + { + "sampler" : 37, + "target" : { + "node" : 6, + "path" : "rotation" + } + }, + { + "sampler" : 38, + "target" : { + "node" : 6, + "path" : "scale" + } + }, + { + "sampler" : 39, + "target" : { + "node" : 14, + "path" : "translation" + } + }, + { + "sampler" : 40, + "target" : { + "node" : 14, + "path" : "rotation" + } + }, + { + "sampler" : 41, + "target" : { + "node" : 14, + "path" : "scale" + } + }, + { + "sampler" : 42, + "target" : { + "node" : 13, + "path" : "translation" + } + }, + { + "sampler" : 43, + "target" : { + "node" : 13, + "path" : "rotation" + } + }, + { + "sampler" : 44, + "target" : { + "node" : 13, + "path" : "scale" + } + }, + { + "sampler" : 45, + "target" : { + "node" : 12, + "path" : "translation" + } + }, + { + "sampler" : 46, + "target" : { + "node" : 12, + "path" : "rotation" + } + }, + { + "sampler" : 47, + "target" : { + "node" : 12, + "path" : "scale" + } + }, + { + "sampler" : 48, + "target" : { + "node" : 11, + "path" : "translation" + } + }, + { + "sampler" : 49, + "target" : { + "node" : 11, + "path" : "rotation" + } + }, + { + "sampler" : 50, + "target" : { + "node" : 11, + "path" : "scale" + } + }, + { + "sampler" : 51, + "target" : { + "node" : 10, + "path" : "translation" + } + }, + { + "sampler" : 52, + "target" : { + "node" : 10, + "path" : "rotation" + } + }, + { + "sampler" : 53, + "target" : { + "node" : 10, + "path" : "scale" + } + }, + { + "sampler" : 54, + "target" : { + "node" : 9, + "path" : "translation" + } + }, + { + "sampler" : 55, + "target" : { + "node" : 9, + "path" : "rotation" + } + }, + { + "sampler" : 56, + "target" : { + "node" : 9, + "path" : "scale" + } + }, + { + "sampler" : 57, + "target" : { + "node" : 20, + "path" : "translation" + } + }, + { + "sampler" : 58, + "target" : { + "node" : 20, + "path" : "rotation" + } + }, + { + "sampler" : 59, + "target" : { + "node" : 20, + "path" : "scale" + } + }, + { + "sampler" : 60, + "target" : { + "node" : 19, + "path" : "translation" + } + }, + { + "sampler" : 61, + "target" : { + "node" : 19, + "path" : "rotation" + } + }, + { + "sampler" : 62, + "target" : { + "node" : 19, + "path" : "scale" + } + }, + { + "sampler" : 63, + "target" : { + "node" : 18, + "path" : "translation" + } + }, + { + "sampler" : 64, + "target" : { + "node" : 18, + "path" : "rotation" + } + }, + { + "sampler" : 65, + "target" : { + "node" : 18, + "path" : "scale" + } + }, + { + "sampler" : 66, + "target" : { + "node" : 17, + "path" : "translation" + } + }, + { + "sampler" : 67, + "target" : { + "node" : 17, + "path" : "rotation" + } + }, + { + "sampler" : 68, + "target" : { + "node" : 17, + "path" : "scale" + } + }, + { + "sampler" : 69, + "target" : { + "node" : 16, + "path" : "translation" + } + }, + { + "sampler" : 70, + "target" : { + "node" : 16, + "path" : "rotation" + } + }, + { + "sampler" : 71, + "target" : { + "node" : 16, + "path" : "scale" + } + }, + { + "sampler" : 72, + "target" : { + "node" : 15, + "path" : "translation" + } + }, + { + "sampler" : 73, + "target" : { + "node" : 15, + "path" : "rotation" + } + }, + { + "sampler" : 74, + "target" : { + "node" : 15, + "path" : "scale" + } + }, + { + "sampler" : 75, + "target" : { + "node" : 23, + "path" : "translation" + } + }, + { + "sampler" : 76, + "target" : { + "node" : 23, + "path" : "rotation" + } + }, + { + "sampler" : 77, + "target" : { + "node" : 23, + "path" : "scale" + } + }, + { + "sampler" : 78, + "target" : { + "node" : 22, + "path" : "translation" + } + }, + { + "sampler" : 79, + "target" : { + "node" : 22, + "path" : "rotation" + } + }, + { + "sampler" : 80, + "target" : { + "node" : 22, + "path" : "scale" + } + }, + { + "sampler" : 81, + "target" : { + "node" : 21, + "path" : "translation" + } + }, + { + "sampler" : 82, + "target" : { + "node" : 21, + "path" : "rotation" + } + }, + { + "sampler" : 83, + "target" : { + "node" : 21, + "path" : "scale" + } + }, + { + "sampler" : 84, + "target" : { + "node" : 26, + "path" : "translation" + } + }, + { + "sampler" : 85, + "target" : { + "node" : 26, + "path" : "rotation" + } + }, + { + "sampler" : 86, + "target" : { + "node" : 26, + "path" : "scale" + } + }, + { + "sampler" : 87, + "target" : { + "node" : 25, + "path" : "translation" + } + }, + { + "sampler" : 88, + "target" : { + "node" : 25, + "path" : "rotation" + } + }, + { + "sampler" : 89, + "target" : { + "node" : 25, + "path" : "scale" + } + }, + { + "sampler" : 90, + "target" : { + "node" : 24, + "path" : "translation" + } + }, + { + "sampler" : 91, + "target" : { + "node" : 24, + "path" : "rotation" + } + }, + { + "sampler" : 92, + "target" : { + "node" : 24, + "path" : "scale" + } + }, + { + "sampler" : 93, + "target" : { + "node" : 30, + "path" : "translation" + } + }, + { + "sampler" : 94, + "target" : { + "node" : 30, + "path" : "rotation" + } + }, + { + "sampler" : 95, + "target" : { + "node" : 30, + "path" : "scale" + } + }, + { + "sampler" : 96, + "target" : { + "node" : 29, + "path" : "translation" + } + }, + { + "sampler" : 97, + "target" : { + "node" : 29, + "path" : "rotation" + } + }, + { + "sampler" : 98, + "target" : { + "node" : 29, + "path" : "scale" + } + }, + { + "sampler" : 99, + "target" : { + "node" : 32, + "path" : "translation" + } + }, + { + "sampler" : 100, + "target" : { + "node" : 32, + "path" : "rotation" + } + }, + { + "sampler" : 101, + "target" : { + "node" : 32, + "path" : "scale" + } + }, + { + "sampler" : 102, + "target" : { + "node" : 31, + "path" : "translation" + } + }, + { + "sampler" : 103, + "target" : { + "node" : 31, + "path" : "rotation" + } + }, + { + "sampler" : 104, + "target" : { + "node" : 31, + "path" : "scale" + } + }, + { + "sampler" : 105, + "target" : { + "node" : 34, + "path" : "translation" + } + }, + { + "sampler" : 106, + "target" : { + "node" : 34, + "path" : "rotation" + } + }, + { + "sampler" : 107, + "target" : { + "node" : 34, + "path" : "scale" + } + }, + { + "sampler" : 108, + "target" : { + "node" : 33, + "path" : "translation" + } + }, + { + "sampler" : 109, + "target" : { + "node" : 33, + "path" : "rotation" + } + }, + { + "sampler" : 110, + "target" : { + "node" : 33, + "path" : "scale" + } + }, + { + "sampler" : 111, + "target" : { + "node" : 40, + "path" : "translation" + } + }, + { + "sampler" : 112, + "target" : { + "node" : 40, + "path" : "rotation" + } + }, + { + "sampler" : 113, + "target" : { + "node" : 40, + "path" : "scale" + } + }, + { + "sampler" : 114, + "target" : { + "node" : 39, + "path" : "translation" + } + }, + { + "sampler" : 115, + "target" : { + "node" : 39, + "path" : "rotation" + } + }, + { + "sampler" : 116, + "target" : { + "node" : 39, + "path" : "scale" + } + }, + { + "sampler" : 117, + "target" : { + "node" : 38, + "path" : "translation" + } + }, + { + "sampler" : 118, + "target" : { + "node" : 38, + "path" : "rotation" + } + }, + { + "sampler" : 119, + "target" : { + "node" : 38, + "path" : "scale" + } + }, + { + "sampler" : 120, + "target" : { + "node" : 37, + "path" : "translation" + } + }, + { + "sampler" : 121, + "target" : { + "node" : 37, + "path" : "rotation" + } + }, + { + "sampler" : 122, + "target" : { + "node" : 37, + "path" : "scale" + } + }, + { + "sampler" : 123, + "target" : { + "node" : 36, + "path" : "translation" + } + }, + { + "sampler" : 124, + "target" : { + "node" : 36, + "path" : "rotation" + } + }, + { + "sampler" : 125, + "target" : { + "node" : 36, + "path" : "scale" + } + }, + { + "sampler" : 126, + "target" : { + "node" : 35, + "path" : "translation" + } + }, + { + "sampler" : 127, + "target" : { + "node" : 35, + "path" : "rotation" + } + }, + { + "sampler" : 128, + "target" : { + "node" : 35, + "path" : "scale" + } + }, + { + "sampler" : 129, + "target" : { + "node" : 42, + "path" : "translation" + } + }, + { + "sampler" : 130, + "target" : { + "node" : 42, + "path" : "rotation" + } + }, + { + "sampler" : 131, + "target" : { + "node" : 42, + "path" : "scale" + } + }, + { + "sampler" : 132, + "target" : { + "node" : 41, + "path" : "translation" + } + }, + { + "sampler" : 133, + "target" : { + "node" : 41, + "path" : "rotation" + } + }, + { + "sampler" : 134, + "target" : { + "node" : 41, + "path" : "scale" + } + }, + { + "sampler" : 135, + "target" : { + "node" : 44, + "path" : "translation" + } + }, + { + "sampler" : 136, + "target" : { + "node" : 44, + "path" : "rotation" + } + }, + { + "sampler" : 137, + "target" : { + "node" : 44, + "path" : "scale" + } + }, + { + "sampler" : 138, + "target" : { + "node" : 43, + "path" : "translation" + } + }, + { + "sampler" : 139, + "target" : { + "node" : 43, + "path" : "rotation" + } + }, + { + "sampler" : 140, + "target" : { + "node" : 43, + "path" : "scale" + } + }, + { + "sampler" : 141, + "target" : { + "node" : 48, + "path" : "translation" + } + }, + { + "sampler" : 142, + "target" : { + "node" : 48, + "path" : "rotation" + } + }, + { + "sampler" : 143, + "target" : { + "node" : 48, + "path" : "scale" + } + }, + { + "sampler" : 144, + "target" : { + "node" : 47, + "path" : "translation" + } + }, + { + "sampler" : 145, + "target" : { + "node" : 47, + "path" : "rotation" + } + }, + { + "sampler" : 146, + "target" : { + "node" : 47, + "path" : "scale" + } + }, + { + "sampler" : 147, + "target" : { + "node" : 46, + "path" : "translation" + } + }, + { + "sampler" : 148, + "target" : { + "node" : 46, + "path" : "rotation" + } + }, + { + "sampler" : 149, + "target" : { + "node" : 46, + "path" : "scale" + } + }, + { + "sampler" : 150, + "target" : { + "node" : 51, + "path" : "translation" + } + }, + { + "sampler" : 151, + "target" : { + "node" : 51, + "path" : "rotation" + } + }, + { + "sampler" : 152, + "target" : { + "node" : 51, + "path" : "scale" + } + }, + { + "sampler" : 153, + "target" : { + "node" : 50, + "path" : "translation" + } + }, + { + "sampler" : 154, + "target" : { + "node" : 50, + "path" : "rotation" + } + }, + { + "sampler" : 155, + "target" : { + "node" : 50, + "path" : "scale" + } + }, + { + "sampler" : 156, + "target" : { + "node" : 49, + "path" : "translation" + } + }, + { + "sampler" : 157, + "target" : { + "node" : 49, + "path" : "rotation" + } + }, + { + "sampler" : 158, + "target" : { + "node" : 49, + "path" : "scale" + } + }, + { + "sampler" : 159, + "target" : { + "node" : 55, + "path" : "translation" + } + }, + { + "sampler" : 160, + "target" : { + "node" : 55, + "path" : "rotation" + } + }, + { + "sampler" : 161, + "target" : { + "node" : 55, + "path" : "scale" + } + } + ], + "name" : "Armature|Armature|ArmatureAction", + "samplers" : [ + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 16 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 17 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 18 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 19 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 20 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 21 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 22 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 23 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 24 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 25 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 26 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 27 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 28 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 29 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 30 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 31 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 32 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 33 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 34 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 35 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 36 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 37 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 38 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 39 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 40 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 41 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 42 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 43 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 44 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 45 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 46 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 47 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 48 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 49 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 50 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 51 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 52 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 53 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 54 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 55 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 56 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 57 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 58 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 59 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 60 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 61 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 62 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 63 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 64 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 65 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 66 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 67 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 68 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 69 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 70 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 71 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 72 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 73 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 74 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 75 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 76 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 77 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 78 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 79 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 80 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 81 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 82 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 83 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 84 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 85 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 86 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 87 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 88 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 89 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 90 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 91 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 92 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 93 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 94 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 95 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 96 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 97 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 98 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 99 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 100 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 101 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 102 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 103 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 104 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 105 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 106 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 107 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 108 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 109 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 110 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 111 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 112 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 113 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 114 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 115 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 116 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 117 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 118 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 119 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 120 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 121 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 122 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 123 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 124 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 125 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 126 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 127 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 128 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 129 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 130 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 131 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 132 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 133 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 134 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 135 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 136 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 137 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 138 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 139 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 140 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 141 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 142 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 143 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 144 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 145 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 146 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 147 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 148 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 149 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 150 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 151 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 152 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 153 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 154 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 155 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 156 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 157 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 158 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 159 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 160 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 161 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 162 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 163 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 164 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 165 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 166 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 167 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 168 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 169 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 170 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 171 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 172 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 173 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 174 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 175 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 176 + }, + { + "input" : 15, + "interpolation" : "LINEAR", + "output" : 177 + } + ] + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "BagMaterial", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 0 + }, + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + }, + { + "alphaMode" : "BLEND", + "doubleSided" : true, + "extensions" : { + "KHR_materials_specular" : { + "specularColorFactor" : [ + 0, + 0, + 0 + ] + }, + "KHR_materials_ior" : { + "ior" : 1.4500000476837158 + } + }, + "name" : "BodyMaterial", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 1 + }, + "metallicFactor" : 0 + } + } + ], + "meshes" : [ + { + "name" : "Cube.003", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TANGENT" : 2, + "TEXCOORD_0" : 3, + "JOINTS_0" : 4, + "WEIGHTS_0" : 5 + }, + "indices" : 6, + "material" : 0 + } + ] + }, + { + "name" : "Cube.012", + "primitives" : [ + { + "attributes" : { + "POSITION" : 8, + "NORMAL" : 9, + "TANGENT" : 10, + "TEXCOORD_0" : 11, + "JOINTS_0" : 12, + "WEIGHTS_0" : 13 + }, + "indices" : 14, + "material" : 1 + } + ] + } + ], + "textures" : [ + { + "sampler" : 0, + "source" : 0 + }, + { + "sampler" : 0, + "source" : 1 + } + ], + "images" : [ + { + "mimeType" : "image/png", + "name" : "RaccoonBag_Color_Ver4", + "uri" : "RaccoonBag_Color_Ver4.dds" + }, + { + "mimeType" : "image/png", + "name" : "RaccoonPreTexturedVer1_Base9-RaccoonPreTexturedVer1_Base9", + "uri" : "RaccoonPreTexturedVer1_Base9-RaccoonPreTexturedVer1_Base9.dds" + } + ], + "skins" : [ + { + "inverseBindMatrices" : 7, + "joints" : [ + 52, + 45, + 5, + 4, + 3, + 2, + 1, + 0, + 28, + 27, + 8, + 7, + 6, + 14, + 13, + 12, + 11, + 10, + 9, + 20, + 19, + 18, + 17, + 16, + 15, + 23, + 22, + 21, + 26, + 25, + 24, + 30, + 29, + 32, + 31, + 34, + 33, + 40, + 39, + 38, + 37, + 36, + 35, + 42, + 41, + 44, + 43, + 48, + 47, + 46, + 51, + 50, + 49 + ], + "name" : "Armature" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 512, + "max" : [ + 0.1090814545750618, + 0.40452075004577637, + 0.0857388824224472 + ], + "min" : [ + -0.09462108463048935, + 0.2630254030227661, + -0.11617939174175262 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 512, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 512, + "type" : "VEC4" + }, + { + "bufferView" : 3, + "componentType" : 5126, + "count" : 512, + "type" : "VEC2" + }, + { + "bufferView" : 4, + "componentType" : 5121, + "count" : 512, + "type" : "VEC4" + }, + { + "bufferView" : 5, + "componentType" : 5126, + "count" : 512, + "type" : "VEC4" + }, + { + "bufferView" : 6, + "componentType" : 5123, + "count" : 2346, + "type" : "SCALAR" + }, + { + "bufferView" : 7, + "componentType" : 5126, + "count" : 53, + "type" : "MAT4" + }, + { + "bufferView" : 8, + "componentType" : 5126, + "count" : 3484, + "max" : [ + 0.2035536766052246, + 0.5987313389778137, + 0.09013944119215012 + ], + "min" : [ + -0.19493983685970306, + -0.0017474208725616336, + -0.19020147621631622 + ], + "type" : "VEC3" + }, + { + "bufferView" : 9, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC3" + }, + { + "bufferView" : 10, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC4" + }, + { + "bufferView" : 11, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC2" + }, + { + "bufferView" : 12, + "componentType" : 5121, + "count" : 3484, + "type" : "VEC4" + }, + { + "bufferView" : 13, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC4" + }, + { + "bufferView" : 14, + "componentType" : 5123, + "count" : 17472, + "type" : "SCALAR" + }, + { + "bufferView" : 15, + "componentType" : 5126, + "count" : 51, + "max" : [ + 2.125 + ], + "min" : [ + 0.041666666666666664 + ], + "type" : "SCALAR" + }, + { + "bufferView" : 16, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 17, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 18, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 19, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 20, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 21, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 22, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 23, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 24, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 25, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 26, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 27, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 28, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 29, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 30, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 31, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 32, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 33, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 34, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 35, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 36, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 37, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 38, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 39, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 40, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 41, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 42, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 43, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 44, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 45, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 46, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 47, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 48, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 49, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 50, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 51, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 52, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 53, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 54, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 55, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 56, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 57, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 58, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 59, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 60, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 61, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 62, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 63, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 64, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 65, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 66, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 67, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 68, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 69, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 70, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 71, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 72, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 73, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 74, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 75, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 76, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 77, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 78, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 79, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 80, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 81, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 82, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 83, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 84, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 85, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 86, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 87, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 88, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 89, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 90, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 91, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 92, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 93, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 94, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 95, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 96, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 97, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 98, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 99, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 100, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 101, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 102, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 103, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 104, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 105, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 106, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 107, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 108, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 109, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 110, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 111, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 112, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 113, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 114, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 115, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 116, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 117, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 118, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 119, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 120, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 121, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 122, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 123, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 124, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 125, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 126, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 127, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 128, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 129, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 130, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 131, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 132, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 133, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 134, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 135, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 136, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 137, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 138, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 139, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 140, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 141, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 142, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 143, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 144, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 145, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 146, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 147, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 148, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 149, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 150, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 151, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 152, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 153, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 154, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 155, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 156, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 157, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 158, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 159, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 160, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 161, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 162, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 163, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 164, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 165, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 166, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 167, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 168, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 169, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 170, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 171, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 172, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 173, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 174, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 175, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 176, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 177, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 6144, + "byteOffset" : 0, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 6144, + "byteOffset" : 6144, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 8192, + "byteOffset" : 12288, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4096, + "byteOffset" : 20480, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2048, + "byteOffset" : 24576, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 8192, + "byteOffset" : 26624, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4692, + "byteOffset" : 34816, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 3392, + "byteOffset" : 39508 + }, + { + "buffer" : 0, + "byteLength" : 41808, + "byteOffset" : 42900, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 41808, + "byteOffset" : 84708, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 55744, + "byteOffset" : 126516, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 27872, + "byteOffset" : 182260, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 13936, + "byteOffset" : 210132, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 55744, + "byteOffset" : 224068, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 34944, + "byteOffset" : 279812, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 204, + "byteOffset" : 314756 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 314960 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 315572 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 316388 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 317000 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 317612 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 318428 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 319040 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 319652 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 320468 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 321080 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 321692 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 322508 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 323120 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 323732 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 324548 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 325160 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 325772 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 326588 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 327200 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 327812 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 328628 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 329240 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 329852 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 330668 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 331280 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 331892 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 332708 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 333320 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 333932 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 334748 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 335360 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 335972 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 336788 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 337400 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 338012 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 338828 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 339440 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 340052 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 340868 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 341480 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 342092 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 342908 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 343520 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 344132 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 344948 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 345560 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 346172 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 346988 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 347600 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 348212 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 349028 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 349640 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 350252 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 351068 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 351680 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 352292 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 353108 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 353720 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 354332 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 355148 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 355760 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 356372 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 357188 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 357800 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 358412 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 359228 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 359840 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 360452 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 361268 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 361880 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 362492 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 363308 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 363920 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 364532 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 365348 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 365960 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 366572 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 367388 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 368000 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 368612 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 369428 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 370040 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 370652 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 371468 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 372080 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 372692 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 373508 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 374120 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 374732 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 375548 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 376160 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 376772 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 377588 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 378200 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 378812 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 379628 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 380240 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 380852 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 381668 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 382280 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 382892 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 383708 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 384320 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 384932 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 385748 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 386360 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 386972 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 387788 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 388400 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 389012 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 389828 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 390440 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 391052 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 391868 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 392480 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 393092 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 393908 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 394520 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 395132 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 395948 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 396560 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 397172 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 397988 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 398600 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 399212 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 400028 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 400640 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 401252 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 402068 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 402680 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 403292 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 404108 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 404720 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 405332 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 406148 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 406760 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 407372 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 408188 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 408800 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 409412 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 410228 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 410840 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 411452 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 412268 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 412880 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 413492 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 414308 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 414920 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 415532 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 416348 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 416960 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 417572 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 418388 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 419000 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 419612 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 420428 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 421040 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 421652 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 422468 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 423080 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 423692 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 424508 + } + ], + "samplers" : [ + { + "magFilter" : 9729, + "minFilter" : 9987 + } + ], + "buffers" : [ + { + "byteLength" : 425120, + "uri" : "racoon.bin" + } + ] +} diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index bb4ccc35..e7dc3fb4 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -27,6 +27,8 @@ #include "Scenes/SBTestScene.h" #include "Math/Transform/SHTransformComponent.h" +#include "Assets/SHAssetManager.h" + using namespace SHADE; namespace Sandbox @@ -71,6 +73,8 @@ namespace Sandbox SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); + + SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.fbx"); // Set up graphics system and windows graphicsSystem->SetWindow(&window); From 8ab5afd3c4761274d0423657bdfdd801b345fe23 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sun, 25 Sep 2022 16:39:01 +0800 Subject: [PATCH 200/793] first version of IM ready for PR --- .../src/Application/SBApplication.cpp | 4 ++++ .../src/Input/SHInputManagerSystem.cpp | 6 ++++++ SHADE_Engine/src/Input/SHInputManagerSystem.h | 21 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index bb4ccc35..7ef8adfe 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -23,6 +23,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformSystem.h" +#include "Input/SHInputManagerSystem.h" #include "Scenes/SBTestScene.h" #include "Math/Transform/SHTransformComponent.h" @@ -52,6 +53,7 @@ namespace Sandbox SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); + SHADE::SHSystemManager::CreateSystem(); // Create Routines SHADE::SHSystemManager::RegisterRoutine(); @@ -71,6 +73,8 @@ namespace Sandbox SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); + + SHADE::SHSystemManager::RegisterRoutine(); // Set up graphics system and windows graphicsSystem->SetWindow(&window); diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp index cbc49d7d..1beabe3f 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.cpp @@ -35,6 +35,8 @@ namespace SHADE int SHInputManagerSystem::mouseScreenY = 0; int SHInputManagerSystem::mouseScreenXLast = 0; int SHInputManagerSystem::mouseScreenYLast = 0; + double SHInputManagerSystem::mouseVelocityX = 0; + double SHInputManagerSystem::mouseVelocityY = 0; int SHInputManagerSystem::mouseWheelVerticalDelta = 0; int SHInputManagerSystem::mouseWheelVerticalDeltaPoll = 0; @@ -126,6 +128,10 @@ namespace SHADE //Mouse Positioning///////////////////////////////////// //https://stackoverflow.com/a/6423739 + //Set last positioning + mouseScreenXLast = mouseScreenX; + mouseScreenYLast = mouseScreenY; + //Get cursor position, even when it is outside window POINT p; GetCursorPos(&p); diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManagerSystem.h index 6ee73ae9..77d8f8fd 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.h +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.h @@ -420,6 +420,16 @@ namespace SHADE if (y) *y = mouseScreenY; } + //Get the mouse velocity + //Two output parameters for x and y velocitites + //In pixels per second for both + static inline void GetMouseVelocity(double* x = nullptr, + double* y = nullptr) noexcept + { + if (x) *x = mouseVelocityX; + if (y) *y = mouseVelocityY; + } + //Get the mouse wheel vertical delta static inline int GetMouseWheelVerticalDelta() noexcept { @@ -529,15 +539,26 @@ namespace SHADE //MOUSE VARIABLES/////////////////////////////////////////////////////////// //Present horizontal positioning of the mouse WRT the screen + //Increasing rightwards static int mouseScreenX; //Present vertical positioning of the mouse WRT the screen + //Increasing downwards static int mouseScreenY; //Horizontal positioning of the mouse WRT screen in last frame + //Increasing rightwards static int mouseScreenXLast; //Vertical positioning of the mouse WRT screen in the last frame + //Increasing downwards static int mouseScreenYLast; + //The velocity at which the mouse is being moved horizontally (px/s) + //Rightwards is positive + static double mouseVelocityX; + //The velocity at which the mouse is being moved vertically (px/s) + //Downwards is positive + static double mouseVelocityY; + //For polling mouse wheel events, not to be read static int mouseWheelVerticalDeltaPoll; //Mouse wheel vertical rotation speed. Positive is rotation AWAY from user From 4e60b3495acb2e2cdc86df3e98a706b5c517fa9c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 25 Sep 2022 20:28:01 +0800 Subject: [PATCH 201/793] Handles will now properly show up automatically dereferenced or NULL in Visual Studio's debug views --- SHADE_Engine/NatvisFile.natvis | 10 ++++++++++ SHADE_Engine/premake5.lua | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/NatvisFile.natvis diff --git a/SHADE_Engine/NatvisFile.natvis b/SHADE_Engine/NatvisFile.natvis new file mode 100644 index 00000000..6747262b --- /dev/null +++ b/SHADE_Engine/NatvisFile.natvis @@ -0,0 +1,10 @@ + + + + NULL + ID = {id.Data.Index} Version = {id.Data.Version} Type = {"$T1"} + + (*library).objects.denseArray[(*library).objects.sparseArray[id.Data.Index]] + + + \ No newline at end of file diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 84acd8fa..2e6c39f9 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -15,7 +15,8 @@ project "SHADE_Engine" "%{prj.location}/src/**.hpp", "%{prj.location}/src/**.c", "%{prj.location}/src/**.cpp", - "%{prj.location}/src/**.glsl" + "%{prj.location}/src/**.glsl", + "%{prj.location}/**.natvis" } includedirs From a197ae842ccb379f962445579388c5c5a1517894 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 25 Sep 2022 21:46:57 +0800 Subject: [PATCH 202/793] Fixed crash on AMD GPUs resulting from Nvidia treating UniformBuffers and UniformBuffersDynamic as the same --- SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index b862ec09..91112496 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -39,7 +39,8 @@ namespace SHADE std::vector Limits = { { vk::DescriptorType::eCombinedImageSampler, 100 }, - { vk::DescriptorType::eUniformBuffer, 100 } + { vk::DescriptorType::eUniformBuffer, 100 }, + { vk::DescriptorType::eUniformBufferDynamic, 100 } }; /// /// The Entity to render the Scripts of. - static void RenderScriptsInInspector(Entity entity); + static void RenderScriptsInInspector(Entity entity); + /// + /// Renders a dropdown button that allows for the addition of PlushieScripts + /// onto the specified Entity. + /// + /// The Entity to add PlushieScripts to. + static void RenderScriptAddButton(Entity entity); private: /*-----------------------------------------------------------------------------*/ diff --git a/TempScriptsFolder/TestScript.cs b/TempScriptsFolder/TestScript.cs index 8159a78e..185b543e 100644 --- a/TempScriptsFolder/TestScript.cs +++ b/TempScriptsFolder/TestScript.cs @@ -2,6 +2,9 @@ using SHADE; public class TestScript : Script { + public double Speed = 1.0; + public Vector3 ATestVector; + public bool ABoolean; private Transform Transform; private double time = 0.0; public TestScript(GameObject gameObj) : base(gameObj) {} @@ -21,7 +24,7 @@ public class TestScript : Script } protected override void update() { - time += 0.16; + time += Speed * 0.16; Transform.GlobalPosition = new Vector3(System.Math.Sin(time), System.Math.Cos(time), 0.0f); } protected override void onDestroy() From 766abbc0eca47f6e8fafb30bdb3fdfcaa34f1add Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Wed, 28 Sep 2022 07:43:37 +0800 Subject: [PATCH 262/793] #comment Added camera component and system --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 130 ++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraComponent.h | 85 ++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 95 +++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 40 ++++++ .../src/ECS_Base/Components/SHComponent.h | 5 +- 5 files changed, 354 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/Camera/SHCameraComponent.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraComponent.h create mode 100644 SHADE_Engine/src/Camera/SHCameraSystem.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraSystem.h diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp new file mode 100644 index 00000000..9b84081f --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -0,0 +1,130 @@ +#include "SHpch.h" +#include "SHCameraComponent.h" + + +namespace SHADE +{ + SHCameraComponent::SHCameraComponent() + :yaw(0.0f), pitch(0.0f), roll(0.0f) + , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(1.0f) + , perspProj(false), dirtyView(true), dirtyProj(true) + , viewMatrix(), projMatrix() + , position() + { + + } + + SHCameraComponent::~SHCameraComponent() + { + } + + void SHCameraComponent::SetYaw(float yaw) noexcept + { + this->yaw = yaw; + dirtyView = true; + } + + void SHCameraComponent::SetPitch(float pitch) noexcept + { + this->pitch = pitch; + dirtyView = true; + } + + void SHCameraComponent::SetRoll(float roll) noexcept + { + this->roll = roll; + dirtyView = true; + } + void SHCameraComponent::SetPositionX(float x) noexcept + { + position[0] = x; + dirtyView = true; + } + void SHCameraComponent::SetPositionY(float y) noexcept + { + position[1] = y; + dirtyView = true; + } + void SHCameraComponent::SetPositionZ(float z) noexcept + { + position[2] = z; + dirtyView = true; + } + void SHCameraComponent::SetPosition(float x,float y, float z) noexcept + { + position[0] = x; + position[1] = y; + position[2] = z; + dirtyView = true; + } + void SHCameraComponent::SetPosition(SHVec3& pos) noexcept + { + this->position = pos; + dirtyView = true; + } + + void SHCameraComponent::SetWidth(float width) noexcept + { + this->width = width; + dirtyProj = true; + } + + + void SHCameraComponent::SetHeight(float height) noexcept + { + this->height = height; + dirtyProj = true; + } + + void SHCameraComponent::SetNear(float znear) noexcept + { + this->zNear = znear; + dirtyProj = true; + } + + void SHCameraComponent::SetFar(float zFar) noexcept + { + this->zFar = zFar; + dirtyProj = true; + } + + void SHCameraComponent::SetFOV(float fov) noexcept + { + this->fov = fov; + dirtyProj = true; + } + + float SHCameraComponent::GetYaw() const noexcept + { + return yaw; + } + + float SHCameraComponent::GetPitch() const noexcept + { + return pitch; + } + float SHCameraComponent::GetRoll() const noexcept + { + return roll; + } + float SHCameraComponent::GetAspectRatio() const noexcept + { + return width/height; + } + + float SHCameraComponent::GetFOV() const noexcept + { + return fov; + } + + const SHMatrix& SHCameraComponent::GetViewMatrix() const noexcept + { + return viewMatrix; + } + + const SHMatrix& SHCameraComponent::GetProjMatrix() const noexcept + { + return projMatrix; + } + +} diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h new file mode 100644 index 00000000..acfc9740 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -0,0 +1,85 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" +#include "Math/Vector/SHVec3.h" +#include "Math/SHMatrix.h" +#include "SH_API.h" + +namespace SHADE +{ + + class SH_API SHCameraComponent : public SHComponent + { + private: + + float yaw; + float pitch; + float roll; + + float width; + float height; + float zNear; + float zFar; + float fov; + + bool dirtyView; + bool dirtyProj; + + + SHMatrix viewMatrix; + SHMatrix projMatrix; + SHVec3 position; + + bool perspProj; + + + + + public: + friend class SHCameraSystem; + + SHCameraComponent(); + ~SHCameraComponent(); + + + //Getters and setters. + void SetYaw(float yaw) noexcept; + void SetPitch(float pitch) noexcept; + void SetRoll(float roll) noexcept; + void SetPositionX(float x) noexcept; + void SetPositionY(float y) noexcept; + void SetPositionZ(float z) noexcept; + void SetPosition(float x, float y, float z) noexcept; + void SetPosition(SHVec3& pos) noexcept; + + void SetWidth(float width) noexcept; + void SetHeight(float height) noexcept; + void SetNear(float znear) noexcept; + void SetFar(float zfar) noexcept; + void SetFOV(float fov) noexcept; + + + + float GetYaw() const noexcept; + float GetPitch() const noexcept; + float GetRoll() const noexcept; + + float GetAspectRatio() const noexcept; + float GetFOV() const noexcept; + + const SHMatrix& GetViewMatrix() const noexcept; + const SHMatrix& GetProjMatrix() const noexcept; + + + float movementSpeed; + SHVec3 turnSpeed; + + protected: + + + + + }; + + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp new file mode 100644 index 00000000..24d96028 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -0,0 +1,95 @@ +#include "SHpch.h" +#include "SHCameraSystem.h" +#include "Math/SHMathHelpers.h" +#include "Input/SHInputManagerSystem.h" + + + +namespace SHADE +{ + + void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept + { + SHCameraSystem* system = static_cast(GetSystem()); + + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::A)) + { + system->editorCamera.SetPositionX(system->editorCamera.position[0] - dt * system->editorCamera.movementSpeed); + + } + system->UpdateCameraComponent(system->editorCamera); + } + + void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept + { + if (camera.dirtyView) + { + SHVec3 target{ 0.0f,0.0f,1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(right, view); + + camera.viewMatrix = SHMatrix::Identity; + camera.viewMatrix(0, 0) = UP[0]; + camera.viewMatrix(1, 0) = UP[1]; + camera.viewMatrix(2, 0) = UP[2]; + camera.viewMatrix(0, 1) = right[0]; + camera.viewMatrix(1, 1) = right[1]; + camera.viewMatrix(2, 1) = right[2]; + camera.viewMatrix(0, 2) = view[0]; + camera.viewMatrix(1, 2) = view[1]; + camera.viewMatrix(2, 2) = view[2]; + camera.viewMatrix(3, 0) = -UP.Dot(camera.position); + camera.viewMatrix(3, 1) = -right.Dot(camera.position); + camera.viewMatrix(3, 2) = -view.Dot(camera.position); + + camera.dirtyView = false; + } + if (camera.dirtyProj == true) + { + if (camera.perspProj == true) + { + const float ASPECT_RATIO = camera.GetAspectRatio(); + const float TAN_HALF_FOV = tan(camera.fov * 0.5f); + camera.projMatrix = SHMatrix::Identity; + camera.projMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); + camera.projMatrix(1, 1) = 1.0f / TAN_HALF_FOV; + camera.projMatrix(2, 2) = camera.zFar / (camera.zFar - camera.zNear); + camera.projMatrix(2, 3) = 1.0f; + camera.projMatrix(3, 2) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); + + camera.dirtyProj = false; + } + else + { + const float R = camera.width * 0.5f; + const float L = -R; + const float T = camera.height * 0.5f; + const float B = -T; + + camera.projMatrix = SHMatrix::Identity; + camera.projMatrix(0, 0) = 2.0f / (R - L); + camera.projMatrix(1, 1) = 2.0f / (B - T); + camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); + camera.projMatrix(3, 0) = -(R + L) / (R - L); + camera.projMatrix(3, 1) = -(B + T) / (B - T); + camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); + + camera.dirtyProj = false; + } + } + } + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h new file mode 100644 index 00000000..7742078d --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -0,0 +1,40 @@ +#pragma once + +#include "ECS_Base/System/SHSystem.h" +#include "SHCameraComponent.h" +#include "ECS_Base/System/SHSystemRoutine.h" + + +namespace SHADE +{ + class SHCameraSystem :public SHSystem + { + private: + //A camera component that represents editor camera. + //This is not tied to any entity. Hence this EID should not be used. + SHCameraComponent editorCamera; + + + + public: + + class EditorCameraUpdate final : public SHSystemRoutine + { + public: + + EditorCameraUpdate() : SHSystemRoutine("Editor Camera Update", true) { }; + virtual void Execute(double dt) noexcept override final; + + }; + friend class EditorCameraUpdate; + + + protected: + + void UpdateCameraComponent(SHCameraComponent& camera) noexcept; + + }; + + + +} diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h index aba3ba51..865f3078 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h @@ -47,6 +47,9 @@ namespace SHADE { } + + + public: //Whether or not this component is active. //Systems using this component should are responsible for checking the active state of the component before running their functionality. @@ -58,7 +61,7 @@ namespace SHADE * \return uint32_t * The entityID that this component belongs to. ***************************************************************************/ - uint32_t GetEID()const + uint32_t GetEID()const noexcept { return this->entityID; } From d9cdf26098b710e2219a243289bfb19409fd4ba4 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 28 Sep 2022 10:28:12 +0800 Subject: [PATCH 263/793] Changed depth buffer format --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index ad25dcdb..be597c44 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -135,7 +135,7 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL, windowDims.first, windowDims.second, swapchain->GetDepthFormat()); + worldRenderGraph->AddResource("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); From a2311a473e3933eb8e3d19d47728b782414d844b Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 28 Sep 2022 10:29:42 +0800 Subject: [PATCH 264/793] Auto stash before merge of "SP3-1-Rendering" and "origin/SP3-1-Rendering" --- SHADE_Application/src/Scenes/SBTestScene.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index b41842e7..08deee3c 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -126,6 +126,7 @@ namespace Sandbox auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); + transform.SetWorldPosition({1.0f, 1.0f, 1.0f}); transform.SetWorldRotation(0.0f, 0.0f + rotation, 0.0f); rotation += dt * 0.2f; From a08b12381457c3f26910926f1ab1ab471fdf05e4 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 28 Sep 2022 13:34:35 +0800 Subject: [PATCH 265/793] Added reactphysics to SHADE_Application premake file --- SHADE_Application/premake5.lua | 3 +- .../src/Application/SBApplication.cpp | 31 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index b34b06fa..27910231 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -35,7 +35,8 @@ project "SHADE_Application" "%{IncludeDir.VMA}/include", "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", "%{IncludeDir.RTTR}/include", - "%{IncludeDir.tinyddsloader}" + "%{IncludeDir.tinyddsloader}", + "%{IncludeDir.reactphysics3d}\\include" } externalwarnings "Off" diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 20aa3b5a..82ca0f1c 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -17,16 +17,25 @@ #define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN 1 #include -#include "Scripting/SHScriptEngine.h" + #include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" + +// Managers #include "ECS_Base/Managers/SHEntityManager.h" -#include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" -#include "Math/Transform/SHTransformSystem.h" + +// Systems #include "Input/SHInputManagerSystem.h" +#include "Scripting/SHScriptEngine.h" +#include "Physics/SHPhysicsSystem.h" +#include "Math/Transform/SHTransformSystem.h" + +// Components +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Math/Transform/SHTransformComponent.h" #include "Scenes/SBTestScene.h" -#include "Math/Transform/SHTransformComponent.h" + #include "Assets/SHAssetManager.h" @@ -51,31 +60,33 @@ namespace Sandbox // Create Systems SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); - // TODO(Diren): Create Physics System here + SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); SHADE::SHSystemManager::CreateSystem(); // Create Routines + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - // TODO(Diren): Register Physics System & Routines here + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); - - SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); //TODO: REMOVE AFTER PRESENTATION SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); From d9582cd0bdbe8793d550f5844c7dccd5452b3f41 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 28 Sep 2022 14:47:50 +0800 Subject: [PATCH 266/793] Fixed first instance in MDI call being wrong --- SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index ed8aab64..de77004b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -270,7 +270,7 @@ namespace SHADE .instanceCount = static_cast(subBatch.Renderables.size()), .firstIndex = subBatch.Mesh->FirstIndex, .vertexOffset = subBatch.Mesh->FirstVertex, - .firstInstance = nextInstanceIndex + .firstInstance = nextInstanceIndex++ }); // Fill in buffers (CPU) From 3730c2125f5498273325af83387b85bec3106b59 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 28 Sep 2022 15:28:59 +0800 Subject: [PATCH 267/793] Modified script inspectors to use the vector widgets from SHEditorWidgets. SHEditorWidget is now a static class. --- .../Inspector/SHEditorComponentView.hpp | 6 +- .../Inspector/SHEditorInspector.cpp | 2 +- SHADE_Engine/src/Editor/SHEditorUI.cpp | 94 +++--- SHADE_Engine/src/Editor/SHEditorUI.h | 13 +- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 289 +++++++++--------- 5 files changed, 186 insertions(+), 218 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 080cbf2c..d1e4a74e 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -45,7 +45,7 @@ namespace SHADE if (!component) return; auto componentType = rttr::type::get(*component); - CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -57,11 +57,11 @@ namespace SHADE if (type == rttr::type::get()) { - DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }); } else if (type == rttr::type::get()) { - DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); } } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index ed4792de..9d7ffadd 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -47,7 +47,7 @@ namespace SHADE SHEntity* entity = SHEntityManager::GetEntityByID(eid); ImGui::TextColored(ImGuiColors::green, "EID: %zu", eid); - CheckBox("##IsActive", [entity]()->bool {return entity->GetActive(); }, [entity](bool const& active) {entity->SetActive(active); }); + SHEditorWidgets::CheckBox("##IsActive", [entity]()->bool {return entity->GetActive(); }, [entity](bool const& active) {entity->SetActive(active); }); ImGui::SameLine(); ImGui::InputText("##EntityName", &entity->name); diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 16e06f09..65b65827 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -15,6 +15,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHEditorUI.h" // External Dependencies #include +#include "SHEditorWidgets.hpp" namespace SHADE { @@ -136,18 +137,24 @@ namespace SHADE bool SHEditorUI::InputCheckbox(const std::string& label, bool& value) { - return ImGui::Checkbox(label.c_str(), &value); + ImGui::Text(label.c_str()); + ImGui::SameLine(); + return ImGui::Checkbox("#", &value); } bool SHEditorUI::InputInt(const std::string& label, int& value) { - return ImGui::InputInt(label.c_str(), &value, + ImGui::Text(label.c_str()); + ImGui::SameLine(); + return ImGui::InputInt("#", &value, 1, 10, ImGuiInputTextFlags_EnterReturnsTrue); } bool SHEditorUI::InputUnsignedInt(const std::string& label, unsigned int& value) { int signedVal = static_cast(value); - const bool CHANGED = InputInt(label, signedVal); + ImGui::Text(label.c_str()); + ImGui::SameLine(); + const bool CHANGED = InputInt("#", signedVal); if (CHANGED) { signedVal = std::clamp(signedVal, 0, std::numeric_limits::max()); @@ -157,19 +164,25 @@ namespace SHADE } bool SHEditorUI::InputFloat(const std::string& label, float& value) { - return ImGui::InputFloat(label.c_str(), &value, + ImGui::Text(label.c_str()); + ImGui::SameLine(); + return ImGui::InputFloat("#", &value, 0.1f, 1.0f, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } bool SHEditorUI::InputDouble(const std::string& label, double& value) { - return ImGui::InputDouble(label.c_str(), &value, + ImGui::Text(label.c_str()); + ImGui::SameLine(); + return ImGui::InputDouble("#", &value, 0.1, 1.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } bool SHEditorUI::InputAngle(const std::string& label, double& value) { - return ImGui::InputDouble(label.c_str(), &value, + ImGui::Text(label.c_str()); + ImGui::SameLine(); + return ImGui::InputDouble("#", &value, 1.0, 45.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -177,7 +190,9 @@ namespace SHADE bool SHEditorUI::InputSlider(const std::string& label, double min, double max, double& value) { float val = static_cast(value); - const bool CHANGED = ImGui::SliderFloat(label.c_str(), &val, + ImGui::Text(label.c_str()); + ImGui::SameLine(); + const bool CHANGED = ImGui::SliderFloat("#", &val, static_cast(min), static_cast(max), "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); @@ -186,70 +201,27 @@ namespace SHADE value = val; } - return CHANGED; } bool SHEditorUI::InputVec2(const std::string& label, SHVec2& value) { - float vec[2] = - { - static_cast(value.x), - static_cast(value.y) - }; - const bool CHANGED = ImGui::InputFloat2(label.c_str(), vec, "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - if (CHANGED) - { - value.x = vec[0]; - value.y = vec[1]; - } - return CHANGED; + static const std::vector COMPONENT_LABELS = { "X", "Y" }; + return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y }); } - bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value) + bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value, float speed) { - float vec[3] = - { - static_cast(value.x), - static_cast(value.y), - static_cast(value.z) - }; - const bool CHANGED = ImGui::InputFloat3(label.c_str(), vec, "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - if (CHANGED) - { - value.x = vec[0]; - value.y = vec[1]; - value.z = vec[2]; - } - return CHANGED; - } - - bool SHEditorUI::InputSliderVec3(const std::string& label, double min, double max, SHVec3& value) - { - float vec[3] = - { - static_cast(value.x), - static_cast(value.y), - static_cast(value.z) - }; - const bool CHANGED = ImGui::SliderFloat3(label.c_str(), vec, - static_cast(min), static_cast(max), "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - if (CHANGED) - { - value.x = vec[0]; - value.y = vec[1]; - value.z = vec[2]; - } - return CHANGED; + static const std::vector COMPONENT_LABELS = { "X", "Y", "Z"}; + return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y, &value.z }, speed, "%.3f"); } bool SHEditorUI::InputTextField(const std::string& label, std::string& value) { std::array buffer = { '\0' }; strcpy_s(buffer.data(), TEXT_FIELD_MAX_LENGTH, value.c_str()); - const bool CHANGED = ImGui::InputText(label.c_str(), &buffer[0], TEXT_FIELD_MAX_LENGTH); + ImGui::Text(label.c_str()); + ImGui::SameLine(); + const bool CHANGED = ImGui::InputText("#", &buffer[0], TEXT_FIELD_MAX_LENGTH); if (CHANGED) { value = std::string(buffer.data(), buffer.data() + TEXT_FIELD_MAX_LENGTH); @@ -259,11 +231,13 @@ namespace SHADE bool SHEditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames) { - // Clamp input value const std::string& INITIAL_NAME = v >= static_cast(enumNames.size()) ? "Unknown" : enumNames[v]; bool b = false; - if (ImGui::BeginCombo(label.c_str(), INITIAL_NAME.c_str(), ImGuiComboFlags_None)) + + ImGui::Text(label.c_str()); + ImGui::SameLine(); + if (ImGui::BeginCombo("#", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) { for (int i = 0; i < enumNames.size(); ++i) { diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index 06768b87..13468215 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -244,18 +244,7 @@ namespace SHADE /// Label used to identify this widget. /// Reference to the variable to store the result. /// True if the value was changed. - static bool InputVec3(const std::string& label, SHVec3& value); - /// - /// Creates a 3x double slider field widget for Vector3 input. - ///
    - /// Wraps up ImGui::InputSliderFloat3(). - ///
    - /// Label used to identify this widget. - /// Minimum value of the slider. - /// Maximum value of the slider. - /// Reference to the variable to store the result. - /// True if the value was changed. - static bool InputSliderVec3(const std::string& label, double min, double max, SHVec3& value); + static bool InputVec3(const std::string& label, SHVec3& value, float speed = 0.1f); ///
    /// The Entity to render the Scripts of. void RenderScriptsInInspector(EntityID entity) const; + /// + /// Performs an undo for script inspector changes if it exists. + /// + void UndoScriptInspectorChanges() const; + /// + /// Performs a redo for script inspector changes if it exists. + /// + void RedoScriptInspectorChanges() const; /*-----------------------------------------------------------------------------*/ /* Static Utility Functions */ @@ -243,9 +251,8 @@ namespace SHADE CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; - // Delegates - /*ECS::EntityEvent::Delegate onEntityCreate; - ECS::EntityEvent::Delegate onEntityDestroy;*/ + CsFuncPtr csEditorUndo = nullptr; + CsFuncPtr csEditorRedo = nullptr; /*-----------------------------------------------------------------------------*/ /* Event Handler Functions */ diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 9724c296..c2f47aa2 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -30,7 +30,8 @@ project "SHADE_Managed" "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", "%{IncludeDir.yamlcpp}", - "%{IncludeDir.RTTR}/include", + "%{IncludeDir.RTTR}/include", + "%{IncludeDir.dotnet}\\include", "%{wks.location}/SHADE_Engine/src" } diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 73d52d14..735f8c2c 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -16,6 +16,8 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" // Primary Header #include "Editor/Editor.hxx" +// STL Includes +#include // External Dependencies #include "Editor/SHEditorUI.h" // Project Headers @@ -25,6 +27,8 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Debug.hxx" #include "Serialisation/ReflectionUtilities.hxx" #include "Editor/IconsMaterialDesign.h" +#include "Editor/Command/SHCommandManager.h" +#include "Editor/Command/SHCommand.hpp" // Using Directives using namespace System; @@ -48,9 +52,11 @@ using namespace System::Collections::Generic; (field->FieldType == MANAGED_TYPE::typeid) \ { \ NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ + NATIVE_TYPE oldVal = val; \ if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ { \ field->SetValue(object, val); \ + registerUndoAction(object, field, val, oldVal); \ } \ } \ /// @@ -69,9 +75,11 @@ using namespace System::Collections::Generic; (field->FieldType == MANAGED_TYPE::typeid) \ { \ NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ + NATIVE_TYPE oldVal = val; \ if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ { \ field->SetValue(object, Convert::ToCLI(val)); \ + registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); \ } \ } \ @@ -105,26 +113,43 @@ namespace SHADE SAFE_NATIVE_CALL_END_N("SHADE_Managed.Editor.RenderScriptsInInspector") } - void Editor::RenderScriptAddButton(Entity entity) - { - // Get list of Scripts - auto scriptTypes = ScriptStore::GetAvailableScriptList(); + void Editor::RenderScriptAddButton(Entity entity) + { + // Get list of Scripts + auto scriptTypes = ScriptStore::GetAvailableScriptList(); - // Define pop up - if (SHEditorUI::BeginMenu("Add Script", ICON_MD_LIBRARY_ADD)) - { - for each (Type ^ type in scriptTypes) - { - if (SHEditorUI::Selectable(Convert::ToNative(type->Name))) - { - // Add the script - ScriptStore::AddScriptViaName(entity, type->Name); - } - } + // Define pop up + if (SHEditorUI::BeginMenu("Add Script", ICON_MD_LIBRARY_ADD)) + { + for each (Type ^ type in scriptTypes) + { + if (SHEditorUI::Selectable(Convert::ToNative(type->Name))) + { + // Add the script + ScriptStore::AddScriptViaName(entity, type->Name); + } + } - SHEditorUI::EndMenu(); - } - } + SHEditorUI::EndMenu(); + } + } + + /*---------------------------------------------------------------------------------*/ + /* UndoRedoStack Functions */ + /*---------------------------------------------------------------------------------*/ + void Editor::Undo() + { + SAFE_NATIVE_CALL_BEGIN + actionStack.Undo(); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.Editor.Undo") + } + + void Editor::Redo() + { + SAFE_NATIVE_CALL_BEGIN + actionStack.Redo(); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.Editor.Redo") + } /*---------------------------------------------------------------------------------*/ /* Helper Functions */ @@ -192,9 +217,11 @@ namespace SHADE } int val = safe_cast(field->GetValue(object)); + int oldVal = val; if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) { field->SetValue(object, val); + registerUndoAction(object, field, val, oldVal); } } else if RENDER_FIELD_CASTED(Vector2, SHVec2, InputVec2) @@ -210,9 +237,11 @@ namespace SHADE // Actual Field std::string val = Convert::ToNative(stringVal); + std::string oldVal = val; if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val)) { field->SetValue(object, Convert::ToCLI(val)); + registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } } @@ -231,4 +260,18 @@ namespace SHADE } } + void Editor::registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData) + { + // Create command and add it into the undo stack + UndoRedoStack::Command cmd; + cmd.Field = field; + cmd.Object = object; + cmd.NewData = newData; + cmd.OldData = oldData; + actionStack.Add(cmd); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); + } + } diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 188da660..c4800645 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Engine/Entity.hxx" #include "Scripts/Script.hxx" +#include "UndoRedoStack.hxx" namespace SHADE { @@ -36,15 +37,26 @@ namespace SHADE /// rendering code. /// /// The Entity to render the Scripts of. - static void RenderScriptsInInspector(Entity entity); - /// - /// Renders a dropdown button that allows for the addition of PlushieScripts - /// onto the specified Entity. - /// - /// The Entity to add PlushieScripts to. - static void RenderScriptAddButton(Entity entity); + static void RenderScriptsInInspector(Entity entity); + /// + /// Renders a dropdown button that allows for the addition of PlushieScripts + /// onto the specified Entity. + /// + /// The Entity to add PlushieScripts to. + static void RenderScriptAddButton(Entity entity); + + /*-----------------------------------------------------------------------------*/ + /* UndoRedoStack Functions */ + /*-----------------------------------------------------------------------------*/ + static void Undo(); + static void Redo(); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + static UndoRedoStack actionStack; - private: /*-----------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------*/ @@ -73,5 +85,6 @@ namespace SHADE /// The Entity to render the Scripts of. /// The Script to render the inspector for. static void renderScriptContextMenu(Entity entity, Script^ script); + static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); }; } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack .cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx similarity index 56% rename from SHADE_Managed/src/Editor/UndoRedoStack .cxx rename to SHADE_Managed/src/Editor/UndoRedoStack.cxx index e3fdc2f0..7a3b1930 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack .cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -22,28 +22,48 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + bool UndoRedoStack::UndoActionPresent::get() + { + return commandStack->Count > 0 && latestActionIndex >= 0; + } + + bool UndoRedoStack::RedoActionPresent::get() + { + return latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1; + } + void UndoRedoStack::Add(Command command) { // Erase any other actions ahead of the current action - if (latestActionIndex < commandStack->Count - 1) + if (latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1) { - commandStack->RemoveRange(latestActionIndex + 1, commandStack->Count - latestActionIndex); + commandStack->RemoveRange(latestActionIndex, commandStack->Count - latestActionIndex); } // Add the command commandStack->Add(command); - // Increment latest command - ++latestActionIndex; + // Set the latest command + latestActionIndex = commandStack->Count - 1; } - void UndoRedoStack::Undo() + void UndoRedoStack::Undo() { + if (!UndoActionPresent) + return; + Command cmd = commandStack[latestActionIndex]; + cmd.Field->SetValue(cmd.Object, cmd.OldData); + --latestActionIndex; } void UndoRedoStack::Redo() { + if (!RedoActionPresent) + return; + Command cmd = commandStack[latestActionIndex]; + cmd.Field->SetValue(cmd.Object, cmd.NewData); + ++latestActionIndex; } } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index 2db3cacb..4c525228 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -24,25 +24,52 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------*/ + /// + /// Command for the stack that represents a data modification. + /// value struct Command { public: - System::Action^ UndoAction; - System::Action^ RedoAction; - }; + System::Object^ Object; + System::Reflection::FieldInfo^ Field; + System::Object^ NewData; + System::Object^ OldData; + }; + + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// True if there is an undoable action in the stack. + /// + property bool UndoActionPresent { bool get(); } + /// + /// True if there is a redoable action in the stack. + /// + property bool RedoActionPresent { bool get(); } /*-----------------------------------------------------------------------------*/ /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - void Add(Command command); + /*-----------------------------------------------------------------------------*/ + /// + /// Adds a command onto the stack. + /// + /// + void Add(Command command); + /// + /// Undos the last added command if it exists. + /// void Undo(); - void Redo(); + /// + /// Redoes the last undo-ed command if it exists. + /// + void Redo(); private: /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ int latestActionIndex = -1; - System::Collections::Generic::List^ commandStack = gcnew System::Collections::Generic::List(); + System::Collections::Generic::List^ commandStack = gcnew System::Collections::Generic::List(); }; } From 15c39d7028f9eeea135a3af45f8a8d214df227b0 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 1 Oct 2022 22:58:19 +0800 Subject: [PATCH 312/793] Removed mixed tabs and spaces --- SHADE_Engine/src/Scripting/SHScriptEngine.h | 12 +++++------ SHADE_Managed/src/Editor/UndoRedoStack.cxx | 24 ++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 0d2c0c96..239d6b90 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -175,10 +175,10 @@ namespace SHADE /// Performs an undo for script inspector changes if it exists. ///
    /// Creates a text field widget for string input. ///
    diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 4a934e8c..9bdd545c 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -12,6 +12,7 @@ #include "Math/SHMath.h" #include "Command/SHCommandManager.h" #include "SHImGuiHelpers.hpp" +#include "SH_API.h" //#==============================================================# //|| Library Includes || @@ -26,162 +27,166 @@ namespace SHADE //#==============================================================# //|| Custom Widgets || //#==============================================================# - static bool Splitter(bool verticalSplit, float thickness, float* size1, float* size2, float minSize1, float minSize2, float splitterAxisSize = -1.0f) + class SH_API SHEditorWidgets { - ImGuiWindow* window = ImGui::GetCurrentWindow(); - const ImGuiID id = window->GetID("##Splitter"); - ImRect bb; - bb.Min = window->DC.CursorPos + (verticalSplit ? ImVec2(*size1, 0.0f) : ImVec2(0.0f, *size1)); - bb.Max = bb.Min + (verticalSplit ? ImVec2(thickness, splitterAxisSize) : ImVec2(splitterAxisSize, thickness)); - return ImGui::SplitterBehavior(bb, id, verticalSplit ? ImGuiAxis_X : ImGuiAxis_Y, size1, size2, minSize1, minSize2, 0.0f); - } + public: + // Disable constructor for static class + SHEditorWidgets() = delete; - template - static bool DragN(const std::string& fieldLabel, std::vectorconst& componentLabels, - std::vector values, float speed = 0.1f, const char* displayFormat = "", T valueMin = T(), T valueMax = T(), - ImGuiSliderFlags flags = 0) - { - const ImGuiWindow* const window = ImGui::GetCurrentWindow(); - if (window->SkipItems) - return false; - - const ImGuiContext& g = *GImGui; - bool valueChanged = false; - ImGui::BeginGroup(); - ImGui::PushID(fieldLabel.c_str()); - PushMultiItemsWidthsAndLabels(componentLabels, 0.0f); - ImGui::BeginColumns("DragVecCol", 2, ImGuiOldColumnFlags_NoBorder | ImGuiOldColumnFlags_NoResize); - ImGui::SetColumnWidth(-1, 80.0f); - ImGui::Text(fieldLabel.c_str()); - ImGui::NextColumn(); - for (std::size_t i = 0; i < N; ++i) + static bool Splitter(bool verticalSplit, float thickness, float* size1, float* size2, float minSize1, float minSize2, float splitterAxisSize = -1.0f) { - ImGui::PushID(static_cast(i)); - ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); - ImGui::SetNextItemWidth(80.0f); - valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); - - const ImVec2 min = ImGui::GetItemRectMin(); - const ImVec2 max = ImGui::GetItemRectMax(); - const float spacing = g.Style.FrameRounding; - const float halfSpacing = spacing / 2; - - window->DrawList->AddLine({ min.x + spacing, max.y - halfSpacing }, { max.x - spacing, max.y - halfSpacing }, - ImGuiColors::colors[i], 4); - - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); + ImGuiWindow* window = ImGui::GetCurrentWindow(); + const ImGuiID id = window->GetID("##Splitter"); + ImRect bb; + bb.Min = window->DC.CursorPos + (verticalSplit ? ImVec2(*size1, 0.0f) : ImVec2(0.0f, *size1)); + bb.Max = bb.Min + (verticalSplit ? ImVec2(thickness, splitterAxisSize) : ImVec2(splitterAxisSize, thickness)); + return ImGui::SplitterBehavior(bb, id, verticalSplit ? ImGuiAxis_X : ImGuiAxis_Y, size1, size2, minSize1, minSize2, 0.0f); + } + + template + static bool DragN(const std::string& fieldLabel, std::vectorconst& componentLabels, + std::vector values, float speed = 0.1f, const char* displayFormat = "", T valueMin = T(), T valueMax = T(), + ImGuiSliderFlags flags = 0) + { + const ImGuiWindow* const window = ImGui::GetCurrentWindow(); + if (window->SkipItems) + return false; + + const ImGuiContext& g = *GImGui; + bool valueChanged = false; + ImGui::BeginGroup(); + ImGui::PushID(fieldLabel.c_str()); + PushMultiItemsWidthsAndLabels(componentLabels, 0.0f); + ImGui::BeginColumns("DragVecCol", 2, ImGuiOldColumnFlags_NoBorder | ImGuiOldColumnFlags_NoResize); + ImGui::SetColumnWidth(-1, 80.0f); + ImGui::Text(fieldLabel.c_str()); + ImGui::NextColumn(); + for (std::size_t i = 0; i < N; ++i) + { + ImGui::PushID(static_cast(i)); + ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); + ImGui::SetNextItemWidth(80.0f); + valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); + + const ImVec2 min = ImGui::GetItemRectMin(); + const ImVec2 max = ImGui::GetItemRectMax(); + const float spacing = g.Style.FrameRounding; + const float halfSpacing = spacing / 2; + + window->DrawList->AddLine({ min.x + spacing, max.y - halfSpacing }, { max.x - spacing, max.y - halfSpacing }, + ImGuiColors::colors[i], 4); + + ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); + ImGui::PopID(); + ImGui::PopItemWidth(); + } + ImGui::EndColumns(); ImGui::PopID(); - ImGui::PopItemWidth(); + ImGui::EndGroup(); + + return valueChanged; } - ImGui::EndColumns(); - ImGui::PopID(); - ImGui::EndGroup(); - - return valueChanged; - } - - static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, - ImGuiSliderFlags flags = 0) - { - SHVec2 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, {&values.x, &values.y}, speed, displayFormat, valueMin, valueMax, flags)) + + static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) { - changed = true; + SHVec2 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; } - - if (changed) + + static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if(ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHVec3 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; } - - return changed; - } - - static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, - ImGuiSliderFlags flags = 0) - { - SHVec3 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z}, speed, displayFormat, valueMin, valueMax, flags)) + + static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) { - changed = true; + SHVec4 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z, &values.w}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; } - - if (changed) + + //#==============================================================# + //|| Widget Extensions || + //#==============================================================# + + static bool CheckBox(std::string const& label, std::function get, std::function set) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if(ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + bool value = get(); + if (ImGui::Checkbox(label.c_str(), &value)) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + return true; + } + return false; } - - return changed; - } - - static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, - ImGuiSliderFlags flags = 0) - { - SHVec4 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z, &values.w}, speed, displayFormat, valueMin, valueMax, flags)) + + template + static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) { - changed = true; - } - - if (changed) - { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if(ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - } - - return changed; - } - - //#==============================================================# - //|| Widget Extensions || - //#==============================================================# - - static bool CheckBox(std::string const& label, std::function get, std::function set) - { - bool value = get(); - if (ImGui::Checkbox(label.c_str(), &value)) - { - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + T type = get(); + for (size_t i = 0; i < listTypes.size(); i++) + { + if (ImGui::RadioButton(listLabels[i].c_str(), type == listTypes[i])) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); + } + ImGui::SameLine(); + } return true; } - return false; - } - - template - static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) - { - T type = get(); - for (size_t i = 0; i < listTypes.size(); i++) - { - if (ImGui::RadioButton(listLabels[i].c_str(), type == listTypes[i])) - { - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); - } - ImGui::SameLine(); - } - return true; - } - - - + }; }//namespace SHADE From 2df9252e17f05fad7fb58ee8d8b206054982414c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 28 Sep 2022 15:31:37 +0800 Subject: [PATCH 268/793] Fixed material desc set binding --- SHADE_Application/src/Scenes/SBTestScene.cpp | 9 +++++---- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 14 +++++++------- TempShaderFolder/TestCubeFs.glsl | 4 +++- TempShaderFolder/TestCubeFs.spv | Bin 1016 -> 1344 bytes 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 08deee3c..cbcedd2b 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -71,7 +71,7 @@ namespace Sandbox customMat->SetProperty("data.color", SHVec4(0.0f, 1.0f, 1.0f, 1.0f)); // Create Stress Test Objects - static const SHVec3 TEST_OBJ_SCALE = { 0.05f, 0.05f, 0.05f }; + static const SHVec3 TEST_OBJ_SCALE = { 4.0f, 4.0f, 4.0f }; constexpr int NUM_ROWS = 2; constexpr int NUM_COLS = 2; static const SHVec3 TEST_OBJ_SPACING = { 20.0f, 20.0f, 20.0f }; @@ -98,10 +98,11 @@ namespace Sandbox auto& renderable = *SHComponentManager::GetComponent_s(entity); auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = handles.front(); + renderable.Mesh = handles.back(); renderable.SetMaterial(customMat); - ////transform.SetLocalScale(TEST_OBJ_SCALE); + transform.SetLocalScale(TEST_OBJ_SCALE); + transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); //stressTestObjects.emplace_back(entity); @@ -126,7 +127,7 @@ namespace Sandbox auto& transform = *SHADE::SHComponentManager::GetComponent_s(testObj); - transform.SetWorldPosition({1.0f, 1.0f, 1.0f}); + transform.SetWorldPosition({1.0f, 1.0f, -1.0f}); transform.SetWorldRotation(0.0f, 0.0f + rotation, 0.0f); rotation += dt * 0.2f; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index de77004b..b1cd2cd3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -341,13 +341,13 @@ namespace SHADE cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); if (matPropsDescSet[frameIndex]) { - cmdBuffer->BindDescriptorSet - ( - matPropsDescSet[frameIndex], - vk::PipelineBindPoint::eGraphics, - 0, - dynamicOffset - ); + cmdBuffer->BindDescriptorSet + ( + matPropsDescSet[frameIndex], + vk::PipelineBindPoint::eGraphics, + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + dynamicOffset + ); } cmdBuffer->DrawMultiIndirect(drawDataBuffer[frameIndex], static_cast(drawData.size())); } diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index 4940782a..a3203df6 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -32,6 +32,8 @@ layout(location = 0) out vec4 outColor; //layout(binding = 3) uniform sampler2D glossinessMap; //layout(binding = 4) uniform sampler2D samplerRoughnessMap; +layout (set = 0, binding = 1) uniform sampler2D textures[]; + struct MatPropData { vec4 color; @@ -80,6 +82,6 @@ void main() //outColor.rgb = pow(outColor.rgb, vec3(1.0f / gamma)); //outColor.a = diffuseColor.a; - outColor = MatProp.data[0].color; + outColor = texture(textures[0], In.uv) ; //outColor = vec4 (1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv index 04c254dda6d1eb4bf938a4773236f6c0ee966360..6291117a4ee1b3f75e0d7574031a7842884a4142 100644 GIT binary patch literal 1344 zcmZ9KZBNud6om)&1zZF~1Vmo!f_^d~#Go-TnxK-^WDQ15^jkCR4okJPwc8T?d;TiF zn0TIU$E@DX-8=WpnRDmfX=8SO&X^g~F^lHDnb?Y%6=KYSX;-n=|Ij}e7sG?2M~5($ zOrs*gSvGT~sfb_NC}HE8d{cfyJa84zsv%Wle(F$Dj9x!He*YpIyUgacaN+pE4qYCm zXJ6c)82`)BR+Nmw*e0XWj$C;3@G!H3uhN-E=j8LpFiDd#iO$pfGW=HBI69A9uKf=C zz0=cP|0En_SvW3!#4e1Z#D&8sSEcC6QLECac~LTm%i%PkCB}4rEz_!cOv~bB8mGD1 z64Fw?#uV;*QRYq^fHlkp3t3w~zrJ$$--B%_gEPzWYI26zz0oAm477f0i+6dNy|RUs z$^;W^26b_dp<(0f!YX=V10g{MS==-xrQ~3_cio9^>v{fgEjg+j2faIKHme>S^9!4LN-7 z{(p`JwyLiY{jS*XS+8q_ejwk_dA?h6-agR(ydqrir*+Oez&16Rjw1XS`Ly|bOUwmr zz+2P#>xzLKdr;?#TEpK~zN82rjQY!p7&!IGnHPrMieez=JbL6eTP~NB^!O`pjpyetSPt_I9+>RSc^A$=glx zX7%peYfnz?eMR0A?6I_nybFf@FCi_(WBt?TEjhEH|7T({$2B=P9PYX;ryqKN!@YOp Y;Ge|du6(!}DLj$?0Y2+`82|tP literal 1016 zcmZ9KZ)?;*5XQGnbFHWSXKm{nkE?xIC`H;Lh(i5C6izDo0hVpDT%$1wNv`16^Hcdo z@cG?k<#dj@*_nCf*_qiytH^?fcFn3H#@si9xlJZtCZ}zeot|Huf!H$9 z90+FHteZ7i^t;PT68EHs(jDQ5>jIr3u^RJJMQcJN6MOafwQYUv8rON--nz^;wz~Q1 z)2{s&qf}l_ZQ;u4%uT&Le|A>8^qY8w@FdsQ$>g0)>)N*6kHXs`FTKt3MojsghihXA zmzQZV%a#GL5X=3?CZ5kw&AK;LQ8j8?ky!gM=A-LAHC6rAbxzw^#K@;TFvQr6E9zS( z8)D3V<5eh$wUtd-@%biq1*E>|aJE?*p4*d=$+VD3fBYKfs_vdOz1aoCAynfBn40JPyh3e zz0bVFzz=1?X;Fs_g{*{vR7h&cTY+$+!yqvD&T)4CI3p5>;nI{n4e4k0OiPHvj6}9 From 94a7258eb35b7854b464ffc3c27c9a6767ee8e6c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 28 Sep 2022 15:33:32 +0800 Subject: [PATCH 269/793] Context menu for the script inspector will now work even when collapsed --- SHADE_Managed/src/Editor/Editor.cxx | 29 ++++++++++++++++++++--------- SHADE_Managed/src/Editor/Editor.hxx | 6 ++++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index db49201b..629c9e65 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -142,15 +142,7 @@ namespace SHADE SHEditorUI::Indent(); { // Right Click Menu - if (SHEditorUI::BeginPopupContextItem("scriptContextMenu")) - { - if (SHEditorUI::Selectable("Delete Script", ICON_MD_DELETE)) - { - // Mark script for removal - ScriptStore::RemoveScript(entity, script); - } - SHEditorUI::EndPopup(); - } + renderScriptContextMenu(entity, script); // Go through all fields and output them auto fields = ReflectionUtilities::GetInstanceFields(script); @@ -171,6 +163,10 @@ namespace SHADE SHEditorUI::Unindent(); SHEditorUI::PopID(); } + else + { + renderScriptContextMenu(entity, script); + } SHEditorUI::PopID(); } void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) @@ -220,4 +216,19 @@ namespace SHADE } } } + + void Editor::renderScriptContextMenu(Entity entity, Script^ script) + { + // Right Click Menu + if (SHEditorUI::BeginPopupContextItem("scriptContextMenu")) + { + if (SHEditorUI::Selectable("Delete Script", ICON_MD_DELETE)) + { + // Mark script for removal + ScriptStore::RemoveScript(entity, script); + } + SHEditorUI::EndPopup(); + } + } + } diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index a38cbf79..188da660 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -67,5 +67,11 @@ namespace SHADE /// The object that contains the data of the field to render. /// static void renderFieldInInspector(System::Reflection::FieldInfo^ field, Object^ object); + /// + /// Renders a context menu when right clicked for the scripts + /// + /// The Entity to render the Scripts of. + /// The Script to render the inspector for. + static void renderScriptContextMenu(Entity entity, Script^ script); }; } From 097b1be3f7e23924fc5f562cf0ee802491aca171 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 28 Sep 2022 16:15:36 +0800 Subject: [PATCH 270/793] Added Physics System --- .../src/Application/SBApplication.cpp | 1 - .../ECS_Base/System/SHFixedSystemRoutine.h | 16 +- .../Components/SHRigidBodyComponent.cpp | 15 + .../Physics/Components/SHRigidBodyComponent.h | 10 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 446 ++++++++++++++++++ SHADE_Engine/src/Physics/SHPhysicsSystem.h | 237 ++++++++++ 6 files changed, 712 insertions(+), 13 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 82ca0f1c..fdc933b9 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -86,7 +86,6 @@ namespace Sandbox SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHComponentManager::CreateComponentSparseSet(); //TODO: REMOVE AFTER PRESENTATION SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); diff --git a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h index d9a2b510..d54d9441 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h +++ b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.h @@ -8,23 +8,19 @@ namespace SHADE { class SHFixedSystemRoutine: public SHSystemRoutine { - private: - double accumulatedTime; - double fixedTimeStep; - protected: - SHFixedSystemRoutine(double timeStep = DEFAULT_FIXED_STEP, std::string routineName = "Default Fixed Routine Name", bool editorPause = false) + double accumulatedTime; + double fixedTimeStep; + + SHFixedSystemRoutine(double timeStep = DEFAULT_FIXED_STEP, std::string routineName = "Default Fixed Routine Name", bool editorPause = false) :SHSystemRoutine(routineName, editorPause), accumulatedTime(0.0), fixedTimeStep(timeStep){} - - public: ~SHFixedSystemRoutine() = default; - virtual void Execute(double dt) noexcept; - - virtual void FixedExecute(double dt) noexcept {}; + virtual void Execute(double dt) noexcept override; + virtual void FixedExecute(double dt) noexcept {} }; diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 2de6e52a..e3989d6e 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -465,6 +465,21 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHRigidBodyComponent::SyncRP3DAndSHADE() + { + rigidBody->setType(static_cast(type)); + + rigidBody->setMass(mass); + rigidBody->setLinearDamping(drag); + rigidBody->setAngularDamping(angularDrag); + + rigidBody->enableGravity(flags & (1U << 0)); + rigidBody->setIsAllowedToSleep(flags & (1U << 1)); + SetRP3DLinearConstraints(); + SetRP3DAngularConstraints(); + } + + void SHRigidBodyComponent::SetFlag(bool flagState, int flagPos) { flagState ? flags |= (1U << flagPos) : flags &= ~(1U << flagPos); diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 69338b1e..668ab6bd 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -21,6 +21,13 @@ namespace SHADE { class SH_API SHRigidBodyComponent : public SHComponent { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + public: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -128,8 +135,6 @@ namespace SHADE float mass; float drag; float angularDrag; - - SHMatrix inertiaTensor; // rX rY rZ pX pY pZ slp g uint8_t flags; @@ -138,6 +143,7 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ + void SyncRP3DAndSHADE (); void SetFlag (bool flagState, int flagPos); void SetRP3DLinearConstraints () const ; void SetRP3DAngularConstraints () const ; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp new file mode 100644 index 00000000..537c2c70 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -0,0 +1,446 @@ +/**************************************************************************************** + * \file SHPhysicsSystem.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for the Physics System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsSystem.h" + +// Project Headers +#include "Math/Transform/SHTransformComponent.h" +#include "Scene/SHSceneManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsSystem::PhysicsPreUpdate::PhysicsPreUpdate() + : SHSystemRoutine { "Physics PreUpdate", true } + {} + + SHPhysicsSystem::PhysicsFixedUpdate::PhysicsFixedUpdate() + : SHFixedSystemRoutine { DEFAULT_FIXED_STEP, "Physics FixedUpdate", true } + {} + + SHPhysicsSystem::PhysicsPostUpdate::PhysicsPostUpdate() + : SHSystemRoutine { "Physics PostUpdate", true } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHPhysicsSystem::IsSleepingEnabled() const noexcept + { + if (world) + return world->isSleepingEnabled(); + + SHLOGV_WARNING("No physics world has been initialised!") + return false; + } + + //double SHPhysicsSystem::GetFixedUpdate() const noexcept + //{ + // return fixedUpdate; + //} + + SHVec3 SHPhysicsSystem::GetWorldGravity() const noexcept + { + SHVec3 result; + + if (world) + { + const auto RP3D_GRAVITY = world->getGravity(); + result.x = RP3D_GRAVITY.x; + result.y = RP3D_GRAVITY.y; + result.z = RP3D_GRAVITY.z; + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + + return result; + } + + uint16_t SHPhysicsSystem::GetNumberVelocityIterations() const noexcept + { + if (world) + return world->getNbIterationsVelocitySolver(); + + SHLOGV_WARNING("No physics world has been initialised!") + return 0; + } + + uint16_t SHPhysicsSystem::GetNumberPositionIterations() const noexcept + { + if (world) + return world->getNbIterationsPositionSolver(); + + SHLOGV_WARNING("No physics world has been initialised!") + return 0; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + //void SHPhysicsSystem::SetFixedUpdate(double fixedUpdateRate) noexcept + //{ + // fixedUpdate = fixedUpdateRate; + // SHLOG_INFO("Setting Physics update rate to {}", 1.0 / fixedUpdate) + //} + + void SHPhysicsSystem::SetWorldGravity(const SHVec3& gravity) const noexcept + { + if (world) + { + const rp3d::Vector3 G { gravity.x, gravity.y, gravity.z }; + world->setGravity(G); + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + } + + void SHPhysicsSystem::SetNumberVelocityIterations(uint16_t numVelIterations) const noexcept + { + if (world) + { + world->setNbIterationsVelocitySolver(numVelIterations); + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + } + + void SHPhysicsSystem::SetNumberPositionIterations(uint16_t numPosIterations) const noexcept + { + if (world) + { + world->setNbIterationsPositionSolver(numPosIterations); + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + } + + void SHPhysicsSystem::SetSleepingEnabled(bool enableSleeping) const noexcept + { + if (world) + { + world->enableSleeping(enableSleeping); + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + } + + void SHPhysicsSystem::SetWorldSettings(const WorldSettings& settings) const noexcept + { + if (world) + { + const rp3d::Vector3 G { settings.gravity.x, settings.gravity.y, settings.gravity.z }; + world->setGravity(G); + world->setNbIterationsVelocitySolver(settings.numVelocitySolverIterations); + world->setNbIterationsPositionSolver(settings.numPositionSolverIterations); + world->enableSleeping(settings.sleepingEnabled); + } + else + { + SHLOGV_WARNING("No physics world has been initialised!") + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::Init() + { + using namespace rp3d; + + // Create a physics world with the default settings + PhysicsWorld::WorldSettings settings; + settings.gravity = Vector3{ 0, -9.81, 0 }; + settings.isSleepingEnabled = true; + settings.defaultVelocitySolverNbIterations = 8; + settings.defaultPositionSolverNbIterations = 3; + + world = factory.createPhysicsWorld(settings); + + // Create component sparse sets + SHADE::SHComponentManager::CreateComponentSparseSet(); + } + + void SHPhysicsSystem::Exit() + { + factory.destroyPhysicsWorld(world); + } + + void SHPhysicsSystem::AddRigidBodyComponent(EntityID id) noexcept + { + const UpdateCommand NEW_CMD + { + .component = UpdateComponent::RIGID_BODY, + .type = UpdateType::ADD, + .entityID = id + }; + + updateQueue.push(NEW_CMD); + } + + void SHPhysicsSystem::AddColliderComponent(EntityID id) noexcept + { + const UpdateCommand NEW_CMD + { + .component = UpdateComponent::COLLIDER, + .type = UpdateType::ADD, + .entityID = id + }; + + updateQueue.push(NEW_CMD); + } + + void SHPhysicsSystem::RemoveRigidBodyComponent(EntityID id) noexcept + { + const UpdateCommand NEW_CMD + { + .component = UpdateComponent::RIGID_BODY, + .type = UpdateType::REMOVE, + .entityID = id + }; + + updateQueue.push(NEW_CMD); + } + + void SHPhysicsSystem::RemoveColliderComponent(EntityID id) noexcept + { + const UpdateCommand NEW_CMD + { + .component = UpdateComponent::COLLIDER, + .type = UpdateType::REMOVE, + .entityID = id + }; + + updateQueue.push(NEW_CMD); + } + + void SHPhysicsSystem::PhysicsPreUpdate::Execute([[maybe_unused]]double dt) noexcept + { + auto* system = reinterpret_cast(GetSystem()); + system->ClearUpdateQueue(); + + // Sync active states: if node or component is not active, set rp3d to inactive + static const auto SYNC_ACTIVE = [](SHSceneNode* node) + { + const EntityID ENTITY_ID = node->GetEntityID(); + + // Check if has rigid body + auto const* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if(rigidBodyComponent) + { + const bool RP3D_ACTIVE = rigidBodyComponent->rigidBody->isActive(); + const bool SHADE_ACTIVE = node->IsActive() && rigidBodyComponent->isActive; + + if (RP3D_ACTIVE != SHADE_ACTIVE) + rigidBodyComponent->rigidBody->setIsActive(SHADE_ACTIVE); + } + else // Check for a collider + { + + } + }; + + const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + sceneGraph.Traverse(SYNC_ACTIVE); + } + + //void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept + //{ + // // I had to override this anyway due to needing to calculate the + // // interpolation factor right after the fixed update was done + + // auto* system = reinterpret_cast(GetSystem()); + // fixedTimeStep = 1.0 / system->fixedUpdate; + + // accumulatedTime += dt; + // int counter = 0; + + // while (accumulatedTime > fixedTimeStep) + // { + // FixedExecute(fixedTimeStep); + + // accumulatedTime -= fixedTimeStep; + // ++counter; + // } + + // stats.numSteps = counter; + + // system->interpolationFactor = accumulatedTime / fixedTimeStep; + //} + + void SHPhysicsSystem::PhysicsFixedUpdate::FixedExecute(double dt) noexcept + { + auto* system = reinterpret_cast(GetSystem()); + system->world->update(static_cast(dt)); + + system->fixedDT = fixedTimeStep; + system->accumulatedTime = accumulatedTime; + } + + void SHPhysicsSystem::PhysicsPostUpdate::Execute(double dt) noexcept + { + // Interpolate transforms for rendering + const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + sceneGraph.Traverse([](SHSceneNode* node) + { + const EntityID ENTITY_ID = node->GetEntityID(); + + // Check if has rigid body + if (auto* rb = SHComponentManager::GetComponent_s(ENTITY_ID); rb) + { + // TODO(Diren): Interpolate transforms for rendering + if (node->IsActive() && rb->isActive) + { + // Get SHADE transform + auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + SHASSERT(transformComponent != nullptr, "Transform Component missing from Entity " + std::to_string(ENTITY_ID)) + + const auto& RP3D_POS = rb->GetPosition(); + const SHVec3 SHADE_POS{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; + + const auto& SHADE_ROT = rb->GetOrientation().ToEuler(); + + transformComponent->SetWorldPosition(SHADE_POS); + transformComponent->SetWorldRotation(SHADE_ROT); + } + else // Check for a collider + { + + } + } + }); + + // TODO(Diren): Handle trigger messages for scripting + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::ClearUpdateQueue() noexcept + { + while (!updateQueue.empty()) + { + const auto& CMD = updateQueue.front(); + switch (CMD.type) + { + case UpdateType::ADD: + { + switch (CMD.component) + { + case UpdateComponent::RIGID_BODY: AddRigidBody(CMD.entityID); break; + //case UpdateComponent::COLLIDER: AddCollider(CMD.entityID); break; + default: break; + } + } + case UpdateType::REMOVE: + { + switch (CMD.component) + { + case UpdateComponent::RIGID_BODY: RemoveRigidBody(CMD.entityID); break; + //case UpdateComponent::COLLIDER: RemoveCollider(CMD.entityID); break; + default: break; + } + } + default: break; + } + + updateQueue.pop(); + } + } + + + void SHPhysicsSystem::AddRigidBody(EntityID entityID) const noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Adding a Rigidbody to the Physics World.") + #endif + + // Rigid Bodies need a transform. + auto const* transformComponent = SHComponentManager::GetComponent_s(entityID); + if (!transformComponent) + { + // NOTE: This should already be handled by the editor. + + SHLOG_INFO("Automatically adding a transform to Entity {}", entityID) + SHComponentManager::AddComponent(entityID); + transformComponent = SHComponentManager::GetComponent(entityID); + } + + const SHVec3& SHADE_WORLD_POSITION = transformComponent->GetWorldPosition(); + const rp3d::Vector3 RP3D_POSITION { SHADE_WORLD_POSITION.x, SHADE_WORLD_POSITION.y, SHADE_WORLD_POSITION.z }; + + const SHVec3& SHADE_WORLD_ROTATION = transformComponent->GetWorldRotation(); + const rp3d::Quaternion RP3D_ORIENTATION = rp3d::Quaternion::fromEulerAngles(SHADE_WORLD_ROTATION.x, SHADE_WORLD_ROTATION.y, SHADE_WORLD_ROTATION.z); + + const rp3d::Transform RP3D_TF { RP3D_POSITION, RP3D_ORIENTATION }; + + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + if (!rigidBodyComponent) + { + // NOTE: This should already be handled by the editor. + + SHLOG_INFO("Automatically adding a rigidbody to Entity {}", entityID) + SHComponentManager::AddComponent(entityID); + rigidBodyComponent = SHComponentManager::GetComponent(entityID); + } + + rigidBodyComponent->rigidBody = world->createRigidBody(RP3D_TF); + rigidBodyComponent->SyncRP3DAndSHADE(); + + // Reassign collider + //if (collider) + //{ + // collider. + //} + } + + void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) const noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Removing a Rigidbody from the Physics World.") + #endif + + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + if (rigidBodyComponent == nullptr) + { + SHLOG_ERROR("Entity {} does not have a rigidbody component to remove!", entityID) + return; + } + + // If a collider exists, remake the colliders with a collision body + + world->destroyRigidBody(rigidBodyComponent->rigidBody); + rigidBodyComponent->rigidBody = nullptr; // this should be redundant + } + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h new file mode 100644 index 00000000..dac6836a --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -0,0 +1,237 @@ +/**************************************************************************************** + * \file SHPhysicsSystem.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for the Physics System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include +#include + +#include + +// Project Headers +#include "Math/SHQuaternion.h" +#include "Components/SHRigidBodyComponent.h" + +#include "Scene/SHSceneGraph.h" +#include "ECS_Base/System/SHSystemRoutine.h" +#include "ECS_Base/System/SHFixedSystemRoutine.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHPhysicsSystem : public SHSystem + { + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + struct WorldSettings + { + SHVec3 gravity; + uint16_t numVelocitySolverIterations; + uint16_t numPositionSolverIterations; + bool sleepingEnabled; + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsSystem () = default; + ~SHPhysicsSystem () override = default; + + SHPhysicsSystem (const SHPhysicsSystem&) = delete; + SHPhysicsSystem (SHPhysicsSystem&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsSystem& operator= (const SHPhysicsSystem&) = delete; + SHPhysicsSystem& operator= (SHPhysicsSystem&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool IsSleepingEnabled () const noexcept; + + //[[nodiscard]] double GetFixedUpdate () const noexcept; + [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; + [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; + [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + //void SetFixedUpdate (double fixedUpdateRate) noexcept; + void SetWorldGravity (const SHVec3& gravity) const noexcept; + void SetNumberVelocityIterations (uint16_t numVelIterations) const noexcept; + void SetNumberPositionIterations (uint16_t numPosIterations) const noexcept; + void SetSleepingEnabled (bool enableSleeping) const noexcept; + + void SetWorldSettings (const WorldSettings& settings) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void Init () override; + void Exit () override; + + void AddRigidBodyComponent (EntityID id) noexcept; + void AddColliderComponent (EntityID id) noexcept; + void RemoveRigidBodyComponent (EntityID id) noexcept; + void RemoveColliderComponent (EntityID id) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* System Routines */ + /*---------------------------------------------------------------------------------*/ + + class SH_API PhysicsPreUpdate : public SHSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + PhysicsPreUpdate(); + ~PhysicsPreUpdate() = default; + + PhysicsPreUpdate(const PhysicsPreUpdate&) = delete; + PhysicsPreUpdate(PhysicsPreUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-------------------------------------------------------------------------------*/ + + PhysicsPreUpdate& operator= (const PhysicsPreUpdate&) = delete; + PhysicsPreUpdate& operator= (PhysicsPreUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + void Execute(double dt) noexcept override; + }; + + class SH_API PhysicsFixedUpdate : public SHFixedSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + PhysicsFixedUpdate(); + ~PhysicsFixedUpdate() = default; + + PhysicsFixedUpdate(const PhysicsFixedUpdate&) = delete; + PhysicsFixedUpdate(PhysicsFixedUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-------------------------------------------------------------------------------*/ + + PhysicsFixedUpdate& operator= (const PhysicsFixedUpdate&) = delete; + PhysicsFixedUpdate& operator= (PhysicsFixedUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + //void Execute (double dt) noexcept override; + void FixedExecute (double dt) noexcept override; + }; + + class SH_API PhysicsPostUpdate : public SHSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + PhysicsPostUpdate(); + ~PhysicsPostUpdate() = default; + + PhysicsPostUpdate(const PhysicsPostUpdate&) = delete; + PhysicsPostUpdate(PhysicsPostUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-------------------------------------------------------------------------------*/ + + PhysicsPostUpdate& operator= (const PhysicsPostUpdate&) = delete; + PhysicsPostUpdate& operator= (PhysicsPostUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + void Execute(double dt) noexcept override; + }; + + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class UpdateComponent { RIGID_BODY, COLLIDER }; + enum class UpdateType { ADD, REMOVE }; + + struct UpdateCommand + { + UpdateComponent component; + UpdateType type; + EntityID entityID; + }; + + struct CachedTransform + { + SHVec3 position; + SHQuaternion orientation; + }; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + //double interpolationFactor; + //double fixedUpdate; + + double accumulatedTime; + double fixedDT; + + rp3d::PhysicsCommon factory; + rp3d::PhysicsWorld* world; + + std::queue updateQueue; + std::unordered_map prevTransforms; // used for interpolation + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void ClearUpdateQueue () noexcept; + + void AddRigidBody (EntityID entityID) const noexcept; + void AddCollider (EntityID entityID) const noexcept; + void RemoveRigidBody (EntityID entityID) const noexcept; + void RemoveCollider (EntityID entityID) const noexcept; + }; + + +} // namespace SHADE \ No newline at end of file From 170ae5ac6bbe52c0601bfd6cca8236bb6f3be2f7 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 28 Sep 2022 17:06:37 +0800 Subject: [PATCH 271/793] Fixed vector subscript operators return types --- SHADE_Engine/src/Math/Vector/SHVec2.cpp | 8 ++------ SHADE_Engine/src/Math/Vector/SHVec2.h | 4 ++-- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 8 ++------ SHADE_Engine/src/Math/Vector/SHVec3.h | 4 ++-- SHADE_Engine/src/Math/Vector/SHVec4.cpp | 8 ++------ SHADE_Engine/src/Math/Vector/SHVec4.h | 4 ++-- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.cpp b/SHADE_Engine/src/Math/Vector/SHVec2.cpp index 2d2eafd2..545492cb 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec2.cpp @@ -165,7 +165,7 @@ namespace SHADE return XMVector2NotEqual(V1, V2); } - float SHVec2::operator[](int index) + float& SHVec2::operator[](int index) { if (index >= SIZE || index < 0) throw std::invalid_argument("Index out of range!"); @@ -174,11 +174,10 @@ namespace SHADE { case 0: return x; case 1: return y; - default: return 0.0f; } } - float SHVec2::operator[](size_t index) + float& SHVec2::operator[](size_t index) { if (index >= SIZE) throw std::invalid_argument("Index out of range!"); @@ -187,7 +186,6 @@ namespace SHADE { case 0: return x; case 1: return y; - default: return 0.0f; } } @@ -200,7 +198,6 @@ namespace SHADE { case 0: return x; case 1: return y; - default: return 0.0f; } } @@ -213,7 +210,6 @@ namespace SHADE { case 0: return x; case 1: return y; - default: return 0.0f; } } diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index 3e6287aa..17642126 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -81,8 +81,8 @@ namespace SHADE [[nodiscard]] bool operator== (const SHVec2& rhs) const noexcept; [[nodiscard]] bool operator!= (const SHVec2& rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); [[nodiscard]] float operator[] (int index) const; [[nodiscard]] float operator[] (size_t index) const; diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 194f7964..1bcb47b3 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -171,7 +171,7 @@ namespace SHADE return XMVector3NotEqual(V1, V2); } - float SHVec3::operator[](int index) + float& SHVec3::operator[](int index) { if (index >= SIZE || index < 0) throw std::invalid_argument("Index out of range!"); @@ -181,11 +181,10 @@ namespace SHADE case 0: return x; case 1: return y; case 2: return z; - default: return 0.0f; } } - float SHVec3::operator[](size_t index) + float& SHVec3::operator[](size_t index) { if (index >= SIZE) throw std::invalid_argument("Index out of range!"); @@ -195,7 +194,6 @@ namespace SHADE case 0: return x; case 1: return y; case 2: return z; - default: return 0.0f; } } @@ -209,7 +207,6 @@ namespace SHADE case 0: return x; case 1: return y; case 2: return z; - default: return 0.0f; } } @@ -223,7 +220,6 @@ namespace SHADE case 0: return x; case 1: return y; case 2: return z; - default: return 0.0f; } } diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index 476d7b0f..cc0e043e 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -86,8 +86,8 @@ namespace SHADE [[nodiscard]] bool operator== (const SHVec3& rhs) const noexcept; [[nodiscard]] bool operator!= (const SHVec3& rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); [[nodiscard]] float operator[] (int index) const; [[nodiscard]] float operator[] (size_t index) const; diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index 5d75af33..d1c87865 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -161,7 +161,7 @@ namespace SHADE return XMVector4NotEqual(V1, V2); } - float SHVec4::operator[](int index) + float& SHVec4::operator[](int index) { if (index >= SIZE || index < 0) throw std::invalid_argument("Index out of range!"); @@ -172,11 +172,10 @@ namespace SHADE case 1: return y; case 2: return z; case 3: return w; - default: return 0.0f; } } - float SHVec4::operator[](size_t index) + float& SHVec4::operator[](size_t index) { if (index >= SIZE) throw std::invalid_argument("Index out of range!"); @@ -187,7 +186,6 @@ namespace SHADE case 1: return y; case 2: return z; case 3: return w; - default: return 0.0f; } } @@ -202,7 +200,6 @@ namespace SHADE case 1: return y; case 2: return z; case 3: return w; - default: return 0.0f; } } @@ -217,7 +214,6 @@ namespace SHADE case 1: return y; case 2: return z; case 3: return w; - default: return 0.0f; } } diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index a4a5208a..59038065 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -80,8 +80,8 @@ namespace SHADE [[nodiscard]] bool operator== (const SHVec4& rhs) const noexcept; [[nodiscard]] bool operator!= (const SHVec4& rhs) const noexcept; - [[nodiscard]] float operator[] (int index); - [[nodiscard]] float operator[] (size_t index); + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); [[nodiscard]] float operator[] (int index) const; [[nodiscard]] float operator[] (size_t index) const; From 6ef30bc41576086c80f4013b1f156ea1e1b85100 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 28 Sep 2022 17:22:22 +0800 Subject: [PATCH 272/793] post processing copy for publish build --- SHADE_Application/premake5.lua | 2 +- SHADE_Engine/premake5.lua | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index b34b06fa..103c1844 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -81,4 +81,4 @@ project "SHADE_Application" filter "configurations:Publish" optimize "On" - defines{"_RELEASE"} + defines{"_RELEASE", "_PUBLISH"} diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 7de741b7..444dad12 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -113,6 +113,9 @@ project "SHADE_Engine" filter "configurations:Release" postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + filter "configurations:Publish" + postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + warnings 'Extra' filter "configurations:Debug" @@ -129,7 +132,7 @@ project "SHADE_Engine" filter "configurations:Publish" optimize "On" - defines{"_RELEASE"} + defines{"_RELEASE", "_PUBLISH"} links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} excludes { From bed6a144f8a349b925d7ee8aa253c5910ed63078 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 17:25:14 +0800 Subject: [PATCH 273/793] banks curr working --- Assets/Audio/Master.bank | Bin 1368 -> 140928 bytes Assets/Audio/Master.strings.bank | Bin 1704 -> 1138 bytes Assets/Audio/Music.bank | Bin 355040 -> 0 bytes Assets/Audio/SFX.bank | Bin 1647840 -> 0 bytes Assets/Audio/footsteps.bank | Bin 0 -> 136256 bytes Assets/Audio/testogg.ogg | Bin 11858 -> 0 bytes Assets/Audio/testwave.wav | Bin 195360 -> 0 bytes .../src/AudioSystem/SHAudioSystem.cpp | 15 ++++++++++----- .../Inspector/SHEditorInspector.cpp | 5 +++++ 9 files changed, 15 insertions(+), 5 deletions(-) delete mode 100644 Assets/Audio/Music.bank delete mode 100644 Assets/Audio/SFX.bank create mode 100644 Assets/Audio/footsteps.bank delete mode 100644 Assets/Audio/testogg.ogg delete mode 100644 Assets/Audio/testwave.wav diff --git a/Assets/Audio/Master.bank b/Assets/Audio/Master.bank index 4ea1e4f25c33bbe11f41d4b58541800371b1554b..a1b4e563e94f16e0fde4f0b514478a99ae3496a7 100644 GIT binary patch literal 140928 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 ?!)oQJ*Y!7E+^zU5 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

    6hwKaDs% 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

    &VNw;A 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

    &500r1kt5pQZiRd^9Wx+B#W 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

    $>*+xrVzEqSw_&}f?ACvcX^A$4NK95JpeZ9 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%0DK$(WZ8vJul<_r>$c9 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

    E_T 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

    0Y`(H1ebe$Nq-@05}vk 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

    O@n4iprNa{V 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 CB?Q=|dzuDTGm)`WC!XLgaUn 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 oey#zX<{5U}3M$8V&e zOY!uTb8CmvKvoMTDAuf7$+>9P={Yj)&QU8D?%x82C3*-?Qk=5f`CQz@gWh>#9r@}{ zT4po3s->SZggo;itF(I1WHHK{eJQON< z>l(^R3sVoL+utmAC`w&1Qj-$4p`6L`*-Y+^-a?&wH=t4zg_5JSJGF?ofuXg9{un3S zv!y;NMoF7$4A=Ri_hJG%=%74gH4hic`DX6EnRlLfdoMmN3c zPB(si{r5Rk1rpbvyPp(<`)x+L8YcP#)G}?Lje7phBhb7dKXVj?XdE$i2`e&KUH0SS2lyG~HV7TIxTI3-K170S>IsHW zi*tY|-g2ewV)%At*s48$e;Dp;6{;&{h=w}}3n-`lng{ge2=s$H-EoN?*sjMc%lmN#aMK52tJN(&qJzd&h}KFD7AMut zbca0~Yjl?=n3HX1o*aefenc!u38K-Je^j#yUFl^6JxZ!Xnt!<6sJ_`f7}9z+-RiUX zOfl@5E>^YDLxn7W!jU~*ZBT+Ii6I1}uada|IRY^i2&?ILk(fF=vY$B2Te-EpK7sT` z-61(QGs8e8i#Q_uWI-BQH76PkAL?_1o^qc(!ALiS-FSs{1{C9e-@`)Mpz{-Ui>P-D zOl{Wv`%QP}$I!?KpFZMk$(GgZHTnw6nk!TJ=)ylyhuG(paLuvS1P7|vGxXED2BHAY zJrKLZW;2kISwWhI`G|)(ms(iIKm3c)9^H&tZHw2+4xumzwj#n(WF?u$j#YZLbDKz) zdIO-G>>v!pxW6=pWPXpPrXHEA@J3NKb;!tf2$xRIr5mk;9ChP58gxvy`1Ep<%LBNl z(NCuST3jxH5r(B5#pd{4sqK~G0q&(*X3X&%ASKvofS`t0*T$YJ2b8dn;-J=>;>&%#ES;MT zv(;FJqqFOItmK|J__U#-DR>!-ggq|w&B$*){mFVIl>+h?T!aO^-&W5xO?wo_`4fq2U6%8h9u-oGkI5GgXB~JvTO6DsZcYp3d~ibI?JO30E!%}W zs%}>Lp3|5-iw>xftMG6J=HEJ$b2{qiY)a+K{=fdcv;Gz|e zmeI^?J^)|WFa(FI^Cm=e@bFL53eDElkgYv>(`Bs;oZ8B*JdQ3qxee1BI6s>st9+=t!weY$d+J|ZuEM|ACaeRKCaPM1=X!^u>rJwTg< zHb3iI(?Rgm>>E`u_<#g09cz^mW^En)@y8HjtAmW;(c*pMc9Vx1+Lm7{Gw`n#dktMg zW)AOC)=LlSv$7_Ui6dzEHmXdr_B*~W5Sr=#B?QYzAGPY#rml4cl6pCTHNmLAm@o^n zfuDa5I^OnLKT%9GsmCRbwv&n2$4NHJMgSdNwKCMxQp(x?l0n2ANTET_-I8IYdI=fs zDZP9iT&8%l{dX;dU2TuZvuk9eUTb4fpMTb~q1d)9NlPU>Hj&**n5bzfbgg5ps18hO zCv!13zAZHQh;W}$*;eOLKzWD9D@_BpLBgKP*fm&cuvz@2bSh8P$R+PJiBEs~rx|JZ ztl_=Sik(F-jMQr(ssPMk-BYPJmS1h<7i4LsQ!bH421-TG$tYN&)1D~Ml`bkZ|MhDm zwftHAY`axk5OYzCO=(_NuCH-ui7lVtRrgUER0%lMF*m0AUbjo-prmXme?Urm``^~j z)8U_?7n^QtcAKIkz4=^blb$u)wYB9snpsmMD*VK36i+tZ2ijk=Y$*emmOwSk!n=A( zJhPB;VUFkt{Z6)-v|~tjUCvVGWuF9kVj?ockhVgfhA4XCk}p({5eSKUx%V z!}STTDw1K_8_Jn`dUQ9k&i={Jm7R5Sj{Pu0m6%(Ir9e$!MKd4TkgXhbfA^1VGoi`H zr?)_c7|g}o*6>S?!;SjLGUmwb=m~@U*4Lt~x$3%`ST$2a+_XAfkwKptoe6i{hKhMe zAAN6MHC*ESk)jUokmV7rIskJL9vr@8Ix)6hWds<*Vxqo~((qkp>n%L`CanN7l^Y+E zZ2$Rg>w7ASh6O(zZi=<`pcg^wop49jGj;t+ch@e9{evouPegT>%Y{ zg=BtQcEwg>s14h}Q&af4uKl-@oQ!wmvj5Y;wx6uIUy|-xyI6`Y8dQ?17+(9wrBjNu zfWgHB(t7!cUW*~3B*AjIAnu6Ifz-#6%ud(C-xlK`8p!Y^@X<{vv0U>^6&gk;ve7Nn z>b~sJaoU8+fMcoE;BcC*iC=!p#GcJ}E(>tVPz~_bb|}1tp-BUZZh*5H@5Cth6B6a| zR(U2<71jlB^R<$#;>DjKvJNjh19ALk?Zr?Vico8&8{uA09Y4xe#k0U_jU+K*W{BlF zzKA+mNEq@-wo95v^Y04P-LX(_bIMnLNCE#wQ~4$Hh+$jEL{LvqWckev2hIcL z=+|0~AKBDnTp*~)!Dxv_q>CVh16w=kW65^bpQ*LM1|1tKWT(PfZn6Nv47&bh-F`J-FbYIP_^!I173dMP|F{ z_LcknWnq5S_uH-tyAWk(N58ffR$_>$@FcCZYG#@#rFNyI@TAC@Q+e9Ld%iSK0a@9i zWM*%r2*E2|(JS(q3DiRGhadP7I@cuTJe7a`$!eMVrsYG(*_@AiuearWzp>$?&TIFZ z_YqDfcN(CYEIgxA)Kh`T1m`(-$@Yl=ZkM1#+%I~GJaQ1jLKz0`gwls@543%OV zUoRf5-z=SZe(LMlW_Eo4=~_-ihxE+$M1HUBgKKc9gUkZTMXPPK)IC~WbS ze15D|HDFfUOE#*l-s5vvHPw$-Ngx@~@n0~IHd{?qq9gAVrSghfSr5>ExY|G6A$J$s zFrn22Nd%ao&?S+EY$8o>wGI9WR=@tUF9dSn`bSLV7C({mdUtLY!ewdx{MwCk!PA54Gd)&P@ zFMn!#G(602kG@TcXvoWF(9z`h`={{-U%0dqi1Yl+oo~oD!Z;d^agE9xB3!t=(_Mhe zap?Tqb?;|aoon1|#a5K0k1_T()BV_RE#s@>@b?dXHp=||^*N465g>Ew%7I=H%}T0g zQx0DWUz%|{w0VlGH(&!gZVyAcc7x3{D>^=+W<4mfg?_r_aNi5HJUA z+joddZQ)<^T2RX!|IuLe=c1+Jh!CBA1md?gC3({Ft?kfWP5xAUkZhCyjeHqa=fadpp4#GKtS)GB}zU_!uiN^nBUFe)Ryl1(Sl#r3$#Xm7V!=tE)KJVjTj}}Viy|rnux!7o3 zEfPmET9&U>t$6UTH+U9aZwu1%=qv`Z1SaUuYrfzQXEhEXfahk` zw7jl7o=8sO*Q<(N!V*=YIHiY@l7EI2KHi#20kmDfPE+vb+dfl~AP^URvxCm2k82h;VWFp`(lj;~IF}0AU@9J{e-o zuJa%>PV(|K?U&H$)a|6~Oy40-JJV}!rUr9mjeupFW^ZX9%L$#uVV>Yfi=(OtRl2<= zk^lV1)5IQ9f>PP5Q%nW-f*8XR|Z#6G2(ym4|Zc_vxFMZ5b?> z%3-tM)@kFjh^m9>KC@g-QkQTTU2tf`;UcwQvX)Lx zmE}BWRJnG`wyc>?HP%Pd=2pX+(;KvUn_BgMM#ZabCu?R2#vT4b zii97O!Yn;&I-V8L;oHg^EQbXinD`wii<@E!K%O zD25j$QbjgO+zGXV;Xzn_eB`qu%Zx`pF1c!%*5zoU=hSMA1RDtc5O}QNy~(ai;P+@A zDG^ce*IxX6!VOS={UG>pGW5OMCvr~DQtEZVkfPCdqf;jD(VXz1$4Nu5FqN^WaGxs2Lc>vyC?OuuBrfF38V~B@ICI1T;mG*Jgtu=xjXjKj&4r*m zGr%pK?^S|1wPlFW;fP`@bzjp5HtyIR*~v)+1903Hx;w!WOQj3`i6LallPZ&R8d}*? zVR^r8gA45)Ynkx@JjlyO`w%jw0%Bv1=WL)%U$bq1y8j&v3^+{FtEl5!UjZ7TV!tW^ z_FwUSeT(lJIEy3Ni;~|GUV0T#^6XScRJ5U}x6b8ClryC7&&@)Bg8sof1?@%Rlfj3t zRyZ|=xF7(2tf~5jZe^*ljaQb)96pS9w*p)OcBc{8b~ z_`%FNh=4y6VJ{0#tXN$n*E4b5#OXE5QLq9cxJxLf|J?s*s~<_%V3bV!9nA$_(ubNE z87j}-zWRYat%DnV;_mc3xpAjQRli1C=AInN`awHlyZ=TpC{taPk(o}5Tc9em`G-h} zl@Zx4fVvg|AP!PYIp8&D0>9R%NkcIao=4HdY+xHzrfiLyFxdgm!J|}ob2((Og9zB^ zE#H29Z%h4czehXG?umG5=^{GCp+BLuIgWYlaoF$6O;Y_o7iX`+wSLKqtl7h{ZIza+ z@IyXaz6gwjC5lxq0XAAyzS6|bYDKm%DvhMiPwlEt-V&`WrIEh>u)h7qFl%P@@GM(I zJV|vDpQkvQWW<4sC=>fk*kwZ^wsqNfH<7Tomy{ljAh=!)G;1NYt2HB3%s!@8r1e?Q z3MrzC64N3<({YPbjRs+3qcf%QA@01}=fN(>iwWvnqJYY%;GbYKkrbRC&wP4@fSSad zKhE_bfO#(4w^LdzKw93UACPuzr{4FZu1PcI$Uyta646uD<&Ck+y_1WbJTqxSF0`G` z;3r=@Q!kF?@m3c8^1)u38CWjXkQmQ4ZjNdeZ$f(faun8ZCR3EHc0?a*L=Av;|CiG1 zlM~ovJnpG8G=T&OIgJpES#>D+zNLqmEJ?Liy6nZG6YJIv$G;g4h-9u$tr`|VS|Nw( zG{W7&{V*xMjVUUAPXi@@IywMlGC|r7#(6cKg%#QI&TnOWwpfk%@pTluE$LMS=Dbmh z_vOomccLcGF~Dc>2j$!4YvufwPA7}u|^m@-n%Cypb}A`VTO zIhs*E^cP$7<zF+KNQmIM26Ur))hw|K#^5l+m1G1cQ74 zBn;4qh#fPIXO1s%>mb*o3quR~I+)hu1P`9RP(`k;*k!#ZHM-JQKdPo1hI|EHGC!ad z(g5i{lCPRa$fSWUpmOe9&OAb%I>E-P-B{)R2LjlNNl?(em=?}DV;w)M>Jk4lf`y0w zyMHEibWv;4@Mdquzy^EoiFIhhL$|AtTs7CLyFRUC<547@&edc@j&8g5e8i8C#N^G4 z$wsvlf05Z}`&NW^mF<9_LtL{~%(qRbOc!Zs<;Pb zSJu*fP~=MCYWmJOMu>SQJ9b`1$%Gn*cq&m|)D$W3Wg_8sdgekBl8DC}h&^RWYDJt6Y+g_=z`g()G{Z?2Q?<6Z)X*REOeC>cWsj^@ zNK6Gv4LqjT!abA6?Jw}DJ*Swqy2bM$_ABWs#O#ZPYTYh=a%YR*v`{LU zih{%#$v0!I>h;)K^+D~Uh{Dqt-d2E&3d4p+2#)p|0s@;>2Oe6)T|M^?l02^9)JGFr zEs;GBq;zHTWLpq7IgZZp2w!ZapUH2Qd{>f2XO9bGLNzxgxs z`l2Qham7Y$c;ehSPZDNX+nmj&L9#q6fyb^CJ*Gq0e}5=^QUSb3NDJnjx6 z)l(Taq(RD|;vN4g?;vu&ezhK~a5Z%n+d1QwEw6=sCJOicO4hux(S!F%nR+sx*2iYtA7~1@ z)uEv04;W9Ek1LQW+u&1`XsAk;geW_W#oxIrzUG$&1~C6Pov2=`kH6z=PP&oDOrN8k z;u4nG)BevR!j3;<-(~fP9WY_WGEx6PB9=DSYL=SUOc-=|vyJ)H?77{hB@L!i zR$5{?=`qn0c-aAIdAbi|kZ}?Md=LmVQmqVo49}ZL)=5L&Op7Kg&6h{|^(bi`Z?XAl z=;vjZT8F856zgo(3!uopagL*1PR+`pp(Yrrr&ItC{nHySbj!^8mRyD1RjM;{{jta_ znyU-)+Nb~dwbynU%%aHW&ft{-YI4zNO2d-+L3HK@xl3%iS?icK*IG0-ny-^okP zmrt4phTF7q3tjAeWCQ4f_~TZSX|yEUIZx-y7e>J<`v3dEyS@5y;M0}@~6jPVTswsqWsY4BxwjY*ocTLTy$+#?P zi+J!WF00|+rVylGdboTv+m+b(5vzIB50Ds|M~u%uH|S&uMpf4{Z8XiMJ5;z-gnWql z_<{tQi{V~A4rrr@D)I||UZL?xt-w3v-oXPdAXf2)*7Uv9qb95;{I8(KpY6{1uTV<-%8{1ryro4LFEg*xG z&SHn0-wZ|d7edfJd|zil(Pg4wZX#em&^V)~jC|{BEC4H(Drk?+yRn2aS`01ie>N$7%>rIv^U?V&f2#Nxr7}=H z%qUQ=K2*VaZ`)R^-#41&Sv=iJg@Q@s@zJEINi_Fq6%OZ}ld z=IaTHdC(}}YhaphSbYN|WTSEIwWrB)IdPcz?YV&J2Z>W!C5T3{48yIsgKeL#vapHjvuBk`0{8DAHMoA;M@-R<0baQ z2sG2Np__%Xi>zPpEBph>^BI~5{6lPC4YsT0S=(9o&@l1E-`Kk}o$_&raS&CUd!gxL z8?@Br+a8~e0cs$~S{aYo`bJDvHypyUTg+VAx&hJ9F7{l?3_sw(EB~83ieoUPh*{Nm zqO?hxpJ`@>4%2^wb$w?~r4_u(vkPti_X`GQl{l=6@PvvXM7h4=jU!4Ac_D3MjqPa( z>krn@c@aJ#>zBWRIG77-XD%+#rs?t<8o2h33gZ$-IwSGzz1GBmm&qC|Dxl=r1vY&9 zNq9&Ec5`xlPnl)}e)oIX3M(OdS$xETIxFSP>K77VZRs##v_#Zh_gyENJY2HK45um0 z_7MuP3?+dW-@Km69QMQenPe3tBz7MOOVW2 zXfSv1eNy5j1Fi!y1WY_U8+&YfC;yLh1ko;4!X(j!348LrZiZalvcW%J{xGFTj7JWB zwhs_JAd3P@FxGAMfi`Vss92GZHCF`7V`87T(9w{TnIu1NvWO~h7QE{TmRa}ilRx{fpA+{ zQ5*J*d4hjLFLVn*^^4AKK>5R0G=B6HC5H0~UtwhZ`5={WZ)7+}g`qa`kN3%o zV^6HdtmQgvjBcfbpI_&|j8f`9GOwsuimPtyZu=u38Sw`-99tU7GC*L%Q%O{HgQj(} z#P1lgtj;soFh!*vxW|<@gO)o!G@C<|lgL3ihBA{#_vb$3optlQn%PFWLDi1?es0!T zi8jGiJ>!;>Y9baFShbK)g<1dR`(;(^+cSo@TqF`>XQdp&xYk z^TOv#0|-m3Kz8lx7rakIS(Fr3YG#^Obzx>oj_R8kh7npJ6-mrSYyy%(op$xHA?7#4 zpk3RhEsoKAw2o&NuWDM473N-?-V*!*WqbI@)<#-=POs+s`q@O#Vp?#+Mt2^)e)G`V zyu|er`JSuzUw`oN|1-HNB?b_@X386gpN`gPoP`qMJX^i z*Fw0vcf2Zv)cq?YF+R%Q2IyGMalE=(Z4R(1lwVc;2#I}TR*6km(q`4qnr$UQGhnlZ6rBgt?$BOhbcYbza;5ndGM=5gtNgG|?Ts|H36UqSo8mCj;tp&?}Biu9SQ2)~7FPYA?M}M4&tn z{DOs^cmYw3EpK^|4(E<6qtpgnbgRZ?@9n$3nMA;L^%y)M_Zmx8?4}qS4gw(#r=MI{3|_gd8j$X4U1Ovc_gK43$u&J68rP z;*k;&%*rV*ANb1^(U`sW{DU3{zbe8NC0NO-FwrzVz^PEFS+}(tEr$p5$SkO!kr~#u zOai+-fO!U+`|x{LRMU^@B~G`z~^SqH30p>U^Jy%g;qQhBx`Z zec;`SBBtn#NL?^p6O`q4O1>P*>m+1b4Vgp#MAG~COuei>l-)}Fp#}6pV9A7<6%tv! z;z}clj!2#lp7bl@5{kP1pY}NJQA6<|MRx?)B*s-}AFuQC1-UVyhd=(F)Ukf(-Uv!u z5s(*Z7KeIm*7Oa>mu7(4)MGb|MvC>2boI@)UoUP_Uoueod3QbS;SRa+))kb$5X5ij zsba4j+qM(+E#$I%+FpjBYbOEXa`)|bf5`M9sVss;9iTPDh*oP0$(W{W{JeDdU~{D3 z5KDb0SH#;{f&H1#`yFI?x-5hgh%#bm56iSRm4-9hZ6aPxd>D)&P|S;ppnP;#a)BZ1 zSE2j&R__rx=+&hd?NgB;WiVTo=G=CmC@%7zm#HIH;bRBWVJ*Bd+k~fz&s8%bPQRBv z^9bB=CBzVfIk71BhdzFxHRyckZq<1fi1!Cro#KZLxfl=tLCy@?zV}rGXv#-!0hqW> zXS%sVmrlfVGAeduXe(H|ThjSpZK*q`_$2>b1JUSt=7Vf3#GLkF}A5;b>W$QuXjegU^Rx%rqzIOnr3k4E?@wOdS9em`Q5s0zS`LF$lCdr z-Xl|!=2|149=a_WYLoRaKMC+t^p=7PD~fBtkVOfq$Ya3w#%`r~knpd4cQwj{Se)0g=r)?7)+UmWi{f!b}plLXP2KQ%LHmw}yHFV}&H5)$?b}6s^ z(_Xb%CK<*TVFa46)$B4!lJ-+5k_dslCAl2?-l5kLszgT0i7WLz_X+RYrUhoydNPx& zy@{U|1xJsx!$+A>T8(FnlwisaBR{)M+yPUMbF? zRvS0dUG1S~WVv15#2C5@8szUf%_TehO_dPMJ|dioh`)|~E$TPFiFL^a_6Q4AqDk}C0N;-%| zxGH+3KXV^zdb(RLA}q|`43;P89M<1E55`t+Oz+^u{>pXmp%HU9bQfFc_0~abR?E=F zk?+`+2L?=V8G|eg@uLPJXh*2{b?w7}<<~E0o-itb`{DYo+o{^-sSF7h5O>QdFrMeU z(7|%~=iAjN%MUDdMtB9owsZxL)-9T_8v?#0w2svtOAT48I?=zGme&Sf%Yv3*lYy8~*OV0Z zFOVg}DJhK0-{fPPikATo1ZQhFh}tX^`7IuT+XWFYv|XD8pWieuvM_Y}!z1qgQaP}m z<6_a>n>uUm`5J7SJIeX$GkmUaMcmYswd8^Gec$qMBa>uMf0U-?Gzsey1*3w;>RBS!=0S$Yc?#Q~kQ# zt+t}5`{+*wM{>-orDjvACmW^mU@_;ua`YYSZMBc2R9C{EHi;i?8GDAD(4Qo3{oL{G zth@;|2r#=wM5bxdo3fDg5bV0p_O+ZD`Rvx$)g&GqPjHfev2|vzfK*mCGgA5jFknE> z!6Qb}CjFF78`s~{(}eBoG$ZB9&P^Y4_YMsOgGBpm*3YiHao0b>I0v)4B7Pa5A3zkq zf{f-zst#}Vte6`>if@@7@}|?kYkinpq{2+br|7drTvct2ezEUzwJng1Wru~T)Kvq@BZ-*SCjM+xWUqoPmM&s_>3=m%FW@vQOCurS z5a-d8mPQ)%vb*wI*ehc)0{))(6y59KCb?n{pDuwau_HE>VWQ3g^{RGDW6%5wDkrVk z+rz=k+(O*q)T8DM(|8=J59ONZod8oZ$*KveSR!4GVaL{C2vfo5TSQI<$h)z)=iG^k zWMwDg%^#8T1kmre-MZTQdUXkdZ;zzjM?laHp*u(>3jo$#BB9q)9yMei z$65;7E71ra&4E?#T5#0ijrZ8&tgp7K&Y*x!?%@ep-bjzG+Z zpzh-zJC8P#zGZOQ4c+@K@#JvtWdWza$*)&qKkmG`w8GAK_J>vns;_GV=B;3Tw@s36 z;VA$x-GzrJ=?~HoZq62|E7FOgKIy+k!<+^meYomMC{j2H_48+gBlEWV@_m<4z5%Zc z`b|0NJfG-XaDs&&w)>H4!{X|K;FAO{JU`vm`Q8b*i|)NYSB3H zvr->s{9yn!9Wu1NqEa*P=n}$HK755y>gG3Qv0`+&w;}NWT@5fGjh&6Y;qL^zVJ9_nQ^I4@m8)%(vvlNtd($aq4vl#P zv32<00O?G+UV#zn7q&_oJ@EbMP@6mx^Ej%wl|xg3-ORFQRK0mAWVgVT=%9RSQLUz& z5~F&|vUAfeX*<{y=OyiI`_!Ow&qLgZ9Jk{cf-9w^WqHrej|T=~S&SFh)=UwV{o3%R z%ba3y99wwDcf6+Wre6E1%PR#~Mr~eqZ%Lgi)OSZ%%%bzKMGjc(SvMLCQSHiGd4r<= zZwf%pAEbz~Hs}5Wk{H%XwH8j$0Z-i;Zp=H(&7@i+8piBV^#b+tfA4xmKB;vxscOF6 zj>uX1`Ye{07_#vwj+kH0w}M{$8Cgnt3g4!R7X}>2XBCSX{4Cmp9VMWB&QVWDxUc8{ z1~r~kRvhq`c*oYK`#wV^lF82w>*0Ns=z2sO8MHk2?OQi4i7#XFyI2~p)f0{%H81+l z$4|S6LaC`swaV>>8w(M91H~)p+PBuR555~)A_BX!m7~lp1Kp{jvJ~PZU|cyoLKu8D zR($9yStG92*Ku!8b{cf6v~5G?+pJSBT}3nUhw#nHq8AJ&`_^GHcfZh(?7)>?%Z<6$m2x?_&v?YVbXm6~zovkb?~B@v=%TLxp_MNB-7itBQY+mh?eOz5Y* zu~1k4!;rmahtq#Y1bhQ*J#gs=sX2&!Zqij2g61>O`s4TBybr)Ui$+6(hFLaFi0m8E|@6|sR>1^t+WqDx3PL>10Lw(PLN$WK>7xQ-|>(U$y`M+X~%BCGs zGNh;5k=QAOhZkF&-S+ zaq;fiB5*C&nYnhDCGBT>Xv%W{IBAtx)RHewHqR%YXq2QqfB|(1*UJTi^9O5M45~Bf zZt6o&2@7E-OI5S8uTCGf??kLmV4_#9GsPF1^#o%(B@wUyI^s4uNE{#Sc~+i0PWtFn z0C8BV>Ka#1z=N5CF5HFyhNs6ux)DiWTKTGap!ewl2d}d>7jZ0sULrk~=txZnyNyNi z2e>i?PHUh&4LCC7Nu$ZPJ*Hw#y-Z)y5Z>e*3@+hu=|7JWrRMeqLJH3m^rT{s174-{ z$aLa5f`+|!@=r3=A$Yerth@CliXplh7=}Hkfgqw@2!H{h05^cGutqd~=?<*XIlj$J zd&8b^;RjgDlM5AyqYxNJn97WJlu75K^@djC`4onF26yvntvWYpJN z?^p$sJhFa2l`HW|m6dF9e>0an<1SF@pp!Q@N2x)t;*KCi*VD`ULo}G~q(C$kx#w@k zxBEP8Pos+i_<+gY*(?hQm>7(k-C0uM)siHjOk%>kM@2W2*J`M;A+4$Xo(oKWivb{r z=$xfn-R}Ogb!2$q?2y1!GfVz;rI$p_BE$Z71cv@jO0(6CZR!8|46IvaKBegvS0hlP z(P(?@M#w@W{pstQD|fuVP-0!>zNClWNm?PlfM+*xS@?_gc%SseuMi8evi^U;x^<2oN(Mzrr5YiPE(9+OncRtb79m_vN=d3<7s|Mj=wn9W2FFa}CM`K*C;%)e3wMit zxvfvEI}Xve=j#ASK$1E=yu_d?Ngx=R2}crbvITH+7gU1v2U#UzHn^60f{+Kg(tpsz z(ooyOtc!2A8si+3S!ci{Mh9*8F&wVLdu#f*iP+RitD>1+xSXX*3r*4mZ?ciQ;)1aB z6Ka-QONP1+(33_!k?^d36POp8QBeuXR#Xk`}T=l)6l=YzZu~# z{}p^|d9E~g{l2E-&7%mW`#&ur1Z584rgu@@#?MBTHQfojcDvx}-R)kYHMwVv+)UD! z>g3OoD_zHP*;z5=0fIY--RcrtmV83)JDI1n3VK=4yL9TZ_OE2Au6|9PwlsDNB`rYz z@jP^9332mJF$rpODZ%T5h_;_rFIhDu3zSM%C3}vOP(OKQxWJo~49{D*E0d&zk5_g( z)Ayeuw=@pbC#*%mEJp-Kqi4Ew`r$fo`jHpx)LZFlK3K6l64l=#Bquzy`~F5fFepF) zQJSvi7|%Y0{D94B#K;yfefs_Xv9ZK#--ehql`uut6#~O;PtUh+kr9)q@@}Z*kl#4e zUf=ru-ulkXWlFzoMDIyf*5;Gj*yW>h%B6E9g)r%NEQ5D5q`p7CtnT^F{mXf^x5r6V z(*PltY~f*c_q?mC!w%bV>(wupGnY7SiRFr1xS?@k9x_wHLCvz!0m$ZRUAyeq3Fgj7 zJhGVJQeYy}C~JqA&2kvLw#Le%g+pK>u^j0;(2_%fA4dznz9^%+J@EQel~fQ{uWCcM z{yL3`5*Aaj(;jzy?Gi#o;brzgHb#>xk(7Cdz1C9Xc@(dme1X^eM92PF4W(|Gkw6)v zkXUV+gz4nYf6YHHT+;GPW7EhHnj?|U)9QDal*jG^n60TQJpFn8I}|#S!*O0+FyO(L zPbc|2YKExi{(|IIf~ht_k6rwF2kYLb^7fOXN_l*8<~)+God;Jo3R(EQ(tOvG%1!xo ziXw726SJzhIxT2N4YPUgOnUKnCxAE@wcW|lafW=0+^0lZF1Z>V`Ncv2x_Q3ADn>`m z3|^lbUt>kCZ}qERf^jLR_L$cY?Xm_v;2wW|6&*SFlymAs8jkQJJz<|46S9W|p zf@GvBo7yt(9xokdJx#HFZ~Sw0$A4KM~{L{mA4|3+;#Gib+KA^n{60*w+w-z3@%}v@RUMRvd0?*=zGb{RhnIW zyD8ysu4;G*jJPAelEfrYF}32kP}*p43ySyU9q9fcOT|_htM4loA(WD%d=6O{J@NGS zn+$&#QqVB>>iv(Tvy6)J>$~thbW1nV9nvW^k3&Irp5ie|ukBWC8<8@DF&z%^<;Y5fuJ&&S?OrE$$otIC)BQ znFdnWcJ-DPK{kDf;bo~I1rITwjXFJ%xeiYrK4*s@NpmOrF+>P8Z2N(X1?`lgCFl3t?_w^K!7H2XH_=lI&arDT<)|_YewP3~G#8oIlqxRJ~{l!+Gp9 zwv}3xQC2CC6b#zW8_73+#yW2~o3?&5A7(UEtVFv1mwZ!nFSTi~bK>zX4^C6Jw&r$t z>mW4v{IfsRac(TL^|UToN}fd|F5(PK%|MwN>2|{U5u2= zzwR|&D=mT*OOMU6v_+@-xGvstzb1wJLD^6MQPlpK*dxhaSTw-Y`<~jgK>6nh0S|$e zIc}l48XvLeK>N|*I48-{sDHM=+3ZuO4Zfm{0$phlMqzi_N(eov@pQTxqy@rqh(H{; zqHC?*Pu6XBSRNbxGsd{2WbypH+UJr4BEbN#P&Anxf+NWM_dYy6JKSeA2)`){GZa{B zNj5e4tCf^QG?qG|!K?!v_xH|jf*NDMUjBTx*a-jN)hKoP>Y_Qqn_~XvpB9~D6DLAX zJ>e~ri~5P|;aS~GTUuMYmBEQ=48PK`?`3J>d~B0Jya&3lLmdl`C3pbMlOi6laqsI3 z|HMQ7Nwvs1fsgu2>REMKjgb;5x={JoW@3y@dv{}BP-G+%oGWqME27~t`!KH5&RMEp z2B)siQwL_p?i)!N?N>Hn{=OusY;khr7`#lt+>CS%W5Tk**esX+K%`WLfRT({70bPb z!Rvp|C>wo#zL5rqf|++`WjxN``?bj&M%eNaVbh?fE2eEWc_z!HA=pS9MXY+v|AJ1j zv@RSq<7F9GgfQ{Kq6zfqs!baBhH;g@4?LuzL``z@@}2EU(#9+*CX9J=n!XQYi*H&( z`Yol(WGviE49Wei(S>_k+N+fGa0{3LK2&ZFJnAV=l5@F-LIz+4iAdX9)bk4%9x3l1 zpBi!(dN*H!i{`%bC5XMd0-**grdU#fG#O3HIE+kShVu>8(8e>ZHR;5@)vXip!vP$& zAtGLFdnvoOYpM>buX4c}S6EW1k8^I>{)P!aeIZEC?RYzU`eC`a0zgILrr#W$l5 zQ*AZSR&6VwdE^cj9`uQgGzmXNt2TFdTyuoCP--QHzU7wxaPiP3wte{+f-Yp0;83cg zySz(ux>m-eEk1Cdij6>hJ)-)sS6@$`tWktsQ2YT7b6KZjMErOG$#X?%zJ{W-fn6_| z+)m@i2|QPL9^2EuG;f^S?1b5M=d;T%{)lCHGYvn7SBGjBU42nL{ma8o!3gE8@*8<* zuV>^(so2}YeC8O#vZ#<}KH8DSY0mlwGJK`h6;F(}3#iKVU3CQc;^n0E{E-4K4hrjG z&L)+a_HJtI1|a;g!+@+`)4Oqdi8*xn$5X1?f$nXU#2_9WMVBkM>Z&86XJLrDCt{!JGs;|)_Q^{O7mMMo319$J? ztHyQthgG-jay*|=9A|Pa$_l#cqlT;%;B+$_$|s z1&c;Mhr=i+Iv1+i_St=i6MS6}@*jtUS~yY3SRLmplNpurT{8fK_na5^Po8B;^8(qZ zJ)ehAvvJExTk}!kmECf{G6dd=htNkk%`fixiYQT%q=qX4K?={*%!@uvfglRCIP2a( z>YH}y#y5d1Qt5H-&fR8aZC+Qk_3Jv_lkEF0_Sph1ovK^1vnr0<{%^XocTu=p4Be(x zgT%DG1XS81_U~)I%~J97Etz6S)t~7qK;;2R{t79DI77%MyYE&DijgThJEL(W%1iXKVRKpzY;Q5 z8kE-fWQWQVs434}ETLK4p|fcVJbq0}`qk09k4G0;@4fQq+&~dOswgQ9yBmuDDTMK2 zA+&aRwm*eK*=pXEtp|HyQGin3?y%QZW_@IOu3}ZBHgErNiQ1g17XWtUTF`yDM{w*0 zOeGhPU=|$us|7)XMgb4?YEp;?&X6O5WC-__RfB^u zBn-0G^+BAcYU+w`>-crEglQ6sQMqKhP?Pz>bT!Y#};O4 ziI;zjsnTqh2>8Ft=8@>D=(SeQ7nVX`iyFTK;{S?gRMdK}P-E#jZ>F&c77-OVT*lGu zRcTeh{)(_s-!9=%`fzlI-FTd|VQeG>hUl31bV&YK6an^~hT@~pfD`c`yC9UhM~;Z@L^JD(PPzq>E%5$L zqw)Q7a5ZwVWig>+WR0Uy9MSqcpc*xQ{f)QPdS~1n2Ngkitw8GUe5-&LjKs?5Ge5;Q zXrFicl0&fF-%aJ^m+I1o9c@S%%W~(aKVSI0==EP4%oivD(zf)&2R;M4ALz)iT6xD1 zf_3|k=XLQv$&jt%vvW91tJ8sP3V(FdMJRXK%ZzW?SS?rSVs zB_OBQqM7Wt5%HPUL%Oa?)vWc^!rQ7he5g$a$#Jd?X1{i+ojC9-!%4O`q&T_JZIRX2 z>~O#rZcI07S!;`36JZytgSr{pPcGjLX4~pUW1t43ye%G6saq4-8hMS@8=6(ukoPksbDB*UIXR@XLYQ;2nST?~a#XA7veAGFmp z2fnD7LIf@Kdxe|&h}E)xplwj=^m`v;RI8C zHrd2DGy^loDP_%-#9+jtOjW8FSFBzyN13H&T90C8Ux=8>qNMt$%1vi3wJm2E5C{0) zumueZMV>#q#bwf=c>N5w9NQRb5>;bbu`-yVam!03u;}>~Z{~Q9gJR~;8+tI>v+9S5 ziQ>aM6y~~(Dtx>K!qvWPk)9 z>ZI_~B{g!`FBn8Qe1xBXAtOrn20u@I`ws&|l>kmOrBLr`oJ~!g*mD7+a8c>KT=iaO z^~90}G#$*ycZ-ENqnELxe=~TAA+v*ZpDYD9Or<{=F1sj3HL%1#r-54+>|*nIIz`jU8S zt@`KP`I+|oviJ->HEbj416K9D8$0!D)yJ$#FYX7mC!P1qIymss(NGPnctxCegM0v-TI4Ir$8dzwbF7&{yr0)A@ z$=~b@kwpCL0+yp8ed}8J>_~1aTXqr_93{0S6+4|j218FVRk0Shv;`M`n0S2tsPpH+ z(s|}3>~Yjs5S8@>3R zS0lKHjZh__=RO+El31rHb<33#FE7IJq(U_3V4N&uGN0;wCN6_T1soS4S75EX?j5$O z>I2aTyDZ0r*1Sk2_YRZxhM`f?$Y*7p0>8$#?_BBn~_RLo;9s*(BsGTSX{r}WqnYwD?K zZOXT0=7_U;Pa{o0!%Qvg%Ec+DP^Ph|I?2OIe$cF8`wJexU+*>vH<|m z5N>*krN3Hc<}zXaAEC8CWBE#DW$-7MEaRHBchjncQFXwMP3c-+S`{Vdx#*fLqZFkq ztO8E^9f!{@T(P-0WRB^@FX4DPzU}%LP;d{p53d#qm>Qr8}0EZyg+Dqh+4Vtzi!R)$0; zk?Ul0D!+Mvq~P4x_{wq z)#JcOQ>t$Q4)o&z1zBBEJL|W1hAk8ygdJ+i4t8LL2Gz6yd-X=DB5;}<^2o9(X43td zwv5%EOL=^jL`9{k+7>XX6yDnDP#Po_*R)5p-ZKp0Y{qEsq^JE)HVwAy{hw(FWc%c%m;o|4Cj7jkp6+*(#^n@1V!h@WiI3I@H z60QeA#3|jTI%_n)1PTKE&Iy(^uVcTYz;9K0?_55hS}_4so*|p#y&{NKVyJ(rkdX9$ zEyhzNnq6#z&05W)^qwPA2oUh|Pn!yv(rQM1^zh5(4+yw(mmc0wtKMkztX0jy6+&95 z$FyNXk6pJWaG?wry*6B^2txs9aSDOyHcX7&1QFpd0n<3Qh+847(kRK3HVrtyNH1o? zv$qOGUkHXlp$O_$Maz;^Wp;#)8ah(Dg9#uA2N9x)QvFS~FmFZnmiCkA{r9pbUJ?Wf z65yzv@vUZK?{q8`{7`YH;esa}4O66yc*B%K=R6c27G2MZ>;ovpf1#n_^QlF`pSqqD z#ZanM_<%yTZ!BW&1$?^>g)XQS4*iZz{tXLN-~BEfjf%28S;0)xh~^teNJn7@^?tiv zOsMPeYqdG5r4+NE0bo0KTd0618yxz}w%vZ;VZ`!KGig2LEJm+(h!A(E44ftQ0?cB# zY%N5&R$Y2GX88R`zrC8?8mf4(gI8Y4bHJL}qmaZj>L8_ovNPdFb=UUu+m0G-eJ_va z!%NX)zg%as8)dxY)ucKKa!s8D{Lq3rSjY(Am*{-3%xYHMfNx=)Dr%Gs8*XQmi znI}l4l_dSIeB|VY|BWpj2tWh%jLgF-UiP^+l3bHYy|0$(Cpzg2fq=ze})6#`4{nwRL% zSdc!HJ%=qB*KOUXPU?K2#T>ISDrFqhgRp$X;}0iXBTVM!CT&DZ)}%`0T=tp&JW7o- zM!h$Prf|WeL>qB7$U2ECDY9{%CVQMECqc;TsuU?N$}xiX7WVz4G;pjNEC2vMBsuDG zYH=n%vvEfOwiH5)))iwb6YTy z^g2SwAEOkC`Gik#LMVz7aOC#W`!M|g`)C5X!Z431BANfiHx_2_wU*UkR$gH+Qe3L) z$!9=FdyPzTaoGXH!?V#ZaNW%-|0C5z+ z(Leq#E+{Siq$mxmb<1`5*L-XCHw3&Kk0AUmRF#ePq@}3$X2s!}{`8{Sfr}coWVu zJKmlz`a;Lu(F~ma2vPXkZ1Nn#YS?vE>Yms6)}N&EkPWGLkNIqT)~3C^DPT3PlLG~z zS{8I34{a)EKE0AtU_m`E(L^5)>XM}svu*kHGWl}~nM%_SSRUG;)yF0^^{Vr`rI6K} zy|mIx^MO%X)QMalc*$R`Ig8>vjlnGW{FRjDEjP8X7swkIchnFOyAtAK zct}&6R!#`SUi+sUwTGBuvK<2}amdjWH$;7j891E6h{xw8*8W3}!Cn(Xig;s#$~^>J zunKg2{nAAEg&&uQ-)g?+#O(CHn`dP;>=cUM1b0;{UXiF-oU{F{TN?Xqf=dCR$00CS z;Hkm~h)yi4%PR+>Pk7S(ir}Q?8SHGV@d0p5RDN50e<1WY8cn1yE${<@?pLgITGhdw zXTWA?);uhHDDekRsrniruUYyjwd#f69F@lsz>1Cr zI|!Hvz>zAH!xU-tT5c;vxAtQONN=`ykaY-wLDn!x6TLPhQ_+m4)YJvxSqj%q3X^OE z6pA9#UBnoQem;Cmw)*n;-(tYLi%1ll=8qmtDdHxC-~iIBjmgwV_?9_y(!Zv~G*eM^ z@NI-Q`?vR}@A&{QMX(^o$VX-Vgk|uIY2q-zz5^MZk_rp zH*MwD9}SzM3GI??e;?j4$S;aRzd`h)wp`IsS_q_3g)oB`h`9lT)I+pDJZ8d4svC^4 zj$7WN$kEZd1`{1fPQJ@@6Znvwvm0efc@0l;Ym4X8WuSUVNrGz-{xOOx<+)v!ikTA6 z8D5O$_N4I0Il`ztP!-vcrPRZLB6X5${jsiGBF$f=vM}nJ+r?edF|~ZEAdL9;p97<; zOn~6fx6G(ovxj?^HCMN*MRiPXfEhE64VpYM$IaCAPlR5_x;sw%vD4YvLz*$0H$4>MG= zU0u9xq@cTx>@QzM<^b`WL!vQq+Ngsw8t{IvJuo#SrOV> z3H$`AohTeaOI3LtoD6j&QzIg#=CcNHkk|sYlJeNwJZ#`}G(iiev{cLsM330XSuqG z2^u*yE|)D9CCC4+x^tXy%`4;mMP!Xp_matnL|M)+DS@%A2i67qzhR$J@1I@CwNqUk zynXvI?|w%-zjtBhx5uBNUcId94+31IY>r0+`g1y9Zh}ljCIw8(U*Xk4%5W*l?mtRV zLQ_`b7g05nvIL2w?N#TBI&(aid!5#B^`@M7*soB@mW}X(A6_7gB-*h404q;>x^T?oKAbUi@FT8^ zi(ySfJkSShJksgt?6Xw|m0`%oDm5mwFyYQh*Z`Cuaf5;97YUX?Kup#Eucj6I8!}MJ z464MHN!mV;y%s-zFQR;WJ0)F4WiX8(PxLht)0yz?iz;b>+as6vkHj0^6X!v%7;=xV zN-WFYyDn&a>8v*~&Gho3!oIf2X&+wVqEq{+!)>A#0EEieJ6o|Bt*5^ zK$w%cV|hL`q9TBHj@H0{LO%G!jjg$(hrq&UIfSj7#ij)V>WN-7bWv-G!qIoRw3sWi zdp!8J*K#~Ew=%rb?ahWc1fytWrki=jgM43asespd^*-k6Ese8|>wCikDVHI72kGeP zqqC-2hIQov)zvGbj$(E7JZlj!p39o5OqGnXD^$%Qn<-Q1Pnhc0vS)&1j2mfvemen% zQF0$<7CJ6#q~|9d%jye$sH}RIa5K2TirdjhzT=a3{jOHh)vp3SWLKm9d^Ua8eNjBt z;pJ{r36sQ@;_J$fKcs&Uq_`EJe2q_k-!)ys;y*sv&L44#uTYk*esU?UGg`dLGQ6q2 zWumdj z`F`Y!e$QPIN|z!x^?s}CJ^gD0A353CVTqfay$5c8rBlMMPN+*DclhcRVzxnGW)8}r zMQ`c=w|$kQe6Q##n-@lhswJ@eF6sB4e&7h6T3%i?S-8CXKJd^i}leE&O0` zonm2G*_NO9q6*v%#?4kW*WjmJ|9pf5H7v6fNcqKY3eUO)#>e}p)ZJb0R8+fu3fNv@ z87>8=&a(e|Ce9@Kwys;l&KAd%KuP%#UEX#(j2b@q&^PwV4Z03bKDS}CV0+GtTCbO7Hmav$r&)LND zhFOPsLq%CuOoIL0Z(0D28?2`Eg(w`5fslSKb^WY9D$%y7WE`-m?BAjeGB zJ`#*H{zi9rp;h+>*vKq-#;_w-|1jR&3H+$W`ZWyw>r2Bm2AbJa?2 z&YRDRuc`7JkVY6eUe|c@n5OKhAZB{>W5uL_3snl6u9IY*c#7HkT}Nd*XiH5O8>a|$ zv-=2wQ!Irc%F9>}c52+@&iftfgT!CW6=Hd(WXA$stubEU;#F(BqMjz`$5B3zjQ1V{ zk`Nzhv8`Q$p2{l>cWhHTXXh=+qgMyyIXIvy^YkUVUv78P4fIaSapVhVRSP zS|6{^obLY~KP6XJOWQYh)l~Dm)5q1PNJvy|suTFz^KL2dl=^>R4~#6W!Ag-6bY+oo zzhR`t<%>=qYq9ZQGl6QuFZ3A;Zz<6@hy!KQ!`nP;RdltoE9a}JNQ9pFZM*q?5nzF` z_bEuQlbJ$3j`77c7K88_Q8&loka(04Ccx9DvB(*SQ8Bau6lhumF6z=%cAs_6`Z)E* zQ3SkyFdknty`rb(_vw z0JI52CxjV2q_2!$?AmP3{%K80??AMv`7)*XnJ@uWdhXS6oy?WQ17 zxbSTaF4AG3kT{G$uo~xAduobD<-~%BidY$sNtL}arsu7eo$m)3^*2k;I2|}ien87X zD8Fb`8CC|4pEgp7!$6s~MUxzfvchEIFsTVk$2E!9{YGMiFOUNEsAqc&WYczf<2q~b)g@sTEDbDXv&Vhh%ZJ*j8&ZiBb{bVLbprhM2S%REk=lz7PvhJTlbR>w{_I3|dC!)L~ElrfkTUJ3FMW0k|oo$cws zS;ROl^t40h0^0mt_@hepeOPo91KulKf%<-02l?tCd|~)4%!)?Nto5kQ?7@9N1GAJ2 zEXL9)QlC!mfyVC6k&51#iGrzfyHxX}uV*+S{2|6L<$(Zp7v&-llED4hs!1@}r&q9E z(*KMc`@`9U!P(YWOQ1&}=yrf8ibqfgE6a@5(jJo|QtAn%mbsuV(#@Yd#|ha#3&&Mw z0mMQ9lfMn(6=T!3V|2>R{>HDJ5=9IW;aXeXZPey8{f&PtXb4y{&XCmXqZth^60FT1 z)@{SY`WD-itklS4;zi*30{+WpA#$jX)ED3aAcfi_b;!5x2+W97JOi6~(_#eE*wG^a z7?yD*S9K2DcsleOaw!9ZPPvVK{pIt}aRBRKt0*Jz14Gl94^2RA&Ex!cXP%twW$B3a zN_{6lMuXpn^pfmLx@LAE%}$DB%7en1jHX*iG@8jRK0*KT1NcQ^hVqMlM{>#(GZg#I zsjq#XIQG$rP@E^JjF^lm4k(}{H{e0jJR;`&hPDxA*OGSRu*sCsAn(XFLOy5vet&DIOpD zW1b;%UlD>;j3UxS3Y3mayUibly~Y?N&*D<}o1MuOE?fq!ecnXPgqNzW{y`{IA(E7d zXxg`i4Kut5M2rdO`;PE~S0cXg-=2U=6gR`7Mg2I{xw@fbE!FtYpm2L|Jl~d&J?T3E zW(YTNagyJxUq$jq$sOpjUpRP`WQ0Li3FvT`{q@U@3xRmb;HokgHvNad?;maw>ce`2 zLf$;$Ql>}P)6s1a(~75OC}(|K`dR@C=tW;5O&S}X7!IX)HqQJq4d-FMbL0)bj#Q1q z_Dc%3k8ND1mpOLbweK+cRk}0$r@b0?T8vDSpfWg0ED2TJrN867xxdGB8lv?L<8tMi z5h87BS+Tfn%KMh+hp2hvYi8 z$}kW@MMCabw-3R-ODE@D0z4lh&oM)jvx3G0KHlw3Vi9%gfMS*$ISE<(TZsf$wzO8&$dWF~q9 z9&sX4aAFGq8B(Yi4SgsFt@Q(a!(r+l1-z-Tvg8O7pZRixaB^u+N${!f` za$;jhI_LQ_v2Pxi8n1tCe>>wKckuquAH`8g^exv|cdhygR^*aqKU~RFQW+xV2*DH8 zNQ$?#XpG}Ywj4t6Bhrhn(!&%9ESXF+;>JcZ?GkD%e#JZV3H&E#+LDG{2c7jcNW;Zo zE+X0V2^1gdHJ{Iyk9GgYXe^O?Oi$Wz{a@JzTZ;;(mOVp%&iMIoz6oWRel^#ea9=J7 zAyW6l5v+=hyb3|t$AoLmYTZa!GvI*Lr&41s<2{)NMe;IVKQ<1{@uUh6&V;HY-Aed8=&c0H&SG1)usx4liFh{j}c=w6f+E8@ZH1 zIh}+=?FaM))qfj*OLtj2HT9kzNgX>*<_tw$d9B!)3phpJgKHTo5-Y5Av+~>)iJgw# z9T}}N+{3r1RFjaHn4@cRmovi(gZ*0VHic7ALZ2@`i(kJ)=Qa;z!Wx?cKrD)?%;BMM zb%_;CQY^0YO{+!*Ysg?LAj?64(@YRFuJ*W zW(?KUQS|XII8wTxuw;&SDNNL~vd&YO6i#PYqg=xyPs&qOF#ROv;cqHm@|^h;>k`PP zRz+fIX#+e1{f(QLczq}jbRNyLp@GzM7DK(Jsfu+%K>J_cFJT-K@v}bvV_Frjh?o5q zlkBb0+%DUHbrxAkDnZK#2>&K+VTR z9x58?it|w{wPnacKo&#( zn}c504Qcugxcb$aSiT{*_=a@LvJvNYjQI9Xpn*M2ha5FA?19)4VNkgvZ-vJQhz>R_ z`hGuz1-<*JJ{+y3Hr_NdFa4Hl#1Z-5Ld+z~v~_cV@|NQmMJDtU?=yJ)$JoKt7>u(0 zuadgCZ?X?uzS~yxCUS83Js%^+h~!H`3t>6pMK(slcW8Cy)D3mz;Di0DqrT3(Sb~Dc z5UdJcN2rk{(@}U6jiRkz;|K6~SoOgaKdzDnj1Tu4t>cblT4C$p-nHNz_J>fyYH0B` zgB9~yEqwt{OStg7b>#P>%A?w;IBtFq1LAy$2D?;>V|8Hzb6 zCRtvAm=38{TV^x8OG$akf~HO1eN^2`iSGkK3oOx5pMm}f4A^4sOg?clwQhoNB*U3U z`$`|5+N3IKJgg{6tbp}#`jn+WY))lP8~l^{3^5nb{5QymF}{xQDBfW@Ip)=gRQdJp z4Q-Xw!;7;T>XdRLk6B%*)G!>NosTI>sM@XEEIXjw;K#sTqGGwTZngaLMh%H^%UWi| zaXfYkg4PcN$utd6}IK?oqo2&ALs-B zyiWZK%nwx&=WPz`+nzL&HOcM$C8rn58kGQ(p)xhT#V7QZmhcZ{-Yeu>KUnj#!jN3@ z8od5EOmo*3x+N=12p&e2^wFmxs|NHAz=jw=qXn78_+(>MSx{a54KRuEiNqYU(A10F zJ$r$g%Vp$4vMw6o{kZAMDHz@yKwp zuI)envwylQ=vDrLQvm- zusB`AQN({P*{3x&y*O=arp@k9{5QZ}f*IY#WmT`pNDEH-F8z9L@*iJtuuhUY1|@)p zMgcN&;E#+XP+WaU!k-Q&!z`5Vcov}PC-XI5RW;2J4NDwXtCEcc4ehERg=;|;G;mPn59K~EL&+-99X%h0{$M?kbeD0L5+T{Mb-M=7LNXcpn7Xp$5 zdAkV*T`d$FS-4cy2YzbE2xh&nUJufx(85VTx6lfoJ4bXqD{aw2a0AFDLK(B#avtqI z3Pqj>?b?0};h)xDF!-c!Ki*lRSIg%v)UN6g018;-pvRj_Rcwbsv8$iTo+TAuxwt0nGYN3F|M$#f&=BOV_e%MqcqL#5euBpp>dzjU#T+96@R&nHkoA4!dn% zHGla@(9=gw1#Sf}Ih6{`hTIJ0HsRC=Kl&(`TVhI7%$OZfCF>4fHI-zq{duDj9(uV2fUyl&XY-P2U96avZ z;OYZ*O0=VY$G*|w&Z}rN)s@$8>m)9pBvJ={jV=kLh7bbmAhTO7h?)VW*Lk=Yoxs<+ zXeNdhw~OywTd0K5X7M+!8I8eT5vu)!nz&qCY%vy^q}qY)Kw-;iFz*isLAR(ld6}xd z;q4Pc{g)tvo%2N<6QWpnu?0)3b6}V2@Js^Y3+WN~ekz%{;t3x{g|}UIu%$_iYC|4QnBD-#XA!-c{&%kbVzo1!RJzAT{1WYBJjj^)}jzfG#j`Ajv;T7>z z&6RD-2I;NIkFYHbCKCgNfH-KqL+lmy7!$!2v>+pM1LhqAr@J4~t(Zlvp0dQ!@o*Ud zBzs;Gq~C{FFNYscP*wyeRNSO%e@+TPg6BP~MAi43AK$JV6gE2)7A5KW!TBdlN%xb=B-u3qk%mo>m zigH-f|2$no(3})i2SM?Jkr_^Jncv`9{C0{nl$)CI|^R$Wt(QqwWAguEUdjSCmq{ z@i000e%fio9oHEURIor70R_EF7{H9!B)BRRru$5g^7SV3xD@yM{mHd2OJR(6*tgU& zk|;)6c*k)_6B(8ctU1Z-D`$@N=x)?tXyB|>8QwSeKu z*Eiwl0KnXvf${CjzUV^vqCipcZNsPr58*D7!CpBK!UgS6{E*GdDq}apPcJJj;-0B?URYillQ`|aNSVuJd!p1Y=~KP zf)u)nXKDUPc}{kiNatZ=Ft-2X1arfyi+_sVz9Cq}q4a&O@+W&X3SmuY{y%(Cs}6n@ zdT=3V_>59?|eEQT!5+j3pGK$jc4bxsJ9NRRom@PH8z4%s(W&-()1A!a=yC{MLAx%$9P<9017IC%L~g=lqy@ z5#0YipS3ueO8D0YbZh(mLbhZZX;)I9ZhblI)49tmV)sVo!z`}t)FPPuwUYjH47`Ey|V;<-R@4F?T7C zxkZZSy~d9Cck<&l_Pi|r8yj5yLlt7e_UM?lFuT@~UhHf$mqVgg*JLDed8%SJ0;~YS z)!wWb{VgSRC>a2TN!926bLo1OYM3o{>?)iWF}xkA>G|}i48mitp>!mnz##H|vbFFs zZbu>46{@aELPivlQVJk|n1Bt{pNx!Ho_P+p7j@;1#2C5k|ERq~j--6{A{VRY8vJ{q zK^cwl3V6=uVCo?NjT~D6B-g1`LKNxpGqr*?pyTL6Dp%w0!CNZX)xS5W3ZQ@Z^aWs6&oaOTJQ;a_M?XNHq2A+@qo?iolR>QAEN@_X9B9RzGOu3g4blL#6i%v zOjN(We=j^-7Abgq+&bTV9o*>FKDiaN5$JeN|Cd|%jgrT~iyn}-<;YzpCe32a1nySH z>CfLU{IA^}-D7`6Ts?dif+)@iLIfmAU(a1$V+Sy&dNsXezUpzO5kzvux?!f$N4BP% zWb@44U~9Ed;4S_q@#KFtWsHLkuveLUk!7!jnVY?>%1&!W9YBbJeb9PIQ9G6ZSX#hS zknH=TdX_yMkQVfNU56C|r&Qmfkp84?+183fBe1%3PHmm{2R=Ye3=DpifM1$d;_0}? zsSi@7)S-gXpE~YtHgb;cc94W7Oy~d&poa1`lyNhkZG6v1(b^IQL`RasE+*0_UdWk0 z6p4E+{IvEHtG7P$8tN~~*APvaj<&c5iE>yTg_9Y930|njuS%x2JQNPOY(QQVM1ITs zHshyzv*PxG7($^!4)i#hufGeBdm74YSYPjudYD+=kleU^e|T#CUflf6<4EH29M#5y zBty;~QShIR1kK%&;DQPFUh#>yUrtxU?$pq@}fF4fc)+4nKm^DE7%`IO5Eno!4r>Z0DjyF zV27m}HRw5F0vLcKPL_7A9we(ZrJtDZolC&hqycrfB3f{Kzpf5SE*1fq;nuHVIEhcF z=kKePw@o&u4EH@U%9hP}o}p0E{)v;E?W7b^8IoU;NOY&_Q5tZ3t{@j=M6YFm0NA{F z7=?a2`n4T+_3Cr&i`P^=uX=m!Hzwa}tYW*(wn+Pkd_@mM!&46r;urt@<5|rDbUR$? zGY^MZTn|r~yI`xs$!^^z*GKugWrr3OAF4g8tEy%9tUE7hUNm^a<*Vd`x)!s&h|Fy2v^aw^J{+OygBC(FK2*6R;LA$|I;>^_+=E`cW z^hDjY9`3h~t@rO1&swkkWK1@9k2p0*9G-Z{#eI1tngj)5Dq|{!#8`Zhd+7Sla=xSG z8`$8J)AStK6UVcM<6JAE?%spBHn$YHr|rffbjdeJTHn*@U>6#%0;WdJfF&M|vAN#! ztcMa`@#BIQ{ftG5_$6)130L;=`5P56!YZ87T9=x2LSk&k%1`J~>uGl)V5NdHJC`~~ zaH$vq09fgliImuH19r@7AS(4ROaNr10y26*;4_K;>DsJd(}$lG9WBt2SmA6H8Cfb< z^|y0WsjNQY4p*I+i9oFzmn<<2PtAJX#hkj~G?6$Q%!*S+NCPN?WPhq4hlBUT-W6Xx1d;owA zwO_@(N1LfZV6{g`qXb7NF3nqCXf`e1}HPA+&8n2%%psywx1UZW_0byqUF$(_45CQ-^ zLD2JeTB%&>_P=Gq-iVl4HK~i`F++M2uAla*22x}8P!@VqKKEKwgPen8w3a1-mSj;W z#%yS<02(qO?{xj(mHc%!ZP(7@%>G7sNoqgO((P}Pyuj?c4L{f5)S1&qS7flf^wZ4S zJBss{?YA6(<(j`K=*oUB2M9ECDpLMLvFyEeH8f zmV_0XJ%?!oS@hu4^p~e=884UuJ#IesT%SUxi(JL+nTN=>oTz{xdWSG%c>JaUTC{|Q zn$qJ~gNFu(XCPg|8GN{)wx(K=hf_BN&^m&YL+K{A&rjy1Z&*K?0+Spj=;vyy-FjSI zkX9f>SIepu{$31iTXSi%S0Tg3GO$~RhBR?M#y+EhOg)Qlk#fEb%B|AB4$9{;Il$vXjUN7W0prL~=nE?q1g+*e~U*Rd~ z&QeAV=!K?NJ#_y^)3?Vn{l5Rd=A3gmha8eq3OS!Kvaz2$D z%ON6UBjpsPkh77)9L8vDX10Cz{`?-l{k4DYJzl$C*L~gB;dwouh{AJy1E-BtKXw%A zqds}8TIT1nU_{&d8>QLbEzfc@@`8AK`F{P#x<_+G?$`Le>Ss6ic-OJBE&8Dmr9b;R zipxed&=mc(AjR&j3S5i`wOaLs(+FJ8MSi2;Tk_}YGP!nVsC|^t20hmzqDX{8salYx zlaEGE$|9hw$A^Dxwaau5r1Di<=Z9|9mtE}zik`;f`(iFtjj9zd-l0^tFMhqqYAH!H zk+&+Hw-_D1B_GL{_WZ|D!olVf^1Tw1E5Gf*-alFB@80t#?R1tEv0sAE5Q+rK{`RJJ8kO0W0i^J-MTc~v!wQnCi^2X4QgGqJ% z5U|s3JM9d&Al`*Ot$s-TP^>tt+CCbTLRMVzMhdZVnv%OT!pB6&a*A)}+#^2^M2ZY} zUufy5$nR>D%t_gMK2(FyZ}l@9A7i-^d~7=Y`0C5_MJ%#7EB3`v04dp4hN51(R~@n6 z)xD!JWs@qmQT#kNSTKO|JOG%mMBCYAE7*heTrZu!Hx8uej4`Ui&O+G*#XCt5PSGmF&@DaJN{z)!>r)9Nb+I($UbZ#H$J9}o%$h4aD)VBbz zM$rajW5mW{3-J$m?vOIq0%dh&?pySlUbHdncGKkJ(}fKi|NfYk4+HAt%V9Oc={5t# z!#8bItY4CoF}S%X^ztdvt2n54elkDs;gdZIE{3#(^N2!Y9-#Eh#4hz24epsGswi+RVG0X zQ#!Z*t}uA()4e(cJ0E~W$mv{r(9qqil+O-n6Y37!S$cjfx%;kG$=?M4bwR)g7#JbsrkOt9Zv z@U^F`DmBT^9s2&sF*$Vq$hpmnvJ%&!CtrOB_4Pjft&e#ECNUkT0pu;8 zZBEI;6Kfa3_db-cX|&3Vg~g1xLa8ya9yP?V>8t-R*lFcQpP(Z7qt#3!8&_&xI{Gon zy66;MYcuYz@G!16C!^{vmQggEBeM%CtJLZD`EAWOgUQVT)8am|3F87Ch2~si2SZ2Z zZ?trVQdJfoe2F?Q_=yc-c+^K%{<ED9;6{{2{o@eZ71K z9>OTjLL^Y7xLLjFiCrhQSF%+dKJdp$ns7^{-fa*1*=CmU@{&7uTf5u*gPlBa5SMs7 z14Ei%4*)P-2eq;A*%<}8@~qM}v6ZV<^3339kQ=pGqm&l8T+puR6pOkr{hSMGouik2 z#B#NR^_XQXiHEiEy0BsUW7g#ivx*%T9ZJ`o=uC%1L?5|vr3G7$Pnc*dK3oi#w=n<= zxb5IC^f08J=F!9Y*rJT9p_uIIvSKa-b+(us+XoiL&l10)b1*F{6T+19`RBJsT9h_A z&ijZ(Cq2^Ytj;fNAkI}2=WdkB;e&L@VV$lnEmZFrwOONY(sayzI38p?ds5V}TTm$G z4*m9Zs@S1OXJpD>Gi5Jq-h3?-aW3=6GJ@%99|s+SxHynBWo zA#hU9_`=aO7oSR+ah9>pLRijdqPfuGXKqiOXYxPfkx1uV77@1x-kf^P+S?V?p)KFu z@)drT*?J_$@-p)<1LAFHr1&+Wlp?*y!Y$e# zmM*VKUJJ#qFc0P4^V`j31V5~3rx9o!82Q?Yz(CFrE!Cj(FCmc(Jr?2!dD{3mububzc>NqUl|y>=PcUSmZ{*YU zMA?&7P3R2T52NhgLY^c3Mq%7#AJzvzEhrIJq}H5MLcp3dEOirXd4DbC?H=>pds6#< zt8SF-C^#Q}Qs>5_#vXijroUDzpab9f!9i??WDD{)5p0ZlvhsfjYSNSu+xVAmykVF% z;es^Uxs9>}M~=pOq@I-gX{7uadq2nU`guKJ+EVJDD<8|754mE$H(rk_7$4CdmfcAw z*x6HP$W0&6GrX2aloL`=^3WQK`7XfY@O6AsXcq->@q+#7edE~75v+!+1acc-+ln+5 zbrGkV>MIq)OiY`Mo9&T)>hyR0;YXiv?!Jvdxj$@cH|#g}=Ul_B_a46^K`$l$ezJH$ zGeWd7y}AhYdiZv-E&R_vABxx%*c6bO-w*hb_WN;z3oNZ^y)dgH8R-tfxc+*!FuD~0 zkBkf6!R^LSV{{0VX~L;J3X#DlA~(Yrndb*@Ooq~6gEuxR<2D+7`j}`;vnbh8c(awS z^pANMhuA&UQyU8yU4>bp@uM*0ag%3ARVbKGz5X&9>V2x#UevF+9M+lu7K$f++b{^oQ0mSBdi)X zJPSfyz+FwM`yJ(4AjNltnHHqCv$HF`c-b`0P8m#RPBR6%Rf+*`n0AJMc!aom(3tf^ zE2xyM(!Icl!wfwg1-V zPp%;T-H+x_21RL3J(tyhOzao;+U&ACtFYXTNbfMw|N6rw+sN>c85j?eY|J`1xY-cf zA~v0M3mUIrdRAYG?**NWpq9Jkx3i9hHTw1p&n`NB6qPxCswL>N_r?{Xb;wu`?Fo~ zLT795?pfOPxLkR*Vit;x7Elp3|3vKnVH#nPcw%p(mR_&V$DsZ-nHf;($)P4WBq;p* zj`SYAX}ZIWPdl9;89n1rr{e`?Y#bzNJMDerlY5fXrx%-ODqU{54)jfWzMEMl3%N8F@_kUe_Dng)UV|j#yr?36pl|V936s+Mu@d>t_c+U*aJsnax1Zz8r^q%f?vJvJT0pGW)`kl2T}no z$!6YppoGYbO_%vMuH+byBip>`MnylXe0)gk+4>2}*C1{8R&c)G2U1%+Z-xk(od3_h z3~5zu$7gM4Om}4ro(}GWUg81feZmgY@5T6cbCJC7Cl)p5ebGG`S%cwR~;TiYK~EH@K*E zWYWo>BR#N(a7y$!aU1rfGcIZhIc9Va8ND3TCTKu;6<)TjawFnf&tC5b3=@`m*@=$c z5Y}@_>#Ri8yF%4$K_Eaq#%v7)3r>{-l)0!v=I`$y8i!$uDtm#}T z8s+r7XDGY3Zb!@|Hc?5tcl8#Kh~Z4#1!(s_9QvnB^$KNO<958f=+6a{Yiown^o$Ia zXI~E?epdR@SV6BPLlFQ0&&86zUZ#|(^XxDx)xlKcwT#f&#smstxQ_ECa$cyye zb)^xbI?11bUwPwZx4#3BPJbZub}&xqG|-K0Mt$x?h(~_K!S3^23t6}OLVyV&P4r^H>6r}Qgn!mPjfp3=mb3l{pi`u_L?tC592s$915Qs5lr*os|M;jQU zxKS|4>`$h~LgPq?{+>lBYNLs(ofM+~E$@J|8r^mj{e~VV1|T=``~J0M>EXlBaeHXZ zXv&jz>;OCI2DMGh+$l9@Lf>v$=2d#**b29TkVNa8z4fonqkl4W|2SnK+uaN=?}#7Y zvoOVmemG`U6_-6VlY^Z3lHr)d7B*rz^Z?jL*d|y4wy&+>((B5)x2+lI-Yox?J?6d4 zauk$(J$!;8?>4RJ4xbf87m76hQt$VS7?8Up@VAG@<39P1VjOibYQ2F z7a{U!9)s;%B!5B9FOF)$3#fa95^!-`gH1ITF3|=7kE^ecTpTg7m$tOck#a3!Qn4jB ziw?+K7XBwC(-NUMpDB-^o|8&suQT#6;)8U@=-JuT;y)tx|2EdJ3Mz54?vd&n0nmq! z_Q_ltahVtg;CfG7pd$h*=POMNviuc+BRo-aFeA25K^l{><*X8DZdJx#pmZV zVt;f$c?|Z4?^1gTy!|xLclS{`aOXCrY3b-WuI?y8@q|_|Gv%e7PoGd+cwxy6D<4AK zA=F~rlj^8$*_N62uZJJg5~_UexpPTb^yRRVC{yp^d8R^TdMsSyl8hmO z0O;-O7~4y7zlzF^2*!2tZ6Hv5d3xC-0|49k1W4$G-hMc+oN}#m9)R`ey20+B?>YO; z|1`bnw>aG!bUlc!$ty{zy$K{K&du`DK>at<;cZ}IXAGg@2FQWnX#tCQM*Y$oD{@4J zoC$EDq=7nKLwfFF{PEY*lL7{(Y0TSq+t7OhxGOIUn$44U87;ed1X<-}P0jn0Qp7S< zch@tkrq@0e5#Lv-c4F=Nbbc&AnDuandv4?vDwBB-6c+%4` zRAvzNcNm4a0SJ&ibxs;aLI0Sri6vDM`5E_HSO$+6f+f&d+nG`Ro3DqTojuPEnBPk9 zsiV8`rs)fajTgAKX#-hr*OCL>0^~t1vnB2Cg)+2fo_snJkTbd$Ww9rNkWiH;3{2uY?GtclquVOb6_kDzD=CN(2jv2-f*Mr>p-0{W&O;y*>x=wzJi3*6&94yvx{UYNv&w^9im*OfK z^fCEChW0ZBj^z2~^O)(Al@S#0@cK^HLf&bWm{k$8DFRbo^1f#!!;9wcG~T(V2V>%*99U-29xU#`yiFmVZh=a-i!S3ye1%Sudx%7#xBrXcnYhm%;z- zRhm?yq)BgsQtIoBLr?tAYTG=Yl_)tm{tXNKl7%5LF7i`MAtH~*yze1l+hM#@TozCY zsn0-$5H`eDC}8PJhj(4>Q`Nfw{Ab ziVxL{(LdZWDhn*H7&2c<^6YM(GtDcYvwV4*ud1HyyyYK`sAz2i%7;z2k9~0@Y}yB;qXi8mGvb2bdV{ZC#2`*=8?r7O~5REae({9x|I;Z9!TR!e*lBP zQ*D#)HBDB*Q|MS=tBE~s9?vMq{fhy)tVd@bB-eN|%g_*=qIuTR8axpXegzklys`Fn zmo5hE#A!hVFITuM>rSe6abKi1sJYTwny*dl|8LSJx1TNu2%ucOE%1}=4vHDPzfEa9 zh+ZT8gRv#_^`5yB{D5f90D%ReK7XGxHguX4TbI_l3y8pxvuG$KW=9KMZ%&B8dlyz0 z(0d>MmX(#fie8EFcEH+P-*0iiGPN6{Q4j|dH_QB^m277r^fQey-y1A zU-`cCt>t@)(5$JnR&UI9Enk>))sz1YxHr$~in_J`Xk3-q(qOna?F23-rT%@lun%Jz zE^RjKtI$i9P<7|Nlz2_tH$n(F{<~7MgfnZ_C` zn&XK1Z6V=z(i=G(;YovHK#v$D+&QX{YxN?z_i~u-E}pfN75qxa#477nh}y!Euk@~{5>@^fUrFiO8m=rF3PoFTGqA&& zGrO6ehrE&}M&{m12DrsneljdFr3g)H^t0KmZ~eke(5G1yNy0z?``zU-+Z^9>KkFtJ znS=nEwvU)6O@^fdeUJW}ugH~j;qhDTDHYJ1Cn zb#|Xc@1YXDc5tkUDKhIvJ=#YnOvKo8#~eUhJ5jteGG5o5y;c^7;Z_pREcv}>DsHW-QgN}!>Mou@#^_pnY|V>5u3&m>C$`1Eph2VSR#fhz*`w6T#i1{r_qP_ifh$^= zfSylb>-^A{9)CY}+_6AveSxCdEy^f$iD;*ShuifGk+pGtY`2zn$fok3gF)SlW|~eH z!|ZO~SFf)b>$Ec2HHH?<6_%%~`*R08(O-_%?UC()V;C%|6CZ@02Cq5%IM|s}h;z+B zlNB*LHW~)N!eDE#RZM+lkwCdI%XZJ{5r+a{x@8>tcXsIE-!0oRT<T9p>@D;eFekN0ygNTHn0S6Sngw+$oTT0)RzO z6gH?79yx&;5j#&>tf+|88Bbf!$i9})b*{-w;;rO$8ccP6i3{GnbKA8O-W6x(8>^{Y zzu2;S*=huCU*vtY(|F>Gc=|TSgS42FXH!qWh>)o1i69Ct^c69DBC#=Fi^M99Y~S4f zu@pU#PkMaf|26t>UQm%7bQOTtA_^yPkK@G z`wL}Hgj-OXuQlpeF##i)OHOEv9-4iGD{3=Tvqk4_@OocAA64KRv6l z{$bq9gw_F6fRW+Dz)hAS|1KJrxD+FW>}yca&HV0i^i`h~hvM$&KDhxhRCLg(OX1P; zwi2%U^2aaeQ~}JGY=Kf=gh*|N0F31o9kj!}_j~NmcmE(=N9f;6td?uj*n0?_?Mqv> zrimL<0|wLjTO;po1L%LdaXeK)-#C1W^)(73pr*od;#jCmClwEf!W zxk~v#4ajvgt@HsL{sBZsl^fKz2sEKw@h1EQ@kE0(2=v0$v7T<2nW~|#xxGl4d3Vl=E zh!>bRBoC0|y7Zml;2+?!jx;Kn)VP4>GrG0D?Fr#GTS|=YdvBNZpTO&?`PIS){!tm- zK&&NG{45M;xp37|=n9|~dVJ?p+z z?|zlhf6WebXkx*JZf1KlNRr#I=N6O6x=p{Ds#1dE&79j3bvoO{*w4f6GT#E!?Rx>&eyNHDWj>tfzL zIT5i8Rt!5$h;a3N9Yu8Y%FR7J;F%H|=+B z_W|cpwOJkue#8}jRDvX&m!vtGIWDX>X}2+AF4na{KsU?S*lLXR(#ITDpL2%SEm;k6 zs!OeJ$-TGSEqF9XTE91aJoRoG9=jMMjGM-H?U>K6$aNUyS#g9@-Z($Lk#(tdY^kMy zOf4JrrXSKm$1rbaknxMDt6iMM*i>z^lDR%iP(ic|QFYRtbMrmWGdWj=JHbFH8Ll$b z-YM>2RD^fiZs6X@N$l8`h?5;N;-g2E*z4c7(Z=V^KKAodG|9*jc6#cay^=rhq=V9i zXot>!!9Sx~6zFyj4h-hw9%h7uJa4|w#xXPA!vrat2Ur{>j1GfuzUF8;%j8isGw7OU z%_T|4J)^DkIOyIZ(V#Ja*3M!;r8jm|IIVoV0K2f9C>g&a9lys?)70~avX(0I2Mym1 z6)(dzmgiO#=a5bhZo(Aa0Vn~>4R)G1>`LCPQIXY&_z9X0Syz2(Bb6hIYe`H2@~elupd z1=&dAjZyZGQ=1HQM)d<^!DHV4PD%83N)gTqvjIx8Wa5E!G8q38!v0}ALwyKd((=36w989&qbBNL_dw)!`7IUQ|i z+Q-RtQTw>AkcbVU{y#h3&5<&t#6}*Pax++`%PQL2<^EL=zX7POu3rlucv{U8tO#k; zXZ*@B^Z7@-%|ID;mJGJ&E)mo1J~||B;U*I2WiF!$)b3OR!K6nk2!LgJNGXy2uPu$qlvvQO5fYayZKmOOq{8*2TkAffGpwjH)NoLgo~p@ zsJswsM0c0Loi6DX^i*+7Xo?;0Nh$-Uf362fKlQ$~#Vnp+vYe-9{PTH9*#tFvVGX?# zJV?Cx$Ho#-QtbD~_A5dLK$frrY5?yqP=D2NTTVaC1;V&$dNi&BU;%^Iw_Uchy?ON@K8Vi@4{%9O6amW4q_LGD53+UV@ zo<%J!=JNvLX7_(H(<#M*Ts|tCWJ>m(J{h|o^Zqk*<){(yAn-+2K4fCIT4Uhwjrw=$sD6DIhbV%=3z9xVqlNii%K-U)LW%o*b9T3QQM5JaYHgNnOu};xX zo#a6Fx0~%l^Dog%Ga6~`$H?^l2#z0E~vZ1|{GOAT5C90(6wPh+&d)b&_(G6 z1+i6WA*|-;;zBQ%S&VKo#rHo7U=L)Urjgb&Ozj#q2w_d}FQS&BL^{*1pLw6{7iJ&p8dv(^8FZZFxK`#Uam6V>ppMB;0*OX9U(2znPQ%wDxai+VB8NmZ${1 z3a~Z?2?)Jk{p&FoB}HZH4fr{2PY!_|)>#>X9m7Cd*4 z_G&QWkdn_vUm8LPs^y@wtf#q5`OSY#8e3-LhxV|rgVa?V0X;&#q0$lg)XjAK{u4It zaj$myYrxug<=&>?v|3;pld4I)ez;Ki?gvu|(jypk1RGsUQX(w!D2nAj{C)3AKvLr0 zH*3ZmDgefMH?-?@89knssKnO*r^aH-^9SBz%oQp`!YVWz55`a=5o2SCr@)ilzpVNc`?{$D-(Mv&bGtjEv1tuF2$r2l{ z7z~M7Ik51um>An$Z3xg8%O49I^TFa&eXy<@L0!~pf`ul;A`is6*9PZ14?4A41YZT6 zm^e>2i&Q>+Fg8?sU^$0&VfPEnkN3!-fetMSCoX*K_^5N(9DLpSW|#u&qG&oJ-*r<4 zIbZ%9j>-(4=c!gH1JC{0%i`u;N8X~=qy!bcbYtTq<0GhydGv#yh)oa*`T$}0sXd~;}8(+20S(< z?pDqZjWYnC3yUuo7kq*VvX->FimiY4mrm{1p`4a~`dML=mdXgg2cp#Mt~!SJCJOtd z=PW#Qd_Fmz(p*tRD^){k<*lDK8hGqa#DHI({p|U`p|^^&H_e2lf%e zZ|R}5d^UP!i@P;qeCTC};M!65r>(r^B_n$XE=uV67mA1aZ?=!IkM^`rxn_gM`ZGhy z5N#Gdomu+jOLoG(*>h;i)YAy?6q-$5V`#|P3>!OEM&8O9sTOYt_{ZX40^MQSo#XNV ziyN%Ji~iY9+nRm=!~mxi0H329VUM&?nzV^uamJi>Mqpn!bH23iXK>X1m)4k13(g-t&r6loHwr-jVCu#bt779KbL14p z|MkV!R;v5E!ld9aD7Md?FuVT~H(!m$fOkeFbS=!V0fqVLmF}*ti-!g8@~|k*$zWMc zAHkDQbv0DPw0GY=(MlD9#j3?d5voM#r_rV8xRzb*sfWxm_!LD=83g`$j!1Rpl?Gtb0#1A|T%08_feTZ;E9(K1F1TR{qVRE)mL8U-ihvSv2G^ zZmB4zY()fK66)5cMZ$eVm>g644ye&IWU9qf7qYfHzV8C3FnnfzcYm=AD{34Ws!h;B zbZhirz$jc!K>k~|zG=*;LrbdBo_;lPe|KQ%G;0-^n(Q1qQv@cdM4FF2BDErJd%Af^ z+^qjCkI(i$^IHEEJI#y$nwA&P!@~f)e0uW9q!4Y(cWas(U@-byCz+1bSHxO90%k^e zxF61`601N-BGrXZeaa^KmX&vtd zKb9h{|B~O`IwNj!6SxJi&wj=P9yfSB;exc5n_=|l_?rfav0uC5q6y;nXj=l+%{VFv!*Iu(Fab=#l}*iGV0+tMF^KQnO>pX z!9jQb^!WP`(jsWFxH>Tc9!Fh42IM&Uao}(Ln-RzRkRVe@m<~acKIbvyQdfGAY(O`F79cM*C-`CG?aSQln{O) z8XqE}M@l<*@OP>CnepDw+Q!D&xvl-J`n_e6_!9wUwoK>gk_bS&{9LqoE}xU4t`_AA zH0#RnA;v3w#BB6qBj8s0Gc4!foIg040#z^Tc2|$4kI@g#FW@@gdJT!geI)k&e6j#- zeleWqA@%|br#2+6k{8M4I4$OKWaCNjao_?r0$VhHp(ufx8%-bGLRe}M!Y`qY$K@vM@zUrJg7JEq^i_7)@q$v`zS>{Y;cO^-co!1mN0+k_1S!K=0 z3(=>f2y|Nz;biVU<5Vig$m=sFVdGRS3!ZKdHO;+A5fU+IXBmZPc76V5GCULg-N?hr z)XJ24`-ZhGaO2+t5x@u%162Myyi;oT?*o7wS6{X@EU2;0mBQMo=CSmE@50wJRQh_y zd%XZjkc&xx*O}~qBt6+1wWe!fWse@amp1WC!e~C+S99^#0hmAXRl%j3)%B3`|Fffb z+x-tRz|+s+GtMq2V**C5C>hEjX>BJVXJK!ApTl)g14g6Tkgct`-~ ze=g|LXv7(wpb6srv6ZH1Y^XY|`s!bPqEl>RS(JcfH;$ZfL}YO}PJ&}P)h91(bCGOt zt0Q|kB|6pW-PF|hr5Lh#nOpMWj zduK1iSXF0?atXh@;`Ukjje9Coi zRpEWg2rO$;j0eIQIm2arhZTg*y1;DR*=e>TXuw)`2XI60yoZ}b%~nq6paKZnMe8@U z%{#HF{n$3#6+k?Fuu)d1>8V>?+NZX#$G5%qOUa)L?!=P*bh|$}AyT00lUwhu&0_kV zEW;*FC~2Yn2fL|j23Od;=T!StgJ+aZ@u!+T`LUc+eM7{S9DU3pH6eBZuNkepRDvXp zoJsxSGrhK@rRRv#kM@Ixn`ijTev?*Z%e69}BYG8TScVTvS@S zSo%mywv)CoKki_>x_If=n9lf_fd!UUH37`eSY3Jk$${{J1dkP2m4}6O0_Do$f);5~ zuUI2YsB4byeCsc)C|cVVSE0h~J|(O5_{(L%`-^8gQ*R#cX#>1KENHikygMHVhatVG zZ~;sSdMCQ1TLM??jwMg^j6f$eT3k098lzB1snk^|Trqw0L@YdoycJs52l2KUscwE+ z|058u8!PYGGGt?};ZM;;Xqg|BZH-Z&K9p$a8J8lE4Kpv*GvjShJ&To+PfTbcJOO-clgeAb>&Vc|>ephp0;$Z(9#}m^H z!-1L^yYgm<`~+IOXxKEu1KdB|Lv()a^qaftWWJHgWsaE73viJvhMV0>;elKSL68O; ziifwo?bGgGEn3vuADWHDS%l@IpGB5xPnJ5T1~n1!-Bd`>U?`jq=uzcS8})8TQ3==7 z@+n6KjK$LVel_X~YC&VFHbX={>xXG>Xv#24$JH~R+w9U0yRZqmhvZr7pI24;66J_H zSy_EpqTO^n#U8`dG$h3G-DODw06u+u&owO%0tSM_*zYp~ZgBF+sHDZ6d1wq1uehKa zwwntf|K56g)cA%Y2sWbIZcl>*yU@F_0TO}$4~UXqGW~fl!Hk#LFFkXbn14-sUg`Yg zSz6iwSa60q>0ju$oozmx(X<13XQ;#}pGJ$KbNPYg-KqWUY}Y50zcE7HHE4H-M0>=tidGtI?6SX;)du-R?caBZChq$M1y{fu2d`8E}2*eM%@XR^u^NhAu z;Ks&%j}Ma#)0YHpES1g)TB;Cf{$&Kodv!;Ijg_%^#IRt7?PVdinSq3=vw zuzCqb5v*#Kd`26MHJf0EP-apdp4@-U6}ibVdBM+zzU=S51oA4F;QeoshylTJh`Cas z_>iSAk>fB8Q8q;UD30(w%Eo( zD~5`&l1wd(k?SW8>1hH`{RWyYx^;V7*^ zCfFC=#}i)e-K^Da!qV!}&;8+u^ zx3Xo6Jo;wUdq%_~?2TaVJ}u{B>Hm+$#emgYzXX()26z4HJ~*qrZE$+@?Z=J3Z`#T4 z_h9>?+Eobi(=CCwbudZjz;i$1)aP7gjkMsP^&?i-KQ13;-6t?$|8y+i5BGy!DjFSm zeY@!1EVPu385gAY;h1v(`!Rq4YELk$+KQ(b3ZZ2eS1oJ^I?MNeA^epuRaSF{#WS<(v2WmY`@|s z5RI^54!i(JrZFsaFq9b!Yq# zI(>gEw3?aAL8mwPHAl}}@jS~{Vx7?aAtH(|d8HQD?Xw!;bHBqIdnYFh<{Hj|VNS6C zDbu*9?pVvMxT(DgJ1IwdlXn=?|O{j78-ik6a37dRKEMjvLy-S?e0mts*x0>WV6 zaL)K%+`(d4A%X6?6eG`5G-$E|HOL`CT~4gF(di1`DIcNEx0jGfahy0Reu#ARhkDu6 z?=q^3nM2X=Jgop^H6Qe0aJx7}5pwsCJ)K$7S8Uyjm?7KdF9D%7e>`oxi?#iZz9>X&oPGw-HWMk zK*fCwK}9rSzubSk1&`dI<8U=AL9cT@LK9oRnhjkdGLedr-q@U;h9MhNHWvpbHmc0x z&+K7)Y`sqr zE|_o4j19C?MRcYwK4rF#DEhb}p$U^kAU&Fo#c-7@l;w6IZ7ZDz^*SjIIH zRuWTU)1gspv*xlWL(L%blKkxc3N5+bdtXx}0l*mf*%zbf0JqQLKm!QqX-+nMQF7RQ zjjsHZF6}(+{_2)ynEgF#%-dkE0Q-1%LbmGG$hubFP2d_0`4bR3T<)L9p(g!o28=}3 z&}GntfBz4~nK4jSdc1WMOgIywn|(>%G&GO3w?@*mGNG{DVoo`MBO0X?#ZzX+dDx#c zNeMj&KUp7qJfo$hM`U#k6CJYOrSi1j54O8U=~_BQyto71uwU8G6_5@bHH#d>kVy}) zp);i7S=x6lAMY~ySs(9GEM~3CwLMgQRgn%NKa8yTZ5axEMgkOp;$|9&y5gIwM zet2BTJQ+1P{{@K~>ShXz*l<^`mTp0K`@(x0`wyn;&=ol5YM&=lOS5)m_S#*aLZ^8R zCq&JPz_-rPRoY=CycC=k+F59`pSF<))v^#FK#2{=pUguKv~pQQp4{UGSW|%b1$@QT zfSP^dY!sMQnN&=2#>}R6&Rj1s715$8_=>D{f(dbTE*qot-0{4}_n8DW*3n;a7+%tR z+N$<`cukiMQQfj5Qp3RapIz~)y%Mc+y&6Krv|kPochU#WUZ=x)!{#qF>b3ZUw1q?A zyR*0$!u4Q4vIi22|C474}IWRC>dW<-8O}|H3VIlVR~_E*Pf=4B(koO z@XNy=z7B?n?K65UcbbZ8l-Gs)Iy|2-+x2X(Y$JABBM7If_g;amv>@=CfsX6(j&UgD z^8@Tz+QlKY{sMd>C&b5wwmgY}Zkq4R)$FBmbDgtZgfFAyA6qF)y&T2V+Os&90Ndy8 zU)}v_odgB1)YgcBFWq=7$QQ!G^1(QPYkDfUM%$}A02hmh6j^OMD!m$KY&$z6w|ePb z9EHF9Ijz{GuwE*C<9U$Hg+(@Q3E8H(_>a(+_W0B%H*q5dl%^G?&E<5&Kdy`vbw#y@ z_c9ik`aO+BY437%BC&b-o`Nu~1tl)K?8|Lyy*(NV0xDl;}JiiIDJ`HM(1D}L45q^ zoel}95%hm_eS18UZ~XoK$|+2SId2k5kBA&eqt8#&BjOb(lwZNI1Q_xtZ}ua~{{hx@fX_j5n@{eEBX>v~`IZ>u-r1d)*g z6>cka1N_YZBT%_^6)GdZywU)cmofYgtCZKikeKLC9^ zYoU6cbQ-mLt@u*E<4oJ`|89h7nICm{6k2rq^jk|H>^|X6y$>A8XL;@>X}ziQ`EO@q ze1}JnjNhlC{OOQ}==LAy0#1B3diRx6hn~^5?=;b(WY09`Lwf{MnLP}sU^QM#tM%5% z5?j}#Sqt;cPDU$nwX~8Sic5(nF&lTEn2+JnYasrtEs59Or+N5YF=1f?{im%GLh?q0 z&#rE%ur#p#ud}kqR6BzbcK+?n`GdZi%dYpcG_3pAm9#pZO*j31@J{{2ak)aL*Vk?w z1L=`~SD7{Rs;KZUOUcjI&pQYSSsx2HB-|EjC9~u4BkEK)AR^V2_JkYCB{;19R+4F^ zf`(GNbK@=PM^5`UjoxU@eYd@#@od-lwPuftec5sSsR>sOLCjj|%?o}lF%uV;ANkn) zGC2MK_EBormnd7!Qi=X;=eP>w7StBZla?p8cP}qdn*P~x-P1FeD)?c}8F?2M-}{#r z1mmjYb#c0Pip^587-mo!E(L_{cx*eaxE=u3Wtwa?#o(Yd#B620B@p2L??>#jXlwq87batAO4(Un0T z{EZ+S=!%5P>`S9ng00a2K=Y7(!3ykd%T0~xpDy~_gs$3M!+{4cJ*CWr|GJEgDcuX6 zy}NG@rzQo;P!wLg01c%`7Z-akZ#z<8{~D5mKin}Ia81bR*hVyGy}C^VHyLqI0k)Vj zP6vH4*N>tozU{(%HB>ZGTXygf)>D)uI zpJ~qha?%kveHY2gfzjZQv%g1+4*}R_wVn$f$Pedv-Buk!ch;r#!j{F(0DH#UtXHbc zt^rbd->^`1n7!V4ftJJjMzYV*WHOycC?#kL2h&qw^{HK=#{ zoRiIyqiIdfM}Qt3`<*-KKX3RT5Q~p@4D+~KT_7kvVs6b|?nx{t5Z6`KImnyYqvUf$ zEG+p-__*6rKz_D&zF+>Yjw>x%>^?+lBN$ty;->@=gL%^IxeQkEyi0e(SB??Go(S#q zg~hL^n4YsTASDEqb!(X9alSNtrZu3fD8V0J`e8c}GI@z*OPxxlG|ZCanqv~t>T0Q# zL)j5deGH9`IkWd@?IGnGi>7Yh262G9dk6MkArn^vHWCy8uWTCe+tF180G3Y!L2ZoM zzcF^_AE`}Y9zfLZ{2g;T*CF;84-tpt4>eL@*LM@4tL>$fmaavfu}QtH3M*xJ`5!1{ zJ>jpK>~5p~;=!@bira;@dLqfPiRyA6-GzXG4jLANDX%SjZm-*r^y>3yJmJm~X>z)~ zoLLcU16XTU?2*LE-kc39I`E+HY@x4J9?Fk+9c3zJ90X(75o7=rO8)9%Ys%IvL*Wn> z%fqsL&SOm2?{2Ak0~^MiBMAUVC6393WOtp4bYl&_nkaqK&NXmyd>7Dpwz#`S;Ont3 zEsHLajkLCRXiY#$sH%KT>Pf#21zOBwWnbeWPD$V@{p~62@bt!*rAxth0~yA{(um6~44 z5R@9tQkDdjGh$-e4hHcK#Ho?Pn)e>c;x=wWjC+)Ytbyew@dmKcjeyZ3DkUU7Ry5y{ zflGkJ__dVjw{)t1GN@spdRou1# zP5?II+i^SNHUWJD1FLT0;rGE;x2@_D`^ypr|KjuW4^KEUNv4S~CpkH}9nQ|{xqk<* zu!mlq|8a55+x?+o_lZRmms?7RC(Voyp)?jGl883O566NZE4%aKDVR2N_E}0NGGbQ( zt()5G$08y>OyDO%v-4+;=lHL7J}D7e!ROjz35{$-OG!eWhaT35#Dfd;v-g?K(sQag zMCVbl4eRsM%+#}-NSL*9?;pR=d;l?huLO0~C3rWk@ z)^%{nkT#HhtT}CPPeN0P{8xtu94*+6TYu#B^+T3{0rzI|R@R!yMndi>7T#P&;Y20l zh%6BL7Tzgj^shuY_v!F=t#iE_Aay7L07A9EVLOz3erGv^M-Zs4M1xGvEgt*Um5h-A z&tOUGiwz^9pi9~0>Rm&JAI#6g7J%INeIWoBaqRX~%XXK<2hSQnsZJcNvN>h5?T{CR|nQlj{lAw41GRWLrowUa5(x(y^cau~w%i=Z7^X_qzVKDRhS`B3y9TX8faT-et$L zKl)LPVw&nQ5+5G+{ zDZ4K_$w*ZeH@D}@>d3LPvd6m)SIGaat!4GgP-fQMh-$rCWms1vCHivFJ~iCMb+0{! z#^88NnH=J~pOf>Z$Sj03ivv233Ux?JN-Uc#E=_RSuRIyq$`5G#e55;*Yt1WTDFP1K zP?dk_k-_^%K5@R@Q;@sXA^>>l1*+6zZ&_*&9l9~O0)-wLOV3m9x0!i))D@t>Ed3vY zZX)Z)U2t4Sn+4znQB#n`#c1~A-P|LAq+!QNer)R}#KvxRnG9EH{q66Gu$0s6=2Rs^ zP&6=k>uB0?{iPX5Q=*wVP)CQZWheAH@i(klQ$zIU4cR|Pe~0_ad%?z_x#Bc5yyRF!Y3P#3-L`|v@{o%J&jg>Pf3iN$F1ktm z`Umn~-c4)=)6bY36ZV1qn^jq4=xV>R;I~^bS5f*HaB%L-J!_c>gS$dUJ#h&PN44t^ zp&pR9?W@H<>TP$E_%wO=37_N5pKt8#Am-NwjCz;RwpPG?{rgQ}P2_zmd8qBy&{bd) zk>F9O87@{Bhxo0a`;N^O3B%%69yh^lJbz2z zLI^B?wX2yfud8mA!Fx3{;C z+l?$)GkuXGV*_+eS-|ly-f-rulZzto!8B2C^35wZ&E}qzAnZuaJrx$8MR4XaEIb*F zDwMjeiTjOgWNPE8d0*TJ9t{@4CnS+$>o56nUU(9h0}?ixTagNC1^4Y)1Dy_(Qsn{| zb{ubyhBYrC4f2qlnU@%2@zk6m$HlG*x1h~|4}u1*eUH!HQoX3hm=!?n^<{BV2td#D zI@q}|y(uBY%SUPsK+ZK@sfhYDAU~`oZGX6-j;or}vUoo`;Q@FufYtC5@U+`6**yT+ zFX`tu{k=b=e*U}R=^!>HB_|9-u|xo`*_8?0=dJaKPt6_sJ{P|0$5&$lTSQ*~1?go% zxGHTSV1+;ZwCoV@BJrSFh$*)WDnBI}nnl}Zm5Kt$s3r>&9H*o62?U4awL`@mSYQVt zFKme@0K=n}e_MaqM>a4o^r|+%R0}wNfB(H{#}mZAMECw=w4F1)zGCqRW$6fCwvy5U zQ$S%($IvV9N^2A+uSs3+_&smnvvlUrM`2*kVL${llH74|abd^1zn)3pa#r1cAw~DO zSpGoBZIeC)0RZr$R#}T`#q=X<|9VnWAq4WPWdS`fb6NJO20DJ# z`ea+SNd=^B9*`YCzWLaDg{|31wg!OepW75;GFF+F!=l;W=;WDBrI9~LGNfRbxe47o zZ?%z658aA0z1-9(Wx&+yPA68vN>HYYV|!_9Ih`8T}Hc3p|IbKxjgEqPOaJ8ngaRmLC9V!Yasah^&Nk;(Jan zP4yWG1g5^K)NF}O$iQV8V^Ej|ZoX$s>d|8QTSBsO-@#e)jBfnW62d)oHn@Y39hI^z zQf)>hfHV?tME638hZqjnmFbF*6iu-ghEoq8ti=f+;`$A5z3xZ7(?q zT?_X;xPJFfCJxx6aRd7;mc5>fkAPR5;EUn%a2*wY%-g3?_NOehV-gM zuhPQW1@^i;eey4Yx+ zS$J=$m@0>#zH7F;X=}8My=(L z=VB?x?RO;^Yn6wWX|Md9_?#L%X!LKPOEjP1K#h{YVSONaO)zMJLe9Q54{UH}#>4#R z)Dm*9L0ngUPFM|f7K!pkV$q~)1-H(pSfD6z{0ssQ_aTYHnY_l%?*B@wK zvxDZ<*6l#4SgHx86hCxw1z8c`cTHs79o;>-n)W0b(zJcMBmnew1IfE@=%=!8<)?z9-IEy-mT(zY~r4-feDIG$3c^B@l&@p4LKi@6@ECT zKX9Zz+N-%s9-_Z-h4lgMYVCmSKjov?YqvnUvV6r#Sc5;=^N)Bo(b!<+;@Y2)kZOBy zZ?3+b+n0UfO>(jagl*~^uNOTz|6?MKT27PATWXnMi#lR??Cya>b)2b%g@qz>ON5B4 zi_2Ne!WHLej9SNhYsqETn7#*c{AU~GA*3w}EL@HDj%*jQ$>}sbeabF60Jyi!v`D$+~lalBHtDzEgHs^FIVRY{a^X$m- zx*SgbC~eb_y_IgU9N^VF(@LJe4{7-g+R_gBbcmlPJv9Y3!=JVI0LJhm#qZ^v?8GlM ziB&Md1SXHc5M_g9tEVP_g~298&j0B)EuP1HgFl-Y*u1w(1wxWAWrq zb|o0FNsg5!Ct^I@u`G6{sP)yrcyMc88{B)bSe)pdn*i)-5>o|$H)n)6XGN0#y!S}^ z7UH*uJJLSZTnDxLLZ#)w_Ts!S%7(z!Frg3F|MkS>{f(eLDFR50*mgBBs@0#Vj_WY{`VlXXD?q#zh@or z;dCn~zCD0lDD9VT)k@&<7rFd+^WLFw@>#Vd#Q_#TWQVW^XCEXrZr1Ss*ua3 z9{r7Dw_%Fk3fnzv4n1G7E!g{rUy9EKDQ)VH&m)BRyunwh1v`rXTy?1>3Mllm`z za2jqbG+&L(`SDhXI?>;`R+H3A=L=M=%y`6DrrGkuvMQ@5bx2@QG9=)vd$YC@{8m#} zH!}pcwgzsYC=V%?VrJ|mbeI4^XISCQ8netYV=2tcJfs#or7{I|DI%uYF$9@ck;OH@ zHwRG)+4*H^+>uZR!Q2g|e}z%jO`Og}NvW@jj+g#e7&Y1G0pf}4UjpwO9rXH@@q>aZ z*i~ma*6e9(EXoV9uDdDxz!nF}{yD(ai-c#vN3_>mbnf|N9c6r?$-a!@S#N+)0QeY> zJMBKNeKBcoYf)Cl&%$yq==Ka;nQYY3KArU^|+EmfYn`Xg7 z?`6`23Yzcl2@1gyBsESLt2p4}>L<7YIL#cd*CMFGGSDn!58PNmY>?J8N8Fs9sv!}e zUC7w1I20}f*2HHeK^cfCOff5RQ#wOUtBWc|!Zl97S&X7Wu=Pl$OfeFTG{A}w_Qrth zn~54nwYjzr$O>wQy9PuB&8_J&5dnYBVZ0*Ht6ZQH~DFfU!G6h6@-`4~mZ2I~B z4=z|;JTp;L3X*zX4oLglTgbJ{V zT{n11K7x-58;oOi74taV`*Gm7q#JsoHz}40du2s-6%_*4o0>9?0V3k#O}M03`P!f( zUSBB?h_92ls1UFl@{IlAdSHd#Sjz_My9C(=g z(oPW;(WxC^R=;2^+a%|7Qp2AIx&GtGN>0pElZqY3>tkk#jXKj|a|LrXdDuC!%nWaU zH&j^$HvJ9sxN`LNj!Cg+;7!fne3sW4yY3k#<;hvJi=VDTapTT$n-R33DMXbC{XQWU zD`pI*Fs3krDzl3lw?1VE$e3mGPO8{oki#M`9a=r1F!J{~^8y{^4vXtp0__pFoY`e^ zme0akFwyw~n`%iG%-{{o=a?;2y4b2TMTWJ69yIs$ar#-_UUukDs9{wL{jsLzt7@e0 zxv+8%yC0YJvf6cFsnv9DUX}>8@SM6@a!hvzC~1=#8OX^}qAvNOEAX9KFJ1^S282g??+ek zwk9bn7kOFw@|F77g+HE=#+Zf0@~`3O;V~MSw39nR9V1Wn8}Rrg$zVfOtzOzw5eN-t z12BezF=+GfYHvPN_R%FA)=$l=|BrjV>c=g{w{Ctsmp>859sbR|xs%JKAD~yp40KqH z7(YG#G?4#Wds`p7O->0UlX$RRDk%=Tpr_GUpKhqK<6T$^C#@jnMjR-x5pDUsWO|bM zbJrR2CsmJDtux1ew)ePJsf%a0xDp%ZpUsX3HITDdJanvL@T?nVWu>F;4TgIK9|U$r zKZ-zxyf!@%q|Dy1W6G7&UN85<(!Y1}^|MNp)E#>bZMr#&Ku8yw=xY{Q5J&`9Y@oKO zYYUb%b8`UWAZ=c<(3E(+cMUO2tgbtq^8xdEtH)6*e6@S1+{bS*dn?xY$BRxndXBJi zMFPEFGwQJHKw{T5&y`$ZpqgQcyozqeI4ek^cDq-DqsGH2E8)A)aAc-ESb_okV#u|@w z_dbsvCTd5&AVDq>QZ0{#m@3erA2@%z44)obX9R4RrF#1r5#J#EkbPR@4ddjT{qptn zu*fDf)#*}P_lwv03=aXETN0J$fXqv4i%*~&dj1BkbKkRnR4qJrby6l&dA|I8`TOvl z6Ql2KM>2xNZ)TrslRX<^UHc^6$2=6*+@x~2`%ulKab^neMbk90L;UVuKna4J#TV~Y zx_&+ho+o8n^7nj}wb(B#%=MqSM~3T{ccHJFFVQc$gr7Bg;XAK$QNdW~j?3>;LO_W< ztc2Fl;lW;CZzNl-{QebDLfcuQ+I&b$%QH_1aGf=WED#T?eIPh`FzrQRV$hS| z4|Xh*m8}ha3j$>M)OAzW5OG$i%`;>+WeQ4%Yi&HZoaHRSK;<+PgkQ@?1fCzParQbnC6Ld%=Uj z_Z!{!ssYBr8Z~Flvu@yk?0sxZckI9 z0We03QK{ZwT4j7WC2C9?yso6POl)5M;A6BvjxWwu^CR&{+h^iLvnemUVB`LAJnDW0 zTmE4mjiKsZFJnE_j>VZl(OXpz${cXCHU)yaf&#KdwQC6Whht~*j4~PaNoO1DeNV#y zCF5<7gt|AA`3DD6SSB}LUwh-;pRmt4e2+%F-zmF)qQtL-`>&*$RjA!^6FH@8c+5#1 zaalz2w%1-rY1!2cVc>15+o|+=$qum&^Ha2Rb59!WzZ&zXtFXgr;f2kp{cllc23+F& zEkS^)?FoSUQ=<*sWvjSLrv|~yTfa@}61KiWSaGIel-&}PQmedp5)s-=^}|+H8{GOc z+4}by7T2p{O52aaCkjoK0PVh6bYIqCXR8gmVSdnNXq&~U{sEO#`JLGo3VCW>i3Vh( zr+rsb3as_*#XEULFjJrfz#Xa*!KL^@4OhDK_Rq9W*pJ?bCrY=}Bu_;#Lq0YPG-n@A ze{yXzt?+=bGNiV4?FQ|5dq~b-t)KNe?eLlpi%38 z;@iJBJp$GHOWnQw20p*MYnLAH7I7vrM)EZdtip_TzQk>eMq8-!Ax#keOK6jtuh`1% zQuVDSqG0_jgBB0V`@z)REF4N5v)VcXC@{{iL`v%eeVvDtqPs>PKSDx73t$D<&gQS* zeVnH^gsqT0aXfYs*nMeY;N*I?hb?GpAiYcf3D`4y^q0~5+1Y{mk<2JD+<)0NkhRtm zLXDS%#}~0DOydS~<5Qw@bIkZ#?1{Cvy#rM<_ojO!5~ipJ=pXJ+^mQ_g$_Or6Af z$loDQ->XBD&S5IP#UPhLZl{n`F;k zk~Z(AmR?#Z?%7338p9kNY++fTs#l4P56$dewZSejt4_&b6^km?mnZJ-kJ$^#&A0jv zMOGWEA)7~`vWGxdPA7J;plwV#j*Dl0Ag{9xXe;}Fq_!X4NvdKEu#q&D|6>IU=B zEyi50`SqjVk2b&!?a1A7E!MR@qenD4xY@B(6Qmm0uH!XS)G(#)kYM%k(o8K@txj;2 z>6}Lj)am`!?tT%;Ga=94*Y+B9y*s_f7?}E%WFtb*_el@}%U#}(anD;#@AK>_k4Lh2 zf7dz2U_E8^ZA!Besdggv)4@l6!sC7=!hYhWpwfJ=HS~Z1<4hxPj&Te!u4^aB)xAmq zLQpKW>r#mO$d#zW=yu-7kVia>*gUiyU=~!Az+Qk7@IK0+rqK4!H?8@g1YDwk2DeUr zzbZL2sWrS&i(tf4>PpSFMg`)*H^Z|5>vjJ-_D$kO;Ci_27{|DBT6+s}7f@5MCVB$Z zmyZB(Gk?d>7`xiVSY9FJVU~2u~#=%pLQHU?a_yZBQ!?;)>MX2R=esQY20 zJTPV(%*>Y7gv8W_-#TPWfo)7&RJzB{pau3X5Voo$zo zE+b*B=v+1w|AGWt3;5&qqX8l+-UUy7e^9KsOhd8|m3Si)@&MSSuI`y85+x%9)QhWo z;qZ{&#p4ebUa;zE_y4+8tfjo9yR|a+OvOLg(Mf6$?I=W)sS81_iUs%P$jugAFbTN) zbSn7L=A{#Dhj%%?Klv}$gP|?t`VnRmg?EoBwIt^D?Zd>r*T}T5iCbwFQ zH4!?#ud~y+p5vO7^CI#mKA!Z>F@ZMQ$+jMrucZTw5-&uAd+es zspMsrd|Y3}RxZ`j{y%3u01-+t=xxwug~L2$dBwu5PmgzB0&SZC>jtgE=4+6>;$97D z^8nBy?FzIN9y}T-*`5wGtfavo2m4_?|T-rc5#LM z8jB{W zn$o!wKrGX;dAEbWoaeX*S}4;&nqpIm0Lvr*B?%c{F|F{YO#1QyQZJUto7kA3Ka`Ko zEe^<)STz@0wP2oub1C{I>ye3tyooY+yb~*|V1-AEG zX@JQBB4r~@n5FTI-ScsWIPH({XYuL#(T(*Jqt8`^vbPTjXPJmXsB}EN8msF^b#){4h}Cc2hpxGpRwPN}X6R>`E8b2Q7IyjFKXoh(bOzVW z>s!PU5{NaN_mkXjCcd9~dwa8<9e(%f71U`+2T-SB{lJ8Ch|%jAXNrhlp4<>^qH5yp zGX!wKkj!*=WIPl$HNjmA+W4`Wh-@VPH5hhqpkcQb4V>_hSzStqLvxDf5$;-IBSuin zk8@CsoXM%QDshxyG_w;e;*A@)Zp(`dyRPFaut)8bn|bo@6XAL|;P@_^6r1O!#=GFV za`Ot1r@zbM@cN<1-1qYz_PVe)!w1fWcX*+O-cGhHbT!0OQAPEYAQ$QmE*=cKVN#^q zTK4U;pNg)M!mupg)a3}MHrn79uC8)RCSz<8g>vLn&n&&ryzTNk)jUS1&7%83Bt!d; zXE%bj#@+pl!(SSX6#N%DEL^krR14afeI?(2ocH=c0CS<6S;gigcwt9C0R(~}psY^f zhZtQG=GA@_WCU!B`~{)F04*G?+PaEm;E^Ho_%d&7anl@cu}$EhMk}2-n#$zEe3^v! z*Tb>cPuMs`h9HFE-KJz}o_B^L)CpI|te87ha~Nn!PGe&4u0z8M{MsKA>DTvQH%5U1 zEopgN&wrW0PD!|JIWM4t%MG6J z@=ThUto}b(w)asu%JNWN6tL&35ODFK@N={47pey85M2XcrMJ%N>{6#Edtawpdxx!5 zW|5l^!~{HcdnNDDHXZcWg^miZzJOj%7ykb1EU?eCCc5KBta?m7>RIQvfdR^k?xj(3 zb>M1M&3b)}NRG zBM5GAPO{Ag3@k<|`*iO{E}TB_OU7Dw;{~wktJ0Hq6!PmcddX>lfbd(*tE`xS&zR?- zNzhr*`oMB8aZ_91ThG{q-o^+qR~F=M+b=c9>BWM01R^>Pgk@=@Mc!gH86@kBP(h_7 zsK%x*jOmgSP~~N1k6o(a?AzaF3JC+&z&DD@lk%~c;fZx~^*z}(C06Rz4^568`|r`` zxo>~(WyupMjw4-3d14J?OLc^G1owIOOL9$ek%w-6V(t53MaV9Q@&LSK?@Mcw9~&>< z>9l#E33ZFw1<<*UcRKB0Q0u8%dAM~ts`pJ@y6?r3aWQ)>BbddhpE}t%buhpAjitsh zf=6nDM_B!)7jC0E`DjLUYn*cJ*v=B#Xzf`0skzJ3!eO!JYn#n$0PVZVf%|e&DjK}& z`^w#Tq=d@oWC2&!Xv7FgaAsDX=GqZtdM!+}kviD(#1S+NJC5a86*bUcO5&7t;os zYvF=$qAAv(k=8pS00)>_o8aWDq3Pd`>>NO6=>L%@+&ywHcG&#S|P~O=*@ik zW0d|aN)C-mOIhVrv8kb8;hp?WjN*+N-@*+kthLXmG$Dd;fw*oyWoYCfGlAdwcWi@p zDxNLihw_6=0iyH?4kPrkVsXIXw|al$kX>k=7s?c_k8aL^=JCK>_pfI(;&`j6x$PO+ zF8?1?m1+$iCukEc5+a0?b@H=5qAjs?#}-Atn(G+rbmmp!T*EeE3gasa^C(2UTm}Z0 zkcH&e9!$`EoV9JSqqKcA?BIw{PvY`47~n|)1+SZaZpx(|mi-BC&K@F3Uyt7|E2|vC z05yYGm+&EZpR#Jl5MU!7*3HxmSSu&>7vb#L!HA zA7}3ANvvj27Q#iLj4|2f^~MV=lPDeVzibUs|%Op z>q3pPE4Fh&Z^4WY3F}$I>TN`Es!r+$r2PTy9)sYO(3OnZ?1+La=8N3uAdEk+Y}T=H zFjTZ2S^DKh#xY}Y$nF8gsLE0;jzjz98Q3Q)?KyViHjCu3Da4y#~Tr2}0_rbH|PEp0;xB>w51-N-{ETs0n z&+M?D+Gskeg*izg^nxOj@0`u6Dpn3^s-dTScfv`kZOs@{M8xY8gzPtHQnkDTle#Se zH%ey*uu_^CLkeAW9$RJ*hpbrhjD&d8{sk3$7Q@QbvRaIiJ=^&zKEj|G{q+A9D3nHH>eHGw@Km2j%4qK;mM7f<*n=MQLp>^=<^p1jvXxZ`7R15NqyV zZNa6y$w;t+>`m7OxB&J0o5>uD9+zDxWo7!a-nhiGTd*f49Xk6!+V}1WE1i!IQ~z94 z&r)uA+#n&U3BTvEz9bB^Ep8^4nAXUYbgVAUwYT$mU-Ww@Ry92lfROrY?X9&1i{LxP za`Na_$LpMR!|tFhevUOUCp^C#8z!u z+97$q&`y(Fs@2XC=1;gU+G{mQ#@??OSlxQK-#{RUa9|$XmHz^x=DVRY-uE#*zv^>? zD&+Z4Ue%X7`#}9?5b$~tej9=lweA2^^?4PcJ93rZal_<gy_kS zWo31{fr9C((W@kjuCY@b<*TgVy*01mKF}7|Fp{d&x|-yQ;E`l`eQ>|fmKY$-YuN?i zrOzF}cqVMbkHbOmFbF4;nl(AQYpa}%l(w3Is;LPIpZBuq%3e%^PKLMN9MGKFh}mr% z?T=$JsD}7N=jBCsBcIwac3#Tr@u`&D%3f%T)Yh((pLmH(u}|}y$RjO;)or`f?S#Al zbdNG1g{y~1d07J@)*1ypiK0W|BU9mdw(pld{SLe^+P_MDf3BLM^k)4?hn5W z1LrYL#kwRiQ^s_t@Fu(Nl_g>^#eo-aM(dZGh%DYIxrTZ1?ZpFMA6?2D%}-KWBGBU| z`>3g7^dMyx#<*qXexpoY^9+23t63!<$v3`aj$o|Dqr5;yZ(|{O9YPAC%V@2$Ck306 z8){mu0zo4QUAAde&6asROz)&HW9=4^O>C6PV8lLz0UR0c%k*t#fP=BqY|Pf&yRzPA zhDqj0QzKqJol2qK;3}aKu%;8M+pVRHC9V$w1+x@JKP}g0)5mNSrtng*@1Btq{eu~x zDse(tNDe}+8?A8PBTrTt&I3_XT3AEK&Eg*EkpJBnKIb1x{%)4>TI4=Gd=7i2`wlPKA($8&CTG3l6(pUC*y& zV2tsr>F9A#aT5AR@Z)W%L9<1-V~MCU5fp?~R98!i!Ndeez%*8EFqJvgow`Y#OJXMG zjzy3bv%vNpp7WtwbGXf}$QnX1MM?e@fhfqN-!njzu!~t_7+B*P-w>D|`m34b}!b9&qK+GWY2IIb5g3T0csOo+PZ|6&CLCM zq-*tPp2SqnibXJ`ZvuLW8#EYd97NLcoNAp;6;bgYwCu&Y(MRXdH*d_4bA~So%wr2S zDRU4?<`yNKU|->obx{*GFt2?~-4M6jt`q?YwT3n+`}$Y|(#FwHcep4fuY8&ao)2FL zl2UHN?HVD2TvIDg%(3=H*n*1){(i79I3-sez6=q1p}lzMRiTa^D!Q?v)1Fss+mLh~ zmQExK9KYv7%?8eWfnLP^(aFqFx*vYq%jx{1GXB(7y#7Wz;~@Mw`6{Qf_f^QZLPFC( zTYLNdl9D%AjK@GN*heM{k&L1l=SfS0xovI zK&NKs1U`|s2<{EJGw=jy0(~IIK+ zsp%(Qt`zvNAt%peTZx7Fn+m}JA;|8JaicPZy)^S{qiD_*#i)&~D8k)NE3JaYr_a-g z4W3UH&jPD{6D+If-k<)YpVqz#Es0v~|Kbc+*LAzs-Us&NkFJMCJ3coZLget3skN{6 zzWFdCIaXQw%#*5HS97T5#+_#%{qJmsLR3;tj(&INb=Clea##XJ4;_U2Vg*=H7=VRI zrCuYgH#w-wELQPjD1Tc0#D^(Iu0khmnpa9l-!oBB!q7UKU zy&FTPY<>3;%v^mfT1&BV=^$I;fPw5)0ljNCYc_wYlr=A;GHCOoTp8SWJSOFJU;@oHk%&~oW;sx-Hp z?LCm+jEseG>kzS&Vymj|Q4_!WU=$t0G5Pk_?|K`{eECFFP>i#{V%ylR;SV?PtY z5c5Py%ocsbn+Q6EP>@r%;!yl*nqcchLNEnc-95u-MuPv!m7+jP-xRyf8jZM;^m1%^jziujdxR|%Jw(x}4o5ky`#V0iS{E^c!zK&)fj&K-Cl)7dl zqnZu+(h^W$C<Q&I%pYNiWZ zjx%YV%6udy&-9SozkTf^Y*Gz?KhpSKpq=(7R0nVpqg&e~N_(9J=qYWs9{>fnrK?9I zw?WJGT5e>_ya@7&5*>U`00aPX;Iq{Z!<*zJ!+dyN%^}_ABKDi++4N9#02E!IH;vG^CoI#Dk;@j&7~-&8)e9ITYH`NU~)n9>lb1%2HV!g%nA($ zQb0umV>CHHbhn(Ho;*6;Px3-4u(k+eH{2tyEXeIk)I|20Og^>L^6 z{(!e-Wo4dG;(&jagcgm~@c_U1Uu#%sSpA`Bcl~Me(why>gHxEb3f3ouO|x|Uu&G&i z-iJiy7PcX`S~9SC=}oma)|^&o!cdz6f{^&F)8hxci8E|)lS%d9y7bTZy{@zpAjX5n zkz2-$&4J?5YDd_m_pnu-^1R6Fnt*GYy?u#)pK@tIvxsfn{1l3r^YgEcOCIu)uIDa7 z3(y|hj!E6+BY!Q`Tfnaj(82@a{}K}wy9y)V!Vpj>-_=xF=QjO-v~t;K&R@Izr*?5x zxjJIW%!I1vCoTjYwOet|u8GgyGe+5^?(^#y2>#j{HTHIYhFm(4g<=|Svn?2GGRwd` zD)P&zx!~&hd+Ae>Be#vk&#pYC#!BJt^q^SrvZhgEbAE#FLm2Z72cTOwkyBP}?&$2= zvj*SDWfGxXh4U)Mj1D0;%OXQo78z8$kWRzwTSfnxTOFQb76xd8R(LEduk-YV$<}KW zAz$KF7ogB%pqG_eSKPVO{F&y*%sCA2ABK`g?Q@4c48~OB)hCx;8-I{EENT6=(y4d) zGzoq$^OmR>ziNqETKp;bskq!@Z{6yThkVsSWt-x@W}KTws{CMv#!AJt7Li=vbQnAe z&XvEcc6Jv4YyrFL;+7=0BgG8;gWRvu>mjqaZRyM`=WVi)OGW2PUBJ6vmRTB1=lX0! zPFoJd%+6;1aDRF{)fIlX{i!olG3>^P+c9PzYVJS@1;B3O3q64_j^@k{L{t_ZE;-8O+riN=YC#pR_exn z-u$M<@EqOfZxZk8$Pp>l>P`8@hOgk;8u&>yJbC>{zlNIq))Sll6EAaVRR0hUy=))Z zL31474Ipc`=(WpE=1ycMXDN3+X2;b)vH6{WY0^4RPrm}gga3Ph)@lub{cgF@r_!{w zDvu#JMMbZnZ`Z)T`PbT(^G=t4pZoCZ-d8+{QrOH07aC8ry28| z#YG-B>+ZVX?(a4>D^}R?^hEmYyLv|lkA9t5H0t;I^20qsd;!?}0QcblQ2jo={6o(# zkWG_{QqsPIbc1_Auc{2@v;#8gK@!_}9SD5!rBk(k=tQ?0Y^=GRB&#g!BlYEm(>TEY@MhnC8iqi+cgM`N?WX|)C%7HLC5qA5nFHJL&ccL&lc1&yzEco>w2*1-RAQ)>nwv3vUN5rd&9z^d)oN zHc=M1j+#}uW$-KJ_&m&P)b^LAbh)p=1ovzY=&B9@4fGt%Jb!&IJ%GF7YToG4oe&`O1VS$c2uL^dCK@0F z2t`T~I)*A;KtM#)&^yvWn)DKi^ePGnND-w=RRp98Hn8h=@;lG}Jm*}TeX*0Poq6|6 zX69Y*nzd>K#-se6FW#4bok0fP0ROsZ+MZU8?u(4SpejiY0-`L^q=|fm%or6-api23 z?F%uFI6^2o3|Tf(ohBuBL?{s9#ELCu>!LWh2t{Rui#RRIkh>;MJaIJ#jX2@O<7n_2 zE(L-EX9z@7WS9)>f;vBG0V%6pIslNB_H4#wUqhv;#S-Z-2rRpJDNXV#S-?8n^)FHk zu6M5q#M(~8dzylxXVi=ouD|7MaX1UQF1yB5{#os>S7W>U;-5R4Fl&eEw5OfFG~#=# z^}>>P!F*+QijWF6Z&n#s+UIPWy7YlBz?lFQ{q7qY* zAfoKzaY$$uib(WVr%o}nqzT19erQaYAgeJ9smFn#cvkXS9)KDS9JUu5=AKJgAjvmJ zJEB9nvOr8A#jg*d{WsSH1~IRQLd1 zt66-ypM{W9lln8dm#O8DOWWf3Dhn78EjQGX0OFUMOd3iZ$jS7kD=7INK}#MlVS`a1 zhy@tf2JRYgKYa$_hI+4k&C7@r8Qb zvlxJz4{$h{H~VtD-Bd%2kU|aSmsCg2Gp+<^at->cg&W7o%=r^WKjo&nFmm`w?G6#V zwR3$CskZZmMr91hwHcd!`SM2u@9a|}2Y(xfMUrZvxw_P~7k&Un7kpbA1iS}I59l8o z_i;q$r8F#jY<}Pw0lJ=b5>xhmOXjTKw}uAE_LCWR9~)cGtmk@+I%*oiAQ;ubp=2{Q zz*4o5JsH68$(v1^axZo)s%iOWb;Whf9^?@UXR6*t;Cisw(;e*`R^p3I<5R(&g}mR{ z=29hH1lk&EDr>-L1Lg<2OWRUG>!lJyCul!HW=Ms65Vv#`04SDkSHRM$1f>1q3RXY^-c)6LACgX&-kpc+c?R53I|BBZxIuRlG*%9PgeIO^IIHt9+-NL|M00iM;X_mf57VXuE0Z^ zzB9PVwAVG$2!W37^l3`&bgdgjz!l}jMM_8Qt!vF zUys!;8hUAGcvtwhGkvDt>?jO;SHoye$)t>#Pd1Rufl9X&x z1__B@|2!5d|M}=uV$>!(v}^`S{$FHu!Y|&qmbx=k2d;*pZr6oaY8MQQUYuaXZ*?4} z9+%IlQ}C9&9#gI&dOL{7 zE?JtLH4(d1^MM2{Q zIXw>RPlaUocv^P`anBqG#Dpj`=2t)zXLH89+JEKGVOz~>G@8V zz?78~%PL_fiLM)Nw{s3?w%5l|DfHk@C9TGSWQ|>h3|pE5Wb7bX*i?1FhdJ7;RaVTE zN^fC}0?S(sNvYt7*X^kD##w4{r)J{Z_$spseFNPD8H2Nb!3I>T#lt)mfArG%Pm3(P zfbpETY*E+2aW}I;Y`iTL!R*DrfWjoBgJ)n&TiiH3n*%Z#O?dh%{3{}e*+|@RYWPT{ zTGgUQ3!!=m>(AVp>AU*vNq6wZpYPw>Hbj|eIJvmnzJws`U8X_;mfqsqDg-zL{?)NX zi+f+UTGA<6#b3X6zu=Nj%%)L9A>n<0edi7B+asqeRpW(P5YY-NJX07tF3;BLoi%DL zN8C;U0Fo_ziA1>y>XI#7m9n@D0WrrO^JxcmE*f{tk%r1wvtnUJXJIr61xo|)UAmGq zsFfHc7EUXsqoLo$AYge0RzPpFgSP&{*SYtWKv3Tg^6 z(H0Dqu-mo}aO}$-1bF7=NsR)g;cAGZ#Lr9i)nY2S>D2aX+*Pc668}CNrHa3JA0-J) z1CbzTs4{*2j~r+48-VdhfVOyu*iA1x7z`UT@k;VP8e7r+k=W>YoFW!vHLN=^dM~x} z=4{Y2NRg&ssveskKyRcOjb+B5S>;F#E;d5`=^03u1ta!cbm~Yf3K1(t;8R?ktE{Yy zO>bS+=8)sW<owT_hb;oYxkXL<^F~r>pXaaTt+>LiyuWlDSHUOCf)-XjsR>VnJ}8Y7>K?Hp0{`t~aui9Rz zgSsU@LiMsD5ehFC9HMA^=ufTWG+mbXI z>%EK}HYCgUBWfZ79lqA*eDJIAJn0rIuC}Dqn1OPeYXlza139b^Hrh-hvj3v~zLBME z=ipDLgI9*P8D}vxGk9$BF!kM^=F`2Hfs}*ulvE$o;J4++O1;K|t_4v^#=!WrCWQb8 zlhI28prIk3AvFCnFT^|=0O(BXZPEp{e++71qUZ@lBJ$E!^;XxJq65{!I_d-Ny?1j%Ud^<<6Yn>LwhOuU~*a8R1aOa`1{(GhP-SV~i0kP%V6{Or}q9p+W~4 zio&=9iA`bjmW;ABh=#?0#I3|A?`78cEhIReN->kK_w5WVGMQ^HjMrQ1FsrsA)QRX2 zIl&bV=&EA!XK6cyj8MluD}O;Y-F=Og%of%I0`gY<+(8ZD{04&v+e3y2Mwd7MfD)Zp z;S$Yf6DsH*5!PQqsJd8y83ON5GV7bbYU}81=0S_tA{k+NKxI|9G)7JefZb#$-o0g} z=MpP~q_CXC3W?GM&5)n7ZqRazom|BZYNCj6?xaYy6J$G2=yDv1d$uw~CRYd7&mL(* z2T$VsHry5m6*Fxx2EZ+#{!AnI+(UTh5(SSjnsx6~=Z~(J0?RFm}pQd$!nBagV=~o#2eEi(pW%(Q{x&S2M8xjC)xFHra|CBr8U&(6+I3>7A5D3 zt(prOyU19S@kLb%ArUdO0Rfa*Fb|KoB_!}9`g@48i?;^3n3Ct9l|B8d{`Q21HJ{Zc z0P9!A0x?yK^cyDC-4uilsUk9+6CN_bXsOfPZq)vRh~m>Ch4UYZ=M<7dO*lo8w56WP zC09*~#5qA;&9Mr)Te;Z6T@$Fx{FCL+V!0Ewa15OMtXxb6@*E>1b@O!>ERw5A%#y*P z%z|H5hR$xzNqy9mTqf~Dl|mmbJ@p4fi0Ttb&t0$Yjef**Zw`fjSIJD#touTVs zg$712rB-!o4fbzllYp7e!B@R1s}H{It4Yk@ygVR&lq(T>&vj)p-VhfX9cRNL)DT!g zU%gL+HsAogR$nDlOixz0#+#$K!Ongn!4gHbmM#hY5%}PP*YG!`9l*I8;d$kD+Gz?V zlwrlTJ13$jjO9RGkEFR07apN38>1`H@THvU6V041VG3hNA7Lm*FtlR1VkOfdlJO#o zGslWbH?MZ4${?a-UGSsC_I+OIoRCi%K0Ii>(lC2kKP=J*M`$}qNas!>+MOjQY9w8M z8MK$-^Skr?ZG%;rt&?T+zJcL4@H&yjkL9}3DG=&`nm;iY=P+Ofs;y~#XdM5MHN^DI zpkwT7hcT1-klZXQgojh`tpgubc_6JlI3*lMFW^~SpK2!S>(inZ`9fZqQD3pn`n4nE z^>fNIi=bY}8(Ngbre-;CXCN(fYN7)xeLz1GZU`2ad9YygQo@dgwQZ4+ULLOPuB*bl zOl}@iQ5CIBGT(Qxh1qXvT<>&J9~`^hjKR`rw2ZjA6m$LDNftA3*KA1=g)9>0obD?= zu%n!B92ak;#6Se}(F|qeM&!^4gKO&xqS?dDE0 zipHxmwLeasej?no|I*;;o0pzmmG!bPU8gh?0;78;^l*vB+WZw4NP#OA5TO%liqLeH z8Uu63o!x+GhcXidEyqTdr%1wm5V)hq>}yWH1YT=wqWQdvPC&bvFbwaAmU`1G$ja27@o2_} zBpc`h73AYKOeVl!*p+!|6__!z#-zRUNBH&H9+UjLkDdls*n~3!k-JfwYf(L|7Fn0*7$V$>pZe4RJ)GrMRS)l$tJIeE~kht-(}Ris-Fsb|a*J zLz2x(Xi_9q&wve$5OL8%w`F%&n#G`*oh;btynEi9F%>+$X3Xy()E zUy6-Lp{}VWyoF2&PYNtLa`f;Ex@sLx`x^g6nK2%&TyWxDe=zW%T(kX~dOv857S+Wp zjusFtsxL;0gA730O~D!E?3X*mZbTwcNO%+@o+3?kEnn?1qOW!}YviQW-YTk$IcSOP zBFZ+lgr001?w6P$Uk(&m`BnO)KHkkCa56xS0UG(#!%Yf8j{?z?BUd*6GL>@+!pH(} zU^vrE%x`URP>GB0)7&ziH(hkNx-B=1@0;G8JLzlKUp20m4oH_*;?F)6de*QFz5mX4RQqF0LP5jUZ@i%(cYa~csWxp={OU#>;gb=D+J$7-jnFI?Of?EZ`oK zW*>!E78_kbgKb0a6z0E>hQ@J4&3jSCgZ;Fgb1Jc=iUPWUm@N6XZx(OrTR$?Pky9OU zOZmmYs_x+v(Y-Y&R{>cSwu=rIMc}`~O#ZG&x?g6eH$?01DSxmMyPnRS@l75{VP4T=R!s z+-ZoIf)S?SL^mk3+Ez|Kv>0tXN21gpH0jB(0@bX7{LBj8y+2n-qa!C9Ae2`tGLT2( zxm2nbKdi!1N-!ZhaA6X$CqQB3^y}n=d0DPux-MG1??`#2*31a;pKsv7#sB$?xla1b z^K(%<@`7Q~&ZFfdhx4~Z8z9ScVxcbmf5w(h`kqX~p6EmMWxrgs>6tMU2H!CGeW-7$ zJ!*Wy+;MXd^aGt3y(#p}H1uO0)58Dy44)(}0Hj@;>dpJ#GwEnB*Q+$SzR)Cb z&%N+WY?0<+;YrRE^cV4MOwh>2D4u>x32-77?SDhL3(0tvAUs1;buoM_sx}X&aT-b* zEpZtct%JKxCS5_jY>>}Y{t9}`mfZaMU_JawOnDql`N=UiQphGB9Hl5}aqW7WT;=wU zZkD`_YY8`QYB9|}{cgL=c|FIB;|dnMbo}(DKKQ+lSMs_ACUYbt8mB;E7c;B0`fz*n zvX1&f38$&i{S%qyXcoqVAq@K6HdJ&4*Z@SjiYqy2UB%>JKFdh!s>eh)m{a@kMaW!R z!3`QlZ(p<^kU~{0ONGI7%Uu&RC9P@l$>`#EHfH`lSDiv+K2-pW{@gJ{^YTQQxSX#q zH0!4ld*@h17PcXI`!*qP-8g3L*hLj7f5)7hpq`L@#hyC#7Ui&_&1Gcp*(sVC`A zL6mXJY|NM(&nn@OU&ho`=B&KJmf6?W$F)(>PrldsV80d(eu?cZhO1_}a zF)0My2~vkmKd*7rx{=P;b;Glw^?r!GSV$#=#sI@nsG79!{&ij~x)NP5Q|9@{-nr0( zLD2;>9Ui8ZRUfkc}`w{>BIH5pk2m5u0xD*|L0h zso@%bLT$f&@IM zGFZy{QY)d@%%L_F*v9g3n-74Lp9*gAF=BDIL%Skxnf%sVum@q{&_+#jP-J_u6=*ry>gy*)^A4ohO&O` zi@sHSVr;vN4?#EgT+U%B>mn(X`bEL(-)?}e_$del?3k|kYh7Cnm_ItS#Db~zaJZsU zh3QMHJGXRrsSbF9b>UB-^S}o}Q|4N|y?FN=$ViH=(SYJJV;7yV*LzvF&ZobmRSUFd z{>V0iK?3+-(WKU{-?{n%&qyYvKtgKrtPI}WY<|7_e6jXBc&hz)!7z|t9#}B#7f$u9 z*XkOfg3pM>{)K4MawyTC2t6< z-?SnxviPvqnSMC8_vAbFQOE_+nVU z|L=dVzQ5&nSqCctDo2Swm(~7vJ7K~kypIP(a2XVcR(Ew<2aUw7nZK$bbZ6I4rTb2& z^igdCLV@pqRX~f`92rldKsvK51HpjS|+0- zFV^RQ$dL zl$Jr~Vn|`U57$bc#O0L7ukKu!`LUR9OO^`H{*q`MX=?*ziPaQ&@4Rn zHtz*N%TCr<aqHYm^!IQzZ%rKm!$Ql}%WcKt73Ay{Ccbe$`Mq{P%BH>G&Z zgGl5C$<>HyBv+2^Qut_C$`F=dp=hw}CLT5dP5A*S4WFFYF5f)&v&x`0F@2R}`cu2n zu=jr9xh+NU&tC+~wUqi%i+BF93R(V@9ZSGkI_5q8lV0$k<%8_AxrOcH+E0fMFUzNP zoPx*~dB2?giR^tZO;=7=d?Y%t^R;wokbPRW?I>jJfHH)+ryk>5$oGZKQGf4^Cj|!v zMgWn>Hw)gWf#b1EVO-I#inP+;><`dG0mB;{1wt1s?1WrN&A~({z}V@Q=-nzP6JI$E zOOAznj!GQUR9NlMxm~A5#IA){r8QR(wQ|3pwjTEFxx^*vRAk^ovNLM@Z+Fb$))23% zZ|PXQ_vPjiTy~UGerLl2o1s0DeZG2KT?j5KxPRH=Z^3}*;nB%<+cuF!j1jrZ{wL=- z4jJ@Lq3rsGZ;1Eu%$#YY^7qW%kH?k9t4gg?sot+cRxrk8rp?kf8D0aISpM1KEf@x9 zL0lVp)XCs62I=81;k4Gxa%I8Gmv1M&Ce z74q)+mA80fZYfUSMm2JeekrW$_l^Bfm{9T*cB*T8=H!PXn$eBK{w#d@#fXdEl3)zS7I-ANG?vJ(TK;b)sbkXq2e0Xs>>Gy9>pa}C3Z6f zsid|C!+ZymliD*8f*Mi6%jNE($V{6H(4+wS@|;w@m<+ngZ>Ib^7INiUI9yMKg2*{a zurOTDF~I)6z=_h7(utq3p9F1)W}PA8OrMOCc47m+X;moO$A@JH_YN&4QJ|a?W8V9z zX>7N}50j=YT?dz@@Uq_B=GSt%V3Fo~zpB9msS&3hkonrGG};lDr~u zFZ{^VsaxX$y6M9;_x!9?g zN?-zhIhv1NZJaX;3&$^uRk_WvOJxYVrsk3|mSV!!^4}N+BlXm!;cM?tzpj{j8P?sB zlumAT{1&9oyNJ?Kagx$I)>{rCNR(?w@Y{TI8P)vk6Jc zxW^wVHI|9&X8Z7x>DWg87mhW@lBq?RXYl{~?ISqbl>LE_tJ+{2jZhNYq0N^l z(U6?tZ3*W(7vBnDa*MHW3B#5@Th^!$YtbBi^2Ef+`SR?dhz)bOM7drXnh*cnUh?o; zg(`p0!g*INJhLK`(yoPwRzyUyqbNp->tmj&mh*II&c>;sj9HOh*5TGxL)f3NI)rvP zRf5y-J_ga4(;`UkrM?Mez2nJ?0QA)ghm?00P$?2 zz@;9?`BKRh%0JAsMvvo^v)TlM-n}x<$PO-`OZkR?Tk2>d%!(-bOol`UYh`ROigp@t zO_NA=YUMYsY4GlpCDjy`iW(TrfXI~=OXt!__Stc*$|GcfMINo#Ha@QVgZWtm5W71o z%{2J?q2(LTcbcD$I04Crsv(CLGEZ#0U6u{GK6gHRbM8{(lsQuC!;8CZU+1a_^W`vh zUiOIl?1K9-ymCbqie6rx4_#sq=_em_r*6Hz$WpT8=%s1#aSWuw3P?Qzo^(4N3Xow- zg0Jm^uJz3f^uq_rHBjTKE_ZmiD4}3A>oVU4+%Gu z`P+%Eb5g)4sHWEK&dL#_PDZ%)KgjZ@I(OTr3rarzqu^+}dQCEhtPZ=)4q^1G z0Ds=~w1&*WQlAx%e&Gn+*j<+2p(GEH+r;%5fFT;_ReUCbsv`e{C)$7Z*F4fOGJ5uf zu5-(u;lrd=B6oZ72$d>E(SoLzJFDPTeRr}j=_By07UtSfJx9O&G8`qt!loj`sw1tY zY7GIC?nQF57n(3WzmQ|7*C@Tvy|`ff5ib༝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 zⅅ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

    k%hPVGl?jhvXs`Ndwrk6Hgj zk?UW>FI1qGJy8!2uM@=KBan4F?q+ECGUbDY7=&lMud|zD^IWuJEiJy2GW#kkF=GSf z|JdQZ25WJtr; z%YO7v_gm~eB%cO;IjVg+Rcho&+|W&CG*LA6NUeB(p8R~@3=#xbZMH1}RM*ZLo&dCO z0IV0qSEcQ|`J_HQFu;yyc|LJN%*XR#>mt$PbT-xC7#6fcqwU*ET9E`22gofxumxs1 zlVtdV(#H{cQPe#%-f0u6&dEGHIEe|Ybir=x@|k}>QBmn;eDEWNK25vFWFQJE; zfRq3MLI@$9{G<2Y^{w?!#t@TC2yFw^l+&<%o*hUV&g76H?JS{*E<7@^H6+@TgAen>M}DKm7o zy~`k{3#Uj$M?@e|99H$fuAL)blP&l&K4d?QLhW#+)M$p(HjNWaZMCH2u7yX0X0lC3 zq0Bw-=^#3x=j++rZ|ZUlusEf4tAga>)R^K5Fuo%{eU)v94m6cBK|_0Kl)ZdE7LA59 zOE-UMN7))EEi+9NB)uh$8Wmc98I#d zY+ThjmAuR3yxJG2A|ax9yJEZLhqn*A!5;u(vp)%GT9m-yO1KdO@zpHy4@vS(H{d(% z-K9k)=5BE2aYN{;qIe2D$%kEyf^f1Ym$$rNZ3Wdj1k#W7b^-*y9IKqkEMa~vH(YSs zG%Q1Cw2qthHmyCDZWbVa#Rm~frZseU4?R26%6=VjEUiVJvy^x{VA|qzk!x+mWsc)Z z4SZw%59mTW8b+0-^g}l_v+)E%<%GM>;B*g<1mB5W+&TyS1CO2FbD8qeK{Gwv^>o45 zrr)WEJA|o|(G~GSA5JnopN(5PzoA5X??A5KpGSvw8x>Wa_bPvz6ac=LY&U} zoVQxIXECkv4I^bkl~C60dSr6Bo^tbt0lSd1(GS6;Vunho_Z!OpxaG7TOJui7oPXb5 zuN3T3F)N|^G6#MX-}DD>%Mo)%s~Gwa_07D@rgcJmZaI(Iyy4?>X6y1pYm2n=&02D6 zI%@VcI_<^P-%-h4>cKpAwD^cwL*`_MIcB9r$yoJlS|o<3jw|a-D_Q*s2BOblC zY~?W%BE0bUc~8WcCDaMM2< zuLc`g#>PN`e92AuizJp}v5Ymz;-{LBbYzKKy!<8RytWrcR|W6m-3MMm;U1d^CkJHT zaYVtR9>~cZ{WlrHt_1omycp3y#Js`Q|NUvH_S z(skfxe`MT~iqd2Gx|fFv-otqN2lpafQ{hAKZsrsYM{M*$3nvJF48~|Idl@w4@Xc)7 zg%E=^Wx#a*gd}^m_sH+OkbF-bEpYZ0th1T^#23@+|5-onag>LY+S4%thc&;JYX{vp zVvh@#uJ5CZ;0qr}*x3?h>LE zPo(JPX7FK-ZJ2HKx+fIbu+7nhC5AepJ|UK}=ZH0W778jK!9yvyYN{MeL`~{16xXZI zHf7%z2R2;yCFDU_p_E9`WQU(I7mKrO1EDWtzkJMEDCx4WfO#VW{pOxMYPcmPb)keA zM=fp-#q3+F?7cT=Zo8AmqAq5)3A;D%Sf~Uz-gUnAF*J+$p8Q*N-T842Jstj4 zLqzpEll%FXKHclRZ-Y?mFl6~eLPo_gG3c9XcVE3Z__QuWf9i%@oj*0>gOΝ)1(z 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 z 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 T|Cf_bH-huc(jn>p+y?&-Kye_^ diff --git a/Assets/Audio/footsteps.bank b/Assets/Audio/footsteps.bank new file mode 100644 index 0000000000000000000000000000000000000000..ce53111e82afa57842d804c8be464b71f08ad73e GIT binary patch literal 136256 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�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 diff --git a/Assets/Audio/testwave.wav b/Assets/Audio/testwave.wav deleted file mode 100644 index 2a45456dd4b8b1f0b7897e508279be4eea5068c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195360 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

    m#f?V1!0@6Y<*WGlKe`?kK$#j|V2W3!SMIn#Lv| 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

    }~=RTc&?zhE)Rr|sn5BQLb~>3SAmX)W!#H7 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

    y^Tc5gv4OA-D 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 QjKFLmr8b^C-J12HH>J3PCN%T1C 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 literal 0 HcmV?d00001 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0412028e..0584d39b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -81,7 +81,8 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); //TODO: REMOVE AFTER PRESENTATION - SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); + //SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); + SHADE::SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); //TODO: REMOVE AFTER PRESENTATION diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 7c7ad1e0..6daa3645 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -42,7 +42,7 @@ namespace Sandbox std::vector> handles; for (auto const& mesh : meshes) { - if (mesh.meshName == "Cube.012") + if (mesh.header.meshName == "Cube.012") { handles.push_back(graphicsSystem->AddMesh( mesh.header.vertexCount, diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 6d4b6fcb..12b2517e 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -18,7 +18,11 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept { - std::ofstream file{path, std::ios::out | std::ios::binary}; + std::string newPath{ path.string() }; + newPath = newPath.substr(0, newPath.find_last_of('/') + 1); + newPath += asset.header.meshName + MESH_EXTENSION; + + std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; if (!file.is_open()) { SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); @@ -34,17 +38,6 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat sizeof(uint32_t) ); - uint32_t charCount{static_cast(asset.header.meshName.size())}; - file.write( - reinterpret_cast(&charCount), - sizeof(uint32_t) - ); - - file.write( - asset.header.meshName.c_str(), - asset.header.meshName.size() - ); - auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount}; auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount}; @@ -70,7 +63,7 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat file.write( reinterpret_cast(asset.indices.data()), - sizeof(uint32_t) + sizeof(uint32_t) * asset.header.indexCount ); file.close(); diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index a1a8b29c..b77d429d 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -19,7 +19,7 @@ namespace SHADE { Assimp::Importer SHMeshLoader::aiImporter; - void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) + void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) noexcept { for (size_t i {0}; i < node.mNumMeshes; ++i) { @@ -33,7 +33,7 @@ namespace SHADE } } - SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) + SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept { (void)scene; @@ -43,8 +43,6 @@ namespace SHADE .changed { false } }; - result.header.meshName = mesh.mName.C_Str(); - for (size_t i{0}; i < mesh.mNumVertices; ++i) { // Vertex position @@ -95,6 +93,7 @@ namespace SHADE result.header.vertexCount = result.vertexPosition.size(); result.header.indexCount = result.indices.size(); + result.header.meshName = mesh.mName.C_Str(); return result; } @@ -143,16 +142,21 @@ namespace SHADE SHLOG_ERROR("Unable to open SHMesh File: {}", path.string()); } - uint32_t vertCount, indexCount, charCount; + std::string name{ path.filename().string() }; + name = name.substr(0, name.find_last_of('.')); + + file.seekg(0); + + uint32_t vertCount, indexCount; std::vector vertPos, vertTan, vertNorm; std::vector texCoord; std::vector indices; - std::string name; + file.read(reinterpret_cast(&vertCount), sizeof(uint32_t)); + file.read(reinterpret_cast(&indexCount), sizeof(uint32_t)); - file >> vertCount; - file >> indexCount; - file >> charCount; + auto const vertexVec3Byte{ sizeof(SHVec3) * vertCount }; + auto const vertexVec2Byte{ sizeof(SHVec2) * vertCount }; vertPos.resize(vertCount); vertTan.resize(vertCount); @@ -160,43 +164,43 @@ namespace SHADE texCoord.resize(vertCount); indices.resize(indexCount); - name.reserve(charCount); - for (auto i{0}; i < charCount; ++i) - { - file >> name[i]; - } + file.read(reinterpret_cast(vertPos.data()), vertexVec3Byte); + file.read(reinterpret_cast(vertTan.data()), vertexVec3Byte); + file.read(reinterpret_cast(vertNorm.data()), vertexVec3Byte); + file.read(reinterpret_cast(texCoord.data()), vertexVec2Byte); + file.read(reinterpret_cast(indices.data()), sizeof(uint32_t) * indexCount); - for (auto i{ 0 }; i < vertCount; ++i) - { - file >> vertPos[i].x; - file >> vertPos[i].y; - file >> vertPos[i].z; - } - - for (auto i{ 0 }; i < vertCount; ++i) - { - file >> vertTan[i].x; - file >> vertTan[i].y; - file >> vertTan[i].z; - } + //for (auto i{ 0 }; i < vertCount; ++i) + //{ + // file >> vertPos[i].x; + // file >> vertPos[i].y; + // file >> vertPos[i].z; + //} + // + //for (auto i{ 0 }; i < vertCount; ++i) + //{ + // file >> vertTan[i].x; + // file >> vertTan[i].y; + // file >> vertTan[i].z; + //} - for (auto i{ 0 }; i < vertCount; ++i) - { - file >> vertNorm[i].x; - file >> vertNorm[i].y; - file >> vertNorm[i].z; - } + //for (auto i{ 0 }; i < vertCount; ++i) + //{ + // file >> vertNorm[i].x; + // file >> vertNorm[i].y; + // file >> vertNorm[i].z; + //} - for (auto i{ 0 }; i < vertCount; ++i) - { - file >> texCoord[i].x; - file >> texCoord[i].y; - } + //for (auto i{ 0 }; i < vertCount; ++i) + //{ + // file >> texCoord[i].x; + // file >> texCoord[i].y; + //} - for (auto i{ 0 }; i < indexCount; ++i) - { - file >> indices[i]; - } + //for (auto i{ 0 }; i < indexCount; ++i) + //{ + // file >> indices[i]; + //} mesh.compiled = true; mesh.changed = false; @@ -214,7 +218,7 @@ namespace SHADE file.close(); } - void SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) + void SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) noexcept { if (path.extension().string() == GLTF_EXTENSION) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 6c617c04..dde3b0e2 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -17,6 +17,8 @@ #include "Libraries/SHMeshLoader.h" #include "Libraries/SHTextureLoader.h" +#include "Libraries/SHMeshCompiler.h" + namespace SHADE { FMOD::System* SHAssetManager::audioSystem; @@ -200,7 +202,8 @@ namespace SHADE AssetPath path{ p }; if (path.extension().string() == FBX_EXTENSION - || path.extension().string() == GLTF_EXTENSION) + || path.extension().string() == GLTF_EXTENSION + || path.extension().string() == MESH_EXTENSION) { LoadGLTF( { @@ -301,6 +304,11 @@ namespace SHADE for (auto const& mesh : meshes) { meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh); + + if (!mesh.compiled) + { + SHMeshCompiler::CompileMeshBinary(mesh, asset.path); + } } } From c82d01631ce9aeb6aacab89630dbd53569171ee7 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 1 Oct 2022 13:27:51 +0800 Subject: [PATCH 293/793] SP3-237 Texture load/compile successfully --- Assets/RaccoonPreTexturedVer1_Base9.shtex | Bin 0 -> 349612 bytes .../src/Application/SBApplication.cpp | 3 +- .../src/Assets/Asset Types/SHTextureAsset.h | 2 + .../Assets/Libraries/SHTextureCompiler.cpp | 13 +++---- .../src/Assets/Libraries/SHTextureLoader.cpp | 36 ++++++------------ SHADE_Engine/src/Assets/SHAssetManager.cpp | 9 ++++- 6 files changed, 30 insertions(+), 33 deletions(-) create mode 100644 Assets/RaccoonPreTexturedVer1_Base9.shtex diff --git a/Assets/RaccoonPreTexturedVer1_Base9.shtex b/Assets/RaccoonPreTexturedVer1_Base9.shtex new file mode 100644 index 0000000000000000000000000000000000000000..38e0cd0f80f5299e8e3d53ba07f88462c5f6c9e2 GIT binary patch literal 349612 zcmeFa4_K7vl{ZYtrt0u2z0BvP*Lt-vrbcCo6YFP`#*9i46rOPyO-e9>FuvxEt)!4@ix|`yiW|WPnK7i};0(<3okKY1 z8Etm+X47WV*10as^~<^M`?;U{&-tBm?mthi_MVuS*qE`uGWd@I{yzNu9sCDm%i(Vo z{H=yRNV^>VR>5Be=DSB4`%#X+R$QA5udbcM?_0YV@v7y2t?&ES-k*2gZ@dNmM&|FG z{=U=SV=ZuJy#Gz`_3iV0jIXE7x`+6>Hu;>iTR)5+tZ%{{?}?d8!7z?O>J_Z#U4-ibY@J<8bb+} zU#7!&fp#^?$DSSa{5yEO1wNzkaHqZRwD(vG+!=3o?2$Y6$X}g3cIDf^x0Tao5#L?` zzAlbPb%c?>x0;;n|G$NNZiv9Q?>7pq49X#Fwcl7fe{d`A1e`@_~v4B3DCHp^z zEthA&Y9{NW!AxIzhQr`IU&mpW-M>@DoT%8$9{jJ`crYAm-3NsYZLE^rTVPQ zJC&?Wl@bWoXVxZbz2afQ+jWRT<%CaXj-}s8xGnR_w~Lb87Q&)og=X)dw3P75ycOy_ z(lwqB6~-)0(%>&cBo__e(p=c|>jJ`UhUAHcs;Vl&D>Q#w{quPnFL&xQ-U5H6`rvP^ ze^LKWyJyl}q+fn*F_^_4G%E;Cwq~1KF7JyF9(*am{P;uF0^yxC7R#adGC$$>4-dZN zjr?04;hi;yEuwJv=Y)qKe!3s_DFDA(=3GQ_ zMfSIJt;e1+60Xaft&y_&!-Tg(JYYEvn(_H_#~#4OfZrWHy5s-f@&7;8|9^7^`VTU{ zOtxM5cD=o>gyzq+mn@c|^owf=TP)k=m#kZpO8D27=NI4I+1W{Wo^{*&nAj5b7pGW3 zBMGGrlD}W`Yl~9VvX$_en#tCIgn4fee*f@ft0*Lv5mO!xKUzZfKpd>xs-a|dD3kfjMvTlCL_mEhkeg|9MS zuLS;oS6aM@eun3&3G)25MrK>tsj@Mw>W z4=%1cxneotzT|E5_1e{X!h$#Y_36Dj>v$KXqGVxvTO2>7kx=Tn*qBOfluDKI|%F@B(3v#Nyf`0QZ$?e@*V zvGZ42mfw!Y_G4?ctUvp3e>QC2rt)u3e>=wAVgJ?o#)tMxCAZfQ@clw`;K$!*sw2mC zDRS~VgwNE>v!0I(tRcM1R$)%)Y0D>^YumQCq@;lPd(iUq{QOjTzxk=;r{}-_ejq^U zvHy~mjz;09=NGP))BhUs$In{G@o5|nU!V6p$FC`wM#rf8P7=t8>TZmy+sx<-_^O{WnK_>wNt% z9wN`*+i}*|`iU(6r1g7H{; z)K>BPkM$20Isu2@zA|sy{LW50>ywSJ{;Su^@B3ul zLD;`7a`|PNQ;QQ5yHu3lVP2uO$0a%lt19XPfMsB_toJ@mXdFeLlkP z*G#GC|GNDG;UhMfQ8UV!f2LTUUz}06h1+|=2Y$LGEAh{9FnCekT~L^gb2l)0wdf zVGrTM<}%&&O#_z+BmZyy*RYAO!@NPGZ{5F)F!FzEaO4BRupXdsOv!nGF#7lV7fC_F zxIR!F{#rI+^!HneA`=Ot{or`@9gY`Z`2{aMd79*CADpgEdWSH^Bf>jPJpP}A=P8Q| zcs#8%Zr8P$dPn8-S-MDok6Do|ruP_~` zJZw*Gm5j&i3siFB`dlXxYd*j}AUlAFrI z^^!nH&-SR8S*DRBV3hIawPn`p1_mDg1>v~tdYx7~$o&K9b$Wf*a+0?J_If=$e=xn< zeTn%_%xu%STywa8lpycwdPMF&Xn#q{?Uc)_*I6vjZ6PcgW~*-`D0u#hnX}dUy1J

    pupMwLf$iJ^xAUpB9DU793UHMv%9Z%l#3TJzHH= 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 a6|~el={=5-?}Oe~5+YqR=_l}h%>M@*NQLzP literal 0 HcmV?d00001 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0584d39b..fa626d63 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -84,7 +84,8 @@ namespace Sandbox //SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); - SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); + //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); + SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); //TODO: REMOVE AFTER PRESENTATION //SHADE::SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index 94b1b74c..634d9a9a 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -7,6 +7,8 @@ namespace SHADE { struct SHTextureAsset { + bool compiled; + uint32_t numBytes; uint32_t width; uint32_t height; diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp index a2fc3b77..62af4da6 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp @@ -19,7 +19,11 @@ namespace SHADE { void SHTextureCompiler::CompileTextureBinary(SHTextureAsset const& asset, AssetPath path) { - std::ofstream file{path, std::ios::out | std::ios::binary}; + std::string newPath{ path.string() }; + newPath = newPath.substr(0, newPath.find_last_of('.')); + newPath += TEXTURE_EXTENSION; + + std::ofstream file{ newPath, std::ios::out | std::ios::binary }; if (!file.is_open()) { SHLOG_ERROR("Unable to open file for writing texture file: {}", path.string()); @@ -46,18 +50,13 @@ namespace SHADE file.write( reinterpret_cast(&asset.format), - sizeof(SHTexture::PixelChannel) + sizeof(SHTexture::TextureFormat) ); file.write( reinterpret_cast(&mipOffsetCount), intBytes ); - - file.write( - reinterpret_cast(&asset.numBytes), - intBytes - ); file.write( reinterpret_cast(asset.mipOffsets.data()), diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 68f86030..1047cdc6 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -93,6 +93,7 @@ namespace SHADE std::memcpy(pixel, file.GetImageData()->m_mem, totalBytes); //pixel = std::move(reinterpret_cast(file.GetDDSData())); + asset.compiled = false; asset.numBytes = totalBytes; asset.width = file.GetWidth(); asset.height = file.GetHeight(); @@ -109,38 +110,25 @@ namespace SHADE SHLOG_ERROR("Error opening SHTexture file: {}", path.string()); } - tinyddsloader::DDSFile::DXGIFormat format; - uint32_t formatCarrier; + auto const intBytes{ sizeof(uint32_t) }; uint32_t mipCount; - uint32_t byteCount; - file >> asset.numBytes; - file >> asset.width; - file >> asset.height; - - file >> formatCarrier; - asset.format = ddsLoaderToVkFormat(static_cast(formatCarrier), true); - - file >> mipCount; - file >> byteCount; + file.read(reinterpret_cast(&asset.numBytes), intBytes); + file.read(reinterpret_cast(&asset.width), intBytes); + file.read(reinterpret_cast(&asset.height), intBytes); + file.read(reinterpret_cast(&asset.format), sizeof(SHTexture::TextureFormat)); + file.read(reinterpret_cast(&mipCount), intBytes); std::vector mips(mipCount); - for (auto i {0}; i < mipCount; ++i) - { - file >> mips[i]; - } + file.read(reinterpret_cast(mips.data()), intBytes * mipCount); + + auto pixel = new SHTexture::PixelChannel[asset.numBytes]; + file.read(reinterpret_cast(pixel), asset.numBytes); asset.mipOffsets = std::move(mips); - - auto pixel = new SHTexture::PixelChannel[byteCount]; - auto pixelIt{ pixel }; - - while(!file.eof()) - { - file >> *(pixelIt++); - } asset.pixelData = std::move( pixel ); + asset.compiled = true; file.close(); } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index dde3b0e2..989cd2ad 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -18,6 +18,7 @@ #include "Libraries/SHTextureLoader.h" #include "Libraries/SHMeshCompiler.h" +#include "Libraries/SHTextureCompiler.h" namespace SHADE { @@ -215,7 +216,8 @@ namespace SHADE } ); } - else if (path.extension().string() == DDS_EXTENSION) + else if (path.extension().string() == DDS_EXTENSION + || path.extension().string() == TEXTURE_EXTENSION) { LoadDDS( { @@ -319,6 +321,11 @@ namespace SHADE SHTextureLoader::LoadImageAsset(asset.path, image); textureCollection.emplace(GenerateAssetID(AssetType::DDS), image); + + if (!image.compiled) + { + SHTextureCompiler::CompileTextureBinary(image, asset.path); + } } /**************************************************************************** From 0792979dfff9cc8f351e961c9da2e020972cb086 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 1 Oct 2022 13:31:08 +0800 Subject: [PATCH 294/793] Moved some comments --- SHADE_Application/src/Application/SBApplication.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 1dee3c5f..8abc341b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -88,10 +88,12 @@ namespace Sandbox //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); + //TODO: REMOVE AFTER PRESENTATION + + auto id = SHFamilyID::GetID(); auto id2 = SHFamilyID::GetID(); auto id3 = SHFamilyID::GetID(); - //TODO: REMOVE AFTER PRESENTATION //SHADE::SHSystemManager::RegisterRoutine(); From af24ed78dc84199cf7d8d39a9658856535400d96 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 1 Oct 2022 13:43:34 +0800 Subject: [PATCH 295/793] Fixed MSIL warning when building scripts --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index d613dbfe..d65eaf64 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -254,8 +254,8 @@ namespace SHADE \n\ \n\ \n\ - ..\\bin\\Debug\\SHADE_Managed.dll\ - ..\\bin\\Release\\SHADE_Managed.dll\ + ..\\bin\\Debug\\SHADE_Managed.dll\n\ + ..\\bin\\Release\\SHADE_Managed.dll\n\ \n\ \n\ "; @@ -520,7 +520,7 @@ namespace SHADE std::wostringstream oss; oss << "dotnet build \"" << SHStringUtils::StrToWstr(CSPROJ_PATH) << "\" -c "; oss << debug ? "Debug" : "Release"; - oss << " -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet"; + oss << " -o \"./tmp/\" -fl -flp:LogFile=build.log;Verbosity=quiet -r \"win-x64\""; return oss.str(); } } From dc8d58d95caf0c8fa3fca7e61f17e6618d04035b Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 1 Oct 2022 13:49:11 +0800 Subject: [PATCH 296/793] fix GetMouseWindowPosition() --- SHADE_Engine/src/Input/SHInputManagerSystem.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManagerSystem.h index eb40b240..2a8fe052 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.h +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.h @@ -417,8 +417,8 @@ namespace SHADE { POINT p{ mouseScreenX, mouseScreenY }; ScreenToClient(GetActiveWindow(), &p); - if (x) *x = mouseScreenX; - if (y) *y = mouseScreenY; + if (x) *x = p.x; + if (y) *y = p.y; } //Get the mouse velocity From 78d13c0ab8f69e0cd37641c0e9913aed474d9e5a Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sat, 1 Oct 2022 14:28:13 +0800 Subject: [PATCH 297/793] Changed some couts and asserts to use SHLOG --- SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp | 3 ++- SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h | 3 ++- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 8921fbce..517fb4b9 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -439,7 +439,7 @@ namespace SHADE { if ((templateIDs[i] == oID)) { - assert("This Component is owned by another group"); + SHLOG_WARNING("Component type already owned by another component group"); } } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index bbf8d400..b0332728 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -88,7 +88,8 @@ namespace SHADE if (!entityVec[eIndex]) { //There is still an entity stored there.Something went wrong - assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); + SHLOG_CRITICAL("FATAL ERROR: Entity Creation error. Entity index conflict.") + } //Reset it to a newly constructed entity diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index f32ab2c4..fac97339 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -119,7 +119,7 @@ namespace SHADE if (!entityVec[eIndex]) { //There is still an entity stored there.Something went wrong - assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); + SHLOG_CRITICAL("FATAL ERROR: Entity Creation error. Entity index conflict.") } //Reset it to a newly constructed entity diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp index 551233db..35269863 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp @@ -29,7 +29,7 @@ namespace SHADE { system.second->Init(); #ifdef _DEBUG - std::cout << system.first << " Init" << std::endl; + SHLOG_INFO("{} Init", system.first); #endif } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index 995a1cf5..25ff0c15 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -94,7 +94,8 @@ namespace SHADE if (systemContainer.find(id) == systemContainer.end()) { - std::cout << "System Manager error: System Version " << version << " does not exit." << std::endl; + SHLOG_WARNING("System Manager warning: System Version {} does not exist. Returning as nullptr", version) + return nullptr; } From 0360a8bfa145c4773755ff2ba3a4cc36d825d86b Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 1 Oct 2022 14:34:30 +0800 Subject: [PATCH 298/793] made the Input Manager NOT be a System anymore --- .../src/Application/SBApplication.cpp | 5 +- .../src/Graphics/Windowing/SHWindow.cpp | 7 +- ...utManagerSystem.cpp => SHInputManager.cpp} | 80 +++++++------------ ...HInputManagerSystem.h => SHInputManager.h} | 33 +++----- 4 files changed, 42 insertions(+), 83 deletions(-) rename SHADE_Engine/src/Input/{SHInputManagerSystem.cpp => SHInputManager.cpp} (60%) rename SHADE_Engine/src/Input/{SHInputManagerSystem.h => SHInputManager.h} (93%) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 3e9b0dce..700b36e3 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -23,7 +23,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformSystem.h" -#include "Input/SHInputManagerSystem.h" +#include "Input/SHInputManager.h" #include "FRC/SHFramerateController.h" //#include "AudioSystem/SHAudioSystem.h" @@ -58,7 +58,6 @@ namespace Sandbox // TODO(Diren): Create Physics System here SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::CreateSystem(); //SHADE::SHSystemManager::CreateSystem(); // Create Routines @@ -80,8 +79,6 @@ namespace Sandbox SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHSystemManager::RegisterRoutine(); - //TODO: REMOVE AFTER PRESENTATION SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 4d8dae72..3a1deb00 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -2,7 +2,7 @@ #include "SHWindowMap.h" #include "SHWindow.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Input/SHInputManagerSystem.h" +#include "Input/SHInputManager.h" namespace SHADE @@ -343,10 +343,7 @@ namespace SHADE } case WM_MOUSEWHEEL: { - if (auto im = SHSystemManager::GetSystem()) - { - im->PollWheelVerticalDelta(wparam); - } + SHInputManager::PollWheelVerticalDelta(wparam); break; } default: diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp similarity index 60% rename from SHADE_Engine/src/Input/SHInputManagerSystem.cpp rename to SHADE_Engine/src/Input/SHInputManager.cpp index 1beabe3f..619afec0 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -1,5 +1,5 @@ /********************************************************************* - * \file SHInputManagerSystem.cpp + * \file SHInputManager.cpp * \author Ryan Wang Nian Jing * \brief Definition of input manager. * Handles input from keyboard and mouse. Soon to include controller. @@ -11,7 +11,8 @@ #pragma once #include -#include "SHInputManagerSystem.h" +#include "SHInputManager.h" +#include "../Tools/SHException.h" namespace SHADE { @@ -19,61 +20,34 @@ namespace SHADE /* Static defines */ /*------------------------------------------------------------------------*/ - unsigned SHInputManagerSystem::keyCount = 0; - bool SHInputManagerSystem::keys[MAX_KEYS]; - bool SHInputManagerSystem::keysLast[MAX_KEYS]; - double SHInputManagerSystem::keysHeldTime[MAX_KEYS]; - double SHInputManagerSystem::keysReleasedTime[MAX_KEYS]; + unsigned SHInputManager::keyCount = 0; + bool SHInputManager::keys[MAX_KEYS]; + bool SHInputManager::keysLast[MAX_KEYS]; + double SHInputManager::keysHeldTime[MAX_KEYS]; + double SHInputManager::keysReleasedTime[MAX_KEYS]; - unsigned SHInputManagerSystem::keyToggleCount = 0; - bool SHInputManagerSystem::keysToggle[MAX_KEYS]; - bool SHInputManagerSystem::keysToggleLast[MAX_KEYS]; - double SHInputManagerSystem::keysToggleOnTime[MAX_KEYS]; - double SHInputManagerSystem::keysToggleOffTime[MAX_KEYS]; + unsigned SHInputManager::keyToggleCount = 0; + bool SHInputManager::keysToggle[MAX_KEYS]; + bool SHInputManager::keysToggleLast[MAX_KEYS]; + double SHInputManager::keysToggleOnTime[MAX_KEYS]; + double SHInputManager::keysToggleOffTime[MAX_KEYS]; - int SHInputManagerSystem::mouseScreenX = 0; - int SHInputManagerSystem::mouseScreenY = 0; - int SHInputManagerSystem::mouseScreenXLast = 0; - int SHInputManagerSystem::mouseScreenYLast = 0; - double SHInputManagerSystem::mouseVelocityX = 0; - double SHInputManagerSystem::mouseVelocityY = 0; - int SHInputManagerSystem::mouseWheelVerticalDelta = 0; - int SHInputManagerSystem::mouseWheelVerticalDeltaPoll = 0; + int SHInputManager::mouseScreenX = 0; + int SHInputManager::mouseScreenY = 0; + int SHInputManager::mouseScreenXLast = 0; + int SHInputManager::mouseScreenYLast = 0; + double SHInputManager::mouseVelocityX = 0; + double SHInputManager::mouseVelocityY = 0; + int SHInputManager::mouseWheelVerticalDelta = 0; + int SHInputManager::mouseWheelVerticalDeltaPoll = 0; - void SHInputManagerSystem::Init() - { - keyCount = 0; - SecureZeroMemory(keys, sizeof(keys)); - SecureZeroMemory(keysLast, sizeof(keysLast)); - SecureZeroMemory(keysHeldTime, sizeof(keysHeldTime)); - SecureZeroMemory(keysReleasedTime, sizeof(keysReleasedTime)); - - keyToggleCount = 0; - SecureZeroMemory(keysToggle, sizeof(keysToggle)); - SecureZeroMemory(keysToggleLast, sizeof(keysToggleLast)); - SecureZeroMemory(keysToggleOnTime, sizeof(keysToggleOnTime)); - SecureZeroMemory(keysToggleOffTime, sizeof(keysToggleOffTime)); - - mouseScreenX = 0; - mouseScreenY = 0; - mouseScreenXLast = 0; - mouseScreenYLast = 0; - mouseWheelVerticalDelta = 0; - mouseWheelVerticalDeltaPoll = 0; - } - - void SHInputManagerSystem::Exit() - { - //No dynamically allocated memory. Nothing to do here. - } - - void SHInputManagerSystem::InputManagerRoutine:: - FixedExecute(double dt) noexcept + void SHInputManager::UpdateInput(double dt) noexcept { //Keyboard and Mouse Buttons//////////////////////////////////////////////// //Poll unsigned char keyboardState[MAX_KEYS]; - GetKeyboardState(keyboardState); + //if (GetKeyboardState(keyboardState) == false) return; + SHASSERT(GetKeyboardState(keyboardState), "SHInputManager:GetKeyboardState() failed ({})", GetLastError()); keyCount = 0; keyToggleCount = 0; for (size_t i = 0; i < MAX_KEYS; ++i) @@ -144,7 +118,7 @@ namespace SHADE mouseWheelVerticalDeltaPoll = 0; } - bool SHInputManagerSystem::AnyKeyDown(SH_KEYCODE* firstDetected) noexcept + bool SHInputManager::AnyKeyDown(SH_KEYCODE* firstDetected) noexcept { for (size_t i = 0; i < MAX_KEYS; ++i) { @@ -157,7 +131,7 @@ namespace SHADE return false; } - bool SHInputManagerSystem::AnyKey(SH_KEYCODE* firstDetected) noexcept + bool SHInputManager::AnyKey(SH_KEYCODE* firstDetected) noexcept { for (size_t i = 0; i < MAX_KEYS; ++i) { @@ -170,7 +144,7 @@ namespace SHADE return false; } - bool SHInputManagerSystem::AnyKeyUp(SH_KEYCODE* firstDetected) noexcept + bool SHInputManager::AnyKeyUp(SH_KEYCODE* firstDetected) noexcept { for (size_t i = 0; i < MAX_KEYS; ++i) { diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManager.h similarity index 93% rename from SHADE_Engine/src/Input/SHInputManagerSystem.h rename to SHADE_Engine/src/Input/SHInputManager.h index 2a8fe052..d3e31004 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.h +++ b/SHADE_Engine/src/Input/SHInputManager.h @@ -1,5 +1,5 @@ /********************************************************************* - * \file SHInputManagerSystem.h + * \file SHInputManager.h * \author Ryan Wang Nian Jing * \brief Declaration of input manager. * Handles input from keyboard and mouse. Soon to include controller. @@ -13,19 +13,12 @@ //#include //#include "../../SHADE_Managed/src/SHpch.h" #include "SH_API.h" -#include "ECS_Base/System/SHSystem.h" -#include "ECS_Base/System/SHFixedSystemRoutine.h" namespace SHADE { - class SH_API SHInputManagerSystem : public SHSystem + class SH_API SHInputManager { public: - class SH_API InputManagerRoutine : public SHFixedSystemRoutine - { - public: - virtual void FixedExecute(double dt) noexcept override final; - }; public: /*------------------------------------------------------------------------*/ @@ -276,23 +269,21 @@ namespace SHADE }; public: + //Updates current state of the input, with dt to be fetched from FRC + //TODO should dt be fixed or variable? + static void UpdateInput(double dt) noexcept; + /*------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*------------------------------------------------------------------------*/ - SHInputManagerSystem() noexcept = default; - ~SHInputManagerSystem() noexcept = default; + SHInputManager() noexcept = default; + ~SHInputManager() noexcept = default; - SHInputManagerSystem(const SHInputManagerSystem&) = delete; - SHInputManagerSystem(SHInputManagerSystem&&) = delete; + SHInputManager(const SHInputManager&) = delete; + SHInputManager(SHInputManager&&) = delete; - SHInputManagerSystem& operator= (const SHInputManagerSystem&) = delete; - SHInputManagerSystem& operator= (SHInputManagerSystem&&) = delete; - - /*------------------------------------------------------------------------*/ - /* SHSystem Overrides */ - /*------------------------------------------------------------------------*/ - virtual void Init() override final; - virtual void Exit() override final; + SHInputManager& operator= (const SHInputManager&) = delete; + SHInputManager& operator= (SHInputManager&&) = delete; /*------------------------------------------------------------------------*/ /* Member Functions */ From 0c78eca1bce62b4e94fc91bc9265b425609557e1 Mon Sep 17 00:00:00 2001 From: Glence Date: Sat, 1 Oct 2022 15:09:26 +0800 Subject: [PATCH 299/793] added audiosystem back in added a button for the audio --- SHADE_Application/src/Application/SBApplication.cpp | 6 +++--- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 4 ++-- .../src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8abc341b..b982557c 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -25,7 +25,7 @@ #include "Math/Transform/SHTransformSystem.h" #include "Input/SHInputManagerSystem.h" #include "FRC/SHFramerateController.h" -//#include "AudioSystem/SHAudioSystem.h" +#include "AudioSystem/SHAudioSystem.h" #include "Scenes/SBTestScene.h" #include "Math/Transform/SHTransformComponent.h" @@ -59,7 +59,7 @@ namespace Sandbox SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); SHADE::SHSystemManager::CreateSystem(); - //SHADE::SHSystemManager::CreateSystem(); + SHADE::SHSystemManager::CreateSystem(); // Create Routines SHADE::SHSystemManager::RegisterRoutine(); @@ -95,7 +95,7 @@ namespace Sandbox auto id2 = SHFamilyID::GetID(); auto id3 = SHFamilyID::GetID(); - //SHADE::SHSystemManager::RegisterRoutine(); + SHADE::SHSystemManager::RegisterRoutine(); // Set up graphics system and windows graphicsSystem->SetWindow(&window); diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index be9ee832..2482fe8e 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -93,8 +93,8 @@ namespace SHADE void SHADE::SHAudioSystem::Run(float dt) { static_cast(dt); - if (GetKeyState(VK_SPACE) & 0x8000) - PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); + //if (GetKeyState(VK_SPACE) & 0x8000) + // PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); fmodStudioSystem->update(); if (!denseListener->empty()) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 25d3d955..35836dc2 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -45,6 +45,12 @@ namespace SHADE SHEditorWindow::Update(); if (Begin()) { + if (ImGui::Button("AUDIO")) + { + auto audioSystem = SHSystemManager::GetSystem(); + audioSystem->PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); + } + if (!SHEditor::selectedEntities.empty()) { EntityID const& eid = SHEditor::selectedEntities[0]; From 4f56a32a9bbe26b258b5e5b16d4bc122f6e51ce9 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 1 Oct 2022 15:26:08 +0800 Subject: [PATCH 300/793] Added physics system (untested) --- .../src/Application/SBApplication.cpp | 2 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 88 ++-- .../src/Math/Geometry/SHBoundingBox.cpp | 2 +- .../src/Math/Geometry/SHBoundingBox.h | 14 +- SHADE_Engine/src/Math/Geometry/SHShape.h | 4 +- .../Math/Transform/SHTransformComponent.cpp | 6 +- .../src/Math/Transform/SHTransformComponent.h | 1 + .../Components/SHColliderComponent.cpp | 98 ++++ .../Physics/Components/SHColliderComponent.h | 94 ++++ .../Components/SHRigidBodyComponent.cpp | 461 +++++++---------- .../Physics/Components/SHRigidBodyComponent.h | 111 +++-- SHADE_Engine/src/Physics/SHCollider.cpp | 215 ++++++++ SHADE_Engine/src/Physics/SHCollider.h | 108 ++++ SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 36 +- SHADE_Engine/src/Physics/SHPhysicsObject.h | 37 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 470 ++++++++++++------ SHADE_Engine/src/Physics/SHPhysicsSystem.h | 86 ++-- 17 files changed, 1193 insertions(+), 640 deletions(-) create mode 100644 SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp create mode 100644 SHADE_Engine/src/Physics/Components/SHColliderComponent.h create mode 100644 SHADE_Engine/src/Physics/SHCollider.cpp create mode 100644 SHADE_Engine/src/Physics/SHCollider.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 57e14d71..acad9e14 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -90,7 +90,7 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - //SHADE::SHComponentManager::CreateComponentSparseSet(); + SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 664497df..556ff3ac 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -18,9 +18,9 @@ using namespace SHADE; namespace Sandbox { - void SBTestScene::WindowFocusFunc([[maybe_unused]]void* window, int focused) + void SBTestScene::WindowFocusFunc([[maybe_unused]] void* window, int focused) { - if(focused) + if (focused) { } else @@ -44,15 +44,15 @@ namespace Sandbox { if (mesh.meshName == "Cube.012") { - handles.push_back(graphicsSystem->AddMesh( - mesh.header.vertexCount, - mesh.vertexPosition.data(), - mesh.texCoords.data(), - mesh.vertexTangent.data(), - mesh.vertexNormal.data(), - mesh.header.indexCount, - mesh.indices.data() - )); + handles.push_back(graphicsSystem->AddMesh( + mesh.header.vertexCount, + mesh.vertexPosition.data(), + mesh.texCoords.data(), + mesh.vertexTangent.data(), + mesh.vertexNormal.data(), + mesh.header.indexCount, + mesh.indices.data() + )); } } graphicsSystem->BuildMeshBuffers(); @@ -62,8 +62,8 @@ namespace Sandbox std::vector> texHandles; for (const auto& tex : textures) { - auto texture = graphicsSystem->Add(tex); - texHandles.push_back(texture); + auto texture = graphicsSystem->Add(tex); + texHandles.push_back(texture); } graphicsSystem->BuildTextures(); @@ -79,14 +79,14 @@ namespace Sandbox constexpr int NUM_ROWS = 100; constexpr int NUM_COLS = 100; static const SHVec3 TEST_OBJ_SPACING = { 0.05f, 0.05f, 0.05f }; - static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ) + 1.0f, -2.0f, -1.0f }; + static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; for (int y = 0; y < NUM_ROWS; ++y) - for (int x = 0; x < NUM_COLS; ++x) - { - auto entity = SHEntityManager::CreateEntity(); + for (int x = 0; x < NUM_COLS; ++x) + { + auto entity = SHEntityManager::CreateEntity(); auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); renderable.Mesh = handles.front(); renderable.SetMaterial(customMat); @@ -95,17 +95,17 @@ namespace Sandbox renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); //Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ - x * TEST_OBJ_SPACING.x, - y * TEST_OBJ_SPACING.y, - 0.0f - }); + transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ + x * TEST_OBJ_SPACING.x, + y * TEST_OBJ_SPACING.y, + 0.0f + }); //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); //transform.SetWorldRotation(3.14159265f * 1.5f, -3.14159265f / 2.0f, 0.0f); transform.SetLocalScale(TEST_OBJ_SCALE); stressTestObjects.emplace_back(entity); - } + } auto raccoonSpin = SHEntityManager::CreateEntity(); auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); @@ -117,8 +117,8 @@ namespace Sandbox renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); - transform.SetWorldPosition ({-3.0f, -1.0f, -1.0f}); - transform.SetLocalScale({5.0f, 5.0f, 5.0f}); + transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); + transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); //auto entity = SHEntityManager::CreateEntity(); //auto& renderable = *SHComponentManager::GetComponent_s(entity); @@ -137,21 +137,21 @@ namespace Sandbox //testObjRenderable.SetMaterial(matInst); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); + scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); - auto raccoonShowcase = SHEntityManager::CreateEntity(); - auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); - auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + auto raccoonShowcase = SHEntityManager::CreateEntity(); + auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); - renderableShowcase.Mesh = handles.front(); - renderableShowcase.SetMaterial(customMat); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + renderableShowcase.Mesh = handles.front(); + renderableShowcase.SetMaterial(customMat); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); - transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); - transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); + transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); + transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); + scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); } void SBTestScene::Update(float dt) @@ -163,19 +163,19 @@ namespace Sandbox //transform.SetWorldPosition({1.0f, 1.0f, -1.0f}); //transform.SetWorldRotation(0.0f, 0.0f + rotation, 0.0f); //rotation += dt * 0.2f; - + // Destroy entity if space is pressed if (GetKeyState(VK_SPACE) & 0x8000) { rotation = 0.0f; - SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->RemoveAllScripts(testObj); + SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); + scriptEngine->RemoveAllScripts(testObj); } } void SBTestScene::Render() { - + } void SBTestScene::Unload() @@ -186,8 +186,4 @@ namespace Sandbox { //SHSerialization::SerializeScene("resources/scenes/Scene01.SHADE"); } - } - - - diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index 44f01a4b..3abcc315 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -21,7 +21,7 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingBox::SHBoundingBox(const SHVec3& c, SHVec3& hE) noexcept + SHBoundingBox::SHBoundingBox(const SHVec3& c, const SHVec3& hE) noexcept : SHShape {} , center { c } , halfExtents { hE } diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index b60c6c29..5041df63 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -27,15 +27,15 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHBoundingBox (const SHVec3& center, SHVec3& halfExtents) noexcept; - SHBoundingBox (const SHVec3* vertices, size_t numVertices) noexcept; - SHBoundingBox (const SHBoundingBox* boxes, size_t numBoxes) noexcept; + SHBoundingBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; + SHBoundingBox (const SHVec3* vertices, size_t numVertices) noexcept; + SHBoundingBox (const SHBoundingBox* boxes, size_t numBoxes) noexcept; - SHBoundingBox (const SHBoundingBox& rhs) noexcept; - SHBoundingBox (SHBoundingBox&& rhs) noexcept; + SHBoundingBox (const SHBoundingBox& rhs) noexcept; + SHBoundingBox (SHBoundingBox&& rhs) noexcept; - SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; - SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; + SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; + SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 84b7bbe7..e33ca583 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -30,7 +30,9 @@ namespace SHADE enum class Type { BOUNDING_BOX - , RAY + , SPHERE + , CAPSULE + , CONVEX_HULL , TRIANGLE , COUNT diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index 15cd698b..949cfa67 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -152,7 +152,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate", &SHTransformComponent::GetLocalPosition, &SHTransformComponent::SetLocalPosition) - .property("Rotate", &SHTransformComponent::GetLocalRotation, select_overload(&SHTransformComponent::SetLocalRotation)) - .property("Scale", &SHTransformComponent::GetLocalScale, &SHTransformComponent::SetLocalScale); + .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) + .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation) ) + .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index a87b1921..ad355694 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -13,6 +13,7 @@ #include #include + // Project Headers #include "SH_API.h" #include "ECS_Base/Components/SHComponent.h" diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp new file mode 100644 index 00000000..3e1c7aa6 --- /dev/null +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -0,0 +1,98 @@ +/**************************************************************************************** + * \file SHColliderComponent.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Collider Component. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHColliderComponent.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHColliderComponent::HasChanged() const noexcept + { + return dirty; + } + + const SHVec3& SHColliderComponent::GetPosition() const noexcept + { + return position; + } + + const SHQuaternion& SHColliderComponent::GetOrientation() const noexcept + { + return orientation; + } + + SHVec3 SHColliderComponent::GetRotation() const noexcept + { + return orientation.ToEuler(); + } + + const SHColliderComponent::Colliders& SHColliderComponent::GetColliders() const noexcept + { + return colliders; + } + + SHCollider& SHColliderComponent::GetCollider(int index) noexcept + { + if (index < 0 || static_cast(index) >= colliders.size()) + throw std::invalid_argument("Out-of-range access!"); + + return colliders[index].first; + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHColliderComponent::OnCreate() + { + + } + + void SHColliderComponent::OnDestroy() + { + + } + + void SHColliderComponent::AddBoundingBox() noexcept + { + const auto BOX_PAIR = std::make_pair(SHCollider{SHCollider::Type::BOX}, true); + colliders.emplace_back(BOX_PAIR); + } + + void SHColliderComponent::AddSphere() noexcept + { + + } + + void SHColliderComponent::RemoveCollider(int index) noexcept + { + if (index < 0 || static_cast(index) >= colliders.size()) + throw std::invalid_argument("Out-of-range access!"); + + int idx = 0; + auto it = colliders.begin(); + for (; it != colliders.end(); ++it) + { + if (idx == index) + break; + + ++idx; + } + + it = colliders.erase(it); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h new file mode 100644 index 00000000..aeb3b9e6 --- /dev/null +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -0,0 +1,94 @@ +/**************************************************************************************** + * \file SHColliderComponent.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Collider Component. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "ECS_Base/Components/SHComponent.h" +#include "Physics/SHCollider.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHColliderComponent : public SHComponent + { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + using ColliderDirtyPair = std::pair; + using Colliders = std::vector; + + public: + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHColliderComponent () noexcept = default; + SHColliderComponent (const SHColliderComponent& rhs) noexcept = default; + SHColliderComponent (SHColliderComponent&& rhs) noexcept = default; + ~SHColliderComponent () override = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHColliderComponent& operator=(const SHColliderComponent& rhs) noexcept = default; + SHColliderComponent& operator=(SHColliderComponent&& rhs) noexcept = default; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool HasChanged () const noexcept; + + [[nodiscard]] const SHVec3& GetPosition () const noexcept; + [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; + + [[nodiscard]] const Colliders& GetColliders () const noexcept; + [[nodiscard]] SHCollider& GetCollider (int index) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void OnCreate () override; + void OnDestroy () override; + + void AddBoundingBox () noexcept; + void AddSphere () noexcept; + + void RemoveCollider (int index) noexcept; + + private: + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + bool dirty; + SHVec3 position; + SHQuaternion orientation; + Colliders colliders; + + }; +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 16863dbd..04cb00dd 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -14,9 +14,8 @@ #include "SHRigidBodyComponent.h" // Project Headers -#include "Tools/SHUtilities.h" -#include "Math/SHMathHelpers.h" -#include "Math/SHQuaternion.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Physics/SHPhysicsSystem.h" namespace SHADE { @@ -26,46 +25,32 @@ namespace SHADE SHRigidBodyComponent::SHRigidBodyComponent() noexcept : type { Type::DYNAMIC } + , flags { 0 } + , dirtyFlags { 0 } + , interpolate { true } + , system { nullptr } , mass { 1.0f } , drag { 0.01f } , angularDrag { 0.01f } - , flags { 0 } + { // Set default flags: Gravity & Sleeping enabled flags |= 1U << 0; flags |= 1U << 1; } - SHRigidBodyComponent::~SHRigidBodyComponent() - { - - } - /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { - const bool GRAVITY = flags & (1U << 0); - if (rp3dBody) - { - - SHASSERT(reinterpret_cast(rp3dBody)->isGravityEnabled() == GRAVITY, "ReactPhysics and SHADE body enable gravity do not match!") - } - - return GRAVITY; + return flags & (1U << 0); } - bool SHRigidBodyComponent::IsSleepingEnabled() const noexcept + bool SHRigidBodyComponent::IsAllowedToSleep() const noexcept { - const bool SLEEP = flags & (1U << 1); - if (rp3dBody) - { - SHASSERT(reinterpret_cast(rp3dBody)->isAllowedToSleep() == SLEEP, "ReactPhysics and SHADE body enable sleep do not match!") - } - - return SLEEP; + return flags & (1U << 1); } bool SHRigidBodyComponent::IsInterpolating() const noexcept @@ -75,178 +60,87 @@ namespace SHADE SHRigidBodyComponent::Type SHRigidBodyComponent::GetType() const noexcept { - if (rp3dBody) - { - SHASSERT - ( - SHUtilities::ConvertEnum(reinterpret_cast(rp3dBody)->getType()) == SHUtilities::ConvertEnum(type), - "ReactPhysics and SHADE body types do not match!" - ) - } - return type; } float SHRigidBodyComponent::GetMass() const noexcept { - if (rp3dBody) - { - SHASSERT(reinterpret_cast(rp3dBody)->getMass() == mass, "ReactPhysics and SHADE body masses do not match!") - } - return mass; } float SHRigidBodyComponent::GetDrag() const noexcept { - if (rp3dBody) - { - SHASSERT - ( - SHMath::CompareFloat(reinterpret_cast(rp3dBody)->getLinearDamping(), drag), - "ReactPhysics and SADE body drag coefficients do not match!" - ) - } - return drag; } float SHRigidBodyComponent::GetAngularDrag() const noexcept { - if (rp3dBody) - { - SHASSERT - ( - SHMath::CompareFloat(reinterpret_cast(rp3dBody)->getAngularDamping(), angularDrag), - "ReactPhysics and SADE body drag coefficients do not match!" - ) - } - return angularDrag; } bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { - const bool FREEZE_X_POS = flags & (1U << 2); - if (rp3dBody) - { - const bool RP3D_FREEZE_X_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().x) > 0.0f; - SHASSERT(RP3D_FREEZE_X_POS == FREEZE_X_POS, "ReactPhysics and SHADE body x-axis position lock do not match!") - } - - return FREEZE_X_POS; + return flags & (1U << 2); } bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { - const bool FREEZE_Y_POS = flags & (1U << 3); - if (rp3dBody) - { - const bool RP3D_FREEZE_Y_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().y) > 0.0f; - SHASSERT(RP3D_FREEZE_Y_POS == FREEZE_Y_POS, "ReactPhysics and SHADE body y-axis position lock do not match!") - } - - return FREEZE_Y_POS; + return flags & (1U << 3); } bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { - const bool FREEZE_Z_POS = flags & (1U << 4); - if (rp3dBody) - { - const bool RP3D_FREEZE_Z_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().z) > 0.0f; - SHASSERT(RP3D_FREEZE_Z_POS == FREEZE_Z_POS, "ReactPhysics and SHADE body z-axis position lock do not match!") - } - - return FREEZE_Z_POS; + return flags & (1U << 4); } bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { - const bool FREEZE_X_ROT = flags & (1U << 5); - if (rp3dBody) - { - const bool RP3D_FREEZE_Y_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().x) > 0.0f; - SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_X_ROT, "ReactPhysics and SHADE body x-axis rotation lock do not match!") - } - - return FREEZE_X_ROT; + return flags & (1U << 5); } bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { - const bool FREEZE_Y_ROT = flags & (1U << 6); - if (rp3dBody) - { - const bool RP3D_FREEZE_Y_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().y) > 0.0f; - SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_Y_ROT, "ReactPhysics and SHADE body y-axis rotation lock do not match!") - } - - return FREEZE_Y_ROT; + return flags & (1U << 6); } bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { - const bool FREEZE_Z_ROT = flags & (1U << 7); - if (rp3dBody) - { - const bool RP3D_FREEZE_Z_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().z) > 0.0f; - SHASSERT(RP3D_FREEZE_Z_ROT == FREEZE_Z_ROT, "ReactPhysics and SHADE body z-axis rotation lock do not match!") - } - - return FREEZE_Z_ROT; + return flags & (1U << 7); } - SHVec3 SHRigidBodyComponent::GetForce() const noexcept + const SHVec3& SHRigidBodyComponent::GetForce() const noexcept { - SHVec3 result; - - if (rp3dBody) - { - const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getForce(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } - - return result; + return force; } - SHVec3 SHRigidBodyComponent::GetTorque() const noexcept + const SHVec3& SHRigidBodyComponent::GetTorque() const noexcept { - SHVec3 result; - - if (rp3dBody) - { - const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getTorque(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } - - return result; + return torque; } - SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept + const SHVec3& SHRigidBodyComponent::GetLinearVelocity() const noexcept { - SHVec3 result; - - if (rp3dBody) - { - const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getLinearVelocity(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } - - return result; + return linearVelocity; } - SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept + const SHVec3& SHRigidBodyComponent::GetAngularVelocity() const noexcept { - SHVec3 result; + return angularVelocity; + } - if (rp3dBody) - { - const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getAngularVelocity(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } + const SHVec3& SHRigidBodyComponent::GetPosition() const noexcept + { + return position; + } - return result; + const SHQuaternion& SHRigidBodyComponent::GetOrientation() const noexcept + { + return orientation; + } + + SHVec3 SHRigidBodyComponent::GetRotation() const noexcept + { + return orientation.ToEuler(); } /*-----------------------------------------------------------------------------------*/ @@ -258,80 +152,72 @@ namespace SHADE if (type == newType) return; + dirtyFlags |= 1U << 4; type = newType; - if (rp3dBody) - reinterpret_cast(rp3dBody)->setType(static_cast(newType)); - } - - void SHRigidBodyComponent::SetMass(float newMass) noexcept - { - mass = newMass; - if (rp3dBody) - reinterpret_cast(rp3dBody)->setMass(newMass); - } - - void SHRigidBodyComponent::SetDrag(float newDrag) noexcept - { - drag = newDrag; - if (rp3dBody) - reinterpret_cast(rp3dBody)->setLinearDamping(newDrag); - } - - void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept - { - angularDrag = newAngularDrag; - if (rp3dBody) - reinterpret_cast(rp3dBody)->setAngularDamping(newAngularDrag); } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept { - SetFlag(enableGravity, 0); - if (rp3dBody) - reinterpret_cast(rp3dBody)->enableGravity(enableGravity); + constexpr int FLAG_POS = 0; + + dirtyFlags |= 1U << FLAG_POS; + enableGravity ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } - void SHRigidBodyComponent::SetSleepingEnabled(bool enableSleeping) noexcept + void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept { - SetFlag(enableSleeping, 1); - if (rp3dBody) - reinterpret_cast(rp3dBody)->setIsAllowedToSleep(enableSleeping); + constexpr int FLAG_POS = 1; + + dirtyFlags |= 1U << 1; + isAllowedToSleep ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { - SetFlag(freezePositionX, 2); - SetRP3DLinearConstraints(); + constexpr int FLAG_POS = 2; + + dirtyFlags |= 1U << 2; + freezePositionX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { - SetFlag(freezePositionY, 3); - SetRP3DLinearConstraints(); + constexpr int FLAG_POS = 3; + + dirtyFlags |= 1U << 2; + freezePositionY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { - SetFlag(freezePositionZ, 4); - SetRP3DLinearConstraints(); + constexpr int FLAG_POS = 4; + + dirtyFlags |= 1U << 2; + freezePositionZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { - SetFlag(freezeRotationX, 5); - SetRP3DAngularConstraints(); + constexpr int FLAG_POS = 5; + + dirtyFlags |= 1U << 3; + freezeRotationX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { - SetFlag(freezeRotationY, 6); - SetRP3DAngularConstraints(); + constexpr int FLAG_POS = 6; + + dirtyFlags |= 1U << 3; + freezeRotationY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { - SetFlag(freezeRotationZ, 7); - SetRP3DAngularConstraints(); + constexpr int FLAG_POS = 7; + + dirtyFlags |= 1U << 3; + freezeRotationZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept @@ -339,22 +225,34 @@ namespace SHADE interpolate = allowInterpolation; } - void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) const noexcept + void SHRigidBodyComponent::SetMass(float newMass) noexcept { - if (rp3dBody) - { - const rp3d::Vector3 NEW_V { newLinearVelocity.x, newLinearVelocity.y, newLinearVelocity.z }; - reinterpret_cast(rp3dBody)->setLinearVelocity(NEW_V); - } + dirtyFlags |= 1U << 5; + mass = newMass; } - void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) const noexcept + void SHRigidBodyComponent::SetDrag(float newDrag) noexcept { - if (rp3dBody) - { - const rp3d::Vector3 NEW_V { newAngularVelocity.x, newAngularVelocity.y, newAngularVelocity.z }; - reinterpret_cast(rp3dBody)->setAngularVelocity(NEW_V); - } + dirtyFlags |= 1U << 6; + drag = newDrag; + } + + void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept + { + dirtyFlags |= 1U << 7; + angularDrag = newAngularDrag; + } + + void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept + { + dirtyFlags |= 1U << 8; + linearVelocity = newLinearVelocity; + } + + void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept + { + dirtyFlags |= 1U << 9; + angularVelocity = newAngularVelocity; } /*-----------------------------------------------------------------------------------*/ @@ -363,148 +261,143 @@ namespace SHADE void SHRigidBodyComponent::OnCreate() { - componentFlags |= 1U << 0; // dirty - componentFlags |= 1U << 1; // rb dirty - componentFlags |= 1U << 2; // has rb + system = SHSystemManager::GetSystem(); + if (!system) + { + SHLOG_ERROR("Physics system does not exist, Rigid Body Component not added!") + return; + } - Synchronise(); + // Notify Physics System + system->AddRigidBody(GetEID()); } void SHRigidBodyComponent::OnDestroy() { - componentFlags |= 1U << 0; // dirty - componentFlags |= 1U << 1; // rb dirty - componentFlags &= ~(1U << 2); // no rb + // Notify Physics System + if (!system) + { + SHLOG_ERROR("Physics system does not exist, unable to remove Rigid Body Component!") + return; + } - Synchronise(); + system->RemoveRigidBody(GetEID()); } void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F { force.x, force.y, force.z }; - reinterpret_cast(rp3dBody)->applyWorldForceAtCenterOfMass(F); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddForce(GetEID(), force); } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F{ force.x, force.y, force.z }; - const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; - reinterpret_cast(rp3dBody)->applyWorldForceAtLocalPosition(F, P); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddForceAtLocalPos(GetEID(), force, localPos); } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F{ force.x, force.y, force.z }; - const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; - reinterpret_cast(rp3dBody)->applyWorldForceAtWorldPosition(F, P); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddForceAtWorldPos(GetEID(), force, worldPos); } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; - reinterpret_cast(rp3dBody)->applyLocalForceAtCenterOfMass(F); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddRelativeForce(GetEID(), force); } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; - const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; - reinterpret_cast(rp3dBody)->applyLocalForceAtLocalPosition(F, P); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddRelativeForceAtLocalPos(GetEID(), force, localPos); } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; - const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; - reinterpret_cast(rp3dBody)->applyLocalForceAtWorldPosition(F, P); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddRelativeForceAtWorldPos(GetEID(), force, worldPos); } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 T{ torque.x, torque.y, torque.z }; - reinterpret_cast(rp3dBody)->applyWorldTorque(T); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddTorque(GetEID(), torque); } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - if (rp3dBody) + if (!system) { - const rp3d::Vector3 T{ relativeTorque.x, relativeTorque.y, relativeTorque.z }; - reinterpret_cast(rp3dBody)->applyLocalTorque(T); + SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") + return; } + + // Notify Physics Systems + system->AddRelativeTorque(GetEID(), relativeTorque); } - /*-----------------------------------------------------------------------------------*/ - /* Private Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ +} // namespace SHADE - void SHRigidBodyComponent::SyncRP3DAndSHADE() - { - auto* rigidBody = reinterpret_cast(rp3dBody); +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; - rigidBody->setType(static_cast(type)); - - rigidBody->setMass(mass); - rigidBody->setLinearDamping(drag); - rigidBody->setAngularDamping(angularDrag); - - rigidBody->enableGravity(flags & (1U << 0)); - rigidBody->setIsAllowedToSleep(flags & (1U << 1)); - SetRP3DLinearConstraints(); - SetRP3DAngularConstraints(); - } - - - void SHRigidBodyComponent::SetFlag(bool flagState, int flagPos) - { - flagState ? flags |= (1U << flagPos) : flags &= ~(1U << flagPos); - } - - void SHRigidBodyComponent::SetRP3DLinearConstraints() const - { - const rp3d::Vector3 CONSTRAINTS - { - flags & 1U << 2 ? 1.0f : 0.0f, - flags & 1U << 3 ? 1.0f : 0.0f, - flags & 1U << 4 ? 1.0f : 0.0f - }; - - if (rp3dBody) - reinterpret_cast(rp3dBody)->setLinearLockAxisFactor(CONSTRAINTS); - } - - void SHRigidBodyComponent::SetRP3DAngularConstraints() const - { - const rp3d::Vector3 CONSTRAINTS - { - flags & 1U << 5 ? 1.0f : 0.0f, - flags & 1U << 6 ? 1.0f : 0.0f, - flags & 1U << 7 ? 1.0f : 0.0f - }; - - if (rp3dBody) - reinterpret_cast(rp3dBody)->setAngularLockAxisFactor(CONSTRAINTS); - } - -} // namespace SHADE \ No newline at end of file + registration::class_("RigidBody Component") + .property("Type" , &SHRigidBodyComponent::GetType , &SHRigidBodyComponent::SetType ) + .property("Mass" , &SHRigidBodyComponent::GetMass , &SHRigidBodyComponent::SetMass ) + .property("Drag" , &SHRigidBodyComponent::GetDrag , &SHRigidBodyComponent::SetDrag ) + .property("Angular Drag" , &SHRigidBodyComponent::GetAngularDrag , &SHRigidBodyComponent::SetAngularDrag ) + .property("Use Gravity" , &SHRigidBodyComponent::IsGravityEnabled , &SHRigidBodyComponent::SetGravityEnabled ) + .property("Interpolate" , &SHRigidBodyComponent::IsInterpolating , &SHRigidBodyComponent::SetInterpolate ) + .property("Freeze Position X" , &SHRigidBodyComponent::GetFreezePositionX , &SHRigidBodyComponent::SetFreezePositionX ) + .property("Freeze Position Y" , &SHRigidBodyComponent::GetFreezePositionY , &SHRigidBodyComponent::SetFreezePositionY ) + .property("Freeze Position Z" , &SHRigidBodyComponent::GetFreezePositionZ , &SHRigidBodyComponent::SetFreezePositionZ ) + .property("Freeze Rotation X" , &SHRigidBodyComponent::GetFreezeRotationX , &SHRigidBodyComponent::SetFreezeRotationX ) + .property("Freeze Rotation Y" , &SHRigidBodyComponent::GetFreezeRotationY , &SHRigidBodyComponent::SetFreezeRotationY ) + .property("Freeze Rotation Z" , &SHRigidBodyComponent::GetFreezeRotationZ , &SHRigidBodyComponent::SetFreezeRotationZ ); +} \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 439fa3db..0793b2ff 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -10,6 +10,8 @@ #pragma once +#include + // Project Headers #include "ECS_Base/Components/SHComponent.h" #include "Physics/SHPhysicsObject.h" @@ -20,7 +22,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHRigidBodyComponent : public SHComponent, public SHPhysicsObject + class SH_API SHRigidBodyComponent : public SHComponent { private: /*---------------------------------------------------------------------------------*/ @@ -43,8 +45,6 @@ namespace SHADE , COUNT }; - // TODO(Diren): Collision Types - /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -52,7 +52,7 @@ namespace SHADE SHRigidBodyComponent () noexcept; SHRigidBodyComponent (const SHRigidBodyComponent& rhs) noexcept = default; SHRigidBodyComponent (SHRigidBodyComponent&& rhs) noexcept = default; - ~SHRigidBodyComponent () override; + ~SHRigidBodyComponent () override = default; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -65,56 +65,61 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool IsGravityEnabled () const noexcept; - [[nodiscard]] bool IsSleepingEnabled () const noexcept; - [[nodiscard]] bool IsInterpolating () const noexcept; + [[nodiscard]] bool IsGravityEnabled () const noexcept; + [[nodiscard]] bool IsAllowedToSleep () const noexcept; + [[nodiscard]] bool IsInterpolating () const noexcept; - [[nodiscard]] Type GetType () const noexcept; - [[nodiscard]] float GetMass () const noexcept; - [[nodiscard]] float GetDrag () const noexcept; - [[nodiscard]] float GetAngularDrag () const noexcept; + [[nodiscard]] Type GetType () const noexcept; + [[nodiscard]] float GetMass () const noexcept; + [[nodiscard]] float GetDrag () const noexcept; + [[nodiscard]] float GetAngularDrag () const noexcept; - [[nodiscard]] bool GetFreezePositionX () const noexcept; - [[nodiscard]] bool GetFreezePositionY () const noexcept; - [[nodiscard]] bool GetFreezePositionZ () const noexcept; + [[nodiscard]] bool GetFreezePositionX () const noexcept; + [[nodiscard]] bool GetFreezePositionY () const noexcept; + [[nodiscard]] bool GetFreezePositionZ () const noexcept; - [[nodiscard]] bool GetFreezeRotationX () const noexcept; - [[nodiscard]] bool GetFreezeRotationY () const noexcept; - [[nodiscard]] bool GetFreezeRotationZ () const noexcept; + [[nodiscard]] bool GetFreezeRotationX () const noexcept; + [[nodiscard]] bool GetFreezeRotationY () const noexcept; + [[nodiscard]] bool GetFreezeRotationZ () const noexcept; - [[nodiscard]] SHVec3 GetForce () const noexcept; - [[nodiscard]] SHVec3 GetTorque () const noexcept; - [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; - [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; + [[nodiscard]] const SHVec3& GetForce () const noexcept; + [[nodiscard]] const SHVec3& GetTorque () const noexcept; + [[nodiscard]] const SHVec3& GetLinearVelocity () const noexcept; + [[nodiscard]] const SHVec3& GetAngularVelocity () const noexcept; + + [[nodiscard]] const SHVec3& GetPosition () const noexcept; + [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetType (Type newType) noexcept; - void SetMass (float newMass) noexcept; - void SetDrag (float newDrag) noexcept; - void SetAngularDrag (float newAngularDrag) noexcept; + void SetType (Type newType) noexcept; - void SetGravityEnabled (bool enableGravity) noexcept; - void SetSleepingEnabled (bool enableSleeping) noexcept; - void SetFreezePositionX (bool freezePositionX) noexcept; - void SetFreezePositionY (bool freezePositionY) noexcept; - void SetFreezePositionZ (bool freezePositionZ) noexcept; - void SetFreezeRotationX (bool freezeRotationX) noexcept; - void SetFreezeRotationY (bool freezeRotationY) noexcept; - void SetFreezeRotationZ (bool freezeRotationZ) noexcept; - void SetInterpolate (bool allowInterpolation) noexcept; + void SetGravityEnabled (bool enableGravity) noexcept; + void SetIsAllowedToSleep(bool isAllowedToSleep) noexcept; + void SetFreezePositionX (bool freezePositionX) noexcept; + void SetFreezePositionY (bool freezePositionY) noexcept; + void SetFreezePositionZ (bool freezePositionZ) noexcept; + void SetFreezeRotationX (bool freezeRotationX) noexcept; + void SetFreezeRotationY (bool freezeRotationY) noexcept; + void SetFreezeRotationZ (bool freezeRotationZ) noexcept; + void SetInterpolate (bool allowInterpolation) noexcept; - void SetLinearVelocity (const SHVec3& newLinearVelocity) const noexcept; - void SetAngularVelocity (const SHVec3& newAngularVelocity) const noexcept; + void SetMass (float newMass) noexcept; + void SetDrag (float newDrag) noexcept; + void SetAngularDrag (float newAngularDrag) noexcept; + + void SetLinearVelocity (const SHVec3& newLinearVelocity) noexcept; + void SetAngularVelocity (const SHVec3& newAngularVelocity) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void OnCreate () override; - void OnDestroy () override; + void OnCreate () override; + void OnDestroy () override; void AddForce (const SHVec3& force) const noexcept; void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; @@ -134,23 +139,33 @@ namespace SHADE Type type; + // rX rY rZ pX pY pZ slp g + uint8_t flags; + // 0 0 0 0 0 0 aV lV aD d m t ag lc slp g + uint16_t dirtyFlags; + bool interpolate; + + SHPhysicsSystem* system; + float mass; float drag; float angularDrag; - - // rX rY rZ pX pY pZ slp g - uint8_t flags; - bool interpolate; + + SHVec3 force; + SHVec3 linearVelocity; + + SHVec3 torque; + SHVec3 angularVelocity; + + // TODO(Diren): Once quaternions have replaced euler angles in transforms, store it for the rigidbody. + + SHVec3 position; + SHQuaternion orientation; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void SyncRP3DAndSHADE (); - void SetFlag (bool flagState, int flagPos); - void SetRP3DLinearConstraints () const ; - void SetRP3DAngularConstraints () const ; - - + RTTR_ENABLE() }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp new file mode 100644 index 00000000..724db19c --- /dev/null +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -0,0 +1,215 @@ +/**************************************************************************************** + * \file SHCollider.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Collider. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHCollider.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHCollider::SHCollider(Type colliderType) + : type { colliderType } + , isTrigger { false } + , dirty { true } + , shape { nullptr } + { + CreateShape(); + } + + SHCollider::SHCollider(const SHCollider& rhs) noexcept + : type { rhs.type} + , isTrigger { rhs.isTrigger } + , dirty { true } + , shape { nullptr } + { + CreateShape(); + + // TODO(Diren): Copy transform data over + } + + SHCollider::SHCollider(SHCollider&& rhs) noexcept + : type { rhs.type} + , isTrigger { rhs.isTrigger } + , dirty { true } + , shape { nullptr } + { + CreateShape(); + + // TODO(Diren): Copy transform data over + } + + SHCollider::~SHCollider() noexcept + { + delete shape; + } + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHCollider& SHCollider::operator=(const SHCollider& rhs) noexcept + { + type = rhs.type; + isTrigger = rhs.isTrigger; + dirty = true; + + CreateShape(); + + // TODO(Diren): Copy transform data over + + return *this; + } + + SHCollider& SHCollider::operator=(SHCollider&& rhs) noexcept + { + type = rhs.type; + isTrigger = rhs.isTrigger; + dirty = true; + + CreateShape(); + + // TODO(Diren): Copy transform data over + + return *this; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHCollider::HasChanged() const noexcept + { + return dirty; + } + + bool SHCollider::IsTrigger() const noexcept + { + return isTrigger; + } + + SHCollider::Type SHCollider::GetType() const noexcept + { + return type; + } + + SHShape* SHCollider::GetShape() const noexcept + { + return shape; + } + + float SHCollider::GetFriction() const noexcept + { + // TODO(Diren): Fix after implementing materials + return 0.0f; + } + + float SHCollider::GetBounciness() const noexcept + { + // TODO(Diren): Fix after implementing materials + return 0.0f; + } + float SHCollider::GetDensity() const noexcept + { + // TODO(Diren): Fix after implementing materials + return 0.0f; + } + + SHVec3 SHCollider::GetPosition() const noexcept + { + // TODO(Diren): Fix after linking transform data + return SHVec3::Zero; + } + + const SHVec3& SHCollider::GetPositionOffset() const noexcept + { + return positionOffset; + } + + SHQuaternion SHCollider::GetOrientation() const noexcept + { + // TODO(Diren): Fix after linking transform data + return SHQuaternion::Identity; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHCollider::SetType(Type newType) noexcept + { + if (type == newType) + return; + + dirty = true; + + type = newType; + CreateShape(); + } + + void SHCollider::SetIsTrigger(bool trigger) noexcept + { + dirty = true; + isTrigger = trigger; + } + + void SHCollider::SetFriction(float friction) noexcept + { + dirty = true; + } + + void SHCollider::SetBounciness(float bounciness) noexcept + { + dirty = true; + } + + void SHCollider::SetDensity(float density) noexcept + { + dirty = true; + } + + void SHCollider::SetPositionOffset(const SHVec3& posOffset) noexcept + { + dirty = true; + positionOffset = posOffset; + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Member Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHCollider::CreateShape() + { + // Remove current shape + delete shape; + + switch (type) + { + case Type::BOX: CreateBoundingBox(); break; + case Type::SPHERE: CreateSphere(); break; + default: break; + } + } + + void SHCollider::CreateBoundingBox() + { + shape = new SHBoundingBox{ SHVec3::Zero, SHVec3::One }; + } + + void SHCollider::CreateSphere() + { + + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h new file mode 100644 index 00000000..fce4a5b2 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -0,0 +1,108 @@ +/**************************************************************************************** + * \file SHCollider.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Collider. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "Math/Geometry/SHBoundingBox.h" +#include "Math/SHQuaternion.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHCollider + { + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class Type + { + BOX + , SPHERE + , CAPSULE + , CONVEX_HULL + , CONVEX_MESH + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHCollider (Type colliderType); + + SHCollider (const SHCollider& rhs) noexcept; + SHCollider (SHCollider&& rhs) noexcept; + ~SHCollider () noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHCollider& operator=(const SHCollider& rhs) noexcept; + SHCollider& operator=(SHCollider&& rhs) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool HasChanged () const noexcept; + + [[nodiscard]] bool IsTrigger () const noexcept; + + [[nodiscard]] Type GetType () const noexcept; + [[nodiscard]] SHShape* GetShape () const noexcept; + + [[nodiscard]] float GetFriction () const noexcept; + [[nodiscard]] float GetBounciness () const noexcept; + [[nodiscard]] float GetDensity () const noexcept; + + [[nodiscard]] SHVec3 GetPosition () const noexcept; + [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; + [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetType (Type newType) noexcept; + + void SetIsTrigger (bool isTrigger) noexcept; + void SetFriction (float friction) noexcept; + void SetBounciness (float bounciness) noexcept; + void SetDensity (float density) noexcept; + + void SetPositionOffset (const SHVec3& positionOffset) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + Type type; + bool isTrigger; + bool dirty; + SHShape* shape; + SHVec3 positionOffset; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void CreateShape (); + void CreateBoundingBox (); + void CreateSphere (); + }; + +} // namespace SHADE diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 4f0616f8..325d860f 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -24,9 +24,10 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHPhysicsObject::SHPhysicsObject() noexcept - : entityID { MAX_EID } - , componentFlags { 0 } - , rp3dBody { nullptr } + : entityID { MAX_EID } + , isRigidBody { false } + , hasColliders{ false } + , rp3dBody { nullptr } {} SHPhysicsObject::~SHPhysicsObject() noexcept @@ -81,32 +82,11 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHPhysicsObject::Synchronise() const - { - if (const bool IS_DIRTY = componentFlags & 1U << 0; IS_DIRTY) - { - auto* physicsSystem = SHSystemManager::GetSystem(); - const bool IS_RIGIDBODY_DIRTY = componentFlags & 1U << 1; - const bool IS_COLLIDER_DIRTY = componentFlags & 1U << 3; - - if (IS_RIGIDBODY_DIRTY) - { - static constexpr auto COMP_ENUM = SHPhysicsSystem::UpdateComponent::RIGID_BODY; - - const bool HAS_RIGIDBODY = componentFlags & 1U << 2; - HAS_RIGIDBODY ? physicsSystem->AddComponent(COMP_ENUM, entityID) : physicsSystem->RemoveComponent(COMP_ENUM, entityID); - } - - if (IS_COLLIDER_DIRTY) - { - static constexpr auto COMP_ENUM = SHPhysicsSystem::UpdateComponent::COLLIDER; - - const bool HAS_COLLIDER = componentFlags & 1U << 2; - HAS_COLLIDER ? physicsSystem->AddComponent(COMP_ENUM, entityID) : physicsSystem->RemoveComponent(COMP_ENUM, entityID); - } - } - } + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 20449f2d..e0f0f38f 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -25,22 +25,24 @@ namespace SHADE class SH_API SHPhysicsObject { - protected: + private: /*---------------------------------------------------------------------------------*/ /* Friends */ /*---------------------------------------------------------------------------------*/ friend class SHPhysicsSystem; + friend class SHRigidBodyComponent; + friend class SHColliderComponent; public: /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject () noexcept; - SHPhysicsObject (const SHPhysicsObject& rhs) noexcept = default; - SHPhysicsObject (SHPhysicsObject&& rhs) noexcept = default; - ~SHPhysicsObject () noexcept; + SHPhysicsObject () noexcept; + SHPhysicsObject (const SHPhysicsObject& rhs) noexcept = default; + SHPhysicsObject (SHPhysicsObject&& rhs) noexcept = default; + virtual ~SHPhysicsObject () noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -53,30 +55,31 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec3 GetPosition () const noexcept; - [[nodiscard]] SHQuaternion GetOrientation () const noexcept; - [[nodiscard]] SHVec3 GetRotation () const noexcept; + [[nodiscard]] virtual SHVec3 GetPosition () const noexcept; + [[nodiscard]] virtual SHQuaternion GetOrientation () const noexcept; + [[nodiscard]] virtual SHVec3 GetRotation () const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - /** - * @brief Checks for updates in the component states and tells the physics system to - * make any necessary additions / removals to rp3d side to sync with the SHADE - * component. - */ - void Synchronise() const; - - protected: + private: /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ EntityID entityID; - uint8_t componentFlags; // 0 0 0 c cDirty rb rbDirty dirty + bool isRigidBody; + bool hasColliders; + rp3d::CollisionBody* rp3dBody; // Can be either a collision body or a rigid body rp3d::Transform prevTransform; // Cached transform for interpolation + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + + }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index df69ad04..9be8a5ef 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -26,9 +26,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHPhysicsSystem::SHPhysicsSystem() - : accumulatedTime { 0.0 } - , fixedDT { 1.0 / 60.0 } - , world { nullptr } + : interpolationFactor { 0.0 } + , fixedDT { 1.0 / 60.0 } + , world { nullptr } {} SHPhysicsSystem::PhysicsPreUpdate::PhysicsPreUpdate() @@ -36,17 +36,22 @@ namespace SHADE {} SHPhysicsSystem::PhysicsFixedUpdate::PhysicsFixedUpdate() - : SHFixedSystemRoutine { DEFAULT_FIXED_STEP, "Physics FixedUpdate", true } + : SHFixedSystemRoutine { DEFAULT_FIXED_STEP, "Physics FixedUpdate", false } {} SHPhysicsSystem::PhysicsPostUpdate::PhysicsPostUpdate() - : SHSystemRoutine { "Physics PostUpdate", true } + : SHSystemRoutine { "Physics PostUpdate", false } {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ + double SHPhysicsSystem::GetFixedDT() const noexcept + { + return fixedDT; + } + bool SHPhysicsSystem::IsSleepingEnabled() const noexcept { if (world) @@ -97,6 +102,11 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHPhysicsSystem::SetFixedDT(double fixedUpdateRate) noexcept + { + fixedDT = fixedUpdateRate; + } + void SHPhysicsSystem::SetWorldGravity(const SHVec3& gravity) const noexcept { if (world) @@ -185,228 +195,362 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - void SHPhysicsSystem::PhysicsPreUpdate::Execute([[maybe_unused]]double dt) noexcept + void SHPhysicsSystem::AddRigidBody(EntityID entityID) noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Adding a Rigidbody to the Physics World.") + #endif + + // Check if entity is already a physics object + auto* physicsObject = GetPhysicsObject(entityID); + if (!physicsObject) + physicsObject = &(map.emplace(entityID, SHPhysicsObject{}).first->second); + + // Get entity transform + auto const* SHADE_TF = SHComponentManager::GetComponent_s(entityID); + + // Possibly redundant + if (!SHADE_TF) + { + SHComponentManager::AddComponent(entityID); + SHADE_TF = SHComponentManager::GetComponent(entityID); + } + + const SHVec3& SHADE_POS = SHADE_TF->GetWorldPosition(); + const SHVec3& SHADE_ROT = SHADE_TF->GetWorldRotation(); + + const rp3d::Vector3 RP3D_POS { SHADE_POS.x, SHADE_POS.y, SHADE_POS.z }; + const rp3d::Quaternion RP3D_ROT = rp3d::Quaternion::fromEulerAngles( SHADE_ROT.x, SHADE_ROT.y, SHADE_ROT.z ); + + physicsObject->rp3dBody = world->createRigidBody(rp3d::Transform{ RP3D_POS, RP3D_ROT }); + physicsObject->isRigidBody = true; + } + + void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Adding a Collider to the Physics World.") + #endif + } + + void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Removing a Rigidbody from the Physics World.") + #endif + + } + + void SHPhysicsSystem::RemoveCollider(EntityID entityID) noexcept + { + #ifdef _DEBUG + SHLOG_INFO("Removing a Collider from the Physics World.") + #endif + } + + void SHPhysicsSystem::AddForce(EntityID entityID, const SHVec3& force) const noexcept + { + + } + + void SHPhysicsSystem::AddForceAtLocalPos(EntityID entityID, const SHVec3& force, const SHVec3& localPos) const noexcept + { + + } + + void SHPhysicsSystem::AddForceAtWorldPos(EntityID entityID, const SHVec3& force, const SHVec3& worldPos) const noexcept + { + + } + + void SHPhysicsSystem::AddRelativeForce(EntityID entityID, const SHVec3& relativeForce) const noexcept + { + + } + + void SHPhysicsSystem::AddRelativeForceAtLocalPos(EntityID entityID, const SHVec3& relativeForce, const SHVec3& localPos) const noexcept + { + + } + + void SHPhysicsSystem::AddRelativeForceAtWorldPos(EntityID entityID, const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept + { + + } + + void SHPhysicsSystem::AddTorque(EntityID entityID, const SHVec3& torque) const noexcept + { + + } + + void SHPhysicsSystem::AddRelativeTorque(EntityID entityID, const SHVec3& relativeTorque) const noexcept + { + + } + + void SHPhysicsSystem::PhysicsPreUpdate::Execute(double) noexcept { auto* system = reinterpret_cast(GetSystem()); - system->ClearUpdateQueue(); - //system->SyncActiveStates(SHSceneManager::GetCurrentSceneGraph()); + // Update bodies and colliders if component is dirty + const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + system->SyncComponents(sceneGraph); } - void SHPhysicsSystem::PhysicsFixedUpdate::FixedExecute(double dt) noexcept + void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept { auto* system = reinterpret_cast(GetSystem()); - system->world->update(static_cast(dt)); + fixedTimeStep = 1.0 / system->fixedDT; + accumulatedTime += dt; - system->fixedDT = fixedTimeStep; - system->accumulatedTime = accumulatedTime; + int count = 0; + while (accumulatedTime > fixedTimeStep) + { + system->world->update(static_cast(fixedTimeStep)); + + accumulatedTime -= fixedTimeStep; + ++count; + } + + stats.numSteps = count; + + system->interpolationFactor = accumulatedTime / fixedTimeStep; } - void SHPhysicsSystem::PhysicsPostUpdate::Execute(double dt) noexcept + void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept { auto* system = reinterpret_cast(GetSystem()); // Interpolate transforms for rendering const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - //system->SyncTransforms(sceneGraph); + system->SyncTransforms(sceneGraph); // TODO(Diren): Handle trigger messages for scripting } - /*-----------------------------------------------------------------------------------*/ - /* Protected Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - void SHPhysicsSystem::AddComponent(UpdateComponent comp, EntityID entityID) noexcept - { - updateQueue.push({ comp, UpdateType::ADD, entityID }); - } - - - void SHPhysicsSystem::RemoveComponent(UpdateComponent comp, EntityID entityID) noexcept - { - updateQueue.push({ comp, UpdateType::REMOVE, entityID }); - } - /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHPhysicsSystem::ClearUpdateQueue() noexcept + SHPhysicsObject* SHPhysicsSystem::GetPhysicsObject(EntityID entityID) noexcept { - while (!updateQueue.empty()) + const auto it = map.find(entityID); + if (it == map.end()) { - const auto& CMD = updateQueue.front(); - switch (CMD.type) - { - case UpdateType::ADD: - { - switch (CMD.component) - { - case UpdateComponent::RIGID_BODY: AddRigidBody(CMD.entityID); break; - //case UpdateComponent::COLLIDER: AddCollider(CMD.entityID); break; - default: break; - } - } - case UpdateType::REMOVE: - { - switch (CMD.component) - { - case UpdateComponent::RIGID_BODY: RemoveRigidBody(CMD.entityID); break; - //case UpdateComponent::COLLIDER: RemoveCollider(CMD.entityID); break; - default: break; - } - } - default: break; - } - - updateQueue.pop(); + SHLOG_ERROR("Entity {} is not in the physics system!", entityID) + return nullptr; } + + return &(it->second); } - void SHPhysicsSystem::SyncActiveStates(const SHSceneGraph& sceneGraph) const noexcept + void SHPhysicsSystem::SyncComponents(const SHSceneGraph& sceneGraph) noexcept { - // Sync active states: if node or component is not active, set rp3d to inactive - static constexpr auto SYNC_ACTIVE = [](SHSceneNode* node) + static const auto SYNC_COMPONENTS = [&](SHSceneNode* node) { const EntityID ENTITY_ID = node->GetEntityID(); - // Check if has rigid body - auto const* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if(rigidBodyComponent) - { - const bool RP3D_ACTIVE = rigidBodyComponent->rp3dBody->isActive(); - const bool SHADE_ACTIVE = node->IsActive() && rigidBodyComponent->isActive; + // Get physics object + auto const* physicsObject = GetPhysicsObject(ENTITY_ID); + if (!physicsObject) + return; - if (RP3D_ACTIVE != SHADE_ACTIVE) - rigidBodyComponent->rp3dBody->setIsActive(SHADE_ACTIVE); - } - else // Check for a collider + const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); + const bool NODE_ACTIVE = node->IsActive(); + + // Sync rigid body + if (physicsObject->isRigidBody) { + auto* rbComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if (rbComponent->dirtyFlags > 0) + { + SyncRB(physicsObject, rbComponent); + rbComponent->dirtyFlags = 0; + } + + + // Sync active states + const bool SHADE_ACTIVE = NODE_ACTIVE && rbComponent->isActive; + if (SHADE_ACTIVE != RP3D_ACTIVE) + physicsObject->rp3dBody->setIsActive(SHADE_ACTIVE); + } + + // Sync colliders + if (physicsObject->hasColliders) + { + auto const* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); } + + // Sync transforms + auto const* tfComponent = SHComponentManager::GetComponent(ENTITY_ID); + if (tfComponent->HasChanged()) + { + const SHVec3& SHADE_POS = tfComponent->GetWorldPosition(); + const SHVec3& SHADE_ROT = tfComponent->GetWorldRotation(); + + const rp3d::Vector3 RP3D_POS { SHADE_POS.x, SHADE_POS.y, SHADE_POS.z }; + const rp3d::Quaternion RP3D_ROT = rp3d::Quaternion::fromEulerAngles(SHADE_ROT.x, SHADE_ROT.y, SHADE_ROT.z); + + physicsObject->rp3dBody->setTransform(rp3d::Transform{ RP3D_POS, RP3D_ROT }); + } }; - sceneGraph.Traverse(SYNC_ACTIVE); + sceneGraph.Traverse(SYNC_COMPONENTS); } - void SHPhysicsSystem::SyncTransforms(const SHSceneGraph& sceneGraph) const noexcept + void SHPhysicsSystem::SyncTransforms(const SHSceneGraph& sceneGraph) noexcept { - const rp3d::decimal INTERPOLATION_FACTOR = static_cast(accumulatedTime / fixedDT); - static const auto SYNC_TRANSFORMS = [&](SHSceneNode* node) { const EntityID ENTITY_ID = node->GetEntityID(); - // Check if has rigid body - if (auto* rb = SHComponentManager::GetComponent_s(ENTITY_ID); rb) + // Get physics object + auto* physicsObject = GetPhysicsObject(ENTITY_ID); + if (!physicsObject) + return; + + auto* tfComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + + rp3d::Vector3 rp3dPos; + rp3d::Quaternion rp3dRot; + + const rp3d::Transform CURRENT_TF = physicsObject->rp3dBody->getTransform(); + + // Check if transform should be interpolated + auto const* rbComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if (rbComponent && rbComponent->IsInterpolating()) { - if (node->IsActive() && rb->isActive) - { - // Get SHADE transform - auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - SHASSERT(transformComponent != nullptr, "Transform Component missing from Entity " + std::to_string(ENTITY_ID)) + const rp3d::Transform PREV_TF = physicsObject->prevTransform; + const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); - SHVec3 shadePos, shadeRot; - - if (rb->interpolate) - { - const rp3d::Transform CURRENT_TRANSFORM = rb->rp3dBody->getTransform(); - const rp3d::Transform INTERPOLATED_TRANSFORM = rp3d::Transform::interpolateTransforms(rb->prevTransform, CURRENT_TRANSFORM, INTERPOLATION_FACTOR); - - const auto& RP3D_POS = INTERPOLATED_TRANSFORM.getPosition(); - shadePos = SHVec3{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; - - const auto& RP3D_ORT = INTERPOLATED_TRANSFORM.getOrientation(); - shadeRot = SHQuaternion{ RP3D_ORT.x, RP3D_ORT.y, RP3D_ORT.z, RP3D_ORT.w }.ToEuler(); - - rb->prevTransform = CURRENT_TRANSFORM; - } - else - { - - const auto& RP3D_POS = rb->GetPosition(); - shadePos = SHVec3{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; - shadeRot = rb->GetOrientation().ToEuler(); - } - - transformComponent->SetWorldPosition(shadePos); - transformComponent->SetWorldRotation(shadeRot); - } - else // Check for a collider - { - - } + + rp3dPos = INTERPOLATED_TF.getPosition(); + rp3dRot = INTERPOLATED_TF.getOrientation(); } + else + { + rp3dPos = CURRENT_TF.getPosition(); + rp3dRot = CURRENT_TF.getOrientation(); + } + + // Convert RP3D Transform to SHADE + const SHVec3 SHADE_POS = SHVec3{ rp3dPos.x, rp3dPos.y, rp3dPos.z }; + const SHVec3 SHADE_ROT = SHQuaternion{ rp3dRot.x, rp3dRot.y, rp3dRot.z, rp3dRot.w }.ToEuler(); + + tfComponent->SetWorldPosition(SHADE_POS); + tfComponent->SetWorldRotation(SHADE_ROT); + + // Cache transforms + physicsObject->prevTransform = CURRENT_TF; }; sceneGraph.Traverse(SYNC_TRANSFORMS); } - - void SHPhysicsSystem::AddRigidBody(EntityID entityID) const noexcept + void SHPhysicsSystem::SyncRB(SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept { - #ifdef _DEBUG - SHLOG_INFO("Adding a Rigidbody to the Physics World.") - #endif + auto* rigidBody = reinterpret_cast(physicsObject->rp3dBody); - // Rigid Bodies need a transform. - auto const* transformComponent = SHComponentManager::GetComponent_s(entityID); - if (!transformComponent) + const uint16_t RB_FLAGS = comp->dirtyFlags; + const size_t NUM_FLAGS = sizeof(RB_FLAGS) * 8U; + for (size_t i = 0; i < NUM_FLAGS; ++i) { - // NOTE: This should already be handled by the editor. + // Check if current dirty flag has been set to true + if (RB_FLAGS & 1U << i) + { + switch (i) + { + case 0: // Gravity + { + rigidBody->enableGravity(comp->IsGravityEnabled()); + break; + } + case 1: // Sleeping + { + rigidBody->setIsAllowedToSleep(comp->IsAllowedToSleep()); + break; + } + case 2: // Linear Constraints + { + SetRP3DLinearConstraints(rigidBody, comp->flags); + break; + } + case 3: // Angular Constraints + { + SetRP3DAngularConstraints(rigidBody, comp->flags); + break; + } + case 4: // Type + { + rigidBody->setType(static_cast(comp->GetType())); + break; + } + case 5: // Mass + { + rigidBody->setMass(comp->GetMass()); + break; + } + case 6: // Drag + { + rigidBody->setLinearDamping(comp->GetDrag()); + break; + } + case 7: // Angular Drag + { + rigidBody->setAngularDamping(comp->GetAngularDrag()); + break; + } + case 8: // Linear Velocity + { + const SHVec3& SHADE_VEL = comp->GetLinearVelocity(); + rp3d::Vector3 RP3D_VEL { SHADE_VEL.x, SHADE_VEL.y, SHADE_VEL.z }; - SHLOG_INFO("Automatically adding a transform to Entity {}", entityID) - SHComponentManager::AddComponent(entityID); - transformComponent = SHComponentManager::GetComponent(entityID); + rigidBody->setLinearVelocity(RP3D_VEL); + break; + } + case 9: // Angular Velocity + { + const SHVec3& SHADE_VEL = comp->GetAngularVelocity(); + rp3d::Vector3 RP3D_VEL { SHADE_VEL.x, SHADE_VEL.y, SHADE_VEL.z }; + + rigidBody->setAngularVelocity(RP3D_VEL); + break; + } + default: break; + } + } } - - const SHVec3& SHADE_WORLD_POSITION = transformComponent->GetWorldPosition(); - const rp3d::Vector3 RP3D_POSITION { SHADE_WORLD_POSITION.x, SHADE_WORLD_POSITION.y, SHADE_WORLD_POSITION.z }; - - const SHVec3& SHADE_WORLD_ROTATION = transformComponent->GetWorldRotation(); - const rp3d::Quaternion RP3D_ORIENTATION = rp3d::Quaternion::fromEulerAngles(SHADE_WORLD_ROTATION.x, SHADE_WORLD_ROTATION.y, SHADE_WORLD_ROTATION.z); - - const rp3d::Transform RP3D_TF { RP3D_POSITION, RP3D_ORIENTATION }; - - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); - if (!rigidBodyComponent) - { - // NOTE: This should already be handled by the editor. - - SHLOG_INFO("Automatically adding a rigidbody to Entity {}", entityID) - SHComponentManager::AddComponent(entityID); - rigidBodyComponent = SHComponentManager::GetComponent(entityID); - } - - rigidBodyComponent->rp3dBody = world->createRigidBody(RP3D_TF); - rigidBodyComponent->prevTransform = RP3D_TF; - rigidBodyComponent->SyncRP3DAndSHADE(); - - // Reassign collider - //if (collider) - //{ - // collider. - //} } - void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) const noexcept + void SHPhysicsSystem::SetRP3DLinearConstraints(rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept { - #ifdef _DEBUG - SHLOG_INFO("Removing a Rigidbody from the Physics World.") - #endif - - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); - if (rigidBodyComponent == nullptr) + const rp3d::Vector3 CONSTRAINTS { - SHLOG_ERROR("Entity {} does not have a rigidbody component to remove!", entityID) - return; - } + rbFlags & 1U << 2 ? 1.0f : 0.0f, + rbFlags & 1U << 3 ? 1.0f : 0.0f, + rbFlags & 1U << 4 ? 1.0f : 0.0f + }; - // If a collider exists, remake the colliders with a collision body + + rp3dRigidBody->setLinearLockAxisFactor(CONSTRAINTS); + } - world->destroyRigidBody(reinterpret_cast(rigidBodyComponent->rp3dBody)); - rigidBodyComponent->rp3dBody = nullptr; // this should be redundant + void SHPhysicsSystem::SetRP3DAngularConstraints(rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept + { + const rp3d::Vector3 CONSTRAINTS + { + rbFlags & 1U << 5 ? 1.0f : 0.0f, + rbFlags & 1U << 6 ? 1.0f : 0.0f, + rbFlags & 1U << 7 ? 1.0f : 0.0f + }; + + rp3dRigidBody->setAngularLockAxisFactor(CONSTRAINTS); + } + + void SHPhysicsSystem::SyncColliders(SHPhysicsObject const* physicsObject, const SHColliderComponent* comp) noexcept + { + } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 273eb54d..af615f35 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -11,16 +11,20 @@ #pragma once #include +#include #include // Project Headers -#include "Math/SHQuaternion.h" +#include "SHPhysicsObject.h" #include "Components/SHRigidBodyComponent.h" +#include "Components/SHColliderComponent.h" + #include "Scene/SHSceneGraph.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -29,13 +33,6 @@ namespace SHADE class SH_API SHPhysicsSystem : public SHSystem { - protected: - /*---------------------------------------------------------------------------------*/ - /* Friends */ - /*---------------------------------------------------------------------------------*/ - - friend class SHPhysicsObject; - public: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -59,6 +56,8 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ + [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] bool IsSleepingEnabled () const noexcept; [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; @@ -70,7 +69,7 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - //void SetFixedUpdate (double fixedUpdateRate) noexcept; + void SetFixedDT (double fixedUpdateRate) noexcept; void SetWorldGravity (const SHVec3& gravity) const noexcept; void SetNumberVelocityIterations (uint16_t numVelIterations) const noexcept; void SetNumberPositionIterations (uint16_t numPosIterations) const noexcept; @@ -82,13 +81,32 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Init () override; - void Exit () override; + void Init () override; + void Exit () override; + + void AddRigidBody (EntityID entityID) noexcept; + void AddCollider (EntityID entityID) noexcept; + void RemoveRigidBody (EntityID entityID) noexcept; + void RemoveCollider (EntityID entityID) noexcept; + + void AddForce (EntityID entityID, const SHVec3& force) const noexcept; + void AddForceAtLocalPos (EntityID entityID, const SHVec3& force, const SHVec3& localPos) const noexcept; + void AddForceAtWorldPos (EntityID entityID, const SHVec3& force, const SHVec3& worldPos) const noexcept; + + void AddRelativeForce (EntityID entityID, const SHVec3& relativeForce) const noexcept; + void AddRelativeForceAtLocalPos (EntityID entityID, const SHVec3& relativeForce, const SHVec3& localPos) const noexcept; + void AddRelativeForceAtWorldPos (EntityID entityID, const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept; + + void AddTorque (EntityID entityID, const SHVec3& torque) const noexcept; + void AddRelativeTorque (EntityID entityID, const SHVec3& relativeTorque) const noexcept; /*---------------------------------------------------------------------------------*/ /* System Routines */ /*---------------------------------------------------------------------------------*/ + /** + * @brief Synchronises RP3D with SHADE + */ class SH_API PhysicsPreUpdate : public SHSystemRoutine { public: @@ -118,8 +136,7 @@ namespace SHADE /* Function Members */ /*-------------------------------------------------------------------------------*/ - //void Execute (double dt) noexcept override; - void FixedExecute (double dt) noexcept override; + void Execute (double dt) noexcept override; }; class SH_API PhysicsPostUpdate : public SHSystemRoutine @@ -138,56 +155,43 @@ namespace SHADE void Execute(double dt) noexcept override; }; - protected: + private: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - enum class UpdateComponent { RIGID_BODY, COLLIDER }; - enum class UpdateType { ADD, REMOVE }; + using EntityObjectMap = std::unordered_map; - struct UpdateCommand - { - UpdateComponent component; - UpdateType type; - EntityID entityID; - }; - - /*---------------------------------------------------------------------------------*/ - /* Function Members */ - /*---------------------------------------------------------------------------------*/ - - void AddComponent (UpdateComponent comp, EntityID entityID) noexcept; - void RemoveComponent (UpdateComponent comp, EntityID entityID) noexcept; - - private: /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ - // TODO(Diren): Store interpFactor & fixedUpdate for modifiable fixedDT + // TODO(Diren): Store interpFactor - double accumulatedTime; + double interpolationFactor; double fixedDT; rp3d::PhysicsCommon factory; rp3d::PhysicsWorld* world; - std::queue updateQueue; + EntityObjectMap map; + + /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void ClearUpdateQueue () noexcept; - void SyncActiveStates (const SHSceneGraph& sceneGraph) const noexcept; - void SyncTransforms (const SHSceneGraph& sceneGraph) const noexcept; + void SyncComponents (const SHSceneGraph& sceneGraph) noexcept; + void SyncTransforms (const SHSceneGraph& sceneGraph) noexcept; // TODO(Diren): Trigger handling - void AddRigidBody (EntityID entityID) const noexcept; - void AddCollider (EntityID entityID) const noexcept; - void RemoveRigidBody (EntityID entityID) const noexcept; - void RemoveCollider (EntityID entityID) const noexcept; + static void SyncRB (SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept; + static void SetRP3DLinearConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; + static void SetRP3DAngularConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; + + static void SyncColliders (SHPhysicsObject const* physicsObject, const SHColliderComponent* comp) noexcept; }; From b657ad88846b228ec14149278bfb12fc90383bea Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 1 Oct 2022 16:33:16 +0800 Subject: [PATCH 301/793] Handled resizing for the render graph resource (not tested) --- .../Graphics/Devices/SHVkLogicalDevice.cpp | 2 + .../src/Graphics/Images/SHVkImage.cpp | 74 ++++++---- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 5 +- .../src/Graphics/Images/SHVkImageView.cpp | 136 ++++++++++-------- .../src/Graphics/Images/SHVkImageView.h | 5 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 19 ++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 9 ++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 1 + .../RenderGraph/SHRenderGraphResource.cpp | 56 +++++++- .../RenderGraph/SHRenderGraphResource.h | 16 +++ 11 files changed, 220 insertions(+), 105 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 3fa797bf..766a27c6 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -195,6 +195,8 @@ namespace SHADE vk::PhysicalDeviceDescriptorIndexingFeatures descIndexingFeature{}; descIndexingFeature.descriptorBindingVariableDescriptorCount = true; + descIndexingFeature.shaderSampledImageArrayNonUniformIndexing = true; + descIndexingFeature.runtimeDescriptorArray = true; // Prepare to create the device vk::DeviceCreateInfo deviceCreateInfo diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index b6f20af4..ed539a6c 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -79,6 +79,41 @@ namespace SHADE vmaUnmapMemory(*vmaAllocator, stagingAlloc); } + void SHVkImage::CreateFramebufferImage(void) noexcept + { + vk::ImageCreateInfo imageCreateInfo{}; + imageCreateInfo.imageType = vk::ImageType::e2D; + imageCreateInfo.extent.width = width; + imageCreateInfo.extent.height = height; + imageCreateInfo.extent.depth = depth; + imageCreateInfo.mipLevels = mipLevelCount; + imageCreateInfo.arrayLayers = layerCount; + imageCreateInfo.format = imageFormat; + imageCreateInfo.tiling = vk::ImageTiling::eOptimal; + imageCreateInfo.initialLayout = vk::ImageLayout::eUndefined; + imageCreateInfo.usage = usageFlags; + imageCreateInfo.sharingMode = vk::SharingMode::eExclusive; + imageCreateInfo.samples = vk::SampleCountFlagBits::e1; + imageCreateInfo.flags = createFlags; + + + // Prepare allocation parameters for call to create images later + VmaAllocationCreateInfo allocCreateInfo{}; + allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; + allocCreateInfo.flags = {}; // TODO: Make sure the vk::MemoryPropertyFlags returned from vmaGetAllocationMemoryProperties has the device local bit set + + VmaAllocationInfo allocInfo{}; + + VkImage tempImage; + auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + vkImage = tempImage; + + if (result != VK_SUCCESS) + SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); + else + SHVulkanDebugUtil::ReportVkSuccess("Successfully created image. "); + } + SHVkImage::SHVkImage( VmaAllocator const* allocator, SHImageCreateParams const& imageDetails, @@ -196,37 +231,7 @@ namespace SHADE , createFlags {create} , vmaAllocator {allocator} { - vk::ImageCreateInfo imageCreateInfo{}; - imageCreateInfo.imageType = vk::ImageType::e2D; - imageCreateInfo.extent.width = width; - imageCreateInfo.extent.height = height; - imageCreateInfo.extent.depth = depth; - imageCreateInfo.mipLevels = mipLevelCount; - imageCreateInfo.arrayLayers = layerCount; - imageCreateInfo.format = imageFormat; - imageCreateInfo.tiling = vk::ImageTiling::eOptimal; - imageCreateInfo.initialLayout = vk::ImageLayout::eUndefined; - imageCreateInfo.usage = usageFlags; - imageCreateInfo.sharingMode = vk::SharingMode::eExclusive; - imageCreateInfo.samples = vk::SampleCountFlagBits::e1; - imageCreateInfo.flags = createFlags; - - - // Prepare allocation parameters for call to create images later - VmaAllocationCreateInfo allocCreateInfo{}; - allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; - allocCreateInfo.flags = {}; // TODO: Make sure the vk::MemoryPropertyFlags returned from vmaGetAllocationMemoryProperties has the device local bit set - - VmaAllocationInfo allocInfo{}; - - VkImage tempImage; - auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); - vkImage = tempImage; - - if (result != VK_SUCCESS) - SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); - else - SHVulkanDebugUtil::ReportVkSuccess("Successfully created image. "); + CreateFramebufferImage(); } Handle SHVkImage::CreateImageView(Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept @@ -288,6 +293,13 @@ namespace SHADE barrier.subresourceRange.layerCount = layerCount; } + void SHVkImage::HandleResizeFramebufferImage(void) noexcept + { + vmaDestroyImage(*vmaAllocator, vkImage, alloc); + + CreateFramebufferImage(); + } + void SHVkImage::LinkWithExteriorImage(vk::Image inVkImage, vk::ImageType type, uint32_t inWidth, uint32_t inHeight, uint32_t inDepth, uint32_t layers, uint8_t levels, vk::Format format, vk::ImageUsageFlags flags) noexcept { vkImage = inVkImage; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 39e695a5..b23d7bd4 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -108,7 +108,7 @@ namespace SHADE /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void PrepStagingBuffer(const void* data, uint32_t srcSize) noexcept; - + void CreateFramebufferImage (void) noexcept; public: /*-----------------------------------------------------------------------*/ @@ -137,7 +137,8 @@ namespace SHADE Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; void TransferToDeviceResource (Handle cmdBufferHdl) noexcept; void PrepareImageTransitionInfo (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; - + void HandleResizeFramebufferImage(void) noexcept; + /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImageView.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImageView.cpp index 9d12d7cd..44b5718c 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImageView.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImageView.cpp @@ -6,6 +6,67 @@ namespace SHADE { + + void SHVkImageView::Create(void) noexcept + { + auto parentImageCreateFlags = parentImage->GetImageeCreateFlags(); + + // 2D array image type means parent image must be 2D array compatible + if (imageViewDetails.viewType == vk::ImageViewType::e2DArray) + { + if (!(parentImageCreateFlags & vk::ImageCreateFlagBits::e2DArrayCompatible)) + { + SHLOG_ERROR("Failed to create image view. Parent image not 2D array compatible. "); + return; + } + } + + // Check if its possible for the image view to have different format than parent image + if (imageViewDetails.format != parentImage->GetImageFormat()) + { + if (!(parentImageCreateFlags & vk::ImageCreateFlagBits::eMutableFormat)) + { + SHLOG_ERROR("Failed to create image view. Format for image view not same as image but image not initialized with mutable format bit. "); + return; + } + } + + + vk::ImageViewCreateInfo viewCreateInfo + { + .pNext = nullptr, // Can be used to override with a VkImageViewUsageCreateInfo to override usage. See Vulkan spec page 877 for more information + .image = parentImage->GetVkImage(), + .viewType = imageViewDetails.viewType, + .format = imageViewDetails.format, + .components + { + .r = vk::ComponentSwizzle::eR, + .g = vk::ComponentSwizzle::eG, + .b = vk::ComponentSwizzle::eB, + .a = vk::ComponentSwizzle::eA, + }, + .subresourceRange + { + .aspectMask = imageViewDetails.imageAspectFlags, + .baseMipLevel = imageViewDetails.baseMipLevel, + .levelCount = imageViewDetails.mipLevelCount, + .baseArrayLayer = imageViewDetails.baseArrayLayer, + .layerCount = imageViewDetails.layerCount, + }, + }; + + if (auto result = logicalDeviceHdl->GetVkLogicalDevice().createImageView(&viewCreateInfo, nullptr, &vkImageView); result != vk::Result::eSuccess) + { + SHVulkanDebugUtil::ReportVkError(result, "Failed to create image view! "); + return; + } + else + { + SHVulkanDebugUtil::ReportVkSuccess("Successfully created image view. "); + } + + } + /***************************************************************************/ /*! @@ -18,70 +79,12 @@ namespace SHADE */ /***************************************************************************/ SHVkImageView::SHVkImageView(Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) noexcept - : parentImage{ } + : parentImage{ parent } , vkImageView{} - , imageViewDetails{} + , imageViewDetails{createParams} , logicalDeviceHdl {inLogicalDeviceHdl} { - auto parentImageCreateFlags = parent->GetImageeCreateFlags(); - - // 2D array image type means parent image must be 2D array compatible - if (createParams.viewType == vk::ImageViewType::e2DArray) - { - if (!(parentImageCreateFlags & vk::ImageCreateFlagBits::e2DArrayCompatible)) - { - SHLOG_ERROR("Failed to create image view. Parent image not 2D array compatible. "); - return; - } - } - - // Check if its possible for the image view to have different format than parent image - if (createParams.format != parent->GetImageFormat()) - { - if (!(parentImageCreateFlags & vk::ImageCreateFlagBits::eMutableFormat)) - { - SHLOG_ERROR("Failed to create image view. Format for image view not same as image but image not initialized with mutable format bit. "); - return; - } - } - - - vk::ImageViewCreateInfo viewCreateInfo - { - .pNext = nullptr, // Can be used to override with a VkImageViewUsageCreateInfo to override usage. See Vulkan spec page 877 for more information - .image = parent->GetVkImage(), - .viewType = createParams.viewType, - .format = createParams.format, - .components - { - .r = vk::ComponentSwizzle::eR, - .g = vk::ComponentSwizzle::eG, - .b = vk::ComponentSwizzle::eB, - .a = vk::ComponentSwizzle::eA, - }, - .subresourceRange - { - .aspectMask = createParams.imageAspectFlags, - .baseMipLevel = createParams.baseMipLevel, - .levelCount = createParams.mipLevelCount, - .baseArrayLayer = createParams.baseArrayLayer, - .layerCount = createParams.layerCount, - }, - }; - - if (auto result = inLogicalDeviceHdl->GetVkLogicalDevice().createImageView(&viewCreateInfo, nullptr, &vkImageView); result != vk::Result::eSuccess) - { - SHVulkanDebugUtil::ReportVkError(result, "Failed to create image view! "); - return; - } - else - { - SHVulkanDebugUtil::ReportVkSuccess("Successfully created image view. "); - } - - // After success, THEN assign variables - parentImage = parent; - imageViewDetails = createParams; + Create(); } SHVkImageView::SHVkImageView(SHVkImageView&& rhs) noexcept @@ -94,6 +97,17 @@ namespace SHADE } + void SHVkImageView::ViewNewImage(Handle const& parent, SHImageViewDetails const& createParams) noexcept + { + imageViewDetails = createParams; + parentImage = parent; + + if (vkImageView) + logicalDeviceHdl->GetVkLogicalDevice().destroyImageView(vkImageView, nullptr); + + Create(); + } + Handle const& SHVkImageView::GetParentImage(void) const noexcept { return parentImage; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImageView.h b/SHADE_Engine/src/Graphics/Images/SHVkImageView.h index afa357ef..ae23d7a7 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImageView.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImageView.h @@ -25,12 +25,17 @@ namespace SHADE //! Logical Device needed for creation and destruction Handle logicalDeviceHdl; + //! Create new image view + void Create (void) noexcept; + public: SHVkImageView(Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) noexcept; ~SHVkImageView(void) noexcept; SHVkImageView(SHVkImageView&& rhs) noexcept; SHVkImageView& operator=(SHVkImageView&& rhs) noexcept; + void ViewNewImage (Handle const& parent, SHImageViewDetails const& createParams) noexcept; + /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 40e24979..e4207c20 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -341,10 +341,7 @@ namespace SHADE { device->WaitIdle(); - // Resize the swapchain - swapchain->Resize(surface, windowDims.first, windowDims.second); - - renderContext.HandleResize(); + HandleResize(); } const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); @@ -387,10 +384,8 @@ namespace SHADE // If swapchain is incompatible/outdated if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) { - auto windowDims = window->GetWindowSize(); - swapchain->Resize(surface, windowDims.first, windowDims.second); - renderContext.HandleResize(); + HandleResize(); } } @@ -509,6 +504,16 @@ namespace SHADE ); } + void SHGraphicsSystem::HandleResize(void) noexcept + { + auto windowDims = window->GetWindowSize(); + + // Resize the swapchain + swapchain->Resize(surface, windowDims.first, windowDims.second); + + renderContext.HandleResize(); + } + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { window = wind; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 84dc39cd..10df44a5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -246,6 +246,8 @@ namespace SHADE /***************************************************************************/ void BuildTextures(); + void HandleResize(void) noexcept; + /*-----------------------------------------------------------------------------*/ /* Setters */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 828a83f1..27a1d604 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -480,6 +480,15 @@ namespace SHADE } } + void SHRenderGraph::HandleResize(void) noexcept + { + // resize resources + for (auto& [name, resource]: graphResources) + resource->HandleResize(); + + + } + Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept { if (nodeIndexing.contains(nodeName)) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 8b5b2212..83aeeb2c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -80,6 +80,7 @@ namespace SHADE void Generate (void) noexcept; void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; void FinaliseBatch(uint32_t frameIndex, Handle descPool); + void HandleResize (void) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index eb873b16..72dd557f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -2,9 +2,11 @@ #include "SHRenderGraphResource.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Graphics/Images/SHVkImageView.h" namespace SHADE { + /***************************************************************************/ /*! @@ -42,7 +44,9 @@ namespace SHADE */ /***************************************************************************/ SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept - : resourceType{ type } + : logicalDevice {logicalDevice} + , swapchain{ swapchain } + , resourceType{ type } , resourceFormat{ format } , images{} , imageViews{} @@ -52,10 +56,10 @@ namespace SHADE , resourceName{ name } { // If the resource type is an arbitrary image and not swapchain image - if (type != SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) { - vk::ImageAspectFlags imageAspectFlags; - vk::ImageUsageFlags usage = {}; + imageAspectFlags = vk::ImageAspectFlags{}; + usage = {}; // Check the resource type and set image usage flags and image aspect flags accordingly switch (resourceType) @@ -189,4 +193,48 @@ namespace SHADE } + void SHRenderGraphResource::HandleResize(void) noexcept + { + if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) + { + // prepare image view details + SHImageViewDetails viewDetails + { + .viewType = vk::ImageViewType::e2D, + .format = images[0]->GetImageFormat(), + .imageAspectFlags = imageAspectFlags, + .baseMipLevel = 0, + .mipLevelCount = mipLevels, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + for (uint32_t i = 0; i < images.size(); ++i) + { + images[i]->HandleResizeFramebufferImage(); + imageViews[i]->ViewNewImage(images[i], viewDetails); + } + } + else + { + // Prepare image view details + SHImageViewDetails viewDetails + { + .viewType = vk::ImageViewType::e2D, + .format = swapchain->GetSurfaceFormatKHR().format, + .imageAspectFlags = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .mipLevelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) + { + images[i] = swapchain->GetSwapchainImage(i); + imageViews[i]->ViewNewImage(images[i], viewDetails); + } + } + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index fcb16601..741acdc0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -20,6 +20,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ + // for creation/recreation + Handle logicalDevice; + + // for creation/recreation + Handle swapchain; + //! Name of the resource std::string resourceName; @@ -47,6 +53,14 @@ namespace SHADE //! Number of mipmap levels uint8_t mipLevels; + + //! image aspect flags + vk::ImageAspectFlags imageAspectFlags; + + //! usage flags + vk::ImageUsageFlags usage = {}; + + public: /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ @@ -56,6 +70,8 @@ namespace SHADE SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; + void HandleResize (void) noexcept; + friend class SHRenderGraphNode; friend class SHRenderGraph; }; From 5aee22a5e3fc06b02dcdc66ef9f029f130956a71 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sat, 1 Oct 2022 16:37:47 +0800 Subject: [PATCH 302/793] Revert "Changed some couts and asserts to use SHLOG" This reverts commit 78d13c0ab8f69e0cd37641c0e9913aed474d9e5a. --- SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp | 3 +-- SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp | 2 +- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h | 3 +-- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 517fb4b9..8921fbce 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -439,7 +439,7 @@ namespace SHADE { if ((templateIDs[i] == oID)) { - SHLOG_WARNING("Component type already owned by another component group"); + assert("This Component is owned by another group"); } } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index b0332728..bbf8d400 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -88,8 +88,7 @@ namespace SHADE if (!entityVec[eIndex]) { //There is still an entity stored there.Something went wrong - SHLOG_CRITICAL("FATAL ERROR: Entity Creation error. Entity index conflict.") - + assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); } //Reset it to a newly constructed entity diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index fac97339..f32ab2c4 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -119,7 +119,7 @@ namespace SHADE if (!entityVec[eIndex]) { //There is still an entity stored there.Something went wrong - SHLOG_CRITICAL("FATAL ERROR: Entity Creation error. Entity index conflict.") + assert("FATAL ERROR: Entity Creation error. Entity Index Conflict"); } //Reset it to a newly constructed entity diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp index 35269863..551233db 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp @@ -29,7 +29,7 @@ namespace SHADE { system.second->Init(); #ifdef _DEBUG - SHLOG_INFO("{} Init", system.first); + std::cout << system.first << " Init" << std::endl; #endif } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index 25ff0c15..995a1cf5 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -94,8 +94,7 @@ namespace SHADE if (systemContainer.find(id) == systemContainer.end()) { - SHLOG_WARNING("System Manager warning: System Version {} does not exist. Returning as nullptr", version) - + std::cout << "System Manager error: System Version " << version << " does not exit." << std::endl; return nullptr; } From 374f1a961dc3a2e6ad4ef28be6aa7581a74439b6 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 1 Oct 2022 16:50:50 +0800 Subject: [PATCH 303/793] Integrated rigidbodies into physics system --- SHADE_Application/src/Scenes/SBTestScene.cpp | 122 ++++++++------- .../Components/SHRigidBodyComponent.cpp | 3 + SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 38 ++++- SHADE_Engine/src/Physics/SHPhysicsObject.h | 12 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 148 +++++++++--------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 5 +- 6 files changed, 180 insertions(+), 148 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 556ff3ac..ce52be95 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -10,6 +10,7 @@ #include "Scripting/SHScriptEngine.h" #include "Math/Transform/SHTransformComponent.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Physics/Components/SHRigidBodyComponent.h" #include "Assets/SHAssetManager.h" @@ -75,83 +76,86 @@ namespace Sandbox customMat->SetProperty("data.alpha", 0.1f); // Create Stress Test Objects - static const SHVec3 TEST_OBJ_SCALE = { 0.05f, 0.05f, 0.05f }; - constexpr int NUM_ROWS = 100; - constexpr int NUM_COLS = 100; - static const SHVec3 TEST_OBJ_SPACING = { 0.05f, 0.05f, 0.05f }; - static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; + //static const SHVec3 TEST_OBJ_SCALE = { 0.05f, 0.05f, 0.05f }; + //constexpr int NUM_ROWS = 100; + //constexpr int NUM_COLS = 100; + //static const SHVec3 TEST_OBJ_SPACING = { 0.05f, 0.05f, 0.05f }; + //static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; - for (int y = 0; y < NUM_ROWS; ++y) - for (int x = 0; x < NUM_COLS; ++x) - { - auto entity = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); + //for (int y = 0; y < NUM_ROWS; ++y) + // for (int x = 0; x < NUM_COLS; ++x) + // { + // auto entity = SHEntityManager::CreateEntity(); + // auto& renderable = *SHComponentManager::GetComponent_s(entity); + // auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = handles.front(); - renderable.SetMaterial(customMat); + // //renderable.Mesh = handles.front(); + // renderable.Mesh = CUBE_MESH; + // renderable.SetMaterial(customMat); - if (y == 50) - renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); + // if (y == 50) + // renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); - //Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ - x * TEST_OBJ_SPACING.x, - y * TEST_OBJ_SPACING.y, - 0.0f - }); - //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); - //transform.SetWorldRotation(3.14159265f * 1.5f, -3.14159265f / 2.0f, 0.0f); - transform.SetLocalScale(TEST_OBJ_SCALE); + // //Set initial positions + // transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ + // x * TEST_OBJ_SPACING.x, + // y * TEST_OBJ_SPACING.y, + // 0.0f + // }); + // //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); + // //transform.SetWorldRotation(3.14159265f * 1.5f, -3.14159265f / 2.0f, 0.0f); + // transform.SetLocalScale(TEST_OBJ_SCALE); - stressTestObjects.emplace_back(entity); - } + // stressTestObjects.emplace_back(entity); + // } - auto raccoonSpin = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); - auto& transform = *SHComponentManager::GetComponent_s(raccoonSpin); + //auto raccoonSpin = SHEntityManager::CreateEntity(); + //auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); + //auto& transform = *SHComponentManager::GetComponent_s(raccoonSpin); - renderable.Mesh = handles.front(); - renderable.SetMaterial(customMat); - renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); - renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); - - transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); - transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - - //auto entity = SHEntityManager::CreateEntity(); - //auto& renderable = *SHComponentManager::GetComponent_s(entity); - //auto& transform = *SHComponentManager::GetComponent_s(entity); - - //renderable.Mesh = handles.back(); + //renderable.Mesh = handles.front(); //renderable.SetMaterial(customMat); + //renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + //renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); + //renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); - //transform.SetLocalScale(TEST_OBJ_SCALE); - //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); + //transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); + //transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); + + auto entity = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); + auto& rb = *SHComponentManager::GetComponent_s(entity); + + renderable.Mesh = CUBE_MESH; + renderable.SetMaterial(customMat); + + transform.SetLocalScale(SHVec3::One * 0.25f); + transform.SetWorldPosition({0.0f, 2.0f, -1.0f}); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); - //auto& testObjRenderable = *SHComponentManager::GetComponent_s(testObj); + //auto& testObjRenderable = *SHComponentManager::GetComponent(testObj); //testObjRenderable.Mesh = CUBE_MESH; //testObjRenderable.SetMaterial(matInst); - SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); - auto raccoonShowcase = SHEntityManager::CreateEntity(); - auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); - auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + //SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); + //scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); - renderableShowcase.Mesh = handles.front(); - renderableShowcase.SetMaterial(customMat); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + //auto raccoonShowcase = SHEntityManager::CreateEntity(); + //auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + //auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); - transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); - transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); + //renderableShowcase.Mesh = handles.front(); + //renderableShowcase.SetMaterial(customMat); + //renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + //renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); + //renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + + //transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); + //transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); + //scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); } void SBTestScene::Update(float dt) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 04cb00dd..e2cd1e4b 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -37,6 +37,9 @@ namespace SHADE // Set default flags: Gravity & Sleeping enabled flags |= 1U << 0; flags |= 1U << 1; + + // Set all dirty flags to true + dirtyFlags = 1023; } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 325d860f..f489624d 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -79,14 +79,40 @@ namespace SHADE } /*-----------------------------------------------------------------------------------*/ - /* Public Function Member Definitions */ + /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHPhysicsObject::SetPosition(const SHVec3& position) const noexcept + { + const rp3d::Vector3 RP3D_POS { position.x, position.y, position.z }; - /*-----------------------------------------------------------------------------------*/ - /* Private Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ + rp3d::Transform rp3dTF; + rp3dTF.setPosition(RP3D_POS); + rp3dTF.setOrientation(rp3dBody->getTransform().getOrientation()); + + rp3dBody->setTransform(rp3dTF); + } + + void SHPhysicsObject::SetOrientation(const SHQuaternion& orientation) const noexcept + { + const rp3d::Quaternion RP3D_ORIENTATION { orientation.x, orientation.y, orientation.z, orientation.w }; + + rp3d::Transform rp3dTF; + rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); + rp3dTF.setOrientation(RP3D_ORIENTATION); + + rp3dBody->setTransform(rp3dTF); + } + + void SHPhysicsObject::SetRotation(const SHVec3& rotation) const noexcept + { + const rp3d::Quaternion RP3D_ORIENTATION = rp3d::Quaternion::fromEulerAngles( rotation.x, rotation.y, rotation.z ); + + rp3d::Transform rp3dTF; + rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); + rp3dTF.setOrientation(RP3D_ORIENTATION); + + rp3dBody->setTransform(rp3dTF); + } - - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index e0f0f38f..cd9be57b 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -55,14 +55,18 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] virtual SHVec3 GetPosition () const noexcept; - [[nodiscard]] virtual SHQuaternion GetOrientation () const noexcept; - [[nodiscard]] virtual SHVec3 GetRotation () const noexcept; + [[nodiscard]] SHVec3 GetPosition () const noexcept; + [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; /*---------------------------------------------------------------------------------*/ - /* Function Members */ + /* Setter Functions */ /*---------------------------------------------------------------------------------*/ + void SetPosition (const SHVec3& position) const noexcept; + void SetOrientation (const SHQuaternion& orientation) const noexcept; + void SetRotation (const SHVec3& rotation) const noexcept; + private: /*---------------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 9be8a5ef..59d915f9 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -27,7 +27,7 @@ namespace SHADE SHPhysicsSystem::SHPhysicsSystem() : interpolationFactor { 0.0 } - , fixedDT { 1.0 / 60.0 } + , fixedDT { 60.0 } , world { nullptr } {} @@ -204,7 +204,11 @@ namespace SHADE // Check if entity is already a physics object auto* physicsObject = GetPhysicsObject(entityID); if (!physicsObject) + { physicsObject = &(map.emplace(entityID, SHPhysicsObject{}).first->second); + physicsObject->entityID = entityID; + } + // Get entity transform auto const* SHADE_TF = SHComponentManager::GetComponent_s(entityID); @@ -292,9 +296,23 @@ namespace SHADE { auto* system = reinterpret_cast(GetSystem()); + // Get dense arrays + auto& rbDense = SHComponentManager::GetDense(); + auto& cDense = SHComponentManager::GetDense(); + // Update bodies and colliders if component is dirty - const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - system->SyncComponents(sceneGraph); + system->SyncRigidBodyComponents(rbDense); + + // Sync transforms + for (auto& physicsObject : system->map | std::views::values) + { + const auto* TF = SHComponentManager::GetComponent(physicsObject.entityID); + if (TF->HasChanged()) + { + physicsObject.SetPosition(TF->GetWorldPosition()); + physicsObject.SetRotation(TF->GetWorldRotation()); + } + } } void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept @@ -322,8 +340,7 @@ namespace SHADE auto* system = reinterpret_cast(GetSystem()); // Interpolate transforms for rendering - const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - system->SyncTransforms(sceneGraph); + system->SyncTransforms(); // TODO(Diren): Handle trigger messages for scripting } @@ -344,89 +361,67 @@ namespace SHADE return &(it->second); } - void SHPhysicsSystem::SyncComponents(const SHSceneGraph& sceneGraph) noexcept + void SHPhysicsSystem::SyncRigidBodyComponents(std::vector& denseArray) noexcept { - static const auto SYNC_COMPONENTS = [&](SHSceneNode* node) + if (denseArray.empty()) + return; + + for (auto& comp : denseArray) { - const EntityID ENTITY_ID = node->GetEntityID(); + const EntityID ENTITY_ID = comp.GetEID(); - // Get physics object + // Get physicsObject auto const* physicsObject = GetPhysicsObject(ENTITY_ID); - if (!physicsObject) - return; - const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); - const bool NODE_ACTIVE = node->IsActive(); + const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); + // TODO(Diren): Check if active in hierarchy + const bool COMPONENT_ACTIVE = comp.isActive; - // Sync rigid body - if (physicsObject->isRigidBody) + if (RP3D_ACTIVE != COMPONENT_ACTIVE) + physicsObject->rp3dBody->setIsActive(COMPONENT_ACTIVE); + + if (!COMPONENT_ACTIVE) + continue; + + if (comp.dirtyFlags > 0) { - auto* rbComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if (rbComponent->dirtyFlags > 0) - { - SyncRB(physicsObject, rbComponent); - rbComponent->dirtyFlags = 0; - } - - - // Sync active states - const bool SHADE_ACTIVE = NODE_ACTIVE && rbComponent->isActive; - if (SHADE_ACTIVE != RP3D_ACTIVE) - physicsObject->rp3dBody->setIsActive(SHADE_ACTIVE); + SyncRB(physicsObject, &comp); + comp.dirtyFlags = 0; } - - // Sync colliders - if (physicsObject->hasColliders) - { - auto const* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - - } - - // Sync transforms - auto const* tfComponent = SHComponentManager::GetComponent(ENTITY_ID); - if (tfComponent->HasChanged()) - { - const SHVec3& SHADE_POS = tfComponent->GetWorldPosition(); - const SHVec3& SHADE_ROT = tfComponent->GetWorldRotation(); - - const rp3d::Vector3 RP3D_POS { SHADE_POS.x, SHADE_POS.y, SHADE_POS.z }; - const rp3d::Quaternion RP3D_ROT = rp3d::Quaternion::fromEulerAngles(SHADE_ROT.x, SHADE_ROT.y, SHADE_ROT.z); - - physicsObject->rp3dBody->setTransform(rp3d::Transform{ RP3D_POS, RP3D_ROT }); - } - }; - - sceneGraph.Traverse(SYNC_COMPONENTS); + } } - void SHPhysicsSystem::SyncTransforms(const SHSceneGraph& sceneGraph) noexcept + void SHPhysicsSystem::SyncTransforms() noexcept { - static const auto SYNC_TRANSFORMS = [&](SHSceneNode* node) + for (auto& pair : map) { - const EntityID ENTITY_ID = node->GetEntityID(); - - // Get physics object - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - if (!physicsObject) - return; - - auto* tfComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + const EntityID ENTITY_ID = pair.first; + SHPhysicsObject& physicsObject = pair.second; rp3d::Vector3 rp3dPos; rp3d::Quaternion rp3dRot; - const rp3d::Transform CURRENT_TF = physicsObject->rp3dBody->getTransform(); + const rp3d::Transform CURRENT_TF = physicsObject.rp3dBody->getTransform(); // Check if transform should be interpolated - auto const* rbComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if (rbComponent && rbComponent->IsInterpolating()) + + if (physicsObject.isRigidBody) { - const rp3d::Transform PREV_TF = physicsObject->prevTransform; - const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); + auto const* rbComponent = SHComponentManager::GetComponent(ENTITY_ID); + if (rbComponent->IsInterpolating()) + { + const rp3d::Transform PREV_TF = physicsObject.prevTransform; + const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); - rp3dPos = INTERPOLATED_TF.getPosition(); - rp3dRot = INTERPOLATED_TF.getOrientation(); + rp3dPos = INTERPOLATED_TF.getPosition(); + rp3dRot = INTERPOLATED_TF.getOrientation(); + } + else + { + rp3dPos = CURRENT_TF.getPosition(); + rp3dRot = CURRENT_TF.getOrientation(); + } } else { @@ -438,14 +433,13 @@ namespace SHADE const SHVec3 SHADE_POS = SHVec3{ rp3dPos.x, rp3dPos.y, rp3dPos.z }; const SHVec3 SHADE_ROT = SHQuaternion{ rp3dRot.x, rp3dRot.y, rp3dRot.z, rp3dRot.w }.ToEuler(); + auto* tfComponent = SHComponentManager::GetComponent(ENTITY_ID); tfComponent->SetWorldPosition(SHADE_POS); tfComponent->SetWorldRotation(SHADE_ROT); // Cache transforms - physicsObject->prevTransform = CURRENT_TF; - }; - - sceneGraph.Traverse(SYNC_TRANSFORMS); + physicsObject.prevTransform = CURRENT_TF; + } } void SHPhysicsSystem::SyncRB(SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept @@ -527,9 +521,9 @@ namespace SHADE { const rp3d::Vector3 CONSTRAINTS { - rbFlags & 1U << 2 ? 1.0f : 0.0f, - rbFlags & 1U << 3 ? 1.0f : 0.0f, - rbFlags & 1U << 4 ? 1.0f : 0.0f + rbFlags & 1U << 2 ? 0.0f : 1.0f, + rbFlags & 1U << 3 ? 0.0f : 1.0f, + rbFlags & 1U << 4 ? 0.0f : 1.0f }; @@ -540,9 +534,9 @@ namespace SHADE { const rp3d::Vector3 CONSTRAINTS { - rbFlags & 1U << 5 ? 1.0f : 0.0f, - rbFlags & 1U << 6 ? 1.0f : 0.0f, - rbFlags & 1U << 7 ? 1.0f : 0.0f + rbFlags & 1U << 5 ? 0.0f : 1.0f, + rbFlags & 1U << 6 ? 0.0f : 1.0f, + rbFlags & 1U << 7 ? 0.0f : 1.0f }; rp3dRigidBody->setAngularLockAxisFactor(CONSTRAINTS); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index af615f35..dbf0a597 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -183,8 +183,9 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void SyncComponents (const SHSceneGraph& sceneGraph) noexcept; - void SyncTransforms (const SHSceneGraph& sceneGraph) noexcept; + void SyncRigidBodyComponents (std::vector& denseArray) noexcept; + void SyncColliderComponents (std::vector& denseArray) noexcept; + void SyncTransforms () noexcept; // TODO(Diren): Trigger handling static void SyncRB (SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept; From aef3e4ef1affbcf63f365d426f17bfcfc185850b Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 1 Oct 2022 17:04:07 +0800 Subject: [PATCH 304/793] Update SBApplication.cpp --- SHADE_Application/src/Application/SBApplication.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8fbf1858..606ab4e2 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -58,7 +58,6 @@ namespace Sandbox // TODO(Diren): Create Physics System here SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::CreateSystem(); SHADE::SHSystemManager::CreateSystem(); // Create Routines From 3c58a538ae12afef869eb4129513f56a486db580 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 1 Oct 2022 18:02:27 +0800 Subject: [PATCH 305/793] Mouse Vel & UpdateInput called from SBApplication --- SHADE_Application/src/Application/SBApplication.cpp | 1 + SHADE_Engine/src/Input/SHInputManager.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 606ab4e2..fc3e02ad 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -118,6 +118,7 @@ namespace Sandbox while (!window.WindowShouldClose()) { SHFrameRateController::UpdateFRC(); + SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); SHSceneManager::UpdateSceneManager(); SHSceneManager::SceneUpdate(1/60.0f); //#ifdef SHEDITOR diff --git a/SHADE_Engine/src/Input/SHInputManager.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp index 619afec0..04f2b02e 100644 --- a/SHADE_Engine/src/Input/SHInputManager.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -112,6 +112,10 @@ namespace SHADE mouseScreenX = p.x; mouseScreenY = p.y; + //Velocity + mouseVelocityX = static_cast(mouseScreenX - mouseScreenXLast) / dt; + mouseVelocityY = static_cast(mouseScreenY - mouseScreenYLast) / dt; + //Mouse wheel vertical delta updating mouseWheelVerticalDelta = 0; mouseWheelVerticalDelta = mouseWheelVerticalDeltaPoll; From a6e17847bf54968818084a5e935b1d01008890cf Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 1 Oct 2022 18:58:13 +0800 Subject: [PATCH 306/793] Warning disables Remove SDL hint that gave warning (it was unnecessary anyway) --- SHADE_Application/premake5.lua | 9 ++++++++- SHADE_Application/src/Application/SBApplication.cpp | 1 - SHADE_Engine/premake5.lua | 9 ++++++++- SHADE_Managed/premake5.lua | 6 ++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 2119808d..a02b7f2a 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -67,9 +67,16 @@ project "SHADE_Application" disablewarnings { - "4251" + "4251", + "26812", + "26439", + "26451", + "26437", + "4275" } + linkoptions { "-IGNORE:4006" } + warnings 'Extra' filter "configurations:Debug" diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index b982557c..5e57e6a5 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -14,7 +14,6 @@ #include #include #include -#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN 1 #include #include "Scripting/SHScriptEngine.h" diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index f11ccf79..5481fa7d 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -76,8 +76,15 @@ project "SHADE_Engine" disablewarnings { - "4251" + "4251", + "26812", + "26439", + "26451", + "26437", + "4275" } + + linkoptions { "-IGNORE:4006" } defines { diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index a7b20144..9724c296 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -61,6 +61,12 @@ project "SHADE_Managed" "MultiProcessorCompile" } + disablewarnings + { + "4275" + } + + dependson { "yaml-cpp", From b3d15b6a39ef9c9b97da4790d81d3a20049cf50d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 1 Oct 2022 20:34:23 +0800 Subject: [PATCH 307/793] Added WIP UndoRedoStack --- SHADE_Managed/src/Editor/Editor.cxx | 2 +- SHADE_Managed/src/Editor/UndoRedoStack .cxx | 49 +++++++++++++++++++++ SHADE_Managed/src/Editor/UndoRedoStack.hxx | 48 ++++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 SHADE_Managed/src/Editor/UndoRedoStack .cxx create mode 100644 SHADE_Managed/src/Editor/UndoRedoStack.hxx diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 629c9e65..73d52d14 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -3,7 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Sep 27, 2022 -\brief Contains the definition of the functions for the ScriptStore managed +\brief Contains the definition of the functions for the Editor managed static class. Note: This file is written in C++17/CLI. diff --git a/SHADE_Managed/src/Editor/UndoRedoStack .cxx b/SHADE_Managed/src/Editor/UndoRedoStack .cxx new file mode 100644 index 00000000..e3fdc2f0 --- /dev/null +++ b/SHADE_Managed/src/Editor/UndoRedoStack .cxx @@ -0,0 +1,49 @@ +/************************************************************************************//*! +\file UndoRedoStack.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 29, 2022 +\brief Contains the definition of the functions for the UndoRedoStack managed + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "UndoRedoStack.hxx" +// External Dependencies +#include "Editor/SHEditorUI.h" +// Project Headers + +namespace SHADE +{ + void UndoRedoStack::Add(Command command) + { + // Erase any other actions ahead of the current action + if (latestActionIndex < commandStack->Count - 1) + { + commandStack->RemoveRange(latestActionIndex + 1, commandStack->Count - latestActionIndex); + } + + // Add the command + commandStack->Add(command); + + // Increment latest command + ++latestActionIndex; + } + + void UndoRedoStack::Undo() + { + + } + + void UndoRedoStack::Redo() + { + + } +} diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx new file mode 100644 index 00000000..2db3cacb --- /dev/null +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -0,0 +1,48 @@ +/************************************************************************************//*! +\file UndoRedoStack.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 29, 2022 +\brief Contains the definition of the managed UndoRedoStack class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + ///

    + /// Class that is able to store a stack of actions that can be done and redone. + /// + private ref class UndoRedoStack sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + value struct Command + { + public: + System::Action^ UndoAction; + System::Action^ RedoAction; + }; + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + void Add(Command command); + void Undo(); + void Redo(); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + int latestActionIndex = -1; + System::Collections::Generic::List^ commandStack = gcnew System::Collections::Generic::List(); + }; +} From c5efefcf4f3f4140f4226eebbdd01f6b9f830c7e Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 1 Oct 2022 21:18:54 +0800 Subject: [PATCH 308/793] Editor warning fixes --- .../src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp | 2 +- SHADE_Engine/src/Editor/IconsMaterialDesign.h | 2 +- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index f787d4db..25cd5a6a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -114,7 +114,7 @@ namespace SHADE auto* entity = SHEntityManager::GetEntityByID(currentNode->GetEntityID()); //Draw Node - bool isNodeOpen = ImGui::TreeNodeEx((void*)eid, nodeFlags, "%u: %s", EntityHandleGenerator::GetIndex(eid), entity->name.c_str()); + bool isNodeOpen = ImGui::TreeNodeEx(reinterpret_cast(entity), nodeFlags, "%u: %s", EntityHandleGenerator::GetIndex(eid), entity->name.c_str()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); //Check For Begin Drag diff --git a/SHADE_Engine/src/Editor/IconsMaterialDesign.h b/SHADE_Engine/src/Editor/IconsMaterialDesign.h index 68373237..3f15892b 100644 --- a/SHADE_Engine/src/Editor/IconsMaterialDesign.h +++ b/SHADE_Engine/src/Editor/IconsMaterialDesign.h @@ -843,7 +843,7 @@ #define ICON_MD_FLIP_TO_FRONT "\xee\xa2\x83" // U+e883 #define ICON_MD_FLOOD "\xee\xaf\xa6" // U+ebe6 #define ICON_MD_FLOURESCENT "\xee\xb0\xb1" // U+ec31 -#define ICON_MD_FLOURESCENT "\xef\x80\x8d" // U+f00d +#define ICON_MD_FLOURESCENT2 "\xef\x80\x8d" // U+f00d #define ICON_MD_FLUORESCENT "\xee\xb0\xb1" // U+ec31 #define ICON_MD_FLUTTER_DASH "\xee\x80\x8b" // U+e00b #define ICON_MD_FMD_BAD "\xef\x80\x8e" // U+f00e diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 88cea814..8d2adcc6 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -327,7 +327,7 @@ namespace SHADE ImGui::PushID(fieldLabel.c_str()); ImGui::Text(fieldLabel.c_str()); ImGui::SameLine(); - if (edited = ImGui::Combo("##Combo", &selected, list.data(), list.size())) + if (edited = ImGui::Combo("##Combo", &selected, list.data(), static_cast(list.size()))) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), selected, set)), false); } From 1a725c24e26d0feb7a3d7cb726ab93cd61755291 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 1 Oct 2022 21:25:22 +0800 Subject: [PATCH 309/793] Stored renderpass attachement information in SHVkRenderpass --- .../RenderGraph/SHRenderGraphNode.cpp | 5 ++ .../Graphics/RenderGraph/SHRenderGraphNode.h | 1 + .../Graphics/Renderpass/SHVkRenderpass.cpp | 57 ++++++++++++------- .../src/Graphics/Renderpass/SHVkRenderpass.h | 8 ++- 4 files changed, 50 insertions(+), 21 deletions(-) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index b981225a..551e90fc 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -56,6 +56,11 @@ namespace SHADE } } + void SHRenderGraphNode::HandleResize(void) noexcept + { + + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 59b20271..c713f402 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -81,6 +81,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ void CreateRenderpass(void) noexcept; void CreateFramebuffer(void) noexcept; + void HandleResize (void) noexcept; public: /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp index 29de5954..349c507e 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp @@ -30,7 +30,10 @@ namespace SHADE SHVkRenderpass::SHVkRenderpass(Handle const& inLogicalDeviceHdl, std::span const vkDescriptions, std::vector const& subpasses) noexcept : logicalDeviceHdl {inLogicalDeviceHdl} , numAttDescs {static_cast(vkDescriptions.size())} + , vkSubpassDescriptions{} + , vkSubpassDeps{} , clearColors{} + , vkAttachmentDescriptions{} { for (uint32_t i = 0; i < vkDescriptions.size(); ++i) { @@ -42,7 +45,6 @@ namespace SHADE vk::RenderPassCreateInfo renderPassCreateInfo{}; - std::vector subpassDeps; // For validating the depth ref auto isValidDepthRef = [&](vk::AttachmentReference const& depthRef) -> bool @@ -50,13 +52,16 @@ namespace SHADE return !(depthRef.attachment == static_cast (-1) && depthRef.layout == vk::ImageLayout::eUndefined); }; + for (uint32_t i = 0; i < vkDescriptions.size(); ++i) + vkAttachmentDescriptions[i] = vkDescriptions[i]; + uint32_t subpassIndex = 0; if (!subpasses.empty()) { for (auto& subpass : subpasses) { - subpassDescriptions.emplace_back(); - auto& spDesc = subpassDescriptions.back(); + vkSubpassDescriptions.emplace_back(); + auto& spDesc = vkSubpassDescriptions.back(); spDesc.pColorAttachments = subpass.colorRefs.data(); spDesc.colorAttachmentCount = static_cast(subpass.colorRefs.size()); @@ -88,18 +93,18 @@ namespace SHADE }; // Push a new dependency - subpassDeps.push_back(dependency); + vkSubpassDeps.push_back(dependency); ++subpassIndex; } // Renderpass create info for render pass creation - renderPassCreateInfo.attachmentCount = static_cast(vkDescriptions.size()); - renderPassCreateInfo.pAttachments = vkDescriptions.data(); - renderPassCreateInfo.subpassCount = static_cast(subpassDescriptions.size()); - renderPassCreateInfo.pSubpasses = subpassDescriptions.data(); - renderPassCreateInfo.dependencyCount = static_cast(subpassDeps.size()); - renderPassCreateInfo.pDependencies = subpassDeps.data(); + renderPassCreateInfo.attachmentCount = static_cast(vkAttachmentDescriptions.size()); + renderPassCreateInfo.pAttachments = vkAttachmentDescriptions.data(); + renderPassCreateInfo.subpassCount = static_cast(vkSubpassDescriptions.size()); + renderPassCreateInfo.pSubpasses = vkSubpassDescriptions.data(); + renderPassCreateInfo.dependencyCount = static_cast(vkSubpassDeps.size()); + renderPassCreateInfo.pDependencies = vkSubpassDeps.data(); } // No subpasses passed in, create a default one. @@ -172,6 +177,8 @@ namespace SHADE : logicalDeviceHdl{ inLogicalDeviceHdl } , numAttDescs{ static_cast(vkDescriptions.size()) } , clearColors{} + , vkSubpassDescriptions{ } + , vkSubpassDeps{ } { for (uint32_t i = 0; i < vkDescriptions.size(); ++i) { @@ -181,18 +188,24 @@ namespace SHADE clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; } - subpassDescriptions.resize (spDescs.size()); - for (uint32_t i = 0; i < subpassDescriptions.size(); ++i) - { - subpassDescriptions[i] = spDescs[i]; - } + vkAttachmentDescriptions.resize(vkDescriptions.size()); + for (uint32_t i = 0; i < vkDescriptions.size(); ++i) + vkAttachmentDescriptions[i] = vkDescriptions[i]; + + vkSubpassDescriptions.resize (spDescs.size()); + for (uint32_t i = 0; i < vkSubpassDescriptions.size(); ++i) + vkSubpassDescriptions[i] = spDescs[i]; + + vkSubpassDeps.resize(spDeps.size()); + for (uint32_t i = 0; i < vkSubpassDeps.size(); ++i) + vkSubpassDeps[i] = spDeps[i]; vk::RenderPassCreateInfo renderPassCreateInfo{}; renderPassCreateInfo.attachmentCount = static_cast(vkDescriptions.size()); renderPassCreateInfo.pAttachments = vkDescriptions.data(); - renderPassCreateInfo.subpassCount = static_cast(subpassDescriptions.size()); - renderPassCreateInfo.pSubpasses = subpassDescriptions.data(); + renderPassCreateInfo.subpassCount = static_cast(vkSubpassDescriptions.size()); + renderPassCreateInfo.pSubpasses = vkSubpassDescriptions.data(); renderPassCreateInfo.dependencyCount = static_cast(spDeps.size()); renderPassCreateInfo.pDependencies = spDeps.data(); @@ -210,8 +223,10 @@ namespace SHADE SHVkRenderpass::SHVkRenderpass(SHVkRenderpass&& rhs) noexcept : vkRenderpass {rhs.vkRenderpass} , logicalDeviceHdl {rhs.logicalDeviceHdl} - , subpassDescriptions {std::move (rhs.subpassDescriptions)} - , clearColors {std::move (rhs.clearColors)} + , vkSubpassDescriptions{ std::move(rhs.vkSubpassDescriptions) } + , vkSubpassDeps{ std::move(rhs.vkSubpassDeps) } + , clearColors{ std::move(rhs.clearColors) } + , vkAttachmentDescriptions{ std::move(rhs.vkAttachmentDescriptions) } { rhs.vkRenderpass = VK_NULL_HANDLE; } @@ -224,8 +239,10 @@ namespace SHADE vkRenderpass = rhs.vkRenderpass; logicalDeviceHdl = rhs.logicalDeviceHdl; - subpassDescriptions = std::move(rhs.subpassDescriptions); + vkSubpassDescriptions = std::move(rhs.vkSubpassDescriptions); + vkSubpassDeps = std::move(rhs.vkSubpassDeps); clearColors = std::move(rhs.clearColors); + vkAttachmentDescriptions = std::move(rhs.vkAttachmentDescriptions); rhs.vkRenderpass = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index b0ae7445..a2799eb7 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -29,7 +29,13 @@ namespace SHADE Handle logicalDeviceHdl; //! Container of subpass information used to construct subpasses - std::vector subpassDescriptions; + std::vector vkSubpassDescriptions; + + //! Container of subpass dependencies used to create renderpass + std::vector vkSubpassDeps; + + //! Attachment descriptions + std::vector vkAttachmentDescriptions; //! Clear colors for the color and depth std::array clearColors; From 8a3a08986bd0faa54c01431850c9d5e2404b1eb3 Mon Sep 17 00:00:00 2001 From: Glence Date: Sat, 1 Oct 2022 21:29:40 +0800 Subject: [PATCH 310/793] fix audiosystem warnings --- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 4 ++-- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 2482fe8e..c3c7ef03 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -90,7 +90,7 @@ namespace SHADE //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); } - void SHADE::SHAudioSystem::Run(float dt) + void SHADE::SHAudioSystem::Run(double dt) { static_cast(dt); //if (GetKeyState(VK_SPACE) & 0x8000) @@ -417,7 +417,7 @@ namespace SHADE int instanceCount = 0; event.second->getInstanceCount(&instanceCount); std::vector instances(instanceCount); - event.second->getInstanceList(instances.data(), instances.size(), &instanceCount); + event.second->getInstanceList(instances.data(), static_cast(instances.size()), &instanceCount); for (auto const& instance : instances) { instance->setPaused(pause); diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 04fad1f0..f19fcc3b 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -50,7 +50,7 @@ namespace SHADE ~SHAudioSystem(); void Init(); - void Run(float dt); + void Run(double dt); class SH_API AudioRoutine final : public SHSystemRoutine { public: From f717b61c88743cc9471b99425b0a2b2601f392df Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 1 Oct 2022 22:56:15 +0800 Subject: [PATCH 311/793] Added undo and redo support for script changes in the inspector --- SHADE_Engine/src/Editor/Command/SHCommand.hpp | 22 +++++- .../src/Editor/Command/SHCommandManager.cpp | 5 ++ .../src/Editor/Command/SHCommandManager.h | 4 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 22 ++++++ SHADE_Engine/src/Scripting/SHScriptEngine.h | 13 ++- SHADE_Managed/premake5.lua | 3 +- SHADE_Managed/src/Editor/Editor.cxx | 79 ++++++++++++++----- SHADE_Managed/src/Editor/Editor.hxx | 29 +++++-- .../{UndoRedoStack .cxx => UndoRedoStack.cxx} | 30 +++++-- SHADE_Managed/src/Editor/UndoRedoStack.hxx | 41 ++++++++-- 10 files changed, 204 insertions(+), 44 deletions(-) rename SHADE_Managed/src/Editor/{UndoRedoStack .cxx => UndoRedoStack.cxx} (56%) diff --git a/SHADE_Engine/src/Editor/Command/SHCommand.hpp b/SHADE_Engine/src/Editor/Command/SHCommand.hpp index ae8834e9..7a526506 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommand.hpp +++ b/SHADE_Engine/src/Editor/Command/SHCommand.hpp @@ -5,9 +5,13 @@ //#==============================================================# #include +#include "SH_API.h" +#include "Scripting/SHScriptEngine.h" +#include "ECS_Base/Managers/SHSystemManager.h" + namespace SHADE { - class SHBaseCommand + class SH_API SHBaseCommand { public: virtual ~SHBaseCommand() = default; @@ -48,4 +52,20 @@ namespace SHADE T newValue; SetterFunction set; }; + + class SH_API SHCLICommand : SHBaseCommand + { + public: + SHCLICommand() = default; + void Execute() override + { + SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->RedoScriptInspectorChanges(); + } + void Undo() override + { + SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->UndoScriptInspectorChanges(); + } + }; }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp index 67d6c2ee..ee2d316d 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp @@ -27,6 +27,11 @@ namespace SHADE } } + void SHCommandManager::RegisterCommand(CommandPtr commandPtr) + { + undoStack.push(commandPtr); + } + void SHCommandManager::UndoCommand() { if (undoStack.empty()) diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.h b/SHADE_Engine/src/Editor/Command/SHCommandManager.h index 3ea42740..9152c3cb 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.h +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.h @@ -9,10 +9,11 @@ //|| SHADE Includes || //#==============================================================# #include "SHCommand.hpp" +#include "SH_API.h" namespace SHADE { - class SHCommandManager + class SH_API SHCommandManager { public: //#==============================================================# @@ -22,6 +23,7 @@ namespace SHADE using CommandStack = std::stack; static void PerformCommand(CommandPtr commandPtr, bool const& overrideValue = false); + static void RegisterCommand(CommandPtr commandPtr); static void UndoCommand(); static void RedoCommand(); static std::size_t GetUndoStackSize(); diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index d65eaf64..65f445a6 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -153,6 +153,16 @@ namespace SHADE csEditorRenderScripts(entity); } + void SHScriptEngine::UndoScriptInspectorChanges() const + { + csEditorUndo(); + } + + void SHScriptEngine::RedoScriptInspectorChanges() const + { + csEditorRedo(); + } + /*-----------------------------------------------------------------------------------*/ /* Static Utility Functions */ /*-----------------------------------------------------------------------------------*/ @@ -400,6 +410,18 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".Editor", "RenderScriptsInInspector" ); + csEditorUndo = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".Editor", + "Undo" + ); + csEditorRedo = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".Editor", + "Redo" + ); } void SHScriptEngine::registerEvents() diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 710421e8..0d2c0c96 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -171,6 +171,14 @@ namespace SHADE ///

    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 #include #include +#include + namespace SHADE { SHAudioSystem::SHAudioSystem() @@ -79,18 +81,21 @@ namespace SHADE LoadBank("../../Assets/Audio/Master.bank"); LoadBank("../../Assets/Audio/Master.strings.bank"); - LoadBank("../../Assets/Audio/Music.bank"); - LoadBank("../../Assets/Audio/SFX.bank"); + //LoadBank("../../Assets/Audio/Music.bank"); + LoadBank("../../Assets/Audio/footsteps.bank"); //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); //clip->Play(); - //PlayEventOnce("event:/Characters/sfx_footsteps_human"); - PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); + //PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); + //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); } void SHADE::SHAudioSystem::Run(float dt) { - static_cast(dt); + static_cast(dt); + if (GetKeyState(VK_SPACE) & 0x8000) + PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); + fmodStudioSystem->update(); if (!denseListener->empty()) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 44780784..247b4b8c 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -42,6 +42,11 @@ namespace SHADE SHEditorWindow::Update(); if (Begin()) { + if(ImGui::Button("AUDIO")) + { + if(auto audioSystem = SHSystemManager::GetSystem()) + audioSystem->PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); + } if (!SHEditor::selectedEntities.empty()) { EntityID const& eid = SHEditor::selectedEntities[0]; From 43ad883bdbe5a0a06b0d70cf461fc8829b4f5ec5 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 18:08:49 +0800 Subject: [PATCH 274/793] removing unnecessary creation of cpmponent --- SHADE_Application/src/Application/SBApplication.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 07bcc640..6ca2abcb 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -26,7 +26,6 @@ #include "Input/SHInputManagerSystem.h" #include "FRC/SHFramerateController.h" #include "AudioSystem/SHAudioSystem.h" -#include "AudioSystem/SHAudioListenerComponent.h" #include "Scenes/SBTestScene.h" #include "Math/Transform/SHTransformComponent.h" @@ -88,8 +87,6 @@ namespace Sandbox //TODO: REMOVE AFTER PRESENTATION SHADE::SHSystemManager::RegisterRoutine(); - //SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHComponentManager::CreateComponentSparseSet(); // Set up graphics system and windows graphicsSystem->SetWindow(&window); From e71941cccf151768e8d3622362adf9a4a91d5750 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 18:12:01 +0800 Subject: [PATCH 275/793] removing not needed buttons --- .../EditorWindow/Inspector/SHEditorInspector.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 247b4b8c..5f43c30d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -42,11 +42,6 @@ namespace SHADE SHEditorWindow::Update(); if (Begin()) { - if(ImGui::Button("AUDIO")) - { - if(auto audioSystem = SHSystemManager::GetSystem()) - audioSystem->PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); - } if (!SHEditor::selectedEntities.empty()) { EntityID const& eid = SHEditor::selectedEntities[0]; @@ -58,14 +53,6 @@ namespace SHADE ImGui::InputText("##EntityName", &entity->name); - if (ImGui::Button("AUDIO")) - { - if (auto audioSystem = SHSystemManager::GetSystem()) - { - audioSystem->PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); - } - } - if (auto transformComponent = SHComponentManager::GetComponent_s(eid)) { DrawComponent(transformComponent); From 5f4c81aeed70081d5101ad945db81fc591374e28 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 18:22:53 +0800 Subject: [PATCH 276/793] comment out audiosystem from application to prevent accidents --- SHADE_Application/src/Application/SBApplication.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 6ca2abcb..28b38940 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -25,7 +25,7 @@ #include "Math/Transform/SHTransformSystem.h" #include "Input/SHInputManagerSystem.h" #include "FRC/SHFramerateController.h" -#include "AudioSystem/SHAudioSystem.h" +//#include "AudioSystem/SHAudioSystem.h" #include "Scenes/SBTestScene.h" #include "Math/Transform/SHTransformComponent.h" @@ -57,7 +57,7 @@ namespace Sandbox SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); SHADE::SHSystemManager::CreateSystem(); - SHADE::SHSystemManager::CreateSystem(); + //SHADE::SHSystemManager::CreateSystem(); // Create Routines SHADE::SHSystemManager::RegisterRoutine(); @@ -86,7 +86,7 @@ namespace Sandbox SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); //TODO: REMOVE AFTER PRESENTATION - SHADE::SHSystemManager::RegisterRoutine(); + //SHADE::SHSystemManager::RegisterRoutine(); // Set up graphics system and windows graphicsSystem->SetWindow(&window); From 201b19e8a6ad413fa3b7429119afda8451790e6e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 28 Sep 2022 18:35:22 +0800 Subject: [PATCH 277/793] SP3-237 Renamed MeshWriter to MeshCompiler Implemented texture compiler --- .../{SHMeshWriter.cpp => SHMeshCompiler.cpp} | 4 +- .../{SHMeshWriter.h => SHMeshCompiler.h} | 4 +- .../Assets/Libraries/SHTextureCompiler.cpp | 50 +++++++++++++++++++ .../src/Assets/Libraries/SHTextureCompiler.h | 12 +++++ 4 files changed, 66 insertions(+), 4 deletions(-) rename SHADE_Engine/src/Assets/Libraries/{SHMeshWriter.cpp => SHMeshCompiler.cpp} (88%) rename SHADE_Engine/src/Assets/Libraries/{SHMeshWriter.h => SHMeshCompiler.h} (54%) create mode 100644 SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp similarity index 88% rename from SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp rename to SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 965e7d68..1a9dede2 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -1,9 +1,9 @@ #include "SHpch.h" -#include "SHMeshWriter.h" +#include "SHMeshCompiler.h" #include -void SHADE::SHMeshWriter::WriteMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept +void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept { std::ofstream file{path, std::ios::out | std::ios::binary}; if (!file.is_open()) diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h similarity index 54% rename from SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h rename to SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h index 4a1a3e6b..090e241e 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h @@ -5,10 +5,10 @@ namespace SHADE { - class SHMeshWriter + class SHMeshCompiler { private: public: - static void WriteMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; + static void CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp new file mode 100644 index 00000000..342a0aee --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp @@ -0,0 +1,50 @@ +#include "SHpch.h" +#include "SHTextureCompiler.h" + +#include + +namespace SHADE +{ + void SHTextureCompiler::CompileTextureBinary(SHTextureAsset const& asset, AssetPath path) + { + std::ofstream file{path, std::ios::out | std::ios::binary}; + if (!file.is_open()) + { + SHLOG_ERROR("Unable to open file for writing texture file: {}", path.string()); + } + + auto const intBytes{sizeof(uint32_t)}; + + file.write( + reinterpret_cast(&asset.numBytes), + intBytes + ); + + file.write( + reinterpret_cast(&asset.width), + intBytes + ); + + file.write( + reinterpret_cast(&asset.height), + intBytes + ); + + file.write( + reinterpret_cast(&asset.format), + sizeof(SHTexture::PixelChannel) + ); + + file.write( + reinterpret_cast(asset.mipOffsets.data()), + intBytes * asset.mipOffsets.size() + ); + + file.write( + reinterpret_cast(asset.pixelData), + asset.numBytes + ); + + file.close(); + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h new file mode 100644 index 00000000..494907f7 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Assets/Asset Types/SHTextureAsset.h" +#include "Assets/SHAssetMacros.h" + +namespace SHADE +{ + struct SHTextureCompiler + { + static void CompileTextureBinary(SHTextureAsset const& asset, AssetPath path); + }; +} \ No newline at end of file From 219aaa170792ba83a1f1f5cb1141a65ac0119000 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 28 Sep 2022 18:35:59 +0800 Subject: [PATCH 278/793] Split texture loader into 2 paths for dds and shtexture format. SHTexture binary load half done --- .../src/Assets/Libraries/SHMeshLoader.cpp | 24 ++++++-------- .../src/Assets/Libraries/SHTextureLoader.cpp | 31 ++++++++++++++++++- .../src/Assets/Libraries/SHTextureLoader.h | 3 ++ 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 3ef454a0..fc4ff435 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -88,20 +88,15 @@ namespace SHADE bool SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) { const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), - aiProcess_Triangulate - // Make sure we get triangles rather than nvert polygons - | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping - | aiProcess_TransformUVCoords - // preprocess UV transformations (scaling, translation ...) - | aiProcess_FindInstances - // search for instanced meshes and remove them by references to one master - | aiProcess_CalcTangentSpace - // calculate tangents and bitangents if possible - | aiProcess_JoinIdenticalVertices - // join identical vertices/ optimize indexing - | aiProcess_RemoveRedundantMaterials // remove redundant materials - | aiProcess_FindInvalidData// detect invalid model data, such as invalid normal vectors - | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs + aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons + | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping + | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) + | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master + | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible + | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing + | aiProcess_RemoveRedundantMaterials // remove redundant materials + | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors + | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs ); if (!scene || !scene->HasMeshes()) @@ -109,6 +104,7 @@ namespace SHADE SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); return false; } + //TODO MATERIALS FROM MESHES //if (scene->HasMaterials()) //{ diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 33270bb6..68da6035 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -58,7 +58,7 @@ namespace SHADE } } - void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) + void SHTextureLoader::LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept { tinyddsloader::Result loadResult = tinyddsloader::Result::Success; tinyddsloader::DDSFile file; @@ -89,4 +89,33 @@ namespace SHADE asset.mipOffsets = std::move(mipOff); asset.pixelData = std::move(pixel); } + + void SHTextureLoader::LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept + { + std::ifstream file{path.string(), std::ios::in | std::ios::binary}; + if (!file.is_open()) + { + SHLOG_ERROR("Error opening SHTexture file: {}", path.string()); + } + + VkFormat format; + + file >> asset.numBytes; + file >> asset.width; + file >> asset.height; + file >> format; + + } + + void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) + { + if (path.extension().string() == DDS_EXTENSION) + { + LoadTinyDDS(path, asset); + } + else if (path.extension().string() == TEXTURE_EXTENSION) + { + LoadSHTexture(path, asset); + } + } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index 281a9a19..ecc35605 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -13,6 +13,9 @@ namespace SHADE static std::string TinyDDSResultToString(tinyddsloader::Result value); static vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); + + static void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; + static void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; public: static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); }; From 02ec5d88e82abe296c87ad80e4e7128bb39b3b84 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 28 Sep 2022 18:36:22 +0800 Subject: [PATCH 279/793] Add remaining controls to component view --- .../ECS_Base/UnitTesting/SHTestComponents.h | 47 ++++++++ .../Inspector/SHEditorComponentView.hpp | 107 +++++++++++++++++- .../Inspector/SHEditorInspector.cpp | 10 ++ SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 29 ++++- .../src/Reflection/SHReflectionMetadata.h | 11 ++ 5 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 SHADE_Engine/src/Reflection/SHReflectionMetadata.h diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h index e2e53d6b..b95a0233 100644 --- a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h @@ -1,6 +1,7 @@ #pragma once #include "../Components/SHComponent.h" +#include namespace SHADE { @@ -27,4 +28,50 @@ namespace SHADE std::string value{}; }; + class SHComponent_ENUM : public SHComponent + { + public: + enum class Option + { + OPT_A, + OPT_B, + OPT_C + }; + + bool boolTest{}; + int intTest{}; + float floatTest{}; + double doubleTest{}; + long longTest{}; + uint8_t uint8Test{}; + uint16_t uint16Test{}; + uint32_t uint32Test{}; + uint64_t uint64Test{}; + + + Option option; + RTTR_ENABLE() + }; + + RTTR_REGISTRATION + { + using namespace rttr; + registration::enumeration("Option") + ( + value("Option A", SHComponent_ENUM::Option::OPT_A), + value("Option B", SHComponent_ENUM::Option::OPT_B), + value("Option C", SHComponent_ENUM::Option::OPT_C) + ); + rttr::registration::class_("Enum Component") + .property("Option", &SHComponent_ENUM::option) + .property("boolTest", &SHComponent_ENUM::boolTest) + .property("intTest", &SHComponent_ENUM::intTest)( metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("floatTest", &SHComponent_ENUM::floatTest)(metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("doubleTest", &SHComponent_ENUM::doubleTest)(metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("uint8Test", &SHComponent_ENUM::uint8Test)(metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("uint16Test", &SHComponent_ENUM::uint16Test)(metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("uint32Test", &SHComponent_ENUM::uint32Test)(metadata("MIN", 0.0f), metadata("MAX", 1.f)) + .property("uint64Test", &SHComponent_ENUM::uint64Test)(metadata("MIN", 0.0f), metadata("MAX", 1.f)); + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index c0db5622..2d326d09 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -12,6 +12,7 @@ #include "Editor/IconsMaterialDesign.h" #include "ECS_Base/Components/SHComponent.h" #include "Editor/SHEditorWidgets.hpp" +#include "Reflection/SHReflectionMetadata.h" namespace SHADE { template::value, bool> = true> @@ -65,14 +66,112 @@ namespace SHADE ComboBox(property.get_name().data(), list, [component, property]{return property.get_value(component).to_int();}, [component, property](int const& idx) { auto enumAlign = property.get_enumeration(); - auto names = enumAlign.get_names(); - - property.set_value(component, *(enumAlign.get_values().begin().operator++(idx))); + auto values = enumAlign.get_values(); + auto it = std::next(values.begin(), idx); + property.set_value(component, *it); }); } else if(type.is_arithmetic()) { - + if (type == rttr::type::get()) + { + CheckBox(property.get_name().data(), [component, property]{return property.get_value(component).to_bool();}, [component, property](bool const& result){property.set_value(component, result);}); + } + //else if (type == rttr::type::get()) + //{ + // + //} + else if (type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin && metaMax) + { + SliderInt(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_int();}, [component, property](int const& result){property.set_value(component, result);}); + } + else + { + DragInt(property.get_name().data(), [component, property]{return property.get_value(component).to_int();}, [component, property](int const& result){property.set_value(component, result);}); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin.is_valid() && metaMax.is_valid()) + { + SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property]{return property.get_value(component).to_uint8();}, [component, property](uint8_t const& result){property.set_value(component, result);},"%zu"); + } + else + { + DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property]{return property.get_value(component).to_uint8();}, [component, property](uint8_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin.is_valid() && metaMax.is_valid()) + { + SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_uint16();}, [component, property](uint16_t const& result){property.set_value(component, result);},"%zu"); + } + else + { + DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property]{return property.get_value(component).to_uint16();}, [component, property](uint16_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if (metaMin.is_valid() && metaMax.is_valid()) + { + SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMin.template get_value(), [component, property]{ return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result){property.set_value(component, result); },"%zu"); + } + else + { + DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property]{ return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result){property.set_value(component, result); },0.1f,0,0,"%zu"); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin.is_valid() && metaMax.is_valid()) + { + SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_uint64();}, [component, property](uint64_t const& result){property.set_value(component, result);},"%zu"); + } + else + { + DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property]{return property.get_value(component).to_uint64();}, [component, property](uint64_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin.is_valid() && metaMax.is_valid()) + { + SliderFloat(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_float();}, [component, property](float const& result){property.set_value(component, result);}); + } + else + { + DragFloat(property.get_name().data(), [component, property]{return property.get_value(component).to_float();}, [component, property](float const& result){property.set_value(component, result);}); + } + } + else if (type == rttr::type::get()) + { + auto metaMin = property.get_metadata(META::min); + auto metaMax = property.get_metadata(META::max); + if(metaMin.is_valid() && metaMax.is_valid()) + { + SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_double();}, [component, property](double const& result){property.set_value(component, result);}); + } + else + { + DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property]{return property.get_value(component).to_double();}, [component, property](double const& result){property.set_value(component, result);}, 0.1f); + } + } } else if (type == rttr::type::get()) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index fba9512e..0fb5b926 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -11,6 +11,7 @@ #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" #include "SHEditorComponentView.hpp" +#include "ECS_Base/UnitTesting/SHTestComponents.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" namespace SHADE @@ -54,11 +55,20 @@ namespace SHADE { DrawComponent(transformComponent); } + if(auto renderableComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(renderableComponent); + } + if(auto testComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(testComponent); + } ImGui::Separator(); if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { DrawAddComponentButton(eid); DrawAddComponentButton(eid); + DrawAddComponentButton(eid); ImGui::EndMenu(); } } diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 0c869c98..6dcf5dfd 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -202,6 +202,7 @@ namespace SHADE float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { T value = get(); + std::cout << value <<" \n"; //bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); if (ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags)) @@ -257,6 +258,23 @@ namespace SHADE return false; } + template + static bool SliderScalar(const std::string& fieldLabel, ImGuiDataType data_type, T min, T max, std::function get, std::function set, + const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + { + T value = get(); + if (ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags)) + { + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + + return true; + } + + return false; + } static bool SliderFloat(const std::string& fieldLabel, float min, float max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) @@ -295,14 +313,17 @@ namespace SHADE static bool ComboBox(const std::string& fieldLabel, std::vector list, std::function get, std::function set) { + bool edited = false; int selected = get(); - if (ImGui::Combo(fieldLabel.c_str(), &selected, list.data(), list.size())) + ImGui::PushID(fieldLabel.c_str()); + ImGui::Text(fieldLabel.c_str()); ImGui::SameLine(); + + if (edited = ImGui::Combo("##Combo", &selected, list.data(), list.size())) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), selected, set)), false); - return true; } - - return false; + ImGui::PopID(); + return edited; } diff --git a/SHADE_Engine/src/Reflection/SHReflectionMetadata.h b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h new file mode 100644 index 00000000..0cc6d8a5 --- /dev/null +++ b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h @@ -0,0 +1,11 @@ +#pragma once +#include "string_view" +namespace SHADE +{ + namespace META + { + constexpr const char* min = "MIN"; + constexpr const char* max = "MAX"; + constexpr const char* tooltip = "tooltip"; + } +} From f83b40c96c279a08e325c8625274c8a4020bcfd0 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 18:40:45 +0800 Subject: [PATCH 280/793] added fmod to dependencies.bat --- Dependencies.bat | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Dependencies.bat b/Dependencies.bat index e16c4267..1d4a3473 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -19,10 +19,11 @@ echo "L - yamlcpp" echo "M - SDL" echo "N - dotnet" echo "O - tinyddsloader" +echo "P - fmod" echo --------------------------------------------------- echo. -choice /C ABCDEFGHIJKLMNO /T 10 /D A +choice /C ABCDEFGHIJKLMNOP /T 10 /D A set _e=%ERRORLEVEL% if %_e%==1 goto VMA @@ -40,6 +41,7 @@ if %_e%==12 goto yamlcpp if %_e%==13 goto SDL if %_e%==14 goto dotnet if %_e%==15 goto tinyddsloader +if %_e%==16 goto fmod :VMA echo -----------------------VMA---------------------------- @@ -145,6 +147,12 @@ if %_e%==14 (goto :done) else (goto :tinyddsloader) echo --------------------tinyddsloader------------------------- rmdir "Dependencies/tinyddsloader" /S /Q git clone https://github.com/SHADE-DP/tinyddsloader.git "Dependencies/tinyddsloader" +if %_e%==15 (goto :done) else (goto :fmod) + +:fmod +echo --------------------fmod------------------------- +rmdir "Dependencies/fmod" /S /Q +git clone https://github.com/SHADE-DP/FMOD.git "Dependencies/fmod" :done echo DONE! From a96ef67ec49a72c98363558c0e0bfebe73c7d342 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 28 Sep 2022 18:53:53 +0800 Subject: [PATCH 281/793] change engine premake to copy fmod lib over --- SHADE_Engine/premake5.lua | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 289dfd30..434c9e10 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -106,17 +106,32 @@ project "SHADE_Engine" { "xcopy /s /r /y /q \"%{IncludeDir.spdlog}\\bin\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.SDL}\\lib\\SDL2.dll\" \"$(OutDir)\"", - "xcopy /s /r /y /q \"%{IncludeDir.dotnet}\\bin\" \"$(OutDir)\"" + "xcopy /s /r /y /q \"%{IncludeDir.dotnet}\\bin\" \"$(OutDir)\"" } filter "configurations:Debug" - postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\""} + postbuildcommands + { + "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodL.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudioL.dll\" \"$(OutDir)\"" + } filter "configurations:Release" - postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + postbuildcommands + { + "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmod.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudio.dll\" \"$(OutDir)\"" + } filter "configurations:Publish" - postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + postbuildcommands + { + "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmod.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudio.dll\" \"$(OutDir)\"" + } warnings 'Extra' @@ -130,7 +145,7 @@ project "SHADE_Engine" optimize "On" defines{"_RELEASE", "SHEDITOR"} links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} - --links{"fmodstudio_vc.lib", "fmod_vc.lib"} + links{"fmodstudio_vc.lib", "fmod_vc.lib"} filter "configurations:Publish" optimize "On" From 371f8e5e6f4bb7a4608b1b6127432e08fb4c5979 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 28 Sep 2022 19:45:40 +0800 Subject: [PATCH 282/793] Add simple profiler --- .../Profiling/SHEditorProfiler.cpp | 48 +++++++++++++++++++ .../EditorWindow/Profiling/SHEditorProfiler.h | 19 ++++++++ .../EditorWindow/SHEditorWindowIncludes.h | 3 +- SHADE_Engine/src/Editor/SHEditor.cpp | 1 + 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp new file mode 100644 index 00000000..4b36fe5d --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp @@ -0,0 +1,48 @@ +#include "SHpch.h" +#include "SHEditorProfiler.h" +#include + +#include "ECS_Base/Managers/SHSystemManager.h" +#include "FRC/SHFramerateController.h" + +namespace SHADE +{ + SHEditorProfiler::SHEditorProfiler() + :SHEditorWindow("Profiler", ImGuiWindowFlags_None) + { + } + + void SHEditorProfiler::Init() + { + SHEditorWindow::Init(); + } + + void SHEditorProfiler::Update() + { + SHEditorWindow::Update(); + + const float dt = static_cast(SHFrameRateController::GetRawDeltaTime()); + if(frames.size() > MaxFramesDisplayed) + { + for (size_t i = 1; i < frames.size(); i++) + { + frames[i-1] = frames[i]; + } + frames[frames.size() - 1] = dt; + } + else + { + frames.push_back(dt); + } + if(Begin()) + { + ImGui::PlotLines("DT", frames.data(), static_cast(frames.size()), 0, nullptr, 0.0f, 16.0f); + ImGui::End(); + } + } + + void SHEditorProfiler::Exit() + { + SHEditorWindow::Exit(); + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.h b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.h new file mode 100644 index 00000000..3f817a53 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Editor/EditorWindow/SHEditorWindow.h" +#include +constexpr uint32_t MaxFramesDisplayed = 100; +namespace SHADE +{ + class SHEditorProfiler final : public SHEditorWindow + { + public: + SHEditorProfiler(); + void Init() override; + void Update() override; + void Exit() override; + + private: + std::vector frames; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index 2ed34109..d1ebfbf4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -1,4 +1,5 @@ #pragma once #include "MenuBar/SHEditorMenuBar.h" //Menu Bar #include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel -#include "Inspector/SHEditorInspector.h" //Inspector \ No newline at end of file +#include "Inspector/SHEditorInspector.h" //Inspector +#include "Profiling/SHEditorProfiler.h" //Profiler \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 5bc7f35b..b36518fd 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -95,6 +95,7 @@ namespace SHADE CreateEditorWindow(); CreateEditorWindow(); CreateEditorWindow(); + CreateEditorWindow(); SHLOG_INFO("Successfully initialised SHADE Engine Editor") } From 78f216e4457323a3b21810cf8f1993624c19c09f Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 28 Sep 2022 20:33:29 +0800 Subject: [PATCH 283/793] Rendered multiple racoons --- SHADE_Application/src/Scenes/SBTestScene.cpp | 24 +++++++++++++++---- SHADE_Engine/premake5.lua | 3 +++ .../src/Assets/Libraries/SHTextureLoader.cpp | 2 +- .../GlobalData/SHGraphicsGlobalData.cpp | 5 ++++ .../GlobalData/SHGraphicsGlobalData.h | 5 ++-- .../MiddleEnd/Interface/SHRenderable.cpp | 2 +- TempShaderFolder/TestCubeFs.glsl | 22 ++++++++--------- 7 files changed, 44 insertions(+), 19 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 170f3e10..74ac4c1d 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -76,10 +76,10 @@ namespace Sandbox customMat->SetProperty("data.alpha", 0.1f); // Create Stress Test Objects - static const SHVec3 TEST_OBJ_SCALE = { 0.2f, 0.2f, 0.2f }; - constexpr int NUM_ROWS = 20; - constexpr int NUM_COLS = 20; - static const SHVec3 TEST_OBJ_SPACING = { 0.2f, 0.2f, 0.2f }; + static const SHVec3 TEST_OBJ_SCALE = { 0.05f, 0.05f, 0.05f }; + constexpr int NUM_ROWS = 100; + constexpr int NUM_COLS = 100; + static const SHVec3 TEST_OBJ_SPACING = { 0.05f, 0.05f, 0.05f }; static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ) + 1.0f, -2.0f, -1.0f }; for (int y = 0; y < NUM_ROWS; ++y) @@ -92,6 +92,9 @@ namespace Sandbox renderable.Mesh = handles.front(); renderable.SetMaterial(customMat); + if (y == 50) + renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); + //Set initial positions transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, @@ -105,6 +108,19 @@ namespace Sandbox stressTestObjects.emplace_back(entity); } + auto entity = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); + + renderable.Mesh = handles.front(); + renderable.SetMaterial(customMat); + renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); + renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + + transform.SetWorldPosition ({-3.0f, -1.0f, -1.0f}); + transform.SetLocalScale({5.0f, 5.0f, 5.0f}); + //auto entity = SHEntityManager::CreateEntity(); //auto& renderable = *SHComponentManager::GetComponent_s(entity); //auto& transform = *SHComponentManager::GetComponent_s(entity); diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 7de741b7..32a1e30c 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -113,6 +113,9 @@ project "SHADE_Engine" filter "configurations:Release" postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + filter "configurations:Publish" + postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + warnings 'Extra' filter "configurations:Debug" diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index bff15f2b..4f510c0a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -79,7 +79,7 @@ namespace SHADE } SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; - std::memcpy(pixel, file.GetDDSData(), totalBytes); + std::memcpy(pixel, file.GetImageData()->m_mem, totalBytes); //pixel = std::move(reinterpret_cast(file.GetDDSData())); asset.numBytes = totalBytes; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 219ab933..6a7b23f2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -15,6 +15,11 @@ namespace SHADE SHVertexInputState SHGraphicsGlobalData::defaultVertexInputState; Handle SHGraphicsGlobalData::dummyPipelineLayout; + void SHGraphicsGlobalData::InitHighFrequencyGlobalData(void) noexcept + { + + } + /*-----------------------------------------------------------------------------------*/ /* Function Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index b6f84c52..344c2616 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -27,8 +27,9 @@ namespace SHADE //! we create a dummy pipeline layout to use it for binding. static Handle dummyPipelineLayout; - static void InitDescSetLayouts (Handle logicalDevice) noexcept; - static void InitDefaultVertexInputState(void) noexcept; + static void InitHighFrequencyGlobalData (void) noexcept; + static void InitDescSetLayouts (Handle logicalDevice) noexcept; + static void InitDefaultVertexInputState (void) noexcept; public: /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index a4cda42d..0b1c1b66 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -81,7 +81,7 @@ namespace SHADE if (!material) { SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); - material = gfxSystem->AddOrGetBaseMaterialInstance(sharedMaterial->GetBaseMaterial()); + material = gfxSystem->AddMaterialInstanceCopy(sharedMaterial); } return material; diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index 93e15e07..3a25ad71 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -3,6 +3,14 @@ #extension GL_ARB_shading_language_420pack : enable #extension GL_EXT_nonuniform_qualifier : require +struct MatPropData +{ + vec4 color; + int textureIndex; + float alpha; + vec3 beta; +}; + layout(location = 0) in struct { vec4 vertColor; @@ -16,18 +24,10 @@ layout(location = 2) flat in struct int materialIndex; } In2; +//layout (set = 0, binding = ) -layout (set = 0, binding = 1) uniform sampler2D textures[]; - -struct MatPropData -{ - vec4 color; - int textureIndex; - float alpha; - vec3 beta; -}; - -layout(set = 3, binding = 0) buffer MaterialProperties +layout (set = 0, binding = 1) uniform sampler2D textures[]; // for textures (global) +layout (set = 3, binding = 0) buffer MaterialProperties // For materials { MatPropData data[]; } MatProp; From 561f2b091f231582896f94c6aca6f74fd3ddcdd4 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 28 Sep 2022 21:09:27 +0800 Subject: [PATCH 284/793] Added PhysicsObject to handle interface between components and physics system --- .../Components/SHRigidBodyComponent.cpp | 206 +++++++------- .../Physics/Components/SHRigidBodyComponent.h | 21 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 112 ++++++++ SHADE_Engine/src/Physics/SHPhysicsObject.h | 82 ++++++ SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 252 ++++++++---------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 103 +++---- 6 files changed, 446 insertions(+), 330 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsObject.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsObject.h diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index e3989d6e..16863dbd 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -18,12 +18,6 @@ #include "Math/SHMathHelpers.h" #include "Math/SHQuaternion.h" -/*-------------------------------------------------------------------------------------*/ -/* Local Function Definitions */ -/*-------------------------------------------------------------------------------------*/ - - - namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -31,8 +25,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHRigidBodyComponent::SHRigidBodyComponent() noexcept - : rigidBody { nullptr } - , type { Type::DYNAMIC } + : type { Type::DYNAMIC } , mass { 1.0f } , drag { 0.01f } , angularDrag { 0.01f } @@ -41,13 +34,11 @@ namespace SHADE // Set default flags: Gravity & Sleeping enabled flags |= 1U << 0; flags |= 1U << 1; - - // TODO(Diren): Send an update command to the physics system } SHRigidBodyComponent::~SHRigidBodyComponent() { - rigidBody = nullptr; + } /*-----------------------------------------------------------------------------------*/ @@ -57,9 +48,10 @@ namespace SHADE bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { const bool GRAVITY = flags & (1U << 0); - if (rigidBody) + if (rp3dBody) { - SHASSERT(rigidBody->isGravityEnabled() == GRAVITY, "ReactPhysics and SHADE body enable gravity do not match!") + + SHASSERT(reinterpret_cast(rp3dBody)->isGravityEnabled() == GRAVITY, "ReactPhysics and SHADE body enable gravity do not match!") } return GRAVITY; @@ -68,21 +60,26 @@ namespace SHADE bool SHRigidBodyComponent::IsSleepingEnabled() const noexcept { const bool SLEEP = flags & (1U << 1); - if (rigidBody) + if (rp3dBody) { - SHASSERT(rigidBody->isAllowedToSleep() == SLEEP, "ReactPhysics and SHADE body enable sleep do not match!") + SHASSERT(reinterpret_cast(rp3dBody)->isAllowedToSleep() == SLEEP, "ReactPhysics and SHADE body enable sleep do not match!") } return SLEEP; } + bool SHRigidBodyComponent::IsInterpolating() const noexcept + { + return interpolate; + } + SHRigidBodyComponent::Type SHRigidBodyComponent::GetType() const noexcept { - if (rigidBody) + if (rp3dBody) { SHASSERT ( - SHUtilities::ConvertEnum(rigidBody->getType()) == SHUtilities::ConvertEnum(type), + SHUtilities::ConvertEnum(reinterpret_cast(rp3dBody)->getType()) == SHUtilities::ConvertEnum(type), "ReactPhysics and SHADE body types do not match!" ) } @@ -92,9 +89,9 @@ namespace SHADE float SHRigidBodyComponent::GetMass() const noexcept { - if (rigidBody) + if (rp3dBody) { - SHASSERT(rigidBody->getMass() == mass, "ReactPhysics and SHADE body masses do not match!") + SHASSERT(reinterpret_cast(rp3dBody)->getMass() == mass, "ReactPhysics and SHADE body masses do not match!") } return mass; @@ -102,11 +99,11 @@ namespace SHADE float SHRigidBodyComponent::GetDrag() const noexcept { - if (rigidBody) + if (rp3dBody) { SHASSERT ( - SHMath::CompareFloat(rigidBody->getLinearDamping(), drag), + SHMath::CompareFloat(reinterpret_cast(rp3dBody)->getLinearDamping(), drag), "ReactPhysics and SADE body drag coefficients do not match!" ) } @@ -116,11 +113,11 @@ namespace SHADE float SHRigidBodyComponent::GetAngularDrag() const noexcept { - if (rigidBody) + if (rp3dBody) { SHASSERT ( - SHMath::CompareFloat(rigidBody->getAngularDamping(), angularDrag), + SHMath::CompareFloat(reinterpret_cast(rp3dBody)->getAngularDamping(), angularDrag), "ReactPhysics and SADE body drag coefficients do not match!" ) } @@ -131,9 +128,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { const bool FREEZE_X_POS = flags & (1U << 2); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_X_POS = fabs(rigidBody->getLinearLockAxisFactor().x) > 0.0f; + const bool RP3D_FREEZE_X_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().x) > 0.0f; SHASSERT(RP3D_FREEZE_X_POS == FREEZE_X_POS, "ReactPhysics and SHADE body x-axis position lock do not match!") } @@ -143,9 +140,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { const bool FREEZE_Y_POS = flags & (1U << 3); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_Y_POS = fabs(rigidBody->getLinearLockAxisFactor().y) > 0.0f; + const bool RP3D_FREEZE_Y_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().y) > 0.0f; SHASSERT(RP3D_FREEZE_Y_POS == FREEZE_Y_POS, "ReactPhysics and SHADE body y-axis position lock do not match!") } @@ -155,9 +152,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { const bool FREEZE_Z_POS = flags & (1U << 4); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_Z_POS = fabs(rigidBody->getLinearLockAxisFactor().z) > 0.0f; + const bool RP3D_FREEZE_Z_POS = fabs(reinterpret_cast(rp3dBody)->getLinearLockAxisFactor().z) > 0.0f; SHASSERT(RP3D_FREEZE_Z_POS == FREEZE_Z_POS, "ReactPhysics and SHADE body z-axis position lock do not match!") } @@ -167,9 +164,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { const bool FREEZE_X_ROT = flags & (1U << 5); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_Y_ROT = fabs(rigidBody->getAngularLockAxisFactor().x) > 0.0f; + const bool RP3D_FREEZE_Y_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().x) > 0.0f; SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_X_ROT, "ReactPhysics and SHADE body x-axis rotation lock do not match!") } @@ -179,9 +176,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { const bool FREEZE_Y_ROT = flags & (1U << 6); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_Y_ROT = fabs(rigidBody->getAngularLockAxisFactor().y) > 0.0f; + const bool RP3D_FREEZE_Y_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().y) > 0.0f; SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_Y_ROT, "ReactPhysics and SHADE body y-axis rotation lock do not match!") } @@ -191,9 +188,9 @@ namespace SHADE bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { const bool FREEZE_Z_ROT = flags & (1U << 7); - if (rigidBody) + if (rp3dBody) { - const bool RP3D_FREEZE_Z_ROT = fabs(rigidBody->getAngularLockAxisFactor().z) > 0.0f; + const bool RP3D_FREEZE_Z_ROT = fabs(reinterpret_cast(rp3dBody)->getAngularLockAxisFactor().z) > 0.0f; SHASSERT(RP3D_FREEZE_Z_ROT == FREEZE_Z_ROT, "ReactPhysics and SHADE body z-axis rotation lock do not match!") } @@ -204,9 +201,9 @@ namespace SHADE { SHVec3 result; - if (rigidBody) + if (rp3dBody) { - const auto RP3D_RESULT = rigidBody->getForce(); + const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getForce(); result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; } @@ -217,9 +214,9 @@ namespace SHADE { SHVec3 result; - if (rigidBody) + if (rp3dBody) { - const auto RP3D_RESULT = rigidBody->getTorque(); + const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getTorque(); result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; } @@ -230,9 +227,9 @@ namespace SHADE { SHVec3 result; - if (rigidBody) + if (rp3dBody) { - const auto RP3D_RESULT = rigidBody->getLinearVelocity(); + const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getLinearVelocity(); result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; } @@ -243,41 +240,15 @@ namespace SHADE { SHVec3 result; - if (rigidBody) + if (rp3dBody) { - const auto RP3D_RESULT = rigidBody->getAngularVelocity(); + const auto& RP3D_RESULT = reinterpret_cast(rp3dBody)->getAngularVelocity(); result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; } return result; } - SHVec3 SHRigidBodyComponent::GetPosition() const noexcept - { - SHVec3 result; - - if (rigidBody) - { - const auto RP3D_RESULT = rigidBody->getTransform().getPosition(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } - - return result; - } - - SHQuaternion SHRigidBodyComponent::GetOrientation() const noexcept - { - SHQuaternion result; - - if (rigidBody) - { - const auto RP3D_RESULT = rigidBody->getTransform().getOrientation(); - result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }; - } - - return result; - } - /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -288,43 +259,43 @@ namespace SHADE return; type = newType; - if (rigidBody) - rigidBody->setType(static_cast(newType)); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setType(static_cast(newType)); } void SHRigidBodyComponent::SetMass(float newMass) noexcept { mass = newMass; - if (rigidBody) - rigidBody->setMass(newMass); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setMass(newMass); } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept { drag = newDrag; - if (rigidBody) - rigidBody->setLinearDamping(newDrag); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setLinearDamping(newDrag); } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept { angularDrag = newAngularDrag; - if (rigidBody) - rigidBody->setAngularDamping(newAngularDrag); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setAngularDamping(newAngularDrag); } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept { SetFlag(enableGravity, 0); - if (rigidBody) - rigidBody->enableGravity(enableGravity); + if (rp3dBody) + reinterpret_cast(rp3dBody)->enableGravity(enableGravity); } void SHRigidBodyComponent::SetSleepingEnabled(bool enableSleeping) noexcept { SetFlag(enableSleeping, 1); - if (rigidBody) - rigidBody->setIsAllowedToSleep(enableSleeping); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setIsAllowedToSleep(enableSleeping); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept @@ -363,21 +334,26 @@ namespace SHADE SetRP3DAngularConstraints(); } + void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept + { + interpolate = allowInterpolation; + } + void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 NEW_V { newLinearVelocity.x, newLinearVelocity.y, newLinearVelocity.z }; - rigidBody->setLinearVelocity(NEW_V); + reinterpret_cast(rp3dBody)->setLinearVelocity(NEW_V); } } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 NEW_V { newAngularVelocity.x, newAngularVelocity.y, newAngularVelocity.z }; - rigidBody->setAngularVelocity(NEW_V); + reinterpret_cast(rp3dBody)->setAngularVelocity(NEW_V); } } @@ -385,79 +361,97 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHRigidBodyComponent::OnCreate() + { + componentFlags |= 1U << 0; // dirty + componentFlags |= 1U << 1; // rb dirty + componentFlags |= 1U << 2; // has rb + + Synchronise(); + } + + void SHRigidBodyComponent::OnDestroy() + { + componentFlags |= 1U << 0; // dirty + componentFlags |= 1U << 1; // rb dirty + componentFlags &= ~(1U << 2); // no rb + + Synchronise(); + } + void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F { force.x, force.y, force.z }; - rigidBody->applyWorldForceAtCenterOfMass(F); + reinterpret_cast(rp3dBody)->applyWorldForceAtCenterOfMass(F); } } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F{ force.x, force.y, force.z }; const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; - rigidBody->applyWorldForceAtLocalPosition(F, P); + reinterpret_cast(rp3dBody)->applyWorldForceAtLocalPosition(F, P); } } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F{ force.x, force.y, force.z }; const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; - rigidBody->applyWorldForceAtWorldPosition(F, P); + reinterpret_cast(rp3dBody)->applyWorldForceAtWorldPosition(F, P); } } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; - rigidBody->applyLocalForceAtCenterOfMass(F); + reinterpret_cast(rp3dBody)->applyLocalForceAtCenterOfMass(F); } } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; - rigidBody->applyLocalForceAtLocalPosition(F, P); + reinterpret_cast(rp3dBody)->applyLocalForceAtLocalPosition(F, P); } } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; - rigidBody->applyLocalForceAtWorldPosition(F, P); + reinterpret_cast(rp3dBody)->applyLocalForceAtWorldPosition(F, P); } } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 T{ torque.x, torque.y, torque.z }; - rigidBody->applyWorldTorque(T); + reinterpret_cast(rp3dBody)->applyWorldTorque(T); } } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - if (rigidBody) + if (rp3dBody) { const rp3d::Vector3 T{ relativeTorque.x, relativeTorque.y, relativeTorque.z }; - rigidBody->applyLocalTorque(T); + reinterpret_cast(rp3dBody)->applyLocalTorque(T); } } @@ -467,6 +461,8 @@ namespace SHADE void SHRigidBodyComponent::SyncRP3DAndSHADE() { + auto* rigidBody = reinterpret_cast(rp3dBody); + rigidBody->setType(static_cast(type)); rigidBody->setMass(mass); @@ -494,8 +490,8 @@ namespace SHADE flags & 1U << 4 ? 1.0f : 0.0f }; - if (rigidBody) - rigidBody->setLinearLockAxisFactor(CONSTRAINTS); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setLinearLockAxisFactor(CONSTRAINTS); } void SHRigidBodyComponent::SetRP3DAngularConstraints() const @@ -507,8 +503,8 @@ namespace SHADE flags & 1U << 7 ? 1.0f : 0.0f }; - if (rigidBody) - rigidBody->setAngularLockAxisFactor(CONSTRAINTS); + if (rp3dBody) + reinterpret_cast(rp3dBody)->setAngularLockAxisFactor(CONSTRAINTS); } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 668ab6bd..439fa3db 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -10,16 +10,17 @@ #pragma once -#include - // Project Headers -#include "Math/Vector/SHVec3.h" -#include "Math/SHMatrix.h" #include "ECS_Base/Components/SHComponent.h" +#include "Physics/SHPhysicsObject.h" namespace SHADE { - class SH_API SHRigidBodyComponent : public SHComponent + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHRigidBodyComponent : public SHComponent, public SHPhysicsObject { private: /*---------------------------------------------------------------------------------*/ @@ -66,6 +67,7 @@ namespace SHADE [[nodiscard]] bool IsGravityEnabled () const noexcept; [[nodiscard]] bool IsSleepingEnabled () const noexcept; + [[nodiscard]] bool IsInterpolating () const noexcept; [[nodiscard]] Type GetType () const noexcept; [[nodiscard]] float GetMass () const noexcept; @@ -84,8 +86,6 @@ namespace SHADE [[nodiscard]] SHVec3 GetTorque () const noexcept; [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; - [[nodiscard]] SHVec3 GetPosition () const noexcept; - [[nodiscard]] SHQuaternion GetOrientation () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ @@ -104,6 +104,7 @@ namespace SHADE void SetFreezeRotationX (bool freezeRotationX) noexcept; void SetFreezeRotationY (bool freezeRotationY) noexcept; void SetFreezeRotationZ (bool freezeRotationZ) noexcept; + void SetInterpolate (bool allowInterpolation) noexcept; void SetLinearVelocity (const SHVec3& newLinearVelocity) const noexcept; void SetAngularVelocity (const SHVec3& newAngularVelocity) const noexcept; @@ -112,6 +113,9 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ + void OnCreate () override; + void OnDestroy () override; + void AddForce (const SHVec3& force) const noexcept; void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; void AddForceAtWorldPos (const SHVec3& force, const SHVec3& worldPos) const noexcept; @@ -127,8 +131,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ - - rp3d::RigidBody* rigidBody; Type type; @@ -138,6 +140,7 @@ namespace SHADE // rX rY rZ pX pY pZ slp g uint8_t flags; + bool interpolate; /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp new file mode 100644 index 00000000..4f0616f8 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -0,0 +1,112 @@ +/**************************************************************************************** + * \file SHPhysicsObject.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Physics Object. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsObject.h" + +// Project Headers +#include "ECS_Base/Managers/SHSystemManager.h" +#include "SHPhysicsSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsObject::SHPhysicsObject() noexcept + : entityID { MAX_EID } + , componentFlags { 0 } + , rp3dBody { nullptr } + {} + + SHPhysicsObject::~SHPhysicsObject() noexcept + { + rp3dBody = nullptr; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHVec3 SHPhysicsObject::GetPosition() const noexcept + { + SHVec3 result; + + if (rp3dBody) + { + const auto& RP3D_RESULT = rp3dBody->getTransform().getPosition(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHQuaternion SHPhysicsObject::GetOrientation() const noexcept + { + SHQuaternion result; + + if (rp3dBody) + { + const auto& RP3D_RESULT = rp3dBody->getTransform().getOrientation(); + result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }; + } + + return result; + } + + SHVec3 SHPhysicsObject::GetRotation() const noexcept + { + SHVec3 result; + + if (rp3dBody) + { + const auto& RP3D_RESULT = rp3dBody->getTransform().getOrientation(); + result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }.ToEuler(); + } + + return result; + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObject::Synchronise() const + { + if (const bool IS_DIRTY = componentFlags & 1U << 0; IS_DIRTY) + { + auto* physicsSystem = SHSystemManager::GetSystem(); + + const bool IS_RIGIDBODY_DIRTY = componentFlags & 1U << 1; + const bool IS_COLLIDER_DIRTY = componentFlags & 1U << 3; + + if (IS_RIGIDBODY_DIRTY) + { + static constexpr auto COMP_ENUM = SHPhysicsSystem::UpdateComponent::RIGID_BODY; + + const bool HAS_RIGIDBODY = componentFlags & 1U << 2; + HAS_RIGIDBODY ? physicsSystem->AddComponent(COMP_ENUM, entityID) : physicsSystem->RemoveComponent(COMP_ENUM, entityID); + } + + if (IS_COLLIDER_DIRTY) + { + static constexpr auto COMP_ENUM = SHPhysicsSystem::UpdateComponent::COLLIDER; + + const bool HAS_COLLIDER = componentFlags & 1U << 2; + HAS_COLLIDER ? physicsSystem->AddComponent(COMP_ENUM, entityID) : physicsSystem->RemoveComponent(COMP_ENUM, entityID); + } + } + } + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h new file mode 100644 index 00000000..20449f2d --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -0,0 +1,82 @@ +/**************************************************************************************** + * \file SHPhysicsObject.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Physics Object. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "Math/Vector/SHVec3.h" +#include "Math/SHQuaternion.h" +#include "ECS_Base/Entity/SHEntity.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHPhysicsObject + { + protected: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsObject () noexcept; + SHPhysicsObject (const SHPhysicsObject& rhs) noexcept = default; + SHPhysicsObject (SHPhysicsObject&& rhs) noexcept = default; + ~SHPhysicsObject () noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsObject& operator=(const SHPhysicsObject& rhs) noexcept = default; + SHPhysicsObject& operator=(SHPhysicsObject&& rhs) noexcept = default; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] SHVec3 GetPosition () const noexcept; + [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + /** + * @brief Checks for updates in the component states and tells the physics system to + * make any necessary additions / removals to rp3d side to sync with the SHADE + * component. + */ + void Synchronise() const; + + protected: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + EntityID entityID; + uint8_t componentFlags; // 0 0 0 c cDirty rb rbDirty dirty + rp3d::CollisionBody* rp3dBody; // Can be either a collision body or a rigid body + rp3d::Transform prevTransform; // Cached transform for interpolation + + }; +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 537c2c70..d27469ad 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -14,11 +14,10 @@ #include "SHPhysicsSystem.h" // Project Headers -#include "Math/Transform/SHTransformComponent.h" -#include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" -#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Scene/SHSceneManager.h" +#include "Math/Transform/SHTransformComponent.h" namespace SHADE { @@ -26,6 +25,12 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ + SHPhysicsSystem::SHPhysicsSystem() + : accumulatedTime { 0.0 } + , fixedDT { 1.0 / 60.0 } + , world { nullptr } + {} + SHPhysicsSystem::PhysicsPreUpdate::PhysicsPreUpdate() : SHSystemRoutine { "Physics PreUpdate", true } {} @@ -51,11 +56,6 @@ namespace SHADE return false; } - //double SHPhysicsSystem::GetFixedUpdate() const noexcept - //{ - // return fixedUpdate; - //} - SHVec3 SHPhysicsSystem::GetWorldGravity() const noexcept { SHVec3 result; @@ -97,12 +97,6 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - //void SHPhysicsSystem::SetFixedUpdate(double fixedUpdateRate) noexcept - //{ - // fixedUpdate = fixedUpdateRate; - // SHLOG_INFO("Setting Physics update rate to {}", 1.0 / fixedUpdate) - //} - void SHPhysicsSystem::SetWorldGravity(const SHVec3& gravity) const noexcept { if (world) @@ -178,7 +172,7 @@ namespace SHADE // Create a physics world with the default settings PhysicsWorld::WorldSettings settings; - settings.gravity = Vector3{ 0, -9.81, 0 }; + settings.gravity = Vector3{ 0.0f, -9.81f, 0.0f }; settings.isSleepingEnabled = true; settings.defaultVelocitySolverNbIterations = 8; settings.defaultPositionSolverNbIterations = 3; @@ -194,108 +188,14 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - void SHPhysicsSystem::AddRigidBodyComponent(EntityID id) noexcept - { - const UpdateCommand NEW_CMD - { - .component = UpdateComponent::RIGID_BODY, - .type = UpdateType::ADD, - .entityID = id - }; - - updateQueue.push(NEW_CMD); - } - - void SHPhysicsSystem::AddColliderComponent(EntityID id) noexcept - { - const UpdateCommand NEW_CMD - { - .component = UpdateComponent::COLLIDER, - .type = UpdateType::ADD, - .entityID = id - }; - - updateQueue.push(NEW_CMD); - } - - void SHPhysicsSystem::RemoveRigidBodyComponent(EntityID id) noexcept - { - const UpdateCommand NEW_CMD - { - .component = UpdateComponent::RIGID_BODY, - .type = UpdateType::REMOVE, - .entityID = id - }; - - updateQueue.push(NEW_CMD); - } - - void SHPhysicsSystem::RemoveColliderComponent(EntityID id) noexcept - { - const UpdateCommand NEW_CMD - { - .component = UpdateComponent::COLLIDER, - .type = UpdateType::REMOVE, - .entityID = id - }; - - updateQueue.push(NEW_CMD); - } - void SHPhysicsSystem::PhysicsPreUpdate::Execute([[maybe_unused]]double dt) noexcept { auto* system = reinterpret_cast(GetSystem()); + system->ClearUpdateQueue(); - - // Sync active states: if node or component is not active, set rp3d to inactive - static const auto SYNC_ACTIVE = [](SHSceneNode* node) - { - const EntityID ENTITY_ID = node->GetEntityID(); - - // Check if has rigid body - auto const* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if(rigidBodyComponent) - { - const bool RP3D_ACTIVE = rigidBodyComponent->rigidBody->isActive(); - const bool SHADE_ACTIVE = node->IsActive() && rigidBodyComponent->isActive; - - if (RP3D_ACTIVE != SHADE_ACTIVE) - rigidBodyComponent->rigidBody->setIsActive(SHADE_ACTIVE); - } - else // Check for a collider - { - - } - }; - - const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - sceneGraph.Traverse(SYNC_ACTIVE); + system->SyncActiveStates(SHSceneManager::GetCurrentSceneGraph()); } - //void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept - //{ - // // I had to override this anyway due to needing to calculate the - // // interpolation factor right after the fixed update was done - - // auto* system = reinterpret_cast(GetSystem()); - // fixedTimeStep = 1.0 / system->fixedUpdate; - - // accumulatedTime += dt; - // int counter = 0; - - // while (accumulatedTime > fixedTimeStep) - // { - // FixedExecute(fixedTimeStep); - - // accumulatedTime -= fixedTimeStep; - // ++counter; - // } - - // stats.numSteps = counter; - - // system->interpolationFactor = accumulatedTime / fixedTimeStep; - //} - void SHPhysicsSystem::PhysicsFixedUpdate::FixedExecute(double dt) noexcept { auto* system = reinterpret_cast(GetSystem()); @@ -309,38 +209,25 @@ namespace SHADE { // Interpolate transforms for rendering const auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - sceneGraph.Traverse([](SHSceneNode* node) - { - const EntityID ENTITY_ID = node->GetEntityID(); - - // Check if has rigid body - if (auto* rb = SHComponentManager::GetComponent_s(ENTITY_ID); rb) - { - // TODO(Diren): Interpolate transforms for rendering - if (node->IsActive() && rb->isActive) - { - // Get SHADE transform - auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - SHASSERT(transformComponent != nullptr, "Transform Component missing from Entity " + std::to_string(ENTITY_ID)) - - const auto& RP3D_POS = rb->GetPosition(); - const SHVec3 SHADE_POS{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; - - const auto& SHADE_ROT = rb->GetOrientation().ToEuler(); - - transformComponent->SetWorldPosition(SHADE_POS); - transformComponent->SetWorldRotation(SHADE_ROT); - } - else // Check for a collider - { - - } - } - }); // TODO(Diren): Handle trigger messages for scripting } + /*-----------------------------------------------------------------------------------*/ + /* Protected Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::AddComponent(UpdateComponent comp, EntityID entityID) noexcept + { + updateQueue.push({ comp, UpdateType::ADD, entityID }); + } + + + void SHPhysicsSystem::RemoveComponent(UpdateComponent comp, EntityID entityID) noexcept + { + updateQueue.push({ comp, UpdateType::REMOVE, entityID }); + } + /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -377,6 +264,85 @@ namespace SHADE } } + void SHPhysicsSystem::SyncActiveStates(const SHSceneGraph& sceneGraph) const noexcept + { + // Sync active states: if node or component is not active, set rp3d to inactive + static constexpr auto SYNC_ACTIVE = [](SHSceneNode* node) + { + const EntityID ENTITY_ID = node->GetEntityID(); + + // Check if has rigid body + auto const* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if(rigidBodyComponent) + { + const bool RP3D_ACTIVE = rigidBodyComponent->rp3dBody->isActive(); + const bool SHADE_ACTIVE = node->IsActive() && rigidBodyComponent->isActive; + + if (RP3D_ACTIVE != SHADE_ACTIVE) + rigidBodyComponent->rp3dBody->setIsActive(SHADE_ACTIVE); + } + else // Check for a collider + { + + } + }; + + sceneGraph.Traverse(SYNC_ACTIVE); + } + + void SHPhysicsSystem::SyncTransforms(const SHSceneGraph& sceneGraph) const noexcept + { + const rp3d::decimal INTERPOLATION_FACTOR = static_cast(accumulatedTime / fixedDT); + + static const auto SYNC_TRANSFORMS = [&](SHSceneNode* node) + { + const EntityID ENTITY_ID = node->GetEntityID(); + + // Check if has rigid body + if (auto* rb = SHComponentManager::GetComponent_s(ENTITY_ID); rb) + { + if (node->IsActive() && rb->isActive) + { + // Get SHADE transform + auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + SHASSERT(transformComponent != nullptr, "Transform Component missing from Entity " + std::to_string(ENTITY_ID)) + + SHVec3 shadePos, shadeRot; + + if (rb->interpolate) + { + const rp3d::Transform CURRENT_TRANSFORM = rb->rp3dBody->getTransform(); + const rp3d::Transform INTERPOLATED_TRANSFORM = rp3d::Transform::interpolateTransforms(rb->prevTransform, CURRENT_TRANSFORM, INTERPOLATION_FACTOR); + + const auto& RP3D_POS = INTERPOLATED_TRANSFORM.getPosition(); + shadePos = SHVec3{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; + + const auto& RP3D_ORT = INTERPOLATED_TRANSFORM.getOrientation(); + shadeRot = SHQuaternion{ RP3D_ORT.x, RP3D_ORT.y, RP3D_ORT.z, RP3D_ORT.w }.ToEuler(); + + rb->prevTransform = CURRENT_TRANSFORM; + } + else + { + + const auto& RP3D_POS = rb->GetPosition(); + shadePos = SHVec3{ RP3D_POS.x, RP3D_POS.y, RP3D_POS.z }; + shadeRot = rb->GetOrientation().ToEuler(); + } + + transformComponent->SetWorldPosition(shadePos); + transformComponent->SetWorldRotation(shadeRot); + } + else // Check for a collider + { + + } + } + }; + + sceneGraph.Traverse(SYNC_TRANSFORMS); + } + void SHPhysicsSystem::AddRigidBody(EntityID entityID) const noexcept { @@ -413,7 +379,8 @@ namespace SHADE rigidBodyComponent = SHComponentManager::GetComponent(entityID); } - rigidBodyComponent->rigidBody = world->createRigidBody(RP3D_TF); + rigidBodyComponent->rp3dBody = world->createRigidBody(RP3D_TF); + rigidBodyComponent->prevTransform = RP3D_TF; rigidBodyComponent->SyncRP3DAndSHADE(); // Reassign collider @@ -438,9 +405,8 @@ namespace SHADE // If a collider exists, remake the colliders with a collision body - world->destroyRigidBody(rigidBodyComponent->rigidBody); - rigidBodyComponent->rigidBody = nullptr; // this should be redundant + world->destroyRigidBody(reinterpret_cast(rigidBodyComponent->rp3dBody)); + rigidBodyComponent->rp3dBody = nullptr; // this should be redundant } - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index dac6836a..273eb54d 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -11,14 +11,12 @@ #pragma once #include -#include #include // Project Headers #include "Math/SHQuaternion.h" #include "Components/SHRigidBodyComponent.h" - #include "Scene/SHSceneGraph.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" @@ -31,6 +29,13 @@ namespace SHADE class SH_API SHPhysicsSystem : public SHSystem { + protected: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsObject; + public: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -48,18 +53,7 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHPhysicsSystem () = default; - ~SHPhysicsSystem () override = default; - - SHPhysicsSystem (const SHPhysicsSystem&) = delete; - SHPhysicsSystem (SHPhysicsSystem&&) = delete; - - /*---------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*---------------------------------------------------------------------------------*/ - - SHPhysicsSystem& operator= (const SHPhysicsSystem&) = delete; - SHPhysicsSystem& operator= (SHPhysicsSystem&&) = delete; + SHPhysicsSystem(); /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -67,7 +61,6 @@ namespace SHADE [[nodiscard]] bool IsSleepingEnabled () const noexcept; - //[[nodiscard]] double GetFixedUpdate () const noexcept; [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; @@ -92,11 +85,6 @@ namespace SHADE void Init () override; void Exit () override; - void AddRigidBodyComponent (EntityID id) noexcept; - void AddColliderComponent (EntityID id) noexcept; - void RemoveRigidBodyComponent (EntityID id) noexcept; - void RemoveColliderComponent (EntityID id) noexcept; - /*---------------------------------------------------------------------------------*/ /* System Routines */ /*---------------------------------------------------------------------------------*/ @@ -109,17 +97,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ PhysicsPreUpdate(); - ~PhysicsPreUpdate() = default; - - PhysicsPreUpdate(const PhysicsPreUpdate&) = delete; - PhysicsPreUpdate(PhysicsPreUpdate&&) = delete; - - /*-------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*-------------------------------------------------------------------------------*/ - - PhysicsPreUpdate& operator= (const PhysicsPreUpdate&) = delete; - PhysicsPreUpdate& operator= (PhysicsPreUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ @@ -136,17 +113,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ PhysicsFixedUpdate(); - ~PhysicsFixedUpdate() = default; - - PhysicsFixedUpdate(const PhysicsFixedUpdate&) = delete; - PhysicsFixedUpdate(PhysicsFixedUpdate&&) = delete; - - /*-------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*-------------------------------------------------------------------------------*/ - - PhysicsFixedUpdate& operator= (const PhysicsFixedUpdate&) = delete; - PhysicsFixedUpdate& operator= (PhysicsFixedUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ @@ -164,17 +130,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ PhysicsPostUpdate(); - ~PhysicsPostUpdate() = default; - - PhysicsPostUpdate(const PhysicsPostUpdate&) = delete; - PhysicsPostUpdate(PhysicsPostUpdate&&) = delete; - - /*-------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*-------------------------------------------------------------------------------*/ - - PhysicsPostUpdate& operator= (const PhysicsPostUpdate&) = delete; - PhysicsPostUpdate& operator= (PhysicsPostUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ @@ -183,8 +138,7 @@ namespace SHADE void Execute(double dt) noexcept override; }; - - private: + protected: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ @@ -199,38 +153,41 @@ namespace SHADE EntityID entityID; }; - struct CachedTransform - { - SHVec3 position; - SHQuaternion orientation; - }; + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + void AddComponent (UpdateComponent comp, EntityID entityID) noexcept; + void RemoveComponent (UpdateComponent comp, EntityID entityID) noexcept; + + private: /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ - //double interpolationFactor; - //double fixedUpdate; + // TODO(Diren): Store interpFactor & fixedUpdate for modifiable fixedDT - double accumulatedTime; - double fixedDT; + double accumulatedTime; + double fixedDT; - rp3d::PhysicsCommon factory; - rp3d::PhysicsWorld* world; + rp3d::PhysicsCommon factory; + rp3d::PhysicsWorld* world; - std::queue updateQueue; - std::unordered_map prevTransforms; // used for interpolation + std::queue updateQueue; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - void ClearUpdateQueue () noexcept; + void ClearUpdateQueue () noexcept; + void SyncActiveStates (const SHSceneGraph& sceneGraph) const noexcept; + void SyncTransforms (const SHSceneGraph& sceneGraph) const noexcept; + // TODO(Diren): Trigger handling - void AddRigidBody (EntityID entityID) const noexcept; - void AddCollider (EntityID entityID) const noexcept; - void RemoveRigidBody (EntityID entityID) const noexcept; - void RemoveCollider (EntityID entityID) const noexcept; + void AddRigidBody (EntityID entityID) const noexcept; + void AddCollider (EntityID entityID) const noexcept; + void RemoveRigidBody (EntityID entityID) const noexcept; + void RemoveCollider (EntityID entityID) const noexcept; }; From 70559204bffb23beacc8a6a60654fd305a251519 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 28 Sep 2022 23:55:44 +0800 Subject: [PATCH 285/793] Added spinning raccoons and fixed TRansform component bug --- SHADE_Application/src/Scenes/SBTestScene.cpp | 24 +++++++++++--- SHADE_Managed/src/Components/Transform.cxx | 2 +- TempScriptsFolder/RaccoonShowcase.cs | 31 ++++++++++++++++++ TempScriptsFolder/RaccoonSpin.cs | 24 ++++++++++++++ TempScriptsFolder/TestScript.cs | 34 -------------------- 5 files changed, 75 insertions(+), 40 deletions(-) create mode 100644 TempScriptsFolder/RaccoonShowcase.cs create mode 100644 TempScriptsFolder/RaccoonSpin.cs delete mode 100644 TempScriptsFolder/TestScript.cs diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index a6aa0f36..664497df 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -44,7 +44,7 @@ namespace Sandbox { if (mesh.meshName == "Cube.012") { - handles.push_back(graphicsSystem->AddMesh( + handles.push_back(graphicsSystem->AddMesh( mesh.header.vertexCount, mesh.vertexPosition.data(), mesh.texCoords.data(), @@ -107,9 +107,9 @@ namespace Sandbox stressTestObjects.emplace_back(entity); } - auto entity = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); + auto raccoonSpin = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); + auto& transform = *SHComponentManager::GetComponent_s(raccoonSpin); renderable.Mesh = handles.front(); renderable.SetMaterial(customMat); @@ -137,7 +137,21 @@ namespace Sandbox //testObjRenderable.SetMaterial(matInst); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(testObj, "TestScript"); + scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); + + auto raccoonShowcase = SHEntityManager::CreateEntity(); + auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); + + renderableShowcase.Mesh = handles.front(); + renderableShowcase.SetMaterial(customMat); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + + transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); + transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); + scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); } void SBTestScene::Update(float dt) diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx index e065015e..0f0716dc 100644 --- a/SHADE_Managed/src/Components/Transform.cxx +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -35,7 +35,7 @@ namespace SHADE } void Transform::LocalRotation::set(Vector3 val) { - GetNativeComponent()->SetLocalPosition(Convert::ToNative(val)); + GetNativeComponent()->SetLocalRotation(Convert::ToNative(val)); } Vector3 Transform::LocalScale::get() { diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs new file mode 100644 index 00000000..e2d6454d --- /dev/null +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -0,0 +1,31 @@ +using SHADE; +using System; + +public class RaccoonShowcase : Script +{ + public double RotateSpeed = 1.0; + public Vector3 ScaleSpeed = new Vector3(1.0, 1.0, 0.0); + private Transform Transform; + private double rotation = 0.0; + private Vector3 scale = Vector3.Zero; + private double originalScale = 1.0f; + public RaccoonShowcase(GameObject gameObj) : base(gameObj) {} + + protected override void awake() + { + Transform = GetComponent(); + if (Transform == null) + { + Debug.LogError("Transform is NULL!"); + } + + originalScale = Transform.LocalScale.z; + } + protected override void update() + { + rotation += RotateSpeed * 0.16; + scale += ScaleSpeed * 0.16; + Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); + Transform.LocalScale = new Vector3(System.Math.Abs(System.Math.Sin(scale.x)) * originalScale, System.Math.Abs(System.Math.Cos(scale.y)) * originalScale, System.Math.Abs(System.Math.Sin(scale.z)) * originalScale); + } +} \ No newline at end of file diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs new file mode 100644 index 00000000..7785cfd5 --- /dev/null +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -0,0 +1,24 @@ +using SHADE; +using System; + +public class RaccoonSpin : Script +{ + public double RotateSpeed = 1.0; + private double rotation = 0.0; + private Transform Transform; + public RaccoonSpin(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + Transform = GetComponent(); + if (Transform == null) + { + Debug.LogError("Transform is NULL!"); + } + } + protected override void update() + { + rotation += RotateSpeed * 0.16; + Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); + } +} \ No newline at end of file diff --git a/TempScriptsFolder/TestScript.cs b/TempScriptsFolder/TestScript.cs deleted file mode 100644 index 185b543e..00000000 --- a/TempScriptsFolder/TestScript.cs +++ /dev/null @@ -1,34 +0,0 @@ -using SHADE; - -public class TestScript : Script -{ - public double Speed = 1.0; - public Vector3 ATestVector; - public bool ABoolean; - private Transform Transform; - private double time = 0.0; - public TestScript(GameObject gameObj) : base(gameObj) {} - - protected override void awake() - { - Debug.Log("TestScript.Awake()"); - Transform = GetComponent(); - if (Transform == null) - { - Debug.LogError("Transform is NULL!"); - } - } - protected override void start() - { - Debug.Log("TestScript.Start()"); - } - protected override void update() - { - time += Speed * 0.16; - Transform.GlobalPosition = new Vector3(System.Math.Sin(time), System.Math.Cos(time), 0.0f); - } - protected override void onDestroy() - { - Debug.Log("TestScript.OnDestroy()"); - } -} \ No newline at end of file From b1a799cf052471c6e125123a5ec9e09ec76372d3 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 29 Sep 2022 07:59:04 +0800 Subject: [PATCH 286/793] Attempt using dllimport/dllexport --- .../src/Application/SBApplication.cpp | 4 ++++ SHADE_Engine/src/ECS_Base/General/SHFamily.cpp | 15 +++++++++++++++ SHADE_Engine/src/ECS_Base/General/SHFamily.h | 16 +++++++++++----- SHADE_Engine/src/ECS_Base/SHECSMacros.h | 10 ++++++++++ SHADE_Engine/src/Editor/SHEditor.cpp | 5 ++++- 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 SHADE_Engine/src/ECS_Base/General/SHFamily.cpp diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 64095e03..0847de65 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -32,6 +32,8 @@ #include "Assets/SHAssetManager.h" +#include "Tools/SHLogger.h" + using namespace SHADE; namespace Sandbox @@ -110,6 +112,8 @@ namespace Sandbox //TODO: Change true to window is open while (!window.WindowShouldClose()) { + auto id = SystemFamily::GetID(); + SHLOG_INFO("Transform system id in application : {} {}", id, SystemFamily::currentID); SHFrameRateController::UpdateFRC(); SHSceneManager::UpdateSceneManager(); SHSceneManager::SceneUpdate(1/60.0f); diff --git a/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp b/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp new file mode 100644 index 00000000..d51a8b35 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp @@ -0,0 +1,15 @@ +#pragma once +#define COMPULING_THE_DLL +#include "SHFamily.h" +#include "SHpch.h" + +namespace SHADE +{ + //initialize currentID as 0 + + + + + + +} diff --git a/SHADE_Engine/src/ECS_Base/General/SHFamily.h b/SHADE_Engine/src/ECS_Base/General/SHFamily.h index 5815703f..7ef01f54 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHFamily.h +++ b/SHADE_Engine/src/ECS_Base/General/SHFamily.h @@ -18,12 +18,12 @@ namespace SHADE { + template class SHFamilyID { private: - //this is used to keep track of the new current ID to be assign to a new Derived class type. - static ComponentTypeID currentID; + /*!************************************************************************* * \brief Construct a new SHFamilyID object @@ -46,6 +46,9 @@ namespace SHADE } public: + //this is used to keep track of the new current ID to be assign to a new Derived class type. + static MY_DLL_EXPORT ComponentTypeID currentID; + /*!************************************************************************* * \brief * Checks if this identifier is cuurrently in use / valid. @@ -59,7 +62,6 @@ namespace SHADE { return(id < currentID); } - /*!************************************************************************* * \brief * Get the ID of a derived class type. @@ -75,9 +77,13 @@ namespace SHADE static ComponentTypeID id = currentID++; return id; } + + + }; - //initialize currentID as 0 + +#ifdef COMPILING_THE_DLL template ComponentTypeID SHFamilyID::currentID = 0; - +#endif } \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/SHECSMacros.h b/SHADE_Engine/src/ECS_Base/SHECSMacros.h index 02615ca4..8de356f8 100644 --- a/SHADE_Engine/src/ECS_Base/SHECSMacros.h +++ b/SHADE_Engine/src/ECS_Base/SHECSMacros.h @@ -26,4 +26,14 @@ const EntityIndex MAX_EID = 51000; #define ENABLE_IF_UINT(_TYPE, _RETURN)\ typename std::enable_if<(std::is_integral<_TYPE>::value && !std::is_signed<_TYPE>::value),_RETURN>::type +#ifdef COMPILING_THE_DLL +#ifndef MY_DLL_EXPORT + #define MY_DLL_EXPORT __declspec(dllexport) +#endif +#else +#ifndef MY_DLL_EXPORT + #define MY_DLL_EXPORT __declspec(dllimport) +#endif +#endif + #endif \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index b36518fd..f1a363e3 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -23,6 +23,8 @@ #include "SHEditor.hpp" #include "SHEditorWidgets.hpp" +#include "Math/Transform/SHTransformSystem.h" + //#==============================================================# //|| Editor Window Includes || //#==============================================================# @@ -104,7 +106,8 @@ namespace SHADE { (void)dt; NewFrame(); - + auto id = SystemFamily::GetID(); + SHLOG_INFO("Transform system id in Editor Update : {} {}", id, SystemFamily::currentID); for (const auto& window : editorWindows | std::views::values) { if(window->isOpen) From 584b7e425f4ed47f15fe6ae9f2389cbd1fbcfde8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 30 Sep 2022 08:57:25 +0800 Subject: [PATCH 287/793] WIP Write meta files to track whether raw asset (fbx/gltf/dds) have been compiled into custom binary --- .../src/Application/SBApplication.cpp | 3 +-- SHADE_Application/src/Scenes/SBTestScene.cpp | 6 +++--- .../src/Assets/Libraries/SHTextureLoader.cpp | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 3 ++- SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp | 15 ++++++++++++++- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 64095e03..0412028e 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -82,9 +82,8 @@ namespace Sandbox //TODO: REMOVE AFTER PRESENTATION SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); - SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); + //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); - SHADE::SHAssetManager::LoadDataTemp("../../Assets/TD_Checker_Base_Color.dds"); //TODO: REMOVE AFTER PRESENTATION //SHADE::SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 664497df..7c7ad1e0 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -71,7 +71,7 @@ namespace Sandbox auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); auto customMat = graphicsSystem->AddMaterialInstanceCopy(matInst); customMat->SetProperty("data.color", SHVec4(0.0f, 1.0f, 1.0f, 1.0f)); - customMat->SetProperty("data.textureIndex", 1); + customMat->SetProperty("data.textureIndex", 0); customMat->SetProperty("data.alpha", 0.1f); // Create Stress Test Objects @@ -115,7 +115,7 @@ namespace Sandbox renderable.SetMaterial(customMat); renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); transform.SetWorldPosition ({-3.0f, -1.0f, -1.0f}); transform.SetLocalScale({5.0f, 5.0f, 5.0f}); @@ -147,7 +147,7 @@ namespace Sandbox renderableShowcase.SetMaterial(customMat); renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index ad7f10ea..f70e21d8 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -103,7 +103,7 @@ namespace SHADE file >> asset.numBytes; file >> asset.width; file >> asset.height; - file >> format; + //file >> format; } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 60e35ab3..6c617c04 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -199,7 +199,8 @@ namespace SHADE { AssetPath path{ p }; - if (path.extension().string() == GLTF_EXTENSION) + if (path.extension().string() == FBX_EXTENSION + || path.extension().string() == GLTF_EXTENSION) { LoadGLTF( { diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index aabb0dc0..35d167d2 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -99,6 +99,7 @@ namespace SHADE ****************************************************************************/ void SHAssetMetaHandler::WriteMetaData(SHAsset const& meta) noexcept { + //TODO: Write into binary eventually std::string path{ meta.path.string() }; path.append(META_EXTENSION); @@ -109,9 +110,21 @@ namespace SHADE SHLOG_ERROR("Asset write path is invalid: {}", path); return; } - + + metaFile << "Name: " << meta.name << "\n"; metaFile << "ID: " << meta.id << "\n"; metaFile << "Type: " << static_cast(meta.type) << std::endl; + + //TODO Add in information that is specific to types like mesh + switch(meta.type) + { + case AssetType::MESH: + break; + + default: + void; + } + metaFile.close(); } From 114ae86a9f57940274c36fc8704eeabfe907225f Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 30 Sep 2022 20:13:18 +0800 Subject: [PATCH 288/793] Fixed SHFamilyID for SHSystem and SHComponent but still have issues with SHScene --- .../src/Application/SBApplication.cpp | 9 +++++-- .../src/ECS_Base/Components/SHComponent.h | 4 ++++ .../src/ECS_Base/General/SHFamily.cpp | 1 - SHADE_Engine/src/ECS_Base/General/SHFamily.h | 24 ++++++++++++------- .../src/ECS_Base/Managers/SHSystemManager.h | 3 +++ SHADE_Engine/src/ECS_Base/SHECSMacros.h | 10 +------- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 5 ++++ SHADE_Engine/src/Editor/SHEditor.cpp | 7 ++++-- SHADE_Engine/src/Scene/SHScene.h | 2 ++ SHADE_Engine/src/Scene/SHSceneManager.h | 7 +++--- 10 files changed, 47 insertions(+), 25 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 0847de65..3e9b0dce 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -87,6 +87,11 @@ namespace Sandbox SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/TD_Checker_Base_Color.dds"); + + + auto id = SHFamilyID::GetID(); + auto id2 = SHFamilyID::GetID(); + auto id3 = SHFamilyID::GetID(); //TODO: REMOVE AFTER PRESENTATION //SHADE::SHSystemManager::RegisterRoutine(); @@ -102,7 +107,9 @@ namespace Sandbox #else #endif + SHSceneManager::InitSceneManager("TestScene"); + SHFrameRateController::UpdateFRC(); } @@ -112,8 +119,6 @@ namespace Sandbox //TODO: Change true to window is open while (!window.WindowShouldClose()) { - auto id = SystemFamily::GetID(); - SHLOG_INFO("Transform system id in application : {} {}", id, SystemFamily::currentID); SHFrameRateController::UpdateFRC(); SHSceneManager::UpdateSceneManager(); SHSceneManager::SceneUpdate(1/60.0f); diff --git a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h index aba3ba51..cfcd724c 100644 --- a/SHADE_Engine/src/ECS_Base/Components/SHComponent.h +++ b/SHADE_Engine/src/ECS_Base/Components/SHComponent.h @@ -14,6 +14,7 @@ #include "SHpch.h" #include "../SHECSMacros.h" #include "SH_API.h" +#include "ECS_Base/General/SHFamily.h" namespace SHADE { @@ -117,4 +118,7 @@ namespace SHADE }; + + + template class SH_API SHFamilyID; } diff --git a/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp b/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp index d51a8b35..bd5c0378 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp +++ b/SHADE_Engine/src/ECS_Base/General/SHFamily.cpp @@ -1,5 +1,4 @@ #pragma once -#define COMPULING_THE_DLL #include "SHFamily.h" #include "SHpch.h" diff --git a/SHADE_Engine/src/ECS_Base/General/SHFamily.h b/SHADE_Engine/src/ECS_Base/General/SHFamily.h index 7ef01f54..51bd6a25 100644 --- a/SHADE_Engine/src/ECS_Base/General/SHFamily.h +++ b/SHADE_Engine/src/ECS_Base/General/SHFamily.h @@ -14,13 +14,14 @@ #pragma once #include "../SHECSMacros.h" +#include "SH_API.h" namespace SHADE { template - class SHFamilyID + class SH_API SHFamilyID { private: @@ -47,7 +48,7 @@ namespace SHADE public: //this is used to keep track of the new current ID to be assign to a new Derived class type. - static MY_DLL_EXPORT ComponentTypeID currentID; + static inline ComponentTypeID currentID = 0; /*!************************************************************************* * \brief @@ -70,20 +71,27 @@ namespace SHADE * @tparam DerivedClass * The derived class type that we are trying to get the ID of. ***************************************************************************/ +#ifdef SH_API_EXPORT template - static ENABLE_IF_DERIVED(ComponentTypeID, BaseClass, DerivedClass) GetID() noexcept + static SH_API ENABLE_IF_DERIVED(ComponentTypeID, BaseClass, DerivedClass) GetID() noexcept { //The first time a new derived class type call this get id, it will initialize id using the currentID from familyID class. - static ComponentTypeID id = currentID++; + static ComponentTypeID id = SHFamilyID::currentID++; return id; + //return 0; } +#else + template + static SH_API ENABLE_IF_DERIVED(ComponentTypeID, BaseClass, DerivedClass) GetID() noexcept; +#endif // SH_API_EXPORT + + }; -#ifdef COMPILING_THE_DLL - template - ComponentTypeID SHFamilyID::currentID = 0; -#endif + + + } \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index f92f6635..995a1cf5 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -68,6 +68,9 @@ namespace SHADE id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; } systemContainer.emplace(id, std::make_unique()); + + auto size = systemContainer.size(); + systemContainer[id].get()->systemID = id; return id; diff --git a/SHADE_Engine/src/ECS_Base/SHECSMacros.h b/SHADE_Engine/src/ECS_Base/SHECSMacros.h index 8de356f8..4690099f 100644 --- a/SHADE_Engine/src/ECS_Base/SHECSMacros.h +++ b/SHADE_Engine/src/ECS_Base/SHECSMacros.h @@ -26,14 +26,6 @@ const EntityIndex MAX_EID = 51000; #define ENABLE_IF_UINT(_TYPE, _RETURN)\ typename std::enable_if<(std::is_integral<_TYPE>::value && !std::is_signed<_TYPE>::value),_RETURN>::type -#ifdef COMPILING_THE_DLL -#ifndef MY_DLL_EXPORT - #define MY_DLL_EXPORT __declspec(dllexport) -#endif -#else -#ifndef MY_DLL_EXPORT - #define MY_DLL_EXPORT __declspec(dllimport) -#endif -#endif + #endif \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index 93ea6a59..fe852b9a 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -12,6 +12,7 @@ #include "../SHECSMacros.h" #include "SH_API.h" +#include "ECS_Base/General/SHFamily.h" namespace SHADE { @@ -69,5 +70,9 @@ namespace SHADE }; + template class SH_API SHFamilyID; + + + } \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index f1a363e3..e94f7398 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -89,6 +89,11 @@ namespace SHADE io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking InitFonts(); + + + auto id = SHFamilyID::GetID(); + auto id2 = SHFamilyID::GetID(); + auto id3 = SHFamilyID::GetID(); InitBackend(sdlWindow); SetStyle(Style::SHADE); @@ -106,8 +111,6 @@ namespace SHADE { (void)dt; NewFrame(); - auto id = SystemFamily::GetID(); - SHLOG_INFO("Transform system id in Editor Update : {} {}", id, SystemFamily::currentID); for (const auto& window : editorWindows | std::views::values) { if(window->isOpen) diff --git a/SHADE_Engine/src/Scene/SHScene.h b/SHADE_Engine/src/Scene/SHScene.h index 372981a6..a81c70ef 100644 --- a/SHADE_Engine/src/Scene/SHScene.h +++ b/SHADE_Engine/src/Scene/SHScene.h @@ -13,6 +13,7 @@ #include #include "SHSceneGraph.h" +#include "ECS_Base/General/SHFamily.h" namespace SHADE { @@ -42,6 +43,7 @@ namespace SHADE virtual void Unload() = 0; }; + template class SH_API SHFamilyID; } diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index 83ebab0f..2e4b1717 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -84,7 +84,8 @@ namespace SHADE { //prevSceneCreate = newScene; newScene = [sceneName]() { currentScene = new T(); currentScene->sceneName = sceneName; }; - nextSceneID = SHFamilyID::template GetID(); + //nextSceneID = SHFamilyID::GetID(); + nextSceneID = 0; sceneChanged = true; } @@ -101,13 +102,13 @@ namespace SHADE static std::enable_if_t, void> ChangeScene(std::string const& sceneName) noexcept { //check if this new Scene is current Scene (Use RestartScene instead) - if (currentSceneID == SHFamilyID::template GetID()) + if (currentSceneID == SHFamilyID::GetID()) { return; } //prevSceneCreate = newScene; newScene = [sceneName]() { currentScene = new T(); currentScene->sceneName; }; - nextSceneID = SHFamilyID::template GetID(); + nextSceneID = SHFamilyID::GetID(); sceneChanged = true; } From 2d07fb0afcae86ac9a3bcfc1653aae07919951e6 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 30 Sep 2022 20:25:26 +0800 Subject: [PATCH 289/793] Added component added and removed events --- .../ECS_Base/Events/SHComponentAddedEvent.h | 12 +++++++++ .../ECS_Base/Events/SHComponentRemovedEvent.h | 12 +++++++++ .../ECS_Base/Managers/SHComponentManager.h | 25 +++++++++++++++---- SHADE_Engine/src/Events/SHEventDefines.h | 2 ++ 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 SHADE_Engine/src/ECS_Base/Events/SHComponentAddedEvent.h create mode 100644 SHADE_Engine/src/ECS_Base/Events/SHComponentRemovedEvent.h diff --git a/SHADE_Engine/src/ECS_Base/Events/SHComponentAddedEvent.h b/SHADE_Engine/src/ECS_Base/Events/SHComponentAddedEvent.h new file mode 100644 index 00000000..1f2b62d5 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/Events/SHComponentAddedEvent.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" + +namespace SHADE +{ + struct SHComponentAddedEvent + { + EntityID eid; + ComponentTypeID addedComponentType; + }; +} diff --git a/SHADE_Engine/src/ECS_Base/Events/SHComponentRemovedEvent.h b/SHADE_Engine/src/ECS_Base/Events/SHComponentRemovedEvent.h new file mode 100644 index 00000000..34d6f9c8 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/Events/SHComponentRemovedEvent.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" + +namespace SHADE +{ + struct SHComponentRemovedEvent + { + EntityID eid; + ComponentTypeID removedComponentType; + }; +} diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 60625d6a..12b5b001 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -17,6 +17,8 @@ #include "../General/SHSparseSetContainer.h" #include "../Components/SHComponent.h" #include "../Components/SHComponentGroup.h" +#include "../Events/SHComponentAddedEvent.h" +#include "../Events/SHComponentRemovedEvent.h" //#include "Scene/SHSceneNode.h" #include "SH_API.h" @@ -216,6 +218,11 @@ namespace SHADE comp->OnCreate(); } + SHComponentAddedEvent eventData; + eventData.eid = entityID; + eventData.addedComponentType = ComponentFamily::GetID(); + + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_ADDED_EVENT); } /************************************************************************** @@ -247,6 +254,13 @@ namespace SHADE { comp->OnCreate(); } + + SHComponentAddedEvent eventData; + eventData.eid = entityID; + eventData.addedComponentType = componentTypeID; + + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_ADDED_EVENT); + } @@ -313,6 +327,12 @@ namespace SHADE componentSet.GetSparseSet()->Remove(EntityHandleGenerator::GetIndex(entityID)); + + SHComponentRemovedEvent eventData; + eventData.eid = entityID; + eventData.addedComponentType = ComponentFamily::GetID(); + + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); } /*!************************************************************************* @@ -464,11 +484,6 @@ namespace SHADE return componentGroups[index]; } - static void AddScriptComponent(EntityID eid, std::string const& scriptClassName) noexcept; - - static void RemoveScriptComponent(EntityID eid, std::string const& scriptClassName) noexcept; - - };// end SHComponentManager diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index f1e92b42..317b67c1 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -8,3 +8,5 @@ typedef uint32_t SHEventHandle; constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; constexpr SHEventIdentifier SH_ENTITY_DESTROYED_EVENT{ 1 }; constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT{ 2 }; +constexpr SHEventIdentifier SH_COMPONENT_ADDED_EVENT{ 3 }; +constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT{ 4 }; From e4be5e098766eb9a42aed8f1eaee327b14dc27ca Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 30 Sep 2022 20:34:46 +0800 Subject: [PATCH 290/793] Added event manager include --- SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h index 12b5b001..8921fbce 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.h @@ -21,6 +21,7 @@ #include "../Events/SHComponentRemovedEvent.h" //#include "Scene/SHSceneNode.h" #include "SH_API.h" +#include "Events/SHEventManager.hpp" #include @@ -330,7 +331,7 @@ namespace SHADE SHComponentRemovedEvent eventData; eventData.eid = entityID; - eventData.addedComponentType = ComponentFamily::GetID(); + eventData.removedComponentType = ComponentFamily::GetID(); SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); } From 8a3d3c8d4e92c789e022e24fea649fceac373e08 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 30 Sep 2022 22:08:17 +0800 Subject: [PATCH 291/793] SP3-237 SP3-103 SP3-104 Implemented SHTexture and SHMesh binary file writing and loading. NOT TESTED Added file level comments --- .../src/Assets/Asset Types/SHMeshAsset.h | 15 ++- .../src/Assets/Asset Types/SHTextureAsset.h | 3 - .../src/Assets/Libraries/SHMeshCompiler.cpp | 29 +++++ .../src/Assets/Libraries/SHMeshCompiler.h | 12 ++ .../src/Assets/Libraries/SHMeshLoader.cpp | 121 ++++++++++++++++-- .../src/Assets/Libraries/SHMeshLoader.h | 21 ++- .../Assets/Libraries/SHTextureCompiler.cpp | 24 ++++ .../src/Assets/Libraries/SHTextureCompiler.h | 12 ++ .../src/Assets/Libraries/SHTextureLoader.cpp | 41 +++++- .../src/Assets/Libraries/SHTextureLoader.h | 11 ++ SHADE_Engine/src/Assets/SHAsset.h | 11 ++ 11 files changed, 281 insertions(+), 19 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index 18674a04..68c0d150 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -1,3 +1,15 @@ +/*************************************************************************//** + * \file SHMeshAsset.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Struct to contain ready data for loading into GPU. Also used for + * compilation into binary files + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #include @@ -10,6 +22,7 @@ namespace SHADE { uint32_t vertexCount; uint32_t indexCount; + std::string meshName; }; struct SH_API SHMeshAsset @@ -19,8 +32,6 @@ namespace SHADE SHMeshAssetHeader header; - std::string meshName; - std::vector vertexPosition; std::vector vertexTangent; std::vector vertexNormal; diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index d3b69e32..94b1b74c 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -1,11 +1,8 @@ #pragma once #include "tinyddsloader.h" - #include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" -#include - namespace SHADE { struct SHTextureAsset diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 1a9dede2..6d4b6fcb 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -1,5 +1,18 @@ +/*************************************************************************//** + * \file SHMeshCompiler.cpp + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to write data in SHMeshAsset into binary file for faster + * loading in the future + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #include "SHpch.h" #include "SHMeshCompiler.h" +#include "Graphics/MiddleEnd/Meshes/SHMeshData.h" #include @@ -21,6 +34,17 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat sizeof(uint32_t) ); + uint32_t charCount{static_cast(asset.header.meshName.size())}; + file.write( + reinterpret_cast(&charCount), + sizeof(uint32_t) + ); + + file.write( + asset.header.meshName.c_str(), + asset.header.meshName.size() + ); + auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount}; auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount}; @@ -44,5 +68,10 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat vertexVec2Byte ); + file.write( + reinterpret_cast(asset.indices.data()), + sizeof(uint32_t) + ); + file.close(); } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h index 090e241e..6da00525 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h @@ -1,3 +1,15 @@ +/*************************************************************************//** + * \file SHMeshCompiler.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to write data in SHMeshAsset into binary file for faster + * loading in the future + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #include "../Asset Types/SHMeshAsset.h" diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index fc4ff435..a1a8b29c 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -1,6 +1,19 @@ +/*************************************************************************//** + * \file SHMeshLoader.cpp + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Implementation for Mesh loader. Accounts for custom binary format + * as well as GLTF file format. + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #include "SHpch.h" #include "SHMeshLoader.h" #include +#include namespace SHADE { @@ -27,10 +40,11 @@ namespace SHADE SHMeshAsset result { .compiled { false}, - .changed { false }, - .meshName { mesh.mName.C_Str() } + .changed { false } }; + result.header.meshName = mesh.mName.C_Str(); + for (size_t i{0}; i < mesh.mNumVertices; ++i) { // Vertex position @@ -85,15 +99,15 @@ namespace SHADE return result; } - bool SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) - { + void SHMeshLoader::LoadExternal(std::vector& meshes, AssetPath path) noexcept + { const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible - | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing + | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing | aiProcess_RemoveRedundantMaterials // remove redundant materials | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs @@ -102,7 +116,7 @@ namespace SHADE if (!scene || !scene->HasMeshes()) { SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); - return false; + return; } //TODO MATERIALS FROM MESHES @@ -112,14 +126,103 @@ namespace SHADE // { // if (scene->mMaterials[i]->mNumProperties > 0) // { - // for (int j{0}; j < scene->mMaterials[i]->mProperties[j].) + // for (int j{0}; j < scene->mMaterials[i]->mProperties[j].) // } - //std::cout << scene->mMaterials[i]->; + //std::cout << scene->mMaterials[i]->; // } //} ProcessNode(*scene->mRootNode, *scene, meshes); + } - return true; + void SHMeshLoader::LoadSHMesh(SHMeshAsset& mesh, AssetPath path) noexcept + { + std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; + if (!file.is_open()) + { + SHLOG_ERROR("Unable to open SHMesh File: {}", path.string()); + } + + uint32_t vertCount, indexCount, charCount; + std::vector vertPos, vertTan, vertNorm; + std::vector texCoord; + std::vector indices; + + std::string name; + + file >> vertCount; + file >> indexCount; + file >> charCount; + + vertPos.resize(vertCount); + vertTan.resize(vertCount); + vertNorm.resize(vertCount); + texCoord.resize(vertCount); + indices.resize(indexCount); + + name.reserve(charCount); + for (auto i{0}; i < charCount; ++i) + { + file >> name[i]; + } + + for (auto i{ 0 }; i < vertCount; ++i) + { + file >> vertPos[i].x; + file >> vertPos[i].y; + file >> vertPos[i].z; + } + + for (auto i{ 0 }; i < vertCount; ++i) + { + file >> vertTan[i].x; + file >> vertTan[i].y; + file >> vertTan[i].z; + } + + for (auto i{ 0 }; i < vertCount; ++i) + { + file >> vertNorm[i].x; + file >> vertNorm[i].y; + file >> vertNorm[i].z; + } + + for (auto i{ 0 }; i < vertCount; ++i) + { + file >> texCoord[i].x; + file >> texCoord[i].y; + } + + for (auto i{ 0 }; i < indexCount; ++i) + { + file >> indices[i]; + } + + mesh.compiled = true; + mesh.changed = false; + + mesh.header.indexCount = indexCount; + mesh.header.vertexCount = vertCount; + mesh.header.meshName = name; + + mesh.vertexPosition = std::move(vertPos); + mesh.vertexTangent = std::move(vertTan); + mesh.vertexNormal = std::move(vertNorm); + mesh.texCoords = std::move(texCoord); + mesh.indices = std::move(indices); + + file.close(); + } + + void SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) + { + if (path.extension().string() == GLTF_EXTENSION) + { + LoadExternal(meshes, path); + return; + } + + meshes.emplace_back(); + LoadSHMesh(meshes.back(), path); } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index fc8b548a..3e430aca 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -1,3 +1,14 @@ +/*************************************************************************//** + * \file SHMeshLoader.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to load gltf mesh files and custom binary format + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #include #include @@ -12,10 +23,14 @@ namespace SHADE private: static Assimp::Importer aiImporter; - static void ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes); + static void ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) noexcept; - static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene); + static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept; + + static void LoadExternal(std::vector& meshes, AssetPath path) noexcept; + + static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept; public: - static bool LoadMesh(std::vector& meshes, AssetPath path); + static void LoadMesh(std::vector& meshes, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp index 342a0aee..a2fc3b77 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp @@ -1,3 +1,15 @@ +/*************************************************************************//** + * \file SHTextureCompiler.cpp + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to write data in SHTextureAsset into binary file for + * faster loading in the future + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #include "SHpch.h" #include "SHTextureCompiler.h" @@ -15,6 +27,8 @@ namespace SHADE auto const intBytes{sizeof(uint32_t)}; + uint32_t mipOffsetCount{ static_cast(asset.mipOffsets.size()) }; + file.write( reinterpret_cast(&asset.numBytes), intBytes @@ -35,6 +49,16 @@ namespace SHADE sizeof(SHTexture::PixelChannel) ); + file.write( + reinterpret_cast(&mipOffsetCount), + intBytes + ); + + file.write( + reinterpret_cast(&asset.numBytes), + intBytes + ); + file.write( reinterpret_cast(asset.mipOffsets.data()), intBytes * asset.mipOffsets.size() diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h index 494907f7..d8685795 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h @@ -1,3 +1,15 @@ +/*************************************************************************//** + * \file SHTextureCompiler.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to write data in SHTextureAsset into binary file for + * faster loading in the future + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #include "Assets/Asset Types/SHTextureAsset.h" diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index f70e21d8..68f86030 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -1,3 +1,14 @@ +/*************************************************************************//** + * \file SHTextureLoader.cpp + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to load dds textures and custom binary format + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #include "SHpch.h" #include "SHTextureLoader.h" @@ -98,13 +109,39 @@ namespace SHADE SHLOG_ERROR("Error opening SHTexture file: {}", path.string()); } - VkFormat format; + tinyddsloader::DDSFile::DXGIFormat format; + uint32_t formatCarrier; + uint32_t mipCount; + uint32_t byteCount; file >> asset.numBytes; file >> asset.width; file >> asset.height; - //file >> format; + file >> formatCarrier; + asset.format = ddsLoaderToVkFormat(static_cast(formatCarrier), true); + + file >> mipCount; + file >> byteCount; + + std::vector mips(mipCount); + for (auto i {0}; i < mipCount; ++i) + { + file >> mips[i]; + } + + asset.mipOffsets = std::move(mips); + + auto pixel = new SHTexture::PixelChannel[byteCount]; + auto pixelIt{ pixel }; + + while(!file.eof()) + { + file >> *(pixelIt++); + } + asset.pixelData = std::move( pixel ); + + file.close(); } void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index ecc35605..e84fe5cf 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -1,3 +1,14 @@ +/*************************************************************************//** + * \file SHTextureLoader.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Library to load dds textures and custom binary format + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #define TINYDDSLOADER_IMPLEMENTATION diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h index 0ba2285f..8d7b55d1 100644 --- a/SHADE_Engine/src/Assets/SHAsset.h +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -1,3 +1,14 @@ +/*************************************************************************//** + * \file SHAsset.h + * \author Loh Xiao Qi + * \date 30 September 2022 + * \brief Struct for asset identification and meta file writing + * + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #pragma once #include "Filesystem/SHFileSystem.h" From 5069a42319ee3142cef93c0f56e7f9f85e820593 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 1 Oct 2022 13:12:37 +0800 Subject: [PATCH 292/793] SP3-237 Mesh compile and load successfully. Although now path to load/compile is hardcoded. Flow will be done after MS1 --- Assets/Cube.003.shmesh | Bin 0 -> 31656 bytes Assets/Cube.012.shmesh | Bin 0 -> 223192 bytes .../src/Application/SBApplication.cpp | 3 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- .../src/Assets/Libraries/SHMeshCompiler.cpp | 19 ++-- .../src/Assets/Libraries/SHMeshLoader.cpp | 90 +++++++++--------- SHADE_Engine/src/Assets/SHAssetManager.cpp | 10 +- 7 files changed, 65 insertions(+), 59 deletions(-) create mode 100644 Assets/Cube.003.shmesh create mode 100644 Assets/Cube.012.shmesh diff --git a/Assets/Cube.003.shmesh b/Assets/Cube.003.shmesh new file mode 100644 index 0000000000000000000000000000000000000000..54cfb867570cf8bdca307ccb4b2763a4bbd29892 GIT binary patch literal 31656 zcmZ^~c{r8d7ypf9h$tarGN%+#5ofPel8C4X5v6&MAx)G@n#owmJVs?I8gTaBrXrf> zk_L@ZY1Z6xe$Vy%p3CQt?|-jrU-wz(zR$hZI%~c6+CRm`#74`Ci7B7ZqvJvt?1*Wn z|KTbP+B~TVl%#8^a(@|8}bTv*`N& zYv=#0|6e;FZza)5Lu(=G%u@PczAx?i&;oB>&!8^;iFCXeg)@c6XaVnN;Y8vQz;nS2?R4zpf0(01{=f}YC> zu(13s4IgGf2c9klQ}GV!*0@8c@SMW7*%zopQ~;@8e-yeU?$ZN5C(<+R1rYZoo>o|1 z6=Xb*h333GTKr@U$xbPP3IF!eCs!PVwUI)QC=8_6U5?QEp>;6nW9)xeV%aWQ(%t~M ze)ja`N?$slrX3`PZ~hP4W$vVw3(v#L%SUOnbTl0nR1MuBO;k-YgPfAgg?009)3PmR ziTU3o_*!w9j%d#%w}$M888@r`!&{eJB7eP(K?ff)Ldd=+v+ZwGSW;qlc&Rp;%-{c)Tq1Ec^DBbq)yih z1@3E4L8aa;TJ&NUEvl#l{YjhX4Iv1B+)jZZ8QE09@B~pW&V-<|yQz3 z^I$zG@;@xEo<`o^&xXMZ?@^?Q zeyS2C4!TFrwFHw7+mFEwxtr8{KpEM$EEgOPUZy_FHR$fWtx%m@PKzz9gt9B@A;Z6c zYNs>^-u$VCHLI>rNlzbg$+id@QyXDk4)e$bnziGgP=AdO zwpO)K>zDU!z0*seN8`bAMm$&;6ghKlhKd|Hb`d;eT;| z|M_3s|6Tkq4ylY1Zfv9=Zg`&72gL~wI0@nR-i!2uYydHIKMHH^-lbn2%_kNbMPL`$ zL5-dj2x^^Afo0zfny@lKusWd<&ON$A6CS4%wP!i-Y3wa}ZK67@eclZDUUhV5XDabL zmko)Qcd1ZgBpr0A33j?Ms(vk+{(4ajQmT#gdxS2v`PvM8>?|tLrcLLTw1RbV8BH$P zO}i{kg1_ZPdVi`nofBURPl_Dqw$j1$P)r*v{JQ%;eEfMFeOyohhR^b7fBtIePW5v+ zB=2sf!MSC`(+$z{6Yd>~0k+6N<})2Z>+5VFBJ7EZo@N)^waAfZv2pn79BJuY^L z)W1jprRwMON8AE(v~CYfyV~#{wjX9``=pH zm=az>^?I6Y3o}l@t~oihQ5YaFQpkm$k!3VXl?nd(90hyV0{S)Xn;>UG1~?okr!S=R zNUF&GoQ4AGq%)Pw66L_p`6p=0{@KJzEejeHaw+wVBv;##AnryM?RdYB?C?GU1-9|j z#y^KhY>fvD-9sgekCWx2Q=sZnFx4K`Na*WW2;4ZGT3u=;qhpfcVTc)(oP3uoTpt5p zr7sBASllAYU5T*Jv|6aX{4oie5Cc2z>ex=WH65-z8y(VjyDOQ^6ni zTV&JAL|8fCqJXYr#ALuhPz`q_4Xq92#KvS;d2JGTB%48$NIa}PzMG`2EhfoN4?|PZ zTJpsqjId!zkTE%pr2X1M=13m_t!Mklh>S@j@x@_SyC$E64RI%b!ZX2S-C=U&RhJ;& zKOKs{93{uRRY~g8Tv%J4PUOxy3d%flpuwetM13w4ypui(aV(RBh$Y%I-^hm&yCTxL z>a4BK{1b5eW(F~f2@x9Fm%yTsG}6;^rcRAj!0PT~qL|(z^vy2^FXsbfqja8d{`Auj zv1SjEIxvau@jnecu#Q~$HJDag*FliqTB1mUY0b7eIN3aheER7^FQPfL;bpc*QC)dKHaPY8mP za%jcP%WzmLPf*p`K&K{Lgz|YYHrg3Q)LZ*1O!#=%#&1?Fy+5cGGEb)oU9xj%;rYuj zcjiIi`x8g$pR1ynq64V0YCMhYYJ;})-@;?BV(Ctgde~Gtp1y4jrh9!_pek$(4Y<36 zK2NTL92;*sQpK7|ylaFf7Vh-W(9!gY(ivD^zMYDxNz=cJDBSSeK(*Js5Gv(VLecU> zDhQ|(n#Z4oVLtom{rMrnuG-^}wlj-v*!sTCr|=}K2{}yVQa;&U49*8jeuB<4S}8bn zqXY!f`E*KtfUTTU2^@G{K#wg=6>ObY0Qt*GXwSb2!Iq3Hc;Z`55Bm=wp+<$UyS{+- zQ3WzNDH{sM9-|>YMv&#d(%`XLIW@UuP5$o7fpUuidSjRq+4u1X{Jc>_7e8M}Bq zUxlMI${?6X4$XiiJ!y2-m1uHeXbRxo6uN0s9NDUn2u*8~sk9)S1fETWTMKtl-ReS; zcRLC0ZQ4e6jz2}ds>DH3O&~qExQ47~I0TVSb7@^<6Unqn0AF7lD!u12IW!;^LT;$i z<&Brf%;Y3E`9X@t*WD)5j>m!D8=+8kawk!-iGe%AEreG(?-A?BM4(4T3oU*;B;`(V zFw^C?&CHliGR-*#RHVWM?&|l+y&Z|rrr{+R^ZYiMCyWDqwcCP+uP>1$#<6flTaSp_ zUm{x*lb|kQ2=OwjC%-2r!0^L%M9HL#yi|;XUs9puL)vMQ8h;2(Lg$h7qw|PWQW6YJ z*h*x}_Y=9e1ZdStAkH&WN%E>xP|e*z>U?&PV=;%p;y?m9>pPG9c$y4_ld{PTu@Dk+ zEFH|g#*_Bj_N3M92%PzlLAG8{CJh7A;H*^<`5HTsL?mXzB#_+pPL1@uIG|Z zYqAAazcbfpM0JC*mla0JTUJnCWlu#3)&k? z;P|&pqI`Uz?eQVSuqip0bQRyO`#iGiZ z1`Rmc0@sGike%ctZE(5(U!7kF{<@~omrF0fm{FYqVpmH4cDBJSI4U^g&8fQjMVRFV z0_&OrYIpGp93MYk@atq1z2q-TIA{oE%?fE_t>~H?gM_C(meSZ) zZBSvBEEE)-q+RJ3U`p>TVf}p3cLiU9=A4Vd_Gjso-fsa5F>&fSDxLl)ZUpl^nl#jD z7xkEM5qe@(=z`##RQY}rVAMD|fBbfuCCR{O(RBLA#)GCio(C>7g_`%yqMgWLVck4h zF?a^`>^ukhFW1ncrP`thu7{hSm(sC^)#!(s8VK4ML3jTiOa+UoV7=9T`ttZ|;l}N? z@N4Q$TDbk1P)@BHbo>v}83~obJEzM)>0T=J!*Jo2jA~Jz6;GdXOW^{ua*&KTLPx%T zRClSV7&iMB(BfTIwK7@d;Quh4YE3a0u!15O{PZYYZ`UEv>&k_$!N=%McT+NHawa^< zE1_3TtRTX!R0!UXL*KX_BF#$=0e>GukG7pADQgnpdHh0JHSRJw=@btWn-%E$!5xJ7 z#(|RTIN|bn9pu0=QGPhHLU1(i5=r)n2hGXqL~-FsqBJ`ZI^36#zVHMx_IENkEZRr1 zgo{bEeJcD>P9+-+4araE46u^SAs@~(3Ea$bLFIiOnKW#K;K0j5xDb?2+STUO1+O{= zgT`bMi~TXepr_@~kP=U3FOZ-;YNx@NzsE%)ND@!h)WaM(m~4NRO|g2xX`$pey>Rp4jp|G zEb5c#fc*7!=f|CZz7aXpqp{8=q@@tnB;?WQxwmX(gHFJ*m1%V3;AMi@zjB~2;waV5 z=7POWM2R%jGHlKv=nFHZhsAG@u-UP2g4GJYG+iNH?lVIYuTANh28$^0dEQsH|B_Qvwke?Std04()u&$$)grpyYO>xr*nNLam_(LG~ zcPvr4kVe!q;~`}2HsTszNZfr=Ks_*kwDbiN>YW7k+Y`w<&E2GM-Vw0Jo#evEiKJpc z3h;Fqq&RLi8Bm@HPAPH3^~Y0z!-{lpd!Iv2<*Sge-dvDBo=iqRauj5GF)L#BcOs;frs@5Zatbc3n79cO|$2 zl&2gdFW)~C_PLcqVrew_u6jhM_@Nqx9otUU`&-ZtlBXfaWEnYiO_q*%Tni^>EFwRa zuc7(6bug>ho*YSYq+h}tV5BsV6&vHI$K-lgIn|JyJ+Of~UAO?}ri>(hUkYgSt0q_& z_D8@lmZod9!7~3Jf}`=(G+DI;=G@B^xV}6>Rk>E zH@O1YR&h3K+)mTQ6I$S{Ym891Ih`JOeFBrelP?tgl_Gi|A{pr#Rx@S@FuN_;k;UkXn{ zolY3-Q<9)AUxh%1sOca6Yf^G%`>lmt7o zTm|n#Tgj1Uv9M*aI+^IuLOw4^2LIEt#4_MG>DUzqH|m#?1KlUduhEC$!r7TbuW2t4 zJW7B&k^9M}p@&J!g;da+wVrf6m`gfT4#6p(RML|dNLqT+p`Pp~y#tlWCgn7^Xqipy zMol1h%d)}mRwB83HA@g8o&{%L2XFAv?@w)5+t`!MiOUWQ5yjI@gTB`&X{y$%dV@>pq2h zJ0=pn2?3)2?q;|oW=1l~j?lSd8zJek66t#tP08U_nANCA1}m0P$CUGsHuZ*JSY0w* zmfH?)QI`Z?pViRDajh`#+&IC0vuqmBaT#1&3aPS}@|O+U0>hS4p5 z>lVx`qqiQP2g$BR;qnK`w5Gfr7KEJ>I$ckprD}~}Z#abNT-!ls=d?oDnnASVa5!BV zOQA!5GJP8BN*`QlhPeBdRQ=&p`f2Ssn7CviRgY7nGp=&Dz0{jl&6cH4ew~83S9a2^ z9gl>@syfD=#1P;`m_4q4+4Qs0cfPgk^bCLwYK)XL?sND%M@v@p9B(-g&_3G zC+Bklgc8q=LePf;|KW=Zw+c#@X29RRbkd(|veyY0Unqu09=YUb^A16SLKZwqtsn_$ zIyUZe^5Cv*DiM1SHCZt&9|k}v3H}-+*tzOBxUR@2f82uv^XD9ck#plo^XWt?(<_9r ze#dD1L2o*_yAAF>NT+i?W{diWSddY^N}U%qlMcCbIFndUtD8bdP}VV!n0%d{va=NK z+f@(kF`VwOv82lai@`tbK4n$61T%LhK;rZsY9$d(16Ax^z$r9f1Ctwhg_nK z5o?LGLM#|bKcyQ>)TvljE2upvr4Iwk$jtCu5WC$@S5-C%GDn<-8OfLEndoR*H@+H( zd?TGJK0&x4EFH}4UelQ~chP?*s^Rmgdg`L4P4#Ijcs@Eo>t)M{&#YV!-`7r8=LVCJ zqVHNC`-IAvHB`Bs(m_2HN51BcE_z67a-Hx#7UyAj8b#~oqV>kL({V2S3;J{0K}+5V z*WUXiT8W7CFA4CeUy2g*9>Tg;D{wS%!UE%VFP*1Qz2t0f&VD0UJvRo?x*OwNC70hFecCw*DC$ zU-AfEq&i}(P8OUTsDxdErr}lVR*=U57*RS6jgM<#x#?(Jv!sK~PaTKNDnqfO>@9nK zNt1LBbw{iHL$E&=6&s`To{9MA+HTlrFdL&ri1NI`Zx*k#0X&`!5z^!NW#yT%n08r{4jG52pAz z-X7)aUxTs!E4FG^5RMc-1G7rf=w+uxIH4i|oPV^i!F3v#>D>XXpT^*fm}Tg&;|Qy1 zJIZEW+7HeCBXRb0TMVu)2ji8B=q;FvZy!8|ovZBe$F?38-)w@Po#A+Ncuv^H24hd^}g7Z>HyLIhKYRJ3A>BE|HCI!@4y&aDRiqR7_R*X9Fm+- zs-X({^NK;fc%b?>IA-cV+y-ULjy7ZA&zw>E^?H;zBthnnKg8m@r=j#CD|Q@4aAD36 ztebn8z0I)3{YCQ7<8Ynqwcg6_%^%85&tC*z$;p`ZQXZrBPiL1tyK(COfL)TWBg_1j zqt%hKtS3qxtBkDBUD=n>ZXK+!o5JsvK48|-tBLf073dK40~Wt{K*Kxz_|&*gSfjBJ z17`$+_qpHj-O39u%Pxf=f56SJi{Sbh75uy~2t)ezu!p~QFtN}nOd-}0;rMVYn!KDj zyDmWEf8Fr-XC#{6>7#MZQuLkcaF83Ji-~U2uq`lvmbw7SmW;;9k)GHoE5|P!2%w=B zia0@K7HSRl0ht92@VPtyr~gZUsGgORYSBA>&i{r)(xY(6+dcC!m@XCWng zHhM&MLuuPtb|ic@-{J+>*%!@nN|AUM?A1Ew0Vb}W9dEhWd?%XWSvOfm!!Ixiw#xWo6pxq8_qe_{T zmoo;&4a2Y__Uv)sUs6}Sfq6!3#FjIjy!C-NzPmRQu1N<895;-Bv}aqnf#W=$cSs7a ze>Q_RY3}@Y&LC8urVZgTzPvVC5|2{dx{!NbTunk2Rr=gXq3F5#3I?ELRWF%5W4hod0r}5 z`)@i(KAwYH&_l%|@O0K*0Ya`LT8@_h8bz$Z#m?F4Dzy zQKh1N+Lf3Uz5~|El>;^dYCKlr`GN0QWg+Q18|Fs95vgJ!o(A% zveY358Xj?il`0kB@G;1ivqgLa+1gd}+QrRMro~ zpKBcW_k{^Cv|$Jm&p@srxgF+r9ftfPbNJwq8(_$hfym3YaV^~n!9Rm`YOL+W7p)G2 zI>TR}^T(K9e=Wn6X2|gK-hO;_`BXSG>pjFzIY%vJ=JNrU2Xg&^{=CU-8n}k{fXjDN z@Hw`O?;3EO$rrEY*=v81zV=3_4AKC1?UlTz^dhUD62col=#VwXE8tavDST85=C$+k zSfntR=bu|7&|6mp+f@NF_5|@K7jxLtZ$W%$lbY?HqO%~s1mJR7Fz+!s!VJ@cdD!hK zf)I;p_)|3t&MSuTUq3gpCk25#$g7wi(+$CU)+WC0v@3f()0gMetz_Fx-oX{= zw}OeWk^Gh8AhsNUpYB<~Ow4uhRGE0)<{T%95GEef)A|R1!I#4PJKOsd-XPfV5}LQ`#FxwX7xeeH#zj-`n+p_ zC?~ETfrqY-;l53JST(u{#DfO&&1aRdLP{OY%ZKsx)icp+^(-hjc!hZ@Prw(KRdDI4 z26jO!5chA$qf_3<^K?^Fw6XgG5r!$k?KaC$*zk;f%=yUvt{;yw8|5&_?kAkNsE_2< zaBg`-hKDwc!<_to@St-yDcBN<8U;r|p*Rda8?M2I+&ow=KOT>-=z-Je3f#Y4f#0(j ziwBIqf#I7DSRLez7Q6DnZSr!Admatp@2lA$evyg0x!{#$-LP|b9h{o!fj-;r!Ivu` zm=m7@J3_~@<#D~tEzb@o*Sv(U^Dcv8sXgXz{0Ba;8fT|Bfc|$yHh=$J_SM%BA2hy! z(^U^ZJ5^M7q)Vgx!R2^m%_Fc{A11UPn8&8Pa=~*&5-4ol3-7O5 z)c%l~`DC%`-8NWVrG@rc1!R@B1(pgYp+SNhs%H+v3p20KJ+Du)gr&y#cd#ky%=|(X zl8o@tFHzpP|hoh^WvEOtE&U`x_^RR>svQom|@l$ZUlPqh>J`Tojf>23b zi3^Q-VX>&zf;CFqYT+F)J~RP0{+-N+Uz`Q&Cym0W&6D`Y1LZ(_v@ku zxO`dwSNstO6(P5vs?L?qf4LF1w9Dd?R)0R?fC0=}^B%Uvh4U|??4W1d2co-uF2Arm z1n!)Z#M3fCeDS*1g4&05;Ba{r-)6U(S;v&JyDGl?I zdJ11nLwMGQGB%9uB}-Gr!Tx2-xx%W;tomOtulcZ-%zjl4mZw+nXyZGK`()CZd5W-C zCya#jZ9WZ} zKLdF0zqjn+fg)-ZV-2}KgZTEUY&Kpim>aG5Z5wp|4AgD(9a!@sdhs@=LVG5j_?W2Fyr@|e!p4)s|#-cr!@<-Qz*}c61c+RiQC#tZge zr7u64@yt?9=6Yu$ZuOhNKPu|*)g6`O-`kOthpyvKObWnZoCYtf*(uAAkHNo>WhUh#@ zmv1?K7ox3=F>I|aciAL^uT~Dh-W%rJpi%+7pY(v6w;q=~AcnzvRI$b44YPSP1+yQ2 zgqQ8Qyz$8-%(-*~Ru)L}eRK3NQ$Z0goQh(bb^Y=4uLp2;z+V;}<%h45lgW4g78c}b zjkYqwFs9yw>GZBb!CeYps5f(K48a(aeeBgFIUcy$1eum3jz3akYta^po6Jh!$5&HO zdOR2Z#t-6;qTjIUZfo=^l*EC5DA{Zuig6nY;jh|asKB+jBP#>+nIi@%SQtm#}X082mj5 zaA@@s_Ow|8k6xXI0?jUVaKUd#?LmzDHi55Ml>@I*^w6N#o4*gA42w_<$D}Od@!h>- z{Rzy>Qu3U z|H-+{oRf~x6oaLFxZiVDaOfCSKO4aBJHBIc^-fcb9ADlTB*qW8Kch~8v-z6!irndf zCVSsFi~rcH%r8EZW|xOMaZN34-g!BnhCiCgMAzCMHn8};yj%t)** ztY%MbE%+W&Q+``C$K@1hj2m4ErbsoiNx=&I=N&^XVR#GJ9W;`)kAbn02Q7;JJ1fxK0PJUbcm`Hec!S)^P6lPLGHB-hqU> zhL{oX62{$1VoK58JmI+}U(@{(B;|}Tyh{cvSSyRqN4`%>i)$Tz0pFZOTEed(=x_C$ z`EMT2H79EFLx-P2%@z~<8LxtU-@Di)nQ?sa!{J;->#0anFh#rW;h4If;`FmFTzEkZ$8Ft9EA8I0lF^Fz+|?X~ z&gOj69XXUW_`-JVSKuzXl318!gzifoF}Lml=-lVUU3-S|{d+#ahDT#?+}k9ooNiB6 z$!+JKWexa{aSh-;PPuxKXUgSjOh(#t~owDVbE}H zJ*E$MnIT3nC2Z6@&OUJDSzE^OX)?92AYBjTHjl&M2WpvExE>FjJenuJtpRCOW6Tko zfe}xyu~w6>Y{?%z9&r5{+}v-BMt9uMdh%};v@Vz3@*c@=p6rCz9}RI`@I18ckmY+6 ze$rksZ9XXJ0Sp~E8bcSmVdrUS?lO4?T=6#I*@|sIT#ay|RTS);wx7vL2BF5jNnAnm zB)I5mp_h{dpKx3kdMAo>GbuYB{x}UxO7=IRH(ERIO>Xq_ zrKl$}M!j=#`1!&^rvJ{0EAG(ZSL2>TlcO=_pI64k7G2Et+c>`Es|K$YbOCNN!GE%< znEL4@d*W)!hr6h9*#R$LN3AJF`)lDU@7HXkx)IktqQn=KJ_FU+=GeYz45r1rVt<=e zdBRprezN2?WQhDKW`zy@PWi{2wtQfpuWIoQ(<>0IGY*fAazpx4j_*`j!2G4O_`|=K z;GL-%y8L!T{|G6*O}qr2$EonZ#rL3O(RlotCdM3B=Mu|tk*MFN!Huuof!iiy@l}B` zZ@haIhLuhb)vbD5eDrw;O&WviRghPTbf?bC*CFJiF7ML11g5`DaA}z{HxgGvfyy^B zXqGJ3+bDr2ZB0?P*`9k{SH}F)`~)s1|z_Y&O0{OBuTH+0#EqrA|D8Hssw`6tozu#5@Ff8K)a zo<9V-*{gW*#cQITU@KmE|A15_O0arOMQS%NhIv_USCfQO$wPF&mpTYt+T6}|6O zZw|qdSYHgEQ~@Isn^}@zk-#K>4>5xWgNHtVAJ;P(8ys(qu7!PD8oAKhSBZ z%l8ge=S8xgAj7E-+A0Lx?%y$(@naO%-)YK!32NXn{YxhA3B(U?e}cN3J0BGi&*Ua9 zMN{kZP`_$DyYAz_>5t#6rTgN4ct)QdS8~-rw>jUSKYxlC!Dq;7&>`0y`JZxWUf<@8 zE5atwt3D2RL1gE=$WDKD?9)RA@&DLaC9>0`=E#3WPGH4j z)Ny)i4^`|`MD>$%@cc7x{_Dy-kk$Cfg2Q$&TaTqUHNT$aZr=yi?w)+=mM_qF+8h-E z^oZSOYyADG2QJSU$?30=ydz*fYOb__QTP6^r89oeRqpp$M&&Zzy1kEGOtWL=jXwNY zWfUpe?2oE~Urb6-1)}@hF(P*mpZxDGGry(BU#>93k8p@7*jw}PUAkB{XDgTvo1*tLz0N-wxo} zSCv?QJ{BK=`>V|1#lc&0oLsWBvKv=Zkbwwlnk23P+Vm9|RIH z@ysuK1C}S8rRH%5;nSz}d>BZ>ho0eJ@-l)ieKMPW-=>Jum4`xquF~EJ%k?JX-3CJ* z65xxfn+NcZW)`$R*G7z`yT1pqPbW8H(7fxyT^W$%RIbwd=Rf1cLRRR(L&}o zmam(uj;3#ZfmFRNKR)|7nN#I~Z#(4qs40g;drKnUaWmlcn~R~K#{hT!G3Vw^aya?W zT$FP+fuL`qnJmXewhxa5^A~@z+16>-VOy0i|C6jvh>;Kc zc4BldeE+=={}-#zkQK%CJZvl&4F8KA)~7P{R|agDTqyt9@&mTca7UB0MD{X4hgDhZ zVNb4vap@*899%I6m)IX<4tjf7v)Ll1njOLubALh6yt%mjQ8MfOtIc0bJx{K8&*0i> zyG3)&ui3E4J|exdk@}3^h)as1nO{W!R;QK0A;S`8>)^t7wcRDUZ-?{7?r#*R$h$&RC;mBZoi3RQQ6#Kw>`Di?4eri%=pupCNiTA55+I z#K2eZ&v_q2e4dY09{(Up{xbc(aslrcWeLR8pmYZ_d+dx% zUkd$;(%HB9a(F3jHs=>y*wh{FIAOL(!;3d(^QNfagI{j^9q7A>4D&Tr~eEj$Zo4 zsQ+FOU4{fRgI7{K$#M=RmUTn!opER?ri8wGQ`z^IU)b|w?l?HO8)n=#Ma50ZsGIhh z9SDEIR_%2_7nQSMx@;_ZrW&AMur`0y+Ro^-aaba^54QVQVU>j;D#;l0X_qTma-}KG zy|xYV-`U{37kcOyG>YqvJk7?AAB}U|wt}XnEsB58LyuBZz9^-FE$}zS%D$c8cWfd? z3>}4+|4rZ#mO1Rk5j{MfX$TSx)A7wjZH!BI=F1juV=E30#_C{QviyP{9{BthbhZWY z$t~$Lbl@4-vt=L+qha{5I0N4N+Rhy=iraQ5P7pLj9i*~Lw&V7HbLx^Ft>tG7(x}$b z8fFdysQ8QZ_}T6d^J{bDCZ;P{;PqjA+c8DbS+*E8r@UjaGS+_!i?qy;Mg(qiV&P)xSrfkl;?aNr`G6R0ZI}V0vOu!34#(ef9 zJwD+@0ZVn6zz?d&z?uaUu=BPtkDaT;zf^Np@y3RiygCJ2MS9(HQQtoxvx}AAxxzku zbm3*?r=cX&3Y}`zdEbqlb%#e3gY3^x9+LKiRLo0*?u+Yq4$Egl7yn~LYg~DO=&X$W zJ!|~*MVYUcvVg9y`@kz_9e6zI&GfCaY**ccK!Hn0*WMf9!_OS_`?6 z9FVmdn%ruRGtVkkL@j$GEc6|~3*QgL=`;M{eaB3`NO=mpP@2fCBF6CrUg~)BkZ9K9 zr8ozv(RjXG34-s~a#@$tkkc}SpY0pWyCki#%XzR!kGjWNv;6T&aR*61|BcyX`~fwo zIegZmRAxDL4&E6lgA3%AvJUU{7+I?Y@x!8-?X96WV#FN2>Ol?FB%Y|JI|%!J3F)!u zEvR|{V1;aDop_Bh`fYXPPtqQf)5i1ATS6XVQcjVj)uFhga1z+uI|vKcO5o84j=ZY7 z8oItYqLtHNtdmawdx0DNu2+L3zo8gMMQ2LXZF$-lHQchy6bDxg!_cC)uxPOwMkrXq z#S4x&yF~{a_04$7(n(mRCy)PD8DfW_3_h&<1?%dUz~}v5Sn>Y2u((&9&lK(X4Y8NT z4|c{lr)?14TUG;O!?wY%Kg)2{eiK$^AkUBen}ho2zQFH)qeb~p2|v!-055;Uz|hDb z%p4WRHoN>|VUy-!t^7+^7-WWFwMuBAGDdA#TLC z1fOF|%Ew^At7teibuzZT*2i%hRm(b$Vib;bih>WN);Lnd5cU1`vDmK}kf^yDtsBPitF9s~ zCD907FRg_*4{HosVT}H*j4kM@70oXCptuckuN}#3<5G1LcPb{rl^)paGZ@zo`p!HQ z|G^?PYrJ5!fG_AYVrh%}z^6-0@FZvjj=S*y?%f>5CDYCDXk{0aT5aKl%g+g46i)-6 z`(ZRUYAen%*A~rE>+t&Vj!0*=*;;mP;U1ouLOx>>JH9KBs&3qh3uJZJ?rB4K)~N{? z#XHzP&H4QMGYzIHCc&Q~w=Ma-8hdow*>bHOwmVh|A9-4F^G4*pHE}GuL!B$PIuS)& zfWM!J^H+neuqD>*P&v+>Pt>vCrt8Ys9z8uCcIX-DxZ;Ld7nJz=wv(*3rxfmdUC7O9 z%=yaw6)aI*pZ~614M{%kKZ{_|)Ht}bJQz>Tdqq;q6JgWoFf3NqWBP9nz}G=xSeCkg zT_*`(xgZ$FnuIY6(Yd_kc7eFpGK$p>%>+-4HE7_I!8-pIK$LJ9S}*Qm#!EWD>6{Zz ziMD1Yx5gZr{cY*Ya!TNlW)(ShT9qg*coqe&N{Sl@<9#mT=bBQdh-hY zw9nwS1&nE#o`tctzPx&S3G-Agg=en=xarGS=JBTzSn)DG?E5!57U$cp-1(jrMlI$U=cWpxT@-N46%X_%-%$6q^A&Ua zx`caPog_jTK+KwwFP{0*8+I&Z3HK0p z5LSpZ;FOgCsQxcSa3=H*TNmulQzIN|^HxaU6Xyk(t(;+V^}7szH{F{T?R2(HTPTlz zl|AwK=@+%6S&C07n$M-Yqy%s7s-s4R3krYA3OsDJxM}T7Zi8jQ0e>~Hy3!fVXoetE zXviDx+3}J)y0lI~1L;y1G;7Nfq$%j~>~;t47%WeNcWC3#lTLUs@u?t8L!T$fPUmi0 zjcM9SV|;5h6`MLe$lKwnT+hRei#MeSqnt+KjWIKjrnr-V#zXnB`*V3k3<^6QDOx1o;D;O1`!b7jR@#ar4f=l|Uc+=Sp4@^oG+OAON^7mc%x{Oz;?`Xq`gz=jvu#}zwAo>`&J6s z)^QCY(^lfVQRirj)+Kgj&r04@Ck|Q*-$6-80J;iVX_obO_F$|(_q*Rol%l2ZisO8I za%>&_)GfoSD!q89Tr}B7z>`1d-pD;v%CCa<}j_JAE*S$3D!U z3R^G2g80=qC-n%4o%EXBQ(nrIKh+9*iynct$8wx7Nu5acykUY3OZfBZ`ntNMVmNKH zA8rb+x7G2H;R}y@^I?ZOY;I6V-2TD`hdmS29t|AGgTsCJl>_%}1u7~SqBR>0fr%^$y13ue0l%zKC7VQh1cv7vx#J2&da`De zXpax^($;9w`%;m6)VOn_u?Olhr>bJQfg2W%dM@ykSLUCpXLBd(Z$jf#(S5FP!}vQu znyiQLJL}x}w&!`m>{dk_+w6`jWOfTaKUL&6PPlW2qEf*@ z=5e{s_&POFU$o?;JI;|CDSY&M2#@?Rm!DWBDOgQqaMl8EylGM>aJEt6OXh+3gWLhMaG z_iaY(6$B}2eHB%+HCwCp-n2+dRefs|Ej4mb)mo)iQ?+O8tx=l(?$`N0=lXwpUGMAl zdhU0g=X1{Iv~tvmFnKy>6fQ zzh3O)kF|Qmv0h^1GQ0oRTP0;p9Fo4jmOPXw{nmETtm8UMmKqPGU*yNW>pR}tbD?g} zJ^$->US*SVU55FZ_nl(DSNi|HG4^fW;>io6&dyGw=aSP)@E=8eQMDRr`S>?|EjKmx zy&G3nmL;7^Z2SAx#E$7ZYR(JiWY?1_ns#a~EmyFRR+<&9J+hZhyq{~R?`6SIIW%cj z;$PXPCO$hgL?5)Om{`UB3~=rJ2EK1co=Y6+4brHf3etM(vcx<^gY@G1#(Fh%UE<;O z=Veu%INkKl>clx4!hNqBTuGc*xsY$$oc9x_m9ODTKR(=7dsGwO)&lu8%da&OPn2(` z9U5Ox?0xy$#7~0fdPADD@jbTRS7o>{Lt1rsPe157F|q7`3YvaPgw`ChJh8)qr*h$L zOMS7@J_ppTv+wYR!ATGK)^^i7L1~F)2BpM9&+c zrJmMJtng-2oijRzmK;ARvBSW@k`fZR*@a z+TYJW&%DCmAm!_(J`Yjmtob_Dfj%&2-94e6w0(EB{Ve1sQax#+3_o61FE(jyzqgOm zj(^4IZ_T=5zZ|?&Lgdnqvcp$jKFJfREw8MTLk;q3P{c~v*lnles~;@~X7rU~ zVP$pH@GjanYd5KQZn_LB@~MpZti9Bo7q3A(yJ()ft@Mj&&2{Ri+B)EVBOMdmTl>wO zEy*3?bU!cgS2+(iqdc6=Q3ht zgcMouQX17skW)1xbZ@0~(ktI%S^4?z67_dB-EnfXre0blL$Vx}E#V1L;ps@7oK#YG zl)T|hn7T;@g=NvFqaw77FSE?A9-=2-}Iw*9_`UhOeQg4QgNsPLLPXk|+cTl`Jb=~bPi zN78DkS*EH?KT=j}<}aq<;~#i?eOsmZtKrh{t3f*W%_bVz_!n9Iw4|oyAFLT>h5H|W z-HGRf$G}+4vssibs?}ZZGz-!>Yx?Q*A^T;^jlTAo;xUr7c315YEqbD3FWt5~LVKk2 z)we#%tRY?xo&WETGVEnXO&B^+?(J`*pJlD52m8nC=QGM^x+iUPV)v}teRLBYuzjem zDbh{jMwaofhaLG)SMG_|B1_8XtgPdOK4XL48oOk_u%EJ^L0Fa_CeM>KGu*mkB2o3oXeW) zLLL`$)^OeK+FIb_Xg%F}jzra7B=Y!eO?@odGP06HPfw8D|8|m=gTIiBqqazFvte?o z@E{$Nr>VWi43)4wljX0u1@z|G=K9g+ZFJoC^>pt3zPdSVlr+!VOA-r&Yuf@*`s{-a z5}r9h>Q9W&q(>b!IBC4Z##EDm#UnLjSutH&^p1CK;?MSTnWgmkok1G;sHE)4Jy8bz z8KL)LeO}_dnkxThki$P!(_#P2@_zWZyq0Kq%9FAY+Py+kuj3D48aB#4mvpbNCYP?{ zrRkVU>w1g4!@uR$&H1u>yWUTuM~_YP;@YLvum{23%tC+2?rRghvuiHM=Ctp6;idj7 z$uY~l#L(?h;^97TK-6%VTjQj+yxc5_eK(&x8(m0#nVv_Y4mFi^m)c3+KAXJGOB&1T zK3S!@Z-zX|RoM%#Gge~O{^(Wte4RWBN$X{*yhsveZtx~_OO&vpVP1UY^^&x~=XHDg zxU{}Cz`Hqmm(+Z5#ml$glIko(`9DSp@ zluvU-hGiQjgZI6b_={uYW)A!8_W1>J;>5qw{P!=VS*v8pdT_gp9GXUJH#sRg%iocj zLoUgb9%;1tXMfAX;5$;kRYrZ^K2v*dZBAWK>6Sc6&8NBMzm~u4^TV^fs}lWIDIMMG zsq9%*MUNjmE4ho;&|=vyN~*orJ+^bd+&SJ@3$3-!M_q{3i#aw({-SNQ{>ja9xnCE} zyzWyO^mDBCNwZYGKiEw>WS=S1v&3r3hLLinQ#YM`W|U-V)JEri(nvn}IZpdc=`NdF zw9un}6_ppST553KhEmynE^Ez*zr5LH8|m7i#iZUn(QUr9-k}{;^m_LDUbgQl=-&7n z-qg2i=&)_ydOLqBtH~1wcvo|W>*cIIuSf7(8kujF_jk>rnjBxp>r%XcjyUy&w?Djq z)@?J;i^-B(r{*f^O^C>%M;lM~x=+ZeLFt=$>yp!G&3`g^L3i)V!l~oElsbpo@pR2M;Dn z!jfm+uvgLYZ0SocvesZJvnNENeyk$t8dQ~~(;j$BH$+NExo~;XyM?3_yz2dOYPekf z`$KPb(Vmi$?uNG^<0lf6I?D^Wyjzib*tBR{x*3uX0mto%0a34tLI7lRync%n74DoPm-KxgEu!SNp>7q;*DRkU#^Fw zk=8ZNNZiY3-t95Ta=GebuipnJINe-2JJv&m`-EjWVEK z8Xb^jx7-_cTPBq_V)ymA#N0@d!ei5DiO^dzeZ(D!Yw}#?^?5E=+o#oO;c0Z~(o8z* zO0s;mC5Nu=^icmRe%x4*7Uf zJFQ-Fmxz5{JnF(~8C57&U$0st!8PLaNr5jVBu`iU```j;Z-0)Nec)UPZP`hy%$hDE z8+F%A<0eUgt8F!Y*9h5Ev!liq?kcTM#%ogidvdjFE4@0Tos4O1pEKQ1Nt)kir(0}2 zqjWQ!eW9|HAJWX;dt{g8u}yVjfy#0=p@GIM%qhzs)zhPu{_s+QRKKZ^M|LLE))VUv zd-)S9>6*=-c`L`2)HTz_dlS+Z(7ic2dsBbQqJ0ZSdjl#wl%VK7UZVXy8{w7LcqR5O zmu$ygc#~?y+t2(|l-9>{%9h*%B)R`)FaL`9GHC1w?~AwBOG4KVy);wzNZ%fdy$TDD zNzA>Y_8FG*a$rs_$uanrEZpbGgb5F1(3rup`rs3}*y>XWy8ld`t^UzI@A_O$*Lfg| zWUmnZuWd(IZle^MFBDKQgKV@AB)sT`0q{oGpn%rfhES%OsqrP4)T}yS+ zn@uK5mNjv@rB`n`o439GI;nxg7H*~Eehw3T9IZ8{r;+pfqBJFZm6s-KEuA{?4QVi; zvL^l1%^MP4UU$5A&0D*$l*Sy-?e!U5R8Jh(?WN2usG;Z6dm}gG)Lw6`@hUA3*07_$ zM)e3zm2v$SdO`dDm9VwfqEbtpm4;Imcq`-2OVIdM-uJ$B67$A7Z_D!SGAV4Uw=ly{ z3E5!3e?B=!&c2gPP8TdB!@A{{ncuaOntw*i+?*S{#i=n8RV<$z9`lI=ugU9O%r!=K z^t<2S;p<;X%_E)kky0&cWbU|L187mdHr_sMV z*k|f0Uy<_bmq?z_bXvFZ*V3fjb?Mc4mwY`voo-xlMiL9&lHeIllKI*V zsd+h*PCJrTu7)e)%v0&$CuK_dH<5fjjL*}?@!5qtoHK= zA6=7-mm2GYa{Hw6#76p0tz+_aQhWOup$)R_tyWs9-*!p#x@n8@E2RF#HoEh>WwL)@ zZ_WF3mgJ6aqj52VrPK$#v_sjCB>%FOT0E+nG%Xdca|iX5?)jVQ)pj{#<NA z|Hpm~^!+p5xXX>S$mvotdu<(Uc*Z`@zrKnFHGA#7`Z-cBzpUhi#g^6*HGlQmZwu3u z%|Tw`*!-IEdZYJhRX*L^@m|!XE%yIozgh0p-W#OB=?+E3KD#3W*3I+Q20f70$)R5J zwLaM#wA@=+^sqE6HO;FTVV^N9?DNVLStAYSUGpaS8p#)5rj>>RM##?T;S$vKf%j|Y z3ifMyWqJKxUkM)duD7^$Pl?Nz>ScRs-{9fC6 z>V|Y)@~i*#zc==dyxY-!JzkU|!^)=9<}pD!V#{@j%o42Us-)G42MXwoB3EQ!`J&om z>uZV5P*!6zo|DJ_lvCel4`fSk(Tb5rWPN#i9~hb>eO9;9$!ETo6534vIJsY{U+Sz~ z@2ru3inY${?kx7*|>&2n3p2s z;+lCCmZa6oK}k_{D(Cle=(s}m`L_Qzhs+^gzx2@s|JOG^mPwdHzCJLA%;Bwk+5J5X ztT~4@*L$n4YJU6k?*>twG{b+JYRHETbx`ChFWJ{q>t+eF?}`02=J{U97u{Qr%!|;u z#Vcr+`Q^0C%L-aE(^feY+e*)W+Cmrn)lnBV&nZRi&ztvVjFp*>y6WChstbSbtD&JI zB<7cQb!EoPIxwu3Ml6fgLKp4#B2zPJQp;L;c|o*hE6`2v+5heg8TziK$@8Hcylmea zmbR5N_D?!XM#TPs8C>u;oWraxxc!y6{x!^OVGn&K=g|IYUH^X0N$(s6S+ZG*Sn4{5 zg)GdnTZ%e|buACkhISW3Eez+tc@)Z$qhIfoV9te~;1 zb4WMYGSR}l!y)(b6SodHsVP(q#w+=X*W8sXamKM$-XEEcs@mz37*WAM6g?}$_$iENM+&bWp*PJt+TiQ5>oW+dSp4S?ObgeDC zmb`X2tYqPutOE|Y_AJXHOIzoV*Pa>okNb#2I)d}uaTsM`59@$Ku1)ZE&LP)k#$N6t z4(SNaea9jH{ji61z#)%+f@Ox~ZRfDKn@uvtIfryzEwPs2&S6grd+5bE%|}r40H~ATPnD9z~Q?V_OMr-!w?H+a8?KBu%jiPrM!j5jl)hB&SxEP*xAAvbODE) z)y2ZEmGRCY*Jj4GxfTxTxF+|9dx1l)&5V1;y})7MezrH~xzR&9W?Y+V;gGI}d7&@$Nav2(~-JZA3CJI>+z79InSkJlQ9{Vm)Bp8qiC zaG-@VxSzasIOHsz6Z_eV!~a;gCtRCr;c&QRw1vma^TFXb3y+n@Jiv*ff)at`_LGlyFT98RzlvhZskzt-U}n}zoS{MtI*IV^19dkEiGCOU^@EqssS zd(u?ru!*IjrIBT_bI3KAv5);Yq>HfRvdnP~7g>VcI^d9BJ4;&@Sok^|vY+=3d~aLm z9EMw>E%Pkw#bFr>-^2MnJ>NNOY>BkQTjn~4v)zpUW@kEwbc-!Xmg;sE4$r#T665dA zAsxY&xi$R5!XCPS!=)~G4eMCLb4F&%EPpzObOis@t>JkKd*}iVm%HFKtz!)@7@4v6 zqH{<`@D*+iFIm__7jXEQ3tr1Q*6^~C8GEldhjavA<<{`3<+57`9IkZ1Yui57@S2es zd#^i(bOit0t>Fy|d*}iV6I}2**0F{+jm+44%Q>VY_-eO?$rkp|1ss0if=5}$8s0WC zWA7d3kdEMAx;4COVGmuv;Tjj*vyL^qXJp3S`_3U9!M}2A_`t#*x`4yAF1T378a^~K zWA7v9kdEMAyES}lVGmuv;W`&wtz!+J7@4v6sdGq2@c+6sd}d(}UBKab7rd@@tl@Jb zGxol44(SNK!L8w67WU8u9Dd`1*Rzf_OffQJ?@Q;9j^LZz8vboz4_(0FMi;!kb*$kl zBQy5Cb`I$X{;gZXe=O{w3pm{Df;X^^HB2=!WADGtAsxZDx;0GW_Rs|!Zm}i78@e@2 zYhlLTbj~3i!N0Q(hv|*%VI6R|%{qcNa%-5u!i>EcokKc;Z?_JInT+gV9dP))bp(%g zYna)>jJ-k5AsxYgunvb=jO<|@aJa)df;V<+nAO6Jy>B>&bOhgJ9S*Y@*~2>EaHn+y zk8x|5-NKB$Ih;c}g72{ohdGVxVI6R|+d6_bacdZCVaDEE&LJJaeb(VHw~;-p0}d0d zBY0D{hIuT^*c;*;(h+>0bvVpxWDo0r!@brKyqR0Wd=_T=tjq5l(h>Ye>u?xqWDo0r z!~NC~yt!M$0v2ZMebYIlBlu6&;jo~QJ*)!`4_HU=7H$m-S(vf6uyaU9@Sm;2VG$#H zSO**)w2t5{-5M6PFk^3+b4W+k!7IU{>m2OOTTj^ORw8kV;(V{ZlLkdEM| ztixeNBYRi}9Gn<{h0wI?gy}S?U~e z7PIA+&dwp-r#Ac3vdlT`V)4&x&b4qz#~Bwa%bi2cV)mIO-Z`XOVY7>tPo2ZJE&iF! zxfTxTIODSAGv|=An60#Qbq?uP+3bpCg>%@=;-A@^YvGWNGp<=yI)|LaEWy&n;79 zLpt8GKec@A9QL>PXEx_rIHco@=a%)(A!jlB#xlS;q}yP#7nc7zhwoYZGn;cQ9MW+{ zisc*Ukh7Taetn>GNVmymFD)CK!}l%zna#Nt4(T}Km1U!I$XU!bTLw9Ybi8MOZQ0}; z4z~DbHs@M6q~nZK%Vy`0vzTqM3~>(Ww%Y7p%eT(qP>X+NbFPI$I?hN7okPxI#(Vc+ z&LQ1*HcMyR>KqQY_-EE}EgaHuMh55{au&1it^2?^q}y(@jK=Sr!w)U~nRQ$Xhjg5g z89IlY#cYRlBb-CJA8Zz6-0mEXwD@P%aV;FuaYk0?9C8-3oz{(V4(WE;>uRoWqG0|I9kBg+n^dC;**9&SG}Jx=GF<9q-xSH2&xueq!;@tm9fZ zq~nZ2&^hERW(TdC>>SelY_r0~pPa)f7XQpTu7yK7&L|3oy%p&s;;W_7gKKu9Ft@V7@dj5N@YrW4t`#$aJOs{vWwu;J-VJa#Yjg4UY*eaYc zPZPu(J;)S_Y%4L*QVSwd?cu@4Dpb`|X~v1E?clKfbqwyP2k!Z=Nm^AUo?Y0Sd($-H z)w>dH!;L`9>t}u>laed2;iEpJWHr0%$H>q}m3Sb*3@&&+B%KScW8<1W zup?C$e$2jse{{OTME`ga{Id$VD;98L=r!^{^(Ibt9}m$*t-#so7T*6p4*FjVBjx$k z82Dm5_^wSRjpQzdl1(7ISVkI}ZljOY2AI@XLDU29;e%saAVRj3Xmoglr@i;Xq@9lB zoyS9TunmLxKM#;@4zw^f9JiH|I5oi zyp$X@c!UY^H5K_!Zy%x{=isE*lKR_^@l;lravps1F;2<}gV@DyB!4=}ugmCQGgjQT ztkV+=GdZZtGoBOkPGWrOG1|hv^XF-gaVB>V7PnO)>$M-^1fze~S1*5nOPcmUyu^g` zjJ}QI(*9AdGs*rox_9{p{Iv#=mkX*f-ON)tS2d`{8Xr%HJnc-TJIZ-xsz2NE3kKdr)I3!f0$5#9p83V<{8g+97k$0 zuA%l%6X^LdlU#jv4R=2?R%Yr}Uc)e5Gnm_TCP_57id&5PDd$tluHd4X=FszwK%P&& zijg;Z!{C5mLJjh9rkw}$KVD0W)$%d(_XuTvcK3WVSmq7Ct&Wg(=X0>yd!=$77m zm%NIA5!onWCzbOXqXRJM_Blwb83mR%*P+XYW6<>d2~qd=!R~W&;K78ku%N&T zd6yJrKG|>*YQ$WCW8?{$VsDEEzY~>ntImVb`Di+9KjHz~JqMxbk|Z!*c%8J+>w!yG zhC$;c4z$Piz}qeND)Zl}x}(~Y0}y3!pMX3 zU~XO%x$<5I`NmgdSo_wn+ejPrlWK|L=i8=459fM*Aij|Y$m@W%*gGPf7jr<}U!oq_ z2G7JN@?uupw%k_-kL)_li}`wZG+BSh0DtE6ra29*;diDk9vI)1Dl(rpx5v2#7PPKG zAiPUgoU|{T7P*#)5EV#(HQs^gJ6*4SjYHyVDlf(EhY?-glQd?k>!xFXq&f z;rFd@g8vyBY&na}cxa13Yj`^B1tmoj>~Y;YKA~4kecAgHUHzTUo<~`Q%oe zB`%y{D$5#liDcQ>V2AgemACyJZjRDQ(`HQL{mK0y12NgzLOIV`Y>ChMS~lZApAw?k z-WF#}86X>wG>fdaw!{1t4$4fU+F*QD;?#^ACdtSzUwb@kVka{nwt@Uo;ZW@tk=6gY zO^%M@utVLyx1D$a@spvmEKxIvgs*W!zbz=cD(5Tx=VRh0RTkH+;SZfMLV%gv$UT7!H*?$ zMCKE6@k%~w^_x#G%Vv`0zE`nf${5;GO39Z^SMh4g(aL<4*;V|sU@WDZ#*w9^*KkB< z?%(xeuHl=~A+-OVlSJ*_HS9G6>9}8GNTf<7=1wEcxS?$Z$!k-I>VXm}X2s7d`gR32 zYNK*Z#=qB1Aj5=8bf4l(9V4zAg*I4EJT1^#( z4;)WnR6c2Ww+df`d(eLzwvnCJYp~LDoicO0q6RIj{-H$%FUWwsH5f5&E$!nKOa4iH zfNRelq3fKqKsNgUre8Uv%$GzwzzfnC8q(%C@y~dMJANHk&L7Qqh9)*A>Fs+RU|Z=k z%$txxUj}58PFw@d9GOGoUzow0>kYX4ccwCbKJ6X0NY14%=AR`oQ-9#`N!iNz%H;28 zclr!1zStcu8a86bznQdTcMgf|+Jf_2kwVj6bOGnpEx1u6S(*P)uEK3iO{0D}C&-`D zR@_G6-~T~b8Lc>@RuOcBwlR3TX~os8IzV^tJVjbP(&nb$7^uAMoL)NIVGCQj=$R>` z9Mb0cth1u`%oE7cPI}y?*aAViLmPHw>T<{HWrE`8;=NOk^BPkmoYqJnLF#(kjr)Um zF)K2k&&cQHkELSvEYk*$IlA2IvSqxOyQqc``;*#S=d8V?_}6RV-BFvH1;NVy>1Gpj zIJeAb^62+Jq)=$X1$t_Ma?M9=xIg_3z`V~r((g(eZfKo4Xf5+4jY2D~=<0N3W_~~` zE}(H9RNj}898-19qRnKm9y5i6PF3L|D}t4oIg?blYyKgy;~q~87pib~#s`DVBNy_c z%P)NKVK*dV5;>dl6JPo7Q06Db{lY=|VPI}Lj7(Vf4JFGC!rPielCtzGMn(Snd`5N4 zcYHK53htO#60cz&aj8KHL{;x5dWIix;o=14I)~PL!qpc}fa>txWT9FEj_8vEmzsi! zweS|*`e!OLiEi(4c+Yci19Zs5dT;W2uCr-#9lp3214pI~CZn9{@Jo3#=r%P<)_$wSMS4-qIBd}% zQg){nm)|`CVpjaT%-YrAJl81YnvAn-8zuH0b$Dw|1XvxjAzGGo*mh`yGBbB+9VTv% zfZqMSOL|{;hGAL%zJ8hb>>281FM-q}*5pg*Gi-Zu2~3++F6p-Ksq*!a;=ar?{^dti ztw{S7|FYu-8&XqHr_7k@Y$QkgpJI>HB|zf6h>d+6+RpZYZBIkV(uH-X8Y6%G)n+8o z+ElB|zrVDf)Ogh5@W3T-C*>ds>{E;1{PsiL+PMO}T5cm$tq$Er zMS(`UE%M)!T5NObAUs_VNeU)D#UUS};lhX$h=)LLc7;n7M8mq}i{6-4;*Kc%?76hRz2Ym-}eu zG!~4TR>P?AFEDrIY*={c2!v}tz#kLLp>|&=6cygZDHs#G|9 z_a>@ZN=c=<02ZFNad&i;M9hPo_d-$aO*|2z4*r(%*W|U;IOwhqaT&c0jz?6Z))s;6 zt&Ro_zZyKKq3tB*nbo@>Dxeze*A5`+>4D(;^#)3NCXvJ`Az(S88bhv`G-JzzeemjA zHF^fGkc!zWbQfflS7X=PrPBXDyy4s~DEd*22jV=0Y^Tj&y|x-7+VR4pgu@UOTZ1n3 z!-bkVTcM1v#-$0K&A7326;v8mL+Bg9!#h1iJz~ zv>TC&Y8B4Bn17sWgU^z4ux0fL!Dv@IobHl^$!c*z;jTY0a(EI>Jp4yk-MKCPx{-+E zjqeDnKHdcvlcU(9!h}BU@dx~aV{y-ybV2v-Lzq512K~(ngkxXZ;NE$0xIQyRh<)Dz zR}{sdXTL07%)MP6L!omt=B;1Bi@DKK4_7^o#TE~r@?xGkT@~lOjK#{I9GSS_37DnC z;Pp?N$yQDedtHyix!!tY)@(Jrmz{)$p67|_q(|@|_bBSl{6_wm8(_Ri67E(DCB@UV zG4pXY{Vs{6ie$<$)jlnkonIg z6m-)`v3~)0Rc2vzm-gThmkbk^^Vn*0dk8K|hd%vIV0R-6=(9Tv!ds?cll=XYI-h({ z+aHe+ss=DXZ9fz@ok!mR=3x711>E0~i>LY{Y$#s_H71vEzE)>YS04$dCKq9wc(-qKgi_(IMW7@>0mPi#IyE@uA&FOqIxtIvm;aed`p zIC{1cUtLHde(iU`(@Qt7SC$D;S#${0BCGJUZZGm@^GWzHz8r@<=uOssJO%@vmEt7p zu%uA?M5&hETPE# z78>U{L(iF$;EUHSELm;^-73_eXjUoKy)lK;zMbL3sRFbdf`*U#fZvY-oc7yry_W`Gk@y69>x5J|v8F=3FMsK&#@F+YI3il7j z(JzBw{oRZ3yTTs77Y&2J#BgwZ-wQY2^@9!5FGFxxUmTM@Nd8`R7~HNm!ltVd_;BwM z2-{7tb3rF4+k6D}XQ<+YIwSb=E(!MCx&srw))RHJDd3>f0^`t^ zVS&*NshAzNy@GZ2X6SZt8!zS}>$~6_UI=F{Omh-*yM%jCrLBTfLbHU>%}=1Kvl*^^ zc}s|w)xe*#7lE@15yJLef~=)~!KPIwI&Z^ecq5o%-x{EKNf%+)oQtq-@mpcd=_sHD zf8pId37xxtFLVqt!n#2NkD$A+T;B#Ad&SYfG<5#Z0T`fQ7vbtm9rfiTTXULEz!@ z4R&9+NV*@I0lPQc0M)7#QhIX>{ED~@Q@XT-v;u$VviT}JNIFd-+N^{@TV=2$JdOl? z-3DJyl)-_HKZ(q87yO(qgA#a778fPMah-A~On*$g!ivCmWjVZ;Tqf6YQy}X%g-2=E z$U{;DvtlWH);~w`R-{3fNjb1HS|BTRi{MFPHc;UAj<2GB&*FeIM!kfNMGNRn0>hdcF-PrwQ`X_ zx9iYm&Iwr7w?BCvbOV-ohrq3fzjrdoUd4Ar#7=J2kf64tW*9!oW+(;M2Q3JTGo5Jeac!M!9W+ zAA41#V!rn<5w1$xK}367Ud+|$2jFLpD#PeSXCYLNIgUov*nDTrR) zKy(5!C0gOf8%>{BtJuP77D>;=LgbLBSRAZ z?gFfuT0{1IpJ4Av=E+%+*=qStGX9JSDCSSLzLE@=vtpedcRxye<*dj=`QDTG z%epG(8S0OftjO;;eN!@DK38P=sa%nmJ?f>*sGKO57|U6a@$|VU=^c<> z<@~yCcS)q275B9?*H#iHXGJD*^l^vtJ`@vNK`8Na}A=?MPc zJY&UuHFZysj*`#CthjCbsm;=%^0}B5kMpqNB5Bf-fA?9p=%zGI&ZYAF@vhm@6gew0 zDf6yK$E0^vu1U1+OWowG$mkU0O2^Atktwk(ljbilQO*bMx*)wQXT=_-)I5}4kh3Dw zVeSp-M#;aAf2QVhsjkyaqF86MEMNMP+$4&Oi9GY$SEihY$mcI+$do^?9C^OO6qz#9 zRi1f|>B{+e`TT%gx-!2@o_BXmCpRqeARzvRlmx$$94kBxm(M?ue$sj&X%U?d=G!kx zcm8-I3F?~%>66l>;luYzX01L2$tr^Me#s8W(FaA4lYL0)b}?MC%PtQd=3a9OzG{{C z^>8szkMoGzwd>7TZ(S;wPJc^!O*H1k956i%{A%(@ zh~d_}|HW=!kHfQP?}$^1rsVy!6R=yOid>A@)r=j#oq*2m))JMU=|sWWOJS!rZbKcF)P;OOx>LZ&-!j;rMII;5 zh`Im!6yUrDNUGPFfT?CGtp3tbayPXrY?H6EZtVq$&Q=ppT>F!g*%F5pHOj}t^hzI6 z7+Is-r-h$8snEDds^t60qE95fQcYm8d_Q#UHOZ=+uF$SU29$W_NeuIQLAHDkZ9Ak% zG*Y@k#Jn`<8GTTacfJ?!LsFsgc?*g8)m~uqF%8ai>?eu8Z3|-zGa%+p7fGj;97Ih^ zgBIs4ocs$Mlo>5^OX<-Ew$1o*%M4gsu63bLoSX8t8wMsyy#lyq+)uurZ?8+FmG^tW zA-^=RefKr*c};VE!e>CsCGMm}mnZz7tSgYez7?EsD&rqLEd}q%t>8mdtyIkY23!F( z^Y_HInCIV2DuoXf@5$_Uyj0BHUzR{2p=9U9TwcuPCraVvHcF}&^>X@OoI0um+O_s1 zvja-_`$eU2`SdVCyKHkjwyYekTzDLPKJpYufbQW!aIPTo}c85VP> zV+pvd@RZug&#jpG`=xNK`hb(U{QN8ON0y9`c*}oBid;*;XlJRTiTunf^1Zz!lAkL$ z@RjfLbNdp>7g;ZOUtJ24$wwuX^4~SZ^({W4s-AcEH0p9jgA<+$naOd2$O2h7V4!J?`?bcc2p?CrG! zC)}P)<2waG)bB{VAG)1NzNf-`a>5z~7J7F!jmA?*C^W+d%72AS~mhPd8c6h+>q*h!Djoq|FB^aD0wc@%) z2h%&=6Ci6tTh2Aejwa992GW^YoL?x=(2v`}DM**I9Ii!c>=wZH)p}gHgBr~&ISiZj z>TvtV8`AYcER?Dka7V9P6MCDTga>K*T)@pTp?vBdkWMz>D)>sl;nq=5yJW~&o(>RP z`Mr=d(~#5f3Ke>PJP-5wwBtO4DMF74$q>1{9ryA@6))!dYJ1^crXhF5x}_jy|D$=} zF}*#9i=%ikpIvqooZcI9St}>=i}d%wo6iPZ=N(b}uWRRE*PC{nYt~<>Br6HlR2p#q zY(LG5*{c?^hVi*=xx1?u34aP^0=cNe?d?25_?6`k{o3hp z$17Vk<3vp#7+|Bz_1OM`7qg?zW_a7smRlcbEQr~?ZVH@n(czYVImZV})c>9Q5U9Pn~O5Hyq}x4u_O9b*`Y) z3f>T1_@3H=3+f#RH?I)TeWJ=~yqX7U%gmt4|1Xx91%c^}CbG-#H_mVhhO-X|Smdg3 zy6)>>)4ZOrZbuU?S-&1q-`K;;`@gZD;aUg@&)|m@n^tMj$<$WW* zvsnt(Cwf6;;7=T(F&pM2bb{EEjW~D3Jb1Z$AQ+GPg{D1cfa>QS^7nHav5Ub3*b-?0 zWov)pli;y{HJzYyr$+qNZ6bJ#=?+QDe&E2nLtw;}&fwnk9W#~;1C_6Rz_0EHc3K4> z)9nq*AAQAePa7EZ%nCwu8gWT`Cs@754u+Wi#B+ATLG`;0oN4%u`%?!(Wfg(YmW{Y= zj3Y#CaD*>f-|>>01=#Fy2Ay@^aa)o#wCm#l-lx8z#K#=gTf4yP!(VZkt_1{+a)P^_ zU+~rJ0g&N46rk)g`Wjh*uKc}R`?$~ebc+@2$^+;){}W!+wS_Om{h{&uC;TgMfZ#ey z2wL8-djEJ0=8-0>@|Vz%%LZy0iSCfHf)LqCIWIHq&~xSlfxl}(>;spe#eIBpE< zhkU}#=`$hxVowN$k2vJ>czER73nn*wz^##!VZ`KtFfH)|N_x4$-uE`}bkqklQSpTL z1}>mh{t=H(ltAEy5is=NN9@?u1=5>bVb;3O*rDHGSUtxbQm1~#7up1B^hbfi{;wG0 zWdoB;6FduFlPPYW7Ts-u?rnmI!{c#)D&`{LB z@`nAu7{e9KI5$QET+jc&e^v*;@5fJwX<{S#TnU2JS09rv-@f9~(ZP@t)fPT@e84F~ z10c3jOQ=g|z;g}3;1SyoDm@#ph5Y}+)W$KeWxzYsG@JuVJO{uJ+qc*&a~*j7odvIh z-rx=U`Jj;#4ZXX(!6thb@Qn?DQQI1D+=P*!>UJF7bb61k>wCevfa4IV{uQ6BH-?vH zd%#itIQJWB3%X-VVR_Cg>~8&$2pOfYHufV1b~;H?-#mnq9#2uPMWd6Lr^;$Uwx|IM zI^2%sEIu1^U+j^>8C)F3EgG~~s%>9KOp(ki| z+z&aURJi?b93gP!b~q)!-vAf{H@>Wgh*`f;^OrmHo4p$*_8 zbHV7@GH_K_<*pZwgE_g|Va@NB+#gPUUP=#w_e>2=%W@Uz*l9oL576XB;ugsz*A#Hw zp~00T+Da>`LqRL04HtSkoY%C82A5%)+^$C{e8bp1FmJIIr)jMwR7A$Wy_1?;TIy?l zk7OTojM3tLt>`a^8RF#ManWqUZOHB{i21wDe#i^d;x^6vNAR_Zg_PE9IMoeH1=sC| zpuwUoC%7dDQyLfRY(WUe7M|4;}oX7#{)s2Hx#bu{TFEc=7c(7v z9L67L%~cwK@a*$(NLkmKTd}K@7jtDv2DJCq!UxBhr1VGmahi4>HW|1Mb#I<#J&x8H{VjaD)uV4jM3z#{TRrLc~IwaXzF&i6HK=l}XZq=?fy!zv6xG2%*0@nmLW24Ygu(UJe+Ip+;LPaI` zjx*#=wAkH@=hhX0bbUK+;-`nwq1q+zns3MT*4)jD`RbC(uxXefx5;d@u+*UvUYF~0 zW2d2Ta{>=J+x56<>V-mqaS6Ot*X3&7<_Mp()1ksyn=3xsmVPvg0<|7(xFw0UboZd8XV4m!riU8Nx%Ehr8bvg<2_AIHS4J`IEe@UH6eH*vr&!8E!847a!D_C+}gUpCah zu7_ze&MtC zLG+CYh10vgpxde`wD_I?oj<(BpPA#S$F>xRkN$)&thUfeJ(6L;tXG&(yq-R?Jp%XA zAK^>uWpt=s0L(si6Az`2rBOq3K;z|OT+=X;-a8ux!TWBZ+PXp1SnD)gvbuvsrD4&$Ulo8RfC5uWWwhfcbNb8I=*loNcWq1!QH3VvBcbvmX*7MiO+RB z7NpyZkBpT-7lZ5QVA6}$7udr3ja9g7SJ!47CjX3l+WJbYzSxbfzcL0g7Rf)~-=RnM zS&abxS{Z8o>`RL!Ghu9pYxpFn1NB}!AGXnpSi8!W9-6%sG_PMq&73au+_g~Xz2Q8L zaB-piw#38AN-1V`G^gjvQ{ceCbZozHBvoC^!?&(kI6mHrF6}44u%vO^QLkS#e49C!KLwPZ$FE4@BaXZko z;DgZ0;5z&W--+v`w!D}dzg9zsl`FB|!XLtjg^wY>VKsJg176HOsvknDL~jf!Y7#>J zyava^KDegU3|`EC%$`EEC*nU@KZR~W16+y*)UFNU#SEEGVMu2y{8-;0d_DONUX8KD zzO}n}G5>=TyVA1=iUuU;U}E*fqe=3T;dV~LCi${eHFKjdfcGCb-bAC zC#{DAb-G-U(JX0(~*@4e{AI1c#3=NQ}*C=b+5>mqwlQBSr-OvW@r zE1B_aHRzT<8iie!ve+?=q~}A#1H&w2y|*=yV>yT|+ndSi^gojmi#W{I)R7fiJSV$~ zhv4pyP1JJg9b!9bC{A^#r5D$BM)&A!^mPs6#XKpx4^CT{fqL!tNg4|Wq0{YDOgk@; z>^A9*KWx%*?(!aFoTM+(cNyp%HG>!P!@q;j+BpqBC3oe;-0Dt0e6jij{yuCZhe_l)c-H<%Qw;=E~=;fb+(+Y

    d?vnR@bU1t#dvL;lh-Lv-bs(v|CZO~8>?JVZMLUpN_I?XmSJp2 z`y&OB+3V~hBAvAtlaF|~na3?_}pAfhgW2C)UH&a36m8Ltk2ox7J~nx`_Gug#hjnM z6up`lOEof1H&O=-JBLnq$(;SBE||<<20jTZ2%Pl#xU=?};-dH6kG*qLx`oB7x#kP( z&|-Y7TxR`zsKRVJ^h#y&fv%qy@>|O~an1?I@k`iKM=^%hVnqO1Xo=2Mkv&C2Zdr%U z&V%x&)NvyqN7+z?F>KYb;^6TiOK3aETBMjJ(Pej5&^xXqa1+;lzvD?!G+g!eAEa*= zfu6H}Y;rdfQ_xX>?#%V5%GyUU;k^KQzX2%3R4NS#KZQjRc#AgzB6^959PocIuodH_ ztTp5L@!bn+I>yY~&<-N3WB()9!IpA9y97m(x(3bcuj%ILM)wE+Azc_;PNR!hcw)<1 zPrI*|MYs)i{@sWd|J~Zg`09!Tn0I~P`tXZ6V3$W`ZLN78_5jlze#JLD@|VGG5A@I6 zUH`AFAFzvjPiBud$EG9qNrVFfH>uj(@I2RO*wGlDI0~TZ1gvv|9WUW%A;EF&kK2U< z31x;lCyE-lzYLF*!bO79wF9LtOLX)v=uYl^S7GV?5%kuE&Hv|lCV-SQqW_f}*yXRD z3)4W{pWQ*8Mcx^5JLdMXA#xiK_NgIrjwC$6eUnbP(|7dU?Zb+8M~1UYnFQ zQljx=2mYLMOK`HbrE5rScmJ1pJ;N~UhsLMJl^{Q-Tzx33TkarP7Cve`l6|SCbpPU> zO=e|c)V0Tch3`S-zi+r1fcj54ZJ_w&K$hnC}!d!N5}Ub?f-vtw4C^s+MPMEG_5+$vUuP44JRSsUf|_g zOwS{_HeuUGgH{@>mY}`A)&-&47a5n=rk1Zrf8CcS$&`~H{k7MfmoPtCW{IE;IOwf& z5R>#moxCL@{q2fY-I$Myl2$SUIugcU6<{r6LT78=2pCRaAd4152 z9;JHl&b_~09b`I~;K;%8TGdsynNZ9_g)o#!=7wRA^Zi; z=Eh2AK0%@@A2!T6D2ONYk1n`2a|e+LG2P=#|Fo^WPD?Nd7*I5G%e^Y;!k&@dA-=z^ zk+uHa_s!9S&ote@!~Iq{w%^DM55icT*~X$sV!UaA6bv7tjgib(fi8M~tB8LK^@Z;M zs+ko%jVl_tJ})m z=&-oAuvA}%btF)F)gq-mYmbJoXk^RKDyXwdi8{Ic(R<0XCG^``PlnE%eyn1r-x$5o>MyX~+0e@OdPjECGQT6sh0 zvwjX$>x!jwaF=yvrCic~v@|!HQs*NWu7NVnY$Mc!k@jQpP5cmtq(I`KJHy0oOnZdI1Ex{}tYc^)4b1?f(Yj@&1xzU)~gT25>X*pmGVL1jhWMU{G!hKkx(k_+a)5=67IueX!@rcHkak>YM%B!fS7o6Qf~ zuTa+?6Mz;H3^&ttd++#f^;6$bVaq239N&*db!!IO0&Aw7Kr3cy<73I`;fKJ9xszctdGCuA{{;C^d z)8Dj5E!6#`?(OffocUqE!kh8^?ed*hUWt5=$!R}H<*wYyk-@;eYGTE*})sgkrls zEJ$ZNwZ9NBsQrTdakuh_(Rd_Xb`We${kKVgfk&V6u5t4d%G1j-FBaPh2VRNrdb2+x zazDOUm|mRydG_mbgIK&8UgYRNUM8ktF6vOkMzD}FE#vzqYu`~XzP9X*8{pw|!w$ry z?OnGm8m%Gh5LjGiiMA*dzxx`Rw(h+QC=^H$jVL-VP-Kz`Bo+aj{da|-Ly>(!4VNE& z8W>tx;gp$4sN~Z&@#|xAM0$>nZ@69>tA3&a6q9EzGfiNn?hpltPudk^UZ< z*bS%C1Z2UQ;plQ~kq|M(ocup{DT`PQ(g)@woY9=-H)_9{KAW!9;z(s!IMkmN*FIq_ zE@6n>RNJL-SW7I;bF(&23nG)$4%8FkuE_uED&`ibH<|tGw|4=gH6)kDJg)rS9%)L^AZT--pQg z`D8S975dvA2M#qiNPgXX6gRJy;0tZow_M1rP2T+&2UZ?ry=|-2=fjxVr=oo{*5- zA@4cgdH-|&yVf08dkw7FJx^7ab#-^ObQ8&{b@aTQ!+;Dnj@_S!5$8686%FT(Qc?&q zZUIYmrQM0lxd?sqm!re>9QjZo*I!HyMYGlBdG=-_KctB#dhyX}*?}en3c6{aIfxoS z0gj$z_|+In?W{Lx>FeFitDYah_<{|oLgqL&5f>_DFO2o>CZjmYA~cb~Rn5Jj!oebA zG!{zaeuC9O%mJ4wC%-Pv{G~E3e7&tl`8}KRtCM>pfxVNXav+UHOa`-Im2K_es6NI;+pah@l;teK$&>EzjoF zFXsso=iFZO6Ly$>4Amb!uuyflRc^r8o~2~tKh%2ktr`={cbsoex>+O{*nKuzChQ*h zg@qO;0-fXm*GLgz4gwWp1i0Rpi$R!cAuvY3-rwFlR2nsH`82CAK?rv3VMLQj$*pIF zyyE2og8S5XA-K&G2>_hPb({GJzU+5!_pGnSp@VC~R9_x>%jxkAA~)*g^Nr;nInjbEM-gTT$4F)p-x+fW8hduqH@ zM^9>-Qt+q>x)iN!pW9-Vl|DN!5i2POI>MWq?ib}LM*!Le%gK044Gg4cT|1|KComNamr;xxiBaWf!ltHlzUhO zmzGqWE0q6IIfTLEjzC(9x~s=-F-$|UBuJ93p{x0f9vcGe{9tc+gB?)yYQN;FH^6u1 zx?=Zz)2w^pbEykmf1c;_((8IUsexZ#isXK5AsR{@syhwO33f=xSFbkA*nqXkZQ;*R zjO1KC*E}y_^;bxBj#tp!PnPjeRN5yfPD>P36LcQnR)6Gk;4rPI=fk~U3rH9VnJh?-u$~owP;hj(wDqv-XLc+_n6{hPKN(mwO78C|lNU*i0SPLs z21LcO5TW@1-7z?`@+%;Q9C2xB8ML-w<|e>>Rc^+^qs^(J*rKxq{Zv}5ps=mn1dN&D zuw42KiLgJ{b9Hy?I@gGRX9SXN7}~}7-$fjs>5WwjC`3w5E?peSkR(1o`5DXGv{QdL z^RlNWAj{bU&9v3)zPSMJHYX=$$LpFqj?IjmrhQS4@y}AJ2=zOX!mkZ&Jg{tWF7LU* zF0$nX>MeA~;;wHR)BBhv(9|W@qc)y1vMVM`AH&JiF};=dC|q2<4KzN{jjcI${_R6^ zyU`Qpx|@%=htK{pWqaC$G<3O;QW+i#$yAuQmp2oNvWF%D9D@Gz*Q+6UVz)&UaEY=u zNb3qgZQava^xdCMwCa+lwK{?%ax!K5;Lbdt*XWcfcVW{b{dQ3;t@z>M@k->ZOZ?ZYDTQO12*VOj&DobMFHK}Z8;jT@65(FPetffn5XwE% z49f#Ah9wGcfGe>HS<(;8+0p%cbsy?J{x2OLicLFKY}ZPB>8sT&xOq ztC1UBu=JrP!9&aA`uEA8I(>iAjm_DHZslXlKU3(+UBB23Vw=TSEIO-A0*)Rx+W8~7 z?;WgE@FPhgDoWCiLpzrSHH#nJCsnwz9r9cgyGnS|JCSa4CfU)vA~zIhRmy8m;%MJp z@=eOU-N+YMG`k)*n4sU+(=gos%(v@M{z>t!R~=Ke<2deDrO5XdlFJ#Nb7JPGtgkga znn(Z^aCL)7e!~~r=T@0c5|u-;HCpj8guW)UFx;C}G?NV74IoE=1*I7DC#x}a_A&$N zS{WJ6PCr1kRT11m=N@RO9FhGj^o*KhZoIKvo(>KG(kjBz8p!T^Tz(>@1 z+yx8(EJM$3rGKPDX7~pj#XVM!j01LfO1$G#!?^<4$6w9pzumZwFoa={zOx`&ZIKdE zaB%=ezk-0Rjp;XNUa(l;EH@bK=lW5~t;?}?YL?Q2apAo?;;j2%gq|ii$bnr-mz&V2 z`%CBn-FzM;KV_8d>ZXKt6e@fqN>o!7U6^4L3}uU9e#N~J} zr1rZ}*W2VKg8jM>H#RB6^ro%sCe97j`JBc7QtFwQDteg&uZD1*c0nn{%0wp~9@Cp((hM zsc$LXC3`t}(e7igtyxsftc=mN_Q^8Ct$n>zkz~u_+qbIwwPQDfnl5tvtQdS7puMc5 z6m`CfQ_u&jp`=e_N#1Z8G-~o`TG)pxi@Q_a%_4Sjwv3;(oR~K8uxfXCkBz>%kTv>* zk}|=UD6*Qy=YY&;x2*0!E(U|L$NoE=iU5A zXE_QNKVXyaX+M_fawb}Gp<88xC!$(a2UTd(x7Rl`@HZWGPS3fjf6u^8-aDwzi?;j{ z$JHALUp;gU`+&dqpm6FyhEh;mJ7^0jJa@gfJ~TDRCUJrk9nYd;kCndh5?D4#JpOBM$l% z+RWbfubNgj_ui)SwlvM0O{Bg)?p}Nz8Bmit@cz#0JZq>zYI%03z>m>aQzv`Cv|RzO zHq514AWS10om<|9awMuY(@;3i?#MpwacX`uOA5*~Hnv#C6HZnA=$Dd$)@*AvCXS zgw!MMuW%M9=85Y~Z|u|3u@yA@q`0ro$?Kg&dVb@sUnlf_#jV!B8vs+Ya78aJaA%M5 z`MB3{&fTnjRA18Q7}QJ^23ic3FrrqQ2%xqlRF1snLZ_L`5d5gN(|l5vT$1CNrNt}u z$#1aoz22@$^Xl<0z^kJGMh@*OA>vzR%lV0EC?IVG>^xc6falciMlGKLGn^fNTzCa# z2{OOVnT*KTA!9Z&8yV-)poBAp69a&0GkV2a4TQ1Qq)%OeWw{r^K5v_^TaJ@ig65XP zI`)3s2FzXr_%l1aVsMOnt9+7s;wRE2g4}d7f9p_My4=B97{U)GhbuOBd1(*5N7E3n@TBlOQrv znR8D`zzyfUWME>}{drwjE@mBjGh5$Em0+}LZPpo#6uYTiP$0t=un(VPrYWWZ;3BU7 z)y7rige7`{4VyChZf4%M7Iyd@>^`0IYU;i%rYP|TYT?;(mc`{%vcaHQx@DAX+UHty zW>eDM{@l!P*;};4Wa<7f;No|b(-Tu8ojzI26Q<0Ixc}4hpi#eBj$&xink-J?VRd4WN#o?ohF*`{T6GIiW>-80zKUm(cZ~WYGFM4N$x{*GCux^r{_YpEd zX%w72?JF7xeF@Nkkvph`ZlAUUk3ydG?jq%n3(L|M4=myM1>DV#v@p-ov)PH|X2F~o zjW`Sd&G3v3wwPMwU3PpMqu$f*Q`N=AE zx^uQ!`T{8{W)yN=CEN{!=TR}|CzZ;>(o*OINU8>Km-j9C6yJ25RXFtbOoh|x%pwh> zXdK3zG}7vjjg;Krcb1rQN{zdg7)6xC=_BK%DwIb&!2DxjK^b|3~Z zr(BJ*yTOUp{N?z7H+nb+SaByA>uFb^c}wv{7|!oI$};kY-LF^o<(p!xH8CO_PW}FO z^CNXG$Gmlz(jwxej`1$b2C7pE-Oq#pD7sXHDeg4dkFI0(S69TIS0)e45yM^-$&xgZBI@!gRKwTE?o$h&=Z_zl zzwYk(pG19iZRdN%xUx=3s0W`#onnn44hy4C2Y`N#mrw-&ryX#Y0mG*-CrCrken5{K z4CD5Du7gK>c~N~o7JJIT2sW7EmdVD;g5g}n)$Huas08my49xKrJWm@bA%&-xVXHlkH>8| z=Iad2dYw{nBJo9ej^(+v)80bMTVCH~=G+Vq-F4Q|VX@uWxbM+xqN_{7%eNjCm-B1a z?G;0Q?=py8S!Yu+m>ZrS$1V)qZ^5G=lIYWi$i>^;#Sww02~)tLsREhk695bpSbh@D zo>XMp0f(r+Zr@|R0&iqvinqjk2;$7= zcSiL4`zOiTc*WBrrm@w{uL?13?oPIhghUG7B=cE9hWY|u5W4-|hs|3#c}s=oZw z?V(nAatSrluAgM$GT!@Lbf5c1&0gH&f#`fA!b*YP`G*7p)>#!7iJ@#yuC@w=t4>|Q z`pa}4SI&9WKGC+04+LK+)zK-i`8tOLM(-7SSgI#sRKHNSLg{gmqz5mDVdx&lMQ++kGdXm4>{Qb7#;^)J*@#E@yo{)|csXik( zJ{~3h%N1!k@3V4^EJft)%7g`)O<^wnMu@b=Aya<)?&;*In}U6N>V$hjxduieD^IwK z8_~%@22DvIjlr{LtqnE;j>8e&SsxgE=r*K&zGk&dy;#_hpnT!V2CZ8a$#n)OuqXhd zJVatZ2e1OB{)(epD3g01tTI372iC4~uY;57GI#s*Fx1t3GgU|7h}S0-1gtfYDE}Hv zeI>)h~*O;KxBYNb2CHHz90D zqOfSA0C~$Vk94tx$<}XLuN5!te_V(Je#?IB)eFhk$uyCVGg^(NODxt538nybjH3R$ za>g|7oB80!!yn(8nzoF~Zk&D{CZAs}PlbIcyz6#ED3*yCEMgM5oorauBFBF;84sKP zlopiUJg?WNJ?XptqD@LuCOo|=JSMsXUXy3aVQ^2eD3~%?lJmW7%=FP+r^d!LSJL-e zKmGlvIL~@LQ~BbmS;hke_;_4}ZI3U|eiEvpJm=TD6nucxBtVjZ#FYYYEwv7#z(8R} z|2ngp4|XRV$l!MBPQBk3C&A;kmQ0=!ikH;32{iGjToKaLM^UBaNR$92NY4U>!Kp=4 zIZ<{)(}l9zAC8?`m(=gwt|JdaZFiU6ZI4}3vjg1%w>Q7oP7=Gi_usv`uUIH|sXyzd zq--Bti2`FtzU^AY1Wlhkw0DDJBy#Rs@}Yp*dIu}I#$?w?V)6(V-ssWf2`?2659f$P zV!^-($t(H!yPATOCYu7z6%6W2Bbu<-XF^hL>&?JudNBs>FaXDaM1ls40l%An9f|~9 zW?y}1v9XD89t$v}B{cb47{N*mpR}yj$3i-u0R~ANOs)X})%a-KlQVTb!xx%5^UurP z`f?9qR5@07i9c+A8A`=Gp2TFC%Cdc9%Ia`$(XI7+Bc32LAS+PJxx9|kqwm9zXTjxl zb0W51Jil=9#_6P1Uqs!;saii>hs}8QJi{7TD9=NI*f4>6f?~ruV3fp!Ywxsr6+Eu| zdaQ)xxEw~{rCyUC(Nqb>;vB5&Pp@h{Y4&4L5n?`Yd$buGc;L#&6EV4NpK0ny_WMA= zGFiRawC=MyJ@DMB%E;Ie7AB2Ul6JKygh8S}5(mj~vLjFV5GrT&dqZD1Q?R|QVxzq4 z>T9p?iBr$R*Y{W2K6Y}m+t>v^z1C-Ks%SP_m8~v#Y$?YR@#!N5;2qWv+e=K zI_|E_VC^^a!-aiV@Dwf(vtEcNlp3}h=msevWq*Gm{oVt`Cc=I!pqec4$9YmzOB65n zfDg?0x!gn{SbqojD`L%sp_KFsx-N5!B@M9!*9*^cr`-F{>8qpHn(ppIj|ZFi6d4E( z_nI4{4bf@!>IF3R9!KlT}9!a|Ls zF9i$X2h~HET>N_dM9SedB{QUmz>RvyjqwlJ}5a zF;P6=6Cl#^>yX{J^5RaL`)Q!O!2IXJcF4h%m!uPn4IE(vIY-0G!B8TY0u(950w0M%_y~mmPMS8YGw+g73JhHe{Z!IUJ_yoPc%7$(xjCQxBX~oDoat zlAz-n@og}@r2SLAc{6V_e~a_Uce>C%$ANc~$};FZD*rZB(VUG@p`B~i{)||I|J)qY z#p4L+uo4Y!Y>!l9uZx(xXb59~@UVid*?L993LnM@3E+xEH_L;d_da=(%^^6iQ#8;- z)j9n5)6Ml+>+c_z8xZ%{uTfNZlmG=B1ORH6vV1IR+r{2n7-#8rlb1Mb4M>MY3MpBW z6Wi+*u-fjby~T-|IQeRj%Rc4%{g+GK(#6}2gPw_T5yX3O)p-b&M;~*Bi;NRxS^m-Y zF2j0Hy3@hBv*uJrg7kt9q@0|0{ipcII-ZlpSr2<7Hf+=1F#4Z8_G3|aBVd~+A@lL~ zl)J8M3>Gs$h6M$CvEX6ALJ#n;agbghr}>xTIrJh}xpSXGP2EoKcZYJENlE2*a8!7? z0l3o|w;@@T{x)%RpT z|0^r{t<8Of#SQH7>k(&+ne#FMr!?Zrgws?sU`8>~S8Y05n8!zt3GeFMRUjpHjbyK2jscezkLyyWKPcrK};BnKIZpPkEjf#aSM_h}0agdZ&drI!Z+)|@D~nr)fEJ3@kI3LRE<^ayz# z9ByTvx}ADH#eqzy=)FW;mTj-#hV=T3OwYfgOm>=hWYhIMH?ix`LiAfV+D0v%73 zyjqP>=oZ`#Y|#bxyNvy5bB&5#zv~54f)O5fc}6c46&W-^X#zm|1bmKKf(AY`tNn1( z=U?)kEPHp_? zct5O21F?^N2qBeqsebk8O?b@Xd?Ho*Y0HALV681)NV|8@UPnnt0=zfEMuqlL^Ktms z!i>)!t$g~fq<5+Hu{aI%7fr^A=k8wH zRba^I@Ph7id^|h?7YsoF5dT*XB?XO2!@dOb;k#79$6xak?R{S(a%UVx0=GWRM8k3# z+c>cLCu-^bbn|(YdbaquZ7{jI`(d+B;mh=mD?@TuLUKn(g`|4|yi2Y@gNFG_4XypS z_+)qm9-V0kmEwnpGLl=Bxa*57u4T>iGZsW)mtKW|DiRen=C_qUUnN!{7LZ4NLwf5n zAA-Nty7RtY3?U;Bz4M8LS29u+dM&3Y-~_ZiY4WD!07f^- zmVH`=$;!LyvEcQ_?D$J9MX&>2I&mb%l!BR@zgMrx8`$X2%yofXE2f@5Ej`ax*d}vQ z8ik@otmXqU@2bwuR=ik@mowgZiA-JHbyC?fdQgcu_&q-}?6t2S47YV9E0yTS&%2QbvRFDNcI2 zGNj2o5)9-p?2&7vH)P|Kg?4UVvUi*_Jr1tE&G@sk*p`d;{Q2$HsoC27;@yT1c#xVf zb<_dZdt##`{#u;0_E++Tr612u%ibm)W-A#QW8}7DfBnK1Jl>fejMech!1wlrNY*=i zjF>fvl6RUN?3ZZMmbNJ`jZgh9eNGXzYP#!cglGTfyC-PdhWTd^kt8?1G6zoVVYmJt4^ z1u#v>6x?ocIPS}x&AoN3FpcSA#T@%(=zM_QAXi)w8e8Qpwa^pJENnRCnCI<#AD3i3 zBb@)xR4T5sPH$%*?CrNY;y&ars>$ur(R`fl5PTG|tS~=_a0RJil}R>czDW~BLZZYj zq?`o6z^3jWZc7|AC3-()HbGTAEb7M+^nS`1b+*8t(oqYP$^I8|fQD~SGanbd;#BhJ z!|<-<(9J7l+Pm53`r}Q_&to<`h)c9`@6QIdfA4Jm9B*C2wu~Rk3^9OJK=1R<^(VXH zln*G1vJ;GE_toIx`G{gR+9PAt8IbVTgy7kN^o2}ph=?w3{{n(Uo*5%FZ z$^8al^q8~bGQtfp;C8hw7yVC?uRv*tcdoh>Xn;ft&hu`|!ZH)Jsa=4YQg*i7ODw}=sw>N)k?i)^;*4NtO;BC$QLuRUG*c=K*=643_zC zBpW91d@VN1d>zJHAG2VExn}p$;}hJh#$_(!73eE~AssCH0@58I?k0&Yjkm-j`xGbOqt^;H2X}7n6h9hbVDk z&ekPC-Hv)cLQd}la%W7g-0U|Q`;VEdiw?OxXMR;KRh#=!6{$y+43>z8lGE_q)<)#a z^{zob$_*-$P54|nE8m}oSiBpU=CX1cWh4l29pH1Zg3M{#UN7ZfO7xt3X}^Dn0V}v! ze;AEf2pQyFk<(;W2E=f&hJkXx5R`>xs?ZfV%+7&wHFYMv-&4(b=@;7HKu_uEo-`LO zkN4zLo-QmB4f!-IUA@oD(go@^o6ndx-59&Cs0+HX52{;pZ9cgV$SgGFtmW1}Oe}^? z?s7dp`PA?GLXBG#)~KNGM78A5K-f++` zDrj)WnNA3WtipD#{dCAG4>hBE@xuW#VZDgG?j4Mht&XTOQ2dX~1}W5ad;;-Vj{O1a zdM}(O5p0x$vu-544w4!f^5DeyKNmEjrYN};_I%H-8zmfPLxRn`-!3L615J6>ijYUFSv96F3nYCgW}ERPdB zH&3bT=cOiBS8nAcHIh2v#D)ScCe>QlN3B*0WT6WjOg1`o#TufJ96$u@f7NgycVf_? z@qza`;Y{wcAvIuHz|vAJQ6BQ&oezXFz2+e5`Vg zX;ij_@?~?+^P;P`Mr8TNxnW8WCj}qDj_ck+&3j>(A*L`u-jjUhHi(jUynGtP*!}34 zf@!;Oc(PlW#1OebD|c#ZhGdi{HvZMArS*4x4=aCA`blJLBx$Ff&y;xU9j?S=@z|SB zO}tIvxZ}sXi&%U$Sax=1FJj>D@UEGEInkPtUQj`4mI22Nc9!cx5(%x4uRe5xNG};z zA{f`BXeB=&Cq%I8;!&7!v|y$Di`Hb?hcjloKqQUUJP0K7$tE1`t z_P`YyZ~(V%;5wq3@Nz_yYCORcefnUFUMV%H(n5%L?|7%-Af;Yr?RVOy*p%5daeHRq z0dJLvs9%r%M`vcUEqaK3a@SXQ%6r9Zow0i7ZN-G9Cd*!pc8bMyr0Zcbj$7yYz4 z&GP2Ef39pfU+{bArL8s63iuX*72ZIrUa-aEPT~v3STdjw(qQ-p z7xuc|4C#*wso?>b^JQ&x!X`yEdz z*c~;%sbXQ~w=w~~UaKdo`*+|1x}tQ1_c{cvP*@GM-g#X?B2QX0l}}NhOxSAiPqk5_ zW=i2<0b76#s0G6R^28A7q{HB8RY~pst9$V@(Aa_5Qu9x?T%{Tec=)jY&6ZwWP6N(l zHSWWQ8(C)hthRuKUH*xE5poB&%-wabbyF{*-8Chl>^gxdFKa(N;dvi5I<{JdIU9y& z0ge(Gw^1gQ?JrXHZCY#7wrZ+F2lFAZ#$s=TBu#M<@IWp2E3EZsCmX!1*Ln|Eda|E^)GSGka{f~E0d z$&jb#_MvI|OGJRlt(Tjw$H+<9yVxNljU5P={aE&vm6!?PS95}_D10vr8lVEE>Ha~$ zWP=Dw1mP2ye{Nf4B#YFH+5ZCon&1CYi$%xnHeDo^|G0CZ$m^iK(DtBBd3M7NV(B3W&JF+k^-JGbw5 z*~q+4y;0;xcCKvbgl7xr;zQG@HA@8HbhnU|SE90U)0SfH4?w#mC z`~mp>fztJtDxd({QjQ&S1KxoiitabEZEJY&*Vx}h^asBUaW{0G%1fHXE zOVRcNy(a%6M)VH{638$pDjNVWJ)zER_=fctHL2cj7d_8XveLJu^i;tA@jg+Y^yz8C zrxD_IiF=+uxcu*5_u&Ba-~0mLjbH%A|Ieq9{@2r>M!ft7zVCks&kl+G+ZR;-LjH97 zUl0BdhyKzD3fcdD5R{%L#rnTK_&%_TpAtv^mkazi_$veiPg8ChA~nsT*lhgB40HThM44~HRo*gqf3uy9xSJ{BSq&c2 zHsm1_-1OD&v8Z%~e76K`p)>ol^iNHQ0N{Jky6L(u@SE#wK@cNe&QX?m(Tek9`B`(x z=Al_ppqh=>S3ybLGr9`nWz`*;gL39_O~Mu>jo&s9VZhfuvufFq{9BYClxXr-Kcdke zvRPgyU-9GEeOE89af@M10X&PIiulQT$;_nW+dhm7W1Yg419f8GBL`R}AnP_zBynn` zjOEk%;<@)ZaxHi`>q0maOOw7riS48SL(z?8{yWd9*P%SLu-t&Yv(H;={|ZNR$3aw4 zwQ_D=RBg}Q7IK5+N@d!pV5OLy{39Ms^hbuxT$Klp)?acvyw@oZen8`_DBj@JuBkM~ zcR+$;KlcyM*6+my9o3@zvz!6dH*WJ)O}dIQjB??>$|7P)wp-EcS=weO9rN)8LDtw~ zEuVEU#rpv%`ALRrz30~JK@o#muwllfnv`N#n|Q98B#LVG84f}nIhsF5Rq!<1`~$8r z$jAWj%hyJ4j2=(2k5LHjVH)EsHXPR|L}yykXS58s5p%*4n6x4d63gYNwJ|nQryVpI z9m`_M;bPU~ubtpn0kcDCX@<0j&6(hf zSaM&mG-Xy7I%~9*$ZMu+@c{})#H&_3i^4w7p`y}r)_PFbE|KPWTl3bAejV2g+^eS+2#6o05ys#Q5!BQvKH$i@ z_~6A6prQt%4Qp2*(G6@R+x&zHDIR z)NP(L+~i7||8ii*mNyOD0vo@`7hfdVSi#Oor)=)l(If||!OY2TU@ljiQU>CzaV84X zYH1}`4A&hTui9+KYulwitlyS5Gome+#_&}2b(Yq+_A~|Zw@uHyhi1!V5ZQI;));>k zv$Q&;mF`1&h@jVW$`^PMh)0EMObAO!k+%?p^$h8~oS0~_Vi?k#HeWuL?I5hWE0YRO z!*G7REDe)#l^^o6=TSJSW-b|xaz69Y@{qt<;sJtnQK2h$=e%z0X+r*+>GIO@@@757 z_Q1X`IA5iM-$lGry4cKFm2avCy4-ra2ITE?K6D>Rp2C?H2Run93XfL{tpTon9oR6o=p@X|m-&N{MnJ4g4 z;>RFFizOM(w5TbEzxCeBiT5M->Z-WS3(-_zPpA}KAF1UG_|mK{UGdTSq^hZMCAq-er#cWFnzz!Rl*ylcIJbQv^9C}dU>+%#N)T9@u^72F<5GWNYp=Fm| zcI3nQWA6r#o=v?W5mozW>hwHcYI&&C6;4-pk~e^d1o*<0tz=#P4EXImiU}42PaPS5 z)M9bwP=jwcXXJ)XlbWe=$Ji&&FU-^xVMPyg*pVqBqWnNtsD#b5K;nY~>u5wd$S9b6 z^5y)JmgP|KS{l|Ph<0iZM%;)fJ)J)FvtnDhfX7;0Vpz_A9$99W&WX@(CC6Xdwy_8# z?+L9la*p4jU20gl%E-6dr?VlM^M9RP7){r(E`K}5pt+2fzoTN1fCdm&&SP5;0c*Nw zBjGuCp8*Hrj}WiAUP4*qXd{?08&SF_Z8R!UGt^s2Ejn9dDZ9`FJWiNr+USFk-)A@6 zUd@rTC^U+`q#5qgsWjsd)m*h+!Nt0=d~XGnENlMxHMFDT)p18mXf*YeFf77iZl` zrt!Th08{ES^u0I7rX$6YjXZmm>>SEhqSqsr)alB_GsQ5Q9?&jFPy zwo7cJ*NSe_jBGYoAC9ubLHk_t=Kfm|P4+RIr#2lnZ4_M{La=Nf9HKa+;xJ3MrebuS z^2AMT8rerO2$HNah=Vz9gxar`lLv1EK{NLO`tw`!ya()+Qwb$aSG1Xu`>-|3hbOqp zY?C2u5lL2`fcNPzD`>}1JUF&Sd1|PJo41upkL{d4Y8|wq*%CGnZ)c0enk0&0z!V@A z^~IzER4JzAAo>GwA=9b=^d-9!oDMU9!eyF({|WwgB9Ab%-_?pu>y-wx={u;sAR;8p z8Q22;0RC&|mf6i5K;9tDvT$`3nH?b#)m&P)i}FG^g_P?;U7Xx(wDxNbd&ZaiZ$hTI z&URi%_*+M})7aN5$%Ll4OQ=dP7WT~>7aqc`jvRlqfuX>5MhJ~SP%#RGk5@4JY$Lf0 zjY1;i2M|+wvA0}F!-_8gP!L_xvGfr`RRkO4NP-z4 zjS$65nP)@i6&WzI%WKgCC@7vY^^)DgVVR)qA<7d*k#@=3y#6)mU;L71oMOL9lr0ni ztYEipcu_|xhmL4aCG4hHgX}rJ1amx~?Xc;5fO; z`LfEky>&&sp{BglQ{^Xn8S%3O=MgikNNaI~s>T=3CVS`e%pyZRafM?KN@8#iL+D>` z36?x4)CW2BmWiPcQ_!o-vIfkQ|tgETu?(R?yWYKu*wY~Ec|zZX_yUX-Jf z#77TF*0E$Y&!Fkzjnn%v6v#URdM2zse+ZwyXlQ&K3eXx-6-c=oQ%w3R3MTq4=hNPE zrXUnUY%*-qmxQ%J+7QSo6t77a5Q?G?JA3OZ4qCBETK(D+ zc$G?R4j@$)V2-CRhnv|xd5g|ij|&~7-r@(XC4T|pNSU- z(Q?rfYQh|X1RG-D(1`|TBv{?FB?rPoX$daU_L^|jUQkJeeklXb`O%uB(v)(T^=xe> zFt)Y1+3~abloCF;W{Ol*vVC(medl|s+A(vnenYTWp)r)jl*cQtcOqWEWLtcIFK_j8 zRQq_oA`h2HRMVuC1B<=w8NS*_1ksq;2$(l^R0;URi^p;_#1d}wD(debNLfU*D8Vqr z(1gHHL=4gdCxu_e8*g!uR5syz(J@GMB`A{%tp%*d^fZF?U@#jW`StoJDJMomHx1i{ zQ9d3sWRDaj-ZyHW`!xzuhMg0;O`s{7M#rPUWvPN?mAgAPs%g_;&e57?_O9x}MPU&o z5?50pHBy84mNdgr@-sYc9KH3Ul~e|+gA>Je8Zj8K1JL3LbX~@u%pb7kRSJuPtySlB zl`yRJ9?0feKg&k-rI64o^i!x(9%I$6C7I8`O&f|+#L?*31ENMqBve?#u1yr&6P(F8 zL=87K1`DV%l)_OwHTA+oC9M6ry9@)>FXIeTwBFTWC8=pn71`%{rK5h(D8DJaO9qUW zSZPJa$eHJX+AuWKS~S2&`cbz6ijd$cK(<~CRsA!6eBNtcga$cnDU$%Kq_&vg5^8+v znCjt0;Zky^BJ;uGeWq+Eb1tw22q5kLl_DPLs`yB}#qC^jJh_NtR`{PhEl1SJaN7Ku zjj~DU=z$zfJUNYti#ew5CHf6Osgj}j-SsLO6^ z?rvEZl&Niz@83|&wWp^Zm(zUi8f%r7Gaz>QJDy!TligoiyfqgHCdDAamroIk{xNG+ zAlr~vi}%gxOPUxFIM*(9AA#J)P&A_o`KZaI7sza;`x^$}N22KsKZ9?x4c+fL)gR0H zY@X@xY$@p31PVXoE6i`eKPv|#Re@lYFR%FKduNtFx)s;1B#Dju#+t2S$})x#*`w%P zl()u9o$nOOqh%=ww%>tWl?%@0>Y+iey3V7{D}CXi zz2yt~a+?uA48eeqXBjFl?724;(M^@2=UWIw88+9C>@)arVwRPqcN=W{sF#tW>JxyG zpKF*^f^{P7&&;Zb_>HH3rn)&_u|LOd&Z1*i%tK<$_N|TQUBymJVEjvL1q_$xXgUID ztDlAQf<*a4-CoqDtn9sGe}g!y3JYxI1@Td*?qWC}xV!d?p`=_fsN$qkDZZH@3(=O4 z6;}kea;Ecp-1XVGuwY}R!%u&kA(frU6($dSK_TVo%uPDafJGBdgbg53Z{6zNqcj3v z6azoDzk&dC;gKKE72H;nY+$pHj~QTL0jeZTRt;{vpfp${%854{qFkRLYZB8jjG~m? zLtQ%T7+>Vx5Mq!$+K5HbtFrMqVLY7;yw-h6wKTU?W>#J>vwhnZk)S~=M6FK7=ryK% z=v^l%>d6m?x(je#Qkb%lC(A|P1+oQuEFzD1ieZZ)8;MqlkKMx6jcJqVv!H8}%uCz$ zsVD}Eheo_E%ZYXq)H`{dn-K&w>FSa-!=qxnj50HcJIym$H1sHahg6K!N534XER1H8 zQA|p(CmuN%%u`4_RU2v;7~F?26avFMzfZ)bM)8UT4WPjgMze=f6|O|g5qtj(J~t={ zkySydWzwYR2)roWOy`y?LJQX~Wwf9Y{Jj4}6F~Sv^k845`FCdDR z0e?GX{OdC3_N#0fy5jem!B5lqA!w@vRtS&4#`s2Sl`J;=njA{g%;Ei@f%!XhIQPVi zmEp{X{Uu85z6vA^9eSWoT;_#|fLz}t23%34xKWSY5Tr-4m!?uvxSLy2<(WM#OV=UX zC#&#dYdJy&6kI}xB*kZOiUI4~YNcQrdn>l!^QsI~Zr=C^nWPFme5g(!yGA_SyPC@K z;$UgpNd`xT#mgezQNv`^!Lm zh$@ha4A49dcm)^*ZHoiYFamIQ6E@V0LJ2|RR^dx?AAQ=nG@y!PCRG6hu-O$sW@|{u z%Nj{4iuA-u?FlHj^s7Z9A(Kx>K>8SBW<(V^CfJ1#$M4_WQpua8%Ld`u6kkNGXa&?s ziF&>eZ*^&bBuP&du?^6ukDJgsS5mR1HvC~z{IiaTzg^f|h9{%^LSj7%k@}19LP`SO znc{#3RNS;lGzLXH6Fv;(z4=*@Ecm>*@RmWGT<1GPV`Y_}$*I^e&vOGF~R7tgx5jGT#4c6M*4!S9c16l`|ffp*! z&QRNMvBvTezzT*qn+YlrhD?pn+xYm}I3yG=;{<1maYe6f69%B2gK|{CkUcuFE!~Ru z|JhN{#(!(>zKNf!BH_UQwhtd5fTY--GrpdLlPj@T*Szw{At2fd`Y3Mj!9T}A$#Ns{ zrOnv5g7r`2nh!=)^0MBzW2ns2%{0rEi38Zn5D*PSAVCeGE6i(1 z#?A|3aIaABt#Z|VW^s??6at{VpJA+2WakkpKht?%+}@$031=6WJq?p5uNOT{A_sC} zi$WIb!%VHFvOP{CUh9NZm3}1gH6)j&@eMF2eGxF0MlVCM*_ukTp+_IVwV5MLKZG(FiAH#)SoXJc@z zwSKftUbRG|ki;$9DeT7Q0;3AT3b?vGOPMrqDJ;6i1meZF;BmgQ^6PlozSzz=wys)N zWhp(OqPjdN*&2X3T2ayf)13+zdEev8tBN{a0rm&mb>vGu9u)6xv8fWy=;EUGkLfR! zh!hfvGzL!mSmaC^STyIWwKB_<)@Q!Ja|32>?=KDScx0zUM8nlS=Mp3TB5#$Ftx`!X zDr>CMqQ{N>Isf@u?J(D&jl7&;sx(4VSGODm8IsYFgSl`}*en^BLECX^&d7mvKrCjH z@e2k}`1w)06NSn=8hB@htIBVwiC0n16v-LPQ#9~rN6Gj1)rnu5ush+K*Gcp4FR$&V zr0(mD*R-~?J~b7S{HZ3M{Z`yyYh)g6Mq2DLV_Jj1aGXvNB0(Co|G`dGGd^-qvpln@ zDS-ji9$BLqnZ~5OU7XETqD^IcfD6wL()}- zHTD1Pv!H8q0m)&s-4!!gL)R$Tf+Nb#nq}Na&t#l^xzd<{u zdz&O_$=M6m*9l_uCJU8e4Y71$e>C4Juh@YM)@jl0>byg9Dl(+F3S{ksyB)^SAs39y zr#7MEYI_?>-f5DbTh~yzSx1NYu;<+uB+?Ix=$M7M7hbHikGCwLSYn5yBLAk8IK9SZ zODvV@Y=We-j=nP_y+ocf+^+qkMEF%uygJYs96nL%zAPY+;M7Z8e;6F1-%N{ztY4fQi8u2Q zgGjDaFQNWVL>89YN}}=g&uivgL?1f)ds!ITPr->r(KK*~y^d(3_1qFv?^9>H8g@kR zTza_9&^g-PGH=;E*M0icE5X}R0WP5DF--AI1|zUqP&Ff4<2SGcgG6-~iTsvDUD=S$ zX460IBrQ#MLEWBu_mf|P$SJ7C@HDL-)2&+&V!-YMjWR@6xXUd|kEXNSfYLcgS)Tx^ zU>BxIjUojtmgHR=iDiZQ1urqZ{$+#VmIbFg6kkwo`(khlrQT74;=XJyU}$N%WB#d= z)39RCMkw;FtFQhW2TI*=_6*G~UZ8+EZG=86cF!C=JUg>?x~L@hm|LJvtS5OJ!}lYa zMjoHuwPMP?66=JAF&(nb%hkVjnTFWyAZV3puRQa;;CEGp=?3E)Q#5w8lyqfI)m9k( zB=IKZ194nFw9J0y6^p+4Y={POScNV;Q7*KMJv70u3M1(}dm!eSJjIv$)J-15)#nsdQyjEmodj4Da!ThhPJ5oad!^s`6KIDZmtAq zNtLb1Dm|QkshBLM;_Zrt_M9L>qOGHD|9ApGoPEop9-&@eVOXGtVdQmvHcoW$(M&E9CI!9cnTeX?w(k&Tyeocd@)jJ6TQ&+C$#kkXX8cis>6%Sb zH-2#hYBFdd!t<#e_eoH;eeYwt1i~UwzS6p$5u}3gf`|r@HCQnfxpL!1*y-Kh6ivCi z8oF-17Ry89J|GCb!_4+%aLZkMfi9oK<9_n{9#&m0?|cf6`%z%vg%)SK5m8wlzeHG8 z{Ojk=4FPIH3ylD3rNaFs?eKkS^~mmk;B33`sdZTVEJq_nHH{h#;) zdI%RQe*TR5y{#BLqi|5W$l__krWy6%3)jjPGPQd>`1c+kFx22iOT7qKh<9)@Qtpc7 zBQlaPt%Se_i*70*O9Z#&YR7e4GjE#ppKZ#W+=~6@oEgcRBUR!A(K>Q&eB*Ypdn4Xp zVh0M6lyX#+FgFpgjg+f2MS)TJnZ1@VHA6s}DKqpn3Wv5}_t1hB*l6mAEZ&Y$YMxI2 zIPK!>t!3_cOn0_4h-4PHe~*L{qWV(YIpa}b=lwV9;Mb!Xri=XT^xeP^hYuW>Q_F#u zshyVO2fk$2v4rY#4qUKoKKTxUC4M!1io*qu}Vd)hV8CBKNnZE}I%u~r7HOGV(l0BZ{A>YaqX*%^Q+x$#~ae#S_ z5LlcHfJIEqiqCmDy@QL56#BK#DkqJBVoLu~?z3DBBM zub_?w1Kw#e60RjxjZbhDW)Dk3URssueF~58#$pil?(KJ-#tfD{zjl{+)0K%c|9Vd@ z^~uQgz^U=A`RX85P6*|Cj=sXZn*^}yiphYtYnrgwOl~c+mlYE^zqvr07L*HDjbo$` ztLg(@MJ*Bnbo`R08 zd|HyYOsb{Mcl%yiB9{sghk@|Jz%4n`nt38f{eEGljE_7XQ=JcBq*fhfFT=MAFot12ZE z6rTD*=bG>H;ru~85^j}2tuf-vEN6cJqND?@q?9&`R}m3h>C?* z6Y=yTmi^N-P`V-^;Ve zr!{w>)R*;)wWM_kY%#UxMZTHadU}BlfBPN<{r!CybfpDkdpT?QAUpN)%Cg>|6Un5q zl>xgaT^KJM1O#-`MH^PBRvh5lfH5O;;{4o(utQx0M3OPp{`RIVtvzT>hqO&#VL~f- z))2>v>r?6i14DW#ys9ebgU)3T#bj&GE;lhuIa*1Alvr~43P#N~^uWg>;VtNZh#|;P z{P(4uoelx<2&l%Nb?XBaHA?PhNj^JxD&F9Rnx}yfE3E+L1h60?5g^Wgxilm6fmOBS z`56dMp*L5>X#22W%SSp@Sp;QE{1ft)hMMA?7 z_9r>0iH)vhx?zV74=rO^(?Q~3`Z?{i>sQv~p-*GBzLTN7kE>0VNHg>&zbE>ny6HP0T zfjL?^5rCgb^fIsAkBnsvmsBnRG$sFzT0*|MgI;{|p~i#uE9`p^UW4G9W4V{+zudd@ zl2Jwk>XQ75Q_oRka9%U5VWGY5bDqK%;~udE4-uimcAdiHM$?T)?1$XD8~aV>(0ll= z>AoKvAN*5z>mQ&Z6sSx1T(M$AT28E)VRzx~pQxFRANgjx-(J44N@J1#qFx`0wn%uT zjE;2cikOu=S_eTvzorzM{o4CjG-&2Ke+&#Pka(-oO)TZ(Z{>?{)>fY`xWpm9>}Ixs zMkAM6E+{e8T48;jT_<&n;SEPyl1KaKw7=9uE;!DwY-ti%_BggDJ`8suQux$29o<+S zi&{<-%8VaP1PJWqfLI+blQp|dUbc?$adCd(GL^;dHY6c=mcuDXe#PjMZ+r9xVnAny z;jC3lG?!CxW^YUBw0AWcERZN^Ul-pBewC4tA!U?~*Pb4~xMr=6of^qp$xt-|^Dvy` z-h1e2Y0hWM4zW{4!bdstZAci0dwE|+en}@WJYsQIHd2q#7Ur~W2nXACMDQNhczhEw zcB%{6PWn`1S%F`vDV}U^6phc|ZJ z4?j4h{UrM+1Pw z-!NjWTe#y!uC)5h;pM%w4>wOY7zaPG=82+vja#jr6?ngU9Y^p{i6r1|jx6fJn(*}_ z!hl94Li`_K`)<(NKULSbgRhRAu%(4Bb%tzW&4Ris1AoZN9~E#nSz4rXqM@miAk2Zs zb#+v*&1*`5IMrdzdph~X_Di2Rd5l&CO@iZ1ysUR@E4k6TzqVbk7Pqqwy&$bROjS3H zEi^nj_XhI*`bbQ9G~g#)K8`*rN(2!u?&DdbZ3n`{CZnyH}=(F9}h(hlFZJeh>c=A@#?o=sbDY;=hH6#^1-pHHQ=I9|9Ic=qyF)GZa2_5o6pI3QcuwMONg zFwQ)_JKQym=Y8kod_7{l(_nx#sdQ3PgkoLwY`xjT)k~bYhRl*|#f4WBEtMBooQ>2;#CtNo}e?1LCp=;GwO< z3om1046HKZ4~BZo4wmV>Na$woG0jU>G$2PHiESG5|Co^W$K!-?{aZoVS9aRfX}!K) z60Io~3JR z6-)R`S)ObYR4Fac%=BfdZJ6U&?ph)>M7Ju+*mOn|_BOsqHA~KNt}@-(ku*Y4*@CkE zAb+)QG!DAhplcB3fq!)vC|t_8oJZm$p4Xi_U5z}ipdW*pG(9XQ0Lm`U76}k%58$09 z6#(vZ9U_G}^47{RsZNYLxHbS~SE}qu%SZzJac;RV43=;iwf0ZZ`#05%Qh5;4Uc-ivN(@;q);qi4QKpwa zl1i&rInh70*Obg?fcgc?%2;e&uBFOVAxW=dy1evfY=lRxr@dzZ zXSOFc7eoU3+ds&LPxJlc;)P3N=ne$8LQ%f6A&9U(rcp;Y{{ReUGMwmh5QE*8}o>V*P z&~CqKb(bT5H+Z_{`a+P^xKaSKV(!U}hXl6V5*~ol=6LE()*der zYqoi&d}fCM`Jzbn}oZeaXMdVr}V!b{aGnq>{@WUpFpI z_Iy!|VLsf`EVz9naq_A`MlZ}8sL2zkSa)akB?}gR$3)J=thr1{FK*`rih1X_YoJjJ z!hoP(uc$#o?VA*sMoDjtTDUHknqizW79hoA#X%pnahiE1rR2_#y`KZ$^qC#O^Vq6H5B=?R>mP#1 z%xqikf(%a7;a!$^clg{2?-XJ`8TGrjwk*uc;bRDa0?RXt?uIu;4D$EihM(32Tnb3b zvg}DjSl!s>UFytG(9kAueNE-JA@^t)K^b&u^hhgPf-pFMy*SlSWvnzvLQD7?cgrFvSjesT*|A+Ic>V^@0J?+;K!ONkrkY zvXmj&Q2dcM*nr-R^Dz(5ND@7L2WX+>Ewt%M~NY4$soG&=If=#FV9f~gEiq*?f>PdvI(o=e#avQzg& z4eS|vsJ`$XaTyT> z%Qkm!?*MOvVKJv4pPi%EW;!;+NAAiHzlY}|JbKXy(?>oX ztC=i9*T?cYY~V^9QV0y`t~;+D^t z$_s}bQoU}DOdPc&`wthpY=}gGpi2+Ar0xiw5`}vJR4aN>bU1-miI3-?&Rak=G266j za?XafIj%mrq2le9B3{cLcisJ!{; z&>g_*TKYo!^z80o-X9`6jmfARV!to(?D6W3S-jyL*03$(t?mv*wd3VnpL&nK-ijp# z%7S@|@(>9iD0DY$HRR4@zamPzpv07UhYutOzvNFl>R#652@jx=5mYJrS19^4YDC}y z{pD-;&ICvX@bZ55ZO_B;Y0oV?c$IDLP&(OaJWGl0GFrW9O8ff$ALroyyr_;ZH+y#5 z?jCeFGYk z(OutPNoQtgaGMeJ+FyJbWqb1G$u}i}ahjcXJuSC?;Y2ZN*Y_G6Zr^SZpi`bS<#*!^ zY7AFXN_w$!OUec3@u0@TyAeRDp2B!lIT0`>YSJOhh7+5Eu0S`a3&2kDipRhJr7`UD zn#UeeyL;Z;Ur6(es@bbtM7g{AG>XsYGAts-kM4i=ay@6GVW>yZsayW__@rD(TL-#) zkox!pwrqvt-=|TM9`p-RNWwiodJyZTGWgv`^oUQyFiux3&3k7qJ#ctzi!mU0R+fhI z`{i5zd))#n9X;$0vgfqLoUH598w~uJ!=T@QV(RuRd`wT02kl-D5>bD^z~soAT%}b` zcrkEe#v4J3dI4sZ0tyO(5J@VHf~M5&l;P9YbP`57Q^?S^ZnZ2Kf)2E z*AiNhSi?LCoHJ@-vQ0!2>3a>SnF$v%EW9fTAiN`_V6$D6q&eZl2)xlDzKh*F1{x!( z#o>}@t?Ic?7j41I$L@aR+tMUO1|Lt)2o@lR$U2V>W8k&ow;$28rKOU0*1e$>>_i`$ zgsrSE_?F>^bq>dfrF#hI2{tsuSek~2S$)N$%6n4GeMd2EE#fopytF>AVMYJP33Nyc zU#<1#m1wYBC(Xs|v+*`Z#% zF9;1~A*wF55@9F~x~X_4wA1xV-RBcDmZYa*()Tq>2MXlh&wQ+$v}tpYTQ3g{C;uZY zc4J!7rs6gvvBkm=cQCrssLA(E5;&Ys!geAQ#R6I?wsI*#&;-|;iF!U+*S>ENHLrO zb7fc~=s~Kvh_9F2sQD;FF9$1o-&YeW!tqWiVQ%gpk)N~Ay*GfN6j|Rm3z~(|Ry($? zqQpsM7R(9Q$+8yf`Y0k?Zo|O zH1Qia>Y1ZvGFXNi@0FbtLe;}pi#?N0)9ow? zXQ3d)7lU`Q$4OI}KYi=Hsxtq>l+^iXB9%G!TbJoC+pTy`HLftc)+9IM?#HZrJlEdK zg?x7|^&@*)v_BA}g-Kl0GYdQa9CEAf(I$P-L?3rv_Iy%ZkAs<9d1KgzL6uS`R8rxr zL(=|{l#4JcKE&>$Bo++nUpNWj$**gj!KS3QDae$I)-t37C`c~~=NbwcC%4mnLy6J5 z+IA`yUw9yEbVhZ*VPJI=<76PMn(OtglqcT8;2mTX5;@KUXx&IcYTnCvIf8&?c2S!D z9J40QT}I0>g~dkRZwZI2j3)C^6yjln)!;ZLYo+CKnDWQj#KFEFx8+JK@7R2nVN-?Q z0VqJWsoPc5@m?{KO1e+&zXu{5&mkwIQZ-+;Jk2tdxE?6gnb08Q7@TkG5$0z)!TI+E zH!KR7z94dHMJNUZG|xNMKf`cnt*wD%T*Kq;?!Ol=2n3^fD=l1M(L({YGTIL++*&;| zi-YRUMXLLrP?t28a-SMS7JhC1T7H4w*;f{ zdMx`#et=1ikDz;*V6SGEg-98$$pkk7(g*?}P^7Dn1diu0nP&r7My@Moyp*3W_tG?V zPo3!EgmcIUM8(DcvOU=zN#Awka(|0x>NE|QjtasukygoPWPAQ^^#S%M0-PFMDL-;y zz)!@An>Ko3uMFU`7RFLX0!x@c=6!gts zDFVoFq|27}96P0Yt0AMBnMdq$IMvvdk&wxtsxDP<-K%KNe@%9_XdR zFmc-3bI^?;t_(m?HL}?I?XM}xqEx5|)OL>QpN_4w6}#({bQJJ;x&E?f^o1D-I|9Ik zD76>{08nL&L;fNJ06>?NLY3-KSkVj@7)KBj03mecR-;ew?nN2I+)BH$53ssZ7}MkT z+I#}7nG|E73~htHQvF8pQ5~^J3AQG{uY(4EZ;vq7I7hpjO_&K;MEQOMsgS-KD=^}- zIUTq1{~(Ea<4Ii03AxBDn23!R^EodYiQ~e4|Jt}sVVK0P_oR-&qm%>24$W zNGxm*t>d-4>IPA!6JquBfk!wv3TD8myGXyoZv9CF`iE4Nej!K@2!s-{owgD}8+F%i zOxhXkp_wF=!R0lCwND|PgicTp$BV%bHmUe3INF2f&B-QLg>;5wSwQ)j*dBK5K$AFea-pjmz0aoAA&_EJ7}fQ zf1HfI$$eoF{4T4Xt%PQy1ozqGG30|>4je?qAa+mC32gU*a2VCD)fOQDcF~_$p6s;T zOb$@kN&_-FE!H^%0I`WLny8S0R1;O+cNaLoh+2XkGP*&71OS#tD(_llt4`U-ZY0;M zmW8xpvt#K=f_X>8^s{1<8Rh_R+Bg1*OMbDv{EPitELaK< zl)ymD*;bA_#c4?vr%qYh+{4?Cfsv#@NgP@0u*-xM@4Y$Qz>8Z<@Prs<^+dLX56NI> zDubO0bKS+OM#5x|+(KKn$}|H>aYi7 zeGQ90Bx4eJ(Ax_j_^ZhrazKE;PO>kCQW;8zJEfb>jEb|DgG2LMbQ6I+Z(zc;$fbyw zAH8(6Z;yf3`%+0{&<<)JXauC-`EVLg_pxn=4YoR(a7ia{^LqtZySRZW-hS~C03LKV z#JGl26m(H@mgQw0BNDqn0g|$LqXFdQ)4}v0aRRGaj_$_;|N5hQFCxu9KRVyeJ+AS3 z;A3ZS%V-`28&&N;{bP4QBGK(kzG~iBc-QkRpfMr~E~ViuzicC-MlL`Y1H+2AvH%3p zB6du=`oU!^t<0~MnfNr;xC+zF36*H)G{`Wd8~Nom)2S-)=@>K(98k*ihtN0x8hv;> zf(HQ;kj;^#0$0iiGGf=ToIASOs3F3bmT?DRRW%MTOyC5hef6)1h&fe9gm%*Tf#K7_ zSfStKoXrHpuoor1`ofM)HgU!xTSe zv-4Y?qAGd9Ep0kEt3$NbYWBnX{Za{Mjz)C#1{d(366%(7v3Kyj)z`m(B()*;6l{J^ z%#$$U!#EF!C8&_HoZ;rf8uF94$wM4Wmbm}*4^^bjQZr~3=NPGY1sJy(Q z>unLus>Yif!{BC+A2!{FubR4?FG?kIaNS3ptH(!~oc)M-kziY)RV^!ApBC<2uhmS$ zKF;ti;Ni+TYahZp5&+c{QnYdVLYjWjS zqhI!GYkpe2iF?GZr3NAZSx%Mm7Qd4&oHPIDN7Tz^VE|#=! zm}k~Ut~};!xg{#NHd#J$G+)jo>zU@ zk2_F}PJH`TBF@QiBKjGt*4D85!X#+%E0q@H@_GB#W0drb08{-jq67Pku>N`1b zi6afHA*-RbgHc!=P8p>e6nT$+OcuX@gzDfdM{@gNmAheITb7A3Z>Bz8uiVHG`9D!g zB$X(T^sh9aLlzE=Jd8HSEpMd{zYC$1HMR)$Yod#@%h_Vd5u0qpck_1G`N;gxQ2eg^ zm^M)9Ipw5aOM!CN+v@QZTXZh{j$01vhA3afu%s@zGs~?|W2K^m5+`(*CaaOj>@Qp3 z$36VKNlcuitv8T1ye2Kw4dC7kJAJ4-K}}z{yyA<5JUH%fY!GfLy^6Xi4*YfDF7f7* zk1wM&Ik6Q!6I=0Q@T`+3-ho9PLA$PN^m~v)czjMLke9b#?LQ?4uM=G`4>o>wAf9Fj0G%3}+?0X>5J2v~M^S3=SsFrf=-DrH!O!wq1rdzdQcy4^ z!iD!Q&x>xF0DM~njx-sWyt+2%@9k?Rvn?I>`yLaE5Qp7ohP5XyDv(1~-g>y2XbzT1iB$Y-L^OHxl}n6v z!6f>0>6$6M{doX%f3Y7YRmD-n!vGlSxU<=Ti9V?zTlw;1-%*A!inRl@f+8BSCegjE z4qnNr#ai!kgp6zl6|T1z{AZsJHAj3IZx*d(OO3)z_+x+w&0S&+N?h5 z&!_t#hq65>C;X?{?oSOJAF?reB+@IhDBzX1Ct=M^A|(4aR6}cq4+g0Yo}W?@mwd#% zpXHnGIyQZe50Y$p(I|7up?+rXTIVE8+7|KP@cc;8^8_plc!m1!2ghvM7=<~H6ETS% zT%-fctB9mJHjjvP-;{1`8|!NCK${%0>-7e++vq|`=YqRU*PJ%A_&AkEq0IY{F_gfGI6a{sU3;JdYF!cAEI%gwHpfz;0R_w4F4JVWA!tqq8!DkSSq}R zi+G5=VCRz6e_a`Vqt`q#@$BPAeAkzcV7(TPnU*E#9DzKL8fs*BpX%pX>ssj{1jd{0 z9K8$}9G%18M0xdOM@d&eZd2CrA2sv+vK$n)K`4-dwhaI zP^j#OojCmK4&5G6el>JwmU$;cqItqeEm3YJ`FPcR`GEcSqO{mGLMy~ssmLeHU1!XcPNsL1`V2~a;7xY7n6cH)bGGH8kLRz z{(A7#M-^?bF#8Zt1RnV_f2f-HB0}|2f14^ogd`l2QK>J08@&GZb-$=_^{B|*|Ldb~ z^iA)#t5iz)1#!)hS;r}1zdg}tt zH^!uW_w4iA8jit6W#$sa_1)d~%H<(q;j7E{0 zEpmYIv}gi8%_24>s+h)bl!jMdV<9c&<8o5q18)}>WQX62RwZ{q zun7$?k`Qt1^=N?%lIWywv@HF@Nqc~B*)73JNUx!>Vnfg;IJ@IW=0yB6bA59AM!K2f z7>Oed!#ka2w{S79Ct5X3X%bwE0et!&tv`AZF62lO9~5Mn1z%+_DnArx?hi35wAQ|@ zb~S)L@7*@vOx#Zu{A?}1QmfUm<8<&&%&er5s4_>7biEyE2_gnj`5wExj)AQ;!c#srC)j1GYQPt8(}bKFp3%NJ%)>a^*!MD11N!%WYaM5WXP*^<5y!2&Wz1}q(0o= z==mn6R$jJNt6_)fXa1yGYfTS(gA@;0Umgt8Ld0wu-hQ1CH> z@t8viUG{ZR99~~o4j_Nq=&O-d42i?Q$;z>qhBD*L$pf%mW(+++8Ks9DDltZu&^1a< zSIZECM%U*W92DMv0gvpm*Oio+rlzC%4~jjgVCGjba1!`fsOf(bz&PW!2!k57TeC*q zTCuq#0Pt+~LFx%#L8f2L2_i+Xoa^B2r)1^MyO~B%I-uS@N9ev)U4Ywq{jPKNC}BnIiyZn(l2RMiWB5jMZfPtN5C7L1D5FttjXp=|Qh7G|%z|bT(&V=M48Q7mxvaDwUTWv7( zXji6Flmviwujbg_^VMS*Yc}oK3R4aBoI2%-jRt5zA)7wFS!ueb4#^sx)m_KGmPUEI z!rGiiq-yYpY<=}f9t60cnc^ACj?0td=@nET_gZ3vXD!iIng!}SEz+~}kR$=LFs8@1 z-WK|9*+hg#Ik9A!4*|+*bsifT?oNmdv1GA6qX4WRI=tB5Zq5T4LtW0#r$&vJ1r7;s z7+}*G^QP2|?8^jF)QQVJXlmARLaX3eY(|pGk}>(wTN1>oAi(IHA68Nhf+D$5O!Br) zKy%A`p2t~DV6SihZIzoXs!5$cjhQ)#Dn11uP;d)rgP-PqF(Y)e6P6J7-V>g0g!W5btTTstvn6S4WMHZAWA?h=oQMo6a_fDrO3B5(gvzC)du#lV))l zy-yq%D9^Akt(&J?_6nhu#ey)ZAiW~BPc{{CUnb);#`$V-SOF%H_vL-1&3uc7zMoV246P+ZGR5IC)@;zyc8mpD2YCU zs1~^V?dB+Z8_Z5068^zbYoWVIw@wXIuJRS3X=OI3eWNIDSQf6WnN|K{=}=S}F!@q< zDs1^gzvC80l_xTg3KcRX{Z7%RTGFg!rCG5mbZd*p^%s`(_HPdQ+w{Gm|0ovq?`YxU zW}I9##PglJ{dx88p>An@xJ@GY`$I=aneBMfW_NH!>+-KFWL|l+iYxsJPyM6(za=5w zs^}2o_c#*(kHmuCP5snm(&7FN=oE4OJH3SdO8r+MZmS%}KhkL9t|#%iufywvOD(t` zTK+A&{OP)Yre=@|;vGKYPxV zhxG66;PGh(G&{4}Y22a>XRa2YzX-uReKPN(^ZD-+(^;bMNC`9EWb^*o6p^_(|J^@A zN$)y*8@(SoT9c)8F~r;aap`&{QLAjYp`6Q`O=;sTRx(M#KrGz$>Iernsvg;IF4oWx zvEU*%*d(sZWK~sBNj0Q*Zv2dve4WciyWAIxblOT!#bvDP&K92p*TwPIG380Xt}5F0 z%#%g9wTX$|7&ysUrre3=2waHNTQD^-)jC`Jc^(|d&5IwfH*?9W*IbN4M~jKEH+3p9 z0z~Uh%8}mneQtGw^m=*;pF64NTIQrw+4pro%4IIJFFvP_kc088+P0#7p!>!FZTr$v zK0{B>v*!cZ-omd@c*`SRXw_0S-6sVMEILa%wXxMZG$#s!P}Hdpj}6gE-zmhuUPK70 zc)GzIjA+NsWKvVD-Q7||&L&Ddlx3Iac5}I&?JMxKeRMjSZl>i95*wUHJ}3nq8|V7cksST zwMB#K_PVd%)#}@`&pBTcF|pu%;vN>azBMWo;$355 zkx;d-dzdKD+@L9KB&VF1F_pgT;x&JZEY@zClycVq{6^Ho&O$VokkgHfI-ZaaYALqE zS?(v|SW(p=^I+abf_&I$YR@>5m&cI)BTg!?`eQO5=Sm^(Spgdh#z(;6C5m5Y-eW*x z3h4Y28B7cW8g+0gZ+zsGR(NiN+wc)-D3m^8tp*?g?!E$xepQ`1Ict9U92RsXigH=)`)|=~3l#VkdeGmZK?M|{*vz0tQPr#R;C09R$jFc4dHcfI z8JUO{QT6{YDjR@FSF^}G80Qr*WlP4mK>-xWPLmat@3pIZ#nIJ))LhxhA_s4*D&uen zPlgd(GQCpD+Av6&TJ%0VSTxnW#Z1Dc>Ux0>NxsazLCP+~0C4A@#bZ7|oR`!N@3vwB zXhfGSiMm5B8v4RTHf?ovM%Ad57b*&Z(qU88BsEhrGAbt-+cqQKm;|O*;tWHG5oFC9 z-57*l90f0;3TIk_CXO5S<8Er0hP{@tT(k(;tN{ZfP1z4FqbqP-jlkkPMnYQ>od08P zfD_DgDZj*!!Jc%(Jmwsdigjjv0~pB0!<1qE`Nep~=D+R39S_0{TaqTt5_3;|{G9Ux zywAUA0dCSP5Bbk{Ae7iBD+Dr}V6&)Y+D3$-O{vR@0gTr7?yC=ns8Ilq5D< z24nB~NW)6Fm+vz*k5=C&!*~wa(h{XBqkLFA(Hd-dm39GSY~}{*StT0b!Y}BqCdf@@ z=&q8ra>$VRF& zWxMmyI&WI!g)4DN}AU&w@(kg^Wy10Xk9~jx1 zeEpa}gL3Hrth-R9ooB06E;o{C6_?D-#R*HP;B_l2)Id15j*Iu_XKFNkYR{+VrDzfIan|(uL zu@Q=;Q|th%9syvAqt+r_GO6^}P70?{+IN1wB~D6@P-N3RU|1_v&R_o@G}Sz%>+IKd zsAW0_Fy0nBk|e*8p1dY^=kG4cd{sX}GZbYnSQ*+)HNF}ojqR5POW+^mps%;ead-3| z`qteARJB3Th6Krai&|zDs?wR+0p?4nXfx~+LE>@2hQlKU@A?TZ{L|klF!A#Mrv>{* z+4`Trjyk?`>ki4;w_6oI?xQ!8=?6wl@87Mj&3n$3rQH=Wxwc@4r10y*p=HUcKh^sPL%5RhA?tXB_yKVVkMP`DZf8;*Oomi^pTF2 z<%duA-Sw_$S?i?5DB~NX8pvFGPS_cVK=+qI9dWUePRM~KXcm; zN$|v{Our30^VIi!Y@>LX(uNs{oxSY7IH>Y@(!j`v9{^R|IsW=IbYcFm`~*}JrCg|s z&F=@$Ssgz=+sfk5ABY;5{c{?%X^}xFDP+|U^a_6fK*azZ-^7PBg){!gRo9>)P&zdn zIMxGzs-Fd=x3oz{`AZrN_h7nz=|`r<+sWpS?G*6yk%_PD1xtVbBR}eMP>qPUHAv*% zpokV}XMDGdjr*@v4j&K2$ETua3z8&T9#c$A(v59}xMkkiuIDWw{FHdvzPHAgg8rVp zud`oPqmTrICMKs3Y^Hp+@4dXb+5NTr=3)N($IWIJZ&Ob9rFriVhVfUsFE&9(Lvd{_ zZ{)hb3V2>gYR zL>j(~NwL2^?AW}d=jVQ~^tJDXe#?rdn!X5Awn5jjNzi1@XOWhLglwToKnnjOdiRkn za-}wZA;>?^fk$D4&kau)pj(&s674MPZg0+OnWlJ%adJ%ae>R|4MFMioYVidxFmC9K-x{^ z);1^Y(XpYorZ&V#Oi?tb%{EXdfbik_VKUFj-qc`{&*;bG@(^&<5qBL$FlPxRu{Ynl$=0##DQ zI1XSzV2BeK<_4;R2kw(XC7bTO0wrKF7dD|g4vH@0QqY422v1``6-7rS&wYMyP(`gw z8R@EF`uD_R1$^q$hdA#_EQlSHJH>IU#?@jyT#Zjks;1*GeExM|cW@!gL%f;-|F1mR zJTk|=nB6t1Y%ZYwx4KyzpJWlZpCdJ~MNu+KTFz#Hw@_N(hEPNiw&r)mvdW=#KLe9Hg{E zepj?8E;}ykj1b2bPO{#CLoIbK#WNcyTgLA<3_TAm6eo0>3gC0JASdH5T6nM7;lM*{ zz4@$94}u`Cs;%W?kgd3|tHyb-8YI>%2j>GIfKqj#s?16aL<}$gZ)JL*ZXBlt0iILt zdHcwO8UvWbKEgRU)c3h;g-&9a3{lDYpG(fBfl;c>2P#bA`FA8Gk^ij*UG)|Y8pQcX zuQ)Ksc-V7k(BD&E1}$z?2JtvMQo&6WzhZ_dg6t8KX8m0;ups_KQNQZb_qTdz69Lws z|G^+XJayZ+YDwdpf8bBMvp-zl{aB09i+58aDTDzN_wCNFxdVrt83RNZ6A=i~`!a;@ zzE9&QWds!6oMB`ucwH=$w|Kth9E%r0D%jL4DJ2K`Iyz@zGflOkk{mV;LOK*gW$hGBWH+nfI zj(PmyVeJFk+K|C0g)q}4HxH>Cezj-j03PMqi~LMp0Bv2D0wRgZKb+r#oB3{GeLMw@ z_AB$OrG(_~TI~ZYg%7R9-=qm9ztDejdBYxQRyoh7h(Clu)g#Wnn*5`YnDXL3SKPz( z_J_)8EA-t`94~@;&n_%2?=B>ftyg~ktCiP6m^{DYQC(`fsQa5-0sml&Os*@Ajm8QyR(X^t-xl&EzNZ*QRz*6_R z?@ZCB&Bru(dR3`evaGNqkx&yhPRNbi=u2-sUfumG+FI8QB&vn)`1-#w_cO zLy#o3rH{~aH>zrf^BXov&fwYEWWr|(vR`N|S1XDd&*Bb0e@Ua1*X_0PF5tT-fQ2DCw@%Qc@ z*v_-(ob%lGeO;fc9xP5t2V#EEbIWL%&-eb^H?m|^eQKhkopq?zSTo_Qd!S=M%x1pl z1d+EHtQ*6Puy2a9KIK4t*{e^_Af{)on>IaC@X+BTo?Ca?#6#RGgzn@+9Q_o;eY-iA zhsn!0%^CZ%dT?390BycT2^|Roj{b}OQeT5m4>S6pNvlUqE+M3(dO|mIJ@E>Z#NDcV zD{N9iL)a(Odkg_`TXvER%cQw0l;VM8uJ5kv1zjDd!FX00$u2kgHVX+-1u0gZA*;^M zoa4ZfwD|C4p9M)l>R@6<4f{`<=dwA4E%YXN32S4D&+ji}LLjz@V+r{vG;cd{aRBLo zu0ug3T*9rSV7g5#;hh$~1?@(vBV~`a3eqCWsYYrxjB{S+PpZe1&@jdY3700jCRkY@ z<~$f^spFXGUCn(mhvgs|;u-q2zss*b=Kk20lH{na)ezty@_jb?cdza8#>F&$twfD< zwC~#)IaAAQ?n6sE24*uhAX)fmZIT3`iv6^fZEXag&ng&Z1?Z=+GFti5Ndc_%z~npr zNC+v`>w(94*v@Ql820!Y$fU~7XKm7T6?XetA^3eKi@0=;FLE`|S}azNWC47wZPkL- zx6Brq<>AZ)e;X8~?Y)LJy^cfYQ%a+|fuM92c;B8y%@+?il}KjRD`+S2h%s^|(E}l6 zBa4#Z7cmp3+lKevh45Kx8G)7{8NEvVNgZqSVl9?4en(Gw>&DG{W^V z{+Yg!#+*&>$Fc+{&+vpVzc40`FcG6cowDqEu3A#wirO@RZEw-b9PUF&?5ajbuDKb4 z8={|F+4h_jORqgI0J&arnc>aFJ*qWNwspUE?%U=9APiD4qV{thhxS}I6XF}-SpNDO)viNJ0bVjr;FsKBeF&+ zUw^Xf|A!{~XMZQjw7eZEQ>_dV0d6^o=gu@ZZV>;^3UA9PSIEneIXzvS87)9Dj>aU> zLzsyHt=6SA0UH=rboni1y~PJn@(v-*;laY7{jY)f)t? z9Lom$Vw4~@`J(_uzE5BiFST)-iWH?7=`#*$t_r4VX<=I#<1BuKr(rcX;wDDa_mW$L zd%}B(;!fP%64!NOsKzm@cPQTM#~WecGbHH41VTKBRr0CO2{eX-DyMn_Vl-y~*oaRW z#y%xGPNL2#nLk>k!*>tx2oU3q0caMX!$!D^fcDW?;})H1T>B8J$H-`FrN8mB5tACn zdxPo!*$BgmDN|8Ar|d>=+qs91uGq6Abp2oVXh|)n{u{>d@Z0bM%94_s5SlpTBofPM z=T-~gT#j1Wt^DS4ORxP6&v)JF;^HjNYDjxMCoo$0kd9sN_E^ijC&kB91+@>kZ^qNi z>;JH&#X`=7JZiYu(tsGJ6^ptN!Z1^q6Jml)FF%Oteb75#m^jHx^OO|A%*}yUNZW0*OB-}2_USZ* zRqy9jrkO?QTyr=s7C;lKFTVm`iGbW-XgO}KbsWNdd6GWr@9CzyBY&C!sO*Cc+kvw3zb(GRpl*%~=cf46$rhWKIdDi%rOcm*Z0(rlU1|QgVFYenYn;u1&@gZ6b^=O7sPTTKn))#xip$3!*uScsB@o5+qB%U`L0d%tyCgOm~v0o@Ov zggR`H3BaB3Y-mEp0TTEf3}h}Kx&yO`hfx6|ngA%4QyltJIA>i+d6QNDhOR0AEjw4J zApcx7^65c#bVO;J9Y6$!{7JU$tZQCnv5^SM$;sCizdE(6X!pA3O6^{8!Y^u0qV*M} zW!MSZU2Qdt0&;=zEcQZw3ym4~58V&L{apTB4A+gXWx>=j2s$(bGey?EIcWCl4_5$B zmJ8kJfe_VQO3OPd;pJ*ApD3EOC!7qdRUHKctRmw}!XbKZXWD}TagOyn0heM!hBQ`U zBA<+;N&6H0QXPqr*x$QezZ@St^ZSz(S1Ct|?PVdO%8CcGPW$-#DM7C=L}l(GrXzN} zyr$tguI=jp8DPgV0w93&Mtai$C`WbWC>LN;E%Q)gNKpfy*k~U~aZlQgnyk&;Cx(dy znSDWG&aAW+7Dare_h*5$J`zd=$yqNpuz5o1SV4+mUG=(Km8xH3qe5MQ5&TUItVA%p zZ%_Nsrq!Pi=4cNSQ|dR(@i)>yKmH(21@#I2a7(G~uWd0^iitZzTevLin|reW%=4?y zC|SIjw|uWR;qTe^s^EKA%Ar<&5_c};#{DQ?1DiL>0tcu~s1(jL-tM$3g)nzMB{5z( z%_NVWpNak0bbvWL45YB&JzCM=l71q|9do`lP?5EdifbPA$SQ)y!HPi4+?oP*z8bGe z&QW9Vv{mU5eg z@!LJ*XyN#0ua+;OU=84TA{1i2SU~Ys83?KFe@m;y`ZdWUqd8qK7Z$1d1_>iV0>{NLb!OG~@5HZW*lzoaLk8 zF)==%+bx0oyMV%w>2!I5g62rLr-bb{}M3CJiLjF8mSWTjif|@7w@X z0Fz*%M`LXw34Q~AsL%!RXMbh-NB_3G7~?Zh@cs4s#q>|}Ak%xx+=NWG_OO~o%}#}% z!rU?08M_`^^_8^yYxSUu$|+DdI6}u`vX@HCWG+z0&g~OTo$^wtS71(AeN3qI=ZKRV z{+fSNSJaBXC|x%8m9=zx(#~t#CIZzb9-%zuX7{h>q~1o~%l)9oD|b=q;pzWj%zrOs z(z)5YjN;I?Q7+p(k)zBY;w8sBZ~8Yaty!%>$BCk#yS%#xd`!I2Z{|(Q8L|A{ORVpm zaR=u5!`kegjh%u-ewWb1kjNU?XzAsWD9trM&*kM=3$+pm7doke!HUY*{}J$t?K zL2IAL0R3doH@v5! zby!M@vZhA-(VYWm-si-W-Jd!V1*73yoUD1wi7)C1ej1knHpX90^D9%$0_g*f`&|2K z+Q@!c){1(BANy-0>A~d$iK?ZTEs*x}H6tS-q{MCD;Gex!Gs}ebO$Bv^n!_ybi|xAM zPhUwl#a!j}(8r855Wui0N zzcPa|bUv;x2fk_z38cu7&-rE<2Dw!U&4w>8eV$@}2i za?-$mIRgy!Nc$AgCvM}Y(T5K>W9#w!P~iMuX;oMkIhOw~7&v{=b=`<4l=GvYD1Kr_6+eEU-!-$+Y(a8&BMcMvfPA=?!cY$EidU6U zf18*^GSs4W3$Mm~zto1Ac-RN4H#Bd)l1wmR5U8J#VQkl^IO)|AyTu@*BM*}(5#%kk zubiAB@YJR7`{BPfA>K-cEi*ei(JbgSNyXG$ls_WQ@#hzxryv?kHF-S~KuOL{n=hAA zz-+wOnM_!0`;=poOdD6bn({iJ1Hkhg@}oj3=icmX@Go$L$q~4avu;?TW8|+YR>+3& zN)Xeq26(ywey8Ri(*RqBhi#6X{Vz$_ddq+nH0H;6#!&lh%es-i2uT{vdCy+xb5i%x z1P>et)%$b!a?9Mw^h_h1SD;5kvvj>vFnOHjO;>VOyGU^_cam8mo%)WT09W!F%*n+i zu7F3@6ifZ%Q`MergTL;9nO-VPG@Jzshu(Pd^vN^PlcsTEAN{O@IV?L33u4;kTitMT zp(?s@B!eS5#%V%J%!BC;1|wyuyc#8vEuiG;mLkBHr*1jyzLCbRf*NeB+S4=2bE@w! zaOBnQ-w=Ae56Kw8+SGmENT*~voDmuXRw$Ms{q_$B(F_29+>@%uheF_RV#IAaV9!v) z(+;!~;KKy7%jahFZ-`PhyZ`W(OqsF%kpsvNtFUbk;)&nm=&4%=%Zgt8!LZPMeVBL{HbE~$)ogM8e72D^tN*)ds&hZx##k{Zodu`h~(v> zs68ly-lSgasOrY+yxA}1&dAl_nH8f@O{YmR5==8=TT83(d)*MHArkIWdLxQOlvx0y zE@7QHCs?1N>yBNoY^}1uV$bHDN}A3>g198Wi}j7BV!@HMZC2uWAP{{1je20m<_c}O zGLlL~0VD);RhmJzZ7GcS@w!BI6xEepmhI`IBST+@QCxjOZzDK{XZ5JFTA?HWG34dc zR*diyz1IqIDwghdGTwCxC$|lBzqqz=<1rKf%{0u;IRP|7_Pv6cCK@;wu*K*WoOS4# zY(k6@efnsO)FgT+L5C)&s4wvickP(la;-y8Smky5JJC1O=8Zl_z2WaEb%l;|v`#Fz z_IH@j={4(dd^fLq4t?W5LFr1NOc|G;j+}qMlWU?{;5Pck!TA}gD-r9zbWQX~{`HyV zfz@q$FVOWXeliUV z%!@eu5oCeeCDGTx$|kfpd?Ovaat36644BB6d6-|=QhW*JEI8K?Vp1d>QtF&y=m#+~ z5gQRxV);BQ_r;cH(?4E5s(j*N&r&#I$r>tnD})n0VcrRCxi6KmGicvM1SS#zA7pR0 zmM;(4&I&&<@{sbRfzdVAL^pK^*}rz;C!sb%29uT#d)h$fN?8=uf56K<*nxU+t+IlDk;2X2C4Q6!W*b4yMJEfT@B*5xJ zUy8G2-gz$wwbmfxf>3CwQ37f9Z~Of+v(|M`Dq$^TN0@s7x9HjEduKZOAuI^+W&mwv znzF$e;u3923& zdkwQtbcye$RRjD{PRSSsVN8#xSo5X@3npOZ9GVj`q#Y&&7>(fV0C-gH2PeSQRMtc~ zmd+D0hWkjw{Z)>{To?fU6AFmzT7;}{w1Eut!e31pP>v+QO$If}owJXDt0%gTZ&KZv zuR13RC!&Bv9NxN1n@%%8S6(UO_utFI$}Abr0Zcinfjv}EB;Qmx`jp-*f!J)jvHYINJ(dzUqXj#oqp4&*5gB$F zB^G2+3Wqht!Rw&V9FF^%ZN3nar2}r;FQ)UkDQEq262#@DNIphkULg*HF>N=MT1s9s z^NLZ7N4vqJD9$V_GZ#Q%M@@2J1PPf(fpdO4uEg@m_{47mUe+TS9jw46#*2uZAK*<$ zeg>L?wtJIrl7Xd-%>%N}tRmj7ix8y?&a-6_6^In~Fb*`K)w(A^(F!VpaB?6-O8fb6 z38L`Ip_wc6IgALn0V)A(Pk28fMri24J@NZdBV(q}U1O;<)ql_xyMUSS=3AvyWx-*i zmKki)$WOU-NLBeIMrs^9=e+%Be#`&<$MbMTY(OB#*8LTELztm9W5mf(gr!Zsyr;#; zFRO=d1SbORuC271!`rsTQr(dSVLAdd>5*iE`_B0|Dn8qoY~rDg*?MPJ(aU z1Z0X>(@$Kl-?Bca0o=&m(6Q)~*#;rF2V?M-?N_6Qq;!J1)8Qra9mFf-%;D*`MUVtmJsV(6zo<-D4@^w^Kr z8Z?Pid%!F0`MmFoq+0JThG!N1ghra}&OFlvTXFz}9B820`dacTT=d7l8F8*X{Bs-3 zd}~lvDjPoMh1D7Cwi0>U(4M}oJ@$whuYy<*V&p?(6&5M;DAF3}~vV%_jwsj_RJq`2d z8u~rmRI7&#urqlpT~kA6Yisks!CbD45du&MMVgcvN)1Ls?Sp5$`>)3gJJs)Hl-QfB ziL@4NbC^>)T667JiRXQqGZj_e-!G08p>i=ksq?s=TT)r5W6^koz1Ut2>*woVLZ7 z6Nb5Pk0(JM{zrHdQI7~{x^cPo^!Jze-w%iv*cel*Zijm>wg=kicBn`(18C~Ffv68G zDIYt(VetnZH~y$hTRu(rY+wEv?UhQsJ`;CUyXbvG5091NHu~ict?*lnF9pH)U!L@f}f%GLssf&nWuw=yjRl(HN;` zpj6CmCObpnUC*2onXQX`Hn|sW3NDgYvGVXI1iv;57EB?rV2oTMMY^GB&5ODZ2@szC z_d!nO-fs2+6ygay=~0zA5_<$8XwKB}tWWgaoHkCCScl`uI{!u6qO)3koo@ZSB}?^; zJsi6nRmU)!XZ6bErr}@CfOx1CQ$LXL{N#s+-wRdc&}(#so4NBa*%bd{MCbXI0y8C| z^P}43`{`(FhU=frQ##c8$_glB1?E+K)co%y#?f@(S&1S4oHrtJP89>B7{$|rTYN0( zM&h}ULk3XHvwLvBcfd=#Tkbz2Qh=raGw#0fD3>lYpkx0N;%h1o_X>4o5hHp_4pd6XO#-il&yd<%Q$rdA$;ZQ z$cH+s2E2QkjSb!U4Z&+BfaO4e2!ujrFzU`{gq|Tmr@@UC-yDW!BTeo#r+>LJenrFr zS-a6&0lTn{yl;HJ*p@i`LDpPfWAR`r@|@XjS`%{XUo+z<`{-C=Tu}8^{}h*x4NYB{ z=Oimk+R(>(=}MwtYvQ=?=!EKKUy+ONg^0a{s)atvLe-U-hVu8~?_1zq8+cyNEmcdN z6MR8L@vOf_lOwpN^C(8~p6un2yX=E@t@)0ki1k(rciPW`w_b<{G&DRYEt{=|Dgyz& z+B?d>Kc7yJPEj@W>j`u9%ia~@>yt8UDJq#WrvIv2$*1KfgrT)x@jkBK@sjj4O9d*nH5k1*ehoy-|3e_4VMGUc;{)kx`FWDmj zbO*IIZY+J{+i4V?EhLUQG__sQ&RLJXJi5Jq~tk@IlCszD;|*r4flA zB-KyAp1C<6W0+BEc_y+~yT!VhEM=SoXtvV7=4mObHbQG~_}gH;)v`XY+QChlwL+-< zb?7I~^JJ}dc}jZjs4jmK=7KtsYbkx!!O3liOb><|jMr5QiAjMugqp(`DnXvkVLM>J zBq_FXaY2Nv!jxYDWf>(VthF@J-*s;?&&XI!*<|Dtt)oW>OV_kX%g)}JWep47f%Z3O zGJ%>t{CQ0SJ%6<~G3=HQ0AMP#WQl?I5xO0R3cPb}4P0oeho3|^vVf-dTcBbYT25c+ zT^e^Daa%i)<2l=Qkf$VLdfs~|3}6Akv(3vQDGK|cBK!q1w{LTf_w78UE1Jvw&erde z;X@(hRFpe-25Oj+?lq=iVWYJb)=qwK8)X)CP}V*j3KL5GT&vo`0LNy|lr z7vwq?$<}>-r4qU&%xR4AXmOtC=)LI-RnJImZrSgs3O8~0>bfC)x9oYfL;0}KMN-OVo@4;}4~;D@ z?$WVew*!FSXf=tVe=J~GUAealE{uvQapl^vJzZqGqx4ZTgNph@=8E7r+>Kk2yosddYRcSLIu`6y+Nq! zp+V3YU6;GE-oBaFDsq!?{IWpEz3B!qrewzQ$_AxhD^=B6nNO{EP6PesCsG%_Y!u7iQV)>i@irfJjun}1Jzhp=h-^knt8Q(Flpo-WSJPm zY#iQf7@*cL2OLFqVZ7dZ8ahw$%K^*VSm%|+Oh(~XrB-cc-iwrAfR91utj1yvcqul(fOMp z|87Xvast{*XBekta4^^d=)7zkQTD=2so+U6oZ2XUub{;lfxM;F&Xe#p*6s&Rc)J zFO+mfw`P=fN0;|=8Aj9;M2W_UY9xC+C(A zFObf%)ygl~06XQ~p)vmbW)2_+nMa}^$S2MSG0Xw%IyJ8^2vu{?HRb|bxcmgq7cGw? zg@_faQu*D@qc5?P7KWL`Ll z;uW&Iaz-72Ki{wPt2XrdebInOT zk^tS?AcVKgvYxr_RS^EZ%!R8qjbt))viK<6i2y?Uyuo+|-}tmc^HwIV!S7RVkG_b` zYw;v&Rq6gB8J>62b9_u;ZJ7SZRC#|_jRR+MAUV}lk~$RaQe73a(MJL zyd|Zfu{)kxS^8U3xAOz8Ov4sBYVBUvaSrqIw6K+ft^ng}21Om+^a1bb;`B@g+CAuT zBCcp~R|LsLwfQ#8?cx|H&dT>JfC}o+r>V2&{J60}eIiX95RiWRF7$%jQ@J0=l(USD ziw=rMAIPF5RF94g+&G%tccV_`w(gTZL>duufPPocbM@-&`2$bVY;K+&u_s&Ahxw?x#XZ^F#{zAo)X5Lod4D)x4haRQb+mZ!%}ZaP|qps zT00!M>+#+4Fc9X^u~^P0o)b`FVbyyD&M2(E!9v*Y^}-3KR6ucT|2RvU_k%qA4Eb6M zl<9@b!}{B@vE;tvZStMFLU%JIL2+@jN_5IlyIk0rQ@dUeLNS!7U%O#B2|@v*jzS^yTQ1b*G`3Z%+5Fz)JqcUU z$&R;Y!oGc(Syk0$)3w`tV>hTF|H5%P+t{?qxa}&NJNs;1Gd&8(RmA3Z7y%BhejOQg zuDz-9mhChQc5!N72O1NiYNMt#Y!!7!eLq=vA=8|arhz5V2cga2u&af!Q zp8CH`f6^5DGKHG*(JOBl9H2;sHqXD`_YYF~x!Tdlf1fLZGRwK4=X<)t4fg%%%JZ^L0+2}+_T7$m(Nh6#tdi7JCc@MW z`-LL*Mz(H1JKdOlb^rAd6()!fr@Enom#CyI|3kU}mGHL;N~cEg)efGDtp!-&h09uw zS7?yG=O4R$S1Hmsq)~WmbLNqZEOMHWQIAEDMf#N$;cu|WiNLB&*Ya(LjR4!pkM|Ko zo&j(+;1ulHy;MeLczqcprC-pDTYe^}qjO*_M-3*EeGxCSh4rdslDJuFnbugs9@-m?B%TI(CVEu6Qz4X4fNbbH;)p zN7Cs(f%k2Qdb+&H5N2ix_2NUF2G)~@*@}g1j1Di{HZ=29KvxF|h>?h}RuRx&GyAxn zd$8xT^1BzI&0ECtZMob|_8aI*nFM7$++aXqI~6An9i#>T&4#%5ipdf*Oh|s!dM*t* z?OKGPXV}9;RI-R*sVXr_aO6^AdsyM6%Aw_!4AXm?2n>0sdv9*j-Qi_gXGb0>nn zF26*xe0d$oDeVimN)SS5Ds>Xyc~bKEJ)t$~q>AEczg1OA<3K_x`I(QQ_B*@)pZTrs zf&^wyF(Sjz{OR48Xd>7keqymK@`-?A_7h-UY%v70xZY|rD`Nys_B(`2du!lWeQQuSIvg~HtI-wG!h2Bqd|Xm45OCFyhVHn zRsF0rt2PM2qFqo|F#8~1K@k}GzhsbVUJE`TZ2WMwkWN;+*+BzM#{=x>mXFhUNWe7a z6{ADSDZTC}un17&$*`GZq#5wR6qOIO?Dy^cp6HD(UaeS&WQiXchDT!6BCBEjlZWXM z4}Q_NJ{>~oYGjOMWAkmD4J|4rq%__;I~lJw<5-rQbM(k=#LFMw-wXs$krOq)r?#Dd z%CU^l@O&7E>ERQg=a0G-LxMp()3Q`B2M}M~Se``w6fF5}NAxvpwT%+qf0{aR?pkhQ z^9(A{o@-h0;n33M2PJ^sHaBV>w5VZ26=SPTL}vHncHv^Avh zx=p57ftQikcxmHH@u`l3`G2T*QPA8O?xOht>8)K^sGWrE_XKbN4{kF|=@Fh?$I7rg zA6PV@smu@;=TS!HWi=79)o)pC{1W2|AX0HuKp3l=$YGw%j|-jKlT1}RS|=-+94U{i zIxJGxvg34f6Hc4PQoe#)qGVuxP}V`ebCiZNPv6f3zn@}gYoJZ9h^XAnE*E03 z>&_bvUG96?MXd=W&;ziqfr|%VA=`hW9NO;%&})7FxeQ{geYyz!h#0&(afWI;+u;7U z;aDixH91l;(XU<06L<7i?N|X z(sMjI6O{d!W^4i`VpO~(pBR?g;%yHdC# zoArYeB=uqxN$v(Or>HZ^5})YF66JO!F|-=UDw|AE3Jkb+*T^%rGPN)+)^D~6XvOWX zmp}lm!=Ag}ROdPH7fxzeZB;DxWL>VM;E@PD2Xq8Le@z5y{025Sht$gsefxG*l-R~} zFtCrR{vbnHnS?uYTfqYU`y>-u&^MIhTz5{~z+T=+KEE!BktB=sl$TigpL;dMvJQ2?l&0yO8N17PQD- zs;_!;vzUr>lS@0@NMp;;FnvN0n};;M#%4sFZ4Sj7;`a_mv<4@FHfDk*xK#38f;#E0 z3yh(NXt#y=^O4&8@l6f@SG|~hwlUnO5Lu{%v6d&3E|>Od_38jwTT6d<(`@gMIkH+* zPPEbVJ)mc85(7+%FkmYmccIVkDTUml#+66XJ-kwcBbCFTaLDiL@v1^h{S4?08IBDX zbVcOt2^ccX8<yiM#=6xJqMr0CnAGv4XMksJu3e3!ZnZ<_0;I6BQ0%u+97VHE?dJ%)OPvd0RMUl z?BF#t>9CRQaX};{XKFwIDdK|>+efDMv-EKXm^rom(*()|w&~LK1s66Bm=AofDV-Do z?|0DiV--qQ;J$y~lek=>W3BQIwvP`XvHyew7`aepp&+%$E~VEvcumJh2j}qFnBEf> z;^lR!RxzcA;zSuKwh{w#emyLC*GXHfZVrh+P z@1~5id;w!6OJTFGgtC&PXL%EOSBgdPV4{&|E)@<-C>_FqDMbw;VqAyR?A%YRqMyYx z?|@;)9vXCX8~{vyu2HLM&meHOvx$rW#6lS`sclMSd(S1is`ww2hoLZ7-KLn{uRp0d zz?>X3hIo_T!bT}z?256p9B8GX2k;_rD6D~GC6I2fqXwTwbEe?>v(Sb8o$A9Ozr5gh z63|df!2t+>*1EV0d#CS6*QpZ-+SD$PVMS_&)1jt6+q>p_%hdOhFSQbnd$+Btr33*_ z-;~}HE33QoSK-hY&Y1pHK+cb)BxL9-1)jJ%hJtHh8~aqc9{T7O6NrlQ4Ca2gdnD5E zd*}}&F3V3JdZZg>XuxsNzL;`s*t!!|Pw3OBzY0s9`+-_+|NVV|{giRJO%WvA=y{}8 zJwFgWMe*L`P*svy#y$6(jEmGxnz|t<($jgH{g&cab{9~u@M53G#8&IG$n$5~JViQ< zNU!z>BAiaa99>fTKzEukZ|Tba8krDNwHUK z3viYYP$vlh)ceb*^r*n(N@yX!@2n6*Pr7G~JC+*V_QmVi^wqD1`eWvffKMMfd;2uU zn%YoMOBED7izrGp*uc%wM`2Dj-~NtJ@ZyXB!5yXAl_Ats?!-)lusCZ{!3T1fI8p03 z2u%2y?YKz_c_;?AYY*gmLrS+7Y2!P*=-}3{SMPTCGIKnf+^v_`f_qJlNmgB9a5kkX za-YbPfi;L26lYE&O!GKJQw{7<4FU`^Z#KUykL z6-W396s$_`v&w*y=^GojZuy2*9K4W8%g>*)z4$ZuslxR>JJhIJ{9k}(3jlDJ2~je9 zpQt0CN@)NNG^v#|LBx>pT&!EU(qlQl#TDB4zXN zb>g7o!M3$1ytUM?$Z_^boDfLJ*5Mv>c3^vt8_qBeY1X#LrC|usWq%>}gy|_drH~_x z;l$Rz1>ux#+fw|{C=1T*m6KoFp%)VNoPeP3j*m0yOP@AjL& z8D49Pws*FyjUCVudwot``GjijnjH0}^K$GaA;{oy+w^PK(X*>(#2dHl)vm$e;K^vK z_T{?-2d$%@=}hJa15&wdfTOxw z=j}!nPAMWdb~gH2E)JT@Wz4Fy^_eX$Q6shB9f*jTS_wssOs=d_s~6t9$cZ?x=%sWs;kcX`odhd+ElD7&X|;yl!;W-0tte>0}D~S3ORs)?#dr zh1W9-N>Mv~-n5NhGTVlDCGXk!)=m28tk{bZfgA}(EiNHWd$kz*4_zuM)<_vK5U^~0 zhT;NrIBVUAa+RsMfwU-C)4_FQZ8m{s+tS0Wfu6Vmsm_;5V#Lm2r>$`ZcSXUrE$eK! zV!xf_c2w6^b0A0-%GtQg;MotzAs`*=x2Q0c3v-q!dF8eqJbg!#kcliKtAgeN(22zM z|L_Ch0T0zm1!nYJ1<9WyucvDXaJhqF5`=xb=61}oMZNg=>KM9hB-b-V-0}qDR{?ST>ktX-Jd;a-1^K`;3jmqHr>5WM^P~-);G9Vs-zLMaXl(cE(l{`H`RmK zGdwnuuw)e@^-E27zE@d-Z^49$GvP{US{>gw=Es@i9E3~QKsn#UUPQ863k#a}zvRe? zbK!C0S-WIAFI>tr)wPG!(; zJ0h`q&ypAkpW#1@nnj&OOrwHl32PXfQi2AW%up{OCBu2dWAJWszvWoo07P zhMHigUNM`o&nfR8@c0F%I_X-rbh8~Z=(Kn8?Uzq6ww`;*dI}+-Kij5@!Zj;ck@62O zC|B7iiF`gSdA#4;*^{e%Dyx(JY~e(^Z$YZ#_>XYk&;vO7->@@$v#~27^eL4XhqkR5 z?~g3+*!o-r1I6IZqSnpt8O!Sxt$#wSWTk&)8p2?+*&=*r>h8y7FLEYYbXr#gK%QTq zIpmt6Q^CiftDS31m}`KKFz&UD>Dn)+!@W~Oi|qYQ{gak2r>_k<-HZh&xU3G5d? z3=aJY`-edM2HUv-BxsR9F~T@q=FFxG9+w?>FHJVxMN2;XyeQ4Ga{5Z1l~^A9#pdMT z@`_%!`+yvw5>q2)fNXGjM=p?>9Z0Ox*QAtfnjO%aRw)~$GYam?ELuM(Ew+sCYa@n$ z`H8{ic7O9;_4J-?MBq4+6@F8EEe_b~D5cbBpI^LUdS*ZS`R94;pGWuKY8BgLBa6IM zEuOUc-ZH-F<_-hDIPm9QQGD==J>>yLyGkbWEc9<`g;_mxQ%=0I$+NawpXWcmSdz#t z7p|@2tzTTg5_ovDl$Ixt09Hu;q-}92o3s4Q0TTB+e#?`Y?W}9R9iZ)VU~I{aqhUd( zYGdGRZqFtcB)tW~{0*uRGY5(pW8kN?sNfPl>0{~R0=z_K%v`{oGbGboj1uBgpo?Pmbt4=^;l$3MPh=~%@u${ zEQsxS6q4N)8Vv%rCIO(N0{haH2;quf!vGxADAUXlk;6^Z$RG`^et!%Lh*Sjp1TYAM zI}J2+$O_naC)1|dK>-KKKPe}sP&_(0U=M0#h|WF#nPPsOf(pV=D-vI=X6g8;x}+S# zZQ0}9!|&HKGNJPSru%wRK`7%HXL!n1tblgQ6#b;ODRokAB@x2(S~Z_|n%w&hTE?&X z?n|Bq24Wg&vtl1xZ;B4PdrsIJ)7=!k`HIXLOAv0zl6Z^bqgc=iAkasdFbE0Wh(^$x z**V7~(Kyp(Wm&+r_oo)Br7an&tBvw4zGnz9@|By(uS0h=u*B$~gV>kMX_nSrvL6Uw zXoTB?7`nf1f2^*xi=ZM2v9Bbh66xkhf`FE z+@jkUqYk^Sri#&V1^B6F_D^}A_W&Gk&yCj+#iZo!Jx>FRWCB-@6KK(Zgdq3`v^{O= z?hZNCJt0M)i5Ymr?4LLAi!pPaBOsAhU#`r`8wVR%pDl!+6N3pq;J}5&##$-#Efv5o z`1PmWSFc*)IYP>afhzJrVpKn5(HQL!?yK3}+0HBixdBJ^i;|Js*XdgKe=)BiBG%{t4WC_1!+#;qA+7S~`)L7Vj~a9b#hR zCD#ZiKr@1!%)JWTKgn zS=8y`u*-en7p_(5A|U(aoc~dIy?5=sbBIf>fe$L3sjnHm6(GqNvqSND< zxm79EXXtivC*Ao=O|{bcH*RebS-{$jx_lk=B$ne@t`R>AmcQFvX=$U+qS3f}9N}f2Gs^q(_;*gZQ`{gC1Cctuqp5qBVc? zVU8kjF=uUB-aEC8HzYXXTbI#Y?2$xquNcEm2M-Y8V*Q}5+(P!5y5H6{ru>Re++RPP z?b+|gWGz}=np=77r)UT>CRYVkEcJz#_ipx_>6ZqmPed-4iaE?rJ&siBbX#1}i+o@Ai3*z1>xqgwvPaeiN;NBG3>xa@ zG;uO?kCvztBksSIsBf-l$`U`tTOvJ~K3pYhZWj>0=(bvp>mQ1FD#W|_qfFP&D8!N< zi#c2R_!h?>xmOOgsex?~<9O1`HUL~Ja@x3!r6?gZte=Q}_YEz(;##uX6{Jt7!&A&iG z(5068?~=4?$aGK4eJ@cul?!ltKBvvy%I6i^(XFr3=$}B^DrqIed`%h#`JDxjdYsRn zI@-91R1v90rZ`ImhH(hY%pFmaXlCZdXbT{BZ{RJ26us#TZTXDQ62lEfEphh3+doHFvt$D;8<}}hpR}c`9dxKD0Zv=O@6QRh=+B?mG76m#q4VMnLVD-C^!aY7?LWgs zcsdek4Q}vKy(-IH6Du7)+rys-!#I{mKi-2_q=p`g2FZ-7g^hCkx0rZXVJJA`!w(K3 zZXLdS-o#N6DIP8E{`B>Uz5<$uoYj%hk(9e9@!tx70q6sEP9;OQr9lTRdPofvK&J!K zN!O1CCLTJ~cct0m>rEa?#ixG=+OS002*Hps+f?fdy)^Ia5?cDq1X}2<{fd#rqndQ;ADr#D6JWE&Xd4{TGfE9r?yUQ?C3cm z#YGt}9eLLlG20XvUNwW@t{d+?&vRN5S0PJ=J_)t3Ly4t$AsHqQz6{l1ZEq00s6H&D zmEi{~tK!40azXy1G|hWiwB^W|ZZ>)E2Xn-+Li%ks<_D+Wg!h-9sFQ?P065!Hwpdrc zDsy)tsB~uT=9F*ZI}*3AR@5y+(1%SW`ynsir)A^ zl|t--x!CCMj>i9E>bv8bYMQn;A%qYDh7gc$s8W@#fM^IsdXvzkgd)-fqzR~@cccpl z7^)C@M+J;D5k%=A2qK`O0(QlEe~0^hp7(qAA9C^wyR&m!->X!_QS1-zYD>r8e>&YjpA*CNS|vYmrs(2QM5f5$X}b3hrM>)c5;Y zdbdO1xJ*7ZgKw94prhXwbE?A|P5qUqDKYGee49+(gC%g6vlfi3ZZzgckL$vxcg858PL(PgB=~ zhsL={r5-fU_(D2d94u(2AnG1DYk_8|*B!UI#w4KJ-rS-tHId97QP*n_T>U1Nz`5vZhtS8m<hgO5kJJcmyVC3PpYhDA?)j%z*cal4b@nTSCV zAd;uD-qor&KfVR)ycj20dCybf6)HE>@ZN~|rL8FQN27R@NUxE|CkwVozL3likr$g@ z!DKymyykfs7xi$yp=_Duu6n!{gUJ0(FJ(xk>FD*d!YXe#Mr8f7)y>}4-tM$L-x{H7 znQG-@U+^&KE-54ZcZ70?jceey-^lx;*JVP!NARzW)IAD)Q^q%{8^o4MF}$JMC4e7i0v zaMvwA1{Np1Vv$eK1tJqZ$Dn9jaKyYI;z!7WjNVWXQPV1i@)+aw|zN%NP>>rZU zKlkv!N%`i`I6wn<*x#uB9mmlFUWXMH3jflNvKX}0f1O#)sLRakZ9Fiqf@x!YGj}re z(T0{`mZFC83pr1t-8EJT^g$8t;as&u^7EIa=YHLD{#!nb=9{>bebPex&!?|pLw?$I zY*8}}#Or_Zw*nx@@o&*_agI2btW@#MQ!GN z*TvvVTD($0ER_#e2c*Tv(<~1UT0GjAZfrB>WT$uB7*(NGOtMR2n2B(!sur$|s+yru z{!yHs9yf~(ikO#`wW$*DJymgBzO=t4xT`L}B4$f=QtCR4k}Un~j4!Mq8$o-ECUX-2 z%%I6G0lJ~eUr<|7?p%jBogj?_v2YqyPTg+yAAL+Cf9v&xZ(BF~j(*fEHYL zw-~+0h@_;27Mej`kiYisYu4`2kAIjUVJ=E+hwi>5w@jY`MPrO2lfX@*Q*{o;19M_$ z6Y2bY{QV^Bn#yD*_EYOo*JTg*Wap*_uY@) zCCwR**R>t>J3hbu5%I3ScB5zJeYSxr90rSg)bHrs!U~_w=LaD2^scPtfohtnP81U1RY8Ew8M6;_mq7_vy1yN_i9THMYnCD zei~JUTkH{h#+s~e(df8RDx9c(`qbQRb$5cQWVyk^U1}W{J#Fm)cEx$ z=*xHB)29}mn^l}r<~iaqbuxk~eC}8q0(=9)B`3}C$Eg_A*(3xfP)*2_YD^HjhF2&zg+au*ND?j z*ktHkT`4t<;?K~+xp@xwc-k#-+DIY!Z(YZx7dU6Pw4|Rwku0%=1zG85jw=^Q-1osH zp|+3IJu^PqW1-|LH$jOlX^=FamA2ztoXp(IU5a0;4(_EIC=K7*hEPO>()q48SNv*p zPCD$&AHNgl`}>;B;lC%|k48CYq{JTNLuZyB4#%+XU1s*Uad%isKdF^}@cL%`u6g|1 z#ngC{@zajN;&UH7skOr32UzW0jTgYk5l9mu_I<2}(`%Tk^@dbuq9R$tJYN~Gv<2Hp zSXb$=)Mqq#wLO~qGcWh!4yxX0{Eb$p!(;kObX`x2x2~ckKb`ra+WGvyYTwJEJac8o zniy88Lx#8DO6eon%yGDBJH&O1L{g&n=y;u2@vk*>sBRL_S9)^3>Qed@fG6 zn3tBMr;{JFp1g2d<$CD6C?&CV{Fo`5Nl_um%c^_OQd&EYzN$9vER807sZ8%Px*d6+ zIeC~|Tpvj7-9UIR)~klM|AuV~~nTtu`QVHBt&!H1>TAno*lmD3M!57$1~UMb&G3JP+6Kd%+}<(K!Gf|4)_m;2w zG#{O*U924WYxmfpu`g)y=Ia+97k;|k%#gqM!FO4Wm-_4XxX!folbiy0R)wth$rNoA zch&+N*ut3rfUnJ@h|D0mtfcMv}&6jL{e-`T(rv_!?uZnq^T+kg7ZOCOaG~AK+A)dG~ zpk(Ms-g;R-v3AvbVJfbnx6iva}vS7z3Pi6rm8*cY`fxGh91Q_6qdnk z>|*7TMru?II0hA%#Cc*PtERC6)W;`ZzZNdMX}fwW^5Bi$_jeZ0JxYazD~1R#rPLpt zzZ)?T_DH$b;gz+jY?eyyjskaUEC9E<6q60#>9-0s3cB+_@0|lJQzYSxUvntN02C@Q zG1M>Fx(}BPJ+M|aS)u9N51zjd?ugc4=b>FD#vS;)zUCk(K+9t6mfN``6YUhZDe|?c{lW6X9k=NUOz9)j7 zt8Wdia@*n?l}%rk{R(*5aG8+Xb5LT}O0u8(r3O$x!qPLkrBPr`fZ{Tt$h$p)3$p!H@mz$NkNmM=348%%h+|I}LE>+;4&T7~c2s(SuJFeDE_8Ai9$=A#=o zav*?)cLoNjm{E@^Q-lCwlOijAUk~^KiZw5XDOZ#j%GoG!_GnWDmEa5m>0@}B>b+0} zVuh2v{Up0Yj>oR{p}w%~?zvMo(b${wc?q}ICx^!HYXjJB`)AzYen^b$P}+EJn!5Cb zZZTF5c6DN?Dy6XNJ>4ht`y$79m^K^#4Q`!>*E*HoCy8;)yfZ5hyXXukDR^d9XBI41 zdGtl|%-Jyh(pb8TZv3A+18~Rd#Z;>m8csZhM7F3Ohfhl5W;7V*_(csYL$#=&<*4hQ z3!0jzYzLCF`~}4Ir0f?;Ny4#@RD@)E4z? z&G$drA~F3422?@yNLG~~fkgxa(m)V?@aBE{JlmxuPARbcz(2Yt^h(v&Ru z*GmZr#+ECDLi_Wb_e$H+W4F9Jz1OQu#Eq~#>HarY=M^5$eo;TOv>Vf^-Qp$3$fDe5 zJi?opXw)=v$V6oJ^R^3CTAAlJSiHG5E}CzXg3yqxbV%a|{FYxwc*5E>Bo)m9w59O$ zCOQiZg!B>+7B|UYwH7_=QilaS>oRaAU8XO0V;y*K1SX|L*O!)HinP$BBZfp!5moBw zoGYBy+sixYsP02K&o2ojUbs!&)DJDXZ)3j5!46>*oODqtM4XNKJ@(+k$J60dze|IL z(Bq;m&hW5GQb0A6DK?9iRr7$G+NJGHc%OhG5cm%PD(ol!o&Xnep;@3Obm&;XtuzF1 zlt3_$w$jX_PT|D8Tp2J#w^}Lf{FI?vuG>(348MzkqhsLQ&@FXY)5%L{cAY#?deQEk zTgu2A{796~KF0B%D_0LTW8285L>V~}2geFLG>YZwu!x#XXKgpU`)6m(H`hiXJkV)R2*z5ydF?e9;F2@ zW#W~U&Iw{zZLv+bp6y1I@-(L;#cO~QE2-jYmS$;)wI;KqZ`o;uNa}N;<8{57z3i#6 zh{ve5+EtoE6$x4|G!>P|eslf}x*^$;Yj6oS0ENO<9Im(lysdA|z^hY@EEjTlD&XvZ zA6^kFHn_kJC+<@CTcV(pgSG};^A z1BAq%8N{rm501zgE}IDrr{W>5u&jt{h5d%VFjkG9UqV^_)?dNTEV+q?`merW04F#6 zpU1*$D}y&Pa(ONp9wFrG*m_AHLZ3G&K3-&nL{~y-F^)kKhR?VCD?fjO8DKdY8mLv3 zKMd+~V_S3*g0aZ*dCd8r@2?$gd~GiCqfIk1z$4H4LbXi2v>{3!y6E(~;7xc%S44by z#f0&g?lfsh3l|pY>#%AluC&+O5wyQ#A9V8Gvkkc~rDdL8Ws6a38WsPXAYY&trcAKF zV0R!`@Qw*78v|t@V({|keC~p28-+^!{lLaQY*!NzRI;fxg!6Mz)VfdaIWI|^>-OY@nfAIogw=q=r>*2qodb!C-8m)$qavHOWbxn5!MGoSx4Cgbp**H6pB!`?3LYAX7RRH5 zM44V5v1guLYaN_J%D1sqm!>U+l!bLBBYN#iQXUSCWmIFx40qvIMi*$PI?Xo zYlKbIUR|tan(=<&w~cJNEP{^qZ#?K0aZStVDSB{{J~pdKwg{^_n_l+WGh?ljM_~_g zIQyg9z761OEFna6qZ`i!y1nh%^AlY22!@Wzm(Pa2g^uO+(IJ&8<+2+D#mEh@J-=7Y z#zsVOom4s4voVj|8tqR#zc-57V5I+Kowy7z3gkiDa ztZ4SIR+37|uLcyDUk0HjcOcvHMj2J(qv=C4HVaHE8g^9J;BBlfha);_jH0lk?)*#3 zN22Xq3sR|9Un6;SG*n*m{b9Zze3#ayoqONSRUYlVaB9Z%*z=Qxk?&Y_`KQWbv{0v) zYZ0mi7j6aKe53ie%v4K`NlskL`24ZmC*jpwK?euCWvApJ7AuI*$NBe_6WVHOLNT~1 z3(a8Yfs%dxMMyfQ=c4I8a_)YgmDzUIY;x-9R2e9b5?CDY4f4wtjU(j*;x+key7CLQ zT1ugaYk4WoD$K~{Zko?Vd2C?SR(y4wtE)BPaQXtp6?29}aEv@%J?mEOkM^w-#EI9D zDvoQj>Q%_ZaCSLbdKL*5n;w(hwD2e>Wvjn$pjLE6<9XA|k{vto&Yu-N^G^ph@*jR7 znc4E=ko7ZvhTn&h5YiQQIxF(w%)|~ySz<)#5?!4*tuipeJta-M6}eKJ4w|p7UU>=UM8KfbfGmkI+{e@s@nMKDJnOMxcf7Czk4a1mlGfl` zAE;U9&}m(G5hUx1eS}4FmoM5`JxR5^ByqP0dtFi|k5g940HPo@l2a&RXi$Sj=vDeV z9#W#Nl?I)jIeCX}?eyzvl^Qytry1~a!!c!inW5G(^)L3gSAY7Nc^b};bGVyW$-<%B zJEe6uP<`7OHgWfTh|F#L_D`+yIxcvWW(zX7ECe_Sw@en&~)lW2TzkyF;c+ z1uCP*Rrr(EruH}!M*_Modp9r9bwV!} zh#Y=$QBu)`Oi`uIL;yb(@-1B;=isx(g~u8xt}cmF*D81x>-&mRJ0G9t^T$N( z@{`0q&C8jy46*+s{C9!n=dYo9IPvN^F0!Guv{L&4UhXc^avfclY?v^eHtp7-;vN$z zE2Q$_z*v%C%oFyFuzH!!#hN2AjWz<$e`-&)3IW&_SiLddEn#oG?3U=4mG^E+{Gj|% z0rVr4Q-$ID`2m4=S; zEg2OGnI1|fvs2a6r}N(2pA1#K zw0005laQiva_OnbF@Gtib?Kxrh2r zCwR#&p@9LnruD!QkZ_jdR;)e`z$qG_A$D}(F?B;lRI(-0krr3vh!pCBJQ6jh_|{eY z$P@!kBd}O#H1abSZ~~e1DudHcgy&HG{rzOCqsdL8rxFXVGym})k8KoiD}#`7#%gd> z>TPA`C{a?{w&FLAqm=eB2$E6 znFAWcCpE(sY&=B$JEjAVrEuTvvk{x_GHTS$h4w;Gc_uj{atr&R+i8HRK&-jVB_kS& z=kl`3E~zb%l{417d~P!CW8C0+CHICJ{aLOn?b%G8#;?ke$q;ufmorf=P4jB?ERE#W zCa1Swn2JPUTijOT=gO;mE+l_Uon}MduaJC@^8luAu*PkXf^9*_KM1}#t}{Zeb!zYr zzVu-ThSTv9cfEPygrKEFB*jE_^luKMchGi0^!BN&TSb2#ObQ=3C}`;Mx1LC^atvB| zQajb5sj!$hPD$1uSTt)Z#q=%xYI%7lka0ob&`T)`c)9T^Jws;?7TcIns!)3{3JTlq zN2`qsPQlp}6_?`<-=a9Zwl+QyUsAYpKi6F5UA{QTzQ6nEDebJi@KA${m7Zk2N_`hU z3SO01-CFnRi%*>Ql9y!N&%iLBI*dUz&zlwf=z9mg-XZ^dT~e%^@1S}nCIgSAv9lg> zq!EM@706hk7{jn43pT2j6>wUn=I2kxYImH@PVTK$YOjvdseEEo~o^>0Fp^5 zNRhzru~RG%_fER|gK3^7{cOLe3R4?q&mES7X@-FoSRijjZFi0uz0O*<>ViX0Id6_v z-PwD2=MSk(@H@_(x(pjtDR#9Jv84p?i@N28T-R?$n+p8`tLUcB)+v+N&y=nt6PtT| z-+fe6$hK*iRlfsy{p4{C5a?!KFtFB^X^~)^tq~;W?$2fMRn1=S967zQ79BV4VEBA6 zr}l)Si^0RaxsET|(sFVd0q@?2>sY^h6u)c=livx~3%HakpV)Q(f^G`lW)vH~ey z$^DK9UEH$$wRM;K{2UO=tIbge)gT-s=AlB}096VrTYtt%ni^{|g0My_`$tmO(#pbA zr^Y+OPd--T%$0@k%mMJu5+T>-`P^OcDPDE>rsj{9<^$3LquS4rzZZo6BoR10^cCxE z$x5IJ78MaiG-1moZj|GK`#!r<*jh4JzJs!*uj9BArg;jO%ik=#-_BWBiTdT8*n=-X%{e-`<=;0UoEm*6qWp?FU zy5o{Y{SnWLM`kXiZpgIR>ng+rH#TO@(fFxAjv!dnG~rm{RJ2$c!^u~{`zv^4Q~cVy z^Wtft@&}@fO(-84GVJ}o8(Gysd3pprxJw0`@X$b`o<0BGpWQ1n6NhG*_zf@m+rMR= zgrGP97{A)w&TdE2c1T}mS{uu*mob{VZg4;B{8wI7U7;2`Gf00DZI7f*BqC2(ncr^= z0u0TarydQtX6>L~8v}D*`noYKI}l>{^_3dm${n@SvO&_J#vwQULJL(SH9#&w!WDhm za`YicgGqqo^znCRjJ2=F%U5%aphO1~nWxZijLArEj_DB%Nuo74 z!UsNuZigz%Y}X`c$Ka@sU0rQ5P5Jzd7xEU=KXUuDFnJ!zwf@XjX*i~Gif38z`lgg(0>FjIKtum`A-j7r z7Hv>*#}xKV@{vCkCy2TUzJtFhU)_&>P_dX+Fjisht63G*bDJ6KO~DM%*ciUZ~JDG%*l}7X43J~%~9U0=7OF8(_pOEn(%!*al-Z;JBQ~) z=Zl8dc8>Rbn!NKLM&;7u(K%ALF1hZRSUa&%v!u;B+(5+#PGur3wX;3N^eS=*({oC>s?n&vO>qcL zgu5pk5>rsR?xD%t{_C}2!HdiJ!%@C5Ji-iBvCEzDy=Qy02$Qs`uWD~!iHh{7YE&&2 zKV5p3wFCCR-=d5MCHMe(mv_VH9bpcg)>n(}HI*7c7MmSq`X^J{m8U_B)0Y3k1pYGx z7UU|@t4pZ`N7-ZhrZ#KwNxBQ^hhL1M?v!5mCp`aELxgkF`CAjDa=Cij!e;(Fh2EP> zug7vx#sXawmTk%ok32{63ntEw6f@USM$~@n9J)U3HI{MISjUAg} z{@UIqvwLlaCC}kbOSZMhaUt_72HXm>FBQbZS-+CVAgMlW30?+sG z=)(RpKHn6@LhGL|-TpP0&~3fIYj~)E51Nc^jF`7vj(#6Eo}MK?&U@fwZsA@D_1xLP zX@Or1*Qe4I$$C+%INs_(P-?kFhN8z6)@&_>zFX{a_H8o=Uv_Lc+BzE}m-dE`ZcOB4 zvNbana0nfC%)gGDaUME)Y3qceUzXpX+k;Mp?eTa6Zu2JU<9qFHI7iDJ?eV2I=fG#_ z8G^X^Yuph7|E=QP3#S+20X))?@d!r0^^I##u&;FY6)#g3f2{?}H^XjNYK!g$$`??5 zG?3Z&a(2e{s!KukvEjQIJ0D}L9!^5`E*?XpI2iS<@FBU<=5i49??q00a}6`?^(7<>MO!jOC~fnkyCgOEMw%btt)4Ny zl^37V04s>M7)FOgPK}yoj#J_es>VsJh+UtywO4eIc4)PdX=w4Xb^H^))3)_|$#dat zN0@!%fbm!zn}y}1Irmn%#=GLEL*IuLC8febO}?$Xi@2ZV!d`UrM>Jx|)RYvP0t1JW z`Qmff7%B|r4@Wgk??jmZ&_*~L-?MA7cMwp~VTA<|;6|>ejy0v!~lCS7W!~!f&t8w{}QY*to(U)kE zmwKvNmpF;(J%%_R)&P(2h8G;SQ+2~T#-!CHpNgS>Rop$Vsy^|uLWcV#!qU`o-of!= zD|AM5=*-)&n}|vA3+GHLrahOOO3dHAxT$+?z{4YDDjZo14qOL!TxqTZy^4FYpK{>G zfrYevCi1{+75igqNn^#Hk9>e}yxp(o*t{ttc zT`H|d!QMx&BD@YU_-D-4ybx~>v4Q|Wozv~NVLI2FV9dMVr1VZ`>Q-uP{Mi+c?m(;J zG29fUBse#Jho@gz20AsluKm4gHp7yvCnJ9O{F%)vyi9_-a*9wftxTcIZ8A`$j`L=h ztj^)NsDyJa)wSb#ya(kLc}axx7mAnM&Gr4oKiU;bWHF|RDCpZuGGss4)>tH;i}2J&S0pq|#b>3{3}+*;|7eMW@I zj;i(SYfS|_RkY=*2pb_J`zY&dW!2(?ftA#NiJ!k_dR#xazhQCb;56mDvn-yQc}I;Z zgj@+V^VBRBm$ta>{Rj@8182U{w>dt@u;2VHJ1ng@hw1Ds^zH|V+?@xbeex9VsHRG0 zPQA&~DrB;_IDGzutvLfX$B?Zca(ZisPXGjv$}Ucnihn3GGvJk_V5LayQP7UmefhQt z-TH1^q_S1pr_Y)=8S7W{Ff@U&YRkg@Mw3b5t<0~$a0T?wqZ+zLnUw+~%`3RY6*6GY zju;TH121Bb&P%ovNHnNz;;?X}R#PuBVS11N6e?sNXQr<2Ss&=y3j7oCqg};i&wkvG z_uI|EXAUIJ3HHk&eS6WI33|oYgIVua^MBH!n$%zdUZ(N_lG&h!!0PjQ%OVE z*WP%A9{yL^8vZvjqW2ijHqN)9@(|4mAs;V^vC+#i0M_zs`WYzIj;Tk&#B)=1tN_Pg zBCuzg`6Q-#FuP{a^AwJpL`8`iT>T@oA=3HNMqqZjX0;?}q~YtczL%T+Tlpx)8#A9T z-@-(PyDmskt>7ZelbTr^5?7f$q`|=kwu0Y))q0qf#$(s@I)Gz1*4K5A15Pmt1WI;D zRLOAws4u0i?IPAfL#7hHWjtx&J9^?Y`r*?fVS2R7l?z9~JmJZ89JQw7d_33y!ap3# zF8ZDESibf-0_UPx5|Y`h>M3*l#RH=O7lBLl@_JQ7w^H1YzRMtzA7fZJij@_&LVc;1 zSgxB>9;xtB_xB2?Kiu5)czz%fwD6ko1MOPQg8~}b-0G;vhpgt9%H(y^wbZ+&@lpc~ zx)s3^*bE!=@f#bQ8bx{Gk9fL&)H-rYl}u3i8EeK_*%YBFd#&pxRK3CD&$2CB{Rlc2 zW_EVswieo6z%q$-t41Qi`(E1WyGjBxL=vjd2D!Gj4+3hi?{lqx^*THWI}K~sA}0BU zu{wQIo#O?H%$>!6eG2^DD|v71g$aw`AAfe|kig9i{}g|CS9g9xqtK-rk4NEDp?B)O zLwLysQB)lm)f(E8xU!+h2~RfOQowcKI3LQGJUMmbL!<2T;`zGJyF-SWxemLd$t*1( z!K_A@@c}WZal=MIBE{MpY0-YDS-`C7=CW(hzijaCq&1zVvgGsl#nD{pyW+^>7H+uJ~4jk(S zqjp#UXPAO4m_Q1g0E|lU=W?K!!SOFBhkOL{1b6kXVJ8vnFJ3;tcu~pyt zWT2B8C(Tm(d1CSV2@6HWQuB089Tm=cp@v2Y_NG%nB zdfkgXM@Nfl#ZEO@RT*o!{YDmrV~1?<_bEIx7-XmLjelY$H8G!VDEDtxDi6J}jpt@B z?(6H9p7;J0Mr5Nt1oziW0Ae1LZ8>&d3{k4I{dx6q-kpvxt^=hTVb_kExPQ57^R|4+ zG&-qBCk2Exd{_0O8gcpwAecp9S#Ax`qO5Y)%jk|DkzJTLx3nn*q~hV=si;kTPf87> z)A%*rAQi9FVVyXITdVIieETqUfuBQ~tG_!ZE)*C23a(dv8wEEDv;8Q9L;FTZVKubZlV!W}?={%KR6gKoAO}7-| z?vt9rf3yo(Eok#Xe>GTFDR%21)4lV`UD^d;>D>*Y697!uIoCW}zV89YuQiW)$s~Aq z5fZWw8F*CzOvvmiy5}kEDNIKLGQRCPbCwe|um@?}B#vK^j2?^V=+~G{HTH==qkc>y zz`5s{bAcCDqxzrMg0h8YlU}R^-;?{Ozx8b8>J8l2x6ykxE*?l!x}Co7WFkHW(Ds;X z(Rds+LRA*mnMM(V0~OU&J;<~y1|4z{p;#{H<6O#N3%}W>TAaXjyVpFw`Yz5-Tn;Ku zpRxG-ab)j%v1AP5Fx5`oN?L%%MuTD2YGWw=wW?|Ft~y=`uEi6xee5Wk#MoCHE-;#E zB6AiDSkEv!jHv|*g~a^`?(|RN;H%oa2qLy0%U~(B02aZ_fd_XX%Zgqts1?^90aA}X!3Vk`R*YjS|wlY%2G!l~sl7)}HLLzHxP zvYZzaIoq;$6hQBNsfG;ogxIi-aO1%PW`fE`Mb%4oHnS22j;f!JUu^i9)t#2_bEG7} zoPGD+<7}8aoQVoVXH<&O)vGI)-cwB3gxGiiKh~g$W~6O(vRnkF0uw&LPW_xn zOdkVo;5hH#5T6PI)(fum{C<}CF*aiB-8E$k&Ze-4p5MJDQ&hWzpJH*gtalzKeMht$ z5Ryko#1_(J;LzQ(gPxz-=|gfvjGT;(1aqsDo59f2S#FXe3zFtJCcN?5U9lgGfl>?z z5?jM8GPk%H+s28qFqJZ)D-&a|e^?a2afSnN$TQVu%9C5947m!bFTB#w%G1 znno;iS=YtTkn$rQaGi%VLFnP6J&i{E4fYh;B{C7iM|cDIsBKr1|48?N)$Zs9t$wU+ zW1SJ}+hVuppKhC_aAXS{dBb!h#pygm8l8m3Ew)xQX~&|KyfdFBxl07I+QZ&GV2~uByA+TG=?NNKtCHp8 zN>o`oBTQD-Tcpyn?|wobH{t49SgkTCO?ZDFkGfK z*F;w=bo8QCe;ZVif-VS(e zwQk}b6!4Davu#xgF9uI_bh^vK0I)o2t$wbJ1lDcBRynw{&NnczoC+%|r#1qB7{J{4AcB!sDDoR61{h8++^*oJU0T9ntMcmN#;_xxToBdni(K5tpd9`aQNdE`_V z8|t6zm9O_s4y#o(N%zn3R3PBLCa3t-hzWcqa0(p_gVeqF%B^*Y+#(DZ#k?P&R;ZCT zNT_Ut>E%kV zylxKZ7S^1sr95#m+MSkXE{=8P!He+FsYi!v-rNQ z`jf&a3>9{m5~B!XJRB2iLLw>J8L?Oz{>-dg^UB7DI{PQcV=B zWuh=(gJ0v8KsET=9qn{r@`uRcy}#;D^kW;%KVJB8XLoH!=hL6PX7f>lt+zJ4$5^(Z zNwI~MTM|$TKox1x;JvMY)A{RT1d>_eOmV?GPZuatG^H^R_A!;_u0RG2T;Pgr|$jzB5^FIqjTR)Fw*pwV!-AFDpM z%JYj)a)^p>;Si>F%kWo z7sczEv(>s;i;6zjg%+61BMOWHt(5y9ud_X=ovF<3SYXj$vu|#4$7d5Jb#a{=dTUsT zSih{4ZpIcJ@5lc9R04+G1WuD#e~F}u#G(0=MY29k#R7m)0X!2*DG2JCr392@Pt-19 z2D>;|sssGIw-JETXsBYyP=7D2-e1o2Z@!@3A@hvpYsVgV!>>0@Nleqp7-uUXuJ0;xwzOsz(*)563cTqcFUmWaiBv z3r#1m68RJ;qws0PcbQzO- zyka6>#JCawG%u9}RPg`{Elnzq4fi2v69fdWK^FGA_ZjhZ=H?ZxQZcbNwKWmY7mnJG zgoZEmIYp}F45Az!MGBSl_|2?cgSk zvxr#mb`DNb%M^(L6)Pa4On}M-n1ayC?l4K<26V2$5eX*UNhK$D^LJTEfnWm0=h^4QCa-D&oHsj|EpS#&$5}H;pS#2;jN$C-c<1`My z!6MnFp+tp2DCZ29Z&R*@YQqa0Af~0+L3JjBzg^LX4kou(7M^ms+@@AxeJ1*Bf2Qov z)2Z#7%`C3|y0>fg%tEDN#ao7IwM$r`F8(VEqzwn_1`0z)hEw41Iw6FLb3=$Af=2kn z+yDVFOubKmjz}TZ$8#3r@AP3~zM$X?K!k(TG;?bt0oK$J+6RLetgwdA6h^zV0-4Pf z$Yy?@?516OpxEzn+223O$217ih%;e6)AQ=RpDk)Wjnb2)T6hDpC63U zgw-GrZ|JocLBsVqTQU&t{=Im#u>XDH3%U1spYIG=nkokTXm!cD{9JW-<=z>kNC|GA z)C+Tj7>3oB7dN~mRuKsPM+QG7pB%EUUZXYu_1xK zG0bA1Lkq0gXGIG+5)aCDh$vVP00E{z+$5lJy%;8ox)3JtK>#Fx{;uDP2R>YW&~o#_ zW!k6e;`OCZmrK@uWxl%7Ut0O8vUvThlPJzWpMXB!63YtqBSQ8IwZblr*Ls##o-D55 zig434sZv2`Emdq~x#i-03}&crJ@$XPhAJ))Hvg{1I-pJ2H*spAE}f0Rgu8U$E0UNG zsRFE5nk{?7K|Ev{zdKj7JA`KbM!(}yvTCl``}d14Ld!p*$II2OLPO>v@u;p!CA4@@ zAhZ6rxT&@*$-ANPYz9Na@k6HrrPfnq93sEywlc$bJ-CwaBr-JTo0#s!45kFI=#_nZw?oI(+-(`(;>(&|q(W zu*zAw>hM{(ss7L=83j#l#D7JA?CNxjhC^&2r4TySGPA7!up!PIEZ%p$f?Od}To!*5 zIa}~B0;p(l1E>j6>JZIQuNI2f0v4QxG(eSsb}2*^GvrUqByk9+&pPxBAj)0@t6jfCo7R4D zEd8lYFRxkr-zU}lA&WE6R@hMRW1RvFi~moPvnJ4rlUhsxBD(9Qyu+O35!;C#g4ZO3 z?TL}^j}A!#h&zG+-{7l~u)F~Qicv*a6#=Cq%8to{2~gvDAl3PBN9}jF^T_D&yRU2> z9}9I6&+tw49d~&bo8ImluoHde`*6+vM2Yi4ik{R{K>l|!pt@ef&fLc;TAOg`Nr_0GdmQa~UA8sm+#)!A4PO98+P;qXi$=8$lZ9S7|PLn3)-b#M>@ zPImo-Ylx`P(c$qJp8-4-C&B@BSkDZ_#BR zp*!dflYp6&s0iAW_kfz(P}0D9H>|TdH%3?;0emQo<(cIE}vG8o~x`W{J#$o=5k(b!IEq`fbefq``g%|bqZNW+k~OZg*2n! z-Q7g>P+EFHijxUAIk=+?Hlk)uK%ItU`%*p?-AEc1qlO9r7SK2X{P$HGRm6Cb>DJ_; z3QcbQw||7foitNh@4cNZUYDnOW}9=S!}eF^{W1%awdnjPoC z0)DIN9gAp{p?Dllg~kNT1jO+la~erdoFE8tMSi3aYX&xSPPR#y_`fs7|)8A4oF+8)qND5Fm z&f$u#SItOC}Am!%F&6I&_nRHNFWG^C))A@&YY zklFQ-8ujCu3I##E!bYV5&r)Xk%;~wpch`#rOO6B!pYcVEz#77q<5dL4c;{ zbsfkA&pRoD^ZQ--zLo5CSA_S^vFg;08awFOD>-=uk9nRa1F5i&6*EmRL#4U?cV-1Z z(XUWV$Ar^_Efqy?sUYG9?5t?*4zWj=QBVEjLfC*yF)0!9xS~_1 z@_l!f!Gk`j?&A~PLMOr$E|=FtWD_OWk6=a4JDl26VI~RSM;+SnliTeS?&Lclnj_n&bcHbA&O?kbxHY*MIs~ z8ioRKyM_)6!rx3FY*0Bduv8Ul%)0Ohx`CEAhZ(EP*Vh(D^tDIy9oFPmc zP}mHhasY?@?*HD>o!h1S6tz4fcsAflh^SAv!sYB*X=mglUj+^Pf2$<;JP2taAS-M- zDrRzPyu3A&GroqR8<8+7c#|R;W6c8SUSjbG7Mcb#z|w&c5bpZ@+R|$;fcTeWs_6IQ zN#*2+73%MV;&m+^Ye?Y#iVFaRrj|xer8C1VPUsSO^(^ss@FOw1n#Wj#r95z84F*j2 zwfWi}<#Vk33S`=XXa9bdLv-G-xc9JDx{Tfe(Yya|Whq0P7*-*QsK_Yx8k08Am7?8Y zs7aMirBdPoAa%kh%K&Y%U)@dr@^Z~JHr3(Qm;d;&v9G{fYNZ1Th{=ZkzcQ*=iiiO= zpShgo6;(4`oBCFC^wt0i^+p#At_*E9pcDC3I0I?8-_iF{DsJ5(SIcX7|Ig2r!(5s<$q)Qh;P_c#Hk>1tNAqWD}q+NO!>C#0Ir3i`&wyVB_ z-uA!u-*;f)ajneE-h1|xob&D3cyomP_sgh+CI8A3$s}=qP3d55N@pPbl!90nIIW{; zS|)QhB^r550T~hmhv#oUs}L9Wq1*+%#AWQqL~n5@@x%v5_~AS!!|cyXX$r1!U7SuD zl7IFyzY=f;LWV#BbpQtr=xX|-okg$-b_5!yX6sp}R2Aom2u|}r^Z2EeKjVAx+maQsV%qMt&v=0!0$GyYuzfH`xwCl}2MCy!3C zFfG*v$QJ-n(Ec3YVQVKw760FAK=Axi9w78aMN#o(^8gVk!VzGuRy81ohX@{v`?K`Q zEZywsSyW&4k2}!?OW|KY*W+hohW*P3dQ_%<;&d1}J>lo;w9;M#0u=Cq`T^=Ep61}hp7Hmh005S^qg(M&7>$aXXdHra5?np00b_{#e>LxV zO5^Xv5>$eyTfKkD3;&7N3qhdrawHA>@ODg)TUz}{{J z8~mF_Acg{v2iBTauAlzXQjTMfKlc8z^@0}i?`;5Be0xeWc#esTQ4~rpAWQ(1e~y8N zZ`c1C1BKC)&%#eeCw~Os%t-jVL4qsZK^R7X)y|JGG6yZY0Lc6rjh`xixuglrv1~SMR?5Ww-Y1f;Z83e%kG)Hh+B_ z0KDu}w0SUcWLPk`=cgC_W3_`n_2>QTJK?WVgfRgK_<-y`jP>)w|Hwl~Jj({aB>wZ$ z;6nMY4vCw?fF1__`SHuA|5r)K{+VULhXE`AtusvcKL!71c0Umv2Rh+Tsnz}-C|rLI zlwy<~1p7<9lfM}K=Yy34Oc(*nW`)o2>q#0ES_?~L;(*Y98I|{+vOn)2;DJs5{8E7S z0Dl#LalHeU6i@z-@4X}t%Xh9zxNyWsbxdUVc1+!P9B=oa zp~!o!gH8$1+N^DhuUhd@Jc8gfMXXiv*597Z3+p$K&bOO8M%MGbu{T&|(wDC~80F~f z>Q!|TFxjav{QWNEHK4NBJR}f_Ft<#FdoK5MxM#XlvN86Y29tve=4ocjDr18rnIF2| zx2udv-9M9-e!*eJ>8$_sf|^;7+LVQlnc21ev>!LVPHa6^jm>vws#PiKwXtNNg-y>H z*hX#Em)T3uIQLL6#32DgI+)Euer+OW{ulD+Lv(4j@)3>M^G!y#D`n5tvL|8`65r}* zheR-XaTQf#1@M|;#?!ZKn($M1%JSn{)Ss>0eQq#nkcky=Z+AJ{#Cvg|;oA;50sV^B zkZ|GRQ2v&X>8j6`96>wF%g8I@IbZvQZSl{fs$!0$#*7c5ew#}ZcX8yqz|CudIq8L= zu)qoR3|*0+B`e4T81y*d{BoS(VS_l!Lvhb~k{*y+Y2+rBu*nFPh?y@7#^%hQ zFvqccjKD1k_hX&Kk%WN=cS#2QcsDP&8&FS;?Sc*;MMfD^>qTk94?U7_Jh>&<+k)zo zzah0=-TTg!N_4StEU3es%Poq&tYxH_J$6_omb18){r0eU%jZ+WxT65~{ff^cgEbwL zc2u5PO7>~C^!AGpiH`9^IdYKnzDA*&DCfN`Z&Y~s@!QJerND|5$zSBb;1B{5e zn}SrU`TAdmH2fOCDKOXXm^ zmO0;Vp6YD(91t{LYkcw@3SX<5aPOlXemCi?3~ka@oek8Wf~62AnW-i*D~@&>77q4V z$jO6iw%gPfdb<(X>~%)G?qvN=B96mY3aD%G<%3}+Y*bP(@K7+{lvlHU z4;yQieC6FKtzm7x$3u1j<_lJv56yUjJ4tQUDGFGgXK`or1zCPLJ z5<~va)4#YDpUHUIa8Sn4?9pE8QBZkqq&;Asj1{?+(O*IS4(hZ*~eWJ>< zYgGxF4m);VUS0_+3;djtkj7!bnT=iJzVD>0Sfb~7$I`!yq?NRd*JSY%j2aius&d$Q zxf3sz)#9fyT2)T$^zjg@>ZRs~O!~5rhN)P`&`A(#S=MwnQu*?u7gtCImcL*B@!^VT zG@Y0fy_bIn1|pNw=Ox-7G7v|N;CulA_S@_UKCZ`I%^&PGA})kIGa&%0_la^0YtgOM zf@Jj&veXMu$AWjYVu{+6u*5Ngt?2#i{8#qQRdv#tIt1PX0L)TjP;MypurVO<^^>kZ zV|{Vk@us@IC9B1I716#Y(P^*6d#1KI=qIFKk*Kw)fJUX2N@nc@d#|{vf%s-)?&hpB zfqqe)OI&7UqlDNLA58kq&46I!&d!S}{Uc5$N09*nE5?|Z+N+L5oHFp8A-1UK-%D#Z ziZoAL)CZr6Vg09|-+e5=+yp&%Gx2-Hg+7wpLmUA@%Z-Y+ceB#xzW0?mN^bby%V@P> ziDUi%oqAXMU@&&v^0(eTFczRR6ntc77Li()uTVUba9cM~qA(T#NEt=x0E`J-WZvseWn-&|SrP0Woj_&%CRx~+Cp zCmz=O{DFk8$;(jzOMidodOrp_>L#A0*(NhH6jcc|QHHMDi02WC=F8~=>-Ya>nS|*NpTWQa6Fv@w4E)}8u<1vUkxonv~dyzxCK0s0NNOC8|*_~q!T)#2eiyZdV{qOId@?`o7K zoqkl7;5+-yHkHSb4PVvVXpqe?MWd-L^emYmUzZ%a$f+I_T=`zQG+3xfr+TMl{B-Wf z=GCWG(du#SyW+b+Q)LE{LQ5#J@?$Mhh@jEjM}l za65;5eRJCiRz%vjW%AG39rn@ouF5R_x-lg{@Fm55ugu61Z`W}}E>N~~?KgkerKu$> z>~Ggj+=-sbOUyj9h?2OffLqnqhfzar?$(%(hZZysYz$!xYdJ-ZnqSH~m3h~fa%%?f zzXg-IwF2425Cf5T7gsg{k3Q6r+yEdDsf*s9k+7UlpEb*a0)#8&VYZwHX8s}@(2ywg zOPr^yc4rKN-&vUa@ieAGuImo>*sCAEx7?}pp)gj_FPX@%U20Jtc|No%c-ayc3p=%* zN$K}U$i$LVW5JHGB1q>BSUMjpYu>a|!#>Ecd=ev~lym#S*Wi-Er<-)H!#G;!kv%hH zMI4O&VawAhFpyj?0{jNiIhn<_G<9Vpx0{EpQDqHxyJ?jISf|A{aSxV8@=t5cL`iWJ z?VtdJ0r}_fvC_S!_*z%LN37<~}~^kD%rc)s*DzW@{Tg4|C18nvQf zzMbURGbXfjEsj@(-qE4EEyt!qzck93=lLes_I+7-kclDyim%uoB^I+F1(QGsF11a8 zsbpB{L4L1KnZQfQVNpgPP>%A`b?$RFJ16#g+uLHr9VW{Uw{61?BxV%%Ud=ANI&5YC z%{L{4>*kAhx5>XrpO=b8jx6!ZPo@VRU9+9URJBFC~9Pdz5s zKHXckDIo>?kR7~%YAWYE?=XV4ZPCs&(Z@4o-JNBE%A6*zbbm|6w@cd7I4yMX zlu+BfOkujq#g6TaRL5g;Pqyj5%y_UYPHGC&dYr!9N>+!XdDCS|l|3uq-zIPaF}<yJwxAR@p6qRU*4 zUhcX*)Crt^Yji(1cq=slC`r+@@DttK_8os~?RUED>od3IZ@cIA?XP{7W*)P%`dwx2 zx5TBhA3xh$-qInr>5H=@2pro=>$wo(>--?YY1$*mj5bU2Vjd@n#ojcU{Dla?Qm4a# zCGF%1y}fB2iV_dLZR2@_Foi)Xp?+UUE?pw&hg_~vkDc(#cZ5H_DRQsBIr`93!>^(9 zwN>lIR!qVoi>S&LBvk2WVJ7OqeQpoSMhU0U)9NU3Xq5AU@0*+6ouQA;IVp{6W55@t zd%#U)^<%cHRiFG?+a#JcUR+}JEwXRwtKN}Lu4KA*6VNjd5^Z;nvX!Q>hz9daTiL)0>gE{~$bL!F$i1sBa0Hu>6%MRub{z0G&8T>E3H zI*1_n#+MtGDZElPQfvjm8uasMBti3@3`a%nl9tZ9nf66I(zyTuyb>v9SiMh*DLVuN`areLg06>S9V7 zOG>rjZxXBy>^Bqg3~8tV)Pz*Sc@bLWS9*E;IBLQ-X>odmc#Vhi86Fc?pDA{6eYqP{ zxLD}h75LyZ_Z{V&2i)JEqp1EzLn%g=yzSia9{5_5RCQwt`|e$fT5f zsMm-n;ME2~LWuO&2o8b-oG12x7a&CHiZC!-lT(OdM+ zZPx^qIOxj`0o`iG8yC{q&l?{FD9yZn9j3fFEq##D$#<^y)w9qip%qqR_nYFZfb!s? z#~Y{Eri5;DlQbk<5{d+vyylNCBB0%vXolWw7$q~6@c6`V>c|)baDJ`+k>cTUyB`Y- zwGi))fYkrpuEWZ`l^uM~HP z!`2CtC@ccFimVj-j8;}8XL|*7wW@v0ecfAhTUU|fy61YORqcGvrN>3L!L%EPZ@po- z_33P!ELy);sT=1?Oogsns3~mO2pEjVAj!eBhkH%z1p!}U4@!3~2HuMuH4pN9btp3* zyQJ;C$s~Ql^ke>Pn2u$5g)dX1r`Cn}(-mfs_CRL3k>`rpY}ip)FzYEIp1Ktfj|#u& zjS+^Q12}x{-{Tfkdq*h`n{X;2Jqn#Gya8+>t-x#+RN>-on;+FI%19(@Q9v(D5I7W7 z*U$@L=ij|zwJjxa2n(dS(rxHw2wlJBOtY?`mLAWz08+RPi2;zez^fA)U9u|EUViJ$ zymrdDp@F`w8}G_G%`~6-I)>WboXpa*Y2t>bpyP9 z;MvQ9bTFDEcRt^djv0VBV+uK-lGbYKj3+f4XX>m7T>|rq#zoSjGjg8+0pP1F;qE%xja`MIOCVo-UGjcMN09i<$K2=A>Q~V;IZsT+62&ScZWjDz@~D0_=CWA$ z8MjM1`Yz+tE{OhABw%XvPRqj2hc|+bm2H(;bl=C1HfU2j!pz_Pys5X&((#wM?a5FK z`5=WzD#S&KAKFju(5Y;fYNrnhX$aFswwxY!CHg?M_FB+v+e@D& z&O~oT^|P6crV$c3kW#!w3n94KU&zt44=c!txI9P!h$9gG(MP03vAl_{kLN?I1giwc45ch|G=X$|y_r-Wiu^rctR-V86@4Qh zM?MXrTv;eAM=9rPge`$`VKQcyQN5VmE1ew@3k9QFS__}5+fazemoG^LDnGa;g)s28 zidlMFsKKJbXTmF|WR|6mj5C&#*4#~L#PCeS`50@ZI&phti9WD=q{|+h@-QYv>~d&- zKP7*)wP584YD9LvST{GqU0F6H%7FYPHxhgc_uZuoFFb|iV5QNB8uCk7(z zo=rwX676PC`p3%#l6JieJ>AxGcFTx(h~{Iq`$k$6dXh+nmSk2~uYsZ-zdqD>eJ=?D zsHj7Pt1@X~B^$}*Qp0bmi6`d|6~& za6IV2NU_Z(T(*gvl69SU5%h>e>JC7M81f35tQYshm8i5WyMnYSLwZ-5^pE* z`)Iast`KMXZN5D&f}EdF9!}-til|3l-*%p_@V2yHA6}GuC&^h~ENrJl#pq0d1!ll* zb9gGB59j{14+pTcv5RPbkYyu%YoMcX>jpTma10NSM;gPe~s@zQmopc)*P43K+`;23jQ% zSmRTf>7^sds2n$VJxn_DqqDh~jLS;Hup)3#>#xFkyc)BvkE}_M#!*f;FU@PHQ3E>P z$Hv>*MU50L&a5kl2<+W7G)lpXT%MpK2B=pI4wT-QC2@HT9<${Wt)Y?9rER5YtsaLT zR=p?O*W7i_zWyM9a$gkVl(-q#%C#LbRL1P@+~?`tGTNo>&BXQqr2kgtPYpY*zrPp# z1+|&I90q)*9NoJ&Wp{5wb(dEJqFP*%gwxd4BRhF*BBm3GMo=UUzty2~5hj!7IgDd_ z#7|6%P%_0`oSUX&L_i~U(#_V(n5d)^;g#d7BzK4=1UbS3B_)p+A7ss~OYy^s0y=p0 zu|g~uwdhiEY65+-lQ`ibS`^L>m@q0;ec%?%_r(H(40PfEcL8wi(kI22gI}-R7lr$A z=L4FMI*^N7NuhDRyGC~ zNH9>9C>5z$P;WvvdW+@0RXZjY%@idHKNcA&+Qs-}p>V@z-lIr{ViX`)524WS*}yYH zfuTS50&Qm7=81c*3e^L^0KtlvN6u(i!0?w6Lf|7n0d1O4uNO%?l&tTof2b z4yDGufU9K44XmE?aLMw$;JX+)KW^9+!6AY z4*+_mz|(co8pk~P8!Gt^0mv}^sP;l|X_HXV35-5*Hgz$@)8T?G>l68b_AR$CXei~@ zk$@10pcaVh#9Hc8B=bc7loOB=R~XkBDHV=jMIhNn5dt#eT6{`-CI0LZbNhAt&j;dM zmn(#Q9!aF3avNR9?Y)k&1Reo>aOFA#5qxBZ&QhoohuR>}07~b9FM=om(D9AkEP$dq za{@KeA>+6QeSVlp$T~U43(XrBE6mjHf#_ZZXvyoz_H}A{ZQsu_ojoBUOU?mY_?+Kh zIUo)xv!Kozt>K1tMMV7+QCy*-Va~_7-%^Vw-2VP-A6z2>#ScV^QPGGdl7#Dd8_AuC zIcwysFp4C<#t2#ppcR9PpuiXs4g)G`Qe$4?rJAL@H&dIJ2_kgYmas4-w^e&~ES<8^ zfICu3#DE9k)_|j`!xI5^Gad0qD1P2-nI3~FvmoyoyCK*{7D!*_9b)9jTM?5A2&OSVEErbg4BP<`y^dK` zOep>(J7~zJt+F-9GY#JhD4&G$QCfkS@y@~o9?Db@4tOk(oS*Xk1l(<*AWO9D*XgR0<6xx~B^fC@7#(gr3M(L?Z!! z1<-ofn;FAyVKGncn94M5n?>(j2uypLi2}wf7%<)161ZyKF@~at>mUJlPsBT7&s|8% zy+CDd?qKh<%=wlx_X5bix$*0q_377R;`!y1h;Widzo)ELRvWLBTGN6CZ=~r4m8rTW zpKaBbG}lKMa=dfs?t|Rg;)6t5ztsC7?|*rTCCgh;7+NM ze1PiJrK+pql9Hd9Y+V423X|ej>`*%fvSX#aYx$cFRpoGu6N@fmzgr9_QeQr4p0|7-o5L zIkTm)r6kxfm?DZTDxK$C<3(|Dbch65#{N7D(@Qv-7DBITd;jc{C32ipGN5-QDwF(q z1|rEwp=yqCR=J#^lmCd$4kcKWD=clZC|6~km4RkFYo1q%Z=ys|+3zG_+L@aGqYng# zCK&&Bx4EN*QIy!0oZ3fZwIQ%uh1~xDKILJq5jo-0JcVuxgg%IfrQ0z zq{T<2;)R`}%RAv=WDv{?WJ|Yk$$S0@Wy__vVUaMea1ca_?glXJn_B+oF}-oZKK+0v zo$4|L1+b05%*wj@-?l<;$G~VWlYuOCSMzlfYbk%q4iKpWZ&{>*DM7mKilA*$i7?|Y zivU2NA2g0CPT!dv$;cxpM}@(m7&R19SRhJhqWf2k9@>r#thaZfcIhFWjGxNRACa>U zSMB9dy6xrvob~uE(=A_RMNl8)<|7nQGvo1C~){GZ%a*1Tm(;MX#*229wZfA$t#gj9%wxo z=5|d6;L8;dyS$!aUw7j~Z<~K^uRLH{FqW1zX8KD2EYn4Nh@3G~PjO|$6=lJcO1^$A zMEOu2$A%X+6UQP!iQgs(R_ZNmEVeyR$y-lSFo4~QJhdeYnXI!a>FEZ8-}0!9q@B}0 z0$He+24q;s&z2i$hMV~G*Wh!gvFzKSka@ZU&_ADeF^(9S|7CrEsI_Uz&#z$8E68=q zm%~k<-_*>@(=u$%K%8nW9tWYWF5bsUve{pPL6EQrC~r4fFEScTkdd(6<$C5695LD- zNzMikgL>G&Wg3cvuuxq-(b>el?);xR8w)KwgmvM~)eK{f_5RWq5Y88NF~X)QHN!c1 zl5*VKD(@ySvb6E<^lx(E?q7^&2!caU80>l~H8}$&HI;h68FZBTo2LxU?^52;EH$6b zWX%C&Y~#HfHp6{oy>#YBzc))PbWyW zH40Fj)ucJw1CAU}9y##vZ&1}Il(|3k6Swbr1sm`BscM0TLf$_dEwS|q%D0%xLldbL zugxzvNiDBapDfk06xI2l&lb9`!h5_6xhz)ObfcGg6g zNdst6z#C+At~bM8EJ4nJ)A1j6XO*ZT?Y>z*ea#I^s%TysZ;AxK-+=UyT${=R%PD z#2H{>BZ(%ZRF}S|5Ffpbrij9XhxaN;$5?1Uu)}c2X(I`zu&}rnQ(0v0CyLz``>VCC zCF-DkxlcIbL%D*{q`x~2s1&8MMi@AFus>IlA1cBaZ2%~5C zZC4i|Uko^&)SoQ&SN%_0p}*?aF?To#r2BOd`n2G@JV|hN)P;y$B&9}2JXNBXibOIg z#Q+tCl7K{As$!PsAme>~TG1#zxIJ9a@={fHcE27c`MDE9%Z8=S_heLk`senFjwSf= z<*!TW427;%YByul6kIwyJ`t&p6i|@V_YTXJyTop1cF8avL!g@*UtA!yJ<#k%yWN-X ziJ$*GqU)9<3OaOG({*E-+((fwe^RQxcHQHga^U#6E0`#q@h=s0Q6Q|(F6PIoLLi3Co&2>|Bj`R_`_qyw*rnf#L8O;fed$Z{ew2;&d z-EQlc*!+#TcW#BKJre!C^FLdOA#>GHerED*9e)Eo2oY(ib$cyK#KO| zil_Y@_D0Nk6N1a`3bQa=6(>^=x7 zst=t!S$Gr@x4_-hpBG_4IDsllN-#BPV~_0cI2E3@kSfImF2;~yQv>*_jvYGUVbgYK z@bfCUGYK&=(xQ|B>=Mlb7*Q}T;AZn5olh>koGASqqhoyN_xakro$)*R?`aeBH(19T z{^d{WqEupJT8vA~DHKwOA!-4si_+ScmaNRvB_%8`RZ>&nHzJXKQVYopOT!_8f4D>i zC6Oravqk`AZS-UjhCk+CW}C z{B5d0wf+KdBfAFG>`3Kto$g(XDA3V<(@y$ogBa!u2YlM4D}2vLhgs9~@=0+y{Awe2 zob&C8=qF9M%3SVN6hCQUAc*Ym7O?!x+M2yu9+9rNVpE3Xji`5%lV}_{635}t`UW2e zqog*7gt;wTm%~oP!Pzyuy)P1}0hbe(4M~w({%L&BXG2mh{kp#*sA-$>cjZ8wbOKdX zCMH@7$t|$Pc&G(Jd>3(84&;VjcS1im4S<2eR6azCZQeK=x;;*$2wx%&Phubd(#L}blq2MuyUypm3n}Nns$k0*>qa7 z#dZuc_Wego!9iQ z`2JCVmw|&_NkgumH;GKktrUIA61WIguQHp{!(S4HKrZq7S4;4?J~La>l~E=Z`z1x# zBPs#g6ED4y#4!a12mFNG|GvMXGW0LWK^U4%Kp~tT@4z{PMIh;2#0~6Cw_^m5)Yfny zVqNnx5BlQLr%p19Q=6QrE}uy85HJPefKL*3kD58BtoXog=AjSp+px{9G0NTRafgfu5Dv2R4IG6{FZU8I(Sjn;U7X^Md zOLO@r1-{dBauCFy7X}fCB=%#dh7yQ44TiYLgp^6SnuJUC4f;ixC?paL%-0M=CtpYK z;)+r)(#6(M@qi}@ScCKDAJ;7C{C{?zE1yv@a1kC=c;wu!^|9ChM$EK~h z0gc2L#yc0wqv)sL%|4oZkFyvxgvh4JNE~AI97jn9E)0bbQ??p}?TKsuZ%FjUK~FCj zit_i>i*&^aSP+aRoAaA5c~2Xh&D@Qe6p3=4WQzdtW#kp`h+?W+3&q#ySkF5H*o_Gd zFf!x6stySHmmRQikr3C7{H|1YTe7iJ!iE%r~B0mzL?_$f^I%w(CJrKuzT#Cm$-dNHfIp+M&%L-)ADLW z0{SPi{crs7hUcSR*T0np2uZz2MraJ(TydG<40aDfEhh?eYkQn33~rnUD7(S0q!7Jd zYW}~(@dp2x3;Dk+hy}Eakmr$MEjK?OQ{B-JGbZu?k7GAR*OQ>xWCSQHp!uH$TmN@Y zU@VH4V~P#!r|`yd2Xcte<4IJu-cf(J#g6n_fv58C}V zWN#h~5vTa4f~a!2ry6ZcFOIc;JC6@945nZJ->lUEFfi@Ie>je722J9>20b9k{{gVb z%uc7rWBlp}$Zj;4{6q0S3!DF|F8~70FhqlV`g%Ht^g5vf1_n#~XK(=Tzr70}lz;0b zM#;HlNYmLr5BTpwV1(p9mshMM&zE*`4rwGY8bR@ASjPVg?(>R8{98RBhl9YjUJNIT zgsMIS{yzfh*8R)>0boT9YfWE(h0+48U|7L_*pip!e>AmDpGudU1f%o=vveH)?=u1~ z%RdSM02b+hoc1nAf{`-=*C({S;(in+P9o3!`pC8|(G z_g2{nopIJK(%zO5FL+uQ#JRT6_0rEW-sx2SNWoJOz4v=nh|ijskT>`;;h@YYlAQW9 zm&~`aZS7z-B$BF$!!mJA*x#C;X)ZL_^mW%Y?;L}3{@=nVo&!sx6UPE27bgL`#lqhDr*61_!LPIdE^$h$Z(@$jk;h+tTj;bO!xHni znH6n|IHCuF$F*?r-qUv0Qg_{?dJ;dWjT3h}?hlfTh7x3c|S8c%HS&fChkqll(1?2IgsNP)6=91+Djw02*hMMQ?pPz|| zH)1&*WPV4XA%L7Cy0dd~HeBj?O*|KUk(HKf*=hNgq;stz#S39yyuZ9}kT0!FvJ{O> zn>Nnmtx}yB2s_jI@ow^gsaY0KSGvRrUpZ%W6trQ~z~!vT@DAwmjk%UArO}Eql6#$h zxWuTia;S-uqP_eZ!LfMVNHBP!fn<|n$uTFIp06ciBsb}EemeH!vz4lM>rH8MmN87D z7}bq87QemmzAB}ET6}s}(fC4>FLk6PbCEG#U?J5&LK9(=%60l3R)y*flIXvf#z0(F zFT((~6hxdG)R3>c8BF&W1xR=qv8FOmN3ghU57H1f1cmD-U5~n#A6*T7dPaQIBB79z z>3b%@>S4*4!J~?+D;4<*W>1xS5LoX(MRY4;^csw!{A=sV)2{;YR<+h2%E`U=%B~Hq zXbDj=p4EMLI&SwocMx0h{SoxdDBwMC#(waOgq6dDzxw&^X=z9sfg2cNFxge~Vq z)s;q@^EkVxs7II$1i2bvfEQ2#Mn{rai0o97z-BG=eR-)%BUt;GH1btsyIETT0#MGw z5fE4v)Fc_qjsct1yx*)6R*=st@XAIo-+bcx=VIxD_uFD7-a%v%*WwiGTf*MbTbe4L ze*q^WkW&D81Hf@+EyS6QrTe|d4Z0Wm*$M&$)P`S=8+o@SN*!iisXt?AhE1Lq?OQzL zC5)(@w`2GNU{;|B5z(2h6TMe=JI+{hs7{jg{_;`Ljb6H&8Rr1P1(lYHzCJG2En;4j z^dN~u3P+?yEL>*KNxbo`#rVRLi3fWmmyg~II|V9LD^;&|DrlFB#$Q)gQ)UOfR#T$S zT!HOb806mxXcF*nexp1s^T0$!op@_-`HZtTNoI@ui+ftOm!yDCX(cgZ+0evh&b`Zo zHwA&`yr0VqCDWm*ZRNrnRQZI2HBu1``r{JWDS5Jugx!q{7nHC0Ib0uo@kgliMX}%6 zjvHSewTgJq?t3eShF|C=LvZHfARc2Bc7UfHwrB5@JeiVK0u}cLTPB$oZRWxq?{bZM z9keol(Hnu)?YkcZn~H7$c12F>K+26JDf@H$nYT)p-p_Ibdry-Bc6pk={$P{bxKP~A zssTsQgsV!H`LQ z`*YuiPoE9dmpk+9+irQ2rdCp}$IGo!gU!w5HSUA`j^}Li)8Q-;p;yYUo8P@wQ4?U9 z&~p6j){DL23VGm?_pMTs=1Y$dk0~)CWp$|a8=Vyw(-OSyd$p~0zE&$EwHY{#i9CIt zyze_)}8V)?Q5A@!TU(awiw?SFHB1K54F`sy%@3hhJ@mRgox*|3K?p$OojEbF$08wIWNcGvxEdi7QX zwe%I^%e@C8x@8t^QarLmSWM&Ugz#wU2w9cSFGh>!k_33dN*MNekqem;;y4Cfs2e^) zoEi>GW#BzcO7Orz(85X5qOUuJvK|N}hQ%3nIE@Y*;%!#19fT6IN`Jffnj0o_^%2tF zHayt(Zsq`Pf{gkeWJTFNt&aBh8>>s49Bbb{FVV}Cm*WNe={fsJwBf7sV-Vrl&gaaO zd%)d9!E9ztRcHMu!4|I|QRzn7Qti#N0AY3fHAAxH7GsblIpC}^<^V66dlWTh$0sy! zz23V?RP0D>Z`Rr7tdShPjG$FsGrud6=!`0n4CBf&(4GzvuuSo})m=(3EE0Yct^uuy z80f_nBNUKmKUq=ZKf1FFaYXtU&vImM~wANf!0S3YtaMG2&fk9_E9H@T2<&MzfZ zpvitmG4a^P_|dSyQY$Ha9*(54p~JD1W(;~%kpW7&NM*7H|3%X{ARX_C$uvbeN6Uc6 zE#-C_koALeyA>Rgc3*on{>q^%VpWgErx2yLlF3LDq66Juv1s=_CpkJRa5A~`r&>MC ztH=ua*uN^wZ{Ya&RAHM;La}Sc3eMfzoqMb3-s+K|<28ep{u2AQ_l(SyM?(zLr7E7k z6I=00Q%h|gTkX`uYL-Jlbj){t`H`n4(K?%Aj<4PG#+?lMa7%j%3*Ea;6oI|uV~ktw zJT^&NB$DW{gR&ia1F`%#_}u8NzVEK_eVviBLlk^LeEzmyOgQI4#1l{nWtuJwR<158 zDa2G23z~2s)rA;#aTLj9A*GGZUTk^N^~*c?YgVf2wXX)gxh@ylsFS{&KfcD_nX{Iz@VLs|G2f}t zafhLF;lQ1B)bv^!B#uRB9ks4;YnWr=I(IUIoVX~YVLlWVE?wHqcwfI9EnAkU5@Ngk z!HZnMQpjD$d6L)OXJkl@(Z-X0L82)%_NLK~Pe}K@Ev2oRt=_PRoyH{g7ZR5jsk*3- z_(Y4Z($PETv&-BITEnYCk06xHQN?o7r%=oa$4B6!`7V+%`})sxH7*wKcrI%6)I7%a z<~&{#a6E=hraj`K>X=s0ovLggEep=cziB^~u$(h4t%_+bNOb*pL#fOG+?uC?xu?Ru zS`9wR6nTAJ1ZcV7k#AVgTbqNE`9uz&%Z&pj+&y2O%;=(4P52l+-m)aS^bjSzUN5D5 zczp8*=9fF2HThSsmOpqi|M+~4go9?^hGwic-5t%$DP!Kf#L8-MbxV&??eE)jPGccD zLiZeO8}sY+FgON`Yhs_Hgi1ZxASS#J4JVgL9;Pu$Cz2xw(mGn5ANe!R#B;Uw@0B@3 zQQCsD_%TilcWYz(yEKM(jQnI4?<^}7XMU$k#7Dyx6Zr2v-yo{4?ILzO>^YNZhv>@j z1J5+i5|@O#xoUG@_{wYkiJBn)3eMy6=~~Kw+)D9CJ@cdjkPJqshGyXWWQ*%b91l;X zab#dh6%to{3KvHtX_2&jHNM>a(mP`OWt~fmzS1mR>)o!E*nxfoswz6G%&bbUEv(F- z>X?#4WZ1?J3a7f0M(v$F<~a8a#iKo~PlEq2>+0quCvcP!V~GY+#`VI9=tyJ=@WR+5 zK=>~66Y=Kp{wbb&fV9u?m{><-;r1Zv>IOQ)%D5U9`k+_j@MVbtHNW zk8PSX@n!f}*yL0nBga%cI3Mm!r7<@P2;`Kl6_h`Zhvh?ePp0o7v^#-9?sf6h8RpzT zDMHNUqh13lpoEoNRwzUHys}l6WsRI?u?;fq#rtH#GH$HiWcp6~(!OrJO{W5UTUK(Z5l-Kk+M1 zAD!9PDJlc5Uh3*GZ|Ts{$d-JhZSH(5a+{)=!z}B&L(!vARcmg%UXzqjdYIv~Dy-t+ zy^-o^;hi;}N(zOyz+GSFSLr;LDco4`5{v3%V|D@WJ`C8fTNoZVQLJ2x4-%0ZLI-b= zcq>>6Er!}GqlDS;H!pp7@BHG{Z6&+$irQMAI{CSnfLgMIY`q)HX6*Xx@}X}y3>MMW zyy#2tK1~eZjwTF(OZ;~i%y`}MU~hdqyzWn4pF;iIk87k5J?L4{+b0uuLV|3Z*`y5a2lkr5Q|IAv z3Wv+jSl(c$C#zz@E9@I-KN?!Cf0p^pn^IRW=m^KMz5_XL)~fB1$MgfRvdi|DY<{H5 z{JF%L@^_umM)4(wp>a+zZu0gbmLzHJx zV&=iWO&nE-wVzR8Q=qHQ{?^X@J^kj=hwXgCbL6Av#` zKPhW;X_rgy29F|G4#-G!8F7~p8zi|}(##?COEVcM_v&AMwpppGZd+T_C@wXY$@glU zd79HC{M#EeeWu+Xa8r&_(R`#Wb&)_cqtkA1z0spMT$E#YFCMx5JU0MBmqyLbSX|9k zUx`Jw*OT+2p7R2cjP7!AQoukQxj5E2^0fDMfa{x1ZmOW)9?zF({Bg`HnG)OU^L1rE z+A8XM|Ke8`DH-we{;caO`MS2^FN}zIZF+aZbpIE)BWKy|+%nT>{B6$HxGZ;d!QSr| zP*EqF^)md&CFWS*0O%^vxh5eqN{j6aV5@18%4CJef%y}aj5&_utnTN!WgCOjJn^go zOTr`@ilNk{WPk*o7}k+pj6dZ}&})uXrU#X>UpyHUNFR^j4fX_uOGm`L9s zdY{c`qN3LLqN9@iFlZ~2iv83CxjUuQ?qX3=kM-uNQ=KtFX7;B2Od7Uvnb<8UxXs1L zjso@eFF54G$~=p$cLN6~6~_LqPEPU(Nn3EA{?u${Be8zEtH2e0KEHK_gJCS=sbJ** z^J5IlOy*cu)NiX=aJcFq)Q!Ew2FE-)#VO18QIBSM)=>Rar=r*Eco-gx#VVlqY9a07 z47^(VKXkoiRFv)iy*)z?DJ?B6-Hj;SIWROxGjxN1dJiex9ZJU_J;Z=0QqmIAq0)^g zp<+DOp!fGz|K~k#SS%ZEST!ji|;himp}s&mfHT86@!O?(;X+)O17DlJV(2IBcm$d~xrSPb;x z*m^xq!`M8xUnql;wj?0r2#81wjG3p05C#k|MW^o4%`I>>`bQVDnbQ&zsc9%u4Jlx` z)32aY$vULCr+UmH+x=CK>O<}u_qPu%8osW=L6yntLuD>c1_Mgp&8|4!KlKMUobs=BWSyfvF47MH{n1puL+Ne8SMtxxSatrM^M}|6wS|=_<9K5Xd7;TrxxS& z4+Yr6%6Mo}v?!lb0hDT^O3j{v!cxd`>$=J0X{0`p&7Um;Qc57xkv^L_n><><)>Fi5 zKV-Febujo!1!nBk=V_+=o1jQE;B{)=hS==dm)Y+{kapkzV1*yWDs2bzR2b1*(Q2(aq)%PXGUpWzF)8}T*)!Jn2wqw7X$ZKWF3Hi7fjAJ3KR zAVCFrk=r+0qqH|VlEy?aw~I8dcAgkjy?f3(%3L=_)}qy)8;*f5EIN)L0{#|t=M0N3Y>1_8 z-JmhM1*AT=UcdHbk&bXtHt;|3jj+hzKw-CtNavSr=XP#pYnfG(l{u zz;SxK_PkIGRa&_oDhJGwS-Dg09cvZ%l-*)69BLF)h}D@xLdEyW+f5@YCi8>lvgof` z3m+v(UAh=@ZvLcX_qM?YY`*uSoYl4Of>+?uG&DWJ%`2|X(5ZD*vZkKL+1j{y!vF=F zSA{0Ib)hHME-KkK^VYNO7tMDH%DACp7FjDeWhT#v5%L=q zq_b+^AWI?qViud_bEAp!dd)UZg`90M=B3u0&oV9% zi~`weaHKY+GQ%R6N_jDRcNB9G;h}sh&DHlsg#xSo5ThgpiIuv~8fLak6 z3$hx6PAf&FaP$*$RhxCJY$|o$WO9>TEiD^HwPKCYYxeEY}xHC@)IvN*XS_GmN- z)^plM0Uw*6cbC!Z2x>YI3aeKVk|@_WRwkGGUA~E-ttQ7Rdn#;3{9+8meT32RH^#QT zNqB|9Gw`AaVg_uY9sO3X3LKnpB6q1W+wDYY7ju}1X%Z^|8{ygP(O%a@U0Jua=SV%y zP9cATJgt{!_Wh_xCl-%)FUQ2kOS|2wLpVKAzA(-@z`H9k_+SaD6J9I1!a{QyS@`aS z)M=?pv8RqL*yy>L~ z!Hti43+Zo|?p32d4k-Hyee~>5+bh@|Jnw?0x zl}ls_Le zQWF8-CEKaq!7B##m3#0owU(SmV5W0U*O_anmbUGNZPE}xUJlsns%%pdOBMaGYLQ4c z7IqxOm)U2k&U_j3Rn{}_6zXwX)40onr`-=)9Hzfj+uv+46{?p>C8s+)MI$IBnL4QjHYZx+7}$Cbu4BQrqqyBVf}hl2-VsR?P>9EJuH z0y@6@aJVu^b|^veH?%tFhl}Yu-_iLFp^hNqW5uCUz#2US7Yr>i^@t)`=_hSVvNtjT zIj_5&t2f$_8kAG?q1NCYlu9IoR9$$SBu~NJ6Oi-Emij4n&*;7^QXJx375@WiPwS=1 zFk|6xfsjbBFhF0Zi<`REM@yP6u~5%J#uU}!?uS}_l(*3g1}pXMfu$!U?Pc6QIaO?f z?Wc&+G5qBuOv&YIP;2nE-oq=9^eh{86kWZb2T}%*XU2pV-3jZOyr>2|8(eENM$h@L zz5Ihmg9Sak-ob9ohXjR$na2aO+<`QGAy1_;*!(KFuMT2}-X^vakpqGFoh?oSLi?9= z_+KY{F2P)*6B>>0k*{8pq#;{HtM0z_;H&kN{W5X#WwRTJhAw?|$@t^u+xM(!r9h4+ z(7e6+VBNfcTP&riy?Z#j&qHk!FgpVHTuSkz>NF*_aRAAFw95bwGB0+go~7grxcK=9&N+Bt{(e*W;eCG zH+Jpl2YI;Adr-ue!zKDE+JhKvR)QUX!lRZqIY_bP*-a8*1Hi}^Nt%ilkDQsO>yMWD zo41)qNlAq0fE<)#M+IbzIs?0qPQ^yy7rJ>QbqG3WOq79={50cw#Iq5%35f8N>?YEZlUtmV$%6zZ5FY zY9qA1{vdVs0=-OB2l*K{^OJ~{JiDdsc~8AmO0(Heo|$mAZ}r|Ju`6B&`}&d#T~FRpdv6~W5LwD(Le zC2=dwy~Qw+B%k$`zLD+y-W)Dzv zTa8K+#O9~UPI>c++Jo6kN&r#bhm zEe+A#l69Oqs-JC_13j4Azps6_CBj=a*1D%_*^?~-lA z?s(}Wf$gR0giU_GhIhc&OleoxdgqZ+0yrcfuLse&B|*40&AFUVxh=4~9e;j!lG+%> zw-X*c!e`{OaCpI6lcBLkd|WAxSDG1cLN=KywFSiHGzaN-ZV1nTXVX?&?&JX1q)nvN z*$;VJD~511S{)OIxpUHK9b`;kfsCtygR!X!KhN?}rzc&jh3_hiYRO&7@4eLy><(@X zGw1MB=`tD4GM*J46yZj(g6X3eP`Tp#zy}~Nm8qc3YejsVI)BLOLS>W3l|Eap|@;OTwGT*tOE2pho*XXup0cxx* zVI5}(c;q13?;Wa`1*JwDNZ`YY_u#ZSUSk{aY2;U^*UDXmQGSpF z!5G8t+Y5N)NMnRK>;Ubybf^~;8yG7Vz^4ej4T1SM9Lar(@rGSxTWPHWsNJ}L?t}Wp z4^>`~Th?zLk^j=bie_e9GK~xyjQ>dlBeDc~Fn8WpOm*D7KkofdKJ+LykxV4&&K&Lj zajj@}pU)~~Ju5golGx{A%x7KEy=}AKFN;-m2hM|VfJVzTY7danpS+RE?PNx1Tc0Fh z%5Di*_hsG43ZHD(+IkFXk8`;BJ--FEMgM9b`Te%Uf4sZvHns{ofMJf$wjrunvq8({ zop{c(qV#f9ut52=N+lpXZMyu~xV5ysKYfGl2o&07GFX!~eDsi~=UY&nj*)A++&Q4( zLcpu5x&QmFbL(qa3dTL`&iyYM?4e3|Jqf!~U^3_WSh% zE0g+{b=kn+lX`prxCd!U(KQPi;$&+!dYG3ai?jW6=GL(F`No?7BA;0LMV4@gDk4^Z zG`MwlSXHax#YdxFw)&n;N2O6)P@)Lie(mkN`3&zljVf3}7*hIwI6&WwCKlSZC&GMe1)ByS!lt+5kShr zF=&e&zK1-nh47^7L2*S1vzmwvBcthi$apG7$S6@{JT!`ePZYVCz(WNiE4rUhvF04w zZkWh4T96RKVpe+>qn$FJ?X_+OJ%r45@kIHcz5<~?{2aSF2k|{!&z_0kxYoEqm4bX=AL~AT;t!4H{m{ zBCM92Hhi2iCt~Wg+u*tFhqsck!s6a07!wY1g zV-m@Cw+`Rm7av@`<}h6F#Yk|&e9}L@Fk>st{zJaqdnMg$tL!mj9(Unak9jB-m$9)Y ze>cLl>TUd{a4xhT_bw`OeoikX^0`h;eG*i+|D>kQkA|Z~81`BW6dfhlDx5@g2b^f0 z(tLz9Mw+sJCjya0)4lc*yXqVr9F7fiO(hr76hP9% z{I<=wG%A@~yvaeC)q6ZOY~0TSd#$qVi5qEz2?!G3lsea#=OpN*nAjR{zBu>EviK~L z1ZX(6q>y`i4Ppf5L(lID)7mP7)|8t{Ud1WsQpn|$uU<2FDb?4)4n5*hj#zcA<}%OL zb~@Ek0)WtTPoW2)>FUK)Rj0iikb)ra7-k?A1W1h2y9L;(fNkFz(IgV|jzc)NDP*@6 zs=2oKx_&;?Rj*)mn6ycEeI`y-NFy8L+U2HW+MoYq35;pD#R4sIK?I+n=a!CCY|3uG zVN=E(Q7plKaxvReTg-PeJ{k<9rW+Nj50XZ-t545O+|(msg-v&teA-)C`p*9#=kgT%-Va*SiKB~0K zQc6%22&Hb=Iz0FUq^5OxznMz$B^!X1YfNf7x)uXa7zjQ0JUEZ0a+eA=vEQZ{cy#Hx z=*zu?tk*!69Br3Ah@RKJGQa2fQyBXMBjlAe;=@Iu{|b5C^0#Xt2UY4Grw)fd)fv2w zO=Cq>D0rM4pWqRl*TR=}nL5O|c($ zcaz&?m7Pmwr*ivm>8yTySyHR)SqAE=1H#kXix^8rThJ*+%6BYE7+J^xEnk5W!SOYe zHh=^H%U8BYzO>0~D>tha2?C)_mQpv(ro*@7XXrW2k|ju%lnVG&V)f)WZzGvlL_#X8 zx}M9iq$-lqITs4Ja9Eo{D~y*}L9`YWK!hrZz_Gw>ZcL?(B*DS!5=iXsU@g~>)dbVk zB{`}2S!UQG2vWsq(o)y6?8$Sn@K|4fFp^GoN8qVBhgj1Kokb?2Qia3it5V2vbVVni z=9*ybO6kwynG*J6EUvB+7H& zS}+L+Q=4v+QUP`xBkN{teXl_iUGN7N5X!bEc;YW=&rP&IJi#|eCv+yvlVND2v&Ar* zR&3K!Eu&G$2h|mYt%XnZD90@d%0t@NHTvwg0UmO06;fB}ZPU+}M`!c>(zH<+S*HWD zfkzdu0Xq+Z2F-}oo6QsrQE7jrsMy1u3HI^Ov2_(Us&xn^y9sRl_AW?@vPH5GI%4BF zq_UBDft&zo$9iX1#OD@#)K{t#?Gt4DHABH7$@yvd=d)uqU2X7Zcvyr{dt&K_Ke@=wYH;2UPEYGEPYUpbKx_Uc`tZN%EO)@@Zg7l9na3;+@LiZcT#BO zxa4owW{T-?3PyjR9R>c>lInF7&oB6^BP_o?B=hJZX==l*De)Z|oy0vAaZ2oacRdfuJzYq#BCAs}bZj z7on+x4}c8ZxSImFyvwEK9TGhw^tv2`tJ(W3Z=+eLm>Xzgn4V9@>0+no35XkbW7??l#DT4rbieqv0P zS^@C%%p8-A1H)I66$qp7{Ta!CK8DNv+_3B2DXt zkJ?UOkFohjOgO*h-jx|sM+RLm2JXv{1zKa@o4eEPwln+f>-IPfigL_H~q6 zS7qL%0t4|(3U7pca`#RoUoi5wK=jFhE+U(|(OA|nw9r$4Q{*-L_ z!(Np0YQg0f64bp}DzJ84q)5Z_edBi_~_Gx zL3Fw}$;Htg)r2^M2obJ}wW|V_xB4yTaHSVE{R5{gME@JS5c_zIm+{m1d4>17fPyDX zIKJ^?$V=U0+ib7E2}S#Mo_3sJ94LVAmVn`@`zWy`i# zIu0#FISB!6X4Jey0fqKk2*AB_aGWvMq$X{#;VM$Rj`=r9#o2hOF=Il2NY8nfcv#A5 zMqQO#88PjfNC#%68Da>l6j)Oihq`@%iTOUy@q8Ye9spW@_S#vEj{gmk*HofGioB_sHXZ$Hzwh(v?A$cpcJ&gZ zW>tFi_!*sl>t+0sv74l8J#yKA$xH7y4bDD+XAi zi($Bkmd&yz))oR22Z(drbAqc}<8T8qt2B>d9tU1(ktnl|kP_Uv=F*_~7eZ=kTcW&Q zITp&iU{IMGhg=eI|D+;o4Kz zKG&PlvC-rP-up$e0<5Oa(J|eU>`2Zo7qpOOh^vk79>lym@ee<5y7tttf*w^L$=_ar9}(jk)hMTS5qWkm^X-4T$Fj6>6I zTNrG)&|lB4N2P%Q8@r@}Y^d>jg6GEFl$YyNj-Q5@*U!7WerR`;`Z3gxy^Q$PvX^Pk z^5)h1e~QjWJ2m<}8r%_8mgSp|hnE&`p60a}K}>l%LHakOH`2iE)%-2Md*vn;gO7%@ z0`T`*0L0!;pD``UIB)flbkIf2qWCJ%3?oL;m+ z?Tl5V??hgEm%JXyvT|owR(HmY6e>0ng0MB?y8Q&MI)J^1(vU4WiQDrHV{aFL1?onURj%Ck-4LPI|?i{Acq*`<-e|n}WRT}jno^{RQ{Kzq4D!W8+ z?P0XuCng9JHK{Yucl7BSB|u96eaFtXrBfTn&x=g~1hcC9SMJBi0pd<43h?$VjBn?B zF=>NnqmtIe%K2-U{P)^rxr6#sWlvRjO!KNG4gXhG5-o%?m(4oc+|ah@#FO60ey3$#rWf;oC}>jO|I474gb6nE*-2B^Z;!5Ud$4g zw$wYxTOeVe4nz2%8aHxIV8Bfly}vr{xD?-qDxGh(dLq@?AY%!$pNneyvMmAN8}C)| zmhQlrF?<#{i@yXSBILWl)C0%X)!OpV{L6&2BjFmrzVliI`WwDbT8%UsIiIPxC3^AK zzRw*UL&*?djx6#j2hG|KDnI~1M`+G)1*?I#6M^>YmOa`+7y<);?~zOZ$E!|SJs zGOxV#o}b5)zR1mWd&6{z@XNGCLdp&68;tp>nX9X;x^Zlcz@riZM0G=0kz^L+7dV8< ziau&wf9j7MDpIqtZ6r^+ECPB}ZHXy{N)dpflN(TS3M}E}U^##i=~O<{uTsZRl4@*D9xcHoGl`h3+AYH$y{%JzZ+I-LoIl|z7F~3@6Bpp(g_)xRji zR(C#?QW=-vE6Jo8G^2F;W^j835UPek1U%R|cNhUtchF}Rx~g6#qZbN zDq34RIPunZe?PJP*{vNd>zY4ML82OKVn@Ejjk@l~c!?%exX}|&kgJe_Yxv~|frg9| zp%R@cINJ%t$UtePgxyxh!bl8GkEUCOlc8|{2d^wgBJhzbe5aCw*mM5B9DM(x;YWQe zi*dlg`!O%*5UhjbSV3{Ro8UUIcJ>+dSpQ*GscO=Z z=Z}?b8P=I@2QY~T2*YLOaw>+N^ppxvBH7V^$UBYnHNxkk_CM`8f!^GsbBNomAhXA` zV|F-@9JLbK1WPHs3XrZRe8*=xy2LT4)z-%)M~`^kCg?4jv>cQEL>aQzabue7WXg;< zSPC)W`#>ww#79^X_wy9&BmEiVOp9=;oX5iUO+|vobt@9A@dPU$0_6i4n;W;!PA!k6 z+t>S2kz%^+SD*qORr#X^ZXV_j1a+PGg_x=w5=X*zjt(k87QD9Gpz3LIapKO3?M zvnIZ?YTv%O&v_vFzzXfMeOOFu0}TK_<@u1Pj<;f;Cc}5#X7@b4Ip+~|f1u-0;@q`~ zKafNxeKJopC3{S=3xuixA@O8kj&H-!IKb~LkxGuG)OhzjL*QnqTbm_UWbkr%==w16 zvWc8)D+xjB-I$?~jZE*tkFnd%tQg?aXE=U8^iT&^2@_s6su}ez|SLz~&vN zKf;V=HUkUT7nSt?#rRV>6I-K|gLBkVI9!BkTas6TIRIKjq>TJo?SWAnsJrs`v1#Qugp`_Qo8DVI-o+fJ$EGjrsciWX?{=(IZQ9nB3K#26-F;nMTCnk%P2Xd3t;?p>_|b=JD5z1hn0;UJXmGHI7OaHdpFWV66Y;u}CvhJk&bP7~X~E4toEl>c`ORT!YyDAHps& zcNEG4=?4(|8IPIN#6?_UH<(?$;xzdTJ5|8Ykg8=6o{FRgP&PLsRomyJmz8g3}|zNT{HSae`xbZ5X__>VsaQ@6edOb_57U0ef!ink@?_s?%Fge4*xiwYZdMYP#mXhHM`< z>=>a`JSum5r0=iO?745Ec`fFn*MJ>*E#~I@BVd+r``7D({~jhu%ctR9SKAfTN*Z-= zQ=_oG@&;Xg6OkRNj!c-0S+ z0}uN1twb4_kVv1DPAw7nP-4R$m>$$+g5YXmykoe|l?F&6Udz@-pP`w6)&tQEQufyO?eZJd9yPiKZ!bjn~|atmNq=9)FJm&oyEf zcC!qkVxz5xPFAj~{>F|P#4$;yO7_GpStesKr&YQms-*3cQo>-`L14XFkZuM~?6EKb z!qF$Hc`P}Aibn*#sng=!`Q=4LQQ#^;dM9v{8?nG)spL3lyP&yk;X}5SR@L18yeemY z=2Ar}t@11sAEoh>Qma!AN4yaXOs@kroxU05;E89PviWr2KEqqdu~dfkcT@{VEk{s1tR1d~}3+|~T7remyc zILcJS8UGr>u&mL%_G*#Bi_VS01~3f$5DN>NhL3cI>#+lTTqdZH-{}cAPwRAcGD4GH zPJ!1{`K8Cw3l=0f7#@Gf{Yhz^uG-=FM=)AKwW zS7w!j)K321>RYRB`Euhx`mH$0A@l0S9B;x%1&)TSR_Ru49+=a)MFB~PR=+9ninM|I z-O4n`=pie^108*Il`6YK+FKq?zKS*2t8*Ny(Fxq&f^x4-OJ4F2#>g15S}e6+8z`eb%{O*eHwj5mPQff|?EXgc+6uDY3ldTBX}W?2V@Cl@#9E_ruH z=zuZ|?{yib;m z>4d^@cQx18Ot+}A(OsU5X^6>{Yf1e?1GzW4p$a;8#!-m$}frx%!p za6F(tgCezq`1lX`pH_isb?KPT|q z8FvS^1s?jY8W;au@2r#k0-jbtC*l~6e#iT_3e%RY1q*C9SyqLTta=H?n?C49Jv#^L zkaV9w7F{N9YQ*Psfexh0{G4>wA2K5ZLQHvOXvai5Z9k{2wR-MWLXQblV+4{(+~@jB z4A*m;)>jrpr`#5Y;H6XfRU#sMMO}fe#k1?`u@|BJ)Y=W~+N^O@(G((SPN323XnV(S zMMyNH3oE*WWwK9X6^mEJdLfl;)jFw~P(6_Kd(MZ{#{Q}(ULq$jf#lcpnB$jSt0d@W z&IeOb54vL$HWW>k|CRlhl~9EOkoaNclra%ErG{D`aE?0DZ_`RHoemX>fEy zK}%17f+949ibAqE+*U&|wNp_+Lp9$Ciref2S(Z19fVqKOaMP(mtRfm|dBTS{aYVKL zN55TFE;<>fDYCt+C&-R&%LQ|W`oy3+A0RT6!4|Xtk$LM}){8gJl2gT#GwUvYI%%9H zQNL6tP*vyP{DD-!Rx_tX%^Mzi&lh2|jX^T%DQO?o*y%{RT_2p$(n-?)Au=2h!uf_5 z#Aq{^jETfJJ-O>y_Ei0w38P`j^)Cwt^V1dbnlRHY&s$dxzeBoLd7#LA@zs4v<5uXD zns*lJ50)WV$SzeF`Lisb2wb2xjw^6$w**XA_7Llm7mE|0x=}s{E>H>iiSg{BvRNRG zpdMGC2@@1aL88L&9==rKzIKznENwLQLxyee3bNcU2&h7O?7Mks_>6KBPIE4n*3dPg z4;X%9X&7{Vw_i-g-rV{anwyQv&Sdg-so0V!QR)KhdI&bA&rWkd|5>;(hXB)nF`G+` z4)4~fPJY2R3)N7d&B)U(5gGJ@!CFmZ=VGhfDs1+CjW(Fd8otGkbh71BTsSLm776>Y zyk-&>+S29cCXw(T{-Cf47$U z#c5@T)~+XZ-@R9$N7spmJw^$XVDA5*w38G56p&EaJF7kC^{HdEW%H1VP3XVj7@*Jo z8x#aIAdv+ty7CP%tHt!GGtIkS7Q9waw5DY=wP4_}pvf(Y*MfO6>7&5gF-Q|N2&6xw z&WrTXU5;A!w8KEsG_Tsymv6eX&);qSkgQv}^^2s~uVxp12-hNo!_19avc0UekP_9) zb!0w6tt_~y%8l%FV9i*vtV-Ob)XF9EAYo_?l52P;g;#)RDt->Q?w5Qq933i~;*DQn zoHeW0)rUaR)Pjx-NfGH}d>IoW2 zWxT)S1^_3g_4PrK6|+cHSObr@`Tsgc`q!kN0{|u#Pt+95Or#y9mKBIz;|g2_)fxjH z9l0N0PQTX9{x%rJuHGOL`ER0}fQKSNpfp4>l-v*Te0DrEKhvS5ciZT6aw{yUlQg9>qj_D! zb_u%L^uZTC-Hbg{`#_nUjQI04c7bw?;H6LcBybH6u!(I#>9l>EbQRd5?rmZnf6X?4>Nq;jFoO zC2Lt6P-Hp8N43ev0>oP4ufb{;sY?!w2+*3^Dr%$!r028bU`7P0mv|+BA*UK$a*BEb=?2z#ANUa83n0(x`vG=vw7UiHXLzHTSDzrH^t*9QPdfN?}e>!z=TvX@X~VbG00E zX>(c#JjlmS=CxV58*y3cwrulGM3evFt$b^+7V9AO_ zR-&WGokC@6j%RCP1kVILXqAh#iv|hM9N6OJscDnp`hgK59i?2K(g5oYvP-FC>b%%0 z)v@kf92FJm+A!hF^8f8cWkF~lC_%7T!$*y~*Xc-<#>q8&^c|}hN@%D(3z}|rGu%0d zbJbM#A6Q;=`g|v@1XFCc#RhWnuml3f|UEpK!p01bCJv}(Mch2(@3TkaPJd8 z7#A|e(3w;Y0B?Tz@!T1Ql?f~4z~+dFq+6@SyNPmf9M;trT?335oQz%@b=kZ`7AVH<6goiWTguR|D=5r-T1;f`X4hHj; zyl*RHA=lQXrY_#190-M*HL*WTvWc5WpA|7r{Lc)vx?0*HVx0cFKD;4T1jtZ-6qH@M zz4}49=ze2tdyl3oi!5Y#spG>10NJZHKYa$SQZF!z0zL^NqI|g54!*u`(6jb4H`T~} zb_)v{&-&#l-R{ra?+n{8F>3JvsYDbldrRUb?cY|r3Yq>trg|#(qEOprV*XHT-KJ*v zbBDZ1V{LDJ@9n@VWio326$7r3EPlp5@^Nr z@Py+MRX1}xHJVMb%;IKKyQxst(IWDEf|8$Y1U+RI;*zM!uh>HYFOW=3;oQcWiFf4d zPbaVw!6PVa!9S!i@4`;m3%4gb^DF#3_jx%K!0RnUu3d*X_oKg8nx)R%@yD52NhLtH zO7iW@TpuV+5I*5!g3t=bZO{2Gb)s}HF&9cN6oI-q<~X&ZYu(b&`2?Gz7^_hai(Lmw z@Scqd9V2VQ%RRX~a`fnC%u8;NPV|cO2X&zb<9w7;hZ>>`9!ap(~<9UPA)0VI0QuO>slnk(rcLWQRf3MvcM`Vz&^G!`Gw<=Tj{ z=-QvI-E1wi+90`=977B-7>r6lr z0LnbeHbSP!A)2pF&uCB^JS_r!Q6})n;tMLY)|q~GdhE^g{TON}IG%}yqEZHC5u5Hs zp&8dXGHnE_wAxIuIcl|{D0=8ufh(=T=Bc6bsuVLP5bD=7UEoHWZct3iIs$B6(-R5+ zhX#Wmy6*$39>=`?|59~g%$@+))SKCJDVQPfEctCmubaX!jTvMMga1W9baLmPoUeI7KHBclB z0>X{M5vADzr7AQj(3ohnSPkkCIjGZ6Lph4dxrVr@^u!FOO*9qElSSXNbyd8`QYx?i z#QsE)16URi%R;kWkHX}2T-RZ^$-=_qu9pR_c%E~%@4}NWh8gL_eXBysg@f@Gqe%+q zyMrW|_S}PUqewu5@5g{y0kL!VG|4g&I8F-np8V7g)&<_10-7*yjA<#K!gDd`MI@WH zT?7~wXkF7HU@;ZTxASrCmvL$0-8PfR32f20{k2Ue^rpc$BlX@)u?L<7b}Ue0 zN4&1pwcQ~M&ly6t9uaCYmvF~pEh6l6l~pn+mejqpO2I}?0_&?+TZL|_?o&+IWXGii zNq#{=e^qXHy+Z*IJsr`PWk@B=(N1Qr#Eq68o_GJQKo??cluF$36yBvbZNb_DU0Sny zoHguEA9Kt^1Rr7m#s$J?<||e9F-bZwRP+#BEt@jieVE*K ze`ix`!Z#b+$HP^Ei}58q@#@a^c%xJTi|=IK#X!F?92geB32P_;1{v6_BU!}?ggVw9 z-Tx8EjY7?1tobUTsgQZj>x~h4F_*t0uJ>QJrUZbB0|iIbZ9R@|Lh9ZIash#ayDk}B zN9i`WSD-n>FDy_$T^8ojlwF2v^LkxCK_&M7^3c;GAEXP{veUGT4ys0ibG%7IJirOH zMANbc<)Nz?vz31|q%bOwWHp;vnSly~LBk&LY7XP(2oifDh(SZX_Uc&Rq`n@kLJBjo zaD#BFAuPOMax;@^axyxxMFfs}>D=VTGw;kY<1D9?wbf^m+dS@~v$mqpPAYo>rBogZ zw(C>VCB{yj-`iyU{msOL0*4B-|9coll{{nT6X?1a1KcJB-|d#22TXcP??)|stQb#< z@wyFEpliV~CMpfV#`M*%JC01Qeal3XSWX}}QH54J?=E9vToQrIb&Gl4li5JAh-dzW$=S-7)bA zIDa*3%f~m%d1dXZm_@K^yn1u7{pqaayx`f-W5Uqi$4_3B-zrj{r#)`=w*x*K0FEg_ zEz9Y<9OB1vSNO=Y?6{Y-kn+|$uWAAXcj_pc*s9*aZ~vFa0H2Njv||*m+cA2cZVAQL zO9Pj}6;@g&b8cN4;#0s~(iLVM?CtkGpy0mqzi5m&Kw~gBNt4Hu#{VeCc#*IXE3mRfPy|Gh)GK6$_tH{^oy_Z|Ub(h0>&DI}bU!BHxV*wZfWwLm4R#cp5SQd=R3*djfdT`T9-T+Yh4i0hZ&P;Gb}#3 zXk$butulD|LjLRwxagJ^l5!~ZdF7i~0NYjYuYmmLQ^kiusrj~Zoy;+3NspS*qns$b zfn>@CCwFLo<1Gr)hSnf!Gm$1kS9CgiC6uI~m_vjth8}Egl2UFd0IR;hXThaQ7{^mm zI!RONRg)wm=7FR`B%_SW_c&lImVEu9oKq&6Aa;C#nT}nB#4V~Ss>qQFj#T{h)x*Ws z=nr|S&E>o~LP38nljI07ULH74g~Cr&%TOm=w53|=->YWW?L#;u8CoCUk4ppfm`uRV zFOl;$lg{_17@&A{Vy$02S#7Kf9d?=n?o;nDfCzz9u^{FRt9XD1PL|8q0d-`)} z4bMiyGUtpy%wZC3VU(nz2M!O2AHRfzw&!{lOu%eyvb7-sr^%kU!~+)$hkaaeT4c%zNau)j|0a!)Dj_FkVR4XBb=VMYdShof5L_4&4r?b@v| zOy+4SG~1A>T)UZ*-rQ@^`5v+G)vaDiZcn?rv_kWq^_J=4=@s%m3jPjyWh<)yf!`zn z`aofG%N4YrK@Loqje*fe!>Q46z9iMjf9{gRUxZKP#99*yV8D$0@@2eQ)YC~9CjpC> z{HM%wC{y?9ox@7kx7uI6SG0VFYI67U@<&7Fg$HL1;ZiYA6hK1;2$~E$8DC-1kPxkr zvI5bcnmCQVhOF3=nii#ieSZ?+Rtm0z6l=A1AMNgXIw$$gIX3BmqJRcuuUk&#lP{l! zd4{4azmqk*a{QtF0k}%y>jT*PZf1$Qa1Z0NnxKW7Cn^gy&Om%xI=mv(f_24t4~$PA zSH6q2{nxl-O6}OdzCgC;$Y4i1?E7pZLk(tMVAP&w>)h)nvyG$@r{Zc!lTEgo31A+Klg6>pV9+x}Izz9;VRNPkSz)Dml)M<$Wt??P-)5fVe%NvgJ9$e;&21!r$RpB5%5z{SsNeX4p-@Tcr)@1md1Ku z6I9?9D)@WoXw?`6PSsFJriqbwL=j`nSWKI&G|^BJ(M94+EJikp-8}ZmdSP5j$621_ zG)yaF^$zI~R8g{Z81Y;4_E%CI7^@Z$<{0%S0csF~-qH0_8(w_7b=csAe`jU>-4@UR zN->SK>)Igzld&-Wa7OvyyDhKWHWP7k1aB7Fjh@5f+l%BdON19EJV|p}Oc>Y}a06yv zej_gwC*%IPr%-OeVX$JW!_{W#Qqjl89HE*;Xf6L=%L0vW@Wzpuf59vmI2O_p!%JtS5W=C z3M#D8eB_^Ijod#b`$+62h4uf3o zaQGO;ywldwT$^`}rsL#snSm)4A5=waqfUY2tWH&>#1|2LQh_?4ao{frWc`Dvs!40Y0C4DgD0-1B^o^8h3&CboJB(-+9mEO$s^x z&2>qD%Iq5~TU;*;Wd4=#9SoI8Ne}k}!8=ql{OhuVK=2;~pvD5}4t1(tq~F*GCO>V| z(d0WUw%KX!GnndRRG+xizfX5M=U{za!5YR$R(J(vL=U?NBVl zL;ku|F=?O*;{@A6=0lq`*fcoOtlLlbL-WufN0;#emb5y{O$+CFU-}$1E2gtKJeRa) zP)D=*vZiyleB)|6&2q?5phm_h$qzVI*<_#(D!{Cxig}v}PU-S{>3FQ?FuWc~WnnCE zttYMsEf!6Zumb~K35x*>18Akvid+lpt*$0NB+zUpe#!c(k=rQePmz6Tacl+{>|OMn z=a3BalzOoHnZDKkw0(T@Hm^Ju0nTtjfXIVvqb5V zR8eA+LGfBx`~o13TWJg)n7f1KOqm{RH|znP@$WZc^Mf?n)%UxO@OY7P7+ z9?a4F0!R3geFm7`^^YMK`Nm84T3U|!K5FY;YULdjMe7M2SZI8U#5eycR6bR3UZn!f z5kxChl_}_?JyWn103w*Qg>5~RkuHT`#%SUcI7~uwNBKIOJ|+xL3fUVD!`0R;;`&lg z*L19NEMhZ~%*VS-U7lfrLIt<7`Uq5&Hjse?W>q(qoeGons8wD90%200?m5^DW=4R# zE{c}?%+K-$PCAouzQ4yw@O4jY2Ga^D9lIbuSjQqZgXtC3`p>}~1t1u^iJa~?l8>T0 zPf-}atJoS*rB_u03F+qqc=Ykm!u@gQbzP$;1cPL55kWgt0+6m7b`J%-xpxNg^b(#) zvoErlAR6n&DO+VuNwLlcrrx+<8sD`UqrG*23@vW@?6PP#aGJpMAJatRus#}n6QhUEM+rFh z0RP6cfO+lnqTcOPAr==V*gCd+oDR??**VQ!|DRV8M>|NNbGu6OFy1)!8U@KonF z(a4J2sG!%ON#2q@;D5wy6{kgnmZwZv?I_FNQ@p==}}wdm&g(cp|!Wa4*OX9|-qDHk7O>WFq${wM?%EnzF*1yoexp>(m|DE1OdTA#Hd zo8T<|0E9A5Z>p54p=A>SHgRr>BwP8TPh3$QMKn7dsWW|Q6GNvF*#jcbWp?IbI? zFkW*_QZnGNOzVW{bDWfRIpb5s=h{=pI_bzlqaAP@iC2#Ir5RQx!WoVm8gJVaUU-g_ zz~2Qx3YpN<)1w8&1vT93nDx&bEVOPFX*+q*s$uS&Z-tJ;gT5Q2`ZW~~^j^Gnt!>ic%Bn~z(|Qtg9!$gtN*OHD=ep!9q>SoDeR zCua4YcJiv^ojYrS4r4fDcCw#`x^+!Kv_48H$e;L_ZWO$4Zk2|p(_Q$Vk;>$J*Y0d2 zo77xeRicdK)lM1HTXY8!Dmvb&?!KLQJ8O)*9UpkVdX*elUbrbvDr-^# zA@P*7BH;m(IH?Cp;n}eFw0QB+@8uUouJKN{M#~KnmL6XHS{`)6y^i57hOXiXhu&Mt zBE3%i=^ej&eAzAh!9O|X!5vLYPja-VbRlUdM>K}Zn^&5ulyXLs-AH*N^95Y>E{FA! z_-s6$e0vxh#jt_k!E%Kz25^mY3#*oTB61b52-;3+>)}X>TxRyhvGcid%ZBI6V)buI zrM<2_y+}7dcqschAjreD(eB;9=5u^?AGuqIIzbSv7d{sWdg+GOGZhBg*)u+t#Xwur z7iqu-0OVg)FRcs*vfuaZ;>H(?R!B^PPt>7Zm+twH9Sm!fD5B ziLmxB5U!iH1ytw?+`kzLCUk+@m4;au$+sJR$+`3hqUI`_D|1B^=Z?6kzn{@*%L4`h z`D-7=9$Z-g3NZf$my7l~Gui>%sA`3VaeC`Ip+D9f59oCUGu0M$5A6W%(gA_%&a@NcC;ot+09^mG zH)WMk>h&c|QpMgLg`#za{lR>mf5NTz1$(M?-t0Q)Cq4M@`Mh#!q4Co(-Kd@>nQJCw zEktXRnSkak0roG|VYdPaLwl*j1tZx8MqkbRWg)jT^u@xhS7T4^UX_%tZZilpYK;uj zV~;6Q?3(>MrBB481PDJUH5{7MUljVfs){uTq)_zaCOIxjTk5qp5-Om=1eKY@pwm;r zRMiyQ_|oF;)60fhLRZr_!sPx7b4>nelNbvvPeT)eJ^^j7H;48Y(%0j7JZU$SI>j0M z?{AW(mYXtOrRWy*yWJ|a&SbEd7uguIy%wrlh1Cdrf@EN`x>P{?l9HgPx0@y^eN86) zE(})ba2PviooQo_22uMuN5vz9m0ebOI_@d|G@A2w3>TUlTuk$AHfIv++HzLy+VtlZ zs#(%HQuLU4RQa13egbMev(zLCW|=|_ujiuGOhB+{qX;$t(q1EkxXLQN* zO;oXZV5fF(oySOEV*iYU*V$jp)E~#`RsmYy&eo;Zp3^!o(qUSb#%Rf`RsWx|5xPy6 zF?d=+lc#T&n-gfXL0T|g-g}oTt+4PqNY%jo=@Z=+X2+g(&8p;=chQ0*Q{lOQ`<~fTqErDGF?kcP7E=Pyg zKitXPEustzEdCFx04}sT_2Z6SO;-5g_~H>{1Z!!3p5!ITH|0{h$L9eN zqgHjS1Cx)uo_U|2^;XNHGT}XgQI$O9ra6%-X9OlE_SSA4JpH}ob&rX1H$cP6$cHl= zlXvN-%QkTOhRjQ3mX$Sbs6xwAaqRMRQ@pXL5TQz;jTiw83T|%+Wd`crIl@F{D%2z5 zk#a5@UDayt!t-v{r}DX(^$-zk!9-qcRK#beDOU=lUZ=3S1Q@k_)E!QZ70i+;j_Qwk zc#uw1(UwT!bnIf+&=DA0!JeWz);%5hdT?{L6l((m0nA^oFE)U=4;KVuyJYXsOPW_i z?Y{idIW(cFX+~Mx(uYwtr&#YUYz`E27b#Pw1z%FA%(V?jv;e25(E2pEFU!L)n1ACj z#6N=BeLP=hUi;nSCw?&l?uNO?Z0ZU^c zu0c3@2PIkX>~a)>{plsGYD|sJN0Y4W_cwp)n_{wQcU@heh7GZQohHRbkIX2i$e2(? zYG#7Cuq=o^yPt_}o?HR#N2MZyIiANYOgg~^)e0ZGL50);|JtDbfn(0@ii$dThbo<> zwLv#w6f&68l##4UiK5?kTg9Djzg1~AuF!a;?lPlZYGRUOgnKwS-8S{crj$2P92Lp6 z$&vb5;W;|%4yaW**29cU409UN*4d+oyl9dfc^LMbCpmp8-Qg5`Osw*hRpIK6XR$)| zxsTWd>i;o3{>@)r&*XESEKr33zJ9zw)!-CRyLX8`eWMMjud*oDkX-Fn2kZXS{`bE0 z4HUqSU;>Q zm(u%m-Mf4HuKDKFxU5D!R=8dvS@76Dujp*#264&*1KFy}hWrRYpxi+3f zOrw{yPD2}1Vq0qBQT+)^V^{}gN_`694P!vV6rHo7=z9eFh*dn^cAz~2u8{6X>53-; zMaZ3pURD&{^{T&V^DbGP`nI;MfHKsED+sVGe zCC}9LQ{(=|t)gcSR3oSNn1q>eahv}pE_4EeQ;0qUMHey-4|=>Sjw2Uls76ERq({(3y`k-nC z)(L|zx&b}k+j+vcZj<%krgW+0%G_$;1npaTZN}vu(#GtuVcA${YdW-v&nbd*f2u1i zi+tOkc?)fQA!#p1PvocX<(@eI8$Z5CCwtor$Pl#E^vo?3mnjh0Fvu`Rb9+J)x^!43 zzOgu61aE07-s#6emhji4Dz-&HAJC;LdYrc)G+@BSev-HN&;xY<7lUc!AaTNj>Hfe2 z8tCw7hk3b|<>c__@Eh@8Y8`)L@24(F3GC+-mSqHor3#4eb`MrwhYpRBn1@Q@72Jz4 z)z319LxD?{A2**{j`H1s>v*Zh>(aHp=+f*fB%nkC3%z{aEWQ{%X}?}X!I=Y$Fd`}N z*jS3Wfx=7Q%rQxH9}-g;*vrZNg*gk`uef%E_?tcxF8tN}?uU`@!(BsElAeYNXLntD z+2J>R5WCRs`T>6cJ`6nGtU8EGJmj^wl`s+ng-W2#1Ubw|KRm6i9X#IfFm@vqU2Q5= zB)WXMl<~ASyY=INB%HSObSJhxiQwMxR1pHJv#bOU1e;=ITbmN8O&(hu9Qg=6@&$>@ zmp?Ce=>LM&-67~j%X?eA{I3lL@Qk(}daU}*XkU?}^&AH-6Mfe{Y46Jj8hF|dY!(q4 z(H!`?-ec~zIS97}iHrVzPcdZW?J2$pK`&dbh)UkamcbZ_?MXkQ$8t=Q#OCUbSDif@ zSh_%m22cpdzjd=&bJ4RfNSb>q7a%0`s0p#wJ={7ZRqW~m5*L!T9_CjRvT0u36maoB ziOXBASH^o+dK-6wh!E39^sXf6y3FdgUOi7fkD{lM2kLg6zxVpDO=;zyH&0*TlXQXF zkaj8Eg43uYA}TL^@ct((3aHevGw?#_OkUKYF)ko&+eF7cl}V{ zww|!vju|6RmSb*E2tT*{MCPr=i9{e4(^Y~sve$P>1pSPh%lEGP;|gB=bWrhZu1{5hLz54uT=XU3q(uXTfw13{E+G<`@m}|C0@S+U=+dw@h4uIvQ@-JziN#1;inU8e zTASlqrbt&1oW?JrVNMHW;}7d4jSyU41+^PPpVUlmS3KTUFk`@ON+q!pu;AYaMf{Qp zAOSn`d0hufKk857%%|C&`x-Lgmj6fvpWaWHgF%x-q-?jzukh`)Qdn?@1vyt#m)Pa_ zMewm5QnG{a#lWb@ON=bbfVakOg9knd_{Y}=mK;ZADb3v3HP`@VEK1FhOg2`T=+jDp z!3TeuqdU({C)*mW+h}kGR?P-33qL)_iXe?FrepzkN=wewvTek0m~=eMkeXx^^l$Vi zaogH-7KAhTMTGwG2}Ek!m$86-X#@@&5y9emmRUFP@*2Giuf15X|K|ZiWJ?DqD(VPP zU*Ym)i)Fmexa0{APPc9ny9`4KObxJs348h1znf*mrJ*gDb9Z=09^%HGmp~wwJfa~* zYTB!ueGzi_UiK>D+5-^`aIsrXDfX+|c+eN<2@v5!9x!mA)R=#^;H+1tQ6{>+!k85V zFwrl6%!@N0-B|W@HLT(EDcM%$C)Ub1YUw14F7NbGDXe(qdxl36WzUn~Sb9(OmX%Bq zI8P#Nbubr3z)&PCF)*jmWLeyjyz|s}87P4D_7U_({u%(ikLlMZvnavY%z8RiLC7CyM;?%KsEQrhNlcv zxQ{pj?<)|n(&%N$QZzMEmw1!eFht0j>PO+gndIQa>h!iNmbM>-H2=LNg*88B!kHk) z!+{(zXv{7jn9>kc0hY@#goS4gWoOC6mn`2YVzBl*M#}L*~YfaQONc^|tQ9j2>OzI)7_IH`+AjE&8uW+NvexX zFF)rj2HKJ``jBvcX45Ry{Mg699niI)@eY}Qfg+gim+m)(JOu})EgY?dVhv!hKk=_a z4o93dXErX?Lh{pwcII7fy5=}k+}Hu#T#IdH0<@Xl@7pf_S=-QlbLbyZk3N7){gs; z0fFOloEY|)#Iza!S5k-BQKC#~O;YjjnX!vfKS&$k1Si*F1)UoC^Rb7N$1e6OWRh$s ze5e7B#0DNprufLxQlLU$xj|J3YQSqfJ~id4-IF?@UF?6uhK9VE7le8{MUEZ3D;Mb? z6%05v-MXOp$-wB6SrFvu; z>BprSg_e8z+yujI->FMP8P^`+I0QC4`$|4WG&` z8>X028c=Q`ROc&Rhp&oaQOCO;Iyzui-}Go|xFxteDm!0|*JBD^rT4U-)321h05Y zgY1hL;@M3aM5~dF(dbaD9Z|TnD48W`y=Qu=h_4Mh=~H$2<#C#}ZlGcxM0)*Iei@8N zQOzagJYfaBlr%;2Jiojd0ua-*GNLFlz8op1Rhb`53 zSMcDScACiKr<*%nhHfFND@bpT-&$z*Q#MO{dG}w0R3D*cySqi4N);DWj%RmVad2@; zUDT_3rrFc-cy{lqE+QK4qbA(xsOp6k^-_WtorXBH2>&b$V}@C*D0L&3Q?tFV2D4EE z(92Zzzg+BZ$PR>lfs4~|4r}0IKhb^x7du2d0%E-(!RqQ#39>V2m^kvxoz~sIvpe*p zql6sru)w+-_uy(f`fuv;;Q6FD-&%|IqXTDY(4=796$^|38SMWoOLwkMelC63=(xym z>vDbm%kyMaO3l{RL6v4K=gstjK5uJ%a%o%ZHZdx(VrnDAv{yR^vAMOexA}0Zs1)}! z2j`T*nyDnyT(H~H&5YjgSV|%bA?@B#NWwlsCO?>hP_vXK$ypkryA26p1}LERI|`7Z z)ln$X_sI`3(ToEjud3~?=8A@4OZC#4qUR zR179>((Q7eAl_?(FV{46rX|Hdy!nB8ps@1F!>2@Xs*Pd-|Reqp!E}J0Jc)& zM9cff=Ga^2l%5|0U$+Ih`k%<9%(rUtks+CQCbf<-aKS){i*tnzFYkSBAkeF(uk!|_ zroxp4a*CkUbd_a`TTKg{>wP+kFc`WWeUG(zfkM-+$ym^JQcqhbPDvMm+swt32&k6~ zR>w(E3MIJ!){>inX)1Tef)f9yHK5sSA`5;$=o420R>|u*1g7yPt8Yv|tp;aqxsH+z zFI1}m!t|Nqg-Td=j|O9CUn>?|#7YC^bgA5MCUO!u))$J&ioyqv{V&MJhq3W!!6&HE zPB4wPDz@3E&^wEs|7cs}K0AHk4$uhn$i!NfMf!^l2@a>x`E!^`p}}J=u3%?loLp8D zQ1+(_F9QeLg=hS)E<8vWKq?asw7l0-%ec2FHF)LY6*}&!5hB#?|1k!rV<2X|t$g>` z;Ar>!r}{$`_env9T}aAnM-^~M>9O}(3lV0`TsXo^JpejFqK=GjE!FxxLCc7lU?zRZ z%Im7f|G7C4ayUBRNCN{gmRz^)lg9xL$JX0;gBrp`E9MaSf)LCr$nBIb@G(GVW!B^x zG+$>|PUCm@JQKOLnSRmM$dpawW%K%!Z_RhhuScB=8VcOI>eH=m_lhw*hLei-R7XI3 zUMaZbq`c)(;_@3tQB2x6;&pU&LX@K!mpXZu)Ib0?tJZjYAXkEBSU1cplwkC^SuE~y z4>As49e1`9c)b{CX{y!4gFDqpYwUy1m;KOqvXr99=WA-G~iN9@N z(UpmpxmWJUU%reUYWcKd>175&4N6^d5rL|GRLUhOLXoOCyx@eC`xsRRk-6p6=`wX3 ziP1MxyGuL=qG-uGh(uRv9PQ%F;y6h_s}mocWG@HII5<7-KS=cT3z)6A;$9xV-_~=UpVKmXZw_lM_@hKv_)BNo})EuA7)znNy{MZfju^s9Bz z<5A!Ra&5Ah?I)E%``Qjm2hR;YGuZ4z>mfIxw>uMPc%yD6v~$Meq`*Tv3J@#C*U3=5 z)wm=q6x=BYJhlr7r+G5Y#U|!bTcvK%j6XXpKGau58~ZP~;*TNU6ixaeE?}~e)zMqZ@5 zHG)$Ka!P@v54`rr2FLz5*7o&i+nVP({gV7fNE7=ztGlI>SsxtUXc@Lu8S=M9#*teI zq{Ty(c+7t*@rEwAfg`0q^%)1rCl1FrRydIMsznj9g6`_4HABNPOe3V0i4uYPKb2G7 zW&a1K{!jW6y;jSMW7hgNe32W^0xe1dZSIStnnI8)fQ?}UJog^zxWDM3BcNk2iSF5aTYz!kjp|Bha+!m1k^%7`IOop|1euaZf5iHVLGkT08t zVLR-RjfNb$O&B%-d&F=kSwgQ`dCFp~K&+V{EyWvrK)=|rt~^N>N*F*miyx^i(FvZ#;#UEAV(XTQALp-IbmCZ#x?Q=tAd zHO=QNbaUDQFT!>xL0x#(Fvu8?oXX*v5Jrh5VB`^ruVW=Hb^?u~QD>gLTA4@}orlX@ z>&}-)N7?ZoVm1#>t2S;I-)sBTYG`ON)u6G9;n=R}GSO?9sxiu+P;A0hC<%m)rV;3B zei2jOt$|T6gVJhXJOkiAdD7|J^0Tgz5fhOVMZMN`_*sb4ys0Gv0xWThW?D@y>OVG1#?bP{~U9p#@dv>8s z@{iP1K=M*h6JM$$GC*ZEsXWR1Y3kaqwTHihtm(}Lx~AMy9g~k}E+n`FuhmWO8ceyn zxV=p?i-T^IwEuGIh;;13fB!Q38gm8}3g=5Yp(RiU;1{u~g+lci>H*qZ-Z-AsKE}Q- z0j(N^g6i;k$Cq?;SbMBv?BY-={r)R@V5Rs&NzK@|k6KdH7@T`?*% zd~~H)13da8e0M2!(sYtng}|e)T$e~e!E$5yf}8D+L@nRO9KH1M;(Bm{d3L`YRXLRS zYt+BiO4yiV<2&9v@xN^N5F0JfmiJrN+bMt6SkbkXT z!eHlGmB|ZY5g6*#mxrG|e>I61e0cBf1tD2$WxHEW)uRlCo%$YRO*UmS^N#-J;~D3L zHh&pzOE@?xB$-}c1Z74pw^}vt`E|~25->5Bd$ROCE5GqmWzk<`6SQee2ac3uy49wB zxZI!ocMb#G10MZ=h4CrNJw-ugYjJ9b$vlX9fVIYa9u!yiVqy=rwDr-3*bXF?YsC*v zd1QTuGW6AB7^ZdjZx91U^%Dm>N0agRM^bDN9xt>dwWT8`Yrkyl$s(yg5UiwTLNeN_ zQUM*B$~siLIQ8oC@QPkReHM;!XIAZ!)h(%SKG2W4G!=^#eT`mam`*Ubm?eL}^WcrA zVZxPMNxuX{AE9kttT*mbE14qb(7=B?vDmJ17qvCX_rEGM8o{_O^L`5};pNb-Dv2rJ zRcU8GGZ!Q-5^<%)x2Cj-7P>NRKA(Q6Vu6b=xZ}erYF?dHQdp!{Uv9z|^ z$4RO6bN1lqraeL5Wlg_Sh;?&@9$lpn4d|Cv*d05XEIbOzOEJLw@`4m<)2KXY(@^6= zU6j!kW^PUD(k<{)6Ri;k(#BO?*(%r@4ZA&#f8ClcX0?0FPx3k{(c2r zU#7-OCuU$?zw=a4WWVI>$B)8m&HNk-=4}pS9da*allLsQ0?MM?Y^$@^R+fu^cwHKt zn*wj6T0(v=&^EplzEr`4Lkg^o*gA~^0rB9+5~EGrhV^V0n&t8M9Zz%p+S?C&(~Bgt zLGCwPHoP$N@Yns15AVL4ZEfRs>7Fvkv!6UXte)p_LzUd4Z59ZphGj)e;J*xglD1+T zK*;4buM;cn`~4g>u2B=|1i8j(V`@F|ditj{XY%H?KJRj%ZquDc#?#KH^u|A;ahLrz zl$0qDdp7Kz&%jdKt21DLU)_m)&k3*NP>&j!$M#uww!+Ep>C;=9H4h|@<^N3ZTdezK zNHsIrpnZ+0THYQfKyS{(WPu^4q8B5q+7&>EJvY4>O#38_`4pwiSyre_!@3*1<-JB6 z`bt+aTQEbomgfnx*h{iyL9z2lC-+CPx^t|AGDMklX3J-TE(pHWarhywq^Cju{@0NA z&k-D}SZZPmq3mzOF|00eD6@E^ zz#EJ3#UvCL|F&u}r3@Ta2!A`!oeJ0&NZhzb?K#+wb+1D+ynP6=9$!r7d{p12i?rIP zb%BpyM_o2JHw~SQ1?0=vXMxk!iDNGxF+i{nRD~xWX=HqP|3SZC<01~;>yfmvx z=P6F%47WGuG5M|l z!3;l9C4JTjS4#PT!5Vb?>jH}c2CU> z6DX(X8X|5?i79ikm#A&j-r}h9!b-nZ8?#OmOjW7St-O(J* zkox|GB*jc@ot>aXc9kvYMVit06RDqA1FZ0|0n9qYy!^@3o&E$cq0ilId@O`=69qrZ5V8AP#V5NlDR=Ope}D z#C;Hy7AO^W{(oUFw%D_ye_=0JZvdp=ePYT8WH5|LD(}sd+W_`r_(b27r`O#>kDy39 z0F)vLEMvU^7SfVMT9F+09NqWuT8X~dV$}g%uAmla5HkY#yUKH&CTLAAWD_b_PGwXf zj~>JqlJ`yC0Wf-NMb4`Imj^8~&_F)V{9zCZ()X1!b?andbQF{lZPKoRS~0?-YyN&$ z6^;!srP@Y^@=|W80x&8j2_g9sqy>_;TYQiyG8?f9u8z2%t0Sy<_rVLs(gZ})sbvQ| z+!uVt+*hYrIw57FtmDMvLQ3SA8^zDWPg(a`HkA?1mc0zJqotDeTg88C4u#}IVExU2swCbVTAw|SZ|!A z7f8@8N`X{eTT>48gydIPvZ1=|+A4L8TS=P$E-Ez&xkw1?T_>#>LV_?=cU5bds{Tu2 zGgw(8@ybrQ%Gln4VcJN`EivLa4RccjITm|SX?JuUbZxoNDRr&#V`vuX290|hpSWvh zbYxZ}<1PJXPOX=fs&}xmfNl_<-vrzXr6j%qsHEoYluGbH4q{(#wJRbs;Pvh`PHd9z zq#hH@;xVLgN}t>%z@15{p7=4b?(uO#+C+_tvRTStaegl3gUON595^(Bx=ah@*aZhi zRifGP&@upgp({F5N$UN^(w2C&y6CdFkN|hrxu{jkqWtE!vdnKef;3GKxG;TGl|51y z^qH1pAV7V9Yn@){t~c;C=Jkb~4;erX;qnFxKyUYN?bDf~_fsCv8Y=&u^u;J&1kRWJ z=<#L#eI{ZJtjMb;dPt3r5(MatjE<}93TIvyAjZqE@e2ekW>p_~5l*vQj`sRaSPMt; zCd_VeXf2M+G~VtF%7xzUw@i=ea(i%n)T6;|1-_6hjJZJUq0JMsA!pvKlz=V{jh`WH z8;atWioMjwgdE%@Z}`n`j-NUD{C%s86%EK2ryAaFtnX!kXA`;^P4H%;(AV{{g_q*j z?iD$E-EsD>z&*8e=}d^t!15=*0lYz`!tmUK2jASfQbs#mseJhmRhO7;!ekO$tJ(il zXS`tGnts?5!TyZ9{6@yJ>fVnwrhT;W+roZ)D*n}v468ii`%=$}=dVYr57oWO^S;t^ z*AMG!#3nG1??qLtHA#XVD+z$8boS@q*65sf>33KuWP2&qJ^N9Gd*u4Y%FA~J4HkJ9 z#iWiJwMCz0_*w^rnIZ(i<0!eQc^|!BSB<4#oNW*ao#>I}a4N02rZdI?N@`i&Z6BPk zO(#7d?(z-;7e~BUYvc8h@ovwzOIv4ZHGsA;*`j1S>GJ5n#Rsp>H5m~GdrEEI_sj$* zM^i9q@ZM__Q9u55QPaEJ^6MU+k+S`q1K8#M;N=-IVl}8jjoYsuQRU~y3=ar&b8mmz z&$?XGe&y2CUwtD)!hj&A!C#}$3F~j%#Lb}_WlHiTFxR-`1avW30^~;epA`dnF+j!M z4iW7obCJzh6+7@Z8f1P2{zmRka8Eg8b}DRNIyP7j%3>B!K2F`TlaRhq1Hv75d2XC< zHzUykRi@jJG2lD3(~>W;H_+ehb9DwtW$>|W*8cfsq-yp<@xT^CLxTZRe3^`C`pkEv zUagMp^_an|xck2+6{(W8u7+NdrgEWDGD*<#6_8Aerz_)$c({&7Nu|b)7@q)!$pMI)RUnFh8_>;ejIA+ zbns<@QzSRWQZt2z7ScUTCnU^Ps&7p>@yst+S<1jaZKk70LR~RJ!jnEz>sYVb^6}=; zpAnRNVYIAkOygD*6gFWu+z)rQNSN(thtn`-59I&Y8_%_qjB>rYpXDrhC2~upJHJ%L zJ5PytdI_0C>;l^G1dZ@}8VNKd$O(2O=YC@}=^aY*dGMgvN!b%d44HcIw*m7Q zp6la5|EwoQqs0sq;#C6>CKPtbdiOQgMOI*TtKTx}RLxUZD=IJan2J90E1CR;SEbjFV5W`ay?F5k0%4!q-rHkqN(g%XFO z^r^K3?2hNe5-ws4=L_jEMOp2d9&)A%ryfTe>~eR{?|w5&%MQ>46{eDtMN38^kZwI( zcU3(C#gK%Im|SIRlde*s%e{w;%AFyEf!!%M!!$0@hDQNYud%%@ekk{hzbT`e9=q;T zf*nFr=X=0EcS)n?um7|-5jeW{(;VE@s3bMV!G~a&w}%R;grElxw3u?sTVNJQ?!QNQ zg)-J#Y#?^P%#K3=>NGCGu>MB35e}b4?wi8gku`7$-q9;Z31d48pLD8V^@`vw$#Tm= zu~F@i;U5$xsP~J-&g&au727T{hh2es7i%Wk4YD@R@61V+?g~7;W!knNV7)Ep&$j&( zj!`w$!0G~MLkozD86a9+pZSGOL=h7z2}aqQ`aUQyXKkrpMaJ0oqRy}ot#~6@ZYZt? ztGtaDSGhfU^T1KbRTM27jUPcfPuzrS#d@&}+kyA2jQ~lR`RXd`6(c{uz@%?2Zd*({ zouyxWYPf;>Dy)cG-U(vWi?4>w=46gykCDpiur(TPcmCaE3L!9HVn^SIbKE&;GCfG$ ziFqPfH4$O#XHhp!)Ez<4wCt(fm05(Bj)G2?cF(=fnyc<%4tVn!u8c_{LgfS*+oLW_ zQwTAP-eO_5)p@eRdrj?SjZxFBVrMHDI2(PnR1-1BdB2SQn#cAHMMY&&WCKRH&P_4@ zUd^)FgOziXph3e?KY0CvMwg0M!>rHvM10=D?BZzvsyo>@rI#m_KP6Dk&^4mzJ^fAE zO*S6OsW(zz0w5yf`3hlNe(_-46&-g{g9LW1`vs8cOC6ZL=!Zat?&g#{QPqrDOxB;H zwkRc>C(p-haikF&F8$!MD6a2Au0g7oi&$3xnAvClnb~Xe|8$wQEw0*^!tzh^3<4uJ zq;RB+3koumlJf0y>PAP&=a(ydYfU;fINr9y6y>_q4LpH37>cyC`jit&U0aF%&(c)9 z^sg=e%fOI(v~AptW~8LWiG&ZuhBk**xCs#B<5(sN>fGkUYpM(TUqd@g2s%Ovv|pu2$djcxA~R=nHszu44>rXzjF58|YBF74H;~SirlbeG z8P6}Z!h^6?roQ2wO2V`}2K5+jnDn;~6@9eJm$C_2taaQO9eq{BeZ5jg#BTSk@NmWv z1)=i`rz(I9uDD$GxHZFEg$7H%lmq%D9MCVR=XlDD`D{k}a)!cFST@;2WRAC{cI=^E zOvUzuo#`d{);fEGbdghV=^(w_bK#W(7ZW5#AFtVs?B!76SzimjMhzh_T^=T76D6f@ z9q+bIV1Vr_D)sVGg>Ow`n9nFk&{>fRpZctKnHx*b={=Mqp%W}f0!K%e@r1ZQK@fPk zjifI*O82|d^Ve~uSE%98U%}EZWd*EBGx<8u1mB4%7@f&TQ=s1XX7Gt5`!|6{{o7Bm zJaHjvziobg9BJ6z{9u(@xjeDgNUhK$7iM0Tq-KUzaltZ-1#El(evtz3OKdaX)nP0d zNW!)2lfR{(Fmp5tYu8#Vg(Wdt#-R)v&B4i0k+dj`?&1lwPK5LCzPrO_^~Bb^r~0}Q z-Ai0-?a$k!9<5+CFIZrGGKa@w?&k#r<3RlEQ=3ahTKRf`qS+H#>D)Joh0_V9xHgxe zlTt_$0G6ewQwQr)MM1#U*sj(zj7V&gflf+!6*$H+bi`9Up-~st#Z0EX1U`{NTNx;@eg1#A@>?UV>gRk8lXB;Z)CVm|c@# zc4)%B-R$nwxzO1@k9^TSLPVv24wERPQ8F;lBIc5jt}edMrHV_f%NvTa;X>Fb>lo|3 zA3qzftJ-!3IyVv!FXtx%sBR~9vnt1!3H~&KnRWQk`nm@|*O{7AQRiwXQP!vkS(2DA zOw?ywxzYJ3utN-QkPXqJ77QeZoG-c3E_KzCck7|?J-~FuvmD$UtyhB_y`9f(S_;9@ z$nHUb0_Zw#VDac1(|E=2FcrL_wB9ei9I_2>(#l&L>WoS7g6Jy))bo4y9+#Y9!}`{P zf#J)b%|pd>`HFPeLJr8b4ZI%E)9h!yeQ~>=KTWzO2FL=48p02yp7#M)fV|B|v6~@- zqZltKcddP8dG7bcHGwuiE>*r+X-kS#jE$?TJ;!(X;xeB+uyhHp^*&q!;${4D%KfXo z0=9Gah-z<=jBqyRc_r4NL)VFyhE^1)F_rTS zOcAlEBa@Epz6;K=-XU&T0Cq1-F__g4X_h1OZq90D-^>BYELfa=(^uWD0JM6GON~~l zC}|Di&#*3pLis$7ZyEvR)qq=%ODx!+JDNF=f5S{CzSwALf9K6^>4z_;iZ0ICb##$Z z58S30pgA@Lq@_`-K9Oe8~jHZg)=#tRZ$i655^?Z1XCBzND9k zsAoxD@0`Gq5;m>LzuEEgQyU4TWKKA%+ii(Q&&l&Ajvsy}0I$nI7m4{C*|c2eLZg?2 z^Mc{Kp?LIQ(?nrV!0{B6;8|x!#8y?OQ|u(t+}p4nc+|EiQA!|rY(&+b)ZoeFroVJa5Ix5Z2r>%P-WhQ@f-w2cN}*7lpD);V&M2FM*`%epf$5 zf!0&O2SH+wfGcKvoVAaTpKzYCpfOYi{}H0OW};Jh*It?~Vodb|On$D|mASPsDI*AK z*%-Vt59flk>wsZD*`fMs%2dRKMFG;}!F2Wybm?`&Y&S-0Ef~~j`ai93>S}8)=9Z@|CUm1V0hY(dq3}+IYFwB&FCpak zLP*nHY#d?5cH!}NS9>(H=rjx1Q55M?JEfAOSwDq4$d9-NDFC**C+0@UMr2)H!$ z_Sb)peDv?R{nD#dYW1WNra^Wwd4WEiF?sR(unhN-_|bPNPY*t7pGtR9VFkovfWPsl z5w?jvBW=)<1XbbDE{Xsv?i^OT{(x^l9G4cvH;iBPodNLJd-hgeGqgfYZeq|y&ty&K ze_&yI`spj>)>DErf_E9aUs$<@$dY7~$Qs#ky9qENY5V$gV?D`i%ow9YNj(q%UY9|7 zR**1%OE0xKVrN_*P8&*Ps**Ivw!_}(k0a5isw(4Oj({D{^|mj-DIzw}iA$(EK< zRQLiOrr3d+xZYGtL6YJYjn5{K`&0Vpp+&)^a?C>W&LnZLT%mfdbIyp%BZF9WBdXjI ztWiM2d6)drt#xO4l1DUhJ#Fo8pt7X1Vng{26GRVihB19%wCAxB_Ek|^gYn7}Rc{b@ z`XS%fbEoYo(PQ5iFIb_jJ?}98!02dogdo)h*yF@qj-=gLV)mBlgDD;ZiM_eGyPC-S zLR{XQGFQBe6(Jk`lR@D6@=T`reg;De zNEYF1yPyH@!EDioeK&LQSPH?iic0>a`NV0U5isR2lM825FM`E5jED`d{<>E8uArDk z#C^pLw3xbX=PkIk*CXw&LZ&Z0#E$A`zB)g(raYR>U5$wH2~1m`0Ox0uESLKgSAnPZ zz@Xy4EASu#J8M{XIG$|jh_hk4%4gx%0w${MaytL0z5DisXDuKU|du{&G ziAvy{q^Bs}>|IT+#(z@xzYu%6D4V>8a7o>XMSy`QQ3fFaC&bZCq|kz^ zkn?bZb5ruAJ<$eE^eL~nIkiq8Z0tIExf=yJU~+%rFyZLT{>K^8igY{Mydqz{-=e+1 z?qQsBqGuJgvq|%Lsu#C_0tWaRp)S+w)CAZqYBr@>K8>^uAH7B!x0~st9HbC9gMVPV zcRC5Z269RSjC91a0kv=BjX6zez4;`c*!22#WD=ucdY|sO0v4j0dtotwCbR}^*3_7p zPX)RXsb-yN+)959?8U&qu3Th9VPwQS>V4Lfc96zM|1R}rKpJ;SoGdb{x~lT6<8$hZ z6h!k+SwAWZ>Y~EMW2l%V5Gi6O)?V6+RN2|c>87{kySuv^v``9jbs8KZeWAbv=#j2C zzR~n4o9NPm8IZo96*qiXSSU&QLW6(kSMefJabH?W-sGgy)Nv;cM|=AiePrpE0qCQX zr#g7aPui=cnUoy7g*ekC93%|Toq2Qxs1l~LJoX`eGzY&A1VYyQbiCJe&3i0+_kSK~M-!CqoPyedMGb5QH7&u^c<>^ayFB_x+8t8xz#2c+}UE z>eySY3AxkI6|%Ewr-{RZNtZhMG*tPHDl&|E6MGjS1oGxJ{W89|meP_dM2;f))n(p$ z`-;T_p=JwAk}vfY;Bw7TLy0M!1den36Gn(p!}sK~BBFtgN_rf0CFY)n(&ANlRa=w~tX;ve)^kHr zszB+Q7qO7c==s0HJKVy_+PQ~!06 z1hkD#rZ}8)4u7W$P?}*!j+HnN3|OghI^SUdZs>#XuUkm zSuo9ueV=;X{hU}t?%YcSH!)C}G(m@9ISYR+-UzG2rDfEnrzs~DCTUGo^hLSg3CdS6 zQK4jzE4e!#j@Y3SRO3lvS4?f-_6m2~str96s)fK+*Cn7x{dYKHEu;0kV_TW_H)2DZ zihvw1mF7{+_h=Bohg;!8BYcYKLlH>#1xEPITBuCJviDzQ8ZXks2(exmN1%lXh~(YB zB3*;fPVa3@bdoJyBuX~DUE|D(=7T>3B_J6nF#7ifHjgA#cD;hvFKL2l(?iAQedEs%nul!3)35 z!A+79@A4fHhqhVznLE`t(uY@hV}5?elTXSgIVTQ@8-;9uxKYUF3e>o)>JBQ!!$c zW8bsQqj;w)XY%r#US{32_~m<6-!q9;66Kpi8$Hh4U6xPkWTJzcH9XjCmkHT-4TE_N zqe1iC6oP>zRg~>9+MabmP5k9diPpNNj}X*+M-dn{JRC_2icAGrwm$s-%mFYVh+(Gz zP|Tk+CZ?b+1scl9C6|3Ua?1@FlV)sUnqMm~%5j2bYFO|WQ9l^59~O$)!rmi+937rE zaXo>f(m;CAGK}LY9Hz+$i36H21%!|iX0)k7#?&#LCcMO=eV#zXy@AI7FXEEcg_kxr zQf$)lrPkN#W{Fi0q~IJWsbwwk7-2VHhS5C-TU0_yF500!**^SyW&!h=pVWVP@1}&3 zBqhC9H7-PwO4mID!gFME=L+Lbl#jAKK6@Ugt z?sHkxI(Wq2DHku}L+*9(glkasa+5N(hDW;f(%l=r1j6*79AUWH$PHtxy%Fvxx(~aV z&yfX0FnAZ=nF*T=GA&8>%lCtNs~<#jZFGkVLK~$QLGv9>|JDm)Swd!MFr6nR#!}y>lM}1wVh;=OP>sVAWNpMA zB(0UO_z^kqk3LqenZ&9a-$LbgUGxN+=4TaT64lyM@>clzmtHSS2Z?d4>hi)5LbshI z)ho*BnUBaBOiVbQIlb`R2eUbB6MD-R+50IXEll5qZz=B?-%(3F6^1tD(2oh=$3gu+ zw$3`Njizn;n*hNfP@s5mhXTbZGHhj>G(kSF#d+!8L$~3{A?)$;$JFR1945Nt zp2vfMLYv+ZXdY^6*1|>s&7$(vv$*CmW;8(n7`jF8=AEDXOAzSkhSkvAY?qg25t1}4 zPQ8TrE3`x8>_lk%zP|WOoXzTg8}DI_r>1r7*}#J?FCwDaAM zfR^-v%o_8rk6jW%5jrl&fuu>?*M**m$0FW;9P@_iXFZ!+HkP+*3(GAsoR&|EIRsW_UB79e#uHP~Kr@=B)t3vKM#`G+AO>-u{k z`9GdWXx#cjAPSV^;7V8G^)GFm7oAf_LmMkTnsoPW;7^qUb2g~*JghF)64KKUtHt-< z6LA-@!@W8>tw@_OXDD87V@KVN?2@RYl}%+of=J74<#>a2bv zBIP&gmX_Uw28cPMAp)75s@{VEs0eL5d(4O!&rY(me4%5F>UQ+Z=@e6Q-{4z{G4Fq= zjU2b27_`&|4O*Wa&}mF3MuiF1VAZm^AQ?@6l$Niu%}c4}A+HrHPMONWTt$^u4W1Hf za4!B$#T@@l#h~X+8@X=hO=ERpyl4Nh*_d`}8DV{9nbcra=^>#1m)bb&VD3;GGhQQP z+wsb3d5=MX$6KX0cRC}3YW#(9;sy!wbEKmCRc*e11W)LcF_}sw&);OsKg&@6gArH< zv&nOzf$Og2Bzhl8`Q&ee+~Aadf$OqcSPr#4X+mCK*H2xCFJ_&kGN3hg-Q6D!BY*y< z@4o!=EProHz3XIWM7FGgtEx=W^ryjqJyIBfg{qpO?$Qwmv^zX$;h z-GAGAG(x~BHZO}H*HSdL*c_ILP?p`k1;rGmuN5E$qT2puVPG|{(FDhDIC=6J?S|Kt zBJirwqvG)nZA&I{r?y0opsogyyLX@n1_EL5#Q&Jy;r-*akyl$;FDsH7O@>)UldOcc zz0=Uf5;SHU6idXl1(8X~s4%(Xj>-;FVc@ip%vt#~*c({ja5gNB2)cj%GH^yFLE2BW zaTlu@KU(YS?E=(~(akemnTT8GyMN|Rb9=!MDi(@(Gge;~g$J^f7XD=50# zuEM8&xsl802xx$g{(>Bd+14!uH09A4ffH+m;$V=_+X`=PR#HZ)iShAd&s$WlU2KH> zoT2gVfbH%TQ;$A!*R*Xgr|{hL&9kd7w3AIKY1=^qrAH-)W|tz#_D20y4i$y}ojt8m z1W=xsfpVy3TWrQ4$T$MWmJBObQvvJ~feUjDn{N(+THzSlSn@~6IN;{PDAAVWj*J2T zyuOz>1a0A{)!}saFGt|Mx|PqZ(W!k4O=y2{^=TLx4>>GDwb{YO?mST{Uh2I-tIpjr zr?z7?UyS#uXzx2T&oLIQV7E!TZRtCg(N>1HoOM zLE*d~_kp#lO#j6>Vl%jE8QB4tw+MmlEN&{IUi&=oPG(N3?Hf04CBgTH5<9{}owHT40+BoJ(FmNdH)$x@mV50fCx$}A193R=I zQfaMPpF=lQuBbPg=89ghRLo+;!rS0iqypX{0?MICrcicD4fgXPZh4hLS>Yv6LXZ&2 zD$NjH9jaR-9!0?)VKY^ptgV+8Jx_lcF;R>xw&4OrBsa_Qq&G=Yhb80epCpKPhpsZz zZlw_7QSxF+hCOwfZ%M)(Y|1kGw27asc?>%!{VzTsWR1GP<5~Ngd^F|@tMh-G-w86@ zsvTL^&}v62QP+D6raZtg3-r{5udsz%tP=4uy8w^l;PZ|y-b>7-sVa2l#ReCR1v~9@ z99t}Z!H`Vy$N#TI^;erI)zZ8U8unR#$zgPonWJ&F?w0apHSj02JoFX;W3l?^`#+#{ znkFhLG-&-~)k5IPpkU(drTNo7VHQNwLIKr$&Mj#@=U)T7mRrB0V@Bi0Etk-oIyA=- z&yo|>)*@n7xP`nmsb;MsGj0-_cVc|9+(qqi{VVqhA3DdNHsGuY@H7TJcyKf`;#cIY8pGnoa|=$?f=Uv>8}Ca|1ca&djrvyrF2QrV`EiP!E$KU`aTqA(XJhGL(?uX zw6gG5_mWF?wDF09h#zffj0Omhs&)j*JG?~`1n?U%ey|9k4Ig0)8jttrSt%+^<bFi*UQcMB=FdJ7{zf&5H zqfPGqf5W?Pf6)O#Gw?w}!L(c0x}IL;wL^JG?vIbwNFOsN>al9^)D=G#uIzyt`tzH& zeuo3DMTfE8E2V|xtZG9fWLBjMxB8brZA1}16>UsUYJzPKxWcL%+#SO5Iv>sa(nSE8 zw_IKh+Ng}vQoQt#BhO{Mb#6MBcTwaRc6E%9?m7iS!w*wmPyg+=Gj81W+ri}I_Tw)9 z&Y=pT=>ccAt4~jw76;ICs2PbBX_egp?zfHk&Mw-o`TVcfIaNCgrFLoD?H8QdK* zL{D!7=6yUe#PhELAw2T-jaERdJjGhX`p*Ha(upkFrrFq!VLA@{n$krCl6ZE+fPK6ta zI_U2|ZOcF%xv1*urL+$4^!!k_n!$+cCOHiO-UNpQQ$j!ESX|0xoy$5^dAomMf+d=y z$DW>;yq;o>0EsXFAW#5xvCe&)1;xY9UZW~=5yfExOBKVbwOfa^+wHUqYRYkaC)9lsf1FCs{iSLGa zE|b$lW{w3*2!g6Ic=_0eYDzNpdpz}zM`3#2q!0*D*c>tdgiR$1lTt{50EPn%WWL0- z|BsOFt-Qdh!Q*A&;^~K#9sX?x_u^LRFPghh&M6Uy$dm0){qnyeI$Quiy8{p4;*^0K z7PA^xetW9RSU%YZP%63_yM}0bLCY~&305*%rk2jA<=(9%>dUF>(^@)UruOYvi>wK2n30=cNvSVmuD_cCM9 zP4VjMGqor82qJtqU1i3gc}(pbVqT{0YXCUGl>paW90(+#(n*+Q&_N)gh`R3I?1)}5 z`uhqSO*!qyFK+kZeWDc5E#dVmO3YxN_SaS}P4jM!5IHXa9OzJ8`QU~h+_qeELvg7@ zbE=|H5yC+82_@VLOTz=c6?Gt`!GDyNIXaEf_V}Uk{F)o2t++1AMG+eKUXv6>8Vo`Y z)}>eI_E%yI?EHt1iH!oX)nq%WS_;wN?EWEQvuw4ErW6$x2A{a>^khi^d5@F|uEy&r zdx~Tg5mBlLDM_Exj`g4Valg#H_5)Olus)ltDg`V1%9cxV{M2?=W&~fP+`+Op!xhj; z7_!n8W^Pf+87zlBAmK=!FH~HPB$&Sd@R;(sFrU6mJPS=qx%-vNYu@<}-(Z z=+`zIOJ?`h#H%M`+-*VNhwikLtKG6cG|rXi@8d(?Tq*GCHm!4&s|Y(1Ekr=C71GvC zMT5CNK6fF93;%keClm$pef%a>zNCRY{V-(x&U{s0pHN9C*~^U|OwXMjJzXy`Sfg zzFNViJ$=1>*o3t#1O%OD*M5qtxzzm-`1;y&$^OouL2!prnm|ztNhc5_B!!16^WI;{ zk#Q_fX`cB^;rFXk2>1j+6up1##ZVT)MomZb%n}75afmya+P1BFkcJ$NZ75tIoQOMf z+0OUv12JTVfdp@WfHD^yo*Ikxy*>$uRfjTPlcy*Jut--iL^FgTX@}5T*-j?ZkGpI8i>gkUVe?r&m#^+dS=I^#NP}a{ipn@O znJUVExAOg2TmvQupq!8MOy0%PH?(D81pr)GqevO$&>kW0v#-=m^L+AyLQ{lsJgCV( z0md(nJt@ZC(w7hanDf1`T=^+N-zC9yth=u5K=y6~F02#r1S4I{qZ5Ne!Vx2vb)AV< zWqL?JRwsy1*CZPZMQ$P1%izZ379xsc;^hcPj!K9+a6LT+>CbX)j`q&1v;Hv~KA zMdr)h?^iAl+2&&2IAS=xYWt&<`Looq-DTn?;w*qM&;|Sa>{H@tJ_|v=zy&Hy8{$le>$r;{3^m?1lqkR=R~XV zIMCz9_&l^MCcrUv%rvH86{|=vFrJQT{y z1^4_#1D#|2Ha+XS&X0}!)f+wuWM3hbCuFAZg3myKX3OZwBa4flcS~{%<4g?%I7lbX zV3=CDSQrtF^^P9-GWOW9RmvepSPiAd;4&%IZtnyG6}^7(Ki`8JLhXx4XAm80?E8Y1 zC!3qjG@X5hM*@*DI#BWCG2YOrrL~KT&$%jdIW_nL5mcoXe4^4%ln&NB>ulVO_Bu3| zTQJB9m-D=%2Rf(dj7ey|1uE9>b-BiPM`cLmTZlaHAv_R6G3 z*4TZ4lOLN~^@XH=L$bZesLue^)`M~;bJ@(=UpJJOJMlF#bb~+^y#N$wOu>ji6PR2Uj~FXhF~l#vC_jv3F`JbI`=W5_uw%Drn}`h9001y(^u@9)8+14sYkK*mu=*Pt>s#RTvUq+rgO8^ zIJ-iq*9ge2Y&2%a!yCRW-Lx(~@tl4m1EMgj1oMNR(Ju9V=H_VPmo?`(a3pJvu(W~K z7ck|BB`#u(S-Hs=iCM9*3=6xO9*Jko4^#{-&&j+zZ}V$&nS6M0B2?(_fNCG}ab{uW zxp5q~!CR0ONW%_!vKSB1d?EG1jW-g$GQ`T%lxKCVVBfA_Nhfu+G|RYCACP5E?h;+I zbC)>O2-AT^mSfrJJixJhH{jWa_6mR!hL%gx?_1>e{5z?-(s$t;wXf1AJGmL@KY&FOXEA&laIAY)$p z(PGUTT8gcV5-b2=-Wci{AqFUtcxd%mVIhL2i{nXM*}F}Vs}Xw)gp*?sN(TUXB({vg zK#yz8mrj(pXAwlHyKh2QJ|G$eLYihb|(;?vEQfq;(h8=KjG z%BDMtU6e9Z=|q!oPw!wpGZ}c@USaksDZ}-l`8L12eig`wX3WOk*rqWj}sHwnq zagz3VB&|wCtBLQN%QZoQl5qoMgAaBja0|s5V0NmV#7X;r^e~STe%tpM9+x`{E4A@P zuk_>7<($-3n|!`;@@Ya~d$J#e6J_l4#3S3R3ZtM0U7bmKT4hcTe=e*h-giy&4Q*!3&!kFDE3_jh9Rb{;r3wYkrT;mpa4O-w9>%o zpDqvDB{a-%qs8<()ww`~{?!eOS5sf-?sLc8TCG~s8|4FJ_?wkddGMwDq8NoDr%(Y) zn81i^ITsia|7^&a1v|-r{%7^)zUhLC%VZz|h0t2N;pk2Wf9zR-T%FAP&O)yS;sKArRj4O zgn8{L14cF6`&x#q_Rgd(0BB_iAn507YTfENL6iTc77*_WUJI3AoL?o2)Xt%U%#uC= zS}=&=Q|bokTUD+!q5{UmKu7tp(fUkuL{Ca{Ch3Wscm|=pbwJAOM#hphp+Qcmqj;!dRJ%( zt|@A5sDK{hgs3``YJzTlZh&BdvPogn`!ugbd^Q^#cXWDvKsGMvSENSxE$+K zgLK$_gCu%H^QHHTA3p+}UdHH->Fb_&DpM~D!@-AVh+yqmOiKT(nwS7hB9AAeKg5WW zkHrWGVdiv`a_F+wjq9Wk*|DpR;-y)DiCC5|GP(_hPhZZ+C531yCsP{CXY# zsXsP=U;rKf>p(!u+w6H#HShy?Hda;;uWu)j5}{F2FbNZh=L55NzZt_pyL1Tf5xg86w=$>u;0o z34q`=#|R>s?05^OLJ${-JGgrv$#rr-a4)E6UQUs=dZlErI6LdOs`_2W%XZ#{ir*>o zS+>5a4cbYb5RDNn+7MOb1jr+0o@?2jo_2Q4y1TflEnEbgi%nx0U7p{*Bo+ngbm_5~n^dXT(6bt}?Tx}qB%PQV zttH%_L^CY`bmfwDdy8emo2P{01B)@BdgbDT*$PdTg8+og;S*e?7!4Bn4D(|W<8;xOWF~}g%3T5Yws@6GZ2wj4kN2{U z8F;56WCN3qVi{2w^IAR<^1QMzMF`p>%DUxM=u3W6WlKRyTqZtcRH|Poga2@@<7EV91f0B2!LI?EHaD*xS%>1P|mDUHkEDqci?5x8j7aGbCgA z4wiJ7uR(k0+Bv7)fxm-XgqzS*^R8}32v6w@{o0-nJAaFUF%-F5Li}dDl-o>qnG}Es z>o^%+^Xt{+nNd7bsAFM-aIW53s^sd|jQO=YhA zM7ysY#v>HJl}Hv0vDBqZH$=}H!LtBz07hC`ImiNzuR~NR*MDlAi{c(-F)}o`x-Q__ z=7|R!pIMQ(mwPG%6*2eIoHwy|T2xK=gM4yZ~=NE57SF#AMX*)!4O5OPhu1QJTm6T<8UW`T|7hi6X1dFo1+WJ1-vi(lyl50p)O z9Nzu}oy4I1;_3~@L*)SgfK}dWF@`27k2|#lcvQw#nq{X-b-Eufd>Bg;oqTa~)FL|6 zNExR9ifuGJL1u1@pA=_AmSfgiRVhEjaP-bXTTo`XrvfYaQO3FF!LW}7vThS07Rth6j;}smt$H9ypi(BF9S}RO7GI!<|K}<|SC!@Y@ygISRVEKmBngWRUus zO_DOuMZ-ci(6vU0H{c|fzR%dKehCYV)3DCv9H^fM8bbeg&rR=(t*(bGE=mgzH17U( zmsvjBfY;Or3lDUpb@QdOM(xz&0bq2+PQ(s`@Kh#0N4FF-7MVS|SG+guRoYijc}aIq zh*#C%g{y@5XNIPsqaxqx)PW_%`jxkRkONj9)(@B0o84jJ8E3SD5i7vGAZDoYr{Wy@Lmx&>DBkyihaj7jo7N0#(n|WnTeZ{R|D_t zyS~^|nimdM>a4U;j;VeyS|u9JjRf>T4!{Z9;GrvES09L$w_^tO4S<1KMi|d|dpZvo z>S|&g^IGJN0Lsr6AO)zUg{BZgL=vV1z-4|U9*BVQ&RY*3IynuKkTMkl(XeB2s?3e% z=Z@qYz_LIpfpzGEom>F38jx;&YfePHjM0AfKB-rDpmz6ajWcXW@y(5M8E4Kql^7K# zfdB+u1N5fLtTqm-a^)yWLuql{r_;5dS4xo^mDqDpN$}CSXDU#NWE6JLZKyYTwQ&NE z?c!D}%DO`nZ|Or4;t0AzaT{@$SNlpvFP+Rxo#@FM^)rYrfdSYz^GcFjU`to=+PdW> z7*2`+B?FLf^O!Q~{RuZ7P=rCBbWrdwBIU$F9fU5Z1|9FOR(dbAZnyVpZ-Hzm_04Mb z2A>a&L)BKek|mJY^W(KM|uZ)+r_`wJ-A3W7UnPriq32-mzf?r+tmpi&u~6 zN6&wLnAXx}j<{w9iDs^@TiUbh$1qG96pXT{xG_OK34Kv1#nW@s%tb;m$%{PZbs-(v zoT+#~sy7DW9wjhjXy0~r&2B&0UyVZrKt!AG$n)7?1QG$4jNSNT#Pz!O!S+BgI^eZm z2SS~`L%VwK^h-J8cyA=RVx!kxJ}{QPQzA9-CM(X%ww!Z=~the=ur-y7oKn(Pugz!`z9^6ZpB}mYx7ob(Luxms& z0;mMcn}2QETit7x-2JlhCH_R~QBY0oee3^RKU^Yuk4Ax(5DZj58TlOJ6n%8eT11>b8_fe+bI> z_yery14%&Nd^qTiI(j4MtBf{ckeiHvkN_2Br5SEU7O{m&tFIdmt)z5xx3N|R$pj;& zFjz1mi={xVl_Dec)gq0gU|c2_n_Om&d|I#qcuL;$Zu+w@{AzG{e#W)Oyx!JM&kZI= zSjth~QDO23=qaHl10f(74+_5xuWRyQAzkus1!ElolK_jm^h=;8rJN!Mva>OTB)0+G zZc~N!W&{M7hu+4NJOzdf978eWqW~GjHWWh;WBwrT{_-%<1xN*l9H*epqHhCfuY6dG zv7vbzh8YF@4$=7iIkNY%?CMjxnEylp0AdQ ziV8yr0uQdX5C{9bU9fAD1(&V^5O^C*$LZT)x=*3Ezt?&51(R?0U1Ss?7nX98GWmal zDRuS41<59_;Kf?_orVaTkzM|}^5BXWi8Ldu0N)9L7Ka9FRuUotVd#Kx>M6Tzc{o|N zE}7Pn;Ws?~=X+;q?pW4=R26QnQJfz7im9n|dKS|I(dpQjnt=b`>!uPNf|^AsXBh9z zGdA-j5c*%ibd{o{vxM6R&+YbF2Y^|S0<(QX$FlPP0l;n0ElFa&dBT<{DF$`@`o+KZk#*3MnOoVxnA@M;s@KVcg0R%=iseB69324YzyJln&t(eaf}`*O^h)=4 z3ok*M+Hm+6GmHsY@;=P35ZLvx0}|Ebf#(BO-kWjfoSccDLb;trVgLrWZRCFQCkCI} zlWRTpGAH!z`fVkd7>WgFN&Z_$ARpXFFhvHST7X;yZM;OXK;Ab5Ox;jDTkhF)+eKjJ z{v{+|cPRae1wbXG0&+|ouK)SskCM=Lf18K*Mo*`2e@rH$GUxm(^3Bj?;XWk#FC`0J!*Y>kL?po8T=bz(9dw%;g3co(52Q2KyTV&&Bq0?3%9W z5pU?}4dKQGAh*BAGx`=uH;j%R-Ecmm2tZ;Vp)2K50%!pkkbf^30L(D&CC(cx1AtHacyKZ3?H`qlI?6#G z0+ber1fVwj=ZKi7IiflAT{4t<<4Fc$sKdCz7gnIuv=ksfU~y;sdjf&idAVhmn%mp6 zeN7c2=-=*$5P)|RF@(dN8F0I)`E-D%`szsl;D9FRN&|nIem%MWw*T)Jze~M24NY4L z{DD4qm8C$?06*&AlLw$Mw#`kImg?7>d}{aLl>I1^7nB6t1SC%TwniN5FHo&ZNW2iegCh5 z=Nu2e5$&MQ47wm)X!t)B_+JIt{vMj=e-8Z+|9%%nm!{6Yt<66lpaJ-tzi%2nE&E%e z|2e6D-vt4XJHYcv1&4^6tmr8y@jsu1f&R~(&BRab{=`* zwsvxyQ>1pvj=`?|i(jKp<^u|qn=}+Rt%7TmDz<}V0UOIZ>!k*U;EM6L87xtwcj88$N~(P=lWgfU2|eXE{@$Z0YstFXJreb^W=Ib$2-UUi zbDpcnTGh*5KR;Gaj6gV8569iPRDH-~_3&kthjQ2b7N=!nvd5Y}ScF9r6$Zv$I797m z-;=+#)?m;4z+FaOAqL8_T=$<@lpL~OoS~YHLXsx?b z@KAaME><#f$tTBd+^=-Sk_Ob)6N4ub4aA1F#{Vo_C@=;Ysa&&X&&8IJdld0`A0<9~ z)sW?L2!%Lum#bzMM~3l8s*~4nvxjSpq{rxi9sxq@MzrQP&rLE?`a3JMlJaK#YRyTQhy9@=c%%Z zU*Qo8-X36FMyDt;{Pci9CWE_)CYQ*lQjKE;I zAzzw7&R`cpX)&|4KT_OQS-YYk*g7#Ar%^ex*#4EP9G9{}LbXOq2EHl|6x?g6TEcN{ zT;-b3XDfr4DkZ^3IS1DjV)nfdJY!BZL*L@<{Amv!<#W_o_JbKx*LvJo?omJtLrCUO&m=>= z8T48X=PSN5F%GL<(cN)MwdkCWpJ~4jV5ZYy%>iA0O;&_ZV9HNVhmap|Q_K_8DPv^g zMlac+@> zgE^+jS@yz-KIX#a!D$%i5%h&|9`)!}4Tiblv4ij)a0N(5>BZj16~ve&^gK)vYA4eu z#upv;rQxThvK8TvPFL1zGt4o4{fess-khNy&C1EhO3FTx(ih@gw5zgu;OqKZWQAPa zBxCx0*Fs~I&f(*<=rj*^ZLSNZ!PpC^r3umq&ycqp)d`Q$A;2M4Wxo4t2GKMR@LF#} zPt!+=M;IruB=wpx!*W>56AZW8%6SWU!mkshK1{zCD?_;7tP@bOWjANX1&)jVN?iv}kCnIUx(4{q~ zT&RAIL|Ak{94EtJBb&DhMQSB+AzefS74WD3`d?KhyI z(oa$4UCFZMRWM0zd>s;3M(Z-4#r(p>)_Yo{jc=Y7#or<_P88zOcz&$Uo~TO*j#sB1 zapQ(+8X2mafo)UN;foYNpI2~ik1W6-v?DPxSE)InJG%d22s>pNFQsj02)Fn7g&21& zoBK2+0-!2a;I%Zou4ojY&3?)#wjmtRMPhaZXT);2pWLEa{%~vz8%Y3A! z_3rN%KWMONFx9S!Tm)^hnC0hDcfC=I{vu~k7vvJ8_|9y^sa&3%AIAydIUsGUm&Ms5 zTpKvUbx$2i6hxS{eps3eS5qk+t)q^lp>u`HY7a2ZyCORXNrGi00-eNt-dlRLICzrO zeVxmXPb~CPvbM=CR<{;1_j^Xq)l^^`I7|_Q(;ZD)7|F3bRc0t_R4gAH8Iv2+Zy$nV z$<;+#J7h31{b=?SKO2O;R*%AJp9&w*B^ICWjyVv-pFvrp?cRjCWDBv2nA&-(>`^6;^*bINK=A z6#ke|{&}FCa#S*R7?{eUep4y^vUobQwJ|76(`>kUQhL=mee~!XCA@I0wZASGNOc(m>S0rR%KR3a^=HBF6wHy z%(9$jt@j7HX-)d1SB0w@AK4$fLMgkinUUg8tO1OVW0cl=qK&oyKP6NUHQh=$#AMKl zle;YM>yy}tlWW?hjNfd9?7xp_BH8Mbq3Q^OK z=0t=wTozs@QixSI$(AGKNuEQORjqDW261kkbhsJ{M#)9w7k8RpinPdhfXmF$&- zB8yAXlZX~o@Msc$J~fftj}~|J%+#8o#35{L2M#nHa{XG6mc5p7`0juR5sGpiZV*Yv zN(VN?>6^r>8IG}xI7%Q$(S%DCS@m0{z9ds|m{(Y~z4?^^=LDv5U)43cn>M@;(tYp4 z(GL&X@0@&6RHjs1FioD*NSaAwr}nb7DPm{@zY^0hX5M`{)`k37OZRmA5mp=Qv$D(H~DK8;XVsgTcEZW%#SLPm16Uj68 zx>EKe%WA(5Hq87L_6z1&tE@vC(2b{^8})f#71dn}$N_SqT3B8LlPMeKc2HO-3Z5%l z=0IAXh0h0OdFtKrtPvWFim_2Wj)(6?Dx{Itt_wayPP{T>*|KJE?3ZIFZ4?)fSXf$O zv58KE0GJq*E5%e%kh@X)9ftBmS3)MnPD7#wJTqtd&WvVhjL$)L7^mLigodc&KtLN* zXd7FCXw~oZ+ei6#qM738=qYy3Bgc99c~oDeCT6j+V(97B4Rb_>6@1H3k*hNa?z?Q~ z4k;JQr}IwZ#$Uirc0mL8K+{%QN#UvX3vRkq zGjp{L8URH}3*t>NC5aIIlo8G({XJP*t+~uM9P`82&B_~2oz0zwk{ya(ZM^J9_@t4@ zIu6p@eBEKyoBLp0PJS>ULWdm-gZOI^rf5@ZkzV|+quNebsb41vH~V+dpl zTJ-YUeMoW5-x(?Ip76~^&}@BMo4%8ZtDZ98rbq1A^I;@6LED`FlUS{?QP4U&SBkbK zN95~N64XkfHXA8ZFC|TAC=^`rmI8K%ArTXaS3bzzv-R%kYo7S~35m%a-Q_F0xQoy8 zVSTG8SSkS`o}pYZWVpihgDiu`{F4kBFF6`V<>)!q{TfMZSK-u%eQd>@s1%l~pO3g$ z4oY^n(ZeUm*4-PK89toM7ra-85-ZI~VYwB~IKsMM zU_u=Xd{B;f=$!=1Z?znoB`of8tSJt;OU{bAr{}3GE>A_IK;tjoZiQvf;onoCBq4^9 z>XU0I{3b@=b8f zChtPQ%hl`GNAnxoAKi^GK*15nJ=S=oa;*!-X zAG#^8mgRt{Hn_q~rZ@ZG&d9Cr-(Cc)Cq941QOAEZg zn}ud??q>$NSE<)NtjrdSRN^kZiHuD2z z+M8GYHTy<6?*@0wET7I*TfDgj9zxw9&{|ZU{P8=5q=t3vgl1DMM!l7MIZYW|X-tJ8 z>38q`;GPUCvvEYtJua&$OC~Mrr!=YObEkYe&=r`s^P=-xJwF465Q=V{W>LdmmyWQ$ z*=B#;H#{O3#?iuvx66leHDC)Jw0nw+2QsHBiXGqcDCAw)G;rc`Y4!SuYuiC3^L-<1 zKFlPJspG_^OREPVIA)c8tgBb&_>6iu&eT*fGR#usOm0g1-RBy>VW^zjwP+@>B^VjW z`Lk&Nn!#Nd-co@#d(rK4ukx9TVQKCNy{VU5Jz!17<|xU{+Cm)d0s5eL~rHtoU-~RHU(V zTY|&fdwni4js=WZ$s2yA@fUZY<5`@J15Es>l_BuCiqZEXBkTkCKRF)@pwr_+-9)9$ zVzOgr9{q}Blh7pCUOgP@GGP$deLMrkJI#7aeL4UrnaKTps3{T&&=dH2S<8mih z{_1|V>7x;Af4{)}Lk$CjTM+iqPApV+0E~Q=&LKnIy`AD)F?1qwS@1C5VLdatDmMx* zcrj5xJmR>L-Y9XzRJvNays^kH@SshChrWKS_4Tgcw;hEYCi_GtE+#Mo1e4ZOW7ARmI=^BpbB|8syzVn<8N%6(qK zCHP7s9ya(vo8s`d{OGbZ|M%VnXn{LW?TuGfjxq^=u=QZLuQk5T&55e%oV>}=5hp39 zPs}+PBQ+&DCFfQuMm!(yO2<2=D($K+fvB2huf6B$b12jte9{SL_#KnNk{1OoFwOTW zpKZs}7R$tPzJh{vNpYq2XeS%TYQo?9U$5QeC$5eg-a!5C+1!QT^s3fJa-#x)WQ@iO z?wc_MCz30M1R`%%7iEXquYSP?Alrf zAl*2*ym-=eTAP5I#N#p%@++2QT)SQN`Ec6~_{{ZnfrYp&8BPqXO7yA1gE26w+bd80 z2^JSi3aT3gdM~FG_W(TmL1T`<{@(rJyU}LC*+z;^5}lnvK#w7grko~~I^xK5$ zDMeYiv0b7v|fnpfm9@Q@#+&wrS|Qz*xy zUWHM>Jc#BhXQMxFBuv$+Eo3Pjh~=)ak_;CKWPu7zoiL}?f$u<9D<<=($P2ZVHWFbW zz8*YJ%SZgzifd0FTrNqK9lvFb=?BS@YgZZzLrjo9ABwzRh&k8*W%}AI(GES~#y-N| zy{>-ia2MM&(mP3sEG|Z?Lo-`+${H_MPO2w6pHPIU@4o#cI-lHFuTe^l10evbZDZZ} zxMbWdC|gn2N^>4MK1K;0&1bh{C=tIG@$BUrr#K^zN%J?Svj%}`foq&p6c11^K0hi* zEB{L;nG1N5C0VsDdgv#!c#6j4_e3jy4LzVuS58%Cu`}DD<&koG^@xHp(Q&Pe){SfZ zn>YBW{x9l0n{RGaGh17{DT++VUfteus7|Xpz)#>$s}0(cP7(4!+Vh^`+7$YgEv=%W z?&Rs)JHl&0L5()AQq@d%9C6AbDk$|WJUqVqLR1>|1LerEI6bY^^0z--vkUz#hGVdq z@LEVQeO_U9QOrJQ{pl2(08PY&QXs7n#Cc`9yoLMSvizuFoQPTNmB7{dWKxnKNYTyW z=Y@_+-6tvzx$tU5rzZ%5847(J@!zI^p;&1gkd_=T1g0p>hp)VE%Xhy>y{qQn%*be< zBFC)f#V5f?Jl2D68JHu7kAN|Z)eVH!)&jtHAEJ-lExh>r05`C1i0xp#sswsq`-h~r z=bV6^?l%NjNrqFy#^kmcOud*Fv+oB=K-87wN&v32x6~%#N(w{L-exF3MXYxyvORM zO^+Gn#N zReb;@j~S_&$5kK>$c>DE!A7{joCp(Vu;b)3@9?674yDK03ap&aIPjK~c2hurOF+7n zg=>uA5%shHj|*w5JgzH`=58N3x`hn2V%&3U zMa0~qq&F;H@Ou##6Mr^6iY3F4u?>}Bd22{7UK1^4GxbgS$k03C>e-0?@A5Lycufcw zc~!c3G*7XxJzm?+Xk;;%9RSM*QJ+3O4p;Htv#X*G>5y2PDBWlYBr21?@~J0dv3Wcl z%wUTHA`N2dZt9W1d?`fN^^iiMyY+i%eo-}-o^%GpxPn+q6B-|MUozj{AOq4mgRdR# zQjdY4856>&$*%?&`-c=ma@$ZC3w;|EutVBa0QBvP1n>cUYtNC}jVsyp&l=vR$k&ir%2YpxxL-P$7Cry+9wi z>OH${{K&9M+Xn~SPqRhIpa^R2(WKx34qM1mj*J5Fi%kAlwI%PLl0C_xn|x^0y;?=6{Z~;`pvd#2E6cBv|EGYR(!b!krMIWYGY!ZU#-E z(TnD-|BtEnj)v>|!p83uV=!d&E@QM&gCI&G)ASO9(TUy(A|j*=MlaE$M=v8p7m^5~ z1c~TTLXe0Ssic?R{e0iwyVm>9taa|Xf1GpoK6}pI=h@FQMDbL+RTz5iQkcgEmrOpz z#bM|oLnintUz(lkE&Y3*Lj8G-VN`V$n?iR}_UXo$s(osZ`l+?{VCTo%y+-UW++Rm^ zcr%N;%_yPTb#O`gSRPmMC5Hw}Ub#w7D>L=^2(IsDZ>_i%m3Wk5lq**j?i04-PqpWv z9DyD&xQ)gZx7jnIlwlsiP})4V+*<*voXv#SKtmBRHtBm&1ckVn8qy`AiLq#Bj$f|6 zQ=>H}-bYlhQWtZ!aVUIQML@N+(i@Ui2}H2N6A2ffu$VmI;&dZk2vzu6Pb&_rOJ9M!CG#Wr+}iPLd8vSyo#H8wTS8S z88y7mTFP4x9twO*!At@C8FI4WYK%P1YLAxU_Iv*Ftz{fVUtME_h5@Tg*TjAvGA5>i z$lXhI_gI@sJ84WitAx1h!2UvZ+BGZWqDsBz_tykqFIs;=ILxD9w?4Bp5kB2_%^uv*hl?U%f*Kfu*do~rw9+%-}(C2 zi>RuhBuB+_UogRm4STFJLzl9-a>45g?Cy` z1iq}stGMpe2vm5&tvB>$=;$~Wp4^zX66kPWPm8Lx1(sYBvZ!?${ClyC$JY19fFdE} zwP#=@!Z&Ywnjc7!_@!B(n8L@dZ7&Jnd{p-6n3~Bh}a|wb)gX6A*od-v*NOo z^Xs7^W){K%83HraK|;IJht<(c7x4l%FahN7T@T-#Mwh0pK?)r*B!I^6&_cQ4jSxxn zdZqp|N$^fS+3FXNX~!L_yxssU%%yu#s9!^1AHU615-WBvO_&N_p(q}9cF8wbL!ONF z&94XKa=)~c<-gxQUYd=iNH6r7GEcuwJ!t!c(N6_s1jx*rq458LYF?K%f>22i&s|^>G!tk+4{j5U{ z#F?3^g)>2O;t|>Al}iJx0-k6ztpW|5u&CiLV-3m+Zs2p362nMTvV9I|Bj9d6&GyvTKML17zF2}$tRfVS8VkkLsNOQE5G&1BEu2hvy zmHFWsjVemr8D_mf>!2A!+5-1D;L4zZP#@yy`o;R7%1sL_52 zJlbZ742&8R6eZxB$JiTjF?JvCyT4J*>31cIY{{s$YCy)O0xi#zQ|M=BR#@fI!%gDl zpowbysj(#8G6C1_Rd>e$smc0q)q?e>TP8jRZAK?YZcWx=#YaVkf2Ekc71?#_mp-n{ z8d-q?g#CbPJOF$F>_^~Xn~c9!U7vAQJ?x>>6_eKWzyk@-OTWjao*d4oSo~Xf(Q!^mbeF^?cqQU8&0^1)gC_#XCOsS^HLDsd~%z7o@j6 zfs52uR)|@XoJNy;Wo?xansikSM6jdDBb!=$5eZ`83 zgIicy*X`zKHqs?aJ8H~`RmdXmZvv~dA{}DBbBG>8`1;3Z;x-GK_b0`f+aA9&`|~$U`G)_VND^=3ByAs|3jFQj=Em?y zK+4Y{`qlcuO(oV%*YA+9?M_|4e~or}Prk=dRYo21>)^$2O47BxwI--q)#x45 zR&{KVLr{c#e&j=!CW#C=s(8bjarta~ui;JW47zk$!mbT7h3AstpU?8nR2(ZEJ3DSN z?>0CW&{(wB-4zp5<69G1&zD9|qh+or8xj2hnl;ef2!07p=Rv;CR~8HEU7YNuz#R zyZC9y9N^MjUG+4+L@n%Bj)|ej{+SZT!P<5&)wspKZ@9QdqmF%0ho8}zK-fNQQ?R|m zz=TDhv2e36vMGBdZcVJEe&HUJx3`MnGi#=uo!$yHcE#|}(P;`Ic49OL%(8X4*6|tD zN=Q(kA5FuYcsy>x4Ua)@HzwVz1(97sNFrKOB#csN+)G`aTHAiG- z6^AkWqJlG=7|o$Re z5#4^g1rRa{c29W5OPxy;6=u685%w_gqKS>&=kUeW)~Uv0|SVM+pWakBUDN$;nyjL)y4oQQ1!803BFZh%N?|e{znXa*Q zMbJuk?yGR2Y->l+Wn`cso<>-!mrArF4cX4T2m0gvctoy(pgon|YDJ;tDZ`2HWjA8E z&ngf-&N#_>B+D?~q5FMvMI9y~@Pm$P=1v;pRgHENOZaO|qF>jpYcPIGk!aE~|Hbj^ z-D+9h0Wvzf+H2=D-ht#_q&5@rcWl(* zvz4`R^@~Z}$uia`l~xumvN)NZg1&1gu<^%`F|Fv?2y^U`a-I{fX_E!XQ>uHrh%w4Y zJ4oByc;LDhmLRn%y}UZEh{^O92tk%%Vp4)M8Q%5fj*scWliHuiYD1qeUNdpkuO^YY0!ax`Ye*aP? zh^yD_=An9f+`8<~;dC~$>|TT>IQIGf#}*m)A|j<>ons_(gfa--Kx1_C`zfX+RSocD z=}qM!sQX~#=IbpCrlmDDQt$D<9E%V(m*1?mmT0iQqq}0}{L{}(hAB1%e%9Y&LnQih zwl4|zNYb-t=ome&5~OA?~DQvcYZ_N?K zkUBsabM^}|11o}wfW&4RsghGPHgs!=FTNsjq`~)FHDo;{6EY4q2=L@-2(NT33cbnA zIXGtu3MLdc1vvz=hm9K@oI71y_{H_<5-;PY;7`on6{KwX7MLMU- zF`KvZx49y4(2pLhOe|M;h96h%bvdLPtD%1{eJ&rOuUw$Wmb)Cg+$^m!0aEa2F~o*bJ>4X?@AusPWPcL^4V)s4gdS zz0%?3;(e@ifrU$-gbCAc3{tX^gCrsTVOPtxQ}N974ByDXTMr6l_AdFrflvI zebv$U?#bm%r6%zg{~MPuD|meLW-o@={C8mO@6bvSqHU%*+(}7|r?2mE>R~0w_Fih8 z!O=TiXLd9cE8%`g9dh?9i_EDOxjTKjXY$0PgehtaN3si26V0QTmmqc!k? zrYw5Y8K!|m2%SHaQjw0yQaa8&)A6(M)YwM(;|*i=SJwvxGQBM<9CQ(!F=j}hBmZJq zx(Yxbg-m)CPHOphh@~-91J_HQ{EXBE%2_=pKpR!3K8+75@>f;pyy3o_t)$9d>nD_o zGC8;%c}%jZokAug!3r+6GN2f5I+Fp_s7u?Ox5xde>!95xkBME=p`@P=b7}A;hH!=k z4~tRFfyVRG&vd<;A%~JJl?hOXe-ha9J*kMBM`2nuYK5d!c#}qQ7B%%)#5t0lbsD~q zQY`G)3>k(x;Z);|Q)Uj-wjh?vNXg!!E`!o$c(P$Z_F?@@Eycs>1{`NBhehyXP>>gFC?YRaFkH|=%^k27eR^sA(g_| zKg1^^V>`WGH2*NRS>h(6KON9j4D~8#cb>%nfeGs+F8!8oTQej zHelhrLAi`(?cQ~(?9vGFm9wACdCX4aPCv(KhVH; z9K16<_jjN{QaDvz%~yphSP8+)a>EX)+41qnL+hC)FT3Dtl!NBnk0ijrLaSrd=xt`{ zSZZ-53DH}r>}Q*9rPcBaSO*@1okP{nJadOd9a0-*R&GcBH_9AlX&Uz08T%?zHn7l= zXgUI$;BCah?`-%bvvH3YaB;B5yCYfxrPQW<83*;XZqtVvXLhF67WD|6g>Q+VSQ z>pEi-76_nzvx!gGv6A4z;-)|~>}v%zkR_Ouh$DoAk&<$k+H zoz|p>*CXq+DN3yB=EtIgapD^zr!Fm_0jn3J0P!1kn<&WDuH&ew&*CuLAf!uNAVxY7 z1qyD0iwHOJ4#?3_Pwe~Mpg!6;+E$aS>R4PdbLZ|qUp4=mH))bF_R6<4+<3DUnu$aP zwEPoXfs3DWAf!Wok-c%*43=jH)rd)=z-@&oPH9ljeD_yhREG3vX|RU^$e}^)+x#D3 zzmia@;$)F?7WmYp>gB_Fn|dxMvSVmnBc}`Ifpk3sjw4G0 zv+H}8*hO&S{5I2=e%+VfrgL|(?EQL|E~s+&(hF4d_pC^?l7~j~kG*eSOKh{(0DOnR z)y(O8w~Un*q|xWYEoI}eBbUC5($^tyIKbK2tUr5F*+=9N z&b{IyJ}+E{aey0>5fq4Hq^(TUHJ!{j-f!`ysZ8!5p+3@>#gmIkz#iaf<2*C6NgsvZ^ciEB{=bRnC z8L<05yy;=`$}c*|@Mxj)(v7+Dg;e*1&vj02R@IuzfdWJNZK~?h5X!!jzhjac6 z=cVbYR1YXOldOPJQl72HYak8J&i#rr3W26(Wmjr9jY!EFKfwsC`pQ3(UB@7mrq3_B zX~VvpwS0s2OvAtjHPTQgo$is7%ZZ7J`n%wXkL(~MaNbUrM^5CkxIlS3iP?W@lciK4 zCT*Z;_l;=1P}Q9Zjp88|XJ_sw`qz#zVO=y>9d*DK3$d;_Jy?Y zZAN1m&l;j1S9kP{Mk{h7CIVnKU}>v|fra$D%OM!pfoa~XT!xU8p2ZSf#j;7m%!(>n z8r%z~!u!fyG`7_g&k~ZpK74*Tj3_%jmdq7!eCJ=Lz*AaIWJ!=)xjjwH5%FyYTV zI4S(GNspyF_o~yhsJ6ARkb|L)Z!jN|gu0wuVkRZT(4%BW2s$zb2lMxYG%)MdvQ7to z&sGo+*5NsEC!Zhy$OLGMaEjV3`<=3;&ZDh!Y?V>RNAs0ZKC7~=ws&^*{k}r5{@|e_ zSZ~@~G7JF)$ARi?<8(b=oiou9QIgphQ!?3dl5m7}Z>_;dr)g_QE9I|W-{`4a;rG0e zV{XCYXF<<)qFySNP;^zI>=CmSu;Md2g~qcKCIt$oW35rFV{#-&J9`c&7fdbg_WWJn zv_p={XZVH$|1afyDTbQ6EGE_{zA9)9_*g6*ok=w9J!#Ig6mC%i^DOlZB{>D^f2W(KcK!K!TOPND+r()^eUdjyZoAJ zi5`Z{?2q#|KOR97M?z3zof}IrLi#1I0UtdE7NEt_hqMuf1$ao9r1a?U5J;+vpi_`B z^;Lx2+V6(F>8y%W9>pWsyGPdi@s&UW*gG2!(8y4gX8LX3zr4{p9i;#QucKo#3PiVueqIA&pqqLKCk*##9QS9UL&R*ho&JOfa^GHeA4+;tHD`Y%qjFm3zN+0_&2oRDa(SAkJe!oE_1eNMQKW?MZZ+<E08h z)5$GN!m53@h%!eW0*3$|fh}l;~0k97I|Sr7Kv z3e&J0q+W^}z)2RFGootKuy4HJ`cH-^1U}+%+_|kXp4A-OZGv zS{uxE%viF=o@Kc{H(4IkBk&S4P;Or2Kd1SoUz!%GZym9sn9u!s?tb9?!ZeX6Ai))Q z0Jf>#G5gkZY4xOf;%wlzbnbZ{1;>TjUn9Nm1&bd0b^RJi-t#$KWq&1a7y@cX5&?k6 zM`|dBCGVa@vb2!!(0V^Bq6$~m%m|-7476@CwQ|;*pl4=tQJwuDZ?HJu*}UB0N%rXW zlwd5rx6yXKI!IvqxE;R)-6Dm#lPNY8p>HB+oi=>I{E%;cia<&kVGoPHf9JXaLL(>% z{+*N_QtGIzsqS_>jBUh9BFq(I98vI7x6~0ZwxFTZx`DpV!}&MZQ)M;k2Y+1&4!1WK zW=`cyyo}6W==c@KiP#{9a8S8dym6GiRL~_J9#%-%hxckDAbSHpa-d*V%D{HnWsI7i~2)_MVcvge0Ce{#J*{OR(Vz{j8FRo~2h4QS27WQLtCWqfG4 zJUOXFWm47rKc5|Bv|EV0_4X_B5B~GekzBswe(*xP`X~FM6^TRG825|D$f%GeY6dI} z{0{(<^gn)dWflrXu9q32(>sxIkjhr0XeqyF>nel%hha2`J6W6nC=m>O=k$w?m0Q>N z+5A8zL;d8aXNH%fVMf$*^I5bLT-yl+Xvf08CYUg0!ybZPh|%y2u9@@Zx zthK+$t@xr};Jp5Xpoi&$2_X<&ujUBLcU@HOX)qoOu9rnvzD5TRnSy4JO)V zt7mWL?w`z8+?F1tHvhc5m;JT&>+N&nM{;G}AyqbBV7f;IOKE6%BD0`QlC<GOR_|RpEpjHfTja8$w7m#d`*-^@O$<2gEt|7R} zZ<(uPKJ-FWhDdho8Afy&^Fi zy{~pF`WNuJ`bc(?xdmQuIud6RHu<0bSQKU?u&^d9htlmxr_p3lc5Exwa+Cv!9ZJQ; zz+{kVXyn83J!{CY(9V@B7ufkfig8yp)mnABE>SGRk?V67r4*D}8x$2QQqqIF^g#z! z2_cGq7yfJdcPG2n*UuHsd_$-Ab51J4_uJEsxMQzVo5ej#J~d4Spa1??FmLj|lMx9_ z@X}5uvG#z6Y$uzGL8@Cr5kc{P#8^p;+nY;aOV2u=n&B~FKzTTfPdy}9C4S~k+E{ZqeX6bTu^VC(w zNNFojs7#Cj5Mtf?NW|1&nj`vl2;}N ztgl%ypNg^UwHx@L%`2p}{_RfkgHs~)kO)S&%6iFIJ@D|qse7Mk-eUX{JQ!X3{rAh5 z^4z&kfjyI9P7~CBqW|Yv5T*Y1W?@?=rN&YxeXr@RosvgY25p1VRNTuK|zA9AvM8*G!F{#0_h3U zll%HT)0yb-Y=3I}Xs>z5v_=qP_7W!&Qz^(oP)ezE;9P$!u&!9XY@eB$=pW$NTV0cq zfIvt|zNu8!*Lm!Q6lZ*0ds9+MIu?ER;^ejS)MLW^T6MiIJS~9x;LJ}4FN?bJc<-s& z)?d5gW)1qx=X-vaX_SJB38xBOyoq6B4H1xr&_f`{4mrnoirdvp}}d zOFHlplIMkB?h=?AY#sl!nV}#4Vd15>)t`wm1z?~o#cRSZeS0M7{Zi3NAmfHs zArofN>XWJJ3x`nf9@O?fst_awNp#au358^so#taATF1;(VU;!VvB^V8&|JPb8fSBdj7Hhv!c|=zhFx1AnelkbHp;ao)@yly zKjkds==02!TVfCDcydhFhXkRSq;zb$NbJeC4hyC6qFg>{j-J8-yg{oihq|B2zYE#2Y+f1W?*0$xOY`E|~~IvR{P%7W_;##I`fz$P_-R%6_S z1#0~sd!vz~w7_C`t2ArIoahiU#o*5)9zH+jiqE{IlDJ9%tLJhFnVg4KdY25D4OhaO zxYR`7rI&c&DAf{o9Y7T zY=NT1BstN;0D}t<3nW4&r}3>MkJnu3$q1wck=rC3yS!(-;urPO%pm+%wu|ur$rp-W zv7Yr4mbzMqS(Tp89if7(3S{9`T%s#{T1Dv%y;>6HFo7p9tcghNtMyp%ioPwkkc-oi z-!pUALSgA=n61(sI4ZJWlbU%XHo-W~rVEu?AX^7V8|d6G*PdR~H*|1h_}bmKk+vFkS-rjo?WJz{G9_5xL9+*h%C;3{nA`m1#J~ zN=njpkA-K^gxx~8W1rSBI6gYErbz3}CQpfocLa6MP<-%_T=e*K3rAvzc1x4T)jp#z4xa=U#J+}KWud@(G(O(=0K-G z09X@PVSJ$YxmU>Uo7jQz^VGjzRt8-!r1(v&U~f0ZT>3EGe0ciX?c02aXsgp^U7!7j z6}FxJ$9}_s^b8zCvOF#rvM_U_dyoYPxfxw65<#PmOsCkno^@X#e!px%>_|5!AjLnC zYHrTO)Ha#t1jiG|o*l-9rt!p6YU`7NWzC`J&qfvQb0)kptg&>sZNTKUt7@3+lX4?= z)t!9AegPANgD?jv$(;-*B9TBn=)_JhB42smiM|=pP_%rkL%(Y@#c@J+TyXkTosK)Q+B~dHV{77} z>LUrF38Dud>LlpPg23i4EQ#5Nz9YF%@Ykx-LVnK6!jF@RbR_hji?T@ zWpk7I?A+{|xFai>WIYucQndwY9f`(4u(> zF(p=?;HxpIvz|3HiR0McxQcrJ8H+BC2Tv!CB~weqfgv*oEgTmSGJqntNHe(EN^W(W z-}3xZ_)OxD!&OI$$bngCfYu4WN8@8ZPZk;c?0nNvskvOdS%`SyAnWUT$0;71G(aTH zX~2`^xP~N&r|B3y;$Xc9gh)bj3-W!=&{9~3D7q3avSN-CYYb-&thJuRX4eY)bv8q$ z)aDsoj$GD~cB+Coq4BuY+8Jn4Axy-1$o#;60|CZT;a z?{*FOyNG*o|7|r|oB%7}kK}_1%aYxEM@Q>tx*XrYZDwJY@kjwh+C$hfJ&yb>(#JtWKighN8)>r3J;06_v(pu3*__PtNU;-Av9l|M&*$(0X5Mu=^( zSGQn$ubQshe^ipMxoGmq6g2;qfV?gJzlnN^=$B`fTlzAoBva=2aB4B)%GshrLy}k> zJ|0OpCx-q}PO;n`kPSanfWVEri@=Ju11!mW*6flag0oPCJ|yt(#4FZcYyFReg$RGY z9pet8z@sN_U7XwELSy(w|_h=8fu zA|g9sW|KLQB)j$6Z|8#xe|{|^ zwc1y6&pwnPwA|W!@wqGgLx9AarwfWVqRz$oo)|tk7SN>M78dj06ai!sGNfbq9tLAw zlG#roz?U#Q=pm{t%}ra$X0XFyh#W^}Sg*7L8AQ7v?fH4b6+mk>IH#kDmeNZU(P|J% zN(#jcLQfN;5kJ1p>6lI!47=vO@}63a(9!4~+u6uhhX4#DdOQI?pbbH2#=!0ej;H%UyrdVNYo zkC$dqMsrGXiXX$zUD62B8XBQo-={3cg0y~b2DB|-W;R1xCXd9p-?}H2p#Qzod2IPx#l?fT zuYWl0O)&rQlq@9Gv%x9{lh*XN;C0l+m~K;=%t;(*h? z;Ya8X``jp1AZ=>-`4Y0}Pf1f_I#!j5klUH;AhBqB_edt8qTm=Rdr+ z^W!nw-9#%8u(q6%aBIe3{M`v8ZNx_HL9VW)_hka02GYweDhT(Ne!YNX)wN>27d=mHi!z0-xE{;3-4JbzYu4Z8!C$WAObVI!a#N(v!VvRgjpy7u{ft#|+J76xAbZ(Rj zV?mzP68na1@ex)lSP@+Gnu+4Sd%pf9>>-4G%PRQTBCyt|akF*ly&uUua(~z8uEW_{ z?~8TpS{qGuG8gO}k4btiD~O7;wz$u;Xx)W zL~uAC|D?&fm&#}!PfIxxeE#a2#fVSXZK{OAIbG3 zM*ihNIgfvmz@FVu#azWs|GCn4e|}E2rs28;+vJ!2y_`qHoWAd(ACs@O?S%`1$i$ey~6_q-YvWV|!OjiiKkX>_wPD_Q+o=iGXoQ7S;MaKou2ekcWE`VKt&8QI zsu)Alq*{_MC)OU7Kfcpbd=VGP=}AiaE;4DW><8le=CecPhM%NhhQIT_@hLA_Gw&2# zRd9UvH0duBMaqFKHT8Uv-p=Jg4ne^6ueq(vd>55zv0>T-mCnhaly(GF$egvU|A0|U_1(wd=Plal2o zJ}0Ulz}v7`B)wxNQ^zf9R%ccm?q3Coji)FC_NX|cQ>7c--oVTe!-XCKY~|U)ljX`* zX3l;*ED-f2paCAp3Dg%eNkBiU4Jy0xM#ZC_ta}VMFJK$n^qcJTiz{b@^Ttsbb)Zhp zbr-dc?rBYNSQ5xonG;+**=CdjELt8{LtBpezNynm+@U@cdhwH2RPP}Z957IkUuhkP z`2O1#)Jp7Y48AWvdX1fKoh~wOe0etLh2S^!aQ$ri#VDeJO&x-2;_Zw} zsj#VxGr_Q2bvLuqyah4sN$>oBnzQu$twD!I85B8SJgAT-NM$GhWGf>F$MfV95CE_f z$t`?}#q}L!)_?wWOKV`2&}y(0#5b|^XK>%i#}pMU@6TPos1NS)6CEY{dh>2YyTj&- zwXCJ)el3OHPweIn5_!BGpnYAPPASUe{&nHsKQspR30O-NJC}dp52H!n-`TC+@;bpp z8v$*4-xDz?c%dz&l_6&j(0CeBE=gx_7x{5UEQmH*N6qAAb2ro{IF63GGd@~u?PVz= z8=QNCDAZKrXVrQjUal>7af)fzq#`%oyW= zxkfWP=EtFM``f!C@Ax*(4%rECABO_cg}>$_x-Z@ijMkQmY?siko_@FMe@Z>vEUfPoZ?jnLTja!QdtISf zG&52jdVCBi@%Manc>$Nrt#h?aRnqjPbrRo}o10&??Qt%4`}0Lk;TeNc0dAN!16r=3 ztv;#LzA{u}s9)x?uIHa>Tp}wyR94;8jkV`>-VP=_OfP#aOk%#vo_Y&Q>})O4T4v`e z@IBhGNEn6@9;UrYspn+J%+)+PZ@nehDHM((*5vs!8pje9q6VOWEE`oaEw)X)jLYwF zOh5Va5s@mQ0CC8$dIK8H|6!E$M2jV2#OKp$@n;$T8*N1&c{e@ZC%oqT%hHAhRR{W_ z%cMCSoBJW#t6$W{7eingnvWXhnkp%=&Q& zRQZ_N7hYxctC{a?Q6a0MDlk$2e8t%TL42bL;B#x~zm|7`8%6^-Xiwc@c{l zMO1<}xAq;eBn>#OwiWLRk1dD93nD#PP9twv>Sy?E2j03HJMSU_l)lbKyH%#N2)l1E z@yJH#bIfE9=wIk3?2jLE<-5l~%1xo43z^^OFSKFcXeSlIgV@CaUr8al>f+RlmCGi8 z1`O-|&FeTN56lkb<9a(C&*uO-6=WX8gydGS4j~T5q$6C)Bc)(Waj;~4qlMgB7xU*=cJFsR z)9cN%Xm}r3Nk(yT7>X>h4HDAr3|soSTC=Ru8p5iX9olu1$ng?1zh~mFDRMryNB@aQ z8_nqGC-)fSmKW;yl?jyFGwFkA^1Qh;tp0UK(Y`7Ia%L-OunK>icuO4iJZx!KF_k^( zqusynr~UzKTFSus^J9)bPhX&ay45^0a8_p{LPyE-mfhI+jtc48R!epHK1@jLv=h9np|KIo39)<)5?cN zOW8J}E@WL|#lUo`)_fI8qN8xJx$=W9q?Wg(&F`hkG8mF~UJn#3GNN&0-jiha8KS>x zb+NN-Pq?CcOco?|Fq_0G$S&}}72k!Aar8cTUpJ>Gn?Ri`vV$O;_Rc52W$1Oar=H86 zK6K}ciePgpqCIMn6eMs1@H|p9+$f8uFQ-5%T=;J^`xF{Xs00B(`K$cK54QL*$u*Y<&Lo*#1+$JAD*3U((y*{qHx9<12ltXdas6JW&_3=MtrlRmheU zy$(fr*dI;Qci?)o%l!;z=*UPE%1R7IQ-3RLE~4;l3U0Q7B3!8n$xNz9l(Z%r zt8qPdey&{= zWdeNBlZ{2avEk7jL0ou{)&_s-mDsWD+Y*c-^Y6TJdNr}JZ{klF*o~-m>7R->CjmYh z)`)($@=|}dPAMax<@`{Yg;l!XVzm46!nH))+|a1a&;5x!+3TmIwTNftn#3%_0Npw?*WpVKXTROU9W_B; zEpvql;P`x(ZO{rA0H%C~i8pWW{z{Z%p^Y1SxBN$K07TsZ<=xw9uK<)rm&*WG8>dFE zf^N1;g*CrK= zkWoJ@zKR7*1mq9|H9v~|XM2}|Dsw{oeO8xWJ~uM_HpYt8Yg0=?hwOj<|q-jR_Law?($Ai)o&a}2Rhs#v(Nyh z7R;HuRsG_>_mc)PZD{>p9RR=$_c|mGII~ziDLWGp#nU52=ZAD1db&Pu2`?2Zorlxh zZiT{J6;hQGzJH(k4QtuYL+m`~T7(8D>;*uo&!+~WkVb9uO&7k+ZR#N&n-h0K)TN(Zh2p~gpL@N)d@NyYGzK{N{hWX3;Y z!dY7+1;tx7C^Y8%{si)M|Ed4rV@Yo4yyOE0kT9=#WS+gR>N22WbVt@N}C4nv@ZWM3W6%$ z#4BDhPR$D}dIVQjRKAg*AqdeTTcYwQ`qHX6eO1+bqZU-FilM?ig&2w&n$}O`vNg$o zqMu|-?l6UM7#Ot5IjpT-%&KBayt&KYbG{(}^!K6LGp))NFVt9$DA|lka`%%EKxWMD5oc<2NUta86OVOGoegsFovS4ivK(M{_ zIrUBHmb}2%(_7zq6=-0bzka{(88#Q#ZfS5n@5ApzTP*;^fN8_coU4X*S(UQ0vskWB z0b&Regy9j{E+rBq2%SIhqD$)YD)E+7k9yUzH$HwJ_qkA!(yA8E36+H&_Iah*CPfTy zji4I8i!;uz@?NpSLE*-+;nsK_QjDDw#DPh`-nX;aA;`+l*|I^vJvJ53w>~T}L3{ZX zjU%T%=kaxiLcQNQd`&P`XOd!tzAyoE>$PtVKyIU}l`9LLb}JEpiZ!oAx&HdVHpFj) z_;^8z=7pi1|BC~ZtwBIsX6>^1N{1LwX**D5J}r z&ryH;9`hH~Z&&TlOzEzpYPUekOGezp>a%ZUKWe-OaVx-)or9Gv8e6gM@wGky;sTxXBMV>E2?4jOtX?rD_U65_?o}@H2mg*H9 zy(=gbFIQG+!<*4s1@SR(AqhpaAw&RPf0|3t`6H3~Li(wZxPH4+L=k1xm{DY3B?RUU zEO%Qw9|UD(``(boRNcDP_(RX6P<%6tJIM%@bsTzmxH>zLqY)B zhgUa+-x;vua|+JM&{TCh5RFWqcF|!UzfAJa+%<_l|L>^guj&bmh4&YIOr4H!0!`fLMdg{(zi zFX3?beb2WbQ(G9Ug%}o6D_GIxnVQ^SXMm^DwI4w3 z!F=XaUCdr=iMGQ~&52F@k+hdryYfwK&i)o3SC6uyv|JZlk=~UmE5LIa(?x~Ef$^?) z=(tRDKXwiZPiRH*7$S@ufaXJ^@vkD1`||}$U7?%o0#yRFNi2C#Z557_$8N7tYL{2_Sd3bObEqq>~5e@7Z`hJ#}igd3#& zu6+C@5W$`M$orc94>mQ};d>APW(&39(^39xDZ3}u%P2vF{*vc#juJoW``~`|)xwMn z3<}|!DC<^zR{DFad~;krTG!KwouA$1Is{mB{sOE*=$*A=o7nq8*iGu@! z^7$6=jQ8Uj%K%Wmi6-PHaBBKl#}T2>yV_zKL@t3ieYt|XCq0!7(E*hhT;`t-WfT2KEPM3 znecLuPXORfnvkh=iTE9NLHYMh_OEyMof)khKis`XP+rDolWP=M_evjPf`+FLguVm+ zA4gXi*5ud5pN#>d!+|uTTS7v~(cK#jl1fXXpfI|-yAeh=(w%}d0um~yG%BHlzWcxX zuP4^1adIt+}&1}BCsBd(NLxkwJ@$=%@0~IJ- zcd7#CWF5Ul{@y_p{tA-ZOiggUwqikL0P(wA^txZq0GCqxPV{bIMl!sG%p^MXvYPqIL$I+aaYB7HV z;Kx2XHz&naJ8k}`5I|>0#z0mBM9ID)X}isLf6NUK8q|j_c5X%ID?8PFfe8Ti4!G(a z8>W+G^JK|9=E{%{4qwnioU|+Zuoxy}2U}`8<=h^y1~n*3WlexY+RSAgWAwDuhd(S+BSPYC;|8! z<|vK%?&l!!dcPfJ5(p13*pP=+xwQngs=E~&_~aRl$v<{`LxRHa)Ko}EHOSOOu6&iH z2L1wcafLc-p9!@*5|xwQIO&7z!hQ(?i0)1I4q?fN@9~baUKxDG8G0Ek6B82-`o6Zv zvXU%hgK55b+??R|jFoqKCEpH~%0A<3EmZag95fp7`x+Rw^Kqy+X*FAe2g}7VZ3DN-$PpLc{~G@EEv-?p?F(ANalf{9E6& zt9mMfXhrp**y8YYVB!Bg?oO^`@e6Px4w-9;fwafXy&XVqOpJ+anr9FU@0My zO6_b72b*_l%gsWZIQGd31o&vJ5c!xXfCjf64NOnKOt9~*lB2v6vgO89kAGFyyHZ}K z(lIZNc`FGC%<0o2PUjgH$|7?x_{?$4=oFX1)h6B3Q#)fk;84YTVGNs0+zP4c`Aof( zJkxt<9XL@;iTY@4_tqe7moYc|h(;%c&}q6R^6xi=aMl>hVys8ycgar3B5()v#RYxT z>gMquE51u@bS@SweM&z>X>S|UXaoI{-C3d`fk*GwcqWEEaH>rYDS0ZDE1)!mgpj zO21XGO}j4eCW!?hRdAoo3vXwSe*mzW(+x5q38$puXU9+ECt_`_#93JKxF_TT>buo~ z8@RZf_E<4lu&GE|NklUx?9rxeJ++_>RqCqzWt5%v^A)I=77Sctr{5>*kcZLQ{UcIp zw2u9utS)%(t&A2ytI>63dpoCCH&^C7EroX&C;M9wZ4q#4ZSI5f~*?FP}Rm5-P`fxvx)4p^$C4{CB*fuhl%%?_pyx6$;D9mu^ zP?*%*%Qn6u_U8q&@fyWGrDzYnH#D}SiBZZC*aiCX`ZjIydOns3-LGQ&gW7)5IXE4; zCNC4;S6$sP;=rD{Xz$fx{??V-sGgVn?ekSi6_u2tXjF5bPNtBUNMB(wD^9(H*R;Be zu6efAWxhrod#a!2=g;|Nwwt6pHFcryS1Y+BA30N|b66>v7qo+`${W&Mq!c))o|3DG z!sWl8BWt!xtkKRJKCKBF>hxdl<5P1betyzGF*VdE4+fDo&# zCp4c^o^{RP0CpX++h2kU9G=fU@F`{aKg7Ae^u>H z&~;ZYFLe1ee1`g?bxi!I;JALhIO5BKz=H=^p&h1oTf0xV-*TyW(+ma43ctAf_ztcJ znZu(^-u%Qa2Li;Wq4YAJwI5(@^?+zzpctv9R`wy=IVd{*@s3bI94hJ2Bf*2ZJeW(g_z@Bwk`((W(>6n6ME_dF%VRB;0!tPMb?-76`_WKqc?FkfHa*=pq&dpi%>eP9 zNJ3p1kxRvw`I>?adsEPZ5ljh-1A6IKarf5-p7PfhW7w-}4v%}mz&XKWBuf}db$IaP zrsv%}iH87Jc`%fMru$I4i>R!!wc#4c592Kp`|xqAt1oTdR>{qTrI z04@~%t*)I8k9F5@HB+D45QoMl%7#Y8?#r+mISBx$&blmpXQu-OAfTrN2HA@o>FnyM zI);|o>UptHax)SRN=GqcS1IcAe0<|JterSMH^Ydu(wDva5>fJghhnlF)pNFYe)pvg zngw&}mn!p+DR?VQ>nRFBS&FUW*S1{`_W{4@LaWwqru5W?gxopnDH|8R)yK1`3j}b} z6^c#`Eq(aY9fytrur8;OHeDuHYnZNqjgtt?YA#U6AuMM0A-DZ~DpR9+N$poOy-HOx;HX^Cc*KCp<};`Qz$C9vKx z7H+t^!`;q{EX*e|z(`{*YDafFvmL{_S$fVfYRgeN)xfbO^|VF$WGUAbn~~XHgq#<> ztVv>cBJ>)FH3e3*LyOYQF&Zpwp+ZA*)CFU!O&@Q@>OMahet;z&`}oW4D-NEVaJ}O0 zTmT_MmVwWb-r>kS`;j}k=yWmtu;*LmiF9;)fW2Gp)@IK-@@@AYP_{!E<<9!cnnXR; zHdQhG2s^7s8^61Y&qs|aUwSAo@&T^C{qLC1jjr}zeUJkl5+UlKbEWxhZRV1-aAQA( z&%*|xG)-ZGtY&8kxMG0MmFGU!#)<67_3$O=yZ*$01|D=~8op`3O)Nr;hg$;uLZB!B zuW2w;+3Yd%lV+QL(&R281|XfJavBXKk(@{P*`)!Pfw1?)+%RM==AgVz)Dkn_ey5{L zz-#(8pfdn7w9O~{r`cUtoKy^O^?t1Fzs69si`B+Z``P*|wE6EVWT-}{=?r1atm~A8 zdK%KQ_CV$(()m$Q8Jmwrtnr`$APKzkHLwT&HRg&C{Aq<|IclXNNL9t1>eN(&skfSN zI2p*4u{l!&Jtrq}lBW`$rZUT{@pL;F-4XI5!P=F$@Q(h*XqPG7;#Y}J+cEC^%M@=_ zu4?9=ZmK%qM=s2m>tcGh6wN5)Xz&P8i_7eiOh@NMq%Z$`18xDc?n0(k&J_q)vChX& zM%J;dmPCQOD(5dYS_Jf3k>$}wHPQ{1(e7X{u}WAD+Tq(0zhA}6jpO-gcw7*<#dw#z zQU2RRvJrFQN}a6PABqbxV_9mR+-AA7KHWE>!`0jue|!&Fh`_`q#;{Y%=B>00to z>u|ED5SsP(YSgCG_p1%6+A$mL`%1oIuj|q)k^$UiwFpb+M77EkgN(#<9VHDEpAVfc zM=ozE<<)E=b5OO%^Ea%R3Jjle<%sd0srA!}w~qA0Mna#47e*pJFnFQf-KVYe`mAdF zv6aHul=-whthVCw%%RA6v{HI zYlvOh+VMySQI+Ni=?985DT?^KY^oXzq5Y@4^Ffj=zrI~@_DV7%wP$~(>H=EZ4IDI- z6zxnf<4TGV@)dcd=@x|MEMB}Yjff%C0*O+*t>%rUdihR#QHEYGdtGI;?WBH{5LDSF zqrOBGj_aj{P$Q2`rQ(J4giyxRq#P`TaQ*Nhb(VsBF}Z?$SiaZ zA1dQ|JRH*eAeEq@cNpVaQ&e>b$|PK-UMGOdPmKrGW3 zEIF+d0ywr*Uu63bToSp27F1<#4O^;S#8$&;)aVaHjTwR(V}Whwbxo~0yQ`iIYPuV8y zkxf;vh4pU9hKf-|ugMcjGKB z_jdHuVp8ek^N*6VRCUDH%sHRR?bWG=pJBkLs|P|n^83tFoMT|CyD!LFdu3YN{BID&ekS1MqCpW)SuVWo6SkjKkW*k*$8W@fWhGUCf%Lv|r{V{DN&Ga*JX!bJ znHcKojhPKzn^>&Xp9%*#s@35$scmD_<~l{)7QbSg=o3R7^0`IbrvXX?P4zGwMma$j zkCV&;p$T_2pMGS5Gc5|K97gk-s-du{2Wxgy^eB89fChgt86YqfO)z?s(eBieCuQmI zFJkdsy>qu4pZ2;lGTnx1P^~D1X^GEB=bL#h-zx)}M?z_aEt_B~y)+A5!TTLJxm`1x zyu@T865U)~4v`=ndteQVGwFLxUT3nO6nPkyTkgyExBj%K%BCV%R9d!bvTPQM@CO3Y zo_bB7sdzNu>Qq>qfGJiJXgrr|e@Wq6F4ODxEX*nVy(dhO7or%71iy`%OA!|tsm+7V z{0!fB&C=L5b9anp$GW6iY(|ROeFByg1#>n^b&&;DdZGHf-3zA1VRC|e(VHi~D9J3G zBnxyfRPbdoctMNn-Je>`T+Vg(4N*6-x=zMz!S@B1s#P(6*pJ3)gUsU8q1Tk4#kPZ#GuSM5AmIh#EDfW@Byd5L0Q+^=uT>%=~(PaoRI zF2|m7AG#^68{oa3`^Z^qLha309SZ( z7Fse2y5V&E>QhwFpsa?za(eSKU3XDA4t+}cSdva~gEzHhO#`*I`|O*YVI5i4^Kn8R z*hK$X%>1)^sH*!LK=N4baVyPnhk&OdX<6k|HV;h%Be0H*KeGLfIS+;nSAV=9U(6LY ze*J1eq?@>7{l^Q+#oW)>nk>Ixn$B!<{;xUq6fE(kSOd`eoTJ&3)jIgKme`5^&9Y0c z+l{?7iM}8t%*Oy{zgoGIk7RDY)`}f&5zqYwyXrpcfV~_=75l>pm68D{q8t=RLJ$uM zgH+-)Ibu{pZJ@7x`3(_Xcm5RQ^uP!DvlW4V=)5)LMjL=*4@`Fc5%v zRbR129YnB)Yt5?Ge0QsjR={Mfo>W;a$K88&(emN3M}LsClF@ht6yGKPSZ~=e z*II3&`zNMxmbzxs7GimWL$#^Y8`!S+P#H;x=_NeinXm(fZn=wSfZ9C&nBCD>jeD>T z1RmsF5D3{*dx1hb(m=-zh)ux1Frw{6njgnr~!yi-ki3!o-B> zcXX~S2UDmO6reyc6pYTeGX?{%rgNijuotTQ%wm2|+%9g`Qqgv%29w9`PNqbD`KTu; ze$vLKMAZJcbfm_$dJof9hMl{n`3;suTO@d@V=)u0`h=qiY{?cA;7`qbhWuw#rFtwA z9EvNW_|Xug`RYQ8>U$kNcoObYU6wWT`I}@dZXBM2a`ps`G6R%b+jnG*bO0^Xa>GzM z@xPYIT+N$xJoI7!>_rQpD5n>rEHUXa*zpQ#UG)T2f(UU7v+4o^JBTK8^g}e57K_v? zjO)Ao$zg13c5~}y%e?43YI%NX?Ai(2ShzZ6ya}y+5cl5^IRbMgeP{dT+X#jni(RiK zCqVQD4Nf+Nb!Mnhm6RD6B)oYWAXBq+`gp7`{8vF&Q6npr`FeBngWh4DhPNv;V0AFf z1`Bu)C?Ozu+Gf|}xqfo*i;O85zogvI9e-GlZ4bTGs>d#Y9yZk4{A-)b$ z^bckn@w1PlAYwd7>cDkB)`+s1uu!_V?5i2vGpjaVb*7lYs3_(DB;EIpyJaS{kIssi@J77b=3@C^SIwr z!?ra{A||@}!t3T{Z7Hqd-&0*}Je!X?*ry!?xd$O=c{SG76nXt&G$KR@JhqKDN`u>M z&@4==wpcArHG=ti+U53P^*x_WQf5Iu6-u|sYGENxyu|qJCH3CAP7sM&jBolnl{JY*x$pdJ6A$Ek2 zC=6(SZA);XS5>&-j@^oC3Xx-ViJPI}nVDr_)VqaJ{DNHMzNCF0C{mIQqFWCwAFJ|F zL`D5cM$fKwA-D1#=i7DUC`;B#h>E8=LR7U_iG z<8Tshgn~DLpt!^*X;Tc@P6qot7uD0Y4^Uu;WUkraBn8-S}IY+hMzU46&7BN zuJ-8$u$paG1yq?kcew&T{(0SR`h4p-IaTII& z-n5jQ?oxL@<*;~kd!I5EvhjlMx`xdr904~q9Gf+sGeYuE9SAxdHc)ZbKsCzma+L`0 z0}c}0;zMuihf5{fU7@MCfCyGrHP5feC8xe-gIj8;tVzO6mW%@w?Uqh(q4&!8nUa(e zKY8ZhM|&qi&k`LSVFNW_0K?nB!x$HPPD4JzuP2b}QxN$67VS9WjXOb;Mq@)VCz9s zCnvu@5>1a6OYXgrR(ij!NH7ONxBe5CP-#j5S)b(8YJw4#j5i0I6KHqImtUiv==>Wn zffnIN2pzGt_Gzk*b5uSYp#jriHH!=Lo^Go)C%n`+J`jF!Vf{|KrQxAdS>jT?)N+_P z*{E)T^GlUR(7@4i@K5$Y420%_8QRn1S=CTGTQgYiR%? zVt{tEEhC3e21?t=sDVcttFYll_$V3OojUp2T%2n1)?-P{o>{|oz#3>Ew|8SH^QATywydG&*S34axp`TK)k z)Ka|ZxEIJvpXGApoBsjC8b=&5?!*Jr}T9Ev~C`8ft1tz<-v zJ;?o}`%I`@!%ji8`-C{0~>0>F5l zQ61C05_&(8IiR9cyc0ns8YfWP2mjjg;ZW?V?IFR{v0eejAmFPH*f zRLmN{;RlpXJJJi|ww}iXo`8yzu}#R80)R{o#a{tiM?y=mmUJ>}`vdpP{<#G~$b|s= zUpL%DVsYE}x|ebQxD8vS(?oX!R&Waoly_C9N2QRW>KJhbwDY2fwJ{KGB zed}wsgX+Bnfk#!?ULhxr=;HTODg_ubt7cQ))p&Iw1dY%2ceUSOq4FgN+ba8YGiBdC za~j9x&5Wib7Q_S48eo7jN%MUQo-%K!4-e1FE~=BxVuyoGTs{E#t%FksHvh+skt>!A zTLl6psv%j=T{zn)ST`}{(tWNR8!!`Br9Br;Fdv|F+`{Gl|F0tgfPe=8MEM7Ei*tyP z6sPwY(;Dgv=O}P~tG-nto5wy0dD@X%5RJJqXUzD`j1GqZfU|1o`*FU+HbnWc3ZE?R zcO@qak{-;%HbPuL0zm#S{CbGGP5=|mg0Fbo$9%eCDLt(6ei z?T`IB(cEj+9}lb6g>4>@J_0PfnSa~$f0aEO{|nklU*X_RGb?M0XswTA+DxqH(v5Vk z!Fo%(y`NhA*Kg*A!C)S(?bmPVkj%0X#&=(d#KYPE=qNOE|`9 z{b1z$^tfe1!z=8T9k!KK$Mo2q>mQ6nSdK zloH+}z3=9y(ebRq>2QMLtr}UC{g=+F%*J$o?2hOPpl+!2gV^f%RZ$tg|GXwjACj%U zR$_$R6OJ7-wyVH2@3$UGA_fCx06CSeq@toS=4si|JJ>-o>*QwOou4Y|3&^*$7Dkd*B(Oqhh-pLMzSP1(bGJw#N61*B7H1x<;D*BP z)aNL-J>Gl5%wB)u@Tzqx)aW{%~iby?+)<;9|%=kE1dXlJ?mop8PD5LZ; z4+CDFE;TFKSDx8BVH2n09xfR5&hfw3Q!ezpxQtLBtX}{Eki8$PtrJY5!Ou)4zLY}W zHyFW#0u*5(x$aqsofZn`e<`os!Jjq`oz{! zphP?GK#fCjG>8ODL}6kRc9V_Q*q%Zly{c>{veq+=C;pFb^a_SpXANQQHzokwgKXD| zPDH`J^M8=t8kK&isDV+h^x5 zd1fO17;I10lWZ?$WXC3x5OhzP&c3rP7?WgRK|$7isHT_i3yeRvvvZl}iE$BbicyK0 zr0}?HgvXEFS7oJ;bc@08-Vr7n=vgM5kZWmhe3UW{Xu5XU{}oLrS$}lCpUibO&Td(^ z6Jr%an#=+p=?Wcxo}L>Vj^G;vNo=q#%s=Qfe~9%vXgs;qj0YTlKTjS2;Ob!7q0=C| zkX=m_@~RTe!r7N7LceJ~ zVQPu-J{DSy7q>HiTK1CgaZ9PX%gqxRrfTD}|c$*O!4USw8PE0dxedMb7p} zCz@hLyK-}Ldl2wjS)-meebRFZ@%$QS6r-#2d1#?q>T1dSr5_C4^34v;+?Yx7``2HAR zL4jzRw@vvz>{ooe$D?c>-bBDdh>1pu3Ja&e-=QKw&1EIzP(2)H$$eTS^9cc+%lIqq zmdH80$!2z&EdS|&@;|b>qSgc<5e_}K0=LA<+{D!GIAVXAX(sU=wOj0*vv%uej5_Q6Ysf{2ZAK8o271;}*nVq)b!oby@7`dJz?Me4Y(2+N&m>WtMLlDCYF&~`jL`F+Lpt>uQY^e`vy@;zoBBYjd6a3BwV>TKCVE5+*2ed8<3Lb=esEvQPNG?vP9SBJaXi!t+`P<<1SxfcJ7G(_+I zP>EBRLx=-BdKpITc_v}<0Uk5i4JT^bbou`F%NjP>eO)&4=DMaN6kIAxh~fwpN&ff# zsy2b$Udkjt>%JsXl^Ps2Xsy1&hrP;+A6T1AKnCP<4^NZAANw^7tfy)RL^~<`}Wf|euBd=?XWF$BF&2F4!{1*2`o6N8bTS>R{3Z5(D<@rjz z5Pr!gO-dHDC%Rp{ivE~>I29tA>O)w5PJ0NM%^wEzOCKEuiVD|P`=+ylSD;wX^Cbt5Y&4`t@ z%yxBkhi_&xbI1ys>%iA)4+7?$TC3ry$fUR@F}l2F+3D$+gVqqQ`gbxv-{9iI&0jRd zf8UD)r-mt!6QL&I7jV-%=YhqYy9u@VcDy2mCSO;iF0oM{f!!}P zLcni}k1MO~4(Ddnm#ksL0}>!~Rt@C@fLF|u42mmqMOdSupVk5H_HjI{v5scD#Ia#T zYyi>mKfk;Yv-@M~&AmBHycGWBmvY_OHinker`$N_oYMx}*^yC>T{(FGR(E3H>1$z| zfx*UGjyI_Xg_S6^pLIV>PWnskX5n7hi01u8!wq>$hr1{fb zFpCXjpzZ^njrbf^PvWc-^ZWtI9o_#?!2@C~Pldj|dP8G&NXYMF{vA|S1Fq80U+^cx z!t&F9{&MzlM~i=;2hM=MyzSyQ^_;pA8mk^U>#Lio%_~37P_B0`t6D#)9MWBC-L;k1 z`bxiAO<1d(ps~Z@BDbdJCn2-Mb$+I+U<(4^*V}2n^;H?l5&$ruvM`zXapqL^)kV#= z`wQpm+36k$F(y@i5(}g**%0wg`se6aJ>c^*Qek5dx8){NFV{>k*llC^at;rWV=w07 zPAIR@w*lloYKIcuyI`J22$i2bgJaK-96ITNg@l_VHWqsTaG!*mbkOI2#$f`l6orho zlTgFy^&IDzErh{9MCxq6x-z9fdeRgaux8l_>n0IJlbFk2<@FH(#T4BCxt^_)NCa2y z^=DX`ecQbEYMzq4Ij?hl#{H7BW zHbgNMN`Q#<%^B84?&o1yd+c0wrESBp{%!q#&(75~{f*fB|K!EtZ?sjc&-D2|Tjy`C z3edl!uIT=b@w#NF!nAMH=_n)4`BG-d!EDJO;rC+eIQ^1D( zg#@(J$FY%d1GO_mUOqs|J_m6cIF}yhdcdBtS9I zT9n)t=ym}eL2FBa1ewGYxj_(N+BlG%YZqQD@)C^J2Mz(Ib;ipJy~plr4nDHe`O(fv z6`Lie+6IsP9^3hBIp{2{e+j&7TXo+_cx<=fYG<8G7oUH2PA!6jq93x|ITURWjBobd zW0&hyE*F=yuA@ZK3n6&p6OvREc(pYT>3R=aDPTB9E}lNB8e(--3r@;lDfBUQn}w&@N_3dZK{^Ekw^-z%+wa!fc-!}6&lix-d>EuDyaa3+!JGHQ1lL;LBzw| z7cZb204*+PYYG*-y=1ZImBf<3EQT@1DsC-EPLx1th|8>pxci|! zl~hEf1a+*s{oTFL4ML>4srQhZ0suH!s7LzD4W|+0vl_{?3g+-h#S?RF0mi5SbTFOy zINgyZKKLgf8;k1iuq8mmu}3_XY)I=DUymV?ZMP*Dh+_}mw=iB_Pw7~BlN0vW6P{hm zzrjtgiYgYZV-=<#2VXwE2|li#UD$qzz18AWe*DJT5=d38V3PH6I2h6~4C6b}2~d_xCt&9)w`XGs#0#4j1DxgSLF- zu19+WI9U@0-BVQb#k5)Yr+TY%ZT8=ucVS7eb)rSl^2-LFui4s0?H+EBs5clAZXMhPib6 z;X&c25Q|}hC4&k-p%0~=CFo*`@Js>}U|rOZJ)5n`?aK_rAQ%|LWR~%y#Y=s;7hRz0TT-~mT7vvjh;;q5zIm$S zzD%poyPnqZ^GJS5w`uSxeFFd5fgiV#@_9SJUNjsw zs7iYq_h(?p(iumPpTL>r_q>v zucq%%^4?qcb445S>qiE~olkFGA#nZzR*xM{t2-~-{O>lUbXDuas+bay8f$_4^>>F$ z+r2KHyM>$V%s)n9OoFo3q(b7)MV{I5lztg7L{UI<VSFuFKQrSc` z5!l+5dKDLwAlo*})m}9uHasDipVeIyuXD%ji@Tu#u?DjoT1g>5g*5)&M?AE2LraO8 zh>kzUJDFeq!Wsg}F5SMGa9;h%dsuw2B|Uq8)0IX=(D1R34K@SsK{~OabSb8MZmZWx zt+5O6;%w=!@E@*?l?Vth_=4E7kVW}UkqOpkP@-fVBMy_*%=}b6h(6Z%@NB|c<_KE5 zdQ=T(8Gfs^9!sG1>X!f=Ew(fE7rK0vdiYG{%k#d9M{5VBfj_@5U0GRetV;Yn;o{_K zGdq4W(fv;1+qd%@yIJXiq5K3Uic-5Oj6(6~PCn(oo2{VtU23^tXGn}v*~N>EABk#8 z5N})|D4}V z?pphqy?6S-*HK-`O5$2f`ec$If4kwR0{0{%Lj>Vxgo%;@ z9|I$zly}*wg8NXM5(uu;<2J<`n*cLhv@(Q`{2-FF9i&a2eSPvPtYJ6gi|orZf*2EA zZNE6lg3&bWCnzH1K8u*YrJk5G3MoAve2S-s z3+kJ={T-3-=lcG~CtAbmX*~760k6C|U%djoVO){1DoniQ6wvx{04Z@58bNTJ!LmZf;o^BLn**X#WsQ>Jyx7$y&UH64x+caPGh5KqS(Jq;op z0;sa{YpQBZ?-;wKN-qGh{5}vP(LwhlkM7DRHbtG;HF_*M?tKlx; zXz(u9C{wg!lF&<#lRfChG@x@SYaVUlpj$3qbaA^Y@T8mL1Bk7izgDE1#kr1c1Ov@J zJiiVY%LpS|H9d)~j#rEu{J@<8p@u^(5Y!le8EYrsS5at<1y09}O2xXoB@OHU@Y9+;rzW~n$3WUBC;Do-woMG%rtUMt@5vlFXX zgUk?c^mBs&TI;wC@LCuUm2}KM6bWFjp`GbT!_>bu=*u{qMFM?9Jtj}OL0gLhG-c(4 z>t(82Y=tMz9t1;U`8l&HSWe*mRCNsa%wJA!+(M9OOe2DjD(t-Vclcm2VTxlibwV5^ z0S;@5P^^=0fH<9YUZ~Y$_W;8rA+Nh6D=*n`4hoqkxDZD0qvV7L^Y*0^gbsE7T>2Sh zP4(_5PxPg=$l$|KxAUziyQG#p`fHr&evmZ?T${m(izC8%#s_*Zl+eI#&YZ1lU{+-6-`*al#sm2CV;tQ?6oN$VP6Q zf$qQ|=~tJD!+jOf{zT}#J|R5QzD@PtUkg_2mPP<-28tXK14svk6?Y*2`i*0~1mW}& zUZ6~F?JCs>kGusj#Uy#;j~GuSc}Q!xpEcmhe6%LU8mz<(5Jc=uOeElRF$J7{XS88Q zfC=HPrQlD#J(77M!j)Qz7$Pa<)dkZUbN4F9Y}U&!a4qqIxTHq$iwGTvva&1_)w#5) z1Lt$xo#3+w=cpAG5fg;Ae)v0_ii5|P&xh~#9`ZPE^?VFb0vbcQT;ZP(18nr|B*0j* z=67JL1J*H&_d#^$uh(%<^h?by88`F;u}?iO{rclh-%064D?g3p$kvuLbZxqaAsh&B zQj=lO+8C~9k;%}Bh$R?aM~nstaP~rk!$LxpKI2oihHz6z!9?M}OO&-Hpi*h=it038 za0(44QsYq~;l($JgxcA&38rPeIY=)K-=EsoullgLSkV zm!GBR2v^8a&c%bT#gRI+@7cLMwjoe#Y^K?=K(WFUw#atq73KfX@yNIP(%Q4Vr-8oXdK zcA6WuUBCf|A2lj8f4%K=89;KImN3xVz6U&?rzs_y<2S|w3#=MJ9K~N$E1f1hMuhIw z0#eRSB9bvqhBDP%C(F4`zqS0t(tPDp4V8l&WGVyU>pUl0OZRr+Dib2fEEIrvk}04D z09C%aJ_kiB$iwayYi2xz%32XyBTg zoBduc_c$oVQ?u#)+x!FTzJK#?Hl2RYzPM-~v{UudEZOH~GeDTBmlFaWi>dd$9$E6f ze|)I@Sar{CIFF&;&?ZAT#bzX~`by~Y3ZZ?81DGM3qA?Uf*X>xZfKu9K&kTLXiEMWO z_>in$1CnBM@ZNsmpC_P=)o?!PRU!EHuHAj2HY+4{CcT9)GLD0uyGc!h_X$~VeL`BYV}^_mfpi3et6u1Hu6swXgO5v zA0ep#Yj#)B!feUM8}DUDh3jfbM}373RqXXy3}35CX>Qar@iX(!chy(6t-DKAA}1Z1 z>4nS&Gsy`ZMq}5Ntk+a%IBlyG2GuI>5&I?MC7S^!;BI*6o5L>!DQ?_0RfV9a?V7K3 z?DF;wy||hv(|35pKGpA+-b|fFon1EO6Hg?9l(=!AKO_Lr7)k_@2~cauj3k5rh`)e% zjO0D0ROHWw@hD_^a4?#crJKZNKZ?Ft2=bwpvN&lsfeptVfki0(ZBPG_I|GYId~S4m znP{_aaL%()A@1uh8908nV&i<2>XTj#Bih)(?Q+*g_)#S-iGXJwU9VwDD*!~;g(L|U64Xvy2bmDL8j8o?*^V{9LGR9!EL zWrmKYwseU}6jB5@F}bGc%7OacDIubfMs?}JcZG_>(tyyio9H9FxhPHnU&0lp zs)DUU*PYkX){P*vM^j;SE-OkdZE0K)btYiX!Y|bL$>g30?RZDYaqrU)a8c-gI6mx) zO#f7+GVVXWHvD@wwJr`Sx91I-$yPL? zk$z$Q(Ybn->96@b!q3KicJi?c538%GtTkEypcT4NivIxMX?3tSm8+B9vIfAr1djBe z+z)Oz+^bk!-+0aULR6Cf7|V=jUbLTU*8I`0`WJ;YC8yeMz0CjN4PW@~lkP(arZi@O zU^A|0?Q5e4T-w9Ia~plUV@kf?M^tWRt&U?)jEUZ;cI+b`@@E>LW@uRB_!pmstYb8) z^dc)j4d)YHQ+DhN54Bm$pF}&*(vZWb+6bb8FXMSUzWQXo*>;c2Ej=}jyv|B!!3 z8YThTw2xt|M$`VJOYNF4BgAvIVybvN06nL{X{|zl=d3UoFfen!o)!3MsIlxKb9-m> zJ{K#i5Au>~EP>vJfIncZYvQLrjPuO>49=152BtHeE?(!8zFkhM|KS(?&yJrhErpg) ztu&4tTcRmGm|+?Vw+UV|+;o$#HYjm_^F(`O$BaCtJxk11lb{2YWGh^zr%-`DDO#+2 zDptL`C^#>fYvwEB4abvysuezGwwpgx=v_Nc3Ej2Np7LUozH%?PlKI4RO;7cB*pK*| zjnv-&&*AgAgs6R7A2GeP*~ycd$ik9h&+*Cp$d0NJP6bNnB>f$Zh$#Bf%a8*A@cOZ5 z$JrBuf65xK-$KIWe}i$_fU)~@pzk=d|2Yf=@`!gRxcB{9hK*;sANxw%rbg+m=YFnh zsToUEe<<=9OcPiBw`J+)95Vn~>j3pIyK)>Kp6hmTIF za5&ABb%0y6DRJi{Im1Y9j4&^7ud|WmCxTjmCiIp89}0453BCH*d0D&{SXgH{^Y{6b z(4!~ffw#;7OX-xNPE4sdK8rE6X-wZst`0-0}NqRMty#n5O+H+ZGV2wU_Mrn;90Ho?cea~i^Et# zseOe-3hLxYR_tVeC*SqCNMQ$4a3VD{n$u9LMZg~8tW9B%1?RL_&88kitJhZUDi^JzH+_Iy4eT) zu<6JAmzZv?uzNJRWiPN*G8kNrOwCMZr6LaTc^a*_kYfw z{g|Ha&<$!8f8>!;jSa1sR$D0>o(YVa9+R$7yl29ZXf?77V{yGazl379CaN zK9Fj@%bBIQ#;5{pM*FLw0&9S#Xn3cYdt z_3<{-KIZK+tWlZ$quVct=#I+ma#Bk5aQ{F2vJf2Im;PQeN*$}c`556u@+TFkilLT= z&WbHJ>ea=iu`OnY3o{X79Pz}BMorGJH^r)ixSU8FrQUDE_IC57e-t{khruh*iR6%v zEX!7+fJKQl|4jf;t`yvW2je_3uz#t6|8X(QH?CLsb(_TeW@PKh4W#WrNtuz0EfaJ< zgY89&0*~4>SXl@!95*~h-T*8_Q80~}IDf}p1)v?72Fha#tB)?af$!IQcmteP$d__4 z!wyQWpSw)eNy73w74<`ZYLqJTDpf}iqazm<8t-~YlE6wG=fC`Q zXQu`NMhoBoSu^ASjG-F4*7>K#Cr3f@1^>>({RGBu3NkL~9|h~#^&lcreB$Z!DS&ra z`zGvXAeHf5LKX|}2N&f(SmnL7N?P}gX<1IrMP zUa^o30l7Twk&e1@iSAH*ay3mA*JPD_EF}KMoO|wun0xQ2 zrn+x!bSDG|)zCxJgc?ea5|APqLJQRd5=20yN`ioth=_`zcLfv#1SKJ~Pz0n1DlbS8 zL6I&^MX(@(2o~(#jqmxLbG|>mJMN!1g8`c{viEw{+;hz}*IIKv^Jo=F`h8_C;c6?- zmP}CknLYXj1)2aFoT9cr_V3ugHwE@6*$+Ay$n@CVo;^yI2~o+^d8c){>#F!bJmu;! z!ylZSt;w6tvxbImypG?Ci#V$Ek2oJs4RzEieEC->sTh+eMqsEg9V%%H5XJ-)q``r^D;rEZV zVav6yUr9xaBD|{)Ir_402;i@Q1G~Mm`cT`jgMiW!bRir6*;wLoCOgER;ci8L%l0>A zXoV=VJ_p5#Wuvo3n}Xm}0A>V-Xa(`8R4w_ucD1R}>&N4;x1nmfuUumMmldMLhO#~k zMDaQnzxwVk?)wbgD7zC|#^hPHf@Fd(cyH*z&>;RVGH;3&pG2IwyBWRK^>dNps-P@O z39|TaNE7dySH{QRbWW!S2i>&`tSFlNEp&U`_!k9>YZltO+xbz_}8c2M}TPn#BD?(?rSW!g4vk2kwb3#F4AzO2_P-R$xZJ z93%mh(4Bdmz0HaRN6#99B>t~rUsP9W?8p}nz7&cG#&itN3`XlBb*s=&2%yVn z5$6co+2e4pdeZi1CS#Mv8SsgNFb@LJph)f<-4S(7@k3IP?~~0~^Xc|eU7#k-T*|G` zVE!GJ+wTgV3TsA18UyFHvXj(slk;C6rfd&L9mI!81zGI%7f41Dz0(2029UMh(9(JDf+v#LATgc+%XOWBaClvleRN*}8`Fu*Oo%TAzyYNI5U|~viB0Ib8S>ll0#MC1pG3W6t)pJ< z9xGDHTV}vAs{hj(DAtnz;5UC;fDh&?C3&xgW_4-2Rv_qQv6PogzV)~8DyN~A_w0{= z)GyW>5EmqqPZa2)fOGcs!DtffU;S!G60?z&~yi(&!62rKOs8tchH_6 z9=4pb7&yu?w03uV#Buo_bpWw+#WSsh8;T%z2F(wBsx|gavt7D4RQJVEE@Syw#Xd0R z%F|l~JT&D4!Hxj-+i15i|NZ1YJCjmo*o#x%w$({rksOSaQE^;EGNURz%*_F_-$-wjE;Q&Pp=>MJ3Rjv z+w#Bj>Az3R5MSPP!b(dIb_fuP!enAh(7r&JY@B5RUA*Wb7X^q1`P! zpSOEg<(RykTlb%jeQqN0`{ke6N1l&ZHfj?}v&`J}C6xD)eH8wMv4z?DAL0KiqVGvX zN&t@cf8+3mJg*mysJso>qNWvydS7aY+=4G3dh`_8{l=*j<6l5}M@?(Y*M z|8>Xy3q}L;?#E%54`AN)K;mor%G)K^l?CFma|F0f^vkyEf!4V93<^wSQ_j`c< zr7K{{p8EgGH~%A>zkmNfe^LJbc;f$V4SbF~pcDM<@y!q7W~6^euKzU~{-+%XAo~BO zA3j5%*Rdt?%GN-2VxgI$HBsr%)18E^2Mn9JAUPjm17%sb<6irxAETF_&j$Z~e+Z+V z>2_d|A7TTt@7Gsy+m9c9S7rJOu++sweSf#bL?gA{^lUB(Lo0JHe~5Y8sFN{y(j2!H z{;p)lms`a)H#DdA-F0Z?Q0-1GbktUw>wtQoya{2HOlI{*Hxp29#QINB~wlZ3POtPhqKOvTP%)~ z9u3qi&7YN&xwk?0ef_ij-Tv6BXG1scOs@`T?@){J{q%5^ytt5E!{y4gJej|0aI^Q6 zg5rhw&o5=BUb7#~>mCevx3gw#F!ZxK`R?sm7{te25avTfxk(IY`C7XRVzrCiOG)&; zT!}*&0T5wXt@Pu|iPV>jz1a{rKfv`7@Bitp<;*Lv5X>>|Rubyd49jq*BLYF5Kxal=Ra5Lp1ag zu+!76!bIMUM{%N{zv#hKZedzR39J8;48W{=@dT1V;PAQB|pU<%oI+~2v7mGgZ+gy7=SnlmD{4Fgn ze+c;E5Eb#X_3gq#laL_)QE9`+6V#P?`!%=X@IctWLZS#iBr2%Y;a&S)K0%v_q5IW` zvQDa)X=Er_+_nD$0M6Hjewsf!t(5o>scewoI-K69Sp(0TBmi9xPwl^RrG6?=R@>}k zOOfn!&-s_~3a>f-lNC0He=8pO=NDOD=MhNS|Kx|I!M@m*Uw0q1?~FY2!{qsJUp@Qv z1$y>)8l)*Ezd9Us95|k7Z7nL4T{j{Kfh39~Bg#-rj5L6#N1`9lW?2YTYK|wp~j(P%gTr@l|Gz zHrHgNE4cbZhkn^^6BVOl?+$g{Nr*!@9@?&(GzI7R-tKah@9wlaSJ~JUG_Wu zoMY9)-~2>vSiV@-wXH{Q51EjsxR+LCc_0PalPXW2tGq=x9sN9Pe+jZ5uzKN_zg78R zAIbQKXH7(LXU|q+Qu*0k=Bp`@hmKg6#F~yd8`yQ|;&frY##$)HXa-d?B;a)2Z0I=c zGlR%y0qi~gYhC!vsK=J+&@&<3dsAw^?IU*axp4(44jo}|^MSAH8FxeN3(JZ^!d@_Q5>U$#nmIUFO9 zXYa=uec+rg*SX%I)Nbhc3#%z^>hs}!x+vjFkc^ZWK#81d(>?#FC1&V1KN9_5{D3z# zBAigi_-Na4uqNbzp6S{!yF(@fE93if@^y#byWuD1AH%UFgNNdvc))Q3e^~S4H_cAo zy!`ufLfKU+2lkuk{zI`Bwa&iN@qnD?+%Ux!eE3?`&B1){#omLbhaZoef3+0oR$mqL zDTf3Y1C-;(W7I=OW9CNF?(WF`?&56_=To>5oqp+Hz0H^O)vE9=_fL{*%w)9dQ?==& zHh2jkHg=;V&2%5Icj>Ct(hvF_Be{P(|Fle^{bdqmTd#SU1THzXHztc+#AL%abbA^; zoTN+%w0|t5>{*+1IBiTZdxBR88H{IL2)f~+v^-WoXlM-Ps%$W5hE&@m!+QwuV#vWhLL>Fl0A)E4GTV zh|O3>wVgc;D7gVs{H4$R-bXQ7^Jy&gCK;YoOhedj-7S|xYI$+*#7zOOb@KrAPMZzY zdD&;@07A0tS81@;C_U`fsh4hZ51&o$^ovW+M(M`QX|?Tk6@GR1lpMEh?t7omH=g}~ zV}Sfq*&~&aiSLDtOEUuPsMV%JFcF}PPhRmjTf`y-zK+w+z6&wj0p z{w#2t?CC-Ns46)M*aCZBbxm*9X{1nRUcG|QWIrFD)h_k=>FBL{H18i{U10jD3 ztZb3!b6JbIV%MzcNvebsQv3zOXk_=n$}*FV}Pv6X*&hpuqS zZVdk6(HKwH5zTtJEA@rkomYJ7Z1>k3T;XrK9*O81b9>c(?tRW#T+Ptn-IgE#y#KS~ zleAy8o$A5uKY%o!<08P&*wnL}me%L>Z@d)Ed$mKjVBwzIhm57akDjyLAL!D;o|Vyh zDo`di^OhH43ixmEG$&oJ`39Lxd%h1p6vmWsWI9?pe})HK7``_*d9aaUQ=J@k`TNk} z;DTSfMvdw|>CAb2Q40y;1Mgkui5^<7-?~N;T>N1+?$1Ey=Q4i3({z|VOpiK`6I0JC zwVi7njmRUquKxM+$ES0I!#x*TqpJhrcJz4^ddKj^C-cpy{q9b(KA7Nl6@`QCQQVJF zlazW*pB3WPr-wt59dCL{_n)H7wLW@czauKt?ro>N>I($`v=eLCGJnBm;}@b;4dVU) z$_nx@+R@4=-oeDy+0VZ|fAdp_A#&$(_EBBm4~JR1op}*SI~lVvNGizK zNckudGjz)J>{`>S>*f;KlF+b9m0Mm1r|N_ZgMNf1%AngB#op^*yL2o~N}Z7)2jfS@ z$)*?2LpsY`jDBtciS8)iowCL2F6%XvT{!e1R6CI<&0GE2Ycknsk32}Tv#xr2>FMWZ z_~6rLAdCJGi2E*lTPNkBC)e)T=slm-R3Oi4nZ6dwqMJHN%!U@_PhCI)CV1Vf2VY z!+L?@1m6pITmgU>=ltOl_~jo!GigCnM_jIR;~dL4y?57z-7m_b4mqeUDNQPS=hTtB zl_l-@IN9E5*ar|BxRfLrk96mt3mFr3SvKU5wmGshK2H}a-qi?QWD*l|u|6LbzQ~9t zLczr-evDyiUNatIrD7+x!}9u#*|k>KTvn~1=$rX{M+FimdPnXoWz$Z5-e`{VKQ)zurqSKbIc2F{hLfZ0`7eLtq?JavwBxY%6D&vH#kJOa@)1DqE61( zShc)Zb>Cess?uCDWU9m!dEQ5n)qoT`7eb7O!kJS1luQ%g_ogONIi5CL#4Rv2{2kSM z%G_nNmp@;8kys#IA#swqVn}>VLk~+r=_cz}$B~dW_1q>4CKVp}KX1+)=+ysPXubhE<~Gb18nOirQOoQ+D~ZaqD_KmWkx<&b8vR^jA0 z{Le+-JF0okUa|iwX(6rYXBJU54e4bY$9z*FVv)g<& z=EykUZ0aFBwK#$xQydr>o^qdL6F9eUCzUJzFjS{bpVG#y~sKw;c27h; zht9zG_W;4kZG^A~SW#|A2zbUHQ@8Gtu})_0dnx?rjB(M94-oKF{H-B*OQ=ZP>s$3L z!kS&>6RX2}D#(X7=t;AePMNPbLA#7Emy!9@8w>o9O)4CO|0^T64l1w1bol2LIb&<{ zLSX{Zr*t#u%(=UHpN(#3>Gp2t zFRVu_ZikaaLhk9d)c4Y>x~UaWbC)5*5PVS=NG`m8)F}+y)Rzau`NRHUPZsaFuGr)Z z0Th5Wu3Y5t>xw(PqQ2LK$?`K3V{VaR?`&2tp@Wpc6FzH^Y2}+u z34RaxjN^SSSq3NJrGc(9M{n?7)$)|8c_P9;e)Uil+*(9YW8U7|UrrYHc7S|uuxYf? z*0Zecu!~DMmrzM}Rj#>PuCr{L6%r>5sPPDiCF)8ewbAZ)-%+TCA`u~&0T!>Ev`?e5 z-o#&wvYsQ>9F1}r)68+c+FH&^Th_GDu^jn4x_Hhk{A0y(7X|hqg-+4$`dUT`bFi|7 zV5)`jp?NX*>~~WT-(11cWu?n_M;T(j7DOR`j)Y5%e+^;(CY{Z$(1_m?tOx}1=!AzB2r77Qb$6ZyFU0synu zysA03J~m&qO*F9)(5#?(DPBdX$O#<2*^d>>f^9(v-8~@K{*L3aES^j{JVVG zHu`o@ob!ESD-kKFJy_ZV3V*ky@gune9p~i}bJBl${U+A#u>%3Maz`?GDdw7kL+b2{ z*ulNy9sy$btxgF4G!T2b{CJk$8tSy=+Qw%3mYmj{#mD5?CD7=M(~J7zjxqbZsM=6G z1faPTt}yh8FoIra!57P0d4FDc1ckknt5ik0pi^6;sTbT6T7(l|kO?bdslvtO3b{&_ z=IvIyLU&wk!lFZWhI{`AlOP;{7k7CnVbxC%#H%WEkJ{SG99t?)j!3gOn-dG42(@sb zDpFa?fbJ+HXuOJ@NYr4}xQrwZ9m}~uzU^*5s$bVKAZ|ByLuS_q8zI8~-X$k%p@hrNwT zIZ0~|jbBpsFAZRdJOZvw!)^|t)F;NeLl;>Rk95k4N$2=)r>(O?Q7X_f^`VFJc>(Q$ zXsI}J<5WJjUNri^kcpwmJWktUbs)z60*h`N!wq7)-t5TYFh*G&T!BjtJGe!YwPGU( zrX{>IMEDaPF6hHMgK+@p@g$XD<5~3fUbx{c$O|aYrKjT)KsC(E7nCA^Wd%|57fp_E z=x?q%ER7|)d8^Vg6KBWv>WOgnzn{)0VXu+ju4eNfitL~LQsDN>bbZOJpOdo$BC6zQ zsY+lM_FWVc-jh_M;=J}9u-G|3%$4@8wf*PD%qfjVwpW?ysi$j zvNozw&J#5O=?7wweK&XWO>sIDgD$3!?(_=dD5osfJ{*?+3^YvNy?jh}D7WBMx|I@) znG-6RS(HC>NMCjRg-+kDInnBcIAkhv2QM!|?5%~XOWh~!5Qn7foiJL*L@CKa2m0R!)Xbv28@!~_P(bi~k1|xWEaAcr z;#Qr7d{YJNxK~Vm!1%Re)bg?rxsbBia_bYHeDxlRW#mbYt0{YPa5K3P^)pgdQuX08 zK~hKXBTx%oagmI-Vb%>grU515I^yUYHR3*+qG7GNlS3Y5G|Aqf(z;s}0mgF{$hTOd zxEW9gql$!aVZiYg7TFgQlrLmw2sx}|fpi?)l#<9OXDWoC+b>?-hAz#HtTzQ<4}qPx zV3&q$oQt@;Q9?XdyrX6Y>|9$Cp5CkEN2%KEI2PKJ5CD>IR;M$I+*bR-L@X`ilf-iz zR>bE-(o}c@>#QqN0v>a#xFeUEN6WN}ZVftnQW&PZ2CndBH3S-QPstLN-*e)!F-a%W z5)G&0(J%@}oi1=ivVtX$E)+bGQK1oHY2C5RrY##a$CFCQ#wc3R4GC4wr~>ZMaoCbW zHoiP3|5JioAi{+`OAi^IK?0Ki6Aob~xYT*BS^$#p`s+T}KqH8x2hR|2txcuo0Y-=P zr|WmxX$N*erh?$guIcO1TNX%j9ucFireZ3UD9n`O3(BgkP`Z#V`#`w8UhLAKv+#pK zlTRL>#uj2~sdW1`j_Yi)COO6p1K8m8!o{Vm2tF17A1{K}TUnl$o@gXq#CGK-$5!JQ z%97Ru)CT|N2Bb89Iij?A=V1bsVPBVENry>EK^44&#mA<~^)$~~iJDB|(&TX6DXlL3 z^Rp|AFQ$~6kg2-ivwjTnnfoNTYc0mqP4%GQoVPLEv{=Vur>Zh0-68AL_rc z8?`rc_?KhBj)9b1HoKDo`0s-S+Ep$AV78;j!_ROHFM=;6B*(Qk*X@9#Ia1nfeKLhs zGc%d?I(Nm55k~%HGoIh7>>=m2s&5FD24142?-@J7yUIsegOYVpy9iJoCl0Z&gh<|4 z$yl%qhV5~RfRxsA9OTI!Ic};h`>N%&Mn%blAR@z=fI9TvWY^eTEZ@Wi8PU^L$Q{$PIyg=`GuBU=qTOtdjkcAN?snt1bG@oqdRy3%}cM^>58tFr7a?`%DY_DjM6uEdK-^ymn#FGXzPB7>H0#6=&b zvRJOoa+gaFNx~O{LRHbr*#y&tFAcXW1Rf^EU%hzAjITvCtd(|dkA4@+0$4)ucHL@( zI&m%CUpT;q{F^?V!cV_QNpT6g;bX}I^n)SSi5XgaYLqwL|M)x?*QrMqk|w)jdrnPE zK-2s`#hH9uCft^ z5Mhwg4cLja5$PjT2xZ_blQk(TLnMQC^Vk34(_wB1DC3 zpkxunRGie%;z`8VnDxf}UGkk^Ov_o=+a0<=#!u+>mu=`B6#58{28?%MEcCdXc`KD; zg2;qwIVlshoJz}DH~K73p8Ngv!{>%m!!wXtYY%1bOo0LytCbKWlxsgcV*h@0s}UzA~?5E`QL)Q(AGOh2fw=f%v5?pn!s+u&^GvX2DzOLCkS#;k2>u zk{?o9zN4e0%E+|bbTm1X?oyQ8YsXQK6SLq!6=uK<;Z;(ExXe{|ddvZpiExt0(-GBI zxm`G%MYvC9OpY_%Ql3utaN)8t+(zujRRj~gUvxPM#p)(@r63TScH;^qBCTf?FxXvL z12OA}c%JOf&(N^qNNBd6P0P5)aNx+9E>}g=O$mAO749GXA zn=kH_z`w&gU&{p!0VDyYT0MrKPLi|>LL{iA>hyhA zH#6d4b@-7}6B-nbbyBGVNnKJ_;Vi6FU*z{KvY!V%CFK0w&`42H{F7$KumVxpr85=d zQ>-{hRG2K#2lm0rJYO~hN8Lp-yW@FpRQ*zj@b>lDKqp>2?2NwMv8aaPfOe1u9@tW? z@)nb_?kPPe=(yKv(N}6$s=ZpSpg>Lnv%-^`!)OU9OAts3_L9w5(AO43!E6akUPz)C zJh-r+paRp(Xjn+UVen8BhD0n>*y#Wh2ga~iGM7!yOC7_?-ICIc69h@-buq)7AEG_h zuEej(0Izafw6!HTMGjXnqJ|*&Cm|^c#T(X;0akzKau5gE#S~0bi0p^l1Ov5Ij%!EA zac{GtrdwYIIXYXO+%qBioUWG3^k+!#nW-q~^XdbMA5jrC;azG{S~QgJs+}`*La2Jq+SEcw%ye#=gwb zSdL{vzCA9;mECC4U4os$z8PU^3RIEA;qm*;PSG90SPhD-g?{5a%Q+JOM{YHc4Hra2 zMCc*YEN>gY2D*)bZZMYKYV!V|(&5RcB(q>o_KIIXPCa)UcHzlH6-4I3y(tBSNRZYX zq*EaJ^m${ssJJw%rwZ?A_uxKI)2vX?3F%M_87HQQ((Q$fcoNZosFV&A{V+bKTNOLW zQc{%JrDiHd(Mn3*Im+Qs&b9FJ>GtBmGiG!eUCTp-;jV*e{-i@G{|1Y%zi+zZD!u5s z4e7moM005em&t?B~0YaNwk9JMX0uIS9(k&}IMGNFLq+QJ@8sJIpY@ zUE^l;`{daVAp$|c5w6EvpNh1+Fsm_yV9C|l<75C|@!Z!LeP33`+Nucu z6(H^YgK@-M3EzbBe&fVhBuR@N#Yjmi!e&2sBIZM-_Uw{??b>zzQ{O8*=a~l_eT+FJ z2k}FQF^fwgMela<7^4E;0IeWwa5~G?@B$?---+E=&hQsJ4k}FYdTkpJ-%I0zI<-D9 zIaZ?tI-r0}EmzQ2N(v__%pXqXO-qF7mCKbp9jpGN?S#dV>C4IalJ+vZ7D+pJ%e5vj zc_WtGTkrKn<8{c~atFz*Ao&iCmsde@e(5b;o4X?{YlrlHi;W`deUOGn^%5#JC;LzF z%jz@`6XftLzJagoj2C(=)}P=P|>*SU_z3Qb;X zA4~+ZU6Ey|bTKKslA2tepH%^E0hxD=F=sQLTJKg?Jtm@PFH&>`;FD*jCuWKX3hQCm z{&x0;7Rhj3lvSpPk(FM7*^xH!VJn%mE^Jm9q%?MOP;>mdp*IUqh=-rY`~5hRBCQa* zlg|R;u&OXvF-q1IS8^khEajH0o`hV2Se373Cl~}mUn?I<9PS9w#q;q51Gm6z37G33 zO`N-rbu8HPo=HHqK;CtdLFa|dOaNB)Aotf#noUi z&4#%Aim$rjD}h?Hk+F19X>BW0_6L5r%$H}dT~7(*WtVRB2OntmkTHp^hf9j8O=bjI zy}O+x%$zzUB)b$0=_-srVPzYY>Q3+^^eDq#t)Mt^f%MN8PWJv|^Ql zAjB@+e6{*j??VsWs9-2m*S#Ps?SRl`(I_#I;l(eLX6lza#uz$sURqA}9x*btoHizJ zyo&$~P5`n~nwythtQ$AuGl#oNQERq3O%;|PMa_x1vG}V(C`$O8ji)BriBZZa?`ZyD zD}m&do8OD%?a3OsRfZGyf;~!`#XWjFR!%~@U)$*+#_(K~tN-Ux7R%@?=wrwHbU%8jLsEYZ66_Ot2DQX{U7tW7iUCy5QC`9e;S2l;XS@26rY1vO%CVA%tFT!;HU*Q@5F;uh zL&yHhUY06iACt7Zs1=7+6;b5SMp$+q+v%5SG~eh0{b8lPD#BM1;ur3Dmy9It_SLs5 zUh!Ekj^vv@b15=vxEjj*cy6-i8IxzA6^L!^^|Q~7Ygv&GN)L1}?N^bwrTGuYwMe&&h8qvB-Bu+)-5-GHDLtc2kGL(nkF&uC6W=1hgxOf#FJQW{gU;x0pP)iEE_y z0)cD(a#E*+Sc4n$9CLh1be*-~TD^_pnTPJ$BW0VQhk!!)vlPaZ1prIoL_V^0rMCE> z>M_iGJZ=}hDnF=9KnbguDrwrB{TPzE+S3^+8>%DS_5zzGreHtr)d;V})Vp84*syk^ z{L-l~;JE4Pg6@h~n9WmB`P|L55G0g5J6~;rvIrq07X7CODOF z1O;GDs$|T<=q2g(a_fkJ`>$TFn(>_%7Z$=gZTP56M4hA&^0+k4p=$+ReJYyGjpXbo z1SYgqcn5M1hVQm$|Na$!?Mm6o2pXCns5?Q3>aWh$bAESw0|Kc7(fYe;M%*jy*g@Ot znXVy~Ae^wWuXN)XxQ@+K8ybwruL0ddz>Qx%8530M#;?NX+YpaY5hRmY@>GVy$+9f2 zjbV$rsprJ- zg<*#eAIe^Hm&Vu$rATgNdA=` zpc;gG*;X@G;10KwwGpgwk)k3SP2EcFKf{9zHXzNY-7lyC?H2$zO6cNi!BvG(IQbIs zvT>idgu_L*Haf$hygH4jvZBw8J zs`S|g?wuJjcjmkaPbE0u{38#whgJQCeAdjz&Um@$C~(i??}F1JWP8Br4H+GJ2yPRA zXgy1(n7q7fL|T&Z%U+Z%ZM3Y}3f$;qsXOIWpvh?!>T#BFLQ;kmA*snwmL+5p6oA+FgyTH3U-Q6EmUrZka@b^#-raifg5JU@x_kQx z4VsqYw~0#&%5Z63{>8-;BA@Rq)?Ro&qF*9XxS*>EEC|{>X;uIuK=-x!JFF!zs@@A^ z`8l*s>?5YETpNi#0WITC9n`fV3*nee7g}y zWtdbc85sZ8B+&2bcWYh}cAa&GFaCN=Rey0fd(4Qhbj@bKTfx6LoDc1P1H>qKMy?P( z21+t*B`jED%QzxFg1SXvo8D0!3C>>_ysD5vMT5q+t6^3T8=qEXp^JSkD>u!usm?uiS`#z{ zuSjk+mU7iDAy(bHOvOu$ES{VwdFqh{lY!2zpkH!(Gys{wH@>`}KVind#Qcu7?Tpp- zD~5K8g_!YhwgE@3$!>f2pEWOFU%3QbCr#A7ZengHoeuZzYhM(8nSytxnO+{9(@u9;utW;r19oAIYCo6|mWBJ_41kYU@F_ zc{jPLG9%N0>mbSr+jkF;^()s$jKRydcBb_!J4uSqE_HbyYHHHX@ACp{rvSRexGu^B zU~3`Pm}-SK+DE8eeh}p0RK_g}DYL%PObRbUBa$!fFjP}%n5P_1)2k4%He^(dB!^Pu zsoddzNB(Zf=a{-gaY@rW2e>5sRA{?gF&z5=4fm!j?G>YmidA@PM8=g83p$dvB2ZSi(O|is!sMN+2T}t zzX_~G_$#me{dW#sh65JxZe}U$am(HH*MwFnff5BTS*Dx__Pidr$#JcA4=V>EHxbrc zoTbNQcB6xVN-&p;<637DBvFa%W!<32`%U_buH7!sBoEiU_V>sQ{5q~4c zb(tU`K0p99Td>S(k)0UsayVp;c3G$G^H+~|IwInVaB)p9?eQ3*1G{mwt{E;i7r&|D zqRB3|%o7@i@d*)i5zy#DnGOz1sbZ9*QZ6%?cZ-n3G)m#9ekH=NYy;;^=rD#0%5vh&;RI4uEdLqJWbCU^Hyugt^X_ZuTQJ=i-LfW#UOyKB z3bWKrfr7jRj4(9f_sCCHqP->A%oM|dJq`+aZief28drHj&-9A= zD(w`hr==HIOx8H^XveUzsZ7bq9|Y0qYtSmtCT(MV8o|O%u6ZBmYbbyAE?=m;Iur!{ z42pEhC*&D`bAi%!hFVo-Ci$Q+qUVB=WP%czEud_kdda!w?d4`lO$WFaTBI4Gk;8uL zqN|C^D1|wdp$>!R$2(Q=v3sOUIre!~uP7cxi$j;cIoo3Cf!iaN{?3|7{QYRPdCWf~7Ypsm=yL)=9MYfUA^%V&w|SSnW`7((5~Z`v!i;%wrDmWt)# zt+DdYM#d3CX#b~-wGnsGzP7QXgdhwypqBL== zpbLG4M_Wy}At^4bi)jIX6T1ZuQy5~U4?{ID0T>^_Qn(WiH4M4?u|)nBd}QiD0TRgz zEn~BNwOvlsiC6;eH=dZhSuKu40TrMJqP-P$3|_wyv#hjQ9o<^H6?4p`!R?7<52%<> z8-rVv;iiHikmCY0?Ybn_u6W}jL{h=Xg$#_5MWVZENX?p6%V>hpXg=+b3yZW2G`~>R zhk?Z+df5h}{xC75?#N}rJ$)|GAteaYgggm4|AqPJ zVhotP{*ZXia23BjwaYyhh48=o4F2Nd6$UM3XAADQqKU5>cnEf7acZpg zHpokT+H)_{|J6r8t03KjoWZlgBx<|$IwOt6-RLhps@VdE<;p{F8k0Gi|8-NngGRHn*Lc+T04D>ixIR8wV=CD3AV(nr znBytR0AswR)fJ~$uNF$*c7R?!QXLMIgMtihi&A~Sv7Ov0_r+zeXRGJ!T>r5$)|U|w zux#*{_E3b0+qQcIq#ls;mqhu7!z3^EAQu;?w+2$HCE;62(>EykbZ9AKWA3q&qUEt zxZY9K)pVHhJ|?Yoa9br&LEdul)m4+p1Bi=$JeO0gwGVUEv0RpAdT6x~gILY>v>+01 z7trQ?zr7tUuym0WI4md!o}E}DDxpHc%BbEj*>@4vWl-Rn7ZX1_tV zjqBm0b=CCYA zA?R*Hn?9#VGN#{z8a{AqbPPM`qSEiaJ!xkTT{$^A=7KGU$?S>u631WkEAbRXhQbI7 zN?od=4yeb!RF3tI^I%~K2{GoY#S)o7_O|q{#EQnVs->r|`c5}_%^BVsAqlNIZDe}r z4mEMTctO!Ixr%(OaA3nbg9dM8l~lnk!L4(awG5UXaHuFb@p33e1*wFXh9;!3uOI@N zQm0_md|veB{@Lb!L1#ll%Ve zDI=h+MVbImAeTS`qkZFdrakE}+UG>N&(P+|7FmF+rLql4EyDz?Hn%-;0To@C4Ou}Z z4&JNW*DoQ{FD^l$<2>Zv=2vLAy)`OoWf0inCHY+#lJ--3d48FUAp5c`m`sHUsfhb` z%p!F>8Q%)s_LYl;D%}sWscLI=>c3eON{8{=uwMCThdWPQor>UF#?6?)6rfkY!J271 z7ikgY($ck4D-^ply5*H!Lb>97B0UfXzQGFjcEN2_;sPjy6{!HhiypS54w z_zeA4STD4yoiv$t*jOEQ!5otI`@4VvQhS+6maF!dr<{YinpBl*$YfEy+g8o|7`%Pu zn$696uftwVtseIS<_1pQ=d;)iz;9w2opk3NE3X`Z4`M95RlD`vn8Cs@Cd5LXW|1fq zm+|G%bJ<@4N9x^W67Wg+q6Q|keNaYpfgZIOJ21Rdv07rrHF{_B#m{6P{DmGR)o@C#_orfzsF8dgs!SG`ZO|gN%cG`IHiKRLF)RuM`P{)s( zJnwJILmZFX4Pu;o*?p_2wy6LN007@xsDo#-eG18{p(iyjdncJ*7Gvcx8Ktly0j5S9 zf(r)K4Sg7)rm;(h!7&Ilw?%Z)#5=^w+1_U%0$^Ne-~IJ_m|eHN<|yc1TfNJpm#{mr z%UXHFE6QDSL`Bn9!pQluVIj~E+Q9>4ftVE54NmnxrYM5G@6n-+eUX7b9Vf+BtBq~I z01zXon!gqcKc}h+QcH_FdDh!jj!(LNO095hZe}I8(K#9+IV6UJMVgkJRQDr`GXJHA z3m=s4wMqvKy;7y)5ibY}>^e*PG)^;Y*8zre*O#qOldA1B8p~@{6 z*d^!%m=aby#IB7pbdn$~S&Fh@38?!z<_oEDuAsEF+>vqk)RUT~@=FwjR+#M38mvr@ zFN_|)V?jy5qZS$$Oo)Fe6(tb;WvWNlUnLqbasZCk5w@YdxGIq#H!7`9Q%nKZg~hvs zj#lh4W)FktW-oEdY#xTlp!J(ejX%r#5puSt~YD zA*1E#I+J5#;&)*BY6wXccr472-%niN{8;m{OrPle^vV0uJwnuHb60|zz(q8LEyDX!P?tCmrg$JxM6_$c zxF#(!VPOaBqG&!vh4p|4z%ejHJb+^6j`)aKVQKVzqG~F};WYWzL1FnVh738i8??O&WdGRl`QT3vohOBJn+Bu5Qod{DlM@8;1M;-~6%LGv zKPHKSkIPKMQX@i%ZiJ zhsktV4-LlQc0EeEU|e~0}omDI2BI-30%?5vR~E~Lik6Xr%<+4W_& z*$)tErii|%gg_>rgA0yJEt9jkdq)XKf#hUaXKnDR(Drr7?7C5Vv+gWkrdXV;C!CM0#*tG?{vPm|8Q91}|{)l?0*8W*buiq?ip?>4l7t?UhZ=*Z4 z|B!00`<6c7=`IcdUFE;ZgRmc`P})`GxbjZ+o}V~!rayH=DPS1+OU(_rpg^K4;Yxm| zl99JAyh*QNe}7?lLjT`18n}NZJA$61M|tqW7toj!x0n z6J;s@7q-*iZ)n}#bkX^~-+H2Q`v3S3iPSdeZtC{Zw*89)2q2243p#N;Jy@d^EX&GK zhP_9}Wz>t;hIpP`HYBL9);9B@aYFJvKr0`Q+2{~zr%5XlCC&meJ~xykVJJu1Et2kU z08xJP&5ZGzIj8qL{g2eUzw!IWAQNU`i`gPTJSdyJ^+Ihg%S(U!eOo)9BzbPSjQmRY zuEA&1XY8NQ?k@Tl3|=da9G7fmTCU;37%3$?(Uz@F5-k(h5^&L+*j?%;I;eq}82AxA z_i2czoYlirChigMK%eyj8VL4>Kh@TR>;kS-&~GP%JKwQ+hZ;F+?3aCak7lSGFTnhZ z0aTgYNfUowH0=XlPx#aJq-YJ!?;Te@Yb@de9%yPE+urg4O){(z#(Vmu#XqK(4^)Rz zv?lFci$)SJ>j;XvN(Lb$cZXF9%~mT>Mn$Y$8KR0-?3L_>?nEKK`A|OI?ibp0{?{e) z(YoTvLNwSnK%H=0YmyrY6#-I#FD-YxqC$O+2sZxU&pJ9Z6!1p+bvfep`H@sx3BUZp zR|R?7EI%OiOmX<5=ChmQr4BB$G_DGD65IplCR$zOLeE37{||9*9TeBMXn&p-+!_s@ z#@!`&8u#Gt7CZrh1PN&f5ZobnaEIU;2pS-G1HlP_;2tzUlIicg_c!yV>ebYnshOJn z4>Wbya`x^zve#OlHO1#|6ZD{i7|$(a?_RWR#45>97x0siJph2d>J1)T)ZFI>F5Evs zA?M2sE9mFDw*Y4~HgQ~#=*9lCZw6d+V*I$QK-h%jOug@J!TE%@hT}sv6*vGWZ1y=- z(}r!JCGZRN(tJ)dt!Ri<*hE8FC2p>RR=A5RR#M{6MuJUCIjQEjD&I#HEo5~Oxb~#p zVqMb~Tv(N=8A+=@K+*a`F2H5WN0fimYhVOYVG~LfZ0rK%Ps@6|Q;0$C2oyNsamdzBx z{8-LuY~Cu(O!=Zui=~s8iQF`IN@YuHYsuNyZbmV*DUW0|>LOL$yJQZ_DMHSe2)3BX} zi-{wqVHHD@!kY$F#6vSR-ez(d3B+V`Cb&>BlW@$_dV0@pIFWNwE0VHM@f2r9C61@) zx}vq>^m9jsi-qcH%!P8Qvs#YZSRac9m27s1Gx9l!q6*1LV1Gr&l2D3WJIqbc&ef$9VKWGYY?= z(mmt$B=?CKfE?Cv7rr-kv4iGYoc49b%@oa{^d_3q1?RIQ2i|qJfeohh9zd%j$PRMf2SU?*9 z?E{7`hTDQ}GP$=PZN3>@p~vr%BKBs9kRAUp;ho+_4ih_tnaIV94^@ik>qv7EL!tOb zi!ZuHdUZBSD+tqnwE0WrPp^C`Z1gTuKn)t~=~T4n9m$k@iENRmNMB;$jVofWWRGx| zhsoL|g|UF?u0)ZIm$Kcd*5 zlp`N3eaQ_*l{x&V+C3KZ>uiKfe~{j6LyZC5c^d{JK`J(FNr=Tq%Lm~w=T1+%TP#B= z$@{p(q)0cai)zUaUTIEM<*k`MDTUa=aDX2Wwjs50e*UZFRAQPQC`8!V@`_j|AoQb_ypU*$Je|1MzRWl`&RaFM2J^Ni`R?))2qwFDtrrzZ) zpB`tqj;H@3n!?4YQH7^9%PM72rX5J%9WC3}yDk0cs4GlSD;ckce;htX{av{=3@Twr zzSM06$pZSGL>3(Whel_Tayvtv53DI$%u_(0&2*lyGNi#L+MP(bm71kLV&(|_I#AzT%e}=uip?PM32N63(7C@ zE`<6!EA~>X;+I@9S4LwknC)On+=Ev>23f2@=sZFF^BP6AZo~6j2ghI65aw_|m|Zsc zaY!p{*5y;pzANSKsHMPWz%Bdiw|CdGzgf_0!Tua#-ESuP7!ds^4air6t3b1vG|h5v zEJGc-hf#UJodqoK?<{@%`gnRYSLN@-J^S5?YG>mx0(y!-Uj#ho+*< z1i<8B(&*tijhHePq4Wd=@EDMCj61>qrs!ZcL$&to(i}+d zBBoh3QT_6J7ONqR9TEp~zP?3}RLQ@tGc!L%`FkyhKF}KYkVOPEN6(;FfceRQ#ped2 zuEwVvk-v%RV0dPEnAQ~eAGM1ur+Keex)QuBpYSP9j=tsoFt5tj0}MU+TYs zz2g54l*IIM9zLOW^&v6MnN5*==UeQO!6(O^LLqIS8Q_|^=9}4qI)NwwQr}L+e>UTo z)nf&VkM70BMlw+F1X--Lq>{V}cNXDU-k*G`6XUY{4FYiw||46GrTUNgn!3)hqV2Z(X(m z9P_rMF2C6HlD`iUnUi{4f|BVv7_=al(*dDjnP-}T{hgfMPZv*phyYavpc!O%xsAf& z(+UXErHF^tSbT>{vS;g=1VyZY`Tj9i&w7o#HVKk%K0KX-OtHhz!V#xxq5%q3Ty=8J zlV&bSJzV_#&DKhSw<9)?M`-hT4ch+ia8i@@BnX`uqYFpJRcUI(;TWhjcPu5$OiWko z3izVvzLqtasppbwI;vXz@s4V`l|+wCenZ{u{UxpsMfwps=Ni}C3ZS7uN2*_OzZhBZ ziSQ;;eAB(+cj@=Sz(|u?#e3PsvTcK#AeLkY0)WsK>!BuhUH^mZgNEC==py@uvR4{g zyJiO$)gMIB*vmxsSQd3HrJau>;@cW>(c<7~YYqlvrH|Yao8t^WZOtwDsLRT?Xve2R z-Z!OfY}s_|6?mH{FPH)oPNV`qBa3Sf2Q~|2Kh0VIN{7oGwlc=fNLc-2e1h8V(1!X; zb<6UR7+}zc-2rmL2t%iUl+=gyDq-g5kdB60xAus)w$As{-hFS~+W-4t+`-N)Ay%Bi z1h2f`hhk=ANj^x-=O1A-a#U$u7+cV!!FS_G)h)I(Eb7A|fs6sJw~iv*Ss>aRLBt zs8f)+FgrZ1wna}sMJ!BBhvA)4$5N@jfv)h+U~dc{BoTtO&ro4_p@LPYkMf4F_b_X3 z)rjP~gMeLWYh_^L$~%=B(bo;S2iB;cxPFk|CLDjLXz}zQppClr#luCX(yGfMJ^NdU zhuu|rq)FhOi9T!o#%q(68PM8TVu<#_NOrqwW{T~R!#)LI8U{H zftQ_$mbwr5g;LQ+;p&(bbys#LT zo$pX1`ALT+TH(YwqzHjPzb%B7dI$J&3a@@-bAcumCO@0OT*t`w7MjtPJ$;Pm3=fp` zOj~K~ny_rA5SEwE2f5*c@^JG?_4yth@7@|aIbt=%(`$Wle{$(1oKhPTyY)jN04-~; z!z&_F(#Xglq)Y*+FmMBv0J7sv=?Xzp&A>*jTi9V5*EOycAB~0nLnry}PqqQN@|CHgpq!==YBXFI|^~ePmGjZ&wGjp7V8BEwfe{El-e7 z`jUS0;S`dJ#Mu@waO;+7lm3FJv%i0Y>q+M%k(0R{AtY0=agx<{8tTu zky|$y6dbInz9yYLJAo(HcKA0Q%P*EGr6@OpJ6}tDc=-3#ZS`8lJk71to&0m6j%J_JkG8!?L(f?792rs=1y)3fmsnW_ehC7j zs=>fZ2x0>`F8H_Qn-J|m$gimqXuVoI11Q9x6rextbb$hZ-C{rjnY6V=!C3S36L%^! z+Yr^mNX}vg@%nQ1nEiR%*+NmR&A~skzhu~Sc>&UM;oev-P`)q%ubo1gxrRX`yr$KdLp@3%1ukKWdy@ z{VpXF6flv%w;!lp>*GCzyp+}KQ2r!N(211_RH)%#kBX8Z8Nm3P!tChXLorPjlBm)d zf*N!75Xzpnz$Zdjiat;h5TPB)(Si6Gz=C`eN7Lcs^!|NK4VjKkMIP7A<~5B{ zC(`Xp3-+({e!qJd&*Ng+E}D^U3+J}+jrj8A$>cU_R)%w@5gP-Lr8E}h&}nH9;McEF zqa@{uRZG{eDM-rdF&VRE~aw9b}FFHFkK z(Yl_`A2rN=;G}uuWO`#!{$Zedw@3Qt8$1T}&VZ4>JZou z2}}hLm70x_#o#IGb=d5Au)D#rm{GC0cRWV;Y(0dO9d5MGAisb$|B?ff#4;K?N2e_R z!BL%hoI`xg_m<$$3s<3(c!D$s0|Os-|6i{kyR|$kXI0M3aTZkm%FmZPQ`E1}zt%MV z;d{yR2kIvdSL7%5F$5})AU5f03h}hF>wtKoJHm#+&V+>t#;wwhADf#>PASbVcP&>kFX%bi{N_D^tpH9lKs2jB-atG9P>kq>pwYtRPX9B9OXlDaL!)c!isSjI*8>Ap<>zu@7c7M8ts zzqg24{|f6LZFxH=lESN3k4wgzo;c`$uDZdrz&Rje;^2CM?_iztCg1nQIDC|{0qjm+ zPWJ}{z)Yj2Uj#MzIx=VGR+)>F!~ohh5P)PcZFYCr>UFeVU`y7XaBM@!6Mi-ZD#?b8 z0OP&arE@BM<(DPj@{ap0Us>o2Y3Zr@@E)k^RW4S+iOIOwFX~Tqhf}^2J8X0MOjW`J z;%u^dy-4}F8p^(1r)P~VUCtjYF|V9xXwv+sl*MaOxrp2$`_0(==*|ye{XwN=_#i&9 zJmI|tl|ymD>%GmM!`{6R%OvNk)F+8=t17r!zLH6_*YZ7>X)6{{h%R$Zo_!#pBZ{3U z)#xglA^tJ=F^82UBPQ?@pjUNw#W8DjK9uxwzfpY!bmTt`3i~QB*XEt#>z`HJyit~sw5bXolhuCzRJlZGJhGA5F!w2v%@WUeY4 z4ABoBbn=o<3p<=%&U4YW&Wl?p-n z_u1R&;WJm4=x?^AKS!iS0J&HOnv2I0u@l3BPVw~{K#IO1+~@JUbC@p$TVSZ)N!41) zxlq99-@n!3R)6p3{Iy<)Q^;R!n+MD{N=*uIv$=nZvYw8rNQ-WY7Cxj-JG=bz`fb6} znyUxY0X^DJyc(E~|rTI@A7OG)u_&%az=x zh^!|X!$y0g_XodnbD%*xt5%kiQ=_XpzrSDtrGM!uPG)14nZ0pvu*7k?NTc9_8jJod zGy!EQh!Al84!ocOj(myGl{W*=8xG*s9T0MZ zfO|9~?BnzBeHM>LeOsP?Qy}2Z@VBE!)y)pbXWQ=%?wJG@c!Eq90p=YO2}Ka|7JHu< zWk1X=KM@Q&F`dVjPWm%kJYJF!=>JIOzO~c5M8e~}bzh9$(+EU_He;>Z6D&#BRhx`w zl7*C!V4f|U5PQ1eQi?7f1a8e1E{caM=rD?HE8rtXiq zN^VF%NUvEc8!LyD+9l!jsH@)>4D55>#h>o<8I}S1f%mCtyEL{4Fq^QK_m^ba&*qd3 za<~HkrF^&5Nse13iER%3YVP);zU0u!=&k+Vzt@9De^y#tJ_MGg9#_bP=VFtMFsld< zfwEL;g6+U%xSI>)u@$V^h9IL3SwY1*JkwbxKvBgWr(^FxxS^a?|`R5CsivGv3$JZ%y|x#he&ACQ&nSsz=;96U~+VFyMF|qRkEV>M;PX(*qu$3;LS2&vtAW zK)>fTuZq(k=^wO5oO_b%c_#NdFAvWv{Jal*N1I2E*PihIt@?Cs|JUUfjt`xsQ>b*6<~3q0^P9C? zrCu#ccI#zPASrz5V;d=xe8ilh=~c4SMuxd`zrp=dhO_=Qsx*-$T6FX#+C<>uei`$d}ezH95b znO)f#ngBoeuDV!4vo>Dvx`4IcJF>08V@HRZ1jF|mOFzB1lZjn;^2Jp*ZJ6)#6)o5YRQXn;U(6Z#ZwU#WJtv2T*}Vi zY>?=;%`HZxw}`!R4bC~S_lvbpmxPqtXS9a#yPuuBU5jwnv)&LPF_+Pn<&|#7G)&lU zV^04sl`G8d{%ekdp@d34b=0>eJ;e;t&OK>nJ@Fzl#&Di1Gf`DdhepuhJN2-a zTuI8tC?Xkf0EdHtd`9gQ0&szO7t$2&1bA%tPjpS{rV-t7ov>PYX;^Jvowm_G`n0eA zQ*?iaYRxU-F|OREE61#@c4+NE#AX8;ZdFE!c{8INMlpx+!uX*BfNub{ucLJz=*5Jg zgLy1lR@R;};9mF*8M&sg2nz@E%pX((v?TO#W?x-4a}$ydxuMd@=xeXaKaOm`e19as z?Sr?vl~E^A`$e!?z0Z}$ea)NbPg0lHe>Qyf@7W$)rKuP5ZLLtSI0&O7k-1O76fdFH zD9Lv?NsUTrPn}eLUSdDFY>{wBBy0D;KVljZN3t+e1IXx4&&xkFUj4Qk^S@dVmH&Hi zw0$C^EaId60$A}k$a9teoi1gZ#vlx6!NIe=j;+a@J~5SS-Bh z%~!U?wu3{_4Fid7DjTyt8Dz)7S8uNWWF7q4cfS5>@+^J$sLI*VvDrt0<(*tb?cvk* zC9S`d2Iso((i|4zGKG9Pb6)vB%yu&-=%GAttspogZpCf0e^*N>Szffi9f%3wdpicN zm6Z)qJv{hr9ZwrEbh-EX*Pn}PvD<5tVNG(87dm90+W0p6j&#!=Xy;)fy|FQaaKTRG z_m}_z%tV1Z{LjL>*XV1@A6ljO{pUQ;p(N53t;e!*B>zlt>e;#``1k%{AOH?9)3l|^d z0-~(Lkvf(5U0@IGQFEk63RNXDVzZ69lS8=(W8d}SBGo{Ez+bbwoQkx2J*z2oik??1 zd!hW2=da6r^>h2jBEHB4mO6PAXzRml37rgpQ{135f0Jj!ET?S3S~rK>do(KOtwrE7 zdL;La?tLwwwpBagp@eUtUz}XgTHFsu155XhY91Uv+_5Z4b%}mw0A*szqUXTJ;NQk3 zK@VkWYvGXTEy)*Z_pH+Ma*-EPBP`NYjU8)j(mMtgD4pHZmP%V?TfGnf&L5Tz0AA5c z{Ai8%=^V6HO-4oj#xY$nRSX+S%Elb}2tCo`0alw!_ufza^Uy=>sxToo4Aj6Ck#ukf%{<0%Jz6<<-*!wJ_)0nP zN{`T3(gi(;$ahTT)z9M@^|ck1l+2fmp1N6Q%m6kEzln%%c@Ne;(SMr%-aS-fPguI|!K4FqT0VRN zg6jkDEg&EIkFDpURZCOH0$tN@(MmFNJ$$pZTC?MhmEN`IYK^YZjY)CELafZ_Z^A#C zJ`Y=;M&a>ayZ}-Wm2BToF8q5R?ylY%YnW2F0+oxQtF}ad>VOso@kZ8KYL~8SS+z{3 z>1fqrxcnd`q!`=Gc)d#r{hE9Cuc9BAf41>)1nBnksXRdr*^gJ4H@T&*Up1bW;QW*= z0J-)!hZD4S1DJ4tAP?QgAj>CDM*Zq`Xku!!Y!`ldO1Cf9y|L)l$F|VRVbRJu#wY&A zx`!_C*aUNb*OHwE^y;7>(Khj-)+7!G<5W19-8Pn4VvYq{Ye1931;S#KaUBww7#iSN zK_rM+_u>*-^H0PWt|6EbexJn^sUDs`o9!11?7=x6dPDuPw2iMn=-%t`<_DwZgn(=( z;i&-HHq6%r567q$>@gDmnf4d)E1oCT>5qCVN-10JU&TxLoLEot71WoCF{H&yFp=WH z|J6MJ0gK3f=wwfUhNgklL%&X8sbJb8o;G2M@PlVO<-p7XC=8GzsmfbD8+((9LJqz& z-6Cy$nP&;x`4u76A0OL;Cfj$N8%TP`?Wd1hyFEKzNE7^+O~oUuk?F1xB(cTK{E7vK zB>p3`yJx4pqKiFa5&nwCL;amT4 z(KqW=0K!5M2Om(uCEfcHhXo)b^CHN`g&?YL;=kSYx4#zL2_C+`^$7ghTg;l6%0)OA6(uM+kQO7Q+3V2vWdmsZLGOWe)*>mIFZoi6C;^{a5ZM z=LX|vyP(}}iJ6XT@%L-poIfcSqh)pQJpXAI4YA3f8@m|Pt>#GQ`RiYCpFtOUqgca% zNsNfaHY`EU!@o;i8x<0YB+v$(vhWiE2qx&%hekK-%mCT5H&C&_hd8<^DJZ@8^nch>QMi$ zh5!{~JOCS%8dTG>0)E*6EVL!0zJyN!K*NnYX93AR=VwH`)ybi4@Yb`HyGf#cv5C!$ z&-XdAFl&$jT6}!J(}Kp%tmBCc)^9y-{fBb&4}gaovk$3e|F7%yzuKwB07MO}kwZlV zU~B>$B)&DUa(+jKW73b6B*^?184~tGxQ>4jfJ}YlHvZq?Ndstp)jupXG#ThWTpuuC zNH(R9-m3ji!ACRI(1J!LfSL$>yE8V!yem-`dSFj}!z$!Zk-kSnj`1(p(KY*j#|Q#+ z0IvUn!eX~ZuN(Beu6vXcRZ~OVTQ!If1XCLXi2nOL{&$=r0D*RG{d3*;ccDSQ5*$Nz zqCep8g8{z(tn2?mCrbDaod|sdzeuLE~X zZX*8|s>z?i()M2r0iNE47nU3MXhX+4?=3XyaqD@y*RONDxvsZxy{)kJ=t3%6%3A~9Wo`54&4uM9ck5#lx_~R$tZ5c=O4PYriMPWEkGI}(EgGv{z++NY1-bb^RG!G(T%}*t)v_vZ_c{9a?A=}A z)vWOzCd=LUdGX`wc-%@e9Jv6<0U*I;xQ+Ah2bKo^Sah1d9M&%o7XJJ5EpHQ!QJ18o z@ZmYO!(AH%#{ueUFN0*&jotXX9uZU0VM8|&EX}UW`1;TiVMC+Vz3D4%Mrwm;(dH%9 zW*td2kyXwEUGQhsbpW6KjWJJiQuW3p9Xmf}fd@ty1uDgygQxZZtj8shfD)+$cT=YP zxTJ)mf*4^G_RZY4&`~~7=f>or4iP1K%~swHWk&WyW1qSXFm`hWK`(3AWq)5wH+jFc zp&{Hu8hT<1SP*LG=|sMCm;ZEGRRRR0;)9@QG)P)W?UnAMp6)!&Eik}9uB8uJ1pX|4 zKBr{pcjihFfwt}mrprZi)@Xb^jc;^`1d?L$`>6$DObiXe1(qRtJdKGzGxo z*eU5rqCR7YJ1v)HD>f(ZPN%x4YrPAFr(&~06`TeE_DS-R0P9j80web{0GIe<)8ufyzAE4@uiz&Ggu8#cht zvomy7`!?_=CjHL%>6;8g4Cq_SCgUMNnuQilxY);-3U)wsNhCI_q>g*1veLM}WXTlf z`YP19C@Hc+SsLa(ZRjJVu&GA~(Wi+tF3jd`(j3&*L1ite8B}IXSluu)(?YF{#2}rbt+f-U23bnf{zcO6rrJueq)j zWA@a|)9qMs33fVT_JYaH?0%tlOpJt9lX)gtM`SW2VA=~Xf-qlT7dkBY0Q7mI(8BiJ z$<=ul#b}MN2=4C9jbBs|>2!`alZk~{NFNoj3&8XTaaa4IGS+JRBf_`9&Zhb>`Gi;;^7fy6DEpjQBg3g!;w;3Dlg!|FoRNg7Q@f$KN5`#?v4<-728siKDOyX4bQLS;k`!Rx zgS2n!5=(ID`Xr(vmZ_|7%kM^IVg z%?TE`z$0u6k)>|qw_*#h&Y8M0mnLLV@9dA+uC<=7zt(oe)$96c1*4+2 z-rhNlWmH8?k>^8J-{73}^XXgi@rHJkbCDb;pzYbIjCsg|C$yRYLl6%~YQr z%J9_H;GWgv?v*(&?cj*do>y(B-EE6k zpbxcpsnF>HLZENXyb1v9%lb#tC$vXmfeUQ_Ig57zLu`)KPHC|`6p}J~KNoYX7OT6C*<&lkoJ*P_?U z>8w_kjMiGtWV*Lt5b2}QrfM)%<1PZm+^72Ts_Q4WC%#mA1gl@^C5Sv7de1oKPTx^gZ%FXI+Dt4NwnDjfZ$M$nO$28Ne!iCuHK@u{3KduI7@=xyVDzO!4(jq|bV0O$1B^FnT}Q@^ z_LLk}UB52vApf#X@P4-<1BgAuWEZ^mfLvn2+m;+GaGa`Ysms+^vUaN9w&4SD3$-Q6 zy6csadr7Dy?uuD?wZwbH_I?8#AK=TrFWM+DJ}mss=Nlk<;?iFCm}rI|dVK0I)m>^V zR2Jw{fH&5)5j4pctvgH1ch1?p=03E~l9oIM^7g}hxQAeH4cdo>U2R(9N*Mg#Pbcs) zu6dK(I)wrh9xWmOyXwSb1Ggt@eho?i4z75N)Ap$z0~Pq5&QZlK1BSkXPF*EGBI`=2 zgmjYDybpHE&BN7*Azqr`7cVi?vp*$R}D)c@=$eaZfpWpWcj;D zE{_?Qc^w1~Hh@OZHy3A>@0AiICFcJU17x$_ha)8BL=kC+M=>$Sr98N*27(vP(IEJn zs7_EJZ~LpM4dFg_!08!IwPKtEX+r01+ zzPYB}w+YZM`)nE)!-8Pc@d;HntJ}aH(xO$_cvxk_79=nVlaL*#lkAGr7U5q5jPK#ov9cruuYLR;L$RXkBqe(O>U%)A4iT2O29-%I4vJ*cW5ik=1VGZpcA?J0 z4?XVEv_IpfgfCD9oaUf#x?$E8CLqSUU&eHIj;1BwejOx}gxNOSLOvQNR5)6P+ZHmvO025pZZ&IyUu zUi@qa+G$+0%T4W3UiKoI3iw!e*~9}%7-uXbFe04LChGn^6=adPvxjk$rjEl2JxhR^ zt^tl>nHq7i0Hzy^66{y(?`q*tCl?oIUo;%bdXBTs(pqKpnkY~ zofY5=zv)9ZosKaB0`+f%GQj30^y^;?RNX{E+fT1yq%*?!dRZm9c=5LNrtX@Cfm=>| z^v|65%R^RLR(VkE+`eXEu`L?w27P^B;Uouq-Z)HdQ64Z#D3r1$T@elr85eWjc>y0F zm*sX4>sGKV`(OkWFn5wqjxSboen#B+WB-!@)HGD~`I2hs@)1n&cWS)1T0o^J?_cEl zRp3Lp?+qA=oy$jmn!~d7Gfz0h15hhQNZU6ZFRss2lwv)xok*^f*bJ~SOngXQDkmAl zx=WdGE6y2|AeBXcBj8W8$c(Y+1JaR*O-{pjyJ|cYR@!F*`07G!i=GaPy_v;dGKI4S zBF!*aB~zI3jcDvA9JCd%A~6-X+P)ZYiU?-HQz%MDb;R*u$)T)Z;p1| z$A55AK^+Q|XzD)6(}*xUYPgAcYqa*<6Zm>!vl1xirtQVNTb zG(lqPup~Ani%g`pJVY?Ru-fkxLxZAStj*8v`;+K&3WcqfeWf)EoPbdk^(eLFDWz5? z&v(ctlXMTU**iw4!tljHM$tgN-4=o-x>!ia4Sf#;NYe6TQ%6E)3Vq4o_nq(KdPp#_ zECJXWu=Yjd9QETnrY(JoQ6zMIgYg2ns|h03kuT^ zL4vC=NkiO+(enrqpD57BkS-7zQBps30>hLwmD$slaW5izt2z34a!M6PmvhiK1A;>m zhP$dV+MxedRKJ451AM2H_=!f#ew=VU$1cWW1!YuXQOG^;0EBqN$y4P30LluJex`qK7*oHqt?EMo!c%$}(&Vz1< z!D!gb7Y)`+pN;#9Mi-45UGq0ixERzLE75H%_)h&wk%kEaKFX`|7$NmF2+BZ$m*5Vv z4yLPDY_(3oS|oBx?XR_XtjPdM678r;{bk|laTWx!Q}SGNL^0fjbFMOe*DcnDPSUv; z$Fh)-K@-B+(sbXwo1EIhG-tZ>Z2Vc~dV@|_I?j~CDK}z;uqU$bIA1uUh}`MimIqn% z7z9Ryptu?tRVzw$_0Pa@zNaD$7(ktI3%QD}gNXsg8X&_dVwXT1N=`#qpt~AS43nz+ z?(spw=8sXq@xnU@ zCB_jkzP~O%_5i(aBkX7dYP3~T)4A1~FA!Q62(BA|={wE#daV3B&!Zj$BM0Z3p4C6|d>kAWSSxLMA0QQ3fa+nf;d+K0)k4yN3(xUpfIm1s z%}RwYZPXb>!sK4nB$a;;=ZKp1Fk}Qh%_g7kg?JelywMa9G?eG3jv0jc@ZZPpEB7mg z9;ys(I4}lFRId9SpdM$*MIAc9W7U&##k<{rd1?brSDBG;hkD4_AsQKA>>A0 zGdCBI2Ocx>p>Nk z@B|c=bfD5pOE{GFht~pkat0xDNW}YTLc|3E(|yCydoZ zX7S&cPN6XaJnhlsnr5>!baUufr0<3Nm=aCunpouipectm(EjaNk!7kX6N?yDSh1h(ooIG zk^IB9x>O)s1SA=qwI3N32R(~dT`#Y~o%Je2l*85Bf}rq$R3v&|mTK}@C_0J_$^Ato zEMIypocosTN6`UZd1_^8QVR{5VY4(`X!+4|D%mC5DLRj1K3^zIxOWHx8}qwd;wgp# zcc?nmr`XLI`5f8QMENXqqUYzR<14Ci3_!OSvL}XA#pdVg`5?~)cSh|ouR3A@ z_?=8N=sfVkO(Mt)VEM~lPs;^ESL*4HAvQO=OitP8<=A^`5Ug`VSx8$|rVcxWGipwI ztEa%L#y3X9OVnVNb3t*gNjyWzUgS(53?gXbM3egjQleJm)ZyM#L1Ca<2pqGk$Nl-k z{X`9&mmihC3+7a4(j?Vf-fw{+A?vv2oCW1m5R0YaETxp_{!*$30Vs6__Gm5{TH8W% zeQY(KB5DbqRg@+(ZZ{wt?xld&4O%3i1~euEFLnVqM~AW=WGWIo?y$h#BTA*ZtXZ2C zN&xG*uCBs`)0lSjqlG;(?XxwXwT-9ASS|9*_YLjXtDSIDc)!_UvYI??XvlHE+KFzq zRna{(bxE-nsaAvO(J6%*??++k7~ygmILWHVl7qqt?fy5W-UFzq?fc_B2_b}PfCT9# zp@jfm(0~-h5E4ot7$8BUC{+Ri3IZyqH$Z5iNCy!VLJOft2eCy2q*$m*Q7-~2Aa?Lt zuKJF@H*enm%y1@qCc~_(v(MgZ@4de3!>{^>WN2CPy9=t2M9nlX`~>I9WAYNO&y?Ag zBq1R)y~5Q=4+VzS%7gLV+QOCIUknQvRJf@}*alU$)r)vxICbwhtmZ zu_8(_8vCx*8=>NS;N*4jFQGfckP>$oyE)P~fe0u4!ftOm#0EVs#qpc`ZUfm~c?e)U zLym(#2X!uMM#Q)9!sLHmam#XVf-5~R!C731m4w+FW*UrL6nf?vw*)92q)!*ZY?@-R z@&(q0x>2m?8vX`>ikD!ez6yrqn0c5iac*j=H&Z}1@!s{50|!jxArXB#C=NHPpbb>wk1 zcC!waGV?t5WSrc~O0^Ga!;-6kWkC`rW+CP^kPRU);UNs^u`B{7Cu{NC6sQ5<_zSoT z{OUzD7o|^&6dz_gJ@(4L%RU`H5$JdDqB`9CO|Dj(Dkg818Iq%VQ7Mx;&}k=z!8os~ zbLE}1?QG5xX*Zl<@!A)0^h)m;$=ZTCxA|(xgZubmEe~dv{HOA7FaSSGq&a6?*zc8l z!5=|R*|}r%)+)cFs!?+18|CHFkaqovVw8S7W3?DhuV-pMRGjY#Mb$*%66|eYh^<8M z2>jzWIPgT?nq3?z%1cD{O6AwZUt+pTj#m;G&$=B6fLu6FRs?8XD|8xLl^qDI^UCrW ztqtCUFPXR-Js;RvR&Zl(rTitt!i|OK_mug^uS0b`S9T-pLONSe3j2r-3`}Q+_W3?& z7t(#-be@^pQ8tmi408nuk@G-rc&!daJFSRYP`Fc{^#qrV5zbFm87Y&fiwmUvsWrN; zFIjr?h>8K7VliX8^YA@GtuE@GDrKpWO?Av^^+#7#dTC954 z#kali*(#|F2jyr)DuJGAI)N}dj<%hqIS_Sa6k*zByqdwZ+IXgAp52sds8t8qMyGJ2 zX483rtC};JG@w2bm^<*|#lr|$bZC;BqrJViFX&m3V1V;?O4T*rZr$2Uxd|D3cJNc# zs$71rYhH0Knh`3%t!CJ*({wB&LQQT7Hq_g}!K`H=(jsWtTp})E-?fWYy8(x<;`A3n zNdU<#iw`kK&#=oe1v*F^o4Z9JGgT&uALwGgg_{9-rgocupZ|Q=srxuH8tO4AM}-jegwbGAsLEL^s=NjS=C%2`oA8KbcQM*mZXH3;(N`ROZu z2ouPRWjfqg`|+Jc;9yzj5+#ojL5UGsqIOkTPkoC1ZnWLxp}}f;DwibLV5io17SPZz zF{(#JmK~6a(D9utX2YjnxuGo)WTYk$N7{*TW#roPN}B(UU$Cfey0wUm6FVX41PF2JnW@e^S z$EFNF@q}&H>GVd?!n9Otg!m7EEBGm z6adU+cqL?`=MA_oL~LJsGN8qT9jy+f|sAZ^$9Jc1){>37q5DaQyupFpQ!Sh&;k3D}&^p z=RE`GoHgmTXKl|>z89ZXFR*t<{=?Xj=l#wwt|0KCN0yk-lZ8l4we%ZmQ<6YOacNvg zohrqEB{emLw2=ysO;n`NO{=S!R3VN~Sl1U#&&-meRNL7LU*z6ZKc*!mr`o!4?tDO{ zbh=dXi{-cs-CA#kT8 z=wVE{{G!%&;KNCH=_$wueK#2Dem&A$vjGb10Eto7y+O;$d>h1ZE#U!pNw~T#(cwh| zX=~(S(+xARqL;QT`7~@AM%*c#`NBX-Ps&-UQTKSHq;h#TyC(KP&va7VGBbk^1`$- zxRTH$-9f*U2?xF_Tuj{2bjG&YK4#KmigwVO>RKyK(U!ai;ZnE9CR{hNzDbX~UHv<{ z5(em8YhqD*^kJky25f(}ngI-Hh*XxWkyS4LbtVvzw31x>3aYF0x91tQs%29hanQo= z{nLkG1Nykc4dZ-3)?I>QeC}orK@QZ-9>~2V18m%c1GoOzK30lV(B9uG=rQk|9xJ`0 zSo0w{Gd?q9t^DBq6<~q+Qb~h?{3^k0SGUBCJvt(mdLACc<+5U2TWi4*H@~ z?uF}r%h<9ybt=N997;L??kAml^=C=O4j;CRwI}~`nV@)AIeBpyQ6s#aHb~x;9po}4 z2BYlNDZcHV$=W-3hp~&u@`A1SG>(|`+nD+Cu^5Ie;^z)$8TA`qFpFNsYN`()vWutl zc7pVF016V{dcbbvoJsyDwgp}D9u0M_qgHWu2(}L&(zO_aKLK_KmG!luIRp5*?B1_n;>m7#)yk!!+eZ2%{7xxJpQ0SMDw>BA_NGvBpQHJj^&Y(zk`6Qa z??vys7b^7UY83NuA)yB9x0Fr~Vkfl*aKx4nT5+TRb@RhEdDE^H8_b1G2h*7jcPvT3 zFI&|YRvSxkT!ZX8S6>On8w5@}gR%|*a0qj?%H!%mU)2^^%bTe82mRP0l3#ePNY}aQ zrlb^4Nh3yH3i}VMEoRNrh+O2AjXI!yMRQ4}bs;i1pj^=T41isYh&Eqq90b^F#{gHX~%CKDG zzO+Y!1K7^oate4jz|Ylxh6gLdX{rLErg6~qmwRHI#xTjn1`e;P zTDWJNdOBrbTH8l_1O_i2B#n%Q@9w?xsftJK_XMURv2zGBN20i`dXtQazqU!vFsC42 z%XPI)Ta|bEV>sN7HqWeoTcUqQeSM1i*cO=x5gVen{{8PTT%~AIE$k2$Aiz0*e4NnM-`&O$C1c*I4@xESow{PG3G;A&!%BJQIG60spO+=!|2c(jIExVD zBC4@D(tx&;0fvYa+dYy1tQ!Q922B-WlWa2oW}Iq^9C@X03rkk|UHNWF#dO0|bf}m) zIEqC8dQw7yKlPrrQwl~QN;x&ObRcPE)?r<^x#1EKTb+0L-~=BJrPi0p)uux96r~)* zV7Cx=t9U|YUxe+U?2Uc^5E3hxY3mMR(lt}7D8_1g`>&RqZb_3DxoIVU!{;h;^8U&- zc1)q1B{NNmiH?4C_e_ha7XlLa1s?tG$)Yj*>jNb~9(+f)1Ii8nVE|O!5kHsuWEZRA zg5z`EB;4>W3w7R^^`~jMp0M}QLH_PNp4LnjnlzARp68(LjNh%y+_AK7dM902Eg+|s zLPkvDnjEzsb6Xfp9YgESTf23+O%qA%#;J7FDTm8zw`I5-8>@Fi` z6_b0hI(w_lpwHlAVnPDUR*n-8n4zmWFto{DOooIcu z^Y^U7UZE%DOtMnCndst%btl+leev_xXKHL&cqo2`I1}nUlMxO80i<^i&q|cERC!tU z;z%kO^|R@*q_RqL`9hy1{kJFd_tRG=YdV9fTNk!}pEIu#Gg2#$@tnE^M3K^zq87Oi zooa%Uc9Q@*4NBx3AYzjMI z1ta5#Qk=~QSVCkFH0WT4Sa+GnqwZ!oA={yW;D`u;BHVBz7dy|G;O-()Zx+^;hzwsqy!w_B6 z4LR%Tzvtm@0YE%5ty;+)D z`z}AQeWmJAECF^NfEtjYtpKXLL~ZhEZCuG3%*WFyHjAae2$E+^hT8Pe7icywQ=WAbEDMubpT;wTZu$Q%ZtLG zT0r&q(KL?edTo{zy_&Mel4_6QiUM5qE60PsEnU}LS4)zdr&i&6PYu^`VAxg0i_n{_ zjlF(p$bg|)xY>$KZ~QTCE)ig-U-dEovgH6fV1Cpc5J9^@gQu4ZCyEr+0%)Y0X%SBQ zTvU85+OWFQ38(D}M!H4}#twny%aOo<_<;7hNK65#wu9?G?V>%9hqKRr<4gB0b6KcX zT#LgeIaC>yb%#z7BkVIyj1Q-1J&#v79hAaoh+!$ZxInN%SI2vLBqH>P+-{i`-SLK) z>NTN5GW+|oy%@N~Es6+aNDLEpT=n_}RZAw1{m3!bYd^)wGNDGS&=YiAVDm7bbp&`( zE>c0B0MWI#x=~Z=Z+Nr(#*;ohQ4tOI^c~S{j;A!^e0n|-)#MjC|170ykbo%9TzqCI zb?dZ#I^iQ8=0A{8HRpz8srJP%FLY1+`s=-CO$Ls&uPb5z1JSSr6=@`ag|?Eyx3f3z zn_FH2n4y=#Kw8xf!2aA{53#*&j0U)G`$MFx?{+;Xz4h$4axyEAyqZ6rUDHXgQPvxe z8`fRVYS(?wxg!~oR-CL@4Mncr%N-HNwDv@+0qizV@L2dJKU<1szcJL%7%=bl*GV&i zgGQTLeGBiTO!!evf%ZK(vrP&MFbz!UCK2h?JTGS`KLfn51lzq*WM`7L_F+Lri&7r+ z#m{%&p!OsLAgM4p@Ox{)mpXLy2(^2afykwt^o@0_24eBg!MSMM=SffeaH{jgI)4~K z8fzkXD@oo}LnEd^PTvN}K7vZZzIVglf_BL&xJ)lw?MkZxa+LHhO?;lR^QtT z~Nr^)a}S1_ zJI1rjz;Yo#S+1}%yXGz!pX|B2_^Lq4t!&)?$!;PfDoTs<;;y+i>O|Por(vq1B~e!P zG@e`0ak9H%PuxS8*7Fx6wbbP=PZKR8YgYmP>&}?h6eCrj1*Gc4OqJUh8xaTJsq?J| zJ8Cbz%1R1t(2pyTbG@=OSH8zU&g3YI1;YXk2pimlG2*R5rTn0yD}^r~E`Kat*6QOh z_M_`~otit+VdV2hUN_ zQxy@=LUTM%Y{5p|RXWWzNN7J*og~TS#S}z(FU6=W9=oXA89aO_w=PDF6?}6KB~-0~ zK(|*lpL=xug_J9?*2z7EnEqDiqr5zPao4~HSm=4ZJ@EppIY%Sa#aP({Pslx1CwuA2`(f79WbBulxgPBJMc+aQ@)t}U#)-?#RYBAJf zp(O!;H>5x(rsGt64sZg{a4jyrHBie9nW^O_r2u(<3R%j~X8F!&YouMb=AR3-N>gvA z{rJcyn&T(l>w}!yCNN;YUTc(=ne=I?bd&UL+5^K*52gWjaPj3_zaMY><(tFECEO0q zvuKC*C~}B~mz-SnF-xo76nDMVy1%m|#9|=g9N>>`m3WTUa{qqq7#n)xCn$mHJD^f{ z@mh=u9cTgj0=RCtf9N?AjYWWTZh}*;@xF^Z76IWK%t{Qz;mtJdp%Un~UlBIQe42tC zy{jT@cTFLJx6ZC!3pAf;I`hyg4c-6Qe6(I+B-WY3sN}FxY0lEL)>QH=m5xU z-?1Ht+{t81+@n&-AW=#$$3q^4NmGvwXb`M`=UcI-7O-jRMx1xuR^~*g6tJTTbaKpc zzE4J#zV39hGHAYI%fL8FaouC@^^*@T+J=+RsW?y`M9b81K+?tK?lQO;2uaih+l$J1 zKoXwIoj}C!3;4(+!i?PoyGhJ_0unRaeeJN^wUouo^RDjuiN-$+s%nyV!z!Ur(U74- zC6YXZSeK1PJiZ{ms0M#6B~a*W_924DRvw6DB)Dd_6b}vomM4Z80MOzI7h!=W(5uep zMu!wSOu3&(qUlEE|I;K*H=1t~wfJ|mt1s6P?7e&r1HIVlnuvQ}p_d`L=%ZtuN*8b({QyD(0X zzcd|iFLJ_2trlS534qAnhYs-{QDe8PZyPIm~(Qu z94H@DwHAIZo5-l}stH=ZI{W`OKuTS)<9!b;FwCU>(S$`o^0-yFty}>^J<+*Tc?7~O zMrA^QB{52`osA#T%n!*WkvR;NLbzqc&+js-C%&$a{v#m;9t&i~gsQrJc=Kbu??4wu zMZy+L%XXkZ7{EWP%FwTD?E#CX@Z~XT3EmRr0?e0Zi0i$fvn|xBt(#794B;uokT%f9 ztj~qgHXD=L`+(lS1VWtA^4^zZ#1xswXtMLUhxoj?vR;W%kaE*g996!XMhRWg#7lo+-hgzRX+|Hs zf9QW4tV-7E~ib*0b=5M^&Lbe~%Vl=F; zPF5tN6dLL74eKAN8MK}lQ_BWI`qDqj^B33+x|VD#$5HdiDgwqhYra9dk9*Pc^v1gz zeG%n}O3}j;NjwmM1)c|WoLY#u{+0oe0m?vA4aW*yam<*5n*En~zGLmqDmrB9sh3!= z3&b_kcZNg=r68bR<+RNGk+G=3;S5PWUPgn?!4;DgO_h`tlCIAbQxsiM=%Uq$I;II+ zUy>!bJf2jAZ?KD5B2l3q*gu!}V7!+Q$*dk3n0sf*sd`C4a)&I`KDkwCAjLl;HI6TDIAS84%Fv|rgsy7)rttC1^2c4)FSNB0hA_C{ z4fq&+=;lv5xi}3s>SPS9nyi2UdI9i7zq|Umvoo9&VXcJD#q=t(U*ql8U#K>BQnwFQ zwf_6dIxV7R4Wv(I5zQ{XkOab^03SHtm340PF(!d{Vq0O_P1M!mwnuXg!|JjtkWV01 zXs*lbn8yYKT%m*2$heq18^sb=Y3(B zBwEe7e}p@CJU(g~6#OTe0)RNhsiP+MVXn3&)f1S*7U>tf%xs)lk2E)#p_?}}pClk_ zT&es^b8ms&RYu$<-ar!R7<_gV5Wswy(scYC?6>R5$KNE|XYhQ`vGX-?e?7n0@e zZS>=n9PK^-x-%vF{9swW7?sT0!&-|yCP?>KuuCJZc0W4`3q7*>{<)EwLdaQJF;R-V zw%Uz>503nMXH|wEFod!mTO`oaV4t}HNt6|U@#x;1q7KvBHwuuy)8f~TGWQR5zC2@C z-u&~W3is>&>CETZ>-DGO9v^K*t1pRAliXvtIJ!--2_? zLt7x<@!jiD^{<0de+<19RSix)zGs@FWd+bbkGoP(=)l%W!#nKNMlhUFd~-|8J*qO2 z!Z$b5rpJoaN>yRO-R(XdH_IN`{wO@Q(QRfRY#|O;(v5cuGo`1cs(y(5%7|c2DGY`* z(&5P+MuN0*Sx8j!Q%x`0DzY59;XLdj9uXu`fyBZ8nCJ7CRmk0Ya^(MZguU4%1cRaI zn;Ye_JFF0(z0G5S^Slt)XD^f2aOR&!4Isz?%K=b6cL1M{_s8U=%j>4oVr%u*JRZ5M z(Y%-l7zBxTFeKO7iVwq2zq5GV#PeV^_R-6|WKnBjb6y2PE@kPw z>Dlvew$U~VGFuvvWwLP-A_E5*(YLzFi;FIg9k?a=@ruM6xSV(#?RD@wW`C^Wf1fcH z>+a=xeoy9`TEqM<@&0ERC$l;+z`PnUD@j4Bp`-fo9!#~R^zk(z2&V! z7ltG*72}qX7s#vWEE(?*9!y;P+HwLV^TAZv=0l1+WOfo42qkj<^8t`&mYrp$=KLYe zVK`szZs1H>c)2SZh64U@%AX$I{?6%Jw1ma)&m`q_cXjW`s|Nqpp1qdr^LsBcH6Hz_ zrK{scKpO7l1A@ zda4j98DpT>PIjMcwv!S`0r1M7ZiS5f08C;sGvC(Knp$P+Uh9?ITJa6Qyi-bYG}lWa zOBl^KxC=9fd6RK+KRG-p2nCW4`p+jP`IhO`c!#Y=wqw`~aIM ziO%okFsrIU`)2CaHxK|fW{OxFYQeDmFqB=60C(iuu#3~h^aYr@-3j;TkG#)~O3R7k zk2oO+S>Zfjws%pQh z55qv_2}%Cz?JXHBaQ30EPs{J}>%Bg=`4T%h zpq8XLUDsQGz`E?^K|<9rm^dE%HyW|Z*V#KPPfh!8@P85{YoGwfl^5DYc*4!P@Lclk z$s<>c)pOMJz;7;i4VEA(db)UjwF$SAkfi{?2+zR{qPoNu?)>xIC}7#pu?Mmn7@)8u zTTNV9(2Zu-Is}%+>LNAAEf5=umB@;#zN0_NKL48DekAn0n^{oj?=QwLPlbb-6?^?j zV(0of@c7~`9qb4n#WunzDdy&yr@LzNtG!tn%!7J%lb7e#o9|9u!0BDtMg$oyCX(#S z9i>oW$TJ>v*Mp0FeuiQF=}W=-5vCJgZs|Ne{_dK$wqf3d4Kuodl(pJcLWmF#s0RWC zpGyN}{Gv5GS|U-1!b8nTZ604TbFK8gim$zH=-n1DK^{wr(g#q%o&jPJuBkd^5HJiG-nHmbvO7rSM12CZbOr~6Hmq}< zb^g26ck1DB+Jbx1?e_t@hj*Z5E8u?tdxJBS8JmSV0i=oM0<@@*+$?N^mtBtFwfx%K za@*tgzqb413Aaw6+fLrJx?Ove2pGEFsMt^#To`%YlwFu#L(NO~3N)_qeOu?^+c(u& zMO&8NN)guNPe$kxk9gHUQWq zxOEl#BcyR0VQZ8KET-63zk@*R{BogY!%&jC4!f%APj6&1uwHn3MyMr#|hb41|tP0sUz zi)Zpzl3xlPSc4Nt#WwF5oiX`2Vc-+w?H2X4hv^?}{{M{DO0=Nb(BG-f4xG(F?ozEMe%S3{*Lc0TXFmmX4>-@GKBwJEw;T2T z@U0>suP6Vnn!Hc)XMa6B8f=o$tZtCRoM98?2Xz?bq8yW|B!{F@&;D8NNA5>x268C? zN8vER9S+NxX5_og+Rqb-pQ0B8Z*E%s$eZVg{|)ubzc$G%Q>uEtzcZ|_qWdk;6+*a> zddc|QTc2w`B6o*d?wb$eNh!Cl^8#e&iC$r(N9^%&7nP{-8@Z;4kfmisuD~}yMhE8K5 zHoT?@W_qG%Gq>3;L%u%cP*a5C74`WL0nY3lMJm(fH9kdJhVYr)1a~mKkn{C zmql4XY^!B}Wja+zV{J_VnxhgBAP-qxQ|KmhzQOO-}a4UBR|@KJB?H z>(}IecMmdLmWJ1o+SE&{4g{Vn9XgEV=hq*^zXeE&U7rqiAyfqT4_p@fXVx6l$%yNAK&k7d(*&gWKQE|c10@NvS}g)(uzusC}{4!RTA zd&s)9BBA}Pu~m=o=D2@s|D8K`Y^J}OHqE|uvYcFt>&mvPek%w{h+7y;Ekh6i?Ssl? zr$*4JubxRP>Kv0~)IRoMZ4qnU7N36k>y0Z3hZlxTfra>{u-T&;OMAEL*?m8c2B#v{ zyL}@EiV_ZdYF4a8gnE@p1s3Yr}rWVaU98lP!RehJCR6RKt@ zFNjq2;#<=LO*FziC?{YMla7Q6_*z(Bs8?uXXe_?Q;rP6V*A1EUG>7b0uN1#c8Xr`u zfAdijMp=>pl)3d}Y4J)VesT@PLD*s;&H0SAITnW4KrP-IRkRvY#WW?-GDr(w!f6AT zp09Km)ora?Uni7dqzd&opjzoMQVccesY;M094SMpuXR!@0aEfaN)(JOD+;Pq5$TDM z_xH^$uC>7c@uZOkF=)b~{#W4EA)PJ-t#T;L zooX0o$g@l8HP>@qEfw)7%aVK#WyNC(!pXIZx@&Qb^3W`e?P~K1uXHZqO4-?VX!i} zD{&uZl5sGv4k>Kp;Hqw}lOW*oXFEN-^kz1xULOd*6PLPewi1H9QVrQLF83`GEp82w z`3jhsKajQ-vlDBTs6TTjM8pQZ)Z?`>y@H3C9=qapwK-wNyA8d?9=}2mFXFPqEQfjz zs~v(#hwYKSWZB@Sm~cOG=mmqDBMVcmsEZI#)5FCo+L`%Y=0M7rG@grzUQ`|F%aDBHFt#9a_()j2bsl3y*8gWDHh$4r58 zYuv>@7QgU#_5+Gc-pDnFf%y#L!1GEuMIKUOEv?RpgkM!rBY|-*?112g!W~7z)d5|9 z^eSC1B6X10t>xP6uun$)*_k@CPg{|cCtz6S)UfYCW-V$*{m?psh{}G!8$R5vFP<$uPT`Oh#Xv=ZMF$Jx$i%4WH~_ zJx;vzumYkBs5{-b@?YD)kCEdF0+M35M`e)qdL7t>~B_0lk%eME^{><~etb1Thm3 zZ`o^O2L45!OFUXP7wIKypX|koFKjBRA7@U0MM`&;2=q^Fu6m(+ioW)_DG;>H0d>cp zBy;V1%7~tKR=}nF^V<&n+n8q2UM4)&$a)46YN@P+b&sCVz6!hghOii;tXH)b5gCme z(yxH{f7Nk@B*XE|@v#IsoHSCJxNp;%O2Meo|Y>vGv_j?~d03PGvQ=d z>&2ymt_{;HMGkxIbo^FVQS`W+J})dvTA~2!e*6t`N@9G%?TvBM#xEbM7~@6DHjUvu z!TM@zj`tK_sM>kkUjb2r?QHk{_IAh;aDG@uew*8`PRtB7HSK-tMVqrVi8A@r{`J4@ z>UZDeG?g28pqHjMFl-yXTws7ghA!f+F_`l}NVDnW(JERDe}t~pFAyEQ^VWI!t{mF& z_ntx_DvCmp@$<0Z!IW*r%^*ryl2kPAZpS|C< zvHj}-SJrBAO|zB8m%p!Yk2;;TAA4K5Yo_$@d-gI1JexRo%F9kQbwjxAh4Mw?H0H~q zv3Qdszr-(a^K!kOtCt;mz&X5O6!%%9>PFztFgMp$h&sp2Ndmq83>W|o56iS^h}D>I z-sh??tl$oTz(3-~1$V-M0z>eiz=LI@K4{YHXxlup?)OU9Bf(>eop3mQGa;RfPnj71 z=wFDOyZU<-A|tgcU%c2UQY_{iq!^th<$&b*(zXPLq&65@V)x@Vd4HKn&Uer6d*yrUco#1Zlm|VP5oF_a(hj4U#Zl+e+wY8KOSPc zb(h2&3e^5GFjhgBOSI0pXb}IqDL=dhXWRYG5MA-mm;-LTzAtZ9^WEl-@;`@nADGSk zE}{J4$}7KU-GW1V%gQsEtmJ&mJ*E(sRY0&?R^PF`_Z>`LB95%Tv-fc5d?c82IMvw> z{oWur#&X;os;8+!&dalI$buA3zDGq2togh%?9#4+4Ei&r{28@IZ%s`~VDUVOl z={pw`w)8cj{P$Nf+GfA_evyh;U{(r47S`Z6fzU(i8o7wcdAhIjDDK%bY4I%+5_enB zq1at&WZj+Eq~jW4H7S5s#{W~77hWxXfW6V6!8crY@ee_s{J9H|gs46Te*G)M(fD4I zC_Z^R1lSnY6<<`sqs%(wZ#j7!g#j=+arqL{iIE4vup-*Ow zpD98Y1&kvk;*hF_j!B8RMaV`Z8k*R~0Pc`v?o#_j3MAGZ;o*Q3PrYZ|q3%LrZFYyu zdrW5>M_!~4uX^e1X}A@W6SA+M zgqiqK$O6(pMRFpPd#pON@{jbEcKf^!FzjX_KkmC zTy^o6T#4=-sB_$glA$qj43icQxA8l*LP~u)fB`m}G(^fu$nhcskk_fp$&!2qXuiH5 z6_;g8OM@IK-+jQ#1Y!fdr8cZ`=wj&exqZE!tQovr@Sgneb%9cpv2BxqrJ!9Q(M=Mq z!_27jy%}?Gybfp?r7V4)XvA)kF)p?jv zSuA%lD>gXO4BmR$NOJ6+UXw1(+{I!-iRZe2vM+&c6h^_(1 zA6xUl?ru=NdF$SNv7MW6&Y9yEC45#vSjJxXSWp_;2?l-8_L9e9HO1L?E!>z1=t$>b z3ADBug^UcljBHg2uA4)yKuhUz^Y-MWq`dZ)+Z9Ycyz&o8|1_iO zMo3YmH*e-@vTAc?OL!|Z?e#KhW4*%W!?<k=>T0}IQs#Mze3Lbwi@USSGC68``$JHG2qBY8Oj zl!4p~1qw(LLZktF8HdIxuKY;C4Kktn?KD-tw#JQ>uNiU8w?n-f3gd`ZYn9dU$SJr6 zQf!QnUWTi}2}7@2RwPON#MM)G@=Y`(=zeF70*K8vXngKpq{4B;TVN!`KP^aAbZwWZ z*!4CzFsG?D8_JQq2jbJ7?g-)7iai0I4?V?i(>ji8lXZEYeNA4|{y8P!p55K+{@Hf| zisubf{KSO3LC?FWsmn@@W?rhMdTJTE>0KmU-I(yK>lH#57VSc$8a3#d8R1|y^~=oG zt|yU6$v9TjcYRsWVW#Kd(SHdll4=8OYCk-sv?WRwZc&qCBMVNMwC)}FUI8I<6Z+cy^klZ-c|4e z7|zZ&BBxOD8AQ6%0VYzI9cDGps|o$@iImanqLYRi4_BCGshqje$25$@tg zMvA&ZBmE*<5=nLAmHuATM42BlvfB3InEjQ&6X4d6I-GsB@4~z~=|;{`Em2 zUiQJq6gzC2q#A~t)hVbhd}`p*#JK#uR2##!3_Fd0G%V#U*KbKRB8<5(Lqh>P6fBX8 z!iei`Dg$;&7D{T#kIV3rj)@MKdIOXI0ID6ZdF7A(0^rcWWR9B^?UC*(zOJv9)R<2e z6I^y{#?cG9ZKpbodd8ceaw6h^13E$q#@t;dW4#VAP3`>XgZ-fFP^A_Dc@dD3U+0bi z`f34ohjCCU)cpC7N*OL*l9c=QF7j-la+XHgtK(wej?Lgx<;487B-oN^)-_jvtj|_X zf4oiJwfv}S*#lg5(D$e^ie%R4W8mt8QJPRW%&6zT;)MPCA|LtMx6Oy8&SaLlnCt19 zdkEEMqob+*kH+%9aqsgwYqeEs^_l~6rN;8hzWv;WZ1!u(&X96u1E}IG@#0|lwL>Dj zryfC^%X2wc#T0a}y75*!X>^F=LY#YpbvmiqE(I8-FGLVr!JMeC9<sQV2O^1qWK0(-@xc*IK zYkoBuH@^F`u)`NZ0G?7jJqV0Pl-X$74&Gd@B%{g?+Hu1r3uoUye#K+*WY!b);_iGS zpEwCaV8G5ZY&ABVTbug)Xnp+BY9(6e}6Z7-Qx87Db9+;-MjjCSDsNtHnn~4P_iZ;iW*e1?} zHhw94U8`OD&$W_Y^qqM0Symskz|&2rb2x&lQ|qxh3Yi-{YO{*f+Mu*jXSr zeVDKmd8!ej^~c!Y!p3Z16#rLC*gof6HrL@qwZkg!jl~XnaZ5`O^OEYGKfa1SK79${ z^e($^&BRE&KucokXh2zCL|25bP}m%K@PNsv*Y$ZeQ+-y-mPVWp^U2b?nrChXlv99_ z@(=ks@}y|&jTI$nKkc#PIp>(xOtXjrTK%XMVuAeP!*v7tHne3|`zfE%v42PQ^n%AC znjl8pMU-Gvr&HIUjJ>c zfWEG$coONS-)h!r@3CwstaFD<1?0VLDlW*iS+Qsswcs7MEkWy&;ni|*H85yCM>9@Y zllN**6kd#oldv@k6N>3n>)Ih<0|PxX8O;25%At~zlml*3b1-ul8i@3l`2saayV019 zV-<(Cz6H-*VG0q#Qt(Lr>F z&mi=n{|zCN=v;al`9{hFR0+u8T$EEM9PDEaD(d?7t#xWQOk(G0OmDjV9+nQPn7w-S zhOc*IRHyG1%8i<V-_Kw@ zVzRhy^9L^2Un)_%45FOV4R}eSoNH`@{xkh-Q#<^veQ8%WUgu0FxUY-r3~m=(ko-Hz z>dKpk+Zr-HJy~$FavJUotUqDs9v7Jj=p$AMj7iT;`?crl}Oz;0g*PF*f+5Z3E z$E?Oa7#dp*hOC9`rE84ASVoK)WGO@;BMFtdYREG7T_RhWeCwamMPhiR4DDq zb+!G@KA+$BzJK?9Kkk3d$2s%Y`#jF$d>`BE^?cWqn1D=E5zICnElFVBbW`i<^^Si1 zLw3+Q4uft9bN6k(FcibkPq4LIG_17ko2WKXYj)il->&v#+m{csM^9Y2>EX^w#WEfl z1%(M^wa^^s0FquQ0ob(ucSJFEx+I<)Xv)vXgV%?}q=AZN|Lw=S^Hv#~C~j_TCX~TL zdvMQ&=0N1jf6nLK-1_!?&;6pkbhWtHXLn|;@|3N1?1T-}mZih5_q4!%)Txnfpr_I` z`lywPFQ8g{H@jvD8C4JPo6r)z_axi3rwfk;4n%34tQcM5%s>QYroIKH+JKR3$Ydpk zLeBjswv(_ zFKWy5jBB*QRTecR;HheKEHObrzv{P6O7XAH-$y#_ed&dD1u-$wptrFh#;V!OP59Sz zwa3oH=R4OSGpL1`$6pbx%FiUReIJtVH|U8f9Zd^m_ou$u7VI^l!{{UY{lxNmxJcOg zKlcJix*J0aBQWq7(u}DrrcD(~fQ+jz2@Zq2Dwy{?snK-r)IsBGqi;f?!lz9&Y%S+% zrL0BoL7%O%*hzA0>d=$hhPm#TgCzsG%co?1`T@R_5{{!=B?tbsOzZpS3~(%9QtUh+ zZd{!KjIAo0o(EG)s=-%l|NE|uxEp4mIqmf5QmHIhKd$xDai+gyIi@!()@rVt;imci8m2k^pVwzb3l(7}_{j}OY}(V2EK zjdt!L87tFG2XhHZ&Jym6xGmiF{1z=%ZJ6^F8hvh<`IUgu4EtW>+D-Gow8CE4SeOa5 zbub|?9K1P)|JCSZo!xI6#?KpHiK3LXmYQjs1AK&zwxyHE*N)GX4ONA%%nCtKU1{9} zYg!hbq)wN~A8(+uPLY~A7hOFgfKT^5@YX>}aM2v~ic7UW5W5K!_=4W#ml24<&+}~B zUkfAG#`gfTR}xDnPeD^jo(j_N3vx8+=u|Y8FOb8@4V#b5&JQX^AMR-IW)8s@Y0TT< zx2Xg6E<~+uim-vH!P`@z+@$gKh>4|MTX>#*iNL;ULZ>ue?51+Ssq;)+GQcg;b&WB} zYWZ!z53^~cQnNBQttH`p&g1Pn!)8YW>aQHRycGm0N1bvtAdx0VfSCPYyx%`+p?t0+sf*=3d zMj@ZU6L^D_u80!pJK)mGS&r`Q2tc@Ztx`QG9s$g!c>A6PXq`ttYvOW)U=NHQSP;W; zPgV5l?o8)gBMF7#%#qHL%O`P@36IV~!lQE;hqqmQ=|nuZ7rWMewT zRCfjzBufXA>m)I)5#oED#p|&`nRJE-OXqSDGGE;rH=yXSoRluDDN+e!{E1b_rJLCr z*XlA9kDU~=?Tg(8$=HvT1H85p?(-npa9pcV7nNrtK0niHASGgm&TUQ5#NdJq zF=>SDil|TtF$F@#20t3VGQMy8N!xRS`{j%)9DBE)`SKVQcF^q&lB~d?EP1sC<0Q3F z0bIP2=Wr7eowGhj%#JvjirT-?>{Dn$DT+VS9~khvMg?^Czm2>kN=yh|0E>b1|@_2ncFQy$B4qz1G89_<52QDDT49&Lj%-kG` z6E?t5tp{C56|HA@SaX?a%8*$%wZ`Z&7}f=GpoS9)E>K1d%>)G~%M6y!a4+qnC-2%WuFTaO@`xhd`Nm@R- z{7=mj70EvX5Z~ey!1wKFx7o7?w6V9r>DvX<;2}8kRb|n;+tfe~9raaZI4yFz(*@5D zLx0=+Nh#FT@^$o(m~Fyh4?#{+PE;-}XOD|XlnLB|BO$7n>Mt~57MWBRtm^!AzPtY^_enC3uqr*nRVGKGwY-$VA_Qy{p$u zIyIXKU=q>71Ye2+Yb!+7NEa zO!Q<2TI;Y!6IYjAFNQZAj&rwhu`yKDIqLh!erA%f;yGca>YTdec!^GJ5wAL!yd~gJ zIj2?=7m!eYt&xsL$@HkyGk(>FHivUPYJpp#I<+9uym_EsulzS7tqL@GYN%`xO$Pcu zM6rc6*UktT?nClDExHYK{#Hz<7dR@t>tc+#Hn8EqVtY{mBHMP5_BkK}o<0Ii7ZqSG zLE_-rV!-W2m~zDh^h0P2RiOlRudRr)hg(CWI9YKv`Q+-4DQj!`H1)$BQu{2g2DRxT zG4q9W_6|pADx3G(CA+QIXk$|7Tg+>0E0KR<;BAI|#xwb$vX7yVWzpY57zF)oleQZ;7ILx$7{}z_KTO_0+q6 zW0WZ8THMU7&rx0+ zMZq+WL{e5WXd)OrIur8#w=mG@LAsnzMy7%&m43)CfbHzHGYD=NfgP<)({ zWMPdMLnq!w6f6HRQX2BgKL>HV&f1L^;_&Cv7MBfJI=?m&DH|5ID&0n%?A+zLVrMp^ zw_c54MISDB>78Vhgg=mF`oLW;d(3dmdjOB3=ayj7?E5N9tF7k3tKSef1&P!ope*V* z!8+v`HrN<|bApou5Yer|;r(9=Sg_T*YRNbN;re!}G6WJ>le8bX)w6?5S&&i`Cw~@O~twW9{r+5;67E}&-2lr%aQzDwVoaQG8qk} zyhe{2y}X=5f|X8P`Erw@`Ed23?@uQ7*|G1 z1Tk`ATKC%`Id_~$M5Vj#<&k4MSat>LXCe^N|F(|9=7A5dGwa9eIUBV}r2f6)guLI^ zcWNh%jyJUb=tjJZgIr?|t_)o?Nsu4F*J@Gn+( z#jf$++Hr0qbE0~4kpgV#*RAbIeloBCIg=#JUKw=HwjxTJ;m7aFGZw9C{MMpynXwMm zOpPpCd7|!FSnrP1V(l#pe#a|TSvN%1cO$u}_O*$~8+y#%EPI^0_PskOaeHc;3`23GF;f`Zv%L2^ZAvb&UMN^k($#RES9tDw-h6oe>vzp#&bj6AN6?3G zzp=_gE~AP3V$%3(x)V*mT`X%0b|jHg3e}!JXnfU$=c-q*#1#`I=%Obid0ATNK5bJH zZ?n-#wd0gW#Sh;pTB#%?8>D5Q&Y)~{jGb|UpU9Y-PKt4OE3(@14wjLtmRVt7@K}v0 z%=fv{8`3J_y{|+(Q0?CAr=`ZGoymb?I<#(15-PP#?0Z*3(PJ#7LRtB>H6w9_%YR}?3ffz(%7n~oK~i&Nj>&y zI{KqbaBwDEHpxgm|Hf%`!u>Q`@rUT1B^WO8KG4>wReKO_`Z0`=M-NMi?A0QJELS^U zd2o`$q^3i446aL>+}!!S0LJFkd6aKviOI?zQ>sccu})XOMIXI_7)hRUTRqsj@?b3P zLYAsulp49_86RnN^*RjIV+3+%fj;2A{e?sFsUV@;UpY8**Xb?nYUwM|d*dBT{M?&k0=p~*0buXH5Dl(bdWB!Z@EXjz$v@< z3iGPVbKll$7aO@4e*U6}Y?>n$t4zZW-rEXqI6LjNjv$ridy)X0}DkpEpqLuT3D3@883r0cM}|K^!#bH zispN(=$e{yCSg0l=SA^tD1A|V9O;5Hq+|=N9b0=EHeDwv$X~JdXsTQmB>#I%8*`ne zYG<5#(if6S7t&H(4t4_e+xZ9RyYuF3o+$#nT`>pq@;+M@8w0?-Kd+$m#Ot3v=0k<0 zTK>)%Y5V7|9(EWiBo~|nrIN+h9*31TF|%8_R@{K2P3O{yJE#2s2U|v%(MXp1I;-fzO#-ZjYb$9v43a00sn9~j5TL41cg2RO!6uo`(V3EL1E?UR zO%)!a%ym+??$ivo^{RYT=Yo0)bnjh!Q)Q!upyuYHXLeuo(U2V8~Z$ zSOsNMKr7|eJ?;DFZDbVb+MHxYL3XUh_@PZUrb77!Tv9W}>aCNvVm^|)Le??SRShdm z=R6uA=r~HVQW>nGt&Y=vOkfs6rsqG$fhUw5V(7#T8TQwh{vDx*A+TXxBU=eFDPRoI z{ZQaY`mfAA_nNA94&b`%mm)-Kekflq-fMS!Lnl0IBn)kM+4Esp*WEuH4EBJbi)Fo4 z3UVwdFElf#U)%nun3bciUG2W`*cZVvJ+4Tq}(%G7;|6bJ7MCp);=CtVX++xn*4K6@V?hz6vZl zA!Agv=2Fx~w$zl%J{W%cBKybdc^G@(vNT`Y6)dIm0ulXxI#R>gE0zXX!L|iWA)KEx z4-bS9l}q_-=NKAf6B0UEm40__+SoN!4YPjkDZkCsy<9f=_j{Y6-&RQRo6|YGM9!nA4Mz z>MUj%uYjlKjz{)>esU(UKK!uV#QQ{v5i)M7$rH&wmqObumb*0#^o*6G6I$G1gRvf9 z-{LruuMfWfJ$BC%yG(gF zm`}Xp{x;nEf#J5yHS1h?S-CXH#0^YffXJAkY*+QC51&=NH0OpJk|QVluUMsDlB#Fm zls}_IbToirF-`-KfGgp{*>HV^v2IbelN|xuJ^9sh)V3GJOfv-RS2xMCB=d1b!D=3l zEQGNM+a4>B>!vnb)};#tPWugmFD9_?RtvK1T|eFcBd_fUe$L9Yl=k+=?0)MA&=~|Q z4iQig`Lc^x^L@tqP5sn3eaDKAdgWQiCsw+=2usrf<;R1;@4L+Ob_TwT{!=iXjlLZ& zHxX$rnFx~;r(@;3)Dp1?t<(S+(O-W<11`KgxY|F)?c{_mRb-+fU2U(&Ny772s zc(9t9-UU41&quPih!bb38j+V)WhRx#j=6dPbm@ht;xXA zWJeOBK{uT$A{Jq&3EQZWk|FPUI1=PuPXKOyu+Rxe*2S%|3_anvwN=>nOg-y>bOD6D z=x&B^6#6^#$EdhWY;MN2eag7dlifB-xu>I2q-*wzl?aZ1m-R6~&au}#2=Co+BJ8w8 zM7`o%mbO)rWU$Bp^qDM$Dx^FeqFNIN z?amQ0lkyA+W?F292aP$gHnyh4TB&Q4%o3|u4xMH+1apnmA?F_xSk)$aUa@L8t&RY= z>6q$>gQ#4U5j`>;m&@QznCS3}U)iDvcxd@XPEP0tr`GA7M!_{ToxLmuA?jx{Y@|LA z;2z6}V9AKg=joCKG`Dp@y_w%J@BMcUUpgwE!(NAF_bbf6Al7gf(Z4YCRG-!;$q#xB z`C3lxH<}BA2`yO{51wO9`sfvCNu)daF_QtHj@oD9yf>(2o zru6RI=(}Vjo7)~1ia+&a3!*|9a|e16Ny9%qY8qu`Q|!9#v}l_Ax~%S>wS&ra<m`&a=%3SqTa*h<;FXV_o*d4z z;bJsc6IsY7<6(^}?vAzeFeljef0KWuM^ek~!Ya5#u5+^82a{+2Tr~n*){GWQ+79IM z~`JNa`DeV4%~*)!kPuggplK=*1cTva0K3-g-VFvq+OM|WhH>nku}Db z51`Yrm2Ozww~vt|E#TX!LbVJKJ9vdYEe2x9JfJYZa~2gHc(3j z{5!ON6@L*u)#_lxF|fsy4tGCYY3MGgA1F1N0r!T8d#L!~!WnHDxb@w_pO5lB zcJV9BNy){e(>{7vF?49sflV`QuZ(lJQx`K{t+}$cF6dy=N*P_&(^}>8PhjmBYS)Tj zz0ftB(d{ED#$IZNbQq#XOIVb-H^#R5m0WUnDH;VZw)Z}Xp-DVdiJ|EJ>nNDg_=idx zHo!5Qo8x>~pjN-OmyQCGpJ8a1{7V>sRPaMbd+lQL&MPih#v@v<$n!0`VWb3T@c?xk zQ>T*NH^&)29ET&HKgkzr2d=hUcK^7?I8N?Su%Yr}tH5Sc?Lj6JfL6|+y__5plHaNf zQ&3_>hIQLg+uwSMMaPSC@&=uV%wxr;Y70U3ae5rhPmj#OwWXrmTHT$s21@ zG*hw>TD{~n>Ou=bPW^$ocf_Eh1ItlPR;vVAifM@;eYk4ooffyZ{9W0PS-_32DN-+g zR?Wt1SW1Y>Pr;;;)L<&W4p~7WE}%@9igS@6@Crb=b>7Yw1<+VVH=&3zmgfYIilhtE zR*yDU2LK6*Towgo%sF=L_xceqZG`@53izH9{BLJPNh6yb6LqhfWoRDjI2Zhe}j zLy>JeodyVE3l(?877EkzB#YefC&@n?L5we5sJk~>6JV!&^j$*F>~a%}>0R-h?j1+6 z^B5i%Wq_0XG2qDbg3o9=AdpR=r`a$t3E8paH2smuIGarZ0I9tkb2xzgV{eoh=#RCw zfVV!Y2JEO97<)T_cR(%vW%OsW(t-Z7_10$${*FG|IPCp#OL)#9$AdhX$)qkEMJUUU2Z3qTv&%BNd0D?=J0TA&1U!UC8N7%%6tNuxrZeuo||=rwWKQ;i*jJ9VA*l zX;5tdS-Bts44racYI}cnU%6#gwU13gnCiOEJxzKW*9C*7;1ZiL^{Ka4(E$inwK9$k z;}cl#tL{>doUKF%vb3DKn|YeKp7EU^V8^3arCCXTB=Rxd45JDdY*8lId}fzO=U13p zD0cT0Xog~U8FDVkY(G{0I~3~TA-ekpf(vgf|8Quuo)2(2;&T{ZXoDJ(ae$@E@VvJVs3q0Chxliu`vc8Cx}0c^j1sB9M*TWm4NFKgRFIO0vmiYv zyqO=Dw0yB8!mBq7nqM7oO707{&Or`r>MuAXUL%QMd!WEG4-^?53tUgX zinC$i|BqkptP{lt3r3-!OK_7(Hfq@nH8lX#F$aR=hBYyAX}Lul^ej2p(?wkQw*}dsZR&>X@TYnd&~xF!(lc%Y~c~o0oJq4D}U{sCK{t+XQ1YFNz|7Ji+ARkd^PyjghfxG!H z4R1(U3zQ1KZB_{%o+$Zf?`DHyo)b%V)Ykq_76Dji;%*N8fm?cx zXr6qUqLLzpRbz6V%bU>nAgZPZ5-o@qu&*{O+4Wz)Y?mj=bQWDw^4qlF<87D@Y8YLyeqVLZm~}K)_EJ*C>*8bj$HjcMWJwOJlV1lytYQT;r}>$9PDw zT^omLb??J{ip*-;e14$V>Vj*KXxvVot&r$6u4wIpWB;A1izpoL@U29&NjY_|F-+vK z(B3}N2Bk{#<=bP2@FV#!W3wMcU{VD1G>QR*TBsjf-^LhdB(8eBe7A*cj1}T;7oRV3 zJW)jX$({XaOBJV>4k;V{JzZ~uGSb$n{L_PL#GqJ#TUYu}U5SxYfiP1^)L9;$mvV7c zF+L7~!Hy6C=tLH`MYPF}PtkmY_mgs9}A|lLK>$HDHzUGyoR4U`hhq=~Wo^ zd<*-ytZlmA)q42pJ@ANDC0H&j;I$;_JG6ao1|GnwpfFE2ZFE1lFkyP<-IgX=PvlVR z%fD-H(T4BeG>ZF83LAi^9b=)4%?vjes7YP&HU0yFA_+uPFNd0#@iu2kQ|wh`Gz{$W zvl&+$s=R8$K}GLe%>*y}_zg;Kg{~uE&J13k%h8Qzh|}V*BN^86?!aOtMgv))Q3StZ zipcLv*P_-!$|oGA1zpc%TSJX-Dyz~8k$VFUPL2aY<)5Z}`0p)M>d#@_72#s%L(U}B zmQVKn?nX2`^VYoKb8%8JkoFNB(eZdC$tGB~pk$D!1ts7=Z=NJE8Ez_};%KtXgl(6Z zf5yFLW(TeN)v66x9xLL8J8y>TOouCU(7K6$z<0%K?~`$m1Z-A#n{XOb2#a$Oh>rp( zwO__buN2w;$go+eSa$&e5SolEP?#7L*okO82iTw>Ysn^KWBKHW-FEj=y%EBpv?v`qclg3BlSkj_5+oV zY2#rn<61?*3V<}2kSowV0Hx$2dUL&N>JE_Cv`+1wVCjusM^-Rq9``!L#%ukN999I> zTaiG$E4=CJW&8K{^eVnd!`@Yn-@%jEXAl*!&_V>kmiUAHkRH8(nNtp7S{XoDQuUUJXu}A1R zPhOAwI^;FoS175tcFWr3A5~?D*!}-vc`y#kw3V=v25mCcWmM<5PBpz&M)~XaJ&&js zpTSwa{2XTdf3ZA}|6zG(KezxNP88KhKVSPh@5zz0uVts+DTt~rY4nBpxPMTb{N_tX zLGI4~ljJe4jn(c@;(P0Tw;L&!`;qwNtN!9{j-9wc#ttd%KPZny_b*!KS*c}TPO@-Td-V?shrnxT~F^o?U@Jf<(n{`h-S zna#5KAC`wX#PZNFGJLM%oR%Qk?dnMi)n+iWOa)(>aC2@_*YVf(MKrE>&cq2GhbzpBQQ%+UehPZxf_zS3WDok-!CY*JYx-2Bf?Epnv30aH5B@B<(31Jeq-zZ!Fgn9g%hjP)GrBgrRX$uj9Pjd)-3dJ zZ0D`UkB8)~>^V|Jah4VVYJpXJ_U8hCNQO-xqP zGw{aB>VKFX<&3iZKZUD`rAcu`W|E(Sk0uG!*86I1s6!+Vkf6!md@g?si|N)!su6O} zc@K?3AdgzRO?|9b^YS`TUA3t zB#*0m|ByVc{Qr?WvX9}tEmA@UjUY~m{+wAJ_YcWq+_Q={;pD*3_&gPK>Oc{1M)UVR z)r22=zhH23n(t-iX!nW#$le?AZaeCJCsdVxp!N~tJ|%gxkXJiyCtT!i`aX zL|Mrr8M3{G6JkqKrsu8a^S`h#X#cl2c{kN(z`H(mf;C6pLNo}}pS-(wBpU>*;1w4@NwFeUU_oL_M#lA!b5$Tz4Lt? zdnVEP8_N8AeLY%jm<;;gR8Ly>MBGjqgW$DUQWc_jkYB#*P&9+I0H$^*36XJ0*7~lx zf4{%By5Mg0J;ag(d(ls35S~?jdb_r4ZH*XRTnqV#?o24BjzbI&wa@C?8zdeGrrIy; z%$UmNdBawK*=W}VVfVLI9Q|~uQvNH)mZ7&d=Td92ixacCCTCYi!&wdWT6>G_)?Kz) zmRz`Y4!*G&Cf~>vH4SgZXPVYqOsfp`kLh}r31ud17zc~Et9w~vtg7*_j7!s6gZ_`6 zB4h}B9rTd*H|4Z&z2xB(Fv+Q5| z43cGMY(K)C}=U35CMzd=s8=1~(F z2;MPK6!%Gl6|<=ZC%FhpIS&H$d@&LWnnA~=9x9*_C$_Xh@Q&D#kr6?TU*=tjEeTPr z=Ry$r_S|&paF0R;zH3-ZDm=FJ0>L8DY=v0ldM?J4HSWapu)@)6%6LWjA&2xf{`S;^aZ1A#kHGWA(;u)NCBBRBvBNC3`v6e|cL6Uuu#7QV@tD$aF%|}nktO2T27D}KF*%V*;Ik!M z0{{j=NRJV->2_e0IjM#2bh#vm(-cZG)zeL^d&!RO>3g;TOs^`*i);s5l7x{T@i=6* zwiQJ15X4o7iB+z7!t9i$BSpkOIs~|(pP49Z_V>DVPd)U7%Epb|+Z!Gu^%Ofy?z#oU?E8K~?-um~>yM;m>GU#>0{SV5+ zNqJ{x4uuHZ7&9G84e5A3mQ5Y}FUzCW2)#4-1kr{70V9-jA)H5eFU+SZ*5;e36^_B& z%9M#>!?)o`D;Kif+C2-g`3g*W{KOJBTPIX3I`6kvnii}*#c`*lSf+ld`PFPOjiJGN zQ*Z=C^k8zjf7}#Sajhf;hRC>jB!&%?D`LTdRw=FYcB#?5fl*~FH5eY+&Zgds`dn8X&-_6Ctw1K{d&Y8F_7v+$+F0OenQ^YaS zO@BDnP<&3;=ViJZ^Hx>w2fv`rZb0V`53MClQ#a$hw^t)XFSbbtzd0K@wtp>EZ};tV z_u~$i_Pw#{`NQ>qz#B}z!<`L_;niiq+Ngq3g;R+S`0hEErajB*@>+OThz-}{`v1Q4 zKKnY|DlYc2)>UsKK=D13V>A(Z@4eB%-fg;eRO8z4vNleUV0S5Rt)BP!$z&l^diXzh z563T*2hXOIcL0||JvJ_fENmhmyhmvV6GEs}7O$?l?|ASLPuo=MSXOsluX$8;ZRw4? zU6Jg5FDG&`(h{1#p3OhEIqH=Z50b0rvty4VMvZGHJ~qrr`WMA|uwwg!9lhms zGu4hcb-KNl8TXxC{kz9uFM*P_s=5JNDh1U`TET|FVj$GV-|0>@K0?lj`sk=YdZ$H+ zWeJo)8X@|C%(KDzJ2K)`p113Q+RQmhquJRC?j)ck+f%m@(Gcm;(gl^Pp&gd%(acO< zn^rzRAozVqm*8agT~ZqN&dC$ zPpoy9UttK%{~7(|HRJN}EdA@_P)_ly6@#0_h38(Xy@c={u|xgAQWxTVQ%iQU|MF3I zljQca;Mkg=pZ#Vqj_|Bd{wZ}&>DB?$OkVcxJ?)y#oKIiE! zedqV2FXhdue!c3!fGQ1z)jsn6{q2n)BJDl?n(E^nsL#98c!Xi}&u?=pilX@T#@z(3 z47#J*@8vTu+xOi+f3{y^rR2X{k3iD)b%nlvvfWaqDx7u2%)qq1Dh{H0JOuL=57-1! zK=21s*ByqOB&ejMxZw^s(lH-(!1EfuQFqlU-9Lh;D7sFJ-8pukwr;G&@5_kT4F-L! z%9H1>IXxaeQD$E|J9~aamu6B9f9r8z&>N3~YfrfwKxJ5q;4N2k`e+H{N_jIPMFWz+1{OO>^gGS`w@(E%U@L{<^D6uLQk*sMwoeK&Y}314R87x z7B??TgiamLP8ktV-}hm4Y4~2c`UK|TN%U02@=m4QWtgQzNt4@}UIUkJ!xq5qP}Sj? zHaQ!k=i57_asypby^Ws#)wgxW4is&d_cbchG^#6ITdTAJ_0bl7M~l-|P8f#mvorRR zXSixk41^j#kUvJ0Ev|uYyJnS@(Z!8z@xJpER+>vfXGYPdu;-I%TjAn>eN8M12ZIL_ z6e!0YLF893Vj%|Gm04KFNc5@=vftnBp2A-K{)8eob2Ijo$FviQ@rXAeNpWMYG5_j8 zEe*LIkKbzDKwelg;lJC|^(JYp?WMd~&tB)M={WAAzu>~ZS*8Qip@F36nKvs^SG_08 z2e#St-1M@6Hp`!ZeVhk*af7=gK(v~f!?et20iYhi-zb0kU}3!MtyHVuORje;ug=?K zTb$gTQpY61aJsGNZ8h0*w)_P_-XIC5Dzh2qP#@FiYu69gBavXW)nxf76~Tf)Ed+?h z$Xzv(#Lot#E|BwyRpPabt@*}#;c9o_Y|d(7oft&W;qD_OM+r=1DuH?)lBgsnsSjhs zRxA$wD0ciO<}7c{)h813Cd zXc<$!F!q>K5E9Xu_1D+wfsLV?>%n; zD@yr*99CU_Z+n``F+Uwx&1Pn>v;9$RWqs^=m8yZ%y}r4sFBe_epW60k7>94I<2r!m ziP^Iv&zqBF1Jurmx)ECrdE~lk(#lT9TqPl{Z%C>1R|OurANd?9F=#vzW-X#|lhF6V zKSkE?JT^#Q$<6ze1qM&xJB^SyH9~hgiRa*Es_JlKr8spi>BgTs8Gp7_;Ir209r;wT zlItHP27{PQO8No$!R{hP6n&-l-VQ-8Fj2xmo||SE_gPERyxnx&Ws2H^^fR~+3IUQ1 zC_C$rN$k+=jH9jkc$mPOsz5@h$zos&t*_GxPi_|pjV133JoEeoQ9g-zSMk8i2>Tq- z2(aONaLr&K^e-*57pX8y)b1To}KO&+)Zx`(O=s z{M#29P!MRqzA&~c;6j8fZI}J$i2DO>P28aFnaRl8;ocGT7zP77Y$>ZKQ69?h_7)p6 zRJXsR{ZWQVV?ufr9IL77H~q%-H{MB7!brsnF@am|`atB5@b_dKB05%}>0V1A=-S1{ z#M|5GiZZP=Xvr1YcJWkLEwgl4EiJ`JjcqFq)Q`F+LpHQLBz9`ET5D9pr78~wau0UJ z10+h#!|T;lNw>uLoW&mKaNzDCVuI)WA%CF6mc&V-Sps*pYlbCKtPrK1N6lrW&QlLC0$Jo9*fSkT zw&G@65fS!3Qh>^R|KQ1})SP}sUV0Iuuqw=7 z_$stbSz$+@`p4{~5lU6I>ME}xoJ+T2=`bxFXX;~=Sshnf&WFv?|8}d<&Gz&G>+t&% zzwK=p`%yO)0wJi9Ka_*6rxV~T0%TyoZwbp z#oCFADT;KOso^*)o!?$#fd~LXrHFk;VkTa|{DNQ<9wGE#1=#d5B?f;H6 zKJ{C=F(sl@9^?{*ciSD&X21TL2A2-0)_ur3oH#4*{Wc`^WAM^0k{4UqaX7euY<)jq zqa=6;603#dE$T7Feutw7+tgDlO+>0ZL(0eN|^o6f3Ubfy<;hR*!z_wg&5 zlSmof=uB9CQq`@6&rg{OIKams*euVPh-DM@c@i0}1jDN!scOJpN`8D6&i)beD;FTx zK|!*0Gz7J#V|rXp9!VyY0%b>=!Lv7#A4YBvm-ZQAc_~pp3?oPgV8+%fk)SCZ#gvhc zu}^hI=fHjN+=PS2?=34(w=58VjJpVh?*1BV4pnWb5NxHEs0pktI#lk-HM}iZedwDz zweCUjT&n6thS4G(<GZt8lwN{X`WLE=I!q|%Qv)>1 zW0IkAF4BAwB~1*5C%)Yvfa9mz%CUfuUW>)Suomu1W`$I{SS!}OtYe+^E!SV4kO)Wu zxj9fJxjXkjk2AeSCmClch?}mUve$p2!^Bj%lIe9GB)Dw0bO->YcK840Hv^lzRRyuP zbthhG+6SDIwpD87#{wALALVCd{sr)~=7`E#C>Xz6Yc5z^OFjX9dJD3seWay7L=m>z%>{jQ%s^~n}bC@y*) zh6FAbOx4Hm^5u3JS}_4_lHHNo%k@;-rRtZ%XdMXb=pF6++toYX`RcN!WMlcBn9c+E zf4qf744Wx9E-5j#Dt_%>Tr@LV7a(cg(Vril)6&1zaW2+fj+o$9=Hu>eFYoCrCAx(c zblkoh2`6vykW|F#Q5argWEHnm*Y^6DQ5 zG4jL3`=A&3jFx_fp4yv9cMyy*3GqA7`s|jq$Nr_+VfsfO%F!o|ZqU<9xYO;m=CGO} z!Q(@F6YLMj5|xf({WzRS`3vJOcx%^NJYR=;AS|H+Vejb3LUl3cd$jfyqk{fmhX-bI zjSVx8Ynz>gwaxFG=A7J}yVUo}eyQtru5Ad}Xc``RK6;oaWek4!bs50c9x-QR1(DXI zyM@g`(=5-iPMTAW**%Q{1hloaA0xTb=O$J*u8X!M zy4|YhVWfJAl|fjq)APIUbcNNluwMEc@AcO@IhscA>0OZ_V^8!2gA>@fI*nSoquyAxN6UG}l>%L+(02MmMcc>clW%^az$#FB zJZqxDZhJ;BkPf|FT9$$^Tvsl937gvj*hGyA`=re-#F=2Ds~0n_r85a5_rudnt6s*q zwW*I{m_42Ui>LRDYHIu1zIQ628hWIe&G#&($S-blP3q31XfY*l$ zo$h1FU%m6q^Y*KU7q4HpT&38&^ZI1@>1o_`%NSOJnH*yBoThX}uUwXBJbRBf- z|Ctv=lPXYSo}wDKr-<_7uBJU9(r>4XdgiRDHf3{cn#@lh&h zY*h^XU?lmL=C2|Icptx#GxFQ7sUm&!w-{ue?@b-~{(!QO}_)5yOYz7?9qT`L*$eamL6azg(1N>7G} zoM?|S{@}4HHUbPRtzSqvErLEOyV!VJlI;TTpfI2c;2{sieF!r@v(y~o0X zRwL9_Xnk5`DsEG8YqQ=$0_|QTogJ&1nd8w2*&67@>4`wFuDo=9+KLY;pHE2ksjd|d zhO+>L6}s2&cTD3<28zGd<&fs2q)1%+6=_LtzxI#*p-^=_asEbMl1RnNtAz&kd_i)^ zQ&*B|vf1gXzdi2+T^2*dF$;h6Y4%>#=totsjRAf-RJ^d2SQt*A5B_z@`p5un#|Dra zOy0D1nKDtu=(UPcy-bqiP9O1hJnTf0q{@`(x&-J}f^gsm8Bi@pNeP9VY0hM=s$}Yz zp3YowPeJ|uO0}wzk{z|jA?Tt`PD?%A5?{VwuZU-|)+pwQfk8VtfQC=eCr@2l7Kf{j(^a-?0Fidz*qklbT)xH22KlabrNfc!?X zN=6xXve^zcEI&LUHFI5|g8ns?eK$~(U=b0ofhMwiO@uRK zS@=E64`g+Eau@*+m8Kjl{1Uh)JV>y;jul$Hc5B|6Mk;0xr70tkKv!(=n_!hat^NjC ztHxFR&!Sy`Lk3BKOLoCeH9>3bVxgqoSMA?RgS9-pf0wQ5^b8F8(gan3m`j9#Um8U7FkZ2T8+3r-rY906Lug~SH9_?V(NRW)4|UgNmb>>#3)$AiI%XP(e} znGb0Neg3I8W+k$MbYvAaB_Hc&tEbaK-8+LWRfnza&(7)8%!~IMuC_b0@HlT12p3j6 zR9z0qe>-X`o3N^Iy6_pQ<|oI~t6$9cs^Ye!FOiQ0etjVQ=^2LG+#6TVm|;7lLwzu@ zzQfo80L^r22!_MpC@3QP)TXn`D~V-OGJ=XP4+f~F9?#hls6o!eXtbF=Z|XZJPkQkK zn7gDSupOv3C}LS^G?*J!#@z$+KLLCtuQZN+17DbHIyjo;MAMRFiw}QUd5z4he?Z;2 zxBeuAwS$ncuOzQz?Sm>SfesX6k02cxf8+$PZd+^~>U&9f(ZX9W_J-8@@dj7P^0cGu zcDrZx_}!wlyph3KnkU6r+JS>VOg}5Q?D3tgHw!gH=qhkYenZPmB$7w;w)^Agk{BmV zl`TCrjgIWMNBjee0y@4AuPVy5S4VZW$WHwj^lUX@c?-YZIYUjdSv*Y5*bt(Y21Qb? z+gG!~Y!o)6>|Pr_?!WwU{|2zbIz5ncc;$nPY$(Qe4dBuzt_D-7x!JB!&WF#}b^AY9 zTzza@X`L7I*J6o{hoIkd+ooNPK<8ue%5ZUh^V9fTps<$Jv&dh$SI{XOl%afN4T4ui z5hW6y8f=nWFEZd9gGhRpA{z_vNzAbCJEVB`{rPOoQ0auN;?7={Vw>nM|Myrd5L5e& zp|1Ji!HP29k%&!5e=)pa#Xl)vQs>9G#0~0LVzI~r#cVr~#tmDM(sF1bMZ~5Jv)I08 zA){QQJ@)6B&4z#ywcNS^9($B#7Tfg}m?Sotjboc`jkU8se0giwD}gY-p*c(kJcuWu z$|VN>ieyqe{5yDYSsuoSDs|3K+);*=zF|*8a7M<2j>&8?6m4jgWSxN&`LcHp&0$wY zzTi4rY233V3Mgb;UmJo%$eiHfqjkeY+WH~4#)vO9&o5p~S{Yi72CB?Wn$s0)|A*KF zq!hphKHD=txy469VdJMtw%dQpe~|(Xl;Ba!N|IGkKdhzImD-({w@|On)t|)WORrC) zZzU31 zxb6wr71UM~8GTNHpzJ(2E^3A*+i?84kd2nckN~IBg7@TfX3T#)1R;ly`>gtIwbV5!pVDTnY}awko&d1 z%A|n&x!5PuQ^52R5}LDtTv(<3J<|Qcxt-r+N!`2m+{1g@pEq-+A0DD|(r?(A{!sm! zJ(C_u{vip7?Av%$oB*bQI~*Hu>h*j&(o`x&kRoUg18F)OfDP0kUiP|m=>&$J~6SSXRI4wTp? zY19!RtfOVK%_>J%Aw3T#S3-SPVCWI|_@``KE9LTcH!vMtx&Fa z%lMUv@zdJuHac3RwJO!QC~pX=Vs;XK_hdK3oA8MNK{_}r#$^a_ntrA{R7xyjQc9o= zoiY|36>+ELX{Sg@pR#*;<#v-qE7;YD7&31UjvWML){jCG9b_qM5LOsSFTmCGa8Ys# z{*!H`>7w68wTP216*($~l0!4IU_<;|Xcf#W4Xorp+`ugc_-&m#*Zu9`3ORHSaFLAw z7r&oQ+b*h@hb`el9MOqT^_6YNbX1WQJ{Xe)Z z0_Nx;(_u-}3`7T%eYbliDml?=UYS!>FBKQ<@e0&*^J)SZqaeSJARU)L>uIFQ5#79V zQb)$`h1cuEaK{Fm*Cu^pr~~8_lW&yeTTKZjqorfSG@)@AMuVKJ3b1hJsS>xaoTeBy zU8rC`xsp!~5VCY@UWh1YE_ClWS^*8vbdYTQoL5fy!`k1R$?cRtAQq z)|p+}Dx~RC8lLG_^YFy-2CH6iXP$ zzWnQt#_8ERhW&k*tB-X)Rvc00)dhc%hPvVkJ!``;%$mHW90;LtJxC3zU2Cr?ZEPn~ z_1m>r9*afxa?N+bC?k`Hr>^&=-+x1eEdcHv>(g$?udqB}2VHP^;{RLzfK&zdI4&tx z@y;)8t4yr`QzxdV!j2BDw2yH-*$<86<%(yrQx^j}>h+iXR$0LcL1xclWT7Xh2OIA) z6klIiy)MRQk`A2xCwc8Cgzw+-Y}&&Zd#n9=^Pf3j7Pz{zUVxJngMCUY-&toGORiu>FAV*H z+~#zvPah@d^Cjo`sy&ua7Qpez&DkP5SgVFJoO+nrax+W8Ss|;!+U7fU6wboD7dlxi zEpQ^#S5el35ehdiJ-ED@4Xa!AHMZt5D_q2j@GK)==U6rxJbK^TJ`5V&{`-~3O1hj9 zME~(HKP28wc_XQ`rKGxJ!un7D*!V%NKx})$bA^C&5-t}{!^s0iGz`AZ;x-xIrO{@FlakT;Gu zu=B}9dO&xZgdY_l%%d$XDeIMo%#m_vapucw@=v#7|JZ>+zR+(M+8{!0Q z@t;y6N><*_NR$m?9V(XH|HY3b*Rca{$oyc=fLjHHcBfy& zyu5*g&ZF>u zZPLLhp^b%1yon@_DRK&}KN)=~xYC5O*6b{dW0~`>UsfWwb?^_?Wr&|W0YD{?pqI&= zqMyMsF6T{;%qe%n&=puU;{^01P`_`zXp^87vgqW*kRLPFPxBFU;s8z20S=wyZr4^( zlN{ujy}OCe?RQU^I;Sj08c1g7{|&NvYZ}cw7+^$C#HBh+mUeM`t|Mhuh%NLP&P9BE`E>s2m0v z&lAIJ}dT$hl9=oW9th|Y3oO21>cKCJ4H($ z@Z@p+;H^NpJq*^s9GTJiCy+{|LWFPBKb;5>5Y+H&%0#gw2QHa8a?{yjYFhjkd+&cS zQ*xDJ zdg~835YE2& zcenUW>+lPKqbi|g+i&T zsv_d`!%_f}Jb~BSBId^NBRek{ul|t_y;Rkc&d#4tzXe4@n>8??oZ?f6HI_1tWN@(YyLZEg6>+Vf!7?iV>8h$Top01Mun?(;kU*Eclh{1%uoX@Io+_{!2u+b}s|GzzrN-BpD%>FuI$=ltoS7>( z&}WRzFA=LgN65eN-fFs)#R7t}_(MXEmZsz6&!CAmvc@$e%Z@oSQ1+`YBo_8?)do?& z--8#THx~jtfU_VwX($USVgn!(iGDm{+=ys3|4eZO>*1ql0YZ>p$}-AalJYPsVWaQ; zNWjaKrB~bn$qaJK2o|Q+2;5;Jv3Ey`s$Hf`frr&XjVTt@@Ou=Q)7Yi*`nY54< zC`CKU6M-VG-Qy0G2;WJoyqj8*bx#TD&G$HMt9D#x132?|U2pO6f&EbN0-7g!I_rVw z^n0O9yOD^bCwo=|4(~yk!=C>k|cuTu^FGl>=hL)j| zoJzH8p2<-NMhM>)TDT2BVT1opY1T_{`L|4;@fkKlazjuTnTdDpjUCG83RK@_+eX?} zd1^X7r3EXMNN2&*NtYzybV!7jky?R2ConxC2iZI!ysSelta3^wFcWh+#S4I6{&zYa zFd-*_Q2vUi>A+5#f$n#)1^M=FH+9B-&s{&uP>!6J*;Mm3b>OhzM?HW64nW(O^#x-w zXP6kXs_9MbQGr=19r|RK7xcFX$XE`DMRn0a&PIghy_P`*LXr9X;LfXjQb#i!Mg zP(k$3l9!jSov&kssg~-buc)znomDS&E}Af)vWOTo3DfG$39x8hN z3sH|PYVRxseGwCpGkvLiMYy`SA;NY%zJ)XYthtD7`H)ub~Be6YAY%WGCV3s zyW?E@TXu~G$wCCbqGxmmSd8fn+OL1|jLt3>+Z@Gy#xfAcq`bb((b3OBFGlZNS zn8u74iEvV2#6eCOG?d}hoTDQEDuYd^dX!{j$z^rXW48vApmQ(;t>XO8)R0(p z7O4@9!R9c|83U$QC$t7pc=~WJluYRMZ^XU91ul04Dr@Xep2ocM;7ApOGeH>~-jgb&d_ z!r+xXhYhS?Js{IGNgSx}5#Xdy`|o0XS0On9fCleYf-WEGF7|9qH9uILwW=V?T~ci0 z+n=kh$w8(EL(<<_HBijS`ileOV-8ef{(^fo4kcZo5NwJRRMD#saYxz&b>@gkMFn$S z37uv0Vp9)jB`d=KeG@*uc|2gOZ%j0W2)yp%J;>4@$CPw*#@L3M^Ay854gity_3gfk z!D0czM8b7--4o~UlvubS&`+-cKrFYCj7+sqrhk$R{lUq>(xk9bCX2`<;#-_E>52Ru z7S>ePU%^%Zx2t5|eSH%4cCNvmx+=fNsx7nzVWEz8V{Pl`WN(!zt}G>$srd#JVMX&) z1>2j8K#tgAxlVZJ@B(?#hu>EJ_DPB5Sf3Uq&0k98{|aXrsuC9k9knI+8PjP}BS>LK zcBPJmcLoe+!cA&Ff`EXQ*UaK(DIk^Rm#cItEvBc& z%FgKCHxwTDYDVfGzIR!gd8YE+qM2PX-O+hKm11l6$#Fqp0e<4shN5Dzw|=|CJfH|( zyMl^sc%R%AoUx| zt%7U8tTbu0@UkcO|C(o3Q%zR5F1Fp|`wme8zLF+h*gluRUDn)S@jylDZ*Maz_U6IsPcMHMdNkVtN=o5Q z9no*H#cUU63Jvzd^DBjH5te2W5%eu+ehiCpoon$=ci_O)?Rcd}u}9y%s?q@)YC@;Y z#XmS{35WGPyB$nIiKPZK)$_ON%?!`VE)2p`V9ooawePg5t)3TWwVMonaCaUSp+jI` zx6rKEWO?j#vQo0wLHmTih<-`17*as*K>9@q%FEFI>*rvPl9)ACl~cIdZ`_4K!)cHM z^s8fC)+0JvYEXbMaQ}_`N=fM#Xc7I>RS0nDMtZTo+YGF!?13k>l?xkC#Hvl|UvAED z9}Vu%Q8K}gSNQJSV(wp&ct9FA=^7I}7P1g!RDx>#bJ95feA0>ybB{a>`6ES>R+;*v z?d3VSg;Xu-wIR#lyacx9Z;{1Jq<1EM-Fy7g^vI`QQ5Q^hKOCnF6tVyA&KG2-n8MNS z+v+^Qhom||Pl3<3gP2SA-%6t1KpNy0!*!P>dbQqVc1bJ@1Z^7Sq(y1A#9zd34Qrfq zx;v5js?LaUatIl5N_hPwN)5x2LD&WCN%toMjz}oiM4AtUIy)eAam7a=EK}79?}AlBTkW$1THqqws6^PX`;A`!66eRm$fD0SmV&yUDo|h7j+s5QvF6FZz3s1~`9mJHYJ?n7NV2t zd87mLQG#y*MEvXE%|G92;wDWi}UrDgAwRX8$!~i))vPm(_Wxh5qlO-Rn zq|$j{@KSp4eUeB4k|Z`LBJrSz(NZdD8+jPW;UnI}v!->w+Um!qwujv7WM(;+j;{YA zaP`ePQ{vs0QBfOO!1CKP7k02aXN;kQS0V4`_PR4MNxVNl^BZ%>#Ex)Sry3nmT8A#r5nAtkv&(Ih`LQ ze&PKI*z0Qe6eq}Z00X`lMlo%$urX^pE9ih#(=`XvI^i(1(o1!2moKpI&0S-vd z?`9YPC+Jr2?liQ>{oR-$NFey=5jea8tOG=H$Ay4C4|wmIG^K>)HV;$Kub*fmnP`Gac#nj5aI7e zGYhVaunfe`af37LVv#h2mx<3Xf$Yky@knSyy9A?TR|7+(kvoaCk}u`$R0sejCsD^_ zyY=XRS?dq1V~bCeaLmC*obZsj!yl0#VD9cGiBJzkV>B-u(8;r(uXU%8tP5ogiM0ca z;UsKd6foF~_Uh$>v*VR~c{Ujk+0Bf^@N*TY1j!(Hws-@sI6nXEHIj@(_4!S2n8W-{ z=xscx5Z_tXYcw+wGz7wCvL0A(YtF(x0#_i)B||FtZh_g42aAOoS#-QkQ#PMYXsY=l zOR-8?NBuBxjoAn~N;%K($t%|;2+4}*k<+F}MU{!w4_!Y7G!)%(L!G>ERFJ8>=%{*q zWWze%=#kk3RtCjGB;dPXN@mdy9^X(5YnzC<u>LB=WWL&3InQxt z^N`a>>|V)@>r1AqvB^+2#Jj{-A^~i6kYLd3S&#t@T`W^Us6 z{wukm?%(o!47EV(MTaLpx4GvBkwKkgw_RyD;HP~CrrtBge5t}@bXbH|SZa{BgE|!) z8b;RoSU^^?@oK&*oF#$OdAK>~R<fTZY^3Iu6BRX_o04|uNeqw)@?F}E`O`W<7o{9Z$(-Y&9Dwg5V6#Y1y)q>Wqi_0ptkx|a1i$9LC5`_fXTFlvi>_*FGL^tFa@Z!z- z!jRAmG%TrWs=Facy9_zLGttNEeLG3rcn~ku;+GF%9F(075*HJL9+c*Va)1Ty=9{3? zeq<>6ZE_@M;)TOEb^ZTVC5%ozGkkTH4EgBG%?-3{1OBUrEi?5u6eq+QDX9@z$o}s?zvx+vN!jR3r1 z3j!F>k7`w&=cPoxY8?auAW7(d%IXZAz}^T6s&nsP&|3l@BW-8Q=55CQz(MG)^53su z#J-Bt0SpaNVde89DY0Qm^1xHv+S7E(KBFVc_H@>q3)^?i8N zL~;jTDLc9x{rXG8(#cG!iB%fMNatln#gn$7(M`r6UkfA~{9+^R^6Ao@W^Z#g<@rzB zqOBrg+B51M?LZ6V#cGpV_Z+XK@5A`{!}%apaoHF4&LW6DY0f~-n_Ck&s{Hf~bA}4a zM2UhB%TR;VuzJiPlmdEvm(A_%qzc6f(-Fy^NDpnkVAm z6N~ijKSwWwiB;`#Ie-n3&ZSDC@GET~n`gI)Ykir`iYOdGdLp11{uPXLEyR~r@ZUG^ zW_`5p$f6Jy9eP4n{ew(n5E1CYnO~#4@V6>zf|M5Xrj4~hQMLMMuC}Tcm}4JEvN>i6 zRfVdH&iW3w0y}y-s3o;QZL6~T<1_7#psDeYRI?Si39c9My3>w2n`$xfj+ zjrJbWeKFsH3_-`N2?3p_ag-n^`yt&S)nPQ=pS~#=QF(l9qY-2 z@{30R*97oFtYeq?{X;{_3g4hMW7N|eG8?4e=?Wx_ zpUcgg+|{k>v$S~&?F}jOH?w~p?c-P`7u|vdC7|th@ysBDc87-Aj{#;UsfJNt-27jR zIWgq^CQj|~uM02aKdVxtXxB#2SFy*@?}?VUQ_=6VlX6`$UOxqLuZ^^4v*Yvu`a4cU z1?nq(A}EDp`#FP4xcoa8S3#H{_aBXMi;S2GG;Q#lCU;L{H;E(Sc0L+zYYTwAEj%!7 z;Tk36<*zfGXX0hDq(kS@y11=kvyPWaVSGFjaVE-LGce-`?!ymQs62RW$5D;1p_Edb z>G>;UDu*_2sm~%?De}ppA1>k_xfsrwAR2`ovF$>g|;I-^C;;0Nh)NB4OEpxX`nxvyltGrf zc!#gKTO-T#o*LiMibQjD`Uc4YPzScHJ2d~kvF`Brcdd=X3a1%p`jq@&$&RL$b*XQz zr1p?DY-unc^rI(wX0fNm>$94^9&j+Ra$~gBAnLnx6HRwTbJLSqH z9qN<9+TP`m*Kaz~ZhGEqQq*U)nrwM4doR{TFxz;(zJ&Mi zo6R#t8A9U{I*IH1Y#7VhdjDzrU{hj{yF3v&*mDE974X^;m)pL&O0Y9GJw+6^R%`PGJW(=ISs&2L z2E}!b=XDt-9qPpyx@!yF#$G5v)Oh2nB_mw}kFZ_Q!mijqU?m@05 zZC%z^wm=J1ceieXNzQjOnVx*(N=2YYeEC(ReYJ8$USkU+EMCjB`k)n_kJwfy`k)2j z+%;CK_v!`AS+~Nef+>Bva5E#c0P%k+daM{ZYyLw;;Ot*`(S?V}#*oHlK)QV3K*dz_ zniH}x0_(GX;=|9W%K-@>*N*>Q8Tz+-r71b(4YA`+!!-&7TZ-q z{@WP8@;^}0qU#d#9K;vp#W5=R>f^3%VXnAxY&P}; zyI+JDZO4~*H+$=LS=*lUS{9uZ0@qwHqkN;OZtal%_2C&WD4jsvbU@y-=y?P`A z%m-D@QK`ac{-(fcO6pj!f{xf^r-VFfdAT?{yi}fQmp@-*PpJWiutd0o7lT-`%L074 z82ZDk)2*4Z$4))Rdi~Eplt@_#nev+Z$MCs4+gYW^*|+OwcTVrszW9u=+AWKc?>{tZ z4n4nA>EzJ%(-bUY&0ZIut1tM$16+)yjM>IdiyZ!~F|JlB^~`)0Z*dhtC%%6mUSH>k zKd6t28CQO&;Fy&3S^i zMa@BQtPEN;B-Y`u;9g2L4%4edvmCa(PS{lSSUt1R?J;3mJECytz6;{YtcFHBkR3%l zrH^&oXcxd)>G42_E%47JJ3XhD9dFvz*T+~R6Blsc_(~&7QSTOR%R_A0NYz|?HqIc7 z3z^V__iAt0?*#2VsMSaB$zL+;xwgk;3p+7i)I^riw_ z45$G%@F!~ZaLf~1Mma3Od>_;(AoYFSb?JInSFs@Ka=6MnQ!md<&UNCox;}!X%G<&K zurmZ`AL9A=|-54d7}>Wj}MD} zR5tro;K-uUCO2&G&kZ7h82XwXNDyn(;q@vTak;|V{Qd;*;1cQtIh5TIWcP|Bqa|1q zg7TuY@p4W6habDpp%S5{4_Z z-vp=|RiQirdHsM^oq%z?q6zbs(#;1vaHz&Fv2=7N7ikm&F;Tqa7?x3x?6|u^={t|e zHI>Q;5sYkvOdN#epZR8heL6G)S!ERQg+4}}!$M<&@}7iyetz=8k{5fFK9bZ)mje%Z zVDk5qF=trRIe{qaEfUu)?)g3E+)5bzXNWM*k;%B7#JRLHDAAZf1scV&GyK$>L>?@M z>dd#N33D`7D;3=l3!87>h*_+UZrthy^NDZ^I#6x!S2kx@)$pvZNw35h%!J%RDO9J1%pW=Xttr9$7$Xdufw=oF2@ygt9zx zg_<3W5WCz&vE+vlF4y5V zZ6-KgyXJt+NhD_9EJ9Zmbb1Jo!9JHY{3qajW}ht~=ss^{%BOfnk$CMFcZ6pijP5Mo zc?>2Lb%YTmzN=N0!AEo*`Z&f7_z{UW>jlUV2gBY5@2?@hxGH2!*6bS4*v+J7-_Mp4 zA>u=Nzq!qaPC!%taIWMc^!fUvpN5F>J(hCnd@~`%6A4sxhoQ8GAW!~#Tz-ar@Kw#C zi5Y_j@CW@jI<%^S;9p4ar`ad?BJ}uLSS*&0K1Reqq*1>l&K5@CAG=-wPnS2c4Pu4O z=`1ep{TjLN*pQ{Oms;Cg@2wP*oPy9lj@>G<*W=~wGg0LL+~$nb65)iv(!4L;cJrEnFM z-e>05A?xU)e`fMV0u^9R&eU$O%WW>%pY-%zXDvx%ymc0hh#Fp=tOT*~VQbCy^I@g{ zwv52Tuy{Y$Hz8^q-M0&xNGL&QtR5;NCA`#LNZ>|z&C(;5$Hm(wg=QRxg*Q25_P!%F zLInZP-wId2EA$P2rh50tfaGZ%JtKk%{MEOHKZWVfo*MM|0Lsa^IOtdIgrkXwUQ(Kg zLHjY{iUjX;$CFLeg~xH(pes<8$E}=Y^z6+0`AuuFoE0$T>sGYs6K0oGhXGNu(7Q7f6Pxz&k^DntWTuL=K#vX4Nyqg2D4vNTOf7R@j`pp&*WG zR~jQ8w8|68VH3 z=XtA6^>esLqmg0)Do*mEIi+wc;7_e*=38T>ZXIJghuU=PxtVC12j<_J->&pV2WG za_fwe&n>!P?2l0g2-hJGVm!2PCYK;X=jOX@O<;rVz}$nb)2<}7m3xwMV_Zr*1w;T7nReW z=70Zbm79ySo60M93EYKt;}PczJm_+(E#OTIbN`v2)ga=kUJhzd7tP9lSB);>KfLb~?V7(`TzT4DwcwT9)*-;1!S47JUBl6);Dg=PIW6yOxn%!uz zMB&a4A$s4!c));jW_&$umGK>>3%jW17jCvk{2v3hBW`PPerp<8^q{!Wv(=SI36mGG z6mB(emZaEPjz3wp&JZr#KVGu$f}iSi0*Zuv$BLom=j)(bcmT=xc@8)s1jU6EiuwT< zvqqoQEV>kwo0o19Q3#dE3NVLS-P9A&%K2w2jm`&&-ul(aZf6=l{8gQLdHL zxZCtL_p}%)?Td!l-7}yA-2<=8lKzLHhn>WoI>dZM=vBQliClX_F# zlW&R}@$@vG`lmy)L)qGC>3Uc)c1uWHJggA}W;L$rY;<}P;gDqY@!oIJ!u)wqrWt@W zm9>I)4M2(29>j)y>xYy=yyL*em21-7hg~{0>(KTL)cO|T<;~wr^D(oVnJ&A@u4i0K zfBo3fc{%j+QK^W8R$Yx|aGs|apKlexOWgXd%H0Rw$I?7!lRxPhjoy8@a;E9j!^;=< z+V65Ui;gbG&j(_~TO`?;YbAGAg%d+EenKH>46i)S z;@TwocqRy^E1+1p6|4;PS@yDVs4bNfR@bO{W7>K?EUs=1^uGgVP4P9>R%<~{4P9q4 zh<9I?joh!TdFuo)4_$IoxYTrm>*5Pv8ZOzNl`eD^bxaNzvjB+yX2QQ-(k=Blwe?N; zxcaN5j3>mcR0VO-->FYRds~nBKkCiKnD0vW^&B~W>(ljLIkXx?!`nO zDuDX{OB;XLKq|7+^~1t9c~Wi5i+GKOL6YP;Hvc>2kl&d*;)Q#7j+F=NJE{?(clXK8 zW*KjQn;R81jHlNyXdRJ@g&2j*n_0ZoKA4X5bhFo{Ot1JdQ%1gYbwg*_rz2_up=a$RzOai{($t( zrxIH(o_hMc8sQ>{x^SZg;=ib_>~bhZWxl2xE~Z|-{balMInsn&bEY~+M*QC9gRA&8 zZzrKN^;HRY7yu5wcdXMe^UsIIXk_ZLd$>ww!=D^NDUl*PLu*svm%Hl^3jDZ;=*9~v zT#XV&vozUEG_q16Io(PRz4kS9)n0osX7yWebkMyL9qOLlEy|_4cYZHEKYfi+ypW;s zm09I%_EAYgb3x18^K|CdJ;~52aRaQdf}p?f2EF7G-Y$(O+b-@CJkvv?|_?{Uu^rD|2Ei z>OI_#ZQ9H^ejr_}>OI&H#QzftR#UHn^(=-)@S}ENrxaFR;~RON0*Bu<&Bc?H!gbe6 z^E@jCN0_deapA(fe7vMfwFI8jMbmCaRqaV6o6@!fAcbA&ee26b9J zCKB%Q&wZd#9odUHvJ{V8K59li%iy7bkWC}*!!y$3u@LEP$*|8sM?`HRU1na&Pi8qb z+m{MxsAUi~*2_g?8z>!nU!|12rO!4gLJHo$_{wSSeyQrj$)uWYu@5yy8yV&02S$rX zJq#l)_~LTeIrR-lX3M)$xx}O#ghv--;=j<^<*5{`>Q@;`D|Qd}>|AhdJjNYhIs&s5 z4}B&(6%{D&$I&=RrG5;S#ng^TKM7daE7j_5a26%ldQ|P@6sAgwd_>EMLI3_Wbusol zu6$|RBX@7J1LgXc_%Sw&8++$zuJ2nInzMit4V>&wR47g2dGLIf3jCw>Hm>t|RrivU zgQ6UBuOQfoE!=(;RnL6MzZamNfY{XRYFW{8H4o9#^H2H_y>pzlO>7ZXU_-IzbP{}5 z*M}rh3DEkLEct(rXpRa2U>xdPchys!f%DJ={%`f26T`j$>rUc;W~D((?LbokXqwM* zXmK3X612Ux-6V*0_(^En*z_?y_>ls<04l@V>bOAj}ex?y6APf^1tH2t-?7o1b6gzrO)LzXFR06L7(8|)qk zB!IM+T5gU(j+`!@C(t>KKS;ecnA!TO%(3Kf&XvIHDsXQO5RmW+^m1OW*RE~8!4YPX zfB%g|vwGN>lNiD0Vmacr%eZKQ-P6GruGA(xR=O%qIqpW%EAq`Od?v<3L2PuK!&Jsc zOExX1d9W3lH#e&a358Be500GDT)lihx|!Yr0XVNixIU8FIDdW(J*OZqXoZXhDl)3*Jt8^;z?_B?na>>Lfu8hR$73Wq)kv62jef!iatl%*}!(65w5f-5vpn) zLc%~Edpmfe9!BXPlicc?D6G7@6|P%aS6nV zlLB~|fy&0U)A5(jCP+^JM*;8RYOY}M&3A|jE|ALX7kBmY4_G)lu9!?`?ANP_DVak= zy=EamJ!fj}4&GWVK00FE|wP*w>Z=>Zipw|d^h7_J|B-xFf{SI1#Sdm z|98{$&F_IvYS!7QES8g=Ac2?GXZ$rwK5%4{zz+4zrncgN;11tNt>#2Ov?UpeHr^Vw z@Y4?qatyOv>zra1Qfi!pRf!Z4Lvt#++2%D;!Z`{z5rTM@!bLuuz-9u1OgWen0>u#W z&=~aOZU30K9dtYFC_1@U9LolQIXOh;UMuI;g>MNF~I^9 zRnG%Dp%eFvO^VXw6sT0PF*&3MQ)4M)CoaW3%+Gri*LeRJ ztJQ2!7VP9$NQs5I-%%enQy$E)h3b5h-P{VM4?c(fcAE)1#!QG+#MdM#y80U-PzUgEBnWkng>+ zu)H!*`M5y2F&5F{!7K6F4+6{Jxnbe=x_!}#>J&Dw<@NN!K1n#onrg{ula5Ep*m`pV z1-pt4!=Df_q0)$(b^4fhN|9u{7zhz#qa4N0ZyC{c@=yQs;UL{-?^BHc*mXVI|Mdn- zsa=!G-8ljK9)fk>5agvXK*~3I7UFCfkkWz3i1APaN}P?Oma4T-dqjR?MjxXXmmk#3 zu*9;s^uU1mqC>*o{?hTPpC$G`4XtiJymF*z*!S_}z4!-HlrY!?p%EN0gHO9Jt5nO+U#tuXgyj^8CL8 z4eDW8+bx7AySQUL$3typ3aUm+@Rk=L$#lh(Jh4*~odRtghz_mpP5U(6!`d-)Yergy z^T?fw#s5dudxkZ!c44EFLP&sw(7Ps~h|~a~D?9WWr3IvEC_+F$K*a7&AV8=B(gabu z5Q=mV6hrSwRl2C4pkgmr_Zi;rJJ)s2zi0ly6i~xE^DX=sJf#Q6uwowPgX~cLk(@FS8bUW`|9&oEQb+qx)mDx|3 zb$VvcI&ytJiE7-kIrmoc#QU%D10-i@)T`%JW^A4dJD&>bsRG#fWw&P?-Pje1h6Vi8 z?awn}SpVd@e_nNG*y@r4u0kTtxT4PfvXmx;bs#SU@jTu8u#WMj#>bo)?K#oAxib4T zQkvavws_3DN$_@21-Qx65w7l`l6N}7ueVL>l`Y%G zyDqz)^^~dxEGw4ZmS$M8Q&#}C@Gb9w5F!jXjuZfL)f1VSJZTPz+S;BdwHKl?@+m^f zqQf7m#6O&G$DWt+7hGUYf1N|slnGw5xW$SP?~XYt=aro6Sc0`w7W&rkU{dpltmEbP z){#?Ux5M;~dw;FbJTm-`rO2)F)(8LjJ(*EoLMJO!z>i(fpdip_q~Z*aAxkgJg>-{p zN0#u*_BL0!hc4iS$^27(l$K2+tznzyLzgxv=~^}3@vc0MB`@iM>C)$-GfMgV2&EX* zo18MLwfW2!cAL8IgS(H6Ipt+e$noota)L`G-_~OX2z`xoL-hdp*Ur{oNNJ%N-9mre zwLIxn)#$ICD@g>o&BpUe-DGUU-KX>NQ>(9iO2o@Z<3=cUhH^lS%1w0PMOsChTH2P#yBEXF+SBC@koHQ6H#7LVwd7XvsBOO=Q&nn7& z)Y@XNCopRuD0z_>c+x{Pw}!*nW)FCZ)J(Wu63ztR>DTxjBt-@jRBrs4Iq{|H7De9x z0LpcVO%YgYB%n3gXR|nz_jo8#=$>a)aY6d?e=6663%{n+Z2dT2t?d+I$T-ZrWEZVkG2!J0bl?KO!@ba&ZRAsXmWiS?<;pnSNomy}mW-fV+7<&a5xHJk zH5?TMz;D1Qw5_u&*g&AnRDr7$NYwK^MiFtXS*BQjx-?OUb)~keTZz@~hcvvl6ew8* zfMXAtxS5!mjJM^st3thhCj8zwd3Ced#ZKt19o4uq_h){Ji^Iz~ond#1X=kexeto|H zC|BPSUJYi{{Nht44RiHMbO)3LX1WFLoI9qtCB(X4x0q_kA0B`3Qr^Db+BS2{KDNGj zJsCE>=gX#Ubp~IL)!K8==9i=^DSU$r=?vZ$oh4K%EjH(59mS10pt9a*RI{2Tx#;jD z#6XX)(pPsb+OgI1qK4N5)ukZ(x&z0zB#x-VzqG&nf zM@}E{;d2!o!o~%sF@D1H&aJ^J#=2MKf0rS1@;oJg*+g6?MmMt7!h1TS7 zt@}KljCN#qDLrx)YBGcX3c#|yNt+sT2r>PIl4|rn%D1?JY(UxU{fL%yNwj zl@n$hMvW)g&f3npxt6FGk!%adU1q>livpq5T#O;rjqo6G7fv>C+mk zOn&pL6q{bJ+e{c0zL$%D z6|5BB@wo)(=-fC<+Dyi8@nQ!xBk$HqdfZ;fwhS6Jo|^`+MlI`+(#0j+ zLZ!^3@O6HqoHA2q9f;DC=>gG;tn(|%<5&UG4^K?>XDfAPDufa~6|zHL56~X-R0S;? z${6r#tX>V*3QfOeWrlV3#tyo@b^Ds@8L-&$r&27dd{$wer@FklEy#=K{?YnVTaP1U z?=X=>VWh3P>@W-<52Nr^c{P^_NpIoZcjceSyKHG91kR;!KP+jfMvIAZkN$&mq+D}O zcHh3L6o1~@q2{DkKB9wQO+IN%UV0FJkx^O4M^i5Cmp1T)U0JZFKgdX7@?6&nAZM;X zfd_laRMncWNXp;SrK(P=$x2HH6#YJP=WM#i_zl~(q`joz*)}hS#yF899VoFu3x#9{ z!pErDow?31PG+0+ay4$;F;~k>Z{=f%#RfImjoXm?h5Y+A{?>t5?xiCRH(BOscaTwQ zslVk?Sjq@uj52_rONjy`Ik|bD^D>}p*RHJWD5ZsR(Z2mlhX~i}09KWQtP4e#l3zTE z(+E@jQU`cd^aqT6Ot>5w@meG$(NnQjy^YBb#=$y3icFS}SM-=6Wg9 zXxF9n$^iy|dGc1-`f-^$^0{1EkmCaWD&NX2A z|4ly}SYEA+_m~bT_v=e7dswT1Ev}-LI4)d0tY+j zqe4zF-mwngrG-kxCb=pdg`bZKe(&=2P|9avI#C5n_HJXn*1Z{5w(@e=niq-8!vol& zN}%Qr`RQBADY84dZ~e(8??3J(e_A6&dz4Mpq#0!FXO9+yf1_?Dk_HY3&A>kg%U6$s zF6dZp30TxNALZZEIV}zptTY5#%ioYUqE7CWVYpJdsG(>3>aDI=d~Ay)W6I29@r~YI zK0Y-y;a)Wqqv~(YrB0FeIytq4RW)xSEguKW3_iEh^lb*nadIJA2*B~*xQJ0ESAoXA zSmG4xZ*iy}cVYO286AKYg5U%oDDm4UJ6Zy$FZOL(6A}X(>yLLHlcKf{GL~k#R`{xf z&%>9IAJ#9+hnxBC>vnr8t@axN@C_j2l^Ije?C|yzEgG~BQx9|+e7lO`ilKFTXx=rq zL=-{>9aBbUbOjRpBHFog*Ejv@)q)CTYdC8IC{lkq#y1% zA$Z(+yKrIsbf29mZVqGc`0PVW=jY7C$)M7G4%5E><(ynCbw@VtH~Fsiw2Bk1>}vSU zc<4^5X*#D7>B+=+_H8}@w!`C;OFjR2v_T-9s>A38RnT!}J5xXR5B|~BmeLOU^RzL$ zxeNlfqhyn*}?PRLi0?; zGK&`pLa!|d;1Gai%ZhTv!?SfN#0I24Kv;u7twE}26=_o)-l-_6vU8ygx0rX*MiX{r zW}1GQXWay9W<#ZO@t9y>yi1?&@6XcvFTDf){`%1ULS&)(g*Mqcdd;*)#Vn|GMXuoz z`jW$0nPmBRIf3~KrsK-QD6;Eqea)XU>qXKoj9c$m2O>zr9a1i#GPqMpu*v^Hr_RGA zYB=*W+s9GzuQypO3_e{Y{oIwca>rgfGp$!QYdBCsJ|;$}(a;mE$d;GBYm@44jTAja z;VhAg!rPmgAz}OKdm61~ERl+yF8ugK(Lp*^ccfOGOz^SR;-E1@3{QgTS*d^(uU9 zY}&~&?9uO4P_`sU1|gd`F-H;k2Wf*~(}#w$5VYTuIze;LNv@OhlLd$Qrlwhygr`Qd zasn+%ZFDbw$rg?iGB`quP0#ZeVpD-F6@V%z*^yZyU}Yd6w02hwd-11#pQjww21|r8 z?pIEunJW-D&$mY>i4{jBGZv0-!@hL)O^ZEGXHpJ1-nG55Xdsbh_OQ$t#wKid4}_KI z$~Z<$;as1E4nwtYeDffiG`9CE@|)yJ^+CWgKdVOLBsaaImY*Kech&>I!?`m zRt4LY8FU=bbt{8Tbx=dQN`+WFwR{x^=lVjx>W~G1f zn7CV-dPY7?W5s+B8?F8<;M9J-UUmips&>r*m*aG^WJVm`$TsbXqCPzzD$#ISk#ADt zi&EF)*_N+k4$4mSXcW?+n)Nd19JrS%u#gy~4AjR$d0z*OWHqiYyd+)zjU>grE%Nft zmWz$8fptP=0q*~dgn)l=aEf4&GrXwHs$rFi@z}AdAQxaZ)sD@?<&7S2B+8jh4pJD$ zIp(D6mi8v&nH5oQpN4N}sE8e(sRC||uSZ!=T#|9+4@XAcfx(3DQ~CQbfN`sG8c+Uc zCiKB;qSDAs2AQh`HD$>2Lp5y3*#ZzQmTcC0QdEyk>sAix){l#ztlTZW;|T6l9*Z%R z3ufH!0mlhR-6z!N0%Heg*$)DP?o6o8XrI!qXFvb;PGxaaCl&@}LBabEyf@gLiHi)F zE`d6RuG9U3nAR$`+CVhNTt{O9o1${}`qV}HO3?`gZZ*0Z!hYO-*7O2#vc$DLVx8!T za&IXyn$h$vC2YIt@IO1m!*OB`{)8{Yj3MJtz4<_PKK0l!oT@;Dk)0v0pXL5cg@?9g z7k^pa`>-x{_H2*McbAq9XSLXbdvK#y=_I;s$0 zgYUn?;O@iWYTS6R2i@=Rl|=9GFu8FR2y0cFQwQ<9atFd70(2e)N7vSRI|$K+2{0~B zK!o&8Gua6STL?adB0ZLpXz-0w?L}|M=!jN^PsBR?Dx?$&+>Vp{qIu?)cr2dXBx4Y7 z1m~9A9>C~LF*tGPmjAI=H;X)Q1%V+BowoqQ?Zdmx>9cj<RA78fDEq55Jy)^`rr4TvywXC)DVtFd z@v9>t^5!-)2W+HR>6w$x5B6=IGgGw)61)EfN_zCo;gf2-=rQ%$^ID}+1ub=bmv4$G zk9aNkT=SZV4Rv0+GZx26Nym5E)=wT^&jY0hW zI9kS{DB(!M30m8T$KURj7J#5kUF-mnoo%zR;K4Yy)ne z77JA~#ELOGU)jR&qqL1IWHDI$PG19xt8guyK}+{g-TNgSQ3PkF1e!zhQ?QI5!af0~ zf7&Na;Be%H^85ihPx`dZ;(tI^#t84*Kg`H*-ud@iSpHe~(Q24sreoM#%EtP_N1hKn zX4|GdBi0cBre}||Asg1bMJ*ua*xn%Yn^d_3ZG-3%1cz?{q{94WNP1Wnhm#ES6DcVJ zfm-t|s%{n*PO=WOucs(W0YZleFRAq9!Xx;!>x8;XUE6e-k`x zs#}6kIAzG)IejrU)C@h0u5P_@O-Yah%WqD;2j*@{+N`XnM_ZmmVyTh|R_1*@yY%)j zVGgBTRj$drkUOZS2u~L*LjZP#Z6ZKUcqh(vo5MimsPRCB=2asfg~9XJu3BGOynMmb zwYomVoa3k{mrPVtv3QC$RfLlzWWZndHSt{iGyHJ{w(F2w4^Oe)_=Q(x;r?`lofu9Q zsA`Ik&PO;Dp9~siJ&N^;biqBLN6CgKMX7#)z@&&%Ak7JyZ@Aon!w}vO3($J&UX&}c zF*DMcy!2DB0{j`*{2OYo)P^`J!eobvscgis-^W2tWat-`pvsP!9w)FaC zuU6aTWWo-xkO8>|JH0dmS>;s3*t%j%W_-Mw+4{*0zX9!RHU8dWsB34GEyZF(Y+VnA z2Nyx(P4P!efe~*Sy+95s^k_n9*Ru0~xl1wSLmc3HIgLCQn;7q& zj(?tPNpK5%L0jBiPZ^WVkrOo4AtOYI;Fj?2R$1Jmhwc{{5M9tF4qf>DUL9wq~abWk7* zXDY(D^TT(pYLcIpL4O&Evn5JsJxeL@_2iO9^+`)u&%K6gCjS^NZT!y3K9tH3QrSA{ zpzxr*_*6-4Yzv0eUN!V&N`@}ocXww5D)}2yCyT`%l16Z+j?MRsOIkm>5u#r>|}=ZWOIeDC~IWZaw%`d6VVLMCco?dl*C;@ zMXR7^jo27)*#rQb=P$-ewuQS)@vv4363<}a1?xb(+Eii~zZ82Z10st6$+ERpfswDb zJUvJKsG?5(GylJ*sDjH4H+fatqulCMpjaVAa5=j$N<{F*i%fHr(<%Vh7$o{xNzQkMq(61!ejp78KSjH7RSYo-i%-V0*y z$Ao0xqLs7PlS4QI_{FtiMlsL>G6J%d-bX7v0QyZ&j7$B2Sv7$4F7Tw`$PF+6;;2B8 z{-v&YNMR-6OAoeVI*Y=u-8y{n8@;7S??Fx2tX|liLiokM)lh<)D&9tf;8??XJsySq zDhLx2{6W?iw=AceU8*d|>)hYAwa*XX6$u+;nbFDnj+1rU;>XBcnPcsr77kqd`rwrN zdtXnvUT;74K4cOBb@Ow2{3UC?`e(8BD?e9$`eu#MGLL$%8ZN{iDGBMR>-4&JxG3G@o<1GejbpnkuPHs3u??&go%FN(a%n-SnR zOvqaM9;;p}yikJrp}j0Xz-5!kr#Y~mO9ZUiZA#*cce3(#|Cncgr=?tfg`To2U>BvY z-U-)xDS7b|(Lmz5k6mr536Do+N(aA44CU{*k(Rpa!RYT7L;Mp2(C!(J#}@7H8LI9G zG(hg{`6vZV<1zJO(}|4`L!09i|*?@eu-f_g@abx!pFOir61P8bW_mNU#57L#D(+&4O=sgwGR3#Omg; zj1>Uw!n>=D`k?1`J?CF1OTfh45q;mkTt6q|fe<;+1Z%cHp)!EgBp&P z?GXs)as5&oyJ0_9UxmzWKr8o@nKi-0gY7h@KWR$sw*q>b#F@)KbffR6q!hlca!*+9 zr}un3&It3k;sFH9eP0dAu>aRE4;Vk6bwDEK)K!fQiZ5IdVw(9pL8=B2*kV8F%7IW>{i~WQ#4Tolxy+pbcOiSpMl&2%%NJ@5rbOFe?QXb_4|o|3$N+#b z^##hs0R9ZVWuW9Mu9fue#c9TCH|PyBt^A*wcwjjh4fKn}a${(GPIgp!ut>p+KOHaL zh^2_@i@ng0IEQO!x=r8YwzT>1`rBV2o7e)z!%tEz)HJTV!|6o+a^Z+&jCc=_rpFLEnQl3^>LuD~=sFMu@uz1=j z8u_~ls1KhNM^@Pom2j4Kb2I)^N7GN!*)V*I>5%W6`hAfX-OM1oKi+@47(67{AGILL zFWTL+Rqw|q+0In@jmh9K18B$2$rxBKNNUI0FC=OlFeF7rUrX~v7q4?6U3(hisv$G+ zkt-5n$H|QwJy~YB@4Ojh1pV_KWgpG(^r#0|r-LN-`vshCPV!W^Wup*5H#IB$_=O(r zMLBTzQf|7DNNo{bruW9-pW;u0jh22;FWQKfIPPO~Ys@3_wx-D^`hVUPc^ORoy$yjH z;edGQrhkmn`Kq8v=eMoRMgG(>k~gWM8$6Ty0(vhqM%SXvPpFxtWHkHl53m=wc9m{z z`-HU1x=MP_H(gJ8BOUmrA5aPxMC@ISrTafV zUby?wn2j@-z!0xvZffm_8OS)B1xGvuOqGH4V%?_qX63CjZhDu74nBpQ8HC_~8W3rZ zH;yHqWT0F99&3-a?Kea>l(=1ni8_`YY3?b^-;_P$Mx`R5IF-l95NerLjB@HtdT-A$ z{mk-mk+bt#!S!dVRp#5mI+KANJH`bDTST*6P4}Q^2I?E$R-1jL#=?0bjxNv6M;|X3@$d*xr-u=EEu8JOsfaQ(UDJB$6}h&B7rFc9Im5 z#^f~7%4x^~+?1nA$w_y+_KmY_ZaF(zr&8fG@04brg!OUaxp33xUpujs&*iW~SV;&M z`t$mF3_mLq^+BaHCbv?PKN?qd4C6jEL-rxv%bapQM>>5_YUEdlg_*)o-X+a>n8u9Uy5jSrP&?r@A-O50#FQaAIvnjELbKhx0~H?bP@jl zoTK`hCIT6T0fnPcjhrYXl$%@uE{T~bP9{WV;;<0k(rLQwvRh8eyxX;XOD|pKzp?CQ zMCE$F@XLJgh0RP0k;gkq{_)CU_U4lpB(d;M%Bx0@CzyN{MJ70Mwv~2^pXNsieZTTI zSzN2kLPjX_gaR&uziM`Oa*(uqs)%$AiqP=KwM&(RElfvzmlMVLaeLC4pYep1pa`fn zV8Qbf#{l!>AZhyHtNds~!#P%!+%0w3#XoFqwYPHkkVL_Sm;i>XTA)_YOUW@XRf_~T zemxp`yu5EQYYx3C;FJPd7Tx}?mAgyWf#f#ZLf7T0bUU@L`na#@V&@FaXh%z)bqbJ- znY+l%Xm#CZ7d#L32)2v@tHqk)n72eEPbL2Aoy~(LVd6KHte`)t<~p)*tUCX}*S{uv zcX^SW_OK5KEO{4jO~y@C44sX`36akXnOCL5xA zz5XOaGfTOhPzj!863#V-u9B>d2iv>>|8Zcjz5q!zO{S)3sTMfj#Me z*gQ~peHbz4FqwP*zD>Ddd?+g!gqSt0_BxWyYGZzll3?Bg$0ko4iKEs?T9=v!fb#(Q zc8O}Z7a6;bBe+!?T4Fjk!?D%5m70TnB2V@;lLD|+dQcI+x-`CsN0fFEyo_m4tAL>G zx!VWuf2#9v_NOm=JJa;BYY;PNe<(Wb+BF8Sm$(_{{=y(69aXnI1K0n+ zdB8|%f3Y0Oytz7xTI&ts8*+nm!eOoHR9Wv-JWk!C)z%SaO- z3kHTQt=~KY61U)b!(_z*i!nk4pBg(}cq))g$px?5!XQyq2f6<_1E76@os(j_ z*DHVhd9eH^-Y9xsnoJmE%8pUx?>F^;2idL1z0}OaRHW%Yy` zyTpIx>eoY-6#HYWn%Abft2d?6`FMlDjlC^?r}x=dzgMWQ&bx z4o5T}WGfz}-+Lk?JGK_C!^JuEq@?9;{U=;ddRC^8Lb@x5!vpV|+ZrWzlQ95hNPy?i z<6hoLs0VPH0Jy7uk-n)S6ajRBSM5fUdDDx>jWkt@w2>#y_;Vu~E860{ZuBSFHOle&fJgFWa$NoVRV+o}rdW$u@VSqVa=m=%$bqDYrv-jntM<;ds<8W4cg}wH zd-|X&OuvKy?uN1f>Ih`0EuXYV*+spxpWkV`Fk$NeWmKhJLpZJqNI%&0_05cAd{}y( zF!>6g>=*kOva!$7e_6`HgNctwQ+P;6jKal$zPPwr2TN&D%|CV=V6Qm*d)bM=fwU^{x!8m}&OSIHdrMfGXh_IzFCo zk-j7OZQD9f2WZHtF z^YN7t&$YTHR6ph6RU7aK3Qcr1vcd13uVz2$8Q(AiIt+e;K+jIlN-fQ7BH)x%?DC^d zPq6BvO6;^vTVhZCNT^LzJ!cgB1WyWY?PG-$>BdIiq=ZpEQU+t;gR9s4EtMx*{ZNc~ z;t>eI@IdxW=^g62Ehi0ChjQR#HB<$@^wl=EsQe$>WXZX7F<3XQa!?YeR2S>vkYhkN|J157WO z=Bac{v1d>s-`C(GfaC48G^5@N3ByDn_Sm+TEjKfdkodL|x3`|2(W)f^t-TA5s<)KJ z5JANwC-05k10Cq_m#Vm3o9B@zIV*P3poRQ2PHz%l)k0YgzSMG9So7mVj$I{`VMy3}1xa1#|zd3!mj1uP_=V z@2lbgKFt5hY{%E%+_kIw*qgBQ?6EfN?n9ONL|)8XfeB`&AND!b_hX6J_iv>E9sQbGGE=)9-F5QK(AM?dJ z8kd|1zYkH>-#^xx_Bv7|U3`eJ@-N^{HkP*&BAK#ZK1;Kh=%jx7=>2rn@~AoGzPP>< zP!IYhf$gvA1)jp8RZ`8l_y^sVF7~l#-50k6JSL+iH$nU_1_63)NXTAzV^R`DfuicX zR2g*5&HYH9L4#kCgem!HX9(H~&eAU4EL1*dB-dX7ZMds~`{`rS6MdpuX5l{(`C;R( z`3KePjU?LD9~)O=;%4iRhHvWiU|*koZm233DTYp+-p|-wVgMWD7&A#dY$RmDPcZ&F zvMbzsl`I_^FK8yWBoxc5#RCIDGl&<)jwla@SBc%tl{&wO;#owuJ_keeiFA+LlWuA? zDlZ8D&aV-PiKWUqI7qVK1`e*%$Icl|=aS~#+HG~-zZtlonO$3x74C&{z=@S)a?Ace z$5#;>o^WkfX_SP_+={_5io^P@E2RFPB_udh2C0_HQ1bBoHvt0e5o=KEs*pPKHFERk zXUVPukRw1X)W&u=Xa)0T6;-#{y-&9gVgwEoR;P$yydp-^V>3FSv7LyA)1ouQGTiCz`iJg|o4k!8SI_qc}D7xpgPbgV8R$bSBCH;Lyh z(n&rlE|}8npMImUNyUwd1PFx6ZFZTjZruox1TN`KOyXE`)a87NNYt>XwJSAZrR7WW zRRkbu0U)~u--B=O{_UN9^hik}U9j2U@u&nkx*ImT4k*N}aA3QV+qk?4(U^C}bUEI` z-s)r#71_HB)^WydSF?hriygGS+@Eo|qYoqW-e0-N8^y(E@B}ItoK>hh8>uh(JX;g7 zh>(7`cMEK8%J`s^3-1N4crJbVnWhBK9&y!K`2vjP_8EfKj2taW{@G$}NI_IP5 zW)6pPBSSAsCh)P44&DqoCgR4nXhx~$HYXVxf#8DxKZD({miXz6CsPb@Q&>k&zf=(c zi)gTGkN{*i%1&=)qXk>rn}il5IRy{qxOj4Tem}pddrkiNoXEJkoUY zDCEeXU2Cm>Q8Y$*@^`2fmQ zw?YmmjzNh}FnT3W)0!Z8tOWNMg6{)Q6Vr(fvpER(P@(HG>sy85WZC8R-m{fFDBOkw z;}OgyqK+XOALG^p5hVzRTc2ra=26D2bAh{{s*E#U-9ExNFo$W+mHO~|7WIL(^eiq@ z=L#@3-gJ}db`NCI0FD6x6H+CKA&A!|43NV7^eM~6`bR6e{_bis(*KshGTcWHFnF?} z(WDsT4PL?I!Zl{*&r<)2v2SD8qOUUaFXDWEHnV?uyBo`W$ghe$uTH`K&Q7woZ3S)g zK&>&pEj_`6!%iDzY6mnIJy}YPmaP{wWkp$~C91H(4#jSJh5Y-x$?_9KyaJ3%HdZKR z$$(5q;tBi7rwZlBh+@6__$MT-+5)veu|0SXkS)UqN$KK!hS8EojW+l?q>mh+ijP;$ z2Dji!zp1VML4Fcs#Joy-Q;PLiuCqg7PxlFrqNZ9C*t@K6;PQrChGRO=aT>nn-_|LT zKx${s$SNqZe!0qs{J}{6HME6^i$eTHO=3UdimB#>15@O(^Xh!6ccTl&0i4fxE@$ zEBPWhQcRfYI?VSLfDT#9uI+o~tZ4L=f%;F^uh{LD_@8;+^TO^ZJ{6PMyAEgY*+QZ~ z6B)>LvN7Ir48zqD=6+vP4cFweyqo+X=Ky2y>l8NkM^3S+EyG!1e4o&xlie6)y+01) zZk2d8gg5`d8d~tU<>7AwYqw&}gxY$0$p7}mfCON&xLJJoQ zW*M>d8M^<7o}JG18#%6G)dT=2P4I19P_I%LcCgpw-R5v|k zBr;Iz^Zrw#dnL!S{*`gYWUTe4ob^jQof2t0afj(<-!B_}9qqC~LD@e76wcqosi^IA!a5cylB+^m@1q{Nu`RXbo1~5QgMF5RJi5_g};Vz$A zB2^xgCx5p|krXmplj{*9EjZ?`4M?9f`Eqamq)Y*sAqa>z2OZ!hmdN3Rwg4IIxLU^J zPUUBkQ_xBfs|akr@x`yBTl;EG+ME#Nhn%jGTcgPzh%+2g%R6&#FI?jG&(Mw$9pWqy ziro4Ex0;?WHYC3Q4@~SXci*!LPXxfv>v>X0NEVRi<9fF*j@=4xoE~`odPIhfJG?9aYcR4`3^8< z9Jsad2r)a!(nXbR{$;Xw+n#I(dd>25&tN zOBL{RvPvx}xy~2Sy zKy~V$%Z2IU7ALCEr>7>5Wo?c}4S;DT04ScU^vsf2b<=m(#|p>@X!$xC3hPL^U0XE_ z;6ib!Np{1TC!c}cIOW3}M3P(ws>0X3 z3sx3ZqRScLC5E?6)QpMC6ZuyzY$XDoL$MDTcPobAKG&ApKg7F9o6JSSjQyYP>sfcq zxbcsCZTq@_FWS;cAQ^3n2U_+#_E&SWX_WGb$4ehhjl4-@m5Mla*MiQZ(0D>)?8bN$ z7*Fqs9EriiSa+=+u{a1M>8eNA za|+81`(UspMHht^xTQ#6|F*a3vG$T7#3J;Sk{`tC7Lue}8-gj&^gsAIbPWSJeZ3=Q z0fe&u?|GN}MG3|V6ge}g@)BHk3re&9HT_(4gQ2vQZG@wXlNfc#&r>BwZ$~3+w$g~( za@3HC+KI;yEFZznZIIuJ^R$gv(9Dz#@Dtjo=`A= zjVETVKM?M9KV7NmYY2g>m$VDn$xdQT?LMotd@-5u-LKtMRiGQk&1dkGNnDPcYTsJI z9>7BG?n!#VMHmelANpag>?N>?6SPQBwe?g34SW1HdmX8k0MPHq%j+ecBD7yd@ino< zoZx%8rA~$CFd`$ZX1s+FJdiq zipjK8$fqz9ImazTpt(*)b1a0j_rhQ72_n!P@(!pO+j$mB@FgZ_jG?3(x&jS1o59X) z07zJk=yw&Uxk2|1_10R)72x{2D9bHHZ7zp9<(zr$U-o$SF9}}jWP=3C{8H)V!^gE& zBzmzKCxM96>ow4}qglch))nN>R8v7-AW!BZ3Udd2Livolz=I(9mK7n=(Zl_SMdZp7 z@JU8itTX|iKfYGF&K((Som%&f+o#yj+~0{{p!bphu3KJNbVvPX2}}M@oJ&sIE)`$x zMYj&g5alJ^YSn7;!GcyOP#m%(MlBR;Ug}`taH)fXf+=bEwZj(!bi;yMTg`0!+U8>_ zt}}KBTs~3w)YW#8%l0xiR5NZoFbaM?WO_PS;@vGkB)tp&2}3jYz&Q@#)4chAT+g5! zI@MKZ4jJU@df#3m#`|TH>FeCoa~a^bOK(sdML4M4)Lf-tWu_vU50R1EVYi1X0n0=Xw&-rSTtGXP4Op{&yOw)iz2 z9ZN*UIkGZYkxua{4Vl~TBfAAoG*0OM{P?-UKqa^NJxw5UXNa@ zIudhCF|L-J525kV-x;XCwKR3Sf|`CD_2M1cW1RN%#j}NmEc>k7nuzji#!^Pd3hDM| z$Suz^*d|R$f4yLnJe()estKl(wPn6K_74xr{z*M>F;V)ueqBBgn<5lgCF3bk01=gK z0A+3Q6Q79+b_K1lE7#^99`etlWf#rDz`%C`7;{$6KjQ%=MFGIEr!>Sm6no-uNIX+c zL3+-dK35Oc>+K7M&y{^6?{4;i{mD?a3*aat@4-*}9#8&m49g6k3uDX&XY{yXS-R#=h8z{fh$XZ6>6Qz68abxKp`Hm^LMRcMCyX=@ zZCE&3aeE3LgV1d$bG9l0-Ns(H_^Z!?D-n|DW$)Gf&;fqAB<4Jh0Rk$8x<;f3}F>BB( zm5~Qt8)=0FnO_Qeh^%DoWReO*epUqs+-IN~T6#*@S+L?tP{ax=F1>Ut7^*a!vhBFT zn#Qf8_8c8ppqg_=W6*CrUK9`PmAeEZE9Y@psVNL@pCzg?4b-pa|4I?%;TN&7_!c$ zNyr1IA(+wQ<`7R!#$6q_4E-$g<*9Xx3R^CO8et;4J~{PbIQKbRpbZqPYyU6%IELn2 zf|tGJ{f8vvE~p1!5Zi3KS83;FxQ8^V=934~IZCRr0tZEt1p9W2%j(KKDK&Qj?rNrc zlXY{Bw9dmL9t!3CLkg`!0&1=)Wt%U6{QNEQYvaN6U>Ql(+;7K(j=9nR?vN((8FlK! zzRx-N#A^M``b*>}f$0y|qs<<_`|KM#d~ zqi72ohh%L+6kF~^P4?mKo2F;!O>1Uv)|j8PI#mxWW5l(9tHzQ z8K#vdh(_v|m!75!(-OEJcAnxTYI!0LDBB@g|~7tSc_#g-@R z2rSRW@RNrh{hgtSdP35zI#{v`%J7bwh_>NKve5s$#l)|pi46U@1TZYTe>EC;-W(M5 zO{sCxbr10r59%ICSrsgq5LZ^G^esXXFYeawbRd;P4R)QeyVjPIUFFHKLd{)u=Zy~~ zI6yag8&d#ZS-$Ix4vmz>5tiug&8a)wGjrV5>8buaaly06{MYT*-}eyZO50KrjtoD$ zPTz&npYg_>^)kEpp)^7;JZ>4G7j#BsC# zOu<@E)bLF_o(FPt@5(Mdq)`5UG&z6YI3nL8H^n2T2D|~2gIkkzO*80{N!EN~`4)YS zRnAh|qDi(^|4sR+f&%T z!52gno~Eq6Mto6|`ju_R6h&HNPLdhXE|Layoo{{Kmp{K}7g4!}{t%7658M}4OdGzw z?YocHM5ymca=d3**U6x_Z`w*%Zre)U_tINocNkNbG}B~`dmBsUGclp^Er3i7nBRf# zC}k#)&wmaXXi%iMjnBPXGXHqn~6<4VCn9!5|)n zff-NwO3u!=%(&gD!@PDr5ggL}wmdA_c&DC^v5Q>ztorN8->M`#2~knL%73LLN1?UH zN&=D;Vmn+(AHO*M8Rf}W3vyw^C#lN=xd)H+oBjz8YJULGu7;8iEI`;71v>&eJe&6y zAncDWe9v$5jE~%SvvBB8q)H2{LPw3VJ}wpPS|T-m6&ntdsRo7Jzo~&rgm;w0NdDjB z`Ms;qu(jzEZ5#|+Y}XONI2%`jw7LZY&7V+mP`)R0P1SyGlrJ4I2Fwx{2F^gN&6_x;!S z$36GlbI?phpGJY$)unkRcP8b6xBR;BUm>1Df^CypKehsUaFpj!Fv5wS2q zLjZ=KvcKPr=-bT`8Hlj)b7LNqsXQ>vX zHoOb@92tNe>Slv$V9bU?9uw09_+`+q_r9113TEZv z*N}ww@S;D7&jbTv-W>COYk2Z}tT%}dH}Ff*qT+E`+4JCI#1|hG(p{E6UfmjU_sY@h z3ooKhXS$yVZbtQNlVeS8`#0^pSGd!awL{`@H$-(eDSkSH<8f>r%`v-my=Gq=iorNVj`P zdts0tq0_4B7lq>H7NDQrzVZ?6y}jCs!KcNAKLi`6#+_<}2X*rFVLqZw<>I9+nw%xG z$g;pJ;EJj6xs)#g@3H81h+^hj`FlvEKC#eSEy{ZQmMR1c6x}|Yp+7`u4qV zur5XCOf}!5q$PbIji*A7%9Iq9LGMQ7b?)6^+oVB^!lPsrhs-8c^V2QMq6;L{XM^qS zkJXsRHDYZ|cX4IlhHY-(eiVgtOdUQjkb$Kmz%|=}fWe_~ry^R^kGER{%1uAO;~tP2 z`gO1DydM1UR#@F7c|q5YlHdo(dfIZ^(lSu%5U$LB5We@SA6~eLqpm-yJLoCN_eyZ^ z$N9^GA?T_dkNF~UcP3x44IJjAh9R2{Sn08QBc?BAIXu2sMc7)iCv4??6!q?z&;wH0 zN=hMZ-4@;x_GYgwUg!Zgsj{YML4h-RPtbAuNzXL(*C(MyDW+las2Tdq7po9^JAu0T zDXl-R2E&4HiI87K2&Lhv__XJdf9Myl!K5Zhsi<306)3(6AJ{LXQwU11Jci)lCfp*A z#&$sJV_>x}Vr{QT@0ll15=L6?m&Hk^QLzxnG8TokX>JR8n*nvJLhhY;qi9cMtueGWXE3HKY(TvtsHh=l8lGeFCx|Dht!%UDsad;-BV1W)BE`T3zHnK?q> z@wPomg&ejv*71L!QlX*W6B$Y))kyoE=VhwcbxdfDAp7fjP$_k7AHgB**% z0F68GxGBT@LM}4Bxw621x@UVpkiiTSmDdWme1{Gh>@_Z9rPIDss4@qzY-+CC|c z$7B5=9Y#biz4TSEi3&x+po9LY(Ix(Co$CsU|93iYu z9iBm{rDd?c!B&D#4J!Q1EPL>cAMKw!b?NPd9^n%nOV(I;dvG?ACUgLU{u$LZ+I-mI z>F`L)7I>sz09EW~_KHVl=16$yGfMKV%PCLwKh(YT5x(AXbhpqD{mtYEU2+3ycj6Ac zk%JN-SLM&3OxFF(XdD0McN~PDpAQi6uTwzQ~-GS7xerw;c|c49+{bJkQR z_B@Z_!C!6+QCqr{`XZe_6sy08jO#L8$c#{IyXft=L{Xq8cn$oHnJcC=oPy;959<1N zgzfQLZ?*sP7;#geadKkafJ^HD*Kce79ph~Xhny`XrQ7dTFGYYWYuC6sQCWwAVsFac z;yUZj^=;T2$%$V7=@?kNx9_K#nekx9%cp|1Ta1^t^zo0mt)jL~9oy#n)4kK20{5z^OvOR3hzxzG+q!eVF4KT5&Xe{@q}`ZME@eMJgJ$-MW06dy zGjLYp`G>d(agd9#M&<7iF4=PN#k}PEY<6>T%ZU~5+o{_OyztGjK(*QXGoIaK;M?<3 zoKY?>PN?M_&SqRk&RfZUGI|Z{&k#po+? z{$5b^qCDkHN^~od7_fO)$O99frc!8Q*@p|7S$!dJfyg0bUoIcW>oIv5Mor> z-OCeFoJeh_MJSt?8R2NT?6#M)O2_<(UqJXZ+*=FY`Hvdq*4BkNVFiA*+8>G8o(9)Ez`>BpP@>~4t^<9d zZcJEz2ERu|$XR{b79-ket5@%PS&cB^mjtuI>WWI>Eh5FR4*=k*v#OCcY~gEmy5-d& zeyT{F-I(vx(L*F^p}-|``t>%(6@Jpz^ULV6xuo*10`ws*T+fQve1fne8@*(*;6JT7 zDEY9Dn3SrJ=Cg%}eUQv=Z@SIOxffz{)ekig^4r(d>5~!%(seTC@@^_^V?m~5jxNzx zq@3ic45hFj+c%Jx?XSsf&LH3_ot4N%!3(MvEoPdci!FADIJt*7H|POg!YN9BQ1AsE zT1BN)6L=|wIB_t$y?XrnSRZ-@YkyS`olGEIRv=`7(LYC5xyld?OSLL$#f28@}=xxpXIOY0F3 z9JS#;o>{s9yk5Jl9=cZ}X1vOn&-BokW83iao!1GXI%kPEA_1VYrio3?cg%VmekU z`O{hc`>7)cv;pi2BpGHuOhLs7y0K#Doo3}RIXHe9@k_#C+Z>&yf0!6_e)zVB;eiy$ z_&r8G{TM8GXCQsj{tO#)i_mW66f)MN->M`3&DqIve}^PhLFPMOLYq%1@6-YwUv>vw z32baA=js~w$?jXk`_Y7+vouGQxqbbmHP~N7!7GtM7`c?Tg=H?~zkOdupcO1$LgVm0A=c;Qv>0`@uPYTC=&K?8Xa|27UXm_Mkg%3TWlyU4*J^KNIrnK?L`pP zO}xRt7fkd9i+AAH=%_#XW7^E!w=kFOBNb^^TOJtgJusdsYseG#EX-G7w9GB!QrO<9 zvInGDuHqR3oD_YT4Rrv>c0PV(4JvxeelUu4!s_py1C-+;PR91z_RwKtnneLqVd_ED z=3EFaAem1%y?AgtdrMKBZ*gkKUR{FaVF484jDKPJ(o%n_JvJ+H#S55ez@dV^FaH2< zv0VEn?4uIIudp-|6(U>{$K-`Gm9CiD=k8#ODejav%a`-c2CE1=Sm`HXdxB`is6wqp zm-1^=5L*e4Yu7GQkG`^`gvAP!)rE1Ri1barqH6JMX&mgN#be={g?cAG@7JDxlvezb zYgp1Y@0+RSe=LbwD4I@(Qd;ir*Lr(}k;p|JN2hJfGx_~_ zl;~`JkO9YkLB)bOagt3M;t3vJ{M&|mTx>G-5O0+g`|7rNI(ir2TTg{r-DNwgzPf|K z1lXUl8u3p5uhxKalJh$bQMqmW-mt&3Av6jcGR}BY+g1Z3)@@PVWFR3ukTS5hJ;W-5 zm7}lQrs&QGhKH|*>Ex%SW5M7(0QL@wil#XR@3pXSvB*e)v2{-oUZ@(fiH@qg>V!)I zL>*78_#4pgb(X^WG_QkkmqX2o*{|Xk zX#E)JGKoQhg*I(zwErZif|#5C#T`(32^-tWYBv7wA92MZ&YD4LRZvk_6(kSmDp0ZR+4>0 zk}g-^ao&+|o~3!fwJ8DvZy^50!%o`o|K;}bvlj60r5o3&T?*X)u+75|DnNpa8{w%) zy0T9C-d7FO#{_~6Sk|gz0hWu zd5Wj3KWJcWFKVuPFW?GZ+CDtUVqf&QCEs zl@r8QMfu5f=iKX{>4yapF>c3szi`=j0(Eiu^D z3W4|DFMkG~;j`^0e$s7c4DV`c!ETqxvEF@)2;XicN~B|RU2kzC0SpGU4M0M=tPHAp zt=v@q6n$VpVha5!yiD!4`hM5rz-_6?#TH-JOSU->?RXB8p~-T5MS?l07ADZxbMm)F z$6!{W%x^djDp5u{wjJ`bPj8@iuq5HO$oa1Y{$;&f-tNmOQv26-eP=OoTMUn+ApIn}xBgjLJGjdD=s z0fTvdDf|S12F40HEkMhfYb?YNuM6l70GRs-xuEIa0!1?de-9H6fZrIi(Ng^U)5GXi zFO2R;x<&lZ$5nx=NuuMqS9q&Qa^Zv^I05*xVdpu#{wfcu_Au06Pe2BuZ4Z+Ec#D0? zb*Oqh$~DVXbBNO+1^^nLp|~2XXGIXksj6&k*F7!MTgU7Car^D@ z#y(B{$cLOZYe*BIbCa2em9jEVr)Q^IRGi5zBIq{<)y`$;M)?i+K=)crXuZ+Qv`*P#Uzav z3#M#d=6jVN)006wW;1&qVq+8&M2_#Jr8-1n;V63o0xp3D9N16z_kOVckMC_rQKf2` z{}HD5-gH^z56!5(*9N^6*HE;H#{<9=>@Gf2L=iV@L8mMFgneVVPl$FmE1QoWwoV=B z8hNme$<-DdzBI2AuDk8~k7oys4b1}Y@|?*yzs3;1^i;Dc08BN zDQz8gKl~G#d=maEdE~If^c%S*yP^336}cB0Ej;~?)Lpu_38)Iv=`)WRz_xF5hHL)# zX<*-20_7PcAm#N-6lBEipU?K#cFFVX`G-zWW0xRw=FW9Q=-n}lqCjM@6t}6MYG;R| zt^MxtP9&V10xJ}0a14>M{aTaumFtpK6_D7sxpx7u$JSc?(gTrdd@xSIF;~zChS8SSx2RiSfZo5#= zK*YDm+({kvCiu8GU=dS3dY$nG9$~6zBs2E<8zsy7a7%hx@e7K)efp21$iaG^D?s@=()nMMytU?3X>uK&^wx47e++OqIGI}c%EVez8+lHCi zQn@-T!Iyg?vfq#dgX4`T zMD)nXzDO-lFJxB63d7lps}bj39Us#IVcdB%BoMGu0`y!ok6ZBXi3oIw9%Je|3t((oK)%@oz0K z=4t;sx%j2T#T?!JItMtZB#@hQwaCEyl>#FGU;b+1m0xv89ZPS~VOl*8dUM@Ge&YU8 zo=TVkh5;-0CxC$@w-VGtQ1nzLQvdM_b}udn=yP9m0cJY`%x4! zToDG&mlKnc7R4uoHf;1sD>4sutfbr~XC>vHUNKQcW22D?cx5k)^{u(>OQ;$FJ!~`@ znsms`@n;@?;J&#aH_u<3p!M}fpY~hsjbxSDd%ka%>f1J9Nqhen6g{0$B+P+&w=+4; z&v7L7?AXLQ`vuS8k;AHlU9RjsFJGPjx%@~ODDI@wG+=&2J`+0Z1s#pddmjpi5y)n+ z{xr5|J{~XxNa>fcCvV7W1fU-2M4MOKEbF#oT>8YbaLx*kC;tw!S=$#o92E3s=dEsv zse=!KmI_qEnjtFlf185f4_u>=Zb;O6vjNozeN9?`T!%-&j;c5)>9tud1_SjV%xPl$kL43-z_# zu5eVkeOuq!MVg_I4NDT)fgRay4DMn{qHbv>4YJuI`)~v+AGiFZf7-muI=^;#~9d(C2Tw{s|L)giiCZjGv(h&W#MDm77 z@yEd2x1P^mXb}l;`9|*!fF3RP`6`6`$Rj|$rT5FEGg(J2)R#7S%ENSg4+6OrmPAJ2 zaFVL3{N$b&JxmO7IF~n!RL-{(kqg`OV!xV#Do^}x6XJ zi8_-2k%;#dc8c^Z?hGoi=%U59?`{YhcbG7nc@J|aaB2{ODTP$K3yN%n(-WVkPaAl@ zf6!ri57d~{EjC=fbf`(T()6Xaj>R8*&`?0|52*o%1F(GAZ%aZdi#tIxUs{b5Mjl?S zxH#(e9(_b*B^-O`WQ6(H?-L9v|a6(xO{Rt$oi(mJ0g~vLzQe11k3!A zbDz!<9G&^qXcBBuJ}Kf42Y5oa0Db}^JSa7AtTCW~R7G*^|D+$e&m<3(-^{|oKWpLl zck!x|c~+K^EPX8U!`PT66T#aufLkJx4zJ~?sm0rue_)pxC)GG|c`$yp;RgBmycd>Z zv|a-KYvO)XbLg@H3MGSA=m0#$2M^U9JY2<^x2K0z1Q`V^7B*B?meR{^*DNY1mc7>HChC07-Xfm?=P1qF>nsXU>rZA}4ZfhklNoeSW+ z^CLxt3Vh&@OOrj_+ogU)Q%eWyi;?%HFqiVmnp9B0o4gXe?X(nyB0P`6n1`m*hfBh{ z9Y~_^L-li)rx}A9g4nSIH14;47@HdjXKu%{)p}rD2GcmH+^J9yg~ZJR1jmJq{;dp@ z5+NO`;${8R3r>2;Jz*RiWg&E>&EvKQ2W|$;Gk$))g1F2(s?p3kU*YV5@%r#$mc>43 zrWjO^3$-KH)LXreX3dnVtBZ(gaP9n7V5(^^m%Zgex0!Xv={bQeP zZdg^*mfI3-WxDIRe#}$8xsZ!uEty20Dfmyz?Q*clH|w1jG2Rv2;!D4 z;)fqvK5dZ!yc|(&{CNqD(4-8 z(5cE*v>Mu1Fh1?9%udPO@zGmb@2JuU+U7u;OOo#WdJ%3E~_6^&+ZM+V*6$yA>gf?oMx zi>Z<$y}c0?5I^k`*w1l@qNxqAykg zU2HmRC%W|}^kze+tz5hAQCVuFYkWE=W-?iPN#GV+Z$tO$J6#YnxPH`I={P;jp?@&T zxiBTb1)uh&to#pphi6L({KeAtnDrAd4?T<4EDwgO@PpS%I{BS_#{@13lw$_Gb33Kv z$H5E~ws5qP&6kU(<9VI_Vl5$wD~^}5-*dp0kl5k$mU>oE11DN(NmoJ(@=`Pk3dqRA z@(%XqtSbvsO#>=Fo^*>l9z5tEzPHNM2i(WM{UJ(^V9f7^IrB$7oV1|Vkwno#>GtJ} zPT48t;4zGNSptfz*A)`94u5>-%<6X*UZF+Q_i6iEqEr;{?r9O?f~IUbNVj0aQ*h#J z7+i`BkWib(znokL|8M|+O|EYKj*CZZyQ0~ce+25vhRCE>+n+I0)H&mljTQ$Fz=|Ui>kJ2a@xd8?2m!7>F>J|yS#1=Ri46fw6TX;GQs~Uk%u?0N^ z0{1D0g(wH`)!*mB&K;Fk$8BGdc=kDF%K$I$i8~cOWzR)x-W4jplhO_2Hf2aE^W?Yi zA_t-AX`5c&+J|JX&U4I_)7KzM|IZ(B#TS}1Q;K~HGo9o)!3n8<)hFu^Usk+*J~Tx4 zR`Z(mXs7Mow3xX#%OL2xzXhBum{CnHX(>Ju{?V7P)t=C8~lIz${Be zfMf^@J(M3y+P6LjXFfx-zi|<|s4yerTi;B&*s@6sUK~ReDHW#UF0WLEl@hiGn^tlN z!v1>ca?rz1YeThwavk~^Ra`)p52O|zk(cNAO!m1B2}!b2DrgK`A}P2E-g6zhY#ohVt!0jQj+9)Vi9uKx-?OO+I(1*%O=D=kpe=koKVhZkA3`v0!eb zA;yK*i{FF^d16#GUi@| z8Qbs2x!-{-Cgm9i2Ke{@8ri#9fy@y{I#5Pe7+P+zEnXO{Y(844hK0iBbOeS*rD}v2 zSqf?GKYK+-VA4lvtQ^f&h9;}b^2lqW(GoMcWJds2pf~x{T#))B<&DaNl}hsO$Y5VO zzQ0)JnSOs4Y_Jg3@>P5IL<_I0o<_;XcU^*3B~Kp9Y+DZdGD63xUNeECk(`Xc+Rzrc zm_vh!cuokK_|NOgaNa5Yiele{B%)D@OQBz@i--vv&|i3KdD9`Ap=gNPAfIPZcf zf&)rv{?5EP9bU*6G3xUY^4;3jwEqe1aW%Sbek%P?2JOl{!ywmyYn)0pK*wry(|n`z(tN{G{kRw;s8{Bnc-vI^$QIach2){zb(~b`w;4N^C;v@7J7D#M7AuudUK3|D~)_$r@w{=f5dz)poXgE|m#ak+O(ElD+x}b@W3m=aXLuP=uU5tGnK53E3 z)(;k#w1Bfw<|rRA!4Tn8RUsBGXAD*L8gqDF=7=1=KB@C;_EC@!k~Odcl8w3q2{U>Y zoW4Jea7QSDzX^`G^dhhs5RkReZyoiI08haGq(kl+7+W1H)pd^|lFxYt}HF4j; z+HCZy1+YgD_%vSRy7Myoy)v#m3V-khXqL*O_W=BC{>@zva|&TFn0^Z^1!qvrp=)S| zamS&-ITa3FZ3$oY_b`@d6*X}d%1MR-!?!PJ2y$EEV7NR3xHpDCNIe$Q|F=$Auq4Qw_Wg$}Tuhqbsv&tCh`H!8jxEIf$V0tihM zeGu4+z_ITbgI`*_y(t!i>C6AP)Qp$vMN4PsNIMb@cV0y==)=oRaFXx!KLBrg65!(8 zlE$ux#EYjOlm-HnW|lJ_{p`!w0mY2yhu-Jal*Bf@3CQ8~zRkTVZ*qIm-UKr)bjQM1 zrglc9y2L4>BoXGUm_19RFt5UHg#vE{Xs{37P!$LDrtOFC_dW^wX(@y5U7h=!Dtfuu zX;?0}|9dV8a1_RT@B?S2q5neL)O+&Ok__LcB=&Z3CrNwaQck%@z9OE0IJkMbHXoo% z%)N^vj{o}^S8R(tEZufr~5$x6Jt&b|_GI z!s#Idc0(V%t|opY9h1$rb8;wF5}a5IE*^WKivCczJG9j&!^?|?iJoKc=_S=^OJWg&5KZ8nOIXMlLE1C^10-I(704Xje zCjBTLNoYj3TIJiZCaNaV!?)|#6c|Y>t4~C?=RMFCHjVpbP()2hBEy(#_uidRGcww9 zjomK0eUD9?rtB=JoAF(Uh}`AXY8~;8WW4rb@D8HLlrT`na~|ia1Bj-POh~rE&h1Nl z!WU->MN?B-OMf-WtfUtE?!1@fn&cN?NakcO0kpS{<8XB3JmGK(7TK2aik1@f#gl8t zgAzb!QKry;ibXF1k4N}OFI3v4{v0fV7}#%bR{77qy$1CzS(nIAt-01!`0K5u3{~(M zfv<#(l)mU?Op7D1GQo71WHv;F%@Bm?K4+}?vmg;4|EvhcjuLjChoAN+{=EV{#g4&aKq@tJ!oFHqtOJbt_rH?vtrr*5_Nfu2{s?yB6(0m z)eQH-Nw*qqV|i_1SKCWDT%_vAn~a%N8wR($bk4Oo@XJT?wOHMfW-sa?Zx9*=PD12J zUzYpTw#<~>ym5CSWGQTC`CX~d4BFW%n*6S}r6Dhb^9fU{x$%NYa9=?c+sgLpJlUs4 zrf&UBnAGd=&-^1+;H~!juBBmO)Rtx)c zU|$o{=X?I0BfSNLH}E`uVlH+&+PnI3MvVvU(Qh%3ZPaJHb|J*z*3boeI^VN{rpeGM zAbFE5rN7n?tgh|bZ@0XO`~A9B&c3&)Uaj+iN>G67R%i1~rjUv)_Mzc3qE^hbgR}w_ zb=sp#dbjSBV=(OpX(sSF;KEmNOl0s6{Hhl4>RX*zk|jJxAe#Wa0-dayt*2@y>fEXZeA zSD(kcp=$R{Dj<^a4Mk>xR3#-rWpuiA^=)+?S4v2?qr(Xgb);ZHeC7#ZL?w}cv+))V zjem<&t8ZGas&XtK`)3Vh_u3ubTcsH97*V|zB1Rg5nU!78TQhQNpjUj|R`R_ikqi=Q z4Ib$QV;|7P*Cmp;_%<)n41eN7zI^SRLy#@${5}6}iS+&D)tX7WwxT20R*&Y~zcMo& z9>X?4hNNna3NUIhBFzCtz6P@wJoLI$UsNpe&?rg$6OEK-T4jMg zzZWlXjJx9&>OvcL3X6;XeIU2Kzn%s-1xah;(}+FC_~v;bVGZa_{BrNeCNH4bZ^Is( zLN3lX77I;}^c6`hH#HYgX1w%^kL}J6t(tL?>fP{aqTtKN$)m<1EsF3;1(FxnS{&Xi z-tCvJKa#A9BhAk_D=pS&ckdfo-$=PVu<|nll5!uW-l^-Afh_KlE-vxrq!dfV z3U5ZswwB*0yvX~fdvec_uD;%d-2hfQ;V2-T0i9CV48P}FzOfC3W(e<_Sx-K9Em`kI z8Wb8t-1ql%r6M=oZUE}@?GAW|4~lmBzDk-b3a_P2*NoXds$p4)M&a*o1^6+VdO=dF zr^%4{w$HnGPOXhBCo^qyJr0dtr06G2h zjq~2gFu=`8JT{)wmYw3~oYQ6KoK}kxH_xdOqfxl+3JV$(!QoHdg5E5#o$Oe@M%0%y z?PneDoDH8@59>L&=xj!|Q@&_d%yc{$Vo&|>_1egTTLwGKHP{El&1BOC*DUcDas-0t zxY7@BLW?P|^!Sao9iEsye6CM8jLhBPDRe|P9#BQn=I7L%JxS4niy|?8d95aBl0AR_)nK|b zQ&+z5S)p=)RmgFVrkNUgLx7dSwx7oMI2BO7+*HC=tpkQ4Fl zt1{5LvA=GS)^doGu^94wc-sRB{wiT4Q)Q221wlpO?p+n72QgGDy@{p|c{pk{=3-r^ zRk6x!XtC1!gW7Eq__@@ek7vt%nncb!1GgOIs#$rNYoA)`+|07nDMvRV$4;h7f03sP zD{N)T#C&#jt~I`G=B234mbWlX9wQ+n0hXhQJU&Lu>GRiZYUQopc0`nLLmiT8x-|U& zogwwN>VMDe_wQIG;hc2y^qr?nEN9va+Ic4yot>WF4WR9pTb$fv-=XLohx={n` z<|2h_tn7sU$g>Mljp#erzz^G%NxF{iYbh84?)oI0+jIH`sQ8VFms^lh*6=SgLEy?b z@vQV|{u{5k%_0z-fOd6b-a3)ArVqgu7DC(nTv{_WQ~VriRMLX$(gf9W$*BdDu&`=N z7HjNGhFL+hV}V)6SXFm{AhqHe|0!HEdf^aV6YL>lN}T<;Kl>${Jg|5&{r;;Cwu)eh zXhJe7jbU$?aNl@W)lF0Oh)X{%M`m)^BggL<%3TjltbnZ6 z$J5-}t;r+M$O^U2-u>t!g;eu@EvMeZnY471wti+hs?~W^rFyZkMBhYNLNP@R9o)0n z054N@DnpWPeM81MSb;Uh?{$591r|p4NlLIt&sUw<1QC+iA^6HmEW?nGMHYwQF8Ex9 z%VR&GSakjth9&{ZBj$4K*UUc8_w<(>=lspp-}B0R96vo)&&QnGuh~VOxp`Kkvz_mj z6c{2ESBZsYP&b;hQ%u&SStaTZYKM(7Q0`c&vr6N;-6um;(4D)0AE+hy?>Tk{4px#d zL^zMAkluqxQ(dRXQ|jJpBEf%Tf9mf=6?MrQOpfd#86d?JO2$6B57A!|#EX1(a=fl* z5!#+F|C;oVU1HjYH`OD;`RWzvBdrRQ%}}4PAbCpAhtE;TDPM(Y@%1_cg(nEq(Nv>RQL6bI+>yf#n6o91*lQhd6-ju!TFpT z_8Kw8d4z<_EGhi7?N%&k9F&N1_m~QO%!#Fu(c*u_8{blaWvhxtp7g!Y!Hi_C+&yF? zJb%FMNxk6EbK-hj2)9zit;fQ9_XXyW!>XXFg3XU~-bkG`Q>RzBdq2ipI&^>HZ|pC}&xk_zYxR+Qzc z(Q_7rurmK6Fgo?Db{Xb@L@GLkBQH<)$-aeMFNdJ%|NWfQZy1KkJpR%E@>O;>SdZXP zV}eYR3TRyQJ@frWi&ph7)qbNz3LGaKEM>gJg3lo8*BJM@H77>hvPgjLDN~y$DATlL zW<9WF;_+olAL}+EvvxV;*`>uDN%f^iu5dXrJ4TH3dw9eL0mu8?b@`}g)5R#)>)9NT z;L(SRPY>04h;oj|W@n}$*RU-#`Ec|5EQAzQ(b#GeTb$ns1qe{9c~rOCES3R&IMkx;Xudk(^fQ;fU;y@fnrF`1w`QvX?du^^1GDi?i3gZu< z=~J#$82v9NK5=I;X@Z!f5jSQ#6#5GS5)7+=8~dTi+s_TE;boMU`0ZvuV)*SI?%1^wQqD(F;=6xArCgk?8f!wQ)Q zaZ|HcPqWH#T<^2ydHfzdaalCA)+GP{S5YL2=e31qI(`n}ZPJ1w?6>fd1ew6ZM1rfQ z>viJgQG0p~K6g3ToFo&o$qjyp8-LxH55N1YpEJIvK!zmNa0GKO1GK^2*m+H22J9F|XIzfh^YHH>7SO4oK?+krk$QN z2^;XS=`T0I^E%op(`uoP&8F_?lb794NkKtxtpn}(`Uic$Iu_I*X18&temo~%PDE>_ zDhx~OYTpmLk&;*B%@-}=1Y;W}kwiMd@y#7;dq!}JZCc#sZ(^6bl6g25clkn~E7TzW z?*Y)C^Q)pw6;GWpOER%OtM|Yz=4{>R0rikN-;dH4X8ceO=Cl7CTVyn2VxOkoM~5HfEH10<`Ee6RnT$GiJ?`33 zXm$e>0P(6Aa-pGr_V**`&1NuRg4_2lT`k%`&dSo9rlUvI{Xk}GKl@bvKMuspM2Ft* zzjPgTl3MO#1K2Cq8+FZyw{O&k}3iI~RLK;}K${E(|i3WKXm3G!HFHDcw z7OIoLheo>!12VxFq{WkSS&F7fQp7*azsGa*XJJ>j#p#_6r%oWs6mPx^@OEDKI}6gs1BIleHeXGtDyvJ&(@RvI{o=ygWo4Kd6I zwBZ!^%J**Yx|g2dN1iWiirq=R$!~WafevGv&`~F$-93}z4`1h;CZyAPcVGK31dDcfD(CnAlWpGQY> zq$%R)T=&tDV;pGk*xbkKF`vr5K-geeOH02n@d!HYzjfD)&9U{-Gd1R_dkMg1(kw*1 z*ls4>f+o>H9g0M>C#|KY(5+rhmcl6K#H9wDqOM>CmbJu*m+&~1`A~X&Bnoh&!vIHN zJd4=p+4Bh+WB`R*KbP+v`m}k8X8a`>xu@X&0bU@j&Q1yM^Vr0ujMq%c{U_taV5h}#j_huw^ZDtP&;LTGy{|! z><K{Bg{+vSlT2F|h+m;OcZ&ehy?uIT~t)-73BqH(l zxFdfzy64#c-{_XV8{Ju41PwU*kFCHyJ{8HRXw6CIc`1aFSIbkE37JV#r%=a7JI8{1 zLafTXMr0#YwU#$uV_yV3=j=9*T3B#T;eTsRTDe!N?k>q=roDfU`DZLq+;byNbn3u(pfy)r z4|r)+#po(c*sm1zJLBU9mZG4=gG>=9!*Y}!qzh zvg4-oL&XfG`~sN==Ma3p7rbnJ@Q!O`fPH9lXT$y645vvw2Qqu_gIcdfjR;56=f}UUK#O9@peWv*1hdZdrf0Z$+zHQPjFa>hEc@ z9pwtX(epIOd#6w&m_KJnvz^dEEu7#aRQ~^OioWZ$VGr=1^AKq!;c*AyWeIg%w3k0_YLNDnkDhO#PX-L!G&C5kHBZZ$Q6 zve7|X41aYyV!l@GY8C$UBm)Ngjq+hcp0*Y&$$%X!va%)KnyzZHq%2l<6h}jZ0Y7Me zoV#{-^O$ZG&de0-*yOCjRG2SRjqo?63N2rD8f#?~LK2v^sud`-7J#)+ge1dXZzCzw z6<{Nl-Z1nVr3I>#JPAn=ZmHZg;-reHp^D7I-B3{XKosZ5!jF2M*u2D$EsT9P5yaUZ zWDCz54ypg|$mplL{1GJaO2VEBTD!x=aH9$R8VHV@8I`+EGpYkv6J->|tRMZZKC zDhT+W{-Sdyk&SGz_i9Ot%DDoBM-LHed~PD^;{&h?7^1=%>~+&v@&BGVU4 z0DgKB91nb;6%#z|=0bNmXKpIyM??4AX?H`Ri>@&BTJx>Pe*y{0_NnEm?2fN$H&@DT z&Pmfy)D9_ozK7;`L;C=HBs3{~$KBF8l&&ya=BTtz%JOeXw^S2GVwoWc#?gq^JuhGH zh;7`=Lmlh&Ja%Z=g|otVAn|RHD-!lU1#*L;YM5q07EozP?hM(V9ojAMe(d|{Pk7Rk zGJ8V9h7>FQNML(J8q3HGZq%!_RsFb@R(ZqoKbdRCdBJDFHh2+HBb6Wv_;fkf`Z{!8 zdyY14Km+^3phe^SKDt2oo`Ru4U?3Iz=cz?Ds)yv&SdLc;DOF8}M$Z)YQagghsAEiU zm?uHwPx14K6+Xnzt&;I7P@))pL_g^QioP>ovdpvL*JRV&sf>01o3gE}SjS9W}dN zP2pq+K776Z;l$nn_l))$ihi;y{K)_K2y8l`w#(|O@`3-srGV~?u~(nfgQ`kOI_sfX3)7uRm2V~*{4B_r{V`P7JB>bP zIza|f&16Z@%ohp?At3QPa-?*aPzHZnXAkFtlIR>}LdNXBOAz0)^7j(>zbgt5ffV`Q z@2az-BXwe1H?0ewu0Pv(pODV(6ogHkQ;B^=j^oveP+a?>QvP)m?qcpLBy%KB=O^vz zAFZyv+V{BPs>8VHh|Mis_v(V=a3!`+s=^r&n>N_ zl&1>2wE1ClHn#6c@IJaeFRAVhoFR_`IMlI3@id#0Wbcjw0@4x)^6f91aRvl$9Kt>i z&>5OE&Xypx-zekc1%Y!uLqBOlL(fd!@oYD5n^GIV4F69rf?M(My7y|dF6DA7)>-6{ z{n!*I^B8x*785M<@QV|3naG2srjpmHWIlfl(ee6G>6eT5nJkPPdRp0@&|co;gy3E{ z2Ld?DK|7;u`T(g~pPp((%xoGpeoII%td$wSY4{ek@GhS8Ff?!~zi zrS-d(NmMMpzZ0%n5qhi-;DC-%n z(&_(-22?Fk4!YGSt<-(9?T;<+#Q=#+-%7aDa=K326n_9?P(g3m_b&0aHGUWa#L3)o zAny>Pj0iUXhyHg^e-&`-%zp~FWGgZJ!{6C`JI;_d}eFJ_Lj8UVJ zc64_NqGQzP0UO=r=#WrA9NkE#ARQYm9ZIQyptQ7zsDu~@cD(z1kN5q(|2)V3*zRX{ zU3p&T_13I=k+3N&+4Y0jlk14xk`RhYiALLi!KU zq}8N&6fYGR!H$3fC1KEzZEno%2UJb^rvVdpo^Xu%LZFnS)PJ%s#?gGIOj9Up@o&RTS1H`||7TiuR%Gxpth(=c1qPFYmg;rm$F!zlh(%E~1_(}eM zXU%pNqAUD=#x;?F$;NHKJgacy-M5~@L5^U@zhkFL5;6B+lR=S9l31U=VT}d=Qa(=$ zMr7hbA;al|FYJzYqyT3BjX!cSJj}{`G0#(JYj}Zazf_A zEG%iz2%zH!;y_ruaOQN^>uwnfjq*21(mc*opLwR8(tp(P_nDxd7@Tirmd9v;w65 z?i+Dp+KNwcX;_1u;IVt-@Xe7EoR77^!ZZ`_)@*>`{C zmz7J*>W)al@S}#|M=;POAk5>f5C`8&nm4Z@^z~EIhz@dv$N7UXqtf&76W?#ac5Trr zZwGuYsDzpsO1^X4J`b4dxY+Fc`3H|Wkm++VEiLvCC3r>!_i8x1!g^!7Ti{W~lwnU| zHKq70Fw^{c_sUmQ!!Lf(LKnmoZhikm-TL6A(a~qX{{3nSO}sWYaaY+X91HaUt`rxq z$8P_5XmE0(*}A~G5fBQs5xsBM!Al`+3;4@Du{9xV{O_F@z5Rw^1dn762ReNiNUnh%{#+G{ z@ExxZgC-+^oZ255;^fX9$O$tijdwT+zhWVk{%E9dl8|-eqYoXcDbF z#I1C{DULbHNkOO?UjbLPD^;1jmo9Lo=;R-M?WU1$mXk-MaOeIyN*ep%FMoY%*S2j2 zAO5>S!{EHED7k>N&MniEQtoT;@yqV6wD(p2fVSXVe|EBM`-G`_M$ddxpK8@Em!vLlGL}8 zs1lAqCxm3_xMjMtp{^aq(lsUL$TQJhqf+49t5XAj4AADg#_O^4qFA7`S=5WU>8yg5Cg)$d@MFA=f7lS`}zpqQ%L@LYk4Bz-~QH3wL7MCGrUJ;0?wv^!8G*R zrob8nwdQQHO1-c@H>%*Ku3FCOML_g23=0L|hr}`OcRg|OZ|6iQOsem8R+hH>s624x zrt%unS`VzXiZDGx5_~B-d(;W?cmw1y$@n#s}%TW`YM z9AHEq?E*=?o&~M&dKyEGOUH9fM$)~Co3!y1;32wSBcNzhBqv8lctOoc#9zm{d%O1# zOjOscprD!Cj!F=@_gf#{AP6$vx;)B6@Oko-UvBmice4yVCvn(Per3u?+(F&@^>QY? zCu^_K$i;X3*^(!7zhkFBLeJFA?i@Hsn_rW zO~dm|oCscnjh|VQ-|~HZbbbNVzAqiupsAsr5ia#?cQioCM34;vqvlu{?bkzbk7_y) z-yr>IEvmBbef*TJ9K^Gzda;OsV&a*<9g+}!Vhz9_G zR)?~srt~ff6Q>6rpIxXx6g=go=e%1MGd%K6>(0BHCM)km6ST1LVyQ?1Fr`pJ>En9( zhrjH(O~i2IugvK$J|4G_+?&TTd%QuGC=iNCO@iAtH_w_uNt%}LX`BK{6b>JsuYO+y z&uN|4Z)0IY>LGOkCmm22de>L%ob>Q5=cFWgrc2{YQ9vAxA~l?qZkcZ=1IH!|V5cXS zox}Y`xG0PRcE~VD6KhB9^X;tc8i3T-S6v0pOZPg*Q4rS$HBrgqT z0@Uc|$5}me2*)qM0z$X5UU7maK8?1xaEPc@Vadp z&!G6hFAyME1_FJ?dgI!qM@f4IoL-62t#N1;{KAP*jB@6Lz(z`5^BRfriy)3qT|tzG zw-%sa*DChObZObXSS}u$E??nOZWNU-XxfKQ$CiEY*>~)|&jP3diQz(9hc;@X+gE^v zaeLVO%1JJ1Pb!r!Q2@c-!r|OePhq{Hu~@-dmj{X&c$&&cKcfpckk9~de%^0Jn&ANJcbgDq^ObyPtdpr$^yMx zV(0{bTbnhWHk(r~oExx$hTbv%`mXRMS>M25S}Y~A@d-;6Rf2$f=n-+W@`q*G~8+`ak@iMVLRj; zW6LWgnEOD;#J}Fx-;plbzM1WqKcKH~wb@sTRtYQUs*FFZBcTg-L5cN+);gPXNjs%y z3_tY%FFZWoP%*C1^q@$X3fGC&Y^b+SX4znZs;81!h%9WTOG=9cR26aRbfXAjQ=J5A zGuPKj0y@H%EH-pvG-H7mq&+-?iRg`qfdGpQM3oI%546wVmRN|_1)&z~EHEy^9CL|B zl2|?TW<(VcmI8K^R&Tjc9v^0jVooI}#H9Q4da{*O@my~36>U?5 zfp@Nv!|A6p2v@Lj?A8ygmRMu@Yaa_NL2s(#f?_qaxOdK*VeKxjNx2DoevXrbQ{!px z%YO$S5(BF)NpwDNS8v(C7}u6~C+KXc#JfEu;<~2xl-Zr?c{#-)MPu(*EYKxDO5O~Z zo^O#GInCs%$tjKx=)2ENOeeJ^lTxcesj?&$S0@qjg+fjUqL~8(e|!Tihn5B>0G_sG zWMsGQ8%5JhL=uT)MiN9&R}<-|EDqLrbDcgrvEmp}R*tguBF$JX2)u*P{1jugQ4rWC zf$QPh@IBBk;0570B`ob8!|9potf)Fq^TkHEQvtqYW9b%M%B|tdaQ>dfEZxn zC2)8c4qH8>uA=S6>{7GRnd($m9U@}}??|D`5r3Oxhwb?-D5GAsYHq@xJ<=9p1hlcp zmmg@x#iYmiQ*eY1q4?(=lDb(_*UiKDwiq5DxRih}zsEP&oOrlz=tREtmB_2c{WafH zwAI@1CAZ}zw*{IT-j`}8?>e9Jp0cdpTS+xH_y$o1{DZJhO}f-lJw-28xy_he7|nMw zqD~{bpJ{g2+jX0E8$T-Y50}_3Z!n9oy!?13t?Xf^nhN0WCM>i*j?oXjMq--A8eJcT zstBGGHdJ&KtvH_8t`z&<9Bd1o2_LEW)4aD@_#1nyGg$Q5NDq95da!=CcM`t}IR~QrvP~rn zI6KDYGi0+E;jT#wzrIWiwQFWg?Mag?^qrX!cEx9&@%{&?ZTWx;Vf;Bh&l}KAZ!CL% z-oQm7v)|(URYXRFO{AcvJF93aWBk!`y?bx&KDDPG@es_(ysH}ZJpC#S*O>`|xU8o{F^$laN1S*FEr2^&s1mDoLzOvH_2$83= ze2~MlQ?@jf$^;FG8?#i@Np7*7?Uc-W@?w+c?!KJLLxprhb}kzILEecEMqHNdQmUBz z`0qGuhJIf3lB@f zqb2D#yJ#HHw7AZCS}H}=wT86XKf|4iGM3p^IQBsipZe#v|Gpj1`=@>69N;@B9UV5W zkxA_Y%~opMte}mV-DefnV9XOV2)np7FV)ZOYc8Q#^HapWZ z8(zSv^jllTC^IYxs7kb5ZqmXxE;rR;gj`s)d0}SaTf1<<$v49JjOpu}cV-0HGs7Of zvn|2_=}sSO1P*`7u~_}R{B<{|I-Ki@B6DW*$?e_7?eZua^Y+W}>6$m_yMK8SJ3fwM zuLyqldX&p!UO3Ge|2orOb#sAHxxkz%)Vhib!NUBP7jXbMx3tmO%&5BBF6_p<50tVi zTWw&6+}J!>nqm`hbMwwtO!(~jhD4g-hh5{GAgmAws4mqXz)Y6wA zcsLOy96U0OOknSFoor49INXeN+!GtOZLY4xC4pF6LjX7?@pAOT0yg*sS`@J=lzumi zEiY^j==hv|Lg}F`I6*JOBysz965qgoSj3Q*Kq&n9Q-asy}L$)FtG7QsvUFn|BDv*mw=3&@%0UG$e5+32!qPos>>A~gOR85j+8rN7Ld0Qmj@OF*Af z>hPesoO@)(85R^?jpV$s7^c_f)LU(|0*1_efB=AZ@Gf1+yscO1gmuO zV@CUlVk-12^1xp=Mg+szLUH=`AFY4BQOb^G09R4S`6=p|dODrdJ42wtJ24X6OdM8~ zm0K)2IqP)G8xD+KVX~Ad*{r<9gLEUwT9f?}fk`+9$Pljow6$8bQls0P14^|AN}n}V zN1u4{vS!<7mKpobepM9m=x!1mElOn)HI}|?XePW*pVDoTZwj9x4rYuM(w$uvB6~k|YaGpWR0Wt2Ru^P@Ww?C9 zt=Pen1gbxi9ied^2C19?r5%ZZ9!;Djw-0HP?S1Z!*p;_%R3jYaaqxb&*QdtePD3O) zXPPcWoN4Fv8WY?sEh)%^8K~0ES2OZ+nL1TTnU8dcTWfy-Gni06qg>oXT}GG( zzY@Om1Q+0*mWZji;py^--~9H5DyT?Df zs0ec~TD&1L8Uj5!*MLnVb5V$?xo33T?ead=mv1!NGNfDPn$=VBk*d;{@ygXgunuNm zl0M6wn!;Q|^cSO-rq3>BAg9UH#qnMe(68wL5Q0+P~aJGTPcYo3Ywr?`1OV^{9 zpnq#jH7G(62HQ1=BF7XD6ZvU9;#cRv@=-zMP>~A|J+^@z+<~E!V!j|glwCm?_ zhYQW9vdV=5VfF>ouM4td9fh*Dr-8_i0NdSp*8sM7Mp~5a=`*(j#C%=`ua5|55>KD1 ziUu7JCTRENF&B`#V1R+L=f5LTq`WT5hZIkDUJ;!3zde{Yp!z}alFAPnpu z_^8dVx}y1p8RMako=L#tv=O|CG;Fw3ctsveg01(tPOw_NX)`R%f!ik0c7cQy$IwMT zHJjJLfaSYHezh6ptonOtWrSVNPu#m!H~00DT*0q)OaJ4dZ(bw+79`5}xnG+W(9`~- zm>$k%YoZrDky6tTU)}PBUo=L?FLc@Hn*>hZ>SbqUb|_9#fyTo0xfBA#I&BNdUrYO2 z&Q<@M=P{BjbdvH_*gMN`wqsM358iifTWWe3h|3hTR`kTmXW@C%PEWm_z_@6(0>4JxQzZm-zlp)@M(6bJ1Cb&{K z8uQ1xOUzL{*UYK?k2Mj^e&V)!Wthk&xWa;}a)OoodNwp7Sy&jgi0%=lW&?p@@3v{0 z`6loQPYaVI>;k{#7dDS-V9M<5rEY#3#-~+G9_2db%tyOT3O2moceTrAC(lRz`Z3n= zmZ8}LyrG;N1KoWP_kd?V=u$s5x_nH5SQ?O-49rz7$aIRp+HD??E)+`r5P;0it z@tmU0B5o`Q_!HkfG8+={M$q=*^rJQ2WygzT(=KuP1*Xw8VtO;x1R<GJwH2EXp_Xv@;+ZB-OK^DPKcd`m)6S0q_mWE=e3U`*H^E8@Q9cax+t1f z=PTA*M3Rcl@%AaX?oP_mAdN!(9xwDdwVq>{exUO+&weS5)YDorQJAy<=C(CehTTFh z=6QfgCCiLx>tD z2moR|rJ42DB!t{W6o$m8Me&8^diuIhu2(<*DL;MkPx+tXSxHBZ@-MAObFWN>mp89x z{N8YWqgr^esRf%UZYsDpI;BqQRfpxsnQ1YjgKNL)5`?DeXJmo^cuVapQC8nzix)oAjA3~w(LAyZz6=bPreBE{MrS>DA6R@&h(w42V@=Q{tfYj-Um14z4J)J@3Bir~N0quNxlo4}EoW{qNx zU}p=}$_){Smn%<1uy}~?5Qmf4K1?3)^bySaXYvSBss$()oI5cF?-yO{Fim7K{`uYV zg^GhpH3uO{TT-sxDJnRD?KGX@6FXk3${#qPXL_|&3Fu0GTA^(k{IyNu&}XNSxzvK4 zj0;Jwl;@rLp%NVqlco&sD)biFrAp(Ka!)6|Q)+ZJ{meXOYAgANV8H2hn$}9SF3Vz-0%C$NEoq zrhZ6VbWK*gT{)^GhnHrxUuo@Y)eGvu2lQ-zIEW}$@;RvUNj+#dIW!2oLUzm?C%lkH zXabH-;PJHC$I>*7-@)|t-B(!THHR*{rP6TeLQ3DbDMtD_W=REj-~V2}po5L>jwxGa zQ~%}{y;-yI45ki*1y~oby(+!H^b^EVDslB5@sYKU!IK`0)S%T;x3L|oY0q_M>lELZ zWXU;|nuE7;RDTK{uztAbrvdnfbWiz*D3|^L(h`|=rpaPt|+P=R#uN)~{*5MgI@@xhbnj*GZ(}_FIoC z?A)octDcqvM)l8nA4y?WQlWXzW+$b^3dy9q`oS_L;&JlFVH5rplHX;IJe z-T-z}>DvLWFTQZzQ7;HAeRb!@o6f$N*GWG1##bT_qz&4CTgl9)7@>S`OnF-uP?-xW<`2Sq+|y$Q<#1N$NBD9+PQ z7)?_BdF&pZ?d5!y#wA|rie#_Ff^h`f@=U`n@BYSoWSK$DwZ34QVodT>!r=8`&E&nC zPq@#yhI~GJ2#H1>LGm9I!dl6+} zEpi$XcrTxmgXoW?LBg6jK762A)3=#~qQc2^{L0ML6C(Xf+^KNO3G^BxBOWV&2a)sj4D#cooI~DM9g$ zr`1ncr>2U$GI=jsi>2y-|Pj4uFkpFe;Xa!aZV@x z`;=psGQlKmRhJ9OaVtIFSp?nze<>yhZ&-XCvQ5Fqxm}Z<9!wPd)+^kSPg5T`m@A#p zIYx1vPIuLPW(F;yEJ9jHQ+HLH@>Gmw1jmee^GLqWh2$bRTJN|wtrRk#X%jsGq-9;| z8X)8~(3CEo^agBYibAGo!;o_at{hWkcGcZL2i&K~9;x57I3i2XR!9gmB|q}=NVSxA zU&4sPIs(9Z-Sh>Z4*h;e&eta|)2M2jK&C46{B{TDWdD0fJInOD?+QGgOramM#2KdF zPoUdqD`q-`o@(X)iij@%5T4bQO7{bf5r6Og32ER3m%Vez^z!(KF`|^rLFAgrco)c#Q%g;H4Oi7zU z{ci6@JT71o5s<fM8V%dwTeW z#C~#8Fq>!-n+11S2wh2IyTPDYXlLb<3ae5iFGQr_koQ-*py4}t$+c8{o2F#+qK*Wq zYH+)u;$Y+PAe|bYPg!1#y@yC$hYFT)i!adrXsM$+sp{>G?mi)4+&kGf;;p9r`_WsQ z-&jiCi=7b4c5*l+zm61MLDjwjg8(Yf*W)%J@^|hkl#^-Xb_g503q-j|;tv%-*q-Px zqZi)(l>`-$=W;E~$xukfzMZ{{oDx7(KE7w_Q1P(reh?<2VcbGR!a9=U1zUz59&1Up zLQh+fZ6_Mh{-Hy}jqapGiLNpt?FLkoj|s}gK|7bO<4*%ngOL_*x79OxcD_D+w<#0QF%r3*Kj233%-f_9lS^hknZTzYS-CkLBwcq@&o2X%;> zE69Mw&PfV%&EaH0mBrB5AtlB`7TNm>;e8FM`N7R^swJ=;Ord0Mk(g$fXJ{$8f1oup ztm6~^3?=}%Q=brK&h8q^8_n4fG^5!$ zO@Y#M<#l0_HPsG9&3VC8T^>m=RUqb@^pBFhLF=9GfT`54w^VDLdgffL+V}FT#X{}E zqLh7l*3cZ=5%?Bp^&7XV+8=AN6NycdvHYsNb1`ZCt# zhx6~7qV%o!61zBWI@&{%)sr4r7D}qL{n~h0yI2iU2mHgeoL(M94L%SVo9SD$2_e zEHuW4t?p}ld|%L!uB+U#dQ2`Qj;>y`g(UKJ??KUgWWkl^fAjljC#~1^m z^d3wrY0$inxh~q;7!|1S@m`0cR-nnG5cka6kT2Dt0UDA^sW~n9D^%>3{^!@)E(Rl? zOxjI>t*SQy>v2`sfS#tnS|6>QQW?uvqvk3G>)-_MzD}Q48#hLS;XJ9~kKU*ZkYw2& z73|$3kazUL=!S!?kwSCK7SyLNLG)kbsZm7sd$Sauu(tJf4A#p2cXozcc&~>ZiOs_5 zXEu$}Q;hDxYA#b@Woe+SO)lx+4txCfIhU6DrPL=f^W05*ntCaf#kA)=HJcFQNxWV4 zIItVOa8&P=P&OaxPfR>kVs=Q>p*pFC*h=yBq)A%XaFV752NLafb35tB#A%nuI^bKlPzbH`hTUk$PplzJ}!} zCTCpb)nB_2?|!=i1`|WI=D;`YHJrzWL|3l=bC}4wrRE4J^L#M+jJJonkP`+}%^YoC1l!6d+qtx`Q@1$Nz`Y;R#&P2pV)Xh0vo6uM_l`#eHZKTDvw zD~Mk^2(z$kTD7L0(^QIn$J&!SI9qNB1A6rGYL{Fq?|S zyKItEU?3P3A;rVE zw{bjq6b-2944|l2l0^ze!}&pbHERet$&{;i3go{9$ zp<(A3A#%=%eKPc&^ynjLl&X=kUNU`ADxJ^nl3AB=y#t<4WWhRy7%z?lc(_=_5;AkG zJq9t!Py4yheG*t;S9O4y(|R$iTcYayU$Bn!xv1c%`0+w&| zM4!L&;cMy5nfI526Tah%Tw2;<|!@p{%(F?^>Ym% zQ2B~J{qUwhq#GimJ$EJsjONvg32oe^jyI&Rt-DtO*t=>DjY~Cg#v5(E6?`SW9n`Pb z_KPZ=&Dm1)AZFz8&nu&D8f+3tR$<0*fOJn;RRV|}ihuyz37%j`Q~JSszZ_`k3uX7G zVY7Kf)-1}x)gq{@!@x-4T39zKort_3E1EE;zJ&D{=vGi>(&1&*rkSkYYlgxyy_i-| zm}`1^TJEmbFDc&-76+#J)=7t5wvue5e6YWXG=P1%$w@)BGq5*tTq&W1b!l0~|EQUu zCz3so@1DEy=#2iBYFO5s==}y&nbXckS&!@ z70}lfMrv_+oY7eX)oVycFH5$L7SY3U#xxOmpA->33Cu-Og{3s&$ov6zwqVO5%lnN( zK*^qU+T}pW=#iCjly24}brp8eRzQK(L8}`zE}fl`XOM8>|K|q-;E4fzpcw zq2Vo((ts^2=fz$-Q-LVp;A+EVn87u9uGil~rXRn`8l~^y3y1bPyeK!-INf z-ss=t9nb0QRAmjZEuLJ|JtS}f^d6g$>6A5~)5|8&+g_1z`YFh?vO_rlMPBh88%#?Y zHxcHel-34?wvmWNB0|724{ts%EAMBIK9G{i-SS}%Cnl3?^xDU2%7dykXnVhla``By zDgl0bKe}m59Ms4Yobp(IQzU?gbJR)+#u~>AVsP~8(-PzZWA!71Owa{7X6SK%DXe;= z1U5;7GIB$pKu9)jrt+AMQ5uxs%C_=7gb_SPa#u3q8W;+V+w%hUeWzYjbXi@%cKF+G zx9Hm>UP>}6%vO!0YC?UZmLS9Uh5OX`25(37oKL0V$lqn$$9GD7w_sF@fFy;fI_`|{ z2Y7VfX^R{%yj;IcFYKng8)@bu$_S&p^8Fr>8!w;e zX6PH4ZicrKqC|v!eA)!ff9yY43g9WUR!6f}hKJ#P+baW!Aq(D78MSj~)bNG8#xm5& zx(1iH#fIOnGBX8Phq2sihjM3(Z~h(@iOx;^#eckdFlPh-gHDeF9jx-jgOu6J&IXTH z&P!(H9@uO=?_iSUo?8>(7jOJ+36FSTYbS)+0WJ$0WQv6Y}C=KgS{#$gxD?k;A;#H0!Nfrl= z(XKFI!ir3vciAK%R_f!F^-QVzvpK%k;i^eRdi6~;R!pTQQJ?)?ca;3)``4vnxfMIz zq^r=9-|le4syJ%K`!m^mVeOhDRw%EJI+yzauk?sWs2JcF6y0CYBT--+4Q}#pqqcwX z{Z69fiocXt#PhCOjFXcQR}DWFBvWz=xNt>TeE4_7Z5F1^pLd~Z84u8pplHKPVeM)P zU7Pknc}KGMR`&?@pDL{s5EGue_owZd)!o~`rxr7+Pqpc12X$yy2A`XU0mYI^z8JGV zQxREqJ>*+#(v(2U>Z!a-0Qx3pG+0*};=(&>F-P0S!9KF-hVbU4UFdfx2#rge5Lmcy z9V!QeMKbQIeDBe!%lHNbTG+nJbdG60dw3rsl=QWbQQ;kcb`{t*iZL9PSl)g!w$G>r zBt~BS&I28a?uhaDM1?7^$zUDdy-{&L!!|xYAY~(FG!xr;@ zc<>v&bFs!V)Hx*9h3-4B@l-Z)y}|bjcz!>EPi}CEa4m`6G!_K#M;%Ozekjcp_oCn} z*n4h1!GjeQ@5&^zcHT+(*9dyg?I&;D`X!t1#Q3e6)2+4dcrxPQccoAhj7q_cmi+2e z_cZx4OuT-kWySh_0l*yR356xlq=M*SDcTTVmr9Pto3q1}%NFD#f6ZOn=(EV~@?Trl zsl<3^X0RZC5C+NF4bEUAFw3+zfUMLXN4%A{-j*iUh@_=Y{n}Dlh?jo%`5gY3{;|@l zHZ2tm-mfR|#f?uNSRRQ0e0Z{py-~3)nA%vm@ieE0RiX3~zgH@L90l*ynGZ>#+5jzEnt;-C|2OreXoitlH zW_RlZWERNta*BXPPIEZO82|3Zw>5{I{+p}yh7s+*$QRr;I$NXSsMN%8asfqoQW17>H`z;N|Hc&YWXx`3hrIS zws2ya^7{S8wBtH`51+HqjLEMLj!9KH5;pA{Y1fYjje7FJG)9`!PrHyj88HJo*$5ss z*o1dJ&&TEh&3yp)WA^5GKL!oi{U;nB_i;>Ig~}s&C4Q>IzT`^fuQ3T(Z&v)|8c`t! zL`hlyuIv@{spq+*qO)Ad`>=6IxHU}3&uh)}KfgthUYScvDb&cmlQRzs)x8e@8SF#x zX|x>Lg|+7DTURlWCh%8zWyC`B?%bj#!3BB7>xMY55i-O`&$v&j8Le8FG~3vO`Ncg_ z%R!ao)0z(!X{L1pg#AT0IOlAcb~y#>oYM{8=!SK^^>!%8`(?exB)_6eyKNN6NY- zCRAnfVC`8hJu$^jpvWuY@MDqCc0+s})597nu}xwOfTqBYb`#7{rct;WnNdx20OoZHse!z%Df3uD^}+Gubvr*X+V7;eHO4*=t!c_I=b5CT;f0}yL|Wdq$`m# zWlA)*vLfT-F}iUebRH>B7W-MYa7{;QN|c2Lu(-{NW7CSlIRO2LNef!220Q#q(kE(o z;;(Qo%16}`FoF239st|?gzE~Oya0J6$}c6PNReQfPe|MH$?h!du9O+3u^XOq{N7zkwD0` z1-FF=EP1|r0*4Z@URmZS;O^A;-2$nv$Zs-f`BV3D&Tbu`Xf`dtuX& z=@{YMv)hFUa)qMw1`a|PU*|l3{Tobgx4aJj)EMA3kA%kQM_s#@uJ`k0ML6S2QAR9L*IUa9Ww?36hF4FyxM9G) zm9~lh$=1(bu_|SMimDv6gae*8^cC6H=kpG>n`cJ=8bH{$kb_sH+jNKPIroSSGN2NE zmf@i(y`SRy-il*2Nu=@dvJ34$%a{LRLm~PBX{_ z*-S?e<Jy)32pUjUP&aHygo%7t&nQrX3)b4H*=R4 zK_E5C))YP{PR3iuZtX%xj1SMz|TQ7ZbYEPE8gKjK)NKZ$Dvg?Q2_awX_0NkN01Vj>tlYE zSwerA0)7{INcoEgH5XlfLMpxj*#}BhXDn#pllRXm?~~thTrxI2zXR0~;z-be!PoPn zxO}V(2loE_8v%uYF9V(-jJu`}kG_6-`v;)0*l(qkce~-#gMSj$=o98$o5{3s=jn$Y zAE%_37I+Ol=dF6?iYQE585t+zVF#jEEZ@Zc?m1k}Wx4Zh#?2kgN9=_S}f{zUOuj6L{8+?G|M*)`qjzZ+tP{dIAq}voVCV=LyHJDxQ z>x6m6dz?!6;eaP0<&-yk)du76Vnd3X6Sf-Ms;^<186JD{W-c40_$%b|zMMO|!4man zh>8C!0NvdJOJ|pq*poi0kOKYm9P1Yjeb%Lzl}ZP7MV%Lr!L2@<`Wkh#P%R+rocVV` z;JIMzOGf$5&XBmJ9Z`8^I(P0;KPNX=Y5hURMV#7k+0g!3(9^%#2h96OoU4Lu0A?#< zyFVOu2}nGD`{{2^hwR93?M39d@vboO^XCug&g`C@9gfxT4YxF})$2QAhC{5}4BC6k zRn|P=BKI!-9pv!)ujqjDkYV!?d)0+~Y9u!ZEFT05u2fj1!7=reulSk^jNbPLGurpy znsI}%vb3U73Y7IV=}-2IYi#4jq9ZzO)6IqykXT8^?Qff_#=2{6q2>l<%0c-By4 zsuJ|3Sk)od{wX!(1e_0^l?8q?x-oYV*`rqxC`PEbsP>EeK(18iZ|}#BzsQs}1sWO(_{fRCI@< zAl3fCtuzHMyCOA(pgdlwPr=-JGgDKTqK>;vF6l$lwtfQ=wk@Vvg-OfZ)|`8!D|a

    Mcmil| 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 Qr_6r6;mwpWp#SIfKXqlvb^rhX literal 1368 zcmWIYbaM+}Wnge~4O4LQ4N>4=U|?tm;uawG@eB?z0m=mg`FlC}d3!1V#X`>L{b5~I z=+(*Pu=n1zhjBn5IA8~|Kzdk!w5L;WFpTXEWiJ4V2Z7kmeqc3>Q1u;P@z7wPoRb!i zozDH+KdJGiS3}yWdU2x+V+n>7vsbs*+>-V0i74H>ZQe~`HlV8iK;RS_tY8adGlB$| z83Y(a%WZuHEB1IzRNvvit;S)-$N=&X1TccM)PvZ}3@i*F9bl3Fa5o181%TZQa*r<- zcNT!fLxX{GV0WUsN&+a43Xt8Y3X}r7lM!eyx~rH#lDOQn2Po;}>K1_>Zc8BIZa_IF zQ6L-L^TI$eVC?z2y5$0CUN8?xH0*YPFc&yNXay%Q?J&m`!uNpi8BUiBGeSJf*%6*@T*E@(><}M6Fnb2b9A6)J8e#(SL1x-O z#QlMCPHI3l!>`V-B30KIgjCl=eKmUWX^Yb_)qQvV`0u`7{zNV#elIAn85o>Hg8V@y zFk&@>^~SVUf0y-hsj5^6UHSSmZ)3tut8j*;u08h_ud!e6q=?OoD?rl%f_yRD7X=b` z4DtoaIe~&5-7HR^7zpq)IOpdkC6;*Rm89ksXO>h#gd6N3G!h95NmvM@+koz4gbl%^ zMQMr2slJINsYRKIIZ!hlkj#cK(QN?5Auz0D>J5gkZad zA=u%L2)3&mg6-_L*w4iSUjFFUR2I6p`Y3?(`i6#pb4d`;p&)*Mk7I}ch~B?@se`~T Omu0SRcYazXdISJ1_%|H@ diff --git a/Assets/Audio/Master.strings.bank b/Assets/Audio/Master.strings.bank index 38298882dcc25f1e249536083a16f78df828abce..ecad89fe6c47c685dec57e04833ec8507a2a7901 100644 GIT binary patch literal 1138 zcmZ9LT}TvB6vzLXnfXy_i4}cFgc6l2AwDD_yF0tOIkS#4<66Bev)lNQ?#wnb8(I%N z^zjgB6iG#?L=RdJQU*yrRQ3>51QF4L6a?Xe1qKlzNp`N`%+hjZ&+ndl&bfEze^v?w zgGaM~U?5T!6qK?Y0R8k_pob61N|^RUsp)_(+!!jO*tSo5er<>!$@cVqQGevxxfF6f ztB6<)l_2DkvPem5uL_d0z75x1wphn=`6@GeV& z!+u3_S&BF;i1jYFgdCPdmqp3tK*Z%%ugig;%YK1#`=s5CZ*|XY^|~yF-QOiNak3od z8raL06;3&m31krOLJk%e7a3Cou@&Si0WA;6qJX-R*4u&9YVxFQf;7t90JO1MR!8|* z3sh46(wgaC0hm;W8tO-Tnax1FhybI`{b8w96v&r9} zIyNA;=sx7I5rvq&K2`JW@Nnbg>Ab9psoCAz_E3fK;P-j% z>fW1MMn5bRz4}vS#EZ)h+^N!sGw03A)3LeB(?jFl$1k_Gja2XGnHb-Hwg3JAcV=LI zWbQ@jlg+s^x5EqTgLk#OMoW&4)zzJPbZ+bmcTpHTp;cVJG5&kv{cwRA8h!Kd+FZ$| zos)^@9|tQ9zMrdo&F9pfywv<@#w>^h`+k0o4m~sF|L1)KF{paiJ`V)dvNaQxmTh+G z?H1Y$!=^~mLdv3TNjt8YG0?Ye)6!Qjcw+5|DB9J8mh4u0kx)BzLDN(4cc`Wsr(TxF zYU_zQeWK_{B~%@>88-|aqG=@mr6h@>wr1IA33*bT(OAm14Lyo@cW1l{bRgX;AL{{9 zfdnMY3IS507$^WpB2tqCB&|!9L}%i#2_mC;AS3n3NK-OW*fE+Cviv1m1CYszk7v~l dUb%tILI$`1U&bOrixOa7qQ3z1BJWk0{|hP#6&nBm literal 1704 zcmZ8h4{Q@<6o2brf0+E)hB6Vh4w#_CRjolG{8|59*U_%EcWZ})-EQ4&Ep+X6y=|a? z8zC9$FfmBfxWO`1%r-NolNiP@gGk~;rv``vGSrMLlEuss!6-O?S34SJz9A@LONsaNC46*zc4;RCny*P$l z4!erojuiXtIeSbFpX+{1}=?;ZMa}$+rl40Z~5Uqw`E?&nt$Rp4}_)#lSse`>y2@(G=bOVuZ3F2E3l7aalB3Wr_ zC-N+W-b3Wao;CZB2X*NHQD8oFH`bvaI!hE*&g5(Kjeh7?qAHvNO=6yhb<@~4rgR(o zPJ>QKARo?!vJxnw+|y^!@x_$Y$(J^FIu7>FX>h*(%FFHVzL@@Vx|caN>&uCf>)qb8 ziz6AA2c9-`ok)Lv{my2MKJQj`UDlL!-|*Uk?c%8=#rFHCB&!%2uZgtu}&Wh&IqNb{@R~J3&*MF=3f!p%t z>qYMk33?Yln&~N+JvC+Quk74*XRBw=;i8Vr-}U!4zSHY#*|@FZb`jGz zJX5pU-`FGc!58_rl+8%)o}8f;aeXjzIB8O>~7;kt2g!*XN$OV*!~4_cgmNYgjoe)31dN57>k z@RYEVi`O5$)7$iYahq29?A#{i8}35>-Pv7rMX${%7#zF&OWCS~3KBv)*6GMWLPQoN z%8$rWAXFWp`bfY>EK>>qw_9uwr3%73Bx7o{I&>I{Uq@!4F{D#oJQ-wJ@a-VpD%6MM zpeU1B6l6bHs;a`0Ob@I)nMja*e)0=aHHo|>R7t2wcC3PxlY|B_7*s5lkXW-z7ky)q z5-##CDZE|u$$_BA+r!~na)$WAfJ|{_CLoDq6+@yF@ac#Nhh?-@8&N`Pc`^p7iLDWW zL8=ubp+-d4=*SeVsSspaNESnpfV_*?dZ|kAi4FnofDoiC!kx|~g{hAbts=rz2SY(< zEfHwEjOcM9+;dPCY|J47cR-`XL?AVImPG{CfhbQz84dzOA20|4K0v?@2)G3S;~|=; zfOYo;G>i#;0T2-UzJTG7rBMO?m%w*tLqqQNmdi O?Z!`3(Js4zQ}lmBAhb{b diff --git a/Assets/Audio/Music.bank b/Assets/Audio/Music.bank deleted file mode 100644 index 25461a50b1da21ce0b431fa97d87bbb445dee1c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355040 zcmcG$2UwF!^EkQ*0YdKx2pBqq9*Pvv5PEM39i#-L3kWEno=~Mr?;yQ|qV%qaAk9Lr zf~cr86%nzYbCYwv^ZU-n_q+f5+~>J>c{V%m%d zO#-Pjz*t!sYnftUB$!Mi;{*T1PV`;l0t{MbL}DtJOf#=ccb#@1 zgdNuh{8OLo`y_sU>F^s_#DD0cOG5mq&p&KJva7iaxeX~nN!7*69Tq;Earvj8n2^SWMEi4Gj*kKt*@of9q-f57_FTu-3opSZiti*_SO+TODicfBF2>pLkO&iH7MS z!NpIVRdRx8G<%(^t~QnQ@{>^ik;3GksPz?l7JyATCwjwO!lJv9N98l-{wADjGZ zPQ54b!y23ZSAQ4CcoSn&5)Jc^Bp=58oFj8w}ikLr?mJ1Aahb-50qVNw1%ce)H`@U>O~m3IhgsKMyj5 z05#2xNO9{D?YqCcvltaaE67}_fYwESH`fqy4IZF_XH1gHA?oGTE%iS%{USlG0sfTC z1MXfyOWib4HHkmJ+yA8ROaQsXU(z9e_WlmZ3Rug3_n7Q0WUG)@HLRtkDT#)0B*AZl zMD|0lU* z_5SYf84}#Dcrvx?@n<+=X(0RegHNZA+nC%}a{kXWh9S%NXMc|K)f2}_vU7MsPkC#x zA5g0V9v>faU;grqe{%j$zFJsIGi?%?hUD;+v~q>}(-}|&*-Ofy5fl*|KR!C`UF%@v z)#o{4R(*TkvalP@!D&M!R-$kpR&%1SIq~~tN#|_}XK?I!IVq6JHKjf(uxRQVV(Q@E#UYVleY!{$l8%P{N-QAc^sd}|ILHc z^cas|62{!pBi_2HoUkjc_i`C;BW2_%9FF`WLU`{XTyE zC$BxW|KN3e7XHoaxE+pPlX?BMQj+3ApXj?}y}(DtKY9NNlYai@b=)q;um9BRUyc6e zMW7=4>A#(fY{xPZ#>8Cjf9yz}CnlQa2=WShJWgW!GaM8j0-%hPc}Y2tl$l9cpOgV9 zBS?AaJ^=fqT=uVwAeH3&cS2~At~JRrgh{9@<%U-qC;&E^B=}!(AnEc?zhQ^`iN}&?7z7D-+*eT+ zn)J&)^rkn2Lxnm&sOB1&T4AF}^^WhaB-H=`Y)mEvuvZZ$HyA(f+qDlH;>~t<%Ofq&0~Iljo0(=D*h` zveu+)1UV2r?qlS*>)+|`TF0&ZS1pqJ{u!zKEzipIuecaSBAA$wbUNnm&?LRXKzABy9Po@Mug$$7E{jJg8r@{Z0eEghp z-249}2mC)te$M-zyovv>lC4a&^~shZht=d|e#4#;SYfrX9wgqYlprCWROV5Ef(a7doEn7wB9*joutVa3 z9)$xNHz*j4q5-?vq!LXFo{f{rAGCn?C#meB1LHCjVDKV6@N@ZdBzZzJn9q?$6p(jX zjGoDPj3yRqtn(*mpiKhK0Cp3rndU2nDnBlN7pC#G-|Jg{bqiE_xcJ6ec;+P<4}r-TZHwi$ zkdS0K5!I7Bt*m}ESprqT^)my|XTw%<`l9N|kqaTTBZ`WXd>moh$tWwGgb8OQ%3Yy_ zuwOo>TlPzeqviFLT{m9)P!4&QQsX6+A4XB^p=X{#x7VVdslSxJbmSbrY!G&bv+D=1 z4ps(D$la$`WvH&0Q?T@pxOYmVuQ9U|mmDD@f~!9GBvfxHz5ys9&W-^$B&NO5KdC!j ze(aGIF(*KjM7sQ9l0ignsiGYX15QgUfeOL!7WZ~KYk0Vh*8WZNXpNqu(L?=YO$8!+ zp5#V55kH=M=}8Fp-}EcHHDcECy;%b>ZgLG?Bd>Cy`V zv&?3`7mat{EmPRGOEDC6q}?%0LRJqGGjXL3BgI$pb!-oi%&g9ruUD4uaXC@PR2cza zyLj``ce`CqO?BLjnfTDtvF6mLY#%5?T~%A%S}3YQ2M;gNbia{g05C}Du97ePb#Ts{ zqLnW95HzlK4S{lmgmCz@;tw~0ATJ=M*4Zr6Au+vm$Ks>2sV`ef1{Z1#0SCM+lx z6vj8kRb?)|bv3hN=qkRyAIRC@=_B%fzxnc`m%`Q`E|)oe>MnV?ZH&0#gXmPJA~L@& zf)ZO94g+%A2xk$CpPhf$-Q*nzGfeA04B4A_;g|HG1>z2YQ@GrLBn)!8Akt_uh&4^J z3~{14b;MeNZY=sKv)cB`I10xOUdl=J1$Q>*LUIiRpzHlMAQ1SE2v&kGU|j;Y$u$Bw zZ@yAROs_^k&S<*w6RIzKFnEnTxj_^R$8XzZd^e9)EAqs@;qWHr8<;24yt)(@Qad4W zzMd-=yMmU8s7FKxYE{6RH(&rHzlJAbDnHn-l5O?yjPbsET^y&A~Itswzo2^u2nAU|+lGcpJ#oE8kGN^?XG6m8(R?1F!dIfAAme83oLvX>&Jn z`<*kAjeLwvRVDLMY;?KoEnHX&O(~JPX+ciP9yP8UG|ZWl())x6-V@Z;>kCEGu9MFq z&prvd^(DMlPt|9-LvCD3`i5BMbyn5+sw^a%`9v&C%tyzdS$6Q?jPscQ)B7O955OwJ zWXD@9to<>vJB7oGAwt^g-P3v-;n}HBiyT(-)L#MkQS}raf!}gi0aOv)+fK}bz)?Ga z;7-)zwRwDNB`*oZ@s_j3h`F2_gpf7I@^KTaL$M8NB z+W96``D)n1ZrNM$O-l()_@j~LqgN?rpRA5pWLe^*u-wJPkP58ly}*JWsH5e`v<%3V z+Z-trdi(rB{BLnrgYrKuv25=;v%H7Z?z`XtN4)9oyGuY`Lsld!5PBc7@?mmgYz7_g zqUY0@RkdAh*kI|6`@BFa)bQ@ zcO`K7$;l+3z?81C+hg#=6-3@yDs`hH-3jD4>M~APwCIUj_Dh$hk~*-@#Ly}eVrV^ zQB$oI(OP0kaBsTD+?c3b|7qvXmmdATv=%x$Em6d|{6o?bE>%QjaiUPHv+H&m#V{RO zo6FXvkvPHTt!X&Kg=U_djrSMyr50Cwwr@;@N;h#+2Btj1-*_isQ)Yk`vM%vj+=Pwh zE40L**uW_17{IFBjoy|Wf*edG$^i}r& zl2VD)TC-W}@)?D9%?^KP+AZq8>tQfneDt^-#TH*Z?$ai!^C>%1f>*~v(~L9QFqFf5 z);LVCNDpK_c6fWXY~qrozDN@0wSi@x>)EvM$HQCz?ZR>T*Mr!MG33C;*ccefg{h=u zL{Hg*4Sft@a2N`tBy;2ZVYEuI=V{K2b7`HheJ(nTx&tw$f?Op%Wbgyja2kNl$jD{< z1FUnuE-+5489cFc)tW*YCnRbZa-ySL?1tD>2u2Szlt z_R`r>i{$A)##ElZf$&_`X)!op&#Jf~Rou@()l?nD@5AMzXfDrCt;9h2Eni2+K=Zz0 zji3W%w@bu;G(!N!I>5>>qKFE@QkIJhj@Hthbqdgk1qR$|cAKt<#25p0zRlIAH3 z&XO?G#~e;P*tB&)K<`M-vFQl+Gys<@arMhA4{9U_tALKwe%p2GL2&1C$Lr{2mP2q> zO(cbBg>VXyJt5Cy0{a@px)+|FoH3A>f`3ER){4Bv++t!ilDS!n{58j*O^X$Gtst_; z&+7$pW$kXScu{-jO@Bh66mCf4)-nZSnC;gDbZDzoc%w3kUKjsjkI%?*GENqy@}&B* zbGupZUB-4Wt#DG(t(+6W4jH`G{C=IXn$ zbAfD%pZ|dN0tN{C^liujK%>CHNNp_xV2=5CB1FsmuJ?Oz*8umKOB?z-dfUo}o4bmz zH5&W!@dS&}c&SB32M^qZQKD6_hR5`DOWkSRC{csoy6awl4+v^-mUmq5&K;;1^_HfK zW~Gl!z)r^2VYnI@<=MLLkIOXZ@64skXO#i36*wX@WpPK<;zZxx!~us@)~BPwD{36G zj`I2T`8*?=NX}mQ0zRrM-l7Hf*~IRpRGibsf1y9jug)f}b5RC8)?bZt{j$uh(|i8| z&wEy5n0Hb_NCWoHHfIrMNS$mykoh7QDQEpz@iYkTdUgrjR<(CF7c$;SyUCQ*PY1YqZ zgq?vtNgjEX^-QOX)^%XQi>to)3UlgGOyc;w7VXG5r(kXq(MPAj=AJ>b*z6fEGafaV z;@HEi&&!cV&H$_5nB5&{{4_2iN?%}2ipl_T1yNzm{<(55SMN)03X9y$hf5bueX@PG ziu?J_;zwC<;H}&C^y6$2w3Pa)cM~-!r6_=a*mxLRP`pr4R&ih+uyfGf!+U=XU>tMw z)27R)=}KZZhunHWYsU-V%4KNI?0vrlH>EUsqRI zzJz}%`c`GoE=MRq=hNxCLH11ceSAk1lRd(^c8ad|c|M6e4*$xko6Ziq4;uI)=;j1e z6}45ocw-l!`8nzB^jhcwxi>q{jtU;ignB+5FW;I#q?EqLIl1W3t#w?m=XaKh+Z%bA zdgASJ=)%*}eHzrE4@E!qpN2|6vnglFO>~eGT}5N3 z13O$Vl*PT5Et$BZ{|PN_?nou$3)6@eZ>o9VU$Js{&Ek10CZXp^TKeewUJmeDw3*aslwP^@qQi?tiyI#JB>WY^v{N^PDmp9N&Z+8yU&rfPyW_8h z7L6q80t+%x;7tb6`RZ`;}V+Z{f?+NC&?-y&}{*VR}3(if6# zt;y!XH_G%Zh-m?=yHofFp3!~67f9juW;p2b4$qt%rJ*>tUb=qwSI7A){2ja3+0N^6 zQ@+3<=iBOio)?|R9l{LgMSiL6BpuOQYH%i%(h|hP}8X?IOp63TLUWt7m}m1^;VY z(>?gJ!*uDvy43)G`er$*8Rl^60H1vy`#oYv*!E-lqqCuz9;_Yb4QKR2RnE;-v;<3> zML#^L1B`bQmJXcS7fe3NfEY``f>jN`-x1twwqm z^%8G>37N$0{33>%2HCtAL*c4tjisR)0Pn5tb7-UHT=)fQoK}fsQwcJ@Z8)G&=9g{# zd^zT4m8$!Pp!o&C_dSM!{yAZLxRaFnbb^xewg=8-XXwrVtcTXc_U*>i)UJ~X5@iLH z!Aa7TEk{xh55ixEk2y2tq!rt5dLK+z5fcqpf1cCol5*9`d965b+dR=vNfS7F`;YvR zE|D^70LVGx&2|i_PD^%muIYF7W-}UYw6C>LeOEtV^>~@EjU&wtw!x zieI_Tcv?;hKp{LkI9~c9x}=k)x7{_64RSz@ zZ;BJHRae#+`yRT$4C$T+HPWotX!v5j%*0E2KCoo+1Ep7}XVDTGn3=G~Wrl5jtCu;?3^`<~z7 zkt=6o(E?t17A8cbM1w^(!~AT73@O6%IXz_T_Tb$D!jOHdy*|65NRSzFr+Y$43Qd5* z1XUHXAlu+Nk&;LEv=BvrN?vf3%e2432E#MBN`ZxEs~b)Wrm7hN(VvrRqEXh_v%Y8x zrbgczK!BJi?*2!bn4}b|P)d^rp`Y8AsNd?pJ%b z((0ipDC-4=VSbDqO)7r*$x@e}iQ0K?ec%2eFBomSa)`dG36PV9i8#0t5_xe1UJ5~N z*H})xLr^SGimh1e*6PyM{O}H@{@q#j(F5PLocsqrwe&dchE*a1>=zVft#8~vKl{Z@ zS$Kcxd3^lln=vRoDV%&xsaSL$Nxga+0xrMP4D;Is*X`q+Z+t|(h<`XMc_M@vhqJ_4>I9G=-3XQi~6#Ejr{FG98KW1y8O_Ac;A zNo;{Iy(QW&u5b_?V|T~il?tZop0b7!k>GN!m8Eg}HW1tQb++0(q4-k%5~9z!kP-3p z(2`XLSz3O}nUY{GEtS~E!WAUrEBLbaknz3%OR) zs5F_Bms?vj`2LPuyJE(%e%U7te|f>l=6lIuZ9tKEt%i57+7uLRt2pE%Y^^pva;KQ6 z5&A@qy{sDEawZ^#&-3;HdqC_gx_C_m$3UZLJW2y)>7W&A^_F0NRDJ@}et|HR z#{||^iYu6`VIQim>8$&(kyC<~I&a~2SXoFf02qC+%X|~dW3E)p>|J#b@#DGmRitxv zI$*q)Z@gCKQlc;aDPhXtVxAm&06S#urAcY~&cz}>s@-9-L^`?iC5*E}U3+TEVf-bL zQLiM^>NO6X;+c_}df_pu&X39`_u(|kMSO#}=U9UpZDi+bJ7;B=g{-K#50%}OKbY}Q zq}%IX701g^H*nD;S{RjKLhWm3fBVVL#u|&#Mr2+;sp};j+mOsRw9@X+Cb@XP7tK(X ztCJ}C_F}wrg1c=CHxZaHqrDEdixqCf;|Y`?5UC8lr%(b#*i4VaCbu+DT(okjG;0?y zE37;-2d!WMDr%4Q=*oo~idik@O=s@qoWLrT#^hgBrm(e07>8=~;_kvo4d6N-3I?*eYMV5OCawMcS+Uu-VS^-fkB283gke0UM=f%^(cs5#xu)PLW{q2+Saw) z=2!NelMD&Z;K|Vne{7|r*aUr{29X74R<#U16?xMzEvs8N=n7JCf`#kNzOI**V%nbN zeRms3&^;(BOnGghv*J-D!|O@b$I6mz6?@XFvg^!qZNZmN@h7`88IrByYN9@*LmZuo z^6hpj*2b%J0h0G2C_um1cFrT&`^&9o7B(UtLuOR)J3)E=O}^}i(DY8v(6$p7h?^tC zBZ(Z#Sj)*g{gW#UszAzy&HXCM-<4-o*(=wwvh<7mRl5wIg|LOZ+Rbvi0juGhPIj-` zHq8@1e29fa?H`|iGvvMgs-XaS4)D$g#Em{~uPP20fKSs`#w;dYX1MO?@aXe(XTIvm zNDYP2S68Y+44EGLWcdVltW?zxS#@~d#+ncMNn+c}DKx+t8^2FAJv_Y^PTO0tG}cIO z%SMWf?*{*B9gFO{VDh}5n_o7`&Dy}hge5lU&gQO3#I4m^f{QEF*O;GIknVh{>8}A6 zO=0o1S!m3H03k+s!8kT6tzRE3;h=Kx;kj=49)_QoZ@bWKErG z_scUjPv^n14ZT0N(o6glxAQGliQ3B@cXXGEGjn`@v|f)?l-X@ao%b2lNwv_WVt*Gm zG{tz(BDM9z4K$3Ka;A*380wGdY@j~KqF zkpBSrL}J*0;-T|cI~AmzMp)a1S$h~RbdtO5)9$tgE9x?;!m=Xd>8VVySxjxm^FSdk z&5#&J7Wez%@|Xa;vSvxQG`0H08I3-nblegIj-~>yG~k2q?(#ybzV`*`3DjRfY4~f2 zQzs_1zfdW+6|>Wn5M%>A*n$mDNGC8y-ei4UmTB^6A}Ly@SrD!HD1XhZ5E&$8d)w$_ zt=O&J$IsXZaV6mpV1FvfXBNFJYNttTyiKq4c=9ff``mhHp;q(5Wq-rar@X{4h*%Q! ztei&NgY{1-9=ca_J1rGCaB_@i>DIKw9ppdK{;D}iFQHcYh<$nX>c*oV-+gixyXHT) zG|8Sk3SucV??Vfk9yU%lpkE?0h>Z1ET*i!ZwY@W4NlI6K?3EjDJ*M=X8HfP*cBQ|C zp<}OnZM~AC3?9>%3G0rLUJUG}PoR>cZRZ8_egp>eGDED))sNtJZxP|-OWfk;9dDM{ zW`64~pl?6bf2N%^LT*pL zc*swC^ox2Z7?MtpMu7VxAeP?m6F4iua9<>V$IC2$A;YMF(x{m74bwj5TfCu8LY9_b z6ds>lpfl2ciJ!=(&A@zvFcFfRX+7O><5?ERU>ys{3F@K-We%M4ZPvTlP8RQ`l)pbl zQHa{Jv*lY7YNZ2dMRjg)rL$-28K;|FV43X*j)TW;t2j9qx88{|Fohc^D=`-sStxVH(8KL>8VQHwayURhKniD!85 zUHO*O-Xz-~K@>T_KuJguF|e#+c12U9HN~*zfOa49Q`CIW3Xv=EXA;^-12A>)D?kqN zK;R2-_R%@W9gB|o70csVpOdapK1n#OxL!7D+M6v-n|sp5-p7XYpobmXWWY$}w$xZ- z5Apc234n{mcz7HuEoF84mq zedf%8a8)|4J`IO2W29E+6}Y4JqAFXki2a>T{i>Ww{oR(Q!MO;1*W&b^ugxQ33A&X5 zbM)>hte&#F`~Xj&Mpu7E!-bbLqxf~CYF-5IT0Gse;FE(w>ekiHRSWQ-b#rKpz3AmZ zCxkW=ebKPN8e7Exeo9B?Ac4yUB|t+4@4ThoV;vM%1Q=m{mr@86(rJf#q%j6-@tc+p`J$fmA??GNU2a3Y=|4ctGI)Lr!2vqwtEu&p;}it#jh`vNHusdlL=o*B}Xx>Gn?S)pC*@s z@7HA5dEw(qCzMSn^9 z`V459Wb;oHkLiW9rs9wvUs%SqO`l#maGa5)%?_s^?aMEI;UC`Y4bpvk7Cp=i-a`7_ zgD#u76nhmkowL+Bqs2|RCa$B|aq8vfSR7{$Op4UNYU;AS zk?87#wtDaAbv4T?!KJR0%eoN91_~Kq{9-NS$L#5~xZhbqD>(EyNv~D;beVXi)4ohA zDAXRfdaWr)rnXtGB-_4;NOj^Y5MGV{WZovNdZKv|72_yMx4-vdwbS^X#;eYk!AUV3 zvx*%jetgLoZTi){Zph~EeSLQti~AAR+Y!baF#0=$^k{myx$C1&81ln+yM-ip;W(yt znAjnzUlBD?9;SFxmhq01K!Z)auSthV*JGufffb@>&a>P~57$$|SHTYuq4GFO%EWjg z?sPM+N| zt;(3S<-Pg62SGGhjh8-XMntr8wpS;uH(bk^xoM0_gZgDfGlyE3Q?dDIHVO?+NtGMS zx9c!fvx7u0b^TI0oY1Zzyv~4ShE?fxooi-*+)b6BZz}HoI|;(`V~f=*6pHR;3;|%p zy3D+x9>WrI>9OM2x@$1|*p`n?NRKIP{4IAbf5mW7tV0xiyoeh2BXzvLO?f&W259FJ znwk|$+Oo?m95^`ystYfc83OcmHwFMfL@~HhK!J=M*IU4^_Bz&dgyPH#cI0ck2^-te zc`p^Crzx39l5gC!FtMVsuu&UaiR*Meb|Pq;mR^|6;B!e*;{E1AJab4i!jfARcT=Uw z&9J4~v2mFAc(3$uQ8$I>!XQ*v3FsTSLb6h=S`;ZgV(AHS^=W*b++z5t_QeFH#6{&p zR?%4vZ4;`-<(NU=echE3+R1SwYi3=DwL{a}R$r5y-K*E@3SBv@C85X}32O#p(;Xwb zidsEco*#58)`A|R@54N)r*7x$2$`cc`9S&z>5V+`rEw}i@;2=ve>sFPl+b;S^j>ON z6vd$8AK>mctgXqoo?U@i9cuY1(a$j7W267YnHynuBD1-5RA@vJ%I36n82Rv(a| zee})k;_fE}Eunr}Sf?Mf8X6b{K@({YZ_&lKzIYNv3(RQa>GyR2z%K!HS}@jT33kER zW%?Hi85}M=(^V**4UGU!E;AV>2+a48KUZ7`^CU>_632K9Mwm;NgTpVUtvX5SNlsHU z!%L$b*oJs+P<6-;VzbP)t#NlJfp3-%lCZlqcC zDBxV;Iv90nh=`(ED{r|jzSU~YhoThG`9yif8LbO2^z)ofo3}&(fezy0D3UWan+!0F z7SB>rhcq=oq831a{YVIwBbox>%wXS0qrEwzASlbsr=X;bx|O6NWC>xMgFgw-UM{l| z(QUKtu$EWR&YB9i>2Ac%+u6TqOTNRv787Pwd3iNai%?@27%t=gnOMq z*D)Cg8q_JzU81atjrdsa{icX8F?1;knqrJ3#$JS^_X#Rg-w}<83Sg9H+OMW17*dE& zs1tzV35#k7q)bWv2q77%ZVD@yN1+Z`efb~- z1s2432}|Gke5%Ov>({$vLPr`S#Q5G`$dC>&Bt`9cmfiO!{1YXTLocW!&b2W(4xnZG-%N4>4mvCM7ihPU>-zNlRYMw}B z6MMol#BKwpPr;gIZ_e1$hA>f;Y1BRbwEy)gdv(;RhG={LNvgBACE5IM42qmIinw`r zmrIBqv@|U}v_+we+ZhOKcEZgPjvcyESI}9rckfSUz9nLSm*Ch%%Jir`C^rHv>Ijhr z?2B!Y3AUCR$x16f%6Kw`DMIu+MWW#t~3?zZ#YEFLe z$$Sz!WyFv$LwaQpHfz>6$uQfcfM5J>ASUrQvR7e2=8?UU?Y7WYAEfhtgniD#5v&93Y=5KYv zy<=g(#@+U=jQv9&9M1B>3clc~mHkG3f!bVy4p0HYi_KxfV#}O=jJ$ovgEDw9^s$3E zMN!Nlq@C4Hr#t54fM+VP>RL~ser40VsUe&5AG}4r!Qvn3P6J^p*SE{TO`p?zx-=C; z-rdZS&RnSWjF+kFdFQE~z^S zqGVjN2eYbNhCH$T~aZ_es- z-Sj=suIr$Vs?RTSjWaM!pc2fDY^y6cJzf z*gRtsY1e=i7F-=0*R~|$xFdR=`A2pa(G z(95+19-8W+D>y`Gn%pz2$<|OPh?Qk#QlXfBAs;j04<^pT948 zZxO6TgX^HxiMQo#5z*P`)+BCgA?rD-B$bJ!%8EQjsFx7~mWWs|?O$``rI)24xvgm8 zu~0Vwjpb68PsDK$b?t3v>L!(wohYkZ-cP>gUEx!AW}7>rU;Y8>-mxmcrjAvEiD<_m z#|xIr@D2@nAKb)v-C8*!uT_uITy)REe@|9-B^8o#pK#|I4eGH{SN(SCe&g@gAC|{n z8_$fY*-F}HMOEyh?Cgt7(prS3UNF1k+~v z*bkFnXRq#hU!mv*akf~HScg3Ld=D!er=R25)%NKd;ikq{#tnTx+26ikN$*9hRo*!3 z|Mgzfjvj%Y@C)V&s=B#U0AwF5h%-#9s|jz=C?Qg3myR?%&?SaI^raw8z&B`eGV_EDlhW!x#OPk(D#jGiW*@U-+jNM?*d)~a}><4*of^~ zABnRwsu{4bbLsZf(ZW$8nUWK%+)E*vQ%)g%XP&gu>a20FithN)Vx9P1BcqYGy?K19 z{oLfY_&06E<~`21ymHMKj@12#0eYc^nZ2*X zB6Ggy5Dha859kFmqa+0&ALbX{u&GG$X6BS$DYCm1E0+j?1x{rv4!*vY3ZHULB;84q zBy9j~DqKd*7eW)dD+4@oGWDa>zWDVN;CT~WQ?rS<`m)w(j=PZyEdjiw8_&YaRw}R4 z_U!ml9Co|7t;?+XM(l4VPwYxP?8hoSymF6NWO*}jOD_C`KleLI(!Jr;wlm%L@MbUO zx`kx2S%R_8UmGari{H;b!iU;eJ&;>povau>s(g|3D@`i}DnZ&)tyEGkcGd7%lGVXKV`V|1#rq<2?2GG&Nvsclf%m{v>Aoxj$=0cE*FxZyfpS!hCNm zU$a&0sSkf*7}s)veMIutTIWv0%o^KW-+O0Q^Rw)9ByBW+@%g#%6LD63U!HysZ4|zd zB4l6W;dbh_XkN|M@4W%fe8ZRLFTVTzu>4WE&+~@p8?3C1h?~hg^OGOD9POr8V+$|hJ+ali^Hr;kENfu3OB)yyLy~3Zf+c2-} z?X06;{M_SFi6||@S72|b%c>(QBfgHVKVir-&`Y2&IV)J%S!yVeoPxS^C zhqqyxH8}ANX?kG?B_G$M%=nd|9{^+{G?VT+X zSq|-vO>?dnMv|uIgsR;+J#E?K;KEg*+~x5s>?jPq{TVu!lTC#EK?0OVYimfE(O<^} z@13rt>rLa4u0uDP1{onB#Km&qhTJ3X?}>{JEL8O$^|lE*H91bcp`>T~oYZ>W8kzBA zHiU)dfxGg!xJjN2Yca(EOZ5GiDBf*mY_jdi;TKDA0a#TDh81jmr4^tsLC1CWSVP8& z*5ITa;5%hTH3L&1MU(x8$I2UuXH%P=TBrzJ*K9x15~00-gQ1~5Tp6eNcrh`Tq*y?J zBLE4xmL76aB|F{JNE-DuClA#o;;Yt%NZfAPQDE;f(hA!)R_Y{Zu8L;VMAKTZbwkXD z@pcF)p%w8uV^-shKD0qJhv<}KRdjI}&+QgI+mI#EeB-bffoi6ADuZ0yj>u?cNO=r$ zmgAj!b!{q?%P*yU0@c7g#6{?%#TnRJH(-a$JPiYkW$qi6yKVqPLno0Pi524n2D>OviQeSxve(?~q zRg#AB^yEyIw`QRahbM}Uqx@QYIrDBxL z2Yt3aHpKtrDbD_Ks!b|OS&N&|>XS)5$RSNiN=>{hjfg}*@@h(kXhYGPiFTw#6{>zI zc3ih=R4LWes#XtfR~(DDV^O7(?0=J&kvQX^C1Ow?D=fqku{ZqOmN~hcw$&#I0=K0f zCP*y6-Gu~nrBhMzL1kCiqVI8Qp$;9?Xx+p5V#GqEj^|)aTCvo z&#G+I{RlT94d(GjzRFJ?e^c?j6&KpCr(Rq|AN~4l0`nR7KyG+LmPRxB`4eHI|J z#zNnd_Hdon>eqP&ALDtlW|5&v8Rx0)FUl#2GOe`BQB`JWYzxchH3+tv!Ziur7spJ3 zJ~Qm@xY;Z=W{R&QNvpQD-kvE{m~G)Ld1Aj>b-A&2`Eqvhg8oen3%jn?9(twP@H=NL z2%PhPZs-W^SN9@i%sKl>aT_nIl8ZQ0&eWXF!#v$7r?HId(bw!|Ti@92e1sG=iqI4& zoOdUs1yc#b*k#vd78#mv#iPc(lejHT@-`v%kc%HQs*Wf!wkSeQ5SLQ@nUo9-#r=_j zUqAK5xt1@^7MM_0C z=#)fnJt}_WQ*9}2TwIhP(s0uPm1QdBiHjR66V)F45tzqx$u^!VK7Y&4mR{`92Crk5 zw$fs9d9#<|cGYxMu3ff|Qbs0C2_uk%zree_&k043y0B`A8yo5;_4*UAGBpdN53Nl( z^qEyC334CPDSeP3sUK6)-?pZBeHW)wVsKF{ONZDYS*Yka1LB5ITOI0k)v#Y*MjRuI z9lNbg^q5hcVt<5VTYtchNqroZKIs{0#)Q02@O>k<3SM)%P*G2TI&I{nGj|digXx#?#}Z%_k+B2+o>{(`+ib{4n3mU5ZzN8YFC(;GjFFV$SuWSX9Y|S8l=O)DY`uBDoORYfTM-*#+5E`m%ig&#=MRb9qA+iXsaEX{o3&2G z1{3UnbArR}A8Rak1x;$(XwLv`oN>LJZ*zR``_7tGO+zd6LFbx8?7V63+B|&;ZC>4| z-mAEVd2GC)`wX8%*oWJ*z;{r@_!?CVn1MId+!!(&XCqd@PV}acy5UXl?wgm zSK5km!s;d?az0Ns-u6TiYwS73J7u3Jo7?%i;5oI<1ZT&Uv>>j^Y(1Duz|_q|<`$I}NaG_WtKxs&ujDsm#>ZknJ_fIjiFD~73a};)9G3|Jvjuna_;13`1VxI}y zwZMJN*)Zu!?qtLt-vv^4Tiy{+aJ(;f?0p0mLj#?t zM*4gYSV%!g2g%pqx?$X#oKonWa-RsbxbH&JmwEcjA6^mS5~|F!aLd8Az?%di(2U_> z=21~!lx`@TkRRNi2nGC{!&I(ZYBD_M3+Ar3>8;bx*86CVGZ-Y}00}2zU-7 zhIwd&YzqhhF+uQ}f|@DS`YLfKOo#*9=!m>0E-jL5?VR>l2CmoZj|EAT;4tGH@mshOs$+nn*=w7Q7MH(|$ z2E+BxELw=w6%zwYcO33l!;iE+xmxsMp}p4{f87}n=THA61GYqqr?LLV;PO;%@kX8| z?$swEAtm=*&TX7sHe4doz=T4MyR6C5oDgrBm}dzn!HF0ubmL_T@(>=K;CuK-QUI@9 zS%BvEvXjBTy{wGh%CGO+l&r0>`E(GVbJIu@pTT0WP=n$cz|Yk4G-krfX#@db{b1F9 z?ELja+s`sQYMu##^0sscmkNOH+MZ#no_V+1e$DRibeJ!(vUThF;YkaI_$bF>D2t2Q zBdR;q56`TU-b;8)Y0HKf12n=AIiu7F+$3`pq)G6sWp;jE` ze4iqu`5gfAfOomAS7fVIW4>>-!}%5^Tx4N;v4c-bfc7OGz8ie8=(Ydh`GK=KN}&88r|KaQ`*su#73iZj1UkI!5H00NQWbZ(J>lDy1Nks6r~X*6zjL| z`~I_kwmrxF9M5)K_kDfN^SrzPK;pkOU3M5Zd;IL!u+=YPoA8@*nszS{Et=4Cl}+km zN$?1Aet|J+Tf+dq)=>cdxG1_|(YYqSk=0z#nV6`@Bgas(!_tvlI9+aOnZ^*@X*v9L z%I)8@Hi;Dozu#rsczS2ex7nfTmD7VwmvqU=VRJhdgiC=JZsS$H_VZVJe|&?b?DL2A zts;$&QrEw`mOWK-#8*{WyMdRSPupV#&U%+ngo>J%pWMaNLVoGr>8+T)UDJ>!(U$yX zzE*xI8&%V}yomJje~u+Dor0XoDFJ+QI-BnU>wZ$z;Wa|?GRmD_7EO7qHOHDX@0Ti( zH*g;fwXy`@cg&Dpi`*mQh1rOg*~_f5F0HJjD(#LZ>c^NR&+)k?6wp2f=dK)G~*YlX^RrauNDC%_Ggp_e$_ln|G0 z+sfRoE={N55cd`U){YKJu0@&M8poSpW`cx(96wEZ3ByfP`V_93+EDVyI7RV4tu!*-(;yPJ~m`>qDUi6AtkB~E~D@@xMm_I;AY6EWg*O^6b?79qRFaW4b4*D zrl4<&>D zZL<9myt97yXIaxW_IVqEQ8vSiYIH3Hz_|2yy^1OWrgunuK(Vaft8MxeB+=Q{XlHJh z^W9Pg2?IJGrOb7yf}p8Huvo*)lRy!3FtnO&B-N<`UdU||{t>o1vP%w+epynG;{ zxDrJ0#dD!n#(=Sp@l$!m^@UmnmJnH!g&Kl7u}I&UzuP`E5BUuSAKz@RUSI_M$w6jN-^jbZ$=L!yrun9n1NGOgi`{kX{!vh-jhbPyQ0JZxlzlA zba}N@WV0uiL9Q+&`UwMFWr$5c`}0w$Ta=iVggF!y`QW-ZC2UQej|>n}5PZ`M@+l1@ zHjrhfnoY6U^%5x#9%c9z=7rGmRS_N1t7>kdh6nppyo5*)DKZomTXsM_&Te?N*B&CN z&J`}7c%`O+cwKEs8Z~xESRY#IR%Vg4Ic<3W`K}thJuugz;8-I7+|k4I_>>Wl1)f}< zFKhs4rvc&}K+Qn=bJi%E>-{QW<_hp1gHJlV;hMfbplR0DVKYJ&I4stJS_;Ku{^GV* z-6G2*+|7%NWr-$XNfK=E$Rw#8Go)F+WyBXpg7nmaWnIadXV``)db*^kC}^+s#yDHW zFlgwcfeD>7#vO57U`2{;c_y~7TW<5&LP`iqTbzI}E{X~5<0)fCP|Tdw(qyHw<^~7P zT8L$R=zjj7=KXq9&yt-}pqvyB)9>)$d>B;!ad?=+tN9~;*^jYloe#g8#dL!{{Dw_A zjw<>uJyYP6o)z@zUE?a40i&V0lYZzj&^~a_fasK+lkF@1d}t0^Y}ntH{h?ueF2JpO zB~&J4&5u}us$=8|cqtifWjUGgr8rq)?%8BVlKcf&g5ZyGe`%L`j(kx`O3 zN5w?t!iy*)ja^_|AlF=FOY(B9DrC9a9)A9|b&@x=hoMw6N z4W2BI#LAJG6}88k&&ra61*cCa9&4^?H>m?$@x3jK{f0UvQEd-h_aBv?GwAdWh8IhS zy1G7%$uM3EJu%nG`fLH72o~!cc|zD=*MK$ZuXdmzKVY(t81^68WcqabzZcFdQNwsT5}%JyW9pn) z0@{-C5qjqrrPCjBJ4MP;puUp8@8zV>@x9d<#gt#b0BSax>fwWDFD_QYBwVyEGlLs^ zUTkiNe~}OBKf}o(9?%kiWbwr{|6i%$HPg|KM=v$MEJ7~3f`uP}>4?0rVwCIt^X6k{ zul03Uy71XbRCmaeLMhVUkMLDi)=u+n&p|zu@k9QCIflEsu{GQb;9ShE_uGBRZ2gAFukb^Sq(v=EjW)X8ETdwRP&=%w5Yd8g~4Z3 zW;*rB!6=klN5X8Twl+}IYA)Kquc^XORccShc4B1lq1Bqnzs^rLHL@FOb3qHsYU?>0 z6K@v%M#ARUt6A)-xox9|(uy<)9raZshwjDAU*uOH4kb_I5*Lw9;uRij2}4@%_a;>i zlU-+;iqGT4QHVh_a)3o~DKQY!lS-qbO*(5#!AnRm3&@sLklr)MO3e5a{A97I;^n;+ zzE!X3Tb6(Bd?1;7*F$N%_?3alA7c>tM4&Q4<+cWinrCVK>|7Z;M)D*_n6^jn8GIyqs*0{e0v@mjb#J&A=OGvbZo1&tzIzUG)i z_g)dm__)=cfgA8>q#kX2vehSywrHfdEd;`VxZdM!z5Jeu-*WMkFw)iFamPr@*zn&d zmh`yXMoIh$Flsunso%7m#F!eqf4DrCDH@WqH7KVq>qR5T%PVap-fo*82tkp5~s{~2e^Yg9eEQ3)jvy+IoEp1h8;@e{tI-+vEt)z^& znZsox)=R%+rlaFs&A$s(o0a6VaGC^ZeP$uSWVCsq<**C@%dK}fhJ7b%?en3%`2Dca z+9uNRetV0DX0Jen z?S%=2Ba3Y<7RS-c zMc1kVQJAYW514!V7CLiY%Ws?qr_YfVt&t z1p#j<%Xnkw20s0;kFR+6k1D8}(Fu-42zmi+SaPsifLtl|ZA0Ik_Tg4-0nKrBt6mTh zKtWdy!O;sK6u<M>TXPm>LiGag? zV;_M#uy-i#GnWB+0-#-(=WQGnCEejB&|^l1L>R5$kmaf27l>nu`Q2WUg;I zy>eHb$~2GRT_)*)#qe=O6k~ME3G`B&8_e?3OLS|g-}}06aIcrsc@V7KYbmWIb#Wv6 z(vkmz{qW!*G3vW7#m7JF&sJ-!WkDCuv&}G@Y)pO2vE-V0WmJoDimEcGJpUc_#7-ag{if$a!;3iEw( zyk2LMHlMNhRLc0{iWSyZAy4cnH1U;5bZv8*;%UIs;k?Zcl~c~k z(a&Eik)qt?R9i>NErV6pbsJ9Vo{s(y8*2IOqv?9_X5Z9hMgVW+kVVo;Zn#ox^w<@_ zWah}pe);~}Se6+1zGuH){3Xq8A*fuuyz;=lyKP-7Jh<0m=4g}l>N%6{u|>%Jx5P?# zCkWg5@mOG<>t8H_i%~ksr-wrE_vy&{se@n@kH})*&ce$y%PB=xD=V#QO*^j(!SLiu zF<%WEUqB7e+FM2jzeYXaF-BlW!=lxwycl8QZ z)X6jryXuGP)TERio~NTF)4cD|F)l!81P4f!IRRBb%SEkS@^(t_pMj3ouSfVM>70*G z-*6tB{=H`>%kG6fQ+KcqB2mRRLhVl1+ESON zIpuJ|WA3~0E!UM5!P=z*Hc=raCy8r89-(q~H)^o;xH-!*OB@-UBQ7p}H-<5hb61w& z4xn|g`eQ7AJ^#B?4`4h|wJe5yMb6JAcN&A*_4g3Nt;%>@i}%E4nvPEOS2i`?cr@Wn)E zHaUZlVXe7gCsQkvsK%{~>;CXD;S9Q2>t^$94;_}BhXYK{SlqRx0h+r@*1(WB|Lm(( zQ*g7&gnAyKUF5QcRD%VdItc~AYV2{f^k8-52AldjuEsQ*Vj7@P#Q{x$j@rD{1ORmY zI)uBx)_MhpVA~6woL4%ti512C;=06m_BqV;=(P;*XUEh|Scbm_NkmEIW)P17t8wkZ z6`MP893l(T%%$d!*%dmE;3ILJpPawjU0aEII*3bhcQD7w)HAwdBuZKIv~+hi1roV38*luKJ2`aKg{`RL zZv|vM7rUd+=DR4+E*eP-RACJ)y6_5zQt~vAbqYC<1`mP4pH&0rz#ChlrYtelQ*5Zx z#$tTErMiz>%L|Vsm7?{<-03E~b#`o@?@Mlt!7?c~iHv~z%d~Pz4V6!HV4j_LXBQZS z*^`P@Od3X!lH65$d>rvs-$Gx;V$Gx+lLC5e1Q}~4y(Py{n>$-Yu2E(~OOUEH;*@<$ zHzNYAHB1VoVsMrcI&{i{#|OGpkRK$9GFGiEMI-iG&FD@l7H&7C_rEkWHx>6hLYRAL zB1>RA4TdL(B9YzFeVE~Q+!1#H^!MsZFn1h$k@N(a#-n=asV{RiPx$VIk1jDeKtZ7G zNf(BFXrG9#=W|JfUUzTF&3&VF3O@q@F#OdmZ1&hU zT2{sDE^kAH;f{XTj7&^%t-6JXwJ3Y+`}o>V-T!jk2CneEUcMCz>msqWtofq1%>t3h zPQ-f0fj;e}0#>@o!)@K4MRN=egs!#1dmn{RoZ;Cf;ZjnE$7*Sq{Icl3PzUdqXbT|f zpwe5G#>XA*^IC6C(>U5$#!y;*U9cZ_j(5ANe4u4Xe%>W0Ii(E4DRY^>vv+D+4kOR- ze`%PqLKkYB{cZK>cbet)M}%{DJF4uO3!98hi|VKG$>sH@&Isoj*22aiJyIXdsrkUG zl^0oig*NBb_us2&#kGEA1!VAFc)I=7qdV!Z-o`umfy0N{y@a$`OWH@W#z%$pExjGV zt<}$_p>I`qT9!@G z($Il{Skh*>$E99-zv*C{6!jF1nR)MGoR?*`5{C-FXI1SG(t_~LdS7RuNw`yiZr$Sy zN8LD2&p&w+SYB(EZQs=0sKTCv91XK7zg^++U|}C&EIzq;J1Bwe3{bMGTqy^QAftDd7gc zo3rIM)|WOuvOPV9IaRNxoO2YhJa}jAt9!k^NAK;PRZ8BhsexF$&|{ZiFqH#4MW;6M^NW?Zo&8V(YkYb~zr&~}7;Esg{j`@9i#|kO2?5T*5+81JxUE{N{ zpScJZ7K3boPLs?<)~zC1$8!76&I7P3Q@ zjoJfj91u(`)Aif3C@-!10UUD&??WYo8RTsBh^af=6I#eLeTwgW(dSopxoeeDL|tZS zbB`!W7-@M_Yq>Z*qLx3g&b6GYzWxA+0KMDYu5pP+X=1a>OJ5quI+#6gy+G_$h|X1M z1#2awkGy{#YDJ+Mm&U;+aJQg4R zps8Vpvt-A0BM)jV7Xlk!s#B^kU&69$jUC9`+5?vg-HTsBdK6bG z_*oPoET4cxh&E(oS{_P@SPh9`7c{eAGB-&d8YTbk`&3o17$?{Q+BZx8^j)?cm<7mN z6iUo@rTo3t^(yk)I#Do*`-fBHdqt&il3oj2_XouPXe4Spxn>QX#iV{Cze^(oVpDPq zqXY=IKMMid3jO%|1a0EGAN)hgS%MgKq?adMg4KGO^?5YQY(eATe7HO$%e0oqJi3yk zI$jB@EZ;ojTc@wlid8`I#|Kc+rjV+08zcqjGt*ig*3vgY7B}lJM^G9Lg~%yle@}wg zXj=F{31zqYc^Mkq_#dD98#395+c>TBq#9uIu5#oJkW|aoKt>I^xd$8&`%3 z8RR;`t7KW`NIX<}Lq}jSKAFLgi?5-Tn$NK*$Otr!snXZU!>>c1-q_}F)u|a0fntZp zpk&8J=OPz^6Zz?sBNmh&`3)mNH9*!^NqE+vZx$E&Ll&Um>MM#RnupD%1jWtF6|?5Di6)@soyIhTk#-?3H0zWt1Pn$JkT#fw^Zr!DUZ- zVq?2s8d!~vsxooA`-z0u|8r3}ZkOWtKA=P1BjbHRbfs@fpfz)RUmze?0=BNX@!gmo`JGw4v~ zUgWTwP;i)!2LDw*IcEgmFNRLn4C#=md)C@~R1hHfkd)A~o=Sj1kQYd%y-U zXpnd@N;8*;DMBV`i%MIYlp94WV?w;agb=9}c6zmWn)Moy@;KkRnE0bt?vu($V*?GI z4hMoNz2%IaWWt&y@OaqUVx9cA6$_JJUvrv~nst348=LctkG*2hl5x!^u;<+NDRu3G z<_fR8*LaYWPd8nq%u7Z0@+Cj%bpg#+VEht{k4634UH{aGG|GVei|u*#aiy<4Ojbk& zw<7_dCo-Zqd^Ll2rIvCu}#?92MpR_f2I3+eSHRH0N3)cRLaf2~9qD zI?klHTDMi}hJ+i*P9*HbLc)#I(@GXy$brG7K8K*@q)?`HhqOS5fX2ycf_8 zZEw~SqaUqEdQLe*3;n6i2;_>+5*HZj+$^)!qyV!gju=ORSF_RzgMHL#coJEKz*c)cG-q2Hg;VnT1@5!@RmU+cSP2p&(k3~u+<(0TGCUx4Ps>ST(^LgHRDOpyWt zoMi^^Sy9lY(3ksg{45U%Lx~n{Aa9QHkLd4szv_`YV_d=8LV6`8uF`C*f5v)Y$f1y! z%VR(BD062|J5cGg1{^{ccvfoi_1?r2bZ#6=@KIsm287Pp^ioR-%~q^&s1sn$L1;9) z$~OpWga`uUU&RmKs&w&M5oEPlOUbv(78IvH*XeOhki|vh-FHlK&j;0kot$h^>OtBL zmTXf3X?C$R$si^Iy2Q4yK5i&yBoP4iwAujhCsU4Oj*$mnPYhkoqijWnBZGe$?UDSz zM?l{N&=2?5Fi8f4H9Vo(0Gt#sr6nt$ALgMwbF_{Yv$PeibvUy{VK@dGJe5tc0m1Pg zO|n}KXAte?j0oA|#rWnXLWXVfHxaU0?3zlNLM(^osV5NLigC>DZgb##2qRZ8`1!Zx za5Fg=<5qZ6Q}=CTDo@-+K>T;i6`Jc+S}D1FqYnJqnSs18U}O6G+c4dy!0*#`DhMPp zW)|Ov=i}zHkxuO*<&U$JCm`nzolS*+!L4;_K8xz?KwtBDV~MABopL!q2L`?X&%#4K zN_?FfiRG-Kw|ZOqOjja};JGR5Gyg5oxC9{3-)m!@m3qlkg)U*69)u3GBgLwIVatFC zMh#G1?y_WtUS$5!wClcVcwiY_+MWp+P~XpD@kF~0xfH0HWhtT04QRlldKBq=KK{&h z7tZ66v#%!VZe$(?NXLVjFhZ|qm^7F8&0Zg<9`b0J8=1}qbuLdk(;s92v}OY8 z>+WvexsK5ON=gj~dGPWO=25C;%%F~Tqos0uQkYY#<%4%`jZvhgI2~a;VpgVHm{(QJO_f7)K-fkkigzfu z>GB$1)A@b#`-$BoD1)K}lwyUJwB53mI8$sm?yD*C;v&9#z23gH&nXJHo}8qxBuT8z;+&4*s_#S;V z537L++`Dxqh%iR11i4sp$VSgmZ4$ zO;g5hVcCCn8poU+AEo@#rhJ6!^|eF(!$`An-ntDu@eTi%X0rEmXLPIktciVYwsz%_ z205(eX7j!;vRD`A!bielH#b@LW9WP=5$=E0sL=ZR^aC*f%CC`sGqMT#hq+R)W4Meb z!}ExfuZ#ef;On&HVt!tfWQ{%2J_?LJ#U5wt>8mUYJWo=-{r<)bgP zyPzl8zvdD@x63lUegEQV4!wuf!^=NLir>E>D2`sJca2fMzSq!v_s+t$9)4dzNq`=5 ziX5-;RMH|L?@B2#RWY@8Q}a2pl|a=lx2<68HQTa4zC!}cf!x?R4463#DbA}<)%C-|(A;woqOExToLbnHT))&a>-QT5cPaT;ok;)mrV=yy z6G}H0dGKtpmp;nwKQ;xHc>8X*5V-}XL!w8Z=^?oP0F+v-_;)(17y}}Fxl^q7KtMF7 zqSwFj3Viu8Ge(hDOIqlDbu9Z3aB0%p!7KXFcRnv(KjhMU^3KE8PK=CP!U~7^Tx?cz zm)Gx;PA>yEX;8DEYXNxwZj~WNtVOjXGwE+G$yY+@nnfYc`Aasu`H?-~ z!%#^yI)QYh| zV)#G^sF|Y2mxHYWlLe02w8fw*?*MtxUm~uAKdAn%&NoF_7@VcZ4hGipNLOL-(=UK{ z@{s|jFze?fg2+09yoYKn(bU0NSyG52gABjLsL+o_mxtNPBv%+!I^nLZBU`g(P$@qec)4L~{SGua_~^!UYSBlzqoe$~ zSfNRn-}kThVX&Fs?EsDYs;{+SjVlTjpx!VMk*FBz;^qMOI1E)Io_vM_U>WN~Tr> zEs&-A${EPz;TB8bovP5?+|_qyC(L}Ke3cmPTk{LXwCwfu+m(`Vkk7mla_V+kiUp4)nn&o!#p z@$Fd8BunXb_=gHU`ZxnDgDf_@NIJ@vEIzgtm_bF@+MtA6MuZ?ByX5K#7^4I+a3DLWV-%OWo_!mnT26c4Uw zxcD4S*3dSEzkssD3l>yT=(s1@n#5zt>1G2I623QKqzKe>pBD3dopCz42+7N!EJ+f@ zF}b?n$8N12wIVK7PK1`}?pm422~rzq7aLa0hf-etB=PBc!~GFxqww(um^=Z;`c=|WHVxwnNQ9e8`RRh>^lQ`AtA>1Ar`PR$B!WE3M3O zYL@P||M|W+dE9yT?e(XvSC=8K=DzJq2Tisj-C4s}Z7D^-$7S%ba{cA{&tFf>-KlIB zNnbde&S<~=zLng5?&2z1@Rxt!%R3TorW6G7QP%1qi+h0Lcm*IndY6g$IOV&W z|Ia^&5hZ65LkF|7+QvV&D-%by7mR;CcK&Pq5|&(Zxmc@gDmg0Yyg2@Q-nc=BM0_cT zf(+E9Bp?g10skeyc?i2AIQsBJ|0fY(N^)QOI5{l4|CYNHt0{75!;&mUURj*;Gb`l{ zZGrNSR{vJXYgao~j*UITKX<~9{(b%}^d+(V?#H;|>X3g$AL(9pnG~S59`t(TjadBp zG(QmP=9Vz>Kv}!83zu&{XgVF53&Ga*+Px&d-_!l3J>LRFBj#R74pdQ#lwyQlLRp|S zt^gY}RkySgC53>oq61@wA>{Rbud8Jt{J-9`_WK&e#zV?8vn#uZO6g?OKtC)fX8+12 zWRdrMyjM@xn_y`)4+!NK$I?1!Q|GcXiR-#%lXp`C1BX%*!UQsCA5T}h& zBVn4w)+s7rflJ`ouZq-UW^%3P#FELW#yP{a#D6ivpQg?UsA-s^iqAC%iE5~j?<5KlSw{jnbgpTwE)T>PCghKLvHUE_zAp~0;8y1P=}}qv zi4i|U>PRuKXwK1n$hjVcOdti42Q20bR<1gGcizk1Uym;)K)v0-yM(hA!8o-m7BTto zcu}5e*;evei(3<^wtMgMH~M!)nG2)KfHekEraA&Im@>G*{Y2CNu!qqb8*{QQ#n{C0 z+Y>cuq@Q5Q>+Vulv&>rt%N>-PR~sPt<@MmRs&lX;8df|bNHu#zjYgElxqs39P|sOF zZ7jKJ{ZnhgM)$N_V_m)64{t;De{qGyIe}??%*Of|EI22v#$is*(+BbdVNfoOK13!kV90)F6cdr#`VWL4z;tx>sxX~;Z^1poW~!7X0(1*%T6?~+`ltEy<3 zk%>jp<1&V?2d`$vKaf*gMW+>nEl9mh^*+6tA9!3_LqC=?68!7Qa92QG=Wz_`V&yP_ zW?kueuQ4!IxAOp|CfF+CJrhFRuj zm^YVLz4Y$&ZOHhCbDK7H5MOvO=KH&#Hvb2@J>Re?ZXv2>z<7|*&`U9RIM?c+_TyT1 zZ`BYNuEJ{x7wk&FKn`W-NU@M@4VNQFYGA6o4+EN%_iEvyfHH}^C5 zG&zxt);BUHOgQWid?=8yq)prZU5XHXBRqap3VO+e}K@{Y5~VWN&fo5i^an(#3tn4`(i16%beh+FqT@&;adT+BpV<}K+D123MQ31 z-znXF4bahG9*hEv%DHd!Ikc;FH5ym5r%YaW$Sxm(A1f0q<;;*P9Z z^4ons=Lf|$`yjU*l^KjpziG@%Ek>{)8AL6}kv!h?hIQA6D#>OWS1h~s zyf({{6q)qQFm((ignZE`-py{TV*|CHV^V+mnnvbC2iFhg@n>R*o?O3A#ZX$iEVQx& z%2>C45u8=DV;1(VI4w?j?JPbmmWDh&U@KhLIH&JtMWq~j;yPCK=d%E7v+Rg%d4#0y zJEk~L{}K`)L|0Pu?SSxONkkZoqdOcg9#m25>*Q={@NIK0ruNkJ@Ma2-A19YqEr@#T z)xz+$MIIn>+}^6g_S*-kM+h@`kQp_=6}PTRZ%lmMo1Bo^V8zY;ay(8wS;VXcx6}do(G42S!IMA$w-$kd^p8DVBsyx^Z9P@?@6t~(MO6u zwoJOYj8%w*W4Qngk-z#P4BT*k_Hi~}7I0i3Z6bL<%auM2SDP!|2$B{-fp?^?$J}Ea zwCH1fl<5@2wgSa+-84DgK7STY8ZvW_Mc6QwgqOag+B0x6&cbZbNO+>s`-d$NMO_=; zN(`)~jv_jbMyb|X8&@q&;!|-wZ2o#9*63l0ryl9?@RnFT~(k%-*m=+7G;?oh* zF(t~Omy>Rzpl3CYfS~!*17Jkz5&XlW%df0+U*Bnax#|a^@Fg62Qw44rE5dh$i)C@OLb|(-w+?9kyBWz+EBK% z?ZfKSJT{wIgwvqP*T>^`$%!!5$jOh73pylEsy+~ebUsX4fA}477ZIL)V(UoSb-yP{ zH?s1$*I>%0eV|!*5+ZP0`PGAxXA}!_{19}_!5sOsGE-0^=ot7rp0&r$N%-lT>}oLb zw`vaFZ~xS&^tq{w+Ko3lrp47AFKkE3Rgsp00PxHca=+KRY!wz5bB}2j`#&ZR12x)K z3D7k7fMPs1pAcFkE^HIkW+v8~9m91QSHTJ0!iB^px6=gy!1INey6JZ7=9M1!g)@SQ zFiB8o1tX6JgUDM3P12d1tz2P7yiSJpd4IKy!ntfE@-lA>?(FbYYdN(yo7$!Xl zrk8h=o3O+^hSA||qzf z6j|R~y)-b&+h?>`Ob7mAUUk_Lz9mm)u-X0&Q%P3B01R0QO~48BCGQHRi_c%skO4kC zn3_Z2*bwbg1520vXK7$=4G@>?0GScT+v(n}{(x(A%C(YF%1sA;i0-q(Gu{8D(5ig2 zko@te?)tU^=ObfAp1vk%$A+(^fOxhWNr<{rmr;!M{nYu=`}G=Zp?KMi)&~pe)wk0x zn2uAaOmd=qToa}oe1fG?QG8XaxF=#Rfz{%+!s)sZhqJQJZsA>sDtq*)`uV*pHcl6S zECi}R-)H=Es?G-^6f!FX53Rl`TU%mG&#tJt>Gw7M?fvGz(1IO$)+yD4tXyd-csY0? zsqc1NWD_5M;&oSZYOMjC%0TEHf`)ysJLPW*o1Wrrr7AlE$)vaI+U4?}0X)oHO^oj7 zNB_7OZNE535kZ9s`!~H6*b7o$E60^4JajJQdIlB+WcRY9!?L*05^T zyQSuFZO*IFKiBPd$8db<|JIuVem1bPe)#v-noSj-iD0pLVqP~VGq_BdU(&S?@heN; zG;ERXJ#2kketqJ5_UTEHVD*PP^;qnB&hvlByArO~C$7P6Z$l@BSpTcV+&M*dZz{e| z{RU(;anNm-TpROXGX8n&>H{&nh;YoZ=WhNrZ^aY}g;TS=dnv8Emtv*7c%!e14}iA~ z&z>T@!}SC2l6c>0Vu8=Uf*X%X0DTuO^GwWcSGAMY^{5PdAf^qyFrZV!Idst7_Pzsk zpl1N=G8JGi#V@$k`?fuk_Lo8s@jvbubBv7~jDEAc)H{jLS1i`5Lo zIJcUCK{;Nca)az4Bd#F{ljQ`JMjDFdMr$4(xz2kKW9oEjn@rSIp~vWO!NegU1G5b2 z#Zu8D@MEZ)1&e(BQwXOs#=oOILB<11n*(n2Za%t=dRevfI0% zJa?+MY6(e(gY<)Rin_#8CmDJq@4Ik|(yie!EmLx`=(|MX>ah6NeA?Pb*iQ@;4G@FW z>`m-AgCf4-8Q53FOAbL00ZPknjkx!b&KV*QS{ogxsiH26HZ_u`C~(Lp)kkG&c4G6F(RpSJ+^lxrr4VdBv~ z4Squ6NcHdiy$=G<$6tu9N#~C0)NOmlpi&5~a_DIR!bTuMYzgD?HHRd@)iy?*)Q$O?M(a#(c!e%BNCw*3<_8>%N0kZk!sKzz3 zCX3Rnr!6*azCDVU1}p!5eQLu#wo!Cn?$xNNTgVnFTa5+oDibP48Stt&M&nz%uZ{u} zE=`t^9|t9a=rF`z2fAN6xYwktC>R~vd=mDe6XVOPW*usYPRlpssM(^Vf&hn0e5v+caQQhiBy zxW?W1;?0^CKFkdtWE}K@7A+_gYyNm@HvxE{_wIJuRYsY|;1ClPQk&)WAZ(eq+sTma zO8d{v;hzi1tUIcA_7EmIcCUVIL9z@FoK_D%X*XU6ttrBkl8&p9AtZFod_>z<0P#>d zt=$i>4$1>m>Rp#-E=v($_WEa6qaa_f;;-gwn|zO;Z|@&SuaEq()&&K08Ou|UCsLQP z1{=R6;4t#&k`j&0W;woKjXtKyVwj6?SfpMc@o}cs)qsIIYV3vQp`4GWy1 z)y0zqjw>N~liQ}%%iwU)V5X#i>}mx%b8M}aMy&>0R?KUe;V%w3&x#yg6uj5bO*`Q8 zW+yBCM8oEGf983SC%a)JqYm|!;+u2 z^l72mo{_NZJqJ7k-$t9@buXi7)KXx8LJUEzreX01KNt`fOjU~hIVe?t?_5_oa;Z7p z8C4^W++=-v;b+0dl}8*Mou*P1Ay^bRug*5<`pNIhc+Z9Wd1lv;H{H#aLX$O?;=+z)pEjcnQ=wd%c5-QqR1~LIT7|C zWx1uxo+pD5w~_Hbj?OZw$%YT(_r@5bWb_!I14efW2s*~-j?o}7YJiG_iZ!}B1Vrf? z-6cv&BP}6{2r6j-D%N{H?>9b-`y9?T{&iiyD=4b9szi!R#uS!rii}scmON_X9cOej zk^vCM#@r@M@1|)(s>cg@-|?lm=Q+h)z42gCgfG8yfp(E1_0WCa05dI?B57hdL!5;Y zOZf5UK?eX1K=2BFUt>u|1tv$TN8z|*`I1?;>guuPXO^Glo1HS_q;<+Th_|R!fV7SC zMGP+0@u@&A+@#1+nTHQqB{@ZL$6o_OVIV(&d-=i{XP#2dZL}Kd@+Co@_6-tTePnfY zR}?+75udjNMWa;hm}=A%MI$%}>`N_!WBvy`Uv5`7AKqDdF&$`syV^0Eq?Fp5pV`^S zJ&B_ zHR7wQcSVFehJyH6iK(cgS}r;oa4qsE!NlS75Phr#j7JQg-)Bpj z_8CXee&zvnkg?oRBl?nH*+1JYoRl&{_XAo;bcyIxmil249-B1GHZy%XI_Z_Uk;`1B zFS)r97bzaUi<7DhUp0}m3V22(S9thf6r6G<#t)y`ue^{F&^(iY%I1ewy=)scy+PKL z+eU8Cq`&s%`jDk_|7u3_X1>(wlJmbN{;9pky-$-St*(B`?o!p}_pr%?kl3vn;%Oc* zI}ajR6qj&sG%Bj<(;wP{lAtYMIBA@-%bH2J?<*%v>srdID`iTIzavzxJr!gzqR?W0 zBWCDXJN-6%-q-{O7DV~_oIVVB;4~MlO^cPaHWFSuiHDeD`*MI`43kPII!!$Kv&Dx9 zIAnvN??viAnhjtX7V(oIM)e4|N9KI3WAe`PnC^q6WP;Kb!w*P#Y&NRzu-uztEMWyV zf*&oyoZ*^%svSQ(N&R*Lo4?U!vtMDnV)C0TAX?IH;or-Yb&>ME%Aw=#Y3t6TiuBhG zjb%GDs0D#CyN*bWvuSk7*5bDvnT-DQuFYT4c(87{v@sc7!)R^5SNhrA!j4uanBDXY zR*F%3&0#0yq5UK2d`xG$I}Hs-ZicCSSnuO{w{wG~inHl~fbB%>mc8|pD4|d7OPEGk z%!c;GnRpS};>GUg4%uP>Suj!?48Q_h1n&!U{QW*J8Qg)PD-v%Zm>7)9{eSip8T0Er zpC4VK`vQiX(KcbXHr?+F1ew;A=+7s;9boy~2u`F>feb1LE?I@sg{fX~+uJcpf zk;nyBiL3bzh3@@)<4sS~ldwzgAe@*C!J->SdeqW@#Wd#yVj)|z_NtGTVWr-evSidlP%ij$N6)1QoGsG4`T*H^ncj_{ZzUl2Z$UMURSh*jdwYJvkWAzaX6F0Y% z@Wecl0FX;xdf+V3Dd~V%OO7<<84Rpd+!fG>VoIaO-01@H(v5xqE)F_PaJBF+(Lui1 z!BS*?(j}2x7I~EB?ReCFTBZk#dL6r0FuVC-$PUBS5NM8#A-sz@XR4K$EL@{$I5%^& zVEL#0wEQ%Awm)=rT97P|0zH=KZ+&>h-ONZ?Q=z12w900*)niXiR%maeWjx%#{DqJ2 zQr}I5FZD?Kdtn+u(}UAX3{!5jB~c2mZ(8y+4=2>yKJuPtuW)0bMWfL(K;6Q)V3weD z`dNuiPU8Xp!SB#WM%JO&xNIzes7xVM>m~Z+M7Lvmp#gwho~O8p<=4$iG%$_?hw+4V zF(A871(^BQ9L`(}rQrI-`b2;`L_vUgi|!9#W8db<><&F(L5tS4_oY9FT-rEg1ZJ+T zuy#A_j7be zcuy?mX&p*BTvZz=3?I!L>l5KrHrA%`!zUs!JXUrq+L4;QM;R$X^!*g33qlQArn&Je z>2Lp1{Cp7$upOu!w@;Lz=TDhf4tZq&jdd%}e}#TVPVaN;&I#xccz~Ptt_Jv#IVfxFh6(oi+V39<{T>y0 z5g0aJFALEJw&rN%Npr5a0y%ii1V+g>oOh?ChiG`1cn5zQ1hP8!7&0U776g z<=clBruoy)YHAFse|$Y!s2Ed-hmWEh=O(}p6NsX9WuI4?Hnrt4>1o)!s$zZqlW#tG^+ag3y^ihEf|y+JT-i4|CJ5TWMww}ac6c6I z>^j{fXWSP)FAL!6{~m3LS$KKLC2sdqx0J-_2K217rs<;ZfT?L+&k+E<6lnEgHdP7Lq^kC-O{+zp_MzYH_KMMp`lW)pthM zpanOAJZD~{O}sCL*qdD_)yJ@lSr1+BQiz85>2&u+%xM*W{YnRHA*UU|>WhJX2QIFa zvks4>YkiHflFHT1>CDC4p^Buj;_ZH1C*koipBsy7sP9 zA-IL#`o+`k6=rz#A}V4o`9vy~Jg*|!)6pzuQodH;#&4YyCe4nxjW$@=3M*(@%s|j5 z>UwqCdpaJvX!&s3tt+9%yl4?gq_@NzE!6cU`X)krh`k-sBF?|Jc`IE({e_g^)4S(# zeON6V+aX(rMIQ_MS)KfHOqaHwCJnqCyA(HbD_^&-m@dbEg@J!;Ii~N;tGpN8TJa=+ z9@s!w`;sG9a0zVLhY3)zL{O|(uX*o20Kjm-(jQ%*GY@hMvfQ(yb!5+O;PB!$6A5uw z(Xh)KUVVo=o@PneOd_0a7q$M<0Q8#<5xz!BnfozrHo({G>3S9bDxY$sv}swFpxagr z9V-sm9naEdz)O?w_7-NgE6yV%0?3c0{Eoci<&FrLBGzE@xDsa(J{t}3aQ%+ta{a(z zVKhmKQ?o!GT2K}tkClQ$JA`$0DRZGuMi=y(Ax3U7_~#k(bAY56ytdq>jI?`h-T92v zK5F2XQLFP=#$P+h@(lOd{0?7h!vqL_A)|Jb5Uu(Q=VP^4UGo>#C3o1IXhl6GaT6w9 zwm`Id3#SxYnB#y6eBqnVR3iku5<1YXmOmef;>|B`Nl%Y|lKUAxeVDh>(md{@dZq-- zDPS8oT9}a#Y$96P#_1s<_lpcWvNy?r$D_HO2lf8V{PH5l<}!~g>#pS09X*_TJYF(= z7~v>oPAm7v&P(ojd@Gxz58T5ua@a?Ni6W5+(Uxj17I(v$5Zu|~JkkDhxyB|sv z2+#<6rgl7nsW`1ou*jj9_MoqZSS5nYnM$$5+xa>%BzHbRGHLf{UpXHf0wx1COAW_h za{T=P9=)`ZuK}FGnGUV2-y1i2ppu^<#z=Y)>BMa4+Og&etRT4RD7acMw~L8$;RUea zDn(W}d*&DL+F+ZMFess>E+c_c?l#t3q-QTT^|m= z#>5eHkhIs>%3)>QYFdFSQ5S>(g=o$lKJN5G#W0LP;6(u1&#~-`N!2mq}mQ+^F>hB`m!)id(6U zEcjmUTJ9ayWG5CB?8j@?v* zJc<39cCrE1rd&o)QtGAz4E#oT>ky1s6$G_YUh8>bYc$Lo^+gF8wE;SU)$PZLn%Jhl zQEtKOEbrE6=}#-y+fW6XV{j-Aco*tX1)|+mb7DXOmDb2SRt1X4@1ph7p5e zET=WS5)C8y z^ZjY+Dm$hFIgn$ZeeKuv60-9_jR2z7PYI>4(SlYBp`ELWM(7BU`_G9acY-Ntaib7nS*4qPbJ2qWxdPk{11doLuic zvfzBXaz@G?So43cuMoZ(c-;K@+x)p_-B;Z*b_DG1{`+Nnte;;KAUU;rdmfwpd;Zh> zJG=XVe)JlE2GPkYbS!`K>*3H=ep1#f2{U)^Npe?t%TtYy#vHkN7Ii{X_^Z*`w$05) zRTTmC!qqC_7xilEBz8+7po&SKA4ULM()-Z(B|eH4FYGe=ZwQ!dzNIn2sZ~9e=|RwZ zSQ``Nq%0QgQ^A%NTK?xWtvBG^Zo^7R7u%M1W$ykuzK2!(K+>4H z<2CkRobJkJmm6QqWKS>7CiObk`*_WVPd0KDO;*87Yk1vrE%hzzb{ZMh4bR0>QG}`C z;G}m9y;>ya)XIs(t*NMY@7zSM(m~5~bo-=Bz7FA4D6`P#w+s)@Gt;o}E#@6f^U$c@ z4A2qs^T|sK2ht$qwt1oiMJnaO2a3QA=po>uF3iN!N;&j}m0NGwMX4ZPt17Z!LtmsD zWJV6TvvR3vVR7o=4{^d?Q^({4R>1m-E(Bm|TI8!O$gwNudtP=remE|jY4}NCx#UAN z^$NM4PdR_~#Jkeu^2wMFg0`6;Tt!q$WTcr;(sdf3!Au<24%Id#C$v~AR}9O)cx*k# z86n7qj&dzI+rxmI!QCYQR&T5r4Q9Rj{XgMct znVzv}D(jn>wLmod{FH%+qoj$~-{=ar8q2mEiGe-7^2ocDEXq3rS%6+K07WedGl*qa z6#NAEE51!@^mC{r>XJ}HqPe)J#{e%_u{;4yGO02?ftlo^h33GyC&cB=Y~h(BAnCXX z2^eu0n-uFK=&3)>W*r`D&1xN2HtMccWBaBg^{d`DBr6-HO7WX_C7w01@Z1YP(r4yIV zh%phant8_*-<^Pld)7seB|tl9D&qBkRw%=>)9pebE=dy07qRd1fI00`zzGWQVELlh znmlFhm2+7RC0@b4hI-K?Ri z)tvDM^nBgLClY2@Op)G7X?@0%7Ue~H0cb1NWhr@ku`}eVs3_J%2F(W%tFCwa&y)x% z;FGNK$`;)u2*9MONyDhr=Qv6cZWINzKtbMa2%m=1<;?SVK-?M>a)+DEwGWz<-i)5j zmV>%llRjBVDDdXmzrx%NO+WqqjjbW>NM&AK9z}7pyBbxTE)f5)wCJs7WU1oSyRk>Q z3@w)3y$@RESmLLpVvxRy>I+4 z05yhqf5DK`Z(Y)a0oc%j00Ta#!Z^PntU4)|lP^r)A-Y{BlYNL#l0i|MrK(e<(JF2wk1fC(JNVozFgA^2h~kRqZx4$S$<*UMc9IVqWfEjp#5W) zaHl1G40x**U@3;aW2Bzbm{>RVwE3!jd=hI|t=uyj5pV6~(5bf~sr`0J0m=X6Y#S>0 zb5%HGiL2B>Cp(M6OaXDYL*s^G%g<*ddiH)U0SM%^e+&`wQPk|-2~V9-)d37m?)F88 zU0NeR?2QeK5+ep0QW}9qzF%pINXKnD;OyF84km#2EGNX~KRf42OOxckPtE6gISGU_ZAAYcufUX)#l$CFVD0;L7m@2;FF>2iIWOA#tqjn0R!~pB8<9(iGFg{Y`5^Dcu z0zEq-$fkI!weH8b8%SjU7q-hZSF0cE{J2mdIDu;hpZTM#gnErL->2BNip8>{EXKfA zDv`;IkDo^Uzh~<|x=Iy({W`h1f)ec%HS%3nddDs>XUe6ZWjVMeVDp6U`>$j5nl^Sf z`_c2*#=?A+VvhcpIbP6{YUOd|wPjsk(i`eUd2NPEEp5dVQ)TAz|*uQVyyZG?n+%b@^%50G4n!)viGiJy)=5t_9^Ct71 zM)G(8)rPuQC0+h1RIcQr!g!j8qzx;cU7}UE_EhneCSl^3{A~}OLZ^f8 z&F+PZ=<<`r>neGZmP<%PUW(|o=vv|AUgfHBVqKG22Hp@>VmWR3s+X|D7_xN06S72X zJDlRXa1du2Daf#zB1mDV)V-Mt4J-1F_x@Nhx{_ve&&1lbh@Him8H#L?0va9gh?xRE zjgLPZKOdZ!A3Sag)YYu}&G$WKiOrxC2ZuyKZ^d$88Jeb0iYp2hb(iBvWof&+T=A+* zz~()gKHwTQO~^6oxi2oH z!|6QOnQQ9ApSm1;u6_%*JU;!bsUlO$Tvp{2=qbJQ=bn0R<@EIx`&MmT6dp{1`LpX1 z{EJPf#ZyYo#N2($%G%2o+s9>NEVvkVbXND06(IVYo)L}$${lXjA zq3lQY)?AW<-z?1Tt7vHyCmpI>zx*q)|06pNqDm9&>qG5j0tS$%qVsh)x8BReUL)+E-XS$egJodxca_+9*q{dNmo>IYuxfGuMaf zs<3x{MnRheM5|9VCC_HBl|!)x+v`a`ZHOgq3tF&s|)dvo@+tk-2$;yn;l8_1Bg{pWg9`hDnP{buuz zcD^JAS4PThz%E`@jOLJ*2_lXM|5T4i=!^nT^q3Pk0-maEFKg!0ZTJzAN8e|0`w=8u zFM_~&58oZ(T?0{D(`J889#a7(vcwsAropUy^sIiE(&mizbBLyClP%dfprz%oo%`k7 z=+bxsv`Nt3jblL_AwRp1>N$E;I*++NIxOimCffAgz4B4I-~9Vg@^J7d8aGq=Jjwd) zf+WJ5(|WYEiOy$d{-hxMTD!pQqIY@v7B!Gs!`bKbd|N4^uhTXAcN3QQwU_SD-xB}4 zhWci7@D6KGwgfO?WXqsjEvZA74Zp zQdH6Hgcf=|x*EI5T{k&7C$zALPuZLhr(RquB1)y0j@)@$#v%gUQiVFhXv2r%hBrzBb%fX^y%CmS!<0y_)a`^sn&?B!va;_2Q0hAEkJptf!&7MT) zD?3-(nq5a>UE3&F4Z zM5q}y+hk6ofZ!**j9UQHobEvY5(&PiZ!k7lMz1_mLuNJg6nYnf#oQ&dih0(nUgl4>{++sGd$4eVgwy!Bnm^QUGRa^p!ZYmf3+1D0>Y`Pc zABUhS9$IG%_+dE=tP@h^N160Z9-Grf8JG)&cLTaJ+u1jf)O@CHlM@V)LDLKM`C;>m zf3+@<49Mh@FD73kLD2Tr_dvWC>Xz}|xndqUoy%dhLrU3&+mj^SI2d zhW++`o%w&HrD!I(32S9i-g7WQ69#5KS`BatK2R^47jWui}H7UlRmVe`f{E7C_X& zmZ1J`Z%G(K`A_fLCi<;|)On?=B}#SrBITs8OD-t2DfiC65ssAabD?uQ=&tR+wOnpDGH+SPs?vdxuMOv! zum^l41&5bl*-A%SXV3lsPC?ZWtPo^m=1u0CT~?QKM12MWy7#cvHeC z$c#hUPYKed`R6KnykDN?pLFu`XeyC6Bl^p~Hq_w^TRg)N;wUzI_IX)Si(T;67nI4) zg8?4bhGqzncASlTG#ZYiaILjEERLon4qEj1opdM+I@J^yU3ru|>Iy^%8jIOE0fu8}=1+e$N?;$ss1#@zS>&!05%_|3uaOd&d0aY$fs8 zKW^RYy>RP6#1>@@g>>tGkVcC~kkCJ(K6WPpf1*Cry+USbOa!eUbaXM-xPZ?~ZTuA4 zKKOg!uVj6T(GKi)Y<`B@^~;q}a$@vtgO2U})28PYXlR0(^vCE$VL116>DiP;bCX13 zfA*$ec6HxpZH^03Z`mTgj56u0PF<0Bxu}ytZFURsnaHpjWzcfvVqDm#w-pNUir+$* zdmwpw!uRrJf^|u%?8GX3kV5m#U1P$tZTi+ix@h(A;w6U4j9a)Zd;|l4j2Tv%>67cD zwpm2zmW(@C+_Gg(H{X`1X0t6Rv$lL~+AwtC^rt#*fFYoX-ur4S7a*=OCt#MKV*y5IdbtXjXK5 zjs$vq>q8XwW%)afH1QHeql4Eq;ey|QD(jgqBuAG)>8QUv_N;c#b7CJwdlkz8(fw$Y zkgNbS&GX44vgYQ8Z6g;KJnqYT=Z^kxJ+Vi;?3fnctyqvAsuBSKG%iV-Lx45ltXkXK zphFMnl`7Wc0{Ca;mjWQpCRYQO=-PPuM32zT6dq<}gZO&&{l)C;gFSu-V0YkMxWMEYE z_f(tcGM+ovxOLNhuwd6=Y|*N=*tDo-A@tm_Y#XXQHr&~NJznqdovQ>p-tmyL+tz@y z%2_B1O@Kq025K#4;FY*UBvF7>sRFsdI^egNl3AZiB|b_ftx^3VWs-pGgDk5b4gd%& zmj0yS^03`nFF^S{Qcu4-!+bVE{zyi^7Gh%dmDwvwJsDDS4;$CA%$HUB&tQbBUkN2Fqja}1XX{E143O(BYr`-8UVPN{d|_Xc zr(zIx%}{423T3CcQB}cATcofkeXYTe{kW{mi=cu`1uU6ACiI+ax>lZY^DIwlAKcQw zmcBMcy<@*^FL8{V`+MwQ@Ge)kD;$;>pmv*+rRVfU#*fLNcT#Q@%4OJo{1%0FNf`i_ z+N#SSpHJhBHdE@+9b12;Pot~s5&GfNTfENndNAfM3k0L~gLre*>Q(j$|Nd)z{*f&-hQ)W-S1Ihm&an=)Q z8_&FzA0^nvA><@MiP?lnGFj*2&EX%v!@pdIgU?>KlG~PDvr^5y???4aSf~7U|Fm=H7xedi617jx^V{vRis~u5CO;Ra zoKL@cZNKMynZqw?Yj$=WZJztd*JLAE4aEUUw)Z?vc6L*LJ1&sSih0DW|2_R?cK>6? zIhH?;|9<~H`8vVE1r}UXXpgOJK(^8&znAqPXuq3&bN~Dc|E<4dya;I6`-`Xf&MS+& zSm*hr6z_kXt8O^O?yTv*Jx$pcBi&BwE1dP|5-vHd)!%EwTsm!dO{koQaac=T zkMpYTc<7frl-=%V;xMJV_*JbFZXv^P0mS7F`0Z0$Y*emvJf>or^O!aTZ`JhL^M7hE z>v-W=-yWYp;#)LQa@y7|516Z9H_Q?-6c-acd8T_%zEmK|P>mBpsBwe4@f=miJ4^o(SilL+oQrMm1c8p83k>@?Cd zIIIIX?Phv%z$nJ;ZeKC;nV1f{Q+=`Vx!i&DK=ThDWES0Pqt`7lo##W_$vp9 zPb8YehxA!e_#?*B2yC`+0VIh!fYt((1YEt#5O2#TqqnrlI(%7z=`XfgC$7@zv%z2P zAk3VSvs-^kL=W?KT+XQ2yBrr_Nx=2@Z%fdWCyL3_dC|<3;4k{}Kb20Jxo3IRwt;6P2Vwg2Xt?kV#%@;%sZ_P_qs2b_^F~@p{je zfZc=5(&z&>122PN(+j5l(jsmSlh>U~_Gxp-|6P7_yNT~#r^ zvslUf) zJDb?21zbBgK@J_MG-(80m?>QDA!ctSbe@`AO#)~C3HzOh% z*%IqV6|mOg(vt`|tvCn?$Hl1BET{jKx`=-65P;>NYMl=qyCSjuvAfJaz$w$+R`Z#D z*w0GmXfd{HZQl>y&T9qa-+o8O#bqe&_v56iM*3d8wdZZ-``K%Yj{7*|VU`dQApmY` z;+k!PyI@7H!7ViN28=h~gXT4;yVX$=iAkq7^I-#js`#4De6!#4zKPuhyLI}sq7=dc?e@HEL5XH~goza%! z34?Q5AOC_RBUSKnbaj18=S*0I+`iqsH{4?GJBzzNm_2B~$Wlv>64O-G4m|fO_Sdx= z(|I-qdI}mGDY?KduyvQjqEpUWT~WsdNSxya`umeXz=(^(aQ*Xdj9Xxz6J--#HM_51 z{>YJV)7W0XqXXD=z2gLZclSnrF4!R4j;rm2yu~T z-EF(|aXB{M?8!kCRmU)%k5w#OahZgJ@&F}bg5%>ARRhh;;ySEA)%`2r3^@vgflD15 z{i$$e67x-b@+d}`WhqS>?0f{lldoWfV!TAzqr5yGsS&620o5vTJknwe*E`?)G}7*S zaB}tbP1pNRbz&6nPD=NlZ{5$&Hz8;xBX$`0%hq~xYRWAQEdc$#$8oGU%-bv}x|r*A zH~W0`jI3y*>5_s3cKrvGX~{}jGgK!hV5XSQ9yg*(F=0J}%cYD8bBs~6$Xmn9s%#=| zO&pO;2zC;IoATKmqQ7oP_=h}InfN_7m#pUG*PS^W9_CQuBP@nK^Y-JbHgAn0?q!~q zhi~Db;9@qM!d9)+OHHeISONvs3Pk}NgBSoV;x*Pha<7|xM^*e5s+_>+NI1UK@wGsv zq%mvtEb-5L*tPQexVlN?dKem*G?#aG?x(7z zCvwj6`Mz)b*xTJ}XA~gtU48ntwdC$oIzSVwkL(J+NXP5H*AndwRHVhbjrVQSUOxMD z_m*Aq>)EA*yVQqF(5|H&7c&Mpr(W%)Y!io?*(0|(<#K~^8Vzvh^sjCWXzw1KUhfuV zhss-hU0jeb>3-L0c6{3I^C0o=tu03JkNV0cYj&XzOmtFP>uR<>NOaBA(X8v80_wMO zIOzhzPovTA0#?tTQv#t#pmcXkK$ncAJ$-3AE8t) z^NagVbV%|TIUb*@u@6I`r^fmheT$Ba4T3^bD6R;YDi2InSzK_8W1u0SY%O`*sDuY6 zkSHyiOboleem5tg`DY1@YeOZ~_#k_^OHz6Kjv`k@Wsuh;s8!mH&o>1v z-p@vOstqfpF{XF}iz2PDrO*>k=g8rU2gqm(3iGmY7}fyaCLfh``0Q8<=c zI*o}*+M@vlQp0(u_zK9tlQ7g!CwlLVmFU~zP{W6BsdBkS=z**F~LlaxM=Oh3-xovfVxyTx5hl$8q%Gib!`Sv zZ{h?8P%v|Zo*4k(K3kwMmD51)SRw99VY(l4=1PN%rm4KL3QyOP@uBY^YQ=|CtTu8T zC8&RfR#~fp8Hig?N>mps&%F{!!nOAA*gFFNOASZ7SS`83Z8R$T?`gBs4dT%Zwc-L- z$lP;_9(CPq)^M>AE>pGsK8aEH{cO5}?SeKAe1b~U(bMF6y5y=|-MbqG2Jp;ubozjW zkYTGRgJStwpVXd0@{-r(*OD#E0i$B<4#tHjTc}GdaoC9RSij4&?Dsh#ZWqTg={dzo zK0YhRZAJ|*FCa@#IBY9MSQrb?BU9C3_WXTLW)ieT-~q(xRW~uilC1SRs2Il9F~lH?WGBuRrIuu} z=2ULqdvU3*z1vr5Z+<3f#@9;OW<}o@$tEb~Z#0mg?GK>r1*@b;xE|Awsm?w84=Rll zQi{zl4Eq@KX_IRcK*ca7)iceTVNOytSAxKxV6@Bkm9XPD@zX@@#$L#!0Yji@@bkr^ zYmPh9CW~^}Mk6od-k6qQCN= zdj#R#P4e;O+BB5(w?5+(RCR`xKgzwTLHifFE zmx4|2r>peToci>o37S@+c%s||j3{a91YxOSctcW}lq;+qj|NhwWo%6)F0>uG<4KF^ z*!DqQ7sxXFFN)e* zg9Yth#XGA{O@6jnI{V*TEeik_BGWxdW{c*m^jaX28lVVzriGX43>Ui$2UJ8ROF<*z z=9$F+gih2LW4j1Zat^(pQyJ)0+40DmOERQ}8sGX(scu@zR)`{U4fCLh2@%ffGaEtg z4)~`oJ3p`3wZ_fgRugCz3C*qvzYfJ#`|Kdggj2c!K!4flvFrm6oU`D9TLK&gZ1^@@ z$07p?ir{9!^4IVEV_;w1XUc0aQQSWKozjt{VzEZ!nDNIjqxDC|(z{tjTFCbmn5p@) zc~C{dgUgJ77*av(|4G#A+1>j&2lh@{pQe`&n2_SRO&`;o{S1l~CoEW7HUE5UJvi<< zetQi`TMzmfWB{hMmXNITB(np<>m$w$-Gnl>o&q0yYd4h-!mwGlyu?nW5W}V{$zSP4 z-t+%w8hvBcwo^u5*f;+9kaqVwfBId)AS7OjXU9v#nw8+6<59dyn#JPNdan0x^OmQmY5rN3kK$kc0+ z+4v%!ak=_rhuPhaq7S52L$0>eZQ%6$ss6l64LX3T4V)RkdBM2OXt%(nnd0Sa zXeyRki|_@(Vl;IOI+1P^R({>UP#@iJ;t{R=~0+3%5jq9F+UJwMk@fP`^0E9bE{hO88kOt>N}~=U3L9TnCn4wI8D_ zV;KEU)J1GN8&wrL4~nD@AC|*UY8xS0{MJ6d7H5u@1PxY?D)1{2$)mq$fdk;NQHqB_ z+DA$H8+FTmGV`ntpi?BAGs`8i6$#*JOq$)9EDOve4GT&oi56hk06ErzEfkDXhzv0> zR*DIVRIX>>X5pRTH4l10R1pO3s<_N^@QjVj63 z=tUJd!H=RU)%77tWV&p&(M;+WWRxl~P-De(SciuRF{@LM`0%+JqiIn99BDK{RwTHE z;hc9p*(Bdxy4fwnQQciTw_r9~wR%Rei<)H}TVh)lvdIFB(zeLBMh4RTe7Nk;6GQVk~g9~XI8ZCNht zMH#4drBBb$A_8T0{5sm#&#e0Nmjn_eWEMfzY4nbC)nV<&NtIQVMU|!UT0`eh)}`L^ zRjJh`E?)?lz#aw|kU}|^;i)J9!S3x4Tnis_RfvntBExu;V{Y;zkfjQK&^)O9m!IY> za@<>3Dr+`B3%jN~fE&Q#w%x^SCBzMgb}`SQ3yX_VtL6^GI-ZQ~KS_8rpeUv}M~6Id zKmr_aft&Q)jA9U41xTZpGA7Mq1E82s81{DhU$z4n$}U<`;K1Ae;#~gnpQHIN-O@_@ z+PP|Z;QT_CMi~SNGAqK$3?(cr#4H)fem=GFebh5#(jc-eiA)=vASvUKqC)YDdc+Web@{U%R1U}gP;0o~2?N{Q}HxM#7SK7WOt3D2tj6#hXFVMz|h!(jY7A>|Q@9KGXM_kzJD>5r82 z{Z&Sus_SO2GjF#QsMcVf0~>C z@e8__`5~}H2L&_#KqIRaKBe2o1Mz`>1(p!ZpM{=^AKk<=&pxkAJ~tcSK3qpZr(cb# zvMzP75xQOOJf3yIP=H*n38J#Jv+apQX^~t>r-bLT8uNDSaBbPi(GxOZl9K({}v!*y@0^`SZm@(TU|7YG%Vv^aL@t!m64&h5bqE)QZPIUiXUdQTYb18vN)1)$ zZ@Zh-v8RJt{3TPoJZq^#W6eQc@jv#IUQ4oiaKG!$HDnh2Jb0G0x|ka5WcKq;QNV3u z`JVI6JVfCfnWY}v?-{Ku$8QwuWnV9~%sI|DTGhNSem@__et&m)7Muc=Ub1=oZCOuE zfjspN5sLGN%P;s!d;TeJs6QWMo7p~{pvOnlh@2){1vqZ*hIQCoF5gk2UV(f+n0% z>03MG71uwIJs>}B3d(u}ece~A#6q57yr~Ulp8#%5z2340=k29Ns0foPL>_ybg1sO8 zvVZ!J$M7V*OSv4??a9X*#vf!Y{LW8R&3UYY_g|qPsPBP!Q~y!EPNHP>ytx*hG10jX zqZ>y_&jXZGI7+Q&F}gBFRq5(H6m?SgKte#Dg;_#exb|_!@T~)4kV)TiRUT`bskRUs z6HmaakQi2=^Y)Us6EVX4tA`;O^L2gxYVhZZu6<6Cs4(*qU+E9d4Au5>$93TFMYxzK z4<$kEBV?ZkPork4q!Srl84aD#hfDPcOy>NBXH{hyIv;Fok${YH( zNOz05yaZ|?8Fnpaa>!)TQ^yWwf}}^nHkNmkYue-)ftbvS2xyvQ%&dg9fHWrDv&1GC zU98t)&!+Ey?}HVc(Y7n~WZoPbM$|yhImn$Apy9;ZKU#0fv(P}R+2N?ZsgooZkU7&M zr)pi-OqbxZqsmOQssa7>x2U6B)HIiVs2B|`lG9=^&A_b(G9z{F0**Sg!lCcmP_kR; zD<9;rapTfu_WmIQCa6G5nmB+N8Z4B4Fl>R>mG3uM8-vTx=rXkz6Zn(>T00tW_>s`* zF7NF79ga>j7Z>OdpQoIwV(m(=6)v3=8;IYQBOoO6krBAfX_Z*)!{LX5P5yN0*BXVf zlKlt^kAW}(8MgC9FfPSaV97l$d7(HEuo*-cV@RACu;Ktr5|k8DYL6UsU9K&QSk5g< zR`0AEUq?cy3FqepGP1fCxZLW(#sv1Y_pc}8 zi;0*Cg`5YVi^gb=GmfhFa$TYvV)mb~6_NUo2ND5M*uxv01L`*Et4IKJ21vWHUkgI9 zX*j?r7lZBX3jxzaJt{PsUOj!^ai>-X>3&`-(MSXu)5b!$D@J0Tf5>0 zc0}J?pIRb)uXf8`n4&J(C8R3FR_cNsS8Vfap5IhpD|4|vB8nb8X+?&K6U9m+90D2g zDl%{F>~~eI%EO@xf_&yLGhmu0V`N`EXvF1r<@L6q#Q&4X&~yDUi` z|Lk^Gar0CajT|8PO!f?rCBd8!^ZynT_te^UyuBD0o)qh1gUGWlCMO|RtMW8R&2sGl zH@au?{wv0h5&%BF+W30sd{iZ6QSgkrX!e(Be6h>R!!*aL9EG8jYGUP1fTXfzfJYu# zGN^r@6%fc64{w?u|5ZKte$+>c3L($Tr9slmA8+q6?Jv-Ov$mHSax&{pNTI_FQ(`|m z8$TFx2>)8;gEN}1m?&^lV9*!S1u8r?olypa`VzzFap5$(GX=0{J0&{7)W`dwiUS*Nv)cM6x$e9Wz<0MfTds1yQ`QuI>%c z1q=FYssJam?Y#^`qf z1EjB^TM;|MI1Ud3ksFtB{co+vQ-yPjLc(s|A4YTN11o8Zpp}x!$6>eQw=K6Z?a%$ReD` z#^iD=(mn%|^cPjW`{(%1*+lv)qFo#ZOZIKtW&U_QP#~kRuAM~x>F3!&h9EuRnj#C# zwQ>&vHadWICS-W0)|)*=B*a{{Tj9S)W*4Zm_GH?)i@&1Fj^y$t=No}XlG zEj|2aUi^aB16EK^Beh~Bzb(3wt<17MR)r-nz#bQLJCt>El^CN!EZX3~-0!m1WMUoW zoxng6jW?dQl>1MO9+M8K>;iTu25g)>e?8UN$?Gb!rP-C7mqPj97kk6r*c`mRVz0KB zbmeWpcXb@N6cyk$ec0gk`U@mq3!e%6j7Gh)cYGK8V&{{Fv&|d5d$%>X7t%Rki|@;w zh}QE?&M$dx&VS4yrw-oRkOtY;VCJOk_`Na4=#kRW4bqK{9w{|Sx&|J5ct4LL z!CbgXH=t1^~_ zkTQ?GAd)f(x^XEh%Gl*KsB99UTjBRxd-AP=A0NJn1(-BhytcD=8vG&pc}^gmJO_FL z9a$XtTQF-9K`bskW2duvZ&IEbiiD(+(L;t>`l?ugI?SSzIc_$yz(W9GI=n~4sj)cI z!$V?Pvht1;WpBJ@izC;wz4=|lzAkxUkwGT?$+RU(lP3}~m|QQT9ga%JU6ULoQaQpn zR4C7_`*kZZ0<~6E)A0-QMOu=c&z_(Z1vWk2@9^B))H`3E&;Y4w(@nzpy7FGR+nUL=C7691@yUoS04jt8*TMvpSY2b)b*~ zMg*_{Jwl=){J0P(U|SW4TeX0iTESaD5jIM1q%#Hj*tT6uF~KHLLS{~6oH9^-^1#tN zOTZ*jAt0CR;e4E@U<1PLeeR@27?1sKoc#pTasTkk~ti~_>!LQPBRm!Ms)@0bfY-4Nhnw1 z!vyJ+Wx)<{G-IW-?n3)37Iq!U5J!D63NWXv*cwsA039fhlj4w$xlOyApBFprr0~+fl2}Zxxqb0ocv^mKF}}$X z$?zV0af4{wRyj6J`O)G_lB4m8O~kuSqkGO$q*`qYl}6O1rdm`0o~@NQ0Mti9f5mg` z;?|@1Z$`cnbd^;4XA2o>vlN;%_`Nc0*UOh;eAfSDX^;qsYayq{*Q zmpV?wvpK(@uTJOP5!OPeblE=s&g~wfElSxXLk<<7*+Y_i7MqEU?=a#HugoUqm)zC9(H zD)7=M8brMZlo1Z4q2Zd5=U~wiCV;m8Kby!KONsdsqxl69hJZ)7c|3tzu-cUNLmduY zeJqu^%Km!~t6(+q4urtl9bg-J!-mH@0CjCxl~Z~qPyvC%0Gu3&bGht0oE%Ai#Q8`c z0Tk4*O8&Y2ZXHAYWf61NlnR)A4C_H+|A%#sxCBSN|1a@#a5tU7-53Us`&UdO4ABFj zW_c)~gorWqgk}1-TQ>P+YvVpfX6<; zLdNs3w8sae7sbroF7?$r|NCFC@&iUpz2USWGlN@0SC=*niN9zLS+$Tfh^kSiY2f4F zrfgU_ZNoe7zW-etmqz*D>Q+{u$K@CAKRi_;&OlO;3K90;g3LZ+%ac_()xtr~LrU_q z-rqqFTq8da0grHDQre)o&=#(vyQI9-ksI^sY9Wn|UDgq5Mw5=ANnW z%vOJbyLzVQJ3B^`Zmiy-!RZ(NHkjmG88btqnb0ce9}x1ynTpg$$zo@&{KtjMeQekr zxjQ$`fGVZl6zW{Y^Ul5-%aF;gokmg4+8id4XJKZI(s)C*rvk~CvEPu>wJ<7sXvJWp zCe*#w%u$L=AYUl!HlFRa_!IPD{vxk?1RG$qKG+AV(vKlZ8cZ_6U)hCGwviD>2+=vs zQG?306iMPQOL*v=tdnHL-e-#IBD(&O<-eMRuWX`FbG2C|gd}xV0HTou)*=KXEQi0M z2D@;$3nvF=S&I^>#&)+=7}VaD4!jrj|00Y(Ns-PRnforRR^ZVYxLcCMoKoY9<@3U9 z>G{QQW{PUW=8fc2YCLM};&)?6(`4HKj!6tX26hCJiDCATo(B>?xvEBE%vk@%NqN3sSO@LGcd-VLOXlITib5q$$JU4&DB+5tN9 zn^azN-i1eRV)b;H_03+D2w%q6qC#c<>%2N+U%7Q>CAItwzZWSF>^^M=e=7IwLHHQUkVa@1U?^g;ogo(krqj~L?e$P|IS>1=#`cGW{>64yE9 z<)$ehP>+AS_2Dz@#cJ9}Z0C{{=bAt;jBCA&uwU$X{9 z5i@@~Vq7P{jePum&fy2sT_MX%_0HABCeOR4%h->QaP!pgC`o)ugXP9%M{hO3ep5|L zMe^cAn#Q3rk^HrFHja7cYanOR<0QU0)nKvG^rJzF>&h-Ew_?8(pwk#PS-UXNBr8Z{ zYugrY!>giAQL$QP+Md`K!ZjCR)p!wP&Z@XD{AdU$l76}Bi3nagH6;+ABzgQX`Zq_L z4QFaF9Du1C&nS`L#>5@qAraR%@ia+N24ijQlE~nyFQo%vm3~6D*@4dr!uN&$3JOaPs=v@7l=&AwOysoNeI&Yb{^9Ew8|&n4`px+RB@2$tu-JxM z*^W8DDb(}ORC$}uwQ1U8peL}u5C#;Npcw$XL*NZz`-ld=cB)P_;Q}G*KmbFt8_n(a z(spu(ksiO+3RTF?Sx!b)iStgR^|14&o#CliDhlT|6*bX*H_N_SN+lw~1^-0#Y3$#n zQbM12qD2^|9U*g~IXm;zsO@4fY$}tAZSBIGM^d8qhv9HJ8i-+*0GG~7{qiP~aSfhIS z<+H7;C_>onz$zVsBOlT85Vaqr>eFKF4uD?GWUm4TXpLl!mwIoP_3&h&R(c6xG$6mCzvcN}C+YlJZ z^8t4@^g4n=h7}5sY@ub$QPJNOVlpV7s|MF)?+YzSYY@k-t ziJF2!$%>hV78z6c{C^ZmocVO($(t(g)VDkc!)|0Tdy0^bmGZ|bW+<)FhsQ4O`Hkk* zB8LZAlz%ZYiTwYhnS?utf}^`|lV)5YXlW|OEx^z~D30!K#&W6RL-$t}Ny`N5zE`LU z;$Iy93sT}Xo_JoT4RuPP_gM{Do7KRN1F6EY()L%}8^<07!8DxmgJ!S+Jv_HrZaCTT zfAgb}tWm>c(Gc6W%T;+rp3OzX@cLlA{(|`9ewSTbZ3#7^pt?5?+Du@#2^Rg?9-gZy}ph=6bN~6 zt*@H*6ba*27`F0b`S7~-eUe|dT(b`CXF*h;*-vFG|4jRG*J_o~o&O8wBx@WE^E2?@ zlJhy&H}_|r29dBh=R)@EQ@(m3liJPcY7_jYOQy_L{uX3EzPab=31D*GGQD(hCH)HY z^aj3)uMInSo4eugG`B)K72I;4s(l!@7G<2ZKTRq!7%{KMruTt?4EJ(~;8NiiljfA) z!cUbkTby+eygCzAw z<%(i?0JBOU+j6>Q@R9y&H@P+?0?!JpFgenrU7)8gi1y&GY_uN7JN9%e!u&n-P{F%# zaR32~du~9tDNB2SQZj0_Xf-9HJ^quQ+q={V6JmWd9xfQ)>*YYcP^=zfAsQ%nZeWip zasFs2{~I3|c(k_8$aOj}P~bp8Ys~{eJCY&hJSxLnn4l}Ip8WNjKYt1Q`ZRrH8DSBx z%^#6eIp}>@?$$u=UvXpnr+KCF5Jq_r$HoLf23_ErOvlMNGS-FyXf{iF@1*(ZkdK9G zJug3gCwKeVv-UI@5ockmI<+jKO-jEDGvsv#J+n99)Etv|+5O6g7+EQhZ&ub84+FL9 zr8&2kha0X~YjK&W#b@sF_p9DZv0m`}Pi?%_D6BDjVjU#*b$r6%GjI}!6dRmJKZ4Dn z0dG87K$*c^$e3mof(C$%Z2-VoFbf*KQrJb6R_+`B5Rtyf)<8m{^ci3HbR8$?vvNUd z&A#DX6jg9C`__pVM?H>!0X{;Zum1Tps~Af_efy5j<{!2t6qqJLb2hvJmW*5NHx@Fh zOZ@q2um_M>arH?5K~>Tg1SvGERf&e7kIW7huVIGYa-~?29L~m@s#()etV&-pRySQ+ zOUxaW^~SWtlz!2Pclf9BFaDGsB6MWHBt8TTkKJ0e48e##W}DEH{KxU{KYc!<8=BRd zQI**1pr8QA1tg0Xt>PNl0oflg!HIcbPD@YL>IexOnt>D;NC4r|Cl3?7&L3QV#Q%+` z4`pBCXM7#J#l9l%|Pz_k`?`%>$BX4%{Gk<%b#HD3fnlzGK;uq4i20-$62hWAnm|GfUz z&yDzscl7Yw(Fe;Tu+VA?q9eY@*8do)scif1Goi1lD;wf8kpZ=aZsl`kC|Cyr04-Ty z#N1jh6rg9t`}jXZ*w+WF|9G!Cax9v^y_+&s(2)AA8hSA)e7R z7*G8WhXB3uli7Z`6VItCwf&}ViTC5enf?T~#%56eAd*_L$|B^bPOigLHSAVgC#T!~)gohS6+T4lpL9E&a z+sUkr!b6=#B#K18D!_9dsTVCuJ)n47CL4b8TC#l) z2Pom?uzzDOr>XvFegfHEt9)Gy2h7CDLHeyXGA@!c>tjU=mC~=9ysDo63j0|mp~hY4 zw`yMaDT2>xjBjO2LP`D6nMbguf$#x;(V?a$Ql)K8WxkL$4_6>OqojC z;;bq<=bnN_?}OI4e&Nd2Z2@QUYrF`}&@FA=_{=2a-OOSLCs#l@uin9xx$Pp6AYgfn zd-KxIgrsB4HcxuRDfrN!t}i#6QjBEkMF#bCK`ni+He5tK?O#^k5c1*ZnKL>yr!T7A zZmL7|IAe{0x=N++wM1~_0COX^Aa<#r?D^j*u4qp@VL<2Db9$Qdj%8Tl6Udc%0NA3j zo%!t?(wVt2;RtAVEGv#DE7FiTWjuLtQ#(v316ZCX)gd(wJq2e917@GcJye4Oq7H_Q zYr`D`XTF;ErScx;*{{drI1S~qrrYKU52zmEuJY1zINyxr$5g-mb(U7Iw=p%msq+ZC z=VK*mdrro^mZsphjtZm7R&)Z5ri;b`4cP7#l7CvwB+8kd^>~ti$FuzZ7OR05Q@L`dL|KG(CvsoJU?t#;Ewe%=#GA^(>qzPNRn1&*N^E#j(9 z)jqz_!kCQ?yLhkjKZxeQ{Y^~Kj`$RG+i}bn75P*ju+=F_NyMYugT_fgU;XG!d&d=1 zso(m{`*-!#IEhZMvDajC!{_%`k5eQ!6D>^|4dWUSI!#6KRM_X;$c62ImE1LuiLPZW zdr48H8xNX;U^nod>Rg0*Sr8Y#I^^o>@^w_VcnuhzIiH&Uc@j|qA=wvwho|p1RsNGq z;`HUL{%ID(Sp|Tr&)%tRs3)k=ulKHJ zK1zT2sLZ6qS=kfEq-7OK!ij_v&^av zT68_dF0l=ws{wyTA1>gsR@nvWLfUH>T}su*SUSK?nSvXdsHn{p;sk^#i70JGc;*pP zO!S3K4}`rwH#1fuk5ClTXHymUmb6=$KXsPYy^QYXmMs-+B-0G<0oXWNxX|PksqK{(GuIj zX&DHbK=;O%(k!?=43n+o13a7$=2gMfd2S21o%zh-H)+*Rn#Uvhu=c(D#O(1Vpx4Da zj=fG{1j&W_%Hf@HcVAn^c$QpDu}t!gry*6fo-F2?AHR49*Tj@fwLp~}KVg<}bUKOp z42KDm^_ph>Xi!-Y4H{3JVbIn%Rf+K$O{gIjF14V%$}e)`SdZQ)RpC13<5Ra01>smH zDobjshR0bRD!->L4eS_0!j7+9FHK1zr%~n?msZ|_(N3czg2LIT6vk`0__RR-Ix{HR zH>_~)H1{6{PJ$*zclhp$F`f`I-6 zF4*@swBa2NqNx)0sG8no(D`pN6B`c46aOC$P%@lF0SV1gw0A^_Q}ewb0?;%7`@$hA z`Q5+$_zZaJ}*eB{%OCon$wkK7Aaa^g zG0J)SCN#x>{Sei7pO*yHF3D6GQL86F4Bq!|W8GGx&Uv6a5!ydCdc`b~Q7pG#-GdJ z?H_SxWh`Gap9*nRT9UeELrc8s|IW$-EhPx}!D4&zqY>>-XM6#zU*uPJ6m&xUhey)a zjrMyad~x5kfpmi@wJg;(7bjkpE6UgjS+8}&1*Ir1P9n-oc;}4SP=PeJPLE@%^f;nq zVn%5Aw02hCOgb-^u0|dC%&8Eu}uX2-& zL-%Z4N&^SOJPvRc34Sv!67k#Ty*)cu8qvV+_tPX-ev`gE>iP6D%$&@oa$qk*bR;S6 z+`F_Q?WviK$x~-Rmjj?2-GQ^7UU!-r1gutno~>5FH@Z$j(!QF7eX#}lWQ*x-6;9WRp-2VMC;+57ui-nPWB zsz(DC=GCM(_5@Oa&o8Wr!aR5euODzKDft6ZIKXsLU1Z#lc8c9!Ji%!=x*K?Yy-K@S zExK{2_n!?{N0DP6qs1eeqwxt@`%vtWc>k@h{1=EkVCgpFF2Hol7ANz zAFbyRKm!alewmbgbeC{x_?nqlRdW>LQm!sw%207BMWY&F7pD5V@uB0vaEt^2j)JM4 z4pYHVFuR={9G6%I?l0y11_RWOhWMOalC9(GI4AM2M3Yzd=`---ezbqsAB&Nn{8JfK zhWjkBl(%~41iz57_Qy){-iAk2CjCF|HW|-SydI>NKK^~T^;+Q7t6(W>{eVDS7FPH0 z?@Lp4;S+8aa!(y=cnaNU^Y}Ko-T5gdEdvyFol8DV3yiVI=MRz@J;NB5Oql`kr){K> ze44~?8JrjAW*3OyLej=m($q{m1A3ce*f~9fl}A$ag*`5* zSVT;lTzlYEdM7$87E)m5n1`z`;Oh?H8@yWAE^B3SXwl@?K+P;Rn$)@tbF!sD6Z8+- zj8YboUsm!bnb2PE?2g(Oh;*^_pOd_ zjx$Wj{iLE;k&v0MRjgj#KwXNSQjK+h7v>6LO)s6oZ_b-Ktdok@7Bd3&t%IiAYsi!gz#(@OS0JhYRJuCee*j&qXWUNDyP{dmt>3&ju`xq z`r%tFa?XF(9>_s#AH3)m_0qF-)k*g3K@p*QDho}*Vo8%NAqGqIcCbqv6N-!eK6H72 z{5teIu|TVY(lvqZj>)&#ND%lQ_@>$gYKp-a*YoQ!d0H|4x8&ZDULjZS@?Uw;JT?OUhc)&M9tOopTU~S zghm?m9i#;>%Yo-wdTfkC5CDu|T_<%gjx3d9Z4&gTQ(fZ)=r?0=&vLvgsM4t+DgFXj z_UgRzCH=e*i%p7O%YsJ+Bde(gWNvfn&&6YL&VUo{QxLLjaf&RIH#{HjKope`fv0pW z25qy#N5e%SoM^B|XJm(WP#ZroZM65a}z1@*1_?7Z(Pul!TT^1tn1; zcAfogzM5`1gw4EDU=g+5_6bKVrERmA7dza$0*N^%R-2Z8?C=JqTwYSax&Eh-WntNNm7DQn&UJ*S`2Y1hI7 zXLZN4A{qy!(hB+mVu12X3IN@#JBwf#P)r(&^h8Cqe*Cwr$fr9h?~h}CUZ8g5a+Ye0JQ}-EmYMqwiJnn<5=1dR&KHBK5b#}BS%btPcFeh*HYR{ zPwtt2*jDv!%Rw&?Yp7=YwLA@MG{#84=tOaF&Gj51zO%e*^tE3z)8$aL?c7!grFOw$oE@pe*DZrig?o!M|m(&JQ>btEq?2iweoRxg@{K!eNU$ zeHRh=FD6#P&pKOA`l}iN}?AZm;B<|uIi3C0RqsSMRXC( z!`fX|04-nhb%Dp$(k$|XZDx57^zdn&vcMH=_E;YpZoUr*J)qx z`}@Ik^j8e$ikx3+qfh)QM%u13V@_K5Xj+j^9C_Y%%O%WT-Q;haDJ&(IlrWpwS)9Fa z4s%Rb@e9KW}pO2O`n1o=*Oc;H`9Pm zI9%omhwc%1=3O-R%;}pIef-;qjgR8TO#=c+Iz4Gih|#HdYJ49W5Ipn0N8P=2_q6-h z8|zWg&|zt*&5MlH2l~;u-+|IHc3^<`M@%-0oTAMy7dNNIhv%=3@e@X`Q%^{vMj`4f z1`{&8NG6A{!-+YQ;LP36Fv7L4oJIe~=vZ6Jrx2_pE?w|vxqn9VWfH4_$RWE^RKC-k zd#Ot~4JcY(o$M;P4{isJV_Hzg#Aey&Y7tdPV935zQ`HmpCVr3FS7ai4X4Y%Kq7eTa z7`SF-G!axLl&FaOsXs*f@MK~2Nx^=W2n;}zass?3z^hG3P4$yewHJF!2Xt2BvM_?9 zduMmI9eMIKnuHhX-0h2Gf`%w#we`-<6>)nB6W;sLpFb}x>|vj!$45>wsS?DDXn++U z_12NW$)$2F)1`^xnWEXJs5^eKv-hI7G9g9KEc$bk9`^vEQ6(iW3W%&;&Riy|Qk9XB zdwlD+E9Hc#1e7>t{5YskTCD3P#M+x^@JU8sM{n1`(y-}H0D$(v?v>;rI zsEBkZ^wxg!V*TE`(K+Lb!2U?m_1YkMbm9fTR`TZf<%0~w{nzzm-n&6q@Ha#2WB?2W z4}u`L;gV$&bCkFNk#J>5Y&c}Giz8%oPq}Z==~ooSfdrK;($A;Gqfk-shbhCN5jLu$ zA@x^AuVv!23%U{y%zm&42&ep6=x*w=tgrDAs&X?j<>NHN{!e~PvqPCLbHR%Q8HGfl z3=?QpSNVIi@*qRetO9M`t?#=^hSk1NnsrN)Ld1`RV%poR&w?QO=+7k8r!w?m@Y{n3 zdFIFSRo-zvosko(rA;=zhM%)uZby)k8eRQzs&NkffY+n=w4z@YJ|KIDZ4r zLa%n$%T~TKtI5Zftl~lt3gBM@Z+a?@XwvwopiA&|#i}p(B##)qaBJo*`ZU7kW^Oyj ztZ8GMkH7>1-hZwWb!&4U%%AklS@xB+4#rHOB>3fYk-(Xyko&e7-*(o;L7wPpRHm{m zDbp^SQw}guEYyRTL;91jjtUsd=sDFoV7M4a>R#r3pSb9s2G4@S#q67#cty@BLs`G~ zIF(D4$Ho}s+La3T*iQ|VXGrqcF8PZRdWm-iI$4-!i#xBy=SO_?4c?Hw^*NqDjO==_ zlJUF3G`h9hF#bY+c5g00P{?D&+GvO4kN5pLtLK+X$SE~8s~kFycR+8lKxQ^5wMiUj z$NAo^cI41RF%XvLvpjt!o%E3a*JOoT#iB2w_R42trxDK%CU{Xs$f)o=mh`+~sS3(qr>ys7Y{>#(F6{LQ2-*;hQJ?D=~v6AxH4Khq&Q`}&3q|crb7}Ctp z=j96F@Z~E|3!b5v(__n9HZ$@TawA5pW3y1p{N+r1Dc?6*5+fZi9<#2uFcD6^P-vTm zMz2v^1DTPXyDg4ojF}?G`Pf$(Z3y7&?H$f#g|o~Y4*Li2g)YRLt>56`de^K8w7gj2 zJja*QmpjPJ4Wl?eC%hQg8`>~sW?&J;iFYrP#Ee2s-!0*#8r#41r{7H{e>ktbPa8%& z8M|iTPD7GFey+Cc^RucmZ|i^BE-qzw=#ZyZ`=g=qlmLwckrbQ`oMK|Q*xSP>7og;I zN;)y(-P=sabz;pPJevP$iQBCTbfy?`$u*V$ZhJ0vnv-%nby3v?aHh)UXXJQ@*H>W@ z%g4Hxq*>&+)9r9ZJ?l}swCu?wff*6uiwxkI-bKA+ZZ)A`us;=A!D^TgHh zcTY!s1AN8~zP1UHaIRLJE=Ej#tHH;;a2tcrH?{inu2Fukh=7hQKl;hy>0gJN$LfAr zKLURo-35Pke|82V&jNi*Zr!Jy?Y0Z; zmvs-16nZ80_kLMUZ}I$DdC`U~vdKybRCAY1U;1j`@?8JFGkyYGP5bJ`;kxfk!o_b| zPf9z&{hCK(8ME~be*c}FIFipB-32!M3SBW!59K>`=XL$>ahcnBF6WM0Yt|=o5DX+2 z>MT0;6uiyoj__LCNFmf62xG{2gv0)(om*4gBu;FLGiv%d3!1j4(}e41vEiluxU4JL z{P%41&%$VYWtPlux~DeRq^npzkE=$B~j>E!)?Yr`Ezro^~eb!qI{% zd#(db&a45t9$U2P38(gkUvxP6C%MQ?p3g&mbj67Wh>R;VGaYG`@K$VC_Xc7Lb>C}y zSJs*{>T^j}K%~5-mOHB73=XA7nns`Yr>LubZ#Y(}6+tJ(O*@gBwx2#$NN-zlWRkxN`E<}Vppph1${uP44z^Q{eRMo48Or*q4TXX_u1P}f{}$q^~u zM(nxppWiEcxwq?)RH4|I^k@A~+VTVDul@uHCfybJE#eo2J7|9>2g;%x0_Hg*T8>@TMjkt}L<$nxJGm@pD`|k7&v*DV`qoGD_s!eouc8se zAPJj+O48xR1M5wU3&9znAF&@)<)a;a7wN`SLO-nswl-u>=b2fpPyKRBNyl@__I0EkjRzD{Z`&GGm4mCJN1Mu3<_&| zGpY{y2|TpmGSixHv{x`+FUO{Gi-G&t@ZV=xCZ<(rObQ<5IHJ@h?7HKpM@9+!-TAZT6GD*L-}ytydYlU>>QW3Dc+&~3@QAZ>KfT)LM5%=lH$fbCLEZYFT)B z^TkTapkkp!c-7*wEF3UKt5C%ff14xTy=*Z?>or-wAElU(nd7)6g9sBBj|?K`k0WBU1{@>w~8)( zam=acwaiJ;w4Q*{ZaF6S+-`!y6W7bsc`Sa}5p5wIn3c8Vv6(`gKydWpow=A}j@xs@ z6K|gt@y%bBOQnjv(7R>N0it&ommFyn0kXqiD|GE@KTcj0G@>3^iM>85O*v5m+<6@>jo=gg9ssOh0}1Hs|6-*h^~VvhaV^efk246n!se=# z-6|;tK(h`O2Dn%x>vY^oEjdZm8h^s`r45Q(1R(3B( z+55Ay-jrGUeGW>PgSm_!)wQOK;#;vhGME>7iZ}2|>e@x4^x=7`+HP9892@W2t?|z8 zWwn?OYN03ATef|Ciz?;Dr7Wkx{1Gm6BKQ)!Ohl~y#;kOZ)O&b?cq2-Z17@9ImN zy^=U4`hd%1kKSITCJw@?0i$C?x=@do_ttWyVmdw`2y)SCc8NJmD-9x5Ft_3D z@iIJCwRmQBFgeJvRhtd`&RuY-;v$@Ci29lF@5of6k=>v(M z59ZegNZ1(}xU3$Gm&GO1K7ubW#u|U)IsERY^_9{9AQY3Z`rOeDaR3l-BZ)p0nv;47 zbF>P;!~p?m#zx117$KEj%+IyZeY*6nEpGK01u`T`VG88~kKtY0khwZDobPvmi3s!% z%hgW2QQV~q4>`mqTLGT!Ch4p2ihVvir~_C}WJ4BYk$UNl)fS_3o>%sYS?-0JUnyeU zb!U-VUeApeENjV$r)<+d?j>5#*^BxbD9X?wAmhWP94L)Mo1WnhLs zeCO6l1;-o0>qm6GFP110{GPmay9j=$?qp-4rSg4_??h^DWU)4PSP;KeriOlMTV#mE zkWXC?;kcNL006oHg_cxn5#z6deae*RoyrNj*)IK20vT3tCy(>MupXB8Mj4eSauub; zS3jq^@EU?@*QtqD3x^}(fz-Re%qqX#B{x?YQz3@UZ|*ygMA3M>?iZ|R5E*Ej2HT8>UHo+yvG_9Eia~rGR;|08%>4g(1*&`2^BmM<37k7X}(ETnioJn3^ zca(-)NC;~eIw6a3P$AX)gr^y`-4?S^qAP0uJgLV0;`~oWreYgKaZoIkkn^rtwfB#D z`E1vgyy-70?o0SAU+N4F+sXJBKBqIw%A2@UUopGzPCeYDwn;w;IUjA_M17E=i z;D$DFoz__svjdX=ZZrkRJNO^ElG`RqA<7j3{g&+5sY(oKsxK-wA`ZobYJKrMfkgFLhN#(p`3QJ zGuR#Js2*tGx(SgQOCPL_711e{J$C0stk5{g62*fVo7A0RWyaQ>lLlosKF>T{KFscb z#f0%ff4a7L1sy)y>v%XE=*T-$IEvuZ5Sj{!);aG0))%TX_-Mbvba3tA!~&whre4iprBEF4PiPJyMQ^L} z)W!zR{(E4jD|XTr!1I=`05!pB49Kmm6p@0-Mibdyjd%Kr=>GP ztUZ*h*6$g=IHp~XqFtjDZtFhdxvI+Vmn`QS>_#T}AX(P#RiCES7@dTOkHeY`ms+mK zO=%ZXg7i`FSteKqi>?N`C0mA?F|AE4QEFb&a)gH;mT?CZg zGxy6=QFR8{yCpK^cKJ=?sa9hvgAS%VNx7f)hUXmqA=hBiP^b@abWs~YC{o2~N?5Z= z)j=I75J@6A%Qo@SAz>F{Mb5mK=FPm;i5-{ur%rGG?JZ}hsq+-rX^`(&+2*M=(-r*U z{2JBQ^1O4_OMJQQSV4vR4|tknea?p{hh39;5ggge%3&HAAD#{}lJGA=TWcEB@Nzz( zwWX#{HG+#t{3@tMG7d$~J(qOMRf0SUp{eIGbP^M#CuHYH^#*)7MJQpV&KNou`G^iC zytE_g4~DaU7&#=?NWIzQOO)tl!3Q{t74@>H5w|SXh%n_5!T}2I%7bOyOjJx1CAVmg z-Uj7ZrxayB#SD5b9Cv3{hC~n%ea87^1y@&+YpdOrC+?$N>0sV0h(prnTfO-M&7|?6 zPA$XMo4P#dPUUiO?k7it%uZyu@aMAE>sZcZ^CP#u6|T5lm}%j}O3(H>X$bYCEK!`i zzaRqjU(9#@saEzPq8HR4FWjK3@WJB!TBc-X+Oo~_i6w6PFo0O)h12mvi=ketj|x;= z+k$zPA-|l2`8g;Z>q={$B&zPrm-InUw!Lez3P;Hhbfd~iopoV zFJy5~Ce&D%l-&q#KEJ2tEqE*k#nH7^$0!!L<)d=NHV2vJ9bXo{C}QBKT)#^Ec6MQP z9DN;t*aXeO#BQ|Q?Uct)8P!^(d>)^i+($hE934DmUMEQ|_C8sPO-!w1z2l#( zT6$I%9Q5(qW%qE`hhDLSWvwsih7VTTIqxrLO03qJZiMu9h1ZUhA@}=nF&G^;t6(p! z^UC1+#i#e|0}$sl?}FP7tg$Jx74!k88n2)Av0k3ef!^qa1xPAd5`{~B^H8g=W)wAC zz9|J?LX`o>r!yWmC^-)TzaK0{n$gZs(GSK|96-0i!y(^g3*KUPxkRO~#} zZP$G+iP6$jJQZqY_jfp{cXD;J4wVBO4^w5N=+<-U#3pW5_=w6~Tb8-!ZEvt2JNDj4 zrEy32+PZNetAAjp-YvK;O1Wi6r4M(TEo&5$ar^=-T zGgbXO{4c8R+~l{g$+IsHMwH-Abi?!4LigAn5CxDCl~Ab%z9c?oAJrW*=5>S1D6_LJ zw5AcIA5LW&4jk??he78CKw%uJTckM9{8UAFVqYIg5HZkbVP`w-B)SXr3b9Sr%$%O~ zi02ANHP==vf$K<h&2#w zN{8tf7=YB3p#*kMbtsy$;+oRCgdV6w8PaR8+KbV$0iv>MdDgL%_Uv~t@KEiflTv&i z_EVyO@<;Du=tIdi9f=WHpsqo>FsC}RH|iI0bSxqPbdim(n*=BlgAG6<+W6sGhS=w#N`b=O?t_N3DU4BqFRn}3K(L*V4kEjX7mMLUhbT5ybaXpuUo?>@@p*7pbCKH$D z)S?r|XU#cvO7{Y?dOhE|g`kXDTTI-24k=0C$!1S>l_lk{)2*5wp{60@r!gNr3}xlH zPeqJwZ_TeB(2HR>EaRKtLmsyHJj7>&W!_j=n3Eci0DfA`V+9Q`Dtm-Gsy{s#ispOD$pV(Wo7nyBK-Kin0@Q>{GJ+~K>X zT^qK7BCHy-S1){Ujr_nZkd~L5iw8v0L;!a<^Nlr*dV{v-0MPIh(p%t7yi)_$VFu6E z+*%LKtkZNjh@gx8COz}Jd=$`}xgcLiC%|IAjJ3^MOV?Qx>)a9)i>uwh`b}+qDS0Su zy%b8vW!9nT+xGUvK}_vV1S=_#u)MPrc$E!8|NtN~f|{~}YFhk!oC%*m>LtuN%F zttv}5lc*Yxq!e=_ChWC5Y)zx#l+0rWnn365j|T=x1*6uP@+EP3aHs4lzFZ*&on3N( zHKg@d{yJkT1?g<8SXt(wJ-gX5oKOrxGuUYQqs~tD?Z2kHrTmjA!5l{GMFkzLe5tvR z+Pl;y2vO?SbD`nsb(RBFP6v`wquG$vvo_ zS$ItgdM=8I1Gh9!NCqIr&SMJPK0D}u2g5#kVw`f$6^m8dfxIngf_NKS`6soknE zFe-ymUJ1W%6An>}A;?${ecF3a;H=f_>Rm8KP0)m(0D*{r*ugar7$QNlFStJua(M4# zD9p~gAIT?=%^*#njFbQa3Ru{ypuxf1x1=E_IH1;TybfhqXWl( zW%@oJZcev~j@YwX!$U)w{)RHEK3gHnz{3f%+YUtgd7foun;cg@-OpoqUC{1t41T!6 zz7f5^$581PZK6K6>nc9tP{P(YDWZ$JIB-kkk17XIC;49wa5eee%F>?~UPb-xeRX-} zwNdh4-p|`m_1UvJ^5&7x2mw8l;P?*g?>~gx#P%R1K*7jp*D)?nKf1qDfLw#4C0Fq7 z+-mW6koorc=#xByufKzKj*6ZmZ7@N4E2!AVd*#=2kgBK)ew%?JK0_dL%P3yrTJ zdH{3_;}L^!#aAHVSfD!;4`WWV&zTi|JDS^Q##0q@_J1UuWmH>Tw}nq|FYZv>-HN-r z1$QS%p-7QJad-FP5~R3OoZ=p|K!F0q3q@KeaPxjQ86&@Pe(XImviDkZu4i5eK-kjz z5@3@>^>39N?9My_?#{f^?dv0;)sUyYBfXueCOf13+q~{r(tC-(wor`S=UF@L`w(5* z{f%i~o*XlafC<7)4YAt5R^gUWTrwRo4>^idkaQT2ipKm1x-+DmZD0S8f89?T0gu)! z@h4>|Q!Ku71g8En`74XBa`qSJ`*JHpO^rhH2xjTQnS8pFq>Dhf?3)sURWM7&sDC9Y z8~AWvdHlm0|M$bu^iUI#piVibhB(>uFzuIa4juY%UXuauf5NgwTUX-C#_HY(BsK># zr{o%R2zV7}Adi^klZS4&QO+YnIx9s-wGB>N3XVgLN;nOh@An*GCGjI$#q>jbC6`}e z0;ef(3%J{el*IjqCPmMTOr-SUF?>Lw-xj5W7A1TU@SV)pt^_jX6hI+6+1!cd_x5?z zzo#T8yEfxzaeE+15{CMl2@dCHkVR=S8fn?m#jXS^8pf0`Md?vR>ZtLc&$_qpyz`ik z`J$WUZ$AZI{eG#;XIKytofPajxe9CzvRDZgBVKdu^Kf z2K@vwgMnSf6YQ1hGR0B5+WzS*KGrIGF${X>bLUMF+2I+8VSYud| z0a9H0I3Wzcc7RILUoi?}ADzV~FpGDx!T;7!z|9nn>EE5RFpx(DX0 z(-LQdm0A>;f`o zp>{+xftt}SODkxE+S{dw%V4+jy(4GF#W|1t$tBifP+a8`Xb`2(N1e+q=;tBHllhma ze#tmFt8r%6aaFLT+CG%Xudk|QR8B{a0FDh z2)XF-AcuR7od>TwS*yJA8Daf{oSjbjj>aZg-^p7D-YKrFxXr^-K>RMKwoj-$fHXUs zCP5z-?Mlk8e}ECEQCAf)TxH%BtWHYiQTXFu7sYm-KuB%XL3Gc>J6;t-Ey9Bkle)8M zsNI=BMG7KML{0>Xi(MpQaRvhgD3xJ!+u@kpvs__KB$fb+gKC*^xV36I@?zg=F6yRs-T%17`ttTh^2;pyei}3 zC?DzF^rWX&tJ6Ha5a*@p9I+2=SEnJ-={D3M$FW>s&AeqOmgTDuO&+;JO>Ks`3_5~U z6W~8XliHo|UX?ekMser&dUm6toeTnN!MoB$c?FSN69p*fECVx|e;tvCjzZw8tdync zadNdIQCAFF5ncug3WW_vDX_X2hDCy_QDq2J(4nb`YaD2m^!~AVKqmG>3Gr$?RrxHd zN-N#z1jOcv;@J9gszNcuhR29`X!>b@Zw3)a^s~2eC=UQHJdv~G=Nj>X`v z@3TC1wgR&nF*U&mh6V?>$I`LwCAAP;(#%GW35TD0#n|G@ zjf<;9@il2YwfEiBHiI zm#3d*PSjok-_kX)J?Gl_^E3+LDih0`Ijq2G?wi*aAC_iB0-oz?Zfd*cQ!)zo1utCf zX^O!HK?PlYO=1r&K}6PLwX?lT8K?eD{yKr8IAtgeu(KxwxN6%4CR5{LA}T_VE?+@l zjbf-<8_3qLfAc8jf4wI_r|M9qWRmvfq8X+6NV$6g0tVMsl0O^!^E_i8Z<%Yx+*4KJ z1lvC@@y}#~mnmv<)}{4{i7@Mn1GH5(Wun^+j`)Uug=qj=Av5X)mHLJLM7R} zfq56S>f}0l*$KtvK+o1TXt!x-%*3U6*Vn8vuFr(Nb-7G^^7_c?aw2+CZiVR_Flh(W zF6UC5x(9*SB#Ug5Ul~hFt4t&hK3Cy`blLi_OHe45sZ57M?PVCb_%#p=RoH;XsWHzU zfw^vM--SiV@O=0#ub5@i=Mgd96 z;yf-Dm!5C$hju8vihqL3E_%oI%FMT$Z1_AwBo4R zAU86rUW?!5Sh}-xSsf=~z?!IwPH3w2e;e&Jl|xu$AK}qnV~ zh>c=e!RMUXz$G4(%wyzmsiO(}w~N(KX)@q5=N*UlHF8-oeP^et7tUOJz?W+WBR}$j5c0{0P~xaadO1#^Vol*U$Pd zvpT(=7t6KSo=M`JFLTB$^^U}Xt-4cf2plh0#+*+l#?Z|ebs$IquHeBEfcB%E+D4PY2e~_ zX;5PHvUpRX20B*UcRBs4=hd0H{pW<$fazg0vk;WRT*ll{{DNBO;lKQpZJ0YxvGDIDDZamdgev~ z{G46CpnCh!ExVR>0?v2Xe>kf6CPQD^-VHt5<~{x6i?vPP!(=%3=Rdr|re6L95v)bZ zHF*OLTc(HEa;0|@Rt^mgBkjshAt@_Zc1L)n5t?CUd7$tB97_cHDAbj2@r<|of>@ee zN_EWhmZ+YCcoiMBxTdzf3K-#knF?raVtps25VJ85d;zNj9nb+ji8kMsJ4Pq{ej%Lv zAlasqps^C65Ey4>o)O1B8>z;87aijX* zeJUHREuv!q_ZF?bxF06CPj3|jxV~hm?mcsMcgDWZ!CTv#w0hvy>RGljh*!a*>pSJV zlKJ!*mJ#>JQ;sVOLr2eJ%=psZhx+-I#{$Yn5~}BLu*Kip{+q*iCoD-oeOEh}4l-8p zvhj*XPt+NqZ{{<1VV+Cv>!)YPbkKq487!#swk|<486vRd-dej_4aX8PxlysRe>p@r zMR*3t)v{)YNF;f$qL|tomyW*U_)+MvKO+D+#$&TAf#Em~O=jiz2DBOW^2E9{1w!3& zw;NFu@f1zr7G|;>LCa3GN`|E0o;U4>WZ1IJc$LAwX(|R;o&UspOfr&PQiNn10e%hv<@*?i%uDnV40AV2|GRj;V)3c zE+m2SiKen+w1zkPtdemY7$bpt3^f{N%Lp6kG&Lb6hD6yq zQRm4=bAKp5<7lF;TVn^Su(9#3EiFFDFL^avxXS6a$9o`1%ezlnnOw=!pqyt;Vv)pM zT!$cIHisjK`|l6XRO6PQ5KNWNo6+GnTScJOD7GQ674$jK=@^1V9z7KK;wp`q_-*Bz zD$zV^00@G;-VGt+)R*a>nd0uA$8A zOm#x?`A&Y`;{d^lh~rcZP~iwuwqNo|&sFn`Ti;~vX~Bf2I%z6R!C`m zy{HfBZNQM|-Vy|zyrb+ku>WpW@XmF4c~X5colXZ)hkt3uWcQPgdOd>($$AY!M)$ow ziOF8ZH`P~$o$aeS3)xnFU)1~YEA694-3Y_&$q;FTQaYwHr7JF*>%DH`CYZkb;_D9?ao9OEb>dI=GrSv$XDs|QH$hpW#o zsrue6^6Q548iK*d@975@w@9h#+?cy!MxGv2hyB()*LV;)kb;Uc1}TIO{Cl@H7kZ{j z{RwI~IC2Epv<-+EqsOo-aF@jHlr?HNG!LBzbu+Gt!>+4skl^6W>1PgB*ze^c!Bf(B z%i4U7**pj%4}{W2e4T?jPF4WYUCiMF*2I>%-(Sb%My6`@1?RSIVU=Z?CR8o-J#g0*unLw@mw^S zP0Ixl5acpqh}k;`h&KIP6nZ#0Sht{@y@aGdD~MVCOIoNUqRcP;x_cI_ znYUe{Z*KkW{fQ*TwR$%2nLbU17y&qnMFou`7%?7JrgEPpg{geSN!KstKU?7i<*gr+dc0q-`QcL`I0LFo$p`Qsc_Z^(!%q$Nx2Bc z1=l=&I;PXRAIk7Z^gChf?_v%f(jnw2W6m*_v|4ZrX=-wcg0cSl!b(kbeu4m_v{}t6 zHbZb1dFG&49KUJjRWR3t8|rDYyKY`iN--B0r`=9P&GBhH^eU8>7KG_&gf3lT7s*Oi zjig2vQ^6A6Ov6q;S?sqFi{;1kPPI)G5l>qCPQDM4CLN~i@DemgNUyfLz=QT~@JNK) zU(#_t1)JCyF4V|lBcP2}VB2Ypjos|^2XPr2YyW)NcM%=+EuwT$$tlpbs?mbZe0)$i zcEMyCfw9)ry8kYmEC1E1rlrMz4-b%`J1HF9jmtUU1mz@x!|v{og%oIz(5=V;5%}54 z`?$ur>KJj_Myx2mjvnoo#;{h88&y7}&{1>b%eC|Vx@Zne7XSD;QRM_$zoDk)f8N`6 zSBxzDUtmgfm@M-;>j&_r?O_Ye;?QWp`&Wcxos^UQG#h31YfelOQVCy0RjOgC71w;N zl3(p=)b7pU^mll3c*W_{<+byl0v&lREWMM>^LnSYh=%6u`JVef4j(@lci3*dh!`9w zTwgp;@|}L+zt((s>Gws1AEmqI(M>G9rzs*Q%Zm8K<0;|B)opZ2M0Ocv+v@ zp6|*QyB-`P*n)V$BGWG?uv$DP5rA-s)t(T8XovN!KczHRToBd>!n4B!N5p?e)yPswS9ciNk!y7bt);7(u2NqdqhtWAV%#P~3brCt0NooT}v~y8ZZlUCO z)H`|kf;&lw=PN@=i66bUra;wB{}*g%S)S-+#>R4FZK2%I>O|RV(DVKQ1|GAxwd`l%uo^=)= z8xs%|o*B|Q;)1H#DV3_bMpZK)ox)yw zHp)XLl^%+&k-a_;RV-g&K&VijUn&m*3Sf%+=+^+lWWp?K3C1 zUeP5HcBZ!0hnL$CA~R3D<2A^Pj{Dvyd1U9>;+0X)nszrH#c0)%z$Mx+IU8%Wj-xd6 zr?frXI`7nIaxW`)l+PDUX8L=GKRJ3I*?_bPI}g5}y*j2e#~6Nw35Z1zb-Y)4d}*8% z;e!HAY&w7>tRj!=d*!cAnuANn!i zRP$)kDP>Yss;k-mEWKAxq9eK_wnL-E>^pr8<>%H;WwRX^w~)nKtUptwSXjo9e}mB* zIV|uwZc7pznt>DfIqDw+=XKixkpV!Il=`E#|HI}vJW{f!paemKMnC1dvN$@wNoz?c zKEi;y%Yj*AF}ruj#XM>rKNXf@i%ghlI6SEHnf1U(!;W5ANZ@ZmTAh3grttg^#rY2J zZoEwDluGfwdF|p-o)YtM zKrR95US?0?hP>`1cAkKyfri$Fw(X5PP9&ovJN>J)e2irn-J6|<>YL7I78u>u>k#}{ zwT8{ZVzYQ&Ltzz03i=|@nV2xD9X2*`64xLSmgi6_(Ig5Gvf2RvsBqIIsrC)9qKrLA znfu?w23_i6$SiGt2%?5mpU)F(|6$R=s02xi%k8|{-8l6^tcW2PJse-fLF#Db*j3`H zuFO-;_PyKjf~bqKvPupE3u5MJ(TQ^fyQPIxx}Mg{%Rm1!=Z?-5Q)0opQs`R6JXMJu z3J(E@4XX@gbPZZIZed0ho}nZdfi8%Ei-A{`SFC?!{QUsU2rI_6&EB6E2S~v(QI}~{ zr=4=+9w)v&X!wBtO!UQRKf-I!j5?*Z8oX*VBIvVSf3<&XS zjNYH5;#|(j*50=~078CDGdD3W?qcifxG)wVk>fuP);d9Ju5)kg$v;m62}Q0x9rK3Q zdl-FtgjD=12hFYfGQ6|h|F~h)RIdJg?Smlr13UJ^T~)o8(8pH;)dS{$+i4O0d-0<7 zH|fnme>*8xHox6(PyG4yeeX5NpFhiR?7jGoEtbEYpW#-Q>2lU0am@g$AvT5RgGge% z+}E{s;{)EbcU3A9jNe*b!NE@l=2+Imk=d7HuN|Y=rlXB%7F-wnjKo-q#T50(?lYUdZnczq>cY)6c{w6Ly{Gw809bMkL5DOXuvfbdbfk^k zZ_-36A&&M{S7iHvm!1~tmX!xfJ9x0Gg1DR8=AV+ny>4GEc@gr zU;iKdXd`H((o4SZkRz*BRTwNQ7*9BmAt&W5diWjJD;loE1iY(u&hU@#*0nt*j;$VH z9)mg6yw&xIEK6Np4hjyWbiAGX=k1(7*}(9jfSXWtoL@~CBQ^Z48a7_Mrjttx3doo) z%W4s#b#7)EHZ!~Br+{6omA4pF<9YY|O)iDHc}_O1mb^JdH$+{jF1bRtH)BQQr~~zW z$8EDfRemJ~Lr^Apd5Oi@BvPCu7kpB4r@8qp+PZL+#cFC$bW<>^poSIE=NYIwrP%cY z0lRLe^2t6DS3CxQ<0goClxS%}Mm_j|5Coc}N;^RH7LYV^XUEwKOZixgV)s|vTz5VK zBVr>}sU45TqZFQ|c}3Gy7c*a6iOa*0ZX`OmLBN6O8@4cZD^Rmc96MtEnytys9h*5r zY%wRzr0PCJ2K$#>q8${+cOU|RMb__+tWb0$Uq~D79_fcdH9dO1`b|#*%OioI@rGrd zXqa(I_lmw+b0JVvFwO=_L7Zwv$&0L2$cVpcI;J9`FxejTnpUpS&+ahtVJ(2sHbuW!$5Y+FC}TNr;U z%>!6ts4zWPQpgcw8mp_vmBVO}$A)Bl8F?a9^7!D?=rN)_eS~rb8yhqgWnT1o{n7Mu zHpTWy$xCKObT2XxAPp^$CQ-lwNPqe?dEjHC^A7#9_I!Dfk$_5PvRnSDwX9@>dK-pf z-)$`;MzkiXR+zgDYxob>apV&N4w37jr0u{wr8NM5na#+fV!;<$WHS0pl!}bav>Z}t zQ1XJ+weTHVkm(g4c7&B(hD4lxE*QotTS@q~$yc-v=QgU0p?P((ZZC`-KAhvy9S&>aT$fBE-m+EtE5y?WjPpwV=7ouv6(hu=a|%#(ezyA`29az&o%Ee!S1#j|l% zoD}xFZH!~Z|GZodx*b>loV|Qn9_9K*b%)XbnIB5j(dXzn``WK@u!ZH_ZHEgNnLgw;BTH+F;eA`#L0-vY=x}j?f7x zpxL3La8$fW6_emm57cXh75ljc{uQuKU#VpOWb|Opoh{|U!-?8fg4Fk=-lFH@$6)i; zrHiUbo2Upft3>#~3bQAY5Um>`2%yGgJ<=s&Qm0V9T{Y$=e}Zjikf&x{q#(&*&_*yB z$$}+4wRDyJ*+nxVCv&Ks^X870i1P*6HdKTTZfTV-6@x6^Spk482ZsUz1>OV>AkP4V zzQ0rB{5yU!_%kO$8WTY!p!L@{QCI){#|~6_A&33v=k-vp6er{mTI{cqy)TyJHvE9; zr_FYd2MQ{w2LPXRgT?ofyERn3BbV6t$l;}us_HtuO7Y?Be6&5Qv@fa1!&7roi|^@~ z?X$L@X<#(`&=J_m6iwt@Z&{0XN%GqH$KnPj_foTG$BL3rP0=q;^(kuVuqS!ROF=9} zyHYLTolfyB0_R+dG>Lfrrc(!fOkPJq&wX!Ki$td52G7dC9uIgR zf&bXOept+#Ep2scsLBwIMAL!p3peu<4laj-REO7WE%?i@DhDmcIyTa-F_;lkUjGgN zUkK7_hbeaIL7-|?FRGP(a2xV6=gdFLGFZga9_>LoUys1$Z_=keSqEW`KBr_41dRXU z$866OOMiW-a&PzLQ#X0@>Y?dvdbxyydGf8R1^2$S&w-mkU!T;)ZgAmtfWm0MMumk` zfS;3rp32D}AoyPcHzc2_cgW)f@kZZWb$;TedvnPFwW0l?&2C*@!o#%51;GdJV_ohC zpS&-S>j$Ghh$5sSfWYonl;_kPncEp+E0zzVOpOM%i>k^H*!Xhv^Xv_;L2%vu(N+r> z8R$$}sLr0GRpRB~o z$w{FX@2Ln4#_CqD{^_bhpHJNyM7_>G@KI#Nh^&yW6MA@i`k&`(XSlM5rDyKq;?HTk zugcGs2~5r0Lu0mvsM6W{4bs{#Fh%IOzTE zfa_KoDNHMo_9!%ybxBuo(!y-|qM9E}I(K*WaC_rE+eryX!;^B(`Jaz3R^Hvix?(8R zUqjx{C10O3)jM1sJ^cLC_ow~t-Q{Pmh7QzdvrW9PA0FckwBcnM>GvXa!EKjr53fZ4 z`7OfZ55GD8M!P@V@`XzXU{*=Y(w%!Z_-y*r6uo(f|2-pWeB)C2c|V}m49wK?PbaiC2-XaEV|(&}UBf&WCCLWMS>kWuV3wKwWtn2!Qp=rzQX zADYragA}7`!5=xDL5mQ=(g;FX9-BxB<53^2sil3F(8LXH`{~G>chn-sqwPy)Q=J|B z9Z>_o))rU`aSqBu8p70|UrHQ^cTE791h>#U#9l}uxUzEh46&zH4>>kVea!Fh{t8f_ zZUl+f3X{(lc(zcIAGA8y5~vG%P@!W$OJZUsy>!8e`YSYyd`^N^fE59N{0G=JP13_I z4Y_*-8Qb%cnl)mD19^$0b~z?x!=xz|XNz+6OKlD6;#?Gp^S8=2C7AqXj8wzZ?;gK- z=}8@Yi}=x3@kVj@_CBG~Ckj^gb<4NsI)Ju?hHXE@ht|kRNmez2TsljSz>7A}Duq6V zW)MVRO}Ug*Uc>@0uOZ5)_wt#Kxa{S&o9m6O%TqZ}Ai9x)r`0P6_%%i4*_7pk(6dWKby6HcY=hMiqn;^6&Xki~$2R1at%hpZYj!F2I)yszJ^Vex(9f zR#QnXp+qpAPgANKP{z}M>FUrL#~)L?7^AWd3ksF=_xLS^YOTRu=&8# zjGwr&4-{W!sMi^h#){_=WvqL-6w`PR@$eMa_%um(v23)sTEnvtTa3o!e5q|^Az>FQ z0eO!6Y%4JFkII2E&2#@q53nH1-&L&AtkaHpDDb5?m-zfa9+7A~#IlUWft)u|O7ZJO z0r9v8M+a(RS?xiLuErbpH;anRZa|3)o|Ts}=)RYi``aE!7O*mHimBJ;3kd~6YqK{9 zapC{McYvfw+qj{r91nUDZJxKL%0CVlWg*vU-Y)Bjh4E>1m^K)@t;XTZ#hJ7TD<5Yf zu>yKYsWEYM?34bhT$OrN>TUeCOMF1@N0a17mB-~z;KwY_8?m%XMZxommKvXIuphU$ zP?>fUs9ScllF0)@4AfXMBtz(Ot(a33QcSa2!Zfez(muMUQ*fXkhM`Nt6vCIJy36=; z2mmy@OBL+*GfkG(;VI|}Ehm8swVpx(a5T*GwwmGGV0Yu{Om+$fR+fMdWR8!s;rHZO zFL%magZU~Z&e{y@saxvbfn)PZ%PY4;6hka`TQ}er9TpmmX(M8BBS`cX2v!|+rMR{# z4TUSyfReZuijY&zshqHm13mq0W-Syd=s%Ax_)Y`a@?LSGVyo*T!+Gikb|qy*EWhS~ z!RwTb`E+vsLe<-+kOqrf@?sN2I$j;^csz@|pR71T%9(`HvRvM-J&Guiwss7pHsmBo zNW2QATtBBb;$;(@w8}z$;;XCBIa!6FOvWXmGBZ&V7LYb}S2mvu(NmQ5LXpeA_E~bt z>!<#FD7vls&ExAL^{0e>*tuDsp7DNDRgg-rvGJx8y{Yr*JI?L}U))l6?JMU7Q+iq2 zBZRMS=#RFjr+J>qu@`n5Z}ZD;SJPbBBH2W?I^mO+LdI>sgoKc>u>~Y8_~ zk_2A@XL9pb1MDcZY%*Z*SWdL2M*cun74k_ixb4is@~k4*X$q>4JDmy7!f{v;WiF`luYI>@ zrO`EC3BlyP zFmzDDEXQ)4=TrNsvV1{m*VWkJNc=JP7sDbd9Qd(in>n*=Uh1VW%sW z&&ZVx$J#tSmnEb+uKFM!Qpfb++?|5wzZ;bLremONZq16M#3vnC_M71BGfrX-do~~c zjeU;yA5V9*R($fwPrFQ8dqsX=bHdeP+qNC2z_2^7y4VRWy>f)Qr!jc3p>0!MiV}I6 zV$P9X^2s+wQaoZ!Ngm*W&t^3QS7$q6?wlaXL$%NgKKhlMH4loP!aU6oM%Q$d)bw0z zZ|%hE+X`d?wRV=D8>LY2tF$>L8O%iv*39o+i;LWAn4)?XlC}o7!_k zH5G++~<-(SAnwSDEQnClmPO|3P$<)&a@ z!SQfK&e^scJy~W3$9qB2Zk+T2Ao`mQI+I)#M3!){Hi*2dEfgyN^p*zSrHoik&q{Xq z)!uR6WZuuC)=2_5@Sn?=&)K4hvK9i)@J8-8Nf%R;vQx)L$1OgcYY{b!U&7mnvpFZi z!Qt}%uFDWDMykyR?fSw7J%1(QvMB_2MFV;|uYU90eS`60l7$rwtcODyyJZ_;xopW{ z?n@&{;I~gE?;q92Ac?>g2QSf{>*R^9p>=YM)6$40lp^F#*O+HMM!>t96hIlcsiS$a zaefeeSVO64W+PI0-}CmlN51Wtn`*)7XX{;0mkH0Ut28I^j}{~S2@nGRdJ5L4Js;nB z78Sl{CbjP#!<&ci?_$SKQ1KY%ad4ttR1u(@a7_+wosm@_dd@#JRovNulYOZPa@E%wER&8!JMH^ye?S-ks+}O>$EMNsyZU zs5oEU?z^hNw9E)25=XYK8cbNiB!lyGL(E|8#?~{3Pm?zm0B1WOuwgVRNy`JRyj<2> zr#I>5KFh=j<;9GAuVJ8$(|86G;U*^BHUok*=Hqhq8WaAx82v&SL=jCQ8tyB?Zul&7 zX&O5lV=SR4<0Pa+wgO{WG5g`tgZVm~4G1})C{CdokVzu%QXTL%Dm5pP)!s*n+fr>| z1WrTu`j&Pwtw^SV~%zC^8MS+OK;X8#jC@k$<9f9(Tq((Y-OR*%*8K) zhay1*vJtgBM8m=fJOJ*`S|>7=fKHcA5HysblE|wi(Pt2- z;y6Emrkkm|Uye;6yh-v4D`y0qz7!2(L7@o;bi*8=ID^SugPE*g7iH^E&a7ZOS@(wo zA^cDtfK7oy>fp%$zmdEUyvd3%}Q@f1!7`+M~dc!Q-mm2TRbz~+iBfS z|4M421w0t-?R*+rpLGj_jQ9$usBIo#>iI zaQaB5V%Rn$`)!>$l#t<;QwDf7X_tSl8gUNCE3tuUwHVDF=Ib@1c?sk8g~gU@gvFxR z6s|3`c+Y;yOu$#FzCP?71oxdL|6F-XP{YKnD@DrFo8aH@@MMD)ql5!hoS|&g%XEDD z4!&T5Q;ZlkZ8NV_+VA2oR=Bz7!*n!kyBN+Yr0N4dD|)Z=z1_cd9zCV|EnpZeMMd%Y z@5?8??ca}X6;2V^+Z$0eVXrd`>Kj_pBUKo$*+xl zXYlsrBrhF3JTm%)R?15(7>em$=h-F!*hg~GE*omYga)N}dlhxWf> zhywD~E)P*FAKsg$cfD$CkJ4tw=Sb$u&6xRXwxBU+h6p3NGbG6zUB@XHjCF|%*j+6! zIXk)PfYt0^z;j^t-J+fxd)>%hK;$qwU<<*G7hE=Zu@dORyIFg^-P5_~MTt^n*%diF zdi|^U&ma4%Y(u!RjkTjko!8-=3?`8rK=Y|b>=$>JlAF(pzYWMUtm+qSm>HewI=S3R zvV}Zal71AU5_x`+vi{dE1iXQ};>->9vyN#GwpSR9B1E6|mKAeHPETP1u%eYEK-4Ey z^=;sE)$0BBpdD=JhI?vnYHDvU5)~E1r_%PF{v8%Rh7+GZ_&ehdnNuej=X&11=s;tc zZfOh?7z`$ga3yA?w`*xyurx?=7kv==YV!V6axG9t!uo(H)}V}mDM-?{rRuhJsHqkN7eSXLDl@7+-Icmmv zl+dO9&56Zk^rwo1{-ceXHPN)4Jul^*t}ir|hsIm=)RtTB#rx_n7ndt<-0$bi&z`p~ zs2v}7QmC6B!y3xge>@O#mWjA7q*3NMMFEoVoT+s^vn|QZ%xdSJJ2%`K>gDT7(WG!Y zW)sS9!$0U8g%h^Hk^Q@!X6?NGZvnWuPA_Oe(sXNL?;>ysC&r<=`^S>}SN3|7%Tc2R zjxqnv^1_Al+p@=Zrp|elEdg$AI-f}%o&thC_@1wki@~k)1Rg?>zsrBWlIGVpVrsOS zx_sYa3nBb$yjynGv2>#TQ`i@!5NhUZTI-zG?rdrJwu9WBv}Jb207n*1rOWuq(Q-t& zvD5I1$Bs6bmUI5!d3V%`!j(M4v#-D5ak}l+pYq9M0k-3~mDExXAJ$*$g6y$zn!FeP zov}Cw^M+H%ZO#2eGkrFfUP&*<6{uQeO7+*f=weGIMBih*C#aH-)U(j`JP#P0mx}P=y|aOe=JYs)H)p!1!UQCP)qtKThi|Gd}wH^{bJ?2fLz$A7mdoj8= zV0MrJnKpNvas9S4>8vbZ7p*>}MdCsXIq+7x`G6B9RLPa=n{YD4HA9zTFG)lp z91w>5Vl7YI9XT+dMfr^u0K#Hk)xFt+*YuH!(N|%vvT{%&2*GO{tKq+jt+qGRl!Fi? zBZCI$8kCTJ3!sP~@uhy(5hAvbK zQQT^qlnCNf#HZXLyMdg4hz)RngM`xK;&YM_9YOw>!n@HwT!-|EB7I#SIX3YyBG9Jv zg@{2jlV6U1V3lYPREv2<{4ohIZw=yp4P03;#yOFa$?(h9bcfHTlb-*l_HZfM!5t7+ z;3;*ra+HOTvHXq1g}}u!GF;mRr~&eU(W=GUPif25hc44^{*b3Xm%GCQSkSiK8qzzr zSeWf(Kb>11rLBJP^4}IH&C+PyUp7(}NOV}P^NZ+(kr{ESLU7kuP5K;4huCS^CqkH< z$YC+)lVl^Ze8m_P+*T2(DcV~!Fs0+0CU%%WJWJe(kcRf&4o>RF;vRjr`564q2L?VQ z_d}ZI(yv;}c-s+fUX8{5>U~t>G5HoHzQl;pP!Tq)-JaFvRi1;Hgv<55JUGjRyXabC z1B)ufl2yLRgR7HjC@+`_Y)gXt4{j7_lfm>y6cVt5hzLd10mT!{lor9;`_IcCyMH-- z%KI%oKXZ|*LPFdEH_$@`tJHlFhQBO-`tT0?(Wk%rca|pX5XGjgx2;4h4YB_HjoHU0 zC+@fLtM39@TC^Pmdp1&Ar{t*kl$Q-iNTa5UF`3bf)r`m6QKb#?@pw_}-a7@-fGdwf z!NhE|pWzl>d!JOTOsm~Q9m+L~bD>(<3FGl=p3;__nlvaz#t|x39yk0r+yc#=vQy0mAAXE)Sa}f~<1#Lk_+|z# zdd@6Vp$T%T5gYz|`GNiavt2Fry*9JIq@}4k z*+>NJw)VQ2!S{A-VP{s7es#-x2IlxW9`hWS3j|u4Cg6 z;1k~K1Q7H-Z!N)Z;sAP0Sr;Yg&BNWGO~n?@58ie?y0|cjSc@Y_4MT10V=d#5v3&wI zH@t}+R9Q9iht%yG{Nms3GoZ}=#LwwuC*bRr(;lgkle)E^# zl`HRM>9uK;ctB2O4^t-MKHscs-)ImF%pCScvE!A0L@p~l+2j>HCc%P-eQ<2H2#*Wy z>aCr9hAUyB9H6SOnz1PBipc;OCOBNw12Z{54Dv|6NQLKxVofrtS%ub_MZf_8^qni^x@~ibKkAs#z6JR zm)$nsZnHd}&0L?msY18W7q%X;ldMAOC4JG_l*}o=QYMS znOE`F=Bj&kYbKGHacj122Jci@bV63OdSs`7k_M@dNd-niL%q+x!F(sv%UW@O!I%}U z;@-eAjxK8--gdW^O&oSO!o)mpPER5)h968I0>n-Bb(#tt9kk|DneJMdwW^k|Ai+9> ztSZnyK-82N8>LVBZ+7dn8HoyM#AJ{OO9p+} zQqQ4vT6W;`#i4F2wA2ah)&VoRE7gjM%Y_9N;r_P|RHAFn&pjh7{Aoh}DBq)<8ybTX z^eD9$`oBT+(L{R6^4FPSl-_#LL}nDq(;?}^%*zrX7HiK;p2iWfNCUD=t|9opfnfF( z0-Qb2Uu=zc6JH+D%*hu&R+H^mrztDv`X&eXLadOCn$R$jJuze^f^FTVMVy5)z1*xu z6B$rZP=-9d2KbK-!q`={6}=+x8RZscYqt#)n>Q5>%xb;z%zJL=k5ik9>rEKN*X%(| zz9O_J!MYPgkS>=5hgVIt%GG2@>cvBH9Gf+Kk+@-Tc+dp$2n$jx#)+gj35b)Pm3<*(t5|2K4 zbXa;j)LwhUJ?HfRE3O?PIU)j_-oeAMAPm4`5jWrtFzWmYg{ps{`29@p)7R^rY^`M2 zJ}O@1?U`*Mswt{4&ooamkkU1kqBnzZ`94QKThy<`Rfne*CZcK6Q?;oO0{SK7L?&$R zP9JUseb^M=jYw1|-x})XJP_GxyfB=JD4ZUiEE`H_|l z$kydNzl~Ngl=9IWKkW-93O-0V8qAIY?Q3y(+gVT7ZAg2`1RUNAN9ij%%VW!qvKdri$U+dZrVxP#fxN#;buQ=W z8w$e+%0bc2ziihh+{={8{*R-x42$Cb+W0IixWLk#F5MlH{+8}$>1JtAq?B~&M!G>d zmhKXzC6!J=l#oV{P!N3f|Lp6T7jw;CbH3-C`~KXz^j8p))=ZxGa7*QKd+)ZQ$`wEU zgbHP;8)cR}13pSUTr9R5Y0`2W1F6E^%=+zW(I)QIaIP}r%yZj<$xTb~@j!u3E1d10 zSAwVx`Vy5oY}Py6agj|KAbIN0Ol5ifqGNRD-fHg2*nSoP!l>t@4<|x+Fw4QLg~e7b zSi8<-UHiV>X5wGl_7Q^o@tknG#-W1rH&v)VjoWfpL1!PO&~x6fMZj`})=BX#dYoq4 ziwN7c;md0RJg}E$bQ3)m0;-SEs{CE*%ubPOXcS4>cy0MXDpsh@<9@~GcYxpHT=D6m z?M=odlc8Kr>82l)0^dE<_lV6wm_Bz^vHU}o#rL#5>^39by#7^(cc~n#Q3I#!({&H% zj}4P)1@8hWqA#77Oj^p8{{6Q2;a7jdhQ{5-be)*_gVV6`w-D*3j~gdLH3l7@ z9nv!LifcPN{V19A9e^-+Xbg}#&`|O+ z=J(y<=27OrV9FolU%xb86>tCbvK8-euIcQ@n=uy+f9db&Exum(Yt&!$v^>JW z?7}w`Cj`cex`;1MCv83u4CQ{Sv?`OB0N3AL1QCV?cxYs-b zOTT{m_wO-ge*e|b$Rpo#$oURXLhr6@*|Xbdx8fYxF7eg06y_1><0|W(`3+k|-R*Vr7_QV>F^}!3IDb=O1VCOXy#+#qx@_o0e%5RLqE#Bec!$cyzQ$)JN`FSHvBfB z+QG6{X5GIjDaV8UH=N%fH@PhJ{M6ZN(=D0TUrHDAFXta3{c0QWfu8y`qA=+BfCIou*O&H|BaulhBhg!HN*NEr*)LT+BKg)F>gpMbUMFGPouW@YOSgj z!@-BpRTnUMV^hcUA?N3I)jcB^1iFwU{Kk&?K)S@Xt!+WMf#P#wp#NdIkY=x2K~1K0 zhL*I24DD8(vRC4K333`evhSVOUQL!j|8n(}@_XffzdrxeW~-|HeU(PUuOzAdKLhD) z9}X^^Q|GCin%(v(5l-+CTjHEovBUQKkz}Y;W!$bLKSqWHFv*EaBYJRy9Q0%I zL7=1ThanjAXZU)5o$}B3<+|eLxp=4jqg7rW!Hj8ZL)_SiUH6Rg{O6k4+G!|4RWRX}8S_?$4F$uf% zVoPIBMGkDKCY$4hoXIfZxSR&KE^5!cFuMk&ubf$5xLEC)#{W4Byqfshx;L6c`Jmks zx^}Rt^FNbwzu~{@ur>mbXsUB;w5js79HkU+qbqs)sn)!ZI zW9QM9SV}m?5zoqWtZs>a)y~=4qH@EN#qtSnOkUC)O;RxgC(@C7zrGc~?jTJ8K%E*#45|IC;uxzV!JCGfh79lGj+e*S-Vdzvb=e9kDV7@g7r2i}V%g?S(bv;WY z*V$Ai+1d{i$jj(Fa;ivBcr_KCGMlJ|QfxFB;Z>J$OI(PwbgYQhmw(!(nfW0>8=D@vHADN2nu>z3Z@wXzMN zE%EDKoEGd$n(m@xg<1vj-(EXJW^Q(tzyCsvDPa+l74ZmlfEHeCB>|wYF{GP(o!wXq zoa-?27ZQAT{5wR)xZ>p_`)Cu;QO&zzlI=sI&w$fSkgSiz9KZnix%cM-P(Ud+@ z0~S{F^Eo)pR1WuaIsA*ASN9+z1j(Y=aCL~{F2|=fD+rRUf zE~$<|X|Ub2La~73Sy9p2DQ^S0XF8prpMLvlZmtXak=1db(T;qhoj(pe z?CDXKV))n*oS8j+B|4<2oLdBy^c=<`Zh8Sr1nB!ieJEH(Dgm7Ej%o5oHu95SqQg$yq+|m%$%Q& zKsh?KFR=(Qf}Wr(`O9H5oyPETX6~_66O&osbjbHWg^_5BmY!#20l{6HkMC;;Sno*@ z@FINDXZSFhlt}doN%w>XvTxOcwEZ(oje5Mywk~g2YMrOZ3dGjm^*bhhdcW@@;y*cl zx4}VvZ92`Tq8D4~4&D&I!mk#$tH2E(Ok}QkUt2^$i6AA$VTyE5Ez@f34EC|ksa>pT zca`H+4-pcX=4WBgEhj9by~TZfp8P<TpOqgJ3&;HZS;F(Mec zxA#MO0h=rZ1$u-j85R=vl-?}^DD!a_>h3oh92_)yyrCk$1_ODNjfmXsB~# zl^WF;B9UT#$B)-6pJ~^he#n0FXE$|ohUz?sG@d6JDFI8^q`T^^QLos1S->?Z zBq`J6Bot6U6qB2&ojHv7q3s)$69fcS^sfR$1!`5`S$zH%goyS_GDbrS;q-0}geJGg zpwy>MTwORu`l)pgvRK-z{RgbNiV;SDXpX|hl_&8#jKR}%?RJD~+xvK&coV@iD~tbL z{@cJ@Z+UX(LRd5LSqyg%gbA50QrB}ipQ0!v*Z9sQbfRBIv`mY)xVBCE?^|e`WCtN8 z`SWOFvG{S6uC3OK&Mq7N6io8x>$^uf7NwmT(*6v|6O?paVo08=qd8BE$U*DKN=x+f zt0;?pSs+OPC?YR5ykDVR`(6y!uLoHj`}@V03`IuZ>P%H%mmn}tj0v(Hy~3>VhQ2*X z7H7$U;_O%c3ReykbT(e=KwF)rT3#)hzE#^Kzk0eoLLa1J9-NCS1^BuazE9VG6~IvP zq>59un3guV@|2;ScG8bWP_E8u)Z#;LbmNJJwqq{GT1OyyQ+Ir$)}B%l@bz*3 zIlLOkD0h!7)(sxz^J?CH)<^f5QpZaAM|*u$Omom9aXXSSzsySQyoF-b&RL@aLG-vP z&Mk1;t5eVJwPqgo%Kc5d)$UR2CA#xOBt7`q44)xXk(ARnMwfk8fpw!)NkJp}uOfBc!w;-u0(L_p`3f#sou^ z*JciMHL0Sc^F~mTiQdbou zehE5r4j(P%(p(8r<;PAbWOng-#^J;D3-lsktGL9hTq?(JX@>* zA&=gbIFV`T97(8Q?}eG4XT2Ht6iX^j_C!6aHXgB4*6ICE#QW)SEx&gBB0>OthC{&`;ld;?JXbF4s4Owgpu@tF14y(eo-NnXXJqUk29?i7y*Kr#uB)*}b8Ki0QG4kci~Iq)>`*?lZM&K`;`b;FCHk#sz4wOD0mh-=9V z6^SDgc+Dhk%7^in_gR*`79FJw-{Xr-%rfk~M?d+#q#ZZS^O$#M!QtP!=*|03gvH+6 zphT@`4dmJ}r>ud7SiTpWU~=s5qO}SeT9DSsJ6sa7NSOH2>R-di5r_9krI)d{?@+g2 z%+A~&>lIm8jF}exppmslpIydNdgoUq2lVW@&A6K&B#*zSowL zo1hdu3boaA1q7|1QD!DP!Jae`)YZw>C4M@GubGkKNr*f1S@gS zB9CXL_}SURpKG~#EB~k4{y&%W9i%%BVqmE$L3syc;SiT`uNAE-qO=RXfgJ{f7itd* zTmekM0`ua75Fz>n3il7C|3!$;m`9k8JFH_|cK)szOvv+9Hg7FT_uI6P!}u8>h=WPDB5TIzoQ%G59bt1NZ3<28k47SoDwydqQ{giBRhF!xsIFEu@r0AO^oerQ%M{q=@<`x=Dt>Qs6jpQQ2_MMDYrz^pqgD#SGs{S4e5FRo4>O?Ccq zwZG9~Kgf2L!07Z&v^~y{V(9!`2?9ljY&4f z^sJ{1lJv(@MP{!62M@S1zPja8!qs(}us<6gKJVp8JT9<2ZYg1R-Rxj${PO3y@^$Rj zm#-IkB{Alo8zKL9KQm8^473gtmM0#5OLq3S(UiCe$;?_7wc1Y#r(1s7&;(d6l@ zZ^s*@l(O{H9`(>v7ZcG2sR7dLQp4CNW_HE71b(jUL4D1H{FyM60Xcx`Z>J+i9rt{i z1*0cIg;|*YO8vKwx?|M#BTxgeDqxdo5C`1ucOd%(yttoshi+C?;Ik6J%Kq`7)!K~L z*P4FKGWKGQMC&t!25Ihp;zAy8p%>^85Js5!iI}B7?mr;(E-DU^iybo@{&C;On{)&^S|6u_SS=>zy4koo6egH-UZ< zL>=?twszrgm+~k-pt0w+(Y5iGlS&cFxEQW6iJmzUQm8Dzp0rQ%m9736nA%MPz{ym^ zYe$NFgsDzf*yaEzJ{5sTjIeU@FxHBlL!faw55Ko02!Itgr@m_K-#&^JM3G`00!)+agw(mbpiq=e8@+PVBk=2)9aavX za3Z{;f6Zmb`XVOHrgi3sP>yTdyoc(#ik(dhxjY7+pAsbOky<~R_lv$RkFyE1D?177 z?Yiy`?QYkYxLp&f>rsyMVr4RJ&=Yvzy3*D1Eu|GlhOzKCpf#)Vus;>O%1m0v9Ub9O zErjJF%VT{V*wq-2s4tGS;U0a`9aa$5%^bu*ngD9!fP=0}(6Lv%bFiVr`Z zazgft(4hjxvKrVe`=?}l@}uh-RtUqUM_GI@lhGSfL_DpF2RqQf1Eh#UAd!%M-0(0y z9F0pLbYeG`u2;DKKiivQ`owXft^XD>f~%+0RGM(kR)qbXIO)enzH9KjM8`@y^9Iap zufM4YWHygoy6ycY{a;1$i;~?2p~q0dkL%;U;Zc1u%SU1#HytEq{BiZ7y?Ef;;-2|_ zJoA2}M64fU)#d?!V%VW-ZDZrw$iMk}79%BVdVA0x&fOWVymHa?L#yfx+*!?62XZKG zTK$q28WhaTD=976Nc-P=weNnYem(7eGJ}k487&+SWqyR$9dY;vallrSR!I>hbLO)9 zqh1fE$CVpU`NH)mTGbOadx;Z0x=PFbsKSKI78~$#-~w3swaTJ8p8Nqq*AU>x-q?RZ z-A-Tav?M^U^+ZF*2;!%}wp5(0^A!X30%pzLRSKoTM; z<33RpK@bEb#|bCYH^U4jYuJ8@G^aiS9;M;wM;XNR%W<+{mnvnk&Kj$?Hy5+Pf7kj$ z?UeX$78p9JlL}d!R0iy&8=9TulWiU=BC0SFU?mJBzBryI*^Vep7Dd8brn&w@{^utX zwa!yD@UzHv^)?@7{9+!=>VpJjugE3bR+7E?+}Rm~1zPH!Rtqhcr~FCm!ak%TR6T!jX7Jb|A^rusk?!d=6{h)V<( zUOhIgo&`2M=2D*53(WUhKEg#=?utmiAduyEDHU;zA$@$Xb|baVkh~bnss-3C2SxO0fz~{oKjw zcbOz76U7dH8&>|!-b0Jke<0?Eq2~Svv$I)E(b@4R6zIDF#fo5W@nLNCp=+^v`%Xm~ zNrX;ji|>EnAkatJW22538!pDV=x8|W^0~_w{Ur!A7|9F0@OB5qOX5)ZUtg_8bLk~5 zPNFq+SrZXlC@^;!>?glrRQw1-GsN?eX`s#QtDIZY z*Rvn#cfUMt-kF~%Kd*Yi-ov=zSTQUgTu>HfF1CRrPN<&^9qi|Z1AK@$PHl8+r#8+% z9G7VP1mKp=Mq;^tIY0l$pVA$7zUSM{XN!o^yl1PfYZ&)+?b@Z<4ceyHec>tY$E~JD zZekFfrV|b|tt#r&0;|{AIXKZpBp63&dWRaY{g-pudxN8w8Yv)}894!WQArOh&fTCz7f zlH>?|vq6*y(Ys6u=08?9GMx8{N0~DJhe(5`;hPZYrN*+_$+nG2jSdmtua3@hCZirMNArrYzT=@N-Fj3fj?T%T$cN6vXW9Y zovC&AFAQJ(Zl#P~l$*LU3S4X=Bz;60*YMplF~aMSVT)sjkkiKWm2LfTV`x*?7yXj7#kXOG}{-eEYbbQSl|XH$9rRfb&)U?m|Qb2tCF;#c&T0^ z6T1sDnmbQE=Z_PsUALJ^`i7mL-QI0P0)vwVBwv67m>;uE$!>a20naN%BE(Z;%S$!m z5o#5sN?NzvA1c~iUcO3dfh&5m^FPO?2;K26F@0AESeZsccm8-lXv3M#3p|DL1$I74 z0u>lkKOM#zw@x_{^$NqS6^He?V1^e^8k=gl2Qbi;Qk+Wbm-j^2nJm(1hXV8kK#2~l zX?p7$vT6TRy5jyYOLW9jn3!7nU8mLvA@@V7-A_ErdZOD$U(W5!e7|aO$5N!Wti`nU z3i5Zqffoy^mzXL|EZE0?kNN#SOS1p!g7~7uOuM%zx4(KBy=6dWj~`r!1}-K zDpTRHCG;HIl*Y82^~kNyn9`X@$Se}bI(ImK5OYDX;wIuiT!7#8=yEI=_Aj7lqT;j_ zY3tfwn3!jOvU+6$iy_90qQ2)7yNlO6*Tn60&MHS&vWQnB!~nRxs}JuFA=!^;fJ>eN zfXvTn9-g|@nh!@0T*Ldy#XKxrM}3WdzmK%Sy7h%DIlG{E%*pL4cT749b#cW}?WdaSVb7WDA( zd$H4B9AHe*e6`izNnP52kg|qc2LgAQs$hfV&b3yV+@Gf}j=wLDyZ-$*QT5^HFQ!L} znK3op?Y!4WEnP`V{*}nEIovNeW;ZsC*_SRcjIQObG2ei}YC;-P*q~P=G9K6C*l!FV zrH>Y8g>e4Vh_|c^sOLs&?12o%R_!$StQ>VK$BJAIT1mpL$2z#O!;;V8xQ?yE8I2vo zXnrfRU_=rzXD8#(fEGQ`AFFnEhs`6i=mDH@DqJKfuY~Kxw8qo)bzdI~H785d3Hle- zjCVwmKHYGSL44nm94-|2`TO8A4EUdUY`ImMRU-4H@L0p%>Ei;3tC78pPbo{sUyIZ3 zoJ7ms<@MOUs{|PeNQvtM@&BkbyABNPNt<^$=4Z?xb)5GB@X@cm&ZF(t28HA$3MR)t zWZYy35?xL^!136a7ZH;XI0AF&|tR_@4^WtRRe<|>*zbqKSVwC8`lE;zdD6Uw=H zTPxVtDAAd9{(QM{a^c{TmmY&kU&W>LnKzMnUQi#@nvfE`yL0v<=rtFu+52a5J>etg zJZ@l6*5Pz=DvX$0r3?e8$Ubc?n)ITwIvAqPXd z(0V@X0abZS>!@we;Km-I5UV$>CeLDhwmwx-)tl5KH771nGn2FS;D(#@l93yf*t0+1 zs!{6OoW*18W5+D$hWpWHb4=nn1WVe&n z)6VusWJ1N2JE?g4%C@Q%&Q<5It^st3VPxW3nB#GZInIct8{yue#@yET+Q$b&3a(Ej z|FdMucU$*qTUxgbndE-{WO?b(AP!sDAQ#VwoGVl9g@6(4Q(Jill!OnO`NGj7s`;%Z z(=1QW+HizW%_=;V5!re=enFWN=53%SV_N&rKmJ~1{UGy^7@;yJ!ML6=lE?Y9QvZtY zKb~9x_G@Kj7K2@$8lI~#eC5<#r2#%HZZ`Og=j((-1tRxOY>;|30KjKojtnx@FUI zX%0bK9ha^u!nUNTBG>ekY+I>vLn-}?okL>@Zt34zucFIRl>3ftLZ5TkpJJd+Ak)qLx&-QpeW_3@Id@s&4PMn^&aiSX!750bEU zfoWjKJ8bs!6gqMLZNco#r+04*b+o1YonE5x(vS1NyCQhbMXoQm72@=EoW`PAN`Nlj zb(}s6-{3-%JL-x#gBr_FW5}WXzr|f~+sLWgSItPYO-LOk2?v7DnZ&_>@8RX4Wso#t zxHh?r9%Nogv!|Cl_&j?-K$qozN(AJsk@WX)HD>kWS|9IYp&kcVVxm=xJ;DB5gfIwZ z+RTK{9+J?8oA`vwNrw^`8tZ=*@qMu&#h{`4kKyZF%n^H*V0wg34-xsrg9-C{e}bqz znL7fxuV3rL^nIW+vo?Q5%>=Xgul5$Elhz!FC}6Dhp^Gmm(2Oz^#j1sXFO{s!I?s`o z20@=Epo5iDX=1hcDk6eXN6KdrldBaiKeA+gaQjTmPn7=}r8(YJS+ zWV6Ny)uR>HnV5ZM+^k>%YO#d{IS}%mY>9JsT;?&-&^Y;H0pWh-GMm{r)+z9w7J(#` z+`^SE!H?1>0O@x5WJVRrJ<8;%B}(p&hkZQ#x+3$W>O5o;mTsM`l{uhLI^Z>geqK>k zleK&$G^IJTYu-02da`d*Yscp%c48!9=eD3i9XZQ+<=WmlEsIqNU>%GO)|^Yg3g8Lp4pqk>cD~f=pcR*_+0S_G0~g;`@14BXe$r zfT%c}GL6T6*WBX%f~p^vIb!&5rNN{EX(%UHgnD3BRp}iW@>iXGViN_2yI7tPMe+5# z{jy|lvYkv`=1Lz2kE{?D6fb4g6j@B+?>w6dw^bSdcN%YrhJPugB*D63dYvK#hf<5g z+~Snqm<-qrB6t`%)%_6Mcx0_Ya|YDm*SvEQehbeEzmu=F3x@f4Wpkag9dIduA*hfY*I z7azOn{;!Jr}6uQIk7pM_lXZp5S|z)jw-jILas_F{IEezn1mw zFl$Mu4ly2Rdy-H?D@XYa_P%OkGVX90KfmzLH%ajyQV#mg$AL!{l&kAIhouj z*dlTyq)w(^*19%n<(ip*5Bjtgy%NzP!4kgldt)=kw^{%QX2+2FYvw^K(`s${Ze?YJ z`5c1Jm+!b!2o6h?S6cZhJ>9R#{AaGC&p@9mmfgm>uIT6Jm(BuzM6c!PM zLMNTX2_+UNR2nA=XBH($g3pc<>xBOb>(}u27Chv2d9RfRX$(uPT^aH6$+okbM z)px&LXe^GI666OI=QM?d7fr0Bo^_(rXX_rU0uE|Fvi>?2r!WXNj>UtU%8|saXWD%x z(G9=wRsu*qr|Grrb@S8aI47o;I_1S<<4V3rV@#Kyp+FY%VHeq(uI+?gpWJliRfvQQ z%uEF~gjo#;Ag>J-iinS2BmiJcVnE94yQ!*p91cL8r*Qv(j{-RV{=HU9CdsiHje0`e-BS+&?q=J9qJR93-L2(61%mK_{*jB0JEOu0lqG$Ek(VixX z*Q?s+t57rYV5915zi>wLNNSAuyMu<@Vn~zIi8C+PtUJR}OcN?{>X$mOudHXvICq#v zkWpbGJdI3x_@OM&_si&(xV=c*T%0pPK}_^?BTC1N@{uJO)<~+za@91_EYKyIwJcU)nD) zlKZ^g^v8$73@)EW3*#Ug45vz+qW(==mhDmccS{P@YN4fO3rlt0qJg)YA&{J zX=_^3(`S5St$p~i)SOdv5Z`0|QWwJSxTr84cH?}U(Zke8@h_P~gd@oLSF!K|Qq(>{ z53MwoZ!8RN`VQxy)(|qq$5iwSB9Gm|1t$*F}Pl(aNAs2KV}WJ(4lUY|}|Qr8d5D6uPPOT83$^6$N&vNd>`au=np*T-+<+YdLOC(}sUzD+sMehTo_WrySc%ovx z%SWtjQ>0HpCmqTCJx3lYmKHySkdr$XI$jDzy-Tgy1MY0k66WX!NSAv6Y6WuhoKdnX zu$%K+TuC2NTYe2@Qg~OO!y>{AP=AA;SzL1wL1?s&7mvQ)^aKXbF(BIx!hU~`3wTIt z=3_XHb24f?#Tt*Ih5H%+gD@|8gGLDy3O^S`yU^KD{KPJ>0FtIiDP>==tMYa6sJ49P zB#qzV;Hm`lU4MVW68`eDSBfpv#L~O+YN2b+e-C%@Gzi35=*bx&w&AZv> z6}0zwvMpXw0mv{F+xze{tiSb$Bu_ng4TGG0dx+ysH+3h?O9lKEEcyV zO-9P-NGiQWcgLvsjx-6pNKzCd41jY&z|0!q{K_i;4Rh@8qmg(tfW``-2V7FOT(GJE zKvJX)7yy;M1z@ls&_BSRYx;ZM07c#*F$KX}Yydoj`fu!16}>5yA^ykP|GJG1xl(ab zaakmRn6ph~fz+xtEVi6IBf44*d3`Ftoq!1b-lmv${KeP$&}!AQF6X*5tFIyDJxiWe zW!i|@LL%MAIOS_E6>L%e>KBBRSGNhTJcz<66NnSunwE@bEC%R>U>u)HW&lk9y6VIM9rrhdjshso>cJ z%4aWYc(X6>-@X(yB$3AlEdQO7@oo6DRPX0363ohx-h6pv z)1Jwu`yl%L+uJM+!v=f>z-X6-OXv6% z{D%b~*HZheL}Ue-{$XR$awGL z&i)+Vx&}3g(}B;-XJc9eq?i~$V9r2)PXiIeHe!$i41{9TKksjqamyuGxA5xx!^+N2 zu-^Aii}*Xw`8qk{vA40z;W3j!-TghAn_Z`={HlxgFZ2)frRqC$s&-v0&5aM(3pXtr z{c3yZ9qI&^+x&*f!OY*jQ_+lz*%jtTJMvO=!Xjyg>>Wt4APel@Ca=W& zWwKX5YE7t$(-*tJST;E)$&J_W0Uj+VWjOz2vPUFi&X=@KG3*5s18~2d)FWGLN&|&; z?hF=v5YX`F0pr`bcScPU?f_5o*uk0}Ok21rwdKfJVZdgKkM&UNQ*w8jmGTN6vpziP z+h9&)Gj@#x4IZm~v#eZd2088(Qb|Y;r<=FFg(XY0yKa(>2NH${76m7HRd9>52rzz1 zbQ{rNrDZ;wzrYG%Ze3hB_5|4~1AMr(;g>v-?=HFXijCnw8@L2T0tqvtBFro&Gsjl( zlqa|TPTNB4`@1GHOW;OM^=-oVizFK>2Aoy-RZ+XwBH1ccWM^No0dJzs|XMfa&00fj|*U{@uX+so&!wMyKTBV)NHz7!V-ke zgi;aeiI<}N_|$QqJt34q1dr5CFE%3AWo^p7Q$3A^`6;!2$XL_PseZKJf~6-(w2-f4 zsg7OT;aC~KvNJvo$Hk=?sUe|N<$jrMv;sBd+y9*(Shs%%YZ+V9D9+rUiHCQ>S_vXy|I-x4IYu003e{E z1#CgIpe?+=xWyo5bl7`20JHPJLzt?sM4&8~>7>ivd7V#zp6ki>-6U!#HG!Q7IyEBY z$K|nw6?qYsChe@HC2pB>=|1X>fi6NMl~K()2eVdnH`XUhYJp6p4pFJXtBDIy^KA!2 zSX9+hMvgI;$yStcR=B>#gOR;sTI7H8B+)&AgqS{rC$)}Ct*FAB6Fnk7WP3UKsc4sAj-U0oBGBQ z7flw=c|_17;<1ltepUY0dqMMLnI4T-!Dd4F7N63nG10(#MT0QgkuJ*0l^jko%%Y40 ze@o%_4vPfdk@e%lEB9MkW$VfpcExwGUQP#OQvA}R9kirawOyoHROO>>C@laR=Xk~m zjL79Ydy*-dAWZm;#08Qv$$uQRkkfPA?kNQm8O(yZ-bcv}x>z+?2t)t*d!Sx%(Zup7 z2N_vB1xt*@uFObr(Ib=&M_BOGm4}AdhD@Qb!|x!;U>X3s4(7=VCU*^Mc{*oakM;kB^_l2+ z>qyOZ{eNQ0SjC1}O78Eft&>Q4mqUv@|MMU<0_&S)`K#_6U8BPX$uTIT#a7WT?6U%u z)3ZloO4tMd>a*~)ssj(vBg>J%?oRV`NP2wK4Ns<8)r!*pu;>_k+h~?Mf$DX&)HsyQ z6ae)!;3dZ^r-O#)&y5yB5ISz3|NJ}RkKEKSG%xz!4I8ZnqMJUR<3}F4sA}-O2AkGz zm&0NHPlL$#4?IZeM7JSS10Rq$ZH-3-Z!%LZPk|gAgH1b*u5OW!_><#sAw`^*R zn(;ADq{fJ)^b@$PqNQt;(uknmat|XeSTd}oO!rI3%we~Tj+!dJKGycAj`vkyhn?PO z2h(ZOTrW(1+VEIuO^k6EDih0CNKz=~CT2n6n^rX}ovaR-c1FzzcX#n)Wr=VEInt%K zF=iN+_d+qeS4AMww%#;1qFTO9OiAIJ81?!?&0F4bUi#E`Id5xvZmf(Dea?L;RPGMO zC`TJKcVVh05h>BpV1MRHoJ&ibnHecn2_6evez@q_72Qh_D*zej z3<7Lp-C~@S+MAf-)T7#rUDZ|_cH?I~%ppR2#W@hu8Ue+|fYGN@X&u5S)np?9qeIX; z`^l{qy>GFDad8+PzS&^3zo?OH0bbGPq7M}5>gezB^dhP@jO{m*>y9Qt0gcDCULH#+ zP4`C7wq}`aBi1glf1&j&7)Owxc z0x#mlO*2@;9YSVw+MN3yAx843gdC`?ZC9!@{#&J|k| z0>{1un9SKPB{n3s@Wf$dMmq+11@OBT30V(QvT_T${lZjV6XEsx5@}|o@Ej*`=brC5 z^sQmjDg#Zc>~oRFRKX5}P(7YE#Sy-cL8B0uVcL*IP5hj+oIiY+4tND2&$z}aoQ+{5Jwem6ngt2lv!ZVYweV#>aVg2Ruh2W39`8%;K0)Sybv;f&5-XDO8hkZjl zkB){sFW6jaqtrX>9GA%$EH~F8O3c2oAR`ty z?^IfN604j2E&VctpIPndxsM*#5$KDuuBq>{QS&O1q?npUnGA!q72jw@6lf}UfrOig zK!KjBmRV+kDw4E`0Xiz{;lBmcrISL@d`~Tb`M&d1k73ahVJpSTAe@w9r!qv?^XCMV zJ7y&!&^j!f0oy~;W*~U0_~0S(4T=jV5lj@OyJ3v2M+(X47=)z?Ji$rd235?+bSD%Zh0Kg;j2L#A@@(-ZmCR|}>u`pUg)(aQbnYSqC zs5ox+XUFDnmGOOcEAEKhpQ+hm!9ylv~CXzS4pvbOZ*r*aihw^EM4tNZ__Ha19tdXC*RX*mevD(CTchdzHfH zW-T>aT_SLAB~>WbT*bn$l=y3SBFb7dprMzXd%(9#-%obRHmBMS{M$)uZ=uJ%nvEW2 zCw##+zZlDI#*qcSfZ@AfljK0c6kQt7y|deQ#=ulh-24j&7NR1L+S(N0E1f}sP(u5W z@km+=066W20)(hm-e0~9dN_kdfWHYS8PgA93SDmxZ)x)72Gb3fBWwT))QLSGKx1?I zPaEu6TWnH0X!_pUvha95|G7HAj%i^rL=RK!=eZphCcf^fv5^4RQU*tXmH%0e>d3qu z$tkT2!?o|21M3?$Cg>lG@E1eoYgW#->x^*vxRIy%_3rq_+UmV&_Z{u{gQ(kj~9VtO)m7tjeo zupYzH(;9VgN3J#xp(W0+a?$i>Ei34fc#Z{IOdRXz+c&Kvc%SgD)6%JVRD(A1JZ{=2 zme!oz#zE~Vb!3f1vGFwZamcnvm{OVokFy>LKK3&c{9RmMY%Y?M>sS_6opU%`+)5QIxnb`oQWGY_y^gpnB^DR5_u)Kq?y z{3>^!Rmyll86@V`@q^edP`dF+J$tD-ULtacjL@fQ>mAUX#1B@;#sS+*_#)2X_(dVf zkXX0(VgJX{S%)?GziT0(S;P6vz*iBTh@6);9hOO6n5^ymg9lx~%7 z_@II!VFI>3^ZR@L*|9%%Y`c#gyRY|kUFZ2au@ae90d#%mr4s@s-}aSaH5v1Gl?)fOwSYi9f;^UAymDWXki<(qR&zikC;Ae7 zd&GctZ%YvHsF|y2S%T_wsAQt0PmGt1XvKJ`B@Ol*DlXH< zAajb4Zd9d_8w_Jp3uf_xVa#j>*FA+(&0Bn~Pq)@YoBbzUO$)N%6H{zX68rqqR;Vf{ zNr0N=H1A_o#b&u)FA%a~T?c_!wwq3lWQs{AkQGZ;p zU(6#xJBpq~n3-87H^xHA5(z0!Ge{#5yf+}r!li$Dlv!uR)V$s)D#k0x(97_TCf z1ix$(`zi$FwY6vzzCFzl2T}BU8$MGw%NoA1Qwb9DeU2ctPctu}uOgnmrMv&?N4?RI zDMA_8fsGbqS`iAv-akjB!Nd|V|WXVfxzH3bdPLv^{zqEL=mfJ zZeCU)036zJrk936>UEpT9O@lBHs#eOdwU|+3dv$<7L&c(H*eoiTQE{f?E zZ|Ww!Z;${`i%D&30eM+Va$eCPj}Ca2*`FJ6cIuu&A;-vbTWNo|r!DHdxww2w#fC!C`67g$<^qy;@gkFm)E_gM!eayc6FW=F{!Y(L^ znff(0@>E0~c}8>i?Vs<|YZc9sk=N5Is20P?5In6J+=`yqdO4K5B&7`m3djJ;8>~e| zEBLG0^jqs9Sx9EJzI`XwM4@IsuyzZ%$}g$t{g1C7e6}Y>%&n+Y5bA+p^`TmA=_|Rr zew{{6v$|$!$ec}5L}9VOfsAI4JbJM)#*Ad*0%!od z7H;PPQ+=lm{xn)M80DB~JbZ)B`1<`%(UY@^FB;j-&^H92`}1QkheYe~D-HdbLHLec`pH`E_soC3U)TqxVTk57DMNfRIBNEAG=qvvA6}tLVOF>@(|n~R$W*8)3;U0S!iAs zt$?L!inSN)f>SE*E44XEn_DG2BrXAibVhAWip_}%FPdK27}s5(SmnEs==H^`-HR*x ztyNN*-zO?uB^;}GN3}!|6T8T%s!A3W77*9naHNYUfadnUJ-)w3a}WK7n#y2dFJ$G`pNk|9#2D3Da*#RGOve_gQQnv3VT38)6DdHI-<$@mH>CpsZw!ZUCrK}T# z5eD4Wl^mauVQ|W8>=@nlG>xTO(aqgtXeXl%EPY>IK`IXF?8kKM1e-;Z1ZP7g6c}k@ zQ4H*@u9{#j2y8$GKwu;S*e!eV2z$8)x^9KWc^&McTT*k!ZD19EPk7E1;A+v>yN-OT z;*!|F@Pz|S6C^?vr1qAnM1k?tyV2I+3IrISifZo^je454<%o}+UreeD4DKHjdpmHK z!hSx$)n{-ryKoV!KCTT#&;-Z&GXe7MC9En^o$lkZ93^Zr2dl1D(wA%T^yId?ub-3w zXs>5Gu8MSs`b@IuNC(ysAu}LVIZNgsw+V{0^M$Q2g9$;;4>S5D+?>VIk@0|{*d``E znSxkg3#j+63VPElOo-O?hzpVQ(17M9!t%4l?5J6CdTmj@DoeL=FE1HFhtu`7`0mI+@h>uqr@ zhYL7lN`(#0S1!J!@)Zc2ofZ&t@kIo6jGT!EVYY~I4h&}FfHQV%dvst*_2G7n_Z=ps zN-Y_M-_+Y(rMsZ8M}>jQO|8|veaUmf#~(1l7cZ<`PG5bXq3yK@V|`FnHam`41tz|p zb0w}X&nq%6g7$zvbfPDkVoaI0sc?3yspJ=#nl#&3CG*V~H9`21{-TNSE2*+No4Mf8 zB(qlm6Lc2FhRT5>+(D+D>}LBZ(w62H7>v+dhW^DWEXT?)?+T_?s+VP}fg_NY!Xqp2 zHkS00h0E@RkGoA}7(Qv3>#h4TlEAsNE(g&fM)p4yj^-Gd#FGNTqqwKMwi^&VuYGD& zwCooN-JeXvvr`&$hJS5KXATTM?|JThH%C|SGXVufbA#}jh z)8RRQyu#YTPn=1Ms^p%r4o`{4pmYVEn#_}93X9g{8=ljRaBGcbdpVBb=8_CEcPDxI zo1|WMhO0haU9GPYBnlz@V=!5a2An9S2vu|hSN*ym2hkRUN)oYB^I4+kj0!J$@Ww2u zDG`fci_7z(jq+%!fS}I#=XY7JWLls&ZISIIi3BEa6!vV29{0U@Ij2)r`dZ0Yee$u^ zpIU!5!9V5RDXspKy(*0*%$Rp577dd zO2EKdDA2OT_Yi=x0aC!p>eXYh1%aQE_aApYS(0E@Q+j~(s~F-2B0TS;`IBnHLxf=4 z&M)j*s0CGd!z#!#|Jb-c#2{Ql7$wQ9b~pufXaq^sq{#d9y|J{a9W*R)<~_N5i~3?} zm3+zB?QgprcvM<_Nyt)Q*5b7W*487KOHr1oHptAYE#TBafBycds45jmzh>31>D=c1 zePXMDEz5Ek9J79+IRCkB%pq9IM@X9gCOe8{TU0&%2=u=DAUOL7?-V$rc``dc~yg_g=XOCQ`w7kiYb z^UZn3rHpMQlrFz={fY~rysrPw@2JCN0hhjstKZ)qj!^xsy0&FGh5Gi+H@i=js>*~6 zyyqDf_@bJ&zyJES-F!NA$L`1Um{YM`-i`VLW9fjmdItIuT9c1$P-eT3D^xgnlhS;3 zTi}DQpmNEPc2Gw~kh0Ig;hUz7o3*`u3>sTKkOcE(G0XZ3%4SvKMjNUD_MP8@~AH-_bWDQE^PBJ`@mX%(XOE&l0?j7kfvmASH z7n5_{=NI}d6@H2H{q5i3+ZYX@DzlZjM$(D(>x-VRQ_>{!q-$!!4Ghb8 z)jjO5mp!x2xxYjxl3Jt25onW6CGx1fwLlh2`49L22ZhHZ0|0Z-oU!1>(-{Yb7^-hb%o+h#pdja%o( z8f)(%y);Jb+6^|sEou*ck1ZU&GA5|nTK({{&Neow>^E+Ep0Bqd z?5Ysi>jz<1$z-#O0)a6yd0A$oHZqQqK~p;ttPHSBe`r~jyr3CHS5e06n39a;>EKLz z^{9ePh#9>@;Vv{XACwTPjaH4n$iRZWoyx*veSA&#D&$%y-G1<@4DJKJ?8JACU<)xL zhdUPW#q7eIJ8WmT9a?CB9S{J4$#Y0&bF^Iwq2YuOIVm5qX#lQ3;1$4Mx2MARn&wi> ztdzL@$Qekr_`E93#Go9P>AlIef>i5ZEUPY$fQ7abZ71$5Y+b6_zTOe~NuSjY4HCTl ziRyxpS`n`8kms^fuwUyS)#7YVmBiuM7I03@nFM25)j!|c zBCNQ%LTkM+8Bc>IaVwKNW7wOnU-$qWIjL(4F0+GXV0fhAo?kfcQ)Jse^BZg2SKjZB zQ;VNe$`=o>6U9Nn4@@L4U7v8-LOY2$1YU0r`jhflHe#o*mq7zf@!*EHBtLS8P;y<2 zpg}J|Nz~KCA1=`<#s~DPL4VS+*W;f-{Cx^MV7(X1XLiKiO4;Zt)?(JBDavz!$K3s( zl+mO*UO{f$^)vaZ(|CK3?t-pf_H3bg6?bjwe0SHrBu}1ib-a{vrcYv)QB%3(nqu|Q zI#S1VhQ-`9PxLcmZ8@JiJKB*EIUt2sZ;ct?9P=^DER&&4Y2@e{BEun>=|V!&vk5-* zdYH~jqH&LYK6l`}_1&j@kvzOyi;pEucMMtPuk=23w0+PYn(GwLzXi|FeyFyF?;cJU zR^w(a&mwsEqGemlZs8C_r0WAfc3b5Qu+6oHPkSRAb*U`T&^tFrq3Hhp$9S=~u?aJ2 zZJ{2EjzpfKUsE7WyZ_c%eTi2yKfe48%b zSk#9}(0Ir6oS0RfA6fjmqzbU2<-B5h}#!!?oYD~c%T=()-qm@ zr4H9Zk0P*ZqegJGZ`Jh&Y zOi)@vlAM01dx{y8$aU6#rv4wh#=TiuQ%H4bTk9Ib*vLev49DpDp~%yVCZWlP1&J>p zkn;`I42%VDSx8;Dy*!F;z5Z1jf->Pt_PA7Cm=b1xMg~_eEg+e-o|}_Iw1YuYxP7bu zes^Vj@0n9O!TLdYF;QWRRaTI~d{T9yU?G?W6=w6UkS7APauAzU&l$M9YRp`&XPRxi zw(F$!C#tzdB?umNql=th@po|62VQf8Ck$Haw5sOjsIUEoSZKNq<7wr2X1GjI7!-)t zH3|9OH7#Kh9UySL2?GE{f9$_MjLe!xSb^wTp8MO&=-dQX64+_o&RqOepzl|&6*|9^ z$p|Rv+^Gxm>G>P>q5~?Ff6eQP6_-?`!70w$t9#ib2_IAQYdp!eO)im=#X8DAm!9H& z&3Jo0yx*5VMI2Hm&5x(pm)g6h_)c%Yb+LAD9&wwIkWw9F+2&f-SN>HcS*We<>~bRe zFEEnYz^=7#K9gOuS}W;&`vL=IVxLiPXvxbrYu{KznsVFf2t{MV-CQ0XhO{$L&*jtx zmesH`_gb5D)j7Ejc5j7@(!m9*e5T~`L}Axwe|kD>Ii&IOlR;dqmwy*?MxFk&y?y<@_jiZGJ(-?Vi*P=h`VCxBmvnfe zPGj|}3jXRlvwD;4UjT<_QXb6}D&4urJ#hV$tsMAER;Aj|GW!Q)w3MQQaz;a}D_IeO z^+GxDaW_mIUHNC~JXV!&w%rI*M7O_-LT#R7#01Ri)x5Fs^$OqEB&7J#rcQ zxuh?5;@RR*Ju;GsqcY|I*!s&N%tDACvEJ(WDUs`kYSR$M04LKqPCTey*2zcUn zrj!v9^Mh7J;OX0rF^YtbVW4inH@Z$mMF@~{R9a}16Ni%-!f2Z@gMc>PoN~_2*!eyk zC)2zhElmY~Rl_B)Ymq7l=u#xN=+$b7FsPi(ZuA&e)%g+#Js#cB-3DiR`h2gBxcai` z)#+GNLRhj#5*RqRiJ57XAl)vyoVvPCK6pddq+PX2dI))p*(y_!#H*b8&V`F)P2_P_ zp@e{uVC4HC%alT&dTo1s9SKpJN|rVm9HkO(9$9C>o@XxEll4#)9-rZ>u1Oq;%KzK( zN+1j&!qrZLrrk&Qc!&*je=3#$sAD<6WkV$g{x666hBIoC=4Y*_1Vxr|__0tmlQXT< z$SjdJ)o^q|z#IZ;=;eNiX_75%)mfENfEzbvFDR~&!dsGx>Y zYTZi~K_4WBoghho!nLuSGGJr@Ox77D&ELtK=mwV21=SV)6^eU5{{pKm3CoJ<-E7|c z0CC;N(uDhBM!*9Ni$4grrM8`_Id9fp@eEdLw%)Y7(Rb@tZpQdLapKlZln=XQk!oJO zIS)}3DnQh69sWg&u7@)ad6|Q$%{)MSX^;c}yZ>s_s-`=V8%YuTAt^elsUbo&%Mvf8 zIYlw2mG7h342WHmQqYxyCFC0hz%enUCfvXHnVRdJ6aSz6!cIH_2M&HFcR8 zm)LXDmpIc~v)cO%`ci#inL$XSwVR_m&;k+gK6lQNUU-RqlFm>XXZGaC!c9YRFko=n zelAhiBRngBY-+0wn?N>PsK@TP+xYa94`d$iUHK^V_dlcG2H5?3E$?iyBZt@-1q821 z3s_j^-D-pzRgQ92pUr|9Is|Ucg1C2lh`*ZIbfK$YWhdWmfE@F)UkCt#sk`b|RN<58 zJ0%SRo*H2|Hg7jFy0Y6Ce}uB8}UE;x4E+VJ(8rMAC&f5IDCDEzV)h?mwh* zb=f}6<(8{At!KCB^5rxLO{5>VVKw64AH2xPcD9|bTR^R4W7A{>gurXbd^n$}>UM>p z0DA;;o%|#j=ozwjTo50m@76J!J;Y{bN<1*p@A;8-6wqLfTQX9$=(VsK(B1RbS{h}~ zSL5igc=s&?T5hNU>BUVQI&2Tiw6vZMKu>I(Cp?iRS%@|zp|ot)=}R`g$A zc#2zxeVm{!$`DW*DhHKH<8HgbiNKQUI#Aqg-fd=}KnmzPb6Zz+*OPS(OiJ#m(bpNn zJo{1RT{et!tdmZ}lXOTP!$y4IY*-hAvedSEIDb(C1HG^c;mMr>J#yfsQvumoev8G0H^l7bBD_iU`0L?L_^zk4_PV|1NaomkpFK7+cU5Hxb%R%-J=-K z%)Mq8!s0PX@>tySG>>+2%q2~6TQ{%AjN_b<47LpaXPAv%<6lb+Qi@o7$WX;5Sb=ZX-gW+Q!PGp8Cm@nU5b$-kf7!1}cZ z2G|@P$t``daiq`q855=i{(Al22Z(Is1+0l~SoKfxbuO_Pn4hQYTDy;0lHP`a*Rn2z0CL zj7pGe$>BN5uEGmvb4}|BO*(+k_6%Gsy2DKlK`rVIrc3ViM#-ym7T#CuT85p10LbL3e2iT#CaA=rBXc5=4gi@C~|n|b8FgCKkEL}H_KQAa_#sL z(zbSCKO;C|oYn9X<&)@oAvjC$@HkLm*;~E)_KM0ndx7C%C1vuUs`^gV<0VPwCm#a1 z#}FtlYdCSx^82<9TlJMshCdoTEk{$eEi68X=d6>!&9V^SxJ8V5!jIl%aqqRNqUIE6Z$V zR49Skvw_Lg$qFtNdg&In4mzRByR8*^2@^j)_wbdhwYQ0_hhI9gKFBJ`G}eAuf|nia-}Y=g(|v#J-fkR@vJiZ z9zzIBxIHbU5K5T;ERthVwqe(I?TRcsnJKGInHwx>V{Mu8VDxAqWuN7532|a+giYiZ zblEK*fOO^FZ3VeD$_(zP>UcH+U_i3=+|TK^d-T>80C4qD2=zF>3Gi=t-li+hM3g-r zTWj9G53e^&z)Ei~z#@`EbQ$DG!*CFaYcU=$q^1NKfia@)>-Ad*9DS5ieTY2V9WE`9 zty7`BV+lWc&(eP`zwBBs`-lS|0Zcx5M9Em3FalB{TGXPUwb37V6-==yISy7BS9S^v zGc@^I%BMavpe~HIcPhCiEL8MbM?()FeFW7Of4+?+PT8zRtKtJ_t&vknSz?7QoJc|WV`6- zO=W;^byBYqfxAktLe8^z@Psuob~mvoJGmy79M5bb(0-Cs zC|z3@qBWSgDe)Lwlx`;1j?=?Bdw!G1Bv%z_-4Z4-SGv;Gux0G#no7;V6+CYL2&-JA zQ+r?}3uC(3fxvfu+SO&hw@P6d(zT|@=)g$aL-CR=Zf9R_zMIqS>YsR$X5EYI5ChPf zH-ROx3JWnb_{8*c$j9Lu16-UCASK`zCmHk*93)-56kpO9J$hl|#r$7$vgP&QXQet; z0&DmGi@#mgGI%_^7^$81+UINRu*SU?0R#Y&o^+nP`arO|6BGjod;!jA`SkC^UjnXD zK$CHS15bs=p}Z8-cSeh62N^6lz1aFQ_u}P-&UxmD zc2quoXu)3v*RUddDh0zVf#V$V=hH0>F2}x|G zXd{kGhYY>GRlxrsfxmI&>}9LD+@(5U8c>-hRWWe6>~o>)PyYUH#&yR*q5paYmax*G zXeQyzFUS6F;w0e(;4#7i&N1}-k)WD9wf*{+1uDB@r7p3vmDFpv)19d#%T4`6-^&A{D#-MD34b8_($Xn?gZlR4ZSU z_ZGZ4PK|gm@SvQ>!cqR5&(%$pAu9D(WpKSeD@-i4)ybN{SliNAC^eyWm&Pw2FH*o* zC@Cx$GDYLTP}EgLugZ(yg=4Sqx-IjjhQgum)h6wZw4+ZBr4oA#p(t~EUAPCPn4QPX z=Hjz*MST1&nSsx$)Q}L=F;WUOah9YXZVFul91vWj2MC3=Y}>c2tP9}bl-5M(fU=}J zryF_NV%Ct?`(j&6p4l#E|F=q4&BQE|>gAd1sSoeXPX4rDZcKQP1Uc3}_xIJvt@zhs zFPGOW-!96rDROIdDz_!dWrAqoz`N>uSYo0e{Z|rEY7cNxdsg4W&~JKkSkj{Cb+po+ z=gG_!(V|P4UM#DgwD(JKnbg6AM63c3|1qPT1LCA$ZC z&f+${{~+8)?Wrx|y*J{gU>c?}>!qq`92!=~od(A+z~rg(vv31+F89e;ZdzZ$g<@mf zj-I@_Z$7H)jwc7V!++UQfeqT@!trTM*CE7r!y0?G$(9&ZzEUm(B8W?#gLp|0A^}>j zrjm}f)fgt1dHMH-&Mz|C=Xxavw9jPof3wnM*oPE~$v%RTXA6z2WyGNfZL9c!CU?oi zIFX`i--3+lvcyof`@%vTN59z)CM6RKT&4(FF5Zlk zw&W?sfY53cJB-rMczFLvsjgyy5f0GtZ=TdOffoVb-N`U1wTm>v-0Z?W)W8OfhlY*Q z!m~v`Sr};L*dwMs}f0mr_0m6!5^HnHCa$c`-b!u9NMIo3k03v77^v zc;Ne;W>zqum`hETI0XKvbv1fUrVD;CAh7jBSm?cYMJ*2-d@&UG< zECvS^Yiqf>Sry+@Gx_C!@ZVMMjl1Dec$>LubSsxj#v4)%4_C*2hO-Jnx zw}W%rc23n^)1_~_F&48UEYaI4TMsAdHltul#Mb8L^qzC@@rhE7 zA{<8c7o$$>Q9-Rji8y_KVd0uJopmR|TGe0MICL+n0iGnU|4CN$GDWfMbLLWDcwNm} zV^jD?_m2|F1SOlt)DtUCptI1&W|62a_q+2V3U04o_0S zj~tw9YlnDmEGu!{6IY$Y0J8$pW~{n7>!V8-b@IzV9OUU{MuVB}BXza-0p@v^r*A!f zCJ~JoHHv!7FFilzN4graa=!W^0N)>+1r`m^L65jr z$)d_sLNUiaFSHrC0p7$8Q@5J%(#dhyCKmDoC1pXWDYBnZGiuj5lF_QIEvh3}d$dRmLNl`#**!CzhjGGF;v%3R$O>O*ShiB z=!fT3MG=8hRr#lycN;IRiT+eHl9A2PFaupi_tQ%9?jS%D4DD0_kTf+wJM~u5qgPR9 z=IwrKwBisDiNQnuy_h3ShPz+j{^MnG&10K&ZPpKNqSO}aWbuW6lHJwco7H3dKuet- zSk^Ju;n56UIf>>SFZ-9BC1!fdXB!7jz5>W#M(KZL?Xre+op~tI48G9qwZ$$gL`o!>NWh{R9%tCTAoIMW}A0pSOi6yMOSLJ)PKaa0C_3-m38j% zmxOQIXYVTyPDOdFrKkWQR<3_zS(Rs3+KLhQN_7A4^Y$zQ&{(q1sqwh9mvSY=N;>Y8 zQ;6{*@N2bu!{^Wa+Ye5suSbgMaclBL?^E(!DCwT=eU>xN!=3L%Z7)i$?L(ekPmXtYUi#w zrQ1L5kX-7sb+V3Is;d)Y*DSf6C;sBr?C%cP6~O6j0pd+tSkm0LFPq;@vx+2{e`OpQ z(;Pd@pXMGM2uASxHCXFyP`Zw@9M1M_JWuOtom8s+wDVN{d^8YvN$4_wKeW5^ny~SJ z=ihb`=Ly{JEs{!6ecNyDds*H3dc{q!%nCw`WW3-Upt90zT}2V8ueN5PEmq^Yc|q5m z{}O}GGFw??KaVCN($^_H#Ys^xUwmIblAjJB}&?R#Lfu+08OcWcSre{-N?~- zI{Qbx!@wfBj42AMaxzM)en#tLa&VgR^)RRB% zr-bMf_g>@j6^$%5vm{ya>uKc04sYNqwHCiY!XMBVi5D9`Enabp9tWdJTsL;&#ZhMqKvq=r~&2tt>1 zyNCuJqjxePtO!9Qr3=9;P0NcjwNm6Rbe%S3E>_fhp)@V@-a}cJU*UEiS$p~oMK~As z+oXa8^LIQ?jFWay90g|#F_Jly8+hXQdPAr{Hg@uXzBP)l*4uWi4e2W_oJocQ@&hVd z)P7Le2{IAMun&~>(D3W~U)X_}H^+NtZO~@(JijPZpc&lglIvLA=T+BwJDq9SP%}KqFI0 zbOi~F%n70F0BqW&w1JGwkHjPaU04g=oiAP~%Lp&8SU`jsageaQbUcML@mNly_#w4e z)hvh@Sr9AHBh-%)T}N1`pBJH62InCnY1+kh3xsVe?XKa%x>(Y38QyZ7o%q^*Z5wV& z6Zp%cb(U@Y>}+z4QBm) z`UGQh<_u%)8{8Y**)XwC+Ik%a)J1|3%K~%4=_7ul5%$ayR^c)hQAC6xHWIE78wdxp zBkM-xjR6lf6@*|Wd`dFLOep88?YH{pbl$7S`@HjYb~eUh&}r8-H9M4m4O!Ns?Q32e zsGu>b{{7x zZ<3Xy>?L2x8d9RQvDB4(a8$c&4I^38SoM@i;e5G;E3UmuzdVwq4TYf(=-p~6EXxdK zr*HW#E`4ZQ^jP3)>-KpGLer#p8ce=vc;Owk92E7105l(ZF~nXE1OpU&2gUFrdx@SE zTV9}U4;*-WlXd`5vzw>?w~Mvj;;WgYy+n5KxP6v3_s4bk z5&;4lBQ`~{)9KqL)45NQ1#3mb3tIJ^%wWus+B5)#Hv%=NZ6-FNV?7K%kPTBRQy^}^ z;OV|rV{}5Uy0h?)nUO|MOpe^3ZsQBB!*l9~5%F1(AwvBmLpoQEpacfuD}9NvM;7W! zmA!sjjTmW0d4vJ!<;Nb`#78u8oyi=XkKb-`l#XPm$1@tvIwI$SJiT=G%dT=bgx!?K zMacE`t@iC!8xKWbhX0aVLB&J^BCaQ9sO@59rV=MD1Ft{Twoc-FMpVJm29aUP3Pm8l z3Avp_?%AulY~gjD^%F%A_KCW3hjbI$N(W9EkA+0z>L!k0HBmn_wksrm`1d?|KFOeB z%OZoovax^Su+B1cPH@B8G-iP{!eD&SW+KpcJ}5v^aO8b>)l+Z2U?CQ5E*yYwpXOh4 z?{E7!L0LAUI(1}(LuxZ@u^Wj_Q~C!@%oZ-JnT8hC!V`z>wb?0=bxL$OS-h)?uv;f1 zUE4j8Tm=E7Q0l=0!_Xr-6U}{IcMj2{$R=vgxqV0~YK?KeZV>BXlcDLW3s5msXqqKo z$*eFd_)b;+6*e@O2+UI#n#x=34?dHQC3!nFy`HD(4vQAB1g@Nx7YVpnFHYQvRPUa2 znIw$rGJJP;W^8DMM&38>4HSoOPXA<>ss>o9`;nX<0tPH~DsX&Fb(iD7^Is>8{m-%cSp}!`I zJ@)zU_AJe>xFTxBAu<$3;JqS>Y-PslxO1~T^%IdhV?vIc>IY0}k3N;~)<3qs%YQy+ z*3u(;*`a9MAY#Ps>QS#GASm4SDYfUsT03-3PUR2@X_+ zL(J^LYZS#P(`21T>QBq@=!^$fv6TY5hfeLXXatM;{@g170Q zWFdi$pH*Pe+;bnccn3mCW$*R*zEn#>f}irQ%DadC=VLC8NlvAGT1n^hAP64)3JP3@ zS`jYDCAs7uBtrw?Etk}w5VVR`vosrXkUw?rPVGabm-$E^k^5Bn9_grusR8uvN>k^n z_GD=4)>&Z>ZQy)9H8h#YlW{vfI6dipkFDMLQ0V? zeUH}jFV_YwN;|N2YSRd2f<&a5qJ_d2IhqTkvQ;bnpDot*%bWPd8TRmE2Caw{pApVu zP;@zqNTn;cr)-(&bNfbI6_!lhd+f{P!k|LmDhu9uKRT-svK&oe$ulo2uMDy^_N-;m zs7eaDt6ft;Y(|T1iUQSlhlV|Z0Zz~4GQW#yQpDO=0Z|F!Iv5zSr3(0oFf^e03V4!I zWu!j}xfSeP?AYFL@~D7#g~FN>N{2o#ob!e^l+hzkSXsM^7Enap;x=Vhq@w|b-8GWH zXfk^;gGo_r&_0%-AQ9p%>QcsHt%1|3GV_XlmsV|_b6Rf1pwTw_9}OHiBD~96<-HWP3TvLF{Xo?)d3koqEJAAyA8* zxKJv<0>Gk#AnMdoY!;mv8A%11yGjx){>rZB5$AA3W@Vuh%F^Xa(&Er2M-`*_D|7VF_v14BoL17aBT)?H z^oy~~vwc%?t-f6>%@m|^-1^?hiiT#mKAQ~+LLkEGZARmz12n|KlCz-j)00?*qY)kH)Dp5zsz7MWBqmFYwzY*3DF$`o? z5wJ~!Vu~!$GU=u15|*O426I6XujkLJmo_RVg(8Z1Y%t$931Yh80nAy5C2rn$EoKkn zG9G*WA{V{W8(b3-!7wKh`^!|9jIqnRm2B$+PiZMePk^9>3_JsX`Y=qDXwyuM+XJ}B5c2zfJcWuI$|geE z3vh~bCdQ}q*60`Lrv4)FmSo)$Ms#W|Ev+1_&!GZ!|9XTZ)Mcl@v+50r0t(`Vg|SNk zjqc8;%HmAd{LK?Hh*O^cGWIe5$$G?TjMt`LMnjj%RqKu8)D-i|F$z&5OG<%}xh+#c zkqf}Ka=A^Sbu7I7`!C$DV-wHx85~)-+zWYS@^^ivX<*_BG9M3#FG|hS4-~x0?(ujL={e-RmDV2VP~j^+uyLu}BDq9F^D)^nKfzV9#bJ40#(Z45BWwwE z$4Mp%{Olf>YUEsLkDOv$X}>$w_@o*G9Y(zQ*f>|bSQ8pjWFJnl*9y+O*z$fUaD4a^ z3$?dZ-q1NUZCYzu_1P{{>;-CAcpkil*swumyl(5}fAK!fsNnrM&@r_7?Y}2?`u}!DE;KMv z6V-wndvmNbcFzl5BWl~%u-vS7Xka=GEYuIwF}WSo@vv>k?8~MzzN>mU&d)SYRcDW&-iX!LsB$>;_B(K&AIG@b5>m7*qV{EI*h@$ed+C@q|fYvrwn zhl+vF8K<{v_y*MHP~y#EzyHiGh8m6GdEfk!as08IHOBDt#+}lkk(m1Jg9qz(YP>_U zA{2@R#{)Wp?4dcJrBJ4!R1o-LX3FVuLALX25y{#SD1j;CRfB!8jlX-Ru5Cd9+=gYq z4<{EljMGl%WoIAOy4BJ;m<)Ox^ZZ9qiov`Z zPtr{q@Dae@5Ey+mJH=9CF{RZ*JJ_6Cxm|0^HF zBzOIvb$HLYxtU{`xWU)#-coi`bxuR^^7d0jqNF7g8KpO?`Ce!I`cDN}(sXT+YG8di zKU}W3XRyZ)TuPA~B{?2lu0NG70IZ^1-TV#IGSH#JK&^<)r5jQH&FeI(|3&O_0HsfC zZpt8ttaHpGoW$t?7!feQ3S{$pmYuw-MF8ZNz`xzx<>J6EqJi)f^7G-1mctK8#s8CA zk<~N>J%Ix!Dk_#I%bgA*5_=T|@JGMiJ*myvvtKdM{q^|IlsS7vwx!^L7OZrwV_ zR6_Pz4#96lJ_OkDiBD0~k7eHIw?(K#q&tU8RnviZpzX$b_#4;Di<}o*8>0_hb?g_n zLq91r6WdzBi(lfS?6y>r`b9kOdB}_swB~DFvTJ%s2{4&k5qjaYu!O)~z*Sh`O%93h ze-YiKMLxo7Xe_qOl=*Om=?Y?5D`Q#4j%wVOTYoFodvag@TUbX zTuk}|`Gs!eq$iz9@4~;ut$$4ad@BatqNG#-vo)C;%kN~3$` z%R0irl5Gt#&$wVQv#Ii3o!WY<26wKH9TJy>W{8t_m|>Rb*sxPF%GRn&{)ldW4g_vU z8Ze}Z7zj~By9ky$)?rCn>8!0{0|CRjNjIUw18@8DRV@(VdnaG*R^%6y8jS2$FYpD{ z-`&2~14{pJaMu54Fj4EO!f{QidSQo%h4tsh+2zYSz{EgwQZ~aae~hgl;Kd5@1ppg9 zUM>VufFV5=1b~?LfKqCv>AC%npgUxnTfb92bA^C^X$O28^J}MNWJ&YSEv+r91Se2` zMat18a`Hu!V0&NH-txmB_o}&(Cd$3Ke!Fysxg-9lTrb;f-|5ae*0d!kY?>4d7l;iR zFl;BDV$LOqAN~k59K}>1Lertv9!ISX`d%hZ=|Tw_kYclNT#T?46Mg#gMkF#J+SQHbxiB|&HrCILfQSt=LOVIw>y)nVili~_95bQ&bDBGRDzr@P;?J*FO0$th z-)avgc0VbEILK{^R?AtwbViUv#TDTR2B!*B8L$#}D zQ?6pO8`*ic%N`J(Ma-)bJH4O1myKT8DaI2AP%O^5(`xzUemFG;ABeK`^8*}zEo^#{ z4+Qm5Q@obc?r{#2)~XX`b5NM}bi=qV*6^U|sfB=k?=zJm{P3nSqar7HP=@-iTn_ZH zZ0ZvM@q#1){P8KQkkWTwdpkHrah-m1+ABZu_7%4?^*7< zK%Vg*ZmYJRxIDLfdf_@jwCc>5-KhC?N7`Ke%`OHFYHpgx4Z+FM7P;F*W$fF~0SOJ- zq-zd7V}*N%&HCkQJn#2}hhf%YQx8fLk9rKW4gk^W4S1 z=;<`}39apUnH04#Pbn_SQ@+O8-TIo<`I$PrcAM~Hlm&Pkm8Sb4!6!D(=cB#)SAKrBtN7Z`C_r>(9NN+bEmiiIInpb< z6i@{~QT3`-28naj;>hp)tcQ<=0{ugd_(lt4Dwrc2%SuquM@NMv>qswk+dPUk2)*s# z_g?kl&e^AK(u|wx*V1P6o2RMie80;-eg7Q2uJN-YW3!vK+$-T=m(oXh68b*hlkSm~ zc@%9S4T!_DZN-?`tk9|G{bU0!ZJ2E~Nmc*&r*?*N}l;Z!PdDy?*qzg*i-6OPb?t7kPN&`j!$th^AGgPRYN5j z?Ck(Kw)JcAZ^quK`fv7k%W@9jhgCT%{3E=Q`=Pw#5QwYHK!&qa-ZqY|Lz%c}B1xT# zY}d<$%jhim6y+)q?selY2E?&RFm?`J0Du#RBmE1awNR6`Is}uH1Yj5nRJe17gs{H@xI?J%QxwdO(@Z#>S zMT-~j;4ruhR@|N96bcOP?(PK!cc(~kDXzsSE-iWkg}yxB|1bZOV<*{1cJ_6xwa#hu zv06=*ihe+rtk_vg%Rx;L*zh7jUuou&=^;Q)ltQxQX(it|9epffkgKphTxPsb-x zLkbiDvshsN9cU8~Eh#j@0+F8ywhEi2bp!w~{d8qHyxe9A$_nV5TD_V`Bw{a~mGz2Q zgGF#$25Woq$v`iXPChvjD?J(cN#?>uX#EcA0GcaHe6LdTHbHo_LMc~nfIYptKeubK z_(~RevG2@aGq}bHO}Ac6+Nylmj^Z@z>mqy88lOCAtU4A3ef6zz>;jzyngLI~0jQie zIEhJPVuO3h($ZM-z){xA)A-QQfyfC(jI|I@gHIqi(Ne#KNriRxy{Wgh*XE+%k+FiOcc1II238W@sFx5}DCaYhU0nrsS^h4BCYH+qCzuJQ9+ zlQcph>;TRRY`iX*Tzl^#{~~@V60Al(easuh`;FSNL-8w2DLLq;c$0iyRViDrS|reS z>eoOqFV=tfHao>hVU2BIgP=l?v{|!g(GQy~O><-;k5%N+!H>C1%I510qAZ#t91V@w z5?5e0ShA3i3=9+s8Z&UJYSxg`8ep~{sNP!WV*2~v&Y}Y9VytG#1IJPJqh)u*mrUyu zTHNe>O9TL!0(S=oHiP#guP`bdV&})Aa$GEjoNjgo3&ShF%H6GCkRkRTXNn88tg;jf-pCLUO&~n_mMk@e8%q|vBS{CSe?KSEx!IlY>x)>4(Q>w8Bx1;c#?Ydj@(74xo-1ct3sA|D zz><_>wTLq<<9L(F9nIv?DGdhh&{!PQD=?$oc`#J8teEbrEJ#(LS?By@8i%jS5riY^ z7V$&`Ws+1LW$;WosV3I1{Go;BqL{HsbX0T(g%)QO6Pm3d_t)gk)Ft%0y%Gi*9fOWm zMh3b!8;{WI%=Xp+lvGxfmKY@4w=Mub2WGedIatatViB`xBid&H{vaI zxYyXDk)s>`S|80q_%{F$mB>*M9d~3*V^@`>_mKrmTjJ3Y&2L+(zCQ7iiyU=DVPOki zE^^WmcONbITv~MH1CA4R@H)$4js2WHf|7ah%QKEp#ik zN=A1hHT#miVSZc9s$G)RI{58=6-)hfU9&tsSFS1f9j)S&VDDs|n1p}?mWm1?4+*)7 zB~SNR(a^n%{cqDOZ94DAE9A`bvWv93{N@eTi#QNPhM3dq2Z3%vi- z*$Fz*h`bKm^qx*bc-SQ1-S1+~NrocTDQwOW0{b50Ix#zY{c%wr9bHk4n7e;ewskn~ zi^a)^>7PR$w3K5IMF0w{Ov=L^dhmGi5I25m+r zWi=_w$q?V>D!9BFTy*V%Jn$Dj9_W#cnF>u1bN|0BFr-f3k3fj_zYylvc~VZ!Qaxzw z3rd}&3~SPfMT8q#jaUsU(3iEmG+cOI2HG^MJXI_B56NSP zF9rYYX|F%Qz5nUEUoQB*JleWQUsj0QRJ>i9>sT3ttHxE{Q!cRp-m;QbHQ_pf`0+-J zf}=Zc2y@`hd?lqdWmvFL<8XRKd?>FOF|(=Wu}jQ!t=6qZ2^&>usiSFVB7cxrjJv0J z2_#XbI1a7Yg6Ak`lSD!wD9A{A9~)3O%KacbkMfq2P@?C$c?PBdBHu@6l4;SeSxek# zfQz`c_4F{uRj9}q_(lpN2Y`I-EBt~d&ad{L3s_EUg>3f(4%kZ zAJqnrahGiTsU<=q4FOWY#@k?h) zBSMAa&~%=Tr`p*Fr!PP5kWLwwZVm$uD0OwqM^-;p35i?UWhD!^B)4cC&RzDz#oQg` zXl*$<=np%Dw2`M4dRY+-t$rVFz9UpQB4iZr<5z9tTjoKy7>h{$$XD-<%&meT7m9|Z zSdT6xr4tlNs6+VPLI#}Eko1mq!CpF*)Aa#^4lM%RUrTiL?ibp6YN!%{nG~y=m*+qz z8-&-S>iNM33-jg&{@Y`9uvVUZQgcE@c2S&;Ma9Et{a}?5(o7vDxDTxumjH%?gwyL; z2)Y9{J7w1(g5=u;csKbL5oKfXux%6jSA=Nhs9{oxQXkDqmUzyjAxCYsTb06ib<+U# zWqT5CMuI`dI$Dp$-mI2uVO80Z8Fu_)gi<=W(wL@gttxb0^|@04I}vY`n%onQq7*$d zdvx78JybSTIfw@=wrbH`;}?&q=of=1qsJMd!%f#nx>m7>5(QX970&Zd)oN=dQ?~H% zxAduf z?$na+r?#U{JZ1`WEmDP>wYn~z6t)YrF_bW0!prm`Uwm45SeITGJ(h*upYhTO0D&NM zX9Y=*7N0KoRkzRcZmpJ>I)>Ykdsw-+v^JY)*YIoWwajLy$AiL6thhMehQn*K2 zrSFbRFS+n%vmV8}gF=URr)FDKt@AlD)gFQxM=zDCswICSH}x^8m<>vFj7FP8OYS-K zeauwIVve?=e+G%aN)`m;q=GR6EN_9n^xT#T4nWMLd+79x5;Lv`2Vg}+(t~`eIjpW6 zDHRa5hgwU%@) zt1o#%;p)Y6iUQ~MS_^Lq`S}43BUYsbo8IeSm3(`lPM0G2)g(m~<2`5wJMf229_=W9%{ z`7}<(!~{DULUCOQn}@d6V$WtV?b_>}kKclIGF-$zYdn1QdAp4TWvw;zV(Yjuz165k zD4}QKg?EacMe;qd**a4{c9{@mo=26os8ZzjsdYF=7!cEsnsn8{PPuaV%%zk^7b@jl zH@7+X_&nDuFtr)eyLh5KD0HfH7{zVID8b7?N~yQt`LS)nClm3_D>O7b2}RuWKXUMe z{t2NiZIA0RL}K?i<40|k)~(A%{^YETpKX(9NwT814m6$!D!?_|F}(V8j_UskpsOoL zA5&}dHCcbINk&!pvUn|PvX=8(%s)NeYi%lCS- zh3Jix{&e{6HoPA1iqSHg7pyfzib(j|?VKff)g75d8~F%T)}a7)A&3GTgnt6OunUS# z9FbI**t*54YGEY70@W!#e|(V8OA2NxnN;0lPPc&05(Zly^qxD2II@)fy{3<7a4q=h zX?*Nh(e8!2!6mAx-KB_QQI^C=p-U*jM~`n7sm!nknw5O|Oq&Mm8wWv2dY{%ulN(jn{1FUEgdJwIDM9Py4*MA}@tY|g(_=>jF=$$!AQKXMi%2!qNeEzwV>a_x(sfywHalr3dqAa(_R>tt4N|L z)5?^6=yXIpdVrVD+0m5ui}(y$OA;#s6WiD=c(XEu3`1!=ReR z0oP|>KT&p)&uI`^lp#T=XCqW?U_->i4|b);c)JUt>qioz3ra7>?4QEGH6{RZo$8Xt zn5aEl@ThDkq_glm(1boM-TY^^RwzS^r`UCV7t6is@e?LhmX_`#pPA&NFT$X9%Xr?1 zuB~nO_7B}JU3pu!usEBwTYL)JI_s%@ux+A}`%1p?B7t5S6%}SZgB%EiDMb1IZgo%G z5~Vq=PDe~``I(9X=>W@%VC%cK96WcBCeI(I!_#Lz-dv(J#Ucn!IIL+Y=t*3kNt2Q$JRaj`5-Dt0L4u_7 z)H@-F02489D*#wJeP9j(qhKGudUl4cznPBUAXC^6Z#9{`1d~xS{spW2@tVd?Ph#TJ zw9-+;dTkRRToz#CXpc4O%BS+yL#Ho{FAaJac!lciA!WkcXOb0bp@Y9D&r6YXEbwrt zL#&O%xaT70s4~-1L7WPNv6?qB6&hLD&1~N>aShH1s@#9*nG2aKY9&f@4!3@`u?K%4e)=eplV`y78Vw{45~TWr7IR<0nrR1_r5%E}5I zhYAo%N&hf{M(O;#s4sexBaRxPl2bgZ6)WUlzh)-DeC%b=HJo}^ma#nA;9PPhrBfGV zrEk16WNW0OkL)BIb7yY3*0^M)KpDygI~IOYE-w*^4r3@0V$B*0jR= zK@NQ4Wb$%)C_qJ%zNgbREacT6`Tsv&!-AH7+gIn*O&P8Pz{XMy-faKj>t1?SJ8#b} zteX+>tKHCk)_|)74u?A_Wka1hhzR^Qop!a#?tcfu1p!No9OnRm_|u5iqb%dEXR8BV zdW;bJvaSjx4c{_;E7b2AC|;5-H8(NeEVo+Zpl`x2Z;$=}!hp;<-DOmh*O^}(s_9zw zR(>d69%Lypvu>e1q|fYRp?&kKeC4Ew=At#3u(lOJ2?OJMg$$DM90T6R!K=x>8PnC(|Ki# z;(Pj1Q0Su9xz@#@i?`*fSJU8C43^4!YQyOomVoYRDv3@;R6Onr&fP0ak z7!syyLBWV?8vD)CJP547JDftF*8O!9A=z>OIzCFl<4UJQ4kqu0)-XJ^vn=&CYGvv9OI?p+5rTSOD^SChQjBls>!sjF zR3nTGoLaUh(Z@4QPH0f`Ref{C_oGr3aCo$I@uKhCol@HKZpY=fr4MBJZioirlN0ft zwkh3akG55==R1J~G}BhDk9m9thnMbu+T)a-I#0et#dfGkw>W^4PHNuz5jP&?T9ztX zUrOlS2S_-_wM4oREttWA4dRxJE_i12+Pyk795rsoHa7QH~W8_Yr|H>At|`DR6lO z>Lel)DBwvYKA0*He-%s*4eYO+d4=21lfM1h&w#H4D6z&`#v0gT#kfJImcgF#{fPg)W5MBXN0Bb_&2|$bA_o2C13GkXmlInYBnuGj;{B!Zk7<#_~*JtB@3dsdOknwkfoh?C{ zg=pHW4v{`==wWPMRLt^mO*C+Kyr(he-;up0RZy1E86n`3VnW%I)e93q!Yts4|M+jH zvKLa|7NQ%{ZJJ-)>3x5l?DD^h(lj}y#+rRZ0kva270^`+Zy*r9f?pREzgyxm4k`O~ zKBKcBU`7Yah_uTWIw^|ydGRu)sngYd$u7|onc(A##QvGfKVsc*MR2g@dvkE*EAEn! zSrf@cVsqG5_i-z;I%3gb?LGU=G*Zv|)mdGgwhTjd5Gjkysa=hhAZJyvg}|(*4%!mC z*h$f;^|&gmn%<__s|)Vyd-iT>J-~nEVo&HU%FZoJiaRZ}ee6uDn2_bT%9BQ_@oFAIc2@CTA7|H58K8cT%MkSS)(7}wmmT^ zV59bJ={tldi#u5RgMwd<%0-~FL4pw?mk*AKtH@BCOtWi1~t z-#pnhu{q7atYYMV>{tgNn1#*&bf6cC+7bnFI)$R0RLHm8B{NND<+q8^&LHuwjJabu z1zby}w27==iyo@>otfuZxAd*$UTmMmUT|wSTmHLb9}6kVN#HcDd1q6Z;2n!ezcU}g zS_nU2nuz`5PP1oR=XP4{pn7dApuuN+zy5hviG+U7E2oG}5Z+7bS7dx&Q`hpYEU0wb zK&;!p*X_>7SgmB=ZTd84O?OKC!X{F(#MDiQwp+t&5vf5BPF1C9Y5lL*Onxv^QmWM%iTKk?BT_nYE1ziGS3;?WZI>W?2~9Rb6IL9^$*;n~ zQ0Hl4RRmIK2pT8bH^~YbM4CN!f^eea$WRD?rXz)mPp`D;6!%yNIx7#r(#?yMqMJdc z1sPA=hDnXnsGIj|z`eUF`!g|lizFL+t#Gkfp|bJ#?BXc|GAoSQ(o)hro|o$dN_R@V zCdXEK+1~MgZTyGyGnH=F**D*bU%Pb~8nqSpa;=e`R$p|aTywuuJ#KUh^TCeDAIf+4 zc~ZONFf8>W>*E}j&^uvT9)4J}<%)|KZ`V{2^jKE^;@j=t!;;Z4vR>Ebew( zL)rlwFiBwmbQqHsZ2vWl1inR=q5?po_V4s`ev@L-D$5DI2N?p|Jwk}_?o^Lo^^F-7 z^-vlD)u10eeb`B7M7VlkSd6b9Wlu$fRaA2>l+uU0Q~dZzG)3Ly zFw4&OrW_$jd9zFe5z@ktIRllCQXJ=B@ucRU-zt^5{^r-WRvTefB*cH{^1fZwMk#-c zLtOlLGtR~Q+yg859@-Dxyw1ICz5k6~2E*VPxo` z&6JOlJeD639SVNZ<*&u-)TM_YSEgPWqQB{b{pQ4jv<{BIxaUn;h=OgoOgLcNXzK&@ zV$#Uk3IWEypulL66YZHm{1V#5axsH!nZ^V?1_lzK@Y>j;U96#3KZgn+{7qqVc6Rq5 zdOL%VwIG1^R?+|g548D6q=|5h%BZlXThGn0j~R|KDC(dEFt6cFM8;7wnH7eY!b@9* z|Hdwd>8}3s&*}AC_O0)I8b7{HJWr&Ekl>vej!=wNO=|Sj{KzbkTxAmO!JFGHUT6J{A zmxm_pMR|lbU$lI-o?c}(9M|pGr$i&B3!&zNXLfwbbE`{T zmliG68%!MuD1vJb7}Q{vxuD&aQc62yjz|XT9Y>x7ub@iDjGZN}>DJ<6F1!Hs1z4C0 zXK!QYj;WKGn%Q-w92)0US_7^zc@-!A?9(^Jl!T3)z6=?Q+bOK)jK6Hr#60i2|9fbC z_r<<0{ekrQ#M(1KG;JnJTzEoRb!cUNFF?E}VZ^DENgQ=Jtn>2A^B*rRifuw}pqtt_ zfI6cmQ%#gb*Y9uk!PMTbrq$D1! zdj)tEcp@W#q`9;WiFIY{%x5qjE)z+;KOrL}1|fs%tNsgWS;yu@NwaU%)*y@rNI;wV zzl6~@JZ3Nn=Qmi1z?l6YMQPr>4e;>WhRI}(T+BC`?K+%Cdb5YckKV z!~63e5)ab)w`{cq86VEKoKLN?Kgg4rTwgnJv<`I!5`|0!A9d==*JmzpS@eqkP+O-K zFo?~!Q4Yw~m%uj#zzdmATqjN~02;tg4$dTF0{|tR4VYab4^L(E?=m1M1yW23_!5m? z+hU-^{4A?9{m&$dpY}aDh&o3AKg34VRH`#)5&Z{njhGy!{bLBL;FiOwoR2XIQ@SQu zMV7K>;EVFs0Qg5kgL^<38@%Qab!YCR#-O&{t?WAgbmX$_AGJwu>jjIukM##LWPO^J z`s+Uy=vHDkGl(rq&Fr~b3ldc_LQI(mHVv0`&LiJUQr22ms}b5$u2PkMm5CY8vhFW$ z{>c`;g9=kVr=gc0|LmJ27#XfnBG3L_RpCtet@&7XN@aEId%F|Lq$$!U@!YRbpQ~H> zoC*PjhwN}Y_+3;zT{Nc!k}2j2hoB*#fP!HG^wkR~u+o~qu)w261M;y=gIOq!n#Kln z$au{P9WCl^5^`_uZ&6?w3nJrC1lnz6k9{>KEhs#vFT?wuegmKaN#vyEgRVfBl;y3S z6O3`>Xm1nYHkM;~SRWhj)T_eXwEQ|XdHt&n`x8nAUBW_obe~Z}LR>zG*?Gnl-u)g_ zEcnoSxIB7$ecR*h^QlSb+J3|Fv^CK0=-vZ|v74}pN4T&0-jg?f4!@jl0!ZZJig|gQ zy`C>;NUj#hu+)70q0g$nj2h|gN=34XZ0yx^LH_-4nroxIDm?rejhs)Pg-bFoMx3N2 z;CMe*ff}Qxb|0{lRjX+9B>vMWHsNFSz5=(U8lQ_k8{vzBr4p1# zUHezLE&yP{-XWo3f-`cvI*ww;VC$sN2}lwfw@Ft0-%Ticv-%_wm2psaH3DWZ2ZS^@ zRq&sa#oEvK+5K@Sh!_+QjjRnTk5JU0b*j;Yv!*`S63KFo_3j9EG^Lh#C@M-XeucLb z5#M>o-ngbdj)UiRMW0;We{2`Ha)i!HTF(FVm<_j=A1Zb4@+Vz#KjGkt346HyB60U{ zhutx$DmwapYZ3wztXp%n;vymgK>4m0PXW^}Cx3<9*}@Gefap9|KmYuPlWVWZ|LPol zQG!KMjZuabZVJ1t@!5(xQp4AD-mhAW^U##vE>(X$Yp&zG8Cu)G=cca4d)MyUXsc5$ zKgUk@p!wfGhqYQy1)oEX>1AT9!7IO=Ba04}$ZRbnqCN%#SKM~kDBaN#92wm98#D|TXknv!WAFPX6tZs^dV@HY_tVL?Rsy+mkei3oyf;oLil){lbuUD^#N%63y!8Zc`p_$%>$1*9aD=+^s(3Ua!}vD-+E!a|dZHmEJNM?3 zf9{RJ_XIKhQtR=wQx9T()#3MruY6PWErw_7(+Y@PM>{;4UT05Zfgak61)!Mu5Aq7z z*es+J2EAn`zc5h;9I0HAs+nP$K*rc9Q|Pz6oW0y(0a259R?%VhC4Q7L37-{ab2A8* zsoypnuIRP7(dLB$5Q8M_W%Xd|s7T0~E&?$EaS$Yp2I8^@5qodRWZMf4ukA({{=`{G z0wa@v_G0&Pn6s5*?{c8jNxf_mwN%WKy~kR*Q5(%qd-+Hyr61WB>z`Rq|Fpc}Yo()A z5^TUb)BQD>q4qpVIUQx2j|JBG5%&8F)f~e&7a;OJqYz{*Vq}xfW)(tnK{KQ7v0FLb z?uPP(nwixmpr}P{tsYsV$sCtJP{fWfp#TE#DhYE% z*)}2+j+L87aCW;l8oNL3aQ?-9m(Ut8t$@{VOIw(SLJNA)XQD$Cc>k8Xw3gr%O}&C+ zi7c62$3I=g=sz3iJWt~Fu8ar5q@`Heu4penpsSjf`%&}#gCO4*`HTDPe{QuMLahI7 zRFUU+>Sk3XqCIA2sGaV64)qIKs~kE$_hh(V@-L7xeT%V1U?NCKiN)le+`0Zs`fuYf z#s={&@Vp4r=M#7R_&I=Q!9Vcjct7*--(Gj#I#~*73AXVldgwzROp))s5Ker-xO%d-H0#c?#jdA4RcKG5>}>VMJhC zk|H_K^UI9%Hc0`1cEO!0v>7;Mrmgpdq{YjHgFk&AnjlJqfcnBTmI>iH8bJg@gx(T% zug1i;MjZ=j^l&s9BG8K+G7MoA(KfMLgX6o9J>4jJ={!zDPQ<==|C=J|xN+(bp2m-8 z0;wMrtrp3*B8==3Q$7-yt1Y?TpLei(95*Rg9OPs~lcIE8#hP){Puku+B<{=`rD`Zk9z_S&zif*}ZEyN>7ZPQwOWqB8|R zk^BfP)lB%TN_H5qE+{uVYTU|VHmEyqA8-Pxnzfb+3J1(S0Fju;pvI97`u>~Y#GGtB zzA2~{ttMFR`HLcZMFKIh=V*Q9PZ@IPkq_Z}QveGD+7$JwL@J?WvrhkJV`9M#iZ)MH zr+J2bcVJh-7U3I=&WWyu*e{0jcR0&nIw1&^F4;CFPWpBd{)+n%G3Dyx9j5(A&e}Lg zeMBaIuMo>YLhV3nUeA9`s4U%kl_*sEC;M!(ZjcJ#ACHCx|V0Q$)lPg*Yl znvgUpsbBH#9J)kL)`^--XcFVL^t4cl8toOc;Z ziLW+O7jUT5mPMwcmC!;YhgE{2Rhij4eG*Y1$Qa3b*SsI;`KyT|fUrGpOxbZ;6+>FxS(KmC>E` z%g~9-CO&s$H9ClAh19QKNr4EWIXVEOKP#|uhrku`NwmL!D-k~9&~yoZLNGh=Y!nZa zgVCbe!Z5GJhg0TwoB74!pZ*5Uj!q3}(IA8tZ9Q_D$@5Cv;=2te_Xu$#kP#rzgI>ml zz!8|BH*>U0r@3f~lA5$c{;h*mEj&Sauok5;LllPO{{uOHax9jns$?ex$QS7H8)HF@)_t(eM zumuMLG4WLBG&0)XK1tW4ZWra?rtWJY&!TtI3#86Nx9@@46T6no`~JJl$@$m94pz+O zrGwtjEhN#q=A4m0;pJ4NFO~4wNck;dYr?hWqSwWVL*1wqnft>{8oHErb1#2y0G^CS z8p1lQMX44RF-mnpQkCQrIou+J^b-eQ*(XWFn@V<8a!1 zKj-HVCXBq*^G{W9;tqbsiJ7k2;5o8bLs6Nj_9N~I&Qo3-sV z**YEx8t>{@?h)YS;8GaE%!I4`8}dyjV1grzK$EX zXpEeY#{g}Ow2DayD}3s|;2bjrgBo^f(oSA7lIrcIdof+b^U0C*K?`UGn)*y(qU{1# z)bRA}M@7Y`;7}&eoadN?y&^FhgPngK?}Xl|Z7>qj0~uy*|EK5{=@w@N+5xW{aj7q- z!)h#2i+E$cDHVFM#GbrnD>}^(nhIiZ}=(n|3ez$!J)LoPrD#FcGIA9|xl? zN{ohd5RNAD(9$KvO6*N@ww3kxnt+JC-g%@ON4=(xW7+n2#ju_c>8|cMx+)#7a!X8H zaYoqBLIOQ8Q0*S9OLJ;+eZHM7&%1p+zIEezYWy+6`n=``Xl1iBI*(^}lF`}74Q^f+ zsr>VNPPiS&q?ivNB2-tp?M~4LD)r^nsU($-;gB?InGK`KIr3qb4NB7YE#t(~tHV#} zDPikh0y4GZ7f#OSD-})$?r_EG)uoVC{mN5?P2uA7Tu;D{q=IvgGY3`KKLT32_M4d&1 z6JZ3mnoLzmnq}y(yQ6ghR#{6-e6%?4p0cCFP{P>*{IT71?rGcOv$%upc6>NxZA)wY zipKH1_1!Nb7o)(E-rN6bP75-UmZ|lhBZ%bKvI9Q(J?(ri%-<}WN7oXUMLN=5)@#RF z_mBU>^dYs0g;#kmw(W<~oz!J(c?X{|jIuhQ>YPRlA@%Wc1-&|G1L*Fmsl@Mx>IGq3tbzskAu zS4%C|+WZKi>0H|#7sPBrEhb|PldMNJQ`<8_s>K+Ws?!NY>#?%4N>v@IwAFl(YeEMO z_swCEo<&Az82se50Q07wj~@;&K{u=3H=5~xE-g&1gEHM}l*uTT>1b7db7nr{J?al- z%faSHvYjHJ#RxwtGv`M#biYub{P-G1R7vjssk<(qlQ0bHtzDrV+2S_5LeUhL2fzje zD5Vc0jnRVkw%u;H01&JVJV`u4f3z{pp`V<(O<5HV_b6J-TQ{=m z(f-pQnvkj$c>Bv`ZIHNBl#%Ll&r(IXnRwu}gpGemewOf#L9zRgo-B6%B7*jRwtua? zYfCP?4t>L&XJw9^8xnP|T-$u}t?n zj~tacAFp^XB6v153>_mnn{`JIQo2^0Pjccqcr8ruUj83ddMGD|e$GBBUKr<8R3sam zQ~e%ZAjt)a&HS*Y*dSaUf*{@Y$Dl|ecixDrZx(>**6)1STA;>3ZK}MmP>QEt-05#Ezv+79gzJ#;&+#fk9va7|i<`wwh)+BB&C#czF#emnDkk(>2kfh#*6oJh{mB zc1dYiD&xOO*7)#pCPzL%FuOJI<@zcz!5dFbi-SkUC-W&=^BK~yj)(}9il#{ETPb==ZPYg0^<9ABUAYNwFDk@fs9|02Yfg%J2pU-jN zObv8Nze?6ix?8hm%-WjMrcKX{q{qkN<-*sZ?z(3Z=r2%z=NmVxF2)bs=h~*uHIc*F ziuzB`7pZRALxs(H)~;OMCvMJtHBgJGmH5gYpmMU}^~l`nNL}FYxxp@Nx$>dV=_>Wf zys|~k{(2J+*+baX(oMIngC+^mPr4;E?=>uRcP4OH1|Q=${z!+&`QdzhlP~M~WkHR8 zkKUc}U2w5yrT$l^=^?E=yG?kW)y?uX$-Foe9UHBBg$RX@3N@y}7+n_pbCxj|H~kGh z&sNC_ciKt`;$@Z7L^7QedghEt?p(>>aXoIAL%7xC4TX2+LCbEbCnuNn>{8#SYKHH* z&3%ltbco>kxt{UbDdT<_jEKyM-pC{-M_l^R_uP{c0e^#bHpb030o4B$bu}4-WB>;a z5(g}1ae&|s`R2!Hp2yg%elk0YHZ(>%m|sX+dBZ4A*vPr&;oe0z(8KTVzsb$h=XJ#O z(`KZujD70?w&y#;W-FG{4VrZ)4y}eE14QMZNxz+3ODP8L-r%pD!&yZs(Pn+m2IC+u zuSwUeN8Qu$baln>A$CrjLHhT6VTIB zO#v+~U3sig8h+C)y+4Os9(S>5s&2wjY3gN}2GCj;_=d-E`FsJZs4e|5Uy2`~GY& zaz)q^<)LATgg<}_xf*J3`6gq?4PKOo&br{@Ig_p4`ZD=e5G}L2;bGCim=(3ywDoFW z!DTdsvX1Z0_Hrvf(%D$#e;ok;DPI6$?h=~M#%x9sQ?cj`SrIvBLBRgs6WBzOG=&X_ zO;`;FU4#03Ehf`Mk4ybfq#D_EphL>Z_#FovXP$okRjH8UGQ*C$wd0Z#&~eJuw40jv z=T#q}c01W~E2GcP{BkXic_tL8=^}9S-C8@$rn=nnAZ!zx|JpF5{ZIxDD_O}|H|A$0 zk%N&4@4L+^iw*Xe_`DyY%4K=5q?al!Y6A_er)~p!){Lg3V(hBp-G;m~QeHy-9NV86 zCb~7Qgy7?i4%5=>9|nwj-IFjd))qrFzu|}R(@}GPQR;8Eb;j=^o)>c} z$$8rIb{sy-d*q0&)fz*l@4&Vm>Lg$MohA!14tLp?+8D+}J^V=~1Q*W_j(y&;ZJ4Jc zko~VdD<#uM3Cy3SYfzyg^nDq;Nb9m(Wq7KftAoRf*rnyjQBus~;#Ds>OUdWcO;B9T z+UYAP4q_zEu8JQcK3myuZnw;7PTh<2+`mxT__X`3Usz>38hX~~-(~%pY`Da!Lfe>M zw6<5yGGhsDzxv8dCYVpe5mVDT5)n9ka@izQ{-O0q>$pQ5$zu9%r`GkP(*b448S-hv zkBrMY_lqWzk^JR*{_zTOdvvDL3XrN3XSClyq4D?UO5?*qB9DYSV*M$*UQ1f#sMr?Ql4{H;6YoXfvc$()Zy?_S4K}U+ zEs*Zrx;?o&dtQ)C+fPqYTe=x@)*krIL8CI6{EitX(zM3Y-hL`TQ3o)AEC~VAEx*27 z6ea5kVg5>Te=G4sSl*kl-@^x!i&W36Wps~yA=ut@>r_YCBKk_sPV<` zr5HJnl5`oYTueIXevbuBYv0&4ovL{zO`)KJ@_mQ2W$2h;w*u^;Ae9e5HI8x)lAYxb z&E!6rSFsP9T;vGK{u@EPh=jSScW3knl0I8et(zm zoG6K+uNiCANv~cK=UF$Ogg4iM7OF!BY6U$kW8SJHZOVo-9Y!D3s&YH_baF$MW*T_= zqdQ@*+{u+t-#TLN%LJN9ka-)K()2$Hx7yWqxpmC0_iA{c{OGVyW!A=^EMY<=+-z+x zRM=&ZwTet|UfjSab#zu0tERLS-$+z`{-*J=@8al={Rb!b-49fTN*7}J&V6IKMX%{x zEc*|iT@wu_!<0Oq_AYELjqI)@l+S!dG~yL!F{4e<+>MPZKHb%IXe{mro@u3yU{up% zL?7fHFZ>ldUGH%ECf~kH(tNpR=R)My*nTdd^X=D3gI86Hj$u!^HxX(?)4l%kNDr@f zG`Lw)GbLSDaTpD3h$$i3aJl%;w|8m&$Wr8_-3U&1j*H-dD5u9ttMQqnwc4_Z6EaL} z8gc{l*(ZY0uzX{^Jiw-+t`!!t~>Et1nipa5;c zi4;m{QIIpW>N3gIy#ODav)JFrvBu_1P2QAj%j#)~6`=<2pLx=jxoj93PWP%)?!%Vp zyrtjFwr}}deS6t8*c2&QUJQW0=w04US+z7ddry#Qao&vt2=FcqJKadx^y0MrE75*T z*Pcz3T|3;jd&l+plaM+z!!Pcu@bpreLv0|@NnzLG;LGRp$p+i26Y{1u%M5WEk~TtD zUPi<_K`=A{v20N$Q#zr$TT3}KZ*|cr#BT012Ch(<3arOt5fdwZWP;Q+GI3C>Hg`+~v#+#+OPnq%jW z6<6RXZ@2HN#~T5JjDj=PP$7!(i|;pNS>MpSJzPmYqOfNiY3|SyJJTJUuZ2}7M90VpAwb# z^Xn@1N=>K!%Y)kx59K%g6RFYa`JNK5!%Y2&uOiM^-dxR)M_r#k4}^e8jPMWjU2~w0 zjFU@CIUlvaAAi;%rRuMx*q-9E35#zdA^UlJ&KBGajCx#0`ZQ7GI#NM!e%J4Ye%sB& z+yIKt7{edqZP)5wqk`(}jYBzaCw?hC*nU>N_u_218J#Z-C?U70PT7C{wVc4m zm*F6_w6D{X!^;lV`ccljH>52(9`MV|wz}$?cT8=8djXjcNDH-Ul$a-(qtz(uIC1ZIK$& zl2-KazfI<~!sEWOpewCEF(8cOFlS&Sz>zAYT{g!d z&iG=l>uL2Ly*cRK%u;#R?YLU4_4e0W*{7ZgiY=-mYsLGy#{7%=)^Ejn#ApDB*@cKUhtw2)0-8#|MLHJF|XV zKc*!;dzj@gGUw$eyQQr@Y@5v*O2yXp!+Yj7hD~Z9V~%tG<3riA!q8Kb<-0Y8qRAzm zEKzf+obmUz#uh85*}qIit|^J`=RjSao{wWb?|DwUGwbka_dc&qot91*l1ZLgCu`EF zB&=ozRPqEqY7KKeABGD?Us`0u&{{&N6zW5W>;PeG8L$B%5En!S5H><+w43(5Fu&@O zP{E_{pdge48@K0{NoyIr3rax~34joCmPU%0Ms8Q}BtX=!s)3b2j&+=BjkM}qN!ayB zk^~@RyrP$(R2qX$tc?N=0siYP%_XEUn8333>wF9n0f1*G@K!9?nVFf@p^_?B!+~d_ z^VNn@gMyh4#4 z)*TDRJs$eJf~b!J3`#hn+&q2=k!hAfiVGh=4vg>`Cr=Ig0q-ej6zlg;AJ2K^xm zYkUtTBXUyJ^>8g+igHuBXP~>AYUN49l_<`vPSLzAyJJK|CHzyC=P4cwMD=2VeB`# zu-E&2ez@ApR%(}~Fr4XPzy-yu&pJzGbp%zg_sk?wm)93ooqK-v=RE(~zjU98%AV)J z`TF=gjALjXV5T;Z_-=~!(99;EyIh!hdtG|Os$hjUs&>L)*V$R!*^hf3m9X~he~7Up zS+*_oE(aiOPdpsL=<1!URcQ=_dfJqd;5|u-UFs@9jw?_csZPBJQSwNtmo+Asyx>h7F=dY{YOqfTq-RP838le%KgUfeXJ z5NPQ1n4VX|r-p7?Cz3MO2qS9tSYEJ?vFGhJXYpv7qds!WwrjF7*g9z$GMG|3*eAaV zZDdlSoZ?=siRiD+uUb8`a~`$RSJ7a35mIWk3I@tWPbs`pQK^mj@#>jSyMf5$mh-T? zx4>QJ9OM%KEC7JXKTP6GC@P}zAwib|5zLa%G?sA&nYO>ZTPzMQ6}Gq&;;h*;5&^#3 zt&>iUQ2;DozdFVk3(+Ki`>I%Pwdq3lo`v98uA!>BH{28-ZpVA_*vJz_FAOxTGt0hcjPc$<1nR+{W0g;TYquO_4rDz zA(x6j&?ZJ6kMnYW%zd9zp{8S9s+tZcq6;`YK4Vt$k*Mx484ljCI{f+_ zc}W8h>^^WI0#7~;solWtbC|&n;cT$PgDnGYKkW6|?4B-f&J6p>Df#D3RAzp@pZcMk z=yqDKaZQ=ELb{<34gtO^F3l$=aRA8umgIvG09f7w-u~{Rl#*m|ud&Jms=DuC` z=4hrXa>6h~*&q7PXE@0kF_HbHcaMkKHK73=vK!Hk+@Bu6qovoD8;{<9WJoD}Rq;|K7RZ3C8<_Iy zXJV2&vAkb`0k+gCl==-|+HmPwW@k57bENqh!VZd%!$Ti?((kQ??gj~fMaFi{m>~Fy zaJ#$iHV&ps!FoZzjJs&&_(-5F6pm2@1pz)wcHRdq0N@nNfDZ^DK(c)2holi<1S_KF zpi9X>#Q{~WsyoD4Z)g84zV-EF+cBx}=&9Fho9IM%xw=Q4*N?}O_2tX`egAoq=OtGH zgc6`AgmMD45z}Or{*^3Q?6ErPavskjBYS{6O}HOXoPA!}9(B^p_gyfMe4o-TGprTr@c174muU1u(mnZgcie(qmzACnQxjOn~-MPGfd9s(UJ;fqpJ+z-6 ze=SZsYB7N#5A9{i-DSv%JR+I4)^?QxoUl$bq8^5TuX?Lf`Uj;dfJ!O31)zGoC`b6#K6Mo8|Q6YR_~=;yv|&*yKDCT-p=EMp;|X!X5et>C3(Lr zxk{xpm8hzs5)qZfbK08;<>>U-TkOuZ#Fn-I3vtO~CAZ7?$c4qvuIAxq9T@T@M-oK6}+Z2Eky0#3=S^j1K|= zz;p&Z7!C5-NAa6@$a}yvB)5E^Digk|m6(usT5)>%oe|Zw;2~ZP)2-%v!y5 z*UOq|nyN+H8#(_4X+H=_RJicg=x5s{sH8Mo$ zp8NrTWsDtwcn813Ahvv=Kn}oYD*;K{_xvRlsT3vBa);R^ZIKgfVH^vDCFk(21m2r} z-w4sR>7+TKWB6u_?ng)RD200JN~HqtPD{jH&3tg3ZXI7+PiF}jit zS?^hB3;_%QR@vo&4+H>kx#fThf&l@N(Juf%%9V^Vqv_0$Wme@_Rh7v}nL(t+#?tU2 zU5+Q&N`3ICZP;O6-u#0fdHcNE({1O{aVx(xS*)KI>$vo)v)*UE^mt#{p0#o{78KNA zT5Ap*gJc?S55Gq5o>L+lFL&r^&1721Jio zJ1g2#D^@t(xx7p?kl7%n?ZyFpj;yH_U_DS*Cs-&l$bi7E{01x4^_!MX>$BfRo3LbX zX!BTjf7#hh!)U8sRn9_q?+tk>JFLSA+7uKw1H#9jB%32g1Rws-DeY*C6QPjk*$j2f z9pf%Bjee$G6={0s{c)H9I{-vqmg7zICByOh+9Hd=;_!wc)2Y{J%b%#Z$Z=oVpYwg5 zF@O7N?YX(B{i=6yUG4q$Q`RSg5X$U(0XP6WSCFMN>S{yc);kqj5@pD|ZCd-%xOmt6 zW9HWyzuq0zEd}aURohD5MedqBhE{U-@~~R=j{gEd03=a*BgH8S4~XsT&>M1SSv>LP zRjZkA-FxT1T`9r({Cx6j-|5`pq0MSE-9)s??fU^C#jQ);4D1=OjnRZ zjZv0M@c{RN&1|eL5~P`TJ8^xV)^TlDe+090dav$P?b}too?_jv-on-Ow=`E3@9Mmt zl`CGI0U-ezX|(|ae1QUVomgH9zzYnZ`y5~0&--O-wpvbPzjc3g{{J}!J9}aDlpr}* zv8r0}`*Qy~S32Kb;?z^a=>9r(J95}mxB1vme}(Z;#f#DJ@#r+#uLk|MkK6wAdd{xJ z_?&(x{UD{?0veK>d{GkgGUxS?I)l(3P-jkU!PDv(oSiWH?2NVN?QY_G)z{jm@ZIj~ zq~)o<#$l-QHl{gGb8fF$&#E)5cCwqra{N?PG6z_)pWYx~F)M7CC}Oge?XInR_0=A{ zKr$F3P-K_WoP?_CRw`(N+|xQaB_?hfv?AHH=7%^pP13spzpohtA;=p&Q2L z;jj~FN3UZN`|;v2-3>hL#jaVtn}t`L&XxHQ(>7)q#|-uc3IU#K#SDVrFfyp6eZ^`| z0TuxK_u_WP&Qj<;#35I#a@E|}V5(cqY%c~T+s}7{hdVCnr|$T-$Y1yCTRnY~yt7Uv zPhMO-sf^RS=;^gOF7vX*+>88rgX(V5A|~bZEcpBHdP|Rr>H6A<;zHSKs zq6h}k+^0V(U&haOd!Jra4Riv8anq^`sBtUl?~K#kvm`?Z(Pu;q%emcZ^n2gTw=>On z8a3yz-3Et^97E6JiR%&HH7b~m4FHk>i|4I(nW{IQ>CIi*((i8gOo*4l+DhL8w0s4q zlVAs0i4{)G)bK?f*bzAp&D-`nE^dBRZ`KR3dCu=kYI&J*d~^W#DKv0HBLN3(V=2W{4 z1J`|RlbnTY)(c=54G*tV{rvL!dSw=xxrG^q23#bt^gc(sKF@l1XkNGZG~BdT0C8~s~ zdhSIF(f>)3*apJC*;(tWyg8n*za(LQ^&9|%6R5~7Tw}lwfMp@j*|FH1P}8Pfd!3y} zk!cYm00T0AObK~TDW%4o%5Vmy@>FOD0viDyswJraBR&R+5q7Hhu^K8_sW_sSN&m-(Kb&fMGL~0X+hxtK36YC3b$ox4 zIBV1;KaQ>i97`AJ;T)R2vWg13D{*hoD2;c!&>(y6jN>kmbdj`LFvaIgN%l~)4hd%5 zkHuWPc-34c2li|Lxi_@C&E~ARw*0P!U;VfDFDdS^h*;4xf}s*WWL;O-@l=|aJUIp; z89+i{Tx{Q^akX01mC5R5jbmH#uhym3YmR}oO5Voo+td6=0Du7~$VN((RVsm@o|D!A zyHzss%+ZC%?L%xYEyu3wt2pru5=bmI+_^KQdVCdMtk1dN3dw#vnz!|mReqKfB>))# z{>kOA4nY(eGp5(AjuH|d8_ZbW0wVIp@Y6l_?juHztQNAWhKjX+lT??y(44AEp84L- zoK;>{&Z;M?*Y=+#&&hpo@2NM_a`p7_oE%*|WK>t`VC(}A4D-D&091+Gdg7#y82!VG z_j@gdO@Eht=JPQ2ZbZZ+e*=J^*OT+vi5D{%eVmHF(|DpWHIFlEPS4lnIQ?zr=>J#` zWBlCnZE&3IV6xgpuX)XqFPbq6&k7Y~B0!M$vDFhVUX?YuBjNRp1RyCeK#BbQTJIHH z_6&U#m4bXwc}0n)%2#jC9AbQ_7vpixepR#lchB?6UKa;&fNdbxkt|IJvDZJemcv;9IDbWUD5b0Igz_3_CQWU zgWT~--(JjW~S?B7C`>%Wn+{e_Tz@oY`Yu`n~%CKtDBv>V12CEC+=` z=?&*hD-~3vBu{K5Q-=dd$+M6jjuqXlkWl>0RggMG0JRYSD+1db!4l1KD|w(a0z-Z^ zz{pU7__ZBZ;3E{X{m zTNNWm*ZZS`zGu|*^Sk%%-1TVKdU9l{L~7?329G}(LDyh0qGWvks^HAj9A_{7gGK#Z zuLp~@yG*jEvJsurYsOugbUsiC+ulDO&)e_)`DC9cuc+l}Vaa1)Ky==Jd>#9@{)La# zom_INvQ_t$v#xDV_89B&zd2p@uiF4Q_8k3t*e6RYkS(me$rlXQuBEP)pc=?kp5NJh!vvR%U0|5en1%S{JL?5K20#YD#@xf8cYkQ*pX7ZVc1rB*fdUKxo(Wc%n;DUo zzyRpv63EOOL`pD$Hz`Gq72)N3))>%x$)15E2^G?+Dq_TEJHC8uN@(t=WKx+?b=_v; z?qC{nC6R}Nxwd+Ld+_%UQYs#A(wBKbvJHEFbDwh}4fMD^(SYY(eO4A(?3;2{ttH`E z3O1k|V6!TP$1#(7I9IES0Yn5sLv(?V5WWN;fzVJrqJ;NSCDqQYKWGDB3=pYrvtV~` zyFKVJoHNeVWt3|$dqSmkkSn83VqNxpBvr_V3c#A&zfVHM<>kYT<`&qsJ+5Uy^nZ2$ z9|8W@wK;KA7a9qR@Tjv3kOuf@0Ok*}%jnGtU-Kgbu#{fLE~STDRYEZ-A_6m{o*brY z_oO6wo9WL|nm%NTPEe0dF@r;*_tS1|q8Ifp#?GtU)sHljQNz?{c-)YEck1bJl=f}U zao%h3u(-`rV_>6EcT3CkA!#J~p&&J#`B%+m=j8`E)8_exopBsa|0{)a_c~{)-7MPb z^^*6UgU8#DGdat0OsB|{yVsRwxZmT9u@f3P0RWIz zc$=NHYjYaHHss*N$cn`PJCe$j`dUCzl1(`~&KLonxg`N>4Qv?!lo>v?1SuhS839zY zZ!FVomrm0?Ny%CbNy$)EO}z_xwRX7VJl%AIlcU#Tlnh67rK}gzlf6xif&BTeBnywu zJN`9|?Z#+Go_}5LTza)dkqOTfpsATL?Dg>T)4tpv&0S~rjw54kn;t;7Bcz-*JE=9w z6z+i^^cUIF)fF)|HOCPH1ERp0Kkar__Uq&0X)~47WC$KGa<(0{SD^B}i)1ZN8m6yL zU8_n(p;Av@)2oHfsCu_(+761mts;?Hz6VGZBb!mX(V3C15j57GK zDqrj_L~Y&Ro(?Kwk?RULbVzKljLfsnhU%2uasgiZPc!sLOaCg1+xJd z0bZ+hPDBV|(158nYn%hsn?VEajp@m}fFPq-N!qMk2|}%5DC$e%Toiv=>&*FUr!{zE zySL_z+R~^|>3MRy@79msN6{yQn^+WjpVQ=1&DH)nZx6Q=&=?eep}4U6j6?RqfkdXx z$#`kF+=KDOdy8SzOIH(MYe%4FKN)w!@Zu9h(v;k zAuDUF<4n4I?tsoAFQ!zS;vE*=^>87GG1g_k*s&0R0jWxg(i;TLo+2v}P*nvMm{))# z`ZSfIn0-`J++F6e*#LM2KnQjf7Z~8h*Z?u3mOtE~B(X(TI<%NK7e}SkdsUGXip-yH zAqfnUw5|<(Y_M0$fQ4=}jErb3G!g-xx)p#WPzqRMyvh|&r+^Fq(~bM2&7GYtJ&6z# zoWvEAii0`i-fqM8lZ1br*`r;D)Y8pc{p5l3^g-918ZOt4QqEWWJqE`E6 zUOm|3d%q0+y5O#0jQJ7Bvq`g^gEhN>j|-zxYjOaa~hS z6O%N}9Or3=$+S2OInzED!>{+9g=Ah0DHxC!Vxy;q198<`hCH3j1{n&0Wwa1jmJF6a zAYbFvnrBZCkPwkO9tj5npw&h;?gr=&SI~wPN~%hQ_aI+MWUP>}v^Pq-1I1;AJWaIKD^6VP$U1`YvU%QaF2lvY6z<65s{ z8k8R$C^O%{+SyC*i9=b{sv7FmYIiKLjjplTtCKJD?)6-~+7Y+Fb(i|C%Ym)90c{Tk zYKvX;WLk1ow>TCT{buiij23K30mEE0&=Ls+{oU50y=sqj(_~{vC{ocP96O#Glv%d% zjAWn1d{}p$w3oA(>8Ed&MQ_`-TZ;+=qbQ>0X*$g*V^PIf4|J{+DTrz1jSN_5vLY$* zif}barMPui4}z|V2*5E&GF|iUjq#&nEv|oS>wtiGpKE{3`fvqz<3k>&xw*3v8R}j; zByI0fO}#59Nwsk|*(Nupw#PMk9lRdSpz01_lA% zdrmdQO#nbc@H&;2E)4|1g7htB&p_hXoy^QANzPf!TnSZG++!rqAktd4qN8SeQTe=5 z{fRqtIZitpa;y(*B|dKLu1^o`?E2)7kk!bv`LLy#julR>)02i}WTqE{+^8ZH&@U-b zLTNf?}!+~MK{z#S&z-7FJ1a=V!)+hVJVVT2isD;ktf ziX(ao(VbLGt(-Ek0->s!uVL!i>dB=9xsd8$Z@+(~0~{FKKcqH7AaMnkT>xM}$d56E zK>ZBW{Bb`50f6v979a-~Nli`mt-Jp^Ky=%s=Gkn*a^YQw{H@R89@rCeXkrMyNhNec z0}lbdJB~dD4KRW8F4?r!mI{Ld9NwaKSxrd1xVC#{Nt!IAa!g7RDo6ed+U9)rWZ=xWC7l;jNtdLB~olPon>*cxOj8b zXqFmIB?-m1U*esA#GN#BBGOH9%`HJms(SycwS|mCjAT=#H<1vKbNVhK(*H;yWv5z* ziiUpMMeNr;z(Ip)8p#EqnpO?jfOSQG7XE$!7Dgbeka~!A1no92 zwMO@N67K?=q`J86qXrWJp4%-&#-Jnsi{5YSB`P7CjhXSAC;}1Y@#3OAdMP8}n3Ss$ zVwGmIJ;C;DPyePx3T0S1wc?e?x5J*kDeJ-g_4Z@yy!C47k>qIoTwyMv(#^)bccoi6QFBv6K<%VjiR?=mjVOxpqcurR~&m45=g{b*qMOMZ4{O9@ce6_ys ze_wd&FRrp~JbCSpHs)NMghQC1kzk?VLZ_B#*xNqyrKN{s+(x-a6iXa8I8yC7Rq(Lp z48`W;mid>Pj1lu}hFMzy3|}|Ec${P>f%|zz1Dy4^FW>+Gs3I?97Eud)T$fv_DCS&{&d(JCa%5|l_i$6n_ffdFKHTS7o<1N zI-^+Y1flIS)fLs?01W}Y8?My^5;WjkE7nuZs6v@0aC~R`wnm7+rwJ#sM?FdAkWjIz z^5MGWSNB~xTCBav#fncpS3X^~4D$ZNb~8To-Q!~=7)CM_Gs{w3J7TGc>kAZV5IxS| zg-wTupA4h?oEWjFn(7#w)s8jA?&@q*N!EnrVS$F39+7hYI;o_nDizCok!>q&8v_VQ zGEZy^WC97H)|;*mR6WVYECzuMyW$SWC`A`(eVto2jS&=sA%HK}CF%t_QcrX{qC|a> z7Tu<;qo-tJxHJ7n$%u<9wB|5TJ^Ie%h;THrXTU(>Xkp4t0(0}vVN>B4Na5(Qzsb{bz^i*F7B5@ z>$OI2%xi6Drd{n=RY}Ge5#xAFH!pN`jtfD#UG}9ua*}yA6tt~9&%3wUXRCkrw$DUD z@s0Z4d9i8PI%CTH5buk--L`0@=JHr3Hv!mVn8weytstT(h6WMMsJ%X0(nb4s&#Yh! z2yugb@~l2!V~6OG0UPr-P@L-k2y^eM+CP9W)C^`=7M%ocpi`lc7F4|pmD+8YBj3?^ zcA&9qmd$4$=$z(8y4tmFK%Iuzmpcrv#h>Fz0tx{hD|W^Q5&)?6#uQ^f1O+LK?@iWK z@6u_yCk}&|RYO&-vWwe%=SDX)m#`4Yg6f+}zfwPS9+_&%vfF5-l=p6p?p3fg0M?Yu6g+D>V>>JADu0$OK09^-QAqjrv(hR3H_#}s9WB}PO;s*jAvby^B4C$2l` z`olg!RmR!Cf#<&G$HyOf2UoVsqfSW;w8gPVodxvgcZ z^A)lkTe2*RMf3WpSb!uOu#(gpG=6ipYQ*AVrwypZIDo2*@=Jk^& zYsYq_@`BVj{j2fuZZAfE9K&#a>}Ac(8F1U%QUgX3vB-C*4sieB0 zfJi_xIcFSk%U_3CvYO!TRWNbB)3_7HkUJYLAyb#K$UL^z)2WpSvumgnRo9tPLI>h3 zejSObF&MBw(iLV|5tWiu*Z^Q8!=>ir8o-e-tODaB1z9Jbmm$}QHSsh$4c#KyW%?S> zW@kz|c3&_7niw{l_z(ruhY+WziRKTxJl~{ zuD;&*yYt*npZw{kL0T#RM?bSSPdj^JJLhVQ+c7H>0N>j5JOq7uDke+;g@%R#-nhtw z>PP>$5(CJj>dH^94Elgmztm1^Q<-4UOqbEtIrEOO{N~dfPg7o+7N)bE;mrhit%-Nq zWHZ^>u$=KCfiQ&Fs;a1zir%-c2#{H13CU`rDyg8#U&R6KpO^L6A^~758OsKHmt{bL zv1=*bhN3lq(8xgnm^Xks19PM+gaQEs3aJ~w&jj>2^z~@bR`SAUti%M1)L(ZqyPG6( z1_=Q^S_QzRT)+T$wQA>r697zSXJ=$7y<;A#s%mdfym9<;K6!h@f4TF1+3LHts~!5_ z__7<8rLBYQLb&_#TD>~UjtJLhTQt_9UGLv6=XKQHDFM~ptC9vcz!$zi>Uidor>4I= z!>mj8G%GX`u7OY@*ow3AYV3W+xV`jx#w=<~t7(u{EjbGXB$f@;7+X{Mq;vW38gt&0 zW1l)o5~YWGi%ThzaOs`n>`9eqDEI=BC6KJxP9;fIB&xS;Y%mfgrlt_L^5gbM9EQF! z{4I|F01ybGXbmnm&)@{73FwGMwL$5i4ReaG7_v5(oe`?teor-SK7O-AHXIniWsYOe z8QeqpDq}AI7y;IK<)DuWCG|F{GQPYjFoE-f2~3~154}8obN^!W)rym(IbXZa89kPn z%ppstgvwR5H!|8Z^mkU!_!liq?L11t<6Yx3r|8uu7cXk#9UIkxHSU4diz4Km^OQd7 zg4x4T_P$Mfn5X8%(8+qA!5Ob#U*9jxdMMDHQMEsPa*|r-@QTx18-Rkrt@f;m4r>lJ zZZHC$*C_!|RM!kSmy`8#n2Lc|DH65Xahn+vt<)w4KtaTQbD@U$o6JNQ*;sNUKb9mr zhy}LlUvwk0yLG-})==;@MM9Ph0%OM7AR9AdheH(H#aHci5KM3Y00tINS30fcUCp-% zkpG+OJ+{E-<;Sv*W6-a}R;?dO+Q1$%2cuM71l=B4yi(R zbN*pu-8}8HzYC_2G@4f%&k(fs;JH-6s zJZG-w)0G+M3aTM?u^Vle$yIM(X<7~nLs#7ZGXR9^h-vOy2TXIjc8iEY`Iv@5J7Obj z17YPlb`W`l6?7O*=s@uu!gNpH|C!bw_nFgiT{r-AZ;du@Yiquf50FM`Oi4J#TlCT> zk!xxnT|d{u5Qar@rJegK6)W1bsTQ8@!o=SCmk8CbQUwJs0EF#eqo?26M#>)TI=e_B zLG=!C+;|)F26TL8xE*Ka=Vjb1&c!Up^*5p90VBKyY_b=?96F939Fjg*(AW43NT08TZVz=uy>*TsrT z7_W0bXUELdJ0~-xXxv}ujVr`(F4Xi806qX*>4=`$Zs~&BGW!5cF5x^SOt_=lCtDLv zbJAmd9)HbwySM%I^0@*=E7GdGFXOeKrDv;>`+u-=;>P;40Y3m#V_jHPV_ld204Zmh z%RRvG+cz&d`v#M3?ZxxI_l6jsdkJ6FW4djt@-9sr{ZW-=Q|k6=5gprVr%|M>;{zZ8 zI!ac63Cf@WqtLPnJRp8BfZ-1SV7>cveCIh<=<6}KyxfqP8Ks7yT(R<0z_c49WXi6- zHF)RLT*JxTeL>oR&6U5<*^G-kGrgsWs!6H8&0U`){eOn08}`-rk2Z_^T=)0+v0$Pz zWM*bP`y>%?d!ae0fj(~5NY&IP)hSWyG(^=&HC2?Nk)4KJYxd)doQkIME7T~h!7-rf zwbh!Dod#q^)k)AxWNR??Mq5T5Q-zH}X2I!!A+^j9y;#}(q9?!7!>p6-R)hcu0U^xF zfNX=oiVf&?@0Xx;>jRClk*ZdC=`0CjV@5XjuJ(=QY5z7NfskwK4(xU;Tr%>oaOd_E zSyR|mkR3_LmTmn2Ba8vuey&6=IqTs(7WcC^4*`BVmPSWHBmkq_vXL$%2pTZFfubf! zd9_y(_2S&>DGFem#@QShbcgfa^l0dP5fOPKX&QgO2a4p*!R1Zc-E# z&;_h2kmb;{7EKrh9+i4%L$B{%v%_9X34?G0Nt{ELCo}P$>9M?~8s!XJA(FOxBKi#w zb@^4N&fdJ$-+C(rC{isCkygg-L$~fP^XcH8@`4-N*1x0D^|lW6oM!F^hf9HIozB3wA)wSeky-vSv#6* z$u=;qo*W1(r^d0~)LMN+Y(WcRmySh-&ph zJgS9P1i_McVQGel6o>^37D!bnRh6o?z7DLoY`P(zGsA> z4@lh6(b+HI@az|>l+i32O@yEtMwUplrw#hPxWc(>#R{tTq$~?PvI5I!^D|gjHee#X zmT2b{7yyB-XC7z{0iMc*l+L6<3V?ZaODP3U59I>5H)!`}$8yk_0gh!QRJAI}anDE< zOP!lTf?H3jRPlH{Cb@SYUp-oOq(X4h0+g+{7yY83^6S`M_I1yab0jYKF;LfTCCMC|T0ukx?EH)ln3h4h8@m^am24M6EVeN%M6#m!nsQPn*!z zVQLC@Jn^kzuzei_(v~2BYlDU&0uq811co*Yu;*a-h8^?snmcdF@txW~YhAZ2Pkth4 zRwV4dkFekKkM0siWRLPsG632UaYFOS z0vsbu+?ae^-(Et@2R}jvWRR+Lec!`59~Xy*i*57{%T45Y(cCZH8xtB+=33k}Vh*`eRo*c4MFBbt80bbknhDIVx0K9SqlTnBX zV7d{aA3N$jNA{*6R;{Wk&A9ovv|g2i!$oW6e0TjOBM=;{&q$VFS3jz7>WP2p`Mltz z66Cb)a^0VgQ?stBhFY=!l|oYDChfl?dUEEM%Y7{7JY#)IFBGingCWOQr-(mls`U2E zc$wm^?5U0tzP83Dn`9lFJq&4v?$?X=E#7j``Fy#*K5hFf_QN!Whw4G{nP6RC2eISK z$m?VsHJyMGt)%MN!XOC{k5s8drMQZS7WLihk2>1rJoq3C07iIMJHsQ#Fcdt}0gGdQ zWlwYw^5Il~9A1ZVJDzJ^HQu9?3Yc#2Nsqa1xoY*io?~gBmZ5mgtN+4z_rH`QvHC}o zwCw;80Uq1cktIVJ0LHCeEL{mucayMYegj#owP)q;teu&eNrqx&RmF;;AaBoP<1Nn6 zdakF^{nk!7d8aI189lgb`_c0Ge_kYOz2rq(?3a39X!dlrO21!S0#?0+n@-9zAMnm% zMrKVe=N_JdLQ@4{RfMOhO{XC)Ey%0WDef~*)+1F%Yj?SEqZH0aORJ%W5fo?``aC{& z?7DioS)?#CFj3J@C2vy7%1uN-byI5QBF)@Iid0qF=Z6sB7!bz5yIVc{r-t3E(TNfU zCF&z)5bcD7{ypl)DTLNiJgBjCL0Dzr2GLs}FRBotB z0HCA*5l*Ilxk>V!-R5*Ua(^`{dV8q{*G9J5$ZxI;)N-B{)vMedQXk(c-sI%zcz9pe zfU#=?nz*w!dOF)nU&R5mS{E)r*h4IrlS_@zAiHU8O$8EIXdz zrD?Z?NNys44xR~m#*xwp@s#hP8YF_$$wm!g^~A#vT2 zz;jBGlqhe~;im0nTuNdx$gIW!Qp1MWQ z#9e7jV3f*5FhPhPOkldP+ID1?lD%Lh#DrB<$SL~$eADu1?$h)~l^9j;hvpvNkgD@bFLef&H{HpTpZAXF-N74$WrZUh9q10knj2(qpNPq!*g5M$otRhJ@B} zHhl1k3gO3Lb9A$Oc5^-7<(Ma|eq{T3EtW}Eu%o%uZ)*K~@7)g~U$yL&w+x$U^Txf8Xd9#V$v*5&R=}i9C&`}2e4btp5HxOIXj5}(C^U^JyWG1pp6DItpfluJ zzpe=36&Mi3Kvj!Ukm34p0gM3wl9H;br1JS|pESi8_Q~;QWw_mLSl!B1fKpgr?F@`~ zUa;clh0*}>T^EiSh7GW@LSBMODiP^Oe2C?VnB&mk4x!rwJ0Eh>Ab?L2W=9BuO8|n5 z`PB>|ZMJ_XlLi+7e!9g#2O*#U<5VsN4uYS;0HzO!UG#OB5V2BhjnRloj%4P%7#fBw zDaS&E9ryj`@Z$Y#2rEaOt!qVE006+&Bk8gP0Df%f&5qE7#&b6f z4NR)2Nb0$ObPfw5fz(UDy|00x*PqgW5ZC!hpJxCW0baT#m}`xT6&o0DZWSUjsJ;Xy zGuE4;w|(u-EYZl&kPPM|SwmHh_r14!%T72yJkD~zzOv_a>nGOXFaJ2a=;_Pv9WyX{ zbKk%NW$2w6Zsty}W1n_c1XGoiC~@Kj25#DcC1xg|Br=z-W=tBdB?BJSnJGLvV%MXs z=BYg&pFTOvnVjM=E&DC2eEa&l?`4eKFR^!j=T|!)&q>^yhiCJEp`jtr=E6&T;v0lyPi3P?dgevxQbRn`h%8CIx5rc66(y)wHy{ENq8NwfONmDc}Os`d|AVmjfl zBV-r>o~h*sGXnt)7>8yF-&Wj2l(Odp+2P9^g?b)HcPM1HlGoqdI&{w~323PPSZOOVx`Rf(9| zRm2I`@`|`Z19#|VU*(7Qvqt3+GyKE@qyL~bCyzKM( zvb^K=s7uO9IK}XMaND~*mp;<_M{Ve)_@i(o09zom0I)Gz@B#n^0bEK%d?fOf1X+R=0|1!1OU{iI9@W$x(2Y~F z={YRa)iPY2wY~8bW;aIjj((mqB@jt}eU_IiWPcHX&V`y2}z<7a8GZj1mBxGk=T2NMB4%7xGbj0Rvi zs>Q%1AOIMDU>SS#GK=v#jRm`8Mm-5;jG0x#P!+!<^}lPj;g6G^BAvdGvjGw;fyPcMZE>Cv@rQ# z2`W!L0=ToY44^FXZYr9D=?Fk6R;WyTU#rMWm&>`oEtbw{G;O6KfM8-G5?rZ-WEP?n zg6&8%>=o%0)C_NAW7{ByuJ3)dAXa1v16cOJ@zt?MzTJ+3&Ru%H>FzcnjUqrG5Uhq8 z*!_e!g`sL1+Kf&{OCt4)Pq)Dl0x*E&9l{4ll5`6UQHtGA`-+?!?hr}uQlvX}*~)YJ zpq&rPn9+zx8YJf5!)?|+PAk|B-51~9Q>>IE2}p4|BapnvfGjYO{nDDrW#Gc~UlEw> zuM;7?Dde5>0dv>)aYRfY3M&6tq-m%F7XiMyg)&AVJ7J z8$f1n^kla1s;Uyq6)63Bz43b>7E8Faz3XV3;+q0K%pe%m3)iaa^XPrKM*rKUex_b` ze|#*j#+hev*+UQ9d?6|KJx&jdxL4wU1vgB@(b^cgfaZ)v6T6ywINME1B|DWG`u#0n zJlA5HR5llKgyOnf8V1abA4wbG2oi&b?wyLw?oC82Bykm)L=eV1ccOkQZBo$Gi`GqB-wMouJTc(D$Pk; z(QQI{#oe>nEw&?Q9v<^ual1V07Fl2-OCUg42_9n;0R{{elqxFC*E;&S0Tls08+Il} zkTe>=ZP%v~At0C$uH0y!itU~3g))<4j5)@tY64pMsmA5c&nNZq!bR;@Z%xT^eCN@! zJfwIoF=^YugKzb?3T52Hd)9o^z z^~;qFH#unTY2nH4XJ-O%19o(gg&@O$iG|+}SA$MjeeIINOFq5P_Q`5_J;W^x?VRO{ zseL9QW363nw@=}klUoOkSW*l)myfHaG`Vth7kBqJMs5b$16r0YJGlD-g4vRLBckVJu^pKCsqhj%O`CG7_SF3Vh|DO~}Ei}l~1{Ad81#s)hj=<&Hea@6K z&%8WrLF($9dzyq|QYMNznhwI2-sP>IpCJH1GMF1wDpXaz4pdLqjmwT<5jF+{*wOjZ zO(%pnK=5EdxZstdk5iAXBCwqznHvBBbX(Q{Xg(LCZ=Ml=P4M!L6s8R)lxhN)J1|L81r`4unLhyf7-WG&17s5kqDrL zdu6~RQ$@~_<9R)1wt6$J^qBi8QFKUIra04UP2IA5O((gBVd3gF*pdZUmXHyS0~1)% z2znc>DzC*O%GHWEjl~_nfi$0Z)ldVHTxU3?je}0P{`C_S$3g?8$=( zQVo_Xsi5U>QoZkl`X9?Mzz zc`9|-F>jQIPUdo$!=W8#`%_dfQ^HR5PY)646h8X;5^ zNoeu{2%8=ZQG#nX88!E9VdU$G@EXZpBBZ3sMpUZT+oGZxn$9w{7Oae45OKomr-Wi` zNydVSJL_ltGY%lI_+taemod%OmIvb_xDUTgH$(IPLv-TYHcDo_7!F zZpChQO3T*0#@&@DF*Jk-qTKuavd3_l%^x#k?!<&t^8RSr9Ku7qAaN?)opTr#sIvVz zrz{Y5JMB_;EdXjIRZq5t1luGr#u$&+d(jLS0d_Mfd&K&mi;N<%I}+SgX-Qr{ixgjw zsdQB<87f^^+5?q8Dsd{fHN`XiV7K#Bb0BmV;%4}(JN0A%d|Ze)6=JlPMBGDCiI38eMZ$xc~~Y%l9(K6d+P z!iClAy?URsMrp4SvEni+u11^Zw5@BQq1~! zVY>J$_^HG6)otn6G6JwboOLDoN=6175EuZ<#^^f4?pcqz#>@>F0iFvsMFR1I0h04? zxK;^*2LRS*1JDkzOV3;iY455bHdOQU)PiN}T0-;25XV@8eT^R&+nEn=WL=tE6S zgh8xdRZt_k+o!aDH*G{cYb5|~VCJqe(*woE*VcW?bIA{;r;qkiqpdlesgq|6U71s( ziWCV3079=4NF_w7`6z+_;1w9NiGEBX zA?sv51|n%rJ6o)G2-)l{1I7T3Ew~n1?&YwFQ0HQ$#>}V9;15{Bw$a$OI&u=5Kgnb- zHcuX-Wcyc>+yxT>KHFtU1Nwo1Nn*YIYVRTBOJiche)Iu7Zfnz}WG`YqP+`IgIS-?Q|4R5KM#y)wjzb3OW3Q9PF~L|_v2)M1 zxX|6n|3D-}QH5VnX&T>Tl(kAz3LQD$*y{}i1ZYwozRP{^zhH8wbSNXOBNF4t)S>Y^ z6^p{-;Mbb+e_waQx*AQ+FEBYx-1K99QsfK}0bc8Mo(3QQ%(-8m3?N?yO&wrAG7(&o zu_=>oEE!OOb3?IWLcG&Si%!K2nu9pbO_!k2jn}h3qdB>2+XEV;rQMYN2(`O^UE8}| za$kO*XHmmA5AXjy*`TmEHy(!G=LOW>YbBHM)5#ppT@;X$S*1>hlM(YVcB(Iclik7Y zI~Xd8+23Do0I7nc*a`a3T#}7es3-BAeo2Y0|8y}$51Cy9nP`nDLl!+e^lF2UPpXuH zMYZ|wX|E@a8Yx)oqig%ufF(cr5dbnm$g%=GXLh0(R4gt6hM6y50AUOuE!39U=Scc0 ztX8%+n}oES^@%5=xoPZDpIeT>g!lO>n=dd}p>EJ+S%5+Dr_S8i0Sy6u`ei@_7y!5h zJ8w!r38=>KKD<0`5~LMN_R<(xB*;*#s(Rfr{3xmImXq!uW#os$X|V`zuBmWs+QW(x zE=nKLm%>cNf=j{*naJ#{>?R+C$@nP-flk5jY%`~|_v&6hU7hzCKmcppRNe;`k)*nS zhT~peGuCtecpGJ(!Q)qE&YpXmn{kgH{1|zmoqG;3)?P=JV_i4%WY}jI#>lXi#^m>P zRl%S}O987aKmeACph~3v?%e|uzw_Fbo-_a%YmsbABShC#Qpsw8wh#aS#L~igm76gS zj*W<6K7j_=#2Ys5Tra2FknD!ZDaF!VoxW8&naJtFPD+w+&BgnLeBQDhT8+WOZgYey4s0URi!GG)L)S-B+EjW>nj%+x(_(t-5w+i z2tpRoL}8Vnpg;qu<8KoQ?p&yU0Nj8r0|LV(0H*MBZWlX}R_~xnQ1}T|>Jnwar{s&* zBwI%ZE3c#UwqZ1xep4d* zW3cDPMcQ#@f%Ae$XbLJ%^X!?EHC5BtW6!zIv)8fvrw(R#aSw71dFcPxc|%3-$@Aq_ z_smJ91z71UddPh44`-9Yw0j?%d%w!n*{@cyzFbUe7byftb5jGARdr?0k+aBr+*Sy5 zrh-(Fs`~X=$r(Zr#p0>;<1I&`s;mYT1o$HDF5VIpKwNU(s4+iz7*hn?fDvHV&T0$* zU|3=CBufCW2w}8J1`Epo$Ob@G_@ESkP^pazT4Wm>S%3iB1kRx_Z&3B{MO6_Gydkn0 zZ9{)7wtWEx0scEK#RL)n2>#Y?0s;Vw2OIDe4zXm9QD$K#F&0Z2s(54AD(YseEZ3vX zy6%>ZDN?H7Ba`8#3ispHuG@(g=JjHKNkPCuQD~>VR$}SO3y6@rlJ^4D>4`0vt}Zji zV!O2rK|q%oTJ4zo2o%Ud!^p6^ zcaR^6MuiqD@79JOR6$lLMO6&@DlmGx70iNqM(FEb3VPbjf^-)(q2`FRqP6g5Lh`_K*kCoCLL^mWv@k&3ypqSmQQyH`%$?Q55BP9a^Cf^esKU4Xv1FH|Y$964XD2 zGdSuYFh!6|bmbE(Im`QABsKP48%+)9+s5YkB2owiRgQ_ur1#~aj6CXJ>Mz}`}In}jDmH^cAZxCjQ9uvHeUkJhqi=JsiIj58v_{uK8uxJ1|gsU+-AL( z03QIXb4?59>I*tT=_N~&Az4+DR3&*O&)1$7x_9q$ZDV?o-91yb%O}S-wF7l2t_abg z@oibDw#rrCHP^?-`g$?eb1d|}p0m`K({N8jMve^HJsDf?Id5B?`7tGPK7KyVi~$TS z+Vym0T#zaJXofjU#w|79=KGwc=o@TiOo_Q;2-budIr}P-JE4}j*HycGn5oSe#(-nR zktAhYiWrDufKHGrUE*^|P!*N0c?8?GWCFr3M*PaCZEuQFD!&KP`k+9GEJTXGLUt2j z9b;P$$GuJBz(_W^PDsH=5d!V)+I5g3aA)Tan4E26%+LYGv|$Jk9yp!08{jMJg=OL5!mdk zr~SMH?lle6;D$+Ui_N%{XC;El6gLU3vEy_X*+3+)WUV|Ejy@@?+7e}zZVPGrFnNf% zd_3N|d03OPw-wPa53_*DM$wT&OSL?sFm8Nvw!Z-XO`W-RYQqssmxmu1(eFb z19Q#?WBt0HPpvM-`G|eSkdgpS`HP;3^m?R@JG;t|@z>S_X(|HC)j z;)=OHK6WW*eNYzmHlAWsJ12v8yE`1`Yk%~O{f~R?0hq3$-Efy{7DxCGgR&TsbH?5O z{`hg!$e|z5IA>hW?lQnIB4muS`!d9%w~tq1H&}7f0Q3-6FysY>KIp%4k$9n7@g=x(`;9VkQ;P1cbrJku4TS}myel0sk~ zh#4|C7u$KMHL;>>Q%*P7r*;3ZK9*CCmY1B}Geid?>~!Ory8#XXzM7>}CSY0yWro!( z)*cWK7$DelJr!e=KBC^kroo0{v0O#ZJ{!9Jnox}Bt|8~JLWQ8WV~JhV&Z}<^-rPU+ z+v=_7m8L%z?dq8qk3Z_H*YC}nZBY$ERHuF3oUnHrtK%*3L|8V225|s?oK#~ki)ZGQ7Ul8Y@)k;5>r2z&3 z{+UH23n&->r&$U#I6nozI+1b~BrC-pQ8GGBaDtUfs;WVEi!$ZR!dL8rH*j${UZm}< z`TR+r+wJjfmvGjyN77iXe4}&fIPW_~eLh(}-u9rxkm-FNrPyQk-{)S$oJtl^y_ZpU zr>-+=MVxCfPtas`zi1j*lqr_gk!KGST89#=X78J6gOj-<=u9YTOg6AaU3?GMJcsB_V zxh&{*A1ml>N`ex8i=cu*`4XC2Gc0>HFZXuxcOQ3<9~mT@B&m%UV}*XQGIxENcb2nk z9Rd;oUV25)#FY>YU>dCwzymBWu<$*L5Th$WV>5azdlH3{hN`N{aPPcd%F|G>*1n3d z-ugcyHAk}VFrQEMyFr#tpC#tev@~s(R6#p$a+{;SU7fvCvc~5Bqb7Ex-v2aIo%3|e zk-lRefs}J7MUY(+cGBk_Xs-y|D2x65t4A|r4vX7)NmN#OYBwgq=fRlYtj}A$8uhxz z>x?tiP>9KyR06D-J&l|-I4Ov?rjxf{<{He6eA!3>JFqMwtPpxdQYlK+gZK)T)i2h& z)b!B;UVM>X zG|zXw!sYYAeOdQz?x|V6dsk6t|{Kk1_`ShouZOJ-jlkjRw}gh zr6iFT7u(pDZDAx);^xYMwr-%_*HTC(RPnaC;TSQEVl(W50|Qd{P(aZJgQI@JXD^u<%sIvLw@rUz0^5_K&N9zb3b6JyRUr<@Z9$piK}%@{mu5t*9G2NM8O4>TQ@(?$pz z0HW@okDbyJdR)diqi89Hs7|;>hNjiQSP@_d;P*|irvc{ZE)rvNqFU(v%tWdSb8o9U z)1S2I`QkDM7dg$1>5kv!!F3MiP0PZr^{)H2Yba1k3SX+c*#-pxzKVs~1y|6pz^WF? z6hJTm9t*)asO_j{lt~6Gs&Z9LZ5XsyeSfgLuQv~NL8F2HZG$i~@tZv}q15A_swj8X zrEEgi>3!abw`SL6ahasZ2Cw0)wAN(2h$Y#}H<_b7XMOs{R+BJ}U=HAQ9pooF4T;0wgHvj=OS+;$+DNVA?hRCvVR} zs!~;wX4!H`k`h!QD(TIXlNk5v$)ybdKnze2?K=tS5SxtZ>M#V%J;ZepBhFMiWPdVp zw9uRp7`|y0{H;mORmX9WdcCM zFS^zeZ~)-ZO5h|Eoa}V=Zpf0VhN_B@v&|Ahy`&NYok;hP6uZ}4&81)7TpwC}Aa+QQ zT(sU=GTQ^G=^O!{*5!fRm{up9;!=B;;Ohgo^$EwKQ?dUGzZ3$tXKlYq89Lh z6tc#)-s$R+DkIBj5rqP*zhar5#;H29)Sge&&PW@*g_#ZvgD^};|2#YmM-gcZnT86+ zcHww=>(U^IWMUaJlI*CBm8N;78lrYN6hV9hsT7q;6!%FM8r3nXJFlHXK$0UFV>)C) z#;X9p*w9>#?4pC9cTqIgX%9$2-Rv$1K84+~jRXY%00CYrcF~6@P%>z&HM>#+1{%OK zeMmYns@)|S*^}tOSXHDd-kGx0E4o)r%DN7fJo)E-uG)S|H(Bj(?52F`qS{+22BpIS zozdfK+2;4#Sf4Q=yH%detd(pvFi$<&J6$oCjjL8oRW_QQsGdrRqUH{h(L3bEu}ADb zufAUHBb7nX6lMy5`68)K#-k+an8moC+wy}0Kiv%LQBP(8Ym}CsG;dd!WP+5$22p=4 z0|r2mKk04hTDp6veNka?+9;CiE=kdDhek_d@^t^kTE8x{V_{$HI1=cO6rMCk2R%Jm+Gb z#Tet~?O_^B;kd>Kc)pMfASmXPjEA%L_W1C^%#{nxEr-b@O>GVSWhSmqg$iv-^CzPl0A;wmbxik4emZ>VlcBi8r@YI5MVEO5bld& zK-cedtL}%S9ia%W-+v%cXb(_F001CvpQrDOtGntPx#IU~Q>>`K2LAy5>ZP(owZH*5 z?NShfa6kZ_jRmmeQZnhDK%+2Q>OleorH2zb@r?7 ztR6|VFV{8HxCo1pdTkh)2}RQk5N8j}c}^KQb;0wg=cZq>Pw7nNN@xs=qdbP}?5BIG zOp_5bJ<3&QAnT#5XUOIn{Ko?TkQ#Zg>oR%XRWDqqU}J;;SVn20+v5d~XuwX&c=GD# zRXnQHQX;Z!%MS2z*-2YANGhoGs;Yfh+G11hKn-K*)`e|rl?Aw}t%5Q1q3yZBnB%hm z=(dugJ4ACZ+LpO`(M$_5L<|jc;zCejbg8&m0QnOQn>vvZZJs_M#&VJO}b+tS=@ni`j0 zOkOR0Rq<$In6xxork#1lY4qoVG4AJawxhp4jR{4zV4_+r${8mSXQ<9J3k!@h?g-J% z45M)kzM6$_=*pxa?n%`)|1$;wnL`7?A}mU;jhF-!$=BtKCQ0+w#hbCmR9RNV*>a9? zjQKH>83LLT(@lo-H^dJ1ifn_m%63VrepOUk&^koI`;981jR0VS&?*bmhA1=IlPT;@ zpuM92LnHc!;*5h9K&3gZ&K<@eTIMmiH_mj<`_dTX)@CInPz(=kXYZ#d+t7&0BLYV> z03_FzL%O=MG@RBC(6G?E(RDOR+=w-}9?_n~>X>o&wZB-Ho?1xFzm*4F7OiZ~<`VBD z04)GaUu~JL!rC%&FHq?tnB!P|gB|_!=ZZ7hnM09j$29a@Ir)*dVZ{m#d0+3$F^Di5hzMTt;a zO~JZ+bqzTHeCZ&mWcH;4rIL2b+V+lMNC??=YW0q7OVjBLwfmhg_i{DP;^YhE#cEXB z5@O$La$%hN&MTy&V>SSEZ_P2jdz0I^qn^64gGfb%Uj8~Wr*Mf07ZEwAU=(&1&W={n zrgHrviOc?&BhscmTn$4n06qY8ZH+V6wWDPv+&Obincxlf2*`d4#}16 zzN#q8byii?N2-06hMMXS@qdEX&WesnnZcT2d_jQvo?5&}QQc3TsWR_2>-#=W< zd8vN(@*)LJReZ^IRH_4u(U$xk#VD&}XT7#MDLepFY5Q`VEzRFs5?HUJb_)ZXDNZEa*hqPsgjsv zGc9e)_4WB8oAs%kiT;-39tMK#H=|1_>mPr6v^~|%8~?}eB>CqL71KQ6k!N?^mIC#* zetY|OG^>yOGk@G`x3aF9?%qHdJ9#{N%yFt?vZ)xdtEw_h&vY~ZP|+OkTg^F*nr9|X z3fWkxD0?bGUD*JUp(@7}L(Ll5)MzL(;K-PJ%%!&7nEgIVM2hr!6Q!KqLf>Sb!Ps}d zlk`>vsgO>TQc@HY;BN+t4ye34w~JM`5L81WH8f625wlC(AR-p0b~bim`W z#sizaJaBE@+CU$eCYF~CYb(-O!l+?CAVyS8WuL02Q^Y*euHkim8Aga}og74R}=ZbfdeMj*@7FOP}v|lUb(zuNmk(rA;2@C;#%au+9 zNnij|Emukj@G=41XGoR~fSpn4BLgYRs;Xj1uwv#>lYMH*cl*9-w%xa3VRxCn8~dMx zzNUeb$NSZ5CZ?6VD6iw|<@8gjwR??%Av0qJR8CjJT~H;|@4}3|HfR$29Zl)C`;3B7 z^7qT^>#XMcFcyzvm>Wjd`gn?NA9JRXKNkr2tkHOH=Z5iFF!xcyKooSQxM|U|0YE z{{bz)%7v^5+Nz%rGBWArVk-!?3tJCWq8g<|c%32EPxEs>8{>9Ax_li`={=+>N{|-n zMz#RB{~$9TSUhJ|ODHxC0Y1BBMn(t-8Wz@5EWnZk2LQesX=}S=p`$cxHbX;IC5$$s zfzaLmTT16vZWxJOMf8+&TJ-AKVGf$};r7U0xs2$2buzMgmfei-%{)!cX1`q(&+N?1G;01tvW4&Q#W@f<_ zUb(7asy0=gqc@j<g|fv_lDPxWRfEnQ_f{%q{`KJziju=%3WRE#p7k{ zc`K^j?xu-RdnS7*)%rxe1{wzq-Iu2pkOmSrN^|9q3jj=Ik!gz-MdTT}yIg8xGyy_h zqH+ODNAXguqHa2K`hmDrR1u4uMvy=j&Fi&#FK59V^9}Z4k8D#anHLiOxIPcxz9ax- zzyL@};mRrw7g_4JRY0nsYt~v{u+Rn5uOAC}`vVcO#ZZHttEd_x!`iS5k(tEY)6&^; zgZ&*qvdkj{M`XYlVcB2|VFV!fxi(ZpKi4k~3w53n0lun*RHhVZG+>SG3Spu^CV=Td zOqK#}c8QWv3c&`rN~(!5k(yEP{@~Q{XgVDKQ%`TsJ=4Bdd$}-m^yl_nS80nM4i;N| zvt^~H<>{^7?oalo_4+)#WxPj&(__MG3Sie(cD>Kc#U6qoD+&iC&-qHs5@2AJm2VKTQ^ie`X}L`SkqGGx0Ga@di-*9=nu;1U3~M1(*B0E4Tx5b!k-lWpK9i~?{U?C-V#3;+NW0Upc6 z&V*u6uw{tt3TmMEX(TL6Z@?irYemM$EK%X?8LZ3f9r?!<;u!p4^ zlUtA6j!#8w=jHM7{9|0`A&Q$6*oZ^OQ}t!&uP@?^`}pztGK3eBudr^A z?ZcRO>}|~bMzcb=GT_Mx%Y^Gr3aXIS(qGixF4?j{7zeim>&~&q!LnK?c$c9MAgFb{ z2`mB`Kn7)td<_J)F3hO#x@%TXo#B99ZjvPvmTiT#d$F4EtEh1mz)3S zxuOFS003jKbzSCL0Sp0NY6Ubzq?YAx3pFTOt^GgT8Cl8cnXL<7WvhFW>e`LH}di6i{eCR3Dp`Ci0UxGV3f$$jv zBsEcIPvv%oZ5E`8P$I^3J1!a=-9t?{FU}1K3}cVEwyjvboOx08&DNsBc?|d=W910P zS#4i0Vo9`Wh4`kyDG@8q%2MX+RZb0#P)NoOF`(NiS_GB!4sTvbw`>3bfnTjny=R*p zC5n1iVA!h3dx#p|ge#&7NN0JZ*xyJ*s(h$$V}9AosTX$bdba|GiJ?cQH%6R`vrS6} zyK=arB$igIcIZ`bn0RIb0La*XT@nEn0bYvbp^pb*npkBXwerA&>Opf*z(2RZDH+Sb zAgUZoN`xvQ(<`I+eZizMXz&QYsa=PZ>6_dL1@u8 zH{6heuB`zBFq!H46EzQ|#u!zL_c*h{(E&Lrc8j5xs+AUV!Q@P?H5bnULjfS?#mHeT z=aM~E{lLc1Ris?3unqX6UCcestk?bFZp#_var`vKu-g!-OH0e*D0e57i~junkq|Nw zLSI%TQoSllvY20GXY1<2WO2+fLWDnYe@Qts2g4@=E!&t$rMPcJL3yvXU{mcail1$< z2^YX10Du($OGuz_Td{aEB>B0jw?ar-Ai7u8hj_YU&EQ4C7yxq8KNA8F0p5BA)FcYQ z0M^he$2*wf1_QVcZiq;DPeyI&xocIiSmny5&&G-K?|pqd&?Ri|C+W!R4HqMI48>l; z3;*%PrFE*YwLQ)AtaYk3N;3Vhl&%vOskZS@s6-6Wih;?TOSAEi$^!@A;z)sHlw7;GQmpN+e{#X<#`i=UtIy^}`2mm5d=4w>*D#Fz) zQL8;L4P~!3k_73>6cM06$((yVE^Y7Z2S`p;Rmrlyo{MZ5Syed*B;|~o_v9I8@0|1D zWRwBq{kbhROQezRv(JuuMyOOtTdj>0D2Q#zlE7eF5whL+DuY&VCw=Mc^}CKGe{BR# znX{U6-fxL)MXD(21~ew=AI3H$@-x-#ZfDh<76?~k?2zNR?)iICY`OSPTqGh@zd&eX zK+=0JW#=v0edt921OXm=Ers_Hckp%9Uj znzVktM;O>~@?)!S@JfY>Van0fo6*7Z$M#1vX}LBy=d#EBq4jKP^eu~hIi%9A7k#%e z^u(p6Apn|n@d~)xq`G7ffN{~pOLdj(%jPk8zs;R?hk$$>k70yJw}YZ#Rl3az4FHC+ zFV0RjNrxw$rT+$;15^a=?C@Z-v>8NdDx&YZepb?4YZ+>{o}&BfM_ zsCRKD;@0neQ~9J@1p^%cUVDzl2NE=Z+p(4{QxF)y@+<1jS`aBXFy|r0%P!}P%#x*- zG7S!uFjNicjy?8m4atO$Z84sOzw3{p+qAdG%i^ES^XJZ!7dxk&ZMA#yI$oS-k26KV zWZYA-8~TjsSe2>CU^HpH8`as-T@8Z7u&!q{?uRaXyhkJC5<{?i4w<31XJ50T%&Y+tu2qg@OVc za>34*AOuWc`DkHS+)*$xDp^LLYsghqmDF14`Xq$*yiW6EDjv&2Why4-%Xs+@AIWs=JIK#@%+BMXh2RaI32Ycba*wc^iz zhptMauP3#*#B7gOy;xoI=Ga)Q)owTuPKC%iTjC)dkGqt`c%jf7{GcHWyXuBnl91j& zRLc`)Ro5`ofPo~S=Q7JXXBPTZkK^%t|2aR(mIH1oVq4P`8D9;MkYoyYpksDM)FLP6 zao$!EG+j5V?&z>zcV<{9ub8Y-H%x2^p*RYbB~?kK;=Dka`DaN~r7F-yd#=2~P>L@H z9|+#-M&8nlsMvYS@KCI8G!vIYqln=x)ULVs4#pW{_1ANnJ&MZ3X`>K~U;}cD0LaT&Iz#)5Ay^b#&({o0sdPq)yK4=(J)EU8;-RG!C+$M@CXbiLE3cB9Ep2V#cHUy z#?8*`jL0!g{695}`0t{=!6u<%vK~t;13Tw8xU>CmVzbz^sa9ghsXeo}$h!akF!d;bv1-Zi;frO-9V6%GkgQYhqWyek?E0Y1BR&IAkqmZ4n;e1HI8 z^a}uR11?hpN@rv;0wt7-Rj%p=K*H}R?IH3oDbsyh@J2`%c^$RQQNNze`c5}?i+;Fy zljV}EED1lG!DKA+qf}G9k$rg|Stm}iicF}WXRwW?U%g|z`h8@N>|7+Z6*UVO1UMnI z7vJ)!wei4W*L`&us;#^XOhLO`mlC=Ls!2pQQ8SDB>L4c7vrvtQnvzrxy%+xwJBv1T z>;Ti6ZZ?3#iHIUrETJl&?lU^f=laxMeXaLeJ-Y@PI=gY!Tlc+>xtrUi@9N9tM4_r8 z9#d20q0$*OiNsu4wQ20rxYZCBR1>$0a?x^SMh%7ibU4PAVw2^i0s%UxaRBYuBr1cEr3-+=G1p!tu^kJKzwBC*+`7i5TB8^7T+wmclWJ}h zTo77XV*?EVK09_YmWVVkK$zLDlQF6c0Ly3lz~GX0CWFyOpjlM0s+!}r#&m_9S=d`m ztpj;;?nKDpH2&sz2_2%aF9NV{fx?7a}S`DOT&2Ys46vf=;Xsf74 z%uPha3ST426}rJ|Pf=XdN4m?&_TbWc+Hl;~vX^t)e(NnUFLQ9{pYheb_T2aW>tkFM zk!03nHDjH5$(d)`Pq)33ctBq?btYyeN%ov64n&C9zmY28+^` zRMcv3LBiV0qE&Wxn^5%ft%w95H)PG8_f7Ogv>(;aaxs@EW8Ic!?7c;+sXf-ogS!Sy zsJY7LO*On#&vl=DkL8NO4GjVQ3YNx4qi9h>Ru*Qv-na;q0bn`rh7K1wC8@n0!izrO6_A)kCq4N1QvA1#7Fs1refkC(1x z^;XNmbe3mN{A)B$#+p(!o-R&CgGbF-+dy?r3C+?l54rN4yC!-ts(9qUesgn-t8=C( z#oVGHsxGuT&N!ELo%yzYf4DS$?;)B!4QN`GhBb|%CQ1qh1U23ZNVbtBOA$d~_j8`U z{M|dD7?B}b_>93~^&$alendM&4X!V3Xn;^mixnuE03-;QXf)&$4Hf{vAdDkZAkoCx zy@kO{5LVq)(yzQ7mLY_7M4iQD002-jKvxb11Oa|ZWm*Op0On9F0x7_t0pp2xck@^y zjYP9XW@h$g)2gbf#@x;s+RJ*E)^kX!YQMtk4Se@k^;X*)KbmLH_tnMk5BKyAkH0Rz zZNL9GPN%;!KK92kAUd%YpiuTYvbmrcQ=NtS$_RBYgPJ{p!WK#cSqZgNCB#LS6<-TX z;izflW?pJxe$Afuaw}4SCW~w!i72U`w8`x5 zQi2F7E75Xkrug8!Tcb&n0->^$^nw~fI9mOz>yAHT(4wmfJF~{p$j@6&HMI`PRs1m) zaqH}28-mYnBQ9WwK1Adq&ppmR5(-7H8?tp3K>-l~mRVJR3(DXCWMT|h#sv&du8U{l#R^n%xoxERaJM4X>8&~S?%w&X3lHhw=>FHBenSK zBYv5t(wAe2t((72>@ff;fm5fF_ zSIGIyw?5+krPbT;C!@$@*x~P-z6;s)lX`%a3xBlPAr@*{&G$6K9MRJg04xAZW4j8n zDy%6-_nwL(kf2I%X28DbzFxdMbS@^{*{q_l+D`~)OU(PXPY?hv05n-)Cmm&T%fQ;n z1Axs6JR8;DZ1EF!l=E5C@<>S}_fkGYl|CY!e7_BKKL11kFaRV`MarY&I)y_107O}V z%?*?m)6#S{I*pP(j(a9zPj`y2Vnk8u8GqoM#LG~Rkqs;WJW;+UF=Y|w=(zKy%mk6D z|5>u1rXqEqGg;kzYT1OHedNCu5i^_Y>54Kp%MN9gyTcjJOq5O-`&Da zs7@+!P%0^?$s*`Gae7ac@il4d^=0#@Wcxu<)k`W#TpH3|RaL56QPQyhECCu>wRniS zE(rx_BdZ}V(GV`-iD0_VWNqc)SVk<-uc+C(2w3fo*r)N{{4Mi*8MS>>-Ra0^?E;@<&W3(P2C!m;^)Cl z+znm882^giAGc@C1Z7eY8dQaC`m9K*1?SRK#@Dxt`F82u&&C{b>dRElJafu-To9Gz zdR?^(?ms`S+Ug~RXHM#!VO|Dm9eBDaqp4CGI$4+r=eYJjQVP9E%3}wsN|HzkUn&9e zjDQhK9f|^520|N%hZq6C`{E3mhT*cNwdjyX=?l?tIH7erx3}4+$w}R&yJHoqf^bFd zF%K_q!Sy&JUBX~lsGr=y@0jnke6G!tk)}yUPYQ0nso$G^~ z{*WRwTGN@|p40#8(_iaPCY8_KvzEHBrp?vcsMmWKGX<;IL#k{6c5|QB7!B?&T=g5M z9^2#UkMp+p?7jSGsb%lh2wz0VKZ(b@g$AXnUZJ)ejqY){5^9GCB_ zE!7G@r)1`)!{a*yBG2tQ#nWbtC9p8o!q*TgZ3qvwYmdJnRhn&~`*V+#%6)Ea#NFLes8p*{f1!eFLOMor_Fd?m+Yx)Jj zHma=w7Xki>uS%~(`ChDyJ%hd=Z^_Q6eVSP<1y`e zJZFFZHRhT7d3$iic%B~Lwlfsz4)IO{2^j-W_MCsu@u`~r`sYnzRNBsXz-^Dq7v?eB_l~q!bpvKiCMLgXrCTc2CvUH8Z zZM=OR4==yYF{d-;U*p*KNLf-_mLA&sa@W`=mEHR~Z*7g;x4vJUgwqLBwR5$by&m%JPbev1rX5Fi{|;%;AJfdQ{VM&!&k zl+xnz-rfA*qdTm{x=nNd7{F)&n|02wccI#w8`Z*2w%zZRllS#P`mv{hwWFSj7}q=K zBmf!#-kDW^h$;jFSVN}>GH@mUv{z(>FN-y{%-voByDzb2cOp1tIT3QKs%i6Eoh&*Y z#b9tHoVafcm*Zna(LKOUZO60~ZjO%Eq4#Tw`(o}>br~Pu@AnUbuNTc+WY#2^!n??) ztHYr~9WNHg7tu_%fq@<~J9&6%m5Pj@fxONRd0+Q~i-qW!qB}1e&^v(Q1b{&_h4;Ll zdsZ*ZDNTb1Off}jib?)H?1Q@{bb7KhvvO$!a`BF9* zo5&IXfMVN5Vw40g6h8paUQN)P0Rjp=Ie^F+0~ml600c$=JTEj26-FW2>=I>_C3+Bk zI4+dcS!vhS!Yv8VQC;5k9X{2kM;pZ6T@)MvKC6{Nrn!It47pwJO@KfHh8ru{C5rW) z$s7hkZg8ktRW*t?9haJp8qIoBHT0Vi4PNQqcDr&Xt%_t?tyXy*7G3B!V0xXN)J>P%zk0-;fl)RVR7Jo;eW+5@OADnYK&dv8=Y z_;Mdids7{E4y2?eQ}a~DnD)_*Pt6fmze!HtbV{J)F0T*G%9})JPz_Tqv0{)UgN#AQ zNG!6ixM)^vWE*hED&WT0LKYyW|E4e@Csh@){(uyW05ITHzS+LpR_QrxMAhvx%>yui z0bby0plwTt1%V-1=+2={PDn*V%nNUJf*JP8-3-*7iFIE-X;rCIct%p5sn11me=URt z5&@n&meQp>K?BaWWFbpj2q?hv4OD7N8Kj+2DV-(>f-qF(P>B$ufE|VslhpWl-5wXU zr0#7d)rJPW9^`?QgDJ@5S~8~xeSKVZ%PuRc_Ey0axkuQPic&GjV^9;(XaXtw)qv2` ztK@bJ;Bkjq(+gdrQoBw2bG1KH8jEH{!!*Ovw$G_^!pQi#aAMD_*Yk#P(1wBI*eR0` z_fr?FVStjCINy{zPFB$*)kwAe`#R;3tC1o=fB_V`M+X4D2t#b7#4Z&fAP8lHb%Y^F z^92Az0tEV@;Hm_Va4m? z-m@ZzUL+f^cG;7yuFk1svZ|VivSamhH53MuTA)y=6qWj`6b}mlUb^K7opPtKL1Nt6rCP>eT%a00klHnk zNV*niIhk}x21^pW$t6`)&@`U-zBE&Wbb7zjkJra>{muP_kF>4-=F!c#1$Uj#ng)7m zp_*rp$+c1+ey){{5eSTkJF5qZnb}W7aS59nzl(iYcw{t4YF2utmYpH}N}0ul<5q?6 zCP~ZC)Ij#r;!sA^I2-;!E{n(}2}Ut+PcNmNAt}9(VRpOy(T~)Sb$|B9x*Akhjrf}A zCt23(stTmAOw^b`zy`b+3)D_zjExr&kV3gCp#2LLX&vB54k%F6%`pVAT2Lx7%zm{M zC4`>7vvwK$SDq7%y5sq*rdy!0Zk6a1O#gAqRhZX>DLDfN0bZ&_NF-1WfYED~2?>p# z31EE?WzxrwT^gC0$-9QCSV>-V%3WGM(&PP2N2#pH`1s@~YB2Nq>({ZyXn#DBRGDgw zrqA_@p}m!>h56vIpO(P z)7ODN#T`s;>gdKN6C(Z=qLN`OePmavYUdOi($C4ftFL8sv~!77#%2_kkR8)wCLV{_y#QOWF_7v%(&2-Ofux-mSs@i;peCE})~ zzN7Lqr^n}#lluep^ufyi6L+&MwF^6l61p26$J<<77X5v-n<^>?2F8kQ(_xzXt!h8M zC)IgR>DsP@O*)wdOc*fBZC7KJZ2R2*sPR`b*IE05x+$n)Xy%tLXss#(F}c!rgZ?%9 z4Dd>)l5+YSnX2|YAA8=Gd$Tr7lQWpR-HGXaaf@;ps%eAaGC~+I!eByC?K|O*Ptv=M zK)uO5%pT&yZjP5%yB$__l6BgaM7Kx0k@Y0v}{o`q6v#a;Le>N9H?_rqkis7z$ zU1#>zM=7EfAPGGt@ApA;(Ea6FZB_=wJ%Usk;xZFu1AroBMnqfx-_x0WH8e0bvvwcY zHI?gnlFPI6oJ$Ga7qyvnWwz}e>KJM6jb`c8d^BDw3sl*3!UBW_0mvq<*6~7=$gh^xTAJ}ett$9t{t8QdB=)WV3Tu7^EEx<$+CCNjD4SKduvdQ+O zPn5hWi5`YgXQo<`-t;C<+?dP4&V(EH0RC%^DFq4u8h_2+*BI+4B)Fd6M2!qVNOpE= zZzRSttE#G{h_sVKijQsl>kii(I&Pp3PaX&t%Y6Oukcd)4*0q$jBVAYPt5vmn8S}w3 zf`hohU1^O0dLkz|;99P7L37ogqa6$|%&Kufugh8k-?TN5#4^09zB8v%sa)c++OF-M zz%-M%lMksHPBP7Mt7^0&xX3t2qX<&f5R&Hlg(3fN~^|)N$B&fO^Mh*7YR8Y~AmJ<9B)q*Gm2BBDP=k7y25?How6~pm6;g{vEi&D`W z1a~I0JFaz+gl_3hj#oFq1rAX$gOegPLv{{uh9u1@ z20ifR#A+G=zT1t-2UU=ONGPFd8W!{5y`Fu#(@>xI zyuUx!PgLvrRE>-9xI`X$bw25{ZSI81Fy6DDx81Qai%#ae3C2`;o)GXji*n9^$Bb`u z<_Y66UPm26fQR_41Sm8Mc)QzEq=UKm+W!7D48!STU-irC#rV1~X0XFKkK-ZhPvz{l zTb(P0vYKb)j;fO?2BjhmmO(T{b`vaSjJV!MKs#l7nN^4anaB^!?=D1C(xq7Z|Ygche z^>@4e?deKh>slF5=s8u^m6Ju{i?(VSH zHD=tS_?v2XZ~yrUATRdPlAA{B_55KAFEH6!R)ZiJ#Zx^!oLWIEouEy-Xcu2-k(KE2 zsgi0SNs^KvAkB*t@HYI6z8<(wvtO#H)lyZ;(GZ6hjq(uyln^M=3&3I!AVA;)K&uTH zL@AYzDkQmX@84SUgF)B;UWB2>v3qwOlu6$P000?bo;;$*IhU=TVLwD(N7CH^3jy9M zuFVG$0OH`7*%Xvj!o&$LTpty~H&kZ2J->kc^E1P;4Y{B_IHh0pNwz z?ixcNoxB|y_G%~qHRy*CflwbIU>!S7%<0#y%yyg7iKdNSi$8U0n&DTa-n`(s(3&$q zb?2`!0RjOY8x}DIPjGhMyL`^9cZb$s%929j;c%Y@%zWRhP}IR839$x(B8nFgnI0sL;tbn+hZrYc{;1p zWf3r{5T*o1j-K0NjG4!}nFcn!vLrBo{4A9w5mD(CND6F(g(9AnqI9ApSO~Bb+oG1b zouUr)c3N@o6gC>#-i|AvZ#1FHBu>-yOv66E*)>{WB^W(t+8qe%I@w>ts`Hj0$L5>? z*UGIf00aSE`}N)h0syG(npgq^4lsUrvh*ooXJ*MHs$8x-RI$z@BXet4r8VVOLR4EB zUdghvd-FqV)i0P*(|TA}ef*@=F^Y(sVyctlH8~lpb$~Wu;`XdjW6Iez%`EcBDb3U;`OHxTqdBx6d;1wUjjQAwh638bp3>+mr#B2UOq zpUyS6){*rVR^vtM}=vDs$sVj_iGv!!Lno`yY z3RdCq=NONbeYSl9#qNw(Glm=b0Z+C70G2>P$RI={f=WH+xNSC(kSWq!GVA8QRYlCe`k%e%O=Ok$(s-&dLk^~Zxe~2Xs&h%gPEgZ9037d>vi4*3INW#-jY&)85H2~OyVWzz;90`BPvOknrYi@JDSLR5Hc89W;I7eLLvRC7=iDC0#Fq)&M{5_TVGM*&T*aD~ zeDpa%?~V)63*;2$Fg;~$pSMeU!5ARM zAPa&JImR&vumm7og9r-&zG@ZH1QY;9tyO7!kOU?$&3!lkHl2f!9T#R*Rn^^eIDNms zJinN`+%+ze!(jK%thg`3EqM85owjk`ak%*=eZS7jZN=Azma-|2at8Pu=s!SDTM$HLvJXTHPIgI`IaLnPpKfOECxH;jL`!X@=XMfwZ zon5t)JK@x1o49%7nj~D1rzjwE?#07+Z|_xGnJUFhtRk0_q|f8hlJ!nO1QA96Hr0zo zRi%*1>^Qv!@M@#T2GB!{>$4Oz+w>nI)0hS`Hz4|LEGV?KSg*3Fj)dXvYkW1gtGV~q z@2SXxisp=jW6s6hB9n!)Q~CrG^&2-70d|R1fe*sK1QwfE0=NJH!0;_=%g5`}tAlN? zJgGaoxM@WZdkBi1y=U)4vnWzkMU}-_>G#jh=ZdazlP??1@_ySS^}hCEa5Ned>^<05 zP7U_A^>cdHg=~RAc)Ff7!eQP6RZTy}%yep5_qQ=sAqnw>$#esX(yzVmW1IPaov!`t zop_8W?j8{qwIZHiH3HI1m%d?+>FMo!)ixTqL(5DS9oIfajXdwSPjf_j7>_b$%0X$T zcUF9fP+%-$`O;h!t!Px`4S~fHtOx|y6{#feNm6lBbaBo#S|_*e(1oFc4(uDG6Yh3g z$+5kvnTJ{Wopg7*R;d5f9d657e%^xaGBzxfWkGlCxoW;N$%TD<0xke7Q)L|TWvYTB z{Fttm8A$}yUVipbYf%Pwx2YutP}b4|zyIFtus832M=@eK05JeWSA9r7RYM^^K9q+d zG>A&JM@*LA>OTs|Y*~({zdE=5DCOHGhHw5taqSBVE}D%GF91YeU74Q3n(ongfyrLj z5Gfn;*Ch5_EpTH`rdnJ*Q@xF}7cZ;zZ#UPgp*=wg05<@1ZM!YMYuj!4yKIpdRz>mT z3N*X$OH=`m@{4v)K3c>tDx%-lL|(RV71Ln$=WQuK+p#d~eOyyzspQoV%6t zG7x1%`I7jvH@;andoL}ejHKA%3L;pWHuY3Z9WyeJ)?KZpROJzqvj3q-7y~!}gl*&9 z=(@GWId>=PM}b%%WoJ)eg|GAV@ooL^^fuR?Ysh7{`PDytX^S%2^0`K{_m3Pk^W$O^ zIRJEPgZ8Xj>x{EosojHUhAD(WhH)C(n#WUf?A7N#cCGs#^Xpz&yM~!>2dl4RJMcUH zROYH~?2!gK0Ca1OmigLA+UPxB^AJ*|Oqu=n#_nqE!@TueEanQ>Xy3HYPF7@@R4rfJ zFTOJziUj?(>*M#zJ30zI090WDDn6sDtm$SxKq6_*^OXVfw507ISuK|=)P1$hRxtgj zwVUeeRq~z71gUD&u2wZqRg~NBbfpQZ-U2BB`Z*4O3&mgp)+SQTQe4;`=#j;abmjEIk+>_R2CAM)tr;J+O?XbQMbU%szFJd z>12>GjYp)apNUAH5gM-Aqe3ux<0@zheR#Yd072=!u@yrY1PB))f4;z*cS+p z`-ba66KEGt|04f=8VmtGOQuo>!Jq&`E?H{>@B;vEpnBFyt2g#8rBJi;W@xAqVpS=v zSuOOvo%^eeo}c~Y(frzfynac2>+Htr;VW~khkN_!MV*q@nZ>A_`Q^3td3S4HOF1)j zJ?@ISYTP%|IQjGA(?WlxH3cgojW{{Uh*J4@!(qWNCY^A`Fc;>&x~Mv!v``U5wo1Cz z1i7|{LQm{mQwx=Nog`j{tD4bInJfmu-%vHuM^Fp# z-v5$t=+^Hku{J<$_wCM`?ul<^yEB&%0bU!HQbb`I0A9mTm?#JU(?=ku4)jSmc3L$~ zW@axWNmj+GawU<)&+})mbG=)3moBTr*YQ64#7nGqe69~XNVU@ko3K;r$%^hI7c9b| zd9c(UTU4zEvH(;S)&yPve-ni}=vrrHDaL8mr7Md8)*)bq2s|3dPEkz39oXXqA=K-P zs=d+@8G=AHOj4(g{?=z_e>@IZVAqt$s9BMgQn9uy`uh87eYQ=F+O<2XRYj2`SM^vq zlwF||!G|_pUIj$4nnWqdJ0z(n@*Y|sA2c>JIc0UD?jv`847kq-NRo3g!Fk(wKe^i9 zy85sQ7yI-rL%cn7X?^qqS~(x+fQJ1Ooxy$_0$Y1%d*sv0G{c zzykp9!D@j*jh&g9$#S`3RV7p`(zgsWO4DqVGVxFC^3paP`en%Mv(v?1R<%^U?PY!K z?zEUNmyisLx(|z|%UGRXZ>FIU9XW&Q!@%*}FGa%;dsb$m?wOi$SK)ZHHYDf;3HK0t z(JFv@I!`r;%$YkiiM32+9MciF0jWETBWJ~?yJPT@S>=8qMi%t6YGUt%HHsTdWB@l( zu~S5R)i7Gi7hRG&FZAVWaWLjRM}XCu^-08meb`$43sJDnxWE27#vdJQh}e*@=4Xv?MuIc|yOyiH z0ApW}fcv0rJd-J4_biziP?am0s-+THs{J{=$;WQbPd0CIcZyA;o1expJCpUqy9$Ht zxW`u_%TjG`oxOL?Q9D=i+JCf|KFqV2Ig5VOz&r(J1_mt|qKTG{XvSSpU3iF+o*^;b z$`KHIOt;0A)1KZR83NV?5O&dRI?(C?ytYmk4+P|;8lxGYh`)(>IN_iIy2;s#N0t{dQkJ&7w@QM$G&OzwDZ;$l)gU!x~5+YFm8Ua4~ zML-4=0LHCchGiOv4%9OI0su6SEZN7{rEo(`1gok7V1m^N z+r_ev*NVg7PhKyTs=&+SbXT$`7q?QS7rlL)`Kf!?u;8Kby^aSmdCBG`Iz=DUVi|8N z=EYH%F%Cec$#DwHWE{*5>tXKt@;Ig{moeXss&T4_-Z|Adb0H?T4(DQn% zQjhHM(3lZ13{>zG7I~hhulAX{%9#jcB)}-DR8^^{B){=FBG`B2IXp|DY6?qT5MVG8 zAaV7TbGFVZRUUz81c))%5&*;o3y=VCpcLTvp`_1&i<4q!|LW$y85hZVs7*RDxL&V1 zR=rJWn-+fRp-OaJsnG06SzF=(2?5@!WsD_YHh`&BOR<44FG#??v44wQlFrNpha9V_ zgu+0YBg5A8`n|I6j^)oWwQ29brgH4#i*U%%zvC0U zw*4K!GS%5@x-WR&G3FlouK#KlBwt&JP9x)3H*Ncds?o4Y{~B(FHH?EBD`uSmS9%~T zHV7i2q9g`l$PNWm>YR?-CAslJ97rZBla=N$+2&*n5_CZg0%HdN#>YW`B;eJ>U79OI z1fxm-jtl}ps|*jpEVuz825s~O(T@1e;%xBZ*i*d-^#Qha7_clCGq}83?Fj6ct3664 zkNqA^B-8n;b$1*x7MCyr#f1U$S3+9MGz$R&0saaWSf>a8VAV^ZPJ;n}HxMgLM!_1{ z86^`}GE}UpiU>h;25;M`JPgL?S~SxC^W_vna9!=-b$M<1@%->K-re4;$D?*!#^WOW zraN|Lt{BT*t4zhK3WCQt8^Fj_JSpLMcrCw`a=VH5eOUhmZs;UNm94{&@Y-$F_5s<3w01^NKzakca z$n4v?dmO8hx*K5KYj_J=F$T+ujD_bx_CPuCEC)yd3<3VB<$0Y@rZHGRD;EO~Q-9Ea z^#hD>=r50}*)_tvOJ>O^F|(l(*idoE=}HLVO_Fnmr#-BwW%&G3Om80XJ|1Mz*Tc3} zTuIh0j(LgnoYjQcpm#(iF_|-TRs(bv_N82eJ7E;85!0iZd~wJ`lS9(0DjQY0hoQz9 zBYgV*zuQ{$-~rK#flPfR07dnH46R}9^fK}EZz}2W2n3OB>=|(Fxh+U%?-Nc}>+7ds z-n9-gBEA(jLb3p4_e@J~4@(m%Gyq_b9rqLiO}okTAGF)7+4GFBWXrHhu$vIu7c?^H zYFuEOMF5r%CL4qw>o(IhAg%7PAL3iV5>-MB!T<d^Iq&^=1 z(d8=z4IIpUPco%>4w<>!UcKDxOZEqf+Qwa^7bg3h!yae6_*g^7@p4l=bj<*XBgg$h z5z$^E=yC((;EY*}Py55XOa=9rae^B3zsyrE8Dnx%^$aUPDh}qJ8bnV>H&ese_5JOJGlu)sDJ zjAiLkZn!hKc%2c_mpq1Hp@lMf#qj# zh6ksPfy#+7ZdkKrW}629!RY(^&E=c9v$Nejd5wT(W{$51hqE@uw8;LU*6g3R^{-!T zJ#H$Z6Hf-D6WYLv$cw>Y^U|HP-DS1fUJPr9kid^(>r?8L?p#fCtX|b$Ondewv_@HJ zE82f|8EtinnsZE7a`yhddl$2Dm8t~cy+Vtvo38X9-z0ngf>aUD1-wYTuytrwg-w$x z4E-?bGo?6MnaJ%L7XjXhwK+d|5vGF?)901r9h4t1fbRx#T|0Zpo;a&3WHfnV-(B_QM8HR?CrH zD>YMq(3(hOJDR$3iU?cC z26*hFhZZ67lUGs`VAjTSRa%R_1+$QiT%5C3lh$y!ga8OxHVS|V^&vn`X*opq!SVwj zFqjcYI%(-XtqkMrhw+s36=MP zdRMAx4gh`u0IYw&(C=XH=C#$oGpy#u zpk?~?O-9^LS|$lvYPYGCT#Jf&%~_5@(;2R{PDkE?J$vVedNb!`n&;f=ENYJNw1@+M z*GynWj!6m%$kh8_mbs5P4!~LrPC(OW^%7uRVLZSAoO>W-4wMu%iv$Ie!LgP`Z#J!2U-&BiAypu9(W)QY z1Q!9GX;oC6u0kVWfl(^}2AcjP3P$V)rn8&gGjRz(b~-bI!y2rr%9Y$AjlJ{1n@7`S z&5Jc;clm`z{g@uFy5otQRO8`(4pS?=0g1{EEY9N7OU=5!{P~!+e?-vPS5--!Ky?4@B)Oz5b_iVG%57kKVYAidDaF&!jJ zswUnj2)orBm>8zC#^q{3&R$}2tz@u@xe(J*gh3#Ighc&Q1|kXDAsAxgo%B$t=P0UV zE*AQc43fdvb_AkEiaU?Q<@apzSESq(oU;fKOx^G1=p}OC-Zg~YnCqq@RfZu~A|+ck zJrXYIc0>_xss5LT5j1!UG?UWqb_odqKAOdV1sDK^O)bZJnEHVMtREOMtm9;+_wnPn zvzN@|99LCUE%=&m#k2=!Ic_lbwJ33JzO)M-HP+=X&Z$O|!xk*1DaCwT%*EpKOMBdl zF(^QGjpC%5PMVnjDrX5_e|uY}X)o)a&Rh%?H*{BbLZ4jMx}ALq6{76PIl0~LU(WKQtUEY3q7-5SI1@9`!H0z8`cd-PjP|=+ z556xvfHM^cB7oi~tFOB$3dY6owZ zU?$gJjT2)+`(<@LqIb^I&NTxv0zm$JQzeR`C=3DqX+=N;5CG;;Ex-;8A2z`Hfh04p zlYGCnKjxH$reZ(k}HswxWye&EVA~1tLdU z^;~M*YWH`~t<^xbr!wxz_>`IZw&y&L_QyG8#zCtWd?XqLdT8}DA*j2{tkEgr?+Oge zuCJ__M0MF*!^};3_oCE6jL&A^$G-iPN7o`OxYH0a^jXAGXAN>3uC2kT77H zL}HuV+PSy5Oj@*iG%b|GFh~gNgW))Y*iL1)xs(9e0KV?~$IAc&0iLUM#z!hsXaKoe z;}W1B7{GjXX30`C5QeI1s0CafjE_%rFg-44E8Y9;V2+ekul~CVHJ4-bkZutIb(E08nc|3M6$(Qq#(hr9?x}jrSv*RR$8X3MeHSCPwG2Vmz0&PFv>X z>*Z3+!8kFmAw(r_Y#=TSafX=Lp2-gAah^zj+iOWPasXmCv%8e1%651k>&Uw9rp8&5 zzlSlKn%alO>ZM4R48zHoWmi*o&fI%1=SVFj#!Lr*jva{PFlBEfT!SqBU zaaS>DSH<)F`tB?1zgV&3rcY~j3y`rw1OPA4TSkJ2cTXo7{a95e+zkQVTQ5`4De%iMwz29Hf6h=w(nCN|0?j$%Q`s0sj3tgSe>h4I&GS&c}N zp2$p~EG&Y7sVx{R2jc+%H*{<>kdOcsT9>6}o@uYzCzrFGY|T&z$fDO;5+=*6?$oOF zWsJV`x0VlCmKO&|vZPX|Dpm5X0Z6AJAptT7j4`%Zz!sQQ-D`z55a@=$7mxn5K5i1K zCZ_DCAGrwd@hWRgp1gYXcSpTI$YnI{t)7@*`V^W--cy;2Uso8|WtO)jKp_aoQ=IGu z2mxLTmeK^%0B~L{W8i}c0N^J8!0s6(-I5%0uBu81XaWfvC~LJ>vjFEOE-CDwoK{%H zeCszq{1|i(6Ln~HtQ^*)t0NH7SYtcPW0i+1Z0A@;Ydj9e)d|LmTBMRoX4oHYRgEW$X;;avbl8f@ zmoTb<+>IS&BhWT6vc>}pKq*34PHGBP*skp|fmwvGK`Rx48yPx6fY(uZKWi?iCS!7u zrtOj<6}`OH*r(B+R2}da=I*b}QT{7BDKiHz`tA-1@rB6PA$QwF*e9*I`Qm)%)IgJy zTfYnog2}$4`E($B`EFp`L^6`jl2Z#pr0vZt+0C6y8n~G5)R~Y8nx@r^3-SQ|>c!GU zSpZ=4%5ge@0Kjk~KJL!WWMoDGuF6$a4wJGx)LXY)@9s{fr1{{L^u<<8di8Qm<-sZ^ zp`~#B`xUl4rIHW2Ib$!@`(aBX*x13C02s$R7u;X?H4S<0tkr>sQ zkW5q@6(lv&VQXWj071|ou#GYU7^(oKoHhhJp=?_LE=LATlZ?S6Vbt4hO6LtJ5*d|N zZ8s!ArT!mD5_S7kk4bjxxcB%>fA7{<+!3-i@tGrfDppKO({|a;o<$DLsb!l5jJdZ{ zR})%3{HC#6)oW|n$C?Njxn~nGzwy_A-2@8I0Qdl&>cv0@8UQ%u0$>6P0OL1^JzdI! zXswYwGdsp&mMc0VPuTU?bRMt(iK}zK|Bx#4WmH7AS&b3IN*vM<;XLO zGZtXdV97Bp(+p}`?iC@ms$*Jt3cG3JI2gy`Wa}fdxhl=DVkH)ZnQ;9aJ))Pnysird zQ8UJ}(0k$Jt=PM9qc(^Mv)6(S%EUzkOe&)pO(`CO+FRAsAXN>lK0X3~1U@#zt$ za#YsQ%sA5e^u)=~4Bh3!f2eL00hXy%fC(Z%0hXCs1^6HdOkns0065XsLhMFn_Fg-y zs-Y?e6vK*Wu2Hh)=wA7(Tm?mFT)9-@j~$9CwpIaSo;C-oQFRv?vV|~WtV)McNmavG z^<$dmBPmfyT1FuVWEL!INP1mS%BoOshkDX|XT9mG*@dG!Z&yzfXl&Y`)G^U)57UXx zyN(zy07%%Pg);l8#W4W}c$o>B>`;3e=7-&!Zu203|A~218$V!}=k@#Cak_9q10CZ`sl<=PA~Un9-_?Rt z8(pa)%m43mvh#aYr7Cr;glBknOnCdYThAH=JpgQNTW-C*wOaNCXa+JD38X6Bw6Y{0 z6W5f?8)7ZL~PK)|o-u7a(Os!Wlq@4Ffg^>iZKr#>v+_w&{6SeNGg`wdc8vt16Xbb+xoE zH+-(78Yb23rmB*5YVX+q6#*J+mPrN(07kWDlMEm}(179N=Q=MQ1; zo;gc7!B);OR^{TK96M#bezm*am+mq=f0=@$3Ba*w{Pdzral~zubj>(>7rv`dS`*j9&k3x z5>Jr{WSj_yI*TZ38rNh(6`kzX4P+Xr_|y+{3vL3%nov8dhrk+uF2I4cPg#!@7mg;n zWY+Mox4kW6qeT`*h%j#$5i8wDpn$9@MaLB^K&ZnAzKZ280G(KaZV+S-^Z{aTy*M0c zk$ET0?DcVES?#?~yccIbCr)0iYNKX4{vP*IVUBb2peq3p0lxb+MF8RlqcC9Y4X305 zJ^+{>0Z|svVCm7IMjZ8a_O?1gKa_M5fAWh?7o zPL?f3_NKw)mX_%=O%R5}&sNMgeczmtX@;qoeU8;j>a`OKC(_^T+!bvQHjx zWOCL<|CZlg57XWxX=*(a$IuCcE^3&M59jexscU0slKXJ@*QilS2aBbq4#&pHIMep? zQlT$0_LOBAVQwK2Vk8_wxLW>%1_{rJj~q2t{YVAzUh4+C<6mVcx)uQu-ypWsNgr5J z?oa?RnmxZ65w8mJ45#5|-)xb0691?vzi?NG_7|w$$GBi*kS+n3m15+6g7Pbmu-Os; zUhCCHBowh4C^OZ5jg|l}0PII5HcND8diGe3BzPEBg|TW=EY*;ac;Kq!V8(yur~jMl zW=Y8Ief1F3^hfjh^;PHkKK;k__tjBw-pJ8Z?nvuXSuP(~qHw7}m1E}a$-W(G&QWVG zJ=D0Z-R2w$3aiz5z~ zQ&m8yWpoGfRBw(a?79OTcv4_B1yY4~+dmV+#hq$rL#4e+NeZugve+tfsVWFnuk|xw zct&W8OIcZxl}h!H1pp%fp6fMU#Faq647*@&3=}^o7%<;*z|LOik@AoTHpDm#6{j|& zcK4{BY~-Gy?KoOGu~S!f4O!gyi;6>{_f1{v*LGAGEz`)F+qu`JR+qn0ee22f)md+d zY)S-xs-dYAS-+j-*-rQD9}jb}7kkT!60+0u8CH6UJrmbEf|^ld-=^LB?d_Wb`UTM} zFL2ZVbb;OGxOse|&P$8c+uUcw=E`j`dw^Pg`7|MFs!>K(60$eCzJ|8UP-fg?SL7 z3l zT1QnGBm@vGcf;PfcrX~Cz@rbGG~kq8=-zP{$WTHxROeZ28ylLry_u&}`@QwwSCU5c zNqsGp=7+z59oHUIAIf132J0mmy5&aC(aOD6TXLCN1HH=L&M+aknWN_aZzJW=*r{_o zd{|GTJ1aqTSPC$A-wcSVd(&Zs#)zqS3pjh!pO%we<#A!pyysq*XG{Sa%5-`ZNK zeYrhU#0uHRc#P)#aZbHseJe)=G!#hYiPE0=HpU1e#|RW3Ga^IC&jOc+cKs2M;03@E zwm=}ufF6q#00XjIq-4h=r%bM=0RUjF7%*zfY`<%ko9D6claIUd^~7ZIy?1=aqc1`Z zZIA)SSNY5HBHRz4g?cyL36^NOOBMhZ0lw=kkwqYE0PKFf_i-SNfraVpl5LKLc4oP% zp@hlAR9S7lJfDUXg<-idT=7TysW5e39tlS7XWnFK?t_NXf+^{raK)i;V^&)mRYpLzNu>k(LbG4VqU?V z@AzSQXL2cJEZp6+sxY=-1Gog%D2+moBtrss#bUe4Qls0ZwtP8V#aj1tJ7vV0>i@3A*BU4O zFu#0y;TC?h>-qZJUCdfMd=$6&`91m{hWc{`sH&Hw_822y$oXm7nmteEZTNoEi?A%C zpC6`N1w#sA3TK})$FzFu?=3u#K!Um%k|cpXv%J1t?OCZhL%ZC~>`VXV%oBy3*}%Kd za)krnb{0;GcbQWa36lPozbdwDVX#o3H!0f%HJH%AY5@?en=3d%^uWp*fu#UI$YKSU zqkIElCS0_grGo&_!$k!m&8n1F*;Jb}!d~Qyp}3aB6`n|vkVFCm07&$EK6={c5+16R z6WOVH{Okn)76D!xcE&^qXV3s0~k@3l7lRSoNLFNtJ2zLVPGnn_Bz$r zH%@;1-eIG$3Cd$JO9Q<;Ot`d{w{9)^`=#4>cpUTL++Len@&5eyhxGP;PMofg4CvWY z+WO~@|I*s6mmN@d>{HHZ#Ek(ufzF(vYn>1@lq&Hy+8_UG&2tc(xB(dGoQJ1oY#4Eh zxl~jMGT$ZQ?ue?$F|Got*-7p5{TR>lR|;qDN)+-+Ln=}%tJ2#KB#RJ)aOB971Q8{z zn2ix2KNf&qug9>u(J6BR;X-0Id5MV)uC0yl*nbt+7(eNsQz_&fp;!bU04)9)g#eRk zkMN10b7D4*9H2JyOk%ghmk#%ivFh)qH_J}Zw6YKCoyTi2fpbo*=)n)ZEp0oXW zcDuanc`hf%(dQv3{~Zdb&h@aqfYw{vtgk%ONDYpdj&=h@;fY}?6LO(3F!N>R)BWw` zhp>BSN1X-P(5*X60D3fAPUe0S*=Jr}n(rAKvo&-2+1_HUkyigf6L*1Ca~s@@qg7%G zl#)gMnW`iOino`6ECc|AmjvW%zGP-M~et~%z=F*$MvvIXo0LrmNN zm(r1QH2B9qIhi610D!bY;p_(~WvVeaLXNN1hsQT?Izp@_JRl~=w73Bn0iJrrn5H>_ z4eV1Zh5{;fkbv)Iq>Lqdp+_M&t{RddtE$GG&94zQ8p}qyVcy($crh5HD$G;GaV00H zB5kQwk{+{eL*~QB&s;s_yW%Xy-yFvGz+|i>V@1;is0H{8ju;jn=Gq+lGKah3s7k6P zB6;6)O*56Hwsy12>*$a1_WJYj7S^d@I>)l~GBhNU>dBs(Pq#LsnXW(7-PAAgn5VtY z?8hlel{zrQac;Bpk-1nr8&v(SED4Y;E?*Wr*Vgae`AhFU7(*YmTWPNfiUh@+%y6sK z*i#*tQiU;qyc*#6vyYRs2E12rfq?}}AP@;Ppb$b^6M>D`{}1u&TF0lGK#RFfIQ|+d z7;$klyBb>$cPzJV0|x>AS>;Fp%|9@JTUrG`0xU3r|BUP@uug`y=J8-m`zP?!5ZAe7&8fY*|-Zm)qONUcdgD4bYh~ zozXy@!IO)k9{d^a#NF%ctIDpSG=()6WQ5$XbQ++w4Zj}m-`{rgA7i(rX*$v%=URPl z(Ex)1kwURD(iCnnHb*g5kH9QQXaZwacQz<7Q`7dLti8~;Hvl0nVaL{Fmv{eAvKDE! z?^Y`Vct}`}Y2~L;WMd9TrO~6+SOfcb?gS{vyNE)yhpr$R<0+dqf$*rO5%EJbJF0}R zT48m^Mlx2+&yyBg$A;o((*PF%9=nxB##KQBc-;zV!1)1Sz9q1G6pJ#MNs?KT2$ob+ z!Ko?cM;4;_l{T0;`tWxZuf}lo@OvL_1veygOdDAKqC~W`bYmH9odCr^I=^$q;;N~$ zZfaj%4|VooSMn<}3jxZUj*b$RTi~{zIV+G+d%f^t-XLg*Qd7&&fUw;yJ5*Ip8a zP7E$o-$dHCdQ|^zWstMf?`@ou%pIPw$ukJMI-Y^a3d{j0RU2lBH|`c-Y#S@KFDfV0 zbE-;(3b|m+p+d?>WuZQ3ED2zE0E7_7%|1HG5<^uHc`sC}{{ir_0ycmp0RR9ic6|id z9|@%2hIE{3l0d=BiWXHOX~)Kyg}~?5?ZNwsXA3Ng)foH6GGG9Nm2Cww3<2JXrA`Kg zpaE-Z7Doq&2TWkkm8*~iJL;J|W##fpR@Kmzk)5+VJaITMhGX|-+D8(sBFH4uj{Uqm z$KQ487G8fWhg+##^8l&^Os3iR@A0e`KMqg{P?P15(k+Q{vWF+A#^UWQXWK$pONn`y zsP2dIK>f<7@W8I^vqa_WxK_v*7(AjPZfP38JSpZFr$iv^mJdgAk*|~3GyCL*bRPe8PRDAy->`aC!7GNKkxtlN!2*!5=mZvqe-p<` zTmuyWzN*E{B$R11j2K$6SbHeFK?CkRSYnhYM)$PxkTVm6Dp6I(_9WVBExPz$HK*s( z0j5WmBI#c$Z1p_c=!=W*`&!x`?<)U&y7l+4x2k6Td`U-Z-9{VaQgUMsW7q!T$a-X# z7VW1OB>?@h&TiAVaX;z05|IngXtl}7uZk&Ml#iyu#D=E4Vrmj9>Yk@&%{}H`{ao|P zy5LNJ!3Gs@k5iM`Xq>Sb-4Ih-jKslSVQH9scm@rc^(ud*))Z2=$_aM|n} zfP*U-v3;2U1O^MN6$sW)0ee9P5cr#_0Q3p~P{Fl@cnU3uo`8Am$_yMQ*uX$`1h3n}gAJ804X1l%6B% zfhNgSQc_jhPnkb$^yjo^)>hhjd(?~cyU!!n;)Bbc-TeMIKaI<;o;$m(s?p45{r=Kh zjlBI$g*Ie+A*(z%)2w@b#7hf{vv@gse(L?RcFlw7LAmtKgjbu65DHgS>Sjxj=@qX<;O|Nl^^JwgcFj^JVb`x;yM_m5sIhs4r(^+fgnWolgpeH4 z@N#)Lo`w_!ev8yt%pcfhrIoVIY^h%JGo?Xs;P4FtM1Jho;id~20e;Gb&?H=$47OOD zZlUm?d`u=Ve`M-&dM9V60yk#RSr|Pkq=a08Ipv|kOL8jMdd-|@H)iIT%qVN|+C#$k z(^K2?sbBZuxN;ldruBIDvH&917?9%0xZ8F*HqfH{sBk zloHBa9Td!4%6?n>yubhI-!kJ^Q#m=J>&eqs+re>aIGr=AU(VWVRV`wv5-+3H7{J&= zMcJx~7bla35SZ0AfItDw&xc>#i!Tik5b_iyxY(#kUmIhL02ToPtzlr#lwE=zLmHhet3148V%4Mut0<6_AktY>*_tNGkvW09Ym9T=%~EQ>c7p$i%Te#!;fMN4T6V3E2-x&Zpqk{e})Hz^lm3omQz%vffQV9qO-;3QY8 z*qSM~aFzeb6yvQ=#^JKPFOQMx-n4wbpgy& zlQK(nYGqifwe-5?N-yKAcJ&Lf7_tQON%lbS@SD%5k4lpv{J@3C)LAc46Y zdlIK-g;3k98b7Y(A8_$?PLfL6Tpf98L+@<>;lzaBn5y_ z-kwp=sM4*kQ$H6&vlwf!SevUlHWF&)=*$sSg+lOcW@r=ve##Y8M^OM+o@yC3DIfq0 zZ@~kakuhHOJdDnud#`E8tfX?SidOL7_^+m4vCLMg9#kAn`}LCg_O2F+p`&gU9%VFn z7EVgi7hLpIaO3k_=<|b`sk3b;RDD%3-FCCMiYA?TRu}VUnKCxrR7I1<%oyCecd3@_ zS>w}7A7h&a*CC55IFAk%%Jky@YIThc$7Z>#-a665gK{j%n}HD&Z8Peo0n*p)*g z%2NeYDdjo*=NcOeVq95%LPkon&!k@^=CTb)gaGnBnJEByWUvJYR`CS~%v#)E zW1c~jf?6dIX%yErIqaYC_3n(3sQ8hPjz*8S>4@23bT@xbER=;r@&R(VZ0mEVCVn;m z_5dCXjwuET0M5bSm`XqaVELH9z*u%8qBE1MoZyO8tejY4)wcz+xDjDtrml^IgJ|ls zrR*OV%~X!xirKn<1}`#UsK(XAxvwr-$(uwOr>vJ5noCi-MLS5L&?peAQDTuvH)R+` z!W96amq@Nw1BzsvEjbK5cNF9x2F3&(hlW7ZCKJ-B)fGS@1`;_0G1pj2&nN*GBRJuE zfT|KH$wyUX*;Ex3sxvi~GZJ|l&hcaY5;YRG7a?pUlr8D$ryK!Q!d5pbY(3QmfP6r@ zQ~iwVGBj?G0BC&V@6bD3?}haN5F^jlRqGq++cJFA0$gEf_ZL$d0RjGdt|bLg0MO+3 zTv`hlAV9;T4}*CLm(~i%MwBCBnS%pdNmb=)Sgpg>u{HP9d&fPUAfcc1F|ZOdA2tow zTplTnz5Am~oL*MkdbPS2X}{05GW(N)P_u|CE=MF#QZ5RT3{^iP!#On;^GTxWUC7w&^wK=nN-E0-=Z81~s`Rxcw%PW7hdrG`0dHod#Q$NsjasZlo( zMQNA}Z@2OPo%%k~A#KsF0jS*7R3-Jw;_Sy_y^q!1eqR(O*{Xmn7GaM5v~5}5N9`hA z8i3C2pkBWmOHm>%SypR1l&na$yq2@n1G0!y+ia%{Ukhz#YT5WAvu?!EUv@0%A^usHe@V_ zWdMk501*McIu7>TaPG`>yn>9ijc-=qd(EEhcz)tG?yhruII%4(b!L&#RBi^{nr6HIBF_I)Q2C32b1rz%HMX zowJytX{u{JjnFz$xRcpCudp1xE$S?_k|w9i^0 zd*(zS3@=N`Ryuem7t-oUudEF@i;)eoCG1EbV;jl-DKv6`mS6?J$T$4^nu?@UR7CWF zn&<|ggeqYDOQ|YgBLJ{3#G%3fEEvFofEXN|>Ta#uHDmOCapnsHf(cnRJK5)&j?g%b zTD8J4gqSIgw(Z5|D)-vqw%mOH3ITo#j>!j2Fo1I{+3S=L4oJW=z+f9X7@0}!joK`# zs;V+*Nt|BKb$7W;yb%^(S&1!o$>nSGtEtNE{(mpuFYCOXy-w$Dm3|&BU%#I8>+>z+ zO%7tD9Y(z{XgA7BMY=k#Tqc_id!WTGr%QGwTu#gQx15o*B(}l6|bN+qJ=JEb5 zloz+PX6{d~buJGdm)W}`a&%B!3(Qe+8KpkTRAZ3<3<35^Myy9f(ii}(V}kY&Mk@xuXEG)x zvs$gKEftlbm3^(~Cp$B#rQi~Btg5PSj^we&?Y*7DJBjsY-yVcx$PXv_4YWa?U{&}1v+QqjrR^+ zamOGsV%j+-?hKS%u=YUAY>Ip>04o4|XAMYw=TK>Li>VYhe`Y+F+>RkuQYAST$xw<}8>VG)^Y-fbYZfCM29)Ll#r~+`mqiL{SdZziYqqi1w z_OG}0>iB4DWdHKCsa%P?n(VqBLO#5{sL|y9+$sSYOUB*@Nnik@*fKR9-~$aa(?^+c zjJov}J8sr4c6r?gTKCC3nHi1jvi49lHPo6PhDlP#R-55BZQh?x*3MtQYH;3t|9yTg zLHws>U_UwN!;ADAd!0c)?$%p@Q&lUHiQaEQC69MU8Hd*ze zhNPplW_t3%^q_jsofX8ih#;V(8krVNT2(}B6(paEVYP5i^*Kjg`{@m(CuVSQc2iWWxF=~EyyIf6Hn*tHqD~v%v z1hxQ>K$sirFsO1DcQ-AX>m5ML7&2$#?vD^tK4U=G>+&FB10Z4~V=sHXHD+jr>vLT7 zb87?Q0b~KM4(CbtzvZ!*4HyAlEbb$Vh0z1>J5E(L35X1em>vWWs4R^fWf>BRB?w7X z8L^sU8SONl8i|oZnX374_FF$(KiD!i?>tZ~JKs5}o*$WxzZz|;OKaho-3qi)N_)(* zYnU&Z!>r!1`Px#KQ;E)w&+49M4QXf@ftj)2H`~=BqRzCvKInhUIrOi1dg0Y7aip19 z!y;?rG<(l0tn-47(CWN?tfrOna|m;HChnBcbe#QyJ=Xo(bH=Hw^*%kF6YC!$uf2o* zdR!mkysXe4d4%8oS_fK0SPhK5ObAmXKIv?7T6 zpp&X)2~nJMr6L0@S#v6h2xkdFEo6%3BFh|$=+|Pl%NN%3Sff;TWSNwKXAe^3h?-Yp z(#~d|Ickv8xWn&xO0>VWTkU5^L5aE=nFc_XjWJpl^I0SoJxsqtf1XZpGT%aCLOd!>K>J!W}`wjDSh?pIE<|vs_PaLR*iZxV)HqQ*W_j`}) z%Bn5Zs!{c}>i0yC_G3Qmx0i-}8~eH2_wm+7DxX*OANSS%)bFpGAqiGoqNXM_Zkd_) zC-#JZaW3Rq8=GM$MXFB6*+Xd+i4u~Lq2qNHB_JVkUJD9M4Y_g+KTk?sj{Z)iPR{#< z*eoE8{nWI3RAEpN>k4;}2OxyZ2a2mJhCe?NGlWoYL`qbNzOqDxG}Q|gj#}5^q@1+^_zRN$09rDJiNXiW9RJY`SQ4HPEg{5 z0GA0azwr=QI;tarBb(t>?EYn~_iQJ}@w~{M@H*%rf_l{%J15>yDuRv_ zlC0znaZxP#dn~p~+9!jBAq`Qi85=?==ojgfwDiXNDsH*rQIHz|z!rc3(Bjax#LJ5T zAOw^4vyOa3w+C81Ud$1QLSYsF1Fu$W5Mcwr3IN#kP5Kz;7FZ|_Lo_a6iOGcvZy3{l zEkEC(R*UVS4J~0l-(%Yt%l-ii0UoPmT0|hopbWQMqcsFS1Hiu7wZ}Xo${bmEZOSFI zD%LCxx%X#r@YH83`|jbg)U@pAvCZ+k2}f(SS~4!E;JtOv9!v|DlKUyniioDWj3x_< z_k8*u#;97I=HBy|+xSv7_J4~@O}ir+xbG+;K^Li#(P&yQF(Ne#xRbsTE?`L9j>VJ= z&{Z)&Rj2TnW9&+*|M2rM>k@-KKgOY*Dks6&mq^W$B4A`$X#iOQkPyC7{Sp-~3YCtzS@5s_2rBfSMt{j!eTl!UWDjoPqWF&QaI^cohI(G7s!;Z|Khu zib(MhPz@~3t)m-f3}3R$9+JeGxhkO3w;41b{Q$nZjfn*u07kQ0$xH$Qfa#pf%q*k< zt|V7g%Zj9X+e&2Rw4K%KH&4+IMhDB_O7~yNJEHU0;X(SeE9d0W6I=6Aj}Vzn}eSKR7)mTpCy*Td_g@U3RNmgI$J0%`>${CZ7;PBYydW;~%2E@~2r)Dd-EKStPt*td03M5#LIfB9hT5!l8sG%FJ$U>fDis8?}L{cKk|mOY2AC4DXkimu=KRkX}Del3v7=&OcN{Q1bwt z931CV1D==~xk*@RX}h)FL$=$*MQ_&JdgahcAqD{`7@!~?NLS7>GucazTq5D^E6Qj_ zO)vG!u2a{@F0Bct?H-yp3IYDQW!gljfCh|fx6(%tJcuSL>>IPY_0BBWCQhrWDl=9L z75w(y;b!6TXP_3Im?{o^xKyXT(r&QVQxN@wt>ly*2`R1Q+I(17TmAFW^GlEO{FFdE zA*|JioPnAf!f8S+OaeXmC0$gJE$F4nowX$Eog_o4MKdnhF8f!xf6eT#*`%{a2#5e4 zKur&A`hW3lq3we3`}Hj#4SKB5M}afGF%T6&jD| z1~@k~RaJ2%6n$7;w-`N#$?EXR)3WO4htsgK9^Lxo(do1{F0a$hs;3W>dXTCq>8!Pv z-R`p=&T9WdkoTU>g`8B^EoQATdv7)OfZX18#(+yX_gyq+IJVKmKotsyQz=q5X?_t6u8g&78?0fjPv=kt6ak)^1=uB&C~Rg7tywBO zI4>B$dSg!!Crc^W7@U+en5$~AYVu??+J0^Kva#~Ainrvc;e)Fh7?z%l-2Foz%;SLY zV7CY4X?vP8)B1KYwM0E+i(GpzaW|Fq7~M;!5KOtIa*cPDM6IC=g*)SU+fQYWDK$qn zdc$lezzvy^aryet%#lq8*8lB5FhJMq(^Bo&WY+N%*%ApnwE~uE?uBFp#Zc7$FAoNp zB_cm~6{Mn|fP z0?-QJD+dcI0A$XcT@O)QcJxU!N{;;nhvVe`_!j*r8BAKU$HLlK%}H(TRuF)|pi9yq z^auO^Udt82MWuiNjB2?;Mv&%ZFoE^#MwUz}v$CP8V#P$G!&V+l?mfL9gtbWQ=T1@i zNn1%pa!;-Ao+=NH_T*@KmsZfH;(D(&ojI!ZdSBYBYWjQDg)!>%vUBRLlyT%Hf(R`j z2wh_eQ>gHIC)5JKOi2>aFwWG!Ke$?ygqd*-nQARTurv}ws%28bw$t`3jYI;uv<4?I z*Fv6>#6=F$O=vVA1|x_88Kfs1gT9WX#Z9{7vo?HNDGm09MhbusV1r-Txd86?xEhlqL<$|(=i5up0~EFP?ZG;sz3vB-0TFmdkfU-FEXmTZ9nxmMuY`aw0RjGd zjvX4L5s%2m0cBE^>LO7TWhP7FO;IF>(gT;*kviUW)s z{ay8OTy5ylI4xP0ayz4~H@7UVb?-Wtxo6JfTw2y3Ryk_gZ9& znaM&{n3UFK#3a-OBS*-PCvto|(BNvd$=x=yobNESG zMF=`+%QReGtVN+zEWRp|Qb|?5w2QHfWsHR#S+#Qd7o{7mAH|HLR7p?yEA(FIdC&x4 zd*HflZ&4M`UeFHBer((29+K;`O`tS@fCU-YQbQA8i$Wm^HW_Dfu{!)}7r<=|0X{q) zs|y4uz`2*4N)3WQ0+w$v9ae)(*|vL+a`fQQRYO&=%%Rum#-CP!x3&j&YbfYLo4bbVug7)SM@qg;}Jks z<~pLAbZgMn{z~wyrrghpIg_S@A5=9$!=ycfm@IR}%-1n2rmFq;Yh9h3{#;+4o60CP zWgK%Ge!h<0T}*Y%kX=x1V=P(Vn5AOtATnut6ICLF3ZVi|f1wE_MX?OF7Zw?~@aj3V zwWT5deEZUC-2IFImdSzwUID<^${ADxtqXy5bp~UKY1&JHJ=pIHoTjZ`#q13<-`5JRShj*%JqbngRM?vMU-a z#^_k6ah#pW>8xC)r(h~e%s#rd2db&=9^U5b%_Vc^5}U!u42^ux#jLi^!+AKYw;z7a zEmbeBxrK3{0$#HVH1;p{OoqqpbY~Wnw=9r_3`8NSs_`r;rOIQZ`koS%KIC*&&8iM? za(pB~7$X29gQcYpf>V3HvfyizEif4jn@!|)zOer~*Rn>G4Bd_?EL;}PUO6Ne?IPRk znl;nzI=Han%891HpANf5AOH~op4;`_2ccj9hug351rR@&z;KJi=I&7`8I?e2$OB?h zSw;GD^X_UkT(uca?Hkd0-!-`2TgvKVwCXE*4u-7mr_0u0-ef}AhX6g`NABI zIflKH?PTes``zKfGE7VVu&9!Ti3PNi$jM8Fgf-n#2p~YlzNMrpZ7IuE8R=51lY9xO zL@I8}wh$J8^={4Ud-C&T7{CGm8MNYEDK`N@2nlkq0QitlB!aD_hP_oH7oPyocj;UK zKt6;O>#$I%Z*4NNz>wHLqJL2vjQt#6ug7RUQH`&Y0S*Da>up{J3;>q9-%?^M5Dj2_ z>jk#iBdOU7$xJY-YL!qm5^M>*i50D?{_&<$| zi^#y);0*(%hxy`iQX8W_e|sLx-kBM9005#Nz*VR}CFjy+92QS)jqG`DPVH6gIL>xz zoPMRc8KQBUYDcAg`0TZJan`%a;#$bcG(}NSVH%*!PCPshZcop}-UH*~f6c_Uj)}{j3bqkoye5zpy1fehPIk_G2&e%iqdGz(HtK3}ndYfhNBl@v5(0h4!J7jJ`B0Py z@gR;7c;SHq4FUeTWyYtuf*V-OcAfMf`Ds%Frh6s+a!0*qkD8TZxnfntoGjl*eV509 z*xK?UJIT~=!K&j@b8WEn`Lg;!^!9_-_OudPpF_Ou+8*P1t}Q+f=Ii>v)PQz8aaOx6 zl-~)wOVxhS-a{6Z6I1h44-K8WPByuW-q$#%7BD!fowD4ibWO90>@GJfah65)G_}!w zx{b#GEJ{VrOEm)w|mi z{E_sCd#EMWPqK@vo5dfA3Ec)00p1!m(nN740BXHXrwBo`V4#-8y$$v+_sA0UB>Eua zs;a!Ydp7u!rI=^xmU_G~Sx(v-VLZ83-=60EpZfCHk+;*Od(RdhnyJ<6tk1mG)U_FL zUTr6pQDf^p46lYi=lWjb*sG_g$r`zQh)Nx8l#+qjnrfyh&YvdxP<>~z$8B{?b&CsS znR2&^W0TUCnm=QBopbJ3?SHQD%yea68oHVhNkoveKOtPaDkWgI>QQTD1R)_KTkArW zMWrswYLWy57$jT7f2TweeE~=+$umVGhh{K{6#yJ)=`2s-gl<+R=iMA&iYgHDto7nn zEB-Bf8NXeVee#&Pwz*3_&){Bp)}i066mJdfR+<3K->%>T1Oc8aPAw)QNC8yf_8Vgg z2mmbaP58^r=n#Pea)_WVf-M7kLuG`M1eU9AjtBV>jbDsCpeCn^`96NJoj)+ZynVf{AL|q^l zl$yjdeAWM^x>*X>{@Spil-+g9rfCly#A-2YdY&_fY{W{Ix{5z!OpYUxk&0y1i2pjG zbKbMpj}|O$nQF#h#ReGw5W>Qbun=<gj`j{L5$HKc31U$_f^BLzj5e3R2Nr`H!rnehuD#_ zTid3Bn#cBy=5$z7Uq7AE|5s&K_SO`p*JU7!7zWZjdy1hn&+Fch z&zWj^QQY+OmOX4&XtyQ&}Pf!jX(HGV*2z0Adkp}MsaCr8ufbi5mH{2i=J zIZiLyWn%45e5`)E_V|8GOl`$r8e0{Yu?W^jGtVkjc99vujYgf63L1(#U982p*|q-v zdSL7`X|Yxr7zGG7JQ0@8U8k`aquCq#+Uw~l(FS}Wu4ci%Am>RI)$`t6?&>%Fg!B9h+fRmaGo2u_aD zQJE?hAnoiORKhoXe96i7W|*(_ZmV|Z*yDtLyC4}s4qHw+C%^A~-&@=T8N*$W08>2{ za9F3~B!*@o*DT%oYv)$4%agt5n95Z!vY7W=y)Bxt$n)5{Nk5q~u~ks@rus?hi6z@I zS0yirP~;SnuSr#vyhnt{vQjEwM@L&!4CnnY9o-@!*z4SfIKaKs!L?AktT^oy#&SJb z9}{nQ;^+}h>M8iVAa`K5%9d zyKe?qY7duM=~J(jx!6wj*N5bcyl>vd7kFi91Fhb2yPeq&_b z=PVf$w6ASHRduJym6A#+iy#chmWZV)ab=zyPH5Z`s^vm*Hec6f4Q3QN5U^VboPfcY zF2A%5V9?!-?YRY#y*@xmXBe~@wkh>cm!Y~cdA`_92_e~7rU5VjG*{-8*(}x4$WZrk zSAJ+Cq6&QZ%27))+m{FHRO+c7Q2Jcie$kzwTn-+&c4)B*FaT6pO(aaT)pxx(KQz@3 zI?YQF zl=I0@RjRjLuP%D8pudo3bk=5nuU)rZ`KS`UUB#cPgfvZ4Bws2l{2c&507O@iX7MVE zG>JP~Z5=a>Xd#&zX9&Bc_T&8d^=tdlH}k@JRq$LyS4nBytxh$Pu z9EZxg0XzUiPaqMSDgR^Wac8WZDJPQ@_PI`e9rV@?X|oZGHX=jm!Py9@fP)fYOXswh%^T@{H~ z=aHLVIdltRELbg!JHU6-9imp-Iqn0kdZac4FIw#ApAg#9R|OYJ=^n7l%QPb~hiJ92 z^PrN1b){dWa@CE_=FYUoIQ-#(YYW%!n*I(35CPtbWfFqxPGbOns#RzR$O!=LBNzxn zTboH)au5=!N~mh&4oP+#Rz{2GkT60gri#cjwV;mEtGns@x65-G`{A2&``FqbI$Nn= zV8y^XwOGSUQz~`E73L&(Kfbt+tDw`ka?WELHm^O9^Vqd!L(Is?hS!w;r3p z-5Sc14W66fsp;E{>@$p|?ugx;t!o`=oq~4!)l-O`=Vn~|+~X}{9Ik2`xX+6F)f++4l6m;n11=u&e^YXqAyH1-<}eFRQU1%h*T=5oil~xzVD@+h^IcE{(7a3f$*C` zz?N?oYrF*I03u}kb4dt$G-BC1mp2WCp`kW4@aYmp+<9oZ%&qQ9aagb4Kv1u=A{nE; z>!{Y1J`F?<(D-lG#cBOq#wE`B>$uDJdLGmL=8K27+3e$(c-~I^aDj7wcpdX%j`!QJ zuV=+gHfPDC6qCl38}3QXD)Y|4)j7uHB^V{(PN}%4t46eYsWhuYB$~ z381sz=GgzdY}4Ma=hd8~;Add)y1V7O!aV;@VitD7BjPBN58{9^Ch@q;&`o|0l z3c|jS0pxP$y-vSr7X<`vh?XmPK1db33XClf#*mux%eq4PKqz`GHDoIkB=r-_H39|F z<$VB{liS*D0}=uLij@+B^3lKuHx?_L24@FNh3_WZ6izl`*^{(tNMNj?iiujM%pv2& ze(+5Pb?aO?|2LhY1&(v&~vA2G8|w`sh;{dwjb6op0l9p;JTvvazotjewQR;DuKxpGZF6*Q15O%;2%qhWnA*y)vWS{SR7Jr2@dKX&*$s;9K??<=mpTBZO zt22wTaO`U4U9k1DFAw9?*M)Noko4)t5W&Kn_IPe~vyJrvSIrb~s#@yla)wW~B-HH8 zQN8l*ace5VtPRNwLqRVIRSAW(Pj|7n*SX~Oc-E(8>cq{OAT4SN{`BmY{ai@@9fAcFYk6@W|CB8U`tM*?5fWe^A~14ItQtqXz>H8}>avkWJ)4UuM9RA z01yGb3oelb3;+(n;o5vK1O_mAm^KPtFPzd#_M$^2uvV@dK^x{4U##)U*UGlZHH%+f z3d2tIf|%P_F70?YsH%u=?@lsVLKkNhH1Es?zX`Bz7jD-wx^6KZ?O~yF&I8M2G z{V>vZbPyy}fvQS3fG2Y|N^>^DzK<3AanCW6$wkEg)5EaCqM=|0nUCIcY|{MOUzH}P zUPg=tgsjQP-0M3ZdoH^@RR|akA@UUxOn05ET3ms34yf_c%3><}u(F z(iu)U4yiSy)-i?pTcJwhp+q)Ly#j<%eHQ|{xt z=Ey2*Pd_^07Q*6um}Cti0Upa0MnqL8G$xSSHO&M?O4M-L%n!EbSbLx+TtE=Z5_Otq zl3}QvkgJe!i0t~k)Q*JzvQj&}anq7KyGrzvgdGy-mEPdoMsigio(rxrKC{Mt8}H4m z_N@krz^Rcp?SumDu(aIYYYa3@0A2o4p9>h$P)ROH_2zyg3QYoydgy;29v9cX{^i_{ zI?PG6Q46C#JWo{b_V~qaezpBv=9slBhOA!p+M-G!-Ap*ybif5!QLa_7rCLFH2bYm? zg?P0Ll0fD{0Jg9Y1_O%?V6Y(g8Gx`LYcB+~L;(>3U>wVgob#K}DnNjc2HOzdM{*tD zY*;xgd_n+nCfPRCZ47__dF8$JlrcF!n8zf2nk93*w~S&3{#LFpXpv>@qz4KO0sfgK zfe0vQ0JGZYS&StbfZ+qVXHVv1*f*ciSlFe<7(F5h0?P?V4aL%{_PWR8nm(+(q5mQn1^M2|fYReIhr3%|$NJ}Bn-B9g$Lv2X zast8xO*B_Q+{4T;rzwN%;nNgeNI~cVOMkx3p39t&V2`s=J4y)Ssr07gVBWFThZ3mk$=Mv=0$g)6=K-ouRFc)!i>&LqQ zgor#RlmHU}zM2KnBphkgz_FQMx6)`3ylfJ%Z{+2!PtRBxoruY-SV_fLAUa6gPi1)8 zGCA(7dBFd#ii0px`*ggtSe;%pGF+b8d9l4Nul!eEbmT$^?I1SSgM0QV$lP7W4k-c3 zq@xqos)Y0~qj>s(Y#><;#fl-hNt3IEVYd5HOXg<{snc85YVM7J1oGm`R(p=UCl%v! z=DE&sw%^M0sdL7hiA8C*9XYj~)p?YA145OUw@tVB0RkJuWnKdySvZU(6Py4G+mh@e zQ#DV^gII{)u^NypSw<2H2M_gKww%nLatXBUR@sKWxa012HKz}Sue1IuNdR>P50h0T zYEQe2K#0W{d8af0qrS2yM3*y;qEH7B0e-rrn5Lmj3Py}hw-jq^Mxr2L{>P?mWu@E9U9BNV(aH2Mn^r1OsC-RD zfQ^xj7f<)wFmeFqo#W8xUI8o&7P8md;Q@Q| z1VMDAfJ8pnW4|k+)jskLgulsm$BQH(01Qfn^~GP`QIESr*#HRvewxLIr9c3fW3^N` zh1qQA$xYMUx4S)U9RwT3u(|WH)_K6bl0dqFJOUgD3%@ zkp9Cu_l(<5WwN0_l!VWn`SACGSs2^sr@!pi!FjWOD54b_Wi6|yQdJfzGN@d^X0}4T zltM+sQ@ewRzjX2zk(DsEjgl?cSO8va1av9|r3%@W-P}1aiD{qh)?6y|@_-QJ&L>P|Ho);4Dms>s3^;Ku&%7l*l<&brdjI>T&Y8~Xs>Yj!b3 zk`w@qyJ{C(zyN?Z#Y_n)47oFyE)i{5NePmxsv^#p?sJyY|K(?Lu&P4r@u!Cu^NzF4 zK(BU(2Ew%IqQ59Dl}$H`HPz}V&ZzE`a|GSya`q;rsiSe_rGsKKl~QAmv}H{CNsC$$m}tyCHXdr(i704RzDL)nc+ zmKNZ^vSeQ#R0u=;+ zA`hFaG#3JoaQhnKLpvqkUbPXpg1orM+AL(u9c#%{#dE6`O9%}C-dm2v2MsWR^KZGP z7z~33ET35bqr<6ZFD0T9p=uabtcHr!VezzMS|hFJB*#E)Xnn@lM>_tv824e>zt6`{ zqt@qI(=^QxrFZv<)RR1o(IlQ)jmp)9$tH=${XFkIUzcZ@u_=SRrc|9JhP$h$wZJ`1 z<-o<>z{vR)Kn2bO)-dq(OWgnSdV%3Td=2`hFLTYa%W+PO8XS$8hyw*p^&t3 zi)nn>7(igfuN7Eefd#&`)ZSaJVvd~`CrGGrCYlg#_NC++awz{53;@<;AkLm6f>o9U zM#f9uO`_hbLK1PG;{%%l_L#dVZWqD{ZBx`q2`}!J696V>ZlV%*tNuuIcTw19)d5*s(#H zzmtEH*gWxmR8wN08mrdlb9I|3d$)>=jlPQ>qFY1RWR8dtae^;>uXhHTGNE1jV z-d-&N5TUQvAU#eZqMTdEp|KR8P_l0bfd-i77hKD7%aAOlM1WR<0T^!db_3LdocIO< z0N@w%k-cpje^&8jkv4jsbY*dvcWpt}U!%zw2}=@R(w}ex4*|X_uEoR2M?? zuvQEf*uP{LOxQwxEdcmgwK=RS`NX_7*63)$4+tBK#4Re~!o)d;?k=S*8+JZs01^Q{ zTQ)HUPjCQs!= zl9rv?f%h-_p=+(JUL+UaetcX?z`kT%?`QYt!+BWuksU!*AqJFCrz$l&%FJ1h%X3?M zl$j;M2I$HuO^@j@qO$eWN;B}dhC7PxmhKKGgX&U z$C_I{JeooUD)nvb3=jccyOl8pH%8HLdRgvzb#192cJo9TZWvqc-e@zUFc7SY#j4gE z>kAwE^kl>=>CI00G0BzE!=Y!D>usatrd3!vZ&zX-Q0|##a-H#d>G9Bi+Woio^JOkD zczk`>`%F9~5ER8cC9+rR^fQ^qDmhyVR~&Y8xik9bQ|2_s83jtu6iATYzYYLT=O$2QQ3Sh~3QqK5EzP`fC3N0jqY~2@cQ^r?wcSc7A zBvdUU+rkJ0;IHos=_{`ke{05ObPwQS#>4z=qAs_+9swm3tu##jq!Wb}qZ%k_;Tw^( z-P22XqJ?6^A5OTUsIfP!W_6lP_mbm4!rTB50sb16$p;Z&V}e(&bTO(#qp?hkKUC+E z6nyy}>m}?cGc&UUu)(UhDj{z;ar)%G+$HQN?t$}~-Zh>N1wXRt4up9zPW|d2tRK5I z>R#h89=L$-20bsM_B(eny62=Au zlCZ4!yJYDWb_kM+WQjm5YG($5lz0bIO_d@p2SRRh>j#0=000OTzz5|$o2}Cbokon& zhD^KcXdmn>R(3I$G%7}wLL%hZHk~q|!QVGL4_L7l2;R2$EhIn!02Bd!D~>G&5nzBY zv)|Z!a+py7mY;}r4IMc;Yt zxBD35nKcHnz#e&t=~?KXNh*>)*TnSbXaQkMNWzX;z2F7nrc-SI20{70emD`Z3Q|;n zL}fL!h&=^bk&m(t6mNxIz@QZnfC6}zqUuclkJMgk$Aw5}JY7_Q*nj{b>?kCWL$|z0 zq2D5x9>=Repa!!K5&>TOHQmQXqA6H7$9_ex$y`Xo#LV(-Vp0YX_}d58%@8!Q&{+Zm zGjrt{sw#KW-IZ?h_p4h`qq%o(ZhMc%xrP!2itiJ%lcK0-eZ0?vG#+fizj<@-+zMU|aSd!AKl7y!!N8d99U@S}M zR+t#sz_Mlh%E%}}(+GgE7J;yUK+zk^h>H)}#0=!Ufi5#%Ad@8_!vX**@b)k76qq=|2{iSr`H4u*k7iRc$iwG#3)TxA4;XXKI_X!Fyu*=-$J5 zl%3nF7bjNSSlX#!dOf#=tY5Fz6T|Io92w@A_N{G3e61dwP^#f&rCckWHafwk1|=^F zwdpD1)O0^g!s-~ZDC!2Db|_$l12ov~srq0Hu#o+RDKSwc3LTFY9$|GHa~phtQT=K% zoXT0((;j2EL_j>`D_EqIh%nprMaUr%0xUo)!WOb^6ZKjI1Yjcoiz68Tj0N(1A+DD2)(f~@g47eZ_6kz$uJCPb0fe(L3V&U}6>^WGDRaMok$MkpR|A;?% zM)|~Ta?{VWL3^qdyX<7ztF5^WtJ8Wm{t&ieC)Jt|F-i7&n{y^)GH%?LU)FMX4e^OG zLsFE%BQg-w^9d5!-91H-sRY#v@2AV8L!BBDGF7WP+K8?MwR;>n7KCa$T(xsxxV3npb^nUfc(ll?ObNaQ=A$(>^T#UQ{ z7y*`PC4deH0E{xP9EbovXdswBmFZ^ZN$%%<%=P)Z6|+n3&R*z}!Cg+Ms_MF*b>>bp zTYr+(`MH&o-{Ey9V)tL#i^m)50|&>Z>lXD?{m11_%RO(OxU}cv;q|q89}7=)6IQT^ zU`&%!!@$(?Hubh{!lLH;ylf&-RxuYW5}80E25OecoWqhoCEM=bY@8PBsg9s98dfn; z9FNuIp2nU1Hgo3e&6#_i4KML%Dd$l}v(7Nd1V%*_0xcjTVU4WhsCTklMqh#`6xkpY z3QOt7eAUj!v28$~jX%M2`z`{20AMliC>u~C^D~^W;u&m|S%&K{kobjWjLfJR7Km-s z<)DAJA^KC_4~JpWw}NtRV6YDf9RM-_JY!wSTfW9p;sfAF_4d(1qf~$Xix(xbyB6aG zwdo+P=oOd@CBD&8#SE+d%y2}Hy8$i$L{-#DOj%t=evI1K0bEvHf*V%zxnwluVd^i1 z)GO6!w4UeaeUH}>cb{eS%?3XJELUnKlRjBbLpr*LTc09=L6qeCr0cd}_P)&@`>&){ zf4ygY#zXDP?C;h8Il5FbXAhF<`>%BM?72<$94EUvC!sJ2b;zAAs&s_;Vm7k7;+Rkxh{0X6`1aoc@+7q{E5^#KxO zhD8F(up*5b)CO5DnqC#Q0|+#llf`VVrpx2ml579!;4{Mg*s~v604@N0?Rb}QTU!65 z?>$ZrdVpg!?)u+ip7*`>VmrvTg_PBiUV8kBOuoJ%(!8!S2`m6~YjPXw(i&-I^*YrM z2@xw$ot|##Q#*x^{i~*B+DN*lJl2LJ~JIt3_g)OPn9%0?Xn zk(D2XIDw_Z_WlI<(>=P|u7CkB0Ay+XG4`FwZuIz?e$pCEgQ(R1q`%(YENkxGMb}j} zxr6CzNYz!V92cBBM_dRY3p@a9>A-2`TN}8u`&w=2v3H_{s5PTFY0G%M`n>r4((a3EBZxVYLT5)4;0797Zq3$LJmr&BR0(-FJCI`n2@I zA{ziJG{WqA8h5x-^8ha}gw&RX2wDDav<*eY01DkL$F5w`BnU~zQt&nt(2 zvu7n0%T+?irmBOAd8%;aN;`+7V(RrpfAFca9Wx{h>Y}s!%)@<= z#r^BFFSX*D$pWb}yI0Ru&k?DsoZ+_5taEwDGz)JH?L>-7O`_@Uc6;fCArqJ(==Olt zOnQpJlW~S)qbm2KvDrU0>ymk~{%y~Yq0>H(I#;S5f(mEFY%=i?J zyj73$^7>?-Ny4c8D5YX5HuEx7bT(Fq zYsol=o?57a%c(`iuG~AdXVzmL^LDACzlz2x4KEg6w3=#w)@^4~F^X+M(hEWa7;JoM#$qX99i-i&#rEp8ZwIgEaAqf*u7GixZJM5wH|SwofJ zSby~~N|JrbH%c2Vw1Y?eYK1lJZ#Rp1buCx!pY-TvNOIyV#_7-I^;4bCw{LF;!@Lvq zGzep;6T8;An~8R=9`mmkNVCi|SkxJ&50K z)Tp_=KwF$d>q0ccG9A@mIc;ST4F!cK0;)mq@+gGgDp86mopt;Lfo&1M=)lPrd!ii*A-Gh=o+>(nHU45+e{C2il z{7gIc!+3ao?B{&gb86qu+?86BYBQ{pa8Vr*Ipgg~F@-?x98$TIvA0^Q_x^3dqZzp` za~`NTnHN?Dy8srP6et<=c%HXv$hzi`lrSSIY{iUZYcejJg@TS@GHM>iIMIWpuZpTf zrKIF^UrBoNfqJ99FZfqTmojs$B4OJpotEy-b^>nArrT5aBT#FsJy^gJqTvdI@ep|M_ zOfFm0((37Vt&3~xt;!A7^L24;%=PPIJ>NGi3Qz@2mvZvv!EruiD|fjX!w0W(7z1Ji z4GF1=n*w3VPLhUNPqM3EEaJRxm|zmDJ6f=5wjj>YxR@o(=JE>9>N59OLt|-y_M4O| z*ScCAn4KHBl}II0lDtr=C{iUKk98#}Tlt83wN5>MDf4jFc6d3j+rc^)rY33qN08oOt=*Or zvK>n!0|^1X+GUKzQ2?OS3y_222Y~4f#F~6+R|>7QWM*b3NUL&HRq*09ANLZI(s)iy zeswE>zWtzH-;4)qs}Gj$@rj*+#+_%-^AQ6w~OwOpQfx58p%1Xx1Y8tEM?QYrzFFY#8q40F7^7pO|w zDnz8>$XCu=yL;$h1FGqP>tj(g9M9Xdi3JE|uC@|i1Fe9jyKc+F{^(k=`+K;(_ETMV zhR55F{m!%`xEu!n5CPuWr9wvtqfs!iob7630tf)ZYrsJs&PNupd(SeGISH;}t|~KL z0xg<8Xw>8J@>7rdyy;0JKBespRLeYA*MrksmXG@5GS<5m3(4%=P+qxD zq|Ccrxo&tEi?d=F>F-Ccd#?d9X)3D8r>CE81BaZU0PckD2a9P>vsa76417H*IFHtI z*cs+_k~#J_bMa};Gv;Oeo)BFvwjx;QrmN_tXNd1CRg2t?2q9w&04)-d5coj|*}?(@ zj-?fC24VC=0&xgrke$C_5<2+~cC$J{cQiouA)GsF3_-wVt~P)|)d`E8g2yIbd#9y9 zUPvE`ag^O|liUt07Av7ST7b~JKL8*s0RR&LKFUR;OyK~qZ0$1a(?I|jZd`vWd%N_` z=rmEo&XwRA%7v^|m`!#U{Tan}<-|?b6+NhB2G8tdTry0n9o9#(NnHyXbE_rO)kFW@ zrgyI&Zq@v;fNmINjvlHPd!ZK7a5cwVkN#Ml?#`k=xaCv?l!|E^ms(e9#1kYExXj^v zf+5ZQQ_o=?H9oxub60BE`e&B+G3L3C9|LXqb#<~!B2_x6no@-M!w04cw(etQiVW$s7PpJR~0e-rrfCU5q z#;IHcB6R)1#Ke4KqAhlI24iHX6)UN#9ArYX?^yvDOdMc00;I8}B zo5Ly>p2sDf@{qYN>dg6TG;_@DZLBGiGfBwWq6>953l4&OUf=3ePI>e`tH$npN#!&J zHRJptes)$kAE$5l$J$?y6Vx1KS6&ZaQ5iAKJq;Juu-^C8Jx|759%HzfV&twEn};!Z z22-hsY-ia9kO1H-jK293?33N>zGxD)+T+rCT2fF_nCa&#Y+&6VwL-g%A^gDUv98ls zc2=m>gjDhLo!6g3XN7Y-5MNmBt?PJfxd_?$u1~Z&8cl1}P*(42=C(MwSDa}d0UoMF zoJ<#jPDDvO{@fCz2j@isW!4YixR^N|1V}r3$t-<@#ZW?(P$bM#*11A@*`B<3OJdxw zl!;gdpUdZmw_}p2%lh%cChsRNo#r%Wzg?}*;;H$3UN<#Evz~P(PEFU0XId%L@r-u( z^%y=L%#@g}6;0GRkTYvR0wZVueA(mnKK3MrBN|7$r7o^S<(vkp#xajTidS``u;5wq z<0(*E6OwdQzcWj%KBcnfRGhOPDp!i6f+`aMLda3%;4i8oNvTvSDxk;}VqFCf)Te(^dq^KPHWC4Tx`jxmIRn5bbW4H= zaDxHd8~Inga+fU8j!1jRDpy10(92)WhbO1Q2fLe-$JzPvKCq&%bLq)cwbg64y{)N@ z_R;P2u5kct>Ri@sf9V|eg8+JhC5;keREBf*)wrwemHsA5?C3Hyx=Nk}0H|4MCMzE3 zH)0PtPfzpn*mG*=3#b&%ns6D|?%!50m)weB$EQ}F<1A{ZpAW`9>jS7eOT#DXobcV+ zyPav%`n`x0)lzwHi)Z&$nD~?gB&dMEu>wF?c)~V7U6s74wU7!m6Csced{nM9 z104Y#y2XTuqBO9^Vv?&W?w|@u6c!90hHUWAs?A*|1B5gBpq3l~t1=U+hQgEf-do$d z!TZbkmWh$ay|V6{e6&12w5Tn0Dvh-nth9AjYT%MnnRdM;2pY-Cz;NC^YS$i@Q|<%K zSG92VtNn4>Sqx`iGpn67Qw7ZSA?7^B7B!|b>T&(${&cH4v)|GqL+iO7y-#V`q-(l^ zf|>Wr3qE?y`9N|vCx-5ukz*Aqr0Frk9*3FLQW1sZDOIVWRPyvsE6ATxsVJ31)Khtr zt6H`uc##BDo)qIGv)!rU+iZIynak1A2Jk8bS`loc5fFG00HER?irLDl@a72FbNl2Y zo8#AW$lA_@NLYJ%$dk4VGGBo)G;meJbhKh_8Ug;uRV{fGI0LM4$m}A*L<&L$Meqv% z&;yMfEhU%Crld+DRU!mHlSZE>cJBjIeeXBNyDx+FHwvTd;$ZfHnT1(Lhj!Soq8411 zWoLOcdW`L{^5tncCTq8S+Ia!lWUd`VWZz7%ck4%%Odj^y@!ZC^lWeVu6;s;`)zGAkZ!EJ!_s1qmI9WJOWMB0IyH zE)oxis<9+-$ub5-!dQ}}*pd>GH0miSbXxA+$WCt$mu37kZHFh)ln@MDn+5S3VT)1H zfz~g=t)@`*PJs$8OitbtP_pBBsndFbTa&omx@P-c%oQI~llntk76t(#0~7&CSi<5kw{p}baqJ)gDRN7@+SbmrhAEcL>3EIRaF26QNVG;#8^?;9tWPy4sI={ zmho2EW2!Cn`=0i$@%BJ(wO&rXS?l-r`9+H6q4Owqc1yo6O##n_-^*!9U7^M3}bpfcYCtDT-O4P#Z_#-4dUSy3l{)@kR_p1 zy%$u8fB-$z3kBZTl2lsWo2<7ZYm3`F3yKW|d9u3)GPQQ~E~4Q915i9Oo~{E$;%~T@ zQ5Nc2`j`(C0e;$r)I`HLG++_RMbu%{fBj$r!yCv_k2n@Db7!N?o+R(8s%nM+GdJFs zKF6!2sm_kbe6%>xx^MofRvy1AZS;4YJpMFKPD^ER_5bx7jWK%rYXgSC7c(qD0u*Ncr;Uc2MAfiJcUFd=$vak1SOSJbZ(2W{5UME83m;?xg+{tb85Kq3 zsVb=m6oD)Nt55e;nD-<*LuA_QK902l+DUT@`KwdPKu$ngoJxp~`n0V-=j#>x#)Ijv zuU}_8$F6x6Le*^Y^cgS!Adqwufe``(00aSkJC>zHM1X*WbF5kD7ImeOu)rHceKUlp zEKByJv)};cDwZp^f@10UztpQ76Bk>3OY8CVXBLs2i=52ktKntso*IuIE#d>Gru83Y zR7EuLGnQMbpsMXAdxa8onh2f4+f~1{sfGQJ+2Uw~#=tNmEDrB*y?ggTz5K=-} za79>9)x?01>9#b{YlBg8MF`R^;%D_d(BRliGs@Jp;eOtnvPcDMB?79ka zp;bvVQr_W-YYDe$U1eR6*9kQ{IZZcm#%VrKy6v+@cuiiArnPb(2S$V4P{Z8-A;6p8 z5)+P5=29^U#JjqxNF;mN9rP?nD9S%7&1M4!0scxBIzdP@AhGyw_c`CqpCZ5 z^v9Lgx#*QTs^4Yl4*$|`+#03Q!$R?sO2}z9gX4O4{ zF6b$A0-0e(wHdJD`iomqJhrXdIpeTP;Jq?%u5dr?{WzNMA6dJ&*S4bBS02sYN zlrhoD6{q%YWJV>MJQQMC}$>KoS}!r z0b={AgL7Gs?E;D}#j;nF+IT6Zs1guokGfQUA!oXuhQ>=HiB7@_Ziq=Q)nEqID$26j z5OqXpK}`{qcBe+|U;%(x0q`Pmq0eaUeq6=>5eRUo$aa4au`i{eMiW2?Jg}Q=MUW8P|0~Nq$0i-c~;jBG<8yPOF&V+3K}o3t<336(WkNuca6RfB*~v0iLR* zP(%qPfaNNdVhtgG(17*EUi0S8&Y(*MG~}wPI0Pn<*lsi)hDWKM`;ppWXwcKEymlB2 z49T9>_0+)nZmrLGWYB%eRCcXbEM}dB*?$F8I_it89EqvyCPi$Q=IXqutG-m+CV6EL(FBp7RKAFob_6#zi8z_q=LRUw8+vqu{$h~(-E z6C~jdxRUmiem-X$gnsyF|GE%62x0F7%Mb`Ztw~xQC0}=L;tgN`j6ukYt=j<#0e-55 zz?30_%>$N(_kIG*iK?vk0EA<2d+RupOl>iOF7_j>;RhThSQ)s^%w3aXzt z8);WDaP89DIsNokZ>mRI@glWdOD_GP+uSPebDtx6V$ag)VWdMC!}w*b|1{jem!gEZ zS#Zl!lTl-8WT(k?8*T?7IyaC?zUc z$yxvl0X~{Vz()`i0Ef{kU=9pF0IWCrxNvs5?99y32_is-s#T2T;Lps%>+=QI@vqM6 z^^jM0jN7K2hijY`Q)z3nxnZ&vwpy$Q)lheu)7`7x#bcYbg~@?o(27gjFeZjI&>NB> zTjr^13zC80Zi&PU9Ze^i1d=XH!M)JiW=|%4_avAqBzZ)VQGqe*;eFnu&f8y^+d}s6 zG%`HYs9~XB`g1(7b84DYrxruyUfnrGLJllhL|#)1<(M#lu?(>WHQgo(o~jb5xL6sX zU{w?dBQOZG(q9JatakZwJW7#-GXWgI>q`iA zku{jBs;Zj0EML0D+HK`qVtqaAz1o*}vUP3gn3eg7_pUh0_kWMq=f&&$ zU$^c$>i}v5znS351{3EK4|aCOvEROo+MF`ECT@T&bJCf{BLSXjP0S?Iwz^1EQiO*B z0gjM|e#stk`o0+@vz+v=jJ?yp*r3~qX2EGC>X1D)IaESbDWX>$u4T*?c1R2eG4l~k zl>n!C8yxok3Q5JQUv!Q;dIvT!WRo|Oru1l-7GXGy5j|=r7(RExQ5BN<@B=jWoX46m zxV@$AuNfU`-I8XtHG|d}04xAhS>%|Wu55?WW2#ynGl^8-xn`D`sa@!P(VA z0W1J)W$iSxl~Z&G-?AohfFPz2Sc%}$>DRpK&j|hqVFp1TN12Z#bckYCCGk8j06go4 z+h5eKag6=|L{xnN307h^ohY;{M_Z$E3`+ooSRje}lD{m?`;v#DxBHO{F92+Bt#OvM zH996AAkwm#z+1^FZN+Ydk48OBTUZff)GZZGCe&9ZoEcCl9|(Qd1vLOvX96>Qor5St zeE=e)t}B6?CNQ*Cy+Zl$)_i>bJO}-7yJ3J&BrFQ?Jf4!Z2h2K>$o|4R;*9 z?Y7r%0-B*@y$OLgP6Yc`YqE>RxgX!DUe^2aIGz_;>)Kj7scMriRf%^Qy_0t@bv(Ih zsY zv1aWZARaJ)`J<+C;o+nekxmMcI<;VT_AE&gENiez;>5}c&al*3$En>@f4Va@I8wQX z2mSt#<6XE~3aVXos-@K*OEj7~T0Qq>p0S?u>hViMUfVKRVMEqliX#vj(=)MF)vq;I z=k`ADv-*&j%&7>9!V+E6EJ>?j$6b?pE2rsc=>4fd2#VUz(8wQAbQx%BiCHUu>6_N7acrqy#m0st%= zt_nyvU4b3Kkm@vnVuZdCTKBeP|B4n$rQQ=trJ3CT`EIa{^~lE9fGjNI$X?gmqUd74 z12>5sIq0Owq#Dj9cA6`mNCOc8Ui+0^1Nwso%(-FXBe;GD22NHqJrc0M&PHkU6w5Y4 zLRMAlma5E!vqbMLHH$t)JO2BqGpE**HJXbVtvl-=-p-77hW&Ogxxd$seT&+k|CrDB zet=1ap5#QC7fV5jc?;w`^w$=3-@mZOqc1matZze9!px>(v=Mo>h$hz-m!|@KSF<_XiljU;&X8vt4L20t*%p0%12P5%8B8OEK>ey7_22 ze-AagW2_nRL#JM^RA8*;>QLrrX!pd!XmI3_-uZ>r1s(yO`*lgjVe}@dGTeTRcM#$Q z6WDVXuzSX`r^&-EVKwA9vxQdr06(&!mzIT7w zcAMw3b2szqA!nXC8KZeyZ`0Yem(JXrDTXY;c_}*h(yTmPFAx2)KJ5g4{#bP+u!h1!xG_FF^6@L03`vw>-E(HRWN`>@7JZ6B@mq(Rbg)75T_)g(G&9wdq`TD2_3d>``m$b z(!0N$?I!;O+u(3RV@7CN=B4p)TiK;zUooYHqpDp=vfi7Ql6_zu;_+7NrSm=rOtKOd z05)$R3xJ+FCr3;Ec{8#IL}o@N?xK;+$~;7 zrl%EyF#^LXGyZTYUjRr5;q5W0nM(I?RZnjN-6E)W1yZSB0V)i4e8&a=4gr1}_DRNI z7y!#$u}d)sq|t!UvtYR>Vlz4&^>5 zb5U32$Rz=?EIScCuo17eW@P$vq}48zK36v}IJ?lHn3uaYc@b+khr6aS2@B(TjLaovV6 zB;5`H8v&lXO^wBX2%w1J)*F)n!^7x6HGA&nxBo6l_eLj*21}@fs?jz^-sj%XTG7xL zKTBIVec0*s?rFU&aZ0;VkDcJ=_TiJhIV1N`xu&uF|Ks|Yi!WTA&zFR4pbi-?ow=3c z$DZ{uzR$T$8GMaIp2ARZPkTt*7ka{}?|~#@s@t9J9OLwV+`dl6fvy`DeTFQUIj^$6 z_HTCEe}7$=oMy4jJtu9=j~ z83EWJ{D|7Pw_(w0xhBj5A=sgcQnXfrRJH5F1{DE5>y^m`C$NE0?N`(UR$mkwXNmci z3r7^u9{@%1WSmLW%ZCX9_X0HYApH}YY+l!KF zDH?axdL&h*mr&2+8sOu~wlHgAD5p5eCSnLpkU?zJSVjAbjqJy?T{#h&b!{?cmotrD zm(TU(!8B;!SD_Rn@j8G8GS%Je%N$cp^YZeq{v1WgYS#1Zj8X+%W6#^!eX^&9^;Z~( z03k3b5>(}DiQXZDAOW^-+t?0lS@435V=c8SoJ1oFSr{4FhT$-c8$#Z$EFC-JiGmm757J?*#{7f{0j^s;Qi zRXwYVV@}hUbl0TjG($YT(Do&=A=9Vu`y3=G6SUVGL1qgY1%a+gbS#Ppc#b0z+m%fa z4#i;8Q+S9XQjvTiil!)P3rPS%fUnZKtPv~@WsoIV6)DOS@#wRFBu^=Y@($5rQ3QQk z00M;3vJBjikL0V?&{h35W*Qy%yv+{y3h0ehI&BzTJaouKKfR+^S2gyle0ohAO8L4r z(=eFT2moU!F{x@L0SEz}`;Aq`;)tLs%iXW535@tLY+#zZU}iJ2(7j*@Ni`UUYDl^e z*_lY5fiV%H3d038Wgx4}98VATGwz;aZm01~WEJ2tP-rmh z(V6?yeW*OFKmrCEt~3l$EjpjPdD0482c_z zENp1lLrC|-X&1rKgkH3sxmHpG2C)nf(~3E4&5z zGigHvghySWGEEkbBLx->0005rYGqnRDk5pX`ii9{0eV2gTJYv@4!aCSjxMW;RaLJk zoo&eX%p21@)9W^j-_@&FVrZ&G&%$unylZQSa*f(xDwQk)b#0jxna8Iisa( zWh#4s>``3RaP`?@?E9R1&Uu+iKqm;2YI^nAKo7we$Az?S5shErNIiLkfzM zOhL}ll}+oI89P_|@zbLJ;)t2?WR5@?O^wNZe45S-K^ZY%;j`IgkLwg?i&jGEgWQak zngaPUrjLY3V2(v3S!!tHtj<-@LK_3FkuW*ah)8~Ig!tg($0dhSbCPQlQu&v zCzNwFjMo}8&K3LSOQ1}3J*AC~7EBpvtA1njug=$~VfRmV@8?05d3D&6q-r^TP~=Re z(C7~Oo(J4_c4czh9?DgFu;ujkt}_!sM_4rVHVsMZ+gbjGK{s}ap5LDSJhJhj+Cgff zdu|j;`M8K4~6;W{B$ ztnX)OvTEUmVKh_qw5yP@8K)BSczG0H7kxF5Lxqf704nB;J;#~ywx1nx=}`RG!(cyy zOEbEX9KjgkEIM7#uTY)SU%X+{-2cv1gdGr48i z*^gs(sXS4Tl(O0Yz5PjO=LMc-SK%10EB@dpWQ?0|LgsqZF{92y@!{;-LOK5I!t@s$w*I zmJGSbJNxd&UP1D}n3i+++o4UQI+GA3#Yne-ZV+fXak!pAI`){xa8!htS{tTWRqCaC zs7i|BFve*A{q$eo*mJA07Fb5`3A&&GO%KQF+)PFm^Hz$SJ!=-GK#T@#2SbTC6N|y5 zinA8vp=W4Hy@8M$N3cdObY5 z(^D}V#E#1`!j>0Wic$(A00Xc>A&Hl?T^O2P-*gS3+fF5a!dp($%mz~3XT$&$0lu0Q zQ3odgm{zmGJCNdMWC00Suk6s^b?*vx8}>VADTU4k$&3RUjCrUUssn{%lakmr)R(QI zIkszkpZ5+n$9?~4KUq)mH>t8HH%>^@UQKU3mH+38x(e%#X(<)N&>2i8m8Gk`F)N7F zis*ras@{#gn9gJjO2A}JG>|Zd+1wxUb)F5j>Cr6hng(DhDB}v{Dwpf+P@bZov``F9 z6q@AfG5gHrum0YAv<9)&bPByyc@T-b2f2blx@2Jj1a~B=_%4i-)iZ}Z)d!LRIEMF_w9em#Vw{>1m#Mmyfp_y*wszY?J`(=Ul_}oj*qX3F3 zYi{?G1I(l)<=~1OK^z9=51fKvEx;|&(>Y=hPypf?D3HHjPn`1KG`taz*#?GqF+usW zskh^l{c(%^;oR05i_Es<)McD1AD7qFV|n?Ss8?EO+;L}U?#!<3P3IX&MQByL5E#h< zWLEHvY%GK<^L7V~tvlL&B!QNSZlnO60$g;6yF|||J3W&n=wSj?&Pe0zHg-peWvPGC z#OgK)^B`mNC0;gJyGL$?z}-Mz&9EE+3DodldzfBF`(@W_ok9@+ zOR>S!Gz}yQ>6upc&zXk)c)X9{iprR2v=(Bm9FwScGwxp-WjB@aTxl!}79d|vll0Tl zjNp5AKmV1eRGvzN5LehxLZy}>Jns(!^lkWzfP55?on(dwz;^&bJpAB_PAvDe!%8C^ zx&6#7%sEL81_xzV%bc72HT6$V4L|DQ@3(*e4gq$E4LLnS1q4itDzO}Jfc(G!);|D% zEI-zdpn-5WZDvNvTzQC9RW&5h2RuV^-8O@v?IzOAf7;ro$9wp{$P;YKk!!v&UDo~a zpyc^}U(=KO+v~f=i0i*ypjt~#f*v_-8(taXJl)Mu2gsu5)>RcC4L~J%q2LW+K&Cx9 zJ+*uW(ip@7Wv;!1*WunI?q30w0uc@_Oo2Tx6^QI?bG5I&LcAyYvYpi(iR^V1C6oZI zuH^3FUqQeE3<4p0Y1%6ECZyEFPM$Skf==naY)c@Jgt%QkmJIXS*24qy(EJG#UZ zOx_x@6o?ophE#lgld)_wxJ8v}_I{;*5 z?KG|%+v%LUC+8<~pc%+KUaqem>>Tr{u4vn|-MY+hWifM-YOk6m)l{>rWWIhy)^uIf z;v;#*GXDTNYu2e$L;^sQ*RzNv5P$$x!yf>ExP2UvqR7a|bux-F6Z256s;U%41_{W| z$$!pne^l4Kl9$h%lFkjb#;kN~xbd(dXVtOlMy*cs;&vvs z!hit*mcwEqqg5qjYFQV{8Y|_(7HKKc{Zs$7n&Nh=O42;#u)rez{0jFAH? zT!!hE0TfI~ipl~vxVz2;pb^1zt5-779bpn!D><(sTtOeQ6^aK26-YTR0h*huAJWXY1j%&MxYnC%Ta?aLLj%hG>7 z=7rfA(+l^qA++4SsloZ%XjaL2gs1@nTE@yNK3gJBKHh& z>&|ld&!EA{I4SVlM%($=xA#L|yvWe`Q-SF5Ec9<6e#uWP|n7f%q1j5%Y z0{{VDD>kLXJt*L9fLG% z-q4%)?xsJy&g!dCgmv(cc)T~{{(8>&QMsg>@Y3}fpB&NwVwy6;FxDOu6^#`ZM)Ewd zOQzF5+pg-rqMlzj?OzC6{4A5p{in(}?xi`(G`C`P#ch#vh185Xo~3su45ciXc^st! zjmWxosirb9E&vQDK9z-MRT6C^Rl-Dt9zCwNs)|Has;Zu&P^I)*(}Sz-Vm*>7zunH6 zD#w*9kZrT+MK`75ur$UV?r6)Q$QP)I4S3&(!g?3)wyR=b{@P~eVrezejkYEXeRcr) z0KO{Lzy}flxE(v+0uF|Nh_~ZQP6Xm8ZANC6!iTD=s%TK2BrOfmyyWD)7o+LPWZtDQ zqq@&_UOvagyym2hlSdTtIAf>3`~RC~oT^P?mwYI{uHleW@7^w16ZcH0swoL#!&ZmJ2pRWJgo$CeXJ*iBCIbdF@bw>{tP5{Ou-=A}XH z44maD^J1%M^N5pQ{g>o9Z9TWCMXOY*o*=0zWx0;z&e)WT!`;Hz1@|s6(Ql0q+y>b^ z9kMrs*>9`0EAgeG_YeX4OvL)1|`jPz_D=1t8MiGiLtB2(!&jA?%Cb4De3 ztDWVfrsm9@Zb!RH(`QiM)P9dXXNGCJ9xkf?=aFz9s>q>Hm|3S7ZO9NK(bkR2X7TVr z-Q4ZMpj1eZOl!@S zyVBYt{Q%&ox{d%hzde1*^r4_U(Zt(!i(D<|)Y^Gz{i))PNh|y}Q)A%(Gypv5lqvVD z^~cEvz!lVK8yh6Ql|ise)jIYuMqM9aS8OWPOEJ-#N|haT{Vt^+PgW!5-~cTER9~_j zP2ZF)aol}U=0gIu)VK$R3Jq&1b!Bf^x|`9hXHBIsd_Q8*-@Xfq051SUXH7SAoi$tf z0l-o9c?mvCDtodnGnd3{g*^%#B7m>yG(MDI^hJ$yCHm&R-~coLY;U`L@%FYm=6`@h zsjy5y_0fx(d#C_sWbF}02cvTO6GtM zLO}u!qh%h{00F@A7XV;v`$O?+M#;=5xhiK>LRF@Sn6?Z7_c!176OKLh`tbT{s|!~H zn)SunXCIv%J!--v-@3P&HC#L|Zm)kofBoj^_NV&&j8n1SFZC(Se%uMVPOle1AELK= zHO{P)Id@L~{)hoL8i68HYnUcmiDw2UiB7j?UWcCR1zB22%}EYo(6CcWLX~~{kZGqVqw{`agWqAw?mBu zu3wE?k~PB}vp{&85H?cFE}qo#7Q*0q)c?j97B(Uhw*UGP0Klsa*cxxIzd!wpjtv{b zZ*Y9PFW;CzZ2M#5LI4K=-b%*61Q-D5Ejwl)_yJ(}@Irb`A!9?a!qLtwbje_5RaHa9 z^!=}SG49Y)%yW5l^KkxzUK{et&c9_`xmHV+i+WEhb@I`;@9K>4aE4Rke%n`3VMPTB zuNf-o%6#f=wHulZD2?j|cJ%6oh6d%R(mgPKXc5}BxmSlH1D`9tCXMJII|fv_EF^$2 zBGt_j_Q{zk-eZh3HIxz%(`XIXHZqwI3s{XoQb;W1#x_^*uLurs**+O-~E9$&p4JatoDH_xn+-s^ehS-W`c z&-?BF=6JZ-ITzV$yBCE9g82SGCJzbh>DtLJThKm91O zooKS%Xlmtv~anTA5cxg&8r)orqY&FDgEn^G>P zv>cQ6%3R>=Di?d_y{Z@rP?iRW5$+Tr&Wc5+s)nbtnh_P}(iCY{XC(R^CZ5WHXwB8p zTuvoPX6z$g(OF;#u(aUAcJ-tPr7G`9_#%Kn=oJQtv%a2sYjfgNhx#xoAxWau-pT&7 zUb8~z0g$U+ppBT?zCw&8f}N{ACieSmGz5MM& zQa{P|r{OBsKB}-!^;*bvJA3tw(@QILf6?;nxnuq~bu#vUSMx#Lm8E9Joa;r6!72$B z>UCB3V%oG}piH#T%3QB+>p;5-buW7|ajz2V2#Wy9ZBnrbs$!VVhkeJYXtF_)0g7^5 zmTK&Mjy>xAoTF)b>YCy>2S^GPwRp;4`bsy_Utv9U9aeEjIFx?>ZRexT;ravUG4;b* zns*ZL8-#(`o7?1@cQnDY2==2w?u2NduinsYX=(LICpngne^xhF2Vb4mKN<|e0^l}a zCfCA&_F!@Z5CPuGg;Yie;-&%9Y8PWk1|I{!{zxKsC(lMmxnP$pbWb8sRgP78Y8~J1 z?SB4ya>8ipC`u?Yig(}ktKx?ks z2dgPD+8RRk>A2=-Ny!3v5hsCr+N6yzPn zVHdk{n48sPWzmfN(I0g`s+;}|VjYC-b_eBdtbp-0K15BLy1Zes6ZPWPTiTB7+xywM zm5J(%;iuSOj8+5Ka0>tcBmu+BXOb2?peL}7^O}dMZ4_Db-~V~qZylEsw&ChmDIqN{ z8uF6byMC7S)$Gi1$ZMi5+kNY*g-ptlBTY;qxU&pOL-pFiWREZk-UFdB^OW$&O{(G% z0-(oCXV+^CWRa_FFrzq@GffdFtRx$nSd|%DOS&dW)#O>0g$>v&NY8})yG8*4u`R$s z5I=Vu#t%A$LX`^9X5_&MVFU(X1xRhqJ4XyG#4p4|10s&iM^Ub{6$1PB18*{;?Olpg@*xqc+HNtf)MOw7!y zSXC`@%;QjhEgO9w+`n|Il`(_M+lai15&x0sboSJHIsM1~_da%=tDM8VF-fl%ZE#Yp zK?iZ0IdKOG<12B;bo@a2(%W52AMJJ1hDdQI6gA!HHZu+(hmmReJZ`x%GLC`1ln|sv zXUz>%i8KYXv9sXes@`ssN`Rh26ldGmql)co|2YQ%8h`@S8E;=3r4Yr+N@OFjE-SLY z79g|&;hkoC8{?L~bO#s=V0Zzr^bu*HTYX2>Do7zB`$yf}xXH31CJu!*HHiB!Ls-a{ zFm2in)g?nt@_8;49hIt0T=e$aus*S-{=lxOuZQCR9Rc3jh1exr*bERJw|WKBWRjl& zVERBK4(7#Kdk8IXpX?<^VJ;G3NT^~BHYV`q*u(y9O17pXRB5VJRl0P_)#K+>Y%TTJ zLD|G~E^GBdx#6Vl!5+|Rd1I=p)6X&k_pf&Kv1VU*R{ozECA#=rCDus*1E3L1P;?yH>Pf1z5`L7oTz zz#wi#5JCV10iK$rR0IeBrdTaC9;7~?;cRoCVLU#y5ZH8fvSeo-V#RV*S*YmKJvSRa zJoEfce79>}iMxrq`uU-jVzufL9tf$j+Y6=~<{A%kXIoy%zO`HaZi`w>9z>ICveq*_ zOJ;1j9I#Bf2B30Hr>pWu1@v#UuT`}Ntjje)aM5gDaNxzwQ?V`iK$ z`%DThR5|XxvnbLLXrSY+q9h?I#ItSLV4+ZoCpzg-d>f2pL129wfm9NNBIT+ew_X1} zDuw4^j{zkYv}|qmP$h2;=3RFq0}o{ioepJyPWo8@*3OHwtF7J%yMCApRAqm8vGro8 zIb(Eas6Mh#01W|NswIF4g24nvrCJh1uspa;;NBQn#ySkLm#AlehgwOD)ev(N=aApF z4-Q(tU-0XesiB-w^)1em5L$PS4MAjBGCUaPdscUbq)@O-G?60egk4D%V1~FO5~Z0; z8nncMS2&2=p+Xqkbxr_!K!N9U%0~VC{R&P@!-l5=6!M3K7I^Hf&dWGs=2Fr zW%9)k2r^#{Ns+7;;C<4`VG@->N^%9x{3TrAL3#)7LJ0bSF&pK!VuWDs=|i|j=gPLg zU_ih(t7h2bu;Yj2V*>yvKhq5~4gns^rN##rFfcJb?PA~negK%?28@hYwZlO#jkdRR zGgK?a$`u>Nn4-yPJZoO0$H=?qzUqXRbQfLj*zf)J({JzHm);irS1xs*T7p`i*OaAa zazH3zxoBq@aNEl6?a$kC_kH`gZ)wZqGF+dpHC@Nt#;%uSuuaXSZ!UuTVlXAzE!lph zpLsLqNIa&INyyZFJnoZGnew*seo7r@N`Aa#Tc(>s@~-`OA%SAEi@7Q(MIxTR@CH>U zn8+B6Yz5cb`#YHs;FCnW5z|MS=`xi? zJO_6`Sd}#U`nb!CW{lzISJ-5G#qDm@Kn=S82fr}{_yE2ucG?9B02+SH&X)+B0f3u6 z!_Lf1YUN^O2~{;qGNUBMf>r}&oT`lQXoV_bj9LAJ=!Z9AHump?V z(e%gY)xSLU^Oy-GpoR$nX$%u|w!+sfm*bo!k_U~UVX!4wB74LjSg{v*MUZhXx@*<~ zBtjB93LLToDk2azNJb8qNH&$bQTJNPi35PaqO1tWH)KQlv`7^I>ghn?qO#*HABBCa z>oMgI-YxGn>k{=i>3TkdQP~BTB$f-&rl=vXK$}+rCIf zX@>8#8Q4U=TAwx3mwzsQfa#>~4;lsmK71alkCcfXRA?Mt_g-VA0RWFSP!odPdxH$|=t7wkhTT+j` za}g7o<83y*d!wQ!v--}6PXAx^nzve)IrnS`aKfY+C}L;F+0|O_VO-}FZ)$P>GS4Xn zEp4#EVR%R&FPeCj3UD>ECO1)+Yq=U=Chkdsx|fP8r`Cp)h}iLvgosok@+GPZpO68| zUX9(h@I|xk+tLC7@L0kKNL++@9i1HhEHeuG6n++`2WD zVF!+KZlQiuZ+mMv*EWnGl))n_Ew1g_H~|m=z6-8SM{xi+=88>haRI>uM)wAAdNk+~ zk!7T+p<=nT7n4?Ro4eGt2Ip*E``=`R9qRRE!!6f94{jMhtejp_gLI{mVeT!+XdZk^ zJJY4tVjnU_$WnT`8Cc@!-Co}G$|AQ-GCX9Nxw;MK!Q5xQeTBKOjht=QmovtZ<0IND zt_JaVphqw?SQ|sAZpRxaXc|Pv2A}WPv)N7-)DnR+%Ge25ZKt-y)0oega zt3w+{A}OV6RsBsX6;*%|o|BRUG6p0^000IIKuk5$tZu>0r#2MP>1rnEf&%5lj!1Od zguZ4lAQ|IT0Cl>-a|^Lne~A(aaJ~n0l*WesojP6!#S*bdzSP@u5dpsHWxxbA(12y^ z*F+y6kbv=ZHW-RwbjkZjeP@=8MS&g?Dyga_&q@>1&(i^62=v4=RZ1K z=Y~(D!y?tlm;PBCFV^gxuOIvIR4KEdYQbS;bEc<~c#SEs?ta1DJv*RrQ;1j%lg)}B zdOxufNkK6l|!POA;6b5yU^;R)349d!ErqmuZYriqA1dAyxwb{c#v2(|aa*b3j zt6IeXZJ+dQDK2kRR4U~8#eOfYR7vQU7-T@U%<}m{wuHT649V!)Kg>q}j84ydh0iNomzy~$ZK;fACjXnjzpaIK|!z(YIEtw#(!lrvhvBGv$RaK#_A?YwLNh*oM z=BT|Iy7aVtS#Qq0#pBysQyC>>tW>71dCnOt$=PRlP#;uY(%lI_^mt&sU72$|FLO^8 zGXt(s{f11aK1ijVR>YKqpeFclJ)m3)z`$gjL|TD;B`Ca}p#}5rPQP&LP5w+!Ce-U@ zNX@g;Gd20T*NexT&Rpl5eY|x>?B29A@}#XxElTw(tJRjI7$I3gk5@*A)^T|fwify7 z2c1#|VCK0NW4M>`KMUwkzy&aN(3-Nxsom+D7bSuOvZwfFts+bw$$XO{~KX2PN^ zm_bJL1fHsBot$7#G%Y~HjhDn-FhvQfrd;sM>cX@;qaHu6Tc;bUV|US@f}dm+Jq4I@ zb*&^h_3fS7qC=_GmT$KSxtUQ@uw2uq1LxjA^C?2Ul-RTuBNLT5SNJpEpiv z=Vq?aVO6L)`;Xz>YC7BPCUK#k@eARc3gv;Xqq6&>Kjs<@0X{o+!lx4ez%1C97z6{r z@?$E+d`Y82;7WGsg*s@W6RL!&R{O>Gy)=f`;x9?c4JBQEIZK_o-)JzSSXw^isit~3 zpO+zpRxU2<>2?{rtiD~)1t__lDrPwI?0J^=>U~>W#!&CP*2F$i7(8MIGMa==Xwm~w zIWU)Fug5m#iGDP`L(xGpPf2)uIQ#K3r)@9KSTvW#_!!G-%TeqqM|aam?y5{us}T(F zb`aYFOM*L=iz>)dYMGJ(frX8&ub+|2AaICcY>;?AM=RN?r*!WS&bZmgv^kgfIFK*z ztQde55E3pRZl>z*zwboJZ8klL;T=0(TAtKAT%SlQUaYuBy?RQ@!bA@-s72U?UT3xj%_8&%8Tr;OdmFaHe=r;XZqPisK(w?guJXf8s zo-_ynzS}h^g$OV(bL#a*SAsH_z+xVFu}~X5OA-UCsv*~Kl$EO9%aY^gXO?00t{I+M z70de`_K=4Ln;~kWr%0t*wv)|at^w=S2ANRcs5vk85r(9jeA~ZJb#AoD`jkC0FK&Ih zQ}$WZxVvKN_tVa0;#ruBNXB52NG4NJ)e}WSW&NH`|dyA6HHc%9F%8<>1; z2-bQBLo4tLx@?|S(1+1#topZ;)zQ6c*dP!X7TI)zL`TMaOTU{~}oB@Fgmt7zZaO_?8#gpp+JdaY5WeCGF7wy=Sba z-jjVsM(vs~#l++=Xj&8Efi9}kG_!VQYrjj?)FP!vNeWsha)PkHc8PA%g;lw_G~-zn zOYNNg!E<}rW2oYR8Pi3))q*0oY)T5%(sZjrF!kQv@cKO@+VTuVWG>`~h;9^m#%C-^ zYtU#_M)vMXa4k^6N3#x0&~SZO(s#Xyf6S4*SDad7f!UxdKky*I2M^~^RRx)FOfxwh3|b>LR z1mtCE|79aow0Y2Mx#srz50L*T+_dzHaz;b>L_pq~P)H^v?mB6Z8Urw^6XW3Tw zvHJf`yJRM-NFSDZeAm?L!@X4XO+B)TR$JDCQ1u8|)c0uYhl?-f>BqsWgPTBLnoNcy zJEtzod}U{`s)8miYHFBvWxoxEis{5T(RxSPSEA}-D&sY>S4(FERaq)M<%O;sm&@1* zF0-?`n;{L14V0`Ow0flkh#|1WOeQ;z)iSE2Dpb;2s*)>Ep`MB)lnVT!DF+c(LUSC6 zglr1@uZ7&_);Mx`7%MRVGD5Hja8d*$S*@pqW?bJy(;OSl@u%+lS%;=h=d))H*<*#M z7WXJx&O)rdvjZ=a0R;h`x|Ko)f>=SU1*cldTo3{ZC@emvkX^3U5qTosHizys-Fuc` zRaI4NQ8k|N^p|{(zs`Bb*Ju7hH-39lmK}7}>npj!b|0)Y$f6cC5JOurPHpgbr=OFT zYicGVU~)io>#U|ooq6=6Vg({jDe z9xcr{u+{;l47u(8qfsF;izKyYEBcTWdS^~>P77nONRfOo2yol9= z7RH#})M=CV$z;bkTzW|{x^q?}E2bMy$gjy;qZ&@IcBIAa&@qat+mW$$cG`^Z%_rxU zQR?f>_n}+AlPXz53oh^h0|6ddg@6M70KhA~0%)M(1r68_6gzWcitKD8b!4zu4yj00 zN83K_N|Wga1!12`jdR@#Xc6(;8`Cfo9nyb3{14@9uF6{r>ArJxnX+;2mWDzJB(1uzez0?ZO10$Tbw$u__^8h=T@Zn(;R6a!g_(bt-3>#QlGF!rXK?`V9(t;?4z@5(89u ztiu4=bFnkeYsYkZJ9Uw3F7-8`bF})?)Qpc%933(qJ;_TnIkHXaM1(3TU-G;bh`>lz zXszAC^r5$)tqLSGd7rFogk`h_0yYQ;^r8G>Y$(@Y_-2YK;&yhZW2hAX0Km5PnHq3) zb;ER~ScQ48h#phP1D1c7tC#I$N0&ASr@A|0uQg{M0X~XF1cc@f2*4M5B?t;77HB{_ zM+ipdU@W~7g%dnvmQ*#2XkgeZ2~GBFk-_O;Mfxi48Fts%uE^+hmC{F6Xiuy1ykdX6 zUb1I0-#-7Ie?FM|;e2`$Gks^9Yss_Hd$cg)inA(Z91r!rj+PuinO!4pvU;L1r{T8 z;q6LN(55|WKMJ5wSJk4_)V0`vSRez!d;!P+0FV;NdqW|*K@xw*g>;4=00!d)K(<4L z#-Q*50svr@Cy4?hNJb`$EAhw6h@sPF!6g+enWlO{Ur z$%)`h^XeJ`0RdimMSw!+0~+v!UI`??Sp*=2cFyz{qemGn$%a@}l~f(I>kSRf&y#@o zdKF8nKzI+|Xy;1wzS5aHtwXmZ6 z-O(gC!DQ7tG?c{H>vZuVGfbx;Q;=2l+&OHTWpFO15EPW1I$kq|%_xJ^U9x-r+M~@q z8aA_t%JnMZOkk$wqM*IqRCP~Hhg$%l|IHLZKVDguzy{E1ci*>dl&G5Y-DCVUkRD^c zHN3MB(iuXh>X(IxIS*pDGU6DC6ts-u`eD(|;8q zPb$>)Kn?&N0Ul~4Nu1`8!2tHCm4E_N92y&F=Ph!RomuGKAUm96j#UZuU=|wgs^`Xo zkIi{qB$FVv`VB|7_SRFwc7@m0i^F_US>JplZ807)Fl96s&+lVCysgJs`@ZU#QHK5M zEOA`abm7*HzB<=wCPrCuC1e(4mr0BZmafD)zNbdT@iz7gV}Dt!e*UFDwxrp7SG$2a z$x_`Y^US!^>ZvqCjgdA>rhB*;?&+j1&ZtTK+^PGJ2HJ%}M=s+-TNNruKAOj>Do;cS z5ds8QMscT_9033xw*=q`N*ih>5{*HcPNZrCg=o41qN{@ezabs|L1ziH$+#eqs_ep^ z7!%~d+t%*vm^0bB0nmkQ1e~Yl+VuX*l`~#`j)UfQ+tmUb0Unwqfe4OZBo@W_w2Ghx zkDWpT{zsU^_n3y3F$%piV6pI`N~kIg;E*SY>9nLvTjOmYtmr}H-ahw6JcPCJkN)hr z80GxCsQad}7g9MH6e^?MC87S_H-tLOo8!OpFh<38j`%v&Jcl!Ry?LkR#5|s?i`b2N zxXs0Vyj6WXoJslam7XDzX;HWVPFxSqX#F^?*L&^qk@>leS7z^R&c$N5O+{0iq6Sr3 zH4U@-l`|*kD4sUepp^W~`!!wHU)u`+U@TO?Zz!Na zCop3XjD!Fb1CnwTN=eiL;EpuU)=nBFA3q*qq6TkI8+Tkt#Vr5;faJe)h&1&kGri60 zAH&8jTx@e?8Vdpb=~W3c6D}4E%#2RI1n@xopaAm&`scb2VD!xFbU>0-9IA>nO=`x} zaLw5#4nFhZXBW#i4i6joQKI>8T_qZ-OSS#qR@ZU4v{#ohRz;1E%h2w@Av<9)d+U&- z1T(G}idx;-%S^nMJst+ktpU%>+H{H@do@}jDcX1ZW z`sPQxo{Q+p1+rptNrd>lZg8++l4VSa=z2I8fFdbWEvlNQ=A85cj=8A4Kaf;@7F1Gz z8%!IlrU}q$F$aqSag4Bnh&;pqtOx)AtaLM{hjwbI{jJcVdGFN4gsO8Lpzv#gOl_fN zu%}HY^_GY6S)Yvol%A1kXX^X_o~t&}2Z{lJT(j0O0tJA>PXK_O5l!udhswoRRe}Qw z03utW38=)%dNgW5^;G}t{*~COqT|7DYO4o#j3(RJC(%U^ph`)PO75SrzOO#!uz%c! zLL4Ql)=E{}5fM2V5scQgx;vp=+YqU?#yqu5vy3Do!}@ziZXy|dH%Tl2$k zdd3D{7J!U{+XR9(0|EXThFHf50N@o2nGP@jjBaH4!J&8WnOVrHAtzK-LDi78^V_|X z<0gCGUn^ejei8$lN0(My?MFGXpxPnHkyl_mEpBD2#$xgCKOgIv`>oDCwa@#U_TqA! zv8PUh`>qV+HSRs97}<#h5(}%ihEyX062^eWCF2?kl67E=&}c+FM$#lkK@b-Zk-Eu5 zHR(#?ZhNXR*8)@t#*SK9#6fd)F!vZKXEKrVA!+m~mCK8wqF1UZ5LebMKlVz&5>ATN z`)JV%hYcViz!t&|tw`G{gll;+WCI|C466l{Kv(f7xI}^}5|Vt@oy2mJuP$^}3K8~_%jUJ{r90{}k(0G4cIA00DuS=Fj4V1fj&mR0e) zC_vTgKh2qrT-xhC@ydL(BQ{JQ$m6Bl!`klqsne-cOQ{p7!))aVBM76WSOoIpt)y*N zwTT>ojNnGwQ!3GSG5E?nbO-=VwY1^C% zyLCb$F8i>{<8Y0PR!m$DVZkwI6WEwyQ%BzFDNu?+Ghy2G!mcw$2XzFqN3>`A!T(#; zPM&De${#PI{s2C@B}kTl833lzD+weB9twbO{yE^eOENM$i{*+{)$sS#Q|my#d2@By zyfn-=!0Cfkz6Gm1{e7oZ#|I&+pD2&!C5_aSA~jDt$H#ii3l+9OTHI4p;4(Irq#X@qCE+~b*yrqcoM z8u($tTw<~rPeaXse$wxKD+y{*PUr$pF|B>wy5I?)^3|HF*`&-}Z`k6{Nse;Xb%Cx^LOTUt;x^ijQqLU^plYJvmlZl~fh*dAFOUH?H)Lr~G{n z7&$(c{+U+?BK?{)#9G|lL?aN&`hziHfypqeDB84 z0|Egan`K%A5CGQGEd&}!FG#?>X|*vs8<`mu%vDv@RAlXP^Z94f;iI(ha-pl8AJb)3 zK5tvTF=og9m8Gh-YJ-El&3V7I;9>c{)v*pW*QXTW9WzD?f=Loa^v$d>F1-t<`qS%i z7^T?rW=y20)2VU-h*>6zG8ZBQP13ml5VA7R1PeX5Y}_ofs+;arYt@KZECvzx7&;M% zC4@E8W?2N8jR61)qKc$cC8=d);<9{A1w71W@jHbuHXb(?b&+h;bGy3W_H?m*iu)Q? zd8AN4-Z%G848pZYLhBYS#YIABCxs}{XKXp5&#;$GG<{>YS#a!=o`}2w;tC?PNQ3z%R=xK07YpvKd zdQYGf z1QrGW)?T53g9&r>o>Gl|x=q_eS;V^+ezt!lR{{YTi^~}6B22sY^LcxYhKihGMel2fpiBp;vYOMcye42f_o3yJd^FU6fM%Sd@U*Ar@&YsWbsJ+HF3;(Pb14@S5 z3Ns5zZA7kMz&J(C05hnDrB|4grhnPOse0Xo8XnwLCn;oPxo_^dGA?B?$aA_5L!R|T z8Z~Rq#N*x_<0t&XDX>|fg;qh_1J&-EP9u{2)G)Cb7G_=VrfPRCFE1A;MnteQ(^Wk=Z-80T$g&BW zg}_LHIjb(C6E`peL^0KiD&w{#60)mHuCaugRqsJ;wSmY9|CNyhfFVr+1X9aUnn)&# zwZdd;IRN&`&f@ZRqgir$WWK|WVRql>|WHcT`{%I6#&nKB9h2LZnO zb&*AZG+Hevr|It3B^NaiBw%_LRt(VIy)ZhX-~#8IROPBT*esTfDhAP1sXiY#d_ij2 ztr=6Z^TZYR@TrU|o-IZ{b8*R{zSQ#c@MGCu#O;mg=OVtTF}Jx##+%s(K~LWuVz*!{ zvUQ>vk>||)`7MjLpMU1ZIJ4^cZYISm{iGs%*)kTFs51JeIyMt1SP@CBIQbAeZ3}bP zUPbyv1ym!4<8ic_b=d4Z+ADU|)(rwc=wJYdjRC6Eb0t9trh^5b6~;)kE8v`4s3bJV z{qASi$8{BT1;E(>C_n>>rga97KHStwgMOd22IyeZ*-#U0g*D`;<~zRiBk2?;9z!!t zZWICD>y1eO@&lnSI8Lg&-{cIa`GF1!)7gcR9=$V%%%P;}P16>A(hoO09i5|4mb$B8Alrl9~nw8fg{(Jr9`C!N~n~io3RFy z>fD3Mz}t+~tnfglfT)xZw=@6|0bVN>-bG{(+^A;C4GUL-L`pQ+o*JR?vyfCs>=I-2 zvWX^HNrgx;R#uN1k~PZOXR1MDCGNB{v01u*^kcLGYt0+u@u})pZoN|ZR!I_ZZujMw zb;iqiO%_H$s-hb091YDW%-P*1#?Fk-IU_ z&&ye?M;d2e<}ya1+u3vk^Ts3>{S*Lzt~=FLbIxh(IY6+>oxwt2v$~5{6`Hf#YO4eT zU`YlmVi{EO7=foLe|g>)q@q-)l+LOvl%mo~?JG)PKam6~011qt8Q=hP0HO(=QxO2U zjH@?yoR2hC`b{&5QKD0)>F2o15i1Lmp%JXyeO3Si5PS;(KFbx3f!h~RlT=7`Zr3;i zf*%0pha*8r!YOq2(!(anNmbm$T%O!y9t}T4KKmC9tFg^D4oWuNT2wE@EtS9Y^&ZJ} z`&+JSs?%jHBj=WWwNZL;f5Dnm#B@&giCsrMy`9uX_e7DNT^dm#quvgxt7n5TZOv!JmblFKt*v8)!>Q}bmwd+(lOYqMKPZ?eI#=xS9#lKWHf4kbQDsB zx4>wz5D0wkteSuj)n9ZABf1DnH_;qIQiXL^f)z*z-ASSTbt+1M0F-Fj-VPwr3}nCr zTVfZxD=jw+A_8%#bW$M_0PVZ&Isy_}wE&CHKwArpu8}Ipcdr&g8@d1z0iNm=0)osR zkQ7LB>K6kE*dI(#Nac^1rb9Vv*-OG6jIz+1H%XQtRR^n8^8Z_*($2n;Z#MKYfOlQxGS|KLQ{!arGKWd`askJ1#@ut{`|9Ipv(fdtrPA2z z%9r2A`SRzOJ#TnF5;1MfB z2_TuP#TbA-3sz@r_r(xgYmgfDd{u#zq{V*j!Vz~cP$?CK^r{JnP=K~kfQQwx3;+OR zBdE$(Kyj{5w<9h%AZNn&$eaP3lMO4e8W9K-3gk-hwUz)PR2Na-v*bY+?bezWVk=bY zs)0gPF~AHP0Y3ZH(E#ZI4J7vMw>SeL{{Rr4o@pOh+OX_WvX?PfI8IWv$u%h3EO{Xu zmR)%L5U5^_{z5KgF6mD3Bihw&qACgiAORi=){=pn4-^T7H0Oe&_dxnU z0;XpYLjZObx@RYA2`1o>m3J(!+_ab`biL5|$M}I-CeLJ|==$wxP^qU4x_5Ntta>u$ z_+TxmMOf?3+nnZT&UxQ+uVT8UrDdf_wP7mhx?k}{*V`7vl*uOETgK}$`{$=Wo=>}N ztBdk?FelHfX&NrPp6#NdV&x000~~a?S=tku0mInve~F8#Q2U`c>5f5C8xGES8`U6>s3ew$Q={`lKg>0^$z_g35bK5~)F>DJrdoGFj?nR%Pje1AiRl0svL|kQQ1}db|)$6$9k8uz4*9y$Av{ z3iAo@ir}!I;KCZXB${aE9jfX&ks^fx5&{02Wl})d9W(_>#l2#w^bqn!)Nmq+d+r{9 z&a(85NiwWz<+zG@Q){amuP(ByQs48GROP`d%LkTfJr64fZBxx-k8j^~Hsrw~Oa{rO zHVQ=N@2$~hnis9s5~_SC*FOMQbFV9>6eW+An)KNRa`K$5T2J5EUr`nm66D)Jv5n^E z`sErsdzW)*xJej-cSLfy9$W&lR)Z>n? zw$j=xa8Z`e%BAFkNPvOJrXr=Z5i0~%FbE_}sXIe~kaYc!2~KmXO{{f5e3Cz?hfnx)-;zCCd0$ZD@Ee#;g!rv|gg+}JEz}nyd3<18&mD0hKH*cl_ zsoUiWS)uW8n83aVPD)dp!B4>>vZ zO34>j=Nz;Ma|hFQd)CLN#c{0Dcvx-L=ANfcd(MGQNdl|Jem#z3dprnQEt;8p@0o}s zrKQzU1VFCEeLOkEWH+u%rS2~uYCJ+iQqwWc!oE^3hHZbl4=tF8B)$>BoX=o;Ugae!**cZD;5CY z9P9)nz$JWoMWLjh6!BnWq=PZW6j3MS>kGG`e*;X;b;Ctd>#Rai1W)vOe;@(_zzq!n z{!5Nhrz}xO8l>W3bTTD{q5~zk(GQHl$R2evm}D_rxmD~C6BJ8v+HTRtBsW>kN*|AC z#JlIPZF;J`)HV-2y6H8#^ODE)>2+xq@Ab1?pZITtrkiNgyK0?CtnisfrR)3Y5Mp?B^q_A zx|JeO1p+~>0s;YEOE%P`WlUKC#<67qd`JcWhc{5uZfEQWV`tBv$#SxCRnFyAG5F}W z%UpA%6t~!K&-3<(M;P)zl=7F_XK8oUl+spr7-VkAuI4^`ta#s~Naw{F)w12-I1|tQ zie4z@+&+f6x4q4VK5I>N_f2HX0@h3wl?!+>iFswJaPWF5j#OuEHgGNgoq#7n5w!qx z&m^os4%h`&cRaZCm}E)|Q${OobuxEkbc#++J0`JL^+f;vT4dEjR8^99MQM}dLZ#%r z#3_+>$6+E@$7TbVG)gcw*)cnA5Dd*LO9c>lr$c7)j79*%eG=>d)gyGs*N!_&=BlDm z06h|ZMc-(6J^TP(8Ih5`e7^n7Uk@W5_Q``Xz+iM`ZP_jgf?q zaTJY7O39!U_Cg@M25uxNiYwWYZs>~QsfY+g-S)T$k0yj*tSISJ1azrG95R6rap)kCZmUAK z+-Cp-0sfk$RDj!$Mgqwjs}({-B**}QSZ^%sUKkk_W=u$`$}#7v8a=Hnt%JFfdz+z4 zB&gSOD(16$Lh|mr2I|*7woSd(E^)e07-Hy)GyxHufcM_+^ml0?}H1M#>a8hRN+k)tF| z!Bn`Jc%a+@#?~ZB;I+=^M46N^Px4zeyC48$0EZ#X^}Cfw=y(&H3>dApOrXaVvvP18 zy;ngR0Ri61rC3BWq!BP;TFnYfLxvQvV4eqH)4lXe2~tv3jx{jl_uaWzzBAL#7#z|S zDypat))TuO##J1-eWwaj*NHS;U8aGo+~(9ai^ZqTqSpDCCpC2cQObFMsu}KO%@8fB zeO5OQr_8cvm|E5>Bhy1C7&3%mY)0*V>@&3Q{k^Qdl5vdL58>n{h23C56fG1kn6c7h zw1kjioRsNV$_<2GArhXoEi{nZcjr#$V48sdLL3VM#E;w*(I!`+sy>c|9Sfco!dX{c z1p-oJ*$umiF_jV=AT*#J*6$Pz#yb;^xC23=2~6@v|9kAe&TpUV+j?ym(>&|(Qh#}t>sqh9=Q18_Oa&Zr62Mh0 zcB@XH9ziXW662^jj?4M-@Zb&GY7_xMGfA9YH=rTT5JCxxfI2K~nr4BKav@r>83J__ zY;Xfz0f7Vz;9Q!hx~fMAplIk79hwJGRMKkOw9iRZm2#DeD!G2CQl(8&mDW?-8%QBs zIEaCim_VQb2mnk34S{abfqY!=nWpVO#NkX- z>H3g+$mFU*RTZRv5MSG-0RRQ}03MunsRWatNERqgmz07HkN_STz_@B$x&rjVXhdC1 zvRqXID)pK%YUR2O5|ix3p6m`Bskc8pQwuU6(bPk(S?hNpt6SlQAg43up6$b2H1)#5 z$s!h}d3s0o4A7vdm|Q_?wwHpqp;7K#r1V$k<7FsMiv1;=YOtPrOm#l!tSfVon!D}S zB|W^YTOAY0g}3v?nb$d&^nqG``dWXUtk0PBc5BRbFDyon zhmZBTM$&@WP{qDRjgg(a&AGqMd1-Z%qsm;ANj3zs z%gWJ`JITQX_@<%UtIBO3Lupr&8FTS?_L&9^bUo$HY^BX087)}Gc;^-grhYI3m*;vS zkZPlN7edG9t^ayfyMNvjo(zFIhRM)i(^^vq))HzUkn5sw5u3MIjEI;5@h z*TeZo+x_E+6ZNO{+W|>T9`98(Q+o5`grsUG7|SQO*HiG+x4NubA7A(ea`3GJfHIL z{qk&>w@Zpyb0KQhrp^p7xu0$jqXW>n6vT7`4U3+8jpkH)>708~eukN4%C`oqhiL$? zv4vLZJwLsvqAC=UJ-3t;g{oS71))V~g@FCGzp;!vbru*fMm&BOKmoV`00R)>fz1yz zD2X-(-X2CsLKerzex@0L`4QNQ1ONum=IR}&D439AJHBkOh*JqAwVI?-RRx;{Apw5t zbvlI%0syyPX;|DaNQMfjFi+m@ShAE(FWI&ZQn@5a7~c9w&5?9ul=}lCX62lO)u=RN zrLDQQan5IU^6);J&6d~t<}&o`Q7YFYD52_mdJ^JHI;Vwvr~xXrbfSHG>BaRRgi{=E z)3(R?_mND+X)IQB3e0Y7;VLZcxUPuK~K#B z&~vJ(_1;?No@9!P?7N_A*1WsnegeP%*dPOo4I$tsNhy#P*vJS4uXrJ)P$-r9Qo>-4 zeg-gXKj^W!t)c+x!(pj}S;)?)(8D0p9ENCB_p2m>BPZQ-tv(fC2Kn;jVBg z0a<#_UdxaSRY}rXFAgW;VzoLs`HzMDscv=R!+x8C?D}|C4k7^ZQI*o@6D2QGK-O4-^C>Tj3VG^qg|hHR>UkJRUWtdL>Ob)MG3g zgn**Hel03cMN;3c5$qeoz9sRum-Xsj7pM>^|45oY!2Ezbmmcd}} zWSV496i9;`(^|9iGM17u9leH1m;_-L8IVb?IaYQ*UscBMIrhNL>i69nGlyG!`}Vb1 z7Ng07u4FQ&M>h>B;UaXBlVC*yqlJwmkh zj*Ki8mW;u|0zkHJzQzK902>q8wq)P~HhzgrhZ21i?GKghcQioT9^W=jF#v3U2+H2W zvkOu3QnUj*7kP{qa94d$0BOMhLZ)86bx{JX*=J-Jx4O`ytpOeZzT0))MU4W$V%Hlr zjVGd!6k`m}un<;>QF_VD9_VsaYleodRnw__MgL&vzUPfeQaV^)sdeE+bI-`z^PS84 zbNY{+EI#ko<&TV9?xU?e_VY{CUe*t@JEO=?soj;m%HSwxVQ#wfW2Vj&B%0h@MfRwU zl|`wSp@vf1lm2?U&0iIZ%lV2k-=gyY(-aYz2m=hQ6!9iqK2xfWjNGz zdd@0kwxRJ!ZRTo527~mSqw(dDaXVk!yxtl8kzdze?w>fP8Yk0^$P zYQgP+!co{0PML@r(alO~m|?Do$atLw#^N(ZZj@-u%VNHb^L2ioIp)u`*V}6xb5~S$ z+;>$qB{WxD%u`d96;26?rkbW?d!#Jn$UB<-FiM+zh>Q?j8Q|vB8H=(5Ln*Ky% zkm0h3+tEAmvXD^vaw8ct@RJCa}8is4GxnVX<&0CH}KK<`vW2PG~Ep2m`q#%d0aggzfYPdl_8Cd15MC9vhtQ zlJmVWPsZco#XoD*>#pF7?TSx~tAS>c##J;#F`$v{`GJOZsne9(EGU=pJk{A>qxCS; z?Uc(;m1;ua{3GB2V+dp@sa8pqzk-l0q_KY=f$#z#z#^*1KdP#2Rer^fL`UXs?5hwd zz|MUCVZ(|50068UH~^VVfR=-45VKn1Xxq4gLFFQ z0~rC{ilxlOEd#(1n-zjaC8TwN=5$!k9!trdwgt;oB_%>fD|@&bhpQBm`_i(039U7xY9T=w3FC1u+qn=SMhx7)8h z#;%eMEiDVIz(Xzbmi+;IXC9 zj-bs`RZ}8F%DxyrSbNyv3f3G%gE+8aia<6wFc)qRBQk3%kye+WQGa0NTnz_1Nd-{x z9#9gnBv2onw_P^^;S~UctjoqifStDi4FO)OH9E!6l z=~;jh^7NE`5qZaJ2~vg1!&4rLk8;If1PWu_H)uZAd7J5Aisqha=O&+q4Oq9IE>R7FdWAfrXL7$%u?FtOZijYac<7GUvf%+yFVDrV;BU**%| zI2`ArKW=-3;?M_bg=R!41B<;c@9D>xcZNiT3VJ3xdZS83Fx5;#avcq@2IN8@FM?P` zmT2!M1sC02NgzwUbpZf?K$sUH;6}cUyqMx}e@NAi%iz=|5+EQnARI?c}bQ(cG%~^*m*l-6Nm(d(^dW zi@9iG$}BtL!8vBF%DkG3ecAmpYs{O&Fz38ouAbL3hl)D2GE)X9ywmgUcIJR4=r*Y& zNusu*>6B`)rnBq<+of<45@T2ml^94-SxYt;y_fr9k2A}$$C+^q)*Zt(BF)&n(2GRh z65H92@`%&I!o(oivXLbL#1=$`_}i|Gq$OZ5CNehSG6)Gtn6ZxYhgSXd;SfDlFxf<- zaF~RhA@6zz2e?k4X%6U(g(15Ppw$1Ulp4s}V8jd|4>&{X7tgc;5DfwTngvY9NdQ>p zdWADlqaXpJ2gCpFIuga*laZwdSfa{RB^9eot4pLS1$hU_uO8STYTQs zw>DC1o9F6xr5%h`gdB!X_Pu{wk9~D6+&qUUGdOnDfOzF`w-h0Ss(~f)Kw}KW~H81DFpK6 zLcqio%p}PHTnO!3OM{K>zH$bn*fZN400#Xi5AK1>ELN<0c=SQYzQ%cjksl52EaCOA!GqY;3XiBeV0UFkT3?) zlbm>pzrvQ-@n!EE!rl=^a@e#E#e?l?*k*YdAhT^R1<5fYE-V1RRtf4VREqe4QNZ9} z@4hhf+;#hUWeY zR?~V{-YN_odSW^6`-9`r>m@7pn}2-juh-wa=sbUUZDZ8K!ehNAo!&9k$Nre(GR9-= z@py7->~L!5`AY4(HnWNmYxc~2$+0O^5F{-uX4RxlT*XvWYSnsSWEl!kP*#_jq#sC> z5orH1ZOFKmm>y?A)uXq-Y|Zf{Gt%1xo1jo{2y8$Y40|>gv#nInQ>rQ&)mFYu`Ce^m zRZL>=ReweMilZ$C5P$^wbhj{@ZF6c2ed-X{w6{$LoB+Fd?K%|zW9A@1C_bX35NBM8 z5K+8*9nOFNz*ZE{Vg?8SzRJbWCu}ePu&TvW1S5b3+z9<{xs1##83>1}D%Vh?AK2>; zIr4hZ@A=Pi%qpfzJ1)i_++vfdyLNrW>9h6Kd^oc+by-whjAl^HJ0=5$ymIRFruICt zUDRNI>MchPsMWVcI!&)O&(aIqsGStff{B5wdx#5oRRB+nstQ05)LP;Nt^hlV ztKd97&FA5q+GmD05j++VOYUxWWz-8Y0J+l1wO6F6DpI6uo5%tq+0pm0YKck-o~n`( zT3=MvPtaB95$R8d~^tDqfUiuxvsirj5+$N`|9cp zc+GB?idwT_3MPc$+9n7nLyiQY830E4C|kCNB=cY>uMFz!p%uFjNgZj)F`#8hRpfC@ zk6UzQApF{+(uL{vBdg{{#boz0CkFQ~F~cmdHaKHT2pJhf?DjLdm#ZI;BBJtbi|Wbo zv5*khA!3CHKV9w!rQ3keg0Vpm2PDku0E~a)7(x|ft6sJo>W3pkx{-35;OMDtaR<}D zu=iTK{u~-+8P3`om;JMdVFLyMKFlt)hva|(6rXEzK?Yz#weS|IkunijdS+%a6G^J7 zs&xHY-biV>6G9CA@18Yoh6yF_>eYwN5_ui>)9>Z1jx zsa*9hq*`cH6H!#H+#?o7h-oyVdUBSUl(1O#7g!{K>0YA>LyH8KJ}M18RwyHKI-#>x zbCe{sRY@%))69z@djVQEbk>c;bKiX>(>1RSV}Q(3kPa{gf<;yUk$&?G2=Rg}zyKiN zvSmV$0yj34>-82|pG7+{8T*(s=g<&h+nxLz(P42nyk9l3Z0gz! zY%&Q}7>qA3H5Upy?Qu?4$J`-{>jDu0zB@M2M-zh<6HaM3_bg+Iz!A+H92xb^bO9-H zFqYm+BS#_FP*tlc!Djn{#?a0EcdlZ6ZKZ1!_b@t`7mFRYc1~O6aDDn^ZC74FSm@#U zf26`0S0Kvo?XkCUj@>)Wtb$C2=?duPW901Vk~1bZM#V26^IF^8&`gvmFyK?E%bSWv z&ROpDwLG28ReGc&_4CUnKY!CO5HZmPkQLd`!~hI2e4HG$JLmI0hQ$?jWfv5Ig%BWu z0;S~R)f&$N5ZEkWklN52-1m;LV`K>v8lR)_!-jJ~$VcY>el_7WIDorCI@(20`XoU%N8{Q1(hJtO)5XixrJlv6M3C4I2RCimPT zCuyl{+WJ9zTuiCOc(^iGzMiT1J~YfyQ49}Phc#?Nren;-ulw%P3BH?7!!pKs{hl`u z_4#8&nC3}fu%Tvob}y##1!=w1oMUm$xlH3~qMQGon#q}X24Mz6KvwTyW?>t_F~;_m z)kQosiyJUxjU`fXTRzjS02GzFUf)I~`Q?rD2C}GtD!dcfA#a|m)g(bFNqlnh zT1r1zS78I2Gl#~5))q(P222#%2;gB@U#w1mY z^Hci-Z(ny22dCSxDPXSXAHpKeFe%o`>Y7$Zm`~0admiTc$D`i+o!PFNkA1g3ReOOp zj5vnX4ynH3PSdx(%4HG?;DTi)v$ilgt)(TT<`*i!AR&;CkE+6lYQUf%bSMS@0|yK|0Z;|1)G|etA_N=6WkrE%0GoZK;zLFZ(jD9HG10g-=+y*5 zC(U(2Y)Chhq}AEQ%a2Y5Hlq*$-V63s0@(+Of<&r&!LFJBftCZL!aV|Mm%>OoMg}uW z5XupkD+xC3TXVl=Q0nFN$;Qk;IHi_4FcS9-A>v|MIkRlp>0mqQrn(jWf<3uP?9dGyRapt{V1`)?(CGUygJ6 zvSwqnTwS!VvLYsXs{B^cA&51*D>KOzcign0P&RHxIkDsExaBr9)jA#68clUf04i0g zgAgKISJ?pZhA`b`@MFLjU)UJy;fowI(g>N@mH_~u%ABzlhu8pM!|Z1TAO?s5^S0u< zFlqD5G$KeRjlHtQ?Z=z(X{9BQcQTP+OnNN&vBVLE8UbD#c8{5EC(@GGMTIHDK*wJoQcIsm)R$DQw{>;Nu>`KP$-BN|S?z-Z2 z+Sbz56RDo0)RxkNnIBJ!GV3>>Wsa~nCS{P^VO7T$UziWV$Pfm_1VV-^N^}N2{ zKfmoPJ|AQHRSei1lZv}&fx&vc{@9nd)4%VzPlkS@Zi;5EBsEfVvG$g%1F%eC4>PiU?-IlZ7m?0 z_o@i+g*oCN3drtfq5^_$h2erRj02-zhZ2)e436{|L6%nqI7svcRl?BHyUoWJF9h3a z1rZ_-5dnV7HI9L%n@Q3j^=`e<(~vg#6Q4%%U%5wg+_o{yvws+g@Kjrr|1A@$+)BqH_2X+EAhq=1$kt}%aZ!78{77U2xWyxn_LjVX^ld4q06-6PzAOHcDBY}b> z#Z_Vd#3NY%V7#h8;q(C*0VJtzp%lQ8$u_c-i1*p6&3RN?Ay)N9*ewyyr=*2&^|ofV>f%aKId&% z+)H2foHPW~CH7{be~gDGr|xH&^}K0;bIE_-XJ&f-dyc)|OoUiGm2p2!!QCum`@YUJ z*b8I6ZHN}8sp-x=RmwU`77zmr_z8M>GG|DJp=sVPCG&OJCUET4eU5#ViB4w3(v@20 z*YamY&ow1xry%KkC2ewjmBR=iC`n4>`6`tbqJn~Ps-#;jL=@mKl(NZtSQ7ExR%@&x z+Mq+}#hqD*e}am{=m_VKYFRPL*@2dF%bgKx+0B%T%rRceQZu-X-2jau#`tIuMncMGyek zO+i|(1-1HIq0kHC^k-X-?`>pOwc%_u>ggOSX>7vnbzN`0t9#at-BT3MSXDlq_4KPA zoqiJePZ=mk@?*(al_X2hWT4KNe7{svjMoB|%+W=_5Kw*}&^Sl3a+UJ8cJZp@CsPcWV`yVK;y}010?GR|-l} z5l{rO1UEu)+z!1+SQVRNDnfa zGO2y-YAV6Ap8;T=U&v%+8Kq>CD3Wl+R+880+QO-C$gA7K-jqhCa#f+~Ayu^1ZIRkq zI~rf1@{50b@3*(BH>a3fu`{9qLjD61V{%{B|`}IECnvaWdhVOIHVl~$LU5)#ey-$h7sd@V{5fm$o zv%ro$SJfD2+j!*dhoV|>xF+N3{gTuWvszVA0Ro^Ece>31fkA*`*@n;v1GiBXspni( zq}ucxy`)%-WuY*;LKG@kLk4vHk+*Ct0KkyJ041hFbJr*ZG}NQQI@8F?MiQt95>9$l z8wqtK1su|?iV)q2vYJSOh!P&;Fg`@G0f0z*2NMCFdZm~`r3FYhq}}QjGYu|x&_Lnc zgfK>7lwP{QBqrgC6?0y3jmdhp+Z`XG-8r?&;p>NGKDM2@mYx=qOtsgZ#buG_)AKBD zkLPucImYMHR{Wf`p8bk`3&ioOrn6QUHkUEl#jhhxhb!mk*)Zql{r&l4@nw!#_XJh} z0ExYx{ran8jMP}~b9Gjgv#tM^t*EEkwIYBl1W|Tokp(lib&oxb*=~>M-M1ZM?m2Ww zss>u4j%wlj`zMX|G9JnRiw%wh=VH9)d`>+JzWnrFQTbTco818ztPiHabo~d!w@;QxKNf;_T{&yZ8Q`{>s z)HDN}wR3xTd7qnl#Q@8i08k7|1@Nn?rk^-Cm(JV?CTx6wT30yt?sn$BoU@I2zi&^; zLn{h%*1YH1y@N5bp@w zl=rs;2mt~peDr#j5e5uEh76dtaB6TY3jlyKiuegvM?i0}hMFkr$a_f42g zF$|Uxu4q$@ia_-P6ak*9g;YbCol+f1tzzf<$hRqm0@Hvay-j7|8|kG`WW?>wmvRujCm-- z_>QNtJsOCB8t7iGQalx2*f0Qt6s{ppee=8?Ep%z@24Mbu8FHQ<9|!JDz2^)IPN~#( zQe_qclilWee2Meuj6zO#+0Hl@narlmG7$~cE~xZAOkl!Rw`cTKy>k-Lu12*LkQ)F0 zq!NNuQeRX`vErJjrV5&(pf@QSKWZFPRm~ZLkXJ1LfZ1%Iu+a?!cP%?EBd84_708OK zwp=OzvgE5~LqcU0fK_zhwwuJT&1t3zb*%_8p$`E8o?3;Jfu{qSWG3}iv6vc&>;Vn9 zb1W>4!RT~DwhWGuT&{9Exh7IQb2n@s54VG}aDuG26f0OVoGi~;qhTc?LkxSi1oSV#fu1vL2$}GiGeSbWEw71MX3y`XB_*CXY z4ff*K80XC%W2`Q=D$0(s@!JNHuyT}qdjMlVfDv(pMpjkP?JAYtD3z#41p$>02+_zF%&tP)BBD%yC|G~|ymGFy7#Y3gv#WVSssJ2$p6ul;e0S?^Q& zKwR1Ct)5R?o4ML#^lOg;LsMPmWfhEJ*o*t=ulDCj(-Tg)1kliOl6o2ErMUA<8GtvT zQ2}-3{@o-VhJEt;?<)10Omoxt#);o#50vN+E8I+4J{cR%=E{J*vqx(BI`$NNh=^1Z z*IrK-?5Z#2x>2dBto4Qn&ihHAI=%HsTaCrQ71Avs05AX`354zF#D^j#L;V*3dBadL z0z^%OSV5OL@Yw`Z00?9x;~vz#wc`VHvq>Hss^}ZP$7L_zrwHtfr(a!d zzV};$8r}V;GCkF&^TKQMc>6Whe~!g+{v6rqpV90^sTy1LW;iwT`mk#|Wt)zF?~A%c z|3VqhG`I>?^YM0l-|qMQHVkif@^aN#ZHvmq*b2GEIEt&ai_wiQB6=)2Jx zj3Xa$D2gJeUKRmfx&=&t+7Facj2x$PsTK(nAt5LdLaF)|kqDQOIqDc$vS+tRa@9&m zs>B{AV)J;QWE}J(DZhV?`f|2cnup%`&kr|K@VYrbG0ZG$vY@4?LpN_1b8KV2 z%ge9M=O=(O8Ga*_7#^UaKjo{gC_vukuFjdP{6{tw_Bt(61c>@4| zKwhS0Ru@cX%y2|WbpTWYJ20n*`j#GNUSbx&5DWnx%Egd{9MWhC!f86Xg;K{_1SCj? zp8x=D#u(WfR;+53D;5AKs3Kn&jBQD~$T(}0@AD&D@6B7A{p!`uvz* z>ssGeyvVEJ7wxzf8cnq-=^ZOVVGS-<Y*K*yoV@*)fIOogYi5}CLD;TtBN%71!7ozox3tz=AMAx z$}7Lc)h-PF=(3bb(pHg_&-%p0Xit=mkvX(z3O_>UXPaXdw}}_#b9YFVP5z9cn|;-0e;$r(nMGYrh-Bm zeR2uvlNrR81dx9M0E~<=vUeOzuwv3+F)6M9Aev-PVUG-p`}f^jx2Ul8U+ZQ4n(yi3 z6_4D{G+lG{9B+$m+fQ@9)$9BFYL@w0tMm4jGfYLLX(th3QD_i}BcdP2iHv6Ghyjco za9Q$Zoq5h{svQ<-(z*S(Je|dIsL7a$W2K{2Za??WU~uVn+D zRJH8F-?cf1*TEJN;J|) zNe2L|01g2j+m%d5B{3jDI#}fjphIFnf>depz(i^q@4Or5r*X&g&Q8MJ6X0zfKSwVKm=YQgC@ zeate=@wUf!=>NBviz-j13krmyjK6mO_1frxun0mej)DS z)se{2eV4=H+pcGF(yH%1V{th^q#LBz#ccp%kd0#nsB-BxZ%RoWgb`#l1&C-qF$|Ak zApvSnLyjHal1i;=s|5;d0}TPbn@%+b8=xtm?v`Dz!5y^PjFiqFQB*;qQY0?eB}OMB zLxNCJtASvx;$ppK(_(}_W1~s6e#PgLakLlLvBp<8wmN;>d)~gi-tNnFyE-4H=`>vS z8cez;VwPH1aM+U3oR6718bC#YRZS<=^MWOA{a6tJ#&cP}tLWef4an@tUV(Rs?Vvkr z$R01uu5N}p4|RubKCy34v#iHtBAqq9V&$M96Cs+YCjkH?j2E!g-OKN=?W6G$2}w4V zhW)e)Fo??_JJ2z`6Wp$w&M(*2+O|iVtBRimM8O##VCZaUQYs}>o+^+XE&$PyKmmvp zfaVE+9D@M^kY@(CW7Z~$7iH1RKs8ahUPa*m7XdyCmN7;mj3G%Vq=s3uPbJa>D4@t& zF(a%2%(ilmmXUN1E`eZzRK-I%{a-z~R4lJcmvW}&amqQnUe{xeO!cO3xerE>$IA=tHpg+EaUA9}3d}q{PtEs9hoV^1 z19s^64J}Axop%zAr}e32@YFC7u-InKqE2U0od@KJW!--1 zkOGWtIYuBVD%DT0X=^*%-#njj#YEZ@ZKWtHFpJ$G;EUOHxnl~5JSD~3P4?qD-miJKJ% z*WFs_upDdQ<}(%R^<9*-aTNGgg?daG%I|aE@t9f4U5LueZPel!1{kQElYw%z`gWtC zm__Q|H1%m+D(%Y+J{rg>vumclJ!DK}r)$oEGc)SGMGkn8$gW-BTGNc!N$xqESk5tW zz#KJColVZAzdBVA8+Wh>g5$tN83xfM!j}EE=VnsuDg~u@ma3GLLh3`&Ubz*ZQi`go z%9W)`6=vZ`0Kxzta20XE^~rSWJ?Zjpf+0rqPng@IV4G{c;mB`*l|u|eT+Z<=_uUYK zs6kTIs%``V02cv1%XLWy!+?TtDoWil=aLXg(F7Ed#YarE=UofbNcIS46gp~T!Prn$ z%;ii;tDP!%yfl7)XY5Q@OW`YA#X~n&eA>=F&<3pVl@ryKvXgT+mCANKB z^0@k7nt_JN-x^t$x zovP)vyJKN`+GEz<`@z?!n6K{}H;5MGn;?_nZW@GHIE~iD2n7*d(ZR1zCH z6((|y5&tsgyQYX^x~t17HAQGz=F3Ho8ULCmBRh1V}}tTM%6=ilGRQ zihltBawlOOjupL>q*F|)T9xZakpYC+w12tmboZQdEEe0jnEt*>r%5N}Fm=tJPos4L zsWeWoOE;+*SKe=J&iwnM??cBy9mUP8#Z2~@#?gQNzBHTw;JlVzoK-CbCPJ=ePM61h zzptl%`_mo(h9bMl%Nf7E->0L>Y5Q+M1}AfJ0!}q)lAOv#w49}PuT|X%g`;L*Sk)#s zQphX?RdX*9^dh}YQN){AJ@$T&K1Afg?$T4{?BZ7|N~}mERh&CD2l(6O|J2@q!~0IT zSI-cOVPI*7D?yi$Qlx_PSt&qg=P$Vx52fw>XhY)*`OWoNkv7saLI$F)R7yYqpt%At z07PM9N%%9)?W!^l0N7Edi59$m{+1KY@}Ne_&rlTdsYSGjN_q#uA7 zs+I{{WQ?&y=dL>SQ{g4&aeurT^ZxY8k6p(u?nmFPzVu^FY%Tyq-@M9+D4bS?j`OWD zGelFWuRMqRe>E}XE>EP@77JumK0;OMr7yc$YhEXWK3JokNbht=}igR1`Tu zVw{-Ks6}sEmLO>1kRcEgKR=gBhwPhM;Ci7k8TaqMPu6N6H2`dFvOCM#c0Fb$-=soGez}!$(m8(Q#1JPTyd_5)B_%pqMv)|fO`bi(Pp_jArVyh}@ zd*ZJmdwr)TJC85Dw7U3beg17d*5>=_{xMEl^_+3LI^)Z^m8LRQ=fk7NPe{Z^97@Ygq zNy@XSzo*-i$#A&+nY@*G9WIu)$B$Y2shsPHeLe1HKK%dlytw7?c06xul=eb45n@QP z&ZzXBvoBO_Z$Xjdkn0>6W?|^u)VQjMR)Y~xl@S(1X%O!007EH-QX0Es*2IH-aatK? zVihYbl%ktSkHoAqYdNM`F>0oQd%e5s#Y;0!-rD)Ij4a|11MD!m@~Ta)yDt2sDiVN~ zYTH(0YTT?~y`Vi;b&-t#EfqZ5(4FN~AS00RO(ZV6w236%3^F$Y3t_z{7(${+ery?# z4F~{0mW+L^Po{4H7G42t5=R{i0p2S%MF$7~rrxphIsgG+_((!bYvySs1PARA6}l(J z*s7{BD|F4?Ncu<0xwcG}jGfD&bCs+3@Ksx1tiw$5)~@=MOl{=q`8IOvORdTo_wVn+ zHgmCiTZ@5X$hNrs-1B76nl#x&I4jEcRMVuxp`v7nhRP(>i!;XZoOX|FV=?OIXHvR> zGGpu}M}x@xbjEGW+WX7!u1_o%x_YnaZj9ohrn56{FSz5Sx*~@W?bEo*Blzh4dcAlk zI{^6uvop}QqzqbFzGlyb5JX)0VL_X+L!x}AW(JR#@&Iys9n#Uw&0p^il(|?F&+_=S zc)M1AwP;unAI3ItBfuzjSFYzIPaCoOCx_ht69Inf)sDpiDH)WRbGtqYu;~MU^+sDu z?i?jE!^(qGRaGVKjY@Y%@w%{1ZDU}&`f{R+?@um!R%~=2;(jcbzCQKrW=2%JobHQr zw%jH8=hORCOtmJ_t!|3f&|Pn@7b6yoIi0T=BmF%Mr$2i~cs0hYDh&kDh%D-yn^b4N z_Pa0d>_kiXZU%d`$VSjZtjw;oa?K`q!BM{ho0gJN=YnKpnMnwtg4m@BdMuGzgA4QWx1;d>n8-*1`vo6ISc?u7<(}o8(;wwTUbfL7xsbbO=Z5buK8F1a}BX+GvxuGUBCc6XkwYkS?&T5^k&b5{t z$z-Lc?ALrOE7{FAa*+J6t9mDdjHf%%bysOy#mTiMVbCLGTRu-vA`gLFzB&PI__c` z0ulkf$^}eEKokJe>lRBHKn8&M7Se9D^h|n;!Uq|u7^_&ZHR1i@SK}~Q^fz%->yGnp zts~J>3g`7v^fN~TVPlb2269VGKYi9Rgnvc31MutFS?js$zI!cBRc0}e(Lrk$eS|BM z4wY*VQ)-Iw!b7j#Jg_h=I@8#cdJ|4}*Gm>r`=NFf?F=)GMMEd46%QkKc8%19GPcUq zI3p(xvFPu)S~B)duTp9j`y2*i2qX)ZL?tLy`KV_QPj!p-tQ88qr2>Uzsfysb!^srX zDypgg2mxSNa{umVI9U<}+?jRGF3?-z6o#B{6Co@=ljqQbmXNxZ(Nc4pCoXJ#VlJ;+ zG4>|S{~tSds0H1pU7LkVQ6T{ytCdbf5dausxlEcA3;@H8)jC-1-m@>AY?1*vfe8&5 zs^_Qfj?)UhmU`^?m)9FN=>$ z|E0ViWzQ+L^7Kfw(Vb|4NW6pB*X=${iQA*X%7?XQBGzVbdM25{PSo6U1rw`}^6>3g zm)fN;U1cWM>q-w|InK>!(c8RVtL|i>a*ZY<7{{s6H}6;bW-Q);YNnn875chp5DB8l z*X2^GkV;kI!1$WnNq|JOs$3-);BX~WHSbXTFnA1Rs1m{1R9@J;TRi|60}BR#Ot%*8 z=WV1o4l-aC2}F)Q-<%=lzI2(PW#~;nA?iZ~<(zYez!m^zBss~d8Y)qZtdglu4<*Oa{lv}br%$El>(fcp zCQ~bB>FH|Ml9$IGe0ICm{hn$E`gHfyFZkb)m!?@=POp9I0 z5hOdz`>VM;;y&81ZPO`jv>Aft+l1}Y?;E8J$Am?YY@b_9Z2)>ReB2<8IK;ogxOjG?*n zHht+w6vKw10amC|3I~$;1}gxAEI;A{gGEtFsQ30iR@0BxodSUU5g<`fsJw&v6wyXc zO=ANG0e-7BUdJM!0pnV(mM#v_0B}S0?hbZlDZR+WT#}SkamCaUrD@}EzoE#dO-bci zYC5(X(|9l$2BQ_UY+1N8?P@F4gGM2(|9al4$zu(@93;vNda}X9DA`lpOH3kysihL3 zN4$xk9cO!B1W7eXc8fvF8Jv8$o!^`}?&DTAWXB^K^6i-AV%rO6?yp|=u2E@sHUXPT z6E!3$D6LSLB-i7+%HDfxYEn_RzL%l?NS(xd@~|h*ogWL_&_!D4dE?D)S_1^?dqd3Y zN<9hUJ%EUi4}!)dsH;FxR?9^f0w_qc5`lx(5&NXIeEDa&F};ezedT3!4+*A19sz4A z0;Nj+ey~vh0|7p(6-Eab1zzqAKMr+ z6LWF3?Wt?;|C0l?J2MWD2NJm#?j}|Dq*AhJFgpWle%w%Ofkf!gk<(@!XIJ=`UOXO> z-&60RTNr0U{!V!?qq7;6JCwfUXQh&+$g_~v`*_Y>PS&mMy&RHOBZ1K9l}m*uhYtYu4QA~q86`UpF;`LvLd8{+)zMz}-GJ}xb#I=Y((d(&$<=A| zD2tC<6-fNWM}Hr-2dOE#CwBP~Jbc&!>zg6!P6`ezU80M{GFE^3gM zmRM(vr^;$wyb*j7F5P;)->WZ3)EhuVDfM$(?MraR8sZvPWs=9NVH<#4I?`IOoePgu zWj>FRE}Di~$|Zen)2yuOR1H8J+5q-S+0D2AK za)9ztid2Ci!M)4&&y~j}`*b0Kg=_(6Me-JG0027%jN_oxizQ64{ZGWWtSN#b?dR5;&6$~P0UdoK zSd7OpQmL@rcVl=t>~e$Xi!^S!t7q|rj^N00z;9!9sZ1{46er;pv(*)y|~gTyLVRhdl9N4}kTbsMdt-&l5T zdF17Z=TRsZadpi(8f~@o)KdTMpGMX_C_9Vs+?<=U=5DGWQ}_#U86e4$KiRfitjE|_ z{YBL@W@dH=S*?i}Qf6h&J%&bPPb0=}cMTagx-3u`;8Z`IvmTnD${EeNxSOoqJ=Z;n z>%`TRqw;&r0`+4Zv-wgDz<6kvi*1-ol!U5p>rvxbB?(GWvWmW{XsX;t2SJgFcOLU^ zA}^_yjXX9jj+LxOMj;)avyq7W`)DVbNSGOavMooea*x zT~F0MGbCu;ENJc7ywgIFQMZjl6V4420bc8M#smximc8B<9VkBl3~za$6e&}lx-bM| zlq{Vn1`JhI#q~j3{I6{j2+cUyQszP`<3%vSQk52H%58ci8I8DddZ>Noy0&^A*8Ljx zp5u((ImUUlVUls)djCFZoIJcZ#@RHd!q^Yyr^P4Q=Q-?wA-isl0m{g7%+ketN`aZrBH##l{J6KUYW%Ot#$&n`VLiqXJ`Exc@+i#jEc;vVNCOZBDDP+ z!Xwe(ls1!g6EvMWI<%^%*Vp@+!O5cx(QniwcvM12+sCyT8+4lu4guaPjx_}lpkV;J z-_%m1gkS=^Wn@Y+r22L#C3_Ogl7^DXvZ{?SrWONl`S2wNJz7!&sT*0*)5A)w3|VY* z-OY=05>&e=l(d}7dS`zOW44REr?Z(gt7jNs$aMCKJXw$NtO;0jaR76i^$UGwy&6+9 zs=2CH7^-EuU*>rF=nv*h@R^krV~XM~0dN)rdpt4cWv-{|driR70NLHPmzhGVGb<-% z1T4+?O`|kxK4BZMjTdxe5Xjq#Wk9kN%RN>$(VEw>6X-#ryhK4CE;$`h`~ZLfpcoml z@F`nFDUt(ur$Cu&JBVE+ge2Lkd5k3#7r-~oP&H6rDKvOudk^EfI-6|1I*K0R5>}Z$ z0Rf&{jwQxWh@cvJ&3^1L!YK??;H``RjnHdc_)US5g^rStV5-Wis`jJNOMhP%zFDJ6 zug1@oNtEzw_Moa>s@mJ@5B}!z+?)HflBzjM#@jNbzxN?zC>yIEDg~x_b$h?9M|c}& zhgsbKK;5J&$g52PCaRH`gq*ffoL&boYXQ+kd@ zg8;)oJio>E{Ri7Y{dRpk>e0dENyBe6edeBVdg)}&(~kAq&$?ya*v}K@%$hNiz;xH8 z^N;@e5NGc|rCeuPS|@k6``*6(xEPO(^7v(NUg~aPT*l8!h>8UuW}=c5HVF-o9)z>e znJGlwE~q+$2?94}afejmqJ?m;j1z;-yS*cXMk;kp4v3z%WF%R>B!|PPQ`Xy_I-zP0 zuCXw>4nRQGJW{kDF&V*B8~fhtJ#&NN0iacY43vim2n}fghkzYm8KqFI_i})-YLU*_ zYd`jIT?vsn?t9>KdDzC6>3z!q4FP@|_QhwCWH17=Ul(J5K>?O;V^YF%*cb23B}+1* z#GN1v4GmT0Zga*gI<22G#MS+9mDzpu*?6lSo&}T>wbUM}sG$7SWuvyb;XKA7}vv0lq8tEv2-;0C@cxYv$a^nuBcysy-%1h7lYN0iNqE#RZWJ5(u4R#U_@3 zBLVQynv~d!dFwM0xVgc|LibK|W>r#*#D8-AV>Ps4;f*3Fu$zbh!WDo!&R8+pQ%a%h6V&gdfGkrbNBh+W7oG%%>}{G=s<_L1d2)?q$XsSJpz5N3uXfW0e+fg z*hCm-6M#c0mI585fg(Y&cqemVcn;b6C3jos%w)NQDp%!3vHRRV5NwP7`1Ifg&jRVV zsc%&uSbep&bF-a)jBTfLX{{cX+LvZE^D6x&nPWIqx$<}$1pq`N=hA&5FAFnG<@96< zeU-BOq`$5afBE>RkDSRoQxX65ZPT4ENr8l*BtO?QIn@*<)1Bp|X=u$tMAR_Z6p*Ow z&Ol7MMwmi|6`eR1hW$l`6T8OgOM>q^4!h@{uA8hG7#C+W6vF5Q5SCqCIpM5101XT= zPT15I_*`{eR};i;m&2|fSL;nz#Ko+R0hzx8GvDbGU#HFcZ#qn zn?H#i6AO0N2(swj=Hx2z+tXv}*L~Ukc2CCnDHK!AM&%JxHJEBtmyYE|@v0Us&b1!tSQ#?3rZYrx(D!RS%U6tgv{H8Ae zJYio#E(&YQ(F2gETG2Of?it^Dq?%P6kfI#c)CAP9SCbn$T)Ps}Xe=}4x4r={08HV~ zsv1{evU{}pJ!datgv6=l?B1^0&CHod*u=l%r7_~^6^`LO^rp@0Sm-kGBKI}&NHr{aWAv^TewT1BU!S~5NWOj!Vs zKi84~{{d!5NSk@Uy31zX^$mtjKgspd&OKMhY3J)zV`hGB#d9Se@?^D%UQMZ{Q(B!* z(y>~lZ~;O9L|1^NZFFTn2#-2nTy-fY^W;nW3)R}HJ6gJeZS_2Up6mYeK0YlZUZ|%^ z@3ZR6m`ZPz-c;V(HkGPMlb=!QH~<>~+Ii&-1$2Q1{FhV(Qvd~k_i0a0vns?rN$=N3uAP`rp#iss^U+zxOMs5MswY(Pv-Ia%SYDz>;KJ%z0w;P(w+8H z>b=I>VecB_GR5NRYP9Dvx|^UniY{fpujY_bwFMPRNw%}JXLUv{AQKJK3rxcb%@|%_ zC{Q(I?|0J~GIcVqXwlOjli}ulP{Z#Z`<9IrKlP}Q8GG;X%N*FpDE-xQu~^JGx*5po zxRh+@UTgqB!h{i;`-@4<8#yE-tA)fw>@7zH=Q8A`O!xx~0FezEo@h7k;=Qi+V}u?P z@Yd}po0U>D5~yw6-qwX|0#)Umq$=-|;q$^)iY;kZ3Gu&kag?FS&FvVN1N_;0Ps3jGnrmf*Y zZ#?#&lg$R4>rk-iG9F+QLk$Q$yMonKirlnGuAgU^rsQc&85&ey10Cq|x<;^K>2YQ; zJ-b*ZhjiMd_SHD|H0FoyTflU2=GkcnRtXa>IVV^lc~#t%PgN>Z^@90aIR2*sl2lZ! zUKnBl04B7pE^7KBOe0~)q#o7b;1#ID0cS(2KYV5z=9OETeSNH^V*|hgU;zTlV9Zr^ zzVj$!Y^wJXt8dQ609oe>G!+5fip5Ss=nn>PSFhM;a4{(~jQHo$z$sDbeH0$xh9s$~ zYIe5lXq98}Of3Q`v0{XnD<=la@)QTxr6PkPm6q}%zc_eU*0nr$`V=}XExp$YUq&W$ zPcWvU!hM;Hk)8S5!=7`aQZ0Gb`N z%)Q4k8b^Ssd5Qy>_r1?--d-2}+grfcKsqSQaZ=xG>h^f169d%p)if{|Faop^P!+xi z0goc`N*-pL_*6p*RUzt^Plz#(kE%7?)7g6Lqy;dc0ML3DLJ&Gq2`OGmaS%sAb)gVC zE4>Lm?;$QSD>lc|+w6|T9sd{z$+fIYA&;a*@^(-*-)WZ zheRJ;VtSY|_n~P9RC_^DHowk?<$S!n?mE3ccKvS5MN#$5XE#vB+?! zsm>l~8XPN`0RXXQ|Lx~|sP<{6Ae^k6gRu+5`_|)5@=>mv%_V}rkaPSK&caU@O$5%@aA~- z-f!)7dM&vLw_lF#SW3cqWPKS%ZZG|D@eqe1H zrVG@b6IFZNKhsm@q`x22yKC1h3Ot#S7giOwGgsQ0gzV;=nqJop z?n$*rVG5`sKtwsyMrAw{E)aKyw@Yut$)=^z4&&sanswB087FV6WusQ)6sVmv+|8_p z$>o_=BC-f?$e5`iq*2Qk3B6HAqLN|GN-H!$sTV2+!O!c>s6g0Qu@vBnI|dshY=MaV z*aiVIAQJjtxBzE&9eLM2RZ8qrL`i{sfKed0tF;oMuFRXl!)C+dr#NP2(=Nx|vmzG38XbSr)T(gg(BGaBho zRaLGO^4%%FIm3S^IvZwG?C9Lus3Gmhl~O}W#R{XJ4&9$~GPTCJ+@B_qwOS~XMO`Ej zu@yBiJ#P)&s;ozQwU7CF8yS0mhIvF3)k48CKy{We(VY#@pV{%LWITF1VeyhOs-x`j zCd6ol0p5PT*TOuf_&S_R7MJQ}%@u5xiXhjeiCturLw32Uk`x{muZkoUO1VDMzh2b0K;If^VWIHo-U@d`W$P{oVem) zKx9u6iKwipA#PtG?Lt%s6e~av&dL}vr%IJ&1ACS8WUWe4q(ap_e!gUReW*mtha`hR zs{w*wWt77pBD=>NfI^WgQ@b<-b;4dSv4IHrC{W%}l*nvD@jkB;gF4WVI^e*Tz>kDM zfT_kX+NWh~zvtE>CZ>(sGK&p>0cFdo9jXlhewqc;#33+&srAZ?0k{F+zL7=de2ksG z-N&6#mYzf}TzROfwcwq3j;Y+}4m(QxhP1Mx-d0m(H^C#}R`e`PZMOb%GDz>6oUKar zNAJ72KEqzzoaj>SZdxmIgKCk|xcC~isT8>13z36? zc$$@Q&aUG!D)w=xxo17BCSr)k>=+WvWEoY~8rq6htjaV*H3U6IJxhkbx@9C#o(ok~ zvJeZL-luSmDtc4b618~Iw*mt@-?<{2KWFze2%3A5&#$;rad2Ye`Zi z%ys8BP3vu3_Ud^Z?a-`?he;F^uezxaTtzgbZ%2-m6%j*XaAw*fk}WJd$^_LQqf}Vs z0U50HLJTG#4zMFeqbeX(EUTjmJ2E+;&zN&mdCmkzkTDRERlN!UK$^BVNU3fKhm~%% zt0$i5PzR4(_E%5pUYO`XZvq=f*fPSBCdUWXyL31t2}pXK?Nx*W#`^@))*=jBJh~k6 z)iSk^#p>_uZVXgmcjg`FYHPE~S;A8UQ@o0!L&4 zJ4c~MhRiHhxvEO??kH_9P1X_`rEmNhGu^wLp6)HUOFQj;!}=o$p4L|$xU8PGSl8O3 z$XfOG>%7j{Km8FySGHRyBgDYax5J-iLQOSBWj{;BA$!a{yqj;gxBFx&VJbdDl_!U} zZHFP#aoPKFUmfmsYM7iRR|^$fOE*mf!vnlR zU?dsAWi5D%-wHhuB3c2?-s}h@```o~veW6F3WoBWU+592i^- zkq|ub4t$*O>n2l1D?NeXBy}ygevD-r=(-B&!zZXjb7^Y5-~bc>p8Ji)Cr|)b=7v*@ z0Rn*Wtru<%E+tEjB*FkuwMvF^Oi-OUKkdwX^ZmB;I2n$nJMEO(!}Ft&qsiUs>A@xy z)f_Im=IizKT(ZRii$(a<+c5wnuy|56Z+q;BkL9Ux=1rt{pEvBJ5k(iGa8yvstPPd9 zr+}o`$&%S;+x1d9!M$Q*pNEan3ns`!JOxzxURzIxMIpVLG0;@HI7n zzXVG~ir*0s5~~D4wvdI1Em;q4te?ymB2mE4q)NmOcg6s$0xSRoSZ#G*yJ3^--~gw3 zN)e?#N}*JxJU0%X1amMFXaNDlI|%Gp1_8i>&L^*r`-$%X&m|LxB;}W?R9^&eo|Lr# z06@S45CMMMb>0P4(17Lbw`iRb2uP4jw*)y#GNLwv!x7+ORpm-CrC}kagD0Wp{y*ec zRZrdU59i5`j6C&*^#Mv#{E05*l(kD1uFfaR;n^9d;J1WwfghK+Lf^5pIvMr8Hn(5d&~;*u*r65DSU z&Al4B4|_zO?nm3$o)5+f-3Ao_-utc12NX|vFD>0OM@kYZ8LDDc zYimspgPS*J!ML}?YiU>t?;*J?CqH`^rphWS9$x6({pRH<{XiKVcNnhpM$1z}idmdj zHFl3rFI3z`QRix3=A}lBF~```YSxyyXWlq;4m0feGQ%+NO1{JQECW3ns(A!cU2T?| zgs910n8mr@_I+_Ps~-P+x6Lu^#Y_EtoVmMmQ(CC-jgtBjt9zxW2ln5&{yugF7FItW z`l&xFNJ-RFTDGDx2umW8&?If5Ckttz)n8od${wN=$*c};qkfk}3IJY#0Ry(U?P1&L zSzFfXz-bxZd0uKRROLi{CMSz9{dc)P1 zghVhgU~%ii=E-bJp$*AED4}xIc@~?_R&U17-G;n7HMlx8uC;rji%7+R-J&jDc#+cb ziGd!a6?c+tARzD9l?J73FVxjtW)jGbLUOXZcBgQ8eN%y|I!?t@Cy*kWm)XspxBjm2 zd>$OYxw9w>wGR{ZtWL`5escilw4V-`ai%G9U8d9XCki=Z>koT*5xce<6wEWVdshxG z4Y^p|ofd|N_-XeiiO9l;fWQMa`d!ii~tb< zp4% zU+6lXtUp#c59Zl2f?Z*yGrAGX(9_C8F%Aa8i)+~i+Uf|NWiRY(YS+_7SHvWM%9_afy>Zg z8JRYyn2?5T=v?jRd*Hz@cLAy<}T=%dOARf-s1Hf31JCrELu%JRd&lLf`JH(5ST!+ z^a^BT0|J90FjZ8%gh*k#5vCUiLO&83!4C$E0AMjNXb}tmD*_-Sf_IX_W4G<6O=cq9 z;g-tqkNn3QIq15-gSd6A3AatmC(<2bzCld}4*?$QjZVjL065foO^ZPpY+&(GL>i+L zOuy*F9Ho;PV~iwuCwZucbxSY8tW`U-T5L zw|i@3a$H-t8Vv@LCP}kCYt!y53Ifa3T2F>AO?_%gNF{W)BG zm)2(}ldPd6*Abi9eXMyV69!-FSdTU{^V4g&%;0U+o+d{%vS6m-ge!NCjm_HS&Tim6 z2?^4cUxfH4chd{8_^(wdp^c)9CD0-vWQ)V=f~xgTLInUR)u;`u62<_=k$r=K+)2(V zkcYbcCR$)PY?4=Qhz~)EVHd(OIbNw_zAVUeWB300ChUT+)o6{=GYSD-3y#IbkVG)T zd3Rjrm?VwK0QiVmp{K<3r;Z~P};Ag^-{gwnp{aj!c=k%?-xGi%CrI%j68;Z$YU5c7=r?sm2t zl3ZgUfGHqrs3|r#Fe=KolhiO2hOAmMX%aDJ|B21O*_dg%ry!V1%vk5)q=R`}sD?zi z>+hb}5r?DzdgZKTPD(+N>Q(^D0wh*({vutoecQqCWmJFxfg{23yNCght!X=2?r64| zf#Rqz7j?aP&qf0P18Bhjkhi7}Sp;Ga^A9@;#t4Hk_+va2nM}Fh0?_pa!DJ`#Q2nUH7jBcrP2WyxFW{lrN1|f1s_2+&vOJ-u0Bso_VsVSu~8&=siWOc65#@^Mz zKs|jcb#%VcD3|8(Xu?3L{q3S`*C|=1!V?yQB?*NhhYVj)Ksdm&&!}=83dyzKIth`g zAO~j#N6PAM)D~IMI6)v5bL__bF??S+166uc}9xnzbe(2tk+4}f{%bgKuhTihjx5X zKobNUU~+B*G#ZJ~vvZ7z}Xu zlG?g9(9*aS9_3ejcrOC;OkEPVcD7P%)K zF1VH>xPX7ugP(C9qjEGL42lhaEz2)*J!GBzYCi*Xb4_=)npL&-mmyQE#^2c#TZC&v z7^{yBV?z@F6ak*9rOYQ>LBh;(b<0c&f{c{;nXywe{Z%7Y1M+C&0M(IZEX&zBFHGa3(giZ^En*P<+F>0%I zyCC(o{4}ZzOBpFhSav@0 zda4R-Rg^3atT8Ktzhp3gL6N0PpN~Q=aHX^HVhV))G{e0fm0pecv`E0H(cxujZ3{Ah z0k9Skm(c>pXw>^~yP3&DUvaKbY344RGoB=%4Fmz!I!3TYXfpsbc^xC#f=Ch#X!r#H zSh=9i`Fv+T_SQSAiMT%sLrW(Cl`rEn2ckW^=4dhykAvRu}zIIAlhDVsvtF}ywCJyT!uDH6`8JPBPQyS;>rvzKBp#(>Kix3M--LNqzP|oGZ25{DF&`Tq85hSm7~ zi+;Y#cAlQhUG0+&%>zCFd}oy9aF^C{Gv~yN%x1n< zLsGK7q4mA*cF!VvlTyFu{y6>mek_7fzy38zc z2}+;=qth}09Ka6%(;oo9xP0;{@^~ZLSFzVlI_aLlhGA8$rd(h({en1QGn#YN?L09r zA03ntb^UYBOdEakskvKEDYs>I^&OvCm$c+(`{vvSowV39Pd7Q2pKh=Hvpame?kqJ~ zI5I@;VsaU+zt7vzUO{J5|AgoY2rLz|LW3zIF9K-dxpt1~gl zu>cH4wj!;lB0#9swb@1A6sSi>+U*7Vy!2%6BL*F&^0xg*cgH(Yf^dV^mS&R5c?osCr@}k7m7D8FXQ8CqRR7#n%ujXS% zf3aXwl}q-@E?b=l(@aD%foF_;=6ySJJk)a{BD;o&ft4uduFSZzDsgIFKgpZ3dnDf`h0co@^b)IV`0#t3CX(dyfdK+=JR&_ zcMjX$d0%3LXq5ApEa`;QZ4)ZBpdLv7BUS z@Mfj9x=wp+UB=Yg)V8uyq;5O~ICpBM$FpYoB}psrAn2l? z^|rIlqTLINUa=L)7#nQBF#up047vmoShkb)oc`WhYqd>U0RsRakcAc`z);R(yL-_l zw7~1wg6rHza&s!14fVYZW!qU3t60XI)ULEwI?RegL=>Qm~Y0pJ@r?*|GHh)I^GpUL$`@C!#>`n z*X~MCRy18JG?P#y5i#zjuXAm`z@(=|az4*_>-WAN^Yky-W7>>1#}%uKm|;u^;2!CT zn|JB3%fFL>R$P+?nQ}nEFibPdVu7(RfR?v>Pc6=OTs+$ZEhcj0^~BR9dE{6YRxhBR zL1RFl7?;`WFkJ@MOnryGMPafX)qVuJ;N!vN+EkzQn&^5GV$$YzE?ikHTrZTLrAD)k zUCK^5b75gO3IX1_rHn;DBrsu`)e0%W`2k?PF>m{|^ej;?m|0vk#Hxfj(Chc_W~sZs zYkPLtJ*`L9uZgUDb2K;`GVfe(xeYm;ns+!D`Pp1wsO&F1e)8waD0t(sKD908vWjCD z1LqYGc&aq9s|ne?3ekxYhSQ+^e_NK3Z2%&m&oi>#dcgEs zKmZXbRtxQ@ZEc>##F5>m_09kQ0N{m?sh`iqXDMU|uveK?}#4~NW!>yyyl#9v~?rGZ+Z44ojIW@ML=bZoc$XQQ)zMg$*0}yHidEJ+#$6WUGtFS1F<6f9sK29@T=!B)RivV}s}C#R zMW3p7{^HNEMDT$sDcXIn@@?m0e&D@{G2cLo1RqGuByAtUn~#93g-Vo2Z$v2}O^ooJ zUpED^XEVGw*D*%mFqXltITIqRSO@?R0lvxw*u^mh6BxI0sWcd2ehV5f-`Ho2C9{l( zX69r-L&>6~7!S<@>5WGpH!RIPG#u?>DOl#^Cs%oXRN->hWo=uFzJ5vHiXQDYGkaUx zDw)2`x{T7)TGgf_fEXP$XEAuHAxa|U@^52eU|8WP5{PO+TuKdzMa_%F8NU`awhzWR zcAY&+-?-Fr%-X34NEP4$g2SRH9OOJn6e3bKvQ}19kc>u0OQRAEfGk^*^{NmE9w*eB zvs_4#`k>%m;S^LzK9p2q(y>AwlV-H5RTqTd2C!so4wX|Nwy#{h;7(Y76p~VuAQ=q8 zTCq}yf)Bd2#Q!+=d?TI`jpm02Dqo@$@wPQQV~X}?M(&}31{ML{s>Mvk-Do6C5UXX< zLW{>r^WzI3qHqPAnc6-}$Tyn2WO5H0iD9B(lSKn4j%1_L^Y(1`U> z6be^W3UMWmcBf8y1tQ&+F{zFXo9^4T(**wTFpVTcg|01!ci zB!4#o01g5Ex~0sd3nkHj@hewglLkZ&%1k$WSnbhfDV0e5pPdyG!fjug4~%$G5-V9-7{q^Kc*YhvwIm$IHh9>>Y2CdMYVO4I1?F z>DXy03S|2BD6eglFi^RYjJqC4W)lFI3AUHkd7EeFKvy;z&5SJ^rDkUsuYGHCB_I0Mk^GGs&|wM+EeH@;~boH zGYggLv_lGV0lh&ucfxnw02={bszrp(aUm@xFz(!Ps)NZ7Ca~VTXwd zIg4c-Js`|&FeDbz-VgI!P|nBYtv{C`!zolMt>KuVJ0}{slQV_G-I&_0wNHpQc_O`I{*g(ewqbP#sz}{ zOru(a90VUaP+@&T#8yOmYNftQGI|t+B&kZMss!p-Uo$&>?Rk%QiXWn#^>3CgQdg@# ztj!)8CWF+CwOohQ^(j=Ts=3V1yLO(LkkP1C}g|GLi@-3{_P&1W9v+k@M`;!=4PaC;f%I zCUvp+xiBCVLO_(-2uQjsgHFe^se;-IVxm@uC>p5T7MbImnNh0` z6TZ*3$3%UhIl*{+_p^7aN`m8oXf8mUarK(RfMV{i!x&>G>odKX{frN$C!>yJ(na-3 zqKmblB^a85n&s{rkPsm3JCcPA7#sI!;q}V-@Wpc6qX=C9fo*YvZQ4;yasULFP=JUc zMU@bCu2@&vV$sawu>BPmKRnTWYc9sGNc4Psv-hsHvB+p~=(cDsN45DBZ1g3;sze6{ zfEN(>QPgby0Dh{)Km-^77~KNGfb%c_>>H-cSh6RzBsL6|SyEL6U%gFc^CaBVyZQR{ z?Lx=XuB$$LttqTf&R5?|o-dNe`ikm|ob#eMJ)m^|hz~qOKO@tbwchTIwK9f8^JU7z z`&hWmxySdn^_hv)DhP7`8oM;8h=FQg7`o<}KY80J)Q5z;+Qxv-imsSggBa&xNZq;^ zY-}ND7FG2ZxM(#pnK8BObarb2O;_6>omTqHg0l<3u7nTrUZa}Erku8~^oASEE zgaQb_fVBc5L-Rp9kU~BppuFy(x!YA6E^^i#2?Y;sF+EIEH{ze8zKf-cct^YZsnF<2 z5i$uC0bZH~K*yCq1BT5l!JDZ80bqWkp)u}fO{_Dx;$Hh2BDal~7*Zs9r@8#iZKl^jfa*gbsxp+P`aHT68 zRW7cG7bd)_s#M9YC23t{kN3P9B^lk!bv-%e%R z_UHYkw-i4^snt}wb4cXJR&V;!Xc9t- zwMwe0xLsJE=%bTlFKshlzfy>!8mJY zn9n!K6vJ7UKj%aacf^AjbiF;XxECyHX!kck=JciA%fSW<0e*S~)TA821m@8y1`^-^ zz;|Q5j2s!Y^pZrCv??c5MO1fiHxm|3=O)f8@z}OV?N}toEhbm<*yUr#n#Xz0*V}4m z_0`pX=0|&6KuMn)EBjFy%!{{#6*ad_LQmY{Z7SWVklZ! zO#hJPfIB z5otoifujVja0S^01i%X}$1xn9_;2gzp*t8fxRboHRga@S4@p~Dt2_k<6#;%)g;d7_ zf(epqD3$^V@B+YnkR7^P38a?M8H}FHVK7`JLM2tg(2}fQ<+q(DheduzBT;rj7|xo` zHzzxx+U~bK_Z)dz_k26=PAxY|FBG1TrDV}I9k#()54eqUUp*Id(I1<1M&Fo^HH(K> zOz;rvS=QsMGoeD!a1HZp5B<0G(-{%D-#7Z0%HRDnNQIMXj4#87V-Wk_`q41Vn|X(}Pg7EW|Z~ z09-aJrl;`(Yhjb?-P{yCWMTlYfDqUSfJFen2^}(#SSaoiS#59^jUyAEqEvuVFXYw_ zDlNM()J6+A5XuGy0sg9$QU??OnAIBT6CfxUG2Cc9j>ui2l9|k0Qf1|;A$W+@=j_3{ zzPIW$^B(3fZ564()HyW!5Gf!9rp&Y0W4yHgTI3w|(03IyO;1%6j=_lRM0pjt zp{TCgJ8av`TA)O&7W4+68%*uBDxPt55=D0kAV?AzkQcBbLaT=inm-dQgdlT|`QOKD zgtS)*Z1PYw%M%DYeb;xOOO8Yj5Q>Qp=x!Z%-J;=+prMfspLKRJ8#B0iFv^$;C+kIOmd6OaTV~Zl)dN?hzyENmQ2PiVanTK-GYi zCSvjFz2qHfVTHD1C@0!DRBBvOTpc_X-lQj65ESUYzFwU{|E0&bOK@`XaXV4_j8O|Y ziiy%9zE(WFOchNNS)QJ{PpN`5EX@F{a+WzKFV$v-2r_{IpaNy>do0n<^Y&&qsWJCM z_k$HXEK#_@Y(?3qqA{>G#yOoyl)kzZkYi-9U)z$DLJ7~+rI|FSDKZo$R0*616e@Wc zC>#QEAtC)o2SQkZRL@>--OlUf7=#MY+RYF^S_MWzp()z9zw@+l`CIACRkuLScGl`~ z5660bgv+d0+Minx01E;B>eWKWNd^E~xmxQOhz4N%fna)FmsvK|Fl3J^vhgkrY;m2A;zL;4?S8EWk&K${UWaSn{q1dE!|?CD+NiS3WZvN zvh>0ULtKOfvf5J6)uyc<&GUc*0-KcX{TXb8nPh8kJJdsW1FHc*01igNxwd|u$?Xs% z;E3552LS;@APbS^%=#kFCJDtIAv6R5zSS)LkvmnRJwHP-ZAc3t09SUj+S#m4k*M*zX4s`+!l+e-R;AxPoJuSfVA)1m z{|oN(Uw6OzuK{F_w$fsRSWQZb5H4^=XxTqvguqQ0_%KRC$-2P|NnEVqUD!6TV+D(kkD3mG)%G?8lc8)>n9?f9(Waf$~32LWEnML0%?BrsTm(JX*I4iNy1Zj5@%-J=qX zQo96M)ljh#%7`?w9)Eb%5Ao@#Wy>N1I<||LU?*=X+s8fW&gR(gm6WXB790A`iN#pG z>z5HV*zFn3bH=EHU~Vy8BaD`N8`d{fMYc_%_3ENst?*zE2#+zDUeEtVe{YL6%EIc1 z2gKWjS`6x8Okq8D+?I>Xn!R;TyIsbf6Krh3T{T@-V>@%IJsD$Kh9W^qm{{yq0jX3k z1x8$!1xE9ft{A`E?+yntLJxpMq#nFg0V*w2K1f9X;el{$7#)Sf+Qrz=)z;4>umA=N z*(fg1^gSGnX`Oul-Zt}D%r^;EknB1|_O2{n0RI49S_Qxb6f}U)Dj-|}1c2eeuyMzL zJ$i|Hl1)zFs;VluOJ7FpW(RXc=I`s3?J=p@Ka=`);-&L4TScIlWOVzO(#pj;cQu>7 zUgN3v_K=Z-&DW=qw)UhH45wGs_I@6YtzT3bD@6~OK?bU+q=RT^gxdCyk8>^uXIz~s zO`(arv6;)DG#~CGc7Na6y{N8^Or9DoP$SFa7Uj;B%7zHza#eMcr^&n|Bxs$fUV49Pmf1UIPG+mH5uO!v zc8|NoIu$3H(qtz@|KB@}s^qDN>gM5N+S{zms(I!tgy&S&{lh{zZWd}#T=AqL49-rR z7zCt?T*#FZk})_k2ryRjpjEZhq^l4}p%pli!CoyemJJ}$|4O4cq3oRNbK=sj=INO- ztGLh)_zp@G+zfMPF2HWP{1!?g++G{FQHEl+Ql({Ei1OQ69X(LG4NtY#AcEC6I*+enftoE|b; zw_sSEA8>j>z18;@<0Ucaf0)&fEa!yZq&-+C_;e1|t|KY{OzB2D;;*z}n|lDDtS=y8 z>ntT;S+faj^=tjUDT-Tk zZEaN?F*tw)N|-rfDyk(GwrkY-4FNC!TyO1@t=c)y<^jMVby|RSlfZ_yRwvdlmD7@~ zxS(FVwtBk$5ouC7$yLOeJg1=mE&y!r2ovzOc7Snm)H#bx5U~tg^UYGLL0rkK5t{5- zBx5UC{jV|^ASF81*hKLA{5Tkhsc7ejXY0m77|RUg2?A6CxuY>;5v{QJWB{N>{5 z|Bm*kk2*hAy1FZqrJdcWs=X@IroR%SRlV(L6gB{S?QD|n-bq@Udyk@woivoPKlN)H z^me+BkKN0O74y`d3IlVw?`t1_ceF~qGklRUuU!AUIXeJcW4NTIvZjdt01c#>UFblC z)N-C`N90{+`FnTulC$V9`eQER5Nh!$cIJ*e8j5=~okY^#^Og5q`v5=yWNQ>TuGShb z@dBg_NqRv7y17Qoy}8w{4^!)nm$y`Y{{P*bAB!_bzpbRIK6F;D>A9BYqEMnuY1)s{ z>uyCHCIR|dW?pxSOblT3YSzx6=m!cg{Q>|)&DPcIlAXE>EAAoZSXC8KIu60%#s1Yr zSswAT`g+4{^R~gxSkh?RyS}+kYfAj|-l_K8tj<>LhQE5wuHFYxaOQ$)$N2xgRn1+1 z-!fGUg`Ct5=jnY?(SKKfmQ4%BZZkrnowZI0=h6H07;`WKyRUoUUZ1RdHSNRp+3@{W z{vP#)5|(-?rP*_L+R#1r+?W1`_r*T5IJ2k2@gsJg`N(ujF{fR(*mSn<60q+%*#PH2 z7{4E5mDR6e_xs)ER>C0?L{=Nh0LUu>85;lq@G3F5zF-N|z7-w#hVw)l7GR=&&Bmn8Z&PqY`ik;zv3uxgH$m&>)hq?7N?vMdzr4H^NS>(x~P z@qvMfwKp7#1M~w4Bj#IbNSp34M(7 zpc=R*vNM4WnWuqFD_OMs^pVq@HI($hM^@8(ac@wIiOg~Gb=duUv_EGnXBzAJ9YJwS zF5{&-^U)sVb#jX8!z6n)$5{&tRa@)bIkC%iQ3p;aF03ngC{(Ik@fZV^44@;tQZOO_ z0?Z=7xGY9H{^<>t1uHTDW=Qs2Xvb_vpQ6S%6sw_s2BbAD?V*cZyAo+4!N&psVfP%4 z8yTca0B}9Udj0DICXQvrH5mb(>rI|UK@xyz_nVvscmQBMC)Nj}_o6+NAXOq*OTyje zot3GcwnS>Tfm%J6M-tT1_rvt0xi{?zFJpRIE?ZYuhn$zudQpvR>buJLtaWX=0Cv<= zU;{KL88FZDxXW+v1MT#f*D;Oi1Yys>-E}@}b1(YLZJdy`^ZoVydX+M~IywjBE5&y2OQ;`+wOwEU@u76fSLlG0#V+!q?gQ3 zs~Cy0*j}Y1wO{qSg_lph5H`qwuo055{gV(LpbMrVFDVQyxhh+09Ra@kHC0A~K*7w^ z3--wY{(}vQ)7(LL;JxV_)RCk~;xNTLRF&>^H&lhvlLJP3Yqw#-xX7NQ28vWv57XvT zDHG$ncWgz&TB?A@#c+9f+|SY9e_l8lC1RBXFf%^A6N08-3HuHziZ03|I9*xhYw$7U zp3%P#VGgy+ea^4l=9JCh1;OMl0nS%SM*Df+n!P^zxu#1bgCaj<)egBaz1fKt5*P6 z76yRFkcj~R05Hf1YXOAOBi-r|yw@_aKSam0PKQ7@9uEu%B7xB;gO)JyGVADYI=zrw z=h$(*PWDgG<}aG=q}>M*0bUz+Q3MPCmbv2UWrQIB7=2VTh^>?645VEeF}kOcIDo}! zsOmR)w?6HyIfU(VeD~tO_i8#^+>0g>*7f_XGP)UDU!Lw4bG-$1emsuLm}B|6FLisR zON4aHjzeed+H=e~Yy5xQ<`~hP!z?S!WKNYSSOAoUoSik7r*r8AFLs!C zWN3|n%4Ec37N2*{p3^x`m!w7246*2LD6&N0rk^70+6Dl+IE&T;a&;Om7cZ=ybl1Z7 zp7sc!s{9W5bU@ui@kI=DEB#doD!`6OKj1WOBd&GvY_{eyClF#}u^y)AGwcT<^uNWE zUG5`T7D9kgv>3)><+2;D?w#XDBHus^R}I9c#t9YyUc2?41{eUQ+^+EsO8nRcFwfo4 zvNIWUFJv77IU&}nihnrXH7s4XnQGEQ9!KKC-9K~xyEEftICRzO3!ao#!jYT$V3MU? zq^^CQGyeC(`JT5@5eXf|^76ANV5sP``^{jbmbPcJGoqM*1`3h$b*nLpSEvc$J{^k} zKF__!8RA{)W><9eH7Sa817`o>t=8K}fB(2D*J#m7%#Z_B489Ia4e0r`_KI;(r+*hM zv_};PiN7jErJ@5(<^9fIl%fgh(W_T#9e@D9BLNq5WtU#)Wsf8Wp_pT_D&vIj&9s^tI9rQtqoKfcIy9l?+;jCf4XuwSI_6V87S}9)rXzYf1Ac^@&L#=gr|6>a>p@d`u?3|F-Co< z43{}J&1UMIEI zH9dJhess~cD4^WQ>yKlx<)7tbZ8)RkDJ7^{SHTkrQdDpISP_=Npa)y{gTVk`o^v6n zLeAWjQrpYxp@%%Z-+9N1v*$m4{d`_=W^bI9(WiB% zN@ew^Zku$?8U`cbk3L~C3D)%JbpRn)cqA?cQQ<}ap~0v zRh5Ezftnt8N4||hkn$hRU4~X-%UA+oD+X+k@dHM&9}}*q2OZj`D&0uS&h!k43I<%# ziZTF;00C=qJ8}8ECYujmgtVy%f2XQKDe*9n3RX2fJI+Px%ps}T3szhtumKYR9{Uwe zS5t}sFir(y-~$kBV0gQIXN(BOK-wi^Wp^^rnN_SRDJ@_3`jIxCN7J5(pQW;097VswX$Owx-oF-!AHW{<+s-y0d72@@lY|&iYDKct8QlJDV6*5=h~d zDmgnhFwR1(*(pasE_uPV33RXkah6L7F5;Ojg8_ZbRBMlA$dqg1b`4c1jx3!0%-s+2*GXj zkiVifZAP;2M$ExnEz0g26CwhqWxRMy$F$gG^!J8zexLo+SMQviyG_PS8e;ZM-X_&i z{2QK5)cav;6Lm92_=&*os_H^Vp&y7%_m>?rfQv4 zv`jFU)rLD=_291b>r#KXGZcBe)J{|m)|*t02A_NEwMizOD-g#_yk=2j0K|@(%P_V~ zzw&UbZn+mjR_bc9vm!TS(vZ!3Ws+FcW3mgn3RU-41PN)<{36YCa8pfF1x@CTStybq z)Q6|KpO2liEId|nj4J1C{&aYZvH_qedOPCGKnWG0@->l(kGj8Hp;PN(phTLhqzcuW z0IK8)nLNrKDIO7-R&W=9kN^jZ0K&CKS7aVS zO2>iZN~o$v>}j^Y{O7u`ICc~6d{chn>kKKW;Y4kFxF6#$#`!L4BY#@GEbKQ-%E)ut=OKEk%PkqATeYO`*~hRcadf{Csh#dA4J4 zk;yQ?eYW3hIL!T8oT9oho@aQHk37uI+vC{g*vwhc%-46zJr`rG>4O=JtGfJ|I6O=8 zVum}!lOl@}rAYGkZQBA603c(_t1Zm0h#Ir5CLKi$FXk3F)yAXGO1UI8Qo#emV6 z>?tNr-abHY4II9U@F-RtWeGA{O4{~tNY-Sn??#ea~T1B3<_0sgAhjs+M1hF7lf zG5`T!zL$WTdm($Fd&kL~l7^gA4I`)ACAHnSdNReN49g^;HL447z9rTt?Nz$iKjqhF zvn-m{lbaVM_2|g65XgI@$7i)xN&_wq-4T6_Sz#o>#6iE=^DL^2pBI;5&XnS0Q`A1O z=<=BCyJ5&}FQ(yhZ#^&{RH~N9E>$b8G8!aR?IT{a4xp(!PTC=SALf2{q<^fUIoB_i~{+REi6F9wwnq4B`GRZD3Qpa z9$Ak7kdSE@FTjuc49|CkZP^nL0Du<(({aPgdWQD9!|HfO9kp1B!B_wWMS{~m^4B@H zZ)z8Y<~5NJ+0k9UR8*26tz;q+doPC2x(Wf_i3NZL5CG;@tS}k`Hwvh5zw5A96JO0O z*MN-s9TK!QWhNaZ!3i!wkg9|Z?tCxLHcy-mEvWhJ$EBt!*?sJO?zMi>Z_-MeJ+MHo z9`A?#!=k2f^`-D_= zmK!FYKgcP^v>Na%HB39=wbW5dW#}stSx>C+0Di+^*{p(@Y8-dk)z_E;SQxN_RjJ1= zp=Y*Rj4voQU_~+jqX-Um-PR${nxk%76u|}q<`t0rQov#b2@HT%L4JXv>3C41_Ri!n z2Z_liq@t5$V_BXBH$7-JAn*kSV5OMcyNqT#dlz0OX%7K@nx#$zK_CHhYgTv%f)_xA zeI1)%9lnH2$Z@h~=^5yib1aDs)le7IG?I;E?=|dgq{Yj!9_iN%JsodG=K6;J^u*Q9 znMXF%IPoCU>+O5HX?gEf16s%3+5qIxb4SbiN!hZQV_W!WYlE=?fMIE}=b<~ZVH%(p z7`?SK>7+ZM1UX)ESbj+uwrt199>0n098}xN#)cq0g%j4szR=Tq{-^(C_H_@ zR0)+to?c3oREc^jSxuo!03gZIUqMi)N)F{x6anMwO)$_Qe|x@m0Rezd$gu}nuYjWt zd<2D*MD5#zfiDDSkQfpO^k4v=xNy{0Q8Gt!8@n@qd$ccM-G$o-gk@|Q*J%j>UWx@; z#)FYw0b`36XdqiSPXhxn#s{i05LN|)ZIc2V>y?DMK%*QzMeo(WT-PQ z1$2h}T2Et}cH;DN=&dv7zZL8uCn}1W0ZdiW|xb z01N?sngw15XK(;cu~;~eyi7K5uLwHh-Y=6-VC->9meHdTOv*XdP&EvWQ;4;!U~P@& zr!JddF5^!ReK-FiqEtx!-Jhlw=6OKMd35;^uIKgCYPCKyAT!`v6D0en#n{=my;z2t zUZB}ULXAg^Z_`M%W z4;c^)fB?iLtRW5z0e*_b+62L%0hC^W_JDZ61ojmrX{&pc(J;s^PRT;|w2(@u8gfI4 z+x=2^TdhPV^V55UnMX``A>AZ{^tHGQo{(|dWN2X&|EPvUBS?+IZ9J(#Jc z?)UBD><`tdk!*QUdZ>9&NFXr&@#(21#5-isHFS;MzY!wFLqTV@Wr# zKMN7z*f5`M;ky{d+8_?xSwzxH9TWVLB>pY(ryI~UJ&9@hQn)WtX(pKoWR ztwRQTXtYEE6C22p^uRi&)XSGz%=@`2MM`XGvUW9byg|`8A!$#uu^i6QI!v5hZV@LrFenwh8RF(1=XJr53vgI;Dr;O>V zb0n6=x?{5oKQRRGjo>6Hx&#^sxH|v=0UkUqH3bbc4QL2H*V+OO06ba=^npW{%n~&R zNvMXZDuy;VSRyp_=9FQ|BzD6KQiUiasF<_#KiAWC1!L!+&GpeRXl{SMXW_CC3b(xM zdam(U^a^#2x(9+$+|EdGQZSH2akVZ`{d%CMDGbQZ47}u1!~*inP!ueoteeCmy4^r$ zT7E`WMW>ie_E;aQC(rvhKw=~oCu*j?b)7RwM5!c&=d=j#D5+(eiYSt*R8?4}loS?J zNUEZ~Bq>!?j*=uJA>_q#rM*Y!P;s=tMJ_~lyMUogGF&bjSI;9{44B&X3J_Mfb5}MW; zh&ZFunTdmOQ#BN8l{N3Hw^G!*wfY=L*ms`(tyGEk?;Gf4({CJBBUy$_$l>K4&N3yH z+DBF)Dy=uy>xxF1tgWAnh?SnuEQX1fIc3(6&8k6*FkyTe_x_m*Z>R2pp2>h>|!t$ zG5U|K#R%5dMH*F{@5M&?hE{=+DD^dpndVcI&j1Dio|?tNg)lIHaVwXa7>dCFc(fsT zK)@VokCl>`6B=r$inYd^8Zvf@t6=*~W0b*<|EA7a%)2V`qzl>66)i7t+Q^;^fc}@j zptJ=T7gCA8qHu&Y+ z=RfkH28|W-%(t10^&XMV#&z=^)v?Z=HOB0W#@uH_ZB0$=rBy}tEPj$fTHdvriI{0R zTLaaldAW|HNGH?T5!oQfxcVg-4>*TCwEdKl#jTTVFWtce;Dj;&B&QU{bL&ftEb>6# zIeULK!I+X*N>oA|$v1+MQvb#)yR-gajx=q@@e8QSJCZ6kH+Nu0oU|L%fnG>(#3J_` zMvP3?dk9gKiUgZrD44U?rAf6Y`)FbzsqBu2c?<#oRQ#Cd3fRqFDP{l`0d|>HK@93( z0^?6DiBd&L!vsd3v$K1)FPu%!&s*l@m;?Q0#&tmn(I}ZohL}*rs`B6ckK+%ka`f&s zG;DqhI6FAphP#BO`sw-30zUJq>3+{_y@pCk|18S-a``gI7-oEF2GIzitvJuz(t0@- z{YBQ7VHQ;z?++^D;l75trzSCl)Ec{-@v|Mj-|l?{;>;nFjuKVRlartpc07rB7-Pvn z!g6&j8IC%Uh?=n&RiCTyr%3g5GWo1=HP`Kp>P0D96$#5=j8{C~pM0;h(v$9~t$z(` zEC3_{uNAO-oF#qEd&|d1~~v+ zW!-Uijbo0@t*uRjW~7FfN?Y>%X1Q*f{^)o58%>~$v?Og+^%fs1uUA&K{$JT~Po<=$ zyFXoKF#wEhtuz+4HPY@DQ`JCBM!N0nr8X4lR-=;cItxwp+psbU%U12w=YFbPEfkg1 zb#j+I0Br9-m(6eOFsJuEz(A7ZG6Sd?_*d*~!nN93k#^C%uGG(?Vg0{`qJ(}?_K%R34PcH2R>N*{neuFSc?q475%pVPXY#bZ!u07 z>-o_fMnb~~hv8(zs&s>9 zDxi}bwd!t~4BfFSvD~RC3H2ROiJX9h#{1{#UmaN|xNGVTC`Zg~IZ1LVRyY<%1gK>p zOaBP(b(c-EEVEr3BaOyQeOH45SQWRovJ$$XGX(R<03u{H7*MY4FK_NbBb!#3m$hzw(#O(n_yhJAJW9<$UAF!+{e= zethnWUW&qbw&#ES(OrMqwa3rJr@eF~JmXAF%SDd8f9!cqmiII;-MaB$Xi!p3lVMKT zTv^ub*qX+W@rgm?Ohnrl7Q{YA4ecDgE<=N^+eNTWr1v#~US`(5C|ib3DryLzGphmF zib8dER9<%D2P3|bb*pKIua|{gS_UDl0;EWu_78blsRC5_Xc8BDe>nS>8!@Zu^AG?q zXp!*&U?x^+{m`X^5E)u<@J_s;xMBZp$=#bF`b81Tvi7d&j}PQ7)qXhIx&;XV-upF0 zM#2;@RTzH1t{brO1r68_LLQ_D>`X>xs=-#3Bn%acYOXugpGA%7MyMw^#)s>h-1kd^ zMteKm`t~@T)cud|JS;m(eINE^-nAe7kE(gbWv7kQz?`dlrprL3|74^g#8CR+6o$$Y z861G_teNiXaT8}hxj&w{T+UqrwaR1CNiE1I!5P=o8G1nk*AQaAvxtDYK~R_oI`QHq zR++&=f*7~tsO@^;I4BQk$8hhYSPeCkA0LqsM+U&i2n3#;qK2H--#wc27Ai_A<;jx9 zmfoFZ|%>)E5{&1tDLkb$Bj z00RMD+htw`1OP^_TqXqw`!WFR2b=!~x-1w;O`47fyP>M8s#l3(5B8DoUk`PmzIF$f5e*#Pd1p|f2w%Ixxj<*KTxsfFg{x@jakgw0wl^V9dO zRZO+<6MWM4IIj*<_beQodEGBYqrGwZFWfCg)^EGXYwsUDkkh$ngh(}xhr89s@1;Md zhGkz2353K$ z%%If4*uC?0*Rbed5KgKIF*_2;>8J4zIC^+9=-Lxugm5eaM96iD#FC0;$6w+eQk8nk z@COr6FFORUS`RYq->}21U5qpS?(8J2Bi%r4HkJ?uSG!2R5TbWM=sKzGHyAT(_YSf;dYst4IkNAmAm~0aWA9F zR37FWZl})5Q@|AVqG4bP(IjdWS893~n3?fov%++J(;BAK&n)o9Fl_*&IdgubCwDoE zwVYo$V`5aS6OM^OPf;o}=V#v@>p=8~rith#1xZzq-a@KMiPg65j&3W~{$l5v5>)n6~L8Bpgw?9jFRSB+vL(97E1ug0)&iK zWB@DgdXwLxfnwBnu5#Nzb$e4G+9YCV2NVHb%XLylF%Fn9j@?S8n}C=ArUy$S9t3vw zES+IChg{56)kjgGbKFl%2Nzyg*M+_2=WZK)^wsulI=S05w(7s19}dwdkIdVfR7sBg z?WeuMdAgWut3=H$FmJk zA0rzOz7B!|poz?zxiNpD9J!dHhBhDD-3g9VGLvs-cEE93OP2Cb6=wnd0REa4LPRkD z7{79sL^_R!jZ#U^$)hzZ$_KHhV zQ?T^9NgB7;t+;vb&$X}3_ zl|&u^fNu>Xo=j*ofL6?q=;$a4{ZaSJ>#A{k9rLOTfX*FAF!dxzJ=d!!{yOWW_Lm>vfoykq5irE-j4CPU$}}Ep)?@8qjL+|()SM@{yPlnkpo@CBy6L9Y zG=OPkP%YBS!h*m6BE;b>02zTnHx>qvEaXcm1nKTCI<80xLGei^_4rRjRXmI{FM&1Ofnn&Dg)eDE>&}cmxaq zzKRu0L>L5s^>mAY0eApl-)Lp8%3U&ZBpZ+urWz{7s<>|1TOX9`zh!mKI|o`7mpiJA zoQH$T>%r=M*EVhKU4yl>0rxrCtk+q+lrd9h+zgDxXla}F3@+@&qQ;(|K5&!~JRKCGb*B8UOPhtBZ;)al5p#|AC0BvkG-R1$;+rI-yoD(_5 zCqSTdb{GL)8v&l0g}_8%1Pz2Z-D2PXJ^+~ClFp$ertHRMlq|jXN`z^ss&ZnbZDS!WvsXTj2ix_$g?w@BgR-Ar zw;JZ9oWj->Y!|Xq^&+Fr*>N)89?_~M^KM!=PrsbZ(yU5&l6Z_gw&&A6%;C(k=syl8 zHTBOTWBIO0mX_lHI*zL5vA44vlBgI^;TR{7)g)C_l}Pfpjlc>df48kdRit=IT|}Se zGO4`=V_Az=1CE6S03gt#Um_3~u<^SB1^{d@&2zs^JO%`qU=^_4Eb7b;LjSzh9fF~0 z`DhLOZdq(={J0&Nhmk_4meTAA-$FONc@6~}I37iy3;Y0Hnk9edf2-< zc+Cg}lj~BV7BJbGssd*UJg9d3thruhZ~u0}$k`jlM8zNcGfgY+ zd(K}q&VG!E?PE9xr_V4#bwx?d`1Q>?;EEtCfOQlrv!-xRg((!1)!oA=_Stq^9(*lh zBoM}tV2ncSQVE3Mx z3|yHtR1L9O)UHlrM6D6?8S7#Cki)RzO2?whSJFBz4=%;-sG{eETpwMB$f)0@l_HEjM6gsK{N}5SAeVZ17m8se9y!(cm_i;isk}pd{5QiZQy@ zoDKSm;P|iY1-#f@T|abkc9H?F2qU3cgPU{JW}EG-bDR(W2LZkdPRRrW02aC8SR%j& z0P{yqWekZD4q&k}qo^=&SUFch9)>DTm!VOi;?!B2o7%chSc%EW#k5&HO;|Z?uyc?b zEUO^ai>FuPcB|6X8E-?#Q5hXCiUEL=dA&Nrx<(F0&n(f91r#wwx&czqIlb0>)W8&} zruE+GB5OCj0Kljh%`u4a9ukXpCEs8Od-1x8IhirRT1Wfp(UH+V+bkoa#d%srDE_r9 z8;KZ!M-1gxp^pfvzSy(nHAF)yM^738;_}aNRtv_BX0LUZFl=jY*hmZj007Inzy1^h z+ZO{*S5Fs0mUv~1StpZV8B2bIt#zgn&2=~Gn}eTRrqABa?%3TWY!v~%`%T8Af@uK8 zx!`0xG(G?r9=Qw+7P~}QPGkvIu}T=Kh*MTstD@`^mnY)muO0f+&BfN2V;7c99T#?- z+73o0gBEP^f;>0lrQ3Xacu1|MtFe{+JgyF-;+_tV$!6@IW1RuVx!Pz1AZph*i9?6D zLC(p$pj0-k(_d&6CKY$*kUgnNaK7Xe&KMPAHm%WHN1MM*t&SG;Qi3UXPc@hATl^=#;tgCR>BYUkthtz_Gt_WG&0e`@}^dxaN;PchQXNg7?=I_E^*54x10mj(;8#(%-Ca}?77AL zvTes@XMd=Zk~+P65A#sF2K#E;pPe18GtLNl7?u6l^jD$~Nmag77EL8p^(3iWw{{Wv zOVQ4UpJ}sd?Ru|0l>&&jm#iCNUB9 z#bAWjaoi8Vle0U%aXR&f?frh(syKu}NCrD{58Mv{-U`;h1PlNUxnb{90Ko=$T76(~ zp`{xomNZF_!68=(CFFN^pMK)oWqR0}BBQcI$wN8hBH?k#ND#Bl>h;TF*P=~|02@q<4Px-fTve+2)m140vH<}Xkm)`#fB*zSi>o^*ZzzbeHEQT`uT`a#;GEf2 zff!fXqV6mJBrq%xc6?7wYav>{RD;uF*BxX7x&Z)JZmoU>lCCE20b~RF0G`{8#zavh zfWz*$L?1u^7~ccfr9tON3sxmnvD~Yp!}36wR2ueO*VQK_w!*Yc-79|D)4lX0UiO5R zs-=1Dfn-=*&wlZI-JhDd(Aj+f$i^MJfEpK^?A_U8;bPoh7lWtaj4F(3myiUgp1avXzvc%7=j*elvmqsB%6WYMvu7-z|8cfZ&bzt-Pp z*MF1j$QWz^Ql$xndd?vIB!X139n+x{L&sWkXzT_Z*Dr+DJjt0G8oG;ORViTh?oHdv z59O!D3Y~&2ovK_dA7tN>O`!RyHFpq|YO5HW3CrFPVv1(~3jzMxW!eW9FoDIZmzfkm zurVMhdM1RWhdUVAbMy==wsIv^l_jei%mm`h4s&+B8vXdpj|UoVf6w9+hs*WV_4xEs z-S@4U{*0Q(Jp1$Q@p+U1Kv7-MbOBIMn`d&bgzJ0nLbAQieHMGu0C;t|lC@II)D86H zVCse?zs+&j;uq#TGTy9h#_fy4xW5{Vx*2;1&ienm043SOYXAvcoeCzeDU@VG;S9WR zFi4=qfK~5MLoUgczMzC9QUY5b{dX;Kq6TW!(xUuI*k9lmib}O)B2IwhzwLk01^RS>(xFc zgo6VdV!h0i1PBJ!jPD6xXD_8B%ghZ!RaH4A!Cw9L(tfxd6s+-8B$D$v;r7!feR%Sd zQ)Q_hjoXClp1RONsl$!OxmEVd~)f+|CJ?2V;XkLT-r?r08O!R`eU_&xec=7yvn1LI}Vc z7<&-_MExR~OBxMEib4APxzlxFdhg>q<>5Nmt?S-QQ(=48QkcLVfvn{Z`&G z_XLKm4MZdLA`Ah(I)=JNBPiL8`fv&sAO;u!mY7)AVd44r-VV=cQCwBj8+|JzF zrJ++dUEs^{SYGC3_PNE}ixW+S4EZ$Wm0mkct=)(d`&E6-YqOm#=}v>Z3ev;!VaBkX zlg4sVmB%B3j;O|kYjrT)C91Sa0Ol09Y8;cua4Se9lJurZG4U;JvEGhe`H?M2vTVm1 zviz!4l&Y+X$iR-u1H$i17DQY8$mY-?lL11YK`dx3df}MD3>ND%A$K$qZ_0i(?;r~d z58L57Cab#%1?+QOHiWcU=d}O{0X~}*#f4C?QI+8|3$Sl+GBJVS*26z`W{FCK2bL>A zs4ANy&y?|FyEiyo8~G^1cL)1BN>RQwayyaNo<6!3o_%M2bfhnE9S;=vdAq-!*L7Pq zB8iwQv;Ph_Q{=V0=MEGYNj)6Qu@MCJ_1*P2tNw{srnd2!pOv7u|-rh1g? z*v(W*{JoV?G1$bJ=LEHl(bi&x^z$}GBd8k4{>6(MefvU0*0FxPZpcd}tEwWYT#2fx z`dXS&RSE8F_gl1huO#h@up{po5HgDN4b^6a4H>;nn`7C8-o4i3Qt_9c}E8sGtdw0?`Ce-Y)| zTc7#q?K{Kct*d=?=vgQtGQv`#q)SAyO{}V_Hvg~Gql|IS)iibOzsCLcnC8LmfyAy< zx%MAxmm?=tZ;%WXI$An@o40bnDDI=a1hE+$_1Sr>qpP1g*U3cvCZSj743>sloQAd8 zbP_^=rrq-}IB99qTg%)bCntnX80aQ3VFkF731+HsU-N!xYtM0F&>Ono1gi$+&+h|N zV<3uRx{zQDo+YUDj_9xabvg_RCYV4F3Gz`W^_XdyYK-TRZH6Ie023% zJ*>wXZrWvv5X}@AQ0Inw7eZ!M4X4&wO!*mSB*2v^#Q`t?L|38+SIyU-h~p0ssoo~w z-0LK(6B9Bf@z;HknT6hQg)>RvVY|xJJ?Hqf@t*|)G5|bZ)R>L7CB?-*K$O+h5U?Tn z-_h9u6j;mOEc38#AI zdtsS8&wRbI&@fX0)?7^O)x<<9F|&Jv%LWB906g9Dh|qGSXSnkZKt$Eb1|H=)x;9(f z#^b!KzeHf?)8tP&iN3F5`n_FGsOhab{d@&705n}Lk!7c@t}H%4RBEvUd^g{GdVQrG z9IuwIbI#T?RXN=YF@066CSr}-tWaj$kMk8S07T#1(#7@FcH|ELj@3C}Nrf(Jw~c~J zUiq|E=)>05ib;`ouli|kw-&XTQ`6rr05n(rWjeZ+byU9{D8Z?|a{3di!xHBFmC+yB zHjB(c%%)9z z0MLDlVn%T+TCIn^dNs3o|MmOY;?SSQLfiu=nNiP>X>cgBm{8S0pKDZaG4s8*d;Zr6 z)&wUHzG&`1Rn3)BS#qyy(h6;5@57Qy7>;?-*QEi@i7D@%Wr#6O+Bp`teE+=q20J$t zvjl~KA)i##Ot%wqx>V4x0<*X{P$`Dg=;37J)buc_S-W35nb!js>ph#xr9K{D>*^~p zVp)6M=1t;!Gp^Lqn5KJ}sKK%TuwWs%A5Alr!l7;30)%XK;^+nd1Ym$xr$&(sAQT!X z%sek4rsfCU7Nn6^EC2-1R?nD=-_Am2BHj?#!4?((5Eu;U)dq7EYPxMsTX@}jbcMo> z)u%lAow|FeABO8DIJ)f{%K#Yx{%Iuv26TY}w5M2#8MtX6$k08*EXpH;ojIbNIGCJb zxvE&XsU%JbpSkzd^6HOs8PzZUl-T{HSWh1hbWVxi18tzFdTKDui-NQFIpaRo`|Ypu zY0x+SoxQ9XT_JJPD93YVO$HCy^iUJyrz?V-I=K^9aq@PCG5k8*wv#c}XZFr{x-~D9 zbVSt@y$&?D6?J{H7iztPn~6=odTU*3F6LofzfR6N8A#D)9#(eG)*uWZ$GDC;gG8f> z4S+y6f}uC4!{|YPMtyiyoKC)!0RS7KaqES^x1c~~z%Vw@KN&<^((wyMuZ!~|YfQ?m zxklqnt1Rq-3UJ(Y=k|KlykMVwSE7=}TKY$K#j+v-?8Oach!`YVYjt0;e z)G8mVb8lw7*Q`PCe8ys2<^$U>@C`SaWq>f722W3)9FOa9_F`A|7^~~_of8(&r!>=Y zQP76(rK+f+5CECX@@fe%GD1Iz6qMAjuW$O$qyhOvi!nd|0)v#ERV9_Gj|!9$t}bOd z0D6DqQ8iZ4wr&S1ori=S2k@{bQ7AE%|o1xI#^?h4KUC*GqQF#==JWIK))^j#L zF`uj+$7e)EE1_=xQr+|i~ua9Fy&pU0NByo$P|-BL)uvUTTFD0=xk5m0kgr zfIOf9-~1x)Wb`a_XOM(lPAIABWXfW+tAAVPo2T-U6jX5&4n`wY^}(JTwluZ*zWVYx z{cGlna`PqPM}sZ zi3;|o`F4AIT;Bhf!_c4n_fgadH!DzrhRpHwwxjPz&Ap>*9S_;lpE#nFi93uYepLb- z&V}1Drvxgc>Py`wWRL`iMMzvl7uhCSZ1ev_NUC4}SOoz7;5usReqUM8e!%gyzYBm6 zSPU4*Qk8kHw9H{+>{K!Lpa>~GQs!l#Bkbjtd9(#xNxK?ZJPh6Knb)J+)TF|g6cAe6ei=(CK{OJ`<1>0@_Jr5qV2(Mqs)|U4(Rc;bOpsP$D-%NtcMPFY zT!LYtHNd4_zUp++4r^wc)uUUpS-&@`Eyo7_I{HJ2psFW+9@`k@MSR=7J@n(}z2 zSrVqB(Dk+!>~|C`0 z#c8YQH0|3sKJ;620ClULw2ad^9Bv91O4eFWuQ&Izz8~}ZEbWW;J##J#f6PnWu5RYM zZSsY$9BM0PG|rgZ=NRK-)2~Db8t!t9Tz$Fj;!?Nlb)q}oNN~+7@0Cn>uAlopacWIP z4gVhZ5*N@YA)+MI;Sgs{0}j{8D(D_*XGcj=6-D)O?qW%rsw5H5;_fLBjr(*zoFbV+6p8x=RWKTwh7FDcr6^J4M z4hWa?`JJCGnJ`&4`Yn=7<1=HOva-@ z3m)RZKmwNNu3!mU094BTkW8!9P-i)hUHko5lxc(F*tI%)gqErXCr#HVSu6r1u))s- z?iTa0z)lZYRj#RFaO-KD7TYlts*Sm?dp4h0bb9x6thjLQN5R=)_k!eI>! zCB`4%d@E8H5pdUBR6rIwdol-OpQ(qo`Tvh#Zr)l91$3pN@9b%zNIHNtI#vkR~1gJvaL3{->}$PUH&N)7mRAQZ!* z7`pnj&rXC9SPLK<8w0jvMMgvgQJ#Kgt65B1G-tW!Q4@}L^wspTs!Mfx?{{_Xo)M%( z5$d(GiS4pI#aVNAKibt|;S~HIXhY)w1TuaEK_?);G12u6og`)kqvSM=E?!fSpNaCW}>7)ldO9Sf6qHs!O!dFiDS7$>w0r zc&*S&!ipzuYkz?HvK>Qvve=xX_7s|z=WE=hq$U#10sw^|N3umIPt!dTZK+(Or|VsyR4j+7g4(q-z3UgEg?$cmUi$Bfq9&I@Cfh7-V-gsM=wMfK?7> z9);`stOOWRYLU}oRTzQjzh_;#b91!kc2vdfcDUoI)7f{-rDxPTcq5GvjKj?{v!@=O z68#~)-WP%G;@2iEWFV4Nx0joA>Iq1MsQ>Vluo%Dsdd5VhL(rP=Gt}3y7n2nKWD$P&%ENEVIfbROS4HJ>#%{aJQc?!cx^Nb2^7#D^wH$ zm(lgAo@}K}wMVCmKlfnPy4%KO@%fK=&LZbHEn$P)k71s@8}r`l#j}&p-?J&T!!x(& zSdLb>W-^uC$-cY<%oDuV`IlH~dUd}m?l{|l}Z&S0t0@;Kc24H}Dna+|I^o`kQFC z?XJ$YIpc#Hh+o9A(E2>OG?g~h>S|D*H(R~NZs#QA3XWve1i(N-1T)>Y*G@mBX}9B^ z!HsVPSu<`X1eQ*!8x<#N@HmX;ooS4>6G=r#XAv>bU~tlF{^Ev|m#XaQhU_3qlm|$; zS;;iDW{g#7sYzn6!2uE|M!_XT&N@yU9blfhLZa9C$nh*Ish(}=Rug3`W(d|gXFX(s zewYjqE&x)1SP%e~ECYa8jBY|}6+~(j14!ZGjp@{Iru{kDPMv`O_S#uPcc1#i`X}@< zcLNLoKI_HW2b{qiOe}M~QYTRRGuRDGXXhxHS$hptty~S8YCEqtd`_^8WUc4b!En)N zJ?S5ITnVpLnW_zJe>llU)1d41b-N6<0(#rsqbd5cJ#R*g0@)q4s{qfykU1fk_>JtR zTrO>|e%RRt1+q*J7&TD~8dWalVmV%Gv6xf#AUDk##)i%YNPqyCXlc63OmJ&3iK5XPb;CN?ob~OPcsQ^9*U;_3LF})?l;(U|ZxV&H`rsKNX z3)Pe&gNCA7!byjvp|ofXT`@3UyC^A_#dgNk!{t8R zn1UQncQcCn1#Cuk<^WB!maGyrC{0dZU|^-d?XmN?#|CDqMx=|S!wzv`I4HZp_=s$_ zTHdHJaY2lklu=e@1OVIIPmwvc$ynepG(?sjf>f$f>YtHH+fe217ABFw^N;JZ#SmZZB!{MR-_6ZCX!%>OBmXf?5v8bvc>3aqcRt*t?c`ZoSFm zHE{%^r?Znt22@cwl$Nzhoi5%5t;q^FN;1h2Wak621T}P-C$~)jifPa^n6wwE%#vFc z!#2$`et#?Zjb|W;q%yCC$sE#Q+{Ic}%?vJ&Gt1MTw~!tYz2EEZ9lt#_Ek)a2$H3ER zM9c?-3WT=ui_RB640Wd_P=jM1Pe5H=s=QNyDykhvIOejXJF}lc__l=AzmG@+yPGjp zQy>RpmSwfK2>#OQy7sC82?1W)^~OYEXdo4qwO;RiKmp+J2p|B5?uFVjz`3M^s>+R; z6T_R)LoLuHgvoA0iL17QuQa=p!?BO5JukwsmW{kp%0X%#z%9A((jxUbHI?R>^VmmY z)7o}sn%=&uNIK(v+sjXL%m=v&)c^sc&MN4R)*Lctnk*!Hj`-xqufy4yA+e3)yR`~PfO0{X8DpFZ}kC+fbJ?W6W zYk$!rzWwmfG|ri;LLmuKKFVA0i8@6x2rPlnA{mMVzr+sbdegzPD`G|w_m@_WP+=Wu zOe0<4ksGO*5aTlTogZ$4dN#(q3!4TI0e;(c-Un6CfMsqs6&HX2Fg#-z5^yr3%wZVJ z<%FcFaGIRe_TQ~ky|quOye#WuBO1D2KZ@G?XDzNfR0nOT*Q>XHMK1JY9#UuW(W#xn zqOO6PqCz**CP|o!OVUJ<*D>oT$MdViIaY>ZAgO&svQ({yngK2odzwUY1l3UO>XB@e z(X_3s8fuyqmc`1Ps=%TYw3)Thh|BP{X9gKhD$7ERG2C;R>pf5Ho|GNGGvhgWVweES+^_Z} zRfJ{$%-IHZ(%F;29Kfn9p;oKSVh%9at<3GzYR-f$iNy7)Dwg%6T@R<^bS&R`ZK?$4 zSIDVkI;MW~{;Wm4UY*?3QKVDcRwH6ovMQTe19F~gBj>%(bxdi|v$!k(x-;Eb3?xwr zGH;E~_sL9VndW$sv)!0zDk=ffRR&6#GS;QaXoC2bDHou+pg8XDgR|@I;}|*{0Y zWXj3D6rUPTQl&IyE@^q6um1?mz0Z7YY?)`*V#ls0+li{OoH2~oPuSeZ%%L*{lg~Oi z#XVLf@wA~~(O2W)n={9oof^;p$|F}y`8EKMp7KI4g%CZnvOLp`hBN{+=}IYU;VK4C zGXa!V(v_j72)iAtrAk$m>Q|N}p11o!!{EAi(U&!$8Ouf(Ks<&5h5FES#)@fsAZr#Q ziFBX&yeyU|a2Lu4dw_Wd300DrH7h%WH$OF0i1YB)iQj)upH|Mxt4W&_v`n<#am3&%=m=hKnKY2Fw}mYD|koW&Zql zQLUr)+?UKT>YTmjd!4L{8XE(x7yue8PR(PTe0e8|5@}QRa)51^bM~C8hM~qtkGs}* z5pBHp-kaw6oc*~Tcf@xK{0{5ZeDzW!RVAcc!T6R#&Qs8 zKvabl+=F99SRepAKqH&b?2z8A4F^q}B*N?G{aaqq@x3TUuCu&dU1YB;Kq;NHm&$~rYRcGEG?kj%1eSN&| z`<~|vHXkssb@FYPS|v!#P6u0#XqA-0s23K?ff`AIIo}Y6+dqPgbcE7>3BK-2Lb-t z)y@PB064^Ujqq`p1QsmrO=zt1gX|1OCR;F8Rn2GnH9ZjZ61jR%^@= zYSK!=0o+Jg(~9~U+Zf*ap2ys0gpqR|iLG}iA(ykr0E3<>(V}RY;0l597bH6fD9_%Z$1jqhR72{!EK?$9>O+Uzim zZU|&+Ms^@#hF!_z7VnmcmW-7qQw>i^Y8NQ9c8ghwH$J9mRazqK`)oD?2SjC!`_4R$vuC#&0C5!Exda!lpRDu}O6M9BtP~LQ@ZCpROnm`6;Pw59oC!0UuTXn*BJBC_w+F` z@8co8lg+@JG;G|;<|`w23lw}NXJ?ahl*B%008Kz=aVb13{4^ku7LpMOOZ4j zecMP}E+EN!fI>kCp{8#D2LWDMg;dADxB;foDFqVX0f2XQ_9%0NWT=W&HALhmyM1jO zS!wyx9p88HtG@S>^Xi+q)$WswEalX65cj!dH;>gKa>d$FYpE&f{<{9S)!8OzrV4mjK_GCVDSgs>^acflLuM=lm`FuI zB@yaWvM?e8t^>lUc)hPlU>GXS$<_F0W_il2&B&fJU}R%0$kO*X@fN?ey(+#Ig;qrg zgCt^GgbEWT#OlyZhMiA$xJI{G6E-^&adgofus~&@0Y9zH4Ds=;Xlo{Q8QX3<##PqE zK&1MtOJ$Ox^cjzc#i?Y`TPPW!ifiOY4@Z+W<_pFX!{oIg73@P3zC?W`n| zi%qM$YR*q>f2#L-z1;vEgVHGPU~hYIc^r)|y@XE)7tk9!)(|~pWlLFfcP{zX+)8HH zq{^6e#o2)dlIhkZh1t`3!ja?ywfxV6>6*oX=)5BTc zBQ4qw?t$y#g4> zWzK9a?mC;KMzgE8+b$>w0x_`cN4v87VoN1gOTCzlxSeFRNy>}1rItRn0i}d4J1D z9*ljpCH;$+n7on`BmoPG#8^1in{*mNUp)F?3k z*j{W&2&yMv&+zg+PGZFpSJMx+INiH7V$8d?YJj2XXn$@oIP7e|ix8~3n3w@&W4Rqi zE{k~sDX3fk0000!0Bq?9GP|uKDCTbM^n(&JNYZ&_w@S9M_xpZ*{=UBSoZhNqW^q}& zQq{<6Syrl2y?>&;QkmL$-5`%ENs|IS0CZ!NSZ`+y7~NVCW>|XM#&OY6J@CT)^4I*B z536$~x7WIQiQ(zJscu&Dn=7hTSM|uBK5iEZuVj8vw;Cw{nmUF|CJ9I(ps^TI%K$h) z{s1PXKLCK)hs*KiX+>m2@5{-|>}lmSRIGBVKv|7k7WC#v6}9i~>p9K=jk~zisg(F(@kqotXK>czopRktR~4&Ai#`S#hdUP+RuR4O&MyHt`&gra?F6e#7YaCnOg zmH-e2u_}?;kJ-X9F*KV5dn5*&7UW&}C zeK+}Px8+=RWgjDBFo)M#o_+yPOSCQvbXf~XC|b32B$FXFSh5w9Emz9V6Af~l9kvN8 zR1J}wILSC^V3xh-vD|x9PP|&Y0JvmKF=|lfeUaQ2N7;auQ5hTA02m;aLmMzg5|3pY z8zD&$p9tda2r#xSBPb=&c8V(eVoRXK2oi*!P*rCPhgL8&E0@o3h>hN5c=l`nTACd~ zF+0+7dRuyZuKhewd|AIoUFhFKXBv;#_;X=&r9EQdJ0$5rGhp44Y=cqw0RI3!%cVj@ zfdH`1ZkZ4O4*=Y=v%#QqsEWmE*cJEQBZ0|NUO#^HPwC(4_VZ4B@xXLcWXZV<%$Rx{&2+`$oNUeFZ9dzn0K_Uj%N5Pd zKqQaj%<)m`F*$jaDrEG8MZ%K*P5tuJR|=5|Np zA)Ba`}-PD#mJP=+$74p%uO1DnxDDvdzg{ zKSsgUfdM|bWGJVsPy+AmyPU25z+%(3mkc^)JExvpHW=pcn8 zRmwF_@*>KR{LTEECQO5B8oR8GG3uz!^E_26xB=TpAPL3*<*C4W&be=O&chzLnp<5K znf+L;2C4+JPHt8egqBaIAQ=aiu#HW09E+&PNjH1Q!3q>EPqz>NVgVqszKGmAYIbs{ zrwQ6BNs9(`H3k|`z+jR<6oFP?%^yXQY&kxT>_O~?vB7{X?m9WT>U5L82o@j=3kaow zd(_mV>nRHX-ipPTr4&H{_G%VF3BgALYwQQBMe@TgS?DrY2P;?Qp^6(()Va;Ouk5de z*ZZTnto-K&waGL4-D_HX$OeG`1C-TPfw;dY3cr(LRPAA5hqC~`aVNL|$FsPMKla^_hCQTox z-{*IqNJ00P99n#noXh|X0iL?0m_`u*7+SZ+P>|`T^q|bX@wkoMduGoeL8_{X1@T@I zp6y1CK0@03dwX=gyzk@@UjOb~QsLtIKW|2pJ=Kmy%R0z+^%nP2>xb3$Zgo7rnw<5q z)g0$JV3J99Kf@ZH$E|H1#_jU#rr8k%;p8+p!AhK|Fe(6?oC$Pv@3!#56m>I;nRtwY zabZy!JfptsbAC70E&IF{jHu>S$_W%TD)LtZ_^DWcNs_F%l}JS(&q|e`D!#r3w=$1} z>9*th9RvvfEkFTwt}BJrDpCB&HflWC1tQvpN^K^~2*8u+`Z@h9Swf)&D})F+T0a(D z&im~l{oPr8s$m)4B~T>nk~xNOr^?9DP;UhRKAJ^H#8G5WVKll0SjNHx0K*5^^@n*| z&+7((osE*ckO8q0idBWMl49j;H;-$bF6@LD1A8~8ak904_L_T4apk4GTfr!~pYOdI z!wa)YHMZvN}OUsvU zm9M62v-p~zsTO`!(8xR5h+2u%6gkbAn0;A9^2OOXuXu$r0 zxVe~XU5D1b+t`D65`x&-OZFrO=Bgp7s(^A#tei*tG#bnvx1=@ikT~J~2Q7AR{76n) zmsDx3K73pr?1z=5jyG6ZK>Y%i4SDWO1Z8@B zHJ|sdA5F#C$V3b*0(D(^y8s#*%0BaUp^Ut)>R?DzB>_2zQB8V?09AOUfM0elb6o!!--#*&$gMv{_TIaztA>Lqx$-2cq|yf$l%3l5`=9}-F+yhJ!pC>eY9h2~>Or+uoe&aq|IaL(nbMzP->ryiU0X^f048a#LuS9L}- zK*jATWwE2F1%;COHn=p)d;hE|=C{8PlvUtq(@jb<#h(aG)@w-f9mdxn<4V(?kQp4I zDbyuZ>Vtp}8U#~FYy3?!QRh1~M%cEAK#@4d=bXU)qli7)4o)e*buV+ZS{aRD8Vmt` zYDH8+`3E*A>`^KK44@O-pwvECxnro9r6+@tNd}WuLsdhCGQh_4;buMmTqZX^eUBfn z*P^8T=~?hyMAPpsR!4J66_)C=`=_}12U#cakk#wltmhdo8!9711BJt?DpW?xjm$l7 zqm|6Okk6VGcvaD--&%YQ`}X$fwtBnFU0hu; zqO#I*?S(O}jBRQfV_MCZNTXEMRVuL@3gkFcjH%&hTw=^kRl#p4Rauz=BuQ@GR0Dyi z(yGP@mns3qur2`G-|lSqvsX5CJ5mRad|1Xs=%1-6dKw~fYor;dVq-AIH}-o!56f=) z-ZYbQ5D7FB0X}*qfQ$!$0j!%?)pF4N1_J}$2T;WLC0da^k=P|;qo>)c5?n&X97NN} z|6XB818=)fpQW?%wW4_@zAU|}*vJ&>a8d7J8SL6`&vHxiaryFaPHpHcb%p@Y2<9zT zJ+9Y4sUOw9I~kFaQ4iIHSpl*e;zM@YG%)l2`^`}ycvKo}o6+H%C&PJAmpO+~b(7(g!Rd^2ceqJ0Ma9j)8pX4WJnS8En4*rg?TFRb=U_K|Kfj z27$a*+>zE$NRIjZ444q#^<)9C0vJ>D6%BCA;_Twq>-nZZFaP#8dux?Xg^Elczw8!N1bIZL}t#K2P3{EJiVmUo*DPG?QKiM&i zI}2sl;6{*4kBF;boOT061s| zIFvg8=Bduj0niH;AcPzk2J*9wN>PzSllbiK4gZeT$JkcBO>_H~yc^uwd6&_N(QS3? z4_MxQ&C4P zid4Zi@xpRH72VSrdzcsd?vpM~sq^KWSG`gU_EdJs0Jfu00N4PQK@Of(rd_4b9@J=d`y-+_%XIB_Vu?Y-kAq-icK>lL%%M2PMd~^1OlIMgq0m z2Ya9pe{jReC^M6+n5%@Oas~0@zT?XKX_J2J^uFWip|zgs)^M>-4a#F}2l-;kI~P}4 z3l@%)zSKGlNid6EYK=n-J4t#D@R}Sgx4t3}kxxR<_XjfJsN6IrAP1Ot$@&Am^c0V$ zoAtj8?XRZG-J?awMO|qd;H81Yi zQ~yP?P?@Y(z9ZrHf3-p&yx(S)!!0I~p9BxvW0 zU5ptdL4|-1vMV@gUiwPCaEK2C!AX9iEpyJ%A&0!nYz@s&8x#Sai48~}(HYah#RW{E zR|E_oZcs4beE>(}iyhmqVQ;)+L?yFlmvhCch8%K7VhCoga)SFjb4&f{k@2voC#_xH zdQN9AuC2UH{mhfyIpgHgEZ!`l@(yIusZM^~lO8{7edP{>` zI}9`v0bZ)bKn4^5#;aS%3WR?YCPu6e(aOe!WAHA$54v}P8CS(v0{a6WtXM^*6(Pk0jaa_wE*=V$I^W z>x?~L=eqOs8X=1Sm5>1F+c~o5!yH=AHS01K_4s^woTKJ6rneBri))6K$S6vB&(~&- zk7h7yxZD|27*UYq>M-BtT$)MxH!}!mw4jWZwflS{1R@raz8GbS4kV*ML`Dip6VA>! z%8sW{f=H0J+z$G+UjLn(9rodhK&D%IQE4|Bx}Y!P7hP5Jo{7z2kj3iZ*wT7bXoBR< zs(V7%S%)9d9lzv|Ib|5#IJ;btWy}ku zF0c)Iu3?tvK6drKu8#W@1w-XJi2x-t5n14{-9#ak#rmEdRCzvol^KZ=lv-;U5|}BX zqH36-a1nF_Bg5?7V?35!XVD%mlc(@>*$|N_%YnA)U8S_CluDjTD)EfyR~497$U@jC zrrQl*knt-5g5W#q`>^A97>PR0up$63h66`2>kb@*5Ds5`NDFH_e>r{Urd>cFK!^uI%V1-W6(JEL)US)%D>`pX-|q;vAGeEu00NL93Oo%xN1&y6Cs02m zKsWudK8+ez-UKh2WoM`t%X~e=?lJrIX4-|Ga(I4Wn|dk;*)ZV{N{|@_0Y3T#zy%r< z3`46{P#q8e7`>5wt%;-GUePm`o`ssdnJmXxRaKDpW6qA&aOZos9d+gFErlnhRIc)} z^uDy#qp6xw75ed-u&tT>xcy-|j1!*ftoJ3VY6IXJdIjRO=br9(7qM8g#zAWm0d!Jb zbfI}xmcitV$jAAS$~od}2JMYbU!`~@JkwokWRN;~2?L6#y(kauc4l+5hV@tFn2L#; zsK#jAmS|;J5y>ZWnGAsg69V7`Kp?=D9eqJBfh}Biu7!R;Z}NGPuHC`vF)cd$0_lcJ zRnTlXAxKu($k>jxo%Q({H^`J48Zz1ZBn*N}^>gn!TCnWC70c88bSC}sSVRH;0DgK! z$fUV}feAXPJYfJnFoFAk1FDLJB^#NUtR`1gmE*mA$hmE{&!Xp7cWwx}U-{x(J2di; zn~BA%-p-Me-os5=IooL3s=@kPi#qRefs(GF!E07CD_L?$?rO~Q`iyhhk^R1>J#3Fi z@L_#*z6@sUsb~O4Dh9O93qA{duyoQFJ$V0CrXn>U!Nh<*0?COS|8W9#i znvtJ^@TT<+k7y>@P0O(|eqwG%Vw~TTunJ)ek`RE97mNXEbhydldaOFd*uC1h4!OU8 zv9BdSlWK!=#EY_Np=;h~(K=NVOvI;K=nYVfHthC`AiLZ9^fF95#%*sh1_3^5<$z16 zf(?vAtsHU*WpF@Yx{=DXqru1?1xQ(ip^8-@T0R*_2lMUG;95gN+4XV!+DPP)kpt;x zZMW~m+d-zkaiS)xc{YZK5&pl2$Ly?$gFhF)hlTgq|pO1S*_F@sJa=H?56DPFE zj3ZbwPq%{iIbd-~wa`>aRHaRpNs?EKQjwI9O6ob?kDBM;->pY=v>?bc4aW4VlsTUs zy__Vc(6nfa7RZD~R%TyX(HL{=D=F6uU@Hh;*aKz|SDjw#dBMk?9oeQvn;BKu7Xg-e z<$(?u04y%A7Dz!L*ueCOh%9%d-piAZTXXFFlfAB@E4%wBQBRz*N=m3=`)_yK=9LaR zzVt`=WcexS@o|yW@wZd8+?+Ui^3Ka(yN^zNs!h?JTsw8Lw|sm#x3LdSIq#QUuXfAY zOeLhIL)5>&SXgQOK<$4RLB@hEJA<@tQdrZg^}h)$3G~w zyV-57hIv@q^)x~&W7+HCET#xSFT!*F6^rM0OkCQrm=AZ8}5GB#^fJi+jQ-hEk|_C(B0b zc4YrBZ;$o0ze~*XT9El5qsa+^0uTY-8#dL1f?#08yep1H1H1sR?+sv=s6;(RHcREI zm~+)9Zq#kBdU{?ae%`L#Jx@qI5)8ZX=ygWS>T_;=Ns!6fttvKOQOa~q3ADa%#Qu0Xwd5J|3$@3oTdWFBZ_#m8%&E{`>aSfRve zgiw!B`KBhNef6Hb8S}rzeU&OH3t!JJhHNMF6^t6z&9$x!(4qBC|6SiFs7MtotD@pc zNkvs{LlCNNWWWf709g%`UsZ)7mserG*8>3vUkYw#^Crtxtg2x#5)Ow-kG+axpn7Td%KO>t^^#f5JEDlrc}Jo*`YMem_&Ozj)kglcCWxFKeSRW zz21wt_5Q7v8lNk9m4k_Wll4EGf>Vr(uR}e?x(8X@H@S57_t6f{@cPA=o8yVNO7Juq zI{oPg=alCgNSPFsEvGtTh7k)CpkYWd&6?-O#Z!09Y@0u-?dhIg3pDn&;$d-HTrl5X ze8`t>8KfoLnZ+^G?0;2@W}iKsN~#M|^M~_U>GgA7y{sn@R8h~$-JfM$Z!*SkSq4Z# zjxKz{1_%%qAg{QyGPK6nG#6}>9LCZ~jFGSr(jqVO)V|uOLqJ%_Alr*DvcO#9O|(X< zH@QbRnqR~8hjuksCB$M`qQR|(Tw6l=2HI*b)v-C z9P`Wa@pe8QzjN18%HNqfGnj6<$Onbl2B}yrsxU#b^*456B?Y7})ux2OC`OC0Y;SWi@o2y?^u1x2E@XU0+WvO8dB!WUC$KS{|+UnM4%H&{0)wqt2c= z?Qg{8f=E(Xrbtz4*wfhP;JyQ ze)Ur6(j9_^iRqbua0=Lw8Dk6voFLdxB|Vb#!=guqbzXA!Mc|A$s@^`VGHdmkPg2W%GqFdpA*qvJ+3>$`X7dCte0 zrqFBpdQ+Ym?*r~)ctzhf0ssKrsN=u74_7gPY$ODdTRp2Vpvz$ZzyPuuIu?gC$N&J~ z2)F6tO)}Y(Bx&KWARw8TjQHlzSS2u61~98ZU|GT|*bh5f;95gUy5uvo(=yyrkouYg zf@O@t7XT&B6^sES3rqip4IBZU>-Et@g)};dT%X0Co)+$?cdxgv`$~x&vOf)})xEE+dOOsWUmVtYvXqOnCC#U6S)b_z#vyd0 zjk&)*7p5SR#Qi*RXuHQe`?koV_Mz9F(>bb2!R3r9$B!ugd9q+-#;iqN@8iESGu~1& zUv!g$!PD~Z+BOcx>Gvm6%4*J$WBf3P?u4W*G0a`V^wY1}3ip~dc3)CRK;FLwQczV* zl9W>KQB|(O^3FZAMW>-Jn%Ap=qzcM|vVI4FDiEkDlb!5CdPboAP84RydoF-{4G>iw zwk;z7gsc}Cpj$m!&rbA$bX#GmQd}_n{rcP90RTf}0q|avDS%RvzdZyK0bV;c$wg=~ zC;+!#UtBCmYXGCGfb{U*ZmdP3i__ADF=%oS!77OfRc@`uv0&6gzcqrbO^!*>mcsVg z`#QdUxpM8($x7dC`u6C>x=f#3ITkPbE$5it4}D!86$K_JK8^=Fz!hD2sS*Z}fk=ty@IFB(=EV+e)6E2^%^mYkM5 zOa8juCbU2R4*~vql}scQX(Y_duUDoWpbwb9J}un~-3w6&6_Z$%RPhPogL`UAtCOjq z65}d)`MLDHCtvi+)u_1hV&&9a$LoA->!o(+&6PR3T@x-vv>c*+tFQO&yMsmyta&;{ zhUhExSI(?JkFB_edbUB7y@M{WEg445Gw=Vd8i&i){dbe}e&R&K=ITLvFUDNl*yH2- z`+K%+6nR&Z!vKxCbBcoa@p8Yysi-7@V+6fQ$Sy{#}opXPB}-?7b4zz zjxnrxf2gEJgxa+9Oy#QpkgxYC3J3unT18j@;s*t|qgH@4G;RR+9v--W{8+E<*@!Ws z3}y+HP*oMn*7nKU>6PDI(Xo%aOW`Wr{ke4?o;CXo&i(Boz3sKVcA4vM-}a?HmGK%m z=Wch$SF4K5Aa>NdL{1HvdHa_O)MAZwJ^pNO216UCr@ZxLYUsm1TRi}vT&Bm@t@qs8 zV@+FKYdIcQ3)^(OHPpwIX~WFiv^pgo2NV$Aj|6?3 zKFFQfX77U&DnUx9YS>bZhQ(Jq)7~(r8q354{Tk(SP3QB~{M%-?hiB)@_twgymlWz( z>%CXZ-I>3i)b|M>yOXNxjYd>M=Gu1;_G5udoF~c}n8wgBGZTK|jM=&omnV#p% z?e{da$^R9vyJ)(K0seqhWcQ}s%rU;0<9vA=8qXdz)_#v=%FXpYr7r$O=nz`X~*txlGVdJ>_bAy!pF85mOc|=pRSJ5bOz%^G`eWTq?RIA%a#h#6CP3~q%zUlNHOlbn#g%=1 zl>yl2+*XsL=9x1FXz%V3_#v^gW_jzUt}2n2p>U!uzJFh{y7zv0&N(X=XM4Nv`Fm<4 zubNR+*lcA$HA^Y(u8Xy6O=t?hwY&Tg$bbNN(4r6v8Ek8M7*4M5a_>EXz&Bv9C7_E= zq>182DqvwS0KDtxQl%E)6G4bLvi(rEB2F5uodc#fw`{vYyqb{m4%FF?>(Sme;PR_$ z{Mp-*9T^M;!||O!$QS{hnq@{tLKF%xq;iEZAo$S(%0WNSPVY>>9Nx{W%`TIOFTCrwfWR0%iHd{vs(#B~2|G5qJI% z0{E=GXddxBHk;52Vd7HOgVXyb= zm~VEDe;DSN0l1nDtypxas`S z+t*i2H+X0Uj%2$GtCd|*MyYgW3wX2}EF&xl#PJOz0}vTuK-EVDB>@d6{vNVo+#ZVQ zY(DO5EAMy>yucFJU;wOQr@GtRtbL0;W;9?Y#D$@nhF+m%;{<-`4Y}U(_O!BCqXJoqu(9`RO%lTb9jj0f?3w z1x%etizFW{Dnua@x?CIkI(O&hNF>!QWD=FtzX-J#<-XgGkq7OeIVKL%PmagyVYLQ+ zi1%IuAQ=GvDM7tQ3SEh=<)mFbS3&_QD=nwqN+-nJBpW(+DC7r!0~rBc%7xMeHBd0I z4DC{A;s^mOSo{J2;5Y2vNA?UPhO2}%R0Xi1kc>2sm(62c%+22FkYV?7GM5CaO6CKd z3-aEoDD{>fJlH+VuWXJcg23gxr3~}(kSkH<;@&&5jRO+08&?(+QR6HtEXHMI+>Zd( zKq_ zC~Y+(uf&9!!X+^U&x|@A(QS_tvdNAye-e?RtkrYGYl8$>mJ!HcxNIM;OS>SH6|VGP z2>@LM04VJ9nDXQaXE!HkGr*9#;RgUO7{I_5vi3>6haxGJy8B=OKx9C;+FUqGX+3rn zr!OTrZN<>38s30>Oik5bHVy$k8m7?2NeY-iYF98HMQC7)&0*V^ShU zmLy9hS;eZVT4`>4hZk+{!MX;aT^&&Wvy>GzV|u^K^~Zj*T|NDz^CgY$y?-C=91ru$ zX!~l`tU8%O4Ty|!?{(yiCg&oGr6BL7y0BzjdEV#ui{I1a?XELC+Vl4Tv(vqSiU#P8 z>o)*N0YfTJZyM^#$6?Mr<{Vc;_I;R~5@@LovSE;=TH~-uu>`bOstA(m`>kN{qSLK|p#%D^4`6fOF#gOg69vr(8KerRVWHJ`xW(4}8Q z$r;b_f$K!(B8wLU13r;mgQiKFRZr8;a12Y1sFut_{ z6Bmgjvt&jxGjqdG6|3G&S|lkA+Er~X2Qg1Pu_{Ypj;AG8gR(qamaEqu-xev#XhK`m&Vc1f-!=o@+tm8plgBjD&3xV7k^dPOyheRwMw%g`L#=$-JDM z1ri=Dq8!(A1u$Ts#H_tUn-Fq*5bT~=9B2l>g{Vmc_|mDo55Gc7%WN1VVrCb3f@w1)@UITa*(wE0swsPVZaa@1OnJ5YEX6lX49%#u4AkW z2MlxQe#J|ZVSdpUTM3Gw<>*tsyXM4}p7C`Z=GGPk=r>43V z(yi&RcgvUTFtU`=J}dw@$0eXTFhi& zc1X?_h?Ib8Aabv5gx>q^8_Cv$BrF+ZHA=UXquX1^a-QRibFY~&uoHa|8(Eeu5K~VN zR%wb(0%C!Tj7CJ$Z|SDNFtio~00;}f3kU$fd6>Z%nkJwoxUj==Q0nm+->YJsDc74-y$+GHcnf4 z0X3zOnHflyFjPZT+uh9FyjS`VjGL`F+q-Ep{V@AER%&dVpYU5nhC zr<2h)Vt&^!yn%WofK19IzvibTX5CvECZ{(ePdoBko1iN`rD5G4#ID{Noy!p&HT4J*8_!Y6mTlglh6!BwI4R zLC6rxvca}QNvZ~!zw6Jw;yZIK1|WPuAixxi-GIjc0DuDu0aobZf!Tqs(ztxXAPWEq zFDS_H!=(y>>te4rU_P3Ef0GR0wcCK(b|^6b3<3Vy6(XfXvY8k`tX7*8fq(%l?h%g0 z?u}AP5+w~)Rjk-0eNt}^|5dy<`ERb2Hl-<2`B6vWB8#PKwBDxh=@n}2WeZX=?Z2*^ z)&6Q#_Q9C9y%*<7cEu$U=t&T9vzCT^o|E;X8six!Ya6s(r6o&e^u(0Aw5Sn4yT}6glas(bczC14bycZ4nFG zfMh$8OUg$UDv~yiWeX$#K*IR3Wyz|9FBzLy87@5B;+TafEIs;sX}}R;g8i55mC!4wqaW zq#y-MkXZZy0EB+B=NFB(jGbd=CS8&UU_+!zC{{&b#6e5DpBSsBKfTm(FwduP{qHjW zoxPphbK2`BhyC}&xhz&aWIdAc)?QM*DElGP`uFj0uTD~c$pTl9m?=RpsQQ-av(~US zqY4{1r_r@VJ-~fammW;si9=<|>!Lo)@hFa!fujx=! zkV@O{+XVnG08HVSa59B;J%MjMQ4}3Gq|Wc8oa0-s&b*Ja6%Hr0o1JmbFmx)7Y1ZZJ zoGX%jF91AWeRo`iLwW^uU%u9gE>@(v(sujl=jwa*OcQdJrmVl#uJL~SFgmI9wlM}8 z3M~L!SpqXPZBt7F_ruD=XcC;Nv=+OGjsEVvs?B3u-Yk@Ql_XOJTs2?pm|WulF91|! zvdm6ro5~~)KvW8x0*pv=bcfyfFjnGJjGDEJjA|{~GpMvznfI}AqOR7Y04)GaUu~JL z!ZtG;9kqvQMuKCt*0`>ngKjy@ruULoF*IhAd+{{h6!zKGOH=&=Gyr^Ojg4^QYqcUHyw7URSg+ib>WNGa*|4OI!1p5GBRi_A8k>XXMc08ATd%EqJnyD*A7Alrg;cBF3 zc01ObtjuGG7`gBgAQeC&GZHF;jA=TlpbbFYcqH598M9j^?r zTc5R!|NElfkJU@PMg%N`fns&l zhmLQl&(w2OC67jli2vOpI{<89#2LEIVWl$t06m7neKEky57OQ=G*uSf7oYyQufEmJ z?}@ZUvJ+%`UEF#}^;y0yt@tYkzBlXS13Lh0WrXS!Ayjq-a^=Y=8q z3?)aW!3nqKYT5mIa zO~)LHafe!d!>rRgzt8U-xpPTou`884b}dyehpkaBi)iL596{uHW?z1rXJWC0l?z}C z)q({rD3*?cT9_0lJf={Pm7T8`X%bt77PspG%X{tPfvmOYjx&pO60ypY2~BAX6`;Y= zAWT#nVpE0!prf>^8RQT;R9tOgqQIg!GG(mvzi2UTa?3Zg-EqY-(|Y{l{u>SbbrR{o zJXO0QbG;@R?vkW;jyqml6TlUM6#f`E!ioVS1m2PFZNKjoTih}-aFImc78g73*;?N5 z^Q5u!>CYpkZOqF0?sr@X2LXNy)|y3tOaOE4*Ej+2GXTstTCg)IGdstIs;Vl@l@cPS!oSdia$Fo-Y^nB&x$4bmaq$?TJ%|K0$kNvN|#vaq_x#_vC7}t<++)prTfWSHM8@B_U*OJMrEVeG3$*c0F!V_7^E* zKL`r~D}YM>;;y!s@g~fHb;SyjzNT>3A72>E(A?I}p*WO1wYlP0n;8~qn7AuZ@y{cB zU&dVDF7vNarnwwG#2vu2Uw;vS4F>`Kx@DAs+aCbdRV{!L!tN9b@E#_POBk^9&WJLx zhH?Un4G9fIS(`$v_BHr-l&P-6!plTr$ytZoz7FKMR@fgH-1BHo4U{lvdT%e6s+J+2 zcFw*P&&?Q3O2;G3TDvwtk6}^UF6L@`wtxuSQ3H^4PgEjC^+$iEwwK1fnB65)1{_Jt zEQpA)CLrfTf|?<6PZbmM!eG({N!cnOhG$)xZpp~gQ%=rxnHJh82cJPd6C zfxsdXkh(~-YsixeSEC4NWpJ`nn*_liV6l(^M;BU`=+JsSHPw{-%q0;G{mZpMEBoLf z5FpDy>|z^J87%<|qEKLPgi{&L3Y1097XTIk{@N9kMt~HsV2#~UCqeMhD8PQu)gCYE}qYAL8j4)-fu+=h$lT;jkR$9aqF-vR-` zmamvqA^r&1fRQcY8w_A%1V!@hZY>}X079pDlYMwC9ry_eEBYQmJ*#IE78H_b%mkSP zd$51MM~*kDv;~SD>FWR1atCqeRn+^{w=gBGw3^xax&3${f7VMzk1Q;M008^|9;=mt zM!*aJ(`;5~3Ge~Hy|FT4XD^v4C$Orjs&>)JFOS#au~)yBBf4z;Raog(?R6IS->#4% zO&pa^ZsF1W!L+Oz({4wdpI=VRInTZ-sMPcglM^P*U{Ck&-U-b8ehw;(ew|^)tjak0DvI%TVzw8cs?bQ;1cZ^j zi+yd+9YSAI!|gC_pjcCbRXmTp%oVEQxo!4quqTsyY9p6ux__<%2m!u|ML?9@k--Mm z)hz`Q)8)?uupjJkMd-usP7gY1Ld>kHysDB=bez@_6YhN*4SgIoaVJa3X{*y=yVDMA zs6O}PwVO`ruoSm4Zo69#KHB@qynR|sd(K;>mNj?3)*>lgeLriGoM7_vkNs%`0AmNN zPzC1$dsvHeS>y3he~zcuvz7N=wvv?VTwZ{o#!NETe!B%+y4Da6EJ_1CAjG=8O-L`< z0|{-&BAUKzfFujN%JSO0cuP~AQ+9@+9}|ijNfCoFT8)qi>^C};qbfhCG6-&xUoAt0 zZq)`KO<1Vrw381KSAlL(O9nT0RDCHCMPda!JaWySG3%$x_baO&zumB$cLNmx-pXZ6 zL=gbsb&HvcD`YZ&`Gy?j&PLCXU9wb8VuMu`L(>(O=9hMB_e1&f# zVl8S)9juAhYo6t#QVmyxnc2oB+MICS9xuB)-qVgYR~Zhekok~av@^Z53<=iaL|SB}G>$>OXR z&ojhJ} zN)-#wSyHrg{>$}FS9Wjwls89+Na(G{`6h86ek&#LSO5b6F9sw)7RDH zF^w`)T7KkeNX{KVwUP=F*O)7*rj%5J`$g94Ss7#Ix=|Sh%Ry#U_b~=0lA%gBX%+H9 z#$W^p-+>gWo=Yl;sGxc#T%nKw3na^6@GS#OA1&NO=mQ3U4d6&Mw6C}x`qkUSY(}AL zTB{U=4DRb%gP*p7D_dx=k!yqj0DFPa2ZMT@SJc4}PR{zJztN6g1Tel0U<4jkUaD>h z0e-55n9WcIfFV_jsU}H227vVjGlh{6ojnc7P&t;FP*pS8=In~uw-_Z`52K;UG>)!} zOdD8NDB}`y!-x6eW%d8^w4<9--FD7P&0oKF)ysr$=tYgH@S@$8VzVl zv&`W-I?UcWyX~vVr>2$L1{FHMG6q0m#r+8@R{%(`2yA9+8fd@&{Qq1Scf2>#I<_-1 zc72jty#e(AzFZ!=Pm%$knsaiwl@ee8Se~7oQ5q??sj8~tFp&gNg|%coJ&%0!Y;efx zYeTDSsYiqEO=pqZ5tmvyt5H-BVo9auy6Dbfx6RZ^U?ei`>RHT;+jNOs%i7hs&n1^J zrHujr6pHRJO2Y{7ff>%Zyk0peLs$lP9F&7lqg_rZV5}`X{DgE7k`QV+WDtq@z9?sx5 zdpm~WI-H)}h54Y0kpiIhJM_l=X}@}|%&L3SGnqA*1{VSTTdu`K zkZb@Azv)(Dz!(5{i<;6fUr3p|XDoX*+2A6USyJUnven+%C;Hz0lxT&)^i|(@PioKi zu-JM;yltocmhPWdj2ciPFvWrvzd9o7We!C^GTCTuqmBSM0C*&9RfDuMW7(7K5)wF|Vykt_ z)JVL4PBhtdF84WoHckGrPW!xM^w;+jmsh#D*!>V6?pP0`YRRK|KUI%SYhNz$_{UX2 zyWC{-;xS5ka^RZjQWgqv*Dpm#q)bLEQI+Yr;D)#>Y1+q>($>j2_%zRlovh6u5l6CYKW(f}9%zU%EtMi^zT z0Lxx)DlS4Gg9eQ51zYXjV>zO<7W*Jowc=nl?%9I1YpCXi9Fo(t-8YZVgYTCdh9{n= z(Nr1v^E3swBfYlo(bUL`tI-^}wBMFQx!;0h zl!=6sRL7m_8Zg<5wXggOWC$rVB3GuXvyz}wsI0vA1gAeD^=oZ!S2JU0yxK#kajPlP zC#T|<&Q6v=B9uFWtK`80X`wz3sZTCg@sxGQ~*O+q#Pj~E`{<%Y1G1ugz z-MwzBAbyIfs5H|676HENjnxEquz_Rmw^zvul_2CAj)*E&hgr4z z)xecRznym7wBz{+7iU{r4^yXCI!x*^Uh}wKvHI357C)NjQ470DURw9Eke@cEZKF@h z6?g`ev5#X6M|-PL^`-9CgP3S7aM-|Pu?!^m>S@!sy}zx;I{Qx&48e)5`tA9NXDy9s?k=l)Xwpk1Ym=( zH|h=6W9&#Q14!5sf?U$u34z3W_%0=CtY=C{(CofUe=elOyqlpG?M3`O0-s~Q*zpv zrkrY1ud=1;le3FmlQL7xOGrfMq>uNy`1-Pq$DfI&5(2(n$$e`su?_o_9 zN#eaem24w>K}I4@lc~3`18fTb0MKJe$avP2*py}sO+L>T410g$L8uct8Pi^{wY=e6#ssT(-@vy_%KMJdCrI z;xD>8m;FLB`VYr{r?ejG$~|he{az%>or6$G6Zn*8%=2~`yVTv%a+jMf56qHHf*4I^ zGej-4CD!32&fDL6o})izR|=m#|7R9b5YF_!Oy}17fTA4AL!nHYq6%DhMCNBk1vG+H z6Di-J$p&ly`xcfgIYPD&wgfdAv`JhA~1_>Zh>njn_d+Qd4Z~^O4%!a-J zSPdX7?bk!ug`qAlK?Y+0MSuyEx;&_kXn9Um?~w09ba&a4EB4AUo!%e{O8qmf0R#b_ z+l|HqH^wl5<*hfy7z5D&jL*(anVEqwSUH4MRaJ3{O-?14Qcvv3+Nw^{9R05<)}KqJ zHo<6xibpB0FGjappDLx*l3psaa>muTT6vtS>CBBsbX1vLRXt;pKCNH@-2Iq&s=KJ1 zJt$y7Evn7L7`vN=AHBCO%0Yk2m+B=2P-w*mXvWXZp$3`Ex8uc}V{q+$%e5vl9;zoX zMa6gdv@*N#U;!!LOiI-WB$A{`pJ)F{$hL_Dh_yYrC5(-TEWk^DLKLW*_YH<`j-;Mm zEGW>C>fCno0D{o55l?jvY63eU#?Z(4+F{>_1=m`sJFPejUu-8aANDzr6tmeC z0p1&qDFqME0CK&$)VLFlfwnZ`dw>{pCf$>$i8s5EFOQ3pJ#b3kI&1ehlQOz7QeI8+;i3!@n(6Au-ogt3Yt;V3&*^96*dMfUx}oF`tA8 zU}XQAW18tJXy`x#tEAf|0Wpk(49I8!z?R8pWA8)=QEBeAiGjl%MM5P>@kK@A&AxM6 zi3?Z&LKl{Onea&fMg|}@Farz$emnL$22IcaX1~&xpaM2vi{z&Z5RtK2g7|=vcS%u+Ubz z0SWXFVWLL%^vkRG&2=qIn;|2ljvH#NXA%xW(dlGSl7;rQs3wfg0P{ZEV z=#3PqCly7gM2=`|Zk4Y_@Ix$@9fqgk*BqK=5&_qPqPrjARw5)^cWr! zVvv?xN>my>3`?ylS0Xg-j%;3rS4Pui3D&nZm}bM$^5@2kLUixV5)g^BjUUIGTB_Fy z2Z!2C!rxDDevjP$48;`VhZBfHDneAvY*C1)IIy zh<5+J^xS#`O z&@^Bai`6Cq{Gb8z1LF!73_44e2JhIxl~Q6kg99-p|KC$x_L zejh6xZlCx|r#qE^;);YkYMOxs#n9Xfq~&p%KCp z#cH}IAz??7`&;|c=fS{0Hgc&(EHme_q1XZ-sjSyAP_r(3)!fc#=j1FDWoP!!Rh@wx zi)kiIx(T#ZxA42Uq?T|k8PJ>qCRBH?YHe1lR25RVz2Gb9On0+X)6JKHpO{#4#Xq1JOhva2av`t*3IQJ5 z^->2C0BGF`9fK4wfyJ{px`ZJMcJ>nWWP=GZR8^I8%t&*6c9-|}6DbQ{`(`dPp4T9? zLH?S=GL4Ss^dW~sQxxTb7vmPU*ZKHZ*XFvW4A8SQT4quJ46z)~3D>vvZ;$qxedZfG zHR=({YoZZ&fF5E@!kp9DarmY<-dy`6wQeLyQnLv>3S)@Q&}{%Zq778c181(Yez#bk2zS&| z)h+0b!PC)nObkW9 zP_5z9caMQtLz})@KgeY%Fc*UjbZ4hZRV9h?B;&myvfX*5Z|S_l{6+;T(Oz}iDh${H z1CLI~;|j*vI3#G3jQ`s1);)o6Ru1a+uB}4Ix$(A}L;vGOUt9lsJbwHHdOY`fMGFDr zszqys-Rd4c)&>dz-fG2~0ltF+{Hs+U4d4zo(9T^QLRvC28eMU%9207&9;CZ>@BRLy z)(=sl+r>0u56pw7hwar@H@B`I`^nUb+rYU~r3!W1T~NttOB?{K7z75a$5NKwr+ex}7zQY&wO9HU8DRm!SbhzE zr$5WKk&yNf-;Exy&5&W#X$BGj9(xr=fb^RL;7iRSs=?#Xn7}u813ODBIw=oyIZ3Lj zRl5G^T|($wx8Cj7qN&u#(expax<*J_`_790ZK*2K*16VG(ba!WFLP=2T*vy}?B_iC zbm3OF^Dt*g1|JOrd#S2f18N|h9bGF-8}Mj3Df(`KpjS!^bV^FKKJG7b>A8Q<%xR4) z8;VZUJw`d#T0QJ*lhYm~T+3in0-qRD7Id;qYTIMyNb_aTvZ|djIUm^57omZWg`(TgM zsxP9am=cZ!<(0$uyzgt%-&P-u_^8mmSCK;dfJ zaM_HwbFKSkDG*C1>KFDdmDlTzae?S>3oxMDNI+z5ugUDR(bYY&0T%(@dZmU1hoAws z)Jjqf!~_#)=QgBpa%rQ{3D#g)LRGcbUOj(p#&)j8&5uJ%g?ut|`id0?Refeh=X1ZE zYY+OTIc8n)NxputY@1fknXWdE8@bhg0Lo<8H8pO!#N;KbI-(Ik%f0)ab;$+RDQLS% zMpJiR?1kygAv$!Zzbxtf4yB%H4l{X5PFM9*dpW z`|X$?JAOZ*sIf&EmXjBG;SJjc1Sm2>n^eS_=?bZ={4gCW7w|X9AcTMwx^v7w)u(GS4YnpgmSi}(0zz3m|-*b zo_?PgJ;Js_H2@X?KAROzgdos>_4EpX1pEeo@3yIB?aY$B5Tn+Ri&eQ2HrF3 zuzr6SUSH>abkTmMnk7{u&eSN}%H)^bE4G|zoX>NNJ^ck^0S1tba0wk-xb#iZ3{TR! zHWc+$7^3E7dX$Et0Ca!CY~OT4`pRX;b#3%XX#)xY9!!qT2QAPr;5@DpfWwV; zZ|T`6Ir^|!t+=UN6~Iti#=)UciW#f2Zyb8)L2#y+iIQ6H(V1^`zl|5t>CJ+L$b?T4 z6#ZX8b2*vF5QDs6rYF79z&Yzui}&`yQ4N#cszK3dv_h`wib^x(yp50TZH#f59*6n? zSOrN>G|(hNE=ldl(aw+8Z;dR<;+*sJwwVWZGiyCgZ~Hj!b%Skcv<~60i%@hy*6~3B0LcfqgqFtG zV@X)kdVf1tVvrF{BxEbZaetsyKQ7LU?KVza9(oQ&eg^kfKL88?K06jdMkxvq0=Hl- zbsVBZP{8O7nX0oHv5B2MvkWo}RaMmlOskWcCpo_~=TdFDbZ-R@Xt;SP; zezVVwYNAxK+9YKW2qFN9V4^EH02EsY08(MBBY(G*&0Zgyc4M{I9IU>ENH#|!=Ln@yK5RU z8gfHX;qV)R39Z{){ZRO?K1w&nnfV z5@@+w6Jcou=mDruV`hCH5@fMJb-YtDPEIluQT-#lFue9q#bmUk>g|RiRP^boZapfjqTYyM67a9C&B29lZIM z+Z?tSA{=|5Ikz*~`rFWGC3Y_WG61Yl*r%eXPsbkKNod7|GAH>pu0efEKS)JI#6L~} z3=RRliiKLlLI5zAVgV2U9{}8kXm>ZkfL;2?K8V6{Rk5nz8K{mqTFl1U)Th>iwAW7? zwt0#MU*GAkhNX5pU?qZlep%+A&VHRA=l3zs*qZT`fx?3)OtXr!q24X#nfqpr;=C|7 z2UAIj8KN@FoV&ndNk;EjV1C`7`pv~ix_X`=CJAgf*m@$@AQpHUr ztEJb|8=0U;nTlopvV0g@cHAN}+8_H#D1o)pp0H>82J z%|ciO?DqP4raGh7*@S#dA~SQEX|%IfiiH3IS?1i!lA*)z zu5I%SyMlbeY+oP+xHBQu}Lv0O=2u2#cHOtZwzJwNsKKMUfw(<)!;aL@PO-ij#3D@Lta z)XUfEmX!5X)7w5xZNDv7Zl;120Fg^7Y!Io1VXIM`v*xiVF(7o9@gFb;|c`in#iM)wiWzUtRt9Uypi+yTv;Bp=qjxM!C%G6r zpa@vr1VBjx$U_*g&Rs>c5TQY{Tu74)xY5e&j`H-734p-5t7adBls1agmpoKTf>e4d zF}eXE0JQ$gqb4*K8vuimB~H>+fePr_Gv4&aQD}H>$!4!NWUX{#az;J@0x(3cH-YjB zs=D61&^M5tyK&_QW$^Y?3l9VcKQ6ZrJj``o&;c+xUDmNWZf>xuk9O zxYStB*Nn4!yV@ryQH0~Epr`AsxaKnI-F~iaz9#of8r2d5XkgIvH1k-AD1iC8$5TUb z7_FTKy{E})(ctIZOnVY%{doKOvAek{V?R6`Cj)?Y7t`~JlRE|s&|&Ww^U?8FUDbj? z#t20wU%n|oH7P3P72Leo+AE$MB%iIzg`|lH}ABsW{Dk^_f6dD!*-WyKQ$4LqUBk1+Uk|HF7 zff0*aCbom!XR)XklB|{BgsLj08*@Gxx1D5DZ+Nh$xM7vcmPJ<7dvLKHOjG)#tJ_Cq zw;f*5dMd5HKK2}!*M-{7)ot(0&(v)-{W0uHnyRKVS26T}sZRZFwYk&VKV+I$^@FQY z@%1D#(1f(yyNkZN%*qYOlkP`3nAQ>KEk%qud-G=0B_r!xs;SYt)+rLeLZJ03&)0cU z;pA-GhkI06s1T`yd{jI5c*0xqT&a*KQjt=UcQjh;=klEtP@#H5y>ZOX6$98HfYk|s zrXfi+!2lrX6@YkDNkX@1;?JQWE8J$p)=aUwAg1xtE-3>K|E|~j(|s_OUq7jDVY)3n ztOg$e{_8Ep1uZZN95?KKT`XB);DEy6mVvEzW{JiiGvov(l~6-9X{8#llw7V2)D6|K zxk^<^wxx2{*2RdE<#KQ!)lU;$-ouo(+F{M;hvHJY9Xe33FF>(MhUW5?_ z$$$_x3r2uA1&M9pr00e%bi-bYYi01dn4Z6ejL7XQk}y35RT-&#$(tw_{s5Jw+pfk=}LUkJoKp z_p1A7=Pjwj?Vo#~+DT=G9svV)jhbq;_Iz8qjGSEVhJ#dnm#PQGjmZvInPIx2${Dvg z|LB@$x9l-Qs~MBz6QY09af*E7R+vU$Ma<9p-mCx!zzBRw2Q-RYdj&8H6otNXM2}jp zd)jw{hKVqYpo@}Ko63RwWz1NdRrnjC`|yP-gDQVM{;mQD0lwSy#RWC6fn~2Z#gs4* z*+DJb1GZi=GcyZw7;?F4sJf2!`MK}XW5ccLwX6859r=aQ65<_M8;;0I8IImym+Kt?3 zE`ne&rB9O$Y2mX9=6}pUk`2Jj3`^TPbH|~vCtFsMUCcqDNt1gjz8085NmDL+4H3uy zU?_^XSS%OERaro&7;H(GqeB~%@6`jVT}?*HT2wa16GI- z1|oZ=-=MfyaHJ(H>-Uxs0f1%8aQ#jw&oSf5QQPT5ba=W$HhnYZ10MnY+LhABg@FMq zTfG{%AQ&`Y{5BCH7^_F-OFMgsddI;y827NNYA9Fc-0M~N_UZPk`~Ja+<8#`0*Ss0B zRS#?7V6v>o>w!o1m?@Y&%rib}XP?yqCi{(18UYl=)LIP5b;hUOojUtrFKUic$K;Y! zW->N&QJ*=4O?9vC_RRcak>0N39J1H3%dm$keBWve?*&8u*R75$Zf}jK(-Th(NSTZp zPHlU8^09uRz0V;IQ?ITQ1={i>S_19<4xy5z9SY!(W zXWt-qPp(bszF-3&Sr|vQ(FPI$-YPc6#E<|$?N{m&A&A5Vcsq?81DWiXc4H~olL$#G z7t5>!fm{ErHN>-9J$|W!yGtc52voHs&k+2 z5ijRBYj&W7*w#HIp>&XUbvhW%G9u$geXn` zaSa0rBy@4Pf0?g1`#elry&Tfdl(ET>c4j&J0|f=xM7W6+_5B@UBMU3CF|Z&L$u_W@ zjQ;$blRij2^`nBo*(w<;N(z8lRTtoC1kjMha7Stu7U04Jh?8bU=@$ePod{_FKmhPq zoY2}akumE1h~Z~hzkg%{=&~_bcO?rxLIMDhaF|wb0{|TXUi&pEMv4G~8Ry+^i9Q5_ z1j5U=IAoAu-)o_JW;@898mdFJ+UJ|~zS^{1=4z{X;VTvTDr)uE4U7E}9Lwvz@}`~~ z`kQc|X~Dz@uOAuuxAWcHkvhwHq3nOd6s7n&w-@fRsK?tF#~E#b1@=rXM7PPV7)DSH z5U-piif*7%^LEwr;90Zar2vLffjQ57OYeNl=1b2>FTE!$I=Pg&(y~ z%&t-ZrJgW$0}cT`D#juP5&&rJN*yDmP=bO(V)+vQ;N+4~Pn?D|R8_eE0%paCEgmH( zF4aUQIoC*C^zSX}VWXSamOkKd1=yTLc2aSO?!TfhQIeQl6XaS-&@}FKlS8*;F**RB zQ_HgEwCKG)(IsB)Hv^rZsTwFxT+_*95@jYZHPGb8^(?K)-4IPnE{f*S=D7-LWahRn zYcrYW`3($Y2Z|9*0Yy$x9qgeKX0kkODm2IN-Wcu*sQ>{e0TNCX54b=#)=9DoD4<7;E+NHwBn-hw`ROZmil`KvZNC7asNx8|4)Owja zdyF2PV9HF&RS8TOV!h(Xx@I@Ms|hq7w+gL_vU;6fF<5eH*`oJq-qq_D+ucc0?B^fp zkI7lDzq~chsDxNSgL3HWu*O$YS31wBw8l0jk;O!m0b9b^MLo-x3ZO%Fp-=T-*W7W> zzar~(NBed*N`@lI81~5_d#~)Tp11R6{I`BPV{c_!k6HCvzawK=5`ry|pK2{k1xU7t0ReJy$x=!IRD3tL?QBG8fP_t?mHVi_BD9QhG1kaYy@7`Rvu2;kkb>I;{h zKCAW7#NtQ*hgxkcE($RLjNfEfdSuG$`?(nlBYVeW$mNDA*A#32J~_{4vT1D&q}_9@ z4-UB*Q=v46X>&QQ<wBGE`zQB+ zwc9EOnc~v;_i9suil>e{i@cAWEl(M?#*$$MoW%AJ7k1TOY#$Kbkc9|;x zIsjy4qLb~;NHcfuJ;vCB;X>?lWRE_t?%p5CkoKzjqplwI>TPYTUv^p->Rp;dbY#4Y zN~*4OpEbG$L;!4OvH-h4M8C{tWo;++10-@OruS%;$dg<(_)F_ut>f<49z#1}jzQ&0@z@kMoYC2yEC<0%5>*Qfr=fm~ok%d65tMtFkRYFpf z1VeJU?jIx~yBH+lXBVh0-NV%rXj8ZecIdnc<>&Qt@f=?D+wkT1pudCw0fO|tGsbWU z0RUIxM>?$t6aii<)<(p@06^~87z3Ce0H!z4Ps>=bc4i-$y{FvJP*y_aRtUjL-lmp0 z{(k+f#NU1Aq#=()we&iv2Yr#3K9>IY_chmU`{V5)r|V+nYL-Gi+um1;ab~~wq2w5Q zx;fK${KXJdm8a^{_dS@ zi>)ZyQJ15xJLT`JTtw#_1C!TsYyD#BH8u_bUh8E>M_~XMYP-}qfDbfa-`HI_GLz0u z25YSZsYygIpz=bLbkDBKv?{gI3Gu`&bs8#37_bg~s{rL4XX1p(sFw3vAOf#UK;_%zBy8 z06zfi8@at~)+LfCvm~QQFo%X>qsp;8sO?uSw@bA@ZI(PY>KL=#HV_0mst>V2KvoCw&I zYBfdZO~V@rBA+$K)wU280^}df&ZYdMc_yFMESi|T&GcycGq++b9iV>Qt?fmfkcq3i^Hj*5idiwSD{K>}K zsVZ)k{E+q5`KxZf|M%&=e5$Lt_s7nCae0`ZzudAPz8te(mosVr(^(S`=AgwV+pz5y zF2gWb95v%+0dkw66{8orD46P;+Cj9Ua>5Xq!Rhu?5J%XByI=}O^iwNYU%k3xiau3_ul^@xn}nLY@c_pD|%*Vr0ocVRv8O07y|FsH&&Mw&1j-=Dky%D3O#*YQs)|Cn9;)5YoP6W! z{ojPWoc{QlC*3=eRDHd^6ApRpfBfV7`stgT9{bBqtsl&n-un8ad>m)zFkkbr2>To` z&GhNmO{x4uCt)-T4eoLhK{Ja7Ca4w}Yp_|1D|aoKWEcy6S*Rgl*Ym<*A7pdb_aY=i zjF15kAS|TItJ-_VfEFwegd$n2RfLcUDEff*&E9m+5^dC3K5;)1Bic)IH5}OA&vk=a zOeC_h2`;pYn^wlod)K~AmZ!(UJ^IL*^gbsGcsC9Ke!4~2LXbzA$1 zxj3b4G5{xN*t!k%p3!e*5KyoAl z*cb_fF|r93sT<=(I{4yLnBLzuY{J3AEqrUumKPOe(I%E6rffB z#-m<<3SOdZm0wyR{}!$>D|@OUcJ3OaQgU_9rF#OZ`bQ^ z(%u)VGxw=W(=7Y#+Bn}k#~Pw&_{%XX0NHQY1qqEt9YOYVW^k|<=}#A@|Nd&-owL}}W!uj+ zG*l;!DvC~~LwYR|YVEAEx?D)&ttrrKdY%Zv;TL(oD(O6L)et{%Zk?~e90p^+Y8eDz z3=u6HXQSyg+NY$P{4vwELRu@l7~hE?u|lhZ%#HcGnoy;suot2gjBldd-HvFB+1da zmK3DDt5v&y^)Ao-Gm-A)56YsI@y>y`9gr6#If(0rLjnQ@~PK2?646{K@Z89 zB3Q4+JRbIb{;^uekqkX)1)S=MoF+|X56RSIhD%o>lB&vy+nxsIvWuand!jKHGehgF z@%=8TN(FLoN&L-9!=DoIj`@ts?HRKmeJxOaI+J0ZoQYyI0Zc(UkQ`o?CkM#rhjsd%xxNbylJ0z zwvAFvBNq3k(S46!R2HB1ZH&YCem?*9SjY6b&%1f1*jYw!(2=JzFSYmfI@fdVbKQ7X z1Oi)*VjDsP;V$)%3R$KqSxN-}FqVzDc3B3%2E)2tL=gf2FkYFiTX)eWyCIkE3`Vj* zUI0gpKpR37^-e{31t7m*u)(O&@;-anV1QVFrOkTZ4j07o3Y(+Do=a#J7-SilU&I3v z0iLRb&?OK6AazTD0pte&>y5}ZJCmjvnPCq@v27t#!Ic%`z^^pi}vbbU}r-%N%*IuaFoi1}{PzFfa@|xB4wyvU$lT_W^TZ8jI?#wUctTx_P_q&pXrX*Dh=-(agk3 zNB3F$4iXVeA&dk7LW(8H7=TD}jJ#s7jNo~4Py9zIM4`X{G7%Pd1wcp!ptZ|)76SlS zR>|vbbX%`nji&q2J3)Jb7S07UJN-2Ss1z^NY|Ny zI;%3Nbs1U6=sgd<)Y)l_X(Q8Uj8>x=dZ1t+&JqF}3jpc1gaJT~BhY0qvTdY9#Pp>a zM;qcQ_mu=vRa8P%c#%*d0P$xIt1nvc8wJV-2$TSiFaiNY0zr|&SW=OWqrkw>6oyoB z+h`{o?AoeW`zPQ#H?sDJ-E6kSWIRP1ODMEJ5t%9#0iK$LRK|;FBw$X>QfffCX#noc z#&af?j80UNAea?nj3vdPpk@B;e=znsd68(+#=igOVAw8~TKag{hw;T-H|J>zH{*Ks z@%HZH9z4{ea)i=aG9z^W8>pOiY$k_BO)dHid!jdH;mQSqN^Qm`z2K}Og;Icdadne{ z47E<_InR-gopMw_Dvs!-fNnG}(a}Gd66-3!FY&t<&O_(2$DtJknoL^jEFFBkH1qD3 zr>9`$c{wU%dojqebZT;~WP`w9xZTZ@U_eF>*p{!qDbMJEsS(y6tJ2cPetIE*%S3<( zkT*1FmVn@+`SxuH3sIZ{jTw6+L#5h(D-`IVfaHW-R;UDHkHe|?A{EFHn}|CHJmT zSK~M{vpsb-0Zq5b9>FN->9mAl)+}$e{-b{E{Hk0rlxWa!e0#^uR<3=W)94 zkMVj{?8lK=YSfrcUT2yGxl;tuB>%XTO`l#S{B)xP=_ zuF`DY0|-D}&)v`8MqK^aay)JW$Wh1!$s9@`A4O8?Jw*T^OCU;B>fit@V_#U<9b~fk zPbBZE&P#jGB@q`tJOU-JrUf<<0lul_fD14f!041qnFsi30H!x|@!~1ttE1-S-r2MF zBtw$Gs;Y(n_;2PtIDfSMl}GY|Rqsu3v0g@cziYgh2bTKrIk(_=n4wi=@o?^%y`Br* zQLVn#pu!KrZJK1KYMxW5?L6HUvy5JBb&7|XYgkyOy9P|%0sv+u6@M!Gx5C%zdi6aw zhCx9@W`b%ZPU3ybLdmx0+}~axm*ZVcGM(*7giLkbN#&|W)sz#Hbox_8^_7%1F9NGD zShA5$P5wE(?3IG3U!jU3wY>rZk1Sgtgr`ao)1HUy?ghmAj(#u#%>0Y9*PWfr&i&+e zDujN0)s<3w+btDL-SC&$Kh->4DF0krk2V7cVPx46zGVOt0Uo-=Km-H;#+_Y`h~y!D z3ImuvFi1~P>~kqCSW0iRClNL=sf4NuAy(=wO&_K!_I1B%%;V5bo%)GsENNQFag6wb z+q`QrE-9xczK}f3(km!STCd)8gJW8x1CnR8peof_|pUq2=>L#>q?uSf!6Y6&%! zil{pT=V~Nq^*b>E<`ps)vW*e86oq(Yxa$3>qAG<_$S25lcXt0&4GF202wY!*sz@r_ zLH1&?0W{bGR1L6700?c35kez(x4yx`rq?#JYnN@k&Nc;mhhHud@RFmue4%uPm`2S8 z5dq%GB}vmXjMTwWX1Uo_K$@!~g#rw3(8FGNjMM3HK`rS?mquEvgc6ug6;kNg`a>wM z?zrshu5bS6f;pNDlw9p$Wb&-HUf29EIpQa6)%;fH!KgX+sP!27bG|U%*=O%6b2fD` z$u3uTyy)u%cy~`hH)OTVdP8byYn;&u=*oPeJW(LHYl5i+NJ9?07Y@b{HRqW3&Fnkh zUu>&x&RJau2~cJ7mCIP)sA$uHUKJi4rh0fTM(0f(=XmybOcot&}l^mjAP1AFgf zYWE_$jt6q%O1e;#s`t zgF(6g0%1jR7WxyW(ssU80eV0|pvfj3NjNBlDiFB)M~j}=yO9q1nYp|jrnY#h^zYG* zUtgON9Etcf0Du9g;mvm#Cro&+{#F zdajS1j?q$10NzyQ`tB8FU-YV4ANeK$Vp9~PYfOWdbER!SRZ~5F)HvsLJ8M0eP;_~! zi*^{+EP2$KyKlB{V|lAkEx%E);~K~l6aB^WO>V=Wt8iFl8k(Hyi4dp~`TAUOZB}~? z1^^o^{D(pB+`GoxgWaY-_Y&Ivr8T$XMBELB+^7NoLU;jSdk&`@5sKB?48|QZ)fIQi z$N<--U7>d~6=JJg*SsE4>{h!61ag*P-qHXP0sflRQp6DkfKloeGY`(oBmw&k!Bl(M z+Pm4=M<0cgRk>JIg;=L_DC37@&tDO3(JEg(@z|%@q?R@BZ=SR?-#GHjQ{<6N)07uu z^~_6}`H+Xjd45GiE6y7hvqA$-abL_0jn}!z zsE7J;ulwHfWBtCv4EF1|DWmoaxQ7wzv6y=80Um0FkTnYF zH-Pz6%cur;m;mmLb~o(ISRcgz=BlcOLcYCSviw_K$J~wmgsENSkyVVaRlBo17*djl zX)R{!vysym>xx?g+vjDB`e**}p*5D{p-#4)yTeTPir|R^G<5fl*kRV0ugKwJc9hMX zEob-4uBb_8Wiwef2`TEE1~qzk^jI&kHt^CneKQi&2$@5I$`PIGjv669wh`|?<9 z8XM3nvne(LJ4;t)-a_v=1dd76qhXW7&j~B%K)F-V=9(*u^gF&oYcMq;VQ2xC{D6>} zMZVs-mkkgBK54ahU8-Qqrh()%iiN;LfgAwy{9Xh*OJ=4Ws}hE)&fQP-`-8V-cecsaYiZ9m_1;M zE#5O<@)}0-7G!A?S$od@ySG!*AD1~NFm&~`HB2?rPbu@_T0zz8xLSZs#e&7HQa7ds zYKq>WQxmn|U$lfe&2A(5_{msmF~k(r>NP6m%DN8HnXF$fdKN)NQ3lB%90fL!!-J5m z^sIVz`SZuLe6~CtNm`F}@@Q;u@qo>H;9c&B`8XqN133J0Sewi{R- zwNV`icN{~l4yoZTi^W_HdpOfRBeM*!$m@c~sTVqmLZ{jcEWst#4{Pt(i9n7m8L+jO z>)DbK+*ZVO0S4g!BfcRq)~4v<8lmaGWCf}nn~J5-rODYe798x77R#B$yoG&*$=)fW z&>Cw-qxYfD@yBGxJWMRy{!knE0G=y0E(X~E(70>Xz6Kj$G{7zTU`IVOqRIwXRaKRm zqs1XL$39yPsRq6d27|V$Ya?r$?MTe7?VoFXSH92f(LA{6^`z5L_tKm3oknjp!|=B&wn+ zTC2;3ECX3kdC zCmX13_U(VV0U7~*d~S0KTA)ct)QAqBON~J|m?j1|KiU8zlU+*5(s_(o!w^zQHA?8W zNn?t}%)T|$ldFxVe(2VdAE!3_e!q5iXMp%NEsd94t8Mj?Q{l2c^K0kW$wQpZ=e6!_jH@E{mPRV@}_-?WCVe+ zZ9g_+WMQ+BU%4@mmQ3IS+s0fH@c0ZCr|qP(cXs3$_GJtJ-~b8;fJF!ZTnI3*K1`o) zAy6I@ueDr~NfOl{9mRRB@9>4*EwfSOQdHoce%+!O(R3wAyQ5;UM;x9qD9Hb5~z zyEh>0Oh(T>N&u^>s;Sev#?trlwi(8|4$~1=N-g%f^4EJWm$ALQJSWe0oY+3t>OtGn z(|6%w{dIc#bQvSw_Dwu^YM?l#rT}*xWkwdLISoy)OlE^z_4l1oy$jCWC)GYMPSe}$ z=QetsIm%(+CP->`?t_1W}IEtYc*39Pupyc2UOZKTh78?*=) z0iN5{u>=YXpkeoG3Jy4+SxAR(3!A${v4zfNaIZE)m8-hRIIpct_v6*v^j>G~F3<9Aq5C8>L zA5|UGvx~Rc>-r6guceBD_6$q{00veBpt)`^tcneZ$!_G~g(+zleXL;2m?URxr7y;hv^|40UpfG`k-ft`{!VnE6Ot(y=QIfJpOAT2Z ziX^QVE0#uYsbWR~*&JpG>XC9>5lO!9KOtH|0mW*&~GcfP%5 zLF2o=)O_CFZrj`g?JKboJ=>pVn1#wUpKA0rvQc5vEScPURwIuO^WEhE3{4HR>Ps|_ zgd)Yn+%>B$5MW8cs_?sR5oli`!pdh?U5`)`@9JB+4FCdQgcYXRRtGWx6t<)5H!CXS z=cTGbP%QA7PQ!mdl{8G?~S4k3`s+vCQ5qM5$Z}9%8wcy1I?YOSpNux^G6eKN(GUQTf`g9TjWI z%k?;QVnv%CF7?{r>ZM(?W5#E-Kd>L>t-RR^tM4~=6=fePff*tPnPWBMqWfZCHv_q_ zynvrhXlorB03a8hy56;D?HpKp2YY(sCP6sSTc07fhofXP$?xZ!5lqdL$+-?Nb@ueO zdiL3m(%k=!ImrOcfv>636jh}BGeBb17!0u5GA@)7{(fw62lH480f&|yut*>okZ*uc z)R#)3>dTj)00P4PCV-7`5!VHOqhvIP9Mec+5g3dC3_vSfwO{~*LM{Pzk{xF=4#91L zl?Wz&`@sN%5?#aBOCc{N0389|>n$+`TND5dxnNgekP3=sKr*@qtX&3UXOT>1t`c&t z>hsp6wV1hX=UbORhyV&Ki_7#?_}8H=l0GU#<%$?m+Cuye*3@}oAG|~ zjn*>Ft*Gy@f6Z~La~pf?v(t>g_?;Q(x`3fB)e8J@59wl8dOp6)hjE_|F2?PAuXsE9 zd^4@urgI#ql03DN03Zp3K8|n*=*t+u@P<`E06YQ!>)Fx*Gi?`-W)h;#s&>`~T|L6E z2pDEV6AzNH06??Q(m5hlTclMTtQxetg?ijT*VJ5vLXb&xn45-fCvX`75&>Qt)~+T@ z0RXXIp=sO_7z(8FBcKfio6gcl!~-3NRxB6Gxvm|vb6?+#LW#l)jyczN6X)U!VOsir z7Bl@|j}7W!E!ggdkKfvxQ#I#)mSdl9YS+H)?Un7sAr}R@kLve%bOA9B3d!0bsyJ zP`A2+M_P8^yaP(9*revxg6lWcK#11jic&{73=p=;Fp24KV`*~`!8Oua)@FW5!`I!M zkqnm@Q3!bh7yfXZ5~JaHD{Y&{~T}q#n^kM zDA|nrhJmQ6ZlmVOW5e@3bw&|A^)}JrG{bgsS=CYQJ39v&N_hYjNWL1(ZLkpnBmEE< zuu&l@k6)|o$7wx67zOYeKn!sSZ!I|>%xAy=R@eZQ#^9HCqmh^OABX{o0WYTI=2O9T zIOiR19IaNB7C=%^`C4Q#L#a-0OE#JT@o@r&gbx=1p8G96M)PE%fQDMI@iZg>Qvvnf zfVDH$b~^bWaOJ9%)r>nYk{oreTk?*3v{aSHPmFjwQJ->_WAs2>oA@nFDk#or1qriqJQNQ3_g`=yj<05)LeT!&#|<9smgg24ZBmKmY(9 z0bZN+$;B9F09eLqwWJW~1yW;lpABd$CWBoVxs*&eGaJk$RkgZ<{mpT4#+SK)cA*<@ z3=eMSXA;74NUpZ&>crLHPOe|{r5(v$FYVFdqvyRGyCdVIWvW@?T!xr=?zN4FH6emX0pGK`OMcg^3WZ9tICt=^#MjM9i{E8bQYXt?S;qowp>v+sm5)e zd2MKG-Cs2JFy!m9RFf)gXD~A^-w^X@j~SFLw;@xc*2(FFwE6ot1MsG=c&PO&YZrZr z2fxd$lL89rbk+3LW+G;@%ri0j%wHQ>?-IGY3mRN0(lgAJ=TZ+mHw=*as`+6R+> z0HWHhi7-H5NGPP^XTXpGmMo*>QriHQt31RUn>HoPF zK9{`}YD4;_>=-Yce%+h|cLFTUb;rGUt?J2?G8D>cL35Sj)f|m49-K_qK+}uV>Trg) z`{K;u4CjaUoNZ!UzPuVdzNW<}`Zv>=JqVnO!}$nvyU+7bBhoW`tKLeqOHWttA{hum znt+ze;+3iNxT*&LQ0J}cTcsLF#11NjgydIB-sEjS7`>D%F@R6$|CQ8JDiXEh28P!X z9kkzXP0bGeI4!Xr1vX@~ron9X>3SJ=0E*z61b@Ml@V?E8+l|0xKB$ z)^6u9)CQnHoRc&I7y&Nf;?10|un|9+I?6j#>5^Ye}wzayiyNAA)Oa zXYFoWmZQIZ#qWMk#kTd@N5h}T!Q*$Q-?WwFT9*3D*Vl&Eo zn~J)iU?gvkuWugLR~ga(WG|?IJ@N-~6rTg%x-SZTt*-Lzb#y;bT(c znC!i8k2O+x?mya_ey^2-2BhkuHBkHKX@G8`GEi&gnJ2|Kdq11UxD`%3lOsjT+^%b% zHWslS&IdBcjFxUIya7jY2+YZKD5;P!7FTfXo z5)%QQI;Fq|;{=5N@O~GIPl&o2-Un<%F122cNuupvf$i+A|+J zlgm+7#+(eD{B6^O`rLiKwEds+<;QjBr5~5lYpPRYF?R1daqg7nv2qGp8oEiL;DroB zt=UbP<4S6(GG4vK&e#UJsObN;03cJPc7Exz0;2uidu|9=cM7%Ttw~jzW?;v$dEqD_ z3pn>3!W0Qp({W`yS&+`IuTbUS3-=PO7TB_I2w-evSS>Ep&*vgZrL?pAZqX9RcSZOa zF%nt6Ornir1da4$%eMhQU`0a?RX`*U*f+T~#-m=|Hpd{@827v(+ zMv;#1A{a#a%{l_0>MYcA1ppNRJ}M!C0Ei5L zjafkg0ECcaBf}+&c(CTT-`fCyLB2s=MH+}300bBSHdc6nzy={9eXr2A>lE|ta0ZWJ z3})l6e|kRL*4B-mlkz*6L-PUN`V{4@`JAKVBxnn!#GJR;1`7dRIt9=tP#Os%IJF`w zp!mVe4bu1Q%%$hTnVD6!sv1sD19rt<|;u zmKGjU8RH_vM}lpGdzC~OONxv4{R zIEg|IYG!eJsFkkR5S;QW5`X|Z5B}8fKl69+c2cvzI9cFvoa&`Rj77h;qJ{m>T zM@VG=7*?xLOHln$q}nW`_GT!6A7Q*l%-e)eeq=*+nYoCK02rEtp4-Je z=vMZHJnQ+~6&#bEaQ=}JhQsI3HQc($Y#^9eQ*8h;mTn19>F{U(**EuqdrHRYA_-jU zy&J-@8z}+{0baY+J_QQED(Bm+k2uB%V1Ra(UP@+$omqoYt!lLgN3^Oi-t%agA1OJR z*azEZefRlJ^7=zkmGA7$XK5qnptg=ABlESgR9ziKG|gF>ahKI(>{^fU(C@pWAj=iE zTOoZyPh7r>Or+k!sN4Cx&)dhYF<|EZ5l~RH@vv{HXY>2aroX-)I}>PHT~oTE9E!=M z?D0SiEbnBp65R z_+Wv{I0^%-l?89Cj1(LIb-SIYJaGkg-#iR4AA5D3;{LtN#QE#fYfcWefwMweURJ7O zpmL1o!K4&B|697k##9h5P9HFSa5egwIA@emt(;?Z^5Y3}&ArqbvkQ_ym zZS79SoiQ#421oRayOC($fdE^|`%DHU0UjH6r6x;_08k@xTlQ54nScq}$Km`S8_XXg ze4GnLDW&JAC4&uBYgL)!!_2;IKkFabxqNF*zWvDmnsM!Y@$>1a z*Id|p(O-YfY12mwGV0sc8MT#Z&bwc4i#?j=F8z~c-07y+i^r4yt-jgLNl~+A77R9J z-@iYOJ@Vz@(K+uA-(1e?+<|e!rH=$g+=H!bx$~6xHt=P_+28%moI?&&G{+`0*OpBNBs`WQ9hRj zM}c$URskFV{`zIUM=4ZLA7Z<#=(swVhEt`Gj2{!I9SC6eLNhWuk=Rf*R8@Dtv@h+i zlz4zYZ)0|)C+=K9CE;QWi+>Sa|SHooZzdauKG`>G% zB7>j1hM{YE^K}fM6MrufhHe%+vwUX89Prj^?QK#_$IYfIHBV+4w(*2VH(heFll^ezzI z`ojzl0sgwxE(Xy6&``@Yl?7p78b+iOpH!rf46jfRutd2pH-KJ3cxtGsYSXNKMYH^s zqiNxEH(mF;UFyCUqqiS+NwcV)<%|R}q(^IOs{SUWMbd|A^@wFEXmS%PUnsM)qcxps zK=7WGAB8It5PY#X5@fYzy6f#m0KojT^kjqVMKi~EuCYJM{fs^S{};D$H^z2OepoyA zmV3Ng#yyUg1ar8Dv=k z*+9f93jtSBpUM8*k4TrZbt5bzFc5Ge0O6j85$bf}`!SH*LnAGm@n>mK>1R4$E6!w{ zobY?E%e)r)xI@9{CP-EQ3jsdsH8BNQ0MIxqc2NfzfC1XQfo1pXJ+l^0sH&=Q?-RWY z_LnG+_ft{1_VrZp!JhYYi4~`G@_2MvxH?*2M8dBk6&9D5H(S>FzCOA!*G^c}-D14y ztLimricDpWJFaLim1aUyRc&x{a-KX}UkN~dGxxx($-Kq8GgfZszWsea+h-=l=_JXX z{W8>CRj9Mo%X~INKlhWJOqf(xejO$|g63;ts-~LieDo&cu*fs2l%#T+G;EBuzy(NM zDn%k+UI=yEi?6nDt+KNyPz+!I+qhYwN$H!+do2@7uD6S*>`4_>B7W-hSxMAa+BOBjnYMT-GzbA640fWXX>kCYgUL>oG?5$<7C0j_qmc>k z0UktERh5z$QjJ6tE<;1pRIeB%CK9)f#>b~B#Z)zL-O80$4?mAHJw7fLi}m{2ipIIp z?=1V{a;Z$wr&`?y0xeW*vMIZ&qi)K@6=WP6$jT-u3MokJ5lcgn4b+f&fs54GL-#ca zi7?a?G}ElHIaNcm+>_Icx?EjdN^ZkxYuB~VQJR^!9nZLw;CMC4ZiSWsBXnVa1!Du) z-Pn%`Y^)%VUW9h@&q$S|kAy&GwZRf#;A^COOQNDE1aH8@kI(291`uFy?C>{yV}ofl zV+5{h<6Qe28mMhv%af2xVz8A>HCJ(6%vPYPE+7B{0X|%gsRSATngo}Pk3lpjK;s*T z+RPBKjGjGvB*DzgtSVPUt;b@*(0fm-UmR01cIow|We04>FFrH94fS#PR4;v8|CFAy z9qYZT?AKY0^Q*32PhM3rr%iTDW;^pHwb)rbo}PiwusqguJqvU<@)!OCRMW()8 z4yQ1@x{uNS^f<=z+3O$AH?3FU8P}Y;&Rlmi{RfsERc+J$5_@di1o^nYgJ+G%B4m zsi;F=N8SygVfiMoiH4d3#(O0^OdcB@#US>xN_}wjP_8+&3+Rv zaB#-aY+9`!V`;Rt(yarg|vMjwndibcSE;Iyy9O*=i&3eKj5FQv^gf zWMC@muE5^g-A1z856*qYDl&md459PLFIaWsOy^AT?`*=D>*rfOlV$~^uNejbzRCqq zgbXra7_gpp5tI>`SODNb?9#Lb>`}5u$p(T$RaNBy$PJ@oA8fQPPx-0mcUM2k`e2kB z&Pt`-UC@tegR9HSAPm?_tCfe@m#gGvzSjJ#|9qlUInFTV*k{hUc3YoaXZc0OfV8wy zqk%oY&dybntQ``rEU6LTXp*7aT}`&;^PbgiXk1h-*$a&$#ZkG~eSjgJGhwD_WhLzUqax+b0eQz1b20 zUfY$10p=%lD9VnLJ=+yR#uEa-bYpX3cQ4uL!~^40#Z|=wBll&hmgv*Q8+wP+_aC|P zJxf7_sl}YP?Q<>Py8K}zS8rWLSUn!Al+oX(ZSow`+jwZkW5yo)X}p!oJToyxCPeuL zZCVyRooFq&KNx-I%z}>H-5r3D-)iz#`nwFmAmWX%u7g9o|USu85|=p z(OGja6?(y;k>yN~7NH@%839aaum**Z<8dfV;`mjf(i{3kDy1T-eNG8VlqCPZ@8M)I z@J1XYGME_4*!F7M1^{5+v|#lk>|(MJHV}@Gqhz)K^bsKVa_J^X6p--;CDPd2gtq&B zoWt$o?we+&8fF0o;s+1`p4tVNlGOa5D3IpVEd~;>Kgb!v`xZ)lPR8h@2M&o4j)B_5 zR^v${>#6*oR<-7_;+>BvrHXz_tt^5MR4DVzsl_IH2I-q57xJfddU`siu>H zA~+z4R~-pTbSXetdO7)2s=BFA01;1nJ-`tF4gns!rH%pe15Gj@ool&TvbaPVBm+|U z!HD)$_kv|GN@nksw5l55%CQn54NZylY9RJ){@!5Z{gr*Q^9Ow+-FHp)qm>R0P9Ga+ zNsp6KhFjBfse|f!EA;0Pt7mT*b8^n(d|P>*RO2qFjTikF)^Yjna;MK|sB|U5`OJOJ z{c&LnOkL{pSjxKcq; zioz1ul5Di3s*T0kKHk56G1XMijUu2!Ol+69Jy8g@8esheAu#?JVRbBKF8Xw}W`{^VWYj|PFd_6R_uIx9p zU2ig*I!i`_`7Gw-wR4$RlX_}Tn>p0@*l%ZNk<8kz-N!frNHtYtSxf9R4h6sNIN(HJyB9SVrR{4(?j%QrDyK|?;NPsN?tm~4uG^2(hl9E&{ z7Xt<%3}iJ#_`MGR>dYYqAY_mML~&h}5CZtB9u)`^1S3j;qn=KT+YSSu=ijRoWKX_M zuDs6d02Bcpn`KNw41|2ySwLCg-q_62E`{#d14$T?$f_8UW2lHO zCnnELjm&w+=B_(1UqxBLZijDZB6|s?Y8<@-A{X0Ei>QdR?_5- z-1BmZ6LXI7G2Jto+Kls`k%f8~VZ5F>KV4mZOS?5APbG6THQnH_aDp<;yR!Fw``Aof zyhs+ZQ6ri=8TNs=Dve%OVpf_GSzoul%kIyI?uv4Za$+bi1n?tO16j8+h00ynmV?`B(sJ9LP6o7yu7a-kADZjSk=Spy4(>)b& z>;TF@HNUIqKeNPx02tRP?qlyRM3B0|KsSa176IP6rA$DRFS92W)s9nJ>($bw0RdpT zu{jeXX~t3(vMVQrw8?5kQt|n$xn@`-YMy z`0@18$9k~8FLtw-PxGuU9{SORvZCr`h5;z0CROVaMYoQ*evV226)<~RQ5Zyn`b}=l zr2bAR<8v~-J=fpacfsA!Lat%DswOpb=0djEgNnS0tg#=)myJ2kVw*^`YNxhN8fW!L zz+DilX(JCOzA8YH#cH)WmXgvI0t#0dAzM(Yt8_J%iunD=3;YQf`27t-k56gq_ohM# zw>k&}G7Pkz#_Bin%3C-XLMI78B?JLEnbk}Kfo_Bxk84LoGj0x5r)fK>Q~(2ckNIWE7@RK-`G zdg`wDmcILXQ$pQ8?X;JUCm%E`tJmxMJm#gh)yGBOoco-rm#8^vQcHGuq;R}GuWz+j zoZFkcrqtRxOo2PM9$q}dqRg2JvhHuURsF?yWXxy%kB3~$iI}erRt!#>O5Bu|8K6=? z!b;(RSWxNDYF{$eWz^OEV#XQo`{VdHqeMSKxY(@z8<{q=>X@ugU3#gKJS-DcktC|9 zsIHpPDga0TNKYki-~s>uAW=V7tcD6~;06F{-fSP|Qqp$r3@cYv07L+yw`uX}32el1 z1pq<2bcxM)VHZI>H!kVW($yMhR4+ zN(xnjm0%L_eEBd?j?Q%GqTO%KJmEl&nZ2!jO$*9%telP^}Al1$`rmt`^ zNr=^YkW=^5PXZp_*#Hgg_;PT1CPaY{Eu@y{COq6lL?3#n_yFLkKIm`FaUW3Jerx;t z%~_kxm&~UJrY352=g5(4Hr=h72pRqE!l^wU$~G%-R%OshFXTjwk?Lnv#t{978G)pT zMXGsGx>9@wVIDsf4#7r9fgB0EN+bnOsmjo}yg3$nUC0=kl-HMo0^87N4KgSNRcbYI z4uBw=;Wps{0x&=z4a!|eGdB-3@*js4T4lcp0AdXRfVSU50S^J*nN<~uZSr9z#f0RQ zZb`yH;|G9!gO2{)vqU{dCz*wzsvL)0f=>suVNcxMn}(-%&Q398ahblyvVz)vGWyG{ zp2`|_J6yiMAxF>7VVAs|$Mu|$tq%?X ze!2xnW2SwXBngSswsJA{nGyn6m>zJ71nd#ZQaWoPB#~84s)%=o_GQ~9r^j2y?Sj*( zvAd3CEv;(C-_&OFRExW!67(I;S{hv|^PV*0{BmtwZrSI&&EDFEbBfq=j5F$S@!x$| zxZBB6O+psX<_VFfKCDQsnVLHrph?89x}&-h3JvQDqOD>KeIEM#%Jz19${f% zUycE6gn@H+y~=Di3nBQ~7Jv+y46sRpN=VhSeFSEJg6UHiX>8zdJ}oHF_O1dpx2cDa z&0xfl;806p5k%7jKh@h5qzQK3d>)FyhQ)a@VHsz#> zFRxd7KL?Em&tGjFKhG;xU190=ip|zxbC6FTt@QE2N8V23$K~v+&b|LC?7M>s@9T+f zNcF`oFV3=SKxNI)c@-z#A15-;W?}=S)_a(*te;M5EPG|W1|m4DzV4y2m_I*k4`c4h z<*k`=V-Sz00J3*n%x0&R)M$Yk+(4>s)j~3p%Ay80J<{ZY$NMF{GJIdSXQIg#fC0(q zmaVLSu*`~WLNNJpQ#k`5Ft)8_wUMBJj6lH7SrL<3J1yi;5G5igN=iM8)f#{h0h^{C z)q?5bT2X`oO|x1lNjPL4e7C~}F?#+$eg)4oTeDY0nr7-RLUi&2J{eac+XP40z^<%XN zX{mMFF)O?{+0WYv-u#_G|4)uZ8#-N;<$acZf6#T zGZzm->s}9YEIfICx-cIu_g%+GUN9E`Z++V^W`Nl_?Padc+ZaafyXJO|I`i_|CF^lN zPyM}!8<_Fz5pD8H>ov`8)4h}9rBbD&o>MpmKwxBK5VpTxAXWfCfbb%=XjlA%09AhT z0`)`A>vJHAOchyFd!C57+Z)dO09+hkkCF^ z?=vGs0HEI*0bZJgOoL`0pg^)qwGgt1#59uP1W2V1x~*Ms8lv9`>@pag?!+LRVy#MI zE|4oQj*B(BICD-M`Zk(N>XR|8lpp)F%BG#N>($E-xurM&)Cm%I4*9BvB%f- zIoOCsxp6~ESx*q7D%NJ2b-Gd{t!jARtLw`CvKQwhRIkigfMI2{9|1sE$iPZb#fKmT zMC!|9RbuqVgk*$_>{oM2B6rY;5CF&sU#&H?YdeF4((r>r8Z;r&tVVD8L`tYeYi@@e zCV_sKPdUps5NH7D`BEU7}LZarzoTq^dud+hVL7k7`C#+gHFiW&*U%!{y;}R%JSXB{*lEkMEcBcG=&Koy`Dq z(-@$~ysh`X{q>k$&i9Aad6dOpGue9|zueZHKxYjj*VmuY@kXvtn6zmYV7A>Uu_jT{ z@+wdrWtC?x`Y7c?1zE3Ly-$)vkmsl}03fh*<3rTPvWisIP)wFf?MF1)D@8E30RR9D zcohHu4!6OlAVAj3ry@mEsYbukG(%Qh*(<8DohuIl065qc8Ux^@NzFCE+co@vHn~<( z01%)r8Udb(RS5^!57Cs=CrvxA9FV~vAV4aA(7ov6sr}&G9uxHTkH=SOSQJg`rKEP?+wQBKh~$t1s+`%`8#XGcK-BZvydCvWr|q!4 zJfs2W=O|GiuH_2QoHKkv2Ye_IV1z4AA(b9S}6_P1bOF~n+5q-)i z^GSq~(ajcR*rjCV$PoxFs+g2lpq1NA>#OyRX%bR@_t2%wD=Q_xKQ;2^$bFBd9nPos zsVQN)oyj`u?=yG$4`Z42%>m^k3g+gx8%BY*&ps_rI+!E;LII;a#zUP^>-_QcwWh)+ zRu=+bdY+x@Fe%`b{-zi zf+NP-xr)h`B`kww8^G9rW!92Zt*TTaR25ZK`A1Y`HXR=%RHcxQ#>gODvSj%dQ{Vhy zDT=Px007vk^i~xBp(HC=3>z0psrZkK{-L;h9tP|9c@+@oxAJ*_QngwD(O4e#I3p?n zG*}zCmaMjI0)PSx0sfgKfdR}9NRXJK>X=bVqpQzNGG!qR(RvI{3A zRgP6T@Pl4^?%pmPd+)gUrN~%GI2Uh}xH6g=I5slx{Z^HvlyjtXYJFNNtEDsLoYhC! zHSCK4MIkM4^7+i3?~m(CPB|u|F#RTVWwYBDXJ3@;aQ5|7LVsW=WQCVw0oeMu35clmJ4zfM(ttJy-;L~CHclz zv7C8SR4D1DNL8>;ipE6x53qa(0Mg8X;YoIDK#L8~0-IXgv2mKw)?@mamVllwx6RIs zR*R7O9hgImUs;SelWFWN@ht#60UrTgiiOaDNIwG-Bx`6E0T~Q~tQZK%6Z3YVH=CX! z*kfd8bRO$U=u{GG{o|0_AFJ+%{oO#H772fO(#V0;H@^OUw6^AA*tJLQ8DB;;NU3$% zXFh)1Ui($-oU=W=wD&PCWC-@)zU$~T7rOf#7wQ;{eMbJC?Rf0nW2iD;+b{s#XADVP z^#DZu7k{0z>*0*-;vV&_e6VZCiTkxO_2WX+Sj|47!MH8@@!saDMn>~CfUGLh&&t#i zS2dEffpkOwT8)eZ0%44KVS%WiN}hrwEPp}(q&=o_%Y}6%0(}q2#WnTN3yO~ zK`G1)BmrPquNlNw(EWf@6Z~~I1EAKq%G?7@Uv?}PWiZ8f46(^wkRw&Aw4H7WfEyJ7 z-ij5%MJ*vBD3KIKu_THKqYU6Aj2^bAQ;z_4$y^wN99&7EkYiN{L(LA?mjB7^DllxZ9eciY}OrO4c+Y|M*d}2gB!^YekslRT< zm;Y^Jjb>%Q1v#{;E>6eCR0=)|FaSW&x$=Bynz+Uv)(eASZRq5fF7;5tVJSk437o0k zxAorR{WAD_n`2kJj-#<+r$HzSTa&@*d7+IU3h!3h1P2@o3$kn*kN^RS z^hf}NN)lhHq7w0n`F8HKiX8de_5cG`pr6US?VmEBK!>o4X#-3L7UNLexHv!(tOfv_ z@OY(~bF^F)g|N$U3IqfT0e(!bwFDFB&{WefOfJPIGXZE&H9YzOHVo|S8I=YzCbX(b z5QZA>^^zoVqe$~%84wwLE(FWR$Zp&m&$(%(9qa4u2wTp9TUZZrlXGp7QEAsXBNYm8 zTJ26%OIS5CPei3>shEA0Sq*xom2Vj7ZI3_@H~~aSgD{FCNOxw(dd#qlqjDA+LnReE zWm~KW`em3g-RGI-jM`Tij~{k#ZmG-M<93_ZT!a(ibYQ>&0S2(wpSg0D9fvxkKPN8Y zP}q?W@}tAR;bijhaqjO@yas#)3JAuyZA77Ea7Yn0SH1Mf3EvJ6R4z#b82tA-8H26G z0GOsYq*cfUFpLu&tePAUwpSaBWcnrmApyQ?ZYhN<00FASU301~m;_NXDO3w@Stq(K zrA2e`0wp%GEX;v`c2!9Y(crk+r_1A_-T(vPMAye5(2UhJHKGrT;}7>s_2l%S@=EKy zdp~|z*Sfz~>n&%_>ZLjb*|6MwVD9(#VOouroR#EK4d7OCZaMkb=zOT2LB7DjuKPCj zIcxWa`Z~+Jdg@2@JDp4pmE={8QTqhsFdAm+3x@qL_uDW$>RxvqlIs+B+RQCaYrh&+ zTuLn?aM2x=*E=u<3E9|MD66|ORVB%%Dp6m#C&E%&Qm96xxqM90BKYB`S%%36d`XfD zL@=xZg8&rxN>!?P-FaU+mphNTIZ$;m7ib5)Tq};rIKvjIvRWX3{n><3gb%=yv^cO4 zKrjFz0iHWfF~y_+NkT%NEo-Uc6kwQ?v|G>E+A?CJFh(Jn5?l?HP$U1sGszFpD`oGn z@Amh`H*l9GoqBds;Hwo?PbF6*m*riPeH=mYV@;I82fKihNkxX_VI3maJ!vjeVMn#Q*kf#TjVayK(jfI&n3n@ z_kOI+bFlW{aeNuC*X!;%gNcd$2AZ8sK;r{xobG@W7k0Dh6u614FHwI`^x0f ze$d7Dy z>XZd+cG)^PcZS0A4s-y47Xe^d#>_3SzHyGNth^EtlScp!0e%~nsRjZR!4~yaYzhk| zL1$Q_dt~z0{_fU@Wt1LeqZ-gqRaNYfv%_5&^liBstqs3x{%>QcfBrVSu{7~|Q0AlS z#!oz)e1CMXy}u*Jr%Il8$Eq6Gx-|~NzTNiYp6r49mx~;?WmO?441m2pHELh0@lTEu z`6hep2?iIv-IHE#)3;f|`$GW@>Q?mYLX}R#if66K`=2!F_>J&D&)abMx4*sJwz@_0 zm-oa>{3$}7E2u|nh2;V6Q;U85+qGm8(tV|d7$!1sBMR5s%Bmhg5 z<^bCe>#l9%LcjE5ObDmA9BCF_z3ax^h)jqmvuWXN)Qo<#nyN*7N@x|6T9bmbTA5 z^y+;}&*vx7ldNO}z!6?nyt&55Kk7Wt_Qltj~>6 zr|x-Zd7hWTF5{nLA7J12{4=I^^$*)Ahqr!MwA^|F3fMVdPJx4ajhTX6`=8Za&5%v? z%Dh7s1u)OxL7ynQ9#|VNMN8_D_DQJ1sGC+lQ$V$qhr9-rh<|)3Du|>_>r0u?2tN{- z7lQWdV7Vc630|MJgQbKYP%MDZAxB+J-Nj2?5r(;**^D(|Y)?;AC@eV1nE&lsCK`gc z!=A50)Yb9<6ak(K_N_){frz9`!)(|%7?B(>Af3Fo`|@*f{|q_GE>TDZx>c2{4iEp1 zo?h)xL4-lmK4m*Owz+ODg#!%F<{!U2syuqbiVu=$x0YWnOS^AFE%#-+WKYi4%SL9- z%yybE*`#Cl6l!{-Ff7zUM46F z@Q?2@kaE=X?W>2TheK*$do$OQ>BB|=S<%`6h_h6uLwUc|l63(%)aQ6V0m zlK_|>)k0Mw_5TV9srXuNKm>pcprF3v_s4fAzCb{6#ss5;K_Iv_XOL}3qiQQVsbeBn z0Cxxm+TR*o8Ql#1ZJ#yXnk1?j>Ya|IRZtfJ-WxV!4+IE;Rpi^RsWcb`oo0=8Ph#2G zv&S+P>s(bsLTz4MtC=VEzAO0?O=YNl`Exs^hgZ+<+Vx6_{K1OLeE9IzUDudWpS?W0 zNR9hp_?Z1s<03b*M|Fd0r2!xzBFF2}d|JI{VP>GVpjL#3Z|5ih$o}pE04Dptjw|m` zF{7FN@9P|t15aiX?I9a{_7~F(nbl_ullqrgbVxpq3PUHlrz_9p&Rtw{x&;7fS%%vn zKmZCbLT?81V1WQx2oYk0@7nuHl9G2q6^*_wVG9X_5GnVw_L2|4U5rGf}Ze#%_P463!^$Gxt%bIdK9zvrdZI6yw8`}XI0bU!9 zu0#w00L*%&qfw(Em===JJ+SQ2_L7NXBo9`V6RJ2hUTqT-B=u=(&*a#FM+c&h>u@Rl zT7P-NTD{Z`6MK*cTk^i29bC6o#u(=1>f1cd_4v$Y-v)30&AVwst^MZC<6HjIbI-k6 zlRZ$h%e)x3{Gl&sP{ujqeERzV*lQ~9U=5P;Hhn!0zb_tBZald^QBxVtcz#&_0CN=m z-HaOQO=G6kZWw4D4<JE-kqRp$`ao2+2x?lZ@_NR)m*NU#m@Wd^51fqLkSQv?iH zfOJb)&1K)zXG6C+H^HYT(Cq;U0bVQiF$J4|0>pl$!x2W1&_KHfHZ7&(=nLDKRaHr@ z?rVw5Pw+;uCE93{D^{Np?AVn$bmbxSau8wD=SnfHK9AfPd!>ykNCNci_A*Qsj$6#N zmvUyC4R!W-dfY!=TJQVn8l#7Tq2=AU%uMHzy-no0#0aRY%qP17o~vrj(%<#)={PgD z3sZjN*c98GU*>oFY`=1s%o0w%X2@n5XsXe3hejj6dh80xFb8UyOuSkVy^LZIdsjjs zQ34}lZc7AdpjRQn7LtsFva43(H@lx9*zA+yoU4Rpz%>WXpe;5thEAKoD9wsNFPT`Q z3rRmmP$KUMK^{6R7&dmS}5lO*{_c~WW<4AFX3hQ9|MDkar z{f}?H`S`Z|xjNsUvOc4o&V2v&xAn=x+S|k8u)eyVy)T(>_r+vf9&F{0wVNWALlIKHqCt1r|bU~lv{+9W;@8fyLxQ*a93jyO!gG`${Ds!U%dA_@^;&N^_M;x~i z1$E5=WOios0eAVXs^QugXRiI3sRv&|s!#!dgcoFBt_^g&If?<`6$tbtM`r;78}OGc zd?L`T%%Cz-UqyuqNlwV?8c+@fjKZ5V2Q5jFy4=t__XB*JDpYaoTL{gHUaamo3c9NR zJE{>yL}!vuvIiOgzG|hyMObB$1W3iLSS)Z#KrquFrI60^HehtRl#vp>@=!J8gf2cZ z_~=g(Cd>YyKk#tiT*4JY;;&myuhj%vg@%$15DQ` zwM8cP*S{Wb#}wzk>0uZn&psQ@h`FZf3o^cC*Ru!Ix=nTn|o<4|@BABeQy+ ziyGriIPZa4hK$VQb$Ivs78sy(s6*~Og`uehFUnMctK__{hU=-{3o!j}x?jiI9*_62 z%j5p%XZ6qkdm(C3U#kKVsssYFVkE4Gwt%R5puQ|3EMP!3NDz)iNbpQ(0fn67qalgU zr%1en7=LMsN~i|_@G+Lr>Uv1A*qW>z+iyD))*SsoBsc(Ba9Lnr-N(8>AOQ#rHX!ps z01*fP0Cf!mQ5#mg8u#Eb0Rf&{mb9l#Gax~e-L!BiXo8^GqJ9AN$QY5$M#9d_UXqht zRaI5QW>JnY{=fBR+~v@|b_{!MTc%9ItY67JE>f3F9~8Bdy{>w{dR^?RJldu;W7QVOb|8TrvJ^v9pRZ*pq&Mix-mR#3a+*0*0e;>`D zejn$Or{UGO)SaAi;d$zkGjalx9Vclf4Q6NLswQ07Hlcj}1b{mS*yT9?jG5``!0OF`<56+bu!>C36_)Y>GS3$VF~g z5P@p79XA>fj`-aM1-LKM9qc9%oLn%uTUM(1$75Scc}S@M0RcW6X3htB0H8^3*%+6w z2>^V+o^2n=LHCl_ozC9K01?c&s;Z%4at)@OaJG>&o>-E@&&-bmOp0t5lyDFvX z5Q5|>60eH#Yre%LKt>L2OJHsxBMi1{IQ;r;u|Z5u&In!g66 z5g6{-K|^p{1#$=uG31#U?HspL0~)+cXeKj*@CO;dfJFlZ0UoOrQbwc(5ukP}rHDw% z02a8>W@aZ{a`cc86RILrOs$|7uQ$|A*N>7GUbCvto;s+Qos|cpXFtXcmU?<#G01>P zTdO`!C0F0>wO_bu?qlRQ6$VV;T-?7jLoB)#A}X9&T2Q_JGVtQ5*w5-9onrupfWVDv zMrMC_zV&5>>)!|fy3B%;5mRK33$<2t()=sOoI|fUaW-f42mPvH%ui3BX08sKhANXF z`*LVuVOwJFQ)BTUFxV(oAiTP%MyK_4{IKY{`hv99hAWIQ5?%p*pU82qtJRps(vMn@ ztd0(5A8AgV+w^5q+5LPHGhJeS8{}cdKs}6MpkU4+%WIt^6*m0<-nymK#M3eW(5j_E zL}o%F0K)^TQea?=l3B8fRaI3kW>wcNZES6g4xdgB`LC|Q%{d+Ipjz!eMYZUyyL&%f zx}8g!<$U+t?5um++ilM?T|12AahzrKFW*mpZ#Wre&+(Y~ZZS;=nGpj;X7#=r7Ii}v z6$g-}n?`#~lK47ChuU|GUgfm2b8QoMw*XBsMfxs02?{DJo-Xjf zbj<=Z`9ft86-nfR)wwYLoeZaI^C+()8tI6L z;BX{cP{o7|KfSI1Qv|Z~7~ORx_|B;#dT@bKg^o`701N>>+ttD~WtI(~VK%IViD$te z0o<6t?t|``%>mb{sw#pP=k(?3+F@@wvGM116Y)ygF|K0DZv%_z>^HyMy0WORsCh2w z-gGTn+}?LIi+#zc%YIL@y2l>#vRm`GRGBIDROVr!cj3{IZQRcxjGEi{dLEBcV>GXi z8ee%W`9>eHlyN+kkBec{2JaPTlIj)=yPU92!O~r7pnC2B3%3E((BmGcySFfIk6GcV zQc-zQDjq%%U9GNt4tcLvlvJXqw(w0Q37o-LLa$fpJ zAFJ1UtzvSsO}$l~!gcb@tm~_EL*$kj<`nKVYRITWx3j`3i;A*)v0MOh;XECxgM066 zpd7!ahH9e9_W5pR{bg9B>{(y_H`uA#v)S_`P!tsXM%BBpVDLu;EH~#zM2I^kH|Py} z0WTrU_02pyK}wrMdb}D*Cc=O%1q1aLwqb&B79+8I!;aky)yzsUgpcVJ*s( z+^624JWY}8Ia8wbbhU5HkSDd)IBszM`v^Q_iIx5uTaZciuDS~vADv|wG4VW)Q}bYM zCg~(w@hE5B?RnWw&c`^Q+p;l8VE1K_CSyB}5!YMxs)}4`C;%Bl1jYz?!?dKnBm@N~ zpGG%MQ@O0W#*P#Yh7rgSG#i5zb-+NB(NH=#fb-~(+(mJO0R#X$Q1wl_wJbYF_yXiT zM4GM>5CI;mmBuBR#sp|c4dNewxKP$SHAdVxgtd4=jFz4QzGk%?YZXS-| zVa#p3ROh+RO|P_4lQ!_UPBNa%o~TD_0SkBScvM5&5%jG8+dE^7DaD@WK`rLF>^*ol zdU9a6Yv_hDF1_o^FopF0+8!*9QM0}rDdwU9x;x5xSrk>vEdhXyblK*q zaxd!*|Jj8@Wfnd5$%PM7sWA^hniMoq|D!(~EinF9C#o_a+f#mxi_Xb7!xKn5$I7%Kls;Z{@ zu}{{z*m7)aFO^9IUa?5~qkq5uO6vQhui}1pgm5q{2Wj=O++ct0zP=lm@$1UNWvu~F zs->W45`ciY<0Q#=F_v?T$YP0V4G7BoYvTr+Hpr03c`A5AO-Y!-q^OB(d)V33GMjM=GRL`$gG}cz?b=5cw%i z+z!9Xs43DSi~u8nUA*-SKAG&Y*`6bFaMLIJ;?AXU{T(#o)qN4 z=De|V_L@8QY^NLxH6$(V1s%nYD4NmezE_K+UGct-q>Y z6)(hH|E?IUy5W#j-)xN-);tN1p-rgj%tfFXUH`j@CIM)kkB50?ndryvTvgC-li+!u zzed%WvrdltzC3gRnwq;VYap711v7vgg91r-p(WoFq^gLxR6Z(Es;Zune2H~xBah6K ztMfR0EQj@7^pV_iaJxEu@cxmXKb^x>Dpq3ZGw5h3~>DnL3h4c58`El z1{2dzuD8|v+8c%!0hYN{h!mFv09;yCAc9pufn@lk$yG~iH_O+4C`Dh2h&voUzs_RuU@tTGyojiiGb{ME$xi_0T@#K$_{+9 zU~5w~P>8N&@)|xH{r58-+7e)8s;T%L+39JloRJ@3U>d6Y6~LZ*NAT zA=NA8Z{j=SnYUVpPrF?^tAjUD=lN$w)iR0dL7Kg`wj&EG07PHIbXs-w-O2IQsa9A- zs@%ABw_X#(&6B$>fyfARST7FxaQ2%?ni|15F#sG=Tlv`IgiHTY775fZYL&!>23fq08HJSo}x`w*m-n+F!@%Owz{9zu*I4IeoE>*CTn3Xv3^xF5>9ixeonyDtdp=`Al1M~(uJ&8ZW_f9|T!sSK zYA-bJ&0eo+8Gb2}qz%4wI;v0_d?uCkunso>jBTUzE^OF(&(9)5py9_RaKcx35^+$2JZT)-O~SL{^#^)dZ`^K(|bi4t0(M~04ID4p0Z;m zdfv@k{QUUxk;lHb(tV$^v)QlnecmUdhV-V+*u*AekcX7oxUD0$$YliAXRl+Ua zj*Xm5i=JfSiU+zJIolALW}rx%*g@B{t(w@7pEdz;wg)>qq12HKr}D_N#`Y`jqFhaP zvm6NXyw#wTtOT&w1b{F?fmVSrNEDFDvnXzA{0|mFGB&KZtx_J2Kf5r=WW>eQ4z9=X zgA5W3f)wge0)f^z_y;vv8a{UM-d_l`FY2z^-naurgA?e00XK7FK?4H;UTpTI1r{{H zM2*RDxkMjm0BAhBXJ(X5Qn9M4GHkcu`;;(k@A$;f(Y-DEpUQzLp3T?62&m}nz&29AegZEkA$2|RMp8hHM`ZgI;O2jo+6|kt^UV{?V+4qnX zn#;wNewS7n8WQJ%DTaAt46ze1oES#9_j^%OFs6nX1wdT6mXaw1!O3(RTkNS;+10Ub z0<<8ongUcQ<+)0g_ZIA7*`FdoRnk0HxH#^U*!e%d&tKB>Npw1Tb{`@U)O+E6x3(Fs zO$bKlznh@_mI>Up5lP~NLdy`^Z4!p=Zo9wc!+@X35`wD1|C>#w30UiuCtpuIm z08NI+vH3s&!1)n+VEnK%GqZ$)6|1T$>KISZ7aM=BTu2@i;jjYO$X#!^7q6>v>9NiK#fPv{7Lt&hv>%nki4k&y*28utd|GB&(x_ zfuu88hAN%yEy=Rp8XQ;ltnDUMj5f40fubVzN`iV(Q)wKL1y=*f4CZS=1w#@MhCR~0 zwY$t^oLvV=!D1T|1om|3Ep}2>6(T7GG*#-as-n8bupQklzUSaBhATAGvtgU+gHS&k zsw*99{x4{cSfvk}v4R{864w0gq%#%@_--G+E+GS~KbOT4i$0`fahnhV!&m_T2Lb-; zjmZRa0H8^5I8_~K3jnyKwqWt>q|~RDq%y9c7b>>ROm`*eOror%=>Zouw&2a_Ru8B=EbCy9 zUBg^Gmz*B1o?9UBWw&KsFaF!N|@1~{JE$r`%gTyT9Y?#+WZ z00060>n%=4q(cGFq}Lmbj@t%+hPm_@c4;Kti@`%xRW+RqZ>`<>Gg`d*P3v5Vt|F?7 zp{r}jil;nUU*v$EURoO%tT=4u0QRlSS?fi=^1kQIN|k1Y4(OR-Ga29e+iDP3@izK9 z`|KHr+A6xyB-MP0L_m$OdRl&)GIrXT6F%^Ckf_E*5=9t8viQ)?M!`g3cLH(MD2zIq z%4sa)K8y5vL}gJ(PtK!v-`v7R0<&NcnfB^YUkIv@q^OGeBGQzVJH*zBlm@Y?g=sr4 z^O!Mvp{}#z$Ah0M()R6bb!<5mC*`Ga&Ex?maw*y<7{9T1-p)m~7QfA3W6($EoQnVg z0iOGH#s_;S5TFKR7aW}lb^)OA>>Ryh$`S-uHB_yxs$+Zl_F>yGqLoKCFLOP-dR&#S z?V>)Oq9--CFlIlJDF=WTd!cJ*ryv84J{1$)wgva&l>USrc$P~AkDb)GHi=-V@6cSFf-mcf&_bqW(5 zoZ~DJ3mVz^7P38Jp$WP;eR!*?3txCrqJEg{dXIbLVh9jdAcW;iI2#070RSW9ZxN-3 z1)1e$yI3q>`rrJJ1q5h0?@6fJfv>7g2pKz)07`$(2kdS}YE+3gn1TctV#4wna5wGODUxVQK;!56BNn-phJUI>*FN{%5oPV z%2;q$r0N-@Cu~&d=?*;vDdw8GK;Q_=4z1Wr{1`#BsNte36*;z$v1JRwt9>e+Wca zwnI$bt*8yK$ukip+47frZ{-d^zbXyr#mG#f6^wC-&<~RHz+HD|8U+FV`>inr*#OWa zx9fzEF}y&wAX?Is4PPXry{yG(+}e-3yUdGnxCT;qB7j%W-!9wl5FKUPxFfj7xRo z98kf7m4mtor>BO5j7_|lD~_X15{q(rF+7P|)Qob55c$r&ax+Z!?`@ji5Zk1tr!<*& zcbPDAZG*QExSBeR&$kBIC#RMZaQ?RHa!R{eE3$Q;z! zPp-35c2dmw>$Ah!*ipGC1u3W6_)@sv0nAv-e1la?MhM?$=?-Kn96&-@@*xg6oq3) z19SIACecGC1IMAVTQRs?5StL`N=Qgq1rmZ=9uniS>xH(_eM@)K&t9Q-LoI0F0{{yF z9{g>wMrG3=LX%){b3QJc0Sy}FSlD#w*`sifT2)mQ=kK{9snd@;{q}W_BqxWj51-ce z)|WmL3>k;R7K2L_TaP}*!P)+C4Ov`P0RZdYH=5?72E}U(d_1ow4!~ zknCu|l^tqI1McZNju_LD~Wsy;e)M5LZ0|WcMq{m3 zdu8y}VDhY*gYWgh(cFERUB*F$eVskFQ7;#Zdhla$-_Q5OzTY=kTTO+b@^a&qy5Dd< zAj6E5x)5s9Z%^K;^KmB7B5;yP0omuir?K>@K4$F9Vf+Wfu@_2_DFFk~tQ&QE;^n?= z7|6N`3e3P6d-CHnHO|s)WI)d{(|#7vGG0B@U||e0z*}uC)31_}q-+BM`4S8 zR8k@pJW1fjBJ+T^Ai>o{bGf^rYn&SJ9B9tLKRP6KbR8{pv#q<%DW=!>lJle4X*1bi zO6=-dw2N8U-!Zev#mKHZ$N&=ow(1qG#K=ZPRH4eGvr7OUWCOtY4*)>>{@(p$^ zqy|P)C&Sy=>&IE=%WSawds}U4?}zn1nf4@)^Nd>U?<8wrt|1rJl%aUE@z)ZebASOh zc+K#1HshmAMhvKcq#VJY%__OQh=m~s*E(TNSZb=$m;~eX(wy;-{qS5jrG}N767ziv zMpadls`m=AE|p7)D ztHeO0bs{FnUBqGTNZCMk{A|(kwh&Ofy6q%nSWJY_fv__!08DAk@pd}vwzCI-h!wb+ z1JjSO&+hL~1wD7zQ!JA?$@I!*^uHrt@Yu=vTt5RX090iSnO}{yUEZzxabk@mf(jgb zI=#_`6yv|&luZ#3<)-O<)0`X6!d^F(F910JRB7AuVT3W%T&+RMEj6(6*T~SY26I5tei9L?!`JQB!t4u zSMc2!WpP?Lh?su6dL`{L7;ZZ%C^rFq}Y%Bg7-H~@Ta^2yKEF-HEaZ5NW5 zOd+aQ5rkoE$u1=$)Q^5nVkbl{F8{p*a49wJW2kX$OwnR-|bd?HVVHb90_6x0xpL zvi8VP;phq?Kj`pD?W?C52AMl=+MQW;Fkmu%vvCR7AUNu^kC)WSK?CtT( z$$*?)(YuUtc^Oe;Nw>wq+19 zNLz1(Y}>O*1R8*WhVMGtOdcJv+Y~Lzc^TkGs9T-D_;tSrhyY+NWJm1UFd!wU;-E$0p8oKvBYIlm@-tA)Ovl1K`ux@ z)#TkkFYRvJ?}vk18Q6VJWW~tn@fKb9V3Yo@M+5c0%Zt?L z$e7FiVM^P-8X@n~QkthlL!}S&Oqy{;xJzbWZN{H9I1buTKB$U!v>lJ^+wJQaA6qwB zwVHzNYL9Xr-_l>+av8@ua~;z|sfn0ns;|5}N|SW-h%C3LrRR;wiBiQ7vCB(1;pWYr zjw(JZwQPlLdRqv1B}o8Er1Dyo)k;#)RZ^AIm-e>o7bPVr)l^lrm5Sb0l_a`9^N`ck z?Mr9Z3B@901P{0)r#?+QVL+_5!4@!`RQ>Kx_wWWA6Ef#!&NbX7hjK_U0 zffJyKN|nFqJ@%P3tY0U^erxZu#;;r7+aCH^NCS!IVtSUN6)2Bt#!xiu#hqdx0pKBL z7#AOB?yu{SG0YEJjQMyb0p)!G-WOpK0(zj84xLmFrT7nLriowJjMNz_2|D3AZZTEmhEvzW%$#cxayB=m85(en(5j(FmUrmhJcU+OQl{m1`uG>YfwU#S%DPVruO9z#@geye^vZ%0RCF^*dS zF#ud+t@I`ur%b0GfGDf4odCP2OYPk$a(nk5j$93#hf;A{`4uTuz1gDHA${57+`SDj z09@%P>FIRVOmh!Fqylem;Np`Tn{?9TGG}35`P9KD&gCf_H|TpkC4HjGSRqnG4LSf^ zXU)8IrBlxRw|>o98d5=K>2rr~ldLv1+tw2V(aKYgk9+mK->*vLXZ?HH)z@dd;N8sc zDOwN{05$-GYqZ@c+gQ0{`zj5jq?Qkht+BF{n#hnp!7OM%lV1RUf7)B%+C57~5e`{Zv8u{ty`DQW z1BM2lN?NyX{F8twaidV z7`QD1iUTLKGi>N;gUqwLDHo?I+l=Iho?2=IIJZQTQ6 zq+kYG=I+>c+~kuup-DgKK;@qPIIaPpA%~C) z=Oyj?@pw7v?87*-_DTslpW|d7ytqW`_B|>7(ecV z7S?f-Ty_>-baJLx^r8s}F04oq*v>VE^KQGCL%wKxqox1}0iFx?WeVP)C{S0E-*Brv z(0~SYE4|GS+B-ApQnDGUs;UV6aoYIkqF&?CUcHs3X&oLfoc^$h?l>H>E;%i3_FT3C zbf6R@&!wGBdPlFvIyn}BBiz7J6a|nhd+eTAc_BK84Hkf^cEvzE&^6ufZWq9q0~6BU@s%s;rjMNC*+G?LHoba)1RPGJ~(Ku5x8D^rKFQb@iNCkK{EOxC2|t zZGJ^v&6O(-_L+Eb4811qc%O|;&iUPWbEZmwY;J3|KZH)FpOM5h1ppEO_PIr13N#oJ z)R?S-v0nxHf(GwzRcG;oQt%`A0HLRT^^4E-P?GfI0Ube%vQBiU^ij45G1Dy@0)J^*eMxM~9LT>C7UuDF}uv}b41tk3r~5f!7J@vIW8jgD5= z@hw{}0A%L~Z+D^<^F(*K7$ovj~dk23qidfg)Tg~t{z z09@@o$@!+eOI`i|;8Xy9k_1|&tk}E$WE8ke`pjf#{RCH{R>tS|(YP-XZGRd8E&xp5 zSnc!)=giFPzBwsc2_n_yh`pER(!cDFc`@X4#p=bWKsOdwaBXDR#rd@gJOEtldfxk0 zIN^Bi{Fir*O(P8{bcx$L-VdIQ9}NC?nPhyO_v5cq57TALvHw%GRjE{dJqLeHtGm3f zw*xx>Ea&B9?ip{Sdvae_)7~p(qEO}DS9m5adzZb-c70h^S#cCMAMYRQ%4L}UkeT__ U%&S)~FE1}IFE0WB000000AMorUH||9 diff --git a/Assets/Audio/SFX.bank b/Assets/Audio/SFX.bank deleted file mode 100644 index 1a2c58acbc8e767a6772f6482772915b48a53df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647840 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�{7~ufLsU8BMK`?U|4`{)vXQ0zQWGF#jaJf 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

    /// Maximum number of descriptor sets allowed From 335c19cfc74b91b7f61c2a72c3d4791b3c7db537 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 25 Sep 2022 22:33:07 +0800 Subject: [PATCH 203/793] Editor --- Assets/Editor/Fonts/MaterialIcons-Regular.ttf | Bin 0 -> 356840 bytes Assets/Editor/Fonts/Segoe UI.ttf | Bin 0 -> 34164 bytes SHADE_Application/premake5.lua | 6 +- .../src/Application/SBApplication.cpp | 25 +- SHADE_Engine/premake5.lua | 14 +- SHADE_Engine/src/Editor/Command/SHCommand.hpp | 51 + .../src/Editor/Command/SHCommandManager.cpp | 57 + .../src/Editor/Command/SHCommandManager.h | 34 + .../src/Editor/DragDrop/SHDragDrop.cpp | 21 + .../src/Editor/DragDrop/SHDragDrop.hpp | 44 + .../HierarchyPanel/SHHierarchyPanel.cpp | 212 ++ .../HierarchyPanel/SHHierarchyPanel.h | 33 + .../Inspector/SHEditorComponentView.hpp | 70 + .../Inspector/SHEditorInspector.cpp | 73 + .../Inspector/SHEditorInspector.h | 30 + .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 130 + .../EditorWindow/MenuBar/SHEditorMenuBar.h | 22 + .../Editor/EditorWindow/SHEditorWindow.cpp | 46 + .../src/Editor/EditorWindow/SHEditorWindow.h | 31 + .../EditorWindow/SHEditorWindowIncludes.h | 4 + SHADE_Engine/src/Editor/IconsMaterialDesign.h | 2260 +++++++++++++++++ SHADE_Engine/src/Editor/SHEditor.cpp | 305 ++- SHADE_Engine/src/Editor/SHEditor.h | 29 - SHADE_Engine/src/Editor/SHEditor.hpp | 168 ++ SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 187 ++ SHADE_Engine/src/Editor/SHImGuiHelpers.hpp | 69 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 9 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 1 + premake5.lua | 3 +- 29 files changed, 3832 insertions(+), 102 deletions(-) create mode 100644 Assets/Editor/Fonts/MaterialIcons-Regular.ttf create mode 100644 Assets/Editor/Fonts/Segoe UI.ttf create mode 100644 SHADE_Engine/src/Editor/Command/SHCommand.hpp create mode 100644 SHADE_Engine/src/Editor/Command/SHCommandManager.cpp create mode 100644 SHADE_Engine/src/Editor/Command/SHCommandManager.h create mode 100644 SHADE_Engine/src/Editor/DragDrop/SHDragDrop.cpp create mode 100644 SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h create mode 100644 SHADE_Engine/src/Editor/IconsMaterialDesign.h delete mode 100644 SHADE_Engine/src/Editor/SHEditor.h create mode 100644 SHADE_Engine/src/Editor/SHEditor.hpp create mode 100644 SHADE_Engine/src/Editor/SHEditorWidgets.hpp create mode 100644 SHADE_Engine/src/Editor/SHImGuiHelpers.hpp diff --git a/Assets/Editor/Fonts/MaterialIcons-Regular.ttf b/Assets/Editor/Fonts/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9d09b0feb85c35beeaddd31246be0b7c8e0e69a4 GIT binary patch literal 356840 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

    t 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 literal 0 HcmV?d00001 diff --git a/Assets/Editor/Fonts/Segoe UI.ttf b/Assets/Editor/Fonts/Segoe UI.ttf new file mode 100644 index 0000000000000000000000000000000000000000..46b3b99387e33ae81940d9a486ba4e0e9fe5b5e6 GIT binary patch literal 34164 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 t7Gsrp<&4(); SHADE::SHSystemManager::CreateSystem(); // TODO(Diren): Create Physics System here SHADE::SHSystemManager::CreateSystem(); - SHADE::SHSystemManager::CreateSystem(); SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); SHADE::SHSystemManager::CreateSystem(); @@ -78,12 +77,11 @@ namespace Sandbox // Set up graphics system and windows graphicsSystem->SetWindow(&window); - sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); - //auto [w, h] = window.GetWindowSize(); - //SDL_SetWindowSize(sdlWindow, w, h); - + SHADE::SHSystemManager::Init(); #ifdef SHEDITOR + SDL_Init(SDL_INIT_VIDEO); + sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); SHADE::SHEditor::Initialise(sdlWindow); #else #endif @@ -104,13 +102,9 @@ namespace Sandbox graphicsSystem->BeginRender(); #ifdef SHEDITOR - SHADE::SHEditor::PreRender(); - //SHADE::SHEditor::Render(); + SHADE::SHEditor::Update(0.16f); #endif - #ifdef SHEDITOR - SHADE::SHEditor::Render(); - #endif graphicsSystem->Run(1.0f); graphicsSystem->EndRender(); @@ -123,11 +117,12 @@ namespace Sandbox { #ifdef SHEDITOR SHADE::SHEditor::Exit(); - #endif - SHSceneManager::Exit(); - SHADE::SHSystemManager::Exit(); SDL_DestroyWindow(sdlWindow); SDL_Quit(); + #endif + + SHSceneManager::Exit(); + SHADE::SHSystemManager::Exit(); } } diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 84acd8fa..a03f135a 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -109,12 +109,24 @@ project "SHADE_Engine" filter "configurations:Debug" symbols "On" - defines {"_DEBUG"} + defines {"_DEBUG", "SHEDITOR"} links{"assimp-vc142-mtd.lib", "librttr_core_d.lib", "spdlogd.lib"} --links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} filter "configurations:Release" + optimize "On" + defines{"_RELEASE", "SHEDITOR"} + links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} + --links{"fmodstudio_vc.lib", "fmod_vc.lib"} + + filter "configurations:Publish" optimize "On" defines{"_RELEASE"} links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} + excludes + { + "%{prj.location}/src/Editor/**.cpp", + "%{prj.location}/src/Editor/**.h", + "%{prj.location}/src/Editor/**.hpp", + } --links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/Command/SHCommand.hpp b/SHADE_Engine/src/Editor/Command/SHCommand.hpp new file mode 100644 index 00000000..ae8834e9 --- /dev/null +++ b/SHADE_Engine/src/Editor/Command/SHCommand.hpp @@ -0,0 +1,51 @@ +#pragma once + +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include + +namespace SHADE +{ + class SHBaseCommand + { + public: + virtual ~SHBaseCommand() = default; + virtual void Execute() {} + virtual void Undo() {} + virtual void Merge(std::shared_ptr) {} + };//struct SHBaseCommand + + template + class SHCommand : SHBaseCommand + { + public: + typedef std::function SetterFunction; + + SHCommand(T const& oldVal, T const& value, SetterFunction setFnc) + : oldValue(oldVal), newValue(value), set(setFnc) + { + } + + void Execute() override + { + set(newValue); + } + + void Undo() override + { + set(oldValue); + } + + void Merge(std::shared_ptr newCommand) override + { + newValue = std::reinterpret_pointer_cast(newCommand)->newValue; + } + + private: + + T oldValue; + T newValue; + SetterFunction set; + }; +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp new file mode 100644 index 00000000..67d6c2ee --- /dev/null +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp @@ -0,0 +1,57 @@ +//#==============================================================# +//|| PCH Include || +//#==============================================================# +#include "SHpch.h" + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "SHCommandManager.h" + +namespace SHADE +{ + SHCommandManager::CommandStack SHCommandManager::undoStack{}; + SHCommandManager::CommandStack SHCommandManager::redoStack{}; + + void SHCommandManager::PerformCommand(CommandPtr commandPtr, bool const& overrideValue) + { + redoStack = CommandStack(); + commandPtr->Execute(); + if (overrideValue && !undoStack.empty()) + { + undoStack.top()->Merge(commandPtr); + } + else + { + undoStack.push(commandPtr); + } + } + + void SHCommandManager::UndoCommand() + { + if (undoStack.empty()) + return; + undoStack.top()->Undo(); + redoStack.push(undoStack.top()); + undoStack.pop(); + } + + void SHCommandManager::RedoCommand() + { + if (redoStack.empty()) + return; + redoStack.top()->Execute(); + undoStack.push(redoStack.top()); + redoStack.pop(); + } + + std::size_t SHCommandManager::GetUndoStackSize() + { + return undoStack.size(); + } + + std::size_t SHCommandManager::GetRedoStackSize() + { + return redoStack.size(); + } +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.h b/SHADE_Engine/src/Editor/Command/SHCommandManager.h new file mode 100644 index 00000000..3ea42740 --- /dev/null +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.h @@ -0,0 +1,34 @@ +#pragma once + +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "SHCommand.hpp" + +namespace SHADE +{ + class SHCommandManager + { + public: + //#==============================================================# + //|| Type Aliases || + //#==============================================================# + using CommandPtr = std::shared_ptr; + using CommandStack = std::stack; + + static void PerformCommand(CommandPtr commandPtr, bool const& overrideValue = false); + static void UndoCommand(); + static void RedoCommand(); + static std::size_t GetUndoStackSize(); + static std::size_t GetRedoStackSize(); + + private: + static CommandStack undoStack; + static CommandStack redoStack; + }; +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.cpp b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.cpp new file mode 100644 index 00000000..97fd8a22 --- /dev/null +++ b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.cpp @@ -0,0 +1,21 @@ +#include "SHpch.h" + +#include "SHDragDrop.hpp" + +namespace SHADE +{ + bool SHDragDrop::hasDragDrop = false; + + bool SHDragDrop::BeginSource(ImGuiDragDropFlags const flags) + { return ImGui::BeginDragDropSource(flags); } + + void SHDragDrop::EndSource() + { ImGui::EndDragDropSource();} + + bool SHDragDrop::BeginTarget() + { return ImGui::BeginDragDropTarget(); } + + void SHDragDrop::EndTarget() + { ImGui::EndDragDropTarget(); hasDragDrop = false;} + +} diff --git a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp new file mode 100644 index 00000000..f9849d78 --- /dev/null +++ b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include + +namespace SHADE +{ + //TODO: Convert to RTTR? + constexpr auto DRAG_EID = "DragEID"; + constexpr auto DRAG_RESOURCE = "DragResource"; + + + struct SHDragDrop + { + static bool BeginSource(ImGuiDragDropFlags const flags = 0); + /** + * \brief Ends the DragDrop Source. ONLY CALL IF BeginSource returns true + */ + static void EndSource(); + + template + static bool SetPayload(std::string_view const type, T* object, ImGuiCond const cond = 0) + { + hasDragDrop = ImGui::SetDragDropPayload(type.data(), static_cast(object), sizeof(T), cond); + return hasDragDrop; + } + + static bool BeginTarget(); + /** + * \brief Ends the DragDrop Target. ONLY CALL IF BeginTarget returns true + */ + static void EndTarget(); + + template + static T* AcceptPayload(std::string_view const type, ImGuiDragDropFlags const flags = 0) + { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(type.data(), flags)) + return static_cast(payload->Data); + return nullptr; + } + + static bool hasDragDrop; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp new file mode 100644 index 00000000..f787d4db --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -0,0 +1,212 @@ +//#==============================================================# +//|| PCH Include || +//#==============================================================# +#include "SHpch.h" + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Editor/SHImGuiHelpers.hpp" +#include "Editor/SHEditorWidgets.hpp" +#include "SHHierarchyPanel.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Editor/SHEditor.hpp" +#include "Scene/SHSceneManager.h" +#include "Editor/DragDrop/SHDragDrop.hpp" +#include "Tools/SHException.h" +#include "Editor/IconsMaterialDesign.h" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + + +namespace SHADE +{ + //#==============================================================# + //|| Public Member Functions || + //#==============================================================# + SHHierarchyPanel::SHHierarchyPanel() + :SHEditorWindow("Hierarchy Panel", ImGuiWindowFlags_MenuBar) + { + } + + void SHHierarchyPanel::Init() + { + SHEditorWindow::Init(); + } + + void SHHierarchyPanel::Update() + { + SHEditorWindow::Update(); + + isAnyNodeSelected = false; + + if (Begin()) + { + DrawMenuBar(); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + if(const auto root = sceneGraph.GetRoot()) + { + auto const& children = root->GetChildren(); + for (const auto child : children) + { + RecursivelyDrawEntityNode(child); + } + } + else + { + SHLOG_WARNING("Scene Graph root is null! Unable to render hierarchy.") + } + + if(ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + SHEditor::selectedEntities.clear(); + } + ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); + ImGui::End(); + } + } + + void SHHierarchyPanel::Exit() + { + SHEditorWindow::Exit(); + } + + //#==============================================================# + //|| Private Member Functions || + //#==============================================================# + void SHHierarchyPanel::DrawMenuBar() const noexcept + { + if (ImGui::BeginMenuBar()) + { + if (ImGui::SmallButton(ICON_MD_ADD)) + { + SHEntityManager::CreateEntity(); + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Add Entity"); + ImGui::EndTooltip(); + } + ImGui::EndMenuBar(); + } + } + + ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* currentNode) + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + + //Get node data (Children, eid, selected) + auto& children = currentNode->GetChildren(); + EntityID eid = currentNode->GetEntityID(); + const bool isSelected = (std::ranges::find(SHEditor::selectedEntities, eid) != SHEditor::selectedEntities.end()); + + const ImGuiTreeNodeFlags nodeFlags = ((isSelected) ? ImGuiTreeNodeFlags_Selected : 0) | ((children.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow); + + //bool highlighted = false; + //if(highlighted) + //{ + // ImGui::PushStyleColor(ImGuiCol_Text, highlightedColor); + //} + + auto* entity = SHEntityManager::GetEntityByID(currentNode->GetEntityID()); + //Draw Node + bool isNodeOpen = ImGui::TreeNodeEx((void*)eid, nodeFlags, "%u: %s", EntityHandleGenerator::GetIndex(eid), entity->name.c_str()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + + //Check For Begin Drag + if (SHDragDrop::BeginSource()) + { + ImGui::Text("Moving EID: %zu", eid); + SHDragDrop::SetPayload(DRAG_EID, &eid); + SHDragDrop::EndSource(); + } + else if (SHDragDrop::BeginTarget()) //If Received DragDrop + { + if (const EntityID* eidPayload = SHDragDrop::AcceptPayload(DRAG_EID)) //If payload is valid + { + EntityID const dropEID = *eidPayload; + if(!sceneGraph.GetChild(dropEID, eid)) + sceneGraph.SetParent(dropEID, eid); //Set dropEID parent to eid (belonging to current Node) + SHDragDrop::EndTarget(); + } + } + + //Context menu + if(ImGui::BeginPopupContextItem(std::to_string(eid).c_str())) + { + if(!isSelected) + { + SHEditor::selectedEntities.clear(); + SHEditor::selectedEntities.push_back(eid); + } + if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) + { + SHEntityManager::DestroyEntity(eid); + } + + if((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) + { + sceneGraph.SetParent(currentNode->GetEntityID(), nullptr); + } + ImGui::EndPopup(); + } + + //Handle node selection + if (ImGui::IsItemHovered()) + { + if (ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + if (!isSelected) + { + if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + SHEditor::selectedEntities.clear(); + SHEditor::selectedEntities.push_back(eid); + }//if not selected + else + { + if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + { + auto it = std::ranges::remove(SHEditor::selectedEntities, eid).begin(); + }//if mod ctrl is not pressed + else + { + SHEditor::selectedEntities.clear(); + SHEditor::selectedEntities.push_back(eid); + } + }//if selected + }//if left mouse button released + }//if item hovered + + if (isNodeOpen) + { + const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark); + const float horizontalOffset = 0.0f; + ImDrawList* drawList = ImGui::GetWindowDrawList(); + + ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); + vertLineStart.x += horizontalOffset; + ImVec2 vertLineEnd = vertLineStart; + + for (const auto child : children) + { + const float horizontalLineSize = 8.0f; + const ImRect childRect = RecursivelyDrawEntityNode(child); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 2); + vertLineEnd.y = midPoint; + } + drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 2); + ImGui::TreePop(); + } + return nodeRect; + } + + void SHHierarchyPanel::CreateChildEntity(EntityID parentEID) const noexcept + { + SHEntityManager::CreateEntity(MAX_EID, "DefaultChild", parentEID); + } +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h new file mode 100644 index 00000000..78e445fd --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -0,0 +1,33 @@ +#pragma once +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "imgui_internal.h" +#include "ECS_Base/SHECSMacros.h" +#include "Editor/EditorWindow/SHEditorWindow.h" + +namespace SHADE +{ + class SHSceneNode; + constexpr ImVec4 highlightedColor = ImVec4(0.f, 0.7f, 0.0f, 1.0f); + + class SHHierarchyPanel final : public SHEditorWindow + { + public: + SHHierarchyPanel(); + void Init() override; + void Update() override; + void Exit() override; + private: + void DrawMenuBar() const noexcept; + ImRect RecursivelyDrawEntityNode(SHSceneNode*); + void CreateChildEntity(EntityID parentEID) const noexcept; + std::string filter; + bool isAnyNodeSelected = false; + };//class SHHierarchyPanel +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp new file mode 100644 index 00000000..080cbf2c --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -0,0 +1,70 @@ +#pragma once + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Editor/IconsMaterialDesign.h" +#include "ECS_Base/Components/SHComponent.h" +#include "Editor/SHEditorWidgets.hpp" +namespace SHADE +{ + template::value, bool> = true> + static void DrawContextMenu(T* component) + { + if(!component) + return; + rttr::string_view componentName = rttr::type::get().get_name(); + + if (ImGui::BeginPopupContextItem(componentName.data())) + { + + if (ImGui::Selectable(std::format("{} Copy {}", ICON_MD_CONTENT_COPY, componentName.data()).data())) + { + //SHClipboardUtil::WriteStringToClipboard(SHClipboardUtil::CFNAME::CFCOMPONENT, SHComponentToString(component)); + } + if (ImGui::Selectable(std::format("{} Paste {}", ICON_MD_CONTENT_PASTE, componentName.data()).data())) + { + //SHStringToComponent(component, SHClipboardUtil::ReadStringFromClipboard(SHClipboardUtil::CFNAME::CFCOMPONENT)); + } + if (ImGui::Selectable(std::format("{} Delete {}", ICON_MD_DELETE, componentName.data()).data())) + { + SHComponentManager::RemoveComponent(component->GetEID()); + } + ImGui::EndPopup(); + } + } + template, bool> = true> + static void DrawComponent(T* component) + { + if (!component) + return; + auto componentType = rttr::type::get(*component); + CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + ImGui::SameLine(); + if (ImGui::CollapsingHeader(componentType.get_name().data())) + { + DrawContextMenu(component); + auto const& properties = componentType.get_properties(); + for (auto const& property : properties) + { + auto const& type = property.get_type(); + + if (type == rttr::type::get()) + { + DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }); + } + else if (type == rttr::type::get()) + { + DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); + } + } + } + else DrawContextMenu(component); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp new file mode 100644 index 00000000..fba9512e --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -0,0 +1,73 @@ +#include "SHpch.h" + +#include "SHEditorInspector.h" + +#include "ECS_Base/SHECSMacros.h" +#include "ECS_Base/Entity/SHEntity.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Math/Transform/SHTransformComponent.h" + +#include "Editor/SHEditor.hpp" +#include "Editor/SHImGuiHelpers.hpp" +#include "Editor/SHEditorWidgets.hpp" +#include "SHEditorComponentView.hpp" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" + +namespace SHADE +{ + template, bool> = true> + void DrawAddComponentButton(EntityID const& eid) + { + if(!SHComponentManager::HasComponent(eid) && ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data())) + { + SHComponentManager::AddComponent(eid); + } + } + + SHEditorInspector::SHEditorInspector() + :SHEditorWindow("Inspector", ImGuiWindowFlags_MenuBar) + { + } + + void SHEditorInspector::Init() + { + SHEditorWindow::Init(); + } + + void SHEditorInspector::Update() + { + SHEditorWindow::Update(); + if (Begin()) + { + if (!SHEditor::selectedEntities.empty()) + { + EntityID const& eid = SHEditor::selectedEntities[0]; + SHEntity* entity = SHEntityManager::GetEntityByID(eid); + + ImGui::TextColored(ImGuiColors::green, "EID: %zu", eid); + CheckBox("##IsActive", [entity]()->bool {return entity->GetActive(); }, [entity](bool const& active) {entity->SetActive(active); }); + ImGui::SameLine(); + + ImGui::InputText("##EntityName", &entity->name); + + if (auto transformComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(transformComponent); + } + ImGui::Separator(); + if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) + { + DrawAddComponentButton(eid); + DrawAddComponentButton(eid); + ImGui::EndMenu(); + } + } + ImGui::End(); + } + } + + void SHEditorInspector::Exit() + { + SHEditorWindow::Exit(); + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.h b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.h new file mode 100644 index 00000000..06676beb --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.h @@ -0,0 +1,30 @@ +#pragma once + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Editor/EditorWindow/SHEditorWindow.h" + + +namespace SHADE +{ + class SHComponent; + + class SHEditorInspector final : public SHEditorWindow + { + public: + SHEditorInspector(); + void Init() override; + void Update() override; + void Exit() override; + + private: + + }; +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp new file mode 100644 index 00000000..7e5f762c --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -0,0 +1,130 @@ +#include "SHpch.h" + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "SHEditorMenuBar.h" +#include "Editor/IconsMaterialDesign.h" +#include "Editor/Command/SHCommandManager.h" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include +#include + +#include "Editor/SHEditor.hpp" + + +namespace SHADE +{ + constexpr ImGuiWindowFlags editorMenuBarFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking | + ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus; + + constexpr ImGuiWindowFlags dockspaceFlags = ImGuiDockNodeFlags_PassthruCentralNode; + + //#==============================================================# + //|| Public Member Functions || + //#==============================================================# + SHEditorMenuBar::SHEditorMenuBar() + :SHEditorWindow("SHEditorMenuBar", editorMenuBarFlags | ImGuiWindowFlags_NoBackground) + { + } + + void SHEditorMenuBar::Init() + { + SHEditorWindow::Init(); + } + + void SHEditorMenuBar::Update() + { + SHEditorWindow::Update(); + DrawMainMenuBar(); + DrawSecondaryBar(); + DrawStatusBar(); + } + + //#==============================================================# + //|| Private Member Functions || + //#==============================================================# + void SHEditorMenuBar::DrawMainMenuBar() noexcept + { + const ImGuiViewport* viewport = ImGui::GetMainViewport(); + + ImGui::SetNextWindowPos(viewport->WorkPos); + ImGui::SetNextWindowSize(viewport->WorkSize); + ImGui::SetNextWindowViewport(viewport->ID); + + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { ImVec2(0.0f, 0.0f) }); + if (Begin()) + { + ImGui::PopStyleVar(3); + + if (ImGui::BeginMainMenuBar()) + { + if (ImGui::BeginMenu("File")) + { + + ImGui::EndMenu(); + } + if(ImGui::BeginMenu("Edit")) + { + ImGui::BeginDisabled(!SHCommandManager::GetUndoStackSize()); + if(ImGui::Button(std::format("{} Undo", ICON_MD_UNDO).data())) + { + SHCommandManager::UndoCommand(); + } + ImGui::EndDisabled(); + ImGui::BeginDisabled(!SHCommandManager::GetRedoStackSize()); + if(ImGui::Button(std::format("{} Redo", ICON_MD_REDO).data())) + { + SHCommandManager::RedoCommand(); + } + ImGui::EndDisabled(); + ImGui::EndMenu(); + } + if(ImGui::BeginMenu("Theme")) + { + auto styles = rttr::type::get().get_enumeration(); + auto values = styles.get_values(); + for (auto style : values) + { + if(ImGui::Selectable(style.to_string().c_str())) + { + SHEditor::SetStyle(style.convert()); + } + } + ImGui::EndMenu(); + } + ImGui::EndMainMenuBar(); + } + + const ImGuiID dockspace_id = ImGui::GetID("DockSpace"); + ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspaceFlags); + ImGui::End(); + } + } + + void SHEditorMenuBar::DrawSecondaryBar() const noexcept + { + + } + + void SHEditorMenuBar::DrawStatusBar() const noexcept + { + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { ImVec2(0.0f, 0.0f) }); + if (ImGui::BeginViewportSideBar("MainStatusBar", ImGui::GetMainViewport(), ImGuiDir_Down, menuBarHeight, editorMenuBarFlags)) + { + ImGui::Text("Entity count: "); + ImGui::End(); + } + ImGui::PopStyleVar(3); + + } +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h new file mode 100644 index 00000000..616ba43e --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h @@ -0,0 +1,22 @@ +#pragma once + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Editor/EditorWindow/SHEditorWindow.h" + +namespace SHADE +{ + class SHEditorMenuBar final : public SHEditorWindow + { + public: + SHEditorMenuBar(); + virtual void Init() override; + virtual void Update() override; + private: + void DrawMainMenuBar() noexcept; + void DrawSecondaryBar() const noexcept; + void DrawStatusBar() const noexcept; + float menuBarHeight = 20.0f; + };//class SHEditorMenuBar +}//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp new file mode 100644 index 00000000..2e2c820c --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -0,0 +1,46 @@ +//#==============================================================# +//|| PCH Include || +//#==============================================================# +#include "SHpch.h" + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "SHEditorWindow.h" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + +namespace SHADE +{ +//#==============================================================# +//|| Public Member Functions || +//#==============================================================# + SHEditorWindow::SHEditorWindow(std::string_view const& name, ImGuiWindowFlags const& inFlags) + : isOpen(true), windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) + { + } + + void SHEditorWindow::Init() + { + } + + void SHEditorWindow::Update() + { + } + + void SHEditorWindow::Exit() + { + } + + //#==============================================================# + //|| Protected Member Functions || + //#==============================================================# + bool SHEditorWindow::Begin() + { + return ImGui::Begin(windowName.data(), &isOpen, windowFlags); + } +}//namespace SHADE + diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h new file mode 100644 index 00000000..244ef677 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -0,0 +1,31 @@ +#pragma once + +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| Forward Declarations || +//#==============================================================# +struct ImGuiIO; +typedef int ImGuiWindowFlags; + +namespace SHADE +{ + class SHEditorWindow + { + public: + SHEditorWindow(std::string_view const& name, ImGuiWindowFlags const& inFlags); + virtual ~SHEditorWindow() = default; + virtual void Init(); + virtual void Update(); + virtual void Exit(); + bool isOpen = false; + std::string_view windowName; + protected: + virtual bool Begin(); + ImGuiWindowFlags windowFlags = 0; + ImGuiIO& io; + };//class SHEditorWindow +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h new file mode 100644 index 00000000..2ed34109 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -0,0 +1,4 @@ +#pragma once +#include "MenuBar/SHEditorMenuBar.h" //Menu Bar +#include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel +#include "Inspector/SHEditorInspector.h" //Inspector \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/IconsMaterialDesign.h b/SHADE_Engine/src/Editor/IconsMaterialDesign.h new file mode 100644 index 00000000..68373237 --- /dev/null +++ b/SHADE_Engine/src/Editor/IconsMaterialDesign.h @@ -0,0 +1,2260 @@ +//Copyright (c) 2017 Juliette Foucaut and Doug Binks +// +//This software is provided 'as-is', without any express or implied +//warranty. In no event will the authors be held liable for any damages +//arising from the use of this software. +// +//Permission is granted to anyone to use this software for any purpose, +//including commercial applications, and to alter it and redistribute it +//freely, subject to the following restrictions: +// +//1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +//2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +//3. This notice may not be removed or altered from any source distribution. + +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ +// from https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.codepoints +// for use with https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf +#pragma once + +#define FONT_ICON_FILE_NAME_MD "MaterialIcons-Regular.ttf" + +#define ICON_MIN_MD 0xe000 +#define ICON_MAX_16_MD 0xf8ff +#define ICON_MAX_MD 0x10fffd +#define ICON_MD_10K "\xee\xa5\x91" // U+e951 +#define ICON_MD_10MP "\xee\xa5\x92" // U+e952 +#define ICON_MD_11MP "\xee\xa5\x93" // U+e953 +#define ICON_MD_123 "\xee\xae\x8d" // U+eb8d +#define ICON_MD_12MP "\xee\xa5\x94" // U+e954 +#define ICON_MD_13MP "\xee\xa5\x95" // U+e955 +#define ICON_MD_14MP "\xee\xa5\x96" // U+e956 +#define ICON_MD_15MP "\xee\xa5\x97" // U+e957 +#define ICON_MD_16MP "\xee\xa5\x98" // U+e958 +#define ICON_MD_17MP "\xee\xa5\x99" // U+e959 +#define ICON_MD_18_UP_RATING "\xef\xa3\xbd" // U+f8fd +#define ICON_MD_18MP "\xee\xa5\x9a" // U+e95a +#define ICON_MD_19MP "\xee\xa5\x9b" // U+e95b +#define ICON_MD_1K "\xee\xa5\x9c" // U+e95c +#define ICON_MD_1K_PLUS "\xee\xa5\x9d" // U+e95d +#define ICON_MD_1X_MOBILEDATA "\xee\xbf\x8d" // U+efcd +#define ICON_MD_20MP "\xee\xa5\x9e" // U+e95e +#define ICON_MD_21MP "\xee\xa5\x9f" // U+e95f +#define ICON_MD_22MP "\xee\xa5\xa0" // U+e960 +#define ICON_MD_23MP "\xee\xa5\xa1" // U+e961 +#define ICON_MD_24MP "\xee\xa5\xa2" // U+e962 +#define ICON_MD_2K "\xee\xa5\xa3" // U+e963 +#define ICON_MD_2K_PLUS "\xee\xa5\xa4" // U+e964 +#define ICON_MD_2MP "\xee\xa5\xa5" // U+e965 +#define ICON_MD_30FPS "\xee\xbf\x8e" // U+efce +#define ICON_MD_30FPS_SELECT "\xee\xbf\x8f" // U+efcf +#define ICON_MD_360 "\xee\x95\xb7" // U+e577 +#define ICON_MD_3D_ROTATION "\xee\xa1\x8d" // U+e84d +#define ICON_MD_3G_MOBILEDATA "\xee\xbf\x90" // U+efd0 +#define ICON_MD_3K "\xee\xa5\xa6" // U+e966 +#define ICON_MD_3K_PLUS "\xee\xa5\xa7" // U+e967 +#define ICON_MD_3MP "\xee\xa5\xa8" // U+e968 +#define ICON_MD_3P "\xee\xbf\x91" // U+efd1 +#define ICON_MD_4G_MOBILEDATA "\xee\xbf\x92" // U+efd2 +#define ICON_MD_4G_PLUS_MOBILEDATA "\xee\xbf\x93" // U+efd3 +#define ICON_MD_4K "\xee\x81\xb2" // U+e072 +#define ICON_MD_4K_PLUS "\xee\xa5\xa9" // U+e969 +#define ICON_MD_4MP "\xee\xa5\xaa" // U+e96a +#define ICON_MD_5G "\xee\xbc\xb8" // U+ef38 +#define ICON_MD_5K "\xee\xa5\xab" // U+e96b +#define ICON_MD_5K_PLUS "\xee\xa5\xac" // U+e96c +#define ICON_MD_5MP "\xee\xa5\xad" // U+e96d +#define ICON_MD_60FPS "\xee\xbf\x94" // U+efd4 +#define ICON_MD_60FPS_SELECT "\xee\xbf\x95" // U+efd5 +#define ICON_MD_6_FT_APART "\xef\x88\x9e" // U+f21e +#define ICON_MD_6K "\xee\xa5\xae" // U+e96e +#define ICON_MD_6K_PLUS "\xee\xa5\xaf" // U+e96f +#define ICON_MD_6MP "\xee\xa5\xb0" // U+e970 +#define ICON_MD_7K "\xee\xa5\xb1" // U+e971 +#define ICON_MD_7K_PLUS "\xee\xa5\xb2" // U+e972 +#define ICON_MD_7MP "\xee\xa5\xb3" // U+e973 +#define ICON_MD_8K "\xee\xa5\xb4" // U+e974 +#define ICON_MD_8K_PLUS "\xee\xa5\xb5" // U+e975 +#define ICON_MD_8MP "\xee\xa5\xb6" // U+e976 +#define ICON_MD_9K "\xee\xa5\xb7" // U+e977 +#define ICON_MD_9K_PLUS "\xee\xa5\xb8" // U+e978 +#define ICON_MD_9MP "\xee\xa5\xb9" // U+e979 +#define ICON_MD_ABC "\xee\xae\x94" // U+eb94 +#define ICON_MD_AC_UNIT "\xee\xac\xbb" // U+eb3b +#define ICON_MD_ACCESS_ALARM "\xee\x86\x90" // U+e190 +#define ICON_MD_ACCESS_ALARMS "\xee\x86\x91" // U+e191 +#define ICON_MD_ACCESS_TIME "\xee\x86\x92" // U+e192 +#define ICON_MD_ACCESS_TIME_FILLED "\xee\xbf\x96" // U+efd6 +#define ICON_MD_ACCESSIBILITY "\xee\xa1\x8e" // U+e84e +#define ICON_MD_ACCESSIBILITY_NEW "\xee\xa4\xac" // U+e92c +#define ICON_MD_ACCESSIBLE "\xee\xa4\x94" // U+e914 +#define ICON_MD_ACCESSIBLE_FORWARD "\xee\xa4\xb4" // U+e934 +#define ICON_MD_ACCOUNT_BALANCE "\xee\xa1\x8f" // U+e84f +#define ICON_MD_ACCOUNT_BALANCE_WALLET "\xee\xa1\x90" // U+e850 +#define ICON_MD_ACCOUNT_BOX "\xee\xa1\x91" // U+e851 +#define ICON_MD_ACCOUNT_CIRCLE "\xee\xa1\x93" // U+e853 +#define ICON_MD_ACCOUNT_TREE "\xee\xa5\xba" // U+e97a +#define ICON_MD_AD_UNITS "\xee\xbc\xb9" // U+ef39 +#define ICON_MD_ADB "\xee\x98\x8e" // U+e60e +#define ICON_MD_ADD "\xee\x85\x85" // U+e145 +#define ICON_MD_ADD_A_PHOTO "\xee\x90\xb9" // U+e439 +#define ICON_MD_ADD_ALARM "\xee\x86\x93" // U+e193 +#define ICON_MD_ADD_ALERT "\xee\x80\x83" // U+e003 +#define ICON_MD_ADD_BOX "\xee\x85\x86" // U+e146 +#define ICON_MD_ADD_BUSINESS "\xee\x9c\xa9" // U+e729 +#define ICON_MD_ADD_CALL "\xee\x83\xa8" // U+e0e8 +#define ICON_MD_ADD_CARD "\xee\xae\x86" // U+eb86 +#define ICON_MD_ADD_CHART "\xee\xa5\xbb" // U+e97b +#define ICON_MD_ADD_CIRCLE "\xee\x85\x87" // U+e147 +#define ICON_MD_ADD_CIRCLE_OUTLINE "\xee\x85\x88" // U+e148 +#define ICON_MD_ADD_COMMENT "\xee\x89\xa6" // U+e266 +#define ICON_MD_ADD_HOME "\xef\xa3\xab" // U+f8eb +#define ICON_MD_ADD_HOME_WORK "\xef\xa3\xad" // U+f8ed +#define ICON_MD_ADD_IC_CALL "\xee\xa5\xbc" // U+e97c +#define ICON_MD_ADD_LINK "\xee\x85\xb8" // U+e178 +#define ICON_MD_ADD_LOCATION "\xee\x95\xa7" // U+e567 +#define ICON_MD_ADD_LOCATION_ALT "\xee\xbc\xba" // U+ef3a +#define ICON_MD_ADD_MODERATOR "\xee\xa5\xbd" // U+e97d +#define ICON_MD_ADD_PHOTO_ALTERNATE "\xee\x90\xbe" // U+e43e +#define ICON_MD_ADD_REACTION "\xee\x87\x93" // U+e1d3 +#define ICON_MD_ADD_ROAD "\xee\xbc\xbb" // U+ef3b +#define ICON_MD_ADD_SHOPPING_CART "\xee\xa1\x94" // U+e854 +#define ICON_MD_ADD_TASK "\xef\x88\xba" // U+f23a +#define ICON_MD_ADD_TO_DRIVE "\xee\x99\x9c" // U+e65c +#define ICON_MD_ADD_TO_HOME_SCREEN "\xee\x87\xbe" // U+e1fe +#define ICON_MD_ADD_TO_PHOTOS "\xee\x8e\x9d" // U+e39d +#define ICON_MD_ADD_TO_QUEUE "\xee\x81\x9c" // U+e05c +#define ICON_MD_ADDCHART "\xee\xbc\xbc" // U+ef3c +#define ICON_MD_ADF_SCANNER "\xee\xab\x9a" // U+eada +#define ICON_MD_ADJUST "\xee\x8e\x9e" // U+e39e +#define ICON_MD_ADMIN_PANEL_SETTINGS "\xee\xbc\xbd" // U+ef3d +#define ICON_MD_ADOBE "\xee\xaa\x96" // U+ea96 +#define ICON_MD_ADS_CLICK "\xee\x9d\xa2" // U+e762 +#define ICON_MD_AGRICULTURE "\xee\xa9\xb9" // U+ea79 +#define ICON_MD_AIR "\xee\xbf\x98" // U+efd8 +#define ICON_MD_AIRLINE_SEAT_FLAT "\xee\x98\xb0" // U+e630 +#define ICON_MD_AIRLINE_SEAT_FLAT_ANGLED "\xee\x98\xb1" // U+e631 +#define ICON_MD_AIRLINE_SEAT_INDIVIDUAL_SUITE "\xee\x98\xb2" // U+e632 +#define ICON_MD_AIRLINE_SEAT_LEGROOM_EXTRA "\xee\x98\xb3" // U+e633 +#define ICON_MD_AIRLINE_SEAT_LEGROOM_NORMAL "\xee\x98\xb4" // U+e634 +#define ICON_MD_AIRLINE_SEAT_LEGROOM_REDUCED "\xee\x98\xb5" // U+e635 +#define ICON_MD_AIRLINE_SEAT_RECLINE_EXTRA "\xee\x98\xb6" // U+e636 +#define ICON_MD_AIRLINE_SEAT_RECLINE_NORMAL "\xee\x98\xb7" // U+e637 +#define ICON_MD_AIRLINE_STOPS "\xee\x9f\x90" // U+e7d0 +#define ICON_MD_AIRLINES "\xee\x9f\x8a" // U+e7ca +#define ICON_MD_AIRPLANE_TICKET "\xee\xbf\x99" // U+efd9 +#define ICON_MD_AIRPLANEMODE_ACTIVE "\xee\x86\x95" // U+e195 +#define ICON_MD_AIRPLANEMODE_INACTIVE "\xee\x86\x94" // U+e194 +#define ICON_MD_AIRPLANEMODE_OFF "\xee\x86\x94" // U+e194 +#define ICON_MD_AIRPLANEMODE_ON "\xee\x86\x95" // U+e195 +#define ICON_MD_AIRPLAY "\xee\x81\x95" // U+e055 +#define ICON_MD_AIRPORT_SHUTTLE "\xee\xac\xbc" // U+eb3c +#define ICON_MD_ALARM "\xee\xa1\x95" // U+e855 +#define ICON_MD_ALARM_ADD "\xee\xa1\x96" // U+e856 +#define ICON_MD_ALARM_OFF "\xee\xa1\x97" // U+e857 +#define ICON_MD_ALARM_ON "\xee\xa1\x98" // U+e858 +#define ICON_MD_ALBUM "\xee\x80\x99" // U+e019 +#define ICON_MD_ALIGN_HORIZONTAL_CENTER "\xee\x80\x8f" // U+e00f +#define ICON_MD_ALIGN_HORIZONTAL_LEFT "\xee\x80\x8d" // U+e00d +#define ICON_MD_ALIGN_HORIZONTAL_RIGHT "\xee\x80\x90" // U+e010 +#define ICON_MD_ALIGN_VERTICAL_BOTTOM "\xee\x80\x95" // U+e015 +#define ICON_MD_ALIGN_VERTICAL_CENTER "\xee\x80\x91" // U+e011 +#define ICON_MD_ALIGN_VERTICAL_TOP "\xee\x80\x8c" // U+e00c +#define ICON_MD_ALL_INBOX "\xee\xa5\xbf" // U+e97f +#define ICON_MD_ALL_INCLUSIVE "\xee\xac\xbd" // U+eb3d +#define ICON_MD_ALL_OUT "\xee\xa4\x8b" // U+e90b +#define ICON_MD_ALT_ROUTE "\xef\x86\x84" // U+f184 +#define ICON_MD_ALTERNATE_EMAIL "\xee\x83\xa6" // U+e0e6 +#define ICON_MD_AMP_STORIES "\xee\xa8\x93" // U+ea13 +#define ICON_MD_ANALYTICS "\xee\xbc\xbe" // U+ef3e +#define ICON_MD_ANCHOR "\xef\x87\x8d" // U+f1cd +#define ICON_MD_ANDROID "\xee\xa1\x99" // U+e859 +#define ICON_MD_ANIMATION "\xee\x9c\x9c" // U+e71c +#define ICON_MD_ANNOUNCEMENT "\xee\xa1\x9a" // U+e85a +#define ICON_MD_AOD "\xee\xbf\x9a" // U+efda +#define ICON_MD_APARTMENT "\xee\xa9\x80" // U+ea40 +#define ICON_MD_API "\xef\x86\xb7" // U+f1b7 +#define ICON_MD_APP_BLOCKING "\xee\xbc\xbf" // U+ef3f +#define ICON_MD_APP_REGISTRATION "\xee\xbd\x80" // U+ef40 +#define ICON_MD_APP_SETTINGS_ALT "\xee\xbd\x81" // U+ef41 +#define ICON_MD_APP_SHORTCUT "\xee\xab\xa4" // U+eae4 +#define ICON_MD_APPLE "\xee\xaa\x80" // U+ea80 +#define ICON_MD_APPROVAL "\xee\xa6\x82" // U+e982 +#define ICON_MD_APPS "\xee\x97\x83" // U+e5c3 +#define ICON_MD_APPS_OUTAGE "\xee\x9f\x8c" // U+e7cc +#define ICON_MD_ARCHITECTURE "\xee\xa8\xbb" // U+ea3b +#define ICON_MD_ARCHIVE "\xee\x85\x89" // U+e149 +#define ICON_MD_AREA_CHART "\xee\x9d\xb0" // U+e770 +#define ICON_MD_ARROW_BACK "\xee\x97\x84" // U+e5c4 +#define ICON_MD_ARROW_BACK_IOS "\xee\x97\xa0" // U+e5e0 +#define ICON_MD_ARROW_BACK_IOS_NEW "\xee\x8b\xaa" // U+e2ea +#define ICON_MD_ARROW_CIRCLE_DOWN "\xef\x86\x81" // U+f181 +#define ICON_MD_ARROW_CIRCLE_LEFT "\xee\xaa\xa7" // U+eaa7 +#define ICON_MD_ARROW_CIRCLE_RIGHT "\xee\xaa\xaa" // U+eaaa +#define ICON_MD_ARROW_CIRCLE_UP "\xef\x86\x82" // U+f182 +#define ICON_MD_ARROW_DOWNWARD "\xee\x97\x9b" // U+e5db +#define ICON_MD_ARROW_DROP_DOWN "\xee\x97\x85" // U+e5c5 +#define ICON_MD_ARROW_DROP_DOWN_CIRCLE "\xee\x97\x86" // U+e5c6 +#define ICON_MD_ARROW_DROP_UP "\xee\x97\x87" // U+e5c7 +#define ICON_MD_ARROW_FORWARD "\xee\x97\x88" // U+e5c8 +#define ICON_MD_ARROW_FORWARD_IOS "\xee\x97\xa1" // U+e5e1 +#define ICON_MD_ARROW_LEFT "\xee\x97\x9e" // U+e5de +#define ICON_MD_ARROW_OUTWARD "\xef\xa3\x8e" // U+f8ce +#define ICON_MD_ARROW_RIGHT "\xee\x97\x9f" // U+e5df +#define ICON_MD_ARROW_RIGHT_ALT "\xee\xa5\x81" // U+e941 +#define ICON_MD_ARROW_UPWARD "\xee\x97\x98" // U+e5d8 +#define ICON_MD_ART_TRACK "\xee\x81\xa0" // U+e060 +#define ICON_MD_ARTICLE "\xee\xbd\x82" // U+ef42 +#define ICON_MD_ASPECT_RATIO "\xee\xa1\x9b" // U+e85b +#define ICON_MD_ASSESSMENT "\xee\xa1\x9c" // U+e85c +#define ICON_MD_ASSIGNMENT "\xee\xa1\x9d" // U+e85d +#define ICON_MD_ASSIGNMENT_IND "\xee\xa1\x9e" // U+e85e +#define ICON_MD_ASSIGNMENT_LATE "\xee\xa1\x9f" // U+e85f +#define ICON_MD_ASSIGNMENT_RETURN "\xee\xa1\xa0" // U+e860 +#define ICON_MD_ASSIGNMENT_RETURNED "\xee\xa1\xa1" // U+e861 +#define ICON_MD_ASSIGNMENT_TURNED_IN "\xee\xa1\xa2" // U+e862 +#define ICON_MD_ASSIST_WALKER "\xef\xa3\x95" // U+f8d5 +#define ICON_MD_ASSISTANT "\xee\x8e\x9f" // U+e39f +#define ICON_MD_ASSISTANT_DIRECTION "\xee\xa6\x88" // U+e988 +#define ICON_MD_ASSISTANT_NAVIGATION "\xee\xa6\x89" // U+e989 +#define ICON_MD_ASSISTANT_PHOTO "\xee\x8e\xa0" // U+e3a0 +#define ICON_MD_ASSURED_WORKLOAD "\xee\xad\xaf" // U+eb6f +#define ICON_MD_ATM "\xee\x95\xb3" // U+e573 +#define ICON_MD_ATTACH_EMAIL "\xee\xa9\x9e" // U+ea5e +#define ICON_MD_ATTACH_FILE "\xee\x88\xa6" // U+e226 +#define ICON_MD_ATTACH_MONEY "\xee\x88\xa7" // U+e227 +#define ICON_MD_ATTACHMENT "\xee\x8a\xbc" // U+e2bc +#define ICON_MD_ATTRACTIONS "\xee\xa9\x92" // U+ea52 +#define ICON_MD_ATTRIBUTION "\xee\xbf\x9b" // U+efdb +#define ICON_MD_AUDIO_FILE "\xee\xae\x82" // U+eb82 +#define ICON_MD_AUDIOTRACK "\xee\x8e\xa1" // U+e3a1 +#define ICON_MD_AUTO_AWESOME "\xee\x99\x9f" // U+e65f +#define ICON_MD_AUTO_AWESOME_MOSAIC "\xee\x99\xa0" // U+e660 +#define ICON_MD_AUTO_AWESOME_MOTION "\xee\x99\xa1" // U+e661 +#define ICON_MD_AUTO_DELETE "\xee\xa9\x8c" // U+ea4c +#define ICON_MD_AUTO_FIX_HIGH "\xee\x99\xa3" // U+e663 +#define ICON_MD_AUTO_FIX_NORMAL "\xee\x99\xa4" // U+e664 +#define ICON_MD_AUTO_FIX_OFF "\xee\x99\xa5" // U+e665 +#define ICON_MD_AUTO_GRAPH "\xee\x93\xbb" // U+e4fb +#define ICON_MD_AUTO_MODE "\xee\xb0\xa0" // U+ec20 +#define ICON_MD_AUTO_STORIES "\xee\x99\xa6" // U+e666 +#define ICON_MD_AUTOFPS_SELECT "\xee\xbf\x9c" // U+efdc +#define ICON_MD_AUTORENEW "\xee\xa1\xa3" // U+e863 +#define ICON_MD_AV_TIMER "\xee\x80\x9b" // U+e01b +#define ICON_MD_BABY_CHANGING_STATION "\xef\x86\x9b" // U+f19b +#define ICON_MD_BACK_HAND "\xee\x9d\xa4" // U+e764 +#define ICON_MD_BACKPACK "\xef\x86\x9c" // U+f19c +#define ICON_MD_BACKSPACE "\xee\x85\x8a" // U+e14a +#define ICON_MD_BACKUP "\xee\xa1\xa4" // U+e864 +#define ICON_MD_BACKUP_TABLE "\xee\xbd\x83" // U+ef43 +#define ICON_MD_BADGE "\xee\xa9\xa7" // U+ea67 +#define ICON_MD_BAKERY_DINING "\xee\xa9\x93" // U+ea53 +#define ICON_MD_BALANCE "\xee\xab\xb6" // U+eaf6 +#define ICON_MD_BALCONY "\xee\x96\x8f" // U+e58f +#define ICON_MD_BALLOT "\xee\x85\xb2" // U+e172 +#define ICON_MD_BAR_CHART "\xee\x89\xab" // U+e26b +#define ICON_MD_BARCODE_READER "\xef\xa1\x9c" // U+f85c +#define ICON_MD_BATCH_PREDICTION "\xef\x83\xb5" // U+f0f5 +#define ICON_MD_BATHROOM "\xee\xbf\x9d" // U+efdd +#define ICON_MD_BATHTUB "\xee\xa9\x81" // U+ea41 +#define ICON_MD_BATTERY_0_BAR "\xee\xaf\x9c" // U+ebdc +#define ICON_MD_BATTERY_1_BAR "\xee\xaf\x99" // U+ebd9 +#define ICON_MD_BATTERY_2_BAR "\xee\xaf\xa0" // U+ebe0 +#define ICON_MD_BATTERY_3_BAR "\xee\xaf\x9d" // U+ebdd +#define ICON_MD_BATTERY_4_BAR "\xee\xaf\xa2" // U+ebe2 +#define ICON_MD_BATTERY_5_BAR "\xee\xaf\x94" // U+ebd4 +#define ICON_MD_BATTERY_6_BAR "\xee\xaf\x92" // U+ebd2 +#define ICON_MD_BATTERY_ALERT "\xee\x86\x9c" // U+e19c +#define ICON_MD_BATTERY_CHARGING_FULL "\xee\x86\xa3" // U+e1a3 +#define ICON_MD_BATTERY_FULL "\xee\x86\xa4" // U+e1a4 +#define ICON_MD_BATTERY_SAVER "\xee\xbf\x9e" // U+efde +#define ICON_MD_BATTERY_STD "\xee\x86\xa5" // U+e1a5 +#define ICON_MD_BATTERY_UNKNOWN "\xee\x86\xa6" // U+e1a6 +#define ICON_MD_BEACH_ACCESS "\xee\xac\xbe" // U+eb3e +#define ICON_MD_BED "\xee\xbf\x9f" // U+efdf +#define ICON_MD_BEDROOM_BABY "\xee\xbf\xa0" // U+efe0 +#define ICON_MD_BEDROOM_CHILD "\xee\xbf\xa1" // U+efe1 +#define ICON_MD_BEDROOM_PARENT "\xee\xbf\xa2" // U+efe2 +#define ICON_MD_BEDTIME "\xee\xbd\x84" // U+ef44 +#define ICON_MD_BEDTIME_OFF "\xee\xad\xb6" // U+eb76 +#define ICON_MD_BEENHERE "\xee\x94\xad" // U+e52d +#define ICON_MD_BENTO "\xef\x87\xb4" // U+f1f4 +#define ICON_MD_BIKE_SCOOTER "\xee\xbd\x85" // U+ef45 +#define ICON_MD_BIOTECH "\xee\xa8\xba" // U+ea3a +#define ICON_MD_BLENDER "\xee\xbf\xa3" // U+efe3 +#define ICON_MD_BLIND "\xef\xa3\x96" // U+f8d6 +#define ICON_MD_BLINDS "\xee\x8a\x86" // U+e286 +#define ICON_MD_BLINDS_CLOSED "\xee\xb0\x9f" // U+ec1f +#define ICON_MD_BLOCK "\xee\x85\x8b" // U+e14b +#define ICON_MD_BLOCK_FLIPPED "\xee\xbd\x86" // U+ef46 +#define ICON_MD_BLOODTYPE "\xee\xbf\xa4" // U+efe4 +#define ICON_MD_BLUETOOTH "\xee\x86\xa7" // U+e1a7 +#define ICON_MD_BLUETOOTH_AUDIO "\xee\x98\x8f" // U+e60f +#define ICON_MD_BLUETOOTH_CONNECTED "\xee\x86\xa8" // U+e1a8 +#define ICON_MD_BLUETOOTH_DISABLED "\xee\x86\xa9" // U+e1a9 +#define ICON_MD_BLUETOOTH_DRIVE "\xee\xbf\xa5" // U+efe5 +#define ICON_MD_BLUETOOTH_SEARCHING "\xee\x86\xaa" // U+e1aa +#define ICON_MD_BLUR_CIRCULAR "\xee\x8e\xa2" // U+e3a2 +#define ICON_MD_BLUR_LINEAR "\xee\x8e\xa3" // U+e3a3 +#define ICON_MD_BLUR_OFF "\xee\x8e\xa4" // U+e3a4 +#define ICON_MD_BLUR_ON "\xee\x8e\xa5" // U+e3a5 +#define ICON_MD_BOLT "\xee\xa8\x8b" // U+ea0b +#define ICON_MD_BOOK "\xee\xa1\xa5" // U+e865 +#define ICON_MD_BOOK_ONLINE "\xef\x88\x97" // U+f217 +#define ICON_MD_BOOKMARK "\xee\xa1\xa6" // U+e866 +#define ICON_MD_BOOKMARK_ADD "\xee\x96\x98" // U+e598 +#define ICON_MD_BOOKMARK_ADDED "\xee\x96\x99" // U+e599 +#define ICON_MD_BOOKMARK_BORDER "\xee\xa1\xa7" // U+e867 +#define ICON_MD_BOOKMARK_OUTLINE "\xee\xa1\xa7" // U+e867 +#define ICON_MD_BOOKMARK_REMOVE "\xee\x96\x9a" // U+e59a +#define ICON_MD_BOOKMARKS "\xee\xa6\x8b" // U+e98b +#define ICON_MD_BORDER_ALL "\xee\x88\xa8" // U+e228 +#define ICON_MD_BORDER_BOTTOM "\xee\x88\xa9" // U+e229 +#define ICON_MD_BORDER_CLEAR "\xee\x88\xaa" // U+e22a +#define ICON_MD_BORDER_COLOR "\xee\x88\xab" // U+e22b +#define ICON_MD_BORDER_HORIZONTAL "\xee\x88\xac" // U+e22c +#define ICON_MD_BORDER_INNER "\xee\x88\xad" // U+e22d +#define ICON_MD_BORDER_LEFT "\xee\x88\xae" // U+e22e +#define ICON_MD_BORDER_OUTER "\xee\x88\xaf" // U+e22f +#define ICON_MD_BORDER_RIGHT "\xee\x88\xb0" // U+e230 +#define ICON_MD_BORDER_STYLE "\xee\x88\xb1" // U+e231 +#define ICON_MD_BORDER_TOP "\xee\x88\xb2" // U+e232 +#define ICON_MD_BORDER_VERTICAL "\xee\x88\xb3" // U+e233 +#define ICON_MD_BOY "\xee\xad\xa7" // U+eb67 +#define ICON_MD_BRANDING_WATERMARK "\xee\x81\xab" // U+e06b +#define ICON_MD_BREAKFAST_DINING "\xee\xa9\x94" // U+ea54 +#define ICON_MD_BRIGHTNESS_1 "\xee\x8e\xa6" // U+e3a6 +#define ICON_MD_BRIGHTNESS_2 "\xee\x8e\xa7" // U+e3a7 +#define ICON_MD_BRIGHTNESS_3 "\xee\x8e\xa8" // U+e3a8 +#define ICON_MD_BRIGHTNESS_4 "\xee\x8e\xa9" // U+e3a9 +#define ICON_MD_BRIGHTNESS_5 "\xee\x8e\xaa" // U+e3aa +#define ICON_MD_BRIGHTNESS_6 "\xee\x8e\xab" // U+e3ab +#define ICON_MD_BRIGHTNESS_7 "\xee\x8e\xac" // U+e3ac +#define ICON_MD_BRIGHTNESS_AUTO "\xee\x86\xab" // U+e1ab +#define ICON_MD_BRIGHTNESS_HIGH "\xee\x86\xac" // U+e1ac +#define ICON_MD_BRIGHTNESS_LOW "\xee\x86\xad" // U+e1ad +#define ICON_MD_BRIGHTNESS_MEDIUM "\xee\x86\xae" // U+e1ae +#define ICON_MD_BROADCAST_ON_HOME "\xef\xa3\xb8" // U+f8f8 +#define ICON_MD_BROADCAST_ON_PERSONAL "\xef\xa3\xb9" // U+f8f9 +#define ICON_MD_BROKEN_IMAGE "\xee\x8e\xad" // U+e3ad +#define ICON_MD_BROWSE_GALLERY "\xee\xaf\x91" // U+ebd1 +#define ICON_MD_BROWSER_NOT_SUPPORTED "\xee\xbd\x87" // U+ef47 +#define ICON_MD_BROWSER_UPDATED "\xee\x9f\x8f" // U+e7cf +#define ICON_MD_BRUNCH_DINING "\xee\xa9\xb3" // U+ea73 +#define ICON_MD_BRUSH "\xee\x8e\xae" // U+e3ae +#define ICON_MD_BUBBLE_CHART "\xee\x9b\x9d" // U+e6dd +#define ICON_MD_BUG_REPORT "\xee\xa1\xa8" // U+e868 +#define ICON_MD_BUILD "\xee\xa1\xa9" // U+e869 +#define ICON_MD_BUILD_CIRCLE "\xee\xbd\x88" // U+ef48 +#define ICON_MD_BUNGALOW "\xee\x96\x91" // U+e591 +#define ICON_MD_BURST_MODE "\xee\x90\xbc" // U+e43c +#define ICON_MD_BUS_ALERT "\xee\xa6\x8f" // U+e98f +#define ICON_MD_BUSINESS "\xee\x82\xaf" // U+e0af +#define ICON_MD_BUSINESS_CENTER "\xee\xac\xbf" // U+eb3f +#define ICON_MD_CABIN "\xee\x96\x89" // U+e589 +#define ICON_MD_CABLE "\xee\xbf\xa6" // U+efe6 +#define ICON_MD_CACHED "\xee\xa1\xaa" // U+e86a +#define ICON_MD_CAKE "\xee\x9f\xa9" // U+e7e9 +#define ICON_MD_CALCULATE "\xee\xa9\x9f" // U+ea5f +#define ICON_MD_CALENDAR_MONTH "\xee\xaf\x8c" // U+ebcc +#define ICON_MD_CALENDAR_TODAY "\xee\xa4\xb5" // U+e935 +#define ICON_MD_CALENDAR_VIEW_DAY "\xee\xa4\xb6" // U+e936 +#define ICON_MD_CALENDAR_VIEW_MONTH "\xee\xbf\xa7" // U+efe7 +#define ICON_MD_CALENDAR_VIEW_WEEK "\xee\xbf\xa8" // U+efe8 +#define ICON_MD_CALL "\xee\x82\xb0" // U+e0b0 +#define ICON_MD_CALL_END "\xee\x82\xb1" // U+e0b1 +#define ICON_MD_CALL_MADE "\xee\x82\xb2" // U+e0b2 +#define ICON_MD_CALL_MERGE "\xee\x82\xb3" // U+e0b3 +#define ICON_MD_CALL_MISSED "\xee\x82\xb4" // U+e0b4 +#define ICON_MD_CALL_MISSED_OUTGOING "\xee\x83\xa4" // U+e0e4 +#define ICON_MD_CALL_RECEIVED "\xee\x82\xb5" // U+e0b5 +#define ICON_MD_CALL_SPLIT "\xee\x82\xb6" // U+e0b6 +#define ICON_MD_CALL_TO_ACTION "\xee\x81\xac" // U+e06c +#define ICON_MD_CAMERA "\xee\x8e\xaf" // U+e3af +#define ICON_MD_CAMERA_ALT "\xee\x8e\xb0" // U+e3b0 +#define ICON_MD_CAMERA_ENHANCE "\xee\xa3\xbc" // U+e8fc +#define ICON_MD_CAMERA_FRONT "\xee\x8e\xb1" // U+e3b1 +#define ICON_MD_CAMERA_INDOOR "\xee\xbf\xa9" // U+efe9 +#define ICON_MD_CAMERA_OUTDOOR "\xee\xbf\xaa" // U+efea +#define ICON_MD_CAMERA_REAR "\xee\x8e\xb2" // U+e3b2 +#define ICON_MD_CAMERA_ROLL "\xee\x8e\xb3" // U+e3b3 +#define ICON_MD_CAMERASWITCH "\xee\xbf\xab" // U+efeb +#define ICON_MD_CAMPAIGN "\xee\xbd\x89" // U+ef49 +#define ICON_MD_CANCEL "\xee\x97\x89" // U+e5c9 +#define ICON_MD_CANCEL_PRESENTATION "\xee\x83\xa9" // U+e0e9 +#define ICON_MD_CANCEL_SCHEDULE_SEND "\xee\xa8\xb9" // U+ea39 +#define ICON_MD_CANDLESTICK_CHART "\xee\xab\x94" // U+ead4 +#define ICON_MD_CAR_CRASH "\xee\xaf\xb2" // U+ebf2 +#define ICON_MD_CAR_RENTAL "\xee\xa9\x95" // U+ea55 +#define ICON_MD_CAR_REPAIR "\xee\xa9\x96" // U+ea56 +#define ICON_MD_CARD_GIFTCARD "\xee\xa3\xb6" // U+e8f6 +#define ICON_MD_CARD_MEMBERSHIP "\xee\xa3\xb7" // U+e8f7 +#define ICON_MD_CARD_TRAVEL "\xee\xa3\xb8" // U+e8f8 +#define ICON_MD_CARPENTER "\xef\x87\xb8" // U+f1f8 +#define ICON_MD_CASES "\xee\xa6\x92" // U+e992 +#define ICON_MD_CASINO "\xee\xad\x80" // U+eb40 +#define ICON_MD_CAST "\xee\x8c\x87" // U+e307 +#define ICON_MD_CAST_CONNECTED "\xee\x8c\x88" // U+e308 +#define ICON_MD_CAST_FOR_EDUCATION "\xee\xbf\xac" // U+efec +#define ICON_MD_CASTLE "\xee\xaa\xb1" // U+eab1 +#define ICON_MD_CATCHING_POKEMON "\xee\x94\x88" // U+e508 +#define ICON_MD_CATEGORY "\xee\x95\xb4" // U+e574 +#define ICON_MD_CELEBRATION "\xee\xa9\xa5" // U+ea65 +#define ICON_MD_CELL_TOWER "\xee\xae\xba" // U+ebba +#define ICON_MD_CELL_WIFI "\xee\x83\xac" // U+e0ec +#define ICON_MD_CENTER_FOCUS_STRONG "\xee\x8e\xb4" // U+e3b4 +#define ICON_MD_CENTER_FOCUS_WEAK "\xee\x8e\xb5" // U+e3b5 +#define ICON_MD_CHAIR "\xee\xbf\xad" // U+efed +#define ICON_MD_CHAIR_ALT "\xee\xbf\xae" // U+efee +#define ICON_MD_CHALET "\xee\x96\x85" // U+e585 +#define ICON_MD_CHANGE_CIRCLE "\xee\x8b\xa7" // U+e2e7 +#define ICON_MD_CHANGE_HISTORY "\xee\xa1\xab" // U+e86b +#define ICON_MD_CHARGING_STATION "\xef\x86\x9d" // U+f19d +#define ICON_MD_CHAT "\xee\x82\xb7" // U+e0b7 +#define ICON_MD_CHAT_BUBBLE "\xee\x83\x8a" // U+e0ca +#define ICON_MD_CHAT_BUBBLE_OUTLINE "\xee\x83\x8b" // U+e0cb +#define ICON_MD_CHECK "\xee\x97\x8a" // U+e5ca +#define ICON_MD_CHECK_BOX "\xee\xa0\xb4" // U+e834 +#define ICON_MD_CHECK_BOX_OUTLINE_BLANK "\xee\xa0\xb5" // U+e835 +#define ICON_MD_CHECK_CIRCLE "\xee\xa1\xac" // U+e86c +#define ICON_MD_CHECK_CIRCLE_OUTLINE "\xee\xa4\xad" // U+e92d +#define ICON_MD_CHECKLIST "\xee\x9a\xb1" // U+e6b1 +#define ICON_MD_CHECKLIST_RTL "\xee\x9a\xb3" // U+e6b3 +#define ICON_MD_CHECKROOM "\xef\x86\x9e" // U+f19e +#define ICON_MD_CHEVRON_LEFT "\xee\x97\x8b" // U+e5cb +#define ICON_MD_CHEVRON_RIGHT "\xee\x97\x8c" // U+e5cc +#define ICON_MD_CHILD_CARE "\xee\xad\x81" // U+eb41 +#define ICON_MD_CHILD_FRIENDLY "\xee\xad\x82" // U+eb42 +#define ICON_MD_CHROME_READER_MODE "\xee\xa1\xad" // U+e86d +#define ICON_MD_CHURCH "\xee\xaa\xae" // U+eaae +#define ICON_MD_CIRCLE "\xee\xbd\x8a" // U+ef4a +#define ICON_MD_CIRCLE_NOTIFICATIONS "\xee\xa6\x94" // U+e994 +#define ICON_MD_CLASS "\xee\xa1\xae" // U+e86e +#define ICON_MD_CLEAN_HANDS "\xef\x88\x9f" // U+f21f +#define ICON_MD_CLEANING_SERVICES "\xef\x83\xbf" // U+f0ff +#define ICON_MD_CLEAR "\xee\x85\x8c" // U+e14c +#define ICON_MD_CLEAR_ALL "\xee\x82\xb8" // U+e0b8 +#define ICON_MD_CLOSE "\xee\x97\x8d" // U+e5cd +#define ICON_MD_CLOSE_FULLSCREEN "\xef\x87\x8f" // U+f1cf +#define ICON_MD_CLOSED_CAPTION "\xee\x80\x9c" // U+e01c +#define ICON_MD_CLOSED_CAPTION_DISABLED "\xef\x87\x9c" // U+f1dc +#define ICON_MD_CLOSED_CAPTION_OFF "\xee\xa6\x96" // U+e996 +#define ICON_MD_CLOUD "\xee\x8a\xbd" // U+e2bd +#define ICON_MD_CLOUD_CIRCLE "\xee\x8a\xbe" // U+e2be +#define ICON_MD_CLOUD_DONE "\xee\x8a\xbf" // U+e2bf +#define ICON_MD_CLOUD_DOWNLOAD "\xee\x8b\x80" // U+e2c0 +#define ICON_MD_CLOUD_OFF "\xee\x8b\x81" // U+e2c1 +#define ICON_MD_CLOUD_QUEUE "\xee\x8b\x82" // U+e2c2 +#define ICON_MD_CLOUD_SYNC "\xee\xad\x9a" // U+eb5a +#define ICON_MD_CLOUD_UPLOAD "\xee\x8b\x83" // U+e2c3 +#define ICON_MD_CLOUDY_SNOWING "\xee\xa0\x90" // U+e810 +#define ICON_MD_CO2 "\xee\x9e\xb0" // U+e7b0 +#define ICON_MD_CO_PRESENT "\xee\xab\xb0" // U+eaf0 +#define ICON_MD_CODE "\xee\xa1\xaf" // U+e86f +#define ICON_MD_CODE_OFF "\xee\x93\xb3" // U+e4f3 +#define ICON_MD_COFFEE "\xee\xbf\xaf" // U+efef +#define ICON_MD_COFFEE_MAKER "\xee\xbf\xb0" // U+eff0 +#define ICON_MD_COLLECTIONS "\xee\x8e\xb6" // U+e3b6 +#define ICON_MD_COLLECTIONS_BOOKMARK "\xee\x90\xb1" // U+e431 +#define ICON_MD_COLOR_LENS "\xee\x8e\xb7" // U+e3b7 +#define ICON_MD_COLORIZE "\xee\x8e\xb8" // U+e3b8 +#define ICON_MD_COMMENT "\xee\x82\xb9" // U+e0b9 +#define ICON_MD_COMMENT_BANK "\xee\xa9\x8e" // U+ea4e +#define ICON_MD_COMMENTS_DISABLED "\xee\x9e\xa2" // U+e7a2 +#define ICON_MD_COMMIT "\xee\xab\xb5" // U+eaf5 +#define ICON_MD_COMMUTE "\xee\xa5\x80" // U+e940 +#define ICON_MD_COMPARE "\xee\x8e\xb9" // U+e3b9 +#define ICON_MD_COMPARE_ARROWS "\xee\xa4\x95" // U+e915 +#define ICON_MD_COMPASS_CALIBRATION "\xee\x95\xbc" // U+e57c +#define ICON_MD_COMPOST "\xee\x9d\xa1" // U+e761 +#define ICON_MD_COMPRESS "\xee\xa5\x8d" // U+e94d +#define ICON_MD_COMPUTER "\xee\x8c\x8a" // U+e30a +#define ICON_MD_CONFIRMATION_NUM "\xee\x98\xb8" // U+e638 +#define ICON_MD_CONFIRMATION_NUMBER "\xee\x98\xb8" // U+e638 +#define ICON_MD_CONNECT_WITHOUT_CONTACT "\xef\x88\xa3" // U+f223 +#define ICON_MD_CONNECTED_TV "\xee\xa6\x98" // U+e998 +#define ICON_MD_CONNECTING_AIRPORTS "\xee\x9f\x89" // U+e7c9 +#define ICON_MD_CONSTRUCTION "\xee\xa8\xbc" // U+ea3c +#define ICON_MD_CONTACT_EMERGENCY "\xef\xa3\x91" // U+f8d1 +#define ICON_MD_CONTACT_MAIL "\xee\x83\x90" // U+e0d0 +#define ICON_MD_CONTACT_PAGE "\xef\x88\xae" // U+f22e +#define ICON_MD_CONTACT_PHONE "\xee\x83\x8f" // U+e0cf +#define ICON_MD_CONTACT_SUPPORT "\xee\xa5\x8c" // U+e94c +#define ICON_MD_CONTACTLESS "\xee\xa9\xb1" // U+ea71 +#define ICON_MD_CONTACTS "\xee\x82\xba" // U+e0ba +#define ICON_MD_CONTENT_COPY "\xee\x85\x8d" // U+e14d +#define ICON_MD_CONTENT_CUT "\xee\x85\x8e" // U+e14e +#define ICON_MD_CONTENT_PASTE "\xee\x85\x8f" // U+e14f +#define ICON_MD_CONTENT_PASTE_GO "\xee\xaa\x8e" // U+ea8e +#define ICON_MD_CONTENT_PASTE_OFF "\xee\x93\xb8" // U+e4f8 +#define ICON_MD_CONTENT_PASTE_SEARCH "\xee\xaa\x9b" // U+ea9b +#define ICON_MD_CONTRAST "\xee\xac\xb7" // U+eb37 +#define ICON_MD_CONTROL_CAMERA "\xee\x81\xb4" // U+e074 +#define ICON_MD_CONTROL_POINT "\xee\x8e\xba" // U+e3ba +#define ICON_MD_CONTROL_POINT_DUPLICATE "\xee\x8e\xbb" // U+e3bb +#define ICON_MD_CONVEYOR_BELT "\xef\xa1\xa7" // U+f867 +#define ICON_MD_COOKIE "\xee\xaa\xac" // U+eaac +#define ICON_MD_COPY_ALL "\xee\x8b\xac" // U+e2ec +#define ICON_MD_COPYRIGHT "\xee\xa4\x8c" // U+e90c +#define ICON_MD_CORONAVIRUS "\xef\x88\xa1" // U+f221 +#define ICON_MD_CORPORATE_FARE "\xef\x87\x90" // U+f1d0 +#define ICON_MD_COTTAGE "\xee\x96\x87" // U+e587 +#define ICON_MD_COUNTERTOPS "\xef\x87\xb7" // U+f1f7 +#define ICON_MD_CREATE "\xee\x85\x90" // U+e150 +#define ICON_MD_CREATE_NEW_FOLDER "\xee\x8b\x8c" // U+e2cc +#define ICON_MD_CREDIT_CARD "\xee\xa1\xb0" // U+e870 +#define ICON_MD_CREDIT_CARD_OFF "\xee\x93\xb4" // U+e4f4 +#define ICON_MD_CREDIT_SCORE "\xee\xbf\xb1" // U+eff1 +#define ICON_MD_CRIB "\xee\x96\x88" // U+e588 +#define ICON_MD_CRISIS_ALERT "\xee\xaf\xa9" // U+ebe9 +#define ICON_MD_CROP "\xee\x8e\xbe" // U+e3be +#define ICON_MD_CROP_16_9 "\xee\x8e\xbc" // U+e3bc +#define ICON_MD_CROP_3_2 "\xee\x8e\xbd" // U+e3bd +#define ICON_MD_CROP_5_4 "\xee\x8e\xbf" // U+e3bf +#define ICON_MD_CROP_7_5 "\xee\x8f\x80" // U+e3c0 +#define ICON_MD_CROP_DIN "\xee\x8f\x81" // U+e3c1 +#define ICON_MD_CROP_FREE "\xee\x8f\x82" // U+e3c2 +#define ICON_MD_CROP_LANDSCAPE "\xee\x8f\x83" // U+e3c3 +#define ICON_MD_CROP_ORIGINAL "\xee\x8f\x84" // U+e3c4 +#define ICON_MD_CROP_PORTRAIT "\xee\x8f\x85" // U+e3c5 +#define ICON_MD_CROP_ROTATE "\xee\x90\xb7" // U+e437 +#define ICON_MD_CROP_SQUARE "\xee\x8f\x86" // U+e3c6 +#define ICON_MD_CRUELTY_FREE "\xee\x9e\x99" // U+e799 +#define ICON_MD_CSS "\xee\xae\x93" // U+eb93 +#define ICON_MD_CURRENCY_BITCOIN "\xee\xaf\x85" // U+ebc5 +#define ICON_MD_CURRENCY_EXCHANGE "\xee\xad\xb0" // U+eb70 +#define ICON_MD_CURRENCY_FRANC "\xee\xab\xba" // U+eafa +#define ICON_MD_CURRENCY_LIRA "\xee\xab\xaf" // U+eaef +#define ICON_MD_CURRENCY_POUND "\xee\xab\xb1" // U+eaf1 +#define ICON_MD_CURRENCY_RUBLE "\xee\xab\xac" // U+eaec +#define ICON_MD_CURRENCY_RUPEE "\xee\xab\xb7" // U+eaf7 +#define ICON_MD_CURRENCY_YEN "\xee\xab\xbb" // U+eafb +#define ICON_MD_CURRENCY_YUAN "\xee\xab\xb9" // U+eaf9 +#define ICON_MD_CURTAINS "\xee\xb0\x9e" // U+ec1e +#define ICON_MD_CURTAINS_CLOSED "\xee\xb0\x9d" // U+ec1d +#define ICON_MD_CYCLONE "\xee\xaf\x95" // U+ebd5 +#define ICON_MD_DANGEROUS "\xee\xa6\x9a" // U+e99a +#define ICON_MD_DARK_MODE "\xee\x94\x9c" // U+e51c +#define ICON_MD_DASHBOARD "\xee\xa1\xb1" // U+e871 +#define ICON_MD_DASHBOARD_CUSTOMIZE "\xee\xa6\x9b" // U+e99b +#define ICON_MD_DATA_ARRAY "\xee\xab\x91" // U+ead1 +#define ICON_MD_DATA_EXPLORATION "\xee\x9d\xaf" // U+e76f +#define ICON_MD_DATA_OBJECT "\xee\xab\x93" // U+ead3 +#define ICON_MD_DATA_SAVER_OFF "\xee\xbf\xb2" // U+eff2 +#define ICON_MD_DATA_SAVER_ON "\xee\xbf\xb3" // U+eff3 +#define ICON_MD_DATA_THRESHOLDING "\xee\xae\x9f" // U+eb9f +#define ICON_MD_DATA_USAGE "\xee\x86\xaf" // U+e1af +#define ICON_MD_DATASET "\xef\xa3\xae" // U+f8ee +#define ICON_MD_DATASET_LINKED "\xef\xa3\xaf" // U+f8ef +#define ICON_MD_DATE_RANGE "\xee\xa4\x96" // U+e916 +#define ICON_MD_DEBLUR "\xee\xad\xb7" // U+eb77 +#define ICON_MD_DECK "\xee\xa9\x82" // U+ea42 +#define ICON_MD_DEHAZE "\xee\x8f\x87" // U+e3c7 +#define ICON_MD_DELETE "\xee\xa1\xb2" // U+e872 +#define ICON_MD_DELETE_FOREVER "\xee\xa4\xab" // U+e92b +#define ICON_MD_DELETE_OUTLINE "\xee\xa4\xae" // U+e92e +#define ICON_MD_DELETE_SWEEP "\xee\x85\xac" // U+e16c +#define ICON_MD_DELIVERY_DINING "\xee\xa9\xb2" // U+ea72 +#define ICON_MD_DENSITY_LARGE "\xee\xae\xa9" // U+eba9 +#define ICON_MD_DENSITY_MEDIUM "\xee\xae\x9e" // U+eb9e +#define ICON_MD_DENSITY_SMALL "\xee\xae\xa8" // U+eba8 +#define ICON_MD_DEPARTURE_BOARD "\xee\x95\xb6" // U+e576 +#define ICON_MD_DESCRIPTION "\xee\xa1\xb3" // U+e873 +#define ICON_MD_DESELECT "\xee\xae\xb6" // U+ebb6 +#define ICON_MD_DESIGN_SERVICES "\xef\x84\x8a" // U+f10a +#define ICON_MD_DESK "\xef\xa3\xb4" // U+f8f4 +#define ICON_MD_DESKTOP_ACCESS_DISABLED "\xee\xa6\x9d" // U+e99d +#define ICON_MD_DESKTOP_MAC "\xee\x8c\x8b" // U+e30b +#define ICON_MD_DESKTOP_WINDOWS "\xee\x8c\x8c" // U+e30c +#define ICON_MD_DETAILS "\xee\x8f\x88" // U+e3c8 +#define ICON_MD_DEVELOPER_BOARD "\xee\x8c\x8d" // U+e30d +#define ICON_MD_DEVELOPER_BOARD_OFF "\xee\x93\xbf" // U+e4ff +#define ICON_MD_DEVELOPER_MODE "\xee\x86\xb0" // U+e1b0 +#define ICON_MD_DEVICE_HUB "\xee\x8c\xb5" // U+e335 +#define ICON_MD_DEVICE_THERMOSTAT "\xee\x87\xbf" // U+e1ff +#define ICON_MD_DEVICE_UNKNOWN "\xee\x8c\xb9" // U+e339 +#define ICON_MD_DEVICES "\xee\x86\xb1" // U+e1b1 +#define ICON_MD_DEVICES_FOLD "\xee\xaf\x9e" // U+ebde +#define ICON_MD_DEVICES_OTHER "\xee\x8c\xb7" // U+e337 +#define ICON_MD_DEW_POINT "\xef\xa1\xb9" // U+f879 +#define ICON_MD_DIALER_SIP "\xee\x82\xbb" // U+e0bb +#define ICON_MD_DIALPAD "\xee\x82\xbc" // U+e0bc +#define ICON_MD_DIAMOND "\xee\xab\x95" // U+ead5 +#define ICON_MD_DIFFERENCE "\xee\xad\xbd" // U+eb7d +#define ICON_MD_DINING "\xee\xbf\xb4" // U+eff4 +#define ICON_MD_DINNER_DINING "\xee\xa9\x97" // U+ea57 +#define ICON_MD_DIRECTIONS "\xee\x94\xae" // U+e52e +#define ICON_MD_DIRECTIONS_BIKE "\xee\x94\xaf" // U+e52f +#define ICON_MD_DIRECTIONS_BOAT "\xee\x94\xb2" // U+e532 +#define ICON_MD_DIRECTIONS_BOAT_FILLED "\xee\xbf\xb5" // U+eff5 +#define ICON_MD_DIRECTIONS_BUS "\xee\x94\xb0" // U+e530 +#define ICON_MD_DIRECTIONS_BUS_FILLED "\xee\xbf\xb6" // U+eff6 +#define ICON_MD_DIRECTIONS_CAR "\xee\x94\xb1" // U+e531 +#define ICON_MD_DIRECTIONS_CAR_FILLED "\xee\xbf\xb7" // U+eff7 +#define ICON_MD_DIRECTIONS_FERRY "\xee\x94\xb2" // U+e532 +#define ICON_MD_DIRECTIONS_OFF "\xef\x84\x8f" // U+f10f +#define ICON_MD_DIRECTIONS_RAILWAY "\xee\x94\xb4" // U+e534 +#define ICON_MD_DIRECTIONS_RAILWAY_FILLED "\xee\xbf\xb8" // U+eff8 +#define ICON_MD_DIRECTIONS_RUN "\xee\x95\xa6" // U+e566 +#define ICON_MD_DIRECTIONS_SUBWAY "\xee\x94\xb3" // U+e533 +#define ICON_MD_DIRECTIONS_SUBWAY_FILLED "\xee\xbf\xb9" // U+eff9 +#define ICON_MD_DIRECTIONS_TRAIN "\xee\x94\xb4" // U+e534 +#define ICON_MD_DIRECTIONS_TRANSIT "\xee\x94\xb5" // U+e535 +#define ICON_MD_DIRECTIONS_TRANSIT_FILLED "\xee\xbf\xba" // U+effa +#define ICON_MD_DIRECTIONS_WALK "\xee\x94\xb6" // U+e536 +#define ICON_MD_DIRTY_LENS "\xee\xbd\x8b" // U+ef4b +#define ICON_MD_DISABLED_BY_DEFAULT "\xef\x88\xb0" // U+f230 +#define ICON_MD_DISABLED_VISIBLE "\xee\x9d\xae" // U+e76e +#define ICON_MD_DISC_FULL "\xee\x98\x90" // U+e610 +#define ICON_MD_DISCORD "\xee\xa9\xac" // U+ea6c +#define ICON_MD_DISCOUNT "\xee\xaf\x89" // U+ebc9 +#define ICON_MD_DISPLAY_SETTINGS "\xee\xae\x97" // U+eb97 +#define ICON_MD_DIVERSITY_1 "\xef\xa3\x97" // U+f8d7 +#define ICON_MD_DIVERSITY_2 "\xef\xa3\x98" // U+f8d8 +#define ICON_MD_DIVERSITY_3 "\xef\xa3\x99" // U+f8d9 +#define ICON_MD_DND_FORWARDSLASH "\xee\x98\x91" // U+e611 +#define ICON_MD_DNS "\xee\xa1\xb5" // U+e875 +#define ICON_MD_DO_DISTURB "\xef\x82\x8c" // U+f08c +#define ICON_MD_DO_DISTURB_ALT "\xef\x82\x8d" // U+f08d +#define ICON_MD_DO_DISTURB_OFF "\xef\x82\x8e" // U+f08e +#define ICON_MD_DO_DISTURB_ON "\xef\x82\x8f" // U+f08f +#define ICON_MD_DO_NOT_DISTURB "\xee\x98\x92" // U+e612 +#define ICON_MD_DO_NOT_DISTURB_ALT "\xee\x98\x91" // U+e611 +#define ICON_MD_DO_NOT_DISTURB_OFF "\xee\x99\x83" // U+e643 +#define ICON_MD_DO_NOT_DISTURB_ON "\xee\x99\x84" // U+e644 +#define ICON_MD_DO_NOT_DISTURB_ON_TOTAL_SILENCE "\xee\xbf\xbb" // U+effb +#define ICON_MD_DO_NOT_STEP "\xef\x86\x9f" // U+f19f +#define ICON_MD_DO_NOT_TOUCH "\xef\x86\xb0" // U+f1b0 +#define ICON_MD_DOCK "\xee\x8c\x8e" // U+e30e +#define ICON_MD_DOCUMENT_SCANNER "\xee\x97\xba" // U+e5fa +#define ICON_MD_DOMAIN "\xee\x9f\xae" // U+e7ee +#define ICON_MD_DOMAIN_ADD "\xee\xad\xa2" // U+eb62 +#define ICON_MD_DOMAIN_DISABLED "\xee\x83\xaf" // U+e0ef +#define ICON_MD_DOMAIN_VERIFICATION "\xee\xbd\x8c" // U+ef4c +#define ICON_MD_DONE "\xee\xa1\xb6" // U+e876 +#define ICON_MD_DONE_ALL "\xee\xa1\xb7" // U+e877 +#define ICON_MD_DONE_OUTLINE "\xee\xa4\xaf" // U+e92f +#define ICON_MD_DONUT_LARGE "\xee\xa4\x97" // U+e917 +#define ICON_MD_DONUT_SMALL "\xee\xa4\x98" // U+e918 +#define ICON_MD_DOOR_BACK "\xee\xbf\xbc" // U+effc +#define ICON_MD_DOOR_FRONT "\xee\xbf\xbd" // U+effd +#define ICON_MD_DOOR_SLIDING "\xee\xbf\xbe" // U+effe +#define ICON_MD_DOORBELL "\xee\xbf\xbf" // U+efff +#define ICON_MD_DOUBLE_ARROW "\xee\xa9\x90" // U+ea50 +#define ICON_MD_DOWNHILL_SKIING "\xee\x94\x89" // U+e509 +#define ICON_MD_DOWNLOAD "\xef\x82\x90" // U+f090 +#define ICON_MD_DOWNLOAD_DONE "\xef\x82\x91" // U+f091 +#define ICON_MD_DOWNLOAD_FOR_OFFLINE "\xef\x80\x80" // U+f000 +#define ICON_MD_DOWNLOADING "\xef\x80\x81" // U+f001 +#define ICON_MD_DRAFTS "\xee\x85\x91" // U+e151 +#define ICON_MD_DRAG_HANDLE "\xee\x89\x9d" // U+e25d +#define ICON_MD_DRAG_INDICATOR "\xee\xa5\x85" // U+e945 +#define ICON_MD_DRAW "\xee\x9d\x86" // U+e746 +#define ICON_MD_DRIVE_ETA "\xee\x98\x93" // U+e613 +#define ICON_MD_DRIVE_FILE_MOVE "\xee\x99\xb5" // U+e675 +#define ICON_MD_DRIVE_FILE_MOVE_OUTLINE "\xee\xa6\xa1" // U+e9a1 +#define ICON_MD_DRIVE_FILE_MOVE_RTL "\xee\x9d\xad" // U+e76d +#define ICON_MD_DRIVE_FILE_RENAME_OUTLINE "\xee\xa6\xa2" // U+e9a2 +#define ICON_MD_DRIVE_FOLDER_UPLOAD "\xee\xa6\xa3" // U+e9a3 +#define ICON_MD_DRY "\xef\x86\xb3" // U+f1b3 +#define ICON_MD_DRY_CLEANING "\xee\xa9\x98" // U+ea58 +#define ICON_MD_DUO "\xee\xa6\xa5" // U+e9a5 +#define ICON_MD_DVR "\xee\x86\xb2" // U+e1b2 +#define ICON_MD_DYNAMIC_FEED "\xee\xa8\x94" // U+ea14 +#define ICON_MD_DYNAMIC_FORM "\xef\x86\xbf" // U+f1bf +#define ICON_MD_E_MOBILEDATA "\xef\x80\x82" // U+f002 +#define ICON_MD_EARBUDS "\xef\x80\x83" // U+f003 +#define ICON_MD_EARBUDS_BATTERY "\xef\x80\x84" // U+f004 +#define ICON_MD_EAST "\xef\x87\x9f" // U+f1df +#define ICON_MD_ECO "\xee\xa8\xb5" // U+ea35 +#define ICON_MD_EDGESENSOR_HIGH "\xef\x80\x85" // U+f005 +#define ICON_MD_EDGESENSOR_LOW "\xef\x80\x86" // U+f006 +#define ICON_MD_EDIT "\xee\x8f\x89" // U+e3c9 +#define ICON_MD_EDIT_ATTRIBUTES "\xee\x95\xb8" // U+e578 +#define ICON_MD_EDIT_CALENDAR "\xee\x9d\x82" // U+e742 +#define ICON_MD_EDIT_DOCUMENT "\xef\xa2\x8c" // U+f88c +#define ICON_MD_EDIT_LOCATION "\xee\x95\xa8" // U+e568 +#define ICON_MD_EDIT_LOCATION_ALT "\xee\x87\x85" // U+e1c5 +#define ICON_MD_EDIT_NOTE "\xee\x9d\x85" // U+e745 +#define ICON_MD_EDIT_NOTIFICATIONS "\xee\x94\xa5" // U+e525 +#define ICON_MD_EDIT_OFF "\xee\xa5\x90" // U+e950 +#define ICON_MD_EDIT_ROAD "\xee\xbd\x8d" // U+ef4d +#define ICON_MD_EDIT_SQUARE "\xef\xa2\x8d" // U+f88d +#define ICON_MD_EGG "\xee\xab\x8c" // U+eacc +#define ICON_MD_EGG_ALT "\xee\xab\x88" // U+eac8 +#define ICON_MD_EJECT "\xee\xa3\xbb" // U+e8fb +#define ICON_MD_ELDERLY "\xef\x88\x9a" // U+f21a +#define ICON_MD_ELDERLY_WOMAN "\xee\xad\xa9" // U+eb69 +#define ICON_MD_ELECTRIC_BIKE "\xee\xac\x9b" // U+eb1b +#define ICON_MD_ELECTRIC_BOLT "\xee\xb0\x9c" // U+ec1c +#define ICON_MD_ELECTRIC_CAR "\xee\xac\x9c" // U+eb1c +#define ICON_MD_ELECTRIC_METER "\xee\xb0\x9b" // U+ec1b +#define ICON_MD_ELECTRIC_MOPED "\xee\xac\x9d" // U+eb1d +#define ICON_MD_ELECTRIC_RICKSHAW "\xee\xac\x9e" // U+eb1e +#define ICON_MD_ELECTRIC_SCOOTER "\xee\xac\x9f" // U+eb1f +#define ICON_MD_ELECTRICAL_SERVICES "\xef\x84\x82" // U+f102 +#define ICON_MD_ELEVATOR "\xef\x86\xa0" // U+f1a0 +#define ICON_MD_EMAIL "\xee\x82\xbe" // U+e0be +#define ICON_MD_EMERGENCY "\xee\x87\xab" // U+e1eb +#define ICON_MD_EMERGENCY_RECORDING "\xee\xaf\xb4" // U+ebf4 +#define ICON_MD_EMERGENCY_SHARE "\xee\xaf\xb6" // U+ebf6 +#define ICON_MD_EMOJI_EMOTIONS "\xee\xa8\xa2" // U+ea22 +#define ICON_MD_EMOJI_EVENTS "\xee\xa8\xa3" // U+ea23 +#define ICON_MD_EMOJI_FLAGS "\xee\xa8\x9a" // U+ea1a +#define ICON_MD_EMOJI_FOOD_BEVERAGE "\xee\xa8\x9b" // U+ea1b +#define ICON_MD_EMOJI_NATURE "\xee\xa8\x9c" // U+ea1c +#define ICON_MD_EMOJI_OBJECTS "\xee\xa8\xa4" // U+ea24 +#define ICON_MD_EMOJI_PEOPLE "\xee\xa8\x9d" // U+ea1d +#define ICON_MD_EMOJI_SYMBOLS "\xee\xa8\x9e" // U+ea1e +#define ICON_MD_EMOJI_TRANSPORTATION "\xee\xa8\x9f" // U+ea1f +#define ICON_MD_ENERGY_SAVINGS_LEAF "\xee\xb0\x9a" // U+ec1a +#define ICON_MD_ENGINEERING "\xee\xa8\xbd" // U+ea3d +#define ICON_MD_ENHANCE_PHOTO_TRANSLATE "\xee\xa3\xbc" // U+e8fc +#define ICON_MD_ENHANCED_ENCRYPTION "\xee\x98\xbf" // U+e63f +#define ICON_MD_EQUALIZER "\xee\x80\x9d" // U+e01d +#define ICON_MD_ERROR "\xee\x80\x80" // U+e000 +#define ICON_MD_ERROR_OUTLINE "\xee\x80\x81" // U+e001 +#define ICON_MD_ESCALATOR "\xef\x86\xa1" // U+f1a1 +#define ICON_MD_ESCALATOR_WARNING "\xef\x86\xac" // U+f1ac +#define ICON_MD_EURO "\xee\xa8\x95" // U+ea15 +#define ICON_MD_EURO_SYMBOL "\xee\xa4\xa6" // U+e926 +#define ICON_MD_EV_STATION "\xee\x95\xad" // U+e56d +#define ICON_MD_EVENT "\xee\xa1\xb8" // U+e878 +#define ICON_MD_EVENT_AVAILABLE "\xee\x98\x94" // U+e614 +#define ICON_MD_EVENT_BUSY "\xee\x98\x95" // U+e615 +#define ICON_MD_EVENT_NOTE "\xee\x98\x96" // U+e616 +#define ICON_MD_EVENT_REPEAT "\xee\xad\xbb" // U+eb7b +#define ICON_MD_EVENT_SEAT "\xee\xa4\x83" // U+e903 +#define ICON_MD_EXIT_TO_APP "\xee\xa1\xb9" // U+e879 +#define ICON_MD_EXPAND "\xee\xa5\x8f" // U+e94f +#define ICON_MD_EXPAND_CIRCLE_DOWN "\xee\x9f\x8d" // U+e7cd +#define ICON_MD_EXPAND_LESS "\xee\x97\x8e" // U+e5ce +#define ICON_MD_EXPAND_MORE "\xee\x97\x8f" // U+e5cf +#define ICON_MD_EXPLICIT "\xee\x80\x9e" // U+e01e +#define ICON_MD_EXPLORE "\xee\xa1\xba" // U+e87a +#define ICON_MD_EXPLORE_OFF "\xee\xa6\xa8" // U+e9a8 +#define ICON_MD_EXPOSURE "\xee\x8f\x8a" // U+e3ca +#define ICON_MD_EXPOSURE_MINUS_1 "\xee\x8f\x8b" // U+e3cb +#define ICON_MD_EXPOSURE_MINUS_2 "\xee\x8f\x8c" // U+e3cc +#define ICON_MD_EXPOSURE_NEG_1 "\xee\x8f\x8b" // U+e3cb +#define ICON_MD_EXPOSURE_NEG_2 "\xee\x8f\x8c" // U+e3cc +#define ICON_MD_EXPOSURE_PLUS_1 "\xee\x8f\x8d" // U+e3cd +#define ICON_MD_EXPOSURE_PLUS_2 "\xee\x8f\x8e" // U+e3ce +#define ICON_MD_EXPOSURE_ZERO "\xee\x8f\x8f" // U+e3cf +#define ICON_MD_EXTENSION "\xee\xa1\xbb" // U+e87b +#define ICON_MD_EXTENSION_OFF "\xee\x93\xb5" // U+e4f5 +#define ICON_MD_FACE "\xee\xa1\xbc" // U+e87c +#define ICON_MD_FACE_2 "\xef\xa3\x9a" // U+f8da +#define ICON_MD_FACE_3 "\xef\xa3\x9b" // U+f8db +#define ICON_MD_FACE_4 "\xef\xa3\x9c" // U+f8dc +#define ICON_MD_FACE_5 "\xef\xa3\x9d" // U+f8dd +#define ICON_MD_FACE_6 "\xef\xa3\x9e" // U+f8de +#define ICON_MD_FACE_RETOUCHING_NATURAL "\xee\xbd\x8e" // U+ef4e +#define ICON_MD_FACE_RETOUCHING_OFF "\xef\x80\x87" // U+f007 +#define ICON_MD_FACEBOOK "\xef\x88\xb4" // U+f234 +#define ICON_MD_FACT_CHECK "\xef\x83\x85" // U+f0c5 +#define ICON_MD_FACTORY "\xee\xae\xbc" // U+ebbc +#define ICON_MD_FAMILY_RESTROOM "\xef\x86\xa2" // U+f1a2 +#define ICON_MD_FAST_FORWARD "\xee\x80\x9f" // U+e01f +#define ICON_MD_FAST_REWIND "\xee\x80\xa0" // U+e020 +#define ICON_MD_FASTFOOD "\xee\x95\xba" // U+e57a +#define ICON_MD_FAVORITE "\xee\xa1\xbd" // U+e87d +#define ICON_MD_FAVORITE_BORDER "\xee\xa1\xbe" // U+e87e +#define ICON_MD_FAVORITE_OUTLINE "\xee\xa1\xbe" // U+e87e +#define ICON_MD_FAX "\xee\xab\x98" // U+ead8 +#define ICON_MD_FEATURED_PLAY_LIST "\xee\x81\xad" // U+e06d +#define ICON_MD_FEATURED_VIDEO "\xee\x81\xae" // U+e06e +#define ICON_MD_FEED "\xef\x80\x89" // U+f009 +#define ICON_MD_FEEDBACK "\xee\xa1\xbf" // U+e87f +#define ICON_MD_FEMALE "\xee\x96\x90" // U+e590 +#define ICON_MD_FENCE "\xef\x87\xb6" // U+f1f6 +#define ICON_MD_FESTIVAL "\xee\xa9\xa8" // U+ea68 +#define ICON_MD_FIBER_DVR "\xee\x81\x9d" // U+e05d +#define ICON_MD_FIBER_MANUAL_RECORD "\xee\x81\xa1" // U+e061 +#define ICON_MD_FIBER_NEW "\xee\x81\x9e" // U+e05e +#define ICON_MD_FIBER_PIN "\xee\x81\xaa" // U+e06a +#define ICON_MD_FIBER_SMART_RECORD "\xee\x81\xa2" // U+e062 +#define ICON_MD_FILE_COPY "\xee\x85\xb3" // U+e173 +#define ICON_MD_FILE_DOWNLOAD "\xee\x8b\x84" // U+e2c4 +#define ICON_MD_FILE_DOWNLOAD_DONE "\xee\xa6\xaa" // U+e9aa +#define ICON_MD_FILE_DOWNLOAD_OFF "\xee\x93\xbe" // U+e4fe +#define ICON_MD_FILE_OPEN "\xee\xab\xb3" // U+eaf3 +#define ICON_MD_FILE_PRESENT "\xee\xa8\x8e" // U+ea0e +#define ICON_MD_FILE_UPLOAD "\xee\x8b\x86" // U+e2c6 +#define ICON_MD_FILE_UPLOAD_OFF "\xef\xa2\x86" // U+f886 +#define ICON_MD_FILTER "\xee\x8f\x93" // U+e3d3 +#define ICON_MD_FILTER_1 "\xee\x8f\x90" // U+e3d0 +#define ICON_MD_FILTER_2 "\xee\x8f\x91" // U+e3d1 +#define ICON_MD_FILTER_3 "\xee\x8f\x92" // U+e3d2 +#define ICON_MD_FILTER_4 "\xee\x8f\x94" // U+e3d4 +#define ICON_MD_FILTER_5 "\xee\x8f\x95" // U+e3d5 +#define ICON_MD_FILTER_6 "\xee\x8f\x96" // U+e3d6 +#define ICON_MD_FILTER_7 "\xee\x8f\x97" // U+e3d7 +#define ICON_MD_FILTER_8 "\xee\x8f\x98" // U+e3d8 +#define ICON_MD_FILTER_9 "\xee\x8f\x99" // U+e3d9 +#define ICON_MD_FILTER_9_PLUS "\xee\x8f\x9a" // U+e3da +#define ICON_MD_FILTER_ALT "\xee\xbd\x8f" // U+ef4f +#define ICON_MD_FILTER_ALT_OFF "\xee\xac\xb2" // U+eb32 +#define ICON_MD_FILTER_B_AND_W "\xee\x8f\x9b" // U+e3db +#define ICON_MD_FILTER_CENTER_FOCUS "\xee\x8f\x9c" // U+e3dc +#define ICON_MD_FILTER_DRAMA "\xee\x8f\x9d" // U+e3dd +#define ICON_MD_FILTER_FRAMES "\xee\x8f\x9e" // U+e3de +#define ICON_MD_FILTER_HDR "\xee\x8f\x9f" // U+e3df +#define ICON_MD_FILTER_LIST "\xee\x85\x92" // U+e152 +#define ICON_MD_FILTER_LIST_ALT "\xee\xa5\x8e" // U+e94e +#define ICON_MD_FILTER_LIST_OFF "\xee\xad\x97" // U+eb57 +#define ICON_MD_FILTER_NONE "\xee\x8f\xa0" // U+e3e0 +#define ICON_MD_FILTER_TILT_SHIFT "\xee\x8f\xa2" // U+e3e2 +#define ICON_MD_FILTER_VINTAGE "\xee\x8f\xa3" // U+e3e3 +#define ICON_MD_FIND_IN_PAGE "\xee\xa2\x80" // U+e880 +#define ICON_MD_FIND_REPLACE "\xee\xa2\x81" // U+e881 +#define ICON_MD_FINGERPRINT "\xee\xa4\x8d" // U+e90d +#define ICON_MD_FIRE_EXTINGUISHER "\xef\x87\x98" // U+f1d8 +#define ICON_MD_FIRE_HYDRANT "\xef\x86\xa3" // U+f1a3 +#define ICON_MD_FIRE_HYDRANT_ALT "\xef\xa3\xb1" // U+f8f1 +#define ICON_MD_FIRE_TRUCK "\xef\xa3\xb2" // U+f8f2 +#define ICON_MD_FIREPLACE "\xee\xa9\x83" // U+ea43 +#define ICON_MD_FIRST_PAGE "\xee\x97\x9c" // U+e5dc +#define ICON_MD_FIT_SCREEN "\xee\xa8\x90" // U+ea10 +#define ICON_MD_FITBIT "\xee\xa0\xab" // U+e82b +#define ICON_MD_FITNESS_CENTER "\xee\xad\x83" // U+eb43 +#define ICON_MD_FLAG "\xee\x85\x93" // U+e153 +#define ICON_MD_FLAG_CIRCLE "\xee\xab\xb8" // U+eaf8 +#define ICON_MD_FLAKY "\xee\xbd\x90" // U+ef50 +#define ICON_MD_FLARE "\xee\x8f\xa4" // U+e3e4 +#define ICON_MD_FLASH_AUTO "\xee\x8f\xa5" // U+e3e5 +#define ICON_MD_FLASH_OFF "\xee\x8f\xa6" // U+e3e6 +#define ICON_MD_FLASH_ON "\xee\x8f\xa7" // U+e3e7 +#define ICON_MD_FLASHLIGHT_OFF "\xef\x80\x8a" // U+f00a +#define ICON_MD_FLASHLIGHT_ON "\xef\x80\x8b" // U+f00b +#define ICON_MD_FLATWARE "\xef\x80\x8c" // U+f00c +#define ICON_MD_FLIGHT "\xee\x94\xb9" // U+e539 +#define ICON_MD_FLIGHT_CLASS "\xee\x9f\x8b" // U+e7cb +#define ICON_MD_FLIGHT_LAND "\xee\xa4\x84" // U+e904 +#define ICON_MD_FLIGHT_TAKEOFF "\xee\xa4\x85" // U+e905 +#define ICON_MD_FLIP "\xee\x8f\xa8" // U+e3e8 +#define ICON_MD_FLIP_CAMERA_ANDROID "\xee\xa8\xb7" // U+ea37 +#define ICON_MD_FLIP_CAMERA_IOS "\xee\xa8\xb8" // U+ea38 +#define ICON_MD_FLIP_TO_BACK "\xee\xa2\x82" // U+e882 +#define ICON_MD_FLIP_TO_FRONT "\xee\xa2\x83" // U+e883 +#define ICON_MD_FLOOD "\xee\xaf\xa6" // U+ebe6 +#define ICON_MD_FLOURESCENT "\xee\xb0\xb1" // U+ec31 +#define ICON_MD_FLOURESCENT "\xef\x80\x8d" // U+f00d +#define ICON_MD_FLUORESCENT "\xee\xb0\xb1" // U+ec31 +#define ICON_MD_FLUTTER_DASH "\xee\x80\x8b" // U+e00b +#define ICON_MD_FMD_BAD "\xef\x80\x8e" // U+f00e +#define ICON_MD_FMD_GOOD "\xef\x80\x8f" // U+f00f +#define ICON_MD_FOGGY "\xee\xa0\x98" // U+e818 +#define ICON_MD_FOLDER "\xee\x8b\x87" // U+e2c7 +#define ICON_MD_FOLDER_COPY "\xee\xae\xbd" // U+ebbd +#define ICON_MD_FOLDER_DELETE "\xee\xac\xb4" // U+eb34 +#define ICON_MD_FOLDER_OFF "\xee\xae\x83" // U+eb83 +#define ICON_MD_FOLDER_OPEN "\xee\x8b\x88" // U+e2c8 +#define ICON_MD_FOLDER_SHARED "\xee\x8b\x89" // U+e2c9 +#define ICON_MD_FOLDER_SPECIAL "\xee\x98\x97" // U+e617 +#define ICON_MD_FOLDER_ZIP "\xee\xac\xac" // U+eb2c +#define ICON_MD_FOLLOW_THE_SIGNS "\xef\x88\xa2" // U+f222 +#define ICON_MD_FONT_DOWNLOAD "\xee\x85\xa7" // U+e167 +#define ICON_MD_FONT_DOWNLOAD_OFF "\xee\x93\xb9" // U+e4f9 +#define ICON_MD_FOOD_BANK "\xef\x87\xb2" // U+f1f2 +#define ICON_MD_FOREST "\xee\xaa\x99" // U+ea99 +#define ICON_MD_FORK_LEFT "\xee\xae\xa0" // U+eba0 +#define ICON_MD_FORK_RIGHT "\xee\xae\xac" // U+ebac +#define ICON_MD_FORKLIFT "\xef\xa1\xa8" // U+f868 +#define ICON_MD_FORMAT_ALIGN_CENTER "\xee\x88\xb4" // U+e234 +#define ICON_MD_FORMAT_ALIGN_JUSTIFY "\xee\x88\xb5" // U+e235 +#define ICON_MD_FORMAT_ALIGN_LEFT "\xee\x88\xb6" // U+e236 +#define ICON_MD_FORMAT_ALIGN_RIGHT "\xee\x88\xb7" // U+e237 +#define ICON_MD_FORMAT_BOLD "\xee\x88\xb8" // U+e238 +#define ICON_MD_FORMAT_CLEAR "\xee\x88\xb9" // U+e239 +#define ICON_MD_FORMAT_COLOR_FILL "\xee\x88\xba" // U+e23a +#define ICON_MD_FORMAT_COLOR_RESET "\xee\x88\xbb" // U+e23b +#define ICON_MD_FORMAT_COLOR_TEXT "\xee\x88\xbc" // U+e23c +#define ICON_MD_FORMAT_INDENT_DECREASE "\xee\x88\xbd" // U+e23d +#define ICON_MD_FORMAT_INDENT_INCREASE "\xee\x88\xbe" // U+e23e +#define ICON_MD_FORMAT_ITALIC "\xee\x88\xbf" // U+e23f +#define ICON_MD_FORMAT_LINE_SPACING "\xee\x89\x80" // U+e240 +#define ICON_MD_FORMAT_LIST_BULLETED "\xee\x89\x81" // U+e241 +#define ICON_MD_FORMAT_LIST_NUMBERED "\xee\x89\x82" // U+e242 +#define ICON_MD_FORMAT_LIST_NUMBERED_RTL "\xee\x89\xa7" // U+e267 +#define ICON_MD_FORMAT_OVERLINE "\xee\xad\xa5" // U+eb65 +#define ICON_MD_FORMAT_PAINT "\xee\x89\x83" // U+e243 +#define ICON_MD_FORMAT_QUOTE "\xee\x89\x84" // U+e244 +#define ICON_MD_FORMAT_SHAPES "\xee\x89\x9e" // U+e25e +#define ICON_MD_FORMAT_SIZE "\xee\x89\x85" // U+e245 +#define ICON_MD_FORMAT_STRIKETHROUGH "\xee\x89\x86" // U+e246 +#define ICON_MD_FORMAT_TEXTDIRECTION_L_TO_R "\xee\x89\x87" // U+e247 +#define ICON_MD_FORMAT_TEXTDIRECTION_R_TO_L "\xee\x89\x88" // U+e248 +#define ICON_MD_FORMAT_UNDERLINE "\xee\x89\x89" // U+e249 +#define ICON_MD_FORMAT_UNDERLINED "\xee\x89\x89" // U+e249 +#define ICON_MD_FORT "\xee\xaa\xad" // U+eaad +#define ICON_MD_FORUM "\xee\x82\xbf" // U+e0bf +#define ICON_MD_FORWARD "\xee\x85\x94" // U+e154 +#define ICON_MD_FORWARD_10 "\xee\x81\x96" // U+e056 +#define ICON_MD_FORWARD_30 "\xee\x81\x97" // U+e057 +#define ICON_MD_FORWARD_5 "\xee\x81\x98" // U+e058 +#define ICON_MD_FORWARD_TO_INBOX "\xef\x86\x87" // U+f187 +#define ICON_MD_FOUNDATION "\xef\x88\x80" // U+f200 +#define ICON_MD_FREE_BREAKFAST "\xee\xad\x84" // U+eb44 +#define ICON_MD_FREE_CANCELLATION "\xee\x9d\x88" // U+e748 +#define ICON_MD_FRONT_HAND "\xee\x9d\xa9" // U+e769 +#define ICON_MD_FRONT_LOADER "\xef\xa1\xa9" // U+f869 +#define ICON_MD_FULLSCREEN "\xee\x97\x90" // U+e5d0 +#define ICON_MD_FULLSCREEN_EXIT "\xee\x97\x91" // U+e5d1 +#define ICON_MD_FUNCTIONS "\xee\x89\x8a" // U+e24a +#define ICON_MD_G_MOBILEDATA "\xef\x80\x90" // U+f010 +#define ICON_MD_G_TRANSLATE "\xee\xa4\xa7" // U+e927 +#define ICON_MD_GAMEPAD "\xee\x8c\x8f" // U+e30f +#define ICON_MD_GAMES "\xee\x80\xa1" // U+e021 +#define ICON_MD_GARAGE "\xef\x80\x91" // U+f011 +#define ICON_MD_GAS_METER "\xee\xb0\x99" // U+ec19 +#define ICON_MD_GAVEL "\xee\xa4\x8e" // U+e90e +#define ICON_MD_GENERATING_TOKENS "\xee\x9d\x89" // U+e749 +#define ICON_MD_GESTURE "\xee\x85\x95" // U+e155 +#define ICON_MD_GET_APP "\xee\xa2\x84" // U+e884 +#define ICON_MD_GIF "\xee\xa4\x88" // U+e908 +#define ICON_MD_GIF_BOX "\xee\x9e\xa3" // U+e7a3 +#define ICON_MD_GIRL "\xee\xad\xa8" // U+eb68 +#define ICON_MD_GITE "\xee\x96\x8b" // U+e58b +#define ICON_MD_GOAT "\xf4\x8f\xbf\xbd" // U+10fffd +#define ICON_MD_GOLF_COURSE "\xee\xad\x85" // U+eb45 +#define ICON_MD_GPP_BAD "\xef\x80\x92" // U+f012 +#define ICON_MD_GPP_GOOD "\xef\x80\x93" // U+f013 +#define ICON_MD_GPP_MAYBE "\xef\x80\x94" // U+f014 +#define ICON_MD_GPS_FIXED "\xee\x86\xb3" // U+e1b3 +#define ICON_MD_GPS_NOT_FIXED "\xee\x86\xb4" // U+e1b4 +#define ICON_MD_GPS_OFF "\xee\x86\xb5" // U+e1b5 +#define ICON_MD_GRADE "\xee\xa2\x85" // U+e885 +#define ICON_MD_GRADIENT "\xee\x8f\xa9" // U+e3e9 +#define ICON_MD_GRADING "\xee\xa9\x8f" // U+ea4f +#define ICON_MD_GRAIN "\xee\x8f\xaa" // U+e3ea +#define ICON_MD_GRAPHIC_EQ "\xee\x86\xb8" // U+e1b8 +#define ICON_MD_GRASS "\xef\x88\x85" // U+f205 +#define ICON_MD_GRID_3X3 "\xef\x80\x95" // U+f015 +#define ICON_MD_GRID_4X4 "\xef\x80\x96" // U+f016 +#define ICON_MD_GRID_GOLDENRATIO "\xef\x80\x97" // U+f017 +#define ICON_MD_GRID_OFF "\xee\x8f\xab" // U+e3eb +#define ICON_MD_GRID_ON "\xee\x8f\xac" // U+e3ec +#define ICON_MD_GRID_VIEW "\xee\xa6\xb0" // U+e9b0 +#define ICON_MD_GROUP "\xee\x9f\xaf" // U+e7ef +#define ICON_MD_GROUP_ADD "\xee\x9f\xb0" // U+e7f0 +#define ICON_MD_GROUP_OFF "\xee\x9d\x87" // U+e747 +#define ICON_MD_GROUP_REMOVE "\xee\x9e\xad" // U+e7ad +#define ICON_MD_GROUP_WORK "\xee\xa2\x86" // U+e886 +#define ICON_MD_GROUPS "\xef\x88\xb3" // U+f233 +#define ICON_MD_GROUPS_2 "\xef\xa3\x9f" // U+f8df +#define ICON_MD_GROUPS_3 "\xef\xa3\xa0" // U+f8e0 +#define ICON_MD_H_MOBILEDATA "\xef\x80\x98" // U+f018 +#define ICON_MD_H_PLUS_MOBILEDATA "\xef\x80\x99" // U+f019 +#define ICON_MD_HAIL "\xee\xa6\xb1" // U+e9b1 +#define ICON_MD_HANDSHAKE "\xee\xaf\x8b" // U+ebcb +#define ICON_MD_HANDYMAN "\xef\x84\x8b" // U+f10b +#define ICON_MD_HARDWARE "\xee\xa9\x99" // U+ea59 +#define ICON_MD_HD "\xee\x81\x92" // U+e052 +#define ICON_MD_HDR_AUTO "\xef\x80\x9a" // U+f01a +#define ICON_MD_HDR_AUTO_SELECT "\xef\x80\x9b" // U+f01b +#define ICON_MD_HDR_ENHANCED_SELECT "\xee\xbd\x91" // U+ef51 +#define ICON_MD_HDR_OFF "\xee\x8f\xad" // U+e3ed +#define ICON_MD_HDR_OFF_SELECT "\xef\x80\x9c" // U+f01c +#define ICON_MD_HDR_ON "\xee\x8f\xae" // U+e3ee +#define ICON_MD_HDR_ON_SELECT "\xef\x80\x9d" // U+f01d +#define ICON_MD_HDR_PLUS "\xef\x80\x9e" // U+f01e +#define ICON_MD_HDR_STRONG "\xee\x8f\xb1" // U+e3f1 +#define ICON_MD_HDR_WEAK "\xee\x8f\xb2" // U+e3f2 +#define ICON_MD_HEADPHONES "\xef\x80\x9f" // U+f01f +#define ICON_MD_HEADPHONES_BATTERY "\xef\x80\xa0" // U+f020 +#define ICON_MD_HEADSET "\xee\x8c\x90" // U+e310 +#define ICON_MD_HEADSET_MIC "\xee\x8c\x91" // U+e311 +#define ICON_MD_HEADSET_OFF "\xee\x8c\xba" // U+e33a +#define ICON_MD_HEALING "\xee\x8f\xb3" // U+e3f3 +#define ICON_MD_HEALTH_AND_SAFETY "\xee\x87\x95" // U+e1d5 +#define ICON_MD_HEARING "\xee\x80\xa3" // U+e023 +#define ICON_MD_HEARING_DISABLED "\xef\x84\x84" // U+f104 +#define ICON_MD_HEART_BROKEN "\xee\xab\x82" // U+eac2 +#define ICON_MD_HEAT_PUMP "\xee\xb0\x98" // U+ec18 +#define ICON_MD_HEIGHT "\xee\xa8\x96" // U+ea16 +#define ICON_MD_HELP "\xee\xa2\x87" // U+e887 +#define ICON_MD_HELP_CENTER "\xef\x87\x80" // U+f1c0 +#define ICON_MD_HELP_OUTLINE "\xee\xa3\xbd" // U+e8fd +#define ICON_MD_HEVC "\xef\x80\xa1" // U+f021 +#define ICON_MD_HEXAGON "\xee\xac\xb9" // U+eb39 +#define ICON_MD_HIDE_IMAGE "\xef\x80\xa2" // U+f022 +#define ICON_MD_HIDE_SOURCE "\xef\x80\xa3" // U+f023 +#define ICON_MD_HIGH_QUALITY "\xee\x80\xa4" // U+e024 +#define ICON_MD_HIGHLIGHT "\xee\x89\x9f" // U+e25f +#define ICON_MD_HIGHLIGHT_ALT "\xee\xbd\x92" // U+ef52 +#define ICON_MD_HIGHLIGHT_OFF "\xee\xa2\x88" // U+e888 +#define ICON_MD_HIGHLIGHT_REMOVE "\xee\xa2\x88" // U+e888 +#define ICON_MD_HIKING "\xee\x94\x8a" // U+e50a +#define ICON_MD_HISTORY "\xee\xa2\x89" // U+e889 +#define ICON_MD_HISTORY_EDU "\xee\xa8\xbe" // U+ea3e +#define ICON_MD_HISTORY_TOGGLE_OFF "\xef\x85\xbd" // U+f17d +#define ICON_MD_HIVE "\xee\xaa\xa6" // U+eaa6 +#define ICON_MD_HLS "\xee\xae\x8a" // U+eb8a +#define ICON_MD_HLS_OFF "\xee\xae\x8c" // U+eb8c +#define ICON_MD_HOLIDAY_VILLAGE "\xee\x96\x8a" // U+e58a +#define ICON_MD_HOME "\xee\xa2\x8a" // U+e88a +#define ICON_MD_HOME_FILLED "\xee\xa6\xb2" // U+e9b2 +#define ICON_MD_HOME_MAX "\xef\x80\xa4" // U+f024 +#define ICON_MD_HOME_MINI "\xef\x80\xa5" // U+f025 +#define ICON_MD_HOME_REPAIR_SERVICE "\xef\x84\x80" // U+f100 +#define ICON_MD_HOME_WORK "\xee\xa8\x89" // U+ea09 +#define ICON_MD_HORIZONTAL_DISTRIBUTE "\xee\x80\x94" // U+e014 +#define ICON_MD_HORIZONTAL_RULE "\xef\x84\x88" // U+f108 +#define ICON_MD_HORIZONTAL_SPLIT "\xee\xa5\x87" // U+e947 +#define ICON_MD_HOT_TUB "\xee\xad\x86" // U+eb46 +#define ICON_MD_HOTEL "\xee\x94\xba" // U+e53a +#define ICON_MD_HOTEL_CLASS "\xee\x9d\x83" // U+e743 +#define ICON_MD_HOURGLASS_BOTTOM "\xee\xa9\x9c" // U+ea5c +#define ICON_MD_HOURGLASS_DISABLED "\xee\xbd\x93" // U+ef53 +#define ICON_MD_HOURGLASS_EMPTY "\xee\xa2\x8b" // U+e88b +#define ICON_MD_HOURGLASS_FULL "\xee\xa2\x8c" // U+e88c +#define ICON_MD_HOURGLASS_TOP "\xee\xa9\x9b" // U+ea5b +#define ICON_MD_HOUSE "\xee\xa9\x84" // U+ea44 +#define ICON_MD_HOUSE_SIDING "\xef\x88\x82" // U+f202 +#define ICON_MD_HOUSEBOAT "\xee\x96\x84" // U+e584 +#define ICON_MD_HOW_TO_REG "\xee\x85\xb4" // U+e174 +#define ICON_MD_HOW_TO_VOTE "\xee\x85\xb5" // U+e175 +#define ICON_MD_HTML "\xee\xad\xbe" // U+eb7e +#define ICON_MD_HTTP "\xee\xa4\x82" // U+e902 +#define ICON_MD_HTTPS "\xee\xa2\x8d" // U+e88d +#define ICON_MD_HUB "\xee\xa7\xb4" // U+e9f4 +#define ICON_MD_HVAC "\xef\x84\x8e" // U+f10e +#define ICON_MD_ICE_SKATING "\xee\x94\x8b" // U+e50b +#define ICON_MD_ICECREAM "\xee\xa9\xa9" // U+ea69 +#define ICON_MD_IMAGE "\xee\x8f\xb4" // U+e3f4 +#define ICON_MD_IMAGE_ASPECT_RATIO "\xee\x8f\xb5" // U+e3f5 +#define ICON_MD_IMAGE_NOT_SUPPORTED "\xef\x84\x96" // U+f116 +#define ICON_MD_IMAGE_SEARCH "\xee\x90\xbf" // U+e43f +#define ICON_MD_IMAGESEARCH_ROLLER "\xee\xa6\xb4" // U+e9b4 +#define ICON_MD_IMPORT_CONTACTS "\xee\x83\xa0" // U+e0e0 +#define ICON_MD_IMPORT_EXPORT "\xee\x83\x83" // U+e0c3 +#define ICON_MD_IMPORTANT_DEVICES "\xee\xa4\x92" // U+e912 +#define ICON_MD_INBOX "\xee\x85\x96" // U+e156 +#define ICON_MD_INCOMPLETE_CIRCLE "\xee\x9e\x9b" // U+e79b +#define ICON_MD_INDETERMINATE_CHECK_BOX "\xee\xa4\x89" // U+e909 +#define ICON_MD_INFO "\xee\xa2\x8e" // U+e88e +#define ICON_MD_INFO_OUTLINE "\xee\xa2\x8f" // U+e88f +#define ICON_MD_INPUT "\xee\xa2\x90" // U+e890 +#define ICON_MD_INSERT_CHART "\xee\x89\x8b" // U+e24b +#define ICON_MD_INSERT_CHART_OUTLINED "\xee\x89\xaa" // U+e26a +#define ICON_MD_INSERT_COMMENT "\xee\x89\x8c" // U+e24c +#define ICON_MD_INSERT_DRIVE_FILE "\xee\x89\x8d" // U+e24d +#define ICON_MD_INSERT_EMOTICON "\xee\x89\x8e" // U+e24e +#define ICON_MD_INSERT_INVITATION "\xee\x89\x8f" // U+e24f +#define ICON_MD_INSERT_LINK "\xee\x89\x90" // U+e250 +#define ICON_MD_INSERT_PAGE_BREAK "\xee\xab\x8a" // U+eaca +#define ICON_MD_INSERT_PHOTO "\xee\x89\x91" // U+e251 +#define ICON_MD_INSIGHTS "\xef\x82\x92" // U+f092 +#define ICON_MD_INSTALL_DESKTOP "\xee\xad\xb1" // U+eb71 +#define ICON_MD_INSTALL_MOBILE "\xee\xad\xb2" // U+eb72 +#define ICON_MD_INTEGRATION_INSTRUCTIONS "\xee\xbd\x94" // U+ef54 +#define ICON_MD_INTERESTS "\xee\x9f\x88" // U+e7c8 +#define ICON_MD_INTERPRETER_MODE "\xee\xa0\xbb" // U+e83b +#define ICON_MD_INVENTORY "\xee\x85\xb9" // U+e179 +#define ICON_MD_INVENTORY_2 "\xee\x86\xa1" // U+e1a1 +#define ICON_MD_INVERT_COLORS "\xee\xa2\x91" // U+e891 +#define ICON_MD_INVERT_COLORS_OFF "\xee\x83\x84" // U+e0c4 +#define ICON_MD_INVERT_COLORS_ON "\xee\xa2\x91" // U+e891 +#define ICON_MD_IOS_SHARE "\xee\x9a\xb8" // U+e6b8 +#define ICON_MD_IRON "\xee\x96\x83" // U+e583 +#define ICON_MD_ISO "\xee\x8f\xb6" // U+e3f6 +#define ICON_MD_JAVASCRIPT "\xee\xad\xbc" // U+eb7c +#define ICON_MD_JOIN_FULL "\xee\xab\xab" // U+eaeb +#define ICON_MD_JOIN_INNER "\xee\xab\xb4" // U+eaf4 +#define ICON_MD_JOIN_LEFT "\xee\xab\xb2" // U+eaf2 +#define ICON_MD_JOIN_RIGHT "\xee\xab\xaa" // U+eaea +#define ICON_MD_KAYAKING "\xee\x94\x8c" // U+e50c +#define ICON_MD_KEBAB_DINING "\xee\xa1\x82" // U+e842 +#define ICON_MD_KEY "\xee\x9c\xbc" // U+e73c +#define ICON_MD_KEY_OFF "\xee\xae\x84" // U+eb84 +#define ICON_MD_KEYBOARD "\xee\x8c\x92" // U+e312 +#define ICON_MD_KEYBOARD_ALT "\xef\x80\xa8" // U+f028 +#define ICON_MD_KEYBOARD_ARROW_DOWN "\xee\x8c\x93" // U+e313 +#define ICON_MD_KEYBOARD_ARROW_LEFT "\xee\x8c\x94" // U+e314 +#define ICON_MD_KEYBOARD_ARROW_RIGHT "\xee\x8c\x95" // U+e315 +#define ICON_MD_KEYBOARD_ARROW_UP "\xee\x8c\x96" // U+e316 +#define ICON_MD_KEYBOARD_BACKSPACE "\xee\x8c\x97" // U+e317 +#define ICON_MD_KEYBOARD_CAPSLOCK "\xee\x8c\x98" // U+e318 +#define ICON_MD_KEYBOARD_COMMAND "\xee\xab\xa0" // U+eae0 +#define ICON_MD_KEYBOARD_COMMAND_KEY "\xee\xab\xa7" // U+eae7 +#define ICON_MD_KEYBOARD_CONTROL "\xee\x97\x93" // U+e5d3 +#define ICON_MD_KEYBOARD_CONTROL_KEY "\xee\xab\xa6" // U+eae6 +#define ICON_MD_KEYBOARD_DOUBLE_ARROW_DOWN "\xee\xab\x90" // U+ead0 +#define ICON_MD_KEYBOARD_DOUBLE_ARROW_LEFT "\xee\xab\x83" // U+eac3 +#define ICON_MD_KEYBOARD_DOUBLE_ARROW_RIGHT "\xee\xab\x89" // U+eac9 +#define ICON_MD_KEYBOARD_DOUBLE_ARROW_UP "\xee\xab\x8f" // U+eacf +#define ICON_MD_KEYBOARD_HIDE "\xee\x8c\x9a" // U+e31a +#define ICON_MD_KEYBOARD_OPTION "\xee\xab\x9f" // U+eadf +#define ICON_MD_KEYBOARD_OPTION_KEY "\xee\xab\xa8" // U+eae8 +#define ICON_MD_KEYBOARD_RETURN "\xee\x8c\x9b" // U+e31b +#define ICON_MD_KEYBOARD_TAB "\xee\x8c\x9c" // U+e31c +#define ICON_MD_KEYBOARD_VOICE "\xee\x8c\x9d" // U+e31d +#define ICON_MD_KING_BED "\xee\xa9\x85" // U+ea45 +#define ICON_MD_KITCHEN "\xee\xad\x87" // U+eb47 +#define ICON_MD_KITESURFING "\xee\x94\x8d" // U+e50d +#define ICON_MD_LABEL "\xee\xa2\x92" // U+e892 +#define ICON_MD_LABEL_IMPORTANT "\xee\xa4\xb7" // U+e937 +#define ICON_MD_LABEL_IMPORTANT_OUTLINE "\xee\xa5\x88" // U+e948 +#define ICON_MD_LABEL_OFF "\xee\xa6\xb6" // U+e9b6 +#define ICON_MD_LABEL_OUTLINE "\xee\xa2\x93" // U+e893 +#define ICON_MD_LAN "\xee\xac\xaf" // U+eb2f +#define ICON_MD_LANDSCAPE "\xee\x8f\xb7" // U+e3f7 +#define ICON_MD_LANDSLIDE "\xee\xaf\x97" // U+ebd7 +#define ICON_MD_LANGUAGE "\xee\xa2\x94" // U+e894 +#define ICON_MD_LAPTOP "\xee\x8c\x9e" // U+e31e +#define ICON_MD_LAPTOP_CHROMEBOOK "\xee\x8c\x9f" // U+e31f +#define ICON_MD_LAPTOP_MAC "\xee\x8c\xa0" // U+e320 +#define ICON_MD_LAPTOP_WINDOWS "\xee\x8c\xa1" // U+e321 +#define ICON_MD_LAST_PAGE "\xee\x97\x9d" // U+e5dd +#define ICON_MD_LAUNCH "\xee\xa2\x95" // U+e895 +#define ICON_MD_LAYERS "\xee\x94\xbb" // U+e53b +#define ICON_MD_LAYERS_CLEAR "\xee\x94\xbc" // U+e53c +#define ICON_MD_LEADERBOARD "\xef\x88\x8c" // U+f20c +#define ICON_MD_LEAK_ADD "\xee\x8f\xb8" // U+e3f8 +#define ICON_MD_LEAK_REMOVE "\xee\x8f\xb9" // U+e3f9 +#define ICON_MD_LEAVE_BAGS_AT_HOME "\xef\x88\x9b" // U+f21b +#define ICON_MD_LEGEND_TOGGLE "\xef\x84\x9b" // U+f11b +#define ICON_MD_LENS "\xee\x8f\xba" // U+e3fa +#define ICON_MD_LENS_BLUR "\xef\x80\xa9" // U+f029 +#define ICON_MD_LIBRARY_ADD "\xee\x80\xae" // U+e02e +#define ICON_MD_LIBRARY_ADD_CHECK "\xee\xa6\xb7" // U+e9b7 +#define ICON_MD_LIBRARY_BOOKS "\xee\x80\xaf" // U+e02f +#define ICON_MD_LIBRARY_MUSIC "\xee\x80\xb0" // U+e030 +#define ICON_MD_LIGHT "\xef\x80\xaa" // U+f02a +#define ICON_MD_LIGHT_MODE "\xee\x94\x98" // U+e518 +#define ICON_MD_LIGHTBULB "\xee\x83\xb0" // U+e0f0 +#define ICON_MD_LIGHTBULB_CIRCLE "\xee\xaf\xbe" // U+ebfe +#define ICON_MD_LIGHTBULB_OUTLINE "\xee\xa4\x8f" // U+e90f +#define ICON_MD_LINE_AXIS "\xee\xaa\x9a" // U+ea9a +#define ICON_MD_LINE_STYLE "\xee\xa4\x99" // U+e919 +#define ICON_MD_LINE_WEIGHT "\xee\xa4\x9a" // U+e91a +#define ICON_MD_LINEAR_SCALE "\xee\x89\xa0" // U+e260 +#define ICON_MD_LINK "\xee\x85\x97" // U+e157 +#define ICON_MD_LINK_OFF "\xee\x85\xaf" // U+e16f +#define ICON_MD_LINKED_CAMERA "\xee\x90\xb8" // U+e438 +#define ICON_MD_LIQUOR "\xee\xa9\xa0" // U+ea60 +#define ICON_MD_LIST "\xee\xa2\x96" // U+e896 +#define ICON_MD_LIST_ALT "\xee\x83\xae" // U+e0ee +#define ICON_MD_LIVE_HELP "\xee\x83\x86" // U+e0c6 +#define ICON_MD_LIVE_TV "\xee\x98\xb9" // U+e639 +#define ICON_MD_LIVING "\xef\x80\xab" // U+f02b +#define ICON_MD_LOCAL_ACTIVITY "\xee\x94\xbf" // U+e53f +#define ICON_MD_LOCAL_AIRPORT "\xee\x94\xbd" // U+e53d +#define ICON_MD_LOCAL_ATM "\xee\x94\xbe" // U+e53e +#define ICON_MD_LOCAL_ATTRACTION "\xee\x94\xbf" // U+e53f +#define ICON_MD_LOCAL_BAR "\xee\x95\x80" // U+e540 +#define ICON_MD_LOCAL_CAFE "\xee\x95\x81" // U+e541 +#define ICON_MD_LOCAL_CAR_WASH "\xee\x95\x82" // U+e542 +#define ICON_MD_LOCAL_CONVENIENCE_STORE "\xee\x95\x83" // U+e543 +#define ICON_MD_LOCAL_DINING "\xee\x95\x96" // U+e556 +#define ICON_MD_LOCAL_DRINK "\xee\x95\x84" // U+e544 +#define ICON_MD_LOCAL_FIRE_DEPARTMENT "\xee\xbd\x95" // U+ef55 +#define ICON_MD_LOCAL_FLORIST "\xee\x95\x85" // U+e545 +#define ICON_MD_LOCAL_GAS_STATION "\xee\x95\x86" // U+e546 +#define ICON_MD_LOCAL_GROCERY_STORE "\xee\x95\x87" // U+e547 +#define ICON_MD_LOCAL_HOSPITAL "\xee\x95\x88" // U+e548 +#define ICON_MD_LOCAL_HOTEL "\xee\x95\x89" // U+e549 +#define ICON_MD_LOCAL_LAUNDRY_SERVICE "\xee\x95\x8a" // U+e54a +#define ICON_MD_LOCAL_LIBRARY "\xee\x95\x8b" // U+e54b +#define ICON_MD_LOCAL_MALL "\xee\x95\x8c" // U+e54c +#define ICON_MD_LOCAL_MOVIES "\xee\x95\x8d" // U+e54d +#define ICON_MD_LOCAL_OFFER "\xee\x95\x8e" // U+e54e +#define ICON_MD_LOCAL_PARKING "\xee\x95\x8f" // U+e54f +#define ICON_MD_LOCAL_PHARMACY "\xee\x95\x90" // U+e550 +#define ICON_MD_LOCAL_PHONE "\xee\x95\x91" // U+e551 +#define ICON_MD_LOCAL_PIZZA "\xee\x95\x92" // U+e552 +#define ICON_MD_LOCAL_PLAY "\xee\x95\x93" // U+e553 +#define ICON_MD_LOCAL_POLICE "\xee\xbd\x96" // U+ef56 +#define ICON_MD_LOCAL_POST_OFFICE "\xee\x95\x94" // U+e554 +#define ICON_MD_LOCAL_PRINT_SHOP "\xee\x95\x95" // U+e555 +#define ICON_MD_LOCAL_PRINTSHOP "\xee\x95\x95" // U+e555 +#define ICON_MD_LOCAL_RESTAURANT "\xee\x95\x96" // U+e556 +#define ICON_MD_LOCAL_SEE "\xee\x95\x97" // U+e557 +#define ICON_MD_LOCAL_SHIPPING "\xee\x95\x98" // U+e558 +#define ICON_MD_LOCAL_TAXI "\xee\x95\x99" // U+e559 +#define ICON_MD_LOCATION_CITY "\xee\x9f\xb1" // U+e7f1 +#define ICON_MD_LOCATION_DISABLED "\xee\x86\xb6" // U+e1b6 +#define ICON_MD_LOCATION_HISTORY "\xee\x95\x9a" // U+e55a +#define ICON_MD_LOCATION_OFF "\xee\x83\x87" // U+e0c7 +#define ICON_MD_LOCATION_ON "\xee\x83\x88" // U+e0c8 +#define ICON_MD_LOCATION_PIN "\xef\x87\x9b" // U+f1db +#define ICON_MD_LOCATION_SEARCHING "\xee\x86\xb7" // U+e1b7 +#define ICON_MD_LOCK "\xee\xa2\x97" // U+e897 +#define ICON_MD_LOCK_CLOCK "\xee\xbd\x97" // U+ef57 +#define ICON_MD_LOCK_OPEN "\xee\xa2\x98" // U+e898 +#define ICON_MD_LOCK_OUTLINE "\xee\xa2\x99" // U+e899 +#define ICON_MD_LOCK_PERSON "\xef\xa3\xb3" // U+f8f3 +#define ICON_MD_LOCK_RESET "\xee\xab\x9e" // U+eade +#define ICON_MD_LOGIN "\xee\xa9\xb7" // U+ea77 +#define ICON_MD_LOGO_DEV "\xee\xab\x96" // U+ead6 +#define ICON_MD_LOGOUT "\xee\xa6\xba" // U+e9ba +#define ICON_MD_LOOKS "\xee\x8f\xbc" // U+e3fc +#define ICON_MD_LOOKS_3 "\xee\x8f\xbb" // U+e3fb +#define ICON_MD_LOOKS_4 "\xee\x8f\xbd" // U+e3fd +#define ICON_MD_LOOKS_5 "\xee\x8f\xbe" // U+e3fe +#define ICON_MD_LOOKS_6 "\xee\x8f\xbf" // U+e3ff +#define ICON_MD_LOOKS_ONE "\xee\x90\x80" // U+e400 +#define ICON_MD_LOOKS_TWO "\xee\x90\x81" // U+e401 +#define ICON_MD_LOOP "\xee\x80\xa8" // U+e028 +#define ICON_MD_LOUPE "\xee\x90\x82" // U+e402 +#define ICON_MD_LOW_PRIORITY "\xee\x85\xad" // U+e16d +#define ICON_MD_LOYALTY "\xee\xa2\x9a" // U+e89a +#define ICON_MD_LTE_MOBILEDATA "\xef\x80\xac" // U+f02c +#define ICON_MD_LTE_PLUS_MOBILEDATA "\xef\x80\xad" // U+f02d +#define ICON_MD_LUGGAGE "\xef\x88\xb5" // U+f235 +#define ICON_MD_LUNCH_DINING "\xee\xa9\xa1" // U+ea61 +#define ICON_MD_LYRICS "\xee\xb0\x8b" // U+ec0b +#define ICON_MD_MACRO_OFF "\xef\xa3\x92" // U+f8d2 +#define ICON_MD_MAIL "\xee\x85\x98" // U+e158 +#define ICON_MD_MAIL_LOCK "\xee\xb0\x8a" // U+ec0a +#define ICON_MD_MAIL_OUTLINE "\xee\x83\xa1" // U+e0e1 +#define ICON_MD_MALE "\xee\x96\x8e" // U+e58e +#define ICON_MD_MAN "\xee\x93\xab" // U+e4eb +#define ICON_MD_MAN_2 "\xef\xa3\xa1" // U+f8e1 +#define ICON_MD_MAN_3 "\xef\xa3\xa2" // U+f8e2 +#define ICON_MD_MAN_4 "\xef\xa3\xa3" // U+f8e3 +#define ICON_MD_MANAGE_ACCOUNTS "\xef\x80\xae" // U+f02e +#define ICON_MD_MANAGE_HISTORY "\xee\xaf\xa7" // U+ebe7 +#define ICON_MD_MANAGE_SEARCH "\xef\x80\xaf" // U+f02f +#define ICON_MD_MAP "\xee\x95\x9b" // U+e55b +#define ICON_MD_MAPS_HOME_WORK "\xef\x80\xb0" // U+f030 +#define ICON_MD_MAPS_UGC "\xee\xbd\x98" // U+ef58 +#define ICON_MD_MARGIN "\xee\xa6\xbb" // U+e9bb +#define ICON_MD_MARK_AS_UNREAD "\xee\xa6\xbc" // U+e9bc +#define ICON_MD_MARK_CHAT_READ "\xef\x86\x8b" // U+f18b +#define ICON_MD_MARK_CHAT_UNREAD "\xef\x86\x89" // U+f189 +#define ICON_MD_MARK_EMAIL_READ "\xef\x86\x8c" // U+f18c +#define ICON_MD_MARK_EMAIL_UNREAD "\xef\x86\x8a" // U+f18a +#define ICON_MD_MARK_UNREAD_CHAT_ALT "\xee\xae\x9d" // U+eb9d +#define ICON_MD_MARKUNREAD "\xee\x85\x99" // U+e159 +#define ICON_MD_MARKUNREAD_MAILBOX "\xee\xa2\x9b" // U+e89b +#define ICON_MD_MASKS "\xef\x88\x98" // U+f218 +#define ICON_MD_MAXIMIZE "\xee\xa4\xb0" // U+e930 +#define ICON_MD_MEDIA_BLUETOOTH_OFF "\xef\x80\xb1" // U+f031 +#define ICON_MD_MEDIA_BLUETOOTH_ON "\xef\x80\xb2" // U+f032 +#define ICON_MD_MEDIATION "\xee\xbe\xa7" // U+efa7 +#define ICON_MD_MEDICAL_INFORMATION "\xee\xaf\xad" // U+ebed +#define ICON_MD_MEDICAL_SERVICES "\xef\x84\x89" // U+f109 +#define ICON_MD_MEDICATION "\xef\x80\xb3" // U+f033 +#define ICON_MD_MEDICATION_LIQUID "\xee\xaa\x87" // U+ea87 +#define ICON_MD_MEETING_ROOM "\xee\xad\x8f" // U+eb4f +#define ICON_MD_MEMORY "\xee\x8c\xa2" // U+e322 +#define ICON_MD_MENU "\xee\x97\x92" // U+e5d2 +#define ICON_MD_MENU_BOOK "\xee\xa8\x99" // U+ea19 +#define ICON_MD_MENU_OPEN "\xee\xa6\xbd" // U+e9bd +#define ICON_MD_MERGE "\xee\xae\x98" // U+eb98 +#define ICON_MD_MERGE_TYPE "\xee\x89\x92" // U+e252 +#define ICON_MD_MESSAGE "\xee\x83\x89" // U+e0c9 +#define ICON_MD_MESSENGER "\xee\x83\x8a" // U+e0ca +#define ICON_MD_MESSENGER_OUTLINE "\xee\x83\x8b" // U+e0cb +#define ICON_MD_MIC "\xee\x80\xa9" // U+e029 +#define ICON_MD_MIC_EXTERNAL_OFF "\xee\xbd\x99" // U+ef59 +#define ICON_MD_MIC_EXTERNAL_ON "\xee\xbd\x9a" // U+ef5a +#define ICON_MD_MIC_NONE "\xee\x80\xaa" // U+e02a +#define ICON_MD_MIC_OFF "\xee\x80\xab" // U+e02b +#define ICON_MD_MICROWAVE "\xef\x88\x84" // U+f204 +#define ICON_MD_MILITARY_TECH "\xee\xa8\xbf" // U+ea3f +#define ICON_MD_MINIMIZE "\xee\xa4\xb1" // U+e931 +#define ICON_MD_MINOR_CRASH "\xee\xaf\xb1" // U+ebf1 +#define ICON_MD_MISCELLANEOUS_SERVICES "\xef\x84\x8c" // U+f10c +#define ICON_MD_MISSED_VIDEO_CALL "\xee\x81\xb3" // U+e073 +#define ICON_MD_MMS "\xee\x98\x98" // U+e618 +#define ICON_MD_MOBILE_FRIENDLY "\xee\x88\x80" // U+e200 +#define ICON_MD_MOBILE_OFF "\xee\x88\x81" // U+e201 +#define ICON_MD_MOBILE_SCREEN_SHARE "\xee\x83\xa7" // U+e0e7 +#define ICON_MD_MOBILEDATA_OFF "\xef\x80\xb4" // U+f034 +#define ICON_MD_MODE "\xef\x82\x97" // U+f097 +#define ICON_MD_MODE_COMMENT "\xee\x89\x93" // U+e253 +#define ICON_MD_MODE_EDIT "\xee\x89\x94" // U+e254 +#define ICON_MD_MODE_EDIT_OUTLINE "\xef\x80\xb5" // U+f035 +#define ICON_MD_MODE_FAN_OFF "\xee\xb0\x97" // U+ec17 +#define ICON_MD_MODE_NIGHT "\xef\x80\xb6" // U+f036 +#define ICON_MD_MODE_OF_TRAVEL "\xee\x9f\x8e" // U+e7ce +#define ICON_MD_MODE_STANDBY "\xef\x80\xb7" // U+f037 +#define ICON_MD_MODEL_TRAINING "\xef\x83\x8f" // U+f0cf +#define ICON_MD_MONETIZATION_ON "\xee\x89\xa3" // U+e263 +#define ICON_MD_MONEY "\xee\x95\xbd" // U+e57d +#define ICON_MD_MONEY_OFF "\xee\x89\x9c" // U+e25c +#define ICON_MD_MONEY_OFF_CSRED "\xef\x80\xb8" // U+f038 +#define ICON_MD_MONITOR "\xee\xbd\x9b" // U+ef5b +#define ICON_MD_MONITOR_HEART "\xee\xaa\xa2" // U+eaa2 +#define ICON_MD_MONITOR_WEIGHT "\xef\x80\xb9" // U+f039 +#define ICON_MD_MONOCHROME_PHOTOS "\xee\x90\x83" // U+e403 +#define ICON_MD_MOOD "\xee\x9f\xb2" // U+e7f2 +#define ICON_MD_MOOD_BAD "\xee\x9f\xb3" // U+e7f3 +#define ICON_MD_MOPED "\xee\xac\xa8" // U+eb28 +#define ICON_MD_MORE "\xee\x98\x99" // U+e619 +#define ICON_MD_MORE_HORIZ "\xee\x97\x93" // U+e5d3 +#define ICON_MD_MORE_TIME "\xee\xa9\x9d" // U+ea5d +#define ICON_MD_MORE_VERT "\xee\x97\x94" // U+e5d4 +#define ICON_MD_MOSQUE "\xee\xaa\xb2" // U+eab2 +#define ICON_MD_MOTION_PHOTOS_AUTO "\xef\x80\xba" // U+f03a +#define ICON_MD_MOTION_PHOTOS_OFF "\xee\xa7\x80" // U+e9c0 +#define ICON_MD_MOTION_PHOTOS_ON "\xee\xa7\x81" // U+e9c1 +#define ICON_MD_MOTION_PHOTOS_PAUSE "\xef\x88\xa7" // U+f227 +#define ICON_MD_MOTION_PHOTOS_PAUSED "\xee\xa7\x82" // U+e9c2 +#define ICON_MD_MOTORCYCLE "\xee\xa4\x9b" // U+e91b +#define ICON_MD_MOUSE "\xee\x8c\xa3" // U+e323 +#define ICON_MD_MOVE_DOWN "\xee\xad\xa1" // U+eb61 +#define ICON_MD_MOVE_TO_INBOX "\xee\x85\xa8" // U+e168 +#define ICON_MD_MOVE_UP "\xee\xad\xa4" // U+eb64 +#define ICON_MD_MOVIE "\xee\x80\xac" // U+e02c +#define ICON_MD_MOVIE_CREATION "\xee\x90\x84" // U+e404 +#define ICON_MD_MOVIE_FILTER "\xee\x90\xba" // U+e43a +#define ICON_MD_MOVING "\xee\x94\x81" // U+e501 +#define ICON_MD_MP "\xee\xa7\x83" // U+e9c3 +#define ICON_MD_MULTILINE_CHART "\xee\x9b\x9f" // U+e6df +#define ICON_MD_MULTIPLE_STOP "\xef\x86\xb9" // U+f1b9 +#define ICON_MD_MULTITRACK_AUDIO "\xee\x86\xb8" // U+e1b8 +#define ICON_MD_MUSEUM "\xee\xa8\xb6" // U+ea36 +#define ICON_MD_MUSIC_NOTE "\xee\x90\x85" // U+e405 +#define ICON_MD_MUSIC_OFF "\xee\x91\x80" // U+e440 +#define ICON_MD_MUSIC_VIDEO "\xee\x81\xa3" // U+e063 +#define ICON_MD_MY_LIBRARY_ADD "\xee\x80\xae" // U+e02e +#define ICON_MD_MY_LIBRARY_BOOKS "\xee\x80\xaf" // U+e02f +#define ICON_MD_MY_LIBRARY_MUSIC "\xee\x80\xb0" // U+e030 +#define ICON_MD_MY_LOCATION "\xee\x95\x9c" // U+e55c +#define ICON_MD_NAT "\xee\xbd\x9c" // U+ef5c +#define ICON_MD_NATURE "\xee\x90\x86" // U+e406 +#define ICON_MD_NATURE_PEOPLE "\xee\x90\x87" // U+e407 +#define ICON_MD_NAVIGATE_BEFORE "\xee\x90\x88" // U+e408 +#define ICON_MD_NAVIGATE_NEXT "\xee\x90\x89" // U+e409 +#define ICON_MD_NAVIGATION "\xee\x95\x9d" // U+e55d +#define ICON_MD_NEAR_ME "\xee\x95\xa9" // U+e569 +#define ICON_MD_NEAR_ME_DISABLED "\xef\x87\xaf" // U+f1ef +#define ICON_MD_NEARBY_ERROR "\xef\x80\xbb" // U+f03b +#define ICON_MD_NEARBY_OFF "\xef\x80\xbc" // U+f03c +#define ICON_MD_NEST_CAM_WIRED_STAND "\xee\xb0\x96" // U+ec16 +#define ICON_MD_NETWORK_CELL "\xee\x86\xb9" // U+e1b9 +#define ICON_MD_NETWORK_CHECK "\xee\x99\x80" // U+e640 +#define ICON_MD_NETWORK_LOCKED "\xee\x98\x9a" // U+e61a +#define ICON_MD_NETWORK_PING "\xee\xaf\x8a" // U+ebca +#define ICON_MD_NETWORK_WIFI "\xee\x86\xba" // U+e1ba +#define ICON_MD_NETWORK_WIFI_1_BAR "\xee\xaf\xa4" // U+ebe4 +#define ICON_MD_NETWORK_WIFI_2_BAR "\xee\xaf\x96" // U+ebd6 +#define ICON_MD_NETWORK_WIFI_3_BAR "\xee\xaf\xa1" // U+ebe1 +#define ICON_MD_NEW_LABEL "\xee\x98\x89" // U+e609 +#define ICON_MD_NEW_RELEASES "\xee\x80\xb1" // U+e031 +#define ICON_MD_NEWSPAPER "\xee\xae\x81" // U+eb81 +#define ICON_MD_NEXT_PLAN "\xee\xbd\x9d" // U+ef5d +#define ICON_MD_NEXT_WEEK "\xee\x85\xaa" // U+e16a +#define ICON_MD_NFC "\xee\x86\xbb" // U+e1bb +#define ICON_MD_NIGHT_SHELTER "\xef\x87\xb1" // U+f1f1 +#define ICON_MD_NIGHTLIFE "\xee\xa9\xa2" // U+ea62 +#define ICON_MD_NIGHTLIGHT "\xef\x80\xbd" // U+f03d +#define ICON_MD_NIGHTLIGHT_ROUND "\xee\xbd\x9e" // U+ef5e +#define ICON_MD_NIGHTS_STAY "\xee\xa9\x86" // U+ea46 +#define ICON_MD_NO_ACCOUNTS "\xef\x80\xbe" // U+f03e +#define ICON_MD_NO_ADULT_CONTENT "\xef\xa3\xbe" // U+f8fe +#define ICON_MD_NO_BACKPACK "\xef\x88\xb7" // U+f237 +#define ICON_MD_NO_CELL "\xef\x86\xa4" // U+f1a4 +#define ICON_MD_NO_CRASH "\xee\xaf\xb0" // U+ebf0 +#define ICON_MD_NO_DRINKS "\xef\x86\xa5" // U+f1a5 +#define ICON_MD_NO_ENCRYPTION "\xee\x99\x81" // U+e641 +#define ICON_MD_NO_ENCRYPTION_GMAILERRORRED "\xef\x80\xbf" // U+f03f +#define ICON_MD_NO_FLASH "\xef\x86\xa6" // U+f1a6 +#define ICON_MD_NO_FOOD "\xef\x86\xa7" // U+f1a7 +#define ICON_MD_NO_LUGGAGE "\xef\x88\xbb" // U+f23b +#define ICON_MD_NO_MEALS "\xef\x87\x96" // U+f1d6 +#define ICON_MD_NO_MEALS_OULINE "\xef\x88\xa9" // U+f229 +#define ICON_MD_NO_MEETING_ROOM "\xee\xad\x8e" // U+eb4e +#define ICON_MD_NO_PHOTOGRAPHY "\xef\x86\xa8" // U+f1a8 +#define ICON_MD_NO_SIM "\xee\x83\x8c" // U+e0cc +#define ICON_MD_NO_STROLLER "\xef\x86\xaf" // U+f1af +#define ICON_MD_NO_TRANSFER "\xef\x87\x95" // U+f1d5 +#define ICON_MD_NOISE_AWARE "\xee\xaf\xac" // U+ebec +#define ICON_MD_NOISE_CONTROL_OFF "\xee\xaf\xb3" // U+ebf3 +#define ICON_MD_NORDIC_WALKING "\xee\x94\x8e" // U+e50e +#define ICON_MD_NORTH "\xef\x87\xa0" // U+f1e0 +#define ICON_MD_NORTH_EAST "\xef\x87\xa1" // U+f1e1 +#define ICON_MD_NORTH_WEST "\xef\x87\xa2" // U+f1e2 +#define ICON_MD_NOT_ACCESSIBLE "\xef\x83\xbe" // U+f0fe +#define ICON_MD_NOT_INTERESTED "\xee\x80\xb3" // U+e033 +#define ICON_MD_NOT_LISTED_LOCATION "\xee\x95\xb5" // U+e575 +#define ICON_MD_NOT_STARTED "\xef\x83\x91" // U+f0d1 +#define ICON_MD_NOTE "\xee\x81\xaf" // U+e06f +#define ICON_MD_NOTE_ADD "\xee\xa2\x9c" // U+e89c +#define ICON_MD_NOTE_ALT "\xef\x81\x80" // U+f040 +#define ICON_MD_NOTES "\xee\x89\xac" // U+e26c +#define ICON_MD_NOTIFICATION_ADD "\xee\x8e\x99" // U+e399 +#define ICON_MD_NOTIFICATION_IMPORTANT "\xee\x80\x84" // U+e004 +#define ICON_MD_NOTIFICATIONS "\xee\x9f\xb4" // U+e7f4 +#define ICON_MD_NOTIFICATIONS_ACTIVE "\xee\x9f\xb7" // U+e7f7 +#define ICON_MD_NOTIFICATIONS_NONE "\xee\x9f\xb5" // U+e7f5 +#define ICON_MD_NOTIFICATIONS_OFF "\xee\x9f\xb6" // U+e7f6 +#define ICON_MD_NOTIFICATIONS_ON "\xee\x9f\xb7" // U+e7f7 +#define ICON_MD_NOTIFICATIONS_PAUSED "\xee\x9f\xb8" // U+e7f8 +#define ICON_MD_NOW_WALLPAPER "\xee\x86\xbc" // U+e1bc +#define ICON_MD_NOW_WIDGETS "\xee\x86\xbd" // U+e1bd +#define ICON_MD_NUMBERS "\xee\xab\x87" // U+eac7 +#define ICON_MD_OFFLINE_BOLT "\xee\xa4\xb2" // U+e932 +#define ICON_MD_OFFLINE_PIN "\xee\xa4\x8a" // U+e90a +#define ICON_MD_OFFLINE_SHARE "\xee\xa7\x85" // U+e9c5 +#define ICON_MD_OIL_BARREL "\xee\xb0\x95" // U+ec15 +#define ICON_MD_ON_DEVICE_TRAINING "\xee\xaf\xbd" // U+ebfd +#define ICON_MD_ONDEMAND_VIDEO "\xee\x98\xba" // U+e63a +#define ICON_MD_ONLINE_PREDICTION "\xef\x83\xab" // U+f0eb +#define ICON_MD_OPACITY "\xee\xa4\x9c" // U+e91c +#define ICON_MD_OPEN_IN_BROWSER "\xee\xa2\x9d" // U+e89d +#define ICON_MD_OPEN_IN_FULL "\xef\x87\x8e" // U+f1ce +#define ICON_MD_OPEN_IN_NEW "\xee\xa2\x9e" // U+e89e +#define ICON_MD_OPEN_IN_NEW_OFF "\xee\x93\xb6" // U+e4f6 +#define ICON_MD_OPEN_WITH "\xee\xa2\x9f" // U+e89f +#define ICON_MD_OTHER_HOUSES "\xee\x96\x8c" // U+e58c +#define ICON_MD_OUTBOND "\xef\x88\xa8" // U+f228 +#define ICON_MD_OUTBOUND "\xee\x87\x8a" // U+e1ca +#define ICON_MD_OUTBOX "\xee\xbd\x9f" // U+ef5f +#define ICON_MD_OUTDOOR_GRILL "\xee\xa9\x87" // U+ea47 +#define ICON_MD_OUTGOING_MAIL "\xef\x83\x92" // U+f0d2 +#define ICON_MD_OUTLET "\xef\x87\x94" // U+f1d4 +#define ICON_MD_OUTLINED_FLAG "\xee\x85\xae" // U+e16e +#define ICON_MD_OUTPUT "\xee\xae\xbe" // U+ebbe +#define ICON_MD_PADDING "\xee\xa7\x88" // U+e9c8 +#define ICON_MD_PAGES "\xee\x9f\xb9" // U+e7f9 +#define ICON_MD_PAGEVIEW "\xee\xa2\xa0" // U+e8a0 +#define ICON_MD_PAID "\xef\x81\x81" // U+f041 +#define ICON_MD_PALETTE "\xee\x90\x8a" // U+e40a +#define ICON_MD_PALLET "\xef\xa1\xaa" // U+f86a +#define ICON_MD_PAN_TOOL "\xee\xa4\xa5" // U+e925 +#define ICON_MD_PAN_TOOL_ALT "\xee\xae\xb9" // U+ebb9 +#define ICON_MD_PANORAMA "\xee\x90\x8b" // U+e40b +#define ICON_MD_PANORAMA_FISH_EYE "\xee\x90\x8c" // U+e40c +#define ICON_MD_PANORAMA_FISHEYE "\xee\x90\x8c" // U+e40c +#define ICON_MD_PANORAMA_HORIZONTAL "\xee\x90\x8d" // U+e40d +#define ICON_MD_PANORAMA_HORIZONTAL_SELECT "\xee\xbd\xa0" // U+ef60 +#define ICON_MD_PANORAMA_PHOTOSPHERE "\xee\xa7\x89" // U+e9c9 +#define ICON_MD_PANORAMA_PHOTOSPHERE_SELECT "\xee\xa7\x8a" // U+e9ca +#define ICON_MD_PANORAMA_VERTICAL "\xee\x90\x8e" // U+e40e +#define ICON_MD_PANORAMA_VERTICAL_SELECT "\xee\xbd\xa1" // U+ef61 +#define ICON_MD_PANORAMA_WIDE_ANGLE "\xee\x90\x8f" // U+e40f +#define ICON_MD_PANORAMA_WIDE_ANGLE_SELECT "\xee\xbd\xa2" // U+ef62 +#define ICON_MD_PARAGLIDING "\xee\x94\x8f" // U+e50f +#define ICON_MD_PARK "\xee\xa9\xa3" // U+ea63 +#define ICON_MD_PARTY_MODE "\xee\x9f\xba" // U+e7fa +#define ICON_MD_PASSWORD "\xef\x81\x82" // U+f042 +#define ICON_MD_PATTERN "\xef\x81\x83" // U+f043 +#define ICON_MD_PAUSE "\xee\x80\xb4" // U+e034 +#define ICON_MD_PAUSE_CIRCLE "\xee\x86\xa2" // U+e1a2 +#define ICON_MD_PAUSE_CIRCLE_FILLED "\xee\x80\xb5" // U+e035 +#define ICON_MD_PAUSE_CIRCLE_OUTLINE "\xee\x80\xb6" // U+e036 +#define ICON_MD_PAUSE_PRESENTATION "\xee\x83\xaa" // U+e0ea +#define ICON_MD_PAYMENT "\xee\xa2\xa1" // U+e8a1 +#define ICON_MD_PAYMENTS "\xee\xbd\xa3" // U+ef63 +#define ICON_MD_PAYPAL "\xee\xaa\x8d" // U+ea8d +#define ICON_MD_PEDAL_BIKE "\xee\xac\xa9" // U+eb29 +#define ICON_MD_PENDING "\xee\xbd\xa4" // U+ef64 +#define ICON_MD_PENDING_ACTIONS "\xef\x86\xbb" // U+f1bb +#define ICON_MD_PENTAGON "\xee\xad\x90" // U+eb50 +#define ICON_MD_PEOPLE "\xee\x9f\xbb" // U+e7fb +#define ICON_MD_PEOPLE_ALT "\xee\xa8\xa1" // U+ea21 +#define ICON_MD_PEOPLE_OUTLINE "\xee\x9f\xbc" // U+e7fc +#define ICON_MD_PERCENT "\xee\xad\x98" // U+eb58 +#define ICON_MD_PERM_CAMERA_MIC "\xee\xa2\xa2" // U+e8a2 +#define ICON_MD_PERM_CONTACT_CAL "\xee\xa2\xa3" // U+e8a3 +#define ICON_MD_PERM_CONTACT_CALENDAR "\xee\xa2\xa3" // U+e8a3 +#define ICON_MD_PERM_DATA_SETTING "\xee\xa2\xa4" // U+e8a4 +#define ICON_MD_PERM_DEVICE_INFO "\xee\xa2\xa5" // U+e8a5 +#define ICON_MD_PERM_DEVICE_INFORMATION "\xee\xa2\xa5" // U+e8a5 +#define ICON_MD_PERM_IDENTITY "\xee\xa2\xa6" // U+e8a6 +#define ICON_MD_PERM_MEDIA "\xee\xa2\xa7" // U+e8a7 +#define ICON_MD_PERM_PHONE_MSG "\xee\xa2\xa8" // U+e8a8 +#define ICON_MD_PERM_SCAN_WIFI "\xee\xa2\xa9" // U+e8a9 +#define ICON_MD_PERSON "\xee\x9f\xbd" // U+e7fd +#define ICON_MD_PERSON_2 "\xef\xa3\xa4" // U+f8e4 +#define ICON_MD_PERSON_3 "\xef\xa3\xa5" // U+f8e5 +#define ICON_MD_PERSON_4 "\xef\xa3\xa6" // U+f8e6 +#define ICON_MD_PERSON_ADD "\xee\x9f\xbe" // U+e7fe +#define ICON_MD_PERSON_ADD_ALT "\xee\xa9\x8d" // U+ea4d +#define ICON_MD_PERSON_ADD_ALT_1 "\xee\xbd\xa5" // U+ef65 +#define ICON_MD_PERSON_ADD_DISABLED "\xee\xa7\x8b" // U+e9cb +#define ICON_MD_PERSON_OFF "\xee\x94\x90" // U+e510 +#define ICON_MD_PERSON_OUTLINE "\xee\x9f\xbf" // U+e7ff +#define ICON_MD_PERSON_PIN "\xee\x95\x9a" // U+e55a +#define ICON_MD_PERSON_PIN_CIRCLE "\xee\x95\xaa" // U+e56a +#define ICON_MD_PERSON_REMOVE "\xee\xbd\xa6" // U+ef66 +#define ICON_MD_PERSON_REMOVE_ALT_1 "\xee\xbd\xa7" // U+ef67 +#define ICON_MD_PERSON_SEARCH "\xef\x84\x86" // U+f106 +#define ICON_MD_PERSONAL_INJURY "\xee\x9b\x9a" // U+e6da +#define ICON_MD_PERSONAL_VIDEO "\xee\x98\xbb" // U+e63b +#define ICON_MD_PEST_CONTROL "\xef\x83\xba" // U+f0fa +#define ICON_MD_PEST_CONTROL_RODENT "\xef\x83\xbd" // U+f0fd +#define ICON_MD_PETS "\xee\xa4\x9d" // U+e91d +#define ICON_MD_PHISHING "\xee\xab\x97" // U+ead7 +#define ICON_MD_PHONE "\xee\x83\x8d" // U+e0cd +#define ICON_MD_PHONE_ANDROID "\xee\x8c\xa4" // U+e324 +#define ICON_MD_PHONE_BLUETOOTH_SPEAKER "\xee\x98\x9b" // U+e61b +#define ICON_MD_PHONE_CALLBACK "\xee\x99\x89" // U+e649 +#define ICON_MD_PHONE_DISABLED "\xee\xa7\x8c" // U+e9cc +#define ICON_MD_PHONE_ENABLED "\xee\xa7\x8d" // U+e9cd +#define ICON_MD_PHONE_FORWARDED "\xee\x98\x9c" // U+e61c +#define ICON_MD_PHONE_IN_TALK "\xee\x98\x9d" // U+e61d +#define ICON_MD_PHONE_IPHONE "\xee\x8c\xa5" // U+e325 +#define ICON_MD_PHONE_LOCKED "\xee\x98\x9e" // U+e61e +#define ICON_MD_PHONE_MISSED "\xee\x98\x9f" // U+e61f +#define ICON_MD_PHONE_PAUSED "\xee\x98\xa0" // U+e620 +#define ICON_MD_PHONELINK "\xee\x8c\xa6" // U+e326 +#define ICON_MD_PHONELINK_ERASE "\xee\x83\x9b" // U+e0db +#define ICON_MD_PHONELINK_LOCK "\xee\x83\x9c" // U+e0dc +#define ICON_MD_PHONELINK_OFF "\xee\x8c\xa7" // U+e327 +#define ICON_MD_PHONELINK_RING "\xee\x83\x9d" // U+e0dd +#define ICON_MD_PHONELINK_SETUP "\xee\x83\x9e" // U+e0de +#define ICON_MD_PHOTO "\xee\x90\x90" // U+e410 +#define ICON_MD_PHOTO_ALBUM "\xee\x90\x91" // U+e411 +#define ICON_MD_PHOTO_CAMERA "\xee\x90\x92" // U+e412 +#define ICON_MD_PHOTO_CAMERA_BACK "\xee\xbd\xa8" // U+ef68 +#define ICON_MD_PHOTO_CAMERA_FRONT "\xee\xbd\xa9" // U+ef69 +#define ICON_MD_PHOTO_FILTER "\xee\x90\xbb" // U+e43b +#define ICON_MD_PHOTO_LIBRARY "\xee\x90\x93" // U+e413 +#define ICON_MD_PHOTO_SIZE_SELECT_ACTUAL "\xee\x90\xb2" // U+e432 +#define ICON_MD_PHOTO_SIZE_SELECT_LARGE "\xee\x90\xb3" // U+e433 +#define ICON_MD_PHOTO_SIZE_SELECT_SMALL "\xee\x90\xb4" // U+e434 +#define ICON_MD_PHP "\xee\xae\x8f" // U+eb8f +#define ICON_MD_PIANO "\xee\x94\xa1" // U+e521 +#define ICON_MD_PIANO_OFF "\xee\x94\xa0" // U+e520 +#define ICON_MD_PICTURE_AS_PDF "\xee\x90\x95" // U+e415 +#define ICON_MD_PICTURE_IN_PICTURE "\xee\xa2\xaa" // U+e8aa +#define ICON_MD_PICTURE_IN_PICTURE_ALT "\xee\xa4\x91" // U+e911 +#define ICON_MD_PIE_CHART "\xee\x9b\x84" // U+e6c4 +#define ICON_MD_PIE_CHART_OUTLINE "\xef\x81\x84" // U+f044 +#define ICON_MD_PIE_CHART_OUTLINED "\xee\x9b\x85" // U+e6c5 +#define ICON_MD_PIN "\xef\x81\x85" // U+f045 +#define ICON_MD_PIN_DROP "\xee\x95\x9e" // U+e55e +#define ICON_MD_PIN_END "\xee\x9d\xa7" // U+e767 +#define ICON_MD_PIN_INVOKE "\xee\x9d\xa3" // U+e763 +#define ICON_MD_PINCH "\xee\xac\xb8" // U+eb38 +#define ICON_MD_PIVOT_TABLE_CHART "\xee\xa7\x8e" // U+e9ce +#define ICON_MD_PIX "\xee\xaa\xa3" // U+eaa3 +#define ICON_MD_PLACE "\xee\x95\x9f" // U+e55f +#define ICON_MD_PLAGIARISM "\xee\xa9\x9a" // U+ea5a +#define ICON_MD_PLAY_ARROW "\xee\x80\xb7" // U+e037 +#define ICON_MD_PLAY_CIRCLE "\xee\x87\x84" // U+e1c4 +#define ICON_MD_PLAY_CIRCLE_FILL "\xee\x80\xb8" // U+e038 +#define ICON_MD_PLAY_CIRCLE_FILLED "\xee\x80\xb8" // U+e038 +#define ICON_MD_PLAY_CIRCLE_OUTLINE "\xee\x80\xb9" // U+e039 +#define ICON_MD_PLAY_DISABLED "\xee\xbd\xaa" // U+ef6a +#define ICON_MD_PLAY_FOR_WORK "\xee\xa4\x86" // U+e906 +#define ICON_MD_PLAY_LESSON "\xef\x81\x87" // U+f047 +#define ICON_MD_PLAYLIST_ADD "\xee\x80\xbb" // U+e03b +#define ICON_MD_PLAYLIST_ADD_CHECK "\xee\x81\xa5" // U+e065 +#define ICON_MD_PLAYLIST_ADD_CHECK_CIRCLE "\xee\x9f\xa6" // U+e7e6 +#define ICON_MD_PLAYLIST_ADD_CIRCLE "\xee\x9f\xa5" // U+e7e5 +#define ICON_MD_PLAYLIST_PLAY "\xee\x81\x9f" // U+e05f +#define ICON_MD_PLAYLIST_REMOVE "\xee\xae\x80" // U+eb80 +#define ICON_MD_PLUMBING "\xef\x84\x87" // U+f107 +#define ICON_MD_PLUS_ONE "\xee\xa0\x80" // U+e800 +#define ICON_MD_PODCASTS "\xef\x81\x88" // U+f048 +#define ICON_MD_POINT_OF_SALE "\xef\x85\xbe" // U+f17e +#define ICON_MD_POLICY "\xee\xa8\x97" // U+ea17 +#define ICON_MD_POLL "\xee\xa0\x81" // U+e801 +#define ICON_MD_POLYLINE "\xee\xae\xbb" // U+ebbb +#define ICON_MD_POLYMER "\xee\xa2\xab" // U+e8ab +#define ICON_MD_POOL "\xee\xad\x88" // U+eb48 +#define ICON_MD_PORTABLE_WIFI_OFF "\xee\x83\x8e" // U+e0ce +#define ICON_MD_PORTRAIT "\xee\x90\x96" // U+e416 +#define ICON_MD_POST_ADD "\xee\xa8\xa0" // U+ea20 +#define ICON_MD_POWER "\xee\x98\xbc" // U+e63c +#define ICON_MD_POWER_INPUT "\xee\x8c\xb6" // U+e336 +#define ICON_MD_POWER_OFF "\xee\x99\x86" // U+e646 +#define ICON_MD_POWER_SETTINGS_NEW "\xee\xa2\xac" // U+e8ac +#define ICON_MD_PRECISION_MANUFACTURING "\xef\x81\x89" // U+f049 +#define ICON_MD_PREGNANT_WOMAN "\xee\xa4\x9e" // U+e91e +#define ICON_MD_PRESENT_TO_ALL "\xee\x83\x9f" // U+e0df +#define ICON_MD_PREVIEW "\xef\x87\x85" // U+f1c5 +#define ICON_MD_PRICE_CHANGE "\xef\x81\x8a" // U+f04a +#define ICON_MD_PRICE_CHECK "\xef\x81\x8b" // U+f04b +#define ICON_MD_PRINT "\xee\xa2\xad" // U+e8ad +#define ICON_MD_PRINT_DISABLED "\xee\xa7\x8f" // U+e9cf +#define ICON_MD_PRIORITY_HIGH "\xee\x99\x85" // U+e645 +#define ICON_MD_PRIVACY_TIP "\xef\x83\x9c" // U+f0dc +#define ICON_MD_PRIVATE_CONNECTIVITY "\xee\x9d\x84" // U+e744 +#define ICON_MD_PRODUCTION_QUANTITY_LIMITS "\xee\x87\x91" // U+e1d1 +#define ICON_MD_PROPANE "\xee\xb0\x94" // U+ec14 +#define ICON_MD_PROPANE_TANK "\xee\xb0\x93" // U+ec13 +#define ICON_MD_PSYCHOLOGY "\xee\xa9\x8a" // U+ea4a +#define ICON_MD_PSYCHOLOGY_ALT "\xef\xa3\xaa" // U+f8ea +#define ICON_MD_PUBLIC "\xee\xa0\x8b" // U+e80b +#define ICON_MD_PUBLIC_OFF "\xef\x87\x8a" // U+f1ca +#define ICON_MD_PUBLISH "\xee\x89\x95" // U+e255 +#define ICON_MD_PUBLISHED_WITH_CHANGES "\xef\x88\xb2" // U+f232 +#define ICON_MD_PUNCH_CLOCK "\xee\xaa\xa8" // U+eaa8 +#define ICON_MD_PUSH_PIN "\xef\x84\x8d" // U+f10d +#define ICON_MD_QR_CODE "\xee\xbd\xab" // U+ef6b +#define ICON_MD_QR_CODE_2 "\xee\x80\x8a" // U+e00a +#define ICON_MD_QR_CODE_SCANNER "\xef\x88\x86" // U+f206 +#define ICON_MD_QUERY_BUILDER "\xee\xa2\xae" // U+e8ae +#define ICON_MD_QUERY_STATS "\xee\x93\xbc" // U+e4fc +#define ICON_MD_QUESTION_ANSWER "\xee\xa2\xaf" // U+e8af +#define ICON_MD_QUESTION_MARK "\xee\xae\x8b" // U+eb8b +#define ICON_MD_QUEUE "\xee\x80\xbc" // U+e03c +#define ICON_MD_QUEUE_MUSIC "\xee\x80\xbd" // U+e03d +#define ICON_MD_QUEUE_PLAY_NEXT "\xee\x81\xa6" // U+e066 +#define ICON_MD_QUICK_CONTACTS_DIALER "\xee\x83\x8f" // U+e0cf +#define ICON_MD_QUICK_CONTACTS_MAIL "\xee\x83\x90" // U+e0d0 +#define ICON_MD_QUICKREPLY "\xee\xbd\xac" // U+ef6c +#define ICON_MD_QUIZ "\xef\x81\x8c" // U+f04c +#define ICON_MD_QUORA "\xee\xaa\x98" // U+ea98 +#define ICON_MD_R_MOBILEDATA "\xef\x81\x8d" // U+f04d +#define ICON_MD_RADAR "\xef\x81\x8e" // U+f04e +#define ICON_MD_RADIO "\xee\x80\xbe" // U+e03e +#define ICON_MD_RADIO_BUTTON_CHECKED "\xee\xa0\xb7" // U+e837 +#define ICON_MD_RADIO_BUTTON_OFF "\xee\xa0\xb6" // U+e836 +#define ICON_MD_RADIO_BUTTON_ON "\xee\xa0\xb7" // U+e837 +#define ICON_MD_RADIO_BUTTON_UNCHECKED "\xee\xa0\xb6" // U+e836 +#define ICON_MD_RAILWAY_ALERT "\xee\xa7\x91" // U+e9d1 +#define ICON_MD_RAMEN_DINING "\xee\xa9\xa4" // U+ea64 +#define ICON_MD_RAMP_LEFT "\xee\xae\x9c" // U+eb9c +#define ICON_MD_RAMP_RIGHT "\xee\xae\x96" // U+eb96 +#define ICON_MD_RATE_REVIEW "\xee\x95\xa0" // U+e560 +#define ICON_MD_RAW_OFF "\xef\x81\x8f" // U+f04f +#define ICON_MD_RAW_ON "\xef\x81\x90" // U+f050 +#define ICON_MD_READ_MORE "\xee\xbd\xad" // U+ef6d +#define ICON_MD_REAL_ESTATE_AGENT "\xee\x9c\xba" // U+e73a +#define ICON_MD_RECEIPT "\xee\xa2\xb0" // U+e8b0 +#define ICON_MD_RECEIPT_LONG "\xee\xbd\xae" // U+ef6e +#define ICON_MD_RECENT_ACTORS "\xee\x80\xbf" // U+e03f +#define ICON_MD_RECOMMEND "\xee\xa7\x92" // U+e9d2 +#define ICON_MD_RECORD_VOICE_OVER "\xee\xa4\x9f" // U+e91f +#define ICON_MD_RECTANGLE "\xee\xad\x94" // U+eb54 +#define ICON_MD_RECYCLING "\xee\x9d\xa0" // U+e760 +#define ICON_MD_REDDIT "\xee\xaa\xa0" // U+eaa0 +#define ICON_MD_REDEEM "\xee\xa2\xb1" // U+e8b1 +#define ICON_MD_REDO "\xee\x85\x9a" // U+e15a +#define ICON_MD_REDUCE_CAPACITY "\xef\x88\x9c" // U+f21c +#define ICON_MD_REFRESH "\xee\x97\x95" // U+e5d5 +#define ICON_MD_REMEMBER_ME "\xef\x81\x91" // U+f051 +#define ICON_MD_REMOVE "\xee\x85\x9b" // U+e15b +#define ICON_MD_REMOVE_CIRCLE "\xee\x85\x9c" // U+e15c +#define ICON_MD_REMOVE_CIRCLE_OUTLINE "\xee\x85\x9d" // U+e15d +#define ICON_MD_REMOVE_DONE "\xee\xa7\x93" // U+e9d3 +#define ICON_MD_REMOVE_FROM_QUEUE "\xee\x81\xa7" // U+e067 +#define ICON_MD_REMOVE_MODERATOR "\xee\xa7\x94" // U+e9d4 +#define ICON_MD_REMOVE_RED_EYE "\xee\x90\x97" // U+e417 +#define ICON_MD_REMOVE_ROAD "\xee\xaf\xbc" // U+ebfc +#define ICON_MD_REMOVE_SHOPPING_CART "\xee\xa4\xa8" // U+e928 +#define ICON_MD_REORDER "\xee\xa3\xbe" // U+e8fe +#define ICON_MD_REPARTITION "\xef\xa3\xa8" // U+f8e8 +#define ICON_MD_REPEAT "\xee\x81\x80" // U+e040 +#define ICON_MD_REPEAT_ON "\xee\xa7\x96" // U+e9d6 +#define ICON_MD_REPEAT_ONE "\xee\x81\x81" // U+e041 +#define ICON_MD_REPEAT_ONE_ON "\xee\xa7\x97" // U+e9d7 +#define ICON_MD_REPLAY "\xee\x81\x82" // U+e042 +#define ICON_MD_REPLAY_10 "\xee\x81\x99" // U+e059 +#define ICON_MD_REPLAY_30 "\xee\x81\x9a" // U+e05a +#define ICON_MD_REPLAY_5 "\xee\x81\x9b" // U+e05b +#define ICON_MD_REPLAY_CIRCLE_FILLED "\xee\xa7\x98" // U+e9d8 +#define ICON_MD_REPLY "\xee\x85\x9e" // U+e15e +#define ICON_MD_REPLY_ALL "\xee\x85\x9f" // U+e15f +#define ICON_MD_REPORT "\xee\x85\xa0" // U+e160 +#define ICON_MD_REPORT_GMAILERRORRED "\xef\x81\x92" // U+f052 +#define ICON_MD_REPORT_OFF "\xee\x85\xb0" // U+e170 +#define ICON_MD_REPORT_PROBLEM "\xee\xa2\xb2" // U+e8b2 +#define ICON_MD_REQUEST_PAGE "\xef\x88\xac" // U+f22c +#define ICON_MD_REQUEST_QUOTE "\xef\x86\xb6" // U+f1b6 +#define ICON_MD_RESET_TV "\xee\xa7\x99" // U+e9d9 +#define ICON_MD_RESTART_ALT "\xef\x81\x93" // U+f053 +#define ICON_MD_RESTAURANT "\xee\x95\xac" // U+e56c +#define ICON_MD_RESTAURANT_MENU "\xee\x95\xa1" // U+e561 +#define ICON_MD_RESTORE "\xee\xa2\xb3" // U+e8b3 +#define ICON_MD_RESTORE_FROM_TRASH "\xee\xa4\xb8" // U+e938 +#define ICON_MD_RESTORE_PAGE "\xee\xa4\xa9" // U+e929 +#define ICON_MD_REVIEWS "\xef\x81\x94" // U+f054 +#define ICON_MD_RICE_BOWL "\xef\x87\xb5" // U+f1f5 +#define ICON_MD_RING_VOLUME "\xee\x83\x91" // U+e0d1 +#define ICON_MD_ROCKET "\xee\xae\xa5" // U+eba5 +#define ICON_MD_ROCKET_LAUNCH "\xee\xae\x9b" // U+eb9b +#define ICON_MD_ROLLER_SHADES "\xee\xb0\x92" // U+ec12 +#define ICON_MD_ROLLER_SHADES_CLOSED "\xee\xb0\x91" // U+ec11 +#define ICON_MD_ROLLER_SKATING "\xee\xaf\x8d" // U+ebcd +#define ICON_MD_ROOFING "\xef\x88\x81" // U+f201 +#define ICON_MD_ROOM "\xee\xa2\xb4" // U+e8b4 +#define ICON_MD_ROOM_PREFERENCES "\xef\x86\xb8" // U+f1b8 +#define ICON_MD_ROOM_SERVICE "\xee\xad\x89" // U+eb49 +#define ICON_MD_ROTATE_90_DEGREES_CCW "\xee\x90\x98" // U+e418 +#define ICON_MD_ROTATE_90_DEGREES_CW "\xee\xaa\xab" // U+eaab +#define ICON_MD_ROTATE_LEFT "\xee\x90\x99" // U+e419 +#define ICON_MD_ROTATE_RIGHT "\xee\x90\x9a" // U+e41a +#define ICON_MD_ROUNDABOUT_LEFT "\xee\xae\x99" // U+eb99 +#define ICON_MD_ROUNDABOUT_RIGHT "\xee\xae\xa3" // U+eba3 +#define ICON_MD_ROUNDED_CORNER "\xee\xa4\xa0" // U+e920 +#define ICON_MD_ROUTE "\xee\xab\x8d" // U+eacd +#define ICON_MD_ROUTER "\xee\x8c\xa8" // U+e328 +#define ICON_MD_ROWING "\xee\xa4\xa1" // U+e921 +#define ICON_MD_RSS_FEED "\xee\x83\xa5" // U+e0e5 +#define ICON_MD_RSVP "\xef\x81\x95" // U+f055 +#define ICON_MD_RTT "\xee\xa6\xad" // U+e9ad +#define ICON_MD_RULE "\xef\x87\x82" // U+f1c2 +#define ICON_MD_RULE_FOLDER "\xef\x87\x89" // U+f1c9 +#define ICON_MD_RUN_CIRCLE "\xee\xbd\xaf" // U+ef6f +#define ICON_MD_RUNNING_WITH_ERRORS "\xee\x94\x9d" // U+e51d +#define ICON_MD_RV_HOOKUP "\xee\x99\x82" // U+e642 +#define ICON_MD_SAFETY_CHECK "\xee\xaf\xaf" // U+ebef +#define ICON_MD_SAFETY_DIVIDER "\xee\x87\x8c" // U+e1cc +#define ICON_MD_SAILING "\xee\x94\x82" // U+e502 +#define ICON_MD_SANITIZER "\xef\x88\x9d" // U+f21d +#define ICON_MD_SATELLITE "\xee\x95\xa2" // U+e562 +#define ICON_MD_SATELLITE_ALT "\xee\xac\xba" // U+eb3a +#define ICON_MD_SAVE "\xee\x85\xa1" // U+e161 +#define ICON_MD_SAVE_ALT "\xee\x85\xb1" // U+e171 +#define ICON_MD_SAVE_AS "\xee\xad\xa0" // U+eb60 +#define ICON_MD_SAVED_SEARCH "\xee\xa8\x91" // U+ea11 +#define ICON_MD_SAVINGS "\xee\x8b\xab" // U+e2eb +#define ICON_MD_SCALE "\xee\xad\x9f" // U+eb5f +#define ICON_MD_SCANNER "\xee\x8c\xa9" // U+e329 +#define ICON_MD_SCATTER_PLOT "\xee\x89\xa8" // U+e268 +#define ICON_MD_SCHEDULE "\xee\xa2\xb5" // U+e8b5 +#define ICON_MD_SCHEDULE_SEND "\xee\xa8\x8a" // U+ea0a +#define ICON_MD_SCHEMA "\xee\x93\xbd" // U+e4fd +#define ICON_MD_SCHOOL "\xee\xa0\x8c" // U+e80c +#define ICON_MD_SCIENCE "\xee\xa9\x8b" // U+ea4b +#define ICON_MD_SCORE "\xee\x89\xa9" // U+e269 +#define ICON_MD_SCOREBOARD "\xee\xaf\x90" // U+ebd0 +#define ICON_MD_SCREEN_LOCK_LANDSCAPE "\xee\x86\xbe" // U+e1be +#define ICON_MD_SCREEN_LOCK_PORTRAIT "\xee\x86\xbf" // U+e1bf +#define ICON_MD_SCREEN_LOCK_ROTATION "\xee\x87\x80" // U+e1c0 +#define ICON_MD_SCREEN_ROTATION "\xee\x87\x81" // U+e1c1 +#define ICON_MD_SCREEN_ROTATION_ALT "\xee\xaf\xae" // U+ebee +#define ICON_MD_SCREEN_SEARCH_DESKTOP "\xee\xbd\xb0" // U+ef70 +#define ICON_MD_SCREEN_SHARE "\xee\x83\xa2" // U+e0e2 +#define ICON_MD_SCREENSHOT "\xef\x81\x96" // U+f056 +#define ICON_MD_SCREENSHOT_MONITOR "\xee\xb0\x88" // U+ec08 +#define ICON_MD_SCUBA_DIVING "\xee\xaf\x8e" // U+ebce +#define ICON_MD_SD "\xee\xa7\x9d" // U+e9dd +#define ICON_MD_SD_CARD "\xee\x98\xa3" // U+e623 +#define ICON_MD_SD_CARD_ALERT "\xef\x81\x97" // U+f057 +#define ICON_MD_SD_STORAGE "\xee\x87\x82" // U+e1c2 +#define ICON_MD_SEARCH "\xee\xa2\xb6" // U+e8b6 +#define ICON_MD_SEARCH_OFF "\xee\xa9\xb6" // U+ea76 +#define ICON_MD_SECURITY "\xee\x8c\xaa" // U+e32a +#define ICON_MD_SECURITY_UPDATE "\xef\x81\x98" // U+f058 +#define ICON_MD_SECURITY_UPDATE_GOOD "\xef\x81\x99" // U+f059 +#define ICON_MD_SECURITY_UPDATE_WARNING "\xef\x81\x9a" // U+f05a +#define ICON_MD_SEGMENT "\xee\xa5\x8b" // U+e94b +#define ICON_MD_SELECT_ALL "\xee\x85\xa2" // U+e162 +#define ICON_MD_SELF_IMPROVEMENT "\xee\xa9\xb8" // U+ea78 +#define ICON_MD_SELL "\xef\x81\x9b" // U+f05b +#define ICON_MD_SEND "\xee\x85\xa3" // U+e163 +#define ICON_MD_SEND_AND_ARCHIVE "\xee\xa8\x8c" // U+ea0c +#define ICON_MD_SEND_TIME_EXTENSION "\xee\xab\x9b" // U+eadb +#define ICON_MD_SEND_TO_MOBILE "\xef\x81\x9c" // U+f05c +#define ICON_MD_SENSOR_DOOR "\xef\x86\xb5" // U+f1b5 +#define ICON_MD_SENSOR_OCCUPIED "\xee\xb0\x90" // U+ec10 +#define ICON_MD_SENSOR_WINDOW "\xef\x86\xb4" // U+f1b4 +#define ICON_MD_SENSORS "\xee\x94\x9e" // U+e51e +#define ICON_MD_SENSORS_OFF "\xee\x94\x9f" // U+e51f +#define ICON_MD_SENTIMENT_DISSATISFIED "\xee\xa0\x91" // U+e811 +#define ICON_MD_SENTIMENT_NEUTRAL "\xee\xa0\x92" // U+e812 +#define ICON_MD_SENTIMENT_SATISFIED "\xee\xa0\x93" // U+e813 +#define ICON_MD_SENTIMENT_SATISFIED_ALT "\xee\x83\xad" // U+e0ed +#define ICON_MD_SENTIMENT_VERY_DISSATISFIED "\xee\xa0\x94" // U+e814 +#define ICON_MD_SENTIMENT_VERY_SATISFIED "\xee\xa0\x95" // U+e815 +#define ICON_MD_SET_MEAL "\xef\x87\xaa" // U+f1ea +#define ICON_MD_SETTINGS "\xee\xa2\xb8" // U+e8b8 +#define ICON_MD_SETTINGS_ACCESSIBILITY "\xef\x81\x9d" // U+f05d +#define ICON_MD_SETTINGS_APPLICATIONS "\xee\xa2\xb9" // U+e8b9 +#define ICON_MD_SETTINGS_BACKUP_RESTORE "\xee\xa2\xba" // U+e8ba +#define ICON_MD_SETTINGS_BLUETOOTH "\xee\xa2\xbb" // U+e8bb +#define ICON_MD_SETTINGS_BRIGHTNESS "\xee\xa2\xbd" // U+e8bd +#define ICON_MD_SETTINGS_CELL "\xee\xa2\xbc" // U+e8bc +#define ICON_MD_SETTINGS_DISPLAY "\xee\xa2\xbd" // U+e8bd +#define ICON_MD_SETTINGS_ETHERNET "\xee\xa2\xbe" // U+e8be +#define ICON_MD_SETTINGS_INPUT_ANTENNA "\xee\xa2\xbf" // U+e8bf +#define ICON_MD_SETTINGS_INPUT_COMPONENT "\xee\xa3\x80" // U+e8c0 +#define ICON_MD_SETTINGS_INPUT_COMPOSITE "\xee\xa3\x81" // U+e8c1 +#define ICON_MD_SETTINGS_INPUT_HDMI "\xee\xa3\x82" // U+e8c2 +#define ICON_MD_SETTINGS_INPUT_SVIDEO "\xee\xa3\x83" // U+e8c3 +#define ICON_MD_SETTINGS_OVERSCAN "\xee\xa3\x84" // U+e8c4 +#define ICON_MD_SETTINGS_PHONE "\xee\xa3\x85" // U+e8c5 +#define ICON_MD_SETTINGS_POWER "\xee\xa3\x86" // U+e8c6 +#define ICON_MD_SETTINGS_REMOTE "\xee\xa3\x87" // U+e8c7 +#define ICON_MD_SETTINGS_SUGGEST "\xef\x81\x9e" // U+f05e +#define ICON_MD_SETTINGS_SYSTEM_DAYDREAM "\xee\x87\x83" // U+e1c3 +#define ICON_MD_SETTINGS_VOICE "\xee\xa3\x88" // U+e8c8 +#define ICON_MD_SEVERE_COLD "\xee\xaf\x93" // U+ebd3 +#define ICON_MD_SHAPE_LINE "\xef\xa3\x93" // U+f8d3 +#define ICON_MD_SHARE "\xee\xa0\x8d" // U+e80d +#define ICON_MD_SHARE_ARRIVAL_TIME "\xee\x94\xa4" // U+e524 +#define ICON_MD_SHARE_LOCATION "\xef\x81\x9f" // U+f05f +#define ICON_MD_SHELVES "\xef\xa1\xae" // U+f86e +#define ICON_MD_SHIELD "\xee\xa7\xa0" // U+e9e0 +#define ICON_MD_SHIELD_MOON "\xee\xaa\xa9" // U+eaa9 +#define ICON_MD_SHOP "\xee\xa3\x89" // U+e8c9 +#define ICON_MD_SHOP_2 "\xee\x86\x9e" // U+e19e +#define ICON_MD_SHOP_TWO "\xee\xa3\x8a" // U+e8ca +#define ICON_MD_SHOPIFY "\xee\xaa\x9d" // U+ea9d +#define ICON_MD_SHOPPING_BAG "\xef\x87\x8c" // U+f1cc +#define ICON_MD_SHOPPING_BASKET "\xee\xa3\x8b" // U+e8cb +#define ICON_MD_SHOPPING_CART "\xee\xa3\x8c" // U+e8cc +#define ICON_MD_SHOPPING_CART_CHECKOUT "\xee\xae\x88" // U+eb88 +#define ICON_MD_SHORT_TEXT "\xee\x89\xa1" // U+e261 +#define ICON_MD_SHORTCUT "\xef\x81\xa0" // U+f060 +#define ICON_MD_SHOW_CHART "\xee\x9b\xa1" // U+e6e1 +#define ICON_MD_SHOWER "\xef\x81\xa1" // U+f061 +#define ICON_MD_SHUFFLE "\xee\x81\x83" // U+e043 +#define ICON_MD_SHUFFLE_ON "\xee\xa7\xa1" // U+e9e1 +#define ICON_MD_SHUTTER_SPEED "\xee\x90\xbd" // U+e43d +#define ICON_MD_SICK "\xef\x88\xa0" // U+f220 +#define ICON_MD_SIGN_LANGUAGE "\xee\xaf\xa5" // U+ebe5 +#define ICON_MD_SIGNAL_CELLULAR_0_BAR "\xef\x82\xa8" // U+f0a8 +#define ICON_MD_SIGNAL_CELLULAR_4_BAR "\xee\x87\x88" // U+e1c8 +#define ICON_MD_SIGNAL_CELLULAR_ALT "\xee\x88\x82" // U+e202 +#define ICON_MD_SIGNAL_CELLULAR_ALT_1_BAR "\xee\xaf\x9f" // U+ebdf +#define ICON_MD_SIGNAL_CELLULAR_ALT_2_BAR "\xee\xaf\xa3" // U+ebe3 +#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_0_BAR "\xef\x82\xac" // U+f0ac +#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_4_BAR "\xee\x87\x8d" // U+e1cd +#define ICON_MD_SIGNAL_CELLULAR_NO_SIM "\xee\x87\x8e" // U+e1ce +#define ICON_MD_SIGNAL_CELLULAR_NODATA "\xef\x81\xa2" // U+f062 +#define ICON_MD_SIGNAL_CELLULAR_NULL "\xee\x87\x8f" // U+e1cf +#define ICON_MD_SIGNAL_CELLULAR_OFF "\xee\x87\x90" // U+e1d0 +#define ICON_MD_SIGNAL_WIFI_0_BAR "\xef\x82\xb0" // U+f0b0 +#define ICON_MD_SIGNAL_WIFI_4_BAR "\xee\x87\x98" // U+e1d8 +#define ICON_MD_SIGNAL_WIFI_4_BAR_LOCK "\xee\x87\x99" // U+e1d9 +#define ICON_MD_SIGNAL_WIFI_BAD "\xef\x81\xa3" // U+f063 +#define ICON_MD_SIGNAL_WIFI_CONNECTED_NO_INTERNET_4 "\xef\x81\xa4" // U+f064 +#define ICON_MD_SIGNAL_WIFI_OFF "\xee\x87\x9a" // U+e1da +#define ICON_MD_SIGNAL_WIFI_STATUSBAR_4_BAR "\xef\x81\xa5" // U+f065 +#define ICON_MD_SIGNAL_WIFI_STATUSBAR_CONNECTED_NO_INTERNET_4 "\xef\x81\xa6" // U+f066 +#define ICON_MD_SIGNAL_WIFI_STATUSBAR_NULL "\xef\x81\xa7" // U+f067 +#define ICON_MD_SIGNPOST "\xee\xae\x91" // U+eb91 +#define ICON_MD_SIM_CARD "\xee\x8c\xab" // U+e32b +#define ICON_MD_SIM_CARD_ALERT "\xee\x98\xa4" // U+e624 +#define ICON_MD_SIM_CARD_DOWNLOAD "\xef\x81\xa8" // U+f068 +#define ICON_MD_SINGLE_BED "\xee\xa9\x88" // U+ea48 +#define ICON_MD_SIP "\xef\x81\xa9" // U+f069 +#define ICON_MD_SKATEBOARDING "\xee\x94\x91" // U+e511 +#define ICON_MD_SKIP_NEXT "\xee\x81\x84" // U+e044 +#define ICON_MD_SKIP_PREVIOUS "\xee\x81\x85" // U+e045 +#define ICON_MD_SLEDDING "\xee\x94\x92" // U+e512 +#define ICON_MD_SLIDESHOW "\xee\x90\x9b" // U+e41b +#define ICON_MD_SLOW_MOTION_VIDEO "\xee\x81\xa8" // U+e068 +#define ICON_MD_SMART_BUTTON "\xef\x87\x81" // U+f1c1 +#define ICON_MD_SMART_DISPLAY "\xef\x81\xaa" // U+f06a +#define ICON_MD_SMART_SCREEN "\xef\x81\xab" // U+f06b +#define ICON_MD_SMART_TOY "\xef\x81\xac" // U+f06c +#define ICON_MD_SMARTPHONE "\xee\x8c\xac" // U+e32c +#define ICON_MD_SMOKE_FREE "\xee\xad\x8a" // U+eb4a +#define ICON_MD_SMOKING_ROOMS "\xee\xad\x8b" // U+eb4b +#define ICON_MD_SMS "\xee\x98\xa5" // U+e625 +#define ICON_MD_SMS_FAILED "\xee\x98\xa6" // U+e626 +#define ICON_MD_SNAPCHAT "\xee\xa9\xae" // U+ea6e +#define ICON_MD_SNIPPET_FOLDER "\xef\x87\x87" // U+f1c7 +#define ICON_MD_SNOOZE "\xee\x81\x86" // U+e046 +#define ICON_MD_SNOWBOARDING "\xee\x94\x93" // U+e513 +#define ICON_MD_SNOWING "\xee\xa0\x8f" // U+e80f +#define ICON_MD_SNOWMOBILE "\xee\x94\x83" // U+e503 +#define ICON_MD_SNOWSHOEING "\xee\x94\x94" // U+e514 +#define ICON_MD_SOAP "\xef\x86\xb2" // U+f1b2 +#define ICON_MD_SOCIAL_DISTANCE "\xee\x87\x8b" // U+e1cb +#define ICON_MD_SOLAR_POWER "\xee\xb0\x8f" // U+ec0f +#define ICON_MD_SORT "\xee\x85\xa4" // U+e164 +#define ICON_MD_SORT_BY_ALPHA "\xee\x81\x93" // U+e053 +#define ICON_MD_SOS "\xee\xaf\xb7" // U+ebf7 +#define ICON_MD_SOUP_KITCHEN "\xee\x9f\x93" // U+e7d3 +#define ICON_MD_SOURCE "\xef\x87\x84" // U+f1c4 +#define ICON_MD_SOUTH "\xef\x87\xa3" // U+f1e3 +#define ICON_MD_SOUTH_AMERICA "\xee\x9f\xa4" // U+e7e4 +#define ICON_MD_SOUTH_EAST "\xef\x87\xa4" // U+f1e4 +#define ICON_MD_SOUTH_WEST "\xef\x87\xa5" // U+f1e5 +#define ICON_MD_SPA "\xee\xad\x8c" // U+eb4c +#define ICON_MD_SPACE_BAR "\xee\x89\x96" // U+e256 +#define ICON_MD_SPACE_DASHBOARD "\xee\x99\xab" // U+e66b +#define ICON_MD_SPATIAL_AUDIO "\xee\xaf\xab" // U+ebeb +#define ICON_MD_SPATIAL_AUDIO_OFF "\xee\xaf\xa8" // U+ebe8 +#define ICON_MD_SPATIAL_TRACKING "\xee\xaf\xaa" // U+ebea +#define ICON_MD_SPEAKER "\xee\x8c\xad" // U+e32d +#define ICON_MD_SPEAKER_GROUP "\xee\x8c\xae" // U+e32e +#define ICON_MD_SPEAKER_NOTES "\xee\xa3\x8d" // U+e8cd +#define ICON_MD_SPEAKER_NOTES_OFF "\xee\xa4\xaa" // U+e92a +#define ICON_MD_SPEAKER_PHONE "\xee\x83\x92" // U+e0d2 +#define ICON_MD_SPEED "\xee\xa7\xa4" // U+e9e4 +#define ICON_MD_SPELLCHECK "\xee\xa3\x8e" // U+e8ce +#define ICON_MD_SPLITSCREEN "\xef\x81\xad" // U+f06d +#define ICON_MD_SPOKE "\xee\xa6\xa7" // U+e9a7 +#define ICON_MD_SPORTS "\xee\xa8\xb0" // U+ea30 +#define ICON_MD_SPORTS_BAR "\xef\x87\xb3" // U+f1f3 +#define ICON_MD_SPORTS_BASEBALL "\xee\xa9\x91" // U+ea51 +#define ICON_MD_SPORTS_BASKETBALL "\xee\xa8\xa6" // U+ea26 +#define ICON_MD_SPORTS_CRICKET "\xee\xa8\xa7" // U+ea27 +#define ICON_MD_SPORTS_ESPORTS "\xee\xa8\xa8" // U+ea28 +#define ICON_MD_SPORTS_FOOTBALL "\xee\xa8\xa9" // U+ea29 +#define ICON_MD_SPORTS_GOLF "\xee\xa8\xaa" // U+ea2a +#define ICON_MD_SPORTS_GYMNASTICS "\xee\xaf\x84" // U+ebc4 +#define ICON_MD_SPORTS_HANDBALL "\xee\xa8\xb3" // U+ea33 +#define ICON_MD_SPORTS_HOCKEY "\xee\xa8\xab" // U+ea2b +#define ICON_MD_SPORTS_KABADDI "\xee\xa8\xb4" // U+ea34 +#define ICON_MD_SPORTS_MARTIAL_ARTS "\xee\xab\xa9" // U+eae9 +#define ICON_MD_SPORTS_MMA "\xee\xa8\xac" // U+ea2c +#define ICON_MD_SPORTS_MOTORSPORTS "\xee\xa8\xad" // U+ea2d +#define ICON_MD_SPORTS_RUGBY "\xee\xa8\xae" // U+ea2e +#define ICON_MD_SPORTS_SCORE "\xef\x81\xae" // U+f06e +#define ICON_MD_SPORTS_SOCCER "\xee\xa8\xaf" // U+ea2f +#define ICON_MD_SPORTS_TENNIS "\xee\xa8\xb2" // U+ea32 +#define ICON_MD_SPORTS_VOLLEYBALL "\xee\xa8\xb1" // U+ea31 +#define ICON_MD_SQUARE "\xee\xac\xb6" // U+eb36 +#define ICON_MD_SQUARE_FOOT "\xee\xa9\x89" // U+ea49 +#define ICON_MD_SSID_CHART "\xee\xad\xa6" // U+eb66 +#define ICON_MD_STACKED_BAR_CHART "\xee\xa7\xa6" // U+e9e6 +#define ICON_MD_STACKED_LINE_CHART "\xef\x88\xab" // U+f22b +#define ICON_MD_STADIUM "\xee\xae\x90" // U+eb90 +#define ICON_MD_STAIRS "\xef\x86\xa9" // U+f1a9 +#define ICON_MD_STAR "\xee\xa0\xb8" // U+e838 +#define ICON_MD_STAR_BORDER "\xee\xa0\xba" // U+e83a +#define ICON_MD_STAR_BORDER_PURPLE500 "\xef\x82\x99" // U+f099 +#define ICON_MD_STAR_HALF "\xee\xa0\xb9" // U+e839 +#define ICON_MD_STAR_OUTLINE "\xef\x81\xaf" // U+f06f +#define ICON_MD_STAR_PURPLE500 "\xef\x82\x9a" // U+f09a +#define ICON_MD_STAR_RATE "\xef\x83\xac" // U+f0ec +#define ICON_MD_STARS "\xee\xa3\x90" // U+e8d0 +#define ICON_MD_START "\xee\x82\x89" // U+e089 +#define ICON_MD_STAY_CURRENT_LANDSCAPE "\xee\x83\x93" // U+e0d3 +#define ICON_MD_STAY_CURRENT_PORTRAIT "\xee\x83\x94" // U+e0d4 +#define ICON_MD_STAY_PRIMARY_LANDSCAPE "\xee\x83\x95" // U+e0d5 +#define ICON_MD_STAY_PRIMARY_PORTRAIT "\xee\x83\x96" // U+e0d6 +#define ICON_MD_STICKY_NOTE_2 "\xef\x87\xbc" // U+f1fc +#define ICON_MD_STOP "\xee\x81\x87" // U+e047 +#define ICON_MD_STOP_CIRCLE "\xee\xbd\xb1" // U+ef71 +#define ICON_MD_STOP_SCREEN_SHARE "\xee\x83\xa3" // U+e0e3 +#define ICON_MD_STORAGE "\xee\x87\x9b" // U+e1db +#define ICON_MD_STORE "\xee\xa3\x91" // U+e8d1 +#define ICON_MD_STORE_MALL_DIRECTORY "\xee\x95\xa3" // U+e563 +#define ICON_MD_STOREFRONT "\xee\xa8\x92" // U+ea12 +#define ICON_MD_STORM "\xef\x81\xb0" // U+f070 +#define ICON_MD_STRAIGHT "\xee\xae\x95" // U+eb95 +#define ICON_MD_STRAIGHTEN "\xee\x90\x9c" // U+e41c +#define ICON_MD_STREAM "\xee\xa7\xa9" // U+e9e9 +#define ICON_MD_STREETVIEW "\xee\x95\xae" // U+e56e +#define ICON_MD_STRIKETHROUGH_S "\xee\x89\x97" // U+e257 +#define ICON_MD_STROLLER "\xef\x86\xae" // U+f1ae +#define ICON_MD_STYLE "\xee\x90\x9d" // U+e41d +#define ICON_MD_SUBDIRECTORY_ARROW_LEFT "\xee\x97\x99" // U+e5d9 +#define ICON_MD_SUBDIRECTORY_ARROW_RIGHT "\xee\x97\x9a" // U+e5da +#define ICON_MD_SUBJECT "\xee\xa3\x92" // U+e8d2 +#define ICON_MD_SUBSCRIPT "\xef\x84\x91" // U+f111 +#define ICON_MD_SUBSCRIPTIONS "\xee\x81\xa4" // U+e064 +#define ICON_MD_SUBTITLES "\xee\x81\x88" // U+e048 +#define ICON_MD_SUBTITLES_OFF "\xee\xbd\xb2" // U+ef72 +#define ICON_MD_SUBWAY "\xee\x95\xaf" // U+e56f +#define ICON_MD_SUMMARIZE "\xef\x81\xb1" // U+f071 +#define ICON_MD_SUNNY "\xee\xa0\x9a" // U+e81a +#define ICON_MD_SUNNY_SNOWING "\xee\xa0\x99" // U+e819 +#define ICON_MD_SUPERSCRIPT "\xef\x84\x92" // U+f112 +#define ICON_MD_SUPERVISED_USER_CIRCLE "\xee\xa4\xb9" // U+e939 +#define ICON_MD_SUPERVISOR_ACCOUNT "\xee\xa3\x93" // U+e8d3 +#define ICON_MD_SUPPORT "\xee\xbd\xb3" // U+ef73 +#define ICON_MD_SUPPORT_AGENT "\xef\x83\xa2" // U+f0e2 +#define ICON_MD_SURFING "\xee\x94\x95" // U+e515 +#define ICON_MD_SURROUND_SOUND "\xee\x81\x89" // U+e049 +#define ICON_MD_SWAP_CALLS "\xee\x83\x97" // U+e0d7 +#define ICON_MD_SWAP_HORIZ "\xee\xa3\x94" // U+e8d4 +#define ICON_MD_SWAP_HORIZONTAL_CIRCLE "\xee\xa4\xb3" // U+e933 +#define ICON_MD_SWAP_VERT "\xee\xa3\x95" // U+e8d5 +#define ICON_MD_SWAP_VERT_CIRCLE "\xee\xa3\x96" // U+e8d6 +#define ICON_MD_SWAP_VERTICAL_CIRCLE "\xee\xa3\x96" // U+e8d6 +#define ICON_MD_SWIPE "\xee\xa7\xac" // U+e9ec +#define ICON_MD_SWIPE_DOWN "\xee\xad\x93" // U+eb53 +#define ICON_MD_SWIPE_DOWN_ALT "\xee\xac\xb0" // U+eb30 +#define ICON_MD_SWIPE_LEFT "\xee\xad\x99" // U+eb59 +#define ICON_MD_SWIPE_LEFT_ALT "\xee\xac\xb3" // U+eb33 +#define ICON_MD_SWIPE_RIGHT "\xee\xad\x92" // U+eb52 +#define ICON_MD_SWIPE_RIGHT_ALT "\xee\xad\x96" // U+eb56 +#define ICON_MD_SWIPE_UP "\xee\xac\xae" // U+eb2e +#define ICON_MD_SWIPE_UP_ALT "\xee\xac\xb5" // U+eb35 +#define ICON_MD_SWIPE_VERTICAL "\xee\xad\x91" // U+eb51 +#define ICON_MD_SWITCH_ACCESS_SHORTCUT "\xee\x9f\xa1" // U+e7e1 +#define ICON_MD_SWITCH_ACCESS_SHORTCUT_ADD "\xee\x9f\xa2" // U+e7e2 +#define ICON_MD_SWITCH_ACCOUNT "\xee\xa7\xad" // U+e9ed +#define ICON_MD_SWITCH_CAMERA "\xee\x90\x9e" // U+e41e +#define ICON_MD_SWITCH_LEFT "\xef\x87\x91" // U+f1d1 +#define ICON_MD_SWITCH_RIGHT "\xef\x87\x92" // U+f1d2 +#define ICON_MD_SWITCH_VIDEO "\xee\x90\x9f" // U+e41f +#define ICON_MD_SYNAGOGUE "\xee\xaa\xb0" // U+eab0 +#define ICON_MD_SYNC "\xee\x98\xa7" // U+e627 +#define ICON_MD_SYNC_ALT "\xee\xa8\x98" // U+ea18 +#define ICON_MD_SYNC_DISABLED "\xee\x98\xa8" // U+e628 +#define ICON_MD_SYNC_LOCK "\xee\xab\xae" // U+eaee +#define ICON_MD_SYNC_PROBLEM "\xee\x98\xa9" // U+e629 +#define ICON_MD_SYSTEM_SECURITY_UPDATE "\xef\x81\xb2" // U+f072 +#define ICON_MD_SYSTEM_SECURITY_UPDATE_GOOD "\xef\x81\xb3" // U+f073 +#define ICON_MD_SYSTEM_SECURITY_UPDATE_WARNING "\xef\x81\xb4" // U+f074 +#define ICON_MD_SYSTEM_UPDATE "\xee\x98\xaa" // U+e62a +#define ICON_MD_SYSTEM_UPDATE_ALT "\xee\xa3\x97" // U+e8d7 +#define ICON_MD_SYSTEM_UPDATE_TV "\xee\xa3\x97" // U+e8d7 +#define ICON_MD_TAB "\xee\xa3\x98" // U+e8d8 +#define ICON_MD_TAB_UNSELECTED "\xee\xa3\x99" // U+e8d9 +#define ICON_MD_TABLE_BAR "\xee\xab\x92" // U+ead2 +#define ICON_MD_TABLE_CHART "\xee\x89\xa5" // U+e265 +#define ICON_MD_TABLE_RESTAURANT "\xee\xab\x86" // U+eac6 +#define ICON_MD_TABLE_ROWS "\xef\x84\x81" // U+f101 +#define ICON_MD_TABLE_VIEW "\xef\x86\xbe" // U+f1be +#define ICON_MD_TABLET "\xee\x8c\xaf" // U+e32f +#define ICON_MD_TABLET_ANDROID "\xee\x8c\xb0" // U+e330 +#define ICON_MD_TABLET_MAC "\xee\x8c\xb1" // U+e331 +#define ICON_MD_TAG "\xee\xa7\xaf" // U+e9ef +#define ICON_MD_TAG_FACES "\xee\x90\xa0" // U+e420 +#define ICON_MD_TAKEOUT_DINING "\xee\xa9\xb4" // U+ea74 +#define ICON_MD_TAP_AND_PLAY "\xee\x98\xab" // U+e62b +#define ICON_MD_TAPAS "\xef\x87\xa9" // U+f1e9 +#define ICON_MD_TASK "\xef\x81\xb5" // U+f075 +#define ICON_MD_TASK_ALT "\xee\x8b\xa6" // U+e2e6 +#define ICON_MD_TAXI_ALERT "\xee\xbd\xb4" // U+ef74 +#define ICON_MD_TELEGRAM "\xee\xa9\xab" // U+ea6b +#define ICON_MD_TEMPLE_BUDDHIST "\xee\xaa\xb3" // U+eab3 +#define ICON_MD_TEMPLE_HINDU "\xee\xaa\xaf" // U+eaaf +#define ICON_MD_TERMINAL "\xee\xae\x8e" // U+eb8e +#define ICON_MD_TERRAIN "\xee\x95\xa4" // U+e564 +#define ICON_MD_TEXT_DECREASE "\xee\xab\x9d" // U+eadd +#define ICON_MD_TEXT_FIELDS "\xee\x89\xa2" // U+e262 +#define ICON_MD_TEXT_FORMAT "\xee\x85\xa5" // U+e165 +#define ICON_MD_TEXT_INCREASE "\xee\xab\xa2" // U+eae2 +#define ICON_MD_TEXT_ROTATE_UP "\xee\xa4\xba" // U+e93a +#define ICON_MD_TEXT_ROTATE_VERTICAL "\xee\xa4\xbb" // U+e93b +#define ICON_MD_TEXT_ROTATION_ANGLEDOWN "\xee\xa4\xbc" // U+e93c +#define ICON_MD_TEXT_ROTATION_ANGLEUP "\xee\xa4\xbd" // U+e93d +#define ICON_MD_TEXT_ROTATION_DOWN "\xee\xa4\xbe" // U+e93e +#define ICON_MD_TEXT_ROTATION_NONE "\xee\xa4\xbf" // U+e93f +#define ICON_MD_TEXT_SNIPPET "\xef\x87\x86" // U+f1c6 +#define ICON_MD_TEXTSMS "\xee\x83\x98" // U+e0d8 +#define ICON_MD_TEXTURE "\xee\x90\xa1" // U+e421 +#define ICON_MD_THEATER_COMEDY "\xee\xa9\xa6" // U+ea66 +#define ICON_MD_THEATERS "\xee\xa3\x9a" // U+e8da +#define ICON_MD_THERMOSTAT "\xef\x81\xb6" // U+f076 +#define ICON_MD_THERMOSTAT_AUTO "\xef\x81\xb7" // U+f077 +#define ICON_MD_THUMB_DOWN "\xee\xa3\x9b" // U+e8db +#define ICON_MD_THUMB_DOWN_ALT "\xee\xa0\x96" // U+e816 +#define ICON_MD_THUMB_DOWN_OFF_ALT "\xee\xa7\xb2" // U+e9f2 +#define ICON_MD_THUMB_UP "\xee\xa3\x9c" // U+e8dc +#define ICON_MD_THUMB_UP_ALT "\xee\xa0\x97" // U+e817 +#define ICON_MD_THUMB_UP_OFF_ALT "\xee\xa7\xb3" // U+e9f3 +#define ICON_MD_THUMBS_UP_DOWN "\xee\xa3\x9d" // U+e8dd +#define ICON_MD_THUNDERSTORM "\xee\xaf\x9b" // U+ebdb +#define ICON_MD_TIKTOK "\xee\xa9\xbe" // U+ea7e +#define ICON_MD_TIME_TO_LEAVE "\xee\x98\xac" // U+e62c +#define ICON_MD_TIMELAPSE "\xee\x90\xa2" // U+e422 +#define ICON_MD_TIMELINE "\xee\xa4\xa2" // U+e922 +#define ICON_MD_TIMER "\xee\x90\xa5" // U+e425 +#define ICON_MD_TIMER_10 "\xee\x90\xa3" // U+e423 +#define ICON_MD_TIMER_10_SELECT "\xef\x81\xba" // U+f07a +#define ICON_MD_TIMER_3 "\xee\x90\xa4" // U+e424 +#define ICON_MD_TIMER_3_SELECT "\xef\x81\xbb" // U+f07b +#define ICON_MD_TIMER_OFF "\xee\x90\xa6" // U+e426 +#define ICON_MD_TIPS_AND_UPDATES "\xee\x9e\x9a" // U+e79a +#define ICON_MD_TIRE_REPAIR "\xee\xaf\x88" // U+ebc8 +#define ICON_MD_TITLE "\xee\x89\xa4" // U+e264 +#define ICON_MD_TOC "\xee\xa3\x9e" // U+e8de +#define ICON_MD_TODAY "\xee\xa3\x9f" // U+e8df +#define ICON_MD_TOGGLE_OFF "\xee\xa7\xb5" // U+e9f5 +#define ICON_MD_TOGGLE_ON "\xee\xa7\xb6" // U+e9f6 +#define ICON_MD_TOKEN "\xee\xa8\xa5" // U+ea25 +#define ICON_MD_TOLL "\xee\xa3\xa0" // U+e8e0 +#define ICON_MD_TONALITY "\xee\x90\xa7" // U+e427 +#define ICON_MD_TOPIC "\xef\x87\x88" // U+f1c8 +#define ICON_MD_TORNADO "\xee\x86\x99" // U+e199 +#define ICON_MD_TOUCH_APP "\xee\xa4\x93" // U+e913 +#define ICON_MD_TOUR "\xee\xbd\xb5" // U+ef75 +#define ICON_MD_TOYS "\xee\x8c\xb2" // U+e332 +#define ICON_MD_TRACK_CHANGES "\xee\xa3\xa1" // U+e8e1 +#define ICON_MD_TRAFFIC "\xee\x95\xa5" // U+e565 +#define ICON_MD_TRAIN "\xee\x95\xb0" // U+e570 +#define ICON_MD_TRAM "\xee\x95\xb1" // U+e571 +#define ICON_MD_TRANSCRIBE "\xef\xa3\xac" // U+f8ec +#define ICON_MD_TRANSFER_WITHIN_A_STATION "\xee\x95\xb2" // U+e572 +#define ICON_MD_TRANSFORM "\xee\x90\xa8" // U+e428 +#define ICON_MD_TRANSGENDER "\xee\x96\x8d" // U+e58d +#define ICON_MD_TRANSIT_ENTEREXIT "\xee\x95\xb9" // U+e579 +#define ICON_MD_TRANSLATE "\xee\xa3\xa2" // U+e8e2 +#define ICON_MD_TRAVEL_EXPLORE "\xee\x8b\x9b" // U+e2db +#define ICON_MD_TRENDING_DOWN "\xee\xa3\xa3" // U+e8e3 +#define ICON_MD_TRENDING_FLAT "\xee\xa3\xa4" // U+e8e4 +#define ICON_MD_TRENDING_NEUTRAL "\xee\xa3\xa4" // U+e8e4 +#define ICON_MD_TRENDING_UP "\xee\xa3\xa5" // U+e8e5 +#define ICON_MD_TRIP_ORIGIN "\xee\x95\xbb" // U+e57b +#define ICON_MD_TROLLEY "\xef\xa1\xab" // U+f86b +#define ICON_MD_TROUBLESHOOT "\xee\x87\x92" // U+e1d2 +#define ICON_MD_TRY "\xef\x81\xbc" // U+f07c +#define ICON_MD_TSUNAMI "\xee\xaf\x98" // U+ebd8 +#define ICON_MD_TTY "\xef\x86\xaa" // U+f1aa +#define ICON_MD_TUNE "\xee\x90\xa9" // U+e429 +#define ICON_MD_TUNGSTEN "\xef\x81\xbd" // U+f07d +#define ICON_MD_TURN_LEFT "\xee\xae\xa6" // U+eba6 +#define ICON_MD_TURN_RIGHT "\xee\xae\xab" // U+ebab +#define ICON_MD_TURN_SHARP_LEFT "\xee\xae\xa7" // U+eba7 +#define ICON_MD_TURN_SHARP_RIGHT "\xee\xae\xaa" // U+ebaa +#define ICON_MD_TURN_SLIGHT_LEFT "\xee\xae\xa4" // U+eba4 +#define ICON_MD_TURN_SLIGHT_RIGHT "\xee\xae\x9a" // U+eb9a +#define ICON_MD_TURNED_IN "\xee\xa3\xa6" // U+e8e6 +#define ICON_MD_TURNED_IN_NOT "\xee\xa3\xa7" // U+e8e7 +#define ICON_MD_TV "\xee\x8c\xb3" // U+e333 +#define ICON_MD_TV_OFF "\xee\x99\x87" // U+e647 +#define ICON_MD_TWO_WHEELER "\xee\xa7\xb9" // U+e9f9 +#define ICON_MD_TYPE_SPECIMEN "\xef\xa3\xb0" // U+f8f0 +#define ICON_MD_U_TURN_LEFT "\xee\xae\xa1" // U+eba1 +#define ICON_MD_U_TURN_RIGHT "\xee\xae\xa2" // U+eba2 +#define ICON_MD_UMBRELLA "\xef\x86\xad" // U+f1ad +#define ICON_MD_UNARCHIVE "\xee\x85\xa9" // U+e169 +#define ICON_MD_UNDO "\xee\x85\xa6" // U+e166 +#define ICON_MD_UNFOLD_LESS "\xee\x97\x96" // U+e5d6 +#define ICON_MD_UNFOLD_LESS_DOUBLE "\xef\xa3\x8f" // U+f8cf +#define ICON_MD_UNFOLD_MORE "\xee\x97\x97" // U+e5d7 +#define ICON_MD_UNFOLD_MORE_DOUBLE "\xef\xa3\x90" // U+f8d0 +#define ICON_MD_UNPUBLISHED "\xef\x88\xb6" // U+f236 +#define ICON_MD_UNSUBSCRIBE "\xee\x83\xab" // U+e0eb +#define ICON_MD_UPCOMING "\xef\x81\xbe" // U+f07e +#define ICON_MD_UPDATE "\xee\xa4\xa3" // U+e923 +#define ICON_MD_UPDATE_DISABLED "\xee\x81\xb5" // U+e075 +#define ICON_MD_UPGRADE "\xef\x83\xbb" // U+f0fb +#define ICON_MD_UPLOAD "\xef\x82\x9b" // U+f09b +#define ICON_MD_UPLOAD_FILE "\xee\xa7\xbc" // U+e9fc +#define ICON_MD_USB "\xee\x87\xa0" // U+e1e0 +#define ICON_MD_USB_OFF "\xee\x93\xba" // U+e4fa +#define ICON_MD_VACCINES "\xee\x84\xb8" // U+e138 +#define ICON_MD_VAPE_FREE "\xee\xaf\x86" // U+ebc6 +#define ICON_MD_VAPING_ROOMS "\xee\xaf\x8f" // U+ebcf +#define ICON_MD_VERIFIED "\xee\xbd\xb6" // U+ef76 +#define ICON_MD_VERIFIED_USER "\xee\xa3\xa8" // U+e8e8 +#define ICON_MD_VERTICAL_ALIGN_BOTTOM "\xee\x89\x98" // U+e258 +#define ICON_MD_VERTICAL_ALIGN_CENTER "\xee\x89\x99" // U+e259 +#define ICON_MD_VERTICAL_ALIGN_TOP "\xee\x89\x9a" // U+e25a +#define ICON_MD_VERTICAL_DISTRIBUTE "\xee\x81\xb6" // U+e076 +#define ICON_MD_VERTICAL_SHADES "\xee\xb0\x8e" // U+ec0e +#define ICON_MD_VERTICAL_SHADES_CLOSED "\xee\xb0\x8d" // U+ec0d +#define ICON_MD_VERTICAL_SPLIT "\xee\xa5\x89" // U+e949 +#define ICON_MD_VIBRATION "\xee\x98\xad" // U+e62d +#define ICON_MD_VIDEO_CALL "\xee\x81\xb0" // U+e070 +#define ICON_MD_VIDEO_CAMERA_BACK "\xef\x81\xbf" // U+f07f +#define ICON_MD_VIDEO_CAMERA_FRONT "\xef\x82\x80" // U+f080 +#define ICON_MD_VIDEO_CHAT "\xef\xa2\xa0" // U+f8a0 +#define ICON_MD_VIDEO_COLLECTION "\xee\x81\x8a" // U+e04a +#define ICON_MD_VIDEO_FILE "\xee\xae\x87" // U+eb87 +#define ICON_MD_VIDEO_LABEL "\xee\x81\xb1" // U+e071 +#define ICON_MD_VIDEO_LIBRARY "\xee\x81\x8a" // U+e04a +#define ICON_MD_VIDEO_SETTINGS "\xee\xa9\xb5" // U+ea75 +#define ICON_MD_VIDEO_STABLE "\xef\x82\x81" // U+f081 +#define ICON_MD_VIDEOCAM "\xee\x81\x8b" // U+e04b +#define ICON_MD_VIDEOCAM_OFF "\xee\x81\x8c" // U+e04c +#define ICON_MD_VIDEOGAME_ASSET "\xee\x8c\xb8" // U+e338 +#define ICON_MD_VIDEOGAME_ASSET_OFF "\xee\x94\x80" // U+e500 +#define ICON_MD_VIEW_AGENDA "\xee\xa3\xa9" // U+e8e9 +#define ICON_MD_VIEW_ARRAY "\xee\xa3\xaa" // U+e8ea +#define ICON_MD_VIEW_CAROUSEL "\xee\xa3\xab" // U+e8eb +#define ICON_MD_VIEW_COLUMN "\xee\xa3\xac" // U+e8ec +#define ICON_MD_VIEW_COMFORTABLE "\xee\x90\xaa" // U+e42a +#define ICON_MD_VIEW_COMFY "\xee\x90\xaa" // U+e42a +#define ICON_MD_VIEW_COMFY_ALT "\xee\xad\xb3" // U+eb73 +#define ICON_MD_VIEW_COMPACT "\xee\x90\xab" // U+e42b +#define ICON_MD_VIEW_COMPACT_ALT "\xee\xad\xb4" // U+eb74 +#define ICON_MD_VIEW_COZY "\xee\xad\xb5" // U+eb75 +#define ICON_MD_VIEW_DAY "\xee\xa3\xad" // U+e8ed +#define ICON_MD_VIEW_HEADLINE "\xee\xa3\xae" // U+e8ee +#define ICON_MD_VIEW_IN_AR "\xee\xa7\xbe" // U+e9fe +#define ICON_MD_VIEW_KANBAN "\xee\xad\xbf" // U+eb7f +#define ICON_MD_VIEW_LIST "\xee\xa3\xaf" // U+e8ef +#define ICON_MD_VIEW_MODULE "\xee\xa3\xb0" // U+e8f0 +#define ICON_MD_VIEW_QUILT "\xee\xa3\xb1" // U+e8f1 +#define ICON_MD_VIEW_SIDEBAR "\xef\x84\x94" // U+f114 +#define ICON_MD_VIEW_STREAM "\xee\xa3\xb2" // U+e8f2 +#define ICON_MD_VIEW_TIMELINE "\xee\xae\x85" // U+eb85 +#define ICON_MD_VIEW_WEEK "\xee\xa3\xb3" // U+e8f3 +#define ICON_MD_VIGNETTE "\xee\x90\xb5" // U+e435 +#define ICON_MD_VILLA "\xee\x96\x86" // U+e586 +#define ICON_MD_VISIBILITY "\xee\xa3\xb4" // U+e8f4 +#define ICON_MD_VISIBILITY_OFF "\xee\xa3\xb5" // U+e8f5 +#define ICON_MD_VOICE_CHAT "\xee\x98\xae" // U+e62e +#define ICON_MD_VOICE_OVER_OFF "\xee\xa5\x8a" // U+e94a +#define ICON_MD_VOICEMAIL "\xee\x83\x99" // U+e0d9 +#define ICON_MD_VOLCANO "\xee\xaf\x9a" // U+ebda +#define ICON_MD_VOLUME_DOWN "\xee\x81\x8d" // U+e04d +#define ICON_MD_VOLUME_DOWN_ALT "\xee\x9e\x9c" // U+e79c +#define ICON_MD_VOLUME_MUTE "\xee\x81\x8e" // U+e04e +#define ICON_MD_VOLUME_OFF "\xee\x81\x8f" // U+e04f +#define ICON_MD_VOLUME_UP "\xee\x81\x90" // U+e050 +#define ICON_MD_VOLUNTEER_ACTIVISM "\xee\xa9\xb0" // U+ea70 +#define ICON_MD_VPN_KEY "\xee\x83\x9a" // U+e0da +#define ICON_MD_VPN_KEY_OFF "\xee\xad\xba" // U+eb7a +#define ICON_MD_VPN_LOCK "\xee\x98\xaf" // U+e62f +#define ICON_MD_VRPANO "\xef\x82\x82" // U+f082 +#define ICON_MD_WALLET "\xef\xa3\xbf" // U+f8ff +#define ICON_MD_WALLET_GIFTCARD "\xee\xa3\xb6" // U+e8f6 +#define ICON_MD_WALLET_MEMBERSHIP "\xee\xa3\xb7" // U+e8f7 +#define ICON_MD_WALLET_TRAVEL "\xee\xa3\xb8" // U+e8f8 +#define ICON_MD_WALLPAPER "\xee\x86\xbc" // U+e1bc +#define ICON_MD_WAREHOUSE "\xee\xae\xb8" // U+ebb8 +#define ICON_MD_WARNING "\xee\x80\x82" // U+e002 +#define ICON_MD_WARNING_AMBER "\xef\x82\x83" // U+f083 +#define ICON_MD_WASH "\xef\x86\xb1" // U+f1b1 +#define ICON_MD_WATCH "\xee\x8c\xb4" // U+e334 +#define ICON_MD_WATCH_LATER "\xee\xa4\xa4" // U+e924 +#define ICON_MD_WATCH_OFF "\xee\xab\xa3" // U+eae3 +#define ICON_MD_WATER "\xef\x82\x84" // U+f084 +#define ICON_MD_WATER_DAMAGE "\xef\x88\x83" // U+f203 +#define ICON_MD_WATER_DROP "\xee\x9e\x98" // U+e798 +#define ICON_MD_WATERFALL_CHART "\xee\xa8\x80" // U+ea00 +#define ICON_MD_WAVES "\xee\x85\xb6" // U+e176 +#define ICON_MD_WAVING_HAND "\xee\x9d\xa6" // U+e766 +#define ICON_MD_WB_AUTO "\xee\x90\xac" // U+e42c +#define ICON_MD_WB_CLOUDY "\xee\x90\xad" // U+e42d +#define ICON_MD_WB_INCANDESCENT "\xee\x90\xae" // U+e42e +#define ICON_MD_WB_IRIDESCENT "\xee\x90\xb6" // U+e436 +#define ICON_MD_WB_SHADE "\xee\xa8\x81" // U+ea01 +#define ICON_MD_WB_SUNNY "\xee\x90\xb0" // U+e430 +#define ICON_MD_WB_TWIGHLIGHT "\xee\xa8\x82" // U+ea02 +#define ICON_MD_WB_TWILIGHT "\xee\x87\x86" // U+e1c6 +#define ICON_MD_WC "\xee\x98\xbd" // U+e63d +#define ICON_MD_WEB "\xee\x81\x91" // U+e051 +#define ICON_MD_WEB_ASSET "\xee\x81\xa9" // U+e069 +#define ICON_MD_WEB_ASSET_OFF "\xee\x93\xb7" // U+e4f7 +#define ICON_MD_WEB_STORIES "\xee\x96\x95" // U+e595 +#define ICON_MD_WEBHOOK "\xee\xae\x92" // U+eb92 +#define ICON_MD_WECHAT "\xee\xaa\x81" // U+ea81 +#define ICON_MD_WEEKEND "\xee\x85\xab" // U+e16b +#define ICON_MD_WEST "\xef\x87\xa6" // U+f1e6 +#define ICON_MD_WHATSAPP "\xee\xaa\x9c" // U+ea9c +#define ICON_MD_WHATSHOT "\xee\xa0\x8e" // U+e80e +#define ICON_MD_WHEELCHAIR_PICKUP "\xef\x86\xab" // U+f1ab +#define ICON_MD_WHERE_TO_VOTE "\xee\x85\xb7" // U+e177 +#define ICON_MD_WIDGETS "\xee\x86\xbd" // U+e1bd +#define ICON_MD_WIDTH_FULL "\xef\xa3\xb5" // U+f8f5 +#define ICON_MD_WIDTH_NORMAL "\xef\xa3\xb6" // U+f8f6 +#define ICON_MD_WIDTH_WIDE "\xef\xa3\xb7" // U+f8f7 +#define ICON_MD_WIFI "\xee\x98\xbe" // U+e63e +#define ICON_MD_WIFI_1_BAR "\xee\x93\x8a" // U+e4ca +#define ICON_MD_WIFI_2_BAR "\xee\x93\x99" // U+e4d9 +#define ICON_MD_WIFI_CALLING "\xee\xbd\xb7" // U+ef77 +#define ICON_MD_WIFI_CALLING_3 "\xef\x82\x85" // U+f085 +#define ICON_MD_WIFI_CHANNEL "\xee\xad\xaa" // U+eb6a +#define ICON_MD_WIFI_FIND "\xee\xac\xb1" // U+eb31 +#define ICON_MD_WIFI_LOCK "\xee\x87\xa1" // U+e1e1 +#define ICON_MD_WIFI_OFF "\xee\x99\x88" // U+e648 +#define ICON_MD_WIFI_PASSWORD "\xee\xad\xab" // U+eb6b +#define ICON_MD_WIFI_PROTECTED_SETUP "\xef\x83\xbc" // U+f0fc +#define ICON_MD_WIFI_TETHERING "\xee\x87\xa2" // U+e1e2 +#define ICON_MD_WIFI_TETHERING_ERROR "\xee\xab\x99" // U+ead9 +#define ICON_MD_WIFI_TETHERING_ERROR_ROUNDED "\xef\x82\x86" // U+f086 +#define ICON_MD_WIFI_TETHERING_OFF "\xef\x82\x87" // U+f087 +#define ICON_MD_WIND_POWER "\xee\xb0\x8c" // U+ec0c +#define ICON_MD_WINDOW "\xef\x82\x88" // U+f088 +#define ICON_MD_WINE_BAR "\xef\x87\xa8" // U+f1e8 +#define ICON_MD_WOMAN "\xee\x84\xbe" // U+e13e +#define ICON_MD_WOMAN_2 "\xef\xa3\xa7" // U+f8e7 +#define ICON_MD_WOO_COMMERCE "\xee\xa9\xad" // U+ea6d +#define ICON_MD_WORDPRESS "\xee\xaa\x9f" // U+ea9f +#define ICON_MD_WORK "\xee\xa3\xb9" // U+e8f9 +#define ICON_MD_WORK_HISTORY "\xee\xb0\x89" // U+ec09 +#define ICON_MD_WORK_OFF "\xee\xa5\x82" // U+e942 +#define ICON_MD_WORK_OUTLINE "\xee\xa5\x83" // U+e943 +#define ICON_MD_WORKSPACE_PREMIUM "\xee\x9e\xaf" // U+e7af +#define ICON_MD_WORKSPACES "\xee\x86\xa0" // U+e1a0 +#define ICON_MD_WORKSPACES_FILLED "\xee\xa8\x8d" // U+ea0d +#define ICON_MD_WORKSPACES_OUTLINE "\xee\xa8\x8f" // U+ea0f +#define ICON_MD_WRAP_TEXT "\xee\x89\x9b" // U+e25b +#define ICON_MD_WRONG_LOCATION "\xee\xbd\xb8" // U+ef78 +#define ICON_MD_WYSIWYG "\xef\x87\x83" // U+f1c3 +#define ICON_MD_YARD "\xef\x82\x89" // U+f089 +#define ICON_MD_YOUTUBE_SEARCHED_FOR "\xee\xa3\xba" // U+e8fa +#define ICON_MD_ZOOM_IN "\xee\xa3\xbf" // U+e8ff +#define ICON_MD_ZOOM_IN_MAP "\xee\xac\xad" // U+eb2d +#define ICON_MD_ZOOM_OUT "\xee\xa4\x80" // U+e900 +#define ICON_MD_ZOOM_OUT_MAP "\xee\x95\xab" // U+e56b \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 89814bc5..34ebe6a6 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -1,79 +1,125 @@ +//#==============================================================# +//|| PCH Include || +//#==============================================================# #include "SHpch.h" -#include "SHEditor.h" -#include +#include "IconsMaterialDesign.h" +#include "DragDrop/SHDragDrop.hpp" + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Tools/SHLogger.h" +#include "Tools/SHException.h" #include "ECS_Base/Managers/SHSystemManager.h" + #include "Graphics/Instance/SHVkInstance.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" +#include "Graphics/MiddleEnd/Interface/SHRenderer.h" -//IMGUI Backend includes +#include "SHEditor.hpp" +#include "SHEditorWidgets.hpp" + +//#==============================================================# +//|| Editor Window Includes || +//#==============================================================# +#include "EditorWindow/SHEditorWindowIncludes.h" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include +#include + +//#==============================================================# +//|| ImGui Backend Includes || +//#==============================================================# #include #include + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + registration::enumeration("Style") + ( + value("SHADE", SHEditor::Style::SHADE), + value("DARK", SHEditor::Style::DARK), + value("LIGHT", SHEditor::Style::LIGHT), + value("CLASSIC", SHEditor::Style::CLASSIC) + ); +} + + namespace SHADE { + //#==============================================================# + //|| Initialise static members || + //#==============================================================# Handle SHEditor::imguiCommandPool; Handle SHEditor::imguiCommandBuffer; + SHEditor::EditorWindowMap SHEditor::editorWindows{}; + SHEditor::EditorWindowID SHEditor::windowCount{}; + std::vector SHEditor::selectedEntities; - void SHEditor::Initialise(SDL_Window* sdlWindow) + //#==============================================================# + //|| Public Member Functions || + //#==============================================================# + void SHEditor::Initialise(SDL_Window* const sdlWindow) { IMGUI_CHECKVERSION(); - ImGui::CreateContext(); + if(auto context = ImGui::CreateContext()) + { + if(context == nullptr) + { + SHLOG_CRITICAL("Failed to create ImGui Context") + } + } ImGuiIO& io = ImGui::GetIO(); (void)io; io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; + io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking - ImGui_ImplSDL2_InitForVulkan(sdlWindow); + InitFonts(); + InitBackend(sdlWindow); - auto* gfxSystem = reinterpret_cast(SHSystemManager::GetSystem()); + SetStyle(Style::SHADE); + + //Add editor windows + CreateEditorWindow(); + CreateEditorWindow(); + CreateEditorWindow(); - ImGui_ImplVulkan_InitInfo initInfo{}; - initInfo.Instance = SHVkInstance::GetVkInstance(); - initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice(); - initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice(); - initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue(); - initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle(); - initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages(); - initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; - - imguiCommandPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); - imguiCommandBuffer = imguiCommandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - - /*auto renderPass = gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetRenderpass(); - ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass());*/ - - imguiCommandBuffer->BeginRecording(); - ImGui_ImplVulkan_CreateFontsTexture(imguiCommandBuffer->GetVkCommandBuffer()); - imguiCommandBuffer->EndRecording(); - gfxSystem->GetQueue()->SubmitCommandBuffer({imguiCommandBuffer}, {}, {}, vk::PipelineStageFlagBits::eNone, {}); - - ImGui_ImplVulkan_DestroyFontUploadObjects(); - - /*gfxSystem->GetRenderGraph().GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { - ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); - });*/ - - //ImGuiIO& io = ImGui::GetIO(); - //int w, h; - //SDL_GetWindowSize(sdlWindow, &w, &h); - //io.DisplaySize = { static_cast(w),static_cast(h)}; + SHLOG_INFO("Successfully initialised SHADE Engine Editor") } - void SHEditor::PreRender() + void SHEditor::Update(float const dt) { + (void)dt; NewFrame(); - ImGui::ShowDemoWindow(); - ImGui::Begin("Your mom"); - if (ImGui::Button("OP")) + for (const auto& window : editorWindows | std::views::values) { - std::cout << "HEHEHEOHEIOHIEOH\n"; + window->Update(); } - ImGui::End(); + + if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) + { + SHCommandManager::RedoCommand(); + } + else if(ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) + { + SHCommandManager::UndoCommand(); + } + + + Render(); } void SHEditor::Render() @@ -87,6 +133,18 @@ namespace SHADE } } + void SHEditor::InitFonts() noexcept + { + ImGuiIO& io = ImGui::GetIO(); + ImFont* mainFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + + static const ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; + ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.PixelSnapH = true; + ImFont* UIFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path + + io.Fonts->Build(); + } + void SHEditor::Exit() { ImGui_ImplVulkan_Shutdown(); @@ -94,19 +152,164 @@ namespace SHADE ImGui::DestroyContext(); } - - void SHEditor::InitBackend() + void SHEditor::SetStyle(Style style) { + switch (style) + { + default: + case Style::SHADE: + { + ImGuiStyle& imStyle = ImGui::GetStyle(); + ImVec4* colors = imStyle.Colors; + colors[ImGuiCol_Text] = ImVec4(0.706f, 0.729f, 0.757f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.172f, 0.184f, 0.203f, 1.f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); + colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); + colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_TitleBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgCollapsed] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_MenuBarBg] = ImVec4(0.129f, 0.141f, 0.157f, 1.f); + colors[ImGuiCol_ScrollbarBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_CheckMark] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.15f, 0.15f, 0.54f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); + colors[ImGuiCol_Separator] = colors[ImGuiCol_MenuBarBg]; + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_Tab] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_TabActive] = ImVec4(0.14f, 0.14f, 0.14f, 0.8f); + colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_DockingPreview] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.855f, 0.6f, 0.941f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.73f, 0.73f, 0.73f, 0.7f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.141f, 0.141f, 0.141f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = colors[ImGuiCol_NavHighlight]; + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.2f, 0.2f, 0.2f, 0.65f); + + imStyle.WindowPadding = ImVec2(8.00f, 8.00f); + imStyle.FramePadding = ImVec2(5.00f, 2.00f); + imStyle.CellPadding = ImVec2(6.00f, 8.00f); + imStyle.ItemSpacing = ImVec2(6.00f, 6.00f); + imStyle.ItemInnerSpacing = ImVec2(6.00f, 6.00f); + imStyle.TouchExtraPadding = ImVec2(0.00f, 0.00f); + imStyle.IndentSpacing = 25; + imStyle.ScrollbarSize = 15; + imStyle.GrabMinSize = 10; + imStyle.WindowBorderSize = 0.6f; + imStyle.ChildBorderSize = 1; + imStyle.PopupBorderSize = 1; + imStyle.FrameBorderSize = 1; + imStyle.TabBorderSize = 1; + imStyle.WindowRounding = 7; + imStyle.ChildRounding = 4; + imStyle.FrameRounding = 3; + imStyle.PopupRounding = 4; + imStyle.ScrollbarRounding = 9; + imStyle.GrabRounding = 3; + imStyle.LogSliderDeadzone = 4; + imStyle.TabRounding = 4; + imStyle.WindowMenuButtonPosition = ImGuiDir_None; + } + break; + case Style::DARK: ImGui::StyleColorsDark(); break; + case Style::LIGHT: ImGui::StyleColorsLight(); break; + case Style::CLASSIC: ImGui::StyleColorsClassic(); break; + } + + } + + //#==============================================================# + //|| Private Member Functions || + //#==============================================================# + void SHEditor::InitBackend(SDL_Window* sdlWindow) + { + if(ImGui_ImplSDL2_InitForVulkan(sdlWindow) == false) + { + SHLOG_CRITICAL("Editor backend initialisation; Failed to perform SDL initialisation for Vulkan") + } + + const auto* gfxSystem = SHSystemManager::GetSystem(); + + ImGui_ImplVulkan_InitInfo initInfo{}; + initInfo.Instance = SHVkInstance::GetVkInstance(); + initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice(); + initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice(); + initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue(); + initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle(); + initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages(); + initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; + + imguiCommandPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + imguiCommandBuffer = imguiCommandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + + auto const& renderers = gfxSystem->GetDefaultViewport()->GetRenderers(); + + SHASSERT(!renderers.empty(), "No Renderers available") + auto renderGraph = renderers[0]->GetRenderGraph(); + auto renderPass = renderGraph->GetNode("ImGui Node")->GetRenderpass(); + + if(ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass()) == false) + { + SHLOG_CRITICAL("Editor backend initialisation; Failed to initialise Vulkan backend") + } + + imguiCommandBuffer->BeginRecording(); + if(ImGui_ImplVulkan_CreateFontsTexture(imguiCommandBuffer->GetVkCommandBuffer()) == false) + { + SHLOG_CRITICAL("Editor backend initialisation; Failed to create fonts texture for Vulkan backend") + } + imguiCommandBuffer->EndRecording(); + gfxSystem->GetQueue()->SubmitCommandBuffer({ imguiCommandBuffer }, {}, {}, vk::PipelineStageFlagBits::eNone, {}); + + ImGui_ImplVulkan_DestroyFontUploadObjects(); + + renderGraph->GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { + ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); + }); } void SHEditor::NewFrame() { + SDL_Event event; + while (SDL_PollEvent(&event) != 0) + { + ImGui_ImplSDL2_ProcessEvent(&event); + } ImGui_ImplVulkan_NewFrame(); ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); } + - void SHEditor::EndFrame() - { - } -} +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h deleted file mode 100644 index 18ce92c1..00000000 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include "SH_API.h" -#include - -#include "Resource/Handle.h" - - -namespace SHADE -{ - class SHVkCommandBuffer; - class SHVkCommandPool; - - class SH_API SHEditor - { - public: - static void Initialise(SDL_Window* sdlWindow); - static void PreRender(); - static void Render(); - static void Exit(); - private: - static void InitBackend(); - static void NewFrame(); - static void EndFrame(); - - static Handle imguiCommandPool; - static Handle imguiCommandBuffer; - }; -} diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp new file mode 100644 index 00000000..467cbcd0 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -0,0 +1,168 @@ +#pragma once + +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "SH_API.h" +#include "ECS_Base/SHECSMacros.h" +#include "Resource/Handle.h" +#include "EditorWindow/SHEditorWindow.h" +#include "Tools/SHLogger.h" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + +namespace SHADE +{ + //#==============================================================# + //|| Forward Declarations || + //#==============================================================# + class SHVkCommandBuffer; + class SHVkCommandPool; + + /** + * @brief SHEditor static class contains editor variables and implementation of editor functions. + * + */ + class SH_API SHEditor + { + public: + //#==============================================================# + //|| Type Aliases || + //#==============================================================# + using EditorWindowID = uint8_t; + using EditorWindowPtr = std::unique_ptr; + using EditorWindowMap = std::unordered_map; + + /** + * @brief Style options + * + */ + enum class Style : uint8_t + { + SHADE, + DARK, + LIGHT, + CLASSIC + }; + + /** + * @brief Initialise the editor + * + * @param sdlWindow pointer to SDL_Window object created in application + */ + static void Initialise(SDL_Window* sdlWindow); + + /** + * @brief Update the editor and add to ImGui DrawList + * + * @param dt Delta-time of the frame + */ + static void Update(float dt); + + /** + * @brief Safely shutdown the editor + * + */ + static void Exit(); + + /** + * @brief Set the Style for the editor + * + * @param style Desired style + */ + static void SetStyle(Style style); + + /** + * @brief Get ID for the Editor Window Type + * + * @tparam T Type of Editor Window + * @return EditorWindowID ID of Editor Window Type + */ + template , bool> = true> + static EditorWindowID GetEditorWindowID() + { + static EditorWindowID id; + static bool idCreated = false; + if (!idCreated) + { + id = windowCount++; + idCreated = true; + } + return id; + } + + /** + * @brief Get pointer to the Editor Window + * + * @tparam T Type of editor window to retrieve + * @return T* Pointer to the editor window + */ + template , bool> = true> + static T* GetEditorWindow() + { + return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); + } + + // List of selected entities + static std::vector selectedEntities; + + private: + /** + * @brief Initialise Backend for ImGui (SDL and Vulkan backend) + * + * @param sdlWindow Pointer to SDL_Window + */ + static void InitBackend(SDL_Window* sdlWindow); + /** + * @brief Start new frame for editor + * + */ + static void NewFrame(); + /** + * @brief Perform ImGui and ImGui Backend Render + * + */ + static void Render(); + + /** + * @brief Create an Editor Window + * + * @tparam T Type of Editor Window to create + */ + template , bool> = true> + static void CreateEditorWindow() + { + static bool isCreated = false; + if (!isCreated) + { + editorWindows[GetEditorWindowID()] = std::make_unique(); + isCreated = true; + } + else + { + SHLOG_WARNING("Attempt to create duplicate of Editor window type") + } + } + + static void InitFonts() noexcept; + + // Handle to command pool used for ImGui Vulkan Backend + static Handle imguiCommandPool; + // Handle to command buffer used for ImGui Vulkan Backend + static Handle imguiCommandBuffer; + + // Number of windows; used for Editor Window ID Generation + static EditorWindowID windowCount; + // Map of Editor Windows + static EditorWindowMap editorWindows; + };//class SHEditor +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp new file mode 100644 index 00000000..4a934e8c --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -0,0 +1,187 @@ +#pragma once +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include +#include +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Math/SHMath.h" +#include "Command/SHCommandManager.h" +#include "SHImGuiHelpers.hpp" + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include +#include +#include + +namespace SHADE +{ + //#==============================================================# + //|| Custom Widgets || + //#==============================================================# + static bool Splitter(bool verticalSplit, float thickness, float* size1, float* size2, float minSize1, float minSize2, float splitterAxisSize = -1.0f) + { + ImGuiWindow* window = ImGui::GetCurrentWindow(); + const ImGuiID id = window->GetID("##Splitter"); + ImRect bb; + bb.Min = window->DC.CursorPos + (verticalSplit ? ImVec2(*size1, 0.0f) : ImVec2(0.0f, *size1)); + bb.Max = bb.Min + (verticalSplit ? ImVec2(thickness, splitterAxisSize) : ImVec2(splitterAxisSize, thickness)); + return ImGui::SplitterBehavior(bb, id, verticalSplit ? ImGuiAxis_X : ImGuiAxis_Y, size1, size2, minSize1, minSize2, 0.0f); + } + + template + static bool DragN(const std::string& fieldLabel, std::vectorconst& componentLabels, + std::vector values, float speed = 0.1f, const char* displayFormat = "", T valueMin = T(), T valueMax = T(), + ImGuiSliderFlags flags = 0) + { + const ImGuiWindow* const window = ImGui::GetCurrentWindow(); + if (window->SkipItems) + return false; + + const ImGuiContext& g = *GImGui; + bool valueChanged = false; + ImGui::BeginGroup(); + ImGui::PushID(fieldLabel.c_str()); + PushMultiItemsWidthsAndLabels(componentLabels, 0.0f); + ImGui::BeginColumns("DragVecCol", 2, ImGuiOldColumnFlags_NoBorder | ImGuiOldColumnFlags_NoResize); + ImGui::SetColumnWidth(-1, 80.0f); + ImGui::Text(fieldLabel.c_str()); + ImGui::NextColumn(); + for (std::size_t i = 0; i < N; ++i) + { + ImGui::PushID(static_cast(i)); + ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); + ImGui::SetNextItemWidth(80.0f); + valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); + + const ImVec2 min = ImGui::GetItemRectMin(); + const ImVec2 max = ImGui::GetItemRectMax(); + const float spacing = g.Style.FrameRounding; + const float halfSpacing = spacing / 2; + + window->DrawList->AddLine({ min.x + spacing, max.y - halfSpacing }, { max.x - spacing, max.y - halfSpacing }, + ImGuiColors::colors[i], 4); + + ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); + ImGui::PopID(); + ImGui::PopItemWidth(); + } + ImGui::EndColumns(); + ImGui::PopID(); + ImGui::EndGroup(); + + return valueChanged; + } + + static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) + { + SHVec2 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; + } + + static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) + { + SHVec3 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; + } + + static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + ImGuiSliderFlags flags = 0) + { + SHVec4 values = get(); + bool changed = false; + if (DragN(fieldLabel, componentLabels, {&values.x, &values.y, &values.z, &values.w}, speed, displayFormat, valueMin, valueMax, flags)) + { + changed = true; + } + + if (changed) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + else if(ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + else if(ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + } + + return changed; + } + + //#==============================================================# + //|| Widget Extensions || + //#==============================================================# + + static bool CheckBox(std::string const& label, std::function get, std::function set) + { + bool value = get(); + if (ImGui::Checkbox(label.c_str(), &value)) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + return true; + } + return false; + } + + template + static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) + { + T type = get(); + for (size_t i = 0; i < listTypes.size(); i++) + { + if (ImGui::RadioButton(listLabels[i].c_str(), type == listTypes[i])) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); + } + ImGui::SameLine(); + } + return true; + } + + + +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp b/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp new file mode 100644 index 00000000..66eeb8c4 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp @@ -0,0 +1,69 @@ +#pragma once + +//#==============================================================# +//|| STL Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "Math/SHMath.h" + +//#==============================================================# +//|| SHADE-ImGui Math Conversions || +//#==============================================================# +#ifndef SH_IM_MATH +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const SHADE::SHVec2& vec) {x = vec.x; y = vec.y;} \ + operator SHADE::SHVec2() const {return SHADE::SHVec2(x,y);} +#define IM_VEC3_CLASS_EXTRA \ + ImVec3(const SHADE::SHVec3& vec) {x = vec.x; y = vec.y; z = vec.z;} \ + operator SHADE::SHVec3() const {return SHADE::SHVec3(x,y,z);} +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const SHADE::SHVec4& vec) {x = vec.x; y = vec.y; z = vec.z; w = vec.w;} \ + operator SHADE::SHVec4() const {return SHADE::SHVec4(x,y,z,w);} +#endif + +#define IMGUI_DEFINE_MATH_OPERATORS + +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include +#include + + +namespace SHADE +{ + namespace ImGuiColors + { + constexpr ImVec4 red = {1.0f, 0.0f, 0.0f, 1.f}; + constexpr ImVec4 green = {0.0f, 1.0f, 0.0f, 1.f}; + constexpr ImVec4 blue = {0.0f, 0.0f, 1.0f, 1.f}; + constexpr ImVec4 white = {1.0f, 1.0f, 1.0f, 1.f}; + + constexpr ImU32 colors[] = { + 0xBB0000FF, // red + 0xBB00FF00, // green + 0xBBFF0000, // blue + 0xBBFFFFFF, // white + }; + } + + static void PushMultiItemsWidthsAndLabels(const std::vector& labels, float wFull) + { + ImGuiWindow* window = ImGui::GetCurrentWindow(); + const ImGuiStyle& style = GImGui->Style; + if (wFull <= 0.0f) + wFull = ImGui::GetContentRegionAvail().x; + const auto size = labels.size(); + const float w_item_one = + ImMax(1.0f, (wFull - (static_cast(size) - 1.0f) * (style.ItemInnerSpacing.x * 2.0f)) / static_cast( + size)) - + style.ItemInnerSpacing.x; + for (int i = 0; i < size; i++) + window->DC.ItemWidthStack.push_back(w_item_one - ImGui::CalcTextSize(labels[i].c_str()).x); + window->DC.ItemWidth = window->DC.ItemWidthStack.back(); + } +} //namespace SHADE diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 48f16713..104329d2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -149,10 +149,11 @@ namespace SHADE //compositeSubpass->AddInput("Normals"); //compositeSubpass->AddInput("Position"); - // TODO: Use macro to add this node when SH_EDITOR is enabled - //auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); - //auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - //imguiSubpass->AddColorOutput("Present"); +#ifdef SHEDITOR + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); +#endif worldRenderGraph->Generate(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 3dc452be..8ab684ca 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -200,6 +200,7 @@ namespace SHADE Handle GetPhysicalDevice() const { return physicalDevice; } Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } + Handle GetDefaultViewport() const {return defaultViewport;} //SHRenderGraph const& GetRenderGraph(void) const noexcept; //Handle GetRenderPass() const { return renderPass; } diff --git a/premake5.lua b/premake5.lua index 8b6c5a29..cebb5544 100644 --- a/premake5.lua +++ b/premake5.lua @@ -7,7 +7,8 @@ workspace "SHADE" configurations { "Debug", - "Release" + "Release", + "Publish" } flags From fc5ff763f3d64b84d05a3b1da30ad7372ad74207 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 25 Sep 2022 22:55:14 +0800 Subject: [PATCH 204/793] Added SHMaterialInstanceCache --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 13 ++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 11 ++- .../MiddleEnd/Interface/SHRenderable.cpp | 2 +- .../Materials/SHMaterialInstanceCache.cpp | 47 ++++++++++ .../Materials/SHMaterialInstanceCache.h | 93 +++++++++++++++++++ 6 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 0caf3c7e..c91fee9c 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -36,7 +36,7 @@ namespace Sandbox graphicsSystem->BuildMeshBuffers(); // Create Materials - auto matInst = graphicsSystem->AddMaterialInstance(); + auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = { 0.2f, 0.2f, 0.2f }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 48f16713..b909aeff 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -415,14 +415,19 @@ namespace SHADE resourceManager.Free(material); } - Handle SHGraphicsSystem::AddMaterialInstance(Handle material) + Handle SHGraphicsSystem::AddOrGetBaseMaterialInstance(Handle material) { - return resourceManager.Create(material); + return materialInstanceCache.CreateOrGet(resourceManager, material); } - SHADE::Handle SHGraphicsSystem::AddMaterialInstance() + SHADE::Handle SHGraphicsSystem::AddOrGetBaseMaterialInstance() { - return AddMaterialInstance(defaultMaterial); + return AddOrGetBaseMaterialInstance(defaultMaterial); + } + + SHADE::Handle SHGraphicsSystem::AddMaterialInstanceCopy(Handle materialInst) + { + return resourceManager.Create(materialInst->GetBaseMaterial()); } void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 3dc452be..bee7a0f1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -28,6 +28,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h" #include "Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h" #include "SHMeshLibrary.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h" namespace SHADE { @@ -119,9 +120,10 @@ namespace SHADE /* Material Creation Functions */ /*-----------------------------------------------------------------------------*/ Handle AddMaterial(Handle vertShader, Handle fragShader, Handle subpass); - void RemoveMaterial(Handle material);; - Handle AddMaterialInstance(); - Handle AddMaterialInstance(Handle material); + void RemoveMaterial(Handle material); + Handle AddOrGetBaseMaterialInstance(); + Handle AddOrGetBaseMaterialInstance(Handle material); + Handle AddMaterialInstanceCopy(Handle materialInst); void RemoveMaterialInstance(Handle materialInstance); /*-----------------------------------------------------------------------------*/ @@ -228,8 +230,9 @@ namespace SHADE Handle globalData; // Middle End Resources - ResourceManager resourceManager; + ResourceManager resourceManager; SHMeshLibrary meshLibrary; + SHMaterialInstanceCache materialInstanceCache; // Viewports Handle defaultViewport; // Whole screen std::vector> viewports; // Additional viewports diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 5199565c..a4cda42d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -81,7 +81,7 @@ namespace SHADE if (!material) { SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); - material = gfxSystem->AddMaterialInstance(sharedMaterial->GetBaseMaterial()); + material = gfxSystem->AddOrGetBaseMaterialInstance(sharedMaterial->GetBaseMaterial()); } return material; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp new file mode 100644 index 00000000..ed3d27c3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp @@ -0,0 +1,47 @@ +/************************************************************************************//*! +\file SHMaterialInstanceCache.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 25, 2022 +\brief Contains the definition of SHMaterialInstanceCache's functions. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMaterialInstanceCache.h" + +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Resource/ResourceLibrary.h" + + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + SHADE::Handle SHMaterialInstanceCache::CreateOrGet(ResourceManager& manager, Handle material) + { + // Check if there is already an existing instance + auto matInst = cache.find(material); + if (matInst == cache.end()) + { + // Create and return + return cache.emplace(material, manager.Create(material)).first->second; + } + + return matInst->second; + } + + void SHMaterialInstanceCache::Remove(Handle material) + { + cache.erase(material); + } + + void SHMaterialInstanceCache::Clear() + { + cache.clear(); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h new file mode 100644 index 00000000..d85cb553 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h @@ -0,0 +1,93 @@ +/************************************************************************************//*! +\file SHMaterialInstanceCache.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 25, 2022 +\brief Contains the definition of SHMaterialInstanceCache. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHMaterial; + class SHMaterialInstance; + class ResourceManager; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /*************************************************************************************/ + /*! + \brief + Creates and caches base SHMaterialInstances. Note that base SHMaterialInstances + refer to SHMaterialInstances with no overrides. + */ + /*************************************************************************************/ + class SHMaterialInstanceCache + { + public: + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + + \brief + + + \param material + Material to get the SHMaterialInstance for. + + \return + Handle to the base SHMaterialInstance that is mapped to SHMaterial. + + */ + /***********************************************************************************/ + Handle CreateOrGet(ResourceManager& manager, Handle material); + /***********************************************************************************/ + /*! + + \brief + Removes a SHMaterialInstance from the cache with a matching material. + + \param material + Handle to a SHMaterial that is used to check for removal. + + */ + /***********************************************************************************/ + void Remove(Handle material); + /***********************************************************************************/ + /*! + + \brief + Removes all SHMaterialInstances in the cache. + + */ + /***********************************************************************************/ + void Clear(); + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + using MaterialMap = std::unordered_map, Handle>; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + MaterialMap cache; + }; +} From 8ac2c39e2b3e77823339ac3dca4dab5beafcbf78 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 25 Sep 2022 23:13:37 +0800 Subject: [PATCH 205/793] Fixed some render graph ctors and added if checks for buffers --- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 +-- .../Graphics/Commands/SHVkCommandBuffer.cpp | 10 +++++-- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 3 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +++-- .../Graphics/RenderGraph/SHRenderGraph.cpp | 30 +++++++++++++++++++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 3 ++ 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 0caf3c7e..91a8babf 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -40,8 +40,8 @@ namespace Sandbox // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = { 0.2f, 0.2f, 0.2f }; - constexpr int NUM_ROWS = 200; - constexpr int NUM_COLS = 100; + constexpr int NUM_ROWS = 1; + constexpr int NUM_COLS = 1; static const SHVec3 TEST_OBJ_SPACING = { 1.0f, 1.0f, 1.0f }; static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ), 0.0f, 0.0f }; for (int z = 0; z < NUM_ROWS; ++z) diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 83095371..b86de28e 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -325,8 +325,11 @@ namespace SHADE { if (cmdBufferState == SH_CMD_BUFFER_STATE::RECORDING) { - auto bufferHandle = buffer->GetVkBuffer(); - vkCommandBuffer.bindVertexBuffers (bindingPoint, 1, &bufferHandle, &offset); + if (buffer) + { + auto bufferHandle = buffer->GetVkBuffer(); + vkCommandBuffer.bindVertexBuffers (bindingPoint, 1, &bufferHandle, &offset); + } } } @@ -445,7 +448,8 @@ namespace SHADE return; } - vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); + if (indirectDrawData) + vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); } void SHVkCommandBuffer::CopyBufferToImage(const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index a68ee7fa..c539db9f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -130,7 +130,8 @@ namespace SHADE } // Transfer to GPU - transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); + if (transformDataBuffer[frameIndex]) + transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), transformData.size() * sizeof(SHMatrix), 0, 0); } void SHBatch::Build(Handle device, uint32_t frameIndex) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 104329d2..f5ef38b0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -135,11 +135,13 @@ namespace SHADE //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); + worldRenderGraph->AddResource("Scene", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eB8G8R8A8Unorm); worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Composite", "Position", "Normals",*/ "Present" }, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Composite", "Position", */"Present" }, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); + //gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Present"); //writeSubpass->AddColorOutput("Normals"); @@ -149,11 +151,11 @@ namespace SHADE //compositeSubpass->AddInput("Normals"); //compositeSubpass->AddInput("Position"); -#ifdef SHEDITOR +//#ifdef SHEDITOR auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); imguiSubpass->AddColorOutput("Present"); -#endif + //#endif worldRenderGraph->Generate(); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index ecf9059c..9b2ca7be 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -524,6 +524,7 @@ namespace SHADE , configured{ rhs.configured } , executed{ rhs.executed } , ptrToResources{ rhs.ptrToResources } + , pipelineLibrary{ std::move (rhs.pipelineLibrary) } { rhs.renderpass = {}; } @@ -544,6 +545,7 @@ namespace SHADE resourceAttachmentMapping = std::move(rhs.resourceAttachmentMapping); subpassIndexing = std::move(rhs.subpassIndexing); ptrToResources = std::move(rhs.ptrToResources); + pipelineLibrary = std::move (rhs.pipelineLibrary); rhs.renderpass = {}; @@ -993,6 +995,34 @@ namespace SHADE } + SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept + : logicalDeviceHdl{ rhs.logicalDeviceHdl } + , swapchainHdl{ rhs.swapchainHdl} + , nodeIndexing {std::move (rhs.nodeIndexing)} + , nodes{ std::move (rhs.nodes)} + , graphResources{std::move(rhs.graphResources)} + , resourceManager{std::move (rhs.resourceManager)} + , globalData {rhs.globalData} + { + + } + + SHRenderGraph& SHRenderGraph::operator=(SHRenderGraph&& rhs) noexcept + { + if (&rhs == this) + return *this; + + logicalDeviceHdl = rhs.logicalDeviceHdl; + swapchainHdl = rhs.swapchainHdl; + nodeIndexing = std::move(rhs.nodeIndexing); + nodes = std::move(rhs.nodes); + graphResources = std::move(rhs.graphResources); + resourceManager = std::move(rhs.resourceManager); + globalData = rhs.globalData; + + return *this; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index b8c00417..4cb9b609 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -279,6 +279,9 @@ namespace SHADE /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ SHRenderGraph (void) noexcept; + SHRenderGraph(SHRenderGraph&& rhs) noexcept; + SHRenderGraph& operator=(SHRenderGraph&& rhs) noexcept; + /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ From dc6289e8cf8c6a2b6e815d49bc8f69d6bd9e40b4 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 25 Sep 2022 23:25:51 +0800 Subject: [PATCH 206/793] WIP --- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 +- .../Graphics/Commands/SHVkCommandBuffer.cpp | 234 +++++++++--------- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 3 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 6 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 36 ++- .../src/Graphics/RenderGraph/SHRenderGraph.h | 2 + 6 files changed, 161 insertions(+), 124 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index c91fee9c..fc2f9731 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -40,8 +40,8 @@ namespace Sandbox // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = { 0.2f, 0.2f, 0.2f }; - constexpr int NUM_ROWS = 200; - constexpr int NUM_COLS = 100; + constexpr int NUM_ROWS = 1; + constexpr int NUM_COLS = 1; static const SHVec3 TEST_OBJ_SPACING = { 1.0f, 1.0f, 1.0f }; static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ), 0.0f, 0.0f }; for (int z = 0; z < NUM_ROWS; ++z) diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 83095371..eb65598c 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -16,7 +16,7 @@ namespace SHADE { /***************************************************************************/ /*! - + \brief Frees the command buffer. @@ -30,13 +30,13 @@ namespace SHADE /***************************************************************************/ /*! - + \brief - Only the command buffer is allocated using - VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT bit, is resetting + Only the command buffer is allocated using + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT bit, is resetting individually permitted. Otherwise, throw exception. IMPORTANT NOTE: the command buffer cannot be in the pending state!!! - + */ /***************************************************************************/ void SHVkCommandBuffer::Reset(void) @@ -67,10 +67,10 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Begins the command buffer. - + */ /***************************************************************************/ void SHVkCommandBuffer::BeginRecording(void) noexcept @@ -108,10 +108,10 @@ namespace SHADE /***************************************************************************/ /*! - + \brief End the recording of a command buffer. - + */ /***************************************************************************/ void SHVkCommandBuffer::EndRecording(void) noexcept @@ -121,21 +121,21 @@ namespace SHADE SHLOG_ERROR("Command Buffer not in recording state, cannot end recording. "); return; } - + vkCommandBuffer.end(); cmdBufferState = SH_CMD_BUFFER_STATE::EXECUTABLE; } /***************************************************************************/ /*! - + \brief - Begins a renderpass in the command buffer. 2 important things to note - here, the command buffer used MUST be a primary command buffer and + Begins a renderpass in the command buffer. 2 important things to note + here, the command buffer used MUST be a primary command buffer and command buffer MUST be in a recording state. - + \param renderpassHdl - Renderpass for obvious reasons. + Renderpass for obvious reasons. \param framebufferHdl Framebuffer required in the begin info. @@ -145,7 +145,7 @@ namespace SHADE \param extent Extent of the render area in the framebuffer. - + */ /***************************************************************************/ void SHVkCommandBuffer::BeginRenderpass(Handle const& renderpassHdl, Handle const& framebufferHdl, vk::Offset2D offset, vk::Extent2D extent) noexcept @@ -170,7 +170,7 @@ namespace SHADE vk::RenderPassBeginInfo renderPassInfo{}; renderPassInfo.renderPass = renderpassHdl->GetVkRenderpass(); renderPassInfo.framebuffer = framebufferHdl->GetVkFramebuffer(); - + // If the extent passed in is 0, use the framebuffer dimensions instead. if (extent.width == 0 && extent.height == 0) renderPassInfo.renderArea.extent = framebufferExtent; @@ -192,16 +192,16 @@ namespace SHADE } // Begin the render pass - vkCommandBuffer.beginRenderPass (&renderPassInfo, vk::SubpassContents::eInline); + vkCommandBuffer.beginRenderPass(&renderPassInfo, vk::SubpassContents::eInline); } /***************************************************************************/ /*! - + \brief Ends a renderpass. - + */ /***************************************************************************/ void SHVkCommandBuffer::EndRenderpass(void) noexcept @@ -216,14 +216,14 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Sets the viewport dynamically for the command buffer. #NoteToSelf: Dynamic state will not affect pipelines that don't use dynamic state so there isn't a need to do any checks. Also, setting dynamic state like this only needs to happen ONCE per command buffer UNLESS a different viewport is to be used for different drawing commands. - + \param vpWidth viewport width @@ -254,7 +254,7 @@ namespace SHADE \param vpMaxDepth viewport maximum depth value - + */ /***************************************************************************/ void SHVkCommandBuffer::SetViewportScissor(float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX /*= 0.0f*/, float vpY /*= 0.0f*/, int32_t sX /*= 0.0f*/, int32_t sY /*= 0.0f*/, float vpMinDepth /*= 0.0f*/, float vpMaxDepth /*= 1.0f*/) noexcept @@ -283,13 +283,13 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Binds a pipeline object to the command buffer. - + \param pipelineHdl The pipeline to bind. - + */ /***************************************************************************/ void SHVkCommandBuffer::BindPipeline(Handle const& pipelineHdl) noexcept @@ -307,7 +307,7 @@ namespace SHADE /*! \brief - Binds a buffer to the vertex buffer binding point specified in + Binds a buffer to the vertex buffer binding point specified in bindingPoint. \param bindingPoint @@ -321,29 +321,32 @@ namespace SHADE */ /***************************************************************************/ - void SHVkCommandBuffer::BindVertexBuffer (uint32_t bindingPoint, Handle const& buffer, vk::DeviceSize offset) noexcept + void SHVkCommandBuffer::BindVertexBuffer(uint32_t bindingPoint, Handle const& buffer, vk::DeviceSize offset) noexcept { if (cmdBufferState == SH_CMD_BUFFER_STATE::RECORDING) { - auto bufferHandle = buffer->GetVkBuffer(); - vkCommandBuffer.bindVertexBuffers (bindingPoint, 1, &bufferHandle, &offset); + if (buffer) + { + auto bufferHandle = buffer->GetVkBuffer(); + vkCommandBuffer.bindVertexBuffers(bindingPoint, 1, &bufferHandle, &offset); + } } } /***************************************************************************/ /*! - + \brief Binds an index buffer to the pipeline. - + \param buffer The buffer to bind. \param startingIndex - The starting index in the index buffer. For example, 0 would mean - starting at the beginning. 5 would mean starting at byte offset + The starting index in the index buffer. For example, 0 would mean + starting at the beginning. 5 would mean starting at byte offset size(uint32_t) * 5. - + */ /***************************************************************************/ void SHVkCommandBuffer::BindIndexBuffer(Handle const& buffer, uint32_t startingIndex) const noexcept @@ -351,33 +354,33 @@ namespace SHADE if (cmdBufferState == SH_CMD_BUFFER_STATE::RECORDING) { auto bufferHandle = buffer->GetVkBuffer(); - vkCommandBuffer.bindIndexBuffer (bufferHandle, sizeof (uint32_t) * startingIndex, vk::IndexType::eUint32); + vkCommandBuffer.bindIndexBuffer(bufferHandle, sizeof(uint32_t) * startingIndex, vk::IndexType::eUint32); } } void SHVkCommandBuffer::BindDescriptorSet(Handle descSetGroup, vk::PipelineBindPoint bindPoint, uint32_t firstSet, std::span dynamicOffsets) { - vkCommandBuffer.bindDescriptorSets (bindPoint, boundPipelineLayoutHdl->GetVkPipelineLayout(), firstSet, descSetGroup->GetVkHandle(), dynamicOffsets); + vkCommandBuffer.bindDescriptorSets(bindPoint, boundPipelineLayoutHdl->GetVkPipelineLayout(), firstSet, descSetGroup->GetVkHandle(), dynamicOffsets); } /***************************************************************************/ /*! - + \brief Calls vkCmdDraw. - + \param vertexCount How many vertices to draw \param instanceCount Number of instances to draw - + \param firstVertex First vertex in the buffer of vertices to start from \param firstInstance First instance to start from. - + */ /***************************************************************************/ void SHVkCommandBuffer::DrawArrays(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const noexcept @@ -387,30 +390,30 @@ namespace SHADE SHLOG_ERROR("Command buffer must have started recording before a pipeline can be bound. "); return; } - vkCommandBuffer.draw (vertexCount, instanceCount, firstVertex, firstInstance); + vkCommandBuffer.draw(vertexCount, instanceCount, firstVertex, firstInstance); } /***************************************************************************/ /*! - + \brief Issues a non-instanced indexed draw call. - + \param indexCount Number of indices to draw. \param firstIndex Starting index. if the array was 0, 2, 5, 4, and we indicated this to be - 1. The draw call would start from index 2. + 1. The draw call would start from index 2. \param vertexOffset - Starting vertex offset. This would indicate that vertex pulling should + Starting vertex offset. This would indicate that vertex pulling should start from a certain vertex. So a vertex offset of 3 (for example) would mean an index of 0 would mean the 3rd vertex. - + */ /***************************************************************************/ - void SHVkCommandBuffer::DrawIndexed (uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept + void SHVkCommandBuffer::DrawIndexed(uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept { if (cmdBufferState != SH_CMD_BUFFER_STATE::RECORDING) { @@ -422,7 +425,7 @@ namespace SHADE vkCommandBuffer.drawIndexed(indexCount, 1, firstIndex, vertexOffset, 0); } - + /***************************************************************************/ /*! @@ -445,35 +448,36 @@ namespace SHADE return; } - vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); + if (indirectDrawData) + vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); } void SHVkCommandBuffer::CopyBufferToImage(const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo) { - vkCommandBuffer.copyBufferToImage - ( - src, dst, vk::ImageLayout::eTransferDstOptimal, - static_cast(copyInfo.size()), copyInfo.data() - ); + vkCommandBuffer.copyBufferToImage + ( + src, dst, vk::ImageLayout::eTransferDstOptimal, + static_cast(copyInfo.size()), copyInfo.data() + ); } void SHVkCommandBuffer::PipelineBarrier( - vk::PipelineStageFlags srcStage, - vk::PipelineStageFlags dstStage, - vk::DependencyFlags deps, - std::vector const& memoryBarriers, - std::vector const& bufferMemoryBarriers, - std::vector const& imageMemoryBarriers - ) const noexcept + vk::PipelineStageFlags srcStage, + vk::PipelineStageFlags dstStage, + vk::DependencyFlags deps, + std::vector const& memoryBarriers, + std::vector const& bufferMemoryBarriers, + std::vector const& imageMemoryBarriers + ) const noexcept { - vkCommandBuffer.pipelineBarrier ( - srcStage, - dstStage, - deps, - memoryBarriers, - bufferMemoryBarriers, - imageMemoryBarriers - ); + vkCommandBuffer.pipelineBarrier( + srcStage, + dstStage, + deps, + memoryBarriers, + bufferMemoryBarriers, + imageMemoryBarriers + ); } bool SHVkCommandBuffer::IsReadyToSubmit(void) const noexcept @@ -498,10 +502,10 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Calls vkCmdPushConstants and submits data stored in command buffer. - + */ /***************************************************************************/ void SHVkCommandBuffer::SubmitPushConstants(void) const noexcept @@ -514,13 +518,13 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Simply returns the command buffer handle. - - \return + + \return The command buffer handle. - + */ /***************************************************************************/ vk::CommandBuffer const& SHVkCommandBuffer::GetVkCommandBuffer(void) const noexcept @@ -530,11 +534,11 @@ namespace SHADE /***************************************************************************/ /*! - + \brief - See https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetRenderAreaGranularity.html + See https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetRenderAreaGranularity.html or look up vkGetRenderAreaGranularity. - + \param renderpassHdl Renderpass to get info from. @@ -544,9 +548,9 @@ namespace SHADE \param renderArea For the comparison. Again, look it up on the webpage. - \return + \return If optimal, true. otherwise false. - + */ /***************************************************************************/ bool SHVkCommandBuffer::IsRenderAreaOptimal(Handle const& renderpassHdl, vk::Extent2D const& framebufferExtent, vk::Rect2D const& renderArea) const noexcept @@ -558,14 +562,14 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Setter for the state of the command buffer. - + \param state - - \return - + + \return + */ /***************************************************************************/ void SHVkCommandBuffer::SetState(SH_CMD_BUFFER_STATE state) noexcept @@ -575,12 +579,12 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Returns the state of the command buffer. - - \return - + + \return + */ /***************************************************************************/ SH_CMD_BUFFER_STATE SHVkCommandBuffer::GetState(void) const noexcept @@ -590,14 +594,14 @@ namespace SHADE /***************************************************************************/ /*! - + \brief Creates a command buffer. Cmd buffer can be primary or secondary. If secondary, flags will automatically have renderpass continue bit. Command pool used to create this command buffer will determine whether or not - this buffer will be allocated with + this buffer will be allocated with VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT using the reset mode. - + \param logicalDevice Need a logical device to create a buffer. @@ -606,7 +610,7 @@ namespace SHADE \param type Type of the command buffer; primary or secondary. - + */ /***************************************************************************/ SHVkCommandBuffer::SHVkCommandBuffer(Handle const& commandPool, SH_CMD_BUFFER_TYPE type) noexcept @@ -616,7 +620,7 @@ namespace SHADE , parentPoolResetMode{ SH_CMD_POOL_RESET::POOL_BASED } , usageFlags{} , commandBufferCount{ 0 } - , parentPool{commandPool} + , parentPool{ commandPool } , pushConstantData{} { @@ -657,54 +661,54 @@ namespace SHADE commandBufferType = type; commandBufferCount = allocateInfo.commandBufferCount; - if (parentPool->GetIsTransient ()) + if (parentPool->GetIsTransient()) usageFlags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit; if (commandBufferType == SH_CMD_BUFFER_TYPE::SECONDARY) usageFlags |= vk::CommandBufferUsageFlagBits::eRenderPassContinue; - + // Reset all the push constant data to 0 - memset (pushConstantData, 0, PUSH_CONSTANT_SIZE); + memset(pushConstantData, 0, PUSH_CONSTANT_SIZE); } /***************************************************************************/ /*! - + \brief Move ctor. Invalidates Vulkan handles. - + \param rhs the other command buffer. - + */ /***************************************************************************/ SHVkCommandBuffer::SHVkCommandBuffer(SHVkCommandBuffer&& rhs) noexcept - : vkCommandBuffer {std::move (rhs.vkCommandBuffer)} - , cmdBufferState {rhs.cmdBufferState} - , commandBufferType {rhs.commandBufferType} - , parentPoolResetMode {rhs.parentPoolResetMode} - , usageFlags {rhs.usageFlags} - , commandBufferCount {rhs.commandBufferCount} - , parentPool {rhs.parentPool} - , boundPipelineLayoutHdl{rhs.boundPipelineLayoutHdl } + : vkCommandBuffer{ std::move(rhs.vkCommandBuffer) } + , cmdBufferState{ rhs.cmdBufferState } + , commandBufferType{ rhs.commandBufferType } + , parentPoolResetMode{ rhs.parentPoolResetMode } + , usageFlags{ rhs.usageFlags } + , commandBufferCount{ rhs.commandBufferCount } + , parentPool{ rhs.parentPool } + , boundPipelineLayoutHdl{ rhs.boundPipelineLayoutHdl } { - memcpy (pushConstantData, rhs.pushConstantData, PUSH_CONSTANT_SIZE); + memcpy(pushConstantData, rhs.pushConstantData, PUSH_CONSTANT_SIZE); rhs.vkCommandBuffer = VK_NULL_HANDLE; } /***************************************************************************/ /*! - + \brief Move assignment operator. Invalidates Vulkan handles. - + \param rhs The other Vulkan Handle. - - \return + + \return a reference itself. - + */ /***************************************************************************/ SHVkCommandBuffer& SHVkCommandBuffer::operator=(SHVkCommandBuffer&& rhs) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 7b2ebd49..f73c5306 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -203,7 +203,8 @@ namespace SHADE } // Transfer to GPU - transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); + if (transformDataBuffer[frameIndex]) + transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); } void SHBatch::Build(Handle _device, uint32_t frameIndex) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index b909aeff..bb2391e3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -150,9 +150,9 @@ namespace SHADE //compositeSubpass->AddInput("Position"); // TODO: Use macro to add this node when SH_EDITOR is enabled - //auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); - //auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - //imguiSubpass->AddColorOutput("Present"); + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); worldRenderGraph->Generate(); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 6070361f..7ef5c0b9 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -348,7 +348,7 @@ namespace SHADE void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept { - // Ensure updated transforms and materials are provided + // Ensure correct transforms are provided superBatch->UpdateBuffers(frameIndex); // Draw all the batches @@ -524,6 +524,7 @@ namespace SHADE , configured{ rhs.configured } , executed{ rhs.executed } , ptrToResources{ rhs.ptrToResources } + , pipelineLibrary{ std::move(rhs.pipelineLibrary) } { rhs.renderpass = {}; } @@ -544,6 +545,7 @@ namespace SHADE resourceAttachmentMapping = std::move(rhs.resourceAttachmentMapping); subpassIndexing = std::move(rhs.subpassIndexing); ptrToResources = std::move(rhs.ptrToResources); + pipelineLibrary = std::move(rhs.pipelineLibrary); rhs.renderpass = {}; @@ -625,7 +627,7 @@ namespace SHADE } void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex) -{ + { batcher.FinaliseBatches(logicalDeviceHdl, frameIndex); } @@ -993,6 +995,34 @@ namespace SHADE } + SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept + : logicalDeviceHdl{ rhs.logicalDeviceHdl } + , swapchainHdl{ rhs.swapchainHdl } + , nodeIndexing{ std::move(rhs.nodeIndexing) } + , nodes{ std::move(rhs.nodes) } + , graphResources{ std::move(rhs.graphResources) } + , resourceManager{ std::move(rhs.resourceManager) } + , globalData{ rhs.globalData } + { + + } + + SHRenderGraph& SHRenderGraph::operator=(SHRenderGraph&& rhs) noexcept + { + if (&rhs == this) + return *this; + + logicalDeviceHdl = rhs.logicalDeviceHdl; + swapchainHdl = rhs.swapchainHdl; + nodeIndexing = std::move(rhs.nodeIndexing); + nodes = std::move(rhs.nodes); + graphResources = std::move(rhs.graphResources); + resourceManager = std::move(rhs.resourceManager); + globalData = rhs.globalData; + + return *this; + } + /***************************************************************************/ /*! @@ -1084,7 +1114,7 @@ namespace SHADE } void SHRenderGraph::FinaliseBatch(uint32_t frameIndex) -{ + { for (auto& node : nodes) { node->FinaliseBatch(frameIndex); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index b8c00417..d5421bdc 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -279,6 +279,8 @@ namespace SHADE /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ SHRenderGraph (void) noexcept; + SHRenderGraph(SHRenderGraph&& rhs) noexcept; + SHRenderGraph& operator=(SHRenderGraph&& rhs) noexcept; /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ From 864983360425cba5505f4d306cabe8e99c07aca9 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 25 Sep 2022 23:45:05 +0800 Subject: [PATCH 207/793] subpass not null anymore --- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 8 +++++++- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 7ef5c0b9..85d822b5 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -220,7 +220,6 @@ namespace SHADE , depthReferences{} , inputReferences{} { - superBatch = rm.Create(GetHandle()); } /***************************************************************************/ @@ -366,6 +365,12 @@ namespace SHADE exteriorDrawCalls.push_back(newDrawCall); } + void SHSubpass::Init(ResourceManager& resourceManager) noexcept + { + superBatch = resourceManager.Create(GetHandle()); + + } + /***************************************************************************/ /*! @@ -579,6 +584,7 @@ namespace SHADE subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); + subpass->Init(resourceManager); // Register the SuperBatch batcher.RegisterSuperBatch(subpass->GetSuperBatch()); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index d5421bdc..45624436 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -140,6 +140,8 @@ namespace SHADE void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; + void Init (ResourceManager& resourceManager) noexcept; + /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ /*-----------------------------------------------------------------------*/ From a5c804ca8bba5f62921ca6b5e92fe651da2f916b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 26 Sep 2022 00:08:32 +0800 Subject: [PATCH 208/793] Fixed SHRenderGraph not moving the batcher --- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 85d822b5..92276f95 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -530,6 +530,8 @@ namespace SHADE , executed{ rhs.executed } , ptrToResources{ rhs.ptrToResources } , pipelineLibrary{ std::move(rhs.pipelineLibrary) } + , batcher { std::move(rhs.batcher) } + { rhs.renderpass = {}; } @@ -551,6 +553,7 @@ namespace SHADE subpassIndexing = std::move(rhs.subpassIndexing); ptrToResources = std::move(rhs.ptrToResources); pipelineLibrary = std::move(rhs.pipelineLibrary); + batcher = std::move(rhs.batcher); rhs.renderpass = {}; From 31dff230ef62e09237293e0a4d822c3db1d4f315 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 26 Sep 2022 00:37:58 +0800 Subject: [PATCH 209/793] FIXED MY SHIT WHEE --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index bb2391e3..2637cb75 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -150,7 +150,7 @@ namespace SHADE //compositeSubpass->AddInput("Position"); // TODO: Use macro to add this node when SH_EDITOR is enabled - auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {"G-Buffer"}); auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); imguiSubpass->AddColorOutput("Present"); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 92276f95..3f5641c0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -716,7 +716,7 @@ namespace SHADE // First we want to take all the attachment descriptions and initialize the // finalLayout to whatever layout is specified in the last subpass that references the attachment. - for (auto& node : nodes) + for (uint32_t i = 0; auto& node : nodes) { // key is handle ID, value is pair (first is initial layout, second is final layout). std::unordered_map resourceAttLayouts; @@ -730,7 +730,7 @@ namespace SHADE { for (auto& color : subpass->colorReferences) { - if (node->attResources[color.attachment]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (i == nodes.size() - 1 && node->attResources[color.attachment]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) resourceAttLayouts[color.attachment] = vk::ImageLayout::ePresentSrcKHR; else resourceAttLayouts[color.attachment] = color.layout; @@ -749,6 +749,7 @@ namespace SHADE att.initialLayout = vk::ImageLayout::eUndefined; att.finalLayout = resourceAttLayouts[i]; } + ++i; } // at this point all attachment descs will have their final layouts initialized as if they were standalone and did @@ -857,7 +858,7 @@ namespace SHADE for (auto& inputAtt : subpass->inputReferences) { auto resource = node->attResources[inputAtt.attachment]; - if (resource->resourceType == SH_ATT_DESC_TYPE::COLOR) + if (resource->resourceType == SH_ATT_DESC_TYPE::COLOR || resource->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) colorRead |= (1 << i); else if (resource->resourceType == SH_ATT_DESC_TYPE::DEPTH_STENCIL) depthRead |= (1 << i); From 6d68e6cb5e2df8fade43c6aa779644bd0e05993a Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 26 Sep 2022 00:37:58 +0800 Subject: [PATCH 210/793] FIXED MY SHIT WHEE (render graph color present attachment now have correct layout) --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index bb2391e3..2637cb75 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -150,7 +150,7 @@ namespace SHADE //compositeSubpass->AddInput("Position"); // TODO: Use macro to add this node when SH_EDITOR is enabled - auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {}); + auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {"G-Buffer"}); auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); imguiSubpass->AddColorOutput("Present"); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 92276f95..3f5641c0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -716,7 +716,7 @@ namespace SHADE // First we want to take all the attachment descriptions and initialize the // finalLayout to whatever layout is specified in the last subpass that references the attachment. - for (auto& node : nodes) + for (uint32_t i = 0; auto& node : nodes) { // key is handle ID, value is pair (first is initial layout, second is final layout). std::unordered_map resourceAttLayouts; @@ -730,7 +730,7 @@ namespace SHADE { for (auto& color : subpass->colorReferences) { - if (node->attResources[color.attachment]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (i == nodes.size() - 1 && node->attResources[color.attachment]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) resourceAttLayouts[color.attachment] = vk::ImageLayout::ePresentSrcKHR; else resourceAttLayouts[color.attachment] = color.layout; @@ -749,6 +749,7 @@ namespace SHADE att.initialLayout = vk::ImageLayout::eUndefined; att.finalLayout = resourceAttLayouts[i]; } + ++i; } // at this point all attachment descs will have their final layouts initialized as if they were standalone and did @@ -857,7 +858,7 @@ namespace SHADE for (auto& inputAtt : subpass->inputReferences) { auto resource = node->attResources[inputAtt.attachment]; - if (resource->resourceType == SH_ATT_DESC_TYPE::COLOR) + if (resource->resourceType == SH_ATT_DESC_TYPE::COLOR || resource->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) colorRead |= (1 << i); else if (resource->resourceType == SH_ATT_DESC_TYPE::DEPTH_STENCIL) depthRead |= (1 << i); From 9fe5793dd7ddcc82707c83d916ef3c7583cf81be Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 26 Sep 2022 09:37:59 +0800 Subject: [PATCH 211/793] Split the render graph into multiple files doesn't compile --- .../RenderGraph/SHAttachmentDescriptionType.h | 14 ++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 219 +----------------- .../RenderGraph/SHRenderGraphNode.cpp | 6 + .../Graphics/RenderGraph/SHRenderGraphNode.h | 95 ++++++++ .../RenderGraph/SHRenderGraphResource.cpp | 6 + .../RenderGraph/SHRenderGraphResource.h | 50 ++++ .../src/Graphics/RenderGraph/SHSubpass.cpp | 6 + .../src/Graphics/RenderGraph/SHSubpass.h | 6 + 8 files changed, 185 insertions(+), 217 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h new file mode 100644 index 00000000..dc21fa37 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h @@ -0,0 +1,14 @@ +#pragma once + +namespace SHADE +{ + // Used for attachment description creation for renderpass node + enum class SH_ATT_DESC_TYPE + { + COLOR, + COLOR_PRESENT, + DEPTH, + STENCIL, + DEPTH_STENCIL, + }; +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 45624436..a5ff66d1 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -7,6 +7,8 @@ #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" #include "../MiddleEnd/Batching/SHBatcher.h" +#include "SHRenderGraphNode.h" +#include "SHSubpass.h" #include #include @@ -24,223 +26,6 @@ namespace SHADE class SHRenderGraphNode; class SHGraphicsGlobalData; - // Used for attachment description creation for renderpass node - enum class SH_ATT_DESC_TYPE - { - COLOR, - COLOR_PRESENT, - DEPTH, - STENCIL, - DEPTH_STENCIL, - }; - - - class SH_API SHRenderGraphResource - { - private: - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*-----------------------------------------------------------------------*/ - //! Name of the resource - std::string resourceName; - - //! Used for initializing image layouts - SH_ATT_DESC_TYPE resourceType; - - //! The resource itself (this is a vector because if the resource happens - //! to be a swapchain image, then we need however many frames in flight). - //! However when it's not a swapchain image, we want this container to be size 1 - //! because writing to these images will not interfere with images in the previous - //! frame, unlike the swapchain image. - std::vector> images; - - //! Views to resources (vector because same rationale as images. see above). - std::vector> imageViews; - - //! Image format - vk::Format resourceFormat; - - //! width of the resource - uint32_t width; - - //! Height of the resource - uint32_t height; - - //! Number of mipmap levels - uint8_t mipLevels; - public: - /*-----------------------------------------------------------------------*/ - /* CTORS AND DTORS */ - /*-----------------------------------------------------------------------*/ - SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept; - SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; - SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; - ~SHRenderGraphResource(void) noexcept; - - friend class SHRenderGraphNode; - friend class SHRenderGraph; - }; - - - class SH_API SHSubpass : public ISelfHandle - { - private: - /*---------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*---------------------------------------------------------------------*/ - //! The index of the subpass in the render graph - uint32_t subpassIndex; - - //! The parent renderpass that this subpass belongs to - Handle parentNode; - - //! - Handle superBatch; - - //! Color attachments - std::vector colorReferences; - - //! Depth attachments - std::vector depthReferences; - - //! Input attachments - std::vector inputReferences; - - //! For getting attachment reference indices using handles - std::unordered_map const* resourceAttachmentMapping; - - //! Pointer to resources in the render graph (for getting handle IDs) - std::unordered_map> const* ptrToResources; - - //! Sometimes there exists entities that we want to render onto a render target - //! but don't want it to come from the batching system. An example would be ImGUI. - //! For these entities we want to link a function from the outside and draw them - //! after we draw everything from the batch. Because of this, these draw calls - //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING - //! COMPLEX. - std::vector&)>> exteriorDrawCalls; - - public: - /*-----------------------------------------------------------------------*/ - /* CTORS AND DTORS */ - /*-----------------------------------------------------------------------*/ - SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; - SHSubpass(SHSubpass&& rhs) noexcept; - SHSubpass& operator=(SHSubpass&& rhs) noexcept; - - /*-----------------------------------------------------------------------*/ - /* PUBLIC MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - // Preparation functions - void AddColorOutput(std::string resourceToReference) noexcept; - void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; - void AddInput(std::string resourceToReference) noexcept; - - // Runtime functions - void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; - void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; - - void Init (ResourceManager& resourceManager) noexcept; - - /*-----------------------------------------------------------------------*/ - /* GETTERS AND SETTERS */ - /*-----------------------------------------------------------------------*/ - Handle const& GetParentNode(void) const noexcept; - SHSubPassIndex GetIndex() const noexcept; - Handle GetSuperBatch (void) const noexcept; - - - friend class SHRenderGraphNode; - friend class SHRenderGraph; - }; - - class SH_API SHRenderGraphNode : public ISelfHandle - { - private: - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*-----------------------------------------------------------------------*/ - ResourceManager& resourceManager; - - //! For Vulkan object creation - Handle logicalDeviceHdl; - - //! Each node will have a renderpass and each renderpass will have its own subpasses. - //! These subpasses will execute sequentially. - Handle renderpass; - - //! Framebuffers used in this renderpass. If renderpass contains usage of a swapchain image - //! used for presenting, then we cannot use just 1 framebuffer, we need to have 1 for however many frames in flight. - std::vector> framebuffers; - - //! Nodes that must finish execution before this node is executed will be in this container - std::vector> prereqNodes; - - //! Container of Attachment descriptions - std::vector attachmentDescriptions; - - //! Resources used in this renderpass - std::vector> attResources; - - //! Vector of subpasses - std::vector> subpasses; - - //! Descriptions to pass to renderpass for renderpass creation. We want to keep this here because - std::vector spDescs; - - //! Subpass dependencies for renderpass creation - std::vector spDeps; - - //! For indexing resources fast - std::unordered_map resourceAttachmentMapping; - - //! For indexing subpasses - std::map subpassIndexing; - - //! Pointer to resources in the render graph (for getting handle IDs) - std::unordered_map> const* ptrToResources; - - //! Every renderpass will require a pipeline library that will contain pipelines compatible with this renderpass - SHPipelineLibrary pipelineLibrary; - - //! Whether or not the node has finished execution - bool executed; - - //! Whether or not the node has been configured already or not - bool configured; - - SHBatcher batcher; - - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - void CreateRenderpass (void) noexcept; - void CreateFramebuffer(void) noexcept; - - public: - /*-----------------------------------------------------------------------*/ - /* CTORS AND DTORS */ - /*-----------------------------------------------------------------------*/ - SHRenderGraphNode (ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept; - SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; - SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; - - /*-----------------------------------------------------------------------*/ - /* PUBLIC MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - Handle AddSubpass (std::string subpassName) noexcept; - // TODO: RemoveSubpass() - void Execute (Handle& commandBuffer, uint32_t frameIndex) noexcept; - Handle GetOrCreatePipeline (std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; - void FinaliseBatch(uint32_t frameIndex); - - /*-----------------------------------------------------------------------*/ - /* SETTERS AND GETTERS */ - /*-----------------------------------------------------------------------*/ - Handle GetRenderpass (void) const noexcept; - Handle GetSubpass(std::string_view subpassName) const noexcept; - friend class SHRenderGraph; - }; class SH_API SHRenderGraph { diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp new file mode 100644 index 00000000..498ac8e4 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -0,0 +1,6 @@ +#include "SHRenderGraphNode.h" + +namespace SHADE +{ + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h new file mode 100644 index 00000000..7cd31787 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -0,0 +1,95 @@ +#pragma once + +namespace SHADE +{ + + + class SH_API SHRenderGraphNode : public ISelfHandle + { + private: + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + ResourceManager& resourceManager; + + //! For Vulkan object creation + Handle logicalDeviceHdl; + + //! Each node will have a renderpass and each renderpass will have its own subpasses. + //! These subpasses will execute sequentially. + Handle renderpass; + + //! Framebuffers used in this renderpass. If renderpass contains usage of a swapchain image + //! used for presenting, then we cannot use just 1 framebuffer, we need to have 1 for however many frames in flight. + std::vector> framebuffers; + + //! Nodes that must finish execution before this node is executed will be in this container + std::vector> prereqNodes; + + //! Container of Attachment descriptions + std::vector attachmentDescriptions; + + //! Resources used in this renderpass + std::vector> attResources; + + //! Vector of subpasses + std::vector> subpasses; + + //! Descriptions to pass to renderpass for renderpass creation. We want to keep this here because + std::vector spDescs; + + //! Subpass dependencies for renderpass creation + std::vector spDeps; + + //! For indexing resources fast + std::unordered_map resourceAttachmentMapping; + + //! For indexing subpasses + std::map subpassIndexing; + + //! Pointer to resources in the render graph (for getting handle IDs) + std::unordered_map> const* ptrToResources; + + //! Every renderpass will require a pipeline library that will contain pipelines compatible with this renderpass + SHPipelineLibrary pipelineLibrary; + + //! Whether or not the node has finished execution + bool executed; + + //! Whether or not the node has been configured already or not + bool configured; + + SHBatcher batcher; + + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void CreateRenderpass(void) noexcept; + void CreateFramebuffer(void) noexcept; + + public: + /*-----------------------------------------------------------------------*/ + /* CTORS AND DTORS */ + /*-----------------------------------------------------------------------*/ + SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept; + SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; + SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; + + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + Handle AddSubpass(std::string subpassName) noexcept; + // TODO: RemoveSubpass() + void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; + Handle GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; + void FinaliseBatch(uint32_t frameIndex); + + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + Handle GetRenderpass(void) const noexcept; + Handle GetSubpass(std::string_view subpassName) const noexcept; + friend class SHRenderGraph; + }; + +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp new file mode 100644 index 00000000..6b0138d9 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -0,0 +1,6 @@ +#include "SHRenderGraphResource.h" + +namespace SHADE +{ + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h new file mode 100644 index 00000000..78245763 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -0,0 +1,50 @@ +#pragma once + +namespace SHADE +{ + class SH_API SHRenderGraphResource + { + private: + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + //! Name of the resource + std::string resourceName; + + //! Used for initializing image layouts + SH_ATT_DESC_TYPE resourceType; + + //! The resource itself (this is a vector because if the resource happens + //! to be a swapchain image, then we need however many frames in flight). + //! However when it's not a swapchain image, we want this container to be size 1 + //! because writing to these images will not interfere with images in the previous + //! frame, unlike the swapchain image. + std::vector> images; + + //! Views to resources (vector because same rationale as images. see above). + std::vector> imageViews; + + //! Image format + vk::Format resourceFormat; + + //! width of the resource + uint32_t width; + + //! Height of the resource + uint32_t height; + + //! Number of mipmap levels + uint8_t mipLevels; + public: + /*-----------------------------------------------------------------------*/ + /* CTORS AND DTORS */ + /*-----------------------------------------------------------------------*/ + SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept; + SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; + SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; + ~SHRenderGraphResource(void) noexcept; + + friend class SHRenderGraphNode; + friend class SHRenderGraph; + }; +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp new file mode 100644 index 00000000..329af7c3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -0,0 +1,6 @@ +#include "SHSubpass.h" + +namespace SHADE +{ + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h new file mode 100644 index 00000000..a1aa1500 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -0,0 +1,6 @@ +#pragma once + +namespace SHADE +{ + +} From 99534c1613d65b6dc35feb7c009b16765767f0e6 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 26 Sep 2022 14:38:12 +0800 Subject: [PATCH 212/793] SP3-103 SP3-104 Separated mesh and texture loading Added in lines in SBApplication to load racoon fbx and dds textures Racoon shows up in renderdoc hehe --- Assets/racoon.bin | Bin 425120 -> 0 bytes Assets/racoon.fbx | Bin 713836 -> 713836 bytes Assets/racoon.gltf | 5027 ----------------- .../src/Application/SBApplication.cpp | 4 + SHADE_Application/src/Scenes/SBTestScene.cpp | 44 +- .../src/Assets/Libraries/SHDDSLoader.cpp | 20 +- .../src/Assets/Libraries/SHDDSLoader.h | 2 +- .../src/Assets/Libraries/SHMeshLoader.cpp | 21 +- .../src/Assets/Libraries/SHMeshLoader.h | 2 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 64 +- SHADE_Engine/src/Assets/SHAssetManager.h | 2 + 12 files changed, 107 insertions(+), 5081 deletions(-) delete mode 100644 Assets/racoon.bin delete mode 100644 Assets/racoon.gltf diff --git a/Assets/racoon.bin b/Assets/racoon.bin deleted file mode 100644 index 0a5272ad2acee2a89c641100b80b486f8179ed3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425120 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

    Y$&tmI=^!~WT@xcD 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

    j-aL#;@tg#qnHMywW(47cuV>um8@T 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 O(AQ;sUC!t^@c#g{ro_tt diff --git a/Assets/racoon.fbx b/Assets/racoon.fbx index 88320648e54cb29b0bc135888bec9b936e91953d..45ed752b2ad7f7e7b123b32b514ea5a37b1e2786 100644 GIT binary patch delta 73203 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 delta 73247 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 diff --git a/Assets/racoon.gltf b/Assets/racoon.gltf deleted file mode 100644 index 2bdf5e38..00000000 --- a/Assets/racoon.gltf +++ /dev/null @@ -1,5027 +0,0 @@ -{ - "asset" : { - "generator" : "Khronos glTF Blender I/O v3.3.27", - "version" : "2.0" - }, - "extensionsUsed" : [ - "KHR_materials_specular", - "KHR_materials_ior" - ], - "scene" : 0, - "scenes" : [ - { - "name" : "Scene", - "nodes" : [ - 55 - ] - } - ], - "nodes" : [ - { - "name" : "L_Toe_end", - "rotation" : [ - -1.304514398725587e-07, - -4.8278069232242024e-14, - -3.113858042524953e-07, - 1 - ], - "translation" : [ - 2.9270432744255004e-09, - 0.02392714098095894, - 1.3476908478082805e-10 - ] - }, - { - "children" : [ - 0 - ], - "name" : "L_Toe", - "rotation" : [ - 0.32702386379241943, - 1.1310142156162328e-07, - 1.641405731334089e-07, - 0.945016086101532 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - -8.650776095464607e-09, - 0.03380582109093666, - -2.448857117087755e-09 - ] - }, - { - "children" : [ - 1 - ], - "name" : "L_Feet", - "rotation" : [ - 0.516292929649353, - -0.020581310614943504, - -0.05452270060777664, - 0.854426920413971 - ], - "translation" : [ - 1.2865877252465907e-09, - 0.06353945285081863, - 2.6193447411060333e-10 - ] - }, - { - "children" : [ - 2 - ], - "name" : "L_Shin", - "rotation" : [ - -0.054226718842983246, - 0.00034972387948073447, - -0.0027083493769168854, - 0.9985249042510986 - ], - "scale" : [ - 0.9999998807907104, - 0.9999999403953552, - 0.9999998807907104 - ], - "translation" : [ - -8.217813984856548e-09, - 0.012935775332152843, - -1.1059455573558807e-09 - ] - }, - { - "children" : [ - 3 - ], - "name" : "L_Knee", - "rotation" : [ - -0.117364302277565, - -0.00023353073629550636, - -0.005353146698325872, - 0.9930744767189026 - ], - "scale" : [ - 1, - 1.0000001192092896, - 1 - ], - "translation" : [ - -7.161837345392996e-09, - 0.08009886741638184, - -3.725290298461914e-09 - ] - }, - { - "children" : [ - 4 - ], - "name" : "L_Thigh", - "rotation" : [ - 0.005340703763067722, - -0.08032803982496262, - -0.9945576786994934, - 0.06613556295633316 - ], - "scale" : [ - 1.0000009536743164, - 1.0000001192092896, - 1.0000014305114746 - ], - "translation" : [ - 0.06634333729743958, - 0.021777987480163574, - -0.000205356627702713 - ] - }, - { - "name" : "Head_end", - "rotation" : [ - 0, - 3.552713678800501e-15, - 0, - 1 - ], - "translation" : [ - -8.470329472543003e-22, - 0.11583378911018372, - 0 - ] - }, - { - "children" : [ - 6 - ], - "name" : "Head", - "rotation" : [ - 0, - 5.960462701182223e-08, - 0, - 1 - ], - "scale" : [ - 1, - 0.9999999403953552, - 1 - ], - "translation" : [ - 0, - 0.022377878427505493, - 0 - ] - }, - { - "children" : [ - 7 - ], - "name" : "Neck", - "translation" : [ - 0, - 0.10304805636405945, - 0 - ] - }, - { - "name" : "L_Hand_end", - "rotation" : [ - 1.3239958462918366e-08, - -2.4324227076988336e-09, - 1.4901161193847656e-08, - 1 - ], - "translation" : [ - 2.2351740014414645e-08, - 0.016836093738675117, - -5.329070518200751e-15 - ] - }, - { - "children" : [ - 9 - ], - "name" : "L_Hand", - "rotation" : [ - -0.10859407484531403, - -0.0013414795976132154, - -0.012280543334782124, - 0.9940094351768494 - ], - "scale" : [ - 1, - 1, - 0.9999999403953552 - ], - "translation" : [ - -5.215407838932151e-08, - 0.030574528500437737, - 4.579678858362968e-09 - ] - }, - { - "children" : [ - 10 - ], - "name" : "L_Forearm", - "rotation" : [ - 0.03182216361165047, - -0.010124370455741882, - -0.05386859551072121, - 0.9979895353317261 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - -1.4001724224499412e-08, - 0.011892830953001976, - -4.656612873077393e-10 - ] - }, - { - "children" : [ - 11 - ], - "name" : "L_Elbow", - "rotation" : [ - 0.13403145968914032, - 0.0004466302052605897, - 0.0229647234082222, - 0.9907108545303345 - ], - "translation" : [ - 9.490547014934236e-09, - 0.07338026165962219, - 1.862645149230957e-09 - ] - }, - { - "children" : [ - 12 - ], - "name" : "L_Shoulder", - "rotation" : [ - -0.05528340861201286, - 0.01580565795302391, - -0.27442947030067444, - 0.9598866701126099 - ], - "translation" : [ - 1.1175854908174188e-08, - 0.034574370831251144, - -3.3306690738754696e-15 - ] - }, - { - "children" : [ - 13 - ], - "name" : "L_Clavicle", - "rotation" : [ - -4.527326780134899e-08, - -2.4482876170850432e-08, - -0.6586140990257263, - 0.7524808645248413 - ], - "scale" : [ - 0.9999998807907104, - 0.9999998807907104, - 1 - ], - "translation" : [ - 0.03500552102923393, - 0.07119831442832947, - -6.646381223163189e-10 - ] - }, - { - "name" : "R_Hand_end", - "rotation" : [ - 1.3239958462918366e-08, - 2.4324227076988336e-09, - -1.4901161193847656e-08, - 1 - ], - "translation" : [ - -2.2351740014414645e-08, - 0.016836093738675117, - -5.329070518200751e-15 - ] - }, - { - "children" : [ - 15 - ], - "name" : "R_Hand", - "rotation" : [ - -0.10859407484531403, - 0.0013414795976132154, - 0.012280543334782124, - 0.9940094351768494 - ], - "scale" : [ - 1, - 1, - 0.9999999403953552 - ], - "translation" : [ - 5.215407838932151e-08, - 0.030574528500437737, - 4.579678858362968e-09 - ] - }, - { - "children" : [ - 16 - ], - "name" : "R_Forearm", - "rotation" : [ - 0.03182216361165047, - 0.010124370455741882, - 0.05386859551072121, - 0.9979895353317261 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - 1.4001724224499412e-08, - 0.011892830953001976, - -4.656612873077393e-10 - ] - }, - { - "children" : [ - 17 - ], - "name" : "R_Elbow", - "rotation" : [ - 0.13403145968914032, - -0.0004466302052605897, - -0.0229647234082222, - 0.9907108545303345 - ], - "translation" : [ - -9.490547014934236e-09, - 0.07338026165962219, - 1.862645149230957e-09 - ] - }, - { - "children" : [ - 18 - ], - "name" : "R_Shoulder", - "rotation" : [ - -0.05528340861201286, - -0.01580565795302391, - 0.27442947030067444, - 0.9598866701126099 - ], - "translation" : [ - -1.1175854908174188e-08, - 0.034574370831251144, - -3.3306690738754696e-15 - ] - }, - { - "children" : [ - 19 - ], - "name" : "R_Clavicle", - "rotation" : [ - -4.527326780134899e-08, - 2.4482876170850432e-08, - 0.6586140990257263, - 0.7524808645248413 - ], - "scale" : [ - 0.9999998807907104, - 0.9999998807907104, - 1 - ], - "translation" : [ - -0.03500552102923393, - 0.07119831442832947, - -6.646381223163189e-10 - ] - }, - { - "name" : "L_IK_Arm_Pole_end", - "rotation" : [ - -8.14913803104389e-10, - -2.8273916541365907e-08, - 3.597233089180918e-08, - 1 - ], - "translation" : [ - 1.3742706528319104e-08, - 0.04507105425000191, - 1.6264998237147665e-08 - ] - }, - { - "children" : [ - 21 - ], - "name" : "L_IK_Arm_Pole", - "rotation" : [ - -0.3575689494609833, - -0.6109033823013306, - 0.6082502007484436, - 0.3591284155845642 - ], - "scale" : [ - 0.9999999403953552, - 0.9999998807907104, - 0.9999999403953552 - ], - "translation" : [ - 0.0021197572350502014, - -0.04126967862248421, - -0.053202081471681595 - ] - }, - { - "children" : [ - 22 - ], - "name" : "L_IK_Arm_Target", - "rotation" : [ - -0.0011026781285181642, - 0.0018760154489427805, - -0.8620717525482178, - 0.5067814588546753 - ], - "scale" : [ - 0.9999999403953552, - 1, - 1 - ], - "translation" : [ - 0.17300567030906677, - 0.02745041251182556, - 3.304734264020226e-10 - ] - }, - { - "name" : "R_IK_Arm_Pole_end", - "rotation" : [ - -8.14913803104389e-10, - 2.8273916541365907e-08, - -3.597233089180918e-08, - 1 - ], - "translation" : [ - -1.3742706528319104e-08, - 0.04507105425000191, - 1.6264998237147665e-08 - ] - }, - { - "children" : [ - 24 - ], - "name" : "R_IK_Arm_Pole", - "rotation" : [ - -0.3575689494609833, - 0.6109033823013306, - -0.6082502007484436, - 0.3591284155845642 - ], - "scale" : [ - 0.9999999403953552, - 0.9999998807907104, - 0.9999999403953552 - ], - "translation" : [ - -0.0021197572350502014, - -0.04126967862248421, - -0.053202081471681595 - ] - }, - { - "children" : [ - 25 - ], - "name" : "R_IK_Arm_Target", - "rotation" : [ - -0.0011026781285181642, - -0.0018760154489427805, - 0.8620717525482178, - 0.5067814588546753 - ], - "scale" : [ - 0.9999999403953552, - 1, - 1 - ], - "translation" : [ - -0.17300567030906677, - 0.02745041251182556, - 3.304734264020226e-10 - ] - }, - { - "children" : [ - 8, - 14, - 20, - 23, - 26 - ], - "name" : "Upper_Spine", - "translation" : [ - 0, - 0.06622835993766785, - 0 - ] - }, - { - "children" : [ - 27 - ], - "name" : "Lower_Spine", - "translation" : [ - 0, - 0.06622838973999023, - 0 - ] - }, - { - "name" : "Tail_end", - "translation" : [ - 0, - 0.07595176249742508, - -1.3838050705317073e-09 - ] - }, - { - "children" : [ - 29 - ], - "name" : "Tail", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - -5.8597615213960615e-18, - 0.03983837366104126, - -0.09847982972860336 - ] - }, - { - "name" : "L_Hip_end", - "translation" : [ - 0, - 0.032987553626298904, - -1.5967565047958487e-09 - ] - }, - { - "children" : [ - 31 - ], - "name" : "L_Hip", - "translation" : [ - 0.06953180581331253, - 0.04957667365670204, - 0.061330340802669525 - ] - }, - { - "name" : "L_Butt_end", - "translation" : [ - 0, - 0.03298754245042801, - 1.3750955929481279e-09 - ] - }, - { - "children" : [ - 33 - ], - "name" : "L_Butt", - "translation" : [ - 0.06953180581331253, - -0.0007792188553139567, - -0.04653617739677429 - ] - }, - { - "name" : "R_Toe_end", - "rotation" : [ - -1.304514398725587e-07, - 4.8278069232242024e-14, - 3.113858042524953e-07, - 1 - ], - "translation" : [ - -2.9270432744255004e-09, - 0.02392714098095894, - 1.3476908478082805e-10 - ] - }, - { - "children" : [ - 35 - ], - "name" : "R_Toe", - "rotation" : [ - 0.32702386379241943, - -1.1310142156162328e-07, - -1.641405731334089e-07, - 0.945016086101532 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - 8.650776095464607e-09, - 0.03380582109093666, - -2.448857117087755e-09 - ] - }, - { - "children" : [ - 36 - ], - "name" : "R_Feet", - "rotation" : [ - 0.516292929649353, - 0.020581310614943504, - 0.05452270060777664, - 0.854426920413971 - ], - "translation" : [ - -1.2865877252465907e-09, - 0.06353945285081863, - 2.6193447411060333e-10 - ] - }, - { - "children" : [ - 37 - ], - "name" : "R_Shin", - "rotation" : [ - -0.054226718842983246, - -0.00034972387948073447, - 0.0027083493769168854, - 0.9985249042510986 - ], - "scale" : [ - 0.9999998807907104, - 0.9999999403953552, - 0.9999998807907104 - ], - "translation" : [ - 8.217813984856548e-09, - 0.012935775332152843, - -1.1059455573558807e-09 - ] - }, - { - "children" : [ - 38 - ], - "name" : "R_Knee", - "rotation" : [ - -0.117364302277565, - 0.00023353073629550636, - 0.005353146698325872, - 0.9930744767189026 - ], - "scale" : [ - 1, - 1.0000001192092896, - 1 - ], - "translation" : [ - 7.161837345392996e-09, - 0.08009886741638184, - -3.725290298461914e-09 - ] - }, - { - "children" : [ - 39 - ], - "name" : "R_Thigh", - "rotation" : [ - 0.005340703763067722, - 0.08032803982496262, - 0.9945576786994934, - 0.06613556295633316 - ], - "scale" : [ - 1.0000009536743164, - 1.0000001192092896, - 1.0000014305114746 - ], - "translation" : [ - -0.06634333729743958, - 0.021777987480163574, - -0.000205356627702713 - ] - }, - { - "name" : "R_Hip_end", - "translation" : [ - 0, - 0.032987553626298904, - -1.5967565047958487e-09 - ] - }, - { - "children" : [ - 41 - ], - "name" : "R_Hip", - "translation" : [ - -0.06953180581331253, - 0.04957667365670204, - 0.061330340802669525 - ] - }, - { - "name" : "R_Butt_end", - "translation" : [ - 0, - 0.03298754245042801, - 1.3750955929481279e-09 - ] - }, - { - "children" : [ - 43 - ], - "name" : "R_Butt", - "translation" : [ - -0.06953180581331253, - -0.0007792188553139567, - -0.04653617739677429 - ] - }, - { - "children" : [ - 5, - 28, - 30, - 32, - 34, - 40, - 42, - 44 - ], - "name" : "Pelvis", - "translation" : [ - 0, - 0.15915730595588684, - 0 - ] - }, - { - "name" : "L_IK_Leg_Pole_end", - "translation" : [ - 0, - 0.04320859909057617, - 2.2203057170600005e-09 - ] - }, - { - "children" : [ - 46 - ], - "name" : "L_IK_Leg_Pole", - "rotation" : [ - 0, - 0, - -1, - 0 - ], - "translation" : [ - -0.008841380476951599, - -0.08020301908254623, - 0.0748630166053772 - ] - }, - { - "children" : [ - 47 - ], - "name" : "L_IK_Leg_Target", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - 0.08565311133861542, - 0.027707800269126892, - 0.00015427125617861748 - ] - }, - { - "name" : "R_IK_Leg_Pole_end", - "translation" : [ - 0, - 0.04320859909057617, - 2.2203057170600005e-09 - ] - }, - { - "children" : [ - 49 - ], - "name" : "R_IK_Leg_Pole", - "rotation" : [ - 0, - 0, - -1, - 0 - ], - "translation" : [ - 0.008841380476951599, - -0.08020301908254623, - 0.0748630166053772 - ] - }, - { - "children" : [ - 50 - ], - "name" : "R_IK_Leg_Target", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - -0.08565311133861542, - 0.027707800269126892, - 0.00015427125617861748 - ] - }, - { - "children" : [ - 45, - 48, - 51 - ], - "name" : "Root" - }, - { - "mesh" : 0, - "name" : "Bag", - "skin" : 0 - }, - { - "mesh" : 1, - "name" : "Raccoon", - "skin" : 0 - }, - { - "children" : [ - 53, - 54, - 52 - ], - "name" : "Armature" - } - ], - "animations" : [ - { - "channels" : [ - { - "sampler" : 0, - "target" : { - "node" : 52, - "path" : "translation" - } - }, - { - "sampler" : 1, - "target" : { - "node" : 52, - "path" : "rotation" - } - }, - { - "sampler" : 2, - "target" : { - "node" : 52, - "path" : "scale" - } - }, - { - "sampler" : 3, - "target" : { - "node" : 45, - "path" : "translation" - } - }, - { - "sampler" : 4, - "target" : { - "node" : 45, - "path" : "rotation" - } - }, - { - "sampler" : 5, - "target" : { - "node" : 45, - "path" : "scale" - } - }, - { - "sampler" : 6, - "target" : { - "node" : 5, - "path" : "translation" - } - }, - { - "sampler" : 7, - "target" : { - "node" : 5, - "path" : "rotation" - } - }, - { - "sampler" : 8, - "target" : { - "node" : 5, - "path" : "scale" - } - }, - { - "sampler" : 9, - "target" : { - "node" : 4, - "path" : "translation" - } - }, - { - "sampler" : 10, - "target" : { - "node" : 4, - "path" : "rotation" - } - }, - { - "sampler" : 11, - "target" : { - "node" : 4, - "path" : "scale" - } - }, - { - "sampler" : 12, - "target" : { - "node" : 3, - "path" : "translation" - } - }, - { - "sampler" : 13, - "target" : { - "node" : 3, - "path" : "rotation" - } - }, - { - "sampler" : 14, - "target" : { - "node" : 3, - "path" : "scale" - } - }, - { - "sampler" : 15, - "target" : { - "node" : 2, - "path" : "translation" - } - }, - { - "sampler" : 16, - "target" : { - "node" : 2, - "path" : "rotation" - } - }, - { - "sampler" : 17, - "target" : { - "node" : 2, - "path" : "scale" - } - }, - { - "sampler" : 18, - "target" : { - "node" : 1, - "path" : "translation" - } - }, - { - "sampler" : 19, - "target" : { - "node" : 1, - "path" : "rotation" - } - }, - { - "sampler" : 20, - "target" : { - "node" : 1, - "path" : "scale" - } - }, - { - "sampler" : 21, - "target" : { - "node" : 0, - "path" : "translation" - } - }, - { - "sampler" : 22, - "target" : { - "node" : 0, - "path" : "rotation" - } - }, - { - "sampler" : 23, - "target" : { - "node" : 0, - "path" : "scale" - } - }, - { - "sampler" : 24, - "target" : { - "node" : 28, - "path" : "translation" - } - }, - { - "sampler" : 25, - "target" : { - "node" : 28, - "path" : "rotation" - } - }, - { - "sampler" : 26, - "target" : { - "node" : 28, - "path" : "scale" - } - }, - { - "sampler" : 27, - "target" : { - "node" : 27, - "path" : "translation" - } - }, - { - "sampler" : 28, - "target" : { - "node" : 27, - "path" : "rotation" - } - }, - { - "sampler" : 29, - "target" : { - "node" : 27, - "path" : "scale" - } - }, - { - "sampler" : 30, - "target" : { - "node" : 8, - "path" : "translation" - } - }, - { - "sampler" : 31, - "target" : { - "node" : 8, - "path" : "rotation" - } - }, - { - "sampler" : 32, - "target" : { - "node" : 8, - "path" : "scale" - } - }, - { - "sampler" : 33, - "target" : { - "node" : 7, - "path" : "translation" - } - }, - { - "sampler" : 34, - "target" : { - "node" : 7, - "path" : "rotation" - } - }, - { - "sampler" : 35, - "target" : { - "node" : 7, - "path" : "scale" - } - }, - { - "sampler" : 36, - "target" : { - "node" : 6, - "path" : "translation" - } - }, - { - "sampler" : 37, - "target" : { - "node" : 6, - "path" : "rotation" - } - }, - { - "sampler" : 38, - "target" : { - "node" : 6, - "path" : "scale" - } - }, - { - "sampler" : 39, - "target" : { - "node" : 14, - "path" : "translation" - } - }, - { - "sampler" : 40, - "target" : { - "node" : 14, - "path" : "rotation" - } - }, - { - "sampler" : 41, - "target" : { - "node" : 14, - "path" : "scale" - } - }, - { - "sampler" : 42, - "target" : { - "node" : 13, - "path" : "translation" - } - }, - { - "sampler" : 43, - "target" : { - "node" : 13, - "path" : "rotation" - } - }, - { - "sampler" : 44, - "target" : { - "node" : 13, - "path" : "scale" - } - }, - { - "sampler" : 45, - "target" : { - "node" : 12, - "path" : "translation" - } - }, - { - "sampler" : 46, - "target" : { - "node" : 12, - "path" : "rotation" - } - }, - { - "sampler" : 47, - "target" : { - "node" : 12, - "path" : "scale" - } - }, - { - "sampler" : 48, - "target" : { - "node" : 11, - "path" : "translation" - } - }, - { - "sampler" : 49, - "target" : { - "node" : 11, - "path" : "rotation" - } - }, - { - "sampler" : 50, - "target" : { - "node" : 11, - "path" : "scale" - } - }, - { - "sampler" : 51, - "target" : { - "node" : 10, - "path" : "translation" - } - }, - { - "sampler" : 52, - "target" : { - "node" : 10, - "path" : "rotation" - } - }, - { - "sampler" : 53, - "target" : { - "node" : 10, - "path" : "scale" - } - }, - { - "sampler" : 54, - "target" : { - "node" : 9, - "path" : "translation" - } - }, - { - "sampler" : 55, - "target" : { - "node" : 9, - "path" : "rotation" - } - }, - { - "sampler" : 56, - "target" : { - "node" : 9, - "path" : "scale" - } - }, - { - "sampler" : 57, - "target" : { - "node" : 20, - "path" : "translation" - } - }, - { - "sampler" : 58, - "target" : { - "node" : 20, - "path" : "rotation" - } - }, - { - "sampler" : 59, - "target" : { - "node" : 20, - "path" : "scale" - } - }, - { - "sampler" : 60, - "target" : { - "node" : 19, - "path" : "translation" - } - }, - { - "sampler" : 61, - "target" : { - "node" : 19, - "path" : "rotation" - } - }, - { - "sampler" : 62, - "target" : { - "node" : 19, - "path" : "scale" - } - }, - { - "sampler" : 63, - "target" : { - "node" : 18, - "path" : "translation" - } - }, - { - "sampler" : 64, - "target" : { - "node" : 18, - "path" : "rotation" - } - }, - { - "sampler" : 65, - "target" : { - "node" : 18, - "path" : "scale" - } - }, - { - "sampler" : 66, - "target" : { - "node" : 17, - "path" : "translation" - } - }, - { - "sampler" : 67, - "target" : { - "node" : 17, - "path" : "rotation" - } - }, - { - "sampler" : 68, - "target" : { - "node" : 17, - "path" : "scale" - } - }, - { - "sampler" : 69, - "target" : { - "node" : 16, - "path" : "translation" - } - }, - { - "sampler" : 70, - "target" : { - "node" : 16, - "path" : "rotation" - } - }, - { - "sampler" : 71, - "target" : { - "node" : 16, - "path" : "scale" - } - }, - { - "sampler" : 72, - "target" : { - "node" : 15, - "path" : "translation" - } - }, - { - "sampler" : 73, - "target" : { - "node" : 15, - "path" : "rotation" - } - }, - { - "sampler" : 74, - "target" : { - "node" : 15, - "path" : "scale" - } - }, - { - "sampler" : 75, - "target" : { - "node" : 23, - "path" : "translation" - } - }, - { - "sampler" : 76, - "target" : { - "node" : 23, - "path" : "rotation" - } - }, - { - "sampler" : 77, - "target" : { - "node" : 23, - "path" : "scale" - } - }, - { - "sampler" : 78, - "target" : { - "node" : 22, - "path" : "translation" - } - }, - { - "sampler" : 79, - "target" : { - "node" : 22, - "path" : "rotation" - } - }, - { - "sampler" : 80, - "target" : { - "node" : 22, - "path" : "scale" - } - }, - { - "sampler" : 81, - "target" : { - "node" : 21, - "path" : "translation" - } - }, - { - "sampler" : 82, - "target" : { - "node" : 21, - "path" : "rotation" - } - }, - { - "sampler" : 83, - "target" : { - "node" : 21, - "path" : "scale" - } - }, - { - "sampler" : 84, - "target" : { - "node" : 26, - "path" : "translation" - } - }, - { - "sampler" : 85, - "target" : { - "node" : 26, - "path" : "rotation" - } - }, - { - "sampler" : 86, - "target" : { - "node" : 26, - "path" : "scale" - } - }, - { - "sampler" : 87, - "target" : { - "node" : 25, - "path" : "translation" - } - }, - { - "sampler" : 88, - "target" : { - "node" : 25, - "path" : "rotation" - } - }, - { - "sampler" : 89, - "target" : { - "node" : 25, - "path" : "scale" - } - }, - { - "sampler" : 90, - "target" : { - "node" : 24, - "path" : "translation" - } - }, - { - "sampler" : 91, - "target" : { - "node" : 24, - "path" : "rotation" - } - }, - { - "sampler" : 92, - "target" : { - "node" : 24, - "path" : "scale" - } - }, - { - "sampler" : 93, - "target" : { - "node" : 30, - "path" : "translation" - } - }, - { - "sampler" : 94, - "target" : { - "node" : 30, - "path" : "rotation" - } - }, - { - "sampler" : 95, - "target" : { - "node" : 30, - "path" : "scale" - } - }, - { - "sampler" : 96, - "target" : { - "node" : 29, - "path" : "translation" - } - }, - { - "sampler" : 97, - "target" : { - "node" : 29, - "path" : "rotation" - } - }, - { - "sampler" : 98, - "target" : { - "node" : 29, - "path" : "scale" - } - }, - { - "sampler" : 99, - "target" : { - "node" : 32, - "path" : "translation" - } - }, - { - "sampler" : 100, - "target" : { - "node" : 32, - "path" : "rotation" - } - }, - { - "sampler" : 101, - "target" : { - "node" : 32, - "path" : "scale" - } - }, - { - "sampler" : 102, - "target" : { - "node" : 31, - "path" : "translation" - } - }, - { - "sampler" : 103, - "target" : { - "node" : 31, - "path" : "rotation" - } - }, - { - "sampler" : 104, - "target" : { - "node" : 31, - "path" : "scale" - } - }, - { - "sampler" : 105, - "target" : { - "node" : 34, - "path" : "translation" - } - }, - { - "sampler" : 106, - "target" : { - "node" : 34, - "path" : "rotation" - } - }, - { - "sampler" : 107, - "target" : { - "node" : 34, - "path" : "scale" - } - }, - { - "sampler" : 108, - "target" : { - "node" : 33, - "path" : "translation" - } - }, - { - "sampler" : 109, - "target" : { - "node" : 33, - "path" : "rotation" - } - }, - { - "sampler" : 110, - "target" : { - "node" : 33, - "path" : "scale" - } - }, - { - "sampler" : 111, - "target" : { - "node" : 40, - "path" : "translation" - } - }, - { - "sampler" : 112, - "target" : { - "node" : 40, - "path" : "rotation" - } - }, - { - "sampler" : 113, - "target" : { - "node" : 40, - "path" : "scale" - } - }, - { - "sampler" : 114, - "target" : { - "node" : 39, - "path" : "translation" - } - }, - { - "sampler" : 115, - "target" : { - "node" : 39, - "path" : "rotation" - } - }, - { - "sampler" : 116, - "target" : { - "node" : 39, - "path" : "scale" - } - }, - { - "sampler" : 117, - "target" : { - "node" : 38, - "path" : "translation" - } - }, - { - "sampler" : 118, - "target" : { - "node" : 38, - "path" : "rotation" - } - }, - { - "sampler" : 119, - "target" : { - "node" : 38, - "path" : "scale" - } - }, - { - "sampler" : 120, - "target" : { - "node" : 37, - "path" : "translation" - } - }, - { - "sampler" : 121, - "target" : { - "node" : 37, - "path" : "rotation" - } - }, - { - "sampler" : 122, - "target" : { - "node" : 37, - "path" : "scale" - } - }, - { - "sampler" : 123, - "target" : { - "node" : 36, - "path" : "translation" - } - }, - { - "sampler" : 124, - "target" : { - "node" : 36, - "path" : "rotation" - } - }, - { - "sampler" : 125, - "target" : { - "node" : 36, - "path" : "scale" - } - }, - { - "sampler" : 126, - "target" : { - "node" : 35, - "path" : "translation" - } - }, - { - "sampler" : 127, - "target" : { - "node" : 35, - "path" : "rotation" - } - }, - { - "sampler" : 128, - "target" : { - "node" : 35, - "path" : "scale" - } - }, - { - "sampler" : 129, - "target" : { - "node" : 42, - "path" : "translation" - } - }, - { - "sampler" : 130, - "target" : { - "node" : 42, - "path" : "rotation" - } - }, - { - "sampler" : 131, - "target" : { - "node" : 42, - "path" : "scale" - } - }, - { - "sampler" : 132, - "target" : { - "node" : 41, - "path" : "translation" - } - }, - { - "sampler" : 133, - "target" : { - "node" : 41, - "path" : "rotation" - } - }, - { - "sampler" : 134, - "target" : { - "node" : 41, - "path" : "scale" - } - }, - { - "sampler" : 135, - "target" : { - "node" : 44, - "path" : "translation" - } - }, - { - "sampler" : 136, - "target" : { - "node" : 44, - "path" : "rotation" - } - }, - { - "sampler" : 137, - "target" : { - "node" : 44, - "path" : "scale" - } - }, - { - "sampler" : 138, - "target" : { - "node" : 43, - "path" : "translation" - } - }, - { - "sampler" : 139, - "target" : { - "node" : 43, - "path" : "rotation" - } - }, - { - "sampler" : 140, - "target" : { - "node" : 43, - "path" : "scale" - } - }, - { - "sampler" : 141, - "target" : { - "node" : 48, - "path" : "translation" - } - }, - { - "sampler" : 142, - "target" : { - "node" : 48, - "path" : "rotation" - } - }, - { - "sampler" : 143, - "target" : { - "node" : 48, - "path" : "scale" - } - }, - { - "sampler" : 144, - "target" : { - "node" : 47, - "path" : "translation" - } - }, - { - "sampler" : 145, - "target" : { - "node" : 47, - "path" : "rotation" - } - }, - { - "sampler" : 146, - "target" : { - "node" : 47, - "path" : "scale" - } - }, - { - "sampler" : 147, - "target" : { - "node" : 46, - "path" : "translation" - } - }, - { - "sampler" : 148, - "target" : { - "node" : 46, - "path" : "rotation" - } - }, - { - "sampler" : 149, - "target" : { - "node" : 46, - "path" : "scale" - } - }, - { - "sampler" : 150, - "target" : { - "node" : 51, - "path" : "translation" - } - }, - { - "sampler" : 151, - "target" : { - "node" : 51, - "path" : "rotation" - } - }, - { - "sampler" : 152, - "target" : { - "node" : 51, - "path" : "scale" - } - }, - { - "sampler" : 153, - "target" : { - "node" : 50, - "path" : "translation" - } - }, - { - "sampler" : 154, - "target" : { - "node" : 50, - "path" : "rotation" - } - }, - { - "sampler" : 155, - "target" : { - "node" : 50, - "path" : "scale" - } - }, - { - "sampler" : 156, - "target" : { - "node" : 49, - "path" : "translation" - } - }, - { - "sampler" : 157, - "target" : { - "node" : 49, - "path" : "rotation" - } - }, - { - "sampler" : 158, - "target" : { - "node" : 49, - "path" : "scale" - } - }, - { - "sampler" : 159, - "target" : { - "node" : 55, - "path" : "translation" - } - }, - { - "sampler" : 160, - "target" : { - "node" : 55, - "path" : "rotation" - } - }, - { - "sampler" : 161, - "target" : { - "node" : 55, - "path" : "scale" - } - } - ], - "name" : "Armature|Armature|ArmatureAction", - "samplers" : [ - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 16 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 17 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 18 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 19 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 20 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 21 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 22 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 23 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 24 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 25 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 26 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 27 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 28 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 29 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 30 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 31 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 32 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 33 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 34 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 35 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 36 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 37 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 38 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 39 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 40 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 41 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 42 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 43 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 44 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 45 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 46 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 47 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 48 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 49 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 50 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 51 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 52 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 53 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 54 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 55 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 56 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 57 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 58 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 59 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 60 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 61 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 62 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 63 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 64 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 65 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 66 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 67 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 68 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 69 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 70 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 71 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 72 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 73 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 74 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 75 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 76 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 77 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 78 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 79 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 80 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 81 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 82 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 83 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 84 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 85 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 86 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 87 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 88 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 89 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 90 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 91 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 92 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 93 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 94 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 95 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 96 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 97 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 98 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 99 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 100 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 101 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 102 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 103 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 104 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 105 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 106 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 107 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 108 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 109 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 110 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 111 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 112 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 113 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 114 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 115 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 116 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 117 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 118 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 119 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 120 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 121 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 122 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 123 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 124 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 125 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 126 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 127 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 128 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 129 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 130 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 131 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 132 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 133 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 134 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 135 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 136 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 137 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 138 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 139 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 140 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 141 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 142 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 143 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 144 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 145 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 146 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 147 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 148 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 149 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 150 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 151 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 152 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 153 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 154 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 155 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 156 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 157 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 158 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 159 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 160 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 161 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 162 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 163 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 164 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 165 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 166 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 167 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 168 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 169 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 170 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 171 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 172 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 173 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 174 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 175 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 176 - }, - { - "input" : 15, - "interpolation" : "LINEAR", - "output" : 177 - } - ] - } - ], - "materials" : [ - { - "doubleSided" : true, - "name" : "BagMaterial", - "pbrMetallicRoughness" : { - "baseColorTexture" : { - "index" : 0 - }, - "metallicFactor" : 0, - "roughnessFactor" : 0.5 - } - }, - { - "alphaMode" : "BLEND", - "doubleSided" : true, - "extensions" : { - "KHR_materials_specular" : { - "specularColorFactor" : [ - 0, - 0, - 0 - ] - }, - "KHR_materials_ior" : { - "ior" : 1.4500000476837158 - } - }, - "name" : "BodyMaterial", - "pbrMetallicRoughness" : { - "baseColorTexture" : { - "index" : 1 - }, - "metallicFactor" : 0 - } - } - ], - "meshes" : [ - { - "name" : "Cube.003", - "primitives" : [ - { - "attributes" : { - "POSITION" : 0, - "NORMAL" : 1, - "TANGENT" : 2, - "TEXCOORD_0" : 3, - "JOINTS_0" : 4, - "WEIGHTS_0" : 5 - }, - "indices" : 6, - "material" : 0 - } - ] - }, - { - "name" : "Cube.012", - "primitives" : [ - { - "attributes" : { - "POSITION" : 8, - "NORMAL" : 9, - "TANGENT" : 10, - "TEXCOORD_0" : 11, - "JOINTS_0" : 12, - "WEIGHTS_0" : 13 - }, - "indices" : 14, - "material" : 1 - } - ] - } - ], - "textures" : [ - { - "sampler" : 0, - "source" : 0 - }, - { - "sampler" : 0, - "source" : 1 - } - ], - "images" : [ - { - "mimeType" : "image/png", - "name" : "RaccoonBag_Color_Ver4", - "uri" : "RaccoonBag_Color_Ver4.dds" - }, - { - "mimeType" : "image/png", - "name" : "RaccoonPreTexturedVer1_Base9-RaccoonPreTexturedVer1_Base9", - "uri" : "RaccoonPreTexturedVer1_Base9-RaccoonPreTexturedVer1_Base9.dds" - } - ], - "skins" : [ - { - "inverseBindMatrices" : 7, - "joints" : [ - 52, - 45, - 5, - 4, - 3, - 2, - 1, - 0, - 28, - 27, - 8, - 7, - 6, - 14, - 13, - 12, - 11, - 10, - 9, - 20, - 19, - 18, - 17, - 16, - 15, - 23, - 22, - 21, - 26, - 25, - 24, - 30, - 29, - 32, - 31, - 34, - 33, - 40, - 39, - 38, - 37, - 36, - 35, - 42, - 41, - 44, - 43, - 48, - 47, - 46, - 51, - 50, - 49 - ], - "name" : "Armature" - } - ], - "accessors" : [ - { - "bufferView" : 0, - "componentType" : 5126, - "count" : 512, - "max" : [ - 0.1090814545750618, - 0.40452075004577637, - 0.0857388824224472 - ], - "min" : [ - -0.09462108463048935, - 0.2630254030227661, - -0.11617939174175262 - ], - "type" : "VEC3" - }, - { - "bufferView" : 1, - "componentType" : 5126, - "count" : 512, - "type" : "VEC3" - }, - { - "bufferView" : 2, - "componentType" : 5126, - "count" : 512, - "type" : "VEC4" - }, - { - "bufferView" : 3, - "componentType" : 5126, - "count" : 512, - "type" : "VEC2" - }, - { - "bufferView" : 4, - "componentType" : 5121, - "count" : 512, - "type" : "VEC4" - }, - { - "bufferView" : 5, - "componentType" : 5126, - "count" : 512, - "type" : "VEC4" - }, - { - "bufferView" : 6, - "componentType" : 5123, - "count" : 2346, - "type" : "SCALAR" - }, - { - "bufferView" : 7, - "componentType" : 5126, - "count" : 53, - "type" : "MAT4" - }, - { - "bufferView" : 8, - "componentType" : 5126, - "count" : 3484, - "max" : [ - 0.2035536766052246, - 0.5987313389778137, - 0.09013944119215012 - ], - "min" : [ - -0.19493983685970306, - -0.0017474208725616336, - -0.19020147621631622 - ], - "type" : "VEC3" - }, - { - "bufferView" : 9, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC3" - }, - { - "bufferView" : 10, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC4" - }, - { - "bufferView" : 11, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC2" - }, - { - "bufferView" : 12, - "componentType" : 5121, - "count" : 3484, - "type" : "VEC4" - }, - { - "bufferView" : 13, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC4" - }, - { - "bufferView" : 14, - "componentType" : 5123, - "count" : 17472, - "type" : "SCALAR" - }, - { - "bufferView" : 15, - "componentType" : 5126, - "count" : 51, - "max" : [ - 2.125 - ], - "min" : [ - 0.041666666666666664 - ], - "type" : "SCALAR" - }, - { - "bufferView" : 16, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 17, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 18, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 19, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 20, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 21, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 22, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 23, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 24, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 25, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 26, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 27, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 28, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 29, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 30, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 31, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 32, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 33, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 34, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 35, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 36, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 37, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 38, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 39, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 40, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 41, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 42, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 43, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 44, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 45, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 46, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 47, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 48, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 49, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 50, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 51, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 52, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 53, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 54, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 55, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 56, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 57, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 58, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 59, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 60, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 61, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 62, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 63, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 64, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 65, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 66, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 67, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 68, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 69, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 70, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 71, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 72, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 73, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 74, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 75, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 76, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 77, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 78, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 79, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 80, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 81, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 82, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 83, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 84, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 85, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 86, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 87, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 88, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 89, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 90, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 91, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 92, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 93, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 94, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 95, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 96, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 97, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 98, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 99, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 100, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 101, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 102, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 103, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 104, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 105, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 106, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 107, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 108, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 109, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 110, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 111, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 112, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 113, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 114, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 115, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 116, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 117, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 118, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 119, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 120, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 121, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 122, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 123, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 124, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 125, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 126, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 127, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 128, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 129, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 130, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 131, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 132, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 133, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 134, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 135, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 136, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 137, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 138, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 139, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 140, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 141, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 142, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 143, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 144, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 145, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 146, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 147, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 148, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 149, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 150, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 151, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 152, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 153, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 154, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 155, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 156, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 157, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 158, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 159, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 160, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 161, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 162, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 163, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 164, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 165, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 166, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 167, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 168, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 169, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 170, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 171, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 172, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 173, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 174, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 175, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 176, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 177, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - } - ], - "bufferViews" : [ - { - "buffer" : 0, - "byteLength" : 6144, - "byteOffset" : 0, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 6144, - "byteOffset" : 6144, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 8192, - "byteOffset" : 12288, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 4096, - "byteOffset" : 20480, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 2048, - "byteOffset" : 24576, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 8192, - "byteOffset" : 26624, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 4692, - "byteOffset" : 34816, - "target" : 34963 - }, - { - "buffer" : 0, - "byteLength" : 3392, - "byteOffset" : 39508 - }, - { - "buffer" : 0, - "byteLength" : 41808, - "byteOffset" : 42900, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 41808, - "byteOffset" : 84708, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 55744, - "byteOffset" : 126516, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 27872, - "byteOffset" : 182260, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 13936, - "byteOffset" : 210132, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 55744, - "byteOffset" : 224068, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 34944, - "byteOffset" : 279812, - "target" : 34963 - }, - { - "buffer" : 0, - "byteLength" : 204, - "byteOffset" : 314756 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 314960 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 315572 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 316388 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 317000 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 317612 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 318428 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 319040 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 319652 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 320468 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 321080 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 321692 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 322508 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 323120 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 323732 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 324548 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 325160 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 325772 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 326588 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 327200 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 327812 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 328628 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 329240 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 329852 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 330668 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 331280 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 331892 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 332708 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 333320 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 333932 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 334748 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 335360 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 335972 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 336788 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 337400 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 338012 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 338828 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 339440 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 340052 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 340868 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 341480 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 342092 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 342908 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 343520 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 344132 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 344948 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 345560 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 346172 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 346988 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 347600 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 348212 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 349028 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 349640 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 350252 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 351068 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 351680 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 352292 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 353108 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 353720 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 354332 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 355148 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 355760 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 356372 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 357188 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 357800 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 358412 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 359228 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 359840 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 360452 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 361268 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 361880 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 362492 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 363308 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 363920 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 364532 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 365348 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 365960 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 366572 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 367388 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 368000 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 368612 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 369428 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 370040 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 370652 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 371468 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 372080 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 372692 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 373508 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 374120 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 374732 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 375548 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 376160 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 376772 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 377588 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 378200 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 378812 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 379628 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 380240 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 380852 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 381668 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 382280 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 382892 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 383708 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 384320 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 384932 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 385748 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 386360 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 386972 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 387788 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 388400 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 389012 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 389828 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 390440 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 391052 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 391868 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 392480 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 393092 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 393908 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 394520 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 395132 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 395948 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 396560 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 397172 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 397988 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 398600 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 399212 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 400028 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 400640 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 401252 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 402068 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 402680 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 403292 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 404108 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 404720 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 405332 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 406148 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 406760 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 407372 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 408188 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 408800 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 409412 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 410228 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 410840 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 411452 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 412268 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 412880 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 413492 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 414308 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 414920 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 415532 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 416348 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 416960 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 417572 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 418388 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 419000 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 419612 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 420428 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 421040 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 421652 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 422468 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 423080 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 423692 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 424508 - } - ], - "samplers" : [ - { - "magFilter" : 9729, - "minFilter" : 9987 - } - ], - "buffers" : [ - { - "byteLength" : 425120, - "uri" : "racoon.bin" - } - ] -} diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index e7dc3fb4..335acbbe 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -74,7 +74,11 @@ namespace Sandbox SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); + //TODO: REMOVE AFTER PRESENTATION SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.fbx"); + SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); + SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); + //TODO: REMOVE AFTER PRESENTATION // Set up graphics system and windows graphicsSystem->SetWindow(&window); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 0caf3c7e..24f3f4cb 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -10,6 +10,8 @@ #include "Scripting/SHScriptEngine.h" #include "Math/Transform/SHTransformComponent.h" +#include "Assets/SHAssetManager.h" + using namespace SHADE; namespace Sandbox @@ -33,6 +35,23 @@ namespace Sandbox SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); + //graphicsSystem->BuildMeshBuffers(); + + //Test Racoon mesh + auto meshes = SHADE::SHAssetManager::GetAllMeshes(); + std::vector> handles; + for (auto const& mesh : meshes) + { + handles.push_back(graphicsSystem->AddMesh( + mesh.header.vertexCount, + mesh.vertexPosition.data(), + mesh.texCoords.data(), + mesh.vertexTangent.data(), + mesh.vertexNormal.data(), + mesh.header.indexCount, + mesh.indices.data() + )); + } graphicsSystem->BuildMeshBuffers(); // Create Materials @@ -44,22 +63,33 @@ namespace Sandbox constexpr int NUM_COLS = 100; static const SHVec3 TEST_OBJ_SPACING = { 1.0f, 1.0f, 1.0f }; static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ), 0.0f, 0.0f }; - for (int z = 0; z < NUM_ROWS; ++z) - for (int x = 0; x < NUM_COLS; ++x) - { + //for (int z = 0; z < NUM_ROWS; ++z) + //for (int x = 0; x < NUM_COLS; ++x) + //{ + // auto entity = SHEntityManager::CreateEntity(); + // auto& renderable = *SHComponentManager::GetComponent_s(entity); + // auto& transform = *SHComponentManager::GetComponent_s(entity); + + // renderable.Mesh = handles.front(); + // renderable.SetMaterial(matInst); + + // // Set initial positions + // transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, 0.0f, z * TEST_OBJ_SPACING.z }); + // //transform.SetLocalScale(TEST_OBJ_SCALE); + + // stressTestObjects.emplace_back(entity); + //} + auto entity = SHEntityManager::CreateEntity(); auto& renderable = *SHComponentManager::GetComponent_s(entity); auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = CUBE_MESH; + renderable.Mesh = handles.front(); renderable.SetMaterial(matInst); - // Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, 0.0f, z * TEST_OBJ_SPACING.z }); //transform.SetLocalScale(TEST_OBJ_SCALE); stressTestObjects.emplace_back(entity); - } // Create blank entity with a script testObj = SHADE::SHEntityManager::CreateEntity(); diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp index bcd7b65b..32eab9a9 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp @@ -26,25 +26,13 @@ namespace SHADE } } - void SHDDSLoader::LoadImageAsset(std::vector const& paths, std::vector& images) + void SHDDSLoader::LoadImageAsset(AssetPath path, SHDDSAsset& asset) { - std::vector result; tinyddsloader::Result loadResult = tinyddsloader::Result::Success; - AssetPath lastPath; - for (auto const& path : paths) + loadResult = asset.image.Load(path.string().c_str()); + if (loadResult != tinyddsloader::Result::Success) { - if (loadResult == tinyddsloader::Result::Success) - { - result.emplace_back(); - } - else - { - SHLOG_ERROR("Unable to load DDS file: {} at {}", TinyDDSResultToString(loadResult), lastPath.string()); - } - loadResult = result.back().image.Load(path.string().c_str()); - lastPath = path; + SHLOG_ERROR("Unable to load DDS file: {} at {}", TinyDDSResultToString(loadResult), path.string()); } - - std::swap(images, result); } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h index 4a136db4..e2bd734a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h @@ -13,6 +13,6 @@ namespace SHADE private: static std::string TinyDDSResultToString(tinyddsloader::Result value); public: - static void LoadImageAsset(std::vector const& paths, std::vector& images); + static void LoadImageAsset(AssetPath paths, SHDDSAsset& image); }; } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 6f50d4dc..c1637e1f 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -14,7 +14,7 @@ namespace SHADE meshes.push_back(ProcessMesh(*mesh, scene)); } - for (size_t i{ 0 }; i < node.mNumMeshes; ++i) + for (size_t i{ 0 }; i < node.mNumChildren; ++i) { ProcessNode(*node.mChildren[i], scene, meshes); } @@ -85,7 +85,7 @@ namespace SHADE return result; } - bool SHMeshLoader::LoadMesh(std::vector& meshes, std::vector& images, AssetPath path) + bool SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) { const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), aiProcess_Triangulate @@ -111,11 +111,18 @@ namespace SHADE SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); return false; } - - for (size_t i {0}; i < scene->mNumTextures; ++i) - { - images.push_back(AssetPath(scene->mTextures[i]->mFilename.C_Str())); - } + //TODO MATERIALS FROM MESHES + //if (scene->HasMaterials()) + //{ + // for (int i{0}; i < scene->mNumMaterials; ++i) + // { + // if (scene->mMaterials[i]->mNumProperties > 0) + // { + // for (int j{0}; j < scene->mMaterials[i]->mProperties[j].) + // } + //std::cout << scene->mMaterials[i]->; + // } + //} ProcessNode(*scene->mRootNode, *scene, meshes); diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index 8580102e..fc8b548a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -16,6 +16,6 @@ namespace SHADE static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene); public: - static bool LoadMesh(std::vector& meshes, std::vector& images, AssetPath path); + static bool LoadMesh(std::vector& meshes, AssetPath path); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 4a90cd58..b8940d3e 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -70,7 +70,7 @@ enum class AssetType : uint8_t #define PREFAB_EXTENSION ".SHPrefab" #define MATERIAL_EXTENSION ".SHMat" #define TEXTURE_EXTENSION ".dds" -#define MESH_EXTENSION ".gltf" +#define MESH_EXTENSION ".fbx" std::string const EXTENSIONS[] = { AUDIO_EXTENSION, diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index b5d701db..ac05df59 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -199,17 +199,41 @@ namespace SHADE { AssetPath path{ p }; - LoadGLTF( - { - .name {path.filename().string()}, - .id {0}, - .type {AssetType::MESH}, - .path {path}, - .location {0} - } - ); + if (path.extension().string() == MESH_EXTENSION) + { + LoadGLTF( + { + .name {path.filename().string()}, + .id {0}, + .type {AssetType::MESH}, + .path {path}, + .location {0} + } + ); + } + else if (path.extension().string() == TEXTURE_EXTENSION) + { + LoadDDS( + { + .name {path.filename().string()}, + .id {0}, + .type {AssetType::DDS}, + .path {path}, + .location {0} + } + ); + } + } - SHLOG_INFO("Loaded meshes\n"); + std::vector SHAssetManager::GetAllMeshes() noexcept + { + std::vector result; + for (auto const& mesh : meshCollection) + { + result.push_back(mesh.second); + } + + return result; } /**************************************************************************** @@ -259,24 +283,22 @@ namespace SHADE void SHAssetManager::LoadGLTF(SHAsset asset) noexcept { std::vector meshes; - std::vector imagePaths; - std::vector images; - SHMeshLoader::LoadMesh(meshes, imagePaths, asset.path); - SHDDSLoader::LoadImageAsset(imagePaths, images); - - //TODO Recognise new meshes as asset as well and write mesh into binary - //TODO + SHMeshLoader::LoadMesh(meshes, asset.path); for (auto const& mesh : meshes) { meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh); } + } - for (auto const& image : images) - { - ddsCollection.emplace(GenerateAssetID(AssetType::DDS), image); - } + void SHAssetManager::LoadDDS(SHAsset asset) noexcept + { + SHDDSAsset image; + + SHDDSLoader::LoadImageAsset(asset.path, image); + + ddsCollection.emplace(GenerateAssetID(AssetType::DDS), image); } /**************************************************************************** diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index f9ebe6f3..8547e9e3 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -72,6 +72,7 @@ namespace SHADE //TODO: TEMPORARY FOR TESTING GLTF & DDS static void LoadDataTemp(std::string path) noexcept; + static std::vector GetAllMeshes() noexcept; private: /**************************************************************************** @@ -116,6 +117,7 @@ namespace SHADE // Specialised load calls static void LoadGLTF(SHAsset asset) noexcept; + static void LoadDDS(SHAsset asset) noexcept; static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; From 0a024e1b2d6705f65a0272b9a19e359ceb769b6d Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 26 Sep 2022 14:49:48 +0800 Subject: [PATCH 213/793] Separated render graph contents into separate files --- .../Graphics/Descriptors/SHVkDescriptorPool.h | 5 +- .../Graphics/Pipeline/SHVkPipelineLayout.cpp | 16 + .../Graphics/Pipeline/SHVkPipelineLayout.h | 13 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 652 +----------------- .../src/Graphics/RenderGraph/SHRenderGraph.h | 4 + .../RenderGraph/SHRenderGraphNode.cpp | 272 +++++++- .../Graphics/RenderGraph/SHRenderGraphNode.h | 16 +- .../RenderGraph/SHRenderGraphResource.cpp | 188 ++++- .../RenderGraph/SHRenderGraphResource.h | 12 + .../src/Graphics/RenderGraph/SHSubpass.cpp | 206 +++++- .../src/Graphics/RenderGraph/SHSubpass.h | 87 +++ .../Graphics/RenderGraph/SHSubpassCompute.cpp | 23 + .../Graphics/RenderGraph/SHSubpassCompute.h | 25 + .../src/Graphics/Renderpass/SHVkRenderpass.h | 4 - SHADE_Engine/src/Graphics/SHVulkanDefines.h | 4 + 15 files changed, 863 insertions(+), 664 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index 91112496..e1bee300 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -39,8 +39,9 @@ namespace SHADE std::vector Limits = { { vk::DescriptorType::eCombinedImageSampler, 100 }, - { vk::DescriptorType::eUniformBuffer, 100 }, - { vk::DescriptorType::eUniformBufferDynamic, 100 } + { vk::DescriptorType::eUniformBuffer, 100 }, + { vk::DescriptorType::eUniformBufferDynamic, 100 }, + { vk::DescriptorType::eStorageImage, 100} }; ///

    /// Maximum number of descriptor sets allowed diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp index 25be112e..7a76447d 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp @@ -216,10 +216,13 @@ namespace SHADE /***************************************************************************/ void SHVkPipelineLayout::PrepareVkDescriptorSetLayouts(void) noexcept { + descriptorSetLayoutsPipeline.reserve(descriptorSetLayoutsAllocate.size() + descriptorSetLayoutsGlobal.size()); + // Settle allocate layouts first vkDescriptorSetLayoutsAllocate.reserve(descriptorSetLayoutsAllocate.size()); for (auto const& layout : descriptorSetLayoutsAllocate) { + descriptorSetLayoutsPipeline.emplace_back(layout); vkDescriptorSetLayoutsAllocate.emplace_back(layout->GetVkHandle()); } @@ -228,7 +231,10 @@ namespace SHADE // First we insert the global layouts for (auto const& layout : descriptorSetLayoutsGlobal) + { + descriptorSetLayoutsPipeline.emplace_back(layout); vkDescriptorSetLayoutsPipeline.emplace_back(layout->GetVkHandle()); + } // Then we append layouts for allocation at the back of the vector std::copy(vkDescriptorSetLayoutsAllocate.begin(), vkDescriptorSetLayoutsAllocate.end(), std::back_inserter(vkDescriptorSetLayoutsPipeline)); @@ -435,6 +441,16 @@ namespace SHADE return {}; } + std::vector> SHVkPipelineLayout::GetDescriptorSetLayoutsPipeline(void) const noexcept + { + return descriptorSetLayoutsPipeline; + } + + std::vector> SHVkPipelineLayout::GetDescriptorSetLayoutsAllocate(void) const noexcept + { + return descriptorSetLayoutsAllocate; + } + SHVkPipelineLayout& SHVkPipelineLayout::operator=(SHVkPipelineLayout&& rhs) noexcept { if (&rhs == this) diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h index e43ceb73..f5d363fa 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h @@ -42,6 +42,9 @@ namespace SHADE //! We want to store this also because we need to allocate later std::vector vkDescriptorSetLayoutsAllocate; + //! Store for descriptor set group creation + std::vector> descriptorSetLayoutsPipeline; + //! Store for pipeline layout recreation std::vector vkDescriptorSetLayoutsPipeline; @@ -71,10 +74,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - std::vector> const& GetShaderModules (void) const noexcept; - vk::PipelineLayout GetVkPipelineLayout (void) const noexcept; - SHPushConstantInterface const& GetPushConstantInterface (void) const noexcept; - Handle GetShaderBlockInterface (uint32_t set, uint32_t binding, vk::ShaderStageFlagBits shaderStage) const noexcept; + std::vector> const& GetShaderModules (void) const noexcept; + vk::PipelineLayout GetVkPipelineLayout (void) const noexcept; + SHPushConstantInterface const& GetPushConstantInterface (void) const noexcept; + Handle GetShaderBlockInterface (uint32_t set, uint32_t binding, vk::ShaderStageFlagBits shaderStage) const noexcept; + std::vector> GetDescriptorSetLayoutsPipeline(void) const noexcept; + std::vector> GetDescriptorSetLayoutsAllocate(void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 3f5641c0..588e950e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -11,655 +11,7 @@ namespace SHADE { - /***************************************************************************/ - /*! - - \brief - Non-default ctor for the resource. Using the type of the resource, we - decide whether or not we create a resource or link with a swapchain - resource (image). - - \param logicalDevice - Logical device required to create an image resource if the type is NOT - SH_ATT_DESC_TYPE::COLOR_PRESENT. - - \param swapchain - Swapchain required to get swapchain image if the type IS - SH_ATT_DESC_TYPE::COLOR_PRESENT. - - \param type - Type of the image resource. - - \param format - Format of the image resource. - - \param w - Width of the image resource. - - \param h - Height of the image resource. - - \param levels - Number of mipmap levels of the image resource. - - \param createFlags - Create flags used when an image resource needs to be created. - - */ - /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept - : resourceType{ type } - , resourceFormat{ format } - , images{} - , imageViews{} - , width{ w } - , height{ h } - , mipLevels{ levels } - , resourceName{ name } - { - // If the resource type is an arbitrary image and not swapchain image - if (type != SH_ATT_DESC_TYPE::COLOR_PRESENT) - { - vk::ImageAspectFlags imageAspectFlags; - vk::ImageUsageFlags usage = {}; - - // Check the resource type and set image usage flags and image aspect flags accordingly - switch (resourceType) - { - case SH_ATT_DESC_TYPE::COLOR: - usage |= vk::ImageUsageFlagBits::eColorAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eColor; - break; - case SH_ATT_DESC_TYPE::DEPTH: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eDepth; - break; - case SH_ATT_DESC_TYPE::STENCIL: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eStencil; - break; - case SH_ATT_DESC_TYPE::DEPTH_STENCIL: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eStencil | vk::ImageAspectFlagBits::eDepth; - break; - } - - // The resource is not a swapchain image, just use the first slot of the vector - images.push_back(logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); - - // prepare image view details - SHImageViewDetails viewDetails - { - .viewType = vk::ImageViewType::e2D, - .format = images[0]->GetImageFormat(), - .imageAspectFlags = imageAspectFlags, - .baseMipLevel = 0, - .mipLevelCount = mipLevels, - .baseArrayLayer = 0, - .layerCount = 1, - }; - - // just 1 image view created - imageViews.push_back(images[0]->CreateImageView(logicalDevice, images[0], viewDetails)); - } - else // if swapchain image resource - { - // Prepare image view details - SHImageViewDetails viewDetails - { - .viewType = vk::ImageViewType::e2D, - .format = swapchain->GetSurfaceFormatKHR().format, - .imageAspectFlags = vk::ImageAspectFlagBits::eColor, - .baseMipLevel = 0, - .mipLevelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }; - - // We want an image handle for every swapchain image - images.resize(swapchain->GetNumImages()); - imageViews.resize(swapchain->GetNumImages()); - - for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) - { - images[i] = swapchain->GetSwapchainImage(i); - imageViews[i] = images[i]->CreateImageView(logicalDevice, images[i], viewDetails); - } - } - } - - /***************************************************************************/ - /*! - - \brief - Move ctor for resource. - - \param rhs - The other resource. - - */ - /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept - : resourceName{ std::move(rhs.resourceName) } - , resourceType{ std::move(rhs.resourceType) } - , images{ std::move(rhs.images) } - , imageViews{ std::move(rhs.imageViews) } - , resourceFormat{ std::move(rhs.resourceFormat) } - , width{ rhs.width } - , height{ rhs.height } - , mipLevels{ rhs.mipLevels } - { - - } - - /***************************************************************************/ - /*! - - \brief - Move assignment operator. - - \param rhs - The other resource. - - \return - - */ - /***************************************************************************/ - SHRenderGraphResource& SHRenderGraphResource::operator=(SHRenderGraphResource&& rhs) noexcept - { - if (this == &rhs) - return *this; - - resourceName = std::move(rhs.resourceName); - resourceType = std::move(rhs.resourceType); - images = std::move(rhs.images); - imageViews = std::move(rhs.imageViews); - resourceFormat = std::move(rhs.resourceFormat); - width = rhs.width; - height = rhs.height; - mipLevels = rhs.mipLevels; - - return *this; - } - - /***************************************************************************/ - /*! - - \brief - Destructor for resource. - - */ - /***************************************************************************/ - SHRenderGraphResource::~SHRenderGraphResource(void) noexcept - { - - } - - /***************************************************************************/ - /*! - - \brief - Subpass non-default constructor. Simply initializes variables. - - \param mapping - Mapping from a resource handle to an attachment reference referencing - the resource. - - \param resources - A mapping from string to render graph resource. - - */ - /***************************************************************************/ - SHSubpass::SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept - : resourceAttachmentMapping{ mapping } - , ptrToResources{ resources } - , parentNode{ parent } - , subpassIndex{ index } - , superBatch{} - , colorReferences{} - , depthReferences{} - , inputReferences{} - { - } - - /***************************************************************************/ - /*! - - \brief - Move constructor for subpass. - - \param rhs - The subpass the move from. - - */ - /***************************************************************************/ - SHSubpass::SHSubpass(SHSubpass&& rhs) noexcept - : subpassIndex{ std::move(rhs.subpassIndex) } - , parentNode{ std::move(rhs.parentNode) } - , superBatch{ std::move(rhs.superBatch) } - , colorReferences{ std::move(rhs.colorReferences) } - , depthReferences{ std::move(rhs.depthReferences) } - , inputReferences{ std::move(rhs.inputReferences) } - , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } - , ptrToResources{ rhs.ptrToResources } - { - - } - - /***************************************************************************/ - /*! - - \brief - Move assignment operator for subpass. - - \param rhs - subpass to move from. - - */ - /***************************************************************************/ - SHSubpass& SHSubpass::operator=(SHSubpass&& rhs) noexcept - { - if (this == &rhs) - return *this; - - subpassIndex = std::move(rhs.subpassIndex); - parentNode = std::move(rhs.parentNode); - superBatch = std::move(rhs.superBatch); - colorReferences = std::move(rhs.colorReferences); - depthReferences = std::move(rhs.depthReferences); - inputReferences = std::move(rhs.inputReferences); - resourceAttachmentMapping = rhs.resourceAttachmentMapping; - ptrToResources = rhs.ptrToResources; - - return *this; - } - - /***************************************************************************/ - /*! - - \brief - Adds a color output to a subpass. Takes in a string and finds the - attachment index to create the vk::SubpassReference. - - \param resourceToReference - Resource name to find resource to attach. - - */ - /***************************************************************************/ - void SHSubpass::AddColorOutput(std::string resourceToReference) noexcept - { - colorReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); - } - - /***************************************************************************/ - /*! - - \brief - Adds a depth output to a subpass. Takes in a string and finds the - attachment index to create the vk::SubpassReference. - - \param resourceToReference - Resource name to find resource to attach. - - \param attachmentDescriptionType - Depending on the type of the resource, initialize the image layout - appropriately. - - */ - /***************************************************************************/ - void SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType) noexcept - { - vk::ImageLayout imageLayout; - switch (attachmentDescriptionType) - { - case SH_ATT_DESC_TYPE::DEPTH: - imageLayout = vk::ImageLayout::eDepthAttachmentOptimal; - break; - case SH_ATT_DESC_TYPE::STENCIL: - imageLayout = vk::ImageLayout::eStencilAttachmentOptimal; - break; - case SH_ATT_DESC_TYPE::DEPTH_STENCIL: - imageLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; - break; - default: - //Invalid - return; - } - depthReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), imageLayout }); - } - - /***************************************************************************/ - /*! - - \brief - Adds a input output to a subpass. Takes in a string and finds the - attachment index to create the vk::SubpassReference. - - \param resourceToReference - Resource name to find resource to attach. - - */ - /***************************************************************************/ - void SHSubpass::AddInput(std::string resourceToReference) noexcept - { - inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); - } - - void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept - { - // Ensure correct transforms are provided - superBatch->UpdateBuffers(frameIndex); - - // Draw all the batches - superBatch->Draw(commandBuffer, frameIndex); - - // Draw all the exterior draw calls - for (auto& drawCall : exteriorDrawCalls) - { - drawCall(commandBuffer); - } - } - - void SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept - { - exteriorDrawCalls.push_back(newDrawCall); - } - - void SHSubpass::Init(ResourceManager& resourceManager) noexcept - { - superBatch = resourceManager.Create(GetHandle()); - - } - - /***************************************************************************/ - /*! - - \brief - Getter for parent renderpass. - - \return - Returns the parent renderpass the subpass belongs to. - - */ - /***************************************************************************/ - Handle const& SHSubpass::GetParentNode(void) const noexcept - { - return parentNode; - } - - SHADE::SHSubPassIndex SHSubpass::GetIndex() const noexcept - { - return subpassIndex; - } - - Handle SHSubpass::GetSuperBatch(void) const noexcept - { - return superBatch; - } - - /***************************************************************************/ - /*! - - \brief - Creates a renderpass for the node. Uses subpass and attachment - descriptions already configured beforehand in the render graph. - - */ - /***************************************************************************/ - void SHRenderGraphNode::CreateRenderpass(void) noexcept - { - renderpass = logicalDeviceHdl->CreateRenderpass(attachmentDescriptions, spDescs, spDeps); - } - - /***************************************************************************/ - /*! - - \brief - Creates a framebuffer from the images used in the renderpass. - - */ - /***************************************************************************/ - void SHRenderGraphNode::CreateFramebuffer(void) noexcept - { - for (uint32_t i = 0; i < framebuffers.size(); ++i) - { - std::vector> imageViews(attResources.size()); - uint32_t fbWidth = std::numeric_limits::max(); - uint32_t fbHeight = std::numeric_limits::max(); - - for (uint32_t j = 0; j < attResources.size(); ++j) - { - uint32_t imageViewIndex = (attResources[j]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) ? i : 0; - imageViews[j] = attResources[j]->imageViews[imageViewIndex]; - - // We want the minimum dimensions for the framebuffer because the image attachments referenced cannot have dimensions smaller than the framebuffer's - if (fbWidth > attResources[j]->width) - fbWidth = attResources[j]->width; - if (fbHeight > attResources[j]->height) - fbHeight = attResources[j]->height; - } - - - framebuffers[i] = logicalDeviceHdl->CreateFramebuffer(renderpass, imageViews, fbWidth, fbHeight); - } - } - - /***************************************************************************/ - /*! - - \brief - Render Graph node constructor. Note that we do not create the renderpass - yet. This is because layouts of attachment descriptions facilitate image - transitions and we cannot know guarantee layouts until we've seen all - renderpasses and their subpasses in the graph. - - \param swapchain - Swapchain required to query number of images as parameters for number - of framebuffers to create. - - \param attachmentDescriptionTypes - - - \return - - */ - /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept - : logicalDeviceHdl{ logicalDevice } - , renderpass{} - , framebuffers{} - , prereqNodes{ std::move(predecessors) } - , attachmentDescriptions{} - , resourceAttachmentMapping{} - , attResources{ std::move(attRes) } - , subpasses{} - , executed{ false } - , configured{ false } - , resourceManager{ rm } - , ptrToResources{ resources } - { - // pipeline library initialization - pipelineLibrary.Init(logicalDeviceHdl, globalData); - - attachmentDescriptions.resize(attResources.size()); - - bool containsSwapchainImage = false; - for (uint32_t i = 0; i < attResources.size(); ++i) - { - // As mentioned above we don't initialize much here because it's dependent on how other renderpasses are configured. - vk::AttachmentDescription& newDesc = attachmentDescriptions[i]; - newDesc.samples = vk::SampleCountFlagBits::e1; - - // We set this to clear first. If later we find out that some predecessor is writing to the same attachment, - // we set the pred's storeOp to eStore and "this" loadOp to eLoad. - newDesc.loadOp = vk::AttachmentLoadOp::eClear; - newDesc.storeOp = vk::AttachmentStoreOp::eStore; - - newDesc.stencilLoadOp = vk::AttachmentLoadOp::eClear; - newDesc.stencilStoreOp = vk::AttachmentStoreOp::eStore; - - newDesc.format = attResources[i]->resourceFormat; - - if (attResources[i]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) - containsSwapchainImage = true; - - resourceAttachmentMapping.try_emplace(attResources[i].GetId().Raw, i); - } - - if (!containsSwapchainImage) - framebuffers.resize(1); - else - framebuffers.resize(swapchain->GetNumImages()); - - // At this point, we could configure framebuffers if we had the renderpass object but we don't so their creation has to be - // deferred to when renderpasses are also created. - } - - SHRenderGraphNode::SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept - : resourceManager{ rhs.resourceManager } - , logicalDeviceHdl{ rhs.logicalDeviceHdl } - , renderpass{ rhs.renderpass } - , framebuffers{ std::move(rhs.framebuffers) } - , prereqNodes{ std::move(rhs.prereqNodes) } - , attachmentDescriptions{ std::move(rhs.attachmentDescriptions) } - , attResources{ std::move(rhs.attResources) } - , subpasses{ std::move(rhs.subpasses) } - , resourceAttachmentMapping{ std::move(rhs.resourceAttachmentMapping) } - , subpassIndexing{ std::move(rhs.subpassIndexing) } - , configured{ rhs.configured } - , executed{ rhs.executed } - , ptrToResources{ rhs.ptrToResources } - , pipelineLibrary{ std::move(rhs.pipelineLibrary) } - , batcher { std::move(rhs.batcher) } - - { - rhs.renderpass = {}; - } - - SHRenderGraphNode& SHRenderGraphNode::operator=(SHRenderGraphNode&& rhs) noexcept - { - if (&rhs == this) - return *this; - - resourceManager = rhs.resourceManager; - logicalDeviceHdl = rhs.logicalDeviceHdl; - renderpass = rhs.renderpass; - framebuffers = std::move(rhs.framebuffers); - prereqNodes = std::move(rhs.prereqNodes); - attachmentDescriptions = std::move(rhs.attachmentDescriptions); - attResources = std::move(rhs.attResources); - subpasses = std::move(rhs.subpasses); - resourceAttachmentMapping = std::move(rhs.resourceAttachmentMapping); - subpassIndexing = std::move(rhs.subpassIndexing); - ptrToResources = std::move(rhs.ptrToResources); - pipelineLibrary = std::move(rhs.pipelineLibrary); - batcher = std::move(rhs.batcher); - - rhs.renderpass = {}; - - return *this; - } - - /***************************************************************************/ - /*! - - \brief - Add subpasses to the renderpass and returns a reference to it. - - \param subpassName - Name of the subpass. - - \return - Handle to the new subpass. - - */ - /***************************************************************************/ - Handle SHRenderGraphNode::AddSubpass(std::string subpassName) noexcept - { - // if subpass already exists, don't add. - if (subpassIndexing.contains(subpassName)) - { - SHLOG_ERROR("Subpass already exists."); - return{}; - } - - // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); - subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); - Handle subpass = subpasses.back(); - subpass->Init(resourceManager); - - // Register the SuperBatch - batcher.RegisterSuperBatch(subpass->GetSuperBatch()); - - return subpass; - } - - void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept - { - frameIndex = (framebuffers.size() > 1) ? frameIndex : 0; - commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); - - for (uint32_t i = 0; i < subpasses.size(); ++i) - { - subpasses[i]->Execute(commandBuffer, frameIndex); - - // Go to next subpass if not last subpass - if (i != subpasses.size() - 1) - commandBuffer->NextSubpass(); - } - - commandBuffer->EndRenderpass(); - } - - Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept - { - // verify subpass exists - if (subpass->GetIndex() >= subpasses.size()) - { - SHLOG_ERROR("Subpass index passed in is not valid. RenderGraphNode does not have that many passes. "); - return {}; - } - - Handle pipeline = pipelineLibrary.GetDrawPipline(vsFsPair); - if (!pipeline) - { - pipeline = pipelineLibrary.CreateDrawPipeline - ( - vsFsPair, - renderpass, - subpass - ); - } - - return pipeline; - } - - void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex) - { - batcher.FinaliseBatches(logicalDeviceHdl, frameIndex); - } - - /***************************************************************************/ - /*! - - \brief - Get the renderpass from the node. - - \return - Handle to the renderpass. - - */ - /***************************************************************************/ - Handle SHRenderGraphNode::GetRenderpass(void) const noexcept - { - return renderpass; - } - - Handle SHRenderGraphNode::GetSubpass(std::string_view subpassName) const noexcept - { - return subpasses[subpassIndexing.at(subpassName.data())]; - } + /***************************************************************************/ /*! @@ -779,7 +131,7 @@ namespace SHADE attDesc.loadOp = vk::AttachmentLoadOp::eLoad; predAttDesc.storeOp = vk::AttachmentStoreOp::eStore; - // TODO: Stecil load and store + // TODO: Stencil load and store // When an image is done being used in a renderpass, the image layout will end up being the finalLayout // value of the attachment description. We want this to carry over to the next renderpass; specifically diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index a5ff66d1..02868cce 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -9,6 +9,10 @@ #include "../MiddleEnd/Batching/SHBatcher.h" #include "SHRenderGraphNode.h" #include "SHSubpass.h" +#include "SHRenderGraphResource.h" +#include "SHRenderGraphNode.h" +#include "SHSubpass.h" +#include "SHAttachmentDescriptionType.h" #include #include diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 498ac8e4..4f99ea10 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -1,6 +1,276 @@ +#include "SHpch.h" #include "SHRenderGraphNode.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Images/SHVkImageView.h" +#include "Graphics/Swapchain/SHVkSwapchain.h" +#include "SHRenderGraphResource.h" +#include "SHSubpass.h" namespace SHADE { - + + /***************************************************************************/ + /*! + + \brief + Creates a renderpass for the node. Uses subpass and attachment + descriptions already configured beforehand in the render graph. + + */ + /***************************************************************************/ + void SHRenderGraphNode::CreateRenderpass(void) noexcept + { + renderpass = logicalDeviceHdl->CreateRenderpass(attachmentDescriptions, spDescs, spDeps); + } + + /***************************************************************************/ + /*! + + \brief + Creates a framebuffer from the images used in the renderpass. + + */ + /***************************************************************************/ + void SHRenderGraphNode::CreateFramebuffer(void) noexcept + { + for (uint32_t i = 0; i < framebuffers.size(); ++i) + { + std::vector> imageViews(attResources.size()); + uint32_t fbWidth = std::numeric_limits::max(); + uint32_t fbHeight = std::numeric_limits::max(); + + for (uint32_t j = 0; j < attResources.size(); ++j) + { + uint32_t imageViewIndex = (attResources[j]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) ? i : 0; + imageViews[j] = attResources[j]->imageViews[imageViewIndex]; + + // We want the minimum dimensions for the framebuffer because the image attachments referenced cannot have dimensions smaller than the framebuffer's + if (fbWidth > attResources[j]->width) + fbWidth = attResources[j]->width; + if (fbHeight > attResources[j]->height) + fbHeight = attResources[j]->height; + } + + + framebuffers[i] = logicalDeviceHdl->CreateFramebuffer(renderpass, imageViews, fbWidth, fbHeight); + } + } + + /***************************************************************************/ + /*! + + \brief + Render Graph node constructor. Note that we do not create the renderpass + yet. This is because layouts of attachment descriptions facilitate image + transitions and we cannot know guarantee layouts until we've seen all + renderpasses and their subpasses in the graph. + + \param swapchain + Swapchain required to query number of images as parameters for number + of framebuffers to create. + + \param attachmentDescriptionTypes + + + \return + + */ + /***************************************************************************/ + SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept + : logicalDeviceHdl{ logicalDevice } + , renderpass{} + , framebuffers{} + , prereqNodes{ std::move(predecessors) } + , attachmentDescriptions{} + , resourceAttachmentMapping{} + , attResources{ std::move(attRes) } + , subpasses{} + , executed{ false } + , configured{ false } + , resourceManager{ rm } + , ptrToResources{ resources } + { + // pipeline library initialization + pipelineLibrary.Init(logicalDeviceHdl, globalData); + + attachmentDescriptions.resize(attResources.size()); + + bool containsSwapchainImage = false; + for (uint32_t i = 0; i < attResources.size(); ++i) + { + // As mentioned above we don't initialize much here because it's dependent on how other renderpasses are configured. + vk::AttachmentDescription& newDesc = attachmentDescriptions[i]; + newDesc.samples = vk::SampleCountFlagBits::e1; + + // We set this to clear first. If later we find out that some predecessor is writing to the same attachment, + // we set the pred's storeOp to eStore and "this" loadOp to eLoad. + newDesc.loadOp = vk::AttachmentLoadOp::eClear; + newDesc.storeOp = vk::AttachmentStoreOp::eStore; + + newDesc.stencilLoadOp = vk::AttachmentLoadOp::eClear; + newDesc.stencilStoreOp = vk::AttachmentStoreOp::eStore; + + newDesc.format = attResources[i]->resourceFormat; + + if (attResources[i]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) + containsSwapchainImage = true; + + resourceAttachmentMapping.try_emplace(attResources[i].GetId().Raw, i); + } + + if (!containsSwapchainImage) + framebuffers.resize(1); + else + framebuffers.resize(swapchain->GetNumImages()); + + // At this point, we could configure framebuffers if we had the renderpass object but we don't so their creation has to be + // deferred to when renderpasses are also created. + } + + SHRenderGraphNode::SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept + : resourceManager{ rhs.resourceManager } + , logicalDeviceHdl{ rhs.logicalDeviceHdl } + , renderpass{ rhs.renderpass } + , framebuffers{ std::move(rhs.framebuffers) } + , prereqNodes{ std::move(rhs.prereqNodes) } + , attachmentDescriptions{ std::move(rhs.attachmentDescriptions) } + , attResources{ std::move(rhs.attResources) } + , subpasses{ std::move(rhs.subpasses) } + , resourceAttachmentMapping{ std::move(rhs.resourceAttachmentMapping) } + , subpassIndexing{ std::move(rhs.subpassIndexing) } + , configured{ rhs.configured } + , executed{ rhs.executed } + , ptrToResources{ rhs.ptrToResources } + , pipelineLibrary{ std::move(rhs.pipelineLibrary) } + , batcher{ std::move(rhs.batcher) } + + { + rhs.renderpass = {}; + } + + SHRenderGraphNode& SHRenderGraphNode::operator=(SHRenderGraphNode&& rhs) noexcept + { + if (&rhs == this) + return *this; + + resourceManager = rhs.resourceManager; + logicalDeviceHdl = rhs.logicalDeviceHdl; + renderpass = rhs.renderpass; + framebuffers = std::move(rhs.framebuffers); + prereqNodes = std::move(rhs.prereqNodes); + attachmentDescriptions = std::move(rhs.attachmentDescriptions); + attResources = std::move(rhs.attResources); + subpasses = std::move(rhs.subpasses); + resourceAttachmentMapping = std::move(rhs.resourceAttachmentMapping); + subpassIndexing = std::move(rhs.subpassIndexing); + ptrToResources = std::move(rhs.ptrToResources); + pipelineLibrary = std::move(rhs.pipelineLibrary); + batcher = std::move(rhs.batcher); + + rhs.renderpass = {}; + + return *this; + } + + /***************************************************************************/ + /*! + + \brief + Add subpasses to the renderpass and returns a reference to it. + + \param subpassName + Name of the subpass. + + \return + Handle to the new subpass. + + */ + /***************************************************************************/ + Handle SHRenderGraphNode::AddSubpass(std::string subpassName) noexcept + { + // if subpass already exists, don't add. + if (subpassIndexing.contains(subpassName)) + { + SHLOG_ERROR("Subpass already exists."); + return{}; + } + + // Add subpass to container and create mapping for it + subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); + Handle subpass = subpasses.back(); + subpass->Init(resourceManager); + + // Register the SuperBatch + batcher.RegisterSuperBatch(subpass->GetSuperBatch()); + + return subpass; + } + + void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept + { + frameIndex = (framebuffers.size() > 1) ? frameIndex : 0; + commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); + + for (uint32_t i = 0; i < subpasses.size(); ++i) + { + subpasses[i]->Execute(commandBuffer, frameIndex); + + // Go to next subpass if not last subpass + if (i != subpasses.size() - 1) + commandBuffer->NextSubpass(); + } + + commandBuffer->EndRenderpass(); + } + + Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept + { + // verify subpass exists + if (subpass->GetIndex() >= subpasses.size()) + { + SHLOG_ERROR("Subpass index passed in is not valid. RenderGraphNode does not have that many passes. "); + return {}; + } + + Handle pipeline = pipelineLibrary.GetDrawPipline(vsFsPair); + if (!pipeline) + { + pipeline = pipelineLibrary.CreateDrawPipeline + ( + vsFsPair, + renderpass, + subpass + ); + } + + return pipeline; + } + + void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex) + { + batcher.FinaliseBatches(logicalDeviceHdl, frameIndex); + } + + /***************************************************************************/ + /*! + + \brief + Get the renderpass from the node. + + \return + Handle to the renderpass. + + */ + /***************************************************************************/ + Handle SHRenderGraphNode::GetRenderpass(void) const noexcept + { + return renderpass; + } + + Handle SHRenderGraphNode::GetSubpass(std::string_view subpassName) const noexcept + { + return subpasses[subpassIndexing.at(subpassName.data())]; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 7cd31787..cdaddb8e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -1,8 +1,22 @@ #pragma once +#include +#include +#include +#include +#include "SHAttachmentDescriptionType.h" +#include "Graphics/SHVulkanIncludes.h" +#include "SH_API.h" +#include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" +#include "Graphics/MiddleEnd/Batching/SHBatcher.h" + namespace SHADE { - + class ResourceManager; + class SHVkFramebuffer; + class SHRenderGraphResource; + class SHVkLogicalDevice; + class SHVkRenderpass; class SH_API SHRenderGraphNode : public ISelfHandle { diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 6b0138d9..eb873b16 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -1,6 +1,192 @@ +#include "SHpch.h" #include "SHRenderGraphResource.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Swapchain/SHVkSwapchain.h" namespace SHADE { - + /***************************************************************************/ + /*! + + \brief + Non-default ctor for the resource. Using the type of the resource, we + decide whether or not we create a resource or link with a swapchain + resource (image). + + \param logicalDevice + Logical device required to create an image resource if the type is NOT + SH_ATT_DESC_TYPE::COLOR_PRESENT. + + \param swapchain + Swapchain required to get swapchain image if the type IS + SH_ATT_DESC_TYPE::COLOR_PRESENT. + + \param type + Type of the image resource. + + \param format + Format of the image resource. + + \param w + Width of the image resource. + + \param h + Height of the image resource. + + \param levels + Number of mipmap levels of the image resource. + + \param createFlags + Create flags used when an image resource needs to be created. + + */ + /***************************************************************************/ + SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept + : resourceType{ type } + , resourceFormat{ format } + , images{} + , imageViews{} + , width{ w } + , height{ h } + , mipLevels{ levels } + , resourceName{ name } + { + // If the resource type is an arbitrary image and not swapchain image + if (type != SH_ATT_DESC_TYPE::COLOR_PRESENT) + { + vk::ImageAspectFlags imageAspectFlags; + vk::ImageUsageFlags usage = {}; + + // Check the resource type and set image usage flags and image aspect flags accordingly + switch (resourceType) + { + case SH_ATT_DESC_TYPE::COLOR: + usage |= vk::ImageUsageFlagBits::eColorAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eColor; + break; + case SH_ATT_DESC_TYPE::DEPTH: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eDepth; + break; + case SH_ATT_DESC_TYPE::STENCIL: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eStencil; + break; + case SH_ATT_DESC_TYPE::DEPTH_STENCIL: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eStencil | vk::ImageAspectFlagBits::eDepth; + break; + } + + // The resource is not a swapchain image, just use the first slot of the vector + images.push_back(logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); + + // prepare image view details + SHImageViewDetails viewDetails + { + .viewType = vk::ImageViewType::e2D, + .format = images[0]->GetImageFormat(), + .imageAspectFlags = imageAspectFlags, + .baseMipLevel = 0, + .mipLevelCount = mipLevels, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + // just 1 image view created + imageViews.push_back(images[0]->CreateImageView(logicalDevice, images[0], viewDetails)); + } + else // if swapchain image resource + { + // Prepare image view details + SHImageViewDetails viewDetails + { + .viewType = vk::ImageViewType::e2D, + .format = swapchain->GetSurfaceFormatKHR().format, + .imageAspectFlags = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .mipLevelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + // We want an image handle for every swapchain image + images.resize(swapchain->GetNumImages()); + imageViews.resize(swapchain->GetNumImages()); + + for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) + { + images[i] = swapchain->GetSwapchainImage(i); + imageViews[i] = images[i]->CreateImageView(logicalDevice, images[i], viewDetails); + } + } + } + + /***************************************************************************/ + /*! + + \brief + Move ctor for resource. + + \param rhs + The other resource. + + */ + /***************************************************************************/ + SHRenderGraphResource::SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept + : resourceName{ std::move(rhs.resourceName) } + , resourceType{ std::move(rhs.resourceType) } + , images{ std::move(rhs.images) } + , imageViews{ std::move(rhs.imageViews) } + , resourceFormat{ std::move(rhs.resourceFormat) } + , width{ rhs.width } + , height{ rhs.height } + , mipLevels{ rhs.mipLevels } + { + + } + + /***************************************************************************/ + /*! + + \brief + Move assignment operator. + + \param rhs + The other resource. + + \return + + */ + /***************************************************************************/ + SHRenderGraphResource& SHRenderGraphResource::operator=(SHRenderGraphResource&& rhs) noexcept + { + if (this == &rhs) + return *this; + + resourceName = std::move(rhs.resourceName); + resourceType = std::move(rhs.resourceType); + images = std::move(rhs.images); + imageViews = std::move(rhs.imageViews); + resourceFormat = std::move(rhs.resourceFormat); + width = rhs.width; + height = rhs.height; + mipLevels = rhs.mipLevels; + + return *this; + } + + /***************************************************************************/ + /*! + + \brief + Destructor for resource. + + */ + /***************************************************************************/ + SHRenderGraphResource::~SHRenderGraphResource(void) noexcept + { + + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index 78245763..fcb16601 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -1,7 +1,19 @@ #pragma once +#include +#include "SHAttachmentDescriptionType.h" +#include +#include "Resource/Handle.h" +#include "Graphics/SHVulkanIncludes.h" +#include "SH_API.h" + namespace SHADE { + class SHVkImage; + class SHVkImageView; + class SHVkLogicalDevice; + class SHVkSwapchain; + class SH_API SHRenderGraphResource { private: diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 329af7c3..2d79b764 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -1,6 +1,210 @@ +#include "SHpch.h" #include "SHSubpass.h" +#include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" namespace SHADE { - + + /***************************************************************************/ + /*! + + \brief + Subpass non-default constructor. Simply initializes variables. + + \param mapping + Mapping from a resource handle to an attachment reference referencing + the resource. + + \param resources + A mapping from string to render graph resource. + + */ + /***************************************************************************/ + SHSubpass::SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + : resourceAttachmentMapping{ mapping } + , ptrToResources{ resources } + , parentNode{ parent } + , subpassIndex{ index } + , superBatch{} + , colorReferences{} + , depthReferences{} + , inputReferences{} + { + } + + /***************************************************************************/ + /*! + + \brief + Move constructor for subpass. + + \param rhs + The subpass the move from. + + */ + /***************************************************************************/ + SHSubpass::SHSubpass(SHSubpass&& rhs) noexcept + : subpassIndex{ std::move(rhs.subpassIndex) } + , parentNode{ std::move(rhs.parentNode) } + , superBatch{ std::move(rhs.superBatch) } + , colorReferences{ std::move(rhs.colorReferences) } + , depthReferences{ std::move(rhs.depthReferences) } + , inputReferences{ std::move(rhs.inputReferences) } + , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } + , ptrToResources{ rhs.ptrToResources } + { + + } + + /***************************************************************************/ + /*! + + \brief + Move assignment operator for subpass. + + \param rhs + subpass to move from. + + */ + /***************************************************************************/ + SHSubpass& SHSubpass::operator=(SHSubpass&& rhs) noexcept + { + if (this == &rhs) + return *this; + + subpassIndex = std::move(rhs.subpassIndex); + parentNode = std::move(rhs.parentNode); + superBatch = std::move(rhs.superBatch); + colorReferences = std::move(rhs.colorReferences); + depthReferences = std::move(rhs.depthReferences); + inputReferences = std::move(rhs.inputReferences); + resourceAttachmentMapping = rhs.resourceAttachmentMapping; + ptrToResources = rhs.ptrToResources; + + return *this; + } + + /***************************************************************************/ + /*! + + \brief + Adds a color output to a subpass. Takes in a string and finds the + attachment index to create the vk::SubpassReference. + + \param resourceToReference + Resource name to find resource to attach. + + */ + /***************************************************************************/ + void SHSubpass::AddColorOutput(std::string resourceToReference) noexcept + { + colorReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); + } + + /***************************************************************************/ + /*! + + \brief + Adds a depth output to a subpass. Takes in a string and finds the + attachment index to create the vk::SubpassReference. + + \param resourceToReference + Resource name to find resource to attach. + + \param attachmentDescriptionType + Depending on the type of the resource, initialize the image layout + appropriately. + + */ + /***************************************************************************/ + void SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType) noexcept + { + vk::ImageLayout imageLayout; + switch (attachmentDescriptionType) + { + case SH_ATT_DESC_TYPE::DEPTH: + imageLayout = vk::ImageLayout::eDepthAttachmentOptimal; + break; + case SH_ATT_DESC_TYPE::STENCIL: + imageLayout = vk::ImageLayout::eStencilAttachmentOptimal; + break; + case SH_ATT_DESC_TYPE::DEPTH_STENCIL: + imageLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; + break; + default: + //Invalid + return; + } + depthReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), imageLayout }); + } + + /***************************************************************************/ + /*! + + \brief + Adds a input output to a subpass. Takes in a string and finds the + attachment index to create the vk::SubpassReference. + + \param resourceToReference + Resource name to find resource to attach. + + */ + /***************************************************************************/ + void SHSubpass::AddInput(std::string resourceToReference) noexcept + { + inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); + } + + void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept + { + // Ensure correct transforms are provided + superBatch->UpdateBuffers(frameIndex); + + // Draw all the batches + superBatch->Draw(commandBuffer, frameIndex); + + // Draw all the exterior draw calls + for (auto& drawCall : exteriorDrawCalls) + { + drawCall(commandBuffer); + } + } + + void SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept + { + exteriorDrawCalls.push_back(newDrawCall); + } + + void SHSubpass::Init(ResourceManager& resourceManager) noexcept + { + superBatch = resourceManager.Create(GetHandle()); + + } + + /***************************************************************************/ + /*! + + \brief + Getter for parent renderpass. + + \return + Returns the parent renderpass the subpass belongs to. + + */ + /***************************************************************************/ + Handle const& SHSubpass::GetParentNode(void) const noexcept + { + return parentNode; + } + + SHADE::SHSubPassIndex SHSubpass::GetIndex() const noexcept + { + return subpassIndex; + } + + Handle SHSubpass::GetSuperBatch(void) const noexcept + { + return superBatch; + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index a1aa1500..da36fe46 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -1,6 +1,93 @@ #pragma once +#include "SHAttachmentDescriptionType.h" +#include +#include "SH_API.h" +#include "Resource/Handle.h" +#include "Graphics/SHVulkanIncludes.h" + + namespace SHADE { + class SHRenderGraphNode; + class SHSuperBatch; + class SHRenderGraphResource; + class SHVkCommandBuffer; + class SHVkDescriptorSetLayout; + class SH_API SHSubpass : public ISelfHandle + { + private: + /*---------------------------------------------------------------------*/ + /* PRIVATE MEMBER VARIABLES */ + /*---------------------------------------------------------------------*/ + //! The index of the subpass in the render graph + uint32_t subpassIndex; + + //! The parent renderpass that this subpass belongs to + Handle parentNode; + + //! + Handle superBatch; + + //! Descriptor set layout to hold attachments + Handle descriptorSetLayout; + + //! Color attachments + std::vector colorReferences; + + //! Depth attachments + std::vector depthReferences; + + //! Input attachments + std::vector inputReferences; + + //! For getting attachment reference indices using handles + std::unordered_map const* resourceAttachmentMapping; + + //! Pointer to resources in the render graph (for getting handle IDs) + std::unordered_map> const* ptrToResources; + + //! Sometimes there exists entities that we want to render onto a render target + //! but don't want it to come from the batching system. An example would be ImGUI. + //! For these entities we want to link a function from the outside and draw them + //! after we draw everything from the batch. Because of this, these draw calls + //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING + //! COMPLEX. + std::vector&)>> exteriorDrawCalls; + + + public: + /*-----------------------------------------------------------------------*/ + /* CTORS AND DTORS */ + /*-----------------------------------------------------------------------*/ + SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(SHSubpass&& rhs) noexcept; + SHSubpass& operator=(SHSubpass&& rhs) noexcept; + + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + // Preparation functions + void AddColorOutput(std::string resourceToReference) noexcept; + void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; + void AddInput(std::string resourceToReference) noexcept; + + // Runtime functions + void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; + void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; + + void Init(ResourceManager& resourceManager) noexcept; + + /*-----------------------------------------------------------------------*/ + /* GETTERS AND SETTERS */ + /*-----------------------------------------------------------------------*/ + Handle const& GetParentNode(void) const noexcept; + SHSubPassIndex GetIndex() const noexcept; + Handle GetSuperBatch(void) const noexcept; + + + friend class SHRenderGraphNode; + friend class SHRenderGraph; + }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp new file mode 100644 index 00000000..ccd0e6c3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp @@ -0,0 +1,23 @@ +#include "SHpch.h" +#include "SHSubpassCompute.h" +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" + +namespace SHADE +{ + SHSubpassCompute::SHSubpassCompute(Handle inPipeline, Handle descPool) noexcept + : pipeline {inPipeline} + { + // Get the descriptor set layouts required to allocate. we will bind a different pipeline layout, one that includes the layout for global. + auto const& layouts = pipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); + + // Variable counts for the descriptor sets (all should be 1). + std::vector variableCounts{static_cast(layouts.size())}; + std::fill (variableCounts.begin(), variableCounts.end(), 0); + + // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) + descPool->Allocate(layouts, variableCounts); + } + +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h new file mode 100644 index 00000000..3ebc5676 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace SHADE +{ + class SHVkPipeline; + class SHVkDescriptorSetGroup; + class SHVkDescriptorPool; + + class SHSubpassCompute + { + private: + //! To run the dispatch command + Handle pipeline; + + //! Descriptor set group + Handle descSetGroup; + + public: + SHSubpassCompute (Handle inPipeline, Handle descPool) noexcept; + + }; +} + diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index afed0736..b0ae7445 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -10,10 +10,6 @@ namespace SHADE { class SHVkLogicalDevice; class SHVkFramebuffer; - /*-----------------------------------------------------------------------*/ - /* TYPE DEFINTIIONS */ - /*-----------------------------------------------------------------------*/ - using SHSubPassIndex = uint32_t; class SHVkRenderpass { diff --git a/SHADE_Engine/src/Graphics/SHVulkanDefines.h b/SHADE_Engine/src/Graphics/SHVulkanDefines.h index 2f625f7e..1cbcae0f 100644 --- a/SHADE_Engine/src/Graphics/SHVulkanDefines.h +++ b/SHADE_Engine/src/Graphics/SHVulkanDefines.h @@ -5,9 +5,13 @@ namespace SHADE { + /*-----------------------------------------------------------------------*/ + /* TYPE DEFINTIIONS */ + /*-----------------------------------------------------------------------*/ using SHQueueFamilyIndex = uint32_t; using BindingAndSetHash = uint64_t; using SetIndex = uint32_t; + using SHSubPassIndex = uint32_t; } From d0d796781b08e7df88399d258f870edfe0dc0611 Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 26 Sep 2022 15:50:07 +0800 Subject: [PATCH 214/793] remove audiosourcecomponent --- SHADE_Application/premake5.lua | 3 +- .../src/Application/SBApplication.cpp | 3 +- .../AudioSystem/SHAudioListenerComponent.cpp | 10 +- .../AudioSystem/SHAudioListenerComponent.h | 11 +-- .../AudioSystem/SHAudioSourceComponent.cpp | 98 ++++++------------- .../src/AudioSystem/SHAudioSystem.cpp | 5 +- 6 files changed, 45 insertions(+), 85 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 7e3675aa..c79d436e 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -34,7 +34,8 @@ project "SHADE_Application" "%{IncludeDir.VULKAN}/include", "%{IncludeDir.VMA}/include", "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", - "%{IncludeDir.fmod}/include" + "%{IncludeDir.fmod}/include", + "%{IncludeDir.RTTR}\\include" } externalwarnings "Off" diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 6030963e..a7aa1cb7 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -25,7 +25,6 @@ #include "Math/Transform/SHTransformSystem.h" #include "Input/SHInputManagerSystem.h" #include "AudioSystem/SHAudioSystem.h" -#include "AudioSystem/SHAudioSourceComponent.h" #include "AudioSystem/SHAudioListenerComponent.h" #include "Scenes/SBTestScene.h" @@ -81,7 +80,7 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHComponentManager::CreateComponentSparseSet(); + //SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); // Set up graphics system and windows diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp index 342d4702..988b2781 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.cpp @@ -10,7 +10,7 @@ #include "SHpch.h" #include "SHAudioListenerComponent.h" -//#include "ECS_Base/System/SHSystemManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" namespace SHADE { @@ -34,22 +34,22 @@ namespace SHADE return up; } - void SHAudioListenerComponent::SetPos(SHVec3 p) + void SHAudioListenerComponent::SetPos(const SHVec3 p) { pos = p; } - void SHAudioListenerComponent::SetVel(SHVec3 v) + void SHAudioListenerComponent::SetVel(const SHVec3 v) { vel = v; } - void SHAudioListenerComponent::SetForward(SHVec3 f) + void SHAudioListenerComponent::SetForward(const SHVec3 f) { forward = f; } - void SHAudioListenerComponent::SetUp(SHVec3 u) + void SHAudioListenerComponent::SetUp(const SHVec3 u) { up = u; } diff --git a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h index d0e39bdc..e0fa8104 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioListenerComponent.h @@ -24,16 +24,15 @@ namespace SHADE ~SHAudioListenerComponent() = default; const SHVec3 GetPos() const; + void SetPos(const SHVec3 p); + const SHVec3 GetVel() const; const SHVec3 GetForward() const; const SHVec3 GetUp() const; - void SetPos(SHVec3 p); - void SetVel(SHVec3 v); - void SetForward(SHVec3 f); - void SetUp(SHVec3 u); - - + void SetVel(const SHVec3 v); + void SetForward(const SHVec3 f); + void SetUp(const SHVec3 u); private: SHVec3 pos{}, vel{}, forward{}, up{ 0.f,1.f,0.f }; diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp index 891ea1e1..2d623ede 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSourceComponent.cpp @@ -15,75 +15,39 @@ namespace SHADE { - /** - * @brief play the sound - * - * @param index where the sound is in the index - */ - void SHAudioSourceComponent::PlaySoundSFX(EntityID id, bool loop, bool spatial, float min , float max ) - { - SHSystemManager::GetSystem()->PlaySFX(id, GetEID(),loop,spatial, min, max); - } + /** + * @brief play the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::PlaySoundSFX(EntityID id, bool loop, bool spatial, float min , float max ) + { + SHSystemManager::GetSystem()->PlaySFX(id, GetEID(),loop,spatial, min, max); + } - //void SHAudioSourceComponent::PlayOneShot(const char* path, bool isSFX, bool spatial) - //{ - // auto AudioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); - // AudioSystem->PlayEventOnce(path, isSFX, spatial ? GetEID() : MAX_EID, spatial); - //} + void SHAudioSourceComponent::PlaySoundBGM(EntityID id, bool loop, bool spatial, float min, float max) + { + SHSystemManager::GetSystem()->PlayBGM(id, GetEID(), loop, spatial, min, max); + } - //void SHAudioSourceComponent::PlayEvent(const char* path, bool isSFX, bool spatial) - //{ - // auto AudioSystem = dynamic_cast(SHSystemManager::GetSystem("Audio")); + /** + * @brief Stop the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::StopSound(EntityID id) + { + SHSystemManager::GetSystem()->StopSound(id); + } - // auto guid = AudioSystem->GetEventGUID(path); - // if (guid.has_value()) - // { - // if (FMOD::Studio::EventInstance* instance = AudioSystem->CreateEventInstance(guid.value())) - // { - // eventInstances.push_back(instance); - // AudioSystem->PlayEventInstance(instance, isSFX, GetEID(), spatial); - // } - // } - //} - - void SHAudioSourceComponent::PlaySoundBGM(EntityID id, bool loop, bool spatial, float min, float max) - { - SHSystemManager::GetSystem()->PlayBGM(id, GetEID(), loop, spatial, min, max); - } - - /** - * @brief Stop the sound - * - * @param index where the sound is in the index - */ - void SHAudioSourceComponent::StopSound(EntityID id) - { - SHSystemManager::GetSystem()->StopSound(id); - } - - /** - * @brief Mute the sound - * - * @param index where the sound is in the index - */ - void SHAudioSourceComponent::SetMute(EntityID id, bool mute) - { - SHSystemManager::GetSystem()->SetMute(id, mute); - } - - //void SHAudioSourceComponent::PlayEventInstance(size_t index, bool isSFX, bool spatial) - //{ - // if (index < eventInstances.size()) - // { - // eventInstances[index]->start(); - // dynamic_cast(SHSystemManager::GetSystem("Audio"))->PlayEventInstance(eventInstances[index], isSFX, GetEID(), spatial); - // } - //} - - //void SHAudioSourceComponent::StopEventInstance(size_t index) - //{ - // if(index < eventInstances.size()) - // eventInstances[index]->stop(FMOD_STUDIO_STOP_ALLOWFADEOUT); - //} + /** + * @brief Mute the sound + * + * @param index where the sound is in the index + */ + void SHAudioSourceComponent::SetMute(EntityID id, bool mute) + { + SHSystemManager::GetSystem()->SetMute(id, mute); + } } diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index c0ad46cd..16b047bd 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -1,5 +1,4 @@ #include "SHpch.h" -//#include "ECS_Base/System/SHSystemManager.h" #include "SHAudioSystem.h" #include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" @@ -10,8 +9,6 @@ #include "AudioSystem/SHAudioListenerComponent.h" #include "AudioSystem/SHAudioSourceComponent.h" -//#include "ECS_Base/System/SHComponentManager.h" -//#include "Resource Manager/SHResourceManager.h" #include "Math/Transform/SHTransformComponent.h" #pragma warning(push) #pragma warning(disable:26812) //disable warning about preference of enum class over enum as ImGuizmo uses enums @@ -29,7 +26,7 @@ namespace SHADE , masterGroup(nullptr) , audioChannels() , result(FMOD_RESULT_FORCEINT) - , bgmVolume(0.5F) + , bgmVolume(1.F) , sfxVolume(1.F) , masterVolume(1.0F) , version(0) From 5a92b77a3a43d94728b4c796134e633c57f8e2ba Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 26 Sep 2022 15:52:21 +0800 Subject: [PATCH 215/793] added missing , --- SHADE_Application/premake5.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index a51eb8e6..a319aeec 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -34,7 +34,7 @@ project "SHADE_Application" "%{IncludeDir.VULKAN}/include", "%{IncludeDir.VMA}/include", "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", - "%{IncludeDir.tinyddsloader}" + "%{IncludeDir.tinyddsloader}", "%{IncludeDir.fmod}/include", "%{IncludeDir.RTTR}\\include" } From 2c16eb439390b4ccf9e3414cfe8d04c785602267 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 26 Sep 2022 15:53:54 +0800 Subject: [PATCH 216/793] Reflect transform component --- SHADE_Application/premake5.lua | 9 +++--- .../Math/Transform/SHTransformComponent.cpp | 13 +++++++- .../src/Math/Transform/SHTransformComponent.h | 3 ++ .../src/Math/Transform/SHTransformSystem.cpp | 30 ++++++++----------- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 6d9a0e64..fea6716a 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -30,10 +30,11 @@ project "SHADE_Application" externalincludedirs { - "%{IncludeDir.spdlog}/include", - "%{IncludeDir.VULKAN}/include", - "%{IncludeDir.VMA}/include", - "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect" + "%{IncludeDir.spdlog}/include", + "%{IncludeDir.VULKAN}/include", + "%{IncludeDir.VMA}/include", + "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect", + "%{IncludeDir.RTTR}/include" } externalwarnings "Off" diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index cdc5105f..b14e97d6 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -181,4 +181,15 @@ namespace SHADE updateQueue.push({ UpdateCommandType::WORLD_SCALE, newWorldScale }); } -} // namespace SHADE \ No newline at end of file +} // namespace SHADE + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + + registration::class_("Transform Component") + .property("Translate", &SHTransformComponent::GetLocalPosition, &SHTransformComponent::SetLocalPosition) + .property("Rotate", &SHTransformComponent::GetLocalRotation, select_overload(&SHTransformComponent::SetLocalRotation)) + .property("Scale", &SHTransformComponent::GetLocalScale, &SHTransformComponent::SetLocalScale); +} \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index 7f7dd473..9f20de85 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -12,6 +12,7 @@ #include +#include // Project Headers #include "SH_API.h" #include "ECS_Base/Components/SHComponent.h" @@ -116,6 +117,8 @@ namespace SHADE SHTransform world; UpdateQueue updateQueue; + + RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 8f05f96f..f698bd41 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -66,27 +66,23 @@ namespace SHADE for (const auto* child : node->GetChildren()) { - - - - const bool HAS_TRANSFORM = SHComponentManager::HasComponent(child->GetEntityID()); - if (!HAS_TRANSFORM) - continue; - - auto* childTransform = SHComponentManager::GetComponent(child->GetEntityID()); - - // Only update if node in hierarchy and component are both active - const bool IS_NODE_ACTIVE = child->IsActive(); - if (IS_NODE_ACTIVE && childTransform->isActive) + auto* childTransform = SHComponentManager::GetComponent_s(child->GetEntityID()); + if (childTransform) { - if (childTransform->dirty || HAS_PARENT_CHANGED) - UpdateTransform(*childTransform, NODE_TRANSFORM); + // Only update if node in hierarchy and component are both active + const bool IS_NODE_ACTIVE = child->IsActive(); + if (IS_NODE_ACTIVE && childTransform->isActive) + { + if (childTransform->dirty || HAS_PARENT_CHANGED) + UpdateTransform(*childTransform, NODE_TRANSFORM); + } } UpdateEntity(child); // Clear dirty flag after all children are updated - childTransform->dirty = false; + if (childTransform) + childTransform->dirty = false; } } @@ -144,8 +140,8 @@ namespace SHADE tf.world.ComputeTRS(); // Transpose TRS to column major - tf.local.trs.Transpose(); - tf.world.trs.Transpose(); + //tf.local.trs.Transpose(); + //tf.world.trs.Transpose(); } } // namespace SHADE \ No newline at end of file From 5e7ffd60281bb3e0186a679f606e3cb333cf852d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 26 Sep 2022 16:41:57 +0800 Subject: [PATCH 217/793] Added SHVkSampler and SHVKSamplerCache --- .../Graphics/Devices/SHVkLogicalDevice.cpp | 30 ++++-- .../src/Graphics/Devices/SHVkLogicalDevice.h | 5 +- .../src/Graphics/Images/SHVkSampler.cpp | 55 ++++++++++- .../src/Graphics/Images/SHVkSampler.h | 76 +++++++++++++--- .../MiddleEnd/Textures/SHVkSamplerCache.cpp | 81 +++++++++++++++++ .../MiddleEnd/Textures/SHVkSamplerCache.h | 91 +++++++++++++++++++ 6 files changed, 315 insertions(+), 23 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 5ed17511..e7b198d6 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -16,6 +16,7 @@ #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "Graphics/Images/SHVkImageView.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Images/SHVkSampler.h" namespace SHADE { @@ -85,6 +86,17 @@ namespace SHADE } + uint32_t SHVkLogicalDevice::ComputeAlignedBufferSize(uint32_t originalSize, size_t alignmentSize) const noexcept + { + uint32_t alignedSize = originalSize; + //uint32_t minBuffer + if (alignmentSize > 0) + { + alignedSize = (alignedSize + alignmentSize - 1) & ~(alignmentSize - 1); + } + return alignedSize; + } + /***************************************************************************/ /*! @@ -288,13 +300,12 @@ namespace SHADE uint32_t SHVkLogicalDevice::PadUBOSize(uint32_t originalSize) const noexcept { - uint32_t alignedSize = originalSize; - //uint32_t minBuffer - if (uboBufferMemoryAlignment > 0) - { - alignedSize = (alignedSize + uboBufferMemoryAlignment - 1) & ~(uboBufferMemoryAlignment - 1); - } - return alignedSize; + return ComputeAlignedBufferSize(originalSize, uboBufferMemoryAlignment); + } + + uint32_t SHVkLogicalDevice::PadSSBOSize(uint32_t originalSize) const noexcept + { + return ComputeAlignedBufferSize(originalSize, ssboBufferMemoryAlignment); } /***************************************************************************/ @@ -499,6 +510,11 @@ namespace SHADE } + Handle SHVkLogicalDevice::CreateSampler(const SHVkSamplerParams& params) noexcept + { + return SHVkInstance::GetResourceManager().Create (GetHandle(), params); + } + Handle SHVkLogicalDevice::CreateRenderpass(std::span const vkDescriptions, std::vector const& subpasses) noexcept { return SHVkInstance::GetResourceManager().Create (GetHandle(), vkDescriptions, subpasses); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 8a197ef8..dbc63786 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -102,6 +102,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ void InitializeVMA (void) noexcept; void InitializeQueues (std::initializer_list queueCreateParams) noexcept; + uint32_t ComputeAlignedBufferSize(uint32_t originalSize, size_t typeSize) const noexcept; public: /*-----------------------------------------------------------------------*/ @@ -121,7 +122,8 @@ namespace SHADE // Miscellaneous functions void WaitIdle (void) noexcept; uint32_t FindMemoryType (uint32_t typeFilter, vk::MemoryPropertyFlags properties); - uint32_t PadUBOSize (uint32_t originalSize) const noexcept; + uint32_t PadUBOSize(uint32_t originalSize) const noexcept; + uint32_t PadSSBOSize(uint32_t originalSize) const noexcept; // creation functions Handle CreateSurface (HWND const& windowHandle) const noexcept; @@ -178,6 +180,7 @@ namespace SHADE Handle const& renderpassHdl, Handle subpass ) noexcept; + Handle CreateSampler (const SHVkSamplerParams& params) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::vector const& subpasses) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::span const spDescs, std::span const spDeps) noexcept; diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index b4bbf89b..7f29bf94 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -1,12 +1,61 @@ +/************************************************************************************//*! +\file SHVkSampler.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 26, 2022 +\brief Contains definitions for all of the functions of the SHVkSampler class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ #include "SHpch.h" #include "SHVkSampler.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" + namespace SHADE { - - vk::Sampler SHVkSampler::GetVkSampler(void) const noexcept + /*-----------------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------------*/ + SHVkSampler::SHVkSampler(Handle logicalDevice, const SHVkSamplerParams& params) noexcept + : device { logicalDevice } { - return vkSampler; + const vk::SamplerCreateInfo SAMPLER_CREATE_INFO + { + .magFilter = params.magFilter, + .minFilter = params.minFilter, + .mipmapMode = params.mipmapMode, + .addressModeU = params.addressMode, + .addressModeV = params.addressMode, + .addressModeW = params.addressMode, + .minLod = params.minLod, + .maxLod = params.maxLod + }; + + // Create the sampler + vkSampler = device->GetVkLogicalDevice().createSampler(SAMPLER_CREATE_INFO); } + SHVkSampler::SHVkSampler(SHVkSampler&& rhs) noexcept + : vkSampler { rhs.vkSampler } + { + rhs.vkSampler = nullptr; + } + + SHVkSampler::~SHVkSampler() noexcept + { + if (vkSampler) + device->GetVkLogicalDevice().destroySampler(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------------*/ + SHADE::SHVkSampler&& SHVkSampler::operator=(SHVkSampler&& rhs) noexcept + { + vkSampler = rhs.vkSampler; + rhs.vkSampler = nullptr; + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h index eae23adf..404ed36c 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -1,28 +1,80 @@ +/************************************************************************************//*! +\file SHVkSampler.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 26, 2022 +\brief Contains definitions of the SHVkSampler class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ #pragma once +// STL Includes +#include +// Project Includes #include "Graphics/SHVulkanIncludes.h" +#include "Resource/Handle.h" namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHVkLogicalDevice; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /*************************************************************************************/ + /*! + \brief + Holds parameters for constructing the SHVkSampler. + */ + /*************************************************************************************/ struct SHVkSamplerParams { - vk::Filter minFilter; - vk::Filter maxFilter; - //vk::Filter maxFilter; + vk::Filter minFilter = vk::Filter::eLinear; + vk::Filter magFilter = vk::Filter::eLinear; + vk::SamplerAddressMode addressMode = vk::SamplerAddressMode::eClampToEdge; + vk::SamplerMipmapMode mipmapMode = vk::SamplerMipmapMode::eLinear; + float minLod = 0; + float maxLod = 0; }; - + + /*************************************************************************************/ + /*! + \brief + Wrapper for a VkSampler. + */ + /*************************************************************************************/ class SHVkSampler { - private: - //! The vulkan sampler handler - vk::Sampler vkSampler; - - public: - SHVkSampler () noexcept; - SHVkSampler (SHVkSampler&& rhs) noexcept; + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + SHVkSampler(Handle logicalDevice, const SHVkSamplerParams& params = {}) noexcept; + SHVkSampler(SHVkSampler&& rhs) noexcept; + ~SHVkSampler() noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*---------------------------------------------------------------------------------*/ SHVkSampler&& operator=(SHVkSampler&& rhs) noexcept; - vk::Sampler GetVkSampler (void) const noexcept; + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + vk::Sampler GetVkSampler(void) const noexcept { return vkSampler; } + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + vk::Sampler vkSampler; //! The Vulkan sampler handler + Handle device; //! Stored device for deallocating the object }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp new file mode 100644 index 00000000..01362087 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp @@ -0,0 +1,81 @@ +/************************************************************************************//*! +\file SHVkSamplerCache.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Mar 16, 2022 +\brief Contains the implementation for the SHVkSamplerCache class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHVkSamplerCache.h" + +// Standard Library +#include +// Project Header +#include "Graphics/Images/SHVkSampler.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructors */ + /*---------------------------------------------------------------------------------*/ + SHSamplerCache::SHSamplerCache(Handle logicalDevice) noexcept + : device { logicalDevice } + {} + + /*---------------------------------------------------------------------------------*/ + /* Utility Functions */ + /*---------------------------------------------------------------------------------*/ + void SHSamplerCache::Clear() + { + samplersMap.clear(); + } + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHSamplerCache::GetSampler(const SHVkSamplerParams& params) + { + // Get the hash to check if it was cached + const RawSamplerHash HASH = calcHash + ( + params.minFilter, + params.magFilter, + params.addressMode, + params.mipmapMode, + params.minLod, + params.maxLod + ); + + // Check if it was cached + auto sampler = samplersMap.find(HASH); + if (sampler == samplersMap.end()) + { + const auto BUILD_RESULT = samplersMap.emplace(HASH, device->CreateSampler(params)); + sampler = BUILD_RESULT.first; + } + + return sampler->second; + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + SHSamplerCache::RawSamplerHash SHSamplerCache::calcHash(vk::Filter minFilter, vk::Filter magFilter, vk::SamplerAddressMode addressMode, vk::SamplerMipmapMode mipmapMode, float minLod, float maxLod) + { + static auto charHasher = std::hash{}; + static auto floatHasher = std::hash{}; + + const RawSamplerHash H1 = charHasher(static_cast(minFilter)); + const RawSamplerHash H2 = charHasher(static_cast(magFilter)); + const RawSamplerHash H3 = charHasher(static_cast(addressMode)); + const RawSamplerHash H4 = charHasher(static_cast(mipmapMode)); + const RawSamplerHash H5 = floatHasher(minLod); + const RawSamplerHash H6 = floatHasher(maxLod); + + return H1 ^ (H2 << 1) ^ (H3 << 2) ^ (H4 << 3) ^ (H5 << 4) ^ (H6 << 5); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h new file mode 100644 index 00000000..5c775e2b --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h @@ -0,0 +1,91 @@ +/************************************************************************************//*! +\file SHSamplerCache.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Mar 16, 2022 +\brief Contains the interface for the SHSamplerCache class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Standard Libraries +#include +// External Dependencies +#include "Graphics/SHVulkanIncludes.h" +// Project Includes +#include "Resource/Handle.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHVkLogicalDevice; + class SHVkSampler; + struct SHVkSamplerParams; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /*************************************************************************************/ + /*! + \brief + Class that is responsible for caching and providing Samplers to the user for + sampling textures. + */ + /*************************************************************************************/ + class SHSamplerCache + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructors */ + /*---------------------------------------------------------------------------------*/ + explicit SHSamplerCache(Handle logicalDevice) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Utility Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Clears the cache, destroying all created samplers. + /// + void Clear(); + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Retrieves a Vulkan Sampler of the specified type. If this was retrieved + /// before, a cached copy of the Vulkan Sampler will be provided. + /// + /// Filtering mode of the Sampler to retrieve. + /// Addressing mode of the Sampler to retrieve. + /// Mipmap mode to use. + /// Minimum LOD. Usually 0.0f. + /// + /// Maximum LOD. Usually the mipmap level of the texture. + /// + /// Handle to the Vulkan Sampler object specified. + Handle GetSampler(const SHVkSamplerParams& params); + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + using RawSamplerHash = size_t; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + // Resources + Handle device; + std::unordered_map> samplersMap; + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + static RawSamplerHash calcHash(vk::Filter minFilter, vk::Filter magFilter, vk::SamplerAddressMode addressMode, vk::SamplerMipmapMode mipmapMode, float minLod, float maxLod); + }; +} \ No newline at end of file From d938007d8acc2548be86e4505b42288f590c13ab Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 26 Sep 2022 17:18:51 +0800 Subject: [PATCH 218/793] Added TextureLibrary updating of descriptor sets --- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 44 ++++++++++++++++--- .../MiddleEnd/Textures/SHTextureLibrary.h | 10 +++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 6459ff9a..a6ec4c3d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -20,18 +20,20 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Commands/SHVkCommandBuffer.h" #include "Graphics/SHVkUtil.h" #include "Tools/SHLogger.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, uint32_t mipLevels) + SHADE::Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, Handle sampler, uint32_t mipLevels) { isDirty = true; auto handle = resourceManager.Create(); - addJobs.emplace_back(AddJob { pixelCount, pixelData, format, mipLevels }); + addJobs.emplace_back(AddJob { pixelCount, pixelData, format, sampler, mipLevels }); return handle; } @@ -46,11 +48,16 @@ namespace SHADE void SHTextureLibrary::BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout) { + // Don't do anything if there are no updates + if (!isDirty) + return; + /* Remove Textures */ - std::vector pipelineBarriers(addJobs.size()); + // TODO /* Add Textures */ - // Transition + // Load Textures - Transitions + std::vector pipelineBarriers(addJobs.size()); for (int i = 0; auto& job : addJobs) { job.Image = resourceManager.Create(); @@ -97,9 +104,32 @@ namespace SHADE job.Handle->ImageView = job.Image->CreateImageView(device, job.Image, DETAILS); } - // Build Descriptor - Handle descSetGroup = descPool->Allocate({ descLayout }, { 1 }); - + // Add Textures + for (auto& job : addJobs) + { + texOrder.emplace_back(job.Handle); + combinedImageSamplers.emplace_back(std::make_pair(job.Handle->ImageView, job.Sampler)); + job.Handle->TextureArrayIndex = texOrder.size(); + } + addJobs.clear(); + + /* Build Descriptor Set with all the Textures */ + if (!texDescriptors) + { + texDescriptors = descPool->Allocate({ descLayout }, { static_cast(texOrder.size()) }); + } + const auto ALIGNED_SIZE = device->PadSSBOSize(sizeof(uint32_t)); + texDescriptors->ModifyWriteDescImage + ( + SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, + SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA, + combinedImageSamplers + ); + texDescriptors->UpdateDescriptorSetImages + ( + SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, + SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA + ); isDirty = false; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index 5cf974ef..db82d7e2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -33,6 +33,7 @@ namespace SHADE class SHVkQueue; class SHVkDescriptorPool; class SHVkDescriptorSetLayout; + class SHVkSampler; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -88,7 +89,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, uint32_t mipLevels); + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, Handle sampler, uint32_t mipLevels); /*******************************************************************************/ /*! @@ -123,7 +124,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Getter Functions */ /*-----------------------------------------------------------------------------*/ - Handle GetTextureBuffer() const noexcept { return texStorageBuffer; } + Handle GetTextureDescriptorSetGroup() const noexcept { return texDescriptors; } private: /*-----------------------------------------------------------------------------*/ @@ -134,6 +135,7 @@ namespace SHADE uint32_t PixelCount = 0; const SHTexture::PixelChannel* PixelData = nullptr; SHTexture::TextureFormat TextureFormat = {}; + Handle Sampler; uint32_t MipLevels = 0; Handle Image; Handle Handle; @@ -149,9 +151,9 @@ namespace SHADE ResourceManager resourceManager; std::vector> texOrder; // CPU Storage - std::vector texStorage; + std::vector, Handle>> combinedImageSamplers; // GPU Storage - Handle texStorageBuffer{}; + Handle texDescriptors; // Flags bool isDirty = true; From 5ac90eebec6d4d6424e97081ca2d3946b3a31a73 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 26 Sep 2022 17:26:33 +0800 Subject: [PATCH 219/793] Fixed compilation errors --- SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h | 3 ++- SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp | 5 +++-- SHADE_Engine/src/Graphics/Images/SHVkSampler.h | 2 +- .../src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h | 1 + .../src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index dbc63786..1272f68f 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -21,7 +21,6 @@ #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" #include "Graphics/Images/SHVkImage.h" - namespace SHADE { /*-----------------------------------------------------------------------*/ @@ -41,6 +40,8 @@ namespace SHADE class SHShaderBlockInterface; class SHVkDescriptorSetGroup; class SHSubpass; + class SHVkSampler; + struct SHVkSamplerParams; /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index 7f29bf94..f12b834d 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -41,7 +41,7 @@ namespace SHADE SHVkSampler::SHVkSampler(SHVkSampler&& rhs) noexcept : vkSampler { rhs.vkSampler } { - rhs.vkSampler = nullptr; + rhs.vkSampler = nullptr; } SHVkSampler::~SHVkSampler() noexcept @@ -53,9 +53,10 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Overloaded Operators */ /*-----------------------------------------------------------------------------------*/ - SHADE::SHVkSampler&& SHVkSampler::operator=(SHVkSampler&& rhs) noexcept + SHADE::SHVkSampler& SHVkSampler::operator=(SHVkSampler&& rhs) noexcept { vkSampler = rhs.vkSampler; rhs.vkSampler = nullptr; + return *this; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h index 404ed36c..bb878a69 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -62,7 +62,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Overloaded Operators */ /*---------------------------------------------------------------------------------*/ - SHVkSampler&& operator=(SHVkSampler&& rhs) noexcept; + SHVkSampler& operator=(SHVkSampler&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index db82d7e2..da47723e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -33,6 +33,7 @@ namespace SHADE class SHVkQueue; class SHVkDescriptorPool; class SHVkDescriptorSetLayout; + class SHVkDescriptorSetGroup; class SHVkSampler; /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp index 01362087..8d0b6609 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp @@ -9,6 +9,7 @@ Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ +#include "SHpch.h" #include "SHVkSamplerCache.h" // Standard Library From 3800c01c4a4e7922e288215154665ef5948666c8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 26 Sep 2022 17:48:27 +0800 Subject: [PATCH 220/793] Added function in asset manager to retrieve all dds images --- SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h | 2 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 6 ++++-- SHADE_Engine/src/Assets/SHAssetManager.cpp | 13 ++++++++++++- SHADE_Engine/src/Assets/SHAssetManager.h | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index a927d54b..b4632c2e 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -21,9 +21,9 @@ namespace SHADE std::string meshName; std::vector vertexPosition; - std::vector texCoords; std::vector vertexTangent; std::vector vertexNormal; + std::vector texCoords; std::vector indices; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index b8940d3e..7f1fdcbc 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -70,7 +70,8 @@ enum class AssetType : uint8_t #define PREFAB_EXTENSION ".SHPrefab" #define MATERIAL_EXTENSION ".SHMat" #define TEXTURE_EXTENSION ".dds" -#define MESH_EXTENSION ".fbx" +#define FBX_EXTENSION ".fbx" +#define MESH_EXTENSION ".shmesh" std::string const EXTENSIONS[] = { AUDIO_EXTENSION, @@ -82,7 +83,8 @@ std::string const EXTENSIONS[] = { SCRIPT_EXTENSION, SCENE_EXTENSION, PREFAB_EXTENSION, - AUDIO_WAV_EXTENSION + AUDIO_WAV_EXTENSION, + FBX_EXTENSION }; // Error flags diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index ac05df59..c79d0596 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -199,7 +199,7 @@ namespace SHADE { AssetPath path{ p }; - if (path.extension().string() == MESH_EXTENSION) + if (path.extension().string() == FBX_EXTENSION) { LoadGLTF( { @@ -236,6 +236,17 @@ namespace SHADE return result; } + std::vector SHAssetManager::GetAllDDS() noexcept + { + std::vector result; + for (auto const& dds : ddsCollection) + { + result.push_back(dds.second); + } + + return result; + } + /**************************************************************************** * \param Path for meta data file * \param Path for asset file diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 8547e9e3..bf6e0dc5 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -73,6 +73,7 @@ namespace SHADE //TODO: TEMPORARY FOR TESTING GLTF & DDS static void LoadDataTemp(std::string path) noexcept; static std::vector GetAllMeshes() noexcept; + static std::vector GetAllDDS() noexcept; private: /**************************************************************************** From 3b0ea251f3290a54a8ee876fa229ac38c57f6020 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Mon, 26 Sep 2022 18:08:59 +0800 Subject: [PATCH 221/793] mouse wheel delta poll --- SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 957ffc34..4d8dae72 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -1,6 +1,8 @@ #include "SHPch.h" #include "SHWindowMap.h" #include "SHWindow.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Input/SHInputManagerSystem.h" namespace SHADE @@ -339,6 +341,14 @@ namespace SHADE OnPosChange(reinterpret_cast(lparam)); break; } + case WM_MOUSEWHEEL: + { + if (auto im = SHSystemManager::GetSystem()) + { + im->PollWheelVerticalDelta(wparam); + } + break; + } default: return ::DefWindowProc(hwnd, msg, wparam, lparam); } From 1f45b0ceca47269044d4107e236c5056888ced5d Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 26 Sep 2022 18:09:21 +0800 Subject: [PATCH 222/793] added all the widgets helper --- .../Inspector/SHEditorComponentView.hpp | 4 + SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 111 ++++++++++++++++++ 2 files changed, 115 insertions(+) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 080cbf2c..93dfabd3 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -63,6 +63,10 @@ namespace SHADE { DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); } + else if (type == rttr::type::get()) + { + DragVec2(property.get_name().data(), { "X", "Y"}, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }); + } } } else DrawContextMenu(component); diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 4a934e8c..cd0e4eaf 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -182,6 +182,117 @@ namespace SHADE return true; } + static bool InputText(const std::string& label, const std::function get, + const std::function set, ImGuiInputTextFlags flag, + ImGuiInputTextCallback callback = (ImGuiInputTextCallback)0, void* userData = (void*)0) + { + std::string text = get(); + if (ImGui::InputText(label.c_str(), &text, flag, callback, userData)) + { + if (ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); + + return true; + } + return false; + } + + template + static bool DragScalar(const std::string& fieldLabel, ImGuiDataType data_type, std::function get, std::function set, + float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + { + T value = get(); + //bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); + + if (ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags)) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + else if (ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + + return true; + } + return false; + } + + static bool DragFloat(const std::string& fieldLabel, std::function get, std::function set, + float speed = 0.1f, float p_min = float(), float p_max = float(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + { + float value = get(); + //bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + if (ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + else if (ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + + return true; + } + + return false; + } + + static bool DragInt(const std::string& fieldLabel, std::function get, std::function set, + float speed = 1.0f, int p_min = int(), int p_max = int(), const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) + { + int value = get(); + //bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + if (ImGui::DragInt(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) + { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + else if (ImGui::IsItemDeactivatedAfterEdit()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + + return true; + } + + return false; + } + + static bool SliderFloat(const std::string& fieldLabel, float min, float max, std::function get, std::function set, + const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + { + float value = get(); + if (ImGui::SliderFloat(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) + { + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + + + return true; + } + + return false; + } + + static bool SliderInt(const std::string& fieldLabel, int min, int max, std::function get, std::function set, + const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) + { + int value = get(); + if (ImGui::SliderInt(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) + { + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + + return true; + } + + return false; + } + }//namespace SHADE From 3d7876c987d67187b4ad302985641bc1d8713bdf Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 26 Sep 2022 18:33:37 +0800 Subject: [PATCH 223/793] added fix for closing editor windows --- SHADE_Engine/src/Editor/SHEditor.cpp | 3 ++- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 34ebe6a6..42a0117a 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -106,7 +106,8 @@ namespace SHADE for (const auto& window : editorWindows | std::views::values) { - window->Update(); + if(window->isOpen) + window->Update(); } if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index cd0e4eaf..1106a4e2 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -183,7 +183,7 @@ namespace SHADE } static bool InputText(const std::string& label, const std::function get, - const std::function set, ImGuiInputTextFlags flag, + const std::function set, ImGuiInputTextFlags flag = 0, ImGuiInputTextCallback callback = (ImGuiInputTextCallback)0, void* userData = (void*)0) { std::string text = get(); From 4dd2335fb8725b4356d15bc6365931711657c7dc Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 26 Sep 2022 19:09:45 +0800 Subject: [PATCH 224/793] Removed assimp post processing flag that was removing animations --- SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index c1637e1f..3ef454a0 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -100,9 +100,7 @@ namespace SHADE | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing | aiProcess_RemoveRedundantMaterials // remove redundant materials - | aiProcess_FindInvalidData - // detect invalid model data, such as invalid normal vectors - | aiProcess_PreTransformVertices // pre-transform all vertices + | aiProcess_FindInvalidData// detect invalid model data, such as invalid normal vectors | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs ); From caab2c37abb1129c22571ceba729202eb5640fbf Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 26 Sep 2022 19:10:12 +0800 Subject: [PATCH 225/793] Added GLTF extension recognisation --- Assets/racoon.fbx | Bin 713836 -> 703020 bytes Assets/racoon.gltf | 4993 +++++++++++++++++ .../src/Application/SBApplication.cpp | 2 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 4 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 2 +- 5 files changed, 4998 insertions(+), 3 deletions(-) create mode 100644 Assets/racoon.gltf diff --git a/Assets/racoon.fbx b/Assets/racoon.fbx index 45ed752b2ad7f7e7b123b32b514ea5a37b1e2786..4d823d9d32fd1d077dc4e87503058d5318c79759 100644 GIT binary patch delta 238339 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%0A0=P0pMpgrhk{48L|Z=ScyBVU?LP zF)y5YnU0OgQct_esY4r^oo8ayj~L2{vmk(7kQ3Ze~fYdF;iolg7!An3@z>(R}bHYH5Fwu;!qaK96PNrgi?C2M+#M znIX+CXkYDKKr+Xe(xUH5^*>Z<=(M3BilW6klkV6u`_Fm!ItPx|uyaoG={ zaWg0L{%us0{_Ul^ z)wy1uZo!CmXu*in%-~rq%o~SLUJpnleYb7e%FHT>G0Tcuc075mB}RNWbimRK1SNb7 z2y#o}3gXV5hnY3w==^UqC_H0 zS?Utcira1cQF`JxVCAmdDf+oUSq}th9t48YO)Ga6B1C%6e$G%D@hCfL`@Ht7xAM(h z0W#Ar9{sU@^T-Wpqaj22lLSJ!)YMH>()HpU$M)h|YtLE-AWY`Y?7$^3yw*;coj9Qb zm%suY7&BVE6NA7Ol)#}9iPbyUIqwTLY5hV6D|s6II^^AjxLAP8Hm+o`Aioe@Eg zn%|k7aY|A(PItO6woZq7R^{4#u?u6{y$fSYYj=L80H)_jBzhxRyVJTGn>zlJEu3&m zWLI%Bw*f)EN?fTJZ397W=4&9x9ItNdtn4P{q;+R)!G-3@=cILD(NH)81m(>$C9KMO zKzHeGn}Q&96T35zTM$7L@_Mj8$9Y_!OvwAviOx`RipEYLlxxnwm5MpNwr@v> zJak{O(vm&I$mpJona9d>c@?hGlQG-fgE2!VUc#Z^56>f?;6T~;PN5DR#{C=}*i$OF z8fZ5^f`j@t^y1Wx`WpN2s#83Sp430OJF0s(B0veg3WBEV^^#oe(q&Po`qw}NIWl{( zg-Z~oT=nS9ioYDbJcwEj!}cqa9AnB5udhUL6A*;t2oRL;#m6wNS&0zAdF3nC>)ab~ zevVONA6B~}?FVsK^ap3`aSTBw_GTv@!lW?=1T+RZ@0cBGgTG53(TO8t$%lt9nQHcB zFn|93ciGr+T3-g!wJ+o4cM=Z#Pbq+7M^0jw=h4DJDfBd#pL8f?So*VNpBQD?yXgP0 zZ$1^K%#6RCN5?--weKgcPh82|9w4Z~{B>;PcJ-f$2*Thx#QzBNG~u!J=w@1OzF2tAtfGFF!=8d20{^Ug8kew+j(SR!!TX ztgiipbG(y=#rJDb7Y+jI+znhw+dL37Mo$Al+TMK4Ub&%ST%%!JA}`Gh4(IN>)-VQX z-%zREDVXQ|_fRt|1>H^Xu-s~0(lk@>ma%m>n-lWz0)OT;77sHYrJyg^Hq42t>A1Hz#|H6i?hp&Vw-slZi`5Nk#5)U7TBUMlozYqXafpUB~Xl7vmNbQ_(rHtL1Km z{g0w2ip07ySmX0#FFpzs7|r&rN*q&={Fr{D@~IFDww({@u(D80p>M_LC=le=#FZ*u zws-#+^*0ege$8*$><1gThjM`E!(i*U|YrNn1K%v^;4&2r5w7Ak?GG$OHIl zY#AeXM~-2<`;0N8y@2;veoUu%&3W@H{}W^Kc}#rQUSEBE-ZLf#YRIKGR-V!j1SM$Y z?t?MvpMVI;*mYysx2Ggk1NC|w=R>mFNKfw3?~UVp7&4CYA?*-~?=LtdSB=-NNFw<)j)uZDL;Wdo)g5F%#e`=JM#v%lxA zeVlq5i2Pm@4*)?vJzPmI&AU8=5cHO_oyclKCW_j)Nete`r~jZ)R};YMO=9qlP0TIC zB^-Wru9s>vNkxR3MRsDR+;9qD!=RlGwT#`9InmF{hLz-v`6fxXuI@`gfYSU31bIIv zOV)O2Q)G+!H$nvYKPR(wNeEM-gQl|Lq)*$);>e;?M6>GG%OgOV+k>D?nhIjjZZ*RY z1OfSQ3KvW7spjL-D3;S$<5=4#dau5zq|w9S*9(#JK$EKvSJL+q1W*ig?s6c+27kY4 zqBedS`}z_k9G8~bRFz-T7ffdyOHXGUsaOA;0u`Nq>o>;xlW9pQiNd6geSRuB zcGpBU@aF9A!)PSq|9*Nt^+tE>Za=WU^an9`CRKZ z9yN>Mrha`h1u$(w1Vvx?vV~}u4puget6W441 zY}D&W3b>kdw%9(C&3QffFqcKk#-FGY_O=`VK~7U#$(%sbNuMs3g44xP;t(dQrkd>*shT4yW}OE)cK{B9gN&Ik2c zRxD)vDlTOF=$x@G3(Y}uFp(r`p2SjRUUwCh*=I2uc6-o}Dm?dakr^@OU3{lv6vGvTIODs$R@-xtV+!!|}O=D{@!;b{Ql3-7-d$UcPr=-R@}gG_)uC zL*Y=}9kPNgo&2hae2D6}oL|0;q08C7iZG@9EC_n{{s@AMiCDp|)fHmQwUw-_|FXZO zuRa2n+6&8a0|Y@?Y^A8H3xd@31wraouVfTYuXLhAc~^_J7wgN*jKozKU_Oa%wn}u3 z0YR=mT&d=s2SKjC)vPIMwOH194VS!Of5cYen%im(<8)~?eD@adTzLe zIrQoI*jhH`m(81Oc=x_F^ywM9_kp04eE>m@(Y3i>p7-F(^PYAHlV5Z#8Z;1K{dy^A`pa`DB1m=b_3ZIOn2g=Nfe|#;M~mBh{RT#`>ITLM zE(?F-s}1tyd9lROm*>(O&9G~zV%?_5r>8={l2ve!f*=PeuF4`~B96sX^W-)mf(*I) zE4xNFiXk(TIEmfrK9M~(Mu3GRV)oZ;P=wiDC9M+p6a;EgC5umz=xdY2m`y+g%_Q8! z`g&$&mSX>2Qa)8xe|dh7yXXlao7lg%DbI)J$q05)-n~uykVgm;d@jih->9U|!nvXv z$qe80%?uy)ujv%PEJKN;Iy!2Lc_RwwRsN#_PclrFE^IUiGA0QGc|>ugir}~fEs8pM zcMIDw0AaG@&Q?xs%W@N>2g(AA`q#T4NSpUo0k1I#Qa1zyWyZ#>q|dmxm8ThQV{Mj= zkHWAY&u8&TfR-)0 zxkT08{V%iz?v@IjE_szSa2K^3xeszB5+l_8pz%JU7=S)EIci@3)g zLXvXPK24l%xGH5vk2JPzCL###BWdhwQvxa%Ju(=iV~e}VihJh_25D~kzpC9~3ShpW zL{hc;ZZ8{h?Qy)E!_Ys23%4;bgMF0}w|LGUbvZ3C7d{U0wgZJqD zqHP8U@}%KPo-|y^lXif!ulWJ7Ea4zSRCy^r<XiHn+99L4pTYcRrZY$AlOENpiEc?f(A``mHin+5PXG>uy0#d<$XHICL*pKY&(Jv_$QgKE%xMUM>dLGd-z2Ml0wTz) zb?4a`s3cVj8kfylM>*l7F`npm0p&o=xk_|h8{HBC!fgTwN@+3(>IgU9$1Bn$gh;Pj zHiK6$8)ZaI_`4|JEw5RNU0h($2jn{~8>OZoKx!X>AQ#s~F}TjmT3gh=5hBRNb&>TZ zAxs8mUSb^Wrd!>(M((}DI5xe+Xt^jaa>8er&oPc-Dmt$UIC?E5_*m*Tk(mF;!Oy(@ z8CG`JzCvaiIPWB2tCNp^;N^Ss3rcf8r2iR&Hmtw^T)l zFz$bqwJtyeO$)p(dAIov&-nCze>ETTHx!vW*sDoal-o6SeO;5M3$+GUbb~RkbJfR#>$mp}#(d><#+*jC7bt)UgEu&m>i686Y~B_`Y8KOAB5`rTopt|ClmwY$qYtA0P1=T{kZ z|1t-Bh2;-wK4tu0qIVhyLTo39fU%fka|;9^=6jb_Hn|H~H7)QSYaHIbpKQ3Z5gc?I z9u5nNM;!o7PA*(YVc^!q5egDI!5`q{b6)erNrMY-NKFF8mJZAN(Mnim?;RMf{6q zM>c#Qu0mYN?A0KsX4p?X9HRc2h#JHuV4 zK!}+z8E1F8J(Y5+P7ho7j7{@gT*Hee8$Olly%+=~_9O`MBjQRGGUypQ5TCIzGoFbt zj#!|pUZ28!WMR`&aA-Q1^||P(1%iO<4T9!_%>_Z2op{db-YOB*w+(s8rny$G%add* z9bd3*#?Tk+{6d(todrRreFQ<;B3`od>!m20{EC74WM!5(hey6*pe(O)ODML`d&RD} z%5UHt?k^k~4L*O()=V6eB>nf5S2E&y34$Diuh|@<4bIY4FJ)s9LDuYi&3-{8ppw@4 z4J&(C_B(MdHU67iaqf=oUTlu;iU2`B2LvTB1H|liaFpB!K`H~^a1m?uhNla@WsMhB zFA8T5*c-9#1PD_00fh2^*}i4#+PxLe*INcY6=AaO+B>u5A$ToUd{dMw^XYdCRfl)~ zf@;<~88jb|Sc0kPd$yzZtuKRkO5i_YM>7y)#~2XGFKGJ@+i@OYatpp^JEGo;9os*! zuBA2G3FOPcLTd$I(oRsM?VgfWRnhAMRhmkc`XC6R(H|J1^&c1_TeI#*IF2h#J1Va% zg+7XHfgqGNqqWWUQSR1Cwnnh6xz58{$;6qkzgpVaTG>ZvYtFW}V(USKW858U7}pGQ zkfRk#&>Oh~bI*F(u+sY74u)y#gbC)xnuOsUML6A=nS5h_+1X;HU1ObmD){|qc z5r!jMXIsM@=xFt``@8v^GW-r(!AYUyVT;Xh6-ekD{0;0}0gyuNYu)=P+V>|X7>@$w zXQmgz;9#Yd&DnP4uq=*Abh7g6&T0_kG*wrXHhZg;_elu_LFV+fnqezo4#HHvT?(+a zhU=b*C+ZDYC|B-|>fuG51+ID^NaY|9sy#Lf6~Ro?g$R+}v(B6gMgbHLH9fK*>wW)b z3{Q_#3@WZEqd`#?B!M7bAg)ju*9n$ zT)+wx%Eivpc}C0QYcH+tS1YEFnOqD7ZKyDDvSvxs!xfXt-{HJim7!w}p0cnXwUG7y zuPW4f-WL*cLke4Im3Cn>#?6W)0+k$ zXX1=^K~6p_4%~XXh|&ch6t2b*7o`>xB@sc01{YzC?TZMauB>o)oyW3nAO##cz4Jls zvmmL`T8c@f#Zj@Sv==Ont^%j4z=<%`*O|o`&ZTj$T)4hYC@ydo|5tsDDUOAq3Py>f z`uYy5Udvj2EIkt=cu9M4sSxi$P~L{P5m<&B%3BksV0G=Hyv=R`6T%FW2dAodQFp0a zE#0mEJNlzH0;F#N2*%0XjKO|amgk6IoIC_44^er>lU0_f{;LKGEUK?(L6CFRleJmG zK~R0|41(0n_cXhh8rbMVG*6_-8MwvF5B27!98g z4js(b+K0{AGH9FB*GO+GFE+rze9>(XAn!A-RKd1^paBm~<%?ARYltAzynM_Xzrr*h zF)ghGYu?=APoDW`SqB!?U3D^F1_FfLGj)S%4gyM8&8H_t|{g5hl;8FRLwCQcR8ZV-&~6^p^9$s`xRA zyGu&lRfqFEDQS-X5``_$k0YrY-QdqQjgN1FW$Z_hxLnKpt8RW;hWpad5=nK_f`eIA(k8~Q7H9Co zGE)5Q1FgIY9#=A?2M8+uGeJ5>1P?3$wTHd+>&-JVz4UoFGBLZaD3=rg{#+9mPqcV5G)c+15$X#8LEo@#wM)Q=F!fJE1ZjN}Y-aRBHiw9< zjY1jCsBnjh+_%;WWi%K32C>msIm{g}Tg5=)K3@Ddvwnp;^t&44O+Y28|x zZQN1k8Gl0XUmTiG5399p3$>CfJ5k{LQnT`bQ&z%pL*7MPN3)x2L7U<805fLnneG{%EySq-h<1`wn!CycQzRt1Gjozh&D)j2$MBPWBm zUzL2!-g<9U^5$i)QWJ3(Js}kYo)Bu_N^noI-?m--J*uLMS`8i_{CcBqbW4Hr~ zC(Ef`bE+}iKGhgZnhepRn)!4-nnN6HM`J_U)T%&rHgb)}BzyLDSEKF(2RDa{K~W%R zW+<*Salr&Z?(T3l}PT}^Y)aOAI& zP_57F2*#=N?h|qz{k;grX-GtFvGle7IV$Rx2(IH_jQ=hAittd!OPZaVVU}|D+HBN= z1&id1L$g}cID0tY-X5UI1&%AF@&E{AB-RnW2(!WeF~VeD`P$~w0N7Vs?8~gfdiOQH zC!^<`U{MdO49P-(N{CTMG>3sehgsI#6zAk%>3|UFomYoJ+^ghN!fQvd;!BMWy7LO| zNUJ%s1&$tz1VK6nfFRE;t}wQ&)gMO^_*XuJAas_qjbfD{QKB*~+I-p_UCQ-vnH5nl znxQ-v#ZZQ}LJw>ctpXLzZ(CvNaySKC&H1gcx@dQdIerqdadFYnhN5^XXu)@f*>>>)@7C6^-%pvqgvNzjgfJmao6lWx?VoEPbk!- zN7k3OqUYf@^5x=6Pk0GJ9sJ^4)+c&8{(kl4LGks?fC(rL2$Sh+8*p)LQ08b+?zR^+ zV2n#QV2uB_0qo}uRNW4B_<$L_iNd90tO|XOBRE}g@+*x`+&b_Y56k-o{~8v%HMG)F z`G#zvF|;8MikBjSAjocLF0Ta3J`u~tHe!8cmMj)0OK-4f#j7%4JOWgxwx}CaZ*&8M zYRk-y?SXoMMxwW2BZhXcicm8=KV`jN6+R|sIfD`10p;`|2vS+{Q{)2He?v5VkhQEc zHr{xH|8PW;r}tCVcoks+@gokT9e{HBXukC8&l)p^qZ;Q{c^u>1nBX(XIh7-vH_q@r z_if51ZAcm?b3B{KIIKSiGHD42a)skcj5#06%BI}5ir*~*EW%AW zr?L?sjn1)xTLcJlPIU)CS+O{lbskj_YNBUzR=NK{YxZPYf}7DO$jfd|Lr^r+6IaTH z)gUmW3UXSDmBMQ?5h9(|=4RFp$lm5+X1h2pc&$Gx8^PUolQ;(LO!I$%<`k!f*Vy+e zGLBL~sTh@Rn2vhcj;(S(B za^DT^AZz5jT9P(6s=`1KT-`vBzS$s9%rLb z;I`~J&dr)9Od4RPq~Y`~pN?$Qy5uKzG!xeN0?Sjg;bBtu`XWGvHCKdk_~WWto&pct zzO1VLYY{;X|1a3W!X3rJ$(>kn(J!{h)^UTtqROc(nTh~u-lc9(joMuh)TkBO3m=SY zCqc1UCssTX5i}>ZGwU6&I#a$iUFl>#+KWQ?5)$Oy?kpPHfPlt8=NhX+ZSWt9Fy+k7 z&gOU%)j|oX4&AXUqdEU+kUQ7Vw_O;`@47IWGxy`0`Hn7T@_vl?9!eyR!1XeV9k2!% zL%Ok1Egp5^Px!VS&6ZuQ#S0XE^e9~&_%*aEUQpDj*SJz@&w?NzPvXcf_5X+nGA^Q< zXz+;2RJj42yMVtw!DMX3Qb@U-}|~l&$X0=$-Cv zrMa*@Sl7WHmw1ya*YC@G`dZ)iU56}x_8_|1m!f|R2y*Y@N=6r)*DG56&m)4|yf~^= zIoP6lh|!&UGNRTc&t!dHtDcPLr5^vP$3=RYMMKfgs!d`W_GE@to#b__7aQvL+raAl zm7u58l@lN+(H}t2JlS4W)Ak;wYv4-rV|%eJsR&c<*67W;%x8z?Eji#TY|wld{a^$L zQq~6q<;#2!R0^@02wQI=L^!_xij`J?iPi;biS+^>kFX2KE!DIId*fL=aR-Zrn>>KYd_RSn%hRsI$_H>djvLnEu`mD^DjQ}CJSIMhnKLtTZMke5kqt5_Q+hzbG zIROzgZ#IFgJ@KfJC%Y@b!1riR`zopLL6Xvt1a?>^h^^!1;e+(N88z5Uu8qVlzF(B* z$__$_8H_jA(ICjABoO2u$Cc_taU5N*{*Hsu45>M@gW0G72$NBFhHy%UwRkM=BUxY- z_!?U8f*`HlLj=9XAV_WDf6hm%{}4n_zHA)AdM_e^&bA)PYQMYpGtZm!kNi5HO1SVMpt_u#S>S`r)?nUNsWhRrmO!oM9`DGhO$d@s3f4*Fh;fDl&}&!f^I*| z${TnNWmIX3pQ_BBIHENI6R;J_npMul}78LH5lb&fZ`pshaUAKQ39ye`8e}IP>yfN?>f@q;?BfK3HcM8+^Nk3Q z+N&VQ%{daC_gKe3HJE;le+`7m&pDFSE=O&i5{#xxyTj%)muQCv!Ek7CFke~UeL ztECR4V5r$81*a>l7GC^lw38J_vuR(9-^&{d7~j$e%)?BXz_ z>SP=IwTrQh6QSs?|cME@lkbys_bt-;9Sp2meOMc z#ExTF=QKpnA=u+sW%|!6W#;Nba4=Z(v@eosKURF7xRSmeAZTcfEwaXKo{13U%#pE5 zX@sG~RE~S#$W`TMY}GI+lD>sbU(;jPiCyp1-Fs@`&4hSlV=dg}f{aq%AU5zKOhZte9>+yH2yV8nq z)@@`@FsG@HGEX5w(3Sd5w6+96TH6E+OH=<*h@jMN`;H;Ji3mCXdm?M~IJF0}VsQYr z-}m`cbXmEZ-tl{R(hLyf9L1F$gjKug>VF3js;Fq?P}5i?P`6{+~xQdaA`7I{F$?#_>?C}&wB*~;ZS(8_>^%~ z)|u4t_Ckm}%ahr(lL!;Cji$0j_mct+dj=tbwa`@7 zS!=45rtwZ=ja@G;ke%KaPo<8{+p-N3Y8o%Xq|j}eIM|{=kggH9S@}E>Ci4zWXXMgW zX3Ej_yQVX8^{3}nY3%JeonMe+Mx#P+6b@DBs)=NcCCh6E`=x!&qCZ%@9Coxw4gY}> z=x*Rj=F9_u^r1RW++u@&8p34Nn;+PLoG4Z;oxw?5QE-n;c$o?o_1$Vqt>p+%UYu4p zsOoGx!)h)ci|Skv1gY#XgF%~v2uf*zS*&w({H~hp=>$irbD^1{FbV|uI&uA9bv6+q zhv!Vz`2k_l={K9v8ysD^7+2?Fvl+dGvlu<>uj6HQnc(DToT8YD&i5z#pDX&=nP~gj zEP-*5r+H)o_IjT_hb{d6{7ZU$^Y)vaPjzWp>h_OngRaEcVsk18fDmfnO4Y>;dupk_ z#~g7O&tbF2AWUYzp34vVD!#u1y(jwLn3KWR&UXkA z<|%XeLH7_r6NTsTb2?1iA%3D}KjQ1cL=0qmfFLg^u9SlZK#=v$9fH!;|1ly+Yx#NX zCY>kN5C4flkMWyRgM0NpKQZXf=P{)8%3ba!^5L3KCZou9{E0a$AdA+S>{wP3s#TA}iLI(1pF74=R-#7yOl8a6Q8hI! z5g_~~fS|-CgTU7r>?G`}nQdy{|Ec0M;6Dd3Z?MeuCkv+fw#;E)|VKL6EVN!be4_|58Md((I+|`dlW)1}$eC z!wN?DbB*_2&N!}I#yH}o$J6=s(g#1xD4h^}fg&rKKMaNgywGx%ST`60p}8yAI*0l@ z_;WiZ3JqG0-dx{0Z@D;*aiwIx1VKiAU1CIS_4ivLM#isT&oRQ3*&kQ3?xSAg^FdS|;*(5wQ2)OG~{e>4ux20>{)u#$m%rexJ@;MJ^d-0MGz(rjSARr$0QnTKq= zzdyD$t^X={!V(bV7sZwA4)|h8iu%7s1o=l-^K&|_7Q4r;VQ}vUu8@tU2d`mp->qio zsAgAQ!_KrGYdDgeY4_K%k!=F}Yw|SVHSz-f5Cj#Vl55#_Y~YFt9jvb8G+xVgTt%4h zYqySdrS&c7!zHKgFQP0S1Sy*ag7Di3f|`e0AP7I-b*!(+I>?3qzxAx{ZL8m9tB8%@ zkR$B?2y%(yO4F2A zP>GBW#SpUoMz&-~sV}*z*#?^dzv3&h|GDGIX$^lBe=)9P%xVyM>To6^$SCVZc7tvd zqc$b6;+*9@WoglTu;@rawV`}60)*O4bpz_KQ8dZC{t**7YbS}up-Bwd3PjK;+M8M9 z2iqnt?C0AgO{$4K<$Vz#h0PVA{Cv2QsXG=$rKtZ}M3A3v6YDL!SxgO0X8e+3D%)`l zE|tvqZP?8CsTyo{u7-6I*D0o=^Sg*mS2w>u744SH65MB3!=CaBx3HP6CfZ~UC)=6MtyxYhli zZpr6C+ED9Oc~C77l$X6hs3)1eHQ*^fwI4l}iv;%EPn2nU&Y#8%*_(lmYmEL_Fz?*v1aQZK87W?~M5KLN2Ab!yfrN zBX0Sf@udCZYyPfY!K)hmCDK|8CHDDtHs|f(#ry#nD@d|_M~S6<=wALV9@OoU$~GV< zm9!7tScJ%;o!i-es>DSmVGdUzTD29~jh!DTOBxAcY@5kPmQ|xVhM36IZ z7wb($m`uI4o52e!wXrh4bD!SL;C0x|;6-PmOn}!kg^l{UVC&N4 zJ+<9qmOO>5Y_>=283TeGrMLpOKa~3PUJe$y zEY#A8od{4u@2MM9MfXZIpJV~K`l*84=u}p@9uYJlHk~z&$eykj$){0G_i*^VL~0;t zniGpFmE(yZ$kNR@n{DvlgfQjE-86RprHiFCGR*PW`11GDC)K!`SIAJfdDy1^tCny2 z1GW4wimB*4Zs_$+jaI})`DXm9mV2E=Enm5pZLHpS01udL6V34%=&bov`?Ha&Gw@X9 zLseHbMzP;38C?F>h7k1+MFiQ|8wcpBIkN~;2D{+!SydJbzpcYwHvcz!^Qqa|xT5<6 z;d&tGQG-BGneTrdHG3gK^qjN%7-wTYN|u^Kdw`$Qe6Wopxd{FC=ku6ficXH(_s%D3 zH148|Oaeh}LtNEU3V2_=R$2WW4~X0F06%8{!jzzy2f4)VFCJ8ZtNVn5Tw)6xWMHWm zk2%P__)v-Dsi240$adp*1haGXp!AgQL6AWqhuF1xNalj#+C{lk53w1K5GFHv9br`i zrd^RcT;gy3Qa--Tb5M`co3B1-f&LK^mNMp)gnLi^mwG?#CD;oR^4+pjc*$@A~HEFVsX( z;h^^^Y0{aAtxvE`9a|XO?b=3~VaL%rVk@u4scnvn=M+~;^iH-pdd))#FGr*7DUiw z&{M2({^; zw>^{3leD2;XXHsuKoHm?Kv0cO{1PufD-j~ZubklrIsXB~)g;oh{G30BY~|Mg|NejE z^Bg%>F=ireqlu-s(qnQ!kYBjb$GSLJv98Nmc~IlC>^(%75@ep^Y^WVrLykwCc8;^b z^_*mbK3Vb8b6o333xg)1S#ZRyY681C^p|4%(7bUD%`1HDU6haA{=B$baV67wfFJ~# z)q(?JCPIY3k@E_H2t$dfT9%N_iszi4BYjK!1*)??2Ch`%R)8RtSs zvKTT01bI+#r3#Ow&SC0*2NC2!y}|}Hzaj=5y2^=L`k;h->q!PHce(Qs1PHFT>IPNe z%U_iopykf35hBbIud?D@h(Jnf+Fm!GS~22i9SYplY!KgT;+I#;ox>4;T6Y6i(mD?W z8LXE(ry+tAzq!UP!s}viqZ?*e1R(nHKoHmbS~nQLeb@h0^J%s7-xPycXpgW1Ztx9e zW2rL^7r)7=?%aQ$6g)U5ZlK`lmCf63SjnM!L+o?ADfa1w&C!S;`$j;Oa;zduIqZiM za#fiw@p8BTYQ1Gu3!5>S6a<0U3Irv4JP537#$-|uq%P+c<5=uZlpr;kG>6rFzAKe_ zA8)@u^Qp?RqB%7YchM74LEs6Y2CjrFmNWmZ{vJ8v8_eP7j6s;}UV58L=9)kLD8s$? zoZAen&uvDIdhZsuxgJlHNb0={{KZB->DsR(yI5~a4_WAr7!(D99IUufZ8JfTZ}kov z@&REoWcXeBd~39SM1EyU*S|#92oRLG^&kkoY!IZ(a#!Gsyvy49AcE$R-eb$Y8?;c~ z=udz{op%lhnn-$2v^4}l+7dueW~{r%{yrsvW@YYX$3i}xcQ~VU;$MOK2?GZ7=>B!@ zgaJcB?_15;ZqBa7PpuCqqS&z_WYbo2GJLxE=HZOioEB9-tCWYc3Y@y(&c$6f4YwzT z)_P3e^5GYoio|IsBF{8u(1rbO#L*&N55%S9yIbTOMC`I>Zkqw%Yy>nYJ;^=!$YtHFLU-=M6i@edC)b1S|^W5YA zRIFa#=(8Z=Xpu&mGx@=!ntARSpgAQ@mSt^PWS-`1`LMD&-J?bJXwK?{m0ahv$SuuT z_I0@ubdMHsekQgx8tcvFT8o5%6Hp74zVY6oc})9U-?BIS1~*iLMP#hz6m0jmHP1b3 zH0RZ-rfixPIiWer{Y!AA*Dcix&DmOh7-y*#@p&#rht2F0K+n-4^)#oGWe68ut*y7_ zq}MFYfNGIh;A8|Kp^nQckTNZ?UEi`Mu5V%D=;rmR=8X93zBh4nqiz2}OnVa4obS<% zb|uY82wcJWrcG&9S<=Cm*LkV}DXlCw3ZM&i$Gn{JYAUWsi(SAWF?RJYnenscN=ks6d9-6S{HoH_A7 zu?4zG9;!LZ$_8@-qMPJJnv*c1H8*a$N#3V9yS(;tbEKQ(dzus4>zH~OQ5_?<+C^VW z$L#x#+iKk+*93$5f9JjjxVY;UxwGbYw`&$m%5;l7NpsHqIEG=?IhA4>^O!+5+V2#nDN0UM32t_EgIwxwG3^uEi>ypH$c;6pL6bm6TDRE)!MRZ% z%DN8YlB?TeQ{Pg0`$4W%x;;+SoJGxgb9=0t>>SN0n-au>7Tq2fd?Th!J8+%rj&8E6 zYEGAy6*xJ%J#Mc#1C|-(2pipGkJp@tG26K4>h|~-%{j8!&WrBRO?IZ{ly13%`%B#( zztWt`d**P_)$OtGTd{iJgZh`#S=8T_wj4jaZabL~(JG5OmS)kkFIpEMBtl@jk zP~Bqh)QmgBIS+Jmd|m76Fg}8-j&89X--%`OmsjVeRX4{WnzJzK2laTHSlwc`(VYHW zUg0D_aCCG0t>y%~wFxASZjM)K&iw5GjGAt-k7`cF-+^4+baVVvbIdF2xgO~D*z+H; zdU;@3&YfgwvZFO;!|`g|E9+*er{*~Sni)p6X^}+DalcoHM_RgJ`Au_HE^EjZXpu{r zbEofgevYp2#(S~tO|2a65wu8o&2fl%!=*si#1@+4xx5>fYArHcbK351#m~_dZi(i! z47caDK#LpzhpOV~ihPT%RuA+o?d!GR%#INe*AHTJpQAxsbab_=1lWn#7(O%?qxoT z(LdKsVxzT4Q_VRVJe_NzF7Jair={y~9_eY3`QQ+0)@UAp>EfQQZ~5lOQj9>1h};p5 z>y^_>?I@wTP#3l_Z&Y=5E4HpVH|<&=+{O$mjz+Rh&jJ2)gD$sU*qE~`;fA3OY_Ash zPHxy&J)OrXJ+h6}5}yd; zWTfPYzN5b|^cW;oOZ+H|dXEm%TW_qsW4AE$`(mt?xG9X7N`1Lq(05o3wn`6LVzoqN zVfg=2mpdnYM>}EY!Az`{7$b~cHHvZ8>N{2oLl1IdwZw7545)zYi0j1Jp>KFDH|Rzs zc7;fITg7N}#-so1*gEH|h6hVH`9 zN}E!p~rKvTH=B*f|^8?&69l}g`vlJv09?616#E(rUExt`WelH zp}T`vE%CK5niMa|jlaHQp)mBoFjh8drROzjqA>LMGFD6cDvX;`qq%L@&p0CtJ?@Ov5^sg!`rwDW z?M?u8i>iqn*FFR-@F_OHRdr*)onLv(t{;&g3_VVb)e=7m<4UhUZq)T1DZ*H|rq zT?pwJ1>O7Pt*`~~wNO1=ceAltqKYu4d|Q`a=kzn;g`o$$v07rBFjCev;c=S2W34ds zKsZ)QoD@bz`eq&w>pSpLL{{mZJXTATaArpNDFt}wqVK2=Ms0wrT^(AWkKEwU<~)xo z^$oLyp*#LqEwMuwjoSUpo-lpKHDTy+cC40gD8NQ-T<(&$y$u$I9w@|WiO&j{EziQ* z%hjsnsehy720bi~ts)XDgc1Me$ht0lVVJ1zy~ZQCXbL%)W^z7~ljVff1vRv3D`7ON%x z5k~CwFZ}bAs?siI*mz{Q_A_Y#OduoFhg`0ZH{pYXq2Fd=wZzZDcXy?A3c~a3q82Y6sR!d9}hJURXb%RarAZ%R` z?jE#zOADNm8zTPb#KTqXvck421jsqN0Pf|qM9HGe$Q@*AiH5>BzpYwrdbYl!pD=O< znOb75Foq>h;Z956u}c`agG?=Pqp10`0kUuRXvSRM;8cu_${l0=EE1u@n6#v2-ej~D zM(!9>ONYonjBN*K9gOf7Lt7$;oE@-Ri;fer2m!`v~Zmhf_AhOcp!$IAMS z7-8fNGPOi6VbnbKGrz^_J7&1%9c5~PZE{1xv*PS-);C;cMzP#crk1dnm5T$~3bPjR z>xRCe0>!)Ljxn`B%i{FjQnYDX?oG7(H>@Xjgt=J+mU4W~*|q$_q~#BCeD3&C3q0ib zBTt9s)nDAK>jpb>hnHFaJFcjBzqEArrfB`$I9_}IVzt0jj`wNZntKH;k4dFUPwv=K z3!LZpUpw^Ws-@*WP`qpI$WjXgy7L%kL`fbWYx!7r&ivegUHatD@L!o^JXK;oVqcFtQWs&jnquu=gcdPFh z;F)(wsRicA4KKnHxDnMiVA&AW&fFoTmbfL1ud7<}KEm0H@5mieYKbsm)Si;a-U$7S z&xMgYq|_2)v3uWV$cS?d7C$&Itj{iAhCwJuf0kb$>yJ2Isz;=#LsBu4UR$rxf*WAIR7O?l> z6c`Q*@@7OOVdM@bwFEXYq%?Q?(TPV2+N6=f$Q?{-iRHqWv-C2*_v$+i3nO}{n# zcPOa^Frf(Xu8(_t!){b9Z{y2gZ zf0KlfJCM{88-=mtyXpMFN>0PZ-GY+W8%;1x$`F<6bXs3!cjHxr0b8kVEmV`?|RE=SZ!;pg+TxJBHK}RfVzt z53jt%ue~sG2a#H0yf7MEIGMKq{vwRrL8O+*6h=jBdG@ett6urjAhM_)L}~$Fb5H@+YUvbifb}!~pGL1z?4Io{ zADXodF{K!BU%ND}6Z#>&gmHFc9ZrRQ#tdO(9U9A(;-AERs&d$D6ULE;3H)lOC7zTr z13EhwFONs%e?l%9<~~{k(Z;bI?L(H*fcLT-N`? zj~`vyY}pO`g=2Zz&VTsrSC!^;AG^yhAKIqNr7158wb2Z+DXfdLn^B+)+tlmcD{dOK zjJBy(8MAH{o*Da#n@V@=fB5meS%G)yg$?<$+;j`+Sczh-C|ZIw+BTh-q28_vQ12*ihq zK*?s^@)c;`Hi*GG?An~o)@CIJaTew>$SlgjJ)-n@ty%2q(lXkt`y!C(L1x>;{zo9* zyByi={cunTE;#=YXkXXNCvfJTU z=bktT5z2M-+;GiwaT5i28r_e?48Q=X4vx#J0Ke?N3+p&C)vzoAbOpWMLV!_9(nDzC ztSVS75<{leS)feq@feO6AkG8uoIF$uXORq$FW_p-v*pmqRfTfM&lQX-lVA68a5dx8 z&bTNsgh z%4%6|1PUdFY{gihM+W;C83V*70G@dv=Fr10i~;hjlT=Suwd>`gETGC(Y~z`&-VSO+jbeqI4}wXg0o)Hb<#UI7uh zf^lUc{O}{#`o7*xG*)8BR(lH^UYdd~!~hXzftz=OFuOBArhEijLFes54P@(vdO^;q zfc)9%-;FDiV9ttgRkp+xG)DR?xvFb{>aQ|l%3**Q0>E=O*KUkg43LYRJQY=f)9;kP zmXl1KQyD-pwcZMngQ_CuNI5B zlmT*>6IWSPR>_G)eHU08E29&-f^nrH%SKIo-&1g!<57Tsos2DRpmFn>U^wp$kX6z$j=pwC({L2qD=3i=##;wu@gh4 zPFi4NiRPGl86aL+ph}k^7|<9X3s*-~P3+nn2X5d2*C3u^{JWXcnR_^m`c7o(6?1p3PFOdU`&|=dxgMN zpTIaQ6p0~M3oMZ7N5ksy9Szt`=*QhK8h!qwPG2dZ=XMj9X3zfC|)_vdU`DHC+=nBS` z$*@Fi*g96l5Ay*rWUHeEs$86o@5%r%%>v_=&BN@#0J*I;Y&jpig@8ZL;-6 zU1aDA#+J$Ofi3jml#DoiA%<*u>p4;T)bOA78pA)+Maz2TdwH72I&TGJl#^ah)z$3+ zLog?isqN~6Izd;^4`w34YbewE-*)?C9x-Gppgt<|_3cfVQy3s>)^~1=P_9eHqPa6& z_NtGnTDUkPDw|v_ua5*>!MHLB{?A@?@cCG5jff#vFDx*9Qz*ts28iMfVEfd7P8g9G zAj2BK)@Qx?`|iG`Hb8=|U~HKLciBR>4?T?Gn;5cn%L0eXJ;ZvI0U~#(lXNB^f5Dm; zag5D$sfPbhm0;S$U(g$BOK>TNc z8Yh3pRT&^lG;|UssNM6%nmCCdS3Mdc!Dl2GS0=%E4ITfVRI7N@8Lfg4GWEH-L!(`% z)&Ct!5eA6+06Z&NL}T=4fDCjJ8mX#!wd*CSnoPB5g#28=m@@f|QGZ!LU-Zm3_CWw* z$kk>GeD*90s)_;PI{=>3GdJR@43KZ&s@1~-zO5>xF#>c2eZ#^D9;!BkO3|i9pX`Er zOoWiBWftgupe|O(3=m&iU`yuXZ!JMSXpFXg`PoYJVXCWQO%R|f7*{61@FuX;wNPpe zGr|!=wx(EMP32uUGiHEDx4@Q7S+Sd7fV|QKw${(N4uEXsYKjP5!Pqhp)@uq|bMBl% z0K|~3p%%EZyet;(3=pdUcxsM{$CShX`IY0}R5h%v3BO@zAy@yZ59(3W74-c}^uhAY z;HqHqTr9DOAy?g+IdR{p?r`BOoXc(gsf6`8u%3<)+R z!I&}$7HkevwSFjG+ayQ~nQCrV#mO!T{0R0xi9JFmfI*a+F4+J@&33U!T>p@B^rC*XT5zV z=bbH)peq<#CczuF(EI6;SY;4HwsN+Dtu?d5F>*6N)CJ%PdbAw7AO^@tC$yDH@aUbo z7&@q3t!jk?UBS3AUGS8>=&~beIZV4EhFrb27cE))Ys?o65T%@_>Z0DH@B(GtR)B01 zhPv9eZ5`quSF^(qp)2SI0!)Pd2TYlsp*3z4G-VP(rhdaU6UDD+6-*ZeTB9m|F0=zR z#Q<5aHB3zvt@SOs|385o-5LS9f-w~_TI~mInT@>hxXVHanYv_wwxjZ4Gr<6n@ng8! zzN#X67z1RPkKw9&au;mPsH!49Mu4thT$unD+CqmfeT71aAzOzn5Yj#$hBF3;M;3U| z(u-3y2FUzvV5{}W?&!s2t8E)3=nDD?A#}n?O41YI>I<8(J|>22rCFdw$`{C(0pdps z6s%R|ttH4zZDFg}K)e4YTXotZLsu}ibSLy5?D(r+K6tXG3-o+K$kj^dD^?G|@f6d= zNuzt02YrX5KBmhjZ85UX{{ZcdER}4B0GpCvESUg1wL?wCZfgin#E_?W3k;hSgVBfq zVvhwDo!N`ghyn6iJJi&pvUkt~$W~B$6JT~%P|v40Npk`UW@w@mo!{vJ%}SXLLI}AU zX@PbpzrmuA0b)G?tA?U37$8rz$8*#%2YtI>hH%7JnFRgNjAO>oO5t#|uv&EtM#PY- zUKV&YqN4?#Z!L#)Dl0)w=!B*on$3eRPPTS;LVm7b zY?&T-+ZO8C*$}pfAzOJm!&dpvzrfm-0iuBghCNRSG`<-i`*((|Z(j{Wb(5`R^+~;s zaRvPV4Klo73vK#I1@u~C$d+Fh*y{Gqx0qQOAU?9dswzQP9Wy|7>H=G>A2h%>CtLHo zAVgO%woHg$*g_YToP?uPV#wA53k<9>1y^N&@Cx|u`)xL4!~oe)z*enJ&(R~u)>wfM zUBTEgA*R?uk3X)9UPuht`d$GW0)h&LVQOWv$Skp_Z=DYfi|Mkwgr~d-MSVAe10)i3 z1^v96({`%b3@SyBq1*3v#rGtHEFHH%+?1;5*$fbWTA*Xq@RFuoF+djT3Rj&674se0 zJ9I^Wu3%i50H=0^t>eeW;Ht!stzBKsxrXQYF05miE^gTZHe@oBq+b{VWR`Al)jxM= zW@DT3tKSXzxq@+J@*CC-uDo|bFtrjxuGUx}A>nTX%m8u50)0x9LaSkbd}eL=U%l#U zt3r1~=nDGLajZnUJ8}BqozX>e;Tdp3$kklv#g512G~blz;xnUrqZZmVJ=5iFb!k1_ z?Aqzu(mg$pUor{ClF6?{57boF%WF_m#E_>kJ0+}j;PmhXXjKf5=XxN& ztDC~}`sDXcPvqwc#?{jqYGu_Erk-Z4iBW+NGS$Zd0bNq;UeOkA0kOyep3lo*6~ju9 z>hFc=+o*xF{)w|E|gp9>nfdQhK1>PJ#jqNZ45j z1_b%rGA9SVk0FE*a+N6(u0qyM$IS)?h$JNZN`V1F{f4ifYF9aiwLo8Bx~$p{ zt_D@ki2g~ghV(;%u3%j0;nRPWDbv#=bPTG35HfWN`pWN`;h2o+;x#g6T52 zKRh)ml!)a%dFtFB`MHAeWG27q{ZakZd!E4Rgcvfl*8)`oa%0SAfcV)0qx(I^kq851 zwgJx5_tiu*MEaf$H64Kb?vS8=aDePYmjc>0&GN zZ_8f9c9`k%f|Ey;pZD*q?R|F;*#{#)SJ02gBf#29(gE&0`yW~jG305G1+Krihg-f3 z5GyS3>lZzOO%q^%JTe$HwJ+N;4AWFouLdJPS1`6rfF*~(mUuiIM^?m;txguW_{1Oc z5d%cL1p@tl!Y-Wwa{Cb2>efF2>oT%+X9xmx1!K!}!oZ=hHLH&YXVJuvt&EeqqFr ztwO`$yINof?sG9fw6egY8%^I@f{Y#xTce-*1)EDyZEYEj2wlP0G7(;}h5q|)AkGYl zAzSZ$0$bDO)I*^R5Y;X4Pgq&_W`OMe32YrXRl#?~w_JTvhv*9W_n6M)6>1-7%gi+) z8r_f(a`nOjZA#a}h{ga>JPNkYFR%y043J?_aP{Q=e&5kyS`;#L1>?$OxZ4&wyXPx( zeqzYhZ3{%+KZAzB0Ffsewiz(HAVZ>IYr?hPeOvtSXk_RL#+J!2(H82LdfgF5Gj>eGkf)T9*vJPL!yPB4i|=g#GjbI|t6_lrcO)t*%m4aS@#%xrMj<~}Fs_Ou zs`b?X@(M5UJ*i`)ZggU`m_9rIEP`nP_Ok?y7%gjD^O2Nm&amI zPlvM?@?Bj09fR~-!FV#Om@-Z~{o{=f(mG;6O$d1s(A!+`!(_sAG1KT?IpsTy2uznd z#=z6H1?7=G)ziH(=z6Z8e|e2Lu;5sPSK;9m?DU8sQ_U@qr$BjpQ3i+@3zS`&3yXFJ z$i%ToukTIYRm^u|ZF(daS4Wcrg4Ca*H7#nxyja|dSZ)zARn-EO4!w_!1Or4L3-nm} zG1eOlkh90(*NgebVcMXoI_f+ftIihE>EDefGj=|)MFz#bC~vwBF=VRnc(`tKa6e2j zKzwY053}aM{Ko(}YCHl=efp1YL*J=Bspmge(659*fHzR6=UItLSnv@;w$#(P>X9T* zTJz306JffjYjp1<|0fvGnJyzIz|`8JJAB8f)f14PD;QIH^z=WCYu-+nh7A!Ro_?8#_>Ntxh~C2hkuMg&^`^(r6Brf4cfz8H0kX^_=Rym$GXCEgG!SytdlK@yMS^i< zX1@em=G~|fD3cg+bz~AAu-}#$!z0thV-(=I`1l`e)EOXyoY2W?$CYDoPK>`~s`X?9 z=nBS^32?$>e9;*%TB21DL#DP_VCcG6=zt6mKM?SID@ITTNdGt_IQmi;CRnmnCk_d^ zg8uO~7BA|ycbsZgDLZ%QQNb^a5OSq%duzS$m3PsGC*FRf~p#y z*1>nO$vYJZx`MG~5^OjXwh}8|Lcb@5Y(-h1U8yPP4Ga+LERZp^F8Uw?;&<86iNiSd;PaTKj1!BlnFZF^GeW&8xWHcM5iv`o1r}LDarwG~| z)8)QtFxB_jLbL%g^=KL*bOmF|MEHI@Or1-+jJbdqG8Gn&I}yVRqTMiEjJE~k`Xv{- z7z1Q-JY1b#(;Ej!7@-(H$5d`dOgS({5Ph zFhI_m4qFx1+SNYUI-x$PM^RVM?@V=e?ogXRTV~*uMF@}(a#dmmY*z`JfHQIih>jMh z^jlt>mNGz2m;qOvX7<4vm0azafe2l}xH1vmv4u8%P#p;nL$(5E!d9iGo6v9=AVO#2 zw^N~!IHP5{9555EzHD(4<1o2eI};JQf^lUcJZCTZec)F(3?qhIy|KWVElF5?F+h}? z1>3iBM__befDE4nTYvNqL^mc|^VKJHgsz}pg@aD`g)Owz=0JQEV#wA50G{z#vSH3= zfbcrEW~qVnR#FHK9+@s1&W5W@bFyMhNUp}sMue_lTFfMJ{wg<5f+DbcSiBi^aBpaXUl>bOrrhJrkh1^_`&JFYVd;;|UBjgpjLx(3@=e15+f^)va&+dGDLovFLkD zmrEAGQ;B&OeHT_|79l=YFrG}``x|A(9{&dIkPz}zW-+R=TY+HQYG8m67Ko|y_^l<# z$&2A?ZJQUEL8+!bU5wu63dWTQ@UAU1N56SEZX||m1gIIzLy??~FnRylgMJD{3zSB!*mNS_)S?+y0EszyMLj0;zu& zMr|@c%B8S1slhcXm`CA5@3KRyv+FaG>*FQ zq3QPwkWHPaWoj$fsb@{pCRNtNWr)xfj4Ko2c9iLj7aOq*C5BvGvlq?1WC!-23=ry- z#p+ig-r0vPqmMFOR&r2RwFf`PDv4YTaS)*^=+~p63#z-{s!Y#?q;T{QLdcZ5`>plQ z-kiq?1k?51Z|$j7=wwV)OqapS;i+D=%)Ya7m*vRM6^tj7-;CvGHT&!Qp)21nj2JSt z&jMAiU%*(y0P%|jGC$3aX`2Bu`wG}9k}uu&fT7U}1n3IJmI*L=1rB%$*x&pULavfl z!1kF!< zf(1(79-PTk76ZgK3)F4X0bP&*@>|t(^~=s17dz!UH)maq2wlP0G7*NXhOKt_yW)tQ z7_!x00eX~7T!RGz)5S7dz<`{mF?%yWez6*^7Cu_x+Xr8%PwHXR74++Cots~)o!}an z+LksMeT)z?)yV=g?`A~+3=r`aIQAeM&7A>q`x>|k?@+>baQ}G?B6J1g%0!qq5w@mg zt%%J$F=VTu1^$liii0Nxh$st;>sSb@D+b8riLf>J`6A!J;d~+@bOmF}MEI{Qw8et6 zh@BX+Remje9~@fhBh#`NAi7y#XWV##rppVS$;f_}Lxy5U0< z>e-V11nrp^vQ@~*vraXvJl%F-Tg-IP%IMx<8_y#`rpxGcFty@oN%T@OwRIgLbOmEd zN2vaEufC?Y?V}#p2M|J@vLvCZI@Icj(VqdLh6RorBnT7X!f_ab-a`h|;CsTi%z%Tki|B@R`!{d ze1FZ=bps-F1!GHhLjT#$)Agz`?2P-O8s6>>(L)9z)FSbLj7J(>E2n7^I#NZ zy3Dl^o*J|og=HaCRm+V?&=vGctC8SXCFzN%^r zZWti{-RSraR=dF_X&70^RrO5>ussRJRgv>*H@FF=W?gEFVSx}bwZsDDlB>NH5MNoK zz&D>`7-l8Ndz(;KMc;eh_g+_#&B)Icj4LyUw%rU{9Rdm?AY#bYBnt$!tB$dq0V2%; z5kIU%t6_k=ycxC*uRrg*aL=8B2wg$Hg4;ysU*9>JqMFTxg8T7J2q9O)peJYl96gNb z>IS&}ymz8FhmKyMc23Q4xs@5NkM?FU_6-~Sau7lYTEaIB6MQNl(fJAF*LL3 z_Y4rTEYLN6KL$|-$emkkYcISA6B60_bqf+~K!UMl5)9f3Td_xn;5>#Hvem=_i(}uz zJvau4krpVKJQTJVAXjaLt#ex*p*qRdcj}XB7|req>Q%^&|9D$}e4%=m?LWv<)!P{Z`RKdw_1wzUGLck%)&7@}zEpE8Y7`Qa{{sV7e%shMN4>za@4f43KTpU@EOaMT~c3 zYGxX`peqtQa8c?7&M`4{S}3c#6s*hHOP!pjGD6l}&4AfJm~y z&m(qYlx2WCu?Mzl7q5ZpCR_jQL58kiY?%xz?1in~nTOgD$$pq@b+^Ex?-!vtQy~@* zb1iUhPjyrV1LW?#u+^@!{d0L_>yi4T?uD+P{~`s((f6HD{j#sG(wbntAcS0nL0|iz z5SlyF#dxE8KMMZ{0~*t1@;-Q)zvOGwC3*T`9};v0g~ zr~MPW3=sV-(BK!E%I?{tV5+;_z6{Q-V@*4BgcyNyOgNB12z uGF&rJ2b@E<1L|hTeZYBhJD^F1kONNRI{_s!L>_R4+zIIC+`JPo_x}J(Cx`9; delta 242672 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%0D_a33b0cjg{C&`wu{GYu!*6R>ux4enS?a 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 z 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 QttKx`kj$OGBVf$`11T_(); //TODO: REMOVE AFTER PRESENTATION - SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.fbx"); + SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); //TODO: REMOVE AFTER PRESENTATION diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 7f1fdcbc..c6d6bec1 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -71,6 +71,7 @@ enum class AssetType : uint8_t #define MATERIAL_EXTENSION ".SHMat" #define TEXTURE_EXTENSION ".dds" #define FBX_EXTENSION ".fbx" +#define GLTF_EXTENSION ".gltf" #define MESH_EXTENSION ".shmesh" std::string const EXTENSIONS[] = { @@ -84,7 +85,8 @@ std::string const EXTENSIONS[] = { SCENE_EXTENSION, PREFAB_EXTENSION, AUDIO_WAV_EXTENSION, - FBX_EXTENSION + FBX_EXTENSION, + GLTF_EXTENSION }; // Error flags diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index c79d0596..f2475216 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -199,7 +199,7 @@ namespace SHADE { AssetPath path{ p }; - if (path.extension().string() == FBX_EXTENSION) + if (path.extension().string() == GLTF_EXTENSION) { LoadGLTF( { From 1ea4689a8999f53c8d16e0144a2e117dbb0f5b77 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 26 Sep 2022 19:10:32 +0800 Subject: [PATCH 226/793] SP3-237 Mesh write to binary file --- .../src/Assets/Libraries/SHMeshWriter.cpp | 48 +++++++++++++++++++ .../src/Assets/Libraries/SHMeshWriter.h | 14 ++++++ 2 files changed, 62 insertions(+) create mode 100644 SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp new file mode 100644 index 00000000..965e7d68 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.cpp @@ -0,0 +1,48 @@ +#include "SHpch.h" +#include "SHMeshWriter.h" + +#include + +void SHADE::SHMeshWriter::WriteMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept +{ + std::ofstream file{path, std::ios::out | std::ios::binary}; + if (!file.is_open()) + { + SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); + } + + file.write( + reinterpret_cast(&(asset.header.vertexCount)), + sizeof(uint32_t) + ); + + file.write( + reinterpret_cast(&(asset.header.indexCount)), + sizeof(uint32_t) + ); + + auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount}; + auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount}; + + file.write( + reinterpret_cast(asset.vertexPosition.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.vertexTangent.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.vertexNormal.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.texCoords.data()), + vertexVec2Byte + ); + + file.close(); +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h b/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h new file mode 100644 index 00000000..4a1a3e6b --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshWriter.h @@ -0,0 +1,14 @@ +#pragma once + +#include "../Asset Types/SHMeshAsset.h" +#include "../SHAssetMacros.h" + +namespace SHADE +{ + class SHMeshWriter + { + private: + public: + static void WriteMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; + }; +} \ No newline at end of file From 3e2bcf28b67b64960bb407c4aee3dbbfabeec756 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 26 Sep 2022 20:59:20 +0800 Subject: [PATCH 227/793] Added texture loading that is almost working --- SHADE_Application/src/Scenes/SBTestScene.cpp | 10 ++ .../src/Graphics/Images/SHVkImage.cpp | 6 +- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 4 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 47 +++++++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 62 ++++++++++ .../MiddleEnd/Textures/SHTextureLibrary.cpp | 108 ++++++++++++++++-- .../MiddleEnd/Textures/SHTextureLibrary.h | 22 ++-- .../MiddleEnd/Textures/SHVkSamplerCache.cpp | 9 +- .../MiddleEnd/Textures/SHVkSamplerCache.h | 19 +-- 9 files changed, 240 insertions(+), 47 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 01d2a18e..c90d660b 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -54,6 +54,16 @@ namespace Sandbox } graphicsSystem->BuildMeshBuffers(); + // Load Textures + auto textures = SHADE::SHAssetManager::GetAllDDS(); + std::vector> texHandles; + for (const auto& tex : textures) + { + auto texture = graphicsSystem->Add(tex); + texHandles.push_back(texture); + } + graphicsSystem->BuildTextures(); + // Create Materials auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index b8bf273e..b6f20af4 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -26,7 +26,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkImage::PrepStagingBuffer(void* data, uint32_t srcSize) noexcept + void SHVkImage::PrepStagingBuffer(const void* data, uint32_t srcSize) noexcept { // For creation of buffer vk::BufferCreateInfo bufferInfo{}; @@ -70,7 +70,7 @@ namespace SHADE vmaMapMemory(*vmaAllocator, stagingAlloc, &stagingBufferMappedPtr); if (stagingBufferMappedPtr) - std::memcpy(static_cast(stagingBufferMappedPtr), static_cast(data), srcSize); + std::memcpy(static_cast(stagingBufferMappedPtr), static_cast(data), srcSize); const VkDeviceSize offsets = 0; const VkDeviceSize sizes = srcSize; @@ -82,7 +82,7 @@ namespace SHADE SHVkImage::SHVkImage( VmaAllocator const* allocator, SHImageCreateParams const& imageDetails, - unsigned char* data, + const unsigned char* data, uint32_t dataSize, std::span inMipOffsets, VmaMemoryUsage memUsage, diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 91d4f2d2..39e695a5 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -107,7 +107,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void PrepStagingBuffer(void* data, uint32_t srcSize) noexcept; + void PrepStagingBuffer(const void* data, uint32_t srcSize) noexcept; public: @@ -119,7 +119,7 @@ namespace SHADE SHVkImage( VmaAllocator const* allocator, SHImageCreateParams const& imageDetails, - unsigned char* data, + const unsigned char* data, uint32_t dataSize, std::span inMipOffsets, VmaMemoryUsage memUsage, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 445d6119..45e52bcd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -30,6 +30,8 @@ of DigiPen Institute of Technology is prohibited. #include "SHGraphicsConstants.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Images/SHVkSampler.h" +#include "Assets/Asset Types/SHDDSAsset.h" namespace SHADE { @@ -93,6 +95,8 @@ namespace SHADE // Create generic command buffer transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::TRANSFER, SH_CMD_POOL_RESET::POOL_BASED, true); transferCmdBuffer = transferCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); @@ -224,6 +228,9 @@ namespace SHADE renderContext.ResetFence(); + // Bind textures + + // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) { @@ -252,6 +259,15 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } + // Bind textures + //currentCmdBuffer->BindDescriptorSet + //( + // texLibrary.GetTextureDescriptorSetGroup(), + // vk::PipelineBindPoint::eGraphics, + // 0, + // {} + //); + // bind camera data renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); @@ -457,7 +473,36 @@ namespace SHADE transferCmdBuffer->EndRecording(); transferQueue->SubmitCommandBuffer({ transferCmdBuffer }); } - + + /*---------------------------------------------------------------------------------*/ + /* Texture Registration Functions */ + /*---------------------------------------------------------------------------------*/ + Handle SHGraphicsSystem::Add(const SHDDSAsset& ddsAsset) + { + auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(ddsAsset.image.GetMipCount()) }); + return texLibrary.Add(ddsAsset, sampler); + } + + SHADE::Handle SHGraphicsSystem::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets) + { + auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams{ .maxLod = static_cast(mipOffsets.size()) }); + return texLibrary.Add(pixelCount, pixelData, width, height, format, mipOffsets, sampler); + } + + void SHGraphicsSystem::Remove(Handle tex) + { + texLibrary.Remove(tex); + } + + void SHGraphicsSystem::BuildTextures() + { + texLibrary.BuildTextures + ( + device, graphicsTexCmdBuffer, graphicsQueue, descPool, + globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] + ); + } + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { window = wind; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 7e652a02..5a2b342d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -29,6 +29,8 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h" #include "SHMeshLibrary.h" #include "Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h" +#include "../Textures/SHTextureLibrary.h" +#include "../Textures/SHVkSamplerCache.h" namespace SHADE { @@ -188,6 +190,62 @@ namespace SHADE /***************************************************************************/ void BuildMeshBuffers(); + /*-----------------------------------------------------------------------------*/ + /* Texture Registration Functions */ + /*-----------------------------------------------------------------------------*/ + /*******************************************************************************/ + /*! + + \brief + Adds a texture to the Texture Library. But this does not mean that the + textures have been added yet. A call to "BuildTextures()" is required to + transfer all textures into the GPU. + + \param pixelCount + Number of pixels in this Mesh. + \param positions + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + \param format + Format of the texture loaded in. + + \return + Handle to the created Texture. This is not valid to be used until a call to + BuildImages(). + + */ + /*******************************************************************************/ + Handle Add(const SHDDSAsset& ddsAsset); + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets); + /*******************************************************************************/ + /*! + + \brief + Removes a mesh from the Texture Library. But this does not mean that the + textures have been removed yet. A call to "BuildTextures()" is required to + finalise all changes. + + \param mesh + Handle to the Texture to remove. + + */ + /*******************************************************************************/ + void Remove(Handle tex); + /***************************************************************************/ + /*! + + \brief + Finalises all changes to the Texture Library into the GPU buffers. + + \param cmdBuffer + Command buffer used to set up transfers of data in the GPU memory. This + call must be preceded by calls to cmdBuffer's BeginRecording() and ended + with EndRecording(). Do recall to also submit the cmdBuffer to a transfer + queue. + */ + /***************************************************************************/ + void BuildTextures(); + /*-----------------------------------------------------------------------------*/ /* Setters */ /*-----------------------------------------------------------------------------*/ @@ -220,8 +278,10 @@ namespace SHADE Handle graphicsQueue; Handle transferQueue; Handle descPool; + Handle graphicsCmdPool; Handle transferCmdPool; Handle transferCmdBuffer; + Handle graphicsTexCmdBuffer; SHRenderContext renderContext; std::array, 2> graphSemaphores; // Not Owned Resources @@ -233,6 +293,8 @@ namespace SHADE // Middle End Resources ResourceManager resourceManager; SHMeshLibrary meshLibrary; + SHTextureLibrary texLibrary; + SHSamplerCache samplerCache; SHMaterialInstanceCache materialInstanceCache; // Viewports Handle defaultViewport; // Whole screen diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index a6ec4c3d..2302fc9d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -22,18 +22,49 @@ of DigiPen Institute of Technology is prohibited. #include "Tools/SHLogger.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Assets/Asset Types/SHDDSAsset.h" +#include "Graphics/Images/SHVkImage.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - SHADE::Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, Handle sampler, uint32_t mipLevels) + Handle SHTextureLibrary::Add(const SHDDSAsset& ddsAsset, Handle sampler) + { + // Define constants + const uint32_t IMG_WIDTH = ddsAsset.image.GetWidth(); + const uint32_t IMG_HEIGHT = ddsAsset.image.GetHeight(); + const uint32_t MIPMAP_LEVEL = ddsAsset.image.GetMipCount(); + + // Compute total texture size and create buffer image copy objects + std::vector mipOffsets(MIPMAP_LEVEL); + uint32_t texBytes = 0; + for (uint32_t i = 0; i < MIPMAP_LEVEL; i++) + { + mipOffsets[i] = texBytes; + + // Get ready for next mip + texBytes += ddsAsset.image.GetImageData(i)->m_memSlicePitch; + } + + return Add + ( + texBytes, + reinterpret_cast(ddsAsset.image.m_dds.data()), + IMG_WIDTH, IMG_HEIGHT, + ddsLoaderToVkFormat(ddsAsset.image.GetFormat(), true), + mipOffsets, + sampler + ); + } + + Handle SHTextureLibrary::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets, Handle sampler) { isDirty = true; auto handle = resourceManager.Create(); - addJobs.emplace_back(AddJob { pixelCount, pixelData, format, sampler, mipLevels }); + addJobs.emplace_back(AddJob { pixelCount, pixelData, format, sampler, mipOffsets, width, height, handle }); return handle; } @@ -46,7 +77,7 @@ namespace SHADE isDirty = true; } - void SHTextureLibrary::BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout) + void SHTextureLibrary::BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout) { // Don't do anything if there are no updates if (!isDirty) @@ -60,13 +91,34 @@ namespace SHADE std::vector pipelineBarriers(addJobs.size()); for (int i = 0; auto& job : addJobs) { - job.Image = resourceManager.Create(); + job.Image = resourceManager.Create + ( + &device->GetVMAAllocator(), + SHImageCreateParams + { + .imageType = vk::ImageType::e2D, + .width = job.Width, + .height = job.Height, + .depth = 1, + .levels = static_cast(job.MipOffsets.size()), + .arrayLayers = 1, + .imageFormat = job.TextureFormat, + .usageFlags = vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst, + .createFlags = {} + }, + job.PixelData, + job.PixelCount, + job.MipOffsets, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits {} + ); job.Image->PrepareImageTransitionInfo(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, pipelineBarriers[i]); ++i; } vk::PipelineStageFlagBits srcStage = vk::PipelineStageFlagBits::eTopOfPipe; vk::PipelineStageFlagBits dstStage = vk::PipelineStageFlagBits::eTopOfPipe; preparePipelineBarriers(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, srcStage, dstStage, pipelineBarriers); + cmdBuffer->BeginRecording(); cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, pipelineBarriers); // Copy @@ -80,13 +132,16 @@ namespace SHADE { // Transition job.Image->PrepareImageTransitionInfo(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, pipelineBarriers[i]); + ++i; } preparePipelineBarriers(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, srcStage, dstStage, pipelineBarriers); - cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, pipelineBarriers); + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eFragmentShader, {}, {}, {}, pipelineBarriers); // Execute Commands + cmdBuffer->EndRecording(); graphicsQueue->SubmitCommandBuffer({ cmdBuffer }); device->WaitIdle(); + graphicsQueue->GetVkQueue().waitIdle(); // Create Image View for (auto& job : addJobs) @@ -97,19 +152,19 @@ namespace SHADE .format = job.TextureFormat, .imageAspectFlags = vk::ImageAspectFlagBits::eColor, .baseMipLevel = 0, - .mipLevelCount = job.MipLevels, + .mipLevelCount = static_cast(job.MipOffsets.size()), .baseArrayLayer = 0, - .layerCount = 0 + .layerCount = 1 }; - job.Handle->ImageView = job.Image->CreateImageView(device, job.Image, DETAILS); + job.TextureHandle->ImageView = job.Image->CreateImageView(device, job.Image, DETAILS); } // Add Textures for (auto& job : addJobs) { - texOrder.emplace_back(job.Handle); - combinedImageSamplers.emplace_back(std::make_pair(job.Handle->ImageView, job.Sampler)); - job.Handle->TextureArrayIndex = texOrder.size(); + texOrder.emplace_back(job.TextureHandle); + combinedImageSamplers.emplace_back(std::make_pair(job.TextureHandle->ImageView, job.Sampler)); + job.TextureHandle->TextureArrayIndex = texOrder.size(); } addJobs.clear(); @@ -169,4 +224,35 @@ namespace SHADE } } + vk::Format SHTextureLibrary::ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear) + { + switch (format) + { + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm_SRGB: + return isLinear ? vk::Format::eBc1RgbaUnormBlock : vk::Format::eBc1RgbaSrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm_SRGB: + return isLinear ? vk::Format::eBc2UnormBlock : vk::Format::eBc2SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm_SRGB: + return isLinear ? vk::Format::eBc3UnormBlock : vk::Format::eBc3SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC5_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC5_SNorm: + return isLinear ? vk::Format::eBc5UnormBlock : vk::Format::eBc5SnormBlock; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm_SRGB: + return isLinear ? vk::Format::eR8G8B8A8Unorm : vk::Format::eR8G8B8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_SNorm: + return vk::Format::eR8G8B8A8Snorm; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8Srgb; + default: + throw std::runtime_error("Unsupported DDS format."); + } + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index da47723e..be984c4f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -14,6 +14,8 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include +// External Dependencies +#include "tinyddsloader.h" // Project Includes #include "Resource/Handle.h" #include "Resource/ResourceLibrary.h" @@ -35,6 +37,7 @@ namespace SHADE class SHVkDescriptorSetLayout; class SHVkDescriptorSetGroup; class SHVkSampler; + struct SHDDSAsset; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -45,7 +48,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------*/ - using PixelChannel = float; + using PixelChannel = unsigned char; using TextureFormat = vk::Format; // TODO: Change using Index = uint32_t; @@ -73,7 +76,7 @@ namespace SHADE \brief Adds a texture to the Texture Library. But this does not mean that the - textures have been added yet. A call to "BuildImages()" is required to + textures have been added yet. A call to "BuildTextures()" is required to transfer all textures into the GPU. \param pixelCount @@ -90,13 +93,15 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, SHTexture::TextureFormat format, Handle sampler, uint32_t mipLevels); + + Handle Add(const SHDDSAsset& ddsAsset, Handle sampler); + Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets, Handle sampler); /*******************************************************************************/ /*! \brief Removes a mesh from the Texture Library. But this does not mean that the - textures have been removed yet. A call to "BuildImages()" is required to + textures have been removed yet. A call to "BuildTextures()" is required to finalise all changes. \param mesh @@ -120,7 +125,7 @@ namespace SHADE queue. */ /***************************************************************************/ - void BuildImages(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout); + void BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ @@ -137,9 +142,11 @@ namespace SHADE const SHTexture::PixelChannel* PixelData = nullptr; SHTexture::TextureFormat TextureFormat = {}; Handle Sampler; - uint32_t MipLevels = 0; + std::vector MipOffsets; + uint32_t Width; + uint32_t Height; + Handle TextureHandle; Handle Image; - Handle Handle; }; /*-----------------------------------------------------------------------------*/ @@ -162,5 +169,6 @@ namespace SHADE /* Helper Functions */ /*-----------------------------------------------------------------------------*/ void preparePipelineBarriers(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::PipelineStageFlagBits& srcStage, vk::PipelineStageFlagBits& dstStage, std::vector& barriers); + vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp index 8d0b6609..6938dae5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.cpp @@ -20,13 +20,6 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Constructors/Destructors */ - /*---------------------------------------------------------------------------------*/ - SHSamplerCache::SHSamplerCache(Handle logicalDevice) noexcept - : device { logicalDevice } - {} - /*---------------------------------------------------------------------------------*/ /* Utility Functions */ /*---------------------------------------------------------------------------------*/ @@ -38,7 +31,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHSamplerCache::GetSampler(const SHVkSamplerParams& params) + Handle SHSamplerCache::GetSampler(Handle device, const SHVkSamplerParams& params) { // Get the hash to check if it was cached const RawSamplerHash HASH = calcHash diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h index 5c775e2b..c1529577 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h @@ -40,11 +40,6 @@ namespace SHADE class SHSamplerCache { public: - /*---------------------------------------------------------------------------------*/ - /* Constructors/Destructors */ - /*---------------------------------------------------------------------------------*/ - explicit SHSamplerCache(Handle logicalDevice) noexcept; - /*---------------------------------------------------------------------------------*/ /* Utility Functions */ /*---------------------------------------------------------------------------------*/ @@ -60,15 +55,10 @@ namespace SHADE /// Retrieves a Vulkan Sampler of the specified type. If this was retrieved /// before, a cached copy of the Vulkan Sampler will be provided. ///

    - /// Filtering mode of the Sampler to retrieve. - /// Addressing mode of the Sampler to retrieve. - /// Mipmap mode to use. - /// Minimum LOD. Usually 0.0f. - /// - /// Maximum LOD. Usually the mipmap level of the texture. - /// - /// Handle to the Vulkan Sampler object specified. - Handle GetSampler(const SHVkSamplerParams& params); + /// Logical device to create the sampler with if needed. + /// Describes the parameters for the sampler. + /// Handle to the SHVkSampler object specified. + Handle GetSampler(Handle device, const SHVkSamplerParams& params); private: /*---------------------------------------------------------------------------------*/ @@ -80,7 +70,6 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ // Resources - Handle device; std::unordered_map> samplersMap; /*---------------------------------------------------------------------------------*/ From 7247faee739acdb8f1d2832ad63f2656b83bfd2e Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 26 Sep 2022 21:08:59 +0800 Subject: [PATCH 228/793] Serialization [WIP] --- .../Inspector/SHEditorComponentView.hpp | 2 +- .../src/Serialization/SHSerialization.cpp | 79 +++++++++++++++ .../src/Serialization/SHSerialization.h | 28 ++++++ .../Serialization/SHSerializationHelper.hpp | 97 +++++++++++++++++++ 4 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/Serialization/SHSerialization.cpp create mode 100644 SHADE_Engine/src/Serialization/SHSerialization.h create mode 100644 SHADE_Engine/src/Serialization/SHSerializationHelper.hpp diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 080cbf2c..889abc79 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -44,7 +44,7 @@ namespace SHADE { if (!component) return; - auto componentType = rttr::type::get(*component); + auto componentType = rttr::type::get(); CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp new file mode 100644 index 00000000..ee681a85 --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -0,0 +1,79 @@ +#include "SHpch.h" +#include "SHSerialization.h" + +#include + +#include "Scene/SHSceneManager.h" +#include "Tools/SHException.h" + +#include "SHSerializationHelper.hpp" +#include "Math/Transform/SHTransformComponent.h" + +namespace SHADE +{ + namespace SHSerialization + { + void SerializeSceneToFile(std::filesystem::path const& path) + { + + } + + std::string SerializeSceneToString() + { + YAML::Emitter out; + SerializeSceneToEmitter(out); + return std::string(out.c_str()); + } + + void SerializeSceneToEmitter(YAML::Emitter& out) + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto root = sceneGraph.GetRoot(); + + SHASSERT(root != nullptr, "Root is null. Failed to serialize scene to node."); + + auto const& children = root->GetChildren(); + out << YAML::BeginDoc; + for (auto child : children) + { + out << YAML::BeginSeq; + out << SerializeEntityToNode(child); + out << YAML::EndSeq; + } + out << YAML::EndDoc; + } + + std::string SerializeEntityToString() + { + return std::string(); + } + + void SerializeEntityToFile(std::filesystem::path const& path) + { + } + + YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode) + { + YAML::Node node; + if(!sceneNode) + { + node = YAML::Null; + return node; + } + auto eid = sceneNode->GetEntityID(); + node["EID"] = eid; + node["isActive"] = sceneNode->IsActive(); + auto const& children = sceneNode->GetChildren(); + node["NumberOfChildren"] = children.size(); + + YAML::Node components; + + if(const auto transform = SHComponentManager::GetComponent_s(eid)) + { + components[rttr::type::get().get_name().data()] = SerializeComponentToNode(transform); + } + node["Components"] = components; + return node; + } + } +} diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h new file mode 100644 index 00000000..aaccd065 --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -0,0 +1,28 @@ +#pragma once + +#include "SH_API.h" +#include +#include + +#include + +namespace YAML +{ + class Emitter; + class Node; +} + +namespace SHADE +{ + class SHSceneNode; + namespace SHSerialization + { + static void SerializeSceneToFile(std::filesystem::path const& path); + static std::string SerializeSceneToString(); + static void SerializeSceneToEmitter(YAML::Emitter& out); + + static std::string SerializeEntityToString(); + static void SerializeEntityToFile(std::filesystem::path const& path); + static YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp new file mode 100644 index 00000000..560c58dd --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -0,0 +1,97 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" +#include + +#include + +namespace SHADE +{ + namespace SHSerialization + { + template , bool> = true> + static std::string SerializeComponentToString(ComponentType* component) + { + return std::string(); + } + + template , bool> = true> + static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) + { + } + + static YAML::Node RTTRToNode(const rttr::variant& var) + { + YAML::Node node; + auto varType = var.get_type(); + if(varType.is_arithmetic()) + { + bool ok = false; + if (varType == rttr::type::get()) + node = var.to_bool(); + else if (varType == rttr::type::get()) + node = var.to_int8(&ok); + else if (varType == rttr::type::get()) + node = var.to_int16(&ok); + else if (varType == rttr::type::get()) + node = var.to_int32(&ok); + else if (varType == rttr::type::get()) + node = var.to_int64(&ok); + else if (varType == rttr::type::get()) + node = var.to_uint8(&ok); + else if (varType == rttr::type::get()) + node = var.to_uint16(&ok); + else if (varType == rttr::type::get()) + node = var.to_uint32(&ok); + else if (varType == rttr::type::get()) + node = var.to_uint64(&ok); + else if (varType == rttr::type::get()) + node = var.to_float(&ok); + else if (varType == rttr::type::get()) + node = var.to_double(&ok); + //else if (varType == rttr::type::get()) //same as uint8_t + // node = var.to_uint8(); + } + else if (varType.is_enumeration()) + { + bool ok = false; + auto result = var.to_string(&ok); + if (ok) + { + node = var.to_string(); + } + else + { + ok = false; + auto value = var.to_uint64(&ok); + if (ok) + node = value; + else + node = YAML::Null; + } + } + else + { + auto properties = var.get_type().get_properties(); + for(auto property : properties) + { + node[property.get_name().data()] = RTTRToNode(property.get_value(var)); + } + } + return node; + } + + template , bool> = true> + static YAML::Node SerializeComponentToNode(ComponentType* component) + { + YAML::Node node{}; + if(!component) + return node; + + auto componentType = rttr::type::get(); + node[componentType.get_name().data()] = RTTRToNode(*component); + + return node; + } + } +} \ No newline at end of file From b375ab9a50a1d649e989e4afa51e895da03033c1 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 26 Sep 2022 23:14:10 +0800 Subject: [PATCH 229/793] device wait idle --- SHADE_Engine/src/Editor/SHEditor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 42a0117a..5bc7f35b 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -293,6 +293,8 @@ namespace SHADE imguiCommandBuffer->EndRecording(); gfxSystem->GetQueue()->SubmitCommandBuffer({ imguiCommandBuffer }, {}, {}, vk::PipelineStageFlagBits::eNone, {}); + gfxSystem->GetDevice()->WaitIdle(); + ImGui_ImplVulkan_DestroyFontUploadObjects(); renderGraph->GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { From 69041980f57a022b4f2a9e45fb963bbdbadbc267 Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 26 Sep 2022 23:27:55 +0800 Subject: [PATCH 230/793] added the base for bank --- .../src/AudioSystem/SHAudioSystem.cpp | 83 ++++++++----------- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 6 +- 2 files changed, 36 insertions(+), 53 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 16b047bd..be280753 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -49,13 +49,6 @@ namespace SHADE denseListener = &SHComponentManager::GetDense(); fmodStudioSystem->getCoreSystem(&fmodSystem); - //result = coreSystem->getVersion(&version); - //ErrorCheck(); - //if (version < FMOD_VERSION) - //{ - // std::cout << "VERISION" << version << "\n"; - // std::cerr << "FMOD version mismatch." << std::endl; - //} result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL, extraDriverData); ErrorCheck(); @@ -77,26 +70,18 @@ namespace SHADE result = masterGroup->addGroup(sfxChannelGroup); ErrorCheck(); - //TODO: GET VOLUME DATA FROM FILE bgmChannelGroup->setVolume(bgmVolume); sfxChannelGroup->setVolume(sfxVolume); masterGroup->setVolume(masterVolume); //SHResourceManager::LoadAllAudio(system, soundList); - //TODO: Move to SHResourceManager (LoadAllAudio to load all .bank files and store SHBanks in bankMap) - //result = system->loadBankFile("resources/audio/banks/Master.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank); - //ErrorCheck(); - //result = system->loadBankFile("resources/audio/banks/Master.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank); - //ErrorCheck(); - //result = system->loadBankFile("resources/audio/banks/Music.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &musicBank); - //ErrorCheck(); - //result = system->loadBankFile("resources/audio/banks/SFX.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &sfxBank); - //ErrorCheck(); - //LoadBank("resources/audio/banks/Master.bank"); - //LoadBank("resources/audio/banks/Master.strings.bank"); - //LoadBank("resources/audio/banks/Music.bank"); - //LoadBank("resources/audio/banks/SFX.bank"); + + LoadBank("resources/audio/banks/Master.bank"); + LoadBank("resources/audio/banks/Master.strings.bank"); + LoadBank("resources/audio/banks/Music.bank"); + LoadBank("resources/audio/banks/SFX.bank"); + //auto clip = CreateAudioClip("event:/SFX/Dawn/Dawn_Attack"); //clip->Play(); //PlayEventOnce("event:/SFX/Dawn/Dawn_Attack"); @@ -120,13 +105,11 @@ namespace SHADE fmodSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); } } - //int channels; - //system->getChannelsPlaying(&channels); - //std::cout << "ACTIVE CHANNELS: " << channels << std::endl; } SHAudioSystem::AudioRoutine::AudioRoutine() : SHSystemRoutine("Audio Routine", false) {} + void SHAudioSystem::AudioRoutine::Execute(double dt) noexcept { reinterpret_cast(system)->Run(dt); @@ -140,11 +123,11 @@ namespace SHADE ErrorCheck(); } - /* for (auto& bank : bankMap) + for (auto& bank : bankMap) { result = bank.second->unload(); ErrorCheck(); - }*/ + } for (auto& sound : soundList) { @@ -452,30 +435,30 @@ namespace SHADE return {}; } - //void SHAudioSystem::LoadBank(const char* path) - //{ - // FMOD::Studio::Bank* bank = nullptr; - // result = system->loadBankFile(path, FMOD_STUDIO_LOAD_BANK_NORMAL, &bank); - // ErrorCheck(); - // if (result != FMOD_OK) - // return; - // bankMap.emplace(path, bank); - // bank->loadSampleData(); - // int numOfEvents; - // bank->getEventCount(&numOfEvents); - // if (numOfEvents > 0) - // { - // std::vector events(numOfEvents); - // bank->getEventList(events.data(), numOfEvents, &numOfEvents); - // char eventName[512]; - // for (int i{}; i < numOfEvents; ++i) - // { - // FMOD::Studio::EventDescription* event = events[i]; - // event->getPath(eventName, 512, nullptr); - // eventMap.emplace(eventName, event); - // } - // } - //} + void SHAudioSystem::LoadBank(const char* path) + { + FMOD::Studio::Bank* bank = nullptr; + result = fmodStudioSystem->loadBankFile(path, FMOD_STUDIO_LOAD_BANK_NORMAL, &bank); + ErrorCheck(); + if (result != FMOD_OK) + return; + bankMap.emplace(path, bank); + bank->loadSampleData(); + int numOfEvents; + bank->getEventCount(&numOfEvents); + if (numOfEvents > 0) + { + std::vector events(numOfEvents); + bank->getEventList(events.data(), numOfEvents, &numOfEvents); + char eventName[512]; + for (int i{}; i < numOfEvents; ++i) + { + FMOD::Studio::EventDescription* event = events[i]; + event->getPath(eventName, 512, nullptr); + eventMap.emplace(eventName, event); + } + } + } AudioClip::AudioClip(AudioClipID clipID, FMOD::Studio::EventInstance* inst) :instance(inst), id(clipID) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 5fc29b7c..04fad1f0 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -81,7 +81,7 @@ namespace SHADE void SetPaused(bool pause); bool GetPaused() const; SHVec3 GetListenerPosition(); - //void LoadBank(const char* path); + void LoadBank(const char* path); private: FMOD::Studio::System* fmodStudioSystem; FMOD::System* fmodSystem; @@ -91,7 +91,7 @@ namespace SHADE void* extraDriverData; std::unordered_map soundList; //std::unordered_map bankMap; - //std::unordered_map bankMap; + std::unordered_map bankMap; std::unordered_map eventMap; std::unordered_map eventInstances; FMOD::ChannelGroup* bgmChannelGroup, * sfxChannelGroup, * masterGroup; @@ -100,7 +100,7 @@ namespace SHADE float bgmVolume, sfxVolume, masterVolume; unsigned int version; FMOD_SPEAKERMODE speakerMode; - //SHBank masterBank, stringsBank, musicBank, sfxBank; //To do: change to map of banks loaded by resource manager + SHBank masterBank, stringsBank, musicBank, sfxBank; //To do: change to map of banks loaded by resource manager std::vector* denseListener; AudioClipID clipID = 0; From 233e7a0e8fcb783311d52d5f77837a57e9650889 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 26 Sep 2022 23:51:20 +0800 Subject: [PATCH 231/793] Serialization fix --- .../src/Serialization/SHSerialization.cpp | 113 +++++++++--------- .../src/Serialization/SHSerialization.h | 6 +- .../Serialization/SHSerializationHelper.hpp | 6 +- 3 files changed, 61 insertions(+), 64 deletions(-) diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index ee681a85..25358805 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -1,4 +1,5 @@ #include "SHpch.h" +#include "SHSerializationHelper.hpp" #include "SHSerialization.h" #include @@ -6,74 +7,70 @@ #include "Scene/SHSceneManager.h" #include "Tools/SHException.h" -#include "SHSerializationHelper.hpp" #include "Math/Transform/SHTransformComponent.h" namespace SHADE { - namespace SHSerialization + void SHSerialization::SerializeSceneToFile(std::filesystem::path const& path) { - void SerializeSceneToFile(std::filesystem::path const& path) - { + } + + std::string SHSerialization::SerializeSceneToString() + { + YAML::Emitter out; + SerializeSceneToEmitter(out); + return std::string(out.c_str()); + } + + void SHSerialization::SerializeSceneToEmitter(YAML::Emitter& out) + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto root = sceneGraph.GetRoot(); + + SHASSERT(root != nullptr, "Root is null. Failed to serialize scene to node."); + + auto const& children = root->GetChildren(); + out << YAML::BeginDoc; + for (auto child : children) + { + out << YAML::BeginSeq; + out << SerializeEntityToNode(child); + out << YAML::EndSeq; } + out << YAML::EndDoc; + } - std::string SerializeSceneToString() + std::string SHSerialization::SerializeEntityToString() + { + return std::string(); + } + + void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) + { + } + + YAML::Node SHSerialization::SerializeEntityToNode(SHSceneNode* sceneNode) + { + YAML::Node node; + if (!sceneNode) { - YAML::Emitter out; - SerializeSceneToEmitter(out); - return std::string(out.c_str()); - } - - void SerializeSceneToEmitter(YAML::Emitter& out) - { - auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - auto root = sceneGraph.GetRoot(); - - SHASSERT(root != nullptr, "Root is null. Failed to serialize scene to node."); - - auto const& children = root->GetChildren(); - out << YAML::BeginDoc; - for (auto child : children) - { - out << YAML::BeginSeq; - out << SerializeEntityToNode(child); - out << YAML::EndSeq; - } - out << YAML::EndDoc; - } - - std::string SerializeEntityToString() - { - return std::string(); - } - - void SerializeEntityToFile(std::filesystem::path const& path) - { - } - - YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode) - { - YAML::Node node; - if(!sceneNode) - { - node = YAML::Null; - return node; - } - auto eid = sceneNode->GetEntityID(); - node["EID"] = eid; - node["isActive"] = sceneNode->IsActive(); - auto const& children = sceneNode->GetChildren(); - node["NumberOfChildren"] = children.size(); - - YAML::Node components; - - if(const auto transform = SHComponentManager::GetComponent_s(eid)) - { - components[rttr::type::get().get_name().data()] = SerializeComponentToNode(transform); - } - node["Components"] = components; + node = YAML::Null; return node; } + auto eid = sceneNode->GetEntityID(); + node["EID"] = eid; + node["isActive"] = sceneNode->IsActive(); + auto const& children = sceneNode->GetChildren(); + node["NumberOfChildren"] = children.size(); + + YAML::Node components; + + if (const auto transform = SHComponentManager::GetComponent_s(eid)) + { + components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(transform); + } + node["Components"] = components; + return node; } } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index aaccd065..0611e4d2 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -5,7 +5,7 @@ #include #include - +#include "SH_API.h" namespace YAML { class Emitter; @@ -15,7 +15,7 @@ namespace YAML namespace SHADE { class SHSceneNode; - namespace SHSerialization + struct SH_API SHSerialization { static void SerializeSceneToFile(std::filesystem::path const& path); static std::string SerializeSceneToString(); @@ -24,5 +24,5 @@ namespace SHADE static std::string SerializeEntityToString(); static void SerializeEntityToFile(std::filesystem::path const& path); static YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode); - } + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 560c58dd..bfc29e7a 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -7,7 +7,7 @@ namespace SHADE { - namespace SHSerialization + struct SHSerializationHelper { template , bool> = true> static std::string SerializeComponentToString(ComponentType* component) @@ -89,9 +89,9 @@ namespace SHADE return node; auto componentType = rttr::type::get(); - node[componentType.get_name().data()] = RTTRToNode(*component); + node = RTTRToNode(*component); return node; } - } + }; } \ No newline at end of file From e42283a55326dd9ca0b050aa634d4046f6119249 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 01:12:02 +0800 Subject: [PATCH 232/793] Fixed RTTR linker errors --- SHADE_Managed/premake5.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index e50e9e86..a7b20144 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -33,6 +33,11 @@ project "SHADE_Managed" "%{IncludeDir.RTTR}/include", "%{wks.location}/SHADE_Engine/src" } + + libdirs + { + "%{IncludeDir.RTTR}/lib" + } links { @@ -68,7 +73,9 @@ project "SHADE_Managed" filter "configurations:Debug" symbols "On" defines {"_DEBUG"} + links{"librttr_core_d.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE"} + links{"librttr_core.lib"} From 085ab50ec7a3f89547100fb2a7d298420e9eb714 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 01:57:23 +0800 Subject: [PATCH 233/793] Added a script to test Transform modifications --- SHADE_Application/src/Scenes/SBTestScene.cpp | 24 ++++++++++++-------- TempScriptsFolder/TestScript.cs | 10 +++++++- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 01d2a18e..184f62cb 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -35,14 +35,14 @@ namespace Sandbox SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); - //graphicsSystem->BuildMeshBuffers(); //Test Racoon mesh auto meshes = SHADE::SHAssetManager::GetAllMeshes(); std::vector> handles; for (auto const& mesh : meshes) { - handles.push_back(graphicsSystem->AddMesh( + handles.push_back(graphicsSystem->AddMesh + ( mesh.header.vertexCount, mesh.vertexPosition.data(), mesh.texCoords.data(), @@ -80,19 +80,23 @@ namespace Sandbox // stressTestObjects.emplace_back(entity); //} - auto entity = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); + auto entity = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = handles.front(); - renderable.SetMaterial(matInst); + renderable.Mesh = handles.front(); + renderable.SetMaterial(matInst); - //transform.SetLocalScale(TEST_OBJ_SCALE); + //transform.SetLocalScale(TEST_OBJ_SCALE); - stressTestObjects.emplace_back(entity); + stressTestObjects.emplace_back(entity); // Create blank entity with a script - testObj = SHADE::SHEntityManager::CreateEntity(); + testObj = SHADE::SHEntityManager::CreateEntity(); + auto& renderableTestObj = *SHComponentManager::GetComponent_s(testObj); + + renderableTestObj.Mesh = CUBE_MESH; + renderableTestObj.SetMaterial(matInst); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->AddScript(testObj, "TestScript"); } diff --git a/TempScriptsFolder/TestScript.cs b/TempScriptsFolder/TestScript.cs index c1ed5bd5..8159a78e 100644 --- a/TempScriptsFolder/TestScript.cs +++ b/TempScriptsFolder/TestScript.cs @@ -2,11 +2,18 @@ using SHADE; public class TestScript : Script { + private Transform Transform; + private double time = 0.0; public TestScript(GameObject gameObj) : base(gameObj) {} protected override void awake() { Debug.Log("TestScript.Awake()"); + Transform = GetComponent(); + if (Transform == null) + { + Debug.LogError("Transform is NULL!"); + } } protected override void start() { @@ -14,7 +21,8 @@ public class TestScript : Script } protected override void update() { - Debug.Log("TestScript.Update()"); + time += 0.16; + Transform.GlobalPosition = new Vector3(System.Math.Sin(time), System.Math.Cos(time), 0.0f); } protected override void onDestroy() { From c4ed1991650638cb514b461c2ecc0d9ced294026 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 27 Sep 2022 07:03:31 +0800 Subject: [PATCH 234/793] Serialize Vec 2/3/4 --- .../Serialization/SHSerializationHelper.hpp | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index bfc29e7a..e702dd24 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -5,6 +5,10 @@ #include +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" + namespace SHADE { struct SHSerializationHelper @@ -24,7 +28,28 @@ namespace SHADE { YAML::Node node; auto varType = var.get_type(); - if(varType.is_arithmetic()) + if(varType == rttr::type::get()) + { + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = var.convert().x; + node["Y"] = var.convert().y; + node["Z"] = var.convert().z; + node["W"] = var.convert().w; + } + else if(varType == rttr::type::get()) + { + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = var.convert().x; + node["Y"] = var.convert().y; + node["Z"] = var.convert().z; + } + else if(varType == rttr::type::get()) + { + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = var.convert().x; + node["Y"] = var.convert().y; + } + else if(varType.is_arithmetic()) { bool ok = false; if (varType == rttr::type::get()) @@ -94,4 +119,4 @@ namespace SHADE return node; } }; -} \ No newline at end of file +} From 187329c384afe139e98a74f7fe0bf0a06bea4b57 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 27 Sep 2022 12:02:06 +0800 Subject: [PATCH 235/793] Fixed texture issues --- .../src/Assets/Asset Types/SHMeshAsset.h | 5 +++-- .../Descriptors/SHVkDescriptorSetGroup.cpp | 9 ++++---- .../Descriptors/SHVkDescriptorSetGroup.h | 4 +++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 22 ++++++++++--------- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 4 ++-- .../MiddleEnd/Textures/SHTextureLibrary.h | 2 +- 6 files changed, 26 insertions(+), 20 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index b4632c2e..18674a04 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -2,16 +2,17 @@ #include #include "Math/SHMath.h" +#include "SH_API.h" namespace SHADE { - struct SHMeshAssetHeader + struct SH_API SHMeshAssetHeader { uint32_t vertexCount; uint32_t indexCount; }; - struct SHMeshAsset + struct SH_API SHMeshAsset { bool compiled; bool changed; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index c1732535..e50e717f 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -155,7 +155,7 @@ namespace SHADE */ /***************************************************************************/ - void SHVkDescriptorSetGroup::ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle>> const& imageViewsAndSamplers) noexcept + void SHVkDescriptorSetGroup::ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle, vk::ImageLayout>> const& imageViewsAndSamplers) noexcept { // Find the target writeDescSet BindingAndSetHash writeHash = binding; @@ -170,9 +170,10 @@ namespace SHADE for (uint32_t i = 0; i < imageViewsAndSamplers.size(); ++i) { // write sampler and image view - auto& ivs = imageViewsAndSamplers[i]; - writeInfo.descImageInfos[i].imageView = ivs.first->GetImageView(); - writeInfo.descImageInfos[i].sampler = ivs.second->GetVkSampler(); + auto& [view, sampler, layout] = imageViewsAndSamplers[i]; + writeInfo.descImageInfos[i].imageView = view->GetImageView(); + writeInfo.descImageInfos[i].sampler = sampler->GetVkSampler(); + writeInfo.descImageInfos[i].imageLayout = layout; } } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index d92d55e9..f2b886e8 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -1,5 +1,7 @@ #pragma once +#include + // Project Includes #include "Graphics/SHVulkanIncludes.h" #include "Resource/Handle.h" @@ -63,7 +65,7 @@ namespace SHADE void UpdateDescriptorSetImages(uint32_t set, uint32_t binding) noexcept; void UpdateDescriptorSetBuffer(uint32_t set, uint32_t binding) noexcept; - void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle>> const& imageViewsAndSamplers) noexcept; + void ModifyWriteDescImage(uint32_t set, uint32_t binding, std::span, Handle, vk::ImageLayout>> const& imageViewsAndSamplers) noexcept; void ModifyWriteDescBuffer (uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 45e52bcd..df80222a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -93,9 +93,9 @@ namespace SHADE descPool = device->CreateDescriptorPools(); // Create generic command buffer - transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::TRANSFER, SH_CMD_POOL_RESET::POOL_BASED, true); - transferCmdBuffer = transferCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + //transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); + transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); @@ -259,14 +259,16 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } + std::array texDynamicOffset {0}; + // Bind textures - //currentCmdBuffer->BindDescriptorSet - //( - // texLibrary.GetTextureDescriptorSetGroup(), - // vk::PipelineBindPoint::eGraphics, - // 0, - // {} - //); + currentCmdBuffer->BindDescriptorSet + ( + texLibrary.GetTextureDescriptorSetGroup(), + vk::PipelineBindPoint::eGraphics, + 0, + std::span{texDynamicOffset.data(), texDynamicOffset.size()} + ); // bind camera data renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); @@ -471,7 +473,7 @@ namespace SHADE transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); - transferQueue->SubmitCommandBuffer({ transferCmdBuffer }); + graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 2302fc9d..db75af6a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -163,8 +163,8 @@ namespace SHADE for (auto& job : addJobs) { texOrder.emplace_back(job.TextureHandle); - combinedImageSamplers.emplace_back(std::make_pair(job.TextureHandle->ImageView, job.Sampler)); - job.TextureHandle->TextureArrayIndex = texOrder.size(); + combinedImageSamplers.emplace_back(std::make_tuple(job.TextureHandle->ImageView, job.Sampler, vk::ImageLayout::eShaderReadOnlyOptimal)); + job.TextureHandle->TextureArrayIndex = texOrder.size() - 1; } addJobs.clear(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index be984c4f..4904ca14 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -159,7 +159,7 @@ namespace SHADE ResourceManager resourceManager; std::vector> texOrder; // CPU Storage - std::vector, Handle>> combinedImageSamplers; + std::vector, Handle, vk::ImageLayout>> combinedImageSamplers; // GPU Storage Handle texDescriptors; // Flags From 74876021519a9c4d6f34cb4df631a09b5f55526e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 27 Sep 2022 13:02:12 +0800 Subject: [PATCH 236/793] SP3-104 Renamed DDS to Texture in most places Prepared SHTextureAsset for ease of load into buffer and compilation Added Copy constructor for SHTextureAsset --- .../src/Assets/Asset Types/SHDDSAsset.h | 11 ---- .../src/Assets/Asset Types/SHTextureAsset.h | 47 +++++++++++++++ .../src/Assets/Libraries/SHDDSLoader.cpp | 38 ------------ .../src/Assets/Libraries/SHTextureLoader.cpp | 60 +++++++++++++++++++ .../{SHDDSLoader.h => SHTextureLoader.h} | 7 +-- SHADE_Engine/src/Assets/SHAssetMacros.h | 4 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 18 +++--- SHADE_Engine/src/Assets/SHAssetManager.h | 6 +- 8 files changed, 125 insertions(+), 66 deletions(-) delete mode 100644 SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h delete mode 100644 SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp rename SHADE_Engine/src/Assets/Libraries/{SHDDSLoader.h => SHTextureLoader.h} (61%) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h deleted file mode 100644 index 30f22c4e..00000000 --- a/SHADE_Engine/src/Assets/Asset Types/SHDDSAsset.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "tinyddsloader.h" - -namespace SHADE -{ - struct SHDDSAsset - { - tinyddsloader::DDSFile image; - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h new file mode 100644 index 00000000..12c9cf22 --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -0,0 +1,47 @@ +#pragma once + +#include "tinyddsloader.h" + +#include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" + +#include + +namespace SHADE +{ + class SHTextureAsset + { + public: + uint32_t numBytes; + uint32_t width; + uint32_t height; + SHTexture::TextureFormat format; + std::vector mipOffsets; + SHTexture::PixelChannel const * pixelData; + + SHTextureAsset() + : numBytes{ 0 }, + width{ 0 }, + height{ 0 }, + format{ SHTexture::TextureFormat::eUndefined }, + pixelData{ nullptr } + {} + + SHTextureAsset(SHTextureAsset const& rhs) + : numBytes{ rhs.numBytes }, + width{ rhs.width }, + height{ rhs.height }, + format{ rhs.format }, + mipOffsets{ rhs.mipOffsets }, + pixelData(rhs.pixelData) + {} + + //SHTextureAsset(SHTextureAsset&& rhs) + // : numBytes{ rhs.numBytes }, + // width{ rhs.width }, + // height{ rhs.height }, + // format{ rhs.format }, + // mipOffsets{ rhs.mipOffsets }, + // pixelData(std::move(rhs.pixelData)) + //{} + }; +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp deleted file mode 100644 index 32eab9a9..00000000 --- a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "SHpch.h" -#include "SHDDSLoader.h" - -namespace SHADE -{ - std::string SHDDSLoader::TinyDDSResultToString(tinyddsloader::Result value) - { - switch (value) - { - case tinyddsloader::Result::ErrorFileOpen: - return "File open err"; - case tinyddsloader::Result::ErrorRead: - return "File read err"; - case tinyddsloader::Result::ErrorMagicWord: - return "File header magicword err"; - case tinyddsloader::Result::ErrorSize: - return "File size err"; - case tinyddsloader::Result::ErrorVerify: - return "Pixel format err"; - case tinyddsloader::Result::ErrorNotSupported: - return "Unsupported format"; - case tinyddsloader::Result::ErrorInvalidData: - return "Invalid data"; - default: - return "Unknown"; - } - } - - void SHDDSLoader::LoadImageAsset(AssetPath path, SHDDSAsset& asset) - { - tinyddsloader::Result loadResult = tinyddsloader::Result::Success; - loadResult = asset.image.Load(path.string().c_str()); - if (loadResult != tinyddsloader::Result::Success) - { - SHLOG_ERROR("Unable to load DDS file: {} at {}", TinyDDSResultToString(loadResult), path.string()); - } - } -} diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp new file mode 100644 index 00000000..ea10aef5 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -0,0 +1,60 @@ +#include "SHpch.h" +#include "SHTextureLoader.h" + +namespace SHADE +{ + std::string SHTextureLoader::TinyDDSResultToString(tinyddsloader::Result value) + { + switch (value) + { + case tinyddsloader::Result::ErrorFileOpen: + return "File open err"; + case tinyddsloader::Result::ErrorRead: + return "File read err"; + case tinyddsloader::Result::ErrorMagicWord: + return "File header magic word err"; + case tinyddsloader::Result::ErrorSize: + return "File size err"; + case tinyddsloader::Result::ErrorVerify: + return "Pixel format err"; + case tinyddsloader::Result::ErrorNotSupported: + return "Unsupported format"; + case tinyddsloader::Result::ErrorInvalidData: + return "Invalid data"; + default: + return "Unknown"; + } + } + + void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) + { + tinyddsloader::Result loadResult = tinyddsloader::Result::Success; + tinyddsloader::DDSFile file; + loadResult = file.Load(path.string().c_str()); + if (loadResult != tinyddsloader::Result::Success) + { + SHLOG_ERROR("Unable to load Texture file: {} at {}", TinyDDSResultToString(loadResult), path.string()); + } + + size_t totalBytes{ 0 }; + + std::vector mipOff; + + for (auto i{0}; i < file.GetMipCount(); ++i) + { + totalBytes += file.GetImageData(i, 0)->m_memSlicePitch; + mipOff.push_back(totalBytes); + } + + SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; + std::memcpy(pixel, file.GetDDSData(), totalBytes); + //pixel = std::move(reinterpret_cast(file.GetDDSData())); + + asset.numBytes = totalBytes; + asset.width = file.GetWidth(); + asset.height = file.GetHeight(); + asset.format = static_cast(file.GetFormat()); + asset.mipOffsets = std::move(mipOff); + asset.pixelData = std::move(pixel); + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h similarity index 61% rename from SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h rename to SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index e2bd734a..393e1f02 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHDDSLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -2,17 +2,16 @@ #define TINYDDSLOADER_IMPLEMENTATION #include "../SHAssetMacros.h" -#include "../Asset Types/SHDDSAsset.h" +#include "../Asset Types/SHTextureAsset.h" #include "tinyddsloader.h" -#include namespace SHADE { - class SHDDSLoader + class SHTextureLoader { private: static std::string TinyDDSResultToString(tinyddsloader::Result value); public: - static void LoadImageAsset(AssetPath paths, SHDDSAsset& image); + static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); }; } diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index c6d6bec1..8c462af7 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -69,7 +69,8 @@ enum class AssetType : uint8_t #define SCENE_EXTENSION ".SHADE" #define PREFAB_EXTENSION ".SHPrefab" #define MATERIAL_EXTENSION ".SHMat" -#define TEXTURE_EXTENSION ".dds" +#define TEXTURE_EXTENSION ".shtex" +#define DDS_EXTENSION ".dds" #define FBX_EXTENSION ".fbx" #define GLTF_EXTENSION ".gltf" #define MESH_EXTENSION ".shmesh" @@ -80,6 +81,7 @@ std::string const EXTENSIONS[] = { MATERIAL_EXTENSION, IMAGE_EXTENSION, TEXTURE_EXTENSION, + DDS_EXTENSION, MESH_EXTENSION, SCRIPT_EXTENSION, SCENE_EXTENSION, diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index f2475216..6ffeda4a 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -15,7 +15,7 @@ #include "Filesystem/SHFileSystem.h" #include "Libraries/SHMeshLoader.h" -#include "Libraries/SHDDSLoader.h" +#include "Libraries/SHTextureLoader.h" namespace SHADE { @@ -26,7 +26,7 @@ namespace SHADE std::unordered_map SHAssetManager::assetRegistry; std::unordered_map SHAssetManager::meshCollection; - std::unordered_map SHAssetManager::ddsCollection; + std::unordered_map SHAssetManager::textureCollection; /**************************************************************************** * \brief Static function to generate asset ID. @@ -211,7 +211,7 @@ namespace SHADE } ); } - else if (path.extension().string() == TEXTURE_EXTENSION) + else if (path.extension().string() == DDS_EXTENSION) { LoadDDS( { @@ -236,10 +236,10 @@ namespace SHADE return result; } - std::vector SHAssetManager::GetAllDDS() noexcept + std::vector SHAssetManager::GetAllDDS() noexcept { - std::vector result; - for (auto const& dds : ddsCollection) + std::vector result; + for (auto const& dds : textureCollection) { result.push_back(dds.second); } @@ -305,11 +305,11 @@ namespace SHADE void SHAssetManager::LoadDDS(SHAsset asset) noexcept { - SHDDSAsset image; + SHTextureAsset image; - SHDDSLoader::LoadImageAsset(asset.path, image); + SHTextureLoader::LoadImageAsset(asset.path, image); - ddsCollection.emplace(GenerateAssetID(AssetType::DDS), image); + textureCollection.emplace(GenerateAssetID(AssetType::DDS), image); } /**************************************************************************** diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index bf6e0dc5..0da41cc1 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -13,7 +13,7 @@ #include "SHAsset.h" #include "Asset Types/SHMeshAsset.h" -#include "Asset Types/SHDDSAsset.h" +#include "Asset Types/SHTextureAsset.h" #include "SH_API.h" namespace SHADE @@ -73,7 +73,7 @@ namespace SHADE //TODO: TEMPORARY FOR TESTING GLTF & DDS static void LoadDataTemp(std::string path) noexcept; static std::vector GetAllMeshes() noexcept; - static std::vector GetAllDDS() noexcept; + static std::vector GetAllDDS() noexcept; private: /**************************************************************************** @@ -128,6 +128,6 @@ namespace SHADE static std::unordered_map assetRegistry; static std::unordered_map meshCollection; - static std::unordered_map ddsCollection; + static std::unordered_map textureCollection; }; } From ce721b99e534832e4b3b3ed6bd9b772aed0071ec Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Tue, 27 Sep 2022 13:37:52 +0800 Subject: [PATCH 237/793] include SH_API.h --- SHADE_Engine/src/Input/SHInputManagerSystem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Input/SHInputManagerSystem.h b/SHADE_Engine/src/Input/SHInputManagerSystem.h index 77d8f8fd..eb40b240 100644 --- a/SHADE_Engine/src/Input/SHInputManagerSystem.h +++ b/SHADE_Engine/src/Input/SHInputManagerSystem.h @@ -12,6 +12,7 @@ #pragma once //#include //#include "../../SHADE_Managed/src/SHpch.h" +#include "SH_API.h" #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" From e9496bead6e87db9777936402f0d8ce2f6a9135f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 13:43:59 +0800 Subject: [PATCH 238/793] Fixed bug where different Renderables of different meshes are thrown into the same SubBatch --- SHADE_Application/src/Scenes/SBTestScene.cpp | 21 +++++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 10 ++++++--- SHADE_Engine/src/Resource/Handle.h | 5 +++-- SHADE_Engine/src/Resource/Handle.hpp | 10 +++++++-- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index c90d660b..bc99dada 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -42,7 +42,7 @@ namespace Sandbox std::vector> handles; for (auto const& mesh : meshes) { - handles.push_back(graphicsSystem->AddMesh( + handles.push_back(graphicsSystem->AddMesh( mesh.header.vertexCount, mesh.vertexPosition.data(), mesh.texCoords.data(), @@ -90,19 +90,22 @@ namespace Sandbox // stressTestObjects.emplace_back(entity); //} - auto entity = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); + auto entity = SHEntityManager::CreateEntity(); + auto& renderable = *SHComponentManager::GetComponent_s(entity); + auto& transform = *SHComponentManager::GetComponent_s(entity); - renderable.Mesh = handles.front(); - renderable.SetMaterial(matInst); + renderable.Mesh = handles.front(); + renderable.SetMaterial(matInst); - //transform.SetLocalScale(TEST_OBJ_SCALE); + ////transform.SetLocalScale(TEST_OBJ_SCALE); - stressTestObjects.emplace_back(entity); + //stressTestObjects.emplace_back(entity); // Create blank entity with a script - testObj = SHADE::SHEntityManager::CreateEntity(); + testObj = SHADE::SHEntityManager::CreateEntity(); + auto& testObjRenderable = *SHComponentManager::GetComponent_s(testObj); + testObjRenderable.Mesh = CUBE_MESH; + testObjRenderable.SetMaterial(matInst); SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->AddScript(testObj, "TestScript"); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index df80222a..718f28db 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -540,9 +540,13 @@ namespace SHADE oldSuperBatch->Remove(&renderable); } - // Add to new SuperBatch - Handle newSuperBatch = renderable.GetMaterial()->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); - newSuperBatch->Add(&renderable); + // Add to new SuperBatch if there is a material + Handle newMatInstance = renderable.GetMaterial(); + if (newMatInstance) + { + Handle newSuperBatch = newMatInstance->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + newSuperBatch->Add(&renderable); + } // Unset change flag renderable.ResetChangedFlag(); diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/Handle.h index a0272290..9579063c 100644 --- a/SHADE_Engine/src/Resource/Handle.h +++ b/SHADE_Engine/src/Resource/Handle.h @@ -54,7 +54,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Usage Functions */ /*-----------------------------------------------------------------------------*/ - inline Id GetId() const; + inline Id GetId() const noexcept; /*-----------------------------------------------------------------------------*/ /* Overloaded Operators */ @@ -62,7 +62,7 @@ namespace SHADE /// /// Converts to true if this is a valid Handle. /// - inline operator bool() const; + inline operator bool() const noexcept; protected: /*-----------------------------------------------------------------------------*/ @@ -101,6 +101,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Overloaded Operators */ /*-----------------------------------------------------------------------------*/ + inline bool operator==(const Handle& rhs) const noexcept; /// /// Returns the underlying object pointed to by the Handle. /// diff --git a/SHADE_Engine/src/Resource/Handle.hpp b/SHADE_Engine/src/Resource/Handle.hpp index 27cdd1cd..45468ec1 100644 --- a/SHADE_Engine/src/Resource/Handle.hpp +++ b/SHADE_Engine/src/Resource/Handle.hpp @@ -8,15 +8,15 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* HandleBase - Usage Functions */ /*---------------------------------------------------------------------------------*/ - inline HandleBase::Id HandleBase::GetId() const + inline HandleBase::Id HandleBase::GetId() const noexcept { return id; } /*---------------------------------------------------------------------------------*/ /* HandleBase - Overloaded Operators */ - inline HandleBase::operator bool() const /*---------------------------------------------------------------------------------*/ + inline HandleBase::operator bool() const noexcept { return id.Raw != INVALID_ID.Raw; } @@ -33,6 +33,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Handle - Overloaded Operators */ /*---------------------------------------------------------------------------------*/ + template + bool SHADE::Handle::operator==(const Handle& rhs) const noexcept + { + return id.Raw == rhs.id.Raw && library == rhs.library; + } + template T& Handle::operator*() { From a7badba8b9b50c4d4f48ebe0ab08997e026a089c Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 27 Sep 2022 13:58:19 +0800 Subject: [PATCH 239/793] Copied over function from Texture Library to Texture loader to convert dds format to vk format --- .../src/Assets/Libraries/SHTextureLoader.cpp | 34 ++++++++++++++++++- .../src/Assets/Libraries/SHTextureLoader.h | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index ea10aef5..29c1146a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -26,6 +26,38 @@ namespace SHADE } } + vk::Format SHTextureLoader::ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear) + { + switch (format) + { + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm_SRGB: + return isLinear ? vk::Format::eBc1RgbaUnormBlock : vk::Format::eBc1RgbaSrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm_SRGB: + return isLinear ? vk::Format::eBc2UnormBlock : vk::Format::eBc2SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm_SRGB: + return isLinear ? vk::Format::eBc3UnormBlock : vk::Format::eBc3SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC5_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC5_SNorm: + return isLinear ? vk::Format::eBc5UnormBlock : vk::Format::eBc5SnormBlock; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm_SRGB: + return isLinear ? vk::Format::eR8G8B8A8Unorm : vk::Format::eR8G8B8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_SNorm: + return vk::Format::eR8G8B8A8Snorm; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8Srgb; + default: + throw std::runtime_error("Unsupported DDS format."); + } + } + void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) { tinyddsloader::Result loadResult = tinyddsloader::Result::Success; @@ -53,7 +85,7 @@ namespace SHADE asset.numBytes = totalBytes; asset.width = file.GetWidth(); asset.height = file.GetHeight(); - asset.format = static_cast(file.GetFormat()); + asset.format = ddsLoaderToVkFormat(file.GetFormat(), true); asset.mipOffsets = std::move(mipOff); asset.pixelData = std::move(pixel); } diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index 393e1f02..281a9a19 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -11,6 +11,8 @@ namespace SHADE { private: static std::string TinyDDSResultToString(tinyddsloader::Result value); + static vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); + public: static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); }; From 60540b1adc373ca5867cb0e717e3f3fec527264f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 27 Sep 2022 14:09:44 +0800 Subject: [PATCH 240/793] Temp function to retrieve all textures --- SHADE_Application/src/Scenes/SBTestScene.cpp | 3 +++ SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h | 3 +-- SHADE_Engine/src/Assets/SHAssetManager.cpp | 2 +- SHADE_Engine/src/Assets/SHAssetManager.h | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 01d2a18e..a18b4894 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -54,6 +54,9 @@ namespace Sandbox } graphicsSystem->BuildMeshBuffers(); + //Test Textures + auto textures{ SHADE::SHAssetManager::GetAllTextures() }; + // Create Materials auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index 12c9cf22..d3b69e32 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -8,9 +8,8 @@ namespace SHADE { - class SHTextureAsset + struct SHTextureAsset { - public: uint32_t numBytes; uint32_t width; uint32_t height; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 6ffeda4a..60e35ab3 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -236,7 +236,7 @@ namespace SHADE return result; } - std::vector SHAssetManager::GetAllDDS() noexcept + std::vector SHAssetManager::GetAllTextures() noexcept { std::vector result; for (auto const& dds : textureCollection) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 0da41cc1..7064d63d 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -73,7 +73,7 @@ namespace SHADE //TODO: TEMPORARY FOR TESTING GLTF & DDS static void LoadDataTemp(std::string path) noexcept; static std::vector GetAllMeshes() noexcept; - static std::vector GetAllDDS() noexcept; + static std::vector GetAllTextures() noexcept; private: /**************************************************************************** From ee7cb3689603208e430e59e3ea07a10b0b69ea37 Mon Sep 17 00:00:00 2001 From: Glence Date: Tue, 27 Sep 2022 14:11:04 +0800 Subject: [PATCH 241/793] added the banks for testing --- Assets/Audio/Master.bank | Bin 0 -> 140928 bytes Assets/Audio/Master.strings.bank | Bin 0 -> 1086 bytes SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 Assets/Audio/Master.bank create mode 100644 Assets/Audio/Master.strings.bank diff --git a/Assets/Audio/Master.bank b/Assets/Audio/Master.bank new file mode 100644 index 0000000000000000000000000000000000000000..16c0fa3162eda0471acad04ff5e2dd449c2f8766 GIT binary patch literal 140928 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≺#x8;cO@L;nKxr;ef%S+0As}3ml@d}k= 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 Ql-aL0yqPiv^#8p62gHHMqyPW_ literal 0 HcmV?d00001 diff --git a/Assets/Audio/Master.strings.bank b/Assets/Audio/Master.strings.bank new file mode 100644 index 0000000000000000000000000000000000000000..ae9c71de2273b6e77714ac8fee61024f91ad1816 GIT binary patch literal 1086 zcmZ9KPe>GT6vv-tW}2l|7-F?hxJ0xoAs!Tw-JKmBomr=uajh=X%rv_$x--knY-k;V ziVjg$f|=x>LkF#kltGe*$PPh8&>=cVLLeR_@DLHAWbbD)4lYB)0Fo5@Myjez+s_-2zbhL$I?Tim&M;A~1KBQeN4E8T6KZ~7W47t}X zBvOMVz=TC{n_F^N$YEZP+#D_^9*)vyw`=(v7IQh`<-{W)cb{n7+f!m=Zk*>>j|I-< zh$MI{#9ik27LPj_mqp%VUhp^?_qZ$Mag_Er!cpEnIp4;1d40P=9*Z&Wzqk%c6k}8? zIc!m)Bt9P?57`ezu(`QO7$czWKz|HC-wjZJ0c9tyD*>{oO+LvZNqYeTL^!f0npFc> zM6;7vUy6A&fVL040gx%g_%*CA$8{Y*lJsl>NMj$k0MJe5C4u$W2kv1V_Js%7A01Re z8LW)V*Z(*_(LQ&*q`*JFQuFzo-+aD)iyA&XdU)#VM)`+7wWd~4)App+n8;tV1{c)T z!G-ae(5v@H5|eeu`(|gFh6kPvQ8$LxCRg88zOF7_ejM94KtI(>+HFyuZf?H%^5*ms zb(b5vtouhE&8*LUnJ875sZTE+t{$v9F_(V(Z7g82161Qjwy5#S{WFWpR;fzg`So2M ze`AUN&+{m#pcp+3K~Aw9-GYGaSScfEL)LBxf}mg0Efw%-IJgYAa6vVhmLaL6^-QnQ z4{0T3aJrF&NVj4s8tz~R?L?oPFii*d%h)n>XVZ!S_);@X19;2K{7cCo$&PM2(8&a| zDOt@rj%moC^`^8Qz=rrWB~Sr?65(m1h>V*=aTKl(TCC5)@0u7ZyLw(Uu teb-PaG@JvpJzFM9VV2ajhQwAfCwV|cSs#gTol=x|0mqqmo()OF{{{4D2Q>fy literal 0 HcmV?d00001 diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index be280753..6c5e1120 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -77,10 +77,10 @@ namespace SHADE //SHResourceManager::LoadAllAudio(system, soundList); - LoadBank("resources/audio/banks/Master.bank"); - LoadBank("resources/audio/banks/Master.strings.bank"); - LoadBank("resources/audio/banks/Music.bank"); - LoadBank("resources/audio/banks/SFX.bank"); + LoadBank("../../Assets/Audio/Master.bank"); + LoadBank("../../Assets/Audio/Master.strings.bank"); + //LoadBank("resources/audio/banks/Music.bank"); + //LoadBank("resources/audio/banks/SFX.bank"); //auto clip = CreateAudioClip("event:/SFX/Dawn/Dawn_Attack"); //clip->Play(); From 65c67c14b763e81eef60e92eb1fc1e3e5b576cfb Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 14:11:56 +0800 Subject: [PATCH 242/793] Fixed crash if no textures were loaded --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 14 +++++--- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 33 ++++++++++--------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 718f28db..67a6d6eb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -259,16 +259,20 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } - std::array texDynamicOffset {0}; // Bind textures - currentCmdBuffer->BindDescriptorSet - ( - texLibrary.GetTextureDescriptorSetGroup(), + auto textureDescSet = texLibrary.GetTextureDescriptorSetGroup(); + if (textureDescSet) + { + std::array texDynamicOffset {0}; + currentCmdBuffer->BindDescriptorSet + ( + textureDescSet, vk::PipelineBindPoint::eGraphics, 0, std::span{texDynamicOffset.data(), texDynamicOffset.size()} - ); + ); + } // bind camera data renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index db75af6a..e1461dd3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -168,23 +168,26 @@ namespace SHADE } addJobs.clear(); - /* Build Descriptor Set with all the Textures */ - if (!texDescriptors) + /* Build Descriptor Set with all the Textures only if there are textures */ + if (!texOrder.empty()) { - texDescriptors = descPool->Allocate({ descLayout }, { static_cast(texOrder.size()) }); + if (!texDescriptors) + { + texDescriptors = descPool->Allocate({ descLayout }, { static_cast(texOrder.size()) }); + } + const auto ALIGNED_SIZE = device->PadSSBOSize(sizeof(uint32_t)); + texDescriptors->ModifyWriteDescImage + ( + SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, + SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA, + combinedImageSamplers + ); + texDescriptors->UpdateDescriptorSetImages + ( + SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, + SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA + ); } - const auto ALIGNED_SIZE = device->PadSSBOSize(sizeof(uint32_t)); - texDescriptors->ModifyWriteDescImage - ( - SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, - SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA, - combinedImageSamplers - ); - texDescriptors->UpdateDescriptorSetImages - ( - SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, - SHGraphicsConstants::DescriptorSetBindings::IMAGE_AND_SAMPLERS_DATA - ); isDirty = false; } From 5d022b712344898864d18e6f3b6fa1ce77190e3f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 27 Sep 2022 14:12:05 +0800 Subject: [PATCH 243/793] Fixed mipoffset --- SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 29c1146a..33270bb6 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -70,12 +70,12 @@ namespace SHADE size_t totalBytes{ 0 }; - std::vector mipOff; + std::vector mipOff(file.GetMipCount()); for (auto i{0}; i < file.GetMipCount(); ++i) { - totalBytes += file.GetImageData(i, 0)->m_memSlicePitch; mipOff.push_back(totalBytes); + totalBytes += file.GetImageData(i, 0)->m_memSlicePitch; } SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; From 76617ae571c0c35a57a2d83aff3cb5e328139e99 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 14:12:14 +0800 Subject: [PATCH 244/793] Enabled Multi-Draw Indirect feature --- SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index e7b198d6..3fa797bf 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -188,6 +188,7 @@ namespace SHADE // point and lines fill mode features.fillModeNonSolid = true; features.samplerAnisotropy = VK_TRUE; + features.multiDrawIndirect = true; // for wide lines features.wideLines = true; From b3417c2011c40d183ba5d29aefa04e680aec4029 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 15:44:36 +0800 Subject: [PATCH 245/793] Made SHGraphicsGlobalData static and modified SHBatch to generate and bind material descriptor set --- .../Graphics/Descriptors/SHVkDescriptorPool.h | 3 +- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 85 ++++++++++++++----- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 50 ++++++----- .../Graphics/MiddleEnd/Batching/SHBatcher.cpp | 8 +- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 5 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 9 +- .../MiddleEnd/Batching/SHSuperBatch.h | 4 +- .../GlobalData/SHGraphicsGlobalData.cpp | 16 +++- .../GlobalData/SHGraphicsGlobalData.h | 26 +++--- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 18 ++-- .../MiddleEnd/Interface/SHGraphicsSystem.h | 3 - .../MiddleEnd/Interface/SHRenderer.cpp | 4 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 2 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 7 +- .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 7 +- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 10 ++- .../MiddleEnd/Textures/SHTextureLibrary.h | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 15 ++-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 9 +- .../RenderGraph/SHRenderGraphNode.cpp | 12 +-- .../Graphics/RenderGraph/SHRenderGraphNode.h | 7 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 4 +- .../src/Graphics/RenderGraph/SHSubpass.h | 3 +- 23 files changed, 185 insertions(+), 124 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index e1bee300..9a533d06 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -41,7 +41,8 @@ namespace SHADE { vk::DescriptorType::eCombinedImageSampler, 100 }, { vk::DescriptorType::eUniformBuffer, 100 }, { vk::DescriptorType::eUniformBufferDynamic, 100 }, - { vk::DescriptorType::eStorageImage, 100} + { vk::DescriptorType::eStorageImage, 100}, + { vk::DescriptorType::eStorageBufferDynamic, 100 } }; /// /// The Entity to render the Scripts of. - void RenderScriptsInInspector(const SHEntity& entity) const; + void RenderScriptsInInspector(EntityID entity) const; /*-----------------------------------------------------------------------------*/ /* Static Utility Functions */ diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index d6b02c8c..db49201b 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -17,15 +17,17 @@ of DigiPen Institute of Technology is prohibited. // Primary Header #include "Editor/Editor.hxx" // External Dependencies -#include "Editor/SHEditorUI::.h" +#include "Editor/SHEditorUI.h" // Project Headers #include "Components/Component.hxx" #include "Scripts/ScriptStore.hxx" #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" #include "Serialisation/ReflectionUtilities.hxx" +#include "Editor/IconsMaterialDesign.h" // Using Directives +using namespace System; using namespace System::Collections::Generic; /*-------------------------------------------------------------------------------------*/ @@ -46,7 +48,7 @@ using namespace System::Collections::Generic; (field->FieldType == MANAGED_TYPE::typeid) \ { \ NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ - if (SHEditorUI::::FUNC(Convert::ToNative(field->Name), val)) \ + if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ { \ field->SetValue(object, val); \ } \ @@ -67,7 +69,7 @@ using namespace System::Collections::Generic; (field->FieldType == MANAGED_TYPE::typeid) \ { \ NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ - if (SHEditorUI::::FUNC(Convert::ToNative(field->Name), val)) \ + if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ { \ field->SetValue(object, Convert::ToCLI(val)); \ } \ @@ -99,10 +101,31 @@ namespace SHADE } // Render Add Script - //RenderScriptAddButton(entity); + RenderScriptAddButton(entity); SAFE_NATIVE_CALL_END_N("SHADE_Managed.Editor.RenderScriptsInInspector") } + void Editor::RenderScriptAddButton(Entity entity) + { + // Get list of Scripts + auto scriptTypes = ScriptStore::GetAvailableScriptList(); + + // Define pop up + if (SHEditorUI::BeginMenu("Add Script", ICON_MD_LIBRARY_ADD)) + { + for each (Type ^ type in scriptTypes) + { + if (SHEditorUI::Selectable(Convert::ToNative(type->Name))) + { + // Add the script + ScriptStore::AddScriptViaName(entity, type->Name); + } + } + + SHEditorUI::EndMenu(); + } + } + /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ @@ -110,30 +133,23 @@ namespace SHADE { // Constants const std::string LABEL = Convert::ToNative(script->GetType()->Name); - const char* CONTEXT_MENU_ID = "scriptContextMenu"; // Header - SHEditorUI::::PushID(index); - if (SHEditorUI::::CollapsingHeader(LABEL)) + SHEditorUI::PushID(index); + if (SHEditorUI::CollapsingHeader(LABEL)) { - SHEditorUI::::PushID(LABEL); - SHEditorUI::::Indent(); + SHEditorUI::PushID(LABEL); + SHEditorUI::Indent(); { - // Define context menu - if (SHEditorUI::::BeginPopup(CONTEXT_MENU_ID)) + // Right Click Menu + if (SHEditorUI::BeginPopupContextItem("scriptContextMenu")) { - if (SHEditorUI::::MenuItem("Remove Script")) + if (SHEditorUI::Selectable("Delete Script", ICON_MD_DELETE)) { // Mark script for removal ScriptStore::RemoveScript(entity, script); } - SHEditorUI::::EndPopup(); - } - - // Context menu button - if (SHEditorUI::::SmallButton("...")) - { - SHEditorUI::::OpenPopup(CONTEXT_MENU_ID); + SHEditorUI::EndPopup(); } // Go through all fields and output them @@ -146,16 +162,16 @@ namespace SHADE continue; // Render the input field for this field - SHEditorUI::::PushID(LABEL + std::to_string(id++)); + SHEditorUI::PushID(LABEL + std::to_string(id++)); renderFieldInInspector(field, script); - SHEditorUI::::PopID(); + SHEditorUI::PopID(); } } - SHEditorUI::::Unindent(); - SHEditorUI::::PopID(); + SHEditorUI::Unindent(); + SHEditorUI::PopID(); } - SHEditorUI::::PopID(); + SHEditorUI::PopID(); } void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) { @@ -180,13 +196,13 @@ namespace SHADE } int val = safe_cast(field->GetValue(object)); - if (SHEditorUI::::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) + if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) { field->SetValue(object, val); } } - else if RENDER_FIELD_CASTED(Vector2, vec2, InputVec2) - else if RENDER_FIELD_CASTED(Vector3, vec3, InputVec3) + else if RENDER_FIELD_CASTED(Vector2, SHVec2, InputVec2) + else if RENDER_FIELD_CASTED(Vector3, SHVec3, InputVec3) else if (field->FieldType == String::typeid) { // Prevent issues where String^ is null due to being empty @@ -198,7 +214,7 @@ namespace SHADE // Actual Field std::string val = Convert::ToNative(stringVal); - if (SHEditorUI::::InputTextField(Convert::ToNative(field->Name), val)) + if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val)) { field->SetValue(object, Convert::ToCLI(val)); } diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index b85e9203..a38cbf79 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -36,7 +36,13 @@ namespace SHADE /// rendering code. /// /// Maximum number of descriptor sets allowed diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index f73c5306..4065c3c1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -22,8 +22,11 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" namespace SHADE { @@ -120,7 +123,7 @@ namespace SHADE } } - void SHBatch::UpdateMaterialBuffer(uint32_t frameIndex) + void SHBatch::UpdateMaterialBuffer(uint32_t frameIndex, Handle descPool) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -154,21 +157,17 @@ namespace SHADE if (!matBufferDirty[frameIndex]) return; - // Build CPI Buffer + // Build CPU Buffer char* propsCurrPtr = matPropsData.get(); for (auto& subBatch : subBatches) for (const SHRenderable* renderable : subBatch.Renderables) { renderable->GetMaterial()->ExportProperties(propsCurrPtr); - propsCurrPtr += singleMatPropSize; + propsCurrPtr += singleMatPropAlignedSize; } // Transfer to GPU - SHVkUtil::EnsureBufferAndCopyHostVisibleData - ( - device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), - vk::BufferUsageFlagBits::eStorageBuffer - ); + rebuildMaterialBuffers(frameIndex, descPool); // This frame is updated matBufferDirty[frameIndex] = false; @@ -207,7 +206,7 @@ namespace SHADE transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); } - void SHBatch::Build(Handle _device, uint32_t frameIndex) + void SHBatch::Build(Handle device, Handle descPool, uint32_t frameIndex) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -247,7 +246,8 @@ namespace SHADE if (!EMPTY_MAT_PROPS) { singleMatPropSize = SHADER_INFO->GetBytesRequired(); - matPropTotalBytes = drawData.size() * singleMatPropSize; + singleMatPropAlignedSize = device->PadSSBOSize(singleMatPropSize); + matPropTotalBytes = drawData.size() * singleMatPropAlignedSize; if (matPropsDataSize < matPropTotalBytes) { matPropsData.reset(new char[matPropTotalBytes]); @@ -289,7 +289,7 @@ namespace SHADE if (!EMPTY_MAT_PROPS) { renderable->GetMaterial()->ExportProperties(propsCurrPtr); - propsCurrPtr += singleMatPropSize; + propsCurrPtr += singleMatPropAlignedSize; } } } @@ -304,30 +304,24 @@ namespace SHADE const uint32_t DRAW_DATA_BYTES = static_cast(drawData.size() * sizeof(vk::DrawIndexedIndirectCommand)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - _device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, + device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, BuffUsage::eIndirectBuffer ); // - Transform Buffer const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - _device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, + device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); // - Material Properties Buffer - if (matPropsData) - { - SHVkUtil::EnsureBufferAndCopyHostVisibleData - ( - _device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), - BuffUsage::eStorageBuffer - ); - } + rebuildMaterialBuffers(frameIndex, descPool); + // Mark this frame as no longer dirty isDirty[frameIndex] = false; // Save logical device - this->device = _device; + this->device = device; } /*---------------------------------------------------------------------------------*/ @@ -341,8 +335,20 @@ namespace SHADE return; } + // Bind all required objects before drawing + static std::array dynamicOffset { 0 }; cmdBuffer->BindPipeline(pipeline); cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); + if (matPropsDescSet[frameIndex]) + { + cmdBuffer->BindDescriptorSet + ( + matPropsDescSet[frameIndex], + vk::PipelineBindPoint::eGraphics, + 0, + dynamicOffset + ); + } cmdBuffer->DrawMultiIndirect(drawDataBuffer[frameIndex], static_cast(drawData.size())); } @@ -355,4 +361,39 @@ namespace SHADE dirt = true; isCPUBuffersDirty = true; } + + void SHBatch::rebuildMaterialBuffers(uint32_t frameIndex, Handle descPool) + { + if (matPropsData) + { + SHVkUtil::EnsureBufferAndCopyHostVisibleData + ( + device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), + vk::BufferUsageFlagBits::eStorageBuffer + ); + + if (!matPropsDescSet[frameIndex]) + { + matPropsDescSet[frameIndex] = descPool->Allocate + ( + { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE] }, + { static_cast(drawData.size()) } + ); + } + std::array, 1> bufferList = { matPropsBuffer[frameIndex] }; + matPropsDescSet[frameIndex]->ModifyWriteDescBuffer + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, + bufferList, + 0, 1 + ); + matPropsDescSet[frameIndex]->UpdateDescriptorSetBuffer + ( + SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, + SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA + ); + } + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index d40a66ea..abe691ca 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -35,6 +35,8 @@ namespace SHADE class SHRenderable; class SHVkLogicalDevice; class SHMaterialInstance; + class SHVkDescriptorSetGroup; + class SHVkDescriptorPool; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -74,9 +76,9 @@ namespace SHADE void Add(const SHRenderable* renderable); void Remove(const SHRenderable* renderable); void Clear(); - void UpdateMaterialBuffer(uint32_t frameIndex); + void UpdateMaterialBuffer(uint32_t frameIndex, Handle descPool); void UpdateTransformBuffer(uint32_t frameIndex); - void Build(Handle device, uint32_t frameIndex); + void Build(Handle device, Handle descPool, uint32_t frameIndex) ; void Draw(Handle cmdBuffer, uint32_t frameIndex); /*-----------------------------------------------------------------------------*/ @@ -84,34 +86,44 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ Handle GetPipeline() const noexcept { return pipeline; }; - private: + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definition */ + /*-----------------------------------------------------------------------------*/ + using TripleBool = std::array; + using TripleBuffer = std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS>; + using TripleDescSet = std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS>; + /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ // Resources - Handle device; + Handle device; // Batch Properties - Handle pipeline; + Handle pipeline; std::unordered_set> referencedMatInstances; - std::array matBufferDirty; + TripleBool matBufferDirty; // Batch Tree - std::vector subBatches; - std::array isDirty; - // CPU Buffers - std::vector drawData; - std::vector transformData; - std::unique_ptr matPropsData; - Byte matPropsDataSize = 0; - Byte singleMatPropSize = 0; - bool isCPUBuffersDirty = true; - // GPU Buffers - std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> drawDataBuffer; - std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> transformDataBuffer; - std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> matPropsBuffer; + std::vector subBatches; + TripleBool isDirty; + // CPU Buffers + std::vector drawData; + std::vector transformData; + std::unique_ptr matPropsData; + Byte matPropsDataSize = 0; + Byte singleMatPropAlignedSize = 0; + Byte singleMatPropSize = 0; + bool isCPUBuffersDirty = true; + // GPU Buffers + TripleBuffer drawDataBuffer; + TripleBuffer transformDataBuffer; + TripleBuffer matPropsBuffer; + TripleDescSet matPropsDescSet; /*-----------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------*/ void setAllDirtyFlags(); + void rebuildMaterialBuffers(uint32_t frameIndex, Handle descPool); }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp index c4320aac..dc44e7f9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.cpp @@ -91,12 +91,12 @@ namespace SHADE (*superBatch)->Remove(renderable); } - void SHBatcher::FinaliseBatches(Handle device, uint32_t frameIndex) + void SHBatcher::FinaliseBatches(Handle device, Handle descPool, uint32_t frameIndex) { // Build SuperBatches for (auto& batch : superBatches) { - batch->Build(device, frameIndex); + batch->Build(device, descPool, frameIndex); } } @@ -109,11 +109,11 @@ namespace SHADE superBatches.clear(); } - void SHBatcher::UpdateBuffers(uint32_t frameIndex) + void SHBatcher::UpdateBuffers(uint32_t frameIndex, Handle descPool) { for (auto& batch : superBatches) { - batch->UpdateBuffers(frameIndex); + batch->UpdateBuffers(frameIndex, descPool); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 985e8e16..8074899d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -27,6 +27,7 @@ namespace SHADE class SHSuperBatch; class SHVkLogicalDevice; class SHVkCommandBuffer; + class SHVkDescriptorPool; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -51,9 +52,9 @@ namespace SHADE void PrepareBatches(); void AddToBatch(SHRenderable const* renderable); void RemoveFromBatch(SHRenderable const* renderable); - void FinaliseBatches(Handle device, uint32_t frameIndex); + void FinaliseBatches(Handle device, Handle descPool, uint32_t frameIndex); void ClearBatches(); - void UpdateBuffers(uint32_t frameIndex); + void UpdateBuffers(uint32_t frameIndex, Handle descPool); void RegisterSuperBatch(Handle superBatch); void DeregisterSuperBatch(Handle superBatch); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index b0173399..0d75dca8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHBatch.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" namespace SHADE { @@ -78,21 +79,21 @@ namespace SHADE batches.clear(); } - void SHSuperBatch::UpdateBuffers(uint32_t frameIndex) + void SHSuperBatch::UpdateBuffers(uint32_t frameIndex, Handle descPool) { for (auto& batch : batches) { - batch.UpdateMaterialBuffer(frameIndex); + batch.UpdateMaterialBuffer(frameIndex, descPool); batch.UpdateTransformBuffer(frameIndex); } } - void SHSuperBatch::Build(Handle device, uint32_t frameIndex) noexcept + void SHSuperBatch::Build(Handle device, Handle descPool, uint32_t frameIndex) noexcept { // Build all batches for (auto& batch : batches) { - batch.Build(device, frameIndex); + batch.Build(device, descPool, frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index a09fc64e..9743e7dc 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -55,8 +55,8 @@ namespace SHADE void Add(const SHRenderable* renderable) noexcept; void Remove(const SHRenderable* renderable) noexcept; void Clear() noexcept; - void UpdateBuffers(uint32_t frameIndex); - void Build(Handle device, uint32_t frameIndex) noexcept; + void UpdateBuffers(uint32_t frameIndex, Handle descPool); + void Build(Handle device, Handle descPool, uint32_t frameIndex) noexcept; void Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index ee6d0e8c..219ab933 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -7,7 +7,17 @@ namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Static Definitions */ + /*-----------------------------------------------------------------------------------*/ + std::vector> SHGraphicsGlobalData::globalDescSetLayouts; + Handle SHGraphicsGlobalData::globalDescSets; + SHVertexInputState SHGraphicsGlobalData::defaultVertexInputState; + Handle SHGraphicsGlobalData::dummyPipelineLayout; + /*-----------------------------------------------------------------------------------*/ + /* Function Definitions */ + /*-----------------------------------------------------------------------------------*/ void SHGraphicsGlobalData::InitDescSetLayouts(Handle logicalDevice) noexcept { SHVkDescriptorSetLayout::Binding genericDataBinding @@ -87,18 +97,18 @@ namespace SHADE InitDefaultVertexInputState(); } - std::vector> const& SHGraphicsGlobalData::GetDescSetLayouts(void) const noexcept + std::vector> const& SHGraphicsGlobalData::GetDescSetLayouts(void) noexcept { return globalDescSetLayouts; } - SHVertexInputState const& SHGraphicsGlobalData::GetDefaultViState(void) const noexcept + SHVertexInputState const& SHGraphicsGlobalData::GetDefaultViState(void) noexcept { return defaultVertexInputState; } - Handle SHGraphicsGlobalData::GetDummyPipelineLayout(void) const noexcept + Handle SHGraphicsGlobalData::GetDummyPipelineLayout(void) noexcept { return dummyPipelineLayout; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index 9333d0ab..b6f84c52 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -15,31 +15,37 @@ namespace SHADE { private: //! Global descriptor set layouts. Used to allocate descriptor sets - std::vector> globalDescSetLayouts; + static std::vector> globalDescSetLayouts; //! Global Descriptor sets - Handle globalDescSets; + static Handle globalDescSets; //! Default vertex input state (used by everything). - SHVertexInputState defaultVertexInputState; + static SHVertexInputState defaultVertexInputState; //! Since we want to bind global data but can't do so without a pipeline layout, //! we create a dummy pipeline layout to use it for binding. - Handle dummyPipelineLayout; + static Handle dummyPipelineLayout; + + static void InitDescSetLayouts (Handle logicalDevice) noexcept; + static void InitDefaultVertexInputState(void) noexcept; - void InitDescSetLayouts (Handle logicalDevice) noexcept; - void InitDefaultVertexInputState(void) noexcept; public: + /*-----------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------*/ + SHGraphicsGlobalData() = delete; + /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle logicalDevice) noexcept; + static void Init (Handle logicalDevice) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - std::vector> const& GetDescSetLayouts (void) const noexcept; - SHVertexInputState const& GetDefaultViState (void) const noexcept; - Handle GetDummyPipelineLayout (void) const noexcept; + static std::vector> const& GetDescSetLayouts (void) noexcept; + static SHVertexInputState const& GetDefaultViState (void) noexcept; + static Handle GetDummyPipelineLayout (void) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 67a6d6eb..fb3535c1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -110,8 +110,7 @@ namespace SHADE - Global data /*-----------------------------------------------------------------------*/ - globalData = resourceManager.Create(); - globalData->Init(device); + SHGraphicsGlobalData::Init(device); // Set Up Cameras screenCamera = resourceManager.Create(); @@ -135,7 +134,7 @@ namespace SHADE } // Initialize world render graph - worldRenderGraph->Init(device, swapchain, globalData); + worldRenderGraph->Init(device, swapchain); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); @@ -175,7 +174,7 @@ namespace SHADE debugWorldRenderer->SetCamera(worldCamera);*/ // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); + worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); @@ -248,7 +247,7 @@ namespace SHADE // Begin recording the command buffer currentCmdBuffer->BeginRecording(); - currentCmdBuffer->ForceSetPipelineLayout(globalData->GetDummyPipelineLayout()); + currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout()); // Bind all the buffers required for meshes for (auto& [buffer, bindingPoint] : MESH_DATA) @@ -270,7 +269,7 @@ namespace SHADE textureDescSet, vk::PipelineBindPoint::eGraphics, 0, - std::span{texDynamicOffset.data(), texDynamicOffset.size()} + texDynamicOffset ); } @@ -278,7 +277,7 @@ namespace SHADE renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); // Draw first - renderers[renIndex]->Draw(frameIndex); + renderers[renIndex]->Draw(frameIndex, descPool); // End the command buffer recording currentCmdBuffer->EndRecording(); @@ -331,7 +330,7 @@ namespace SHADE for (auto vp : viewports) for (auto renderer : vp->GetRenderers()) { - renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame()); + renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame(), descPool); } // Resize @@ -504,8 +503,7 @@ namespace SHADE { texLibrary.BuildTextures ( - device, graphicsTexCmdBuffer, graphicsQueue, descPool, - globalData->GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] + device, graphicsTexCmdBuffer, graphicsQueue, descPool ); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 5a2b342d..5e8068be 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -287,9 +287,6 @@ namespace SHADE // Not Owned Resources SHWindow* window = nullptr; - // global data (descriptor sets as well) - Handle globalData; - // Middle End Resources ResourceManager resourceManager; SHMeshLibrary meshLibrary; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index c7e2a86d..84ac3ee2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -60,9 +60,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------------*/ - void SHRenderer::Draw(uint32_t frameIndex) noexcept + void SHRenderer::Draw(uint32_t frameIndex, Handle descPool) noexcept { - renderGraph->Execute(frameIndex, commandBuffers[frameIndex]); + renderGraph->Execute(frameIndex, commandBuffers[frameIndex], descPool); } void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 255ab289..5e72da85 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -74,7 +74,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ - void Draw(uint32_t frameIndex) noexcept; + void Draw(uint32_t frameIndex, Handle descPool) noexcept; void UpdateDataAndBind (Handle cmdBuffer, uint32_t frameIndex) noexcept; void UpdateCameraDataToBuffer (void) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 92d832f1..10b42a9e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -11,7 +11,7 @@ namespace SHADE SHPipelineLayoutParams params { .shaderModules = {vsFsPair.first, vsFsPair.second}, - .globalDescSetLayouts = globalData->GetDescSetLayouts() + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() }; // Create the pipeline layout @@ -19,7 +19,7 @@ namespace SHADE // Create the pipeline and configure the default vertex input state auto newPipeline = logicalDevice->CreateGraphicsPipeline(pipelineLayout, nullptr, renderpass, subpass); - newPipeline->GetPipelineState().SetVertexInputState(globalData->GetDefaultViState()); + newPipeline->GetPipelineState().SetVertexInputState(SHGraphicsGlobalData::GetDefaultViState()); // Actually construct the pipeline newPipeline->ConstructPipeline(); @@ -30,10 +30,9 @@ namespace SHADE return newPipeline; } - void SHPipelineLibrary::Init(Handle device, Handle inGlobalData) noexcept + void SHPipelineLibrary::Init(Handle device) noexcept { logicalDevice = device; - globalData = inGlobalData; } Handle SHPipelineLibrary::GetDrawPipline(std::pair, Handle> const& vsFsPair) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index a16976f7..9a411d25 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -24,14 +24,9 @@ namespace SHADE //! a map of pipelines that are hashed using a pair of shader module handles std::unordered_map, Handle>, Handle> pipelines; - - // Global data - Handle globalData; - - public: - void Init (Handle device, Handle inGlobalData) noexcept; + void Init (Handle device) noexcept; // Draw pipeline functions. used only when creating pipelines for drawing using a vertex and fragment shader Handle CreateDrawPipeline ( diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index e1461dd3..b7b14697 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -24,6 +24,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Assets/Asset Types/SHDDSAsset.h" #include "Graphics/Images/SHVkImage.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" namespace SHADE { @@ -77,7 +78,7 @@ namespace SHADE isDirty = true; } - void SHTextureLibrary::BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout) + void SHTextureLibrary::BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool) { // Don't do anything if there are no updates if (!isDirty) @@ -173,9 +174,12 @@ namespace SHADE { if (!texDescriptors) { - texDescriptors = descPool->Allocate({ descLayout }, { static_cast(texOrder.size()) }); + texDescriptors = descPool->Allocate + ( + { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] }, + { static_cast(texOrder.size()) } + ); } - const auto ALIGNED_SIZE = device->PadSSBOSize(sizeof(uint32_t)); texDescriptors->ModifyWriteDescImage ( SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index 4904ca14..89168596 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -125,7 +125,7 @@ namespace SHADE queue. */ /***************************************************************************/ - void BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool, Handle descLayout); + void BuildTextures(Handle device, Handle cmdBuffer, Handle graphicsQueue, Handle descPool); /*-----------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 588e950e..828a83f1 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -328,11 +328,10 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept + void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain) noexcept { logicalDeviceHdl = logicalDevice; swapchainHdl = swapchain; - globalData = inGlobalData; } /***************************************************************************/ @@ -364,7 +363,6 @@ namespace SHADE , nodes{ std::move(rhs.nodes) } , graphResources{ std::move(rhs.graphResources) } , resourceManager{ std::move(rhs.resourceManager) } - , globalData{ rhs.globalData } { } @@ -380,7 +378,6 @@ namespace SHADE nodes = std::move(rhs.nodes); graphResources = std::move(rhs.graphResources); resourceManager = std::move(rhs.resourceManager); - globalData = rhs.globalData; return *this; } @@ -438,7 +435,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources, globalData)); + nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } @@ -466,20 +463,20 @@ namespace SHADE // TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a // better way to manage these - void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer) noexcept + void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept { // TODO: DON'T HARDCODE THIS cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); for (auto& node : nodes) - node->Execute(cmdBuffer, frameIndex); + node->Execute(cmdBuffer, descPool, frameIndex); } - void SHRenderGraph::FinaliseBatch(uint32_t frameIndex) + void SHRenderGraph::FinaliseBatch(uint32_t frameIndex, Handle descPool) { for (auto& node : nodes) { - node->FinaliseBatch(frameIndex); + node->FinaliseBatch(frameIndex, descPool); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index abb85751..8b5b2212 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -61,9 +61,6 @@ namespace SHADE //! Resource library for graph handles ResourceManager resourceManager; - - //! Handle to global data - Handle globalData; public: /*-----------------------------------------------------------------------*/ @@ -77,12 +74,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain, Handle inGlobalData) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; - void Execute (uint32_t frameIndex, Handle cmdBuffer) noexcept; - void FinaliseBatch(uint32_t frameIndex); + void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; + void FinaliseBatch(uint32_t frameIndex, Handle descPool); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 4f99ea10..b981225a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -76,7 +76,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept + SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} @@ -91,7 +91,7 @@ namespace SHADE , ptrToResources{ resources } { // pipeline library initialization - pipelineLibrary.Init(logicalDeviceHdl, globalData); + pipelineLibrary.Init(logicalDeviceHdl); attachmentDescriptions.resize(attResources.size()); @@ -207,14 +207,14 @@ namespace SHADE return subpass; } - void SHRenderGraphNode::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept + void SHRenderGraphNode::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept { frameIndex = (framebuffers.size() > 1) ? frameIndex : 0; commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); for (uint32_t i = 0; i < subpasses.size(); ++i) { - subpasses[i]->Execute(commandBuffer, frameIndex); + subpasses[i]->Execute(commandBuffer, descPool, frameIndex); // Go to next subpass if not last subpass if (i != subpasses.size() - 1) @@ -247,9 +247,9 @@ namespace SHADE return pipeline; } - void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex) + void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex, Handle descPool) { - batcher.FinaliseBatches(logicalDeviceHdl, frameIndex); + batcher.FinaliseBatches(logicalDeviceHdl, descPool, frameIndex); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index cdaddb8e..59b20271 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -17,6 +17,7 @@ namespace SHADE class SHRenderGraphResource; class SHVkLogicalDevice; class SHVkRenderpass; + class SHVkDescriptorPool; class SH_API SHRenderGraphNode : public ISelfHandle { @@ -85,7 +86,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources, Handle globalData) noexcept; + SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; @@ -94,9 +95,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ Handle AddSubpass(std::string subpassName) noexcept; // TODO: RemoveSubpass() - void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; + void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; - void FinaliseBatch(uint32_t frameIndex); + void FinaliseBatch(uint32_t frameIndex, Handle descPool); /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 2d79b764..007502dd 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -156,10 +156,10 @@ namespace SHADE inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); } - void SHSubpass::Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept + void SHSubpass::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept { // Ensure correct transforms are provided - superBatch->UpdateBuffers(frameIndex); + superBatch->UpdateBuffers(frameIndex, descPool); // Draw all the batches superBatch->Draw(commandBuffer, frameIndex); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index da36fe46..b8b8717f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -14,6 +14,7 @@ namespace SHADE class SHRenderGraphResource; class SHVkCommandBuffer; class SHVkDescriptorSetLayout; + class SHVkDescriptorPool; class SH_API SHSubpass : public ISelfHandle { @@ -74,7 +75,7 @@ namespace SHADE void AddInput(std::string resourceToReference) noexcept; // Runtime functions - void Execute(Handle& commandBuffer, uint32_t frameIndex) noexcept; + void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; void Init(ResourceManager& resourceManager) noexcept; From 04b452543ccb6cca4989f793dce727da6387fae0 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 16:05:47 +0800 Subject: [PATCH 246/793] Modified TextureLibrary to use SHTextureAsset instead of SHDDSAsset --- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 +-- .../src/Assets/Libraries/SHTextureLoader.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 ++--- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 +- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 30 +++++-------------- .../MiddleEnd/Textures/SHTextureLibrary.h | 4 +-- 6 files changed, 17 insertions(+), 33 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index bc99dada..39c8cf97 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -55,13 +55,13 @@ namespace Sandbox graphicsSystem->BuildMeshBuffers(); // Load Textures - auto textures = SHADE::SHAssetManager::GetAllDDS(); + /*auto textures = SHADE::SHAssetManager::GetAllTextures(); std::vector> texHandles; for (const auto& tex : textures) { auto texture = graphicsSystem->Add(tex); texHandles.push_back(texture); - } + }*/ graphicsSystem->BuildTextures(); // Create Materials diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 33270bb6..94b65dc1 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -79,7 +79,7 @@ namespace SHADE } SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; - std::memcpy(pixel, file.GetDDSData(), totalBytes); + //std::memcpy(pixel, file.GetDDSData(), totalBytes); //pixel = std::move(reinterpret_cast(file.GetDDSData())); asset.numBytes = totalBytes; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index fb3535c1..8129298b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -31,7 +31,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Images/SHVkSampler.h" -#include "Assets/Asset Types/SHDDSAsset.h" +#include "Assets/Asset Types/SHTextureAsset.h" namespace SHADE { @@ -482,10 +482,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Texture Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHGraphicsSystem::Add(const SHDDSAsset& ddsAsset) + Handle SHGraphicsSystem::Add(const SHTextureAsset& texAsset) { - auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(ddsAsset.image.GetMipCount()) }); - return texLibrary.Add(ddsAsset, sampler); + auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(texAsset.mipOffsets.size()) }); + return texLibrary.Add(texAsset, sampler); } SHADE::Handle SHGraphicsSystem::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 5e8068be..84dc39cd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -215,7 +215,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(const SHDDSAsset& ddsAsset); + Handle Add(const SHTextureAsset& texAsset); Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets); /*******************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index b7b14697..c6793796 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -22,40 +22,24 @@ of DigiPen Institute of Technology is prohibited. #include "Tools/SHLogger.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" -#include "Assets/Asset Types/SHDDSAsset.h" #include "Graphics/Images/SHVkImage.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "Assets/Asset Types/SHTextureAsset.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHTextureLibrary::Add(const SHDDSAsset& ddsAsset, Handle sampler) + Handle SHTextureLibrary::Add(const SHTextureAsset& texAsset, Handle sampler) { - // Define constants - const uint32_t IMG_WIDTH = ddsAsset.image.GetWidth(); - const uint32_t IMG_HEIGHT = ddsAsset.image.GetHeight(); - const uint32_t MIPMAP_LEVEL = ddsAsset.image.GetMipCount(); - - // Compute total texture size and create buffer image copy objects - std::vector mipOffsets(MIPMAP_LEVEL); - uint32_t texBytes = 0; - for (uint32_t i = 0; i < MIPMAP_LEVEL; i++) - { - mipOffsets[i] = texBytes; - - // Get ready for next mip - texBytes += ddsAsset.image.GetImageData(i)->m_memSlicePitch; - } - return Add ( - texBytes, - reinterpret_cast(ddsAsset.image.m_dds.data()), - IMG_WIDTH, IMG_HEIGHT, - ddsLoaderToVkFormat(ddsAsset.image.GetFormat(), true), - mipOffsets, + texAsset.numBytes, + texAsset.pixelData, + texAsset.width, texAsset.height, + texAsset.format, + texAsset.mipOffsets, sampler ); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index 89168596..660d93eb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -37,7 +37,7 @@ namespace SHADE class SHVkDescriptorSetLayout; class SHVkDescriptorSetGroup; class SHVkSampler; - struct SHDDSAsset; + class SHTextureAsset; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -94,7 +94,7 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(const SHDDSAsset& ddsAsset, Handle sampler); + Handle Add(const SHTextureAsset& texAsset, Handle sampler); Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets, Handle sampler); /*******************************************************************************/ /*! From e0ad6fbc716a5ad84d16a2c1fb2855c4802f00a2 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 27 Sep 2022 16:11:03 +0800 Subject: [PATCH 247/793] Forked tinyddsloader into org Updated dependencies.bat --- Dependencies.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependencies.bat b/Dependencies.bat index 7c1d159d..e16c4267 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -144,7 +144,7 @@ if %_e%==14 (goto :done) else (goto :tinyddsloader) :tinyddsloader echo --------------------tinyddsloader------------------------- rmdir "Dependencies/tinyddsloader" /S /Q -git clone https://github.com/benikabocha/tinyddsloader.git "Dependencies/tinyddsloader" +git clone https://github.com/SHADE-DP/tinyddsloader.git "Dependencies/tinyddsloader" :done echo DONE! From 357b36a9b085cf08c0caf5b190081f48f329525d Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 27 Sep 2022 16:24:08 +0800 Subject: [PATCH 248/793] Added RigidBody Component --- SHADE_Engine/src/Math/SHMathHelpers.hpp | 2 +- .../Math/Transform/SHTransformComponent.cpp | 37 -- .../src/Math/Transform/SHTransformComponent.h | 8 +- .../Components/SHRigidBodyComponent.cpp | 499 ++++++++++++++++++ .../Physics/Components/SHRigidBodyComponent.h | 147 ++++++ SHADE_Engine/src/SHpch.h | 1 + SHADE_Engine/src/Tools/SHException.h | 17 +- 7 files changed, 662 insertions(+), 49 deletions(-) create mode 100644 SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp create mode 100644 SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h diff --git a/SHADE_Engine/src/Math/SHMathHelpers.hpp b/SHADE_Engine/src/Math/SHMathHelpers.hpp index 0e5fc5fa..d95bcfa2 100644 --- a/SHADE_Engine/src/Math/SHMathHelpers.hpp +++ b/SHADE_Engine/src/Math/SHMathHelpers.hpp @@ -120,7 +120,7 @@ namespace SHADE bool SHMath::CompareFloat(T lhs, T rhs, T absTolerance, T relTolerance) { const T RTOL = relTolerance * Max(std::fabs(lhs), std::fabs(rhs)); - return std::fabs(lhs - rhs) <= MAX(absTolerance, RTOL); + return std::fabs(lhs - rhs) <= Max(absTolerance, RTOL); } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index cdc5105f..fd950628 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -24,43 +24,6 @@ namespace SHADE , dirty { true } {} - SHTransformComponent::SHTransformComponent(const SHTransformComponent& rhs) noexcept - : SHComponent {} - , dirty { true } - , local { rhs.local } - , world { rhs.world } - {} - - SHTransformComponent::SHTransformComponent(SHTransformComponent&& rhs) noexcept - : SHComponent {} - , dirty { true } - , local { std::move(rhs.local) } - , world { std::move(rhs.world) } - {} - - /*-----------------------------------------------------------------------------------*/ - /* Operator Overload Definitions */ - /*-----------------------------------------------------------------------------------*/ - - SHTransformComponent& SHTransformComponent::operator=(const SHTransformComponent& rhs) noexcept - { - dirty = true; - local = rhs.local; - world = rhs.world; - - return *this; - } - - SHTransformComponent& SHTransformComponent::operator=(SHTransformComponent&& rhs) noexcept - { - dirty = true; - local = std::move(rhs.local); - world = std::move(rhs.world); - - return *this; - } - - /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index 7f7dd473..50377b3a 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -40,15 +40,15 @@ namespace SHADE ~SHTransformComponent () override = default; SHTransformComponent () noexcept; - SHTransformComponent (const SHTransformComponent& rhs) noexcept; - SHTransformComponent (SHTransformComponent&& rhs) noexcept; + SHTransformComponent (const SHTransformComponent& rhs) noexcept = default; + SHTransformComponent (SHTransformComponent&& rhs) noexcept = default; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHTransformComponent& operator=(const SHTransformComponent& rhs) noexcept; - SHTransformComponent& operator=(SHTransformComponent&& rhs) noexcept; + SHTransformComponent& operator=(const SHTransformComponent& rhs) noexcept = default; + SHTransformComponent& operator=(SHTransformComponent&& rhs) noexcept = default; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp new file mode 100644 index 00000000..2de6e52a --- /dev/null +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -0,0 +1,499 @@ +/**************************************************************************************** + * \file SHRigidBodyComponent.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Rigidbody Component. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHRigidBodyComponent.h" + +// Project Headers +#include "Tools/SHUtilities.h" +#include "Math/SHMathHelpers.h" +#include "Math/SHQuaternion.h" + +/*-------------------------------------------------------------------------------------*/ +/* Local Function Definitions */ +/*-------------------------------------------------------------------------------------*/ + + + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHRigidBodyComponent::SHRigidBodyComponent() noexcept + : rigidBody { nullptr } + , type { Type::DYNAMIC } + , mass { 1.0f } + , drag { 0.01f } + , angularDrag { 0.01f } + , flags { 0 } + { + // Set default flags: Gravity & Sleeping enabled + flags |= 1U << 0; + flags |= 1U << 1; + + // TODO(Diren): Send an update command to the physics system + } + + SHRigidBodyComponent::~SHRigidBodyComponent() + { + rigidBody = nullptr; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHRigidBodyComponent::IsGravityEnabled() const noexcept + { + const bool GRAVITY = flags & (1U << 0); + if (rigidBody) + { + SHASSERT(rigidBody->isGravityEnabled() == GRAVITY, "ReactPhysics and SHADE body enable gravity do not match!") + } + + return GRAVITY; + } + + bool SHRigidBodyComponent::IsSleepingEnabled() const noexcept + { + const bool SLEEP = flags & (1U << 1); + if (rigidBody) + { + SHASSERT(rigidBody->isAllowedToSleep() == SLEEP, "ReactPhysics and SHADE body enable sleep do not match!") + } + + return SLEEP; + } + + SHRigidBodyComponent::Type SHRigidBodyComponent::GetType() const noexcept + { + if (rigidBody) + { + SHASSERT + ( + SHUtilities::ConvertEnum(rigidBody->getType()) == SHUtilities::ConvertEnum(type), + "ReactPhysics and SHADE body types do not match!" + ) + } + + return type; + } + + float SHRigidBodyComponent::GetMass() const noexcept + { + if (rigidBody) + { + SHASSERT(rigidBody->getMass() == mass, "ReactPhysics and SHADE body masses do not match!") + } + + return mass; + } + + float SHRigidBodyComponent::GetDrag() const noexcept + { + if (rigidBody) + { + SHASSERT + ( + SHMath::CompareFloat(rigidBody->getLinearDamping(), drag), + "ReactPhysics and SADE body drag coefficients do not match!" + ) + } + + return drag; + } + + float SHRigidBodyComponent::GetAngularDrag() const noexcept + { + if (rigidBody) + { + SHASSERT + ( + SHMath::CompareFloat(rigidBody->getAngularDamping(), angularDrag), + "ReactPhysics and SADE body drag coefficients do not match!" + ) + } + + return angularDrag; + } + + bool SHRigidBodyComponent::GetFreezePositionX() const noexcept + { + const bool FREEZE_X_POS = flags & (1U << 2); + if (rigidBody) + { + const bool RP3D_FREEZE_X_POS = fabs(rigidBody->getLinearLockAxisFactor().x) > 0.0f; + SHASSERT(RP3D_FREEZE_X_POS == FREEZE_X_POS, "ReactPhysics and SHADE body x-axis position lock do not match!") + } + + return FREEZE_X_POS; + } + + bool SHRigidBodyComponent::GetFreezePositionY() const noexcept + { + const bool FREEZE_Y_POS = flags & (1U << 3); + if (rigidBody) + { + const bool RP3D_FREEZE_Y_POS = fabs(rigidBody->getLinearLockAxisFactor().y) > 0.0f; + SHASSERT(RP3D_FREEZE_Y_POS == FREEZE_Y_POS, "ReactPhysics and SHADE body y-axis position lock do not match!") + } + + return FREEZE_Y_POS; + } + + bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept + { + const bool FREEZE_Z_POS = flags & (1U << 4); + if (rigidBody) + { + const bool RP3D_FREEZE_Z_POS = fabs(rigidBody->getLinearLockAxisFactor().z) > 0.0f; + SHASSERT(RP3D_FREEZE_Z_POS == FREEZE_Z_POS, "ReactPhysics and SHADE body z-axis position lock do not match!") + } + + return FREEZE_Z_POS; + } + + bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept + { + const bool FREEZE_X_ROT = flags & (1U << 5); + if (rigidBody) + { + const bool RP3D_FREEZE_Y_ROT = fabs(rigidBody->getAngularLockAxisFactor().x) > 0.0f; + SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_X_ROT, "ReactPhysics and SHADE body x-axis rotation lock do not match!") + } + + return FREEZE_X_ROT; + } + + bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept + { + const bool FREEZE_Y_ROT = flags & (1U << 6); + if (rigidBody) + { + const bool RP3D_FREEZE_Y_ROT = fabs(rigidBody->getAngularLockAxisFactor().y) > 0.0f; + SHASSERT(RP3D_FREEZE_Y_ROT == FREEZE_Y_ROT, "ReactPhysics and SHADE body y-axis rotation lock do not match!") + } + + return FREEZE_Y_ROT; + } + + bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept + { + const bool FREEZE_Z_ROT = flags & (1U << 7); + if (rigidBody) + { + const bool RP3D_FREEZE_Z_ROT = fabs(rigidBody->getAngularLockAxisFactor().z) > 0.0f; + SHASSERT(RP3D_FREEZE_Z_ROT == FREEZE_Z_ROT, "ReactPhysics and SHADE body z-axis rotation lock do not match!") + } + + return FREEZE_Z_ROT; + } + + SHVec3 SHRigidBodyComponent::GetForce() const noexcept + { + SHVec3 result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getForce(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHVec3 SHRigidBodyComponent::GetTorque() const noexcept + { + SHVec3 result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getTorque(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept + { + SHVec3 result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getLinearVelocity(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept + { + SHVec3 result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getAngularVelocity(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHVec3 SHRigidBodyComponent::GetPosition() const noexcept + { + SHVec3 result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getTransform().getPosition(); + result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; + } + + return result; + } + + SHQuaternion SHRigidBodyComponent::GetOrientation() const noexcept + { + SHQuaternion result; + + if (rigidBody) + { + const auto RP3D_RESULT = rigidBody->getTransform().getOrientation(); + result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }; + } + + return result; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHRigidBodyComponent::SetType(Type newType) noexcept + { + if (type == newType) + return; + + type = newType; + if (rigidBody) + rigidBody->setType(static_cast(newType)); + } + + void SHRigidBodyComponent::SetMass(float newMass) noexcept + { + mass = newMass; + if (rigidBody) + rigidBody->setMass(newMass); + } + + void SHRigidBodyComponent::SetDrag(float newDrag) noexcept + { + drag = newDrag; + if (rigidBody) + rigidBody->setLinearDamping(newDrag); + } + + void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept + { + angularDrag = newAngularDrag; + if (rigidBody) + rigidBody->setAngularDamping(newAngularDrag); + } + + void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept + { + SetFlag(enableGravity, 0); + if (rigidBody) + rigidBody->enableGravity(enableGravity); + } + + void SHRigidBodyComponent::SetSleepingEnabled(bool enableSleeping) noexcept + { + SetFlag(enableSleeping, 1); + if (rigidBody) + rigidBody->setIsAllowedToSleep(enableSleeping); + } + + void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept + { + SetFlag(freezePositionX, 2); + SetRP3DLinearConstraints(); + } + + void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept + { + SetFlag(freezePositionY, 3); + SetRP3DLinearConstraints(); + } + + void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept + { + SetFlag(freezePositionZ, 4); + SetRP3DLinearConstraints(); + } + + void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept + { + SetFlag(freezeRotationX, 5); + SetRP3DAngularConstraints(); + } + + void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept + { + SetFlag(freezeRotationY, 6); + SetRP3DAngularConstraints(); + } + + void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept + { + SetFlag(freezeRotationZ, 7); + SetRP3DAngularConstraints(); + } + + void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 NEW_V { newLinearVelocity.x, newLinearVelocity.y, newLinearVelocity.z }; + rigidBody->setLinearVelocity(NEW_V); + } + } + + void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 NEW_V { newAngularVelocity.x, newAngularVelocity.y, newAngularVelocity.z }; + rigidBody->setAngularVelocity(NEW_V); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F { force.x, force.y, force.z }; + rigidBody->applyWorldForceAtCenterOfMass(F); + } + } + + void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F{ force.x, force.y, force.z }; + const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; + rigidBody->applyWorldForceAtLocalPosition(F, P); + } + } + + void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F{ force.x, force.y, force.z }; + const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; + rigidBody->applyWorldForceAtWorldPosition(F, P); + } + } + + void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; + rigidBody->applyLocalForceAtCenterOfMass(F); + } + } + + void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; + const rp3d::Vector3 P{ localPos.x, localPos.y, localPos.z }; + rigidBody->applyLocalForceAtLocalPosition(F, P); + } + } + + void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 F{ relativeForce.x, relativeForce.y, relativeForce.z }; + const rp3d::Vector3 P{ worldPos.x, worldPos.y, worldPos.z }; + rigidBody->applyLocalForceAtWorldPosition(F, P); + } + } + + void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 T{ torque.x, torque.y, torque.z }; + rigidBody->applyWorldTorque(T); + } + } + + void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept + { + if (rigidBody) + { + const rp3d::Vector3 T{ relativeTorque.x, relativeTorque.y, relativeTorque.z }; + rigidBody->applyLocalTorque(T); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHRigidBodyComponent::SetFlag(bool flagState, int flagPos) + { + flagState ? flags |= (1U << flagPos) : flags &= ~(1U << flagPos); + } + + void SHRigidBodyComponent::SetRP3DLinearConstraints() const + { + const rp3d::Vector3 CONSTRAINTS + { + flags & 1U << 2 ? 1.0f : 0.0f, + flags & 1U << 3 ? 1.0f : 0.0f, + flags & 1U << 4 ? 1.0f : 0.0f + }; + + if (rigidBody) + rigidBody->setLinearLockAxisFactor(CONSTRAINTS); + } + + void SHRigidBodyComponent::SetRP3DAngularConstraints() const + { + const rp3d::Vector3 CONSTRAINTS + { + flags & 1U << 5 ? 1.0f : 0.0f, + flags & 1U << 6 ? 1.0f : 0.0f, + flags & 1U << 7 ? 1.0f : 0.0f + }; + + if (rigidBody) + rigidBody->setAngularLockAxisFactor(CONSTRAINTS); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h new file mode 100644 index 00000000..69338b1e --- /dev/null +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -0,0 +1,147 @@ +/**************************************************************************************** + * \file SHRigidBodyComponent.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Rigidbody Component. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "Math/Vector/SHVec3.h" +#include "Math/SHMatrix.h" +#include "ECS_Base/Components/SHComponent.h" + +namespace SHADE +{ + class SH_API SHRigidBodyComponent : public SHComponent + { + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class Type + { + STATIC + , KINEMATIC + , DYNAMIC + + , COUNT + }; + + // TODO(Diren): Collision Types + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHRigidBodyComponent () noexcept; + SHRigidBodyComponent (const SHRigidBodyComponent& rhs) noexcept = default; + SHRigidBodyComponent (SHRigidBodyComponent&& rhs) noexcept = default; + ~SHRigidBodyComponent () override; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHRigidBodyComponent& operator=(const SHRigidBodyComponent& rhs) noexcept = default; + SHRigidBodyComponent& operator=(SHRigidBodyComponent&& rhs) noexcept = default; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool IsGravityEnabled () const noexcept; + [[nodiscard]] bool IsSleepingEnabled () const noexcept; + + [[nodiscard]] Type GetType () const noexcept; + [[nodiscard]] float GetMass () const noexcept; + [[nodiscard]] float GetDrag () const noexcept; + [[nodiscard]] float GetAngularDrag () const noexcept; + + [[nodiscard]] bool GetFreezePositionX () const noexcept; + [[nodiscard]] bool GetFreezePositionY () const noexcept; + [[nodiscard]] bool GetFreezePositionZ () const noexcept; + + [[nodiscard]] bool GetFreezeRotationX () const noexcept; + [[nodiscard]] bool GetFreezeRotationY () const noexcept; + [[nodiscard]] bool GetFreezeRotationZ () const noexcept; + + [[nodiscard]] SHVec3 GetForce () const noexcept; + [[nodiscard]] SHVec3 GetTorque () const noexcept; + [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; + [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; + [[nodiscard]] SHVec3 GetPosition () const noexcept; + [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetType (Type newType) noexcept; + void SetMass (float newMass) noexcept; + void SetDrag (float newDrag) noexcept; + void SetAngularDrag (float newAngularDrag) noexcept; + + void SetGravityEnabled (bool enableGravity) noexcept; + void SetSleepingEnabled (bool enableSleeping) noexcept; + void SetFreezePositionX (bool freezePositionX) noexcept; + void SetFreezePositionY (bool freezePositionY) noexcept; + void SetFreezePositionZ (bool freezePositionZ) noexcept; + void SetFreezeRotationX (bool freezeRotationX) noexcept; + void SetFreezeRotationY (bool freezeRotationY) noexcept; + void SetFreezeRotationZ (bool freezeRotationZ) noexcept; + + void SetLinearVelocity (const SHVec3& newLinearVelocity) const noexcept; + void SetAngularVelocity (const SHVec3& newAngularVelocity) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void AddForce (const SHVec3& force) const noexcept; + void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; + void AddForceAtWorldPos (const SHVec3& force, const SHVec3& worldPos) const noexcept; + + void AddRelativeForce (const SHVec3& relativeForce) const noexcept; + void AddRelativeForceAtLocalPos (const SHVec3& relativeForce, const SHVec3& localPos) const noexcept; + void AddRelativeForceAtWorldPos (const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept; + + void AddTorque (const SHVec3& torque) const noexcept; + void AddRelativeTorque (const SHVec3& relativeTorque) const noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + rp3d::RigidBody* rigidBody; + + Type type; + + float mass; + float drag; + float angularDrag; + + SHMatrix inertiaTensor; + + // rX rY rZ pX pY pZ slp g + uint8_t flags; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void SetFlag (bool flagState, int flagPos); + void SetRP3DLinearConstraints () const ; + void SetRP3DAngularConstraints () const ; + + + }; +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/SHpch.h b/SHADE_Engine/src/SHpch.h index 8b2f11f3..7e308829 100644 --- a/SHADE_Engine/src/SHpch.h +++ b/SHADE_Engine/src/SHpch.h @@ -38,3 +38,4 @@ #include "Common/SHCommonTypes.h" #include "Tools/SHLogger.h" +#include "Tools/SHException.h" diff --git a/SHADE_Engine/src/Tools/SHException.h b/SHADE_Engine/src/Tools/SHException.h index 251217eb..2e0b82a9 100644 --- a/SHADE_Engine/src/Tools/SHException.h +++ b/SHADE_Engine/src/Tools/SHException.h @@ -75,10 +75,13 @@ namespace SHADE }; } -#define SHASSERT(cond, msg) \ - if (!(cond)) \ - { \ - SHLOGV_CRITICAL(msg) \ - std::abort(); \ - } - +#ifdef _DEBUG + #define SHASSERT(cond, msg) \ + if (!(cond)) \ + { \ + SHLOGV_CRITICAL(msg) \ + std::abort(); \ + } +#else + #define SHASSERT(cond, msg) { } +#endif From 14cd0b4be9b3d9d025784f749409280b2bb7dd64 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 16:45:35 +0800 Subject: [PATCH 249/793] Fixed SHTextureLoader loading wrong mipmap offsets --- SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 94b65dc1..b317ee09 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -74,7 +74,7 @@ namespace SHADE for (auto i{0}; i < file.GetMipCount(); ++i) { - mipOff.push_back(totalBytes); + mipOff[i] = totalBytes; totalBytes += file.GetImageData(i, 0)->m_memSlicePitch; } From 4effe016e40d7bf60852dfe7d7a822b100bca86e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 17:13:32 +0800 Subject: [PATCH 250/793] Options to rebuild scripts at runtime are now present in the editor --- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 25 ++++++++++++++++--- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 14 ++++++++++- SHADE_Engine/src/Scripting/SHScriptEngine.h | 7 ++++-- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 7e5f762c..8e26ae78 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -6,6 +6,9 @@ #include "SHEditorMenuBar.h" #include "Editor/IconsMaterialDesign.h" #include "Editor/Command/SHCommandManager.h" +#include "Scripting/SHScriptEngine.h" +#include "Editor/SHEditor.hpp" +#include "ECS_Base/Managers/SHSystemManager.h" //#==============================================================# //|| Library Includes || @@ -14,9 +17,6 @@ #include #include -#include "Editor/SHEditor.hpp" - - namespace SHADE { constexpr ImGuiWindowFlags editorMenuBarFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | @@ -100,6 +100,25 @@ namespace SHADE } ImGui::EndMenu(); } + if (ImGui::BeginMenu("Scripts")) + { + if (ImGui::Selectable("Generate Visual Studio Project")) + { + auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->GenerateScriptsCsProjFile(); + } + if (ImGui::Selectable("Build Scripts - Debug")) + { + auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->BuildScriptAssembly(true, true); + } + if (ImGui::Selectable("Build Scripts - Release")) + { + auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->BuildScriptAssembly(false, true); + } + ImGui::EndMenu(); + } ImGui::EndMainMenuBar(); } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 0c508a34..0c3e89e6 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -160,10 +160,16 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Static Utility Functions */ /*-----------------------------------------------------------------------------------*/ - bool SHScriptEngine::BuildScriptAssembly(bool debug) const + bool SHScriptEngine::BuildScriptAssembly(bool debug, bool reload) { static const std::string BUILD_LOG_PATH = "../Build.log"; + // Unload if we need to reload + if (reload) + { + UnloadScriptAssembly(); + } + // Generate csproj file if it doesn't exist if (!std::filesystem::exists(CSPROJ_PATH)) { @@ -209,6 +215,12 @@ namespace SHADE // Delete the build log file since we no longer need it deleteFile(BUILD_LOG_PATH); + // If reloading, we need to load + if (reload) + { + LoadScriptAssembly(); + } + return BUILD_SUCCESS; } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 08852e90..329bb3a5 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -184,13 +184,16 @@ namespace SHADE /// Whether or not a debug build will be built. Only debug built C# assemblies /// can be debugged. /// + /// + /// Whether or not we are reloading the assembly, if so, unload and then reload it. + /// /// Whether or not the build succeeded. - bool BuildScriptAssembly(bool debug = false) const; + bool BuildScriptAssembly(bool debug = false, bool reload = false); /// /// Generates a .csproj file for editing and compiling the C# scripts. /// /// File path to the generated file. - void GenerateScriptsCsProjFile(const std::filesystem::path& path) const; + void GenerateScriptsCsProjFile(const std::filesystem::path& path = CSPROJ_PATH) const; private: /*-----------------------------------------------------------------------------*/ From e58bb4f061b508577de744ea994fdfdf46369d5e Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 27 Sep 2022 17:15:43 +0800 Subject: [PATCH 251/793] Changed predicate type for scene graph traverse to std::function --- SHADE_Engine/src/Scene/SHSceneGraph.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 39afbb31..3f3ebf92 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -99,7 +99,7 @@ namespace SHADE using EntityNodeMap = std::unordered_map; - using UnaryPredicate = void (*)(SHSceneNode*); + using UnaryPredicate = std::function; /*---------------------------------------------------------------------------------*/ From a57c4d0d733045c20df3f8c80bb6dca4b17f3874 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 27 Sep 2022 19:17:53 +0800 Subject: [PATCH 252/793] WIP Script Inspector --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 421 +++++++++++++++++++++++++ SHADE_Engine/src/Editor/SHEditorUI.h | 312 ++++++++++++++++++ SHADE_Engine/src/Editor/SHEditorUI.hpp | 49 +++ SHADE_Managed/src/Editor/Editor.cxx | 207 ++++++++++++ SHADE_Managed/src/Editor/Editor.hxx | 65 ++++ 5 files changed, 1054 insertions(+) create mode 100644 SHADE_Engine/src/Editor/SHEditorUI.cpp create mode 100644 SHADE_Engine/src/Editor/SHEditorUI.h create mode 100644 SHADE_Engine/src/Editor/SHEditorUI.hpp create mode 100644 SHADE_Managed/src/Editor/Editor.cxx create mode 100644 SHADE_Managed/src/Editor/Editor.hxx diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp new file mode 100644 index 00000000..cbeb164f --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -0,0 +1,421 @@ +/************************************************************************************//*! +\file EditorUI.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 7, 2021 +\brief Contains the implementation of the EditorUI class. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include +// Primary Header +#include "Editor/EditorUI.h" +// External Dependencies +#include +// Project Headers +#include "Core/Resource/ResourceManager.h" +#include "Editor/ImGuiExtensions.h" +#include "Editor/Editor.h" + +namespace Pls +{ + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - ID Stack */ + /*---------------------------------------------------------------------------------*/ + void EditorUI::PushID(const std::string& id) + { + ImGui::PushID(id.c_str()); + } + + void EditorUI::PushID(int id) + { + ImGui::PushID(id); + } + + void EditorUI::PopID() + { + ImGui::PopID(); + } + + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Indent */ + /*---------------------------------------------------------------------------------*/ + void EditorUI::Indent() + { + ImGui::Indent(); + } + void EditorUI::Unindent() + { + ImGui::Unindent(); + } + + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Organisers */ + /*---------------------------------------------------------------------------------*/ + bool EditorUI::CollapsingHeader(const std::string& title) + { + return ImGui::CollapsingHeader(title.c_str()); + } + + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Pop Ups */ + /*---------------------------------------------------------------------------------*/ + bool EditorUI::BeginPopup(const std::string& label) + { + return ImGui::BeginPopup(label.c_str()); + } + void EditorUI::EndPopup() + { + ImGui::EndPopup(); + } + void EditorUI::OpenPopup(const std::string& label) + { + ImGui::OpenPopup(label.c_str()); + } + + bool EditorUI::MenuItem(const std::string& label) + { + return ImGui::MenuItem(label.c_str()); + } + + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Widgets */ + /*---------------------------------------------------------------------------------*/ + void EditorUI::Text(const std::string& title) + { + ImGui::Text(title.c_str()); + } + bool EditorUI::SmallButton(const std::string& title) + { + return ImGui::SmallButton(title.c_str()); + } + bool EditorUI::Button(const std::string& title) + { + return ImGui::Button(title.c_str()); + } + bool EditorUI::InputCheckbox(const std::string& label, bool& value) + { + return ImGui::Checkbox(label.c_str(), &value); + } + bool EditorUI::InputInt(const std::string& label, int& value) + { + return ImGui::InputInt(label.c_str(), &value, + 1, 10, + ImGuiInputTextFlags_EnterReturnsTrue); + } + bool EditorUI::InputUnsignedInt(const std::string& label, unsigned int& value) + { + int signedVal = static_cast(value); + const bool CHANGED = InputInt(label, signedVal); + if (CHANGED) + { + signedVal = std::clamp(signedVal, 0, std::numeric_limits::max()); + value = static_cast(signedVal); + } + return CHANGED; + } + bool EditorUI::InputFloat(const std::string& label, float& value) + { + return ImGui::InputFloat(label.c_str(), &value, + 0.1f, 1.0f, "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + } + bool EditorUI::InputDouble(const std::string& label, double& value) + { + return ImGui::InputDouble(label.c_str(), &value, + 0.1, 1.0, "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + } + bool EditorUI::InputAngle(const std::string& label, double& value) + { + return ImGui::InputDouble(label.c_str(), &value, + 1.0, 45.0, "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + } + + bool EditorUI::InputSlider(const std::string& label, double min, double max, double& value) + { + float val = static_cast(value); + const bool CHANGED = ImGui::SliderFloat(label.c_str(), &val, + static_cast(min), static_cast(max), "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + + if (CHANGED) + { + value = val; + } + + + return CHANGED; + } + + bool EditorUI::InputVec2(const std::string& label, vec2& value) + { + float vec[2] = + { + static_cast(value.x), + static_cast(value.y) + }; + const bool CHANGED = ImGui::InputFloat2(label.c_str(), vec, "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + if (CHANGED) + { + value.x = vec[0]; + value.y = vec[1]; + } + return CHANGED; + } + bool EditorUI::InputVec3(const std::string& label, vec3& value) + { + float vec[3] = + { + static_cast(value.x), + static_cast(value.y), + static_cast(value.z) + }; + const bool CHANGED = ImGui::InputFloat3(label.c_str(), vec, "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + if (CHANGED) + { + value.x = vec[0]; + value.y = vec[1]; + value.z = vec[2]; + } + return CHANGED; + } + + bool EditorUI::InputSliderVec3(const std::string& label, double min, double max, vec3& value) + { + float vec[3] = + { + static_cast(value.x), + static_cast(value.y), + static_cast(value.z) + }; + const bool CHANGED = ImGui::SliderFloat3(label.c_str(), vec, + static_cast(min), static_cast(max), "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + if (CHANGED) + { + value.x = vec[0]; + value.y = vec[1]; + value.z = vec[2]; + } + return CHANGED; + } + + bool EditorUI::InputColor(const std::string& label, GFX::Color& value) + { + float color[4] = + { + value.R, + value.G, + value.B, + value.A + }; + const bool CHANGED = ImGui::ColorEdit4(label.c_str(), color, + ImGuiColorEditFlags_AlphaBar | + ImGuiColorEditFlags_AlphaPreview | + ImGuiColorEditFlags_Float); + if (CHANGED) + { + value.R = color[0]; + value.G = color[1]; + value.B = color[2]; + value.A = std::clamp(color[3], 0.f, 1.f); + } + return CHANGED; + } + bool EditorUI::InputTextField(const std::string& label, std::string& value) + { + std::array buffer = { '\0' }; + strcpy_s(buffer.data(), TEXT_FIELD_MAX_LENGTH, value.c_str()); + const bool CHANGED = ImGui::InputText(label.c_str(), &buffer[0], TEXT_FIELD_MAX_LENGTH); + if (CHANGED) + { + value = std::string(buffer.data(), buffer.data() + TEXT_FIELD_MAX_LENGTH); + } + return CHANGED; + } + + bool EditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames) + { + + // Clamp input value + const std::string& INITIAL_NAME = v >= static_cast(enumNames.size()) ? "Unknown" : enumNames[v]; + bool b = false; + if (ImGui::BeginCombo(label.c_str(), INITIAL_NAME.c_str(), ImGuiComboFlags_None)) + { + for (int i = 0; i < enumNames.size(); ++i) + { + const bool IS_SELECTED = v == i; + if (ImGui::Selectable(enumNames[i].c_str(), IS_SELECTED)) + { + v = i; + b = true; + } + if (IS_SELECTED) + { + ImGui::SetItemDefaultFocus(); + } + } + ImGui::EndCombo(); + } + return b; + } + + bool EditorUI::InputTextureDropDown(const std::string& label, Resource::Snowflake& v) + { + static std::vector> resources; + + // Register texture popup + bool hasChanges = false; + if (ImGui::BeginPopup("Texture Menu")) + { + if (ImGui::Button("None")) + { + v = Resource::INVALID_SNOWFLAKE; + ImGui::CloseCurrentPopup(); + hasChanges = true; + } + for (auto& rscWrapper : resources) + { + Resource& rsc = rscWrapper.get(); + + ImGui::PushID(static_cast(rsc.GetID())); + + const GFX::Texture* TEX = rsc.LoadTexture(); + if (TEX == nullptr) + { + continue; + } + const ImTextureID TEX_ID = reinterpret_cast(static_cast(TEX->GetHandle())); + const std::string NAME = rsc.GetPath().filename().string(); + const std::string FP = rsc.GetPath().string(); + if (ImGui::ImageButtonWithText(TEX_ID, NAME.c_str())) + { + v = rsc.GetID(); + ImGui::CloseCurrentPopup(); + hasChanges = true; + } + ImGui::TextDisabled(FP.c_str()); + + ImGui::PopID(); + } + ImGui::EndPopup(); + } + + // Get texture ID of resource + ImTextureID texID = 0; + std::string texName = "None"; + Resource* rsc = ResourceManager::Find(v); + if (rsc) + { + // File + if (rsc->IsType()) + { + GFX::Texture* tex = rsc->LoadTexture(); + if (tex) + { + texID = reinterpret_cast(static_cast(tex->GetHandle())); + } + } + else + { + // TODO (Clarence): replace with missing texture image + texID = Editor::Editor::GetInternalTexture("scene.png"); + } + texName = rsc->GetPath().filename().string(); + } + + // Show texture selection menu + if (ImGui::ImageButtonWithText(texID, texName.c_str(), label.c_str())) + { + resources = ResourceManager::FindAllOfType(); + ImGui::OpenPopup("Texture Menu"); + } + + return hasChanges; + } + bool EditorUI::InputFontDropDown(const char* label, Resource::Snowflake& v) + { + static std::vector> resources; + + // Register texture popup + bool hasChanges = false; + if (ImGui::BeginPopup("Font Menu")) + { + if (ImGui::Button("None")) + { + v = Resource::INVALID_SNOWFLAKE; + ImGui::CloseCurrentPopup(); + hasChanges = true; + } + for (auto& rscWrapper : resources) + { + Resource& rsc = rscWrapper.get(); + + ImGui::PushID(static_cast(rsc.GetID())); + + const GFX::Font* FONT = rsc.LoadFont(); + if (FONT == nullptr) + { + continue; + } + const std::string NAME = rsc.GetPath().filename().string(); + const std::string FP = rsc.GetPath().string(); + if (ImGui::Button(NAME.c_str())) + { + v = rsc.GetID(); + ImGui::CloseCurrentPopup(); + hasChanges = true; + } + ImGui::TextDisabled(FP.c_str()); + + ImGui::PopID(); + } + ImGui::EndPopup(); + } + + // Get font ID of resource + ImTextureID fontID = 0; + std::string fontName = "None"; + Resource* rsc = ResourceManager::Find(v); + + if (rsc) + { + // File + if (rsc) + { + GFX::Font* font = rsc->LoadFont(); + if (font) + { + fontID = reinterpret_cast(static_cast(font->GetID())); + if (font->CreatedThisFrame()) + { + font->OnCreate() = false; + hasChanges = true; + } + } + } + else + { + // TODO (Clarence): replace with missing texture image + fontID = Editor::Editor::GetInternalFont("selawk.tff"); + } + fontName = rsc->GetPath().filename().string(); + } + + // Show font selection menu + if (ImGui::ButtonWithText(fontName.c_str(), label)) + { + resources = ResourceManager::FindAllOfType(); + ImGui::OpenPopup("Font Menu"); + } + + return hasChanges; + } +} // namespace PlushieEngine diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h new file mode 100644 index 00000000..ce9d8608 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -0,0 +1,312 @@ +/************************************************************************************//*! +\file EditorUI.h +\author Tng Kah Wei, kahwei.tng, 390009620 (50%) +\par email: kahwei.tng\@digipen.edu +\author Tay Yan Chong Clarence, t.yanchongclarence, 620008720 (50%) +\par email: t.yanchongclarence\@digipen.edu +\date Nov 7, 2021 +\brief Defines a class that encapsulates the running of a Plushie Engine + application. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Platform Defines +#include "PlushieDefines.h" +// Standard Library +#include // std::function +#include // std::string + +#include "Core/Resource/Resource.h" +#include "Graphics/Color.h" +#include "Math/Vector2.h" +#include "Math/Vector3.h" + +namespace Pls +{ + /// + /// Static class that contains useful functions for Editor UI using ImGui. + /// + class PLS_API EditorUI final + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + /// + /// Maximum length of a string supported by InputTextField() + /// + static constexpr size_t TEXT_FIELD_MAX_LENGTH = 256; + + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - ID Stack */ + /*-----------------------------------------------------------------------------*/ + /// + /// Marks the start of a stack of ImGui widgets with the specified id. + ///
    + /// Wraps up ImGui::PushID(). + ///
    + /// String-based ID. + static void PushID(const std::string& id); + /// + /// Marks the start of a stack of ImGui widgets with the specified id. + ///
    + /// Wraps up ImGui::PushID(). + ///
    + /// Integer-based ID. + static void PushID(int id); + /// + /// Marks the end of a stack of ImGui widgets from the last PushID() call. + ///
    + /// Wraps up ImGui::PopID(). + ///
    + static void PopID(); + + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Indent */ + /*-----------------------------------------------------------------------------*/ + /// + /// Indents the widgets rendered after this call. + ///
    + /// Wraps up ImGui::Indent(). + ///
    + static void Indent(); + /// + /// Unindents the widgets rendered after this call. + ///
    + /// Wraps up ImGui::Unindent(). + ///
    + static void Unindent(); + + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Organisers */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a collapsing title header. + ///
    + /// Wraps up ImGui::CollapsingHeader(). + ///
    + /// Label for the header. + /// True if the header is open, false otherwise. + static bool CollapsingHeader(const std::string& title); + + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Pop Ups */ + /*-----------------------------------------------------------------------------*/ + /// + /// Marks the start of a definition of a mini pop up that can show options. + ///
    + /// Wraps up ImGui::BeginPopup(). + ///
    + /// Label used to identify this widget. + /// Whether or not the pop up is open. + static bool BeginPopup(const std::string& label); + /// + /// Marks the end of a definition of a mini pop up that can show options. + ///
    + /// Wraps up ImGui::EndPopup(). + ///
    + static void EndPopup(); + /// + /// Opens the popup that was defined with the specified label. + ///
    + /// Wraps up ImGui::OpenPopup(). + ///
    + static void OpenPopup(const std::string& label); + /// + /// Creates a menu item in the list of items for a mini popup. + ///
    + /// Wraps up ImGui::MenuItem(). + ///
    + /// Label used to identify this widget. + /// Whether or not the menu item was selected. + static bool MenuItem(const std::string& label); + + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Widgets */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a visual text widget. + ///
    + /// Wraps up ImGui::Text(). + ///
    + /// Text to display. + static void Text(const std::string& title); + /// + /// Creates a small inline button widget. + ///
    + /// Wraps up ImGui::SmallButton(). + ///
    + /// Text to display. + /// True if button was pressed. + static bool SmallButton(const std::string& title); + /// + /// Creates a inline button widget. + ///
    + /// Wraps up ImGui::Button(). + ///
    + /// Text to display. + /// True if button was pressed. + static bool Button(const std::string& title); + /// + /// Creates a checkbox widget for boolean input. + ///
    + /// Wraps up ImGui::Checkbox(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputCheckbox(const std::string& label, bool& value); + /// + /// Creates a integer field widget for integer input. + ///
    + /// Wraps up ImGui::InputInt(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputInt(const std::string& label, int& value); + /// + /// Creates a integer field widget for unsigned integer input. + ///
    + /// Wraps up ImGui::InputInt() with an additional clamping of values. + ///
    + /// Note: As a result, the range of this function limits it to the maximum + /// value of a 32-bit signed integer instead of a 32-bit unsigned integer. + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputUnsignedInt(const std::string& label, unsigned int& value); + /// + /// Creates a decimal field widget for single precision float input. + ///
    + /// Wraps up ImGui::InputFloat(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputFloat(const std::string& label, float& value); + /// + /// Creates a decimal field widget for double precision float input. + ///
    + /// Wraps up ImGui::InputDouble(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputDouble(const std::string& label, double& value); + /// + /// Creates a decimal field widget for double input with increments of higher + /// steps meant for angle variables. + ///
    + /// Wraps up ImGui::InputDouble(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputAngle(const std::string& label, double& value); + /// + /// Creates a double slider field widget for double input. + ///
    + /// Wraps up ImGui::InputSliderFloat(). + ///
    + /// Label used to identify this widget. + /// Minimum value of the slider. + /// Maximum value of the slider. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputSlider(const std::string& label, double min, double max, double& value); + /// + /// Creates a 2x double field widget for Vector2 input. + ///
    + /// Wraps up ImGui::InputFloat2(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputVec2(const std::string& label, vec2& value); + /// + /// Creates a 3x double field widget for Vector3 input. + ///
    + /// Wraps up ImGui::InputFloat3(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputVec3(const std::string& label, vec3& value); + /// + /// Creates a 3x double slider field widget for Vector3 input. + ///
    + /// Wraps up ImGui::InputSliderFloat3(). + ///
    + /// Label used to identify this widget. + /// Minimum value of the slider. + /// Maximum value of the slider. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputSliderVec3(const std::string& label, double min, double max, vec3& value); + /// + /// Creates a colour field widget for Color input. + ///
    + /// Wraps up ImGui::ColorEdit4(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputColor(const std::string& label, GFX::Color& value); + /// + /// Creates a text field widget for string input. + ///
    + /// Wraps up ImGui::InputText(). + ///
    + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// True if the value was changed. + static bool InputTextField(const std::string& label, std::string& value); + /// + /// Creates a combo box for enumeration input. + /// + /// The type of enum to input. + /// The name of the input. + /// The reference to the value to modify. + /// The maximum value of the enum. + /// + /// Conversion function from the type of enum + /// to C-style string. + /// Whether the value was modified. + template + static bool InputEnumCombo(const std::string& label, Enum& v, int maxVal, std::function toStrFn); + /// + /// Creates a combo box for enumeration input using a specified list of names. + /// + /// The name of the input. + /// The reference to the value to modify. + /// Vector of names for each enumeration value. + /// Whether the value was modified. + static bool InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames); + /// + /// Creates a drop down widget for texture selection. + /// + /// The name of the input. + /// The reference to the value to modify. + /// Whether the value was modified. + static bool InputTextureDropDown(const std::string& label, Resource::Snowflake& v); + /// + /// Creates a drop down widget for font selection. + /// + /// The name of the input. + /// The reference to the value to modify. + /// Whether the value was modified. + static bool InputFontDropDown(const char* label, Resource::Snowflake& v); + + + private: + // Prevent instantiation of this static class + EditorUI() = delete; + }; +} // namespace PlushieEngine + +#include "EditorUI.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditorUI.hpp b/SHADE_Engine/src/Editor/SHEditorUI.hpp new file mode 100644 index 00000000..d7a3eae7 --- /dev/null +++ b/SHADE_Engine/src/Editor/SHEditorUI.hpp @@ -0,0 +1,49 @@ +/************************************************************************************//*! +\file EditorUI.hpp +\author Tay Yan Chong Clarence, t.yanchongclarence, 620008720 +\par email: t.yanchongclarence\@digipen.edu +\date Nov 8, 2021 +\brief Contains the implementation of editor inspector template functions. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Primary Header +#include "EditorUI.h" + +namespace Pls +{ + /*---------------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Widgets */ + /*---------------------------------------------------------------------------------*/ + template + inline bool EditorUI::InputEnumCombo(const std::string& label, Enum& v, int maxVal, std::function toStrFn) + { + std::vector values; + for (int i = 0; i <= maxVal; ++i) + { + values.emplace_back(static_cast(i)); + } + bool b = false; + if (ImGui::BeginCombo(label.c_str(), toStrFn(v), ImGuiComboFlags_None)) + { + for (int i = 0; i <= maxVal; ++i) + { + const auto VALUE = values[i]; + const bool IS_SELECTED = v == VALUE; + if (ImGui::Selectable(toStrFn(VALUE), IS_SELECTED)) + { + v = VALUE; + b = true; + } + if (IS_SELECTED) + { + ImGui::SetItemDefaultFocus(); + } + } + ImGui::EndCombo(); + } + return b; + } +} // namespace PlushieEngine diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx new file mode 100644 index 00000000..d6b02c8c --- /dev/null +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -0,0 +1,207 @@ +/************************************************************************************//*! +\file Editor.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 27, 2022 +\brief Contains the definition of the functions for the ScriptStore managed + static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Editor/Editor.hxx" +// External Dependencies +#include "Editor/SHEditorUI::.h" +// Project Headers +#include "Components/Component.hxx" +#include "Scripts/ScriptStore.hxx" +#include "Utility/Convert.hxx" +#include "Utility/Debug.hxx" +#include "Serialisation/ReflectionUtilities.hxx" + +// Using Directives +using namespace System::Collections::Generic; + +/*-------------------------------------------------------------------------------------*/ +/* Macro Functions */ +/*-------------------------------------------------------------------------------------*/ +/// +/// Macro expansion that is used in renderFieldInInspector() to check the type of a field +/// named "field" against the specified type and if it matches, retrieves the value of +/// that field from an object named "object" and pass it into the specified SHEditorUI:: +/// function named "FUNC" by casting it into the NATIVE_TYPE specified. +///
    +/// This only works for primitive types that have the same types for managed and native. +///
    +/// The managed type of the object to edit. +/// The native type of the object to edit. +/// The SHEditorUI:: function to use for editing. +#define RENDER_FIELD(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ +(field->FieldType == MANAGED_TYPE::typeid) \ +{ \ + NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ + if (SHEditorUI::::FUNC(Convert::ToNative(field->Name), val)) \ + { \ + field->SetValue(object, val); \ + } \ +} \ +/// +/// Macro expansion that is used in renderFieldInInspector() to check the type of a field +/// named "field" against the specified type and if it matches, retrieves the value of +/// that field from an object named "object" and pass it into the specified SHEditorUI:: +/// function named "FUNC" by casting it into the NATIVE_TYPE specified. +///
    +/// This only works for types that have an implementation of Convert::ToNative and +/// Convert::ToCLI. +///
    +/// The managed type of the object to edit. +/// The native type of the object to edit. +/// The SHEditorUI:: function to use for editing. +#define RENDER_FIELD_CASTED(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ +(field->FieldType == MANAGED_TYPE::typeid) \ +{ \ + NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ + if (SHEditorUI::::FUNC(Convert::ToNative(field->Name), val)) \ + { \ + field->SetValue(object, Convert::ToCLI(val)); \ + } \ +} \ + +/*-------------------------------------------------------------------------------------*/ +/* Function Definitions */ +/*-------------------------------------------------------------------------------------*/ +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Script Rendering Functions */ + /*---------------------------------------------------------------------------------*/ + void Editor::RenderScriptsInInspector(Entity entity) + { + SAFE_NATIVE_CALL_BEGIN + // Get scripts + IEnumerable^ scripts = ScriptStore::GetAllScripts(entity); + + // Skip if no scripts + if (scripts != nullptr) + { + // Display each script if any + int index = 0; + for each (Script^ script in scripts) + { + renderScriptInInspector(entity, script, index++); + } + } + + // Render Add Script + //RenderScriptAddButton(entity); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.Editor.RenderScriptsInInspector") + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void Editor::renderScriptInInspector(Entity entity, Script^ script, int index) + { + // Constants + const std::string LABEL = Convert::ToNative(script->GetType()->Name); + const char* CONTEXT_MENU_ID = "scriptContextMenu"; + + // Header + SHEditorUI::::PushID(index); + if (SHEditorUI::::CollapsingHeader(LABEL)) + { + SHEditorUI::::PushID(LABEL); + SHEditorUI::::Indent(); + { + // Define context menu + if (SHEditorUI::::BeginPopup(CONTEXT_MENU_ID)) + { + if (SHEditorUI::::MenuItem("Remove Script")) + { + // Mark script for removal + ScriptStore::RemoveScript(entity, script); + } + SHEditorUI::::EndPopup(); + } + + // Context menu button + if (SHEditorUI::::SmallButton("...")) + { + SHEditorUI::::OpenPopup(CONTEXT_MENU_ID); + } + + // Go through all fields and output them + auto fields = ReflectionUtilities::GetInstanceFields(script); + int id = 0; + for each (auto field in fields) + { + // Ignore non-serialisable fields + if (!ReflectionUtilities::FieldIsSerialisable(field)) + continue; + + // Render the input field for this field + SHEditorUI::::PushID(LABEL + std::to_string(id++)); + renderFieldInInspector(field, script); + SHEditorUI::::PopID(); + } + + } + SHEditorUI::::Unindent(); + SHEditorUI::::PopID(); + } + SHEditorUI::::PopID(); + } + void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) + { + if RENDER_FIELD (Int16, int, InputInt) + else if RENDER_FIELD (Int32, int, InputInt) + else if RENDER_FIELD (Int64, int, InputInt) + else if RENDER_FIELD (UInt16, unsigned int, InputUnsignedInt) + else if RENDER_FIELD (UInt32, unsigned int, InputUnsignedInt) + else if RENDER_FIELD (UInt64, unsigned int, InputUnsignedInt) + else if RENDER_FIELD (Byte, int, InputInt) + else if RENDER_FIELD (bool, bool, InputCheckbox) + else if RENDER_FIELD (float, float, InputFloat) + else if RENDER_FIELD (double, double, InputDouble) + else if (field->FieldType->IsSubclassOf(Enum::typeid)) + { + // Get all the names of the enums + const array^ ENUM_NAMES = field->FieldType->GetEnumNames(); + std::vector nativeEnumNames; + for each (String^ str in ENUM_NAMES) + { + nativeEnumNames.emplace_back(Convert::ToNative(str)); + } + + int val = safe_cast(field->GetValue(object)); + if (SHEditorUI::::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) + { + field->SetValue(object, val); + } + } + else if RENDER_FIELD_CASTED(Vector2, vec2, InputVec2) + else if RENDER_FIELD_CASTED(Vector3, vec3, InputVec3) + else if (field->FieldType == String::typeid) + { + // Prevent issues where String^ is null due to being empty + String^ stringVal = safe_cast(field->GetValue(object)); + if (stringVal == nullptr) + { + stringVal = ""; + } + + // Actual Field + std::string val = Convert::ToNative(stringVal); + if (SHEditorUI::::InputTextField(Convert::ToNative(field->Name), val)) + { + field->SetValue(object, Convert::ToCLI(val)); + } + } + } +} diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx new file mode 100644 index 00000000..b85e9203 --- /dev/null +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -0,0 +1,65 @@ +/************************************************************************************//*! +\file Editor.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 27, 2022 +\brief Contains the definition of the managed Editor static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Engine/Entity.hxx" +#include "Scripts/Script.hxx" + +namespace SHADE +{ + /// + /// Static class for Editor-related functions + /// + public ref class Editor abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Script Rendering Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Renders the set of attached Scripts for the specified Entity into the + /// inspector. + ///
    + /// This function is meant for consumption from native code in the inspector + /// rendering code. + ///
    + /// The Entity to render the Scripts of. + static void RenderScriptsInInspector(Entity entity); + + private: + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Renders a single specified Script's inspector. + /// + /// The Entity to render the Scripts of. + /// The Script to render the inspector for. + /// + /// Indices used internally to differentiate each rendered Script + /// inspector. This is required to open and close each Script's inspector + /// independently from each other. + /// + static void renderScriptInInspector(Entity entity, Script^ script, int index); + /// + /// Renders a field specified into the inspector. + /// + /// The field to render. + /// + /// The object that contains the data of the field to render. + /// + static void renderFieldInInspector(System::Reflection::FieldInfo^ field, Object^ object); + }; +} From b7adf8815b0aaaa21e37ef4c6273186f5db3598a Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 27 Sep 2022 19:18:45 +0800 Subject: [PATCH 253/793] Fixed camera. Can see texture now --- Assets/TD_Checker_Base_Color.dds | Bin 0 -> 11184972 bytes .../src/Application/SBApplication.cpp | 1 + SHADE_Application/src/Scenes/SBTestScene.cpp | 44 +++++---- SHADE_Engine/src/Editor/SHEditor.cpp | 2 +- .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 46 +++++++--- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 86 ++++++++++++------ TempShaderFolder/TestCubeFs.glsl | 44 ++------- TempShaderFolder/TestCubeFs.spv | Bin 592 -> 1028 bytes TempShaderFolder/TestCubeVs.glsl | 3 +- TempShaderFolder/TestCubeVs.spv | Bin 1804 -> 1888 bytes 11 files changed, 130 insertions(+), 104 deletions(-) create mode 100644 Assets/TD_Checker_Base_Color.dds diff --git a/Assets/TD_Checker_Base_Color.dds b/Assets/TD_Checker_Base_Color.dds new file mode 100644 index 0000000000000000000000000000000000000000..9dcbfeee1be3e99ccaf3a7944b3627fb531c069d GIT binary patch literal 11184972 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

    NrX@_>kB7U}3H3` zrT7@MTWLrVw9IFr&l5W6r!y80SF^nVU!afurWK59Yr#LW9(XH6Kk$2s(oBD$+wGR= z$MXexfukXgcH8#G4%&10>!AM@iQKcH47vN@cDVJEMU<~>-?oX;Zg;8pT%Q7D3HBbAg(B}KilM_ekQpSx`FNyHILqCwB|Ut5&@)C(JJTdz!KYi(dmT08+oxaJB{?4kECAtCjG1T&A43LFG@xu&r6Ii$6*^m z$l-X_iTAChU%e%m3Kl@txMcX}5jhqz=JLFen(c_=9W;p%sbn*r=ZKO?}ef&siE((nn65n51Y9!7tA`Xr+1^ap#*B5_+@2lI0JLdBf z=T{{PWdkQ9UMQ&&^*V0!OMckxo8kX_&-2M-^t%6aE#lJy0Y0Aw11ar4Wk1jV(|hRW zpT_??fp0@!fv>xz67YZSGXC#IelFnu7;iVWkH?{YC*nG{RMP)S$>VA(m-7SsyyHPj z=;Szud!(We;~a-;_+IJ%Q1KTKjV3UTqHw&cJOCt;zrJ2+=eWXn6GZPbQK?tk_Xq~QIuLdzb0EuvL6D0 zXmCp<_@2mLPdrAG-S%1XLEVb7$mi-)hV|qz`!t%JosMiv&9Ts(Br0 zEuI76*$w>ult`|DsY%X#Be47d;0Pm627GXOpiL>&TLe`HY} z=YFKSLcbPT{BmaxfA{n)sO@d>q#8M%pX@(kZNvVaSs%XhEX&SoDM`Jrk}9OWNQJ~U z_NO9xJe0Gkgv9-#d=2;)cst5+p88az*GD}FD=x4s_0Urt=zpDt$HA?Kcz5V4|LHbZ zy}<8Y=q$u|N+kT_+29A2fl$x=q1K4X1DNUZwD5bir|dP$_Zz#$@y<9gUN@C$M7${U zEfOY?ALVEoQtJX}^)m83AfLlb5A+Z64)m89dA<&bHn_d%jii!=`ySV2 zwy)Wh7@-{M>caDaSK4#z81KJ`^)Q~(6uk70i~LV){IRCCvV<;SpS61)dqU6PwnYqkYk=$p6Us$J?SeQi`Erc5Z|X%&3|eqRXV$9ur~=>zgV zaQ%N>TtAKP-%8RhM_oqXhm+9 z3FPnaLBbx2iXOh_D_s)sNcd;88ZEacBikA|uJh%TY6tof%3k8V?m!s&_!00|BC0+f z7--4h_;kJb>>1h}$!(r#@Lw7B5oY%}UM2Z@gLM8y6ZM1zr!m5#u)ORIOX0zBn7_I^$sJ_l{=(Uq+o1Wfj&B9j5h9 zSXrz8#^RXf75z|9+J5kRJ?;nMji2pawF4pjO<-L1##L+vI>b zyuEBF(H$(UEfp}0sC=S7-C-p@ABemjVSA>hlcR6qcrmJ|?a~NhkBawe+T=G)-@tK^ zDD_fM6oZsu7@q33oRFDctLKeKAJ-Iz!)%927?&-yoxZg&@vR!V} zQGbGm9`ivDx0|fP{RXZ-hvqMRit9(@3n2drd2wPf?swUn<9x1OAzS3}eLp1c47?PN zXjJulz^9If`R*>vdziVfOy_&*Qx50XV*AdV9K2uT&5W>KVS%MFCBi=nygTr%oz(Yj z;xp~!cei+2579nuLp~w$(=>UkhcjrJ8C&N4E+BthHoiO28Pn{-`Gp^EOl-#SV~tIA z&X;#zdV7xT4DH>!SDinvj6%^U0e=Sm()Mdw@;lZE2H06y7Qm8gK8XK=F7Pw<>W%j3|KE53>3-S;{}1zSQm#P1 zrE&F}$&Z5n1ODI2{QpQZmHOw$|8KTo-B3;ZpEw5bf36?W?Ni%>b;1X6SH{Psao4mY z{tx&+BaNf}ap(rwXFwmD;)k;{rgJR0l+{Z4}dsFG2+pY=k#BM7XbR+GA}?3y)Q-S=J@_~ zK7bUFmw5qVD0TDWKP)fcm*WEvk8-(|DpmrYOFZ}ow=<5n`tM&JAfEKGb=5VOfD5X5 zrh)S-!LWGsJC`1x4NaG*QuOPue&+)48V&MSOON|fuPu=m;0wRDNIrldgocUhi=s3| zd`olBkAR~&o4&nYndP>2Xc+abJ>WmBSb^ibn$HXm6Td%%1Ok*sogh7g_}HrL`!(bN zaPKXaRG!pkOmc01A_~_}m-T;r+>kT+>H~Ccm=|SWRaJ$Rv*uIK8T0f8c z@{Yf#uzm^gpN_6)d>Z2ZR!qDfKA!((IDakkB)~tkEQv#69$eAsKpflFD&%d%x*v|4 zNi*!TBdm7|yAA{J{QG=>N%KL(FUTS#hEs}m+|B9(l;Hr{Q#k!d+P>mC1L++uru`k< zjx_F8*E!1K+l%y%grtjmc;CiEBtpMxONjtKEco3b@t6ryL#lZ(%Q9gq%Uzshe1CCI z_b}u7dl8YWuFDD^WIauDNI<<+_(Mcr9Pz3JmEV2z`{4_SU)|SSrf{7%a5}c1@e+%Z zGXj6_GU&C8%Sr8jx)Aw;D-C~@9pHPQo!|vh16ce^Q^32#{0%k>aN92pRV!0Y#Ggl9 zN%91K=eG@KfX6xd);_vRsNYrT3(V{z9{hvXhv#`-wHP+=`e)jMBDdcPy%eRCj2U|3 zaItqc{|WK`!+onl&Za46;_dnb@!{{@CrZTC7vrx@U-nKpH{O5lNeQ@x(b#D`1%B9c zYG8af@QtOq=68$g5nomK*8$?^n(VdTu)x0(TzdM;yk3zKw=&LLBP#uDr~lrFe&rL0 zJ9m{;KY%>;m@mGx>IvlAN5O2iOL#PTlE*z()<0y%`6m%bLS8_kjHRSB>bol;8`vRYLT+$-% zIsBZyv2xa*)0E`q;y9bp*wszEUVJ%e=XtI&=}z{`Vsp&L?>!TV)>x0AYOfV}ocVsN z|4$BZVx8WbQ-tSj{=-X$Rz8ul`wx@K&?@MOvA4hYTg+>)cj)itoUj`Ze~h{zgN!5J zdXO?VT7OPv?8&bBp1*E>elPeR_2tOF zu=0t*`cIU(9)3T*|M`_qe64B8{$7IH8M)tIzv?J{pZk0{qWbHrsut8b0nCrUIwqQI z%^j*fE5AeK4SXUia|QGNca)v>aQ-=RvZuHhc>xs32mQbDsBwDw6!*9IWAT;9C*j&} z$2bW%nxdu8ah&uETJWr5&K>rQkMX<7_^sbNz&!u?CBH3@H}ziUbmQg6FF5b0su+{- zJ=MJrNBD4?LHY3!pC=WX1`!BcE(Mo`r2GWGE)iA5J71C!k;CkTOp{ z1hVWGorj+@Fh@SXBPRPOa9o_{l@^f);Ji6!ReyJxTh^K$jtyh-y(=4pmM4*j3(SD$~n#ob0flu~2c#{Qc%O6u=pvDz4q^NU_R zWn+SM<$*JMh|At?QBuA<75^$(ZDhYJ`em8@!n&l~2Hcg$_mk(JY2J+Y)vN3n=J}h> zoIXnY?f7)6ncJSm{qU25XVW)|d41AkyIKOj;fto2FW}?+Km5bU-L>c^Z;{?W97~SJ zYv?bPV32V8iYsd5JlzwLyqtf77O!8`yLTB4SHCmpw0`wV)vQC(fj9*(=1J>TC*uB5 zPsQ$9;`}s(c;RIpfDZgHHP4yml6TTn2}b0kX%c>F`iFo6R=bq6y+R(q3e;C5-tN36e^~l zYwNacjjA8j*!32F?+r&r_+F(;KW?HurdwBne6x>~h72L_Tu@K9wl_$bd~4Q0{O2pp ziRmoJ*l*vKcS}|nQ!oY#ub;nknN7m05=BSmJ-9Xw-nhAylPkJ zVk!~q!2OV~75S-g-wZ=28}(L2IiljsQdBuW|F$l7oti%)6?eDNKfa?mF-HGk7kD6R z@&1lQ0`McF4tabm#`ai;#TIT4DDD?ySKv2^xq#t9Vps|r_MwY#AEZd+E)5m6Y)ff(ijbSDC3D5HJ;xaN)FTiT9}=G zC!f23M@I27usvWv}f)b{HTwV4ve|g z@3ka!MrK}!R7ldJUrIY+`Lq86!KiBIiWu0}?c@%OznkOy#NVR$4*p;E-ao#n`@S0$ za=^9}<38J1p6zZ=U2=nEDYmlhVTnnJt!5cWyGdOS;nV@l{M-#stO*Z{#*>bVnV8`R7q#mTbwp~B3Fpby#^uG7skK%O__kcR6@;d$xJumzQ zuznYCV&E9~<9JD`Q&M(3a~{Gr1M?yL1^E&R=bx5HnMhnp$s}O^51dL(JjD4ttw=K0 zhaSm<_QQJ6Gow<56j@&30zRw_yV(znqgu#&nU0Yinf3dKb{qf{^ z3veh)wRtP%G4!ALH#3QD@D|N-=jCqbR}G>Ee#~$#^Uedm2QQ#cxVaq??oIIA+G_ZT z)1U7j{ZWuP9RyI0eor$@XHJL5LMkBBiR&3xK@0wnU!#9Gs2Vy`>&Q1^|U+# zq{E5*)pSVr<54q5zX4s2jo0`o1Cmwba}fY97WgaBQZwkEG3Vvd)i#c+M4~Uk^19=) z$%6OwhUbyabD4~1x8i=s33R-eljq56?@2A-(6ZGZ<9iS$c>(V~|2NxsF4YEB7f{+@ zSa_QDq5y`NHgsqcoL3F)9YeXCpUvd`px(McyvR>hrDV0>$;&-Xr z)Xs7U0{wf#&xzXi4Cg};{yXzfZ^Bs>PzW*Ty^(r%Yv*+a@6IXv<(ffq7P*nWIc3o4uTuPbBBZxo%(@lxXi-vD%LP z6a4ZdwxgedpVE2~^DOLJZ3EyD0ar?RcJuxq2=A0vk}Y#xSZ}Vp5Yw0+XigdO$Wr}q z5P>wJ42JaiKPrfn+(%r540J0qr%As6%ysU~YFo&87YMTL;ts1Ri&B^=zY>z`h9M zop>!J`#mJqapL}qF^)eDm;TS+|84jIoDU5K5%V7Uox$VbylKf<)XjaMCWf^&m>(s{ z`VX8J8>5CiUQcVvJ)Aei$Y?~DqJs5yiL2suFU}21T>fJV9%CI-^T0 zY-^GB8GJF0cYjF!2JZ{1O<0{U{+CaUt%dX@HJS5~Hk!n|IN^K|?z=cY4&5UF2ZVor z&&eiz9PCpR&TGZua?D$&oe_PVgdcUE=_==ov*N7Eacqgy==!uI#u3N6BtO!oKi{v6 z@jg?>xd7$ied9?B=EXWm>P1{2$6--KzA>j~n){a+{IT0m{ybM8cgfxc@RSCW=rq@v z<8xXa*Ojt44fZ_n10!T=xK9~WGhX7q?S3)B{6%>tV!?N`!{H72ODV0Nyeo&O&6rru zDMi!$-e^~MzsdRNh%oaxj_a8As6G#A84>fxmU1N|>GMyJ?pnUj7AK|7!Wmtp?ri*72v~dj6)onHrvp zuw6=K{kCQ0_jpdidh$K|o>XPe;quP%^fN{S`2ecu)t}EO2L|X5WeUU;v`+bP@CR8A zqp{4yeSy5M6W@Cg`vV#Ll_joWe-ZSRxvsaGlGsP&x@Mb`*q1Y2sW6y}@!|#%h4Q$K ze(g?!=iFgr{{inckL#dW*4IZzrJ)siQJgn?lCB>$`N_+}I;DAaX_Vb{?5CTJ1=yeA zd})nsq7*vp=(phEh(RO!%Wlzt^%i`(;L(u|Hnyw-;DjUcd$L&HS2Zze{Em@cs{0!9NmQ9neK*rK@aD6>XZ7UQHWn2ajtQ;4Q=N+ z%M?HHe`i|^`L0`+#h*V+PHvyv&U4I%Nl)A4cDOx2 z{CE#em-N?8J9(ck`yC%9Ss(oFY(0FK{CIr-qx}Qi_u{C;_3J?Fm<|A(31`|$P>#P2m2 zv-R^q*-&4JjPt<*AU>Jp0c3IitR()=e*Zz-{^#TW0raP{XQ@ZF?x4TCY=0&n!H4%z zVqJY-Jb?TiEQhXN8(z1LdT9I(JGK(~*@T_iuUG!M@%@i`|E1>^;sD$X9ESCEqx_Ze z0%-RMg$hvVgP;Rs`2fm?V5(w1$=-{<|p7wz`rps)_pMlPsRth{ow7_ z>f_x0%E4d}@&8=Ce$MTW3KrAN@R#pZ>wyn;b9^Dr^|}30b3mls>5ODr%JdPT9luX{ zDz7~ko)R?T|H||X?0coa^ZotSn-5}sJ?UvczxSMYt!DTV;tu2#mOc+}*lkS@HUj^5 zHp``jX5e8@sSjH1u5vt9je(?1oFg$Li`nokRTWi_dJX3Ix_vTZ$C#k+vr= zt__|K`tAS4aDE-{hhKC`9KRuf6YCQ8ZZPQPzT1a1&nJw-FyVyV1R9Q#IR5GP@cZwL^(en9cR8>p;bPfOOjLKF6vd9PR3ez zeL$XyUqrqzGhfO5sd16f$a7(Ob^J}@3S)^5;8Pdjr}di}^}m|0`O#t*@{QPK`d=@V zZ8`KWKPNBPWjEI*j}mXyMnWcDzxeu;WzqxvBounY4K6hVHxvJQO`iNG;<_`TmtIG- z^ZI4(jWtZSgrDsr9{In$_^BLETYK&OW8N|1mcQ+pHxl37yYm~5btB(d^hubq2!lT3U<*1|ueEHm7(ir1~7{*wHyz>EK`y`u#9cAvdsjJW+Vo0uk^FNXx+ z-e(wBy$b!J{?j$?_&M}n_xIhyFBAW_m8^XD5bP$jcOE5fZdkO!S8(u5ea)k5ULsyz zcGlWNxwU0OFUnn8c&lJ>0ngsJX813Oudkf@hgM2$)cq#QGdi6(!TM1d;PGR_U5p^f1|3h;Hf>e*d{C@E*-C=KaRYuZw|YEoec>O&o9OQSrmm%L|ZS`HrmKN%5 zg|a(KXqTFNWO_6BNwteA9bb4kfOvXi=>qyS0FC5(;04sX?_0D8<@VgS(op$w0QeO) zvc%J0x-X6Q$2{X=MlE;>{{I&lOgBFj^Nj8I5&RtFZPn5%(LR+lER%zN1IGYGeA&n!*~|@pJqm%{T$*HznkqA$@6olI z9B$E~#RC1O#1Js-W$?0+i2Dm3Kz)4pRqPKCXC8#X_wxYU>(|%PJ{`12O{hQZ9Gsn< zw@?p*bKDKmnv3gpTj;a7(7Pmjtv;r|Ycv>&;g8;%2^!Yc(%<`xKz_iJk`H(u{MT(u zzz!Gl%j(q?UBrb4dV7K2K_63QJ>~qWqxWiDISm<3DrLFVdmM79-F^ms`%72L67c%^ zx(5?6%oFu>^MAEl0RG<<68&d9Yir8}`c>Xn)Yp`u|NMmSGU5dw{)j2q$otx-kB^ZD zV2OrG^f(3+yJbG-)y7-tFJM}E$jEfQz0}I{$7gTKm5JY1nxrll_FJZF&ZJ=OwNIiM+5CE-&m*wjeE~WUM<&TrDXLe#cKa zYQ_>lz9(ZQzH|!l5o5sp4m1t!#+%hqib$*YLGHUpf6e(I0u z`l7ENyvxGxn{7;7;&=6E>95dFMcsT%oNxlCPraU`9;I&VjWU+sJ>0KQ4|5LyXzE3z z88{?|o}{;j_7Ly`pvX4;zWBRilu9N7eFW_3ZIV z4a6FFz0hvIoArE8&Z;n_aPAP|v|e<+b<*#lp4Vhm!CUBr{e`)Q^_BC&*;dxak@@u- zDCcMB2mP=^NYuVTUc)_#ByfF?b;!NUKXXj5@_Rm2_`M?J>nQA!!NY(ZO0;1b^;T{( z8LMFj2%bjkx2gAv#Tr%W$0D-b3O%Q*^o2aE8?b}j7t;B6eSKwi`k5&$X={}NdupFo z-s%hj6*4 z%uYSxt*K1MMcgm=gl*&_*p)QwK7n%?3f^7=J+VK14X-_tfS=JW$BEGvU0NbaJmv&G zg+E^3RJW;)?+=03eHt?7*1#0g{UKRlI^?(7dEe@uu@T_K4zs;C&hbB=Fyyd*CohD3 z>>uG+Vi)_YMl;d&JoKZ|o&lNtK0fm4Le3)+;-EAj-7dn93+~^X z5Fs(HJ;^5a6ICGZF?-f zIiAQbE@k;_0i&7siA|e zzSCx6f1Zv-gKIIK2TBXE`sV>3@tf8{FI&^1cCfunV$8?-od@6*gVYoWc;e6E{QQ1w z$Gh{Ow}-%ZMjD2Ih__68VTJ7tUcPK`S%Cl3Ug?wZ0nnb#g?@l~!(Xlo`*fqxzpJ-^#S}52Z6Z*&Jh+p9}DWW65ql0Mt0Ee zLc;$)@qby?5TBUi&X!00v?NZ$t`zNR?SGT~taVE3C`P;0YW?WHryRRwtCjQ9oEY^H zui7VBO@Hdbc>}nG1>fu5*?XM*(BCgL6r;Yh`GlGMrYE#7L|kUN=gB8n?%T>@SWhg~ zt&Pb#*3<2g5cmOkE~BKRDbekL_fI%q%iL1j4g6nDjk)>Vn1{d@gMX#WbVh(w?8JE* zYUhv4Xq4cANR)M(B7EMlIp{+_i#c~C!lnjD?U4#2^Vg=1qCdcsgqF1M{o2g5U_t*t zJR{)yxvp*F;}!g#;klM1>uWaYAIw9&6xwBpzZ>)0-eP|mHyAPA^IR$af}e# zB{k&=rDR>M^8&(OI}&1AQ^i)!Gn{rgZeT`b=JT&_^~BIVPB9q%r7jpcI2TQJFE*l1Mo$YF=v-!T0J|(d2&M{Vq`j9Gop5( zoqY(r!0Sq(IR|_!M?B)!{bdk`VtxZkNMN~^i%H;P@WTN=8*B&Dz5v=M*M;!m*p*?w zA&B5j7v$F)GyMOaFWt$u-bWEkN3)# zG2b~}->v~41ny>8z-_HUFiL);60+KO4jp^$ZrO$N-T!BKD}#7g@Q)U4JW~&znkWzO zJRMJGwEx8M|7~#mU$&leF(10Y)6j8xmHv=`*sa9*3-hQ=@+>dLJlU3G9^*RFvZ-aP z*abfs&t@>c=DPl?`ptjle2UWs{KlT(hn4n{B! z=DOZEE`5sSO131h{$PJHr_N#?a@eKRLk*A}t$}`^`7dW4^8AaW1iC0a4Cxm%Pn-cTzd|H+( zxNoRyQKR(hZhJLCsjO&o&Af?^?=!EzSLv;C-Z- z`>LRrs^jxTLPVhyTHl(AfgceJhp|tIvkkczBm2!2zX0hEw@WvoHxLy zk80qt!Y^5<|B<)xyNrD@zkgUumr`mX*NH9V--5$BmP<;C3D$qgx=QC$Wqd^{_t${U zJrnqjbVjt1rwVl={FG8^%egN_JeE6{cE=UW`|#7Rg)O|_ttlOxmq0%&8p1qOqlrHH z889fr@Kf@A$6O|Zc@_Q#WF?1w(JJg_6ZdOg$!8^=9oIw)>#299X`K6p%-HDEMdS;! zr+N0rWg81~*q`86bRYZC6N74sa@$ncTb5JKV9G-h$_dca3a$L zeoZ<0m&|t5Ml%BQyQeXQ_;~QQzrJ>3F51ZkULea+AN8aEvK}PV6WUV}eUyQd^~eYQ z+b$0DTy!GNR@(b0WxVt45u69OpItuTl%J{on^B_CGlPp`Sasugv2AS(%G=F&K^5H^JT=e+}4QAv@U3tp&bZRh8X;ew@U4 z;Xf1)U=P+`;M)bKw{zbwTCd}xzc~K?e!Trg-1CF!E%o$6{LA3}*jK7+Y7wsze@m*D z=B@q{S@f3R#x8le%k+&r*R`LoW=XIlDI$HIeXubX9e5)Q`hkSWY@>q{|la%UK$*{u|7X6 z{p-d5srSsk0dN20aR3$}z-|`*ryl@xtDh4G;OFE0H}V3YCu`=p9XhBTz$0{jjuZ7^f_ z4PHNiZ|KT`) z7Vpo>)6f$eDziBK2PMw^*!XvG-;6(=citZ#0Q+qCRi@q29_ZPU>NWiV^wt9PJ>re| zabFGhjyPAqeqwoMC(mj2KazmAbU7Yusnhij^Y2bW|3N*1)Or#7#RJ2Cxsm%wqhNiU zXV)m;+yU z=h!`E`M|OJJ(Uf-?|f6ua5wJzZlMi0AaMP5Nw;^mf1}V$|Mzp5##-XtFe^RD{DMO- zZsmJ(pO_vt0iUm%Q3_os&!gp+!AAjKK+{$ifZw9c6d33ivAJnHNWTzn_u^dQ*zTJa z8ScmLJ<9yMh+n+pCexKvDbn82ctyceXX-z%)p${^>dqB;q5Q24)t|{z#S-`-Kj zRNuUM-Je|Euj^Nd|9gy;Rh3SZ+vNYh5vP906I`x@Dc?OJ9&tiy&-E-V!TUll4t|dB zY1yR!|A$6+uMfBl+U3eOfH$_+Dv^$}dOiEpdZ9kg_0+LQX3_)y3j+hd|IgIRCFOAw z{00nO*zM(WD|?@Zy@*hM-|rW!B+kDPhF`?_-CuD3PrR=_^h1mAz#;J5z8!qAlqO*-n?C%>kjSLS#=GXO<@_XS#J4KmH9ubNEckh*Z0*E)T68rg= z_XCIa8Q}jv5CETX8RDq~;AS^?ZvUBj`ZEIlUt4)E`~rW#4?u3U5AzcIdQ`*QAA0uO zYN*GxtjxuDHyDD@uK?efn(AlzF2Ud{#{DC8sa0zs4NAmxYtf^kk>A#b2eE-gL-|NK3&*^Yf- z{qp61ADZ0WUcWwO4Y592XCJ&kJNTm^NuWFtmclqUR$Gp}cdWfWxBAHQ+5qM2)&Ow+ z;@Z-gY30oJhWg^S2QHsMKI4(6;{r6y?aQB?KZAL`qs?E+^T%UGQ!eG9?&zfw)T?!s zc#eJmI{GrOp8}8c?+io4|NWBsrU&@{Qs43b`It%7@3#W?fBt+`&;>oKv8~`9$nBT& z7@rCA$X_+qPj25*TV%+&mG|{d9k1i>L&4{sCtv72tx1ooqfT!|`~ukjAD6)g+EP2* zBt*yuXg;tzN&A0Ww5W*q-DGC_J@mt(HYS>=_pnc-ZS)tgB_%^Yp6d!dGYI|3DaYQv zA_M2`kll*=U{Ag;K1>{apPYssE7$eCk+aLGk2;)hPBtLD&%EjYubaP?tR)X%9qeXs zUUw|d%L9+0*ySGn0pi2L@9h$!u79~S@7MJ)qb=K^Z^8O-c5z33Gw_*Z?sXGR;PiFs z9+t!H9%-VzkT#$tnJ!#OJ{j!&bGirkKENklrhU;^l=#0*i}wn(TdLtVWCo+OI_!V; zDC2=^nRhcR@8-cE^lR`R4M&wrT%8Ws5vjW0NuvpRM%atm>^9;!nYWfE+leb!yFyHB znr(`>RZ*+q*)4cqFjxtF+!B}if~^RrZ}`_f)=N9+DY@HTjB=*Js6TxFh!)OcKLu}%-X(rTo>GQC>UpZmH@+#UYv&m(>*o{y-+8{wb8PQTZu9J4_~ z9_!Wq{Ik&Gz;6cdBub@>c2cmP>d@wjUAeBkwjW;M_o`~Ri{Fbt69-xU2jDM}?P(a? zwgKfXM|e@_OHaYhy9an1_zHJE4W0q;!py;E$V-ScZ3ixTxZJ9Sfb(~jC#6E@Yk`-2 zIfeQ><%pysWmvt+YmOEf?Pb8@i%kQ!OBk{D(eI-vqx{Cb%vLVc`aroWLN5Adu zJ#N?ij_m)@rx{Q9F-Zo1;tg*FPk((a{Q`KfPYJZa z{}I*!9S4EIe|Eov{Y<$DaU&-5{m)|XBlUgIAn}i6V`3BSji4toQ_pxS4E>>Bgr9et z{cW^Ii^}~E?9l9X?2opT$C4?H_lsqDXs)-Lr6r(;1Y|`WkNI}fhQ7_)o(gJ@>Tgn3FlRM=@W+PeU=%yWf5rd?NVmt*e`dUd}0p&c&F& z#V>+aG~w(oOz&hr?d=^X=e)7pDyY<(SJl=)-weODkw_W!<7j5!krTifMR6_k@@0`; z_}vAsBpPdA{m$3b?4q7jkuQtI?Ee)rGt4h6nSC6ut4mkUv79wf81j4Tl4_zsuiuK_ zYsdA_iM}TCdsg`+;0{Y%jg5`K%VCdL-->wvc)}AUBJY!Xr8Yiq6(aaZ# zGU7PfLlOw?yWn@5_&>6TUK!^FAMs_B3;Lk7n7?R`VL|zRKK`HU zGMTJa)*seW;MMKAo(_0*wSd0{T*omhn$@E=T=VnKdV$;i44=b(Z4o8z8|3}3ys~c} zr5Ab$N|=AW#(8<+{djJE9_547Qrp?i>yz}q4;)$%eY#Xdz5L#!7`EVg4fvuQS9UDl z98X%$YCG}$x}A@D+0P8iO_)cqF3iQ>rkv~5^f)K5o5y|xdgR@53+qGaHc9L+spPgP z3)&^3-et!7oK|HH_T<>FAWk;l&$wlja#;nQM@zq|^|BoBmkoU9w8MWz+r)K3EGb>d z?>;vk)%DIfx7q)gI6sC5`q5hWQSj|!dIo+ym@X2N?{R!Zv2h~aU#fgvzfY8(oMOKX zir=#HKE!Xq_{eiLUb+OlYY6>CP4YXe@>CM#awgRoje36I-4XIkN<+qz{JwWI4dVfR zre9DoesB&$fmvSAc7O|Dyccs36F#V8NDqmB2kmNV;?Af1YdNzMa? zcAt;yjp^>Rmol34q8}h#nD&D0=`i+xbC`Sp2_XhqzQ!hXO8;I_9cOvG8AV|}Ipd9W zl&=jhTgLhUPe5dOa7T{Z@T_D{2?Q%wL?In&NsO_(hTa zYuqb4j>Fwb@AQ>`YpMiQwU1{LHWKK3AF5IN&fj<<~{H?IV z4#ry8-y28cy_4X{rc(;ehw!(Deu+3>wJ_t{_ zj`Pu$gj$T}L$`{{i_veAiOk=ypZAQ!53nCu%lrcKy`pO1i()-DCFi&g5cV>z`e{dO zv(HGqQctPb1Z{&0aZg0B1QMf7R=<&eJIj z?R=EH)u8S-1p6KM1tI=x6BYFLF2|MLo^H+u?zC*@JQ44;gI5)EHdi0T`jY2rdiaRI zdB}e@BXFLSl>)3omg;y8c};n)@V0rZ8!=~aP_5(q+aYGYWWjh5gaq(Xyid)*4rUA9 zOMB)$ODGlO6oO}2&aWkHs!5`mAzUjuKN98=x7K~t@i1_Iyv&8z7l`@>GVoq;b zvKG6*0}K0c&cOaalUlc+etfNJ3iau%ZBj+fU(r?(=LO{V&=%nNu-C5h1};KwO!wL; zciN36{T$^@hWI{hJSGq~{(8i0;5;xImQBRjc6|)UmRMCdg|#Z{U*O( ze(U5szdNRCUhZ2BMZqX>Wn=3;*k2!ZsI^ls5SKUld+y|QskHb`KKI49QYoefHyG|9 zf8hBF?tjRS2w{JR_1e&3WxWf+J^Fk*`d(s$={BjiCWi7~NM?q4{(JO%o_^kOyQhIi zF1fYlG~^p|>tzKYY;<4EhA}S^TRy^!?yclgY$$lh5bboa=hL9LIU^x=_zr zWMSX$uEV(w>p2x5J*f4xJlX}x@yWE0$CUMD6)E*^Z%; zEiJ_VcR%_KtW)3>ha}w(SZHP^&f%yhX%6;W_>So~&P6!?iP9MLvvp&SE@%B^|E_%FV=VPd829#^RKDVVzm3$W+JOtj?SJo3-Nyw))nIa+Fbk!uloioJ-pu} zO4t{ia_rP*Y^?VJlOafH@eEd+Jx{`)&F=2M)FDIzIZZh5v7X zUsw^=`CDqS4~2aN<5GgR@ku50QE(SlN4tOMQ7iux(v1T_*6u$mZ^WI6ce7oy_&@b& zX#a}qxT&D~m(M;3uX^DDBy zL(lsw@&8ZW3C_{Wvi&G4+5a?6QL_E-MoBv_s2S#enK%G9p<=H0WB3!tgq5}b&q~^R z@m&2u-2P{I0SoxQrqLdH_D6%2^aHRAA4G{^y6Aep{_uDJZt$h3XBJ^-mE~{zy5z4L z-~XiVF9i<()eHO0OV7c-o=Ce)O?#L2na^>Z`Zzv7_V<4=FW?jV3HX=s0q)0p_?-*9 z0QdWN0XiQ*MI40vP4HJooIVt?8g55D$daNE|DT!i!Y}rv{T4w4{*QRyR+EMIXTTR_ zy?rYp3b5BdIFeQ>cwJSGn0VdWk|?^g-?`)No^DyM-^{t_rTs7O*B%+Y3H*Tld4o~- z8E`gV_+M9Gf9+`-=qXwGz@c*iuQ}%>;`QK(wLAE(PHK5kxocd*^2db$lQFYyL*up8L`HLHY&2`5!bo-v9pi07FjL zKj1-LhkiqZo<-kJE$A<(2j{*sr;su_IQTN}J8(-0?t|aMhPU2gy1A)&Yy!XAGmIbA z<#=&?e3tvw3Y)ovdfC4a8!Nf5ocW5ohWaO|$8K)GK3f@)JI>U@U$ouYPrbp6PlSCr z@JXW&cKE>KjRxI6IrsuVB~h>MWq>a?z>Ym-B7WEYiqc8k+XMe?O#eVJn)&?jt}d^x;P2y8)8H9^H}Frz?R-yOL7|O)@dw4bX9^Aqwek3!u;I5p1UHV>YAHaU3SigaHp1Kb||>mQl-OnUOF6F3K!9i*SDWy^??LGz{7#-howKb|4{x8w|mh|{0{gvs$#u& z$WPO*zkcPNiix=X(V)GF^)cvc0eWny?ufmyi+1ywkljo@<)=l%CD!lKetVqtn>g~< zukrW9-6uo|{uk1#hvDCUsJ^=D$Dd+cf*%wt1}|aK6JK_dZs)(FYDb*!`*c^GoA{6~ zBYs)O-FLdzUEUA>^V<+V2<SlQ z&LHCd&>l;Yc;7Q8G8=jQo41q|>U;zYFyj5bJoN&vOPaTW<$uk-)PE_^P`zwS%h2Bc ze-01V6g)-05^gu2dv_omCyyZ~XYu2@9e!oydfNLZg|lHwdGGYGmjf}+>cWb`m-mMZTk9lin{Ii&UFt5sG`yRmj zf_AI|4`9c9T2UT=e}EUhwW+xP_q{s{-qcgh=3&K;xB;H#Z6iM!EIsJjAy1J<#eMm# z*9AV!Y@($`z&I1FV{c;rQa_-j(?eivywKWej3K>mpQ4n2_mK~rzhnpe3E=M%%1b{+ z#Q%T$w|}>mysW`N@~fo%^B>^{06ZQi;~SjDyuy5Ll)2C|cVhyg9@b_xn=wCDCu7j- zLx!z(`&!`A2@o8JyGu%inG*5oV{34~H+4e5`P-QaPVKtrJnZ<<{4DGTz6$;5%q7Zy zh*nr39sOsI%oG1#U7?8W9^kg}+|D!5PYNqTe#{H?)ej`6x?#8fWmW0}?q7RkHVAup z@Q}psHmn6NDRfj!uYo+7NLu;+p3C-Q0`9-nEap%KlP!DEuj}1kS{o$4ARe!Rf} z;QXfiX5=V#2Y_>>%{-sb}vt5%-@|%vQ=NEfEDD zV266E+3aaM;~BkB+eh5L72`Y~`{%9amK*up?}*?zW8C_JM|Uv|oKoh#FqRls^TFG> z_oUCt=iD2c_fC2cm#rmp0_Cnw&S;Iq|A!LdN%{j=Y8G37+d7XX=7Gl{4suTUD&qfs zVK#5Lr?vP ztxWt5^(bNCcVJIO-q%qprK!x4SJIa2`f=Rt#{BP?uTmeOpLnyVT&3TDk(y<{?+ILV ztlRa@?BwE))sm`b!0lo6e@h)tL!taWj<4Z>0;Dp-pw~dF9;mAC9#e7cX#LC%6b+@!zU>XMsuK;`P_6n z@UsbLSDDF1JxoSWqx}Bc9`Csg<%IqFIP79z|09S|=F|0fx|jN^$m^S+$Lw+hr6+qP zoR60$&d=+9K%;}JW{8iU+`bt+i^Js|t&d%0J>0g`n8SIrqcRG;Exxm5Uf1v0?BYE6 zeF3X9%=)Xa*&aKC`>e8kg|oT4zGvUV50P(l+ajas(thiXDt-P5v}xMxpah(s`xi=V zQ^4!I#s@$@!uDq!^mMQXIcbGmrNdn-LSNTa4t*N@TtdIA^8pa&^d90ikkH5K@kfVu zU#9-bD?4@nqyMkFrsEXSrMLBtPCzfKX;uTq1^n`FKFNL4i9U;o_!Dr*R^}td2EhY> zebbcMO8r*p>e2%4cff0Eya>O{zM~=CzovR&EX8=xnM~>&+q+*TuLAA9e#2|jYxeDv zQ@p;banpL{8v)OTdd|7jOn_3BMcsdBPL4^U9y%5bHc?Ni_078ZJYcu(2`Bx3jwbbT z39&>M%F~icsVpDt$wgjQP;tBteutvpXSG_X_bxD7#XR&M@Cz``&|mxw+o`|3TY3TZ zWEj64-|gl&NWLKHJOQOiJ%@SHVYCel3z#o`!A)-H#~eO`3_cL>YM-Z${j@QbL4VD4 z!OqA|={-k$n)-18?Zddb-VEPol5FUY6V5WZr>g<_><(4-bAOnaO+cRvTz8e#ehvRe zIf0iUt|}$shU)d<8&77KUuH&Y(eeM3JI#FI_GO>}`9?j&40apArK7iS{|f}BQtux)Ui*lLG_~xG=i+;fR=zbafWuyB!V0-hJhJ9ZnDKo-ZIko<8|{t#^-pSbqa>|Xm7Di0zcxkV?Gh>V84q` zaoiBECeAYC^drCqt~*7M@qmGM`4{~ERvZW3j{S-;C%>Qp-+7n4Rj&_&&;}mL+UlDS z-C&s(aa4NdT`VF6E~x0kZxp}JH9z9*rmsy;3- z0kB*`NYnl5Tt3(K1k174V8Hy3dEa0vWW7}=+5qb_IG9ZG_t|9T5}#9(l8w@acwUtL z=>)!G$Pu!IMUMZ`t1qDbF%M`{S11FLgzt|z8=4Y>)$4|zM&z*i=meVMVHD6bvozkLFZA{c%?QSp9#f+ z^xH2Fya_xDc#gSeI0oDg{<$U2&l30!l!dY)GXG36qELdCF~#S{ymRmIeSd`b9PGEt zkE(Yv{lT&QA7nA4(bTUImy8ATjM!H>WU;7$GS6fMUXS_2 z2Yw%=QL=GdpOX}QeIM>Uew^#h)XeMpy4K=tZstB>FerdW0zCBifW-M2xaB$aD|I?k zN9muLyN&O^@&e=POgMWwy_-1Ch@!2B^Q5~*)91U?_-qrdgD+ED%=P$iC>G;<7D#JY z?+-f=wkVJD#=a17_fw9j5CI+tKU%7&+e5D(>(|GTHe-doFznIO66TXVnY_63+n z#7V3>m{*KqGi9)->}kpugA(>%;8%%SzXkUfC1vbOfKO}bF$;cAidOKSCY&>8Lk;w! zus#tLh`ZJ`C8LxZ-CBs_4#ybZVaNk;$j<9C@ttvwKT#P2@APo_rkyj0bC3OMjVMwM z1n3tC{?G%*$A}w;WEuXu5VuB&m?$lVBKSX8;R*@~oPRDlqMK4Nf9c|IqMFd!4yYs(iKlL7&0IeY4#p zVjY3qds(rO>)cV$*_nnrf|XnOOTFa=&uw! z12f_V;yD2U$|i6gH6)W^&bOnh9=gnaY=ij@*M0R$dX&7C0sB7qIh%0q+SRD?_vaNm z%7uOs6@27FSVLAT`>*>eJ9U1v&!p}m?r-^Qe<|yKY$T(y-e)8U^LS@@bUxEU{s#1H zuU&+{7E!dH;CD-JDez|xe*Jhyv5=-9J2c8ub9Wy1?^GohJEcfBz;7 z)7Xz{u1Js;u!pYOX~-#;Ip&f58ZnEcnY|K~XPm*D?wpKSeS<&8Kn z@qe7}%;$9Z`tq7$|3YWbgPfV z|DhfqB>w-4!~w{M|Nl>c=Wx9r!=4%QRTlTpO6qwrycd5Q{-6DwaR87F?8kuPcXxIY z|EE1)wtrLa?8EPr&^vrcJOISo;tVEI9%S-#& z4#ca|_(#XBwRP8|_G%XQ|2X-p;01iNpMV?r0HusG@C*3|sKdfe++Kuz5@k(#SR%fE zam%@ z4_$gLe7GC-_nzj_P1V1_IM`1<`R$?t;8V&YGW5qU@4st4=VscGZNmVXf?l~~pjRRO z|KfWm^J(v2=Pd-jcK;!R&ljaV|IW)-MO@#{xCF%chvS_+kVh^{<3;=M`?u~{;opn* z8EWe8zJ~kbdFzhfs;Zj(67bU5cwFPS-0)!HJn^2I(Z*Owo27cqy`QhcIl=k6zxUtZ zAJ2lgHpKb6>+u@x8m_4;sKV9>Dx;REbv5u$h5e~EvT+E%Psx&g&RYrp z2*ub>Lp_+}KJvKQ0Uqor$14#{Fc>ACVeP6I!F|-(yV~g?q$;24&?Dkr;@681Vty|xH z)%|YiA=i#709f>Ek+ZMRTL8Ik-K)!p8*6oSucE)y+oVVPiL+PKxoi0T`E?g+SpGMZ zx#Q=6H_v-_KS~}z@Cgs>>4nKsGW-~IskRiZq^v9YcW6GwM{q3XUE%D<(w=a&0nK@U3s_{BgR zrO#GX-H&n^42$761NQdA@!3mg8PF`NSkCBdLvjf9+mz@)eS*&tFHNw%E?-FeZ9DX9 zeqmnMZ~7;U@V{-T4pfXK$!o~{>(m#C!cox&?QldGg2j`q$%HQhn``uC?- zUmbr@$I%zvw5R}n`k!4_<#vL8+vv-T5pY0J|K{KL+CeMkC@zK{Ae73GjbxciivC{~0&v(*8hz`w;Q~ zsQ>?PKLEwGpea;Ya87a~e_gJ-Cf!x==a1`dcZPQSidPefw-5C6*xS)Rl24H&1I z5|$h4Ew#<#PuuojyxMydc@M77CO3@|k57zl+LQ~tdcL(#CceK33Z>lYuR0onLQKc| zt)^Rxas9dXGE4P10wGB#u07?nb#z!8>fw*z?bW3v*k|odPrlU+Ts#B=2;%$W?Uv1g zC%4)g5UqmeqH`{WjS%epN1jIfQj{|@intK?-F`qBz&NX4v0dGGW_x?Ry1R4bB&0O@ zM&B9u7ua=SJQy#Q%NWON${rUNPvSoG!clFzx^I z^8Akx_cxk~?UdHwpkT#%@?TFVN4Rem+MC8H^HzP@%lXe|xFf{(u0JY7!6&G<_xpkO zPkNFar8YkI+s8uFOh*xki#&mrrVZdz0HG4aMz9mATOLa9rv1K_JfA7X`O#-8G!pl> z?<+%`0K`2Ep2c|%=YD&r8ThrcA$C4VTwmTtTnhI0Nn;V^&I7N{({6tEWp$o)!KePxO?^!0bEWXVjCe80^JJKSj2AuO_->$8*AM0vnqW@=f9Hq&BBZNBG?id=sQt?0-8QacFCsgW`2PrIQ8&4oS-!(XMp-(W}dB=tfzTLt{6qdhMX z??8Om_SvJct`gtS?Mp^x06^CtE*~f~OPJrQOY-t`zbRtlt~%mWQK<*t z-BsR_Y;2@{3$UdEJ&MCz8i3tD?XpWdr2u$d#f$U7D+-9+-Cw7FC-_l@KOOKv@rU`R zZ5}))@Hm^j;5T~OilI+8RC=1>R{|4Cu4}=LjodUXTp+jDY!su=yD80Q}Li@rp(HRgo9 ztSpOp*w1WgX+b*ymr)|~)YHY_$Ar9t1McB+>i4|cUY}cx{Ca?|uss3+a{={t7KGvE z{%LG@poe(!D^Bkk~qR2{z)QwsVE_5J&xw*%g~e!~XhPJ=_i>wIuEb? z9O(Nj)o+Y$_;Lf@Gg?ObYwFF4#=9{utbjQy=ZEMCVKeukNArAtMt)30mSnbnnKaYH z@h-|T#yRGrGD9UL_`{0?jQ`_Gz7;&d>Lxgh*n{iqH*LZ?%lS+bbqRc*5(09;9-s3d z`Y-0c(~io@x;p4pp+A(!SVMIXzVzHGw$R*dr0o@D#g)ZB7QR`2;q@PF#{_&oT(Iov1V zSPQ#$?61z6Ox!PFpC9CP*!#mj3gU64pUfez2g|!Y4-ClGAoqQmR~5T~xGDp4&$L4Z zBO@D#!};|VZVrWsBci>STjBWeRthM?l;+gfQPnRKPR2m z&pW&h^S&J3-)c_+ubyz`1($9@e}$iUMPok{UlU{OhoY?m^TBCns*L47?NlTQcr*O- z-)hFL73EbM)U_zLv9zF-657l~ET_=*;uOCxT~YbnYI19o-#w!2lUdI8L|+l*KZJ#LmakJ01-_@EN1kCmEiJWmy#B*h z_A|^YvcHu$elj!X;q?x|s`IsQ75)X_PeZcX_?)c0(}c9sB&vSCPYlW6MZn*F`0FSK z>pcwnO_b|alZn6EO(rAX+ce*Jf#uw&$@;kMo4>t`^(9LZ_!QumB}E^fPbo7J-@iP^ z;DddrLkx$*F=v-Uo({>pZt@32e%IgmVtTxQu$t8E^Y4KogZWKr3;4g;EOxNn<}+Ro z@e->#)jxrJ5En)v-n37a11wLtEC7EUr@@=(K)JhEe)v5A5342PwN!5@udpxpafX{? z;7tqtf%$10W}~{Ssrz%z_hpets0$Lf3Eqo&|IMqrIschTS0AUe2=kkG?uGv$;6U() z-c$oSPn?$}NnbzL*Q~Fh9~mR~Sj;D<=h}K}FhsbHpkF4k>lWvA_wa$?Y+8S>sSSKC zyuTS+1-D>+j8@H_;QVg2+2EI=*kwKz3Uj^*MlZAo zo+YlD+^!l*w?TCOr~LO>57f`Nf%~(6YN8kTKlb-ZK*#-kv1!;De;@c~BtjhYYQ+F} zv1oS;eD;f+)>e#1@B*xM@LVrC#d_m%u0wK957s&2stNRlQ;wc}0rVrptturRf64*3 z@GA4!^yNo^vz~I~7ZmKHG?;U4<-P;{&-C@Od!STbZ&RvhZNNO<*chGV{@7;DL3)X+ zDWm%taEh7G6#J*eU>awC6cf7|ncv9M+5p$rmZsV&j>EWn=a)E6V(Q6O?w?kP_f&BI zoOx}uZv~$B_6NBCah&_>ppVzxbC@TPE-;ssah{Xl$bj=y%#%t@IJ+FrJRSc!=Zzk< z@^j<`d~HQU!#eKBFO++T1MiwoC>Ncb<+7;8cs>~{wClW|^{OMthH_#tWr?FO05 z)NsEUYfPxz?};+)cDBIoniBJa$y>wx4W{l+w(IPb4De{+)w12r@}4|v`XQxuWhzOT zYPI#l|Cv*}tY9C6{St6*#yMzeOkiHdes`t?yZA1wle616Pq{YlfS-E!gSU!vNCw&dCaWF$1n^H&3UL3J z(`scsfj<~Lc#z)%w?QXaj~e2YJW=ue*pcnS+ugB9uIY(KQ3{}ZLKem z2eCPtY@vO7IMgRz$GZ>1U)N}c?YOO}X%p+;D$4qN9K?o%^Ra3(S=o*|FE@j)wx!&U z^_=ZfGul@~*&_*g{60yvfcJ%UN*Od#j+@43nO~7`MCI>7nKH-zlbBBG@mZponHj#< zu4TZ(=)^u>v69F2rrd^e2&f%moW&MTG_)33#oa`DZ;pL5Sd74SRwN>wSsKY-W^PtQ(o$cs4%OFE6_sgXmbr zsAokvf%E*rxv&BIRb0mYGAn5xwQgN@AN-3-oL~P{Ga--pT*rjmO3n%8$nXtE#f~{bBOMaR2OePg@NB3G(xA^#AXKpHTMK8|xvP zW_^5||9|$6e;NLN{r%Kix{=?FxbFh~FG*S4KP!2i?M(gU0#5??KlIg~1pjBb|Ks8R zL!QSTgMB{qxYVC#`w{w2v(aSI?Y&qJH`ZSX^wO0Wr}>cVr`P*4{YS4`_kR4J^^(Q+ zKTgsQ0Q(310KEF@I^Z|D{l8(s55S_u*UR_e@c`E8{(dL7OEPegX2c!F-@mo|b>sS< z^!>#D(eBHx z{}0?{4WT^e_FI+Xap3;@?`Rc!$OC|X$in;K-}?7JBqd(<;QCRG^>(&$a5;GZuh(W2 z#9j9c4pvr*==XV6WdL|uTVdh-_buS}^y`2Bp@V;1R!Y2IY!y}F{K@2nj0_1Hle7>1 z01Q=C)q9VeBkra10y-oqxc3PBY6BRBe}FcaxxVo-JU45ZmPWpBbVPfHxD4!KW=p^% zMmPYi9dWQ*63M=o15eZf=E%7W3G@9A#q}RKcsYP|->@JTUz3IfiRT_UxTe+wpbfH` z`ftWDgqauisYAf)=?7_HA4I9aF~D{GMOKfImHa(w=)yh@+3LK3?oK!SLQx+gc0w-< zKZ)`xrXPK3lYafZ8aMQ0cuq^|{-oUTtGXU$KwG(*`eb8FRkm0`puD% z`}jUnhm_&-(uB!R`I(;Sq=$Cs-kDtD4<@HxX zv?DFs>)Firw|(Z^Ul6BmPfi^}Ico3jG3VTT@JxL{JUw?maDU>Yu=lUmyj2^B#|EDr z@8EOiV-E_vKbUVVy_ITwVEMtCKS~es8JoLINtXA5g$2R|&%~iK!<7=?g%v%!wSuSex31ou-dGA=fMKNW zQTVs0Uwf~6&4qtyO-C~JFkk=N6&|CDDT?pv1CY~{(59AA~2uc zuDb`wKhRdcQV2f8jzxy5%A21;yn=WCDUCSp_5S)Rh@Svl*Ld>J$k))ccVNdK^Ze+? z8+SUf-!V>K>HPoMd;937?lWCfh#K1x#_6o#bnf)D@i-GKOR?3{GYl~)7dUROR-NIBNdo+C{1sZCaMT{dv7eU(lK^qEV*O_45UqFrVc3$ zw(6Wisx(gg9iY7ezvx@2>n7?xpF1^G3;pBwQJp! zV|~s3{qytekF=|M8U6PAFTFHs1CIpT47&~KZ^s|-;YRSD)-fIi_Zh@B-oRfI?DU|{ z7jMV^7b6}J@qgO$M=_o--UF;hOb3f@=K=7V_`i0E?)UHX10W&3L?C>2zY$0==c5g< zsoKQz&kFh z89y5mdLUPw5OsX6cKr0y!1o*H!q42Ky}y4=HJ`NIaY!1H~L2e;QtpL%Z$&&iTnEtjD;Rgd0RI7W()B9-QT>@ zPWyg`%k}nCNT)F#-FmrN!Oy*u#cctF)Fx>DP~ zO2GSbKSFv|C$B*du)95Fw&j~oo`BxVGVD*k zKwgKE8h9t)hVQkV>7)eB33?04F9Nq^JjY%W^^YdKS)tTu9t;rYD=J@wc~oc=eMWfG zSzq%m!UHfa0L%a3y$}ki`Y^p)r(t^K%H}tq zFRdw99RN?(TbD)pL5i!8G+x^DQk|mgC;)Vm-gFEf5{e&{w$-ub1@> z91?mp;FGf{neX@2?M`u>ogWKgKXBbrt}pQN{^e+iPoL-30- z(x}Z_z6nyDcj#Y)cI)H;6jv+Y0Wc2JV)$v1I@h7R6;J2e>M*mFLBE6jPNEFuXizev zl;{s=cQ6_-5ApYP8r}WGeVi$uj(WxhXKM>_|6_0UOr1nIuiWY%r+zJ)42hJA5&|yO zRJ8{95B0<@Avw(V0lP`WjpBinV1Pa`{g@+?kA9*wjH|fG<~g}k?LT6bk?)O-Mb1$# zrwrYire19DRKzucdW1b^AN?k1G%omw=(f1he-0cG`zL5rIcqvi2dRq+F2Hw|dCHxNiyJ%~g(r7YE)W5?FR-{DyV7UPI;iepR*W8B&RJ;=N zl8RFy`EwhP&%Pnr{}^h1B8k8~;iqC*QnyvT2qg&2m7sEsniVn z@rJ+pt9``(&1MhEi+ns^3_tepA5u~LmH@ucuKFkYyXwkpi#pvBWDVj=E#f+xiZyH_ zPClQVZ{>WY(TI49ax?blkm!$-7G86ojeY~i2;3(p{_*>t1#STT2yvJN{68lR*f;BO z;5MKi`0wBWY~CVvu)Z`#;Pc4$q4J(yjd*;td9x?BlD{SjLqh-5l}9d z&W!giScZ4ax+q;8UBEvsSe{v1q-Xgm3$z-_$UR1kuL7HX*oEf`Y{Npab^~}3h=VP% zowP33cD`R~r2mJgHQJ(#^SOk5eB1yz=oXLjezsmlz6xy40|(}Lzb~QGbNrM90>EDi zY~ktvaQmn=a!#%NyJ_IsF*#87p`2Ik8}-UIyD?Mk+)^C0$#%uoH8qQ+BkB8~~K z`xL2|^&ls+!2f~c8yEQRaQ`p!dK`LX%EZh$xf}B+=^Dfe!-+t`aS8?vJMdj8O&NnOf_JVJ8-P(WI z=jME<{8aGr{#Qh=LE^sdM3G+dz^|VOzdipc|3lUT=Rq;cc;b*4nA|rF^(Edd!@4q$ z1$>F^E%@i~!Jo=?tPANZal5&>z!dw1{lUXJUiZ%pf|mxnbhBCC1i5|J7TDjO$9!rm zpzMR8GWVNf;|lse_5o0gQ9_+J$Ng#i(q)O`!I(;^JXwv_y^Q%-W~v@)hSc~(tP{Yy zMe#89%eH`M?C1V>L&Q6rkM9?2H6@&XGBL@-`C|LI!`P2u-u72kQtnD-!OMi*%I5jA z97hEO8Uye5f9yM>`B)!>fdVz3+kJi&Pw&xbJDc#miu^-~CZyXJc0zkHX?AULzZ(24{4Rw9I42=)f-?`Xk8ok2~VFj;#{`G zhHwxk*)K({e;oI%*{HCW^-=0dIazO8x4o$+Z=$xgc54p*=l)(_y{ek?^Va12Jm=r3 z_x!bho~Fia5d(e`^X&tzjlWl#BvHK<_1Bl+yFTBR-11BviJ4NO;Y zrXySz?Dmf>SI-rSON}R!RmRoxTEo6R9r+)9#c8)1Pa>WGKcTxSEh=~p{VnAM-vj=~ z-qgsfXS1=h={o#lY}t}hc?>nc51&psp6&L4)8NmSF z49<_)dH6rTxXyaatnZ;fV4VIW3`_k1w#StTua^EWM!#d~;CPQjTY`Ka{#A`!FEYIc zk2GP2YzH511KOch$>N-fbwm--4l8V;=z33z*w>SPN?iZfm6)eCZN$C|{1yD&j{hSZ z_Qqcq_rLRb?C*Z7Jb-Qo&#(67Pf#xZ{xEU>MJV@@nkDbq_b-9{;G#vu|6w*?OZ*@3 z`)1<*vs$C0@c)JH|C;!JZb!G;-|m#O|Ho$#uL1V!E|)7;kH1V(|G5Q!h>Gg) z;E&^h>jzo@>|e&ta0RhnEs%*k@}$3^fj0k5vVaU6iW zk9_2JbN#sxno~?y8*})7PX037Kll3%75^_TrXPTfyLRoOT^Q8-VdDR{^Am380YLwj z%Dw-AgkNY(oYYH;019&L`fnwFRs8+m`?;l0FT`1(e|xBPfJ?&;p13+C{<9!O>6h~Z zKHvq|*Dde@GWHxVz@Fm;9Q)Vg1^i+^0sk@|0QmgV;FF8Q`NtZREM;p$?Je>E#>W%j z6)b%^Ca2YUa5@*_04TB#e*LE$e*|E>2yp@;yISU{_w6=?vp0@jJ}SC=0(bx($!vOz zez5~)y`J{_p?Lbz7l8loObG+T|4XBnB9!5GZ~AY*?+EQyiLWIR?|jD5soV2VMMe9= z&l%e={Q%E@__;p((a*mof4P0*YG)|FkR5t)GnFtlYe$qjbVPZh;3t zd$AAv0{pW00I7&q<(=Xf2)%GO_^YDGed*hA`!=3OurJxned&v@DDW@H^Nr?x-ar)3 z4fVbNeKYh%a?3dPm$CYN3iJbbZwUIxCAR65*wF<&VcHQrTet&p0(*Oo0}rdqT&6$y zkw(2FO%?8dKly00cgg{Vcc8)uJh}1FvA;S^-0Tme_!{6`jT>(&uxAw-Pu3pT&-(|v z9|sQr{^=XP5@dbX+SmMvt#d=&y3cL0@H%hNk7qr^lkd?iBF=v;v1uJ~2j`sgXAa=l z_bdbu?9qVhZ1}6mMtInH@ zwNt;js-kZtar}pF1rG2%$z9z|{D09R%S&GXe!IzDTg&GQg!wb&$alq?rWo_P`t0fw z8+ZmokLyZpc)#MC0|VqaMCV(RUD&Vc0;>`i@!aGQ-#GF8e+mY^$ltr<)}JsvPkTnS zXBWQpROF%q`qzjPIRA#4uV>d55&suYR;c**STNoTI(My?l35AKn=$sbv>hWP)KV;#mD@2mSTKd|pJF}@hkNc zlh%`#wci82O#Qp5*v$0eS0^SIC%{x$9j5)h$r!FJ1m0g)ceA$(JY~Z}f2iX;qOZ_( z8nKUgw5_hY5IlhT&9BW<{*@TM&j!A2U)Thm=0%6Reb@erySp04&q$9_?hJqPi77}a zQ6W+8xfBHt63@ST@`$Z-!~s^%)pFqb-hqFnUB08X_Rk~eUyXXVM4pmk+xXC7?hnfr z>q-juG&e4N`oET--5h6>kWum!?(vj!$7*cbvSoI{i2E)vo@F|JU!qw?xo*S$`YFU4 zFp6;p=A$}|Ubkcleg?L@Dg;?BpLiv~c}`KBKjZV!XR_bE2;4jB3ckkgN8WxD?=e12 zs+INY^7S0z`S`V@7jfHw3yH6c5!Z*G&kpE8tOcgj80CW^;>bhBBR5lJ#K+c(4^U6H z(tpOu>-|ysi#b{K6D3u`cDXox26}t=vrlHbczva|0rT~F%Rj!87@gW(W=kYStH}dc zp0I<5KWRN2Y}+=q8|zquJ#T6^{KMGod&}GMZPrDP*hd`KEu*7}zoFfFzu7I8A>CB{ z>C^eP^YDl0+(r2u<-m?LE zta>2=z4xT`$!7;mEXVed$M6;S-Rys6?RD!(OaJwdk@@H~=_RHEdRm|i&;4OMgxTi2 z#d~w?N$Nd5b@VXw9l%qR2ZyOo5t3semLn7};r)DDQT_^5@8WWK;J+Al`>{(h^`fVg zv|9ff01$j`Mp0nz3OgZV8SvxlmSED+iu$V3%w83tH?@k#7nM@4DkT};;cHcq*?RB= zPgdy`>vhyG#$I`)jrykg`L~0#QyCiSUu!^|ht``DUgH1ZIlqo}9dYP!3^gaKM*Av& z$H5+2r_(h9-#gSl?xB7*nd~2Ay+VC^tqJKy!L!MSKI!cVz1f3y?;Gkpg8iAJ2m}V= z|C_K;BmR$eCl3Jj3VF+41`i-Biz*KQ(@yH;qm$TotXr3FqtxW(+n^uDUrtgljp_44 ze1ODgt&{p&F_3L9gMO?fD!OT(r1&(d{>)wGHmlJBw<@q{jhZOSJ+|EyEQ8$V46Q1|^GZl8C`0@E(%eU#fc|ne z!usqogw|sIgZ+J2VZA~v9>F|VWgb#g{NI`Kc!)dI);e3+f9~%~*qMG$VGs1qlh&(a zV@cvNa%#rN{Z-h!7J6*hNkvntzkisYx|nZ6Ny?BKOm5CrNQ^*UpU z`r(wQhg}c$byrfbyP}>^QTKb<^cmPm3l_ajXJUJ$P7jo@U%jKzW2;#-- zzz;%v)0o$=0XXM@375$6P#be$d_q4so{bXUmQ%hN%B+%cOk&@tgq1F)+xJ#xhW#6S z3srwO-r$t;ZPzWCQ9JShyHb5I^w9LPo;6}Mwkf@O=2=%4(!^ir`WZwDF3h)4UE~ma!bc;slpTTdV zUxw@G?^>+^_3sA{pb7IuJV1X0OKc4(5&Rn1`KR63UqfH$7XNn_^5yEN^l`uS&aJU= z_9MZY1RkAl3!1ByX5=$;_8tH618>$1~Us+aj~G7(dvT{c-qP9A5>Z@H(Z>XF9?5+U8VJ9Df+kD&M1Ytr6u%zt0*` zAJ9vS$rjdc$IYxducR7Aud#pKMEv&asOP>b;|bye9Y}!BiRX+nyl&VpyD9DV18KHL zZS8#WPJT4Mqfggj{$zjEqF=y1)R~GM}s1sXB>pt$Ofbn0&d6ps&llqGQXngF9QDeMc0u zBAcA)=W{*~BA73EI5N!iG%iD&<%AwkVm`;mLzPWb7LtQ&HkDTEU=;T7idDRIpvZk&Bd4>VgK3=KmNq?Yq!?r zo>TGs15A(dHAr$^Pl|EK(qQ4d^i0k;8HgZ;D7 zh;iUOe;uN3DO5FnY6(wu`_>b9- z?bBN@@8G-`J(ndudIf%tIFBG&4R{FPCkK^BSKzw=F^+kB(i-dS#eNHZNj7c9{0aMO zU+*>EA2ORxaGqtW6zc-`37<`kWBo=vFP;XV56k=j=Me0Vc3eW7 ztfngA)Kb(RcuS+?rIJ?^yjF(m{uO?8pD^>#n)~^?>=U*#|Kh}im*)nP-i&ht{32w3 z*vk4joK^fwFdr*n6ZT(kS+rg`1pivF|8L*Sc`S$n6z2ntA&B@k-IiA6J${gVbS3u{ z(@HP+7B5-CF{2LXKISzuwRo}N2>qGhR2O6YHe{3}=c_Qx2$=`PGP+e+cK=zh#>CZ z`@7!A1}4Ev?JbgAlUA&ctCh?7NXG}hoLYZvU;9J)4{LA+ynGIExr9l4@8Y4g&oKRW z;~tUgxpXAmK%S{nW*h|YODc}|@jdvN=>`86`=3baD;t30mw2;ImQ&+Zz!OHCxA0q| z?5A+gk8{~e7V{OeNI4)!XIG$}l5q6J`Z5MnAxfRwag%a;b8ABm|NlVZe1QexE!02U zAH7CdTPKU0he!LuBG(0HR;T?4>Jfa8_jqCU0Q)2KQQ%ErU8>!>sT=1L>|3KemsA!P zsl03@cFs77^TU-<1?wPqvWsISY|p()8v7a8SzVq$J-lS;h%Cc>#BFF0U6k8Kl_>G} zOt=^Q9&s7akj&5DyWTthfOq&3&qJc%<^5-s4)t7AGEVjV3L zgwbvax-Cutv#$MAepV{NV7 zPW*rK=FN8E|5$Dp<#0?D|HpF+`2WU@|C;zez7PHZ;!EQ1SGNC$9uD|O1MU7<&i?^v z2d`1(G2B)T;;(@J-^c%nbAukSJcqO9WFhovv~Q;Vj_Kv_S{47t#>m<^vYYSa@b6!O z|07QNukZi=|NrvFh%PEv2oasL56&v@h-&7If8|AAi??|^+7!V(M<#|bO*S?IqVm_{WVa8a1o6zBT= zzZ4H(}v4mgLG+$qTeQ1Nw@7m(uz z!0!I%;s)H^UqFr*Fq-29K%c(gFW?0Hj{nPk1Bk;b*m%GW|0$SzL#liQ;9GZo@4f5W z{RF@uL-iMc_OE#E!+ZdygJD0;@?~#53H#xtPj7A?um1w>!(C%7uMsD5n$jbQ@(14o z-l16sKd(aL>@570AMI%@%*)Rs{$FV_>S_Pq8~C1?_UdaJ0lQrd6wMXDuO4s}fDeFi@J<4Fzq=FdlXn^R`x{%e@aOMn zD=Mm1Xx9%rjTei)fkSYrcJDNJ2=9brndzf1dq%HZ>D~FJ)?CL`cI94hYV zA>KO?ov$q1v7x4~;*gns{@WBG3VZgt2>dA%*VGo6D=8n)l{lt=SN+NGY>M&=J=dCe ze^vM=PT+zy#v_@X#0NFf__d3U=DIhPzR@Yj-pVHej?VQpO0`pQbT-!=yGOH$o~6zg zT)gZ79=0fvQHb+vivMifL#fHjlhE#ivAI&--}ocfFr_j#elKxjkZ&~8diqm-DC4gN&ezy}_4=v89nE#_H4^*- zY^ZrXl$xn{8hnW5pND-p;*T!RgDk5VO}w;nC-CKspR+&0^lpacksG1$MR^eU?5b;5 z;OH87a(GSH;J`1Px@B=2(nc3hgO4-V!ec(^W(elH>$+n zq&}_V)PqKzm(78AmU>i;!LJCwYYTJ_U1PZy>jN3SzkUC!Hu??tleGudu)aUPa$ha& z-0h!x#Ljkob(?~A-%yjTZ3QpGP;;Mt(IG3|AIcis^t=D#wAuV6s_3A}-D=sHZ&O+;x@b>XKN;8^8R{H|;F%-YmV-$5GI$pEe9pe^^3f)Yf3|bfaX>NL>qa{d zP5YlX2)>E-QhPn$n@=Rv@7@o6{1kdT$Cm&cp0cO0t8Uq{W#B_ybgW#teEAm`rv!f$ z&vn(+f&kEi{WkX>x#y9eMy$g<ZI3p?kBaR0xPAlt z`H#Pz?Z`(QfY={oC8jfUpA@EFf$7hl(~$>|P{KkpuE$r4BJKYdYujLN|3qUq6dX3- z`Uu^!zs!d8zY>&vlnQCIc^+9EM+%y4ozSN>G;E~4E|uYkAwG zgWdn6^_X_iA}hWJ9?~YJ^Oe}!kMa8$pN~*q@cc=!i+aH6flzbdo|9Gkl>N}x zz_0(IKtF%q_^#MaJx~4b?b5=!gmKPO)IYqC7=@qR^On{&8Ggu5TFhr3{50*=$-#$|Ccf7^11~d^)*`cXiFoC#ufs#V)RSk^RYWPL+3cr=2TfxXQI z%NsxbGwNw9>H8~;`LO?wwCr!EU*G|qUPpdH#bSL&Gt%=tUj= zYE?)CZdGPOSmHtaZta*zVYXRfTP?cd8-P!)4NpSvi+Xu<>{1u-#lGGO)6#DUb!&Q+ z4E_2WdwRfMefek>!0!#<|J=V&a{odez#{m8faLtR=;fp5EtqaF-yn_v>`GZr#n?!) zo)~9%LEg>_fPL#g2>xk-d$sJ!^7)y`xQTjgNjj+N_2AAzL;Uq>{Vr8+SbyZii89nf zSR_siKgfC?aJFuXYuKfw)ItG6+$!W}eDVUDF&sA)0EgEI$yxFXTqQw#2Y#fpDb=p+ zPakUlZxZ|%6oC59po@HkZcEpolAxZ}4}YJ;ncxRgRPmU*{=@v#-V?k zw05|~F=u@dIzeJc2;A7+01|hYtEV@Nv8vRnJ|hDFAN)<1Cq! ziSwJ4eNIX_PMr3hCe)s%D+W#rJ%Q0zc}88knPn$yaGC)h*_Hr70PZ zDd!PVih9a@TQ}9RAHNw>oGizlSYcr^(m6hxUE78C`}@uCdky};aEGfI^^tr%InQ~- zslYj9(Oq=Jodj=H?I3^4u^)Go&6i*2Ju-k z?lKb#suIGvH+0vdm%-dhw3m#K5{16z8%umTcbe_K-@0bvI-QHeQ#BwR^ z6DWVaZ7}$~R<_>{vd&T7e+YzwE=VzQc?$O}DQEhJ?Dy~^>*nv*j_V)`Y|k5Y#RAIh z64PVE@z0e8YU%I8D?7LGcbCik4C~W5O5D7_b|V|bZUy_jSa%pai8}w>IBOaU+}#)YC!vHX0zz0^zSYU zBajOC<*dI0)1$Dj1n%FLQE`8`aaZm9(cII-ca8+EKtC;5O5xC-^L%!9#>sw|j7$9- zPvAWVnQmALsN)dpr;2}953#=?Uh!om!~7b}fo{s#foygI@)efVIPw;MIAG#)`^Od7 zJ4UT7vN*&10=|}+u3r+ty8$oAm_m7gSD4MHr>IpIb=%o*#2)vc0q+Y2;^w#(rM1nd zC(n1&GSh{>5H%lOw*;ITcKr>ZEc^Y)o6Fn(J%)R$hBgg+jc(EPAHZ z=ap=j`BIWwZ=oMrXW&Q!^=%2lAd$~0Ka~dgoy>BRo6=2BIZHt zzrfqaJZrsmtD%+o3{(`O+y-03rPcAeHmECL`TPigW59J>^7?rH_3_oXAGL-;-x8R9 z?6?fPpXK}#@{9Sov>5e$0rQ9)VE){wIP#qa7wgPyrxu0&s^N#Oy#aCRf%C_eH#vWH zE!Jub_}z?!mEV<9Ugpyh(D}Tq2SHfy$6z-1syu~(ff(xVf~C1RiuvyetoJ(98*!?` znBSw;{&J)T*}Q#wgzrO-f%&%El2(QeMIp2Pph!7hpOtgx;BMr@6%D4z9}8p>YCIX8 zR^Ln9U+U>q?P>#_BfXQjo(uRxx%W6P&*+R=&ez+N2>4=6@B<>Me6)S-+4tksF#QM& zDsIR9YqyQQMLa33WWtnlZAsWU!@g9~Yq{@nzFDGS+-1<_bi|QDp|u9$G}yP5GTu>N zgepSFX6$J1G@tooWpWwVjqtmPD&I?{6pEr4c(-9|}Po;=MX3u72_Q$?s z$L?Q&=ckn^H^+Hel<*zc-LLeRnjl*Sj3WL0gSQC#fijyEtXxC+PZM2O2hsmNZbUy` zUn6+`P=kHGB{`ei#r@sDr!+VhARn5=7}wx$wbQQ$cwcepEcYAEbm)yG7~idLi&1`8 zF}qFN@0hbntpWG%$$hLK%K^q%h{fGq} z8Ln3yVk`VQ2^Mck8Rz?+wTV@%rz7I=4%XYLR~ODZ%hFEZ=O?QMLQ2DRz^5fBz~vsd(yjXFPCh4h2PiK+Vwn_xIE4Vz8`Hr zp!yZLQt!k*1^)JXiwen~y)>Lu?amizJAhk%t*ThR81oJI67n?Gn{G>w$=G2){}~$) z)p>cooqna@7w1SA_42i<-P+PD`NxX4vzPOq_tXve6NS{7$~o^|N$I#ASOVFZXc^W4 zSBmkgun+%K2z2@kp_brm{}fJN((>`|uZY>>1VmJp){L68N++kiog&M3o>b zz}vx#5W`{c#jC!Z^_$;9zF+9o;T-morDA9lyo{GD0@fMUZzR=#_2xuXi72ODf;3=3 z=Ka548%Uf-|8*)`H}O7bZX)q>QT8t(ejaJPxtsHKf3GO zd2(gH+K%E_1KR1lC5Sj%%wI{R-VA>o7MHeN{T;kfJ^2i2S>C+__0UnUP>xM?b?{$s zq6%(>3Rq4VJWBOi6pi#3Ab7=8-e+;%5XEug{S#R`cmv&4CED;9{r&fQBrWS(@_8Hb zkRL49LzCdG_Z_*fg!92nc=JBCi_Xn+I?CD6I|RN7c*rU6aKLZbhW>~4hkGU`&rM!Y zf&B>1Q5sEkzU{-j?%&om^{G5hQo3B4MZYQDf4BFb*HrxhKyO7o25>{lJdG-0=SK;l z8F4(}0L-rd?(DD<_oJO6q7ANnnr5x{Rc@&6Cv)D!;){4Wy!=X<{j{!g4ahlAcJ9pDAv*ci5U z7PfiuXYDNS^x@A6yM319gL;qdX1m;ZJ+*sEy?;0PAJzUpSN}Ol`+xeO$l<=U`&aA5 zW2OD9=63uaYRoM0f7TE2e~9<}7?AJs%kh84Yxs|d|4UMie{!d!z8B*f_VM)Fs#*N& z#sMgVy&Ca;O5%z+9zYKF&q?C{7b#DPGq4*4J`epL`2m@^aDaRO%p0Z(;E%BD+PL)To<a(i~v-h4p1rN`8I^C!HPCsY26W>4m+;TL; zr~5wL2XR;VJ3tK9LGPWz`+r`psF}eZ&O+s(?>ZTm9r=JL`cF&cj zzS@hp*3N%BGlKVge;qtRJo)1@l8^H2fPh{C{jU-pBwqZTw}y@|owxJWUmMXoj{zbjmgBYo(Pk5dnbcva$|hghzaL*JR^bJ}H6fYRq%av%Nl z8_mIIfpaug7cc&kqHl2hdt_7L4&Zo3xrO-^qo27r4O}CUIgq#X8}Ki$WZtp0b=8eX zjx_DncR8Z4*Mk2|v*c$zm{*NgUq=2wpQ%QAs{J}~{%gr_ium{^mfJ@uH?G@M%lkJ* z->oI?{h8)}8ZSrxvro50UiNIL`8+ys)M2Pe3->ZQ4^^m~J~YCeDZ<#ZRm^PPckjJ${Yqfh#rUH8{7iUV^R>1N+a~^fRl-r#L*Gg@0PuuLZsM3hb^b zJja`HT{S%fJ-MMq3EWr8a@}7kqMi^(JowC?Ghg?KelyeC8N0eg0x#sF_QWW!4^@Z9 z=qF*+{`uw8M+^5n^10>qrQcXz(@?t~`3KK=5$*QZ*JyOc9<@J6fnG}TX)i*8_Iix? zKVWzGXIQ}hzW|Lo{Q&hKhum*{fd5n9*3&~j6ko;P?f5^Y(TxlEzee*R{2%*<-23DK zFupG(;{cSS{@`~2^;xd+2y*hqQT2M!ji>T!FkNrThkgcXJdG;xp9Q(`J!#+g0sgUo z`(u8wDzh&9e!+_9IK|MnSO-pT$1I8SW6}L5fd4};`^*^q)ejDM$C?{ycOvQp*!vfm&1T4&)S0a^-wS0c&yE1suP8D- zM4bJF3iCAgV;vop9kj3iipvFj8-7N%CxJ7suM1aHoA_MEU^oDtz;2Cgh0O-P6FXAA z0^?tF8q26zQit(Y^PF0p4MmmnVpn!eW)b7>2Cnm5;?D39|ZZqOqSb8!+-oPqB z@E7hGaa?v8W3ZpEdExXu@E_1rcT(_n@O~QM4DfVgEV?T?0=@&nESB(EH~nlsc>p)u z$Gy0A{HYw;!F8hL##ctL53E^)0JE^eui5y>Ul@#S*R6l@%DQ`q`-e-7nlk9!N;D&e zLfrpYao!gS_bjo^!yy;t;&mV0JGC43L-X_MeAqmZ&Jdp($a-DW6D|v+uMt;j6nim# z&Rh2RG+O%0SCnML)`@dCCL-efn>Hd|1oT8JhC=U@K~_F_nE0Y)S-}jn%)omVpF=(- ztz(Z>$El}UJ>TV`UhlLLK9djoAt|sb1!-x$d02#=qDpDa%G7^rF9)FifL^9Dp!z2b z^b8(BzAUd_6{1a$dh@DL>J`NT18|S)h*x@gfZrPwCluO+m;w#s%~(H=dlswuMQ11- z;(IRdcKGLCV$(_EuTf9tjm|^AaRTw|iw+^*)`Pt#5-iV?KS|5X=lpC$q}0lds13;b z)?hvak7B6%t9K9~LWozEt>3CH3{0O#5l(yR9u2<2se->sv*+@A?nnhxKGtZ*QrF`41f5 zy{io6-41-1^_}UBnW&fBTt6SBUM?|YTHB2DUes6WxsL!W;cW&EtPQ@7(e*^tY;rsB zJ-@?-Iy4G*zi#7oV)slR#0a6c-idB z@P~5$3F7J8eU+}m(Yk{AszAjW>b>VG#1ZOWZ)HUt_0k$K zIn4aaVnqeZKUyoh4X6)||BS$OOCw9rX9Ay0Nhadc#!yI0{czG}%(9*8Z_IkBzpIb} z^(&yig*tJD-;Ylm`T_M@qVNp#m#_zmKtEtbKBTNdJ#S2wil{GiM^k4RuQLfn5cP;U zqfy1Nj!Y-|sP9b02UYw@)D{e=>*u*$4NPC7?M1%=@1-RL{2cxR@{X99-v*KKw7V^t zbTmReTxPs(3-@(yu{uoswj7PRC`-%|`sou@510dCzUPej?qm7P)zu>Vj|{)27$;V7 z@Y}#C5kEUd`>A}}73?S01J83y0qpzoZCc%6iv2n$$TF|}QZ@Q1>MN2OV?GU)BKQU9 z-&*&J)WdHbtGh~E40to_)gb5QMC1>8KmoiI@FFUT!7qUyZ~rae#PI)aG=?~SG|*!+ zpI%?~HI`4~_P7nOFBXhO6Z0n|leNu|Qg5Jw>$g*kiEJm0=Jf020W32Cj+WEUFB)vd9{r=)J3F6+OXbO|3*Vfhs96KL= zk>kKM^KGGE1o^;wuyX{P2k9tiFXEgI@GK_bPu1ysAIC$zYj8khKVI+y09-S?f1Y~u zBjIZFi|dGc5DIaeV_WU!Jotn79Ol(Y>*7MQ!u=AC=c~H#eQ$@bi}|a@MzRaIM8Pug z7O!7iWO`3Vx8M{3-qK+D z71oC?lzogi@9?F7(u{QLGs+P6Nj<4l5bxW9{3*MAEZZ+;W@c2pkOOV;l*zQPtzW0b* zXF$Fi0NC?+8Fp(N7f|<$BY3{SnUZto8TPjWqkX_fCM^|axB49HQGh$)y+clk=beNS zi!mMaKQpByn$doUHz7%F1(1>dy0)0#zf^Zd9p`yaG_u}CW|OV_T{Az9jREZYy|UWB zeA02u57^(PZr)_R#Ngmy)JnV1tQtoE{UN~XKr9V>9Db-P^q5~pti6I>&vNx->)V;W z*{s)7YBUiarRWW(_`4vAc(1_b7ey`QcuK~+1b_Z(0&xTCyLF4x&h$=5$FZ(Otyh%e zrRy(JXg8B&YR0uRuDGdhm&yxKo~YG()vMND zT8^}^{Af1LH&zk&49D>@zffX;1Zx6(KD5t)H0*;Xt?m#6NJRvb=v;Nq20(cf#Qgv|qQy@W4X*J*Xl7ufSHS8OC_O zU~vgiynn%}(X2jW!26)#ZD)R4IliqM*I3px=OIs&XJB88I6USK zJ+GDdcJS{{T70|qCz-DEl~+_8Ye*KwleiA0)BBhY;E0&dF<&|lWVrr_AefZFZaXZc zu%5#YkkNFI>;5W@(bI(fp!4>_{t|Y}v4&b+V|#&p(xi2^rG8%-=BW~$r(0dejUmiq zlNL>hXyW*-NF-ije=-QG^T-REhzePuaRvNld$6uI)q&opmpoYCB?Q3s>}bi2%v+%9>J(f%i&;KO_Zm0t$_1^dOl$|bDV@Q-z9 z8tV;sVp8fVr6?)~D0QMT%HOqLF{hf)?j70=?9b059*YKeF>tQhOgH+CRV#?uGK{;d zR-ua=&5jh_FQ?&1P-fwAX!M^so<;@ANu?hR3 z0|68E@7FCoi#0y(pHq>RR^pHEyw;!QcT)2=+c-XYB_qCr_+_n0ju&g#Q(4i3dErX7 zrIqu8-rU#M1$~T0%q*;5Da5VDJTdQdg7?sEc|G)`ljBb_`$G-OKUz@~X8FT`RhZwF z*km!-&V9S4$9?2rAa>=lk{S2UZZ6cc;*a^F{pg@XDu`{=Q^D9d#^ z`0Yo$g!mx#vGAktSesf7B}Ts6$*Ok61DqImx+Hd8w{}~WcZ-FbZ(3VZDqeo2n*K|` zPZGTgqna}yL zeVCV;s@96K%99WzqsaNPuaD~}>dD}p;QR|eYx9_wt?l~~>be+^sBipQ)!DQ2sY&o4 zUs1wg%1N^s>lxSKKyeh;UD4)C1t^cE)KsDFqx@mu#uqGKNqLT_`)VbN^BVk9AOJe+ zWB5{B8(yX=HHXxJPFh4^JIe++mw&JE*z0pj;2 zQM^iCgGTE&vwt|9ap^jq!|}+)-~FOjVB9m8OBDHD_n9XmTNgM_Yjs9F*HOL4gLqrrmKGt1{(ySZbzuCRhu^JAr3vF{ zU-Qg1_N#Rr?hg9-3dgkIb%DQ9JHMUvu=&wc2d|Ioby}6LEzm#5i7Ip0hD%g4a;tI`RR3L$i~Xw@}|&@P!elF6BcxyDht6mqNaBZ6;vg zetfjmT|l{V<^6cB+p^_*1|Rd?H!bTp{$~ZB=DHQ}Hd6Llu8$>Bc<2In0NA#H7lQMl zD?83~d%Ib0IA7t9`P-Yg_aWxj(b|G_4fX+ofcpJfl^ukzG8dD zAA)nGD60Da$YZ}LFM#V9+ySUO0JQIkyW#nFyDwmegkulzeM;i{kSe~vp@#T=4kx`+ z688rkG$jD{$M6nQVt*?V2gSBD)&0I5^pYClAGhQG^g~X+|1g_xApVbTUq`&0xc2S% zKd(Q)otsn~ZZqy#72s|6xA>3-~|x%?tZK2lUxCo6SgjH}VUhXLiuufcQW4 z5IOumC&>f&a6ACx9vAXQ9st~eZ=s%A{5OaPa5wz@-|PO}aR1x!f7nefzZ=f}o8Bic z;MemT@QZl?MXy1!Czl-?j3+eGWr9WIj844jz0Pw_h(DP0?4mQq>&3ftgUo6(@ZvdZN zskvum1>X0q4)i<>`+D=o&9MJ}__?|8V3>XY5GNp7@!a%L-=G*I4#*ZEb{?GYx z=PAS)2vo0OJb-}77@+*tneJXSF2Jsh!!LUrZQjVPh^N!mR$95t^fK%=nxSWVmn#aD6$|O58P?t(_yDyK_?(de#j!9YXPUh_es= z^e1uRtw-WN2wZfmuQ?2TGp}c+^-o;Hd&YPD6-C;n=uQuHCXO#6n+V$#K#rVDM zrI#MjfKSl4&92j;9F6uX_N~OH!-rRtm!tnV-W1Uf5#K)G>ma^+XgU?;_u7<79sHBm z?a0)Ru^pC%^E8D!gvLN=@hbQ+*zr*1yBQC70H2YsPcwc+_RZ`#`g2`@>r;*7Ik?JJ zK1;jv%eJO#d{3ItoMpYtoH`}2zQRA8@KH}3kq3cC71&0@gCFDlm?*axZ1DFN2##&Q z`LIJ#px3@&SzFyVhtzGF=>Ds$XN@t?$Nn&@D5I2b29yT&6KUs*3h{q)cy5yQlnRyo zAGVWQo>$vLXYQMua=<@dSb=P=)0qy~3->_3DJssW19}RKKi2c<5cOd2gE|nJYsUHB zmmIsoe9B@P=X~VD<0B8iR$|mw@HJ8%X9A&_lG%u zF(uptd?*e8l3DaV{{K`{-QwauYbdKLQ}^+-%V#+#?f8!>@t*~0-$Y77<}+sWp%)-%x+_IV_Ds~(#mqyN9?%H)zz3^;}x>wxL=dxmhtfSPs12B=rsv@4sh>2lnyhZC5o9 zJm>}w)qYi$Dd+l>Fw%2qmKvTRKXsX@r_h0M_iFNY|Kak{5y!WUM)C5|^0t>TuahTG zpNx394>ajD!%X+SxaM6MB z|Me~xWoKtc&(!X&MvZRfBKMcR#eH_j#)qMY<8}LtS3`dQsWStv!aYwkh7kyn*WQS5 z1>?N&+=21A^0u;?d$I7t&p}Pz9~KqyyPnk@CFB7ZxBr2~h~Mp-?3)Vrz~Aehz0mtX z|KBp=DsNk2dpvJB_(kvsuxV368T4d+C6G_OMM0OgU+C{zK=of3> z;y7MYeY_n0J9uvX1odAAA8}UT5~h_->XVJP{KcFXo=F8Kct6xK^Ap~8j?KWn82-=Y z(ZP6m{_3j(z{Qu?5ay?s zdOji9nxef&0EWjafZMywij(>GPW;^{c>@t$_%mg=9yAr}sb4g@<(-uC{y6ZiB{u5Q zsPA#Rgl6iWW&&~8vz)iw|IKRE-bWWI0lq;${0UWmp533^ejfT13Z>Sxkg zI2BV^u6v%DIn44-Owlj=1KXc({(GyLj^U3!`DxbE^8({*gKy9wV;)2KT5Ii;Zqu3szu(%@0{txV ze}EQmPmhpAM}YGMnZGjbAP+#J(G?oOFH!(t zz6@Rwwk_}R0Onw$>PC25SkZT_8T~}`g%7Yl&1cgGsNX+*c0NoQ8Vmg` z<*lp1jVr@3y%jx5%*zl7sIjOQag90Rbwg#Ip=PP2c+E0-C0zag1T zQ*W3F2QYr%XEzwW#rvtC?3uIzFYB7cYTRvU?9iE6-b1kk{1V62IIo3d&`7=UAkNzc zyr;jJLi-99(SO#@aoD@^&@|R&-*&+=_S%10jrF{yA8{VoZY{}gd7F`6<7dPm zpZ5yG-ZG>Uh22*^?9SkZT+4EqSD7ogKM;MVw{w4>)g9^OKBPoez%#&m*|ie!FrzSo z?@l5vdE+q3V__TsmIM3jO)HSDl73g7M7z#|Xh(f9`#mN2cZ=A5Sl&N7iGB8oldqMs zKZ(*BiFk{oe*icJ`k5?WV!JdnWPJk4V-ELA-1lrb;8f>Py`KK+5&t02A5`~A)qyx= zox4kBK0BThe4KZdEd9F9fP5NP1dwm=DY^oO)cuae80PiPNEGu2_(KUrGN2r1%wiXR zzuZ{_Tp0VJ(n0V53^lFUwreV`diFEwxX{cxFyBP21Ja3crsJDPwh%uNg*5cG;9t07 z6>KliBa%_HdoUb^o)_&M@#=W(7in*O!Lqu3h{Soa3MbNxn#G*@0LS>!tbR@zh)#qrKq?l&F{K~ zqbbU)IWWZE*Pab&4d7v58dP!g89A!%qg@7bG3&h{B}bVrhb+4JUU?vMr5WkPJEw-& z9<8F+%je2)MN0;(L_FYQ=&I2^S-XS zANjvv@wq*i2clNMDkgqEZ4%v#_k1lo2R;Ps+r>D>Yne@S>(S1JnoG<6JJwHpC%fOz zau=J8m?tk-B64bu=iNx9I2OhCFukaFnIL436AyCWpn{r%h%X;!Zw5OWqjyU<0pHf^tAQ?|mPl*m0XC zZ8I~wdkz0QoTKyg`+k1UeLv5Wmii@qo&Yg{_|nD58AA~}5iYe!8#TZg#yT6`XQ*#+>EknkM(mom0uXO;&*o`4k_ z_hP;udLqYbZ(p%YoF6!uL^&|i)k3`A@c6s17eET#BK6cnlR82iTPTZSok!e&?&tOU z?rUh7<#UtCZU|NZnIa!QMFEQr{@f-f@`_JJ?C#5E8R1q=Fnljmiua^sZ| zNy55?xHg*IV&Ocb2nnuxQb8-$Q>e}r@8a}z1=7S1;wmqhFyPXY4C^yt%Pq zGwW%qI}Kd_yXESpclT0Gb>A52#P?5!w{2s++JRS429<^;%Kkz*Li}0C>+X9S`wYwr zm`{PD$GzYYWN~ZY{UA_~Pmr1CKI1{;(-NX@l|M<4jm91yi z4|oqE>&tEzRqFTH)=U(mzGO#f0n3xv)|k@keV-eAj#JKyk@Q9C%N1*vFXuQAyM5?a zh<9VXBg*-FA{52Ee9GDU&EyKU_w$zpofjYNzvIbqd~e)g!G06#fhmA}4R{;=6AGmv z&h-WP5v*4Hj`6wcN(ZI(wl>Cbe7__s{I1b5o0a2v-(*~(Om}zq^>uRA9xq1xIIC$8 zdhilgi(p*f&4kG#I_aEhdZM5K`!09C5~RO>UESs&<1Zi%4#w97r)*n@8{*xe203oe zr$y{%m$=;62x5NFd7QtlIvEF zua}=3|KDE^{sGW=#Gk~5?-S$y!2Pk@Dp?%kYWd!-)L^&#W#7|{8$PHf)Gy1M#a;7( zE9>^o=6qeB$cJT!_%i+eHI#GcL-_wy{M#R>Z0qd&?sq)_Pk?&JRjK=#!$11hkN*$9 z>W__2pT+q*7W|Ci|XeXajL!dQsc z;{I&s?C;t3O72=!^C;}v+3&yF-+vYU&-PjH|0n*>_PyG_|K;(2)?4;_vy%1wtMUIK z562npu}H5A{=;vc2Vn7MKl|Bh@qcuKUy=vl!+8Hk@d2{&dx_4 zwc`6a4<2-9aclAbVD?|^!8pM7T+{94Fx<0$ayVXne*W$auoLorUPp=F#caEO+VbBD z=fD2FABX#A>yiHdwC^lE#5gUBegRL<;^Ci`{Pp7od<-w(z@-D69~bxm_qPQEfzq$EWD0Qo ziNk6Waes?ovhY1pxxZ{F@X_Ul=^tKt($)NXx7?7!`2Qf63-LRf9aa}P}`&mj*$=^?leMkL_=fAv@Uwi5r3bWhAd_DrCkKZ3Xb zODpzzOYy#!r_*(Ouj3^x&3xU}8#e5{xU0MVc=Sr<3~;MIJQ~09Pd)j&9cu^D^!pdO z1^4gv{_QiU-d~XaUyqLWR}lZl^6mbl_<2s#KJseXk!R9^er)!IkMVrb zZCZxsO@;C-?K-zcO|~#_lW~xc|JCl*=-(GTLDVyF@|vG} zM}Ze_ugVjYKE^e)zAhxjGgN=ix^?UL zU85dj@S>-^rc3TGx`_VzZ0z+p@&!V|=%^oY%_EXn>W5uts_Bgu;?2n)Z<^-yhcYn* z*H`_4Fn5X1f5$s|p8Z`D8g{UqMr%B<|HA*r7Ft2OpTi;b(hd*%B<#=FH$Qtk%>DIj z`tPtWhF$Mi@HqF?ra4XF@3Osgg7+DX9njD7TsJ8a;)}!I5RM7#CoO5s%j2*rFI$i6 zn=;dCvJ&>oSQPtr_-Cq`m(OWWZ-xII;-X?7&foj{6^-ZZqL$`zVSM!lA@BtVXVDa)Bv@@vRgXoV}@&AQ9KlJ~H zn)$(a&f@oM53Jt@IUb;HXdlA=al_T|4;&MJ;ri`5Z#a8Daeu@YcKotD08oDxm+a2P z_f~930$-oUcM;#GT~C+zXF(buv%G+;yoMhzPyP~k0$!!H0psamDIl~%)@Ev^DQ7w# zE(Ncr#@)MmyxY@I@7eZ6upe`)Mlx!G`!n-dYY~r&v{8*XeQVB*H(mtKQk*g-C~Fdt zF!pCP@%wHrIs<&%WEdl}E5^+BVR{DEC(g97TMKDv1@IE1_au>VezMQou0KV9x$VH2!VO6;ad6{O<{@6$D2Z26`5daNH>W)kBw*R|um7TwPA!%WI| z0sa9(+)zZEytZy^iuMqLhBSEiC4*ikymqax!oo^nb7qpuk6 zFMFiS%I`4vwk3FMvf6cjY*l#S9KUBKZWqQe??isE;tzPA^|qL`80GnKYW`i?SAt4Z zmy?-Gvn;>-PV+bP`geI~7pe5MoxVu>Op9O%Z$~}bOCyN4cglH8P+=z>cbb)BD~Qv| z1(6-Jza(p`t1rO*S1JXg7b=lo74hzACy@o4pYeYKcJQ50FGs>5;DZ;OeUJ67r9GzD zL|)SRs#|X@0N%K+%Jlmd1NmH;WJ=}rrjYe{w)2+SzlNXkgXK+4p21Vjum5MjTyOEX zqhnx(^=VDXeXM`0WV00b(^u;K6Og0!E2EJjk0>vRlQ*LFWS? zAQAZh1~_QEc;Eu`4(3TeS&s0)u(v@9VaU#M6aHD?12CWK0xy7eU$-V}v>zR`7wY!r zM5?io<(6jYrw%+tQ-LdYmWRUXJS5_*GHw8P3otkn7gUpyY@r<~J&-2O(OYK3D9LsG z%`xBGod3OPp5Plu}K5Q7r z(GGq=OVcj<`qN2?cvHZfW8(UwD1yNC3D1Xr)b{e$Q1F`g&)dswHqpxGn#!UA^|HN3 zEx-|J&-JLZ(~hab!&v1Qrxg7RcE#SAVXR|_6Om&k&Lx=y9k&c39v#QkWK<3EeVbYm zVdfhM!+(g!Gra@wZ-qTj38KFMzpWVbj8`HLC=!krLx?tw|ZUx=YyP)o8tX<{G;FI ziFsz+IU(c$X9fOfzvUL{CDX@cf!D$9L}vd`LWu-%PpeJDadA~_wCgRr5BXseq4CNt zXAJ^mu0p-K4<78LA2ZBm%6R2|;`|j^`!L%N;dWr(?{cpa!F~(c?Y!rG% zuFITn?qL9%hq=BJ)XZT_hP=n{GmZlK|5Z`ND`%JZuMJGe?Lg=kY%G)4&hG^AN?` zI35uOZl340%yYL;#$HQ-pMyLcPiak*$FZN}d828Wo$Wl-(B#0@$<~kg;&kOC9J^WG z=~PTf;`=cS<2*L`1>pZURzd=$qAI$63VRvGJI?$4HbiScd~L?FK)K}6VM-tRGy7Xg zu;RO*|Ku6USYDG)Xrbi(mvVDYa+RwcXyS8{tv`R4&&>&I zqdX2v_6go6r~>=H%OsLVgLoQa!4$`Z+#$~J*whup`km(rriK)jr#3T(@5J-1G1NEW z3gEjJ;$&pde}e}y=R`t@vi?W4_*u$1L%Njy)DCE?$?z1(LMkS`B7k8HPhK_cu#ka9wa#fbAG9K|oh0pR&SYe=A^9~8&A z+r3qf|B_>~$A>W9wYnC}-<-#{Ugqz1No?nQ+dB}^=iyAh)K5Q3^;jZFztc-v2Y3Jv zmP^qUK1xLi>G4}+M_C!`EB*EW#@Pk%zeKeddc)wc*sCo6zI|VvV||6yxIY)=G`hw@ zoNwag-~AIlr^pu!F|W62g{VBjt*&2N^KJHQKAgn5AyX0iWe`2oKvKjD8D zUcrL@KmBcipDKcn(ydty>@PFtTWX6jKlUW(&kz3R@0m>0qyNU=hJFeCGTENsczRwG zFt09g1+B&a`<)Pu<38ZDhP-Y*C$hHm;q_JPs=O_e3iZcSm^dHwulUHwb{xTT@TT;xX5zY%{j(m^zWd-dQ2~;PYJQy(L9@0 zjQgv<)vxP0_7bi);169%O>lm(C<}4t6OD*tjrqbZMSwRRai+W)@Y|El;}-g_Fuv<|ZylyY_pjyo^uvJ(%05A@rW|XUou!mZ3zuvg^p^H8Ny=Ak0Ev>TX{y>~o0!Lp{(K_n-US zEH0jv`|FofEy8;l|DU`;;{ON}in#l$s)$c!adYDTfX5eQ@zE^qpOwJtKRx^(1Oz+} zcBNkj|6f-F`+Xh#{$ZA^px?iHczBrQ0Q~X+k0D#0Z2e^A5bB@h&Em;A{ty4^tN1AK zf47_U3;0#K7XRmcS^S&$|9A0s75D!z58&VN|Eu`_wY&q^89i<^)b+S7{rp8y5U%3? z7k8msAb;r)@-b9Y(C^;>8HU8|AHF)xE+4}GKS7>_PtX4!-R2j@d$#|5l)SiW z0sqhHyR0`K>@JKu%RIW-{snx!*=S;t)l#QXnZk`rTuwRZvk&n?KAXWW3})vtOf z)u^qM@0rT81{iN(RK8;k@&8O51WMrl@#r$d0|>P3tT6Zr@SM@QEgMVmJ~^%3aNjfe zJ9bXLFc@g-_Ec}Gy#s!aHQwp3Y=ob7eK-97{;8+*QB89%f4Qd&aQ+yv)2*-hkNhx?t0`?z#n-4w72Vg06i|i zx+;V@MP2~d-=?>0p&oc{w9ZX?N7U|s{in<6ABrQMQygUK+U!y)n;qcExQS#L=}&7k~%D&k=fT1N^84 zTk3Ef>~(Vj^h)H@9ks9F`3Yrdg7%^n_Dqm^|mXPoU-AV^*I3o>V3fH=lVkeKLP{cYW-SQlXpB4;-uSLccuY z`M+L%`76Z93;)9F6$9-x(-n1kJa&_b`3#Z2cs|uad+Qr}wSCN=u(>g_nRu2>?l0s% z5b^H*jK^~SJ$>HIKR}(L> zgazF`2$-)o8y}YaRg$9u`#YvF{eJkHV&8=Qb5Ia0kTJ$9UKfYZFC*#u-(q>^Rn47^Cr13=f&B#KFXIC+ zo&aF?uc_xiUkp6zeeZ|jkV+Y;Gp1RT!3$D$D4S6 zi6q>32G^May#r@}`zMclZU8v9XR2jOE&5%3G+GBVy`la~o~HWz=Kb{rc1g&G{v{tw zjrju?ca@sWppbdmDlDx<cM`& z7dG07&lmmetwqH12c|^u2}+vHg}IUkZ$uoJWAN**H(4X8b5E8upIEl`;d2M_o14Re zaPCQK^FRFb1%>ZV1b6BAu--`sV~jgsEsl@S|9*IQuO4r}RQ9Sy{Qs4j=e+rdA5t{< z;vmXbfAnW@@M*y(DGcPGJoR-gN`l9Gww`w|p1{d8c^_eXlGexiF#q87>Wjz_SFw5L z7bsd6+_n4zR|o2b}xs}eVBHrL{Wvp^R~u0_yr+ezhO~s zF~;j_kM(u(J}usG^Tl1T!?~Bw`VX9P4wUx}dtf=lazy;!wPAW|HF1Q%RLh&R2L%70 zmZ^1+LgzzK+MWB&g=X5JYg3Buw`OehZRUHFJaLAy_vt65fNGb=YUbgOi0?Gp@@Z!j z2YtZ7;2-qX#C^1%1@lVm#PKJUvl-gg0UP7^g0nO-kfwbi-PZ{_`V!Z+;qBOXC~Ho|)NPJ!9P^7s9WenG%h zZdzgC^GEv`_Yt^=FQMlvH71ITtUupiBFN_%b4(>HcXJ@3@q8#0JVyJB-><;#13Q&T z8YsqfQWNVJhDF?bt2J$%Sw$#qDeCZd& zx9I<$dL!;2{(m{@ZzaD1`F~af+E%%kN2c^pdyOf-6Y*=n3k`>TAi6^plZAhmNOcsbebZQ7l=xn)P1il{NAtT1_JGlVVpxss+cn zz_%rtxYBJ}Y+AQ-3DUrN#Mcx{N3HZ@koPgc~ zf1uLR0Slf}r=(usx`s68=eZ66ze8RH;7{-4OJZSvjK?w(Bva3t={g9UAGnRC>iM31 ztwGpfx0kmW1&LA!8jSpXKz6`B2frWl#186dMG56H)=AjUAA%h{&*e!fUaq5~bIJtY z3s@RBQkQc|%Or>k_3jx)y>&UyifQ=E0XGv^kEflF)s8e#zFyaY=bU!>yCeE@qwtra zUUWhcuwI^aK38TeYRC9cJpLoBC+%!1!+Mn`AAr3a_TfPHU-A01XpOU8_w`$`z9P;- zV=9I3a@J~BLL4s&Z~^xFsBSkt?R-*B&#*j_y{~RPWb1sjoAqLq=tqunD$RQ-SEy;s z2VG9Cv(y8QKQ^kzOAuD95qQ51L=5r}gQ5m}68u7g;UU(`e1f!8Gm+!=GQWk0TC%?Gfg4MSI1X(T_2YfuM8-dS;L-AQL|03Q~>5X~qHS~-3>H7o$4Me>WVg8{9=DB8$BF{3O zH=EhCiO&xvf;ygauusDL2|ht0sPhb_!nX;;nRD7t==1WW_j#c)S(5pF*}lxgaVaWe zz@ebOB9S`JqdVw46lG#UPFA8HYE~Q1i?L{e$1r;-tOrdSSevXw9Ay0I`lulLbv-kz zT+yXJV6fmm;O;)+?@7eV<@+x8i-A1i^6lYcJZ{dhnpm#6sL;xGnAfCRQ7@G@9amJ! z3>4b+C~rq}0sqfDcL&A~+N-s`j`zP2x8<;YTGSKJml5YV@SP!kuhqJGF(v4aR(_Ac z;8R%NWALxV`AWYK7kK}GrhzwucoI8Wyp;0!QFVRQkTaZ@fy6jbB8PdMLx|z|!2KJ; zd6de8r-9G2fe*m%5yGu_9@?!{lKFc}4G1Op9$6AXY_I0(tysrTJEI7c0DPiy+|#Wjn*)a#Duh|Mv1@h?~%b zaVo4Z7hrNMrd)r1KX9Wwi|Iz<|7x=rxE1hqu`tT@A(;pt z8?Qth8$BM%Y3H+o6?y^mtPOkN$BOIY+Qcc`-|E-DqrCNSE8k~2 zcEvo!`f}J!X0BgvDiiOmLOse_rkeE>@{Nu0y`rqnbDau>e0UDxhdW++hx3sIhJaJ} zec#N?!Cdr@werC`IFI+PT?u)p& z3;4g=%&3*t;5ev-8a^CQMh(K3ub_!S#QjJ&^m_m*nT`-roL`3ZagVFG&f1!qxv zbd>txrc5kMdE*mzShwRm@|<{hy&*F>OMUlu@{IkuJ{*kwIoDOAH1jI;POWQ|iPvYq z7v#Fui+C^8%by6V`ug>ABrKucF8riLVYvX;4s$);7Akv${XY0ZUlHaP=Z!{VSut=< ztDz^#>*d?}&hz_(V`>xodn#-*bDk=d-c9TCTE>fUGvr)xR0Upr+PT-;FY>ykEA9Sq z#5+&VO@_Jd$u$c&Y`w5m=ldjEv|8f8?yqe{_A}tV&0C)$o~~@Fu04WzWrut9%5lsy z@b3T*0CqNO3F5qyw+x&a_&?GwK<@%y7yC`h{zt%f#d-BM$xOXo7K|ocwg;z|Abx>0 z6teQTQ4mx<$I{-eoPtbDX&>O&#Je{q1`+Rle|dgEnWp31LL703z&A+Cc{&cBtU**h z@Qmy+1Etxg#5o_h-F28RpwAwOikv5GHdD@cCHPkT+GWnCCNuNq5cjXe`VZa|6a&tK znAa7`V`btR>ZNZ=j9-I!UoqveeP_Ha;ReXMgH|i_kE)4&wkvq(h=0ZP|Kavfj53;& z+(J3>*y@$+FWa^?G@{p#zzY^406JUq|9Q64@p!YM>$Tbh^bGQY1KnL2XTC)+|c^PL9{FQ?=R$AsI+z8SqoH1hptonG zv~V5?V;0T}a(2GU%Ke^V*f)s#7rS77{{Zj*m%#s30Q|)N<&KWSAK=-*so}r=<*PX8 z0xo_n?oYgxxIf%7yu|%6oM6?VKPkTV{rLM?N&KHUU=n^Tu=`bHasRCRWcdHemD%t6 zXt}?BA^yO+8f*j9PwxM}uBHwF42b^|S0?^HJTo&x{GWdP*>W%r0r=7%_=#t~W9XOQ z|A7Bt4_om6|KK{*E4F3V;Qv`XdqEQa{|^5C9smDuy=3_jS0(c)T#eUX(%gl7w96M? zkLPA_|E%;MxVQ`5Lbr3Wor(XWJ0gC;sv5R)82uFeSh?EoyL4Vn_Sh5X@?cypzuG=J z{tvu5xr@)s@>@Pi(*C&_f5hPf_~W=p;tzK3`Z)eL4)}YvzkQU<_NVLRN8$e2^Nb5S zjEc(YyRg&#MtJ~;|HDn7f|BDp+t2fXUjmQacrE_Vdi^;3ALtSA|H8r@;2}&S&@c1a ze({S&6Ybu_3$4KK0V7-!2LN%>aXs<><*?^dA};JbRCJq`fl`|>#m|AYJo zAC438+aCXGdG%1S?e*s*ooALh;`5o2_EELBAO|IL28 zj{l1`TM4dvG9s^me}3tq(BUz}_h0&`$!J)_W2@=U{g3qA{R~hI>As%3o)JR9CdT!j znV&XvAb!7l(IO*x0iEsPVCkXD2bKv%LE`#zG5PXch|2)CYefe?>Wa2xBLqDA50i2S}l+Rc595hQX%|oi07NY z$DnL(NnD{l#F*pojYEd#HJSRQRIt{D{aKY)c9@Ajr9CeuXosqKO$J{ScBF{^5lUq& z)lGYz$!50EU;Ob}4d^n?!<~n}AO7#Lq9G6b$mISV_}w-6Js4prhr(^xc{Gdr*4#aCBCxd zF2u1uc98al>I&J zAbnG%GRox|QO*e$fuHr4*h|4fs9I$#I!Zr%!%2?kaQ&j38yu9M*>L+P{q;k6R@aLM zz{~LE0sk+qn%*!yeJ;>mvo@X9&IOX5jWD?Ie&;J&Mtcw^0PEllJO&=Of%)sv{a+^j zFKKr~3l8-Jrld6;?0+sH6nYWYjgId1GLFDIIbSZ|F?tvJL3_>M9e;4t)jU)`AURf) zf~VrX6P|;x)0}(9TTFh$8*eOK&+Cj!+j7pJ-_*V~@*3MCwYLFQ9q`^`T7-OnX#apA zA1&0i%sfXaUs@rOA8>DA$e+I>T>sO5iskV+9--*Di`dbJg4=eozUJqTAK`u>rOv5r z*RhES*aec6^*29zi2Xvf$@x65$?_%2Oh#Npd!trn`3aA`6M|p=eI#bpr50bx-&Z*P z(^A?Mr_Rpl{)|d0HP8J;q@x-8DeOaoNrh5~iZ&<%^KO=^uffQkI zY8d@TXcZ7wA-C$7&meIgEo}8$iSN(2hrito8NWr2@OWsaM`2t5!%es7`1g+Hw;lpc z?uq>QEpFz&0*|B{c>eAJo5>Ua4)6PKOIN*kz|$s2tSiI=L%Tdl#OH5YQYD0YEuOYB zyM|@Pof`63?^p%d?J@W&be@1sT(Qaz{(wC3W0N1h3(9NL9z3`8#t8B!ACEt%`vb8&Uidw{|e&wvkzn%iSHX1-E@}u0JgDufcJK7n7I9UZ{57L88~e9#+Qp>FB|DFiL}FnTK(TDhTSglT8~6K zV2A07pxXnFO|GLI?=utcO!7Eklhup6#+{#YyZ2a|$DPYp-&yTxLq0y|@|F2GE?E92 ze|B+Kt_$4`aUg+joePMx17(y}tQ+vRzN2^s9vhrI*qfNNl4?giSr|L=qDUgG^q%em(5cwV?DK1+Y3#zgW8?To{Zy&fxuM4oeH zJ>Jth++{E9h?T*?QEzzT_;CyCv#DuUVjXaA*=}MzJLirT3FOaRb|8)f?5Z}a zjP-Pt%V08hlLr8rsJj3X)6Qb@04h)cl%ORdE`Vt_XaGXVZrX$C_kSApMmOw2#M9is zc_}sbxO1HKX815KV9>zp4T&bbp7)&#;y#ooL;Lk9=Y6wMi1pH2no=2;V5I5n3EDgD z_P$Zt_h$Q~z!KMY5l30DvRu|&n?U)>E7K~=E80ZFvlw^!lUJsA92)4GVY^49r;*Lz zv~%2M4HN^1*|{O8+g0t_o{hBs6})oq*L44>m(6RBz%IA>8+(vX3I1YmY_Y&TW-`lZ z;%9Dao{{TTOJg`my{c|bjZwP${U%DUmKmg7FY5RCD8ouDu^)0Wp7{V@;&TJQqu5VG z+k`g{-xFI^=CI&9n^CdE8AWLle#yzohP?@_NARnQNO7*8>O^3I>)#eNY-K&WwfP3> zfpxV_;Ku+blFDHBhadOMEbQ~J!;d;(|Au`Z0S<`IA&h1hpJ%>2^L8=Hk<4i5m*bUw z?Sawlc)#qO*|RV%rr;aV5<3_bPV1rl`Q>!50ui0bY-I?@2yS z4JXxHyni(I4$6mmsjk*}rx(*RGprv?n+oXlR;Puzp3jVG>Ud??>5%8<`2ARYV@Z@t zo|v1XWPUA5P1ST9*9->+mfx@fyg$4zG_ip5g4bZRpd5lYF~{F;&huILd<*n*>IqnH z;V+E%@5+MypiD&J_kY@%GZ$6(oqyLO#>Oj$^!VYdKS>-oi28E&$_nsI@EelCT1t0a zO20v#Dp~tbDc6(`n-(RzNWS)4U+db3Aaky`I z*vopHi3HB&x?oQRZqD;*J-!5ZV44O$LE!sh0OiYbnL}#^*xrqr_W`!|YzFm?_oXBG z%lO@Lmt<>)G!%_BQQ~pnZ9qTlQAel`h6E|i@`O{|&n(!J^U!YEggVE5D2esW{7&q< zME$&`C_GkEij{I!n@X}gnj~T#M|(|?$Bh0bN+I^^OjAp3677ig*7>EN3+Vm9D@W|? zcf|d(dz-ygZDu?A8Sr()8R31P{pj%p(EaS|aeaZ=WMch=k>9!j*Nyf?@_FA_A{bte z`ZTmMZUFLIwF(z4xL-0Y^w)5>RpI+l9{qdT<`#Gzwh8qL-(v-_jL*ra$50={l^gWy ziyTr1kK5JPH2(hHd+G*$_f1_#P)^J*ndsA;XO3Hnp5=MlEu**}{MqPB7}vlZ#3|f& z+F526CAM3WCy99(ygTK}VMK?kR4*}J3it@nSM_$0BN2|D3AIiiH~mwi>Nxsa>Pku& zuSEW+)d3&-S!zP9EoOb1?Ge^Tq%^&c&sQ@d>Ni=rXG%nUApb!(<3l7Xe;BP*Ex2Ay zDtcbyIv6fFzk(KEphSG1R?Z(*iyWYwSCb*il%~DZ1<7@Y^DgLFx>Qp!#CriAuTcW$ zQ`FlifzM3u=Xq6|;P0~B-_PevF-{NU0Q_!<>m%B=f%;O!AxWGcTN9Z%j+@tq-%yAb zp*;;;|BXf);#Xr`m}>QbU>w>Q6N_weSPL_eqkO^*I_3;(LhOnBsiS8k6}Uj>odH zSvO^Brw3X)@ZLyz7(8B=qqc*X?oNaBQ9=ER8799XuM=`C-YFKgMIk zWioTTXh-CmIG<$FQ$fy4HZgOFb}(O9z&e9`@d!A{awamv!^K#qN2Q0&r=eH+$7*%F zxbCpQa1!HRvQi!?pRf3C`{P#BEC-_aAAN`p+eVsKJwUxx{4Th#o9M{5xdk^;qh|*g$ zj`&v^_)MoUk7R;A$o=J`Q8V&N?Js}YI;aq54i2Vt{=#EWz&Y<+Nom8Jcfxr_Go=u_ z!^G!rtgYKLj{B^0vYqpVS30b4UQt5{#5qBplTD*`+5_DKrC3M69~~SFuE&1CXCIcJ z?^R7kBN6U5X5-3SLrt;ED#YPm#Q7tEc^Z0(S{vtj7EadJbKm#pt4yW_%-e<@uBYQp zgs(!oa9$0fo*pds&Z$Y(_i8BebzUZbH-fyD(2- z9pd^Siu_%QhlBh*4E=#p5K`b7ZZ8+@wg~n6JV9;Y`jr=*if}zn2~#=`wz@78<~n2b zdWQHM6UGgt!DO}Zx@GtLiCufAA=97uYZ=KVdyE~eXV3%DDZP+$KWQ$5GouHQM_ z?xTJY7NjG&!0j~zfXnJ_$q#swS^ngwEBAY_--2P467IbpiTh`H0L1OFo@&?QfFF1K z%l!V|Vf;0{*{YLl*bX%1?s-uf$*W`#xIkuSfg=@(<1u*qiI2jgv*$l5?teb)d4P+T ze^mT``uAL0zHB+OatQs2^^nD%ub0=C|C1jtG!YKN1#&Aqi_}f zPwrwn(_YDTCjO6Zy)ldbV?5O>_`BNge-Z!J>mzWrJvc7@t?_@>v!)@h#QXj4qa^YF zh4w`JE0mx0_M7DaXsEBicqaajX<+%a_&@#kuf_lQzE6VxgD+D^|9|u+$ye1BS2e5+7H~`Br5Ge5(i-`ZGR$7xc|o;Tfqx3^bWhp4=@-d`ri_tfz;eav1M_@{zJA@%!(< z?hJgr?K3xDn!brVf_s~BeW2}`XTrf3f%iA2TB<4EiA2)GV+3I=ME`$jAX32l9haqk z;{FXQOnJcLpJ_qI%i>^<^prkh6~xi|;1_FY_2=9TUIA#q6&*cG9}Nn^LGlEC7EF2g z-N~X@5%B*`>iKx0>Eb)lWHyY z#Z~I@H;~tTNmVG}X(@YjRh2o?xw7oho;HIh)RaEDy~Ysq0HrCe;=Fh*{tx&+FN^Dc zQv5%AJ^hH8*ND?50)`T$aK?D8a zBHBl0W+MIE_sC*EwPVW)#0|HSms^|03oKZ*KjH;9Weu3KOAl2kTF`9O3T@JLHlzUVg$c`Q}6 zwd&C!5Bz@4_rmUJsj7ec*5^u^Emh~=d|`&a7y73L^zyYIk6pxdS3r~u1b~ljpnvoF zssnMAI2ine*8*2S{QCU^Bg98S^?(vR# zX}|EC@B{rq-q`9|8j?>`@$Hqvk3{pRq_QusrzU7KULgx|Hj zTQ<<|-@SOz=X>B+|MH3HoqSJ@{~}y5vzO>CPiU;$DqBK}5QU2DTav$qMwT^w2@}IAa&GEh~ zsb_&Jqvho=@?WE!;*O3psL#Cc%)vAGJ>%$#@OrRD4(8+ep}#3eTXDSG@!xHXC(tq8 z@-x<7wFUZAX!;lBEt@t=Xzr&_IKUd)(7h5+i`z*x&`r1VV7(-ipfgst5e6YpP?Vq#1!|R zV}75`3&66C{Vn$KYAnos58P|8ABF$YSFG(qgvkpq}pCy%f0Pc7ie)Q;IB*Wmx~562(dMc0e3i37m(o%?Ly`h(Zv z|I~x8#sA3<90J~60evm^WAXf79S7k0`z?t7KQlaoeN=AM+Le(`;`=+>4aPIzAKF*1 zyyc9iq2|XAh7;|0zt5L!Xh6J=qt-5aL;d=ig2%qMiTHo(y!I~dZ?y{D=pQx4qdm8t z+0|ZueYo%#=(&|9+bh#}{`QwtWWpfBtUk?G4Yv$-X&JbmJi6 z2GlpEp#K2(pYz8iDEn5h&#ZN}zrS9tof0aXfiApU=5_O4$Pa$rDdYhzoFWm%X$45|6`%6*G(@J z-ZiX$NQghqyn%rM4LIs4=i@JhmT^Ay z{`jx!$SYX9e6hQv4R*T4GiOSgi(TO7!M6 z0yyX?XSMg)ZG69b%JvfNFH660q8s*XXR*z;f_^=#*Oq>tcEN3_)LzDIyfyQKbHs(; zOGge~fZRRaQb*~QZ|S97d}V1gPTqiFkogVaFP;n!1dunJ5_K;%Nq|z}<`)cO(FE-MScx-abZTy~^v;G8eerw?}*vn2i zZ#MXJK7fM6BD`*Ox=oME{k3~%_E_+I&o1U0ID&ivw>v0R^*tNkU%f|ze=*`;t`Qa3 zQ!B-v-?f8w(?{S3&GRNf7~uQ9=ll`)39#RusBfg5KdJUVO?x83dm4*TFW>uy4f8G9 zufQ)f0H@Dn;y1AUN8(RmzF6YY3}Ibg5bco}`X2|C_cHXGmO|4_yzi{ET57;`;#gy? zb@vh%!aF)%Jb-=#zeMP-F7QXd3tr;FG=}Gq2e9~Hdkyh_;{K3}7GoVNcy!@-Auhm+ zfeXMPHf>yjegu}9K>UOL|CDb0qsuHW01u|UR?|8Uvi(L!Gk)?Z(i-E!!Vma?OcQ@s z8Z&RuUkAKe)Hm$Wtzuxj68Sot=dQesegSu!VV<{6?3-czv|gm&`6*{GG=}=e`e1tu z@sNn3;!g)wQ{U3mn2u9v znyUMatHRhk?R=R@4LJRF*dym)PuySLn$hgMeYeR_wt3X_KW=g;;aLO6WWacm6dcoh1 z=PYscF7B0SkDrM|%-bRNrNV~osDG~#MBE4*pLt2oC(b$x(d&k*Sb0>wRbmT-T>bErMgk}^PJ9^J=A~9_5pod zTJg^r==EMtqLu6X!0cB$Snn+<##=`G*2~gyeO$bg*jB99zfqsJj2RJr+|YM!6j1-* zQx*xPhN|^d({p>iO1`7`)rZbee|a+!f<6RZ?juX{czx~E?fSk!Lw=2Hxi~IowV46- zE7@)~QZJiR<9ATsLLSz$x*T?hlwxXLv$){Du1)C2Cc%Tew!qmlk$ldBmauda`$NCY zF5~^KH9{BW)h_UxG8x`)Lwpa8m#AGr{E1{`tD>FH#eLJ$uWFE(FRlIjj$l~P`}>uQ z2Hpz4%W7ghnxKgC*eaHZeDBoZ8TfaC$5L1AU_H5q`%QeVoNn62_B@96WjlcmV&(A! zh*<0=qBJE?DypbUj7x#fKR-)-6YY!f%kPGr4C@1M^v3Cg1><=_QDARJyJyrWrQJ>* z4*DND5@pcp7`5O#u-(ReWT!^b-x#JFgzcxCb;`dxugiYHahc62z)>r)L*iJq_Ca^t|m1{arV_X1tS5>bC z?Tlfi@cfF&j_3LOOk!||% zj`Dhhi|wU;p{k0`-x(fo9OU-}!&lUyO7Pf03?lxt@`fLn*`8uY-%A$!Zao?fSy*mG z#P{X7r2D;7{0>7{!nj8He103H0>7jro})}G@Pg~WBjPdeakMYz--Yv<+N5$`IX|k| zDVwKW`U&UXcsv&Bf{fuYJa*V@HcE9msPhB-)?>I2`KE&*tZVxG9HAbQx_2LNHqMJ& z-w=Nv0h0N<;0x(~`aUIdFL1;1Dfu?t&owhL0zB)8v%g#FE{0xGSZFUS#(LkVjsbnY z;GBxzrnk%5)xA27>r1Hmype2*KV6J?-KwfNiqZa#hrcf@!Eq`x4;&Nm!4IyyoQryx zh#z~3ci?}jXR$7ybWU_1eq$_O`Q3 zP_ZuJy9A+*GU%7U1GwO{Ay7S!t)b|X)OVkNpEkb_9WX{-O!90@f1g!IZ02(>^v~-4 z^f%_4ZH#LWI5z;k@&)idAKvRSG3 zf2_p z`S2ZW7<{5Glq>BW$9xowO2GFq?!iOT^~ce;o%2>GBnVkOmB(2glQt&^#Ix-)jHg6= zdep(V|C+Qyw*yMY5);YF{myXr5uGn;2wz&mdDtP@47|=L3Ycg2L(detE%+`g)^)BY zhSpG;JZfKXuikF${fN7T^-BV=kai%X4GnRf8dHuxH<=4p%IO;P1=l^cG z$;5dZ>qGbRBIj=>ZYK9{l^Ujfycvrab*b4 z7huofdQxO{*iNIKCo|D!dF*xMiRO*Oz3l$jEvxLEL5j9!rJ$c)JR8sn8enQnZ8{R2EUVZ5@-`I_d9@%q7^6fR|4nz}j- z{K770mn3zu{SwJblMC%Aq8~vok^~#u!!Od`3w&8mrit?N7bRVv%P|Ph)5yaVwDmZT zyuhW5Hx-XhPOv?LVL@R(7*U0AF1`oVj(ltjyv?j6F97W)WcdNQgd(#bwXDSY{Oj=p z_QS5Uc=4i-#r;1G{6FjW?cK0Fyn2!ii0lT;@9H;i(#K5{tvhL zYU2Mj*cj`0IRL>dUQXN}+n?oGoSFDPp8GF||8K8HS|2y~1jO?*AM5{L|0UoMf|A8A zvgITGpGL#8JaE_iAfADa{{xuJ))#SC;`rC&t*~=?a!{Z7uzSJ19RB4C^-KI8@V`L( zpSbAtcsKq3Y4`k9_&?00|BnBo$1?6~wqEJ~&;FRjaf$!a{(LR&&vwrKezm<;)v!K^ z|Fhmd8UDX`@zwTmwXr|HkN;O(?dQo|98cFD(;w=$@&DK3PoTqP%bk@&=wH~!{aX0{ zMi}a|yjR+JeZOHIfaRb4?8a;Hf5rvK;{RFsari%Rf8Yp?KpXS4!@mu7WE4ju{*UUd zxF!yON5;6My&3HZJGONyGu`s z2avz&@kgF)jqAU4WxDk);QiW5Fa0C=0CgL-Xa$hobV1I2cuv36S$bd3 zr30`lEhhd?9F6$D*3pCb1VBE66?>N+T36#sdh5=3V86;x=DLjOnPKAKDOH+S$Nb5g zH`eyFEpaVB=yvzC!4KS^%=EOa0`G5=9`FBJ{GU9zXjxeqc>&aqvg_wn$#_7~=sNU| zN&IDTf7tICZ(@0S4f3$V-(TkebS?)T4!{4@?Q!BNKl$?5IqrK5)(M6Bci2=|x*hsi ziy98=`do>i+hM{%;R)gp@e$81UT3v`7xt{vm5s?vbsqFLzhKtwq$6?p4%&mhH#6Eu zzC(f36}bpJPnqBRZWuUjV}dm}Rkd4BZs;$hk~iOzG*$_@W|iN-~ai(?SA6ZeU5X_mq7m6ZQp!?cAUNN(30Olzi;awTj4-| zY!<>+@Ko>wL(bwd_(vX+e7+sc#V&2%&tD<#Zk42mdIE@}kY4^7KDT<~XTTr8^D8Qx zmk;y=>Rx^I4=x?Zb!pRk_p-jGCT?4szoWh8k$iEA_6nG}YPLuF0`Le)Dhkj}_!Unde|iYl7Ya?t^KPkas2+Y_BhL> z$)$1P=J#ikW8CjeT{ydf??YIqwd}Xb*VBK=eliv7Tg`TTIKJaK-XG4ifKS7C0!>Y{ zx1LSaj-AFnraB{z;~oKVr9u5%$L>C1AsT#Mxmb zZyC?~k8i|jAG}{U2AnI;RoG!$6UI0izC5s+_V9NE6?vc6SB<^<=l*u|V{I<8m;Je^ zCG$4-vqjdNbNas4_tsl{UN}=-$M?b?2KH)wf3xW0@c-+72fGRRvD|J-EU$}*|8u=2 zZcBY6i{G=~!i}ht{h2(!tp7j96V$H_3;4eQxXgAv9s%iI8}J^fv$Ghec#XYuW$8uu|MwlY7|wXw>sxj!(2{biYA%flhXYU=D8Q{kDPr|DV10kBaL$&qhZ>Bw)sfuGOgSYFBF_R|3u$#!ai( z*p|>FpRdH^CQ+ym4we`d-xM-xWK~*<30TY&Rw6VLTe+20`^LW}$P$Nh#2nR$1Q`T} zDz$}v#Ln#s#+4;OaV3T`f}wIS<1@^h`#cAaC96s7Ch7gYwZ8Jt%RX~{?Y-Z<_j}&w zdEfnZJMjPBcZGc1r>?(y(lfLZ`TtAh9}VqXS<~3q8p>_1ugfhiS?WcczAgwWyvQHb zjqh~e|GWO+r-Rss!`pU522c+^z>Y*zB>um&XbIx|bDIM;>t_Op-?!Q=R`LKsTZe%E z7dMAmEuWy&LR+s9mlwr<(SXYwk&a>^<2_t*EG z4HN_a_eK-Q6M($`5l!du*9L;jL*VTgZ)%|)6hz*F|5dEpa6sBdKke9<|1#pUDqBw_ zQ!?hMcTSItpxtZs7*VYY@?k?o-j4Q~ekEK={2%#SP6yixE5E#}`u-0@_^D63-blYF(jR8CehU6?;NrzkIOs>jb_s)5D~`BQ zkDWV395}Ev>n@i2jK_DA>`#)0QFT{Fkxz7*Nq`HRbuf%rn@N3e) z_rxLkJ?wrFxEJ;5#v;K~*Dc`!vZ^6HxMtl|gu;FbI@3;Snt}gx_ zKds{T!)3PPVTtX!x?hDq4n3wytJ_hQum2SJLQs#K?}dpgwVu-8w}U;Pz5qVgy2>f< z){t1Y(%oZs+K&e7D_7?kY1(!CF28m_z`kZ{*OCW7{NCgPfDk|)0Jb-&GWh_Q&&UG+ z4FEggWLY62R?bhs@)r1zRg+bt20~x!ZRZ&pV9xNf0l{!Z>sv*0^WbHD&t?x z$SC4@6nvL)okDsC#ayoxrx{-@iD46`a@qvb&XUBaiBF9+)p{o22h?RJaK`#FpFY+~ zoXIfWiP3NCkZleg4}izYb^fb+JT($e_TQazGMn>_zF_rOA zSpV($PS)E=zt2abGNFCa(f{2hdL71w<3D zGvEi+H8UT%Mc3h%1%3xVJD=yN_O$T5uI#SbLOc^NCH4iNUlaxkj?3lFAnlU4F2(p> zc#jaT6U#8Wu0M9KbvQa8(0`YX<0Vpc)|3bIjxw@b8w?}V^iWr|# zqIZn#`oaUB7CGMQLLwx1I`UG5{bIe%-&zmp5C*0jfFln)`Q%>OH$G4DWy)CWb&d8- zE54%^>>B^wv}^o3>eB3o&9xrPH^gP%^RwI&Q_HaqxFXFh2_CmNVrSml@+u*3UR$nl0D{iy&>3T*dHR*|0wI%3O*B$KlIR>0_AYG zCB$}Xm2~sI@u@4tJbrQ0H%?IYJY5E!$!Ww#PZt$I&ZZ{sXux~#dHBLbwrgKllqiD% zt9hPHumV4ss3Re-%{%BZ-m3d|0U+{2Tr6#{luY)Koq@-->p(@HP?}%@}DTg zlcL?-GWh|L;qejgpWUtWaNR-P!~0n-4oFz%UvcG?loVs!RV2PKGQ#;=h=^(G4eU*{ zJ9y4&->2D5U)pss&VE>S*f90F{rY30Tp#YWsVd)JOZN%1Zw}{Kt?aj0lIsAZ7C^fq zUkCJiCHliq6y)uLJ)(3w&cROHvwKzfH6XCC2jK^ztlGG)5_muUK1z}YfaSl+j6* z2W>X;gdP0`>^kr#<#(HjpASS6Dsl1PfMYrNxqmx5T*doaW$Y6UY154n+UFKQ#yF?l zsGB&y#d0*n^0@Z8oDGS*fwp?s$CLZ)R_^CCXGmjwKf`dKeyHa@YZ1%p&*u|--@BMM zAF{Eg)|0{Q`J8=Ea6g_`T#2Z#n9_6Mq0N-%kfAYi-a;OI&BTe3W}x#G)H@uJ1F$Du zRa+FyGsv%h&?}t(F2s&MsnMj=Wf_?T= zf3_0i&yh4#j6d+H_M~W^Nd^8|eqR;A(XbL_zmiI^{cxMeCs1a;a({w;wR?*3{-H!7 zLOb*u>bXZLn?1E2&R24zFN^ptZJ6I&ITkJ8SvTpQ-`!)59DF+b<6-$;c!pav+WaY=J_@|-h=kQA^d*Y)l@xqA__f9CQm`%alG~ICg!IYgTX#gfqVgyvYYMK z8XK8qIsC6N?0bWCzOz%NjDxqxb)kH8WHbBU(mt(GW;rB`t4^0K_LeUj`4$8uI^uUy zblRxqaryYc73O-XhOyp)R~bLo%;&E-eo|w9qQ0ZFf6gU$n|$5SN!nqiU(E8G%52(S zFw9Mf4mIUXe1W~*i3+4IUzEZ1KduB`3B3N}$N&Grxc`|OasR|ojn|ELh*QHaSM_21 zzp5&OkMBji;3CYw%>Q4F4;|0>xff;n z3p2cdTP1PN6)TF1MehQR{vTz19hw(s?KSU<`vLzqjE~0u*C7wG&qF)|u;p6f{#77y z64xTGf8%}&_vL%Qjrk$`pY_Y&$?$8jKgw_5q0Cc%GyXqh;=;uL;oe;Q%kcle0dEj_ z>#A?y%s1lA*?t+kGb8_Zi~qm1|A}8i?JOC5e*ynTo`v`0|C#q6_?1q-B>OqjUyT0; zjQ~7?58?m%4ZZL5Qcp8wZxB2K{N3o68~8u(dqdCv>+pZ-+pYBW-{K}jcGI;N;asmH0j12zI@`9ePt67VU;4`@5&3OQj20+c^v0umouxN1*{&3nVyMW_ctaf_|cmP^F*37csB5FLZxA&+* z=?KV>*A8s6As!6!;mZl31UP<|L$VR~cLW51c>lu>N2KkzPco+ElUE=JN0E=eNj;@E$5>cFz$sUY+J`~3%f zc4-jKiM;|FA|OE#5%+|r;Vdw?i-Ihe>ULmHM!kJn)v?@#Ru+P2fqy9 z$vZUU`^lP2VO_jhF+M(yyf{}Y+S&{orK;L3^}tzrdZe|$_mN-8;$&GGLPRIlf5W$D zG5GeCp4mV8Bg)xJ7cUmVkIH$p9eC?OBo1QUUITv2F5suefFuzA$Np9DqryLX?CxXy zK1w96U88@sdvyu?`S7>F@k+m&f&d%(bC7PfgZ8)%hd%v1wYB$}e!o$p+*t^_uI2Ih z0mdN>_sgcg$rlM&CcWA2Tm;4tr@fwxHW5cf((R?hbuVlAz;)MG*3QMRQ_7{U%0s|) z=bknSiBn~N=d=Gz|K)e?k%E-n`8_|$-PTaEBdzS`^+*1s{V4D2JNbB<7y0r3X5*G> z;>7c3dOyvwYi zS7)&^!uUzuocs+nAsGca40^-@tQs z&w74>`z>DVa*<-TwU#%I*{$IUbbqO&mEbcH{J40QfbF7R?+H($okOAqEkgeOZ@j3p-sgnQ6Ttu7 z_m{68!F82)95YO z&C`$Q#Lq?V7m#Nj`2JKM+8cZjLvga~9FP!Kvc9rPUGqJ@=cSIj1AJa2Fa{jEsPfwN zH%-6eVA_lC5cucA3;WM@$NuFle$Sjt8$L>(p#%%@T~dg5>}@UO`^Cmzm)IT`Tf)Hq zCo1-CAN7%zEpnqe0*L2@qgye{=!QQ z+)ruI0{)Nh5;Jct-8176&R_oV z=osVwqY)r9kd|7F9|?;n_l{jpQZ5zN9E^hh*>n7L zGynf8XMQQ{v7NbgyPfumr?g9!55SU4 z?@fIRIQ-6LFg}U*&khI$w1?&nu2{+Iq~&+U`1_iM4ZXZ>TFA;}UV<**J}gI1SxsI+ zzg>vn{hFIQ_J?_0YR$9MURIhJFyh8bU)NL+uNasIPvax8Zj`2o8hG~@jD zv6nkb7PeLBuQ4_7lgmVk-vuihW>76E^)8%nJD7l z;V&yKck=m{b^URcJrBS4?gadcKRPnd$8}Cs^ASe}KW2Ww+%MjG=5G;4@(SW3jO$n7 zcNy&q!mj}TrQETc_<;3L0C{(_-H&gLpXGfmmN(6KfBTQ86MXMbRFEjY*Aaq$Y65;! zo1N$X`#0<7`8;Dl6*w=&)bv+~t6zV-1!y_m1A(24t1ovJ+v#WDJl`8(J#4lIF0vgg z?Hc?l+3vfu?i31f-OTkQ;_|RR0~~d%mlEzRqW|mc_^Fra4;)Avrw}JtX3VLDxDVbx zaF*{SUjF-0o^J_hO?)4#RR(^9=c@gy+tJP!m2rOqp3@)J##mO=@_y)vd$z|3zS}zF z8!r{kW1Sg3UZ|WufOQWa5|oPiTg_kbSOl>dD#Du^k1?bhGDUoWdOb_&9VWWM}{AOc7&sn{@7r?a+!HR2Xqa; z!%qyriSbfa-REQb?b7MLLfn~9s%4`;T1652zhYf@FV)3$1mpJ@+hwa?ljz@yr)MtS_6^=(j_D(CJ7!{elj`?jSy1RW*Fj^yl4KV#ax{R_8`|-I#9+aB}z?Z4&r$ zuey#Zv(O{>S*KDy`rY3+k$Rhc*|e{5jK`g^_@mVS&|nDrz9Rm0SQU6Ys6{NqpW>Iw z%h{ev&v%B1FTdStac~@Vo(uuUFLb9A*~~8z%W|h!jt5S?M|^sXB$)Q6Do-ybewpud zSjk^aNLwFf`K%Cmk+R@BIj}bi-TH;b3w+Lct-6}yp}IB={t@ysrBd@8|6l*wm^mMK z=0^HhuBvK@OjN*5P~)b5)JQWP?X;`Su9)~>t!}dxp{z)vg}7H*A2;)&Dp)93R&{Nh zaomV!HuDQ9Y2A$P4$Ct5g3*eSReNR&asA8Y{vQ(++mOMG{h3Do1Nvi)IPpK~7xy^@ zE?re^@&ZPyh9jIursDgaXh8d=j8q}#gBHE7mG(kQ-+dB~S9zMw5)ZAaeyf#!O`D9k zbzB$DQ@{@bE*cjlwo86q$>KAx*s}7cCMlcV^L?G;3+Uwz_Cq3J=o}9YMU~8Pk#DhZ zd@HIFApchwh@gGfSN`D7@-*5({!j>|)2^c4w1@5GKZ*S+Adzoh<@*e;IzG&HiDCmY z>VYL-0DnY&?}K?b5(@FTW5C0yAA3?M=M^~gmg8!$iTj%DEqfrp*unQYWU--rUUeNqB0K7{Wb@+wz;&cmGT%#8C5(5h zbCEFcm(vw85(%(h2As^p3w*o3e3s8Slr(k|XGgbG^SGted3YUo2odnWVC`1S>#?1z zhoB3s(GTM1I$a9#Sx|4m|A|B^(68~d$rlhx42Acx+PX`qp9wu0rQR7|U!}6&N*n_0 z>m2urqBW*eN-bGty=QhjPW}MK6WSZ&OVP&)aeqm1LjQ0)-8;kj0B(?2KTRKR;(2x> z1$=ABB|6H{UrXFAn;$~EGS1x7%=JpMF0_x+$@Tgw_MvG^@c1K5KJa9a&!AsnKUesV zjytHYYFg^$`^%EhL_O#zfF464%L>Lf_(&s$&f|(K@8^3bZI(gS6Zt-L^E_QgyMQM! z;4CV_eI}b~k#_{|i}z+bNqP(B&%I@1t;F?#gJDAe;xurd0k<*Z9MO-RE<+XszK@~X zHgO)6EbYL@zFh|1R{__H5ySZ;=W7*)FXec3HR6OZZo2!SC&2Sks*~ljr@xHx!FW=q zo&5kpfT<@TX>8^ypO{U|=bt-sUGSl|a-<$lk;NiX8o4PTWh5l2ml zZ4}WSnRxc!Om1t=cEdeZMTzYod|?NR*PK zVZK@Ewpwgh57sf>#AmLvlJoPl7YDamt;ETP%PoV%(YqxP;};l1p4*U$c>iJNoyb!F{QgJ8TY+oK(>B_5K0^+29@wHsBb+bgSWOP+ z&+=t=e6J8Pw7F^v>|d8(R=R0N=EWBBWQcFPah&yPYPfE`zwR@n3|{-oB;N!3+}IXm zDeQWbX9dBGJD2?6$-Ls~_gezAyI*UV+0U}2wHft8ygBeP)-Q$)ohS`;!bf{D9GS-c z^xrPi<0-_KWBy1RC%Ha^r{3!zeh<1K#^+V!tua!}_mBM&j4QZa+o5TUFHdXw9Lg>^ zp4v?re!AL}n4hL-$LXK!So1Zq%c}fbFa*mJY5vo^&tPC9E@uo8vlc z$QssntVfcjvfb{ho`ao*{aR;@Fl9;&n{sYIKg!>c$2K-m(NGo!A2J7JMUgv*-#dZp zv!8xCb3FmQ0FOfwsV8%@3;YAv!9o;zfN^QzdNJE=&7u55p&jc`C-%$fkPFdYdoIkU z*+1j(zi^%~(oxesS10*Cr(M$FgVJw``+wB+#QlLYFaEfA|E=f!I`}`#RD;)*=jX%w z)aivCW@PY0p?R;@n4f<xuu<4@vxg7y(|$ z3s^b4Y}Kk;>to{o$YYv${t$3i@HQ4_aIIY6S&U=O;Gns{rHNy*oeko%J8#DS7cKf# z_|eFgY1fD4&hA)9>w z`gtF&6E~ilyQ`)_4AC!5z8@uimv61#$1VR?;s3ua+n^(OxnMA~!4Lkod>|~eBaZ*vf!0Hkd>8O~V{RDv^sgOAYa;RhoI4N> z6`4}bwOWYht0$5U%4zMSR02G{RS5SnzTfF^fCq5fbC!f?{lZIlZb8mQ;{J2TRp*mO zaRhnxo;;fOTw~J(D=dJ~U@LmpX~l*1j9@dy)5g*>0bYIOy0L2I5A6<34uf z8p|W2-@JozK-w1}jxRsb+(i6ebzU-fed1)QI|^J+(i)FOalA|IFPZeV*Ej{|r+MDF zbYKO4f4xh6l(_QGpUGO1yQ{rs)KKr|dCU7gjoGT9=3=caox4q}d!$1^p8BCW<2Ip{ z@#$fu@IK1@z0v1*-S|b#f%w@vPf5N)sh`*u1W%x@*!>lQ_i1dpewKdbnKv7^GXM4L z;$^d4c>nTZd#DRIcxc?H713@p#-(B6{l?q^-oNDwdB|@J9Aw!d;QW)`P=V#MQ;7S= zI9WDz;Cyg<=XULUkn#H)Kf&w%G4D_3iPx{)@Q?UitgHIO+5-CVUY;{(yd&?cZ8jdW1ZHqZ8@9Y|p=b^r%jpFcx{Ym;QjK z8XMBI>!Y`Y&(iPG-?Qwvd7UNv7~6AB{lY$8*Ru2YcH;L_U)t~F@gEr~-lx6hCu-zn z{{HYI^TMZH@!`wf0KapxtVKoiQ>I1=ql|Csu>a^xJIYnzBH;T)l_iRrWL|;|NXW|H@BWf8%=T3~)%VE92n&Hp z^hSj^)}R&P{zZ};;r-o^#OOs@5Z)F8Uqcskh3BinZo(e4o58yO0SR z`CQ%HPjo>_{$G?2U?F~X0nfjI|F?7BtSaLFrhR-<{(ssJ8T_B)ocu$^|Kl^m#Q)cB z*tjwKBXIxqnAb4BbOG1@a#htq$t)ivu8-rGSa2NvRp2ExMW(%11U?ey8~!dyHBupd zpP6TV(9^E+VnJa1f2Y(Yqo3=nS^Fd~fg&VOTr35j@ra@LRf zzw4|Z0$2C8jfwhI78=yAoB`@(l4ZGM`?oc8q1HpV9zK1-*Y@{JBRi5lJSnl>-Ycc=o@axcO!#- z%2VpQpW$=j-Zq(hgSlaSDbDjg>Ik@VckQj&reE)+T`-lHew6Ejk$$`}cbD0p8y=ceZ{;_iUgT}ZbuziB}_J<9uxD}4_5 zsays3mI8l=XTo8Z=$8zMQH^+8d5`L>$91wGb<tlxwN%Tkd zBLODb*WG2cV!UL#g+Ol$*P%_9pGV%AS6$7C(D*t?>!(V;N54usG4C+_D;{Hp{>B2q zna}%pHSKIW_Al5ytAMwLyukYWWlCfGI^G-kCdEh(+5!6lXlY(oUVabo+a>Ov(UEn0 z?%1}}Zaxp`hz%aMT9tCPtL(f(mV;tVDpi7gG$y@B-v>Yc(IDb<#T)*AtbdlZ!2gd1 zF}+#OGampF0gw-X?%jBEUI5SlFh8wylPA8?z0!^I5x=v9S^t9H zx%W2e)mT9k{ww%hk2FQhc&SiGqn|LlM1r3VypYvTC+MHstQ(u?pEHaBJN<8R&}#Zc z!|4R#jP{mY_V^6?&5V)m7~^}sn)=IahautaMEpPEs|M0qh6iB!_oVSt^p9F3Wq^J? zrDqs%KlJmpqJAR$bYVZsz^#GT5l>sdoj^M?^M^~iG0Nk}uM0d5enBnZpd6lUL4J1l z@5BXOLV9k5c?n!rr`1LrX}IdETUZZt8{$wqT?jV?t`Gi*Itv^PxSX-6ns}NNK7Nqx zwyC;$o_d~DoOhh#2fS3^eBh0K^X)N?2Su3}p`Kc8`)4Wd8@F251785Y75bX(mip2y z?1%AI5#s~?-rh)}9rH;~e~BVuz3h&??C1Csk=Lgl`eu>(4{{vf^KvJzKZU@mdfYFx zRW zs2AsPzpoavy}(}?1D@ydi=xK%?7@Zu4YgDZ9?yzh-pu?-`_Y_FtbD`rW5#e4gJgzB`2bAgo*F{Ukv^zeOuz(vExizPhN%yl!?j z9^-XkH3_|lR)98zcz?tV3R)xA3Ffh;-VW#GLtk?+Keuk>bqTSnqX_pCr2n~vCza8UEUiN!3VtO?|WIF zSc!u5WTN8lrF}t`?RHBm-#;W8m#8PcbRYUR#~s^NH_mpk6m5N+_YFwOx7cse05%H4 z`$OMNy~qAJz)k9buSY}XylRBeo}DhaE9T>KrIFd){60yim2To)N_@L_poV3Ib6pT@CeNzc6SHwV80D)m&m3`0`vxrJ#gy2sA+F0?=ZzlP4^pxr#CD1% z(gT!V9ldVi{2@_nM;xr{aQBqP^{F@FmndzRi1-{a89&8xJk>wKa%f;7{k0a!p=KS%uOUNL&Q5AtJ;t%>GqeVb2W)5s{hDxD+>b!tUUj{hOWqCRctc~9n$@8a zhZj!;!nC_uYHN{?2m2)1Y_O{^4wH`(|8#A7_6h7?0ei@h1xm1D2FM49%krH(UkXH^ zkKZm^E<7oahd5e0QZ)fQ*3m&88SFLP13dUu*I@98Nsd=ro&)nE@!xXDs}-$V$ASMY zao+*IYaz}n=w18QeBTzYHdv4EjpiTqVLb(J^|+G5^>TcC%+Kpf*Mv(cAJTO{>(LYr zqkhN}poc~Bev`>aJMn!(8^^eU{U_LMe9ml%0^T9={QvB%X|D%UT}}KwY_a$$we;oM z8~g#p-Ag*+?icozC!P$LWSV$#?5jqYa!>cPMv1VR`}sZ5Uy_e3p|7|i1FA~CYriU4 zDQla;p{v0Eb$vN_gut_R8xnaG(@J@fS)NmDoF8@@0@h3Lu;ow)xU=izT?@P~>kAodO;N;*r2di=-v2cZg>yD4_ma zYV2$|w zrI+8?&i>kBB;)KKRh>5Z8|j!7=l%jP-)y|DH|jU@f&~>R2iLm_eqcu#{0ymMIi=#T zS~$-)>QV>iS!tYc``~GWrBd<&Bux}ye{gmc;soyg^0;`Ki!Pnzn`gsvMs)?_)?ov^&~W3k0}c8Av!Z zf%geXVbwfel0Fl~bDV;N{z4uei{%)P*CNpl`_-4e+sg86pHs?l<2{5@+8HiM)YE*= z<;Y*b^=8kU)8rdq-EAOm(pb~i&;DskTxf<}ULoSeIG+8Yq)xanui$S8dQ3fFJ!L2k z?HLLGunf59eJO$e`0M2fApXC2k;QT=uK#h%9~b{0^6vGbdiwk4mlKcv@!-si_&#nc zGs;L2ymYoxb?73ypQjHltli2n9Yc9T-e`$`2Q@3+Qk0> zhx{Z{kBlV#4?OZi_&@QE3|?j8|M|#o+Dw1mLjHg99oXLZ{!nhl{}~T`E8d;S|IhgU zUxxn^ugl<^8R-S?iTkS+^#9?nqOG{C1Ai3U2iQ<{uc88bNv0HcK*-d{|h{h4E~>yY|sDPJ^&4MYfU|G zVE$-~|BT+BAAp<^i~MKY);*@jl3R0Q`~?aHM*x9(~;MZyW#r zO>zGPyx%A{CE_SD?fW0)e=Yu>;Q?eM`2ZH+^6&Ejx^LwJoBqGzk{F5wOLIQCAYX?HDOKphrf42W{ypQJ#YRbg<15!--0^;zk)|zI<@mm0c zl>pcOOAy-5aNMT|sjs`C!d{7RSr=C@b_d8d2PZ9r*^}hMS7hk&VskZFbY}=9lzX|aWwp~{%dV3qAuum)h zIB6`+-FCX-_NRLW-8eq`vvhJLzB4Q{Kc71fK0wv*@e=Oy-Y-d^pCJEpVZUMQe@U#{ zWV7ZULwqmyxjpt$ea-OjPa(0NJ^ba9*!O|+;v~MmU&0@8m+yY}yYQD5GOx}C+Qs?k zIO3IvGdI7#t$@kpt};UI3QH8i#Gd%UPnh99xe{g^%$r5(M>Y3nfUY2?MCKUbUX zIldnDTgRi~z2pb<$Vw}}lUh6@#{c1-sOazM(T3n(n?2mUS^(ZySS(@R>Gqmlz2&kS z`QHuS&k&biRQcxP$G|dKU-@~X`CoviR(8gev+eNnzMa>Ky#MPfBaYnt#PzRC+?Ryj z)$M+9;4<;(`;uBw)C)X6d{SmSzjjuAn&UM8ryC8o3^=Ipe zgTFkWUM1fAdR5XOj%~bnJkJYUUtMjC5*H2JeXKqgIP~%zdcmX@c>KNNeSH7d4C=Z6(qo(0p2=%39%4I9bsa9J zG%mb3&-*_JMFEch`$0Xpk>h#yR~}x;cIe-)OtD=qT%3CpIBShJ7P!FsF7MF)+`N9x zn&WK$Wm6?;?l!S*`S;Hi@ce<~bsuqjr1yg!AwTubCY|5kdbFj1`j%JR4Zl!P<+&YE zjr|mtouiZ9b(IYbO)==HTi#!s&vw-3KmQi`sq%r+t7e>W@Ayvi3fixB(`D+NLvf5# zuS;bmm;Jdt*@A2h>nqFU`%zw3d2KAAQ*W^ilQEx&>%kl_u07l0ENcmc@sf%jUp_;#ZUJQx{&86Lm_ z{%@pi&i{}30p~C91&9aCV?iE5f0p9|V?E|8s7=>`{1~`?&4=;*qMAZ}4;ZG@4AdKO z{+NdfaU8E}S&#V%MeqZVH{N4N#Pts!?{uPnYw{eiTN&NrFzo^MaL5bqy*K81Z#u2x8E?ky#+$}Zb&-2bf2 z-d65z8}ceWs(|^vEw!)B3jDmSI-LOipS#Oui#&tby-h1z9SH>Ydbc7melg~n>b$U&witNa%Z;tFRC8&F^>O}gRhw5Qn5Sj9DgH^ zi>1itUbF0W-#ftZD;q*vf!7i*S@vMC4T$wWp2`V==QWIViFokV>F|kj2f*{Hs^08w zE390GfMZi0|-wZujgKy+>Te=pE&S@K1F_yCw_ar|Z>9JLn&H z`VU{zC*Tj*RC^im$MD-EO7EnDD=lP>Q2*(OB-csG)PEyL2qx(4i{2k5kE5n~& z=v1I5?pbvl`-s%nlpwqgh0j3mkG5?`JixU(W`=AY@d*AB+6Z@-X7C;I|X*TtTU| zBtjE7uEG(?GSZ87P}&p){=!bzF{=%@9`-dw!fN^*t9>=Kl!mc-iuI}9;_<-mh>apCHnK4W7pxY1Kzr#@CA;O+W9naO62kIM8^stbDeQB-g;0{`%S&K zhCkB){hWPT03KLa=^06n(eM7qwzK z-v6Po_K?}H(NL6f%-iH)zup~+UZDP$=PS?hc&pR^R0?^@?&O)(nITQ9r>U>Ft;|%GJD8oIe=fT!ib@ zIb*U2>vmjExAJ_rnK4cg2aJIBj6X730YB$JIzqpwa&7_FNB?8L1ssp-@UP;y5NdtKc za@?uoB@WtWx%qGJI8)b9X$xpgBKlL*(ndY%7gmCfLP(@z_p`o+Loz7!aNNWC8T08# zJ^j{(x_mv3r`}DNcAg{$!Sk6wJYgb1J)4@E!uu_8cPr$9V1JZwK<4?9)e0VHQDs%X z+{O0RKr|w5?4L=@v)!U%2;+(SRrKc-LaN~-HrDrqe%Zru-Y!Tge=jMqoBd)$4#laT zGjEC(wnKM3-p=2jR>MVKJO^ zd;ifr`FZuQ%T*%<{m5}cO<~tgfWM;aY@ZjAr;PK#JoK6E5|d$pLHg2Z@Le#z6`K~N zl+uW|UBKIjw-`I$#<~xj?b7jYvaHQN5NE#+l-gi7K=1T14g9P!u}A=p+3AWMb_%q6 z3`Hy=4^LHO=;diwPL>dEzKEhv|BdfseaAR9+u?t@B<`?*ZgHBCgmiSg@XFyGM<558ory(F=P4 ze716qSL7`^;>0|Eq%3sdp*I__4hn+O&G{)TIn4Dz$~oD~_3;gT2H%qt6|LVsV$Qd= zrPH`C?1yW53+?q-@RUJ2xZ~|)3+)OizQ^PtNTVLiSKv968XCrD*%h?%| zM`~%c!mdGld7SyxkGT9&9P{20%+v8C?XUrx4g4?gEZQwL&XZ1|z+5N3Q()c7d8lD* zzMAvQ{r3-;c|)+wUg5Z|s@inIoQInCjGxBumLD5Wa=vQXQU$wqVZLIys;a+)>r08< zg89GG^~2x48_(HW)|80$(msW2w7nDahTP%zoAYao>k914l!SR7@#eF%b2{ON(QrN1 zS6P-=mcmCuSchP*$)-PKQeF<3e@K=Gr)W*S-~@)9c{=Q2ddp_h{5^{Gj>nb#%AJ&| zbhLmH_F#f?PF30_Dp2lC;QJT6x>jkP`V>C#vP2mNjgaeCiD1Jzc7^+h;XT2x*2NI@ zZ`PyZ`B?9uD4D!iQQi*|1NSXJ`%7k7l2C@<41csw@R?`-hM}pz14M`AVkz@$i2^$h_}=lzZzI-lM)o z!{0~Z|G@pxjamjz%+!zge+vCb{QoCEdHu(kdSs-D|Kq~U^M|}<-uXot9E$iq;Qy=) z4*J1)!2eBr_JjEU3Nw!WR=hh93@{$S5;*X+HpZdfz?pBv|Fb_bxPM0e?}Y!e{+V{= zeieX~7iVx<;`}BL;)A^Z(Vgt)%&=k+)8I82fcvH52F|JT_EAQ$of z%W$KN-sd9D3vPW&2LI2<|A;?-82{e}zj7Awdr0B}^h2XRP5-uzaa{}^0NlD8e?cCA zof0+}W*z|ecaaCc%yYkp_&@Un1mUOtCHnzjfAo-_{_x*qKY-sB{{P#-{quqM3%fu! z{S~;s**@6+0Qf%|I)l&u|0R((-pre3@&T|f0R2N*vTW@B(lirNwf)k5a+~lhA*}A4w>CVYdi89zmRH5c=*chDU&Sy=Bp1;`vHE9xr+B zw&yMxN$dmQZvG_hOZ;CH{AS$$azWBcUOIO`l1hU-zfBUt%-?@ckD?IYUybv>@RA%{ z3&W3j`o9&*v3wE7YfFoyFTUh%UeWmy^7fw#3W2o`QCjxw@q7{I55At7Wt{$&s^7)+ z=Yp^N`{U>N`=8FH;w)E>jlmCnF1Y0lJxts`l{T7z_qTbJ!a~aDMT?dD5R|LK9^(Ir zP^{+Kfk0b8xyM=Z93r{T#bU&BZGk7TAHn%x{;K0f$y33$9Xqx*3A+j_8yg?mO!+(p zhydJw=G`i^>(z?s>Z&y*PvQIcV2O46b7#CIRtxqoI2vq<=AeGw<`FdTcH|#er9|{& zFUf5d>xvgmY1!~Ql*=$79(xJ%2pZ(rOJ{)ZR&9X4(CuHl0e%S+KZIW=#|;?DS_Hco zxW*vAdnCEbNxTpJ0{m}Xlz16sI;s56>lTI z=PaRVm3~qCs#(Ny0pA`Oy+}WLX?N31@vcI*(tWsuIFo+v)CuCnjZM*a;HRwVQ0EZe zy}q)!S&p>BpZTRnr-1k8xFbaaS9v_0A8$JYoGBLTs^E3y-74b8#k!{O$w}hTfv~S- z2=Zi~@*dA0G)^Lq3iA5DGjI>_@9=y}6nTfy4z36J`$PdeH;~UoF6w+eS?i2TM4z_lK%VtXX!)!_zwceJ!5(&R$`&+IOF3h~s#dxrBM?=B}F zpuW=L|3p4xfT$fA|hqiUxBe5MEa>U2uVkC}ud+huA`FM(cJvGFO4;cZ{X0c)v!iCCU3d zsntczdT*(Y&|mh**(Bo8Ca}M>EbzEx`OHs=FGecwnBqJmfBgq4?^o9O)_b|z)>j_Y z26`BWmDBprThxQ`K*f{v8+tD7H~rXpY@fmN|G_uD=nS44&yP1Tf9>;a-+;fV&^@!Y z5nu0!TPhsEKH$i^J&`i~)B)LvINZ~&sdxvzk0vS}{`yxt>fyIgm*$80Uj3`>4iPfh z(Eo2PvAdCv>tvHe!LO>Kv{=gDmlnv(c>To^ z_`W%BQ!@XgDe=#OT>QSg!528=MLu>#{b2saJZb)>GR ze7S=Du4{~Yv8t@Ek+EO$8E->f;OOhaT_{H{)@~BP2WX0SJBPpznKK4L++U@pCG4-q zyjrXd#3+@pb5*;yux9vqb$$rvJDvCRAfNuOu3WoQhP|I<&kD)F&vz<8WQxRy7#!Ss z4t%hFtt*T1_48w63Fg^4>kr)lS?7I5{4~p*_zYp3zoWUSh@Dw6>9cL*NqI(gVSKHxYyq!=^TWvHu#MyO z-Nf0byLo-(gS%%_X!jcD{?-unXSBDnW$J*r&iud3+xp1ocKOahcI{idh;iJrJ+lAW zvkf(yYHF|!U9I@c3l}u-IuJ)1H#2dfzy06=xU0YVf5V;tt~6TxvqFr66G8v==uYJI zEH6AeZY_^moT4`mNPb!w()?g|U76CTOMxemxBpdF!?BJ6zQ_LVj(?+EqyFuC z^w0Xm>BEc{Dk}J68=q$zNL#U6iQC@II8x-ZZ*7Gi=vCJu;;^7hY74 zuf%cecLIMH{Jgzci&&P<2JoCE?me@)`SkY>r&NLd{)ztm(ot9p2lMU4M}xs2_CwdM z9hls?WRq9=C>{Xw0|=NGOdbFdIArz*IDeqfy$Jx|jW|HsD~vO{RbH*oa6Ro0BeW2Q z#`%V2L85!t-rPe~SEolj8aR z>ni-w9r=o#@k2GSdw`1rw?8EyE*|+f!y^21-^On2GW^!{Wj;@B;t25i(XV}V#}WMg z?(p#u#`$mZ&Maq~f7SGw4&wglrpDTD`4_fFij2p*?DUl~({3`Oy%BmEhpHYGRPJdoN zl6pDbTDymlmz#M`Lm}d|YWiJ`{!Cd?(Y`o;T9pf-mkv07nJ20P@hiX)D*X2TOI%;| z#MmJ1OuOuu<@g$x6$8?}-`)!R9dZ3uTa4pSEKSc*rssVo9$a8)GX0yszb3bw$Bnq` zXn<_eqJH*cxak!7J=?vZ^7BdJ0IB#Dr+Hi%keS!G!v_2jcJDzv7-B4X2P-0Df%UkMWFn>Xt?` z{#Vi@f&NNaTZoef9$3IK_$M0uoIXrIET@yQO22l#(uey+D=sWwZu+t47Bz$B9@E{N$p1=<3I6i#58@O|{Vh?~!)@z`}ILqT{LxZ23dG#ZG&_~3% z>1pB(evD(r`9nb8Mew3nroZ0;KRe>yQd93y9y<51kIxaDikgk*in97V-}BJhvP|4P zosQ`&D|t2>?2O9ty->Vp%C{`V>)RX_}=K3ijMSXxCrYd(gB$M{{bli+y?paLq8s8zX1nytS3$*tSRMn zp@L68KzkSSZF>WrBiwW1DBC?8nVKLzuJ*P=pO81m&vCuJvigsk@YRyz*2l&MDF@QV z>m2tTKkjzai1$D3y5Olc$9-$}z$BmZ$mow|IgYA4 z)tfVVl8y6{$$ed{e`~;boD%7XEzmRW3sJy&Jo-(qtqA%H9HxVMJUg3y2zl(wx}A;^ z+VMNRKJ1SGy-$eX)nY%lE(tQnU9yzl$LlM1SM7E-zz*N?=p&6q_?_`BW`8$teuK|@ zIV^>#hcP(}Tx9}zKePe9S6bUP!+Bgh)?2`N^?w9$DgkPn8{%%Z0J67{8U5-%b1Ydt;LP!%o-46M8A1 zTiDqVoPa%&u=raiVCS4vS@f3Bj%e z-zAwq` zci%WNOW=4@Q&i`=3L2f54LfQQ`R>W5J3f2K!+B{C>niQY|Bt=*4{Pf>(?w-b8<32d zbI*7(=bSqYbtgt_1=M!NO>km^+S`dyPa0RXjEC6ZOQ!=BQ^$wYu?sd*;iOiiHtwCo zlTPA^RUAO$=BOBkH{f2*5NZ&K~_`TUw9>NF7=ZJDI{=yaFi#26L(mT%1Sfm z)su3z8PByYME$z8C{HDuS7DblhW0eYl^FTldg*GC?|tgH zb35NR@pNm+;<&2U;73u9cJ zJZWbC=yhviT<5YfrY701QFp7J{Rj0%;rhKk63XTMwnCABb_Tts$jg3deUkgJwcyuFdmwk=CH3vJ!iJvJ6?7Uct7JkE$V$ABxBn7AIuL}v@1APXElzMbs{ds z`{DW@_V@?k|2O*m$ACi@C>IiG{E)c6WA*A=kcV0G59j^1gLi#B{!f4DG(LV1ek_1L zb&UUCj(~B*|F>@43V(mZdB#t}|G)axucq;G4gbgai}*iy^zX#|C;kukzam}!VEjK& zy%E23y?<36tVTV+L%6E~+swoV-rs@8vm@~-|J) z`Qh;Y&6{t;qtoRZ{r=PCMgRYT0^0R{o&P`lkr1t93-I(sJUT7eK5UP4`=lk~|1)pG zjqUKki7+e4qF~c@|54{}c6qjT7|yXMd!hPyC`PjZ=!y{2@{o%-$x8T;GWeH{P-R4|MYmfQIdbc z_f5BNTC$xnygnBGzkT~|weRKq zcmTxz!Jh&CPrO!#yae=TW4;Oak%^*2{2z}&-toIM`#pI8zz>(fo?MSG0N2F<5SYJU zb-G_*k8UZoE?Z8!wCi2@0EGM9xIg{UDx6|~_W|7i{GX4O58yY&|35D7zv$=xUUB{3 z&8x6A8tU+xex9$JNvi313BvtrIsfVYqj3NCdk*;k%oDK42VkCn561_%o)@reb-Bg| z(COL+vHz>Su+0zx-cWs8A&7|Z^Iw*evw?U%;Q#4D;Q4AIB{B~HzrQO_K#qhE7eIPs z{Gm?;3ds}bQj>QBulEY!)Gn0Q78!Hs*FW=e-%*x9C*F7WQ_MG^|9!*-@MY;f@hQd! z5OliD#PciOT%g~+PxhV~UWvH-# z-@lXR&?Tu=yN(ndsclf@yCD}+BQMimyf(J89&rj9{egJX5AmLVkiER^#8W?fN)#QA z6HncD#4n1@LyP&pOKG3L_6qh2lb!x_v|E&@Gq77QuGS=Y_=wxyP!GH_-=;Gbf(KA* zhkB|D;5yI_U=L&*EkhRnA32dHu$)TtQ-3Xs?~6vM?;|c)K4nH;EJm3%)l}J8{km1| zZp)@$cUN|EGyUcNCAF|WyRNpPIVSEUUfp}ob4BzEkn=!^#364`)t#{9vA>FY{(sXg5{qcm>yPns{JwG zQ{7n^8Xv&v4;<(5x>p`}S;NJjZl0uE?=inv*OG5PT zsf7jD>8!c#QtXG%S&K^YyN|c5wT+bDy!QoPjeY2pn&f@{vyzH($059%vsFijCJHLKBu6>_hsJ46E+^muG?hy zS1Y}I|7+8ib^QO(XG@Q_R4xAZDN!3`Z|}uZvQzdy^~0&UL+huy_73idP;RN06(B#AFqu2<7F^(U_V=?!@SHg!T>Cm zb<5r<>sFh{1HkY7B)@;=$0V+sv3#|I{S2C38+jiH&z!Nu13>>mkHUK)&%~B3rr!|X zM|%<1Z}Xtvu+J11rO5uSU_Jm(wFl29-k+Ap>j8t42kk4SWLE&=D|DGwlh{ zkTX$VQ-Ls#SrTx03-Dax=6i_Ts#dr49c>zt0sBFWu*RYy6mxWmDeHe)0yg5>4ScNcTgz5edA4 zoKRaQ>%DWISCF7j%_}i2?|?2VTjFyU;!SV*P!EIIQsQf|HAW3ZxAA=yr{7Q9|IbGQ zh;wk>nLKmmi!XqO@XarkBX5tVx~Z~iqtA!~_^Cd98gSN6A$|Ij~Ck2oE(Kl|z8 zetk9cOW6HNw;<2eSlN~>)-u{*Hj2_AO2Hg>nD%++`DAxK>@jjgyvXA^{pVnBfM3DB zh>PD{XwnDX58^U+=lIAU`nn?hFU}_eo?xg3e#T0C8}hOv4`|P~Y4^@*;uK=+no2z8`<8tA+gttd;RV`*;7?@9hn=Hge;j#-;eUNciIMp^ zn~yEVHxz@dz(vQbC-N2|#G5mG#Hr6%`w_2^_9LbBn3r~-fnyff?cs0!Zxg$CUq^Rg zA!QOkDeX~}y#ty(wP<}W{QOtgu3diqZsPrqH;4wTZq~{9JptCMZ*t-??M0?QYC&t4 zjOnZSY#+C!ucl($Dp|~k?~ObQ+b&`@MSRu4#?!q2x($V9uJ;c=^m^Y~#0}_(Tv<~C zp2W~Ay_jFYo0uN|-(0uMmgV5T4OFZ0vSpIb*FxSa#&HYd`AQhc{LZgnoEb3UUx0pv z{lfD1iwCfD9CmRy{%h@w`*402L737c;!zPV5=EVZc4y#D;15Bcf?@5KQai5b_c zc#u!bjKXec4O!N~-@m=MDWSj*3wFD3LZ!XWJxc$sgT=1nfdSfMU#}|PLfrqb<6D2k z<6XH$pQeliqOexi6hH9Ey;a2Z7g7m{<<*0;TKxY&Korureh2KPl3ALh#I|^zc2qP+ z{GcXfby0>w{2x5+5bbo&wd5lHW{33$;C*d^{vnxFKw6Ws8TcRU#fcNpXAobfko?9>+fdkdmE)r! zsx$F;QoW{dTme@+LHs`;hAnJY*oPqzk0T@n(eBVcrRjXM?>vBoe2iPix=Fd zk54wE{mS514ZIQU_noTkn!Pf-=*JWZN+Qd0LR8q!hf<4vZ-oVBBlQYB93iPkG)GeV zcz=UFLp$CdU(Bo01A_^#W4u=OgQXx8Vtt!?_xugs%O*5u1UU~QPd#{mHTL782>!%f z_S53>tL#ehO2@PBHGzbtc=>qSY^>wLAKijLbm+t|-qxSzf#D|JC#4yg3*3lI0yyaWVwYdIb zt0*klc>~1%1^$nG!?$R1PdRX5;I>V&78d~VEP#h1KK}ZL*HDUa#l-R63&4fXb%g}X z2iW(>A>cdE-^?3tqrMm|-CfD?WDW&2K1iNAxQG+{Yveih8)$|p%1N;Z^ZE+#rla6@ zX4(d4yP-cq@9s=#^GxTYI*IlMPI`Qp&yOqwG<^P+K1&g=KQO0?lPk;Q z;e7|6S1o`&3H)8XaE1fnt;f5 zZMIbmvHacs8MOa++1_Mov&4c1oZmwz6$xwiGnjwE z_uRj2Kijixz9**PMW>rvJ(+l~(ABqw`CgSHs=OR!#1ks#xNlq6J;?7TrHCQ^?}8%& zC5SjPlzm+x>?_C1WbmQ5FHmY@m{-sbZ!39}|M#@4uSGvTCg^o2TZ03oZq~Ee_v2@& zKS!HeER;G7;9BJA8d6on-^sV@nnMrQ;`qW_)01p3B@v67a6hE2@aLocN-ULN{jhED zXJWiveQ10a`(yjoN`?L1gYSX!HR49hbU>mA{uc0^Y;Ry3<%_TEjq(4}r%m8Tc33xb zI|i}8w9d_U;(ZWDrO@E!c+^K@;Q2t$2|k1U$hfsxNg<91aFloE1;+?B>b4H6x8-zy zrtL3*x1~~JST8KOxq7VX$Tw029F}p}MXUqJFJP8Sh;xc&FTT$XYwGhy`^Y;O!8B6? zKkK9{2@_7>{~@E{$`j|SVYXks@(AMosP~jkIKiJ1ySli~Xxi~0`1xRfI7QeI;O{UK z+n0%TSEm!j|CGPm?V#cPArb4|82xK!IDbJpxE@4wA|&(3B$Bm|kvZl!!8#I>ll;yT z4fRp3>#nQQPjmisxfrJcyu1|kVenDiJzmPKl?_T7_lCcJu{%HeL*|w`S#? zW*Mi04}iGtqB>9fUj#pr?~Axfz^Bh3F26xf8S)wo+$RK|_GFEL|4^w!HNSB3;r_!+#XnxK@6inP27qCU$&J?$2Yq^(EW_Qeb}n5PmGMo6q9 zq1Gt-soe1j)|;`iqao&D0Ux%Ryx%cvES%_}KDTq*ww_GPBZWCeJ=?_)>VA^zPC%S# z1<%R)c&p(8*YzKCDU0*QaB5J)|NT+T|3CbASkL*St22uA2{`a8kCl)wFcX`KQGZpS z*z)`heSH>9{|rZ3$C*by&n4miy#zWo+~pnON|;&Kxb+v?%b-l&`*$2 zN#^|@J355CK^<5}51irgrmeDhysRB@RK(~w=HKL$2z?p+)VVpchV#c|wBK24S90(I z@&B!RLufDLbxZb{xvx@AH)9J5$gc**R^D{l0V{Zj#eVhTCqRjDj&mmKw70F z6#rtnOk9a+Xt(wLGZJ7h*ou5&vJF{g0=4A6;qx zOTUVHGA=&j`2!zcy?Qlqe^qt4i2Gw6L3UuobH*=?Q%(TS{3`5s#5G}mTfKyX)>H$x zdl&v+f!}Wr|F5Y=dLPvD!{h%|2w*_`pY4- zG~I4#xr8S#`dP!S>Eu2mTf_gC{M3p61D+L$|Dze-6aVLNug`m(|G%QV7v2oK?qlKq ze9xu+h}E;-(&aSXf1@P+&%6sC2LC4xo^F@49KbkxKm4CK_6OtrH^xZ_Xz}~g_b=f1 z1>l^y7fag8$=v)9;^_Z0C=O|JU!vIL}7BbW9@)*Yg0}Ze0fL$#9>C zKRt0y;_$XcJ?s@64}9-*yJrLUryn^b+Vfp`0LTlt9{*>1zaRcjzklWjPUHV9^ErGT z(r&;n>#mAYw@ydgAKkZwlK%baaZCF$>4cnt^R0Bk`;-y3RHjMUoGo177qFAE5KY z^8sorbTjV2d03LnuxAo)F>DQmm4>$ulf{RL-$_qi!E7ykTL z9;qxb6cs)tG|s&A(gN}SWX>`x@%^JeO3V|_HygYe8ZNKCsDgLkquxz_|I{@~*!}LZPffXXosfl+d#S$``ffbFeOTKUnI-T{5kFN8m2m$c3#&?i z)7lEmW}|Tbgmbhl$438B*FEJ9;>G_c2SGS6Br-HtH}^??EZ#2C-K4Q)c8+m zXA_kv_hFc&j1iMErxi5d5Gv*kJtk zERPPDHe`dZV4faHv22kW>R5lbU)&I=hQF9U-oy5IY1`Y^Y>mLJ_Bg&xdrV2ybT0P; zq8D+5u|KK0Gl2ao{JD&Gt{uR2Lj}2rhYwuyFPyIs*Zj&a_R7HdZQ}FG+{EGkdvuM& z=S1Fo@h^y*_smcJnDMkna&KOJyaoA6XWo2?|M#~X%BOs-;-y4gW4?W4WNzaNzOgb_ ziSC}OzI^+Z(&utsfLy&iN~pIX8As?SpoRv60i1aII3HJ>h|n9 z#2-*47w`LA>%5cazj&akJcj=9C*~T+BPe%#75jd~pH(d22bt_w`>u^p`r1qW+Y3HV z#Vr2k{VU!~loCh3ue!(2c_T6=KIDPlZNv6NnEgBa%Q|tF% zq}(_2iwOA-eZ8TK^N@f3i~1;5 z?W63lbYcDgujQ@O=ZR0Z-8MAG^K^d1^~Jc^?Kb+(*XLL4ah86;13z@j$lgKfF9u^y z4)qzqpbz?hpRXyIj?jY!VA;5XbP!asAg~r#f-quCj z|JHEONx8GXIl}vRJiBAOZ*=nRB;}e<-;%@o%3a5v;QO2gK;Q#EplWz{pU*ep{Nl*S zS1G^rrSctY$7tyqH|FCCQGH+^@%y4_75Pvw58kpai0`9%`%FNSt@FxToF670_Tjq; zR3p8ij`+XzOOCHTkGLz;>xnlt#KkbbUwuFX3lQH?LTRc4uK;Qw?TGd@wOg7vANL2< z6y{OHulv$+8zKk#zp;9G_WiJDI7+`FAPxZdD|crD|NqkJo60FSJAQw4ChQ!aF{`jI zv|EdUiD}yPa`U@j2Z7(`+ws5Qaj`WKrCbm{ZRYX4UA+pQXY2||oDW2yuZwuLXMEef zTEx@eo*JK}A2-~SqO^PL89cg;>)f8UF5vDfY}px~L;R1mwozyJ)LppWHxs&A&O4Sv zLD(1Dt%05x>_zR?hs(wdD%bx@Vx<9o(p zJN>Ljfy}tRV`agX)9~+k-FoNofSd1sysi7$8pvj&ITzoVeQ3h69_xF>V8&-<`1jZQ zzw2F{#`~9~&xhfmPnU`Rv;Q?7z_R75m+<~~=LLA-5%_Dvj&Y-3+WVC^VLc$viFQF9 z0zuNgq(j_I+O7T4Ewi<-Ps2Qw+=Oysw7Hr8&!tk@c~0y%*?w@x_HtYmWH084^*{aB zVfND>2AH??taVphnWvpMFyr@Yb~_N;{|RO3pX z07F9-i)ODC0x8;u_g7Utp!xe}xtl3N0Dd(oh(=0m@AU7&|2@$t?W5RM!B4!VxEhjW zH8rVF68EPR1+PH+sUQeu&CZ8B@U+*N#m)(?LpoinwjL=vbrS7=Qm20n@wucLGO*o{ zxFNvx2)KWMc0qZv6}UC*g<*{BG9F*VtMNSGHv?r}3-cua&(r&S{2mOGGVpl#|0iMt zV>n-q98!q;i}2g!cnpP%&|=um&9EP@upI@i&v6yXrJw%_n;@zq)T{Dz##<kq0j3l55SvJXZgK`eHJx< z`&~-yoF*T@)tE?e9Q(ZRSi?Ltn@R<1@juepPw}~fgWr0Q$3Gcf)68;ezz>`a>!NfJ zIN&+pd$E`a^$5uuU`GW$TETegS+?(5%zEO@+xIs#uszMwbI?y>Wiv6?UK7jGo;k|O ziV*Cpu#d_LaMoDa-s#>o><_eijOD>DUo-EQ+nj*D09^mn_uxm|VfCBV_wYJnM*`zI z%Qi4NpJMyRqoe32_`!>UfqJfr`0KT(uR0oabNm}DqF?(CPMP3`TWc>g3temv&zeVH zW4nuyIP|L(HfL?s2-{_uC2C?j3i8lA^)>z6Y?AAN(4|&U2AZYAozUl;uk{?Kp3^j= zLwj$s*NNcsLH}_zhyo?@xkvdPdT|2pbo22?q+{D%GF-BOXH+;+Jtrt z>}rUyKl=K*3OVmL_wQ`t^~iSs{cGF`b9WK_17E*`{;m18*=r}Y`9Mu2V3!8JA>@NT zhkPeP-M7Hc+1@FNevXH5BGJV2y`#=+jAH>Fv`~Y3jKl%~UY9h-fd?QDc2AYWvL)Hg zdA2M*O@C6vscP)*ql}L3#`*%DOe{4uUe<0+O?TnD0&lhC=p^SMoo+ZmzjV>k*+u-q z^!Y#aLK&V82(2(5{%al zt3_oT0_3r3Hhh}%reFx?u>4xw@2*9^Nm8fE{u~;a!~B8z`D^!48l*1FpRngcVWTXX z?A35+>AU(?57wO!h}&AfS4J`35a*%8ppA#w=Y5sb-(3x(qg-!XBfW-NTpv#b@IUyw zBZ|WIIi)mDQI_wWH!ikg2KpKOd+l0uE#6ZN2L+CUq<&FPE?+pMm4RDn_(f>0J;?S8 z8Jp3Lm>)Vb@Lgd)uz~%HelV4E^Szwk@h#`LP9)+ztVas*r`Zmt$3-kQhrO{c&I!2RAvTqCyI=6hY}-z-~0LYXn)dbJV2H|pc} z$3%{2CE?ZjSDBpjvYzF0>L~kdd*${8&f8uD3S)m2_RRv)k87URO*MV<@3ujZYI;{ZR;Bf~16hvA`^aD6HzqrPa5BCnU___i%u$M75x zdDSWPCl)Yn+MzEXZZ-6sdv`{gsmFA8msm2P2SE+OcZxhS#|(yi+!u6ef&Tt70wEP1 z>8wb~8(LN#$*#-Lm3|4l&k9|s4y!xt3K_p4z(o1=>yMHqkabUEaczUs-{8(b# zf1U0#pV9aLeo^7^aB5DZoJyp^#M^axL7;xD)1TJy`guuBQij4w=v&BV5q%5iAsztY zNKtPaRO@!p4}Lx*wQ{_ls#IkjPgFUopl@4m_2q&O+HP$%`XuTp#upyO`<%5l#pA=; zd=rwJc|TDM_^F>u%ENj}EF(Sb$OF%HjC$cD{PoEfRYQel+^=|cBoSqO18zY~pT|4^ z*f+z^9_Pue*x$EXlha;3WHHoF)Z?tx_pBcJ=D1bR6^4kvo80aw_5I;gPvCWYw<$5e z_ORv{ydw2~2jZ7vhRZo`R%lnz7t}gPS_POSVIX~rEK9k4&Rn_2* zO2#okcNnQBUuzW=-Z%GPzQFo)g-RZ0zc(aK_%k7qejr4>@jgi^WdF-OemBNv+5E&L zSWH;Yo_S^?%aWMDI0s)xFAnG1G5*{Eygzv#%qR0;@jm!rw-rBFTyjlSAB5z1NK206 z#MLDB1&9OS6EVJ#?;)c$PnH8Y{#1qRM8LEl9wi=^2&|@a)c7w=~6}$G2M_3o)O_!D7JiZqDZj z0>oFk6!Z&g)bmwnE9S)G5I{qamtY-K!#4oQHdUYc6qb%hqWJrm`u z^5_%dlM^*D(WoGD?_*-k?mP%*&uS=-kO?1TrSu_9fM75M{HBftY09J01vFq zy2=oNzBN{+h|S4-+#hK^Fkj&O%F2KLAbZ!x{h$5>%g{e*-0U~y0T8#xc>fjrpSZuM zD2aFeF99C!Gz*3cX}nPL`#*eG^ZWlI^4syemtLBAv%{J8cU}Q|dui$Qe*ern&ba?D z(^V1wcRHOF^!q1nt@-`GBZ=4HdDT3=gn!ml^SBoGA2>QC;QtTA|B1WvKB)Km`2W{b z!>)(34#GZ09zsn8@!Jpf|Nk?drxO2Xy@>zM!eNqe|7X{2*dR0>1Ycpxmh^pD4^;b? z_&@Ph;=yS=8TKglL&;M7bNZ=YkN*#7csucb;-5F--t_+`@4)Lz{vWGnKNJ679Di$}CnDZ?1tfkS1^?$be6RlC zebe|j@qd<=#{G>vi{IS;pZ@jf_fO08IQ$^#ggu$#Zz=wN_Wi)U`?JwL3rM_sJ^ugE z@&MFUm!dthf&ZhK982H9c_(=R*W>?e$6t^Ct7;nmr{5XU0ngB`4Y$F=l;Cq{c>uN` zPQrV{0dQiyLL65IN5T6`xA6I!VJKhnzeL;i3KfFnAt$=oL{JCBA9WnRX92;TIqzkY60Qi%`^uc(9nKXVGf{L3y?~TM&kaz@V55uI==GJHF=LePCxmDnEyEA1l-q@ zc!Bu8>^meA$A5WYLCX*DB~>*tPr%^N4E+4BJo0$h+)6%x`?aT=iSKs|RaO%JS0)ea zeI7VTAP`ZW2dQL>?& zdEMWLEew$_pbG??Il$|6(Jy>i^5xsNS5`Kyd^F!)n3J>o?jt#mHjQ4JF9gmX^6C-a z|B6qK#At@q$aw2jCesuouTMrQT*SS;3>uhU`?Mqxnl!N>4 zd@|g7=&8CE!JzLv^wdwmTPt;F{{OX3pgG`S;71-n=V9V4u-iqW36`fza{r_gGIVrO zB>pcZL=SOMy}KX$fLgnNc%$S2U|nC^S?wV%C*wN1yFVJGe@_$q=%^2?>f~qu_Ob4q zY~zFz@tnhgK)k5XtViC4^VR#S9)VwA0D1@WKzk}q=Km4!Yv9jPLlwu55DeXR9&$91 z0-g%|{}-0~0<>Go(*N+l&S(kFA05D(TL)TW+?z`5+^B&5+`WWq>FDbG0KHymRELPV6 zpWnWJ{{rnxhrG4hsE-%v#RT=_0q5|^e8@wgP!;V>#y>G;@VP>05_w!b73&H*Wp_XG1#Efw<<-a|P~qC| z+RppExiC4#_Zoh4=Eo>kTzc-I%%5W1?Z=5%9~p2uKUJ`W?V_p=-IrYl`& z!Q-}`|EeDMZL;4qI5`vukp zSHT`#QSh(#qW^*0K5^R1@u0SfFG8QI=$`jxW8Sb=M|Z|yf43P@GU9P&+PX{D=dwM= zm7u#8`_PffQ^JH3`K&``!-TWOezfGc$o5owa|g=-(T9f@8Tx3kGWNnYjIupjY=2WYdWQRiT_VOml9|fOd(Dd#|L@MA4kq;*9ENj zK5_kfOX4mVpRk*!CGG4EXL{d6oFHf2Y?AMRY2v$(_>NSzt6fE0#YKFd^Zcgw@z+n| z`e})I z3UF#q_3p&*4j!KiWf|!I|B%>wC4hBD6umO@0XVmmZzWIR2l*!-W4Y9OLCXU$_}DXl zDm2zq6z1j{iIkHEha8c#O|qP$*bT&vQbKPxX#$#^$9|B5Gho^fMQA!YrQg@5qj|F5|!oleNX zZ}+R@0fc=z%;yvJLIEtY!1a5D5Tvt3iS|GD0^$#Z=42nsdqgptCyT z=HYV20ccv-ao{}K)6`Sn)QNuB-)~8=JSZPLhW4%qxj%n_W%KmCE=tjRy2x<@RKY<2KyDbNsRUikN=Ly zL_PdZ;P`LDJZk*Zr*;aB7>}i!9R-bN%eFZljoDhp%F2pDy*A+fTQ>jme}SKmb!c8` zCQhwRMldV3TYqpU0sqId)`!>JF~+jN6p{H|MZ<;bh!f2QMZ+f8ALYJ~fbngcpFAWI z&olabSog-tVqb{$(ElEJe1X58v+jQK_OCmV<>O`T*2LV^IP1F( zFHU@?C=^Pv97~nMUj+8oJ?cfi-=(*u68fEV1CPqbdYc^#CHTKP&_BiVQvva4CU`^^ zbCJxlE?PTDdtEAIlz5)HdB+IL&B|m0{nnMqlN*Wq52`1BO8Zenj`Yy}BkJ7}*Yj&h z7wmjztXYOtx*E*W({j*!5YkoqZ%X$4@Y8--o%JD(&8%DkelPOIY{eZ5iRXZV#S&98iFQq}xm zTnz{2=${h^MR*QM`3y4uj(Vj z_fsXZLW#WT=Ie2OxuhgQd*(cd-?V$mMSgz=u8Ut$ln&f?R&@Z9z`fzeWqkH%Eyndi zo}rgGsjI;+(ymJ!l=eSUQBdOpL;{9p+z0vX6B3UnVDBaV=$-5pXy@yFeQ*$V<1#~0 zFi4*09LAxhC&J;I$45m8_Q_1!L~_Rt_REv)LxU{O&4p5w5n&C!&wN`+1nU9z8E$iId5{wo~gF&a9$9f+^9DeG*4Z-yj#D7PI zV;;88|JyG1Qx8#tk*EpM41))8!7nzi2hRlc2*Ux3?Fc>D1iR=|DlBr{SLI&FSXnOs zI?9%2&ok5$`koxRS_}W(_>Uq%;(5`4+fRF|nEE#60q{q=WEuW-Wr+rti}`nt*9Gnpe1pKJ&&+|K`l$HSP%HremE+6~?&c#J3I zdGK}ZYAUMfGon8=#OM2Co&@g?_jSyh=d9-JuH(SF?FMWFc%P!)F6a#=yFnU!%!Bpa zrS{=@;NfZio9sV~^~Cuc#pMG22)}Z1)k?mv?sWVj?e_>T?BV;BSEF2D@N!Xu^TO~v8AF!XA;ONYHy{6as(VjNt zN@R-TxAS=O0QIgzleE)=uOi7<7Y3|hAq4zf7TYaM|awl;WA^Sc>LiX!LX`ILzK_TV+_5xtq1zjH%!gx`;) zL=FL;DNDW?HS)Wap8Oo_{b+}&s5>9}pDZixakSe%SPE|@Z*5@XP`T#s=THq}INsgW zd6oD58zeH||N8X@FkXS90MKPW)xFUd<~SUxT!7rf{Hx6@OI_U|PeqokD&lYEI0z?F z3fr}6R>8hF*KqxxNdWJ&Mv0BtSm56Bdo|Mc2`!&~0xygPp4*VbQ zSrrk%PchlMJU!U;ne3tIP$9={f4|O5{e6B~#Jq&|5F;1aK2=pNiPx*iXOk?Wy%sis zAHemE*O$BIzqkqGJ)y*6JChri=WZ zLZTVpZ->>Zs8!?@EX1$LtUYUU>xb=!V>k!lw*%GjCpb*-*E_=HC`i_}K4E+Pr~Hp?2VV=?A9jmHxg7a9 z;U|E8aKg@YxUEz4`kaj-a3zjE!2OtKR&al~MU$ml;6IQ4hCPTf;j%b+T-|#T>pc8G zCdvB(k4h5pePEp(c?;|M3R{*p_#}9DHeGX6<$M;4D+!J>K~T%7=RUBlX%F?P7y?id z*Y?PR$EY_c$|UqE=vmW}hU<&U`~=JJe}(^hd+{^s+#X14xnm9D008&*w}LlI{B<#( z`lUBq$2hLf=3WAi0sq6_XB>L3;8YTfqd%BbAE3S~t0mCa$E-i`S`c^TtaVZ-`XtLQ zH%0r$5sxbnRj{FrBp{Q(6yKX7I_g!$*JHK!}o$L}^J zhYZAr)d=~d?bcaU@l%351HAbR{hs}7pV_NMGv~i=O62n)-+)f%XW+EltkW+@5Nu7roJEQBL4vKLktEz@0$z>m{0O;27|#uiFB!M z^n=|D{wU{>sGD&-!NZEYvXL^;tDefoys=S9ZLdN7U4wn#J0i}#BxO+_P{NW>i+T06 z=4QTQP%b|;S#&lW?6G(OyY zO01Xn5k%&f$8mFZHv4&Mfw=egir3B_7tf)eOu0tnTOyySSwVCXYYch{`2wnvl(??6 z^@X(cTD+iQoM3RQ{ z$h(BsHFMvp4wY;eFKY+?LHDB=q*n}$#ITNFzcHAF_VfCqm&Z|FBZd@?qfp_7xA`2e zZ?2E+8*69)KOg+mmb!aQ*uQTZt}18T8Bt`MgfYaan@0Q#@HbwW`eUwJpc(3UUlH+Z ze`^wc|EmulmWfwlo4I-k|6h!64Se!r#RGT;-+xd1|3<(6)7NHZ(s&{9|62;O4cEv0 ze-i-s_4q$vyLaLL^s^@Z54ZVp;{Sl}5pN&(41UD_$qz{5jAFKus;RgI)Ro@r?ul_UI36(T%nC3SS|A!t0yV!F3h7BdT#Q%xorr$@y{{cXz z+iw8)GjYr`-b(zGe#=X^=c1oF{r*)D)(7gZ$N!ftdoTQ-?f60Xzxar)1+;*YCA|5U ze%UQ}j9do4AU}R(Ed?#D_^}+tuK>6-!lsul^~a64^h7=Np|l@$S}ywko6W>sKPdh` z;MC3O_DM^&)BF4X|7ttj*e*Ag)Avow8^5FLaewx6`u}u4G46lq?%lhu$N%4rryr~i zz|nl^J4na<@6hrU{3`wrq#zLJT#za{#E?H zppoBsHvIp|1Gpal|G0Soh$Cl%2Y`8QS^9fOp=P_v<$ExiD*Ahxae$UB>7oZ))>I z{aWy#DuA{x#&h{ymFc(ui+ljxGTP7H;R94;592&p>|C$>>omhEL;fRI`0yc>T1 z7M~=M2cSEx1FpaF$g14T=Xl&7k131~05+coIQk=^B^Po0fxrLWONjq}<&lMob?pzdq@3Km8T_ug;u4&3pi<{c+@{m3)=*ebV#T|0GIvZs0AAzRB2SmXG%2 z=2O-pEiv#HjMGn!5Ql$zvJm-cy)A_WpBCt!U!|(x!@uC`3-?6HFNp4p`Ewq%HI9zf zr-a5$6|be5bvciocLFBY7e0E$rxPq4lx{I1?*cyo`)iGX|LVz*qnN7DcPXPSV z19^UyGZI@aa(}-*>1dk3jxg&`GWo(Io9y?z_^;^KP4*G!9XwCBCIlR{rs9A0?m9+2 zwJnm`Ue}Uudm||)dENAM{ORmE_+hELV8_g~d4;zT9%WS_0jCQK=r*pH~!0nv$kSY?KOODwH3bkNt=e-b{xv1oGVXVp!`9hWg~I# zWO0GY>pJrSddeRKqAB3P)q5|y?&f`c5Bu~in@zj#As&6mcQh=)u2Ftd`2opSYyZ+e ze;?Q9+nhUh0?&dy>PM+-)R#9eY~M#cR!y!qbN|z%Dx(9{=d7Kux3PXZ9w-MsM*r&` z_&3Au7|IXCoUt-@Pw?bkmAT!1&Cv4L8N$FSp5l_)^=$w1f6Mp0}R%W>>=x478gk z_a^+TfBF8`P!D_$^SvJ02?sCT1N%4n?;HQ}J<2Ju1o0X+*&P5Bxewb~o(j}J0@ni0 z_Mv2dKK9i(U0jrY>{nR^-_Z2qA z?*Y2bbqKis`^iOoAEV_x@%)c`9PN+C%e82CND<@AuIm>uZ)MtNkf;^yY47fkz2}{t zYDe$0KL_qy-PAbsH4pd*{?FxwJ8``4r;p9@__>DBmQLXOvw!E)cnh`t{uJY-MdtN> z?vFA)Ej+>XbvPVs1C#*Y|^nRLFH$775B|GKr*f253}Rm>N#LzP`#;O~2#(FAe-luIFxrn=TVe39oDsOlvfaDIJ8 zXd1YCy%-vLi8%cm^J0kc&=E)W8lS&r<;IOKJR&qsyKc^9-hpquIn$3kFD+_Ga*+7H zPQM2618j}r@o>Bj^Z!h+w+O7SMs=m-%Umzi37^E{@t*|)KGbK&+X02~0!}{B)6D;U zhs;3<#}Oa7n$Lrstc(1ER}REKlMVcS>T6rJqa7>4qk#e9|Fb>8RTK4y3)8UzR|k-1 zZvF!QKX7TjNC3{?_R!Tf;{T~@)4`l06V5@$nJ=-7e8^42|M$)8j&uG0%+skM&Ijt~ z&-(ZsTKb>=RiKOv)0S2umAicT0@Y?gQLgjX?tUzY;vbc^PqT zg<8x%3DLZa^Tr1Gjyt&?J-zT17r!I7LFnLpwtsv3HsT}3oaIK^9ZEud^R#D~rAgor zSdaALM%usP!^2^okA=H86ZU*vX@-yXnON`RhiJ#Y@BT#HT9mujos?K`P!|ABHk$L+tt;DyryTYet!?}4Om_TQ)n&hc)6{N4{#Q7EvG6O-_$RL zVE2N3vc92VybO6xX9v6UQGTVIejsgD<&AlTeo<@gbiD|xR>oF;c zUfQuFBjakfTc3%zH2YT8bVy?S%77O4`YiA`>9@y50DC3X#eb;R9%dR+N$@> zYxdDVK#TkDZ*3KM-y!%J9mIVxZECnbWDlnXgwA% zp*)KRLZ3mr?s$yHMX}F8Sp~nHO^_}%ahmqO`BVe?ZQN=OCE?Gr!q%WN&cq7jVMqdB z1#S?uz#g56c<648e=&S=8aP9y?Sfa-IMpWk8WSIe)nOZ`Y9r+HkrRcr)^r zCg35BdR`4O|I;RW@$(k&CSfmMh$q-Sk>FI5)?NW&9ouzCmJGxPJA&&?)U(cqf?_Ss zYdchwMg3vVHxg4ko)85i&;L&9grDtO9uf4subNPFEXzd(te5$=W()vcf1&=>*NBhH zCvTQ8kK2=%k)|{97~?d-n* zzxFZfsN@Gf2Jx5o-1k$?|9OFEkn@nLb{Z%x;fvT`tgvP3&0RIn+jQ>uOB~m!#H5ew z+h`&NmILwtR5mpcAIj2q&eFavUmAR!>%^dAx?%Yj!2e2AVZJ|zd8b5XKNm*{@Umw~tf)xVH=Km1$eMN|(ib zVte~fp5#7KeD-hWfIC<(mhUJ2V3oR!kog#YN{ZiQRv^5QxPKtHzK74P8i`zH`&@k} zas_+{s~NYQ;&b|VUDYQ{|x-&Gi^ezB-WzdLT*kWWgfyB^Sz>_{rwzo%>a;CpACJC zZvY;jIqz1^7na-dtLV>cy0Zl1WRv|09Q$~^IyZ##7IA;hn>t;;oBt#JL?^%7(;mN$ zx2Y8T&$Fa@dMf}8qKt=pN z1VD!}A{kI0v{#oI-^qAcphs!oIQDN+8aNJ+7Q0J}i=AkKKP-4=A+>~jkS^>0+Cx0e zE%ZjlabB`&;#(Tt2Kpw~i#)v781#bUmXoVFZr#n_)pH&nl10JUi0`5+WG;LP{Jv!w z_pF56URCOzaNcEqHFj~2&sSp~T=v!75@bK@T+Wue?8Xi2W`X}#YkC3V0JzlT0{4mk z$piS0<2@|m{Ep?C1kg`O|JSsA*9p55aQ{vX_ZLMcCF3}AoRvayUZUT>Ccy`w#N}Hw zJ<08K5hpcBlFa?2ULG9e_|+>TgIHg2UT2c`@w?sowDWZVmE$TplbEMImDdx5e>3o&ik8>2oKP&GMfvIv=YzA>Ysob}Ur9N>!~ zj{2(EJ^9e%A2aHWEbrXef13KV((@VIAJ0n|aQ}ArxyN-iz%^$P$CJFrlMe`3m%-1I z1cCEM(l3ZS9xHX@dv7c5$jQZbb;i2?FFx_dY)^e_p2&7|d-lD`^`QT`FJhN;*1C7@ zq=oGQ2f6)c@cq_>nYRPHgFx&W{lX*A5BUGH$y_7WGx(h#pB3g8U0xp63&gwes(ZEh zMJ^nqp0jLKZU*PwhOp?p3+or#o#!D>W`OI+P)YdPvat!0gkNEu5>jO<4mVd(YM2tK7?JMGno5vv4xGWIIM-tF};`+%xwS;AdFy2lyqF$0J3SwdhZ8 zYZKPLG3$!_t^=8nJ#VIx9LGkZ?*jLOhPCF_e0*<}O%YQK`eog1C*4&?FZz&aB;OdfK#WNfa*I{LM1jC;lP6btlk zNe0 z8s7o+yfK*NwO~{r`E~>wCxl{~dWF-YmjTm2n7`@a7MX|MPv*{c)pAHG4#L3jOAuo40R&Km5M~{mgnTeFq&*&I3*#@(kd2V}H=!pXV?22YD91F3-YmivQn; z`!ntY_$AI?kNcNoi?7<5{oLc;{ zaevSP-jxSHYq!St!~Y8!Ic{i2X1}NBN7|3EkCy1y2J1n9xIg{)ujc`1yaV9>Fy{g9 zo~Xy;(LcidEK{-!yI~7)2OsR)?~@PU{(#@_Chm{;1O1dzNCtl^&DVOj{2=`QgK+;3 zj_d!C@cvRhPY1s2l7IiZ@P6<;fctCz!#^7Bg1F+ygHpQlcNO=)v0lXgm*N8CuA~3% zI=QfI!g;VFROneh06Zopw8rS~H?4SJH(3F@S}Kn3-)=S+b^%v#HlJ?1N}Qy;{HB|n zzKQx(Mgeh+5x01m&Iqr6pV4U6-~H4Jk9ZAj2KxI;hBq3B>mwW%q_3sZ_qG#8K`;PIab-i_nBQV(zo{69GR`}F_!`o#s@ z-FKk;Yc)BK!p{wzaPF-|D`un3-7+*i}f_w5l;Q#oHRv%&>004q% zS!;*>hu@Nfz2bs@LG$;r9{VgEn-Z5QqX`^LhZ z;ac2J30I|n3)uwk-#NGs{o0nQ1Hct*U6SM_9{=|Upho;Z8f&N{el%Y+a*grt2a{L7 zNc=%GtSSV4TOHfoaB;$kI0HEa1=%=L*P0c~u0tI0Z5LG@KkMuIbKg)mH!_kJJc^;oWIf{5D zf$BY9DUn!S*JWPC^8$$n&JqXSdEb1B_NLe3Q@gnTaE%81w6_;xAaNfAJ1+7NAYYgz zgy+;&JdcMO-4et7FE@S@{`Z^g-@BF=W1M%PQ|@EE zk3M_bJpUJb4NZLR!j-u};{LDr-H#EcGlb`W-vJr$n)`TPq~G=Myh{hF{+{=1QWn0> zdZ{aNg0--7y`lU0z1-*KHOElzP4+*XQ^$F~`)X|e58tyeGWrER_hcwF$NsFpaJiYh zkHNVS;Nki99aZ}iygoc-x+A*|{+eB(|Bt=*4{z!`(}aaQfGq*uZ}(&SU7hXJ>kQaF zimgs(X#y0CGSh-J(+<%foGM^*x!biy?j(Gs6xR-xYHtTeYC^9`Y1$+ORRk=bgC&O4 zu_I$257`9sBTaXv4jGzYt(n;J5m+7)V{vTheD{4E6_O^Irn}#D?R?+(pU3Bi-gD0T z<9VO=x$ozBHQ@fP|9auY80FjvwdMf)a}PAdkuMB!U~NT}^vmU$Ln41CAM7r}a~$2& z8hFlm^HYb|KZeG>q4Ps}dN-=X|6go~b`tkrWcC?&U$Ytk&X2qpN860V{Ug)UyOZos;`Z3LaCZm3*C2$B@_1u~JWAR02-^+*^`j}^6s3;hqI<#X zSZcr4+#-eXep0tK&GSo4DR~(8wfT=+awE?Mrulh{FMa>61?d7m2FJ)~6{f^|P=fV3 z$M0>4^&J*eC5UH)6ic{{1E8-TV?yRJ{HFLF_}e1$UoYVMOBVb!@Qd(%`dQv9iT?vu zbpo{}FE_g&v)~2b82*1Z^aFqQ8%zA|J-EJ(@5Ap(iS@J_*Rc$y)cFQE8OAX_dyy^= z0sr@O)E$`_t(&SNzs~+9R`w zTMc`bII@Xsx*qGM!$N5#=bKEo*~~{keAYcIRD1gf+*1*FA63bh<^@7rEcc;Zyrl0*#A_;7e5DCsou)^ z16`gqYrZog0q?I-HW|nVKz!`QYfl&Ksnjx=yD@)_eE#R}TzlHy@{`~H^epzrY4>=P zi&CJWT@pX*zwksuyXu#{5}p&8e_bQ)?~ef?giNg$!KV~j0)a%F=fmk{qZw!|G-FnS8;7V29_1y!8eAe=GJ&VjlOMuoIzIwlPlz z;ti%x_ECn{N4A^xj8}n%r2FSuhXZ%hzaYOlu#SGGs~I&zx%X$I`zNZ7+pwR@bHoGs zEzwofJKY1;Zpw!|A(8V|wKE-}AEYAic#wXT*7W7@66o)})vY1ML9`(cKlKi9hzsy* zAg``e&Nw_Jt-A{dp!I^ROORJNEXD z8eZSMvZsK@a-rGC`wYHB6VKhru5u|{}) zA^A`w-JUNMIr)P9_?~QRpG?Nh|}r zJ}{?Vs>ktZbqev^IN#ceegb|E^4hUK7(3PjpIvG<36=`Z*U`a96!Vg6Z6-5Adm(Cx z!tUsB$wLgg#Ya2Yc}W&%56o^KooBrzS|8|ReOy)rf%S7p9t_hS$m~&0Q(l^} z3bZSdNd&}0db7TJDKnag`?fe%nTFrH)e;_}bKAYuE?{kVEB z`&0OY99wALNFmzS7D4;+yeTT4fpu7Q~2`rP6;*yTUQ`U{HpJjw5MB9A|$eRMGPEU%9a zlv`=v29ds+{DG4EBJ^MIB79G+=Jn#z0Q#5PW&WcrrEI4zKUvcy_A5Bf zU#nN+?;d=*61;*E`@Y#elmon6o6^7U(4ogn^|-IG&0wg<`#Ci|e|S|!Q$*t8t=TZ* z70=pMMZdd({b=gx!>I4GRXwRn^dIEiO13@9ez{R#|3UwZf6vYKHVK2UwQa_5o}ov?@aufO!DL*L7uKF#;*I%h6myJeHi8{r=|{gguy#6_P{)Cf$(C-+ljAmH zp3zdUXSIE#XM;Ha9;iif)Y1+JCbG_Ro^e};sO^&i$iMPC@awgV+Ynwb!}y^F8Q;HB$N8NAjB+^t z`=tkdEhm6~|GPK`@{oDH_iVV!)8f(n#q4irCgA*#jQfWKA7Eq&?I%MJcG6q6V3>IO zxUE6cE>lM37{(>+rdXxG{^JX$)uoW9F+eCm!xGq^k&Ya{J8s+OomI$-#r$QMfZdGZ zWyZ7n+ACq#17FXI0{OC+k`dkhhnh#Zusf#6e*+JAW}u8bU`-ZveF3(qz06!J~b6QO8uLZ0(te2Gu0;8597A&QO_>m^574(<qd1n5uu&vn0`P8LIW0Xgt(HZK2hhhu!w?&jB>I<=7#CxGW zeDSaIJ@OVA3uy0ed?twX25`|$J|pp6VbTP>1K!vEKRe3#p!Zlgc#?Rp=B69OsWmwo zAfHqThD-Uoo`G&N*ZnhlGyQBILFE1cu+LhxbSZcMdoRh*GZR&7mK&izp~u8{Gxbu~ zWX1V>=&3%H^;nICIrXNh+i}A-tKdg{LH~?-F`v;si~*-UYYX)cjB@?Zlx}*2?c#yO z&f{RK(@8t?-obLLOTe2xbp2t@GdG&O;yCn*QPf7Mhl)HqM_o*GuhAZdG8d_KJTFj!#(BP7IjGy6ikQUe66-GCkT*doW@i(Kzc&T5*e~WgYlB&D_GR!8!lHZ+ z?e=W6GXE{~$8wV|I1Ze?_R?waMUJgKG$n>u-)kOy(Muk{?syjVKjQzEhetFnz0}wZ&=d2;OQN=iO0omuFsY& zU4eOQ+}7+lkM$w)Qe?^tc%1P{ZF>JrnvAqJLg5?J=zmp$*p2>-ymjA}dqjEgFWb3vH zZM^j&6tjp9iDGPdW8rWUcj%a=41Z9Lto=STRo ztYO`I4DFeh$L~bgsGgT-#{;#OxqpLmq^pf~-72#IcGyJKw5tZZ{6fm{AY`2ao$|5uUkoaZYG3-f@(dyHp> zhH|(m{Z{7OyU%Vgh?1cXccpc*3fsez#Puw4If?neOXbzw#3vr@3 ze0&mkzYRED?wI&L@x27Tlla|x@PEWtf1LP#;;wlA55@l%@(?iprlR~N_OSEAQT*lF z{WhNc-hJ)=75{&4ef)Yoy&wN)JpM|==`7%|#Q#~(cjEux(PuG^^nDm|?L_>42ipHO z{{LP){iE^!MT>6Z|Hz+!e*M1#{!iY+?eF_&9>A~T|A_CxAM!-(LEig$_G5_YoZpOk z>ErAJPypPY`Ti-13+BcH@qY}rO}FF!&*|gm!}0($z`vcxczxpkc)v2l%Srg7-y6g5 z7<1w1 z@!`3^>2R_jyOg4t=0)II=It(14=8a3Wyni|T$=9Cl@`zn! z$p3F|F$&W+mp>B-w0%~L5x+MW@9O{3v-XxYL-=y}vz~T;SnT5YWF%Zcc~^0^0lWbGE;#)|%I{~td5Kax7+q8T%(Cy7cI2DC3?6{0-WOW_eSiCkiq5x* z+s|uRO~U%HcwX1$sU3)^<T3E~4PoGIkfLaUoi%RzL6HILmJ)j~vfzI#Fd6dcukk&X1zx$? zG2~9e-@3&ya^}npN~?7DdR{jTRy-5Nu^@<1{@xePR@0vBNIX*A0sGTz-Ox|G0NWs6 zK|9+MSrz_~634e%UtQtG{Zm>*k9)4Xsrh++d9*OecyEhU^Apt~`75|R@1*?2* zH~p55dliv5(ww&fIKonUf#h#106yC~+B!`CtHp8&IBbV2sCZM5b=xQ3o+l2q-y1^S zfKrDgHqyiE-Lq{z;@)3vY`#Hxu8{J?XWxG5!*GzwD zKny9AQmNHKoTdx*Kk@XZ`mcqCJ*AG>q!#3RHpki<_+Gt7dk+<$9@Y=6oEi4OU#d3m z;Ppi3YkS>z-lqz`HqPI@)!S8m4)xS|a|-xOzI}J2=e*n1Y3sBEkYB;=+VFfv=I>s= z``(i**Sr6JfFHcY@#1qYns|Qr^~0kahb8hg#I0{}tmxkfz5wF!<7zAI@bC834xGb# zDo48qSU(8!%ACV}b3acH^7m&)UxR-gar{$mJPrB2R#+sKW0fBrBrYDh-jBSp@DpW| zcpmaYOeE22n;q*vYlyR)=+|FCeA;HmbaKwi^Y3WUakhKqDE4mxz7$GM)$w=1*WD@l zw~&5a#~ntFbtUQdQZMyd$-5Y^2m;^FB1l={_ZzK+@GEt=PQ|y@(tkU3;p-EVp0LYr z2|YLI>8gvxl(#A4O)Bp1a23YVc%OQQCn)AomJbT&QUBNo&&s1JBp*|9JR5$0w$n#S3yV@(sXWqA8VJ zFFHTD2!7p#{m|Zx!`Ivx=XejCf1gBsVjSF#*GK(n@EiPwxc*`t*T;S@3ljN5i1*_; zVYD=#_kMW}<5^CMmFF-+-W4)gi0_|_i3!ddErX(!^TnLEa;^$;6TXP?>Q;+%`5brw zL%T0O9OgbWjfydhl~PY-HiCUN>I$s`Jrd&Y{eGz&_RF4_zbHhz!XQmOWCzZ__&j)5 z#Lvt8>n|cMMsv43L|#BTejfRbi2oZl@&3r?$_r=*!EFkyUDje+p$^h+`FhM}AN*-6Cp3oQ|M82GBa#S)ctynol2k|qA%)AOWEdC_Mq z#yr%%EBUB_^HF(!BF*{boiQ!S-#_m&7#iU36T|6UoL7Lx9_8=6R}al{zR{GaDd7H| zeLI3aUVr5$Q8W2w>615xi1$aDt8Zdl)t&gqS}*Dw{Y82D9O^qV5d`nS?aCbeng8Mw z*az16e_~!JaTp(OGj(7*%aPNK93M^7+~<0ts-a1}QLtyC>i+w;?I^+V#LXYQRSJ3i zg_~EH7l8b20eSnXS1!hWW5?INde7gF3N7PR&M)lTOF!I+K_R>peus{sjt=@Ee0_fg zt$_T=($Po37g(D}3p*lrnlJg|QXW_iBfLp4o99A9dDs)@LN z^jOqNDGH2tBCkq<-|=Nz+F`htB= zmf$!PfBnC){0EUYk>`6vvnh;ud}h`PylS(fOBqfu{-ZfPwu^qFZQpnu{@CNTMWHK6 zJ~yo>@OL4Psw7*+A=T_4{DZs7ha z-I#Z&2SexjC#W~KznxIZz>mt?u+r%PvM7jR7yFF?0Tt|*g_Yz1G;m$BC;+^F>n8F6 zCc$oUZYBQDIDbl9#{K{~+&?GL?zj=X0i#+Je_P2s(Q=`675!U=GXaV6#A(&H+0J;j z%nbcofI(Ih@0F6tIpP&2v#4#x`T2B0#qVw5`D_pC8$2*0{fPS#VPzQpS15!K{e?#p zs+WGu9knCyUw#MvF%fwCOSYZzM)%NM@sv@lCQkC=xHdfQq7@bnfl$ z3d+0-`4ReGdu45u_D3X~nBzFHT9@|_w+smzmUlq!*Me`t@usO_K5^aNm;zovzTKOx z)Oi9Mq>#d6Q63aZQ9oihjQI)qfYd3q6nX6xaUoB;AQIn3{%Nb#N;?SCHTqkpO;of| zj!Wx3+9=0in?Hqkz=^7{Hsc|V!;ulK+zlC3#VH=D=zkM>WO= z!%wb=@Ka)6GHd@~>IKOf0WOO;w|K(G^UbFsDv!mxq(PQ9Frf8N3SzOq@n#ZJ;DrLI z6QmiAi*Qj~i>bu^k73kL%M|J%}M|pnm_)^Fc$583> z;6(u+5W97LK{oa@?5I*l=OI=v^z|D%Q>2azJr|}No?YK?P^k5Xs<5nzIlaG zEVY8~an@F05(MLad)|7C5?4V*YV=JoRT2ArT? z4~O#x+^{$Ex=*1!OC8s-`jH0?qFlGbVEBC>>nGab8)dy5fA*(g+PT+9pH6a} zl7Zu&&u=d<#c0=GNvCz3Xf7rUZ*i2`3yVW%U?)0`b$7uYbvuMUwVCaxWW7$7@0&hJ zJH=6}wW@B^XR*?hrav9|fcH^<_#Vf2K>Z7XKURW%cIoi`H%jo{)h(mP_`MBEqI3)T zTdSh%T8g-JCDhgi{Zf^ZKf8|oY&M(plmNF#s3Q1C!2jin{CenLaZYjT_>bAz&GDi& zVV_jCOSJMZ>W%S~z&{XI*C9%jrnVsFnX|SVEt($Jt$Ayk$OAC>V;0`OS2CL^M`ja4 z#8C`}$k#YNoz*k1aC~lvY6<$|N7vi~92@hb$*S`Jeh@SoS)bFvGYac3JQd-534NLE zWB)RmOaa>2Emz+BOWwC4JBW7K;y7_q6vJp2?Xa5UaiZz3v*f1?md@+A@U?j@rPtT| z{24y)*qZWa7wUaxU?79_o?QtmyI6jk*ZVMKa=*)2kNOI#gGV_3M$+>;h=+`gjh!jQ zca?W1+v-tI4`98Er&S&M&SL?dzspisNPJ5$nUF7G!UnVF6MUXm5y4AXYA=(F29{rX zZ_)q7_pKA#+Vt;QQTjUH8@!KK_5P}g;IAP6fu-^a&nrsmI`t9EwokaxzhIYp*#8X1 z^EDke9<-rz>+S>Sxvnw!~vZHX*+B*>%PtAX$FS8L_>_#yw52f+F;lwcnFZREuOaen7wT_UdkVqmjlvB4MQx`p=B z`|uK=Lct4hv^AlCTL*?FHp7&-& z1MOzP5>ui7Y_-`NZ9I>Cd`#?Lsemz$^XF_-T<69(ZuKPM)Jxr6fe^=UOelbV3i)nA ziCW_BhTT6j)k7XVK7{%GCEJ-clU`1Rs655ryRX%qr#@M2%s1gXs;aZ|iHR!Y6T6(P zDZz97Z!hdWVpQgUbG~dVuoh!Hme`F(?gO~Q-d5+ga6K)io6~&0|KKs$3-E)$K;m&2 ze1Lj9_u_XCc9Ord$Y9X%)vfuamsnmj9KXfqXDhp5_Z+tYULF~)W4&C~->XT4UjX&@ zt)}>H;>6Goz~dPYZZ>|A`9zeMu2-dK@@?vcR6qR%&?9rIT7vv7*p70JIC-#NgTDd$ z{&f$mD#3Nwt8>(kCX=GVnz5@O;8DNC6_1DZqnNF!rCtyPiy7V}%o_&8>37=p>~yZl z9n;=yo^l?d{yB84TU(0x%!lXE{tagz^wMrEE*SWGO7W>!KV@xJ6c4Q3{0HLTe2~&) z68c|)p6cl??;)-}G7}YuH6w@_) z-gHfEEqMg#RxS0i?Tdc^UN6>h$giKxHZgA9ELx8dw>E{wROaK_x3|-L49~aVyJ*jw zLe0qMkN1vcoLoOObah=P&o`I|hxuMUEOdzHtNRBa53I%VMC5sF?^R1F9)9u?@5kri zJo0^Irsj`>7f@;vHgX-dp z$^*shpEGh)@2_HfXgBA9SjXET%6t7qemB;AM}!FM$tCuCW~-r}m)JM1SCDN5`^+RC zo}j&d^{bPYI6lS1&;E-2#`x`@=)4o3G1SWEm`%|cj?*H+WaV`O?0j7gDJo@KLl@SO z-&wosObGjveP?ZjA93jK_6OFx5NOct4PR#FwFAhD;4L;7SidIdp|@-YY|0#Y9tUjk z<$Il+2WK)bp`Vaf5*}O%eNfu{pTKhgKeJkUj=VVdnb3a|RWf9WUFVmI`HszYRI8Sg zrI$!{S3k8KY!#Qzs#g99D^NBOz$$VuY=c<-*Fah^s=qGrz#EM19= zKLOAGdVLhM0M7IM`g!E(#$T>njt_Lp_u>Dj=RlPn$3Z>-+Zp4Bap&96-{2<%55=|G z#p7Sc|B>ebAMjE5KifOk4xT^){FzN#KLr2(h&&6wUHm`$AJo~(-1q0?FzWYz1^&-? zEaLtJ|I_;bxa&5d9~S`sUx^pK6aNSO)^I2O54ExKHr}1Xy%!|$fADF5|6?C>{LxJ;hSq-@VX7Hw5+x56O5U8LR5idQj{Y%0BJM?)7 z{II$ME|bv+o=CWE=iS0*}u`bRu<^}kU`?LA^F5o?HwjzIg;}(}70a*%!>!O7t$Op@QQ?QDBfc$*p_GQnM?dj`#HN)ej ziz*?3Yuuc^uN?B*uP$9o{Qu0-WkZbTH~54C;`2pCK^_0EeQ2(M*M)UgX7uamk6*%l zn-V_YF34&rr^3WZb_~awdEeeuolgOWX^D8}4V2k|6StOuCvYqIxM}(K1MSzNqL1a5 zM}+|S1BvPB1WIp7UkkTN?dLqj8#n$Q0YV%&=K9Ps#{MV5edgjg9cX*tAxYfP7A+~U}dL?HCL;ItkmWbjSHuLZxRbyYdnCo$ylr!;&%JcRSe7v=8d z@!U&ile9Y#hc58=(E<^E$P#;p2XPN5uT6S*FV{(lX0N^uDf;Wkz3ji{M^nISm)K2( zOA9Ff=^JX6e1OFR$1+_1SC7sDH$|TR!F6XSpBy~pCk|a4^c*f|K-|qMg?WfCtvhz2 zCklkOa>Y!s-8eK?CBl2Mvfr4c8qi7b+XjkGyI19a97FHp>9w z$~#>4>9l$d{Y|?PD`L6E`;tN8;3rBg-Ncs*4`#1`cjD?0AJp+}%duJSB(6(8yLyW_ zeX4aHI4$xo29D+v2M@?=KF#-PJK2J_DsjYj?F!Pb`26Y+a8mfoQvnaxO>Yb;D(&03 z8(G~iuY|bn1wYnWXr^Dce7V_t4$qza#?2(l-Qzb)#P1(UD!VC<%Gy`S4=~A@6mkCM zsi{+2;3sWUTsP_etq`LH*k#<_-B~X2JI7w!0zOTtqg4#*e1b}g_G9Asi4%i*yj5V= z80r`K*sRtv-Y3pJkM-$Ndpi5bF8FJz@`H%V@VFgceXi?O`nOtRi6EY5n=s`Y$v=>f zl}B;iwXQ$87g-moI+~im7l8kD!>w=eyU%R7hV^Q`{p!_Bi1qffXk>u?>@)MR=rH7- zr_xv-mpU%5eg}Rr%DWgul=Nc>w`TZHWvV78WuCCi;*uvvr;>u3?Z-4rap}(WQJ=S+v z=Z8pTj~4L0wOw;r-WN~DW_e%N#;4HkDCc$cLCSvr9~JO?U-0oxO5fOU={fi}$EG|X zzF+dOyrblQ)V3!4>@QB|{>m;qN2_t&V1H5lrw;LZ1OKrcy%G8MMDdq=kMpxLKc=5_ zrur7XYrJaf1L-lY_lb9u*!A%Vf7!>w_c^{Wz5fc=UpQu5B+g^Nb3FyItsZf4$SbfC z^=8|?@;2U2zxiUr&^$)L0^VQO;Xrs=bb$x({|2tVh0oc9{y~ZPkaF9C)aS=7t{^_B zgXbZ6-LrD>qH~^(x<3)kdBpdn4qupO z>E=8TA5tEoy#syDdCe0v+>Q0gWTVNPZy=tpfq)=EUfR2@+TM=!&>4>;puDTgjVEu=0!QS3X@E+gQSxV@O34paKavR?eICFIY}fDhK9RchKrlrPIC&Ng6vxI12&r5$BB zBBxFOhfPlgz%Q`3NKc){{AO>7rh~x-*mE8jR+L&ok%-@3kqkz@&$=U*kY_+?6#Ba! zCH{Xp7!2aOJ?C$XH5VWcfEeC=ld|F3oT=SqBE5Z9+I;7$$e#g;AlVF#cp}&dy4>LYxw0=sV zKg}%3m3;oamj>bAfj>)(==&$9{>d`O^Pe+YtzqE){d145DrgwD4MYV~ATV6#b^hMJ zqdt6DnazN=3i~XoQHEila~@_MC`y=9E7^}0;Y1){+9QA$u)qUY1YQ9A%ozBTpaE>+ zI9Q3_QGy15>l0O6&#~U&_JRNRe^$aTtqMWv)e+5V()D6C6l9!KPt*rq2lCGvg#_y@ z91^>TM=i^G&GfS(9L>jhTM^T!w@%y9R`0%vDjX}(4C9FAQoc4yXLVMgKNERn6HDNq zls9x|c;Au1NA!LhcI^a@;lSFo=7e9eer;MbMbFwcgLk3GXK}1KwKMg=`B5zf@&N{; zvc4~XZ%)&A|ComL0sLsZ&f`iwFDmjm52~sj&xHHP1Hisoke#+{ZOaY%V>fD<*_?ll z=fUGBC(a{Hl`8cZ4*`>e{jrzYPkIJ`QPCa;?^ieEvRox37>&WLmFf+^Y4Tg5u z@k{Kdr>B6613!J-2)h>fho-dJFv@dl1C_Mf_Gd*O?bRzaX`M$En7nik+pkbghfC2; zpF8-LlX@6wg!l74p>l>eUsc%9g?RCN`;@t&ocMopHtpy6kq4W1@qYQ>fJ|u;TX8@9 zyx7N#*Y7Tkb`qcUjQNEQyzeWTWTf3RD#w81K<{f;-Y8-J5W>L45LZ02AOc9!B>cwxj;+7L&op>jvKt4aT=({u;Or{D%7^h$hCprZf$_ zf#bI5Y^km<^9{S7qrRC=$E*_=cTUY3XZgb zk>71Gw<&zj*A4AYa~%Ah4?IMU53?bU?UQJ4*G6kpH=gg4LgE(W|E}3VJfhRKC{GMiPG?)M(0&O>XvJ3gE^oo{+t&yy`ml1iKlanU03h9fWfoR`;>iaj-PDy9c z4}p)SCFs|eZJ#QS=3zWJJoqryOD3!6{hoRM*`Fo(^bmOf%>RSzR`2=~&%vLHe5C)% z1JH3S=#LMS@8bL`7vy5#{IHu*uNMOsbw4}(M>yO>Nxp2(U;BRPVZ1*A{wcfAPJY^5 zhE3n|z^-2epeTp?=VT7=|8>due*^GC+DV)*5w{+V%G86qf^8D*)|T3K=p*n`(SLYf zmtZu~?s_x1?_tWh5?Lb;K#gUu&^}J5r-zBR_71Esr`^7MIrr0g*|u#*E#iS+wzWye zz{8xV3UzF>xH10B1p$fuO;pm`slRX3F7Qtb`Gzv~Kh4`xOZk;d>K5;RzP$U}Ztw_O zZ%%C_A3!iI()C&OkzWOP%L= z!TkJ#l)kVC{fPNpmM7f!eR53nQ{S7*2BANJS3>Wx{76eH;$&X3_5Nak@8G+htp=b2Ei z`F8NfVSnY@lhL&Y-H;aWLpi^@5Whe@G3RlE*9<+;Gcv$q6Nm$>Kj+BGHGF?{EZ&rl za?q{@>Z`GISfoUpz>qGn?-1vU*{C3Jp12unGxGeXB>5;&Z+*I*IT#Dm9);JhbfRkW zA9!PJKH9A#VNvOX{)vgEV%ojr8BvZ#!Z^SA4~|6gO=l5@4}NBtJOCke$Vr^sR8dsO z^~_+m)x_^z8a1t8y=TRO)od5c6Z7MEUN{(!6K`*VKazY}=g6_(1b)BDYWDMZSB=xz z3AwVT*Gj#3{?qYS? z?23kXekr2r`vYLVH11Oo6{9lo{~9R3w;%yGLhshEod=JLc`T6E-po7~@IwcYf5oOn zq7ra%@PDHL;{Ii?ym*8CYqn=5!|#fk1Pk?M&+KZsmWMSVR zUy-R?4G$Cucvh8rj3L5t#->B zna`jden0GMVY_>Uwx91~FrA#F^!XYQzmNSr@{C3vKUtW4L+4{;doe!2BMXQg-QH+w z&T{<{kEc$v9Y&mQ-otvH^=e}iXdg|En2;3)d6py-=b7q#)gtA{p|WC*x0xPEp#Cro zJ+On{Z>Z$HBjhPAepeb6<@{vtm*fLP(f@T`fG*+RhF;3Y_lqKkjg6&t;>tOk6}Y%Z z1CT`Az7jYSrNK~GnTro641LFTkcd_+d{2%c=t6gl5TzTwgZ1<1G z|6!*Dn01D7AcK^?fg9VAWEYAb@n`|5g6*7QQ4%8*^M?7{Ae;fzAp6hox z$@hEj`!4WbhCShh{1TpF=n?RU{uzn!uk$8u+rbO=upNG87b58yXD^@v>2Jocn7=a* zfbV1O13-RCK@0Z*SX6ME2Qch$Zr`@;HV@#vxPJ~058!=(M^@(SNcxF?fj{y9pe8g= zdsPeKfJNk!#XbOHnE3yW-Mfc!A14OW;W{0#YNH0;mNQMUn!Z-}c5%|GG=e&gD@yD!ZB*hh|7O~hYT?$s1OkjJjB zqI^$#N8L!ZHgAWVxs=S~@y>mJng#Ay*ZK5kusH6hd)3SNq08eR{qYEK4$EgYE&=Y} zk};S%$OG84qZ0A_p7uqCq9Ee%16$mF@k`H2fv&PL0>t}Yd*bVfCin91UkfPiaG3i6G&Q?-0YBQKG^c|B#8+;txTl2p|Ml)i%O1z` z^2+;_$H4>e?((&fH{kWQ?!JI^Tl|gr^abEF)%#jUm*aaX4{Ed5@xGge@)l!1f|d=l z-mN%p`RTlD0Up$%`oq32p)SvLzW!?UJVgK4n};$xn7@A|Huxd#vr(`X(m(nq z$GleSg?^c*(!o#CPxnAFb^`u!+xlfEBJ}qVznjE!kiV^rN zp#9)5-s8KTo6qol#QD;3B1Trt}}O#ku=UF*%{Su}t5v>u1v`a^Gw?K+p= z;X8-=zwpW|@OoVTSw|krnduI~|BQWZ4f3n3r;Q_j@=YGgU5zJLPt6bf9sI7ygS!9K z5w1I9`4>OK^IelSih19f=U0LU;CB7)E9dX!ecNA){2BXMB%X}2{~@m?)-e-Rrz*O8 zi1&9Nd<^)1xUTQ!6!7?Z#~ZJ|UPC-j`MP?8>!6Y9+64Uq&L3#^upgS&r(Ene7VJyG z`W$jkX_Ok?K(3UdyDtUp|8XHfqoYd zQBGH#(LPx`30&>;Pv@Uvd2`8w-IVd&ZiVmHHSpuS2K?gHlGHxLle=n_Q%(Hthtg4z z{^u*69nOM=5=XY@pgD~1ezT@|nDu<`H8~c>dQCi4wuS++lM9d4W-ZcYJ*l~55d};uB>OHkJna6p)*=Go1JiD^3sz6@Ah5=au zPVEuzGX7gT+O4e6Dw1~=kH?#N-F(j)tT)az`YZ>3A6bn&^6|%!@4sMAVZWs!0G#}M zqcUX&&(UBCAfHVa?7Ox)+8>5{qh~0mZ(Mzd`2HiYd^3;b%yTDr{6I|tc=HGYjya1g4es^hGIr7>RR?ggnY~K|fco=y7q^Gb;0G@B!GnjoU zpXbeOAs=}H`JcUfh2IkrE%HUoGkX9CN;ux&m~^3Kl&r=)<}WxM|?_jkZgh3&cZc-hqB;wZ=WwPE#X`rZBC zZHy7GsMX+5f1oFmK%_%GodCdE0B7ni>C-XD$Fv zjQtF?jD@m9PQA$SSy-^<5asli6~IwYez*uY4EF29cksFUGn1J0;2&2c_&rdL$&Y;g z<5dO9S6g}C=gb29S;uW19f=svm#3^r-nXr_W;^{|-jPAXL%eJ&0sofIX{|ncfzoO< z`5EUgBS9k2c$;siua)i#add=34bqBW%ZM}xtHI064wHXENFhQI5I z=8rKxYH!a%KGa*UcJHJ=QH_b>amY*6ql5H=9zo)K`ag}5#ia8A08lgDf9F@QuOlSC zpZ+x13sK!4nG7KQipN%wzssg$@Sh%7YcU#(-~re!#l#5T>r}C^jk5ZY=>T!}OLA`| z-&^{265rEldo?wPcpKya7#I}UZw>iUay9yER{M+nrRax#vvq*>i*i^zLs?s^St#Gs zlKw52=dJP)jL&>~M|v(r`v&x(V4@0khKjfbly9;|DoXgfORpC4Im+n-@^j;TYHLnY zM$4rD{eTtL6()|8nN+~S@hf)AD(x<$c`2v8Ftq#iF-mjiK#KBmO|qNqDXtTP^oL$~ zETh4{=}0w?jn?D*z2WQ&#LxPaYwKyZMx@M})B_gqh$-W#6y{0b?W$PHc9*kh-xlnn zqeW%(55&b+f2E)OWFRV4=?FQ$DFeQd@_dqQiT8znyg@o77F-Iw^*Pd1~R;m%Cp*>3-bKb{Id|z!q#P@(NRpA34 z73D^yHqQUEH@9yio{M#Xm+ct&y=3N`2YRw{#L0S1#HGi0zUCX#LAI9=$nU_}s=eBr z!hT~#I1KRu@PIY;t87*bu$@KVj?~ANXx9t0H^JB53t6S^ZU%l0Jh96-$9^!H{nN|T z*WHqktjF;&wJ}r*Df}`k^8G@21*peT$G?C6b4lX%HI0p}eE%6uhTXTsUeQ5(ezRkP zS*T=wrW@ic>I-=xdZHrhLkvH!bfBENGX@j+0cB>RsPhA|aWAj?y^QbP;<$83inE^K zR$1MJV^`Zzw6lHOj*njL*(OTiN`6qTa?F12@m$2r1se7k=b z=l%XMmV4H=O>6#^?pN2UGOKZ{rJft-^}7VCmHngd^*kfLGZPiiKY%aXtnFi5r5YAD zO(0HE7_>@kzrB_`yw^lk4;&S&UxP)%zCNX>KdHRS<#x2F&Bzl6KKSdwjxgHCXfhRW z9&o8G7{_kfr)OAy*#88_h=*No&G7zgT5YYz`zH`r%I`?d9y~}nDqieoeW~VxB&9eO z_i)^f94ZGchk5z}dFo5-Q?2nJ;~6EXLO}gh^@aQX1ND8itEq*!Vle#K&#)b&Kyr%G z69SJF_g!)-hAx!nnG|5BgWnGR2K&W%nfpdSBZd1CJeD=}D%&#{WIX>C$AxxdF~7e$ zn}~CKh`!)yw#TXs<=s5*3*Hyd-&Yb1i1)XD)<_;lzCGRKjg9~7Du1WVNq!#7RzYC7uwN6p z-W92L!3T*g@WsMtFXAqPvNqFcdl`7!!f`9|SLl2IWEteVuwkIGko=HrANO%ap1PBm+?XdflgeJ)S?xa|>*`z`^eF+|L4w^gg}I?8r#^9%4N zP|t-Wx67^j_uZ&J#1~_HVBL%PjrElI#SnM|;9r0U06!4?z3}5gV&2~NuRMSS{C@%G zU#a8#NSAg8&Y#2kbMiLs&-kO9pZ5K70rz(vqC5rwWdZj$Y@&ba`_FcDh5S~%9EV10Btre>6$Q-mOW+^jzCYtt zPew)P$MLGLn|V{lZLx?E_7?C-RsAKOGx$am^x3%WpfuM{Jk^lx6OkQct+miz`0F-H9mHF3TJFH)3J)U)YkWsLep6%8Gnzh$8)!FfBcP3KEg3EB+ujSM57j0PSN z^iL_`g{u;b8vqaBtnJLy&+^Hul3;l9ySsZUS8$$*MaC1n9!BB;mirVsM51cg7EXl6 zsE@MP2ZDA&b4{zxOR5CoqSqn^)F-0KQJg1n`l>S(PV&nGNWD3WBmHeFSp}EfIKq9!Qa5fZ%fh6pko*( zkatbX4u+AX2>AjGhPR-1=NekPe4YV(47TsUs&dSS$Uhe~o7ulj1@{^C{wZkH?6*GO zv2W>m_9*Smdhk)hn73Bjo6@SX8ttHXnt}g=KUq*vUJv^=7!T_9?&+)x>r(7*CmK6w zXY7pogY0*s=Y!l=V{P`9mLT6kjOC-9j@zzdqptBP@LdK5Vzehx(x6}GVPuPqtMQ)Q zv+FR9!4L5aA%9#4@}p(vS%0H3?&ERXRx1k_@38wtqmlE($mxZ+6b(c{>H{afpK@k> zJ|y@<$|J8+w!-g&edn;x&#z0=OVu&>qnJ-ggrA80n>_IasTw-#Cdh*m4=l)RS$hfB zgDW8&T|VTm#y;UV-g+AsJm8r|e*yjnob7}20tE3p;`Fe4g2dyvt}TEZ8e(3610HAX zj(OsO#qOpv z;+HvmobmsQ@Se>7UtNv$A@CN2+XHW3jr|N3En?n(;;_X3iAUqPI!<}}JL~oHz+dZ- z_vO%Syp{O>efRxl_`k`7-@On2N4^A+I2Piz@%PW;|C?Q2BrqV(#qT5T4_IJ?asR~M z8TSu-75V=^4F6xiTXXN9!&!m1>Ggga-+XVJdXCpY{GWV@55oWP+}{@eNBlYRm*ej@ zjsGueVLxO$y&so`UlD(|@zP=7=zjmli~ooI^Sr;F-W&hV{)lc``P;<*vw!8v=XgN3 zLtNBC{{P!?|C5c1q98B)u%3q@*G|O$w{E>N?*9Yv|J@&s|L1W3oCN-l_xb+{{?9lw zH~xtKQxC9yfph=X`v9P{I)wjjEr3L~Uv+zYARog6TX)^Y|Ig`pG;ZVK3w(eD{2zHd z-;Mw0J^(B)*WUD#WBf~yE%VbiZs2(?w>uo}0Iu!azTHLqe)QBVcfc*eaFG1#`)t?)pza7&~Lf|n9M1I;v;1}4p8RcOd zAzSVqCCfN})4Os09~18fF972tkL7d!D@x)tw{d^?IRV_`t?GE4lGm{gzMa=UD5}K$ zl@E^dcNk!}=k$C|0{^!o47~Dxcl`hTasR-{>fo*>ZH z*%Rof%Xmi%FFeuZSw3*+2i!l|XmVMY51??_;+*sg}D1? zKupVkAJFo5LxxRXMx14V(fGFyJ$vnmP)BeR^8nocq!0Ted)k{Hdaa*v_lqkFmowgf z`sdT%;Cb^CQ`$1%>v>VRryM*0Yh|TO{5~pR5CD!)NWOv3C;s4}XTVTMB~xF3mqkVQevf$pU_N0Tn3M2Z zZQ7)`;itg-iuDO33<)>Z^+w%%-Do?t03nxuWYY%u%c0j#H7Uo`-4TVnsk z2yueVj;9*8r|AzpIQ!;K`Zvp>pV+|jtJg)~KPa)g4Gn+J@_usb`gY(Aj-yh$M0{Gk zeC;ytYkNF$g~wTwb;Bg=kmucbV7I-Wn<>mP4D}L{6-U1SDM8%rRPEQ9j?2iWK6IB4RYlG-|KJN z+fCPvsjw=s;XmNC}6Cr)!qauO-i5 z_O%DVQ$rj{^pMQwC(t!{J<`!8@b|IE!!>+{0ipSH!96w%M`5B=z}i~U&4zqbJ8BY&*y>q38Crz+sLAl~uRw??@x!g9u- zuU~=-afsxvF5voi;`^nDOJbZwsRII%c>iw16F_3ZVZCD7`S^H0){U6I#SZ-5u*rpa zYoh8Cu!D0r-iJw!1JJTjFZ%qqILA-?_!5>RzIW1t_;@H7T^a;&vhke9DT;;fO6Zky z9;;FQJL34?Ocz%$?q9o{7-CPH`6uTWi2skJdPjJ^tu1jG{n}+Tb*IjGI_iA!=|h~4 zKDB1er)W1Qzw85U4&J~Xub2A)WZs#Xwd1;VP4|91zki4680{YGKzDxt`ve$$3U(hl z=h+m$jC^qCJfB5g4Bj{9FV*uNsk;o*ye^eh$dqc+sUqeX@EvU?Kc~)MwEmEGO2y6W zUe0ILN7|7$;GAdXb0wx_&s=yyi`>(`41Bel>X@HAfb5$y^PCS%hC&OaF<&@L-r9}V zY9!_d(BA%|7lGTi4<*vb8-OoZQVe@((j%1K{rj9h!^69F(XVGLFqe}j09+0#0wXn? zy~Oh-b9p)Ek;;SDZ(W3)l}MZ!BmS>E*84o?Wv@2-DslfuMe6OYx}x1p)8Jisj#O47 zzrZ=qJ2&3amOnG;`ST|aed78P=jwKB`#0Oj18{EJktP2^^9HhA$OGpOj5QPAU%AwY z{5_A-4#l{0yJ{U54de+p_c}kX>%CvR>g705n%wZ?!JnkIChW-j@BG5bmDHb~k0{y} z_z_NZyddS{_z`(f&rg||JKu`zKlVRH$1j6)>g&cO_WQs1`=#`6sIjR)*`DLbbE{SA z*PUBOINl7F%EEf+gU(m9y_`=XNy`+acU1G&!@n@y)D)y2B75ALEPhAMq?p?E3~DK1Y9+`q@(WU&d|!(P*&L)~%0$9M7p$OC|y_<+0s!X6`Fm;iVv_}L=%U(f)c2f$N= zKFi_$)ce$H?@IW6c)aLcNk0&dQ2-_VBU=#P1@S9+0QypvM`qk;@2G^lgt#xg^|A{5 z)gCpQ{FF%Zk9e4Io9n2lgMP;T=ai$AF{w);e%4%5Jwm)>Xjx_cIQ*F-1G1$A_;o}H z`RLy~F2#Vq99SESWxd>gwBK(YpkMT|6xQeuODDoX`X2#9iNyUyQOKuXa;|X@ynzF2 zwT$TJeQ{+vuH*e##82FT|5wWWGJkI_98`FJO12d8eew)<_ff7I_>7g~L@Pg-!md75 z;|V28f2>6?wNa*nVr&BM8P3Lh*d@bO>LagW*k+QV=qG2Zb^ym+Vjr$zyV0*J6k28W z(A*F!15g z)-jVC$BL5F+c6xv3cvb9RiEdf2RS|kIP!UHUEKWw{owiWxQ{sd-_9D2vfbtRL=npq zQk*{-ubUEiz2G0o4=Ax)3!~+<3ueL6!m-1X-o1&?KUkvA#X@b|PYnr;+hKOi^l1A%r+DsmdQ zH|_4RIP)0Dmb;>Sj}v0d+eLe%0`cegJ=`d*w6B6c?2ED7%Si$H3h}k0^D>WDEEDpm zS6d%`2&-@87swY-PN`#Ss%B9D~SXwG3z#Jdi!1*My^D1U=sPI$dV(GaBnRUS?yK0L{Wh) zQjfj8M8L*Yr7B`ci9pEfm;z!es}AE_N48NY6o)ec#&t`J21S5XZfr`jB%g-7a3H6zXPfyPv&mvXzg72?NUE-9+}i!@pHJ;Gpl%lG9>{+e$NB2h zgF&n_wpaUSQ0WZwKORpvvt6N(T)^kKC9enlVUuFJasEn`-*@yf+fihA^I2Zs;+a5P z8SrV3=Pr@ov)CJRf}g}J_d!FPiMEJ&w9@|h;M+;y&bEM;`{Dw>A4{L2oEh3@c%4)U zcuF8=s;n@|N+tL@b^7jdk5$}D;c2{}+r}@3+;?o-Y&*LfCKq^b} z-5eJ~iRjmH|DvHGj;|-s4}2Z*yWw=85&h-uzxyuI%V#tC{5#wqfPPyEoGN5|1noNL z*3yjMfm(rGkMqF$_#C70&O(morD#y*d-lR1&+~m|lZjOFCtkgJIp+!L zsfqrd5H}mUej`RXX7aY*%l;``H@N6T9Eo3)5ih~~*%-zT{194gBGsnPe~a|HmWpxS z?_bD{QcfD+prRb@d1Z2Z67y%_wbvp%Uud}p{f>2%$!z3(;k(!B*BL#Z_Vc_qAmTZb zHjiJ;a^Atu8mAtpG49*XR`LcbOCYig>{2%{YLY@c=LvB;x;TpxE^|0QmWc{{!DNoNG9z;|TwMi33=| z`ERY?UyS5y)h_PI5DqK?xc_NzvZeQ_Vs$ix3ssD zpZfhvIA8|#q$p=6VyeV=fTZNSmw31q6(l~l?CvlA1L_6Xu6qpu>W4BV3Oxru&}r#G z`VrRWFX8&vMGxXtitQIO65`hppQrVFp4Wv_cNOXL+u%RT``yoOg&crn)#VoSKtJnT zVxOL#&}Jw6TKK%(TnBvn&AuPfJ{H@L_OiXF7gDpJRcfL)$lo__E=Qa$Y#sfQ#L9~#jxMkl@922G=6t%=KCvAj|*Wv zp12F~0DXPyxL!lKGV9A&$&AZptkz)f?(}%3@O#a?2E74^FK1xKme|uMAVWEbdBd6yjkcAro=^ z(Wo__d{Sx=OzS~gn$s6qFQsq8mhtV_FFu`GKz))QVI33f<+{XN{)KNLT5yw5l3_<< zJg|=h`_0qdIZfPM%XD~nY&K6_v2t*GR4RVW(ZI(0=z?>N51$ zN>aN~S3bM+9vj`o1!H3s7UfZ0&TANV-@am4*K&Fv=c4>gY6EZ6Jn z+#K#s+@I^;+_8@T1Ms`~eZ>E3YKZ>>{_oD=w<3=3#ouqj|A&F_%lN~6x8eVfGyv_m z1^;hkUH|O+=l^eW)T4j_@qd0F@qcW4Fh~3!?i=9#jm#HDea&Cq$AIw_x5h0DyAV%- zj>+N51;Ck^r+gFN6qoAFqyIGo5dAX#ziioiu6`{(_R-!K24IC@;i{R^<) zw;%CF!;CY6Uu^1~{uW(@0EX#*o|zdMLS7o`Y%X7(`)_&hVu4`2#QRID+NhqOTJ?8g!^8UrSmu}$Lbt>@5GsOF~LL>11e*@kRKwrRn zep6k4=Ih_YNr?LsM?w7<^*87F=kWd-bIx@Wc5x7{&2vwJ~)9C%!*pvM!y53={__s_YE#yQmW z7Y^*M%tIaJf~LY%70A;kAMD#+b{usAcKmeBgTT+1E#L4X;^?mq{f~}60nID?_^vY0 zasLkhpGjdj)xrv~0)9skS0bH1yHs}6|qW*K}M zPpL`X7d`dGkPQ2v%xbm%>G7++f=3m^AH3|7g!*Nu z|2*y<#yV^vdf{)l9&3H(^l|#{MleB$BS)UMLcSqy`^I6^zsG(61EE>kvv0=l66lXD zD~(wAyQ600FL^%c9@u;i?->kP`glGqMy97+PKPDabe_l3JsC*LPRFNv<~G?;pZe0^ zu^Z&S=bF!7CVrbftfhE;+u?}?`cW;WV=pj&$(in#iGL1Gz7QZzKE0@*PC;Y!qr#o} z#4*NY%v&TZC+ufHP6BF;Ph z@Q(j(BEH@(RZbAMzcl(apqTJuOZ7*XcP>ViAnp7i(SJAJ*E`X9jO#pYbF`e#QBEIP z6yaz4mQP`SRUf+`ALKZE<+;psK~rP3xmZdSG$DRstvbnZ)LNXVhp^H<&^7?S5b&U0 zSt9=Lz0g+Aak$H9!FR5-e>%MXDxYtCs}cUzlImx(2S?!#tFE-(1OLxTyVrjlerfv8 zF1K);FB+7n74`|(RR>KyPlRrfrs$b8@4iF6zJGIjmySeLA{U+#MO zw|Okf77N$y$-f|}q(bI-Ep_VuARo!Ha*Q;lPB`gTi0ykB{yq2;FUv2G z%1uXq%=z%64(nVe+F9ZXUu6E6Q9gw413#Y`*W<0f`Gv**$#x}`Sqx5sWG85uV#t$zZ`k3JtaRQt+$30%PYkD0ngX8e+Mcy7)_FfI5O8v zs{a|*n-?T%<#Voy{x|nBzHB_z1l$>V*U?#?F%t@qyXoWqU%A% zADB*69AY~R;`Au%1q@BUpizI-j@Khz?3`W4^B2+*G$~rXlnl|?Xo`Z`|M0YtYQu$qk?es5=}$i?52f?(zE zy=&=T#J)8hQ*(?Tb3fDChJ&gML1^VlE@BNE5%7OBd>`z=B*!M!yUb*9V zFYNf5HCGY8XTXB>0^$R9?D*#$oTt&T^N1TooQ&E&LB2fex_^Q7{&&`V8F+AyZPgn} z*Ozd-W{u%K;Q-&t4Ew3V{8_{sq5h1+;l{CT zYdF%+dPrFi^?%?%O*7zw3`s zr$FkYe|0b_bRyrvR`KwlnR2l&nrEaO9X4B1)a%;mjRNdh$1Vpf1n6~x2?o5Q5%Dz= z`YRU?(D|P60E`b%qKs=}eE=DH67u1ex&S_Xe}L{T?hAo1+Dghh*0s&qCm)oGkmKO1 z?nl6HC_f=NtMjWhg*Xz7XAXWf__^Xs{$_6=0O@?iW-Z?u zV!lgi-(l=0ihSxso<8n%;mrca_26O<+E19zqS`nGHZ`QguRyjDxSYSrcz`5q}>06q)+ONwO4uUJN&N49O1 z*{W0!_gDR*NSq1l3&aP!ggiMx;xWqPr1?D-NkTjd?1s7E2KtM&#WeKNO8d2b){#XW z?9h6|8%$QI=@f8r=%J$n$oGT4IFkg<51PKbnf~LELm3~Rb0hTjdD8l^^a(!4vURH$ zR*u~mng@=!t$M#2h5vGU^?*4qOt~?aObR@X89elK$kA|1EkSp1*jcJHz8+ztB|L2|n{6^d$7BH<2V>KR<%{S2*9Po@giCyftKk z-mN}#>BxETeRbc4!TMgj$81L23-r57Or>cD9L`SX^ZL0tr4#zPdaf^;+y>mA`f?k- z!{G6I_`4^YguiyBeRX-^C;2>Uh1J^&zJFYnq5nG_1*K{N&vm?+eZG(H(c0T3()~k1 zC;Or1xsSn4EVkFzEo9m5vc71P_EftZxkNj-Ub9|fzgUjSc|=N>YY?;&@8S5{JA#e%Z@$ zJw2c{lTX?uX&?@M$WF(lcoq0+Ive6K(%*eLKP%cjq)|B`kft-)IH{^lgP(BTX91qs z1A8y4&=0&Js>Vgw*_xuPV*4JQz8iK0`ZLS=S;f_LZ>D4DH@kbnV4~cqtxb#U|E_t} z!|V4Hd0S|7`HIk?G2FsCo?I`#}{p1^rW-ILB#XZ zuxk+q5HxpCo*0L+&>vT@PxInal!J*x`!ed2t>GCx?!dD)Z*3=V+BpQ?@_FvVdS0Oo z<&K86I`*n0cI>qC}`5(43PG(N~-s_|_Z#-4O^K(xfdWf{Oh4T{j_8stFbFbVOBVPYoU);Bkdf@n*=``i6 z_Iy~E&#>=xxr=IaamsHknwLlU`i$Q%@;)Ijv6=mkW+pf}WKnRM`J~W?eecEr;8>Q<0%t*M(7dHUe0e}U~ycZ=LYX-U0-?v zsB;cYGqm?j(zmrOz^Snw9#8xaUUz;XHbMEAy_nMDRWDwD%**5d`NlVe1EIKtJP+hKT$#}8$F#&n=yzBuFcT@) zEmmugRFIx22LIb%3uB)-Ja2qV+PtKXQYq@sJz6{DBlb1OHXo)PZ&GSU*)Et1Z7X3{ zixXLm)Z|s&q%rjn_LDzp+x1pq9`WHhMUp0gYikwOLdGqO&PN5#ues4I^wgEAeJB_f zcR@~<1%q9rM8y#qMDFVKZ^Ds;{=G;S`puX z{TW=%E$}Ycve1*%C)%Z&sBYITMoqLE$_k7IQf#9WqkgC~2;uG3_kHGx5<@5DKy>%B zs1E{t7&MvqeVS|cu443yUrJ=JVBOL$78xl=Mk?uJ)?whQ zj2Eb>S+p+EHtdJixGB?`keHtzR1`1AMT0?1`cyO;BE7Cf^kZ3;(maOWF-+XQre@b6 z9%mMBj59vKWJ;q>#mP;Bn)WnlYeLgb;{BBGY?sMo)W5Hw@ASwd){`+Yoz%Zq>)S+X zHX2OD=(oj<8=q%?wGR!o@Vm#4j0D*q)-sDs{)jtUaQ-CfFpO)wey}T8Nc~_Io`v25 zj(+?xmHMy!gctSCiedLCk5Qks8%v&~9xH$Sfs6b-)v6_Vzgv;e&o9~*Q_S}VA7+U2 z!;YxaP!|sNUPuBTv;N)2F5NCc;4R~CQowg%b-~V;B(7u9sNFP=4)plOD_o@_OJJEfx z!~SjbrTvJfT3*nb!+#M6u%G&d@c>Xas0#r6u=2yz1wg$36ZZ!|xihh}<32~Az>ASv%$~jw_S~lmUaMl9u5VG%V#5BSWVn&`Eqj}aY<2hIuS?EfaUHE;`$X8Rx9HQ z0G}Sa75^tbO#Gj9{aN=PY4i2O{{go4THWf{*V0wa@XU2;QyNT{`miWj1SO= z|MUBZ|IaNhB9D;!7|@T?=pc^!Uid%Tk;93JXY>1W_^OWo7Zw)Y#5almBi;e{KR!pv zjeix!htGd6{Ga&eN5ud4-o#(+9qhj*ZttgD|C8UA_-+YjCjPJB?c3f`|b3j;{Tin z^CQQPzlrMj|CTLVZm<6j{2Tjz@7Mu;0WQ9K^_O7K%PHhh>o|6=H6NfJ!ZuT=;K1>Ud6 zcL~K}Lvz^w6?lrK zZIOXbgco-H74t65rUK;k+gtO@fBeTnEB1SKr9_->HQ%kwdwspGZ#uCTH1L*k)Jr`F z{0IAfeb$G3``{{bUfJ<;E<;}ZGr$?3x6WbT`QC8wY(4|u42qL7ZXSE zd~Q|X0&x1+-jwRac~yy|iT}q^v55=#o-Jk83dRYX_}Sm4NTu`XG42=ORfk%M^E=}) zeLvg0y3fEul`7xDt|GsqGMLY2!$)c>p`esgS z03L$+W6#bZ&+3W|@fp!ZtUp>d2Tq-Ht+xlQ627+6aV8aZ4P)Jv-aFys`fU9B3)A$s zeA{rYi!>=`$Is!sH=*eH*?FrIz}r{Yckho&POPt{4w^z-zX;tUqrAT4`R9Z13s+Cb z=0}+ySm#y)T-Wv0bQJ?vby!TjTlrp-`S%VNG>MKsGPWZxzthq5*`hoin}gF8#2p0l zUztiluh!pR4}8$^;Gx(4nK*54NqXxraLX)PtkC% z@hqs=Fp)^r5yzi+IgRHa&+AJe$Wf=m6&Q!Vq@-G0(4J$yR`X0??{@U#RA6g_bx{$< zEzn=PDR|?jcGMw=9`#w+{*Lg(FPP^Q`O>%YNdGBy5cypt)hm0(-zNQ*_tnk3Ze*@5 z%ir4)Uo@Y?_a(7`s)&9%^9toy2kC+n^|!B0?=9{Rb; zqtVsC!>h|)unv$PUVpuRf&Fvz8<(5tcUowx)&2EP^o_hle?i-HEXDP}x^*)7$*x+9 zx01h-Z_m5gPLGsm;rClsXXeQtnG>?Y>td?fRE+x~PmV6qpW7~$o; zKXj%2W1%*Eee`V)_iZh<*NwjMMYc;xyzvPE!^^3evqJ;IIj&*aHLRU@8bU3_2;iy z-bwr)@l-eU8}umtKJqc-QjOLP`OG^0n)KmmC)PcZ0RN7|Q*`EO@O{I7@|5l%zZ#6< zcX>Q>$D_TZ{&>=T4(G++lMvVFbc{bMpJzRQLnhRffjllNvnZ6?4Kv%*#I2j_9(aIw ze!;h*7f9>Uv3A4(Al@K~ID>O8i{(%s&wKo5VHH5mdYBIlJ!N>*$LFU~Xa2AN`TZk3 zg$0T4pL2Du`<;cW-=A_BD{UjP4|RYJxi#=d!|2`dwTLrt7z*c~U>w5Ge_4jshz%Vb znHQ+9HlCit^#uo(N27_mppT5+Ug-|d1>p->#+yYK-mIZM6eW57>f@!Yg`sHhW#sQ4 zPAKy};HSvjTg^DIypI)?Q14~yHSC{+ILj9T{j`_F9~kug41~2pnDqb*LSSBo{`m1` zsay6nwf;Dn)tc~yXPV>vw5wvnClO&W<=U*giG6QihrV*DhWP#iwY5iZet+TVgT3@e z)n9*mTt-if)ckQR>H;)WY+OX#9pVrE%h1QJJ>J={v-^?9Sr?#Jdh+9C$ANG^xf%QQ z9Bn9ACVq!{8Ggy-h!;S7>JE(Ow(8l~{zNC{NAF@1@&ve?`|WAsMjG<$>1XKMFe*27 zykxU2|1#oWuadD{Ja&g#*R*4fWcWOAi3=|Ev0X(KT81`?a-uhFve(jx1`I z>BpG)#?|YbZ(1bkr#uO2ilOe zEc0F9bNpgIaDBuFAg+;mu(Yh;DE)9oqi;W-TeDHt=h;7}Qe(`sSjdKFdHrZ@R|n}E z>B_V8=R~dM4$`|zfTP-fWc$vy1Ewp;2l1z}0sXq#N8xurX)9Z9MxGAyamOO`_qQ%2 z)BOFpzy$pG$TvA7#$JTqDc@95jykEfOd<<^Dg2A7Y~5Dfy{XJ%HBml3`h6<+kw|f+6ceDIo-@dGrY6ewX|m7D_7!@565+g1)~3h#{0st6_&sIi@WVsC zj~;wzAN_EK{PGgY`;n176D#riOgQFeJ0a)jN31dmi#7DSjiu6qOE{D)fmSJ@Ed0Qe zRidWtA+C?zOk~Q+VM*Lov4z%;QziI0*Y3Ru5HquKw zTN0%09n0X)L|uI?i+t~5yE&>n#c>Qs(E-x@SaBEa5Vw2!$E4A9gTTu>9SzO95RbRQ zPXFV2^nd8VCuPz-*}iG+Bb*$Qukig^!ZKeB`r4aq50IAiE#*l~TQ`hAuGo{IP#OKA zN<;wehq@n%74ZkCKag&T@wlRI9=P!KYSiJ$C;!(j{#_~cz9yNV2Z3L@o0}Waext1E z_OhY9Xf3}d?C-?U^oMBX?$ zl+P)VGHLqX#fTUs4p_dry`A$nKbZml6j#4ikzAyG^{h}nulL`Xl*ajM?&;C(9ua<1 z=pF2<6D%Vg>GL6;VO#a?R3Pj`|E1G$;FZX`j|LS!KO5@*9a8LwGeo;=K~2|_9!Xy7 zCOznms5)Oy$Nl6Fl-Yy-|D~#{C9;{n*Y-cF^Tk8q_IC0S%8aA_FX8|)+L%tmX;%sI z|6LQ$0k?h0R$!5Di0B8S5S?SY1nD&FXv7VNHNC%D<0fcNXLZlCq_Cgbx)u>9+Ue-) zd$hpRS`hFrwKCvh=@D1e4#rDC^jd|kn~4w5lw)hy4V+0r~+rxTHZIudqLF zU6*u%YO-0UmNEgjOR+tiQp1hV2L|uieas6r2k z5vLsQ@E%JRgN6c%mpI#&wIycWhdMn$C!VW4*`o0M;qv9{$Ukq^?b=0uz9`OK#QUmR zW+qChhoVs_P8=v6Q40CIOq%;lqwYf>VC1+5gBA<{|v|e*t#VtkGe z4Eo3?=E4n%i1wUEeQ`dw%xW@;4%%N)%qP?dnF!2qoB~pt#CffT7bV#5)dScc$BFw| zyo!Z1Xj;-2b6N^=2Y7U5TJKls;>CX6C&GWT9sRjEG=lX652l5;8ZqwvXbJ-TeUtm7Iwt(*`sXlV!2;%gyKL$1?XS|n?(5|DEwySDd zrTmAwX(66pA_x)ciBo=qz8{P#siGb?md(al@A^n9^NmrrreWcz~K;iU(l4-%>ol`_}~^{!e@0);Iu|7d!sn8V9h1_kWQ3{T~$X&t3Py zasSGXeSG;Z;r>|oah>p;?%v+pasKx^&f)wyO8EsdOP4Pi@&4)+_hO%Pq1e98ZUi52 zzPPn$A?H)gs02MzY(Ju<&(MBVQ>pZN$RjCQ?<;}bD-|j-^>gjMYp>F7L3|JNAMC5O zKIG3|v9)`=*NS1s`a_`}_@Am!S2W7`wtBUcbfP}KNsf+kU2U>P7pY%8&CkL9+g6>o zc_}VHJ>0gLa<5*Kionm+r5)`T$k$RN4Z9ZpCyTZCT*G>MlN!_Q;xZF){T23)Z%xa* zZbEj~GXJAodF+IU=Q!gnEv!o(n`k{k`Fb&1_uP8W`PxHwUjaVd9#8qXPkL5UN*KrM z)>6&6dh|T5btmPwxbHh~SK|JC>jopkE?98ZDB@_lZK=3gPkY^?&d)vKczDy==py3# zu+N6PF*@af|4MP!)1SDZySVIvZ(B8%P4MR-Ue25kx%rYUlp2drUKkZ^k<>3(*3-Vs ze!Xsiawnu%F<$U1sQc@w?@Ia?@OH$93W~zt0|6MaRlt4GK-!HaX~3laULvJeLheN1 z&!in-RW#`T$tn}#8Y#zM_d}lb*br9Rl8^j~-6$;`N4yyJ#ZjA6l*=dN z3h2{Gn^DPT$segFW$-iV(zUkEIx#;JQbBhkXzhRqzJY!VPo(+$B7@kw9_>pvx6L!& zA`n}O_t|ofrg44-|>C96^0!FbOjCOxM5E)La4oa6fqR zh1o)V2mK_bbvx@dEp&qXHJiO2;(8p@cWyi8l|fRl{(v7govma47O7u)=$0M$>Kw^$`9vhA1BmY12?ecb1 zm#_Bt<8=kC_ciz|WraTAu%~5r_H zK|ulbA82d<3|E=M_jUX~7!1Ojq~}xT@PD=gaV@*v8~^X_et-O*`v*91-%|bmUx)i+ zIMrM}a4z4K`2Qjl3h{rGkvHi0KlBJG_ZiPUS9~W9L3G{Bw`RS79L`GoAMk%(4*!4m zI`k`X%G`M0j%VkNrN^r}h#%+h{|k?MeZ)oI)t`^Md|$#}4u8Hi|9>z3ZsN`#9RDZI z`>VM0)P8*ayY>Hx|Nb0*9|iv>?*48+px-_${{H~}a{W_#(|Ujf@i{$u_BdUxAGZr=0QU|d!} z{Ga;+kfJOA;tmQ9%*^~Sk94X1$j}RR&(VLq6$;n~e>L8}>Sg%D$J){Y^XJ}3H$Ol> zzQ-?ZB%RIDKaKjkrEBKk^=`0kKJ)so;QsI8{lbBYJcD1r`wV`^E>h~N4_??Nn%=k(H`nw8tGuCxEoIgj`SHq6>q^zVZr0nxem*s|J16lS zU0t<$ex6_r!jFaTUcS6*%H?#J3e1H9aF**zQFztysr?%AU5I~Zi)Vn_oO3;pZU&!s zHZ0G>eiXnRcA;>N5BTNV*m#&YOm^#*KIB6lFoiR~@6WmXhYw@^^twj=#QpWD{o5V! z2OmOR;>oJ~wdt0E1Hi%7B7Yq5D5iT>VgDTLOWd{)?`&9E9c$UIQ%mpM=s6eS;4dD^ z<98UOFGPHJza)pZa2_aq^S|JJ0!eL+sqDD7quzaRC-MKlmqL%~_$EY}AcH&&FY_#WoF-A;)|a^H^a@7BjH;kw;} z{?~DT+KC42e@1&yO}Aiu@S@G*8ET(IoHy#<>ha&&#Gj3^j+eps`6n7-w^eM_qV)en zE_^9`&ed2gmu33sM_6!c^~jfYXkWU}NdN7$HvUJA@W-9$Z%DK5lMvQ|^fOp|${_KB zdtcZ70rxwU!Ng;%2fd@RwpK*DzN=h#l^9d5|CTPn&-1x=lfZxl|P zWxMOQPPfGI9m5TN)O~Y0GW%O**p9UM2f$MhIZzn=A^gOSl>D!HorBu0>@@qK^He56 zzh`u1X!AMTfA`h4arSE}+ zSws9C`_i@{egJiAqi$Sp7vu3mY+X_j-={x=x(WIA+4wH_ zr%D|oZt95m8$Q_&5>oZdRgu{XDJjQZYaf077R;7p6`2sQcanWyTSm6CL zms``E5061m_cj#UqtC?s;6M9Nmi~Zk)o)ubWTvoko>0FoVEn2d?ak+O$*_uog{ z4E|B{qm+if6!p{hU6!ByD*2l0WOMh}l6U-y+l&-70Y zcM{jve)|yO0FE}?aVnVR^MqsHJvg-=b!Cj@H>e*5qZfaVaR6Oblabd?-Vtl&^N%}Y z`}kg?VBN&$!hL>}c=%6i=jU;K!KLHL3 zJH;BVZ-QSg;LHpX=g)g(&*;mK3kR-dj?}Z=pDv1Qy=Gli`CKKwax(wG|iy_Jk@dxXlMtr6VWpecT0G5Fk z?CS)5iGWbX1Jt#)9d_Y;oA3I;voFKGdSK51v=90JffkkczxK+WKSq3j%e2~bjPi70 z_wK!?FtcC%@|SJYLsn}@7SIndQAIp}h`I`z#{L{n`r~&TcRC8XYim{=Kj-?+Nt5Ag zKj>}fl0-?b7x2IX^^{9xq4g5w7SxW3^F^9|7C5A6OJReE?eK5)S_L!n{lC1YMz4cW zI3E0&z4c1fCzg-ANK`ka5+ zoqe(q*IUi99+z_sco*^ibSiL`xO_SupPmFBuZ7|X`fbj3C_3&xH=d5uf7L(!Mv~X% zHJ&>1d#T6B&AvbOHnOWchzzZ(!Yhim5flw3M7cfTPH|^fE zc+6sAd+v{HMSj&4+n;~cV_?6aJUwts_=&XB#~5dKdOigF2YK!#7vH4*-k098h4|qr z^J@GKxoVd4DaWG0C)%lBc2r{ig3i_KtR(IaGhZUz0RWv8%d2~H>wdj1Kq2$}84qAs zc2kaEp8#wGOgt6KeZ;Zh`S^zvWdTs%qp^BNeJ%WkdLE$R!&4oH&>GRdkSiMHc_p4t zTn78A3?YtUlaxQyQjGrX%u0)lvj9$-zEXA4Hk+PUK8f+HjVh4Cz|k}5{gYL|*+W_r z{i0SSsn<6Ltg7SssI%0UkMTVXhcqbmRb9%bk7l#LKVGt#f2f?He@qK|F~0DBMclBb zdQdk)33fv6mRWndF`me~%GT4LYLHGG<9jYhQH^w_O>@T?2M|?c`ePGPIKyLU>lg2# zAFU-F^XSjll7SN3e_HW*>F>SZOSs8b){IuheyG=)Qf#M|*a|*EKg=DOqkpaCp@fgu z*VMP-cld=v(po&HDk@1~`g5gV#?9;0wEGC#hkn9$ykskqq$KZ?*L8JK?~lWvy4z!8{=q-m9O$NySUO9>Uec;q_RYkpWySt6?G|=ZlyKWz4)uffj9Yx%46@2IsWG9}Z z{PkZS>BM_PmGLQvcigfFzQ;aR>Es-a?fuzMIs0pVJ~6@mRGXW*uYyg0Lt6K*3xj$+ zVRNCWwGsWUqTw8$Xee9{c~F&@&T8xJ`F2GaknkM4xndCW3pmJ$-Z{oqi5pK>khZl* z0k%WSc3$Q9#T)j+kDqV<Y6A)KhJxOM)Iq>z7FwQzzu#}Xky&fvffhk z3;4o&{S?;&ChHSVVSKBTzDJ|P?*|@A!>)pyh^EhyDqcy(dZOAG&eoY=Hyhz6o&sO| zpP&DHiHh+NmGBjgkHL7ReF`-0?~L#mdD<5C@0hsoEXSkfpz5JqR<4DCOHEc~{{F-q z`A2QLwud-*-2>UzCaZv#Cy!*=USD+Z630V+CD_gHtQ%k4LiwuN_xhcXpUDC%_!V^l zoc>wHQ3(xyu&x*KbWXPFc9`2Ai&4%_#9H*axoPc~r5N?I$I_DS*S|Di&Zqnxd17Ok z6Vwemk@)&E8&Dt#m-b!JvOhDYL0`? z1Sz3%o)=k^1m$}^0(46tkBclz`I081=}-AQ$<%J-)pVdeHXi-yP@_pIqOVFpqc0sU|vH$8?QY!lkWylbptm|FFO7N`&JMHE% z>I2*o4?z5%`2JEH!28z)xHS%7XlQ9)0Nl3oKWZGnN3Y+X!}C8V^)lao*X{ZJw;y|9 z-vj3VIP?4gr@UM5pSb^y?{xjfdjB`$0JdS>Rk`C=@P3Rl>Qoqt?d!4nSi<{ZW>t_+ zu}!Ln^Dl2`2671eqHsSC%*SlpK)t)G4f*r1gQI0;iFP*PZFGHX5?v1!!=4q3w!Tq} zd6Ef>e^HD&_#ab9=TO?+*^=J>+6!QW3>h3qDh-OEh4XttO^#CUS_MU>Tq=$( zqP_y~)BaE=_IE;kr|<&h3*33oKRvdoYbMOsmtbF-JhTJTp<^RweMp9B)gdG_PJnRFfEm24C39mW@Nf4SG= zA+3*uPxJs!k7cvt%-@&C6TtC73(GeA2-o}l-oX{%pLBZSEaL#&&6)it5eHCFc$bm* zza&Y(?Z1h7{gU**fZt2$P%ZB_#QgQ7en~-ni<7pB%ckEdMjS%cor<&F5k)E@u0Jh> zCF1(Y@yIl(tSr?HkkqhrrRw2L8Uh0umw@McxX#d`npNkEYXz7Gh(}Kd<&5i20BGm; z?2Y-?GTuQ;nlP{MW$UbZ9E@+U3vtFP?DBM4_hYpzWQ9iP+rbScBl&gEV$`YV->1hL z&cr3m7u0bJMG@3Y8@*mve7Tj%OWdnT(++7!#c9PJDv?DO@oXItFb+?6V< za}gN#Qq@a(UCIwj??b*7^I7k6+^74s9&z30Kp0vLDVC+nMd0FwLbs+{V@$CY97oY#` zb;SSCaa9;!zUL;MUB!I|4Y}j@!vBe1en9-+|6%d}D&(tISKoVY4!_RPsr|R(|MC5o zFUMjZ4gcS<=kAH|F6gYMZI2p4qqnjk2)!m_i^TxtLajV2ge~d zKE(fbpg)QKgB^GNI{Y8-|9j&99PeB4e?0!(_zCvsYW&?Cho$^~;{P1ST>s`M{JS5i z{y*ozt?>#s`}fz^`@h)_OV=^~AMihLdY8_JH!1V~D=UfrBd*3poL$5p@pOEiiSriY zgSr5si#R#Ye~^6uN`dec{af*Wr*p6WCjO88*zuRc{d1J~Kf(=w|L5vV z6&#>lo*RGSoz$zu|7V8I8riO;eE^&dyLar}+j&bJfP&I>-8nwT*SQ2q5}9{a_)Z;w z>_R+d$MXb>Z1usB_@fWUabE}a(RHhF`sM2tYaadG zzmGz*%(JV{PI%~#wiK8RkSn*~{gO*Szq;VLyovYg@e|l*n0Q6yPSPFtz+3#6$n$@v zu0Q;Supd8EoMZ=|uwxyJt8>DhMRR1<1%R6u_C4}tG;L-Z;{7RSVfR!W-ZwOqYv((00HfRS zeF_QyfiE3aOBww8sBaZH@ma=qj32AVzQF|t5-%tB0B>-`V^2ni%cxiTGsx3)Wv{&= zP3ijpJKF?2Mx5P0-h}-tt_EB0$8l?5V0>g1>LAq5jr^3)AKJTj z2cr&!6ftHJO^&-@i(?L+>(gE+6A4c%85xneWf_8ZJj%z)Jhx zoi*^6>wJZE0rFHrouF9nShj}fAJAK z_32W~->pxM9&(|dzP+Gb;_;C5VlDCYmf4>uQy9k=6xqY^`~z7AJ_0|`nDTMrRp0OZ zc`tFf)AO^5f+pY-g@s1odkuw;`Yg;_>~BrQ=?DJV+j)=CKhmCJ-URY!P|gJ5-7~eW63KW<+?Ue-oKsi6OW^wKd3+7`XKw|E22kWKRX*^u;i4FfLWa4!OqXmAq ze7jRs&-1yHT17GPz^clQwHrnJZjw|duM_>xk8+%6(yt>b0sg#RiKy9e+Wl|Uj_ch_s#QPzHB?*L;uir z#}e+(W5du4aEX=n-&v!_wQ=3F{HFfr-AOPpDOF~35`U9|{p_8kS1#B|&`N5DRFu2ljU?|10y_Y=@MFd8&Gy7b(D>I z#nUa6*Rggf$aY*1@>i3(uOCkFJzAuFE#uqzel(=lSIYj`gGru`y(|TIUb%GXPjvi$ zW`6Ev*gw6}v+nh_uOfY7vEqx+uT9D;ufEE7GG{xl&G`5oxZjY!tc&|37z}IH0Pk`5JtcSaVm=77ap;TUYRRegbH1ggAAFPg z2HWJca$X!uz5qD{%V8`Q;`}`L&|kLG|JNB(zRmqGf4Vq7PQK54s}OPl{9Keh2^^!! zq(sM=*B75j;rvP4$>+m=Q;gqJnSTV1cm;KtSvPyVT`3D9-fDeyOIu)qewyi2AfI^| z1KC-`<(!1y+^XaM3)$3h>c;`*BhlZ2I8N9}cBR7zzYg-|44=wpJ00nMk?~XRY2s*; zRZU+#349HHnef<7%C|>Uv77qV=<$c0Xh)OU?xWonR?{UsFG>@$^ozoO0K61&L1UwO zeZ`r*u>jkXaAi#^kZ%)JOom3hzprA-A~w8eyPlm0@Vy<0J@ur%-U9eVi|xl&A~6_$7Rw_HD6Uw_o5l`%M&eEi2K3zn)_Kd6?M|jFn$1eS}nVsq}pPzoiyx~ z^tu3HRgw6Ce3aX~z{Z;})|uT{qRs%%!$&u5ZK6zFi(Lz#3mUd6aH`t^ow-hdS1dlc{i z-cxk}39J0>v!7=D`^lK{MTYO_{ihBKY@(Y;vu=}E!L(s!^lQ#;!!G7;0-lOEV)|R9!;`$$FV({Y^+choi z=kwEZX}ll!gZmWLEic);;ivU+Xl`z4qaV`aX*ZI7dTX?u<7p0#>-BFsuKjsE+x<`? zZ;KQ6Tl;F}@Z9Q{$524|Vm2C$e6JCCx10wP*+aF&3-e3vIL3B|^*T$%_Un>2!0##> zi1%|}W7HML`~sez3BN&kkniaqg8s5cLssCnz&pd!ZnoD@61ju#5mV!cn$EX-ywl+4 zIO_4wU|it;%nI<|4g-geZe~3IO&bu|-t_*r)2w%Z^4^2|9-q`2As-v>6a@a>c|yiK zhJRR5Oq|E}BrO$;&kdwgZ?N5M!+w==s5fu6mE-r=si;P~P6YtrBp&K^BY!X-xTokR zO{#%*Qj0}UsDDRB)`22U^+pBkc+~Nhiaf+qk7UJ|etjaQ-zO)_O*~cs6m>#=k4A;f z%-5V(Oal9{X~^SYe5hNM+IjrBpIh!>Tr1KcpEw6S>=EPp*#D>08!z;N?y8H7(ta-M z3#qiTJch6~h4YX`-MFuMFZR3O`CgAv>c#WQcXR*tmGk|8K zE-dMCdr$L72KWg0KdZ+nw8h&y=2e~mbI&Ccg9-0UjANTjxCTH469819;3kneg|GJN^@*y zo>{)c`H@H@fU8`ox~K{U&I`Y=1MP#oX_12*uW0sikmJ4UYiT>{)kl>ia0BpRk-*34+SQ*NA7np8(i0xW zTUZ3iNj@{0lo7rkZUUKnn77t~bx|>KKt28!VMDMYwp9m;O76yW)fOpU$?=Oh+c58t zA8)pnksqQXBb=x9PLHRA>#Gdv6i|-IX*CW0x22zyEc}keMCT8fN53jFJ4*htDrM(L z`~S7Go%e@2+dW(di2VWZEAoBSxWsu`9#ukY?{jC6uf}$_s}kEGVBIF7eMW<*u$@D? z-ok!f&e#z9MGTktd413vPZy&-2G8_Zu`ZXhVYa8Ey`uwo8TMC*>vCPzuIX`QXOq{F zZ~4e3rz$`%J+jGHLHoVO7N6Ees2{M;FxKga+d`c{>V>*k%!9Wfj!BS+kL|kH23!aG zBcXmd?FF!LYO?A@+vUr7<`RsH;5`1`pX%`d z;1}YgH4erBz%0ns1z1i#lq4mZ+aCaN01ny@j0c#R`N!oq@&9x1&oLfRbX4keTXjoH zg#6(;VrOMB^ay|d_onaQ{J&hk9}B3LeIFFR|ESk_I}Cewd{Eqf2XTMmL0+sAh~K+> z=UkO;_cJco>&&mbiSN5~oaI-Kb$?x@3mS?0o)Ul53elhM*jG-BH_R?Yrxh~BAO08E zbGf_{eSZ(E-ypZDGny9D<&;TnCRJ5!lr+>ME0hyq7`l{y?nK||62xb=%5lBUSFFK} zdhftv4RVsWb01su#O8BhU=%m z&+^*-Hm(bX)1lsTpaCiE=5avE==N@rs6qcDo(T(R(mPIiP2_Xb*_h{iHybr~FWzGa zWRMrK!anx;#Wxs7JcIb|D^(|LE!p%i@nHDzus%Jx>He=ATt}SPXf_Ls4=!Ik;wHb> zk3MDPduwW*uofJ6(e{mYFYw&%O+)EO!Egic{<*vpzSiREyrStEA0(-NwjO?I)Ky7p zBYbb%;jUqQO4#S61&H|Fv7=ck2A;3T(rWrqhdfJhLB-Lw1?nqhK0U6{ZYsR=+E;ii zB{UpAvMEoN0>pa}7b@}Cx;_d!8TA89%aGUIV-p{6?B?}wL+IB(ugIv2&|{l>>(4Q+ z$dk8XLl?-Sk;Mw+g-_ZPJf{Th4v3OE341dOe<*SBqNuy}El?pk^8fJm{^3nrciyOw z7qF!ecb})Z>C<=Hc%3)cmTJ`7T{eLfjM}>etG8*Y8)H@lo7cTvD{`Cgm{PnlSc-jH zjMRjEHlfMekf54?$1_Nio2;>8V~v+S2?o-n+qcFkNo=oaKpx>AOX^sREY1CV#!;Zz zq)pnp>wmsJqnR^j&X4ao=ll75zo&{a(Xg$G?;X;1ZX=#=R(Dk~zR3>g3I0B?w+iPh zz<<8~DB_*KA3gsagC9`We8I!G|FZsfyMBY;B`GQ+PQw}{X3yh$w6uDh`G``nc^TIK zmz4@T=j)@fchv7hl9eDYWQ^{($4m(yjYXjZ0W@B)W>KSCyrZq zgZ0ucwOLD0zN9!l#&PuOLaOC0Jf|g-huI#c;?!?n~)s>_G$4?^rxq9iZPll1IS@csDLUq7iQY zg=K95{1L}qyB~hYp50g}0JjfRS8bpl|FJpUvCsDw_x_2 zCmX*IOH}*9z$HX|Ec7VO2Z($r%(ww_(W^J{oPea=j5zW2bsdqq3(T)c>P<0jL3NA& zD&zlOi>~X~=UeIVOXJ_7|G&~XV;h1Wt?szPUI1PKaMzQQ{!U*il>+|1(qk$rD$U{l zL%{#H;Lq^yA0B>-{{K1r{|7&K=%E|&|C*YXmJh=JfBMr% z@eBR~?r+2eL>w;Qf3>x>)x`e+XWdKue|T!Y zr|@?jZxsxjGKZ_e-sD5PHd6s`9KgcYac>~WD4t0CANl_t{9k;O{WJu>f79ULApQS| zm*(()5owkuhd*EU{||+KiNEW(^GEalCtm#}{N?cIoXp{(ISJNCBaRLDqws&$^NscO zyZHZ*?@s*jd;(t2@gRu*)35u3@c$e0qyInF8B22b@AbI?`MBQwSosw z?_s=Iw6}+N{B`^v;{t#0l@tB7amS7wALRcJxBDfz`X{c>{B!m8q4+=Q8LxZqzTEw= z%l=XL|0K$X^X`RQd2=$?4?n8RweNM@KgR=b;k^4r{2zYb2L2zxAMy0HYc;hD{hR*v zH^u=7euQ%X3V{EER)BW!!taykhM?ZxJqJL;K_;|=Gd=+A(&Sm>aQ~cS{D1fbR@{jH zvmMD#;P_{}0o2P;N~nGKo#oB}IOFs9d?NN2hy$=^0qZgk&+#CBYg)2oDREjM65)9O zK0Icl-8lk#jScHn%i5o;I`^opx#!^*rfBCj-@NqUD^I$bXD)s#0{pd6P_JGk{(9|U zyM=LTujwI?cJleexZ&T{8dl(sKG|p%<0pvs3#varxf#Ue>$tyxYiyvs+Jpt~4R%V* z1B~n6Ugtqz0N64A2tR+D1?$Rpt2jguHTW(z0l(>@(d{XoEQ6H1?xTPbK1X%{}1ARg9orMdqX}iRR#hJ3;C{>Divi$ zX1wY0b&663yrye~1Ng|0ucPA^hF`ncBsQ>JihcTJ*s<#JguZkE?#rf6_OqYPMIG4P zl(u~}7EARHM%o)s&t>Vms#Qg;^8f}OF^r;=$1^(XCbElnnPKmY4 zPTYM8fq1`msG+%PPN)Cm&f1?14$`lGA){A3@C>dmS@LHOJaeY5cI(zXI6b*;I3s^9 z+}2h1tKa_X|6)0?oU|NANp!@^C9a>jD55`x+N$(y(<1(_?0Gp1-b`se{P(}w9Be%R zfBvsF_pX{bN<4qNSKG>d8kC-%M!#=t7X>3ewQy5#Ir}TdlbP`WI>T+}fbQ(v{;UXp z%z}nHm*?e80dJ|^b>EKTZSYUM^|p$igHKRpGKn89fyZNF20t# zdgjBY9-{sB@y{VrH)P-V#4m}*+#S~*^tHj?QUCWBY0tTHg{(}%PU+vHO%Gwell6k9 zf&6;n#n|Uzf0Awp(O%Q*=nC@wY;Dyp=J$GAULSbT?r&$!xNoC7+8TM5`@hV*{?C*% zw?2jYHo4n78fS^4w~F?1;_SjvJI-~(KGE_@lJ8wRBtFmkD*DzRE@%+yPG7wEb>jbj zsdvs4G_-px`8WLy;!@OEt{wQC5#K%NuO)9F9TW=PxSNoV9_H1+M^Qr9ayhl zu54``gxxDqDVK>!;#Z)z&eMJ=b>F!f{n*o#P~$_ebNa-gaXu&f(;GI9hu9I-OFTG) zcxA->g<$qgmfJqPYnb@tMB0bySFFYKV-8tlEn**#vwuNbTD z{t@k>8{nYCeT}I#1-tk%*GfmZVYh#zurDLP{+dlr!0zypGZc>l?_cgZ7uF7zKp)%8 zsf*kfoA!6LP(R-;$*ZA1T;cs42A+QRgO{G>`3Sna!rBFS@wkq72+Lht_jpv=#rDrA z(KG0m*67q*mImblz=tYv6}PT{zW~mU=(!bkOW1+)56#mqJvO7XQMw-d z{x|vF#PmDwu-s=5KgX~ee`+=GcbtEm4cy!A$>Cx-37p?{YJv5jE-d2xx-8lRybo?e zuwTI52p$jRfAsUeW$7l=J7@*Ji}#xb7kGUZdi(u$yWBir;CImThBPgGSN`d|0L=PW zM;$##33DLk*^QoAOc<0p0!@l;`6{c?$Frj*mT$MMe>rjeRf27p_m3Y*+o?Z-rt%>90r81Y7oYFY;}@{5 zsq0^u>F4|U?~qTT9KJ9A+s~dSj$ZXR3`5ZGYdTZCkUp?w<6Q6jotlbB(BoZ8@_@rn z`Z7D;(J&wQK-fhbe#~>(yHw6I;Ujssb3U-Z0FB=pi;9Cd?-M+L+wD=z4{ebjnPcV8 zAYM*I#k%rmEIT`cgP+1V0?mP!^+Ff;kQ3Vzck#TObVXwo^EI2rsTG*-mgWsEyd0kN zEo8M(qg;0tpW^#W!QuntmF?K0MOdGG_Bi4fbk)6DJ-3^DfX_XbN%DF}vQy*tu6y#+ z4wn1vhaZkoU$*GkR2TGh%5!Bq&-t0ltX{|SceoCDIqdZWzFb?|h4#}L(_{PVmb?36 z8uS(Bq32IEP=77x%`GMFea@C9KX5AeAMBS8@cM;o{jahge0A=HZZGDOSY2uw(N3Jx z9VbtaFY@!5>Lkav{)10w9A_tA54O_YDB8nz+8qW}F#@}G<=8JNGM^8vRn4@!M~^Tr!6n#b#3bVQ zuPH7v!~XNbHT`Sbi#X5vW>O;UE4}CD-=V!nE-beaSFC;g!pVB%TRy4v5tk|!{~Po& z>`~>VA=Z~N{e1y?!mV~ZDnY-vm85ut_>X$>Cbb>E@0zp$kA+^dtv^A%C7Qh&^q5Xxx(JX+J#jA{pd>DEqaNWpb5W1{?(y@E4m);`d7OI*>2Y5pzE9I$4zC#Q*g;t+m?+OP-nb_fHgNye@$m@Xe=7YgiE?7%x!>Ts+`D$G z6U@gFPLEPXPAWKu0Q;k&V&IV_IB#IpD#~((pm{3*{#r0{J2O z{6Y=Wj?%U_dB1wKDZ>0N_~WQwoaeNA1nVWN&oWuFVIMZLzR~WAXpHxPs2t|H&sy#P zPYyg&=~awd#4Y%3(`#PjH?FGhaQ!c7A>iVOo)r=aJnyo@ArE+-`&pAY zAG5FPxeHg(5AbEypK8SUH&=JxL8-$Lj_o><4fGSYcf^Eo0sZ7h;a(fl#d4oWUM99h zb?grt%we1dQR2!Z65t`Be+*>OU3gEdeV*|HJd&-O_q&4Qo+j$mcTU7@=qE0DZBwY- zv(lwU4z!^j5zp8Q{SDl@owz0Z{<9~=MJWaiIUqg9{!tq^e}FPD)gQsW)wyt-yr7qy z=eys;dhtbP;mvWZXP3E7j@CfmfM>KYpQU~;><{1^C&o7zsphyWpK(AhT&`@YBHjf4 z!Q&b5&%i_TSFNJ{2xiA(d_E#N?Cc+HwYy=@$Gil)2**iRzn=DjPaoJ_TV0QSRi{Q! zUYwI$Lp=Bx;=1=^z5tFQ*;Y}X7Dh|%;5=Xo?lIQE+iM;BiM#I4vjBHB^yLb+d~7*KfGKy(4GDz`4bq9D(6>yxfON} z@WZpyS6F^A9>1CWESdZkY90Ms{rmMLcrF^fyNCU_*kTXy_fk=GaNHboNHb_3cOKT! zY^P7%MSj30*bnl99FOpOL>w~2fs6560h}MuAM4@oDK&t8TH-nhAcp12)-*-Dkf8D1 z%<+R^YO06S^~G}z_FK$(xZl0D$b@|g>@jU+#=J9*K!Ma-r8k!bS#RI*i|~)+c>=TW zUs&#H_FvWbp4D^2SHK5YySjqq$SWv>gdUnr`1#ye%^vt+mbmmx*I%-|RW&tBoTNC? zF-pDOW{n=D-rTeKJBTX;TnmO$;%C8DtMwA+9~h=M-|TGO`K8mquh8xmK5xN1L_Ln< zbsVMmK3^hb=7PzLNq!LGd*OY(QkjMQZb6%U z1h`RU=BaZ@=C^6caudgEfxWbt`XX}i#FLbPi!&PQvnBP~Y(3g_N-r;GznPE61?nRq zD4_pBKZ_#z3G_Msn7-GxD6yV5(s=(3@d1qa9pfw~$p?s-m@k$EwUoqT42cB>`z5l4 zUGX{(U}1swf*k&zlm9t9fOq5fn+>^?IDd&7+o%5myg$bi_!zi9aDL+c{~HYCi@3jO z19AU_1wG)ydi>Vqu$wo37~cQ>>%jeC2hG|2*stNwY>X4)v^kuAALa)vtHgTfc^yB{ z&Ih-vLc`vt>xSJgDeA$E&>Jals+4kWczx+U=*hVQ7BkaZdS5xteX}DQX!#2K#J9Gz zOw*ruubx_9|Cj7y_%haE?GYX0A93O33~+ncQ55BI>^FduNr$DjcF#7ej5uaPb#o?j z=3Kbl6VRTOea$$B0K_!<%hy)xwsT?HKSj2q3vuF2H$4U!5KV@keYI$k(7si}Hl$(q z9G1YxhSZZm%DuW`a_vOCi+}+Cpi9oGz%=yWi_UZ)fbTknI2(a+`kOl(6=v`NoOAJz zZ3sNvT74dI94|SC=hw@VzDt#Nl*`p;d@nh-{CHU@?Oe(2{%OXwYl0s&^P8Db)?y#w zY(Ma-h4WH=mt@ROfCp8smk>2K3VWApd}3ld=lkEj^Lmowe^8dMQV#T6u#Q7~5OcAO z<55qK8v07s7?%j~rW$IV=6zT9=pyv8(`4_T;r_xD?0XjHTRDS|WZ~ZpKC6GX!M{K_ zD4ZwK>D=~K-mBD8x0{0&rUTXbEOGc=p~yu2RJC_NHh4=(b?7qEO?yW5eB`4i4-_)J zr?&bye;-q%R$fnsEN1FKxY23kGhL~!+Q#+{s;bKNH|c#6^Vi-C==*@nW7xsJydHk^ z4jW}U{j8R|{(ku)?uXu~CO_bo;VP9pfbiKlW#5_~u6cXh6y!R;wRlc3aOUygqJRF3 zY~y@hb!{5o|B`dYAx>ScJm!2(6Qi`Fzy1@u_F`G;+Z10FEzMB0&>l2Ha)Z3@NM7Ce6HP6C)24ejJ%QcpK{yg#i zu)Yoaj!x%Q+h6_o5}x1s_S;8z-hei(Cg{%ynsS!>0~3IMLz+w#*S`<*1peNiK3$1* z2O8dxM}cS5y;Rxt5OL>aZiJx;5^t`+{`CEPfcM7*AnsV@fkoEf15{O4w(YBP$jaXP z!wJ8pUEP0wc%?@;W?O!Lc%Se4{ti=F+e)|G698Vn)a|d;EQtH>Q3jL>_~rXT`C=3N z?>+gc`BCC+`!a>a#4W9b$!72i8vUDVYsn)hy)y;s%|4&2-(FVM_7zX9o}H*{Tj|-G z35SeyZ8k(+zzbc)9gGjKYI-(6{M{tVM~Uy7i~7Dv8R_+ZPXKRVy&gzcA|LQv3MjLI z*RFIT?!kfZIg<Q`#2Em7lYg9e|G|UGXNT}R z{PsuR#s60bu!pT*zurL{Mb$Le-##k-k8Agw*CqZB*b#E2 z5g*_K@&Bivej4xhvHe-DB})u{|2oV=71#Zl1p{|}@4m*NM&3{SpSWfY=LYWGjPYQi z-#_C5!mc*rr|<)9BYuwa+nXc!Bfj2& zKcXiiqW`}S>n-Bz=#N462Xq^x1>fKx z&%c8o75yWLaSt^UGZx5Fux;JJ(i{Y9Xxfg0#ILOOY!gG{vYD!@7qi}C3#@53)j~HUO~K-ji8Bn zHrHdl3f`kiJx0Dj?i`a6?1OQ?&5$-T_RBfE|D*c(Gyd_7xc_2$2EZ}|1$R5v!VP_;x?N%CxV+`cb?BkHk^M29+(b1-s=I} z20!b`#(80)sQ@^Cs%cA2m#@8U&EYKYAjEl=v^T|>x{yWda`kor=ncy2R`9*=&SdA4fsbUV=uht znJ~_Oxz|*F2sr&Gm&|_ckkq!sWGQ^$neszskKdZzr4t9j23KjJ%Eb{-$uHqU-pbaEli zv_+Bv4ZwR+({*0@m6pl_>p33v)O3ir&RjIQpZLtk|0>KQu2Xe5VxjzTN2!-m^qQ8I zA1Y|rP*G@_LcHjM|625kDfoZtAOL)r{CT*>qNT@Jl0*@o2{jt^1r_^A0@tV_aUW^=^fcs z6U5QwE-B1@bnI&F1o6Aq^rwDP2K@Xjc~v3ph===vMFkD;_g|LprHpK9dye1n*A=qt z0$#tWh6xMsdf^Xx!ASpTbGf#uJHMDPqs z-IH1(NgRLO^R_;IPt5#7hp+ie-HNICZj1}h_DK6U{i%H7l?30LZ8en=KbIZFh+n(O z{Y(GFSBST@hSX7(f65UBFW&3+1CO9xwWVn>ZtgEYn*nzb2Yob z`-UG^>>Qunl0zac=53m7;&q3k%R+ma!&XrZJFYt>%LDDO>$bnL7Iywk?wQhrmv*;> z7M_<|;%aX4SJOY?oPDN#Bl_Wi1N#m9EphjSTG|bpE?&!QLVrDe;c_+0v;KT`cL~x` zOWhCH56AX4B)DIb^|;W5`$c74hIYPuaV_vM@K}Q8HUYB7!Sje=cdcG{oWJ*U%6+t7 z?tgqsGs}@yl{xCe@2941D2LM;%g!?$G=~o|j+*)T^+yEo{H@V}4EwKe?7!P6&tF*B z^A(h5ZYBVG8tefF=00omZ!By1ejD(4N}LBEQ^L-I=L{aeEG78jh8-E^AJ}UySCU^z zy$W%QA#aH5&ouP(EbG|>z<)W$J@xj7N#crJZ(W}Ua_hH6Y2bKxks<#CUcedbCqTD8 zO1a1bC~+T0K%;hyXH67kj4zMa)s1slyq;DI{gN@Ch++%RanUo{_$HLIO_Dy{h2IB8 zddTx~m)^A=cAEA&IUEK4-&H64q8IpeSKWlB$I06n9bK59428r1$ALL)Uc-4})8O_i ze9vv`#mBKb@(6wn;~N&z@VObz8~TW3XFm4wGVog`8>`pejB{hU>NIcSiOI(Hx+D7! zEW_`lDW$pTPOsg%ibHx4UPOJt`vS4SQ@0I;NQ zP=wcKt*s_rmuEtZr?j(f`(pZzqv9;*3!yhVa^+FWPCcV9Fb;3*r|QRCaMa-Ej0seX~)f7`s`Kq=}z_sB0&l*QSbQ7=N> zlhJ|><`b6kFpqcDjd`>yFF%U;cW&3eOW}4zxpe;P%VD8ziSy5^x}XOU7Zmsm@G|Lm z2;piX7x6|$o5Ts~i}6GdIMQk7w~xsOD2E5;J9xi6h69W_pY+AoP<~rG_E|jd zdNcW}z0?EG-qdfSKTuk>V>~1N|0`bjy@B^Qkr*dV(Q($^R)X~9%LO-;VBFQ+BceaR zfBp_7bEdA|J)6)Z0pn|;xAr?cU(r9C)M!uXSV*ay2OWsBP5VvOei9Pr<6HnPjB$_i zl`R~H6Tyi9?^{(wyaBk8K4WLOquoM;=@xC)u%C}SFa_KJ@d<3J;BR;d_9fAnXH}mV zEP=gdWH=L|eMVLs`8@v@{=d(D1@$uABRT3(?#_QZkWc+n9Et+BgZ{`k3K*}n!LPQG z2eAC%aFFvw?Y3H#^Wp!z`wO=--EjXr>Ti>KZ-cG89rM9dUt)suONkO_p?(XBzx@>@ z%$c%7O^$vFMA%m02pz&`L|$m0PYV1W|6?+um+CDg@x`#_!(kXHyk0p0_8_?L42 zWgjjLyy^q+{Yy^9>4LWo?Sw(t=^%rmA%j>CBOSrI`1-k?@Ym{SHG>b})O!l8Z^3R? zQ{x|{Jy6V6Z>C+!T0Q{#+KbK-MbFZHSul`E(q3kl9d^oCWIRGColDKrUK*0Rq)V`m zr62PfewT1oe<|ixiCCX3Os5M#iZS{W+7&x%=BAKTpz?^t0dw? zV#gcv#DOndi0v*#e~Jmm=M6h)LNoIFS;MZm%ay>3c0ZWl_44wHG4`vDSQa>Xr?c)t zR_FM!t1|Ez;Pp?L%*1(GvxV?GOa*nY(RG8Wg^e_Vd?W@FxZ zPF1hAvtJ#1)k^tX_#v=>z&l*fT8V2`Rn6mm$X$UD=eOafz)hb z0KH-Y<9n0a-_hF6?;UlB5#lDz3l{8?z;Dc^B3y^8D0hU2m#I?tSzh zvedn&=DTmuKAu>J_p(3O<%$Znj})K&KI_*u5$a4bKR-F7L!=7x>9jBWne=V>#9=sUo=PX z9Pm|3FvxZ6DIfVG%UuO!A(7vA^8D5@>gyS~yu1r|iYRQ~(T;h-6m*pFxz@InnR@p& zn~3*qbhmY$)%l#MaO^PkJA!ym>ICKmte4?H#r`~zl%RJ{JL8i09R0BE4jKNc z*zdGwF}~rKXLhxKOkS?+bk0AuTDc5- z7RT{oJoCKU`Q5As=vUyXh>IYr2F~2lDj#4zF%b7*|97VPV&CzlNycpMCwH`sc zVO=R4Z{fPv^trV*?%!tgsV{&p=8VkVJ5K+@f+b6U_h1~B+<7~3{tZD>(I)tt%8IFo z_$s!CCdz`+&lx;{)`S3D7y1MCa@N~715+>X_Zr=d`>=mVitX$##XHP5vHyK@?;aoD zJAeLH$C=(c=G$3<-~F|37IHq!LtJ8B-_oe>CjQZv))n4=^v?LL%n#csnK=1h;QVQp zGxVdGdEPHs$`rQGQ|S;;J>bz=4fd5dzc|&1`o;Gal|p}kcPk~q8$w*{Og7sNz0sEm zAnpP9MYKQ^T;^7)2$?adNbu~~!#URS3jgLgKC37`Gv z@e#eY6wf0r2J}>-@}0A-X2#w2ri4=F|LcopGxsrL@!kmg`~RqG96J8!<;uUU8m{7g zGQHOa-ghbEYTd_qLO~`k{Sn&$CC3AR9RPN+rAz<+;sG$eI_hPKA#b67e2E)yKXBp@&Kv!&#QSf+ z{Uh5w*X^vic&ooFL)Zsk-2{AM(zh9YlR2Ei2TLdMd+aBCf!l6f`f+f7o+qEf{d4j< z&X0K+{xOR0)tIAWC)2Cijs%#}apYK|0z zy1#~aoT0Uj@~<5_7p`fEmtKK?&f&3Bk@9Dxwyv(S6_8Y0mIV8J;GLw6XO>YdWy2G`D&?wXXU7c?Mlf3;=4Z09AXQWc!%cc-Eq;4Lh3 zm6#>$zv|u3K8N@N&_gGF^?l6iu!o&2O4su|f$>y;{8Upgkz9uLzmU}fm&i{Is@aY1 zAFi>=14cd_l9J(mAmQ_3JqCV{-mMU)?UJOv)I39>=x?7n)}Fi zs$XL-D1e{&54e6Wq91-$^|!v9!}Yl?ACcz*3G@d=aX3!nJ+-Wk}=}t!*Vgw$DH%WBZ`&H!W^OTX^0|sb)caK#v129fAIW3|+WU13Anr#--@e&|e&lRu zt_v})K}JSAVcZ|>Fk@X*;+oTC3-rJ9fgL-Hb@Hn-nO9lv^TYNAya#a{eqF^h>T@%B zA75P9t+T&m^#^=R2Vs9=I+jfOF@HI;L#g#_uVFoY^%Ab{t{PrA(mt`|?`FTfv zko`8GH9PqGQ)9Ba6zw9*hvTf@%z$hu!8ib|2X`{bz8=R5%K|c&&Pn%)qA1^A>eME zzKI&8A8`hJ*51!fC;Xkh&kK@5K0xKqlK;TC06`p>QHFQ`Bl6N2;Qem%V9G1N|Nm;$ z-dg(ir z;ul1t4y%ND!k_YuvwWJiwWbri0j()8#&`pF&&_RX2M-|6){MBx%iP6M2Iq3FbPIui z&a_RLt7SS7QU_2TwBI2v(uB?*HQYAcy-io(1bYmmkYhh4k;o|2gh_2G8K#xc*fi5&z$w ztKXdbxcGm;PV_?qxBt`ee}4Dm4fsFp?AP)C#W(;t9s_v*z{@x1`Zw*)XrG(QP+$7O z!Yt*-JqLh175J^ymBC>@moMrO(FVN2^>YARMmxF?j{{*4zkq(d=>HF#6Z=+)e#nd` zK>VNl4;RuHhlqoY^G+~v!ETLn00yD=a_0cxymq&{6?hur0K|qM-R1H5K)6k)Q^jyO z?c@6S%}wM(%w3bqU658;EDJ+VIb!`GN>i)fcjd`RoEM*pMPo|EKRE$w>fA;E_@02{cTCJ&(cKP?_W4$n7u0KoHe>w2#H`F=|1t9$8} z5QKi^`gQXbFXn6R`^aBd<^qlT-M9cI#1q))DGmN$DfgKsQwsKF_zlPAyMf=jlU;Tj z@rV_Ohe|xYKU!uX-k_e z*WlmJxM=qP=kNPT-zeq0BFz)`cMQlQlz4sk0pRT>(jb~0z@F#BxY0^KW#Bvw zk_g-d=S;`QL$);!-w~}KuO*pMdsl#uu=JL7!}mOMJZ!UAmJrv$_OALKl;_)b+>uWi z`RPwfiT{7{lYg=9=Er^>#`;P8FgX<_znlL5B`(}%`h7Am!QWx;u-T0JL{sEA_Y>I@ z55CNO#BNRb5!bJ)H^fQmpdl$~<_IgfyMwu^Y5b9F1-(N+EuvWd?zfQ%)<1XAUHvG3& z>Hpu@auv8C@S%p?-#mloy>b+KWTQLsa{Tpn*iFYYvM_pBy2MFZNw{gLc&iw6T8n)8>-SY2q=fCK5Y{&j<@;$`J6fz=-Dw zN~OFT>2^=2bQWkI;?p{$9+qoMOAE9d&arRw!;TI-{rLm1TLbUEt$ze~x<_j{cnkCO zc$$Ep0!LF2&l2^g_V@1K{etQ9I@?9F#W1Q6Cs;T+(vIt4>D(l*o2D;3O}p^(7atwt zzHiGf{og5td`KUwqP<#9?wMg)dZ7pS!{y4C6WSM;Z%_H8pXvMdWDnDRmHJ#^jOCb` zocbc#%l*A~T6_7P)>iY=>~9Ni^ag3Cv*J&HeOayZp&x8=H>LCd?R%>4!Aa^JS8Fm^ z0=au{*IU>pRaz_)BKJeHvwEC%xoiJ6HO2jK#K3D1cQu|BH{t$OIH!X7kIWpjvwv;g zniBY&s0#Uf?pPPu2RP5-fIQFdw)Kx~W54PfZH9je>UX{;O_^4|+{E{LCc?ukPtVAu z0q)m+J3qa^a{@E^#2nN5^xanSVsKvW1nnN{aR9_5_$w`0;*ls%yI`R_ms&W<-;Z`5 zyoKe{Wy!{Vh4c4Brp+J%aNI%7LjS(c&mU>pT{fW}q0S&T8S@F#jO)+(ryuNc>_4fe z|B&Q)pa{>ily;o^a6e@g49AAP)%EvqyzBGBpT-L~gYmG)1E>f4IudEeenQ4MN9-Sw zgtv&}W5w#>y&T8lxEk$(oDh|fcJ$*Dy}eksfG-651;zv7vrL*f&)cJG%^c@qT}LV7 zww#Ta?ZmIwt{=cUV3YeNR{4SsVj$F?9 zEq3$Tlbi>}+n+UK{o?DgiNZOY6H{Ha7w5^?nvbL(051&doBBm=(+IIf$OKv$zUgYM~cozIApKe=eBQLCC$xkH84L7a+%uR>D6VMmF$LDIc z-nSJz01x=(pQT>Lbh^46{D6P?mnCN#aPEw(PA_~F=g!=$O{q564^Ls=OnG~-eHHm> zEqlhtE%>f=(c^uStPkNiq}x5A^f2NgU?tUYc89%d#UY$Kfb(g2-)Eo63$or) zsV7k1?R5=T`$Y0D{Mp_Fc^*F(pO&as>V)7aFZ5OO>e$8mA*)7DOhC_6cAp@A*6IAh ziOUv_$2VGzhAD4;UV?uv=BK#+8pl_!Fus*>07_GVy_}c+vTGRjXV{T#NBSv)9k$y! zjy0Q-;XHPvw|$o5=x}`I)qQwgwA`={_v}L8pDT}+!0+enSBVe3lN}$V zohD{&g*^uT{g!ZudPlj?VdMCfkA@}YSEJh2Qh!8kjF$sk!{0Ps0y|P^AI~kn?7Xvw z=Q3g*?RdVGzgL_X8|C+e)w5?Q=kJ^!=Jl%c5B!qj_SO+4&V0vWHj@DV)u&(&rC!KJ zCV*3-++B-tOICd5jv`}T8k5PJ0Ut6HVn6=wx9^|gJm6?lp-14SZHu26g5Dn}Ir=L5 zd$VUN<}c`7JqaE#{G4=s(7 zzRL%=kNgVmv#BScWzglYu}>m&+@uGyuXX~uU>5cdL8)3u7JjN4~rp@^7Tlu z$%v1e=6L}x0Y4n?pnpsE$O!N>`16FVR@y()nh-JOMLY3z!~?L}f$JtJg>kQ!_Ed~A ziLzHnC`MZ76Dd<3kDqo`v7hl+!6QH*ROW+lldy-McHX5O7Ysad{auFLHVy}A=Bp3P z4Hz=5W{K-s_5MPRuaLtr<3;=XLHJ|8S|MdqOpl-HQc95q?2Y>qmC5u#v;^ruwl4%b zaiyM0!LEC`G7h^E-z%yb?0vvl@yC8ywQgXN*G;Bg1OGY_?nhh#tlK0Bcsl2se+2KP z#O>DvsU7m+6;=ynwq{nKl*u?SqkL}hr$7BE-KmY0`P5Sj>5d4$(?5NFl;5wXqjvU(cuZ+$f3Yh^=L~(}ST|tc z`xjwY#`jHy`;EB&MRt zc(Kr9GXoAA?^h>?SK~YHHetO8{y~uq_%3(~+8eb3`c=N72dMAHcQj&tx$NwS=Aqw_ z$El4|nyo9&2#`&w6xUTwe*$S5cqbQ8y|20WMJtwORV*)F~sEs1(Ue2rCz8vNI&=d~Hd&g-K3IpHhN1H+mA&{uGMSf930Pv{FNj1$BSap+_1 z=&vc^$iwWnwYoaUb{Y$$2RX0w+e(Yrz7^@c;FDddY!@b4iG!s~`R3)wr@)lYe(qeQ z=o#V)rq35*-auT0zTOV@J27BKJz;;`tZMb(muNHTXY<8rEC`|dH8Y0X#lD; z!TXD}^n)dkc6(1J@^{O!lqDY`XuCbkc`BnT7_ZPDGc9vWkBp3sQD*(B#OuQYT{G+# zcZW_Ty%^6$#(85n2LR^=GQSDfk@!85lwBY%;jU1-$tX{Dc6<}c6^)il{5`EM@_KeQ zUe!u)J)o&J%Hg9GEBXDWX6}yHLuPat?Sk_}Y~&*iReBN6j(FDu_#fnxNZ}~>VV%Hf zwlo>~eL9;p<{kJ=5wEi2kNArI#nLZat_0rpSCXOUQ}I}q{Vp#om#`nkT7yCMOI?ZG zPB|g+d^N-!=(E_aJW0IY`3*0=+Z=2yU2(|k`3CG=)b}N!xYCaC^}x?0V_(;NwzZV) zy!x=1&+&Hcg(Dbu@Y8T_G2$LQqQ}59KpenRU)s)ohp<38`!S}2ccm!h>_2}Wn;qh}f)5<1z10UvyVf7Z|G|d>@Snr`-!I>f z@8|Y=SSK4ezadedIe)b4a>$2b!B3*zBb4^}Cw=W6D*$+|Pp>vYhx-wzI@#j%IL<8vM_cKo#SVnH0V1 z9MUE@#7N;17v$cX4&lCRHR2<#biE9Ii>n#erMW7p4R%kx8vKftuJJ(a-ZQ}U!8@v^ zy;M-80N>McelZ^5NV-3tX?gvkoiuJLjp4h&x6?C}iAN;pLD(<6u&V<148%jwJ8wCw zvc-@`*971ID0{tRbY^W!!*AiKrTXx#{#9eZfG9HVA$F^@xelU?rK)=ZSayQqJiZW{OIkjx| z6xW}+tb|J;9kvb|^-CWPP~iGNmm4t;E_WU13n6`cAH^t42OkOB}dr+jcX)V@=C+>^N}THGx1@qdt_S zxQ)Chxb*>F-?v7W3xU^zpKxDwE%jvIbgPXxKjZm!Lhe0sQD^-BOs4yw!6Vpm-+jzS zvDw7SJjY(LLeKng4Z@c?$OBN~@yI3ApFFUxpZ!VikujgW=)91&Ab!lH$`uw%AN6TM zo85xnEBDLN48P}?B|qPo-`Xq|_E*qM$2kvYX5<6QT&JD$_pzN&pVF!oY~Q)n3VPQi zXZECk^$O;TjBH{1*NWp2{;uOZ815r70k4n!*4814l`B&9&7=y^CTIc>ue9T~)<;-<#3<*}l)tHf`naHk-x4 z^tif8pja6UN8o0}!8F zF)#-_@+%&*wPK7oda0(*)Bitc6a9?W5A|vmf&bf{jte5&uCW3li);POFfAPcwx7C0Tz=%&so+Y_ zTa~G7!bI6;740kCIEUbSV;A`Qsd8lu`p#Yc%33>R(DtubPb_o4U8@{qyoKtyABKth zcc%lzO#gb%8-b0;Cz7~ooWn4TKjs72@XmsrE8UrO>sHXd1wJ|A9*eL4J}^NQjBPrr5G#&y6$As6xg9G+~%Z$P`>i2pBHVmABW-;US6nBxHu|7To) z9R44A^#1TCKKaQ{o`awN2Al&B3gbKg{N>{R6ZhwN3Lk|316JAa$Kd~<4ZP={p2LON zA7Cc_qw#<80O|h^yBz$@H*X$#5C5+Ro)!Tw<-_rRnB6V!$Nv*JM}gnX=ZMqiaQ;R7 zUy?$P(vMu#P;Q*Rz&P{u9DkI#xc^vZY}oL-`2W(Sx%R4T6L5a@!5@4${-4AB7iA8| zFF-w^{lWhjY6N{dmBY<_ZP)$(Sr57Ub8_-y`u`LEU&QVIBmU3#U*|g*>mKya50>=* zM?QDt+S%8Jb4Flje?R`uenegf@qfVo9^&i*{)nfqU!O%i3qH8XVSRNy4glPA^N7PQ zz2%mw>-B)R`4$WO%*vX{-zaPL*6~~m*wO3Q@7bQYa{#j7@zGvQegN&b1{+BgpYyaC{v=ogk%6)wns$aFl2a@RfC zAqZFpdTLryf(zr_?r^})J=xea(E-Yl;JX}S{DaBH70Taf;1TRZoRfLt_v5MNF~qU; z-MKothToHaS5cn}^~bmxY|r0nwtVyhUuH;55Km|q0#{sZh$EcQTXAlKXKW;Hp-g9H z5Pz~Ac!S3SJ0zs2QGRqke;fDv?~CjIr}_Ek@cx{{JdJ&hZ?oV-T)ey`h=YuF!XJ46 zJ0Slnc>vgEy&D(61bO#j?T@k-iLi9 z{EF?^57ez*{gB~L-6|H#HpFKrp0vM793j%Hj!ibU*9B?@h0G}vG^NX>F-=F+Y2Te;Xh;R z176c!XKsxyCEvgjJ@^^o`&TbcZ@TB16_1HS{@QyEU3t_l*=Z#s#n0$bnqmtvn zXYM&l6M@YDZps1<3rF;5JRQ=NMTNfV(A1-?s&Jh6|82M3cIyfQ|JO|)CZ}LAA^y*O zH1YorlkNOn=QKhJ#b)2@Eqi}=kp+c&EweXt|-KLvg> z_F?K(oj7RY)z|y@p6_;j6?PlM8E{0`5m*1brSEmFTgCRzf138dO%wlEI|O^i%@38s zzka!^B`ucHe$gcfz!^&2=g&o2DSuS>(>>&!a_2DKA4m%XWzAyPH zmgAeRE2uZb`Ajv9)83NoJCGqx)fsh^8~fnAM^G=o7axyjhhWEOYSPX@A9;4`2Tsv0 zy4EWGg1i9V6Pm#Tc*{{-Bp}~^I&t_U@lV9j)cL&9X_J6=dPW1G+nMi7_*yl~mG$ju zVSEL^Z+DW9U_UT`_CWlDRpJY0d|r2ps#Io(JmuxC9}nMmAMJXL z<6-z|!A?1~qK9_9FaFJE;Xj1)RuNBx`;-e4=?U)BZ1(WY^^ht5c!c{m#CLy%_mwLL z99?*yde#qnD$Wb9n8W*k_n%F|4zSEM6}4$B*U6Jb1(enPY)C*kEarizfO6eiOMe>R z_&56bBW>XQkTAdeF5drp;`(2=ufYzCzg)V+$nW4$;sS;6djZbxTDo-6FCVvo2XMxi zf3C|C_r3VR-~+tJ3#fu#;k+f@z#IE`ynsa>K(rhB!*hNig7FJGfAjP#$G^$+gvjxf z4*;sY?sVmNtgx#K{rJsc7+lextd>wd$E_R<+c}SzKLJDl^GbShG(|n6Mp_Xs2>yzJ zv47!sN%`A@)KhZ2KZ11K?6qqbFg`r#mhf@n9bbB4&y&O>rf2%_UEt9~-Z)O2-zqt} zc%O9kO@-3ep#X0!buSIA$N3=OFZS3=xLz3@O{nA@v=-%u%W!?g(eB+W&-s^Bo#(e? zGWy$Bo&;}ldEP?u$;rlrw+BbK?g|#`SsT_}ci+=>8`G9@JL3Oy9cErd{U4Q9l)+xP z^R^l_|0eLkl)jD)=fE2ib_9i&A3ftcb?TK&81}*NboOvKJn57A3igNF&iGos?{8`V zf9~tfd+((m{wO0SlY@EY7S{I#sA0<1*1|QE z3z0}E?YJYZCe(hZ`=7P+Ue@zft)i9V|G>=cd5r5apGjV2yQhDxZKs~-v#TxiZ|^){ zA0TeHYbY~ckNGE&YI^%6=QF@l86WV6Yb>^26LHwushLM;XOQ+QwY1Ow4{cx_$GO%p z-O6$G4q&Ez$ba?fJC);50lJ?`w~hesoH2yp3`TNv=jQbZheh*LYpDtZo?;ID?`f1ud zbt#;HbiiQ3dG%pURQbGEBjDT%`1fb5;1eJ%7X1zFv)!_Ij&f{FeGb?ASco%k8uXKS|kWEGt zm8b{omuTngesh;GFBP{Y1FVn4c*Llu{sVUQ3zs67%aoI1tB8K@77MKf^zR;i#L~)f zKQ?Xd;P?$_i6EsN2VJw@iXD=l>!6}Y#|)*0b1kuY_DBFWs275tf6mMNtZS_p$D7>W z8w~!4GQ6%Z$^IS;3M%L8Y@#p5@qOUaUn~Y*=FGe3l1h}M}6MxNKT`C?hY}$ zj^*68Z5Vtc@D-CSy{u!dFTYnVoS{B8+kz%9-fyv_p?C9L z5#W}@FUFsZ81-zm+DcizNTf*P^{f~Ql_ITb39OnEm52K!JICEWpGcq|gZCM=7E}M$ zjPJlX4lg>3o+tq?`ch?)ZCw}r&eK=L9{xTu5bmR_)q<_;N6ndSR^U+Ve&}_6mTU?7!3_9F z{5=WP7nvS2r}&=41LgF>z`!BpXJYwMeiYgM%&uSBWd>&>h^l$J2 z;;|T|#b&ios;gohlwu+=L0mr)NvN!sXJB7rzGhRt@xIv(QxVHKHa3cS8S@QhO*OCXY%q@-Q4)8R zu^uq=sgmOdyqgxK98cg6;yC016k?*LG~pjZ;vdd0ST9%%9>CHH{cDG?E`i_v*MQUN z8I$R2ht9x1D6qcaVL&BBZK}K<6NfNmWy1k zA?_;Tf&UP^O~p!nrb&naPX>M{Ssj-vk2wP^TX4Q9{Nz_T9NhOG?$5I_ziTsgslu!3g+Wm3FZo`9a@gqUDrhsv4o4bobBF8QKTn?j2!yEbFJl zc8n`o88FH*k!Y%+-VqczO8svtj3fWcm5HG@YWaO)Xgq$o66 z%fO>Mofn=yAW=Wm4%gNazn#(Fgx@xJqeFe*6M^4qv4k%Jmv#7Sw^5&XYlpvm8hWQ` zOSYY|prB0P`Vz;h29~?(8Fv8lBkVp>dBsM|f68KxnaoZ3>&a<&A0%%2%@j06R-*nb7SYfBieOfa^{(ttx{ZDr zOT(Y#CFe?;1^o~GJeA$O66Myk+G@6+P0j?^KdSdE46~k-d8Qy`xp`rf*TZk?BTT3I zdLQAwM6o$AuF&oWOY+&iQwdWCoomCV3x!H>B-dY0~xl=4Gxf1pWuUjyV3JFx0q_ ze!KU6EIxoL7;ys1?^M<%{3|^b>y?rG=1$*h3DJIk7=HA1h?59>KPum9C4Q{S<`XP_P2Kn1=s_;QmSWuJ-m&bpr+ey$3@l5r)wQDu zP%zG3D@a=tq9V)`VsYKO$FArS1|@hhSc<$BA+=$z(KNjs4XOxmd=8cvonuGFl1pyF zkEBhWuC5skw(4B4d<2$9>R36lbng2t;zHAA&DQ7c`k#-_(fRQ`-yfgv=lglTKc6q~ zs&X;6h57sEnwlPCxnwDJfN}mWCQo2L0qjpdlf?e(>7Co!^g=n}@s*ZTnECqEbbgw6 z{#)+0^~;?vTaDF9ke%84V`MU=9iP-l*?aCrw0(b*sQQ%X{oiiPK6+UO`o##H$3fzCL zcr)->NbqiiyYL*0E0NFh!CoNVUsqRQ*p564<4Uf5Ki-@3JXcI3?*VWUnK=Gr`a0s> zT7mx``5hj=^;T*f@V*vVmj65PK7^0zh-0n;k8K_&!*%YMECVk+zte#P0?faU>*Zjm zw(IKEt3SIF|0mA*3;ZAafct>E6aNSNKSbQ0c<7z@Kl8u;I{Y8-_J0Wf-?;HMK0S{M z*jwj*Z~mIB~kjeI9sxC;m_TdA_|kPQHS__v8OT zj1S`OcgFn-c+fnK&w8q=A`fI9|L1-WjHjQ+|0j2DL;s$?eqOR($Y&rPAHpBTK}#Bc z#DNp|L;i{u{=UCue~Cv_!v9fT-uM3e|9t-k;r;JF&-X3E-+Vh0|7Sh?I{Y8qu7v+P zkvO0DKj^Aq;_Rqrl-68;Z< zz&7}EalWB}erJvY;P4%$+S*F&GuvUY#8xxDS<}X#aE;7H}4E8 z7c%4_ROd&%^cVN%w&VGtTk>X7^vjFV#oXl1K+E}H4EaTt+wWhM?hJK()~?f=5!a14 zxS}5|Qrj_FZ!!f#qPwVm3*%U9QC>K6pAG)&l{!-i_ZRvvfe$db(-&G)NghCPGz{Lr zdADchy%E;O*z)qzj`{5t#& z>o!p`ujqQ<4j30P&db_CQL4c@56cVTSLJUP=YI?DmykuP#?ErgKcDzNdA#%E7ZeLR|kXTqn?i{p7LJ4E;{1uFbTI@8ki{KRK!? z7s&(Y?d=9%tj1oY`{yFROD8=$d>-opAuxq@feaRAh^L6k|+*ntwTPrK~d0^;_R21B=Q2X$wY?uztoT^ z9ZOO;_t0VNmxerP$eY};X{5<@@!D!(Cz5}sT?aQF`RCE9|(TXey}u^{l2 zp`n36@>u%T#<0JbyCWHkn<~E%?8?Ucf$N7bj*4?d;{D#7s*nfJ{7(|rukNnGfLZ?# z@SO(D>t%W8G*=UNGH&>ayuUc8ceKj?0-&WeK5;i)g40}3VTtE5c;#dvru&~c>;(FmouSHuA8HsA} z3of^rdTs!RSa0`78}6?Ko}d*UPtm^azaBnF|H)M?n5Exh)S1KlfcVGC@okOUxBVi67Se@Wr*{kC^IT5G%H~IkVEM zg-Lh7dHAMqebNn_IIM0XzCNdJ$@BaF?E5`ImgBpYP>eXbXDa^jN%Y_3Ku4N*f7^IU zX@z|~(~+&`eRUPgcOkYs_um%w($DfjDwjJCxidR9#rrC5NEw!Q?eG6TKc@Vo@pmqB z{an!E4J^lHJ^ZGSKRu(#yxz15JQ>K4r|;bh@PE#AI%MEzws*QEeCHyYQfx1+FN0_A zKZf;(-B=eI!Z@-|#|owRuCx9(23UWm9#`Ah4w|LT0>7*6U(aSr_*B*;H}F2s>2QSp zPe~L@d5BZFXt5l2yk#J6Ab#PUJF24`l%pbfH^Hgws1f}jmTxao)*nrtXhUA_klZ~$ z|Et^=T}eNA;c<66@vT$sDUmq2(Rgq_{cwg#6Z}qX_MWn%_4Hrn)PE}R=2hjQpZdiN z-U{W`&CShRw*(@xvIy&?h?39qIG9X;$By*_HhkfFEtyrZo}6fuE=n=VXq}aY>IHc`&u;f}U6q)c0$&+^Qp-`5#|XDl*>9z;SSfzkdtunYb(Z30 zTou;mhORE=7YN2>H{%q*3y1#~dBJ<@s^FKlHP7YXS9qn--KL1GkjK6rtKxe%+C4+e zTR7NTXPCsDP2M>CBFF=9;+=M`E5loyn_2(AjQ1l>3idP4V>%kzfO-_B=in#%WnBL^ z9TV@@8p?okVLi%u?LEnUy=39{hoIM?Cl)x!tI@*&O1}>Cd)|`&HZR~8`2w*1;c#QZD`bQ{snTb33I@Dm~aKjMZSud#cZhXnL%d$YG`hY{bc z!}6iqZM2(@_4e?3_47|;Fiu+ZmYx-~TW(Y=m?R${9Qa$r*LTC-aWu(?#1_u$v_p(1 zR;e71NVi{&`OWNM0#3g1?!#h>HlxkaUJB~<_Y+4STI>_}J!T&q@0cHI?>D_m{9h0|2P!c?XfCY^ ze1ct;igh33`JeCp{t)il*`+vJwqqW$40v7cu5S0Xv)N%c>?fi1nTN>}c>L^LOG@*H z@L)?N@&wFbADs~9D~9b0E{>lKkk`;~pQWGj6ZLNjHpqX>r~aJz0Jbk4 zKT2MMt*X3?*CSjQv(uz|e5%vK?-#-?i}*grpCS(Hkk~S;z5W^GD`;tI+O*&T>-i_} z-=kmnjpI7#FMIS&PwoKP+azVdo2o(n->8TBZ0uXnyQ!x}T=8@b#*byp`S-+6w3#}~ z2H0udSy9LNp)fNBJ;D6N%0Vl55WGXn_PSOJkQ=-iuz^W-)w)2{s~K6 z5A?`Hqlx*Pp+B^|tmFFx-*4PyJG-=mcl@Q}nJWQYS7)hOOnp*zMr@|u z8~F1v;70IMMk*_4Pdzvl1)h(2^NB3<0rDn^Y8$`z{AR~6<#^?q)d76>63aKg$$9y% z=Rf@%^I;dKF2mnnV~_X~@31~y-p#8x->h^T!#ovmMvN)Ud*Gi=BGu}4*3P)lANBC=tnjtd*DxoUpd;d zjPYZgxfJ4z5HFN$sG^_BtoJKy@3jZB*&4LB-hW);`I~v?DC1m$(cWJA-7HlNGUow7 zaVzxyg{8q5=RJcts!?JZ&}yKszMnl9tHE_zM@y;{KZAIC;z6nL%U=3nV{#fe5aOMX zN4Dg*)C;BwEASvgY&Ea{j3@|v-qG&CUgDBZ?#V@PY)!@!LCymwB7T8V_V>dcL!6c> z`gtscb>JbC+w|4qH1$|W8GwHme!o;&1RE0lRmD7wJkUkP|0AwkZwAi*`w*!To{RF9 z@aFSYgRH0%R^)Td6@gFTd@`F~gn4l&>=QW87SxQ)`6`>dF-SkQ+1wK=^#lLwPhcF| z&D!iR`%AT^&9L8@EIrt-9r&%H<=M~HHuO|dwr@*yQZ^juxk@=V*V#lnRV}*4h-0ox z`AYpP>Q0ptCw_H8yUh29;Rg6OffE)b5yv*k+y{SrjZGBg21*%j4Eke($#|CE7uBYg z@;GajA_3e#ldvd|w%Mq$bieoV=q0XqvSwZBx=#g=uLR@JkeuDe>%*zHj#37tBT0_G zwW_zs?i&-Wf$5U^|Vuk~!+bo@FOAmMf^2V7GzS6g~?5 zhWu2~;slTDF@Rcey{K^CB;;8#*8wMAZ_k>DQ)7Sot#e!0&Zf)_jrHe`^`d{3+j6h_ zAK)>D!5r(^aBp1?+u_QN9h+#E3Dv@C&X32J8-d%mIR|1_ua@j?-^K)w|EB3N@=a_$ z!DFOM3%U~C{+X~o!g4R&u1eH*ix*i;eBPN=CIjE&^NF1$sY=~!Z!r_Z@0b@3ykO&X znyOvk`6X-W9%K2^>0FTCTcOkaEq~vZ@&Wfny*D}2?C0ZprHE)ts{}t3>&+C^u28~F zuJF4BDLKYtDQ?C-SLL>WfntvLDGx|TSk8f?p(|{UPu`3-2avB?P-kH$UbEgX>Fao$ z-_gDU*4oOz(vwN*3w_%psL$Ojl&o<3Lj{x6N&JNL@w5tVpsjrs&^^EtdGMg=| zhmN^)g#EF})rt3Gy&(4uuZNr}W>3`MxvtU9F!j*jv15zy9%~_FFtLBkXmQjpcnhPO zT%2b;gE;GfsKovgsSe{jq|}1%SY$gj)KJ1pnlv@h3V+Bx?-LomH>eYQ`_T@C0{jHT z%az0!uMbZbCD@sbU}IuE2m4tnKtI&jzQ3K2F=k#W9d%zxx3Ca zHZ?WfW9vBAI5NC-Bota?n=V}0bNAs5@5TL>+bkAExd6SZH<;@__dNF7+V}|Kn>RQe zCHoueVau92*wN18kz|y1o9pexdf>kHqB4Dn^-z2xT+)*cP1B?QH*S`6s7L0bBtP(% zW!rnlB?A-VK(!}T9Wm|&Z19;v?g|I~2f62lH z!23UU7^fji`2M=OZ@e1X>vg&6u>T@pe(&9o&mTM1eJB18+C>%df7%=Kxc|JAL$%w1 z7f8VW|C93m2RnptN|Ax<=a87~gW~<~#QoQ8++4!_;eTHcr2P*^CFLdn_-@$Su6sUA zzJK`Ha367h*JS7#)70{q;nSWK&dJyyPI1pBl=&x?$Y z2Tx7Xy!2C142Q?C>+cXV>S@5cx7_-v%EVgq;p8PMo>z0(uN zI{B4G>dA}XdXDw;Sn?JxCwuXU?N?#PKH1!% z(*6`vG1M>YU)h54Ab!0sb}!4-a8JVo=P#cx=b^kD&pyWbk<#P9nL!d*%<8K3G0q8c)YY1|Ej0JJRr6mnmWB4^_Luf zFmug{_Nk8zPFSxt!p|d7A0nSqn0nG5jEdBgA+t&0_i5f(8D-C-o3^q)JROtE`MXq~ zNK&qfMkW59Y#4!^4?dM+vvL={PfnVkSC2O)iW|agPm}ro(rv(ZCcAXy)U$I3B+RoX zR@RiW{ZBNyZTeC>J=?3j#rB#lXc>OLHm-oTaILXg5YEu~GMD z=MC*}Ze4`$M?SD5uQLkaS?s&fm}~C@U*tsN$A`b(b4BKeMb}uy&nyKid~yC4;9R$3Az#4V)eL?+NC^KlaXA z8T0|p*T18R6b z@c-fAHBa$=-&FJN)|Q2K-79@3d0+Lv=304d(p(NoAM&X1{=Gg~BX3}M_~R?+=c=d( zWh!=k*10X0L#;2jCoG9I%x~bmd@)9R@TEUW7AC=;sEy4!Ch?wdyx>6n*iHJS`-tyF z(~TX;-7o#oN%^(;>Z!rBzz*KY8nio~%oY(8EKiE_U`{{K^qd#vES>j;{SaA`*HpcIxgY=b#-;Wg#VM@&~+>C|GW&MT`~PhHb^AqcN72j z;g9$~x)1aX;{5SPocrfL|M44?fa_8JlRKFg0R3 zIB-)jYT&r8v{*{_AFX&P@@gp5l{9rJe4dnUN8WUNXR&iH{O9iJmKCFvv#k*e$G^T3 zye9GhQn^v`ox*8P`{d5`&cIC#{DM|z>g_`^aI}`jeV==p$C;#54&2%Kj-^2S+8myDun}31#-+s@n_s)-x50bbf_ zljuJp_T>ry=hsC#ngUqgigEIK7ulz57hmG@99kdvHi(~FR;AyLJjR8=)#lGV@9wB9 zYnXfJaOF4JuNOC0BJSTWrS+d9zJJ$>0^|H6h!Y|HE}YdiSAOF{i_mbtqw*VK%bB0g zAb;4T+oa75zlOMbVdw`7$O8y3vw$~VyKCd#9n%%SM-p%5j4Wqag(b$k{e=~aDj&kW zVuhQ!b&q48F^snc@BzA_NUOJQ>zII@xHyr89gBSd zfG4AUY;}XZS?;ShU36x#j&B^9Rbh8Cujy=&ezwf&Jp3~?_T8HHzk@em&u-6(t>`bg zx3f2C*CJmH;%pFSUloA=@LHp6iJ92mtCKhS=$}i>#rx^ETc$gEFa4)$SB2mQLY&+3 zy9elp6z)qTf%e%iwRghr3%{P^)A7E(?0|{az4N_Y$O~Y!f8hyj8RfNsS>W}^UmAVl zok{pZq}Tsp2Kv(ek|M$TS!1s+OfBZ`Gc)H(&mEN4N)_8T*q^m%BfLJHE;xu=DRZ4$ z=uca=tieJ*wz>T85QiLaMwf;kC0}<4)(Hkz7M_ABzgwIzG)*-GK z`^~m0MP462s_i+C@2PI{8JHiylMut)4`47Et)Im4aVZ$4|F!>e0;NrZ*LyT1!w)oE z_*aZeJnwLQfpU9BEwY|;)lrpx&r@Q3ob@3G6TsoH@9Sep3%|4Cka~veS-;p>!k;IH zd+Lm6w-M-V*5lXLyxRf)Vq>*5HA27kmTd7^{;p+{!3nG%jOv?j(?6A5^URet_}^xH zpFw?{Yg|?L1mgZS*dP4*!4RbuQs7r#WILHog(+jQ*-SrL|2F!4nCEvw54_2l{aJU3 z2k<|DQ?x;UbnY#Va=lShyd<^{YYmIP34{&{rc*&9!#RtGoMqV_;B||@gkE~(c za}7LstylxOIF{5Hm!%UWh3mCBHQQ8!{@2vGcPsVQUtib_KgnITeXa`l0e}Z&fABE- z_t}?XSO)=r%!}0=A2+&;D*g0f_o%|>Ue*y8gPvP+f8Pc42UQ)#x(7V(RIZ)(Syt4o z60t4|9Wb1xpG_C+o~hW5{T%#l`3o2~-l?glSr5hO?ppQ>?WMW74bBa>^ZFyspY_Fc z8P`vk&tJbKKbQx=-@%7H#&tO3{O9q0_E$V+Atl^v0@?-q&D(he&~Kd7`_Rkp;q|{g zFJQQ|A2{Z@h0izw)b|4o$7m0f>rJoS0&|mG<_nD<`{H_3h#rSGj(V*ASA0|m5J@s!wx{+hPf2E!K1OTU;DED2!_3}iw z#Bqgn^)bqHTKy^C_XEpv@QIA}&SvJvF1MZ0l5OMPNTQSiMA+`I7l!z1Jg2p*Fp17B`% z9MMd$+f2IhO5o-@Bf9jDaO^huKBA{xB@LL`OY_|h-(?fNM_-psavqe-1Bl-Tg1uv)>-htG zU(4}CwLsp$z5`WesSLj{;A3-uvB967A`1_iQi4=^)y;jsBdd zPXylx`6!Dcz~iBRdg^*`pFNhni8$A5jZN)o_`8w+`B=Ho3jdPjYo`>xSMV#qU!hl1 zoyX~aIhlCpI`zh@7h)FpMQv;9ErXNL;Bws3OMQ^qW;3zeKN@E|(JPIA=5F50=dW0{ z>;V1d|0D(#+DkQ-Xsj0fJoC60`->qD@t!y5_?)DtLn*-yQDc1t|W z-0gV>^1ame!AwM@AI#Owmwoc=c9Zs9Wf zO%Cy16UaxJ3@_Ew--@)irF^GaT+$tfzpap*luCX~_^~Fe$gA1=4E%lP8aty$4dmVR zSjIH=x1cG8eh0nOpYqfGF-8pKoX2C`jB_>G_q-_mi05MgUzpc<#|rQ(rmc@70Y2w_ zq~lFuzP3tI3gw%y_NQN6OPo~82VtL`Z$vi$P6dA~=Erh;hpMF23HWujjH~II^*rM4 zWcU|Pz|Ko1=np+JmrhYy4CWGkXINyh(6734M_U``)xPA~B<12nP>=qAycl(6;^ZCD z+3{}lpMA{(5|3SlNPx#z6-nXzFZgn8{GL>p@$)5n)yMPwY7ud-8|-_F$$pNjoq8ca zDT1)T_hf5U$sA|Tb#`LBmD`4vR>RH(ALb{i5zeRodc}K#^^!+_8egKWJe43}IaIe%~eQCwaaweiZcp zo^FEYk(WK6MZKXO5*{P#S=Lu3_`G9@AoO_~aNA&j@5xjPO{Mn;zTp6_*N4NUdVE@$ z()hiRq&Lg@(INhd^&38&oZ)*wUjc6>ZQb0dhB13vuhfUo575tNXG0}>6?%dF8S=uhZ+1hY0$3hr+nUV=M1pTb$y2 z0RBfW*G2b@XecN2g4~1tgn4duH|qB;+eM|*M}3hv&A5HU|0AHAzx&UgHM2c(>6nq{ zN17S;j{FmK2H**Z^NSoT<9X8yQGv((dQ*hgKd@?*+=}zc_&S^iKcT{a@}YkuOyxXo zYFe_m4RS>t@ml0ph($B4I8L8mH`E6HLgj&OsSV}a=B6DEdo*bNuPl!ojf=c~=}qWAwjR-z;TEMu}2S=EPip z{VO)u7vp);fN443mt+Iu`6-`Hhhw|ec`FWo^X5y)vxVb~oZ;`YTHkCd?o+D+LC&X2 z?tyyZ^mVKCM_ImDB0kXOY$d-`;`QAec2Ns{8^ubfS_+~j+6;DfN-fnw7t zVtcE-Ep;AtS*tw{zHPt>UL^ilj{+QKB?;37dStp0T)I+BaR$z+h8ZI{JF#6`vCaAjr-rm|G97d^^n{prWKX= z|HBV|{_{LWH6V`ScKkoWw94RDL7x0|zrg?Dm)wqG|0m}C|BvAQ&drSXcc21-p#cJEbT+aMU^B7)E97!cGbEmOE|yS0#U;IG5nkt zu>O(I@_`ocjoDu?U#6zRd+G1nJ0@L$9Y3K{!mfpOn26Etr3-RDD15e)$T=`g| zP@jOF0UzW|wT}92ESY$V<7(fHDGRdsG&Xs;f6pt8UpLDV<>t$2X%Y0UqnCEsD~&TI zUv?4n_S(StXQ{tuJ>vCiu-g*=XnZ~w|lKN5D=KngH;n9oHJVpvbp?<8Tr zKk)kH*f8}jzQW7$`hp7L$B#n>-r{@Y3bTRl^$FF`Clgk4GK=~J4i3f7b%*W;#RBxJ z)u(D+J{S81cSL{nx?1#T+kJ)K*xL66L8vhFJ65`#|HiuWCfC960Ob$V3n zcZU7cy;;l;uQWdT7acy9#R==beE##F=l3Aq;Yy7SyoBrV zWtg|D*PsX3E>Re+)Z=+IuYDH!%!5Er`eELEwZTO>>QSSV@CR>CTM-W*n|+M)X}y%3 zxeI)NxuT-*Se3#Oulp<2^Vm7?Hil9=&_0-7edFNCVZVT_%`W2qqA1DxSGF=gm`Gf| z>&CEy`ZFQNEaWi^_jUt+-oJ7rD*1WeNQ}5RcmitTcnyww3-uA&r#{JS!MtL-GFWG6 zLw(DVRI)3h;5lh?r@)c1R`VvzMUt6fi%zhH@*OZ{9rnZr5*cDgk8#)K8^ z*B_4XIM!2(cABu(W~Ay3c&=`!y_5ZQtE;KBK3UT{Jj41P(62QkJ`Z_avR(Y1eG2pS z!*7Q~Z{&0II)Z7f_^BV3edSP$kx@1h& z8S%X`K8W9e_&JP!@LjSAO911d*P;{lL%&O~J7D)>U$QNo^LRhrZ`Cj!Kdd}(=$sY# z!<9iF=`2dMU7u|+SM@q5*M)Tk#`PCW7Blhm zKEHsx@U>lg_8>ksw7=zAuVO-+{mxh&_VGQm-yLo@27)-Rbc+)C1Uh+3@%+vcZc%*w zU`59Xw@%JxSWdU6a|ibW2#bn``TkFc13tv#w^UZt*Aw3tPNh!}{|~%PgChKSe4@@uqK@ByUAmQlz@+&kWOEw{gHT@8W; z@&EdGOg({eb?JIWSdQ6LJkR_7aMyF#2l(nEZ@{lZynjq{AzuLE|5XXR1>pX!9n+Ke zuHH2j!2J+k?b~*fIRBR(NB$^0r?>C_07|{keljsLg8Lphb+@{j_X`2>D4&;1h6{X- zUT;cre+GZ1Zj$^Azb*z|#`&FlwgkY-*zfKeNce+?_P6vUC0+1PMaS&mVt#kW_;j%y z@$Ov)!?IzvAN0v&5c@cU#ZRmY9y+(vWHQ#iiv8?;K4Bg4{cWjK7vudc7E4sZ{s1@@ zaes%o){p1y$A01)H{v-RLn%+3{Xnh_A)i2P*OlHAVM-V92JrMcym6tL_jzHL2SexG zQhG-x`539;Vxbg&{-bv6SFpdOzE3L>$J7rF4-?nz&jkyVr@uYzVZ68@7Mp=zutSIh zv&8?;>YunwsaqOJG5*;n7DtJ9Z(Da7N67czrU36}9`u1KXjaqj3M|cfJUGRr=a-75BHOKYnMT0_A`i)on$;jmP^+c@=~b zF3q_6p&`7F^Zh#JftW+wD)E18Ghf30K?i7>$N$fxzpD6~$2E!nKZWP~I{Y87`+__1 zfA9#l&g1wM@9q0gf$wGhe?Dgs{(c?)5Bpo4zmGWnzc>CL_N4At@&EH~+BYAB_rL!< z@qfVomOJr(!2gbU+<#sI|L;P1izWOY2Gu;@V*Y!H^8@ZLqMhB0=O-SHX-sB6LBGX5 z02jyy@bZ4We$^`G?+4FAN1T6du01!ov&KHx-n@{*P7DI4ch|r4+zI%j-JbL`^7aQ>Y6YQ`zaVBXHH5&Y0z0ak zIB59oo5>J(1asHZ+vsl|%~c0EUdD>jQhaBNdGYg)qns^aiM$}#nK_r^JoX703P%P- z;QO05Z`r~)f4y{MH;;8o2Maci1Fhi%_W@A$w(Wp_*qWQm=LgH* zF3x{F{h%g0cri70ENgxR_uqi?4#zO;#Txr?L93b{AHP}N;sJ1ffTl;ir^sW#<2U^( zAK(?(36gZpN;_Atzx_M%1)<|iSg%<(t$P@J+FSPnPqTJEbL25f+}1sx4`5yr$6v5y z7<>To7R!2Q=X*L;;QH`OVgDHZUd;H#8u-0DFBE+&mnILu{zM!`0`UW^kAYza?c=cO z-Lszda;z}S^{P)Nm!4;U9l&*JxTrm90^+EXXLoa*TCU9|5tnM;t6s!<^A)S+E&5>R zVjnTYg`yl+U(I5j3;#fsWi5FGzi+xnt2;dD?p;`Es5~6(`uIl?5CPoZSnhWdPZu`2 zI+@2`&NP4*Kj|*}%w8Aqi|O!z19Av{$&FjEPHuBn)%9Ir{G!%ScK~_hIzF=LONbW) z58xBO``BxkSND3qypeg2M+yy9m4|D0IUHy84`Dy%g)0^=IC%1*=l}BUCx3GABzWrH zPYB=vgdFPx;UVngUevsh?v9zl5aes2-G!lb%+s7}&w($!-kJ7E^{*XT?`&9e|1fw2 zT~1#l!uU`|;7gfP9ci z`o{!cOM>{W82=Rgz}CFh2fxEaS!`-z z9t1=8*Q?lXyt^MR@d~8li74^=s(QJZ@l)YbQy%vB%=ePO9f6l1LB)CCtyjO@pJ(|a zxgC&3dr*CHlz6}8L>=-WwK-3}s6NZzO?R6rc|4vgUJu~=T0CNe-)pJVrFh?XNE_tw z(dkDoF)v1B+>N(SSW{9QXc2IY&Mk;Hny?P{_P~z@d)*vQwmDBU#?zio{+?XZgWeB( zAh8)=3%_WwxtaF35^&}(oRzz=zLliJCD!LD^&0%U8|>W&un{f%Xh{EBqzuGs1_JQwAubI5xAnGo zK*2ivE}Jp2s-Ej5g!_f>f`2iYRNtXgv)LH&{A3;RdEkD}&K{({LDTC5UazUwuXBB= zDiYR**BW1MXo#?%Mf@W2lfBXy#Dbr{o8?#*cuu3Fmt%a+i>r@-*RkBTy-XhD{-k+9 z*8{(VRZ9o`b)r>*|0MKznrZv7A(j8h-WIcv3`YVRcodH8hL42 z(QaCd`@15Z6TImUiubR@%~?q^C#X9*na`#0?d2eK(jgjv0n*8)801JKlHw| z!MUO2*L%Ojc=@e)0h^|M;3H!ETcoh)e#N@u4Z(E5jeNE`@)X4u@EsMFrI z)&LUcv0oPx<-lDxIP2>cO;)?d3N{C zthj*tlEViN(jS~zUB2T2+HKXT0Sj^Q5lw^EpLBm0dAv=~Ad+Nz5bfG>|NZxThP;5z zTtI<6*eV;u2wu|`x)05g`%u91o%X>I)e!S*k>h7F+s#~OvCuAYt(7I-cXvLw1NYe? zS=blgvqf4`XJLOdMkkdB^~2)es;{05Ew?RMF;l>PLr%x;B@I6awc3Zh8#mH_k;A^k zuxA>Zr-EVX!F)R9YsK-h-tWMljy%J1cPVZ;*|Yso_LH$EcVPa;zBEnFozyQnRf69H zdPXl`eS~Z6D^Uve`h;PN~ z_#6o7IO3nE-*_CCOr~p);z?=l9Hau`*&^@&u)TB|@h~fw7Du2@Uump1RD^19Jbq~u zc_~jcI+j_?HE8#qpwYhw{>1Qf&O^N}MO5sodZIDX+0;zGq+TyXCK?0q<4XO+eSBUe zOx{3Pju|+w&dla-@;z7u`*=Q!eP`&`EUr44CJ$glQ}I6dFB|%RA0y5)neXE~{n%ws z+-QS;41^2z^D@hf#(w>2;jF}YwCBaAbUZ#8_Q8*cJm;xuiGId`RCVcC30fW?9_s4c zyVr>4j%Tv)lb>%~m5gD2n6Pf^K>Q2rItBO`WfJX8|1IWA-5vh9MoYu3xb%h@;>lP? zDH7(%Yu3E1$2^O9FKL23j(p)+y^rPTm3* zr`@g8r@758%s)o^(2x-3cO5%uF~L4?sz1z6x6yAXnW`z%X-T9^%yt5|1HUyA!uJ9X zZ{Gr*9ro{@mAg5<^r2WUpVPE8ago=(SWsd280|luJM++f92a`C-{JZC;z$XmVEEMu9fy-+qJ-!3`iXqP|^vLzL^wTB3?r0)SIW!)NQ7V_$qJ3)Y(Y22% z{Qe=IAz0E&ovO&+4SIu#&z%I%f$#DD)s4o+$@wr-F5orfcrG|9;-nZ8bpdA+39ySSn>ZxM7-7^8cMm$5D8~lx= z33e0W&|*H67x8CxJ-xI?iv9WP>}RG#4EBE7dVR~I6F9a8>#J0@<8x7|jO}uyHs+$f z$V)2hRq*Qk-EzPQeXcdYE`o%gh2K>^6vp_*dcqJ!`koRl9$91yD8&$o``bAD$iuYhWkwCqd+s2U3*a)d9#bOPfKcdA^58%gWi4xBx zmz#z?i?}y)mCSxW3jBf66f+MR!HY2`5~XtORbsPkxPMqh~eBH;Sdf{*n+mh7#e{b$z6$6u+NGuk_?)|J>yYq@*B=PNUIQ+^8~&pbzFj`_YAgI2 z`qf{rAnqaf#xeSUXBnee^qa*O<7%<&@}FOsBWczv~GLcgrBDWamX zznCHs)Mt%tDn13fv&OzqORQ!+M5TVL=kR^b=Dn?ug@KTP{p_Za9wL6Ub?;MUEGOtI zA>u5t?og2S<-zPs6ZL{gN@9Fsf3@ix+HbwRIh%pqg?S>GyvcHiZT+hl@1H!9nBsBN zWCA`8++EEcD_sX5hf?zUyC|W*GL+7-D=vPIoYAmuTyLNL(Leu)^>WfEh9T|QhGdf8 zW0Jf{_RGm=F~RF{D)%WzoWHKDg8jXt!GzHBBXWoSn>Gw5O6*iU~Vu8HaQkPA|Em`-{L0X{gB9C1i9oRjiHdO>&(Dg zM_)VC=CnPi6UhJGH#?_I!p;S5DAInIR@$4}kdG}7g~oAhNm`H>2>F+i??C^;e$kuj zV7ECV($pyJhg1DCYw){Gdg3_rHSv59`{pIayThRuh}++R>kIr{k|bCgfnUb=ao&vr z2b{1o@W*zjX{fFf@&Ei}g3|4}q8I{rJL#pF1pvmi>+_@Uzc!`t4&{n75k|G7Q`jsX6` z#!aPs|M(8NS=1)c3M(jR`e!=nB0ZU1L1@c%wU$ah$x_08!qncJW=?3n9L((xHUawiFqyK2n zx77e;b|U&J*8zo&)e-iSC*u(v`?c#)#Z&{m=yj%Gm!Ci$utYWIjcn9X&gVC)dl|gY_=C3a%ixQ~q8&pOKI z5g&i0@#RL}19#W+ct9F;ah`}uQU%LfE@y!Aij6tRAYoo>1Yd8^*0I5Upm$~%>szPb z8z@w44>;4Ol+CoGw|*;y`hmaJV>jTiDcaKjSoBbwB8)eiHk~z&}0TsE@_;(4)4o zqq-kax;ol-U>>pN-%_4va~{WcDVT>4AEITzZ@bIpxygMHk(ZzueqXH5W@55|-`Q7R zj$`l<+O{e5vy9Ar?}xOTi|=?V8RuRb8#M5|$Lp1-7h@+9bHx9#%<}EWeqGcPCm^v+ zSqJCazL5?W`3@#Y?qPjO$=E^S)*oxz{A4To+i+o}j`DBDhhX2ruNeuH{3Uw540{?S zMP3=&55{duGyBECul&7<^Hx^*!=W0?Q-bjH48PNt)8N-ZeR#JvU$X{QN~&xrec$jh zQ!BqOs)v1jwXsJLb$p)oour<2+;GgKZ$rH#ia~+ztMUKvJm*WFa4R1`QPJ&egZ+{3 z*Q1=+kI5jEa~=-{g>9TaIy_TiMA#+g8n>k}j^LN_Nw16oA8)){O2S`{`~uUm zp8h$|nG75cGc$FIMYK~M5#FqCS25zNu^(&P*Ce4`jx`pBBk0#JH<~RW@FlKU5qEKv zc8MXTp`V_!I;P4?JPKE{2RvJR-^^eIzo($2!{m`_nyS$6C#j<<`;Ddzmexlmg8}Os z@Hh>!1$LMH#*LVPcCFT6!n{yp?~x=w=Y^i^4KMl;?E7uo*zdsfj|IvDA3|VTq1Ey#{GX-J^=AZ$KD-2;{Ib#BpZmszwoZ~rU-mFsYMxw z@6=1tH;FSF>IQ-Tr*|$W%OKx>8n~yfh4^r}pnn+oCEY?;>?97HO6T_wk1wykfqVk{ z-FroB+=%-Nfk>nRcxCkIsTFC@3HNj^TH0q|wCMYU6~8<7Nj|>M?3X$jUtfE1{3zq4 zMJ1!LTx;c(tNFW>yVP9KvE148ZeIiU4H(VJdY%`f$Lh#0(AJpJyE160;{A_lNs;^m?}%nV^ts(J ztm#?ax|sGf_bm_#g@N-s|3`~?%?g7RZ_-;5KS5rFoqj{;-5}aUHZT4P+Q}n)VsJDF z-o`hDff)B~kbKJo;{H%4zsGj;38p@_>)_gY3wazq-{?u={RWIj-dFvtFz|kNXz@9(>tQdru) zg**XasiC44zxytGfNvw8YW=}?tiVbA!Gp(Gzhmv`OBKL9%R(dU0r?Oee=h}|1J2N$N%Tg!_NynA|P+U zd>#NR@c*@I?~LDfY~H-N7IFU~{)qpRA3(exVf{Lsb;n}K1nQ+!&f1PZOFA8H13vB! zcOUDfA6d{zv&75ARB^Tf`AR(LNStx!0cYA7FB4kEM5nJQKm-kA@)AqqAf5L+g{5^Zfnp=L=E3Z`)7^`+A&r>x_}7Oz3xl z@f)9^|2y>UXeZBi#k;`+2(*v~Nq))$!L!J#(CX}0Z)8~RiowAGc)7de;J{VxcY877 z9D^Tv=ktG9%)u|dv+Jd@Pr)DB;%ZNaVGlZ!#m*t%`}Tv2s;Y?dONsc8$tP-4qzG~8 zQP1^(-C*tdvNfuF&oHxF`utS`Ja6y`dhS&T$$Xg6i^ zI{L*6g;FY(^i#&YUjK_z-c1B@N&1 zC%&-FGb6J;KV4L(VE;Ok$vWh{3w3opRasYeIMfyRZdgSA{SM#I#*H%iajw|xCC^0s zl2ZfD;*Qi*=uU><_x3h45a%E9s$vNC#b*84AsOqjA14dojU&9_t(eMq%(Pl8Fdx8D zW9@>^Ja@>ZQ7|gD2|_cLl`m$MJi>Q1!9Lk#C?( z{^lt6BT%LBEf3+kl%jeV@87wl4e_UlJ1_p^9roLg-?L-|^Ai-hyB08if$N_X-$URt zz{>yq67CP;1&>wL;R)h6; z+PZJxBK#y1)}M|Z0dD+Cqvy?CbIW136@UJv)7PxP>5D%@-X{3XB+*EF@BrcpX-8KW z={H3lu|o0+q-1$T-_5=K@ZZ1>^4LGDreAWOY|#@h&wA)j zJ!cI>zJ~SXgmrN=d8Oo^Tx#&rpBv6?De_qNz0M!=i^!%Pbz8i529H&jseVTrb!NF&M)3iC8^BIAD5~UMyr|7qjKY4fs{4O>NHfo!6 zi!FydJ@2qw58QklIF`}=E!VzI+V#Tev-p0aeWtHM=I?_w3jE=1c2ljcmi}-lkQks} z>B!%KUx4cl7Y~1j*Gqjpi09Z~H<+X%<+`?nD*$Pk`np6J%4Qd{p8xoP^w)UYw7VE# zdkWR3E}=deCI5jC-=9163GzCur!Ge^{ubFTN8dO@`+YQ|1h~FF5R}ng6V?{LNn*cH zV$YumU_CG~mI(3~e&9E_J^=3=?Sgt-AY)yQ_^hDr0N*di|JKOzSz<3CUKKor)Hv|1 zfHR~fF=`jt+NZ^nT>m7_81F{C+fI*%16(IPe@1VhpHB!6mHcoS&9j^JDx^fLA8Tx{ zU%mprH{#zl4e|O|pDST$5pegSTFepGFEe)?C0|`UeHwm9;527rTPa5`zmuUHF60k# zT{Nnx67l*s&Zi``fK3BAH_QPTI17$4foI= zI#Vd-MDPl#ZXCJ7^|{u4SB(3cJTo}3(6kGoB|TTmy!`M$Y*I)L(Fov#m|-)zl^rSXuD z_`*Ez7)v0|xy@PIZPDw2zsIT!6}Arjt}lE)kGw(ME&X%tMUK;)TUGd-kL~`8*XaKY z&TYm1=g8;mm;dK^{65lWndR}+MG<*Hkhk#*Z_6A9i+y2<{TSQ(<|)mqzcYaHI_v#i zrGA}DcgcLdxu(HV3w(doka3iG@#~_e?;}qBpkJq_9aL;TRs9<5Ztt3fF7O>&7WjPs zh4J{GxOsNp-N^s%I)8S^hU;|o^~;&}e@9RUe-3I${BtjP11n~RN4O7+L4V^`9sqF? z`H^6UEtW;hKOMu4&ppO@Y)i@qzJS>BmDz%w^>V7(2t5>N87;csrv230V3CRUmxI{) zIG75T6u0y_$a~8cEvb86ziaE>9djqa2i5j`y!2kP{;OB{et-Ak)BK)4xIY@FEDn_m z4}mY>aQyWUzs z`*RhIM(X$PB*XyQHKcohxQRXf$(YFNi^T?s=XbP-5kB{c8=8swrXi`MIX<75&gCih ztnLC|?JiqgLk9c7uD4@)EZji*tn&%N*Se73Xw&W{KIdAN=fr%`=G;0pgK-X|ugx1HFJv9^^I;s>rSPqIJ}gHt z{!4lR^Bs7Puooyn3wVzg@Z0kP#Fqc_kB~QR?iKh|sRw>l{@XbJop?U721_NJAHV@6 zgfzdezz0cQ_mf#I$+)jIm7xsdy4pvRgN%#O`RB%Pyz-!|rkQ{CItZqWyBUbB=&iv# z5&gC@1iqQIZqR{!0IoHr&Zm&46TFb3xQ%v@7B`BNr^>7K^pj02>x_s%pVIWL#%YIKxJ&~z8a zMX%D5Chj(L^HUfni)^|ih+>d}&Jg4L>v}UDB(7D^lH)uNyi_U8;|e1BVeg@u)Cuc( z#Agi1;0vE?tg7NZ0Kkp0!7s;8 ztgfekdBg5Y$KjW+vE7h^=*__K{L*6LW|m>cEa(5FpNWGPf_W|+NKl_D(sTWsheov7 zBCi|E=8v%4s*3%AAaw?_DFB>k-@d}8dAx|fN5{Nrey49d)645jx^8?o@)2#>vX%N^ zW~Rp+z;|0rm?uz<`#zQgzK6Ki(Pl5}4g2!m)oQezvtRLC>QuoN>^C`*EKvdJj43YOM?ZD zKYi7VgYQ?C`Ug3#2k(`cUkE(teu;Xfkcpx^;9anya>(WFXy zWjuBRaf;YasmhFae&8n_3HBiT)ia5cM#z}?^eUE5RdXWkv>QD=WqkkDIxR}sdt9AF zJK5Fi;3J`3hMV2c;)vVrss^qHyLN~?pAGinOipEe7CvTN%jw+=iB=Ei0Q#2W)U5WTXlyi~oD;2uZ_}!tn-8fo_c!X2rMOo@} zdgAed;_>i3DPKrs|GnCyUr2mF)xyASmfLg@3H=TGRr$g$;^W#rElZh20({!fh?g)? zCX#uj4e#60?s0+FYV~T_N$RuogAb0^fcI2sD1*QKmBzzLSV#N&3s=0QxYUCN1Ikfj zADK<|P-@9bi2JNTekNbKmG3v0CGvA6B`vc&VKH3Zir*`wpbpZm7^X(qUe~4TbCmUG z-^#Z_3QM(Sjt}Jv9bT5pWa;{wHas8U?UU?BJ=r+spBlTWs9}Cj42r4^?HH4?_whO5 z@J$@o0I%S9UT-%`C+b)Zzs{H9v2sevw?P(FO=UTxxz1AkWirgifbYpJDx!>KD=ftdseHQoOCUN_Uj~E`-F+?3dd0 zpCa!ecmR$+(unsv9NbrS!n$z5BMw{FMB|qoO%C}G&M$QQX()8A@yDh=Pz7X#`pxN=XKZrL3APyz%ccM+A)=T4ZlD9`7dvxUI-{t3hTe4GyN*{g?!Z9 zM|?GAmg*|DueWcTJ{76h9&nl}PQV|6`=>8WvK|Ur5qb!EyJQbg-Vwi#dbtzdpSK@S zzr^|1-IAN2XKQThmMnmtz_>&r0m>n)H#VT3V;Qn3)P?+OjwQhTm)mPiCgf$DkN2OK z*F*1*`>%TVPfBtBa3?Rk6aR;s_7{2oiT^WS{(oNH|Nj8)pK>?P$K4b62fSax{ZV}z zOSnJ&al`Izx@XBkcL(xS;_rhcc=V{K_v88>_IMuWpO+V~egNE$bz7hXX-n^j@5gv9 z;r)=)F8Dbi(LX35V#}eov2J~)2Kr%oJf5U~&=QsK`^$~uaS7uNICNeDKXtjSR+DECs_~idf+xv$%bzbSBLM~uS7|)z%X!~^9#x(=Br5NRON(m%j+@2{|J<}2m zj&sytdo-uTk*C0gp|~eizaQ&cYrX4-CU1svDL0SnuCIlj zRc+h3(~0?u`2Igt7Evyqn9Z8VFO|+5_%HZv-S7&|?=1XVxW9cMraH)P0UscKANlG9 z)*EH#4GSS zKt3NsHLjDTP>8hLpkGeDy3Kh;ui>7v2Jqpljl&7{5B&a`_Wgq2*;7bpaRO>2Vx*qf zUlC9w=#!?9+U$qEFr#$0(ta@F+H;O}0{xmH`0*^Xo=?lrz7|+3%#lPHdcq?Xcb^9T z3XZ5-$oJb_g3P=MW7%3G-(xm)c&Tt=R-bn%bJK`^ntkJGlQ!_5gA0GeoEc+*UqDre9Fa}()8v8H8 zbkQHkn>Lp&vcIt%0jEa%KLnyHkfXbkqKSU7PnyryMp)ybf% zWh3h07!}&-kFGv3!MgIa?xE1Y0c4pj%{X1#^ zt+t}fyoXe8IA&&lD`_Fe@0e9;LX@|6q=Pz+S0PbRMSi|JYBCC-wFX@!{nGqt=MT6( zf`eBOF9Ur>3=dV~I}G|WcT=7?7Kve(8r~h~Im14|b2jZ=g*U72=)6 zsa%x!cV+Qp5_r1#qwKqm95>cSl7Fao5k8^i_=0Z$lg=@pvHt}Lh; z?%t}x&wzRRBl1v_zb~t*!Gx_zyI$`0DsBp6?sw^B>;ydXM3|XA>q}S=aX*txE6=@-Ntj zE2Kmt#`DP2U(|5t?`9-F?~5hZcd^bwq<>}oL+HQeq5!{-(VZ&?VvM)%dFb8i)AR?J zyCCZy0`9F3oqf~~Jl>P+va>y(_Z+LEUq(%9(Qp=Z0LsgZ`po10$CHZE&2g<<|ComR z8v;fP@cw{DCtRdofI+9P;Qy!->1CY%Tk!u8A0KscBNX9BkZNl~o`CdD^FpHm|94?n zOXx3vG+g-KA3*vuP~@i{@qiw4x@9jY{7{;TgPgauMm-!LN1fH5dQNeoosYehLq7QQ z&M8xcfjGV^9ZVAExA=>#>7C!OjfgSiX;=;1d$)%p}=lc$uS>*Bm_quLVxIVKIGkp-w6B=Q18O-YHi7J ze3~YrT7NZn1Y_*~EIx$w8)T)ejq|2b$ZPp2qNQt)&vm(dx~oI;2N`&->}C3YB<@Hg z*lu@g$1dXk^UKThtRIj}wvBS$?%1(u6USxk+PXTlGXU5f_&=^pr_;6g{)_lAug4>g zAOYX+#Q!tD2I?MkTDA7G4gmTWKVH8bxI1Y!n>|mz2>1)^C<7jy$z*yt5Apc4&w+ZM zH8qcdKiT0guow8W1L9=azlQ%4$G?r=e?$dmC>RWW{P@m0iT5L)ej*Y5Wc**l?JGWx z|F6T3^&C)l^M2y)_uK8x-@^aL$KeMtxzlJgAFjoBG$-1hCatjaxvV`t$9d6ZCLW*e ziM>sE?c(^Ob7+Sn-`aJZba*&=7`VIRjLZ20;^k{U^J&`!nKR_Na_$eS?g=y+%R`?l&kTBc?d-S{Vv2p${1jTN? zZ-;z3RR$ckMk*GF_XoY1;nTqX7n>FV$M-qp&Tk!@-05@7{OW3V*{-d2gQ0#c?b@aO zc{;xDr_-hIXPk8EOG=T~7WELSZn$Yr-;onUe#f-Z-s!`BbMhJS1oRlY1q$#ezAGM= zF`8Ezy`664`M=T_J$!h01N>4#;?mL$@JqQ;9K_8-C88*S68v7&C zI;^K(!#wPVAL0AIi}!!h@kf3DUD9nofX$meiuc#*0qTg`Lal~8`ftq#@H*-$o);-k z>-2*n<%oI&azI{c> zCDDiPE=2phls8<-bQ1Cj_{qH&DaYs4Vc?z6)9cKp;{hM?(?t_?&vbMdjgcp>0e9b< ziwVRv&i&nkJBSk`ixcC#uQZg;qkgX)Ww?R+9}kp^-VEdBg`5lV{->SS+^TvU{w7

    l!h?#wJ7$$zXSMxpvM`k!h0v3n`VCfAmcO5MHTsrC!I-A&2nCP zdrYfX7htVA>&ElDe4am>DSx80<3vKumOoLu%d)s6{4L~X9-J0IrJhX>1d(q!&{Oe9 zrJmD$N-DAPCwvb0tFPyGteAQpdiVnCK>w;$^dorKY%-9hg2}xr zkjKDuQZ3LQKnFYiC(-gJZsGs1YiWM8x9zweQH-NbMtlP7)yP*?3b`yX@m0vT@Y{AL zhAB@fIr#$R__K$jkY8VKxYSy_aTViU}pG{nUzpMj##L{OG|Bt+yd-uX_cBSEHq<}nB3lpBXtHUOjv0Am#7t2d={|fqaKATdLB~6KgGfZpQly;sdjM-_ET+gxwo@ z!E`J}`Se(!>jBzlM7bW{wb1G~{$=2f8*N)=(=%LuP5mqCXjd)7gTSpe+AhhV%F|e% z_lv3Yq!V_Km20K44p>}6`U58DTY7!y0^5)6rv-j64bfHf4+HM4!f}M{7`%nk1Y>;} z+B^RC=oMi7dx)jaZD6Pl;Pt{}6uGQuayGeq*VAKlX=-qKth2 zb@p;{QG4Fhw3+(ofEuwZ$8%#AgGjv=d11%4;{7_r$Km-6p2{5P0_$(Kbi4Wd<}CC` z+;>As+*6JDEA>WuIPdziD)czCFC;VmzoB5U7z8};Z*GiW)-A9GjFNPkc_XB;G2(eu zk`y6M+Ggq#sn7q#*EesX9UOL*R@#w0l_vdf;r^c(=l}8i{$bh&vEKmSTfeDk6!QhJ zKXA>BALj9_h8VjEILiX-@n|Bk5$AdRzn4-ETmnN7_`F?rbPRT+4b0~=K+C?R{eKKp5AnYG#`ATgWAYm~S@2r&c}9b-L7K zIR@_T@S80X`SOsoSWn!#RnQ&hJRBUH$&tFc+<(J)l$&#%XFIMJ`cbE2qiyWs+(jR# z^K8+{_fCF0l3=@=TYe3FcB8#@sPBJreT|RDZt(x>?@ZSUrE=A@Bfhd6zZxB^ZQDJ7x=uLORK_hCyu=VR5*m+f$5F83AUqM zoZZL%^}qCI3noE(yNWwl2Ox5^e zmtw$u7Y=4Fv7a8?l)J{b`hvO=^>i>UbGw)DeCJ8Q2X8q0`+s+D z{tLf=!qj1oQ!$!ZM(PX>7GWQ;84gWhTozh?a^XUbeEUpF#QJFme{Qbl{-8Kr{&vU{ z2Y=<%_MhvbCBVG?g?t)(^R6uqx??=4nKmzf0;8W3PgyWbwT-e9& zn{d(30P%NTAM78QOXq$OK>r|Z?x**(Y=}J$V6ZY{tkjIgBL-SYf>@#&$TlW>#)|c(7wyN*{8hGIb+fT2b_iKE_SfTmF zo+@Y_QD*WR$q|0^FZXycF;qp%~RUTAw;nsG@=k#R`K7tqu^MS05j<{tQ|z20ym zWay`zYwT^ca|39iKYx(>U(?ZLz$t;dM?E3Vt72M4o!B3(HW_LXJnj>wfsdpc^_Kk0 z9JgX|@)YH-ShQBpEFDIcZ$L-%vP^7joYd|uL@R!1SP zDT(5XyXkGx2hpMJxUQ0pf%rb;Z|r10h&m(Uli+`tcD2xc zm{ZJQ_6Nd|j9kx%E=afI`$a>oz~}#9Zwv5yTqnC*t8Jr=VqZa952#BHxexCfW87s6FtSHZD2WZ%R7)akB&hxwK|b3+&x94o_Xcpl9|v>y6dIpe2%vcjAeInH~P zmhLp-@J*u0!}f*zfdix~rj#Q4eK4j#UV(hjKfH=K^_!xxhV4wuUPe3N-)XF?Ut;E;W2zuq5h;dxKUT*KwQY%kT31)Vc!v6=APW-s@$%wu^>R$|0yT z5BwPUQEG=ECqoX3(yyS}dcja~08*`OV*KLMlv|G=aVy8AsxzeLcnZVQ$VcF_zkDE) zAs>_F3rUWPd8B0x*Sj)40Xd@7s;fK?Jr;hdDGB_t-G1|(0=`4z2biCzi_kKo(NpEK z-5j@|PK5sk@<9pWLjK?X)C9OD>M`X~kT)Ucb$0@%zS=n5-Eu$cQ#jB?l?n7e z^4*GJg8g<$%{$qzUZEFwY8v`!Ycpw&e6_&qkWNlzf2Uoot+(|a&SSMnjq*IoSG3lE zLa)=}{?#dyne#q7T+H!0!=614kv|kKyqBUJ7ZNkz->|Do>ZNw<3xF$HDfhLViuRCC z6y8)Z4-kJhvCOg+*B7ScAmyt5NO^$cl0$+wd{=|cWU8cIrN}PLAD}Fd$8PZa>b7Ju z$ma~^E()B#`Uw3tAotCjS16C_M8g2(Mhon~^dmJ(Ql5DNbh?YcC#tPAW)tT1l?Kt% zspoTax^nn|F0>wea~SPIJ)F01YJRl4vx&2uuU=2@;jOS+Ohlv4vEMTz#344=R<68^ zc~xy|ch0u*I_XRw{4cPcIy^O8Uj}1&1^-u(UxD-Wop%aD?N}G?ZLYn%?$Yj#jVIYBjY^s`)l?U?5o9=RsrXA zL9ZxaUWx;fS+M);%}pS~wNT1zZ=qLXY#TzSF zA3zLv+OTe{A1FEG6+zvov;e*Y{}kuWJ)D2Vvwr=s*ek)Bj`D{l?>4!LR-T z{x}P)%LWEbly8Oy4nyAZ+5In%|BQU_gYCH+ltU(O-T)up0J~Wbeok7xe=T1>mQzz0 z#}MoP7cJYR=_lXTsGE2{@FLjHIDYfzG43Dy@?&xS#QmX$G@T9b`=4AUp&xJ=;{Bxn z@$ZlD|4)khhdl)aXRo1dD6XIPas2;w-haU6>p#N%|4--r{}}E+s>}s?aE#x-r2Zc4 zD@A|Lq%)Xwc2k~*dqNX&f7qSpG2S1yttZv|7VtmRv?Y}DwYa!X#Q&K;kNE*M*!a9Z z6z~7t>o5--qO(cE`rQb-TN_@qD5`v5skU@LJF=1E zxhB2wQSe=B8^)P@UKmV2PdU>Nm8!TO=h8)`)C#{f#i`k6RHI&4F+>U zvxf|s{qReBwLuZmY2yCC3E_YHqt$_EVfYI0{s$f$FB113Mj@M5;RjFv@CSLjp`{ae zIQ?Z4BKAwj)#uJ#C*ChBDNW94p2&nbKW`S8hYk6-kg%KIPdhHMJ4d+uGslKJ-h-?kCDf1RP4^F~^{BF=s9iBjr=@TWa_{3MS> zu?V?qxwW#gQqSYD>~NH{Lk@YkkGE9{n8(n2O>vd;Zpu_!$9*(v(0RFE8W2Fkc8cj- z682H#`;~W6UwSJym7xDdS`qu`cdbJKy4#fNXC4v(Fm8~3=Nd)8S`E&FFCy^5yt(uxSi`6zh34aRU7eqH8DJo=bM_Y`^tc$CWaGwzQ0BsHu-@&Cn7@{)dfAr z{ef@Tg=CwjF|fck`L5?{-*dd$_^6`ZTyB50aYt)w>wf2}jp4coQ0}b`cirJKQnP9C za^l`&OJ>gjUw8iG(2hXbwcHN>PtBiTB2jN*y!kIA?+EetmIvqJh&y*arAh+tcTEY% zJMayAvtD$Oj(K#mz?JQaM|7oK-*c>u2@(1&c;3C4;d47qox<0^4apZHAu1i!mPx?I3}9aE=X&Hx8?!hLj$<`0m2 zDodRDMpUZfd;KFja>R>0@^&M~C0>wfi0@Y%%oJI-z@3-$jREv$Q3t$#zjLkGfc{5Z zzvz4nG;r!`-b09U?+J9reuC@_UGVBWLVtjSXl&(oD4)7h^aJ1SkLrQnmv(&)xIA!w z;QF42CE(#PIp^fKRvP*y_*|24LaU=tsay1UC&mZ!?@xg9yXN6OKX7~9JPYy!05@N7 zXfgZ%c7Ezpr5e6JvS^;3xPPhcvm^8qzge&YN(Z}{i*LpV?y8D{%pgSi`i_#Ghb zL+=l4u=lL@0CykVsn^dl&>tZ<_}F8On6LeVF&*Z!O?LS;-2Zdy1_sM^Ew?4xk~;cr zG&Q+%`!Vl_Yor9{MQ8FWC0qwjU4;J`*44nW+Oks2ga7=ckcrP*`RwCg<~s03mm|Nx zen(f!9Q_}hmhfTtO*jLys77#E?<@n}t<&9!dInf`t=%ck zpXTPSS0s!>WLcfWamXceEmquTDU*;FUvMV7r!c?Kzhcie^qWKc$1waQ;3p)Ol+h31 zoRaS3u`BnK#N&t|WTG9nq~t}-9{oT|x8@fBdEidkr%~micNF`vPOrNc)ENw(_#Yp~ z|KTQ3Pu&0V_3P80g#WXB6}S+24tgLz<(a<#@ITgTZP(0 zLagHZJ#TG14z$s+0_Ew-b|J1le?ADl=kO{|BaZ~^mp@4QPw#~NaaQqDp7U?thF${x zehmpIV24*vj^q26+lE~AstNsXG?tZ{AYaOn(1tRSA>#MgZlBa}|9aH>`$W9|wjTiSe%&VI6R6hY?dlJ4|BX2Q zeRx0j$1ofQus=Fzm%Qy~%YBmg|804k-vc)Q_yJI^*Udw(V%~o|?*EgHZ}|a0{-b_| zJOs!SwRzL}f3F|FmB!a$cN=`0@v=%$Wc6tPLAMq3T1**hjcDtug@3?lC@^-Pl9Fd6ybxtS;Ua!{Q;UPZqh$xyE z&wnMA68XOO_s(hYke7nNUizh+E13V@32Ir2eE@pg2f1K~egZxFTaVDM;QlYoUvmBN zK%jm|2F?Ocf+!r55ij{COyN+Q z2zefLvmpQD_sR5FLwE7;i&kbl?>2Xu4NYLCV>=`Y7ab)LGXr?$_)LDA!)Y()&71L?$0>IYeWnF| zKZx5>$F|UJ8BAW-4LhXGHTutoX@?Q9i}5=KV|O8sXu7fOhRMJ<%;6~W%mGgiN7s;! ztAh&lswXd9ei(R{qiLW%PkrlY&jWwU^Y3<2`$pVVd2f*CmDB?dupKjRy^w)C-f;e{ z&Ls7%Wp%@dqu6M34Q_W)e;WMB8}Z|TjmXouWJyO4>^0fu!S6a*R9mSB$9%D;sUM4J>1sIbW3!~cm)D!}W+ zjJ%xsvN#YGNe5(E;dOWBy7L^T*xPZL#Q7yNJUi$vpld7(<`h8@zXU%c436?_GLBy*(R zP$omFyywI$!aNb9;5%0vXIi&3As({))sf6tH%Jrr@9F)#E>_;*;Sufjf> z5vO^*FPMhEI`sZ)u|MbgRWXD-09P7%3>C0DUTH`S)YnsQ?sVcm{ZSwC_Wg`28XKF3 zID5uRiT~l0>ts zjPp{+udRomE_i|K;e0YE5s&$_RE2c|Tm%V2m?y?$iNHTgaKv(Hdl@p9q#m3&NBJU^ zR|`J8Kduh@sW&eSFTRWO@_6DT`lH5{yKzY&-?a=cgZ-)9?wh@!;i!4HbUcjX@0>N= zV0)($kG?($T4yS)oOFhf@6Er4?=wWB*D2q)3?l3)lTO5UP1Bz&o8A2daBJtAv&~zO zFV1mfqQ0K_`~S;KQK3Is_K4^pZoG4Sm5fi@wR@bft{@=4+PTQG}rpaBcCArs^i_@sN?%#ZP`cMZCW=mv)kWExh3S&&2(u>F>gyA?$eZg*@VTRDHYhxlzbj}ngquXa1H!#|6Anep)mF&Pyv26B>Do&<#CE@{J<0t~EzYHBPt3?S zM6UbxDj~@I4fRC}7&m(+V>!a{dnc3Fi98SX*3I_;XY<*=V?I1cKgOodtgYbud%N>^ z73CbW;3*B@y>HFz!0zL-&!3FWvK>YBy|Gce_iyuEt!2BaQTKCpj&`Y~3m1M0agGtn|DweIMd(ByBX@kCqx6sC3<9B+mCZ8vB-USUl;KqA(RAQbD6^GA$r( zRg6jJiOV9)7_%OJbirVR<9*o3_+jMbUU4h`er_-av+RI()4zGG#*mx=pNhhL0xU7XDANK?OwnQP0qPIbtaNPFpXHLN=e{Qt!9G>=gk z1@`gVc=2tD{9iEekUu9~3hb@OxA3+>?*k2sfAH z7ud1|ar>yVu;;)1C$?jFSQYubNarfD-_z-z<2mpnozCy1y%t#?liZ)T&D_BFk1}s+ zitVebi`4Oa=gGYa_wnKftm^~(e>iFZKeJ^s89m>d9X3NR+-S?rits;0oV;5(#rFv) zs7VTUCG=ml%`%a|^^p6Zz>tp=Ta+Z_8B0a1MZj@$`bL)Lk?sgMG2*V3!4TybgeyQ! zf4!k5R#Z7J7ssa)oL`0&QUv}0h^Lm0knhQ&X^1qELcvVPqXUZ0!}eT!H)!NIW(xuE z8|<57BKiTx`w|#`&7Tl_d!y~9D9-Xc%p2-0T2W1Yv?Iy*|8!%wTS*gl|Ez4H9N4Hs z+%d;x#E{V1>p$iR@q9~KJkE8YPAfXjJ2jz#@4ntJ0!NT)(B3%k94qjrpUrA^@Fq1U zb6!{a(po(W)=9eB_tH66C>B=n6qmU@xkN?*!_K_c(BP6gj^zpD}OR zk@q#I;Rb8Yz8l1MfiEdJTu1y};(RSm2RwX!6zUwG`@&38^LN-^ess8<^K<%5iRAmF{oZy<;xXt%XZh~fS4BQkmQ zq^K*mi0=hF@_DXH;4Clk`k(fBJObu(r=ntiEw$biyfaUF(mdVUj`?~j7z<&(Hg?aQ z638bf#@EHb9UFQbtAWRtS_eaNuQLESy?!3z{9kWG*!Cvm@oi}Si}`;+emmH_1@jg8 zuf-K6>eXis2kOW##;zw;ls{8#UAb~?dHFNI12;8aB>wMSvSiQM$MOBy!s}dr#cjoH zi=Jt>+iaWGv){cQBq+o87|ul8QUHF3zZo0j^=`MjoN~ip(Ij%c-#d4N{<-$Ea_-kW zF9vg0w0;bVBIRo=oB7rrQeDv6Q*EsXI`1#*sE=%gGEwM)bOnGe?= z@N4aX-5d1^HaFeM_rGZ~Ee}i3-rpPV4`80SKc9Eoe)w;tJ_qMJ^Z0`zo{5y>x&iZ! zIRA3e`Vt)};(m0L=kfQvTXf#7Wc-7ZM>t=Gq`7PDn5RNp6zc^zD)QKHAGj-|xY&*gZ^zs8i`kpZgAYI7 zP;ZHwxSyDxAM!gfADfy!gY|@YwzpwE`D9nOg7x!S!_&bK>XX7xrS9ha)!?)KR2Sk6 zt~3;fmK`LW6$R|uR~pX6Ohe?G1<@N~{7G}mEqQUG`p%PlPB9(KkY5+Yk`mrGF%&mY z&dp{e@E7pC1nRP2{Uz?PtRT(g;D?CwtKj!R-2YP*#xmMXD&g15`>Gcj&D8r5ZdtP* z?{gQ550-T-w+6Dio7k@g%kTi#Wm~$a=}A8v@=@PF{*^Wl_1fuhE$-i7o12?C#r~Wf z4!GHW%DDRl?vHO>6?ODKFea{w{JwZhnPXl;Zz3X5E;FxPJHT~qSw67LiFFKi(Z>Fc z#S$6ryB>p>ARp5|EkjwG=mAo#sy)cXoisfuz(*2MYw*I$0(9ORw`xw9?B{?=9Y{tw;<>+(2haJ?s0 z3V#V9<#I7kkYr&#n^zl>j#I~ZtSdP>&iUHC*RJyW&!$_Wl%whb+rLgbRM1o=^M6rL zzKd~!zpje*QWfpQa^xdYhey-DO)PnDVABaAAKWWe# z?&th++24MG{SLQ`Qa;~OEiN!Q#kt&@MDk1?_`|*HP>fk_SubWGN2M1mjl1apiyF60^&mztp_(XDJW6$Nr^*3sLq}i}e zm)?2#zH{->yN;o~XHVxknTOvfNdv^|`_A;C9>6#3rgiZ;;^X@y$&0vohgX+uX~cJ! zLN67FdkZ;vf_ST1QD)Srzh;ErDW=lEMd#bFNh<>K`X~D9;McI<*;J5#w;pqDQDK2~ z9doX6D|qiW><^^XBK;B8CE_*A6OisMDm=!%5Tt)X0TTuJ{2QhIr!ErzUpe#(iT!*} z^koxq;34_PD)SonZtN|N0yjPwIS8D8KH_c#qbt!t+G{)pF?>PK)r>Iux#dx*2|nCZ;%dZWQu z$Lm7=8yNSpu8dRh0@vN?>AwGNwl`GQx4jngP^UA^)&gG@?tRJa1Wp{#S88$BC|?c~ zaJj9|BW%KcYLANHd7PiShvxz9AKlsG@gh1Nc(ltE;c<;R*5yR}yJcu7!FD91rAFfa zsyZdp9{}EFK~lZn0Q?{AydVPqUv4kGYi2!ZWl#)r9_dPJma`r}5c!Dd7w|!!0rC6$ zopNqlDd%5{Dtb9T+%Y9cTAa#wIbUawu3JHz_^`eT;{rdG+4?&6?>%dts^&UywcS*AL!m?$aeYI)c@N){L&O*RW#~^MM+3mg8$yq7r(eJxf#cEGv%OqK{(|(* zoadCnyaM`~L->C5TTyj$-IuPK%@X%V8r~`5{?qwk9sOS3c2^-!^nS-$-;c4rw%TuS z9iU%DizUJSyEM^XR|~xTgHY1Tey(i0_YG2$Xq3rsrVEE9#KRcuN=$BxrHbP$6@6fHM-$iX#m8ljX z8MW|RDK`W_Lqc-Uiv0J;>+d1mJ#7(dasRf9vP}EpyQQTu(%ei^i#yvB?KSiN%Yo7t z*}jT_;x*#_fU^|xX$7CBIFdeo zXTD1nXh)tN=)2`#b?(v-^C%3Mbsk>7{ZXBP{oU+NkI?U+42Dd;*SGT}J@f*bq2kb$ zTGSm7iUpPDgZbeozuz((mS`tW%H6G#JAID6#7guN?7FV@8MdcxxX{Y~y<*@X@&8nt zC&=rH#fvS_OW?0i*iAceTh24h_AR`Cikgsv-iM)q-&qU&-G}eH|G@{^fzyCLC9Xm4 zXk^@pCieHTl`8{2$c0sXiDt^D(3hhepQ!X~C*x2| zeWK*U`J6JPP@WJxtX~AXZA{(6_&SqmdRUW#4Q0q%3!Ft1FLeO-FZIj7<)Kf7rn1Bt z>_G@>yEfWgt{XDvMIzvb9}nt7n=SVQkOyUpB`UFA@n2s3^Ah?Gl$4ZP%Aa}T@!c=| z@)Yp;9&a+|dLz)$Q+cv)fVj=b`mZ@P9H*K5p9e*kcd2FdwrA`q#C`p*Q`ywH5jMZ1s1XJNK8!8-VGu zst*1MGdo6f-+Ip36Aqh9%m;w_e7aAfR~unh!|x-CdYRfW>}im@XqQmMGcnS_)Vd;R z#*h*zcUBZ<6O`L5s}qQyUTFR0V&^vM?|TkbSg4o5z9Mgg94lKz6XjMVGqsm?ir@=H z;EBlVHI@g?0Z-dV#6){U%OT|q?YAdlJ2g3X?nGH+)QS97g<%WpnYFl!IgYz>p|6J5 z)mc>Uq!V_SlJcXdFYRc4a|`ORZ?xrt-XitH@Y^Soqz~=Bs_7*wLRE(-pME;4tfoFW zWRmT)YqrB7jPh{B@HC!>Jd=@wwbZ8srz~4BpUz#627qrlh9l9#WgR}dXQbvO%q#nL z>CNv?It6<;P?|iA^*0!=uRE>H(;~Rz2HU$xbVYf2$BaoF#qnBkQT-(Nkc_-@v=_C$ zc;N%K?~d5rz!M=qTgp(kVuS6DiY|A6`2T;o?>^d7zfc!}e*^6;cWwiJvrBy$%xct? zjCUiCL5PzP9GyiTe0pdN|q9k9c~p@;nw7JX-^*X)(mf8zhyrxF3SzsGBW zJqP*J=1H2JD>Y+>UIUyxCJQwf|0mD&9^t$xF9-`}wC^G;!B5;?O-L&F z81SYT^${=Pr+D7w^y-Pj`R@l=xE z`%dD0*yn&}>g3R*lkr{IOSQYuf05z-vJTi`cASBoc%d~Mb|N1D^m4(VJs zW%CfPcY8kp?vDT)&IiE$t(cEme*bo~2g`pGDeXn9AI|$pVYbs*yEOaHdgdJwh44|q zLH&w(-2Q!(`*o9=sK7e1PmHGp&IeshEJyi75seWZTTTL*f&Pd*)&{ma?J8oo2cE6E zRUiC%j*rJDxDHf<=-i0;s2iM9sE2xj@#0n--=RwVT&I!A>lWq{QjRXwGoGPa45D5D z^0lU~nMlPIiGL74lNZK|Jf5A7hPYm$)6;$)_uV6!$~xNZyQ8N9r=9KgmlJESpS0V% zj`SVkeTg5;)SLz%F%KuSx{RSx^IEQ7>5VgOv_LOi`xi|T_J>bpvzNI~%;nWB+^4Dr zl?e&<){2X>D)))^|9Nb82lkUQ#)HG8`y{!IcEO6d;Ju_p=f!5?@7D%YmB+^UaSi`J z8~aTU`!jg=7jOAbo=J;nkNu0W79ZPb4le}tIcA@F`y}^4IoS!nNuR^gKOA8mobvLD zwdGHAbQL1Ue{=Zw8v(O3e3bqG&F-%w4~?};eXrKa`~XdxAM({bgZLx$TTs}lzp ze{7#Pw&1ThPt@JNG@;&X!u&2JYdFNZaUtekhj=8~B z(=PJ8)(4V*9i|=4bazcH`PaF88ulL4O_|P4OyapEmc%f>;~%C5^Q0!D>)hX-9g z*r_(yUaTknR&Dj0T;u$n_wro@@>}`cREq0j(Rl0lMtiCCTB2U%aU`BrxIcEb)m_x^ zGF1nA(LyWAF8+s8@?Efvkq@c*5k0zkW@bkDT|EDjj{k6+|3kk2J9z)?`T~sq*Lhek z0Qp>HMST@^#auBr^BSmSOH(uBfeewzFSx%%E}#8A^Md;2Lg5PXzRt}Ri_HIOlBRRK z9&m-8@%}paDbXLmYf0QgJM=l^ou&Na&KI4;ZE|zUy;o7s)NGWZ)i`g6N$0q4iiY?; z?z1|NrIvgc@aK3tj`OZukaAa|U-VGUDv`{PvtX~bh}ahwS`CY~)KMpGgWMj5 zKVy^055AB3^!`+i>jLH9HF+qQqP_WQqf+VZpd6>p&57JEhZCZYbX}bZavSr4E2*oE z$d3y)$@5~#QUmw9b81mWe>7sf>UsVLMX{zD*JrOETtm4pGNhoruQxoq%3>fb)zw_X zyln*D200CW)`ug*q{1;J9>%&06!YIbjd`vYkEvXbEqmoll#}L!9ORK2Tc+&+EiT+> zNnpMr{wbJvvK{{`DdKXJH>EP3k4BL19LGT+1TI`^mD3Mv>rZ_r<)^-25aZ)qmlxgY zi~L{gJ*6j=WVw^_%DN*Hnp~teRKUK8d`&0c?xq}u=c|-25w?VQ_iF37>z1EJ()~8@ z%2KPY)ci~C6Zy3X$Tu5p$NT)>=J*&aeLjAd;)e!||L0Lm-_%@8bAQSv zq9z_A-LQxKI95z!yh^QW`x6QF&z4=;e)5TPl+-Ls8F@KgGqMm-0riNIwDajs7Dl?{lk}3i6e1S5C|GaPIBF z6KRZlJZkCNhep!fow6P;)9pI~##)tv!a<=sikl#-W9!VR= z&N=WE_;L7xkYnHvkaB6`C(g2-0_4+WBak04?&U_<+1rsfq|43m>)hL|lpR&U>%_Xg_J_?m-jzmYnu@=sz^oy>|xH z(HcriGr%K`HJFWNZ#DkE@VS~0$9p^S08>s4=3)wQd?_Fe5O>MWPWicC999$H-_=%g zJPdvT!^8KGhJ-Vs5Az{WNJQH)kBUX&;=tk6UQit0h{cJYi^}x~=?CxR zf2Hvs2mNBWf6t_NeQwl)^$9#I>KECbbTSD&Z=toqxWd5eh7z~p3X4-I;AHR_5N1#38;ENd6u$$5zEfaPJ(W|!*+yk8iMXGkrQ z6yAkdV_$3v^ALEXp{kV6(Qho(_(xlixXlJzrow>dYjW~edEXw>x_Yk9X~_}d z_mw#qD-;d)Qi*$^4&Kl@)7e0^ zb?j0<{73iOD(b&@$D(IO9S?5O=_q$1-evP5)RUUuux}sbmRw8s#YN9lBd!GaIQ#{g z#&*2L?-~yUJ%Ipl+gA6tul>Ex{>T4sc0T2z=CQTwD3^`x9g%sz&Xerq^?;2sR_Lw3 zp~Il?-x8f=UFaVu5bgLM>cf1}`OqK8pZ~Qu|Akgfuh2=zV}xb4lHYMODAY*sBQ3%D zB>q3Yyu9Qi{Qr~V{%_R*2=u_Me%Z(4{_8)M_aF5ecOgB%=8xn5uBv)4eLydCd<3-`A|9)9cnLV@xA)VoO0Z93phyVkGYwE0%P|MkH0k?$XV z0iTTf->w4y+#lm`+g|wZr?+taQ787Tu|f&ub>^j@T-&td7Tynn<4M9@AEO&JKXceu zK-V{EbcT5ZHrfUFnU3QA&Xzd#1=#%-OGVDFdYN(l)wX-{;EUXU^EalrZUlMNENT49 zJ(H9tJmS>sM$qJ$c!GNNg_Cnd(ujF-1@X)=b^0RtuQXJ6l70bS9WcQ@f3=}`LsP+o zdD^u3*9G#iZe_0uKHJ!tFUribqU49o?O0b4E&gDEHGee#zKZ$TZ_)TbOLJiwe7jK> z5XVX1|3F&6I3{<|5B_kaG4hJ1kNfJ+qQ8Lu%vL+n;E#}h81w<~n`&Flo%g~|Xrpap zrqaXxxO?xjUuAovqWBE$BQE7U;#aWmPtN-x?U(b9?tz~#^7aHpnRc%xyBB&W^!>=H z5cRH!{-bqH*sCU5EeEIvd$G(KlAR1~Q%uexXYQe)Rf+eVW~$9SsN*5=LdUu-DGMeKK@ zu)Bzw|L93sjNv;_PxOvD$_syge4v~CYg(}fb{@p9n+jVvZn>5{=c@7DyLaz?m2$O^ z7J{^w49u#Kn;~x^A2@08TvL|z;)rE!ocq{-#aqeiWsk0=8vAetd3iD3h-XJWUhIR{ zGrfJx-`|!Kfaky3aQ8EFkOP2&8z^UwHh9vq=JzMd_6zjyb*2T67RRp+`MED=hby9t zFY3NCn%MyUs|)qPPZ4qY;?L*tym%}OF8x}AGdZGT{)F1{3M2XT@t1yDN!l$MGjHrT+V^+2v{0^!?R0o+Z2KGJo|`G|2M018-5cS@;FGCW z>~AQIi@+g{HTcwtCdw`Eb~^l&%Z?=KjJUor1wV$Xs2`EbRr;u>7@cyQ`N_U=Z%kQ^ z;~gVL3-<^8R8PGR`ap}j597MPn!0oW{^Cbhd)Ir=e~@1?&6=JgM(eSDt~B-(vhZ`n z_g8-QCGJBZ(Nac#z=9}1u7_M}7(ze2-l!AAIR6i3qGCJ7wSHKIT!$8gOookE4`SzL z$Y)m?>X((3aQ+MG7TBFohi~YPBR&W6y6)JK6J@ zWo7xYhXTN>J#i6ubwE)v1ALyzu*!(zp5lcE6vmTp5=AYay^z}xB>pPQ>q#*me(RvP znECj#$ahcNwY4jw;rQjJds2)?KT~XO9!38B^FOQCaJk_?rG|H|@Wd|g{RZIUrNGlY zo*>ZSt&X<#8NG(vs+lzN6~N6#Ye$Lt$|)ys+MqIx{QbaT+g-{r;P>$=!+O>QXf28c z;`-y6L+y<7{-)0F1D<`4S3#;lAz9ZXahqynIjoO`h*|y%0*H z-wy`#p8fC#$mNUO-+&*19*IGC|Jq1lOB!_w=1};J?K4Y}3bxz$rXH!@wmL2p2Rn)D z|6FxvweOOKfiI_BCbf`7zIT^SpJ-+KPgX|ZFHqVQpGhW(8&AAh=p~*!CP{uj&Rfb2 zdI@-Zo3~fP$FpMT2=Vc{l10e#?|(cvlhoq)fv2OMLSxU}>d`32Nx$^R|2OgH?|Lh> zeEK?%ZV~6hmrLdaiSO%lcijp6->F;lDV%o(azX6xxc=b5aG1|e!f%=P!yV2~ygR7> zu^srg)0u{X3q18)T+r15AKucMu4JC|@Zkl0WxMvn&el0dyt<>p3_lOS`A#-}8239b zsbZS*+9wpBDg$nvs8^7;e{|=SU%Ov*0w0f>_2>P8+Af1ZH;?TR1Tn$912E6*@B`O} z{}B2qy;Fz$f28XLDTdi?tDRS3VE@e}buK^7>rF+sGcdWcrilF4J+RZBklnSIhe2_= zmE#n;k#?qC3v6CBdDu8R*UcWiD_{S@bMngsc!~3t~$Nf$#xFL)qTXfXJlm}jrHGl zR>=|950nInUpt$-?}yxhIDg$#3;DpJYlmma2jX=-BaHJOgkhZXbH@X$`?1_s7>>fP z0r@f_YwvLaZ|`bbKf>dEdHDh2+jx*})G0WJExPwK+}e~l!uLEHUwpI-cz6%w%34@D zmAt_CcV`&&1JOR@{V)Kx2fkiXx`NNmy0`TZ?;nnq4>8}rbW=pV2cJXtN0mAWent8( znOqX)TTV!}ar_~NKg~SnCk~xzoOrv`8}ggb z-e6{WH{;6;dP^Ps4>mtNxR*51x4Fo?1lQX0i`f6&@dfx!=u^58_%Cm;KVNC9d5S*d-w+A>+Npm_bjd{P56)ppdI-enFnB2 zDb6jx{-eb5D)*t1Kd(SOfaSLT=iXzVrQbjydI0&P;J2AOHwOIQM*9H#<6sYh{tT+9 ztroCy$ za^nB^(GQ@cp80RIUTpaR)|CE?0X|`Ku^ogHgATX&aQ+dTvq;!zh@5$t*ih(pKB8Z<`wu^V%;L-`45bJL8q%j ze*bfl*ALwPnVS?!@uBXPUN%!eKmjl|iRF{M@$ZRLqx8qPKDXg|M?xzPf#U z74|NjD9%v+J9DUFfOfZdB5J1HO+9$nM0&0mf?e=x{hTh4T%Evm_DUb=6N9{ zchg=i$S!0pgdBf$HbJ>Hdye_gU{8#T!0oO!8s{$qF4t~%znQs7z0NtMRJ9`xVpuX& zLQk|EU1l*t&$K?M%)k{9dPMI-@V~CH`TP3&S%-Ahsw&_~8*S}M7xc$c>tf5(LE34< z$QQut+jgX7p1;xSErHjU^_`3iyC>u4r>pp!O*dYsi$u|G%ke zOM%~IIpBxAWuwh+s)-TzJo~Qeui9~6Z&<*6u(w^WmuOe+vOlQVuXC~VW{!{X4kLCA zmv%`6AnKBvIyNKdEP@-0e8lb&CPgw>l&}`>WI_z^-?-@!{YF z^xx|Z&a@xrkuW*}-7*e)IO28@SV;R{&gCdpW8S5UBJ{V{8djM4 zpg$phe_4f@IGLw~rt!bd-W1PatMKEK#E6{jD70qH!cuc7XYM7=^O z4#=cY=@#Cvh$cPm2QHt3-gyfrq8_RaMd1hVS_AZP?RsCa8x(fbkQ9ZU(%_kj!X65H zz}S)|zQ1+qzXKJApL+4>8eUg~9L(!1avt#jh}$wwNBLa=)q?)M+IaB(Y?k(p6ysjEqY3lC4m;c&=^WO5JFdsyn@REa zhq(WedBpu`f4YVHuir$7=OTo}-Z$&xkERVbL`84NaOAz*1ve`|M-7P0k*{k)0a@o`2ez`77sc%3E)K z`AhX3J;=ZG&l%KVnsi3R{0#HXsLiViJXYP4cath(o9E~cp!B|s_ndZ4xYK9(KIJ>z z51<{6Z4vV#9vhz4dnp(B#4|Gcdr*1FPx}z!1uf-In0Bq5o>iGgX6BXo-^T6}_(JwK zMea+Lk397m`lkg8PV7n@J>KWPB+y@A)90JVm={N^34Z-L_QUM^@6WJafYNo=^G&p; zd;7Ld1Nv*#K%vO^f4lqAcj*Ukb|M<*`Tw7`_m6JsJkv#mT(B+0xcA)2>RB^$8kY=M zmSQW@xs(6}>bhzd6l3xiyyhU(nu8c9`Tl-0RN?~4s zI~R|RZtD&@eovc0c|pe$znN%by$VzD9NV#eZB8Zi2#o7)vgZ$aHgo?JO|=r%i9MA} zS&Qv17bB#d6H1idQB?)@lF+Z~)6j>)?jbh`{T}eI*4Bav`*bJf75D2unaRDzYrkX} zB)`-_AoyJ=`SWL<2fjx6jB*7j*gEt#xARQ>OG+FJY(T9*^YaB^vgvrkM5`xC{9laf2WTfCYh%>&t**1m zkiVekb3U@$1b-lXttfK-w8_>O=~TpTpdS0F$Uu?SX~e}5PhOPAxUa*@0Q&Go`_lU? zmE`lVGs}}sNg8mjYWr|{INgE$Sb$y;Rsc;}DpgN;O!_4dMci7+#L0(& zUu|YRa143Q1UaK#n^M5%ZBmN+7w~sOC_Y zk4`~;27gj~9i*K{OHdy4`;4yxIwXyRuDB6bAQh`9@~Nq)KpH7%^W;;*b%*zya|#X| zTh^Szc;8UhKyF369LrFVPo`%T$dy6I!-^0n$`3GCWPjWvYSS+0b0ZNyNC`1=u5;X|NdLNm5bGPMdH)B&Uk<<=z<){DpB8G}tGfX);JslJce~&)^#N<`EJ4 z{vO2V{UqKWY%pUYoq@l<83O62@&4P_{9bck-yG#ut&l0&d*+`Vn+E=XxTac)a-NtG zRPsOHj0_y)&4!`+vIzYGgF-a30{x~AYU}vBS(?8}di{kPbHo`|^&GQu9HeM^fc#I0 zv=28zp43NP$GSNVTwm>?-4K?|O5$0AZ5s6QZ#GPfOsV{CFtiE!`ZpR%4_WI;XI0N$ z#wDq&U70V&2bc*z!RH;>jE>)}wOaLDzv*l`y#jJ^oji{6N^KTN-by+8e1N#m65Eix zCVg9<%vP?0xcnY)68N)<;_IZZ#={c# zV>$df_NSnuP3!8S{M6jsDeygA)hzbqpyT@dDAp0qJ)Ufq-&@e)I#O|s8T0=^yW$eWr^0H>!Bsz{l`hV2b=9Wv#u&`R^HaJwg659-qefrpzWxGd>9XPYq>=ZwG!n z`?hjrC-Nmf*n)L{^NUmy!2E5ve*HP{9oSt@r5`E9Jkpsnn5X+!3j?QsYr)@DmMoMf zhGOH8FX3l-+-hVzp_Pj(k)Kd-Zu!+PaDBnKXz}93lruMO)NOj}>7Zj@^QMm|&$P6( zY#{!x`>)LpRlJP&lFbc8T&6xINq4;Pp#7nBcl{~fZ-4_5^p6;~O_#}U#^=<3qI_}b zx)2o5&+@B-gXO!bZ6%eHT~~IN+V-}zG_&6D14kSK6ZKU%w|~B$Klu&z{X1>Du>a5H z>(7T9?TZ%${1W^y81J6``}BYR#tT=&JcoP||G$OvOUMJOsI||WFZ%7*J|lHAE`BlY z|Ki2vpTz$e_y3M(!qjgoALIW2(Q*Hwzq#e_U&Q?-#QEoW>a+O&ZQQ?R*X%6qcLnE$ zw?CS@jhhqqXP$!)^hvvBpS3N_DzsaS(M}%w?N5*71~`B27)U1? zF|Wjk*iJbkTo?CookZiwF7$X8kJYsn<+1xjttUXZQlpobdQM*Qcnk4j(r>GyE$SUBQ<9N}`j zy(2eYzAflDBn_pw&z{KKUFXI*wywt7M>~Lbg$2ZsJcszh(J`JQU;AiF9&vGORdNBNZ@*zq4jeyU$BaG&UZJBs#{+J5ru6yl|o+EP9LB~=6a zgJz#46#^fK?%b=^>_Q%rmPf$Nupbvx^fL5($g7L^naFQ7w~l_@v7^Xqk9M~1>H7ng z1Ha*-zG}&8liRkONKNiM2Jucwp;+Iz~<-V8m?1)kyGe4*eR%3rm)g@sc0Q*_9 z-oSD$7W`=En+@Aam>2TRhT(KbM|*&fnoVjmO-DGN$}QiWAx&pQ$hqj3 z-i*lwYOOOp#c|DgGP^0~8h-Dc;(XLa0tYZJ8_WjL7sUKCgbFRxqm?a_`nV6c(-DQ` zz>C{MJ!!_(+QNR^_PzWy#x)QG@cX9Y4Rf+sIob5+>SVIcP>ScY@t4f7`)V*BIihD= z-8oHEiT?xn(3ybeYcbJaV!aC*^kTxe{pRBQF4%f zbq4W6DVMt;KbFDY-wJuaWG}x~7-j$d3hSOYN#C*NaoV}6iQ{#g_ZExEMLU_d1;xj8 zR`4wR>;a66bT9y|&-?U~F(Te?1La`a)#Qtm=R{tUJ`4)`X2daeBcBJhiN$Wzlag#}hVGsa+RrmOog*0(Ke|lmkTey_}6a1$4H zr`N%9(9TjtkKcDe>A$K-)1JD1%|KoU5`2D6bVW)?F>QmAp3;oCQmI1_5 z?{TMR_wMa+Kk8h*#_vQtZ};*TB6@=&zj~T>4qXqAnaev@IIOj19sTR!R(yo@^6&I1 zWx!i4v1{Sb(~lxQ_z=p)_m>&I!0&Vkuxx{ULZ>U84uv0ew#gRwi9hO$A?_0K{Do{L zLVx~vY4!3)5%>MBma!baqiHX#B)@;xqXMm8Vn4C)+&JUJzbb1j<-6X0NJE19a^Ten zXMtWp{(yzT!eaaTO;B%`kx$^E!M;_Mv^O}~J)*Jx#+mtk)?05l@1q@nFmd`c`*(2N zDyjGT(&zI>P~(*O5#Xc?8bxJR}|KW4}wHv6A@z zg_fCsi2j7xm6y1@*;-r9aiv`%uU$yU#pio1C9sdE>Hgc7SBU&wr~8u<;`yfHb2Z&C z7sB)Sp3eLfarPy;dvPs3jh})4XLd$UK6Nk4)A@%tu)IW%qNlxwHxtpp&ctcyRe<9Q z?qCApP`b~$<@$9)kP~)}&D^pFSaW^iIB{`jI^w2(yu5A{`7JseX|K;m{5;iHZw3zT zKCgXvFX_n4>?J-g$jxmb;O~|49PAERzi=;bf5*nBOhNX~<3Um6{1u-|%pxuX;$amo zG<7er|M1eqMdh7{o4z4Z^y^=w7X+54TlCkkQ&{2fUOZ@E9Eq)+S%LN`KFwmT>0DvI ztY-XNXIgIT#~3H)XdmKT0I#oxJWD)1a{q?Y9FO}3RD9>`&P@6`;uXNIV|?>w;`2h^ zBW=XzSKTWu$M5d@%xY`VPhKd%-T-*`h;}&xd^n;c?gB3FocLMGCF1j;G6lF9{LNFa zKLU+tqmXw&XU<70Oe*Lf$sg~pH7o9pj&fkZTwmb~EFaSk&Q#az7 zx-Qn2?+QBies>^(cGxYt*d*%c zNW}ja84R!^hP{TAZ(}?FS@C$yol9(CB#wq2*m)X!4{SbG}2VbXMf+Z%i zKAy9u(`?_n?_S!}i}4J}Ip`sP+v!Tm`P@YX{0RGom|Xx}Vz(G&>__i6sk0Li;{S+C zr&6Bl>(lb2_XWBu*?xUZLgD^p35f~f{C;5p`&G5w4Zyz<_kU-+zxi-4&X>+(&^vq@ zCpm|674#SXjQ4XqCDBln_vdhsVtii5!<#m--rB-2;%j|u2Y@sfqcVrDlGmn z{xAc;xMJQEum3Ij*}MP?3&X>uv;%n9T~&(yz&?w(0B4%~Fk>Z-Uy(N*Bp%;ias}U? zY?AL$lht^BOf{F$uRlK|7W=!cRSgMFygxbvdH92-%Xwrb0!^hv1J@tYY!~UF^8@hv zbU8*-h7j?8Igu>T9$;F@;+&884_PGxxvgpMf>;-HzR{3R!9Epw{mXMR6O_xMf){p# z&@-i#N*BguK4t~}Q*Ga;#j&nkj+ONmOBnOi=e&Z|1AA+a$3?qZgR#2)DsT(ACe>T< zjJtEfe|_w&u)8yoTktZDaeHe z3I}Q01Kf}GT=7EFuDohM9RG0lF*B(Y7XAK>-vG`(*SuRH-rv$cuae$;QA^gsP5@?K zKVdw84G5#R{bk#(l8S2@{V#PU32_oiIq&wey;HI$vi;?1 z`^v+k&4*rwoshX1w0PcHbm-+nFLV4qOW}6_gL3M%4r5?RMf^j3HR3#o)O!uXZGd_Q zOj$3BlM<`GEQsc~FX_1RBc307 zt+jnT=d|wJ`+XPWP{r-S-7@5Hm5SfjMKi$D5eKrwC}-Rz`^9!eA$})@0tbS4u8=g{ zM|l+LB+NVbX-o}`^7)yPZs5)?$HQY5*w;Y6aZ@VlRbxX|jd~7)>A#;MKIB&~9%23R z+C=d@lNc-DbdLCzLw&`1nc~y?z()~x0GdFY^SmyF^Vu#>iDx-)_jF-?;{CgGh4(1; z1|!#VtecHl?7)|FXR(DG410xiowGF!{?=nzH6i*LA;CoXihic{Ecx|I%Lvn zNu1~TATH0G=eQ^1%p;I#nqPa?MjD=ZwU71Dfa7yM4JZoiM$R-;riP?)cpl0_t9sa8 zaU=>U9dZ0U-d4^xVJ7<3Qs^nO8B??x?-}*cqW;lbyApOE)i%j$jiEnno3rX8)i^(d zlz$Y-x3^1Kts3XPvqBnp3+&3(DTQ(6)|*2(4+4jR9+>AsS)2l0g7X*cmTuDz8m{Lg zk@f*%+&seP6NxDW`d*wzayj1bm4qbA6Xj_xE$2a;dHC;6 z?b}W2zt+5u?KCZ||0_Q4@?@_EvHw+8r;51W#S==K4S4`8R%_md^ZW*#fc+5XtrYD; zp#R*kVH4*$aDJRa8}0sC73=P{J_fiy{6lWX_b1-Z_?)&*TPORai2EZ>z-|8=wjZ~L znJ42;Fd)_!*NZ;ApMCoJxBJ`Y;Qc`-^+Q3_PZS+Rsut)M;&PaKW6%cyzgDktUw0H# z?K;|FR~1p@x>{<|!EYaUr8tfEOm?aKK#_Xksnm%1y}B?S0enC#aOK$q)MOAf=Hz+|7#Cl8YTL4QHxeYhDG zsXoxX81vQ{n6It9f^s8A-p%lRzfSix>Rq;u=!^0C^Qk(-`#qKwO zdQ#V>E+6ayoVl>|uWV@VU;O0Qan@TKuzbe=8qJ(yycMUfU{}s!o;-W%$aVJjp-D@O zbTYXn$#O$?tbdYxxqW0}_8ivD@y-pi=WyNi-XQS&YWwkI_7y(&gQ@pcodbRTf79OM zb-yMrV>vg&x*~4ozvt(EUI)Ck??7&}hZG6p8+7cs@bdxE$5yX3V&2HLjJz1 zMbq923yw{f{{H{s@7{&z-%#${r;Y@ytwx~B69~!FVIzIUG z#LQVdR~_>e_3we?s>k@A^+)kI%ggV%1ik>sz*(y8p}^V;)UP03zy$S?Yb@fIxo#mXAELZ8uSEp%b?sF06mdNzJAr+> z2X>wx{QMSfuGQb7mAcz@QU6RK|6$!DF5~CZ+j#yhx>$FM(jNwLAl@TI7+6r^B_C7n zXLl~IF<)`N(Ezs%@a1ExVSgq5^LKB@Z~0g0|2MpU1@wbjTQl^D_%13&itvh{Z#F!# zV*q^qcthbkt}f#Hx_Df912|0Ec>nXqk#BU_GF^leeiOPk@cT?EXLz&W`06TM9ptDV zthU5~w}WpEySuhbHuW^WRe(#;1 z{>0zGc4#ub17x?`AE3QKL6c_KKQN;}J4$T`m;55#L`EUoXRs%r1#>tRMK_ z@5n+Ajr<4dJaB|e)8*K)UQ+2$s+IC-)hn|q<=6F4XtEu*@bSr}GWl{3>+wUG@~6pO zVqAHc{XAY!x`UuTS;VSEKJuwsc4?F2w9|n66i~9XM_BN9u`W&ao7a}FCT;U=R#@+m zxEkd3p`p1wF3^a${Tl0Uipkr`w>8=gme~8`2f~8aM>)|lH9bxm2{g#S8DWpUsEpS~ z1ExE`RqaO-BJAdZj%jP(R^HcFDeL+E9yN;gL!Mk1iBSJsSjb*9;rr@*Up?i;<4X-X z%8R~&5M(|+sc#IqIhCg!!Mj&pyl9~v6vb5$-i>B9FrW<`a3QWI{_l2W;8*yA)oTicY4VXOF@Fv1X}EBxvYhSfgV{U#tuTFBblDs2 zyY}t-29HKYxw!xmVc4D&`4TViN^Jf_AA{C_>o|U3d<^Pd3%$=b+b^ zY|5M)I!t+0Z!OG|o)Q8Ib|=`|Xj9}D3vCyE1b)yE?~a=osRn+A^Bp2SbG~Vv3aHD` z*Egx~{ZmP`wKyL~M`6bU|JZHepOLm8{|c#`v()kT*HV|pNN;?ks(kOdf`x?oPfT=) z{9g2W*uZ*-(}k;~l4QJ_>lXP^x3C{{f$J*ohcAxLa~&M$J@jlZ<~7oY?%=xe3)&pl zoB5s8ugDj&%7=$sm=BUR0zL*m%88vS&r{jXZQDyRkK-xJYVy}plH0We*V=`?TH+yn zF=GIFl!pG7f zc=h@7Pp22!uhO28@;7i-TYjHpq1?0kS|#2K0=I43bH@v`7vA&``*qb5zZ|WB9G1WK z;!h}#wY+drp?&7Q(?Og+5nmd4oY}tm`f}I>fo~(QKiee$7@}PZjuG$+IScth#C)2> zd8)pIv=S9#T&2YT_|HRb1Z)iy|6{*@q%o-cB<|040Phd)^|iItJ`?UlIrX63)MtDg z_dndd2yu5mH}3z24ecM}|Nl{O|8L{|klf2cuwMY~kB z7VfXxK+1CH_fI^Za{itFR=j^acv}znA5C3Y52z;ghu@Xr+*P#yARWehAT8RP+mWAB zYs9q(dp+()mOSJZtP@2^UEsOSV37NJah{5Z+BM!6U|`dT{VC&#K+ZtE3@u@*#(J@? z)}ub9_SJzp*!AKZEg2;4$9i1>=e`H+KfGVXz68JdU0oXYyJ&nw0-v!TZJR36g*nDU zhyF=b$7nY-lL#1iP9Gaf*75llpC169hCCrjX3`}%->_UI?e|lk9C+oAz6QN4^BH_0 zi2Ls8EY6*X7a&@fQ_iR@=kwL}5l?0d^9%IvacJbLU;j!3@!3#cEd{@Q_&=n~AzNqA z@t0YThwr&&RfY0;Ni05d4)M}U#ALM_zh6!nEj;Hn=Q7X-LLZQcWSLK4+2KTj^XPP= z8}c*a4P1P|%=P-DHuGO-7m(i;&Cm`&KQcJY^Jm-jki`aEpg)WFaQGhWQ@P*A{lo2) zi$q0%{tWryV|k5nDdk#A4E6(V?<+shpAX|)C7N_spT@r0>=4Sg9dBr9ej-ag@Px>7 z4B{)zU&A<5+rJbOA&0^q%UoYU`9lpv6#BL7DI@|YzhV1hbt^uA{97nokC0lx&x`wM zG$>Pl5>doJ(JnxuAIJv{mDa(czD1bb(9Q8r%Hk{Jn_1*}HDTX0B=ULg!~U|=vlz#Q zOIr#bazBN6yP5AJzf_uZAbBIjaadTjd^z8jCe$BMzVRv(v!q{Ms%V0vV|7%NVw6*w z-|rbB&Bt=EXDzc;m3@7U3%LH7sq{?3irf z_cY&cB0PVHp%Oj6v)lLUbQ#`1e=VQqwJzJfw-N2L%0nsEce;>3yaCuFzVg%n*M$;1 zJ;?GMp7A8@FXyGG$bONqKDf@cmNuXkkoy(oWDw)8#Uvy5^U-Vf1KmNKpJ_oL-900k zNxvih(TNV^El|gvttD=iABtJ9o*d1Z20hH@(gn&JA{dMm?r?xDE`mO#6X6Mf|GS}2 z|E(Rs#tpx<2WZ|zJAh3aLI&zRU_Ss{YX$Pjt6oIKZi;#oZNKx4rnNES`5NGx+j{jz z8~ol6_nU$DBi_Fp(qDZ(95$ShPhWk$sry}%IdJuP8}ayg_~mxbrrZB-;>2d79=L7| za9rIh#B(FIskWwKe)z11_8(PM8&PJ+SXeYe&hr5g4 zAI|Pz-2P0VFh+m<-jF%GANBy>D_lpsfyMUH3Zrrsc?&YxEUYWuXc`f;>|*;HO;r%o zi5pkPWT|}D1CEU2k*-Ib?>{ux7qc)f!2DF&!}9vx_pL)-dxzM$Wee-sS6yi#zWv<2 zKLk$ufYYFJU!>iJsqCKRvw=3^A0iX7$qKVfP7@*?#>LQ5809;>bMgE8$cU5%y z2HRg|kXjhO9_Rc#pVt{I#kl@@qaX7k&Gt$ux_z?@{g2L-5C?J5BJ5uIfI`};D0L<@qKHvygw0Yv-)(Yc+a^T86 zwHA^6g8aTQ8}cQjQgtog8uG9D6y+Jj!|KV; zk?)n=T?aWC@y4s=KH32oY9UP~Er?s#j-yf3(HMUP5 z+J-y^`<)w(E_jC*E8w~@MrkN3$q5wGozO+ z(2pV>N{!WQhWydLGJx-2*;z7@xk-IHIX*A$up#* zFxxHeYqAIm`$*s>r2p*Sj|67DPV6&C#Qd+|A^#J+zkJu>8vQ45m=4FLO`BaE4%#!& zo^FMGVU`s30GhVIH~=`G-?9TJsYJaWq};9Je1sVQ?Ok}ii1Qhj=r6>-X>Pdlv-Sc1 zx*fpvfcWE5^hZ7=bki>2av_e{|7Mfa9fBN!cuuNtPY`lnPvvn{{U~erhHp^7ovY_Ve8Bdi0%( zlqW8vT7j1>u^9^51{` zW4%Ur_rovIn@*p@ch)p!+9?lPYGcP}cb>dsnOVX-jzrQPuJfzcriSSMe|UV|I^zA; z7re*m|6eQBt)k!KYa_=IHvn-0aDcmtbN9(A;{R8XG2n-J;wA>O`C;Pw3k#dx{>ICp z?$SkzE57-1?F;$V6#OeIUYN?awN<XwV%WtTLjC{);slWb z&;K0!f3gY3NyP7h9t{Eii&UHaE!7q%Uji;H;h0h3X~^Ly?uQm zi1V1iXt_o?9`a_33FVoDfeX~nm5GM6lt)!DTJ+;l6wyMtSQCSR49bTdZX4z9{=Rj6 zL7cx9>HHJK&(s|kAE6$wZ}}X~5smhP<|(urn!aJhNByMRHBmgL7|nn1D)kH_p_03C zKD3!FVn63m)lq3TpFegy`2pX5?z$lHzP7akdf-NT<=Q`4ILq^4$a;+Wkf_It^GMLK z_r}dp(wtQfyeQ~67)~Re2;%zBuY-OSIJ124U@xvyqW9D}ly_|3x}yE{^oJ?nG#!Y; zIt_iygZ6_XgVodrojTq1AWzm3qm{>uc{HLizAl?%E5# zf7oG1+9%2oCo-zZCY)oMDnb?``o}J|`fy%>AKkaR($v$O`g^&D_1w|f(LlM~Z}NYK za{gvlm%{N4$LEW9IV|3#XE)JjXkf)S@Pw1B|i! z6z74Mm@xCXDfk;^n&AI8BNp{phi2NwIqreVnhKuRt&5C$wgcKDa4Goxt96NL+ho(g zD~gflxQP(;l+dg8*Vp0P)+7p<_To8CTvyajMmFpN{s23%uvE|c2;+}9#qf_3O`%fQ z56FHc!|R#26y`Y+Zel9zm>Mjh^bKB{Ez%&*nTcAg3#B~Eig_tOrct%&mj z?r;9I9w`XD(j4|N>P@XF--UCS7g34xUvSF3;X$@1Bbp&sK~J4&pXI#5IYTSMe6`>` z&POphm#3a6fP-rz=4*1mUz6+T ze=j`V*^Bk;)X4|^HMkB|t?i@UX4>o7AcX~IcgcfW!=MrK@F;25KWX!nUkVFqf#u!% z;px4+4p_c|{p*TbR}%PRQvYD$XS7Fad3gRIURTz?6ti`jcfD11@Bg_CdediDUGp*@ zz<~PHA-?~V5P|(C?3so)`hokqcjSymA!j+DmWtFs-hvq%^tk(-wQDWNgJa%Rzo#IR z2LJN)YxLs}J^89iI{>{{uhA}GJrlydaK-({Ic=Qy|5p~T9R23Y=3UOy3wh+n=`z{k0Y=>hUk03|FGx9i2+@ zF4CI@or&eQwM`ZE+xf5o{(#62{H`#|-;e6UCCo=)H5hBkQNMAE@)GS3oWm2>8Q*38 zI_<)M11zojDW88uUviLqz22}`EY`cW#8B}}hrLbvR%OLA^jjDoF2_0?$OtcSKJCo9 zGFYGX_;uU8#J7i1hkB{kn|e7EAiv8bH^Wa0xUw!j7IeTLBa*z#ebzEK7Uh1Ub9N4L z-UYn#H^{$hpB=4t;XNU_4g3;_R#L>iIEgrw3ivAYHYWKd`AlYZho8Skzw<(Z>*aDx z86h8EY88sO|5p>q^W^7F1NH|{C6sL^|Mx@>=o_IoLtJvKck)Z(f4FYe47X^#&ILIT z?)tYV_yDgz56}NJzE6IJ$2Z-g8?gR?_lV7RlK<6L*O<$<3C_cZ4wVk)iTe$XT`Jqnyu`%s5a$d2`9D}4Q6|#I zS9h%Tc14Q#zciE2^LO~g{tWQ|R*$D@!XL*G*uUE2Rg?UERo{@6{PR}{lbQOzu7vRl z>5x1iPJ(|q5|I#TGdx15FHFeh2!FTEjrL*xYU;18?dR|5&5XN=eXBk-RUH3_Sj+ja zySZNBe2JSxk@LhL=Gr)}I-S_h-@Q-(k-i%1!@NQ~2r;g*{}nY8C61ml2dY?JVqtWY z?=R**N_d}@UI6XM`mNLwz9={oRyYZv!d#OqwUWy_md z58}R86!tKFt_FWAez!(1Mj^M@(?O|72iIg_rvSUr7VSGMZ;3gcV*PjcD>0uD&&alS zi1X4QJqh^+{^Gf7G17UBet0H(SEMS+`HbUFhW%o$LtM6^9RTA^znYbn=0(^I z;<<1x&U)1MAEvx%9}WZ%#p6uF__QMMeK{otDaTA)_a`W)UWcI>_ZL|n6!|;s4P??o z2xwu#xQNL?js0b@R@bsVmQ-q-^;48JHN|?)Wc+MLb{^+Mw9{4+nCAVt+)?x&;uGwd zPXpbz-~0P_mATjt*MI-3w7>MJ(Fos@E;_dH{y*xDruklZNP?XY;_An0S5lt5FFSy^ zH9?128k`_MGX-K2`IERtg8b;RUmTbS0LQeOrCKZB>mO4G$WJ_pR1qgVxyuKfw#>HW zVgd6e)08@9(X*a&_SNT7Cd{)oEvi=IzNloTigJK@%dXhx)Bc|L z{pj3iJ>@dk3s{O23SZ*?k?6-b|7}12kMV!l0U+&V@%&TMx3Uy?r6d^)oZpVlSwG9M z#6)!k!G}6 z-E#JmxI)4_aM?5IsKW71CbRvGXjl8Cu?*kq^iJr>hvo|(iIhM0H9rjdBjEmKKX4MX z`PqYUkmwlrPb1h^=_XYoEl+27Sw`^^6-U} zh;kvf8r9?qT$|!`MR~gZ7xEC>vv=bwk!l;-k-9NnjqB{i!*je}XSGTluqTMG7vbNH zd`hYDQPL?rxAAf*#PNib74L07*cZu z?Eg47r7vLKBCbeU80LD?4&PPZ2)aU52gnbE662FD;4Rrp*(~St{h7pHmSWymWcnk+ z{@ACjGw=EU^IA4seSV2;Ut1;g4b`^86h-MrB z;OfohT{zds;R?uQ&Rywch&Of4iDl}hT!}nRz8c_|dtq12aedON^Kc&PHaH$8rF{X{ zt>$aFleA^=BFGcq5BOu8JK)(x+`qEqPd9v?-#`7}KZ*Z;zTbbioALbLV!Qyz51;h= z|76^M#CP1aar5TQpTz(F*W&(v8uy2$2?h_p3+@lM{!Nr;(R>|of5tfog+s&zkngp8 z7xXhl+#mMa8{LqL`TM^f?;rCJ1rkTT)!)2koY4PRih0X&A-9n-zXK`HaiI7x=?08< znZ5X&?%$#&%m0tNiVc-Eaq>0kXf!81lUtYBhxH{}JjyJ3y z_+^gqYZ7`XU!+1LRm{hw51HA&LQ=C*uOlPgH20x4MH%bBdBa#K&v)Q@OTmFr`=H^y z{EPLacwSZfC;48zCN1NBl{>l9!+k6eoxynVoaN78KVB{B^{}t~prJ%p1wGmE)vqBB zAmojPNI>i@%6lm*<_+|d*0{*|WH1=OpG`J(A_utz`q05}FX>Jtc7@L`)hD1YgMEtP zhFs7C{JvnO95HuHK1;i;jvF)IsBv`6o9gc>U~+6KhKG-Q+t;gx6`WmOKMG zxjR+I`{fnoKjHm_hg*vA0UkN@XXhv3uWwE@x19ma!k>x1$E-6sted9%ixuyq9!*{G zTXwkP^KwysodGgV{ovFU#&JR(GA$)gZxYM(T3GMYyCRnHzHAwY zP(E8bbE%d0?+q4;c9vpFz5w|Md6-0$KiRb2n!q|OwGaE{%k-C&?z#(dD)jKFmy*=u z*DS3tQorA+9>jjlJbeRQq^_I< zUHYqU>$I55fkQ7(6%w$g>m2Xx#d?yS?zNZ=wJ)E4T2mE6E#mh&mDyK_`%8J>0;#@6 zex30Fke~9K#BIg$62$9n3a3Ikf9UD`P6XEX1Lt&KR)j2YzMVd8?U4BNes>G(U}}I+ zruHoq{pls(6Yj9!_9Ic78#t^n^m;jQW@rAr@h0H0Rl?vA;;zFRToK~;jj)&bF8uDx z4F=%KHQhH7x9HT!4&bkdUygR42M#+ILVuuMEv=aX@mfjTjJN}jIz7UT?LENN|L|+~ zEaSEIVvVs0c?uk=2>XK-j^+zrx`%lGBGjLFwj8T0;@5Y>v7P?x8z30DVV6)|u8Xjp zUT;^Lcza7~2(?5W1xW;Mi}(tm=oR384vUgmdO7uyYkL!&Iu zXkM9Tds;3I7-CgV|D^>6dNBLs% z`}E&87^iL$2iF^{J;eDRf4uuS_M@Rh(wH|Oa8?1W>AWvBKS$jCsgtKq)84~B5{LhL zW~X16z0Uf0+=WxTt}*HnkEy)#7lB9=@d>(9^0gS>o6Uao5$B5~5XjMA9DZ~@`laip zf4ca}&K`I2vQ$C*_pDC5N~%sMB7gtUJ4!LG{;F!LmAJHZxf%H>_PZk+v&f6k;|`?e zhKSE+TT@GMA9gBHy&LmzUo;S)-Gh|6)J|N#Y`EPCd&N#2{2MrbGt<+Lv0we&kN2{l z^`~vHJLzzKCD+wjhP(iK+cb@FA5wC4Kk4G7Wq#uQF=OSb3~~Em9nT<>-%{duCv7fpOnG zRA)dOj?RMT?JDwqkh(({s8d;1b3of&G9*PaQZm;)N=-1g!8~^_*xwP z_MLiTc|{oYaZg;It%3iRU$^0H;^3F2p)UZwE@WtrP;Fmt2^0Ty91+Z;#Ls_Gp#B~9 z4v0hWAn;>z)xBqf;I}!rNfJ*k`})};ZY+kas4wg$1QG3mKM~>$7TcjAAP+3N0!Mp? zsOQ#|)eSNZfL@nFK3c)46H<&zyYqZ@-*(j7ap}jinPNGLQpIbSzb%|aeco}kk8nH% zb^ZkRh3dI{p6zXM+UDqwHnrM%h|hNo3=~-ZW16loxuBh4WQ;-fNwv6```A%yyC|32IqwiNAso)kYjJ}e@pDM z!?*1K7G^&g7eH58k8|TK`Jer8=P2y}sv)m0TF3cyC**YY_ofEM!J$1s^Tv6Y4F1i=kEEq{~Y>1uL=Ur)z0nz@Z9|zcQF)I*{_12LVt#M5CG)(y9w<&>kc|w z=ClPq*Wz=xbAHacyuYMBmQKJrLp>~(nmor#XEK;!e_*%PrYfN?bF^*Ux{kO&?Q#qJ zBG0+aR;f<{p06`m57EASLnbmzx%<-9tcUml<6AI3fZo#I&+}G$CXI0bzM|Lb-U>H$ z`c!L@b^zky#Vdio>|A0X&i__eelpchI{;k%9^)Yk8$bFLscup8crET?F;Vi zw>LJHF%H1uCwfKV{^8`ReC^98!b-LcG4$B<4^8jb>pO(_%s4$dKwr=Sza!;&kaQ8K ze4-KKZ*w1dxvY3Dryi4j*+q(fKF0fii{iXQd4AR0OKp^MmtUF6Q!nS4of;v2pXnOw zqI_5>rJxs`Z1AGu)W=;ISBv_K`u@})f6sWgwNalTrusGNRfU{(fpGv7wE%lm*!x;# z#6^ex*!sGUa&hED@Q1{rqU(8y|1?o{EhT}NLmDx(F;5Y#q$rMz|vG?c=dg^CthvuK9UNz$0*2eQ)I-<8g z4z(k02+lv%_A0-*2lyuPeP|cXfj>&ZFY=^EL~~JJWvKewEaz+47w`V@Iq-qgr~hCx z&TY^ORYilSkNNE?6X##eulr_*@27?Dzt8jOjp$%6uk&?vMf^Snp_O{5;ehVz#D~-c z59HrQ`$=C%jOE_--8l#Nja_F0g4HX<%n&mf9d~d-^yX7*(J6HYe zKiK1z1))#wg8>Zr)Xa}I{{zP{9U8bw`QJQn<3=O;z06PvJ^5r)2p!Au3TzoK+HdsB zb2DTz!+nI*b?KUsZH~IYeFvqjE_q<4I8ki}bGo&F4&KLOpceick zxF5_VHPV?vHp};$oBJv-jt#YzWr%A4ygIgfycg%!Orfid`XPj4{vP$E5g1@jHql?- z?WG>`rHbcV(mw0bljH-1#1Db9!2drQ0gmz};=ZaX zar|?+o5&+J*)TJcD@?+FRMVyhssGg0uZNxaWP=t_BwlwFa)?vi)6kc)glH!aivM&y z-%kw|aK5EJRkre6={sbt=Dbxe-ijxD_}O2v~ez>4O zAG5?}i${Y&>?=d{&yMnZoh|IaxwzVZ0ItPAzE1p06 zLxvaHIR6)XxBUB=AIAm#D$0f4@fM{%mv}$)F5pXy6AFrWm}sXx1%)T;t&gWpQg2%# z=eLs1cKXm?lTEXpjDhRCZG1d!!o0~_zvTn&-_+*Vx6Xy%M-RV*d5`m}_Xzf9*b9n_ zi}+EmSxK;e*1Q<2CI8o(D|*Q1w|I9zdT}{~FD^5ao>@6;Bt3A)gur%mTno!wpL5eH z>;xF6CO^vi;^0h(<@{5uXBp|mkRSHu*iUA(HeP!ix#vlHmmja^KJWZZz=rdf^Uq5v z?_!+R=G}XX`_PQMs-Ew)Y+c$Wg@ewmyW2j5eC4e8>+i-XSB0!&iW~cw5T8!4oY)KE z9h4uw8rA*plp7*C!=LcJ?tcg(+mrF@{ImmTQ)k-w+%hrZVLgDFwU-0;7tNJuf2my@ znB4)t6K6`Usm1QI>n~>3AKixXs%|Rdv;&x)Iyy*-ybC`G!#+;Eu=9EDr;*17BK*!t zpN9TR3?R z^>Ad}+3VXngN_Sr^Z&&98K<^=>xx@&PJ4rum`@JVtKZsQ4!u~dMQ`B!NVI)3_0?CC zgZ-Qj!fX_JeE7dc;(yQa_?z)bmE#*;+Up=SpT7S9>@S>(`6%%HpyTa{S;PTwIreS; zu!!p$;zRH7+GGxYtsID(A#iGp?UE}iUPn8fh+4dq-)($cjZjZv4E?%jr}fja5JpefcKjuPoozVHfAKe(KetQDp_=4|wIQ$bIGR8Uf`r+PCbS9_M=2 zrb0ht+~&PP#Lx9sRXQ@v`?|;w@D!8%=jVUX#dRQNyGFqbU0 z>`Pr&q&3`M^7T`c$LtRar*n;v9|04IpT+TAT(3IvACQmn{Ngp%IVttQpwtK7<{O`; zSntRqvIzR1Mu&_)jI;9?{%+&{f)nQn{4t*B#`XyIA=&|K+DJcF;PdjEp!~h4FZ2uI zn+wlW`un%9i~Ln7fbUa3s6*b#AFL++KMC9){#nv3oL?@X z|BVKP4u97QSBv%$fAeJD9QBr0&#Lb*FMyc*(LCb=c+`T*@u>OP&PRyr>!NGdPBtB1 zJ*Z?A+7px|3dlc>@0nHXb3F}2Uu1b<&I9)fxs*z881l`5W0p7v+>fR>S+)H{@`PREtNi zn;`F@cXuLw8Xgv-ZnH+;Jd!5cxV9?XQUe;D(J3 zwY3ZQXQTaY!zu6q?0|=2zz10WswA%ux8907b6S*Aylx)Ph4{P@2#&D*+StM$ao@Gb z^BUJ@S}#L>2s*Be&lIVqgkR&ebjT1Pzlu#A=pz411}a}Cf15|X2=d7|;tQeu_Ti-! zCYEot4w_hx)5=ZMtIQ@Qem@b!^~{VI529UOMHSeOq7cIRE3@eh#xUC(2<*f@ooO-{ zDr?xEib;@Io;X$~laEM)KFHN3d*iG&RP>AXYx`Ip%q$BmN9X_QFN@{rhR>2dbLu{U z_7LxAPQ<^*d_Wj4^09&JM1QNGd99sul3{P=$H+RW!io11S^zLTtsJ6vk> zEp+}xv3yB{ev7Nc*WW4l>b3IkNNJ%dLnw>_es5LpjU8c-hzkcwq;i9s$Qo6HTP8U{1p+U zUjB}_1?x#uY6ANv?5-sZ>y5aDE6es6g~E&gny#8Ewl_Zg3)llx+k}K%vpk^GW>wlX3rv|8IKu;fJO0|7zU-PvidX&Qm9(e;4jgKmH=_5BqCUz*n#XDBlIR ze-r)v**s&!OKTZ{61S{r^SF?7thXfBQM|Z&6f=_@D?!f9$8s zGg-WT__q}Py&~tyv13+i2jm&G%j=m$ymOdot*5>K`TorOeXMOF&GNKVANb*9li6%I z&3#ePo_&e*7ll@p`?(NEh*)=aO)(g#H_;>!>mM4!cm#4gaQ7EwoFkxz6ip`1`{wz9 zDDSsuV)QJYZ`;GTd9?Eh7U{%J$6oR&#B($N zSYPE^Ve04dhO1%t%Z-bEj*I3q3&i`I^ST7{eAS}j^xyNgCd+IXS6}|>De510Ync(s zzeAygLiskqdDW3Go}VMh`3uzZH9yq6xJc*n{{-q7*JgfEgY!&R7vq{eX!jYG1!xB} z-qMEIQ*DpLkM+<$Nc)>vZ5zJx4?~OBz6Jj$H7$5-crU%fvv3aYWmN_8K&fqZuNye| zWK&~d2K-=&&4RqySKR1Np@4lHeg~N@oUI5OOi^p9WJ#&|byh8^cV`=g*g%Kfun zG#=o-)TO?Qc74#4cuWbwE}&t@0OLI#U%l$Dx+;;oZ{xl^Y#QuPIOM{Y;>!Z4$xLD5B*4B+@@cy=6D>FR}`y0f_ z!ack`{jK>?T(6F*118?DPYSdA&d|DiGv9CXy|}IsdJv!X&Vq^cSFd-Kp*`52@SQVF zm5b%=jnJFu%6>4}i2BQ+@CCMGI_dA^c|u96MSS0URO@BEM6)!``UI!tsWS9KN*0fn z!Y=a$0v}QCD9a@?{BCL}201CyRA;t|#Q)7=&rlE&TU@qUxPR&d#d1i|b2gmNoeILtmr;_y2rK+#l@o&W~~b+xY)&YU>^b zgDlzsEM$P2+BzdTzb+g$cWOC7umL&DdRxcn7ka61DM6faE}t`pfM04ys*Tj!4_OSx zZ@hfR3;Dc3|JaGE&!=XTofR)2eoiK%o(KMlypw_m+<$0k^0o88-^-09u+Nj8Zkvwa z_fQyN00tOGKGQDFGtRp=L_Ge=&OWm!o_{_R-eZ8jA#nNDOjX%=;KDI!Sb#l2=l9)N z;OXU^@{8s>Lhu*AR=-vw4xflb+KESJ;*Y~ltfm`yrj59NzqQ1 z=JyV+dE@U;57;%BkKFQGr~i8s>?}lue(FM2Edcj-L!W<%e(%nS&V5b5OGo?HcQVd_ zYi~vnfV=v%s{(P_$G3@JB|bkY`3LCVuU18lz;EBNytaH1aqH=vh`90l-O@HsmUwO9 zrRiUSI!6ri%)>U|EXsIp-d3&g!{sJY>MO6kECJ&;$}N z&RwTq&1suz;+Rpv=Blg3Bex0H48@VbQswDHNKKeEgeH?8pooCC_r}@`Jr0hHv_14D zv2mJYI(5t?iLG%4khhKPLWPxWOZz^LC{0&?Oy}Hn&hH9Urs>(DQ{?RKjN{Z2SNzq`I`$P@qP#M4#4dkw}{4fvi%?yGr#`17%a1q=Cs zXBP9%hr&Z1!^3TV8^V1Y+l~H^ZktMav&4zLO&#s@e_wcaPNp=!(4WLt+}X(BdH&vz zldDUBJA(&g<#+ZT7)CsH!BbLv_BrDGI|pkJcOL%UCD1#NehddBKz3O|clYrcZia5Q z*XEQJ{_*Lyka<&_ujAy>5zWb{4Cq|@Mq(B;_&5peU5(o%is4DkZ8u+xeDBN3xbbYNqy1S%ft#fg4cZ#_0?zZLwTY&!|tV9iPXjj)rI7D19 z0LOOX%k5fQ=L+YFf?a9_&Wi|PU-u8OmCyCD6Ee}IAE*lK>HXvsZ zfJRI_#5}NgojAEE2EPcDQ&f_*tgkzdO)Ne|{5=&v6NJ7q*F4bPf_Ziq93A*v`2*Q3 z^PkVZn;`C*_wF8K{ac0TV|?F!|B(#rsc!!dDoSZ@XgNPfeac-sF?y8sVY1ftlF!iT z(}bzEp!?|KS%G-&sY8cMynb@}keTIep7aM<&Ix^Xp7mfhMm_vp{Hf_6>&qGxwzB<) z#E%O2wVtBY0W#yRWba^v!8n1v zx*hv=>??)ZS;VI!-roTKe#jFtWKY3fIgI-F!+5{dOuM}mfd8lQmT%+zzbT3T^E|D> zz5seG;sHFexghcV!npuk=XRmpKzAGblm~$G3#_Wh_yG91XbaZY+FI;qp&uHGHs;Vy zzv2OGUiM2Kz@shTUj;o2V~TYM^?vcEXR?AV3&iB`rjey`R)wm*M}c8Iy!)GF+7=`j9;M{-dpw?R(T;}su^{nJg%kb=x;_ZKy-vk_N*#uO>VG=y zaMTZVN&1*}n`YOs52)97YN>+03tA0ue&D}9$Tv|>6rczc?5N{oqx7qZ{2)@`1Aqs6 zi1)|!X2jv_t^@xI@j1Kes(&&!!TX}@gFX9d{dzgm2)kN+^1sUEw7)&LcI;FIzMH?% zGQJhkUaQ#ooY@^<{^}xv3fwzgFRYeeH$*vR(y+gE*By;pt&|2sY9;M0+H+k2N?+a! zJ0o}jXb_ewvVHM=?(dS-HgnLm7U!XEZK3_TqPyF|-}4#9F}zY&VGp%&KWWr_2L#-& zRP`~;-%dkk@*T<=9Pxnu=9(7eKJ+Koi?iFXPXa$W#kh6FjxL+_3Dc{Ltt_Lx74c+! zC9SZ_>kF_KRX8518At??KmXwD*O||d>U){?*tD)Bm_IY(vhuyT{DpxQ*o`hs4&u7l zA>Chni1x3h{Le0NAN*aD;U3y$Md8$1+F#3?I={_!G(;lR(9`Suv1FX>1wMKKKROu` zP+wQ;KbEd8aKD|*?|+}qC93-}v~PbGae8?_uFij>7;y!_zduxreVgr&qRNs@l*b<@OJ2o?-n@^hdA`Vc#I=uph$i8i|!r|F2GD`dIFoiRKGioR{k! zSV|^~u}=wx<$eywK6cXnSbea!kMa@W`p4YA znnJ2vf#>Jv7d7HK`Ndo3vJPCB$2qcB>J}9RJaE``abO_jv>2YIL>LlfInw8OX7snx z^S9!u#^z4<)87hFG!cLGN?mpB1ok;s>XY%>YD!fd+{}C_dEHznUuZVlf_^#~>gi>B zpG?|qw2RG#QV){{u=J&u5SMO+BiDRC_zNo>Ps~oLNT<$bRWig$uB%sNjx$}YME}RW zP>Ws&BArabf_)e6kNIYoSZ|htVGHl)l?Ajn@ed#Dldw~O&_^Fwo zIPY`22Aua6ZV&0CJ&xCg&4~YxbjcIKz7FNQ?dPx8vOWR(!!BIF`Ox3+{;K5$3HA)k zS49%=YW$4&oxtUHZ{9o%oMC_CZ{z$xI|{ge5b}57{qSBy{9;ih-l)qG#x?B5aJ)so zcbd|doo8=PEM2B$gKJ@t~@m|n1o}VSY?4Gy~eud9JEgmnTpZ~k}wRwmmM|Q(rg7eEI$=u+c1-i0FLumL zkq0nv$Yf`_<1<2t_`hm;N0nelnpljl=5t9+fPV>$gd%w zpC!&82|fQX^8woR>*Qs`H!wcSE@!#$;WXb*TV6lL_9+=Uv(eEpZ-Ou~`F7*`i z`;Skiqu~31x1Qcjy!{ZiK^U*jc-ynU1rc|&H5%c3(sA_Mf8+eIsN6NedGH?Ku|f3f z^M^{nYr%OW+W5I$m>1l>#c8g?Qm0hTaeMdie>lT=`&!6mhW7;Gjl>qYUUokB`iU0Y z4~tKXw|2ol^}mc_Jb(}Lv9M~krHYU_8+so2NLIkU(a6W`vy@5UWfHV z)%60dk9p$ueDH6Th51a^ZJhra8mbEG?y6G86}mMq3;`dN@W*;T(bLm|dUj(vP(Q{0 zw>lpIK)`iiGv=GEs0YvhHvb0RUsS;R!H1;e`u_X!cZ*M@7S;#Q5O3lBgYyLm*k2*; zugK7gP_GR~RxP8Q5%G!q5t$J0PlX*R%3|QIka9oL%>sGBUgosa;6@{j0w_9Vh)*^nlQ;i4_ zj<4@{JAqeKIMQPN9Q#STIEVQgaagR@!uyv3x1_i>XrSISp-m$_&hMKFc(Xp4^|9Zb zh*_;%zgm@88vV<|64&j!C#l!gXC&%{#SXLeRvf9CWW1C0vio}E zZjPUc@y;ykPwZcuWBsNyz4I#Szq$EI@Dkpt%O!d&Tk+g%EZw<`JY8R#Q*a*6 zR;R_5DCmC+(v3xq|7hg6I*j{+^Z6ar-;%XQGQ=_C@v}#mZ?j<#>vpBHvagiIo6o18!#-R>^*mTixF1n+OlSJI3O;FtV>0zrp`NYQwQn;&>SX$0i>s1+9^jMI1N@tL{i^9+ zW03PiUY%t9fen;qJ^2rIiEQrx0w1v6t(Gq6Bgkip{5smvAq9y4 z!QVe-!uW?C?o-1|ClC%B@f~O8^@L72I=iS+=JGn)-{cs&XEx3DQS%-z=edZ%ps>H6 z)wRG{T(`qsLD|@__Zs!MYrQJ;GWh9F&&?sKgrhV5_BsBpsaa^t;CHIJd==wS&#LgF z<2YKVF38cwCXTDVBaBlHy->^bQBJ*opq1YX>&@`%L%*GBh-_5B`bgg5Jv{fgG(-K^)|=BP4c5gUa{cN|R9AC+e{_FM8D;Z$e4h6FHjfMK zS%Gtt@6Jy9ZRV0z_@}2-^!p(6PV2xhaQ@kv zN`cqj-T7&zFV)!kcr8iMkMX^Qe7@Q(#Q&BR8;Xek9~sM^qW>aj4&ggq+U0r#j`W-- z?y32PYvx7FE6oky2>=Ie@WY<~=RExUy?^BVwRH4sB8=~hHq`Er!b5J|*MRQ?UGI-r z6e&FHZdljYAc1cH|H@_3Vfg3nnZF|(2Hpv~R15lrC=?ZV`pxi12z70B9y!rtga6VV z?i+~v|31He#=-w}{Qr0R{YzcE|LgdF34n{=jQjug;gK--MB1 zzp+q@{_Pyi{9ZfPoe$*ytg?`g z2`$2WHD>09IR1`??)Yg*E9O~)&{_S`3P;&QLqqjT70&th8yYx{_0d(}1q`|OLgB4` zDd^(ConJ=zGYd@$P@${3&17c|dRtUG4&v{sDy z?Bb&CyHfvVUAwPCe-nBv+>8X^)$8-okd^C}Qafj%ek&}^MlM4S?v-m+lGkfFH=m_m zZ+KA0IXA$|-^BIqCldK=C)Q8KKsGtP#ggjliZKki(eSdwqn9N_P1MVL;CkfXY* z3H8T%Ux|8yeJb`b6N=S@bn9N% zgaDt*EuF69bB($MzvFpX3}HQYPURYpz`p0SmG#(@g+a3)mgZsIYS=B7OH3N#z=f8Y+fzWkOf!nxGAkA0pL z-r`z?zu%Alhr@vT@tmg%0@Bfy9G|%q2L8W!aPkS*W87*><$MYJ6Z2N=yG^UY$8y-D`wBzVxMkZ#3?H{MB$cyS>Rbg7w!}cBh><{mzIWi~y(amW+t2 zBZW~9R>lGFPo^W%;VEyqnr{SNi}~7qiE#qrm7!6@1?ZaFcD;+dfFg6rK}wT;CQR9N zT=MYu$O~iT@cZuw>=Yv+aCmI1{)BjZDs}o)eRvmeCSwn;J>rI%kr)3WEL+U0M_v>U zV_2lXD>$q-oUNU~^|k4_^aybINF>|t0WQBid$k0(t~--d5sv`nJ^9B1&mWM|J12?T z_k^qW*5llR^Yhtp;_b`k4u*+Ozc5g3C;lG}`G3Ic?;$ci{o6&Wy)<-qt?T)Ie`VS` z)YdZj@Q?|3dDn3a~IwpPe$lR-BV(* zkdGns3(w;@Ph@kjixi((%=uwXBU0DfCE2O)_a+_eqXP7 zbvN*SpEPX|AQA8J+dOyR>7F@XH-5ja`+STy;Ft9z@c*wVcPa9>fYZae1yA{DyANJ)hMEiI%l&ML*A?*d;n-|SPz;Vxt_Zqr^JI*R`;Q7Fh|J*%De7&?GE=N7+6ynCS9wt?+7dgMqo>-Rt|0iK26nZA_t zlMmt8P+s6csO^Dw=y%`Q@dEf7C3_aL?K@F!cYEhzp8aJ^*-%M*UrU#R?}B*xCc`A< zBH{@?h57HflVXtgn=>$nk;r zA>gI#a+~~y&8#O(X9xMaKQ#y`xW~_m25ZMu+be?5UxGLq`?D!Oc}P z(u$ggDEDjgL#&sVo3Rc-n&(PiXSww8{Ha~QrxO;$bHlo2kunX$vujr7fR_i|gM-K6 zH;4V`oSMS^(4EIdd)V`D!TZGm-Vb+w;4Z(3@BhAQ;JFBZb9=w=+mib@!)+eGBflOO zKwla({E7#F@;wK`5!(~%#sgeGZ}R}kYIC_X>f0*z9AP`CJyl0I-}J3CU_Ku5jE%?9 z?*vcN#LfN0`?J}lCF1vDAlkxquv#{P2LOIwBsEAr$BZ(8ejIdvr`Bd?y*0L_4D5%x z?rUfN31UGQkVP)u&;nrS$nG zYI*KJ;z+Fx?FXLcU>f^OXFMl^M*zQ3MY%zHJi``3pjq) zL;uLZ$ul9OGn&s=mjd@cQT(~(l<#deVV~~lSoVqs_&dI{q~~UEF5lg4fA)3kLp;Wk zjpPgLDc|XG0Way;xZYC2(*pViMC+Gd^>h@Kt%RPB_p(b1#Q(Rwm(D`3ci&%aF&1!r z_>GbWu=&0B-s8DmDb)u*(;m-K|CK)?9<;2d7r0TOKmC?0ed&!lRrPEp-e@o^huxUc zu!?pV5gRw+1{(gM{Xz#&Mf+R)oC)^1biGZqUgEy5|8y!vJ4SoE&qw`LZ}vi8?XK&% zcFj(?*dzAy{#jKJDD#V2!T(#9W_dOCg^oTY^e)=h@%8;pO|X~M`;Sk}751ODYN-I3+Tjfch}-A>if7o&fds2JMwck3 zZ~Pec9@N84b&&O8FRmz}eJ8uyeUtCK|KK0Np0vez_H$)bv?D#zw0%3T?aGO1N+F&4 zQ}$2yMfWWC4G&IVf*tIwx*ECKLi}fJpWe@O_2yh5f9rI8faQvX6wA=eeneWY; zH+wi=S;EA{5I-ha8{_@(3+K@b-mEi?Z7B33b#MM-md~)V2J;$c&bq;Q>XG4ovZEzT3-KinYh{|K1V{2uTwUopz*kKDq$ z;5Li)xfS2PfcL}CpOQQP;{6TFmqAKh9KW2uc+Tgi>lyqOAAR(Z+qfR=roRX82X6*{ z1-u{rwUmI{U{?a}ujYNX?M^ITQM;yB;XJ>4{xrsW zv7=+Z8T}Z3Z~FdhG5SsU14;tzU$4z1t>_o^y$USjNT)X;0rxC+nl>E8_}S`;RBm_{ zdWpL_(VVG*w8|Sz9?bg>`wao!Z_n;d!4Bi@S=YT#(ki&SU0Q^A$=&Bp;oK$ITYGGX zTPCJ#E_ZN>rDy7 z|Ep|fGs|tXUI=3SbDQ%o!e6CikG`?H_7v>2AMCq%gZTez@`i`7kM5AHt1s}o>6_zT zKKI#WfBm3@-_;8tAMH&SFQ)$z_IUU7f75r<(8&EnooML+BSoH7M-b>S$CrVo3_ZKxU zqn_aW(V?%hz9#a4$4gp!+yf6(8d;uJzyi$Q#Kg6J=5KafyUz44O{@JP{YKBm zLP5@V{;|JT_2~58VB^&dG_ZL%l~$U&!wAQ1Wpg6IZ}jmI9-1&Gz5Fo z)%t%CpI5l<*f#q^Jhw5wQ2RiI6L@m}_Xw%BiQ6E56JlIW{Mds?G~IGv73Pa8(V)%rwYO%3&-(YwTlsW0?>WG!L8vqnWc%hO(p!@Vz=3-mt+k8luuCEmyO0s0l< zn93QX_ZH(s%M@OY%77`}?yJ+5^0R3s`k9PDC}$Ym;HMgnT;l7xUl`Y;}gjJoJvO z&i4!k=*5+ekkPQY1=rS)rJDCs219`Lx4S)!aX}nN6HN}_>H>MR>G~e2c7W|Eue0}3 z>e`13E#Pl>JO13qawhVx9btOMw5WyhiJL1?Uif|fa2xbhlS8r%pxuD4XSbm~Opd|3 zm-)dLaAxQI8~I#1t)_XtNgj3rj?dSp{m`SX)-QC|bg+LfsA`Dgb9Odtq+YXkqSjvc zJ-&ZC@q#70gni`Ix;bqS`XAaY5Pl+!cu=yWNG!+c{$KKzMc9?*Ab!!b%-ygpqiz|LRn zID0H{gx?u$%`Q=9GKs=>2kaZn?2lSX9p`fm4SyWv?{~?{T%mrKOy!(Mcj(ao^L2mh z7LR%j0z0z58I5HZCpPCmhJG;Yj;RNu zQ=T4oXX7GxH!ZGNRgCkw=png+{XLt_wlRGnRtfzf=<2oEB|d+kWA*}{8yxiCL8;4O ztUurb=2buW01df5=!-$u-o0>W!MO8!nSjIU2^e->)1I)G_UNfFP z^=q5Wj*u0Cdt+t-=Tr@Q8t!cP2zY{f^fQKK{7wUizu>XDii%h57&#ntJ^JtH-?+>9 z$nL@U5}XULcVdGGZz<=A#SNRNw-VPMf&Tcr{QhTvw4UgxvVQrcnK0ZKfMd=Om;W7p z|J8_di2Ob)b8?eOim|8MiXWyJq~Gw%P+mKNZkjHgH(sH*k9FYfJJ&{lxW`FAEiLf5T=LYm6Tkj(sYuZ~r4D`&m3P??t?}`WBV;zqjgp<(1$K(_gOIW`*qZPD0N|T#@j> zD9^9JwzQ}e_;&+vz*6>e_6PXs>Z+(!zXUmc>g*k`$NA^qd*qI1tM**@`how2cD&|> z4ZGuRV4)5%LECEPcCeQ2hg<35u9&`DlLxvE2NxLTjm7T{0*)cU2Ym?!>y zT#V^YLH|^gL^a}pI!oUe&A}e%-uSuYql^zQIN#V%@bAwnjhx?VtP1uwh>Yazgdf!w z=hTm-Z*pD|MRO15t9^)j$Mv$aGt<8o>)K*xXSx{Y-ryVrte;r_aGnkE-&`&M|1#K5 zn#Tp6(=ax64EqUO&rKV-E;cvqSFa+Tj+##UIlql%5>e{A$Ivd+V|}#-BlXrDFO5A$ zz13>&k@?*Afp^rmfcL9_D;UR1v|3HK{QL6@)Q8{cR%rjN>s^`GzaNe-V4Vf7Z&glIV%;vXtsCXM9zEabE9irr zI@Vw4|BBVX@AsCKCEtR-$-KJn3EI_+ciS?R*nj1J`0P2Z0|}cXP=8FqPGv%Ry3(sN z-5t6ux)tdj42N|S*NgrKdst8H*%s|B$cC}IYN?m{bkWM+A%$DgYD0SU7I6~S;PuAE z!g&I5L&U)EyqHwLgMF*+Vl0IHAlg&3hN!<>NTtDVKzyUQcf+)^=488>`gdeQ!OykD^{$-LagB4bPJ?G!;e4!Fdw}WW&csd=N67RkYuHcYLS>Nejq3TO zPjL<44EVc!?daO|OZ?x_wF-nY+9eQomlF1=WxwJDkT2)+iI%tFum8bBHVgm0j;K0) z+6r6);U7{{z$wli6HRvjDebE+Ei2&uh&T8+&gu1=4V%9V+&`7|=84az((`SUQ#WU{ z5WjQEpPhk!y+x|F)4y+@?wv#&fR2dJzK!@(JU#GSRmW7D|DNf;2mb4^$g<4)hBL>@ zc|OmBAPmAQF#L`(u1JuPGav9fU8z)loVaUnXX*m|{VVP+4*+-f3RbI+xVty4?V!K? znv&9~X~Yq*TIF8)`A1T_)Aav0hY!O4zpBe1F3b|IZ|}T>{HELPx0^-s282k;OPsb{ zOU@GK*E(B38Gg!Rt+65Q{&HvbukOKl0KlJL&^OlO9Dvngi=XES+)-L$4IN(Y#CKlu zfQL|qc`S5zm%F7!$dgA93YmSL@LO%8eI?)-47KU82>iz3KW{OYc)~%qIxgbef?aMQ zC~U@e-D8;FiCb5R$Kgjl)b^pFJV<+oOYb1w7V!)e;IazQ4C~ru`|;8})NJ z#mM*phjLQQx4;AFmAe(jGdR?p=mXB|#mcHd`jMkN&EsD&x5-l%u`Va{;(J{FGuQmaA5-IZHgdYMD*)fX5K=54NBjPVl3e zi2n-WTp`|jul<9?0*)tNH8oP3h z(zVCCoA`dSPtW000mQG52#g0{wZaYsoPRWzNl?Ph4c^gO;DuR@*U9U1`Vi&;i`0`~ z{w!w`eTbLgHuycC4TXn1p{~uRJt+Sxfyx?=+b3Y42&3P6-IFP{=d@xmaa=d}+S^$V zO-;>TC$8V>@uZ0No9(hh=}Bu|#xp6u_cVA;TU?)fln+r#iDTdaz;9W+VI+=fv{cn# z^t;!VnM)9dV2>XYngjEe6q?oey^?!O+u7dY=B}bJ_)Ti$kPZ3SgJV%!ppUe9eNqwq z-#fK_Km6TbhYuMj{i1%8e*fiyQowDs4?0Hp{m4;XuXQ$!dx?iTB+-F=*$U_M^lK^F z(e3#xQd{AOo$bxh-(H+~CrfFQq(j6P%q44%a6Y}TxI-U8IRp(%Z+y?#a|<^&;sGo0 zes9~EGq9I?)+no9aiCw-N>UYZX00Vv$mh%O8o=_+~ z-l(7HHjK(`T$fUjY`g;b!m-YU{20vG?;$_-H5r^E0DFF@w}9K1hdR-pcDepUpHpeC z|GMYeF!=*s&6{QU9;mTefY&)MK7IxD0Nnb(bQI-v8g_%9j_;gUW7ntJ5Kmq@co6OD z-Z^t61O3XKkXCP?-5C5(#)JK}c>ce{`$hWs|2};G_uU8X55LS|41wLKmcoE}QY|wMP zfdjJb|5QHA3D%W3vbz2ihyK(#-a3cr3zx;@m44M6`#)*EtV8 zgXhcU%NeHu=gyV~-EZ<5{Q_~mt1ZA^Dx9Bmw)?2RWXHz~?Ps~B`^YaaSL6!*FNYF{ zs{uX2VAPZ$eBUp|ef*xiTkc~!nO_0U&@t@kNGC^!kzeolxgYgFKY3hDbvim)T)hod zy>DZ`d!*VT6IVB;+M99y@t%~w>uJX8Z=N(jKd|n}=>00<`geVQ`SOC^fH3DD5~ptq zMg-#gy31qc`@63n_w)RK9i!%VuN^Mg(|lu(PW;4Tv6NB&2d#60`vV)*Q+~Xs z8aRI~aR2I;q%QLYuNQj0XM?wC^UUEM_j^0P2Hs7NyWD?%XB8x1RU>!?dzK>~GcR5{ ztc!X5+ToeQaN`%R9lmxL-NSJ0@Rd5?m79O_99`OtmP3D{G%Q;_x)u7N(IV;8Zv&#* zLA#dUQ1m@q*F_Ef5?<>|S(W-~PPGE3P1ol>Yc%ry`1rPMw4bKaD&pJ1{~yfDg1*{1 zeSv)6NK{pE8W#M>1(DJULJXfV zAG;Kxz04|afE^KbL%Z2bdt>;?%pCMpM`w2RsTSzl+V0a4=3m5dIW4e%nG9n+^m~d< z=49GCk4c)Daz2vpq%1p>c%Amteo^Wy^c$(GmwIs895B#c+pK5o%vU~tXP&?3a*O>v zum^o^eJ;W4bM2L80sSv3WZRkFE^)SSp62|F{2J5g9H@bQjq{&}`p*&ncfWfS_F$8v z%+z%ce~-*&5T_G%uyGmBp)*u59cr_^ZT4^Lgek z8xsrm)4|P~Q+)sCCNRcv-!6+UP`0Er=;M{nADfF{m#TE$`0>wr(9ZP;PxTP>|976z z(iN!x*FIl!hW5fUDe-C6_d?HKW1sM5T^f9Q#2u}(nfwvj|14$l)q-7clln;u-s@CV zBlBBgIVjWa?n&Q+{SEdfi{&Es8~UW7un)QB9Wc?}H<3qRS+vJk!e$#rJ2!UTI$t>B zyAJ<0@IG?%S1fjqQA-q`^k`jGuVONzD9r*o~dO5eShW1Wt*T9S1XS?Fp zu?t_}FdB`$+-E=f*sexCXSVdNv`aM*oS`*dxqER)*TrWurKmvub1;$ zc4dJF06+14l%u@7C>HF>_ZrQPVf4SeGEmC+eEIy*i!FS9AqKr;h2ws^3_k$GJ682V z9F@U`4dDt0@sAYt`IMrS*Sc&m-^S0_E}#1O>zJQzol}YVihd`95+vhe|Mt4pLcgL% zxv#@>^96|p`P44;yZroB@29`tvSYD){66I}9AtueavFT(JAfANnFwu2w2y0z39+>I8Hs{ld3+P z>nOO73zLY;FL-PR?MfBam*#ZV&-?M&^M1a6Gq0W>#`<#Sy6U^DaDV4HpO^N)+=s8N zL3*xpGpW;ztD1Rh)&CB^Dnx4;-R{^kkZ z{tMclD*e`d;ETD%toJd-xrLAqkux=L{s5CYX=Z6M69CdfZWO^2g+< zS)cAb!h8+wOo=S7c<-gu6w2$p!?fCr_323N^W|KxZnWi(vfS3Xw$D)7?8javu0A_p zv+%q7F6GHraD#mtYK47U_lkj%R>8f0e`k>CRn(jlN?H*I;mbR4p24tt;PI7<{NCrq z;3<|bnBG4@DTuaeK5t#UzMMEfd30MluU{LOT#r(__I_{+zpp9lDq_AqE7vTNzcKNF zMWj?rrhb+`uW!1{dYQohHN(#CHzSq<`hj2VIl**W#g;7l}IchGL$D{|XYhDnSH<6LJ(u;1V_UF3 z+`7;8i}6Xe;yp9|wz_WN|5A7>?LUQcNXUcbc_eu3(cAMF*C|o_H~RVGfD_Jxv?Fu9 zq5e&KAksTRd*hLwPx7=UMgXYOUTBb&(E@J&-8|Njr`C^Vj@)$>czZV8`4zsO!8wV< z-^VgZk@`?ok&5-{t-2qcJ0;VO=xxuc*d&9ju%KM7l zBJsU*{o*H-`Dsy1*Ter=ktMcYhnh(8{(zW-o`7|;tk=hO&$e&#a{WU*l>pZ%JMehU ziy_a5v<1@eM^z%9j|;2sVLNGaA9dR^_)olTcz{MBch4wp3rMH*mSd?qPhcG!}`I%WhSN?#QX8lD3wa_l0LlpR_;;E3pabdAO zsBDGaGJ9PVsJFftNt@q-d~EcibsV3zyR9+e-6NV@5yZIZ-c)me`dsd8A9yoconx0e zWdZjiqCUZV8VwTiQR)03`$8Yf*<&+f27zC^rbT&Q_q+@KL#6Yhy?sw}-l(0^uTw^X zt1X;gao#{DyeGpFlqVPd?p}W;%z& z8yJ6xck`;~;{EeM`;)9U>tIU5wIjN^w?aU^o*WV@nZNO~`Xq69#CJshFgc8tWk%iy z4*hWfmro7)$q)2T*P5v3jmgOiynoN;kj8q6Eat$|NY@MMrDp1X<LxABBFq z;aUsyKqYBA%XlaI_qQVsGR~nM%$~kdkGLZ{{_*RVp?`{+N2Q-^ z)Wwyomv{9iGt6hXSyegSNB*BF@MEz*Yun#hxG%;~U*M<4^QiAD^&z9Bm+deni)g0` zM_v=6eEtFsqNP-8>;)di%_bG?QtU{8XwPzs$|jB1#?@K@=QfLl^EI5-bv@neZ|73G zw>^daCW=xu`{U~auQv&hx*}kn08Wl=z%INm%cfiUUWsHA@ZM`D`)WB)BytA|>w5@h z1NQq%^8qvE69-J9|N4pQQ`6JX0x{mE7dK!WIt3xy&vN+H zScv5t8PM)!+=7f&jrG69Ijhgbxk4xBro)_nB5hvO_nYwdJpLf#S5I{AOc!`wqenJ! zf04$yv%6e4pT;I5ziY8i80caA{@I)VSVz3S(RZML^C#`T=9w1-_g!U0)|nTFJuN1l z`zN^c`K5Lb_?vPS_y1F#vO8C80xs`bdhe0@x7VDz;hcK?!4nw!F{A*Iqm~r`OK>SSp8~?3-JGD_*XiAKAOu7LvJ<;lOF3H z*oDmY6B0^RHZieJ0{%FtH&2kCv3hmvajw5bh_^NKV$k*ThE@NC^@{WLF7dv+YSo=H z;0H+JE6BHFk1Vye(C$GTe1`Zv)^XzfkgNW%-@gO?oA1rv<{`h0_i=1c&+m)-e+TR~ z+gvV}6fS9{K0?2Ld}h`E7k~eyB}M+j{{F)r;Fu3{|G>EX?1!Ke8i@O&e9J@OP$Av` z{l@^~H-wYE6k_OHkL2k?JekNW>xZgnC4e?brXA1#S<>+03|?m9y}zn{3P z)vEN7FKa^_Lh_LjzBIvoMq^XoQ$u?yU%G>)fJ+y}j@X@z}3WmIn-LBFnrKh)b8NAvB7 zSdDS`=+6cV`@7MVArbyUu7p)A*aL4Y>}cS=AQgFfk^8x@(R2s)Nv*Yq6kizo<`L?9PD{PSNo~B&V9-b@1$I{ zhjxes^LJjQ9;(BR2noEm1mm!}$e(ANet&x-{G+j+BQ5~vS%g_E=oFW zn-5IOrQBal3?RNS()~&#g7y8)y3QrWYkaHD=got!uxouF7AxTKg5PQ*55Qn7^^)>K45gTRBrv^l};_st>q~`o+@IC>-N?3yy?lOZZ$ks^nj4S4_ZYOqx>ZL;_j12hDa1da-hMGH z7W8-3qj_1+6|(H*b3!_)Gaa+lUdHSH!)=UEkD5?LGo@m)8lZ)m$fv zD{6@=`0{!9&9-2FC>nn$4ZkVtyINeUPRKIsH67v+@~0s2&n+pQAU;=Ct79BHy3Dq- zh}-MvNCnjo@cW*j@_zW$PPHwjBH*i)>_MCnYcb%U7u3>e;JBU_PYR3^-Z9-{ z{~mGfHRdvr`8#Jco5&+rWyz0_dB)q9!d9Fc-|b1yd&V7%BfqAC{?Z-U z7b2+=;N&|upEo$VE`P1+#0jedxN5|c!u@WKe=+ald-}Do0=(I~tZ1l)_`gAneV6(9 zws&>D9z26TJ0A%lpRR^K-xr`C{z4`LUci@JwwhUcH~gCofeYumJ>PQsW-Zm^GkCT6 z6ypixaMv>(gkoo&@ghHthC1hI)3l92sxq`v=Y`IBx;| z+pj5zV<31g8O3-#%Dt{;dWzTZ*Z+_>|38gpzm%>(>eT(~yL_p194ha2@? z{?jw@5ZWiDxtfRzHjT>_#CrxZ<9sfC{@`)u3(YuB26(S(t184@=>5BY`iS|=BU}aZ6?K0MG=7D1aPrz^@-56Y7g~q#UNmX1 z=KBb+nl0pidOFaJ-`msCDB}S5eAztl&c=y_3ChezdLiC8^uJQ_1e9x1fVh8JgMAuu zK#9X2AL*MdQlZ?{eK_Yp@N6>Nw;}{7q<8OUecJ6Oz_Uf%gOVb182p?M$NOU#-+S!V zrC(rN@5xSd`k+^MT*;ZrA(UWy`OFgMJyF=5BA%UoI1F41{`Qi^PaebNpM39l5c;#( z`hrGWS+6ctAU#jtXEh=YRNLjU<=^Bym8i{B6aUv-iB0s^G8nd{5HG`xFd)#!t2(T5 z0)AyBz$YUfJ|6(D1NgTmm0rqo9@6K(f%$ZcYkPY;;_Rcn6}w2D$8@V2Wxgs`i-r3; z+aA||`#XMISte0h2c$0A(I-_6e1I$UpVt?1z{MTH>BTAHt#-{&F!6=3+;R&r|`O3(Se_@ zb#_Tp3Fapd5R15u&6-T*!`PREEv3EueZ2G1E&O=3A9hUI4>lqHTU_eM+!WK-b6%Ve z0leI3331(uCP#4&L5r(K{-}?3<62w1U}u+#5Wl3uyhnt=k@j@h%Z$H?j}+|kqIn*& zZ`GHv-w@X-6tk$6^wJ& zK}poeXEDw9$JkHpcKH~2Dnh#_&-FT@N>gkvF}Mhx1>!ZoQ;T)J#oaM&vXBpuk6CIk z9^C420sU+X;-{qMsTZWN!1EgMh0JVspLY=J{4V#Q5{tF)UPC54g!07XK$iT3>sr2< zdS#_JkI@_#nSs7j<;;y2c9tEN}ylOV4q+X^@h@C zrw}Jb>LdPdu_`&}4_$u0x0Cq4C{~54u@5OapSncZoR1^!|J#S3DKeh_%B!csR-^He zFTd2<0bY1B&hgljj-Bnl;;`c7|vLYk+hh6*q{_Ssv1^3F%566KI zx!+s%4}Qie@JvP!_Ze}`z#}ew*3(g1tLT&lgGjytEiKqT=*^Eoe}sMRL|-lKb4D=+ z{}+?vVyB*`-rAJzhg}x&tkjfBJ=k5F?;zeE6(S;e0I*AAUjTi5RD-p#yRPQ!{n(du z)1N!hf_BpnJ^fAe52q$t*3eEYM+bM(KHC*K1->fJ7tIV%8)1?rQbhjf-$DoZ8J~ypd>$3q*k=E1MMo~dya@9Rq)?f>YTlw=^Z2A z)rEMbeZ60#-TImuIM3%N^6fs_b;^%R8##~ccw=uP?X;oFgE`>;b^ANh8ts3X%voCy z^W^28xWIIBw$&?{Kh1Do0hbR=Pdv`=0-nfoA9i`Z{@fTNDegA} zf&Juay)qCJS%W*UEAM8Tqd5kTHk~OuL-ii7r;If{BKE7uy3ma`_#;IH0TY) zbtd!<>{H*YD>qzkpCk^3*Ah%^BhE}Q(q&Xof;c_Ddu-7zp{+|n(GYZul)QQ)-2;Z1hW1Tz_Rr_aepjd4Y&Py@m-u7q@my3!UeZN!t5qd%2*&NMbBffQ~VmRfIF^rJ}57YAzfFQ$zH|zH}P~LfqhuV=(TH4 zb6y^?OXs-`bj;j3=jo;|i}*@7&*){_2IyBfKPxWK{`2#Y=?8rOtM_f%NBR7?*l&e> z=&Qburig3n$umLNL*2*X58g|==xI;-fs)pstE%`E{G)J=WAYW~3xYdwT!``ZFA!#*t<&hIJ$m-a!z>y>cu6dF9t4tk$TVJ2baCY-%H&u4LXp{?xs%I<$K%~ z!|u;8U7KlXKlP=h_W9wGR(N*0BPL2?QI(1HbnU@`&Vv8{>g0Ge*44eRn<9O8RLP;g zO?e(K>YZR*g=y{PIoQXX!uhp$zsLQd5Nu<8Cgb|wp#M6B_NbZju{!+m6R;;Z1-Bwb7>|%vF_{T> zZFMe9FzzejK*;x>MgCo#+xEi_Sm6w2)k)5`?b-QgG1l9}wE=SlI%dkxu z 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

    f1eBf>N>r&Z}E$W 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�Jz89?( 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

    ~|1?=l9{xXd@()K6kvZR@VQ5Tgw!Lqo;D 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 z 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

    #p6m`2Jbo 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 z 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 <3$wI9zp_=^(iuu)Im(;B0{<@I>u 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�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®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

    {vgJubcFH$HV7AEK4bLj`~l+7V$gjR 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 w-@;O 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�&6OWG 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%0DlNEzDePFUiNVw0Pa5oP!xRs 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%0Dc+b!^HLXtoHk9RrB|(C;tDqy?as%oJ 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 d#d`;YVd-EkbrQV7i1enA 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�_{pLWE5 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�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%0A5tSkehVeH(QGT2vbGW1WCc^8%p%ujlrm+X7xe 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

    ^;dcHWAAq|1D|`S&^dI8`7z?d)w|D?(=U7fc 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%0A;N=KXv8;{H~|i3WxXjfe2OhCOL2{y!q8 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ࡺJH{tVl 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
  1. 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,c;`67w|rsI|Go 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 z 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%0A$mg3{kh-y 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
    ?3jH?e+C_Zp+r$Q)&BJs>XDi6kG_5e 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

    Jjxr(LXke8 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

    >A&sd+$_<_Hdq|upU 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 z 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�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%0A2lb)Nzup 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

    yW(-`Kn5JVIAr=8w_#;ao;(+p)dn> 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�w;{K(@F)l%MaWoK$m~q=&~vCeixb|OX9)z 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�)JPFQTcno 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�$w%vF|dl1Pu@z8QG-5n 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%0Ap;vz1*thMeQTU62p&lKN)74V|i|3`W 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⁢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 z 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

    %%2ATcj9?L`qA=1{GY#n?D_h$ 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�eIlJ{R?9t;MAvisF65-!8ul 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 RIDzQ}sFnen~d~-;eJ_o&&rE zd@uOhr*z26lp{c8UL`eq@HFRp=jcq7_zZ>gKLqly1@=u0PSxv(R^shMT>rpge zyf*nmjnpT62D%o+|3PyDE*mJ+RyN?j=L<7tW`IYeY9XTt6$FfbSDK1;@Ja;74VrSg zIuD=1I+SM~n?`p7^1*~9?)i0TDSjuMr?3?Fi?34;KoAxeF|UO1d2^_n{43O*0RPvQ zY%AW`wnI1f|B;WBrITM7Lw)21oM&F%sqSIZLnt`z?HD#D6%>_v7}sE-?Cq|={4Ct$ z0p5;fwTOL^1A*|rG5^-}!eh{t-bj7J%$=y82b}{r1ilAf+yq>vOl(J;((481d}1H* z=>F4Y@Ew2;`_wtawQJuS3#4K{>W^LG{07?Z49E34wa>@reEaSbST#24TwUod<_Av8 z7rx4R{trfju>UO?=$Kj4FR8Eo`H1+O@>Rhh@=-Va%mT`F0U7q z*VY7pci%mUvitME`OWdToH%~FGnV&y!J&etSg!f_ZsOaS@H_E(Utb^pU$#9g^8M~i z{hkWo=kZGu!`!c_stNP|YkgDk*P(OYD7YquO%gu-S}OPj>7v+2o=$vXOntH?Tldhf zs2{UYClgZpPPAYhOzG-meVAfH5&ENK>&olvq4#>IpsZnTj?ekpH5#nW=u@pqR~*ND z_x<+6zsbS;;8v;SoF5#4U=8uD`g*gO^P@lDK>qYlfgcUCc|GSwI=5%*_T8PX@%eZj zRpB$IiN_z#ynUK=`$zhf$>2E@80$;lxf%8S)0xvx@OS7xQ(lsV}9st?_3|)`^C-$ieZf(xUOXvVxHnkm3$3`nQa!#(m7^pNKp6UE z2XXw=dtwcR)BHgDvO?714_%6GNXfw zta&y<+&?K@h2udlpe7tLA+PrrHkXUMfQmrhICz~Vh1_nVEp2FsVcj)FSN*u27X5ZS zcDu6f+}=mtvLlb}(!`@K_?t1=3Jv$?s*Z&#v3_fvgX`IcYH#q~0Bu}Mj^yCHYAPJy z0XU7`uAqfHfFB0Mc032h>GDf9;_k(I+yi|7WKkd9m!*3@d}w?FaNn>YhWA5HLzCqN z-$}Pr^h`Awb{O)+%U-_UVv(<;AKTt&ouVI`E|dS17G=6X3*Z-~-g6K6x`&^Sffs;& zRojDu_?!-E@umF!nuZ^Y@qA|7xv?zpVEV7rgvmR3>che}$qx`#_{OLMpz@v5vuML;HZH~E` zEaLr^VC;P1FAIb<-rF}~-|O*cHWIJDGq;EMy?jM{gnpsJ(zuK3R9~4nzTc3lv-y1H z{g_8zipBPDoqhWGsgVlcXv-~Azag$6HvANI{Tp?=8!i3(-L>BxtLJ$5F#g^I$JM}~ zXFdI}e>**KjK@D67lRy6rk-D{Rkt2D?s;tl_1Dnvy$^iFmgA-qkL}Sv2p)itk&HX$yC`}_yN{Xr-G9Na$>eyySv;qs?&e+lnLp+7BP|NjKI z|JUUaDB9@PNIZdjTH^ExTa5h&u&>XT;(IJ?*XM0+ygz`Hubk%r6p;_Y@6i`ukN;o4 z&-bzZ|Euc)0B0+@SANpoML)mzPn8Ei-G9)jJkXdapPQLE+_w<8zEWHsLcR)CHAU+Pg}w(KK#Tn;w}(0a0)9`v&)0Bt zPJz7D_VyLXUx`+|`Osej@2@tO)rYAAaPZ)&JPH3_k>ATcZsm^!n~49Xr>Kq)|98$c zoFi|l=FDhp81qiqT#d92tsWTgk#7rpIP)a@ybZTzWN<$7#bS<)hHR~EqJNftn?F*$Mm@Yb>r{Wq7Wko?kxcQRjls9?e~pxL22UZBbI9bsGyoqv78dOFZICaEh) z;(3XB(bJucepM#KfjbP-&|_H%zIrAS4Ak=nzJfU6Vd{G)k+9g0PR^-Tq@*A|W;~of#CrY_{Z#G= z@F(KFSiRI|&Y@gqfF}t@NCqr4ZMGH7_a~1z;t{V@j=+PI+y>y zU>B9t2VAFCrB4D!8+~_1H3>h%ToZJh1W%!CCf-N=1GHz%V|>UsYBTObEFN*t#zjpR z`_L`JKO{apZUp;@r7XJ%_YX+=Oj*e(@D z0$Wb?1=A&&68#3{$R|9MvI%^;qT-U`C2nPP8WvFE{{r;yR+9gY?_1(_S*Py_fhTdo zZU!OXGI(5)T;e@p{WDC|OOT&XIvbteqD>YDm*9Nr zhoIxe`v3CpV|<*nqupPz2k~TSeY~Wy?*6(V$6dw5|M9)xSAsd~s3{wU9$eEMHn4?| zS9GrF>oWebFndLVgZ{R-W~>MLI0ltQt-*6>@ACZPKYB0^X3b0wkpJfoRY8YD(fVjZ z*}Kj7fB9G*`lN#2@EG$wxW2`2qmP{3T3@ueg!!6^xmY9@{zWDxqTDvzpCr_K)53B1 zefR+SqL1_e^!lQWx&$6GZ|Uct?GEB#X+MeM3d=Ia73!!kk4yHNJ^}PIWgrC16>(=dw-{(!_ z?G$JbN&KJJCGh~b4#JP+{ZV7QL#IC}Q4gQ6H>v|b{GU7v&Ue@9{U`8$@&V>`0nqQ@ zqw56xufI|Je<_~3er#9oOQ;+0zkem>S@?4<@CzjU{~N{sUF7XxOI#=7sE_OabFh68 z{$Gggi|~Ier=Bmy{~eA*9-RK}_4@zyM~@!;a{NCBe5wTtz5@PVP2RyD68}$5PEY@% z;s2P&Z~E)M{_8(s{J#ybc<5{3|E&iOJoC&K;s03gi*5w}$Me7HM)3di^tEe$AN)TA zq1un}fB1W#JskKl{9nTR0pvUaob#%_zmQMdKOcGDL_R5DC4K)dtn>fmI+MWPndkju z*8LOr$7QVAfxH3ZLe~AGeDveGf9C&C#vl7K+&}Su<{tq=fv+&H+yCXbf3}wMeK!2m z-?#1`<*uK^{lPo9DAJB>)=>i0? zz}z?=0C}0@xS90?Z;Xc{3e02p`M^JS8mp?_hW|Be5*~ltGWlGVOa4=o=D=I2L-1V8Kj z5C07aeyHDHG<_Cvm&+SouJwmQ}5H<0pR^6%J}vLWK^ zIRX55`t)k(>CWdrF1B>rHNIESr(m*0mMl-(gm_pK?W#?{(aWE2vs@&u?QmqAY}uhR z=VdHZpuglmqf#W_;SJ@YJAmKVLxI5W$Olj=l}{1>_h=M~X7rVFDpfA(jYR5Wi0c)t za+^5H_}^pKD0rVeV$evNA(z|918C~;&3Le%?yx9nMNt+Z{@)O9D5st1>6|8ypvP%3 z@wma@_Hp(Fur$RQc-|B3-VwYHIsqQ{PUP`c;l8o{e>*0!$rjXYmK3Ak8S;z2tJ|9f z{J$nLsDVFV)SrtWUxq%GE}9~;j^sMPevkvHXi^p-zOxc-**yv0FFV?N1N?zH=S%zRtu-L&78#X z%yXsXtaIw|KYurI|GJ3S$Ng1a&<%*j~T-?Wm}jhRqj^?FYK-` z82s(7oNC0UahDAFV&mO2X86~~O_td|?<4-dQQ7Y}Zn{G^GaB|2|6lzZAL7BAb!h=NSd$=AD41VPb%eKb-yz;UO)HlPCh7kY&JVmF{YH5lhiKZ;gg71b>cIK4 zbmE$1;8YUMB{*?E@K~it7JTn(@%|D_usq(U>-?|R_dkffb>R6zpr87re6CpEng22F zA62v7KLyvpd@t~(lq}tA1<69bXw$zUK zL6OzjX$L;w|J|-1koQx6cI-pqhbO-J%HHe656clMf*7Hvf#T%jB|j@&N>!FOPYTWvF-G3H=ds#@=$q zKdiIAjJk)Rhl(HFZ*4OABeiA3BjxgyzGn1)MRcFSda&*@6`lt%-@=a)i2wgCO)l?c z{W2PF@%bDN+I#Ta7#u^#QRe|2+^uua;W=OUzuvP3wRH=$(Wozv&uKKeJit86-n<11 zn9up%#3SpMc;D*I(Wp@WL4C)3ICLP8H^3KIe@kD_hsfW%#`dz&F zuM++b0rSn^1E3CE!u@9-$(v&x|6(Cu!u=b?llhwmmb%C5L%_)&Xd@p0d6E|4+r=Z* z!29!&zhoX`&)z+!UViPQ9r-%o^Db*9-q-pX@*E)Ecxm&=1K8|Ewk$$^fo65EAN&Dp z=3?>*R(juQn5$UnebUPKntXsv@B=o3A0XU^J^?s>G4u;?Uezf}^d;2;9B)PX%>#%V ziykVk9tfK9R;36pzs5cS`Ngd`E}sYDBoSj!q*b|ZlaU7?7h`3cp-Yet{G9mzy{UJu zWj+Y^rD!GUKlCNMA16`wQY09`)e?WhLraRBH7BzJ2u`|>>KS6Lm6Dw3FotM@me&O}-Ljay4fRw9lS7pCI=T<&g9SHiL%0C_Y`hSDwb z{bIi7lOMslVHgmdO&;(9Fn<-F>W0O2^&)RLQcNA$9pF9bi<_}OXO2ThqRD{t2=XJq zg(42yCe+zK6g5L%eFOBAiK~GZ+S7Ua#g+}ayz+AB3v4t9_v!cSq~DBra+r8hq;@NL zufmf`8S{I42R*se@p#24|850vbYHB-N&nIzUVMdk^PWi1M!&O1?3?2MWtz-Y%+EB+ z(xtlVM_S zdsI)$voSxPh{R|3xy@wv^TeBA@ro9 zZ)Q4q^E3)H4A5@8kbPQPT{a z*@9Y8sRS>eAd18b>-x(|R_)Eg{=lJub=3VY+cG!$n}S~!1Y_H_5zjA*Jo^}bAM>sg z6I_ReA2-cV?>}}V{vvq+qvt-1aew5Ul5;oXdw!Cs_5j~65K+)`J-(mVC;rcTo5TYE z9+-HY_cKX8$#RtX?6QdSsK^u@!fxG z@WsOKvhM%Fh1XEWh<*WU20moH{`T&^aQ$C0jpyM2X`Gfx!~; z2ZST;X*-VV56+@~YM*hrGA~UF=Fg?+UpwJH?vB;^-=ID~n!*<+KfoV%{RZpf?uv1T zr0)xw;M-})&&GW}ZybhyJn{3Fpq~R?Cj|GJFkd-?>;r&)LbK));_S}BaToFR_V(VD zsJGX7a+U3zw^h0Q!2dTGCeO@%k2r8`QTzjpgF=hb5~81`RQCJ$`Ij2)H}8Ose`@y6 zV*H%woSNePog=kz={Rn+g5S4%{XM<#PmIxRJ~z+nHnn^??O?nfIQwr4!Efx_fX~If z1Ck$jrlDcu&Dz%rvKNg;@O=eo>1jC?hF=zxftStkm^V_syb1eqrRTI3^|0wKHC91o zb>sNpAo`=Dj?uf0c&+xBX$9huHnFSc@B!?Pnd7Csz~N7ulaq-1FG!NfF2DQ$>KooK z4!w+i!WDra*9*8?eZ%m7du~fhr)@a$ZfUm_IyASh^X^0);feieovizR;;$C0z6@OY z$4cTMb}QHa5by;-xa+J3c=izd8RGwV42Isq`%{DrHF*M9|Cd7-papL)V%`7Zd$)qe zXSXiTC`TS#TkV{R>&c_5io~NhALADMu=JbDO1CzUhZOG5UcLaohgXx=ywUK>LWRrs z6aG&71=l}v{v2GM`XYIfHo5!|*AH=Wu8ix6qg}O))_KYG8}g%8h+;bHZ_`ALi}U9# z*~^d6uN=R32%~PJ?%@BGhSj{u@INnw|C#pO;6!6urPHX=*qRXE7|#yoC8Hm(aj#3X zUBLfip}tTqcmS^{GNa@Huy4mM;Q5ayWiC4a++VJV%=W_0b!(LDdmw{D!al9^M{>d6 zD8Drm>li9#Z972RpLqP&ulJX9{D&AXTbw``TjzEC6PDu# z@d(Zbdd~Qv5_!#poyYw>E?U6;|Ale?uge!ux4qB%hIk)s2Dt0^u<6f5-CFTNk#9)`nQq!pRoV zy2sf#ME!sCk(yn!*B+yvHS<`__JkiA zztoUQX2cny_q2YVFF+k&;)1M?NByf< z8>Dr*I%7-0Glx5!x)O0w1?Dy4h0`N%7f+x*Cyai>#Qz6;N~IlqiB;Y>?o(RjO+Sj& zu+OL5GZWY1eg*3r#uyijmTg76kg7#}%p%6^18Y^T0M;S(ia{Uo|92xt${7zh{v|To z1nc`n41K^h>c%EqBIjXs#`pyDS#q&o$^8}LcUCYDvTBtA=Z*LcO z?%>PgIcNRA!1VjmtkV~jqfzSf1ViCk^5+8K`g-!YbD%@8s|}G65=j@Jvw!-uW|gGN z2Yqq&v%~RnmXZe`6d~@Mkk$v_`o!z+yA0gEs7SwuIzO>kBzzg`?g;$NC2ss5A0*!2 zI8hs6{4b6TfS(cSo(;x>toN^)D=mJD{o)YeFz!WGYJzCk z{oohI!Zo#a@G|1@=slHn`wix@hQHYlKPPv4KxF@-?7_iNHFzyvuXh#Ki4hPVsPp3+ z^W~A(_uo9?v(z8hx?L2dbss1A7Igr~Bggp^msVAwA5Ps{`L9;fe~HIJqNz>}8+0OC zW1r}`t9$_DDU!$skn%)dgAc%bUa|Dt>5C0w0%uNGj-O0SFtq%hM4b-C(P#DvfS+l| z$fGU*_?@zJ4|xF0ze#)m#4DT!IPbFW3etM8oOgv!S@HmIoiXwN@K{}^1Hk;ze4RO; zGvXOH!UI6QqWFvY0C;>~+y{U<0-uHd6Te@I^XTk6c#zg$GMQKx&;6@7_o)tkp7}4B z{A=<5%*;$Z@qh4+il_s?_g%&R!Si=GEZ6@YZ`$wBC1+%;BmR%@_!IpA*#Gp4`T=~A z4gm3gT#tnRU#s^|+@E#gwA2OQeaB^*62Akl7rz(stHklIzRvsMLt)C*`*68?4YsTM z3H(1K>6EYhQv9EJNFh0)|38oa*VKF_{tw;rFT(#JkG}u&@PG1Cs9R6ne|%rkr}Y2v zI(Y|-pYi+@4`V+4B>t~xeH&XY>R|Bi;>pjg|5sMug6%8d|CPl5m3WRg4`}gx-HeU4 z2OD`*i?BTie}>nW;2&JHziDm4wyEt&EBnfC`dI&8(V7lk@*fNT=Q?o5i!Z*2{wA2W z(Wj(!QR^T!_5*`nbLlYdUphA4@0YO2VSj>+d~jNHo2}+`9B6y6_204mL&t-yZ(^%z zd$P`mjr~b?V*^{d`a9TqJ2tgGh;0}6Rj*=eM*ILBh_qbvGrbdAZ%1w`bs3tW2gcvG zx$UCe(cSI-I{5!H*uDt=$KzajBl!QSRja0N1pi;Vb{73?zP|o{eSJg2$M`?|!~+Ko zw0<7`PrM&#%1`S13;9LF{juDCjQcwg9|Dev&_Z?|{?;e){mPyjJa1ru_I!a{b}wE( zkN*S5`W#EXD{g;L!rx6;=23$nE+laN>n-!Jd3hPhhfse7on^- zco1(UbO8{SOS%9-DL((aegWz>=owb2+a%m`G2#?R4Bw+rnHCEb1jIK0jJ{=X21ciB@MvVQJkcz}N(T5kgFQ{4u=Y4l|!KXhW9%Yy7k zWgyr%ezN7bvAlfUI_T-5E-^pM3l}QZZ33@bqgl63io5kA2Z__0&5;269$Fkj zLnnb#2>H;fX~FfPaSrsUS|A(N10I0=(qR9%0`sWbC8GXc(Yil<#R{qJA8`VX*A}mx z9f!U^>s-KM;r}x-z(Xg#A2&y7UyMz8_`Rd?SU+v<5nr6I2Q0z&c7mTSES}pAyuZWa zEeVpZFId_gl9gSI;&^QhWhKD>CtILL3_Uva(CERwI_et5#UUCK9VdIDUp7p1!|68A^goJqXok(qO+?RL&vBYKw| z{S(ff(<6Us8p?kI@l=*>YhU1f>Y&=5_r;Zn$9!+C9zh=0P&(#Ic7eAl;6AwQIo19b z+!yHQ2DWea6W=f0@*>dMVUzcC&+ic5n1*aV=(8bm8*1;Nf1EKeChc3ALNC#89`ksV z@FR>b_xG)U9=}1kM!eI7{KLS7v=R0hm^RPC+Z#6h%o*~t&I|2~%bABZpF6BMj`u(R z(#9dD={JRf+b#0*%Nx5cUfA7a)cD-w0T_oGZHH+0)>`DiTaBWtVe6;y{slTQl9z$H zE?q{la1HK{y8pZkfpz|P85X<(Y&ahB4TRh-`=)%joDXFOK~{!*g!m4Y-Z+zvs_1AZ>V@*wLbOjUdH)qx68%nVCQ7J$UH)Z;)vUXakD*C<0St0>qvb> z-I}Ev8JS*3TrfJ#dVEt|3Ffu8VE63N=L03LRwU<@hkz5}bdf(HE}f6}VLnonY@@!N zuz1}n`W1Oo7r@8&fbWy5A^z{0okiXSeGegsK|aCnVl%Nq=>I>_tXYTos=B6L_ZacJ zcWdhVFdhx+B#)AP05fr4fs-16lj;|>!mkGK*b5#)W@pM0_KVfy#^>Pq84A~qQ-9Wh z_?$ZG;kmvD^W3wu-~WCN_z|}&6t{m1c>XPlB-C->{Gmg|_~iedRsEFqXJ-P9OK_*q zMh9_W6XrdACiM%KZObfP=|$gzZ{CCa$1uKcG4dUZ+t?Saka}Gb?w^x(MpmEL!Q zgGX9{i}%0OTS|Oi;F&{)0D>U%~T0 zegEtq$N&B1*H9lJSd?Di{;Bq^i+Fv&CieAHKVa}k#7>^UJ!eZxC0zgv=#^eM#|h3K z`eEc3VLY(Cd(I!8iqPfcclAhnW9io>a0$H{rObV}#x%_zZQSG4jvh=clWX=byB@ zdU{stzz-d`Oq^#YZv-&}#`IMpG4s={!*U?^-Z zuQ2SpyJ=zyuY(5=onFWHO?O_J_+WUFy8c)P)#M9^p7+2H!0%>$zU#NB z$K7+OKaG0a=Gv+Do1qJkCX++&ANAGPi0?zjU$O}2LkXP!ddv5@JU)pJ5J#OX@qgyk z=6L`@67gCbMxbS0;M4g39a0{T`svK$T+0JMoytM_Mc3;9#j08OL>+&PL9KSpV-yHtWd~6;eehA8R@D>nM3K?P2QmW8GAGo^L|Ee^_`I z?4~==Z{uX@4&cQlkL6Vn#~)0!wDa}krpVqM*q4ik2gnDFgs-gN>k~f;go(TR9gZqm zpE6HPygn;equc=;K3v6q&%Z77?6)jbyC3$nBU^eI6fFx3?NisMEhIb*sR^?kBb;jfy3GuKbfy-nOc z=?QZQ>+`=eeJ;8byuImrZWfuRH`fmd>edUUEoHGlw{_T9GV_;l#!2Poc!+(9RjYhG zP&KXgty3t-ANZyqXy{+m)|R9GvA1JUuF^q$|GBZBfQQxGF;&;!4xG-elg;P-A%Bl~ z+0*fCe#P2HQJa@a-W9R&7D?jb!=akbv^j!!PLT_!Y68E`Fbpn2+)7aPa_;LPj zc>}Q{u)5`zelz1^W!@^V48hMdPMk}_{f{+79AGaP(={qpF6!Nq&3i^3l<*4n(b?3t zSiW*?FYe1+?0l5CKhhi@QYW(ybHa+ z`=6Ws$)NZ^hq~j#3;(nqdI4<}4hwWGC+#a_r`oaK>J%q}%tJZ0I~~OTe|qo<^ue@Q z7p}Q=8S6yc1Jl#YUzODe&?C>O&bW19#=_PBaja8({u}-ILoUp}8R`K<7ipCZ9ufG> zu&KPJ2J>l?VfCJpa?~*!^AU(JUM-IV@`iyoj?TI;kE0*J2fkGDkxF7=C+*Y|hds=@ z*49?kP*-ZX!!blY!0dq6dmesV-ae-*09{suRp?hWZ!r&d3-LJS*@WHH=D(}Rf4O@f z)*Xd{JOCN|J=V2b;?r^F_4^)sr(~tKxlI-Ho#y|6XCl5>;}V!Q^d#8Pe)WZPWR0>{|NX$<~7`K;Mc^hq4QZ-SKHI*5P|zo|H8kW zeE=|>4RL?=RnfutRypn;x&XgETx+JkkA4R}rj4bJesYJ3^FoVVYJi?yr+7&zopuk@Pg(4JJ{E%?Tq ze&YCyA9dcP-gf7B<+p(E^Eu@8XyT*)KYQ;V*VcWei5^4D=czM75hVN!#7o?VTC^c{!5K?{mK2_kEw| zecsd(KhERa>+h4--THjjHN8*R2D)mwvXLdo2 z^-jc_RT~9t=M1+a5ckJ*d!5^@aiG(}A-AjPk~l=3MFA4u3w?7I-^}@VVz+sgHXt1{ z(>5f6jwo<{@)O9@TV^yG`&?gdI@y#+^ttMqy1FzS%m=kJMxAcx%pw2T1s;&iDyQ`1 z1Fd-JC&P8%|E<62z6A4wiCX9}l4rN-zWXG^kLW(6fv!)t6bJ(6FX_BDS_#|H-P|0J zCFuRM_g@^6i2HB&YL0~S$S+uq&oS=oY_=Z2{2#SCpg*AK*eQ9b2p;G<>O?pNfmTk1 zVWIy7e?OhiA}@e-`wM)4jDp`?A3(t~jf^X?+2N1lH{<~<@ZOm(W&RX6KmHJh{l-24 zx$p-B%}0CyK|r4+9B(o?|7o~?`g8PUYGNI|q5}Xt`+6M!EFw>H4gbfo`M1IUiK~BB zAAkUa5I?;SKs)+e2*0ZPPxAnj=M4KN&VBf>S+RE9C*t8)#B-L`89j&o+j!1^|HDB4 z0D0r<><-k&IGsYqS=U+S`33R-uzEG~v_>rRx>IjIeLt9&&dADMHs$8^&&VPV06241 zWfR|DD8_;ZGYsOy$NK?%o(=%9xLe9@;v!T+!4 z1zh_c<0lT3zxz%2|3d?K@{vElew6xu=rp?C#9tb}zNY_Q*#y`&JB|OJ1y985t*!ky z{@(%K2ytJ&Z-_%PQUB1%{_gZIiJw#dpSUu0SBL|DT>t-i{2#+(?q}iuC`a0exaBwE z|MVwPSFis4r{Vv2f9r@x?|_c6)A^n60GD_FG5&S{mw~+E@g2ZZc-*DHSH6J1(nGm* zJpRdpxpg&GYX@xo?Ch*Se1MkqPM}Mnua=vCyQkcB$lD3fi%{y{Htay13hFom@N3*^ zwHkho+pSWmYIacP+L#EEpPQdAT6UoBLlCUi$B;h~gr3pI(7)2-F`FMa#C#Yma51M7 z{9G&-7Me$I0-n$B@jTiE;qc*7#7lxuv*D&g+brMvUX9Fp6jfw&lzKmcIVtCV5BR^? zYDM2_%V_KtLw@Io{er~=yb8L@1?U3;9Bb_6o9~tSMj#a^0vF* z{7?VM0ba4)bNF!yx?;A{C&yzuupPlX>R8`dR4?>MsMA5FS)PfN9`YT`85_5DU^~tY z8^rCMN9;noU0jdISEV{~q!jCUJmPcfVO1*8vL5(aVWB*QdbC|CRj?8DV@)a*5>b6; zQ8&Ned=CEA(W6K4exv`hN_7}{<6S62bv)2{%C6C9R`5EJ-|%_(Kl6@g8&~3PQrC&S zy(_@dtg~9J(5=zdLsvshi)D`+@f3!Y*Go|EE6e)j+rf)izWm(loVP-uD`xOLq2^Zu z9ueRF*;#fwRjEd6Sl=TEIy18Id=AXuSJUsC;(YT02x@8kA3V>eFy5ff9~K3Fw|6e+ z`!53C4;ZHgxQ&I0#dO|?c)$2N)cL2!t+Y+!@66A6Ywg(D<%%BkbzTD;L#I`%({(Lg z#Qi}@@*(eld_YiIW4eqw9&ea95b8k1G+xeS{w^DJqr~OYy8KGr|7h%2b^mRMV-r_X z^Vjbmn-PB(+#hWM67)aeE(Sjz_b)=eZK3YJs_OO8%cxIv;skiSKAb3y7g<{Lul^L= z|1$E3SY6=_Fy6f$_b2b-<9L61nfX^)HW+Au*EyN@`*CGE+|F;C=S3%Yy;dZ=t4+@2- z`v*TPBjYd50QZ0Wj#V-0bv5r~9se2N?0PlhE0lL(y~(En`+FtERf&f1bUyM6-mcRj z=C_@jY)7LPKn(&v?xaQ#?NQtI&M9*(qA7r=D&q^1=0|A%{gTH^nL zFh80P{CjxuF6aqxTyQjV+$=EUXXImihTItDgY3#xa1bYf?+?e4Gt@^Ee&YA9?{06( z(5MmLq7L2I+;RnZvru!Qxext?pf3$Rw%g@{{tf#bJRkY$^W*{atMxj@*~O2l6ny^& zf&Gv2I$A8jY2xx9gh#-q&+lBJ*TSyvmgRSbc|BLeMwROwPFNi~@VW0k3Hbl|Zk^N! zyRLInr`V3qJBt#j2=YPQ5v_kO_ao&vi`HX%b+ zoPXn%P3P>$%Z*!WZX{lAm3O~hj5-vDoQN~-@x;F%_S&|Y`Xj-4=D9l_o%k7b!I#x+ z-oreoJk-y+)Jplq_}>!O(V-wv$&-rHz+Wy`v_%pP#9g41j=FWspY6}@vAfooG@2ly zIq>i_@;G?_^6dLlA)=*?k1d4(XLZVS4riMwM;otidf9YLHTc;zHWBpWhSwU%1U@5J{Noqr9j0RzbOcz+G%3Fftbz0Us>=KD|R`cu*jrz)G>ivHf{*SaB`n{|)C6mx?zbeHS``VBnS&^HkX51A# zyh@4tyPl69FRm{#tqy9ntdA-$|5{Bu@-8)x52+;Z2{Leh5s!AOBM>abGT291uOgq6 zBi!2iD&n6DRJ8_FaL_C-vd*CJ08H=Qc~Txxl={f6AVP3%wMGF3tn^ zHr9vWy9vAi)N=q|U+Qn2k$12UWP30$`mMmyfs5zsI_?~JtxuKe4Ka^2)E`0q=W5?v zYV1WWYkj3j@&cX@U44tTEAYb~u#V&_lQ-$8!!Kkkx|eu5{4FEv?N!?SUh)dWlU;u0 za~y{cd5LIO&v8Dt4#meudUlSA#*{2nSBQ~RqcF_ z^^!H#6!4xRQ-7*q6Y(8&o&M1_+gi(s4+rn^h*+&rh zIun20-wRJs{Y(-#0d)9LI0RMB`tN>M5FYFHTB7e)qdv0N=0snZB?IuImzm+8Gk;QT zc4IuY#y#L=owDt3tBo%iV0}tPId~aTh!yPHnWe(M54KY<66o-{8i@n(2ey`;{RJ_WbIk^E9K_#@%K3Y1j7+z z^^TPP@e7wPu7!mhgq6SV%9Q-Xx#YQi)YBH3N)Nc&p<7@pKz-tCeehcVq%giIyD*0M zV1#^{-AAFXVZ5Kmv(J)+yo{o^Av}oh5m)_1jd=(34Uk5L{s#1SLYD)?XCmTDx6*n% z?Qc=HGKA-UJN*mT^_@L;ndj$+p+9|BGPR}Q<#I3l;?!I8JE^Bd{9mtC=WrSRsxAy% zJu)HbvVpUg_=5udXaRvg=hrVwL(j18%PLFt=g@5F91b^j61=Mukf2#1Ef_P?~mUu=ks0O!{Q2H&Ob zfB5O34BX!m|LcaCeW-_brhIc;{&{drX4 zTi2y0|HSUjZR#z~!|$NikB5qzqZCTA$_;5eq0q!Re+wo9UKoS(D9%qher>OcKpmfNu>;;lT7fRraN zFIwkc4gV73@r%b39KZ8)nqvA34RNQp5<0!#9Q47@sI`oXqKf!})e#v%p4zga?3h^E zdCF!ei^bSiSMqD}$pctcZu~0sf0IcA^WF?`;8)`>C`78EuhZR+% zVDuJi)!fgqrz61kbL+~=@&n{iq3!FDcV9T#XLZC5v)*hX5~*b#GLf2{rPYcAO zg0q?YPEUU@pZdU=nwyfq2@VOyoeCaNyEPN_<=Xnqvl>|Bcg^+DKKIv~W=ChWb=Yr1 zXe;|^o3^B!9^(AtZ~WpS`8_koN_4D4v|51_jF&sFR2dzD%X9e_p9bu2B#`iIUtnZH`pxi{53PrZQsU-5cb zx6;~bL_f@Sm)PqS_@0dh<`g87GX>gKKwMl^t>^=wufS5^*32g^^|P+$vBTW2 zJez>dz`4G`$XpzGdY5@~wegG_d7_3W@>iEDrX%qNp7)k`BWAOl%6BI=%k=m6=k@v# zH1Y5KWuy=LffHt=aF|g8Xq3vvOyp0AU@^$M&HxC-h3a(bB_VY<#|jcYc><_ zZyZb%5r2Eyc_t3)7xZ&ME=Qd@3FqxkwW`(R1H6vohi?ACnoU;aeJMeHZ_%OL`Zwn1 zTbTE1iMD*3`7X&IMX2xJF(E(9_#1k8sMCfn9rX0hxN9x(#zYGD*R*Uva}(?RRl>-* zQ^5aIZ$9~SyKBEC7|>~<Wy})ct=wnZ!JP z*6lfc8u;!Rca8Z1_yLm#k#^y6!i#{Spb}UAWo8ufyC9Ssqc1=&pt=BfiS+!pT~`OQ-0vl zwg~){i!Jjqk^L4JO|f%AFv+%Gne*XLRttdWSnR8=AFI_u8yEqBlgRlCg0 z`+C4vq5i;d$X@Bg{#7WXryT|liF^de>j{blPbtj{ApVc<1%(F?{m9Dl@b!EE;`R9o z->$&?5g#CP3iV-D1RCroRKV|v%VGS>$Mb>BWt8H5T+l(eo(~{L)A&u=^7+DQ@WUA2 zW@Pbw4dQyyUf(C+9QgK}N9kWNZb;+&pJpe4|J&_Qs%=93KmHUQ0PNs;9sm|I()cpp zH{uze&I5S24`~kMc|N5N0Q@p37!2b3&+P+%*QYv-|EDc^0K9HXaUAgfdTGt*OHaHT zi@n$L0JuJR05H{Q9sv6Q0B6p+z7GI&)_%PYKy9rjech=yu^hl4bpY^~B#Hm?{1hGl zc0l}}aUSu1Ty7zakEbnp0H3V`U>d;rV7z;`Z$a;Wi66M8hU3EZx&XZHm}iyq1bre# zUd;mje-63~*Y3}f0jV1>yXLd-e_nr%Hw){#U7h&*IQ~!li=3RCqBQ=`_mcese9-IQ z^MH9n(f_|5{|9YB|5^Ay>)$^M|IaNhzQXtdm*WG*5wPI7qK}rxGs?IbJlq`^&rF*) zzqh#$`DKGauHiUKoSYW8_~=>G8+!Yp8*Un}(} zp2p;P);HBA8c~l1g!jiYh{urUJ0_`_&zsp^hv*o*YI(19A9(T_8TAl#=-YN;FLd4B zDHr<3Vs7Zy=4fR+H;A{}2gli`C!Uba_9o)zf>N3-~zk>Jw9(Dd}p|cM@>ig+&D~-DouUNp*e_EbM4I$sKfb*|J9tryw z*tZFAKCau!%9qfff#0iDCy{5oTwzDQH~M)f+fUHqu!GF&sjyxe_fOkeZv5m;WAw0%X% zuYSJXKXHGgpMHh=Ux)wS#rff18ovMAo)7V7`aQHB2ob^}e^BdHct%^REZc$m3okGE zBjV8UaJ1oeYGu3>i8o^W7_m78;ZHbj_lo)b?4MUy7$1{KG5(R+7J ze&?c2L!lP^2ijd|yN&UW+Y^kF2P>MYn`5|tMfDC%Ch{9$dvkQLGCuwX^aG#bc#cL| zVc=^+4^7=oepC#=4e|f1d^LVwS?}~FM@zsPNVL4CK6|j%Qd9Fs9^(H6+z)uP_x$KY z|I|U$4=uW5C-Hxs)ZYSr+Ci;uD#$onrIUUv;rh+a%FiEk)HliN2T z?kj=LN}h_}J0Oe5>m5+y^Yz`+tzHj5m(5+^TOc3PW^{7BiNEVWoqtJZG}nq z^5rRYJQwyvLYxm1?{t9&I%4Z}Wx@g%ZMySTJI3>|abK4f+mRi$z{$L}J)>Wk&>~-4 zQWgu6=O@c$xA1(;a=r1)!Bh6PCJgXL5HBJiCf?uv-yYw>JnYlQ?rmd!T8hkUKwj76 z@rD|h-)#kdiTr?Iz+c>k??LwxYp=)sl{)`57Qn*4hWmedo&U%6{mqAo`ycKh4xl`T z;IC$5T(7Do?%(_g+&?cfjf1Sj^*s#WpSVBVfyY>9iTTROaUNkA>M%cB@Bebe2y~pm z3;W2D|HbWH!$&Z0o zG7w0=iahqT+XsFC#vL5Uc8pUsn`+Dx(0wc!7)Xln=ivdH-?+sRVm_oH>daw2Bya-24L%<`q0ZFd0p9)qmlxty#*I}~=r`FkFOLFGXIxf*{Kad18^g`BtZP6Y+)CpAMj>bI(gEl) zF00~EGf$wOfE(rQ=wI3AD!}LU-~$-(S07+K)Viz%Yc4QhzlfuZCe(-E^5DK! z*5_$ez^S3nJN7dP@w&^=5-Ozqa7z2+!g_z9@NAsDVaceJbq7Fa{gaCSNIi`lV z*Tedrm6G^0c>rIzO{XHBP;??}q4f?;IQCmAOyXej_ye64z|GC&sIE5|=Db};yC1P2 zpOnk{iO11+6eD)Exh6(Gxg@_t|D^%&qaUzZ-A$)#-VgSm?xWY{FyEh@TX)JPwTHUE z?@;m{%u9?8kH+c{S8m+ZRcZ&WQnRUQV~F9{lgj1RQIfATTk`Aq+_dHLWE;Jgb;54}=eQ=<_c=mam| z!79vW&;v-W1dn;GQty8h{tAA!_%-m{TTcu<`C1=va^r)DE7(^dSQ^Is_GP&cd6a#& z3t7}3thK1LQfvqEvRJQR2XGk9``~HYINlKN|5N=v!2gwbb}{DV&Z}2HOzpt@`}~gj z9sK^tmgN2p@FI=){Weq2U2*W#-$6e1!x>3@r@Za1)bz9$csTR{nr7**YV<=v>a+&L zex-hEA{f+j{EA6=su9@0N)_T*%)>h!%g-KMSs630d3O>v^``Yz%%_%-6UhzW2b6n4 zDF<;W=gD9V@%rd|zsPkt>$qg z#E3|%eXdkXyh~TITHy!GV_f6*#6&92;~$@qp+mdxF1>$Z?iKI};sE^l`Knn3_rEKc zn)?ub^QLB9i{<^OybZL#{x$?lOk`nq8J%?)$?_vH?WfbhgJWSpZE$(l1 zdj7j+KU)`odH^#BeA0XXr4Anh$F+Ix#>#mR0n)ht$1QmPNH-O`9G9QeEK z7r%J?7u4;SN;D;Q^aI!$-g+_@b@k&Z5q=Q(kbS2;M_{$SZv+3o%@UrTdw84eHcP7G z`Cjy4LciA)3f@23`|6oW7wY!4zNuW~McO^nkt@5}Y{SmMmR#Wfs$1V;-=|$te#sp0 zYI{q_)5Y&w)Pg`i53n-w4cexpM%Tf-#lU~}Mo_`dq9VN?$7x#BCSe){smS8YkXd^_WkjzQETV4>$8T!ssJQUV(5& z&__R8FTOX$d0_A>d3mScuc%b}Tc{uK^qVih-(G1_WweU)t0Uo`u4sdw+dmzT^7oC6 zTdYvQtkn7ZP`klMo2M^hK2XZ&-@<(QOQLU-dAFVMLMQVjqtmU(mjnNp@D#2`UR;x( z3>-yXTGSSU=LEgp>gwIp(H1iGB}-5tq0Ui#dFen$caOKt#{6~I^TZ(a=Ot|^cmU}0 zB{-jF|22IeW+s19tq%al2d;K&8~UQc14_J)`2h2?IF0%fy#L`A)b#=XNG7K+zSflm zlgV|M9|eyu$$kLH=Q@ZNfQPb{`$N@OHS*uCXjHcHeBupu=n?nYw$?Um;CvJDo+kgX zqWeA(emv`S8fM#YowrZz$90Du(k1Uzj+d>8i?h(fDlaY3=dH!(Bk}1}PUTP0UuGys z+}~-lDfmCeBi$M-C#R&=Hs}M)%95Jvx72KCuEpmrx4&mC@-m=p?e9hW6f^sDv}KpN z#8VijUHb?BhITrVnxo%&t47ju{LU%-KZEr5R6pN_`vqRM&#$8&TL6ED7U3$c6X%5o-C#yI$JFLD3;PL40XAMPJLn#TFlmiM3Yt%Cbw z!)d%fZ5MEV1hP23f7ACT&i;qW3;6hPm2@I*S>OZUALcJ0@BfiCSEczN%r8(^=ObMJ zt-=QY-bVlRH|YZST)p-xBl5qnoCp6`>j5n4Tz5#G7ld`p7m1OtvHnD@&dVge-_`32 zFz+;RdSZ(Cqywn0#ODWtLwW=Azg^FP2ZP`F=Hz3{S4nbmhPc009DEYjp?h@f@Blv# zM_QVhhiUJ@LfReBczB{~*r*@2{I( zosE1B;x0ib+=2ZXzxw@ePXhmc_Tte(@|rZu4F>W9K(mb&15bGGe9FslLZ{dJXj@Y8 zHpX|&EsYrGaw_Kx_o*1?e)HL_O=~eO?P-~xXI^00>~t%~F@K&$y#{!B3c~-ivK#^K zxW>f$FQJanEc3lyV=`N-fCpmSd6fOZs9QarT*A1F@x;P7lo9P)f2dcb)h=P&wz#^Q zaUjO0EYrZ916$?2dx47&h@$!);$R-9_lMNadhGugb}q&CB7<^__5PNe9PkGoVH{>e zy}b+cB{T4US5J>OXDRA!RjQ1e81GpkUD%Hs@uCrUwby2?c?fk9;R@hO5#s*=pV~0`0_t>g>ql3u0-qbluM@!wzjI)BQxfs#l7Z0ko*bS}BGnR7@N=V4_!9JRK$pew zFX;V~FWxxuR`9Ib=ZcS5`gz}nYX^($m{-RgVdxhC317Cd@F?<)sM9x}MSh^P!Yu&$%7>)e`70avlkVc4J-&WEw_^|Kof! zXpQ*i*LeZvs_S_H7#85?Fkcw`$X?S4$On&sIsprOfK0>h$p@HE<2q@p@Bpyg1wMd) z_lNx73|wFET+o=|njSmu2VVG3!~fHtBcIR&cv;Z_AYOev{*OiEbFR|?Q1T{sD!BD$ z@c;n3ga3j`6}#w7Z|@xPU_r!F#QzcQ9HtHc`AF-#r<6X2X&idW-A=v4sxf`{Rrwy@b}y30N^ph_yGJLdjA+F z{097eOcwz8E}SR+c-_>fTfZLv2md8MeSer=L!0|$*YN*$U%+86XCDsY_Z%t3!Ju%e7XgP#Ilg8l4h0!fC-`^=kL%Qa)}!LKLU&rRz|pzIlQ3%yzHSV|Qg&);NOq*- zrdMCmK3}p68X7f=FHfY(yUA z{ng_8b)D!ZB+5x%KToNQ`IzHMqULtxy83}r;`$CJtjw!#wQoS4ZK2-Zi|6|Hsq?3Q zBHAseOQDX847?n?3H)7;zyEXA{r_iNx6xQEunqYL#)rI4r>|a(UcZ0jqr~3@_lJKS zN%IQmcQXF_ZSeo9>ff{O-)O8#n+M_rL>yK1ORR@N2Ja zaeeel1qF*R@9dH1M~QoF*=274FRLyy-$340{f+llzkWOLFV>548SW);eIU}F{(j*7 zuB}^}7jt{rxy18*?qi9BlR9lq2z)bcQmwUE5VsvvYxDHvKVfy?+~9c)Mw}&`k0?Ap z#&z1SFb>P_#OnoqL4KzyQ`?gd-E0h38>y>OmUYW0>MrVqB6TkDdoeuIi2H3(rIG>Q z=XJBo1k}OwxxeFdqR;a-%d_6*xKjULW`JIEpL;O&Bk;4%9(-@_-kK@+r|Pz@Mt-jK zl?(yhKd9D~t>pC+PX5DT+N*E8IZyn)RIkrdaD90KJb~@q$EHTdXa|p?G79+ux1lF_ z6nx8?h^X)aB8mA1;0fK350lm-{ziYY1g*1G>tp@D>}Y8LU!h5G?u^2JKB!U;K?eZ+ z8IPX8{NOw2@zg@+&hENh8UlWR`DVCk=UL$5!gsT>$nV1SsAB!y(5$3p{n6v&sRP9S z_sSFV#LI{JJ1%paZgp#0n5W;;Qt6;QX&;Vk!+2ZU*cd@QP5G*_6DN>wtPFQusy&76 zh`NCR>Z|7UeweUxzU!Dua=wYkGkNqUtjU|e2Ntnh0H@f3czE&5iV1b9B0r+&bjJTL%Z%!QUOdKO>8Evo$rAW%vN% zdBDHmwHBiu&HNza{($f268jf!txRlr1kZ6SrV*&C)qc`jxgLDY%{A-5TgYU%g_epi&!+yRW zU%p8K-v#}>!;MNk;n3mLe)?s8`MFZQC*S?|4i|7;`)EPIswjB)yOHRl4ib*{{%GHb zt!i<$Qs1n z2IA7sJTp-8&;WESFpnR48Mwdb*h~Che_t?CA5hnE{vqD)-Tr=aJ^26#EFVJMegX2_ z-@@;tq4*4KUg-%Dd;r9Ui>qD;)CUrC$)qWOyt{BS&cCi{)215a7sxY>q}otC`IrMw zrGlI4`5dne#S^D+9><1M?ZjhhHf)&RkK>=n)l4v-)vHZ>K%Dz%>EmOkP|vfaWw4e0 zg)Y-;B`=0riyoESWgp4&eXB&1UGafuCSD zXJdSUPA5MHQ(f)vr|nOjsM`TMDNRpMKW(v~QgvWHPNhWfBTG9Saw9&^KP2j<>5lGg zCIQ=BWBM*|@l=YqcaHc5x^o|a9(Ba`Q}~&egQW@&U~|hQC+qP$`~$r_e}hh+;&`P? z&F8f z^ozYgeIEVVE>YXgWwjVo`Vt63`c}+8PUT3sH!%qR{Yd$cPi!Yo zVCR+%V@JxLD;Gk;#sxk9$91%Ow!hxY{df-aOKE+rv?UMVt!EC$_LV<(ms)kJ4#!pQ zJ~PopoNctH%)mNazfUF9!k?g@mY#q10iP29^bse;AN2#sxNhDJ@XK^Dlzm{)c9%`;RzT&S~0bJ06WYr~`2E@7(GN;P$#)T?y;=hZAq6a)HOU zX5`*P+`TCh_X77fJp){Ux&Y&Ymo)UBVh$1f&3(3kM>RU?2KeM!2Y>H7vCL46^)HLJXRc3JGtA+KP1HVR(BHrse`e?N~a6^?t_z~>xwywyZM@1mpnBJp)iW;<{Z z;O&iD64|h_`QdM;pBv);yAO}ONqZn!Vmnk zSmriM58_ClY8#&KfL3r~f0b_UQK0niRK(Bzbrbia?!N&1|D6iACclTrbH_+4{JM84 zoK9yG`3Ax2!33AR+f!ZiQ{7*5m2i71=gx~6iMt`=vG;^d|4~;<~S~2;#Sg zcpY~|#8&3p5}TUi+pzytvGEO8&}TpkK_ccca-<~kAs8363w09$9z^y55ZWar|5kWw z&J6K%)fcs+N0Dz7PG2z}?dx;Ds>y(zbeHMee(Gv}*|8fq{yOlHXUEtlxU#VkI7DvU z_gWkqrofxtY8nU5{!T^CbaPw_9ztfG)Wdnw>3$FSlv;}rX=y=T(c)}L<*AXUnUzm; zasJ3vtH1{azgpa4t!u(~fc#7!j;~M*B-x)Jx_h&d_iqa&QhmsmsYLPnZdV)fl#N?@ zF;05>-CiEw?wEx9*5!&oP|`AA zWS$WbmjDNo`!Nr$F*y=mC-a{%Sv=1Al_qbIK%8x+woG@*{!Yb~)U?NoI+o23i{R;H zSN05);`=qG8S6#h0H{|USOTyg}q@SgEp<^xX! zXZNx`%CLE}c^&j<=3_COcWxbIj0%n-UW_EbJ~Ab|7Ew@$P*6dfY!NKLh%8 z`M+hoKXjJCBW4^8wC7WBf9eqA9|Bx~`S3T?`%9>t{{Ic${c-&J-Eme=e$&UR6~4!VrK3N^Ef`u$`yS6gRa(A@&H7!(hlp^ z-WHfpmXAO21nrakV%Iw0{%X{(ufy_uJl@Fd1)mw5W4)nDCAew5Ug~Q=Pq~nK8a~(R ziA+1=lNWQee&+M%>>lSj2OeMrp2L1C&=;HsUTuHiJ=sA&JJnnpV%{Zg-Hg6j(7W@;9E=y5(P@PKb27;6 zdv;~=3i{~4--3HnB?0Fzz#ny2=!c~3yI8gc0%fdAm3=hsIW0>t-#D=7HC^-`%^A6Vj-Q*q$uh=Yaa6g>l3lww~({5fpo z_3*ipvDeQ{q8@cP6bhdO9{Sy$o*(-z=t!fQ{R}Q2+F@}8S8TZVIBYDLCv-7iR$Zr@5dHRX}FI@lE z`n3KFo5=$J9YP>pnQ}O+=P=KQFQvlBPLh8i)Vb94U%BHBy!YVSo6WZn_rFaOz!TN2@;4$Ej@i)gKg%<#R)Af9SVSKOf0T4$l@B*&s1TZeg=04&BXwctit;PD8 z`T(^b=>sqhtv06dowSYitu-y+{!v9=mv#4uf8^`&f25U!G|vBNmOLTol0{hmkHZ7M zQc`dV=4-f2i_`jb9RMtU7XD8@2#<%jHgzq@2e^K_0qEF&Rv!SapT_;umiRy3vx22~ zpU9)8wV;rlcsJ+-qu1mAT>l)#7Z~vH$#=wjgFG3ADd=~f#ru!?H5c;GXzD zK1LnYS`%mmi0&8gH0BTZd)5Qsw6i|m4Qtg z2**vWHWIlG|L^1dqHYLIonqAN`og zD>VZzKV=&>CQ%Oo|G)4n7m53~t9-ysuh{jOs>g|6H-w2$)Q`C_L*Ak(7{#(_G}i3k`G{fyTP-pjpAH7Y&_rD(Gghi zBruPIm*$(Tp=}>bI{0}}A~?Zuzx~Oi%)D=_Y_{gsfgf$%eW4ih1Ym9}e_zx;yP0u| zFp-pr+vmNUtwDasB#+02xxO~;fZi?o4Fyh!yk7k!WzR6qX!S&Ea}nQo6VnR6qtta` zK)DY2noPTEo5?Ahdy~t;VxAZB!+1d5Zm;dp{2b(;P&aBE2Fkb6)SKHn%&{=>VP;d*bJM{Sl;>wAY0P zX?vx>kFZ|(P-7@Wyu^8H*-CDwI8Udh9$f!zr6S|HVifpe|0Y2lFmu^^JfU1K72;3E zqs}qvJ+3h&@ZJ&kr%jJDpJr=K*dG3VWwD;!vH^Gx?mzz0>s?#UuKee$`@gLceL?|5 zDRuu@zpDG!P&al1ct7dm;C207@qgguDdsH!pG%*I`!k>DG;XcBjQk;Bt4!V(t_L-U za<%HK(DT2H@fvyspK6bk6IZ()_b2~=dCe5=OFI9Uw#-j{mfru7yU?c;Itk2=imd;| zGWWk7_&;cK&<$JPZN>%p*J=--{-A1Wt&{p1(Y-Mx-iRGLqUU?-ccYvZ`5bkgZV-4t zoj0CHvOZ7{`^V_-s>Kz+Wl)c8wk}_UyioGpcV8+&U+k>h_Fl$at@xvh55?0 zc=+T zCy0v&WNRI5|AelD*6}xy=SwH0%curFMB^2fyezy0AelamMQTt&C4 zLhCW#9t)NYbYR}r8wQlR{?sqV6`VgP$qwTE6F%(_?d(_zmUXU1MQ1!12@fB|^QM(+ zY9z$j9yDGfuF#hwAif5!@PucW_KO{=^W+(X!;z~z&KD&)LF?UK^LRe^0GZ>1-bIJp z?$Eu`2Ry%g2m?(X#C?Q=MctQGx9r~SJGjj>EG(8eZ{7c3HE`-RrsW&DRJ5n5f4Z1uZ_yd)QLr^WBUD90a{nXJ0`U!eTnkE0v>+)To zUO@Af7Ax_olsxegf8Tndre*|r(8h+4lljz9ze-@8)VSV#ACA|u<5Fap%eg-Nebk3l zM=V=T!G`64pZh`HHxJvf$1q@=vMX^T_Mf(GHo*SX{2hiTbDM1~^^g`3_Xq4R0(IuN z51wka2|xSIxPMTWm#%YU{+BowE#oud{#A#1dN^JR0J4bpV_Z{omqGJZ`uxpf9Q!o< zpZYM^UI8t)m&RK@ZvWDRcpCgCEp+iw2C3-$o8jnuy`FXUz|o-BkJBqyuvyA7>tjD% zzdw!hr!Dx^zejyP@VJlR{ay=o0EqwdeE2?5he3i31mPb8ziu{0qsTLZw}OglTT!Jh zS1+!^`)oF6WvuJw`_KFk-|yN}*tLF)gn^ZD}Fx3F*P8}Uc*d$7{UmRBHlpukywYNwXgG)Kg)m20;>USpn5&rQ z0gWU}so%i)v+rY9Yw+%cK8dX7U_Baj-xl<%6kHjN50?UuH=DmzMP2~%*%=R^4?w)O zwH2xW^^1+dgU|;U_q;+w3%I{J_Te{){}(-f zLaGla{BP9vQ%|t^K@*REwLvCdU}B1OAZOjxRg2M20J?iPo^ySSv-X&Y|5ufh2cgD! z8I9Wd)Ap9s))4z5wio;TKt-B-df&`h*x=yt2=g?pHaqwSZkHSz#r3OeGGy1(Oycv< zr3CPfHVeWgk#UvzqGcoB*V#U8<2J-i@>noL{QQT((o*XGx2lHxy|zazU(9i@qCYL1 z{?W0=&|i}8C!Y_!E`JsI4;V(4u#W%I+dt|kfzE)hWaVn+VHWaP=y$PfStjalnik`F z--)=^iD7UlbO6j4$T$y#jav~PfEVrVc$D~miB_lNVP4u5Zvl>E6GB_Jo`TSb{Xg1`xc;WNeLL2V)d(5XUCt;dxS4g9`dVO( zoXQ6)oP~DRE9IIM&w0s+Fe0O_Z6Z(MX5>lG|JD3}mFr9WrG2!Cgh$1Cd^wf{e0I&3 zlJoDO?-%&g*3_=Fe@lPaE9y0zPckxdCyFqiyL`Q8$Rl{MPfTz-Clihu@(Ci)i>4nf zM!a6?7@WBx?|28F?;NKezU?kwYo7PJb?LOReC<69zd2A{yg~rDDc^bcnN#nR_y9V

    +PKYzX-Ju5ds+N}PRByZ2lec)q8t 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 z z=FbAxzoS=}YRSB}w;c8JP>2(C0H~LUuP@G<@6 z_%rY?W}J_dmOer|d7B-GG_Kb_uTJo~Dvz&08~{A1s)a`44R`zJzj_UNG267QHCbDyvI-%zS@b^mrK=^AiTMAq7fdUO z>yH`5+a$>G>CU&geDZn2Fr`~J5+Z*g8c&QP`q(61pBkZG+8A~h@O&mGgKdl(?w{*f zS&QHICHsM|^E`q*DgMj-$JR0L-;ozT@)Yp@N>?~U{6F3tuH$>-9_U}96vO@*yieAp zrAwFizP<2;>2rLK1)b5o5zpZsDL7AAy+0mbfq7C}iixOeRAw~lgcY!FE|^Wgk!}Sp zQC!5huq~-ZdEN~$XdcEqg*5ELn}8DohLC<8|4-re z$k(U*&A2|`{a<|l%lJNJ#tpnb=LYW2ypOAgQuS~k&p9y-+HRhwmdAR;XMbz`0J2L; zK8lwkUb(b{dUP|+oN?9xpgvAZBmTc!2S8QHyV-pd_J8s>*8$jcG)=hk_BX&Ez-8?? z4ZL3ny^lV6qYg3VLY@}<<<`BIN8z_U^;E!72;4ePs*0!bzNJMQzo(Eliue@jhwSU7 z|5q-_u3YB#+e^z}C&1s!AwK@vq0J5#kP@@5Aoc0R9y1jjM+yhE0%J z&wQx1!9OoLIvtd-eMP->^X<2@{s8YguBUx*ZvGwWmD<^{pAxtC_|IRV|E`lhsM-y` zUY(VX(7$iX%K~2seS8u4*bP2_@W-1=d0jXR`uSx&!9xWDlD!$DXwgx|5i$_Rf*i=aCv`n248ZY+2QEC%@hurS|4%FKo6jJio?vIHZ!qf% zfcF#O`}^{brW)XPTR-^OJnXR*6=H1QQ_RQloZU6a`}jg~eETNEW2m=Aaop)(_0ywR zKH1YUH;TBK7I)|A5$Cd4ijMJkp^>R-`t!*LR9M{`tj<7KW&Etoo&-*Sy4*&~B+sul z-o2MRfQu8c812M?crN%F)8%b#>Yf6`8%FIHk(YpZVg33c`sK54>mY0FO+gX$1@S$H zV)!-0JCYi3{*Bhqhw=GNtnc2t7yLH%J5Q}c5hA;){yn_(?i zR8BI^4jzGLB*fp1^c9=ExIfoAOghHnE4992U&}Q7sP{D9_kCZBr}AqO5-Q+hJb*YH zWuKNTCSMTG`_uBF{0dvfecJ31jyEHIns5EWy8bh~kC}p@fl||IHjYggM$LwH~9LuSAE9NxR(aKkpn zcblU+9mkPwdH9?Yac1+d#P?iPm+X8m=ao)$-^2ZOJy=rMg1lA9y;O+$lYidd-!-!b z_^^Fs)QkIjp!V$GjPpvFYhLc>dpxd5xL+Hrd%xvDy~``*eZyiupU0$RFr;MFM3gev ztz>&~KTd+5fxOW2x6WK#^5T6SS1bzOqvQww5%8Yc1aS=#HAzv1k;$;Fn?uFm!rSM#cd6Yo0^sXGll<4{=NwJA6C^< zv;*5@4c`U&S{s7F0?eCQFrGJd}-8JGNcy?^5UjHgm60RFiiF!C=Y zkB8O4kCre0-iFVEACTM$yq~{M+&=^J5pjRe05X=(>t>0(s4~FL**D|;%j16)?q8Cf zUI2fA=kt*Sel@bNRMehXk%Rj~Nqh4*@c{nYxc|fLJU;XNiNoI8Bzep%6R(Q8EBW1ux(~7|8>umrTElJO>zfCWA5S zXqR7m`mt{Xx4z;({O9T{@E5k7 zl2qc|?P+=GS4D z!S0ortiPE(KfhS?jIZT-%TVwt@bl*I)B@iVli+^oDscWW*M&;@G4~Yf9w1NPu98GG zmcw4nuo35e^ZjcH@^~*sr4aGG>pT8_is!Sn$Ja*tV#2lL<2<45SI<)anc~M4;-)U` zb?EC;Yn!5CDv#0FnT(2<7tM;2Na2mrJoqRZtR_pzeY_6y8go8z{l<`A$9i!^rh*vG zzkWxkriuQRHhCey_vAn2*fjEbtMAILCjS1%w+QYO{y!UyvmStKG0$@>`LsCm`iq0f z=P*9hC76$A9hDCmK={hS`>3tQa}v@XZ@YRV_5R;pggRrPk&)kLUuRd`jQ140yh`DZ zUc+&0)k`C^KdQgxhy7PjA*&VlQ=jY7N5I1a|N6pr`^Z1M`qIDv$DoJz(9W51hC-ZQ zbh<3hPUst`N7R?O3IG2^-aq3G+*R{my=(=jQ?|<#k`SR#{W5A0biHd$Hss^ z+Hp{u$m55e$q-Pl-{10aydPa;;m6Z2L0x}1E|l~;nBV_Nc>l+7{~+`c;4e>ahkvs?Ow=Kzeg=56mA#q=p!X`@Nx2K+?OwRSi zDVv*Tf5h#YldA6=Z;1-?-X<`C@~05&hrkM<|xRxs})T#{05|@~dA= zUax^YJAWW@ncuU;Y_`z8t*iORM%bm`XNstseTDvuiT=nVU+F%~Jm8^@_w@W-rOG5x z3g!Zt*Wa0cEkS&LNi9L1nAd(#QfoN&1pZ>4aUWA`>wZeFaqv4_uV0au(wF$;N84fNr%g`GppQ6bv z<@KHsbshC$@LEqE`2n&lxtWiWlTn5^P?X@S+_x-5> z+HFx)EDFQk>s>zyyAXXwhleHV8A^fS9vOv4={oM(|Kx@jszn%5{k4n$?ATEMB|LRlS;5BUld;xB+EqEPX#?J(=W2YVJpn!Sv{hi6-8Q}fLhkC~;x9?pX z8bv*TwpPSNAo~M8cVW{`2ja*Yq#gAdBh`2vf>3Ue|6f{4CMknOmTpS4RSXdKH^mddQAjb_Gu+`^ZG|2l6;by;|AWZ{xAWtB zs%Q!C*?wM{EyUOrn?im+aCd{LffBc)un_zJK?vjcxIRJe;W#P@dhiyS66S#z#|w1} zA@U8 zn3+k{131=yMfGC2u{#(6KcIX>RlCUx_>*Kv*a?1ZoAPw0=zOKzfI7|K%UM10Jo1EA zTiud&8TCl4f=Njjkhi2W4IZdyf?b&2^DOL}Jw5B#2LSyVBzf{R;O@pj4fd9y-XH}d z55t}+Flpng2M`cUdl}DHEQY6xkiW0CT}S^cXUjsgu^Rrx9#256Vx57&T%%@yG?<6r zN1bz;%t|-;%mVt45a$OTRn2~}f~2~No?(2o8gVQ5&q)pEhq~F8A`9c>@{my=UhvL| zygcFwMHaKd{T~a3RCJHFyP~4Ne630?8KQmDGho!wo(aQ2fW9w7oyRK1Gpee)$7z=- zW+jJu`fMl(9#uzK|63o#sV8M)x`pGu7rWk{hW;EjB>SjO@!5$Sx5AI(cEjtWHpETJ zguFZ{ik7jWMSL*t6J@gKEpO7E( z@AdHaMTzxqN1d$u7j}kuJmJ4r@;Eq*oRa^Z&;M^GpZ}vc6XOlcGx=3njCyVOY|zI! zC4uMNsPhj$@E5qhA%)}qI_?j>gL2K}TZYw`op??I>>Drq%jD1OVSayuAIip!@K<+~ zhOW{+syU%cr(Jmcz*3U&SY=*Poc?gRZR_vZDEa+zxd(|Yv?B|OO~p0fQAWmZ)C-u5 z#iKl)7+VCsl35YS{lC{!Z@jZ%FK~~JvJ1zbgWq3JQDTN81UoX?zjT6fZkTnsrpsSy zluSHc@P`H?{r786Du2QAoXpHMU_Wc^WEH$>#D7C?dkXOTp-}8y`qL8ZgV(zd-_BSQ zd7}$<90E7U3$FjZ;D(*O>FBGk&3|j*McB`Bp@I0nZCtJ<-l$IPNS+4%xF3O6+T+J3 zhm8yHgH6J%8N~hLb()RaN7f7_h?{p0_<;Yv+a(wz_%omCP0Geq%%fL=jUMs=0;ki@ z+}nF^FP|f~TN!Xa$a-d_x7-DMP+yzo6$87EqRt-HpKeF~|0AWPw2Pff{WxpXNojKC zUh`i;zW-g>yW4@gd}lM_j=*uQ$wuN0)vAiR<2%7~NF+|Pt~>Gt$lu@p{{91u-wn0u z$95k@KZwZ-D^Q03xUgXQ6yzhN6b0EK!7`P&$yzJG0Xb#*EI@~y#P!y8?Qho;>= zen;;U_K}4JR~P1?!|O{<630%&FHLYevF_4-*1tLN^Dng)BA)l)WZx+t;(=0;*-Sm# z{d6bL`*Y51TefYZ|Eo8$&YY=U@<|%;{lSv%#BI+=EeY_?nBUUe(A-SE!sUcnVH{AB z+QMU)k9$rHquzkOX?8vc9z$)@0aw_|dC}A}vCR*@ogm3~(cj(ncU$y~`dZNe z{~F`pUOxaqmu_S|0Q7@Go!c2Fu1BVQleK+hS0e?>*VHAF67=3!_fA(dW zyJ@c^1G#SE&41}C)V~J%BC&q`nrp!S5mtbGfcj@39May%yuB3ozP?tMk@Fe)*_DzS zYVF$89#P~I93SbAM#cU#ms^~>@PaHk#S7) zD?;2c`UdKRA}`Zsdt?*h5{Sz{rs9ifyTK25HrQi$82JnDzprV#P>=AD(m&E#yT~(2 zUjzM+;wLFxgoGmIyT7tf?9Bd%Z*`CB>w5k zTf}qOVEvoS%wvpuyZoN7)Bg@cS!Wae`qMJjqh5Y)NMbzUJ7IB&_#EpWx&!^eaUE5&Cc-KKx2qZhs7TKhASD7@-U|HoJ&3 zi;Z>{^SC{8vnl-a+2ik^-~6}N=C-LC(BHN0o_XM=f3wy!FbvsI7U+*9u9S($`&NR} z<)@H8pYNmHJUm%n%W==a;Q_`$JA*SXQ%@`o7r;L5SX-2x4SW*z_JV}#K|a1bILGS% zjbMP|frDeiw6BHS+!4lCVr`}lzOU~nW*zP6glsfWRwkoi#$O{rvw`uE1M#so;@6cR z026oEH!piq+Yd^4omfAwqR|-k!)h%iZ}Pb|4NE4D zTl7yCaehj)g?zw+tg15>^5VH_+bbK$izw-jo0umaO^$}ibI23}gT(bC*Sa%y;ypMy ztzr3<@;$q}ZsOv{2mK=)pSWKt;r&{*{_8{fru>S}L?V&G7UcVFuCLyR`z7`)Nrf#1 z*75DzTY$zw^4&x8KkAleM%+FhR-@AuSuHo^co2ydy>%;YO>U!&z z9{VdkC%H(uhV!Uclmim)XQbyz9rTrbx5|F9`Ix^00m=_&+j1#wl}T|Y^cK=^qF4An zP0t6(GkbGl(0v8<_+RW=8hHhHeWsxE{1{_pMRLPC7z@&c2=RLX6X7dm-=>t9m#6bd z3V8uiY!d$8t7SVH;=5CRVBe61_toR^O|eeqh2VGdZ^ioNrnxz;U*9R~C>!ePnu#mV z4J)WSk9w*eosRK0A>4SL{vmKG_=O#1xu*wG{P1Aoh3$Or5ta|q?u$B`U3~A&CgLE| zWnH;KC+)kv(^4+R<*^32i|;$kEnNY&w?$O+n*d&-#iwXj7KEZ9#%D2IC>%>tGRf_w zphclQxi>f^bHCZe#!CJk`yA08T+$K=%I5cGIyYEH%d54x%Kc4JRHSqx;h*-ZD9uN1 z99PvaD$|)HX&Q0iBEJ@&E=OOhk~POyR6vjDzW7Bh7u+M^Wn7){<60EbN%_ei%hzAV z` zIpUqa$n&=yJ_*#`aZ)nqD0PSrgdv&duTRA*g9;@cv*FkAeppzNVKeb?1Nfbc7nI_; zUW1*Mv1Waccj?E{|$PU|0lzF@w0rYKrj@7)mk`Ro|*YTey;SB)K_9Vemw zy0gVCCxh&xt21o{@50msJFoCz@CtF-pCRA0G49$`1iyp#g}i_nH6#(QOt5w7^)y(r3d`|QS)7P3}hj$V8|DC~MjegP_sya*@vggvJ=lH%P zwfPXohU0x^#+9lxAM$Qczbi(*gTDTxWIRi$IzuA;pvJm}QTo+d)8sbP1F%OWhxP>Q z4Al_=o{hZb{663)=(AH7gO-1#tV=SOXwO*NMwmBUW_0^YX#Z$~g@~7JuzoxEnT`s? zWfAA>g@51F+5LnWIA49}x#$A@qp!B5qkaMMeyd*SCmtvUo<|%D`2PhP`~o~@5LAi# zSBcku&iHh0rWbw$uD^67wOmxy?6E_LKP@bv?_XxUp>WlzBGd&i>5M;o7<~aWPeIGW z?XMlWD7kZs+P(Ju$?L+^BdDM(=Vyce(6aU=EkIsC=Elu$%6_l?3!nM4jqjnbanBYW zH|@fB33v!iw;K$2f5#5#q*;x;mdd5i34EV5^ZIL7k8HGVtJ|Ey<%jP^+#YsHvZ)a~ zM$`k4*W1eBY#xnlTu?%3g0Qf&7cmSEymxu#rR)7WoTsAdM z;r!718Sobo$NcBv{kSjLjGrp90d{`z(UZ787$3#q1JnmQN_iak3ESU)Pl3OXmHnQk zpbk0Go2vO;RCdeE-*@c3S`$47J17uth^F3ee=tsawPY~~ehc_;lM{cduSJETtSlq& zc6(v5DfOKc7L{aGKo7qka6=zMkELbrk?|eH{GKu3D~{w+RW;)Y@!)-ziHkeM9XrsE z%r0H&mw@NkeVUS_UuxSepQLQHxbfDbe@dnyUC+3xWpSMQB|~BG2Y|av0~1^?^*iFQ zd+q(v7{;&zC$%8;(889f*Y)ssL!Oqi#QW#E`Ww$dzeJ~+p;geAKuumC&-9x7cIrAU zNF1i$a%syx8)daiQ+C3Sn2RB>hV9Hh)b`PzG0w)fpL5h$bIq?OcpjGdy_NjkgBOAw z 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

  2. h|2zy7PK ztvs&NuGwDJwaXBE@^#(Hx%xcxO^Zh4FmT@Nu2lYChVbMZQGCoPX>V`H$Dd5!n- zrb>R#3> z-E~Jc;dw8pwK~S32gF@3FJ=o6^`m(Z?QRV>!(~1_JN7!o~=6*MCXx>Pke-zg- z^N47CD4NLAZ1(uSA+*9oeZZyA*GRm&o$>gP=oArOlqy=Hh}KW&e-hZZYAJq? zAhcYi?qG+KJ_ERpS00(*ed6{66MBJP{L2w(6Skj$goxV-pg%W{=TzBx)QO-@|EK#e zrs4kaqCZL-_ z;8167NYZNL5qT>n?YXEs3Dmx`;Z5X~Vqab!d4E?>j?YKEeXb^U5nToK9)C2t3EOdd zhr2mWgaOE7z208nQ(K|f%=H!!f7vK3KphC`u~BYvb?cSVgMAL*7U&}>T-yko%cSjl zcM(Q|KVV(l20TRaO+?764i^k}dZ7CXq6<8ZZ>dThw3Gk86+b;p{$Kv^=m$Tb?MZi@|_2w3!K*vk{{)l@%j_3dR?ypbce3oi@dpn5> z`E<(`5q~L|_QP))c1qxFTutaFEKE0gQb)V9=fxw$F+ee72$Y{ZLMf8W_zG(g_J@4+0@ z&%+16|D*Gz)b}1~sv&;nfS`u>nL`kVcVPb>y)ZFOJ%Vy1(n$PDT{r-}!BP`^Y}ax7 zId0)0ZcnQcyNLg(|6KAp$=kn|p>gg>x9OBy#+`e*@EmR3`;;qSZJemCX5Y&7<>nUh z|BL&hk^I)b!`(1zqrO0`Rxfh8c36s*+^6-TKfy+aqmB63#0PT@;&%UEYs*F)FZ25~ zAKAGd0a=Ex|5B4;u?&0-?+qEk^P0f{MOZGt6xyFPe9nGP(a7f`ch$EC*vv6 zt;jfod|}qvBY5|yZKmj;$Ax|XHM17C7kYv&~cq`snPNoTJbI5+w% zs-VYi$Qyj-0P`&8`tnv+R5B4`L^SwEkfU3`g#rbYIah;Ym2%&$j6wh zjnLa8u9@;513qgmY-c~XQy&D5H=-`|VbuazZQgHV*&pZ=IkrlDN67a(omoff$VW{DgV-O7!#~&voq_pA zB)Wz5`OraGgNPK=+WaCl`2UYW2UL%PCrO>3z2WhFPnp)2m#-l|6p!Arq+@>DUsKie zb60v9!l*IUy(<*Q!_-6KbY+HKMV{jJZ+r~jf4YWwGkkyL?Q_%%j{RTMEkHr28g^h?U%mbJFF$|6Dv+lWn5A<@X2PSYPY4Rdmq}CWRGP(=S zxB?cRd{`HH)nbbkOX%|ydKK}D&VYFDl+VOk{JojuSnSgG$S*ZEPY1x~9}EUI z`nQ0`gDhDngl{)}(@UI-T==|i=C-aMaW>)<#*eLw6Fe2_gEzWS zPl~*|(zu?_@u#D!{+`cGN8ZpNnDnbX@Tk-v$Bi;Ad6NLQ-A9)iC@$tocg?%DgE0YAz7 z5r+kS;CJ}?k97dhk0*5i$-Y?B0Ynoz0P^7y_R^?aAIKv-2K^4>{IwiWC(FDGI8M0+_(C@RlK2++bZjQ| z4*$>hp@Y8X{p9EFj+y&(E90Mmk0tZWFB*}dxN-e`(gz@u+ecl+g6DxFDX2q-|8Ro; z$2=FjyWKnMU5ot%ec(U)aP<>dKHj;zmsts~BJnXP(q6eI92S^gkd&;Lauak$U& z`~Q9F{*5?}_tyQ>-~Zmae=ci~uK`x9NS;sf{@H1rfAQ&h|NMpo?~6Pe^NVucJ-k2f zZ`S?iH$Xq+v4HdH+-F#O`s=N5h8 zI(=IDy6{A zZK(}0pPX|0*Yi2`x>ox-^=0{e>VnPi>%)DMjk^9i_}`7v*S@mJF4Ko*DqxAC9vb+$ zjQXWD290JQ9O@yDor>+8>oGoUv)=LDE2*S@9`endvF& z1CHJ30RIm@UX*9Z^EX?kU9983I=gr=mzQX@@CCTpGu-F2d}UzE!AAJ${u25D-@m_i zjP?J8>JB&irQooB>E^46;||@^xt__UDD(r;!F=4{T)*h{v~ryNXmIN0tC&IT#vA?k zeY{W6x1bJXUJp^X)ohInasE+v``~ASI`@gD5a(^&r|1WH)q>MyIEQ%$+e4iJ=J#MN z=6BX7fOp4p7tfWF%;({6`q#^r(XVguVsGbTxKDL48T}p5x5lN`lKLNk8LM24=RsC*@;=tdj_en~=LJetgOND-@gpzEnQENxr?>02Sz1vai3yTA z=D0NoU4MF6O4_5(F4(umP+4wRhdL=k_V>PLoNdTRD9eox`8`Tl(9266`H@cx^n5vMcrlqJuw z({&_9T|>QTZe^P}-4K?Pz^hRYDvOF!mReI-K^3p9xg*Z0$e3R z-a8QJ{|WPFk5f*kJ8YD5x{IKFvCP?BDBRI`f5z>Kn)>mztcCyaD-!Ay3{OgAbbt`Tj-x{;dac zA3+_X$MWGBMA^tY%)x6t9K%0*setQKDN?ZB0A#?sS1>=TZfZtew8^aN>@5gjY+T=1 z&Eq25Cm(^X8g)le2lEYM7`{x%uLh)Ogn5*Z`ZD$(qu+`==5lF|?_&5Q^CyQ3c^vfk z>pmQx2VHQU8aSR|o*`Caf=(EDqfd@8ZyBIsk+Z82?ZofG*^{LP^r^|99p4Km9rK^DJUJ?kl}UQiI=|Uk2T>kNC`p zHh2X0YZ;g=;5e7{rYZU%Ue>oxO|2r%Q@Cr_&P4tHEis*VkQ@~~hY}<70O$iSIX*Go z37jcDxy4TY+KmT4@g}s_gO4QYPNeA>`b_$K-U8O+$o8m$`yK9VcX0i2^kw9-P7^b7 z6ix^2#IYRchd>_M-O&$z{g6JTd)G`Z-pAu}EEmfeFFRXSBaT)}vc&IAZC!`DAB>ve zVe;>`IQxmbsXrB)IsGPZAVDKK_tiQ{1KD_xjI8F@L_Pe{qre zfm$4&-rQj+ahxP+lK83H9f@GR(svAwbntUhpKllUKN1NBaip7Iv|`NKdyGA=5sq9Q5t65ksN#7%l)tfM*=)Pp227Wr<=9ER(%3EW1rZX@h0kU zq(1dR;B(7Y77D;4kLz2!K3`%z@`y~`!x0$dalY-I9*Wk&*P+J~fbIk57sNT{OXwMn zV(iklxkZV`BR&(aV;=Uf;C={uhVP7s2fy|L=p3KiAhQea!nK z5F!6hygd*46AZ#B;8ZE#y*2wzCG>#o$Bn!Iap<)dLDPcwKV>O#_yaER{%9v*VcuR< zV>F&Jx0xJ4F$y)dX$Uwvf4_et<8{=-sCVXfBOm{pV@?%uc891%G=_Y1C{KZY$OfZq z7Bd=h4VCtqa-LULt|Zms`?FEg9M5~pVlQ}7JSXpe*}?k!G-U@qk0&V#IQSfGj8<>s z^Qx%$0G@Z3_3>yVM0`?Sxl-oy_yqt${9ah{YAqN=wG#2!<^-viUb^z2)=wXa@d8NgbTUJz@nssJRS*tf-hhGHndC_8} zFF;P8Zwz|ay2Yy0V)F3YVZ@OM{?iwXK-YsSNA&!Vqd26NIIfK6p+5iY9%)Qnuz-2< zm#H6k3URRTC4O(nldj@=T3kbx$57|5P^uTPF1hmdh-x!@5Jj=N3i<(;AZ**l_uV<$ zw`<_vFO*bP^19sr?^RWgA>Iyc+qTWsT8erOhlBXwv&d)9xXAyj)vW8+701B;FCgxb zO&tJvbn^dMx^K;STb-?t8AhoCcoxLs7x@5?|7TqT`O;$wrII6f{G-$Xuy5ks{J9jL z`&z|j{65G#l;r=h`E24gGB$V@cL9zA04#~O5Xbp!AAqF3;0yWzpnpRN4)7fxfC~5k z;CSH=N0YxZnB@CEZ#?sR^aWtNb;l1NC7b*|mp|44U^!X;|LO6M>kn}6buPdN<&GXe zKpuEce*hR2{8u^v9-l1-r_ooT9JtA}i+nOi>Iy!Mm;CnffN7+(91;AZdM3`)1Uk zbd09n-;O$g)D$7X-+yb7Jl5U=ycv1_ov{QX_3&v}AAI-FUy4*4?oc}%G(F`0F3JZ@`|SK_cD&t7f#puYZT z&QC3=fok$_4v!UaA?j{Lsh+xaherM3t-#-Uj1#hn=k1*saUPd35XfT54<%HgQ#fqoG34L%xtIb8c0p>+S+)?U| z_SKQ6jP>pU9|!$@JaU-&#_=HaW%JAIPQlI57=F#e5quizsFCmYh*qx0<8Op+^m6G6 z@qk2~Xba+0#x=_aihUaJ{(z5+;Qvi&Lb;Lk0My|zt{NYfwEegqK&xqp$9ShReK%iS zyU!zj>088QjK+1AyZsiDxH9|<-PB|B>=A+dXYT8P4ktT1`P?S|51y_l$?tCl&!2_A zB8k6XN`u=Eey5{)JA5BQfsYtqznP(l=Y9Gt3`)HCd`$eDAFrkwpK( zc(?|i2Obms$9K8CSZ_PjlE{P}T)3E{Wn(bPapt29->3hW>|2IB?sDlu*RKY7zAKUU zk{?fV3wgXBR8o36bO46XfmPFdzr@LW<4yfv-B^J*0DZV-A~=uG74PZ|^1d-odz|F; zWhu0h`4{ZmW|*f{zGE{oFO#JGzGVIXf8uwEK~dy>ZvS~~8{_)Jdl!W-Gam``4RUOE zwjAU4&SPR?KLgm8LGN%}e>yk~7NQfn@OW$~^{jY<$IUk5=%~egJ8waoe+}!){ z?`aVWpx;Jb=MGu<{lcvIS^RxMU**%}^_8yS{j6J=YGi-06Z(b4^lL-E$Vg;vwc(Op zrBdPZxn+$G1&+@N{i+T@$@M+A*_t?B`{oZoKXbWsRP5;F`%@h`4$L3uBN-1+FJv4W zDBy9{L|p=}|M=uPbL9WCq=9kZ3T4*FX&hhh**Qap_&a=(*2nu%(a!t;_4P>f+K{iz zXeID2S4ykbzrFcNX_r24#F52O?diy6zWx3!mB8@`CMf22RWpU)F*|YJdV9GYX-TGn zJh|`vTT$Xl-h5RW>rQ&RozuiC9Kx4TkI`lh_yhY+TH4GH?6`4^bihA7S@$1AUc&1$8@vGZ0aX{OC#eI_Y9$|i z{DZ9>2j*cr#&u60ywHm#AC*PR@h0LYUq5Vo;aG|JB;0@gI-clC{| z=U=iUO-o;Zb=6f>*beyO>>raSUNSHv^7~bdwrTnS{Jebx{p2r|7VG+a#L2)PYf-;q z?GuD_*5^-^H#P#-vZ!CM*Kj)<{T+)rW@Ho=5}zs@x&2{&>pVkay^X)8wBVb6lEeMF zb<0+{6ut(dN@o;xDo?ly)cHGrs}=ZUFZps63Zu!ZL!V{M08Uom3lEf{zrf(guC%An zf1s@FOc_59oO304_^pkN%^C0o*xQ*|!(X#ndkxaSi=B@kdR5K6u;=+kw<) zuF?m5xv-a7am9M~zvzHRHaSS^w0Y1IAy z?f0AUKhI!lY>H3^pjpyc0R4d(s?m)89%aL$#-jUwi9P#HMFn`Jr%W~R+DM%ZafH3W z&iPL&P%r(qtqnSi0xj!Ri{UFr-bJXf*RXDb`aKQeyXPI`ZIunm76o|YGMh3_{blGr zpKoz{{)D{D-tcTfCs^Ga2yTI%05k-2=kV>Z%T4_~YYf>%#ff^+T2y zhk1hbD4sv1KMD9R@Hyu{9Rj|2MV})UEWD0eQ5*Da{>JKc#DAxuyC9!)(bw)} z{5B~o-$7SZV9D!$)Fs}ixn97m3d@`OR z|Bo!zcW*xc*6Xvr73nf~{X6_zq8|YA?|b_JP=9f+4gg_&cCsG;bpTjT#l1QJ?g#n* z`xYhp0SKS;17JVz$|q~=N&LzJUbh54lq1633S2*Cem}_5uj-QXZn0)jxC@D$i8_B$o{6FhD$p4c!BTtB*i+nPPfBkolna=|zawOyIPmci${S8Q2c=H=DZ6TrFi$^^$bT)*@O94pE|CaEx1 zTTfx$^xK=8a}Ccf4@^unU*ChcIomh}e|_-1Uy0p(6?mnB`*pMDvhS4^&d=MnZHY7Q z^9^+bZ@&5zbT41V`{#NNKkN|U-mq{4}1;!0`wo8+3o6vZv3F# z`mUFLfEB10O6c(udGxuSGwt6x%Jnv%zZIn(pj}$#<9aOt%eyyw{^_9S{D+PGm}g%5 zL9nSG_tW2?K_Q+GJ<;eb|G6H{-$FS@zrY^n~{QqeA-1`f_|Mzw)^N6>Nzdvhh z$2WH2_a^Y4!}}U>{u|!@fO+z@J)Pa|9QqTi#|e~rJfM}Jd(bWNc^HSmG;x8n+`UHdeWqW<1K;<$+RSR<(L~?h zDp|gMZO;{bC3w|qz;EF@8DhTwsPR$EOKa$#nDQWw8;<9fSx<@GDM9>Vnwa(eoV?5F z)AFyFM_J|RRp=vyx=v$x9`di2sVM40yYvss42ow@_PQ6SIKOJ7_ek(ZF)#`Tm!-ujzj3-XPnhIikU-{I#AyfS!n z+$TLR90niI5Wc^+o4Q(M|Ns0EISLnMOY`>}R*i9pdXh{Lh{^^QRQA zsLaQ*!h7Qf+>i7=8Gimd%tvqchPnS6(ddl(Yu_BH$JPzA-5qTKUxsdhr9}TN= zEUv)Tola4OxZN@t9NozEWu~@5SA24-qg4z2a+gJvzIlalz5Hu0_6K@_;cw$D)>+1OZJ$=`d*ruK6?@p#W9^QV71S+|AxSs)OPljm2XKN0oG$e-kS zhO{yd{^o)2$7x9L{}yC4_b%i4nM%EQR%US#`G4Z{4jjgU9%~ ztH_7em%~9G`Q~0+pqtE_63+oH^ZPt5u-*PWd;s3muQIG#7hwNLQ565sk^JaR(c5}O ze^ReZRi%C0>se zC3t`P4`$`d=!ZEoeI`-IJ`;?|o%*ij%~9$L&=1iYyPk{nd*ZhfcwG5bTMhZ`7D0W6 zIs@{8omjSGA|P*mAaB$OTxz*XB}v>r-^hoFdK>UsEySx%Ly*nytJNytQ>eF>$^XNT zWY*O^AEReVp(GwxwJlnG37>1eCi{4tr_z;fu3zO96kN_Z`K^a)f$Izpzh1!O(j|$T z$*&EbuMQKR`oV7P1&%?{bCI9he_;C98XQlbSL5S;X-5KiJYGUebdt*oSK2?57ytWd zMet4Fabmmo5pGAZc%h2>J+1%6X72Zp`pjwSCT_gq9_47dawD;SV;^cCfNo*=Bg!_B z-wT|Nb}%2o0P%q^RmlI^R@u9P-ao9wyx-BU*-^jYZw&TB$_ zRF^&{KZ@l|%blKJl-CQ|nI>L;-*#Y@*P(Afa&hbsqX~b2Aauvn1?=`d^B?@aw@=3G zenLMk%W962q!zdzQ8#h;H}%`6Tb%q{<~}MX<5$?NxbDIDVHSRJALsXv;{AW4?*Bzst0YO@d-?xl-9OrRnSQhG9|cUV zIy^7#)cqrm03VKsU8!8f5oMpo9>n$DI`ua=KBF&5=mFlTl(GA4_GPzs_L7)iA#-KR>^FjbSzPa6Vs>|KEXksN?ov#LH4Q?i0W> zv2NT4NJFB$uI#!+i|*w^$y;5cJ_5uF>+Z+KV!f(IYigX2hChB^n>96*H_GW_xtw;_>JoxH`pB=KpIBY*V zFgH8>YvSHBH{2f*w@9Cwh!bDf8kzn-tXESCIq=wmx}`@QRXz~6(=X1@6LSoT=vzRReW9xb`P2l}J=*=d>7+handPJOsN7|*EN zWDwdS@Ed{8sa&)D`X2QEk+-9+2|RQ>j`$P)x{}Ju=cw2bH}bjI)Z7d`; zXN2xj=5td>&Ckp&!}GLL6u*e~PrhGj%VqtV@hbz5nsiyIDWB&3@2&f1eLMRuW@kV8 zDEWW#-i$wzb^r9I^tPU~z=pSozKq4XtgPhsiBGIsXEcUTR|VfA-IoVKJ<^sfHSF8k zB$T6nA^iYe7R~{$*nsmKA`SsyhJOL#$_5YA`;%0QFb!UopNP;(4izU-L8W zm~Hk5jMr$UT^sQ9Mh%o!;Dk1UjOcG9>;XAJkIBcTkOU0%`I~X>JJ&eOqu;6 zsrHchZcN96b&p?XDi+`ilY%EPb7z!(PV`@CvS*%tSrX z@528RPrS?juT9*aYY%qm`CRz4uKLr<)B_vA|6hS_I$Cpi0gn40xMk&WR(NKh=R2-{ZN!<-0pK`;w?D3r6=XcfG5edI1=OK74Rsgr z_$x=J5Z9w0z(_pdBPHZ0Qn^2NQ3T%&--nGG!585C-iXiTBCqqhb~-A`oq=qMm#&u3wJliuQv4-+{dCy%_8Nl}cs89{`VeEAlygb@Y1T{jByGtf71is(Axn>^n zxPUx9b^`ZpP0g+M`F`)NnRed4Lqq%VdH7Daf~OPrGx%7JqxDtmm^a4dK9Tx`6{p+4 zqaWA5vSP$b{y$5lR8a@9`;7^i{QVWb;9T(r!W+mBmXZ+ zx5MlMpwSi}D$F(bMrO)R0zdN9UYj`uTxQ8g@b#EJADlXj~?#LHFfGIUZXDQL}@hV883PNXrsR+;Ts@(6(_;- z?n+771-$GDdpzi2eMfJWN@xQgEsngqJ^Fv<&s*^0F6*AE^o?)V0qu%;*lo4`H5R zA`~5m9--8?(zl;@n-=~L#IFQ#;4qdgsOO1#wqAN75PKaypQv-+d29;2yy3y49xHis z&(Wb8;&L^%saf*T(WpltKRp;Ii;UDf(VZZF`Ug6`qc6FQw1I96%vk_R%py&DBixXHZxn7-MA zr#_en!WA;4i_34t%F_zdX`%q^DxTezQL>bJoFKoGT?bN)_8~0 z<+1qkRZ8;zE&h!i90f%_`tW)8puS6W4Sm%Do`+C3=5&dHYmHv$e{I$ACh-0?@pLG} zegUG_^O6(4qiFeo2aq?|OpT3}tJsg`Xv9stO|n@|@;ujne?x?LpuNsA%H!$l_5O9b z4gCLY*EIS6KL@=+orCkGKCKJupLQ)&foExOy4pH`tD5Wm)D;{rZMHQIQeW_tCZh#U zBTGgG_p{9A$BAa17O_Ts7Q{_M;;&*BJipgmize#-VF$ScxPay2ec}p^%_!ScVr+S< zc_ZVcP$Y03Iv~?@yeXh=SZz|OdWTP0;6K>Y)&l>t(wQ3{z{dbSep%YX{M^EP>1XT{ zotdc_W_%Wn4xDEEpcdP#>;us6@z~j4HsG1|k^k3ZWaLZ0{dGFKZZmY7a~sAh+7Eu) zCVa`b4g9^?-&p=GeFbt4$1Z`dw~XxZq2B*A`p~0t4{=@Fe)T-o_jiciL)`DeXp4ov zBXzOrhg=?QaXW~UqaTbPb^WHuSuV51^acZQ_4U>3(T@%M+ur+;-+5hvB4_Di zsCQ-DM15(+*xTU$Ga9~>c3~8Cm$n?l+5LBXsliJnc)jv#d)AoX6E$`daZpiOQTQtZ zJ;=vXpsRdrAM#Ut&t-#svK@K@)NP)dBVSZsUT!CEcjk?6KV6Faxyfpsf-1jk(&cnh zce*53tMcObjty%NzqnejPw!qxJ$HxLttRiET3m$wPG?*X2|`su2LPUo{QzLYg7^jc zV2Ar7z~U*lvm7gnrj!exgJuVVyn7{?X40e$eJfpdY?j1qB7*-TMzt4b2$I zPpO>fXN@>%YtziX)9;`@RKG2wF4s`gY{hc}b^mey!_-^auD&C+A0Kiy;dx=eNmwb$ajgYKt(8~SYc6avS>B3_4%8$K-e^8d`sS^r;x_wVxm@EOA& z`G3e-6a0S({*rt%c|v>~{^57l``w`cYKuO|tOY7Ju-*>sFm%cL^feX1@^j$;W*9Oq(_Kb$B zTgjha-FnKxy0CkBe_Xz(`#)tN&Pe_rcx1|M@c-o%&+jFVn*u#IN8V4w<=`^_-v6XI zA3E~i=Kbl5smuCI-XDo|8FV2Y50FOif@-x=nWzh4-9N4$++HQ*_aXoOr0$=*Kgx?% z@$-=3$k4Afgk#0Jvo0^{RfspaS`CJE??~Wz)0Tw8tWSUZYbqK2SS%IB@~`zn7yd5h zKltL;39;D4vsmBvKMI}4{BHK_i_~V+b(^dHT%qDTeBG-|Wq%U4Cubw{Mke(4#QcQy zRD7+Z{oqMU#RlN#cy9Td+*28-f4eBDmDHhkZV95BAm$Z+q>=u={-_LIrb|DjRr~2z zd)POuIRiXf4i`8$KMN^$d;$b@2J}?tdUE`JKgYLj3|-~8a;4}*e*NleBjT;EVxBD# zMoZ51l-llF;7IL9-T&=fs#MnLYo*(hoF8M$dS>~(@Q%wrG2nYwAK&TXax||Eeg}Ae z?1etgV~UQm=!0;s=fX#WYL1l~V$Jj=h)nt29JLF*1$_PHzvdr-51*@KR9HY=#WOqD z_XB)6u8)7hbErg6fM18d4wi4eiu(OEqKNwc24m$ve!$~cKYFV&^M|Vq%VhHYxL#nm z!245^p+Wus8J8kU_m}73uToLog6H7ogBJ{zljQ5ap;U_!^h6iluBf`UC%<9(NUsK6 zZ(74X(Y+b3KboaV-Hp2b@Yjg%EO;K(knVOK&-(I;#JHogn|ZWC>l;rj3+i>m1q8PR zdJp*g_sBJ6wp>FX8n5x7Za;FK{Ty=3hI=y#GU`0$y_p$>7T`IzMW=$ei@o|n$w^Ck znf0^?eZZUg@$pfCID$66PXw=Ff<3gBV{3-$X?xd}u3-HIrxdP#049{$sd) zlz7n5XVvc(Cy5g`Pc%1XqA#RTtrXA?&{UF|g}O)RA>q5myjO6voxM`prB}G;CRuMf zf`X<^$eX4+rtBOKOU`uo9vV~&qpMgK_u7#e9ew>Hk#`&Cqpsf*k4>(@=M*ZH*lk&3 z+7O%0fLoFwHXZl3A%59zWS`nKrm#+1Ox#EH6? zjD|;4sv3@)-5yyD-u$0_;zoU^$KuXO|6k0jZvF7`N5IETnaXq_qv51QeDR??#L=dW zq6hxG9*f@_8^5~sa_Lba{Uy}PBd!*=Fi&ZWjOJ4Z5PxYXKt6rh7z&ON*By<1|1CB6 z_g3-OH5m;{4Wm;t1N?kpEZjvte*Yt#KE~UPk!X;8)aL9_&)R>AJU^fh{&qFC!2Mx9jWR!+A7r`!*modL@j|e;1NWU$X)&?Slu-n5@kfq% z;6XRYb7wi<#shN^^2N_y{~qd{z|Z=83v=;%tu`z06!>MB#18rxzI5J~;1Ap4&35wH z?w~n%0`(c>Ex4Y_`1g%hupEzy9an(ANILreAJUthub^J^x#bttqLXps_*GFsT%`Mz zJ|}TL`%JsU_;N_JjIKs}y6lCnUViTBKH^)?EuWi<_=)F;qDl$82sl!F=nzJf&7!~L zbIV8YTt@fE<-6Ob{<;&dOEWWezHaj!k%&L#tWl?50ltGg9sMv-w<86e;um0HB0QWBo_2e7{ryKJP{NJt3&EV1X zt-)@QKKY7gA58eLD@Lt$^5x#?4X6(~r0>sB?FJsRylyB5c#(5rN9LVT|FRH43RewqK>@Nh2hH*w1UE^)$+A!hT( z`*C(*YTFeaKj@n-6K{+}<2=7&p%Ulogub_%bwAMk7H2)jW#C+m#0A|`v(O!QfY*rr zlQ_ONtTj&)5A=kBR@N;!j>%)J%MV6*x4+ zQSv(9grEOnrFtQc*HB+!LQkPkYkj%U8OYJTNsc;oP60-}0OK;w|ADp$`dq%LKfhR% ziL0h63#0_!FPeZur0&#HzTYnPxAiV zX7tbH{hHu4<8m$dQ+^-3D%ay6?wu!^&eNA%ks&4YVd`A3L>?njYn87e{+aKyH=o(F z$xx`%6*0anU+;l#GhmU!ZzrDr>!LqGwB|9VI=g<&=c~JZV|^a(n{O3rwZzk3ZV~ac z%`?0({PXLqR~n2o1z3M)lw(t;@H{Kl78iSwR~O`WcX}CbR;)A7zpb*S9{pcY?}Wbu z-udxJJ@ZoFqXKlp)B&(gk$f%n(I@d-ChlDeUibI%|1bL#-~UC+xZZysJwQ?yz<8tx z^DpCIw37$V5C7xrH1Pg~iTvme?;nhE#Po0v?+@M?0W)~oJv`4zo<2E}A2x=IbgcXK zs+`DQfaoCZPUbJ49*H}kZhxH@aW#)`!uKEX^{4Cpd*CxxUh($Zi)km zZyx#rxUieRh3Z;YL2u$}z0*gm2l{}lR6zj$-+-4CN zEy;T_o|_!M{TaM}k8A(l?hN?qKkxGuq-qX&_tb~{je`F>bz4Jop#{&w zXUzVH_RJoS$!H%%Tn1l_n)3nbIa7U6H+?X+#jgL->&h)F9ItaZpx%Ibge0Co z{-1FM^8oxj=+yss9{^rINxbEE@d5Z<`vGu1x~l^aTYr~+0Dp`Q0Mp&az5u|RpabCY z@1O(tqxu8fs|R2`{~bL5`$+=#!+E-+14zO3_4zsgTn^9;{C>Uw37t3Q7mhx}G3}r5 z{Yl>c&WO6AgTiPzub0+9?Rpb&YlmlYf}^N@;|<~pSdEVNO|U+KdYEo=OKY_e{a4Ko ztKD75j|`6HxWxSRiHawlps#3-I6cAVS$fMj^2IjOf}Gcfuj09wBcz<>2sC@}I__`a zU`FPJ1sbP>{;BYzfxjSd%a#Lwk%2lmgQKm-OWxk?4&YnRJ^JK}>=Q3MWHgf3Pr1qC ziF)N&CH5z`?3OIUFXx1QLEGRwnYl-*r#j{}VV4 zpRW6-??1{sMBqo3;>^r@>i$ueU@@7JI-Jm}{XL!d3-yE&dXB$>o?zYAv(r$=F~H~4 z$Gmw-h;(4sr+b$5YN4LWW{;aXfyzXpcAZdRBLyZkmTJ>GHp$%7ja3Xr z>|_{035#JmmqOD)WxzO5L1M)FnSayVVK-~v) z{(&#b^EV2SSoe>34E33350I}$9st&hU&8;H|5PfM>i_W`zybUu?$6Jef9)`^j*5P3 zsiaW+F-yI{zMN#nN4d3CE<5qew7z4&*Izd@?k+7Oo}VZJhb&CEU%+$6&wbYe=ZX6} zZ7ZGpUQB8gXjS7?bD6MCX?B5enO>vsPKV!XiVPfKJfgHkHj^h1jzk9eeK!Ig#1(}L z(?MMo@X>Cq61>igqA`(r3}9dY*Qeh)9x;~lJsA&n<0(b|hYjD|NW5LCb`QZ{C~-@> zcUEHl_dEQx8Q9-5*@BAJ+4_>)r=Y+m)DgFD$&niA-`AN<{d*91@jC6v{YkD(VY4v~ z%SuSnFfQwKi}{Q<64DY97`J%l=Ydy)Paui|jJptL3w*!5T5*AO^fp^K%I7Wd{;A4z z#4{Iud)OrN0Td1Y#^c@+aED$s{1f8Au)jU`>0B))sMqk`9tj5P$Omw^`&#(^de7@o z#}6HkZpJfL3U?lkgn7R6{XJ2}Yc`?2l)RMrYqP)0;PvXJ&K>#zdZ(Q9e{8){BpuIj z*FcDQfFgDC6!_W8iqI#0!y^8#byvcVj?6_6C!sz*-iCM<{Rt!~M88BhGa(Xp343aB zeu#s;YBlkb>);9Ud{lSbb|-D~zCHVzDlQvVyWPl7Wt4QiKPu~J*1(}+oMY?lck;Q? zxTdEc#C5V<9}iqDM7{f%Z~SUuhap@ySN(e79>ePPCxNs7#NgJuhwy$D`nLFd$R`x( zbZI%vOC0HRpdY)-{M4xl5qkc{l{2<~ahaVWZITwayu0k;xuf8N+&wUW=K`Oj9{Msqck4UcGM`JG4EAt3myYrZ|=K2GeUlVZ_BWm`Kt4?cIFJ;ys(=dZ9G59|RxooNZ! z3mY##svqiu9znXXX6Cu`)EBT?e5hMWC~48_Rm`i+wN~#YZvMES&nNC~iU^5j^ac3t z@c#)szQe3j!aqK+#~krFtBC*i1yymhra1u;>3hsYg5S@+36)#*bL^XNLcvcjKN=8D zJi_CS?|ylp1IM-5wBrPE_v6R=eOYx0CCPwESufL|$!}m@FGV>gLifK8xH9^i`L}xp zGXH+^=Rn}K-QC3fowl%rdjC$R*-KpBJLw*Pe^U2^FENvSLXYcLfHyEN{MZ)075dW+X< z2aiH2Xgfv3T^C-?^RO@5mT_P01aN<-M_fp%yIi;?KRfL#a27Svo2>io_irhupVV~s z*8|i`djFcLoB86&P+?FTIOA`_DR1 zmp>8;Z3R9hXtIC{7u6Y!_uo&vBv4fW9tip~-)@y|Ie5y9c=#W9y~XDI3D&84d)#{J z8vLeo1a-sYKQ62W-V2Xy4UN@&hu0jxKwazW-nwh=0vG@F_dBkB1$fllp6bVm zvt2qjY||YCE@QH;!Tm2OEq}X;^Vz1Z3wN(OlmUKaD1RMv^Uwxi6X#jA_N99I6ShDE zyhZ4@Sn5#^^_t<*`{zfl6r$dr~*RXOX8NUV6515!b#MzXcBhju)@DN)SqE6{-!;{o?0w zsWJRNX2}DPkl=~Mqg?)iIsk2Ge+2$Puk0t22Y~y#r~`mFY*7awE>6|~C?M`H_nnaO zf5z80>Hr`Oh4q*E0e~*>=n@ZLu^#}(gM6zb(c(PfV>|%VWA88;HFCc{>i09wCqBqH z9d3Nf&Hg8O0HDQ3Kg9pXVz@Y$^YOQ|ej%Rs()Bv%8B(uU#{cnsZ2cSYf22PWz9=65 z#n%J=kMsCsz6=U*_=|049rAO)Svr}g<9WqCkJ;Gq#w>LJ5C(~##QkH>kst5LXW{=} zl;^Oh|EI&aQntnE6oK;4z>jhv4@yY7EtJL~?>;JITSE{6Yuchcx( zosy$yhw^^t9PEIuztfd@?!^gns$LY|ebLdVEV$oN1iW8>tQ^PH#CN{^xCY~T;OITj zm&N#|v4NK`VNU6}2LAu4ilJ5Z)~%Qqu%Dge6BHEOZ)5%s`uxvMn3oqRY@>)@T@@Pb z5cp|V4NeFZHGv0OTN4OSuh=V1H&q#d_egbPXB}4zx*`~pWe^kWxJ;*_<6s}@&b7R&I{rHk9`9)X@LOO(*zf$IIfo0R|KeQ zV*kdJyxpN80de%XF1y>&`Y!PKzrg)NUaZZP8E~PG%b|L}+r4d%97<|`sl2x>`=C;< zf4&!eP4wRwxc)QLSzuUKIDmhfj1l+~l}1Uc*75oo??1tDzB+U}w+DTfq4uA1d=tIV zC%NqTd2oVur^!@D{RVEQxvg+V_rllZz5wNq6~kgYNlA!f-lwmue3bKvrQWn1`i#&4 zVZBb$j;EedJiQKi?g3{5_(iUYAAR)}#T4-MwQ+63s~B7abO_QS%^Y$ZP+9{t(4Uv1vYeJ9O(Dz?uk z!8cfIG+9~|ClT*h5jQj5Y3YntbGx(YgK}LzE}sCMd2@r`>2l$BPS-Vw@l-Z+0~xOf zM_sBW`1ALumLYyxR${l5RB$_)_M#caQMWwR8zwJ66_voJ2H$v&xIA>#^!i^g9#Xzy zJIANb} zn0ceoXtt7mU*8-4s&v?f;B*V~BmLI$U9@($dzv;1VJG6*4a5E>;K{itV^_1z{ol^~ zGKqMxLg+`G2=bE=-^{{;2w zE(Q1BJ)~R3{jXf3IZpe$(9p_0)Cu?76}0FFm`J=_byqaNx{Ij0J)3#3rs3i1SFjzm zs7YCd-A3aopdco+3go=xkX$V6Qg>Wxf1|N630@ap#D z`XX}^m$9A@kwVPBo%!bQ8Q}fUE7*y;9DF`#89a*X=k`QBJpcZ#)_9)pkRu8BJNhx? z4>@QRN}-3x;|~P3`Z3-jA1jdmA=D0Z63;K4dc{l}zh+apbx-bEIS)wue_HbDuNHO~ zLJ!w%;(V_M&dl?vu~@#x^%XYXIFBJU^x4_Wt69w!=)Syeh%A(<{n(FSc1M{{7LZsZ-v!U3^fBDuYAQuN4RmTGsi@9h z2sa*i_p9g!822>BVy3QQro~iSf{z^9%BP!uX6l zf#p*R3$#wnw3YRX(}Mjf=TZGJ$x2)@J|z?q9hD`nVXHN%x~gPlk2^&Ec&n{yEBvC| z+Sj!G zcr1AUrDes%H}U}RwIUt)(R>U%m8hT6fDj$)2XGR{jdt*lRQ*@u|3x?P1voB29|Aak z5r!#u4DbJAmbgD)f8hT&;QkPDh{X>}mid10af$omKF9F>nElV-{$S&pWB4udQ;kSd zx?|fT{*QDm;yw0LDkvcCkMhkd>iomcx6$JF8d}DCa@~JXQAsSGAnu=+oDxsmA2gKp zw1CeOVsRt!aBQ}idPMa9Gmv+*TdmO51Wze>VTAJv?H}U-tgUFmd;=yXp68ejKq+1T zF5_`W9sTkm)2>}Lu{u`j0Hl6x1M=J%MSy!$oIhgtKk+6Po)fKBt%^Nw^!ow7fKS3a z1$hxk;4RQUJaa&@Qits0_5Qj;G2DOhfL?|5+H^9`@-TGugaG*$dyKo#$BH^oaS18V z>8~uw%KR4An>;WZy(X-Kzr4X{#`Y_LQ$eQ>ng4Tl-F27fQ0@4`yYIrkx&mI*JoK{g z{vzJp4?b;K8FlB;za01jc_c9&0P8x5|1)kT{$GIOkKzBf9F%n$kw1#n|Hp9JN$|)S zZ-09IKXG~H3H})V|Iu><9)Mb}_dfh7IsluHuewj1>!@-NU202i8i0KASj@&LX_KY%}l2S6Ntu|I$!LFNHqd9gnL zc>%Hd|C{Y%e&F1To9Su67ZP@lBO2UzSAfOHr50I}!mkJ&G#3&8kK#C>bN z3HRsc92c9Bx0{)_mNCDC)y&z@-zab;Dw)qdZynpDLB3VY4{m1OwJC5+%RFt3sdj+z z(It=FIf1(U@xY0(Q|1Rt)_AfsjO%{utl7o+PT{j+Hi8`-8DSmj-R?zvUM)#OCo7u5ceNMU6$i1 zI4;{zw{pKyDd$%dN=-fW2Y7tUgM={=$aNR^;Z`6F3RP<9!)?pR4~wUN?h*wJ{dvgU zDXBLUueC~!#$`p)Kxc|huG^QcBOV1mF+6kDfxL5S+_$Uipfiue80IU3zFF7J`)v*N z40Lr1JOATl1iYv4J7yo>d3l|9LLudgpnNq&NH(_^Zx{mln?}w*Pdl6cyCu0}T7-qF1mS0?jZT?=N|j)Cp*4*m4oiZz1FrqWnA> z4JcTbZjwaAt*;qc^a?!J=;vjRpw1EX@&WV(fSsY<0Ioxxq``Ks6uRv_@ALT&jZ)_y ze3#*s@WU?~R7tCp7_U&LZ4Tgfh8}M>crVL}5Y}i>4O@sXVp9|DgIcYI{?@Xh`TBY* z$2Cp-sx0yfHr7-j8;0?!yL*V=Z}HF1bN{VVvt!E;&zR~1e#SX#R)52li2LW7x5~O{ zn&wdG3Z9p6*c!YFUWMdV$FIfr`R-#avhIG=YHb2eorVS)6Wc3|$tXNQeyT#To?Xu z09?2Aow_s2as3kKRC?+I=-c%w=DYmc!+zH3`>xMi$Ne!V?Lxy*SXZ`2`C1|H{rNEX z```i0PUq8(QF!akx;IWQo@A-5rZ=7kBc>q#GuyOy5 zqE_U3TOymPGGK2Hjg+3m{^P`dpJ4q&ze~=C8Sgwi#=KjFq9Ns8=DF(2qvfm%*X8Na zhm&>d&Nk{_N`nnO#C^m5Xg#;i?75#i2ai(KIoKRBIO*J0jxw*tI_#5$EIqAtwr&})bOo%R0VTC)V5(>nKhwzhl%&q-}`)J|Op_L1oV z&e9zZIxh0U;o}zui0k~;Gc!|-47az#gZ%M?xqdzpAwJ$Y?tO#!zsjcUq&+$7K|UDz zNkXEMdEx57O88Zk##VE&Q?nzz#GB{!X5o9^_JD@@><6L4u-3S|M3b1g$Avs^yI!MZ z9p=K2j{5p$^pRUd{J*N!2OSSr#gICP`qhk*HQ!jX=BMCsCIy2cbpl+6tP=Y$J^uJV z{&E|50C5R_BkSlt*mVDYpK=7uw?Dc2Th*xhkGg}|$p@j=|NolCxZUtft&8Wea3mpz z=d}QTfPHSwVrCP+7hdpRq(4~ecZOLC)`TCfU!&S^TZw2 z|K&dvbH7SW>oN!Ncb!*499KOp<)3ecpA)AT{uTNFAs#2+Ho$(%kEyCVD^jxuBHPeE zo&H%b@b~1@gztO>Isht_kVZeqIq=VOy}(J(Cu@@#_p_iiA}5!FC)O`vv&`^Bb$Hf5yI9{*%8VPHz-6im&uF8B5<%Der+lnY#QI)TyHX ztqJ{8Fprg3#>Y87>%Cef=lM`5q^BKu|I%Bu_7mH|a)W-8CS`n-X4tY3d44*>je@V2K8eCIo<;3LQC|6|sHetyLTI`C0C4yPy{ zMxKEDhldY6EZ3_n<*63&X~yZ~sV@1Oi~c9$Gr$!Q`mNx_NikeJW|!8_s$(95_&>sa z=$nEc0DnHV9{T{WzDEb%0_xTiZr=Z&Z#nrO;z?J`A7}l)1|P(>Pu!pRBU+wU?DLo< zuL0>>F?QVhp?}WhoA2Y&vW)*1_&-+v|EKgh5TSctjOR~&Zh`xMy4?yK_h~#hTls!% zU>qUy*@5f2D$@Qa?k~x>e+vB4rMNGK|Kt6(E$RJp+|i(L2=iTC%AZj8e+G3Th-=QB zbvWv@*xp%(s+u|n4|DuOB6WY)!)?^(+)v#&G`uC=4_poN4{%V8|6)0d%Rbm-#A&VXZQEmfZ#W?jdUD3|$dgQ%uNG!% z*1+!tf7m4)dk}f;K$q)ZGU2Cs1YgK+K8kwrmK>nx6`M__J7>C>?_>PB$M`J}r%HzY zvTs&wXk@*<_3bEl0Oz_+*b?Qs{GR=G*mt}7okBK0uS3U~Ud$UWMCLri;a?iEtBBu+ zLb-k95lp|4EZ6mCi+wL~oEO)40{p&zV`PB8|KQpKyE%R$P8enUsdXQd`v43(w`^xW zm@D%#524NBK88{K-7aZl!Oh>zMdz>cchRsDysqA^^IrGycd`HSu)hI%Ee9>v?Zd?N z70Sf*+c2-p%)dBt7CHwtexGw4@|UTpITCaeDin%g@ZFl*%1w{!Xe-{B8*qa+u;YpI zmpE?e+PzU)Gw>Juuloz|hd9nEl<{hgcL7KC^R%Kj0{s-={%=no<~*{^%|04<|2Mt& zCi^nBtc`;n4)`~Nf~&bJ`5<(XT-g|(B(u=O@ycoY3kB*qjAbV4F42Mc7=c?d@b_fJ zS1~@iD!x85^Dg(V03N~Znyl9OTQKjHnaT=KJqP|v{++DXS70KT#JtY;30{eDrAnVc zKW8c!)HAO%rPC&&?!RI=0(10HJ*2QTRH6^%&s%-g&3Nk%C=?p#0GJz{f%*t^drFE? zDE}aEpN8$0YmA?L;kTmXMWaoio_XL>kA~Wm*kT+l( zrv2u%j54k_HZyzz^_(UC{+>+62c6=$qZ4^7=uqJJToqbv-Yoq(`^nY`@;Pk-k#Zit zD{PFASE&-~>*=p4#Lb&Ku^)ghLE_;4sL90bZrgQ{j8_obpEj1AE3KibSCYnG>U5Qma*S(m2Hyo zocPMzlP+w3jkmn~B#uLs;wCO$Qa|Gw=lLC*jm}SOZ>rdvlOXbXcP1(^?to|NcY+6u z_(6&|iJOm&jmfrQ)v=ugGim49?w0d#WQv#56@VM~!6%hYNnSFq98|V+dB^`jJ`u`S;=fwRnU3Jn% z-;YFSV|@Uy{Z#4zFt2U~{?B=h_&@y0Z-1l<03HBjCyhK_kD~nfanPKk!WIoJTT|Cx8Xs`A014Ab^uGk9Xokg{XG%j>&SQD?+Ws!ZoO7Toq2UiqJ}&G+xEI%lLd@+KW6Cbn%5ufw;YA;CbdFa_785s24{aQ%heCc?xyo{s8kh zbprI}F<(ie^HPECxGdPm9X!vh_`OGHd-tnbd7eE|`5Y~9HR#S>HH4vi!t3T1A{&`M ztn#zpCic_glJi!ndGQVO&utex(q){NXO`Pcm=Vj2DCFTiPS11C`cO^KY{G*QPgt{&a$q^BU!d_yuG$_;fKsmULOdQ zbNdQBaIAxRr=U*iz;e$jjfbbg}KZsxHne>m00<((t5 zqx^lcau_-Q9R~kh3h)n*ze4}C-2sgh!%jNeXf_fV0Y2v#03$G&2h!-96hWtLlGEO`td;DBWw00>Y^IL506j!Ws_>p(vY ze%WF_06*rvZC0M|e{ubP(M|aO&C3`!K8p{KeF*0d;Fj?N`!~emh9yhfznHk}0fd=< zGVZ?=$9%Hx-z|!tTK5lk`%~)v9mp>zp#xBjI9O3Y{C@)ukhuTINKOLre&RQ@_&D_} zEaT{p@P8=!(r;&87}LW%#|g+``IdtRz~}eN@c@VmEb>}hu#lf0;qzHDJS^(~V7Kwa z{~>1sFKT&F5_BWk2Y~(w>;K7XSknEkG@_0%0KdqH*8%nZNphcR;{7Sv5OIjO0dI@J!qbO2)em;H2% zYrL+YUmf4yhWrEkqK~d0u5Uu>SHTOuy<@y1{;`1~AiM{}QZx(p~ap(u&?jkQ>kp~b5Uck-x|IN$b z0sIO50b;xX`F+80z*aMlM?C-@$A`KA$Xot#9sn*c-iJ@u1!%qr_b1-37~TcEKl>2* zl3=qSAE}sGhdi9kB^aTH*jNA{m3p%4FZf&<^gkRL99+S?r|QznYiO6NGEbvU-}r-F z;PHdE);HjKo_StZ>rnyoX36BVU5`5ZlAzyT#qq>a`(BuS;qWl>>frtB$4sSFh}U*4 zge3Y~DQQRL`taQy`vtBahy-SUPv+Vz7TGUtUD%2KQm7Arel-1bwA(|=W(Jw5bmq01A+ zJZNBC@R5HDe-?Qu;E2E<@wW{AGSY?ZOY`TK;{kjH_&<3?#Q&*3L);&mHPd3a1OHI7 zLjVy#g}gFw`ZrGk35?bKb3A1|1Nnu2i#)@}>;BJmfgdmutNW+!fAOuiDq?m2%ro1Z zTdJDzJTbq+Ji+=mM?$QN!+kH<2L3+h$8)HUyM6Zp^ilD7+-=$!L*PAv4~7juuU_UwZ$;k#9v|!V3KRpXbI5aaVg+~G10@@G4KvRS zoVaY5Iu0Wvv#MUK9||oX&jG#MoMhx{7weyh`&)O9;CP_FI1uiob=kB%%x7$>uNmgJ z6qj1Mp&7@gC@9(BMqLn(fAZ(ljqyscd7AT$4aY|v08C4PMg0HZK`wXi+n0=d$06jm z)#x+Z23-s0PufDE<`n8+ART^vE0(cY%r7xZevBF8ygWY_Cski9EG|_U-fLCeo$Lp<-dMfuGVp$}vBAmjP37f?6Weq9+H-Wg-UD}L_S0Xo3O2mQ zPv<%nuCH@^$kJ+vuOojnivDp&4MMbD;Q1kshWiE`g4OvEKJUl8-fsTh=A6ekcBL@e z;~gU(z&{rWATLlPxpNM4d{M?LmGJY6&?nu_-*tJk-UTHb*e~VXW z0PH6#UHE;ir8cnE__SgCL?rTBA;#4ij;luvPd;gV zf;QCMF-`kQ_zy4B=H2(g5#HzaBu6~(Zo{xXFNgK~ABBYb1Z|Yv2b6p6A~pKVqn_TSxrA z@#*%LncrF%`Q^Xy_-cIP0p_XdN2N8)m+dsw;y-u?YuxU1oUbBLQ18JfT1Q|VZMS08 zZr0nkcjz;Tn{Tq&s#s@#B_m16^BAkssDS@JYKc^ZiN~w;c^dnHliPpUa9ARKUx7wl z#Q$|^X)h5+&vu)6EC~d>Sfs`0ikez7V#&JdC>e%Y~vCxj-F#=#9E?-5yOsewqA)p}zJs-mm)WqoaGw2_m1 zYb~z+LLBeT%WpIkHG&Tl>D+tvfTr%07z|Vcukjo|dyslb_qtWB#7i0)y38_e+#jyz zd#A9Mmyb^YRT-B+8-({Vv z_<;H2@W$F1)^~Z``WMCJvpTpb=&YOiXS-?FwZ|?m5BG-nl_D19Z>DK@K$NrL)h;6 zlL3J^d)169p7!OG{VR*`xmrx0=JBkqZG zXl0#(Y;6{C|GnycYU-#*Bl*_kgH^_CH|y-7tH0|p%>SJgIRKVtz%y=GsX)JX&5ljQ z#Z|=Bza3w;@G$UtOaqT5AH*{9Gt>jvc|Jc+vtw_CO8@@T*;p?>IcJ1A01H1l_nmE6 zf45YcN}c0f-$m!$9ea(Iu+f65JEOgue1Xmi>GkiRE*!th36;Jp_X~*6d6&BX(8Hz< zcjw@$Vfw{lzXkRGRVBW8%LVE(UNF^1S-+vv^@V_&Rh&tg+D&}~U0V0h-@Ib zJ{dnmKPIs;C+^)xXI?bdq0Hnl5%=Nlai5jETAwSji~bY+MAmh}eJY^E^cdIMw(ZcR zNdLv3;d?Is4EXDpIMoq&YZso*m_a%d&Wd1>owqxVrKU?{h{ z;~w-2NM6<>kp}>o?1CnYx3!y|DC4}hTk4bRettaXl6i4MrfbNny=FM*5pB!|Z@A?0 z(SPo2(WrzDynfXw#v^>l2qBi$@u+eo-BOmKOTGTjjcP;{OOg3vTQOz&sjt z019xyX>oY#iT^Xt5X1jtmd`QQCl6r#qvWAZ9RTk&UI!ZohvtWfyU`vov=q;O2L6v7 zE#dh~_Rgx_*A%f$;;6 z4{*1n9q0!KE5Fw_See&ji|PF@)%|Df(4tUqDNppDtNUku=-kYE^Rc>rj-N=&B@p+= zzu@caA>tBH8_{fg4f z+kgkh8x%Fk2chR)wi)j|=A*HZkzVuxC{VnTkGkWMsCi3Gm2pq*(T*NhQZ@Y5H`4kT zzeL}g?VEHUuE^18-S}Pp8cR9j+#CdGB|zAvxrc!Jqt0Hn9J(xpxc&tN)UiXJWI1v7 z_y#p}>weRv$rg@%rLVayQdMPPoa<})sfF>Q``_*O9=QHcXY*HJg@FGem%nkm_XzEY z$>_7}?}D@<;?UkUyYF}nfA^j=c8$w=M?)vaHzdkga6*#Hu$n$<}>UxZAJf?=C-n3GsCo2tMoSQFLurfz5Kk)^f=?=c8@pv9O`qV zD0x`m0f_nm_IcR2ev@r~o9I}K&!H3g=9{G=^lV1lD&YRmlfW08cX(Y{|FjbG3+Gu} z4#c}B&BZnAH?huRb#{7BA^eoNpgUt7zQ;7RdL5qoRT|B$592xb`d9?|xwtQP-np85 zC5xcavTlD&s`bmbJ;qJ)0PwthmHdFvLI`~~Cd}s{fWkUFg(@lI7SxG-{X%#E`mPmU z{R`H|nHyKWFc3L=U~dJEuR(M?XtY7Ufcd5oZ;zr9e3CNBZzDdZ)9W?F!Mi)Vb@V?* zK5(o!1^;Pu=kLd1jWyesANOd!tb*5!GL-VMfFtdk3tXfBZyXSSv#&J{y*#I(Kd4R9X|w7kw(sjuX^Vgxdo_Xz zeSNpT|GqR2zqUeQtNBI|`rWsJ*hzmm^?8dOxPOJ;6|Qw*yH}1s)PcC6WYi)+7XaI> zkIn<{DX|IT734$Tn>Rbcz5pwo;w=1OW2WGp)xatRX@vf4AaGYZbqK81h?Cnj1ta5( zLk8EZF%n<@io(8=d;s%LHSm(tjhcaQgmF}F#JZdKx<4xYj{f~O`Xnp+VKoITYVv-s zNm4)UpfsiJFfS|0%98sMSLEIHbKv?N=J0!x)sOxC{68)pWBl`fk3Syd_75M%mTI-6@SK>+WsAPz;8 zfW++<;DJszLLZG5ag}e_rnp=Po;CjDJ^=CRlw~C!@c@dD9#3I>k1`UhzpO}w9maG3 zpr=-%VZAMIfBv340OrlX1E^y?KXm{Ao0xCZ0l@gbK8F9tERT~g zx_{z+tpBH_jyWtEyU-59@4afcD(6o=&&KdW)^Y4>4~3YIihA54^QM;jJ)^Sjdyhk; zPJT4=g~-)H;O<(l>=$k*H;$v;-{AKhQND&e(L1d+8Q)%gY;^|l`l<$ni#YKIGvo19 z@DB&INw673;mBzl>rL+YxfcCBmlgHb3Ig*U7o2hUJfmnj8VNGLWZAUILjO~v(Iiqo z;CR%7^{6K}E9aZM^CQ6P(dW_TM7|gGG{fUc=8*!yC!_9bW)qTos3IGX%n=B);zv&d(_ibEeT|0M{6-gK;|1tEafQSNt$ z?L*dH!|P{rp5Bh_<$B$E)bT7Un)vm#CuzqxAu; zo6hsTJzi(2r7qVimrL*DcE-me&=Y|E!r;K-@vNDakLR=`y~Fd}(6i=lxgMv?w1M^m z)9%eYPH9M*;(2K74XUe!M-4_((6JondE&(OdRz~~ncyjWzbDsj7oc-+)bRVM1-Tx7 zAul6^dCF*X-gA}t$$a;`zYz6MQHzOrL95pB4xi6Kf%SMDhWSfT(^Y)$&F=ud-C;15 zOGmgY3i&$n3U-&7qI@n(r-z0zusmxGfCu3++$CyN+)n2HF68t5g^>>yz-#drZu1Tb z8Mr?$9}$A&5k8|)36;1{7N4_~>#H42$C(e+h~`h=|NcV1{JzIg0+up&QFMkmmtdA`p9jInNQtfS7+N^HGb5|5F#>llaA}2I6k%c<&T9^aE(Z@%)$S|KE)Ff8H|2iyQd>I^h4T z+y10K4?h9`)>-zM$KTEN%hvnH;ul0C4&?vMF+ZGj|G3@I?O)u_Qr$oM*-^LO-1y#m z3q!>Dfp4SkA3Fc&^A-C&KWBfj>c(n${viHOJ-{yD{nY!X1zfX)`@o*xkM$o4Zd8vF{AL9Q7 z_#^($_nP=WwB z{3$vBOFV%6sEbvqzKjmQXY~X4;h{4QoSw`Rpr5qF1Nd_N0Ag|ZnJ>u$h+R*a2N0Ja zI!1 zzdtg8@ng>Hvop?`3I_g_@mT-KssQIrRra$HE(@20V3iSkJXfuZUqz+pD$e_53n#a5 z-amg>Y$dMc(DZnLXBIkb_wIWTIN8AUIWO}9)yhvza$h!@BWzIj)k=#*sTWW$1;||U@pZ!?#z?)(|fxM=reAeWF^#y!C*OqM9 zu)eqw{sHj&1>*j!A7TCr(^D}mbqCO|uuY5kk$H$j<=7alYGu5aeFYHK%k}-woi9h8 z-Q5P2P4Ety+g8q8l=C$Mv*%~I+%S;h=I?~oNR-EepT!gJcMZ?H7n?88FXm7g0DI&L5?vdFpNGHzSGUk4+xv!v>ncdvPDrH#TE??!j6&aerGt=--Aq361E2 z9`L%h>wkFc58GfRsnkk7l+7swSdYN@HW_#V`5R{(l_iiPhTr#K33b&zY1ftndwK%Q zm)C~~GKDDI-Ji=E|@8?$XIX6jB@SI;Y{EaTHBLh6yzq2V? z5sw)x;n8~PafGH`c}3Ra2t=*aLGxatUK;S}oRN_XyhoeL%S?=~CVf@ArJdHD zbF7RO^(~LIgBK94zY6{SpX8!G-pco~wA6Iz3gWy*OF8<|J)NtNtftFYj+a6stm|)T z#XtzWAGZ;Ff%aTodrmjvH^Yyl+8VBZA|MFF|HmY6wyWZ@VL@z+XTHZ&FQEV9mBJ}& z1o#DbKsgzCwB_aVCyB3@&bn30F^=S`8jweV-dVOD`cqdJPuN&Tuhs|>m;Ju&mMe(o zT$9oW*Hi1e`{cOo*_;*hzwZIzh<@{Qu)CYq?RI-y@Qb9rp>E>qHqeHvpg-aY&mUv{ zX?E7#fVy=9G0SK;_xHw0>& z4aEIZuXTBA(}9I32mH(+%i?~gv{?xBr(y+PWbS0dlu;GLJIaK8-j zi_v%PRYRlA=BJhBE)D?qHe82}7IABom#!wB?wkDY5%R~Fr&AiM(4Tya3VUFOE$&5E+F z=1{=42gjpvold58HD8|O@1$!H)Y0R7a`JT4C$LN>WGK`Ru$M_MxDG%XuQhn1DRh-R^0=})^~#7QvgqQOVH!o zV}{P`qxgCLiGBDqmy|@O8c0E%~vX z2K_=Gwo{Sp?n~qL8usej$U9gyvVgt-C(W6Hvw-=u>xYwdn6K(U5K0uuQ&{!QXGHK6 ze7>66B;fqt+i_$?7VMed2ZvAL{?7h~btm(Ly{r66?7yUGDnFY%gS}!9d;^#HcabBw z?#oKfZLAGH4qXI&O3IyP#{)*32l}fflnh0-KwmZ8*sjY$pMi<(Dfe9-;&IJ5*Yuek zS&ehTg>veab|xxn$x9fniu|}5IJo=RF+KFX>p~0v@n|*T3fIZ`XIP)_+ZE|$oYeZb z?;^*ArySb1n4dnH+}s5IzVW#iJSyVGU*t0-6;`iPUS)%1Vl3eLUkK;+$n=QhqgX>1pKoi2I*z{pXJA#tCyED4gN)_oZJ< zYq1@)iM*x(Ui8Ct!U`4e=N|j2CJp?==$yHN`Eh^P3Ox+yiun9h^b?<4koHyM_`19G z@G~CT0iC;)-nLWdyS9DTX?%aqZwa3=FE1L*U%eWt%Q6mvdU6NSep{&XR&eJdk4%D( zu)ee`g!46@IN_B0Cbar37s)%AeEad;s_G_VtHUdi2Y!dg+r93PsyZ2QbTja(?pP^rTWOwOE5w@#MA}&>3m$wiqCH_ypfjrJf zA1#LemQ-C(U@GHz2p?prw96+&?*iv+XGO(fU&2|H%KO z5dR+#quaI}%0AfDTU+-C>Tin+itOv4zcib_Jm)vy3s{GON3hXi!mFX|3YE9Z6R z3jyTmUNhX|4)rmg^uaH3(x?-q)9r)5iTYZ}7=ivkm$hsmKz#>=P*5ye#22(U{XdHD zpLNLiI&=mFcnL1c^Tu~Y}Km}iMCyV(y4@e(cIE7Y}qVI6=&?0eaZc-xB{%fv#1SoYyFT#`0$|OC12}ZLPy`QRjg8|BdGr+dugV z@SohV`hV*Gb9pHqk>dfp&oL|G|B4vyAG5kce#B9qmM8o?UVzAY&QHbv6Y&?zGsG<8 z9@d2{9Z&4Ip#Ols8{=y;;swqRrKM?U56iX~_emr3OO|kd%?{{_>Y49h9!!MZBk|cH zjJGzY(gZWDIBX#@~dZR+%)9U^)EGmHeH)>Qx z_ruEXr@WnACKI<)itVEtsv`x$1C!7-ns11Q+q(#}J2+ z_a9!p=I)uUQ|y0`a1QnCpgR<}+tN!m{b(L_Wx!QFSihe9U~bxZ4LBhUKfJ^@cT++*aMuNdg@5O4Rt zunSAgZ37y&tG6o&@BOW}a@l#(=c9dTLIl65w@t`wwQ)NwBi+z}DOlV#RXC z%YbL)czZk`F1&%|b?v&lZ|y_9K~JETy8mNk=Tn=p{zxb%hwEGX<90;9I|?4$;?!YY ze8l>lIO@z=r8m(J0KA0KQs_4zBdpP^0x!h8`iY)1I_S>ah6iXJw)6himFQzqRCmX{ z*3@;-n{hU2M2<&dxZg$oz^$8D-!*yQ31i?M9r_30wqg0KV-`XQ7tfm|AZVJ9 zcM1gq3icUF%b9ARU$rkjYo7x=yvmL^{2qJ*Ybfy){E_;LGd{*+lDh{u40w^>QUkYt z&{%PLz)L$aBCMLg@3RDrKtJrIyi^nYnjZ#Erx35Nf9n}1`KF>yI?ueAU{fa1KNK;p znH!NO^ZRT`;9K^dbINu5CR4e*Klk3?Y3i`~Z1D+*Ka5_;f75Dywo*a-U6rJ{*W8#@ z2PaoxpR02h9{UaaOZMR?Pr`nfhamqzk*P^0F83lhJu^qYK42aez*8@AK{x_DRO6Pv`&Xd@-%INR#5K_0m-!42 z80(J<3dReil6?z5FB_?EBJaAprB9y)TjxW-2S0sJ--|DT-D_52ej>i#-rm;6^TTk8 z>*O*6_6P1?Sury_JbZHqlPUgBgO0F6eV4gfY^yu=GYAA`~j8)O{-OuVtX&m_n)SFBNQFpQ@7qE)J6-C-Xy;8~iR@0m$T|u6z*Cik?4P8pH8~JP0)hLO!y=Jiaf>)W3i_S+} zTvq4qeu{ayrkU&I(7(*pi^xmi^RVAkb`{6d*XNa(-;TI!CwM;oL$iI0tJWq%8q=`Ha&B{R>C-8hvzpVe& z*XQ219Q!@?tX|LkO^^F(xSdRUV1V`dGt*-!%{*VI` z$P>uV$pKyooqkuV!1ZROz-caDd}a*i)nTafXio5R)QzG4DeC|&bAD`B>~_m_O=l$c z2h{VQ6T7A|@!a&dBBR9rd+@;XIdTdP;N^)$rm?6c6MTU=L5<%f7WLVW{EB%}yeDD| zx0msLL8GEoDXA*}onrjOEd3PLU(#|u<{g5S>;5-_c>eiy|1sP@W*;oM}S#B4^<(|?VM$RP4D*f**V5ZOfOlj+t>qEDqKI??+g2C+(exC8ULsLGoRCS&;cMG&%6%b3-SOM z_r~70{is*4Jr##M!(x6VhQGz)IPw7Sdab_^|38Pn8}WZUb|1t4`M%=$a|H1>2_1j( z6sY^Z34gKrdk2=Edg|$?&wLL4AL9j32SBTJdp}JF;Jr7`eX0(?kt5AsZvS(20Py1Q zdL!-eC+GlxSB(iZR(J9FIsmcz`1$<+_}new|7Ya5^Nd5F?m=MbJ^{bR-{&o#`4e~m zfZIRR1z=zKj{cpBGnNP8V_d9sK zkk@iF+BV*Z_sgFvVz@tTTe~1E<+;!y$0Z2NE6>jN+LEeW75#5nsu&+#>hOMmJ~8`s;Xhn4 zL|SbY`bVP5{*Ulya-FDOCr=Xn;NkxrHS~2*Z~RsGr_`?k?k0-vD+cF~EW zju8KciNx^#EBGD8E#Xhq0WgCHz;P)y?tE6=Kl3j)*8PKiW{%aQ@K zkHa`#Wprh#lBhQb*dMrhvz(VC&d%$}?P0nUXJGTo%1X~cZ&1-8NxjGe*c7Z+LtT*4 zb@?2AH`gi-GQSZhvdnXPqPuH;Kl04B;!P&qhxrlC_qc5Z$+GV4Um=gV$d5z)LN)XT z^shqj<7^bpsVyhj4e3;96!1ipVr*&qnCE_>JwU5vJ1Hv}SZe1C}e8n%MJ zu&9qY`E%;*5celv;weU z(SF8vPwj0!&F{mmeiz>h|MlQJZGOHkg?ei4eOe{sj~{H>AoGnggwhelA64F2D?cwS zeXHyz!2dJep6lf2f+stl@!LS;8hFdlMHASk?de=kH0oKx`w`DYqIOy5e^5lc^>l8E zsz)WSKYYKF@lRL~RIF$0>&w&8KWRMT>S@Ar+Ujg=rM^`FL}?y>w(43{CDv0a^dpt< zo6olj4&v&kXUc0h-e?jvD)NhK=QT;ZP8Y*I@HdVce32UP62J%Wj?8kr>Pt&b2JX-8 zMk_IH30kd=??q_H3tT7z`hm}D=trqk0{VJgF>Ja1&(0>q6A@#ef#aZ{?uTC9_j8fn zaPj%LD-{G?c?Sm+UN21Wy7uch^4wk1d>x zn#zgqAI;B09Y+T08{8i-FQHOByR!-Tq?)RF6Z1wm%6zVWG2#clzN|#4Oj2+?vk);i z0mlps^mr?=pPDUIKj64~CSbO{R@iQEL)Yw89EVks%K5qE)^%UO=lOa^BdyCH5H90; zz1yw7jOA4t56s2!H7G_yzg8uAf%-?9D&jS~Sj$7oyE|>YW!aQl(om6+_ z(e2gE;0e51Xe!(ACh`3sXyMEcL1iYJb^e#i$~F=IACFiM6YpObN=wG`R455yYX`Q| zS2~i`f#da01ySb%{r$r!#Gj2L&-*8d>wBd8o+1A4a6C1^;~6gQK|g?HC1QtWAPM;O zY=gC)>tF1Dp|uj%IWivw-ha6;KQABWv#eyJ#nPHs2cAKnS5F=LslYFttjo7Zrt+-D z%a8VG(x0{;c)-{>pi~my-vB?9zXM-cX9vFD+4)K%adu-kaV7I`PwlfQh-;^0#V6Zg zxA@!$|^tb|FO~IsN=u8i|pCf_e&@ zp`4Ut&Qs`~3f#w4(c@nDkp}p5z$XozGB+6m7e-CUBO8Z0Q(Bo<4()!shI!_^6)MCl zz{8K}L|X6LGpJ8@nS1>+V;ba}?ZR_!BfhWL;fpIl2NE!u6ZaS7DqR@@ln+hblVvdZ$#_PfA91##YQ{A=IS=(___* znRq^TKjLW2DCz6d>1M!3Ko|+!2yxo3GSfQX6RD+}iyg?XYXxDB_42k0(Lv(=fw%AN z=XKrU3*SXOx~)5^P9z_MUvlBGe<#i#2mhJ)6wsp3R&3}0XYT!@+PbfNQ6Y*AQV30F zXz!Z$X2LjQ15$)CGnb@xf`3@pu>nu^xu!F59gMhe{21huB?*={;5 zZ4?YfoCC-&6KVz$KbpKZ!#|tz zL+AJTp1t?yvp@T@9!&-I>nw&oBXN!DkjB&FNG{ZPvR>h|{%*bgDEJ5I0BorPP@wq| z@RDg~d3kZcH1=co;!)*#*H^acr@;ew4EmPL6HUBSR@UQKT_~E-FcW>TO?i2yJAixl zr5aNof#2v-Tzum@!tRTBgC`*4tK*fWN_)9>}t;}8Xq5rALy+Y z?1kFTfo~u@nFQT`=t~KRSA1vEz#PdCZ@L_nqnos#tt-=F9oJ9N$IP??r>p&j`f0TYLd8*6) zEby=PAQBYB!Jq=#qv!w>K$pE%!TnM9Us#K9Iekkz`#EX~?u8DY&Gv^_EA$G|Fyrch zR_Jmi0RLac{Z&i+KMle@;HOfTDoFev_r-QA{;y82URCWWFU0f5iU*YZqkKW|P+d+*z@Iq>kpp@bM2@ z4jd5qdNqHhS_S_HA3{A}1^>V4ywv$T-T?m8^JD!#CWGpIyPZ{Wf7KHI=lxN)`_b*E ziT`iKxTVI~RrSk!2WS0S{PDi=`B*tF@BoziVyKVBva%5UurDI;QuZN{8wxSbhEZta z1@7O~(<2c7=X;Owp(egDKkY2?S_tD3ZpQzSoht`5d)C{8ygAf4>)j!ZW(GKJxg4qE`1ssgjW4tT=e-*T9_ZX> ze+f9nE{wlB%1`3^y{@nkLRgvbccamz(!zSy{jbG%@2ro_kEefbptZSMPh9_e??}Yw z`^Lzdy<&nsk@)&psGx%Ol^uH)IL_$qd=T~ZM>~U~l0@9!KQ~p+elc^>MVb2lg3)Y7 z-F;^u6Zk&jWGT>dn0C5VFq(J;SDTaj=IfNznOz<3e@K_5TUl*47;GS28r3Kj-tjI5KmVx)(?{;dx7`O8#@(#1?$Vo0>F9 zT<+d$Y$Z=1JR~_y;OqA%Yrs1==XEvS2#dh^s~fi7$9g+sU|@v$02)m@>gLe5rlb`0 z?v-}KU+-D)1LyZgBIs)twi;%G$9nMHe#RhA^gw4QV|Phhgw8<1KR{Q8yn+1K{MiF% zoXNVR7Ir~56&CCw>aY{~SF^9)RD8d~%T1jz8`n&sRF_9Dsk~|6>{rj(?v626m?dbuimh99`7` zcnAOYZ?a?m%6jkD0bsuVW*q=-|7INk`UyAl0O%KxkB`rphdco4>@a>LKTz!hu!8ra z55Skc^re+)^Z|f?GVgnVay-k&uO7E*$pfIDfwWNc}Mw5d3_Ddm*+sM=6 zKG7yOodB8$-ssY|XIH~cj8AHrx6r4iCBs_$LVSVSZ;HG+#pS^3C9WTQdSQb2zdk6B zlW)2!a&C;vJx%6ca=YOD=vn6y>*_+j>=g1+p%C-9ugRrpv=ieG0&jj|eH0B^nE&Yx zC_46*Xa4<-a^TbJO{U-^w^vse-@&}lkq(XK6ma=~PUF8s+`qTK=Q5@RgAO?SWlO@^ zlsCAaERR;iv~{$f`JYpka{Kl$ar>hnSb^uTzEPf;;q?)IYCt^$>ir*l3(HX-f8vdL zPR}gHBh(Ri@pu)FZ~U>?CF&PQi{i{>Ob0e>%)otLe?7;4oZGYQ7`Sv9 zzmo*P$NK;LKp*yV#FD1hxAJ>!4g@k-4`Yw|mFWvw|1X(u9GV)OBo1G)IBZ5f(Gm;B z!JFu|6pY=F$RjxP*e)lnZQBl|Z)oeHJjuLfs~8wbF1%t9bY7A8ecNN>^T53=Lqcmc z^O*)gOyTsX6bW;C86A?sA847C^~Ccf+)%D32Zfd_JV)>khq8+NmXJ>nIA5=CiqQ7@ zC0uXl{Z~FbvyA)ebSln&JIi`!@_LaUEKJIy9{y#dX6tyMaU=PuhNb>FyztI_nrA;zz9kFJ%){RTKr7IIwX!G z(EBUWQJ>^pohh{+0P+O*BM$(&)mv5kpU)+J4jpCWRnzj9SU1&%_xwLI{*Uhi@c(lM z$g5ZD@Ncz$YQ6tTyh0wW)2ZUJR}Zl6Uk=iWh+FJjeJ9YE}H7b^oa60AF)C4yLX@&M%3$e;N`w zCis20j?4P~hzsbSayc#e0=J9jR_1>={tupoMEsxlG4X%uXAu7G=;rRa(_&fVC z@c$t0^CRd#U=#y=a_5sMp`tRrf^pJnR^~gIw*}+RH z4}m%W99PKO#o`3^0ib@s%5}CvKM-|5$RlukQRlZIKjH&%;$2+t9eghUy)noD=su1P z0LQ6aooBt{xB<882S7alK94IrfIqDtfXWXz`w4ge}BL9dwtVlNU%;k?YAWzz2pJ{%55Z3WbSWINzR7lO}pw(y=3sTTuwJ$AA zmr~_-oE-~Q5|6t&wG`%e{>Jt?=sI1t{L6k{2K}GGqwzTXANTf)E>7#sGU{7TSz7z! zkCAs-lAAg}{{iSi3YUA~KhO`vaW&A7(P%O@67P@Vd&T9Cxp(iT|05U#;S&59QS9ka zaevhUzgdrVc<`&1aevkFJBaos3jWXWM8*GA%jKU$2cQu6KZd2GmGAQH>i$nVkzPf9 zb-9lJZ;@Z1Uck+`|INDp#Q&3$9)Db2A9erGIoW#fqt^Ws|Hm+lyu_{e|7Q9h1-m+1 z?Bv%`w+M1E@9M?0;5&gb)Peo)=&R7;akRaEoIrjR9}x1jJf5+!Ef_Dk-PD8Uye}g$ zntJf6_s%<67j)Y3Z~yjhTXvxiBr)+DwzgisU;CJwS-GY1yhBu7YTiV|Uh_keUU}&Zt?ud%8;1$eb+{^w1jOc&)k(;Iq5m%i zO!~9H|7F#}f3q0O0R{hWguYfLmg`45x35|tP?H8i?_gMybGM%_K)kDho$$N0+cmu2ey zmu;^LDR@5`s?iRQHdb#f2WwPO7xCOZS+SHUp`op7>?NN?9e$hKce>S?* z0DjR)OJ!6-ywrcYaZ;w8I2JT=epxglgS?C$ zPYC@J&~Kru&zo7es;~kNGV!00U_SIGEA8%oki{1G*TSm;@cvbWJ;p3e3;d-rY49Tb z?xv=Wi;OGkqDRA-*nVSUe-6jH+4-x8_l{U{X0I-iuc1vfa(vVT;?QY; z{#c|Ryr<`_d%iq-__FnR%VAnhdTSM}(u|3Fq z(xh9eCZ3xUFaw8QSJbiiy>jM#45B!|^+Ut`IB)QgZ}hq<9jC00NTmL<^@s&BvW(L$ z^Rt1TQ`Rm^2mF*(MNdFqC1_p+oN`8*ixT%2Bndo)F7Uw2t-#&E6S$7N40r%WZ!7V6 z=+w`1Kd0Bd9V3ow3mDh1FXZlFA&dJhdF%Bk^$bj6K+k+iOYFi9uHVuh*u~>F2)fm@ z$Lpepr-6sZVtwXH@D~~z>ngeZfH`QJt~q7ZZp=BvI{Q*v$;-t5{W{&TZs6}f>=A({ zqaQ=K0Qn=}@4C?iE|*G6OD=&AfV>Rq;xAd(n(|Cmt(j#DSfK}?%}U<19OxqBRhH$;U?rK24ALJWF!TBZHz(O!* zAM7alHP9jt`3A3}ZpdZd2fl@&N9-vC-o7?Bcfjk-uCES{X}#bhbfp;*y{PvO{&d6t z&FRrbmmlZt>Qa`d7qBK^!gcjKb5itPr}vW8 zgS@5F`%Q-yeON{KP3tuGbr8>l+{M%ud?%jpe53pv^34aI>OSNI{$E-u+p3xoPo<`< zE`+YEZQNFjJhVfe+}^`_vHHESKOoQPNNml%#C)>n_=ua+W7XPL@+%K7I&LsuT`=Xk zeg^N|+?*s)Z+6ri7~%4!NTHYGiY6R&aXhPTEGgNE_jr6DH<#nkwHBe{4E!=Nug{zV zo%{Luyfhx~ue|p}dVwGL{DW@h{pAOK^Y_&Khkofi=gT2~*oZu{?{xgsSK4 z|9EcRQQ+EN_jr87>1!Gr8d$e?x}Z?o)(QPu2m}Orz0JRNyGtJd4?#}6dtn!FtF5Ky z&l`aI-v~SXJfEzbbvokz|6ABCaXQ>$2w=bV+SjD$Rpj|&xeGBK=VI5ycZr`*Ur#Zy zo^jm$HJLny3+^8ek{1z~c*G(sJMuO(`}vAeSeeVM@X z1|Bj$KL4f;=NSt`%BP)`Md7fkl6|eEI!S7=Cl{L6no+k)orBb*??C^)ug@qv0)MB% zqZuQQH&R#E$o>ByGV?p?F5AAI0R08%9c(R_JBstvX#VVhqriD&*JS2zffG5KKI8e^ zKw+(I+txLogPuUoGk*;n>1*vnl@+0{p>Oo@ACzvrc3^ek*Wuse`V|4+%PWGvn4-T& zPd=zmh?o5x^s%>w!cpq~m&AuUfR-u!aB+VMN1&_4?^8tZgm&Wl(G;m`;P*dreeWLf zVCTCApcjkp2Le$(XX68X=A-blQWCWA7pX6%xnmA~lO}5^uHaui2Hl(BZ!9%zpQC?= z!-8)3e~hL73wIDa_1SW&gJ-X8UI(~TjKw$_fvHM0=+GElm%|x0>3vuEeU>Q zD|Ph?)OcI9#Q&LxQu7|FO+{WRAMwaa9%&gbCl3IhznF^qt9AwdUBUmmy1EXj_`hm_ z@3k`z2>gt=v8>|b#MO}I0RF!PJO}ClSe1HmQ#At^!Jm5mswMsp_}`%Jk2(OvSI7h4dA&Oy=Y#VLs>e(GpVR97x}8;Vf7RZK|0~xI zI%n#BZf}AA<2tJOgB4p?|3&<*Op8h#!Uxs=@A)1WU3Kwrha zy_Ec}z5oVP#CMH1Za@eAw8K?bF}4YQ>9%bR(es^MmXVRvRMzjCg8c&V{mEc(mR5?F zmHgcRbYBWAsP|u02ziSn_G3YL)z&wWk4Z~PPk8gWqn*(@=hU0MKkBqTGB0x6{D-~Q zhdB-fdW?O*?RzJ8%tA;1Xy-jWqN1lid%aiS@1#1H9r^(6YdR$G2HHBKlKdUc?`vaS z|M^~hKnU>ngK?*w_WrfmJ;eQ|fWxt0U0VJ_=o6sCv8dO_am=!>I^oPISv=i~bIGyAj9&E=qLcf`ND{n~+v@yCvv+JECU8aLwo z0&YH5eSQo1JxMmpwFAKam-6q%c;?7W(rVjq{7IkD8944WHK*mCe-63=f}xeV2h5YQ zFOI9C8sFK?Mds8%pcnp2`RnDSDYcu61fxDXmHE+v?O!+1u6FNb|AM91_&9V0Yu8jf z4!x9V=Xn4o%o_= z=c7U66jX`TH|f@-lW$PGwR()l#RuLv1{>|%B-8ABxrbzrE*dpXBE#AWhjWpmY1t~nA8Vg zz8?6$eGY#rey&>R02IBq55QOK%>S#r0bZ{HjaK_E{*UX%zMqWau=^!ij5F`m0l;^d z_`e6oP5d8=H>x@S>;sUUo!zy9_gkCsc{4bHC#Zb@0GkNYHPbctxx)V-|4=>N75lt} z^`9!fw_=f3LjIL`2Uy_#v}5mB@&GW6_*$_z0a~P?Zfh@Fp%*xA1D_Lh-orBR`I8o( zN0M3hk)Iz7aQ?CO{+}_9n0&!|jDDY4I0yZwQDQ9BqHGVr!3pt zmG~X-W^*dMcjQyL&A^jUhgBI3aXb2FCSG1$h<<{?R1Nbtcn*awS4y?nhxU>$P+!(0LH__YXB7FLla{5jM(Fu3 z*Q==(zqbfSB2MnF?nFq@1zpTO+(90I5SC}22hYGi7?HcNp6gmH#^dx0FBotf=#P5| z_4!9Ew(;EbD^}#o&}NkQzjV}-aRvJcM9BL%Wm$Y`$D>zZ_kJ&s!u139bo`X~JNO&{ z<|XH9YEUNxozjWEKF*g#a~AWMnX?h-onEm{9h;w5@|TSv&+_vcE@dA7K21f%WvkyZ z3BEM*X=fh~m}&J$%rFmTb6;D-?Og9a(#!ms&LAKU`aGUbou2biZiagPu=Q<0kT~6n z_lkMZXTReWIe)NV>IGUMvd6~#htV*Q`l+6<20RaJuP+cF{tw;i{uTUmxsF=J`)R4; zrRtooSmb#NnCH7}Mg7+*6(?o>8*Y%;g7^`iH`K-5iud0-{bBh3vc5XT#wJN*FoKA?@4 zxKanM)`S1Y+H(iM%fJP=74KK4KPm3N60f|!?w@||t#$wBfC~W5D0pw(|Avhs=4)}C zf&15MP)K-F-9O^S1f}l(kL&#_^^MTGTUE$9MB@IeL%j95i?l>_6N9`4?w(ixjz8ydvyTbkN2y%KkB>2Jbv`8twlI{8{B_x3Gq%9 z+@}chl^*~0SErq*yTW_Ryt7}Ed=yI^`vCw=Bk!8gQsLwLg27=gr!^-=Cm2^v`THB$ z7XUQtapIQf!d9w`TXS=ZtW(atG#}%%bmG_Wd(d|(&<{WKl;wt8I?4GHxqbDti;X4F z???S}mVb_ZO(+~!bjF7eK%IggqlLb}6)W_m0U**}!)ZzMm*Bo1QhAiBAEjFI0I+&c z#s9gU-=hPLiQ~a|qT>Fl<#M>4!k?-GK>QzZP5KAc{eu|wp1Oa~Fo^#{cF4AZ|1azQ zD|P=^pY|CP9IE*Lo4r@P2fMm@+JJW#zch}zH|6_Z!1$az5a1T?srxq_G?8DVnR{+C z>V6H|c6GupDj-iQtBC8fuAMxg7CY`M{uI4?G!mizL;PR$dx*Q@@&M=GRFt%5&pf&y z+BNt+$6Z>^r`^(?S+o^a^gCAGLVp;8!f)Dz`jYY`Im&#)XHpaO#Pj2kR^SMz=QrqnPh7wJ#{nbj4{+GvGeHqp z7@Fkra`{;7o%t1yVEdXo9zY*VQ+r2zypjC^!jXtlpI}He=unT)JRbD`?^ketE&CJ- zf)0HPR~J^?d#~x-0q|S#-Ry?Hslf%fV%@pkU^WNokLt`%dg&*>9=)%X=jrvPbrE-; z_xWV{xuNsqzo3qvI#=*_hngZT`mY@)TD|mhg)f-l=RR+_8lICj!}fIv`YbHZ%E}4w z_kNcP`e4ul$XEnlX4yaF_VNP#qr|o4U_j3}XVQIriT%ySZE_R0|HIj619=EW@yR~U zuS6im_XoNT&=tb(+jJV%2ad>XTKWMd^tY$Amo;o>d=ie{dk5{p#gKEJ)M_jUgNHBn(177u<{|KjN zL}^CB`CFTsX#4w@qFwLm{y(u^pB4;U!g~lmucYb!Fz8RpE%aP3VhcbqaNeMC5uiF#8u!4&o9Kw7{{1` zBYEV%c7!68^tZ!dd7Rfp&Nmu(-7a0artl$0hJ_B`|q=b2nL=c4?UyXCc$Rg$A}72rBmT2`JaZu&za_fR*vRo}&%jfME?a?vrn4M6F4?bKQ5RrWHDZ9LfVA5eq4$o9y?_@EE@H|_bvJ5BC=o@H`n;YOx)Kp z#CgbTAl}yN*I|G6|CeYr^F$}anI7gt&dy4}&5<`-=t|lI+_ZD}qO=n@cTKP)pSbwA zPOBqs{#ad&i^t=S%ucgzq)F@t0`dQj`>1=r)A7<$w1{;ei5;cec|3dDa-kcr)6pkg?qwdU z&%8Fsx_hZ^EX?)Sj(+EVovwl2Kl z%-IRsBuI_48-s_&c|KMD=&WU(&||iVCx}azLp5w4j$^(gj{F*a_k^`7jQPQVpPRk~ z{Qhj>vlZFRVOKD^6oRgQjVW87LkoF$;QL8MNpP^qV~`sfYy3Da`1!%s1E*^|zy8-Z zShq463z(6&tbZ~T)r-LW%@5?hNd13*McqIv^!y`D72ehZ`y5Yod$q0L0aRBvd8kwH zbWR8Ifa~nN?H9}a$p3Bp#jF3G-Mr3j{8_n;xOm0&@;$tsr6naLJpM1|<_+*VOh`98 z)G=s?58}916@5=^(r~&&I;~@#@a;Ac_M48}G@bSw_z2!az3J+K!e;1eG*MSg%GdeW z57xclssXOM!H@kJO)=CX z?R11Z#$U0n-&S50?Z*1Ras8aXcCAUI4nl{c8hC$7eX-<$J?(Txnj)OO9+V#=FT!); zg<0qfKtCY2564$8n)?QTr#IKQe4D9L?{+to0_V5qKmGL6tj|wN@aU?V(I~HDVXSNsxM_y#SE9wiBE-)j8}sb71E`aKbMEbH2fkYWhw%y953sya@QT#?pMUeh^>g5< z&&O;9g_s_6G(Z;sdHppx7g6t4`+ISyzYzF;JQA(p_Qp_%f5zG3@I8Dr3SHhJ$rZ0l zsm&}JF`4x|j@%^b{($#bT~_YJb&>&G6Nev11L!s!Uur_?@Au<-UERR`$cFmAntT8_ z*BQs(|Ib?ZqY>v%GS(bs{r_8jpP$w(3kLE6#xKn1t{&)d*vcnMiSxs~01q5}3WoM) zq3Y71(`z>q2P=O*_GRJ~ZrmvNsSclK%tt>p^XIunUDX*!w$5|!dGv#~rKbazM?Cmh zjfVZL3-G>Q!+jcmX-^6LTYqpeb_Vw&6qYVl0{0L3uMeFD?l8U}wu-<@&=y1{e_NyL zs4`)H9$&-_{Q^fc-smPjHmgpaXzSFmz8wBhVeRYV;}>>e{d8IW`EP+M88pejyLNXT zG3b)N0sMX-_A@W*_%#L9HEqzaRI6Zp?!yAJVqc0n&t8e7RP5Z@j{-S8vr&K`?tVvrN0jR zAG(eO8a2*VE%ARYSMwjLMLq!dDEmdFk{^Nkhtz|p{}PG+qs{01N*w>l@^awc%6jiu z#^uzH(J@x@$9Ru-y<_VdH$;X4Bu16gJ;(V!5F^|Bv^qU?mR!u=@Y^;{RK4yeLOSyrZ7qmQL26 zs?%J~>#0t&uA%_fot8QRyD*N*Zsy^Zplu-8P_>k_Ya&_%_jiIXWhR+eU7QW zj?EzMQF#E%mbkxY)amX(owf$T0bEaTI_>9RyVhnW5U<^4Z_=XL-Z?Uozu|KOrh_)W zF8MC#(7OwecLqPTxU{tV&ECt%V<#zf?iznwnnPa{?5^N^?@rWhyZ7ETKz&;c#w}(3 zpTCJZb>{KT-ekDw1A@c(vUU5=!T@m!@zY?T^M!=n&`ELzo^qGAXsre+nj=pi@^~(f}Ph#JLIcz~OB{BA+`F4CM+~auC?$2oP^m>8+yQ>RQYO{bZqklZU ztA&5I@hS2hckD<<9ud5e`9J(uK5q%AB;1AjvvrRK`O}oD`SJ$z6~c1pzw&wYYqe`Q zj`bUKqntMP3*lXS&NUv_Bk-Sm{)6M}r*dMhVSzjY^dtOB#^1PW;L-Frwlzk5DexC2 zVnRy~zgy-k@D#F&5)eO}0nacByocZO3-hB#=|5$P{p1BY>fFEj8F>x=a$#aM@qOEl zz4-q79i!4|53SL-CWC(DXhn1=8_Uf7^SQ z;Pq#meT!2bMF&8)_=W-gsKL-3^fpgBn+#nG)GKmHP2d$w*U0V)Pd1k8%w`?!+!%CP z;Kz>4Xkk<8Ck_qtXVd~A5&R$4cYbJH|HBNSij%p^F^pH=4=(8!ui*1&&bGN{l2%Q z#lyI2`}VC{soxdHcMb8N9jAr*{7vYiFixDoj`uqqY-8wJBqj0ps4Gjz#`%F?H^=Q@ z7%CZ`>$J>NMh@B79!c8Bg)N zls*7VfGzg{_{It^06G9ja8U<<_?pT`*y-pdo`=2wsQbr$ZpQHe>jTGCmTNw_Wu25D zbR*9~oAfYv0)l{k^T>zv->IYRzQdrog8rw-Cqy}I$eAz_pT6i#Y|exq_?oLS!aS^g z&v#7p6BkCr6SO5kqo4V#{QQeC=8LKidlWo93PBP2k5Y8-IP1M4s4M618|^M-I|JZ- zG4G^<5CMPh6toXk!p8JkFXK-O6ofbNPjh8K5tcx)-FFgM9`SDZ8KRuhVe~kI8(ThRlIKXFD zbODy)@gR?DR^H3HhxHK@@E^hcvU-JK?iX?Y!WAp}UUr;7ey3}F2!0}Q|M7|ORGwd; z)f2-06n=x6rzStZCVOUhKBM0rME?1t zX-j_ha=CIH7G6dE3w1O>GjMnGGdSV#FyAup)O|{xXu0nf>hNUhl%l@H44fHu!NUN=8u}30uQT9wiI;tPS}i$Y&-OUK9+d+#{%P0>-PQQeD5r%R zPGL2UQ=AR7F~29r@^!bz`!kFDf+VAV1$7fed_@X_qM##BI?XIZDq->7CNd8W_h(Mc ze}B0BsQCZB^&IDr-(8Pk1^oxWYXMP7&F?ZFnU3*-7RRCJ|I^P$e)dCk0Jato_eWhh z{+LJL^a}n@ePZ$pp7>kHDnocpC;~)QQWEGu&Pz+{zdVR z)ct##;g+I`vZ^@|j*JNWRj1QxIgRUAK+EyH7uE&>NiXs#lQr z?z>mRlF$98==-bj&F$<5(~@qeBd@qbKei2pNgRPcZN{*HI>f7RZKv%VkyZ?XG)KJZ^FF-{a9&Y}hG)~s6a zXOJHiy@+pcVQ*(ud`z{E05_waB`tqPy-eCxTKuzYldvE3#nEW){y-f7{BBtXAmLNd z0f74rK5?M;&{HLdcg`#Q6v;2fV^h2mpWb?ZKe!(N@qh3$3Rdv{Pu34WjpNV$i97%` z@1yVlAjD7npY_JeJb(n~1KbY(SLY+2h#T{1^#@SncBStIjsxA+t8|8*Lkb@N4Fgv4 z4vc@vLqZ1kg}IyXe#FE0Q|tVROOMShp*~89w>>Mk|MapyjyOr9@hLdJPLMV*52|gg zMjdvGJ@i^4=C{~~rz&3|{x$tV&$S-pt&3x$_cA}ZM{=Ct_o~Fb^z2UhjeBL|PT*AN z`yE}zuNH^FN5pqMl+ST(akjpU{+urw?x3Hw7@G|!xW8+vgBEX36K$WVN4N|>$N8Xim z?ms;@3A+C)b^l1KpiV)3pO)>-y8r3vPduTne-}D-p{#D}ZsaYs7!bC!bG+HA;O}E| z&?`gyOI%;{Vm{vg)PtEtS`6@4Q9oAdmSyPYLC@Y+oC*KCxVXB2I492&mVN;Iovfln zeOdrGXA$@j0{tJexdl41_#TZ(@fPSJ#RFyo^U08h(Vl@GFSl2T^&qnbzdlppTd(jc z;aAC$L|i)*astiRw|?~x18IKvF~fO%*QOEAYxUi$A3?p@`7fmJVg1(d&&LnZh6HU> z8|v$}jxo<=txZhJi!q-uJmVLL`!CD~#NEhq72v?Bdyb8`XUX9St?dyASfwm)31^gQN?>nAGJaWaN^@PC#?6!O+3jnaS zd;K8r?<>%2>z@rmudCZ)GAAcC^4$iZl~#`(Rbs!|q2Xh!W7i4&0orJt8}Y_T%R@_};L)D6ObOnH zIqhmJwK2YGL?Z#duL}WjhCG14#nL6tZxvd>pN4K)nDHNY(?K2L3Do^phh8{|xMo4@ z6KIDc{_Es-3la8D`|s=H;PqUF-rM+mAfNG4Ux$D=0`-Wk0bGxhmSn9VPJX1O$p`#m zbzz1_gShC5wYs{amE(xV9~xwwGdkL^Z584@j})`veYfNUX1+rk>wTbyzn_0bOxTR; zV4LqtT(GiSg&9Hssuf`@2@u? zZYIBBW^u1_oOy=^#@RyO-m&zphvK8lzKaP94EF6~u@!L!->KTq$ zl5(FKq@I7{qc!mIPg=FY8*dQ*pE@A`N5^)&FCeS5$&PmRJ5J+0OEa5*@?Nt3?z>Us zH!fMV@wcuK|Nn8x;ltpKTI-@0ze_y+N|;JE@J29| zwq6WrSodBo`mVhG2F=LUidxZf5}$G=Xo{ve=l(w@S34EmFicR6YG z{#)c{xIfnJpll%ipPLuVBmVCnv~MS#oT$%+4uId;(4-v+BOg{>;p<@DNxt9k5b=Fe zcbdR_Plo4j?k7&XCnlzaQ8(>!msK-=wzdzILG_ocWjjiWd4Bo1>4&CkE`Plmfh4cP z@X*pAZM9UV)P=;KHVm;orqL07S;hTNTDvTfA%l)Mvkd?yj|+P22IkEQB3~8uK`%4< z)@(m#tL9el2($#QFXHi)B{aG5^(wi*@&DnQOb8!0qvUt|LFd<9l`@ z8Rz$EY4vvU2gK}q7M)oCu;4{K|8!08n5nN7l|_q#KEH6FusJQ&pb-x^y+_X@Qv%$7 ztYB=+>Fsu=G;0%C{~n6X9YKAPbFUP|b%h>i#ne&O|2SSS;Cy#FO8T|BZ+X9BcS}Ct z`^X~#U;id}00Z-8Bagr7$yC(ecROW6Z${V!o&F!>zs&sMv4EhnB7b(N&!}Y`{*2%X zd9h!Vf9XW8p}s0G>odLLF3%-!USeb)G?fx2b;b82KH> z{{9m34+ckH$5VLH`tSF?7N8!%-o@-h@(slO^Qgnx=V(bu$>(vq>p~&&5A=y91FxU= zhb9y8{x!e5c#&3sfDq?PQnZfGk#|G5q`s56YZN!0a!wZ3P6ME(Kt)8J3WdvQDuOv*C#3g&(v zh*3}aUz?K+Rag$*fsg*5=Dr`@PkzAg*H}02cVsj@spb5o_+OzO|BO>-x)wAbzpWWu zoFx9=7=8uk|D>a?c+TD9+-!F?x`$A=XNP>k8g56190>9Lxk`s?8rNy>OpekQpwDD5 z@c0f38MRy5p&wr&-%Vb{rP-Fl-~rUu1&3Nv4;pI!GC%DLTY#He9{!7MK)+DuT)dUM zgfw|UVBO#sGFN|r_2#Rmo&g^Ky41GvQXco|LVZ8^8EaEbHuPzz`fs+)1=kLs?oTc+ z#r?7y0;8rv;2N*Z%s|h~!1xb!onNj0j0b(;fp27NEp8};pDQ_i8g9=Pn~jo}F*sBW zeXG@l!9c#5%jbhe9rOM>t_>T33RXoL>!#=z`>xI`;yJaSj!(#(PBR98r}sFFftf`S z*IU_fF^vwKh8U2pb!o6W#WJ~yzt{hu`%8rJQ9M+kTP7I<1gMP+5`LFA#n-^puVb#slt+9k0pEkWfEPvmo($T^m;ihT{Pm>tT;fR~5Bpgc))$P;fnS0C3r^NI zZYpwZ-(JV>XQLbf&kx_h82bWTw(NaWN^a}CY=LY;+Iiq}|BCICZ+ciYCk z6+S`dBg%446CY;%Kk`uu{?ELIx;}XTIIYBG{GZE#qu#V!UGLMgsRxmk@xKTE#|(A* ztow(~K^N`K=cO)R;VUek-|h1VYF;7iMBem6@qbb@*GE zCN4=_^Y-{Z^G+*q_{YQl`5fGg_ao2sA^5*~9X`xD>um*$hf=CaN(#Ua06u%@5bCZ) zZ(3U7yE>j%51jSFJHWWQg8QTX$;><};>!YB>Q(c1&=)`*km$vH@IIgqfVw!=<>Z2g z{&xerIz8fjFJWBhbVgp7swDou?R9?u<4XGcJoNL=fwkM?JKFgb=-U*aA8BUc>7U-6 z{kZ`JuO2757w}g6--*lj&($b(`VHl7 z8U5?pJuOYTqp(B5YUal}^=piN;{U<;QXP2#p}9sk;?{OU$ILW&0Q-$1bqhK>0!eFm z{6RSup#J|oLcDPq?+^QUelusg#(#_Tg6{RxiVgwpC%zwE?VqJ*u+Ph=5RP!Yk=UCv z0q_8-HPGWY*kUhtg?!8d1m@*1`FI)t2W@!H^u|EnQTFB2=vMK$ur0}M^26SGB^rXC z;IN>d3UT$9CteR<1JCZl`26Q`fd3~YeK~=6fBIi0?IrI(qj?>9C}n(ojQjxfC-}@R ze6N$fUV!%`^w=*Fq}B*@qs=O)|l6!s7&fL5o9o=l%2Ge>!JnIgj6O z*=;K(FXjAsO9FW-k9st^I}Z9C^YYT`#PiGI5l;`k-@*%#8hpo*p9u7^&OhYK$)2uh zf!@$U2fnwCKZ`fIvXKW~ow#Rz4cQq^_gUO0{-L~=k!3DDW&$b^Y~R?h<>GS z^mX}6&1SnH7;nt3-wZu1V;}MUjmP`%&!)elyAD3UbdB}}eGvYuQx6fLtHQ^+{`$O;z(yzZ0-7}7>tb5^mZO6HYgxZuN1Q() zQH$UEod&`68v6ohLO+9E)O1a4zrj!lzqQ;Ijxx@gyfB(f8$BjN_h6H~|9{W^6K%vO z_nij*t~bWvZ&W%o`eQq&3-H44W6&#@u8DLQN5EHbltq04*IV%OxOY0T^??A-Bcsmk z#&vL(?$}|Y-@6e2zk=W6#UOs~0{%|_o#Pwve}30gT$^zi#!c`7zG7$H|7mQ8-y!}U zGyw1bQtGL@PyC-a7nhR{z<3TYuF?m9`u^NM;Dsbwv=drl{Xafy1?qlo#sAf5>Hq{s zJMw(2Gx0NU|%DLMcikHQP!xUBL33Y*af zPnVLtg7+6Tf9XqK``XI%bd4R?>t-DQxDkjup_7gR&`*xOYV#xojDYT(4VI*k!3b?P+42M1G%H$N8bb?Gp1W!dKm>mxqqN+1y7zFhz5sOv71R8kM{}Pq6WfXWz=QnDNlRJzQsffyB(t-kpZO9=Fx*GH ze{paQdiO`x8w^I_3i83n%IdzydK8x=Xo=T1|Jrvi>qUfV>ZpHzeGvR}=Ft)onmd>$ zDwj7jkq@wVv9yHyJ2XD9mh)Y$0`hH7tT(5jJ|5ehEO%uPXOE*X0rM9}X4qF2JcEcd zM7uZ}i66o8A)!U!@kNBlBJ*C?WqI}p?5vbu!u+7L7z(k^LRa3v0FR@|AK1a;_4$J` z?~83b|DJWYALUZ?IHyNu&q_Rx7r}$%bx8Z_Z>Cv~HvC{4@Y>6kn3$rc-sddpQFz_! z%N;GulPxyRT};Auj|E4O4?kr|?J<54_&RX@h;rY8kjLJP`&Spv0FUE&)LSeKK`-BO z$GyHR<}2riFVfzNb2%JA`ZPf*Wv_IP4 z13p05y0FdlDtQ63!*`o;+}5cnWQf2E5K)+(1w20>4tHQ0`UI`R#P{)f3!L@|ksYc2(JQlC;0(BztH{cx+xERTfAQm2oc8FLL@HlEZSTof)~K)Gz=un?-3_Z zWBotJC*uFaA&LJ-@TcPcs%74oyebtRL0GvVR zM(Gbwi0>9=Cl!7`KLFO_zK;ihd~4dB8#nxC!Tr_axE25Zv~d5GIOY9y|Ii2eBX$4F zxP341e%4z8_xDO0Hr%Q51&I3tCMaI1`-k3t;s@#dpF6<&|KWB2e;WS(QF#Di_)o<} z4;$3y8P8Q=@z$b375@kB4;=}_mFzE#dj4hH|C8wZe^|Wo(eQu98{m=0w*ddgIdcoFAe1Dl2QgKTs`m7P}bJmm3qgwXuK4}4L zpUyb*lj#7!+yeOT_;%j3Li*yZZ~idI96mkI)YQdA=1Mz$fbmpx)=R zp8^kn{Q#DA0jL8I0PlhN04m=9VHR=sr`R7r#_s5vGAg;fn?|(Dy zKQ>3)AB#T{?hpB$4dhGbCnf^-KjYA%K$dahQ5XDb;9gA*X@d3JL!;lRWnOXQxV*?b z>5W&UpYprw%Qy<04m>lz_8%4h(jV!dza__8w8R60qoe-k;n##wmUIdJ)TGqtre8I? zXOEkBzs@M=FJn6H_jura;dy3%rz6yLf`8VHx_#7N!%q|6(E*49sK#~_9RL;YztsX~ zx}_h$a-Bc@D?HZlGx=U|Kg;%=`QRH}27kc@y*ujY*w8POHt8LUyb!0;-?8|;GObwj zXPe{nX^f+`VwK-~*T8ASJIvp%;QtsVZ0L5#d}T4~yI^c{y{Oy6Ky%jsEH-c#@+5rU zTfo>0iTfQRXi#jhzABe+WOo{X*S70s>6a4EB&_74*O501p8(_Y)eFa#^xeiHceY+X5k#RV`@(>Oif4; zcA=k))@X)K|CaVOk=Q)*CTo0)$g_yvtvF%g{(%7N>bA5ecPt|Rw544S9>Q+aMby=m zLe~KGMxw#EtMl3cPpGaD)ixNXS?7g3lO{Ef%l*k6zAdn$qx}I|K^Q{4RZ3NL_10<; z`H1u{?6BPdzQES4jj{-R9=(177K}K*fO>&$^lvNPM!u^~ww2TW4D^|DS*P!I)rG=V zJg1W6qCc;DJmgyie-&=<9QF8*_jh+^7VfkBTYTC7gEm?dzt^JvQ+e{cOJwo6m&Rp+J@2ZKFlr%bJ2qa_!bOvbgm4`JcrHpXwFXAOAS=rh;rnS*MFC1+@(!1p%MD149cSQK$M z`^UBE+b-a}v6PkAivI`V9N_ek|AF^Y42Zz_QO6H{$n%&6-55ORZuUPLVBBOh3g8=j)&^&hal&zjvDPK`89eKH}Y z|M+zt=iq!CylLp7mX=J54Mi(_?> z5F9YEzJI@e>AS?crRYxu+7kEQ4Y3}6x+_Q50$WyA8YOOzxO;|r{Zp>^=uXEGYhRzq z#Jp8Z)VC6c*K7QBNnoO%-c4fX-6JnBybFR2G;xyBSSo{x_EztczcS;n9clBhZq!z>l^X| zia!1q2P4~0JC9iWqk$eC2kP2^%OkH?sX<;1{mHc&O$zF4vUM8t*F0t2UbbyJ`4xx8 zUw&@dwW_E??CUyRlWCvq3K*zsIWpw$-3k7}FDeXKD?tQ9!$aEjNo zk3DeuP^g0VyG9c#$Zo!5z4-R8o*@roAs!tBe(&f@N=g)=3kqG{Kr8TV|BzhH`hQPT zV#?VAtp{>i{pg?S^!l`#1guvt_zQf*|HD4u{g^@wf~g!q@Yk%)12K-T6v5B=L90%NLV4ZOk2+B);C{ znYji%O}lUOE#T6poqatfoVlSs=ZiV0`vd4QC%_Jk=+3l=wMIz(_ zqyN~^w%nU*xyO3(Gb59#`S$Y9zMFI-S5QnpU>|` zD0~Ar*R->)!c)OIw2G+I&-d(Cv&Ztz9;mecLr+I-A#nfHGtQHoKNzlzZpQeqv@I@g zf-SLqXPo0kc7J9+&qJp-8gX8ZP)#I49zgZjSRLQ*ma*pVvkyRUy3b5Lz_(>rg~IbG zwYxZ8?AYf1+N#1%%iV$er*+7Wr}Sj^Q~}?}LEjJJ>)-ob{P$I;`^0x=i8yvRD#dlc z^HWlO-bLKMDYAQ(dj25@9`JW>A+OE)u|Qag6ZdZso@`>i{M%yv81u({fwcX!p^CXm zEOq#vTRTgfK=4&&opEA(`N^~QO#}Zw955JkRmgAneT~z29>Z}tUsp^1oLi>837z}NwgWrZPbQ}5wfM8d5?SQWK3;899tluyB!k;H?0nSiuUk82j zY3HPT2jaLh&bWUU)|+-}HG6lY0^dNHDe!UB|NmH)b8vrh$63#fI(&T3kr%gz>&`z* zo}oF-2z*8d9qsf4;yKq2ceD^MdTpk@=1u7E!!H8Q03J<-ANsp3c28Yd8FBw`G(K5a z4}F7y0Ta*T+TkYjT{G0?K43Zz9c)KPsz;vy@CM>J8MJ|Z`bRyE0kKs`sXF6)@i#-G zxUP<-zVg?0?K;Et*bU%2IXyApUq?G{L?Vw-cOQ@8PtJKW3*E@Ox8S=o zaVXEU8}Y6!eSQST``p`Tr1Q71ao3Fy&%+}ON6!P#T3Bi*n0wCK{QKCrZSJ|&X1H}< zqF%QYb>V!Vi(J-N-U9#79e+{B=V~Nq)Sd4=<3M;1e>BiJa^3IY_JTv#QHOfIw?zty z%JeTI5|?YWJ|}Vi9CM$tytFa?ZojHq`K$l&)4-*Qi%Sf(3QnbY1UMCNhJ;&jdGY{= z|568l%gL7~UZLXts-+G9m#a9bYKi~jH8!&TAFxJ{_&>@b-^Vw&9sbO5g>JdZ10ep- zJfONh{ZoZc@E-g>Esgd6aN`TC_2}b=KXrZL|HL(j|1&N(0sl{j@Fef9L=p9useuPk5vg`2Y6p+gIxUlWU1PsoUfAL>fpL zuZbtA^KWm(X58hsLHf4yD{-LrECh+7fw7eG*_#V`Tf z|J(tjLGip^J%BuXK6FRg^W+zyL$a%r@hQh4t!}h&3;LF94KHDQX|d<#no{oS+tu#( z3(mRTeGXi%4R`hJw2uQHBtI#>^y(zXVWT8+b=N>nyT{)M-M39e58?ei-;4U2J7VMHLE$lk z&Pqz{OD~N9&jZahi1uv|Xx~{3L_fJgApW!%I zS5sd_+`e!)_)X&b^>4YV&!bP~guDDQari?|AM4`$Xhaa_fb∋B+8gc~IE+i_tdd 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�O;D|7h%TBl7j{ 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%0A+b zf08inNA6s`{AI$ZKWN-OUXS9lqtpH8%QlcaBU_#xb8(lQF#f*HfoUp%qtjKnAs(-C zh$l$wsOSEI{QjwygTh~LF)Ym9P_J4=^gG@PW&itId(9Jo0;uv*=BMfp7idJT~6Pc%NCp z`UA%AjrXtS{zm_KrMHQnkM?x$fPN{p2l4a9f`YUBd(nSBB9u2s@+`QoyDPLKpD^Bc zb2TWwZx)n4^iVC&w=M8KkI7^_UohWJR6z~T?=9euk62e}5$(ydE6o~yKG^fwM+ZMu zlN|2P)fme%6T@)opzb2Ce_M(jnz{NtT9Sh{l-^S>V|{i}addi~w3xq7i=j%Dw=MEX zDnGg~O=&lEwGkf5$M17-|DnHs?hOB@B$tCfSjsQr_K^QAzA+k-qkle0(W@ie4E$cZ z!OQa>_*A*>l!<>2;>R_9<|ot-9Mi0=R3H5f=3Eb#M}GHT@}!a+>c`dX6ZxNUziYMr zI@ibjfL(AS0hLF4{mjMi{r@R(?>rRj6!Haen;V5c!vyVrAURq8K|YuC>-qZtzr{7C zyA@O){RMm4E?y^$&+}Bdna{BPz`Z4HB**x|9l!tmHi0odu$1*VoX_CSUqbTX^Zj-h z_ouf)15_WpMX(--`(%+{|2{+LWB7fm(0L%i;FEh`UCL^HZ56g@)F)4?NUfpD|AB zsHN$(TmIzX$$HcZWp&Z{+hi{)c!yLcZUg>ylA@#7ALGCfoviTN@Dib_?*~-5pzZk{sjv zTAg+tAGqH?7$3Msa?}@I`K;z7Vc_rV#~Q`&LB1c=-&srYK4?F*U^MG@qd`Ad+!vBa zzDXOO-CUyLcyIhYp*ml^kjv8(Zg}~9P#>6WTDc%ho*lG~uzh^tzcJlg(_WhYxGv6gS>UZvy)A{>VgFg7T`!&BH zc?`&{>L=0#9*PI%`96HSeN`-jc*OAgCvm@H#GG^kJ--F`Wxut-MmPre=RK>Lu>$PR zr~|)kC3z;qkI6c7atM!xd@xUjbj%N1O2DHet+10k2FAz3O@~;2#r|r}S+$zw@VsgL zZVzFUuPc=&6GngcosP5IpIIf82CB0tn@I~$Mf`MUJv&t#^+5o-_LkV;YL-5 zPR8>G?fJZEb*x{&ep_nho-Y2Lh2Y;mntYw@Er>T#erkpUxxAmYLOIb{#NQX~?Q3fW zn4i#JJ25En`h)&|pD~T~58zAXs!+O|+CzRXXj`;~F!G@kEAHn-`GKQz)Fem#&-~0G zh2zHV29_iLcPv`X;{)TnWqxtL1M36a(bUHJH{!e&e=f<9 zpM#$cb`nPY;omN~`F)V@J42yvlEeGN%}f^Y=T-3g^zqB4k{sJ>R|nZYfc}bOIi3$m zj^#Cr`hFRX)mKKYAdKh3mn=@1NBFC*2k2jz1PTGQhx$N7WE8(I+WRBy)>lZ5{F#z; z)=L=U1yj2xvcC=SznHeO{f+#)qG}GyQNIYzRq%R>`}x~n)VxLQVSHEjrTGU5qkeGs zqYVBY@O_l8tW~r9hvyM0*QN9P#qa(2^j|zo^{e3dwcgrT!mwMdy5r6}!}JxrpKS^2 z|F`SUsG)d%ah_syu}m8@mz7fcnXp@V-9NaJa16-p_U~tg_;BCR_-7fBezNBZN1Be09qBa>B^({@%K);kXDK(v0Ev zHSH4d=`DtgY}>o<8A)z2WN07Tf4G&f%UGzD6t%p*!EU`_)2ZV}NshnoQfCeKKkV-t zb~cz;-$FkBz2kj;ehcV-r8S`)R3G#=!y7MO;{MoMo^G(XKW!m7?jNLUzVmIuaJw`3 z|NeOSLD3&@Cu|VV^MDUhUu&;-rt(?Eo3yW*LXQ(x!1z#fXZZ*(g8cV&wc@-i#M@`rI%;|TEJlC)r=`7A9`DC7 zZD?nG$bx+Dn`|aI;?U8zcs^Kw-%pgK@$UosTxkxy6f4R%L;TLx#|R_ems+|u5XScM zx}`kA=-(eTC~G2&@wbcMb)$}VjsjPP1q29b_3YEwHx)2ik*~s@%5#MEf0r7}lk^dQSS=#n4s*mxEJFSxxj5Q0C zkzwa8G2i==uzd2j1eki#h*H<&j_g4HADJ3-G0s zm&tsH{4S3T@O(zxU4Q5cxGAP4hT21Zt<6c~=ObTUKO|#)estj`t@@>_?7u*LV2z`c zzb9gOV1VZf>Lbm*)r?)xUd<&puWx-IAMEt-d_=ka-CZ^GKFGJ~BCDOS3(gmMr8N>^ z{5`rRdp==!db;M2gV#6I4`QQ5K9h{>h1pYlA=bB0-w1kaGpIhEU;Oz5S)ITc+DP}s z2MNc(_p$aA^)Uv1shOZzC~$oC$xyPFFzo+meK(xEUOWT(pxb&Sn&ep};2)UUaD(t7 zh%YejlD$b7$J-J}5JvcRY@_45|kACS2>-Am6$|I@=SZhMC??jLw} zP2~BA`QIw+|Ik2kU=!My1PRe#h%~4EVdd9re84$AG`B%`WHhvIydFpE>d3L~3sl_%jr9%-aaV z{<~2&ZH|ZVKH&efvJLz^@IM%?`0ObphwMFujiDo~AELeQGZpanM}4MsL^RKTl-s}W zJwWv_9`8(4E%(ppLWkzOV@juxJ5r5*yD}s&oWD&?WDMu)Q?uM2_O~Hlht{v+`D+2b zPZ%Zfe24O?#&ba)U#LHXS`&DEgm_R@MYMB(p0^3|_Z&%nj-NM_Z!bqWM{?x5*_rBO z!nodlXTR9LL4NC!B>p|fmxjc({5_D54@5VVQGJjrpLuh+jWD)U-jF>UcLXH&S0$Cl_meuMBEn#A#;q%o#S+Hfr)abD zdWAUDBlZgscg0`)f_(GO-OW@V`TT;}&hLxA$EEZ0dW!wEq-6VfDv$QIXU4_lgi&rW z9CZo|``4xU5rl{01-{1ngzg6Y0tPwm zk>49fnt8oL{y%c`y|F^xocdN=el=n6AE_!!(=rHS`@Z@Po*$S`;l4=mdy(%K_ikYS zI^y+{RDVPDG5%07EjE%dtaordE6?9AyI%Ie{_Lc?M)CSsZCIe3@#jOF1kTV} zmpXVpAV1g6d7+Wy$lvNUB3=miIlDJ>&P{Uk-=DGz{zrd6XJg}JlDmwXw5QrTG6jbC zW~rl-Fuvcq%B9?&_NxliTXw2 za`z09!~1D%)@UPR;EO)V@)Tj<6T>rZXN$mv+L<%0D#GXwSQK}hzt@%$qv18zd)yz8 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 H;gM?nH&0thn8~r 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 D&!UH# literal 0 HcmV?d00001 diff --git a/Assets/racoon.bin b/Assets/racoon.bin new file mode 100644 index 0000000000000000000000000000000000000000..0a5272ad2acee2a89c641100b80b486f8179ed3f GIT binary patch literal 425120 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

    void UndoScriptInspectorChanges() const; - /// - /// Performs a redo for script inspector changes if it exists. - /// - void RedoScriptInspectorChanges() const; + /// + /// Performs a redo for script inspector changes if it exists. + /// + void RedoScriptInspectorChanges() const; /*-----------------------------------------------------------------------------*/ /* Static Utility Functions */ @@ -251,8 +251,8 @@ namespace SHADE CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; - CsFuncPtr csEditorUndo = nullptr; - CsFuncPtr csEditorRedo = nullptr; + CsFuncPtr csEditorUndo = nullptr; + CsFuncPtr csEditorRedo = nullptr; /*-----------------------------------------------------------------------------*/ /* Event Handler Functions */ diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index 7a3b1930..08e289cc 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -22,15 +22,15 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - bool UndoRedoStack::UndoActionPresent::get() - { - return commandStack->Count > 0 && latestActionIndex >= 0; - } + bool UndoRedoStack::UndoActionPresent::get() + { + return commandStack->Count > 0 && latestActionIndex >= 0; + } - bool UndoRedoStack::RedoActionPresent::get() - { + bool UndoRedoStack::RedoActionPresent::get() + { return latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1; - } + } void UndoRedoStack::Add(Command command) { @@ -47,7 +47,7 @@ namespace SHADE latestActionIndex = commandStack->Count - 1; } - void UndoRedoStack::Undo() + void UndoRedoStack::Undo() { if (!UndoActionPresent) return; @@ -60,10 +60,10 @@ namespace SHADE void UndoRedoStack::Redo() { if (!RedoActionPresent) - return; + return; - Command cmd = commandStack[latestActionIndex]; - cmd.Field->SetValue(cmd.Object, cmd.NewData); - ++latestActionIndex; + Command cmd = commandStack[latestActionIndex]; + cmd.Field->SetValue(cmd.Object, cmd.NewData); + ++latestActionIndex; } } From 1a14e5241b1fa12325aa45e4f4f6ce4f222dee9d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 1 Oct 2022 23:14:42 +0800 Subject: [PATCH 313/793] Added names for SHGraphicsSystem Routines --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 29 +++++++++++++++++++ .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +++ 2 files changed, 33 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index e4207c20..8e3c599b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -518,21 +518,50 @@ namespace SHADE { window = wind; } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - BeginRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHGraphicsSystem::BeginRoutine::BeginRoutine() + : SHSystemRoutine("Graphics System Frame Set Up", false) + {} void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept { reinterpret_cast(system)->BeginRender(); } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - RenderRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHGraphicsSystem::RenderRoutine::RenderRoutine() + : SHSystemRoutine("Graphics System Render", false) + {} void SHGraphicsSystem::RenderRoutine::Execute(double dt) noexcept { reinterpret_cast(system)->Run(dt); } + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - EndRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHGraphicsSystem::EndRoutine::EndRoutine() + : SHSystemRoutine("Graphics System Frame Clean Up", false) + {} + void SHGraphicsSystem::EndRoutine::Execute(double) noexcept { reinterpret_cast(system)->EndRender(); } + + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - BatcherDispatcherRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHGraphicsSystem::BatcherDispatcherRoutine::BatcherDispatcherRoutine() + : SHSystemRoutine("Graphics System Batcher Dispatcher", false) + {} + void SHGraphicsSystem::BatcherDispatcherRoutine::Execute(double) noexcept { auto& renderables = SHComponentManager::GetDense(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 10df44a5..3a392ac5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -69,21 +69,25 @@ namespace SHADE class SH_API BeginRoutine final : public SHSystemRoutine { public: + BeginRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API RenderRoutine final : public SHSystemRoutine { public: + RenderRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API EndRoutine final : public SHSystemRoutine { public: + EndRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine { public: + BatcherDispatcherRoutine(); virtual void Execute(double dt) noexcept override final; }; From 8e60d4b771d19a2c09e867d6a7bf909d3ad495ad Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 1 Oct 2022 23:42:54 +0800 Subject: [PATCH 314/793] Changed asserts to SHLOG related functions --- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 33 ++++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 16175578..bd34ed71 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -2,7 +2,6 @@ #include "SHFileSystem.h" #include "fileapi.h" #include -#include #include namespace SHADE @@ -27,8 +26,11 @@ namespace SHADE } auto const count = static_cast(folders[here]->subFolders.size()); - - assert(count < FOLDER_MAX_COUNT, "Max subfolders reached\n"); + + if (count >= FOLDER_MAX_COUNT) + { + SHLOG_ERROR("Max subfolder reached: {}\n", name); + } auto const location = static_cast(count); @@ -37,7 +39,10 @@ namespace SHADE return location; } - assert(folders.contains(here), "Folder creation location does not exist/invalid\n"); + if (!folders.contains(here)) + { + SHLOG_ERROR("Folder creation location does not exist/invalid: {}\n", here); + } auto const count = static_cast(folders[here]->subFolders.size()); @@ -45,7 +50,11 @@ namespace SHADE location <<= FOLDER_BIT_ALLOCATE; location |= count; - assert(count < FOLDER_MAX_COUNT, "Max subfolders reached\n"); + if (count >= FOLDER_MAX_COUNT) + { + SHLOG_ERROR("Max subfolder reached: {}\n", name); + } + CreateFolder(folders[0]->path, here, location, name); return location; @@ -53,7 +62,10 @@ namespace SHADE bool SHFileSystem::DeleteFolder(FolderPointer location) noexcept { - assert(folders.contains(location->id), "Delete target does not exist/invalid.\n"); + if (!folders.contains(location->id)) + { + SHLOG_ERROR("Delete target does not exist/invalid: {}\n", location->name); + } for (auto const& subFolder : folders[location->id]->subFolders) { @@ -116,10 +128,11 @@ namespace SHADE FolderPointer SHFileSystem::CreateFolder(FolderPath path, FolderLocation parent, FolderHandle location, FolderName name) noexcept { - assert( - CreateDirectoryA(path.c_str(), nullptr), - "Failed to create folder\n" - ); + + if (!CreateDirectoryA(path.c_str(), nullptr)) + { + SHLOG_ERROR("Failed to create folder: {}\n", path); + } folders[location] = std::make_unique(location, name); folders[location]->path = path; From 01f648ceb626ba8b6bec50c87198e380ac277b24 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 1 Oct 2022 23:43:00 +0800 Subject: [PATCH 315/793] Serialize/Deserialize [WIP] --- .../src/Serialization/SHSerialization.cpp | 100 +++++++++---- .../src/Serialization/SHSerialization.h | 3 +- .../Serialization/SHSerializationHelper.hpp | 136 ++++++++++++++---- 3 files changed, 185 insertions(+), 54 deletions(-) diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 926e4ff5..ee189f2c 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -7,21 +7,31 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "Scene/SHSceneManager.h" #include "Tools/SHException.h" +#include "Assets/SHAssetManager.h" +#include +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" namespace SHADE { void SHSerialization::SerializeSceneToFile(std::filesystem::path const& path) { - + YAML::Emitter out; + SerializeSceneToEmitter(out); + std::ofstream file(path.c_str()); + if (file.good()) + { + file << out.c_str(); + file.close(); + } } std::string SHSerialization::SerializeSceneToString() { YAML::Emitter out; SerializeSceneToEmitter(out); - return std::string(out.c_str()); + return std::basic_string(out.c_str()); } void SHSerialization::SerializeSceneToEmitter(YAML::Emitter& out) @@ -30,55 +40,82 @@ namespace SHADE auto root = sceneGraph.GetRoot(); SHASSERT(root != nullptr, "Root is null. Failed to serialize scene to node."); - - auto const& children = root->GetChildren(); - out << YAML::BeginDoc; - auto pred = [&out](SHSceneNode* node){out << SerializeEntityToNode(node);}; + auto const& children = root->GetChildren(); + out << YAML::BeginSeq; + + auto pred = [&out](SHSceneNode* node) {out << SerializeEntityToNode(node); }; sceneGraph.Traverse(pred); - //out << SerializeEntityToNode(child); - - out << YAML::EndDoc; + //out << SerializeEntityToNode(child); + + out << YAML::EndSeq; } static void DeserializeEntity(YAML::iterator& it, YAML::Node const& node, std::vector& createdEntities, EntityID parentEID = MAX_EID) { - if(!node[EIDNode]) + if (!node[EIDNode]) return; EntityID eid = node[EIDNode].as(); std::string name = "Default"; - if(node[EntityNameNode]) + if (node[EntityNameNode]) name = node[EntityNameNode].as(); //Compile component IDs const auto componentIDList = SHSerialization::GetComponentIDList(node[ComponentsNode]); eid = SHEntityManager::CreateEntity(componentIDList, eid, name, parentEID); createdEntities.push_back(eid); - if(node[NumberOfChildrenNode]) - { int numOfChildren = node[NumberOfChildrenNode].as(); - for(int i = 0; i < numOfChildren; ++i) + if (node[NumberOfChildrenNode]) + { + if(const int numOfChildren = node[NumberOfChildrenNode].as(); numOfChildren > 0) { - DeserializeEntity(it, *it, createdEntities, eid); ++it; + for (int i = 0; i < numOfChildren; ++i) + { + DeserializeEntity(it, (*it), createdEntities, eid); + if((i + 1) < numOfChildren) + ++it; + } } } } - void SHSerialization::DeserializeSceneFromFile(std::string const& fileData) + void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) { - YAML::Node entities = YAML::Load(fileData.c_str()); + //TODO:Shift to using XQ's FileIO + std::ifstream iFile; + iFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); + std::string fileContent = ""; + + try + { + // Open file + // Read file's buffer contents into streams + iFile.open(path); + std::stringstream fileStream; + fileStream << iFile.rdbuf(); + + fileContent = fileStream.str(); + + // Close file handler + iFile.close(); + } + catch (std::ifstream::failure e) + { + SHLOG_ERROR("Could not read file"); + } + YAML::Node entities = YAML::Load(fileContent); std::vector createdEntities{}; //Create Entities - for(auto it = entities.begin(); it != entities.end(); ++it) + for (auto it = entities.begin(); it != entities.end(); ++it) { DeserializeEntity(it, (*it), createdEntities); } //Initialize Entity - for(auto it = entities.begin(); it != entities.end(); ++it) + auto entityVecIt = createdEntities.begin(); + for (auto it = entities.begin(); it != entities.end(); ++it) { - //For each node, Deserialize component - //Recurse through properties + InitializeEntity(*it, *entityVecIt++); } } @@ -103,7 +140,7 @@ namespace SHADE node = YAML::Null; return node; } - + node.SetStyle(YAML::EmitterStyle::Block); node[EIDNode] = eid; node[EntityNameNode] = entity->name; node[IsActiveNode] = sceneNode->IsActive(); @@ -121,10 +158,10 @@ namespace SHADE } template, bool> = true> - std::optional GetComponentID(YAML::Node const & componentNode) + std::optional GetComponentID(YAML::Node const& componentNode) { - if(componentNode[rttr::type::get().get_name().data()]) - return {SHFamilyID::GetID()}; + if (componentNode[rttr::type::get().get_name().data()]) + return { SHFamilyID::GetID() }; else return std::nullopt; } @@ -134,9 +171,20 @@ namespace SHADE std::vector componentIDList; auto id = GetComponentID(componentsNode); - if(id.has_value()) + if (id.has_value()) + componentIDList.push_back(id.value()); + id = GetComponentID(componentsNode); + if (id.has_value()) componentIDList.push_back(id.value()); return componentIDList; } + + void SHSerialization::InitializeEntity(YAML::Node const& entityNode, EntityID const& eid) + { + auto componentsNode = entityNode[ComponentsNode]; + if(!componentsNode) + return; + SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + } } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index 022a01c4..8a57f036 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -28,7 +28,7 @@ namespace SHADE static void SerializeSceneToFile(std::filesystem::path const& path); static std::string SerializeSceneToString(); static void SerializeSceneToEmitter(YAML::Emitter& out); - static void DeserializeSceneFromFile(std::string const& fileData); + static void DeserializeSceneFromFile(std::filesystem::path const& path); static std::string SerializeEntityToString(); @@ -37,5 +37,6 @@ namespace SHADE static std::vector GetComponentIDList(YAML::Node const& componentsNode); private: + static void InitializeEntity(YAML::Node const& entityNode, EntityID const& eid); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index e702dd24..da98c885 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -5,6 +5,7 @@ #include +#include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" #include "Math/Vector/SHVec4.h" @@ -13,13 +14,13 @@ namespace SHADE { struct SHSerializationHelper { - template , bool> = true> + template , bool> = true> static std::string SerializeComponentToString(ComponentType* component) { return std::string(); } - template , bool> = true> + template , bool> = true> static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) { } @@ -28,7 +29,7 @@ namespace SHADE { YAML::Node node; auto varType = var.get_type(); - if(varType == rttr::type::get()) + if (varType == rttr::type::get()) { node.SetStyle(YAML::EmitterStyle::Flow); node["X"] = var.convert().x; @@ -36,44 +37,44 @@ namespace SHADE node["Z"] = var.convert().z; node["W"] = var.convert().w; } - else if(varType == rttr::type::get()) + else if (varType == rttr::type::get()) { node.SetStyle(YAML::EmitterStyle::Flow); node["X"] = var.convert().x; node["Y"] = var.convert().y; node["Z"] = var.convert().z; } - else if(varType == rttr::type::get()) + else if (varType == rttr::type::get()) { node.SetStyle(YAML::EmitterStyle::Flow); node["X"] = var.convert().x; node["Y"] = var.convert().y; } - else if(varType.is_arithmetic()) + else if (varType.is_arithmetic()) { bool ok = false; if (varType == rttr::type::get()) - node = var.to_bool(); + node = var.to_bool(); else if (varType == rttr::type::get()) - node = var.to_int8(&ok); + node = var.to_int8(&ok); else if (varType == rttr::type::get()) - node = var.to_int16(&ok); + node = var.to_int16(&ok); else if (varType == rttr::type::get()) - node = var.to_int32(&ok); + node = var.to_int32(&ok); else if (varType == rttr::type::get()) - node = var.to_int64(&ok); + node = var.to_int64(&ok); else if (varType == rttr::type::get()) - node = var.to_uint8(&ok); + node = var.to_uint8(&ok); else if (varType == rttr::type::get()) - node = var.to_uint16(&ok); + node = var.to_uint16(&ok); else if (varType == rttr::type::get()) - node = var.to_uint32(&ok); + node = var.to_uint32(&ok); else if (varType == rttr::type::get()) - node = var.to_uint64(&ok); + node = var.to_uint64(&ok); else if (varType == rttr::type::get()) - node = var.to_float(&ok); + node = var.to_float(&ok); else if (varType == rttr::type::get()) - node = var.to_double(&ok); + node = var.to_double(&ok); //else if (varType == rttr::type::get()) //same as uint8_t // node = var.to_uint8(); } @@ -87,18 +88,18 @@ namespace SHADE } else { - ok = false; - auto value = var.to_uint64(&ok); - if (ok) - node = value; - else - node = YAML::Null; + ok = false; + auto value = var.to_uint64(&ok); + if (ok) + node = value; + else + node = YAML::Null; } } else { auto properties = var.get_type().get_properties(); - for(auto property : properties) + for (auto property : properties) { node[property.get_name().data()] = RTTRToNode(property.get_value(var)); } @@ -106,17 +107,98 @@ namespace SHADE return node; } - template , bool> = true> + template , bool> = true> static YAML::Node SerializeComponentToNode(ComponentType* component) { YAML::Node node{}; - if(!component) - return node; + if (!component) + return node; auto componentType = rttr::type::get(); node = RTTRToNode(*component); return node; } + + template , bool> = true> + static void InitializeProperty(ComponentType* component, rttr::property const& prop, YAML::Node const& propertyNode) + { + auto propType = prop.get_type(); + if (propType == rttr::type::get()) + { + SHVec4 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as(), propertyNode["W"].as() }; + prop.set_value(component, vec); + } + else if (propType == rttr::type::get()) + { + SHVec3 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as() }; + prop.set_value(component, vec); + } + else if (propType == rttr::type::get()) + { + SHVec2 vec{ propertyNode["X"].as(), propertyNode["Y"].as() }; + prop.set_value(component, vec); + } + else if (propType.is_arithmetic()) + { + bool ok = false; + if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + else if (propType == rttr::type::get()) + prop.set_value(component, propertyNode.as()); + } + else if (propType.is_enumeration()) + { + auto enumAlign = prop.get_enumeration(); + prop.set_value(component, enumAlign.name_to_value(propertyNode.as())); + } + else + { + auto properties = propType.get_properties(); + for (auto property : properties) + { + InitializeProperty(component, property, propertyNode[property.get_name().data()]); + } + } + } + + template , bool> = true> + static void InitializeComponentFromNode(YAML::Node const& componentsNode, EntityID const& eid) + { + auto component = SHComponentManager::GetComponent_s(eid); + if (componentsNode.IsNull() && !component) + return; + auto rttrType = rttr::type::get(); + auto componentNode = componentsNode[rttrType.get_name().data()]; + if (componentsNode.IsNull()) + return; + auto properties = rttrType.get_properties(); + for (auto const& prop : properties) + { + if (componentNode[prop.get_name().data()]) + { + InitializeProperty(component, prop, componentNode[prop.get_name().data()]); + } + } + } + }; } From 77653ebde5940ac0707adad35162349ad43e5450 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 1 Oct 2022 23:56:45 +0800 Subject: [PATCH 316/793] add window isMinimized --- SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp | 6 ++++++ SHADE_Engine/src/Graphics/Windowing/SHWindow.h | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 4d8dae72..a4569c75 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -378,6 +378,12 @@ namespace SHADE { wndData.width = static_cast(size.cx); wndData.height = static_cast(size.cy); + + if (type == SIZE_MINIMIZED) + { + wndData.isMinimised = true; + } + for (auto const& entry : windowResizeCallbacks) { entry.second(static_cast(wndData.width), static_cast(wndData.height)); diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 1e08dcb0..8f15bb60 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -18,7 +18,7 @@ namespace SHADE }; struct WindowData - { + { unsigned x = 0; unsigned y = 0; @@ -42,7 +42,7 @@ namespace SHADE bool closable = true; bool minimizable = true; - + bool maximizable = true; //bool canFullscreen = true; @@ -56,11 +56,13 @@ namespace SHADE bool shadowEnabled = true; bool isVisible = true; - + bool isFullscreen = false; bool modal = false; + bool isMinimised = false; + std::wstring title = L"SHADE ENGINE"; std::wstring name = L"SHADEEngineApp"; @@ -103,7 +105,7 @@ namespace SHADE void SetMousePosition(unsigned x, unsigned y); //unsigned GetBGColor(); - + void SetBGColor(unsigned color); void Minimize(); @@ -163,6 +165,7 @@ namespace SHADE void OnSize(UINT msg, UINT type, SIZE size); void OnPosChange(LPWINDOWPOS pos); void OnPaint(HDC hdc, LPPAINTSTRUCT paint); + bool IsMinimized() const { return wndData.isMinimised; } }; static SHWindowMap windowMap; static SHWindow* windowBeingCreated = nullptr; From e2b86545bb8482c95d2f90f457e1a6d253bfbb14 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sat, 1 Oct 2022 23:57:08 +0800 Subject: [PATCH 317/793] Window resize working --- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 +- .../Graphics/Framebuffer/SHVkFramebuffer.cpp | 45 +++++++++++++++++++ .../Graphics/Framebuffer/SHVkFramebuffer.h | 2 + .../src/Graphics/Images/SHVkImage.cpp | 5 ++- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 18 +++++++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 + .../MiddleEnd/Interface/SHViewport.cpp | 12 +++++ .../Graphics/MiddleEnd/Interface/SHViewport.h | 6 +++ .../Graphics/RenderGraph/SHRenderGraph.cpp | 14 +++--- .../src/Graphics/RenderGraph/SHRenderGraph.h | 2 +- .../RenderGraph/SHRenderGraphNode.cpp | 23 ++++++++++ .../RenderGraph/SHRenderGraphResource.cpp | 9 +++- .../RenderGraph/SHRenderGraphResource.h | 2 +- .../Graphics/Renderpass/SHVkRenderpass.cpp | 27 +++++++++++ .../src/Graphics/Renderpass/SHVkRenderpass.h | 2 + 16 files changed, 158 insertions(+), 17 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 6daa3645..5eee8cac 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -76,8 +76,8 @@ namespace Sandbox // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = { 0.05f, 0.05f, 0.05f }; - constexpr int NUM_ROWS = 100; - constexpr int NUM_COLS = 100; + constexpr int NUM_ROWS = 10; + constexpr int NUM_COLS = 10; static const SHVec3 TEST_OBJ_SPACING = { 0.05f, 0.05f, 0.05f }; static const SHVec3 TEST_OBJ_START_POS = { - (NUM_COLS / 2 * TEST_OBJ_SPACING.x ) + 1.0f, -2.0f, -1.0f }; diff --git a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.cpp b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.cpp index 1386134f..76e627d3 100644 --- a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.cpp +++ b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.cpp @@ -98,6 +98,51 @@ namespace SHADE return *this; } + void SHVkFramebuffer::HandleResize(Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept + { + width = inWidth; + height = inHeight; + + for (auto& attachment : attachments) + { + // Not sure if its an error to pass in diff dimension images. + if (attachment->GetParentImage()->GetWidth() != (*attachments.begin())->GetParentImage()->GetWidth() || attachment->GetParentImage()->GetHeight() != (*attachments.begin())->GetParentImage()->GetHeight()) + { + SHLOG_ERROR("Dimensions of images not same as each other. Cannot create framebuffer."); + return; + } + } + + std::vector vkAttachments(attachments.size()); + + uint32_t i = 0; + for(auto const& attachment : attachments) + { + vkAttachments[i] = attachment->GetImageView(); + ++i; + } + + vk::FramebufferCreateInfo createInfo + { + .renderPass = renderpassHdl->GetVkRenderpass(), + .attachmentCount = static_cast(vkAttachments.size()), + .pAttachments = vkAttachments.data(), + .width = width, + .height = height, + .layers = 1 // TODO: Find out why this is 1 + }; + + if (auto result = logicalDeviceHdl->GetVkLogicalDevice().createFramebuffer(&createInfo, nullptr, &vkFramebuffer); result != vk::Result::eSuccess) + { + SHVulkanDebugUtil::ReportVkError(result, "Failed to create framebuffer. "); + return; + } + else + { + SHVulkanDebugUtil::ReportVkSuccess("Successfully created framebuffer. "); + } + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h index fa9161e8..47bfcf99 100644 --- a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h +++ b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h @@ -37,6 +37,8 @@ namespace SHADE SHVkFramebuffer(SHVkFramebuffer&& rhs) noexcept; SHVkFramebuffer& operator=(SHVkFramebuffer&& rhs) noexcept; + void HandleResize (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; + /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index ed539a6c..00cc31bf 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -293,10 +293,13 @@ namespace SHADE barrier.subresourceRange.layerCount = layerCount; } - void SHVkImage::HandleResizeFramebufferImage(void) noexcept + void SHVkImage::HandleResizeFramebufferImage(uint32_t newWidth, uint32_t newHeight) noexcept { vmaDestroyImage(*vmaAllocator, vkImage, alloc); + width = newWidth; + height = newHeight; + CreateFramebufferImage(); } diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index b23d7bd4..51b71b26 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -137,7 +137,7 @@ namespace SHADE Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; void TransferToDeviceResource (Handle cmdBufferHdl) noexcept; void PrepareImageTransitionInfo (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; - void HandleResizeFramebufferImage(void) noexcept; + void HandleResizeFramebufferImage(uint32_t newWidth, uint32_t newHeight) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index e4207c20..979f8d40 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -67,6 +67,9 @@ namespace SHADE // Register callback to notify render context upon a window resize window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height) { + if (width == 0 || height == 0) + return; + renderContext.SetIsResized(true); }); @@ -116,8 +119,8 @@ namespace SHADE screenCamera = resourceManager.Create(); screenCamera->SetLookAt(SHVec3(0.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 1.0f), SHVec3(0.0f, 1.0f, 0.0f)); screenCamera->SetOrthographic(static_cast(windowDims.first), static_cast(windowDims.second), 0.01f, 100.0f); + worldCamera = resourceManager.Create(); - //worldCamera->SetLookAt(SHVec3(1.0f, 0.0f, -1.0f), SHVec3(0.0f, 0.0f, 2.0f), SHVec3(0.0f, 1.0f, 0.0f)); worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, 0.0f), SHVec3(0.0f, 0.0f, -2.0f), SHVec3(0.0f, 1.0f, 0.0f)); worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); @@ -125,7 +128,7 @@ namespace SHADE defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); // Get render graph from default viewport world renderer - auto worldRenderGraph = resourceManager.Create(); + worldRenderGraph = resourceManager.Create(); std::vector> renderContextCmdPools{swapchain->GetNumImages()}; for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) @@ -249,6 +252,10 @@ namespace SHADE // Begin recording the command buffer currentCmdBuffer->BeginRecording(); + uint32_t w = viewports[vpIndex]->GetWidth(); + uint32_t h = viewports[vpIndex]->GetHeight(); + currentCmdBuffer->SetViewportScissor (static_cast(w), static_cast(h), w, h); + currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout()); // Bind all the buffers required for meshes @@ -512,6 +519,13 @@ namespace SHADE swapchain->Resize(surface, windowDims.first, windowDims.second); renderContext.HandleResize(); + + worldRenderGraph->HandleResize(windowDims.first, windowDims.second); + + defaultViewport->SetWidth(windowDims.first); + defaultViewport->SetHeight(windowDims.second); + + worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); } void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 10df44a5..1dddaeb1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -316,5 +316,7 @@ namespace SHADE // Temp Materials Handle defaultMaterial; + + Handle worldRenderGraph; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index 25c5bca2..d6eea3d7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -73,4 +73,16 @@ namespace SHADE iter->Free(); renderers.erase(iter); } + + void SHViewport::SetWidth(uint32_t w) noexcept + { + viewport.width = w; + } + + void SHViewport::SetHeight(uint32_t h) noexcept + { + viewport.height = h; + + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index d97d62ce..ce992f77 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -62,6 +62,12 @@ namespace SHADE Handle AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); void RemoveRenderer(Handle renderer); + /*-----------------------------------------------------------------------------*/ + /* Setters */ + /*-----------------------------------------------------------------------------*/ + void SetWidth(uint32_t w) noexcept; + void SetHeight (uint32_t h) noexcept; + /*-----------------------------------------------------------------------------*/ /* Getters */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 27a1d604..cad6a78e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -46,7 +46,7 @@ namespace SHADE if (w == static_cast(-1) && h == static_cast(-1)) { w = swapchainHdl->GetSwapchainImage(0)->GetWidth(); - w = swapchainHdl->GetSwapchainImage(0)->GetHeight(); + h = swapchainHdl->GetSwapchainImage(0)->GetHeight(); format = swapchainHdl->GetSurfaceFormatKHR().format; } @@ -465,9 +465,6 @@ namespace SHADE // better way to manage these void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept { - // TODO: DON'T HARDCODE THIS - cmdBuffer->SetViewportScissor(1920.0f, 1080.0f, 1920, 1080); - for (auto& node : nodes) node->Execute(cmdBuffer, descPool, frameIndex); } @@ -480,13 +477,16 @@ namespace SHADE } } - void SHRenderGraph::HandleResize(void) noexcept + void SHRenderGraph::HandleResize(uint32_t newWidth, uint32_t newHeight) noexcept { // resize resources for (auto& [name, resource]: graphResources) - resource->HandleResize(); - + resource->HandleResize(newWidth, newHeight); + for (auto& node : nodes) + { + node->HandleResize(); + } } Handle SHRenderGraph::GetNode(std::string const& nodeName) const noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 83aeeb2c..a3140a4f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -80,7 +80,7 @@ namespace SHADE void Generate (void) noexcept; void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; void FinaliseBatch(uint32_t frameIndex, Handle descPool); - void HandleResize (void) noexcept; + void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 551e90fc..05232af3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -3,6 +3,7 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Images/SHVkImageView.h" #include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "SHRenderGraphResource.h" #include "SHSubpass.h" @@ -58,7 +59,29 @@ namespace SHADE void SHRenderGraphNode::HandleResize(void) noexcept { + renderpass->HandleResize(); + for (uint32_t i = 0; i < framebuffers.size(); ++i) + { + std::vector> imageViews(attResources.size()); + uint32_t fbWidth = std::numeric_limits::max(); + uint32_t fbHeight = std::numeric_limits::max(); + + for (uint32_t j = 0; j < attResources.size(); ++j) + { + uint32_t imageViewIndex = (attResources[j]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) ? i : 0; + imageViews[j] = attResources[j]->imageViews[imageViewIndex]; + + // We want the minimum dimensions for the framebuffer because the image attachments referenced cannot have dimensions smaller than the framebuffer's + if (fbWidth > attResources[j]->width) + fbWidth = attResources[j]->width; + if (fbHeight > attResources[j]->height) + fbHeight = attResources[j]->height; + } + + + framebuffers[i]->HandleResize(renderpass, imageViews, fbWidth, fbHeight); + } } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 72dd557f..cc881867 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -146,6 +146,7 @@ namespace SHADE , width{ rhs.width } , height{ rhs.height } , mipLevels{ rhs.mipLevels } + , imageAspectFlags{ rhs.imageAspectFlags } { } @@ -176,6 +177,7 @@ namespace SHADE width = rhs.width; height = rhs.height; mipLevels = rhs.mipLevels; + imageAspectFlags = rhs.imageAspectFlags; return *this; } @@ -193,8 +195,11 @@ namespace SHADE } - void SHRenderGraphResource::HandleResize(void) noexcept + void SHRenderGraphResource::HandleResize(uint32_t newWidth, uint32_t newHeight) noexcept { + width = newWidth; + height = newHeight; + if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) { // prepare image view details @@ -211,7 +216,7 @@ namespace SHADE for (uint32_t i = 0; i < images.size(); ++i) { - images[i]->HandleResizeFramebufferImage(); + images[i]->HandleResizeFramebufferImage(width, height); imageViews[i]->ViewNewImage(images[i], viewDetails); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index 741acdc0..ebb699d8 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -70,7 +70,7 @@ namespace SHADE SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; - void HandleResize (void) noexcept; + void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp index 349c507e..fee23f13 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp @@ -227,6 +227,7 @@ namespace SHADE , vkSubpassDeps{ std::move(rhs.vkSubpassDeps) } , clearColors{ std::move(rhs.clearColors) } , vkAttachmentDescriptions{ std::move(rhs.vkAttachmentDescriptions) } + , numAttDescs{rhs.numAttDescs} { rhs.vkRenderpass = VK_NULL_HANDLE; } @@ -243,6 +244,7 @@ namespace SHADE vkSubpassDeps = std::move(rhs.vkSubpassDeps); clearColors = std::move(rhs.clearColors); vkAttachmentDescriptions = std::move(rhs.vkAttachmentDescriptions); + numAttDescs = std::move(rhs.numAttDescs); rhs.vkRenderpass = VK_NULL_HANDLE; @@ -255,6 +257,31 @@ namespace SHADE } + void SHVkRenderpass::HandleResize(void) noexcept + { + logicalDeviceHdl->GetVkLogicalDevice().destroyRenderPass(vkRenderpass, nullptr); + + vk::RenderPassCreateInfo renderPassCreateInfo{}; + + renderPassCreateInfo.attachmentCount = static_cast(vkAttachmentDescriptions.size()); + renderPassCreateInfo.pAttachments = vkAttachmentDescriptions.data(); + renderPassCreateInfo.subpassCount = static_cast(vkSubpassDescriptions.size()); + renderPassCreateInfo.pSubpasses = vkSubpassDescriptions.data(); + renderPassCreateInfo.dependencyCount = static_cast(vkSubpassDeps.size()); + renderPassCreateInfo.pDependencies = vkSubpassDeps.data(); + + + if (auto result = logicalDeviceHdl->GetVkLogicalDevice().createRenderPass(&renderPassCreateInfo, nullptr, &vkRenderpass); result != vk::Result::eSuccess) + { + SHVulkanDebugUtil::ReportVkError(result, "Failed to create Renderpass. "); + } + else + { + SHVulkanDebugUtil::ReportVkSuccess("Successfully created Renderpass. "); + } + + } + vk::RenderPass SHVkRenderpass::GetVkRenderpass(void) const noexcept { return vkRenderpass; diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index a2799eb7..70a04bbf 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -55,6 +55,8 @@ namespace SHADE SHVkRenderpass(SHVkRenderpass&& rhs) noexcept; SHVkRenderpass& operator=(SHVkRenderpass&& rhs) noexcept; + void HandleResize (void) noexcept; + /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ From 61e353164bc3fe9aed6f1df550d2c5743054104e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 1 Oct 2022 23:57:26 +0800 Subject: [PATCH 318/793] Fixed all asset related warnings --- .../src/Assets/Asset Types/SHTextureAsset.h | 6 +++-- .../src/Assets/Libraries/SHMeshLoader.cpp | 4 +-- .../src/Assets/Libraries/SHTextureLoader.cpp | 8 +++--- SHADE_Engine/src/Assets/SHAssetManager.cpp | 26 ++++++++++--------- .../src/Assets/SHAssetMetaHandler.cpp | 2 +- .../MiddleEnd/Textures/SHTextureLibrary.h | 2 +- 6 files changed, 26 insertions(+), 22 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index 634d9a9a..07cebea9 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -17,7 +17,8 @@ namespace SHADE SHTexture::PixelChannel const * pixelData; SHTextureAsset() - : numBytes{ 0 }, + : compiled{ false }, + numBytes{ 0 }, width{ 0 }, height{ 0 }, format{ SHTexture::TextureFormat::eUndefined }, @@ -25,7 +26,8 @@ namespace SHADE {} SHTextureAsset(SHTextureAsset const& rhs) - : numBytes{ rhs.numBytes }, + : compiled{ false }, + numBytes{ rhs.numBytes }, width{ rhs.width }, height{ rhs.height }, format{ rhs.format }, diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index b77d429d..3a5fb9ec 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -91,8 +91,8 @@ namespace SHADE } } - result.header.vertexCount = result.vertexPosition.size(); - result.header.indexCount = result.indices.size(); + result.header.vertexCount = static_cast(result.vertexPosition.size()); + result.header.indexCount = static_cast(result.indices.size()); result.header.meshName = mesh.mName.C_Str(); return result; diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 1047cdc6..47501d42 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -83,10 +83,10 @@ namespace SHADE std::vector mipOff(file.GetMipCount()); - for (auto i{0}; i < file.GetMipCount(); ++i) + for (size_t i{0}; i < file.GetMipCount(); ++i) { - mipOff[i] = totalBytes; - totalBytes += file.GetImageData(i, 0)->m_memSlicePitch; + mipOff[i] = static_cast(totalBytes); + totalBytes += file.GetImageData(static_cast(i), 0)->m_memSlicePitch; } SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; @@ -94,7 +94,7 @@ namespace SHADE //pixel = std::move(reinterpret_cast(file.GetDDSData())); asset.compiled = false; - asset.numBytes = totalBytes; + asset.numBytes = static_cast(totalBytes); asset.width = file.GetWidth(); asset.height = file.GetHeight(); asset.format = ddsLoaderToVkFormat(file.GetFormat(), true); diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 989cd2ad..430b8c79 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -72,12 +72,13 @@ namespace SHADE AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str()); std::string folder; - switch (type) - { - default: - //TODO:ASSERT UNSUPPORTED FILE TYPE - return std::filesystem::path(); - } + //TODO Implement asset type generation + //switch (type) + //{ + //default: + // //TODO:ASSERT UNSUPPORTED FILE TYPE + // return std::filesystem::path(); + //} return std::filesystem::path(ASSET_ROOT + folder + path.filename().string()); } @@ -108,12 +109,13 @@ namespace SHADE meta.type = type; std::string folder; - switch (type) - { - default: - folder = ""; - break; - } + //TODO implement folder choosing + //switch (type) + //{ + //default: + // folder = ""; + // break; + //} AssetPath path{ ASSET_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; SHAssetMetaHandler::WriteMetaData(meta); diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 35d167d2..6554a3e4 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -122,7 +122,7 @@ namespace SHADE break; default: - void; + break; } metaFile.close(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index 660d93eb..c2eb85ec 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -37,7 +37,7 @@ namespace SHADE class SHVkDescriptorSetLayout; class SHVkDescriptorSetGroup; class SHVkSampler; - class SHTextureAsset; + struct SHTextureAsset; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ From 40bcea133d1089c2e060afdeda20d1b977901b0e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 2 Oct 2022 00:09:38 +0800 Subject: [PATCH 319/793] Changed texture index to 0 for both racoons --- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index ffecdf95..3b277e6c 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -118,7 +118,7 @@ namespace Sandbox renderable.SetMaterial(customMat); renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); @@ -159,7 +159,7 @@ namespace Sandbox renderableShowcase.SetMaterial(customMat); renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 1); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); From 64d1c2ab2e0e07e27fd9bb129029dd1a23553b6d Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 2 Oct 2022 00:47:26 +0800 Subject: [PATCH 320/793] Minimize is now working --- SHADE_Engine/premake5.lua | 6 ++--- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 25 +++++++++++++++++++ .../MiddleEnd/PerFrame/SHRenderContext.cpp | 5 ++++ .../MiddleEnd/PerFrame/SHRenderContext.h | 1 + .../src/Graphics/Windowing/SHWindow.cpp | 2 ++ .../src/Graphics/Windowing/SHWindow.h | 2 +- SHADE_Managed/premake5.lua | 5 ++++ 7 files changed, 42 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index f11ccf79..d90d69e3 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -156,8 +156,8 @@ project "SHADE_Engine" links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} excludes { - "%{prj.location}/src/Editor/**.cpp", - "%{prj.location}/src/Editor/**.h", - "%{prj.location}/src/Editor/**.hpp", +-- "%{prj.location}/src/Editor/**.cpp", +-- "%{prj.location}/src/Editor/**.h", +-- "%{prj.location}/src/Editor/**.hpp", } links{"fmodstudio_vc.lib", "fmod_vc.lib"} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7aad2206..5751e7b0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -213,6 +213,15 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::Run(double) noexcept { + if (window->IsMinimized()) + return; + + if (renderContext.GetResized()) + { + return; + } + + // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); uint32_t frameIndex = renderContext.GetCurrentFrame(); @@ -335,6 +344,9 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::BeginRender() { + if (window->IsMinimized()) + return; + // Finalise all batches for (auto vp : viewports) for (auto renderer : vp->GetRenderers()) @@ -381,6 +393,16 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::EndRender() { + if (window->IsMinimized()) + return; + + if (renderContext.GetResized()) + { + return; + } + + + const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); auto& currFrameData = renderContext.GetCurrentFrameData(); @@ -513,6 +535,9 @@ namespace SHADE void SHGraphicsSystem::HandleResize(void) noexcept { + if (window->IsMinimized()) + return; + auto windowDims = window->GetWindowSize(); // Resize the swapchain diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp index f31653a8..4953447b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp @@ -197,6 +197,11 @@ namespace SHADE return currentFrame; } + bool SHRenderContext::GetResized(void) noexcept + { + return isResized; + } + bool SHRenderContext::GetResizeAndReset(void) noexcept { bool b = isResized; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h index 04cea4e4..afdbef2d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h @@ -56,6 +56,7 @@ namespace SHADE SHPerFrameData& GetCurrentFrameData(void) noexcept; SHPerFrameData& GetFrameData (uint32_t index) noexcept; uint32_t GetCurrentFrame (void) const noexcept; + bool GetResized(void) noexcept; bool GetResizeAndReset (void) noexcept; }; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index a4569c75..2477b111 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -383,6 +383,8 @@ namespace SHADE { wndData.isMinimised = true; } + else + wndData.isMinimised = false; for (auto const& entry : windowResizeCallbacks) { diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 8f15bb60..9dcaedd9 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -125,6 +125,7 @@ namespace SHADE CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); + bool IsMinimized() const { return wndData.isMinimised; } protected: static LRESULT CALLBACK WndProcStatic(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); @@ -165,7 +166,6 @@ namespace SHADE void OnSize(UINT msg, UINT type, SIZE size); void OnPosChange(LPWINDOWPOS pos); void OnPaint(HDC hdc, LPPAINTSTRUCT paint); - bool IsMinimized() const { return wndData.isMinimised; } }; static SHWindowMap windowMap; static SHWindow* windowBeingCreated = nullptr; diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index a7b20144..d9a47975 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -79,3 +79,8 @@ project "SHADE_Managed" optimize "On" defines{"_RELEASE"} links{"librttr_core.lib"} + + filter "configurations:Publish" + optimize "On" + defines{"_RELEASE"} + links{"librttr_core.lib"} From 201ce17a407dd61a0bedc2eb3b24d183c6f39625 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 2 Oct 2022 00:56:12 +0800 Subject: [PATCH 321/793] Fixed validation errors when closing the app --- SHADE_Application/src/Application/SBApplication.cpp | 3 +++ .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 7 ++++++- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8abc341b..d0bf544d 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -136,6 +136,9 @@ namespace Sandbox SHADE::SHSystemManager::RunRoutines(false, 0.016f); } + + // Finish all graphics jobs first + graphicsSystem->AwaitGraphicsExecution(); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 5751e7b0..fc02b994 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -552,12 +552,17 @@ namespace SHADE worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); } + + void SHGraphicsSystem::AwaitGraphicsExecution() + { + device->WaitIdle(); + } void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept { window = wind; } - + /*-----------------------------------------------------------------------------------*/ /* System Routine Functions - BeginRoutine */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index a835b1bb..6ecb13f0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -251,6 +251,7 @@ namespace SHADE void BuildTextures(); void HandleResize(void) noexcept; + void AwaitGraphicsExecution(); /*-----------------------------------------------------------------------------*/ /* Setters */ From 9e8b4414d10e1fd7fb2cd89524f35301db6752c5 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 2 Oct 2022 01:00:07 +0800 Subject: [PATCH 322/793] add window close callback --- .../src/Graphics/Windowing/SHWindow.cpp | 21 +++++++++++++++++++ .../src/Graphics/Windowing/SHWindow.h | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 2477b111..1688d348 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -272,6 +272,17 @@ namespace SHADE windowResizeCallbacks.erase(callbackid); } + SHWindow::CALLBACKID SHWindow::RegisterWindowCloseCallback(WindowResizeCallbackFn windowCloseCallback) + { + windowCloseCallbacks.try_emplace(windowResizeCallbackCount, windowCloseCallback); + return windowCloseCallbackCount++; + } + + void SHWindow::UnregisterWindowCloseCallback(CALLBACKID const& callbackid) + { + windowCloseCallbacks.erase(callbackid); + } + LRESULT SHWindow::WndProcStatic(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { auto window = windowMap.GetWindow(hwnd); @@ -307,6 +318,8 @@ namespace SHADE case WM_CREATE: OnCreate(hwnd, reinterpret_cast(wparam)); break; + case WM_CLOSE: + case WM_DESTROY: OnDestroy(); return 0; @@ -365,6 +378,14 @@ namespace SHADE } + void SHADE::SHWindow::OnClose() + { + for (const auto& callbackFn : windowCloseCallbacks | std::views::values) + { + callbackFn(); + } + } + void SHWindow::OnDestroy() { this->Destroy(); diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 9dcaedd9..b1c1067d 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -75,6 +75,7 @@ namespace SHADE public: using SHVec2 = std::pair; typedef std::function WindowResizeCallbackFn; + typedef std::function WindowCloseCallbackFn; typedef uint16_t CALLBACKID; SHWindow(); @@ -125,6 +126,8 @@ namespace SHADE CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); + CALLBACKID RegisterWindowCloseCallback(WindowResizeCallbackFn); + void UnregisterWindowCloseCallback(CALLBACKID const& callbackid); bool IsMinimized() const { return wndData.isMinimised; } protected: @@ -157,10 +160,13 @@ namespace SHADE HFONT font; std::unordered_map windowResizeCallbacks; + std::unordered_map windowCloseCallbacks; CALLBACKID windowResizeCallbackCount{}; + CALLBACKID windowCloseCallbackCount{}; //TODO: Shift to events abstraction void OnCreate(HWND hwnd, LPCREATESTRUCT create_struct); + void OnClose(); void OnDestroy(); //void OnFileDrop(HDROP drop); void OnSize(UINT msg, UINT type, SIZE size); From 9fabb7d672b95c75997fbb77d727c6dc39bf869a Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 2 Oct 2022 01:13:04 +0800 Subject: [PATCH 323/793] Window can close properly (with the exception of scene graph dtor crash) --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 13 +++++++++---- .../Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp | 10 ++++++++++ .../Graphics/MiddleEnd/PerFrame/SHRenderContext.h | 7 +++++-- SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp | 3 ++- SHADE_Engine/src/Graphics/Windowing/SHWindow.h | 2 +- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index fc02b994..8aec5a83 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -73,6 +73,11 @@ namespace SHADE renderContext.SetIsResized(true); }); + window->RegisterWindowCloseCallback([&](void) + { + renderContext.SetWindowIsDead(true); + } + ); // Create graphics queue graphicsQueue = device->GetQueue(SH_Q_FAM::GRAPHICS, 0); transferQueue = device->GetQueue(SH_Q_FAM::TRANSFER, 0); @@ -213,7 +218,7 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::Run(double) noexcept { - if (window->IsMinimized()) + if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; if (renderContext.GetResized()) @@ -344,7 +349,7 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::BeginRender() { - if (window->IsMinimized()) + if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; // Finalise all batches @@ -393,7 +398,7 @@ namespace SHADE /***************************************************************************/ void SHGraphicsSystem::EndRender() { - if (window->IsMinimized()) + if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; if (renderContext.GetResized()) @@ -535,7 +540,7 @@ namespace SHADE void SHGraphicsSystem::HandleResize(void) noexcept { - if (window->IsMinimized()) + if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; auto windowDims = window->GetWindowSize(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp index 4953447b..0ac7013a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp @@ -168,6 +168,11 @@ namespace SHADE isResized = resized; } + void SHRenderContext::SetWindowIsDead(bool dead) noexcept + { + windowIsDead = dead; + } + /***************************************************************************/ /*! @@ -209,4 +214,9 @@ namespace SHADE return b; } + bool SHRenderContext::GetWindowIsDead(void) const noexcept + { + return windowIsDead; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h index afdbef2d..bf186922 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.h @@ -36,6 +36,7 @@ namespace SHADE uint32_t currentFrame; bool isResized{ false }; + bool windowIsDead {false}; public: SHRenderContext(void) noexcept; @@ -51,13 +52,15 @@ namespace SHADE bool WaitForFence (void) noexcept; void ResetFence (void) noexcept; - void SetIsResized (bool resized) noexcept; + void SetIsResized (bool resized) noexcept; + void SetWindowIsDead (bool dead) noexcept; SHPerFrameData& GetCurrentFrameData(void) noexcept; SHPerFrameData& GetFrameData (uint32_t index) noexcept; uint32_t GetCurrentFrame (void) const noexcept; - bool GetResized(void) noexcept; + bool GetResized (void) noexcept; bool GetResizeAndReset (void) noexcept; + bool GetWindowIsDead (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 1688d348..f4ae3d7e 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -272,7 +272,7 @@ namespace SHADE windowResizeCallbacks.erase(callbackid); } - SHWindow::CALLBACKID SHWindow::RegisterWindowCloseCallback(WindowResizeCallbackFn windowCloseCallback) + SHWindow::CALLBACKID SHWindow::RegisterWindowCloseCallback(WindowCloseCallbackFn windowCloseCallback) { windowCloseCallbacks.try_emplace(windowResizeCallbackCount, windowCloseCallback); return windowCloseCallbackCount++; @@ -388,6 +388,7 @@ namespace SHADE void SHWindow::OnDestroy() { + OnClose(); this->Destroy(); } diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index b1c1067d..0a180285 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -126,7 +126,7 @@ namespace SHADE CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); - CALLBACKID RegisterWindowCloseCallback(WindowResizeCallbackFn); + CALLBACKID RegisterWindowCloseCallback(WindowCloseCallbackFn); void UnregisterWindowCloseCallback(CALLBACKID const& callbackid); bool IsMinimized() const { return wndData.isMinimised; } From cfa07e9b3b201238063fc5fb26e13793bb3e7a7e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 2 Oct 2022 01:58:24 +0800 Subject: [PATCH 324/793] Temp fix for SceneGraph crash --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index da2dcffd..3fe85809 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -90,10 +90,15 @@ namespace SHADE #endif // Go through the map and release all the nodes - for (auto* node : entityNodeMap | std::views::values) - ReleaseNode(node); + for (auto*& node : entityNodeMap | std::views::values) + { + delete node; + node = nullptr; + } - delete root; + entityNodeMap.clear(); + + //delete root; #ifdef _DEBUG SHLOG_INFO("Scene Graph Destroyed Successfully!") From e5df98aaa6341429bac49436278370308dfb64a4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 2 Oct 2022 01:59:56 +0800 Subject: [PATCH 325/793] Added missing move assignment and extra check for command buffer destructor --- .../src/Graphics/Commands/SHVkCommandBuffer.cpp | 2 +- .../src/Graphics/Commands/SHVkCommandPool.cpp | 2 -- .../src/Graphics/Devices/SHVkLogicalDevice.cpp | 16 ++++++++++++++++ .../src/Graphics/Devices/SHVkLogicalDevice.h | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index eb65598c..9ebbd227 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -24,7 +24,7 @@ namespace SHADE /***************************************************************************/ SHVkCommandBuffer::~SHVkCommandBuffer(void) noexcept { - if (vkCommandBuffer) + if (vkCommandBuffer && parentPool) parentPool->GetLogicalDevice()->GetVkLogicalDevice().freeCommandBuffers(parentPool->GetVkCommandPool(), commandBufferCount, &vkCommandBuffer); } diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp index 881ee998..e1470898 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp @@ -102,8 +102,6 @@ namespace SHADE logicalDeviceHdl = rhs.logicalDeviceHdl; transient = rhs.transient; - static_cast&>(*this) = static_cast&>(rhs); - rhs.vkCommandPool = VK_NULL_HANDLE; return *this; diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 766a27c6..3f8aa239 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -251,6 +251,22 @@ namespace SHADE vkLogicalDevice.destroy(nullptr); } + SHVkLogicalDevice& SHVkLogicalDevice::operator=(SHVkLogicalDevice&& rhs) noexcept + { + if (this == &rhs) + return *this; + + vkLogicalDevice = std::move (rhs.vkLogicalDevice); + queueFamilyIndices = std::move (rhs.queueFamilyIndices); + vmaAllocator = rhs.vmaAllocator; + nonDedicatedBestIndex = 0; + parentPhysicalDeviceHdl = rhs.parentPhysicalDeviceHdl; + + rhs.vkLogicalDevice = VK_NULL_HANDLE; + + return *this; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 1272f68f..5c400e02 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -115,7 +115,7 @@ namespace SHADE ~SHVkLogicalDevice (void) noexcept; SHVkLogicalDevice& operator= (SHVkLogicalDevice const& rhs) noexcept = default; - SHVkLogicalDevice& operator= (SHVkLogicalDevice&& rhs) noexcept = default; + SHVkLogicalDevice& operator= (SHVkLogicalDevice&& rhs) noexcept; /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER VARIABLES */ From 4771fbfb762f413a9b35934c3861c60b135d9c71 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 2 Oct 2022 02:28:50 +0800 Subject: [PATCH 326/793] WIP --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 ++ .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h | 1 - .../src/Graphics/MiddleEnd/Interface/SHRenderer.cpp | 8 ++++++++ .../src/Graphics/MiddleEnd/Interface/SHRenderer.h | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 8aec5a83..14768108 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -325,6 +325,8 @@ namespace SHADE void SHGraphicsSystem::Exit(void) { + //worldRenderer-> + graphicsCmdPool.Free(); renderContext.Destroy(); graphicsQueue.Free(); swapchain.Free(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 6ecb13f0..c89e6ebc 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -286,7 +286,6 @@ namespace SHADE Handle transferQueue; Handle descPool; Handle graphicsCmdPool; - Handle transferCmdPool; Handle transferCmdBuffer; Handle graphicsTexCmdBuffer; SHRenderContext renderContext; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 84ac3ee2..14af56ee 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -49,6 +49,14 @@ namespace SHADE cameraDescriptorSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA); } + SHRenderer::~SHRenderer(void) + { + //for (auto& cmdBuffer : commandBuffers) + //{ + // cmdBuffer.Free(); + //} + } + /*-----------------------------------------------------------------------------------*/ /* Camera Registration */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 5e72da85..0feea840 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -65,6 +65,7 @@ namespace SHADE /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ SHRenderer(Handle logicalDevice, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle viewport, Handle renderGraph); + ~SHRenderer(void); /*-----------------------------------------------------------------------------*/ /* Camera Registration */ From 45514ac77e2fb599f7e2bc940b6fbf819a1c5f2f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 2 Oct 2022 03:06:13 +0800 Subject: [PATCH 327/793] Fixed warnings and errors --- .../src/Graphics/Devices/SHVkLogicalDevice.cpp | 2 +- .../src/Graphics/MiddleEnd/Batching/SHBatch.cpp | 4 ++-- .../src/Graphics/MiddleEnd/Interface/SHCamera.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 17 ++++------------- .../Graphics/MiddleEnd/Interface/SHMaterial.h | 2 +- .../Graphics/MiddleEnd/Interface/SHViewport.cpp | 4 ++-- .../Graphics/MiddleEnd/Interface/SHViewport.h | 4 ++-- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 8 ++++---- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 2 +- SHADE_Engine/src/Resource/ResourceLibrary.cpp | 4 ++-- SHADE_Engine/src/Resource/ResourceLibrary.h | 2 +- 11 files changed, 21 insertions(+), 30 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 3f8aa239..4f4f94a4 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -92,7 +92,7 @@ namespace SHADE //uint32_t minBuffer if (alignmentSize > 0) { - alignedSize = (alignedSize + alignmentSize - 1) & ~(alignmentSize - 1); + alignedSize = (alignedSize + static_cast(alignmentSize) - 1) & ~(alignmentSize - 1); } return alignedSize; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index b1cd2cd3..181c1f22 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -249,7 +249,7 @@ namespace SHADE if (!EMPTY_MAT_PROPS) { singleMatPropSize = SHADER_INFO->GetBytesRequired(); - singleMatPropAlignedSize = device->PadSSBOSize(singleMatPropSize); + singleMatPropAlignedSize = device->PadSSBOSize(static_cast(singleMatPropSize)); matPropTotalBytes = numTotalElements * singleMatPropAlignedSize; if (matPropsDataSize < matPropTotalBytes) { @@ -386,7 +386,7 @@ namespace SHADE SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, bufferList, - 0, matPropsDataSize + 0, static_cast(matPropsDataSize) ); matPropsDescSet[frameIndex]->UpdateDescriptorSetBuffer ( diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h index c54f29ed..3a945109 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h @@ -69,7 +69,7 @@ namespace SHADE SHMatrix inverseViewMatrix; SHMatrix inverseProjMatrix; SHMatrix inverseVpMatrix; - bool isDirty; + bool isDirty = true; /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 14768108..6957aa93 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -266,8 +266,8 @@ namespace SHADE // Begin recording the command buffer currentCmdBuffer->BeginRecording(); - uint32_t w = viewports[vpIndex]->GetWidth(); - uint32_t h = viewports[vpIndex]->GetHeight(); + uint32_t w = static_cast(viewports[vpIndex]->GetWidth()); + uint32_t h = static_cast(viewports[vpIndex]->GetHeight()); currentCmdBuffer->SetViewportScissor (static_cast(w), static_cast(h), w, h); currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout()); @@ -325,15 +325,6 @@ namespace SHADE void SHGraphicsSystem::Exit(void) { - //worldRenderer-> - graphicsCmdPool.Free(); - renderContext.Destroy(); - graphicsQueue.Free(); - swapchain.Free(); - surface.Free(); - device.Free(); - - SHVkInstance::Destroy(); } /*---------------------------------------------------------------------------------*/ @@ -554,8 +545,8 @@ namespace SHADE worldRenderGraph->HandleResize(windowDims.first, windowDims.second); - defaultViewport->SetWidth(windowDims.first); - defaultViewport->SetHeight(windowDims.second); + defaultViewport->SetWidth(static_cast(windowDims.first)); + defaultViewport->SetHeight(static_cast(windowDims.second)); worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h index 692d857f..348efb07 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h @@ -63,7 +63,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ Handle pipeline; std::unique_ptr propMemory; - Byte propMemorySize; + Byte propMemorySize = 0; /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index d6eea3d7..dc534a49 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -74,12 +74,12 @@ namespace SHADE renderers.erase(iter); } - void SHViewport::SetWidth(uint32_t w) noexcept + void SHViewport::SetWidth(float w) noexcept { viewport.width = w; } - void SHViewport::SetHeight(uint32_t h) noexcept + void SHViewport::SetHeight(float h) noexcept { viewport.height = h; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index ce992f77..221dbe7e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -65,8 +65,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Setters */ /*-----------------------------------------------------------------------------*/ - void SetWidth(uint32_t w) noexcept; - void SetHeight (uint32_t h) noexcept; + void SetWidth(float w) noexcept; + void SetHeight (float h) noexcept; /*-----------------------------------------------------------------------------*/ /* Getters */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index 2080265b..be181beb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -196,12 +196,12 @@ namespace SHADE static SHMeshData meshData = Cube(); return meshLibrary.AddMesh ( - meshData.VertexPositions.size(), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), meshData.VertexNormals.data(), - meshData.Indices.size(), + static_cast(meshData.Indices.size()), meshData.Indices.data() ); } @@ -211,12 +211,12 @@ namespace SHADE static SHMeshData meshData = Cube(); return gfxSystem.AddMesh ( - meshData.VertexPositions.size(), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), meshData.VertexNormals.data(), - meshData.Indices.size(), + static_cast(meshData.Indices.size()), meshData.Indices.data() ); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 6a7439e5..5c315ff6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -149,7 +149,7 @@ namespace SHADE { texOrder.emplace_back(job.TextureHandle); combinedImageSamplers.emplace_back(std::make_tuple(job.TextureHandle->ImageView, job.Sampler, vk::ImageLayout::eShaderReadOnlyOptimal)); - job.TextureHandle->TextureArrayIndex = texOrder.size() - 1; + job.TextureHandle->TextureArrayIndex = static_cast(texOrder.size()) - 1U; } addJobs.clear(); diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.cpp b/SHADE_Engine/src/Resource/ResourceLibrary.cpp index 5a3ad9fe..b215b591 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.cpp +++ b/SHADE_Engine/src/Resource/ResourceLibrary.cpp @@ -8,9 +8,9 @@ namespace SHADE ResourceManager::~ResourceManager() { // Delete all resources libraries - for (const auto& deleter : deleters) + for (auto iter = deleters.rbegin(); iter != deleters.rend(); ++iter) { - deleter(); + (*iter)(); } deleters.clear(); } diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.h b/SHADE_Engine/src/Resource/ResourceLibrary.h index 4588b9fe..a5bf0a67 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.h +++ b/SHADE_Engine/src/Resource/ResourceLibrary.h @@ -118,7 +118,7 @@ namespace SHADE /// Handle to the resource object. /// Read-only reference to the resource object. template - const T& Get(Handle handle) const; + const T& Get(Handle handle) const; private: /*-----------------------------------------------------------------------------*/ From 0dba60f9f11aaf5c1553b8f175b3e734b2b31aab Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 2 Oct 2022 03:09:09 +0800 Subject: [PATCH 328/793] Small fix --- .../src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index e50e717f..e842df47 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -208,7 +208,7 @@ namespace SHADE BindingAndSetHash bsHash = SHVkUtil::GenBindingSetHash(set, binding); // to index a set - uint32_t setIndex = setIndexing[bsHash]; + uint32_t setIndex = setIndexing[set]; // to index a write for a binding uint32_t writeInfoIndex = updater.writeHashMap[bsHash]; @@ -233,7 +233,7 @@ namespace SHADE BindingAndSetHash bsHash = SHVkUtil::GenBindingSetHash(set, binding); // to index a set - uint32_t setIndex = setIndexing[bsHash]; + uint32_t setIndex = setIndexing[set]; // to index a write for a binding uint32_t writeInfoIndex = updater.writeHashMap[bsHash]; From 0e518c52a953da2023a4fef789ff175ea89dd565 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 2 Oct 2022 04:22:32 +0800 Subject: [PATCH 329/793] Fixed bug when SceneGraph is destroyed --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index da2dcffd..60f0794d 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -312,6 +312,11 @@ namespace SHADE if (parentNode == nullptr) { SHLOG_WARNING("Removing Entity {}'s parent", entityID) + + if (parent) + parent->RemoveChild(this); + + return; } // Handle self assignment From db0b61d16f4ee77754ca9a57db0913df88797e14 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 2 Oct 2022 10:56:13 +0800 Subject: [PATCH 330/793] Reflect RB Enumeration Add RB to inspector view --- .../Inspector/SHEditorInspector.cpp | 21 ++++++++++++------- .../Components/SHRigidBodyComponent.cpp | 7 +++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 35836dc2..3d00ac4b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -18,6 +18,8 @@ #include "ECS_Base/Managers/SHSystemManager.h" #include "AudioSystem/SHAudioSystem.h" +#include "Physics/Components/SHRigidBodyComponent.h" +#include "Physics/Components/SHColliderComponent.h" namespace SHADE { @@ -70,23 +72,28 @@ namespace SHADE { DrawComponent(renderableComponent); } - if(auto testComponent = SHComponentManager::GetComponent_s(eid)) + if(auto colliderComponent = SHComponentManager::GetComponent_s(eid)) { - DrawComponent(testComponent); + DrawComponent(colliderComponent); } + if(auto rigidbodyComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(rigidbodyComponent); + } + ImGui::Separator(); + // Render Scripts + SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->RenderScriptsInInspector(eid); ImGui::Separator(); if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { DrawAddComponentButton(eid); DrawAddComponentButton(eid); - DrawAddComponentButton(eid); + DrawAddComponentButton(eid); + DrawAddComponentButton(eid); ImGui::EndMenu(); } - // Render Scripts - SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); - scriptEngine->RenderScriptsInInspector(eid); - } ImGui::End(); } diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index e2cd1e4b..5f961de4 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -390,6 +390,13 @@ RTTR_REGISTRATION using namespace SHADE; using namespace rttr; + registration::enumeration("RigidBody Type") + ( + value("Static", SHRigidBodyComponent::Type::STATIC), + value("Dynamic", SHRigidBodyComponent::Type::DYNAMIC), + value("Kinematic", SHRigidBodyComponent::Type::KINEMATIC) + ); + registration::class_("RigidBody Component") .property("Type" , &SHRigidBodyComponent::GetType , &SHRigidBodyComponent::SetType ) .property("Mass" , &SHRigidBodyComponent::GetMass , &SHRigidBodyComponent::SetMass ) From 7c4a9ca004ad951d9bd0c81a0075d296e6754373 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 10 Oct 2022 18:07:21 +0800 Subject: [PATCH 331/793] Added conversions for shade math to reactphysics math --- SHADE_Engine/src/Math/SHQuaternion.cpp | 18 ++++++ SHADE_Engine/src/Math/SHQuaternion.h | 23 +++++-- SHADE_Engine/src/Math/Vector/SHVec2.cpp | 9 +++ SHADE_Engine/src/Math/Vector/SHVec2.h | 16 ++++- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 14 +++++ SHADE_Engine/src/Math/Vector/SHVec3.h | 59 ++++++++++-------- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 23 ++----- SHADE_Engine/src/Physics/SHPhysicsObject.h | 3 - SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 64 ++++---------------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 14 ++--- SHADE_Managed/premake5.lua | 3 +- 11 files changed, 133 insertions(+), 113 deletions(-) diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index a6428d30..8463a7c2 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -67,6 +67,19 @@ namespace SHADE XMStoreFloat4(this, XMQuaternionRotationMatrix(M)); } + SHQuaternion::SHQuaternion(const reactphysics3d::Vector3& rp3dEuler) noexcept + : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) + { + const SHVec3& SHADE_VEC{ rp3dEuler }; + + const XMVECTOR V = XMLoadFloat3(&SHADE_VEC); + XMStoreFloat4(this, XMQuaternionRotationRollPitchYawFromVector(V)); + } + + SHQuaternion::SHQuaternion(const reactphysics3d::Quaternion& rp3dQuat) noexcept + : XMFLOAT4( rp3dQuat.x, rp3dQuat.y, rp3dQuat.z, rp3dQuat.w ) + {} + /*-----------------------------------------------------------------------------------*/ /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -176,6 +189,11 @@ namespace SHADE return XMQuaternionNotEqual(Q1, Q2); } + SHQuaternion::operator reactphysics3d::Quaternion() const noexcept + { + return reactphysics3d::Quaternion{ x, y, z, w }; + } + SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept { return rhs * lhs; diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index 61b55ef9..01452cef 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -11,6 +11,8 @@ #pragma once #include +#include + #include // Project Headers @@ -46,12 +48,17 @@ namespace SHADE SHQuaternion (const SHQuaternion& rhs) = default; SHQuaternion (SHQuaternion&& rhs) = default; - SHQuaternion () noexcept; - SHQuaternion (float x, float y, float z, float w) noexcept; - SHQuaternion (float yaw, float pitch, float roll) noexcept; - SHQuaternion (const SHVec3& eulerAngles) noexcept; - SHQuaternion (const SHVec3& axis, float angleInRad) noexcept; - SHQuaternion (const SHMatrix& rotationMatrix) noexcept; + SHQuaternion () noexcept; + SHQuaternion (float x, float y, float z, float w) noexcept; + SHQuaternion (float yaw, float pitch, float roll) noexcept; + SHQuaternion (const SHVec3& eulerAngles) noexcept; + SHQuaternion (const SHVec3& axis, float angleInRad) noexcept; + SHQuaternion (const SHMatrix& rotationMatrix) noexcept; + + // Conversion from other math types + + SHQuaternion (const reactphysics3d::Vector3& rp3dEuler) noexcept; + SHQuaternion (const reactphysics3d::Quaternion& rp3dQuat) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -76,6 +83,10 @@ namespace SHADE [[nodiscard]] bool operator== (const SHQuaternion& rhs) const noexcept; [[nodiscard]] bool operator!= (const SHQuaternion& rhs) const noexcept; + // Conversion to other math types used by SHADE + + operator reactphysics3d::Quaternion () const noexcept; + /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.cpp b/SHADE_Engine/src/Math/Vector/SHVec2.cpp index 545492cb..c417a1b2 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec2.cpp @@ -46,6 +46,10 @@ namespace SHADE : XMFLOAT2( _x, _y ) {} + SHVec2::SHVec2(const reactphysics3d::Vector2& rp3dVec2) noexcept + : XMFLOAT2( rp3dVec2.x, rp3dVec2.y ) + {} + /*-----------------------------------------------------------------------------------*/ /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -213,6 +217,11 @@ namespace SHADE } } + SHVec2::operator reactphysics3d::Vector2() const noexcept + { + return reactphysics3d::Vector2{ x, y }; + } + SHVec2 operator* (float lhs, const SHVec2& rhs) noexcept { SHVec2 result; diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index 17642126..5f2f50e2 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -11,6 +11,8 @@ #pragma once #include +#include + #include #include @@ -52,9 +54,13 @@ namespace SHADE SHVec2 (SHVec2&& rhs) = default; ~SHVec2 () = default; - SHVec2 () noexcept; - SHVec2 (float n) noexcept; - SHVec2 (float x, float y) noexcept; + SHVec2 () noexcept; + SHVec2 (float n) noexcept; + SHVec2 (float x, float y) noexcept; + + // Conversion from other math types to SHADE + + SHVec2 (const reactphysics3d::Vector2& rp3dVec2) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -86,6 +92,10 @@ namespace SHADE [[nodiscard]] float operator[] (int index) const; [[nodiscard]] float operator[] (size_t index) const; + // Conversion to other math types used by SHADE + + operator reactphysics3d::Vector2 () const noexcept; + /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 1bcb47b3..2d86276b 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -51,6 +51,10 @@ namespace SHADE : XMFLOAT3( _x, _y, _z ) {} + SHVec3::SHVec3(const reactphysics3d::Vector3& rp3dVec3) noexcept + : XMFLOAT3( rp3dVec3.x, rp3dVec3.y, rp3dVec3.z ) + {} + /*-----------------------------------------------------------------------------------*/ /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -223,6 +227,16 @@ namespace SHADE } } + SHVec3::operator reactphysics3d::Vector3() const noexcept + { + return reactphysics3d::Vector3{ x, y , z }; + } + + SHVec3::operator reactphysics3d::Quaternion() const noexcept + { + return reactphysics3d::Quaternion::fromEulerAngles(x, y, z); + } + SHVec3 operator* (float lhs, const SHVec3& rhs) noexcept { SHVec3 result; diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index cc0e043e..03a3578f 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -11,6 +11,9 @@ #pragma once #include +#include +#include + #include #include @@ -57,40 +60,48 @@ namespace SHADE SHVec3 (SHVec3&& rhs) = default; ~SHVec3 () = default; - SHVec3 () noexcept; - SHVec3 (float n) noexcept; - SHVec3 (float x, float y, float z) noexcept; + SHVec3 () noexcept; + SHVec3 (float n) noexcept; + SHVec3 (float x, float y, float z) noexcept; + + // Conversion from other math types to SHADE + + SHVec3 (const reactphysics3d::Vector3& rp3dVec3) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHVec3& operator= (const SHVec3& rhs) = default; - SHVec3& operator= (SHVec3&& rhs) = default; + SHVec3& operator= (const SHVec3& rhs) = default; + SHVec3& operator= (SHVec3&& rhs) = default; - SHVec3& operator+= (const SHVec3& rhs) noexcept; - SHVec3& operator-= (const SHVec3& rhs) noexcept; - SHVec3& operator*= (const SHVec3& rhs) noexcept; - SHVec3& operator*= (float rhs) noexcept; - SHVec3& operator/= (const SHVec3& rhs) noexcept; - SHVec3& operator/= (float rhs) noexcept; + SHVec3& operator+= (const SHVec3& rhs) noexcept; + SHVec3& operator-= (const SHVec3& rhs) noexcept; + SHVec3& operator*= (const SHVec3& rhs) noexcept; + SHVec3& operator*= (float rhs) noexcept; + SHVec3& operator/= (const SHVec3& rhs) noexcept; + SHVec3& operator/= (float rhs) noexcept; - [[nodiscard]] SHVec3 operator+ (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator- (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator- () const noexcept; - [[nodiscard]] SHVec3 operator* (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator* (float rhs) const noexcept; - [[nodiscard]] SHVec3 operator/ (const SHVec3& rhs) const noexcept; - [[nodiscard]] SHVec3 operator/ (float rhs) const noexcept; + [[nodiscard]] SHVec3 operator+ (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator- (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator- () const noexcept; + [[nodiscard]] SHVec3 operator* (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator* (float rhs) const noexcept; + [[nodiscard]] SHVec3 operator/ (const SHVec3& rhs) const noexcept; + [[nodiscard]] SHVec3 operator/ (float rhs) const noexcept; - [[nodiscard]] bool operator== (const SHVec3& rhs) const noexcept; - [[nodiscard]] bool operator!= (const SHVec3& rhs) const noexcept; + [[nodiscard]] bool operator== (const SHVec3& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHVec3& rhs) const noexcept; - [[nodiscard]] float& operator[] (int index); - [[nodiscard]] float& operator[] (size_t index); - [[nodiscard]] float operator[] (int index) const; - [[nodiscard]] float operator[] (size_t index) const; + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; + // Conversion to other math types used by SHADE + + operator reactphysics3d::Vector3 () const noexcept; + operator reactphysics3d::Quaternion () const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 844803b1..1188ae40 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -44,10 +44,7 @@ namespace SHADE SHVec3 result; if (rp3dBody) - { - const auto& RP3D_RESULT = rp3dBody->getTransform().getPosition(); - result = SHVec3{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z }; - } + result = SHVec3{ rp3dBody->getTransform().getPosition() }; return result; } @@ -57,10 +54,7 @@ namespace SHADE SHQuaternion result; if (rp3dBody) - { - const auto& RP3D_RESULT = rp3dBody->getTransform().getOrientation(); - result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }; - } + result = SHQuaternion{ rp3dBody->getTransform().getOrientation() }; return result; } @@ -70,10 +64,7 @@ namespace SHADE SHVec3 result; if (rp3dBody) - { - const auto& RP3D_RESULT = rp3dBody->getTransform().getOrientation(); - result = SHQuaternion{ RP3D_RESULT.x, RP3D_RESULT.y, RP3D_RESULT.z, RP3D_RESULT.w }.ToEuler(); - } + result = SHQuaternion{ rp3dBody->getTransform().getOrientation() }.ToEuler(); return result; } @@ -84,10 +75,8 @@ namespace SHADE void SHPhysicsObject::SetPosition(const SHVec3& position) noexcept { - const rp3d::Vector3 RP3D_POS { position.x, position.y, position.z }; - rp3d::Transform rp3dTF; - rp3dTF.setPosition(RP3D_POS); + rp3dTF.setPosition(position); rp3dTF.setOrientation(rp3dBody->getTransform().getOrientation()); rp3dBody->setTransform(rp3dTF); @@ -96,11 +85,9 @@ namespace SHADE void SHPhysicsObject::SetOrientation(const SHQuaternion& orientation) noexcept { - const rp3d::Quaternion RP3D_ORIENTATION { orientation.x, orientation.y, orientation.z, orientation.w }; - rp3d::Transform rp3dTF; rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); - rp3dTF.setOrientation(RP3D_ORIENTATION); + rp3dTF.setOrientation(orientation); rp3dBody->setTransform(rp3dTF); prevTransform = rp3dTF; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index cdff2f5b..6002d697 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -82,8 +82,5 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - - - }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index f3a4c276..1fb8232e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -68,10 +68,7 @@ namespace SHADE if (world) { - const auto RP3D_GRAVITY = world->getGravity(); - result.x = RP3D_GRAVITY.x; - result.y = RP3D_GRAVITY.y; - result.z = RP3D_GRAVITY.z; + result = world->getGravity(); } else { @@ -112,8 +109,7 @@ namespace SHADE { if (world) { - const rp3d::Vector3 G { gravity.x, gravity.y, gravity.z }; - world->setGravity(G); + world->setGravity(gravity); } else { @@ -161,8 +157,7 @@ namespace SHADE { if (world) { - const rp3d::Vector3 G { settings.gravity.x, settings.gravity.y, settings.gravity.z }; - world->setGravity(G); + world->setGravity(settings.gravity); world->setNbIterationsVelocitySolver(settings.numVelocitySolverIterations); world->setNbIterationsPositionSolver(settings.numPositionSolverIterations); world->enableSleeping(settings.sleepingEnabled); @@ -225,13 +220,7 @@ namespace SHADE SHADE_TF = SHComponentManager::GetComponent(entityID); } - const SHVec3& SHADE_POS = SHADE_TF->GetWorldPosition(); - const SHVec3& SHADE_ROT = SHADE_TF->GetWorldRotation(); - - const rp3d::Vector3 RP3D_POS { SHADE_POS.x, SHADE_POS.y, SHADE_POS.z }; - const rp3d::Quaternion RP3D_ROT = rp3d::Quaternion::fromEulerAngles( SHADE_ROT.x, SHADE_ROT.y, SHADE_ROT.z ); - - const rp3d::Transform RP3D_TF { RP3D_POS, RP3D_ROT }; + const rp3d::Transform RP3D_TF { SHADE_TF->GetWorldPosition(), SHADE_TF->GetWorldRotation() }; // If collider already exists if (physicsObject->hasColliders) @@ -251,10 +240,7 @@ namespace SHADE case SHCollider::Type::BOX: { SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - const SHVec3& SHADE_EXTENTS = box->GetHalfExtents(); - - rp3d::Vector3 RP3D_EXTENTS { SHADE_EXTENTS.x, SHADE_EXTENTS.y, SHADE_EXTENTS.z }; - rp3d::BoxShape* newBox = factory.createBoxShape(RP3D_EXTENTS); + rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); // TODO(Diren): Handle offsets physicsObject->rp3dBody->addCollider(newBox, RP3D_TF); @@ -296,13 +282,7 @@ namespace SHADE SHADE_TF = SHComponentManager::GetComponent(entityID); } - const SHVec3& SHADE_POS = SHADE_TF->GetWorldPosition(); - const SHVec3& SHADE_ROT = SHADE_TF->GetWorldRotation(); - - const rp3d::Vector3 RP3D_POS { SHADE_POS.x, SHADE_POS.y, SHADE_POS.z }; - const rp3d::Quaternion RP3D_ROT = rp3d::Quaternion::fromEulerAngles( SHADE_ROT.x, SHADE_ROT.y, SHADE_ROT.z ); - - const rp3d::Transform RP3D_TF { RP3D_POS, RP3D_ROT }; + const rp3d::Transform RP3D_TF { SHADE_TF->GetWorldPosition(), SHADE_TF->GetWorldRotation() }; // No rb if (!physicsObject->isRigidBody) @@ -316,10 +296,7 @@ namespace SHADE case SHCollider::Type::BOX: { SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - const SHVec3& SHADE_EXTENTS = box->GetHalfExtents(); - - rp3d::Vector3 RP3D_EXTENTS { SHADE_EXTENTS.x, SHADE_EXTENTS.y, SHADE_EXTENTS.z }; - rp3d::BoxShape* newBox = factory.createBoxShape(RP3D_EXTENTS); + rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); // TODO(Diren): Handle offsets physicsObject->rp3dBody->addCollider(newBox, RP3D_TF); @@ -401,10 +378,7 @@ namespace SHADE case SHShape::Type::BOUNDING_BOX: { auto* box = reinterpret_cast(shape); - const SHVec3& SHADE_EXTENTS = box->GetHalfExtents(); - - rp3d::Vector3 RP3D_EXTENTS { SHADE_EXTENTS.x, SHADE_EXTENTS.y, SHADE_EXTENTS.z }; - rp3d::BoxShape* newBox = factory.createBoxShape(RP3D_EXTENTS); + rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); // TODO(Diren): Handle offsets @@ -593,12 +567,9 @@ namespace SHADE } // Convert RP3D Transform to SHADE - const SHVec3 SHADE_POS = SHVec3{ rp3dPos.x, rp3dPos.y, rp3dPos.z }; - const SHVec3 SHADE_ROT = SHQuaternion{ rp3dRot.x, rp3dRot.y, rp3dRot.z, rp3dRot.w }.ToEuler(); - auto* tfComponent = SHComponentManager::GetComponent(ENTITY_ID); - tfComponent->SetWorldPosition(SHADE_POS); - tfComponent->SetWorldRotation(SHADE_ROT); + tfComponent->SetWorldPosition(rp3dPos); + tfComponent->SetWorldRotation(SHQuaternion{ rp3dRot }.ToEuler()); // Cache transforms physicsObject.prevTransform = CURRENT_TF; @@ -660,18 +631,12 @@ namespace SHADE } case 8: // Linear Velocity { - const SHVec3& SHADE_VEL = comp->GetLinearVelocity(); - rp3d::Vector3 RP3D_VEL { SHADE_VEL.x, SHADE_VEL.y, SHADE_VEL.z }; - - rigidBody->setLinearVelocity(RP3D_VEL); + rigidBody->setLinearVelocity(comp->GetLinearVelocity()); break; } case 9: // Angular Velocity { - const SHVec3& SHADE_VEL = comp->GetAngularVelocity(); - rp3d::Vector3 RP3D_VEL { SHADE_VEL.x, SHADE_VEL.y, SHADE_VEL.z }; - - rigidBody->setAngularVelocity(RP3D_VEL); + rigidBody->setAngularVelocity(comp->GetAngularVelocity()); break; } default: break; @@ -718,12 +683,9 @@ namespace SHADE case SHCollider::Type::BOX: { SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - const SHVec3& SHADE_EXTENTS = box->GetHalfExtents(); - - rp3d::Vector3 RP3D_EXTENTS { SHADE_EXTENTS.x, SHADE_EXTENTS.y, SHADE_EXTENTS.z }; auto* rp3dBoxShape = reinterpret_cast(physicsObject->rp3dBody->getCollider(index)->getCollisionShape()); - rp3dBoxShape->setHalfExtents(RP3D_EXTENTS); + rp3dBoxShape->setHalfExtents(box->GetHalfExtents()); if (rp3dBoxShape) { diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 4eaf4a89..92a4730d 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -185,18 +185,18 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void SyncRigidBodyComponents (std::vector& denseArray) noexcept; - void SyncColliderComponents (std::vector& denseArray) noexcept; - void SyncTransforms () noexcept; + void SyncRigidBodyComponents (std::vector& denseArray) noexcept; + void SyncColliderComponents (std::vector& denseArray) noexcept; + void SyncTransforms () noexcept; // TODO(Diren): Trigger handling static void SyncRigidBody (SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept; - static void SetRP3DLinearConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; - static void SetRP3DAngularConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; + static void SetRP3DLinearConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; + static void SetRP3DAngularConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; - static void SyncCollider (SHPhysicsObject const* physicsObject, SHColliderComponent* comp) noexcept; + static void SyncCollider (SHPhysicsObject const* physicsObject, SHColliderComponent* comp) noexcept; }; diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 052be24a..6d37122c 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -30,8 +30,9 @@ project "SHADE_Managed" "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", "%{IncludeDir.yamlcpp}", - "%{IncludeDir.RTTR}/include", + "%{IncludeDir.RTTR}/include", "%{IncludeDir.dotnet}\\include", + "%{IncludeDir.reactphysics3d}\\include", "%{wks.location}/SHADE_Engine/src" } From 46a082b62efab28def786201e204ac07b2c5492b Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 10 Oct 2022 21:13:14 +0800 Subject: [PATCH 332/793] Moved rigidbody creation into physics object --- .../src/Math/Geometry/SHBoundingBox.cpp | 14 +-- SHADE_Engine/src/Math/Geometry/SHShape.h | 2 +- SHADE_Engine/src/Math/SHQuaternion.cpp | 5 ++ SHADE_Engine/src/Math/SHQuaternion.h | 1 + SHADE_Engine/src/Math/Vector/SHVec3.cpp | 5 ++ SHADE_Engine/src/Math/Vector/SHVec3.h | 9 +- .../Physics/Components/SHColliderComponent.h | 6 ++ .../Components/SHRigidBodyComponent.cpp | 6 +- .../Physics/Components/SHRigidBodyComponent.h | 9 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 85 ++++++++++++++++-- SHADE_Engine/src/Physics/SHPhysicsObject.h | 37 +++++--- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 90 +++++++++---------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 14 ++- 13 files changed, 198 insertions(+), 85 deletions(-) diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index 3abcc315..9068fe42 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -26,13 +26,13 @@ namespace SHADE , center { c } , halfExtents { hE } { - type = Type::BOUNDING_BOX; + type = Type::BOX; } SHBoundingBox::SHBoundingBox(const SHVec3* vertices, size_t numVertices) noexcept : SHShape {} { - type = Type::BOUNDING_BOX; + type = Type::BOX; if (vertices == nullptr || numVertices < 2) { @@ -63,7 +63,7 @@ namespace SHADE SHBoundingBox::SHBoundingBox(const SHBoundingBox* boxes, size_t numBoxes) noexcept : SHShape {} { - type = Type::BOUNDING_BOX; + type = Type::BOX; if (boxes == nullptr || numBoxes == 0) { @@ -83,7 +83,7 @@ namespace SHADE , center { rhs.center } , halfExtents { rhs.halfExtents } { - type = Type::BOUNDING_BOX; + type = Type::BOX; } SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept @@ -91,12 +91,12 @@ namespace SHADE , center { rhs.center } , halfExtents { rhs.halfExtents } { - type = Type::BOUNDING_BOX; + type = Type::BOX; } SHBoundingBox& SHBoundingBox::operator=(const SHBoundingBox& rhs) noexcept { - if (rhs.type != Type::BOUNDING_BOX) + if (rhs.type != Type::BOX) { SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") } @@ -111,7 +111,7 @@ namespace SHADE SHBoundingBox& SHBoundingBox::operator=(SHBoundingBox&& rhs) noexcept { - if (rhs.type != Type::BOUNDING_BOX) + if (rhs.type != Type::BOX) { SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") } diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index e33ca583..8efece09 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -29,7 +29,7 @@ namespace SHADE enum class Type { - BOUNDING_BOX + BOX , SPHERE , CAPSULE , CONVEX_HULL diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index 8463a7c2..33c568a5 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -194,6 +194,11 @@ namespace SHADE return reactphysics3d::Quaternion{ x, y, z, w }; } + SHQuaternion::operator reactphysics3d::Vector3() const noexcept + { + return reactphysics3d::Vector3{ ToEuler() }; + } + SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept { return rhs * lhs; diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index 01452cef..c94907b5 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -86,6 +86,7 @@ namespace SHADE // Conversion to other math types used by SHADE operator reactphysics3d::Quaternion () const noexcept; + operator reactphysics3d::Vector3 () const noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 2d86276b..8ec91fb8 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -14,6 +14,7 @@ #include "SHVec3.h" // Project Headers #include "Math/SHMatrix.h" +#include "Math/SHQuaternion.h" #include "Tools/SHLogger.h" using namespace DirectX; @@ -55,6 +56,10 @@ namespace SHADE : XMFLOAT3( rp3dVec3.x, rp3dVec3.y, rp3dVec3.z ) {} + SHVec3::SHVec3(const reactphysics3d::Quaternion& rp3dVec3) noexcept + : XMFLOAT3( SHQuaternion{rp3dVec3}.ToEuler() ) + {} + /*-----------------------------------------------------------------------------------*/ /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index 03a3578f..7badf6cd 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -60,13 +60,14 @@ namespace SHADE SHVec3 (SHVec3&& rhs) = default; ~SHVec3 () = default; - SHVec3 () noexcept; - SHVec3 (float n) noexcept; - SHVec3 (float x, float y, float z) noexcept; + SHVec3 () noexcept; + SHVec3 (float n) noexcept; + SHVec3 (float x, float y, float z) noexcept; // Conversion from other math types to SHADE - SHVec3 (const reactphysics3d::Vector3& rp3dVec3) noexcept; + SHVec3 (const reactphysics3d::Vector3& rp3dVec3) noexcept; + SHVec3 (const reactphysics3d::Quaternion& rp3dVec3) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index cb9696d9..fd4bcb9a 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -16,6 +16,11 @@ #include "ECS_Base/Components/SHComponent.h" #include "Physics/SHCollider.h" +//namespace SHADE +//{ +// class SHPhysicsSystem; +//} + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -30,6 +35,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ friend class SHPhysicsSystem; + friend class SHPhysicsObject; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 5f961de4..e5938717 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -392,9 +392,9 @@ RTTR_REGISTRATION registration::enumeration("RigidBody Type") ( - value("Static", SHRigidBodyComponent::Type::STATIC), - value("Dynamic", SHRigidBodyComponent::Type::DYNAMIC), - value("Kinematic", SHRigidBodyComponent::Type::KINEMATIC) + value("Static", SHRigidBodyComponent::Type::STATIC), + value("Kinematic", SHRigidBodyComponent::Type::KINEMATIC), + value("Dynamic", SHRigidBodyComponent::Type::DYNAMIC) ); registration::class_("RigidBody Component") diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 0793b2ff..285df810 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -14,7 +14,13 @@ // Project Headers #include "ECS_Base/Components/SHComponent.h" -#include "Physics/SHPhysicsObject.h" +#include "Math/Vector/SHVec3.h" +#include "Math/SHQuaternion.h" + +//namespace SHADE +//{ +// class SHPhysicsSystem; +//} namespace SHADE { @@ -30,6 +36,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ friend class SHPhysicsSystem; + friend class SHPhysicsObject; public: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 1188ae40..a007c5fe 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -15,7 +15,8 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" -#include "SHPhysicsSystem.h" +#include "ECS_Base/Managers/SHComponentManager.h" + namespace SHADE { @@ -23,16 +24,20 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHPhysicsObject::SHPhysicsObject() noexcept - : entityID { MAX_EID } + SHPhysicsObject::SHPhysicsObject(EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept + : entityID { eid } , isRigidBody { false } , hasColliders{ false } + , factory { physicsFactory } + , world { physicsWorld } , rp3dBody { nullptr } {} SHPhysicsObject::~SHPhysicsObject() noexcept { - rp3dBody = nullptr; + factory = nullptr; + world = nullptr; + rp3dBody = nullptr; } /*-----------------------------------------------------------------------------------*/ @@ -75,6 +80,12 @@ namespace SHADE void SHPhysicsObject::SetPosition(const SHVec3& position) noexcept { + if (!rp3dBody) + { + SHLOG_ERROR("Cannot set position of a non-existent physics body for Entity {}", entityID) + return; + } + rp3d::Transform rp3dTF; rp3dTF.setPosition(position); rp3dTF.setOrientation(rp3dBody->getTransform().getOrientation()); @@ -85,6 +96,12 @@ namespace SHADE void SHPhysicsObject::SetOrientation(const SHQuaternion& orientation) noexcept { + if (!rp3dBody) + { + SHLOG_ERROR("Cannot set orientation of a non-existent physics body for Entity {}", entityID) + return; + } + rp3d::Transform rp3dTF; rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); rp3dTF.setOrientation(orientation); @@ -95,14 +112,70 @@ namespace SHADE void SHPhysicsObject::SetRotation(const SHVec3& rotation) noexcept { - const rp3d::Quaternion RP3D_ORIENTATION = rp3d::Quaternion::fromEulerAngles( rotation.x, rotation.y, rotation.z ); + if (!rp3dBody) + { + SHLOG_ERROR("Cannot set rotation of a non-existent physics body for Entity {}", entityID) + return; + } rp3d::Transform rp3dTF; rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); - rp3dTF.setOrientation(RP3D_ORIENTATION); + rp3dTF.setOrientation(rotation); rp3dBody->setTransform(rp3dTF); prevTransform = rp3dTF; } + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObject::CreateRigidBody(const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c) + { + // If collider already exists + if (hasColliders) + world->destroyCollisionBody(rp3dBody); + + rp3dBody = world->createRigidBody(rp3d::Transform{ tf->GetWorldPosition(), tf->GetWorldRotation() }); + isRigidBody = true; + + rb->position = tf->GetWorldPosition(); + rb->orientation = tf->GetWorldRotation(); + } + + void SHPhysicsObject::DestroyRigidBody() noexcept + { + + } + + void SHPhysicsObject::CreateCollisionBody(const SHTransformComponent* tf, SHColliderComponent* c) + { + + } + + void SHPhysicsObject::DestroyCollisionBody() noexcept + { + + } + + int SHPhysicsObject::AddCollider(SHCollider* collider) + { + return 0; + } + + void SHPhysicsObject::RemoveCollider(int index) noexcept + { + + } + + void SHPhysicsObject::SyncRigidBody() noexcept + { + + } + + void SHPhysicsObject::SyncColliders() noexcept + { + + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 6002d697..c6ecd250 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -13,9 +13,9 @@ #include // Project Headers -#include "Math/Vector/SHVec3.h" -#include "Math/SHQuaternion.h" -#include "ECS_Base/Entity/SHEntity.h" +#include "Math/Transform/SHTransformComponent.h" +#include "Components/SHRigidBodyComponent.h" +#include "Components/SHColliderComponent.h" namespace SHADE { @@ -31,15 +31,13 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ friend class SHPhysicsSystem; - friend class SHRigidBodyComponent; - friend class SHColliderComponent; public: /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject () noexcept; + SHPhysicsObject (EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept; SHPhysicsObject (const SHPhysicsObject& rhs) noexcept = default; SHPhysicsObject (SHPhysicsObject&& rhs) noexcept = default; virtual ~SHPhysicsObject () noexcept; @@ -63,9 +61,24 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetPosition (const SHVec3& position) noexcept; - void SetOrientation (const SHQuaternion& orientation) noexcept; - void SetRotation (const SHVec3& rotation) noexcept; + void SetPosition (const SHVec3& position) noexcept; + void SetOrientation (const SHQuaternion& orientation) noexcept; + void SetRotation (const SHVec3& rotation) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void CreateRigidBody (const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c); + void DestroyRigidBody () noexcept; + + void CreateCollisionBody (const SHTransformComponent* tf, SHColliderComponent* c); + int AddCollider (SHCollider* collider); + void RemoveCollider (int index) noexcept; + void DestroyCollisionBody () noexcept; + + void SyncRigidBody () noexcept; + void SyncColliders () noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -76,11 +89,9 @@ namespace SHADE bool isRigidBody; bool hasColliders; + rp3d::PhysicsCommon* factory; + rp3d::PhysicsWorld* world; rp3d::CollisionBody* rp3dBody; // Can be either a collision body or a rigid body rp3d::Transform prevTransform; // Cached transform for interpolation - - /*---------------------------------------------------------------------------------*/ - /* Function Members */ - /*---------------------------------------------------------------------------------*/ }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 1fb8232e..38c7e19c 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -204,32 +204,18 @@ namespace SHADE // Check if entity is already a physics object auto* physicsObject = GetPhysicsObject(entityID); + if (!physicsObject) - { - physicsObject = &(map.emplace(entityID, SHPhysicsObject{}).first->second); - physicsObject->entityID = entityID; - } + physicsObject = CreatePhysicsObject(entityID); - // Get entity transform - auto const* SHADE_TF = SHComponentManager::GetComponent_s(entityID); + // Get components transform + auto* transformComponent = EnsureTransform(entityID); + auto* rigidBodyComponent = SHComponentManager::GetComponent(entityID); - // Possibly redundant - if (!SHADE_TF) - { - SHComponentManager::AddComponent(entityID); - SHADE_TF = SHComponentManager::GetComponent(entityID); - } - - const rp3d::Transform RP3D_TF { SHADE_TF->GetWorldPosition(), SHADE_TF->GetWorldRotation() }; - - // If collider already exists - if (physicsObject->hasColliders) - world->destroyCollisionBody(physicsObject->rp3dBody); - - physicsObject->rp3dBody = world->createRigidBody(RP3D_TF); - physicsObject->isRigidBody = true; + physicsObject->CreateRigidBody(transformComponent, rigidBodyComponent, nullptr); // Recreate colliders + const rp3d::Transform RP3D_TF { transformComponent->GetWorldPosition(), transformComponent->GetWorldRotation() }; if (physicsObject->hasColliders) { const auto& COLLIDERS = SHComponentManager::GetComponent(entityID)->GetColliders(); @@ -267,22 +253,11 @@ namespace SHADE // Check if entity is already a physics object auto* physicsObject = GetPhysicsObject(entityID); if (!physicsObject) - { - physicsObject = &(map.emplace(entityID, SHPhysicsObject{}).first->second); - physicsObject->entityID = entityID; - } + physicsObject = CreatePhysicsObject(entityID); // Get entity transform - auto const* SHADE_TF = SHComponentManager::GetComponent_s(entityID); - - // Possibly redundant - if (!SHADE_TF) - { - SHComponentManager::AddComponent(entityID); - SHADE_TF = SHComponentManager::GetComponent(entityID); - } - - const rp3d::Transform RP3D_TF { SHADE_TF->GetWorldPosition(), SHADE_TF->GetWorldRotation() }; + auto const* TF = EnsureTransform(entityID); + const rp3d::Transform RP3D_TF { TF->GetWorldPosition(), TF->GetWorldRotation() }; // No rb if (!physicsObject->isRigidBody) @@ -375,7 +350,7 @@ namespace SHADE switch (shape->GetType()) { - case SHShape::Type::BOUNDING_BOX: + case SHShape::Type::BOX: { auto* box = reinterpret_cast(shape); rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); @@ -457,6 +432,12 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + SHPhysicsObject* SHPhysicsSystem::CreatePhysicsObject(EntityID entityID) noexcept + { + auto* newPhysicsObject = &map.emplace(entityID, SHPhysicsObject{entityID, &factory, world}).first->second; + return newPhysicsObject; + } + SHPhysicsObject* SHPhysicsSystem::GetPhysicsObject(EntityID entityID) noexcept { const auto it = map.find(entityID); @@ -469,6 +450,14 @@ namespace SHADE return &(it->second); } + void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject* physicsObject, bool componentActive) noexcept + { + const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); + if (RP3D_ACTIVE != componentActive) + physicsObject->rp3dBody->setIsActive(componentActive); + } + + void SHPhysicsSystem::SyncRigidBodyComponents(std::vector& denseArray) noexcept { if (denseArray.empty()) @@ -479,14 +468,11 @@ namespace SHADE const EntityID ENTITY_ID = comp.GetEID(); // Get physicsObject - auto const* physicsObject = GetPhysicsObject(ENTITY_ID); + auto* physicsObject = GetPhysicsObject(ENTITY_ID); - const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); // TODO(Diren): Check if active in hierarchy const bool COMPONENT_ACTIVE = comp.isActive; - - if (RP3D_ACTIVE != COMPONENT_ACTIVE) - physicsObject->rp3dBody->setIsActive(COMPONENT_ACTIVE); + SyncActiveStates(physicsObject, COMPONENT_ACTIVE); if (!COMPONENT_ACTIVE) continue; @@ -509,14 +495,11 @@ namespace SHADE const EntityID ENTITY_ID = comp.GetEID(); // Get physicsObject - auto const* physicsObject = GetPhysicsObject(ENTITY_ID); + auto* physicsObject = GetPhysicsObject(ENTITY_ID); - const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); // TODO(Diren): Check if active in hierarchy const bool COMPONENT_ACTIVE = comp.isActive; - - if (RP3D_ACTIVE != COMPONENT_ACTIVE) - physicsObject->rp3dBody->setIsActive(COMPONENT_ACTIVE); + SyncActiveStates(physicsObject, COMPONENT_ACTIVE); if (!COMPONENT_ACTIVE) continue; @@ -706,4 +689,19 @@ namespace SHADE } } + SHTransformComponent* SHPhysicsSystem::EnsureTransform(EntityID entityID) + { + auto* tf = SHComponentManager::GetComponent_s(entityID); + + // Possibly redundant + if (!tf) + { + SHComponentManager::AddComponent(entityID); + tf = SHComponentManager::GetComponent(entityID); + } + + return tf; + } + + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 92a4730d..b5ab36bc 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -19,6 +19,7 @@ #include "SHPhysicsObject.h" #include "Components/SHRigidBodyComponent.h" #include "Components/SHColliderComponent.h" +#include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneGraph.h" #include "ECS_Base/System/SHSystemRoutine.h" @@ -185,11 +186,13 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* CreatePhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void SyncRigidBodyComponents (std::vector& denseArray) noexcept; - void SyncColliderComponents (std::vector& denseArray) noexcept; - void SyncTransforms () noexcept; + void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; + void SyncRigidBodyComponents (std::vector& denseArray) noexcept; + void SyncColliderComponents (std::vector& denseArray) noexcept; + void SyncTransforms () noexcept; // TODO(Diren): Trigger handling static void SyncRigidBody (SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept; @@ -197,6 +200,9 @@ namespace SHADE static void SetRP3DAngularConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; static void SyncCollider (SHPhysicsObject const* physicsObject, SHColliderComponent* comp) noexcept; + + // TODO(Diren): Remove when responsibility shifted to editor + SHTransformComponent* EnsureTransform (EntityID entityID); }; From e68ef89c00f9411501ed92682becde42ac7fe193 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 10 Oct 2022 21:21:20 +0800 Subject: [PATCH 333/793] synced rigidbodies through physics object --- .../Physics/Components/SHRigidBodyComponent.h | 3 + SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 109 ++++++++++++++++-- SHADE_Engine/src/Physics/SHPhysicsObject.h | 12 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 6 +- 4 files changed, 107 insertions(+), 23 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 285df810..8b62b7ff 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -144,6 +144,9 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ + static constexpr size_t NUM_FLAGS = 8; + static constexpr size_t NUM_DIRTY_FLAGS = 16; + Type type; // rX rY rZ pX pY pZ slp g diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index a007c5fe..bbe8c726 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -143,37 +143,122 @@ namespace SHADE rb->orientation = tf->GetWorldRotation(); } - void SHPhysicsObject::DestroyRigidBody() noexcept - { - - } - void SHPhysicsObject::CreateCollisionBody(const SHTransformComponent* tf, SHColliderComponent* c) { } - void SHPhysicsObject::DestroyCollisionBody() noexcept - { - - } - int SHPhysicsObject::AddCollider(SHCollider* collider) { return 0; } + void SHPhysicsObject::DestroyRigidBody() noexcept + { + + } + + void SHPhysicsObject::DestroyCollisionBody() noexcept + { + + } + void SHPhysicsObject::RemoveCollider(int index) noexcept { } - void SHPhysicsObject::SyncRigidBody() noexcept + void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent* rb) const noexcept { + SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") + + if (rb->dirtyFlags == 0) + return; + + auto* rigidBody = reinterpret_cast(rp3dBody); + + const uint16_t RB_FLAGS = rb->dirtyFlags; + for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) + { + // Check if current dirty flag has been set to true + if (RB_FLAGS & 1U << i) + { + switch (i) + { + case 0: // Gravity + { + rigidBody->enableGravity(rb->IsGravityEnabled()); + break; + } + case 1: // Sleeping + { + rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); + break; + } + case 2: // Linear Constraints + { + const rp3d::Vector3 CONSTRAINTS + { + rb->flags & 1U << 2 ? 0.0f : 1.0f, + rb->flags & 1U << 3 ? 0.0f : 1.0f, + rb->flags & 1U << 4 ? 0.0f : 1.0f + }; + + rigidBody->setLinearLockAxisFactor(CONSTRAINTS); + break; + } + case 3: // Angular Constraints + { + const rp3d::Vector3 CONSTRAINTS + { + rb->flags & 1U << 5 ? 0.0f : 1.0f, + rb->flags & 1U << 6 ? 0.0f : 1.0f, + rb->flags & 1U << 7 ? 0.0f : 1.0f + }; + + rigidBody->setAngularLockAxisFactor(CONSTRAINTS); + break; + } + case 4: // Type + { + rigidBody->setType(static_cast(rb->GetType())); + break; + } + case 5: // Mass + { + rigidBody->setMass(rb->GetMass()); + break; + } + case 6: // Drag + { + rigidBody->setLinearDamping(rb->GetDrag()); + break; + } + case 7: // Angular Drag + { + rigidBody->setAngularDamping(rb->GetAngularDrag()); + break; + } + case 8: // Linear Velocity + { + rigidBody->setLinearVelocity(rb->GetLinearVelocity()); + break; + } + case 9: // Angular Velocity + { + rigidBody->setAngularVelocity(rb->GetAngularVelocity()); + break; + } + default: break; + } + } + } + + rb->dirtyFlags = 0; } - void SHPhysicsObject::SyncColliders() noexcept + void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { } diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index c6ecd250..8562a0a1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -70,15 +70,15 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void CreateRigidBody (const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c); - void DestroyRigidBody () noexcept; - void CreateCollisionBody (const SHTransformComponent* tf, SHColliderComponent* c); int AddCollider (SHCollider* collider); - void RemoveCollider (int index) noexcept; - void DestroyCollisionBody () noexcept; - void SyncRigidBody () noexcept; - void SyncColliders () noexcept; + void DestroyRigidBody () noexcept; + void RemoveCollider (int index) noexcept; + void DestroyCollisionBody () noexcept; + + void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; + void SyncColliders (SHColliderComponent* c) const noexcept; private: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 38c7e19c..b922cdd7 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -477,11 +477,7 @@ namespace SHADE if (!COMPONENT_ACTIVE) continue; - if (comp.dirtyFlags > 0) - { - SyncRigidBody(physicsObject, &comp); - comp.dirtyFlags = 0; - } + physicsObject->SyncRigidBody(&comp); } } From ff9b504bc5224089726983f7098b19bfd8b226fb Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 11 Oct 2022 01:26:12 +0800 Subject: [PATCH 334/793] Moved collider interface into physics object. Added support for removing rigidbodies --- SHADE_Application/src/Scenes/SBTestScene.cpp | 3 +- .../Components/SHColliderComponent.cpp | 16 +- .../Physics/Components/SHColliderComponent.h | 2 +- SHADE_Engine/src/Physics/SHCollider.cpp | 106 +++---- SHADE_Engine/src/Physics/SHCollider.h | 22 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 108 ++++++- SHADE_Engine/src/Physics/SHPhysicsObject.h | 4 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 287 ++++-------------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 13 +- 9 files changed, 227 insertions(+), 334 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 3b277e6c..36c69386 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -104,8 +104,7 @@ namespace Sandbox transform.SetWorldRotation(SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber()); transform.SetWorldScale(TEST_OBJ_SCALE); - auto* box = collider.AddBoundingBox(); - box->SetHalfExtents(transform.GetWorldScale() * 0.5f); + collider.AddBoundingBox(SHVec3::One * 0.5f, SHVec3::Zero); stressTestObjects.emplace_back(entity); } diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index 73e7ccbd..ada90eaa 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -24,7 +24,8 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHColliderComponent::SHColliderComponent() noexcept - : system { nullptr } + : system { nullptr } + , colliders {} {} /*-----------------------------------------------------------------------------------*/ @@ -87,12 +88,17 @@ namespace SHADE system->RemoveCollider(GetEID()); } - SHBoundingBox* SHColliderComponent::AddBoundingBox() noexcept + SHBoundingBox* SHColliderComponent::AddBoundingBox(const SHVec3& halfExtents, const SHVec3& posOffset) noexcept { const auto TYPE = SHCollider::Type::BOX; - const auto BOX_PAIR = std::make_pair(SHCollider{TYPE}, true); - auto& collider = colliders.emplace_back(BOX_PAIR).first; + auto boxPair = std::make_pair(SHCollider{TYPE}, true); + auto& collider = colliders.emplace_back(boxPair).first; + + const auto* tf = SHComponentManager::GetComponent(GetEID()); + + collider.SetPositionOffset(posOffset); + collider.SetAsBoundingBox(tf->GetWorldScale() * halfExtents); if (!system) { @@ -101,7 +107,7 @@ namespace SHADE } // Notify Physics System - system->AddCollisionShape(GetEID(), collider.GetShape()); + system->AddCollisionShape(GetEID(), &collider); return reinterpret_cast(collider.GetShape()); } diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index fd4bcb9a..db4cd612 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -82,7 +82,7 @@ namespace SHADE void OnCreate () override; void OnDestroy () override; - SHBoundingBox* AddBoundingBox () noexcept; + SHBoundingBox* AddBoundingBox (const SHVec3& halfExtents = SHVec3::One, const SHVec3& posOffset = SHVec3::Zero) noexcept; void RemoveCollider (int index); diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp index 724db19c..5a3a6ac2 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -29,25 +29,23 @@ namespace SHADE } SHCollider::SHCollider(const SHCollider& rhs) noexcept - : type { rhs.type} - , isTrigger { rhs.isTrigger } - , dirty { true } - , shape { nullptr } + : type { rhs.type} + , isTrigger { rhs.isTrigger } + , dirty { true } + , shape { nullptr } + , positionOffset { rhs.positionOffset } { CreateShape(); - - // TODO(Diren): Copy transform data over } SHCollider::SHCollider(SHCollider&& rhs) noexcept - : type { rhs.type} - , isTrigger { rhs.isTrigger } - , dirty { true } - , shape { nullptr } + : type { rhs.type} + , isTrigger { rhs.isTrigger } + , dirty { true } + , shape { nullptr } + , positionOffset { rhs.positionOffset } { CreateShape(); - - // TODO(Diren): Copy transform data over } SHCollider::~SHCollider() noexcept @@ -61,27 +59,26 @@ namespace SHADE SHCollider& SHCollider::operator=(const SHCollider& rhs) noexcept { - type = rhs.type; - isTrigger = rhs.isTrigger; - dirty = true; + if (this == &rhs) + return *this; + + type = rhs.type; + isTrigger = rhs.isTrigger; + dirty = true; + positionOffset = rhs.positionOffset; CreateShape(); - - // TODO(Diren): Copy transform data over - return *this; } SHCollider& SHCollider::operator=(SHCollider&& rhs) noexcept { - type = rhs.type; - isTrigger = rhs.isTrigger; - dirty = true; + type = rhs.type; + isTrigger = rhs.isTrigger; + dirty = true; + positionOffset = rhs.positionOffset; CreateShape(); - - // TODO(Diren): Copy transform data over - return *this; } @@ -104,11 +101,6 @@ namespace SHADE return type; } - SHShape* SHCollider::GetShape() const noexcept - { - return shape; - } - float SHCollider::GetFriction() const noexcept { // TODO(Diren): Fix after implementing materials @@ -126,38 +118,41 @@ namespace SHADE return 0.0f; } - SHVec3 SHCollider::GetPosition() const noexcept - { - // TODO(Diren): Fix after linking transform data - return SHVec3::Zero; - } - const SHVec3& SHCollider::GetPositionOffset() const noexcept { return positionOffset; } - SHQuaternion SHCollider::GetOrientation() const noexcept + SHShape* SHCollider::GetShape() noexcept { - // TODO(Diren): Fix after linking transform data - return SHQuaternion::Identity; + dirty = true; + return shape; } /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHCollider::SetType(Type newType) noexcept + void SHCollider::SetAsBoundingBox(const SHVec3& halfExtents) { - if (type == newType) - return; - dirty = true; + type = Type::BOX; - type = newType; - CreateShape(); + delete shape; + shape = new SHBoundingBox{ positionOffset, halfExtents }; } + void SHCollider::SetAsBoundingSphere(float radius) + { + dirty = true; + type = Type::SPHERE; + + // TODO(Diren): Add Sphere + delete shape; + } + + + void SHCollider::SetIsTrigger(bool trigger) noexcept { dirty = true; @@ -191,25 +186,22 @@ namespace SHADE void SHCollider::CreateShape() { - // Remove current shape delete shape; switch (type) { - case Type::BOX: CreateBoundingBox(); break; - case Type::SPHERE: CreateSphere(); break; + case Type::BOX: + { + SetAsBoundingBox(SHVec3::One); + break; + } + case Type::SPHERE: + { + SetAsBoundingSphere(1.0f); + break; + } default: break; } } - void SHCollider::CreateBoundingBox() - { - shape = new SHBoundingBox{ SHVec3::Zero, SHVec3::One }; - } - - void SHCollider::CreateSphere() - { - - } - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h index fce4a5b2..b53ce58a 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -32,8 +32,6 @@ namespace SHADE BOX , SPHERE , CAPSULE - , CONVEX_HULL - , CONVEX_MESH }; /*---------------------------------------------------------------------------------*/ @@ -62,28 +60,28 @@ namespace SHADE [[nodiscard]] bool IsTrigger () const noexcept; [[nodiscard]] Type GetType () const noexcept; - [[nodiscard]] SHShape* GetShape () const noexcept; [[nodiscard]] float GetFriction () const noexcept; [[nodiscard]] float GetBounciness () const noexcept; [[nodiscard]] float GetDensity () const noexcept; - [[nodiscard]] SHVec3 GetPosition () const noexcept; [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; - [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + + [[nodiscard]] SHShape* GetShape () noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetType (Type newType) noexcept; + void SetAsBoundingBox (const SHVec3& halfExtents); + void SetAsBoundingSphere (float radius); - void SetIsTrigger (bool isTrigger) noexcept; - void SetFriction (float friction) noexcept; - void SetBounciness (float bounciness) noexcept; - void SetDensity (float density) noexcept; + void SetIsTrigger (bool isTrigger) noexcept; + void SetFriction (float friction) noexcept; + void SetBounciness (float bounciness) noexcept; + void SetDensity (float density) noexcept; - void SetPositionOffset (const SHVec3& positionOffset) noexcept; + void SetPositionOffset (const SHVec3& positionOffset) noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -101,8 +99,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void CreateShape (); - void CreateBoundingBox (); - void CreateSphere (); }; } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index bbe8c726..eaecc9c0 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -132,7 +132,7 @@ namespace SHADE void SHPhysicsObject::CreateRigidBody(const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c) { - // If collider already exists + // If collider already exists, recreate the collision body as a rigid body if (hasColliders) world->destroyCollisionBody(rp3dBody); @@ -141,31 +141,91 @@ namespace SHADE rb->position = tf->GetWorldPosition(); rb->orientation = tf->GetWorldRotation(); + + if (hasColliders) + { + c->position = tf->GetWorldPosition(); + c->orientation = tf->GetWorldRotation(); + // Get array of colliders and add them back into the rigidbody + for (auto& collider : c->colliders | std::views::keys) + AddCollider(&collider); + } } void SHPhysicsObject::CreateCollisionBody(const SHTransformComponent* tf, SHColliderComponent* c) { - + if (rp3dBody == nullptr) + rp3dBody = world->createCollisionBody(rp3d::Transform{ tf->GetWorldPosition(), tf->GetWorldRotation() }); + + hasColliders = true; + + c->position = tf->GetWorldPosition(); + c->orientation = tf->GetWorldRotation(); + + for (auto& collider : c->colliders | std::views::keys) + AddCollider(&collider); } int SHPhysicsObject::AddCollider(SHCollider* collider) { - return 0; + switch (collider->GetType()) + { + case SHCollider::Type::BOX: + { + const auto* box = reinterpret_cast(collider->GetShape()); + rp3d::BoxShape* newBox = factory->createBoxShape(box->GetHalfExtents()); + + // TODO(Diren): Handle offsets + rp3dBody->addCollider(newBox, rp3d::Transform{ collider->GetPositionOffset(), SHQuaternion::Identity }); + break; + } + case SHCollider::Type::SPHERE: + { + break; + } + // TODO(Diren): Add more collider shapes + default: break; + } + + return static_cast(rp3dBody->getNbColliders()) - 1; } - void SHPhysicsObject::DestroyRigidBody() noexcept + void SHPhysicsObject::DestroyRigidBody(SHColliderComponent* c) noexcept { - + world->destroyRigidBody(reinterpret_cast(rp3dBody)); + + if (hasColliders) + { + // Preserve colliders as a collision body + rp3dBody = world->createCollisionBody(rp3d::Transform{ c->position, c->orientation }); + for (auto& collider : c->colliders | std::views::keys) + AddCollider(&collider); + } + + isRigidBody = false; } void SHPhysicsObject::DestroyCollisionBody() noexcept { - + // Remove all colliders + for (uint32_t i = 0; i < rp3dBody->getNbColliders(); ++i) + { + auto* collider = rp3dBody->getCollider(i); + rp3dBody->removeCollider(collider); + } } - void SHPhysicsObject::RemoveCollider(int index) noexcept + void SHPhysicsObject::RemoveCollider(int index) { - + const int NUM_COLLIDERS = static_cast(rp3dBody->getNbColliders()); + if (NUM_COLLIDERS == 0) + return; + + if (index < 0 || index >= NUM_COLLIDERS) + throw std::invalid_argument("Index out of range!"); + + auto* collider = rp3dBody->getCollider(index); + rp3dBody->removeCollider(collider); } void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent* rb) const noexcept @@ -260,7 +320,37 @@ namespace SHADE void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { - + int index = 0; + for (auto& [collider, dirty] : c->colliders) + { + if (!dirty) + continue; + + // Update offsets + auto* rp3dCollider = rp3dBody->getCollider(index); + rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), SHQuaternion::Identity)); + + switch (collider.GetType()) + { + case SHCollider::Type::BOX: + { + const auto* box = reinterpret_cast(collider.GetShape()); + + auto* rp3dBoxShape = reinterpret_cast(rp3dCollider->getCollisionShape()); + rp3dBoxShape->setHalfExtents(box->GetHalfExtents()); + + break; + } + case SHCollider::Type::SPHERE: + { + break; + } + default: break; + } + + dirty = false; + ++index; + } } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 8562a0a1..39a85421 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -73,8 +73,8 @@ namespace SHADE void CreateCollisionBody (const SHTransformComponent* tf, SHColliderComponent* c); int AddCollider (SHCollider* collider); - void DestroyRigidBody () noexcept; - void RemoveCollider (int index) noexcept; + void DestroyRigidBody (SHColliderComponent* c) noexcept; + void RemoveCollider (int index); void DestroyCollisionBody () noexcept; void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index b922cdd7..c5a7aa57 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -202,46 +202,14 @@ namespace SHADE SHLOG_INFO("Adding a Rigidbody to the Physics World.") #endif - // Check if entity is already a physics object - auto* physicsObject = GetPhysicsObject(entityID); + auto* physicsObject = CreatePhysicsObject(entityID); - if (!physicsObject) - physicsObject = CreatePhysicsObject(entityID); - - // Get components transform - auto* transformComponent = EnsureTransform(entityID); - auto* rigidBodyComponent = SHComponentManager::GetComponent(entityID); - - physicsObject->CreateRigidBody(transformComponent, rigidBodyComponent, nullptr); - - // Recreate colliders - const rp3d::Transform RP3D_TF { transformComponent->GetWorldPosition(), transformComponent->GetWorldRotation() }; - if (physicsObject->hasColliders) - { - const auto& COLLIDERS = SHComponentManager::GetComponent(entityID)->GetColliders(); - for (const auto& collider : COLLIDERS | std::views::keys) - { - switch (collider.GetType()) - { - case SHCollider::Type::BOX: - { - SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); - - // TODO(Diren): Handle offsets - physicsObject->rp3dBody->addCollider(newBox, RP3D_TF); - break; - } - case SHCollider::Type::SPHERE: - { - break; - } - // TODO(Diren): Add more collider shapes - default: break; - } - } - } - + physicsObject->CreateRigidBody + ( + EnsureTransform(entityID), + SHComponentManager::GetComponent(entityID), + SHComponentManager::GetComponent_s(entityID) + ); } void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept @@ -250,43 +218,13 @@ namespace SHADE SHLOG_INFO("Adding a Collider to the Physics World.") #endif - // Check if entity is already a physics object - auto* physicsObject = GetPhysicsObject(entityID); - if (!physicsObject) - physicsObject = CreatePhysicsObject(entityID); + auto* physicsObject = CreatePhysicsObject(entityID); - // Get entity transform - auto const* TF = EnsureTransform(entityID); - const rp3d::Transform RP3D_TF { TF->GetWorldPosition(), TF->GetWorldRotation() }; - - // No rb - if (!physicsObject->isRigidBody) - physicsObject->rp3dBody = world->createCollisionBody(RP3D_TF); - - const auto& COLLIDERS = SHComponentManager::GetComponent(entityID)->GetColliders(); - for (const auto& collider : COLLIDERS | std::views::keys) - { - switch (collider.GetType()) - { - case SHCollider::Type::BOX: - { - SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); - - // TODO(Diren): Handle offsets - physicsObject->rp3dBody->addCollider(newBox, RP3D_TF); - break; - } - case SHCollider::Type::SPHERE: - { - break; - } - // TODO(Diren): Add more collider shapes - default: break; - } - } - - physicsObject->hasColliders = true; + physicsObject->CreateCollisionBody + ( + EnsureTransform(entityID), + SHComponentManager::GetComponent(entityID) + ); } void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept @@ -295,6 +233,13 @@ namespace SHADE SHLOG_INFO("Removing a Rigidbody from the Physics World.") #endif + auto* physicsObject = GetPhysicsObject(entityID); + SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") + + physicsObject->DestroyRigidBody(SHComponentManager::GetComponent_s(entityID)); + + if (physicsObject->rp3dBody == nullptr) + DestroyPhysicsObject(entityID); } void SHPhysicsSystem::RemoveCollider(EntityID entityID) noexcept @@ -344,30 +289,10 @@ namespace SHADE } - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHShape* shape) + void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) { auto* physicsObject = GetPhysicsObject(entityID); - - switch (shape->GetType()) - { - case SHShape::Type::BOX: - { - auto* box = reinterpret_cast(shape); - rp3d::BoxShape* newBox = factory.createBoxShape(box->GetHalfExtents()); - - // TODO(Diren): Handle offsets - - rp3d::Transform tf = rp3d::Transform::identity(); - physicsObject->rp3dBody->addCollider(newBox, tf); - break; - } - case SHShape::Type::SPHERE: - { - break; - } - // TODO(Diren): Add more collider shapes - default: break; - } + physicsObject->AddCollider(collider); } void SHPhysicsSystem::RemoveCollisionShape(EntityID entityID, int index) @@ -424,6 +349,7 @@ namespace SHADE if (system->worldUpdated) { system->SyncTransforms(); + // TODO(Diren): Handle trigger messages for scripting } } @@ -434,8 +360,14 @@ namespace SHADE SHPhysicsObject* SHPhysicsSystem::CreatePhysicsObject(EntityID entityID) noexcept { - auto* newPhysicsObject = &map.emplace(entityID, SHPhysicsObject{entityID, &factory, world}).first->second; - return newPhysicsObject; + const auto it = map.find(entityID); + if (it == map.end()) + { + auto* newPhysicsObject = &map.emplace(entityID, SHPhysicsObject{entityID, &factory, world}).first->second; + return newPhysicsObject; + } + + return &(it->second); } SHPhysicsObject* SHPhysicsSystem::GetPhysicsObject(EntityID entityID) noexcept @@ -450,6 +382,11 @@ namespace SHADE return &(it->second); } + void SHPhysicsSystem::DestroyPhysicsObject(EntityID entityID) noexcept + { + map.erase(entityID); + } + void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject* physicsObject, bool componentActive) noexcept { const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); @@ -500,17 +437,14 @@ namespace SHADE if (!COMPONENT_ACTIVE) continue; - SyncCollider(physicsObject, &comp); + physicsObject->SyncColliders(&comp); } } void SHPhysicsSystem::SyncTransforms() noexcept { - for (auto& pair : map) + for (auto& [entityID, physicsObject] : map) { - const EntityID ENTITY_ID = pair.first; - SHPhysicsObject& physicsObject = pair.second; - rp3d::Vector3 rp3dPos; rp3d::Quaternion rp3dRot; @@ -520,7 +454,7 @@ namespace SHADE if (physicsObject.isRigidBody) { - auto const* rbComponent = SHComponentManager::GetComponent(ENTITY_ID); + auto* rbComponent = SHComponentManager::GetComponent(entityID); if (rbComponent->GetType() == SHRigidBodyComponent::Type::STATIC) continue; @@ -538,6 +472,16 @@ namespace SHADE rp3dPos = CURRENT_TF.getPosition(); rp3dRot = CURRENT_TF.getOrientation(); } + + rbComponent->position = CURRENT_TF.getPosition(); + rbComponent->orientation = CURRENT_TF.getOrientation(); + + if (physicsObject.hasColliders) + { + auto* colliderComponent = SHComponentManager::GetComponent(entityID); + colliderComponent->position = CURRENT_TF.getPosition(); + colliderComponent->orientation = CURRENT_TF.getOrientation(); + } } else { @@ -546,145 +490,16 @@ namespace SHADE } // Convert RP3D Transform to SHADE - auto* tfComponent = SHComponentManager::GetComponent(ENTITY_ID); + auto* tfComponent = SHComponentManager::GetComponent(entityID); tfComponent->SetWorldPosition(rp3dPos); tfComponent->SetWorldRotation(SHQuaternion{ rp3dRot }.ToEuler()); + // Cache transforms physicsObject.prevTransform = CURRENT_TF; } } - void SHPhysicsSystem::SyncRigidBody(SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept - { - auto* rigidBody = reinterpret_cast(physicsObject->rp3dBody); - - const uint16_t RB_FLAGS = comp->dirtyFlags; - const size_t NUM_FLAGS = sizeof(RB_FLAGS) * 8U; - for (size_t i = 0; i < NUM_FLAGS; ++i) - { - // Check if current dirty flag has been set to true - if (RB_FLAGS & 1U << i) - { - switch (i) - { - case 0: // Gravity - { - rigidBody->enableGravity(comp->IsGravityEnabled()); - break; - } - case 1: // Sleeping - { - rigidBody->setIsAllowedToSleep(comp->IsAllowedToSleep()); - break; - } - case 2: // Linear Constraints - { - SetRP3DLinearConstraints(rigidBody, comp->flags); - break; - } - case 3: // Angular Constraints - { - SetRP3DAngularConstraints(rigidBody, comp->flags); - break; - } - case 4: // Type - { - rigidBody->setType(static_cast(comp->GetType())); - break; - } - case 5: // Mass - { - rigidBody->setMass(comp->GetMass()); - break; - } - case 6: // Drag - { - rigidBody->setLinearDamping(comp->GetDrag()); - break; - } - case 7: // Angular Drag - { - rigidBody->setAngularDamping(comp->GetAngularDrag()); - break; - } - case 8: // Linear Velocity - { - rigidBody->setLinearVelocity(comp->GetLinearVelocity()); - break; - } - case 9: // Angular Velocity - { - rigidBody->setAngularVelocity(comp->GetAngularVelocity()); - break; - } - default: break; - } - } - } - } - - void SHPhysicsSystem::SetRP3DLinearConstraints(rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept - { - const rp3d::Vector3 CONSTRAINTS - { - rbFlags & 1U << 2 ? 0.0f : 1.0f, - rbFlags & 1U << 3 ? 0.0f : 1.0f, - rbFlags & 1U << 4 ? 0.0f : 1.0f - }; - - - rp3dRigidBody->setLinearLockAxisFactor(CONSTRAINTS); - } - - void SHPhysicsSystem::SetRP3DAngularConstraints(rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept - { - const rp3d::Vector3 CONSTRAINTS - { - rbFlags & 1U << 5 ? 0.0f : 1.0f, - rbFlags & 1U << 6 ? 0.0f : 1.0f, - rbFlags & 1U << 7 ? 0.0f : 1.0f - }; - - rp3dRigidBody->setAngularLockAxisFactor(CONSTRAINTS); - } - - void SHPhysicsSystem::SyncCollider(SHPhysicsObject const* physicsObject, SHColliderComponent* comp) noexcept - { - int index = 0; - for (auto& [collider, dirty] : comp->colliders) - { - if (!dirty) - continue; - - switch (collider.GetType()) - { - case SHCollider::Type::BOX: - { - SHBoundingBox* box = reinterpret_cast(collider.GetShape()); - - auto* rp3dBoxShape = reinterpret_cast(physicsObject->rp3dBody->getCollider(index)->getCollisionShape()); - rp3dBoxShape->setHalfExtents(box->GetHalfExtents()); - - if (rp3dBoxShape) - { - SHLOG_INFO("Updating box things") - } - - break; - } - case SHCollider::Type::SPHERE: - { - break; - } - default: break; - } - - dirty = false; - ++index; - } - } - SHTransformComponent* SHPhysicsSystem::EnsureTransform(EntityID entityID) { auto* tf = SHComponentManager::GetComponent_s(entityID); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index b5ab36bc..bc6a1ba2 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -82,8 +82,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Init () override; - void Exit () override; + void Init () override; + void Exit () override; void AddRigidBody (EntityID entityID) noexcept; void AddCollider (EntityID entityID) noexcept; @@ -101,7 +101,7 @@ namespace SHADE void AddTorque (EntityID entityID, const SHVec3& torque) const noexcept; void AddRelativeTorque (EntityID entityID, const SHVec3& relativeTorque) const noexcept; - void AddCollisionShape (EntityID entityID, SHShape* shape); + void AddCollisionShape (EntityID entityID, SHCollider* collider); void RemoveCollisionShape (EntityID entityID, int index); /*---------------------------------------------------------------------------------*/ @@ -188,6 +188,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHPhysicsObject* CreatePhysicsObject (EntityID entityID) noexcept; SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + void DestroyPhysicsObject (EntityID entityID) noexcept; void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; void SyncRigidBodyComponents (std::vector& denseArray) noexcept; @@ -195,12 +196,6 @@ namespace SHADE void SyncTransforms () noexcept; // TODO(Diren): Trigger handling - static void SyncRigidBody (SHPhysicsObject const* physicsObject, const SHRigidBodyComponent* comp) noexcept; - static void SetRP3DLinearConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; - static void SetRP3DAngularConstraints (rp3d::RigidBody const* rp3dRigidBody, uint8_t rbFlags) noexcept; - - static void SyncCollider (SHPhysicsObject const* physicsObject, SHColliderComponent* comp) noexcept; - // TODO(Diren): Remove when responsibility shifted to editor SHTransformComponent* EnsureTransform (EntityID entityID); }; From 2fa71f0fd973db9494ce1ef7a91f29c1d675aedc Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 12 Oct 2022 19:12:34 +0800 Subject: [PATCH 335/793] Added Ray --- .../src/Math/Geometry/SHBoundingBox.cpp | 5 ++ .../src/Math/Geometry/SHBoundingBox.h | 3 +- SHADE_Engine/src/Math/Geometry/SHShape.h | 7 ++- SHADE_Engine/src/Math/SHMatrix.cpp | 33 ++++++++++ SHADE_Engine/src/Math/SHMatrix.h | 20 ++++++- SHADE_Engine/src/Math/SHRay.cpp | 60 +++++++++++++++++++ SHADE_Engine/src/Math/SHRay.h | 54 +++++++++++++++++ 7 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 SHADE_Engine/src/Math/SHRay.cpp create mode 100644 SHADE_Engine/src/Math/SHRay.h diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index 3abcc315..72b46819 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -201,6 +201,11 @@ namespace SHADE return true; } + bool SHBoundingBox::Raycast(const SHVec3& SHRay, float& distance) noexcept + { + return false; + } + bool SHBoundingBox::Contains(const SHBoundingBox& rhs) const noexcept { const SHVec3 V = SHVec3::Abs(rhs.center - center); diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index a89c5965..2ad5f1ed 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -64,7 +64,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; + [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; + [[nodiscard]] bool Raycast (const SHVec3& SHRay, float& distance) noexcept override; [[nodiscard]] bool Contains (const SHBoundingBox& rhs) const noexcept; [[nodiscard]] float Volume () const noexcept; diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index e33ca583..204d4e0c 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -11,8 +11,10 @@ #pragma once // Project Headers -#include "Math/Transform/SHTransform.h" #include "SH_API.h" +#include "Math/Transform/SHTransform.h" +#include "Math/SHRay.h" + namespace SHADE { @@ -69,7 +71,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] virtual bool TestPoint (const SHVec3& point) noexcept = 0; + [[nodiscard]] virtual bool TestPoint (const SHVec3& point) noexcept = 0; + [[nodiscard]] virtual bool Raycast (const SHVec3& SHRay, float& distance) noexcept = 0; protected: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHMatrix.cpp b/SHADE_Engine/src/Math/SHMatrix.cpp index 94c17914..571fa4e0 100644 --- a/SHADE_Engine/src/Math/SHMatrix.cpp +++ b/SHADE_Engine/src/Math/SHMatrix.cpp @@ -334,6 +334,39 @@ namespace SHADE return ss.str(); } + bool SHMatrix::Decompose(SHVec3& translation, SHVec3& rotation, SHVec3& scale) const noexcept + { + XMVECTOR s, r, t; + const XMMATRIX M = XMLoadFloat4x4(this); + + if (!XMMatrixDecompose(&s, &r, &t, M)) + return false; + + SHQuaternion orientation; + + XMStoreFloat3(&scale, s); + XMStoreFloat4(&orientation, r); + XMStoreFloat3(&translation, t); + + rotation = orientation.ToEuler(); + + return true; + } + + bool SHMatrix::Decompose(SHVec3& translation, SHQuaternion& orientation, SHVec3& scale) const noexcept + { + XMVECTOR s, r, t; + const XMMATRIX M = XMLoadFloat4x4(this); + + if (!XMMatrixDecompose(&s, &r, &t, M)) + return false; + + XMStoreFloat3(&scale, s); + XMStoreFloat4(&orientation, r); + XMStoreFloat3(&translation, t); + + return true; + } /*-----------------------------------------------------------------------------------*/ /* Static Function Member Definitions */ diff --git a/SHADE_Engine/src/Math/SHMatrix.h b/SHADE_Engine/src/Math/SHMatrix.h index 3666fbe6..7a662478 100644 --- a/SHADE_Engine/src/Math/SHMatrix.h +++ b/SHADE_Engine/src/Math/SHMatrix.h @@ -16,7 +16,6 @@ // Project Headers #include "SH_API.h" #include "Vector/SHVec4.h" -#include "SH_API.h" namespace SHADE { @@ -25,7 +24,6 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ class SHVec2; class SHVec3; - class SHVec4; class SHQuaternion; /*-----------------------------------------------------------------------------------*/ @@ -109,6 +107,24 @@ namespace SHADE [[nodiscard]] float Determinant () const noexcept; [[nodiscard]] std::string ToString () const noexcept; + /** + * @brief Decomposes a transformation matrix into translation, euler angles and scale. + * @param[out] scale The scaling factor of the matrix. + * @param[out] rotation The euler angles of the matrix. + * @param[out] translation The translation of the matrix. + * @return True if decomposition was successful. + */ + bool Decompose (SHVec3& translation, SHVec3& rotation, SHVec3& scale) const noexcept; + + /** + * @brief Decomposes a transformation matrix into translation, orientation and scale. + * @param[out] scale The scaling factor of the matrix. + * @param[out] orientation The orientation of the matrix. + * @param[out] translation The translation of the matrix. + * @return True if decomposition was successful. + */ + bool Decompose (SHVec3& translation, SHQuaternion& orientation, SHVec3& scale) const noexcept; + /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHRay.cpp b/SHADE_Engine/src/Math/SHRay.cpp new file mode 100644 index 00000000..87f12b81 --- /dev/null +++ b/SHADE_Engine/src/Math/SHRay.cpp @@ -0,0 +1,60 @@ +/**************************************************************************************** + * \file SHRay.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Ray. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHRay.h" + +using namespace DirectX; + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHRay::SHRay() noexcept + : direction { 0.0f, 0.0f, 1.0f } + {} + + SHRay::SHRay(const SHVec3& pos, const SHVec3& dir) noexcept + : position { pos } + , direction { dir } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHRay::operator==(const SHRay& rhs) noexcept + { + const XMVECTOR LHS_POS = XMLoadFloat3(&position); + const XMVECTOR RHS_POS = XMLoadFloat3(&rhs.position); + + const XMVECTOR LHS_DIR = XMLoadFloat3(&direction); + const XMVECTOR RHS_DIR = XMLoadFloat3(&rhs.direction); + + return XMVector3Equal(LHS_POS, RHS_POS) && XMVector3NotEqual(LHS_DIR, RHS_DIR); + } + + bool SHRay::operator!=(const SHRay& rhs) noexcept + { + const XMVECTOR LHS_POS = XMLoadFloat3(&position); + const XMVECTOR RHS_POS = XMLoadFloat3(&rhs.position); + + const XMVECTOR LHS_DIR = XMLoadFloat3(&direction); + const XMVECTOR RHS_DIR = XMLoadFloat3(&rhs.direction); + + return XMVector3NotEqual(LHS_POS, RHS_POS) || XMVector3NotEqual(LHS_DIR, RHS_DIR); + } + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHRay.h b/SHADE_Engine/src/Math/SHRay.h new file mode 100644 index 00000000..29d55b16 --- /dev/null +++ b/SHADE_Engine/src/Math/SHRay.h @@ -0,0 +1,54 @@ +/**************************************************************************************** + * \file SHRay.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Ray. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "SH_API.h" +#include "Vector/SHVec3.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SH_API SHRay + { + public: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + SHVec3 position; + SHVec3 direction; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHRay() noexcept; + SHRay(const SHVec3& pos, const SHVec3& dir) noexcept; + SHRay(const SHRay& rhs) noexcept = default; + SHRay(SHRay&& rhs) noexcept = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHRay& operator= (const SHRay& rhs) noexcept = default; + SHRay& operator= (SHRay&& rhs) noexcept = default; + + [[nodiscard]] bool operator==(const SHRay& rhs) noexcept; + [[nodiscard]] bool operator!=(const SHRay& rhs) noexcept; + }; +} // namespace SHADE \ No newline at end of file From d95dbd5ce6a420f42ddb4458a9f8b6228399d07d Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 12 Oct 2022 21:59:34 +0800 Subject: [PATCH 336/793] Reworked Bounding Boxes --- .../src/Math/Geometry/SHBoundingBox.cpp | 196 +++++++----------- .../src/Math/Geometry/SHBoundingBox.h | 62 +++--- SHADE_Engine/src/Math/Geometry/SHShape.h | 4 +- SHADE_Engine/src/Math/Vector/SHVec2.cpp | 110 +++------- SHADE_Engine/src/Math/Vector/SHVec2.h | 9 +- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 128 ++++-------- SHADE_Engine/src/Math/Vector/SHVec3.h | 3 + SHADE_Engine/src/Math/Vector/SHVec4.cpp | 144 ++++--------- SHADE_Engine/src/Math/Vector/SHVec4.h | 7 +- 9 files changed, 242 insertions(+), 421 deletions(-) diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index 72b46819..11a14eed 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -14,6 +14,9 @@ #include "SHBoundingBox.h" // Project Headers #include "Math/SHMathHelpers.h" +#include "Math/SHRay.h" + +using namespace DirectX; namespace SHADE { @@ -21,89 +24,56 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ + SHBoundingBox::SHBoundingBox() noexcept + { + type = Type::BOUNDING_BOX; + } + SHBoundingBox::SHBoundingBox(const SHVec3& c, const SHVec3& hE) noexcept - : SHShape {} - , center { c } - , halfExtents { hE } - { - type = Type::BOUNDING_BOX; - } - - SHBoundingBox::SHBoundingBox(const SHVec3* vertices, size_t numVertices) noexcept - : SHShape {} { type = Type::BOUNDING_BOX; - if (vertices == nullptr || numVertices < 2) - { - SHLOG_ERROR("Insufficient number of vertices passed into bounding box constructor!") - return; - } - - SHVec3 min { std::numeric_limits::max() }; - SHVec3 max { std::numeric_limits::min() }; - - for (size_t i = 0; i < numVertices; ++i) - { - const SHVec3& v = vertices[i]; - - min.x = SHMath::Min(min.x, v.x); - min.y = SHMath::Min(min.y, v.y); - min.z = SHMath::Min(min.z, v.z); - - max.x = SHMath::Max(max.x, v.x); - max.y = SHMath::Max(max.y, v.y); - max.z = SHMath::Max(max.z, v.z); - } - - center = SHVec3::Lerp(min, max, 0.5f); - halfExtents = SHVec3::Abs((max - min) * 0.5f); + Center = c; + Extents = hE; } - SHBoundingBox::SHBoundingBox(const SHBoundingBox* boxes, size_t numBoxes) noexcept - : SHShape {} - { - type = Type::BOUNDING_BOX; - - if (boxes == nullptr || numBoxes == 0) - { - SHLOG_ERROR("Insufficient number of boxes passed into bounding box constructor!") - return; - } - - center = boxes->center; - halfExtents = boxes->halfExtents; - - for (size_t i = 1; i < numBoxes; ++i) - *this = Combine(*this, boxes[i]); - } SHBoundingBox::SHBoundingBox(const SHBoundingBox& rhs) noexcept - : SHShape {} - , center { rhs.center } - , halfExtents { rhs.halfExtents } { + if (this == &rhs) + return; + type = Type::BOUNDING_BOX; + + Center = rhs.Center; + Extents = rhs.Extents; } SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept - : SHShape {} - , center { rhs.center } - , halfExtents { rhs.halfExtents } { type = Type::BOUNDING_BOX; + + Center = rhs.Center; + Extents = rhs.Extents; } + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHBoundingBox& SHBoundingBox::operator=(const SHBoundingBox& rhs) noexcept { + if (this == &rhs) + return *this; + if (rhs.type != Type::BOUNDING_BOX) { SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") } else { - center = rhs.center; - halfExtents = rhs.halfExtents; + Center = rhs.Center; + Extents = rhs.Extents; } return *this; @@ -117,8 +87,8 @@ namespace SHADE } else { - center = rhs.center; - halfExtents = rhs.halfExtents; + Center = rhs.Center; + Extents = rhs.Extents; } return *this; @@ -130,22 +100,22 @@ namespace SHADE const SHVec3& SHBoundingBox::GetCenter() const noexcept { - return center; + return Center; } const SHVec3& SHBoundingBox::GetHalfExtents() const noexcept { - return halfExtents; + return Extents; } SHVec3 SHBoundingBox::GetMin() const noexcept { - return center - halfExtents; + return SHVec3{ Center.x - Extents.x, Center.y - Extents.y, Center.z - Extents.z }; } SHVec3 SHBoundingBox::GetMax() const noexcept { - return center + halfExtents; + return SHVec3{ Center.x + Extents.x, Center.y + Extents.y, Center.z + Extents.z }; } /*-----------------------------------------------------------------------------------*/ @@ -154,36 +124,42 @@ namespace SHADE void SHBoundingBox::SetCenter(const SHVec3& newCenter) noexcept { - center = newCenter; + Center = newCenter; } void SHBoundingBox::SetHalfExtents(const SHVec3& newHalfExtents) noexcept { - halfExtents = newHalfExtents; + Extents = newHalfExtents; } void SHBoundingBox::SetMin(const SHVec3& min) noexcept { - const SHVec3 MAX = center + halfExtents; + const SHVec3 MAX = GetMax(); - center = SHVec3::Lerp(min, MAX, 0.5f); - halfExtents = SHVec3::Abs((MAX - min) * 0.5f); + Center = SHVec3::Lerp(min, MAX, 0.5f); + Extents = SHVec3::Abs((MAX - min) * 0.5f); } void SHBoundingBox::SetMax(const SHVec3& max) noexcept { - const SHVec3 MIN = center - halfExtents; + const SHVec3 MIN = GetMin(); - center = SHVec3::Lerp(MIN, max, 0.5f); - halfExtents = SHVec3::Abs((max - MIN) * 0.5f); + Center = SHVec3::Lerp(MIN, max, 0.5f); + Extents = SHVec3::Abs((max - MIN) * 0.5f); } void SHBoundingBox::SetMinMax(const SHVec3& min, const SHVec3& max) noexcept { - center = SHVec3::Lerp(min, max, 0.5f); - halfExtents = SHVec3::Abs((max - min) * 0.5f); + Center = SHVec3::Lerp(min, max, 0.5f); + Extents = SHVec3::Abs((max - min) * 0.5f); } + std::vector SHBoundingBox::GetVertices() const noexcept + { + std::vector vertices{ 8 }; + GetCorners(vertices.data()); + return vertices; + } /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ @@ -191,43 +167,29 @@ namespace SHADE bool SHBoundingBox::TestPoint(const SHVec3& point) noexcept { - const SHVec3 V = SHVec3::Abs(point - center); - for (size_t i = 0; i < SHVec3::SIZE; ++i) - { - if (V[i] > halfExtents[i]) - return false; - } - - return true; + return BoundingBox::Contains(point); } - bool SHBoundingBox::Raycast(const SHVec3& SHRay, float& distance) noexcept + bool SHBoundingBox::Raycast(const SHRay& ray, float& distance) noexcept { - return false; + return BoundingBox::Intersects(ray.position, ray.direction, distance); } bool SHBoundingBox::Contains(const SHBoundingBox& rhs) const noexcept { - const SHVec3 V = SHVec3::Abs(rhs.center - center); - for (size_t i = 0; i < SHVec3::SIZE; ++i) - { - if (V[i] > rhs.halfExtents[i]) - return false; - } - - return true; + return BoundingBox::Contains(rhs); } float SHBoundingBox::Volume() const noexcept { - return 8.0f * (halfExtents.x * halfExtents.y * halfExtents.z); + return 8.0f * (Extents.x * Extents.y * Extents.z); } float SHBoundingBox::SurfaceArea() const noexcept { - return 8.0f * ((halfExtents.x * halfExtents.y) - + (halfExtents.x * halfExtents.z) - + (halfExtents.y * halfExtents.z)); + return 8.0f * ((Extents.x * Extents.y) + + (Extents.x * Extents.z) + + (Extents.y * Extents.z)); } /*-----------------------------------------------------------------------------------*/ @@ -236,37 +198,31 @@ namespace SHADE SHBoundingBox SHBoundingBox::Combine(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept { - if (lhs.Contains(rhs)) - return lhs; - - if (rhs.Contains(lhs)) - return rhs; - - const SHVec3 LHS_MIN = lhs.GetMin(); - const SHVec3 LHS_MAX = lhs.GetMax(); - const SHVec3 RHS_MIN = rhs.GetMin(); - const SHVec3 RHS_MAX = rhs.GetMax(); - - SHVec3 min = SHVec3::Min({ LHS_MIN, RHS_MIN }); - SHVec3 max = SHVec3::Max({ LHS_MAX, RHS_MAX }); - - SHBoundingBox result{ lhs }; - result.SetMinMax(min, max); + SHBoundingBox result; + CreateMerged(result, lhs, rhs); return result; } bool SHBoundingBox::Intersect(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept { - const SHVec3 V = SHVec3::Abs(lhs.center - rhs.center); - const SHVec3 D = lhs.halfExtents + rhs.halfExtents; + return lhs.Intersects(rhs); + } - for (size_t i = 0; i < SHVec3::SIZE; ++i) - { - if (V[i] > D[i]) - return false; - } + SHBoundingBox SHBoundingBox::BuildFromBoxes(const SHBoundingBox* boxes, size_t numBoxes) noexcept + { + SHBoundingBox result; - return true; + for (size_t i = 1; i < numBoxes; ++i) + CreateMerged(result, boxes[i - 1], boxes[i]); + + return result; + } + + SHBoundingBox SHBoundingBox::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept + { + SHBoundingBox result; + CreateFromPoints(result, numVertices, vertices, stride); + return result; } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index 2ad5f1ed..5c38e1b8 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -22,32 +22,43 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - // TODO(Diren): Use DirectX BoundingBox instead of custom - class SH_API SHBoundingBox : public SHShape + class SH_API SHBoundingBox : public SHShape, + private DirectX::BoundingBox { public: + /*---------------------------------------------------------------------------------*/ + /* Static Data Members */ + /*---------------------------------------------------------------------------------*/ + + static constexpr size_t NUM_VERTICES = 8; + /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHBoundingBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; - SHBoundingBox (const SHVec3* vertices, size_t numVertices) noexcept; - SHBoundingBox (const SHBoundingBox* boxes, size_t numBoxes) noexcept; + ~SHBoundingBox () noexcept = default; - SHBoundingBox (const SHBoundingBox& rhs) noexcept; - SHBoundingBox (SHBoundingBox&& rhs) noexcept; + SHBoundingBox () noexcept; + SHBoundingBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; + SHBoundingBox (const SHBoundingBox& rhs) noexcept; + SHBoundingBox (SHBoundingBox&& rhs) noexcept; - SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; - SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; + SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] const SHVec3& GetCenter () const noexcept; - [[nodiscard]] const SHVec3& GetHalfExtents () const noexcept; - [[nodiscard]] SHVec3 GetMin () const noexcept; - [[nodiscard]] SHVec3 GetMax () const noexcept; + [[nodiscard]] const SHVec3& GetCenter () const noexcept; + [[nodsicard]] const SHVec3& GetHalfExtents() const noexcept; + [[nodiscard]] SHVec3 GetMin () const noexcept; + [[nodiscard]] SHVec3 GetMax () const noexcept; + [[nodiscard]] std::vector GetVertices () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ @@ -59,32 +70,25 @@ namespace SHADE void SetMax (const SHVec3& max) noexcept; void SetMinMax (const SHVec3& min, const SHVec3& max) noexcept; - /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; - [[nodiscard]] bool Raycast (const SHVec3& SHRay, float& distance) noexcept override; + [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; + [[nodiscard]] bool Raycast (const SHRay& ray, float& distance) noexcept override; - [[nodiscard]] bool Contains (const SHBoundingBox& rhs) const noexcept; - [[nodiscard]] float Volume () const noexcept; - [[nodiscard]] float SurfaceArea () const noexcept; + [[nodiscard]] bool Contains (const SHBoundingBox& rhs) const noexcept; + [[nodiscard]] float Volume () const noexcept; + [[nodiscard]] float SurfaceArea () const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHBoundingBox Combine (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; - [[nodiscard]] static bool Intersect (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; - - private: - /*---------------------------------------------------------------------------------*/ - /* Data Members */ - /*---------------------------------------------------------------------------------*/ - - SHVec3 center; - SHVec3 halfExtents; + [[nodiscard]] static SHBoundingBox Combine (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; + [[nodiscard]] static bool Intersect (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; + [[nodiscard]] static SHBoundingBox BuildFromBoxes (const SHBoundingBox* boxes, size_t numBoxes) noexcept; + [[nodiscard]] static SHBoundingBox BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; }; diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 204d4e0c..69578cb3 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -71,8 +71,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] virtual bool TestPoint (const SHVec3& point) noexcept = 0; - [[nodiscard]] virtual bool Raycast (const SHVec3& SHRay, float& distance) noexcept = 0; + [[nodiscard]] virtual bool TestPoint (const SHVec3& point) noexcept = 0; + [[nodiscard]] virtual bool Raycast (const SHRay& ray, float& distance) noexcept = 0; protected: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.cpp b/SHADE_Engine/src/Math/Vector/SHVec2.cpp index 545492cb..a71ad0ea 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec2.cpp @@ -38,6 +38,10 @@ namespace SHADE : XMFLOAT2( 0.0f, 0.0f ) {} + SHVec2::SHVec2(const XMFLOAT2& xmfloat2) noexcept + : XMFLOAT2 ( xmfloat2.x, xmfloat2.y ) + {} + SHVec2::SHVec2(float n) noexcept : XMFLOAT2( n, n ) {} @@ -50,6 +54,11 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ + SHVec2::operator XMVECTOR() const noexcept + { + return XMLoadFloat2(this); + } + SHVec2& SHVec2::operator+=(const SHVec2& rhs) noexcept { return *this = *this + rhs; @@ -83,22 +92,16 @@ namespace SHADE SHVec2 SHVec2::operator+(const SHVec2& rhs) const noexcept { SHVec2 result; - - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - XMStoreFloat2(&result, XMVectorAdd(V1, V2)); + XMStoreFloat2(&result, XMVectorAdd(*this, rhs)); return result; } SHVec2 SHVec2::operator-(const SHVec2& rhs) const noexcept { SHVec2 result; - - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - XMStoreFloat2(&result, XMVectorSubtract(V1, V2)); + XMStoreFloat2(&result, XMVectorSubtract(*this, rhs)); return result; } @@ -110,59 +113,43 @@ namespace SHADE SHVec2 SHVec2::operator*(const SHVec2& rhs) const noexcept { SHVec2 result; - - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - XMStoreFloat2(&result, XMVectorMultiply(V1, V2)); + XMStoreFloat2(&result, XMVectorMultiply(*this, rhs)); return result; } SHVec2 SHVec2::operator*(float rhs) const noexcept { SHVec2 result; - - const XMVECTOR V = XMLoadFloat2(this); - XMStoreFloat2(&result, XMVectorScale(V, rhs)); + XMStoreFloat2(&result, XMVectorScale(*this, rhs)); return result; } SHVec2 SHVec2::operator/(const SHVec2& rhs) const noexcept { SHVec2 result; - - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - XMStoreFloat2(&result, XMVectorDivide(V1, V2)); + XMStoreFloat2(&result, XMVectorDivide(*this, rhs)); return result; } SHVec2 SHVec2::operator/(float rhs) const noexcept { SHVec2 result; - - const XMVECTOR V = XMLoadFloat2(this); - XMStoreFloat2(&result, XMVectorScale(V, 1.0f / rhs)); + XMStoreFloat2(&result, XMVectorScale(*this, 1.0f / rhs)); return result; } bool SHVec2::operator==(const SHVec2& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - - return XMVector2Equal(V1, V2); + return XMVector2Equal(*this, rhs); } bool SHVec2::operator!=(const SHVec2& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - - return XMVector2NotEqual(V1, V2); + return XMVector2NotEqual(*this, rhs); } float& SHVec2::operator[](int index) @@ -216,10 +203,8 @@ namespace SHADE SHVec2 operator* (float lhs, const SHVec2& rhs) noexcept { SHVec2 result; - - const XMVECTOR V = XMLoadFloat2(&rhs); - XMStoreFloat2(&result, XMVectorScale(V, lhs)); + XMStoreFloat2(&result, XMVectorScale(rhs, lhs)); return result; } @@ -229,16 +214,12 @@ namespace SHADE float SHVec2::Length() const noexcept { - const XMVECTOR V = XMLoadFloat2(this); - - return XMVectorGetX(XMVector2Length(V)); + return XMVectorGetX(XMVector2Length(*this)); } float SHVec2::LengthSquared() const noexcept { - const XMVECTOR V = XMLoadFloat2(this); - - return XMVectorGetX(XMVector2LengthSq(V)); + return XMVectorGetX(XMVector2LengthSq(*this)); } std::string SHVec2::ToString() const noexcept @@ -251,20 +232,14 @@ namespace SHADE float SHVec2::Dot(const SHVec2& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - - return XMVectorGetX(XMVector2Dot(V1, V2)); + return XMVectorGetX(XMVector2Dot(*this, rhs)); } SHVec2 SHVec2::Cross(const SHVec2& rhs) const noexcept { SHVec2 result; - const XMVECTOR V1 = XMLoadFloat2(this); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - - XMStoreFloat2(&result, XMVector2Cross(V1, V2)); + XMStoreFloat2(&result, XMVector2Cross(*this, rhs)); return result; } @@ -276,9 +251,7 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V = XMLoadFloat2(&vec2); - - XMStoreFloat2(&result, XMVector2Normalize(V)); + XMStoreFloat2(&result, XMVector2Normalize(vec2)); return result; } @@ -297,10 +270,10 @@ namespace SHADE SHVec2 result; - XMVECTOR min = XMLoadFloat2(&(*vec2s.begin())); + XMVECTOR min = *vec2s.begin(); for (auto it = vec2s.begin() + 1; it != vec2s.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat2(&(*it)); + const XMVECTOR tmp = *it; min = XMVectorMin(min, tmp); } @@ -318,10 +291,10 @@ namespace SHADE SHVec2 result; - XMVECTOR max = XMLoadFloat2(&(*vec2s.begin())); + XMVECTOR max = *vec2s.begin(); for (auto it = vec2s.begin() + 1; it != vec2s.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat2(&(*it)); + const XMVECTOR tmp = *it; max = XMVectorMax(max, tmp); } @@ -333,11 +306,7 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V = XMLoadFloat2(&v); - const XMVECTOR MIN = XMLoadFloat2(&vMin); - const XMVECTOR MAX = XMLoadFloat2(&vMax); - - XMStoreFloat2(&result, XMVectorClamp(V, MIN, MAX)); + XMStoreFloat2(&result, XMVectorClamp(v, vMin, vMax)); return result; } @@ -345,10 +314,7 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V1 = XMLoadFloat2(&a); - const XMVECTOR V2 = XMLoadFloat2(&b); - - XMStoreFloat2(&result, XMVectorLerp(V1, V2, t)); + XMStoreFloat2(&result, XMVectorLerp(a, b, t)); return result; } @@ -369,10 +335,7 @@ namespace SHADE float SHVec2::Angle(const SHVec2& lhs, const SHVec2& rhs) noexcept { - const XMVECTOR V1 = XMLoadFloat2(&lhs); - const XMVECTOR V2 = XMLoadFloat2(&rhs); - - return XMVectorGetX(XMVector2AngleBetweenVectors(V1, V2)); + return XMVectorGetX(XMVector2AngleBetweenVectors(lhs, rhs)); } float SHVec2::Dot(const SHVec2& lhs, const SHVec2& rhs) noexcept @@ -384,11 +347,10 @@ namespace SHADE { SHVec2 result; - const XMVECTOR U = XMLoadFloat2(&u); const float V_DOT_U = Dot(v, u); const float U_LENSQ = u.LengthSquared(); - XMStoreFloat2(&result, XMVectorScale(U, V_DOT_U / U_LENSQ)); + XMStoreFloat2(&result, XMVectorScale(u, V_DOT_U / U_LENSQ)); return result; } @@ -396,10 +358,8 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V = XMLoadFloat2(&v); - const XMVECTOR N = XMLoadFloat2(&normal); - XMStoreFloat2(&result, XMVector2Reflect(V, N)); + XMStoreFloat2(&result, XMVector2Reflect(v, normal)); return result; } @@ -407,10 +367,9 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V = XMLoadFloat2(&v); const XMMATRIX R = XMMatrixRotationZ(angleInRad); - XMStoreFloat2(&result, XMVector2Transform(V, R)); + XMStoreFloat2(&result, XMVector2Transform(v, R)); return result; } @@ -418,10 +377,9 @@ namespace SHADE { SHVec2 result; - const XMVECTOR V = XMLoadFloat2(&v); const XMMATRIX TF = XMLoadFloat4x4(&transformMtx); - XMStoreFloat2(&result, XMVector2TransformCoord(V, TF)); + XMStoreFloat2(&result, XMVector2TransformCoord(v, TF)); return result; } diff --git a/SHADE_Engine/src/Math/Vector/SHVec2.h b/SHADE_Engine/src/Math/Vector/SHVec2.h index 17642126..7fed19b4 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec2.h +++ b/SHADE_Engine/src/Math/Vector/SHVec2.h @@ -52,9 +52,10 @@ namespace SHADE SHVec2 (SHVec2&& rhs) = default; ~SHVec2 () = default; - SHVec2 () noexcept; - SHVec2 (float n) noexcept; - SHVec2 (float x, float y) noexcept; + SHVec2 () noexcept; + SHVec2 (const XMFLOAT2& xmfloat2) noexcept; + SHVec2 (float n) noexcept; + SHVec2 (float x, float y) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -63,6 +64,8 @@ namespace SHADE SHVec2& operator= (const SHVec2& rhs) = default; SHVec2& operator= (SHVec2&& rhs) = default; + operator DirectX::XMVECTOR () const noexcept; + SHVec2& operator+= (const SHVec2& rhs) noexcept; SHVec2& operator-= (const SHVec2& rhs) noexcept; SHVec2& operator*= (const SHVec2& rhs) noexcept; diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 1bcb47b3..45fe4f61 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -43,6 +43,10 @@ namespace SHADE : XMFLOAT3( 0.0f, 0.0f, 0.0f ) {} + SHVec3::SHVec3(const XMFLOAT3& xmfloat3) noexcept + : XMFLOAT3 ( xmfloat3.x, xmfloat3.y, xmfloat3.z ) + {} + SHVec3::SHVec3(float n) noexcept : XMFLOAT3( n, n, n ) {} @@ -55,6 +59,12 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ + SHVec3::operator XMVECTOR() const noexcept + { + return XMLoadFloat3(this); + } + + SHVec3& SHVec3::operator+=(const SHVec3& rhs) noexcept { return *this = *this + rhs; @@ -88,22 +98,16 @@ namespace SHADE SHVec3 SHVec3::operator+(const SHVec3& rhs) const noexcept { SHVec3 result; - - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - XMStoreFloat3(&result, XMVectorAdd(V1, V2)); + XMStoreFloat3(&result, XMVectorAdd(*this, rhs)); return result; } SHVec3 SHVec3::operator-(const SHVec3& rhs) const noexcept { SHVec3 result; - - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - XMStoreFloat3(&result, XMVectorSubtract(V1, V2)); + XMStoreFloat3(&result, XMVectorSubtract(*this, rhs)); return result; } @@ -116,59 +120,43 @@ namespace SHADE SHVec3 SHVec3::operator*(const SHVec3& rhs) const noexcept { SHVec3 result; - - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - XMStoreFloat3(&result, XMVectorMultiply(V1, V2)); + XMStoreFloat3(&result, XMVectorMultiply(*this, rhs)); return result; } SHVec3 SHVec3::operator*(float rhs) const noexcept { SHVec3 result; - - const XMVECTOR V = XMLoadFloat3(this); - XMStoreFloat3(&result, XMVectorScale(V, rhs)); + XMStoreFloat3(&result, XMVectorScale(*this, rhs)); return result; } SHVec3 SHVec3::operator/(const SHVec3& rhs) const noexcept { SHVec3 result; - - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - XMStoreFloat3(&result, XMVectorDivide(V1, V2)); + XMStoreFloat3(&result, XMVectorDivide(*this, rhs)); return result; } SHVec3 SHVec3::operator/(float rhs) const noexcept { SHVec3 result; - - const XMVECTOR V = XMLoadFloat3(this); - XMStoreFloat3(&result, XMVectorScale(V, 1.0f / rhs)); + XMStoreFloat3(&result, XMVectorScale(*this, 1.0f / rhs)); return result; } bool SHVec3::operator==(const SHVec3& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - - return XMVector3Equal(V1, V2); + return XMVector3Equal(*this, rhs); } bool SHVec3::operator!=(const SHVec3& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - - return XMVector3NotEqual(V1, V2); + return XMVector3NotEqual(*this, rhs); } float& SHVec3::operator[](int index) @@ -226,10 +214,8 @@ namespace SHADE SHVec3 operator* (float lhs, const SHVec3& rhs) noexcept { SHVec3 result; - - const XMVECTOR V = XMLoadFloat3(&rhs); - XMStoreFloat3(&result, XMVectorScale(V, lhs)); + XMStoreFloat3(&result, XMVectorScale(rhs, lhs)); return result; } @@ -239,16 +225,12 @@ namespace SHADE float SHVec3::Length() const noexcept { - const XMVECTOR V = XMLoadFloat3(this); - - return XMVectorGetX(XMVector3Length(V)); + return XMVectorGetX(XMVector3Length(*this)); } float SHVec3::LengthSquared() const noexcept { - const XMVECTOR V = XMLoadFloat3(this); - - return XMVectorGetX(XMVector3LengthSq(V)); + return XMVectorGetX(XMVector3LengthSq(*this)); } std::string SHVec3::ToString() const noexcept @@ -261,20 +243,14 @@ namespace SHADE float SHVec3::Dot(const SHVec3& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - - return XMVectorGetX(XMVector3Dot(V1, V2)); + return XMVectorGetX(XMVector3Dot(*this, rhs)); } SHVec3 SHVec3::Cross(const SHVec3& rhs) const noexcept { SHVec3 result; - const XMVECTOR V1 = XMLoadFloat3(this); - const XMVECTOR V2 = XMLoadFloat3(&rhs); - - XMStoreFloat3(&result, XMVector3Cross(V1, V2)); + XMStoreFloat3(&result, XMVector3Cross(*this, rhs)); return result; } @@ -286,9 +262,7 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); - - XMStoreFloat3(&result, XMVector3Normalize(V)); + XMStoreFloat3(&result, XMVector3Normalize(v)); return result; } @@ -307,10 +281,10 @@ namespace SHADE SHVec3 result; - XMVECTOR min = XMLoadFloat3(&(*vs.begin())); + XMVECTOR min = *vs.begin(); for (auto it = vs.begin() + 1; it != vs.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat3(&(*it)); + const XMVECTOR tmp = *it; min = XMVectorMin(min, tmp); } @@ -328,10 +302,10 @@ namespace SHADE SHVec3 result; - XMVECTOR max = XMLoadFloat3(&(*vs.begin())); + XMVECTOR max = *vs.begin(); for (auto it = vs.begin() + 1; it != vs.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat3(&(*it)); + const XMVECTOR tmp = *it; max = XMVectorMax(max, tmp); } @@ -343,11 +317,7 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); - const XMVECTOR MIN = XMLoadFloat3(&vMin); - const XMVECTOR MAX = XMLoadFloat3(&vMax); - - XMStoreFloat3(&result, XMVectorClamp(V, MIN, MAX)); + XMStoreFloat3(&result, XMVectorClamp(v, vMin, vMax)); return result; } @@ -355,10 +325,7 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V1 = XMLoadFloat3(&a); - const XMVECTOR V2 = XMLoadFloat3(&b); - - XMStoreFloat3(&result, XMVectorLerp(V1, V2, t)); + XMStoreFloat3(&result, XMVectorLerp(a, b, t)); return result; } @@ -382,7 +349,7 @@ namespace SHADE const XMVECTOR V1 = XMLoadFloat3(&lhs); const XMVECTOR V2 = XMLoadFloat3(&rhs); - return XMVectorGetX(XMVector3AngleBetweenVectors(V1, V2)); + return XMVectorGetX(XMVector3AngleBetweenVectors(lhs, rhs)); } float SHVec3::Dot(const SHVec3& lhs, const SHVec3& rhs) noexcept @@ -399,22 +366,18 @@ namespace SHADE { SHVec3 result; - const XMVECTOR U = XMLoadFloat3(&u); const float V_DOT_U = Dot(v, u); const float U_LENSQ = u.LengthSquared(); - XMStoreFloat3(&result, XMVectorScale(U, V_DOT_U / U_LENSQ)); + XMStoreFloat3(&result, XMVectorScale(u, V_DOT_U / U_LENSQ)); return result; } SHVec3 SHVec3::Reflect(const SHVec3& v, const SHVec3& normal) noexcept { SHVec3 result; - - const XMVECTOR V = XMLoadFloat3(&v); - const XMVECTOR N = XMLoadFloat3(&normal); - XMStoreFloat3(&result, XMVector3Reflect(V, N)); + XMStoreFloat3(&result, XMVector3Reflect(v, normal)); return result; } @@ -422,12 +385,9 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); + const XMVECTOR Q = XMQuaternionRotationAxis(axis, angleInRad); - const XMVECTOR AXIS = XMLoadFloat3(&axis); - const XMVECTOR Q = XMQuaternionRotationAxis(AXIS, angleInRad); - - XMStoreFloat3(&result, XMVector3Rotate(V, Q)); + XMStoreFloat3(&result, XMVector3Rotate(v, Q)); return result; } @@ -435,10 +395,9 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); - const XMMATRIX R = XMMatrixRotationX(angleInRad); + const XMMATRIX R = XMMatrixRotationX(angleInRad); - XMStoreFloat3(&result, XMVector3TransformCoord(V, R)); + XMStoreFloat3(&result, XMVector3TransformCoord(v, R)); return result; } @@ -446,10 +405,9 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); - const XMMATRIX R = XMMatrixRotationY(angleInRad); + const XMMATRIX R = XMMatrixRotationY(angleInRad); - XMStoreFloat3(&result, XMVector3TransformCoord(V, R)); + XMStoreFloat3(&result, XMVector3TransformCoord(v, R)); return result; } @@ -457,10 +415,9 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); - const XMMATRIX R = XMMatrixRotationZ(angleInRad); + const XMMATRIX R = XMMatrixRotationZ(angleInRad); - XMStoreFloat3(&result, XMVector3TransformCoord(V, R)); + XMStoreFloat3(&result, XMVector3TransformCoord(v, R)); return result; } @@ -468,10 +425,9 @@ namespace SHADE { SHVec3 result; - const XMVECTOR V = XMLoadFloat3(&v); const XMMATRIX TF = XMLoadFloat4x4(&transformMtx); - XMStoreFloat3(&result, XMVector3TransformCoord(V, TF)); + XMStoreFloat3(&result, XMVector3TransformCoord(v, TF)); return result; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index cc0e043e..fb9d0d4a 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -58,6 +58,7 @@ namespace SHADE ~SHVec3 () = default; SHVec3 () noexcept; + SHVec3 (const XMFLOAT3& xmfloat3) noexcept; SHVec3 (float n) noexcept; SHVec3 (float x, float y, float z) noexcept; @@ -68,6 +69,8 @@ namespace SHADE SHVec3& operator= (const SHVec3& rhs) = default; SHVec3& operator= (SHVec3&& rhs) = default; + operator DirectX::XMVECTOR () const noexcept; + SHVec3& operator+= (const SHVec3& rhs) noexcept; SHVec3& operator-= (const SHVec3& rhs) noexcept; SHVec3& operator*= (const SHVec3& rhs) noexcept; diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index d1c87865..bcf2ef97 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -38,6 +38,10 @@ namespace SHADE : XMFLOAT4( 0.0f, 0.0f, 0.0f, 0.0f ) {} + SHVec4::SHVec4(const XMFLOAT4& xmfloat4) noexcept + : XMFLOAT4( xmfloat4.x, xmfloat4.y, xmfloat4.z, xmfloat4.w ) + {} + SHVec4::SHVec4(float _x, float _y, float _z, float _w) noexcept : XMFLOAT4( _x, _y, _z, _w ) {} @@ -46,6 +50,11 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ + SHVec4::operator XMVECTOR() const noexcept + { + return XMLoadFloat4(this); + } + SHVec4& SHVec4::operator+=(const SHVec4& rhs) noexcept { return *this = *this + rhs; @@ -79,22 +88,16 @@ namespace SHADE SHVec4 SHVec4::operator+(const SHVec4& rhs) const noexcept { SHVec4 result; - - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - XMStoreFloat4(&result, XMVectorAdd(V1, V2)); + XMStoreFloat4(&result, XMVectorAdd(*this, rhs)); return result; } SHVec4 SHVec4::operator-(const SHVec4& rhs) const noexcept { SHVec4 result; - - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - XMStoreFloat4(&result, XMVectorSubtract(V1, V2)); + XMStoreFloat4(&result, XMVectorSubtract(*this, rhs)); return result; } @@ -106,59 +109,43 @@ namespace SHADE SHVec4 SHVec4::operator*(const SHVec4& rhs) const noexcept { SHVec4 result; - - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - XMStoreFloat4(&result, XMVectorMultiply(V1, V2)); + XMStoreFloat4(&result, XMVectorMultiply(*this, rhs)); return result; } SHVec4 SHVec4::operator*(float rhs) const noexcept { SHVec4 result; - - const XMVECTOR V = XMLoadFloat4(this); - XMStoreFloat4(&result, XMVectorScale(V, rhs)); + XMStoreFloat4(&result, XMVectorScale(*this, rhs)); return result; } SHVec4 SHVec4::operator/(const SHVec4& rhs) const noexcept { SHVec4 result; - - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - XMStoreFloat4(&result, XMVectorDivide(V1, V2)); + XMStoreFloat4(&result, XMVectorDivide(*this, rhs)); return result; } SHVec4 SHVec4::operator/(float rhs) const noexcept { SHVec4 result; - - const XMVECTOR V = XMLoadFloat4(this); - XMStoreFloat4(&result, XMVectorScale(V, 1.0f / rhs)); + XMStoreFloat4(&result, XMVectorScale(*this, 1.0f / rhs)); return result; } bool SHVec4::operator==(const SHVec4& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVector4Equal(V1, V2); + return XMVector4Equal(*this, rhs); } bool SHVec4::operator!=(const SHVec4& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVector4NotEqual(V1, V2); + return XMVector4NotEqual(*this, rhs); } float& SHVec4::operator[](int index) @@ -220,10 +207,8 @@ namespace SHADE SHVec4 operator* (float lhs, const SHVec4& rhs) noexcept { SHVec4 result; - - const XMVECTOR V = XMLoadFloat4(&rhs); - XMStoreFloat4(&result, XMVectorScale(V, lhs)); + XMStoreFloat4(&result, XMVectorScale(rhs, lhs)); return result; } @@ -233,30 +218,22 @@ namespace SHADE float SHVec4::Length() const noexcept { - const XMVECTOR V = XMLoadFloat4(this); - - return XMVectorGetX(XMVector4Length(V)); + return XMVectorGetX(XMVector4Length(*this)); } float SHVec4::Length3D() const noexcept { - const XMVECTOR V = XMLoadFloat4(this); - - return XMVectorGetX(XMVector3Length(V)); + return XMVectorGetX(XMVector3Length(*this)); } float SHVec4::LengthSquared() const noexcept { - const XMVECTOR V = XMLoadFloat4(this); - - return XMVectorGetX(XMVector4LengthSq(V)); + return XMVectorGetX(XMVector4LengthSq(*this)); } float SHVec4::LengthSquared3D() const noexcept { - const XMVECTOR V = XMLoadFloat4(this); - - return XMVectorGetX(XMVector3LengthSq(V)); + return XMVectorGetX(XMVector3LengthSq(*this)); } std::string SHVec4::ToString() const noexcept @@ -269,28 +246,19 @@ namespace SHADE float SHVec4::Dot(const SHVec4& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVectorGetX(XMVector4Dot(V1, V2)); + return XMVectorGetX(XMVector4Dot(*this, rhs)); } float SHVec4::Dot3D(const SHVec4& rhs) const noexcept { - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVectorGetX(XMVector3Dot(V1, V2)); + return XMVectorGetX(XMVector3Dot(*this, rhs)); } SHVec4 SHVec4::Cross3D(const SHVec4& rhs) const noexcept { SHVec4 result; - const XMVECTOR V1 = XMLoadFloat4(this); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - XMStoreFloat4(&result, XMVector3Cross(V1, V2)); + XMStoreFloat4(&result, XMVector3Cross(*this, rhs)); result.w = 1.0f; return result; } @@ -299,11 +267,7 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V3 = XMLoadFloat4(this); - const XMVECTOR V1 = XMLoadFloat4(&v1); - const XMVECTOR V2 = XMLoadFloat4(&v2); - - XMStoreFloat4(&result, XMVector4Cross(V3, V1, V2)); + XMStoreFloat4(&result, XMVector4Cross(*this, v1, v2)); return result; } @@ -315,9 +279,7 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V = XMLoadFloat4(&v); - - XMStoreFloat4(&result, XMVector4Normalize(V)); + XMStoreFloat4(&result, XMVector4Normalize(v)); return result; } @@ -325,9 +287,7 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V = XMLoadFloat4(&v); - - XMStoreFloat4(&result, XMVector3Normalize(V)); + XMStoreFloat4(&result, XMVector3Normalize(v)); result.w = 1.0f; return result; } @@ -347,10 +307,10 @@ namespace SHADE SHVec4 result; - XMVECTOR min = XMLoadFloat4(&(*vs.begin())); + XMVECTOR min = *vs.begin(); for (auto it = vs.begin() + 1; it != vs.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat4(&(*it)); + const XMVECTOR tmp = *it; min = XMVectorMin(min, tmp); } @@ -368,10 +328,10 @@ namespace SHADE SHVec4 result; - XMVECTOR max = XMLoadFloat4(&(*vs.begin())); + XMVECTOR max = *vs.begin(); for (auto it = vs.begin() + 1; it != vs.end(); ++it) { - const XMVECTOR tmp = XMLoadFloat4(&(*it)); + const XMVECTOR tmp = *it; max = XMVectorMax(max, tmp); } @@ -383,11 +343,7 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V = XMLoadFloat4(&v); - const XMVECTOR MIN = XMLoadFloat4(&vMin); - const XMVECTOR MAX = XMLoadFloat4(&vMax); - - XMStoreFloat4(&result, XMVectorClamp(V, MIN, MAX)); + XMStoreFloat4(&result, XMVectorClamp(v, vMin, vMax)); return result; } @@ -395,10 +351,7 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V1 = XMLoadFloat4(&a); - const XMVECTOR V2 = XMLoadFloat4(&b); - - XMStoreFloat4(&result, XMVectorLerp(V1, V2, t)); + XMStoreFloat4(&result, XMVectorLerp(a, b, t)); return result; } @@ -429,18 +382,12 @@ namespace SHADE float SHVec4::Angle(const SHVec4& lhs, const SHVec4& rhs) noexcept { - const XMVECTOR V1 = XMLoadFloat4(&lhs); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVectorGetX(XMVector4AngleBetweenVectors(V1, V2)); + return XMVectorGetX(XMVector4AngleBetweenVectors(lhs,rhs)); } float SHVec4::Angle3D(const SHVec4& lhs, const SHVec4& rhs) noexcept { - const XMVECTOR V1 = XMLoadFloat4(&lhs); - const XMVECTOR V2 = XMLoadFloat4(&rhs); - - return XMVectorGetX(XMVector3AngleBetweenVectors(V1, V2)); + return XMVectorGetX(XMVector3AngleBetweenVectors(lhs,rhs)); } float SHVec4::Dot(const SHVec4& lhs, const SHVec4& rhs) noexcept @@ -467,11 +414,10 @@ namespace SHADE { SHVec4 result; - const XMVECTOR U = XMLoadFloat4(&u); const float V_DOT_U = Dot(v, u); const float U_LENSQ = u.LengthSquared(); - XMStoreFloat4(&result, XMVectorScale(U, V_DOT_U / U_LENSQ)); + XMStoreFloat4(&result, XMVectorScale(u, V_DOT_U / U_LENSQ)); return result; } @@ -479,11 +425,10 @@ namespace SHADE { SHVec4 result; - const XMVECTOR U = XMLoadFloat4(&u); const float V_DOT_U = Dot3D(v, u); const float U_LENSQ = u.LengthSquared3D(); - XMStoreFloat4(&result, XMVectorScale(U, V_DOT_U / U_LENSQ)); + XMStoreFloat4(&result, XMVectorScale(u, V_DOT_U / U_LENSQ)); result.w = 1.0f; return result; } @@ -491,11 +436,8 @@ namespace SHADE SHVec4 SHVec4::Reflect(const SHVec4& v, const SHVec4& normal) noexcept { SHVec4 result; - - const XMVECTOR V = XMLoadFloat4(&v); - const XMVECTOR N = XMLoadFloat4(&normal); - XMStoreFloat4(&result, XMVector4Reflect(V, N)); + XMStoreFloat4(&result, XMVector4Reflect(v, normal)); result.w = 1.0f; return result; } @@ -503,11 +445,8 @@ namespace SHADE SHVec4 SHVec4::Reflect3D(const SHVec4& v, const SHVec4& normal) noexcept { SHVec4 result; - - const XMVECTOR V = XMLoadFloat4(&v); - const XMVECTOR N = XMLoadFloat4(&normal); - XMStoreFloat4(&result, XMVector3Reflect(V, N)); + XMStoreFloat4(&result, XMVector3Reflect(v, normal)); result.w = 1.0f; return result; } @@ -516,10 +455,9 @@ namespace SHADE { SHVec4 result; - const XMVECTOR V = XMLoadFloat4(&v); const XMMATRIX TF = XMLoadFloat4x4(&transformMtx); - XMStoreFloat4(&result, XMVector3TransformCoord(V, TF)); + XMStoreFloat4(&result, XMVector3TransformCoord(v, TF)); return result; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index 59038065..911a714e 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -52,8 +52,9 @@ namespace SHADE SHVec4 (SHVec4&& rhs) = default; ~SHVec4 () = default; - SHVec4 () noexcept; - SHVec4 (float x, float y, float z, float w) noexcept; + SHVec4 () noexcept; + SHVec4 (const XMFLOAT4& xmfloat4) noexcept; + SHVec4 (float x, float y, float z, float w) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -62,6 +63,8 @@ namespace SHADE SHVec4& operator= (const SHVec4& rhs) = default; SHVec4& operator= (SHVec4&& rhs) = default; + operator DirectX::XMVECTOR () const noexcept; + SHVec4& operator+= (const SHVec4& rhs) noexcept; SHVec4& operator-= (const SHVec4& rhs) noexcept; SHVec4& operator*= (const SHVec4& rhs) noexcept; From 381217a1b870b90b3d8f2b80e4ebaf9a20e2a5f9 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 13 Oct 2022 03:03:21 +0800 Subject: [PATCH 337/793] Added Colour --- SHADE_Engine/src/Math/SHColour.cpp | 297 ++++++++++++++++++++++++ SHADE_Engine/src/Math/SHColour.h | 166 +++++++++++++ SHADE_Engine/src/Math/Vector/SHVec3.cpp | 1 + 3 files changed, 464 insertions(+) create mode 100644 SHADE_Engine/src/Math/SHColour.cpp create mode 100644 SHADE_Engine/src/Math/SHColour.h diff --git a/SHADE_Engine/src/Math/SHColour.cpp b/SHADE_Engine/src/Math/SHColour.cpp new file mode 100644 index 00000000..8aae2cb3 --- /dev/null +++ b/SHADE_Engine/src/Math/SHColour.cpp @@ -0,0 +1,297 @@ +/**************************************************************************************** + * \file SHColour.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Colour. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + + +#include + +// Primary Header +#include "SHColour.h" +// Project Headers +#include "SHMathHelpers.h" + +using namespace DirectX; + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHColour SHColour::BEIGE = DirectX::Colors::Beige; + const SHColour SHColour::BLACK = DirectX::Colors::Black; + const SHColour SHColour::BLUE = DirectX::Colors::Blue; + const SHColour SHColour::BROWN = DirectX::Colors::Brown; + const SHColour SHColour::CHOCOLATE = DirectX::Colors::Chocolate; + const SHColour SHColour::CORAL = DirectX::Colors::Coral; + const SHColour SHColour::CRIMSON = DirectX::Colors::Crimson; + const SHColour SHColour::CYAN = DirectX::Colors::Cyan; + const SHColour SHColour::DARKBLUE = DirectX::Colors::DarkBlue; + const SHColour SHColour::DARKGRAY = DirectX::Colors::DarkGray; + const SHColour SHColour::DARKGREEN = DirectX::Colors::DarkGreen; + const SHColour SHColour::DARKMAGENTA = DirectX::Colors::DarkMagenta; + const SHColour SHColour::DARKORANGE = DirectX::Colors::DarkOrange; + const SHColour SHColour::DARKRED = DirectX::Colors::DarkRed; + const SHColour SHColour::DEEPPINK = DirectX::Colors::DeepPink; + const SHColour SHColour::FORESTGREEN = DirectX::Colors::ForestGreen; + const SHColour SHColour::FUCHSIA = DirectX::Colors::Fuchsia; + const SHColour SHColour::GOLD = DirectX::Colors::Gold; + const SHColour SHColour::GRAY = DirectX::Colors::Gray; + const SHColour SHColour::GREEN = DirectX::Colors::Green; + const SHColour SHColour::HOTPINK = DirectX::Colors::HotPink; + const SHColour SHColour::INDIGO = DirectX::Colors::Indigo; + const SHColour SHColour::LAVENDER = DirectX::Colors::Lavender; + const SHColour SHColour::LIGHTBLUE = DirectX::Colors::LightBlue; + const SHColour SHColour::LIGHTGRAY = DirectX::Colors::LightGray; + const SHColour SHColour::LIGHTGREEN = DirectX::Colors::LightGreen; + const SHColour SHColour::LIGHTPINK = DirectX::Colors::LightPink; + const SHColour SHColour::LIGHTYELLOW = DirectX::Colors::LightYellow; + const SHColour SHColour::LIME = DirectX::Colors::Lime; + const SHColour SHColour::LIMEGREEN = DirectX::Colors::LimeGreen; + const SHColour SHColour::MAGENTA = DirectX::Colors::Magenta; + const SHColour SHColour::MAROON = DirectX::Colors::Maroon; + const SHColour SHColour::MEDIUMBLUE = DirectX::Colors::MediumBlue; + const SHColour SHColour::MEDIUMPURPLE = DirectX::Colors::MediumPurple; + const SHColour SHColour::NAVY = DirectX::Colors::Navy; + const SHColour SHColour::OLIVE = DirectX::Colors::Olive; + const SHColour SHColour::ORANGE = DirectX::Colors::Orange; + const SHColour SHColour::ORCHID = DirectX::Colors::Orchid; + const SHColour SHColour::PINK = DirectX::Colors::Pink; + const SHColour SHColour::PURPLE = DirectX::Colors::Purple; + const SHColour SHColour::RED = DirectX::Colors::Red; + const SHColour SHColour::ROYALBLUE = DirectX::Colors::RoyalBlue; + const SHColour SHColour::SALMON = DirectX::Colors::Salmon; + const SHColour SHColour::SANDYBROWN = DirectX::Colors::SandyBrown; + const SHColour SHColour::SILVER = DirectX::Colors::Silver; + const SHColour SHColour::SKYBLUE = DirectX::Colors::SkyBlue; + const SHColour SHColour::SLATEGRAY = DirectX::Colors::SlateGray; + const SHColour SHColour::SNOW = DirectX::Colors::Snow; + const SHColour SHColour::STEELBLUE = DirectX::Colors::SteelBlue; + const SHColour SHColour::TAN = DirectX::Colors::Tan; + const SHColour SHColour::TEAL = DirectX::Colors::Teal; + const SHColour SHColour::TURQUOISE = DirectX::Colors::Turquoise; + const SHColour SHColour::VIOLET = DirectX::Colors::Violet; + const SHColour SHColour::WHITE = DirectX::Colors::White; + const SHColour SHColour::YELLOW = DirectX::Colors::Yellow; + + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHColour::SHColour() noexcept + : SHVec4 { 0.0f, 0.0f, 0.0f, 1.0f } + {} + + SHColour::SHColour(float r, float g, float b) noexcept + : SHVec4 { r, g, b, 1.0f } + {} + + SHColour::SHColour(float r, float g, float b, float a) noexcept + : SHVec4 { r, g, b, a } + {} + + SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b) noexcept + : SHVec4 + { + static_cast(r) / 255.0f, + static_cast(g) / 255.0f, + static_cast(b) / 255.0f, + 1.0f + } + {} + + SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept + : SHVec4 + { + static_cast(r) / 255.0f, + static_cast(g) / 255.0f, + static_cast(b) / 255.0f, + static_cast(a) / 255.0f + } + {} + + SHColour::SHColour(const DirectX::XMFLOAT3& colour) noexcept + : SHVec4 { colour.x, colour.y, colour.z, 1.0f } + {} + + SHColour::SHColour(const DirectX::XMVECTORF32& colour) noexcept + : SHVec4 + { + XMVectorGetX(colour), + XMVectorGetY(colour), + XMVectorGetZ(colour), + XMVectorGetW(colour) + } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHColour::operator==(const SHColour& rhs) const noexcept + { + return XMColorEqual(*this, rhs); + } + + bool SHColour::operator!=(const SHColour& rhs) const noexcept + { + return XMColorNotEqual(*this, rhs); + } + + /*-----------------------------------------------------------------------------------*/ + /* Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHColourHSV SHColour::ToHSV() noexcept + { + SHColourHSV hsv; + + const float MIN = SHMath::Min({ x, y, z }); + const float MAX = SHMath::Max({ x, y, z }); + + hsv.v = MAX; + + const float DELTA = MAX - MIN; + hsv.s = (MAX != 0.0f) ? DELTA / MAX : 0.0f; + + static const float SIN_60 = sin(SHMath::DegreesToRadians(60.0f)); + + if (DELTA == 0.0f) + hsv.h = 0.0f; + else if (x == MAX) + hsv.h = (y - z) / DELTA; + else if (y == MAX) + hsv.h = 2.0f + (z - x) / DELTA; + else + hsv.h = 4.0f + (x - y) / DELTA; + + hsv.h *= 60; + if (hsv.h < 0.0f) + hsv.h += 360.f; + + return hsv; + } + + void SHColour::Negate() noexcept + { + XMStoreFloat4(this, XMColorNegative(*this)); + } + + void SHColour::Saturate() noexcept + { + XMStoreFloat4(this, XMVectorSaturate(*this)); + } + + void SHColour::AdjustSaturation(float saturation) noexcept + { + XMStoreFloat4(this, XMColorAdjustSaturation(*this, saturation)); + } + + void SHColour::AdjustContrast(float contrast) noexcept + { + XMStoreFloat4(this, XMColorAdjustContrast(*this, contrast)); + } + + /*-----------------------------------------------------------------------------------*/ + /* Static Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHColour SHColour::Modulate(const SHColour& lhs, const SHColour& rhs) noexcept + { + SHColour result; + XMStoreFloat4(&result, XMColorModulate(lhs, rhs)); + return result; + } + + SHColour SHColour::FromHSV(float hue, float saturation, float value) + { + if (hue < 0.0f || saturation < 0.0f || value < 0.0f) + throw std::invalid_argument("One or more of the hsv values are invalid!"); + + SHColour colour; + + if (saturation == 0.0f) + { + colour.x = colour.y = colour.z = value; + } + else + { + hue /= 60.0f; + + const int SECTOR = static_cast(hue); + + const float F = hue - static_cast(SECTOR); + const float P = value * (1.0f - saturation); + const float Q = value * (1.0f - saturation * F); + const float T = value * (1.0f - saturation * (1.0f - F)); + + switch (SECTOR) + { + case 0: + { + colour.x = value; + colour.y = T; + colour.z = P; + + break; + } + case 1: + { + colour.x = Q; + colour.y = value; + colour.z = P; + + break; + } + case 2: + { + colour.x = P; + colour.y = value; + colour.z = T; + + break; + } + case 3: + { + colour.x = P; + colour.y = Q; + colour.z = value; + + break; + } + case 4: + { + colour.x = T; + colour.y = P; + colour.z = value; + + break; + } + default: + { + colour.x = value; + colour.y = P; + colour.z = Q; + + break; + } + } + } + + return colour; + } + + SHColour SHColour::FromHSV(const SHColourHSV& hsv) + { + return FromHSV(hsv.h, hsv.s, hsv.v); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHColour.h b/SHADE_Engine/src/Math/SHColour.h new file mode 100644 index 00000000..bd2bc9e7 --- /dev/null +++ b/SHADE_Engine/src/Math/SHColour.h @@ -0,0 +1,166 @@ +/**************************************************************************************** + * \file SHColour.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Colour. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "SH_API.h" +#include "Vector/SHVec3.h" +#include "Vector/SHVec4.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + + class SHColour; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SH_API SHColourHSV + { + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + float h = 0.0f; + float s = 0.0f; + float v = 0.0f; + }; + + class SH_API SHColour : private SHVec4 + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHColour () noexcept; + SHColour (float r, float g, float b) noexcept; + SHColour (float r, float g, float b, float a) noexcept; + SHColour (uint8_t r, uint8_t g, uint8_t b) noexcept; + SHColour (uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept; + + SHColour (const SHVec3& colour) noexcept; + SHColour (const DirectX::XMFLOAT3& colour) noexcept; + SHColour (const DirectX::XMVECTORF32& colour) noexcept; + + SHColour (const SHColour&) = default; + SHColour (SHColour&&) = default; + + ~SHColour () = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHColour& operator= (const SHColour&) = default; + SHColour& operator= (SHColour&&) = default; + + bool operator== (const SHColour& rhs) const noexcept; + bool operator!= (const SHColour& rhs) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] inline float& r() noexcept { return x; } + [[nodiscard]] inline float& g() noexcept { return y; } + [[nodiscard]] inline float& b() noexcept { return z; } + [[nodiscard]] inline float& a() noexcept { return w; } + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + SHColourHSV ToHSV () noexcept; + + void Negate () noexcept; + void Saturate () noexcept; + + void AdjustSaturation (float saturation) noexcept; + void AdjustContrast (float contrast) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Static Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] static SHColour Modulate (const SHColour& lhs, const SHColour& rhs) noexcept; + [[nodiscard]] static SHColour FromHSV (float hue, float saturation, float value); + [[nodiscard]] static SHColour FromHSV (const SHColourHSV& hsv); + + /*---------------------------------------------------------------------------------*/ + /* Static Data Members */ + /*---------------------------------------------------------------------------------*/ + + static const SHColour BEIGE ; + static const SHColour BLACK ; + static const SHColour BLUE ; + static const SHColour BROWN ; + static const SHColour CHOCOLATE ; + static const SHColour CORAL ; + static const SHColour CRIMSON ; + static const SHColour CYAN ; + static const SHColour DARKBLUE ; + static const SHColour DARKGRAY ; + static const SHColour DARKGREEN ; + static const SHColour DARKMAGENTA ; + static const SHColour DARKORANGE ; + static const SHColour DARKRED ; + static const SHColour DEEPPINK ; + static const SHColour FORESTGREEN ; + static const SHColour FUCHSIA ; + static const SHColour GOLD ; + static const SHColour GRAY ; + static const SHColour GREEN ; + static const SHColour HOTPINK ; + static const SHColour INDIGO ; + static const SHColour LAVENDER ; + static const SHColour LIGHTBLUE ; + static const SHColour LIGHTGRAY ; + static const SHColour LIGHTGREEN ; + static const SHColour LIGHTPINK ; + static const SHColour LIGHTYELLOW ; + static const SHColour LIME ; + static const SHColour LIMEGREEN ; + static const SHColour MAGENTA ; + static const SHColour MAROON ; + static const SHColour MEDIUMBLUE ; + static const SHColour MEDIUMPURPLE; + static const SHColour NAVY ; + static const SHColour OLIVE ; + static const SHColour ORANGE ; + static const SHColour ORCHID ; + static const SHColour PINK ; + static const SHColour PURPLE ; + static const SHColour RED ; + static const SHColour ROYALBLUE ; + static const SHColour SALMON ; + static const SHColour SANDYBROWN ; + static const SHColour SILVER ; + static const SHColour SKYBLUE ; + static const SHColour SLATEGRAY ; + static const SHColour SNOW ; + static const SHColour STEELBLUE ; + static const SHColour TAN ; + static const SHColour TEAL ; + static const SHColour TURQUOISE ; + static const SHColour VIOLET ; + static const SHColour WHITE ; + static const SHColour YELLOW; + }; + + +} // namespace SHADE diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index 45fe4f61..c248ebce 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -23,6 +23,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ + SHVec3 const SHVec3::Zero { 0.0f, 0.0f, 0.0f }; SHVec3 const SHVec3::One { 1.0f, 1.0f, 1.0f }; SHVec3 const SHVec3::Left { -1.0f, 0.0f, 0.0f }; From 0a3d211f027507ab99f6498c55bb479b739e0177 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 13 Oct 2022 16:57:08 +0800 Subject: [PATCH 338/793] Added a render target to store entity ID Pipelines created from pipeline library now checks if the resources pointed to by a subpass requires blending and adds a blend state accordingly. Fragment shader writes to this new render target for testing (works) --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 14 ++++----- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 27 ++++++++++++++++++ .../src/Graphics/Pipeline/SHPipelineState.h | 17 ++--------- .../RenderGraph/SHRenderGraphNode.cpp | 9 ++++++ .../Graphics/RenderGraph/SHRenderGraphNode.h | 1 + .../RenderGraph/SHRenderGraphResource.cpp | 5 ++++ .../RenderGraph/SHRenderGraphResource.h | 2 ++ .../src/Graphics/RenderGraph/SHSubpass.cpp | 13 +++++++++ .../src/Graphics/RenderGraph/SHSubpass.h | 3 +- SHADE_Engine/src/Graphics/SHVkUtil.cpp | 19 ++++++++++++ SHADE_Engine/src/Graphics/SHVkUtil.h | 1 + TempShaderFolder/TestCubeFs.glsl | 3 +- TempShaderFolder/TestCubeFs.spv | Bin 1984 -> 2100 bytes 13 files changed, 88 insertions(+), 26 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6957aa93..09579f02 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -143,26 +143,22 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); + worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); + worldRenderGraph->AddResource("Entity ID", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR32Uint); + //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Scene", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eB8G8R8A8Unorm); - worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Composite", "Position", */"Depth Buffer", "Present" }, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Present"}, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); - //gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Present"); + gBufferWriteSubpass->AddColorOutput("Entity ID"); gBufferWriteSubpass->AddDepthOutput ("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL); - //writeSubpass->AddColorOutput("Normals"); - // //Second subpass to read from G-Buffer - //auto compositeSubpass = node->AddSubpass("G-Buffer Composite"); - //compositeSubpass->AddColorOutput("Present"); // TODO: This should be "Composite" and then composite will write to swapchain image "Present" - //compositeSubpass->AddInput("Normals"); - //compositeSubpass->AddInput("Position"); // TODO: Use macro to add this node when SH_EDITOR is enabled auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {"G-Buffer"}); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 10b42a9e..682b549c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -2,6 +2,8 @@ #include "SHPipelineLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "Graphics/RenderGraph/SHSubpass.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -20,6 +22,31 @@ namespace SHADE // Create the pipeline and configure the default vertex input state auto newPipeline = logicalDevice->CreateGraphicsPipeline(pipelineLayout, nullptr, renderpass, subpass); newPipeline->GetPipelineState().SetVertexInputState(SHGraphicsGlobalData::GetDefaultViState()); + + SHColorBlendState colorBlendState{}; + colorBlendState.logic_op_enable = VK_FALSE; + colorBlendState.logic_op = vk::LogicOp::eCopy; + + auto const& subpassColorReferences = subpass->GetColorAttachmentReferences(); + colorBlendState.attachments.reserve(subpassColorReferences.size()); + + for (auto& att : subpassColorReferences) + { + colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState + { + .blendEnable = SHVkUtil::IsBlendCompatible (subpass->GetFormatFromAttachmentReference(att.attachment)) ? true : false, + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + } + ); + } + + newPipeline->GetPipelineState().SetColorBlenState(colorBlendState); // Actually construct the pipeline newPipeline->ConstructPipeline(); diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h index 2769d6cc..4c8d679a 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.h @@ -137,22 +137,9 @@ namespace SHADE { VkBool32 logic_op_enable{ VK_FALSE }; - vk::LogicOp logic_op{ VK_LOGIC_OP_COPY }; + vk::LogicOp logic_op{ vk::LogicOp::eCopy }; - std::vector attachments = - { - vk::PipelineColorBlendAttachmentState - { - .blendEnable = true, - .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, - .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, - .colorBlendOp = vk::BlendOp::eAdd, - .srcAlphaBlendFactor = vk::BlendFactor::eOne, - .dstAlphaBlendFactor = vk::BlendFactor::eZero, - .alphaBlendOp = vk::BlendOp::eAdd, - .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, - } - }; + std::vector attachments{}; }; // TODO: Specialization constants diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 05232af3..ea09dd47 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -261,6 +261,7 @@ namespace SHADE return {}; } + Handle pipeline = pipelineLibrary.GetDrawPipline(vsFsPair); if (!pipeline) { @@ -301,4 +302,12 @@ namespace SHADE return subpasses[subpassIndexing.at(subpassName.data())]; } + Handle SHRenderGraphNode::GetResource(uint32_t resourceIndex) const noexcept + { + if (resourceIndex < attResources.size()) + return attResources[resourceIndex]; + else + return {}; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index c713f402..28527a92 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -105,6 +105,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ Handle GetRenderpass(void) const noexcept; Handle GetSubpass(std::string_view subpassName) const noexcept; + Handle GetResource (uint32_t resourceIndex) const noexcept; friend class SHRenderGraph; }; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index cc881867..6da6593e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -242,4 +242,9 @@ namespace SHADE } } + vk::Format SHRenderGraphResource::GetResourceFormat(void) const noexcept + { + return resourceFormat; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index ebb699d8..d4782226 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -72,6 +72,8 @@ namespace SHADE void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; + vk::Format GetResourceFormat (void) const noexcept; + friend class SHRenderGraphNode; friend class SHRenderGraph; }; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 007502dd..abd3a7be 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -2,6 +2,8 @@ #include "SHSubpass.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" #include "Graphics/Devices/SHVkLogicalDevice.h" +#include "SHRenderGraphNode.h" +#include "SHRenderGraphResource.h" namespace SHADE { @@ -207,4 +209,15 @@ namespace SHADE { return superBatch; } + + std::vector const& SHSubpass::GetColorAttachmentReferences(void) const noexcept + { + return colorReferences; + } + + vk::Format SHSubpass::GetFormatFromAttachmentReference(uint32_t attachmentReference) const noexcept + { + return parentNode->GetResource(attachmentReference)->GetResourceFormat(); + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index b8b8717f..aba282b9 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -86,7 +86,8 @@ namespace SHADE Handle const& GetParentNode(void) const noexcept; SHSubPassIndex GetIndex() const noexcept; Handle GetSuperBatch(void) const noexcept; - + std::vector const& GetColorAttachmentReferences (void) const noexcept; + vk::Format GetFormatFromAttachmentReference (uint32_t attachmentReference) const noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index e4f9f37e..2d0e7cf2 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -23,6 +23,25 @@ namespace SHADE IsDepthOnlyFormat(format); } + bool SHVkUtil::IsBlendCompatible(vk::Format format) noexcept + { + // TODO: Update with all formats + switch (format) + { + case vk::Format::eR32Sint: + case vk::Format::eR32G32Sint: + case vk::Format::eR32G32B32Sint: + case vk::Format::eR32G32B32A32Sint: + return false; + case vk::Format::eR32Sfloat: + case vk::Format::eR32G32Sfloat: + case vk::Format::eR32G32B32Sfloat: + case vk::Format::eR32G32B32A32Sfloat: + return true; + } + return false; + } + void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) { if (bufferHandle) diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index cba5b062..d8625607 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -22,6 +22,7 @@ namespace SHADE public: static bool IsDepthOnlyFormat (vk::Format format) noexcept; static bool IsDepthStencilAttachment(vk::Format format) noexcept; + static bool IsBlendCompatible (vk::Format format) noexcept; /***********************************************************************************/ /*! diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index 3a25ad71..ab0f089f 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -33,12 +33,13 @@ layout (set = 3, binding = 0) buffer MaterialProperties // For materials } MatProp; layout(location = 0) out vec4 outColor; +layout(location = 1) out uint outEntityID; void main() { - outColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) + MatProp.data[In2.materialIndex].color / MatProp.data[In2.materialIndex].alpha; + outEntityID = 5; //outColor = vec4 (1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv index 07f67a459c18377f70ada5712194e5a5029322de..a069acf6e2e436753364704fd981a0cad627a143 100644 GIT binary patch delta 164 zcmX@WzeRwTnMs+Qfq{{Mi-DKHej;x!Bj?0wSw`E9Q`cv0W8ZE;{X5v delta 53 zcmdlYaDbnenMs+Qfq{{Mi-DKHdLnNwBge#Q*^P4)m^NQvQefP~BEhsdg6#w&$6uft H3m^snDAWsH From e1fb92e3f1ae9d0d760462bbe0b2432b749cac68 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 13 Oct 2022 17:32:53 +0800 Subject: [PATCH 339/793] Adding Bounding Spheres --- .../src/Math/Geometry/SHBoundingBox.cpp | 17 +- .../src/Math/Geometry/SHBoundingBox.h | 4 +- .../src/Math/Geometry/SHBoundingSphere.cpp | 183 ++++++++++++++++++ .../src/Math/Geometry/SHBoundingSphere.h | 83 ++++++++ SHADE_Engine/src/Math/Geometry/SHShape.h | 3 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 2 +- 6 files changed, 277 insertions(+), 15 deletions(-) create mode 100644 SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp create mode 100644 SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index 11a14eed..0dd02caa 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -26,12 +26,12 @@ namespace SHADE SHBoundingBox::SHBoundingBox() noexcept { - type = Type::BOUNDING_BOX; + type = Type::BOX; } SHBoundingBox::SHBoundingBox(const SHVec3& c, const SHVec3& hE) noexcept { - type = Type::BOUNDING_BOX; + type = Type::BOX; Center = c; Extents = hE; @@ -43,7 +43,7 @@ namespace SHADE if (this == &rhs) return; - type = Type::BOUNDING_BOX; + type = Type::BOX; Center = rhs.Center; Extents = rhs.Extents; @@ -51,7 +51,7 @@ namespace SHADE SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept { - type = Type::BOUNDING_BOX; + type = Type::BOX; Center = rhs.Center; Extents = rhs.Extents; @@ -63,14 +63,11 @@ namespace SHADE SHBoundingBox& SHBoundingBox::operator=(const SHBoundingBox& rhs) noexcept { - if (this == &rhs) - return *this; - - if (rhs.type != Type::BOUNDING_BOX) + if (rhs.type != Type::BOX) { SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") } - else + else if (this != &rhs) { Center = rhs.Center; Extents = rhs.Extents; @@ -81,7 +78,7 @@ namespace SHADE SHBoundingBox& SHBoundingBox::operator=(SHBoundingBox&& rhs) noexcept { - if (rhs.type != Type::BOUNDING_BOX) + if (rhs.type != Type::BOX) { SHLOG_WARNING("Cannot assign a non-bounding box to a bounding box!") } diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index 5c38e1b8..2fdc6634 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -36,7 +36,7 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - ~SHBoundingBox () noexcept = default; + ~SHBoundingBox () override = default; SHBoundingBox () noexcept; SHBoundingBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; @@ -44,7 +44,7 @@ namespace SHADE SHBoundingBox (SHBoundingBox&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ - /* Operator Overloads */ + /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp new file mode 100644 index 00000000..c9bdcfe2 --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp @@ -0,0 +1,183 @@ +/**************************************************************************************** + * \file SHBoundingSphere.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Bounding Sphere + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHBoundingSphere.h" +// Project Headers +#include "Math/SHMathHelpers.h" +#include "Math/SHRay.h" + +using namespace DirectX; + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHBoundingSphere::SHBoundingSphere() noexcept + { + type = Type::SPHERE; + } + + SHBoundingSphere::SHBoundingSphere(const SHVec3& center, float radius) noexcept + { + type = Type::SPHERE; + + Center = center; + Radius = radius; + } + + SHBoundingSphere::SHBoundingSphere(const SHBoundingSphere& rhs) noexcept + { + if (this == &rhs) + return; + + type = Type::SPHERE; + + Center = rhs.Center; + Radius = rhs.Radius; + } + + SHBoundingSphere::SHBoundingSphere(SHBoundingSphere&& rhs) noexcept + { + type = Type::SPHERE; + + Center = rhs.Center; + Radius = rhs.Radius; + } + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHBoundingSphere& SHBoundingSphere::operator=(const SHBoundingSphere& rhs) noexcept + { + if (rhs.type != Type::SPHERE) + { + SHLOG_WARNING("Cannot assign a non-sphere to a sphere!") + } + else if (this != &rhs) + { + Center = rhs.Center; + Radius = rhs.Radius; + } + + return *this; + } + + SHBoundingSphere& SHBoundingSphere::operator=(SHBoundingSphere&& rhs) noexcept + { + if (rhs.type != Type::SPHERE) + { + SHLOG_WARNING("Cannot assign a non-sphere to a sphere!") + } + else + { + Center = rhs.Center; + Radius = rhs.Radius; + } + + return *this; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHVec3& SHBoundingSphere::GetCenter() const noexcept + { + return Center; + } + + float SHBoundingSphere::GetRadius() const noexcept + { + return Radius; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHBoundingSphere::SetCenter(const SHVec3& center) noexcept + { + Center = center; + } + + void SHBoundingSphere::SetRadius(float radius) noexcept + { + Radius = radius; + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHBoundingSphere::TestPoint(const SHVec3& point) noexcept + { + return BoundingSphere::Contains(point); + } + + bool SHBoundingSphere::Raycast(const SHRay& ray, float& distance) noexcept + { + return Intersects(ray.position, ray.direction, distance); + } + + bool SHBoundingSphere::Contains(const SHBoundingSphere& rhs) const noexcept + { + return BoundingSphere::Contains(rhs); + } + + float SHBoundingSphere::Volume() const noexcept + { + return (4.0f / 3.0f) * SHMath::PI * (Radius * Radius * Radius); + } + + float SHBoundingSphere::SurfaceArea() const noexcept + { + return 4.0f * SHMath::PI * (Radius * Radius); + } + + /*-----------------------------------------------------------------------------------*/ + /* Static Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHBoundingSphere SHBoundingSphere::Combine(const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept + { + SHBoundingSphere result; + CreateMerged(result, lhs, rhs); + return result; + } + + bool SHBoundingSphere::Intersect(const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept + { + return lhs.Intersects(rhs); + } + + SHBoundingSphere SHBoundingSphere::BuildFromSpheres(const SHBoundingSphere* spheres, size_t numSpheres) noexcept + { + SHBoundingSphere result; + + for (size_t i = 1; i < numSpheres; ++i) + CreateMerged(result, spheres[i - 1], spheres[i]); + + return result; + } + + SHBoundingSphere SHBoundingSphere::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept + { + SHBoundingSphere result; + CreateFromPoints(result, numVertices, vertices, stride); + return result; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h new file mode 100644 index 00000000..00ce3e57 --- /dev/null +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h @@ -0,0 +1,83 @@ +/**************************************************************************************** + * \file SHBoundingSphere.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Bounding Sphere. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "SHShape.h" +#include "SH_API.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHBoundingSphere : public SHShape, + private DirectX::BoundingSphere + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHBoundingSphere () noexcept; + SHBoundingSphere (const SHVec3& center, float radius) noexcept; + SHBoundingSphere (const SHBoundingSphere& rhs) noexcept; + SHBoundingSphere (SHBoundingSphere&& rhs) noexcept; + + ~SHBoundingSphere () override = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHBoundingSphere& operator= (const SHBoundingSphere& rhs) noexcept; + SHBoundingSphere& operator= (SHBoundingSphere&& rhs) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] const SHVec3& GetCenter () const noexcept; + [[nodiscard]] float GetRadius () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetCenter (const SHVec3& center) noexcept; + void SetRadius (float radius) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; + [[nodiscard]] bool Raycast (const SHRay& ray, float& distance) noexcept override; + + [[nodiscard]] bool Contains (const SHBoundingSphere& rhs) const noexcept; + [[nodiscard]] float Volume () const noexcept; + [[nodiscard]] float SurfaceArea () const noexcept; + + + /*---------------------------------------------------------------------------------*/ + /* Static Function Members */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] static SHBoundingSphere Combine (const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept; + [[nodiscard]] static bool Intersect (const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept; + [[nodiscard]] static SHBoundingSphere BuildFromSpheres (const SHBoundingSphere* spheres, size_t numSpheres) noexcept; + [[nodiscard]] static SHBoundingSphere BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; + + }; +} // namespace SHADE diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 69578cb3..ab2db558 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -31,11 +31,10 @@ namespace SHADE enum class Type { - BOUNDING_BOX + BOX , SPHERE , CAPSULE , CONVEX_HULL - , TRIANGLE , COUNT , NONE = -1 diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index f3a4c276..6f3cadb6 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -398,7 +398,7 @@ namespace SHADE switch (shape->GetType()) { - case SHShape::Type::BOUNDING_BOX: + case SHShape::Type::BOX: { auto* box = reinterpret_cast(shape); const SHVec3& SHADE_EXTENTS = box->GetHalfExtents(); From 288f58c9788fbbc5c8bbd6013c5fecaab16414bf Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Thu, 13 Oct 2022 23:03:30 +0800 Subject: [PATCH 340/793] fixed timing of memcpy of keys to keysLast This in turn fixes GetKeyDown() and GetKeyUp() as the input manager now knows changes of keys between the last frame and current frame. --- SHADE_Engine/src/Input/SHInputManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Input/SHInputManager.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp index 04f2b02e..18d9e3e2 100644 --- a/SHADE_Engine/src/Input/SHInputManager.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -43,7 +43,10 @@ namespace SHADE void SHInputManager::UpdateInput(double dt) noexcept { - //Keyboard and Mouse Buttons//////////////////////////////////////////////// + //Keyboard and Mouse Buttons//////////////////////////////////////////////// + //Write to lastKeys + memcpy(keysLast, keys, sizeof(keys)); + //Poll unsigned char keyboardState[MAX_KEYS]; //if (GetKeyboardState(keyboardState) == false) return; @@ -96,9 +99,6 @@ namespace SHADE } } - //Write to lastKeys - memcpy(keysLast, keys, sizeof(keys)); - //Mouse Positioning///////////////////////////////////// //https://stackoverflow.com/a/6423739 From ab09d78e42ccef97d78fe9fcbf09d2772042d153 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 14 Oct 2022 00:08:14 +0800 Subject: [PATCH 341/793] removed routines for graphics from application (remember to add back after ingui update routine is added). Scene graph and physics system had some extra couts input system bug fix (this change is now in main) Mouse pick system wip --- .../src/Application/SBApplication.cpp | 6 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 22 +++---- .../Graphics/Commands/SHVkCommandBuffer.cpp | 5 ++ .../src/Graphics/Commands/SHVkCommandBuffer.h | 3 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 12 +++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 6 +- .../MiddleEnd/Interface/SHMousePickSystem.cpp | 59 +++++++++++++++++++ .../MiddleEnd/Interface/SHMousePickSystem.h | 38 ++++++++++++ .../Graphics/RenderGraph/SHRenderGraph.cpp | 9 +++ .../src/Graphics/RenderGraph/SHRenderGraph.h | 3 +- .../RenderGraph/SHRenderGraphResource.cpp | 52 ++++++++++++++++ .../RenderGraph/SHRenderGraphResource.h | 12 ++++ SHADE_Engine/src/Graphics/SHVkUtil.cpp | 13 ++++ SHADE_Engine/src/Graphics/SHVkUtil.h | 10 ++-- SHADE_Engine/src/Input/SHInputManager.cpp | 6 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 14 ++--- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 6 +- 17 files changed, 241 insertions(+), 35 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index c6da6f1f..861a92d6 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -81,9 +81,9 @@ namespace Sandbox SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); + //SHADE::SHSystemManager::RegisterRoutine(); + //SHADE::SHSystemManager::RegisterRoutine(); + //SHADE::SHSystemManager::RegisterRoutine(); SHADE::SHComponentManager::CreateComponentSparseSet(); SHADE::SHComponentManager::CreateComponentSparseSet(); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 3b277e6c..96be39f0 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -86,10 +86,10 @@ namespace Sandbox for (int y = 0; y < NUM_ROWS; ++y) for (int x = 0; x < NUM_COLS; ++x) { - auto entity = SHEntityManager::CreateEntity(); + auto entity = SHEntityManager::CreateEntity(); auto& renderable = *SHComponentManager::GetComponent_s(entity); auto& transform = *SHComponentManager::GetComponent_s(entity); - auto& collider = *SHComponentManager::GetComponent_s(entity); + //auto& collider = *SHComponentManager::GetComponent_s(entity); //renderable.Mesh = handles.front(); renderable.Mesh = CUBE_MESH; @@ -99,13 +99,13 @@ namespace Sandbox renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); //Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-3.5f, -5.0f)}); + transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-300.5f, 500.0f)}); //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); transform.SetWorldRotation(SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber()); transform.SetWorldScale(TEST_OBJ_SCALE); - auto* box = collider.AddBoundingBox(); - box->SetHalfExtents(transform.GetWorldScale() * 0.5f); + //auto* box = collider.AddBoundingBox(); + //box->SetHalfExtents(transform.GetWorldScale() * 0.5f); stressTestObjects.emplace_back(entity); } @@ -123,11 +123,11 @@ namespace Sandbox transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - auto floor = SHEntityManager::CreateEntity(); + auto floor = SHEntityManager::CreateEntity(); auto& floorRenderable = *SHComponentManager::GetComponent_s(floor); auto& floorTransform = *SHComponentManager::GetComponent_s(floor); - auto& floorRigidBody = *SHComponentManager::GetComponent_s(floor); - auto& floorCollider = *SHComponentManager::GetComponent_s(floor); + //auto& floorRigidBody = *SHComponentManager::GetComponent_s(floor); + //auto& floorCollider = *SHComponentManager::GetComponent_s(floor); floorRenderable.Mesh = CUBE_MESH; floorRenderable.SetMaterial(customMat); @@ -136,10 +136,10 @@ namespace Sandbox floorTransform.SetWorldScale({7.5f, 0.5f, 7.5}); floorTransform.SetWorldPosition({0.0f, -3.0f, -5.0f}); - floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); + //floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); - auto* floorBox = floorCollider.AddBoundingBox(); - floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); + //auto* floorBox = floorCollider.AddBoundingBox(); + //floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 9ebbd227..4501ba7b 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -461,6 +461,11 @@ namespace SHADE ); } + void SHVkCommandBuffer::CopyImageToBuffer(const vk::Image& src, const vk::Buffer& dst, const std::vector& copyInfo) + { + vkCommandBuffer.copyImageToBuffer (src, vk::ImageLayout::eTransferSrcOptimal, dst, copyInfo); + } + void SHVkCommandBuffer::PipelineBarrier( vk::PipelineStageFlags srcStage, vk::PipelineStageFlags dstStage, diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index c18527b3..9416a1aa 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -120,7 +120,8 @@ namespace SHADE void DrawMultiIndirect (Handle indirectDrawData, uint32_t drawCount); // Buffer Copy - void CopyBufferToImage (const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo); + void CopyBufferToImage (const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo); + void CopyImageToBuffer (const vk::Image& src, const vk::Buffer& dst, const std::vector& copyInfo); // memory barriers void PipelineBarrier ( diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 09579f02..636aa27a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -32,6 +32,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Images/SHVkSampler.h" #include "Assets/Asset Types/SHTextureAsset.h" +#include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" namespace SHADE { @@ -197,6 +198,15 @@ namespace SHADE cubeFS->Reflect(); defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); + + mousePickSystem = resourceManager.Create(); + + std::vector> cmdPools; + cmdPools.reserve(swapchain->GetNumImages()); + for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) + cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); + + mousePickSystem->Init(device, cmdPools, worldRenderGraph->GetRenderGraphResource("Entity ID")); } /***************************************************************************/ @@ -396,10 +406,10 @@ namespace SHADE } - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); auto& currFrameData = renderContext.GetCurrentFrameData(); + mousePickSystem->Run(graphicsQueue, CURR_FRAME_IDX); // #BackEndTest: queues an image for presentation if (auto result = graphicsQueue->Present(swapchain, { currFrameData.semRenderFinishHdl }, CURR_FRAME_IDX); result != vk::Result::eSuccess) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index c89e6ebc..981600f3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -52,6 +52,7 @@ namespace SHADE class SHVkShaderModule; class SHMaterial; class SHMaterialInstance; + class SHMousePickSystem; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -294,7 +295,7 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - ResourceManager resourceManager; + ResourceManager resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHSamplerCache samplerCache; @@ -322,5 +323,8 @@ namespace SHADE Handle defaultMaterial; Handle worldRenderGraph; + + // Sub systems + Handle mousePickSystem; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp new file mode 100644 index 00000000..ec7a5491 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -0,0 +1,59 @@ +#include "SHpch.h" +#include "SHMousePickSystem.h" +#include "Input/SHInputManager.h" +#include "Graphics/Commands/SHVkCommandPool.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Synchronization/SHVkFence.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/SHVkUtil.h" + +namespace SHADE +{ + void SHMousePickSystem::Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept + { + // Create command buffers + for (auto& pool : cmdPools) + { + commandBuffers.push_back(pool->RequestCommandBuffer (SH_CMD_BUFFER_TYPE::PRIMARY)); + } + + // assign the attachment + entityIDAttachment = eidAttachment; + + // Create the fence + afterCopyFence = logicalDevice->CreateFence(); + + uint32_t bufferSize = entityIDAttachment->GetWidth() * eidAttachment->GetHeight() * SHVkUtil::GetBytesPerPixelFromFormat(entityIDAttachment->GetResourceFormat()); + + // Create the buffer + imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + } + + void SHMousePickSystem::Run(Handle queue, uint32_t frameIndex) noexcept + { + // if input detected + if (/*SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_CTRL) && */SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) + { + std::cout << "Input registered... " << std::endl; + + //// begin command buffer for recording + //commandBuffers[frameIndex]->BeginRecording(); + + //// transition the image for optimized copying + //entityIDAttachment->TransitionImage (vk::ImageLayout::eColorAttachmentOptimal, vk::ImageLayout::eTransferSrcOptimal, commandBuffers[frameIndex], vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::PipelineStageFlagBits::eTransfer, 0); + + //// copy the image here. Last argument is 0 because the attachment isn't a swapchain image. + //entityIDAttachment->CopyToBuffer(imageDataDstBuffer, commandBuffers[frameIndex], 0); + + //// end command buffer for recording + //commandBuffers[frameIndex]->EndRecording(); + + //// submit the command buffer to copy image to buffer + //queue->SubmitCommandBuffer({ commandBuffers[frameIndex] }, {}, {}, vk::PipelineStageFlagBits::eColorAttachmentOutput, afterCopyFence); + + //// wait for the copy to be done + //afterCopyFence->Wait(true, std::numeric_limits::max()); + } + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h new file mode 100644 index 00000000..815eb938 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h @@ -0,0 +1,38 @@ +#pragma once + +#include "Graphics/RenderGraph/SHRenderGraphResource.h" +#include "ECS_Base/SHECSMacros.h" +#include "Math/Vector/SHVec2.h" +#include + +namespace SHADE +{ + class SHVkLogicalDevice; + class SHVkCommandPool; + class SHVkCommandBuffer; + class SHVkFence; + class SHVkQueue; + class SHVkBuffer; + + class SHMousePickSystem + { + private: + //! Handle to the render graph resource that will contain the entity IDs + Handle entityIDAttachment; + + //! Command buffers meant for copying image to buffer + std::vector> commandBuffers; + + //! After the attachment has copied its data to a buffer, we want to signal this fence + Handle afterCopyFence; + + //! buffer to contain the attachment data after copying + Handle imageDataDstBuffer; + + public: + void Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept; + + void Run (Handle queue, uint32_t frameIndex) noexcept; + + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index cad6a78e..78bd1ca6 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -498,4 +498,13 @@ namespace SHADE } + Handle SHRenderGraph::GetRenderGraphResource(std::string const& resourceName) const noexcept + { + if (graphResources.contains(resourceName)) + { + return graphResources.at(resourceName); + } + return {}; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index a3140a4f..2e9a3310 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -85,7 +85,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - Handle GetNode (std::string const& nodeName) const noexcept; + Handle GetNode (std::string const& nodeName) const noexcept; + Handle GetRenderGraphResource (std::string const& resourceName) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 6da6593e..e8c9863f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -3,6 +3,8 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Swapchain/SHVkSwapchain.h" #include "Graphics/Images/SHVkImageView.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -242,9 +244,59 @@ namespace SHADE } } + void SHRenderGraphResource::TransitionImage(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, Handle commandBuffer, vk::PipelineStageFlagBits srcStage, vk::PipelineStageFlagBits dstStage, uint32_t frameIndex) noexcept + { + vk::ImageMemoryBarrier barrier; + barrier.oldLayout = oldLayout; + barrier.newLayout = newLayout; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.image = images[frameIndex]->GetVkImage(), + barrier.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor; // TODO: Need to change this to base it off image format. + barrier.subresourceRange.baseMipLevel = 0; + barrier.subresourceRange.levelCount = mipLevels; + barrier.subresourceRange.baseArrayLayer = 0; + barrier.subresourceRange.layerCount = 1; // always 1 since we wont have array of images for attachments + + commandBuffer->PipelineBarrier(srcStage, dstStage, {}, {}, {}, {barrier}); + } + + void SHRenderGraphResource::CopyToBuffer(Handle dstBuffer, Handle commandBuffer, uint32_t frameIndex) const noexcept + { + vk::ImageSubresourceLayers subResource + { + .aspectMask = SHVkUtil::IsDepthOnlyFormat(resourceFormat) ? vk::ImageAspectFlagBits::eDepth : vk::ImageAspectFlagBits::eColor, + .mipLevel = 0, + .baseArrayLayer = 0, + .layerCount = 1 + }; + + vk::BufferImageCopy region + { + .bufferOffset = 0, + .bufferRowLength = 0, + .bufferImageHeight = 0, + .imageSubresource = subResource, + .imageOffset = vk::Offset3D {0,0,0}, + .imageExtent = vk::Extent3D {width, height, 1} + }; + + commandBuffer->CopyImageToBuffer(images[frameIndex]->GetVkImage(), dstBuffer->GetVkBuffer(), {region}); + } + vk::Format SHRenderGraphResource::GetResourceFormat(void) const noexcept { return resourceFormat; } + uint32_t SHRenderGraphResource::GetWidth(void) const noexcept + { + return width; + } + + uint32_t SHRenderGraphResource::GetHeight(void) const noexcept + { + return height; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index d4782226..a490ab95 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -13,6 +13,8 @@ namespace SHADE class SHVkImageView; class SHVkLogicalDevice; class SHVkSwapchain; + class SHVkCommandBuffer; + class SHVkBuffer; class SH_API SHRenderGraphResource { @@ -70,9 +72,19 @@ namespace SHADE SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; + void TransitionImage(vk::ImageLayout oldLayout, vk::ImageLayout newLayout, Handle commandBuffer, vk::PipelineStageFlagBits srcStage, vk::PipelineStageFlagBits dstStage, uint32_t frameIndex) noexcept; + void CopyToBuffer (Handle dstBuffer, Handle commandBuffer, uint32_t frameIndex = 0) const noexcept; + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ vk::Format GetResourceFormat (void) const noexcept; + uint32_t GetWidth (void) const noexcept; + uint32_t GetHeight (void) const noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index 2d0e7cf2..c8c563a1 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -42,6 +42,19 @@ namespace SHADE return false; } + uint32_t SHVkUtil::GetBytesPerPixelFromFormat(vk::Format format) noexcept + { + // TODO: Update with all formats + switch (format) + { + case vk::Format::eR32Sint: + case vk::Format::eR32Uint: + case vk::Format::eR32Sfloat: + return 4; + } + return 0; + } + void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) { if (bufferHandle) diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index d8625607..ca3b6f83 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -19,10 +19,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ class SHVkUtil { - public: - static bool IsDepthOnlyFormat (vk::Format format) noexcept; - static bool IsDepthStencilAttachment(vk::Format format) noexcept; - static bool IsBlendCompatible (vk::Format format) noexcept; + public: + static bool IsDepthOnlyFormat (vk::Format format) noexcept; + static bool IsDepthStencilAttachment (vk::Format format) noexcept; + static bool IsBlendCompatible (vk::Format format) noexcept; + static uint32_t GetBytesPerPixelFromFormat (vk::Format format) noexcept; + /***********************************************************************************/ /*! diff --git a/SHADE_Engine/src/Input/SHInputManager.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp index 04f2b02e..a6090062 100644 --- a/SHADE_Engine/src/Input/SHInputManager.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -44,6 +44,9 @@ namespace SHADE void SHInputManager::UpdateInput(double dt) noexcept { //Keyboard and Mouse Buttons//////////////////////////////////////////////// + //Write to lastKeys + memcpy(keysLast, keys, sizeof(keys)); + //Poll unsigned char keyboardState[MAX_KEYS]; //if (GetKeyboardState(keyboardState) == false) return; @@ -96,9 +99,6 @@ namespace SHADE } } - //Write to lastKeys - memcpy(keysLast, keys, sizeof(keys)); - //Mouse Positioning///////////////////////////////////// //https://stackoverflow.com/a/6423739 diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index f3a4c276..7d2e257b 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -203,9 +203,9 @@ namespace SHADE void SHPhysicsSystem::AddRigidBody(EntityID entityID) noexcept { - #ifdef _DEBUG - SHLOG_INFO("Adding a Rigidbody to the Physics World.") - #endif + //#ifdef _DEBUG + // SHLOG_INFO("Adding a Rigidbody to the Physics World.") + //#endif // Check if entity is already a physics object auto* physicsObject = GetPhysicsObject(entityID); @@ -274,9 +274,9 @@ namespace SHADE void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept { - #ifdef _DEBUG - SHLOG_INFO("Adding a Collider to the Physics World.") - #endif + //#ifdef _DEBUG + // SHLOG_INFO("Adding a Collider to the Physics World.") + //#endif // Check if entity is already a physics object auto* physicsObject = GetPhysicsObject(entityID); @@ -488,7 +488,7 @@ namespace SHADE const auto it = map.find(entityID); if (it == map.end()) { - SHLOG_ERROR("Entity {} is not in the physics system!", entityID) + //SHLOG_ERROR("Entity {} is not in the physics system!", entityID) return nullptr; } diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 3fe85809..bbbdb7e4 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -571,9 +571,9 @@ namespace SHADE { SHSceneNode* newNode = new SHSceneNode{entityID}; - #ifdef _DEBUG - SHLOG_INFO("Allocated a new Scene Node for Entity {}!", entityID) - #endif + //#ifdef _DEBUG + // SHLOG_INFO("Allocated a new Scene Node for Entity {}!", entityID) + //#endif entityNodeMap.emplace(entityID, newNode); return newNode; From 682a5a6cbfaf5313b59c26cebf9a9e6ded7efe54 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 14 Oct 2022 00:10:56 +0800 Subject: [PATCH 342/793] bug fix --- SHADE_Application/src/Scenes/SBTestScene.cpp | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index e327f833..f1d656ee 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -86,10 +86,10 @@ namespace Sandbox for (int y = 0; y < NUM_ROWS; ++y) for (int x = 0; x < NUM_COLS; ++x) { - auto entity = SHEntityManager::CreateEntity(); + auto entity = SHEntityManager::CreateEntity(); auto& renderable = *SHComponentManager::GetComponent_s(entity); auto& transform = *SHComponentManager::GetComponent_s(entity); - //auto& collider = *SHComponentManager::GetComponent_s(entity); + auto& collider = *SHComponentManager::GetComponent_s(entity); //renderable.Mesh = handles.front(); renderable.Mesh = CUBE_MESH; @@ -99,7 +99,7 @@ namespace Sandbox renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); //Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-300.5f, 500.0f)}); + transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-3.5f, -5.0f) }); //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); transform.SetWorldRotation(SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber()); transform.SetWorldScale(TEST_OBJ_SCALE); @@ -125,23 +125,23 @@ namespace Sandbox transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - auto floor = SHEntityManager::CreateEntity(); + auto floor = SHEntityManager::CreateEntity(); auto& floorRenderable = *SHComponentManager::GetComponent_s(floor); auto& floorTransform = *SHComponentManager::GetComponent_s(floor); - //auto& floorRigidBody = *SHComponentManager::GetComponent_s(floor); - //auto& floorCollider = *SHComponentManager::GetComponent_s(floor); + auto& floorRigidBody = *SHComponentManager::GetComponent_s(floor); + auto& floorCollider = *SHComponentManager::GetComponent_s(floor); floorRenderable.Mesh = CUBE_MESH; floorRenderable.SetMaterial(customMat); floorRenderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); - floorTransform.SetWorldScale({7.5f, 0.5f, 7.5}); - floorTransform.SetWorldPosition({0.0f, -3.0f, -5.0f}); + floorTransform.SetWorldScale({ 7.5f, 0.5f, 7.5 }); + floorTransform.SetWorldPosition({ 0.0f, -3.0f, -5.0f }); - //floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); + floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); - //auto* floorBox = floorCollider.AddBoundingBox(); - //floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); + auto* floorBox = floorCollider.AddBoundingBox(); + floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); From faa55847cb5b139a0a957cd6e2efbd6f732c0df5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 14 Oct 2022 11:52:15 +0800 Subject: [PATCH 343/793] Mouse picking is working from rendering side - Buffer now has function to get data from mapped pointer if it exists - Batches now also pass a buffer of EIDs to the GPU - Global vertex attributes now have 1 extra instanced attribute for storing EntityIDs - Render graph resources now have a usage flags on top of the usage flags calculated in the graph AddResource function. This is to tell vulkan that we want some resources to be copyable for example (EID render target copy to buffer). - Mouse pick system stores eid picked --- .../src/Graphics/Buffers/SHVkBuffer.h | 11 +++++ .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 45 +++++++++++++++++- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 6 ++- .../MiddleEnd/Batching/SHSuperBatch.cpp | 3 +- .../GlobalData/SHGraphicsGlobalData.cpp | 7 +-- .../MiddleEnd/Interface/SHGraphicsConstants.h | 8 ++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 1 + .../MiddleEnd/Interface/SHMousePickSystem.cpp | 40 ++++++++++------ .../MiddleEnd/Interface/SHMousePickSystem.h | 11 ++++- .../Graphics/RenderGraph/SHRenderGraph.cpp | 4 +- .../src/Graphics/RenderGraph/SHRenderGraph.h | 2 +- .../RenderGraph/SHRenderGraphResource.cpp | 4 +- .../RenderGraph/SHRenderGraphResource.h | 2 +- TempShaderFolder/TestCubeFs.glsl | 3 +- TempShaderFolder/TestCubeFs.spv | Bin 2100 -> 2156 bytes TempShaderFolder/TestCubeVs.glsl | 4 ++ TempShaderFolder/TestCubeVs.spv | Bin 2152 -> 2300 bytes 18 files changed, 123 insertions(+), 30 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index 648a07e8..e931fec5 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -105,6 +105,17 @@ namespace SHADE vk::Buffer GetVkBuffer (void) const noexcept; vk::BufferUsageFlags GetUsageBits(void) const noexcept; + template + T GetDataFromMappedPointer(uint32_t index) const noexcept + { + if (mappedPtr && index < sizeStored / sizeof (T)) + { + return (static_cast(mappedPtr))[index]; + } + else + return {}; + }; + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 181c1f22..2705b4d1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -110,6 +110,7 @@ namespace SHADE // Clear CPU buffers drawData.clear(); transformData.clear(); + eidData.clear(); matPropsData.reset(); matPropsDataSize = 0; @@ -119,6 +120,7 @@ namespace SHADE { drawDataBuffer[i].Free(); transformDataBuffer[i].Free(); + eidBuffer[i].Free(); matPropsBuffer[i].Free(); } } @@ -206,7 +208,31 @@ namespace SHADE transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); } - void SHBatch::Build(Handle _device, Handle descPool, uint32_t frameIndex) + void SHBatch::UpdateEIDBuffer(uint32_t frameIndex) + { + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + { + SHLOG_WARNING("[SHBatch] Attempted to update eid buffers with an invalid frame index."); + return; + } + + // Reset Transform Data + eidData.clear(); + + // Populate on the CPU + for (auto& subBatch : subBatches) + for (const SHRenderable* renderable : subBatch.Renderables) + { + eidData.emplace_back(renderable->GetEID()); + } + + // Transfer to GPU + if (eidBuffer[frameIndex]) + eidBuffer[frameIndex]->WriteToMemory(eidData.data(), static_cast(eidData.size() * sizeof(EntityID)), 0, 0); + + } + + void SHBatch::Build(Handle _device, Handle descPool, uint32_t frameIndex) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -237,6 +263,11 @@ namespace SHADE // - Transform data transformData.reserve(numTotalElements); transformData.clear(); + // - EID data + eidData.reserve(numTotalElements); + eidData.clear(); + + // - Material Properties Data const Handle SHADER_INFO = pipeline->GetPipelineLayout()->GetShaderBlockInterface ( @@ -277,7 +308,8 @@ namespace SHADE for (const SHRenderable* renderable : subBatch.Renderables) { // Transform - auto transform = SHComponentManager::GetComponent_s(renderable->GetEID()); + EntityID eid = renderable->GetEID(); + auto transform = SHComponentManager::GetComponent_s(eid); if (!transform) { SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); @@ -287,6 +319,8 @@ namespace SHADE { transformData.emplace_back(transform->GetTRS()); } + + eidData.emplace_back(eid); // Material Properties if (!EMPTY_MAT_PROPS) @@ -317,6 +351,12 @@ namespace SHADE device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); + const uint32_t EID_DATA_BYTES = static_cast(eidData.size() * sizeof(EntityID)); + SHVkUtil::EnsureBufferAndCopyHostVisibleData + ( + device, eidBuffer[frameIndex], eidData.data(), EID_DATA_BYTES, + BuffUsage::eVertexBuffer + ); // - Material Properties Buffer rebuildMaterialBuffers(frameIndex, descPool); @@ -339,6 +379,7 @@ namespace SHADE static std::array dynamicOffset { 0 }; cmdBuffer->BindPipeline(pipeline); cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::EID, eidBuffer[frameIndex], 0); if (matPropsDescSet[frameIndex]) { cmdBuffer->BindDescriptorSet diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index abe691ca..37c57396 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Interface/SHMaterial.h" #include "Math/SHMatrix.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include "ECS_Base/SHECSMacros.h" namespace SHADE { @@ -78,6 +79,7 @@ namespace SHADE void Clear(); void UpdateMaterialBuffer(uint32_t frameIndex, Handle descPool); void UpdateTransformBuffer(uint32_t frameIndex); + void UpdateEIDBuffer(uint32_t frameIndex); void Build(Handle device, Handle descPool, uint32_t frameIndex) ; void Draw(Handle cmdBuffer, uint32_t frameIndex); @@ -109,14 +111,16 @@ namespace SHADE // CPU Buffers std::vector drawData; std::vector transformData; + std::vector eidData; std::unique_ptr matPropsData; Byte matPropsDataSize = 0; Byte singleMatPropAlignedSize = 0; - Byte singleMatPropSize = 0; + Byte singleMatPropSize = 0; bool isCPUBuffersDirty = true; // GPU Buffers TripleBuffer drawDataBuffer; TripleBuffer transformDataBuffer; + TripleBuffer eidBuffer; TripleBuffer matPropsBuffer; TripleDescSet matPropsDescSet; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 0d75dca8..add51196 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -83,8 +83,9 @@ namespace SHADE { for (auto& batch : batches) { - batch.UpdateMaterialBuffer(frameIndex, descPool); + batch.UpdateMaterialBuffer(frameIndex, descPool); batch.UpdateTransformBuffer(frameIndex); + batch.UpdateEIDBuffer(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 6a7b23f2..d8b1bad1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -91,9 +91,10 @@ namespace SHADE { defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // positions at binding 0 defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_2D) }); // UVs at binding 1 - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Normals at binding 2 - defaultVertexInputState.AddBinding(false, false, {SHVertexAttribute(SHAttribFormat::FLOAT_3D)}); // Tangents at binding 3 - defaultVertexInputState.AddBinding(true, true, {SHVertexAttribute(SHAttribFormat::MAT_4D)}); // Transform at binding 4 - 7 (4 slots) + defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // Normals at binding 2 + defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // Tangents at binding 3 + defaultVertexInputState.AddBinding(true, true, { SHVertexAttribute(SHAttribFormat::MAT_4D) }); // Transform at binding 4 - 7 (4 slots) + defaultVertexInputState.AddBinding(true, true, { SHVertexAttribute(SHAttribFormat::UINT32_1D) }); // EID at binding 8 } void SHGraphicsGlobalData::Init(Handle logicalDevice) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 0818ebab..ac2f1f8c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -144,6 +144,14 @@ namespace SHADE */ /***************************************************************************/ static constexpr uint32_t TRANSFORM = 4; + /***************************************************************************/ + /*! + \brief + Vertex buffer bindings for the eid buffer. + */ + /***************************************************************************/ + static constexpr uint32_t EID = 5; + }; /*******************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 636aa27a..09f1c93e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -146,7 +146,7 @@ namespace SHADE worldRenderGraph->Init(device, swapchain); worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - worldRenderGraph->AddResource("Entity ID", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR32Uint); + worldRenderGraph->AddResource("Entity ID", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 981600f3..3160cd57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -269,6 +269,7 @@ namespace SHADE Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } Handle GetDefaultViewport() const {return defaultViewport;} + Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; //SHRenderGraph const& GetRenderGraph(void) const noexcept; //Handle GetRenderPass() const { return renderPass; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index ec7a5491..ee8665d5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -11,6 +11,8 @@ namespace SHADE { void SHMousePickSystem::Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept { + pickedEID = 0; + // Create command buffers for (auto& pool : cmdPools) { @@ -32,28 +34,38 @@ namespace SHADE void SHMousePickSystem::Run(Handle queue, uint32_t frameIndex) noexcept { // if input detected - if (/*SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_CTRL) && */SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_CTRL) && SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) { - std::cout << "Input registered... " << std::endl; + afterCopyFence->Reset(); - //// begin command buffer for recording - //commandBuffers[frameIndex]->BeginRecording(); + // begin command buffer for recording + commandBuffers[frameIndex]->BeginRecording(); - //// transition the image for optimized copying - //entityIDAttachment->TransitionImage (vk::ImageLayout::eColorAttachmentOptimal, vk::ImageLayout::eTransferSrcOptimal, commandBuffers[frameIndex], vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::PipelineStageFlagBits::eTransfer, 0); + // transition the image for optimized copying + entityIDAttachment->TransitionImage (vk::ImageLayout::eColorAttachmentOptimal, vk::ImageLayout::eTransferSrcOptimal, commandBuffers[frameIndex], vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::PipelineStageFlagBits::eTransfer, 0); - //// copy the image here. Last argument is 0 because the attachment isn't a swapchain image. - //entityIDAttachment->CopyToBuffer(imageDataDstBuffer, commandBuffers[frameIndex], 0); + // copy the image here. Last argument is 0 because the attachment isn't a swapchain image. + entityIDAttachment->CopyToBuffer(imageDataDstBuffer, commandBuffers[frameIndex], 0); - //// end command buffer for recording - //commandBuffers[frameIndex]->EndRecording(); + // end command buffer for recording + commandBuffers[frameIndex]->EndRecording(); - //// submit the command buffer to copy image to buffer - //queue->SubmitCommandBuffer({ commandBuffers[frameIndex] }, {}, {}, vk::PipelineStageFlagBits::eColorAttachmentOutput, afterCopyFence); + // submit the command buffer to copy image to buffer + queue->SubmitCommandBuffer({ commandBuffers[frameIndex] }, {}, {}, vk::PipelineStageFlagBits::eColorAttachmentOutput, afterCopyFence); - //// wait for the copy to be done - //afterCopyFence->Wait(true, std::numeric_limits::max()); + // wait for the copy to be done + afterCopyFence->Wait(true, std::numeric_limits::max()); + + int mouseX = 0, mouseY = 0; + SHInputManager::GetMouseWindowPosition(&mouseX, &mouseY); + + pickedEID = imageDataDstBuffer->GetDataFromMappedPointer(mouseY * entityIDAttachment->GetWidth() + mouseX); } } + EntityID SHMousePickSystem::GetPickedEntity(void) const noexcept + { + return pickedEID; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h index 815eb938..080a192c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h @@ -29,10 +29,19 @@ namespace SHADE //! buffer to contain the attachment data after copying Handle imageDataDstBuffer; + //! eid picked from screen + EntityID pickedEID; public: + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ void Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept; - void Run (Handle queue, uint32_t frameIndex) noexcept; + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + EntityID GetPickedEntity (void) const noexcept; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 78bd1ca6..1861f6d2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -40,7 +40,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint8_t levels /*= 1*/, vk::ImageCreateFlagBits createFlags /*= {}*/) + void SHRenderGraph::AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint8_t levels /*= 1*/, vk::ImageUsageFlagBits usageFlags/* = {}*/, vk::ImageCreateFlagBits createFlags /*= {}*/) { // If we set to if (w == static_cast(-1) && h == static_cast(-1)) @@ -50,7 +50,7 @@ namespace SHADE format = swapchainHdl->GetSurfaceFormatKHR().format; } - graphResources.try_emplace(resourceName, resourceManager.Create(logicalDeviceHdl, swapchainHdl, resourceName, type, format, w, h, levels, createFlags)); + graphResources.try_emplace(resourceName, resourceManager.Create(logicalDeviceHdl, swapchainHdl, resourceName, type, format, w, h, levels, usageFlags, createFlags)); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 2e9a3310..cfc29bc2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -75,7 +75,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; - void AddResource (std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageCreateFlagBits createFlags = {}); + void AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; void Generate (void) noexcept; void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index e8c9863f..bcd1dc9f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -45,7 +45,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept + SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept : logicalDevice {logicalDevice} , swapchain{ swapchain } , resourceType{ type } @@ -61,7 +61,7 @@ namespace SHADE if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) { imageAspectFlags = vk::ImageAspectFlags{}; - usage = {}; + usage = usageFlags; // Check the resource type and set image usage flags and image aspect flags accordingly switch (resourceType) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index a490ab95..66f0677b 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -67,7 +67,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageCreateFlagBits createFlags) noexcept; + SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index ab0f089f..18890c92 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -22,6 +22,7 @@ layout(location = 0) in struct layout(location = 2) flat in struct { int materialIndex; + uint eid; } In2; //layout (set = 0, binding = ) @@ -40,6 +41,6 @@ void main() outColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) + MatProp.data[In2.materialIndex].color / MatProp.data[In2.materialIndex].alpha; - outEntityID = 5; + outEntityID = In2.eid; //outColor = vec4 (1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv index a069acf6e2e436753364704fd981a0cad627a143..bde6213644b38cb5e844a04ac20ad1ca3e43b62c 100644 GIT binary patch literal 2156 zcmZ9MOH&g;5XVRJ5QC_wh>Btm-w#9t#J5qYn5tM%VyU;SH5qU}04;w3X=)>dBy z%Wqx=P1|iGQ73IDK@>Obb`)=zVN=ZRSLky9$()Q#Ho?(B-^5tM#Dr;&ITmoiGVg8+6}=O`8Pmx9@Eu?f&Z{ zlgbKOVZ6}`H*7FJH`@st9~5VZIJ6PB<6a!Cx0B7_V=rt)>yb@lFJZ5)tW@jEL8H?N zy6H~K2CXQzK{HB}DcZ8+%HlY`C~mZR%|VBPJO=wLm_pWTyO%y`x7vx?5>n87j7jZw z+DoiD=wqYe&%<;zX?LE6X{gB-w3q&AxXVRN2#mS9`!#lfm-lCOVXN~l9KhJdTdSZt z1;sclu3R>W!WIc_l15ZQ3~ZbxMd;Aen7FG=dd?ifphG=g-gNPNK}FreMy)n#X7|{6 zEuPEd3z9iS{dsvyh4?{nADsKWE$YZ+@1>>}#0+^in(K0$M(IxNsj14JcQq;Epfl$) znf6zol1|KLis9!w?R-3j9qizMA9DrMXYuDQa|J7l$ahG*DB>d^mY*d)oT_>N;~xIZ zmHGyC>f_+cyyyX6WO}0xY~1^zVvx@c$mjmZ`D|W;^I&G^^mka1h&84A76qs z{eXB`L@a7!H{>Gsq$GApUHE}xCkH#hHYu6eqmz$4(lZ$O(Afvr6_@X*WDfbq#mgu< zlhS$HbXd6Y%$1Rre7%ll4AE{oRO-7}KGh(9gP zH{rj3?(oj|Ho);=9#=%n$j4P z=bYWgyD9zuc=N)*iN`K(iF`b4?25kF&yooHs(gum+hO3IKD&PI2qQl}pB#2qGJRru gpl$I@gHa!QeJG+nKPPtlNCb{Q?*RRmUci#*H@-Bqy8r+H delta 902 zcmZ9Kxk^J(5QZnY$qg!TL1SFw5|_B|`$j5BCx}=JS_o<(Dt19^Y~^CK0|A~p@HZSc=JGe?r=#PrSnZJ2DKK}du%Qg5>k{D0>Yu55gq%PQ zF}C7!du0>fb+vu6;mUecHdGXNE_iC#)_@?s8YeOKsK6?`Fe?~y{Jw-(3)p&uiVb;3AheN+ZJCA%P-md(rV$(Cd_*=yOTej}QHD^Z{d>WyZ7d%NCv z-E8%G&3^tZiJD2AM$LAdMXfyEkI;<|>Eg7N4BEqjk`%+Wl(ffT?ZGJP=hypDmRGw; zH?w?TdCoJ~H-;F_usz7_nzMu-KiTyetr=xAX8gJn=1~@h$yVBqzFJ>kedLScw&DWY z3*~!AY)P^7WiM%NrTsiiTagd7d(bZzS2ow2ZYRnDzSn3No+BR|v**YO zM=w3c8ZMC4@;9BC;#L0@mh|&#Q8JP=h^@8j4*>U({s+~ zY6|Rk31;B0X$Jdz^cl=qPK$+~5dyQG(yFYvB0Hye>H?D=OfSJ`r-k_r(ZE-Pk7yFJeYg;{zfu{v561`6I6XZ1 zz`PrB`2Ejm&0zoYn%RpS=)t@zzyBqziFM})%$35&e(1sU*Xt`E#_6{l!lX`gm6c?=k;`>FF=U;C~=P1CNGYF3afSduiz5 zz4E#z1xMd@)MfhoR7N~{{M^S+<#l)9_D91RxSur{Z_M`u{LJ#Mwij9t s*S0PU$MAJ*Xbm@9+slF*uI-gL;x}aYsm<3>)tbBXb%4?TRn}G6KNk$B#sB~S literal 2152 zcmZ9NYflqF6ovc&^rtYs=lJxxBLa z9K{uri-l;$g&28R%kcvIQQ5d`N;WGi%O1;~$+l$`Sx&z}&408=Ub|Oo_3Ghawf4T= z=ydAc=)3RMeJ^n9O)qpCk=J+84QF&-(C~ZBte_x8wvK}KxTHN8Mg6Sbcf)A6?YG02 z&&NDx>Gh2vhx!kDQS5UL=ksaoPs(Q$&5*Hv%Zc33bNqv#>3&m;8aTJ|U!pBYOApTc z`a#f*oS@-asbWQQCy5=o;i;;MmxybHXDIKe-Sr}`9mM;>Q)|q7L3Hf>P-l{wh|yEU zc73n2=Oz1{=W%PqdcJ=ix5mVW1h6KN*@ zp5{g-pEGjzU)!PIJPDnk`=uSW5-sn+Nsg^E!sX-l;e3?D@#FO>Xil8q%njJWRHfm5 z<^dXD?g&gRVEPZH7hw8N&XR0jtJ>beF)T+u9JA$E1CHKV4j+!UR#n9Iow)6lo%f}} zXU&4lYQXSUFL3%8V~%x++cVJDg$uYW%;1dlm@_9e<>PNH+oSC?Zr7`%IH!41yTF&V zCm4TPUQu&NHltOk3(Wf9;S{5t7v|eS178vz(ac)#8!5JZoD#kq>yo}KrFcvneIcK} zD)_8NKA3y9@d^2?Pkde;-(#|7-ds;(aO8q{6X@+;)AAYYHKUnz$wv?7&Dgze$|sjN zwa;lT$r!8$zAZyPCrsbz72Lc$-iPfUF^qjnnpu}P`-00dxLM%^&E(N@dc2roc=GRR zrvLEdgLx-##P6rR)jtv*kb%*Ic{gy}=~K#Yz*@Lis2jC6wAHxZE)v1V!7{YGTspHWJ?)fH0ZgT8#3+< zJ$H6X#=Udb=)q`+)0+n}`o(&zL0=xq;4NN~Pmg{phxij28hAAHhJT9m<&!k@gg^Xn z49mTe4@WO7w~})7;YeMhZ>uu$(G#b?zqBr~H5vP(;SBV9T~?OaGlJ3C+TO^|*7jBy nj$!NAkPnxw?On=cYugk@K6>KRX6x9J&)wKM!07*J)pgl_O#Gk( From e027318d22dbc5682a0ea116762734e03290d5bc Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 14 Oct 2022 14:35:09 +0800 Subject: [PATCH 344/793] Inspector View - Collider Component --- .../Inspector/SHEditorComponentView.hpp | 138 ++++++--- .../Inspector/SHEditorInspector.cpp | 22 +- SHADE_Engine/src/Editor/SHEditor.cpp | 2 +- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 278 ++++++++++++------ 4 files changed, 311 insertions(+), 129 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index a546504b..93f6984e 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -12,19 +12,20 @@ #include "Editor/IconsMaterialDesign.h" #include "ECS_Base/Components/SHComponent.h" #include "Editor/SHEditorWidgets.hpp" +#include "Physics/Components/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" namespace SHADE { template::value, bool> = true> static void DrawContextMenu(T* component) { - if(!component) + if (!component) return; rttr::string_view componentName = rttr::type::get().get_name(); if (ImGui::BeginPopupContextItem(componentName.data())) { - + if (ImGui::Selectable(std::format("{} Copy {}", ICON_MD_CONTENT_COPY, componentName.data()).data())) { //SHClipboardUtil::WriteStringToClipboard(SHClipboardUtil::CFNAME::CFCOMPONENT, SHComponentToString(component)); @@ -45,7 +46,7 @@ namespace SHADE { if (!component) return; - auto componentType = rttr::type::get(*component); + const auto componentType = rttr::type::get(*component); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) @@ -56,26 +57,26 @@ namespace SHADE { auto const& type = property.get_type(); - if(type.is_enumeration()) + if (type.is_enumeration()) { auto enumAlign = type.get_enumeration(); auto names = enumAlign.get_names(); std::vector list; - for(auto const& name : names) + for (auto const& name : names) list.push_back(name.data()); - SHEditorWidgets::ComboBox(property.get_name().data(), list, [component, property]{return property.get_value(component).to_int();}, [component, property](int const& idx) - { - auto enumAlign = property.get_enumeration(); - auto values = enumAlign.get_values(); - auto it = std::next(values.begin(), idx); - property.set_value(component, *it); - }); + SHEditorWidgets::ComboBox(property.get_name().data(), list, [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& idx) + { + auto enumAlign = property.get_enumeration(); + auto values = enumAlign.get_values(); + auto it = std::next(values.begin(), idx); + property.set_value(component, *it); + }); } - else if(type.is_arithmetic()) + else if (type.is_arithmetic()) { if (type == rttr::type::get()) { - SHEditorWidgets::CheckBox(property.get_name().data(), [component, property]{return property.get_value(component).to_bool();}, [component, property](bool const& result){property.set_value(component, result);}); + SHEditorWidgets::CheckBox(property.get_name().data(), [component, property] {return property.get_value(component).to_bool(); }, [component, property](bool const& result) {property.set_value(component, result); }); } //else if (type == rttr::type::get()) //{ @@ -85,39 +86,39 @@ namespace SHADE { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin && metaMax) + if (metaMin && metaMax) { - SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_int();}, [component, property](int const& result){property.set_value(component, result);}); + SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); } else { - SHEditorWidgets::DragInt(property.get_name().data(), [component, property]{return property.get_value(component).to_int();}, [component, property](int const& result){property.set_value(component, result);}); + SHEditorWidgets::DragInt(property.get_name().data(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); } } else if (type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin.is_valid() && metaMax.is_valid()) + if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property]{return property.get_value(component).to_uint8();}, [component, property](uint8_t const& result){property.set_value(component, result);},"%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property]{return property.get_value(component).to_uint8();}, [component, property](uint8_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); } } else if (type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin.is_valid() && metaMax.is_valid()) + if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_uint16();}, [component, property](uint16_t const& result){property.set_value(component, result);},"%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property]{return property.get_value(component).to_uint16();}, [component, property](uint16_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); } } else if (type == rttr::type::get()) @@ -126,50 +127,50 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMin.template get_value(), [component, property]{ return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result){property.set_value(component, result); },"%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMin.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property]{ return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result){property.set_value(component, result); },0.1f,0,0,"%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); } } else if (type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin.is_valid() && metaMax.is_valid()) + if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_uint64();}, [component, property](uint64_t const& result){property.set_value(component, result);},"%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property]{return property.get_value(component).to_uint64();}, [component, property](uint64_t const& result){property.set_value(component, result);},0.1f,0,0,"%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); } } else if (type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin.is_valid() && metaMax.is_valid()) + if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderFloat(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_float();}, [component, property](float const& result){property.set_value(component, result);}); + SHEditorWidgets::SliderFloat(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); } else { - SHEditorWidgets::DragFloat(property.get_name().data(), [component, property]{return property.get_value(component).to_float();}, [component, property](float const& result){property.set_value(component, result);}); + SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); } } else if (type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); - if(metaMin.is_valid() && metaMax.is_valid()) + if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMin.template get_value(), [component, property]{return property.get_value(component).to_double();}, [component, property](double const& result){property.set_value(component, result);}); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property]{return property.get_value(component).to_double();}, [component, property](double const& result){property.set_value(component, result);}, 0.1f); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, 0.1f); } } } @@ -183,9 +184,74 @@ namespace SHADE } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y"}, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }); } - + + } + } + else DrawContextMenu(component); + } + + template<> + static void DrawComponent(SHColliderComponent* component) + { + if (!component) + return; + const auto componentType = rttr::type::get(*component); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + ImGui::SameLine(); + if (ImGui::CollapsingHeader(componentType.get_name().data())) + { + DrawContextMenu(component); + + auto& colliders = component->GetColliders(); + int const size = static_cast(colliders.size()); + ImGui::BeginChild("Colliders", {0.0f, colliders.empty() ? 1.0f : 250.0f}, true); + for (int i{}; i < size; ++i) + { + SHCollider& collider = component->GetCollider(i); + auto cursorPos = ImGui::GetCursorPos(); + + if (collider.GetType() == SHCollider::Type::BOX) + { + SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_MD_VIEW_IN_AR, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + auto box = reinterpret_cast(collider.GetShape()); + SHEditorWidgets::DragVec3("Half Extents", { "X", "Y", "Z" }, [box] {return box->GetHalfExtents(); }, [box](SHVec3 const& vec) {box->SetHalfExtents(vec);}); + } + else if (collider.GetType() == SHCollider::Type::SPHERE) + { + SHEditorWidgets::BeginPanel(std::format("{} Sphere Collider #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + auto sphere = reinterpret_cast(collider.GetShape()); + SHEditorWidgets::DragFloat("Radius", [sphere] {return sphere->GetRadius(); }, [sphere](float const& value) {sphere->SetRadius(value);}); + } + else if (collider.GetType() == SHCollider::Type::CAPSULE) + { + + } + { + SHEditorWidgets::BeginPanel("Offset", { ImGui::GetContentRegionAvail().x, 30.0f }); + SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider.GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider.SetPositionOffset(vec); }); + SHEditorWidgets::EndPanel(); + } + if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) + { + component->RemoveCollider(i); + } + SHEditorWidgets::EndPanel(); + } + ImGui::EndChild(); + + if (ImGui::BeginMenu("Add Collider")) + { + if(ImGui::Selectable("Box Collider")) + { + component->AddBoundingBox(); + } + if(ImGui::Selectable("Sphere Collider")) + { + component->AddBoundingSphere(); + } + ImGui::EndMenu(); } } else DrawContextMenu(component); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 3d00ac4b..4fc097be 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -24,12 +24,15 @@ namespace SHADE { template, bool> = true> - void DrawAddComponentButton(EntityID const& eid) + bool DrawAddComponentButton(EntityID const& eid) { - if(!SHComponentManager::HasComponent(eid) && ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data())) + bool selected = false; + if(!SHComponentManager::HasComponent(eid)) { - SHComponentManager::AddComponent(eid); + if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + SHComponentManager::AddComponent(eid); } + return selected; } SHEditorInspector::SHEditorInspector() @@ -47,11 +50,6 @@ namespace SHADE SHEditorWindow::Update(); if (Begin()) { - if (ImGui::Button("AUDIO")) - { - auto audioSystem = SHSystemManager::GetSystem(); - audioSystem->PlayEventOnce("event:/Characters/sfx_footsteps_raccoon"); - } if (!SHEditor::selectedEntities.empty()) { @@ -90,7 +88,13 @@ namespace SHADE DrawAddComponentButton(eid); DrawAddComponentButton(eid); DrawAddComponentButton(eid); - DrawAddComponentButton(eid); + if(DrawAddComponentButton(eid)) + { + if(SHComponentManager::GetComponent_s(eid) == nullptr) + { + SHComponentManager::AddComponent(eid); + } + } ImGui::EndMenu(); } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index e94f7398..e1c309b4 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -147,7 +147,7 @@ namespace SHADE ImFont* mainFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path static const ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; - ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.PixelSnapH = true; + ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; ImFont* UIFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path io.Fonts->Build(); diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 8d2adcc6..3fa1789e 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -26,7 +26,7 @@ namespace SHADE { class SH_API SHEditorWidgets { - public: + public: //#==============================================================# //|| Constructor || //#==============================================================# @@ -35,6 +35,118 @@ namespace SHADE //#==============================================================# //|| Custom Widgets || //#==============================================================# + inline static ImVector panelStack{}; + static void BeginPanel(std::string_view const& name, const ImVec2& size) + { + ImGui::BeginGroup(); + + auto cursorPos = ImGui::GetCursorScreenPos(); + auto itemSpacing = ImGui::GetStyle().ItemSpacing; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); + + auto frameHeight = ImGui::GetFrameHeight(); + ImGui::BeginGroup(); + + ImVec2 effectiveSize = size; + if (size.x < 0.0f) + effectiveSize.x = ImGui::GetContentRegionAvail().x; + else + effectiveSize.x = size.x; + ImGui::Dummy(ImVec2(effectiveSize.x, 0.0f)); + + ImGui::Dummy(ImVec2(frameHeight * 0.5f, 0.0f)); + ImGui::SameLine(0.0f, 0.0f); + ImGui::BeginGroup(); + ImGui::Dummy(ImVec2(frameHeight * 0.5f, 0.0f)); + ImGui::SameLine(0.0f, 0.0f); + ImGui::TextUnformatted(name.data()); + auto labelMin = ImGui::GetItemRectMin(); + auto labelMax = ImGui::GetItemRectMax(); + ImGui::SameLine(0.0f, 0.0f); + ImGui::Dummy(ImVec2(0.0, frameHeight + itemSpacing.y)); + ImGui::BeginGroup(); + + ImGui::PopStyleVar(2); + + ImGui::GetCurrentWindow()->ContentRegionRect.Max.x -= frameHeight * 0.5f; + ImGui::GetCurrentWindow()->WorkRect.Max.x -= frameHeight * 0.5f; + ImGui::GetCurrentWindow()->InnerRect.Max.x -= frameHeight * 0.5f; + + ImGui::GetCurrentWindow()->Size.x -= frameHeight; + + auto itemWidth = ImGui::CalcItemWidth(); + ImGui::PushItemWidth(ImMax(0.0f, itemWidth - frameHeight)); + + panelStack.push_back(ImRect(labelMin, labelMax)); + } + + static void EndPanel() + { + ImGui::PopItemWidth(); + + auto itemSpacing = ImGui::GetStyle().ItemSpacing; + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); + + auto frameHeight = ImGui::GetFrameHeight(); + + ImGui::EndGroup(); + + ImGui::EndGroup(); + + ImGui::SameLine(0.0f, 0.0f); + ImGui::Dummy(ImVec2(frameHeight * 0.5f, 0.0f)); + ImGui::Dummy(ImVec2(0.0, frameHeight - frameHeight * 0.5f - itemSpacing.y)); + + ImGui::EndGroup(); + + auto itemMin = ImGui::GetItemRectMin(); + auto itemMax = ImGui::GetItemRectMax(); + + auto labelRect = panelStack.back(); + panelStack.pop_back(); + + ImVec2 halfFrame = ImVec2(frameHeight * 0.25f, frameHeight) * 0.5f; + ImRect frameRect = ImRect(itemMin + halfFrame, itemMax - ImVec2(halfFrame.x, 0.0f)); + labelRect.Min.x -= itemSpacing.x; + labelRect.Max.x += itemSpacing.x; + for (int i = 0; i < 4; ++i) + { + switch (i) + { + // left half-plane + case 0: ImGui::PushClipRect(ImVec2(-FLT_MAX, -FLT_MAX), ImVec2(labelRect.Min.x, FLT_MAX), true); break; + // right half-plane + case 1: ImGui::PushClipRect(ImVec2(labelRect.Max.x, -FLT_MAX), ImVec2(FLT_MAX, FLT_MAX), true); break; + // top + case 2: ImGui::PushClipRect(ImVec2(labelRect.Min.x, -FLT_MAX), ImVec2(labelRect.Max.x, labelRect.Min.y), true); break; + // bottom + case 3: ImGui::PushClipRect(ImVec2(labelRect.Min.x, labelRect.Max.y), ImVec2(labelRect.Max.x, FLT_MAX), true); break; + } + + ImGui::GetWindowDrawList()->AddRect( + frameRect.Min, frameRect.Max, + ImColor(ImGui::GetStyleColorVec4(ImGuiCol_Button)), + halfFrame.x); + + ImGui::PopClipRect(); + } + + ImGui::PopStyleVar(2); + + ImGui::GetCurrentWindow()->ContentRegionRect.Max.x += frameHeight * 0.5f; + ImGui::GetCurrentWindow()->WorkRect.Max.x += frameHeight * 0.5f; + ImGui::GetCurrentWindow()->InnerRect.Max.x += frameHeight * 0.5f; + + ImGui::GetCurrentWindow()->Size.x += frameHeight; + + ImGui::Dummy(ImVec2(0.0f, 0.0f)); + + ImGui::EndGroup(); + } + static bool Splitter(bool verticalSplit, float thickness, float* size1, float* size2, float minSize1, float minSize2, float splitterAxisSize = -1.0f) { ImGuiWindow* window = ImGui::GetCurrentWindow(); @@ -44,7 +156,7 @@ namespace SHADE bb.Max = bb.Min + (verticalSplit ? ImVec2(thickness, splitterAxisSize) : ImVec2(splitterAxisSize, thickness)); return ImGui::SplitterBehavior(bb, id, verticalSplit ? ImGuiAxis_X : ImGuiAxis_Y, size1, size2, minSize1, minSize2, 0.0f); } - + template static bool DragN(const std::string& fieldLabel, std::vectorconst& componentLabels, std::vector values, float speed = 0.1f, const char* displayFormat = "", T valueMin = T(), T valueMax = T(), @@ -53,7 +165,7 @@ namespace SHADE const ImGuiWindow* const window = ImGui::GetCurrentWindow(); if (window->SkipItems) return false; - + const ImGuiContext& g = *GImGui; bool valueChanged = false; ImGui::BeginGroup(); @@ -69,15 +181,15 @@ namespace SHADE ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); ImGui::SetNextItemWidth(80.0f); valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); - + const ImVec2 min = ImGui::GetItemRectMin(); const ImVec2 max = ImGui::GetItemRectMax(); const float spacing = g.Style.FrameRounding; const float halfSpacing = spacing / 2; - + window->DrawList->AddLine({ min.x + spacing, max.y - halfSpacing }, { max.x - spacing, max.y - halfSpacing }, ImGuiColors::colors[i], 4); - + ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); ImGui::PopID(); ImGui::PopItemWidth(); @@ -85,10 +197,10 @@ namespace SHADE ImGui::EndColumns(); ImGui::PopID(); ImGui::EndGroup(); - + return valueChanged; } - + static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) @@ -99,98 +211,98 @@ namespace SHADE { changed = true; } - + if (changed) { if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); } - + return changed; } - + static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); bool changed = false; - if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags)) + if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags)) { changed = true; } - + if (changed) { if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); } - + return changed; } - + static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); bool changed = false; - if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags)) + if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags)) { changed = true; } - + if (changed) { if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); } - + return changed; } - + //#==============================================================# //|| Widget Extensions || //#==============================================================# - + static bool CheckBox(std::string const& label, std::function get, std::function set) { bool value = get(); if (ImGui::Checkbox(label.c_str(), &value)) { - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); return true; } return false; } - + template - static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) + static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) { T type = get(); for (size_t i = 0; i < listTypes.size(); i++) { if (ImGui::RadioButton(listLabels[i].c_str(), type == listTypes[i])) { - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); } ImGui::SameLine(); } return true; } - + static bool InputText(const std::string& label, const std::function get, const std::function set, ImGuiInputTextFlags flag = 0, ImGuiInputTextCallback callback = (ImGuiInputTextCallback)0, void* userData = (void*)0) @@ -199,35 +311,35 @@ namespace SHADE if (ImGui::InputText(label.c_str(), &text, flag, callback, userData)) { if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); + return true; } return false; } - + template static bool DragScalar(const std::string& fieldLabel, ImGuiDataType data_type, std::function get, std::function set, float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { T value = get(); - std::cout << value <<" \n"; + std::cout << value << " \n"; //bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); - + if (ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags)) { if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + return true; } return false; } - + static bool DragFloat(const std::string& fieldLabel, std::function get, std::function set, float speed = 0.1f, float p_min = float(), float p_max = float(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { @@ -236,18 +348,18 @@ namespace SHADE if (ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) { if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + return true; } - + return false; } - + static bool DragInt(const std::string& fieldLabel, std::function get, std::function set, float speed = 1.0f, int p_min = int(), int p_max = int(), const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { @@ -256,35 +368,35 @@ namespace SHADE if (ImGui::DragInt(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) { if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + return true; } - + return false; } - template - static bool SliderScalar(const std::string& fieldLabel, ImGuiDataType data_type, T min, T max, std::function get, std::function set, + template + static bool SliderScalar(const std::string& fieldLabel, ImGuiDataType data_type, T min, T max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + { + T value = get(); + if (ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags)) { - T value = get(); - if (ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags)) - { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - - return true; - } - - return false; + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + + return true; } - + + return false; + } + static bool SliderFloat(const std::string& fieldLabel, float min, float max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { @@ -292,17 +404,17 @@ namespace SHADE if (ImGui::SliderFloat(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) { if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + + return true; } - + return false; } - + static bool SliderInt(const std::string& fieldLabel, int min, int max, std::function get, std::function set, const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { @@ -310,26 +422,26 @@ namespace SHADE if (ImGui::SliderInt(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) { if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + return true; } - + return false; } - + static bool ComboBox(const std::string& fieldLabel, std::vector list, std::function get, std::function set) { bool edited = false; int selected = get(); ImGui::PushID(fieldLabel.c_str()); ImGui::Text(fieldLabel.c_str()); ImGui::SameLine(); - + if (edited = ImGui::Combo("##Combo", &selected, list.data(), static_cast(list.size()))) { - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), selected, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), selected, set)), false); } ImGui::PopID(); return edited; From 49575893fe9228192fa759b6a067e843eac06918 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 14 Oct 2022 15:39:43 +0800 Subject: [PATCH 345/793] Made Editor a system and create editor routine so that the editor routine will run between graphics routines --- .../src/Application/SBApplication.cpp | 96 ++++----- .../HierarchyPanel/SHHierarchyPanel.cpp | 23 ++- .../Inspector/SHEditorInspector.cpp | 8 +- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 5 +- SHADE_Engine/src/Editor/SHEditor.cpp | 37 ++-- SHADE_Engine/src/Editor/SHEditor.hpp | 191 ++++++++++-------- 6 files changed, 198 insertions(+), 162 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index c6da6f1f..eb7d5432 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -56,46 +56,58 @@ namespace Sandbox ) { // Set working directory - SHADE::SHFileUtilities::SetWorkDirToExecDir(); + SHFileUtilities::SetWorkDirToExecDir(); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); // Create Systems - SHADE::SHSystemManager::CreateSystem(); - SHADE::SHSystemManager::CreateSystem(); - SHADE::SHSystemManager::CreateSystem(); - SHADE::SHSystemManager::CreateSystem(); - SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); - SHADE::SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); + SHSystemManager::CreateSystem(); + +#ifdef SHEDITOR + SDL_Init(SDL_INIT_VIDEO); + sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); + SHSystemManager::CreateSystem(); + SHSystemManager::GetSystem()->SetSDLWindow(sdlWindow); +#endif // Create Routines - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); - SHADE::SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + +#ifdef SHEDITOR + SHSystemManager::RegisterRoutine(); +#endif - SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHComponentManager::CreateComponentSparseSet(); - SHADE::SHComponentManager::CreateComponentSparseSet(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); //TODO: REMOVE AFTER PRESENTATION - //SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); - SHADE::SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); - //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); - //SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); - SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); + //SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); + SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); + //SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); + //SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); + SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); //TODO: REMOVE AFTER PRESENTATION @@ -103,19 +115,12 @@ namespace Sandbox auto id2 = SHFamilyID::GetID(); auto id3 = SHFamilyID::GetID(); - SHADE::SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); // Set up graphics system and windows graphicsSystem->SetWindow(&window); - SHADE::SHSystemManager::Init(); - #ifdef SHEDITOR - SDL_Init(SDL_INIT_VIDEO); - sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); - SHADE::SHEditor::Initialise(sdlWindow); - #else - #endif - + SHSystemManager::Init(); SHSceneManager::InitSceneManager("TestScene"); @@ -124,7 +129,7 @@ namespace Sandbox void SBApplication::Update(void) { - SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem()); + SHGraphicsSystem* graphicsSystem = SHADE::SHSystemManager::GetSystem(); //TODO: Change true to window is open while (!window.WindowShouldClose()) { @@ -134,16 +139,16 @@ namespace Sandbox SHSceneManager::SceneUpdate(1/60.0f); //#ifdef SHEDITOR //#endif - graphicsSystem->BeginRender(); + //graphicsSystem->BeginRender(); #ifdef SHEDITOR - SHADE::SHEditor::Update(0.16f); + //SHADE::SHEditor::Update(0.16f); #endif - graphicsSystem->Run(1.0f); - graphicsSystem->EndRender(); + //graphicsSystem->Run(1.0f); + //graphicsSystem->EndRender(); - SHADE::SHSystemManager::RunRoutines(false, 0.016f); + SHSystemManager::RunRoutines(false, 0.016f); } // Finish all graphics jobs first @@ -154,13 +159,12 @@ namespace Sandbox void SBApplication::Exit(void) { #ifdef SHEDITOR - SHADE::SHEditor::Exit(); SDL_DestroyWindow(sdlWindow); SDL_Quit(); - #endif + #endif SHSceneManager::Exit(); - SHADE::SHSystemManager::Exit(); + SHSystemManager::Exit(); } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 25cd5a6a..0f25175f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -6,11 +6,11 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# +#include "Editor/SHEditor.hpp" #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" #include "SHHierarchyPanel.h" #include "ECS_Base/Managers/SHEntityManager.h" -#include "Editor/SHEditor.hpp" #include "Scene/SHSceneManager.h" #include "Editor/DragDrop/SHDragDrop.hpp" #include "Tools/SHException.h" @@ -62,7 +62,8 @@ namespace SHADE if(ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { - SHEditor::selectedEntities.clear(); + if(auto editor = SHSystemManager::GetSystem()) + editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); ImGui::End(); @@ -102,7 +103,9 @@ namespace SHADE //Get node data (Children, eid, selected) auto& children = currentNode->GetChildren(); EntityID eid = currentNode->GetEntityID(); - const bool isSelected = (std::ranges::find(SHEditor::selectedEntities, eid) != SHEditor::selectedEntities.end()); + auto editor = SHSystemManager::GetSystem(); + + const bool isSelected = (std::ranges::find(editor->selectedEntities, eid) != editor->selectedEntities.end()); const ImGuiTreeNodeFlags nodeFlags = ((isSelected) ? ImGuiTreeNodeFlags_Selected : 0) | ((children.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow); @@ -140,8 +143,8 @@ namespace SHADE { if(!isSelected) { - SHEditor::selectedEntities.clear(); - SHEditor::selectedEntities.push_back(eid); + editor->selectedEntities.clear(); + editor->selectedEntities.push_back(eid); } if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { @@ -163,19 +166,19 @@ namespace SHADE if (!isSelected) { if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) - SHEditor::selectedEntities.clear(); - SHEditor::selectedEntities.push_back(eid); + editor->selectedEntities.clear(); + editor->selectedEntities.push_back(eid); }//if not selected else { if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) { - auto it = std::ranges::remove(SHEditor::selectedEntities, eid).begin(); + auto it = std::ranges::remove(editor->selectedEntities, eid).begin(); }//if mod ctrl is not pressed else { - SHEditor::selectedEntities.clear(); - SHEditor::selectedEntities.push_back(eid); + editor->selectedEntities.clear(); + editor->selectedEntities.push_back(eid); } }//if selected }//if left mouse button released diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 4fc097be..a9b1c724 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -1,5 +1,6 @@ #include "SHpch.h" +#include "Editor/SHEditor.hpp" #include "SHEditorInspector.h" #include "ECS_Base/SHECSMacros.h" @@ -7,7 +8,6 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "Math/Transform/SHTransformComponent.h" -#include "Editor/SHEditor.hpp" #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" #include "SHEditorComponentView.hpp" @@ -50,10 +50,10 @@ namespace SHADE SHEditorWindow::Update(); if (Begin()) { - - if (!SHEditor::selectedEntities.empty()) + auto editor = SHSystemManager::GetSystem(); + if (editor && !editor->selectedEntities.empty()) { - EntityID const& eid = SHEditor::selectedEntities[0]; + EntityID const& eid = editor->selectedEntities[0]; SHEntity* entity = SHEntityManager::GetEntityByID(eid); ImGui::TextColored(ImGuiColors::green, "EID: %zu", eid); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 8e26ae78..a49af994 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -3,11 +3,11 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# +#include "Editor/SHEditor.hpp" #include "SHEditorMenuBar.h" #include "Editor/IconsMaterialDesign.h" #include "Editor/Command/SHCommandManager.h" #include "Scripting/SHScriptEngine.h" -#include "Editor/SHEditor.hpp" #include "ECS_Base/Managers/SHSystemManager.h" //#==============================================================# @@ -95,7 +95,8 @@ namespace SHADE { if(ImGui::Selectable(style.to_string().c_str())) { - SHEditor::SetStyle(style.convert()); + if(auto editor = SHSystemManager::GetSystem()) + editor->SetStyle(style.convert()); } } ImGui::EndMenu(); diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index e1c309b4..d9fc8373 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -60,18 +60,18 @@ RTTR_REGISTRATION namespace SHADE { //#==============================================================# - //|| Initialise static members || + //|| Init static members || //#==============================================================# - Handle SHEditor::imguiCommandPool; - Handle SHEditor::imguiCommandBuffer; - SHEditor::EditorWindowMap SHEditor::editorWindows{}; - SHEditor::EditorWindowID SHEditor::windowCount{}; - std::vector SHEditor::selectedEntities; + //Handle SHEditor::imguiCommandPool; + //Handle SHEditor::imguiCommandBuffer; + SHEditorWindowManager::EditorWindowMap SHEditorWindowManager::editorWindows{}; + SHEditorWindowManager::EditorWindowID SHEditorWindowManager::windowCount{}; + //std::vector SHEditor::selectedEntities; //#==============================================================# //|| Public Member Functions || //#==============================================================# - void SHEditor::Initialise(SDL_Window* const sdlWindow) + void SHEditor::Init() { IMGUI_CHECKVERSION(); if(auto context = ImGui::CreateContext()) @@ -90,28 +90,28 @@ namespace SHADE InitFonts(); - auto id = SHFamilyID::GetID(); auto id2 = SHFamilyID::GetID(); auto id3 = SHFamilyID::GetID(); - InitBackend(sdlWindow); + + InitBackend(); SetStyle(Style::SHADE); //Add editor windows - CreateEditorWindow(); - CreateEditorWindow(); - CreateEditorWindow(); - CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); SHLOG_INFO("Successfully initialised SHADE Engine Editor") } - void SHEditor::Update(float const dt) + void SHEditor::Update(double const dt) { (void)dt; NewFrame(); - for (const auto& window : editorWindows | std::views::values) + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) { if(window->isOpen) window->Update(); @@ -260,7 +260,7 @@ namespace SHADE //#==============================================================# //|| Private Member Functions || //#==============================================================# - void SHEditor::InitBackend(SDL_Window* sdlWindow) + void SHEditor::InitBackend() { if(ImGui_ImplSDL2_InitForVulkan(sdlWindow) == false) { @@ -322,4 +322,9 @@ namespace SHADE } + void SHEditor::EditorRoutine::Execute(double dt) noexcept + { + reinterpret_cast(system)->Update(dt); + } + }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index 467cbcd0..d579a9b5 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -11,6 +11,8 @@ //#==============================================================# #include "SH_API.h" #include "ECS_Base/SHECSMacros.h" +#include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/Handle.h" #include "EditorWindow/SHEditorWindow.h" #include "Tools/SHLogger.h" @@ -28,11 +30,7 @@ namespace SHADE class SHVkCommandBuffer; class SHVkCommandPool; - /** - * @brief SHEditor static class contains editor variables and implementation of editor functions. - * - */ - class SH_API SHEditor + class SHEditorWindowManager { public: //#==============================================================# @@ -41,46 +39,6 @@ namespace SHADE using EditorWindowID = uint8_t; using EditorWindowPtr = std::unique_ptr; using EditorWindowMap = std::unordered_map; - - /** - * @brief Style options - * - */ - enum class Style : uint8_t - { - SHADE, - DARK, - LIGHT, - CLASSIC - }; - - /** - * @brief Initialise the editor - * - * @param sdlWindow pointer to SDL_Window object created in application - */ - static void Initialise(SDL_Window* sdlWindow); - - /** - * @brief Update the editor and add to ImGui DrawList - * - * @param dt Delta-time of the frame - */ - static void Update(float dt); - - /** - * @brief Safely shutdown the editor - * - */ - static void Exit(); - - /** - * @brief Set the Style for the editor - * - * @param style Desired style - */ - static void SetStyle(Style style); - /** * @brief Get ID for the Editor Window Type * @@ -100,39 +58,6 @@ namespace SHADE return id; } - /** - * @brief Get pointer to the Editor Window - * - * @tparam T Type of editor window to retrieve - * @return T* Pointer to the editor window - */ - template , bool> = true> - static T* GetEditorWindow() - { - return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); - } - - // List of selected entities - static std::vector selectedEntities; - - private: - /** - * @brief Initialise Backend for ImGui (SDL and Vulkan backend) - * - * @param sdlWindow Pointer to SDL_Window - */ - static void InitBackend(SDL_Window* sdlWindow); - /** - * @brief Start new frame for editor - * - */ - static void NewFrame(); - /** - * @brief Perform ImGui and ImGui Backend Render - * - */ - static void Render(); - /** * @brief Create an Editor Window * @@ -153,16 +78,114 @@ namespace SHADE } } - static void InitFonts() noexcept; - - // Handle to command pool used for ImGui Vulkan Backend - static Handle imguiCommandPool; - // Handle to command buffer used for ImGui Vulkan Backend - static Handle imguiCommandBuffer; + /** + * @brief Get pointer to the Editor Window + * + * @tparam T Type of editor window to retrieve + * @return T* Pointer to the editor window + */ + template , bool> = true> + static T* GetEditorWindow() + { + return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); + } + private: // Number of windows; used for Editor Window ID Generation static EditorWindowID windowCount; // Map of Editor Windows static EditorWindowMap editorWindows; + friend class SHEditor; + }; + + /** + * @brief SHEditor static class contains editor variables and implementation of editor functions. + * + */ + class SH_API SHEditor final : public SHSystem + { + public: + + + class SH_API EditorRoutine final : public SHSystemRoutine + { + public: + EditorRoutine() = default; + void Execute(double dt) noexcept override final; + }; + + /** + * @brief Style options + * + */ + enum class Style : uint8_t + { + SHADE, + DARK, + LIGHT, + CLASSIC + }; + + /** + * @brief Initialise the editor + * + * @param sdlWindow pointer to SDL_Window object created in application + */ + void Init(); + + /** + * @brief Update the editor and add to ImGui DrawList + * + * @param dt Delta-time of the frame + */ + void Update(double dt); + + /** + * @brief Safely shutdown the editor + * + */ + void Exit(); + + /** + * @brief Set the Style for the editor + * + * @param style Desired style + */ + void SetStyle(Style style); + + /** + * @brief Initialise Backend for ImGui (SDL and Vulkan backend) + * + * @param sdlWindow Pointer to SDL_Window + */ + void InitBackend(); + + void SetSDLWindow(SDL_Window* inSDLWindow){sdlWindow = inSDLWindow;}; + + // List of selected entities + std::vector selectedEntities; + + private: + /** + * @brief Start new frame for editor + * + */ + void NewFrame(); + /** + * @brief Perform ImGui and ImGui Backend Render + * + */ + void Render(); + + + + void InitFonts() noexcept; + + // Handle to command pool used for ImGui Vulkan Backend + Handle imguiCommandPool; + // Handle to command buffer used for ImGui Vulkan Backend + Handle imguiCommandBuffer; + + SDL_Window* sdlWindow; };//class SHEditor }//namespace SHADE From 22cad78728a22e198a848d273a1d4ee52bc23321 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 14 Oct 2022 15:53:29 +0800 Subject: [PATCH 346/793] Clean up --- SHADE_Application/src/Application/SBApplication.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index eb7d5432..202a3852 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -136,18 +136,7 @@ namespace Sandbox SHFrameRateController::UpdateFRC(); SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); SHSceneManager::UpdateSceneManager(); - SHSceneManager::SceneUpdate(1/60.0f); - //#ifdef SHEDITOR - //#endif - //graphicsSystem->BeginRender(); - - #ifdef SHEDITOR - //SHADE::SHEditor::Update(0.16f); - #endif - - //graphicsSystem->Run(1.0f); - //graphicsSystem->EndRender(); - + SHSceneManager::SceneUpdate(0.016f); SHSystemManager::RunRoutines(false, 0.016f); } From 3b3492843fe743c28dd1c5961977e449e8e4c638 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 16 Oct 2022 03:25:33 +0800 Subject: [PATCH 347/793] Added input class --- SHADE_Managed/src/Input/Input.cxx | 102 ++++++++++ SHADE_Managed/src/Input/Input.hxx | 325 ++++++++++++++++++++++++++++++ 2 files changed, 427 insertions(+) create mode 100644 SHADE_Managed/src/Input/Input.cxx create mode 100644 SHADE_Managed/src/Input/Input.hxx diff --git a/SHADE_Managed/src/Input/Input.cxx b/SHADE_Managed/src/Input/Input.cxx new file mode 100644 index 00000000..0a386f3a --- /dev/null +++ b/SHADE_Managed/src/Input/Input.cxx @@ -0,0 +1,102 @@ +/************************************************************************************//*! +\file Input.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of the managed Input static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "Input.hxx" +#include "Utility/Convert.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + Vector3 Input::MousePosition::get() + { + int x, y; + SHInputManager::GetMouseWindowPosition(&x, &y); + return Vector3(static_cast(x), static_cast(y), 0.0f); + } + int Input::MouseScrollDelta::get() + { + return SHInputManager::GetMouseWheelVerticalDelta(); + } + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + bool Input::GetKey(KeyCode key) + { + return SHInputManager::GetKey(static_cast(key)); + } + + bool Input::GetKeyDown(KeyCode key) + { + return SHInputManager::GetKeyDown(static_cast(key)); + } + + bool Input::GetKeyUp(KeyCode key) + { + return SHInputManager::GetKeyUp(static_cast(key)); + } + + bool Input::GetMouseButton(MouseCode mouseButton) + { + return SHInputManager::GetKey(static_cast(mouseButton)); + } + + bool Input::GetMouseButtonDown(MouseCode mouseButton) + { + return SHInputManager::GetKeyDown(static_cast(mouseButton)); + } + + bool Input::GetMouseButtonUp(MouseCode mouseButton) + { + return SHInputManager::GetKeyUp(static_cast(mouseButton)); + } + + /*---------------------------------------------------------------------------------*/ + /* Cursor Functions */ + /*---------------------------------------------------------------------------------*/ + void Input::SetMousePosition(Vector2 pos) + { + SHInputManager::SetMouseWindowPosition + ( + static_cast(pos.x), + static_cast(pos.y) + ); + } + + /*---------------------------------------------------------------------------------*/ + /* Time Functions */ + /*---------------------------------------------------------------------------------*/ + double Input::GetKeyHeldTime(KeyCode key) + { + return SHInputManager::GetKeyHeldTime(static_cast(key)); + } + + double Input::GetKeyReleasedTime(KeyCode key) + { + return SHInputManager::GetKeyReleasedTime(static_cast(key)); + } + + double Input::GetMouseHeldTime(MouseCode key) + { + return SHInputManager::GetKeyHeldTime(static_cast(key)); + } + + double Input::GetMouseReleasedTime(MouseCode key) + { + return SHInputManager::GetKeyReleasedTime(static_cast(key)); + } + +} \ No newline at end of file diff --git a/SHADE_Managed/src/Input/Input.hxx b/SHADE_Managed/src/Input/Input.hxx new file mode 100644 index 00000000..f281e4c8 --- /dev/null +++ b/SHADE_Managed/src/Input/Input.hxx @@ -0,0 +1,325 @@ +/************************************************************************************//*! +\file Input.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of the managed Input static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "Input/SHInputManager.h" +#include "Math/Vector2.hxx" +#include "Math/Vector3.hxx" + +namespace SHADE +{ + /// + /// Static class responsible for providing access to Input-related functionality. + /// + public ref class Input abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Represents the available supported keycodes that can be passed into the + /// key-based Input functions. + /// + enum class KeyCode : int + { + Space = static_cast(SHInputManager::SH_KEYCODE::SPACE), + //Apostrophe = static_cast(SHInputManager::SH_KEYCODE::APOSTROPHE), + Comma = static_cast(SHInputManager::SH_KEYCODE::OEM_COMMA), + Minus = static_cast(SHInputManager::SH_KEYCODE::OEM_MINUS), + Period = static_cast(SHInputManager::SH_KEYCODE::OEM_PERIOD), + //Slash = static_cast(SHInputManager::SH_KEYCODE::SLASH), + Key0 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_0), + Key1 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_1), + Key2 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_2), + Key3 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_3), + Key4 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_4), + Key5 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_5), + Key6 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_6), + Key7 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_7), + Key8 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_8), + Key9 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_9), + + //Semicolon = static_cast(SHInputManager::SH_KEYCODE::SEMICOLON), + //Equal = static_cast(SHInputManager::SH_KEYCODE::EQUAL), + + A = static_cast(SHInputManager::SH_KEYCODE::A), + B = static_cast(SHInputManager::SH_KEYCODE::B), + C = static_cast(SHInputManager::SH_KEYCODE::C), + D = static_cast(SHInputManager::SH_KEYCODE::D), + E = static_cast(SHInputManager::SH_KEYCODE::E), + F = static_cast(SHInputManager::SH_KEYCODE::F), + G = static_cast(SHInputManager::SH_KEYCODE::G), + H = static_cast(SHInputManager::SH_KEYCODE::H), + I = static_cast(SHInputManager::SH_KEYCODE::I), + J = static_cast(SHInputManager::SH_KEYCODE::J), + K = static_cast(SHInputManager::SH_KEYCODE::K), + L = static_cast(SHInputManager::SH_KEYCODE::L), + M = static_cast(SHInputManager::SH_KEYCODE::M), + N = static_cast(SHInputManager::SH_KEYCODE::N), + O = static_cast(SHInputManager::SH_KEYCODE::O), + P = static_cast(SHInputManager::SH_KEYCODE::P), + Q = static_cast(SHInputManager::SH_KEYCODE::Q), + R = static_cast(SHInputManager::SH_KEYCODE::R), + S = static_cast(SHInputManager::SH_KEYCODE::S), + T = static_cast(SHInputManager::SH_KEYCODE::T), + U = static_cast(SHInputManager::SH_KEYCODE::U), + V = static_cast(SHInputManager::SH_KEYCODE::V), + W = static_cast(SHInputManager::SH_KEYCODE::W), + X = static_cast(SHInputManager::SH_KEYCODE::X), + Y = static_cast(SHInputManager::SH_KEYCODE::Y), + Z = static_cast(SHInputManager::SH_KEYCODE::Z), + + //LeftBracket = static_cast(SHInputManager::SH_KEYCODE::LEFTBRACKET), + //BackSlash = static_cast(SHInputManager::SH_KEYCODE::BACKSLASH), + //RightBracket = static_cast(SHInputManager::SH_KEYCODE::RIGHTBRACKET), + //GraveAccent = static_cast(SHInputManager::SH_KEYCODE::GRAVEACCENT), + + //WORLD1 = static_cast(SHInputManager::SH_KEYCODE::WORLD1), + //WORLD2 = static_cast(SHInputManager::SH_KEYCODE::WORLD2), + + /* Function keys */ + Escape = static_cast(SHInputManager::SH_KEYCODE::ESCAPE), + Enter = static_cast(SHInputManager::SH_KEYCODE::ENTER), + Tab = static_cast(SHInputManager::SH_KEYCODE::TAB), + Backspace = static_cast(SHInputManager::SH_KEYCODE::BACKSPACE), + Insert = static_cast(SHInputManager::SH_KEYCODE::INSERT), + Delete = static_cast(SHInputManager::SH_KEYCODE::DEL), + Right = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ARROW), + Left = static_cast(SHInputManager::SH_KEYCODE::LEFT_ARROW), + Down = static_cast(SHInputManager::SH_KEYCODE::DOWN_ARROW), + Up = static_cast(SHInputManager::SH_KEYCODE::UP_ARROW), + PageUp = static_cast(SHInputManager::SH_KEYCODE::PAGE_UP), + PageDown = static_cast(SHInputManager::SH_KEYCODE::PAGE_DOWN), + Home = static_cast(SHInputManager::SH_KEYCODE::HOME), + End = static_cast(SHInputManager::SH_KEYCODE::END), + CapsLock = static_cast(SHInputManager::SH_KEYCODE::CAPS_LOCK), + ScrollLock = static_cast(SHInputManager::SH_KEYCODE::SCROLL_LOCK), + NumLock = static_cast(SHInputManager::SH_KEYCODE::NUM_LOCK), + PrintScreen = static_cast(SHInputManager::SH_KEYCODE::PRINT_SCREEN), + Pause = static_cast(SHInputManager::SH_KEYCODE::PAUSE), + F1 = static_cast(SHInputManager::SH_KEYCODE::F1), + F2 = static_cast(SHInputManager::SH_KEYCODE::F2), + F3 = static_cast(SHInputManager::SH_KEYCODE::F3), + F4 = static_cast(SHInputManager::SH_KEYCODE::F4), + F5 = static_cast(SHInputManager::SH_KEYCODE::F5), + F6 = static_cast(SHInputManager::SH_KEYCODE::F6), + F7 = static_cast(SHInputManager::SH_KEYCODE::F7), + F8 = static_cast(SHInputManager::SH_KEYCODE::F8), + F9 = static_cast(SHInputManager::SH_KEYCODE::F9), + F10 = static_cast(SHInputManager::SH_KEYCODE::F10), + F11 = static_cast(SHInputManager::SH_KEYCODE::F11), + F12 = static_cast(SHInputManager::SH_KEYCODE::F12), + F13 = static_cast(SHInputManager::SH_KEYCODE::F13), + F14 = static_cast(SHInputManager::SH_KEYCODE::F14), + F15 = static_cast(SHInputManager::SH_KEYCODE::F15), + F16 = static_cast(SHInputManager::SH_KEYCODE::F16), + F17 = static_cast(SHInputManager::SH_KEYCODE::F17), + F18 = static_cast(SHInputManager::SH_KEYCODE::F18), + F19 = static_cast(SHInputManager::SH_KEYCODE::F19), + F20 = static_cast(SHInputManager::SH_KEYCODE::F20), + F21 = static_cast(SHInputManager::SH_KEYCODE::F21), + F22 = static_cast(SHInputManager::SH_KEYCODE::F22), + F23 = static_cast(SHInputManager::SH_KEYCODE::F23), + F24 = static_cast(SHInputManager::SH_KEYCODE::F24), + + /* Keypad */ + KeyPad0 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_0), + KeyPad1 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_1), + KeyPad2 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_2), + KeyPad3 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_3), + KeyPad4 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_4), + KeyPad5 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_5), + KeyPad6 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_6), + KeyPad7 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_7), + KeyPad8 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_8), + KeyPad9 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_9), + //KeyPadDecimal = static_cast(SHInputManager::SH_KEYCODE::KPDECIMAL), + //KeyPadDivide = static_cast(SHInputManager::SH_KEYCODE::KPDIVIDE), + //KeyPadMultiply = static_cast(SHInputManager::SH_KEYCODE::KPMULTIPLY), + //KeyPadSubtract = static_cast(SHInputManager::SH_KEYCODE::KPSUBTRACT), + //KeyPadAdd = static_cast(SHInputManager::SH_KEYCODE::KPADD), + //KeyPadEnter = static_cast(SHInputManager::SH_KEYCODE::KPENTER), + //KeyPadEqual = static_cast(SHInputManager::SH_KEYCODE::KEYPAD), + + Shift = static_cast(SHInputManager::SH_KEYCODE::SHIFT), + LeftControl = static_cast(SHInputManager::SH_KEYCODE::LEFT_CTRL), + LeftAlt = static_cast(SHInputManager::SH_KEYCODE::LEFT_ALT), + LeftSuper = static_cast(SHInputManager::SH_KEYCODE::LEFT_WINDOWS), + RightShift = static_cast(SHInputManager::SH_KEYCODE::RIGHT_SHIFT), + RightControl = static_cast(SHInputManager::SH_KEYCODE::RIGHT_CTRL), + RightAlt = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ALT), + RightSuper = static_cast(SHInputManager::SH_KEYCODE::RIGHT_WINDOWS), + + /* Gamepad */ + JoystickA = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_A), + JoystickB = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_B), + JoystickX = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_X), + JoystickY = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_Y), + JoystickLeftBumper = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_LEFTSHOULDER), + JoystickRightBumper = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_RIGHTSHOULDER), + JoystickLeftTrigger = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_LEFTTRIGGER), + JoystickRightTrigger = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_RIGHTTRIGGER), + JoystickDPadUp = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_DPAD_UP), + JoystickDPadDown = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_DPAD_DOWN), + JoystickDPadLeft = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_DPAD_LEFT), + JoystickDPadRight = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_DPAD_RIGHT), + JoystickMenu = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_MENU), + JoystickView = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_VIEW), + JoystickLeftStick = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_LEFT_THUMBSTICK_BUTTON), + JoystickRightStick = static_cast(SHInputManager::SH_KEYCODE::GAMEPAD_RIGHT_THUMBSTICK_BUTTON), + + /* Unity Gamepad Mappings */ + JoystickButton0 = JoystickA, + JoystickButton1 = JoystickB, + JoystickButton2 = JoystickX, + JoystickButton3 = JoystickY, + JoystickButton4 = JoystickLeftBumper, + JoystickButton5 = JoystickRightBumper, + JoystickButton6 = JoystickView, + JoystickButton7 = JoystickMenu, + JoystickButton8 = JoystickLeftStick, + JoystickButton9 = JoystickRightStick + + }; + /// + /// Represents the available supported mouse keycodes that can be passed into the + /// mouse-button-based Input functions. + /// + enum class MouseCode : int + { + LeftButton = static_cast(SHInputManager::SH_KEYCODE::LMB), + RightButton = static_cast(SHInputManager::SH_KEYCODE::RMB), + MiddleButton = static_cast(SHInputManager::SH_KEYCODE::MMB), + Button3 = static_cast(SHInputManager::SH_KEYCODE::XMB1), + Button4 = static_cast(SHInputManager::SH_KEYCODE::XMB2) + }; + + /*-----------------------------------------------------------------------------*/ + /* Properites */ + /*-----------------------------------------------------------------------------*/ + /// + /// Mouse position in screen coordinates relative to the top left of the window. + /// This value is a Vector3 for compatibility with functions that have Vector3 + /// arguments. The z component of the Vector3 is always 0 + /// + static property Vector3 MousePosition + { + Vector3 get(); + } + /// + /// Amnount of vertical mouse scroll in this frame. + /// + static property int MouseScrollDelta + { + int get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Checks if a specified key is being held down. + /// This will also be true if GetKeyDown() is true. + /// + /// KeyCode of the key to check. + /// True while the user holds down the key specified. + static bool GetKey(KeyCode key); + /// + /// Checks if a specified key is pressed and was not pressed before. + /// + /// KeyCode of the key to check. + /// + /// True during the frame the user starts pressing down the key specified. + /// + static bool GetKeyDown(KeyCode key); + /// + /// Checks if a specified key is no longer pressed pressed and was pressed + /// before. + /// + /// KeyCode of the key to check. + /// + /// True during the frame the user releases the key identified by name. + /// + static bool GetKeyUp(KeyCode key); + /// + /// Checks if a specified mouse button is being held down. + /// This will also be true if GetMouseButtonDown() is true. + /// + /// MouseCode of the mouse button to check. + /// True while the user holds down the mouse button specified. + static bool GetMouseButton(MouseCode mouseButton); + /// + /// Checks if a specified mouse button is pressed and was not pressed before. + /// + /// MouseCode of the mouse button to check. + /// + /// True during the frame the user pressed the given mouse button. + /// + static bool GetMouseButtonDown(MouseCode mouseButton); + /// + /// Checks if a specified mouse button is no longer pressed and was pressed + /// before. + /// + /// MouseCode of the mouse button to check. + /// + /// True during the frame the user releases the given mouse button. + /// + static bool GetMouseButtonUp(MouseCode mouseButton); + + /*-----------------------------------------------------------------------------*/ + /* Cursor Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Sets the position of the mouse cursor relative to the top left corner of the + /// window. + /// + /// + /// Position of the mouse in window pixel coordinates to set. + /// + static void SetMousePosition(Vector2 pos); + + /*-----------------------------------------------------------------------------*/ + /* Timing Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves the duration that the specified key has been held or was last held + /// for. + /// + /// The key to check. + /// Time in seconds that the key was held. + static double GetKeyHeldTime(KeyCode key); + /// + /// Retrieves the duration that the specified key has not been held or was last + /// not been held for. + /// + /// The key to check. + /// Time in seconds that the key was held. + static double GetKeyReleasedTime(KeyCode key); + /// + /// Retrieves the duration that the specified key has been held or was last held + /// for. + /// + /// The key to check. + /// Time in seconds that the key was held. + static double GetMouseHeldTime(MouseCode mouseButton); + /// + /// Retrieves the duration that the specified key has not been held or was last + /// not been held for. + /// + /// The key to check. + /// Time in seconds that the key was held. + static double GetMouseReleasedTime(MouseCode mouseButton); + }; +} \ No newline at end of file From 808274fce08c6f1ebf72f6b4308440b79b63e9e7 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 14:16:14 +0800 Subject: [PATCH 348/793] Lots of changes - World renderer graph add new resource for scene - G-Buffer Write subpass now renders offscreen to a color attachment - Added a new subpass "Scene layout transition" to get vulkan to help transition our scene image layout to shader read - Added back SHEDITOR check - Created a post offscreen render system to create the necessary objects - SH_ATT_DESC_TYPE is now SH_ATT_DESC_TYPE_FLAGS. Render graph resources also now store a bit field instead of a single type. - Render graph nodes now have more customization when it comes to registering resources. They now have the option to not clear resources on begin. --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 23 +++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 20 +-- .../Interface/SHPostOffscreenRenderSystem.cpp | 79 ++++++++++++ .../Interface/SHPostOffscreenRenderSystem.h | 29 +++++ .../SHAttachmentDescInitParams.cpp | 7 + .../RenderGraph/SHAttachmentDescInitParams.h | 14 ++ .../RenderGraph/SHAttachmentDescriptionType.h | 13 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 50 +++++-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 23 +++- .../RenderGraph/SHRenderGraphNode.cpp | 16 ++- .../Graphics/RenderGraph/SHRenderGraphNode.h | 3 +- .../RenderGraph/SHRenderGraphResource.cpp | 122 +++++++++++------- .../RenderGraph/SHRenderGraphResource.h | 13 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 8 +- .../src/Graphics/RenderGraph/SHSubpass.h | 2 +- SHADE_Engine/src/Graphics/SHVulkanDefines.h | 1 + 16 files changed, 317 insertions(+), 106 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 09f1c93e..14ddf7be 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -144,27 +144,32 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Present", SH_ATT_DESC_TYPE::COLOR_PRESENT, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - worldRenderGraph->AddResource("Entity ID", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->AddResource("Present", {SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT}, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Scene", {SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT}, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Depth Buffer", {SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL}, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); + worldRenderGraph->AddResource("Entity ID", {SH_ATT_DESC_TYPE_FLAGS::COLOR}, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); //worldRenderGraph->AddResource("Scene", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eB8G8R8A8Unorm); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Present"}, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); - gBufferWriteSubpass->AddColorOutput("Present"); + gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Entity ID"); - gBufferWriteSubpass->AddDepthOutput ("Depth Buffer", SH_ATT_DESC_TYPE::DEPTH_STENCIL); + gBufferWriteSubpass->AddDepthOutput ("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); + // We do this to just transition our scene layout to shader read + auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); + sceneLayoutTransitionSubpass->AddInput("Scene"); - // TODO: Use macro to add this node when SH_EDITOR is enabled +#ifdef SHEDITOR auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {"G-Buffer"}); auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); imguiSubpass->AddColorOutput("Present"); +#endif worldRenderGraph->Generate(); @@ -207,6 +212,10 @@ namespace SHADE cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); mousePickSystem->Init(device, cmdPools, worldRenderGraph->GetRenderGraphResource("Entity ID")); + + // Register the post offscreen render to the system + postOffscreenRender = resourceManager.Create(); + postOffscreenRender->Init(device, worldRenderGraph->GetRenderGraphResource("Scene"), descPool); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 3160cd57..517b5999 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -31,6 +31,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h" #include "../Textures/SHTextureLibrary.h" #include "../Textures/SHVkSamplerCache.h" +#include "Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h" namespace SHADE { @@ -262,14 +263,15 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Getters (Temporary) */ /*-----------------------------------------------------------------------------*/ - Handle GetDevice() const { return device; } - Handle GetSwapchain() const { return swapchain; } - Handle GetSurface() const { return surface; } - Handle GetPhysicalDevice() const { return physicalDevice; } - Handle GetQueue() const { return graphicsQueue; } - Handle GetDescriptorPool() const { return descPool; } - Handle GetDefaultViewport() const {return defaultViewport;} - Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; + Handle GetDevice() const { return device; } + Handle GetSwapchain() const { return swapchain; } + Handle GetSurface() const { return surface; } + Handle GetPhysicalDevice() const { return physicalDevice; } + Handle GetQueue() const { return graphicsQueue; } + Handle GetDescriptorPool() const { return descPool; } + Handle GetDefaultViewport() const {return defaultViewport;} + Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; + Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; //SHRenderGraph const& GetRenderGraph(void) const noexcept; //Handle GetRenderPass() const { return renderPass; } @@ -327,5 +329,7 @@ namespace SHADE // Sub systems Handle mousePickSystem; + Handle postOffscreenRender; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp new file mode 100644 index 00000000..7d40d9bd --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp @@ -0,0 +1,79 @@ +#include "SHpch.h" +#include "SHPostOffscreenRenderSystem.h" +#include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Images/SHVkSampler.h" +#include "Graphics/RenderGraph/SHRenderGraphResource.h" + +namespace SHADE +{ + /***************************************************************************/ + /*! + + \brief + This function basically creates the entities required for offscreen + rendering. It takes in a render graph resource. Side note: it creates + a descriptor set layout that is similar to the one created in imgui. This + is so that the descriptor set passed to imGui won't be invalid. + + \param logicalDevice + For vulkan object creation + + \param renderGraphResource + The resource in which has been + + \param descriptorPool + + \return + + */ + /***************************************************************************/ + void SHPostOffscreenRenderSystem::Init(Handle logicalDevice, Handle renderGraphResource, Handle descriptorPool) noexcept + { + offscreenRender = renderGraphResource; + + // Create sampler + offscreenRenderSampler = logicalDevice->CreateSampler( + { + .minFilter = vk::Filter::eLinear, + .magFilter = vk::Filter::eLinear, + .addressMode = vk::SamplerAddressMode::eRepeat, + .mipmapMode = vk::SamplerMipmapMode::eLinear, + .minLod = -1000, + .maxLod = 1000 + } + ); + + // Create descriptor set layout binding + SHVkDescriptorSetLayout::Binding imageBinding + { + .Type = vk::DescriptorType::eCombinedImageSampler, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = 0, + .DescriptorCount = 1, + }; + + // Create descriptor set layout + offscreenRenderDescSetLayout = logicalDevice->CreateDescriptorSetLayout(0, { imageBinding }); + + // Create descriptor set + offscreenRenderDescSet = descriptorPool->Allocate({ offscreenRenderDescSetLayout }, { 1 }); + + std::vector combinedImageSampler + { + std::make_tuple(renderGraphResource->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eShaderReadOnlyOptimal), + }; + + // Register the image view and sampler with the descriptor set. Now whenever rendering to the offscreen image is done, the descriptor set will see the change + offscreenRenderDescSet->ModifyWriteDescImage(0, 0, combinedImageSampler); + offscreenRenderDescSet->UpdateDescriptorSetImages(0, 0); + } + + Handle SHPostOffscreenRenderSystem::GetDescriptorSetGroup(void) const noexcept + { + return offscreenRenderDescSet; + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h new file mode 100644 index 00000000..90767bc2 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Resource/Handle.h" + +namespace SHADE +{ + class SHVkLogicalDevice; + class SHVkDescriptorSetLayout; + class SHVkDescriptorSetGroup; + class SHVkDescriptorPool; + class SHVkSampler; + class SHRenderGraphResource; + + class SHPostOffscreenRenderSystem + { + private: + Handle offscreenRender; + + Handle offscreenRenderDescSetLayout; + Handle offscreenRenderDescSet; + Handle offscreenRenderSampler; + + public: + void Init (Handle logicalDevice, Handle renderGraphResource, Handle descriptorPool) noexcept; + //void Run () + + Handle GetDescriptorSetGroup (void) const noexcept; + }; +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.cpp new file mode 100644 index 00000000..6e01269e --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.cpp @@ -0,0 +1,7 @@ +#include "SHpch.h" +#include "SHAttachmentDescInitParams.h" + +namespace SHADE +{ + +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h new file mode 100644 index 00000000..20e924cb --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Resource/Handle.h" + +namespace SHADE +{ + class SHRenderGraphResource; + + struct SHAttachmentDescInitParams + { + Handle resourceHdl; + bool dontClearOnLoad{false}; + }; +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h index dc21fa37..241292d4 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h @@ -3,12 +3,13 @@ namespace SHADE { // Used for attachment description creation for renderpass node - enum class SH_ATT_DESC_TYPE + enum class SH_ATT_DESC_TYPE_FLAGS { - COLOR, - COLOR_PRESENT, - DEPTH, - STENCIL, - DEPTH_STENCIL, + COLOR = 0x01, + COLOR_PRESENT = 0x02, + DEPTH = 0x04, + STENCIL = 0x08, + DEPTH_STENCIL = 0x10, + INPUT = 0x20 }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 1861f6d2..51584300 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -8,10 +8,17 @@ #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Tools/SHLogger.h" +#include "SHAttachmentDescInitParams.h" namespace SHADE { - + + SHRenderGraph::ResourceInstruction::ResourceInstruction(char const* resourceName, bool dontClearOnLoad /*= false*/) noexcept + : resourceName{ resourceName } + , dontClearOnLoad{ dontClearOnLoad } + { + + } /***************************************************************************/ /*! @@ -40,7 +47,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint8_t levels /*= 1*/, vk::ImageUsageFlagBits usageFlags/* = {}*/, vk::ImageCreateFlagBits createFlags /*= {}*/) + void SHRenderGraph::AddResource(std::string resourceName, std::initializer_list typeFlags, uint32_t w /*= static_cast(-1)*/, uint32_t h /*= static_cast(-1)*/, vk::Format format/* = vk::Format::eB8G8R8A8Unorm*/, uint8_t levels /*= 1*/, vk::ImageUsageFlagBits usageFlags/* = {}*/, vk::ImageCreateFlagBits createFlags /*= {}*/) { // If we set to if (w == static_cast(-1) && h == static_cast(-1)) @@ -50,7 +57,7 @@ namespace SHADE format = swapchainHdl->GetSurfaceFormatKHR().format; } - graphResources.try_emplace(resourceName, resourceManager.Create(logicalDeviceHdl, swapchainHdl, resourceName, type, format, w, h, levels, usageFlags, createFlags)); + graphResources.try_emplace(resourceName, resourceManager.Create(logicalDeviceHdl, swapchainHdl, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); } /***************************************************************************/ @@ -82,7 +89,7 @@ namespace SHADE { for (auto& color : subpass->colorReferences) { - if (i == nodes.size() - 1 && node->attResources[color.attachment]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (i == nodes.size() - 1 && (node->attResources[color.attachment]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT))) resourceAttLayouts[color.attachment] = vk::ImageLayout::ePresentSrcKHR; else resourceAttLayouts[color.attachment] = color.layout; @@ -210,10 +217,18 @@ namespace SHADE for (auto& inputAtt : subpass->inputReferences) { auto resource = node->attResources[inputAtt.attachment]; - if (resource->resourceType == SH_ATT_DESC_TYPE::COLOR || resource->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) - colorRead |= (1 << i); - else if (resource->resourceType == SH_ATT_DESC_TYPE::DEPTH_STENCIL) - depthRead |= (1 << i); + if (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::INPUT)) + { + if (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR) || + resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) + colorRead |= (1 << i); + else if (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL)) + depthRead |= (1 << i); + } + else + { + SHLOG_ERROR("While configuring subpass, an input reference was detected but the resource to be used is not marked as SH_ATT_DESC_TYPE_FLAGS::INPUT. "); + } } ++i; @@ -400,7 +415,7 @@ namespace SHADE */ /***************************************************************************/ - Handle SHRenderGraph::AddNode(std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept + SHADE::Handle SHRenderGraph::AddNode(std::string nodeName, std::initializer_list resourceInstruction, std::initializer_list predecessorNodes) noexcept { if (nodeIndexing.contains(nodeName)) { @@ -408,12 +423,19 @@ namespace SHADE return {}; } - std::vector> resources; - for (auto const& name : resourceNames) + std::vector descInitParams; + for (auto const& instruction : resourceInstruction) { // If the resource that the new node is requesting for exists, allow the graph to reference it - if (graphResources.contains(name)) - resources.push_back(graphResources.at(name)); + if (graphResources.contains(instruction.resourceName)) + { + descInitParams.push_back( + { + .resourceHdl = graphResources.at(instruction.resourceName), + .dontClearOnLoad = false, + } + ); + } else { SHLOG_ERROR("Resource doesn't exist in graph yet. Cannot create new node."); @@ -435,7 +457,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(resources), std::move(predecessors), &graphResources)); + nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(descInitParams), std::move(predecessors), &graphResources)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index cfc29bc2..8eb458aa 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -33,7 +33,17 @@ namespace SHADE class SH_API SHRenderGraph { + public: + struct ResourceInstruction + { + std::string resourceName; + bool dontClearOnLoad; + + ResourceInstruction (char const* resourceName, bool dontClearOnLoad = false) noexcept; + }; + private: + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ @@ -74,13 +84,14 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; - void AddResource(std::string resourceName, SH_ATT_DESC_TYPE type, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); - Handle AddNode (std::string nodeName, std::initializer_list resourceNames, std::initializer_list predecessorNodes) noexcept; + void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; + void AddResource(std::string resourceName, std::initializer_list typeFlags, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); + Handle AddNode (std::string nodeName, std::initializer_list resourceInstruction, std::initializer_list predecessorNodes) noexcept; + void Generate (void) noexcept; - void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; - void FinaliseBatch(uint32_t frameIndex, Handle descPool); - void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; + void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; + void FinaliseBatch(uint32_t frameIndex, Handle descPool); + void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index ea09dd47..0ff8fe96 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -42,7 +42,7 @@ namespace SHADE for (uint32_t j = 0; j < attResources.size(); ++j) { - uint32_t imageViewIndex = (attResources[j]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) ? i : 0; + uint32_t imageViewIndex = (attResources[j]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? i : 0; imageViews[j] = attResources[j]->imageViews[imageViewIndex]; // We want the minimum dimensions for the framebuffer because the image attachments referenced cannot have dimensions smaller than the framebuffer's @@ -69,7 +69,7 @@ namespace SHADE for (uint32_t j = 0; j < attResources.size(); ++j) { - uint32_t imageViewIndex = (attResources[j]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) ? i : 0; + uint32_t imageViewIndex = (attResources[j]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? i : 0; imageViews[j] = attResources[j]->imageViews[imageViewIndex]; // We want the minimum dimensions for the framebuffer because the image attachments referenced cannot have dimensions smaller than the framebuffer's @@ -104,14 +104,14 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} , prereqNodes{ std::move(predecessors) } , attachmentDescriptions{} , resourceAttachmentMapping{} - , attResources{ std::move(attRes) } + , attResources{ } , subpasses{} , executed{ false } , configured{ false } @@ -121,6 +121,12 @@ namespace SHADE // pipeline library initialization pipelineLibrary.Init(logicalDeviceHdl); + // Store all the handles to resources + attResources.reserve (attDescInitParams.size()); + for (auto& param : attDescInitParams) + attResources.push_back(param.resourceHdl); + + // We have as many descriptions as we have resources attachmentDescriptions.resize(attResources.size()); bool containsSwapchainImage = false; @@ -140,7 +146,7 @@ namespace SHADE newDesc.format = attResources[i]->resourceFormat; - if (attResources[i]->resourceType == SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (attResources[i]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) containsSwapchainImage = true; resourceAttachmentMapping.try_emplace(attResources[i].GetId().Raw, i); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 28527a92..f36e7622 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -9,6 +9,7 @@ #include "SH_API.h" #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include "Graphics/MiddleEnd/Batching/SHBatcher.h" +#include "SHAttachmentDescInitParams.h" namespace SHADE { @@ -87,7 +88,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector> attRes, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index bcd1dc9f..adf3b6cd 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -45,10 +45,10 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept + SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept : logicalDevice {logicalDevice} , swapchain{ swapchain } - , resourceType{ type } + , resourceTypeFlags{ } , resourceFormat{ format } , images{} , imageViews{} @@ -58,52 +58,10 @@ namespace SHADE , resourceName{ name } { // If the resource type is an arbitrary image and not swapchain image - if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) + if (typeFlags.size() == 1 && *typeFlags.begin() == SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT) { - imageAspectFlags = vk::ImageAspectFlags{}; - usage = usageFlags; + resourceTypeFlags |= static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT); - // Check the resource type and set image usage flags and image aspect flags accordingly - switch (resourceType) - { - case SH_ATT_DESC_TYPE::COLOR: - usage |= vk::ImageUsageFlagBits::eColorAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eColor; - break; - case SH_ATT_DESC_TYPE::DEPTH: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eDepth; - break; - case SH_ATT_DESC_TYPE::STENCIL: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eStencil; - break; - case SH_ATT_DESC_TYPE::DEPTH_STENCIL: - usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; - imageAspectFlags |= vk::ImageAspectFlagBits::eStencil | vk::ImageAspectFlagBits::eDepth; - break; - } - - // The resource is not a swapchain image, just use the first slot of the vector - images.push_back(logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); - - // prepare image view details - SHImageViewDetails viewDetails - { - .viewType = vk::ImageViewType::e2D, - .format = images[0]->GetImageFormat(), - .imageAspectFlags = imageAspectFlags, - .baseMipLevel = 0, - .mipLevelCount = mipLevels, - .baseArrayLayer = 0, - .layerCount = 1, - }; - - // just 1 image view created - imageViews.push_back(images[0]->CreateImageView(logicalDevice, images[0], viewDetails)); - } - else // if swapchain image resource - { // Prepare image view details SHImageViewDetails viewDetails { @@ -126,6 +84,65 @@ namespace SHADE imageViews[i] = images[i]->CreateImageView(logicalDevice, images[i], viewDetails); } } + else // if swapchain image resource + { + imageAspectFlags = vk::ImageAspectFlags{}; + usage = usageFlags; + + for (auto& type : typeFlags) + { + // store the flags + resourceTypeFlags |= static_cast(type); + + // Check the resource type and set image usage flags and image aspect flags accordingly + switch (type) + { + case SH_ATT_DESC_TYPE_FLAGS::COLOR: + usage |= vk::ImageUsageFlagBits::eColorAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eColor; + break; + case SH_ATT_DESC_TYPE_FLAGS::DEPTH: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eDepth; + break; + case SH_ATT_DESC_TYPE_FLAGS::STENCIL: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eStencil; + break; + case SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL: + usage |= vk::ImageUsageFlagBits::eDepthStencilAttachment; + imageAspectFlags |= vk::ImageAspectFlagBits::eStencil | vk::ImageAspectFlagBits::eDepth; + break; + case SH_ATT_DESC_TYPE_FLAGS::INPUT: + usage |= vk::ImageUsageFlagBits::eInputAttachment; + usage |= vk::ImageUsageFlagBits::eSampled; + break; + case SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT: + { + SHLOG_ERROR ("COLOR_PRESENT cannot be with other resource type flags. "); + return; + } + } + } + + // The resource is not a swapchain image, just use the first slot of the vector + images.push_back(logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); + + // prepare image view details + SHImageViewDetails viewDetails + { + .viewType = vk::ImageViewType::e2D, + .format = images[0]->GetImageFormat(), + .imageAspectFlags = imageAspectFlags, + .baseMipLevel = 0, + .mipLevelCount = mipLevels, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + // just 1 image view created + imageViews.push_back(images[0]->CreateImageView(logicalDevice, images[0], viewDetails)); + } } /***************************************************************************/ @@ -141,7 +158,7 @@ namespace SHADE /***************************************************************************/ SHRenderGraphResource::SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept : resourceName{ std::move(rhs.resourceName) } - , resourceType{ std::move(rhs.resourceType) } + , resourceTypeFlags{ std::move(rhs.resourceTypeFlags) } , images{ std::move(rhs.images) } , imageViews{ std::move(rhs.imageViews) } , resourceFormat{ std::move(rhs.resourceFormat) } @@ -149,6 +166,7 @@ namespace SHADE , height{ rhs.height } , mipLevels{ rhs.mipLevels } , imageAspectFlags{ rhs.imageAspectFlags } + , swapchain {rhs.swapchain} { } @@ -172,7 +190,7 @@ namespace SHADE return *this; resourceName = std::move(rhs.resourceName); - resourceType = std::move(rhs.resourceType); + resourceTypeFlags = std::move(rhs.resourceTypeFlags); images = std::move(rhs.images); imageViews = std::move(rhs.imageViews); resourceFormat = std::move(rhs.resourceFormat); @@ -180,6 +198,7 @@ namespace SHADE height = rhs.height; mipLevels = rhs.mipLevels; imageAspectFlags = rhs.imageAspectFlags; + swapchain = rhs.swapchain; return *this; } @@ -202,7 +221,7 @@ namespace SHADE width = newWidth; height = newHeight; - if (resourceType != SH_ATT_DESC_TYPE::COLOR_PRESENT) + if ((resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) == 0) { // prepare image view details SHImageViewDetails viewDetails @@ -299,4 +318,9 @@ namespace SHADE return height; } + Handle SHRenderGraphResource::GetImageView(uint32_t index /*= NON_SWAPCHAIN_RESOURCE_INDEX*/) const noexcept + { + return imageViews [index]; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index 66f0677b..efaf9bf5 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -16,6 +16,8 @@ namespace SHADE class SHVkCommandBuffer; class SHVkBuffer; + static constexpr uint32_t NON_SWAPCHAIN_RESOURCE_INDEX = 0; + class SH_API SHRenderGraphResource { private: @@ -32,7 +34,7 @@ namespace SHADE std::string resourceName; //! Used for initializing image layouts - SH_ATT_DESC_TYPE resourceType; + SHRenderGraphResourceFlags resourceTypeFlags; //! The resource itself (this is a vector because if the resource happens //! to be a swapchain image, then we need however many frames in flight). @@ -67,7 +69,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, SH_ATT_DESC_TYPE type, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; + SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; @@ -82,9 +84,10 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - vk::Format GetResourceFormat (void) const noexcept; - uint32_t GetWidth (void) const noexcept; - uint32_t GetHeight (void) const noexcept; + vk::Format GetResourceFormat (void) const noexcept; + uint32_t GetWidth (void) const noexcept; + uint32_t GetHeight (void) const noexcept; + Handle GetImageView (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index abd3a7be..6afbfb09 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -120,18 +120,18 @@ namespace SHADE */ /***************************************************************************/ - void SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType) noexcept + void SHSubpass::AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE_FLAGS attachmentDescriptionType) noexcept { vk::ImageLayout imageLayout; switch (attachmentDescriptionType) { - case SH_ATT_DESC_TYPE::DEPTH: + case SH_ATT_DESC_TYPE_FLAGS::DEPTH: imageLayout = vk::ImageLayout::eDepthAttachmentOptimal; break; - case SH_ATT_DESC_TYPE::STENCIL: + case SH_ATT_DESC_TYPE_FLAGS::STENCIL: imageLayout = vk::ImageLayout::eStencilAttachmentOptimal; break; - case SH_ATT_DESC_TYPE::DEPTH_STENCIL: + case SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL: imageLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; break; default: diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index aba282b9..2e883ebc 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -71,7 +71,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ // Preparation functions void AddColorOutput(std::string resourceToReference) noexcept; - void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE attachmentDescriptionType = SH_ATT_DESC_TYPE::DEPTH_STENCIL) noexcept; + void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE_FLAGS attachmentDescriptionType = SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL) noexcept; void AddInput(std::string resourceToReference) noexcept; // Runtime functions diff --git a/SHADE_Engine/src/Graphics/SHVulkanDefines.h b/SHADE_Engine/src/Graphics/SHVulkanDefines.h index 1cbcae0f..a0a6d57c 100644 --- a/SHADE_Engine/src/Graphics/SHVulkanDefines.h +++ b/SHADE_Engine/src/Graphics/SHVulkanDefines.h @@ -12,6 +12,7 @@ namespace SHADE using BindingAndSetHash = uint64_t; using SetIndex = uint32_t; using SHSubPassIndex = uint32_t; + using SHRenderGraphResourceFlags = uint32_t; } From 228868604a0f7fbdb7a1ac1bf88bad3a3325c81f Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 16 Oct 2022 14:20:35 +0800 Subject: [PATCH 349/793] Editor fixes Integration of mouse pick Add editor state Add editor layout --- Assets/Editor/Layouts/Default.ini | 42 +++++++++ .../src/Application/SBApplication.cpp | 17 +++- .../HierarchyPanel/SHHierarchyPanel.cpp | 31 ++++++- .../HierarchyPanel/SHHierarchyPanel.h | 2 + .../Inspector/SHEditorComponentView.hpp | 9 +- .../Inspector/SHEditorInspector.cpp | 2 +- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 88 +++++++++++++++---- .../EditorWindow/MenuBar/SHEditorMenuBar.h | 1 + .../Profiling/SHEditorProfiler.cpp | 2 +- .../Editor/EditorWindow/SHEditorWindow.cpp | 16 +++- .../src/Editor/EditorWindow/SHEditorWindow.h | 7 +- .../EditorWindow/SHEditorWindowIncludes.h | 3 +- .../ViewportWindow/SHEditorViewport.cpp | 45 ++++++++++ .../ViewportWindow/SHEditorViewport.h | 28 ++++++ SHADE_Engine/src/Editor/SHEditor.cpp | 83 +++++++++++++---- SHADE_Engine/src/Editor/SHEditor.hpp | 21 ++++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +- .../MiddleEnd/Interface/SHMousePickSystem.cpp | 4 +- .../MiddleEnd/Interface/SHMousePickSystem.h | 2 +- 19 files changed, 349 insertions(+), 62 deletions(-) create mode 100644 Assets/Editor/Layouts/Default.ini create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h diff --git a/Assets/Editor/Layouts/Default.ini b/Assets/Editor/Layouts/Default.ini new file mode 100644 index 00000000..b953b3a5 --- /dev/null +++ b/Assets/Editor/Layouts/Default.ini @@ -0,0 +1,42 @@ +[Window][MainStatusBar] +Pos=0,1060 +Size=1920,20 +Collapsed=0 + +[Window][SHEditorMenuBar] +Pos=0,24 +Size=1920,1036 +Collapsed=0 + +[Window][Hierarchy Panel] +Pos=0,89 +Size=286,971 +Collapsed=0 +DockId=0x00000004,0 + +[Window][Debug##Default] +Pos=60,60 +Size=400,400 +Collapsed=0 + +[Window][Inspector] +Pos=1494,24 +Size=426,1036 +Collapsed=0 +DockId=0x00000006,0 + +[Window][Profiler] +Pos=0,24 +Size=286,63 +Collapsed=0 +DockId=0x00000003,0 + +[Docking][Data] +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,55 Size=1920,1036 Split=X + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1492,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=286,1036 Split=Y Selected=0xE096E5AE + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=140,63 Selected=0x1E6EB881 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=140,971 Selected=0xE096E5AE + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1204,1036 CentralNode=1 + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=426,1036 Selected=0xE7039252 + diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 202a3852..d1d3e087 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -130,18 +130,29 @@ namespace Sandbox void SBApplication::Update(void) { SHGraphicsSystem* graphicsSystem = SHADE::SHSystemManager::GetSystem(); + SHEditor* editor = SHADE::SHSystemManager::GetSystem(); //TODO: Change true to window is open while (!window.WindowShouldClose()) { SHFrameRateController::UpdateFRC(); SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); SHSceneManager::UpdateSceneManager(); - SHSceneManager::SceneUpdate(0.016f); +#ifdef SHEDITOR + if(editor->editorState == SHEditor::State::PLAY) +#endif + SHSceneManager::SceneUpdate(0.016f); +#ifdef SHEDITOR + SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); + if(auto editor = SHSystemManager::GetSystem()) + { + editor->PollPicking(); + } +#else SHSystemManager::RunRoutines(false, 0.016f); +#endif } - // Finish all graphics jobs first - graphicsSystem->AwaitGraphicsExecution(); + graphicsSystem->AwaitGraphicsExecution(); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 0f25175f..42c9da66 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -66,8 +66,8 @@ namespace SHADE editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - ImGui::End(); } + ImGui::End(); } void SHHierarchyPanel::Exit() @@ -75,6 +75,11 @@ namespace SHADE SHEditorWindow::Exit(); } + void SHHierarchyPanel::SetScrollTo(EntityID eid) + { + scrollTo = eid; + } + //#==============================================================# //|| Private Member Functions || //#==============================================================# @@ -82,7 +87,20 @@ namespace SHADE { if (ImGui::BeginMenuBar()) { - if (ImGui::SmallButton(ICON_MD_ADD)) + + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 35.0f); + if(ImGui::SmallButton(ICON_MD_DESELECT)) + { + auto editor = SHSystemManager::GetSystem(); + editor->selectedEntities.clear(); + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Clear Selections"); + ImGui::EndTooltip(); + } + if (ImGui::SmallButton(ICON_MD_ADD_CIRCLE)) { SHEntityManager::CreateEntity(); } @@ -103,6 +121,13 @@ namespace SHADE //Get node data (Children, eid, selected) auto& children = currentNode->GetChildren(); EntityID eid = currentNode->GetEntityID(); + + if(scrollTo != MAX_EID && eid == scrollTo) + { + ImGui::SetScrollHereY(); + scrollTo = MAX_EID; + } + auto editor = SHSystemManager::GetSystem(); const bool isSelected = (std::ranges::find(editor->selectedEntities, eid) != editor->selectedEntities.end()); @@ -157,7 +182,7 @@ namespace SHADE } ImGui::EndPopup(); } - + //Handle node selection if (ImGui::IsItemHovered()) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 78e445fd..88983ca9 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -23,11 +23,13 @@ namespace SHADE void Init() override; void Update() override; void Exit() override; + void SetScrollTo(EntityID eid); private: void DrawMenuBar() const noexcept; ImRect RecursivelyDrawEntityNode(SHSceneNode*); void CreateChildEntity(EntityID parentEID) const noexcept; std::string filter; bool isAnyNodeSelected = false; + EntityID scrollTo = MAX_EID; };//class SHHierarchyPanel }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 93f6984e..47fec730 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -207,8 +207,10 @@ namespace SHADE auto& colliders = component->GetColliders(); int const size = static_cast(colliders.size()); ImGui::BeginChild("Colliders", {0.0f, colliders.empty() ? 1.0f : 250.0f}, true); + std::optional colliderToDelete{std::nullopt}; for (int i{}; i < size; ++i) { + ImGui::PushID(i); SHCollider& collider = component->GetCollider(i); auto cursorPos = ImGui::GetCursorPos(); @@ -235,9 +237,14 @@ namespace SHADE } if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) { - component->RemoveCollider(i); + colliderToDelete = i; } SHEditorWidgets::EndPanel(); + ImGui::PopID(); + } + if(colliderToDelete.has_value()) + { + component->RemoveCollider(colliderToDelete.value()); } ImGui::EndChild(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index a9b1c724..da09f345 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -99,8 +99,8 @@ namespace SHADE } } - ImGui::End(); } + ImGui::End(); } void SHEditorInspector::Exit() diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index a49af994..3cb6561d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -36,6 +36,11 @@ namespace SHADE void SHEditorMenuBar::Init() { SHEditorWindow::Init(); + constexpr std::string_view path = "../../Assets/Editor/Layouts"; + for(auto const& entry : std::filesystem::directory_iterator(path)) + { + layoutPaths.push_back(entry.path()); + } } void SHEditorMenuBar::Update() @@ -87,20 +92,6 @@ namespace SHADE ImGui::EndDisabled(); ImGui::EndMenu(); } - if(ImGui::BeginMenu("Theme")) - { - auto styles = rttr::type::get().get_enumeration(); - auto values = styles.get_values(); - for (auto style : values) - { - if(ImGui::Selectable(style.to_string().c_str())) - { - if(auto editor = SHSystemManager::GetSystem()) - editor->SetStyle(style.convert()); - } - } - ImGui::EndMenu(); - } if (ImGui::BeginMenu("Scripts")) { if (ImGui::Selectable("Generate Visual Studio Project")) @@ -120,18 +111,79 @@ namespace SHADE } ImGui::EndMenu(); } + + if (ImGui::BeginMenu("Window")) + { + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + if (window.get() != this) + ImGui::Checkbox(window->windowName.data(), &window->isOpen); + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Theme")) + { + const auto styles = rttr::type::get().get_enumeration(); + auto values = styles.get_values(); + for (auto style : values) + { + if (ImGui::Selectable(style.to_string().c_str())) + { + if (auto editor = SHSystemManager::GetSystem()) + editor->SetStyle(style.convert()); + } + } + ImGui::EndMenu(); + } + if(ImGui::BeginMenu("Layout")) + { + for(auto const& entry : layoutPaths) + { + if(ImGui::Selectable(entry.stem().string().c_str())) + { + ImGui::LoadIniSettingsFromDisk(entry.string().c_str()); + } + } + ImGui::EndMenu(); + } ImGui::EndMainMenuBar(); } - const ImGuiID dockspace_id = ImGui::GetID("DockSpace"); - ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspaceFlags); + const ImGuiID dockspaceId = ImGui::GetID("DockSpace"); + ImGui::DockSpace(dockspaceId, ImVec2(0.0f, 0.0f), dockspaceFlags); ImGui::End(); } } void SHEditorMenuBar::DrawSecondaryBar() const noexcept { - + ImGuiViewport* viewport = ImGui::GetMainViewport(); + if(ImGui::BeginViewportSideBar("##SecondaryMenuBar", viewport, ImGuiDir_Up, ImGui::GetFrameHeight(), ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_MenuBar)) + { + ImGui::BeginMenuBar(); + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x * 0.5f - 80.f); + const auto editor = SHSystemManager::GetSystem(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY); + if(ImGui::SmallButton(ICON_MD_PLAY_ARROW)) + { + editor->editorState = SHEditor::State::PLAY; + } + ImGui::EndDisabled(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); + if(ImGui::SmallButton(ICON_MD_PAUSE)) + { + editor->editorState = SHEditor::State::PAUSE; + } + ImGui::EndDisabled(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP); + if(ImGui::SmallButton(ICON_MD_STOP)) + { + editor->editorState = SHEditor::State::STOP; + } + ImGui::EndDisabled(); + ImGui::EndMenuBar(); + } + ImGui::End(); } void SHEditorMenuBar::DrawStatusBar() const noexcept @@ -142,8 +194,8 @@ namespace SHADE if (ImGui::BeginViewportSideBar("MainStatusBar", ImGui::GetMainViewport(), ImGuiDir_Down, menuBarHeight, editorMenuBarFlags)) { ImGui::Text("Entity count: "); - ImGui::End(); } + ImGui::End(); ImGui::PopStyleVar(3); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h index 616ba43e..7cbcd696 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h @@ -18,5 +18,6 @@ namespace SHADE void DrawSecondaryBar() const noexcept; void DrawStatusBar() const noexcept; float menuBarHeight = 20.0f; + std::vector layoutPaths; };//class SHEditorMenuBar }//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp index 4b36fe5d..ef2ff8c0 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp @@ -37,8 +37,8 @@ namespace SHADE if(Begin()) { ImGui::PlotLines("DT", frames.data(), static_cast(frames.size()), 0, nullptr, 0.0f, 16.0f); - ImGui::End(); } + ImGui::End(); } void SHEditorProfiler::Exit() diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index 2e2c820c..8f677be6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -19,7 +19,7 @@ namespace SHADE //|| Public Member Functions || //#==============================================================# SHEditorWindow::SHEditorWindow(std::string_view const& name, ImGuiWindowFlags const& inFlags) - : isOpen(true), windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) + : windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) { } @@ -40,7 +40,19 @@ namespace SHADE //#==============================================================# bool SHEditorWindow::Begin() { - return ImGui::Begin(windowName.data(), &isOpen, windowFlags); + bool result = ImGui::Begin(windowName.data(), &isOpen, windowFlags); + + auto wndSize = ImGui::GetWindowSize(); + if(size.x != wndSize.x || size.y != wndSize.y) + { + size = {wndSize.x, wndSize.y}; + OnResize(); + } + return result; + } + + void SHEditorWindow::OnResize() + { } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index 244ef677..78e1b6cb 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -5,6 +5,8 @@ //#==============================================================# #include +#include "Math/Vector/SHVec2.h" + //#==============================================================# //|| Forward Declarations || //#==============================================================# @@ -21,11 +23,14 @@ namespace SHADE virtual void Init(); virtual void Update(); virtual void Exit(); - bool isOpen = false; + bool isOpen; std::string_view windowName; protected: virtual bool Begin(); + virtual void OnResize(); ImGuiWindowFlags windowFlags = 0; ImGuiIO& io; + SHVec2 size; + SHVec2 pos; };//class SHEditorWindow }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index d1ebfbf4..f0267b06 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -2,4 +2,5 @@ #include "MenuBar/SHEditorMenuBar.h" //Menu Bar #include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel #include "Inspector/SHEditorInspector.h" //Inspector -#include "Profiling/SHEditorProfiler.h" //Profiler \ No newline at end of file +#include "Profiling/SHEditorProfiler.h" //Profiler +#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp new file mode 100644 index 00000000..99ca5067 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -0,0 +1,45 @@ +#include "SHpch.h" +#include "SHEditorViewport.h" + +namespace SHADE +{ + SHEditorViewport::SHEditorViewport() + :SHEditorWindow("Viewport", ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar) + { + } + + void SHEditorViewport::Init() + { + SHEditorWindow::Init(); + + } + + void SHEditorViewport::Update() + { + SHEditorWindow::Update(); + if(Begin()) + { + DrawMenuBar(); + } + ImGui::End(); + } + + void SHEditorViewport::Exit() + { + SHEditorWindow::Exit(); + } + + void SHEditorViewport::OnResize() + { + SHEditorWindow::OnResize(); + //Get graphics system to resize swapchain image + } + + void SHEditorViewport::DrawMenuBar() const noexcept + { + if(ImGui::BeginMenuBar()) + { + ImGui::EndMenuBar(); + } + } +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h new file mode 100644 index 00000000..baee0941 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -0,0 +1,28 @@ +#pragma once +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "imgui_internal.h" +#include "ECS_Base/SHECSMacros.h" +#include "Editor/EditorWindow/SHEditorWindow.h" + +namespace SHADE +{ + class SHEditorViewport final : public SHEditorWindow + { + public: + SHEditorViewport(); + void Init() override; + void Update() override; + void Exit() override; + protected: + virtual void OnResize() override; + private: + void DrawMenuBar() const noexcept; + };//class SHEditorViewport +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index d9fc8373..d0bf0c4f 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -43,6 +43,8 @@ #include #include +#include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" + RTTR_REGISTRATION { using namespace SHADE; @@ -73,6 +75,7 @@ namespace SHADE //#==============================================================# void SHEditor::Init() { + IMGUI_CHECKVERSION(); if(auto context = ImGui::CreateContext()) { @@ -82,11 +85,21 @@ namespace SHADE } } - ImGuiIO& io = ImGui::GetIO(); (void)io; + //Add editor windows + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking + io = &ImGui::GetIO(); + + io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports + io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking + io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; + + InitLayout(); InitFonts(); @@ -98,11 +111,11 @@ namespace SHADE SetStyle(Style::SHADE); - //Add editor windows - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); + + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + window->Init(); + } SHLOG_INFO("Successfully initialised SHADE Engine Editor") } @@ -116,7 +129,7 @@ namespace SHADE if(window->isOpen) window->Update(); } - + if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { SHCommandManager::RedoCommand(); @@ -125,36 +138,46 @@ namespace SHADE { SHCommandManager::UndoCommand(); } - - + Render(); } void SHEditor::Render() { ImGui::Render(); - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + if (io->ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); } } + void SHEditor::InitLayout() noexcept + { + if(!std::filesystem::exists(io->IniFilename)) + { + std::filesystem::copy_file("../../Assets/Editor/Layouts/Default.ini", io->IniFilename); + } + //eventually load preferred layout here + } + void SHEditor::InitFonts() noexcept { - ImGuiIO& io = ImGui::GetIO(); - ImFont* mainFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path - static const ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; + constexpr ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; - ImFont* UIFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path + ImFont* UIFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path - io.Fonts->Build(); + io->Fonts->Build(); } void SHEditor::Exit() { + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + window->Init(); + } ImGui_ImplVulkan_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); @@ -309,6 +332,28 @@ namespace SHADE }); } + void SHEditor::PollPicking() + { + if (auto gfxSystem = SHSystemManager::GetSystem()) + { + if (!ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + EntityID pickedEID = gfxSystem->GetMousePickSystem()->GetPickedEntity(); + if(pickedEID == MAX_EID) + return; + if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + { + if (const auto hierarchyPanel = SHEditorWindowManager::GetEditorWindow()) + { + hierarchyPanel->SetScrollTo(pickedEID); + } + selectedEntities.clear(); + } + selectedEntities.push_back(pickedEID); + } + } + } + void SHEditor::NewFrame() { SDL_Event event; diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index d579a9b5..baa6324e 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -90,11 +90,11 @@ namespace SHADE return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); } + static EditorWindowMap editorWindows; private: // Number of windows; used for Editor Window ID Generation static EditorWindowID windowCount; // Map of Editor Windows - static EditorWindowMap editorWindows; friend class SHEditor; }; @@ -110,10 +110,17 @@ namespace SHADE class SH_API EditorRoutine final : public SHSystemRoutine { public: - EditorRoutine() = default; + EditorRoutine():SHSystemRoutine("Editor routine", true) {}; void Execute(double dt) noexcept override final; }; + enum class State : uint8_t + { + PLAY, + PAUSE, + STOP + }; + /** * @brief Style options * @@ -162,9 +169,13 @@ namespace SHADE void SetSDLWindow(SDL_Window* inSDLWindow){sdlWindow = inSDLWindow;}; + void PollPicking(); + // List of selected entities std::vector selectedEntities; + State editorState = State::STOP; + private: /** * @brief Start new frame for editor @@ -177,7 +188,7 @@ namespace SHADE */ void Render(); - + void InitLayout() noexcept; void InitFonts() noexcept; @@ -186,6 +197,8 @@ namespace SHADE // Handle to command buffer used for ImGui Vulkan Backend Handle imguiCommandBuffer; - SDL_Window* sdlWindow; + SDL_Window* sdlWindow {nullptr}; + + ImGuiIO* io{nullptr}; };//class SHEditor }//namespace SHADE diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 09f1c93e..c31b8c4d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -571,7 +571,7 @@ namespace SHADE /* System Routine Functions - BeginRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::BeginRoutine::BeginRoutine() - : SHSystemRoutine("Graphics System Frame Set Up", false) + : SHSystemRoutine("Graphics System Frame Set Up", true) {} void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept @@ -583,7 +583,7 @@ namespace SHADE /* System Routine Functions - RenderRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::RenderRoutine::RenderRoutine() - : SHSystemRoutine("Graphics System Render", false) + : SHSystemRoutine("Graphics System Render", true) {} void SHGraphicsSystem::RenderRoutine::Execute(double dt) noexcept @@ -595,7 +595,7 @@ namespace SHADE /* System Routine Functions - EndRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::EndRoutine::EndRoutine() - : SHSystemRoutine("Graphics System Frame Clean Up", false) + : SHSystemRoutine("Graphics System Frame Clean Up", true) {} void SHGraphicsSystem::EndRoutine::Execute(double) noexcept @@ -607,7 +607,7 @@ namespace SHADE /* System Routine Functions - BatcherDispatcherRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::BatcherDispatcherRoutine::BatcherDispatcherRoutine() - : SHSystemRoutine("Graphics System Batcher Dispatcher", false) + : SHSystemRoutine("Graphics System Batcher Dispatcher", true) {} void SHGraphicsSystem::BatcherDispatcherRoutine::Execute(double) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index ee8665d5..8522a8d5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -11,8 +11,6 @@ namespace SHADE { void SHMousePickSystem::Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept { - pickedEID = 0; - // Create command buffers for (auto& pool : cmdPools) { @@ -34,7 +32,7 @@ namespace SHADE void SHMousePickSystem::Run(Handle queue, uint32_t frameIndex) noexcept { // if input detected - if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_CTRL) && SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) + if (SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) { afterCopyFence->Reset(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h index 080a192c..7ec193b4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h @@ -30,7 +30,7 @@ namespace SHADE Handle imageDataDstBuffer; //! eid picked from screen - EntityID pickedEID; + EntityID pickedEID = MAX_EID; public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ From 2830dad8e3f9d810d71d4dbeaaf80f704857e5c0 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 15:35:32 +0800 Subject: [PATCH 350/793] Fixed Kai Wei's issues (sampler move ctor never move device :D) --- SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp | 4 +++- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index f12b834d..30bcde79 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -39,7 +39,8 @@ namespace SHADE } SHVkSampler::SHVkSampler(SHVkSampler&& rhs) noexcept - : vkSampler { rhs.vkSampler } + : vkSampler{ rhs.vkSampler } + , device{ rhs.device } { rhs.vkSampler = nullptr; } @@ -56,6 +57,7 @@ namespace SHADE SHADE::SHVkSampler& SHVkSampler::operator=(SHVkSampler&& rhs) noexcept { vkSampler = rhs.vkSampler; + device = rhs.device; rhs.vkSampler = nullptr; return *this; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 14ddf7be..247c58fd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -189,7 +189,6 @@ namespace SHADE worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); - // TODO: This is VERY temporarily here until a more solid resource management system is implemented shaderSourceLibrary.Init("../../TempShaderFolder/"); From 7f2935dcf6b1795795fdcae856cf8be1ab8f34de Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 16 Oct 2022 15:36:14 +0800 Subject: [PATCH 351/793] add window pos change for editor windows add git ignore for user ini --- .gitignore | 2 + .../Editor/EditorWindow/SHEditorWindow.cpp | 14 +- .../src/Editor/EditorWindow/SHEditorWindow.h | 6 +- .../ViewportWindow/SHEditorViewport.cpp | 11 ++ .../ViewportWindow/SHEditorViewport.h | 3 +- SHADE_Engine/src/Editor/SHEditor.cpp | 156 +++++++++--------- 6 files changed, 109 insertions(+), 83 deletions(-) diff --git a/.gitignore b/.gitignore index 1110510c..5d998cfd 100644 --- a/.gitignore +++ b/.gitignore @@ -362,3 +362,5 @@ MigrationBackup/ *.csproj *.filters + +Assets/Editor/Layouts/UserLayout.ini diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index 8f677be6..491c1bc2 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -43,16 +43,26 @@ namespace SHADE bool result = ImGui::Begin(windowName.data(), &isOpen, windowFlags); auto wndSize = ImGui::GetWindowSize(); - if(size.x != wndSize.x || size.y != wndSize.y) + if(windowSize.x != wndSize.x || windowSize.y != wndSize.y) { - size = {wndSize.x, wndSize.y}; + windowSize = {wndSize.x, wndSize.y}; OnResize(); } + auto wndPos = ImGui::GetWindowPos(); + if(windowPos.x != wndPos.x || windowPos.y != wndPos.y) + { + windowPos = {wndPos.x, wndPos.y}; + OnPosChange(); + } return result; } void SHEditorWindow::OnResize() { } + + void SHEditorWindow::OnPosChange() + { + } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index 78e1b6cb..3e7a2a5c 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -28,9 +28,11 @@ namespace SHADE protected: virtual bool Begin(); virtual void OnResize(); + virtual void OnPosChange(); + ImGuiWindowFlags windowFlags = 0; ImGuiIO& io; - SHVec2 size; - SHVec2 pos; + SHVec2 windowSize; + SHVec2 windowPos; };//class SHEditorWindow }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index 99ca5067..60c91754 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -1,6 +1,9 @@ #include "SHpch.h" #include "SHEditorViewport.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" + namespace SHADE { SHEditorViewport::SHEditorViewport() @@ -20,6 +23,9 @@ namespace SHADE if(Begin()) { DrawMenuBar(); + auto gfxSystem = SHSystemManager::GetSystem(); + //auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; + //ImGui::Image((ImTextureID)descriptorSet, ImGui::GetWindowSize()); } ImGui::End(); } @@ -35,6 +41,11 @@ namespace SHADE //Get graphics system to resize swapchain image } + void SHEditorViewport::OnPosChange() + { + SHEditorWindow::OnPosChange(); + } + void SHEditorViewport::DrawMenuBar() const noexcept { if(ImGui::BeginMenuBar()) diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h index baee0941..5f4a5919 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -21,7 +21,8 @@ namespace SHADE void Update() override; void Exit() override; protected: - virtual void OnResize() override; + void OnResize() override; + void OnPosChange() override; private: void DrawMenuBar() const noexcept; };//class SHEditorViewport diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index d0bf0c4f..e7606337 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -190,86 +190,86 @@ namespace SHADE default: case Style::SHADE: { - ImGuiStyle& imStyle = ImGui::GetStyle(); - ImVec4* colors = imStyle.Colors; - colors[ImGuiCol_Text] = ImVec4(0.706f, 0.729f, 0.757f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.172f, 0.184f, 0.203f, 1.f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); - colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); - colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_TitleBg] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TitleBgActive] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TitleBgCollapsed] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_MenuBarBg] = ImVec4(0.129f, 0.141f, 0.157f, 1.f); - colors[ImGuiCol_ScrollbarBg] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); - colors[ImGuiCol_CheckMark] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); - colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); - colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.15f, 0.15f, 0.54f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); - colors[ImGuiCol_Separator] = colors[ImGuiCol_MenuBarBg]; - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); - colors[ImGuiCol_Tab] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); - colors[ImGuiCol_TabActive] = ImVec4(0.14f, 0.14f, 0.14f, 0.8f); - colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_DockingPreview] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); - colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.855f, 0.6f, 0.941f, 1.00f); - colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); - colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); - colors[ImGuiCol_NavHighlight] = ImVec4(0.73f, 0.73f, 0.73f, 0.7f); + ImGuiStyle& imStyle = ImGui::GetStyle(); + ImVec4* colors = imStyle.Colors; + colors[ImGuiCol_Text] = ImVec4(0.706f, 0.729f, 0.757f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.172f, 0.184f, 0.203f, 1.f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); + colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); + colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_TitleBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgCollapsed] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_MenuBarBg] = ImVec4(0.129f, 0.141f, 0.157f, 1.f); + colors[ImGuiCol_ScrollbarBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_CheckMark] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.15f, 0.15f, 0.54f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); + colors[ImGuiCol_Separator] = colors[ImGuiCol_MenuBarBg]; + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_Tab] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_TabActive] = ImVec4(0.14f, 0.14f, 0.14f, 0.8f); + colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_DockingPreview] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.855f, 0.6f, 0.941f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.73f, 0.73f, 0.73f, 0.7f); colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.141f, 0.141f, 0.141f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = colors[ImGuiCol_NavHighlight]; - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.2f, 0.2f, 0.2f, 0.65f); + colors[ImGuiCol_NavWindowingDimBg] = colors[ImGuiCol_NavHighlight]; + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.2f, 0.2f, 0.2f, 0.65f); - imStyle.WindowPadding = ImVec2(8.00f, 8.00f); - imStyle.FramePadding = ImVec2(5.00f, 2.00f); - imStyle.CellPadding = ImVec2(6.00f, 8.00f); - imStyle.ItemSpacing = ImVec2(6.00f, 6.00f); - imStyle.ItemInnerSpacing = ImVec2(6.00f, 6.00f); - imStyle.TouchExtraPadding = ImVec2(0.00f, 0.00f); - imStyle.IndentSpacing = 25; - imStyle.ScrollbarSize = 15; - imStyle.GrabMinSize = 10; - imStyle.WindowBorderSize = 0.6f; - imStyle.ChildBorderSize = 1; - imStyle.PopupBorderSize = 1; - imStyle.FrameBorderSize = 1; - imStyle.TabBorderSize = 1; - imStyle.WindowRounding = 7; - imStyle.ChildRounding = 4; - imStyle.FrameRounding = 3; - imStyle.PopupRounding = 4; - imStyle.ScrollbarRounding = 9; - imStyle.GrabRounding = 3; - imStyle.LogSliderDeadzone = 4; - imStyle.TabRounding = 4; + imStyle.WindowPadding = ImVec2(8.00f, 8.00f); + imStyle.FramePadding = ImVec2(5.00f, 2.00f); + imStyle.CellPadding = ImVec2(6.00f, 8.00f); + imStyle.ItemSpacing = ImVec2(6.00f, 6.00f); + imStyle.ItemInnerSpacing = ImVec2(6.00f, 6.00f); + imStyle.TouchExtraPadding = ImVec2(0.00f, 0.00f); + imStyle.IndentSpacing = 25; + imStyle.ScrollbarSize = 15; + imStyle.GrabMinSize = 10; + imStyle.WindowBorderSize = 0.6f; + imStyle.ChildBorderSize = 1; + imStyle.PopupBorderSize = 1; + imStyle.FrameBorderSize = 1; + imStyle.TabBorderSize = 1; + imStyle.WindowRounding = 7; + imStyle.ChildRounding = 4; + imStyle.FrameRounding = 3; + imStyle.PopupRounding = 4; + imStyle.ScrollbarRounding = 9; + imStyle.GrabRounding = 3; + imStyle.LogSliderDeadzone = 4; + imStyle.TabRounding = 4; imStyle.WindowMenuButtonPosition = ImGuiDir_None; } break; From 0d02ece4c1f88272bb5b135a7cafccceaeacb38c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 16:28:29 +0800 Subject: [PATCH 352/793] Wrote handle resize for mouse picking objects --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 ++ .../MiddleEnd/Interface/SHMousePickSystem.cpp | 29 ++++++++++++++----- .../MiddleEnd/Interface/SHMousePickSystem.h | 5 +++- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 247c58fd..cd99648c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -559,6 +559,8 @@ namespace SHADE worldRenderGraph->HandleResize(windowDims.first, windowDims.second); + mousePickSystem->HandleResize(); + defaultViewport->SetWidth(static_cast(windowDims.first)); defaultViewport->SetHeight(static_cast(windowDims.second)); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index ee8665d5..e4ac92e5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -9,8 +9,10 @@ namespace SHADE { - void SHMousePickSystem::Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept + void SHMousePickSystem::Init(Handle device, std::span> cmdPools, Handle eidAttachment) noexcept { + logicalDevice = device; + pickedEID = 0; // Create command buffers @@ -22,13 +24,7 @@ namespace SHADE // assign the attachment entityIDAttachment = eidAttachment; - // Create the fence - afterCopyFence = logicalDevice->CreateFence(); - - uint32_t bufferSize = entityIDAttachment->GetWidth() * eidAttachment->GetHeight() * SHVkUtil::GetBytesPerPixelFromFormat(entityIDAttachment->GetResourceFormat()); - - // Create the buffer - imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + HandleResize(); } void SHMousePickSystem::Run(Handle queue, uint32_t frameIndex) noexcept @@ -63,6 +59,23 @@ namespace SHADE } } + void SHMousePickSystem::HandleResize(void) noexcept + { + if (afterCopyFence) + afterCopyFence.Free(); + + if (imageDataDstBuffer) + imageDataDstBuffer.Free(); + + // Create the fence + afterCopyFence = logicalDevice->CreateFence(); + + uint32_t bufferSize = entityIDAttachment->GetWidth() * entityIDAttachment->GetHeight() * SHVkUtil::GetBytesPerPixelFromFormat(entityIDAttachment->GetResourceFormat()); + + // Create the buffer + imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + } + EntityID SHMousePickSystem::GetPickedEntity(void) const noexcept { return pickedEID; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h index 080a192c..4b84c1df 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h @@ -17,6 +17,8 @@ namespace SHADE class SHMousePickSystem { private: + Handle logicalDevice; + //! Handle to the render graph resource that will contain the entity IDs Handle entityIDAttachment; @@ -35,8 +37,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init(Handle logicalDevice, std::span> cmdPools, Handle eidAttachment) noexcept; + void Init(Handle device, std::span> cmdPools, Handle eidAttachment) noexcept; void Run (Handle queue, uint32_t frameIndex) noexcept; + void HandleResize (void) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ From 1117ecc5ef9556061681b7f50b20450ba93270da Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 17:31:53 +0800 Subject: [PATCH 353/793] WIP --- .../src/Graphics/Devices/SHVkLogicalDevice.cpp | 5 ++--- .../src/Graphics/Devices/SHVkLogicalDevice.h | 2 +- .../src/Graphics/Images/SHVkSampler.cpp | 17 +++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 1 + .../Interface/SHPostOffscreenRenderSystem.cpp | 4 ++-- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 4f4f94a4..7c7acfc5 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -550,10 +550,9 @@ namespace SHADE } - Handle SHVkLogicalDevice::CreateDescriptorSetLayout(SetIndex setIndex, std::vector const& bindings) noexcept + Handle SHVkLogicalDevice::CreateDescriptorSetLayout(SetIndex setIndex, std::vector const& bindings, bool genImmutableSamplers/* = false*/) noexcept { - return SHVkInstance::GetResourceManager().Create (GetHandle(), setIndex, bindings); - + return SHVkInstance::GetResourceManager().Create (GetHandle(), setIndex, bindings, genImmutableSamplers); } Handle SHVkLogicalDevice::CreateDescriptorPools(const SHVkDescriptorPool::Config& config /*= {}*/) noexcept diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 5c400e02..6f7048b8 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -186,7 +186,7 @@ namespace SHADE Handle CreateRenderpass (std::span const vkDescriptions, std::vector const& subpasses) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::span const spDescs, std::span const spDeps) noexcept; Handle CreateFramebuffer (Handle const& renderpassHdl, std::vector> const& attachments, uint32_t inWidth, uint32_t inHeight) noexcept; - Handle CreateDescriptorSetLayout (SetIndex setIndex, std::vector const& bindings) noexcept; + Handle CreateDescriptorSetLayout (SetIndex setIndex, std::vector const& bindings, bool genImmutableSamplers = false) noexcept; Handle CreateDescriptorPools (const SHVkDescriptorPool::Config& config = {}) noexcept; Handle CreateDescriptorSetGroup(Handle pool, std::vector> const& layouts, diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index 30bcde79..4300f2bd 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -24,14 +24,15 @@ namespace SHADE { const vk::SamplerCreateInfo SAMPLER_CREATE_INFO { - .magFilter = params.magFilter, - .minFilter = params.minFilter, - .mipmapMode = params.mipmapMode, - .addressModeU = params.addressMode, - .addressModeV = params.addressMode, - .addressModeW = params.addressMode, - .minLod = params.minLod, - .maxLod = params.maxLod + .magFilter = params.magFilter, + .minFilter = params.minFilter, + .mipmapMode = params.mipmapMode, + .addressModeU = params.addressMode, + .addressModeV = params.addressMode, + .addressModeW = params.addressMode, + .maxAnisotropy = 1.0f, + .minLod = params.minLod, + .maxLod = params.maxLod, }; // Create the sampler diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index cd99648c..6d9a84aa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -560,6 +560,7 @@ namespace SHADE worldRenderGraph->HandleResize(windowDims.first, windowDims.second); mousePickSystem->HandleResize(); + //postOffscreenRender->HandleResize(); defaultViewport->SetWidth(static_cast(windowDims.first)); defaultViewport->SetHeight(static_cast(windowDims.second)); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp index 7d40d9bd..bbc7c021 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp @@ -56,14 +56,14 @@ namespace SHADE }; // Create descriptor set layout - offscreenRenderDescSetLayout = logicalDevice->CreateDescriptorSetLayout(0, { imageBinding }); + offscreenRenderDescSetLayout = logicalDevice->CreateDescriptorSetLayout(0, { imageBinding }, true); // Create descriptor set offscreenRenderDescSet = descriptorPool->Allocate({ offscreenRenderDescSetLayout }, { 1 }); std::vector combinedImageSampler { - std::make_tuple(renderGraphResource->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eShaderReadOnlyOptimal), + std::make_tuple(renderGraphResource->GetImageView(), Handle{}, vk::ImageLayout::eShaderReadOnlyOptimal), }; // Register the image view and sampler with the descriptor set. Now whenever rendering to the offscreen image is done, the descriptor set will see the change From c16bea2d39fb0e86d6820ee0eb166e2b1d3ca852 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 17:35:15 +0800 Subject: [PATCH 354/793] WIP --- .../Descriptors/SHVkDescriptorSetGroup.cpp | 2 +- .../Descriptors/SHVkDescriptorSetLayout.cpp | 29 +++++++++++++++++-- .../Descriptors/SHVkDescriptorSetLayout.h | 4 ++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index e842df47..ea859718 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -172,7 +172,7 @@ namespace SHADE // write sampler and image view auto& [view, sampler, layout] = imageViewsAndSamplers[i]; writeInfo.descImageInfos[i].imageView = view->GetImageView(); - writeInfo.descImageInfos[i].sampler = sampler->GetVkSampler(); + writeInfo.descImageInfos[i].sampler = sampler ? sampler->GetVkSampler() : nullptr; writeInfo.descImageInfos[i].imageLayout = layout; } } diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp index 002aa29d..0943c489 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp @@ -1,16 +1,18 @@ #include "SHPch.h" #include "SHVkDescriptorSetLayout.h" #include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Images/SHVkSampler.h" namespace SHADE { /*---------------------------------------------------------------------------------*/ /* Constructor/Destructor */ /*---------------------------------------------------------------------------------*/ - SHVkDescriptorSetLayout::SHVkDescriptorSetLayout(Handle device, SetIndex set, const std::vector& bindings) + SHVkDescriptorSetLayout::SHVkDescriptorSetLayout(Handle device, SetIndex set, const std::vector& bindings, bool genImmutableSamplers/* = false*/) : device { device } , layoutDesc { bindings } , setIndex {set} + , immutableSampler{} { // Check if auto-binding point calculation configuration is valid bool autoCalc = false; @@ -26,6 +28,25 @@ namespace SHADE } } + vk::Sampler tempVkSampler = nullptr; + if (genImmutableSamplers) + { + // Create sampler + immutableSampler = device->CreateSampler( + { + .minFilter = vk::Filter::eLinear, + .magFilter = vk::Filter::eLinear, + .addressMode = vk::SamplerAddressMode::eRepeat, + .mipmapMode = vk::SamplerMipmapMode::eLinear, + .minLod = -1000, + .maxLod = 1000 + } + ); + + tempVkSampler = immutableSampler->GetVkSampler(); + } + + // Fill up VK bindings with auto calculated bind points if needed std::vector layoutBindings; layoutBindings.reserve(bindings.size()); @@ -39,7 +60,7 @@ namespace SHADE .descriptorType = binding.Type, .descriptorCount = binding.DescriptorCount, .stageFlags = binding.Stage, - .pImmutableSamplers = nullptr // We will create our own samplers + .pImmutableSamplers = genImmutableSamplers ? &tempVkSampler : nullptr, }; layoutBindings.emplace_back(VK_BINDING); @@ -75,7 +96,8 @@ namespace SHADE : device {rhs.device} , setLayout {rhs.setLayout} , layoutDesc{std::move (rhs.layoutDesc)} - , setIndex {rhs.setIndex} + , setIndex{ rhs.setIndex } + , immutableSampler{ rhs.immutableSampler } { rhs.setLayout = VK_NULL_HANDLE; } @@ -106,6 +128,7 @@ namespace SHADE setLayout = rhs.setLayout; layoutDesc = std::move(rhs.layoutDesc); setIndex = rhs.setIndex; + immutableSampler = rhs.immutableSampler; rhs.setLayout = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h index 9b436026..4fffbc96 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h @@ -10,6 +10,7 @@ namespace SHADE /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ class SHVkLogicalDevice; + class SHVkSampler; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -74,7 +75,7 @@ namespace SHADE ///
    /// /// - SHVkDescriptorSetLayout(Handle device, SetIndex setIndex, const std::vector& bindings); + SHVkDescriptorSetLayout(Handle device, SetIndex setIndex, const std::vector& bindings, bool genImmutableSamplers = false); SHVkDescriptorSetLayout(const SHVkDescriptorSetLayout&) = delete; SHVkDescriptorSetLayout(SHVkDescriptorSetLayout&& rhs) noexcept; /// @@ -107,5 +108,6 @@ namespace SHADE vk::DescriptorSetLayout setLayout; std::vector layoutDesc; // Stores description of the layout SetIndex setIndex; // Index of the set + Handle immutableSampler; }; } \ No newline at end of file From 7fc417e35a3907b6d56736ca86d6937a9ada1b11 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 16 Oct 2022 18:16:05 +0800 Subject: [PATCH 355/793] Parent/child multiple entities (WIP) --- .../HierarchyPanel/SHHierarchyPanel.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 42c9da66..13f3b679 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -149,16 +149,21 @@ namespace SHADE if (SHDragDrop::BeginSource()) { ImGui::Text("Moving EID: %zu", eid); - SHDragDrop::SetPayload(DRAG_EID, &eid); + SHDragDrop::SetPayload>(DRAG_EID, &editor->selectedEntities); SHDragDrop::EndSource(); } else if (SHDragDrop::BeginTarget()) //If Received DragDrop { - if (const EntityID* eidPayload = SHDragDrop::AcceptPayload(DRAG_EID)) //If payload is valid + if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(DRAG_EID)) //If payload is valid { - EntityID const dropEID = *eidPayload; - if(!sceneGraph.GetChild(dropEID, eid)) - sceneGraph.SetParent(dropEID, eid); //Set dropEID parent to eid (belonging to current Node) + std::vector const droppedEIDs = *eidPayload; + for(auto const& dropEID : droppedEIDs) + { + if(!sceneGraph.GetChild(dropEID, eid)) + sceneGraph.SetParent(dropEID, eid); + } + //if(!sceneGraph.GetChild(dropEID, eid)) + // sceneGraph.SetParent(dropEID, eid); //Set dropEID parent to eid (belonging to current Node) SHDragDrop::EndTarget(); } } From 95ee4b7b550c090bd982a3f59615243ffc297a12 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 16 Oct 2022 19:42:44 +0800 Subject: [PATCH 356/793] Resize half working --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 20 +++++++++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.h | 3 +++ .../Interface/SHPostOffscreenRenderSystem.cpp | 9 +++++++-- .../Interface/SHPostOffscreenRenderSystem.h | 2 ++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6d9a84aa..21d7569e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -71,7 +71,7 @@ namespace SHADE if (width == 0 || height == 0) return; - renderContext.SetIsResized(true); + PrepareResize(resizeWidth, resizeHeight); }); window->RegisterWindowCloseCallback([&](void) @@ -545,6 +545,14 @@ namespace SHADE ); } + void SHGraphicsSystem::PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept + { + resizeWidth = newWidth; + resizeHeight = newHeight; + + renderContext.SetIsResized(true); + } + void SHGraphicsSystem::HandleResize(void) noexcept { if (window->IsMinimized() || renderContext.GetWindowIsDead()) @@ -557,15 +565,15 @@ namespace SHADE renderContext.HandleResize(); - worldRenderGraph->HandleResize(windowDims.first, windowDims.second); + worldRenderGraph->HandleResize(resizeWidth, resizeHeight); mousePickSystem->HandleResize(); - //postOffscreenRender->HandleResize(); + postOffscreenRender->HandleResize(); - defaultViewport->SetWidth(static_cast(windowDims.first)); - defaultViewport->SetHeight(static_cast(windowDims.second)); + defaultViewport->SetWidth(static_cast(resizeWidth)); + defaultViewport->SetHeight(static_cast(resizeHeight)); - worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); + worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); } void SHGraphicsSystem::AwaitGraphicsExecution() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 517b5999..c3b39514 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -252,6 +252,7 @@ namespace SHADE /***************************************************************************/ void BuildTextures(); + void PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept; void HandleResize(void) noexcept; void AwaitGraphicsExecution(); @@ -331,5 +332,7 @@ namespace SHADE Handle mousePickSystem; Handle postOffscreenRender; + uint32_t resizeWidth; + uint32_t resizeHeight; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp index bbc7c021..8b41a979 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp @@ -56,14 +56,19 @@ namespace SHADE }; // Create descriptor set layout - offscreenRenderDescSetLayout = logicalDevice->CreateDescriptorSetLayout(0, { imageBinding }, true); + offscreenRenderDescSetLayout = logicalDevice->CreateDescriptorSetLayout(0, { imageBinding }, false); // Create descriptor set offscreenRenderDescSet = descriptorPool->Allocate({ offscreenRenderDescSetLayout }, { 1 }); + HandleResize(); + } + + void SHPostOffscreenRenderSystem::HandleResize(void) noexcept + { std::vector combinedImageSampler { - std::make_tuple(renderGraphResource->GetImageView(), Handle{}, vk::ImageLayout::eShaderReadOnlyOptimal), + std::make_tuple(offscreenRender->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eShaderReadOnlyOptimal), }; // Register the image view and sampler with the descriptor set. Now whenever rendering to the offscreen image is done, the descriptor set will see the change diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h index 90767bc2..d3360b87 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h @@ -24,6 +24,8 @@ namespace SHADE void Init (Handle logicalDevice, Handle renderGraphResource, Handle descriptorPool) noexcept; //void Run () + void HandleResize (void) noexcept; + Handle GetDescriptorSetGroup (void) const noexcept; }; } From b10f490e45381422cdd81ef68d99aaca2d67215b Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 16 Oct 2022 23:15:11 +0800 Subject: [PATCH 357/793] SP3-102 SP3-248 Saving of SHMETA files with asset IDs, retrieval of asset data under works, currently all assets are loaded into memory automatically --- Assets/Cube.003.shmesh.shmeta | 3 + Assets/Cube.012.shmesh.shmeta | 3 + .../RaccoonPreTexturedVer1_Base9.shtex.shmeta | 3 + .../src/Application/SBApplication.cpp | 7 +- .../src/Assets/Asset Types/SHTextureAsset.h | 1 + .../src/Assets/Libraries/SHMeshCompiler.cpp | 4 +- .../src/Assets/Libraries/SHMeshCompiler.h | 2 +- .../src/Assets/Libraries/SHMeshLoader.cpp | 3 +- .../src/Assets/Libraries/SHMeshLoader.h | 2 +- .../Assets/Libraries/SHTextureCompiler.cpp | 4 +- .../src/Assets/Libraries/SHTextureCompiler.h | 2 +- .../src/Assets/Libraries/SHTextureLoader.cpp | 1 + .../src/Assets/Libraries/SHTextureLoader.h | 2 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 9 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 112 ++++++++++++------ .../src/Assets/SHAssetMetaHandler.cpp | 29 +++-- 16 files changed, 132 insertions(+), 55 deletions(-) create mode 100644 Assets/Cube.003.shmesh.shmeta create mode 100644 Assets/Cube.012.shmesh.shmeta create mode 100644 Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta diff --git a/Assets/Cube.003.shmesh.shmeta b/Assets/Cube.003.shmesh.shmeta new file mode 100644 index 00000000..d41be546 --- /dev/null +++ b/Assets/Cube.003.shmesh.shmeta @@ -0,0 +1,3 @@ +Name: Cube.003 +ID: 110152941 +Type:  diff --git a/Assets/Cube.012.shmesh.shmeta b/Assets/Cube.012.shmesh.shmeta new file mode 100644 index 00000000..d5cd1090 --- /dev/null +++ b/Assets/Cube.012.shmesh.shmeta @@ -0,0 +1,3 @@ +Name: Cube.012 +ID: 107348815 +Type:  diff --git a/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta b/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta new file mode 100644 index 00000000..f8c267d9 --- /dev/null +++ b/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta @@ -0,0 +1,3 @@ +Name: RaccoonPreTexturedVer1_Base9 +ID: 91918845 +Type:  diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 202a3852..5a265d39 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -104,10 +104,10 @@ namespace Sandbox //TODO: REMOVE AFTER PRESENTATION //SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); - SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); + //SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh"); //SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds"); //SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds"); - SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); + //SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.shtex"); //TODO: REMOVE AFTER PRESENTATION @@ -125,6 +125,8 @@ namespace Sandbox SHSceneManager::InitSceneManager("TestScene"); SHFrameRateController::UpdateFRC(); + + SHAssetManager::Load(); } void SBApplication::Update(void) @@ -154,6 +156,7 @@ namespace Sandbox SHSceneManager::Exit(); SHSystemManager::Exit(); + SHAssetManager::Unload(); } } diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index 07cebea9..d24b6c02 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -9,6 +9,7 @@ namespace SHADE { bool compiled; + std::string name; uint32_t numBytes; uint32_t width; uint32_t height; diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 12b2517e..8026f0e1 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -16,7 +16,7 @@ #include -void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept +std::string SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept { std::string newPath{ path.string() }; newPath = newPath.substr(0, newPath.find_last_of('/') + 1); @@ -67,4 +67,6 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat ); file.close(); + + return newPath; } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h index 6da00525..a8ce67be 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h @@ -21,6 +21,6 @@ namespace SHADE { private: public: - static void CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; + static std::string CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 3a5fb9ec..4bfa2d9b 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -142,8 +142,7 @@ namespace SHADE SHLOG_ERROR("Unable to open SHMesh File: {}", path.string()); } - std::string name{ path.filename().string() }; - name = name.substr(0, name.find_last_of('.')); + const std::string name{ path.stem().string() }; file.seekg(0); diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index 3e430aca..a27d63ea 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -29,8 +29,8 @@ namespace SHADE static void LoadExternal(std::vector& meshes, AssetPath path) noexcept; - static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept; public: static void LoadMesh(std::vector& meshes, AssetPath path) noexcept; + static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp index 62af4da6..49de6b5c 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp @@ -17,7 +17,7 @@ namespace SHADE { - void SHTextureCompiler::CompileTextureBinary(SHTextureAsset const& asset, AssetPath path) + std::string SHTextureCompiler::CompileTextureBinary(SHTextureAsset const& asset, AssetPath path) { std::string newPath{ path.string() }; newPath = newPath.substr(0, newPath.find_last_of('.')); @@ -69,5 +69,7 @@ namespace SHADE ); file.close(); + + return newPath; } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h index d8685795..52980084 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h @@ -19,6 +19,6 @@ namespace SHADE { struct SHTextureCompiler { - static void CompileTextureBinary(SHTextureAsset const& asset, AssetPath path); + static std::string CompileTextureBinary(SHTextureAsset const& asset, AssetPath path); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 47501d42..5147562a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -93,6 +93,7 @@ namespace SHADE std::memcpy(pixel, file.GetImageData()->m_mem, totalBytes); //pixel = std::move(reinterpret_cast(file.GetDDSData())); + asset.name = path.stem().string(); asset.compiled = false; asset.numBytes = static_cast(totalBytes); asset.width = file.GetWidth(); diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index e84fe5cf..eb61ea91 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -26,8 +26,8 @@ namespace SHADE static void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; - static void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; public: static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); + static void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; }; } diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 8c462af7..61c5879d 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -40,7 +40,7 @@ typedef FMOD::Sound* SHSound; #define ASSET_META_VER "1.0" // Asset type enum -enum class AssetType : uint8_t +enum class AssetType : AssetTypeMeta { INVALID = 0, AUDIO = 1, @@ -57,7 +57,12 @@ enum class AssetType : uint8_t }; //Directory -#define ASSET_ROOT "./Assets/" +#ifdef _PUBLISH +#define ASSET_ROOT "Assets" +#else +#define ASSET_ROOT "../../Assets" +#endif + // ASSET EXTENSIONS #define META_EXTENSION ".shmeta" diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 430b8c79..e3578f92 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -307,12 +307,22 @@ namespace SHADE for (auto const& mesh : meshes) { - meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh); + auto id{ GenerateAssetID(AssetType::MESH) }; + meshCollection.emplace(id, mesh); + AssetPath path; if (!mesh.compiled) { - SHMeshCompiler::CompileMeshBinary(mesh, asset.path); + path = SHMeshCompiler::CompileMeshBinary(mesh, asset.path); } + + assetCollection.emplace_back( + mesh.header.meshName, + id, + AssetType::MESH, + path, + 0 + ); } } @@ -322,11 +332,20 @@ namespace SHADE SHTextureLoader::LoadImageAsset(asset.path, image); - textureCollection.emplace(GenerateAssetID(AssetType::DDS), image); - if (!image.compiled) { - SHTextureCompiler::CompileTextureBinary(image, asset.path); + auto id{ GenerateAssetID(AssetType::TEXTURE) }; + textureCollection.emplace(id, image); + + auto path{ SHTextureCompiler::CompileTextureBinary(image, asset.path) }; + + assetCollection.emplace_back( + image.name, + id, + AssetType::TEXTURE, + path, + 0 + ); } } @@ -344,8 +363,24 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::LoadAllData() noexcept { + //TODO Remove when on demand loading is done for (auto const& asset : assetCollection) { + switch (asset.type) + { + case AssetType::MESH: + meshCollection.emplace(asset.id, SHMeshAsset()); + SHMeshLoader::LoadSHMesh(meshCollection[asset.id], asset.path); + break; + + case AssetType::TEXTURE: + textureCollection.emplace(asset.id, SHTextureAsset()); + SHTextureLoader::LoadSHTexture(asset.path, textureCollection[asset.id]); + break; + + default: + void; + } } } @@ -362,40 +397,51 @@ namespace SHADE std::vector metaFiles; std::vector AssetFiles; - //TODO: Write new function for file manager to loop through all files - SHFileSystem::StartupFillDirectories(ASSET_ROOT); - FolderPointer rootFolder = SHFileSystem::GetRoot(); - - for (auto const& meta : metaFiles) + for (auto const dir : std::filesystem::recursive_directory_iterator(ASSET_ROOT)) { - for (std::vector::const_iterator it{ AssetFiles.cbegin() }; - it != AssetFiles.cend(); - ++it) + if (dir.path().extension().string() == META_EXTENSION) { - // Asset exists for meta file - std::string fileExtCheck{ it->filename().string() }; - fileExtCheck += META_EXTENSION; - if (meta.filename().string() == fileExtCheck) - { - RegisterAsset(meta, *it); - AssetFiles.erase(it); - break; - } + auto meta{ SHAssetMetaHandler::RetrieveMetaData(dir.path()) }; + + assetCollection.push_back(meta); + assetRegistry.emplace(meta.id, meta); } } + //TODO: Write new function for file manager to loop through all files + //SHFileSystem::StartupFillDirectories(ASSET_ROOT); + //FolderPointer rootFolder = SHFileSystem::GetRoot(); + + //for (auto const& meta : metaFiles) + //{ + // for (std::vector::const_iterator it{ AssetFiles.cbegin() }; + // it != AssetFiles.cend(); + // ++it) + // { + // // Asset exists for meta file + // std::string fileExtCheck{ it->filename().string() }; + // fileExtCheck += META_EXTENSION; + // if (meta.filename().string() == fileExtCheck) + // { + // RegisterAsset(meta, *it); + // AssetFiles.erase(it); + // break; + // } + // } + //} + //TODO: Handle if meta does not match all assets (if meta exist and asset doesnt, vice versa) - for (auto const& file : AssetFiles) - { - if (IsRecognised(file.extension().string().c_str())) - { - SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file)); - } - else - { - std::cout << "Unsupported File Format: " << file.filename() << "\n"; - } - } + //for (auto const& file : AssetFiles) + //{ + // if (IsRecognised(file.extension().string().c_str())) + // { + // SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file)); + // } + // else + // { + // std::cout << "Unsupported File Format: " << file.filename() << "\n"; + // } + //} } AssetID SHAssetManager::RetrieveAsset(char const* path) noexcept diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 6554a3e4..442c3d96 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -72,6 +72,13 @@ namespace SHADE std::string line; SHAsset meta; + // Get resource name + GetFieldValue(metaFile, line); + std::stringstream nameStream{ line }; + AssetName name; + nameStream >> name; + meta.name = name; + // Get resource id GetFieldValue(metaFile, line); std::stringstream idStream{ line }; @@ -88,6 +95,8 @@ namespace SHADE metaFile.close(); + meta.path = path.parent_path().string() + "/" + path.stem().string(); + return meta; } @@ -103,7 +112,7 @@ namespace SHADE std::string path{ meta.path.string() }; path.append(META_EXTENSION); - std::ofstream metaFile{ path, std::ios_base::out }; + std::ofstream metaFile{ path, std::ios_base::out | std::ios_base::trunc }; if (!metaFile.is_open()) { @@ -113,17 +122,17 @@ namespace SHADE metaFile << "Name: " << meta.name << "\n"; metaFile << "ID: " << meta.id << "\n"; - metaFile << "Type: " << static_cast(meta.type) << std::endl; + metaFile << "Type: " << static_cast(meta.type) << std::endl; - //TODO Add in information that is specific to types like mesh - switch(meta.type) - { - case AssetType::MESH: - break; + ////TODO Add in information that is specific to types like mesh + //switch(meta.type) + //{ + //case AssetType::MESH: + // break; - default: - break; - } + //default: + // break; + //} metaFile.close(); } From 013bb713258fafbe46917380763ec0beaf76b05b Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 17 Oct 2022 15:04:38 +0800 Subject: [PATCH 358/793] Functions to retrieve mesh and texture data --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 20 ++++++++++++++++++++ SHADE_Engine/src/Assets/SHAssetManager.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index e3578f92..aa9772dd 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -255,6 +255,26 @@ namespace SHADE return result; } + SHMeshAsset const* SHAssetManager::GetMesh(AssetID id) noexcept + { + if (meshCollection.find(id) == meshCollection.end()) + { + return nullptr; + } + + return &meshCollection[id]; + } + + SHTextureAsset const* SHAssetManager::GetTexture(AssetID id) noexcept + { + if (textureCollection.find(id) == textureCollection.end()) + { + return nullptr; + } + + return &textureCollection[id]; + } + /**************************************************************************** * \param Path for meta data file * \param Path for asset file diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 7064d63d..50549e01 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -75,6 +75,8 @@ namespace SHADE static std::vector GetAllMeshes() noexcept; static std::vector GetAllTextures() noexcept; + static SHMeshAsset const* GetMesh(AssetID id) noexcept; + static SHTextureAsset const* GetTexture(AssetID id) noexcept; private: /**************************************************************************** * \brief Load resource data into memory From 17b71393f34974c64a55285518c0044a1889033f Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 17 Oct 2022 16:50:53 +0800 Subject: [PATCH 359/793] Restructured abit --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 207 ++++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 15 +- 2 files changed, 132 insertions(+), 90 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 21d7569e..d5a45cf7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -36,11 +36,9 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { +#pragma region INIT_EXIT - /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*---------------------------------------------------------------------------------*/ - void SHGraphicsSystem::Init(void) + void SHGraphicsSystem::InitBoilerplate(void) noexcept { /*-----------------------------------------------------------------------*/ /* BACKEND BOILERPLATE */ @@ -51,7 +49,7 @@ namespace SHADE // Get Physical Device and Construct Logical Device physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); - + // Construct surface surface = device->CreateSurface(window->GetHWND()); @@ -106,11 +104,12 @@ namespace SHADE graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + } - - + void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept + { /*-----------------------------------------------------------------------*/ - /* MIDDLE END SETUP + /* MIDDLE END SETUP - Viewports - Renderer - Render graph in renderers @@ -118,6 +117,7 @@ namespace SHADE - Default vertex input state - Global data /*-----------------------------------------------------------------------*/ + auto windowDims = window->GetWindowSize(); SHGraphicsGlobalData::Init(device); @@ -132,63 +132,49 @@ namespace SHADE // Create Default Viewport defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); - + // Get render graph from default viewport world renderer - worldRenderGraph = resourceManager.Create(); - - std::vector> renderContextCmdPools{swapchain->GetNumImages()}; + sceneRenderGraph = resourceManager.Create(); + + std::vector> renderContextCmdPools{ swapchain->GetNumImages() }; for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) { renderContextCmdPools[i] = renderContext.GetFrameData(i).cmdPoolHdls[0]; } // Initialize world render graph - worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Present", {SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT}, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Scene", {SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT}, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Depth Buffer", {SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL}, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - worldRenderGraph->AddResource("Entity ID", {SH_ATT_DESC_TYPE_FLAGS::COLOR}, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + sceneRenderGraph->Init(device, swapchain); + sceneRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); + sceneRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT }, windowDims.first, windowDims.second); + sceneRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); + sceneRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - //worldRenderGraph->AddResource("Position", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - //worldRenderGraph->AddResource("Normals", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - //worldRenderGraph->AddResource("Composite", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eR16G16B16A16Sfloat); - //worldRenderGraph->AddResource("Scene", SH_ATT_DESC_TYPE::COLOR, windowDims.first, windowDims.second, vk::Format::eB8G8R8A8Unorm); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors + auto node = sceneRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene" }, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Entity ID"); - gBufferWriteSubpass->AddDepthOutput ("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); + gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); // We do this to just transition our scene layout to shader read auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); sceneLayoutTransitionSubpass->AddInput("Scene"); #ifdef SHEDITOR - auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, {"G-Buffer"}); + auto imguiNode = sceneRenderGraph->AddNode("ImGui Node", { "Present" }, { "G-Buffer" }); auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); imguiSubpass->AddColorOutput("Present"); #endif - worldRenderGraph->Generate(); - - // Create Semaphore - for (auto& semaHandle : graphSemaphores) - { - semaHandle = device->CreateSemaphore(); - } - - // Create Debug Renderers - /*debugScreenRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); - debugScreenRenderer->SetCamera(screenCamera); - debugWorldRenderer = defaultViewport->AddRenderer(resourceManager, worldRenderGraph); - debugWorldRenderer->SetCamera(worldCamera);*/ + // Generate world render graph + sceneRenderGraph->Generate(); // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); + worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], sceneRenderGraph); worldRenderer->SetCamera(worldCamera); + // TODO: This is VERY temporarily here until a more solid resource management system is implemented shaderSourceLibrary.Init("../../TempShaderFolder/"); @@ -202,21 +188,59 @@ namespace SHADE cubeFS->Reflect(); defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); + } + + void SHGraphicsSystem::InitMiddleEnd(void) noexcept + { + InitSceneRenderGraph(); + + // Create Semaphore + for (auto& semaHandle : graphSemaphores) + { + semaHandle = device->CreateSemaphore(); + } + } + + void SHGraphicsSystem::InitSubsystems(void) noexcept + { mousePickSystem = resourceManager.Create(); std::vector> cmdPools; cmdPools.reserve(swapchain->GetNumImages()); for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) - cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); + cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); - mousePickSystem->Init(device, cmdPools, worldRenderGraph->GetRenderGraphResource("Entity ID")); + mousePickSystem->Init(device, cmdPools, sceneRenderGraph->GetRenderGraphResource("Entity ID")); // Register the post offscreen render to the system postOffscreenRender = resourceManager.Create(); - postOffscreenRender->Init(device, worldRenderGraph->GetRenderGraphResource("Scene"), descPool); + postOffscreenRender->Init(device, sceneRenderGraph->GetRenderGraphResource("Scene"), descPool); } + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ + void SHGraphicsSystem::Init(void) + { + InitBoilerplate(); + InitMiddleEnd(); + InitSubsystems(); + + + } + + void SHGraphicsSystem::Exit(void) + { + } + +#pragma endregion INIT_EXIT + +#pragma region LIFECYCLE + + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ /***************************************************************************/ /*! @@ -336,14 +360,7 @@ namespace SHADE } } } - - void SHGraphicsSystem::Exit(void) - { - } - - /*---------------------------------------------------------------------------------*/ - /* Lifecycle Functions */ - /*---------------------------------------------------------------------------------*/ + /***************************************************************************/ /*! @@ -435,6 +452,10 @@ namespace SHADE renderContext.AdvanceFrame(); } +#pragma endregion LIFECYCLE + +#pragma region ADD_REMOVE_BUILD + Handle SHGraphicsSystem::AddViewport(const vk::Viewport& viewport) { // Create the viewport @@ -545,47 +566,9 @@ namespace SHADE ); } - void SHGraphicsSystem::PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept - { - resizeWidth = newWidth; - resizeHeight = newHeight; - - renderContext.SetIsResized(true); - } - - void SHGraphicsSystem::HandleResize(void) noexcept - { - if (window->IsMinimized() || renderContext.GetWindowIsDead()) - return; - - auto windowDims = window->GetWindowSize(); - - // Resize the swapchain - swapchain->Resize(surface, windowDims.first, windowDims.second); - - renderContext.HandleResize(); - - worldRenderGraph->HandleResize(resizeWidth, resizeHeight); - - mousePickSystem->HandleResize(); - postOffscreenRender->HandleResize(); - - defaultViewport->SetWidth(static_cast(resizeWidth)); - defaultViewport->SetHeight(static_cast(resizeHeight)); - - worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); - } - - void SHGraphicsSystem::AwaitGraphicsExecution() - { - device->WaitIdle(); - } - - void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept - { - window = wind; - } +#pragma endregion ADD_REMOVE +#pragma region ROUTINES /*-----------------------------------------------------------------------------------*/ /* System Routine Functions - BeginRoutine */ /*-----------------------------------------------------------------------------------*/ @@ -657,5 +640,51 @@ namespace SHADE renderable.ResetChangedFlag(); } } +#pragma endregion ROUTINES +#pragma region MISC + + void SHGraphicsSystem::PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept + { + resizeWidth = newWidth; + resizeHeight = newHeight; + + renderContext.SetIsResized(true); + } + + void SHGraphicsSystem::HandleResize(void) noexcept + { + if (window->IsMinimized() || renderContext.GetWindowIsDead()) + return; + + auto windowDims = window->GetWindowSize(); + + // Resize the swapchain + swapchain->Resize(surface, windowDims.first, windowDims.second); + + renderContext.HandleResize(); + + sceneRenderGraph->HandleResize(resizeWidth, resizeHeight); + + mousePickSystem->HandleResize(); + postOffscreenRender->HandleResize(); + + defaultViewport->SetWidth(static_cast(resizeWidth)); + defaultViewport->SetHeight(static_cast(resizeHeight)); + + worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); + } + + void SHGraphicsSystem::AwaitGraphicsExecution() + { + device->WaitIdle(); + } + + void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept + { + window = wind; + } + + +#pragma endregion MISC } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index c3b39514..e6739715 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -67,6 +67,12 @@ namespace SHADE /***********************************************************************************/ class SH_API SHGraphicsSystem : public SHSystem { + private: + void InitBoilerplate (void) noexcept; + void InitSceneRenderGraph(void) noexcept; + void InitMiddleEnd (void) noexcept; + void InitSubsystems (void) noexcept; + public: class SH_API BeginRoutine final : public SHSystemRoutine { @@ -279,6 +285,7 @@ namespace SHADE private: + /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ @@ -305,6 +312,12 @@ namespace SHADE SHSamplerCache samplerCache; SHMaterialInstanceCache materialInstanceCache; // Viewports +#ifdef SHEDITOR + Handle editorViewport; + Handle editorRenderer; + Handle editorRenderGraph; +#endif + Handle defaultViewport; // Whole screen std::vector> viewports; // Additional viewports @@ -326,7 +339,7 @@ namespace SHADE // Temp Materials Handle defaultMaterial; - Handle worldRenderGraph; + Handle sceneRenderGraph; // Sub systems Handle mousePickSystem; From ec6772657f965e5983c4a77d00bbad3621db038a Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 17 Oct 2022 21:25:59 +0800 Subject: [PATCH 360/793] Hierarchy QOL Undo/Redo Parent Child Shift select Undo/Redo create entity --- SHADE_Engine/src/Editor/Command/SHCommand.hpp | 1 + .../src/Editor/Command/SHCommandManager.cpp | 6 +- .../src/Editor/Command/SHCommandManager.h | 10 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 125 ++++++++++++++++-- .../HierarchyPanel/SHHierarchyPanel.h | 34 ++++- 5 files changed, 155 insertions(+), 21 deletions(-) diff --git a/SHADE_Engine/src/Editor/Command/SHCommand.hpp b/SHADE_Engine/src/Editor/Command/SHCommand.hpp index 7a526506..149c8986 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommand.hpp +++ b/SHADE_Engine/src/Editor/Command/SHCommand.hpp @@ -24,6 +24,7 @@ namespace SHADE class SHCommand : SHBaseCommand { public: + using SHCommandPtr = std::unique_ptr; typedef std::function SetterFunction; SHCommand(T const& oldVal, T const& value, SetterFunction setFnc) diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp index ee2d316d..7a965644 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp @@ -13,7 +13,7 @@ namespace SHADE SHCommandManager::CommandStack SHCommandManager::undoStack{}; SHCommandManager::CommandStack SHCommandManager::redoStack{}; - void SHCommandManager::PerformCommand(CommandPtr commandPtr, bool const& overrideValue) + void SHCommandManager::PerformCommand(BaseCommandPtr commandPtr, bool const& overrideValue) { redoStack = CommandStack(); commandPtr->Execute(); @@ -27,9 +27,9 @@ namespace SHADE } } - void SHCommandManager::RegisterCommand(CommandPtr commandPtr) + void SHCommandManager::RegisterCommand(BaseCommandPtr commandPtr) { - undoStack.push(commandPtr); + undoStack.push(commandPtr); } void SHCommandManager::UndoCommand() diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.h b/SHADE_Engine/src/Editor/Command/SHCommandManager.h index 9152c3cb..c1ceb4b0 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.h +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.h @@ -19,11 +19,13 @@ namespace SHADE //#==============================================================# //|| Type Aliases || //#==============================================================# - using CommandPtr = std::shared_ptr; - using CommandStack = std::stack; + using BaseCommandPtr = std::shared_ptr; + template + using SHCommandPtr = std::shared_ptr>; + using CommandStack = std::stack; - static void PerformCommand(CommandPtr commandPtr, bool const& overrideValue = false); - static void RegisterCommand(CommandPtr commandPtr); + static void PerformCommand(BaseCommandPtr commandPtr, bool const& overrideValue = false); + static void RegisterCommand(BaseCommandPtr commandPtr); static void UndoCommand(); static void RedoCommand(); static std::size_t GetUndoStackSize(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 13f3b679..c2316006 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -50,6 +50,7 @@ namespace SHADE if(const auto root = sceneGraph.GetRoot()) { auto const& children = root->GetChildren(); + for (const auto child : children) { RecursivelyDrawEntityNode(child); @@ -102,7 +103,7 @@ namespace SHADE } if (ImGui::SmallButton(ICON_MD_ADD_CIRCLE)) { - SHEntityManager::CreateEntity(); + SHCommandManager::PerformCommand(std::make_shared()); } if (ImGui::IsItemHovered()) { @@ -142,13 +143,24 @@ namespace SHADE auto* entity = SHEntityManager::GetEntityByID(currentNode->GetEntityID()); //Draw Node - bool isNodeOpen = ImGui::TreeNodeEx(reinterpret_cast(entity), nodeFlags, "%u: %s", EntityHandleGenerator::GetIndex(eid), entity->name.c_str()); + bool isNodeOpen = ImGui::TreeNodeEx(reinterpret_cast(entity), nodeFlags, "%u: %s", SHEntityManager::GetEntityIndex(eid), entity->name.c_str()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); //Check For Begin Drag if (SHDragDrop::BeginSource()) { - ImGui::Text("Moving EID: %zu", eid); + std::string moveLabel = "Moving EID: "; + if(!isSelected) + editor->selectedEntities.push_back(eid); + for(int i = 0; i < static_cast(editor->selectedEntities.size()); ++i) + { + moveLabel.append(std::to_string(editor->selectedEntities[i])); + if(i + 1 < static_cast(editor->selectedEntities.size())) + { + moveLabel.append(", "); + } + } + ImGui::Text(moveLabel.c_str()); SHDragDrop::SetPayload>(DRAG_EID, &editor->selectedEntities); SHDragDrop::EndSource(); } @@ -156,14 +168,7 @@ namespace SHADE { if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(DRAG_EID)) //If payload is valid { - std::vector const droppedEIDs = *eidPayload; - for(auto const& dropEID : droppedEIDs) - { - if(!sceneGraph.GetChild(dropEID, eid)) - sceneGraph.SetParent(dropEID, eid); - } - //if(!sceneGraph.GetChild(dropEID, eid)) - // sceneGraph.SetParent(dropEID, eid); //Set dropEID parent to eid (belonging to current Node) + ParentSelectedEntities(eid); SHDragDrop::EndTarget(); } } @@ -183,7 +188,7 @@ namespace SHADE if((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) { - sceneGraph.SetParent(currentNode->GetEntityID(), nullptr); + ParentSelectedEntities(MAX_EID); } ImGui::EndPopup(); } @@ -195,7 +200,15 @@ namespace SHADE { if (!isSelected) { - if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + if(ImGui::IsKeyDown(ImGuiKey_LeftShift)) + { + if(editor->selectedEntities.size() >= 1) + { + SelectRangeOfEntities(editor->selectedEntities[0], eid); + } + else editor->selectedEntities.clear(); + } + else if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) editor->selectedEntities.clear(); editor->selectedEntities.push_back(eid); }//if not selected @@ -242,4 +255,90 @@ namespace SHADE { SHEntityManager::CreateEntity(MAX_EID, "DefaultChild", parentEID); } + + void SHHierarchyPanel::ParentSelectedEntities(EntityID parentEID) const noexcept + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto const editor = SHSystemManager::GetSystem(); + SHEntityParentCommand::EntityParentData entityParentData; + std::vector parentedEIDS; + for(auto const& eid : editor->selectedEntities) + { + if(sceneGraph.GetChild(eid, parentEID) == nullptr) + { + parentedEIDS.push_back(eid); + if(auto parent = sceneGraph.GetParent(eid)) + entityParentData[eid].oldParentEID = parent->GetEntityID(); + entityParentData[eid].newParentEID = parentEID; + } + } + SHCommandManager::PerformCommand(std::make_shared(parentedEIDS, entityParentData)); + } + + void SHHierarchyPanel::SelectRangeOfEntities(EntityID beginEID, EntityID endEID) + { + bool startSelecting = false; bool endSelecting = false; + auto const editor = SHSystemManager::GetSystem(); + editor->selectedEntities.clear(); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + sceneGraph.Traverse([&](SHSceneNode* nodePtr) + { + auto eid = nodePtr->GetEntityID(); + if(!startSelecting) + { + if(eid == beginEID || eid == endEID) + { + startSelecting = true; + editor->selectedEntities.push_back(eid); + } + } + else + { + if(!endSelecting) + { + editor->selectedEntities.push_back(eid); + if(eid == endEID || eid == beginEID) + { + endSelecting = true; + } + } + } + }); + } + + void SHCreateEntityCommand::Execute() + { + EntityID newEID = SHEntityManager::CreateEntity(eid); + if(eid == MAX_EID) + eid = newEID; + } + + void SHCreateEntityCommand::Undo() + { + SHEntityManager::DestroyEntity(eid); + } + + void SHEntityParentCommand::Execute() + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + for(auto const& eid : entities) + { + if(entityParentData[eid].newParentEID == MAX_EID) + sceneGraph.SetParent(eid, nullptr); + else + sceneGraph.SetParent(eid, entityParentData[eid].newParentEID); + } + } + + void SHEntityParentCommand::Undo() + { + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + for(auto const& eid : entities) + { + if(entityParentData[eid].oldParentEID == MAX_EID) + sceneGraph.SetParent(eid, nullptr); + else + sceneGraph.SetParent(eid, entityParentData[eid].oldParentEID); + } + } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 88983ca9..0cfe6474 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -10,7 +10,7 @@ #include "imgui_internal.h" #include "ECS_Base/SHECSMacros.h" #include "Editor/EditorWindow/SHEditorWindow.h" - +#include "Editor/Command/SHCommand.hpp" namespace SHADE { class SHSceneNode; @@ -28,8 +28,40 @@ namespace SHADE void DrawMenuBar() const noexcept; ImRect RecursivelyDrawEntityNode(SHSceneNode*); void CreateChildEntity(EntityID parentEID) const noexcept; + void ParentSelectedEntities(EntityID parentEID) const noexcept; + void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); std::string filter; bool isAnyNodeSelected = false; EntityID scrollTo = MAX_EID; };//class SHHierarchyPanel + + //Might move to a different file + class SHCreateEntityCommand final : public SHBaseCommand + { + public: + void Execute() override; + void Undo() override; + private: + EntityID eid = MAX_EID; + }; + + class SHEntityParentCommand final : public SHBaseCommand + { + public: + struct Data + { + EntityID oldParentEID = MAX_EID; + EntityID newParentEID = MAX_EID; + }; + using EntityParentData = std::unordered_map; + + SHEntityParentCommand(std::vector entityIDs, EntityParentData inEntityParentData):entities(entityIDs),entityParentData(inEntityParentData){} + + void Execute() override; + void Undo() override; + private: + std::vector entities; + std::unordered_map entityParentData; + }; + }//namespace SHADE From 7b7533420eca64a859209f782e3ef2689afb3a23 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 18 Oct 2022 01:12:03 +0800 Subject: [PATCH 361/793] WIP --- .../MiddleEnd/Interface/SHGraphicsConstants.h | 6 ++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 75 ++++++++++++++----- .../MiddleEnd/Interface/SHGraphicsSystem.h | 19 +++-- .../MiddleEnd/Interface/SHMousePickSystem.cpp | 3 + .../MiddleEnd/Interface/SHRenderer.cpp | 11 ++- .../Graphics/RenderGraph/SHRenderGraph.cpp | 15 ++-- .../src/Graphics/RenderGraph/SHRenderGraph.h | 3 +- .../RenderGraph/SHRenderGraphNode.cpp | 15 ++-- .../Graphics/RenderGraph/SHRenderGraphNode.h | 4 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 6 +- .../src/Graphics/RenderGraph/SHSubpass.h | 2 +- .../Graphics/Renderpass/SHVkRenderpass.cpp | 3 +- SHADE_Engine/src/Resource/SparseSet.h | 6 +- 13 files changed, 118 insertions(+), 50 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index ac2f1f8c..67cbc001 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -25,6 +25,12 @@ namespace SHADE struct SHGraphicsConstants { public: + struct RenderGraphIndices + { + static constexpr uint32_t WORLD = 0; + static constexpr uint32_t EDITOR = 0; + }; + struct DescriptorSetIndex { /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index d5a45cf7..929e5d54 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -119,7 +119,6 @@ namespace SHADE /*-----------------------------------------------------------------------*/ auto windowDims = window->GetWindowSize(); - SHGraphicsGlobalData::Init(device); // Set Up Cameras screenCamera = resourceManager.Create(); @@ -134,7 +133,7 @@ namespace SHADE defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); // Get render graph from default viewport world renderer - sceneRenderGraph = resourceManager.Create(); + worldRenderGraph = resourceManager.Create(); std::vector> renderContextCmdPools{ swapchain->GetNumImages() }; for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) @@ -143,35 +142,36 @@ namespace SHADE } // Initialize world render graph - sceneRenderGraph->Init(device, swapchain); - sceneRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); - sceneRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT }, windowDims.first, windowDims.second); - sceneRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - sceneRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->Init(device, swapchain); + //worldRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); + worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto node = sceneRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene" }, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Present", */"Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Entity ID"); + //gBufferWriteSubpass->AddColorOutput("Present"); gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); // We do this to just transition our scene layout to shader read auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); sceneLayoutTransitionSubpass->AddInput("Scene"); -#ifdef SHEDITOR - auto imguiNode = sceneRenderGraph->AddNode("ImGui Node", { "Present" }, { "G-Buffer" }); - auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); - imguiSubpass->AddColorOutput("Present"); -#endif +//#ifdef SHEDITOR +// auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, { "G-Buffer" }); +// auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); +// imguiSubpass->AddColorOutput("Present"); +//#endif // Generate world render graph - sceneRenderGraph->Generate(); + worldRenderGraph->Generate(); // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], sceneRenderGraph); + worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); @@ -192,8 +192,14 @@ namespace SHADE void SHGraphicsSystem::InitMiddleEnd(void) noexcept { + SHGraphicsGlobalData::Init(device); + InitSceneRenderGraph(); +#ifdef SHEDITOR + InitEditorRenderGraph(); +#endif + // Create Semaphore for (auto& semaHandle : graphSemaphores) { @@ -211,13 +217,45 @@ namespace SHADE for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); - mousePickSystem->Init(device, cmdPools, sceneRenderGraph->GetRenderGraphResource("Entity ID")); + mousePickSystem->Init(device, cmdPools, worldRenderGraph->GetRenderGraphResource("Entity ID")); // Register the post offscreen render to the system postOffscreenRender = resourceManager.Create(); - postOffscreenRender->Init(device, sceneRenderGraph->GetRenderGraphResource("Scene"), descPool); + postOffscreenRender->Init(device, worldRenderGraph->GetRenderGraphResource("Scene"), descPool); } +#ifdef SHEDITOR + void SHGraphicsSystem::InitEditorRenderGraph(void) noexcept + { + auto windowDims = window->GetWindowSize(); + + // Create Default Viewport + editorViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 1.0f)); + + // Get render graph from viewport editor renderer + editorRenderGraph = resourceManager.Create(); + + std::vector> renderContextCmdPools{ swapchain->GetNumImages() }; + for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) + renderContextCmdPools[i] = renderContext.GetFrameData(i).cmdPoolHdls[0]; + + editorRenderGraph->Init(device, swapchain); + editorRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); + + + auto imguiNode = editorRenderGraph->AddNode("ImGui Node", { "Present"}, {}); + auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); + imguiSubpass->AddColorOutput("Present"); + + // Generate world render graph + editorRenderGraph->Generate(); + + // Add world renderer to default viewport + editorRenderer = editorViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], editorRenderGraph); + editorRenderer->SetCamera(worldCamera); + } +#endif + /*---------------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*---------------------------------------------------------------------------------*/ @@ -664,7 +702,8 @@ namespace SHADE renderContext.HandleResize(); - sceneRenderGraph->HandleResize(resizeWidth, resizeHeight); + worldRenderGraph->HandleResize(resizeWidth, resizeHeight); + editorRenderGraph->HandleResize(windowDims.first, windowDims.second); mousePickSystem->HandleResize(); postOffscreenRender->HandleResize(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index e6739715..0e1e2f78 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -68,10 +68,14 @@ namespace SHADE class SH_API SHGraphicsSystem : public SHSystem { private: - void InitBoilerplate (void) noexcept; - void InitSceneRenderGraph(void) noexcept; - void InitMiddleEnd (void) noexcept; - void InitSubsystems (void) noexcept; + void InitBoilerplate (void) noexcept; + void InitSceneRenderGraph (void) noexcept; + void InitMiddleEnd (void) noexcept; + void InitSubsystems (void) noexcept; + +#ifdef SHEDITOR + void InitEditorRenderGraph (void) noexcept; +#endif public: class SH_API BeginRoutine final : public SHSystemRoutine @@ -277,6 +281,9 @@ namespace SHADE Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } Handle GetDefaultViewport() const {return defaultViewport;} +#ifdef SHEDITOR + Handle GetEditorViewport () const {return editorViewport;}; +#endif Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; //SHRenderGraph const& GetRenderGraph(void) const noexcept; @@ -306,7 +313,7 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - ResourceManager resourceManager; + ResourceManager resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHSamplerCache samplerCache; @@ -339,7 +346,7 @@ namespace SHADE // Temp Materials Handle defaultMaterial; - Handle sceneRenderGraph; + Handle worldRenderGraph; // Sub systems Handle mousePickSystem; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index e4ac92e5..1dd8212d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -62,7 +62,10 @@ namespace SHADE void SHMousePickSystem::HandleResize(void) noexcept { if (afterCopyFence) + { + afterCopyFence->Reset(); afterCopyFence.Free(); + } if (imageDataDstBuffer) imageDataDstBuffer.Free(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 14af56ee..425e9c81 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -75,12 +75,15 @@ namespace SHADE void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept { - cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); - cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); + if (camera) + { + cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); + cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); - std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; + std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; - cmdBuffer->BindDescriptorSet(cameraDescriptorSet, vk::PipelineBindPoint::eGraphics, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + cmdBuffer->BindDescriptorSet(cameraDescriptorSet, vk::PipelineBindPoint::eGraphics, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + } } void SHRenderer::UpdateCameraDataToBuffer(void) noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 51584300..98cb6709 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -57,7 +57,7 @@ namespace SHADE format = swapchainHdl->GetSurfaceFormatKHR().format; } - graphResources.try_emplace(resourceName, resourceManager.Create(logicalDeviceHdl, swapchainHdl, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); + graphResources.try_emplace(resourceName, resourceManager->Create(logicalDeviceHdl, swapchainHdl, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); } /***************************************************************************/ @@ -102,11 +102,11 @@ namespace SHADE resourceAttLayouts[input.attachment] = input.layout; } - for (uint32_t i = 0; i < node->attachmentDescriptions.size(); ++i) + for (uint32_t j = 0; j < node->attachmentDescriptions.size(); ++j) { - auto& att = node->attachmentDescriptions[i]; + auto& att = node->attachmentDescriptions[j]; att.initialLayout = vk::ImageLayout::eUndefined; - att.finalLayout = resourceAttLayouts[i]; + att.finalLayout = resourceAttLayouts[j]; } ++i; } @@ -365,10 +365,9 @@ namespace SHADE , swapchainHdl{ } , nodes{} , graphResources{} - , resourceManager{} - + , resourceManager{nullptr} { - + resourceManager = std::make_shared(); } SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept @@ -457,7 +456,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager.Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(descInitParams), std::move(predecessors), &graphResources)); + nodes.emplace_back(resourceManager->Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(descInitParams), std::move(predecessors), &graphResources)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 8eb458aa..952c6d8f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -16,6 +16,7 @@ #include #include +#include namespace SHADE { @@ -70,7 +71,7 @@ namespace SHADE std::unordered_map> graphResources; //! Resource library for graph handles - ResourceManager resourceManager; + std::shared_ptr resourceManager; public: /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 0ff8fe96..ec184386 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -104,7 +104,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} @@ -162,7 +162,7 @@ namespace SHADE } SHRenderGraphNode::SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept - : resourceManager{ rhs.resourceManager } + : resourceManager{ std::move (rhs.resourceManager) } , logicalDeviceHdl{ rhs.logicalDeviceHdl } , renderpass{ rhs.renderpass } , framebuffers{ std::move(rhs.framebuffers) } @@ -177,6 +177,8 @@ namespace SHADE , ptrToResources{ rhs.ptrToResources } , pipelineLibrary{ std::move(rhs.pipelineLibrary) } , batcher{ std::move(rhs.batcher) } + , spDescs{ std::move(rhs.spDescs) } + , spDeps{ std::move(rhs.spDeps) } { rhs.renderpass = {}; @@ -187,7 +189,7 @@ namespace SHADE if (&rhs == this) return *this; - resourceManager = rhs.resourceManager; + resourceManager = std::move(rhs.resourceManager); logicalDeviceHdl = rhs.logicalDeviceHdl; renderpass = rhs.renderpass; framebuffers = std::move(rhs.framebuffers); @@ -200,6 +202,9 @@ namespace SHADE ptrToResources = std::move(rhs.ptrToResources); pipelineLibrary = std::move(rhs.pipelineLibrary); batcher = std::move(rhs.batcher); + spDescs = std::move(rhs.spDescs); + spDeps = std::move(rhs.spDeps); + rhs.renderpass = {}; @@ -230,10 +235,10 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager.Create(resourceManager, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(resourceManager->Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); - subpass->Init(resourceManager); + subpass->Init(*resourceManager); // Register the SuperBatch batcher.RegisterSuperBatch(subpass->GetSuperBatch()); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index f36e7622..77861108 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -26,7 +26,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - ResourceManager& resourceManager; + std::shared_ptr resourceManager; //! For Vulkan object creation Handle logicalDeviceHdl; @@ -88,7 +88,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(ResourceManager& rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 6afbfb09..ffbe4ff0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -23,7 +23,7 @@ namespace SHADE */ /***************************************************************************/ - SHSubpass::SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHSubpass::SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } @@ -55,6 +55,8 @@ namespace SHADE , inputReferences{ std::move(rhs.inputReferences) } , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } , ptrToResources{ rhs.ptrToResources } + , descriptorSetLayout{ rhs.descriptorSetLayout } + , exteriorDrawCalls{ std::move (rhs.exteriorDrawCalls) } { } @@ -83,6 +85,8 @@ namespace SHADE inputReferences = std::move(rhs.inputReferences); resourceAttachmentMapping = rhs.resourceAttachmentMapping; ptrToResources = rhs.ptrToResources; + descriptorSetLayout = rhs.descriptorSetLayout; + exteriorDrawCalls = std::move(rhs.exteriorDrawCalls); return *this; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index 2e883ebc..c567a897 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -62,7 +62,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHSubpass(ResourceManager& rm, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp index fee23f13..74128ec8 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp @@ -253,7 +253,8 @@ namespace SHADE SHVkRenderpass::~SHVkRenderpass(void) noexcept { - logicalDeviceHdl->GetVkLogicalDevice().destroyRenderPass(vkRenderpass, nullptr); + if (vkRenderpass) + logicalDeviceHdl->GetVkLogicalDevice().destroyRenderPass(vkRenderpass, nullptr); } diff --git a/SHADE_Engine/src/Resource/SparseSet.h b/SHADE_Engine/src/Resource/SparseSet.h index 8a3f9c6e..fb4a8311 100644 --- a/SHADE_Engine/src/Resource/SparseSet.h +++ b/SHADE_Engine/src/Resource/SparseSet.h @@ -59,9 +59,9 @@ namespace SHADE SparseSet(); ~SparseSet() = default; - // Disallow moving or copying - SparseSet(const SparseSet&) = delete; - SparseSet(SparseSet&&) = delete; + //// Disallow moving or copying + //SparseSet(const SparseSet&) = delete; + //SparseSet(SparseSet&&) = delete; /*-----------------------------------------------------------------------------*/ /* Usage Functions */ From e76bc6ef58985f524c65cede1f1e8f82923a8b70 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 18 Oct 2022 02:41:27 +0800 Subject: [PATCH 362/793] World render graph now doesn't render to swapchain image. world render graph now only renders to "Scene" resource. Editor render graph renders to "Present" swapchain image. Removed some unnecessary if statements slowing down the resizing Printing for success also disabled for now --- .../Graphics/Debugging/SHVulkanDebugUtil.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 34 ++++++------------- .../MiddleEnd/PerFrame/SHRenderContext.cpp | 1 - 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp b/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp index c8a1fe1a..fd39da24 100644 --- a/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp +++ b/SHADE_Engine/src/Graphics/Debugging/SHVulkanDebugUtil.cpp @@ -99,7 +99,7 @@ namespace SHADE void SHVulkanDebugUtil::ReportVkSuccess(std::string_view message) noexcept { - SHLOGV_INFO(message); + //SHLOGV_INFO(message); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 929e5d54..c78cc58f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -143,30 +143,22 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - //worldRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto node = worldRenderGraph->AddNode("G-Buffer", { /*"Present", */"Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); gBufferWriteSubpass->AddColorOutput("Scene"); gBufferWriteSubpass->AddColorOutput("Entity ID"); - //gBufferWriteSubpass->AddColorOutput("Present"); gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); // We do this to just transition our scene layout to shader read auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); sceneLayoutTransitionSubpass->AddInput("Scene"); -//#ifdef SHEDITOR -// auto imguiNode = worldRenderGraph->AddNode("ImGui Node", { "Present" }, { "G-Buffer" }); -// auto imguiSubpass = imguiNode->AddSubpass("ImGui Draw"); -// imguiSubpass->AddColorOutput("Present"); -//#endif - // Generate world render graph worldRenderGraph->Generate(); @@ -297,12 +289,6 @@ namespace SHADE if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; - if (renderContext.GetResized()) - { - return; - } - - // Frame data for the current frame auto const& frameData = renderContext.GetCurrentFrameData(); uint32_t frameIndex = renderContext.GetCurrentFrame(); @@ -463,12 +449,6 @@ namespace SHADE if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; - if (renderContext.GetResized()) - { - return; - } - - const uint32_t CURR_FRAME_IDX = renderContext.GetCurrentFrame(); auto& currFrameData = renderContext.GetCurrentFrameData(); @@ -480,9 +460,7 @@ namespace SHADE // If swapchain is incompatible/outdated if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR) { - HandleResize(); - } } @@ -692,9 +670,14 @@ namespace SHADE void SHGraphicsSystem::HandleResize(void) noexcept { + device->WaitIdle(); + if (window->IsMinimized() || renderContext.GetWindowIsDead()) return; + graphSemaphores[0].Free(); + graphSemaphores[1].Free(); + auto windowDims = window->GetWindowSize(); // Resize the swapchain @@ -712,6 +695,11 @@ namespace SHADE defaultViewport->SetHeight(static_cast(resizeHeight)); worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); + + for (auto& semaHandle : graphSemaphores) + semaHandle = device->CreateSemaphore(); + + } void SHGraphicsSystem::AwaitGraphicsExecution() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp index 0ac7013a..8041adfd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp @@ -52,7 +52,6 @@ namespace SHADE { frameData[i].cmdPoolHdls.push_back(logicalDeviceHdl->CreateCommandPool(params.cmdPoolQueueFamilyType, params.cmdPoolResetMode, params.cmdBufferTransient)); } - } // Initialize all the info. From 033ba48304bd51152fcb1e32312796b354808f3c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 18 Oct 2022 15:04:25 +0800 Subject: [PATCH 363/793] Editor changes to support viewport integration --- Assets/Editor/Layouts/Default.ini | 48 ++++ Assets/Editor/Layouts/UserLayout.ini | 48 ++++ .../HierarchyPanel/SHHierarchyPanel.cpp | 31 ++- .../HierarchyPanel/SHHierarchyPanel.h | 2 + .../Inspector/SHEditorComponentView.hpp | 9 +- .../Inspector/SHEditorInspector.cpp | 2 +- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 88 +++++-- .../EditorWindow/MenuBar/SHEditorMenuBar.h | 1 + .../Profiling/SHEditorProfiler.cpp | 2 +- .../Editor/EditorWindow/SHEditorWindow.cpp | 26 +- .../src/Editor/EditorWindow/SHEditorWindow.h | 9 +- .../EditorWindow/SHEditorWindowIncludes.h | 3 +- .../ViewportWindow/SHEditorViewport.cpp | 60 +++++ .../ViewportWindow/SHEditorViewport.h | 29 +++ SHADE_Engine/src/Editor/SHEditor.cpp | 244 +++++++++++------- SHADE_Engine/src/Editor/SHEditor.hpp | 21 +- 16 files changed, 492 insertions(+), 131 deletions(-) create mode 100644 Assets/Editor/Layouts/Default.ini create mode 100644 Assets/Editor/Layouts/UserLayout.ini create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h diff --git a/Assets/Editor/Layouts/Default.ini b/Assets/Editor/Layouts/Default.ini new file mode 100644 index 00000000..4ddc46c2 --- /dev/null +++ b/Assets/Editor/Layouts/Default.ini @@ -0,0 +1,48 @@ +[Window][MainStatusBar] +Pos=0,1060 +Size=1920,20 +Collapsed=0 + +[Window][SHEditorMenuBar] +Pos=0,24 +Size=1920,1036 +Collapsed=0 + +[Window][Hierarchy Panel] +Pos=0,120 +Size=225,940 +Collapsed=0 +DockId=0x00000004,0 + +[Window][Debug##Default] +Pos=60,60 +Size=400,400 +Collapsed=0 + +[Window][Inspector] +Pos=1686,24 +Size=234,1036 +Collapsed=0 +DockId=0x00000006,0 + +[Window][Profiler] +Pos=0,24 +Size=225,94 +Collapsed=0 +DockId=0x00000003,0 + +[Window][Viewport] +Pos=227,24 +Size=1457,1036 +Collapsed=0 +DockId=0x00000002,0 + +[Docking][Data] +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,55 Size=1920,1036 Split=X + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1684,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=225,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1293,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=234,1036 Selected=0xE7039252 + diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini new file mode 100644 index 00000000..869da91a --- /dev/null +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -0,0 +1,48 @@ +[Window][MainStatusBar] +Pos=0,1167 +Size=2314,20 +Collapsed=0 + +[Window][SHEditorMenuBar] +Pos=0,48 +Size=2314,1119 +Collapsed=0 + +[Window][Hierarchy Panel] +Pos=0,152 +Size=208,1015 +Collapsed=0 +DockId=0x00000004,0 + +[Window][Debug##Default] +Pos=60,60 +Size=400,400 +Collapsed=0 + +[Window][Inspector] +Pos=2044,48 +Size=270,1119 +Collapsed=0 +DockId=0x00000006,0 + +[Window][Profiler] +Pos=0,48 +Size=208,102 +Collapsed=0 +DockId=0x00000003,0 + +[Window][Viewport] +Pos=210,48 +Size=1832,1119 +Collapsed=0 +DockId=0x00000002,0 + +[Docking][Data] +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=-7,358 Size=2314,1119 Split=X + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=2042,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=208,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1832,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=270,1036 Selected=0xE7039252 + diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 0f25175f..42c9da66 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -66,8 +66,8 @@ namespace SHADE editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - ImGui::End(); } + ImGui::End(); } void SHHierarchyPanel::Exit() @@ -75,6 +75,11 @@ namespace SHADE SHEditorWindow::Exit(); } + void SHHierarchyPanel::SetScrollTo(EntityID eid) + { + scrollTo = eid; + } + //#==============================================================# //|| Private Member Functions || //#==============================================================# @@ -82,7 +87,20 @@ namespace SHADE { if (ImGui::BeginMenuBar()) { - if (ImGui::SmallButton(ICON_MD_ADD)) + + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 35.0f); + if(ImGui::SmallButton(ICON_MD_DESELECT)) + { + auto editor = SHSystemManager::GetSystem(); + editor->selectedEntities.clear(); + } + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Clear Selections"); + ImGui::EndTooltip(); + } + if (ImGui::SmallButton(ICON_MD_ADD_CIRCLE)) { SHEntityManager::CreateEntity(); } @@ -103,6 +121,13 @@ namespace SHADE //Get node data (Children, eid, selected) auto& children = currentNode->GetChildren(); EntityID eid = currentNode->GetEntityID(); + + if(scrollTo != MAX_EID && eid == scrollTo) + { + ImGui::SetScrollHereY(); + scrollTo = MAX_EID; + } + auto editor = SHSystemManager::GetSystem(); const bool isSelected = (std::ranges::find(editor->selectedEntities, eid) != editor->selectedEntities.end()); @@ -157,7 +182,7 @@ namespace SHADE } ImGui::EndPopup(); } - + //Handle node selection if (ImGui::IsItemHovered()) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 78e445fd..88983ca9 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -23,11 +23,13 @@ namespace SHADE void Init() override; void Update() override; void Exit() override; + void SetScrollTo(EntityID eid); private: void DrawMenuBar() const noexcept; ImRect RecursivelyDrawEntityNode(SHSceneNode*); void CreateChildEntity(EntityID parentEID) const noexcept; std::string filter; bool isAnyNodeSelected = false; + EntityID scrollTo = MAX_EID; };//class SHHierarchyPanel }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 93f6984e..47fec730 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -207,8 +207,10 @@ namespace SHADE auto& colliders = component->GetColliders(); int const size = static_cast(colliders.size()); ImGui::BeginChild("Colliders", {0.0f, colliders.empty() ? 1.0f : 250.0f}, true); + std::optional colliderToDelete{std::nullopt}; for (int i{}; i < size; ++i) { + ImGui::PushID(i); SHCollider& collider = component->GetCollider(i); auto cursorPos = ImGui::GetCursorPos(); @@ -235,9 +237,14 @@ namespace SHADE } if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) { - component->RemoveCollider(i); + colliderToDelete = i; } SHEditorWidgets::EndPanel(); + ImGui::PopID(); + } + if(colliderToDelete.has_value()) + { + component->RemoveCollider(colliderToDelete.value()); } ImGui::EndChild(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index a9b1c724..da09f345 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -99,8 +99,8 @@ namespace SHADE } } - ImGui::End(); } + ImGui::End(); } void SHEditorInspector::Exit() diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index a49af994..3cb6561d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -36,6 +36,11 @@ namespace SHADE void SHEditorMenuBar::Init() { SHEditorWindow::Init(); + constexpr std::string_view path = "../../Assets/Editor/Layouts"; + for(auto const& entry : std::filesystem::directory_iterator(path)) + { + layoutPaths.push_back(entry.path()); + } } void SHEditorMenuBar::Update() @@ -87,20 +92,6 @@ namespace SHADE ImGui::EndDisabled(); ImGui::EndMenu(); } - if(ImGui::BeginMenu("Theme")) - { - auto styles = rttr::type::get().get_enumeration(); - auto values = styles.get_values(); - for (auto style : values) - { - if(ImGui::Selectable(style.to_string().c_str())) - { - if(auto editor = SHSystemManager::GetSystem()) - editor->SetStyle(style.convert()); - } - } - ImGui::EndMenu(); - } if (ImGui::BeginMenu("Scripts")) { if (ImGui::Selectable("Generate Visual Studio Project")) @@ -120,18 +111,79 @@ namespace SHADE } ImGui::EndMenu(); } + + if (ImGui::BeginMenu("Window")) + { + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + if (window.get() != this) + ImGui::Checkbox(window->windowName.data(), &window->isOpen); + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Theme")) + { + const auto styles = rttr::type::get().get_enumeration(); + auto values = styles.get_values(); + for (auto style : values) + { + if (ImGui::Selectable(style.to_string().c_str())) + { + if (auto editor = SHSystemManager::GetSystem()) + editor->SetStyle(style.convert()); + } + } + ImGui::EndMenu(); + } + if(ImGui::BeginMenu("Layout")) + { + for(auto const& entry : layoutPaths) + { + if(ImGui::Selectable(entry.stem().string().c_str())) + { + ImGui::LoadIniSettingsFromDisk(entry.string().c_str()); + } + } + ImGui::EndMenu(); + } ImGui::EndMainMenuBar(); } - const ImGuiID dockspace_id = ImGui::GetID("DockSpace"); - ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspaceFlags); + const ImGuiID dockspaceId = ImGui::GetID("DockSpace"); + ImGui::DockSpace(dockspaceId, ImVec2(0.0f, 0.0f), dockspaceFlags); ImGui::End(); } } void SHEditorMenuBar::DrawSecondaryBar() const noexcept { - + ImGuiViewport* viewport = ImGui::GetMainViewport(); + if(ImGui::BeginViewportSideBar("##SecondaryMenuBar", viewport, ImGuiDir_Up, ImGui::GetFrameHeight(), ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_MenuBar)) + { + ImGui::BeginMenuBar(); + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x * 0.5f - 80.f); + const auto editor = SHSystemManager::GetSystem(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY); + if(ImGui::SmallButton(ICON_MD_PLAY_ARROW)) + { + editor->editorState = SHEditor::State::PLAY; + } + ImGui::EndDisabled(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); + if(ImGui::SmallButton(ICON_MD_PAUSE)) + { + editor->editorState = SHEditor::State::PAUSE; + } + ImGui::EndDisabled(); + ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP); + if(ImGui::SmallButton(ICON_MD_STOP)) + { + editor->editorState = SHEditor::State::STOP; + } + ImGui::EndDisabled(); + ImGui::EndMenuBar(); + } + ImGui::End(); } void SHEditorMenuBar::DrawStatusBar() const noexcept @@ -142,8 +194,8 @@ namespace SHADE if (ImGui::BeginViewportSideBar("MainStatusBar", ImGui::GetMainViewport(), ImGuiDir_Down, menuBarHeight, editorMenuBarFlags)) { ImGui::Text("Entity count: "); - ImGui::End(); } + ImGui::End(); ImGui::PopStyleVar(3); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h index 616ba43e..7cbcd696 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h @@ -18,5 +18,6 @@ namespace SHADE void DrawSecondaryBar() const noexcept; void DrawStatusBar() const noexcept; float menuBarHeight = 20.0f; + std::vector layoutPaths; };//class SHEditorMenuBar }//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp index 4b36fe5d..ef2ff8c0 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Profiling/SHEditorProfiler.cpp @@ -37,8 +37,8 @@ namespace SHADE if(Begin()) { ImGui::PlotLines("DT", frames.data(), static_cast(frames.size()), 0, nullptr, 0.0f, 16.0f); - ImGui::End(); } + ImGui::End(); } void SHEditorProfiler::Exit() diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index 2e2c820c..491c1bc2 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -19,7 +19,7 @@ namespace SHADE //|| Public Member Functions || //#==============================================================# SHEditorWindow::SHEditorWindow(std::string_view const& name, ImGuiWindowFlags const& inFlags) - : isOpen(true), windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) + : windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) { } @@ -40,7 +40,29 @@ namespace SHADE //#==============================================================# bool SHEditorWindow::Begin() { - return ImGui::Begin(windowName.data(), &isOpen, windowFlags); + bool result = ImGui::Begin(windowName.data(), &isOpen, windowFlags); + + auto wndSize = ImGui::GetWindowSize(); + if(windowSize.x != wndSize.x || windowSize.y != wndSize.y) + { + windowSize = {wndSize.x, wndSize.y}; + OnResize(); + } + auto wndPos = ImGui::GetWindowPos(); + if(windowPos.x != wndPos.x || windowPos.y != wndPos.y) + { + windowPos = {wndPos.x, wndPos.y}; + OnPosChange(); + } + return result; + } + + void SHEditorWindow::OnResize() + { + } + + void SHEditorWindow::OnPosChange() + { } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index 244ef677..3e7a2a5c 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -5,6 +5,8 @@ //#==============================================================# #include +#include "Math/Vector/SHVec2.h" + //#==============================================================# //|| Forward Declarations || //#==============================================================# @@ -21,11 +23,16 @@ namespace SHADE virtual void Init(); virtual void Update(); virtual void Exit(); - bool isOpen = false; + bool isOpen; std::string_view windowName; protected: virtual bool Begin(); + virtual void OnResize(); + virtual void OnPosChange(); + ImGuiWindowFlags windowFlags = 0; ImGuiIO& io; + SHVec2 windowSize; + SHVec2 windowPos; };//class SHEditorWindow }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index d1ebfbf4..f0267b06 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -2,4 +2,5 @@ #include "MenuBar/SHEditorMenuBar.h" //Menu Bar #include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel #include "Inspector/SHEditorInspector.h" //Inspector -#include "Profiling/SHEditorProfiler.h" //Profiler \ No newline at end of file +#include "Profiling/SHEditorProfiler.h" //Profiler +#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp new file mode 100644 index 00000000..c903a80f --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -0,0 +1,60 @@ +#include "SHpch.h" +#include "SHEditorViewport.h" + +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" + +namespace SHADE +{ + SHEditorViewport::SHEditorViewport() + :SHEditorWindow("Viewport", ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar) + { + } + + void SHEditorViewport::Init() + { + SHEditorWindow::Init(); + + } + + void SHEditorViewport::Update() + { + SHEditorWindow::Update(); + if(Begin()) + { + DrawMenuBar(); + auto gfxSystem = SHSystemManager::GetSystem(); + auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; + ImGui::Image((ImTextureID)descriptorSet, ImGui::GetWindowSize()); + } + ImGui::End(); + } + + void SHEditorViewport::Exit() + { + SHEditorWindow::Exit(); + } + + void SHEditorViewport::OnResize() + { + SHEditorWindow::OnResize(); + //Get graphics system to resize swapchain image + auto gfxSystem = SHSystemManager::GetSystem(); + + gfxSystem->PrepareResize(static_cast(windowSize.x), static_cast(windowSize.y)); + } + + void SHEditorViewport::OnPosChange() + { + SHEditorWindow::OnPosChange(); + } + + void SHEditorViewport::DrawMenuBar() const noexcept + { + if(ImGui::BeginMenuBar()) + { + ImGui::EndMenuBar(); + } + } +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h new file mode 100644 index 00000000..5f4a5919 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -0,0 +1,29 @@ +#pragma once +//#==============================================================# +//|| Library Includes || +//#==============================================================# +#include + +//#==============================================================# +//|| SHADE Includes || +//#==============================================================# +#include "imgui_internal.h" +#include "ECS_Base/SHECSMacros.h" +#include "Editor/EditorWindow/SHEditorWindow.h" + +namespace SHADE +{ + class SHEditorViewport final : public SHEditorWindow + { + public: + SHEditorViewport(); + void Init() override; + void Update() override; + void Exit() override; + protected: + void OnResize() override; + void OnPosChange() override; + private: + void DrawMenuBar() const noexcept; + };//class SHEditorViewport +}//namespace SHADE diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index d9fc8373..4c6caff0 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -43,6 +43,8 @@ #include #include +#include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" + RTTR_REGISTRATION { using namespace SHADE; @@ -73,6 +75,7 @@ namespace SHADE //#==============================================================# void SHEditor::Init() { + IMGUI_CHECKVERSION(); if(auto context = ImGui::CreateContext()) { @@ -82,11 +85,21 @@ namespace SHADE } } - ImGuiIO& io = ImGui::GetIO(); (void)io; + //Add editor windows + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking + io = &ImGui::GetIO(); + + io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports + io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking + io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; + + InitLayout(); InitFonts(); @@ -98,11 +111,11 @@ namespace SHADE SetStyle(Style::SHADE); - //Add editor windows - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); + + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + window->Init(); + } SHLOG_INFO("Successfully initialised SHADE Engine Editor") } @@ -116,7 +129,7 @@ namespace SHADE if(window->isOpen) window->Update(); } - + if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { SHCommandManager::RedoCommand(); @@ -125,36 +138,46 @@ namespace SHADE { SHCommandManager::UndoCommand(); } - - + Render(); } void SHEditor::Render() { ImGui::Render(); - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + if (io->ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); } } + void SHEditor::InitLayout() noexcept + { + if(!std::filesystem::exists(io->IniFilename)) + { + std::filesystem::copy_file("../../Assets/Editor/Layouts/Default.ini", io->IniFilename); + } + //eventually load preferred layout here + } + void SHEditor::InitFonts() noexcept { - ImGuiIO& io = ImGui::GetIO(); - ImFont* mainFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path - static const ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; + constexpr ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; - ImFont* UIFont = io.Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path + ImFont* UIFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path - io.Fonts->Build(); + io->Fonts->Build(); } void SHEditor::Exit() { + for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) + { + window->Init(); + } ImGui_ImplVulkan_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); @@ -167,86 +190,86 @@ namespace SHADE default: case Style::SHADE: { - ImGuiStyle& imStyle = ImGui::GetStyle(); - ImVec4* colors = imStyle.Colors; - colors[ImGuiCol_Text] = ImVec4(0.706f, 0.729f, 0.757f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.172f, 0.184f, 0.203f, 1.f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); - colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); - colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_TitleBg] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TitleBgActive] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TitleBgCollapsed] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_MenuBarBg] = ImVec4(0.129f, 0.141f, 0.157f, 1.f); - colors[ImGuiCol_ScrollbarBg] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); - colors[ImGuiCol_CheckMark] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); - colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); - colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.15f, 0.15f, 0.54f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); - colors[ImGuiCol_Separator] = colors[ImGuiCol_MenuBarBg]; - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); - colors[ImGuiCol_Tab] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); - colors[ImGuiCol_TabActive] = ImVec4(0.14f, 0.14f, 0.14f, 0.8f); - colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_WindowBg]; - colors[ImGuiCol_DockingPreview] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); - colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.855f, 0.6f, 0.941f, 1.00f); - colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); - colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); - colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); - colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); - colors[ImGuiCol_NavHighlight] = ImVec4(0.73f, 0.73f, 0.73f, 0.7f); + ImGuiStyle& imStyle = ImGui::GetStyle(); + ImVec4* colors = imStyle.Colors; + colors[ImGuiCol_Text] = ImVec4(0.706f, 0.729f, 0.757f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.172f, 0.184f, 0.203f, 1.f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); + colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); + colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_TitleBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TitleBgCollapsed] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_MenuBarBg] = ImVec4(0.129f, 0.141f, 0.157f, 1.f); + colors[ImGuiCol_ScrollbarBg] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_CheckMark] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.15f, 0.15f, 0.54f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); + colors[ImGuiCol_Separator] = colors[ImGuiCol_MenuBarBg]; + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_Tab] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_TabActive] = ImVec4(0.14f, 0.14f, 0.14f, 0.8f); + colors[ImGuiCol_TabUnfocused] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_TabUnfocusedActive] = colors[ImGuiCol_WindowBg]; + colors[ImGuiCol_DockingPreview] = ImVec4(0.627f, 0.239f, 0.761f, 1.00f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.855f, 0.6f, 0.941f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.73f, 0.73f, 0.73f, 0.7f); colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.141f, 0.141f, 0.141f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = colors[ImGuiCol_NavHighlight]; - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.2f, 0.2f, 0.2f, 0.65f); + colors[ImGuiCol_NavWindowingDimBg] = colors[ImGuiCol_NavHighlight]; + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.2f, 0.2f, 0.2f, 0.65f); - imStyle.WindowPadding = ImVec2(8.00f, 8.00f); - imStyle.FramePadding = ImVec2(5.00f, 2.00f); - imStyle.CellPadding = ImVec2(6.00f, 8.00f); - imStyle.ItemSpacing = ImVec2(6.00f, 6.00f); - imStyle.ItemInnerSpacing = ImVec2(6.00f, 6.00f); - imStyle.TouchExtraPadding = ImVec2(0.00f, 0.00f); - imStyle.IndentSpacing = 25; - imStyle.ScrollbarSize = 15; - imStyle.GrabMinSize = 10; - imStyle.WindowBorderSize = 0.6f; - imStyle.ChildBorderSize = 1; - imStyle.PopupBorderSize = 1; - imStyle.FrameBorderSize = 1; - imStyle.TabBorderSize = 1; - imStyle.WindowRounding = 7; - imStyle.ChildRounding = 4; - imStyle.FrameRounding = 3; - imStyle.PopupRounding = 4; - imStyle.ScrollbarRounding = 9; - imStyle.GrabRounding = 3; - imStyle.LogSliderDeadzone = 4; - imStyle.TabRounding = 4; + imStyle.WindowPadding = ImVec2(8.00f, 8.00f); + imStyle.FramePadding = ImVec2(5.00f, 2.00f); + imStyle.CellPadding = ImVec2(6.00f, 8.00f); + imStyle.ItemSpacing = ImVec2(6.00f, 6.00f); + imStyle.ItemInnerSpacing = ImVec2(6.00f, 6.00f); + imStyle.TouchExtraPadding = ImVec2(0.00f, 0.00f); + imStyle.IndentSpacing = 25; + imStyle.ScrollbarSize = 15; + imStyle.GrabMinSize = 10; + imStyle.WindowBorderSize = 0.6f; + imStyle.ChildBorderSize = 1; + imStyle.PopupBorderSize = 1; + imStyle.FrameBorderSize = 1; + imStyle.TabBorderSize = 1; + imStyle.WindowRounding = 7; + imStyle.ChildRounding = 4; + imStyle.FrameRounding = 3; + imStyle.PopupRounding = 4; + imStyle.ScrollbarRounding = 9; + imStyle.GrabRounding = 3; + imStyle.LogSliderDeadzone = 4; + imStyle.TabRounding = 4; imStyle.WindowMenuButtonPosition = ImGuiDir_None; } break; @@ -281,10 +304,11 @@ namespace SHADE imguiCommandPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); imguiCommandBuffer = imguiCommandPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - auto const& renderers = gfxSystem->GetDefaultViewport()->GetRenderers(); + //auto const& renderers = gfxSystem->GetDefaultViewport()->GetRenderers(); + auto const& renderers = gfxSystem->GetEditorViewport()->GetRenderers(); SHASSERT(!renderers.empty(), "No Renderers available") - auto renderGraph = renderers[0]->GetRenderGraph(); + auto renderGraph = renderers[SHGraphicsConstants::RenderGraphIndices::EDITOR]->GetRenderGraph(); auto renderPass = renderGraph->GetNode("ImGui Node")->GetRenderpass(); if(ImGui_ImplVulkan_Init(&initInfo, renderPass->GetVkRenderpass()) == false) @@ -309,6 +333,28 @@ namespace SHADE }); } + void SHEditor::PollPicking() + { + if (auto gfxSystem = SHSystemManager::GetSystem()) + { + if (!ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + EntityID pickedEID = gfxSystem->GetMousePickSystem()->GetPickedEntity(); + if(pickedEID == MAX_EID) + return; + if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + { + if (const auto hierarchyPanel = SHEditorWindowManager::GetEditorWindow()) + { + hierarchyPanel->SetScrollTo(pickedEID); + } + selectedEntities.clear(); + } + selectedEntities.push_back(pickedEID); + } + } + } + void SHEditor::NewFrame() { SDL_Event event; diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index d579a9b5..baa6324e 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -90,11 +90,11 @@ namespace SHADE return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); } + static EditorWindowMap editorWindows; private: // Number of windows; used for Editor Window ID Generation static EditorWindowID windowCount; // Map of Editor Windows - static EditorWindowMap editorWindows; friend class SHEditor; }; @@ -110,10 +110,17 @@ namespace SHADE class SH_API EditorRoutine final : public SHSystemRoutine { public: - EditorRoutine() = default; + EditorRoutine():SHSystemRoutine("Editor routine", true) {}; void Execute(double dt) noexcept override final; }; + enum class State : uint8_t + { + PLAY, + PAUSE, + STOP + }; + /** * @brief Style options * @@ -162,9 +169,13 @@ namespace SHADE void SetSDLWindow(SDL_Window* inSDLWindow){sdlWindow = inSDLWindow;}; + void PollPicking(); + // List of selected entities std::vector selectedEntities; + State editorState = State::STOP; + private: /** * @brief Start new frame for editor @@ -177,7 +188,7 @@ namespace SHADE */ void Render(); - + void InitLayout() noexcept; void InitFonts() noexcept; @@ -186,6 +197,8 @@ namespace SHADE // Handle to command buffer used for ImGui Vulkan Backend Handle imguiCommandBuffer; - SDL_Window* sdlWindow; + SDL_Window* sdlWindow {nullptr}; + + ImGuiIO* io{nullptr}; };//class SHEditor }//namespace SHADE From a221cfc1cde720a123ae2c959ff2e1bcc11c131e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 18 Oct 2022 17:25:45 +0800 Subject: [PATCH 364/793] Modified SHScriptEngine's serialization functions to take in EntityID instead of SHEntity --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 8 ++++---- SHADE_Engine/src/Scripting/SHScriptEngine.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 65f445a6..d7a090a4 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -115,7 +115,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - std::string SHScriptEngine::SerialiseScripts(const SHEntity& entity) const + std::string SHScriptEngine::SerialiseScripts(EntityID entity) const { // Create buffer needed to store serialised script data constexpr int BUFFER_SIZE = 10240; @@ -124,7 +124,7 @@ namespace SHADE // Attempt to serialise the script std::string result; - if (csScriptsSerialise(entity.GetEID(), buffer.get(), BUFFER_SIZE)) + if (csScriptsSerialise(entity, buffer.get(), BUFFER_SIZE)) { result = std::string(buffer.get()); } @@ -140,9 +140,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*-----------------------------------------------------------------------------------*/ - void SHScriptEngine::DeserialiseScript(const SHEntity& entity, const std::string& yaml) const + void SHScriptEngine::DeserialiseScript(EntityID entity, const std::string& yaml) const { - csScriptDeserialise(entity.GetEID(), yaml.c_str()); + csScriptDeserialise(entity, yaml.c_str()); } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 239d6b90..60723425 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -148,7 +148,7 @@ namespace SHADE /// /// String that represents the set of scripts attached to the specified Entity. /// - std::string SerialiseScripts(const SHEntity& entity) const; + std::string SerialiseScripts(EntityID entity) const; /// /// Loads the specified JSON string and creates a Script for the specified Entity /// based on the specified JSON string. @@ -157,7 +157,7 @@ namespace SHADE /// /// The YAML string that represents the Script to load into the Entity. /// - void DeserialiseScript(const SHEntity& entity, const std::string& yaml) const; + void DeserialiseScript(EntityID entity, const std::string& yaml) const; /*-----------------------------------------------------------------------------*/ /* Script Editor Functions */ From 9ce5a4a47bb6031d75db0e7f19241b2797d47ff0 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 18 Oct 2022 17:41:14 +0800 Subject: [PATCH 365/793] Mouse picking system now uses cursor returned from editor - This new cursor position is relative to where the viewport is rendering - Window resize callback in Graphics system now checks if editor is enabled before signaling for resize. This is because editor will handle the signaling for resizing when its enabled. When its disabled, the graphics system will signal itself to resize when the window resize callback is called. --- Assets/Editor/Layouts/UserLayout.ini | 30 +++++++++---------- .../src/Editor/EditorWindow/SHEditorWindow.h | 1 + .../ViewportWindow/SHEditorViewport.cpp | 11 +++++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 18 +++++++---- .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +-- .../MiddleEnd/Interface/SHMousePickSystem.cpp | 14 +++++---- .../MiddleEnd/Interface/SHMousePickSystem.h | 7 +++++ .../MiddleEnd/Interface/SHViewport.cpp | 10 +++++++ .../Graphics/MiddleEnd/Interface/SHViewport.h | 2 ++ 9 files changed, 70 insertions(+), 27 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 869da91a..e55aeb81 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1167 -Size=2314,20 +Pos=0,1060 +Size=1920,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=2314,1119 +Size=1920,1012 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,152 -Size=208,1015 +Pos=0,142 +Size=321,918 Collapsed=0 DockId=0x00000004,0 @@ -20,29 +20,29 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=2044,48 -Size=270,1119 +Pos=1649,48 +Size=271,1012 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=208,102 +Size=321,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=210,48 -Size=1832,1119 +Pos=323,48 +Size=1324,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=-7,358 Size=2314,1119 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=2042,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=208,1036 Split=Y Selected=0x1E6EB881 +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=617,298 Size=1920,1012 Split=X + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=321,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1832,1036 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=270,1036 Selected=0xE7039252 + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1324,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index 3e7a2a5c..dca02399 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -34,5 +34,6 @@ namespace SHADE ImGuiIO& io; SHVec2 windowSize; SHVec2 windowPos; + SHVec2 viewportMousePos; };//class SHEditorWindow }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index c903a80f..f6e6dcff 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -4,6 +4,7 @@ #include "ECS_Base/Managers/SHSystemManager.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" namespace SHADE { @@ -26,6 +27,14 @@ namespace SHADE DrawMenuBar(); auto gfxSystem = SHSystemManager::GetSystem(); auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; + + if (ImGui::IsWindowHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + auto mousePos = ImGui::GetMousePos(); + auto cursorPos = ImGui::GetCursorScreenPos(); + viewportMousePos = {mousePos.x - cursorPos.x, mousePos.y - cursorPos.y}; + gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); + } ImGui::Image((ImTextureID)descriptorSet, ImGui::GetWindowSize()); } ImGui::End(); @@ -42,6 +51,8 @@ namespace SHADE //Get graphics system to resize swapchain image auto gfxSystem = SHSystemManager::GetSystem(); + //auto pos = ImGui::GetCursorPos(); + //windowCursorPos = {} gfxSystem->PrepareResize(static_cast(windowSize.x), static_cast(windowSize.y)); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index c78cc58f..b160d863 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -69,7 +69,15 @@ namespace SHADE if (width == 0 || height == 0) return; - PrepareResize(resizeWidth, resizeHeight); +#ifdef SHEDITOR + + //PrepareResize(1, 1, SHVec2(0, 0)); + +#else + + PrepareResize(resizeWidth, resizeHeight, SHVec2(0, 0)); + +#endif }); window->RegisterWindowCloseCallback([&](void) @@ -130,7 +138,7 @@ namespace SHADE worldCamera->SetPerspective(90.0f, static_cast(windowDims.first), static_cast(windowDims.second), 0.0f, 100.0f); // Create Default Viewport - defaultViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); + worldViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast(window->GetWindowSize().first), static_cast(window->GetWindowSize().second), 0.0f, 1.0f)); // Get render graph from default viewport world renderer worldRenderGraph = resourceManager.Create(); @@ -163,7 +171,7 @@ namespace SHADE worldRenderGraph->Generate(); // Add world renderer to default viewport - worldRenderer = defaultViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); + worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); @@ -691,8 +699,8 @@ namespace SHADE mousePickSystem->HandleResize(); postOffscreenRender->HandleResize(); - defaultViewport->SetWidth(static_cast(resizeWidth)); - defaultViewport->SetHeight(static_cast(resizeHeight)); + worldViewport->SetWidth(static_cast(resizeWidth)); + worldViewport->SetHeight(static_cast(resizeHeight)); worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 0e1e2f78..7d0fa3ab 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -280,7 +280,7 @@ namespace SHADE Handle GetPhysicalDevice() const { return physicalDevice; } Handle GetQueue() const { return graphicsQueue; } Handle GetDescriptorPool() const { return descPool; } - Handle GetDefaultViewport() const {return defaultViewport;} + Handle GetDefaultViewport() const {return worldViewport;} #ifdef SHEDITOR Handle GetEditorViewport () const {return editorViewport;}; #endif @@ -325,7 +325,7 @@ namespace SHADE Handle editorRenderGraph; #endif - Handle defaultViewport; // Whole screen + Handle worldViewport; // Whole screen std::vector> viewports; // Additional viewports // Debug Renderers diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index 1dd8212d..57a08d47 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -6,6 +6,7 @@ #include "Graphics/Synchronization/SHVkFence.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/SHVkUtil.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" namespace SHADE { @@ -13,7 +14,7 @@ namespace SHADE { logicalDevice = device; - pickedEID = 0; + pickedEID = MAX_EID; // Create command buffers for (auto& pool : cmdPools) @@ -30,7 +31,7 @@ namespace SHADE void SHMousePickSystem::Run(Handle queue, uint32_t frameIndex) noexcept { // if input detected - if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_CTRL) && SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) + if (SHInputManager::GetKeyUp(SHInputManager::SH_KEYCODE::LMB)) { afterCopyFence->Reset(); @@ -52,10 +53,8 @@ namespace SHADE // wait for the copy to be done afterCopyFence->Wait(true, std::numeric_limits::max()); - int mouseX = 0, mouseY = 0; - SHInputManager::GetMouseWindowPosition(&mouseX, &mouseY); + pickedEID = imageDataDstBuffer->GetDataFromMappedPointer(static_cast(viewportMousePos.y) * entityIDAttachment->GetWidth() + static_cast(viewportMousePos.x)); - pickedEID = imageDataDstBuffer->GetDataFromMappedPointer(mouseY * entityIDAttachment->GetWidth() + mouseX); } } @@ -79,6 +78,11 @@ namespace SHADE imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); } + void SHMousePickSystem::SetViewportMousePos(SHVec2 vpMousePos) noexcept + { + viewportMousePos = vpMousePos; + } + EntityID SHMousePickSystem::GetPickedEntity(void) const noexcept { return pickedEID; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h index 4b84c1df..85e86969 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.h @@ -13,6 +13,7 @@ namespace SHADE class SHVkFence; class SHVkQueue; class SHVkBuffer; + class SHViewport; class SHMousePickSystem { @@ -33,6 +34,10 @@ namespace SHADE //! eid picked from screen EntityID pickedEID; + + //! mouse position relative to the viewport window displaying the world + SHVec2 viewportMousePos; + public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ @@ -44,6 +49,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ + void SetViewportMousePos (SHVec2 vpMousePos) noexcept; + EntityID GetPickedEntity (void) const noexcept; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index dc534a49..f47920e0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -85,4 +85,14 @@ namespace SHADE } + void SHViewport::SetX(float x) noexcept + { + viewport.x = x; + } + + void SHViewport::SetY(float y) noexcept + { + viewport.y = y; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 221dbe7e..04b39f00 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -67,6 +67,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ void SetWidth(float w) noexcept; void SetHeight (float h) noexcept; + void SetX (float x) noexcept; + void SetY (float y) noexcept; /*-----------------------------------------------------------------------------*/ /* Getters */ From 15a17deaf0d0592261904fd7bee3e764815ff71f Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 18 Oct 2022 19:08:31 +0800 Subject: [PATCH 366/793] select picked entity in hierarchy panel --- .gitignore | 2 ++ .../src/Application/SBApplication.cpp | 9 +++++-- .../Editor/EditorWindow/SHEditorWindow.cpp | 1 + .../src/Editor/EditorWindow/SHEditorWindow.h | 1 + .../ViewportWindow/SHEditorViewport.cpp | 27 ++++++++++++++----- SHADE_Engine/src/Editor/SHEditor.cpp | 3 ++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +++--- 7 files changed, 37 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 1110510c..5d998cfd 100644 --- a/.gitignore +++ b/.gitignore @@ -362,3 +362,5 @@ MigrationBackup/ *.csproj *.filters + +Assets/Editor/Layouts/UserLayout.ini diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 202a3852..23943940 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -130,14 +130,19 @@ namespace Sandbox void SBApplication::Update(void) { SHGraphicsSystem* graphicsSystem = SHADE::SHSystemManager::GetSystem(); + SHEditor* editor = SHADE::SHSystemManager::GetSystem(); //TODO: Change true to window is open while (!window.WindowShouldClose()) { SHFrameRateController::UpdateFRC(); SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); SHSceneManager::UpdateSceneManager(); - SHSceneManager::SceneUpdate(0.016f); - SHSystemManager::RunRoutines(false, 0.016f); +#ifdef SHEDITOR + if(editor->editorState == SHEditor::State::PLAY) + SHSceneManager::SceneUpdate(0.016f); +#endif + SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); + editor->PollPicking(); } // Finish all graphics jobs first diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index 491c1bc2..edbe0faa 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -54,6 +54,7 @@ namespace SHADE windowPos = {wndPos.x, wndPos.y}; OnPosChange(); } + isWindowHovered = ImGui::IsWindowHovered(); return result; } diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index dca02399..f46cd880 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -24,6 +24,7 @@ namespace SHADE virtual void Update(); virtual void Exit(); bool isOpen; + bool isWindowHovered; std::string_view windowName; protected: virtual bool Begin(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index f6e6dcff..420443ae 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -2,6 +2,8 @@ #include "SHEditorViewport.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.hpp" +#include "Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" @@ -27,14 +29,25 @@ namespace SHADE DrawMenuBar(); auto gfxSystem = SHSystemManager::GetSystem(); auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; + auto mousePos = ImGui::GetMousePos(); + auto cursorPos = ImGui::GetCursorScreenPos(); + viewportMousePos = {mousePos.x - cursorPos.x, mousePos.y - cursorPos.y}; + gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); + //if (ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + //{ + // auto eid = gfxSystem->GetMousePickSystem ()->GetPickedEntity(); + // if(eid != MAX_EID) + // { + // auto editor = SHSystemManager::GetSystem(); + // editor->selectedEntities.clear(); + // editor->selectedEntities.push_back(eid); + // if (const auto hierarchyPanel = SHEditorWindowManager::GetEditorWindow()) + // { + // hierarchyPanel->SetScrollTo(eid); + // } + // } + //} - if (ImGui::IsWindowHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) - { - auto mousePos = ImGui::GetMousePos(); - auto cursorPos = ImGui::GetCursorScreenPos(); - viewportMousePos = {mousePos.x - cursorPos.x, mousePos.y - cursorPos.y}; - gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); - } ImGui::Image((ImTextureID)descriptorSet, ImGui::GetWindowSize()); } ImGui::End(); diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 4c6caff0..6b3c3a93 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -337,7 +337,8 @@ namespace SHADE { if (auto gfxSystem = SHSystemManager::GetSystem()) { - if (!ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + auto viewportWindow = SHEditorWindowManager::GetEditorWindow(); + if (viewportWindow->isWindowHovered && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { EntityID pickedEID = gfxSystem->GetMousePickSystem()->GetPickedEntity(); if(pickedEID == MAX_EID) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index b160d863..143f3bf5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -597,7 +597,7 @@ namespace SHADE /* System Routine Functions - BeginRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::BeginRoutine::BeginRoutine() - : SHSystemRoutine("Graphics System Frame Set Up", false) + : SHSystemRoutine("Graphics System Frame Set Up", true) {} void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept @@ -609,7 +609,7 @@ namespace SHADE /* System Routine Functions - RenderRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::RenderRoutine::RenderRoutine() - : SHSystemRoutine("Graphics System Render", false) + : SHSystemRoutine("Graphics System Render", true) {} void SHGraphicsSystem::RenderRoutine::Execute(double dt) noexcept @@ -621,7 +621,7 @@ namespace SHADE /* System Routine Functions - EndRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::EndRoutine::EndRoutine() - : SHSystemRoutine("Graphics System Frame Clean Up", false) + : SHSystemRoutine("Graphics System Frame Clean Up", true) {} void SHGraphicsSystem::EndRoutine::Execute(double) noexcept @@ -633,7 +633,7 @@ namespace SHADE /* System Routine Functions - BatcherDispatcherRoutine */ /*-----------------------------------------------------------------------------------*/ SHGraphicsSystem::BatcherDispatcherRoutine::BatcherDispatcherRoutine() - : SHSystemRoutine("Graphics System Batcher Dispatcher", false) + : SHSystemRoutine("Graphics System Batcher Dispatcher", true) {} void SHGraphicsSystem::BatcherDispatcherRoutine::Execute(double) noexcept From 82637b620d953b01adb8201168031b13fcaeefd4 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 18 Oct 2022 19:36:49 +0800 Subject: [PATCH 367/793] Delete UserLayout.ini --- Assets/Editor/Layouts/UserLayout.ini | 48 ---------------------------- 1 file changed, 48 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index e55aeb81..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,48 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=1920,1012 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,142 -Size=321,918 -Collapsed=0 -DockId=0x00000004,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=1649,48 -Size=271,1012 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=321,92 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=323,48 -Size=1324,1012 -Collapsed=0 -DockId=0x00000002,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=617,298 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=321,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1324,1036 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - From 87cf3ffa6176b9cacb97259fa52b9fd0ce361202 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 18 Oct 2022 20:09:50 +0800 Subject: [PATCH 368/793] Added script inspector tooltips support via Tooltip attribute --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 59 +++++++++++++++---- SHADE_Engine/src/Editor/SHEditorUI.h | 45 ++++++++++---- SHADE_Engine/src/Editor/SHEditorUI.hpp | 7 ++- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 4 +- SHADE_Managed/src/Editor/Editor.cxx | 56 ++++++++++++++---- SHADE_Managed/src/Editor/Editor.hxx | 10 +++- .../TooltipAttribute.cxx} | 29 +++++---- SHADE_Managed/src/Editor/TooltipAttribute.hxx | 53 +++++++++++++++++ .../Serialisation/SerializeFieldAttribute.hxx | 11 +--- TempScriptsFolder/RaccoonShowcase.cs | 8 ++- TempScriptsFolder/RaccoonSpin.cs | 4 +- 11 files changed, 221 insertions(+), 65 deletions(-) rename SHADE_Managed/src/{Serialisation/SerialiseFieldAttribute.cxx => Editor/TooltipAttribute.cxx} (54%) create mode 100644 SHADE_Managed/src/Editor/TooltipAttribute.hxx diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 65b65827..76f7bac6 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -67,6 +67,11 @@ namespace SHADE ImGui::Separator(); } + bool SHEditorUI::IsItemHovered() + { + return ImGui::IsItemHovered(); + } + bool SHEditorUI::BeginMenu(const std::string& label) { return ImGui::BeginMenu(label.data()); @@ -82,6 +87,16 @@ namespace SHADE ImGui::EndMenu(); } + void SHEditorUI::BeginTooltip() + { + ImGui::BeginTooltip(); + } + + void SHEditorUI::EndTooltip() + { + ImGui::EndTooltip(); + } + /*-----------------------------------------------------------------------------------*/ /* ImGui Wrapper Functions - Pop Ups */ /*-----------------------------------------------------------------------------------*/ @@ -135,24 +150,30 @@ namespace SHADE return ImGui::Selectable(std::format("{} {}", icon, label).data()); } - bool SHEditorUI::InputCheckbox(const std::string& label, bool& value) + bool SHEditorUI::InputCheckbox(const std::string& label, bool& value, bool* isHovered) { ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); return ImGui::Checkbox("#", &value); } - bool SHEditorUI::InputInt(const std::string& label, int& value) + bool SHEditorUI::InputInt(const std::string& label, int& value, bool* isHovered) { ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); return ImGui::InputInt("#", &value, 1, 10, ImGuiInputTextFlags_EnterReturnsTrue); } - bool SHEditorUI::InputUnsignedInt(const std::string& label, unsigned int& value) + bool SHEditorUI::InputUnsignedInt(const std::string& label, unsigned int& value, bool* isHovered) { int signedVal = static_cast(value); ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); const bool CHANGED = InputInt("#", signedVal); if (CHANGED) @@ -162,35 +183,43 @@ namespace SHADE } return CHANGED; } - bool SHEditorUI::InputFloat(const std::string& label, float& value) + bool SHEditorUI::InputFloat(const std::string& label, float& value, bool* isHovered) { ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); return ImGui::InputFloat("#", &value, 0.1f, 1.0f, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } - bool SHEditorUI::InputDouble(const std::string& label, double& value) + bool SHEditorUI::InputDouble(const std::string& label, double& value, bool* isHovered) { ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); return ImGui::InputDouble("#", &value, 0.1, 1.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } - bool SHEditorUI::InputAngle(const std::string& label, double& value) + bool SHEditorUI::InputAngle(const std::string& label, double& value, bool* isHovered) { ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); return ImGui::InputDouble("#", &value, 1.0, 45.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } - bool SHEditorUI::InputSlider(const std::string& label, double min, double max, double& value) + bool SHEditorUI::InputSlider(const std::string& label, double min, double max, double& value, bool* isHovered) { float val = static_cast(value); ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); const bool CHANGED = ImGui::SliderFloat("#", &val, static_cast(min), static_cast(max), "%.3f", @@ -204,22 +233,24 @@ namespace SHADE return CHANGED; } - bool SHEditorUI::InputVec2(const std::string& label, SHVec2& value) + bool SHEditorUI::InputVec2(const std::string& label, SHVec2& value, bool* isHovered) { static const std::vector COMPONENT_LABELS = { "X", "Y" }; - return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y }); + return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y }, 0.1f, "%.3f", float{}, float{}, 0, isHovered); } - bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value, float speed) + bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value, bool* isHovered, float speed) { static const std::vector COMPONENT_LABELS = { "X", "Y", "Z"}; - return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y, &value.z }, speed, "%.3f"); + return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y, &value.z }, speed, "%.3f", float{}, float{}, 0, isHovered); } - bool SHEditorUI::InputTextField(const std::string& label, std::string& value) + bool SHEditorUI::InputTextField(const std::string& label, std::string& value, bool* isHovered) { std::array buffer = { '\0' }; strcpy_s(buffer.data(), TEXT_FIELD_MAX_LENGTH, value.c_str()); ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); const bool CHANGED = ImGui::InputText("#", &buffer[0], TEXT_FIELD_MAX_LENGTH); if (CHANGED) @@ -229,13 +260,15 @@ namespace SHADE return CHANGED; } - bool SHEditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames) + bool SHEditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames, bool* isHovered) { // Clamp input value const std::string& INITIAL_NAME = v >= static_cast(enumNames.size()) ? "Unknown" : enumNames[v]; bool b = false; ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); if (ImGui::BeginCombo("#", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) { diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index 13468215..b8451765 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -90,12 +90,19 @@ namespace SHADE static void SameLine(); static void Separator(); - /*-----------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------*/ + /* ImGui Wrapper Functions - Queries */ + /*-----------------------------------------------------------------------------*/ + static bool IsItemHovered(); + + /*-----------------------------------------------------------------------------*/ /* ImGui Wrapper Functions - Menu */ /*-----------------------------------------------------------------------------*/ static bool BeginMenu(const std::string& label); static bool BeginMenu(const std::string& label, const char* icon); static void EndMenu(); + static void BeginTooltip(); + static void EndTooltip(); /*-----------------------------------------------------------------------------*/ /* ImGui Wrapper Functions - Pop Ups */ @@ -165,8 +172,9 @@ namespace SHADE /// /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Minimum value of the slider. /// Maximum value of the slider. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// Label used to identify this widget. /// Reference to the variable to store the result. + /// /// Conversion function from the type of enum to C-style string. /// + /// The name of the input. /// The reference to the value to modify. /// Vector of names for each enumeration value. + /// SkipItems) @@ -174,6 +174,8 @@ namespace SHADE ImGui::BeginColumns("DragVecCol", 2, ImGuiOldColumnFlags_NoBorder | ImGuiOldColumnFlags_NoResize); ImGui::SetColumnWidth(-1, 80.0f); ImGui::Text(fieldLabel.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); ImGui::NextColumn(); for (std::size_t i = 0; i < N; ++i) { diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 735f8c2c..8d105fce 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -29,6 +29,7 @@ of DigiPen Institute of Technology is prohibited. #include "Editor/IconsMaterialDesign.h" #include "Editor/Command/SHCommandManager.h" #include "Editor/Command/SHCommand.hpp" +#include "TooltipAttribute.hxx" // Using Directives using namespace System; @@ -48,17 +49,17 @@ using namespace System::Collections::Generic; /// The managed type of the object to edit. /// The native type of the object to edit. /// The SHEditorUI:: function to use for editing. -#define RENDER_FIELD(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ -(field->FieldType == MANAGED_TYPE::typeid) \ -{ \ - NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ - NATIVE_TYPE oldVal = val; \ - if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ - { \ - field->SetValue(object, val); \ - registerUndoAction(object, field, val, oldVal); \ - } \ -} \ +#define RENDER_FIELD(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ +(field->FieldType == MANAGED_TYPE::typeid) \ +{ \ + NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ + NATIVE_TYPE oldVal = val; \ + if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val, &isHovered))\ + { \ + field->SetValue(object, val); \ + registerUndoAction(object, field, val, oldVal); \ + } \ +} \ /// /// Macro expansion that is used in renderFieldInInspector() to check the type of a field /// named "field" against the specified type and if it matches, retrieves the value of @@ -76,7 +77,7 @@ using namespace System::Collections::Generic; { \ NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ NATIVE_TYPE oldVal = val; \ - if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val)) \ + if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val, &isHovered)) \ { \ field->SetValue(object, Convert::ToCLI(val)); \ registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); \ @@ -196,6 +197,8 @@ namespace SHADE } void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) { + bool isHovered = false; + if RENDER_FIELD (Int16, int, InputInt) else if RENDER_FIELD (Int32, int, InputInt) else if RENDER_FIELD (Int64, int, InputInt) @@ -244,6 +247,15 @@ namespace SHADE registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } + + // Check if the field has a specific attribute + TooltipAttribute^ toolTip = hasAttribute(field); + if (toolTip && isHovered) + { + SHEditorUI::BeginTooltip(); + SHEditorUI::Text(Convert::ToNative(toolTip->Description)); + SHEditorUI::EndTooltip(); + } } void Editor::renderScriptContextMenu(Entity entity, Script^ script) @@ -274,4 +286,24 @@ namespace SHADE SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); } + generic + Attribute Editor::hasAttribute(System::Reflection::FieldInfo^ field) + { + array^ attributes = field->GetCustomAttributes(true); + for each (System::Object^ attrib in attributes) + { + try + { + Attribute attribute = safe_cast(attrib); + if (attribute != nullptr) + return attribute; + } + catch (System::InvalidCastException^) + { + continue; + } + } + // Failed to find + return Attribute{}; + } } diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index c4800645..6b59589a 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -23,7 +23,7 @@ namespace SHADE /// /// Static class for Editor-related functions /// - public ref class Editor abstract sealed + private ref class Editor abstract sealed { public: /*-----------------------------------------------------------------------------*/ @@ -48,7 +48,13 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* UndoRedoStack Functions */ /*-----------------------------------------------------------------------------*/ + /// + /// Undoes the last script inspector change if there is any. + /// static void Undo(); + /// + /// Redoes the last script inspector change if there is any. + /// static void Redo(); private: @@ -86,5 +92,7 @@ namespace SHADE /// The Script to render the inspector for. static void renderScriptContextMenu(Entity entity, Script^ script); static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); + generic where Attribute : System::Attribute + static Attribute hasAttribute(System::Reflection::FieldInfo^ field); }; } diff --git a/SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx b/SHADE_Managed/src/Editor/TooltipAttribute.cxx similarity index 54% rename from SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx rename to SHADE_Managed/src/Editor/TooltipAttribute.cxx index c371d200..8d5a5d55 100644 --- a/SHADE_Managed/src/Serialisation/SerialiseFieldAttribute.cxx +++ b/SHADE_Managed/src/Editor/TooltipAttribute.cxx @@ -1,27 +1,34 @@ /************************************************************************************//*! -\file SerializeFieldAttribute.cxx +\file TooltipAttribute.cxx \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu -\date Nov 5, 2021 -\brief Contains the definition of the functions of the managed SerializeField - Attribute class. +\date Oct 18, 2022 +\brief Contains the definition of the functions of the managed Tooltip Attribute + class. Note: This file is written in C++17/CLI. - -Copyright (C) 2021 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ -// Precompiled Headers #include "SHpch.h" -// Primary Header -#include "SerializeFieldAttribute.hxx" +#include "TooltipAttribute.hxx" namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + System::String^ TooltipAttribute::Description::get() + { + return desc; + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ - SerializeField::SerializeField() + TooltipAttribute::TooltipAttribute(System::String^ description) + : desc { description } {} } diff --git a/SHADE_Managed/src/Editor/TooltipAttribute.hxx b/SHADE_Managed/src/Editor/TooltipAttribute.hxx new file mode 100644 index 00000000..e7cd168c --- /dev/null +++ b/SHADE_Managed/src/Editor/TooltipAttribute.hxx @@ -0,0 +1,53 @@ +/************************************************************************************//*! +\file TooltipAttribute.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 18, 2022 +\brief Contains the definition of the managed Tooltip Attribute class with + the declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Simple attribute to mark that a field in a Script should be serialised. + /// + [System::AttributeUsage(System::AttributeTargets::Field)] + public ref class TooltipAttribute : public System::Attribute + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Description that is to be shown in the Tooltip. + /// + property System::String^ Description + { + System::String^ get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for a Tooltip attribute that fills in the description. + /// + /// Text to be shown when a field is hovered. + TooltipAttribute(System::String^ description); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + System::String^ desc; + }; +} + diff --git a/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx index 533ded2a..7a7bb83c 100644 --- a/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx +++ b/SHADE_Managed/src/Serialisation/SerializeFieldAttribute.hxx @@ -21,15 +21,6 @@ namespace SHADE /// [System::AttributeUsage(System::AttributeTargets::Field)] public ref class SerializeField : public System::Attribute - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructors */ - /*-----------------------------------------------------------------------------*/ - /// - /// Default Constructor - /// - SerializeField(); - }; + {}; } diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs index e2d6454d..93ea53eb 100644 --- a/TempScriptsFolder/RaccoonShowcase.cs +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -3,8 +3,12 @@ using System; public class RaccoonShowcase : Script { - public double RotateSpeed = 1.0; - public Vector3 ScaleSpeed = new Vector3(1.0, 1.0, 0.0); + [SerializeField] + [Tooltip("Speed of the rotation in radians per second.")] + private double RotateSpeed = 1.0; + [SerializeField] + [Tooltip("Speed of the scaling in radians per second around each axis.")] + private Vector3 ScaleSpeed = new Vector3(1.0, 1.0, 0.0); private Transform Transform; private double rotation = 0.0; private Vector3 scale = Vector3.Zero; diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs index 7785cfd5..d6ee1c9f 100644 --- a/TempScriptsFolder/RaccoonSpin.cs +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -3,7 +3,9 @@ using System; public class RaccoonSpin : Script { - public double RotateSpeed = 1.0; + [SerializeField] + [Tooltip("Speed of the rotation in radians per second.")] + private double RotateSpeed = 1.0; private double rotation = 0.0; private Transform Transform; public RaccoonSpin(GameObject gameObj) : base(gameObj) { } From ceb4c6c4cabcb2fb0a445dd185872af1ffb62e12 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 18 Oct 2022 22:34:46 +0800 Subject: [PATCH 369/793] Added Range Attribute --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 19 ------ SHADE_Engine/src/Editor/SHEditorUI.h | 3 +- SHADE_Engine/src/Editor/SHEditorUI.hpp | 25 +++++++- SHADE_Managed/src/Editor/Editor.cxx | 47 +++++++++++--- SHADE_Managed/src/Editor/RangeAttribute.cxx | 39 ++++++++++++ SHADE_Managed/src/Editor/RangeAttribute.hxx | 61 +++++++++++++++++++ SHADE_Managed/src/Editor/TooltipAttribute.hxx | 2 +- TempScriptsFolder/RaccoonShowcase.cs | 4 ++ 8 files changed, 166 insertions(+), 34 deletions(-) create mode 100644 SHADE_Managed/src/Editor/RangeAttribute.cxx create mode 100644 SHADE_Managed/src/Editor/RangeAttribute.hxx diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 76f7bac6..cbbd6d1d 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -214,25 +214,6 @@ namespace SHADE ImGuiInputTextFlags_EnterReturnsTrue); } - bool SHEditorUI::InputSlider(const std::string& label, double min, double max, double& value, bool* isHovered) - { - float val = static_cast(value); - ImGui::Text(label.c_str()); - if (isHovered) - *isHovered = ImGui::IsItemHovered(); - ImGui::SameLine(); - const bool CHANGED = ImGui::SliderFloat("#", &val, - static_cast(min), static_cast(max), "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - - if (CHANGED) - { - value = val; - } - - return CHANGED; - } - bool SHEditorUI::InputVec2(const std::string& label, SHVec2& value, bool* isHovered) { static const std::vector COMPONENT_LABELS = { "X", "Y" }; diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index b8451765..276bc9f9 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -240,7 +240,8 @@ namespace SHADE /// Reference to the variable to store the result. /// (min), static_cast(max), "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + if (CHANGED) + { + value = static_cast(val); + } + + //return CHANGED; + return false; + } template inline bool SHEditorUI::InputEnumCombo(const std::string& label, Enum& v, int maxVal, std::function toStrFn, bool* isHovered) { diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 8d105fce..f0690c06 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -30,6 +30,7 @@ of DigiPen Institute of Technology is prohibited. #include "Editor/Command/SHCommandManager.h" #include "Editor/Command/SHCommand.hpp" #include "TooltipAttribute.hxx" +#include "RangeAttribute.hxx" // Using Directives using namespace System; @@ -61,6 +62,31 @@ using namespace System::Collections::Generic; } \ } \ /// +/// Alternative to RENDER_FIELD that checks for RangeAttribute and switches to a slider +/// instead. +/// +/// The managed type of the object to edit. +/// The native type of the object to edit. +/// The SHEditorUI:: function to use for editing. +#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ +(field->FieldType == MANAGED_TYPE::typeid) \ +{ \ + NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ + NATIVE_TYPE oldVal = val; \ + \ + RangeAttribute^ rangeAttrib = hasAttribute(field); \ + std::string fieldName = Convert::ToNative(field->Name); \ + if ( \ + (rangeAttrib && SHEditorUI::InputSlider(fieldName, rangeAttrib->Min, rangeAttrib->Max, val, &isHovered)) \ + || \ + SHEditorUI::FUNC(fieldName, val, &isHovered) \ + ) \ + { \ + field->SetValue(object, val); \ + registerUndoAction(object, field, val, oldVal); \ + } \ +} \ +/// /// Macro expansion that is used in renderFieldInInspector() to check the type of a field /// named "field" against the specified type and if it matches, retrieves the value of /// that field from an object named "object" and pass it into the specified SHEditorUI:: @@ -77,6 +103,7 @@ using namespace System::Collections::Generic; { \ NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ NATIVE_TYPE oldVal = val; \ + \ if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val, &isHovered)) \ { \ field->SetValue(object, Convert::ToCLI(val)); \ @@ -197,18 +224,18 @@ namespace SHADE } void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) { - bool isHovered = false; + bool isHovered = false; - if RENDER_FIELD (Int16, int, InputInt) - else if RENDER_FIELD (Int32, int, InputInt) - else if RENDER_FIELD (Int64, int, InputInt) - else if RENDER_FIELD (UInt16, unsigned int, InputUnsignedInt) - else if RENDER_FIELD (UInt32, unsigned int, InputUnsignedInt) - else if RENDER_FIELD (UInt64, unsigned int, InputUnsignedInt) - else if RENDER_FIELD (Byte, int, InputInt) + if RENDER_FIELD_RANGE (Int16, int, InputInt) + else if RENDER_FIELD_RANGE (Int32, int, InputInt) + else if RENDER_FIELD_RANGE (Int64, int, InputInt) + else if RENDER_FIELD_RANGE (UInt16, unsigned int, InputUnsignedInt) + else if RENDER_FIELD_RANGE (UInt32, unsigned int, InputUnsignedInt) + else if RENDER_FIELD_RANGE (UInt64, unsigned int, InputUnsignedInt) + else if RENDER_FIELD_RANGE (Byte, int, InputInt) else if RENDER_FIELD (bool, bool, InputCheckbox) - else if RENDER_FIELD (float, float, InputFloat) - else if RENDER_FIELD (double, double, InputDouble) + else if RENDER_FIELD_RANGE (float, float, InputFloat) + else if RENDER_FIELD_RANGE (double, double, InputDouble) else if (field->FieldType->IsSubclassOf(Enum::typeid)) { // Get all the names of the enums diff --git a/SHADE_Managed/src/Editor/RangeAttribute.cxx b/SHADE_Managed/src/Editor/RangeAttribute.cxx new file mode 100644 index 00000000..0d548cf7 --- /dev/null +++ b/SHADE_Managed/src/Editor/RangeAttribute.cxx @@ -0,0 +1,39 @@ +/************************************************************************************//*! +\file RangeAttribute.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 18, 2022 +\brief Contains the definition of the functions of the managed Range Attribute + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "RangeAttribute.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + float RangeAttribute::Min::get() + { + return minVal; + } + float RangeAttribute::Max::get() + { + return maxVal; + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + RangeAttribute::RangeAttribute(float min, float max) + : minVal { min } + , maxVal { max } + {} +} diff --git a/SHADE_Managed/src/Editor/RangeAttribute.hxx b/SHADE_Managed/src/Editor/RangeAttribute.hxx new file mode 100644 index 00000000..a724816d --- /dev/null +++ b/SHADE_Managed/src/Editor/RangeAttribute.hxx @@ -0,0 +1,61 @@ +/************************************************************************************//*! +\file RangeAttribute.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 18, 2022 +\brief Contains the definition of the managed Range Attribute class with + the declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Simple attribute to constrain the range of values for a field on the editor. + /// + [System::AttributeUsage(System::AttributeTargets::Field)] + public ref class RangeAttribute : public System::Attribute + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Minimum value for the Ranged field. + /// + property float Min + { + float get(); + } + /// + /// Maximum value for the Ranged field. + /// + property float Max + { + float get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for a Tooltip attribute that fills in the description. + /// + /// Text to be shown when a field is hovered. + RangeAttribute(float min, float max); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + float minVal; + float maxVal; + }; +} + diff --git a/SHADE_Managed/src/Editor/TooltipAttribute.hxx b/SHADE_Managed/src/Editor/TooltipAttribute.hxx index e7cd168c..18cbec3a 100644 --- a/SHADE_Managed/src/Editor/TooltipAttribute.hxx +++ b/SHADE_Managed/src/Editor/TooltipAttribute.hxx @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// Simple attribute to mark that a field in a Script should be serialised. + /// Simple attribute to provide a field in a script with a tooltip. /// [System::AttributeUsage(System::AttributeTargets::Field)] public ref class TooltipAttribute : public System::Attribute diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs index 93ea53eb..4191a6e5 100644 --- a/TempScriptsFolder/RaccoonShowcase.cs +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -5,7 +5,11 @@ public class RaccoonShowcase : Script { [SerializeField] [Tooltip("Speed of the rotation in radians per second.")] + [Range(-1.0f, 2.0f)] private double RotateSpeed = 1.0; + //[SerializeField] + //[Range(-5, 20)] + //private int test = 5; [SerializeField] [Tooltip("Speed of the scaling in radians per second around each axis.")] private Vector3 ScaleSpeed = new Vector3(1.0, 1.0, 0.0); From 96f5b29418eba41c360e2386350b64946ab036a2 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 19 Oct 2022 01:03:32 +0800 Subject: [PATCH 370/793] Serialization/Deserialization --- .../HierarchyPanel/SHHierarchyPanel.cpp | 6 +++ .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 11 ++++- .../src/Serialization/SHSerialization.cpp | 42 ++++++++++++++++--- .../src/Serialization/SHSerialization.h | 3 +- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 42c9da66..30af228b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -21,6 +21,8 @@ //#==============================================================# #include +#include "Serialization/SHSerialization.h" + namespace SHADE { @@ -171,6 +173,10 @@ namespace SHADE editor->selectedEntities.clear(); editor->selectedEntities.push_back(eid); } + if(ImGui::Selectable("Copy")) + { + SHLOG_INFO(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)) + } if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { SHEntityManager::DestroyEntity(eid); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 3cb6561d..c33f4fb6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -17,6 +17,8 @@ #include #include +#include "Serialization/SHSerialization.h" + namespace SHADE { constexpr ImGuiWindowFlags editorMenuBarFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | @@ -73,7 +75,14 @@ namespace SHADE { if (ImGui::BeginMenu("File")) { - + if(ImGui::Selectable("Save")) + { + SHSerialization::SerializeSceneToFile("../../Assets/Scenes/Test.SHADE"); + } + if(ImGui::Selectable("Load")) + { + SHSerialization::DeserializeSceneFromFile("../../Assets/Scenes/Test.SHADE"); + } ImGui::EndMenu(); } if(ImGui::BeginMenu("Edit")) diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index ee189f2c..e259fbbc 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -12,6 +12,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" +#include "Physics/Components/SHRigidBodyComponent.h" namespace SHADE { @@ -119,11 +120,27 @@ namespace SHADE } } - - - std::string SHSerialization::SerializeEntityToString() + void SHSerialization::EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out) { - return std::string(); + out << SerializeEntityToNode(entityNode); + auto const& children = entityNode->GetChildren(); + for(auto const& child : children) + { + EmitEntity(child, out); + } + } + + std::string SHSerialization::SerializeEntitiesToString(std::vector const& entities) + { + YAML::Emitter out; + YAML::Node node; + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + for (auto const& eid : entities) + { + auto entityNode = sceneGraph.GetNode(eid); + EmitEntity(entityNode, out); + } + return std::basic_string(out.c_str()); } void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) @@ -153,6 +170,14 @@ namespace SHADE { components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(transform); } + if (const auto renderable = SHComponentManager::GetComponent_s(eid)) + { + components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(renderable); + } + if (const auto rigidbody = SHComponentManager::GetComponent_s(eid)) + { + components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(rigidbody); + } node[ComponentsNode] = components; return node; } @@ -173,17 +198,22 @@ namespace SHADE auto id = GetComponentID(componentsNode); if (id.has_value()) componentIDList.push_back(id.value()); + id = GetComponentID(componentsNode); if (id.has_value()) componentIDList.push_back(id.value()); + id = GetComponentID(componentsNode); + if (id.has_value()) + componentIDList.push_back(id.value()); + return componentIDList; } void SHSerialization::InitializeEntity(YAML::Node const& entityNode, EntityID const& eid) { - auto componentsNode = entityNode[ComponentsNode]; - if(!componentsNode) + auto const componentsNode = entityNode[ComponentsNode]; + if (!componentsNode) return; SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index 8a57f036..d247de7a 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -31,7 +31,8 @@ namespace SHADE static void DeserializeSceneFromFile(std::filesystem::path const& path); - static std::string SerializeEntityToString(); + static void EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out); + static std::string SerializeEntitiesToString(std::vector const& entities); static void SerializeEntityToFile(std::filesystem::path const& path); static YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode); From 3a3f7efb29db2c8d629e6285e3922e63560043d9 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 19 Oct 2022 01:31:48 +0800 Subject: [PATCH 371/793] [WIP] Transform Gizmo --- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 24 +++++++++++++++++++ .../src/Editor/Gizmos/SHTransformGizmo.h | 13 ++++++++++ 2 files changed, 37 insertions(+) create mode 100644 SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp create mode 100644 SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp new file mode 100644 index 00000000..a9276b6d --- /dev/null +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -0,0 +1,24 @@ +#include "SHpch.h" +#include "SHTransformGizmo.h" + +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.hpp" + +namespace SHADE +{ + void SHTransformGizmo::Draw() + { + if(selectedEntityTranformComponent == nullptr) + { + SHEditor* editor = SHSystemManager::GetSystem(); + if(editor->selectedEntities.empty()) + return; + EntityID eid = editor->selectedEntities.back(); + selectedEntityTranformComponent = SHComponentManager::GetComponent_s(eid); + } + + + + } +} diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h new file mode 100644 index 00000000..d034eef9 --- /dev/null +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h @@ -0,0 +1,13 @@ +#pragma once +#include "Math/Transform/SHTransformComponent.h" + +namespace SHADE +{ + class SHTransformGizmo + { + public: + void Draw(); + private: + SHTransformComponent* selectedEntityTranformComponent{nullptr}; + }; +} From 7df24e7a66334bad6b473e247c8245736443dd13 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 19 Oct 2022 10:12:56 +0800 Subject: [PATCH 372/793] Fixed RangeAttribute not working correctly --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 46 ++++++++++++++++++++++++++ SHADE_Engine/src/Editor/SHEditorUI.h | 43 +++++++++++++++++++++--- SHADE_Engine/src/Editor/SHEditorUI.hpp | 19 ----------- SHADE_Managed/src/Editor/Editor.cxx | 26 +++++++++++---- 4 files changed, 104 insertions(+), 30 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index cbbd6d1d..7107778d 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -214,6 +214,52 @@ namespace SHADE ImGuiInputTextFlags_EnterReturnsTrue); } + bool SHEditorUI::InputSlider(const std::string& label, int min, int max, int& value, bool* isHovered /*= nullptr*/) + { + ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); + ImGui::SameLine(); + return ImGui::SliderInt("##", &value, + static_cast(min), static_cast(max), "%d", + ImGuiInputTextFlags_EnterReturnsTrue); + } + + bool SHEditorUI::InputSlider(const std::string& label, unsigned int min, unsigned int max, unsigned int& value, bool* isHovered /*= nullptr*/) + { + int val = static_cast(value); + const bool CHANGED = InputSlider(label, min, max, val, isHovered); + if (CHANGED) + { + value = static_cast(val); + } + + return CHANGED; + } + + bool SHEditorUI::InputSlider(const std::string& label, float min, float max, float& value, bool* isHovered) + { + ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); + ImGui::SameLine(); + return ImGui::SliderFloat("##", &value, + static_cast(min), static_cast(max), "%.3f", + ImGuiInputTextFlags_EnterReturnsTrue); + } + + bool SHEditorUI::InputSlider(const std::string& label, double min, double max, double& value, bool* isHovered /*= nullptr*/) + { + float val = static_cast(value); + const bool CHANGED = InputSlider(label, min, max, val, isHovered); + if (CHANGED) + { + value = static_cast(val); + } + + return CHANGED; + } + bool SHEditorUI::InputVec2(const std::string& label, SHVec2& value, bool* isHovered) { static const std::vector COMPONENT_LABELS = { "X", "Y" }; diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index 276bc9f9..f3051aa1 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -230,9 +230,9 @@ namespace SHADE /// True if the value was changed. static bool InputAngle(const std::string& label, double& value, bool* isHovered = nullptr); /// - /// Creates a double slider field widget for double input. + /// Creates an int slider field widget for double input. ///
    - /// Wraps up ImGui::InputSliderFloat(). + /// Wraps up ImGui::SliderInt(). ///
    /// Label used to identify this widget. /// Minimum value of the slider. @@ -240,8 +240,43 @@ namespace SHADE /// Reference to the variable to store the result. /// Label used to identify this widget. + /// Minimum value of the slider. + /// Maximum value of the slider. + /// Reference to the variable to store the result. + /// Label used to identify this widget. + /// Minimum value of the slider. + /// Maximum value of the slider. + /// Reference to the variable to store the result. + /// Label used to identify this widget. + /// Minimum value of the slider. + /// Maximum value of the slider. + /// Reference to the variable to store the result. + /// (min), static_cast(max), "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - if (CHANGED) - { - value = static_cast(val); - } - - //return CHANGED; - return false; - } template inline bool SHEditorUI::InputEnumCombo(const std::string& label, Enum& v, int maxVal, std::function toStrFn, bool* isHovered) { diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index f0690c06..120f0274 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -75,12 +75,24 @@ using namespace System::Collections::Generic; NATIVE_TYPE oldVal = val; \ \ RangeAttribute^ rangeAttrib = hasAttribute(field); \ - std::string fieldName = Convert::ToNative(field->Name); \ - if ( \ - (rangeAttrib && SHEditorUI::InputSlider(fieldName, rangeAttrib->Min, rangeAttrib->Max, val, &isHovered)) \ - || \ - SHEditorUI::FUNC(fieldName, val, &isHovered) \ - ) \ + const std::string FIELD_NAME = Convert::ToNative(field->Name); \ + bool changed = false; \ + if (rangeAttrib) \ + { \ + changed = SHEditorUI::InputSlider \ + ( \ + FIELD_NAME, \ + static_cast(rangeAttrib->Min), \ + static_cast(rangeAttrib->Max), \ + val, &isHovered \ + ); \ + } \ + else \ + { \ + changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \ + } \ + \ + if (changed) \ { \ field->SetValue(object, val); \ registerUndoAction(object, field, val, oldVal); \ @@ -224,7 +236,7 @@ namespace SHADE } void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) { - bool isHovered = false; + bool isHovered = false; if RENDER_FIELD_RANGE (Int16, int, InputInt) else if RENDER_FIELD_RANGE (Int32, int, InputInt) From efe8ba4f115f7432bd39ea8a8fa6c893c6a4638c Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Wed, 19 Oct 2022 10:32:52 +0800 Subject: [PATCH 373/793] Added some editor camera controls --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 12 +++--- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 43 ++++++++++++++++++- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 9b84081f..a206d39a 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -37,24 +37,24 @@ namespace SHADE } void SHCameraComponent::SetPositionX(float x) noexcept { - position[0] = x; + position.x = x; dirtyView = true; } void SHCameraComponent::SetPositionY(float y) noexcept { - position[1] = y; + position.y = y; dirtyView = true; } void SHCameraComponent::SetPositionZ(float z) noexcept { - position[2] = z; + position.z = z; dirtyView = true; } void SHCameraComponent::SetPosition(float x,float y, float z) noexcept { - position[0] = x; - position[1] = y; - position[2] = z; + position.x = x; + position.y = y; + position.z = z; dirtyView = true; } void SHCameraComponent::SetPosition(SHVec3& pos) noexcept diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 24d96028..6be26133 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -12,10 +12,49 @@ namespace SHADE { SHCameraSystem* system = static_cast(GetSystem()); + SHVec3 target{ 0.0f,0.0f,1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + + SHCameraComponent& camera = system->editorCamera; + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(right, view); + + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::A)) { - system->editorCamera.SetPositionX(system->editorCamera.position[0] - dt * system->editorCamera.movementSpeed); - + system->editorCamera.position -= right * dt * camera.movementSpeed; + } + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::D)) + { + system->editorCamera.position += right * dt * camera.movementSpeed; + } + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::W)) + { + system->editorCamera.position += view * dt * camera.movementSpeed; + } + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::S)) + { + system->editorCamera.position -= view * dt * camera.movementSpeed; + } + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::Q)) + { + system->editorCamera.position += UP * dt * camera.movementSpeed; + } + if (SHInputManagerSystem::GetKey(SHInputManagerSystem::SH_KEYCODE::E)) + { + system->editorCamera.position -= UP * dt * camera.movementSpeed; } system->UpdateCameraComponent(system->editorCamera); } From 284ee12205264708f7c99a58ae888d4bef51b628 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 19 Oct 2022 15:32:07 +0800 Subject: [PATCH 374/793] Broken Camera --- Assets/Editor/Layouts/UserLayout.ini | 14 +- .../src/Application/SBApplication.cpp | 5 + SHADE_Engine/src/Camera/SHCameraComponent.cpp | 131 ++++++++++++++ SHADE_Engine/src/Camera/SHCameraComponent.h | 85 +++++++++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 162 ++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 47 +++++ .../Graphics/MiddleEnd/Interface/SHCamera.cpp | 10 +- .../Graphics/MiddleEnd/Interface/SHCamera.h | 118 ++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 23 +++ .../MiddleEnd/Interface/SHRenderer.cpp | 8 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 1 + 11 files changed, 534 insertions(+), 70 deletions(-) create mode 100644 SHADE_Engine/src/Camera/SHCameraComponent.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraComponent.h create mode 100644 SHADE_Engine/src/Camera/SHCameraSystem.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraSystem.h diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index e55aeb81..fea3559a 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -10,7 +10,7 @@ Collapsed=0 [Window][Hierarchy Panel] Pos=0,142 -Size=321,918 +Size=381,918 Collapsed=0 DockId=0x00000004,0 @@ -27,22 +27,22 @@ DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=321,92 +Size=381,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=323,48 -Size=1324,1012 +Pos=383,48 +Size=1264,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=617,298 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=90,200 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=321,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=381,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1324,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1264,1036 CentralNode=1 Selected=0x13926F0B DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 2d21be3f..8733e7b9 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -30,6 +30,7 @@ #include "Input/SHInputManager.h" #include "FRC/SHFramerateController.h" #include "AudioSystem/SHAudioSystem.h" +#include "Camera/SHCameraSystem.h" // Components #include "Graphics/MiddleEnd/Interface/SHRenderable.h" @@ -67,6 +68,7 @@ namespace Sandbox SHSystemManager::CreateSystem(); SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); #ifdef SHEDITOR SDL_Init(SDL_INIT_VIDEO); @@ -89,6 +91,8 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + + SHSystemManager::RegisterRoutine(); #ifdef SHEDITOR SHSystemManager::RegisterRoutine(); @@ -101,6 +105,7 @@ namespace Sandbox SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); //TODO: REMOVE AFTER PRESENTATION //SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf"); diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp new file mode 100644 index 00000000..d4078622 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -0,0 +1,131 @@ +#include "SHpch.h" +#include "SHCameraComponent.h" +#include "ECS_Base/Managers/SHComponentManager.h" + + +namespace SHADE +{ + SHCameraComponent::SHCameraComponent() + :yaw(0.0f), pitch(0.0f), roll(0.0f) + , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(1.0f) + , perspProj(false), dirtyView(true), dirtyProj(true) + , viewMatrix(), projMatrix() + , position() + { + ComponentFamily::GetID(); + } + + SHCameraComponent::~SHCameraComponent() + { + } + + void SHCameraComponent::SetYaw(float yaw) noexcept + { + this->yaw = yaw; + dirtyView = true; + } + + void SHCameraComponent::SetPitch(float pitch) noexcept + { + this->pitch = pitch; + dirtyView = true; + } + + void SHCameraComponent::SetRoll(float roll) noexcept + { + this->roll = roll; + dirtyView = true; + } + void SHCameraComponent::SetPositionX(float x) noexcept + { + position.x = x; + dirtyView = true; + } + void SHCameraComponent::SetPositionY(float y) noexcept + { + position.y = y; + dirtyView = true; + } + void SHCameraComponent::SetPositionZ(float z) noexcept + { + position.z = z; + dirtyView = true; + } + void SHCameraComponent::SetPosition(float x,float y, float z) noexcept + { + position.x = x; + position.y = y; + position.z = z; + dirtyView = true; + } + void SHCameraComponent::SetPosition(SHVec3& pos) noexcept + { + this->position = pos; + dirtyView = true; + } + + void SHCameraComponent::SetWidth(float width) noexcept + { + this->width = width; + dirtyProj = true; + } + + + void SHCameraComponent::SetHeight(float height) noexcept + { + this->height = height; + dirtyProj = true; + } + + void SHCameraComponent::SetNear(float znear) noexcept + { + this->zNear = znear; + dirtyProj = true; + } + + void SHCameraComponent::SetFar(float zFar) noexcept + { + this->zFar = zFar; + dirtyProj = true; + } + + void SHCameraComponent::SetFOV(float fov) noexcept + { + this->fov = fov; + dirtyProj = true; + } + + float SHCameraComponent::GetYaw() const noexcept + { + return yaw; + } + + float SHCameraComponent::GetPitch() const noexcept + { + return pitch; + } + float SHCameraComponent::GetRoll() const noexcept + { + return roll; + } + float SHCameraComponent::GetAspectRatio() const noexcept + { + return width/height; + } + + float SHCameraComponent::GetFOV() const noexcept + { + return fov; + } + + const SHMatrix& SHCameraComponent::GetViewMatrix() const noexcept + { + return viewMatrix; + } + + const SHMatrix& SHCameraComponent::GetProjMatrix() const noexcept + { + return projMatrix; + } + +} diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h new file mode 100644 index 00000000..c86fa160 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -0,0 +1,85 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" +#include "Math/Vector/SHVec3.h" +#include "Math/SHMatrix.h" +#include "SH_API.h" + +namespace SHADE +{ + + class SH_API SHCameraComponent final : public SHComponent + { + private: + + float yaw; + float pitch; + float roll; + + float width; + float height; + float zNear; + float zFar; + float fov; + + bool dirtyView; + bool dirtyProj; + + + SHMatrix viewMatrix; + SHMatrix projMatrix; + SHVec3 position; + + bool perspProj; + + + + + public: + friend class SHCameraSystem; + + SHCameraComponent(); + ~SHCameraComponent(); + + + //Getters and setters. + void SetYaw(float yaw) noexcept; + void SetPitch(float pitch) noexcept; + void SetRoll(float roll) noexcept; + void SetPositionX(float x) noexcept; + void SetPositionY(float y) noexcept; + void SetPositionZ(float z) noexcept; + void SetPosition(float x, float y, float z) noexcept; + void SetPosition(SHVec3& pos) noexcept; + + void SetWidth(float width) noexcept; + void SetHeight(float height) noexcept; + void SetNear(float znear) noexcept; + void SetFar(float zfar) noexcept; + void SetFOV(float fov) noexcept; + + + + float GetYaw() const noexcept; + float GetPitch() const noexcept; + float GetRoll() const noexcept; + + float GetAspectRatio() const noexcept; + float GetFOV() const noexcept; + + const SHMatrix& GetViewMatrix() const noexcept; + const SHMatrix& GetProjMatrix() const noexcept; + + + float movementSpeed; + SHVec3 turnSpeed; + + protected: + + + + + }; + + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp new file mode 100644 index 00000000..907dfa4f --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -0,0 +1,162 @@ +#include "SHpch.h" +#include "SHCameraSystem.h" +#include "Math/SHMathHelpers.h" +#include "Input/SHInputManager.h" + + + +namespace SHADE +{ + + void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept + { + SHCameraSystem* system = static_cast(GetSystem()); + + SHVec3 target{ 0.0f,0.0f,-1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + auto& camera = system->editorCamera; + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(view, right); + + + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) + { + system->editorCamera.position -= SHVec3(1.0,0.0,0.0) * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::D)) + { + system->editorCamera.position += right * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::W)) + { + system->editorCamera.position += view * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::S)) + { + system->editorCamera.position -= view * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::Q)) + { + system->editorCamera.position += UP * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::E)) + { + system->editorCamera.position -= UP * dt * camera.movementSpeed; + system->editorCamera.dirtyView = true; + } + system->UpdateCameraComponent(system->editorCamera); + } + + void SHCameraSystem::Init(void) + { + editorCamera.SetPosition(0.0f, 0.0f, 0.0f); + editorCamera.SetPitch(0.0f); + editorCamera.SetYaw(0.0f); + editorCamera.SetRoll(0.0f); + //editorCamera.movementSpeed = 100.0f; + + } + + void SHCameraSystem::Exit(void) + { + + } + + SHCameraComponent* SHCameraSystem::GetEditorCamera(void) noexcept + { + return &editorCamera; + } + + void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept + { + if (camera.dirtyView) + { + SHVec3 target{ 0.0f,0.0f,-1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(view, right); + + camera.viewMatrix = SHMatrix::Identity; + camera.viewMatrix(0, 0) = right[0]; + camera.viewMatrix(0, 1) = right[1]; + camera.viewMatrix(0, 2) = right[2]; + + camera.viewMatrix(1, 0) = UP[0]; + camera.viewMatrix(1, 1) = UP[1]; + camera.viewMatrix(1, 2) = UP[2]; + + camera.viewMatrix(2, 0) = view[0]; + camera.viewMatrix(2, 1) = view[1]; + camera.viewMatrix(2, 2) = view[2]; + + camera.viewMatrix(0, 3) = -right.Dot(camera.position); + camera.viewMatrix(1, 3) = -UP.Dot(camera.position); + camera.viewMatrix(2, 3) = -view.Dot(camera.position); + + camera.dirtyView = false; + } + if (camera.dirtyProj == true) + { + if (camera.perspProj == true) + { + const float ASPECT_RATIO = camera.GetAspectRatio(); + const float TAN_HALF_FOV = tan(camera.fov * 0.5f); + camera.projMatrix = SHMatrix::Identity; + camera.projMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); + camera.projMatrix(1, 1) = 1.0f / TAN_HALF_FOV; + camera.projMatrix(2, 2) = camera.zFar / (camera.zFar - camera.zNear); + camera.projMatrix(2, 3) = 1.0f; + camera.projMatrix(3, 2) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); + + camera.dirtyProj = false; + } + else + { + const float R = camera.width * 0.5f; + const float L = -R; + const float T = camera.height * 0.5f; + const float B = -T; + + camera.projMatrix = SHMatrix::Identity; + camera.projMatrix(0, 0) = 2.0f / (R - L); + camera.projMatrix(1, 1) = 2.0f / (B - T); + camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); + camera.projMatrix(3, 0) = -(R + L) / (R - L); + camera.projMatrix(3, 1) = -(B + T) / (B - T); + camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); + + camera.dirtyProj = false; + } + } + } + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h new file mode 100644 index 00000000..fe7fd145 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -0,0 +1,47 @@ +#pragma once + +#include "ECS_Base/System/SHSystem.h" +#include "SHCameraComponent.h" +#include "ECS_Base/System/SHSystemRoutine.h" +#include "SH_API.h" + + +namespace SHADE +{ + class SH_API SHCameraSystem final : public SHSystem + { + private: + //A camera component that represents editor camera. + //This is not tied to any entity. Hence this EID should not be used. + SHCameraComponent editorCamera; + + + + public: + SHCameraSystem(void) = default; + virtual ~SHCameraSystem(void) = default; + + void Init (void); + void Exit (void); + + class SH_API EditorCameraUpdate final : public SHSystemRoutine + { + public: + + EditorCameraUpdate() : SHSystemRoutine("Editor Camera Update", true) { }; + virtual void Execute(double dt) noexcept override final; + + }; + friend class EditorCameraUpdate; + + SHCameraComponent* GetEditorCamera (void) noexcept; + + protected: + + void UpdateCameraComponent(SHCameraComponent& camera) noexcept; + + }; + + + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp index 2abdfa86..194febbf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.cpp @@ -97,14 +97,16 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - SHMatrix SHCamera::GetViewMatrix() const + SHMatrix SHCamera::GetViewMatrix() { - return viewMatrix; + updateMatrices(); + return viewMatrix; } - SHMatrix SHCamera::GetProjectionMatrix() const + SHMatrix SHCamera::GetProjectionMatrix() { - return projMatrix; + updateMatrices(); + return projMatrix; } SHMatrix SHCamera::GetViewProjectionMatrix() { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h index 3a945109..b23614aa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHCamera.h @@ -3,11 +3,11 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 -\brief +\brief + - Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once @@ -17,64 +17,66 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /***********************************************************************************/ - /*! - \brief - Object that manages the view and projection transformations for rendering - a 3D scene. - */ - /***********************************************************************************/ - class SHCamera - { - public: - /*-----------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*-----------------------------------------------------------------------------*/ - /*-----------------------------------------------------------------------------*/ - /* View Set Functions */ - /*-----------------------------------------------------------------------------*/ - void SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up); + /***********************************************************************************/ + /*! + \brief + Object that manages the view and projection transformations for rendering + a 3D scene. + */ + /***********************************************************************************/ + class SHCamera + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*-----------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------*/ + /* View Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetLookAt(const SHVec3& pos, const SHVec3& target, const SHVec3& up); - /*-----------------------------------------------------------------------------*/ - /* Projection Set Functions */ - /*-----------------------------------------------------------------------------*/ - void SetPerspective(float fov, float width, float height, float zNear, float zFar); - void SetOrthographic(float width, float height, float zNear, float zFar); + /*-----------------------------------------------------------------------------*/ + /* Projection Set Functions */ + /*-----------------------------------------------------------------------------*/ + void SetPerspective(float fov, float width, float height, float zNear, float zFar); + void SetOrthographic(float width, float height, float zNear, float zFar); + + //void SetPerspectiveMatrixExplicit ( - /*-----------------------------------------------------------------------------*/ - /* Getter Functions */ - /*-----------------------------------------------------------------------------*/ - SHMatrix GetViewMatrix() const; - SHMatrix GetProjectionMatrix() const; - SHMatrix GetViewProjectionMatrix(); - SHMatrix GetInverseViewMatrix() const; - SHMatrix GetInverseProjectionMatrix() const; - SHMatrix GetInverseViewProjectionMatrix(); + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + SHMatrix GetViewMatrix(); + SHMatrix GetProjectionMatrix(); + SHMatrix GetViewProjectionMatrix(); + SHMatrix GetInverseViewMatrix() const; + SHMatrix GetInverseProjectionMatrix() const; + SHMatrix GetInverseViewProjectionMatrix(); - /*-----------------------------------------------------------------------------*/ - /* Mapping Functions */ - /*-----------------------------------------------------------------------------*/ - SHVec3 ScreenToWorld(const SHVec3& vec) const; - SHVec3 WorldToScreen(const SHVec3& vec) const; - SHVec3 CameraToWorld(const SHVec3& vec) const; - SHVec3 WorldToCamera(const SHVec3& vec) const; + /*-----------------------------------------------------------------------------*/ + /* Mapping Functions */ + /*-----------------------------------------------------------------------------*/ + SHVec3 ScreenToWorld(const SHVec3& vec) const; + SHVec3 WorldToScreen(const SHVec3& vec) const; + SHVec3 CameraToWorld(const SHVec3& vec) const; + SHVec3 WorldToCamera(const SHVec3& vec) const; - private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - SHMatrix viewMatrix; - SHMatrix projMatrix; - SHMatrix vpMatrix; - SHMatrix inverseViewMatrix; - SHMatrix inverseProjMatrix; - SHMatrix inverseVpMatrix; - bool isDirty = true; + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + SHMatrix viewMatrix; + SHMatrix projMatrix; + SHMatrix vpMatrix; + SHMatrix inverseViewMatrix; + SHMatrix inverseProjMatrix; + SHMatrix inverseVpMatrix; + bool isDirty = true; - /*-----------------------------------------------------------------------------*/ - /* Helper Functions */ - /*-----------------------------------------------------------------------------*/ - void updateMatrices(); - static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHVec3& vec); - }; + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void updateMatrices(); + static SHVec3 multiplyHomogenous(const SHMatrix& mat, const SHVec3& vec); + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 143f3bf5..90c46ada 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -16,6 +16,9 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Instance/SHVkInstance.h" #include "Graphics/Windowing/Surface/SHVkSurface.h" #include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Camera/SHCameraSystem.h" +#include "Editor/SHEditor.hpp" +#include "ECS_Base/Managers/SHSystemManager.h" //#include "SHRenderer.h" #include "Graphics/Windowing/SHWindow.h" #include "Graphics/MiddleEnd/PerFrame/SHPerFrameData.h" @@ -318,6 +321,26 @@ namespace SHADE // Bind textures + auto cameraSystem = SHSystemManager::GetSystem(); + +#ifdef SHEDITOR + + auto editorSystem = SHSystemManager::GetSystem(); + if (editorSystem->editorState != SHEditor::State::PLAY) + { + //cameraSystem->GetEditorCamera()->GetViewMatrix(); + //cameraSystem->GetEditorCamera()->GetProjMatrix(); + worldRenderer->SetViewProjectionMatrix(cameraSystem->GetEditorCamera()->GetViewMatrix() ); + //worldRenderer->SetViewProjectionMatrix(SHMatrix::Inverse(cameraSystem->GetEditorCamera()->GetViewMatrix()/* * cameraSystem->GetEditorCamera()->GetProjMatrix()*/)); + } + else + { + // main camera + } + +#else + // main camera +#endif // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 425e9c81..f2fb78f0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -77,7 +77,7 @@ namespace SHADE { if (camera) { - cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); + //cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; @@ -90,6 +90,12 @@ namespace SHADE { } + void SHRenderer::SetViewProjectionMatrix(SHMatrix const& vpMatrix) noexcept + { + cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); + //cpuCameraData.viewProjectionMatrix = vpMatrix * camera->GetProjectionMatrix(); + } + Handle SHRenderer::GetRenderGraph(void) const noexcept { return renderGraph; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 0feea840..57c63e7f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -78,6 +78,7 @@ namespace SHADE void Draw(uint32_t frameIndex, Handle descPool) noexcept; void UpdateDataAndBind (Handle cmdBuffer, uint32_t frameIndex) noexcept; void UpdateCameraDataToBuffer (void) noexcept; + void SetViewProjectionMatrix (SHMatrix const& vpMatrix) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ From a3c4c347bb4fb899a6bcaf9b03b9ffafd82b1a77 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 19 Oct 2022 16:06:26 +0800 Subject: [PATCH 375/793] Added Time class for C# --- SHADE_Engine/src/FRC/SHFramerateController.h | 1 - SHADE_Managed/src/Engine/Time.cxx | 29 ++++++++++++++ SHADE_Managed/src/Engine/Time.hxx | 41 ++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 SHADE_Managed/src/Engine/Time.cxx create mode 100644 SHADE_Managed/src/Engine/Time.hxx diff --git a/SHADE_Engine/src/FRC/SHFramerateController.h b/SHADE_Engine/src/FRC/SHFramerateController.h index b9637cf2..dbabbac5 100644 --- a/SHADE_Engine/src/FRC/SHFramerateController.h +++ b/SHADE_Engine/src/FRC/SHFramerateController.h @@ -14,7 +14,6 @@ #pragma once #include -#include "Tools/SHLogger.h" #include "SH_API.h" namespace SHADE diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx new file mode 100644 index 00000000..ff0628e7 --- /dev/null +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -0,0 +1,29 @@ +/************************************************************************************//*! +\file Time.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 19, 2022 +\brief This file is present so that the properties in Time.hxx would be compiled + into the DLL. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Time.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + double Time::DeltaTime::get() + { + return SHFrameRateController::GetRawDeltaTime(); + } +} \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/Time.hxx b/SHADE_Managed/src/Engine/Time.hxx new file mode 100644 index 00000000..969eea03 --- /dev/null +++ b/SHADE_Managed/src/Engine/Time.hxx @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file Time.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 19, 2022 +\brief Contains the definition of the Time static class and the definition of + its properties. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "FRC/SHFramerateController.h" + +namespace SHADE +{ + /// + /// Static class that contains the functions for working with time. + /// + public ref class Time abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Time taken to process the previous frame. + /// Note, is affected by TimeScale. Use UnscaledDeltaTime if you wish to retrieve + /// real world time. This is also affected by MaxDeltaTime clamping that + /// UnscaledDeltaTime is subject to. + /// + static property double DeltaTime + { + double get(); + } + }; +} \ No newline at end of file From d9136de134b772deaec6558cc8a14efac659bb58 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 19 Oct 2022 16:53:45 +0800 Subject: [PATCH 376/793] Integrated Daniel's camera Still need to integrate camera directors --- Assets/Editor/Layouts/UserLayout.ini | 14 ++-- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 2 +- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 65 ++++++++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 5 +- .../MiddleEnd/Interface/SHRenderer.cpp | 4 +- 5 files changed, 52 insertions(+), 38 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index fea3559a..ded63438 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -10,7 +10,7 @@ Collapsed=0 [Window][Hierarchy Panel] Pos=0,142 -Size=381,918 +Size=650,918 Collapsed=0 DockId=0x00000004,0 @@ -27,22 +27,22 @@ DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=381,92 +Size=650,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=383,48 -Size=1264,1012 +Pos=652,48 +Size=995,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=90,200 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=381,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=650,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1264,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=995,1036 CentralNode=1 Selected=0x13926F0B DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index d4078622..650ed3c5 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -8,7 +8,7 @@ namespace SHADE SHCameraComponent::SHCameraComponent() :yaw(0.0f), pitch(0.0f), roll(0.0f) , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(1.0f) - , perspProj(false), dirtyView(true), dirtyProj(true) + , perspProj(true), dirtyView(true), dirtyProj(true) , viewMatrix(), projMatrix() , position() { diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 907dfa4f..86fd9f80 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -11,29 +11,30 @@ namespace SHADE void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept { SHCameraSystem* system = static_cast(GetSystem()); - - SHVec3 target{ 0.0f,0.0f,-1.0f }; - SHVec3 up = { 0.0f,1.0f,0.0f }; + auto& camera = system->editorCamera; + SHVec3 target{ 0.0f,0.0f,-1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; - auto& camera = system->editorCamera; - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + target += camera.position; - target = SHVec3::Normalise(target); + //SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + //SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - SHVec3::RotateZ(up, camera.roll); - up = SHVec3::Normalise(up); + //target = SHVec3::Normalise(target); + + //SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); - SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(view, right); + SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); + SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); + const SHVec3 UP = SHVec3::Cross(view, right); if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { - system->editorCamera.position -= SHVec3(1.0,0.0,0.0) * dt * camera.movementSpeed; + system->editorCamera.position -= right * dt * camera.movementSpeed; system->editorCamera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::D)) @@ -70,7 +71,7 @@ namespace SHADE editorCamera.SetPitch(0.0f); editorCamera.SetYaw(0.0f); editorCamera.SetRoll(0.0f); - //editorCamera.movementSpeed = 100.0f; + editorCamera.movementSpeed = 2.0f; } @@ -91,13 +92,15 @@ namespace SHADE SHVec3 target{ 0.0f,0.0f,-1.0f }; SHVec3 up = { 0.0f,1.0f,0.0f }; - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + target += camera.position; - target = SHVec3::Normalise(target); + //SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + //SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - SHVec3::RotateZ(up, camera.roll); + //target = SHVec3::Normalise(target); + + //SHVec3::RotateZ(up, camera.roll); up = SHVec3::Normalise(up); @@ -128,14 +131,28 @@ namespace SHADE { if (camera.perspProj == true) { - const float ASPECT_RATIO = camera.GetAspectRatio(); - const float TAN_HALF_FOV = tan(camera.fov * 0.5f); + const float ASPECT_RATIO = (camera.GetAspectRatio()); + const float TAN_HALF_FOV = tan(SHMath::DegreesToRadians(camera.fov) * 0.5f); camera.projMatrix = SHMatrix::Identity; camera.projMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); camera.projMatrix(1, 1) = 1.0f / TAN_HALF_FOV; camera.projMatrix(2, 2) = camera.zFar / (camera.zFar - camera.zNear); - camera.projMatrix(2, 3) = 1.0f; - camera.projMatrix(3, 2) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); + camera.projMatrix(3, 3) = 0.0f; + + camera.projMatrix(3, 2) = 1.0f; + camera.projMatrix(2, 3) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); + + //const float fov_rad = SHMath::DegreesToRadians(camera.fov); + //const float focal_length = 1.0f / tan(fov_rad * 0.5f); + + //camera.projMatrix(0,0) = focal_length / camera.GetAspectRatio(); + //camera.projMatrix(1,1) = -focal_length; + //camera.projMatrix(2,2) = camera.zNear / (camera.zFar - camera.zNear); + //camera.projMatrix(2,3) = camera.zFar * (camera.zNear / (camera.zFar - camera.zNear)); + //camera.projMatrix(3,2) = -1.0f; + //camera.projMatrix(3,3) = 0.0f; + + //camera.projMatrix = SHMatrix::Inverse(camera.projMatrix); camera.dirtyProj = false; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 90c46ada..d1dc5201 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -328,10 +328,7 @@ namespace SHADE auto editorSystem = SHSystemManager::GetSystem(); if (editorSystem->editorState != SHEditor::State::PLAY) { - //cameraSystem->GetEditorCamera()->GetViewMatrix(); - //cameraSystem->GetEditorCamera()->GetProjMatrix(); - worldRenderer->SetViewProjectionMatrix(cameraSystem->GetEditorCamera()->GetViewMatrix() ); - //worldRenderer->SetViewProjectionMatrix(SHMatrix::Inverse(cameraSystem->GetEditorCamera()->GetViewMatrix()/* * cameraSystem->GetEditorCamera()->GetProjMatrix()*/)); + worldRenderer->SetViewProjectionMatrix(SHMatrix::Transpose(cameraSystem->GetEditorCamera()->GetProjMatrix() * cameraSystem->GetEditorCamera()->GetViewMatrix())); } else { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index f2fb78f0..2532f308 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -92,8 +92,8 @@ namespace SHADE void SHRenderer::SetViewProjectionMatrix(SHMatrix const& vpMatrix) noexcept { - cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); - //cpuCameraData.viewProjectionMatrix = vpMatrix * camera->GetProjectionMatrix(); + //cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); + cpuCameraData.viewProjectionMatrix = vpMatrix; } Handle SHRenderer::GetRenderGraph(void) const noexcept From 603470eeb6c82ea82844e9e2f3d1b859862af7a1 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 19 Oct 2022 17:06:37 +0800 Subject: [PATCH 377/793] Fixed some camera resizing issues --- Assets/Editor/Layouts/UserLayout.ini | 26 +++++++++---------- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 16 ++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 ++++++ 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index ded63438..33b4ccfd 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 +Pos=0,1389 +Size=2547,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=1920,1012 +Size=2547,1341 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,142 -Size=650,918 +Pos=0,172 +Size=571,1217 Collapsed=0 DockId=0x00000004,0 @@ -20,29 +20,29 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=1649,48 -Size=271,1012 +Pos=2276,48 +Size=271,1341 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=650,92 +Size=571,122 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=652,48 -Size=995,1012 +Pos=573,48 +Size=1701,1341 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=2547,1341 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=650,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=995,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1074,1036 CentralNode=1 Selected=0x13926F0B DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 86fd9f80..9c97131a 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -15,15 +15,15 @@ namespace SHADE SHVec3 target{ 0.0f,0.0f,-1.0f }; SHVec3 up = { 0.0f,1.0f,0.0f }; - target += camera.position; - //SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - //SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + target += camera.position; ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); //target = SHVec3::Normalise(target); - //SHVec3::RotateZ(up, camera.roll); + SHVec3::RotateZ(up, camera.roll); up = SHVec3::Normalise(up); @@ -92,15 +92,15 @@ namespace SHADE SHVec3 target{ 0.0f,0.0f,-1.0f }; SHVec3 up = { 0.0f,1.0f,0.0f }; - target += camera.position; - //SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - //SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + target += camera.position; ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); //target = SHVec3::Normalise(target); - //SHVec3::RotateZ(up, camera.roll); + SHVec3::RotateZ(up, camera.roll); up = SHVec3::Normalise(up); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index d1dc5201..06762db8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -724,6 +724,14 @@ namespace SHADE worldCamera->SetPerspective(90.0f, static_cast(resizeWidth), static_cast(resizeHeight), 0.0f, 100.0f); + auto cameraSystem = SHSystemManager::GetSystem(); +#ifdef SHEDITOR + cameraSystem->GetEditorCamera()->SetWidth(resizeWidth); + cameraSystem->GetEditorCamera()->SetHeight(resizeHeight); +#else + +#endif + for (auto& semaHandle : graphSemaphores) semaHandle = device->CreateSemaphore(); From a7e8320008c8d658d45a955aa0f4759792ae7f10 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 19 Oct 2022 17:23:25 +0800 Subject: [PATCH 378/793] Copy/Paste Entities --- .../HierarchyPanel/SHHierarchyPanel.cpp | 13 ++++- .../src/Serialization/SHSerialization.cpp | 47 +++++++++++++++--- .../src/Serialization/SHSerialization.h | 6 ++- .../src/Tools/SHClipboardUtilities.cpp | 49 +++++++++++++++++++ SHADE_Engine/src/Tools/SHClipboardUtilities.h | 13 +++++ 5 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 SHADE_Engine/src/Tools/SHClipboardUtilities.cpp create mode 100644 SHADE_Engine/src/Tools/SHClipboardUtilities.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index c2666a0d..27e46d98 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -22,6 +22,7 @@ #include #include "Serialization/SHSerialization.h" +#include "Tools/SHClipboardUtilities.h" namespace SHADE @@ -80,6 +81,8 @@ namespace SHADE void SHHierarchyPanel::SetScrollTo(EntityID eid) { + if(eid == MAX_EID) + return; scrollTo = eid; } @@ -185,7 +188,15 @@ namespace SHADE } if(ImGui::Selectable("Copy")) { - SHLOG_INFO(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)) + SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + } + if(ImGui::Selectable("Paste")) + { + SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard())); + } + if(ImGui::Selectable("Paste as Child")) + { + SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), eid)); } if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index e259fbbc..f6d29066 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -52,11 +52,13 @@ namespace SHADE out << YAML::EndSeq; } - static void DeserializeEntity(YAML::iterator& it, YAML::Node const& node, std::vector& createdEntities, EntityID parentEID = MAX_EID) + static EntityID DeserializeEntity(YAML::iterator& it, YAML::Node const& node, std::vector& createdEntities, EntityID parentEID = MAX_EID) { - if (!node[EIDNode]) - return; - EntityID eid = node[EIDNode].as(); + EntityID eid = MAX_EID; + if(!node) + return eid; + if (node[EIDNode]) + eid = node[EIDNode].as(); std::string name = "Default"; if (node[EntityNameNode]) name = node[EntityNameNode].as(); @@ -77,6 +79,7 @@ namespace SHADE } } } + return eid; } void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) @@ -111,7 +114,11 @@ namespace SHADE { DeserializeEntity(it, (*it), createdEntities); } - + if(createdEntities.empty()) + { + SHLOG_ERROR("Failed to create entities from deserializaiton") + return; + } //Initialize Entity auto entityVecIt = createdEntities.begin(); for (auto it = entities.begin(); it != entities.end(); ++it) @@ -130,17 +137,19 @@ namespace SHADE } } - std::string SHSerialization::SerializeEntitiesToString(std::vector const& entities) + std::string SHSerialization::SerializeEntitiesToString(std::vector const& entities) noexcept { YAML::Emitter out; YAML::Node node; auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + out << YAML::BeginSeq; for (auto const& eid : entities) { auto entityNode = sceneGraph.GetNode(eid); EmitEntity(entityNode, out); } - return std::basic_string(out.c_str()); + out << YAML::EndSeq; + return std::string(out.c_str()); } void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) @@ -182,6 +191,30 @@ namespace SHADE return node; } + EntityID SHSerialization::DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID) noexcept + { + if(data.empty()) + return MAX_EID; + YAML::Node entities = YAML::Load(data.c_str()); + EntityID eid{MAX_EID}; + std::vector createdEntities; + for(auto it = entities.begin(); it != entities.end(); ++it) + { + eid = DeserializeEntity(it, *it, createdEntities, parentEID); + } + if(createdEntities.empty()) + { + SHLOG_ERROR("Failed to create entities from deserializaiton") + return MAX_EID; + } + auto entityVecIt = createdEntities.begin(); + for(auto it = entities.begin(); it != entities.end(); ++it) + { + InitializeEntity(*it, *entityVecIt++); + } + return eid; + } + template, bool> = true> std::optional GetComponentID(YAML::Node const& componentNode) { diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index d247de7a..6b078dba 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -28,14 +28,18 @@ namespace SHADE static void SerializeSceneToFile(std::filesystem::path const& path); static std::string SerializeSceneToString(); static void SerializeSceneToEmitter(YAML::Emitter& out); + static void DeserializeSceneFromFile(std::filesystem::path const& path); static void EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out); - static std::string SerializeEntitiesToString(std::vector const& entities); + + static std::string SerializeEntitiesToString(std::vector const& entities) noexcept; static void SerializeEntityToFile(std::filesystem::path const& path); static YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode); + static EntityID DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID = MAX_EID) noexcept; + static std::vector GetComponentIDList(YAML::Node const& componentsNode); private: static void InitializeEntity(YAML::Node const& entityNode, EntityID const& eid); diff --git a/SHADE_Engine/src/Tools/SHClipboardUtilities.cpp b/SHADE_Engine/src/Tools/SHClipboardUtilities.cpp new file mode 100644 index 00000000..061a5ec6 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHClipboardUtilities.cpp @@ -0,0 +1,49 @@ +#include "SHpch.h" +#include "SHClipboardUtilities.h" + +namespace SHADE +{ + void SHClipboardUtilities::WriteToClipboard(std::string const& str) noexcept + { + if(str.empty()) + return; + HWND const hwnd = GetDesktopWindow(); + OpenClipboard(hwnd); + EmptyClipboard(); + + auto const size = str.size() + 1; + const HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, size); + if(hGlobal) + { + std::memcpy(GlobalLock(hGlobal), str.c_str(), size); + GlobalUnlock(hGlobal); + SetClipboardData(CF_TEXT, hGlobal); + } + else + { + SHLOG_ERROR("Failed to write to clipboard: {}", str.c_str()) + } + CloseClipboard(); + GlobalFree(hGlobal); + } + + std::string const SHClipboardUtilities::GetDataFromClipboard() noexcept + { + HWND const hwnd = GetDesktopWindow(); + if(!OpenClipboard(hwnd)) + { + SHLOG_ERROR("Failed to open clipboard") + return std::string(); + } + + if(HANDLE const dataHandle = GetClipboardData(CF_TEXT); dataHandle) + { + std::string data(static_cast(GlobalLock(dataHandle))); + GlobalUnlock(dataHandle); + CloseClipboard(); + return data; + } + CloseClipboard(); + return std::string(); + } +} diff --git a/SHADE_Engine/src/Tools/SHClipboardUtilities.h b/SHADE_Engine/src/Tools/SHClipboardUtilities.h new file mode 100644 index 00000000..7f3acdbe --- /dev/null +++ b/SHADE_Engine/src/Tools/SHClipboardUtilities.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace SHADE +{ + class SHClipboardUtilities + { + public: + static void WriteToClipboard(std::string const& str) noexcept; + static std::string const GetDataFromClipboard() noexcept; + }; +} \ No newline at end of file From 51eba31ad4d5a5ea6a9ca3a6637c0e5de41a57a4 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 19 Oct 2022 18:38:11 +0800 Subject: [PATCH 379/793] Added animation asset class Added animation reading from assimp scene Separated assimp loading from mesh loader in preparation for exe use --- SHADE_Engine/SHAnimationAsset.h | 30 ++++ .../src/Assets/Asset Types/SHAnimationAsset.h | 30 ++++ .../src/Assets/Libraries/SHAssimpLibrary.cpp | 143 ++++++++++++++++ .../src/Assets/Libraries/SHAssimpLibrary.h | 36 ++++ .../src/Assets/Libraries/SHMeshLoader.cpp | 162 ------------------ .../src/Assets/Libraries/SHMeshLoader.h | 16 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 77 +++++---- SHADE_Engine/src/Assets/SHAssetManager.h | 9 +- 8 files changed, 287 insertions(+), 216 deletions(-) create mode 100644 SHADE_Engine/SHAnimationAsset.h create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h create mode 100644 SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h diff --git a/SHADE_Engine/SHAnimationAsset.h b/SHADE_Engine/SHAnimationAsset.h new file mode 100644 index 00000000..d8d0ffb1 --- /dev/null +++ b/SHADE_Engine/SHAnimationAsset.h @@ -0,0 +1,30 @@ +/*************************************************************************//** + * \file SHAnimationAsset.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include +#include +#include "SH_API.power h" + +namespace SHADE +{ + struct SH_API SHAnimationAsset + { + std::string name; + + std::vector nodeChannels; + std::vector meshChannels; + std::vector morphMeshChannels; + + double duration; + double ticksPerSecond; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h new file mode 100644 index 00000000..76f4c0ac --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h @@ -0,0 +1,30 @@ +/*************************************************************************//** + * \file SHAnimationAsset.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include +#include +#include "SH_API.h" + +namespace SHADE +{ + struct SH_API SHAnimationAsset + { + std::string name; + + std::vector nodeChannels; + std::vector meshChannels; + std::vector morphMeshChannels; + + double duration; + double ticksPerSecond; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp new file mode 100644 index 00000000..feea9f35 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp @@ -0,0 +1,143 @@ +/*************************************************************************//** + * \file SHAssimpLibrary.cpp + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#include "SHpch.h" +#include "SHAssimpLibrary.h" +#include + +namespace SHADE +{ + Assimp::Importer SHAssimpLibrary::aiImporter; + + void SHAssimpLibrary::ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept + { + for (size_t i {0}; i < node.mNumMeshes; ++i) + { + aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; + meshes.push_back(ProcessMesh(*mesh)); + } + + for (size_t i{ 0 }; i < node.mNumChildren; ++i) + { + ProcessNode(*node.mChildren[i], scene, meshes); + } + } + + void SHAssimpLibrary::ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept + { + if (scene.HasAnimations()) + { + std::vector anims(scene.mNumAnimations); + for (auto i{0}; i < scene.mNumAnimations; ++i) + { + auto const& anim {*scene.mAnimations[i]}; + + anims[i].name = anim.mName.C_Str(); + + anims[i].duration = anim.mDuration; + anims[i].ticksPerSecond = anim.mTicksPerSecond; + + std::copy_n(anim.mChannels, anim.mNumChannels, anims[i].nodeChannels.data()); + std::copy_n(anim.mMeshChannels, anim.mNumMeshChannels, anims[i].meshChannels.data()); + std::copy_n(anim.mMorphMeshChannels, anim.mNumMorphMeshChannels, anims[i].morphMeshChannels.data()); + } + } + } + + SHMeshAsset SHAssimpLibrary::ProcessMesh(aiMesh const& mesh) noexcept + { + SHMeshAsset result + { + .compiled { false}, + .changed { false } + }; + + for (size_t i{0}; i < mesh.mNumVertices; ++i) + { + // Vertex position + SHVec3 vertex; + vertex.x = mesh.mVertices[i].x; + vertex.y = mesh.mVertices[i].y; + vertex.z = mesh.mVertices[i].z; + result.vertexPosition.push_back(vertex); + + // Tex coords + SHVec2 texCoord{0.f, 0.f}; + if (mesh.mTextureCoords[0]) + { + texCoord.x = mesh.mTextureCoords[0][i].x; + texCoord.y = mesh.mTextureCoords[0][i].y; + } + result.texCoords.push_back(texCoord); + + // Normals + SHVec3 normal{0.f, 0.f, 0.f}; + if (mesh.mNormals) + { + normal.x = mesh.mNormals[i].x; + normal.y = mesh.mNormals[i].y; + normal.z = mesh.mNormals[i].z; + } + result.vertexNormal.push_back(normal); + + // Tangent + SHVec3 tangent{0.f, 0.f, 0.f}; + if (mesh.mTangents) + { + tangent.x = mesh.mTangents[i].x; + tangent.y = mesh.mTangents[i].y; + tangent.z = mesh.mTangents[i].z; + } + result.vertexTangent.push_back(tangent); + } + + for (size_t i {0}; i < mesh.mNumFaces; ++i) + { + aiFace face = mesh.mFaces[i]; + for (size_t j{0}; j < face.mNumIndices; ++j) + { + result.indices.push_back(face.mIndices[j]); + } + } + + result.header.vertexCount = static_cast(result.vertexPosition.size()); + result.header.indexCount = static_cast(result.indices.size()); + result.header.meshName = mesh.mName.C_Str(); + + return result; + } + + void SHAssimpLibrary::LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept + { + const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), + aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons + | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping + | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) + | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master + | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible + | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing + | aiProcess_RemoveRedundantMaterials // remove redundant materials + | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors + | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs + ); + + if (!scene || !scene->HasMeshes()) + { + SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); + return; + } + + ExtractAnimations(*scene, anims); + + ProcessNode(*scene->mRootNode, *scene, meshes); + + aiImporter.FreeScene(); + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h new file mode 100644 index 00000000..a4a0447a --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h @@ -0,0 +1,36 @@ +/*************************************************************************//** + * \file SHAssimpLibrary.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ + +#pragma once +#include +#include +#include +#include "../SHAssetMacros.h" +#include "../Asset Types/SHMeshAsset.h" +#include "../Asset Types/SHAnimationAsset.h" + +namespace SHADE +{ + class SHAssimpLibrary + { + private: + using MeshVectorRef = std::vector&; + using AnimVectorRef = std::vector&; + + static Assimp::Importer aiImporter; + static void ProcessNode(aiNode const& node, aiScene const& scene,MeshVectorRef meshes) noexcept; + static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept; + static SHMeshAsset ProcessMesh(aiMesh const& mesh) noexcept; + + public: + static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 4bfa2d9b..73fed1fb 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -12,128 +12,10 @@ *****************************************************************************/ #include "SHpch.h" #include "SHMeshLoader.h" -#include #include namespace SHADE { - Assimp::Importer SHMeshLoader::aiImporter; - - void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) noexcept - { - for (size_t i {0}; i < node.mNumMeshes; ++i) - { - aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; - meshes.push_back(ProcessMesh(*mesh, scene)); - } - - for (size_t i{ 0 }; i < node.mNumChildren; ++i) - { - ProcessNode(*node.mChildren[i], scene, meshes); - } - } - - SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept - { - (void)scene; - - SHMeshAsset result - { - .compiled { false}, - .changed { false } - }; - - for (size_t i{0}; i < mesh.mNumVertices; ++i) - { - // Vertex position - SHVec3 vertex; - vertex.x = mesh.mVertices[i].x; - vertex.y = mesh.mVertices[i].y; - vertex.z = mesh.mVertices[i].z; - result.vertexPosition.push_back(vertex); - - // Tex coords - SHVec2 texCoord{0.f, 0.f}; - if (mesh.mTextureCoords[0]) - { - texCoord.x = mesh.mTextureCoords[0][i].x; - texCoord.y = mesh.mTextureCoords[0][i].y; - } - result.texCoords.push_back(texCoord); - - // Normals - SHVec3 normal{0.f, 0.f, 0.f}; - if (mesh.mNormals) - { - normal.x = mesh.mNormals[i].x; - normal.y = mesh.mNormals[i].y; - normal.z = mesh.mNormals[i].z; - } - result.vertexNormal.push_back(normal); - - // Tangent - SHVec3 tangent{0.f, 0.f, 0.f}; - if (mesh.mTangents) - { - tangent.x = mesh.mTangents[i].x; - tangent.y = mesh.mTangents[i].y; - tangent.z = mesh.mTangents[i].z; - } - result.vertexTangent.push_back(tangent); - } - - for (size_t i {0}; i < mesh.mNumFaces; ++i) - { - aiFace face = mesh.mFaces[i]; - for (size_t j{0}; j < face.mNumIndices; ++j) - { - result.indices.push_back(face.mIndices[j]); - } - } - - result.header.vertexCount = static_cast(result.vertexPosition.size()); - result.header.indexCount = static_cast(result.indices.size()); - result.header.meshName = mesh.mName.C_Str(); - - return result; - } - - void SHMeshLoader::LoadExternal(std::vector& meshes, AssetPath path) noexcept - { - const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), - aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons - | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping - | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) - | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master - | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible - | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing - | aiProcess_RemoveRedundantMaterials // remove redundant materials - | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors - | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs - ); - - if (!scene || !scene->HasMeshes()) - { - SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); - return; - } - - //TODO MATERIALS FROM MESHES - //if (scene->HasMaterials()) - //{ - // for (int i{0}; i < scene->mNumMaterials; ++i) - // { - // if (scene->mMaterials[i]->mNumProperties > 0) - // { - // for (int j{0}; j < scene->mMaterials[i]->mProperties[j].) - // } - //std::cout << scene->mMaterials[i]->; - // } - //} - - ProcessNode(*scene->mRootNode, *scene, meshes); - } - void SHMeshLoader::LoadSHMesh(SHMeshAsset& mesh, AssetPath path) noexcept { std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; @@ -168,38 +50,6 @@ namespace SHADE file.read(reinterpret_cast(vertNorm.data()), vertexVec3Byte); file.read(reinterpret_cast(texCoord.data()), vertexVec2Byte); file.read(reinterpret_cast(indices.data()), sizeof(uint32_t) * indexCount); - - //for (auto i{ 0 }; i < vertCount; ++i) - //{ - // file >> vertPos[i].x; - // file >> vertPos[i].y; - // file >> vertPos[i].z; - //} - // - //for (auto i{ 0 }; i < vertCount; ++i) - //{ - // file >> vertTan[i].x; - // file >> vertTan[i].y; - // file >> vertTan[i].z; - //} - - //for (auto i{ 0 }; i < vertCount; ++i) - //{ - // file >> vertNorm[i].x; - // file >> vertNorm[i].y; - // file >> vertNorm[i].z; - //} - - //for (auto i{ 0 }; i < vertCount; ++i) - //{ - // file >> texCoord[i].x; - // file >> texCoord[i].y; - //} - - //for (auto i{ 0 }; i < indexCount; ++i) - //{ - // file >> indices[i]; - //} mesh.compiled = true; mesh.changed = false; @@ -216,16 +66,4 @@ namespace SHADE file.close(); } - - void SHMeshLoader::LoadMesh(std::vector& meshes, AssetPath path) noexcept - { - if (path.extension().string() == GLTF_EXTENSION) - { - LoadExternal(meshes, path); - return; - } - - meshes.emplace_back(); - LoadSHMesh(meshes.back(), path); - } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index a27d63ea..f01b942a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -10,27 +10,13 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #pragma once -#include -#include #include "../SHAssetMacros.h" #include "../Asset Types/SHMeshAsset.h" -#include namespace SHADE { - class SHMeshLoader + struct SHMeshLoader { - private: - static Assimp::Importer aiImporter; - - static void ProcessNode(aiNode const& node, aiScene const& scene, std::vector& meshes) noexcept; - - static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept; - - static void LoadExternal(std::vector& meshes, AssetPath path) noexcept; - - public: - static void LoadMesh(std::vector& meshes, AssetPath path) noexcept; static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index aa9772dd..faca24b2 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -14,6 +14,7 @@ #include "SHAssetMetaHandler.h" #include "Filesystem/SHFileSystem.h" +#include "Libraries/SHAssimpLibrary.h" #include "Libraries/SHMeshLoader.h" #include "Libraries/SHTextureLoader.h" @@ -200,38 +201,38 @@ namespace SHADE } - void SHAssetManager::LoadDataTemp(std::string p) noexcept - { - AssetPath path{ p }; + //void SHAssetManager::LoadDataTemp(std::string p) noexcept + //{ + // AssetPath path{ p }; - if (path.extension().string() == FBX_EXTENSION - || path.extension().string() == GLTF_EXTENSION - || path.extension().string() == MESH_EXTENSION) - { - LoadGLTF( - { - .name {path.filename().string()}, - .id {0}, - .type {AssetType::MESH}, - .path {path}, - .location {0} - } - ); - } - else if (path.extension().string() == DDS_EXTENSION - || path.extension().string() == TEXTURE_EXTENSION) - { - LoadDDS( - { - .name {path.filename().string()}, - .id {0}, - .type {AssetType::DDS}, - .path {path}, - .location {0} - } - ); - } - } + // if (path.extension().string() == FBX_EXTENSION + // || path.extension().string() == GLTF_EXTENSION + // || path.extension().string() == MESH_EXTENSION) + // { + // LoadGLTF( + // { + // .name {path.filename().string()}, + // .id {0}, + // .type {AssetType::MESH}, + // .path {path}, + // .location {0} + // } + // ); + // } + // else if (path.extension().string() == DDS_EXTENSION + // || path.extension().string() == TEXTURE_EXTENSION) + // { + // LoadDDS( + // { + // .name {path.filename().string()}, + // .id {0}, + // .type {AssetType::DDS}, + // .path {path}, + // .location {0} + // } + // ); + // } + //} std::vector SHAssetManager::GetAllMeshes() noexcept { @@ -319,11 +320,12 @@ namespace SHADE return false; } - void SHAssetManager::LoadGLTF(SHAsset asset) noexcept + void SHAssetManager::LoadGLTF(AssetPath path) noexcept { std::vector meshes; - - SHMeshLoader::LoadMesh(meshes, asset.path); + std::vector anims; + + SHAssimpLibrary::LoadFromFile(path, meshes, anims); for (auto const& mesh : meshes) { @@ -333,7 +335,7 @@ namespace SHADE AssetPath path; if (!mesh.compiled) { - path = SHMeshCompiler::CompileMeshBinary(mesh, asset.path); + path = SHMeshCompiler::CompileMeshBinary(mesh, path); } assetCollection.emplace_back( @@ -344,6 +346,11 @@ namespace SHADE 0 ); } + + for (auto const& anim : anims) + { + //TODO Register anim resource and compile into binary + } } void SHAssetManager::LoadDDS(SHAsset asset) noexcept diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 50549e01..b2c4216b 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -71,12 +71,16 @@ namespace SHADE // -------------------------------------------------------------------------/ //TODO: TEMPORARY FOR TESTING GLTF & DDS - static void LoadDataTemp(std::string path) noexcept; + //static void LoadDataTemp(std::string path) noexcept; static std::vector GetAllMeshes() noexcept; static std::vector GetAllTextures() noexcept; static SHMeshAsset const* GetMesh(AssetID id) noexcept; static SHTextureAsset const* GetTexture(AssetID id) noexcept; + + // Specialised load calls + static void LoadGLTF(AssetPath path) noexcept; + static void LoadDDS(SHAsset asset) noexcept; private: /**************************************************************************** * \brief Load resource data into memory @@ -118,9 +122,6 @@ namespace SHADE static bool IsRecognised(char const*) noexcept; - // Specialised load calls - static void LoadGLTF(SHAsset asset) noexcept; - static void LoadDDS(SHAsset asset) noexcept; static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; From 6051b7ded55027c071afa7dd976fe31fd939a143 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 19 Oct 2022 20:42:38 +0800 Subject: [PATCH 380/793] Tfm gizmo wip --- Assets/Editor/Layouts/UserLayout.ini | 48 ------------------- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 18 +++++++ .../src/Editor/Gizmos/SHTransformGizmo.h | 2 + SHADE_Engine/src/Editor/SHEditor.cpp | 5 ++ SHADE_Engine/src/Editor/SHEditor.hpp | 4 ++ 5 files changed, 29 insertions(+), 48 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index 33b4ccfd..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,48 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1389 -Size=2547,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=2547,1341 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,172 -Size=571,1217 -Collapsed=0 -DockId=0x00000004,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=2276,48 -Size=271,1341 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=571,122 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=573,48 -Size=1701,1341 -Collapsed=0 -DockId=0x00000002,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=2547,1341 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1074,1036 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index a9276b6d..5c3a0ce0 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -4,6 +4,10 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.hpp" +#include +#include + +#include "Camera/SHCameraSystem.h" namespace SHADE { @@ -18,7 +22,21 @@ namespace SHADE selectedEntityTranformComponent = SHComponentManager::GetComponent_s(eid); } + if(!editorCamera) + { + auto const cameraSystem = SHSystemManager::GetSystem(); + editorCamera = cameraSystem->GetEditorCamera(); + } + ImGuizmo::SetOrthographic(false); + SHMatrix view = editorCamera->GetViewMatrix(); + SHMatrix proj = editorCamera->GetProjMatrix(); + SHMatrix mat = selectedEntityTranformComponent->GetTRS(); + ImGuizmo::DrawGrid(view.m[0], proj.m[0], mat.m[0], 10.f); + if(ImGuizmo::Manipulate(view.m[0], proj.m[0], ImGuizmo::OPERATION::UNIVERSAL, ImGuizmo::MODE::WORLD, mat.m[0])) + { + + } } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h index d034eef9..4ddbeb66 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h @@ -1,4 +1,5 @@ #pragma once +#include "Camera/SHCameraComponent.h" #include "Math/Transform/SHTransformComponent.h" namespace SHADE @@ -9,5 +10,6 @@ namespace SHADE void Draw(); private: SHTransformComponent* selectedEntityTranformComponent{nullptr}; + SHCameraComponent* editorCamera{nullptr}; }; } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6b3c3a93..7399665f 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -36,6 +36,7 @@ #include #include #include +#include //#==============================================================# //|| ImGui Backend Includes || @@ -129,6 +130,9 @@ namespace SHADE if(window->isOpen) window->Update(); } + + ImGuizmo::SetDrawlist(ImGui::GetForegroundDrawList()); + transformGizmo.Draw(); if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { @@ -366,6 +370,7 @@ namespace SHADE ImGui_ImplVulkan_NewFrame(); ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); + ImGuizmo::BeginFrame(); } diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index baa6324e..4f8b32e2 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -16,6 +16,8 @@ #include "Resource/Handle.h" #include "EditorWindow/SHEditorWindow.h" #include "Tools/SHLogger.h" +#include "Gizmos/SHTransformGizmo.h" + //#==============================================================# //|| Library Includes || @@ -200,5 +202,7 @@ namespace SHADE SDL_Window* sdlWindow {nullptr}; ImGuiIO* io{nullptr}; + + SHTransformGizmo transformGizmo; };//class SHEditor }//namespace SHADE From 4f177bc45512b34efa7b000189d84449607c9a21 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 19 Oct 2022 20:43:22 +0800 Subject: [PATCH 381/793] Reworked script serialization and deserialization functions (WIP) --- SHADE_Application/premake5.lua | 4 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 44 ++------- SHADE_Engine/src/Scripting/SHScriptEngine.h | 37 ++++---- .../src/Serialization/SHSerialization.cpp | 12 ++- .../src/Serialization/SHSerialization.h | 1 + SHADE_Managed/src/Scripts/ScriptStore.cxx | 91 ++++++++++--------- SHADE_Managed/src/Scripts/ScriptStore.hxx | 23 ++--- .../src/Serialisation/ReflectionUtilities.cxx | 61 +++++++------ .../src/Serialisation/ReflectionUtilities.h++ | 4 +- .../src/Serialisation/ReflectionUtilities.hxx | 8 +- 10 files changed, 145 insertions(+), 140 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 35ea2c10..395c3a48 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -37,7 +37,8 @@ project "SHADE_Application" "%{IncludeDir.VULKAN}/include", "%{IncludeDir.spdlog}/include", "%{IncludeDir.tinyddsloader}", - "%{IncludeDir.reactphysics3d}\\include" + "%{IncludeDir.reactphysics3d}\\include", + "%{IncludeDir.yamlcpp}" } externalwarnings "Off" @@ -51,6 +52,7 @@ project "SHADE_Application" { "SHADE_Engine", "SHADE_Managed", + "yaml-cpp", "SDL2.lib", "SDL2main.lib" } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index d7a090a4..6585414d 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -115,34 +115,22 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - std::string SHScriptEngine::SerialiseScripts(EntityID entity) const + bool SHScriptEngine::SerialiseScripts(EntityID entity, YAML::Node& scriptsNode) const { - // Create buffer needed to store serialised script data - constexpr int BUFFER_SIZE = 10240; - std::unique_ptr buffer { new char[BUFFER_SIZE] }; - std::memset(buffer.get(), 0, BUFFER_SIZE); - // Attempt to serialise the script - std::string result; - if (csScriptsSerialise(entity, buffer.get(), BUFFER_SIZE)) - { - result = std::string(buffer.get()); - } - else - { - SHLOG_ERROR("[ScriptEngine] Failed to serialise scripts as string buffer is too small!"); - } + if (csScriptsSerialiseYaml(entity, &scriptsNode)) + return true; - // Return an empty string since we failed to serialise - return result; + SHLOG_ERROR("[ScriptEngine] Failed to serialise scripts for entity #{}.", entity); + return false; } /*-----------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*-----------------------------------------------------------------------------------*/ - void SHScriptEngine::DeserialiseScript(EntityID entity, const std::string& yaml) const + bool SHScriptEngine::DeserialiseScript(EntityID entity, YAML::Node& scriptsNode) const { - csScriptDeserialise(entity, yaml.c_str()); + return csScriptsDeserialiseYaml(entity, &scriptsNode); } /*-----------------------------------------------------------------------------------*/ @@ -380,30 +368,18 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "RemoveAllScriptsImmediately" ); - /*csScriptsSerialise = dotNet.GetFunctionPtr + csScriptsSerialiseYaml = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "SerialiseScripts" ); - csScriptsSerialiseYaml = dotNet.GetFunctionPtr + csScriptsDeserialiseYaml = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", - "SerialiseScriptsYaml" + "DeserialiseScripts" ); - csScriptDeserialise = dotNet.GetFunctionPtr - ( - DEFAULT_CSHARP_LIB_NAME, - DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", - "DeserialiseScript" - ); - csScriptDeserialiseYaml = dotNet.GetFunctionPtr - ( - DEFAULT_CSHARP_LIB_NAME, - DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", - "SerialiseScriptsYaml" - );*/ csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 60723425..58dbe0b3 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -13,7 +13,8 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include - +// External Dependencies +#include // Project Headers #include "SH_API.h" #include "SHDotNetRuntime.h" @@ -141,23 +142,26 @@ namespace SHADE /* Script Serialisation Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Generates a JSON string that represents the set of Scripts attached to the - /// specified Entity. + /// Performs serialization of all scripts for the specified entity into the + /// YAML::Node specified. This node will contain all serialised scripts after + /// calling this function. /// - /// The Entity to Serialise. - /// - /// String that represents the set of scripts attached to the specified Entity. - /// - std::string SerialiseScripts(EntityID entity) const; + /// The Entity to Serialise. + /// + /// YAML Node that will store the serialised scripts. + /// + /// True if successfully serialised. + bool SerialiseScripts(EntityID entity, YAML::Node& scriptsNode) const; /// - /// Loads the specified JSON string and creates a Script for the specified Entity - /// based on the specified JSON string. + /// Creates scripts and sets fields for the specified Entity based on the specified + /// YAML node. /// /// The Entity to deserialise a Script on to. - /// - /// The YAML string that represents the Script to load into the Entity. + /// + /// YAML Node that contains the serialised script data. /// - void DeserialiseScript(EntityID entity, const std::string& yaml) const; + /// True if successfully deserialised. + bool DeserialiseScript(EntityID entity, YAML::Node& scriptsNode) const; /*-----------------------------------------------------------------------------*/ /* Script Editor Functions */ @@ -211,8 +215,7 @@ namespace SHADE using CsScriptManipFuncPtr = bool(*)(EntityID, const char*); using CsScriptBasicFuncPtr = void(*)(EntityID); using CsScriptOptionalFuncPtr = void(*)(EntityID, bool); - using CsScriptSerialiseFuncPtr = bool(*)(EntityID, char*, int); - using CsScriptDeserialiseFuncPtr = bool(*)(EntityID, const char*); + using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); using CsScriptEditorFuncPtr = void(*)(EntityID); @@ -245,10 +248,8 @@ namespace SHADE CsScriptManipFuncPtr csScriptsAdd = nullptr; CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; - CsScriptSerialiseFuncPtr csScriptsSerialise = nullptr; - CsScriptDeserialiseFuncPtr csScriptDeserialise = nullptr; CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr; - CsScriptSerialiseYamlFuncPtr csScriptDeserialiseYaml = nullptr; + CsScriptSerialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; CsFuncPtr csEditorUndo = nullptr; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index e259fbbc..d0023107 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -13,6 +13,8 @@ #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" #include "Physics/Components/SHRigidBodyComponent.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Scripting/SHScriptEngine.h" namespace SHADE { @@ -157,7 +159,7 @@ namespace SHADE node = YAML::Null; return node; } - node.SetStyle(YAML::EmitterStyle::Block); + node.SetStyle(YAML::EmitterStyle::Block); node[EIDNode] = eid; node[EntityNameNode] = entity->name; node[IsActiveNode] = sceneNode->IsActive(); @@ -179,6 +181,14 @@ namespace SHADE components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(rigidbody); } node[ComponentsNode] = components; + + YAML::Node scripts; + SHSystemManager::GetSystem()->SerialiseScripts(eid, scripts); + node[ScriptsNode] = scripts; + + //YAML::Emitter emitter; + //emitter << node; + //SHLOG_TRACE(emitter.c_str()) return node; } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index d247de7a..e02db819 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -21,6 +21,7 @@ namespace SHADE constexpr const char* EIDNode = "EID"; constexpr const char* IsActiveNode = "IsActive"; constexpr const char* NumberOfChildrenNode = "NumberOfChildren"; + constexpr const char* ScriptsNode = "Scripts"; struct SH_API SHSerialization { diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 252ab071..3f366c36 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -26,6 +26,7 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Convert.hxx" #include "Script.hxx" #include "Engine/Entity.hxx" +#include "Serialisation/ReflectionUtilities.hxx" namespace SHADE { @@ -470,70 +471,78 @@ namespace SHADE } SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") } - bool ScriptStore::SerialiseScripts(Entity entity, System::Text::StringBuilder^ buffer, int bufferSize) + + bool ScriptStore::SerialiseScripts(Entity entity, System::IntPtr yamlNodePtr) { SAFE_NATIVE_CALL_BEGIN - // Create a buffer that we can work with temporarily - System::Text::StringBuilder^ jsonString = gcnew System::Text::StringBuilder(); + // Convert to pointer + YAML::Node* yamlNode = reinterpret_cast(yamlNodePtr.ToPointer()); + // Check if yamlNode is valid + if (yamlNode == nullptr) + { + Debug::LogWarning("Attempted to serialise scripts with an invalid YAML Node! Skipping."); + return false; + } + // Check if entity exists, otherwise nothing if (!EntityUtils::IsValid(entity)) - return true; - + { + Debug::LogWarning("Attempted to serialise scripts for an invalid Entity! Skipping."); + return false; + } + // Check if entity exists in the script storage - if (!scripts.ContainsKey(entity)) + if (!scripts.ContainsKey(entity)) return true; // Serialise each script + //yamlNode->SetStyle(YAML::EmitterStyle::Block); System::Collections::Generic::List^ scriptList = scripts[entity]; - for (int i = 0; i < scriptList->Count; ++i) + for each (Script^ script in scriptList) { - throw gcnew System::NotImplementedException; - //jsonString->Append(ReflectionUtilities::Serialise(scriptList[i])); - - // Only add separator if is not last script - if (i != scriptList->Count - 1) - { - jsonString->Append(",\r\n"); - } + ReflectionUtilities::Serialise(script, *yamlNode); } - // Check if the size is too big - if (jsonString->Length > bufferSize) - return false; - - // Otherwise we copy it over - buffer->Clear(); - buffer->Append(jsonString->ToString()); return true; SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") return false; } - bool ScriptStore::DeserialiseScript(Entity entity, System::String^ yaml) + bool ScriptStore::DeserialiseScripts(Entity entity, System::IntPtr yamlNodePtr) { SAFE_NATIVE_CALL_BEGIN + // Convert to pointer + YAML::Node* yamlNode = reinterpret_cast(yamlNodePtr.ToPointer()); + + // Check if yamlNode is valid + if (yamlNode == nullptr) + { + Debug::LogWarning("Attempted to deserialise scripts with an invalid YAML Node! Skipping."); + return false; + } + // Check if entity exists, otherwise nothing if (!EntityUtils::IsValid(entity)) - return false; - - // Get the name of the script - const int FIRST_QUOTE = yaml->IndexOf('\"'); - const int FIRST_COLON = yaml->IndexOf(':'); - if (FIRST_QUOTE < 0 || FIRST_COLON < 0) // No script name, it's invalid - return false; - const int SCRIPT_NAME_START = FIRST_QUOTE + 1; - const int SCRIPT_NAME_END = FIRST_COLON - 1; - System::String^ typeName = yaml->Substring(SCRIPT_NAME_START, SCRIPT_NAME_END - SCRIPT_NAME_START); - - // Create the script - Script^ script; - if (AddScriptViaNameWithRef(entity, typeName, script)) { - // Copy the data in - throw gcnew System::NotImplementedException; - //ReflectionUtilities::Deserialise(json, script); - return true; + Debug::LogWarning("Attempted to deserialise scripts for an invalid Entity! Skipping."); + return false; + } + + // Go through all elements in the node + for (YAML::Node& node : *yamlNode) + { + // Get the name of the script + const std::string typeName = ""; // TODO + + // Create + Script^ script; + if (AddScriptViaNameWithRef(entity, Convert::ToCLI(typeName), script)) + { + // Copy the data in + ReflectionUtilities::Deserialise(script, node); + return true; + } } SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index cc0c1db5..4a9be721 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -17,6 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Engine/Entity.hxx" #include "Script.hxx" +#include "Serialization/SHSerialization.h" namespace SHADE { @@ -237,27 +238,23 @@ namespace SHADE /* Serialisation Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Generates a JSON string that represents the set of Scripts attached - /// to the specified Entity. + /// Populates a YAML node with the scripts for a specified Entity. ///

    /// This function should only be called from native unmanaged code. ///
    /// The Entity to Serialise. - /// - /// StringBuilder handle that maps to a native char array that will contain the - /// serialised string. - /// - /// - /// The size of the char array. + /// + /// Pointer to a YAML::Node that will be populated with all of the serialised + /// scripts and their associated fields. /// /// /// True if serialisation is successful. False if the buffer is too small for /// the serialised output. /// - static bool SerialiseScripts(Entity entity, System::Text::StringBuilder^ buffer, int bufferSize); + static bool SerialiseScripts(Entity entity, System::IntPtr yamlNode); /// - /// Processes a JSON string that represents a single Script and attaches - /// it onto the specified Entity. + /// Processes a YAML node that contains a list of multiple scripts to be loaded + /// into the specified Entity. ///

    /// This function should only be called from native unmanaged code. ///
    @@ -265,10 +262,10 @@ namespace SHADE /// The Entity to attach the deserialised Scripts to. /// /// - /// JSON string that describes the Script to serialise. + /// Pointer to the YAML::Node that contains serialized script data. /// /// - static bool DeserialiseScript(Entity entity, System::String^ yaml); + static bool DeserialiseScripts(Entity entity, System::IntPtr yamlNode); private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 2a9cc57c..dc03a95c 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -61,13 +61,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - void ReflectionUtilities::Serialise(System::Object^ object, YAML::Emitter& yaml) + void ReflectionUtilities::Serialise(System::Object^ object, YAML::Node& yamlNode) { using namespace System::Reflection; // Create YAML object - yaml << YAML::Key << Convert::ToNative(object->GetType()->FullName); - yaml << YAML::BeginMap; + YAML::Node scriptNode; // Get all fields System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); @@ -78,12 +77,12 @@ namespace SHADE continue; // Serialise - writeFieldIntoYaml(field, object, yaml); + writeFieldIntoYaml(field, object, scriptNode); } - yaml << YAML::EndMap; + yamlNode[Convert::ToNative(object->GetType()->FullName)] = scriptNode; } - void ReflectionUtilities::Deserialise(YAML::Node& yamlNode, Object^ object) + void ReflectionUtilities::Deserialise(Object^ object, YAML::Node& yamlNode) { using namespace System::Reflection; @@ -117,44 +116,50 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Serialization Helper Functions */ /*---------------------------------------------------------------------------------*/ - void ReflectionUtilities::writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Emitter& yaml) + void ReflectionUtilities::writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode) { - // Field Name - yaml << YAML::Key << Convert::ToNative(fieldInfo->Name); - - // Field Value - yaml << YAML::Value; - if (fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml(fieldInfo, object, yaml) || - fieldInsertYaml(fieldInfo, object, yaml) || - fieldInsertYaml(fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml) || - fieldInsertYaml (fieldInfo, object, yaml)) + // Field YAML Node + YAML::Node fieldNode; + fieldNode.SetStyle(YAML::EmitterStyle::Block); + fieldNode["Name"] = Convert::ToNative(fieldInfo->Name); + + // Retrieve string for the YAML + if (fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode) || + fieldInsertYaml (fieldInfo, object, fieldNode)) { return; } else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) { - yaml << safe_cast(fieldInfo->GetValue(object)); + fieldNode = std::to_string(safe_cast(fieldInfo->GetValue(object))); } else if (fieldInfo->FieldType == System::String::typeid) { System::String^ str = safe_cast(fieldInfo->GetValue(object)); - yaml << Convert::ToNative(str); + fieldNode = Convert::ToNative(str); } else if (fieldInfo->FieldType == Vector2::typeid) { Vector2 vec = safe_cast(fieldInfo->GetValue(object)); - yaml << YAML::BeginSeq << YAML::Flow << vec.x << vec.y << YAML::EndSeq; + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); } else if (fieldInfo->FieldType == Vector3::typeid) { Vector3 vec = safe_cast(fieldInfo->GetValue(object)); - yaml << YAML::BeginSeq << YAML::Flow << vec.x << vec.y << vec.z << YAML::EndSeq; + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); + fieldNode.push_back(vec.z); } else // Not any of the supported types { @@ -163,7 +168,11 @@ namespace SHADE "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", fieldInfo->Name, fieldInfo->FieldType) )); + return; } + + // Store the field into YAML + yamlNode.push_back(fieldNode); } void ReflectionUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ index 88469b34..a3d4c33b 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ @@ -23,11 +23,11 @@ namespace SHADE /* Serialization Helper Functions */ /*---------------------------------------------------------------------------------*/ template - bool ReflectionUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Emitter& emitter) + bool ReflectionUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode) { if (fieldInfo->FieldType == FieldType::typeid) { - emitter << safe_cast(fieldInfo->GetValue(object)); + fieldNode = 0.0;//static_cast(safe_cast(fieldInfo->GetValue(object))); return true; } diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index 53f8fa1d..0709f667 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -52,7 +52,7 @@ namespace SHADE /// attribute will be serialised. ///
    /// The object to serialise. - static void Serialise(System::Object^ object, YAML::Emitter& yaml); + static void Serialise(System::Object^ object, YAML::Node& yamlNode); /// /// Deserialises a YAML node that contains a map of Scripts and copies the /// deserialised data into the specified object if there are matching fields. @@ -62,14 +62,14 @@ namespace SHADE /// object. /// /// The object to copy deserialised data into. - static void Deserialise(YAML::Node& yamlNode, Object^ object); + static void Deserialise(System::Object^ object, YAML::Node& yamlNode); /*-----------------------------------------------------------------------------*/ /* Serialization Helper Functions */ /*-----------------------------------------------------------------------------*/ - static void writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Emitter& yaml); + static void writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode); template - static bool fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Emitter& emitter); + static bool fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode); static void writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); template static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); From 736d7b652bcbb9b9e16e9c106daca1d2c4dbe030 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 20 Oct 2022 03:21:42 +0800 Subject: [PATCH 382/793] Added camera turning --- Assets/Editor/Layouts/UserLayout.ini | 20 +-- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 2 +- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 114 +++++++++--------- SHADE_Engine/src/Camera/SHCameraSystem.h | 2 + 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 33b4ccfd..530ee770 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1389 -Size=2547,20 +Pos=0,1060 +Size=1920,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=2547,1341 +Size=1920,1012 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,172 -Size=571,1217 +Pos=0,142 +Size=571,918 Collapsed=0 DockId=0x00000004,0 @@ -20,25 +20,25 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=2276,48 -Size=271,1341 +Pos=1649,48 +Size=271,1012 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=571,122 +Size=571,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] Pos=573,48 -Size=1701,1341 +Size=1074,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=2547,1341 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 650ed3c5..7ba6855c 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -7,7 +7,7 @@ namespace SHADE { SHCameraComponent::SHCameraComponent() :yaw(0.0f), pitch(0.0f), roll(0.0f) - , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(1.0f) + , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) , perspProj(true), dirtyView(true), dirtyProj(true) , viewMatrix(), projMatrix() , position() diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 9c97131a..130aab09 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -2,6 +2,7 @@ #include "SHCameraSystem.h" #include "Math/SHMathHelpers.h" #include "Input/SHInputManager.h" +#include "Math/Vector/SHVec2.h" @@ -12,25 +13,8 @@ namespace SHADE { SHCameraSystem* system = static_cast(GetSystem()); auto& camera = system->editorCamera; - SHVec3 target{ 0.0f,0.0f,-1.0f }; - SHVec3 up = { 0.0f,1.0f,0.0f }; - - - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - target += camera.position; - ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - - //target = SHVec3::Normalise(target); - - SHVec3::RotateZ(up, camera.roll); - up = SHVec3::Normalise(up); - - - SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(view, right); - + SHVec3 view, right, UP; + system->GetCameraAxis(camera, view, right, UP); if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { @@ -62,6 +46,18 @@ namespace SHADE system->editorCamera.position -= UP * dt * camera.movementSpeed; system->editorCamera.dirtyView = true; } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::RMB)) + { + double mouseX, mouseY; + SHInputManager::GetMouseVelocity(&mouseX,&mouseY); + + //std::cout << camera.yaw << std::endl; + + system->editorCamera.pitch -= mouseY * dt * camera.turnSpeed.x; + system->editorCamera.yaw -= mouseX * dt * camera.turnSpeed.y; + system->editorCamera.dirtyView = true; + } + system->UpdateCameraComponent(system->editorCamera); } @@ -89,24 +85,9 @@ namespace SHADE { if (camera.dirtyView) { - SHVec3 target{ 0.0f,0.0f,-1.0f }; - SHVec3 up = { 0.0f,1.0f,0.0f }; - - - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - target += camera.position; - ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - - //target = SHVec3::Normalise(target); - - SHVec3::RotateZ(up, camera.roll); - up = SHVec3::Normalise(up); - - - SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(view, right); + + SHVec3 view, right, UP; + GetCameraAxis(camera, view, right, UP); camera.viewMatrix = SHMatrix::Identity; camera.viewMatrix(0, 0) = right[0]; @@ -142,38 +123,51 @@ namespace SHADE camera.projMatrix(3, 2) = 1.0f; camera.projMatrix(2, 3) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); - //const float fov_rad = SHMath::DegreesToRadians(camera.fov); - //const float focal_length = 1.0f / tan(fov_rad * 0.5f); - - //camera.projMatrix(0,0) = focal_length / camera.GetAspectRatio(); - //camera.projMatrix(1,1) = -focal_length; - //camera.projMatrix(2,2) = camera.zNear / (camera.zFar - camera.zNear); - //camera.projMatrix(2,3) = camera.zFar * (camera.zNear / (camera.zFar - camera.zNear)); - //camera.projMatrix(3,2) = -1.0f; - //camera.projMatrix(3,3) = 0.0f; - - //camera.projMatrix = SHMatrix::Inverse(camera.projMatrix); - + camera.dirtyProj = false; } else { - const float R = camera.width * 0.5f; - const float L = -R; - const float T = camera.height * 0.5f; - const float B = -T; + //const float R = camera.width * 0.5f; + //const float L = -R; + //const float T = camera.height * 0.5f; + //const float B = -T; - camera.projMatrix = SHMatrix::Identity; - camera.projMatrix(0, 0) = 2.0f / (R - L); - camera.projMatrix(1, 1) = 2.0f / (B - T); - camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); - camera.projMatrix(3, 0) = -(R + L) / (R - L); - camera.projMatrix(3, 1) = -(B + T) / (B - T); - camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); + //camera.projMatrix = SHMatrix::Identity; + //camera.projMatrix(0, 0) = 2.0f / (R - L); + //camera.projMatrix(1, 1) = 2.0f / (B - T); + //camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); + //camera.projMatrix(3, 0) = -(R + L) / (R - L); + //camera.projMatrix(3, 1) = -(B + T) / (B - T); + //camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); camera.dirtyProj = false; } } } + void SHCameraSystem::GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& upVec) const noexcept + { + SHVec3 target{ 0.0f,0.0f,-1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + + target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + target =SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + std::cout << "Target vec: " << target.x<<", "< Date: Thu, 20 Oct 2022 09:34:33 +0800 Subject: [PATCH 383/793] Some clean up --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 130aab09..a9b356de 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -18,33 +18,33 @@ namespace SHADE if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { - system->editorCamera.position -= right * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position -= right * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::D)) { - system->editorCamera.position += right * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += right * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::W)) { - system->editorCamera.position += view * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += view * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::S)) { - system->editorCamera.position -= view * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position -= view * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::Q)) { - system->editorCamera.position += UP * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += UP * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::E)) { - system->editorCamera.position -= UP * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position -= UP * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::RMB)) { @@ -53,9 +53,9 @@ namespace SHADE //std::cout << camera.yaw << std::endl; - system->editorCamera.pitch -= mouseY * dt * camera.turnSpeed.x; - system->editorCamera.yaw -= mouseX * dt * camera.turnSpeed.y; - system->editorCamera.dirtyView = true; + camera.pitch -= mouseY * dt * camera.turnSpeed.x; + camera.yaw -= mouseX * dt * camera.turnSpeed.y; + camera.dirtyView = true; } system->UpdateCameraComponent(system->editorCamera); From cfed342f9c7571f303e0143d47373b91b3ac2b78 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 20 Oct 2022 09:54:51 +0800 Subject: [PATCH 384/793] Modified script serialization to use a sequence of scripts instead of a map --- SHADE_Managed/src/Scripts/ScriptStore.cxx | 2 +- .../src/Serialisation/ReflectionUtilities.cxx | 15 ++++++++++----- .../src/Serialisation/ReflectionUtilities.hxx | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 3f366c36..b9423795 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -497,7 +497,7 @@ namespace SHADE return true; // Serialise each script - //yamlNode->SetStyle(YAML::EmitterStyle::Block); + yamlNode->SetStyle(YAML::EmitterStyle::Block); System::Collections::Generic::List^ scriptList = scripts[entity]; for each (Script^ script in scriptList) { diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index dc03a95c..8e5b1d38 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -38,6 +38,11 @@ if (iter != jsonValue.MemberEnd()) \ vec.MEMBER = iter->value.GetDouble(); \ } \ +/*-------------------------------------------------------------------------------------*/ +/* File-Level Constants */ +/*-------------------------------------------------------------------------------------*/ +static const std::string_view SCRIPT_TYPE_YAMLTAG = "Type"; + /*-------------------------------------------------------------------------------------*/ /* Function Definitions */ /*-------------------------------------------------------------------------------------*/ @@ -61,12 +66,14 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Serialisation Functions */ /*---------------------------------------------------------------------------------*/ - void ReflectionUtilities::Serialise(System::Object^ object, YAML::Node& yamlNode) + void ReflectionUtilities::Serialise(System::Object^ object, YAML::Node& scriptListNode) { using namespace System::Reflection; // Create YAML object YAML::Node scriptNode; + scriptNode.SetStyle(YAML::EmitterStyle::Block); + scriptNode[SCRIPT_TYPE_YAMLTAG] = Convert::ToNative(object->GetType()->FullName); // Get all fields System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); @@ -80,7 +87,7 @@ namespace SHADE writeFieldIntoYaml(field, object, scriptNode); } - yamlNode[Convert::ToNative(object->GetType()->FullName)] = scriptNode; + scriptListNode.push_back(scriptNode); } void ReflectionUtilities::Deserialise(Object^ object, YAML::Node& yamlNode) { @@ -120,8 +127,6 @@ namespace SHADE { // Field YAML Node YAML::Node fieldNode; - fieldNode.SetStyle(YAML::EmitterStyle::Block); - fieldNode["Name"] = Convert::ToNative(fieldInfo->Name); // Retrieve string for the YAML if (fieldInsertYaml (fieldInfo, object, fieldNode) || @@ -172,7 +177,7 @@ namespace SHADE } // Store the field into YAML - yamlNode.push_back(fieldNode); + yamlNode[Convert::ToNative(fieldInfo->Name)] = fieldNode; } void ReflectionUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index 0709f667..4742c7ff 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -64,6 +64,8 @@ namespace SHADE /// The object to copy deserialised data into. static void Deserialise(System::Object^ object, YAML::Node& yamlNode); + + private: /*-----------------------------------------------------------------------------*/ /* Serialization Helper Functions */ /*-----------------------------------------------------------------------------*/ From 4bc91283c8448dc9ae84066340ce5bfd8be5877e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 20 Oct 2022 10:10:43 +0800 Subject: [PATCH 385/793] Fixed primitive fields not being serialised --- .../src/Serialisation/ReflectionUtilities.cxx | 86 ++++++++++--------- .../src/Serialisation/ReflectionUtilities.hxx | 3 +- 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 8e5b1d38..3e963818 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -73,7 +73,7 @@ namespace SHADE // Create YAML object YAML::Node scriptNode; scriptNode.SetStyle(YAML::EmitterStyle::Block); - scriptNode[SCRIPT_TYPE_YAMLTAG] = Convert::ToNative(object->GetType()->FullName); + scriptNode[SCRIPT_TYPE_YAMLTAG.data()] = Convert::ToNative(object->GetType()->FullName); // Get all fields System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); @@ -129,51 +129,53 @@ namespace SHADE YAML::Node fieldNode; // Retrieve string for the YAML - if (fieldInsertYaml (fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode) || + const bool PRIMITIVE_SERIALIZED = fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || fieldInsertYaml(fieldInfo, object, fieldNode) || fieldInsertYaml(fieldInfo, object, fieldNode) || fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode) || - fieldInsertYaml (fieldInfo, object, fieldNode)) + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode); + + // Serialization of more complex types + if (!PRIMITIVE_SERIALIZED) { - return; - } - else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) - { - fieldNode = std::to_string(safe_cast(fieldInfo->GetValue(object))); - } - else if (fieldInfo->FieldType == System::String::typeid) - { - System::String^ str = safe_cast(fieldInfo->GetValue(object)); - fieldNode = Convert::ToNative(str); - } - else if (fieldInfo->FieldType == Vector2::typeid) - { - Vector2 vec = safe_cast(fieldInfo->GetValue(object)); - fieldNode.SetStyle(YAML::EmitterStyle::Flow); - fieldNode.push_back(vec.x); - fieldNode.push_back(vec.y); - } - else if (fieldInfo->FieldType == Vector3::typeid) - { - Vector3 vec = safe_cast(fieldInfo->GetValue(object)); - fieldNode.SetStyle(YAML::EmitterStyle::Flow); - fieldNode.push_back(vec.x); - fieldNode.push_back(vec.y); - fieldNode.push_back(vec.z); - } - else // Not any of the supported types - { - Debug::LogWarning(Convert::ToNative(System::String::Format - ( - "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", - fieldInfo->Name, fieldInfo->FieldType) - )); - return; + if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) + { + fieldNode = std::to_string(safe_cast(fieldInfo->GetValue(object))); + } + else if (fieldInfo->FieldType == System::String::typeid) + { + System::String^ str = safe_cast(fieldInfo->GetValue(object)); + fieldNode = Convert::ToNative(str); + } + else if (fieldInfo->FieldType == Vector2::typeid) + { + Vector2 vec = safe_cast(fieldInfo->GetValue(object)); + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); + } + else if (fieldInfo->FieldType == Vector3::typeid) + { + Vector3 vec = safe_cast(fieldInfo->GetValue(object)); + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); + fieldNode.push_back(vec.z); + } + else // Not any of the supported types + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", + fieldInfo->Name, fieldInfo->FieldType) + )); + return; + } } // Store the field into YAML diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index 4742c7ff..fbae5ee0 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -58,8 +58,7 @@ namespace SHADE /// deserialised data into the specified object if there are matching fields. /// /// - /// The JSON string that contains the data to copy into this PlushieScript - /// object. + /// The JSON string that contains the data to copy into this Script object. /// /// The object to copy deserialised data into. static void Deserialise(System::Object^ object, YAML::Node& yamlNode); From 166a036142bfad809663775c107d5e686449d79f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 20 Oct 2022 11:08:20 +0800 Subject: [PATCH 386/793] Completed script serialization in YAML --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 +- SHADE_Engine/src/Scripting/SHScriptEngine.h | 54 ++++++++-------- .../src/Serialization/SHSerialization.cpp | 7 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 24 +++++-- .../src/Serialisation/ReflectionUtilities.h++ | 5 +- .../src/Serialisation/ReflectionUtilities.hxx | 1 - SHADE_Managed/src/Utility/Convert.hxx | 64 +++++++++++++++++++ 7 files changed, 117 insertions(+), 42 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 6585414d..fea59353 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -128,7 +128,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Script Serialisation Functions */ /*-----------------------------------------------------------------------------------*/ - bool SHScriptEngine::DeserialiseScript(EntityID entity, YAML::Node& scriptsNode) const + bool SHScriptEngine::DeserialiseScripts(EntityID entity, const YAML::Node& scriptsNode) const { return csScriptsDeserialiseYaml(entity, &scriptsNode); } @@ -374,7 +374,7 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "SerialiseScripts" ); - csScriptsDeserialiseYaml = dotNet.GetFunctionPtr + csScriptsDeserialiseYaml = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 58dbe0b3..137d978f 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -161,7 +161,7 @@ namespace SHADE /// YAML Node that contains the serialised script data. /// /// True if successfully deserialised. - bool DeserialiseScript(EntityID entity, YAML::Node& scriptsNode) const; + bool DeserialiseScripts(EntityID entity, const YAML::Node& scriptsNode) const; /*-----------------------------------------------------------------------------*/ /* Script Editor Functions */ @@ -211,13 +211,13 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------*/ - using CsFuncPtr = void(*)(void); - using CsScriptManipFuncPtr = bool(*)(EntityID, const char*); - using CsScriptBasicFuncPtr = void(*)(EntityID); - using CsScriptOptionalFuncPtr = void(*)(EntityID, bool); - using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); - using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); - using CsScriptEditorFuncPtr = void(*)(EntityID); + using CsFuncPtr = void(*)(void); + using CsScriptManipFuncPtr = bool(*)(EntityID, const char*); + using CsScriptBasicFuncPtr = void(*)(EntityID); + using CsScriptOptionalFuncPtr = void(*)(EntityID, bool); + using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); + using CsScriptDeserialiseYamlFuncPtr = bool(*)(EntityID, const void*); + using CsScriptEditorFuncPtr = void(*)(EntityID); /*-----------------------------------------------------------------------------*/ /* Constants */ @@ -231,29 +231,29 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - SHDotNetRuntime dotNet { false }; + SHDotNetRuntime dotNet { false }; // Function Pointers to CLR Code // - Engine Lifecycle - CsFuncPtr csEngineInit = nullptr; - CsFuncPtr csEngineLoadScripts = nullptr; - CsFuncPtr csEngineUnloadScripts = nullptr; - CsFuncPtr csEngineReloadScripts = nullptr; - CsFuncPtr csEngineExit = nullptr; + CsFuncPtr csEngineInit = nullptr; + CsFuncPtr csEngineLoadScripts = nullptr; + CsFuncPtr csEngineUnloadScripts = nullptr; + CsFuncPtr csEngineReloadScripts = nullptr; + CsFuncPtr csEngineExit = nullptr; // - Scripts Store - CsFuncPtr csScriptsFrameSetUp = nullptr; - CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; - CsFuncPtr csScriptsExecuteUpdate = nullptr; - CsFuncPtr csScriptsExecuteLateUpdate = nullptr; - CsFuncPtr csScriptsFrameCleanUp = nullptr; - CsScriptManipFuncPtr csScriptsAdd = nullptr; - CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; - CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; - CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr; - CsScriptSerialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr; + CsFuncPtr csScriptsFrameSetUp = nullptr; + CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; + CsFuncPtr csScriptsExecuteUpdate = nullptr; + CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsFrameCleanUp = nullptr; + CsScriptManipFuncPtr csScriptsAdd = nullptr; + CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; + CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; + CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr; + CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr; // - Editor - CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; - CsFuncPtr csEditorUndo = nullptr; - CsFuncPtr csEditorRedo = nullptr; + CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; + CsFuncPtr csEditorUndo = nullptr; + CsFuncPtr csEditorRedo = nullptr; /*-----------------------------------------------------------------------------*/ /* Event Handler Functions */ diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index d0023107..63583cf2 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -79,6 +79,10 @@ namespace SHADE } } } + + // Deserialise scripts + if (node[ScriptsNode]) + SHSystemManager::GetSystem()->DeserialiseScripts(eid, node[ScriptsNode]); } void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) @@ -186,9 +190,6 @@ namespace SHADE SHSystemManager::GetSystem()->SerialiseScripts(eid, scripts); node[ScriptsNode] = scripts; - //YAML::Emitter emitter; - //emitter << node; - //SHLOG_TRACE(emitter.c_str()) return node; } diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index b9423795..b6bc1815 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -481,14 +481,14 @@ namespace SHADE // Check if yamlNode is valid if (yamlNode == nullptr) { - Debug::LogWarning("Attempted to serialise scripts with an invalid YAML Node! Skipping."); + Debug::LogWarning("[ScriptStore] Attempted to serialise scripts with an invalid YAML Node! Skipping."); return false; } // Check if entity exists, otherwise nothing if (!EntityUtils::IsValid(entity)) { - Debug::LogWarning("Attempted to serialise scripts for an invalid Entity! Skipping."); + Debug::LogWarning("[ScriptStore] Attempted to serialise scripts for an invalid Entity! Skipping."); return false; } @@ -518,14 +518,14 @@ namespace SHADE // Check if yamlNode is valid if (yamlNode == nullptr) { - Debug::LogWarning("Attempted to deserialise scripts with an invalid YAML Node! Skipping."); + Debug::LogWarning("[ScriptStore] Attempted to deserialise scripts with an invalid YAML Node! Skipping."); return false; } // Check if entity exists, otherwise nothing if (!EntityUtils::IsValid(entity)) { - Debug::LogWarning("Attempted to deserialise scripts for an invalid Entity! Skipping."); + Debug::LogWarning("[ScriptStore] Attempted to deserialise scripts for an invalid Entity! Skipping."); return false; } @@ -533,17 +533,27 @@ namespace SHADE for (YAML::Node& node : *yamlNode) { // Get the name of the script - const std::string typeName = ""; // TODO + if (!node["Type"]) + { + Debug::LogWarning("[ScriptStore] Script with no type detected, skipping."); + continue; + } + + System::String^ typeName = Convert::ToCLI(node["Type"].as()); // Create Script^ script; - if (AddScriptViaNameWithRef(entity, Convert::ToCLI(typeName), script)) + if (AddScriptViaNameWithRef(entity, typeName, script)) { // Copy the data in ReflectionUtilities::Deserialise(script, node); - return true; + } + else + { + Debug::LogWarning("[ScriptStore] Script with unloaded type detected, skipping."); } } + return true; SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") return false; diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ index a3d4c33b..7c39232a 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ @@ -27,7 +27,8 @@ namespace SHADE { if (fieldInfo->FieldType == FieldType::typeid) { - fieldNode = 0.0;//static_cast(safe_cast(fieldInfo->GetValue(object))); + const FieldType VALUE = safe_cast(fieldInfo->GetValue(object)); + fieldNode = static_cast(VALUE); return true; } @@ -37,7 +38,7 @@ namespace SHADE template bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) { - return fieldAssignYaml(fieldInfo, object, node); + return fieldAssignYaml>(fieldInfo, object, node); } template diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index fbae5ee0..403c913c 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -63,7 +63,6 @@ namespace SHADE /// The object to copy deserialised data into. static void Deserialise(System::Object^ object, YAML::Node& yamlNode); - private: /*-----------------------------------------------------------------------------*/ /* Serialization Helper Functions */ diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index b41ffef4..f04cbf4b 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -91,4 +91,68 @@ namespace SHADE /// Managed copy of a native std::string. static System::String^ ToCLI(const std::string& str); }; + + /// + /// Type Transformer for managed types to native types. + /// + /// + /// Managed type to get the native type for. + /// + template + struct ToNativeType + { + public: + using Value = void; + }; + template<> struct ToNativeType { using Value = int16_t; }; + template<> struct ToNativeType { using Value = int32_t; }; + template<> struct ToNativeType { using Value = int64_t; }; + template<> struct ToNativeType { using Value = uint16_t; }; + template<> struct ToNativeType { using Value = uint32_t; }; + template<> struct ToNativeType { using Value = uint64_t; }; + template<> struct ToNativeType { using Value = int8_t; }; + template<> struct ToNativeType { using Value = bool; }; + template<> struct ToNativeType { using Value = double; }; + template<> struct ToNativeType { using Value = float; }; + + /// + /// Alias for ToNativeType::Value + /// + /// + /// Managed type to get the native type for. + /// + template + using ToNativeType_T = typename ToNativeType::Value; + + /// + /// Type Transformer for native types to managed types. + /// + /// + /// Managed type to get the native type for. + /// + template + struct ToManagedType + { + public: + using Value = void; + }; + template<> struct ToManagedType { using Value = System::Byte; }; + template<> struct ToManagedType { using Value = System::Int16; }; + template<> struct ToManagedType { using Value = System::Int32; }; + template<> struct ToManagedType { using Value = System::Int64; }; + template<> struct ToManagedType { using Value = System::UInt16; }; + template<> struct ToManagedType { using Value = System::UInt32; }; + template<> struct ToManagedType { using Value = System::UInt64; }; + template<> struct ToManagedType { using Value = bool; }; + template<> struct ToManagedType { using Value = double; }; + template<> struct ToManagedType { using Value = float; }; + + /// + /// Alias for ToManagedType::Value + /// + /// + /// Managed type to get the native type for. + /// + template + using ToManagedType_T = typename ToManagedType::Value; } From 488fd51d05d210a264705c8551375b756b544587 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 20 Oct 2022 17:07:21 +0800 Subject: [PATCH 387/793] Added Collider component and Ray struct for C# --- SHADE_Managed/src/Components/Collider.cxx | 192 ++++++++++++++++++ SHADE_Managed/src/Components/Collider.h++ | 41 ++++ SHADE_Managed/src/Components/Collider.hxx | 228 ++++++++++++++++++++++ SHADE_Managed/src/Math/Ray.cxx | 28 +++ SHADE_Managed/src/Math/Ray.hxx | 50 +++++ SHADE_Managed/src/Utility/Convert.cxx | 11 ++ SHADE_Managed/src/Utility/Convert.hxx | 14 ++ 7 files changed, 564 insertions(+) create mode 100644 SHADE_Managed/src/Components/Collider.cxx create mode 100644 SHADE_Managed/src/Components/Collider.h++ create mode 100644 SHADE_Managed/src/Components/Collider.hxx create mode 100644 SHADE_Managed/src/Math/Ray.cxx create mode 100644 SHADE_Managed/src/Math/Ray.hxx diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx new file mode 100644 index 00000000..e09b7ead --- /dev/null +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -0,0 +1,192 @@ +/************************************************************************************//*! +\file Collider.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 20, 2022 +\brief Contains the definition of the functions of the managed Collider class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Collider.hxx" +#include "Utility/Debug.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* ColliderBound - Constructors */ + /*---------------------------------------------------------------------------------*/ + ColliderBound::ColliderBound(int arrayIdx, Entity attachedEntity) + : arrayIndex { arrayIdx } + , entity { attachedEntity } + {} + + /*---------------------------------------------------------------------------------*/ + /* ColliderBound - Setter Functions */ + /*---------------------------------------------------------------------------------*/ + void ColliderBound::updateArrayIndex(int index) + { + arrayIndex = index; + } + + /*---------------------------------------------------------------------------------*/ + /* BoxColliderBound - Constructors */ + /*---------------------------------------------------------------------------------*/ + BoxColliderBound::BoxColliderBound(int arrayIdx, Entity attachedEntity) + : ColliderBound { arrayIndex, attachedEntity } + {} + + /*---------------------------------------------------------------------------------*/ + /* BoxColliderBound - Properties */ + /*---------------------------------------------------------------------------------*/ + Vector3 BoxColliderBound::Center::get() + { + return Convert::ToCLI(getNativeBoundObject().GetCenter()); + } + void BoxColliderBound::Center::set(Vector3 value) + { + getNativeBoundObject().SetCenter(Convert::ToNative(value)); + } + Vector3 BoxColliderBound::HalfExtents::get() + { + return Convert::ToCLI(getNativeBoundObject().GetHalfExtents()); + } + void BoxColliderBound::HalfExtents::set(Vector3 value) + { + getNativeBoundObject().SetHalfExtents(Convert::ToNative(value)); + } + Vector3 BoxColliderBound::Min::get() + { + return Convert::ToCLI(getNativeBoundObject().GetMin()); + } + void BoxColliderBound::Min::set(Vector3 value) + { + getNativeBoundObject().SetMin(Convert::ToNative(value)); + } + Vector3 BoxColliderBound::Max::get() + { + return Convert::ToCLI(getNativeBoundObject().GetMax()); + } + void BoxColliderBound::Max::set(Vector3 value) + { + getNativeBoundObject().SetMax(Convert::ToNative(value)); + } + + /*---------------------------------------------------------------------------------*/ + /* BoxColliderBound - Usage Functions */ + /*---------------------------------------------------------------------------------*/ + bool BoxColliderBound::TestPoint(Vector3 point) + { + return getNativeBoundObject().TestPoint(Convert::ToNative(point)); + } + bool BoxColliderBound::Raycast(Ray ray, float maxDistance) + { + return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); + } + + /*---------------------------------------------------------------------------------*/ + /* BoxColliderBound - Properties */ + /*---------------------------------------------------------------------------------*/ + Vector3 SphereColliderBound::Center::get() + { + return Convert::ToCLI(getNativeBoundObject().GetCenter()); + } + void SphereColliderBound::Center::set(Vector3 value) + { + getNativeBoundObject().SetCenter(Convert::ToNative(value)); + } + float SphereColliderBound::Radius::get() + { + return getNativeBoundObject().GetRadius(); + } + void SphereColliderBound::Radius::set(float value) + { + getNativeBoundObject().SetRadius(value); + } + + /*---------------------------------------------------------------------------------*/ + /* SphereColliderBound - Usage Functions */ + /*---------------------------------------------------------------------------------*/ + bool SphereColliderBound::TestPoint(Vector3 point) + { + return getNativeBoundObject().TestPoint(Convert::ToNative(point)); + } + bool SphereColliderBound::Raycast(Ray ray, float maxDistance) + { + return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); + } + + /*---------------------------------------------------------------------------------*/ + /* SphereColliderBound - Constructors */ + /*---------------------------------------------------------------------------------*/ + SphereColliderBound::SphereColliderBound(int arrayIndex, Entity attachedEntity) + : ColliderBound{ arrayIndex, attachedEntity } + {} + + /*---------------------------------------------------------------------------------*/ + /* Collider - Constructors */ + /*---------------------------------------------------------------------------------*/ + Collider::Collider(Entity entity) + : Component(entity) + {} + + /*---------------------------------------------------------------------------------*/ + /* Collider - Properties */ + /*---------------------------------------------------------------------------------*/ + int Collider::ColliderBoundsCount::get() + { + return static_cast(GetNativeComponent()->GetColliders().size()); + } + + /*---------------------------------------------------------------------------------*/ + /* Collider - ColliderBound Functions */ + /*---------------------------------------------------------------------------------*/ + ColliderBound^ Collider::GetColliderBound(int index) + { + // Populate the list if it hasn't been + if (subColliderList == nullptr) + { + subColliderList = gcnew System::Collections::Generic::List(); + for (const auto& collider : GetNativeComponent()->GetColliders()) + { + ColliderBound^ bound = nullptr; + switch (collider.first.GetType()) + { + case SHCollider::Type::BOX: + bound = gcnew BoxColliderBound(index, Owner.GetEntity()); + break; + case SHCollider::Type::SPHERE: + bound = gcnew SphereColliderBound(index, Owner.GetEntity()); + break; + case SHCollider::Type::CAPSULE: + // TODO + break; + default: + Debug::LogWarning("[Collider] An invalid Collider Type was detected. Skipping."); + break; + } + + // Add into list + subColliderList->Add(bound); + } + } + + // Check if valid + if (index < 0 || index >= subColliderList->Count) + throw gcnew System::ArgumentException("[Collider] Invalid index for Collider Bound retrieval."); + + // Return the bound + return subColliderList[index]; + } + generic + T Collider::GetColliderBound(int index) + { + return safe_cast(GetColliderBound(index)); + } +} diff --git a/SHADE_Managed/src/Components/Collider.h++ b/SHADE_Managed/src/Components/Collider.h++ new file mode 100644 index 00000000..66f77e18 --- /dev/null +++ b/SHADE_Managed/src/Components/Collider.h++ @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file Collider.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 20, 2022 +\brief Contains the definition of templated functions for the managed Collider + and related classes. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Include +#include "Component.hxx" +namespace SHADE +{ + template + ColliderBoundType& SHADE::ColliderBound::getNativeBoundObject() + { + SHColliderComponent* collider = SHComponentManager::GetComponent_s(entity); + if (!collider) + throw gcnew System::InvalidOperationException("Unable to retrieve Collider component!"); + + try + { + auto& bounds = collider->GetCollider(arrayIndex); + if (bounds.GetType() != SHCollider::Type::BOX) + throw gcnew System::InvalidOperationException("Attempted to retrieve invalid ColliderBound."); + + return reinterpret_cast(bounds); + } + catch (std::invalid_argument&) + { + throw gcnew System::IndexOutOfRangeException("Attempted to retrieve out of range ColliderBound!"); + } + } +} diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx new file mode 100644 index 00000000..a831e5f9 --- /dev/null +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -0,0 +1,228 @@ +/************************************************************************************//*! +\file Collider.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 20, 2022 +\brief Contains the definition of the managed Collider class with the + declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Physics/Components/SHColliderComponent.h" +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +#include "Utility/Convert.hxx" +#include "Math/Ray.hxx" + +namespace SHADE +{ + /// + /// Base interface for all Collider Shapes. + /// + public ref class ColliderBound + { + public: + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Checks if the specified point is within this shape's bounds. + /// + /// Point to test with. + /// True if the point is in the shape's bounds. + virtual bool TestPoint(Vector3 point) = 0; + /// + /// Computes a Raycast and checks if there is a collision with any object. + /// + /// The ray to cast. + /// Maximum distance for the raycast check. + /// True if the ray intersects with an object in the scene. + virtual bool Raycast(Ray ray, float maxDistance) = 0; + + protected: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + ColliderBound(int arrayIdx, Entity attachedEntity); + + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + int arrayIndex; // Index into the colliders vector on the native object + Entity entity; // Entity holding the collider component that this collider bounds is on + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + template + ColliderBoundType& getNativeBoundObject(); + + internal: + /*-----------------------------------------------------------------------------*/ + /* Setter Functions */ + /*-----------------------------------------------------------------------------*/ + void updateArrayIndex(int index); + }; + + /// + /// Box-shaped Collider Bound. + /// + public ref class BoxColliderBound : public ColliderBound + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Center of the Bounding Box formed by this bound. + /// + property Vector3 Center + { + Vector3 get(); + void set(Vector3 value); + } + /// + /// Half of the scale of the Bounding Box formed by this bound. + /// + property Vector3 HalfExtents + { + Vector3 get(); + void set(Vector3 value); + } + /// + /// Position of the bottom left back corner of the Bounding Box formed by this + /// bound. + /// + property Vector3 Min + { + Vector3 get(); + void set(Vector3 value); + } + /// + /// Position of the top right front corner of the Bounding Box formed by this + /// bound. + /// + property Vector3 Max + { + Vector3 get(); + void set(Vector3 value); + } + + /*-----------------------------------------------------------------------------*/ + /* ColliderBound Functions */ + /*-----------------------------------------------------------------------------*/ + /// + bool TestPoint(Vector3 point) override; + /// + bool Raycast(Ray ray, float maxDistance) override; + + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + BoxColliderBound(int arrayIndex, Entity attachedEntity); + }; + + /// + /// Sphere-shaped Collider Bound. + /// + public ref class SphereColliderBound : public ColliderBound + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Center of the Bounding Sphere formed by this bound. + /// + property Vector3 Center + { + Vector3 get(); + void set(Vector3 value); + } + /// + /// Radius of the Bounding Sphere formed by this bound. + /// + property float Radius + { + float get(); + void set(float value); + } + + /*-----------------------------------------------------------------------------*/ + /* ColliderBound Functions */ + /*-----------------------------------------------------------------------------*/ + /// + bool TestPoint(Vector3 point) override; + /// + bool Raycast(Ray ray, float maxDistance) override; + + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + SphereColliderBound(int arrayIndex, Entity attachedEntity); + }; + + /// + /// CLR version of the the SHADE Engine's SHColliderComponent. + /// A single Collider component can contain one or multiple Collider Bounds. + /// + public ref class Collider : public Component + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a Collider Component that represents a native SHColliderComponent + /// component tied to the specified Entity. + /// + /// Entity that this Component will be tied to. + Collider(Entity entity); + + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Total number of ColliderBounds in the Collider component. + /// + property int ColliderBoundsCount + { + int get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves a ColliderBound at the specified index in the ColliderBound list. + /// + /// Index to retrieve a ColliderBound from. + /// ColliderBound for the specified index. + ColliderBound^ GetColliderBound(int index); + /// + /// Retrieves a ColliderBound at the specified index in the ColliderBound list + /// and casts it to the appropriate type. + /// + /// Type of the ColliderBound to cast to. + /// Index to retrieve a ColliderBound from. + /// ColliderBound for the specified index. + generic where T:ColliderBound + T GetColliderBound(int index); + + private: + System::Collections::Generic::List^ subColliderList; // TODO: Update elements in this list if the list on native collider changes + }; +} + +#include "Collider.h++" \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Ray.cxx b/SHADE_Managed/src/Math/Ray.cxx new file mode 100644 index 00000000..ee614cbe --- /dev/null +++ b/SHADE_Managed/src/Math/Ray.cxx @@ -0,0 +1,28 @@ +/************************************************************************************//*! +\file Ray.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 20, 2022 +\brief Contains the definitions of functions of the Vector2 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Math/Ray.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Ray::Ray(Vector3 origin, Vector3 direction) + : Origin { origin } + , Direction{ direction } + {} +} \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Ray.hxx b/SHADE_Managed/src/Math/Ray.hxx new file mode 100644 index 00000000..c50191f8 --- /dev/null +++ b/SHADE_Managed/src/Math/Ray.hxx @@ -0,0 +1,50 @@ +/************************************************************************************//*! +\file Ray.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 20, 2021 +\brief Contains the definitions of Vector2 struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Vector3.hxx" + +namespace SHADE +{ + /// + /// CLR version of the the SHADE Engine's Ray class that represents a ray in + /// 3-Dimensional space. + /// + public value struct Ray + { + public: + /*-----------------------------------------------------------------------------*/ + /* Public Members */ + /*-----------------------------------------------------------------------------*/ + /// + /// The start point of the ray. + /// + Vector3 Origin; + /// + /// The direction that a ray travels in. + /// + Vector3 Direction; + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a ray starting at origin along direction. + /// + /// Source of the ray. + /// Direction the ray travels in. + Ray(Vector3 origin, Vector3 direction); + }; +} diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 661eb3e4..33c4e4dc 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -40,6 +40,7 @@ namespace SHADE const double Z = vec.z; return SHVec3(X, Y, Z); } + Vector3 Convert::ToCLI(const SHVec3& vec) { return Vector3(vec.x, vec.y, vec.z); @@ -56,6 +57,16 @@ namespace SHADE return Vector2(vec.x, vec.y); } + SHRay Convert::ToNative(Ray vec) + { + return SHRay(ToNative(vec.Origin), ToNative(vec.Direction)); + } + + Ray Convert::ToCLI(const SHRay& vec) + { + return Ray(ToCLI(vec.position), ToCLI(vec.direction)); + } + /*---------------------------------------------------------------------------------*/ /* String Conversions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index f04cbf4b..fd0ecdce 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -18,10 +18,12 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/Entity/SHEntity.h" #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" +#include "Math/SHRay.h" // Project Includes #include "Engine/Entity.hxx" #include "Math/Vector2.hxx" #include "Math/Vector3.hxx" +#include "Math/Ray.hxx" namespace SHADE { @@ -74,6 +76,18 @@ namespace SHADE /// The native Vector2 to convert from. /// Managed copy of a native Vector2. static Vector2 ToCLI(const SHVec2& vec); + /// + /// Converts from a managed Vector2 to a native Vector2. + /// + /// The managed Vector2 to convert from. + /// Native copy of a managed Vector2. + static SHRay ToNative(Ray vec); + /// + /// Converts from a native Vector2 to a managed Vector2. + /// + /// The native Vector2 to convert from. + /// Managed copy of a native Vector2. + static Ray ToCLI(const SHRay& vec); /*-----------------------------------------------------------------------------*/ /* String Conversions */ From 5a0b34ceea63dd80bdedda43e6c74611424b5517 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 20 Oct 2022 17:47:32 +0800 Subject: [PATCH 388/793] Added Event for Scene Graph Change Parent --- SHADE_Engine/src/Events/SHEventDefines.h | 11 ++++++----- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 21 +++++++++++++++++++-- SHADE_Engine/src/Scene/SHSceneGraph.h | 15 +++++++++------ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 317b67c1..fc9f41e1 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -5,8 +5,9 @@ typedef uint32_t SHEventIdentifier; typedef uint32_t SHEventHandle; //Add your event identifiers here: -constexpr SHEventIdentifier SH_EXAMPLE_EVENT{0}; -constexpr SHEventIdentifier SH_ENTITY_DESTROYED_EVENT{ 1 }; -constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT{ 2 }; -constexpr SHEventIdentifier SH_COMPONENT_ADDED_EVENT{ 3 }; -constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT{ 4 }; +constexpr SHEventIdentifier SH_EXAMPLE_EVENT { 0 }; +constexpr SHEventIdentifier SH_ENTITY_DESTROYED_EVENT { 1 }; +constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT { 2 }; +constexpr SHEventIdentifier SH_COMPONENT_ADDED_EVENT { 3 }; +constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT { 4 }; +constexpr SHEventIdentifier SH_SCENEGRAPH_CHANGE_PARENT_EVENT { 5 }; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 572e5927..291b5b2b 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -15,6 +15,7 @@ // Project Headers #include "ECS_Base/Managers/SHEntityManager.h" +#include "Events/SHEventManager.hpp" #include "Tools/SHLogger.h" #include "Tools/SHException.h" @@ -364,10 +365,18 @@ namespace SHADE } //////////////////////////////////////// + const SHSceneGraphChangeParentEvent EVENT_DATA + { + .oldParentID = NODE_ITER->second->GetParent()->GetEntityID(), + .newParentID = parent->GetEntityID() + }; + if (parent == nullptr) parent = root; NODE_ITER->second->SetParent(parent); + + SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } void SHSceneGraph::SetParent(EntityID entityID, EntityID parent) const noexcept @@ -401,8 +410,16 @@ namespace SHADE } //////////////////////////////////////// + const SHSceneGraphChangeParentEvent EVENT_DATA + { + .oldParentID = NODE_ITER->second->GetParent()->GetEntityID(), + .newParentID = parent + }; + SHSceneNode* currentNode = NODE_ITER->second; currentNode->SetParent(PARENT_ITER->second); + + SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } /*-----------------------------------------------------------------------------------*/ @@ -563,7 +580,7 @@ namespace SHADE ReleaseNode(node); } - void SHSceneGraph::Traverse (const UnaryPredicate& predicate) const + void SHSceneGraph::Traverse (const UnaryFunction& predicate) const { TraverseAndInvokePredicate(root, predicate); } @@ -602,7 +619,7 @@ namespace SHADE delete node; } - void SHSceneGraph::TraverseAndInvokePredicate(const SHSceneNode* node, const UnaryPredicate& predicate) + void SHSceneGraph::TraverseAndInvokePredicate(const SHSceneNode* node, const UnaryFunction& predicate) { for (auto* child : node->children) { diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 3f3ebf92..62715f72 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -97,9 +97,8 @@ namespace SHADE /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - using EntityNodeMap = std::unordered_map; - - using UnaryPredicate = std::function; + using EntityNodeMap = std::unordered_map; + using UnaryFunction = std::function; /*---------------------------------------------------------------------------------*/ @@ -143,8 +142,7 @@ namespace SHADE bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; void Reset () noexcept; - void Traverse (const UnaryPredicate& predicate) const; - + void Traverse (const UnaryFunction& predicate) const; private: /*---------------------------------------------------------------------------------*/ @@ -160,8 +158,13 @@ namespace SHADE SHSceneNode* AllocateNode (EntityID entityID); void ReleaseNode (SHSceneNode* node) noexcept; - static void TraverseAndInvokePredicate (const SHSceneNode* node, const UnaryPredicate& predicate); + static void TraverseAndInvokePredicate (const SHSceneNode* node, const UnaryFunction& predicate); }; + struct SHSceneGraphChangeParentEvent + { + EntityID oldParentID; + EntityID newParentID; + }; } // namespace SHADE \ No newline at end of file From 314d497b66c93cf21c5f245e4846961297eb6a60 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 20 Oct 2022 18:35:57 +0800 Subject: [PATCH 389/793] Reparenting objects maintain world transforms --- Assets/Editor/Layouts/UserLayout.ini | 20 ++++----- SHADE_Application/src/Scenes/SBTestScene.cpp | 6 +-- .../src/Math/Transform/SHTransformSystem.cpp | 43 ++++++++++++++++++- .../src/Math/Transform/SHTransformSystem.h | 6 ++- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 10 +++-- SHADE_Engine/src/Scene/SHSceneGraph.h | 1 + 6 files changed, 65 insertions(+), 21 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 530ee770..7b0a70f8 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -10,7 +10,7 @@ Collapsed=0 [Window][Hierarchy Panel] Pos=0,142 -Size=571,918 +Size=349,918 Collapsed=0 DockId=0x00000004,0 @@ -20,29 +20,29 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=1649,48 -Size=271,1012 +Pos=1483,48 +Size=437,1012 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=571,92 +Size=349,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=573,48 -Size=1074,1012 +Pos=351,48 +Size=1130,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1481,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=349,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1074,1036 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1130,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=437,1036 Selected=0xE7039252 diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index f1d656ee..d81550e1 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -77,9 +77,9 @@ namespace Sandbox customMat->SetProperty("data.alpha", 0.1f); // Create Stress Test Objects - static const SHVec3 TEST_OBJ_SCALE = SHVec3::One * 0.5f; - constexpr int NUM_ROWS = 10; - constexpr int NUM_COLS = 10; + static const SHVec3 TEST_OBJ_SCALE = SHVec3::One; + constexpr int NUM_ROWS = 2; + constexpr int NUM_COLS = 1; static const SHVec3 TEST_OBJ_SPACING = { 0.1f, 0.1f, 0.1f }; static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 6b05e323..448fa60d 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -17,7 +17,6 @@ #include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" -#include "Tools/SHException.h" namespace SHADE { @@ -47,7 +46,9 @@ namespace SHADE void SHTransformSystem::Init() { - + std::shared_ptr thisReceiver { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; + ReceiverPtr receiver = std::dynamic_pointer_cast(thisReceiver); + SHEventManager::SubscribeTo(SH_SCENEGRAPH_CHANGE_PARENT_EVENT, receiver); } void SHTransformSystem::Exit() @@ -59,6 +60,44 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + SHEventHandle SHTransformSystem::ChangeParent(SHEventPtr changeParentEvent) + { + const auto& eventData = reinterpret_cast*>(changeParentEvent.get()); + + // Get Current Respective Components + auto* tf = SHComponentManager::GetComponent(eventData->data->entityID); + const auto* PARENT = SHComponentManager::GetComponent_s(eventData->data->newParentID); + + // Recompute local transform and store localToWorld Matrix + SHMatrix localToWorld = SHMatrix::Identity; + SHMatrix worldToLocal = SHMatrix::Identity; + + if (PARENT != nullptr) // Not the root + { + localToWorld = PARENT->GetTRS(); + worldToLocal = SHMatrix::Inverse(localToWorld); + } + + // Maintain World Transform and recompute Local Transform + + // Compute Local Position + tf->local.position = SHVec3::Transform(tf->world.position, worldToLocal); + + // Compute Local Rotation + tf->local.rotation = tf->world.rotation; + if (PARENT) + tf->local.rotation -= PARENT->GetLocalRotation(); + + // Compute Local Scale + tf->local.scale = tf->world.scale; + if (PARENT) + tf->local.scale /= PARENT->GetLocalScale(); + + tf->local.trs = localToWorld; + + return eventData->handle; + } + void SHTransformSystem::UpdateEntity(const SHSceneNode* node) { const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 02c3b6c6..8a50b368 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -84,8 +84,10 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - static void UpdateEntity (const SHSceneNode* node); - static void UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); + SHEventHandle ChangeParent (SHEventPtr changeParentEvent); + + static void UpdateEntity (const SHSceneNode* node); + static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); }; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 291b5b2b..ac6975fb 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -367,8 +367,9 @@ namespace SHADE const SHSceneGraphChangeParentEvent EVENT_DATA { - .oldParentID = NODE_ITER->second->GetParent()->GetEntityID(), - .newParentID = parent->GetEntityID() + .entityID = entityID + , .oldParentID = NODE_ITER->second->GetParent()->GetEntityID() + , .newParentID = parent ? parent->GetEntityID() : root->GetEntityID() }; if (parent == nullptr) @@ -412,8 +413,9 @@ namespace SHADE const SHSceneGraphChangeParentEvent EVENT_DATA { - .oldParentID = NODE_ITER->second->GetParent()->GetEntityID(), - .newParentID = parent + .entityID = entityID + , .oldParentID = NODE_ITER->second->GetParent()->GetEntityID() + , .newParentID = parent }; SHSceneNode* currentNode = NODE_ITER->second; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 62715f72..1dfc1542 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -163,6 +163,7 @@ namespace SHADE struct SHSceneGraphChangeParentEvent { + EntityID entityID; EntityID oldParentID; EntityID newParentID; }; From 0fadbc8a9d71c5cec685bbcc4db6ba6b40ab8102 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 20 Oct 2022 19:00:36 +0800 Subject: [PATCH 390/793] Renamed Handle, ResourceManager and ResourceLibrary to SHHandle, SHResourceHub and SHResourceLibrary --- SHADE_Engine/src/Editor/SHEditor.hpp | 2 +- .../src/Graphics/Buffers/SHVkBuffer.h | 2 +- .../src/Graphics/Commands/SHVkCommandBuffer.h | 4 +-- .../src/Graphics/Commands/SHVkCommandPool.cpp | 2 +- .../src/Graphics/Commands/SHVkCommandPool.h | 2 +- .../Graphics/Descriptors/SHVkDescriptorPool.h | 2 +- .../Descriptors/SHVkDescriptorSetGroup.h | 2 +- .../Descriptors/SHVkDescriptorSetLayout.h | 2 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 4 +-- .../Graphics/Framebuffer/SHVkFramebuffer.h | 2 +- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 2 +- .../src/Graphics/Images/SHVkImageView.h | 2 +- .../src/Graphics/Images/SHVkSampler.h | 2 +- .../src/Graphics/Instance/SHVkInstance.cpp | 4 +-- .../src/Graphics/Instance/SHVkInstance.h | 6 ++-- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 2 +- .../Graphics/MiddleEnd/Batching/SHBatcher.h | 2 +- .../MiddleEnd/Batching/SHSuperBatch.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 4 +-- .../Graphics/MiddleEnd/Interface/SHMaterial.h | 2 +- .../MiddleEnd/Interface/SHMaterialInstance.h | 2 +- .../MiddleEnd/Interface/SHMeshLibrary.h | 6 ++-- .../Interface/SHPostOffscreenRenderSystem.h | 2 +- .../MiddleEnd/Interface/SHRenderable.h | 2 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 2 +- .../MiddleEnd/Interface/SHViewport.cpp | 4 +-- .../Graphics/MiddleEnd/Interface/SHViewport.h | 6 ++-- .../Materials/SHMaterialInstanceCache.cpp | 4 +-- .../Materials/SHMaterialInstanceCache.h | 6 ++-- .../MiddleEnd/Textures/SHTextureLibrary.h | 6 ++-- .../MiddleEnd/Textures/SHVkSamplerCache.h | 2 +- .../Pipeline/SHPipelineLayoutParams.h | 2 +- .../src/Graphics/Pipeline/SHVkPipeline.h | 2 +- SHADE_Engine/src/Graphics/Queues/SHVkQueue.h | 2 +- .../RenderGraph/SHAttachmentDescInitParams.h | 2 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 2 +- .../src/Graphics/RenderGraph/SHRenderGraph.h | 4 +-- .../RenderGraph/SHRenderGraphNode.cpp | 2 +- .../Graphics/RenderGraph/SHRenderGraphNode.h | 6 ++-- .../RenderGraph/SHRenderGraphResource.h | 2 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 2 +- .../src/Graphics/RenderGraph/SHSubpass.h | 4 +-- .../Graphics/RenderGraph/SHSubpassCompute.h | 2 +- .../Graphics/Renderpass/SHVkAttachDescGen.h | 2 +- .../src/Graphics/Renderpass/SHVkRenderpass.h | 2 +- .../Graphics/Renderpass/SHVkSubpassParams.h | 2 +- SHADE_Engine/src/Graphics/SHVkUtil.h | 2 +- .../src/Graphics/Shaders/SHVkShaderModule.h | 2 +- .../src/Graphics/Swapchain/SHVkSwapchain.h | 2 +- .../src/Graphics/Synchronization/SHVkFence.h | 2 +- .../Graphics/Synchronization/SHVkSemaphore.h | 2 +- .../Graphics/Windowing/Surface/SHVkSurface.h | 2 +- .../src/Resource/{Handle.h => SHHandle.h} | 10 +++--- .../src/Resource/{Handle.hpp => SHHandle.hpp} | 6 ++-- ...ourceLibrary.cpp => SHResourceLibrary.cpp} | 4 +-- ...{ResourceLibrary.h => SHResourceLibrary.h} | 16 ++++----- ...ourceLibrary.hpp => SHResourceLibrary.hpp} | 34 +++++++++---------- 57 files changed, 107 insertions(+), 107 deletions(-) rename SHADE_Engine/src/Resource/{Handle.h => SHHandle.h} (97%) rename SHADE_Engine/src/Resource/{Handle.hpp => SHHandle.hpp} (96%) rename SHADE_Engine/src/Resource/{ResourceLibrary.cpp => SHResourceLibrary.cpp} (87%) rename SHADE_Engine/src/Resource/{ResourceLibrary.h => SHResourceLibrary.h} (96%) rename SHADE_Engine/src/Resource/{ResourceLibrary.hpp => SHResourceLibrary.hpp} (83%) diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index baa6324e..557c60c1 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -13,7 +13,7 @@ #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "EditorWindow/SHEditorWindow.h" #include "Tools/SHLogger.h" diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index e931fec5..aeda7d18 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -3,7 +3,7 @@ #include "Graphics/SHVulkanIncludes.h" #include "vk_mem_alloc.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 9416a1aa..deb1131c 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -4,7 +4,7 @@ #include "Graphics/SHVulkanIncludes.h" #include "Graphics/SHVulkanDefines.h" #include "SHCommandPoolResetMode.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" namespace SHADE @@ -36,7 +36,7 @@ namespace SHADE class SHVkCommandBuffer { friend class SHVkCommandPool; - friend class ResourceLibrary; + friend class SHResourceLibrary; static constexpr uint16_t PUSH_CONSTANT_SIZE = 512; private: diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp index e1470898..375ece4d 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.cpp @@ -2,7 +2,7 @@ #include "SHVkCommandPool.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Instance/SHVkInstance.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "Tools/SHLogger.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.h index 2bb290a7..fcc0ce41 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandPool.h @@ -6,7 +6,7 @@ #include "Graphics/Queues/SHVkQueue.h" #include "SHCommandPoolResetMode.h" #include "SHVkCommandBuffer.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h index 9a533d06..c822829a 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.h @@ -2,7 +2,7 @@ // Project Includes #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index f2b886e8..b2536de8 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -4,7 +4,7 @@ // Project Includes #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/Shaders/SHShaderReflected.h" #include "SHDescriptorSetUpdater.h" diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h index 4fffbc96..1639901d 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h @@ -2,7 +2,7 @@ // Project Includes #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 6f7048b8..3d59d5c6 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -8,8 +8,8 @@ #include "Graphics/SHVulkanIncludes.h" #include "Graphics/Devices/SHVkPhysicalDevice.h" #include "Graphics/Queues/SHVkQueue.h" -#include "Resource/Handle.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHHandle.h" +#include "Resource/SHResourceLibrary.h" #include "Graphics/Swapchain/SHSwapchainParams.h" #include "Graphics/Commands/SHCommandPoolResetMode.h" #include "Graphics/Commands/SHVkCommandPool.h" diff --git a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h index 47bfcf99..4a02408c 100644 --- a/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h +++ b/SHADE_Engine/src/Graphics/Framebuffer/SHVkFramebuffer.h @@ -2,7 +2,7 @@ #define SH_VK_FRAMEBUFFER_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 51b71b26..4fb16017 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -3,7 +3,7 @@ #include "SHImageViewDetails.h" #include "Graphics/SHVulkanDefines.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "vk_mem_alloc.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImageView.h b/SHADE_Engine/src/Graphics/Images/SHVkImageView.h index ae23d7a7..79bb5dca 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImageView.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImageView.h @@ -2,7 +2,7 @@ #define SH_VK_IMAGE_VIEW_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "SHImageViewDetails.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h index bb878a69..3a989553 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.h @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #include // Project Includes #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp index 6688f9a6..191bc563 100644 --- a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp +++ b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp @@ -15,7 +15,7 @@ namespace SHADE bool SHVkInstance::validationLayersOn; vk::Instance SHVkInstance::vkInstance; SHVkDebugMessenger SHVkInstance::debugMessenger; - ResourceManager SHVkInstance::resourceManager; + SHResourceHub SHVkInstance::resourceManager; /***************************************************************************/ /*! @@ -258,7 +258,7 @@ namespace SHADE return vkInstance; } - ResourceManager& SHVkInstance::GetResourceManager(void) noexcept + SHResourceHub& SHVkInstance::GetResourceManager(void) noexcept { return resourceManager; } diff --git a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.h b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.h index a6fb4f0f..55adc774 100644 --- a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.h +++ b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.h @@ -18,7 +18,7 @@ written consent of DigiPen Institute of Technology is prohibited. #include "Graphics/Debugging/SHVkDebugMessenger.h" #include "Graphics/Devices/SHVkPhysicalDevice.h" #include "Graphics/Devices/SHVkLogicalDevice.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" namespace SHADE @@ -61,7 +61,7 @@ namespace SHADE static SHVkDebugMessenger debugMessenger; //! Resource management for vulkan project - static ResourceManager resourceManager; + static SHResourceHub resourceManager; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ @@ -85,7 +85,7 @@ namespace SHADE /* Getters and Setters */ /*-----------------------------------------------------------------------*/ static vk::Instance const& GetVkInstance (void) noexcept; - static ResourceManager& GetResourceManager(void) noexcept; + static SHResourceHub& GetResourceManager(void) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index 37c57396..193fff0d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -18,7 +18,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "Graphics/SHVulkanIncludes.h" // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" #include "Math/SHMatrix.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h index 8074899d..f299906c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatcher.h @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h index 9743e7dc..9877e04e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.h @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "Graphics/SHVulkanIncludes.h" // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "SHBatch.h" #include "Graphics/Pipeline/SHVkPipeline.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 7d0fa3ab..29429703 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/SHVulkanIncludes.h" #include "Graphics/MiddleEnd/PerFrame/SHRenderContext.h" #include "Graphics/RenderGraph/SHRenderGraph.h" @@ -313,7 +313,7 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - ResourceManager resourceManager; + SHResourceHub resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHSamplerCache samplerCache; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h index 348efb07..ec546fd5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "SHCommonTypes.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h index d111acb9..b6fcc830 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterialInstance.h @@ -13,7 +13,7 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h" #include "SH_API.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h index e9923385..72ac1878 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.h @@ -15,8 +15,8 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include // Project Includes -#include "Resource/Handle.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHHandle.h" +#include "Resource/SHResourceLibrary.h" #include "Math/SHMath.h" namespace SHADE @@ -167,7 +167,7 @@ namespace SHADE std::vector meshAddJobs; std::vector> meshRemoveJobs; // Tracking - ResourceLibrary meshes{}; + SHResourceLibrary meshes{}; std::vector> meshOrder; // CPU Storage std::vector vertPosStorage; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h index d3360b87..7a236eaf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h @@ -1,6 +1,6 @@ #pragma once -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index 3bb7cfda..bc885ca2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -12,7 +12,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" //#include "SHTransform.h" #include "ECS_Base/Components/SHComponent.h" #include "Math/SHMatrix.h" diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 57c63e7f..dbd1e415 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "SHCamera.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/RenderGraph/SHRenderGraph.h" #include "Math/SHMath.h" #include diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp index f47920e0..df9e244e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.cpp @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Instance/SHVkInstance.h" #include "Tools/SHLogger.h" #include "SHRenderer.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "Graphics/RenderGraph/SHRenderGraph.h" namespace SHADE @@ -49,7 +49,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Renderer Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHViewport::AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph) + Handle SHViewport::AddRenderer(SHResourceHub& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph) { // Create the renderer auto renderer = resourceManager.Create(device, numFrames, cmdPools, descriptorPool, cameraDescLayout, GetHandle(), renderGraph); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h index 04b39f00..26c0a6bd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHViewport.h @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "Graphics/SHVulkanIncludes.h" // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { @@ -28,7 +28,7 @@ namespace SHADE class SHVkCommandBuffer; class SHVkLogicalDevice; class SHVkImageView; - class ResourceManager; + class SHResourceHub; class SHRenderGraph; class SHVkDescriptorPool; class SHVkDescriptorSetLayout; @@ -59,7 +59,7 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Renderers Registration Functions */ /*-----------------------------------------------------------------------------*/ - Handle AddRenderer(ResourceManager& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); + Handle AddRenderer(SHResourceHub& resourceManager, uint32_t numFrames, std::vector>& cmdPools, Handle descriptorPool, Handle cameraDescLayout, Handle renderGraph); void RemoveRenderer(Handle renderer); /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp index ed3d27c3..624956da 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.cpp @@ -14,7 +14,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHMaterialInstanceCache.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" namespace SHADE @@ -22,7 +22,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Usage Functions */ /*---------------------------------------------------------------------------------*/ - SHADE::Handle SHMaterialInstanceCache::CreateOrGet(ResourceManager& manager, Handle material) + SHADE::Handle SHMaterialInstanceCache::CreateOrGet(SHResourceHub& manager, Handle material) { // Check if there is already an existing instance auto matInst = cache.find(material); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h index d85cb553..6612faf6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { @@ -24,7 +24,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ class SHMaterial; class SHMaterialInstance; - class ResourceManager; + class SHResourceHub; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -56,7 +56,7 @@ namespace SHADE */ /***********************************************************************************/ - Handle CreateOrGet(ResourceManager& manager, Handle material); + Handle CreateOrGet(SHResourceHub& manager, Handle material); /***********************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index c2eb85ec..935a7a4d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -17,8 +17,8 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "tinyddsloader.h" // Project Includes -#include "Resource/Handle.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHHandle.h" +#include "Resource/SHResourceLibrary.h" #include "Math/SHMath.h" #include "Graphics/SHVulkanIncludes.h" @@ -156,7 +156,7 @@ namespace SHADE std::vector addJobs; std::vector> removeJobs; // Tracking - ResourceManager resourceManager; + SHResourceHub resourceManager; std::vector> texOrder; // CPU Storage std::vector, Handle, vk::ImageLayout>> combinedImageSamplers; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h index c1529577..1adbcb8c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHVkSamplerCache.h @@ -16,7 +16,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "Graphics/SHVulkanIncludes.h" // Project Includes -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h index 093e03d4..d696e4a3 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h @@ -2,7 +2,7 @@ #define SH_PIPELINE_LAYOUT_PARAMS_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index fe55a41e..1103d3d0 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -3,7 +3,7 @@ #include "SHPipelineState.h" #include "SHPipelineType.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h index 9d865ee9..a647cb72 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h @@ -3,7 +3,7 @@ #include "Graphics/SHVulkanIncludes.h" #include "Graphics/SHVulkanDefines.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h index 20e924cb..845a19a4 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescInitParams.h @@ -1,6 +1,6 @@ #pragma once -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 98cb6709..0bc2c98b 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -367,7 +367,7 @@ namespace SHADE , graphResources{} , resourceManager{nullptr} { - resourceManager = std::make_shared(); + resourceManager = std::make_shared(); } SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 952c6d8f..a919c4ff 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -2,7 +2,7 @@ #define SH_RENDER_GRAPH_H #include "Graphics/Renderpass/SHVkRenderpass.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "SH_API.h" #include "Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h" #include "Graphics/MiddleEnd/Batching/SHSuperBatch.h" @@ -71,7 +71,7 @@ namespace SHADE std::unordered_map> graphResources; //! Resource library for graph handles - std::shared_ptr resourceManager; + std::shared_ptr resourceManager; public: /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index ec184386..5950426e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -104,7 +104,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept : logicalDeviceHdl{ logicalDevice } , renderpass{} , framebuffers{} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 77861108..3cb1c4ee 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -13,7 +13,7 @@ namespace SHADE { - class ResourceManager; + class SHResourceHub; class SHVkFramebuffer; class SHRenderGraphResource; class SHVkLogicalDevice; @@ -26,7 +26,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - std::shared_ptr resourceManager; + std::shared_ptr resourceManager; //! For Vulkan object creation Handle logicalDeviceHdl; @@ -88,7 +88,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index efaf9bf5..fc8b05f7 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -3,7 +3,7 @@ #include #include "SHAttachmentDescriptionType.h" #include -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/SHVulkanIncludes.h" #include "SH_API.h" diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index ffbe4ff0..7c5021f8 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -182,7 +182,7 @@ namespace SHADE exteriorDrawCalls.push_back(newDrawCall); } - void SHSubpass::Init(ResourceManager& resourceManager) noexcept + void SHSubpass::Init(SHResourceHub& resourceManager) noexcept { superBatch = resourceManager.Create(GetHandle()); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index c567a897..e5094708 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -3,7 +3,7 @@ #include "SHAttachmentDescriptionType.h" #include #include "SH_API.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "Graphics/SHVulkanIncludes.h" @@ -78,7 +78,7 @@ namespace SHADE void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; - void Init(ResourceManager& resourceManager) noexcept; + void Init(SHResourceHub& resourceManager) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h index 3ebc5676..7bbbe051 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkAttachDescGen.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkAttachDescGen.h index a44f4f27..8cbf72af 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkAttachDescGen.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkAttachDescGen.h @@ -2,7 +2,7 @@ #define SH_VK_ATTACHMENT_DESC_GEN_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h index 70a04bbf..c265e603 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.h @@ -3,7 +3,7 @@ #include "SHVkAttachDescGen.h" #include "SHVkSubpassParams.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkSubpassParams.h b/SHADE_Engine/src/Graphics/Renderpass/SHVkSubpassParams.h index bf789c54..6f722f5a 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkSubpassParams.h +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkSubpassParams.h @@ -2,7 +2,7 @@ #define SH_VK_SUBPASS_PARAMS_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include namespace SHADE diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index ca3b6f83..dbf17826 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -3,7 +3,7 @@ #include "SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.h b/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.h index 2973d734..492710f2 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.h +++ b/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.h @@ -2,7 +2,7 @@ #define SH_VK_SHADER_MODULE_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" #include "SHShaderReflected.h" #include diff --git a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.h b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.h index 28bd7a4e..384665d3 100644 --- a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.h +++ b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.h @@ -4,7 +4,7 @@ #include #include #include "Graphics/SHVulkanIncludes.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "Graphics/Swapchain/SHSwapchainParams.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/Synchronization/SHVkFence.h b/SHADE_Engine/src/Graphics/Synchronization/SHVkFence.h index 02445d42..7c48a5f6 100644 --- a/SHADE_Engine/src/Graphics/Synchronization/SHVkFence.h +++ b/SHADE_Engine/src/Graphics/Synchronization/SHVkFence.h @@ -2,7 +2,7 @@ #define SH_VK_FENCE_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Synchronization/SHVkSemaphore.h b/SHADE_Engine/src/Graphics/Synchronization/SHVkSemaphore.h index 57f7d7df..f03cad65 100644 --- a/SHADE_Engine/src/Graphics/Synchronization/SHVkSemaphore.h +++ b/SHADE_Engine/src/Graphics/Synchronization/SHVkSemaphore.h @@ -2,7 +2,7 @@ #define SH_VK_SEMAPHORE_H #include "Graphics/SHVulkanIncludes.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/Windowing/Surface/SHVkSurface.h b/SHADE_Engine/src/Graphics/Windowing/Surface/SHVkSurface.h index 0328fecc..bf01dc9c 100644 --- a/SHADE_Engine/src/Graphics/Windowing/Surface/SHVkSurface.h +++ b/SHADE_Engine/src/Graphics/Windowing/Surface/SHVkSurface.h @@ -3,7 +3,7 @@ #include #include "Graphics/SHVulkanIncludes.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" namespace SHADE { diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/SHHandle.h similarity index 97% rename from SHADE_Engine/src/Resource/Handle.h rename to SHADE_Engine/src/Resource/SHHandle.h index 9579063c..ffc8ae6b 100644 --- a/SHADE_Engine/src/Resource/Handle.h +++ b/SHADE_Engine/src/Resource/SHHandle.h @@ -9,7 +9,7 @@ namespace SHADE /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ template - class ResourceLibrary; + class SHResourceLibrary; /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -140,12 +140,12 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - ResourceLibrary* library = nullptr; + SHResourceLibrary* library = nullptr; /*-----------------------------------------------------------------------------*/ /* Friend Declarations */ /*-----------------------------------------------------------------------------*/ - friend class ResourceLibrary; + friend class SHResourceLibrary; }; /// @@ -183,7 +183,7 @@ namespace SHADE /// /// Required to lock usage to ResourceLibrary only. /// Handle to set. - void SetHandle(const ResourceLibrary& rscLib, Handle hdl); + void SetHandle(const SHResourceLibrary& rscLib, Handle hdl); private: /*-----------------------------------------------------------------------------*/ @@ -220,4 +220,4 @@ namespace std }; } -#include "Handle.hpp" \ No newline at end of file +#include "SHHandle.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Resource/Handle.hpp b/SHADE_Engine/src/Resource/SHHandle.hpp similarity index 96% rename from SHADE_Engine/src/Resource/Handle.hpp rename to SHADE_Engine/src/Resource/SHHandle.hpp index 45468ec1..6f6ea31f 100644 --- a/SHADE_Engine/src/Resource/Handle.hpp +++ b/SHADE_Engine/src/Resource/SHHandle.hpp @@ -1,7 +1,7 @@ #pragma once // Primary Header -#include "Handle.h" -#include "ResourceLibrary.h" +#include "SHHandle.h" +#include "SHResourceLibrary.h" namespace SHADE { @@ -96,7 +96,7 @@ namespace SHADE return handle; } template - inline void ISelfHandle::SetHandle(const ResourceLibrary&, Handle hdl) + inline void ISelfHandle::SetHandle(const SHResourceLibrary&, Handle hdl) { handle = hdl; } diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.cpp b/SHADE_Engine/src/Resource/SHResourceLibrary.cpp similarity index 87% rename from SHADE_Engine/src/Resource/ResourceLibrary.cpp rename to SHADE_Engine/src/Resource/SHResourceLibrary.cpp index b215b591..db4a8f48 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.cpp +++ b/SHADE_Engine/src/Resource/SHResourceLibrary.cpp @@ -1,11 +1,11 @@ #include "SHPch.h" -#include "ResourceLibrary.h" +#include "SHResourceLibrary.h" namespace SHADE { /*-----------------------------------------------------------------------------*/ /* Constructors/Destructors */ /*-----------------------------------------------------------------------------*/ - ResourceManager::~ResourceManager() + SHResourceHub::~SHResourceHub() { // Delete all resources libraries for (auto iter = deleters.rbegin(); iter != deleters.rend(); ++iter) diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.h b/SHADE_Engine/src/Resource/SHResourceLibrary.h similarity index 96% rename from SHADE_Engine/src/Resource/ResourceLibrary.h rename to SHADE_Engine/src/Resource/SHResourceLibrary.h index a5bf0a67..c83cf321 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.h +++ b/SHADE_Engine/src/Resource/SHResourceLibrary.h @@ -6,7 +6,7 @@ #include // Project Headers -#include "Handle.h" +#include "SHHandle.h" #include "Resource/SparseSet.h" namespace SHADE @@ -17,13 +17,13 @@ namespace SHADE ///
    /// Type of resources that this library stores. template - class ResourceLibrary + class SHResourceLibrary { public: /*-----------------------------------------------------------------------------*/ /* Constructor */ /*-----------------------------------------------------------------------------*/ - ResourceLibrary(); + SHResourceLibrary(); /*-----------------------------------------------------------------------------*/ /* Usage Functions */ @@ -75,13 +75,13 @@ namespace SHADE /// /// Manages all resources in multiple ResourceLibraries. /// - class ResourceManager final + class SHResourceHub final { public: /*-----------------------------------------------------------------------------*/ /* Constructors/Destructors */ /*-----------------------------------------------------------------------------*/ - ~ResourceManager(); + ~SHResourceHub(); /*-----------------------------------------------------------------------------*/ /* Usage Functions */ @@ -136,10 +136,10 @@ namespace SHADE /* Helper Functions */ /*-----------------------------------------------------------------------------*/ template - ResourceLibrary& getLibrary(); + SHResourceLibrary& getLibrary(); template - const ResourceLibrary& getLibrary() const; + const SHResourceLibrary& getLibrary() const; }; } -#include "ResourceLibrary.hpp" \ No newline at end of file +#include "SHResourceLibrary.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.hpp b/SHADE_Engine/src/Resource/SHResourceLibrary.hpp similarity index 83% rename from SHADE_Engine/src/Resource/ResourceLibrary.hpp rename to SHADE_Engine/src/Resource/SHResourceLibrary.hpp index 9aa72ead..54120a94 100644 --- a/SHADE_Engine/src/Resource/ResourceLibrary.hpp +++ b/SHADE_Engine/src/Resource/SHResourceLibrary.hpp @@ -1,6 +1,6 @@ #pragma once // Primary Header -#include "ResourceLibrary.h" +#include "SHResourceLibrary.h" // Standard Library #include @@ -10,7 +10,7 @@ namespace SHADE /* ResourceLibrary - Constructor */ /*---------------------------------------------------------------------------------*/ template - ResourceLibrary::ResourceLibrary() + SHResourceLibrary::SHResourceLibrary() { // Type Checking //static_assert(std::is_copy_assignable_v, "Resource Library's resources must be copy assignable."); @@ -24,7 +24,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ template template - Handle ResourceLibrary::Create(Args&&... args) + Handle SHResourceLibrary::Create(Args&&... args) { // Create the handle Handle handle; @@ -55,7 +55,7 @@ namespace SHADE } template - void ResourceLibrary::Free(Handle handle) + void SHResourceLibrary::Free(Handle handle) { assertHandleValid(handle); @@ -63,7 +63,7 @@ namespace SHADE } template - T& ResourceLibrary::Get(Handle handle) + T& SHResourceLibrary::Get(Handle handle) { assertHandleValid(handle); @@ -71,7 +71,7 @@ namespace SHADE } template - const T& ResourceLibrary::Get(Handle handle) const + const T& SHResourceLibrary::Get(Handle handle) const { assertHandleValid(handle); @@ -82,14 +82,14 @@ namespace SHADE /* ResourceLibrary - Helper Functions */ /*---------------------------------------------------------------------------------*/ template - void ResourceLibrary::assertHandleValid(Handle handle) const + void SHResourceLibrary::assertHandleValid(Handle handle) const { if (!handle || handle.id.Data.Version != versionCounts[handle.id.Data.Index]) throw std::invalid_argument("Invalid handle provided!"); } template - inline uint32_t ResourceLibrary::getAvailableFreeIndex() + inline uint32_t SHResourceLibrary::getAvailableFreeIndex() { // Get from the free list if present if (!freeList.empty()) @@ -107,25 +107,25 @@ namespace SHADE /* ResourceManager - Usage Functions */ /*---------------------------------------------------------------------------------*/ template - Handle ResourceManager::Create(Args&&... args) + Handle SHResourceHub::Create(Args&&... args) { return getLibrary().Create(std::forward(args) ...); } template - void ResourceManager::Free(Handle handle) + void SHResourceHub::Free(Handle handle) { getLibrary().Free(handle); } template - T& ResourceManager::Get(Handle handle) + T& SHResourceHub::Get(Handle handle) { return getLibrary().Get(handle); } template - const T& ResourceManager::Get(Handle handle) const + const T& SHResourceHub::Get(Handle handle) const { return getLibrary().Get(handle); } @@ -134,18 +134,18 @@ namespace SHADE /* ResourceManager - Helper Functions */ /*-----------------------------------------------------------------------------*/ template - ResourceLibrary& ResourceManager::getLibrary() + SHResourceLibrary& SHResourceHub::getLibrary() { // Attempt to retrieve the library const std::type_index RSC_TYPE = typeid(T); if (resourceLibs.contains(RSC_TYPE)) { - return *static_cast*>(resourceLibs.at(RSC_TYPE)); + return *static_cast*>(resourceLibs.at(RSC_TYPE)); } else { // Construct library if doesn't exist - ResourceLibrary* lib = new ResourceLibrary(); + SHResourceLibrary* lib = new SHResourceLibrary(); resourceLibs.emplace(RSC_TYPE, static_cast(lib)); // Construct deleter to properly delete objects with void* @@ -156,8 +156,8 @@ namespace SHADE } template - const ResourceLibrary& ResourceManager::getLibrary() const + const SHResourceLibrary& SHResourceHub::getLibrary() const { - return const_cast(this).getLibrary(); + return const_cast(this).getLibrary(); } } From e01a608d8c3e5ce6112cac7d1620a2bf8baf0ca4 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 20 Oct 2022 19:16:03 +0800 Subject: [PATCH 391/793] Transform gizmo finally rendering correctly --- .../Inspector/SHEditorInspector.cpp | 6 +++- .../Editor/EditorWindow/SHEditorWindow.cpp | 5 ++- .../src/Editor/EditorWindow/SHEditorWindow.h | 8 +++-- .../ViewportWindow/SHEditorViewport.cpp | 32 ++++++++----------- .../ViewportWindow/SHEditorViewport.h | 3 ++ .../src/Editor/Gizmos/SHTransformGizmo.cpp | 16 +++++++--- SHADE_Engine/src/Editor/SHEditor.cpp | 7 ++-- SHADE_Engine/src/Editor/SHEditor.hpp | 2 +- 8 files changed, 46 insertions(+), 33 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index da09f345..b59ce9cc 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -55,7 +55,11 @@ namespace SHADE { EntityID const& eid = editor->selectedEntities[0]; SHEntity* entity = SHEntityManager::GetEntityByID(eid); - + if(!entity) + { + ImGui::End(); + return; + } ImGui::TextColored(ImGuiColors::green, "EID: %zu", eid); SHEditorWidgets::CheckBox("##IsActive", [entity]()->bool {return entity->GetActive(); }, [entity](bool const& active) {entity->SetActive(active); }); ImGui::SameLine(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index edbe0faa..b5a691d8 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -43,9 +43,12 @@ namespace SHADE bool result = ImGui::Begin(windowName.data(), &isOpen, windowFlags); auto wndSize = ImGui::GetWindowSize(); - if(windowSize.x != wndSize.x || windowSize.y != wndSize.y) + auto contentRegionAvail = ImGui::GetContentRegionAvail(); + if( beginContentRegionAvailable.x != contentRegionAvail.x || beginContentRegionAvailable.y != contentRegionAvail.y || windowSize.x != wndSize.x || windowSize.y != wndSize.y) { windowSize = {wndSize.x, wndSize.y}; + beginContentRegionAvailable = {contentRegionAvail.x, contentRegionAvail.y}; + OnResize(); } auto wndPos = ImGui::GetWindowPos(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index f46cd880..239d8223 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -26,6 +26,10 @@ namespace SHADE bool isOpen; bool isWindowHovered; std::string_view windowName; + SHVec2 windowSize; + SHVec2 windowPos; + SHVec2 viewportMousePos; + SHVec2 beginContentRegionAvailable; protected: virtual bool Begin(); virtual void OnResize(); @@ -33,8 +37,6 @@ namespace SHADE ImGuiWindowFlags windowFlags = 0; ImGuiIO& io; - SHVec2 windowSize; - SHVec2 windowPos; - SHVec2 viewportMousePos; + };//class SHEditorWindow }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index 420443ae..f4403ecb 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -1,6 +1,8 @@ #include "SHpch.h" +#include "Editor/SHImGuiHelpers.hpp" #include "SHEditorViewport.h" +#include "ImGuizmo.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.hpp" #include "Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h" @@ -24,31 +26,21 @@ namespace SHADE void SHEditorViewport::Update() { SHEditorWindow::Update(); + //ImGuizmo::SetDrawlist(ImGui::GetBackgroundDrawList(ImGui::GetMainViewport())); + + ImGuizmo::SetRect(beginCursorPos.x, beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); + transfromGizmo.Draw(); if(Begin()) { DrawMenuBar(); auto gfxSystem = SHSystemManager::GetSystem(); auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; auto mousePos = ImGui::GetMousePos(); - auto cursorPos = ImGui::GetCursorScreenPos(); - viewportMousePos = {mousePos.x - cursorPos.x, mousePos.y - cursorPos.y}; + beginCursorPos = ImGui::GetCursorScreenPos(); + viewportMousePos = {mousePos.x - beginCursorPos.x, mousePos.y - beginCursorPos.y}; gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); - //if (ImGui::IsMouseReleased(ImGuiMouseButton_Left)) - //{ - // auto eid = gfxSystem->GetMousePickSystem ()->GetPickedEntity(); - // if(eid != MAX_EID) - // { - // auto editor = SHSystemManager::GetSystem(); - // editor->selectedEntities.clear(); - // editor->selectedEntities.push_back(eid); - // if (const auto hierarchyPanel = SHEditorWindowManager::GetEditorWindow()) - // { - // hierarchyPanel->SetScrollTo(eid); - // } - // } - //} - ImGui::Image((ImTextureID)descriptorSet, ImGui::GetWindowSize()); + ImGui::Image((ImTextureID)descriptorSet, {beginContentRegionAvailable.x, beginContentRegionAvailable.y}); } ImGui::End(); } @@ -66,7 +58,11 @@ namespace SHADE //auto pos = ImGui::GetCursorPos(); //windowCursorPos = {} - gfxSystem->PrepareResize(static_cast(windowSize.x), static_cast(windowSize.y)); + if(beginContentRegionAvailable.x == 0 || beginContentRegionAvailable.y == 0) + { + beginContentRegionAvailable = windowSize; + } + gfxSystem->PrepareResize(static_cast(beginContentRegionAvailable.x), static_cast(beginContentRegionAvailable.y)); } void SHEditorViewport::OnPosChange() diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h index 5f4a5919..7bcfed82 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -10,6 +10,7 @@ #include "imgui_internal.h" #include "ECS_Base/SHECSMacros.h" #include "Editor/EditorWindow/SHEditorWindow.h" +#include "Editor/Gizmos/SHTransformGizmo.h" namespace SHADE { @@ -25,5 +26,7 @@ namespace SHADE void OnPosChange() override; private: void DrawMenuBar() const noexcept; + SHTransformGizmo transfromGizmo; + SHVec2 beginCursorPos; };//class SHEditorViewport }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 5c3a0ce0..70f98eb1 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -8,6 +8,7 @@ #include #include "Camera/SHCameraSystem.h" +#include "Editor/EditorWindow/ViewportWindow/SHEditorViewport.h" namespace SHADE { @@ -21,20 +22,25 @@ namespace SHADE EntityID eid = editor->selectedEntities.back(); selectedEntityTranformComponent = SHComponentManager::GetComponent_s(eid); } - + if(selectedEntityTranformComponent == nullptr) + return; if(!editorCamera) { auto const cameraSystem = SHSystemManager::GetSystem(); editorCamera = cameraSystem->GetEditorCamera(); } + auto viewportWindow = SHEditorWindowManager::GetEditorWindow(); ImGuizmo::SetOrthographic(false); - SHMatrix view = editorCamera->GetViewMatrix(); - SHMatrix proj = editorCamera->GetProjMatrix(); + SHMatrix view = SHMatrix::Transpose(editorCamera->GetViewMatrix()); + view(3, 1) = -view(3, 1); + SHMatrix proj = SHMatrix::Transpose(editorCamera->GetProjMatrix()); SHMatrix mat = selectedEntityTranformComponent->GetTRS(); - ImGuizmo::DrawGrid(view.m[0], proj.m[0], mat.m[0], 10.f); - if(ImGuizmo::Manipulate(view.m[0], proj.m[0], ImGuizmo::OPERATION::UNIVERSAL, ImGuizmo::MODE::WORLD, mat.m[0])) + SHMatrix gridMat = SHMatrix::Identity; + ImGuizmo::DrawGrid(&view._11, &proj._11, &gridMat._11, 0.1f); + //ImGuizmo::ViewManipulate() + if(ImGuizmo::Manipulate(&view._11, &proj._11, ImGuizmo::OPERATION::UNIVERSAL, ImGuizmo::MODE::WORLD, &mat._11)) { } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 7399665f..162102b3 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -88,10 +88,10 @@ namespace SHADE //Add editor windows SHEditorWindowManager::CreateEditorWindow(); - SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); io = &ImGui::GetIO(); @@ -128,11 +128,10 @@ namespace SHADE for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) { if(window->isOpen) + { window->Update(); + } } - - ImGuizmo::SetDrawlist(ImGui::GetForegroundDrawList()); - transformGizmo.Draw(); if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.hpp index 4f8b32e2..5603e9f4 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.hpp @@ -203,6 +203,6 @@ namespace SHADE ImGuiIO* io{nullptr}; - SHTransformGizmo transformGizmo; + //SHTransformGizmo transformGizmo; };//class SHEditor }//namespace SHADE From c177dabcd04890fbc9483c2fd066ab77b65a2725 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 20 Oct 2022 19:36:43 +0800 Subject: [PATCH 392/793] WIP (not working) --- .../Graphics/Devices/SHVkLogicalDevice.cpp | 9 +++++ .../src/Graphics/Devices/SHVkLogicalDevice.h | 7 +++- .../MiddleEnd/Pipeline/SHPipelineLibrary.cpp | 14 ++++---- .../MiddleEnd/Pipeline/SHPipelineLibrary.h | 8 ++--- .../Graphics/RenderGraph/SHRenderGraph.cpp | 31 +++++++++-------- .../src/Graphics/RenderGraph/SHRenderGraph.h | 11 ++++--- .../RenderGraph/SHRenderGraphNode.cpp | 30 ++++++++--------- .../Graphics/RenderGraph/SHRenderGraphNode.h | 9 ++--- .../RenderGraph/SHRenderGraphResource.cpp | 17 +++++----- .../RenderGraph/SHRenderGraphResource.h | 3 +- .../RenderGraph/SHRenderGraphStorage.h | 33 +++++++++++++++++++ .../src/Graphics/RenderGraph/SHSubpass.cpp | 16 +++++++-- .../src/Graphics/RenderGraph/SHSubpass.h | 13 +++++++- .../Graphics/RenderGraph/SHSubpassCompute.cpp | 21 +++++++++--- .../Graphics/RenderGraph/SHSubpassCompute.h | 22 ++++++++++--- 15 files changed, 172 insertions(+), 72 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 7c7acfc5..a6b415a9 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -233,6 +233,8 @@ namespace SHADE , vmaAllocator{rhs.vmaAllocator} , nonDedicatedBestIndex {0} , parentPhysicalDeviceHdl {rhs.parentPhysicalDeviceHdl} + , uboBufferMemoryAlignment{ 0 } + , ssboBufferMemoryAlignment{ 0 } { rhs.vkLogicalDevice = VK_NULL_HANDLE; } @@ -261,6 +263,8 @@ namespace SHADE vmaAllocator = rhs.vmaAllocator; nonDedicatedBestIndex = 0; parentPhysicalDeviceHdl = rhs.parentPhysicalDeviceHdl; + uboBufferMemoryAlignment = rhs.uboBufferMemoryAlignment; + ssboBufferMemoryAlignment = rhs.ssboBufferMemoryAlignment; rhs.vkLogicalDevice = VK_NULL_HANDLE; @@ -529,6 +533,11 @@ namespace SHADE } + Handle SHVkLogicalDevice::CreateComputePipeline(Handle const& pipelineLayoutHdl) noexcept + { + return SHVkInstance::GetResourceManager().Create (GetHandle(), pipelineLayoutHdl); + } + Handle SHVkLogicalDevice::CreateSampler(const SHVkSamplerParams& params) noexcept { return SHVkInstance::GetResourceManager().Create (GetHandle(), params); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 6f7048b8..58d8b398 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -175,12 +175,17 @@ namespace SHADE std::string const& shaderName ) noexcept; - Handle CreateGraphicsPipeline ( + Handle CreateGraphicsPipeline ( Handle const& pipelineLayoutHdl, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass ) noexcept; + + Handle CreateComputePipeline ( + Handle const& pipelineLayoutHdl + ) noexcept; + Handle CreateSampler (const SHVkSamplerParams& params) noexcept; Handle CreateRenderpass (std::span const vkDescriptions, std::vector const& subpasses) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp index 682b549c..495a3d37 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.cpp @@ -8,7 +8,7 @@ namespace SHADE { - Handle SHPipelineLibrary::CreateDrawPipeline(std::pair, Handle> const& vsFsPair, Handle renderpass, Handle subpass) noexcept + Handle SHPipelineLibrary::CreateGraphicsPipelines(std::pair, Handle> const& vsFsPair, Handle renderpass, Handle subpass) noexcept { SHPipelineLayoutParams params { @@ -52,7 +52,7 @@ namespace SHADE newPipeline->ConstructPipeline(); // Emplace the new pipeline - pipelines.emplace (vsFsPair, newPipeline); + graphicsPipelines.emplace (vsFsPair, newPipeline); return newPipeline; } @@ -62,19 +62,19 @@ namespace SHADE logicalDevice = device; } - Handle SHPipelineLibrary::GetDrawPipline(std::pair, Handle> const& vsFsPair) noexcept + Handle SHPipelineLibrary::GetGraphicsPipeline(std::pair, Handle> const& vsFsPair) noexcept { // return the pipeline requested for - if (pipelines.contains(vsFsPair)) - return pipelines.at(vsFsPair); + if (graphicsPipelines.contains(vsFsPair)) + return graphicsPipelines.at(vsFsPair); else return {}; } - bool SHPipelineLibrary::CheckDrawPipelineExistence(std::pair, Handle> const& vsFsPair) noexcept + bool SHPipelineLibrary::CheckGraphicsPipelineExistence(std::pair, Handle> const& vsFsPair) noexcept { // Returns if a pipeline exists or not - return pipelines.contains(vsFsPair); + return graphicsPipelines.contains(vsFsPair); } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h index 9a411d25..aeb023c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Pipeline/SHPipelineLibrary.h @@ -23,19 +23,19 @@ namespace SHADE Handle logicalDevice; //! a map of pipelines that are hashed using a pair of shader module handles - std::unordered_map, Handle>, Handle> pipelines; + std::unordered_map, Handle>, Handle> graphicsPipelines; public: void Init (Handle device) noexcept; // Draw pipeline functions. used only when creating pipelines for drawing using a vertex and fragment shader - Handle CreateDrawPipeline ( + Handle CreateGraphicsPipelines ( std::pair, Handle> const& vsFsPair, Handle renderpass, Handle subpass ) noexcept; - Handle GetDrawPipline (std::pair, Handle> const& vsFsPair) noexcept; - bool CheckDrawPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; + Handle GetGraphicsPipeline (std::pair, Handle> const& vsFsPair) noexcept; + bool CheckGraphicsPipelineExistence (std::pair, Handle> const& vsFsPair) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 98cb6709..1db410c0 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -9,6 +9,7 @@ #include "Graphics/Buffers/SHVkBuffer.h" #include "Tools/SHLogger.h" #include "SHAttachmentDescInitParams.h" +#include "SHRenderGraphStorage.h" namespace SHADE { @@ -52,12 +53,12 @@ namespace SHADE // If we set to if (w == static_cast(-1) && h == static_cast(-1)) { - w = swapchainHdl->GetSwapchainImage(0)->GetWidth(); - h = swapchainHdl->GetSwapchainImage(0)->GetHeight(); - format = swapchainHdl->GetSurfaceFormatKHR().format; + w = renderGraphStorage->swapchain->GetSwapchainImage(0)->GetWidth(); + h = renderGraphStorage->swapchain->GetSwapchainImage(0)->GetHeight(); + format = renderGraphStorage->swapchain->GetSurfaceFormatKHR().format; } - graphResources.try_emplace(resourceName, resourceManager->Create(logicalDeviceHdl, swapchainHdl, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); + graphResources.try_emplace(resourceName, resourceManager->Create(renderGraphStorage, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); } /***************************************************************************/ @@ -343,10 +344,15 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle const& logicalDevice, Handle const& swapchain) noexcept + void SHRenderGraph::Init(Handle logicalDevice, Handle swapchain) noexcept { - logicalDeviceHdl = logicalDevice; - swapchainHdl = swapchain; + renderGraphStorage = resourceManager->Create(); + + renderGraphStorage->logicalDevice = logicalDevice; + renderGraphStorage->swapchain = swapchain; + + renderGraphStorage->resourceManager = resourceManager; + renderGraphStorage->descriptorPool = logicalDevice->CreateDescriptorPools(); } /***************************************************************************/ @@ -361,8 +367,7 @@ namespace SHADE */ /***************************************************************************/ SHRenderGraph::SHRenderGraph(void) noexcept - : logicalDeviceHdl{ } - , swapchainHdl{ } + : renderGraphStorage{} , nodes{} , graphResources{} , resourceManager{nullptr} @@ -371,8 +376,7 @@ namespace SHADE } SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept - : logicalDeviceHdl{ rhs.logicalDeviceHdl } - , swapchainHdl{ rhs.swapchainHdl } + : renderGraphStorage{ rhs.renderGraphStorage } , nodeIndexing{ std::move(rhs.nodeIndexing) } , nodes{ std::move(rhs.nodes) } , graphResources{ std::move(rhs.graphResources) } @@ -386,8 +390,7 @@ namespace SHADE if (&rhs == this) return *this; - logicalDeviceHdl = rhs.logicalDeviceHdl; - swapchainHdl = rhs.swapchainHdl; + renderGraphStorage = rhs.renderGraphStorage; nodeIndexing = std::move(rhs.nodeIndexing); nodes = std::move(rhs.nodes); graphResources = std::move(rhs.graphResources); @@ -456,7 +459,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager->Create(resourceManager, logicalDeviceHdl, swapchainHdl, std::move(descInitParams), std::move(predecessors), &graphResources)); + nodes.emplace_back(resourceManager->Create(renderGraphStorage, std::move(descInitParams), std::move(predecessors), &graphResources)); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 952c6d8f..9dbfa6d3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -30,7 +30,8 @@ namespace SHADE class SHVkCommandBuffer; class SHRenderGraphNode; class SHGraphicsGlobalData; - + class SHVkDescriptorPool; + class SHRenderGraphStorage; class SH_API SHRenderGraph { @@ -56,10 +57,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - Handle logicalDeviceHdl; + //Handle logicalDeviceHdl; //! swapchain used for querying image count - Handle swapchainHdl; + //Handle swapchainHdl; + + Handle renderGraphStorage; //! For indexing render graph node container std::map nodeIndexing; @@ -85,7 +88,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle const& logicalDevice, Handle const& swapchain) noexcept; + void Init (Handle logicalDevice, Handle swapchain) noexcept; void AddResource(std::string resourceName, std::initializer_list typeFlags, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceInstruction, std::initializer_list predecessorNodes) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index ec184386..f9b3c42d 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -6,6 +6,7 @@ #include "Graphics/Framebuffer/SHVkFramebuffer.h" #include "SHRenderGraphResource.h" #include "SHSubpass.h" +#include "SHRenderGraphStorage.h" namespace SHADE { @@ -21,7 +22,7 @@ namespace SHADE /***************************************************************************/ void SHRenderGraphNode::CreateRenderpass(void) noexcept { - renderpass = logicalDeviceHdl->CreateRenderpass(attachmentDescriptions, spDescs, spDeps); + renderpass = graphStorage->logicalDevice->CreateRenderpass(attachmentDescriptions, spDescs, spDeps); } /***************************************************************************/ @@ -53,7 +54,7 @@ namespace SHADE } - framebuffers[i] = logicalDeviceHdl->CreateFramebuffer(renderpass, imageViews, fbWidth, fbHeight); + framebuffers[i] = graphStorage->logicalDevice->CreateFramebuffer(renderpass, imageViews, fbWidth, fbHeight); } } @@ -104,8 +105,8 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept - : logicalDeviceHdl{ logicalDevice } + SHRenderGraphNode::SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept + : graphStorage{ renderGraphStorage} , renderpass{} , framebuffers{} , prereqNodes{ std::move(predecessors) } @@ -115,11 +116,10 @@ namespace SHADE , subpasses{} , executed{ false } , configured{ false } - , resourceManager{ rm } , ptrToResources{ resources } { // pipeline library initialization - pipelineLibrary.Init(logicalDeviceHdl); + pipelineLibrary.Init(graphStorage->logicalDevice); // Store all the handles to resources attResources.reserve (attDescInitParams.size()); @@ -155,15 +155,14 @@ namespace SHADE if (!containsSwapchainImage) framebuffers.resize(1); else - framebuffers.resize(swapchain->GetNumImages()); + framebuffers.resize(graphStorage->swapchain->GetNumImages()); // At this point, we could configure framebuffers if we had the renderpass object but we don't so their creation has to be // deferred to when renderpasses are also created. } SHRenderGraphNode::SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept - : resourceManager{ std::move (rhs.resourceManager) } - , logicalDeviceHdl{ rhs.logicalDeviceHdl } + : graphStorage{ rhs.graphStorage} , renderpass{ rhs.renderpass } , framebuffers{ std::move(rhs.framebuffers) } , prereqNodes{ std::move(rhs.prereqNodes) } @@ -189,8 +188,7 @@ namespace SHADE if (&rhs == this) return *this; - resourceManager = std::move(rhs.resourceManager); - logicalDeviceHdl = rhs.logicalDeviceHdl; + graphStorage = rhs.graphStorage; renderpass = rhs.renderpass; framebuffers = std::move(rhs.framebuffers); prereqNodes = std::move(rhs.prereqNodes); @@ -235,10 +233,10 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager->Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(graphStorage->resourceManager->Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); - subpass->Init(*resourceManager); + subpass->Init(*graphStorage->resourceManager); // Register the SuperBatch batcher.RegisterSuperBatch(subpass->GetSuperBatch()); @@ -273,10 +271,10 @@ namespace SHADE } - Handle pipeline = pipelineLibrary.GetDrawPipline(vsFsPair); + Handle pipeline = pipelineLibrary.GetGraphicsPipeline(vsFsPair); if (!pipeline) { - pipeline = pipelineLibrary.CreateDrawPipeline + pipeline = pipelineLibrary.CreateGraphicsPipelines ( vsFsPair, renderpass, @@ -289,7 +287,7 @@ namespace SHADE void SHRenderGraphNode::FinaliseBatch(uint32_t frameIndex, Handle descPool) { - batcher.FinaliseBatches(logicalDeviceHdl, descPool, frameIndex); + batcher.FinaliseBatches(graphStorage->logicalDevice, descPool, frameIndex); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 77861108..04638c37 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -19,6 +19,8 @@ namespace SHADE class SHVkLogicalDevice; class SHVkRenderpass; class SHVkDescriptorPool; + class SHGraphicsGlobalData; + class SHRenderGraphStorage; class SH_API SHRenderGraphNode : public ISelfHandle { @@ -26,10 +28,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - std::shared_ptr resourceManager; - //! For Vulkan object creation - Handle logicalDeviceHdl; + //Handle logicalDeviceHdl; + Handle graphStorage; //! Each node will have a renderpass and each renderpass will have its own subpasses. //! These subpasses will execute sequentially. @@ -88,7 +89,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(std::shared_ptr rm, Handle const& logicalDevice, Handle const& swapchain, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index adf3b6cd..3d05f466 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -5,6 +5,7 @@ #include "Graphics/Images/SHVkImageView.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/SHVkUtil.h" +#include "SHRenderGraphStorage.h" namespace SHADE { @@ -45,7 +46,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept + SHRenderGraphResource::SHRenderGraphResource(Handle graphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept : logicalDevice {logicalDevice} , swapchain{ swapchain } , resourceTypeFlags{ } @@ -75,13 +76,13 @@ namespace SHADE }; // We want an image handle for every swapchain image - images.resize(swapchain->GetNumImages()); - imageViews.resize(swapchain->GetNumImages()); + images.resize(graphStorage->swapchain->GetNumImages()); + imageViews.resize(graphStorage->swapchain->GetNumImages()); - for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) + for (uint32_t i = 0; i < graphStorage->swapchain->GetNumImages(); ++i) { - images[i] = swapchain->GetSwapchainImage(i); - imageViews[i] = images[i]->CreateImageView(logicalDevice, images[i], viewDetails); + images[i] = graphStorage->swapchain->GetSwapchainImage(i); + imageViews[i] = images[i]->CreateImageView(graphStorage->logicalDevice, images[i], viewDetails); } } else // if swapchain image resource @@ -126,7 +127,7 @@ namespace SHADE } // The resource is not a swapchain image, just use the first slot of the vector - images.push_back(logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); + images.push_back(graphStorage->logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); // prepare image view details SHImageViewDetails viewDetails @@ -141,7 +142,7 @@ namespace SHADE }; // just 1 image view created - imageViews.push_back(images[0]->CreateImageView(logicalDevice, images[0], viewDetails)); + imageViews.push_back(images[0]->CreateImageView(graphStorage->logicalDevice, images[0], viewDetails)); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index efaf9bf5..e11f6ed8 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -15,6 +15,7 @@ namespace SHADE class SHVkSwapchain; class SHVkCommandBuffer; class SHVkBuffer; + class SHRenderGraphStorage; static constexpr uint32_t NON_SWAPCHAIN_RESOURCE_INDEX = 0; @@ -69,7 +70,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphResource(Handle const& logicalDevice, Handle const& swapchain, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; + SHRenderGraphResource(Handle graphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h new file mode 100644 index 00000000..9fcc4528 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h @@ -0,0 +1,33 @@ +#pragma once + +#include "Resource/Handle.h" +#include + +namespace SHADE +{ + class SHVkLogicalDevice; + class SHVkSwapchain; + class SHGraphicsGlobalData; + class SHVkDescriptorPool; + + class SHRenderGraphStorage + { + //! Logical device for creation of vulkan objects + Handle logicalDevice; + + //! swapchain hdl + Handle swapchain; + + //! Resource manager for creation of objects + std::shared_ptr resourceManager; + + //! Descriptor pool for the descriptor sets to be created in the subpasses + Handle descriptorPool; + + friend class SHRenderGraph; + friend class SHRenderGraphNode; + friend class SHSubpass; + friend class SHRenderGraphResource; + friend class SHSubpassCompute; + }; +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index ffbe4ff0..9926fc2f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -4,6 +4,10 @@ #include "Graphics/Devices/SHVkLogicalDevice.h" #include "SHRenderGraphNode.h" #include "SHRenderGraphResource.h" +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "SHRenderGraphNode.h" +#include "SHRenderGraphStorage.h" +#include "Graphics/RenderGraph/SHSubpassCompute.h" namespace SHADE { @@ -23,7 +27,7 @@ namespace SHADE */ /***************************************************************************/ - SHSubpass::SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHSubpass::SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } @@ -32,6 +36,7 @@ namespace SHADE , colorReferences{} , depthReferences{} , inputReferences{} + , graphStorage{ renderGraphStorage } { } @@ -56,7 +61,8 @@ namespace SHADE , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } , ptrToResources{ rhs.ptrToResources } , descriptorSetLayout{ rhs.descriptorSetLayout } - , exteriorDrawCalls{ std::move (rhs.exteriorDrawCalls) } + , exteriorDrawCalls{ std::move(rhs.exteriorDrawCalls) } + , graphStorage{ std::move(rhs.graphStorage) } { } @@ -87,6 +93,7 @@ namespace SHADE ptrToResources = rhs.ptrToResources; descriptorSetLayout = rhs.descriptorSetLayout; exteriorDrawCalls = std::move(rhs.exteriorDrawCalls); + graphStorage = std::move(rhs.graphStorage); return *this; } @@ -182,6 +189,11 @@ namespace SHADE exteriorDrawCalls.push_back(newDrawCall); } + Handle SHSubpass::ActivateSubpassCompute(Handle computeShaderModule, std::initializer_list resources) noexcept + { + //subpassCompute = graphStorage->resourceManager->Create(, parentNode->GetGraphDescPool(), resources); + } + void SHSubpass::Init(ResourceManager& resourceManager) noexcept { superBatch = resourceManager.Create(GetHandle()); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index c567a897..71496b92 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -15,6 +15,9 @@ namespace SHADE class SHVkCommandBuffer; class SHVkDescriptorSetLayout; class SHVkDescriptorPool; + class SHRenderGraphStorage; + class SHSubpassCompute; + class SHVkShaderModule; class SH_API SHSubpass : public ISelfHandle { @@ -22,6 +25,8 @@ namespace SHADE /*---------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*---------------------------------------------------------------------*/ + Handle graphStorage; + //! The index of the subpass in the render graph uint32_t subpassIndex; @@ -49,6 +54,10 @@ namespace SHADE //! Pointer to resources in the render graph (for getting handle IDs) std::unordered_map> const* ptrToResources; + //! Sometimes we want the subpass to do something to the images instead + //! of drawing objects on the image (i.e. compute). + Handle subpassCompute; + //! Sometimes there exists entities that we want to render onto a render target //! but don't want it to come from the batching system. An example would be ImGUI. //! For these entities we want to link a function from the outside and draw them @@ -62,7 +71,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; @@ -78,6 +87,8 @@ namespace SHADE void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; + Handle ActivateSubpassCompute(Handle computeShaderModule, std::initializer_list resources) noexcept; + void Init(ResourceManager& resourceManager) noexcept; /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp index ccd0e6c3..722e7e4f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp @@ -3,21 +3,32 @@ #include "Graphics/Pipeline/SHVkPipeline.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Pipeline/SHVkPipelineLayout.h" +#include "SHRenderGraphStorage.h" +//#include "" namespace SHADE { - SHSubpassCompute::SHSubpassCompute(Handle inPipeline, Handle descPool) noexcept - : pipeline {inPipeline} + SHSubpassCompute::SHSubpassCompute(Handle graphStorage, Handle computeShaderModule, std::initializer_list resources) noexcept + : pipeline{} { + SHPipelineLayoutParams pipelineLayoutParams + { + //.globalDescSetLayouts + }; + + //pipeline = logicalDevice->CreateComputePipeline() + // Get the descriptor set layouts required to allocate. we will bind a different pipeline layout, one that includes the layout for global. auto const& layouts = pipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); // Variable counts for the descriptor sets (all should be 1). - std::vector variableCounts{static_cast(layouts.size())}; - std::fill (variableCounts.begin(), variableCounts.end(), 0); + std::vector variableCounts{ static_cast(layouts.size()) }; + std::fill(variableCounts.begin(), variableCounts.end(), 0); // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) - descPool->Allocate(layouts, variableCounts); + descSetGroup = graphStorage->descriptorPool->Allocate(layouts, variableCounts); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h index 3ebc5676..8dfc361e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h @@ -1,24 +1,36 @@ #pragma once -#include +#include "Resource/Handle.h" +#include +#include namespace SHADE { class SHVkPipeline; class SHVkDescriptorSetGroup; class SHVkDescriptorPool; + class SHVkLogicalDevice; + class SHVkPipelineLayout; + class SHRenderGraphStorage; + class SHVkShaderModule; class SHSubpassCompute { private: //! To run the dispatch command - Handle pipeline; + Handle pipeline; - //! Descriptor set group + //! Pipeline layout for the pipline creation + Handle pipelineLayout; + + //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) Handle descSetGroup; - + + //! Required resources to be used in the descriptors + std::vector resourcesRequired; + public: - SHSubpassCompute (Handle inPipeline, Handle descPool) noexcept; + SHSubpassCompute(Handle graphStorage, Handle computeShaderModule, std::initializer_list resources) noexcept; }; } From fda33f7461087c84299a6afcac050a22e1ee81ac Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 20 Oct 2022 22:55:59 +0800 Subject: [PATCH 393/793] Fixed multi-level transform updates --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- .../src/Math/Transform/SHTransformSystem.cpp | 87 +++++++++++++++---- .../src/Math/Transform/SHTransformSystem.h | 7 +- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 12 +-- SHADE_Engine/src/Scene/SHSceneGraph.h | 6 +- 5 files changed, 84 insertions(+), 30 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index d81550e1..be09768b 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -78,7 +78,7 @@ namespace Sandbox // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = SHVec3::One; - constexpr int NUM_ROWS = 2; + constexpr int NUM_ROWS = 3; constexpr int NUM_COLS = 1; static const SHVec3 TEST_OBJ_SPACING = { 0.1f, 0.1f, 0.1f }; static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 448fa60d..a3ca3e75 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -64,17 +64,18 @@ namespace SHADE { const auto& eventData = reinterpret_cast*>(changeParentEvent.get()); - // Get Current Respective Components - auto* tf = SHComponentManager::GetComponent(eventData->data->entityID); - const auto* PARENT = SHComponentManager::GetComponent_s(eventData->data->newParentID); + auto* node = eventData->data->node; + auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); // Recompute local transform and store localToWorld Matrix SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; - if (PARENT != nullptr) // Not the root + auto* newParent = eventData->data->newParent; + const auto* PARENT_TF = SHComponentManager::GetComponent_s(newParent->GetEntityID()); + if (PARENT_TF != nullptr) // Not the root { - localToWorld = PARENT->GetTRS(); + localToWorld = PARENT_TF->GetTRS(); worldToLocal = SHMatrix::Inverse(localToWorld); } @@ -83,21 +84,74 @@ namespace SHADE // Compute Local Position tf->local.position = SHVec3::Transform(tf->world.position, worldToLocal); - // Compute Local Rotation - tf->local.rotation = tf->world.rotation; - if (PARENT) - tf->local.rotation -= PARENT->GetLocalRotation(); + + tf->local.rotation = tf->world.rotation; + tf->local.scale = tf->world.scale; - // Compute Local Scale - tf->local.scale = tf->world.scale; - if (PARENT) - tf->local.scale /= PARENT->GetLocalScale(); + if (PARENT_TF != nullptr) + { + // Compute Local Rotation + tf->local.rotation -= PARENT_TF->GetLocalRotation(); + + // Compute Local Scale + tf->local.scale /= PARENT_TF->GetLocalScale(); + } tf->local.trs = localToWorld; + // Propagate maintaining world transform down the branch + UpdateChildrenLocalTransforms(node); return eventData->handle; } + void SHTransformSystem::UpdateChildrenLocalTransforms(SHSceneNode* node) + { + // Structure is similar to update entity, albeit without a queue to do being a forced update + for (const auto* child : node->GetChildren()) + { + if (auto* childTransform = SHComponentManager::GetComponent_s(child->GetEntityID()); childTransform) + { + const bool IS_NODE_ACTIVE = child->IsActive(); + if (IS_NODE_ACTIVE && childTransform->isActive) + { + // Recompute local transform and store localToWorld Matrix + SHMatrix localToWorld = SHMatrix::Identity; + SHMatrix worldToLocal = SHMatrix::Identity; + + const auto* parent = SHComponentManager::GetComponent_s(node->GetEntityID()); + + if (parent != nullptr) // Not the root + { + localToWorld = parent->GetTRS(); + worldToLocal = SHMatrix::Inverse(localToWorld); + } + + // Maintain World Transform and recompute Local Transform + + // Compute Local Position + childTransform->local.position = SHVec3::Transform(childTransform->world.position, worldToLocal); + + + childTransform->local.rotation = childTransform->world.rotation; + childTransform->local.scale = childTransform->world.scale; + + if (parent) + { + // Compute Local Rotation + childTransform->local.rotation -= parent->GetLocalRotation(); + + // Compute Local Scale + childTransform->local.scale /= parent->GetLocalScale(); + } + + childTransform->local.trs = localToWorld; + } + } + + + } + } + void SHTransformSystem::UpdateEntity(const SHSceneNode* node) { const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); @@ -113,7 +167,10 @@ namespace SHADE if (IS_NODE_ACTIVE && childTransform->isActive) { if (childTransform->dirty || HAS_PARENT_CHANGED) + { UpdateTransform(*childTransform, NODE_TRANSFORM); + childTransform->dirty = true; + } } } @@ -177,10 +234,6 @@ namespace SHADE tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); tf.world.ComputeTRS(); - - // Transpose TRS to column major - //tf.local.trs.Transpose(); - //tf.world.trs.Transpose(); } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 8a50b368..95957830 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -84,10 +84,11 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHEventHandle ChangeParent (SHEventPtr changeParentEvent); + SHEventHandle ChangeParent (SHEventPtr changeParentEvent); + static void UpdateChildrenLocalTransforms (SHSceneNode* node); - static void UpdateEntity (const SHSceneNode* node); - static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); + static void UpdateEntity (const SHSceneNode* node); + static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); }; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index ac6975fb..950fd6a0 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -367,9 +367,9 @@ namespace SHADE const SHSceneGraphChangeParentEvent EVENT_DATA { - .entityID = entityID - , .oldParentID = NODE_ITER->second->GetParent()->GetEntityID() - , .newParentID = parent ? parent->GetEntityID() : root->GetEntityID() + .node = NODE_ITER->second + , .oldParent = NODE_ITER->second->GetParent() + , .newParent = parent ? parent : root }; if (parent == nullptr) @@ -413,9 +413,9 @@ namespace SHADE const SHSceneGraphChangeParentEvent EVENT_DATA { - .entityID = entityID - , .oldParentID = NODE_ITER->second->GetParent()->GetEntityID() - , .newParentID = parent + .node = NODE_ITER->second + , .oldParent = NODE_ITER->second->GetParent() + , .newParent = PARENT_ITER->second }; SHSceneNode* currentNode = NODE_ITER->second; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 1dfc1542..a4cf45eb 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -163,9 +163,9 @@ namespace SHADE struct SHSceneGraphChangeParentEvent { - EntityID entityID; - EntityID oldParentID; - EntityID newParentID; + SHSceneNode* node; + SHSceneNode* oldParent; + SHSceneNode* newParent; }; } // namespace SHADE \ No newline at end of file From a52f0ddeed7f7090a21567daeb85c366437bd2d5 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Fri, 21 Oct 2022 00:08:24 +0800 Subject: [PATCH 394/793] Added a degree getter and setter for rotation --- Assets/Editor/Layouts/UserLayout.ini | 2 +- .../Math/Transform/SHTransformComponent.cpp | 64 ++++++++++++++++++- .../src/Math/Transform/SHTransformComponent.h | 42 ++++++------ 3 files changed, 86 insertions(+), 22 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 7b0a70f8..396b853b 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -38,7 +38,7 @@ Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=-227,-1256 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1481,1036 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=349,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index 949cfa67..a8b75497 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -12,6 +12,8 @@ // Primary Header #include "SHTransformComponent.h" +// Project Headers +#include "Math/SHMathHelpers.h" namespace SHADE { @@ -43,6 +45,15 @@ namespace SHADE return local.rotation; } + SHVec3 SHTransformComponent::GetLocalRotationDeg() const noexcept + { + SHVec3 rot = local.rotation; + rot.x = SHMath::RadiansToDegrees(rot.x); + rot.y = SHMath::RadiansToDegrees(rot.y); + rot.z = SHMath::RadiansToDegrees(rot.z); + return rot; + } + const SHVec3& SHTransformComponent::GetLocalScale() const noexcept { return local.scale; @@ -58,6 +69,15 @@ namespace SHADE return world.rotation; } + SHVec3 SHTransformComponent::GetWorldRotationDeg() const noexcept + { + SHVec3 rot = world.rotation; + rot.x = SHMath::RadiansToDegrees(rot.x); + rot.y = SHMath::RadiansToDegrees(rot.y); + rot.z = SHMath::RadiansToDegrees(rot.z); + return rot; + } + const SHVec3& SHTransformComponent::GetWorldScale() const noexcept { return world.scale; @@ -94,6 +114,15 @@ namespace SHADE local.rotation = newLocalRotation; } + void SHTransformComponent::SetLocalRotationDeg(SHVec3 newLocalRotationDeg) noexcept + { + dirty = true; + + local.rotation.x = SHMath::DegreesToRadians(newLocalRotationDeg.x); + local.rotation.y = SHMath::DegreesToRadians(newLocalRotationDeg.y); + local.rotation.z = SHMath::DegreesToRadians(newLocalRotationDeg.z); + } + void SHTransformComponent::SetLocalRotation(float pitch, float yaw, float roll) noexcept { dirty = true; @@ -103,6 +132,13 @@ namespace SHADE local.rotation.z = roll; } + void SHTransformComponent::SetLocalRotationDeg(float pitch, float yaw, float roll) noexcept + { + local.rotation.x = SHMath::DegreesToRadians(pitch); + local.rotation.y = SHMath::DegreesToRadians(yaw); + local.rotation.z = SHMath::DegreesToRadians(roll); + } + void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept { dirty = true; @@ -125,6 +161,17 @@ namespace SHADE updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation }); } + void SHTransformComponent::SetWorldRotationDeg(const SHVec3& newWorldRotation) noexcept + { + dirty = true; + + world.rotation.x = SHMath::DegreesToRadians(newWorldRotation.x); + world.rotation.y = SHMath::DegreesToRadians(newWorldRotation.y); + world.rotation.z = SHMath::DegreesToRadians(newWorldRotation.z); + + updateQueue.push({ UpdateCommandType::WORLD_ROTATION, world.rotation }); + } + void SHTransformComponent::SetWorldRotation(float pitch, float yaw, float roll) noexcept { dirty = true; @@ -136,6 +183,17 @@ namespace SHADE updateQueue.push({ UpdateCommandType::WORLD_ROTATION, SHVec3{ pitch, yaw, roll} }); } + void SHTransformComponent::SetWorldRotationDeg(float pitch, float yaw, float roll) noexcept + { + dirty = true; + + world.rotation.x = SHMath::DegreesToRadians(pitch); + world.rotation.y = SHMath::DegreesToRadians(yaw); + world.rotation.z = SHMath::DegreesToRadians(roll); + + updateQueue.push({ UpdateCommandType::WORLD_ROTATION, world.rotation }); + } + void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept { dirty = true; @@ -152,7 +210,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) - .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation) ) - .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); + .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) + .property("Rotate" , &SHTransformComponent::GetLocalRotationDeg, select_overload(&SHTransformComponent::SetLocalRotationDeg)) + .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index ad355694..2a3fa7a0 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -56,32 +56,38 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool HasChanged () const noexcept; + [[nodiscard]] bool HasChanged () const noexcept; - [[nodiscard]] const SHVec3& GetLocalPosition () const noexcept; - [[nodiscard]] const SHVec3& GetLocalRotation () const noexcept; - [[nodiscard]] const SHVec3& GetLocalScale () const noexcept; - [[nodiscard]] const SHVec3& GetWorldPosition () const noexcept; - [[nodiscard]] const SHVec3& GetWorldRotation () const noexcept; - [[nodiscard]] const SHVec3& GetWorldScale () const noexcept; + [[nodiscard]] const SHVec3& GetLocalPosition () const noexcept; + [[nodiscard]] const SHVec3& GetLocalRotation () const noexcept; + [[nodiscard]] SHVec3 GetLocalRotationDeg () const noexcept; + [[nodiscard]] const SHVec3& GetLocalScale () const noexcept; + [[nodiscard]] const SHVec3& GetWorldPosition () const noexcept; + [[nodiscard]] const SHVec3& GetWorldRotation () const noexcept; + [[nodiscard]] SHVec3 GetWorldRotationDeg () const noexcept; + [[nodiscard]] const SHVec3& GetWorldScale () const noexcept; - [[nodiscard]] const SHMatrix& GetLocalToWorld () const noexcept; - [[nodiscard]] SHMatrix GetWorldToLocal () const noexcept; + [[nodiscard]] const SHMatrix& GetLocalToWorld () const noexcept; + [[nodiscard]] SHMatrix GetWorldToLocal () const noexcept; - [[nodiscard]] const SHMatrix& GetTRS () const noexcept; + [[nodiscard]] const SHMatrix& GetTRS () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; - void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; - void SetLocalRotation (float pitch, float yaw, float roll) noexcept; - void SetLocalScale (const SHVec3& newLocalScale) noexcept; - void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; - void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; - void SetWorldRotation (float pitch, float yaw, float roll) noexcept; - void SetWorldScale (const SHVec3& newWorldScale) noexcept; + void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; + void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; + void SetLocalRotationDeg (SHVec3 newLocalRotationDeg) noexcept; + void SetLocalRotation (float pitch, float yaw, float roll) noexcept; + void SetLocalRotationDeg (float pitch, float yaw, float roll) noexcept; + void SetLocalScale (const SHVec3& newLocalScale) noexcept; + void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; + void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; + void SetWorldRotationDeg (const SHVec3& newWorldRotation) noexcept; + void SetWorldRotation (float pitch, float yaw, float roll) noexcept; + void SetWorldRotationDeg (float pitch, float yaw, float roll) noexcept; + void SetWorldScale (const SHVec3& newWorldScale) noexcept; private: /*---------------------------------------------------------------------------------*/ From c252e4ce4b7591da5eafa04a02329d32f20e06b1 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 21 Oct 2022 07:01:51 +0800 Subject: [PATCH 395/793] Some restructuring with render graph storage. Lesser parameters passed around. --- Assets/Editor/Layouts/UserLayout.ini | 20 +++++++++---------- .../Descriptors/SHVkDescriptorPool.cpp | 3 ++- .../RenderGraph/SHRenderGraphNode.cpp | 2 +- .../RenderGraph/SHRenderGraphResource.cpp | 17 ++++++++-------- .../RenderGraph/SHRenderGraphResource.h | 9 +++------ .../src/Graphics/RenderGraph/SHSubpass.cpp | 3 ++- 6 files changed, 26 insertions(+), 28 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 33b4ccfd..530ee770 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1389 -Size=2547,20 +Pos=0,1060 +Size=1920,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=2547,1341 +Size=1920,1012 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,172 -Size=571,1217 +Pos=0,142 +Size=571,918 Collapsed=0 DockId=0x00000004,0 @@ -20,25 +20,25 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=2276,48 -Size=271,1341 +Pos=1649,48 +Size=271,1012 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=571,122 +Size=571,92 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] Pos=573,48 -Size=1701,1341 +Size=1074,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=2547,1341 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp index 6b770c3d..e5618c9c 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorPool.cpp @@ -25,7 +25,8 @@ namespace SHADE } SHVkDescriptorPool::SHVkDescriptorPool(SHVkDescriptorPool&& rhs) noexcept - : device{ rhs.device } + : ISelfHandle (rhs) + , device{ rhs.device } , pool{ rhs.pool } { rhs.pool = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index f9b3c42d..48855806 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -233,7 +233,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(graphStorage->resourceManager->Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(graphStorage->resourceManager->Create(graphStorage, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); subpass->Init(*graphStorage->resourceManager); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 3d05f466..d3f20665 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -46,9 +46,8 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphResource::SHRenderGraphResource(Handle graphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept - : logicalDevice {logicalDevice} - , swapchain{ swapchain } + SHRenderGraphResource::SHRenderGraphResource(Handle renderGraphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept + : graphStorage{renderGraphStorage} , resourceTypeFlags{ } , resourceFormat{ format } , images{} @@ -67,7 +66,7 @@ namespace SHADE SHImageViewDetails viewDetails { .viewType = vk::ImageViewType::e2D, - .format = swapchain->GetSurfaceFormatKHR().format, + .format = graphStorage->swapchain->GetSurfaceFormatKHR().format, .imageAspectFlags = vk::ImageAspectFlagBits::eColor, .baseMipLevel = 0, .mipLevelCount = 1, @@ -167,7 +166,7 @@ namespace SHADE , height{ rhs.height } , mipLevels{ rhs.mipLevels } , imageAspectFlags{ rhs.imageAspectFlags } - , swapchain {rhs.swapchain} + , graphStorage{rhs.graphStorage} { } @@ -199,7 +198,7 @@ namespace SHADE height = rhs.height; mipLevels = rhs.mipLevels; imageAspectFlags = rhs.imageAspectFlags; - swapchain = rhs.swapchain; + graphStorage = rhs.graphStorage; return *this; } @@ -248,7 +247,7 @@ namespace SHADE SHImageViewDetails viewDetails { .viewType = vk::ImageViewType::e2D, - .format = swapchain->GetSurfaceFormatKHR().format, + .format = graphStorage->swapchain->GetSurfaceFormatKHR().format, .imageAspectFlags = vk::ImageAspectFlagBits::eColor, .baseMipLevel = 0, .mipLevelCount = 1, @@ -256,9 +255,9 @@ namespace SHADE .layerCount = 1, }; - for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) + for (uint32_t i = 0; i < graphStorage->swapchain->GetNumImages(); ++i) { - images[i] = swapchain->GetSwapchainImage(i); + images[i] = graphStorage->swapchain->GetSwapchainImage(i); imageViews[i]->ViewNewImage(images[i], viewDetails); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index e11f6ed8..4bdecc49 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -25,11 +25,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - // for creation/recreation - Handle logicalDevice; - - // for creation/recreation - Handle swapchain; + //! Storage from the render graph + Handle graphStorage; //! Name of the resource std::string resourceName; @@ -70,7 +67,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphResource(Handle graphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; + SHRenderGraphResource(Handle renderGraphStorage, std::string const& name, std::initializer_list typeFlags, vk::Format format, uint32_t w, uint32_t h, uint8_t levels, vk::ImageUsageFlagBits usageFlags, vk::ImageCreateFlagBits createFlags) noexcept; SHRenderGraphResource(SHRenderGraphResource&& rhs) noexcept; SHRenderGraphResource& operator=(SHRenderGraphResource&& rhs) noexcept; ~SHRenderGraphResource(void) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 9926fc2f..3daafb8f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -191,7 +191,8 @@ namespace SHADE Handle SHSubpass::ActivateSubpassCompute(Handle computeShaderModule, std::initializer_list resources) noexcept { - //subpassCompute = graphStorage->resourceManager->Create(, parentNode->GetGraphDescPool(), resources); + subpassCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, resources); + return subpassCompute; } void SHSubpass::Init(ResourceManager& resourceManager) noexcept From 29b6e7050d742c4a104417f33f2dfb1e269fb237 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 21 Oct 2022 08:11:12 +0800 Subject: [PATCH 396/793] camera director WIP --- SHADE_Engine/src/Camera/SHCameraDirector.cpp | 50 ++++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraDirector.h | 36 ++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 10 ++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 18 +++++-- 4 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 SHADE_Engine/src/Camera/SHCameraDirector.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraDirector.h diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp new file mode 100644 index 00000000..4ade9dbd --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -0,0 +1,50 @@ +#include "SHpch.h" +#include "SHCameraDirector.h" +#include "SHCameraComponent.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/SHECSMacros.h" +#include "Tools/SHLog.h" + +namespace SHADE +{ + SHCameraDirector::SHCameraDirector() + :mainCameraEID(MAX_EID), transitionCameraEID(MAX_EID) + { + } + + + SHMatrix SHCameraDirector::GetViewMatrix() const noexcept + { + return viewMatrix; + } + SHMatrix SHCameraDirector::GetProjMatrix() const noexcept + { + return projMatrix; + } + SHMatrix SHCameraDirector::GetVPMatrix() const noexcept + { + return projMatrix * viewMatrix; + } + + void SHCameraDirector::UpdateMatrix() noexcept + { + if (mainCameraEID == MAX_EID) + { + return; + } + SHCameraComponent* camComponent = SHComponentManager::GetComponent_s(mainCameraEID); + if (!camComponent) + { + SHLOG_WARNING("Camera Director warning: Entity does not have a camera"); + } + else + { + viewMatrix = camComponent->GetViewMatrix(); + projMatrix = camComponent->GetProjMatrix(); + } + + + } + + +} diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h new file mode 100644 index 00000000..00e2d0c2 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -0,0 +1,36 @@ +#pragma once + +#include "SH_API.h" +#include "ECS_Base/Entity/SHEntity.h" +#include "Math/SHMatrix.h" + + +namespace SHADE +{ + class SH_API SHCameraDirector + { + public: + SHCameraDirector(); + ~SHCameraDirector() = default; + + + EntityID mainCameraEID; + EntityID transitionCameraEID; + + SHMatrix GetViewMatrix() const noexcept; + SHMatrix GetProjMatrix() const noexcept; + SHMatrix GetVPMatrix() const noexcept; + void UpdateMatrix() noexcept; + + + private: + + + protected: + SHMatrix viewMatrix; + SHMatrix projMatrix; + + }; + + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index a9b356de..e0d983b2 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -3,6 +3,7 @@ #include "Math/SHMathHelpers.h" #include "Input/SHInputManager.h" #include "Math/Vector/SHVec2.h" +#include "ECS_Base/Managers/SHComponentManager.h" @@ -169,5 +170,14 @@ namespace SHADE upVec = SHVec3::Cross(forward, right); } + void SHCameraSystem::CameraSystemUpdate::Execute(double dt) noexcept + { + SHCameraSystem* system = static_cast(GetSystem()); + auto& dense = SHComponentManager::GetDense(); + for (auto& cam : dense) + { + system->UpdateCameraComponent(cam); + } + } } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 43e386e7..2f8e6142 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -3,8 +3,9 @@ #include "ECS_Base/System/SHSystem.h" #include "SHCameraComponent.h" #include "ECS_Base/System/SHSystemRoutine.h" -#include "SH_API.h" +#include "Resource/ResourceLibrary.h" +#include "SH_API.h" namespace SHADE { @@ -14,7 +15,7 @@ namespace SHADE //A camera component that represents editor camera. //This is not tied to any entity. Hence this EID should not be used. SHCameraComponent editorCamera; - + public: @@ -34,13 +35,22 @@ namespace SHADE }; friend class EditorCameraUpdate; - SHCameraComponent* GetEditorCamera (void) noexcept; + class SH_API CameraSystemUpdate final: public SHSystemRoutine + { + public: + CameraSystemUpdate() : SHSystemRoutine("Camera System Update", false) {}; + virtual void Execute(double dt)noexcept override final; + }; + friend class CameraSystemUpdate; + + SHCameraComponent* GetEditorCamera (void) noexcept; + void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; - void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; + }; From e8073bb67fc368fdd4d5e79ff9d8c2d18ddc6238 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 21 Oct 2022 08:42:58 +0800 Subject: [PATCH 397/793] WIP --- SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp index 722e7e4f..f30fa85f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp @@ -5,6 +5,7 @@ #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" #include "SHRenderGraphStorage.h" //#include "" @@ -15,7 +16,7 @@ namespace SHADE { SHPipelineLayoutParams pipelineLayoutParams { - //.globalDescSetLayouts + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() }; //pipeline = logicalDevice->CreateComputePipeline() From 31ad8b8c87398b96bb6ca55c2cc18af89d7b61db Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 21 Oct 2022 09:29:13 +0800 Subject: [PATCH 398/793] Added Resource Lib and handle for CameraDirector into camera system --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 14 ++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 7 +++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index e0d983b2..02e6cd1c 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -178,6 +178,20 @@ namespace SHADE { system->UpdateCameraComponent(cam); } + for (auto& handle : system->directorHandleList) + { + handle->UpdateMatrix(); + } + + + } + + + Handle SHCameraSystem::CreateDirector() noexcept + { + auto handle = directorLibrary.Create(); + directorHandleList.emplace_back(handle); + return handle; } } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 2f8e6142..5b946389 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -4,7 +4,8 @@ #include "SHCameraComponent.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/ResourceLibrary.h" - +#include "SHCameraDirector.h" +#include "Resource/Handle.h" #include "SH_API.h" namespace SHADE @@ -16,7 +17,8 @@ namespace SHADE //This is not tied to any entity. Hence this EID should not be used. SHCameraComponent editorCamera; - + ResourceLibrary directorLibrary; + std::vector> directorHandleList; public: SHCameraSystem(void) = default; @@ -46,6 +48,7 @@ namespace SHADE SHCameraComponent* GetEditorCamera (void) noexcept; void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; + Handle CreateDirector() noexcept; protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; From 267ad5f8c6a82ddb422ab7a00671581e12d67272 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 21 Oct 2022 09:53:19 +0800 Subject: [PATCH 399/793] Set up the CameraDirector creation and setting of main camera --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 11 ++++++++++- SHADE_Engine/src/Camera/SHCameraComponent.h | 2 ++ SHADE_Engine/src/Camera/SHCameraDirector.cpp | 12 +++++++++++- SHADE_Engine/src/Camera/SHCameraDirector.h | 7 +++++++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 14 +++++++++++++- SHADE_Engine/src/Camera/SHCameraSystem.h | 6 +++--- 6 files changed, 46 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 7ba6855c..755311a0 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -1,7 +1,8 @@ #include "SHpch.h" #include "SHCameraComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" - +#include "SHCameraSystem.h" +#include "ECS_Base/Managers/SHSystemManager.h" namespace SHADE { @@ -128,4 +129,12 @@ namespace SHADE return projMatrix; } + void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept + { + auto system = SHSystemManager::GetSystem(); + system->GetDirector(directorCameraIndex)->SetMainCamera(*this); + } + + + } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index c86fa160..1149b1e1 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -70,6 +70,8 @@ namespace SHADE const SHMatrix& GetViewMatrix() const noexcept; const SHMatrix& GetProjMatrix() const noexcept; + void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; + float movementSpeed; SHVec3 turnSpeed; diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp index 4ade9dbd..5e49fdfe 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.cpp +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -3,6 +3,7 @@ #include "SHCameraComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/SHECSMacros.h" +#include "ECS_Base/Managers/SHEntityManager.h" #include "Tools/SHLog.h" namespace SHADE @@ -42,9 +43,18 @@ namespace SHADE viewMatrix = camComponent->GetViewMatrix(); projMatrix = camComponent->GetProjMatrix(); } + } - + void SHCameraDirector::SetMainCamera(SHCameraComponent& camera) noexcept + { + if (SHEntityManager::IsValidEID(camera.GetEID()) == false) + { + SHLOG_WARNING("Camera Director Warning: Attempting to set an invalid entity as main camera.") + return; + } + mainCameraEID = camera.GetEID(); } + } diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h index 00e2d0c2..b1311147 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.h +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -3,10 +3,15 @@ #include "SH_API.h" #include "ECS_Base/Entity/SHEntity.h" #include "Math/SHMatrix.h" +#include "Resource/Handle.h" namespace SHADE { + class SHCameraComponent; + + + class SH_API SHCameraDirector { public: @@ -21,6 +26,7 @@ namespace SHADE SHMatrix GetProjMatrix() const noexcept; SHMatrix GetVPMatrix() const noexcept; void UpdateMatrix() noexcept; + void SetMainCamera(SHCameraComponent& cam) noexcept; private: @@ -32,5 +38,6 @@ namespace SHADE }; + typedef Handle DirectorHandle; } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 02e6cd1c..04c017c0 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -187,11 +187,23 @@ namespace SHADE } - Handle SHCameraSystem::CreateDirector() noexcept + DirectorHandle SHCameraSystem::CreateDirector() noexcept { auto handle = directorLibrary.Create(); directorHandleList.emplace_back(handle); return handle; } + DirectorHandle SHCameraSystem::GetDirector(size_t index) noexcept + { + if (index < directorHandleList.size()) + { + return directorHandleList[index]; + } + else + { + return CreateDirector(); + } + } + } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 5b946389..0d89b842 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -5,7 +5,6 @@ #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/ResourceLibrary.h" #include "SHCameraDirector.h" -#include "Resource/Handle.h" #include "SH_API.h" namespace SHADE @@ -18,7 +17,7 @@ namespace SHADE SHCameraComponent editorCamera; ResourceLibrary directorLibrary; - std::vector> directorHandleList; + std::vector directorHandleList; public: SHCameraSystem(void) = default; @@ -48,7 +47,8 @@ namespace SHADE SHCameraComponent* GetEditorCamera (void) noexcept; void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; - Handle CreateDirector() noexcept; + DirectorHandle CreateDirector() noexcept; + DirectorHandle GetDirector(size_t index) noexcept; protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; From 7e04bee8d6a7ef341430a054017177f64d9788c1 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Fri, 21 Oct 2022 10:17:32 +0800 Subject: [PATCH 400/793] Defaults main camera if the mainCamera is still unset --- SHADE_Engine/src/Camera/SHCameraDirector.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp index 5e49fdfe..559897c0 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.cpp +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -31,7 +31,12 @@ namespace SHADE { if (mainCameraEID == MAX_EID) { - return; + auto& dense = SHComponentManager::GetDense(); + if (dense.size() == 0) + { + return; + } + mainCameraEID = dense[0].GetEID(); } SHCameraComponent* camComponent = SHComponentManager::GetComponent_s(mainCameraEID); if (!camComponent) From 7e15edb052391fcd1f6ad35ef32771a42fd96c60 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 21 Oct 2022 13:58:27 +0800 Subject: [PATCH 401/793] Completed initial implementation of SHResourceManager --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 7 +- SHADE_Engine/src/Assets/SHAssetManager.h | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 6 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 6 +- .../src/Resource/SHResourceManager.cpp | 59 +++++++ SHADE_Engine/src/Resource/SHResourceManager.h | 99 ++++++++++++ .../src/Resource/SHResourceManager.hpp | 147 ++++++++++++++++++ 8 files changed, 319 insertions(+), 8 deletions(-) create mode 100644 SHADE_Engine/src/Resource/SHResourceManager.cpp create mode 100644 SHADE_Engine/src/Resource/SHResourceManager.h create mode 100644 SHADE_Engine/src/Resource/SHResourceManager.hpp diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index f1d656ee..bd812933 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -64,7 +64,7 @@ namespace Sandbox std::vector> texHandles; for (const auto& tex : textures) { - auto texture = graphicsSystem->Add(tex); + auto texture = graphicsSystem->AddTexture(tex); texHandles.push_back(texture); } graphicsSystem->BuildTextures(); diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index aa9772dd..956d52e8 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -62,7 +62,12 @@ namespace SHADE } } - AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept + void SHAssetManager::Unload(AssetID assetId) noexcept + { + // TODO + } + + AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept { if (!IsRecognised(path.extension().string().c_str())) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 50549e01..2469165a 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -32,6 +32,7 @@ namespace SHADE * \brief Deallocate all memory used by resource data ****************************************************************************/ static void Unload() noexcept; + static void Unload(AssetID assetId) noexcept; /**************************************************************************** * \brief Load all resources that are in the folder diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 06762db8..44404bc7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -585,19 +585,19 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Texture Registration Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHGraphicsSystem::Add(const SHTextureAsset& texAsset) + Handle SHGraphicsSystem::AddTexture(const SHTextureAsset& texAsset) { auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(texAsset.mipOffsets.size()) }); return texLibrary.Add(texAsset, sampler); } - SHADE::Handle SHGraphicsSystem::Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets) + SHADE::Handle SHGraphicsSystem::AddTexture(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets) { auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams{ .maxLod = static_cast(mipOffsets.size()) }); return texLibrary.Add(pixelCount, pixelData, width, height, format, mipOffsets, sampler); } - void SHGraphicsSystem::Remove(Handle tex) + void SHGraphicsSystem::RemoveTexture(Handle tex) { texLibrary.Remove(tex); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 29429703..870325ac 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -231,8 +231,8 @@ namespace SHADE */ /*******************************************************************************/ - Handle Add(const SHTextureAsset& texAsset); - Handle Add(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets); + Handle AddTexture(const SHTextureAsset& texAsset); + Handle AddTexture(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets); /*******************************************************************************/ /*! @@ -246,7 +246,7 @@ namespace SHADE */ /*******************************************************************************/ - void Remove(Handle tex); + void RemoveTexture(Handle tex); /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Resource/SHResourceManager.cpp b/SHADE_Engine/src/Resource/SHResourceManager.cpp new file mode 100644 index 00000000..cd5c7abd --- /dev/null +++ b/SHADE_Engine/src/Resource/SHResourceManager.cpp @@ -0,0 +1,59 @@ +/************************************************************************************//*! +\file SHResourceManager.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 21, 2022 +\brief Contains the definition of the functions of the SHResourceManager static + class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +// Primary Include +#include "SHResourceManager.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHResourceHub SHResourceManager::resourceHub; + std::unordered_map> SHResourceManager::handlesMap; + std::unordered_map> SHResourceManager::typedFreeFuncMap; + std::vector SHResourceManager::loadedAssetData; + + /*-----------------------------------------------------------------------------------*/ + /* Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + void SHResourceManager::Unload(AssetID assetId) + { + // Search each library for the asset ID and try to free it + for (auto& typedHandleMap : handlesMap) + { + if (typedHandleMap.second.contains(assetId)) + { + // Dispose + typedFreeFuncMap[typedHandleMap.first](assetId); + typedHandleMap.second.erase(assetId); + } + } + } + + void SHResourceManager::FinaliseChanges() + { + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + gfxSystem->BuildMeshBuffers(); + gfxSystem->BuildTextures(); + + // Free CPU Resources + for (auto assetId : loadedAssetData) + { + SHAssetManager::Unload(assetId); + } + loadedAssetData.clear(); + } +} diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h new file mode 100644 index 00000000..8c41f778 --- /dev/null +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -0,0 +1,99 @@ +/************************************************************************************//*! +\file SHResourceManager.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 21, 2022 +\brief Contains the definition of the SHResourceManager static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "SH_API.h" +#include "SHResourceLibrary.h" +#include "Assets/SHAssetMacros.h" + +namespace SHADE +{ + /// + /// Static class responsible for loading and caching runtime resources from their + /// serialised Asset IDs. + /// + class SH_API SHResourceManager + { + public: + /*---------------------------------------------------------------------------------*/ + /* Loading Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Loads or retrieves an existing loaded object of the specified type with the + /// specified asset ID. + /// Note that for specific types, the retrieved Handle may not be valid until after + /// FinaliseChanges() is called. + /// + /// + /// Type of resource to load. + /// + /// Asset ID of the resource to load. + /// Handle to a loaded runtime asset. + template + static Handle LoadOrGet(AssetID assetId); + /// + /// Unloads an existing loaded asset. Attempting to unload an invalid Handle will + /// simply do nothing except emit a warning. + /// Faster than the untemplated version. + /// + /// Type of resource to unload. + /// Handle to the resource to unload. + template + static void Unload(Handle assetId); + /// + /// Unloads an existing loaded asset. Attempting to unload an invalid Handle will + /// simply do nothing except emit a warning. + /// Compared to the templated version, this function is slower as it requires + /// searching through the storage of all resource types. + /// + /// Handle to the resource to unload. + static void Unload(AssetID assetId); + /// + /// Needs to be called to finalise all changes to loads. + /// + static void FinaliseChanges(); + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + using AssetHandleMap = std::unordered_map; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + // Handles + static SHResourceHub resourceHub; + static std::unordered_map handlesMap; + static std::unordered_map> typedFreeFuncMap; + // Pointers to temp CPU resources + static std::vector loadedAssetData; + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Retrieves or creates the AssetHandleMap for the specific type if it doesn't exist + /// + /// + /// The type of AssetHandleMap to retrieve. + /// + /// Reference to the AssetHandleMap of the specified type. + template + static AssetHandleMap& getAssetHandleMap(); + }; +} + +#include "SHResourceManager.hpp" diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp new file mode 100644 index 00000000..7e90f499 --- /dev/null +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -0,0 +1,147 @@ +/************************************************************************************//*! +\file SHResourceManager.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 21, 2022 +\brief Contains the definition of the function templates of the + SHResourceManager static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Primary Include +#include "SHResourceManager.h" +// Project Includes +#include "Assets/SHAssetManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Tools/SHLog.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Loading Functions */ + /*-----------------------------------------------------------------------------------*/ + template + Handle SHResourceManager::LoadOrGet(AssetID assetId) + { + // Check if it is an unsupported type + if (!std::is_same_v && !std::is_same_v) + { + static_assert(true, "Unsupported Resource Type specified for SHResourceManager."); + } + + /* Attempt to get existing loaded asset */ + AssetHandleMap& typedHandleMap = getAssetHandleMap(); + if (typedHandleMap.contains(assetId)) + return typedHandleMap[assetId]; + + /* Otherwise, we need to load it! */ + // Meshes + if constexpr (std::is_same_v) + { + // Get system + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + + // Load + SHMeshAsset* assetData = SHAssetManager::GetMesh(assetId); + if (assetData == nullptr) + { + SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); + return {}; + } + loadedAssetData.emplace_back(assetId); + + Handle meshHandle = gfxSystem->AddMesh + ( + assetData->vertexPosition.size(), + assetData->vertexPosition.data(), + assetData->texCoords.data(), + assetData->vertexTangent.data(), + assetData->vertexNormal.data(), + assetData->indices.size(), + assetData->indices.data() + ); + typedHandleMap.insert(assetId, meshHandle); + return meshHandle; + } + // Textures + else if constexpr (std::is_same_v) + { + // Get system + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + + // Load + SHTextureAsset* assetData = SHAssetManager::GetTexture(assetId); + if (assetData == nullptr) + { + SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); + return {}; + } + loadedAssetData.emplace_back(assetId); + + Handle texHandle = gfxSystem->AddTexture + ( + assetData->numBytes, + assetData->pixelData, + assetData->width, + assetData->height, + assetData->format, + assetData->mipOffsets + ); + typedHandleMap.insert(assetId, texHandle); + return texHandle; + } + } + + template + void SHResourceManager::Unload(Handle assetId) + { + // Check if it is an usupported type + if (!std::is_same_v && !std::is_same_v) + { + static_assert(true, "Unsupported Resource Type specified for SHResourceManager."); + } + + /* Attempt to get existing loaded asset */ + AssetHandleMap& typedHandleMap = getAssetHandleMap(); + if (typedHandleMap.contains(assetId)) + { + // Dispose + static_cast>(typedHandleMap[assetId]).Free(); + typedHandleMap.erase(assetId); + } + else + { + // There's nothing to remove + SHLog::Warning("[SHResourceManager] Attempted to unload an invalid resource. Ignoring."); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------------*/ + template + SHResourceManager::AssetHandleMap& SHResourceManager::getAssetHandleMap() + { + if (!handlesMap.contains(typeid(ResourceType))) + { + handlesMap.insert(typeid(ResourceType)); + typedFreeFuncMap.insert + ( + typeid(ResourceType), + [](AssetID assetId) + { + static_cast>(SHResourceManager::handlesMap[typeid(ResourceType)][assetId]).Free(); + } + ); + } + return handlesMap[typeid(ResourceType)]; + } +} From 43c2680a8243bc0bd7955ca6f69989b39de5808d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 21 Oct 2022 15:38:39 +0800 Subject: [PATCH 402/793] Added generic Handles and fixed bugs with SHResourceManager --- SHADE_Application/src/Scenes/SBTestScene.cpp | 41 +++++------- SHADE_Engine/src/Resource/SHHandle.h | 66 ++++++++++++++++++- SHADE_Engine/src/Resource/SHHandle.hpp | 41 +++++++++++- SHADE_Engine/src/Resource/SHResourceLibrary.h | 20 +++++- .../src/Resource/SHResourceLibrary.hpp | 5 +- .../src/Resource/SHResourceManager.cpp | 2 +- SHADE_Engine/src/Resource/SHResourceManager.h | 2 +- .../src/Resource/SHResourceManager.hpp | 14 ++-- 8 files changed, 149 insertions(+), 42 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index bd812933..41326174 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -1,4 +1,4 @@ -#include "SBpch.h" + #include "SBpch.h" #include "SBTestScene.h" #include "ECS_Base/Managers/SHSystemManager.h" @@ -14,6 +14,7 @@ #include "Physics/Components/SHColliderComponent.h" #include "Assets/SHAssetManager.h" +#include "Resource/SHResourceManager.h" using namespace SHADE; @@ -40,34 +41,22 @@ namespace Sandbox const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); //Test Racoon mesh - auto meshes = SHADE::SHAssetManager::GetAllMeshes(); std::vector> handles; - for (auto const& mesh : meshes) + std::vector> texHandles; + for (const auto& asset : SHAssetManager::GetAllAssets()) { - if (mesh.header.meshName == "Cube.012") + switch (asset.type) { - handles.push_back(graphicsSystem->AddMesh( - mesh.header.vertexCount, - mesh.vertexPosition.data(), - mesh.texCoords.data(), - mesh.vertexTangent.data(), - mesh.vertexNormal.data(), - mesh.header.indexCount, - mesh.indices.data() - )); + case AssetType::MESH: + if (asset.name == "Cube.012") + handles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); + break; + case AssetType::TEXTURE: + texHandles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); + break; } } - graphicsSystem->BuildMeshBuffers(); - - // Load Textures - auto textures = SHADE::SHAssetManager::GetAllTextures(); - std::vector> texHandles; - for (const auto& tex : textures) - { - auto texture = graphicsSystem->AddTexture(tex); - texHandles.push_back(texture); - } - graphicsSystem->BuildTextures(); + SHResourceManager::FinaliseChanges(); // Create Materials auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); @@ -78,8 +67,8 @@ namespace Sandbox // Create Stress Test Objects static const SHVec3 TEST_OBJ_SCALE = SHVec3::One * 0.5f; - constexpr int NUM_ROWS = 10; - constexpr int NUM_COLS = 10; + constexpr int NUM_ROWS = 0; + constexpr int NUM_COLS = 0; static const SHVec3 TEST_OBJ_SPACING = { 0.1f, 0.1f, 0.1f }; static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; diff --git a/SHADE_Engine/src/Resource/SHHandle.h b/SHADE_Engine/src/Resource/SHHandle.h index ffc8ae6b..6acc85ed 100644 --- a/SHADE_Engine/src/Resource/SHHandle.h +++ b/SHADE_Engine/src/Resource/SHHandle.h @@ -8,6 +8,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ + class SHResourceLibraryBase; template class SHResourceLibrary; @@ -25,6 +26,20 @@ namespace SHADE using std::runtime_error::runtime_error; }; + /// + /// Exception thrown when a generic Handle is being casted to the wrong type. + /// + class BadHandleCastException : std::runtime_error + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + BadHandleCastException() + : std::runtime_error("Attempted to cast a generic Handle to the wrong type. ") + {} + }; + /// /// Base implementation of the Handle that is not templated to allow for holding /// generic non-type-specific Handles. @@ -80,7 +95,7 @@ namespace SHADE /// Generic implementation of a Handle object /// /// Type of the handle. - template + template class Handle : public HandleBase { public: @@ -88,6 +103,16 @@ namespace SHADE /* Constructors */ /*-----------------------------------------------------------------------------*/ Handle() = default; + /// + /// Converts a generic/void Handle to a specific type. + /// Runtime type checking is enabled to ensure that Handles are only being casted + /// to the correct type. + /// + /// Generic handle to convert. + /// + /// Thrown if an invalid conversion is made. + /// + explicit Handle(const Handle& genericHandle); ~Handle() = default; /*-----------------------------------------------------------------------------*/ @@ -146,7 +171,42 @@ namespace SHADE /* Friend Declarations */ /*-----------------------------------------------------------------------------*/ friend class SHResourceLibrary; - }; + friend class Handle; + }; + + /// + /// Template Specialization for Handle that represents a type-less Handle. + /// + template<> + class Handle : public HandleBase + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + Handle() = default; + template + explicit Handle(const Handle& handle); + ~Handle() = default; + + /*-----------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------*/ + template + inline bool operator==(const Handle& rhs) const noexcept; + + protected: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + SHResourceLibraryBase* library = nullptr; + + /*-----------------------------------------------------------------------------*/ + /* Friend Declarations */ + /*-----------------------------------------------------------------------------*/ + template + friend class Handle; + }; /// /// Interface that needs to be implemented by classes that want to store a Handle to @@ -155,7 +215,7 @@ namespace SHADE template class ISelfHandle { - public: + public: /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Resource/SHHandle.hpp b/SHADE_Engine/src/Resource/SHHandle.hpp index 6f6ea31f..53061ac7 100644 --- a/SHADE_Engine/src/Resource/SHHandle.hpp +++ b/SHADE_Engine/src/Resource/SHHandle.hpp @@ -20,7 +20,21 @@ namespace SHADE { return id.Raw != INVALID_ID.Raw; } - + + /*---------------------------------------------------------------------------------*/ + /* Handle - Constructors */ + /*---------------------------------------------------------------------------------*/ + template + Handle::Handle(const Handle& genericHandle) + : library { reinterpret_cast*>(genericHandle.library) } + { + id = genericHandle.id; + + // Check if valid + if (library != nullptr && library->GetType() != typeid(T)) + throw BadHandleCastException(); + } + /*---------------------------------------------------------------------------------*/ /* Handle - Usage Functions */ /*---------------------------------------------------------------------------------*/ @@ -63,6 +77,28 @@ namespace SHADE return &library->Get(*this); } + /*---------------------------------------------------------------------------------*/ + /* Handle - Constructors */ + /*---------------------------------------------------------------------------------*/ + template + Handle::Handle(const Handle& handle) + : library{ static_cast(handle.library) } + { + id = handle.id; + } + + /*---------------------------------------------------------------------------------*/ + /* Handle - Overloaded Operators */ + /*---------------------------------------------------------------------------------*/ + template + bool SHADE::Handle::operator==(const Handle& rhs) const noexcept + { + return id.Raw == rhs.id.Raw && library == static_cast(rhs.library); + } + + /*---------------------------------------------------------------------------------*/ + /* ISelfHandle - Constructors */ + /*---------------------------------------------------------------------------------*/ template inline ISelfHandle::ISelfHandle(const ISelfHandle& rhs) : handle { rhs.handle } @@ -73,6 +109,9 @@ namespace SHADE : handle { rhs.handle } {} + /*---------------------------------------------------------------------------------*/ + /* ISelfHandle - Overloaded Operators */ + /*---------------------------------------------------------------------------------*/ template inline ISelfHandle& ISelfHandle::operator=(const ISelfHandle& rhs) { diff --git a/SHADE_Engine/src/Resource/SHResourceLibrary.h b/SHADE_Engine/src/Resource/SHResourceLibrary.h index c83cf321..46ae4572 100644 --- a/SHADE_Engine/src/Resource/SHResourceLibrary.h +++ b/SHADE_Engine/src/Resource/SHResourceLibrary.h @@ -11,13 +11,31 @@ namespace SHADE { + /// + /// Base class for SHResourceLibrary that holds information about the library type. + /// + class SHResourceLibraryBase + { + public: + /*-----------------------------------------------------------------------------*/ + /* Getter Functions */ + /*-----------------------------------------------------------------------------*/ + inline std::type_index GetType() { return libraryType; } + + protected: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + std::type_index libraryType = typeid(void); + }; + /// /// Generic Resource Library for a specified type of Resource. This object will own /// any resources created using it. /// /// Type of resources that this library stores. template - class SHResourceLibrary + class SHResourceLibrary : public SHResourceLibraryBase { public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Resource/SHResourceLibrary.hpp b/SHADE_Engine/src/Resource/SHResourceLibrary.hpp index 54120a94..411f6bf5 100644 --- a/SHADE_Engine/src/Resource/SHResourceLibrary.hpp +++ b/SHADE_Engine/src/Resource/SHResourceLibrary.hpp @@ -13,10 +13,11 @@ namespace SHADE SHResourceLibrary::SHResourceLibrary() { // Type Checking - //static_assert(std::is_copy_assignable_v, "Resource Library's resources must be copy assignable."); - //static_assert(std::is_copy_constructible_v, "Resource Library's resources must be copy constructible."); static_assert(std::is_move_assignable_v, "Resource Library's resources must be move assignable."); static_assert(std::is_move_constructible_v, "Resource Library's resources must be move constructible."); + + // Keep track of the type for conversions + libraryType = typeid(T); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Resource/SHResourceManager.cpp b/SHADE_Engine/src/Resource/SHResourceManager.cpp index cd5c7abd..a82f7890 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.cpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.cpp @@ -20,7 +20,7 @@ namespace SHADE /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ SHResourceHub SHResourceManager::resourceHub; - std::unordered_map> SHResourceManager::handlesMap; + std::unordered_map>> SHResourceManager::handlesMap; std::unordered_map> SHResourceManager::typedFreeFuncMap; std::vector SHResourceManager::loadedAssetData; diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index 8c41f778..f43b4a77 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -69,7 +69,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - using AssetHandleMap = std::unordered_map; + using AssetHandleMap = std::unordered_map>; /*---------------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 7e90f499..593f8bb7 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -36,7 +36,7 @@ namespace SHADE /* Attempt to get existing loaded asset */ AssetHandleMap& typedHandleMap = getAssetHandleMap(); if (typedHandleMap.contains(assetId)) - return typedHandleMap[assetId]; + return Handle(typedHandleMap[assetId]); /* Otherwise, we need to load it! */ // Meshes @@ -48,7 +48,7 @@ namespace SHADE throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); // Load - SHMeshAsset* assetData = SHAssetManager::GetMesh(assetId); + const SHMeshAsset* assetData = SHAssetManager::GetMesh(assetId); if (assetData == nullptr) { SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); @@ -66,7 +66,7 @@ namespace SHADE assetData->indices.size(), assetData->indices.data() ); - typedHandleMap.insert(assetId, meshHandle); + typedHandleMap.emplace(assetId, Handle(meshHandle)); return meshHandle; } // Textures @@ -78,7 +78,7 @@ namespace SHADE throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); // Load - SHTextureAsset* assetData = SHAssetManager::GetTexture(assetId); + const SHTextureAsset* assetData = SHAssetManager::GetTexture(assetId); if (assetData == nullptr) { SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); @@ -95,7 +95,7 @@ namespace SHADE assetData->format, assetData->mipOffsets ); - typedHandleMap.insert(assetId, texHandle); + typedHandleMap.emplace(assetId, Handle(texHandle)); return texHandle; } } @@ -132,8 +132,8 @@ namespace SHADE { if (!handlesMap.contains(typeid(ResourceType))) { - handlesMap.insert(typeid(ResourceType)); - typedFreeFuncMap.insert + handlesMap.emplace(typeid(ResourceType), AssetHandleMap{}); + typedFreeFuncMap.emplace ( typeid(ResourceType), [](AssetID assetId) From e5628fbed881ba391206d1ebecb62422a99806c1 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 21 Oct 2022 17:09:50 +0800 Subject: [PATCH 403/793] Added functionality to retrieve AssetID from SHResourceManager using a Handle --- .../src/Resource/SHResourceManager.cpp | 54 ++++++++++++++--- SHADE_Engine/src/Resource/SHResourceManager.h | 33 ++++++++++- .../src/Resource/SHResourceManager.hpp | 58 +++++++++++++------ 3 files changed, 118 insertions(+), 27 deletions(-) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.cpp b/SHADE_Engine/src/Resource/SHResourceManager.cpp index a82f7890..156c31c7 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.cpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.cpp @@ -21,6 +21,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHResourceHub SHResourceManager::resourceHub; std::unordered_map>> SHResourceManager::handlesMap; + std::unordered_map SHResourceManager::assetIdMap; std::unordered_map> SHResourceManager::typedFreeFuncMap; std::vector SHResourceManager::loadedAssetData; @@ -30,30 +31,65 @@ namespace SHADE void SHResourceManager::Unload(AssetID assetId) { // Search each library for the asset ID and try to free it + Handle handle; for (auto& typedHandleMap : handlesMap) { if (typedHandleMap.second.contains(assetId)) { + // Save handle for later + handle = typedHandleMap.second[assetId]; // Dispose typedFreeFuncMap[typedHandleMap.first](assetId); typedHandleMap.second.erase(assetId); } } + + // No handles were found + if (!handle) + return; + + for (auto& typedAssetIdsMap : assetIdMap) + { + if (typedAssetIdsMap.second.contains(handle)) + { + // Dispose + typedAssetIdsMap.second.erase(handle); + } + } } void SHResourceManager::FinaliseChanges() { - SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem == nullptr) - throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); - gfxSystem->BuildMeshBuffers(); - gfxSystem->BuildTextures(); + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + gfxSystem->BuildMeshBuffers(); + gfxSystem->BuildTextures(); - // Free CPU Resources - for (auto assetId : loadedAssetData) + // Free CPU Resources + for (auto assetId : loadedAssetData) + { + SHAssetManager::Unload(assetId); + } + loadedAssetData.clear(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Query Functions */ + /*-----------------------------------------------------------------------------------*/ + std::optional SHResourceManager::GetAssetID(Handle handle) + { + const Handle GENERIC_HANDLE = Handle(handle); + + // Search each library for the asset ID and try to free it + for (auto& typedAssetIdsMap : assetIdMap) + { + if (typedAssetIdsMap.second.contains(GENERIC_HANDLE)) { - SHAssetManager::Unload(assetId); + return typedAssetIdsMap.second[GENERIC_HANDLE]; } - loadedAssetData.clear(); + } + + return {}; } } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index f43b4a77..84f93b10 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -65,11 +65,41 @@ namespace SHADE /// static void FinaliseChanges(); + /*---------------------------------------------------------------------------------*/ + /* Query Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Retrieves the AssetID associated with a specified Handle. + /// Faster than the untemplated version. + /// + /// Type of resource to get the ID of. + /// Handle to get the AssetID of. + /// + /// AssetID for the specified Handle. If the Handle is invalid, there will be no + /// value. + /// + template + static std::optional GetAssetID(Handle handle); + /// + /// Retrieves the AssetID associated with a specified Handle. + /// Compared to the templated version, this function is slower as it requires + /// searching through the storage of all resource types. + /// + /// Handle to get the AssetID of. + /// + /// AssetID for the specified Handle. If the Handle is invalid, there will be no + /// value. + /// + static std::optional GetAssetID(Handle handle); + private: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ using AssetHandleMap = std::unordered_map>; + using HandleAssetMap = std::unordered_map, AssetID>; + using AssetHandleMapRef = std::reference_wrapper; + using HandleAssetMapRef = std::reference_wrapper; /*---------------------------------------------------------------------------------*/ /* Data Members */ @@ -77,6 +107,7 @@ namespace SHADE // Handles static SHResourceHub resourceHub; static std::unordered_map handlesMap; + static std::unordered_map assetIdMap; static std::unordered_map> typedFreeFuncMap; // Pointers to temp CPU resources static std::vector loadedAssetData; @@ -92,7 +123,7 @@ namespace SHADE /// /// Reference to the AssetHandleMap of the specified type. template - static AssetHandleMap& getAssetHandleMap(); + static std::pair getAssetHandleMap(); }; } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 593f8bb7..54ced715 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -34,9 +34,9 @@ namespace SHADE } /* Attempt to get existing loaded asset */ - AssetHandleMap& typedHandleMap = getAssetHandleMap(); - if (typedHandleMap.contains(assetId)) - return Handle(typedHandleMap[assetId]); + auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); + if (typedHandleMap.get().contains(assetId)) + return Handle(typedHandleMap.get()[assetId]); /* Otherwise, we need to load it! */ // Meshes @@ -66,7 +66,9 @@ namespace SHADE assetData->indices.size(), assetData->indices.data() ); - typedHandleMap.emplace(assetId, Handle(meshHandle)); + Handle genericHandle = Handle(meshHandle); + typedHandleMap.get().emplace(assetId, genericHandle); + typedAssetIdMap.get().emplace(genericHandle, assetId); return meshHandle; } // Textures @@ -95,7 +97,7 @@ namespace SHADE assetData->format, assetData->mipOffsets ); - typedHandleMap.emplace(assetId, Handle(texHandle)); + typedHandleMap.get().emplace(assetId, Handle(texHandle)); return texHandle; } } @@ -103,19 +105,22 @@ namespace SHADE template void SHResourceManager::Unload(Handle assetId) { - // Check if it is an usupported type + // Check if it is an unsupported type if (!std::is_same_v && !std::is_same_v) { static_assert(true, "Unsupported Resource Type specified for SHResourceManager."); } /* Attempt to get existing loaded asset */ - AssetHandleMap& typedHandleMap = getAssetHandleMap(); - if (typedHandleMap.contains(assetId)) + auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); + if (typedHandleMap.get().contains(assetId)) { // Dispose - static_cast>(typedHandleMap[assetId]).Free(); - typedHandleMap.erase(assetId); + Handle handle = typedHandleMap.get()[assetId]; + Handle typedHandle = static_cast>(handle); + typedHandle.Free(); + typedAssetIdMap.get().erase(handle); + typedHandleMap.get().erase(assetId); } else { @@ -124,24 +129,43 @@ namespace SHADE } } + /*-----------------------------------------------------------------------------------*/ + /* Query Functions */ + /*-----------------------------------------------------------------------------------*/ + template + static std::optional SHResourceManager::GetAssetID(Handle handle) + { + const Handle GENERIC_HANDLE = Handle(handle); + auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); + if (typedAssetIdMap.get().contains(GENERIC_HANDLE)) + { + return typedAssetIdMap.GetId()[GENERIC_HANDLE]; + } + + return {}; + } + /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------------*/ template - SHResourceManager::AssetHandleMap& SHResourceManager::getAssetHandleMap() + std::pair SHResourceManager::getAssetHandleMap() { - if (!handlesMap.contains(typeid(ResourceType))) + const std::type_index TYPE = typeid(ResourceType); + + if (!handlesMap.contains(TYPE)) { - handlesMap.emplace(typeid(ResourceType), AssetHandleMap{}); + handlesMap.emplace(TYPE, AssetHandleMap{}); + assetIdMap.emplace(TYPE, HandleAssetMap{}); typedFreeFuncMap.emplace ( - typeid(ResourceType), - [](AssetID assetId) + TYPE, + [TYPE](AssetID assetId) { - static_cast>(SHResourceManager::handlesMap[typeid(ResourceType)][assetId]).Free(); + static_cast>(SHResourceManager::handlesMap[TYPE][assetId]).Free(); } ); } - return handlesMap[typeid(ResourceType)]; + return std::make_pair(std::ref(handlesMap[TYPE]), std::ref(assetIdMap[TYPE])); } } From 1ea482ff387707c28b9396b1e71b74259e9c654a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 21 Oct 2022 18:36:56 +0800 Subject: [PATCH 404/793] Added serialization of SHRenderable (only Mesh) --- .../MiddleEnd/Interface/SHRenderable.cpp | 8 +++++ .../MiddleEnd/Interface/SHRenderable.h | 5 ++- SHADE_Engine/src/Resource/SHHandle.hpp | 1 - .../src/Resource/SHResourceManager.hpp | 4 +-- .../src/Serialization/SHSerialization.cpp | 6 ++-- .../Serialization/SHSerializationHelper.hpp | 36 ++++++++++++++++++- 6 files changed, 52 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 0b1c1b66..78687b0c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -93,3 +93,11 @@ namespace SHADE oldMaterial = {}; } } + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + + registration::class_("Renderable Component"); +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index bc885ca2..f80c71db 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -11,9 +11,10 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once +// External Dependencies +#include // Project Includes #include "Resource/SHHandle.h" -//#include "SHTransform.h" #include "ECS_Base/Components/SHComponent.h" #include "Math/SHMatrix.h" #include "SH_API.h" @@ -75,6 +76,8 @@ namespace SHADE Handle material; bool materialChanged = true; Handle oldMaterial; + + RTTR_ENABLE() }; } diff --git a/SHADE_Engine/src/Resource/SHHandle.hpp b/SHADE_Engine/src/Resource/SHHandle.hpp index 53061ac7..c5d14132 100644 --- a/SHADE_Engine/src/Resource/SHHandle.hpp +++ b/SHADE_Engine/src/Resource/SHHandle.hpp @@ -156,7 +156,6 @@ namespace std std::size_t hash, SHADE::Handle>>::operator()( std::pair, SHADE::Handle> const& pair) const { - return std::hash{}(pair.first.GetId().Raw) ^ std::hash{}(pair.second.GetId().Raw); } } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 54ced715..1d86037b 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -135,11 +135,11 @@ namespace SHADE template static std::optional SHResourceManager::GetAssetID(Handle handle) { - const Handle GENERIC_HANDLE = Handle(handle); + const Handle GENERIC_HANDLE = Handle(handle); auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); if (typedAssetIdMap.get().contains(GENERIC_HANDLE)) { - return typedAssetIdMap.GetId()[GENERIC_HANDLE]; + return typedAssetIdMap.get()[GENERIC_HANDLE]; } return {}; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 63583cf2..d5e3af08 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -1,8 +1,8 @@ #include "SHpch.h" -#include "SHSerializationHelper.hpp" -#include "SHSerialization.h" #include +#include "SHSerializationHelper.hpp" +#include "SHSerialization.h" #include "ECS_Base/Managers/SHEntityManager.h" #include "Scene/SHSceneManager.h" @@ -178,7 +178,7 @@ namespace SHADE } if (const auto renderable = SHComponentManager::GetComponent_s(eid)) { - components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(renderable); + components[rttr::type::get().get_name().data()] = *renderable; } if (const auto rigidbody = SHComponentManager::GetComponent_s(eid)) { diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index da98c885..48689298 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -1,7 +1,7 @@ #pragma once -#include "ECS_Base/Components/SHComponent.h" #include +#include "ECS_Base/Components/SHComponent.h" #include @@ -9,6 +9,40 @@ #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" #include "Math/Vector/SHVec4.h" +#include "Resource/SHResourceManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" + +namespace YAML +{ + using namespace SHADE; + template<> + struct convert + { + static constexpr std::string_view MESH_YAML_TAG = "Mesh"; + static constexpr std::string_view MAT_YAML_TAG = "Material"; + + static YAML::Node encode(SHRenderable const& rhs) + { + YAML::Node node; + node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.Mesh).value_or(0); + node[MAT_YAML_TAG.data()] = 0; // TODO: Asset ID + return node; + } + static bool decode(YAML::Node const& node, SHRenderable& rhs) + { + if (node[MESH_YAML_TAG.data()]) + { + rhs.Mesh = {};//SHResourceManager::LoadOrGet(node[MESH_YAML_TAG].as()); + } + if (node[MAT_YAML_TAG.data()]) + { + // TODO: Convert Asset ID To Material HAndle + } + return true; + } + }; +} + namespace SHADE { From b3ed320f9b8ead15f0d8ef10281ad5fd1d7b0d43 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 21 Oct 2022 18:39:50 +0800 Subject: [PATCH 405/793] Transform Gizmo done. (Commands for it are wonky) --- .../src/Application/SBApplication.cpp | 2 +- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 1 - .../src/Editor/Command/SHCommandManager.cpp | 10 +++ .../src/Editor/Command/SHCommandManager.h | 3 + .../Profiling/SHEditorProfiler.cpp | 6 ++ .../ViewportWindow/SHEditorViewport.cpp | 45 +++++++++-- .../ViewportWindow/SHEditorViewport.h | 4 +- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 79 ++++++++++++++----- .../src/Editor/Gizmos/SHTransformGizmo.h | 35 +++++++- SHADE_Engine/src/Editor/SHEditor.cpp | 4 +- SHADE_Engine/src/Editor/SHImGuiHelpers.hpp | 6 +- 11 files changed, 162 insertions(+), 33 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 9e793fba..a9f632da 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -149,7 +149,7 @@ namespace Sandbox SHSceneManager::SceneUpdate(0.016f); #endif SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); - editor->PollPicking(); + //editor->PollPicking(); } // Finish all graphics jobs first graphicsSystem->AwaitGraphicsExecution(); diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index a9b356de..7c6ea176 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -154,7 +154,6 @@ namespace SHADE target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); target =SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - std::cout << "Target vec: " << target.x<<", "< #include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/Command/SHCommandManager.h" #include "FRC/SHFramerateController.h" namespace SHADE @@ -38,6 +39,11 @@ namespace SHADE { ImGui::PlotLines("DT", frames.data(), static_cast(frames.size()), 0, nullptr, 0.0f, 16.0f); } + if(ImGui::CollapsingHeader("Command Manager")) + { + ImGui::Text("Undo: %zu", SHCommandManager::GetUndoStackSize()); + ImGui::Text("Redo: %zu", SHCommandManager::GetRedoStackSize()); + } ImGui::End(); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index f4403ecb..8a18757f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -4,6 +4,7 @@ #include "ImGuizmo.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/IconsMaterialDesign.h" #include "Editor/SHEditor.hpp" #include "Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" @@ -26,12 +27,9 @@ namespace SHADE void SHEditorViewport::Update() { SHEditorWindow::Update(); - //ImGuizmo::SetDrawlist(ImGui::GetBackgroundDrawList(ImGui::GetMainViewport())); - - ImGuizmo::SetRect(beginCursorPos.x, beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); - transfromGizmo.Draw(); if(Begin()) { + ImGuizmo::SetDrawlist(); DrawMenuBar(); auto gfxSystem = SHSystemManager::GetSystem(); auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; @@ -42,6 +40,8 @@ namespace SHADE ImGui::Image((ImTextureID)descriptorSet, {beginContentRegionAvailable.x, beginContentRegionAvailable.y}); } + ImGuizmo::SetRect(beginCursorPos.x , beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); + transformGizmo.Draw(); ImGui::End(); } @@ -70,10 +70,45 @@ namespace SHADE SHEditorWindow::OnPosChange(); } - void SHEditorViewport::DrawMenuBar() const noexcept + void SHEditorViewport::DrawMenuBar() noexcept { if(ImGui::BeginMenuBar()) { + bool const isTranslate = transformGizmo.operation == SHTransformGizmo::Operation::TRANSLATE; + ImGui::BeginDisabled(isTranslate); + if(isTranslate) + ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); + if(ImGui::SmallButton(ICON_MD_OPEN_WITH)) + { + transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; + } + ImGui::EndDisabled(); + if(isTranslate) + ImGui::PopStyleColor(); + + bool const isRotate = transformGizmo.operation == SHTransformGizmo::Operation::ROTATE; + ImGui::BeginDisabled(isRotate); + if(isRotate) + ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); + if(ImGui::SmallButton(ICON_MD_AUTORENEW)) + { + transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; + } + ImGui::EndDisabled(); + if(isRotate) + ImGui::PopStyleColor(); + + bool const isScale = transformGizmo.operation == SHTransformGizmo::Operation::SCALE; + ImGui::BeginDisabled(isScale); + if(isScale) + ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); + if(ImGui::SmallButton(ICON_MD_OPEN_IN_FULL)) + { + transformGizmo.operation = SHTransformGizmo::Operation::SCALE; + } + ImGui::EndDisabled(); + if(isScale) + ImGui::PopStyleColor(); ImGui::EndMenuBar(); } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h index 7bcfed82..80b13285 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -21,12 +21,12 @@ namespace SHADE void Init() override; void Update() override; void Exit() override; + SHTransformGizmo transformGizmo; protected: void OnResize() override; void OnPosChange() override; private: - void DrawMenuBar() const noexcept; - SHTransformGizmo transfromGizmo; + void DrawMenuBar() noexcept; SHVec2 beginCursorPos; };//class SHEditorViewport }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 70f98eb1..35f8c4cb 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -4,45 +4,82 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.hpp" +#include "Editor/SHImGuiHelpers.hpp" #include #include #include "Camera/SHCameraSystem.h" +#include "Editor/Command/SHCommandManager.h" #include "Editor/EditorWindow/ViewportWindow/SHEditorViewport.h" - namespace SHADE { void SHTransformGizmo::Draw() { - if(selectedEntityTranformComponent == nullptr) - { - SHEditor* editor = SHSystemManager::GetSystem(); - if(editor->selectedEntities.empty()) - return; - EntityID eid = editor->selectedEntities.back(); - selectedEntityTranformComponent = SHComponentManager::GetComponent_s(eid); - } - if(selectedEntityTranformComponent == nullptr) - return; - if(!editorCamera) + bool justChangedTfm = false; + if (!editorCamera) { auto const cameraSystem = SHSystemManager::GetSystem(); editorCamera = cameraSystem->GetEditorCamera(); } - auto viewportWindow = SHEditorWindowManager::GetEditorWindow(); - ImGuizmo::SetOrthographic(false); + ImGuizmo::SetOrthographic(true); SHMatrix view = SHMatrix::Transpose(editorCamera->GetViewMatrix()); - view(3, 1) = -view(3, 1); SHMatrix proj = SHMatrix::Transpose(editorCamera->GetProjMatrix()); - SHMatrix mat = selectedEntityTranformComponent->GetTRS(); - SHMatrix gridMat = SHMatrix::Identity; - ImGuizmo::DrawGrid(&view._11, &proj._11, &gridMat._11, 0.1f); - //ImGuizmo::ViewManipulate() - if(ImGuizmo::Manipulate(&view._11, &proj._11, ImGuizmo::OPERATION::UNIVERSAL, ImGuizmo::MODE::WORLD, &mat._11)) + proj(1, 1) *= -1; + static SHMatrix gridMat = SHMatrix::Translate(0, -0.5f, 0.f) * SHMatrix::Identity; + //ImGuizmo::DrawGrid(&view._11, &proj._11, &gridMat._11, 100.f); + if (selectedEntityTransformComponent == nullptr) { - + SHEditor* editor = SHSystemManager::GetSystem(); + if (editor->selectedEntities.empty()) + return; + EntityID eid = editor->selectedEntities.back(); + selectedEntityTransformComponent = SHComponentManager::GetComponent_s(eid); + justChangedTfm = true; + } + else + { + SHEditor* editor = SHSystemManager::GetSystem(); + if (editor->selectedEntities.empty()) + return; + EntityID eid = editor->selectedEntities.back(); + auto tfmComponent = SHComponentManager::GetComponent_s(eid); + if (selectedEntityTransformComponent != tfmComponent) + { + selectedEntityTransformComponent = tfmComponent; + justChangedTfm = true; + } + } + if (selectedEntityTransformComponent == nullptr) + return; + + SHMatrix mat = selectedEntityTransformComponent->GetTRS(); + isManipulating = ImGuizmo::Manipulate(&view._11, &proj._11, static_cast(operation), ImGuizmo::MODE::WORLD, &mat._11); + if (!justChangedTfm) + { + if (ImGui::IsItemClicked()) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(selectedEntityTransformComponent->GetTRS(), mat, [tfm = std::move(selectedEntityTransformComponent)](SHMatrix const& mtx) + { + if (!tfm) + return; + SHVec3 translate{}, rotate{}, scale{}; + mtx.Decompose(translate, rotate, scale); + tfm->SetWorldPosition(translate); + tfm->SetWorldRotation(rotate); + tfm->SetWorldScale(scale); + }))); + else if (ImGui::IsItemHovered(ImGuiMouseButton_Left) && ImGui::IsMouseDown(ImGuiMouseButton_Left) && isManipulating) + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(selectedEntityTransformComponent->GetTRS(), mat, [tfm = std::move(selectedEntityTransformComponent)](SHMatrix const& mtx) + { + if (!tfm) + return; + SHVec3 translate{}, rotate{}, scale{}; + mtx.Decompose(translate, rotate, scale); + tfm->SetWorldPosition(translate); + tfm->SetWorldRotation(rotate); + tfm->SetWorldScale(scale); + })), true); } } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h index 4ddbeb66..2565575f 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h @@ -7,9 +7,42 @@ namespace SHADE class SHTransformGizmo { public: + enum class Mode + { + WORLD, + LOCAL + }; + + enum class Operation + { + TRANSLATE_X = (1u << 0), + TRANSLATE_Y = (1u << 1), + TRANSLATE_Z = (1u << 2), + ROTATE_X = (1u << 3), + ROTATE_Y = (1u << 4), + ROTATE_Z = (1u << 5), + ROTATE_SCREEN = (1u << 6), + SCALE_X = (1u << 7), + SCALE_Y = (1u << 8), + SCALE_Z = (1u << 9), + BOUNDS = (1u << 10), + SCALE_XU = (1u << 11), + SCALE_YU = (1u << 12), + SCALE_ZU = (1u << 13), + + TRANSLATE = TRANSLATE_X | TRANSLATE_Y | TRANSLATE_Z, + ROTATE = ROTATE_X | ROTATE_Y | ROTATE_Z | ROTATE_SCREEN, + SCALE = SCALE_X | SCALE_Y | SCALE_Z, + SCALEU = SCALE_XU | SCALE_YU | SCALE_ZU, // universal + UNIVERSAL = TRANSLATE | ROTATE | SCALEU + }; + void Draw(); + bool isManipulating = false; + Mode mode = Mode::WORLD; + Operation operation = Operation::TRANSLATE; private: - SHTransformComponent* selectedEntityTranformComponent{nullptr}; + SHTransformComponent* selectedEntityTransformComponent{nullptr}; SHCameraComponent* editorCamera{nullptr}; }; } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 162102b3..e938ae22 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -133,6 +133,8 @@ namespace SHADE } } + PollPicking(); + if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { SHCommandManager::RedoCommand(); @@ -341,7 +343,7 @@ namespace SHADE if (auto gfxSystem = SHSystemManager::GetSystem()) { auto viewportWindow = SHEditorWindowManager::GetEditorWindow(); - if (viewportWindow->isWindowHovered && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + if (viewportWindow->isWindowHovered && !viewportWindow->transformGizmo.isManipulating && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { EntityID pickedEID = gfxSystem->GetMousePickSystem()->GetPickedEntity(); if(pickedEID == MAX_EID) diff --git a/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp b/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp index 66eeb8c4..0c7c1ecf 100644 --- a/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp +++ b/SHADE_Engine/src/Editor/SHImGuiHelpers.hpp @@ -15,7 +15,7 @@ //#==============================================================# #ifndef SH_IM_MATH #define IM_VEC2_CLASS_EXTRA \ - ImVec2(const SHADE::SHVec2& vec) {x = vec.x; y = vec.y;} \ + ImVec2(const SHADE::SHVec2& vec) {x = vec.x; y = vec.y;} \ operator SHADE::SHVec2() const {return SHADE::SHVec2(x,y);} #define IM_VEC3_CLASS_EXTRA \ ImVec3(const SHADE::SHVec3& vec) {x = vec.x; y = vec.y; z = vec.z;} \ @@ -43,6 +43,10 @@ namespace SHADE constexpr ImVec4 blue = {0.0f, 0.0f, 1.0f, 1.f}; constexpr ImVec4 white = {1.0f, 1.0f, 1.0f, 1.f}; + constexpr int colors_red = 0; + constexpr int colors_green = 1; + constexpr int colors_blue = 2; + constexpr int colors_white = 3; constexpr ImU32 colors[] = { 0xBB0000FF, // red 0xBB00FF00, // green From 9df517f3b30885d78c5ce63a5add0d002680d9b6 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 21 Oct 2022 20:28:54 +0800 Subject: [PATCH 406/793] SP3-170 SP3-238 Restructured asset and asset loading library types to be derived from common base class. Storage of assets and loaders based on pointers. Created general templated calls to get data from asset manager based on asset type passed in as template argument. More concise internal interface when loading and storing assets with libraries --- Assets/Cube.003.shmesh.shmeta | 2 +- Assets/Cube.012.shmesh.shmeta | 2 +- .../RaccoonPreTexturedVer1_Base9.shtex.shmeta | 2 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 47 +- .../src/Assets/Asset Types/SHAnimationAsset.h | 4 +- .../src/Assets/Asset Types/SHAssetData.h | 19 + .../src/Assets/Asset Types/SHInternalAsset.h | 21 + .../src/Assets/Asset Types/SHMeshAsset.h | 6 +- .../src/Assets/Asset Types/SHTextureAsset.h | 3 +- .../src/Assets/Libraries/SHAssetLoader.h | 21 + .../src/Assets/Libraries/SHAssimpLibrary.cpp | 26 +- .../src/Assets/Libraries/SHAssimpLibrary.h | 6 +- .../src/Assets/Libraries/SHMeshCompiler.cpp | 2 +- .../src/Assets/Libraries/SHMeshLoader.cpp | 13 +- .../src/Assets/Libraries/SHMeshLoader.h | 6 +- .../src/Assets/Libraries/SHTextureLoader.cpp | 9 + .../src/Assets/Libraries/SHTextureLoader.h | 17 +- SHADE_Engine/src/Assets/SHAsset.h | 5 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 51 ++- SHADE_Engine/src/Assets/SHAssetManager.cpp | 422 ++++-------------- SHADE_Engine/src/Assets/SHAssetManager.h | 80 ++-- .../src/Assets/SHAssetMetaHandler.cpp | 14 +- 22 files changed, 300 insertions(+), 478 deletions(-) create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHAssetData.h create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHInternalAsset.h create mode 100644 SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h diff --git a/Assets/Cube.003.shmesh.shmeta b/Assets/Cube.003.shmesh.shmeta index d41be546..207f3999 100644 --- a/Assets/Cube.003.shmesh.shmeta +++ b/Assets/Cube.003.shmesh.shmeta @@ -1,3 +1,3 @@ Name: Cube.003 ID: 110152941 -Type:  +Type: 6 diff --git a/Assets/Cube.012.shmesh.shmeta b/Assets/Cube.012.shmesh.shmeta index d5cd1090..3af04f93 100644 --- a/Assets/Cube.012.shmesh.shmeta +++ b/Assets/Cube.012.shmesh.shmeta @@ -1,3 +1,3 @@ Name: Cube.012 ID: 107348815 -Type:  +Type: 6 diff --git a/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta b/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta index f8c267d9..3905aa4f 100644 --- a/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta +++ b/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta @@ -1,3 +1,3 @@ Name: RaccoonPreTexturedVer1_Base9 ID: 91918845 -Type:  +Type: 4 diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index f1d656ee..50a87fd3 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -13,6 +13,9 @@ #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" +#include "Assets/Asset Types/SHMeshAsset.h" +#include "Assets/Asset Types/SHTextureAsset.h" + #include "Assets/SHAssetManager.h" using namespace SHADE; @@ -39,34 +42,26 @@ namespace Sandbox // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); + auto assets = SHAssetManager::GetAllAssets(); + //Test Racoon mesh - auto meshes = SHADE::SHAssetManager::GetAllMeshes(); - std::vector> handles; - for (auto const& mesh : meshes) - { - if (mesh.header.meshName == "Cube.012") - { - handles.push_back(graphicsSystem->AddMesh( - mesh.header.vertexCount, - mesh.vertexPosition.data(), - mesh.texCoords.data(), - mesh.vertexTangent.data(), - mesh.vertexNormal.data(), - mesh.header.indexCount, - mesh.indices.data() - )); - } - } + auto mesh = SHAssetManager::GetData(107348815); + Handle handle; + handle = (graphicsSystem->AddMesh( + mesh->header.vertexCount, + mesh->vertexPosition.data(), + mesh->texCoords.data(), + mesh->vertexTangent.data(), + mesh->vertexNormal.data(), + mesh->header.indexCount, + mesh->indices.data() + )); graphicsSystem->BuildMeshBuffers(); // Load Textures - auto textures = SHADE::SHAssetManager::GetAllTextures(); - std::vector> texHandles; - for (const auto& tex : textures) - { - auto texture = graphicsSystem->Add(tex); - texHandles.push_back(texture); - } + auto texture = SHAssetManager::GetData(91918845); + Handle texHandle; + texHandle = graphicsSystem->Add(*texture); graphicsSystem->BuildTextures(); // Create Materials @@ -116,7 +111,7 @@ namespace Sandbox auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); auto& transform = *SHComponentManager::GetComponent_s(raccoonSpin); - renderable.Mesh = handles.front(); + renderable.Mesh = handle; renderable.SetMaterial(customMat); renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); @@ -157,7 +152,7 @@ namespace Sandbox auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); - renderableShowcase.Mesh = handles.front(); + renderableShowcase.Mesh = handle; renderableShowcase.SetMaterial(customMat); renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); diff --git a/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h index 76f4c0ac..b411a11e 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHAnimationAsset.h @@ -12,11 +12,11 @@ #include #include -#include "SH_API.h" +#include "SHAssetData.h" namespace SHADE { - struct SH_API SHAnimationAsset + struct SH_API SHAnimationAsset : SHAssetData { std::string name; diff --git a/SHADE_Engine/src/Assets/Asset Types/SHAssetData.h b/SHADE_Engine/src/Assets/Asset Types/SHAssetData.h new file mode 100644 index 00000000..8db9824c --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHAssetData.h @@ -0,0 +1,19 @@ +/*************************************************************************//** + * \file SHAssetDataBase.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +namespace SHADE +{ + struct SHAssetData + { + virtual ~SHAssetData(){} + }; +} diff --git a/SHADE_Engine/src/Assets/Asset Types/SHInternalAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHInternalAsset.h new file mode 100644 index 00000000..8bef34e9 --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHInternalAsset.h @@ -0,0 +1,21 @@ +/*************************************************************************//** + * \file SHInternalAsset.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include "SHAsset.h" + +namespace SHADE +{ + struct SHInternalAsset : SHAsset + { + + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index 68c0d150..20b442ba 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -14,7 +14,7 @@ #include #include "Math/SHMath.h" -#include "SH_API.h" +#include "SHAssetData.h" namespace SHADE { @@ -22,10 +22,10 @@ namespace SHADE { uint32_t vertexCount; uint32_t indexCount; - std::string meshName; + std::string name; }; - struct SH_API SHMeshAsset + struct SH_API SHMeshAsset : SHAssetData { bool compiled; bool changed; diff --git a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h index d24b6c02..d26a2c30 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHTextureAsset.h @@ -2,10 +2,11 @@ #include "tinyddsloader.h" #include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" +#include "SHAssetData.h" namespace SHADE { - struct SHTextureAsset + struct SHTextureAsset : SHAssetData { bool compiled; diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h b/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h new file mode 100644 index 00000000..41595519 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h @@ -0,0 +1,21 @@ +/*************************************************************************//** + * \file SHAssetLoader.h + * \author Loh Xiao Qi + * \date October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include "Assets/Asset Types/SHAssetData.h" + +namespace SHADE +{ + struct SHAssetLoader + { + virtual SHAssetData* Load(AssetPath path) = 0; + }; +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp index feea9f35..f4be0b68 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp @@ -51,13 +51,11 @@ namespace SHADE } } - SHMeshAsset SHAssimpLibrary::ProcessMesh(aiMesh const& mesh) noexcept + SHMeshAsset* SHAssimpLibrary::ProcessMesh(aiMesh const& mesh) noexcept { - SHMeshAsset result - { - .compiled { false}, - .changed { false } - }; + SHMeshAsset* result = new SHMeshAsset(); + result->compiled = false; + result->changed = false; for (size_t i{0}; i < mesh.mNumVertices; ++i) { @@ -66,7 +64,7 @@ namespace SHADE vertex.x = mesh.mVertices[i].x; vertex.y = mesh.mVertices[i].y; vertex.z = mesh.mVertices[i].z; - result.vertexPosition.push_back(vertex); + result->vertexPosition.push_back(vertex); // Tex coords SHVec2 texCoord{0.f, 0.f}; @@ -75,7 +73,7 @@ namespace SHADE texCoord.x = mesh.mTextureCoords[0][i].x; texCoord.y = mesh.mTextureCoords[0][i].y; } - result.texCoords.push_back(texCoord); + result->texCoords.push_back(texCoord); // Normals SHVec3 normal{0.f, 0.f, 0.f}; @@ -85,7 +83,7 @@ namespace SHADE normal.y = mesh.mNormals[i].y; normal.z = mesh.mNormals[i].z; } - result.vertexNormal.push_back(normal); + result->vertexNormal.push_back(normal); // Tangent SHVec3 tangent{0.f, 0.f, 0.f}; @@ -95,7 +93,7 @@ namespace SHADE tangent.y = mesh.mTangents[i].y; tangent.z = mesh.mTangents[i].z; } - result.vertexTangent.push_back(tangent); + result->vertexTangent.push_back(tangent); } for (size_t i {0}; i < mesh.mNumFaces; ++i) @@ -103,13 +101,13 @@ namespace SHADE aiFace face = mesh.mFaces[i]; for (size_t j{0}; j < face.mNumIndices; ++j) { - result.indices.push_back(face.mIndices[j]); + result->indices.push_back(face.mIndices[j]); } } - result.header.vertexCount = static_cast(result.vertexPosition.size()); - result.header.indexCount = static_cast(result.indices.size()); - result.header.meshName = mesh.mName.C_Str(); + result->header.vertexCount = static_cast(result->vertexPosition.size()); + result->header.indexCount = static_cast(result->indices.size()); + result->header.name = mesh.mName.C_Str(); return result; } diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h index a4a0447a..83755b4c 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h +++ b/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h @@ -22,13 +22,13 @@ namespace SHADE class SHAssimpLibrary { private: - using MeshVectorRef = std::vector&; - using AnimVectorRef = std::vector&; + using MeshVectorRef = std::vector&; + using AnimVectorRef = std::vector&; static Assimp::Importer aiImporter; static void ProcessNode(aiNode const& node, aiScene const& scene,MeshVectorRef meshes) noexcept; static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept; - static SHMeshAsset ProcessMesh(aiMesh const& mesh) noexcept; + static SHMeshAsset* ProcessMesh(aiMesh const& mesh) noexcept; public: static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept; diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 8026f0e1..2346714e 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -20,7 +20,7 @@ std::string SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, A { std::string newPath{ path.string() }; newPath = newPath.substr(0, newPath.find_last_of('/') + 1); - newPath += asset.header.meshName + MESH_EXTENSION; + newPath += asset.header.name + MESH_EXTENSION.data(); std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; if (!file.is_open()) diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp index 73fed1fb..90dd58d4 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp @@ -16,7 +16,7 @@ namespace SHADE { - void SHMeshLoader::LoadSHMesh(SHMeshAsset& mesh, AssetPath path) noexcept + void SHMeshLoader::LoadSHMesh(AssetPath path, SHMeshAsset& mesh) noexcept { std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; if (!file.is_open()) @@ -56,7 +56,7 @@ namespace SHADE mesh.header.indexCount = indexCount; mesh.header.vertexCount = vertCount; - mesh.header.meshName = name; + mesh.header.name = name; mesh.vertexPosition = std::move(vertPos); mesh.vertexTangent = std::move(vertTan); @@ -66,4 +66,13 @@ namespace SHADE file.close(); } + + SHAssetData* SHMeshLoader::Load(AssetPath path) + { + auto result = new SHMeshAsset(); + + LoadSHMesh(path, *result); + + return result; + } } diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index f01b942a..34c4e5d2 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -12,11 +12,13 @@ #pragma once #include "../SHAssetMacros.h" #include "../Asset Types/SHMeshAsset.h" +#include "SHAssetLoader.h" namespace SHADE { - struct SHMeshLoader + struct SHMeshLoader : public SHAssetLoader { - static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept; + void LoadSHMesh(AssetPath path, SHMeshAsset& meshes) noexcept; + SHAssetData* Load(AssetPath path) override; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp index 5147562a..8b986524 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp @@ -133,6 +133,15 @@ namespace SHADE file.close(); } + SHAssetData* SHTextureLoader::Load(AssetPath path) + { + auto result = new SHTextureAsset(); + + LoadImageAsset(path, *result); + + return result; + } + void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) { if (path.extension().string() == DDS_EXTENSION) diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h index eb61ea91..8bdf91b1 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h @@ -15,19 +15,20 @@ #include "../SHAssetMacros.h" #include "../Asset Types/SHTextureAsset.h" #include "tinyddsloader.h" +#include "SHAssetLoader.h" namespace SHADE { - class SHTextureLoader + class SHTextureLoader : public SHAssetLoader { private: - static std::string TinyDDSResultToString(tinyddsloader::Result value); - static vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); - - - static void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; + std::string TinyDDSResultToString(tinyddsloader::Result value); + vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); + + void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; public: - static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); - static void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; + void LoadImageAsset(AssetPath paths, SHTextureAsset& image); + void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; + SHAssetData* Load(AssetPath path) override; }; } diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h index 8d7b55d1..86e8a722 100644 --- a/SHADE_Engine/src/Assets/SHAsset.h +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -12,11 +12,12 @@ #pragma once #include "Filesystem/SHFileSystem.h" -#include "SHAssetMacros.h" +#include "Assets/SHAssetMacros.h" +#include "SH_API.h" namespace SHADE { - struct SHAsset + struct SH_API SHAsset { AssetName name; AssetID id; diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 61c5879d..0fdfa04e 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -32,12 +32,12 @@ typedef std::filesystem::path AssetPath; typedef unsigned char* AssetData; typedef std::string AssetMetaVersion; typedef std::string AssetExtension; -typedef unsigned char AssetTypeMeta; +typedef size_t AssetTypeMeta; typedef FMOD::Sound* SHSound; // Asset Meta Version -#define ASSET_META_VER "1.0" +constexpr std::string_view ASSET_META_VER { "1.0" }; // Asset type enum enum class AssetType : AssetTypeMeta @@ -53,34 +53,35 @@ enum class AssetType : AssetTypeMeta SCENE, PREFAB, AUDIO_WAV, - DDS + DDS, + MAX_COUNT }; //Directory #ifdef _PUBLISH -#define ASSET_ROOT "Assets" +constexpr std::string_view ASSET_ROOT {"Assets"}; #else -#define ASSET_ROOT "../../Assets" +constexpr std::string_view ASSET_ROOT {"../../Assets"}; #endif // ASSET EXTENSIONS -#define META_EXTENSION ".shmeta" -#define IMAGE_EXTENSION ".png" -#define AUDIO_EXTENSION ".ogg" -#define AUDIO_WAV_EXTENSION ".wav" -#define SHADER_EXTENSION ".glsl" -#define SCRIPT_EXTENSION ".cs" -#define SCENE_EXTENSION ".SHADE" -#define PREFAB_EXTENSION ".SHPrefab" -#define MATERIAL_EXTENSION ".SHMat" -#define TEXTURE_EXTENSION ".shtex" -#define DDS_EXTENSION ".dds" -#define FBX_EXTENSION ".fbx" -#define GLTF_EXTENSION ".gltf" -#define MESH_EXTENSION ".shmesh" +constexpr std::string_view META_EXTENSION {".shmeta"}; +constexpr std::string_view IMAGE_EXTENSION {".png"}; +constexpr std::string_view AUDIO_EXTENSION {".ogg"}; +constexpr std::string_view AUDIO_WAV_EXTENSION {".wav"}; +constexpr std::string_view SHADER_EXTENSION {".glsl"}; +constexpr std::string_view SCRIPT_EXTENSION {".cs"}; +constexpr std::string_view SCENE_EXTENSION {".SHADE"}; +constexpr std::string_view PREFAB_EXTENSION {".SHPrefab"}; +constexpr std::string_view MATERIAL_EXTENSION {".SHMat"}; +constexpr std::string_view TEXTURE_EXTENSION {".shtex"}; +constexpr std::string_view DDS_EXTENSION {".dds"}; +constexpr std::string_view FBX_EXTENSION {".fbx"}; +constexpr std::string_view GLTF_EXTENSION {".gltf"}; +constexpr std::string_view MESH_EXTENSION {".shmesh"}; -std::string const EXTENSIONS[] = { +constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, MATERIAL_EXTENSION, @@ -96,10 +97,12 @@ std::string const EXTENSIONS[] = { GLTF_EXTENSION }; +constexpr size_t TYPE_COUNT {static_cast(AssetType::MAX_COUNT) }; + // Error flags -#define FILE_NOT_FOUND_ERR "FILE NOT FOUND" -#define META_NOT_FOUND_ERR "META NOT FOUND" -#define ASSET_NOT_FOUND_ERR "ASSET NOT FOUND" -#define EXT_DOES_NOT_EXIST "TYPE DOES NOT HAVE EXTENSION DEFINED" +constexpr std::string_view FILE_NOT_FOUND_ERR {"FILE NOT FOUND"}; +constexpr std::string_view META_NOT_FOUND_ERR {"META NOT FOUND"}; +constexpr std::string_view ASSET_NOT_FOUND_ERR {"ASSET NOT FOUND"}; +constexpr std::string_view EXT_DOES_NOT_EXIST {"TYPE DOES NOT HAVE EXTENSION DEFINED"}; #endif // !SH_ASSET_MACROS_H diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index faca24b2..2658e83b 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -26,11 +26,10 @@ namespace SHADE FMOD::System* SHAssetManager::audioSystem; std::unordered_map* SHAssetManager::audioSoundList; - std::vector SHAssetManager::assetCollection; - std::unordered_map SHAssetManager::assetRegistry; + std::vector SHAssetManager::loaders(TYPE_COUNT); - std::unordered_map SHAssetManager::meshCollection; - std::unordered_map SHAssetManager::textureCollection; + std::vector SHAssetManager::assetCollection; + std::unordered_map SHAssetManager::assetData; /**************************************************************************** * \brief Static function to generate asset ID. @@ -81,7 +80,37 @@ namespace SHADE // return std::filesystem::path(); //} - return std::filesystem::path(ASSET_ROOT + folder + path.filename().string()); + return std::filesystem::path(std::string(ASSET_ROOT) + folder + path.filename().string()); + } + + AssetPath SHAssetManager::GenerateNewPath(AssetName name, AssetType type) + { + std::string folder; + + switch(type) + { + case AssetType::SCENE: + folder = "scenes/"; + break; + + case AssetType::PREFAB: + folder = "prefabs/"; + break; + + case AssetType::MATERIAL: + folder = "materials/"; + break; + + default: + folder = "/"; + } + + return std::filesystem::path{ + std::string(ASSET_ROOT) + + folder + + name + + std::string(EXTENSIONS[static_cast(type)]) + }; } /**************************************************************************** @@ -117,7 +146,7 @@ namespace SHADE // folder = ""; // break; //} - AssetPath path{ ASSET_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; + AssetPath path{ std::string{ASSET_ROOT} + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) }; SHAssetMetaHandler::WriteMetaData(meta); @@ -126,6 +155,19 @@ namespace SHADE return id; } + AssetID SHAssetManager::CreateAsset(AssetName name, AssetType type) noexcept + { + AssetID id = GenerateAssetID(type); + + assetCollection.emplace_back( + name, + id, + type, + GenerateNewPath(name, type), + 0 + ); + return id; + } /**************************************************************************** * \brief Import new asset from outside editor window. * @@ -134,7 +176,10 @@ namespace SHADE ****************************************************************************/ AssetID SHAssetManager::ImportNewAsset(char const* p) noexcept { - std::filesystem::path const path{ p }; + std::filesystem::path const path{ p }; + + auto const type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()); + auto const id = GenerateAssetID(type); std::filesystem::path const newPath{ GenerateLocalPath(path) }; if (newPath.empty()) @@ -145,11 +190,7 @@ namespace SHADE std::filesystem::copy(path, newPath); - AssetID id{ RetrieveAsset(newPath.string().c_str()) }; - if (id != 0) - { - LoadData(id); - } + assetCollection.push_back(CreateAssetFromPath(newPath)); return id; } @@ -160,158 +201,14 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::RefreshAllAssets() noexcept { - std::vector metaFiles; - std::vector AssetFiles; - //SHFileSystem::LoadAllFiles(metaFiles, AssetFiles); - //std::vector AssetFilesVerified; - std::vector AssetFilesNew; - - for (auto const& asset : AssetFiles) - { - bool found = false; - for (auto it {metaFiles.begin()}; it != metaFiles.end(); ++it) - { - std::string fileExtCheck{ asset.filename().string() }; - fileExtCheck += META_EXTENSION; - if (it->filename().string() == fileExtCheck) - { - metaFiles.erase(it); - found = true; - break; - } - } - - if (!found && IsRecognised(asset.extension().string().c_str())) - { - AssetFilesNew.push_back(asset); - } - } - - std::vector newLoad; - newLoad.reserve(AssetFilesNew.size()); - - //TODO: Handle if meta does not match all assets (if meta exist and asset doesnt, vice versa) - for (auto const& file : AssetFilesNew) - { - newLoad.push_back(RegisterAssetNew(file)); - } - - //UpdateAllSpriteSets(); - - } - - //void SHAssetManager::LoadDataTemp(std::string p) noexcept - //{ - // AssetPath path{ p }; - - // if (path.extension().string() == FBX_EXTENSION - // || path.extension().string() == GLTF_EXTENSION - // || path.extension().string() == MESH_EXTENSION) - // { - // LoadGLTF( - // { - // .name {path.filename().string()}, - // .id {0}, - // .type {AssetType::MESH}, - // .path {path}, - // .location {0} - // } - // ); - // } - // else if (path.extension().string() == DDS_EXTENSION - // || path.extension().string() == TEXTURE_EXTENSION) - // { - // LoadDDS( - // { - // .name {path.filename().string()}, - // .id {0}, - // .type {AssetType::DDS}, - // .path {path}, - // .location {0} - // } - // ); - // } - //} - - std::vector SHAssetManager::GetAllMeshes() noexcept - { - std::vector result; - for (auto const& mesh : meshCollection) - { - result.push_back(mesh.second); - } - - return result; - } - - std::vector SHAssetManager::GetAllTextures() noexcept - { - std::vector result; - for (auto const& dds : textureCollection) - { - result.push_back(dds.second); - } - - return result; - } - - SHMeshAsset const* SHAssetManager::GetMesh(AssetID id) noexcept - { - if (meshCollection.find(id) == meshCollection.end()) - { - return nullptr; - } - - return &meshCollection[id]; - } - - SHTextureAsset const* SHAssetManager::GetTexture(AssetID id) noexcept - { - if (textureCollection.find(id) == textureCollection.end()) - { - return nullptr; - } - - return &textureCollection[id]; - } - - /**************************************************************************** - * \param Path for meta data file - * \param Path for asset file - - * \brief Links meta data to asset in registries. Meta data should - * already exist - ****************************************************************************/ - void SHAssetManager::RegisterAsset(AssetPath const& metaPath, AssetPath const& path) noexcept - { - SHAsset const meta = SHAssetMetaHandler::RetrieveMetaData(metaPath); - - assetCollection.push_back(meta); - } - - /**************************************************************************** - * \param Path for asset file - - * \brief Creates new meta data for new asset. - ****************************************************************************/ - SHAsset SHAssetManager::RegisterAssetNew(AssetPath const& asset) noexcept - { - SHAsset meta; - meta.type = SHAssetMetaHandler::GetTypeFromExtension(asset.extension().string()); - meta.id = GenerateAssetID(meta.type); - - assetCollection.push_back(meta); - - SHAssetMetaHandler::WriteMetaData(meta); - return assetCollection.back(); } bool SHAssetManager::IsRecognised(char const* ext) noexcept { for (auto const& e : EXTENSIONS) { - if (strcmp(ext, e.c_str()) == 0) + if (strcmp(ext, e.data()) == 0) { return true; } @@ -320,60 +217,31 @@ namespace SHADE return false; } - void SHAssetManager::LoadGLTF(AssetPath path) noexcept + SHAsset SHAssetManager::CreateAssetFromPath(AssetPath path) noexcept { - std::vector meshes; - std::vector anims; - - SHAssimpLibrary::LoadFromFile(path, meshes, anims); + SHAsset result; - for (auto const& mesh : meshes) - { - auto id{ GenerateAssetID(AssetType::MESH) }; - meshCollection.emplace(id, mesh); + result.name = path.stem().string(); + result.type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()); + result.id = GenerateAssetID(result.type); + result.path = path; - AssetPath path; - if (!mesh.compiled) - { - path = SHMeshCompiler::CompileMeshBinary(mesh, path); - } - - assetCollection.emplace_back( - mesh.header.meshName, - id, - AssetType::MESH, - path, - 0 - ); - } - - for (auto const& anim : anims) - { - //TODO Register anim resource and compile into binary - } + return result; } - void SHAssetManager::LoadDDS(SHAsset asset) noexcept + void SHAssetManager::InitLoaders() noexcept { - SHTextureAsset image; - - SHTextureLoader::LoadImageAsset(asset.path, image); - - if (!image.compiled) - { - auto id{ GenerateAssetID(AssetType::TEXTURE) }; - textureCollection.emplace(id, image); - - auto path{ SHTextureCompiler::CompileTextureBinary(image, asset.path) }; - - assetCollection.emplace_back( - image.name, - id, - AssetType::TEXTURE, - path, - 0 - ); - } + loaders[static_cast(AssetType::AUDIO)] = nullptr; + loaders[static_cast(AssetType::SHADER)] = nullptr; + loaders[static_cast(AssetType::MATERIAL)] = nullptr; + loaders[static_cast(AssetType::IMAGE)] = dynamic_cast(new SHTextureLoader()); + loaders[static_cast(AssetType::TEXTURE)] = nullptr; + loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); + loaders[static_cast(AssetType::SCRIPT)] = nullptr; + loaders[static_cast(AssetType::SCENE)] = nullptr; + loaders[static_cast(AssetType::PREFAB)] = nullptr; + loaders[static_cast(AssetType::AUDIO_WAV)] = nullptr; + loaders[static_cast(AssetType::DDS)] = nullptr; } /**************************************************************************** @@ -381,7 +249,8 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::Load() noexcept { - RetrieveAssets(); + InitLoaders(); + BuildAssetCollection(); LoadAllData(); } @@ -390,143 +259,40 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::LoadAllData() noexcept { - //TODO Remove when on demand loading is done for (auto const& asset : assetCollection) { - switch (asset.type) - { - case AssetType::MESH: - meshCollection.emplace(asset.id, SHMeshAsset()); - SHMeshLoader::LoadSHMesh(meshCollection[asset.id], asset.path); - break; - - case AssetType::TEXTURE: - textureCollection.emplace(asset.id, SHTextureAsset()); - SHTextureLoader::LoadSHTexture(asset.path, textureCollection[asset.id]); - break; - - default: - void; - } + SHAssetData* data = loaders[static_cast(asset.type)]->Load(asset.path); + assetData.emplace(asset.id, data); } } - void SHAssetManager::LoadData(AssetID id) noexcept + SHAssetData* SHAssetManager::LoadData(SHAsset const& asset) noexcept { - (void)id; - } + SHAssetData* data = loaders[static_cast(asset.type)]->Load(asset.path); - /**************************************************************************** - * \brief Retrieve all asset files and meta files from filesystem - ****************************************************************************/ - void SHAssetManager::RetrieveAssets() noexcept - { - std::vector metaFiles; - std::vector AssetFiles; - - for (auto const dir : std::filesystem::recursive_directory_iterator(ASSET_ROOT)) + if (data == nullptr) { - if (dir.path().extension().string() == META_EXTENSION) - { - auto meta{ SHAssetMetaHandler::RetrieveMetaData(dir.path()) }; - - assetCollection.push_back(meta); - assetRegistry.emplace(meta.id, meta); - } - } - - //TODO: Write new function for file manager to loop through all files - //SHFileSystem::StartupFillDirectories(ASSET_ROOT); - //FolderPointer rootFolder = SHFileSystem::GetRoot(); - - //for (auto const& meta : metaFiles) - //{ - // for (std::vector::const_iterator it{ AssetFiles.cbegin() }; - // it != AssetFiles.cend(); - // ++it) - // { - // // Asset exists for meta file - // std::string fileExtCheck{ it->filename().string() }; - // fileExtCheck += META_EXTENSION; - // if (meta.filename().string() == fileExtCheck) - // { - // RegisterAsset(meta, *it); - // AssetFiles.erase(it); - // break; - // } - // } - //} - - //TODO: Handle if meta does not match all assets (if meta exist and asset doesnt, vice versa) - //for (auto const& file : AssetFiles) - //{ - // if (IsRecognised(file.extension().string().c_str())) - // { - // SHAssetMetaHandler::WriteMetaData(RegisterAssetNew(file)); - // } - // else - // { - // std::cout << "Unsupported File Format: " << file.filename() << "\n"; - // } - //} - } - - AssetID SHAssetManager::RetrieveAsset(char const* path) noexcept - { - std::filesystem::path p{ path }; - if (IsRecognised(p.extension().string().c_str())) - { - SHAsset const& meta{ RegisterAssetNew(p) }; - SHAssetMetaHandler::WriteMetaData(meta); - return meta.id; + SHLOG_ERROR("Unable to load asset into memory: {}\n", asset.path.string()); } else { - std::cout << "Unsupported File Format: " << p.filename() << "\n"; + assetData.emplace(asset.id, data); } - // Assert that file imported is not recognised - return 0; + return data; } - /**************************************************************************** - * \param Full path of file - - * \brief Extracts file name from path. Formats file name into readable - * with spaces and capitalises first letter of every word - ****************************************************************************/ - AssetName SHAssetManager::GetNameFromPath(AssetPath filepath) noexcept + void SHAssetManager::BuildAssetCollection() noexcept { - std::string name{ filepath.filename().string() }; - name = name.substr(0, name.find_last_of('.')); - - //if (name[0] <= 122 && name[0] >= 97) - //{ - // name[0] -= 32; - //} - - //for (size_t i{ 1 }; i < name.length(); ++i) - //{ - // // Replace all underscores with spaces - // if (name[i] == '_') - // { - // name[i] = ' '; - // continue; - // } - - // if (name[i + 1] <= 'Z' && name[i + 1] >= 'A' - // && name[i] <= 'z' && name[i] >= 'a') - // { - // name.insert(i + 1, 1, ' '); - // continue; - // } - - // if (name[i - 1] == ' ' && name[i] <= 'z' && name[i] >= 'a') - // { - // name[i] -= 32; - // } - //} - - return name; + for (auto const& dir : std::filesystem::recursive_directory_iterator{ASSET_ROOT}) + { + if (dir.is_regular_file()) + { + if (dir.path().extension().string() == META_EXTENSION.data()) + { + assetCollection.push_back(SHAssetMetaHandler::RetrieveMetaData(dir.path())); + } + } + } } } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index b2c4216b..74029bdd 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -11,9 +11,10 @@ #pragma once #include "tinyddsloader.h" #include "SHAsset.h" +#include "Asset Types/SHAssetData.h" +#include "Libraries/SHAssetLoader.h" +#include -#include "Asset Types/SHMeshAsset.h" -#include "Asset Types/SHTextureAsset.h" #include "SH_API.h" namespace SHADE @@ -28,6 +29,8 @@ namespace SHADE static AssetPath GenerateLocalPath(AssetPath path) noexcept; + static AssetPath GenerateNewPath(AssetName name, AssetType type); + /**************************************************************************** * \brief Deallocate all memory used by resource data ****************************************************************************/ @@ -54,6 +57,7 @@ namespace SHADE * \return resource id generated for new asset ****************************************************************************/ static AssetID CreateNewAsset(AssetType, AssetName) noexcept; + static AssetID CreateAsset(AssetName name, AssetType type) noexcept; /**************************************************************************** * \brief Import new resource from outside editor window. @@ -70,67 +74,49 @@ namespace SHADE static void RefreshAllAssets() noexcept; // -------------------------------------------------------------------------/ - //TODO: TEMPORARY FOR TESTING GLTF & DDS - //static void LoadDataTemp(std::string path) noexcept; - static std::vector GetAllMeshes() noexcept; - static std::vector GetAllTextures() noexcept; + template + static std::enable_if_t, T const * const> GetData(AssetID id) noexcept + { + if (assetData.contains(id)) + { + for (auto const& asset : assetCollection) + { + if (asset.id == id) + { + assetData.emplace(id, LoadData(asset)); + return dynamic_cast(assetData[id]); + } + } - static SHMeshAsset const* GetMesh(AssetID id) noexcept; - static SHTextureAsset const* GetTexture(AssetID id) noexcept; - - // Specialised load calls - static void LoadGLTF(AssetPath path) noexcept; - static void LoadDDS(SHAsset asset) noexcept; + SHLOG_ERROR("Asset ID provided does not exist: {}", id); + return nullptr; + } + + return dynamic_cast(assetData[id]); + } private: /**************************************************************************** * \brief Load resource data into memory ****************************************************************************/ static void LoadAllData() noexcept; - static void LoadData(AssetID id) noexcept; + static SHAssetData* LoadData(SHAsset const& asset) noexcept; - /**************************************************************************** - * \brief Retrieve all resource files and meta files from filesystem - ****************************************************************************/ - static void RetrieveAssets() noexcept; - - static AssetID RetrieveAsset(char const* path) noexcept; - - /**************************************************************************** - * \param Full path of file - - * \brief Extracts file name from path. Formats file name into readable - * with spaces and capitalises first letter of every word - ****************************************************************************/ - static AssetName GetNameFromPath(AssetPath) noexcept; - - /**************************************************************************** - * \param Path for meta data file - * \param Path for resource file - - * \brief Links meta data to resource in registries. Meta data should - * already exist - ****************************************************************************/ - static void RegisterAsset(AssetPath const&, AssetPath const&) noexcept; - - /**************************************************************************** - * \param Path for resource file - - * \brief Creates new meta data for new resource. - ****************************************************************************/ - static SHAsset RegisterAssetNew(AssetPath const&) noexcept; + inline static void BuildAssetCollection() noexcept; static bool IsRecognised(char const*) noexcept; + + static SHAsset CreateAssetFromPath(AssetPath path) noexcept; + static void InitLoaders() noexcept; static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; + static std::vector loaders; + // For all resources static std::vector assetCollection; - static std::unordered_map assetRegistry; - - static std::unordered_map meshCollection; - static std::unordered_map textureCollection; + static std::unordered_map assetData; }; } diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 442c3d96..1bfec00d 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -37,7 +37,7 @@ namespace SHADE { for (int i{0}; i < EXTENSIONS->size(); ++i) { - if (ext == EXTENSIONS[i]) + if (strcmp(ext.c_str(), EXTENSIONS[i].data()) == 0) { return static_cast(i); } @@ -53,7 +53,7 @@ namespace SHADE ****************************************************************************/ AssetExtension SHAssetMetaHandler::GetExtensionFromType(AssetType type) noexcept { - return EXTENSIONS[static_cast(type)]; + return AssetExtension(EXTENSIONS[static_cast(type)]); } /**************************************************************************** @@ -124,16 +124,6 @@ namespace SHADE metaFile << "ID: " << meta.id << "\n"; metaFile << "Type: " << static_cast(meta.type) << std::endl; - ////TODO Add in information that is specific to types like mesh - //switch(meta.type) - //{ - //case AssetType::MESH: - // break; - - //default: - // break; - //} - metaFile.close(); } From 99a69b00206e7fe46faf87ab2c28570f8d6912c7 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 21 Oct 2022 20:45:03 +0800 Subject: [PATCH 407/793] tweaks + add new ui font --- Assets/Editor/Fonts/fa-solid-900.ttf | Bin 0 -> 397728 bytes .../Inspector/SHEditorComponentView.hpp | 3 +- .../ViewportWindow/SHEditorViewport.cpp | 22 +- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 2 +- SHADE_Engine/src/Editor/IconsFontAwesome6.h | 1400 +++++++++++++++++ SHADE_Engine/src/Editor/SHEditor.cpp | 10 +- 6 files changed, 1427 insertions(+), 10 deletions(-) create mode 100644 Assets/Editor/Fonts/fa-solid-900.ttf create mode 100644 SHADE_Engine/src/Editor/IconsFontAwesome6.h diff --git a/Assets/Editor/Fonts/fa-solid-900.ttf b/Assets/Editor/Fonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f89fc9f854f31dfa1481d31d1b19c25816da4947 GIT binary patch literal 397728 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%0AJm^cz`MgMZ3nFE%a*tJy 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
    pzk5_a@41jd7nY1;P=goeTL4RsDpb!H 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 rZHV{(LAGJk3@xiFsZ^8&U?LGew6kkZh literal 0 HcmV?d00001 diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 47fec730..08f5695b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -10,6 +10,7 @@ //|| SHADE Includes || //#==============================================================# #include "Editor/IconsMaterialDesign.h" +#include "Editor/IconsFontAwesome6.h" #include "ECS_Base/Components/SHComponent.h" #include "Editor/SHEditorWidgets.hpp" #include "Physics/Components/SHColliderComponent.h" @@ -216,7 +217,7 @@ namespace SHADE if (collider.GetType() == SHCollider::Type::BOX) { - SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_MD_VIEW_IN_AR, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); auto box = reinterpret_cast(collider.GetShape()); SHEditorWidgets::DragVec3("Half Extents", { "X", "Y", "Z" }, [box] {return box->GetHalfExtents(); }, [box](SHVec3 const& vec) {box->SetHalfExtents(vec);}); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index 8a18757f..b06c37c7 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -10,11 +10,14 @@ #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" +#include + +constexpr std::string_view windowName = "\xef\x80\x95 Viewport"; namespace SHADE { SHEditorViewport::SHEditorViewport() - :SHEditorWindow("Viewport", ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar) + :SHEditorWindow("\xee\x90\x8b Viewport", ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar) { } @@ -39,10 +42,20 @@ namespace SHADE gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); ImGui::Image((ImTextureID)descriptorSet, {beginContentRegionAvailable.x, beginContentRegionAvailable.y}); + + if(ImGui::IsWindowHovered() && ImGui::IsMouseDown(ImGuiMouseButton_Right)) + { + ImGui::SetMouseCursor(ImGuiMouseCursor_None); + ImGui::SetCursorScreenPos(ImGui::GetMousePos()); + ImGui::PushStyleColor(ImGuiCol_Text, ImGuiColors::green); + ImGui::Text(ICON_FA_EYE); + ImGui::PopStyleColor(); + } } ImGuizmo::SetRect(beginCursorPos.x , beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); transformGizmo.Draw(); ImGui::End(); + } void SHEditorViewport::Exit() @@ -78,7 +91,7 @@ namespace SHADE ImGui::BeginDisabled(isTranslate); if(isTranslate) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::SmallButton(ICON_MD_OPEN_WITH)) + if(ImGui::Button(ICON_MD_OPEN_WITH)) { transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; } @@ -90,7 +103,7 @@ namespace SHADE ImGui::BeginDisabled(isRotate); if(isRotate) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::SmallButton(ICON_MD_AUTORENEW)) + if(ImGui::Button(ICON_MD_AUTORENEW)) { transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; } @@ -102,13 +115,14 @@ namespace SHADE ImGui::BeginDisabled(isScale); if(isScale) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::SmallButton(ICON_MD_OPEN_IN_FULL)) + if(ImGui::Button(ICON_MD_EXPAND)) { transformGizmo.operation = SHTransformGizmo::Operation::SCALE; } ImGui::EndDisabled(); if(isScale) ImGui::PopStyleColor(); + ImGui::EndMenuBar(); } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 35f8c4cb..a53b8c10 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -22,7 +22,7 @@ namespace SHADE editorCamera = cameraSystem->GetEditorCamera(); } auto viewportWindow = SHEditorWindowManager::GetEditorWindow(); - ImGuizmo::SetOrthographic(true); + ImGuizmo::SetOrthographic(false); SHMatrix view = SHMatrix::Transpose(editorCamera->GetViewMatrix()); SHMatrix proj = SHMatrix::Transpose(editorCamera->GetProjMatrix()); diff --git a/SHADE_Engine/src/Editor/IconsFontAwesome6.h b/SHADE_Engine/src/Editor/IconsFontAwesome6.h new file mode 100644 index 00000000..77831d94 --- /dev/null +++ b/SHADE_Engine/src/Editor/IconsFontAwesome6.h @@ -0,0 +1,1400 @@ +#pragma once +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ +// from https://github.com/FortAwesome/Font-Awesome/raw/6.x/metadata/icons.yml +// for use with https://github.com/FortAwesome/Font-Awesome/blob/6.x/webfonts/fa-regular-400.ttf, https://github.com/FortAwesome/Font-Awesome/blob/6.x/webfonts/fa-solid-900.ttf +#pragma once + +#define FONT_ICON_FILE_NAME_FAR "fa-regular-400.ttf" +#define FONT_ICON_FILE_NAME_FAS "fa-solid-900.ttf" + +#define ICON_MIN_FA 0xe005 +#define ICON_MAX_16_FA 0xf8ff +#define ICON_MAX_FA 0xf8ff +#define ICON_FA_0 "0" // U+0030 +#define ICON_FA_1 "1" // U+0031 +#define ICON_FA_2 "2" // U+0032 +#define ICON_FA_3 "3" // U+0033 +#define ICON_FA_4 "4" // U+0034 +#define ICON_FA_5 "5" // U+0035 +#define ICON_FA_6 "6" // U+0036 +#define ICON_FA_7 "7" // U+0037 +#define ICON_FA_8 "8" // U+0038 +#define ICON_FA_9 "9" // U+0039 +#define ICON_FA_A "A" // U+0041 +#define ICON_FA_ADDRESS_BOOK "\xef\x8a\xb9" // U+f2b9 +#define ICON_FA_ADDRESS_CARD "\xef\x8a\xbb" // U+f2bb +#define ICON_FA_ALIGN_CENTER "\xef\x80\xb7" // U+f037 +#define ICON_FA_ALIGN_JUSTIFY "\xef\x80\xb9" // U+f039 +#define ICON_FA_ALIGN_LEFT "\xef\x80\xb6" // U+f036 +#define ICON_FA_ALIGN_RIGHT "\xef\x80\xb8" // U+f038 +#define ICON_FA_ANCHOR "\xef\x84\xbd" // U+f13d +#define ICON_FA_ANCHOR_CIRCLE_CHECK "\xee\x92\xaa" // U+e4aa +#define ICON_FA_ANCHOR_CIRCLE_EXCLAMATION "\xee\x92\xab" // U+e4ab +#define ICON_FA_ANCHOR_CIRCLE_XMARK "\xee\x92\xac" // U+e4ac +#define ICON_FA_ANCHOR_LOCK "\xee\x92\xad" // U+e4ad +#define ICON_FA_ANGLE_DOWN "\xef\x84\x87" // U+f107 +#define ICON_FA_ANGLE_LEFT "\xef\x84\x84" // U+f104 +#define ICON_FA_ANGLE_RIGHT "\xef\x84\x85" // U+f105 +#define ICON_FA_ANGLE_UP "\xef\x84\x86" // U+f106 +#define ICON_FA_ANGLES_DOWN "\xef\x84\x83" // U+f103 +#define ICON_FA_ANGLES_LEFT "\xef\x84\x80" // U+f100 +#define ICON_FA_ANGLES_RIGHT "\xef\x84\x81" // U+f101 +#define ICON_FA_ANGLES_UP "\xef\x84\x82" // U+f102 +#define ICON_FA_ANKH "\xef\x99\x84" // U+f644 +#define ICON_FA_APPLE_WHOLE "\xef\x97\x91" // U+f5d1 +#define ICON_FA_ARCHWAY "\xef\x95\x97" // U+f557 +#define ICON_FA_ARROW_DOWN "\xef\x81\xa3" // U+f063 +#define ICON_FA_ARROW_DOWN_1_9 "\xef\x85\xa2" // U+f162 +#define ICON_FA_ARROW_DOWN_9_1 "\xef\xa2\x86" // U+f886 +#define ICON_FA_ARROW_DOWN_A_Z "\xef\x85\x9d" // U+f15d +#define ICON_FA_ARROW_DOWN_LONG "\xef\x85\xb5" // U+f175 +#define ICON_FA_ARROW_DOWN_SHORT_WIDE "\xef\xa2\x84" // U+f884 +#define ICON_FA_ARROW_DOWN_UP_ACROSS_LINE "\xee\x92\xaf" // U+e4af +#define ICON_FA_ARROW_DOWN_UP_LOCK "\xee\x92\xb0" // U+e4b0 +#define ICON_FA_ARROW_DOWN_WIDE_SHORT "\xef\x85\xa0" // U+f160 +#define ICON_FA_ARROW_DOWN_Z_A "\xef\xa2\x81" // U+f881 +#define ICON_FA_ARROW_LEFT "\xef\x81\xa0" // U+f060 +#define ICON_FA_ARROW_LEFT_LONG "\xef\x85\xb7" // U+f177 +#define ICON_FA_ARROW_POINTER "\xef\x89\x85" // U+f245 +#define ICON_FA_ARROW_RIGHT "\xef\x81\xa1" // U+f061 +#define ICON_FA_ARROW_RIGHT_ARROW_LEFT "\xef\x83\xac" // U+f0ec +#define ICON_FA_ARROW_RIGHT_FROM_BRACKET "\xef\x82\x8b" // U+f08b +#define ICON_FA_ARROW_RIGHT_LONG "\xef\x85\xb8" // U+f178 +#define ICON_FA_ARROW_RIGHT_TO_BRACKET "\xef\x82\x90" // U+f090 +#define ICON_FA_ARROW_RIGHT_TO_CITY "\xee\x92\xb3" // U+e4b3 +#define ICON_FA_ARROW_ROTATE_LEFT "\xef\x83\xa2" // U+f0e2 +#define ICON_FA_ARROW_ROTATE_RIGHT "\xef\x80\x9e" // U+f01e +#define ICON_FA_ARROW_TREND_DOWN "\xee\x82\x97" // U+e097 +#define ICON_FA_ARROW_TREND_UP "\xee\x82\x98" // U+e098 +#define ICON_FA_ARROW_TURN_DOWN "\xef\x85\x89" // U+f149 +#define ICON_FA_ARROW_TURN_UP "\xef\x85\x88" // U+f148 +#define ICON_FA_ARROW_UP "\xef\x81\xa2" // U+f062 +#define ICON_FA_ARROW_UP_1_9 "\xef\x85\xa3" // U+f163 +#define ICON_FA_ARROW_UP_9_1 "\xef\xa2\x87" // U+f887 +#define ICON_FA_ARROW_UP_A_Z "\xef\x85\x9e" // U+f15e +#define ICON_FA_ARROW_UP_FROM_BRACKET "\xee\x82\x9a" // U+e09a +#define ICON_FA_ARROW_UP_FROM_GROUND_WATER "\xee\x92\xb5" // U+e4b5 +#define ICON_FA_ARROW_UP_FROM_WATER_PUMP "\xee\x92\xb6" // U+e4b6 +#define ICON_FA_ARROW_UP_LONG "\xef\x85\xb6" // U+f176 +#define ICON_FA_ARROW_UP_RIGHT_DOTS "\xee\x92\xb7" // U+e4b7 +#define ICON_FA_ARROW_UP_RIGHT_FROM_SQUARE "\xef\x82\x8e" // U+f08e +#define ICON_FA_ARROW_UP_SHORT_WIDE "\xef\xa2\x85" // U+f885 +#define ICON_FA_ARROW_UP_WIDE_SHORT "\xef\x85\xa1" // U+f161 +#define ICON_FA_ARROW_UP_Z_A "\xef\xa2\x82" // U+f882 +#define ICON_FA_ARROWS_DOWN_TO_LINE "\xee\x92\xb8" // U+e4b8 +#define ICON_FA_ARROWS_DOWN_TO_PEOPLE "\xee\x92\xb9" // U+e4b9 +#define ICON_FA_ARROWS_LEFT_RIGHT "\xef\x81\xbe" // U+f07e +#define ICON_FA_ARROWS_LEFT_RIGHT_TO_LINE "\xee\x92\xba" // U+e4ba +#define ICON_FA_ARROWS_ROTATE "\xef\x80\xa1" // U+f021 +#define ICON_FA_ARROWS_SPIN "\xee\x92\xbb" // U+e4bb +#define ICON_FA_ARROWS_SPLIT_UP_AND_LEFT "\xee\x92\xbc" // U+e4bc +#define ICON_FA_ARROWS_TO_CIRCLE "\xee\x92\xbd" // U+e4bd +#define ICON_FA_ARROWS_TO_DOT "\xee\x92\xbe" // U+e4be +#define ICON_FA_ARROWS_TO_EYE "\xee\x92\xbf" // U+e4bf +#define ICON_FA_ARROWS_TURN_RIGHT "\xee\x93\x80" // U+e4c0 +#define ICON_FA_ARROWS_TURN_TO_DOTS "\xee\x93\x81" // U+e4c1 +#define ICON_FA_ARROWS_UP_DOWN "\xef\x81\xbd" // U+f07d +#define ICON_FA_ARROWS_UP_DOWN_LEFT_RIGHT "\xef\x81\x87" // U+f047 +#define ICON_FA_ARROWS_UP_TO_LINE "\xee\x93\x82" // U+e4c2 +#define ICON_FA_ASTERISK "*" // U+002a +#define ICON_FA_AT "@" // U+0040 +#define ICON_FA_ATOM "\xef\x97\x92" // U+f5d2 +#define ICON_FA_AUDIO_DESCRIPTION "\xef\x8a\x9e" // U+f29e +#define ICON_FA_AUSTRAL_SIGN "\xee\x82\xa9" // U+e0a9 +#define ICON_FA_AWARD "\xef\x95\x99" // U+f559 +#define ICON_FA_B "B" // U+0042 +#define ICON_FA_BABY "\xef\x9d\xbc" // U+f77c +#define ICON_FA_BABY_CARRIAGE "\xef\x9d\xbd" // U+f77d +#define ICON_FA_BACKWARD "\xef\x81\x8a" // U+f04a +#define ICON_FA_BACKWARD_FAST "\xef\x81\x89" // U+f049 +#define ICON_FA_BACKWARD_STEP "\xef\x81\x88" // U+f048 +#define ICON_FA_BACON "\xef\x9f\xa5" // U+f7e5 +#define ICON_FA_BACTERIA "\xee\x81\x99" // U+e059 +#define ICON_FA_BACTERIUM "\xee\x81\x9a" // U+e05a +#define ICON_FA_BAG_SHOPPING "\xef\x8a\x90" // U+f290 +#define ICON_FA_BAHAI "\xef\x99\xa6" // U+f666 +#define ICON_FA_BAHT_SIGN "\xee\x82\xac" // U+e0ac +#define ICON_FA_BAN "\xef\x81\x9e" // U+f05e +#define ICON_FA_BAN_SMOKING "\xef\x95\x8d" // U+f54d +#define ICON_FA_BANDAGE "\xef\x91\xa2" // U+f462 +#define ICON_FA_BARCODE "\xef\x80\xaa" // U+f02a +#define ICON_FA_BARS "\xef\x83\x89" // U+f0c9 +#define ICON_FA_BARS_PROGRESS "\xef\xa0\xa8" // U+f828 +#define ICON_FA_BARS_STAGGERED "\xef\x95\x90" // U+f550 +#define ICON_FA_BASEBALL "\xef\x90\xb3" // U+f433 +#define ICON_FA_BASEBALL_BAT_BALL "\xef\x90\xb2" // U+f432 +#define ICON_FA_BASKET_SHOPPING "\xef\x8a\x91" // U+f291 +#define ICON_FA_BASKETBALL "\xef\x90\xb4" // U+f434 +#define ICON_FA_BATH "\xef\x8b\x8d" // U+f2cd +#define ICON_FA_BATTERY_EMPTY "\xef\x89\x84" // U+f244 +#define ICON_FA_BATTERY_FULL "\xef\x89\x80" // U+f240 +#define ICON_FA_BATTERY_HALF "\xef\x89\x82" // U+f242 +#define ICON_FA_BATTERY_QUARTER "\xef\x89\x83" // U+f243 +#define ICON_FA_BATTERY_THREE_QUARTERS "\xef\x89\x81" // U+f241 +#define ICON_FA_BED "\xef\x88\xb6" // U+f236 +#define ICON_FA_BED_PULSE "\xef\x92\x87" // U+f487 +#define ICON_FA_BEER_MUG_EMPTY "\xef\x83\xbc" // U+f0fc +#define ICON_FA_BELL "\xef\x83\xb3" // U+f0f3 +#define ICON_FA_BELL_CONCIERGE "\xef\x95\xa2" // U+f562 +#define ICON_FA_BELL_SLASH "\xef\x87\xb6" // U+f1f6 +#define ICON_FA_BEZIER_CURVE "\xef\x95\x9b" // U+f55b +#define ICON_FA_BICYCLE "\xef\x88\x86" // U+f206 +#define ICON_FA_BINOCULARS "\xef\x87\xa5" // U+f1e5 +#define ICON_FA_BIOHAZARD "\xef\x9e\x80" // U+f780 +#define ICON_FA_BITCOIN_SIGN "\xee\x82\xb4" // U+e0b4 +#define ICON_FA_BLENDER "\xef\x94\x97" // U+f517 +#define ICON_FA_BLENDER_PHONE "\xef\x9a\xb6" // U+f6b6 +#define ICON_FA_BLOG "\xef\x9e\x81" // U+f781 +#define ICON_FA_BOLD "\xef\x80\xb2" // U+f032 +#define ICON_FA_BOLT "\xef\x83\xa7" // U+f0e7 +#define ICON_FA_BOLT_LIGHTNING "\xee\x82\xb7" // U+e0b7 +#define ICON_FA_BOMB "\xef\x87\xa2" // U+f1e2 +#define ICON_FA_BONE "\xef\x97\x97" // U+f5d7 +#define ICON_FA_BONG "\xef\x95\x9c" // U+f55c +#define ICON_FA_BOOK "\xef\x80\xad" // U+f02d +#define ICON_FA_BOOK_ATLAS "\xef\x95\x98" // U+f558 +#define ICON_FA_BOOK_BIBLE "\xef\x99\x87" // U+f647 +#define ICON_FA_BOOK_BOOKMARK "\xee\x82\xbb" // U+e0bb +#define ICON_FA_BOOK_JOURNAL_WHILLS "\xef\x99\xaa" // U+f66a +#define ICON_FA_BOOK_MEDICAL "\xef\x9f\xa6" // U+f7e6 +#define ICON_FA_BOOK_OPEN "\xef\x94\x98" // U+f518 +#define ICON_FA_BOOK_OPEN_READER "\xef\x97\x9a" // U+f5da +#define ICON_FA_BOOK_QURAN "\xef\x9a\x87" // U+f687 +#define ICON_FA_BOOK_SKULL "\xef\x9a\xb7" // U+f6b7 +#define ICON_FA_BOOK_TANAKH "\xef\xa0\xa7" // U+f827 +#define ICON_FA_BOOKMARK "\xef\x80\xae" // U+f02e +#define ICON_FA_BORDER_ALL "\xef\xa1\x8c" // U+f84c +#define ICON_FA_BORDER_NONE "\xef\xa1\x90" // U+f850 +#define ICON_FA_BORDER_TOP_LEFT "\xef\xa1\x93" // U+f853 +#define ICON_FA_BORE_HOLE "\xee\x93\x83" // U+e4c3 +#define ICON_FA_BOTTLE_DROPLET "\xee\x93\x84" // U+e4c4 +#define ICON_FA_BOTTLE_WATER "\xee\x93\x85" // U+e4c5 +#define ICON_FA_BOWL_FOOD "\xee\x93\x86" // U+e4c6 +#define ICON_FA_BOWL_RICE "\xee\x8b\xab" // U+e2eb +#define ICON_FA_BOWLING_BALL "\xef\x90\xb6" // U+f436 +#define ICON_FA_BOX "\xef\x91\xa6" // U+f466 +#define ICON_FA_BOX_ARCHIVE "\xef\x86\x87" // U+f187 +#define ICON_FA_BOX_OPEN "\xef\x92\x9e" // U+f49e +#define ICON_FA_BOX_TISSUE "\xee\x81\x9b" // U+e05b +#define ICON_FA_BOXES_PACKING "\xee\x93\x87" // U+e4c7 +#define ICON_FA_BOXES_STACKED "\xef\x91\xa8" // U+f468 +#define ICON_FA_BRAILLE "\xef\x8a\xa1" // U+f2a1 +#define ICON_FA_BRAIN "\xef\x97\x9c" // U+f5dc +#define ICON_FA_BRAZILIAN_REAL_SIGN "\xee\x91\xac" // U+e46c +#define ICON_FA_BREAD_SLICE "\xef\x9f\xac" // U+f7ec +#define ICON_FA_BRIDGE "\xee\x93\x88" // U+e4c8 +#define ICON_FA_BRIDGE_CIRCLE_CHECK "\xee\x93\x89" // U+e4c9 +#define ICON_FA_BRIDGE_CIRCLE_EXCLAMATION "\xee\x93\x8a" // U+e4ca +#define ICON_FA_BRIDGE_CIRCLE_XMARK "\xee\x93\x8b" // U+e4cb +#define ICON_FA_BRIDGE_LOCK "\xee\x93\x8c" // U+e4cc +#define ICON_FA_BRIDGE_WATER "\xee\x93\x8e" // U+e4ce +#define ICON_FA_BRIEFCASE "\xef\x82\xb1" // U+f0b1 +#define ICON_FA_BRIEFCASE_MEDICAL "\xef\x91\xa9" // U+f469 +#define ICON_FA_BROOM "\xef\x94\x9a" // U+f51a +#define ICON_FA_BROOM_BALL "\xef\x91\x98" // U+f458 +#define ICON_FA_BRUSH "\xef\x95\x9d" // U+f55d +#define ICON_FA_BUCKET "\xee\x93\x8f" // U+e4cf +#define ICON_FA_BUG "\xef\x86\x88" // U+f188 +#define ICON_FA_BUG_SLASH "\xee\x92\x90" // U+e490 +#define ICON_FA_BUGS "\xee\x93\x90" // U+e4d0 +#define ICON_FA_BUILDING "\xef\x86\xad" // U+f1ad +#define ICON_FA_BUILDING_CIRCLE_ARROW_RIGHT "\xee\x93\x91" // U+e4d1 +#define ICON_FA_BUILDING_CIRCLE_CHECK "\xee\x93\x92" // U+e4d2 +#define ICON_FA_BUILDING_CIRCLE_EXCLAMATION "\xee\x93\x93" // U+e4d3 +#define ICON_FA_BUILDING_CIRCLE_XMARK "\xee\x93\x94" // U+e4d4 +#define ICON_FA_BUILDING_COLUMNS "\xef\x86\x9c" // U+f19c +#define ICON_FA_BUILDING_FLAG "\xee\x93\x95" // U+e4d5 +#define ICON_FA_BUILDING_LOCK "\xee\x93\x96" // U+e4d6 +#define ICON_FA_BUILDING_NGO "\xee\x93\x97" // U+e4d7 +#define ICON_FA_BUILDING_SHIELD "\xee\x93\x98" // U+e4d8 +#define ICON_FA_BUILDING_UN "\xee\x93\x99" // U+e4d9 +#define ICON_FA_BUILDING_USER "\xee\x93\x9a" // U+e4da +#define ICON_FA_BUILDING_WHEAT "\xee\x93\x9b" // U+e4db +#define ICON_FA_BULLHORN "\xef\x82\xa1" // U+f0a1 +#define ICON_FA_BULLSEYE "\xef\x85\x80" // U+f140 +#define ICON_FA_BURGER "\xef\xa0\x85" // U+f805 +#define ICON_FA_BURST "\xee\x93\x9c" // U+e4dc +#define ICON_FA_BUS "\xef\x88\x87" // U+f207 +#define ICON_FA_BUS_SIMPLE "\xef\x95\x9e" // U+f55e +#define ICON_FA_BUSINESS_TIME "\xef\x99\x8a" // U+f64a +#define ICON_FA_C "C" // U+0043 +#define ICON_FA_CABLE_CAR "\xef\x9f\x9a" // U+f7da +#define ICON_FA_CAKE_CANDLES "\xef\x87\xbd" // U+f1fd +#define ICON_FA_CALCULATOR "\xef\x87\xac" // U+f1ec +#define ICON_FA_CALENDAR "\xef\x84\xb3" // U+f133 +#define ICON_FA_CALENDAR_CHECK "\xef\x89\xb4" // U+f274 +#define ICON_FA_CALENDAR_DAY "\xef\x9e\x83" // U+f783 +#define ICON_FA_CALENDAR_DAYS "\xef\x81\xb3" // U+f073 +#define ICON_FA_CALENDAR_MINUS "\xef\x89\xb2" // U+f272 +#define ICON_FA_CALENDAR_PLUS "\xef\x89\xb1" // U+f271 +#define ICON_FA_CALENDAR_WEEK "\xef\x9e\x84" // U+f784 +#define ICON_FA_CALENDAR_XMARK "\xef\x89\xb3" // U+f273 +#define ICON_FA_CAMERA "\xef\x80\xb0" // U+f030 +#define ICON_FA_CAMERA_RETRO "\xef\x82\x83" // U+f083 +#define ICON_FA_CAMERA_ROTATE "\xee\x83\x98" // U+e0d8 +#define ICON_FA_CAMPGROUND "\xef\x9a\xbb" // U+f6bb +#define ICON_FA_CANDY_CANE "\xef\x9e\x86" // U+f786 +#define ICON_FA_CANNABIS "\xef\x95\x9f" // U+f55f +#define ICON_FA_CAPSULES "\xef\x91\xab" // U+f46b +#define ICON_FA_CAR "\xef\x86\xb9" // U+f1b9 +#define ICON_FA_CAR_BATTERY "\xef\x97\x9f" // U+f5df +#define ICON_FA_CAR_BURST "\xef\x97\xa1" // U+f5e1 +#define ICON_FA_CAR_ON "\xee\x93\x9d" // U+e4dd +#define ICON_FA_CAR_REAR "\xef\x97\x9e" // U+f5de +#define ICON_FA_CAR_SIDE "\xef\x97\xa4" // U+f5e4 +#define ICON_FA_CAR_TUNNEL "\xee\x93\x9e" // U+e4de +#define ICON_FA_CARAVAN "\xef\xa3\xbf" // U+f8ff +#define ICON_FA_CARET_DOWN "\xef\x83\x97" // U+f0d7 +#define ICON_FA_CARET_LEFT "\xef\x83\x99" // U+f0d9 +#define ICON_FA_CARET_RIGHT "\xef\x83\x9a" // U+f0da +#define ICON_FA_CARET_UP "\xef\x83\x98" // U+f0d8 +#define ICON_FA_CARROT "\xef\x9e\x87" // U+f787 +#define ICON_FA_CART_ARROW_DOWN "\xef\x88\x98" // U+f218 +#define ICON_FA_CART_FLATBED "\xef\x91\xb4" // U+f474 +#define ICON_FA_CART_FLATBED_SUITCASE "\xef\x96\x9d" // U+f59d +#define ICON_FA_CART_PLUS "\xef\x88\x97" // U+f217 +#define ICON_FA_CART_SHOPPING "\xef\x81\xba" // U+f07a +#define ICON_FA_CASH_REGISTER "\xef\x9e\x88" // U+f788 +#define ICON_FA_CAT "\xef\x9a\xbe" // U+f6be +#define ICON_FA_CEDI_SIGN "\xee\x83\x9f" // U+e0df +#define ICON_FA_CENT_SIGN "\xee\x8f\xb5" // U+e3f5 +#define ICON_FA_CERTIFICATE "\xef\x82\xa3" // U+f0a3 +#define ICON_FA_CHAIR "\xef\x9b\x80" // U+f6c0 +#define ICON_FA_CHALKBOARD "\xef\x94\x9b" // U+f51b +#define ICON_FA_CHALKBOARD_USER "\xef\x94\x9c" // U+f51c +#define ICON_FA_CHAMPAGNE_GLASSES "\xef\x9e\x9f" // U+f79f +#define ICON_FA_CHARGING_STATION "\xef\x97\xa7" // U+f5e7 +#define ICON_FA_CHART_AREA "\xef\x87\xbe" // U+f1fe +#define ICON_FA_CHART_BAR "\xef\x82\x80" // U+f080 +#define ICON_FA_CHART_COLUMN "\xee\x83\xa3" // U+e0e3 +#define ICON_FA_CHART_GANTT "\xee\x83\xa4" // U+e0e4 +#define ICON_FA_CHART_LINE "\xef\x88\x81" // U+f201 +#define ICON_FA_CHART_PIE "\xef\x88\x80" // U+f200 +#define ICON_FA_CHART_SIMPLE "\xee\x91\xb3" // U+e473 +#define ICON_FA_CHECK "\xef\x80\x8c" // U+f00c +#define ICON_FA_CHECK_DOUBLE "\xef\x95\xa0" // U+f560 +#define ICON_FA_CHECK_TO_SLOT "\xef\x9d\xb2" // U+f772 +#define ICON_FA_CHEESE "\xef\x9f\xaf" // U+f7ef +#define ICON_FA_CHESS "\xef\x90\xb9" // U+f439 +#define ICON_FA_CHESS_BISHOP "\xef\x90\xba" // U+f43a +#define ICON_FA_CHESS_BOARD "\xef\x90\xbc" // U+f43c +#define ICON_FA_CHESS_KING "\xef\x90\xbf" // U+f43f +#define ICON_FA_CHESS_KNIGHT "\xef\x91\x81" // U+f441 +#define ICON_FA_CHESS_PAWN "\xef\x91\x83" // U+f443 +#define ICON_FA_CHESS_QUEEN "\xef\x91\x85" // U+f445 +#define ICON_FA_CHESS_ROOK "\xef\x91\x87" // U+f447 +#define ICON_FA_CHEVRON_DOWN "\xef\x81\xb8" // U+f078 +#define ICON_FA_CHEVRON_LEFT "\xef\x81\x93" // U+f053 +#define ICON_FA_CHEVRON_RIGHT "\xef\x81\x94" // U+f054 +#define ICON_FA_CHEVRON_UP "\xef\x81\xb7" // U+f077 +#define ICON_FA_CHILD "\xef\x86\xae" // U+f1ae +#define ICON_FA_CHILD_DRESS "\xee\x96\x9c" // U+e59c +#define ICON_FA_CHILD_REACHING "\xee\x96\x9d" // U+e59d +#define ICON_FA_CHILD_RIFLE "\xee\x93\xa0" // U+e4e0 +#define ICON_FA_CHILDREN "\xee\x93\xa1" // U+e4e1 +#define ICON_FA_CHURCH "\xef\x94\x9d" // U+f51d +#define ICON_FA_CIRCLE "\xef\x84\x91" // U+f111 +#define ICON_FA_CIRCLE_ARROW_DOWN "\xef\x82\xab" // U+f0ab +#define ICON_FA_CIRCLE_ARROW_LEFT "\xef\x82\xa8" // U+f0a8 +#define ICON_FA_CIRCLE_ARROW_RIGHT "\xef\x82\xa9" // U+f0a9 +#define ICON_FA_CIRCLE_ARROW_UP "\xef\x82\xaa" // U+f0aa +#define ICON_FA_CIRCLE_CHECK "\xef\x81\x98" // U+f058 +#define ICON_FA_CIRCLE_CHEVRON_DOWN "\xef\x84\xba" // U+f13a +#define ICON_FA_CIRCLE_CHEVRON_LEFT "\xef\x84\xb7" // U+f137 +#define ICON_FA_CIRCLE_CHEVRON_RIGHT "\xef\x84\xb8" // U+f138 +#define ICON_FA_CIRCLE_CHEVRON_UP "\xef\x84\xb9" // U+f139 +#define ICON_FA_CIRCLE_DOLLAR_TO_SLOT "\xef\x92\xb9" // U+f4b9 +#define ICON_FA_CIRCLE_DOT "\xef\x86\x92" // U+f192 +#define ICON_FA_CIRCLE_DOWN "\xef\x8d\x98" // U+f358 +#define ICON_FA_CIRCLE_EXCLAMATION "\xef\x81\xaa" // U+f06a +#define ICON_FA_CIRCLE_H "\xef\x91\xbe" // U+f47e +#define ICON_FA_CIRCLE_HALF_STROKE "\xef\x81\x82" // U+f042 +#define ICON_FA_CIRCLE_INFO "\xef\x81\x9a" // U+f05a +#define ICON_FA_CIRCLE_LEFT "\xef\x8d\x99" // U+f359 +#define ICON_FA_CIRCLE_MINUS "\xef\x81\x96" // U+f056 +#define ICON_FA_CIRCLE_NODES "\xee\x93\xa2" // U+e4e2 +#define ICON_FA_CIRCLE_NOTCH "\xef\x87\x8e" // U+f1ce +#define ICON_FA_CIRCLE_PAUSE "\xef\x8a\x8b" // U+f28b +#define ICON_FA_CIRCLE_PLAY "\xef\x85\x84" // U+f144 +#define ICON_FA_CIRCLE_PLUS "\xef\x81\x95" // U+f055 +#define ICON_FA_CIRCLE_QUESTION "\xef\x81\x99" // U+f059 +#define ICON_FA_CIRCLE_RADIATION "\xef\x9e\xba" // U+f7ba +#define ICON_FA_CIRCLE_RIGHT "\xef\x8d\x9a" // U+f35a +#define ICON_FA_CIRCLE_STOP "\xef\x8a\x8d" // U+f28d +#define ICON_FA_CIRCLE_UP "\xef\x8d\x9b" // U+f35b +#define ICON_FA_CIRCLE_USER "\xef\x8a\xbd" // U+f2bd +#define ICON_FA_CIRCLE_XMARK "\xef\x81\x97" // U+f057 +#define ICON_FA_CITY "\xef\x99\x8f" // U+f64f +#define ICON_FA_CLAPPERBOARD "\xee\x84\xb1" // U+e131 +#define ICON_FA_CLIPBOARD "\xef\x8c\xa8" // U+f328 +#define ICON_FA_CLIPBOARD_CHECK "\xef\x91\xac" // U+f46c +#define ICON_FA_CLIPBOARD_LIST "\xef\x91\xad" // U+f46d +#define ICON_FA_CLIPBOARD_QUESTION "\xee\x93\xa3" // U+e4e3 +#define ICON_FA_CLIPBOARD_USER "\xef\x9f\xb3" // U+f7f3 +#define ICON_FA_CLOCK "\xef\x80\x97" // U+f017 +#define ICON_FA_CLOCK_ROTATE_LEFT "\xef\x87\x9a" // U+f1da +#define ICON_FA_CLONE "\xef\x89\x8d" // U+f24d +#define ICON_FA_CLOSED_CAPTIONING "\xef\x88\x8a" // U+f20a +#define ICON_FA_CLOUD "\xef\x83\x82" // U+f0c2 +#define ICON_FA_CLOUD_ARROW_DOWN "\xef\x83\xad" // U+f0ed +#define ICON_FA_CLOUD_ARROW_UP "\xef\x83\xae" // U+f0ee +#define ICON_FA_CLOUD_BOLT "\xef\x9d\xac" // U+f76c +#define ICON_FA_CLOUD_MEATBALL "\xef\x9c\xbb" // U+f73b +#define ICON_FA_CLOUD_MOON "\xef\x9b\x83" // U+f6c3 +#define ICON_FA_CLOUD_MOON_RAIN "\xef\x9c\xbc" // U+f73c +#define ICON_FA_CLOUD_RAIN "\xef\x9c\xbd" // U+f73d +#define ICON_FA_CLOUD_SHOWERS_HEAVY "\xef\x9d\x80" // U+f740 +#define ICON_FA_CLOUD_SHOWERS_WATER "\xee\x93\xa4" // U+e4e4 +#define ICON_FA_CLOUD_SUN "\xef\x9b\x84" // U+f6c4 +#define ICON_FA_CLOUD_SUN_RAIN "\xef\x9d\x83" // U+f743 +#define ICON_FA_CLOVER "\xee\x84\xb9" // U+e139 +#define ICON_FA_CODE "\xef\x84\xa1" // U+f121 +#define ICON_FA_CODE_BRANCH "\xef\x84\xa6" // U+f126 +#define ICON_FA_CODE_COMMIT "\xef\x8e\x86" // U+f386 +#define ICON_FA_CODE_COMPARE "\xee\x84\xba" // U+e13a +#define ICON_FA_CODE_FORK "\xee\x84\xbb" // U+e13b +#define ICON_FA_CODE_MERGE "\xef\x8e\x87" // U+f387 +#define ICON_FA_CODE_PULL_REQUEST "\xee\x84\xbc" // U+e13c +#define ICON_FA_COINS "\xef\x94\x9e" // U+f51e +#define ICON_FA_COLON_SIGN "\xee\x85\x80" // U+e140 +#define ICON_FA_COMMENT "\xef\x81\xb5" // U+f075 +#define ICON_FA_COMMENT_DOLLAR "\xef\x99\x91" // U+f651 +#define ICON_FA_COMMENT_DOTS "\xef\x92\xad" // U+f4ad +#define ICON_FA_COMMENT_MEDICAL "\xef\x9f\xb5" // U+f7f5 +#define ICON_FA_COMMENT_SLASH "\xef\x92\xb3" // U+f4b3 +#define ICON_FA_COMMENT_SMS "\xef\x9f\x8d" // U+f7cd +#define ICON_FA_COMMENTS "\xef\x82\x86" // U+f086 +#define ICON_FA_COMMENTS_DOLLAR "\xef\x99\x93" // U+f653 +#define ICON_FA_COMPACT_DISC "\xef\x94\x9f" // U+f51f +#define ICON_FA_COMPASS "\xef\x85\x8e" // U+f14e +#define ICON_FA_COMPASS_DRAFTING "\xef\x95\xa8" // U+f568 +#define ICON_FA_COMPRESS "\xef\x81\xa6" // U+f066 +#define ICON_FA_COMPUTER "\xee\x93\xa5" // U+e4e5 +#define ICON_FA_COMPUTER_MOUSE "\xef\xa3\x8c" // U+f8cc +#define ICON_FA_COOKIE "\xef\x95\xa3" // U+f563 +#define ICON_FA_COOKIE_BITE "\xef\x95\xa4" // U+f564 +#define ICON_FA_COPY "\xef\x83\x85" // U+f0c5 +#define ICON_FA_COPYRIGHT "\xef\x87\xb9" // U+f1f9 +#define ICON_FA_COUCH "\xef\x92\xb8" // U+f4b8 +#define ICON_FA_COW "\xef\x9b\x88" // U+f6c8 +#define ICON_FA_CREDIT_CARD "\xef\x82\x9d" // U+f09d +#define ICON_FA_CROP "\xef\x84\xa5" // U+f125 +#define ICON_FA_CROP_SIMPLE "\xef\x95\xa5" // U+f565 +#define ICON_FA_CROSS "\xef\x99\x94" // U+f654 +#define ICON_FA_CROSSHAIRS "\xef\x81\x9b" // U+f05b +#define ICON_FA_CROW "\xef\x94\xa0" // U+f520 +#define ICON_FA_CROWN "\xef\x94\xa1" // U+f521 +#define ICON_FA_CRUTCH "\xef\x9f\xb7" // U+f7f7 +#define ICON_FA_CRUZEIRO_SIGN "\xee\x85\x92" // U+e152 +#define ICON_FA_CUBE "\xef\x86\xb2" // U+f1b2 +#define ICON_FA_CUBES "\xef\x86\xb3" // U+f1b3 +#define ICON_FA_CUBES_STACKED "\xee\x93\xa6" // U+e4e6 +#define ICON_FA_D "D" // U+0044 +#define ICON_FA_DATABASE "\xef\x87\x80" // U+f1c0 +#define ICON_FA_DELETE_LEFT "\xef\x95\x9a" // U+f55a +#define ICON_FA_DEMOCRAT "\xef\x9d\x87" // U+f747 +#define ICON_FA_DESKTOP "\xef\x8e\x90" // U+f390 +#define ICON_FA_DHARMACHAKRA "\xef\x99\x95" // U+f655 +#define ICON_FA_DIAGRAM_NEXT "\xee\x91\xb6" // U+e476 +#define ICON_FA_DIAGRAM_PREDECESSOR "\xee\x91\xb7" // U+e477 +#define ICON_FA_DIAGRAM_PROJECT "\xef\x95\x82" // U+f542 +#define ICON_FA_DIAGRAM_SUCCESSOR "\xee\x91\xba" // U+e47a +#define ICON_FA_DIAMOND "\xef\x88\x99" // U+f219 +#define ICON_FA_DIAMOND_TURN_RIGHT "\xef\x97\xab" // U+f5eb +#define ICON_FA_DICE "\xef\x94\xa2" // U+f522 +#define ICON_FA_DICE_D20 "\xef\x9b\x8f" // U+f6cf +#define ICON_FA_DICE_D6 "\xef\x9b\x91" // U+f6d1 +#define ICON_FA_DICE_FIVE "\xef\x94\xa3" // U+f523 +#define ICON_FA_DICE_FOUR "\xef\x94\xa4" // U+f524 +#define ICON_FA_DICE_ONE "\xef\x94\xa5" // U+f525 +#define ICON_FA_DICE_SIX "\xef\x94\xa6" // U+f526 +#define ICON_FA_DICE_THREE "\xef\x94\xa7" // U+f527 +#define ICON_FA_DICE_TWO "\xef\x94\xa8" // U+f528 +#define ICON_FA_DISEASE "\xef\x9f\xba" // U+f7fa +#define ICON_FA_DISPLAY "\xee\x85\xa3" // U+e163 +#define ICON_FA_DIVIDE "\xef\x94\xa9" // U+f529 +#define ICON_FA_DNA "\xef\x91\xb1" // U+f471 +#define ICON_FA_DOG "\xef\x9b\x93" // U+f6d3 +#define ICON_FA_DOLLAR_SIGN "$" // U+0024 +#define ICON_FA_DOLLY "\xef\x91\xb2" // U+f472 +#define ICON_FA_DONG_SIGN "\xee\x85\xa9" // U+e169 +#define ICON_FA_DOOR_CLOSED "\xef\x94\xaa" // U+f52a +#define ICON_FA_DOOR_OPEN "\xef\x94\xab" // U+f52b +#define ICON_FA_DOVE "\xef\x92\xba" // U+f4ba +#define ICON_FA_DOWN_LEFT_AND_UP_RIGHT_TO_CENTER "\xef\x90\xa2" // U+f422 +#define ICON_FA_DOWN_LONG "\xef\x8c\x89" // U+f309 +#define ICON_FA_DOWNLOAD "\xef\x80\x99" // U+f019 +#define ICON_FA_DRAGON "\xef\x9b\x95" // U+f6d5 +#define ICON_FA_DRAW_POLYGON "\xef\x97\xae" // U+f5ee +#define ICON_FA_DROPLET "\xef\x81\x83" // U+f043 +#define ICON_FA_DROPLET_SLASH "\xef\x97\x87" // U+f5c7 +#define ICON_FA_DRUM "\xef\x95\xa9" // U+f569 +#define ICON_FA_DRUM_STEELPAN "\xef\x95\xaa" // U+f56a +#define ICON_FA_DRUMSTICK_BITE "\xef\x9b\x97" // U+f6d7 +#define ICON_FA_DUMBBELL "\xef\x91\x8b" // U+f44b +#define ICON_FA_DUMPSTER "\xef\x9e\x93" // U+f793 +#define ICON_FA_DUMPSTER_FIRE "\xef\x9e\x94" // U+f794 +#define ICON_FA_DUNGEON "\xef\x9b\x99" // U+f6d9 +#define ICON_FA_E "E" // U+0045 +#define ICON_FA_EAR_DEAF "\xef\x8a\xa4" // U+f2a4 +#define ICON_FA_EAR_LISTEN "\xef\x8a\xa2" // U+f2a2 +#define ICON_FA_EARTH_AFRICA "\xef\x95\xbc" // U+f57c +#define ICON_FA_EARTH_AMERICAS "\xef\x95\xbd" // U+f57d +#define ICON_FA_EARTH_ASIA "\xef\x95\xbe" // U+f57e +#define ICON_FA_EARTH_EUROPE "\xef\x9e\xa2" // U+f7a2 +#define ICON_FA_EARTH_OCEANIA "\xee\x91\xbb" // U+e47b +#define ICON_FA_EGG "\xef\x9f\xbb" // U+f7fb +#define ICON_FA_EJECT "\xef\x81\x92" // U+f052 +#define ICON_FA_ELEVATOR "\xee\x85\xad" // U+e16d +#define ICON_FA_ELLIPSIS "\xef\x85\x81" // U+f141 +#define ICON_FA_ELLIPSIS_VERTICAL "\xef\x85\x82" // U+f142 +#define ICON_FA_ENVELOPE "\xef\x83\xa0" // U+f0e0 +#define ICON_FA_ENVELOPE_CIRCLE_CHECK "\xee\x93\xa8" // U+e4e8 +#define ICON_FA_ENVELOPE_OPEN "\xef\x8a\xb6" // U+f2b6 +#define ICON_FA_ENVELOPE_OPEN_TEXT "\xef\x99\x98" // U+f658 +#define ICON_FA_ENVELOPES_BULK "\xef\x99\xb4" // U+f674 +#define ICON_FA_EQUALS "=" // U+003d +#define ICON_FA_ERASER "\xef\x84\xad" // U+f12d +#define ICON_FA_ETHERNET "\xef\x9e\x96" // U+f796 +#define ICON_FA_EURO_SIGN "\xef\x85\x93" // U+f153 +#define ICON_FA_EXCLAMATION "!" // U+0021 +#define ICON_FA_EXPAND "\xef\x81\xa5" // U+f065 +#define ICON_FA_EXPLOSION "\xee\x93\xa9" // U+e4e9 +#define ICON_FA_EYE "\xef\x81\xae" // U+f06e +#define ICON_FA_EYE_DROPPER "\xef\x87\xbb" // U+f1fb +#define ICON_FA_EYE_LOW_VISION "\xef\x8a\xa8" // U+f2a8 +#define ICON_FA_EYE_SLASH "\xef\x81\xb0" // U+f070 +#define ICON_FA_F "F" // U+0046 +#define ICON_FA_FACE_ANGRY "\xef\x95\x96" // U+f556 +#define ICON_FA_FACE_DIZZY "\xef\x95\xa7" // U+f567 +#define ICON_FA_FACE_FLUSHED "\xef\x95\xb9" // U+f579 +#define ICON_FA_FACE_FROWN "\xef\x84\x99" // U+f119 +#define ICON_FA_FACE_FROWN_OPEN "\xef\x95\xba" // U+f57a +#define ICON_FA_FACE_GRIMACE "\xef\x95\xbf" // U+f57f +#define ICON_FA_FACE_GRIN "\xef\x96\x80" // U+f580 +#define ICON_FA_FACE_GRIN_BEAM "\xef\x96\x82" // U+f582 +#define ICON_FA_FACE_GRIN_BEAM_SWEAT "\xef\x96\x83" // U+f583 +#define ICON_FA_FACE_GRIN_HEARTS "\xef\x96\x84" // U+f584 +#define ICON_FA_FACE_GRIN_SQUINT "\xef\x96\x85" // U+f585 +#define ICON_FA_FACE_GRIN_SQUINT_TEARS "\xef\x96\x86" // U+f586 +#define ICON_FA_FACE_GRIN_STARS "\xef\x96\x87" // U+f587 +#define ICON_FA_FACE_GRIN_TEARS "\xef\x96\x88" // U+f588 +#define ICON_FA_FACE_GRIN_TONGUE "\xef\x96\x89" // U+f589 +#define ICON_FA_FACE_GRIN_TONGUE_SQUINT "\xef\x96\x8a" // U+f58a +#define ICON_FA_FACE_GRIN_TONGUE_WINK "\xef\x96\x8b" // U+f58b +#define ICON_FA_FACE_GRIN_WIDE "\xef\x96\x81" // U+f581 +#define ICON_FA_FACE_GRIN_WINK "\xef\x96\x8c" // U+f58c +#define ICON_FA_FACE_KISS "\xef\x96\x96" // U+f596 +#define ICON_FA_FACE_KISS_BEAM "\xef\x96\x97" // U+f597 +#define ICON_FA_FACE_KISS_WINK_HEART "\xef\x96\x98" // U+f598 +#define ICON_FA_FACE_LAUGH "\xef\x96\x99" // U+f599 +#define ICON_FA_FACE_LAUGH_BEAM "\xef\x96\x9a" // U+f59a +#define ICON_FA_FACE_LAUGH_SQUINT "\xef\x96\x9b" // U+f59b +#define ICON_FA_FACE_LAUGH_WINK "\xef\x96\x9c" // U+f59c +#define ICON_FA_FACE_MEH "\xef\x84\x9a" // U+f11a +#define ICON_FA_FACE_MEH_BLANK "\xef\x96\xa4" // U+f5a4 +#define ICON_FA_FACE_ROLLING_EYES "\xef\x96\xa5" // U+f5a5 +#define ICON_FA_FACE_SAD_CRY "\xef\x96\xb3" // U+f5b3 +#define ICON_FA_FACE_SAD_TEAR "\xef\x96\xb4" // U+f5b4 +#define ICON_FA_FACE_SMILE "\xef\x84\x98" // U+f118 +#define ICON_FA_FACE_SMILE_BEAM "\xef\x96\xb8" // U+f5b8 +#define ICON_FA_FACE_SMILE_WINK "\xef\x93\x9a" // U+f4da +#define ICON_FA_FACE_SURPRISE "\xef\x97\x82" // U+f5c2 +#define ICON_FA_FACE_TIRED "\xef\x97\x88" // U+f5c8 +#define ICON_FA_FAN "\xef\xa1\xa3" // U+f863 +#define ICON_FA_FAUCET "\xee\x80\x85" // U+e005 +#define ICON_FA_FAUCET_DRIP "\xee\x80\x86" // U+e006 +#define ICON_FA_FAX "\xef\x86\xac" // U+f1ac +#define ICON_FA_FEATHER "\xef\x94\xad" // U+f52d +#define ICON_FA_FEATHER_POINTED "\xef\x95\xab" // U+f56b +#define ICON_FA_FERRY "\xee\x93\xaa" // U+e4ea +#define ICON_FA_FILE "\xef\x85\x9b" // U+f15b +#define ICON_FA_FILE_ARROW_DOWN "\xef\x95\xad" // U+f56d +#define ICON_FA_FILE_ARROW_UP "\xef\x95\xb4" // U+f574 +#define ICON_FA_FILE_AUDIO "\xef\x87\x87" // U+f1c7 +#define ICON_FA_FILE_CIRCLE_CHECK "\xee\x96\xa0" // U+e5a0 +#define ICON_FA_FILE_CIRCLE_EXCLAMATION "\xee\x93\xab" // U+e4eb +#define ICON_FA_FILE_CIRCLE_MINUS "\xee\x93\xad" // U+e4ed +#define ICON_FA_FILE_CIRCLE_PLUS "\xee\x92\x94" // U+e494 +#define ICON_FA_FILE_CIRCLE_QUESTION "\xee\x93\xaf" // U+e4ef +#define ICON_FA_FILE_CIRCLE_XMARK "\xee\x96\xa1" // U+e5a1 +#define ICON_FA_FILE_CODE "\xef\x87\x89" // U+f1c9 +#define ICON_FA_FILE_CONTRACT "\xef\x95\xac" // U+f56c +#define ICON_FA_FILE_CSV "\xef\x9b\x9d" // U+f6dd +#define ICON_FA_FILE_EXCEL "\xef\x87\x83" // U+f1c3 +#define ICON_FA_FILE_EXPORT "\xef\x95\xae" // U+f56e +#define ICON_FA_FILE_IMAGE "\xef\x87\x85" // U+f1c5 +#define ICON_FA_FILE_IMPORT "\xef\x95\xaf" // U+f56f +#define ICON_FA_FILE_INVOICE "\xef\x95\xb0" // U+f570 +#define ICON_FA_FILE_INVOICE_DOLLAR "\xef\x95\xb1" // U+f571 +#define ICON_FA_FILE_LINES "\xef\x85\x9c" // U+f15c +#define ICON_FA_FILE_MEDICAL "\xef\x91\xb7" // U+f477 +#define ICON_FA_FILE_PDF "\xef\x87\x81" // U+f1c1 +#define ICON_FA_FILE_PEN "\xef\x8c\x9c" // U+f31c +#define ICON_FA_FILE_POWERPOINT "\xef\x87\x84" // U+f1c4 +#define ICON_FA_FILE_PRESCRIPTION "\xef\x95\xb2" // U+f572 +#define ICON_FA_FILE_SHIELD "\xee\x93\xb0" // U+e4f0 +#define ICON_FA_FILE_SIGNATURE "\xef\x95\xb3" // U+f573 +#define ICON_FA_FILE_VIDEO "\xef\x87\x88" // U+f1c8 +#define ICON_FA_FILE_WAVEFORM "\xef\x91\xb8" // U+f478 +#define ICON_FA_FILE_WORD "\xef\x87\x82" // U+f1c2 +#define ICON_FA_FILE_ZIPPER "\xef\x87\x86" // U+f1c6 +#define ICON_FA_FILL "\xef\x95\xb5" // U+f575 +#define ICON_FA_FILL_DRIP "\xef\x95\xb6" // U+f576 +#define ICON_FA_FILM "\xef\x80\x88" // U+f008 +#define ICON_FA_FILTER "\xef\x82\xb0" // U+f0b0 +#define ICON_FA_FILTER_CIRCLE_DOLLAR "\xef\x99\xa2" // U+f662 +#define ICON_FA_FILTER_CIRCLE_XMARK "\xee\x85\xbb" // U+e17b +#define ICON_FA_FINGERPRINT "\xef\x95\xb7" // U+f577 +#define ICON_FA_FIRE "\xef\x81\xad" // U+f06d +#define ICON_FA_FIRE_BURNER "\xee\x93\xb1" // U+e4f1 +#define ICON_FA_FIRE_EXTINGUISHER "\xef\x84\xb4" // U+f134 +#define ICON_FA_FIRE_FLAME_CURVED "\xef\x9f\xa4" // U+f7e4 +#define ICON_FA_FIRE_FLAME_SIMPLE "\xef\x91\xaa" // U+f46a +#define ICON_FA_FISH "\xef\x95\xb8" // U+f578 +#define ICON_FA_FISH_FINS "\xee\x93\xb2" // U+e4f2 +#define ICON_FA_FLAG "\xef\x80\xa4" // U+f024 +#define ICON_FA_FLAG_CHECKERED "\xef\x84\x9e" // U+f11e +#define ICON_FA_FLAG_USA "\xef\x9d\x8d" // U+f74d +#define ICON_FA_FLASK "\xef\x83\x83" // U+f0c3 +#define ICON_FA_FLASK_VIAL "\xee\x93\xb3" // U+e4f3 +#define ICON_FA_FLOPPY_DISK "\xef\x83\x87" // U+f0c7 +#define ICON_FA_FLORIN_SIGN "\xee\x86\x84" // U+e184 +#define ICON_FA_FOLDER "\xef\x81\xbb" // U+f07b +#define ICON_FA_FOLDER_CLOSED "\xee\x86\x85" // U+e185 +#define ICON_FA_FOLDER_MINUS "\xef\x99\x9d" // U+f65d +#define ICON_FA_FOLDER_OPEN "\xef\x81\xbc" // U+f07c +#define ICON_FA_FOLDER_PLUS "\xef\x99\x9e" // U+f65e +#define ICON_FA_FOLDER_TREE "\xef\xa0\x82" // U+f802 +#define ICON_FA_FONT "\xef\x80\xb1" // U+f031 +#define ICON_FA_FONT_AWESOME "\xef\x8a\xb4" // U+f2b4 +#define ICON_FA_FOOTBALL "\xef\x91\x8e" // U+f44e +#define ICON_FA_FORWARD "\xef\x81\x8e" // U+f04e +#define ICON_FA_FORWARD_FAST "\xef\x81\x90" // U+f050 +#define ICON_FA_FORWARD_STEP "\xef\x81\x91" // U+f051 +#define ICON_FA_FRANC_SIGN "\xee\x86\x8f" // U+e18f +#define ICON_FA_FROG "\xef\x94\xae" // U+f52e +#define ICON_FA_FUTBOL "\xef\x87\xa3" // U+f1e3 +#define ICON_FA_G "G" // U+0047 +#define ICON_FA_GAMEPAD "\xef\x84\x9b" // U+f11b +#define ICON_FA_GAS_PUMP "\xef\x94\xaf" // U+f52f +#define ICON_FA_GAUGE "\xef\x98\xa4" // U+f624 +#define ICON_FA_GAUGE_HIGH "\xef\x98\xa5" // U+f625 +#define ICON_FA_GAUGE_SIMPLE "\xef\x98\xa9" // U+f629 +#define ICON_FA_GAUGE_SIMPLE_HIGH "\xef\x98\xaa" // U+f62a +#define ICON_FA_GAVEL "\xef\x83\xa3" // U+f0e3 +#define ICON_FA_GEAR "\xef\x80\x93" // U+f013 +#define ICON_FA_GEARS "\xef\x82\x85" // U+f085 +#define ICON_FA_GEM "\xef\x8e\xa5" // U+f3a5 +#define ICON_FA_GENDERLESS "\xef\x88\xad" // U+f22d +#define ICON_FA_GHOST "\xef\x9b\xa2" // U+f6e2 +#define ICON_FA_GIFT "\xef\x81\xab" // U+f06b +#define ICON_FA_GIFTS "\xef\x9e\x9c" // U+f79c +#define ICON_FA_GLASS_WATER "\xee\x93\xb4" // U+e4f4 +#define ICON_FA_GLASS_WATER_DROPLET "\xee\x93\xb5" // U+e4f5 +#define ICON_FA_GLASSES "\xef\x94\xb0" // U+f530 +#define ICON_FA_GLOBE "\xef\x82\xac" // U+f0ac +#define ICON_FA_GOLF_BALL_TEE "\xef\x91\x90" // U+f450 +#define ICON_FA_GOPURAM "\xef\x99\xa4" // U+f664 +#define ICON_FA_GRADUATION_CAP "\xef\x86\x9d" // U+f19d +#define ICON_FA_GREATER_THAN ">" // U+003e +#define ICON_FA_GREATER_THAN_EQUAL "\xef\x94\xb2" // U+f532 +#define ICON_FA_GRIP "\xef\x96\x8d" // U+f58d +#define ICON_FA_GRIP_LINES "\xef\x9e\xa4" // U+f7a4 +#define ICON_FA_GRIP_LINES_VERTICAL "\xef\x9e\xa5" // U+f7a5 +#define ICON_FA_GRIP_VERTICAL "\xef\x96\x8e" // U+f58e +#define ICON_FA_GROUP_ARROWS_ROTATE "\xee\x93\xb6" // U+e4f6 +#define ICON_FA_GUARANI_SIGN "\xee\x86\x9a" // U+e19a +#define ICON_FA_GUITAR "\xef\x9e\xa6" // U+f7a6 +#define ICON_FA_GUN "\xee\x86\x9b" // U+e19b +#define ICON_FA_H "H" // U+0048 +#define ICON_FA_HAMMER "\xef\x9b\xa3" // U+f6e3 +#define ICON_FA_HAMSA "\xef\x99\xa5" // U+f665 +#define ICON_FA_HAND "\xef\x89\x96" // U+f256 +#define ICON_FA_HAND_BACK_FIST "\xef\x89\x95" // U+f255 +#define ICON_FA_HAND_DOTS "\xef\x91\xa1" // U+f461 +#define ICON_FA_HAND_FIST "\xef\x9b\x9e" // U+f6de +#define ICON_FA_HAND_HOLDING "\xef\x92\xbd" // U+f4bd +#define ICON_FA_HAND_HOLDING_DOLLAR "\xef\x93\x80" // U+f4c0 +#define ICON_FA_HAND_HOLDING_DROPLET "\xef\x93\x81" // U+f4c1 +#define ICON_FA_HAND_HOLDING_HAND "\xee\x93\xb7" // U+e4f7 +#define ICON_FA_HAND_HOLDING_HEART "\xef\x92\xbe" // U+f4be +#define ICON_FA_HAND_HOLDING_MEDICAL "\xee\x81\x9c" // U+e05c +#define ICON_FA_HAND_LIZARD "\xef\x89\x98" // U+f258 +#define ICON_FA_HAND_MIDDLE_FINGER "\xef\xa0\x86" // U+f806 +#define ICON_FA_HAND_PEACE "\xef\x89\x9b" // U+f25b +#define ICON_FA_HAND_POINT_DOWN "\xef\x82\xa7" // U+f0a7 +#define ICON_FA_HAND_POINT_LEFT "\xef\x82\xa5" // U+f0a5 +#define ICON_FA_HAND_POINT_RIGHT "\xef\x82\xa4" // U+f0a4 +#define ICON_FA_HAND_POINT_UP "\xef\x82\xa6" // U+f0a6 +#define ICON_FA_HAND_POINTER "\xef\x89\x9a" // U+f25a +#define ICON_FA_HAND_SCISSORS "\xef\x89\x97" // U+f257 +#define ICON_FA_HAND_SPARKLES "\xee\x81\x9d" // U+e05d +#define ICON_FA_HAND_SPOCK "\xef\x89\x99" // U+f259 +#define ICON_FA_HANDCUFFS "\xee\x93\xb8" // U+e4f8 +#define ICON_FA_HANDS "\xef\x8a\xa7" // U+f2a7 +#define ICON_FA_HANDS_ASL_INTERPRETING "\xef\x8a\xa3" // U+f2a3 +#define ICON_FA_HANDS_BOUND "\xee\x93\xb9" // U+e4f9 +#define ICON_FA_HANDS_BUBBLES "\xee\x81\x9e" // U+e05e +#define ICON_FA_HANDS_CLAPPING "\xee\x86\xa8" // U+e1a8 +#define ICON_FA_HANDS_HOLDING "\xef\x93\x82" // U+f4c2 +#define ICON_FA_HANDS_HOLDING_CHILD "\xee\x93\xba" // U+e4fa +#define ICON_FA_HANDS_HOLDING_CIRCLE "\xee\x93\xbb" // U+e4fb +#define ICON_FA_HANDS_PRAYING "\xef\x9a\x84" // U+f684 +#define ICON_FA_HANDSHAKE "\xef\x8a\xb5" // U+f2b5 +#define ICON_FA_HANDSHAKE_ANGLE "\xef\x93\x84" // U+f4c4 +#define ICON_FA_HANDSHAKE_SIMPLE "\xef\x93\x86" // U+f4c6 +#define ICON_FA_HANDSHAKE_SIMPLE_SLASH "\xee\x81\x9f" // U+e05f +#define ICON_FA_HANDSHAKE_SLASH "\xee\x81\xa0" // U+e060 +#define ICON_FA_HANUKIAH "\xef\x9b\xa6" // U+f6e6 +#define ICON_FA_HARD_DRIVE "\xef\x82\xa0" // U+f0a0 +#define ICON_FA_HASHTAG "#" // U+0023 +#define ICON_FA_HAT_COWBOY "\xef\xa3\x80" // U+f8c0 +#define ICON_FA_HAT_COWBOY_SIDE "\xef\xa3\x81" // U+f8c1 +#define ICON_FA_HAT_WIZARD "\xef\x9b\xa8" // U+f6e8 +#define ICON_FA_HEAD_SIDE_COUGH "\xee\x81\xa1" // U+e061 +#define ICON_FA_HEAD_SIDE_COUGH_SLASH "\xee\x81\xa2" // U+e062 +#define ICON_FA_HEAD_SIDE_MASK "\xee\x81\xa3" // U+e063 +#define ICON_FA_HEAD_SIDE_VIRUS "\xee\x81\xa4" // U+e064 +#define ICON_FA_HEADING "\xef\x87\x9c" // U+f1dc +#define ICON_FA_HEADPHONES "\xef\x80\xa5" // U+f025 +#define ICON_FA_HEADPHONES_SIMPLE "\xef\x96\x8f" // U+f58f +#define ICON_FA_HEADSET "\xef\x96\x90" // U+f590 +#define ICON_FA_HEART "\xef\x80\x84" // U+f004 +#define ICON_FA_HEART_CIRCLE_BOLT "\xee\x93\xbc" // U+e4fc +#define ICON_FA_HEART_CIRCLE_CHECK "\xee\x93\xbd" // U+e4fd +#define ICON_FA_HEART_CIRCLE_EXCLAMATION "\xee\x93\xbe" // U+e4fe +#define ICON_FA_HEART_CIRCLE_MINUS "\xee\x93\xbf" // U+e4ff +#define ICON_FA_HEART_CIRCLE_PLUS "\xee\x94\x80" // U+e500 +#define ICON_FA_HEART_CIRCLE_XMARK "\xee\x94\x81" // U+e501 +#define ICON_FA_HEART_CRACK "\xef\x9e\xa9" // U+f7a9 +#define ICON_FA_HEART_PULSE "\xef\x88\x9e" // U+f21e +#define ICON_FA_HELICOPTER "\xef\x94\xb3" // U+f533 +#define ICON_FA_HELICOPTER_SYMBOL "\xee\x94\x82" // U+e502 +#define ICON_FA_HELMET_SAFETY "\xef\xa0\x87" // U+f807 +#define ICON_FA_HELMET_UN "\xee\x94\x83" // U+e503 +#define ICON_FA_HIGHLIGHTER "\xef\x96\x91" // U+f591 +#define ICON_FA_HILL_AVALANCHE "\xee\x94\x87" // U+e507 +#define ICON_FA_HILL_ROCKSLIDE "\xee\x94\x88" // U+e508 +#define ICON_FA_HIPPO "\xef\x9b\xad" // U+f6ed +#define ICON_FA_HOCKEY_PUCK "\xef\x91\x93" // U+f453 +#define ICON_FA_HOLLY_BERRY "\xef\x9e\xaa" // U+f7aa +#define ICON_FA_HORSE "\xef\x9b\xb0" // U+f6f0 +#define ICON_FA_HORSE_HEAD "\xef\x9e\xab" // U+f7ab +#define ICON_FA_HOSPITAL "\xef\x83\xb8" // U+f0f8 +#define ICON_FA_HOSPITAL_USER "\xef\xa0\x8d" // U+f80d +#define ICON_FA_HOT_TUB_PERSON "\xef\x96\x93" // U+f593 +#define ICON_FA_HOTDOG "\xef\xa0\x8f" // U+f80f +#define ICON_FA_HOTEL "\xef\x96\x94" // U+f594 +#define ICON_FA_HOURGLASS "\xef\x89\x94" // U+f254 +#define ICON_FA_HOURGLASS_END "\xef\x89\x93" // U+f253 +#define ICON_FA_HOURGLASS_HALF "\xef\x89\x92" // U+f252 +#define ICON_FA_HOURGLASS_START "\xef\x89\x91" // U+f251 +#define ICON_FA_HOUSE "\xef\x80\x95" // U+f015 +#define ICON_FA_HOUSE_CHIMNEY "\xee\x8e\xaf" // U+e3af +#define ICON_FA_HOUSE_CHIMNEY_CRACK "\xef\x9b\xb1" // U+f6f1 +#define ICON_FA_HOUSE_CHIMNEY_MEDICAL "\xef\x9f\xb2" // U+f7f2 +#define ICON_FA_HOUSE_CHIMNEY_USER "\xee\x81\xa5" // U+e065 +#define ICON_FA_HOUSE_CHIMNEY_WINDOW "\xee\x80\x8d" // U+e00d +#define ICON_FA_HOUSE_CIRCLE_CHECK "\xee\x94\x89" // U+e509 +#define ICON_FA_HOUSE_CIRCLE_EXCLAMATION "\xee\x94\x8a" // U+e50a +#define ICON_FA_HOUSE_CIRCLE_XMARK "\xee\x94\x8b" // U+e50b +#define ICON_FA_HOUSE_CRACK "\xee\x8e\xb1" // U+e3b1 +#define ICON_FA_HOUSE_FIRE "\xee\x94\x8c" // U+e50c +#define ICON_FA_HOUSE_FLAG "\xee\x94\x8d" // U+e50d +#define ICON_FA_HOUSE_FLOOD_WATER "\xee\x94\x8e" // U+e50e +#define ICON_FA_HOUSE_FLOOD_WATER_CIRCLE_ARROW_RIGHT "\xee\x94\x8f" // U+e50f +#define ICON_FA_HOUSE_LAPTOP "\xee\x81\xa6" // U+e066 +#define ICON_FA_HOUSE_LOCK "\xee\x94\x90" // U+e510 +#define ICON_FA_HOUSE_MEDICAL "\xee\x8e\xb2" // U+e3b2 +#define ICON_FA_HOUSE_MEDICAL_CIRCLE_CHECK "\xee\x94\x91" // U+e511 +#define ICON_FA_HOUSE_MEDICAL_CIRCLE_EXCLAMATION "\xee\x94\x92" // U+e512 +#define ICON_FA_HOUSE_MEDICAL_CIRCLE_XMARK "\xee\x94\x93" // U+e513 +#define ICON_FA_HOUSE_MEDICAL_FLAG "\xee\x94\x94" // U+e514 +#define ICON_FA_HOUSE_SIGNAL "\xee\x80\x92" // U+e012 +#define ICON_FA_HOUSE_TSUNAMI "\xee\x94\x95" // U+e515 +#define ICON_FA_HOUSE_USER "\xee\x86\xb0" // U+e1b0 +#define ICON_FA_HRYVNIA_SIGN "\xef\x9b\xb2" // U+f6f2 +#define ICON_FA_HURRICANE "\xef\x9d\x91" // U+f751 +#define ICON_FA_I "I" // U+0049 +#define ICON_FA_I_CURSOR "\xef\x89\x86" // U+f246 +#define ICON_FA_ICE_CREAM "\xef\xa0\x90" // U+f810 +#define ICON_FA_ICICLES "\xef\x9e\xad" // U+f7ad +#define ICON_FA_ICONS "\xef\xa1\xad" // U+f86d +#define ICON_FA_ID_BADGE "\xef\x8b\x81" // U+f2c1 +#define ICON_FA_ID_CARD "\xef\x8b\x82" // U+f2c2 +#define ICON_FA_ID_CARD_CLIP "\xef\x91\xbf" // U+f47f +#define ICON_FA_IGLOO "\xef\x9e\xae" // U+f7ae +#define ICON_FA_IMAGE "\xef\x80\xbe" // U+f03e +#define ICON_FA_IMAGE_PORTRAIT "\xef\x8f\xa0" // U+f3e0 +#define ICON_FA_IMAGES "\xef\x8c\x82" // U+f302 +#define ICON_FA_INBOX "\xef\x80\x9c" // U+f01c +#define ICON_FA_INDENT "\xef\x80\xbc" // U+f03c +#define ICON_FA_INDIAN_RUPEE_SIGN "\xee\x86\xbc" // U+e1bc +#define ICON_FA_INDUSTRY "\xef\x89\xb5" // U+f275 +#define ICON_FA_INFINITY "\xef\x94\xb4" // U+f534 +#define ICON_FA_INFO "\xef\x84\xa9" // U+f129 +#define ICON_FA_ITALIC "\xef\x80\xb3" // U+f033 +#define ICON_FA_J "J" // U+004a +#define ICON_FA_JAR "\xee\x94\x96" // U+e516 +#define ICON_FA_JAR_WHEAT "\xee\x94\x97" // U+e517 +#define ICON_FA_JEDI "\xef\x99\xa9" // U+f669 +#define ICON_FA_JET_FIGHTER "\xef\x83\xbb" // U+f0fb +#define ICON_FA_JET_FIGHTER_UP "\xee\x94\x98" // U+e518 +#define ICON_FA_JOINT "\xef\x96\x95" // U+f595 +#define ICON_FA_JUG_DETERGENT "\xee\x94\x99" // U+e519 +#define ICON_FA_K "K" // U+004b +#define ICON_FA_KAABA "\xef\x99\xab" // U+f66b +#define ICON_FA_KEY "\xef\x82\x84" // U+f084 +#define ICON_FA_KEYBOARD "\xef\x84\x9c" // U+f11c +#define ICON_FA_KHANDA "\xef\x99\xad" // U+f66d +#define ICON_FA_KIP_SIGN "\xee\x87\x84" // U+e1c4 +#define ICON_FA_KIT_MEDICAL "\xef\x91\xb9" // U+f479 +#define ICON_FA_KITCHEN_SET "\xee\x94\x9a" // U+e51a +#define ICON_FA_KIWI_BIRD "\xef\x94\xb5" // U+f535 +#define ICON_FA_L "L" // U+004c +#define ICON_FA_LAND_MINE_ON "\xee\x94\x9b" // U+e51b +#define ICON_FA_LANDMARK "\xef\x99\xaf" // U+f66f +#define ICON_FA_LANDMARK_DOME "\xef\x9d\x92" // U+f752 +#define ICON_FA_LANDMARK_FLAG "\xee\x94\x9c" // U+e51c +#define ICON_FA_LANGUAGE "\xef\x86\xab" // U+f1ab +#define ICON_FA_LAPTOP "\xef\x84\x89" // U+f109 +#define ICON_FA_LAPTOP_CODE "\xef\x97\xbc" // U+f5fc +#define ICON_FA_LAPTOP_FILE "\xee\x94\x9d" // U+e51d +#define ICON_FA_LAPTOP_MEDICAL "\xef\xa0\x92" // U+f812 +#define ICON_FA_LARI_SIGN "\xee\x87\x88" // U+e1c8 +#define ICON_FA_LAYER_GROUP "\xef\x97\xbd" // U+f5fd +#define ICON_FA_LEAF "\xef\x81\xac" // U+f06c +#define ICON_FA_LEFT_LONG "\xef\x8c\x8a" // U+f30a +#define ICON_FA_LEFT_RIGHT "\xef\x8c\xb7" // U+f337 +#define ICON_FA_LEMON "\xef\x82\x94" // U+f094 +#define ICON_FA_LESS_THAN "<" // U+003c +#define ICON_FA_LESS_THAN_EQUAL "\xef\x94\xb7" // U+f537 +#define ICON_FA_LIFE_RING "\xef\x87\x8d" // U+f1cd +#define ICON_FA_LIGHTBULB "\xef\x83\xab" // U+f0eb +#define ICON_FA_LINES_LEANING "\xee\x94\x9e" // U+e51e +#define ICON_FA_LINK "\xef\x83\x81" // U+f0c1 +#define ICON_FA_LINK_SLASH "\xef\x84\xa7" // U+f127 +#define ICON_FA_LIRA_SIGN "\xef\x86\x95" // U+f195 +#define ICON_FA_LIST "\xef\x80\xba" // U+f03a +#define ICON_FA_LIST_CHECK "\xef\x82\xae" // U+f0ae +#define ICON_FA_LIST_OL "\xef\x83\x8b" // U+f0cb +#define ICON_FA_LIST_UL "\xef\x83\x8a" // U+f0ca +#define ICON_FA_LITECOIN_SIGN "\xee\x87\x93" // U+e1d3 +#define ICON_FA_LOCATION_ARROW "\xef\x84\xa4" // U+f124 +#define ICON_FA_LOCATION_CROSSHAIRS "\xef\x98\x81" // U+f601 +#define ICON_FA_LOCATION_DOT "\xef\x8f\x85" // U+f3c5 +#define ICON_FA_LOCATION_PIN "\xef\x81\x81" // U+f041 +#define ICON_FA_LOCATION_PIN_LOCK "\xee\x94\x9f" // U+e51f +#define ICON_FA_LOCK "\xef\x80\xa3" // U+f023 +#define ICON_FA_LOCK_OPEN "\xef\x8f\x81" // U+f3c1 +#define ICON_FA_LOCUST "\xee\x94\xa0" // U+e520 +#define ICON_FA_LUNGS "\xef\x98\x84" // U+f604 +#define ICON_FA_LUNGS_VIRUS "\xee\x81\xa7" // U+e067 +#define ICON_FA_M "M" // U+004d +#define ICON_FA_MAGNET "\xef\x81\xb6" // U+f076 +#define ICON_FA_MAGNIFYING_GLASS "\xef\x80\x82" // U+f002 +#define ICON_FA_MAGNIFYING_GLASS_ARROW_RIGHT "\xee\x94\xa1" // U+e521 +#define ICON_FA_MAGNIFYING_GLASS_CHART "\xee\x94\xa2" // U+e522 +#define ICON_FA_MAGNIFYING_GLASS_DOLLAR "\xef\x9a\x88" // U+f688 +#define ICON_FA_MAGNIFYING_GLASS_LOCATION "\xef\x9a\x89" // U+f689 +#define ICON_FA_MAGNIFYING_GLASS_MINUS "\xef\x80\x90" // U+f010 +#define ICON_FA_MAGNIFYING_GLASS_PLUS "\xef\x80\x8e" // U+f00e +#define ICON_FA_MANAT_SIGN "\xee\x87\x95" // U+e1d5 +#define ICON_FA_MAP "\xef\x89\xb9" // U+f279 +#define ICON_FA_MAP_LOCATION "\xef\x96\x9f" // U+f59f +#define ICON_FA_MAP_LOCATION_DOT "\xef\x96\xa0" // U+f5a0 +#define ICON_FA_MAP_PIN "\xef\x89\xb6" // U+f276 +#define ICON_FA_MARKER "\xef\x96\xa1" // U+f5a1 +#define ICON_FA_MARS "\xef\x88\xa2" // U+f222 +#define ICON_FA_MARS_AND_VENUS "\xef\x88\xa4" // U+f224 +#define ICON_FA_MARS_AND_VENUS_BURST "\xee\x94\xa3" // U+e523 +#define ICON_FA_MARS_DOUBLE "\xef\x88\xa7" // U+f227 +#define ICON_FA_MARS_STROKE "\xef\x88\xa9" // U+f229 +#define ICON_FA_MARS_STROKE_RIGHT "\xef\x88\xab" // U+f22b +#define ICON_FA_MARS_STROKE_UP "\xef\x88\xaa" // U+f22a +#define ICON_FA_MARTINI_GLASS "\xef\x95\xbb" // U+f57b +#define ICON_FA_MARTINI_GLASS_CITRUS "\xef\x95\xa1" // U+f561 +#define ICON_FA_MARTINI_GLASS_EMPTY "\xef\x80\x80" // U+f000 +#define ICON_FA_MASK "\xef\x9b\xba" // U+f6fa +#define ICON_FA_MASK_FACE "\xee\x87\x97" // U+e1d7 +#define ICON_FA_MASK_VENTILATOR "\xee\x94\xa4" // U+e524 +#define ICON_FA_MASKS_THEATER "\xef\x98\xb0" // U+f630 +#define ICON_FA_MATTRESS_PILLOW "\xee\x94\xa5" // U+e525 +#define ICON_FA_MAXIMIZE "\xef\x8c\x9e" // U+f31e +#define ICON_FA_MEDAL "\xef\x96\xa2" // U+f5a2 +#define ICON_FA_MEMORY "\xef\x94\xb8" // U+f538 +#define ICON_FA_MENORAH "\xef\x99\xb6" // U+f676 +#define ICON_FA_MERCURY "\xef\x88\xa3" // U+f223 +#define ICON_FA_MESSAGE "\xef\x89\xba" // U+f27a +#define ICON_FA_METEOR "\xef\x9d\x93" // U+f753 +#define ICON_FA_MICROCHIP "\xef\x8b\x9b" // U+f2db +#define ICON_FA_MICROPHONE "\xef\x84\xb0" // U+f130 +#define ICON_FA_MICROPHONE_LINES "\xef\x8f\x89" // U+f3c9 +#define ICON_FA_MICROPHONE_LINES_SLASH "\xef\x94\xb9" // U+f539 +#define ICON_FA_MICROPHONE_SLASH "\xef\x84\xb1" // U+f131 +#define ICON_FA_MICROSCOPE "\xef\x98\x90" // U+f610 +#define ICON_FA_MILL_SIGN "\xee\x87\xad" // U+e1ed +#define ICON_FA_MINIMIZE "\xef\x9e\x8c" // U+f78c +#define ICON_FA_MINUS "\xef\x81\xa8" // U+f068 +#define ICON_FA_MITTEN "\xef\x9e\xb5" // U+f7b5 +#define ICON_FA_MOBILE "\xef\x8f\x8e" // U+f3ce +#define ICON_FA_MOBILE_BUTTON "\xef\x84\x8b" // U+f10b +#define ICON_FA_MOBILE_RETRO "\xee\x94\xa7" // U+e527 +#define ICON_FA_MOBILE_SCREEN "\xef\x8f\x8f" // U+f3cf +#define ICON_FA_MOBILE_SCREEN_BUTTON "\xef\x8f\x8d" // U+f3cd +#define ICON_FA_MONEY_BILL "\xef\x83\x96" // U+f0d6 +#define ICON_FA_MONEY_BILL_1 "\xef\x8f\x91" // U+f3d1 +#define ICON_FA_MONEY_BILL_1_WAVE "\xef\x94\xbb" // U+f53b +#define ICON_FA_MONEY_BILL_TRANSFER "\xee\x94\xa8" // U+e528 +#define ICON_FA_MONEY_BILL_TREND_UP "\xee\x94\xa9" // U+e529 +#define ICON_FA_MONEY_BILL_WAVE "\xef\x94\xba" // U+f53a +#define ICON_FA_MONEY_BILL_WHEAT "\xee\x94\xaa" // U+e52a +#define ICON_FA_MONEY_BILLS "\xee\x87\xb3" // U+e1f3 +#define ICON_FA_MONEY_CHECK "\xef\x94\xbc" // U+f53c +#define ICON_FA_MONEY_CHECK_DOLLAR "\xef\x94\xbd" // U+f53d +#define ICON_FA_MONUMENT "\xef\x96\xa6" // U+f5a6 +#define ICON_FA_MOON "\xef\x86\x86" // U+f186 +#define ICON_FA_MORTAR_PESTLE "\xef\x96\xa7" // U+f5a7 +#define ICON_FA_MOSQUE "\xef\x99\xb8" // U+f678 +#define ICON_FA_MOSQUITO "\xee\x94\xab" // U+e52b +#define ICON_FA_MOSQUITO_NET "\xee\x94\xac" // U+e52c +#define ICON_FA_MOTORCYCLE "\xef\x88\x9c" // U+f21c +#define ICON_FA_MOUND "\xee\x94\xad" // U+e52d +#define ICON_FA_MOUNTAIN "\xef\x9b\xbc" // U+f6fc +#define ICON_FA_MOUNTAIN_CITY "\xee\x94\xae" // U+e52e +#define ICON_FA_MOUNTAIN_SUN "\xee\x94\xaf" // U+e52f +#define ICON_FA_MUG_HOT "\xef\x9e\xb6" // U+f7b6 +#define ICON_FA_MUG_SAUCER "\xef\x83\xb4" // U+f0f4 +#define ICON_FA_MUSIC "\xef\x80\x81" // U+f001 +#define ICON_FA_N "N" // U+004e +#define ICON_FA_NAIRA_SIGN "\xee\x87\xb6" // U+e1f6 +#define ICON_FA_NETWORK_WIRED "\xef\x9b\xbf" // U+f6ff +#define ICON_FA_NEUTER "\xef\x88\xac" // U+f22c +#define ICON_FA_NEWSPAPER "\xef\x87\xaa" // U+f1ea +#define ICON_FA_NOT_EQUAL "\xef\x94\xbe" // U+f53e +#define ICON_FA_NOTE_STICKY "\xef\x89\x89" // U+f249 +#define ICON_FA_NOTES_MEDICAL "\xef\x92\x81" // U+f481 +#define ICON_FA_O "O" // U+004f +#define ICON_FA_OBJECT_GROUP "\xef\x89\x87" // U+f247 +#define ICON_FA_OBJECT_UNGROUP "\xef\x89\x88" // U+f248 +#define ICON_FA_OIL_CAN "\xef\x98\x93" // U+f613 +#define ICON_FA_OIL_WELL "\xee\x94\xb2" // U+e532 +#define ICON_FA_OM "\xef\x99\xb9" // U+f679 +#define ICON_FA_OTTER "\xef\x9c\x80" // U+f700 +#define ICON_FA_OUTDENT "\xef\x80\xbb" // U+f03b +#define ICON_FA_P "P" // U+0050 +#define ICON_FA_PAGER "\xef\xa0\x95" // U+f815 +#define ICON_FA_PAINT_ROLLER "\xef\x96\xaa" // U+f5aa +#define ICON_FA_PAINTBRUSH "\xef\x87\xbc" // U+f1fc +#define ICON_FA_PALETTE "\xef\x94\xbf" // U+f53f +#define ICON_FA_PALLET "\xef\x92\x82" // U+f482 +#define ICON_FA_PANORAMA "\xee\x88\x89" // U+e209 +#define ICON_FA_PAPER_PLANE "\xef\x87\x98" // U+f1d8 +#define ICON_FA_PAPERCLIP "\xef\x83\x86" // U+f0c6 +#define ICON_FA_PARACHUTE_BOX "\xef\x93\x8d" // U+f4cd +#define ICON_FA_PARAGRAPH "\xef\x87\x9d" // U+f1dd +#define ICON_FA_PASSPORT "\xef\x96\xab" // U+f5ab +#define ICON_FA_PASTE "\xef\x83\xaa" // U+f0ea +#define ICON_FA_PAUSE "\xef\x81\x8c" // U+f04c +#define ICON_FA_PAW "\xef\x86\xb0" // U+f1b0 +#define ICON_FA_PEACE "\xef\x99\xbc" // U+f67c +#define ICON_FA_PEN "\xef\x8c\x84" // U+f304 +#define ICON_FA_PEN_CLIP "\xef\x8c\x85" // U+f305 +#define ICON_FA_PEN_FANCY "\xef\x96\xac" // U+f5ac +#define ICON_FA_PEN_NIB "\xef\x96\xad" // U+f5ad +#define ICON_FA_PEN_RULER "\xef\x96\xae" // U+f5ae +#define ICON_FA_PEN_TO_SQUARE "\xef\x81\x84" // U+f044 +#define ICON_FA_PENCIL "\xef\x8c\x83" // U+f303 +#define ICON_FA_PEOPLE_ARROWS "\xee\x81\xa8" // U+e068 +#define ICON_FA_PEOPLE_CARRY_BOX "\xef\x93\x8e" // U+f4ce +#define ICON_FA_PEOPLE_GROUP "\xee\x94\xb3" // U+e533 +#define ICON_FA_PEOPLE_LINE "\xee\x94\xb4" // U+e534 +#define ICON_FA_PEOPLE_PULLING "\xee\x94\xb5" // U+e535 +#define ICON_FA_PEOPLE_ROBBERY "\xee\x94\xb6" // U+e536 +#define ICON_FA_PEOPLE_ROOF "\xee\x94\xb7" // U+e537 +#define ICON_FA_PEPPER_HOT "\xef\xa0\x96" // U+f816 +#define ICON_FA_PERCENT "%" // U+0025 +#define ICON_FA_PERSON "\xef\x86\x83" // U+f183 +#define ICON_FA_PERSON_ARROW_DOWN_TO_LINE "\xee\x94\xb8" // U+e538 +#define ICON_FA_PERSON_ARROW_UP_FROM_LINE "\xee\x94\xb9" // U+e539 +#define ICON_FA_PERSON_BIKING "\xef\xa1\x8a" // U+f84a +#define ICON_FA_PERSON_BOOTH "\xef\x9d\x96" // U+f756 +#define ICON_FA_PERSON_BREASTFEEDING "\xee\x94\xba" // U+e53a +#define ICON_FA_PERSON_BURST "\xee\x94\xbb" // U+e53b +#define ICON_FA_PERSON_CANE "\xee\x94\xbc" // U+e53c +#define ICON_FA_PERSON_CHALKBOARD "\xee\x94\xbd" // U+e53d +#define ICON_FA_PERSON_CIRCLE_CHECK "\xee\x94\xbe" // U+e53e +#define ICON_FA_PERSON_CIRCLE_EXCLAMATION "\xee\x94\xbf" // U+e53f +#define ICON_FA_PERSON_CIRCLE_MINUS "\xee\x95\x80" // U+e540 +#define ICON_FA_PERSON_CIRCLE_PLUS "\xee\x95\x81" // U+e541 +#define ICON_FA_PERSON_CIRCLE_QUESTION "\xee\x95\x82" // U+e542 +#define ICON_FA_PERSON_CIRCLE_XMARK "\xee\x95\x83" // U+e543 +#define ICON_FA_PERSON_DIGGING "\xef\xa1\x9e" // U+f85e +#define ICON_FA_PERSON_DOTS_FROM_LINE "\xef\x91\xb0" // U+f470 +#define ICON_FA_PERSON_DRESS "\xef\x86\x82" // U+f182 +#define ICON_FA_PERSON_DRESS_BURST "\xee\x95\x84" // U+e544 +#define ICON_FA_PERSON_DROWNING "\xee\x95\x85" // U+e545 +#define ICON_FA_PERSON_FALLING "\xee\x95\x86" // U+e546 +#define ICON_FA_PERSON_FALLING_BURST "\xee\x95\x87" // U+e547 +#define ICON_FA_PERSON_HALF_DRESS "\xee\x95\x88" // U+e548 +#define ICON_FA_PERSON_HARASSING "\xee\x95\x89" // U+e549 +#define ICON_FA_PERSON_HIKING "\xef\x9b\xac" // U+f6ec +#define ICON_FA_PERSON_MILITARY_POINTING "\xee\x95\x8a" // U+e54a +#define ICON_FA_PERSON_MILITARY_RIFLE "\xee\x95\x8b" // U+e54b +#define ICON_FA_PERSON_MILITARY_TO_PERSON "\xee\x95\x8c" // U+e54c +#define ICON_FA_PERSON_PRAYING "\xef\x9a\x83" // U+f683 +#define ICON_FA_PERSON_PREGNANT "\xee\x8c\x9e" // U+e31e +#define ICON_FA_PERSON_RAYS "\xee\x95\x8d" // U+e54d +#define ICON_FA_PERSON_RIFLE "\xee\x95\x8e" // U+e54e +#define ICON_FA_PERSON_RUNNING "\xef\x9c\x8c" // U+f70c +#define ICON_FA_PERSON_SHELTER "\xee\x95\x8f" // U+e54f +#define ICON_FA_PERSON_SKATING "\xef\x9f\x85" // U+f7c5 +#define ICON_FA_PERSON_SKIING "\xef\x9f\x89" // U+f7c9 +#define ICON_FA_PERSON_SKIING_NORDIC "\xef\x9f\x8a" // U+f7ca +#define ICON_FA_PERSON_SNOWBOARDING "\xef\x9f\x8e" // U+f7ce +#define ICON_FA_PERSON_SWIMMING "\xef\x97\x84" // U+f5c4 +#define ICON_FA_PERSON_THROUGH_WINDOW "\xee\x96\xa9" // U+e5a9 +#define ICON_FA_PERSON_WALKING "\xef\x95\x94" // U+f554 +#define ICON_FA_PERSON_WALKING_ARROW_LOOP_LEFT "\xee\x95\x91" // U+e551 +#define ICON_FA_PERSON_WALKING_ARROW_RIGHT "\xee\x95\x92" // U+e552 +#define ICON_FA_PERSON_WALKING_DASHED_LINE_ARROW_RIGHT "\xee\x95\x93" // U+e553 +#define ICON_FA_PERSON_WALKING_LUGGAGE "\xee\x95\x94" // U+e554 +#define ICON_FA_PERSON_WALKING_WITH_CANE "\xef\x8a\x9d" // U+f29d +#define ICON_FA_PESETA_SIGN "\xee\x88\xa1" // U+e221 +#define ICON_FA_PESO_SIGN "\xee\x88\xa2" // U+e222 +#define ICON_FA_PHONE "\xef\x82\x95" // U+f095 +#define ICON_FA_PHONE_FLIP "\xef\xa1\xb9" // U+f879 +#define ICON_FA_PHONE_SLASH "\xef\x8f\x9d" // U+f3dd +#define ICON_FA_PHONE_VOLUME "\xef\x8a\xa0" // U+f2a0 +#define ICON_FA_PHOTO_FILM "\xef\xa1\xbc" // U+f87c +#define ICON_FA_PIGGY_BANK "\xef\x93\x93" // U+f4d3 +#define ICON_FA_PILLS "\xef\x92\x84" // U+f484 +#define ICON_FA_PIZZA_SLICE "\xef\xa0\x98" // U+f818 +#define ICON_FA_PLACE_OF_WORSHIP "\xef\x99\xbf" // U+f67f +#define ICON_FA_PLANE "\xef\x81\xb2" // U+f072 +#define ICON_FA_PLANE_ARRIVAL "\xef\x96\xaf" // U+f5af +#define ICON_FA_PLANE_CIRCLE_CHECK "\xee\x95\x95" // U+e555 +#define ICON_FA_PLANE_CIRCLE_EXCLAMATION "\xee\x95\x96" // U+e556 +#define ICON_FA_PLANE_CIRCLE_XMARK "\xee\x95\x97" // U+e557 +#define ICON_FA_PLANE_DEPARTURE "\xef\x96\xb0" // U+f5b0 +#define ICON_FA_PLANE_LOCK "\xee\x95\x98" // U+e558 +#define ICON_FA_PLANE_SLASH "\xee\x81\xa9" // U+e069 +#define ICON_FA_PLANE_UP "\xee\x88\xad" // U+e22d +#define ICON_FA_PLANT_WILT "\xee\x96\xaa" // U+e5aa +#define ICON_FA_PLATE_WHEAT "\xee\x95\x9a" // U+e55a +#define ICON_FA_PLAY "\xef\x81\x8b" // U+f04b +#define ICON_FA_PLUG "\xef\x87\xa6" // U+f1e6 +#define ICON_FA_PLUG_CIRCLE_BOLT "\xee\x95\x9b" // U+e55b +#define ICON_FA_PLUG_CIRCLE_CHECK "\xee\x95\x9c" // U+e55c +#define ICON_FA_PLUG_CIRCLE_EXCLAMATION "\xee\x95\x9d" // U+e55d +#define ICON_FA_PLUG_CIRCLE_MINUS "\xee\x95\x9e" // U+e55e +#define ICON_FA_PLUG_CIRCLE_PLUS "\xee\x95\x9f" // U+e55f +#define ICON_FA_PLUG_CIRCLE_XMARK "\xee\x95\xa0" // U+e560 +#define ICON_FA_PLUS "+" // U+002b +#define ICON_FA_PLUS_MINUS "\xee\x90\xbc" // U+e43c +#define ICON_FA_PODCAST "\xef\x8b\x8e" // U+f2ce +#define ICON_FA_POO "\xef\x8b\xbe" // U+f2fe +#define ICON_FA_POO_STORM "\xef\x9d\x9a" // U+f75a +#define ICON_FA_POOP "\xef\x98\x99" // U+f619 +#define ICON_FA_POWER_OFF "\xef\x80\x91" // U+f011 +#define ICON_FA_PRESCRIPTION "\xef\x96\xb1" // U+f5b1 +#define ICON_FA_PRESCRIPTION_BOTTLE "\xef\x92\x85" // U+f485 +#define ICON_FA_PRESCRIPTION_BOTTLE_MEDICAL "\xef\x92\x86" // U+f486 +#define ICON_FA_PRINT "\xef\x80\xaf" // U+f02f +#define ICON_FA_PUMP_MEDICAL "\xee\x81\xaa" // U+e06a +#define ICON_FA_PUMP_SOAP "\xee\x81\xab" // U+e06b +#define ICON_FA_PUZZLE_PIECE "\xef\x84\xae" // U+f12e +#define ICON_FA_Q "Q" // U+0051 +#define ICON_FA_QRCODE "\xef\x80\xa9" // U+f029 +#define ICON_FA_QUESTION "?" // U+003f +#define ICON_FA_QUOTE_LEFT "\xef\x84\x8d" // U+f10d +#define ICON_FA_QUOTE_RIGHT "\xef\x84\x8e" // U+f10e +#define ICON_FA_R "R" // U+0052 +#define ICON_FA_RADIATION "\xef\x9e\xb9" // U+f7b9 +#define ICON_FA_RADIO "\xef\xa3\x97" // U+f8d7 +#define ICON_FA_RAINBOW "\xef\x9d\x9b" // U+f75b +#define ICON_FA_RANKING_STAR "\xee\x95\xa1" // U+e561 +#define ICON_FA_RECEIPT "\xef\x95\x83" // U+f543 +#define ICON_FA_RECORD_VINYL "\xef\xa3\x99" // U+f8d9 +#define ICON_FA_RECTANGLE_AD "\xef\x99\x81" // U+f641 +#define ICON_FA_RECTANGLE_LIST "\xef\x80\xa2" // U+f022 +#define ICON_FA_RECTANGLE_XMARK "\xef\x90\x90" // U+f410 +#define ICON_FA_RECYCLE "\xef\x86\xb8" // U+f1b8 +#define ICON_FA_REGISTERED "\xef\x89\x9d" // U+f25d +#define ICON_FA_REPEAT "\xef\x8d\xa3" // U+f363 +#define ICON_FA_REPLY "\xef\x8f\xa5" // U+f3e5 +#define ICON_FA_REPLY_ALL "\xef\x84\xa2" // U+f122 +#define ICON_FA_REPUBLICAN "\xef\x9d\x9e" // U+f75e +#define ICON_FA_RESTROOM "\xef\x9e\xbd" // U+f7bd +#define ICON_FA_RETWEET "\xef\x81\xb9" // U+f079 +#define ICON_FA_RIBBON "\xef\x93\x96" // U+f4d6 +#define ICON_FA_RIGHT_FROM_BRACKET "\xef\x8b\xb5" // U+f2f5 +#define ICON_FA_RIGHT_LEFT "\xef\x8d\xa2" // U+f362 +#define ICON_FA_RIGHT_LONG "\xef\x8c\x8b" // U+f30b +#define ICON_FA_RIGHT_TO_BRACKET "\xef\x8b\xb6" // U+f2f6 +#define ICON_FA_RING "\xef\x9c\x8b" // U+f70b +#define ICON_FA_ROAD "\xef\x80\x98" // U+f018 +#define ICON_FA_ROAD_BARRIER "\xee\x95\xa2" // U+e562 +#define ICON_FA_ROAD_BRIDGE "\xee\x95\xa3" // U+e563 +#define ICON_FA_ROAD_CIRCLE_CHECK "\xee\x95\xa4" // U+e564 +#define ICON_FA_ROAD_CIRCLE_EXCLAMATION "\xee\x95\xa5" // U+e565 +#define ICON_FA_ROAD_CIRCLE_XMARK "\xee\x95\xa6" // U+e566 +#define ICON_FA_ROAD_LOCK "\xee\x95\xa7" // U+e567 +#define ICON_FA_ROAD_SPIKES "\xee\x95\xa8" // U+e568 +#define ICON_FA_ROBOT "\xef\x95\x84" // U+f544 +#define ICON_FA_ROCKET "\xef\x84\xb5" // U+f135 +#define ICON_FA_ROTATE "\xef\x8b\xb1" // U+f2f1 +#define ICON_FA_ROTATE_LEFT "\xef\x8b\xaa" // U+f2ea +#define ICON_FA_ROTATE_RIGHT "\xef\x8b\xb9" // U+f2f9 +#define ICON_FA_ROUTE "\xef\x93\x97" // U+f4d7 +#define ICON_FA_RSS "\xef\x82\x9e" // U+f09e +#define ICON_FA_RUBLE_SIGN "\xef\x85\x98" // U+f158 +#define ICON_FA_RUG "\xee\x95\xa9" // U+e569 +#define ICON_FA_RULER "\xef\x95\x85" // U+f545 +#define ICON_FA_RULER_COMBINED "\xef\x95\x86" // U+f546 +#define ICON_FA_RULER_HORIZONTAL "\xef\x95\x87" // U+f547 +#define ICON_FA_RULER_VERTICAL "\xef\x95\x88" // U+f548 +#define ICON_FA_RUPEE_SIGN "\xef\x85\x96" // U+f156 +#define ICON_FA_RUPIAH_SIGN "\xee\x88\xbd" // U+e23d +#define ICON_FA_S "S" // U+0053 +#define ICON_FA_SACK_DOLLAR "\xef\xa0\x9d" // U+f81d +#define ICON_FA_SACK_XMARK "\xee\x95\xaa" // U+e56a +#define ICON_FA_SAILBOAT "\xee\x91\x85" // U+e445 +#define ICON_FA_SATELLITE "\xef\x9e\xbf" // U+f7bf +#define ICON_FA_SATELLITE_DISH "\xef\x9f\x80" // U+f7c0 +#define ICON_FA_SCALE_BALANCED "\xef\x89\x8e" // U+f24e +#define ICON_FA_SCALE_UNBALANCED "\xef\x94\x95" // U+f515 +#define ICON_FA_SCALE_UNBALANCED_FLIP "\xef\x94\x96" // U+f516 +#define ICON_FA_SCHOOL "\xef\x95\x89" // U+f549 +#define ICON_FA_SCHOOL_CIRCLE_CHECK "\xee\x95\xab" // U+e56b +#define ICON_FA_SCHOOL_CIRCLE_EXCLAMATION "\xee\x95\xac" // U+e56c +#define ICON_FA_SCHOOL_CIRCLE_XMARK "\xee\x95\xad" // U+e56d +#define ICON_FA_SCHOOL_FLAG "\xee\x95\xae" // U+e56e +#define ICON_FA_SCHOOL_LOCK "\xee\x95\xaf" // U+e56f +#define ICON_FA_SCISSORS "\xef\x83\x84" // U+f0c4 +#define ICON_FA_SCREWDRIVER "\xef\x95\x8a" // U+f54a +#define ICON_FA_SCREWDRIVER_WRENCH "\xef\x9f\x99" // U+f7d9 +#define ICON_FA_SCROLL "\xef\x9c\x8e" // U+f70e +#define ICON_FA_SCROLL_TORAH "\xef\x9a\xa0" // U+f6a0 +#define ICON_FA_SD_CARD "\xef\x9f\x82" // U+f7c2 +#define ICON_FA_SECTION "\xee\x91\x87" // U+e447 +#define ICON_FA_SEEDLING "\xef\x93\x98" // U+f4d8 +#define ICON_FA_SERVER "\xef\x88\xb3" // U+f233 +#define ICON_FA_SHAPES "\xef\x98\x9f" // U+f61f +#define ICON_FA_SHARE "\xef\x81\xa4" // U+f064 +#define ICON_FA_SHARE_FROM_SQUARE "\xef\x85\x8d" // U+f14d +#define ICON_FA_SHARE_NODES "\xef\x87\xa0" // U+f1e0 +#define ICON_FA_SHEET_PLASTIC "\xee\x95\xb1" // U+e571 +#define ICON_FA_SHEKEL_SIGN "\xef\x88\x8b" // U+f20b +#define ICON_FA_SHIELD "\xef\x84\xb2" // U+f132 +#define ICON_FA_SHIELD_CAT "\xee\x95\xb2" // U+e572 +#define ICON_FA_SHIELD_DOG "\xee\x95\xb3" // U+e573 +#define ICON_FA_SHIELD_HALVED "\xef\x8f\xad" // U+f3ed +#define ICON_FA_SHIELD_HEART "\xee\x95\xb4" // U+e574 +#define ICON_FA_SHIELD_VIRUS "\xee\x81\xac" // U+e06c +#define ICON_FA_SHIP "\xef\x88\x9a" // U+f21a +#define ICON_FA_SHIRT "\xef\x95\x93" // U+f553 +#define ICON_FA_SHOE_PRINTS "\xef\x95\x8b" // U+f54b +#define ICON_FA_SHOP "\xef\x95\x8f" // U+f54f +#define ICON_FA_SHOP_LOCK "\xee\x92\xa5" // U+e4a5 +#define ICON_FA_SHOP_SLASH "\xee\x81\xb0" // U+e070 +#define ICON_FA_SHOWER "\xef\x8b\x8c" // U+f2cc +#define ICON_FA_SHRIMP "\xee\x91\x88" // U+e448 +#define ICON_FA_SHUFFLE "\xef\x81\xb4" // U+f074 +#define ICON_FA_SHUTTLE_SPACE "\xef\x86\x97" // U+f197 +#define ICON_FA_SIGN_HANGING "\xef\x93\x99" // U+f4d9 +#define ICON_FA_SIGNAL "\xef\x80\x92" // U+f012 +#define ICON_FA_SIGNATURE "\xef\x96\xb7" // U+f5b7 +#define ICON_FA_SIGNS_POST "\xef\x89\xb7" // U+f277 +#define ICON_FA_SIM_CARD "\xef\x9f\x84" // U+f7c4 +#define ICON_FA_SINK "\xee\x81\xad" // U+e06d +#define ICON_FA_SITEMAP "\xef\x83\xa8" // U+f0e8 +#define ICON_FA_SKULL "\xef\x95\x8c" // U+f54c +#define ICON_FA_SKULL_CROSSBONES "\xef\x9c\x94" // U+f714 +#define ICON_FA_SLASH "\xef\x9c\x95" // U+f715 +#define ICON_FA_SLEIGH "\xef\x9f\x8c" // U+f7cc +#define ICON_FA_SLIDERS "\xef\x87\x9e" // U+f1de +#define ICON_FA_SMOG "\xef\x9d\x9f" // U+f75f +#define ICON_FA_SMOKING "\xef\x92\x8d" // U+f48d +#define ICON_FA_SNOWFLAKE "\xef\x8b\x9c" // U+f2dc +#define ICON_FA_SNOWMAN "\xef\x9f\x90" // U+f7d0 +#define ICON_FA_SNOWPLOW "\xef\x9f\x92" // U+f7d2 +#define ICON_FA_SOAP "\xee\x81\xae" // U+e06e +#define ICON_FA_SOCKS "\xef\x9a\x96" // U+f696 +#define ICON_FA_SOLAR_PANEL "\xef\x96\xba" // U+f5ba +#define ICON_FA_SORT "\xef\x83\x9c" // U+f0dc +#define ICON_FA_SORT_DOWN "\xef\x83\x9d" // U+f0dd +#define ICON_FA_SORT_UP "\xef\x83\x9e" // U+f0de +#define ICON_FA_SPA "\xef\x96\xbb" // U+f5bb +#define ICON_FA_SPAGHETTI_MONSTER_FLYING "\xef\x99\xbb" // U+f67b +#define ICON_FA_SPELL_CHECK "\xef\xa2\x91" // U+f891 +#define ICON_FA_SPIDER "\xef\x9c\x97" // U+f717 +#define ICON_FA_SPINNER "\xef\x84\x90" // U+f110 +#define ICON_FA_SPLOTCH "\xef\x96\xbc" // U+f5bc +#define ICON_FA_SPOON "\xef\x8b\xa5" // U+f2e5 +#define ICON_FA_SPRAY_CAN "\xef\x96\xbd" // U+f5bd +#define ICON_FA_SPRAY_CAN_SPARKLES "\xef\x97\x90" // U+f5d0 +#define ICON_FA_SQUARE "\xef\x83\x88" // U+f0c8 +#define ICON_FA_SQUARE_ARROW_UP_RIGHT "\xef\x85\x8c" // U+f14c +#define ICON_FA_SQUARE_CARET_DOWN "\xef\x85\x90" // U+f150 +#define ICON_FA_SQUARE_CARET_LEFT "\xef\x86\x91" // U+f191 +#define ICON_FA_SQUARE_CARET_RIGHT "\xef\x85\x92" // U+f152 +#define ICON_FA_SQUARE_CARET_UP "\xef\x85\x91" // U+f151 +#define ICON_FA_SQUARE_CHECK "\xef\x85\x8a" // U+f14a +#define ICON_FA_SQUARE_ENVELOPE "\xef\x86\x99" // U+f199 +#define ICON_FA_SQUARE_FULL "\xef\x91\x9c" // U+f45c +#define ICON_FA_SQUARE_H "\xef\x83\xbd" // U+f0fd +#define ICON_FA_SQUARE_MINUS "\xef\x85\x86" // U+f146 +#define ICON_FA_SQUARE_NFI "\xee\x95\xb6" // U+e576 +#define ICON_FA_SQUARE_PARKING "\xef\x95\x80" // U+f540 +#define ICON_FA_SQUARE_PEN "\xef\x85\x8b" // U+f14b +#define ICON_FA_SQUARE_PERSON_CONFINED "\xee\x95\xb7" // U+e577 +#define ICON_FA_SQUARE_PHONE "\xef\x82\x98" // U+f098 +#define ICON_FA_SQUARE_PHONE_FLIP "\xef\xa1\xbb" // U+f87b +#define ICON_FA_SQUARE_PLUS "\xef\x83\xbe" // U+f0fe +#define ICON_FA_SQUARE_POLL_HORIZONTAL "\xef\x9a\x82" // U+f682 +#define ICON_FA_SQUARE_POLL_VERTICAL "\xef\x9a\x81" // U+f681 +#define ICON_FA_SQUARE_ROOT_VARIABLE "\xef\x9a\x98" // U+f698 +#define ICON_FA_SQUARE_RSS "\xef\x85\x83" // U+f143 +#define ICON_FA_SQUARE_SHARE_NODES "\xef\x87\xa1" // U+f1e1 +#define ICON_FA_SQUARE_UP_RIGHT "\xef\x8d\xa0" // U+f360 +#define ICON_FA_SQUARE_VIRUS "\xee\x95\xb8" // U+e578 +#define ICON_FA_SQUARE_XMARK "\xef\x8b\x93" // U+f2d3 +#define ICON_FA_STAFF_SNAKE "\xee\x95\xb9" // U+e579 +#define ICON_FA_STAIRS "\xee\x8a\x89" // U+e289 +#define ICON_FA_STAMP "\xef\x96\xbf" // U+f5bf +#define ICON_FA_STAPLER "\xee\x96\xaf" // U+e5af +#define ICON_FA_STAR "\xef\x80\x85" // U+f005 +#define ICON_FA_STAR_AND_CRESCENT "\xef\x9a\x99" // U+f699 +#define ICON_FA_STAR_HALF "\xef\x82\x89" // U+f089 +#define ICON_FA_STAR_HALF_STROKE "\xef\x97\x80" // U+f5c0 +#define ICON_FA_STAR_OF_DAVID "\xef\x9a\x9a" // U+f69a +#define ICON_FA_STAR_OF_LIFE "\xef\x98\xa1" // U+f621 +#define ICON_FA_STERLING_SIGN "\xef\x85\x94" // U+f154 +#define ICON_FA_STETHOSCOPE "\xef\x83\xb1" // U+f0f1 +#define ICON_FA_STOP "\xef\x81\x8d" // U+f04d +#define ICON_FA_STOPWATCH "\xef\x8b\xb2" // U+f2f2 +#define ICON_FA_STOPWATCH_20 "\xee\x81\xaf" // U+e06f +#define ICON_FA_STORE "\xef\x95\x8e" // U+f54e +#define ICON_FA_STORE_SLASH "\xee\x81\xb1" // U+e071 +#define ICON_FA_STREET_VIEW "\xef\x88\x9d" // U+f21d +#define ICON_FA_STRIKETHROUGH "\xef\x83\x8c" // U+f0cc +#define ICON_FA_STROOPWAFEL "\xef\x95\x91" // U+f551 +#define ICON_FA_SUBSCRIPT "\xef\x84\xac" // U+f12c +#define ICON_FA_SUITCASE "\xef\x83\xb2" // U+f0f2 +#define ICON_FA_SUITCASE_MEDICAL "\xef\x83\xba" // U+f0fa +#define ICON_FA_SUITCASE_ROLLING "\xef\x97\x81" // U+f5c1 +#define ICON_FA_SUN "\xef\x86\x85" // U+f185 +#define ICON_FA_SUN_PLANT_WILT "\xee\x95\xba" // U+e57a +#define ICON_FA_SUPERSCRIPT "\xef\x84\xab" // U+f12b +#define ICON_FA_SWATCHBOOK "\xef\x97\x83" // U+f5c3 +#define ICON_FA_SYNAGOGUE "\xef\x9a\x9b" // U+f69b +#define ICON_FA_SYRINGE "\xef\x92\x8e" // U+f48e +#define ICON_FA_T "T" // U+0054 +#define ICON_FA_TABLE "\xef\x83\x8e" // U+f0ce +#define ICON_FA_TABLE_CELLS "\xef\x80\x8a" // U+f00a +#define ICON_FA_TABLE_CELLS_LARGE "\xef\x80\x89" // U+f009 +#define ICON_FA_TABLE_COLUMNS "\xef\x83\x9b" // U+f0db +#define ICON_FA_TABLE_LIST "\xef\x80\x8b" // U+f00b +#define ICON_FA_TABLE_TENNIS_PADDLE_BALL "\xef\x91\x9d" // U+f45d +#define ICON_FA_TABLET "\xef\x8f\xbb" // U+f3fb +#define ICON_FA_TABLET_BUTTON "\xef\x84\x8a" // U+f10a +#define ICON_FA_TABLET_SCREEN_BUTTON "\xef\x8f\xba" // U+f3fa +#define ICON_FA_TABLETS "\xef\x92\x90" // U+f490 +#define ICON_FA_TACHOGRAPH_DIGITAL "\xef\x95\xa6" // U+f566 +#define ICON_FA_TAG "\xef\x80\xab" // U+f02b +#define ICON_FA_TAGS "\xef\x80\xac" // U+f02c +#define ICON_FA_TAPE "\xef\x93\x9b" // U+f4db +#define ICON_FA_TARP "\xee\x95\xbb" // U+e57b +#define ICON_FA_TARP_DROPLET "\xee\x95\xbc" // U+e57c +#define ICON_FA_TAXI "\xef\x86\xba" // U+f1ba +#define ICON_FA_TEETH "\xef\x98\xae" // U+f62e +#define ICON_FA_TEETH_OPEN "\xef\x98\xaf" // U+f62f +#define ICON_FA_TEMPERATURE_ARROW_DOWN "\xee\x80\xbf" // U+e03f +#define ICON_FA_TEMPERATURE_ARROW_UP "\xee\x81\x80" // U+e040 +#define ICON_FA_TEMPERATURE_EMPTY "\xef\x8b\x8b" // U+f2cb +#define ICON_FA_TEMPERATURE_FULL "\xef\x8b\x87" // U+f2c7 +#define ICON_FA_TEMPERATURE_HALF "\xef\x8b\x89" // U+f2c9 +#define ICON_FA_TEMPERATURE_HIGH "\xef\x9d\xa9" // U+f769 +#define ICON_FA_TEMPERATURE_LOW "\xef\x9d\xab" // U+f76b +#define ICON_FA_TEMPERATURE_QUARTER "\xef\x8b\x8a" // U+f2ca +#define ICON_FA_TEMPERATURE_THREE_QUARTERS "\xef\x8b\x88" // U+f2c8 +#define ICON_FA_TENGE_SIGN "\xef\x9f\x97" // U+f7d7 +#define ICON_FA_TENT "\xee\x95\xbd" // U+e57d +#define ICON_FA_TENT_ARROW_DOWN_TO_LINE "\xee\x95\xbe" // U+e57e +#define ICON_FA_TENT_ARROW_LEFT_RIGHT "\xee\x95\xbf" // U+e57f +#define ICON_FA_TENT_ARROW_TURN_LEFT "\xee\x96\x80" // U+e580 +#define ICON_FA_TENT_ARROWS_DOWN "\xee\x96\x81" // U+e581 +#define ICON_FA_TENTS "\xee\x96\x82" // U+e582 +#define ICON_FA_TERMINAL "\xef\x84\xa0" // U+f120 +#define ICON_FA_TEXT_HEIGHT "\xef\x80\xb4" // U+f034 +#define ICON_FA_TEXT_SLASH "\xef\xa1\xbd" // U+f87d +#define ICON_FA_TEXT_WIDTH "\xef\x80\xb5" // U+f035 +#define ICON_FA_THERMOMETER "\xef\x92\x91" // U+f491 +#define ICON_FA_THUMBS_DOWN "\xef\x85\xa5" // U+f165 +#define ICON_FA_THUMBS_UP "\xef\x85\xa4" // U+f164 +#define ICON_FA_THUMBTACK "\xef\x82\x8d" // U+f08d +#define ICON_FA_TICKET "\xef\x85\x85" // U+f145 +#define ICON_FA_TICKET_SIMPLE "\xef\x8f\xbf" // U+f3ff +#define ICON_FA_TIMELINE "\xee\x8a\x9c" // U+e29c +#define ICON_FA_TOGGLE_OFF "\xef\x88\x84" // U+f204 +#define ICON_FA_TOGGLE_ON "\xef\x88\x85" // U+f205 +#define ICON_FA_TOILET "\xef\x9f\x98" // U+f7d8 +#define ICON_FA_TOILET_PAPER "\xef\x9c\x9e" // U+f71e +#define ICON_FA_TOILET_PAPER_SLASH "\xee\x81\xb2" // U+e072 +#define ICON_FA_TOILET_PORTABLE "\xee\x96\x83" // U+e583 +#define ICON_FA_TOILETS_PORTABLE "\xee\x96\x84" // U+e584 +#define ICON_FA_TOOLBOX "\xef\x95\x92" // U+f552 +#define ICON_FA_TOOTH "\xef\x97\x89" // U+f5c9 +#define ICON_FA_TORII_GATE "\xef\x9a\xa1" // U+f6a1 +#define ICON_FA_TORNADO "\xef\x9d\xaf" // U+f76f +#define ICON_FA_TOWER_BROADCAST "\xef\x94\x99" // U+f519 +#define ICON_FA_TOWER_CELL "\xee\x96\x85" // U+e585 +#define ICON_FA_TOWER_OBSERVATION "\xee\x96\x86" // U+e586 +#define ICON_FA_TRACTOR "\xef\x9c\xa2" // U+f722 +#define ICON_FA_TRADEMARK "\xef\x89\x9c" // U+f25c +#define ICON_FA_TRAFFIC_LIGHT "\xef\x98\xb7" // U+f637 +#define ICON_FA_TRAILER "\xee\x81\x81" // U+e041 +#define ICON_FA_TRAIN "\xef\x88\xb8" // U+f238 +#define ICON_FA_TRAIN_SUBWAY "\xef\x88\xb9" // U+f239 +#define ICON_FA_TRAIN_TRAM "\xee\x96\xb4" // U+e5b4 +#define ICON_FA_TRANSGENDER "\xef\x88\xa5" // U+f225 +#define ICON_FA_TRASH "\xef\x87\xb8" // U+f1f8 +#define ICON_FA_TRASH_ARROW_UP "\xef\xa0\xa9" // U+f829 +#define ICON_FA_TRASH_CAN "\xef\x8b\xad" // U+f2ed +#define ICON_FA_TRASH_CAN_ARROW_UP "\xef\xa0\xaa" // U+f82a +#define ICON_FA_TREE "\xef\x86\xbb" // U+f1bb +#define ICON_FA_TREE_CITY "\xee\x96\x87" // U+e587 +#define ICON_FA_TRIANGLE_EXCLAMATION "\xef\x81\xb1" // U+f071 +#define ICON_FA_TROPHY "\xef\x82\x91" // U+f091 +#define ICON_FA_TROWEL "\xee\x96\x89" // U+e589 +#define ICON_FA_TROWEL_BRICKS "\xee\x96\x8a" // U+e58a +#define ICON_FA_TRUCK "\xef\x83\x91" // U+f0d1 +#define ICON_FA_TRUCK_ARROW_RIGHT "\xee\x96\x8b" // U+e58b +#define ICON_FA_TRUCK_DROPLET "\xee\x96\x8c" // U+e58c +#define ICON_FA_TRUCK_FAST "\xef\x92\x8b" // U+f48b +#define ICON_FA_TRUCK_FIELD "\xee\x96\x8d" // U+e58d +#define ICON_FA_TRUCK_FIELD_UN "\xee\x96\x8e" // U+e58e +#define ICON_FA_TRUCK_FRONT "\xee\x8a\xb7" // U+e2b7 +#define ICON_FA_TRUCK_MEDICAL "\xef\x83\xb9" // U+f0f9 +#define ICON_FA_TRUCK_MONSTER "\xef\x98\xbb" // U+f63b +#define ICON_FA_TRUCK_MOVING "\xef\x93\x9f" // U+f4df +#define ICON_FA_TRUCK_PICKUP "\xef\x98\xbc" // U+f63c +#define ICON_FA_TRUCK_PLANE "\xee\x96\x8f" // U+e58f +#define ICON_FA_TRUCK_RAMP_BOX "\xef\x93\x9e" // U+f4de +#define ICON_FA_TTY "\xef\x87\xa4" // U+f1e4 +#define ICON_FA_TURKISH_LIRA_SIGN "\xee\x8a\xbb" // U+e2bb +#define ICON_FA_TURN_DOWN "\xef\x8e\xbe" // U+f3be +#define ICON_FA_TURN_UP "\xef\x8e\xbf" // U+f3bf +#define ICON_FA_TV "\xef\x89\xac" // U+f26c +#define ICON_FA_U "U" // U+0055 +#define ICON_FA_UMBRELLA "\xef\x83\xa9" // U+f0e9 +#define ICON_FA_UMBRELLA_BEACH "\xef\x97\x8a" // U+f5ca +#define ICON_FA_UNDERLINE "\xef\x83\x8d" // U+f0cd +#define ICON_FA_UNIVERSAL_ACCESS "\xef\x8a\x9a" // U+f29a +#define ICON_FA_UNLOCK "\xef\x82\x9c" // U+f09c +#define ICON_FA_UNLOCK_KEYHOLE "\xef\x84\xbe" // U+f13e +#define ICON_FA_UP_DOWN "\xef\x8c\xb8" // U+f338 +#define ICON_FA_UP_DOWN_LEFT_RIGHT "\xef\x82\xb2" // U+f0b2 +#define ICON_FA_UP_LONG "\xef\x8c\x8c" // U+f30c +#define ICON_FA_UP_RIGHT_AND_DOWN_LEFT_FROM_CENTER "\xef\x90\xa4" // U+f424 +#define ICON_FA_UP_RIGHT_FROM_SQUARE "\xef\x8d\x9d" // U+f35d +#define ICON_FA_UPLOAD "\xef\x82\x93" // U+f093 +#define ICON_FA_USER "\xef\x80\x87" // U+f007 +#define ICON_FA_USER_ASTRONAUT "\xef\x93\xbb" // U+f4fb +#define ICON_FA_USER_CHECK "\xef\x93\xbc" // U+f4fc +#define ICON_FA_USER_CLOCK "\xef\x93\xbd" // U+f4fd +#define ICON_FA_USER_DOCTOR "\xef\x83\xb0" // U+f0f0 +#define ICON_FA_USER_GEAR "\xef\x93\xbe" // U+f4fe +#define ICON_FA_USER_GRADUATE "\xef\x94\x81" // U+f501 +#define ICON_FA_USER_GROUP "\xef\x94\x80" // U+f500 +#define ICON_FA_USER_INJURED "\xef\x9c\xa8" // U+f728 +#define ICON_FA_USER_LARGE "\xef\x90\x86" // U+f406 +#define ICON_FA_USER_LARGE_SLASH "\xef\x93\xba" // U+f4fa +#define ICON_FA_USER_LOCK "\xef\x94\x82" // U+f502 +#define ICON_FA_USER_MINUS "\xef\x94\x83" // U+f503 +#define ICON_FA_USER_NINJA "\xef\x94\x84" // U+f504 +#define ICON_FA_USER_NURSE "\xef\xa0\xaf" // U+f82f +#define ICON_FA_USER_PEN "\xef\x93\xbf" // U+f4ff +#define ICON_FA_USER_PLUS "\xef\x88\xb4" // U+f234 +#define ICON_FA_USER_SECRET "\xef\x88\x9b" // U+f21b +#define ICON_FA_USER_SHIELD "\xef\x94\x85" // U+f505 +#define ICON_FA_USER_SLASH "\xef\x94\x86" // U+f506 +#define ICON_FA_USER_TAG "\xef\x94\x87" // U+f507 +#define ICON_FA_USER_TIE "\xef\x94\x88" // U+f508 +#define ICON_FA_USER_XMARK "\xef\x88\xb5" // U+f235 +#define ICON_FA_USERS "\xef\x83\x80" // U+f0c0 +#define ICON_FA_USERS_BETWEEN_LINES "\xee\x96\x91" // U+e591 +#define ICON_FA_USERS_GEAR "\xef\x94\x89" // U+f509 +#define ICON_FA_USERS_LINE "\xee\x96\x92" // U+e592 +#define ICON_FA_USERS_RAYS "\xee\x96\x93" // U+e593 +#define ICON_FA_USERS_RECTANGLE "\xee\x96\x94" // U+e594 +#define ICON_FA_USERS_SLASH "\xee\x81\xb3" // U+e073 +#define ICON_FA_USERS_VIEWFINDER "\xee\x96\x95" // U+e595 +#define ICON_FA_UTENSILS "\xef\x8b\xa7" // U+f2e7 +#define ICON_FA_V "V" // U+0056 +#define ICON_FA_VAN_SHUTTLE "\xef\x96\xb6" // U+f5b6 +#define ICON_FA_VAULT "\xee\x8b\x85" // U+e2c5 +#define ICON_FA_VECTOR_SQUARE "\xef\x97\x8b" // U+f5cb +#define ICON_FA_VENUS "\xef\x88\xa1" // U+f221 +#define ICON_FA_VENUS_DOUBLE "\xef\x88\xa6" // U+f226 +#define ICON_FA_VENUS_MARS "\xef\x88\xa8" // U+f228 +#define ICON_FA_VEST "\xee\x82\x85" // U+e085 +#define ICON_FA_VEST_PATCHES "\xee\x82\x86" // U+e086 +#define ICON_FA_VIAL "\xef\x92\x92" // U+f492 +#define ICON_FA_VIAL_CIRCLE_CHECK "\xee\x96\x96" // U+e596 +#define ICON_FA_VIAL_VIRUS "\xee\x96\x97" // U+e597 +#define ICON_FA_VIALS "\xef\x92\x93" // U+f493 +#define ICON_FA_VIDEO "\xef\x80\xbd" // U+f03d +#define ICON_FA_VIDEO_SLASH "\xef\x93\xa2" // U+f4e2 +#define ICON_FA_VIHARA "\xef\x9a\xa7" // U+f6a7 +#define ICON_FA_VIRUS "\xee\x81\xb4" // U+e074 +#define ICON_FA_VIRUS_COVID "\xee\x92\xa8" // U+e4a8 +#define ICON_FA_VIRUS_COVID_SLASH "\xee\x92\xa9" // U+e4a9 +#define ICON_FA_VIRUS_SLASH "\xee\x81\xb5" // U+e075 +#define ICON_FA_VIRUSES "\xee\x81\xb6" // U+e076 +#define ICON_FA_VOICEMAIL "\xef\xa2\x97" // U+f897 +#define ICON_FA_VOLCANO "\xef\x9d\xb0" // U+f770 +#define ICON_FA_VOLLEYBALL "\xef\x91\x9f" // U+f45f +#define ICON_FA_VOLUME_HIGH "\xef\x80\xa8" // U+f028 +#define ICON_FA_VOLUME_LOW "\xef\x80\xa7" // U+f027 +#define ICON_FA_VOLUME_OFF "\xef\x80\xa6" // U+f026 +#define ICON_FA_VOLUME_XMARK "\xef\x9a\xa9" // U+f6a9 +#define ICON_FA_VR_CARDBOARD "\xef\x9c\xa9" // U+f729 +#define ICON_FA_W "W" // U+0057 +#define ICON_FA_WALKIE_TALKIE "\xef\xa3\xaf" // U+f8ef +#define ICON_FA_WALLET "\xef\x95\x95" // U+f555 +#define ICON_FA_WAND_MAGIC "\xef\x83\x90" // U+f0d0 +#define ICON_FA_WAND_MAGIC_SPARKLES "\xee\x8b\x8a" // U+e2ca +#define ICON_FA_WAND_SPARKLES "\xef\x9c\xab" // U+f72b +#define ICON_FA_WAREHOUSE "\xef\x92\x94" // U+f494 +#define ICON_FA_WATER "\xef\x9d\xb3" // U+f773 +#define ICON_FA_WATER_LADDER "\xef\x97\x85" // U+f5c5 +#define ICON_FA_WAVE_SQUARE "\xef\xa0\xbe" // U+f83e +#define ICON_FA_WEIGHT_HANGING "\xef\x97\x8d" // U+f5cd +#define ICON_FA_WEIGHT_SCALE "\xef\x92\x96" // U+f496 +#define ICON_FA_WHEAT_AWN "\xee\x8b\x8d" // U+e2cd +#define ICON_FA_WHEAT_AWN_CIRCLE_EXCLAMATION "\xee\x96\x98" // U+e598 +#define ICON_FA_WHEELCHAIR "\xef\x86\x93" // U+f193 +#define ICON_FA_WHEELCHAIR_MOVE "\xee\x8b\x8e" // U+e2ce +#define ICON_FA_WHISKEY_GLASS "\xef\x9e\xa0" // U+f7a0 +#define ICON_FA_WIFI "\xef\x87\xab" // U+f1eb +#define ICON_FA_WIND "\xef\x9c\xae" // U+f72e +#define ICON_FA_WINDOW_MAXIMIZE "\xef\x8b\x90" // U+f2d0 +#define ICON_FA_WINDOW_MINIMIZE "\xef\x8b\x91" // U+f2d1 +#define ICON_FA_WINDOW_RESTORE "\xef\x8b\x92" // U+f2d2 +#define ICON_FA_WINE_BOTTLE "\xef\x9c\xaf" // U+f72f +#define ICON_FA_WINE_GLASS "\xef\x93\xa3" // U+f4e3 +#define ICON_FA_WINE_GLASS_EMPTY "\xef\x97\x8e" // U+f5ce +#define ICON_FA_WON_SIGN "\xef\x85\x99" // U+f159 +#define ICON_FA_WORM "\xee\x96\x99" // U+e599 +#define ICON_FA_WRENCH "\xef\x82\xad" // U+f0ad +#define ICON_FA_X "X" // U+0058 +#define ICON_FA_X_RAY "\xef\x92\x97" // U+f497 +#define ICON_FA_XMARK "\xef\x80\x8d" // U+f00d +#define ICON_FA_XMARKS_LINES "\xee\x96\x9a" // U+e59a +#define ICON_FA_Y "Y" // U+0059 +#define ICON_FA_YEN_SIGN "\xef\x85\x97" // U+f157 +#define ICON_FA_YIN_YANG "\xef\x9a\xad" // U+f6ad +#define ICON_FA_Z "Z" // U+005a \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index e938ae22..aff1eaad 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -4,6 +4,7 @@ #include "SHpch.h" #include "IconsMaterialDesign.h" +#include "IconsFontAwesome6.h" #include "DragDrop/SHDragDrop.hpp" //#==============================================================# @@ -99,7 +100,7 @@ namespace SHADE io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; - + io->ConfigWindowsMoveFromTitleBarOnly = true; InitLayout(); InitFonts(); @@ -170,10 +171,11 @@ namespace SHADE { ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path - constexpr ImWchar icon_ranges[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; - ImFont* UIFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges); //TODO: Change to config based assets path - + constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; + ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path + constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_MD, 0 }; + ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } From 449cd28bb353b5b3a41f103dc1b6cc3540b22b17 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 21 Oct 2022 20:55:21 +0800 Subject: [PATCH 408/793] Took test scene from main --- SHADE_Application/src/Scenes/SBTestScene.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index bd33e63c..41326174 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -13,9 +13,6 @@ #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" -#include "Assets/Asset Types/SHMeshAsset.h" -#include "Assets/Asset Types/SHTextureAsset.h" - #include "Assets/SHAssetManager.h" #include "Resource/SHResourceManager.h" @@ -43,8 +40,6 @@ namespace Sandbox // Create temp meshes const auto CUBE_MESH = SHADE::SHPrimitiveGenerator::Cube(*graphicsSystem); - auto assets = SHAssetManager::GetAllAssets(); - //Test Racoon mesh std::vector> handles; std::vector> texHandles; From cc6e2189fa7df84faec49733f7cf417da947a970 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 21 Oct 2022 20:56:14 +0800 Subject: [PATCH 409/793] WIP --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 1 + .../MiddleEnd/Interface/SHGraphicsConstants.h | 8 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 35 ++- .../src/Graphics/Pipeline/SHVkPipeline.cpp | 23 ++ .../RenderGraph/SHAttachmentDescriptionType.h | 1 + .../Graphics/RenderGraph/SHRenderGraph.cpp | 45 +++- .../src/Graphics/RenderGraph/SHRenderGraph.h | 4 - .../RenderGraph/SHRenderGraphNode.cpp | 12 +- .../Graphics/RenderGraph/SHRenderGraphNode.h | 5 +- .../RenderGraph/SHRenderGraphResource.cpp | 11 + .../RenderGraph/SHRenderGraphResource.h | 11 +- .../RenderGraph/SHRenderGraphStorage.h | 3 + .../src/Graphics/RenderGraph/SHSubpass.cpp | 199 +++++++++++++++++- .../src/Graphics/RenderGraph/SHSubpass.h | 51 +++-- .../Graphics/RenderGraph/SHSubpassCompute.cpp | 34 ++- .../Graphics/RenderGraph/SHSubpassCompute.h | 28 ++- .../Graphics/Shaders/SHShaderReflected.cpp | 3 + TempShaderFolder/GreyscaleCs.glsl | 38 ++++ TempShaderFolder/GreyscaleCs.spv | Bin 0 -> 1400 bytes 19 files changed, 437 insertions(+), 75 deletions(-) create mode 100644 TempShaderFolder/GreyscaleCs.glsl create mode 100644 TempShaderFolder/GreyscaleCs.spv diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 9c97131a..c9822b82 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -62,6 +62,7 @@ namespace SHADE system->editorCamera.position -= UP * dt * camera.movementSpeed; system->editorCamera.dirtyView = true; } + system->UpdateCameraComponent(system->editorCamera); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 67cbc001..a0457b65 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -63,6 +63,14 @@ namespace SHADE */ /***************************************************************************/ static constexpr uint32_t PER_INSTANCE = 3; + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for render graph resources. + */ + /***************************************************************************/ + static constexpr uint32_t RENDERGRAPH_RESOURCE = 4; + }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 06762db8..386cef54 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -115,6 +115,23 @@ namespace SHADE graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + + + // TODO: This is VERY temporarily here until a more solid resource management system is implemented + shaderSourceLibrary.Init("../../TempShaderFolder/"); + + shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); + shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); + + shaderSourceLibrary.LoadShader(2, "GreyscaleCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + + shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); + auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); + auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); + auto greyscale = shaderModuleLibrary.GetShaderModule("GreyscaleCs.glsl"); + cubeVS->Reflect(); + cubeFS->Reflect(); + greyscale->Reflect(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -166,6 +183,13 @@ namespace SHADE gBufferWriteSubpass->AddColorOutput("Entity ID"); gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); + auto greyscale = shaderModuleLibrary.GetShaderModule("GreyscaleCs.glsl"); + + auto greyscaleSubpass = node->AddSubpass("Greyscale Subpass"); + greyscaleSubpass->AddGeneralInput("Scene"); + greyscaleSubpass->AddSubpassCompute(greyscale); + + // We do this to just transition our scene layout to shader read auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); sceneLayoutTransitionSubpass->AddInput("Scene"); @@ -177,20 +201,11 @@ namespace SHADE worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); - - // TODO: This is VERY temporarily here until a more solid resource management system is implemented - shaderSourceLibrary.Init("../../TempShaderFolder/"); - - shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); - shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); - - shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); - cubeVS->Reflect(); - cubeFS->Reflect(); defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); + } void SHGraphicsSystem::InitMiddleEnd(void) noexcept diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index c03fd2a7..973218d1 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -171,6 +171,29 @@ namespace SHADE void SHVkPipeline::CreateComputePipeline(void) noexcept { + auto shaderModule = pipelineLayout->GetShaderModules()[0]; + + vk::PipelineShaderStageCreateInfo shaderStageCreateInfo + { + .stage = vk::ShaderStageFlagBits::eCompute, + .module = shaderModule->GetVkShaderModule(), + .pName = shaderModule->GetEntryPoint().c_str(), + }; + + vk::ComputePipelineCreateInfo cpCreateInfo + { + .flags = {}, + .stage = shaderStageCreateInfo, + .layout = pipelineLayout->GetVkPipelineLayout(), + }; + + if (auto result = logicalDeviceHdl->GetVkLogicalDevice().createComputePipelines({}, 1, &cpCreateInfo, nullptr, &vkPipeline); result != vk::Result::eSuccess) + SHVulkanDebugUtil::ReportVkError(result, "Failed to create Compute Pipeline. "); + else + { + SHVulkanDebugUtil::ReportVkSuccess("Successfully created a Compute Pipeline. "); + created = true; + } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h index 241292d4..efd3fb0f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h @@ -12,4 +12,5 @@ namespace SHADE DEPTH_STENCIL = 0x10, INPUT = 0x20 }; + } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 1db410c0..df588c05 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -10,6 +10,7 @@ #include "Tools/SHLogger.h" #include "SHAttachmentDescInitParams.h" #include "SHRenderGraphStorage.h" +#include "Graphics/RenderGraph/SHSubpassCompute.h" namespace SHADE { @@ -78,36 +79,48 @@ namespace SHADE for (uint32_t i = 0; auto& node : nodes) { - // key is handle ID, value is pair (first is initial layout, second is final layout). - std::unordered_map resourceAttLayouts; + // key is handle ID, value is final layout. + std::unordered_map resourceAttFinalLayouts; if (node->subpasses.empty()) { SHLOG_ERROR("Node does not contain a subpass. Cannot configure attachment descriptions as a result. "); return; } + // attempt to get all final layouts for all resources for (auto& subpass : node->subpasses) { for (auto& color : subpass->colorReferences) { + // If final renderpass and attachment is a COLOR_PRESENT resource, make resource transition to present after last subpass if (i == nodes.size() - 1 && (node->attResources[color.attachment]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT))) - resourceAttLayouts[color.attachment] = vk::ImageLayout::ePresentSrcKHR; + resourceAttFinalLayouts[color.attachment] = vk::ImageLayout::ePresentSrcKHR; else - resourceAttLayouts[color.attachment] = color.layout; + resourceAttFinalLayouts[color.attachment] = color.layout; } for (auto& depth : subpass->depthReferences) - resourceAttLayouts[depth.attachment] = depth.layout; + resourceAttFinalLayouts[depth.attachment] = depth.layout; for (auto& input : subpass->inputReferences) - resourceAttLayouts[input.attachment] = input.layout; + resourceAttFinalLayouts[input.attachment] = input.layout; + + // Go through all subpass computes and initialize final layouts to GENERAL when a resource is detected to be used in it + //for (auto sbCompute : subpass->subpassComputes) + //{ + // auto const& indices = sbCompute->attachmentDescriptionIndices; + // for (auto& index : indices) + // { + // resourceAttFinalLayouts[index] = vk::ImageLayout::eGeneral; + // } + //} } for (uint32_t j = 0; j < node->attachmentDescriptions.size(); ++j) { auto& att = node->attachmentDescriptions[j]; att.initialLayout = vk::ImageLayout::eUndefined; - att.finalLayout = resourceAttLayouts[j]; + att.finalLayout = resourceAttFinalLayouts[j]; } ++i; } @@ -175,7 +188,7 @@ namespace SHADE // Now we want to loop through all attachments in all subpasses in the node and query // the resources being used. For each resource we want to query the type and record it // in bit fields (1 bit for each subpass). - uint32_t colorRead = 0, colorWrite = 0, depthRead = 0, depthWrite = 0, inputDependencies = 0; + uint32_t colorRead = 0, colorWrite = 0, depthRead = 0, depthWrite = 0, inputDependencies = 0, descriptorDependencies = 0; uint32_t i = 0; @@ -214,6 +227,9 @@ namespace SHADE if (subpass->inputReferences.size()) inputDependencies |= (1 << i); + if (!subpass->subpassComputes.empty()) + descriptorDependencies |= (1 << i); + // Input attachments can be any type, so we need to check what type it is for (auto& inputAtt : subpass->inputReferences) { @@ -279,6 +295,12 @@ namespace SHADE dstAccess |= vk::AccessFlagBits::eInputAttachmentRead; } + if (descriptorDependencies & (1 << i)) + { + dstStage |= vk::PipelineStageFlagBits::eComputeShader; + dstAccess |= vk::AccessFlagBits::eShaderWrite | vk::AccessFlagBits::eShaderRead; + } + //// If subpass of first renderpass, stage flag should be bottom of pipe //if (&node == &nodes.front() && i == 0) // srcStage = vk::PipelineStageFlagBits::eBottomOfPipe; @@ -293,6 +315,9 @@ namespace SHADE dep.dstAccessMask = dstAccess; dep.srcStageMask = srcStage; + + // initialize the barriers + //node->subpasses[i]->InitComputeBarriers(); } } } @@ -353,6 +378,8 @@ namespace SHADE renderGraphStorage->resourceManager = resourceManager; renderGraphStorage->descriptorPool = logicalDevice->CreateDescriptorPools(); + + renderGraphStorage->ptrToResources = &graphResources; } /***************************************************************************/ @@ -459,7 +486,7 @@ namespace SHADE } } - nodes.emplace_back(resourceManager->Create(renderGraphStorage, std::move(descInitParams), std::move(predecessors), &graphResources)); + nodes.emplace_back(resourceManager->Create(renderGraphStorage, std::move(descInitParams), std::move(predecessors))); nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); return nodes.at(nodeIndexing[nodeName]); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 9dbfa6d3..529476cf 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -57,10 +57,6 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ - //Handle logicalDeviceHdl; - - //! swapchain used for querying image count - //Handle swapchainHdl; Handle renderGraphStorage; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 48855806..0d88a93a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -83,6 +83,11 @@ namespace SHADE framebuffers[i]->HandleResize(renderpass, imageViews, fbWidth, fbHeight); } + + for (auto& subpass : subpasses) + { + subpass->HandleResize(); + } } /***************************************************************************/ @@ -105,7 +110,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept + SHRenderGraphNode::SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept : graphStorage{ renderGraphStorage} , renderpass{} , framebuffers{} @@ -116,7 +121,6 @@ namespace SHADE , subpasses{} , executed{ false } , configured{ false } - , ptrToResources{ resources } { // pipeline library initialization pipelineLibrary.Init(graphStorage->logicalDevice); @@ -173,7 +177,6 @@ namespace SHADE , subpassIndexing{ std::move(rhs.subpassIndexing) } , configured{ rhs.configured } , executed{ rhs.executed } - , ptrToResources{ rhs.ptrToResources } , pipelineLibrary{ std::move(rhs.pipelineLibrary) } , batcher{ std::move(rhs.batcher) } , spDescs{ std::move(rhs.spDescs) } @@ -197,7 +200,6 @@ namespace SHADE subpasses = std::move(rhs.subpasses); resourceAttachmentMapping = std::move(rhs.resourceAttachmentMapping); subpassIndexing = std::move(rhs.subpassIndexing); - ptrToResources = std::move(rhs.ptrToResources); pipelineLibrary = std::move(rhs.pipelineLibrary); batcher = std::move(rhs.batcher); spDescs = std::move(rhs.spDescs); @@ -233,7 +235,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(graphStorage->resourceManager->Create(graphStorage, GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(graphStorage->resourceManager->Create(graphStorage, GetHandle(), subpasses.size(), &resourceAttachmentMapping)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); subpass->Init(*graphStorage->resourceManager); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 04638c37..7c3622ad 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -64,9 +64,6 @@ namespace SHADE //! For indexing subpasses std::map subpassIndexing; - //! Pointer to resources in the render graph (for getting handle IDs) - std::unordered_map> const* ptrToResources; - //! Every renderpass will require a pipeline library that will contain pipelines compatible with this renderpass SHPipelineLibrary pipelineLibrary; @@ -89,7 +86,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors, std::unordered_map> const* resources) noexcept; + SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index d3f20665..651ba88b 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -308,6 +308,7 @@ namespace SHADE return resourceFormat; } + uint32_t SHRenderGraphResource::GetWidth(void) const noexcept { return width; @@ -323,4 +324,14 @@ namespace SHADE return imageViews [index]; } + Handle SHRenderGraphResource::GetImage(uint32_t index /*= NON_SWAPCHAIN_RESOURCE_INDEX*/) const noexcept + { + return images[index]; + } + + uint8_t SHRenderGraphResource::GetMipLevels(void) const noexcept + { + return mipLevels; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index 4bdecc49..55f25864 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -82,12 +82,15 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - vk::Format GetResourceFormat (void) const noexcept; - uint32_t GetWidth (void) const noexcept; - uint32_t GetHeight (void) const noexcept; - Handle GetImageView (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; + vk::Format GetResourceFormat (void) const noexcept; + uint32_t GetWidth (void) const noexcept; + uint32_t GetHeight (void) const noexcept; + Handle GetImageView (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; + Handle GetImage (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; + uint8_t GetMipLevels (void) const noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; + friend class SHSubpass; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h index 9fcc4528..cb274697 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h @@ -24,6 +24,9 @@ namespace SHADE //! Descriptor pool for the descriptor sets to be created in the subpasses Handle descriptorPool; + //! For accessing resources anyone in the graph + std::unordered_map> const* ptrToResources; + friend class SHRenderGraph; friend class SHRenderGraphNode; friend class SHSubpass; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 3daafb8f..e6472c52 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -8,6 +8,10 @@ #include "SHRenderGraphNode.h" #include "SHRenderGraphStorage.h" #include "Graphics/RenderGraph/SHSubpassCompute.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Swapchain/SHVkSwapchain.h" +#include "Graphics/Images/SHVkSampler.h" +#include "SHRenderGraphResource.h" namespace SHADE { @@ -27,9 +31,8 @@ namespace SHADE */ /***************************************************************************/ - SHSubpass::SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHSubpass::SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping) noexcept : resourceAttachmentMapping{ mapping } - , ptrToResources{ resources } , parentNode{ parent } , subpassIndex{ index } , superBatch{} @@ -37,6 +40,8 @@ namespace SHADE , depthReferences{} , inputReferences{} , graphStorage{ renderGraphStorage } + , subpassComputes{} + , inputImageDescriptors {SHGraphicsConstants::NUM_FRAME_BUFFERS} { } @@ -59,10 +64,10 @@ namespace SHADE , depthReferences{ std::move(rhs.depthReferences) } , inputReferences{ std::move(rhs.inputReferences) } , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } - , ptrToResources{ rhs.ptrToResources } , descriptorSetLayout{ rhs.descriptorSetLayout } , exteriorDrawCalls{ std::move(rhs.exteriorDrawCalls) } , graphStorage{ std::move(rhs.graphStorage) } + , subpassComputes{std::move (rhs.subpassComputes)} { } @@ -90,10 +95,10 @@ namespace SHADE depthReferences = std::move(rhs.depthReferences); inputReferences = std::move(rhs.inputReferences); resourceAttachmentMapping = rhs.resourceAttachmentMapping; - ptrToResources = rhs.ptrToResources; descriptorSetLayout = rhs.descriptorSetLayout; exteriorDrawCalls = std::move(rhs.exteriorDrawCalls); graphStorage = std::move(rhs.graphStorage); + subpassComputes = std::move(rhs.subpassComputes); return *this; } @@ -112,7 +117,7 @@ namespace SHADE /***************************************************************************/ void SHSubpass::AddColorOutput(std::string resourceToReference) noexcept { - colorReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); + colorReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); } /***************************************************************************/ @@ -149,7 +154,7 @@ namespace SHADE //Invalid return; } - depthReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), imageLayout }); + depthReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), imageLayout }); } /***************************************************************************/ @@ -166,7 +171,15 @@ namespace SHADE /***************************************************************************/ void SHSubpass::AddInput(std::string resourceToReference) noexcept { - inputReferences.push_back({ resourceAttachmentMapping->at(ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); + inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); + + inputNames.push_back(resourceToReference); + } + + void SHSubpass::AddGeneralInput(std::string resourceToReference) noexcept + { + inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eGeneral }); + } void SHSubpass::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept @@ -182,6 +195,17 @@ namespace SHADE { drawCall(commandBuffer); } + + // if there are subpass computes, transition all to GENERAL layout first + for (auto& sbCompute : subpassComputes) + { + + } + } + + void SHSubpass::HandleResize(void) noexcept + { + UpdateWriteDescriptors(); } void SHSubpass::AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept @@ -189,9 +213,27 @@ namespace SHADE exteriorDrawCalls.push_back(newDrawCall); } - Handle SHSubpass::ActivateSubpassCompute(Handle computeShaderModule, std::initializer_list resources) noexcept + Handle SHSubpass::AddSubpassCompute(Handle computeShaderModule/*, std::initializer_list resources*/) noexcept { - subpassCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, resources); + //// for the subpass compute to store indices to the resources, see member comments + //std::unordered_set attDescIndices{}; + //attDescIndices.reserve (resources.size()); + + //// Look for the required resources in the graph + //std::vector> subpassComputeResources{}; + //subpassComputeResources.reserve(resources.size()); + + //for (auto& resourceName : resources) + //{ + // auto resource = graphStorage->ptrToResources->at(resourceName); + // subpassComputeResources.push_back(resource); + // attDescIndices.emplace(resourceAttachmentMapping->at (resource.GetId().Raw)); + //} + + // Create the subpass compute with the resources + auto subpassCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule/*, std::move(subpassComputeResources), std::move (attDescIndices)*/); + subpassComputes.push_back(subpassCompute); + return subpassCompute; } @@ -201,6 +243,145 @@ namespace SHADE } + void SHSubpass::CreateInputDescriptors(void) noexcept + { + //std::vector bindings{}; + + //for (auto& input : inputReferences) + //{ + // SHVkDescriptorSetLayout::Binding newBinding + // { + // .Type = (input.layout == vk::ImageLayout::eShaderReadOnlyOptimal) ? vk::DescriptorType::eInputAttachment : vk::DescriptorType::eStorageImage, + // .Stage = vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, + // .BindPoint = static_cast(bindings.size()), + // .DescriptorCount = 1, + // .flags = {}, + // }; + + // bindings.push_back(newBinding); + //} + + //// We build a new descriptor set layout to store our images + //inputDescriptorLayout = graphStorage->logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, bindings); + + //// we store a sampler if its an input attachment. if it is storage image, no need sampler, store an empty handle. + //for (uint32_t i = 0; i < bindings.size(); ++i) + //{ + // if (bindings[i].Type == vk::DescriptorType::eInputAttachment) + // { + // auto newSampler = graphStorage->logicalDevice->CreateSampler(SHVkSamplerParams + // { + // .minFilter = vk::Filter::eLinear, + // .magFilter = vk::Filter::eLinear, + // .addressMode = vk::SamplerAddressMode::eRepeat, + // .mipmapMode = vk::SamplerMipmapMode::eLinear, + // .minLod = -1000, + // .maxLod = 1000 + // } + // ); + + // inputSamplers.push_back(newSampler); + // } + // else + // { + // inputSamplers.push_back({}); + // } + //} + + //// maybe do this in handle resize? + //UpdateWriteDescriptors(); + } + + void SHSubpass::UpdateWriteDescriptors(void) noexcept + { + //auto const& bindings = inputDescriptorLayout->GetBindings(); + + //std::vector variableCounts{ static_cast(bindings.size()), 0 }; + + //uint32_t i = 0; + + //// For every frame's descriptor set + //for (auto& group : inputImageDescriptors) + //{ + // if (group) + // group.Free(); + + // group = graphStorage->descriptorPool->Allocate({ inputDescriptorLayout }, variableCounts); + + // for (auto& binding : bindings) + // { + // // get the resource + // auto resource = graphStorage->ptrToResources->at(inputNames[binding.BindPoint]); + + // // If resource is swapchain image, get the correct image, if not just get 0. + // uint32_t viewIndex = (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? i : 0; + + // // layout is GENERAL if image is meant to be used as storage image, if not use SHADER_READ_ONLY_OPTINAL + // vk::ImageLayout descriptorLayout = (binding.Type == vk::DescriptorType::eStorageImage) ? vk::ImageLayout::eGeneral : vk::ImageLayout::eShaderReadOnlyOptimal; + + // // Update descriptor sets + // auto args = std::make_tuple(resource->GetImageView(viewIndex), inputSamplers[i], descriptorLayout); + // group->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, std::span{&args, 1}); + // group->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); + // } + + // ++i; + //} + } + + //void SHSubpass::InitComputeBarriers(void) noexcept + //{ + // std::unordered_set handleBarriers{}; + + // // we will have swapchainNumImages vectors of vector of barriers + // subpassComputeBarriers.resize(graphStorage->swapchain->GetNumImages()); + + // for (auto sbCompute : subpassComputes) + // { + // // for every resource the subpass compute is using + // for (auto resource : sbCompute->resources) + // { + // // Get the resource handle + // uint64_t resourceRaw = resource.GetId().Raw; + + // // if the barrier is not registered + // if (!handleBarriers.contains(resourceRaw)) + // { + // // If the resource is a swapchain image + // bool isSwapchainImage = (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)); + // for (uint32_t i = 0; i < graphStorage->swapchain->GetNumImages(); ++i) + // { + // // if swapchain image, we want the index of the swapchain image, if not take base image + // uint32_t imageIndex = isSwapchainImage ? i : 0; + + // // Prepare image barrier + // vk::ImageMemoryBarrier imageBarrier + // { + // .oldLayout = colorReferences[resourceAttachmentMapping->at(resource.GetId().Raw)].layout, + // .newLayout = vk::ImageLayout::eGeneral, + // .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + // .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + // .image = resource->GetImage(imageIndex)->GetVkImage(), + // .subresourceRange = + // { + // .aspectMask = resource->imageAspectFlags, + // .levelCount = resource->GetMipLevels(), + // .baseArrayLayer = 0, + // .layerCount = 1 + // } + // }; + + // // push the barrier + // subpassComputeBarriers[i].push_back(imageBarrier); + // } + + // // Image transition registered + // handleBarriers.emplace(resourceRaw); + // } + // } + // } + //} + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index 71496b92..48874a06 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -14,10 +14,12 @@ namespace SHADE class SHRenderGraphResource; class SHVkCommandBuffer; class SHVkDescriptorSetLayout; + class SHVkDescriptorSetGroup; class SHVkDescriptorPool; class SHRenderGraphStorage; class SHSubpassCompute; class SHVkShaderModule; + class SHVkSampler; class SH_API SHSubpass : public ISelfHandle { @@ -25,38 +27,52 @@ namespace SHADE /*---------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*---------------------------------------------------------------------*/ - Handle graphStorage; + Handle graphStorage; //! The index of the subpass in the render graph - uint32_t subpassIndex; + uint32_t subpassIndex; //! The parent renderpass that this subpass belongs to - Handle parentNode; + Handle parentNode; //! - Handle superBatch; + Handle superBatch; //! Descriptor set layout to hold attachments - Handle descriptorSetLayout; + Handle descriptorSetLayout; //! Color attachments - std::vector colorReferences; + std::vector colorReferences; //! Depth attachments - std::vector depthReferences; + std::vector depthReferences; //! Input attachments - std::vector inputReferences; + std::vector inputReferences; + + //! This is mainly for when we want to retrieve resources using names. + std::vector inputNames; //! For getting attachment reference indices using handles std::unordered_map const* resourceAttachmentMapping; - //! Pointer to resources in the render graph (for getting handle IDs) - std::unordered_map> const* ptrToResources; + //! Descriptor set group to hold the images for input + std::vector> inputImageDescriptors; + + //! Descriptor set layout for allocating descriptor set for inputs + Handle inputDescriptorLayout; + + std::vector> inputSamplers; //! Sometimes we want the subpass to do something to the images instead //! of drawing objects on the image (i.e. compute). - Handle subpassCompute; + std::vector> subpassComputes; + + ////! subpass compute image barriers. We do this because every frame has a different + ////! swapchain image. If the resource we want to transition is not a swapchain image, + ////! we duplicate the barrier anyway, not much memory wasted. ;) + //std::vector> subpassComputeBarriers{}; + //! Sometimes there exists entities that we want to render onto a render target //! but don't want it to come from the batching system. An example would be ImGUI. @@ -71,7 +87,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(Handle renderGraphStorage, Handle const& parent, uint32_t index, std::unordered_map const* mapping) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; @@ -82,14 +98,20 @@ namespace SHADE void AddColorOutput(std::string resourceToReference) noexcept; void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE_FLAGS attachmentDescriptionType = SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL) noexcept; void AddInput(std::string resourceToReference) noexcept; + void AddGeneralInput (std::string resourceToReference) noexcept; + void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; // Runtime functions void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; - void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; + void HandleResize (void) noexcept; - Handle ActivateSubpassCompute(Handle computeShaderModule, std::initializer_list resources) noexcept; + Handle AddSubpassCompute(Handle computeShaderModule/*, std::initializer_list resources*/) noexcept; void Init(ResourceManager& resourceManager) noexcept; + + //void InitComputeBarriers (void) noexcept; + void CreateInputDescriptors (void) noexcept; + void UpdateWriteDescriptors (void) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ @@ -102,5 +124,6 @@ namespace SHADE friend class SHRenderGraphNode; friend class SHRenderGraph; + friend class SHSubpass; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp index f30fa85f..79242c7d 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp @@ -11,25 +11,43 @@ namespace SHADE { - SHSubpassCompute::SHSubpassCompute(Handle graphStorage, Handle computeShaderModule, std::initializer_list resources) noexcept + SHSubpassCompute::SHSubpassCompute(Handle graphStorage, Handle computeShaderModule/*, std::vector>&& subpassComputeResources, std::unordered_set&& attDescIndices*/) noexcept : pipeline{} { SHPipelineLayoutParams pipelineLayoutParams { + .shaderModules = {computeShaderModule}, .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() }; - //pipeline = logicalDevice->CreateComputePipeline() + // Create descriptor set from + pipelineLayout = graphStorage->logicalDevice->CreatePipelineLayout (pipelineLayoutParams); - // Get the descriptor set layouts required to allocate. we will bind a different pipeline layout, one that includes the layout for global. - auto const& layouts = pipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); + // Create the compute pipeline + pipeline = graphStorage->logicalDevice->CreateComputePipeline(pipelineLayout); + + pipeline->ConstructPipeline(); + + // Get the descriptor set layouts required to allocate. We only want the ones for allocate because + // global descriptors are already bound in the main system. + //auto const& layouts = pipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); // Variable counts for the descriptor sets (all should be 1). - std::vector variableCounts{ static_cast(layouts.size()) }; - std::fill(variableCounts.begin(), variableCounts.end(), 0); + //std::vector variableCounts{ static_cast(layouts.size()) }; + //std::fill(variableCounts.begin(), variableCounts.end(), 0); - // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) - descSetGroup = graphStorage->descriptorPool->Allocate(layouts, variableCounts); + //// Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) + //descSetGroup = graphStorage->descriptorPool->Allocate(layouts, variableCounts); + + //// save the resources + //resources = std::move (subpassComputeResources); + + //// we save this because when we configure the graph, we want to make sure final layouts + //// of attachment descriptions are set to GENERAL. See ConfigureAttachmentDescriptions in SHRenderGraph.cpp. + //attachmentDescriptionIndices = std::move (attDescIndices); + + //descSetGroup->ModifyWriteDescImage (SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, ) } + //SHSubpass } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h index 8dfc361e..aae2a9b9 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h @@ -3,6 +3,7 @@ #include "Resource/Handle.h" #include #include +#include namespace SHADE { @@ -12,26 +13,37 @@ namespace SHADE class SHVkLogicalDevice; class SHVkPipelineLayout; class SHRenderGraphStorage; + class SHRenderGraphResource; class SHVkShaderModule; class SHSubpassCompute { private: //! To run the dispatch command - Handle pipeline; + Handle pipeline; - //! Pipeline layout for the pipline creation - Handle pipelineLayout; + //! Pipeline layout for the pipeline creation + Handle pipelineLayout; - //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) - Handle descSetGroup; + ////! Descriptor set group to hold the images for reading (STORAGE_IMAGE) + //Handle descSetGroup; - //! Required resources to be used in the descriptors - std::vector resourcesRequired; + ////! Required resources to be used in the descriptors + //std::vector resourcesRequired; + + ////! vector of resources needed by the subpass compute + //std::vector> resources; + + ////! we save this because when we configure the graph, we want to make sure final layouts + ////! of attachment descriptions are set to GENERAL. See ConfigureAttachmentDescriptions in SHRenderGraph.cpp. + //std::unordered_set attachmentDescriptionIndices{}; public: - SHSubpassCompute(Handle graphStorage, Handle computeShaderModule, std::initializer_list resources) noexcept; + SHSubpassCompute(Handle graphStorage, Handle computeShaderModule/*, std::vector>&& subpassComputeResources, std::unordered_set&& attDescIndices*/) noexcept; + //void ExecuteSubpass (void) noexcept; + friend class SHRenderGraph; + friend class SHSubpass; }; } diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp index 41327988..e635f763 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp @@ -177,6 +177,9 @@ namespace SHADE return vk::DescriptorType::eStorageBufferDynamic; case SpvReflectDescriptorType::SPV_REFLECT_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: return vk::DescriptorType::eInputAttachment; + case SpvReflectDescriptorType::SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_IMAGE: + return vk::DescriptorType::eStorageImage; + break; default: return vk::DescriptorType::eCombinedImageSampler; break; diff --git a/TempShaderFolder/GreyscaleCs.glsl b/TempShaderFolder/GreyscaleCs.glsl new file mode 100644 index 00000000..3167a57c --- /dev/null +++ b/TempShaderFolder/GreyscaleCs.glsl @@ -0,0 +1,38 @@ +/* Start Header *****************************************************************/ + +/*! \file (e.g. kirsch.comp) + + \author William Zheng, william.zheng, 60001906. Brandon Mak, brandon.hao 390003920. + + \par william.zheng\@digipen.edu. brandon.hao\@digipen.edu. + + \date Sept 20, 2022 + + \brief Copyright (C) 20xx DigiPen Institute of Technology. + + Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. */ + + /* End Header *******************************************************************/ + +#version 450 + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, rgba8) uniform image2D targetImage; + + +void main() +{ + // load the image + vec4 color = imageLoad (targetImage, ivec2 (gl_GlobalInvocationID)); + + // get the average + float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; + + // store result into result image + imageStore(targetImage, ivec2(gl_GlobalInvocationID), vec4(average, average, average, 1.0f)); + +} + + + + diff --git a/TempShaderFolder/GreyscaleCs.spv b/TempShaderFolder/GreyscaleCs.spv new file mode 100644 index 0000000000000000000000000000000000000000..5b36e00317061a12d75127def8a67c940e8969c6 GIT binary patch literal 1400 zcmZ9K+fEZv6o$97g$e>9Ld9b%o)E04oRoku(M*~&0pb-`lVLh(CK*~%#wI3S=!H+< zjql+b_yoRy@8OM!|2NDsqkFQl*8i{5UTaTjWO2;7b8g&Cx@~uMX55Gv=O)}}roHyt zcJnmtG}qQwiI{SwERdLK#Z;urlH(xm;h2$J6c2Z1gX!XwSyFZ9z6+Gq)oc6S-k#Tf zfbRiXw{r!ROT@>?i$!bVc6<=`~7t}_mcimkhFTkei)>2zt?)5<&@oZ>0lTQi1$>J8n-3%GTe~O0W<4_ zggo$z94|=EYHH?gWE*gqJuiDyTwPLAydEOM)UOLyrQwhTO*Ae|yjJ(mp|0i7pF`}n zSTOhI%n46P*8w{8oR)^;Md@kp1W!Jgx#&s$taLrc;VzioHzgeNv*W|s=1cQ03e(^G4`hG+`DMraOTzRs|E6r`KK{*rF2o!w>dsue z3mii24gC$aL&0p8Ut;*L*#Yms|HK?%X5x*(JHqUGQo^3W^tdEpZy$u&(Ok|Qs4Dxa z<(!l=?n=%v>%QXHCI1ew_>RQU^Qwe?_;z($?gsZte(rWl0>@stkNsotpA`dcNO*_3 z#PaUQCXbz1-d)-7mUmA!?*soSuXSHG_3&A(hq9@)B(Yk{vf-`PifrBz-fBIPO+9?f z#-8D*!JeCv;+`K17x%m>3}-uiA{&ll+*8?b#XUb0CKjLFcTG0^4X^))H*&nMSK(c@ WB;*i>kN+^#y}2{>@&8uWEy*9dZd@?{ literal 0 HcmV?d00001 From 304071cb0abc4d629bcf25aab651b73f87061028 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 22 Oct 2022 00:42:50 +0800 Subject: [PATCH 410/793] Apparently static keyword gives error but it compiles --- SHADE_Engine/src/Resource/SHResourceManager.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index cff4e84b..fb0dcc6a 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -134,7 +134,7 @@ namespace SHADE /* Query Functions */ /*-----------------------------------------------------------------------------------*/ template - std::optional SHResourceManager::GetAssetID(Handle handle) + static std::optional SHResourceManager::GetAssetID(Handle handle) { const Handle GENERIC_HANDLE = Handle(handle); auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); From 76f83068baa2c9d5760079f91a5b821945b9381e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 22 Oct 2022 02:07:28 +0800 Subject: [PATCH 411/793] Added type information to SHShaderBlockInterface variables --- .../BlockInterface/SHShaderBlockInterface.cpp | 14 ++++++++ .../BlockInterface/SHShaderBlockInterface.h | 13 +++++++ .../Graphics/Shaders/SHShaderReflected.cpp | 34 +++++++++++++++++-- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp index 75ede865..f214c094 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp @@ -14,6 +14,7 @@ namespace SHADE return; } variables.emplace_back(std::move(newVariable)); + variableNames.emplace_back(name); variableIndexing.try_emplace(std::move(name), static_cast(variables.size() - 1)); } @@ -41,6 +42,19 @@ namespace SHADE return variableIndexing.at(variableName); } + const std::string& SHShaderBlockInterface::GetVariableName(uint32_t index) const noexcept + { + if (index < variableNames.size()) + return variableNames.at(index); + + return {}; + } + + size_t SHShaderBlockInterface::GetVariableCount() const noexcept + { + return variables.size(); + } + SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept : bytesRequired{ 0 } {} diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h index e546b452..ae75e2c8 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h @@ -12,13 +12,24 @@ namespace SHADE public: struct Variable { + enum class Type + { + OTHER, + FLOAT, + INT, + VECTOR2, + VECTOR3, + VECTOR4 + }; //! Offset of the variable in the block uint32_t offset; + Type type; }; private: //! containers of variable information std::vector variables; + std::vector variableNames; std::unordered_map variableIndexing; //! bytes required by the block (includes padding). This variable is required @@ -29,6 +40,8 @@ namespace SHADE Variable const* const GetVariable (std::string const& variableName) const noexcept; Variable const* const GetVariable(uint32_t index) const noexcept; uint32_t GetVariableIndex(std::string const& variableName) const; + const std::string& GetVariableName(uint32_t index) const noexcept; + size_t GetVariableCount() const noexcept; /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp index 41327988..90a0c84b 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp @@ -97,17 +97,45 @@ namespace SHADE switch (member.type_description->op) { case SpvOp::SpvOpTypeFloat: - interfaceHdl->AddVariable(parentVarName + std::string(member.name), SHShaderBlockInterface::Variable(parentOffset + member.offset)); + interfaceHdl->AddVariable + ( + parentVarName + std::string(member.name), + SHShaderBlockInterface::Variable + ( + parentOffset + member.offset, + SHShaderBlockInterface::Variable::Type::FLOAT + ) + ); biggestAlignment = std::max (biggestAlignment, 4u); break; case SpvOp::SpvOpTypeVector: - interfaceHdl->AddVariable(parentVarName + std::string(member.name), SHShaderBlockInterface::Variable(parentOffset + member.offset)); + SHShaderBlockInterface::Variable::Type varType; + switch (dim) + { + case 2: varType = SHShaderBlockInterface::Variable::Type::VECTOR2; break; + case 3: varType = SHShaderBlockInterface::Variable::Type::VECTOR3; break; + case 4: varType = SHShaderBlockInterface::Variable::Type::VECTOR4; break; + default: varType = SHShaderBlockInterface::Variable::Type::OTHER; break; + } + interfaceHdl->AddVariable + ( + parentVarName + std::string(member.name), + SHShaderBlockInterface::Variable(parentOffset + member.offset, varType) + ); if (dim == 3) dim = 4; biggestAlignment = std::max (biggestAlignment, dim * member.type_description->traits.numeric.scalar.width / 8); break; case SpvOp::SpvOpTypeInt: - interfaceHdl->AddVariable(parentVarName + std::string(member.name), SHShaderBlockInterface::Variable(parentOffset + member.offset)); + interfaceHdl->AddVariable + ( + parentVarName + std::string(member.name), + SHShaderBlockInterface::Variable + ( + parentOffset + member.offset, + SHShaderBlockInterface::Variable::Type::INT + ) + ); biggestAlignment = std::max(biggestAlignment, 4u); break; case SpvOp::SpvOpTypeStruct: From db751bd1418955f3b35be6e384aeedff65cdf438 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 22 Oct 2022 18:22:26 +0800 Subject: [PATCH 412/793] Editor & Scripts can now override Physics-Based objects' Transforms --- Assets/Editor/Layouts/UserLayout.ini | 2 +- .../src/Application/SBApplication.cpp | 4 +- .../src/Math/Transform/SHTransformSystem.cpp | 44 +++++++++++++++++-- .../src/Math/Transform/SHTransformSystem.h | 42 +++++++++++++++--- 4 files changed, 80 insertions(+), 12 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 396b853b..7b0a70f8 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -38,7 +38,7 @@ Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=-227,-1256 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1481,1036 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=349,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8733e7b9..3675e275 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -83,11 +83,13 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); - SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index a3ca3e75..4b4f1cce 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -28,8 +28,12 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHTransformSystem::TransformUpdateRoutine::TransformUpdateRoutine() - : SHSystemRoutine { "Transform Update", true } + SHTransformSystem::TransformPostLogicUpdate::TransformPostLogicUpdate() + : SHSystemRoutine { "Transform Post-Logic Update", true } + {} + + SHTransformSystem::TransformPostPhysicsUpdate::TransformPostPhysicsUpdate() + : SHSystemRoutine { "Transform Post-Physics Update", false } {} @@ -37,13 +41,20 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHTransformSystem::TransformUpdateRoutine::Execute(double) noexcept + void SHTransformSystem::TransformPostLogicUpdate::Execute(double) noexcept { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); UpdateEntity(SCENE_GRAPH.GetRoot()); } + void SHTransformSystem::TransformPostPhysicsUpdate::Execute(double dt) noexcept + { + // Get the current scene graph to traverse and update + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + UpdateEntityAndClear(SCENE_GRAPH.GetRoot()); + } + void SHTransformSystem::Init() { std::shared_ptr thisReceiver { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; @@ -175,6 +186,33 @@ namespace SHADE } UpdateEntity(child); + } + } + + + void SHTransformSystem::UpdateEntityAndClear(const SHSceneNode* node) + { + const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); + const bool HAS_PARENT_CHANGED = NODE_TRANSFORM && NODE_TRANSFORM->dirty; + + for (const auto* child : node->GetChildren()) + { + auto* childTransform = SHComponentManager::GetComponent_s(child->GetEntityID()); + if (childTransform) + { + // Only update if node in hierarchy and component are both active + const bool IS_NODE_ACTIVE = child->IsActive(); + if (IS_NODE_ACTIVE && childTransform->isActive) + { + if (childTransform->dirty || HAS_PARENT_CHANGED) + { + UpdateTransform(*childTransform, NODE_TRANSFORM); + childTransform->dirty = true; + } + } + } + + UpdateEntityAndClear(child); // Clear dirty flag after all children are updated if (childTransform) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 95957830..256c1561 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -45,25 +45,52 @@ namespace SHADE /* System Routines */ /*---------------------------------------------------------------------------------*/ - class SH_API TransformUpdateRoutine final: public SHSystemRoutine + class SH_API TransformPostLogicUpdate final: public SHSystemRoutine { public: /*-------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*-------------------------------------------------------------------------------*/ - TransformUpdateRoutine (); - ~TransformUpdateRoutine () = default; + TransformPostLogicUpdate (); + ~TransformPostLogicUpdate () = default; - TransformUpdateRoutine (const TransformUpdateRoutine&) = delete; - TransformUpdateRoutine (TransformUpdateRoutine&&) = delete; + TransformPostLogicUpdate (const TransformPostLogicUpdate&) = delete; + TransformPostLogicUpdate (TransformPostLogicUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Operator Overloads */ /*-------------------------------------------------------------------------------*/ - TransformUpdateRoutine& operator= (const TransformUpdateRoutine&) = delete; - TransformUpdateRoutine& operator= (TransformUpdateRoutine&&) = delete; + TransformPostLogicUpdate& operator= (const TransformPostLogicUpdate&) = delete; + TransformPostLogicUpdate& operator= (TransformPostLogicUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + void Execute(double dt) noexcept override; + }; + + class SH_API TransformPostPhysicsUpdate final: public SHSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + TransformPostPhysicsUpdate (); + ~TransformPostPhysicsUpdate () = default; + + TransformPostPhysicsUpdate (const TransformPostPhysicsUpdate&) = delete; + TransformPostPhysicsUpdate (TransformPostPhysicsUpdate&&) = delete; + + /*-------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-------------------------------------------------------------------------------*/ + + TransformPostPhysicsUpdate& operator= (const TransformPostPhysicsUpdate&) = delete; + TransformPostPhysicsUpdate& operator= (TransformPostPhysicsUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ @@ -88,6 +115,7 @@ namespace SHADE static void UpdateChildrenLocalTransforms (SHSceneNode* node); static void UpdateEntity (const SHSceneNode* node); + static void UpdateEntityAndClear (const SHSceneNode* node); static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); }; From 9d8dfd334f5c58636f2bc98273a096bd35847711 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 22 Oct 2022 19:38:02 +0800 Subject: [PATCH 413/793] Added serialization interfaces for Material (missing Shader) --- .../MiddleEnd/Interface/SHMaterial.cpp | 6 +- .../Graphics/MiddleEnd/Interface/SHMaterial.h | 16 ++- .../MiddleEnd/Interface/SHMaterial.hpp | 31 ++++- .../Serialization/SHSerializationHelper.hpp | 116 +++++++++++++++++- .../Serialization/SHSerializationTools.cpp | 67 ++++++++++ .../src/Serialization/SHSerializationTools.h | 54 ++++++++ .../src/Serialisation/ReflectionUtilities.cxx | 4 - 7 files changed, 273 insertions(+), 21 deletions(-) create mode 100644 SHADE_Engine/src/Serialization/SHSerializationTools.cpp create mode 100644 SHADE_Engine/src/Serialization/SHSerializationTools.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp index 36e30010..b6e1974f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.cpp @@ -23,7 +23,7 @@ namespace SHADE } // Allocate memory for properties - const Handle SHADER_INFO = getShaderBlockInterface(); + const Handle SHADER_INFO = GetShaderBlockInterface(); propMemorySize = SHADER_INFO ? SHADER_INFO->GetBytesRequired() : 0; if (propMemorySize <= 0) { @@ -59,14 +59,14 @@ namespace SHADE size_t SHMaterial::GetPropertiesMemorySize() const noexcept { - const Handle SHADER_INFO = getShaderBlockInterface(); + const Handle SHADER_INFO = GetShaderBlockInterface(); return SHADER_INFO ? SHADER_INFO->GetBytesRequired() : 0; } /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - Handle SHMaterial::getShaderBlockInterface() const noexcept + Handle SHMaterial::GetShaderBlockInterface() const noexcept { return pipeline->GetPipelineLayout()->GetShaderBlockInterface ( diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h index ec546fd5..ad7da4a6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.h @@ -50,13 +50,24 @@ namespace SHADE template void SetProperty(const std::string& key, const T& value); template + void SetProperty(uint32_t memOffset, const T& value); + template T& GetProperty(const std::string& key); template const T& GetProperty(const std::string& key) const; + template + T& GetProperty(uint32_t memOffset); + template + const T& GetProperty(uint32_t memOffset) const; void ResetProperties(); void ExportProperties(void* dest) const noexcept; Byte GetPropertiesMemorySize() const noexcept; + /*-----------------------------------------------------------------------------*/ + /* Query Functions */ + /*-----------------------------------------------------------------------------*/ + Handle GetShaderBlockInterface() const noexcept; + private: /*-----------------------------------------------------------------------------*/ /* Data Members */ @@ -64,11 +75,6 @@ namespace SHADE Handle pipeline; std::unique_ptr propMemory; Byte propMemorySize = 0; - - /*-----------------------------------------------------------------------------*/ - /* Helper Functions */ - /*-----------------------------------------------------------------------------*/ - Handle getShaderBlockInterface() const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp index 49587921..3e56bfd5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMaterial.hpp @@ -25,7 +25,7 @@ namespace SHADE template void SHMaterial::SetProperty(const std::string& key, const T& value) { - const auto SHADER_INFO = getShaderBlockInterface(); + const auto SHADER_INFO = GetShaderBlockInterface(); const auto PROP_INFO = SHADER_INFO->GetVariable(key); if (PROP_INFO == nullptr) { @@ -36,14 +36,25 @@ namespace SHADE T* dataPtr = propMemory.get() + PROP_INFO->offset; *dataPtr = value; } + + template + void SHMaterial::SetProperty(uint32_t memOffset, const T& value) + { + // Check if out of bounds + if (memOffset + sizeof(T) > propMemorySize) + throw std::invalid_argument("Attempted to set an invalid property!"); + // Set + (*reinterpret_cast(propMemory.get() + memOffset)) = value; + } + template T& SHMaterial::GetProperty(const std::string& key) { - const auto SHADER_INFO = getShaderBlockInterface(); + const auto SHADER_INFO = GetShaderBlockInterface(); const auto PROP_INFO = SHADER_INFO->GetVariable(key); if (PROP_INFO == nullptr) { - throw std::invalid_argument("Attempted to set an invalid property!"); + throw std::invalid_argument("Attempted to retrieve an invalid property!"); } // Get offset and return the memory directly @@ -55,5 +66,19 @@ namespace SHADE { return const_cast(const_cast(this)->GetProperty(key)); } + + template + const T& SHMaterial::GetProperty(uint32_t memOffset) const + { + // Check if out of bounds + if (memOffset + sizeof(T) > propMemorySize) + throw std::invalid_argument("Attempted to retrieve an invalid property!"); + return *(reinterpret_cast(propMemory.get() + memOffset)); + } + template + T& SHMaterial::GetProperty(uint32_t memOffset) + { + return const_cast(const_cast(this)->GetProperty(memOffset)); + } } diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 48689298..048867a5 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -11,10 +11,117 @@ #include "Math/Vector/SHVec4.h" #include "Resource/SHResourceManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "SHSerializationTools.h" namespace YAML { using namespace SHADE; + template<> + struct convert + { + static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; + static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view PROPS_YAML_TAG = "Properties"; + + static YAML::Node encode(SHMaterial const& rhs) + { + // Write Properties + YAML::Node propertiesNode; + Handle pipelineProperties = rhs.GetShaderBlockInterface(); + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + if (!VARIABLE) + break; + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + YAML::Node propNode; + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + propNode = rhs.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + propNode = rhs.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + propertiesNode[VAR_NAME.data()] = propNode; + } + + // Write Material + YAML::Node node; + + node[VERT_SHADER_YAML_TAG.data()] = 0; + node[FRAG_SHADER_YAML_TAG.data()] = 0; + node[PROPS_YAML_TAG.data()] = propertiesNode; + + return node; + } + static bool decode(YAML::Node const& node, SHMaterial& rhs) + { + if (node[VERT_SHADER_YAML_TAG.data()]) + { + // TODO + } + if (node[FRAG_SHADER_YAML_TAG.data()]) + { + // TODO + } + if (node[PROPS_YAML_TAG.data()]) + { + // Loop through all properties + Handle pipelineProperties = rhs.GetShaderBlockInterface(); + const YAML::Node& PROPS_NODE = node[PROPS_YAML_TAG.data()]; + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); + const auto& PROP_NODE = PROPS_NODE[PROP_NAME.data()]; + if (PROP_NODE) + { + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec2(PROP_NODE)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec3(PROP_NODE)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec4(PROP_NODE)); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + } + } + } + return true; + } + }; + template<> struct convert { @@ -160,18 +267,15 @@ namespace SHADE auto propType = prop.get_type(); if (propType == rttr::type::get()) { - SHVec4 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as(), propertyNode["W"].as() }; - prop.set_value(component, vec); + prop.set_value(component, SHSerializationTools::YAMLToVec4(propertyNode)); } else if (propType == rttr::type::get()) { - SHVec3 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as() }; - prop.set_value(component, vec); + prop.set_value(component, SHSerializationTools::YAMLToVec3(propertyNode)); } else if (propType == rttr::type::get()) { - SHVec2 vec{ propertyNode["X"].as(), propertyNode["Y"].as() }; - prop.set_value(component, vec); + prop.set_value(component, SHSerializationTools::YAMLToVec2(propertyNode)); } else if (propType.is_arithmetic()) { diff --git a/SHADE_Engine/src/Serialization/SHSerializationTools.cpp b/SHADE_Engine/src/Serialization/SHSerializationTools.cpp new file mode 100644 index 00000000..86a74613 --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHSerializationTools.cpp @@ -0,0 +1,67 @@ +/************************************************************************************//*! +\file SHSerializationTools.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 22, 2022 +\brief Contains the definition of functions of the SHSerializationTools class. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHSerializationTools.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* YAML Serialization Functions */ + /*-----------------------------------------------------------------------------------*/ + YAML::Node SHSerializationTools::ValToYAML(const SHVec2& vec) + { + YAML::Node node; + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = vec.x; + node["Y"] = vec.y; + return node; + } + YAML::Node SHSerializationTools::ValToYAML(const SHVec3& vec) + { + YAML::Node node; + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = vec.x; + node["Y"] = vec.y; + node["Z"] = vec.z; + return node; + } + YAML::Node SHSerializationTools::ValToYAML(const SHVec4& vec) + { + YAML::Node node; + node.SetStyle(YAML::EmitterStyle::Flow); + node["X"] = vec.x; + node["Y"] = vec.y; + node["Z"] = vec.z; + node["W"] = vec.w; + return node; + } + + /*-----------------------------------------------------------------------------------*/ + /* YAML Deserialization Functions */ + /*-----------------------------------------------------------------------------------*/ + SHVec2 SHSerializationTools::YAMLToVec2(const YAML::Node& node) + { + return SHVec2 { node["X"].as(), node["Y"].as() }; + } + + SHVec3 SHSerializationTools::YAMLToVec3(const YAML::Node& node) + { + return SHVec3 { node["X"].as(), node["Y"].as(), node["Z"].as() }; + } + + SHVec4 SHSerializationTools::YAMLToVec4(const YAML::Node& node) + { + return SHVec4 { node["X"].as(), node["Y"].as(), node["Z"].as(), node["W"].as() }; + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Serialization/SHSerializationTools.h b/SHADE_Engine/src/Serialization/SHSerializationTools.h new file mode 100644 index 00000000..3a3f6645 --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHSerializationTools.h @@ -0,0 +1,54 @@ +/************************************************************************************//*! +\file SHSerializationTools.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 22, 2022 +\brief Contains the class definition of SHSerializationTools. + + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include +// Project Includes +#include "SH_API.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" + +namespace SHADE +{ + /*************************************************************************************/ + /*! + \brief + Static class that contains useful functions for converting values to YAML Nodes + and vice versa. + */ + /*************************************************************************************/ + class SH_API SHSerializationTools + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + SHSerializationTools() = delete; + + /*---------------------------------------------------------------------------------*/ + /* YAML Serialization Functions */ + /*---------------------------------------------------------------------------------*/ + static YAML::Node ValToYAML(const SHVec2& vec); + static YAML::Node ValToYAML(const SHVec3& vec); + static YAML::Node ValToYAML(const SHVec4& vec); + + /*---------------------------------------------------------------------------------*/ + /* YAML Deserialization Functions */ + /*---------------------------------------------------------------------------------*/ + static SHVec2 YAMLToVec2(const YAML::Node& node); + static SHVec3 YAMLToVec3(const YAML::Node& node); + static SHVec4 YAMLToVec4(const YAML::Node& node); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 3e963818..f114d01b 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -184,10 +184,6 @@ namespace SHADE void ReflectionUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) { - if (fieldInfo->FieldType == System::Int16::typeid) - { - fieldInfo->SetValue(object, node.as()); - } if (fieldAssignYaml (fieldInfo, object, node) || fieldAssignYaml (fieldInfo, object, node) || fieldAssignYaml (fieldInfo, object, node) || From ebfcf1c6bbbeae4c8a16c7d96ed3be9b4205fb6c Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 22 Oct 2022 20:16:38 +0800 Subject: [PATCH 414/793] Transform now stores orientation as Quaternions. Interface unchanged --- SHADE_Application/src/Scenes/SBTestScene.cpp | 6 +- SHADE_Engine/src/Math/SHMatrix.cpp | 81 +++----- SHADE_Engine/src/Math/SHMatrix.h | 2 + SHADE_Engine/src/Math/SHQuaternion.cpp | 174 +++++++----------- SHADE_Engine/src/Math/SHQuaternion.h | 9 +- .../src/Math/Transform/SHTransform.cpp | 18 +- SHADE_Engine/src/Math/Transform/SHTransform.h | 22 +-- .../Math/Transform/SHTransformComponent.cpp | 78 +++----- .../src/Math/Transform/SHTransformComponent.h | 36 ++-- .../src/Math/Transform/SHTransformSystem.cpp | 75 ++++---- .../src/Math/Transform/SHTransformSystem.h | 3 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 6 +- 12 files changed, 209 insertions(+), 301 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index be09768b..23259ee4 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -104,10 +104,10 @@ namespace Sandbox transform.SetWorldRotation(SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber()); transform.SetWorldScale(TEST_OBJ_SCALE); - if (const bool IS_EVEN = (y * NUM_ROWS + x) % 2; IS_EVEN) + //if (const bool IS_EVEN = (y * NUM_ROWS + x) % 2; IS_EVEN) collider.AddBoundingBox(SHVec3::One * 0.5f, SHVec3::Zero); - else - collider.AddBoundingSphere(0.5f, SHVec3::Zero); + //else + // collider.AddBoundingSphere(0.5f, SHVec3::Zero); stressTestObjects.emplace_back(entity); } diff --git a/SHADE_Engine/src/Math/SHMatrix.cpp b/SHADE_Engine/src/Math/SHMatrix.cpp index 571fa4e0..ec3951e2 100644 --- a/SHADE_Engine/src/Math/SHMatrix.cpp +++ b/SHADE_Engine/src/Math/SHMatrix.cpp @@ -295,32 +295,33 @@ namespace SHADE ) != 0; } + SHMatrix::operator XMMATRIX() const noexcept + { + return XMLoadFloat4x4(this); + } + SHMatrix operator*(float lhs, const SHMatrix& rhs) noexcept { return rhs * lhs; } - /*-----------------------------------------------------------------------------------*/ /* Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ void SHMatrix::Transpose() noexcept { - const XMMATRIX M = XMLoadFloat4x4(this); - XMStoreFloat4x4(this, XMMatrixTranspose(M)); + XMStoreFloat4x4(this, XMMatrixTranspose(*this)); } void SHMatrix::Invert() noexcept { - const XMMATRIX M = XMLoadFloat4x4(this); - XMStoreFloat4x4(this, XMMatrixInverse(nullptr, M)); + XMStoreFloat4x4(this, XMMatrixInverse(nullptr, *this)); } float SHMatrix::Determinant() const noexcept { - const XMMATRIX M = XMLoadFloat4x4(this); - return XMVectorGetX(XMMatrixDeterminant(M)); + return XMVectorGetX(XMMatrixDeterminant(*this)); } std::string SHMatrix::ToString() const noexcept @@ -337,9 +338,8 @@ namespace SHADE bool SHMatrix::Decompose(SHVec3& translation, SHVec3& rotation, SHVec3& scale) const noexcept { XMVECTOR s, r, t; - const XMMATRIX M = XMLoadFloat4x4(this); - if (!XMMatrixDecompose(&s, &r, &t, M)) + if (!XMMatrixDecompose(&s, &r, &t, *this)) return false; SHQuaternion orientation; @@ -356,9 +356,8 @@ namespace SHADE bool SHMatrix::Decompose(SHVec3& translation, SHQuaternion& orientation, SHVec3& scale) const noexcept { XMVECTOR s, r, t; - const XMMATRIX M = XMLoadFloat4x4(this); - if (!XMMatrixDecompose(&s, &r, &t, M)) + if (!XMMatrixDecompose(&s, &r, &t, *this)) return false; XMStoreFloat3(&scale, s); @@ -376,8 +375,7 @@ namespace SHADE { SHMatrix result; - const XMMATRIX M = XMLoadFloat4x4(&matrix); - XMStoreFloat4x4(&result, XMMatrixTranspose(M)); + XMStoreFloat4x4(&result, XMMatrixTranspose(matrix)); return result; } @@ -385,8 +383,7 @@ namespace SHADE { SHMatrix result; - const XMMATRIX M = XMLoadFloat4x4(&matrix); - XMStoreFloat4x4(&result, XMMatrixInverse(nullptr, M)); + XMStoreFloat4x4(&result, XMMatrixInverse(nullptr, matrix)); return result; } @@ -401,8 +398,8 @@ namespace SHADE SHMatrix SHMatrix::Translate(const SHVec3& pos) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixTranslation(pos.x, pos.y, pos.z)); + XMStoreFloat4x4(&result, XMMatrixTranslation(pos.x, pos.y, pos.z)); return result; } @@ -410,25 +407,23 @@ namespace SHADE { SHMatrix result; - const XMVECTOR A = XMLoadFloat3(&axis); - XMStoreFloat4x4(&result, XMMatrixRotationAxis(A, angleInRad)); - + XMStoreFloat4x4(&result, XMMatrixRotationAxis(axis, angleInRad)); return result; } SHMatrix SHMatrix::Rotate(float yaw, float pitch, float roll) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYaw(pitch, yaw, roll)); + XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYaw(pitch, yaw, roll)); return result; } SHMatrix SHMatrix::Rotate(const SHVec3& eulerAngles) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYaw(eulerAngles.x, eulerAngles.y, eulerAngles.z)); + XMStoreFloat4x4(&result, XMMatrixRotationRollPitchYawFromVector(eulerAngles)); return result; } @@ -436,57 +431,55 @@ namespace SHADE { SHMatrix result; - const XMVECTOR Q = XMLoadFloat4(&q); - XMStoreFloat4x4(&result, XMMatrixRotationQuaternion(Q)); - + XMStoreFloat4x4(&result, XMMatrixRotationQuaternion(q)); return result; } SHMatrix SHMatrix::RotateX(float angleInRad) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixRotationX(angleInRad)); + XMStoreFloat4x4(&result, XMMatrixRotationX(angleInRad)); return result; } SHMatrix SHMatrix::RotateY(float angleInRad) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixRotationY(angleInRad)); + XMStoreFloat4x4(&result, XMMatrixRotationY(angleInRad)); return result; } SHMatrix SHMatrix::RotateZ(float angleInRad) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixRotationZ(angleInRad)); + XMStoreFloat4x4(&result, XMMatrixRotationZ(angleInRad)); return result; } SHMatrix SHMatrix::Scale(float uniformScaleFactor) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixScaling(uniformScaleFactor, uniformScaleFactor, uniformScaleFactor)); + XMStoreFloat4x4(&result, XMMatrixScaling(uniformScaleFactor, uniformScaleFactor, uniformScaleFactor)); return result; } SHMatrix SHMatrix::Scale(float x, float y, float z) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixScaling(x, y, z)); + XMStoreFloat4x4(&result, XMMatrixScaling(x, y, z)); return result; } SHMatrix SHMatrix::Scale(const SHVec3& scale) noexcept { SHMatrix result; - XMStoreFloat4x4(&result, XMMatrixScaling(scale.x, scale.y, scale.z)); + XMStoreFloat4x4(&result, XMMatrixScalingFromVector(scale)); return result; } @@ -494,12 +487,7 @@ namespace SHADE { SHMatrix result; - const XMVECTOR EYE = XMLoadFloat3(&eye); - const XMVECTOR TGT = XMLoadFloat3(&target); - const XMVECTOR UP = XMLoadFloat3(&up); - - XMStoreFloat4x4(&result, XMMatrixLookAtRH(EYE, TGT, UP)); - + XMStoreFloat4x4(&result, XMMatrixLookAtRH(eye, target, up)); return result; } @@ -507,12 +495,7 @@ namespace SHADE { SHMatrix result; - const XMVECTOR EYE = XMLoadFloat3(&eye); - const XMVECTOR TGT = XMLoadFloat3(&target); - const XMVECTOR UP = XMLoadFloat3(&up); - - XMStoreFloat4x4(&result, XMMatrixLookAtLH(EYE, TGT, UP)); - + XMStoreFloat4x4(&result, XMMatrixLookAtLH(eye, target, up)); return result; } @@ -522,8 +505,8 @@ namespace SHADE const SHVec3 FWD_HAT = SHVec3::Normalise(-forward); - const XMVECTOR Z_HAT = XMVector3Normalize(XMLoadFloat3(&FWD_HAT)); - const XMVECTOR X_HAT = XMVector3Normalize(XMVector3Cross(XMLoadFloat3(&up), Z_HAT)); + const XMVECTOR Z_HAT = XMVector3Normalize(FWD_HAT); + const XMVECTOR X_HAT = XMVector3Normalize(XMVector3Cross(up, Z_HAT)); const XMVECTOR Y_HAT = XMVector3Cross(Z_HAT, X_HAT); XMStoreFloat3(reinterpret_cast(&result._11), X_HAT); @@ -543,8 +526,8 @@ namespace SHADE const SHVec3 FWD_HAT = SHVec3::Normalise(forward); - const XMVECTOR Z_HAT = XMVector3Normalize(XMLoadFloat3(&FWD_HAT)); - const XMVECTOR X_HAT = XMVector3Normalize(XMVector3Cross(XMLoadFloat3(&up), Z_HAT)); + const XMVECTOR Z_HAT = XMVector3Normalize(FWD_HAT); + const XMVECTOR X_HAT = XMVector3Normalize(XMVector3Cross(up, Z_HAT)); const XMVECTOR Y_HAT = XMVector3Cross(Z_HAT, X_HAT); XMStoreFloat3(reinterpret_cast(&result._11), X_HAT); @@ -563,7 +546,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixPerspectiveFovRH(fov, aspectRatio, nearPlane, farPlane)); - return result; } @@ -572,7 +554,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixPerspectiveFovLH(fov, aspectRatio, nearPlane, farPlane)); - return result; } @@ -581,7 +562,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixPerspectiveRH(width, height, nearPlane, farPlane)); - return result; } @@ -590,7 +570,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixPerspectiveLH(width, height, nearPlane, farPlane)); - return result; } @@ -599,7 +578,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixOrthographicRH(width, height, nearPlane, farPlane)); - return result; } @@ -608,7 +586,6 @@ namespace SHADE SHMatrix result; XMStoreFloat4x4(&result, XMMatrixOrthographicLH(width, height, nearPlane, farPlane)); - return result; } diff --git a/SHADE_Engine/src/Math/SHMatrix.h b/SHADE_Engine/src/Math/SHMatrix.h index 7a662478..4d8f1bfe 100644 --- a/SHADE_Engine/src/Math/SHMatrix.h +++ b/SHADE_Engine/src/Math/SHMatrix.h @@ -77,6 +77,8 @@ namespace SHADE SHMatrix& operator= (const SHMatrix& rhs) = default; SHMatrix& operator= (SHMatrix&& rhs) = default; + operator DirectX::XMMATRIX () const noexcept; + SHMatrix& operator+= (const SHMatrix& rhs) noexcept; SHMatrix& operator-= (const SHMatrix& rhs) noexcept; SHMatrix& operator*= (const SHMatrix& rhs) noexcept; diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index 33c568a5..924ac67a 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -40,40 +40,10 @@ namespace SHADE : XMFLOAT4( _x, _y, _z, _w ) {} - SHQuaternion::SHQuaternion(float yaw, float pitch, float roll) noexcept - : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) - { - XMStoreFloat4(this, XMQuaternionRotationRollPitchYaw(pitch, yaw, roll)); - } - - SHQuaternion::SHQuaternion(const SHVec3& eulerAngles) noexcept - : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) - { - const XMVECTOR V = XMLoadFloat3(&eulerAngles); - XMStoreFloat4(this, XMQuaternionRotationRollPitchYawFromVector(V)); - } - - SHQuaternion::SHQuaternion(const SHVec3& axis, float angleInRad) noexcept - : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) - { - const XMVECTOR AXIS = XMLoadFloat3(&axis); - XMStoreFloat4(this, XMQuaternionRotationAxis(AXIS, angleInRad)); - } - - SHQuaternion::SHQuaternion(const SHMatrix& rotationMatrix) noexcept - : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) - { - const XMMATRIX M = XMLoadFloat4x4(&rotationMatrix); - XMStoreFloat4(this, XMQuaternionRotationMatrix(M)); - } - SHQuaternion::SHQuaternion(const reactphysics3d::Vector3& rp3dEuler) noexcept : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) { - const SHVec3& SHADE_VEC{ rp3dEuler }; - - const XMVECTOR V = XMLoadFloat3(&SHADE_VEC); - XMStoreFloat4(this, XMQuaternionRotationRollPitchYawFromVector(V)); + XMStoreFloat4(this, XMQuaternionRotationRollPitchYawFromVector(SHVec3 { rp3dEuler })); } SHQuaternion::SHQuaternion(const reactphysics3d::Quaternion& rp3dQuat) noexcept @@ -113,10 +83,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - XMStoreFloat4(&result, XMVectorAdd(Q1, Q2)); + XMStoreFloat4(&result, XMVectorAdd(*this, rhs)); return result; } @@ -124,10 +91,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - XMStoreFloat4(&result, XMVectorSubtract(Q1, Q2)); + XMStoreFloat4(&result, XMVectorSubtract(*this, rhs)); return result; } @@ -135,9 +99,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q = XMLoadFloat4(this); - - XMStoreFloat4(&result, XMVectorNegate(Q)); + XMStoreFloat4(&result, XMVectorNegate(*this)); return result; } @@ -145,10 +107,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - XMStoreFloat4(&result, XMQuaternionMultiply(Q1, Q2)); + XMStoreFloat4(&result, XMQuaternionMultiply(*this, rhs)); return result; } @@ -156,9 +115,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q = XMLoadFloat4(this); - - XMStoreFloat4(&result, XMVectorScale(Q, rhs)); + XMStoreFloat4(&result, XMVectorScale(*this, rhs)); return result; } @@ -166,27 +123,18 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMQuaternionInverse(XMLoadFloat4(&rhs)); - - XMStoreFloat4(&result, XMQuaternionMultiply(Q1, Q2)); + XMStoreFloat4(&result, XMQuaternionMultiply(*this, XMQuaternionInverse(rhs))); return result; } bool SHQuaternion::operator==(const SHQuaternion& rhs) const noexcept { - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - return XMQuaternionEqual(Q1, Q2); + return XMQuaternionEqual(*this, rhs); } bool SHQuaternion::operator!=(const SHQuaternion& rhs) const noexcept { - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - return XMQuaternionNotEqual(Q1, Q2); + return XMQuaternionNotEqual(*this, rhs); } SHQuaternion::operator reactphysics3d::Quaternion() const noexcept @@ -199,6 +147,11 @@ namespace SHADE return reactphysics3d::Vector3{ ToEuler() }; } + SHQuaternion::operator XMVECTOR() const noexcept + { + return XMLoadFloat4(this); + } + SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept { return rhs * lhs; @@ -213,8 +166,7 @@ namespace SHADE XMVECTOR axis; float angle; - const XMVECTOR Q = XMLoadFloat4(this); - XMQuaternionToAxisAngle(&axis, &angle, Q); + XMQuaternionToAxisAngle(&axis, &angle, *this); return angle; } @@ -223,8 +175,7 @@ namespace SHADE XMVECTOR axis; float angle; - const XMVECTOR Q = XMLoadFloat4(this); - XMQuaternionToAxisAngle(&axis, &angle, Q); + XMQuaternionToAxisAngle(&axis, &angle, *this); return SHVec4{XMVectorGetX(axis), XMVectorGetY(axis), XMVectorGetZ(axis), angle}; @@ -238,28 +189,22 @@ namespace SHADE void SHQuaternion::Invert() noexcept { - const XMVECTOR Q = XMLoadFloat4(this); - XMStoreFloat4(this, XMQuaternionInverse(Q)); + XMStoreFloat4(this, XMQuaternionInverse(*this)); } float SHQuaternion::Length() const noexcept { - const XMVECTOR Q = XMLoadFloat4(this); - return XMVectorGetX(XMQuaternionLength(Q)); + return XMVectorGetX(XMQuaternionLength(*this)); } float SHQuaternion::LengthSquared() const noexcept { - const XMVECTOR Q = XMLoadFloat4(this); - return XMVectorGetX(XMQuaternionLengthSq(Q)); + return XMVectorGetX(XMQuaternionLengthSq(*this)); } float SHQuaternion::Dot(const SHQuaternion& rhs) const noexcept { - const XMVECTOR Q1 = XMLoadFloat4(this); - const XMVECTOR Q2 = XMLoadFloat4(&rhs); - - return XMVectorGetX(XMQuaternionDot(Q1, Q2)); + return XMVectorGetX(XMQuaternionDot(*this, rhs)); } SHQuaternion SHQuaternion::RotateTowards(const SHQuaternion&, float) const noexcept @@ -273,29 +218,29 @@ namespace SHADE SHVec3 SHQuaternion::ToEuler() const noexcept { - const float xx = x * x; - const float yy = y * y; - const float zz = z * z; + const float XX = x * x; + const float YY = y * y; + const float ZZ = z * z; - const float m31 = 2.f * x * z + 2.f * y * w; - const float m32 = 2.f * y * z - 2.f * x * w; - const float m33 = 1.f - 2.f * xx - 2.f * yy; + const float M_31 = 2.f * x * z + 2.f * y * w; + const float M_32 = 2.f * y * z - 2.f * x * w; + const float M_33 = 1.f - 2.f * XX - 2.f * YY; - const float cy = sqrtf(m33 * m33 + m31 * m31); - const float cx = atan2f(-m32, cy); - if (cy > 16.0f * SHMath::EPSILON) + const float CY = sqrtf(M_33 * M_33 + M_31 * M_31); + const float CX = atan2f(-M_32, CY); + if (CY > 16.0f * SHMath::EPSILON) { - const float m12 = 2.f * x * y + 2.f * z * w; - const float m22 = 1.f - 2.f * xx - 2.f * zz; + const float M_12 = 2.f * x * y + 2.f * z * w; + const float M_22 = 1.f - 2.f * XX - 2.f * ZZ; - return SHVec3(cx, atan2f(m31, m33), atan2f(m12, m22)); + return SHVec3(CX, atan2f(M_31, M_33), atan2f(M_12, M_22)); } else { - const float m11 = 1.f - 2.f * yy - 2.f * zz; - const float m21 = 2.f * x * y - 2.f * z * w; + const float m11 = 1.f - 2.f * YY - 2.f * ZZ; + const float m21 = 2.f * x * y - 2.f * z * w; - return SHVec3(cx, 0.f, atan2f(-m21, m11)); + return SHVec3(CX, 0.f, atan2f(-m21, m11)); } } @@ -311,13 +256,43 @@ namespace SHADE /* Static Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + SHQuaternion SHQuaternion::FromEuler(const SHVec3& eulerAngles) noexcept + { + SHQuaternion result; + + XMStoreFloat4(&result, XMQuaternionRotationRollPitchYawFromVector(eulerAngles)); + return result; + } + + SHQuaternion SHQuaternion::FromPitchYawRoll(float pitch, float yaw, float roll) noexcept + { + SHQuaternion result; + + XMStoreFloat4(&result, XMQuaternionRotationRollPitchYaw(pitch, yaw, roll)); + return result; + } + + SHQuaternion SHQuaternion::FromAxisAngle(const SHVec3& axis, float angle) noexcept + { + SHQuaternion result; + + XMStoreFloat4(&result, XMQuaternionRotationAxis(axis, angle)); + return result; + } + + SHQuaternion SHQuaternion::FromRotationMatrix(const SHMatrix& rotationMatrix) noexcept + { + SHQuaternion result; + + XMStoreFloat4(&result, XMQuaternionRotationMatrix(rotationMatrix)); + return result; + } + SHQuaternion SHQuaternion::Normalise(const SHQuaternion& q) noexcept { SHQuaternion result; - const XMVECTOR Q = XMLoadFloat4(&q); - - XMStoreFloat4(&result, XMQuaternionNormalize(Q)); + XMStoreFloat4(&result, XMQuaternionNormalize(q)); return result; } @@ -325,9 +300,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q = XMLoadFloat4(&q); - - XMStoreFloat4(&result, XMQuaternionConjugate(Q)); + XMStoreFloat4(&result, XMQuaternionConjugate(q)); return result; } @@ -335,9 +308,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q = XMLoadFloat4(&q); - XMStoreFloat4(&result, XMQuaternionInverse(Q)); - + XMStoreFloat4(&result, XMQuaternionInverse(q)); return result; } @@ -362,10 +333,7 @@ namespace SHADE { SHQuaternion result; - const XMVECTOR Q1 = XMLoadFloat4(&q1); - const XMVECTOR Q2 = XMLoadFloat4(&q2); - - XMStoreFloat4(&result, XMQuaternionSlerp(Q1, Q2, t)); + XMStoreFloat4(&result, XMQuaternionSlerp(q1, q2, t)); return result; } diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index c94907b5..f3ce3d61 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -51,9 +51,6 @@ namespace SHADE SHQuaternion () noexcept; SHQuaternion (float x, float y, float z, float w) noexcept; SHQuaternion (float yaw, float pitch, float roll) noexcept; - SHQuaternion (const SHVec3& eulerAngles) noexcept; - SHQuaternion (const SHVec3& axis, float angleInRad) noexcept; - SHQuaternion (const SHMatrix& rotationMatrix) noexcept; // Conversion from other math types @@ -87,6 +84,7 @@ namespace SHADE operator reactphysics3d::Quaternion () const noexcept; operator reactphysics3d::Vector3 () const noexcept; + operator DirectX::XMVECTOR () const noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -113,6 +111,11 @@ namespace SHADE /* Static Function Members */ /*---------------------------------------------------------------------------------*/ + [[nodiscard]] static SHQuaternion FromEuler (const SHVec3& eulerAngles) noexcept; + [[nodiscard]] static SHQuaternion FromPitchYawRoll (float pitch, float yaw, float roll) noexcept; + [[nodiscard]] static SHQuaternion FromAxisAngle (const SHVec3& axis, float angle) noexcept; + [[nodiscard]] static SHQuaternion FromRotationMatrix(const SHMatrix& rotationMatrix) noexcept; + [[nodiscard]] static SHQuaternion Normalise (const SHQuaternion& q) noexcept; [[nodiscard]] static SHQuaternion Conjugate (const SHQuaternion& q) noexcept; [[nodiscard]] static SHQuaternion Inverse (const SHQuaternion& q) noexcept; diff --git a/SHADE_Engine/src/Math/Transform/SHTransform.cpp b/SHADE_Engine/src/Math/Transform/SHTransform.cpp index f51d73ec..ef7c5fda 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransform.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransform.cpp @@ -26,15 +26,15 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHTransform::SHTransform() noexcept - : position { SHVec3::Zero } - , rotation { SHVec3::Zero } - , scale { SHVec3::One } + : position { SHVec3::Zero } + , orientation { SHQuaternion::Identity } + , scale { SHVec3::One } {} SHTransform::SHTransform(const SHVec3& pos, const SHVec3& rot, const SHVec3& scl) noexcept - : position { pos } - , rotation { rot } - , scale { scl } + : position { pos } + , orientation { SHQuaternion::FromEuler(rot) } + , scale { scl } {} /*-----------------------------------------------------------------------------------*/ @@ -43,12 +43,12 @@ namespace SHADE bool SHTransform::operator==(const SHTransform& rhs) const noexcept { - return !(position != rhs.position || rotation != rhs.rotation || scale != rhs.scale); + return !(position != rhs.position || orientation != rhs.orientation || scale != rhs.scale); } bool SHTransform::operator!=(const SHTransform& rhs) const noexcept { - return (position != rhs.position || rotation != rhs.rotation || scale != rhs.scale); + return (position != rhs.position || orientation != rhs.orientation || scale != rhs.scale); } /*-----------------------------------------------------------------------------------*/ @@ -59,7 +59,7 @@ namespace SHADE { const SHMatrix T = SHMatrix::Translate(position); - const SHMatrix R = SHMatrix::Rotate(rotation); + const SHMatrix R = SHMatrix::Rotate(orientation); const SHMatrix S = SHMatrix::Scale(scale); trs = S * R * T; diff --git a/SHADE_Engine/src/Math/Transform/SHTransform.h b/SHADE_Engine/src/Math/Transform/SHTransform.h index c1a0e565..2e7d236c 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransform.h +++ b/SHADE_Engine/src/Math/Transform/SHTransform.h @@ -12,8 +12,8 @@ // Project Headers #include "SH_API.h" -#include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" +#include "Math/SHQuaternion.h" #include "Math/SHMatrix.h" namespace SHADE @@ -31,22 +31,23 @@ namespace SHADE static const SHTransform Identity; - SHVec3 position; - SHVec3 rotation; - SHVec3 scale; + SHVec3 position; + SHQuaternion orientation; + SHVec3 scale; - SHMatrix trs; + SHMatrix trs; /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHTransform (const SHTransform&) = default; - SHTransform (SHTransform&&) = default; - ~SHTransform () = default; + SHTransform (const SHTransform&) = default; + SHTransform (SHTransform&&) = default; + ~SHTransform () = default; - SHTransform () noexcept; - SHTransform (const SHVec3& pos, const SHVec3& rot, const SHVec3& scl) noexcept; + SHTransform () noexcept; + SHTransform (const SHVec3& pos, const SHVec3& rot, const SHVec3& scl) noexcept; + SHTransform (const SHVec3& pos, const SHQuaternion& quat, const SHVec3& scl) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ @@ -63,7 +64,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ const SHMatrix& ComputeTRS(); - }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index a8b75497..306cde67 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -42,16 +42,12 @@ namespace SHADE const SHVec3& SHTransformComponent::GetLocalRotation() const noexcept { - return local.rotation; + return localRotation; } - SHVec3 SHTransformComponent::GetLocalRotationDeg() const noexcept + const SHQuaternion& SHTransformComponent::GetLocalOrientation() const noexcept { - SHVec3 rot = local.rotation; - rot.x = SHMath::RadiansToDegrees(rot.x); - rot.y = SHMath::RadiansToDegrees(rot.y); - rot.z = SHMath::RadiansToDegrees(rot.z); - return rot; + return local.orientation; } const SHVec3& SHTransformComponent::GetLocalScale() const noexcept @@ -66,16 +62,12 @@ namespace SHADE const SHVec3& SHTransformComponent::GetWorldRotation() const noexcept { - return world.rotation; + return worldRotation; } - SHVec3 SHTransformComponent::GetWorldRotationDeg() const noexcept + const SHQuaternion& SHTransformComponent::GetWorldOrientation() const noexcept { - SHVec3 rot = world.rotation; - rot.x = SHMath::RadiansToDegrees(rot.x); - rot.y = SHMath::RadiansToDegrees(rot.y); - rot.z = SHMath::RadiansToDegrees(rot.z); - return rot; + return world.orientation; } const SHVec3& SHTransformComponent::GetWorldScale() const noexcept @@ -111,32 +103,21 @@ namespace SHADE void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept { dirty = true; - local.rotation = newLocalRotation; - } - - void SHTransformComponent::SetLocalRotationDeg(SHVec3 newLocalRotationDeg) noexcept - { - dirty = true; - - local.rotation.x = SHMath::DegreesToRadians(newLocalRotationDeg.x); - local.rotation.y = SHMath::DegreesToRadians(newLocalRotationDeg.y); - local.rotation.z = SHMath::DegreesToRadians(newLocalRotationDeg.z); + localRotation = newLocalRotation; } void SHTransformComponent::SetLocalRotation(float pitch, float yaw, float roll) noexcept { dirty = true; - local.rotation.x = pitch; - local.rotation.y = yaw; - local.rotation.z = roll; + localRotation.x = pitch; + localRotation.y = yaw; + localRotation.z = roll; } - void SHTransformComponent::SetLocalRotationDeg(float pitch, float yaw, float roll) noexcept + void SHTransformComponent::SetLocalOrientation(const SHQuaternion& newLocalOrientation) noexcept { - local.rotation.x = SHMath::DegreesToRadians(pitch); - local.rotation.y = SHMath::DegreesToRadians(yaw); - local.rotation.z = SHMath::DegreesToRadians(roll); + } void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept @@ -157,41 +138,24 @@ namespace SHADE { dirty = true; - world.rotation = newWorldRotation; + worldRotation = newWorldRotation; updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation }); } - void SHTransformComponent::SetWorldRotationDeg(const SHVec3& newWorldRotation) noexcept - { - dirty = true; - - world.rotation.x = SHMath::DegreesToRadians(newWorldRotation.x); - world.rotation.y = SHMath::DegreesToRadians(newWorldRotation.y); - world.rotation.z = SHMath::DegreesToRadians(newWorldRotation.z); - - updateQueue.push({ UpdateCommandType::WORLD_ROTATION, world.rotation }); - } - void SHTransformComponent::SetWorldRotation(float pitch, float yaw, float roll) noexcept { dirty = true; - world.rotation.x = pitch; - world.rotation.y = yaw; - world.rotation.z = roll; + worldRotation.x = pitch; + worldRotation.y = yaw; + worldRotation.z = roll; updateQueue.push({ UpdateCommandType::WORLD_ROTATION, SHVec3{ pitch, yaw, roll} }); } - void SHTransformComponent::SetWorldRotationDeg(float pitch, float yaw, float roll) noexcept + void SHTransformComponent::SetWorldOrientation(const SHQuaternion& newWorldOrientation) noexcept { - dirty = true; - - world.rotation.x = SHMath::DegreesToRadians(pitch); - world.rotation.y = SHMath::DegreesToRadians(yaw); - world.rotation.z = SHMath::DegreesToRadians(roll); - - updateQueue.push({ UpdateCommandType::WORLD_ROTATION, world.rotation }); + } void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept @@ -210,7 +174,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) - .property("Rotate" , &SHTransformComponent::GetLocalRotationDeg, select_overload(&SHTransformComponent::SetLocalRotationDeg)) - .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); + .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) + .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation) ) + .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index 2a3fa7a0..d1d21bec 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -60,11 +60,11 @@ namespace SHADE [[nodiscard]] const SHVec3& GetLocalPosition () const noexcept; [[nodiscard]] const SHVec3& GetLocalRotation () const noexcept; - [[nodiscard]] SHVec3 GetLocalRotationDeg () const noexcept; + [[nodiscard]] const SHQuaternion& GetLocalOrientation () const noexcept; [[nodiscard]] const SHVec3& GetLocalScale () const noexcept; [[nodiscard]] const SHVec3& GetWorldPosition () const noexcept; [[nodiscard]] const SHVec3& GetWorldRotation () const noexcept; - [[nodiscard]] SHVec3 GetWorldRotationDeg () const noexcept; + [[nodiscard]] const SHQuaternion& GetWorldOrientation () const noexcept; [[nodiscard]] const SHVec3& GetWorldScale () const noexcept; [[nodiscard]] const SHMatrix& GetLocalToWorld () const noexcept; @@ -76,28 +76,30 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; - void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; - void SetLocalRotationDeg (SHVec3 newLocalRotationDeg) noexcept; - void SetLocalRotation (float pitch, float yaw, float roll) noexcept; - void SetLocalRotationDeg (float pitch, float yaw, float roll) noexcept; - void SetLocalScale (const SHVec3& newLocalScale) noexcept; - void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; - void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; - void SetWorldRotationDeg (const SHVec3& newWorldRotation) noexcept; - void SetWorldRotation (float pitch, float yaw, float roll) noexcept; - void SetWorldRotationDeg (float pitch, float yaw, float roll) noexcept; - void SetWorldScale (const SHVec3& newWorldScale) noexcept; + void SetLocalPosition (const SHVec3& newLocalPosition) noexcept; + void SetLocalRotation (const SHVec3& newLocalRotation) noexcept; + void SetLocalRotation (float pitch, float yaw, float roll) noexcept; + void SetLocalOrientation (const SHQuaternion& newLocalOrientation) noexcept; + void SetLocalScale (const SHVec3& newLocalScale) noexcept; + void SetWorldPosition (const SHVec3& newWorldPosition) noexcept; + void SetWorldRotation (const SHVec3& newWorldRotation) noexcept; + void SetWorldRotation (float pitch, float yaw, float roll) noexcept; + void SetWorldOrientation (const SHQuaternion& newWorldOrientation) noexcept; + void SetWorldScale (const SHVec3& newWorldScale) noexcept; private: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ + // Differentiate between rotation and orientation for setters + // Setting a quaternion directly is different from using euler angle rotations. + enum class UpdateCommandType { WORLD_POSITION , WORLD_ROTATION + , WORLD_ORIENTATION , WORLD_SCALE }; @@ -120,6 +122,12 @@ namespace SHADE bool dirty; + // We store euler angle rotations separately to interface with transform quaternions. + // Reading quaternions are unreliable. + + SHVec3 localRotation; // Stored in degrees + SHVec3 worldRotation; // Stored in degrees + SHTransform local; // Local TRS holds Local To World Transform SHTransform world; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 4b4f1cce..3244db1b 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -17,6 +17,8 @@ #include "Scene/SHSceneManager.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/SHMathHelpers.h" namespace SHADE { @@ -45,14 +47,16 @@ namespace SHADE { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - UpdateEntity(SCENE_GRAPH.GetRoot()); + + // TODO(Diren): Consider how to clear dirty in pause / stop mode and update physics, but do not clear in play mode. + UpdateEntity(SCENE_GRAPH.GetRoot(), false); } - void SHTransformSystem::TransformPostPhysicsUpdate::Execute(double dt) noexcept + void SHTransformSystem::TransformPostPhysicsUpdate::Execute(double) noexcept { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - UpdateEntityAndClear(SCENE_GRAPH.GetRoot()); + UpdateEntity(SCENE_GRAPH.GetRoot(), true); } void SHTransformSystem::Init() @@ -96,13 +100,13 @@ namespace SHADE tf->local.position = SHVec3::Transform(tf->world.position, worldToLocal); - tf->local.rotation = tf->world.rotation; - tf->local.scale = tf->world.scale; + tf->localRotation = tf->worldRotation; + tf->local.scale = tf->world.scale; if (PARENT_TF != nullptr) { // Compute Local Rotation - tf->local.rotation -= PARENT_TF->GetLocalRotation(); + tf->localRotation -= PARENT_TF->GetLocalRotation(); // Compute Local Scale tf->local.scale /= PARENT_TF->GetLocalScale(); @@ -143,13 +147,13 @@ namespace SHADE childTransform->local.position = SHVec3::Transform(childTransform->world.position, worldToLocal); - childTransform->local.rotation = childTransform->world.rotation; - childTransform->local.scale = childTransform->world.scale; + childTransform->localRotation = childTransform->worldRotation; + childTransform->local.scale = childTransform->world.scale; if (parent) { // Compute Local Rotation - childTransform->local.rotation -= parent->GetLocalRotation(); + childTransform->localRotation -= parent->GetLocalRotation(); // Compute Local Scale childTransform->local.scale /= parent->GetLocalScale(); @@ -158,12 +162,10 @@ namespace SHADE childTransform->local.trs = localToWorld; } } - - } } - void SHTransformSystem::UpdateEntity(const SHSceneNode* node) + void SHTransformSystem::UpdateEntity(const SHSceneNode* node, bool clearDirtyFlag) { const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); const bool HAS_PARENT_CHANGED = NODE_TRANSFORM && NODE_TRANSFORM->dirty; @@ -185,37 +187,10 @@ namespace SHADE } } - UpdateEntity(child); - } - } - - - void SHTransformSystem::UpdateEntityAndClear(const SHSceneNode* node) - { - const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s(node->GetEntityID()); - const bool HAS_PARENT_CHANGED = NODE_TRANSFORM && NODE_TRANSFORM->dirty; - - for (const auto* child : node->GetChildren()) - { - auto* childTransform = SHComponentManager::GetComponent_s(child->GetEntityID()); - if (childTransform) - { - // Only update if node in hierarchy and component are both active - const bool IS_NODE_ACTIVE = child->IsActive(); - if (IS_NODE_ACTIVE && childTransform->isActive) - { - if (childTransform->dirty || HAS_PARENT_CHANGED) - { - UpdateTransform(*childTransform, NODE_TRANSFORM); - childTransform->dirty = true; - } - } - } - - UpdateEntityAndClear(child); + UpdateEntity(child, clearDirtyFlag); // Clear dirty flag after all children are updated - if (childTransform) + if (childTransform && clearDirtyFlag) childTransform->dirty = false; } } @@ -244,12 +219,17 @@ namespace SHADE } case SHTransformComponent::UpdateCommandType::WORLD_ROTATION: { - tf.local.rotation = tf.world.rotation; + tf.localRotation = tf.worldRotation; if (parent) - tf.local.rotation -= parent->GetLocalRotation(); + tf.localRotation -= parent->GetLocalRotation(); break; } + case SHTransformComponent::UpdateCommandType::WORLD_ORIENTATION: + { + // TODO(Diren): Test using scripts by concat quaternions? + break; + } case SHTransformComponent::UpdateCommandType::WORLD_SCALE: { tf.local.scale = tf.world.scale; @@ -268,7 +248,14 @@ namespace SHADE tf.local.trs = localToWorld; tf.world.position = SHVec3::Transform(tf.local.position, localToWorld); - tf.world.rotation = tf.local.rotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); + + tf.worldRotation = tf.localRotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); + + // TODO(Diren): Wrap rotations between -360 and 360 + + tf.world.orientation = SHQuaternion::FromEuler(tf.worldRotation); + tf.local.orientation = SHQuaternion::FromEuler(tf.localRotation); + tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); tf.world.ComputeTRS(); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index 256c1561..e63969ce 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -114,8 +114,7 @@ namespace SHADE SHEventHandle ChangeParent (SHEventPtr changeParentEvent); static void UpdateChildrenLocalTransforms (SHSceneNode* node); - static void UpdateEntity (const SHSceneNode* node); - static void UpdateEntityAndClear (const SHSceneNode* node); + static void UpdateEntity (const SHSceneNode* node, bool clearDirtyFlag); static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 36f7c57e..f9b476ef 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -140,12 +140,12 @@ namespace SHADE isRigidBody = true; rb->position = tf->GetWorldPosition(); - rb->orientation = tf->GetWorldRotation(); + rb->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); if (hasColliders) { c->position = tf->GetWorldPosition(); - c->orientation = tf->GetWorldRotation(); + c->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); // Get array of colliders and add them back into the rigidbody for (auto& collider : c->colliders | std::views::keys) AddCollider(&collider); @@ -160,7 +160,7 @@ namespace SHADE hasColliders = true; c->position = tf->GetWorldPosition(); - c->orientation = tf->GetWorldRotation(); + c->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); for (auto& collider : c->colliders | std::views::keys) AddCollider(&collider); From 6ea5ae7707e660df3bc29a117fae695756a7747f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 22 Oct 2022 21:36:02 +0800 Subject: [PATCH 415/793] Added serialization and deserialization of pipeline on the material (no shader loading yet) --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 11 +++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 7 ++- .../RenderGraph/SHRenderGraphNode.cpp | 2 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 7 ++- .../src/Graphics/RenderGraph/SHSubpass.h | 5 +- .../Serialization/SHSerializationHelper.hpp | 62 ++++++++++++++++--- 6 files changed, 81 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 44404bc7..9d1583b3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -158,7 +158,11 @@ namespace SHADE worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors + auto node = worldRenderGraph->AddNode + ( + G_BUFFER_RENDER_GRAPH_NODE_NAME.data(), + { "Entity ID", "Depth Buffer", "Scene"}, {} + ); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); @@ -749,5 +753,10 @@ namespace SHADE } + Handle SHGraphicsSystem::GetPrimaryRenderpass() const noexcept + { + return worldRenderGraph->GetNode(G_BUFFER_RENDER_GRAPH_NODE_NAME.data()); + } + #pragma endregion MISC } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 870325ac..8b52e5c2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -286,12 +286,17 @@ namespace SHADE #endif Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; + Handle GetPrimaryRenderpass() const noexcept; //SHRenderGraph const& GetRenderGraph(void) const noexcept; //Handle GetRenderPass() const { return renderPass; } private: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + static constexpr std::string_view G_BUFFER_RENDER_GRAPH_NODE_NAME = "G-Buffer"; /*-----------------------------------------------------------------------------*/ /* Data Members */ @@ -318,7 +323,7 @@ namespace SHADE SHTextureLibrary texLibrary; SHSamplerCache samplerCache; SHMaterialInstanceCache materialInstanceCache; - // Viewports + // Viewports #ifdef SHEDITOR Handle editorViewport; Handle editorRenderer; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 5950426e..097f345c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -235,7 +235,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(resourceManager->Create(GetHandle(), subpasses.size(), &resourceAttachmentMapping, ptrToResources)); + subpasses.emplace_back(resourceManager->Create(GetHandle(), subpassName, subpasses.size(), &resourceAttachmentMapping, ptrToResources)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); subpass->Init(*resourceManager); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 7c5021f8..8b5c4b82 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -23,7 +23,7 @@ namespace SHADE */ /***************************************************************************/ - SHSubpass::SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept + SHSubpass::SHSubpass(Handle const& parent, const std::string& name, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* resources) noexcept : resourceAttachmentMapping{ mapping } , ptrToResources{ resources } , parentNode{ parent } @@ -32,6 +32,7 @@ namespace SHADE , colorReferences{} , depthReferences{} , inputReferences{} + , name { name } { } @@ -224,4 +225,8 @@ namespace SHADE return parentNode->GetResource(attachmentReference)->GetResourceFormat(); } + const std::string& SHSubpass::GetName() const + { + return name; + } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index e5094708..00bea35a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -56,13 +56,15 @@ namespace SHADE //! are always the last things drawn, so DO NOT USE THIS FUNCTIONALITY FOR ANYTHING //! COMPLEX. std::vector&)>> exteriorDrawCalls; + /// For identifying subpasses + std::string name; public: /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHSubpass(Handle const& parent, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; + SHSubpass(Handle const& parent, const std::string& name, uint32_t index, std::unordered_map const* mapping, std::unordered_map> const* ptrToResources) noexcept; SHSubpass(SHSubpass&& rhs) noexcept; SHSubpass& operator=(SHSubpass&& rhs) noexcept; @@ -88,6 +90,7 @@ namespace SHADE Handle GetSuperBatch(void) const noexcept; std::vector const& GetColorAttachmentReferences (void) const noexcept; vk::Format GetFormatFromAttachmentReference (uint32_t attachmentReference) const noexcept; + const std::string& GetName() const; friend class SHRenderGraphNode; friend class SHRenderGraph; diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 048867a5..6dafba1d 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -22,6 +22,7 @@ namespace YAML { static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; static constexpr std::string_view PROPS_YAML_TAG = "Properties"; static YAML::Node encode(SHMaterial const& rhs) @@ -61,25 +62,70 @@ namespace YAML propertiesNode[VAR_NAME.data()] = propNode; } + // Get Shader Handles + const auto& SHADERS = rhs.GetPipeline()->GetPipelineLayout()->GetShaderModules(); + Handle vertexShader, fragShader; + for (const auto& shader : SHADERS) + { + const auto FLAG_BITS = shader->GetShaderStageFlagBits(); + if (FLAG_BITS & vk::ShaderStageFlagBits::eVertex) + vertexShader = shader; + else if (FLAG_BITS & vk::ShaderStageFlagBits::eFragment) + fragShader = shader; + } + // Write Material YAML::Node node; - node[VERT_SHADER_YAML_TAG.data()] = 0; - node[FRAG_SHADER_YAML_TAG.data()] = 0; - node[PROPS_YAML_TAG.data()] = propertiesNode; + node[VERT_SHADER_YAML_TAG.data()] = 0; // SHResourceManager::GetAssetID(vertexShader).value_or(0); + node[FRAG_SHADER_YAML_TAG.data()] = 0; // SHResourceManager::GetAssetID(fragShader).value_or(0); + node[SUBPASS_YAML_TAG.data()] = rhs.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); + node[PROPS_YAML_TAG.data()] = propertiesNode; return node; } static bool decode(YAML::Node const& node, SHMaterial& rhs) { + // Retrieve Shader Asset IDs + AssetID vertShaderId = 0; + AssetID fragShaderId = 0; if (node[VERT_SHADER_YAML_TAG.data()]) - { - // TODO - } + vertShaderId = node[VERT_SHADER_YAML_TAG.data()].as(); if (node[FRAG_SHADER_YAML_TAG.data()]) + fragShaderId = node[FRAG_SHADER_YAML_TAG.data()].as(); + + // Ensure that both shaders are present + if (vertShaderId == 0 || fragShaderId == 0) + return false; // No pipeline + + // Get Shader Modules + Handle vertexShader, fragShader; + // vertexShader = SHResourceManager::LoadOrGet(vertShaderId); + // fragShader = SHResourceManager::LoadOrGet(fragShaderId); + + // Get Pipeline Library + if (node[SUBPASS_YAML_TAG.data()]) { - // TODO + auto gfxSystem = SHSystemManager::GetSystem(); + if (!gfxSystem) + return false; + + // Grab subpass from worldRenderer + auto renderPass = gfxSystem->GetPrimaryRenderpass(); + if (!renderPass) + return false; + auto subPass = renderPass->GetSubpass(node[SUBPASS_YAML_TAG.data()].as()); + if (!subPass) + return false; + + // Set Pipeline + rhs.SetPipeline(renderPass->GetOrCreatePipeline + ( + std::make_pair(vertexShader, fragShader), + subPass + )); } + if (node[PROPS_YAML_TAG.data()]) { // Loop through all properties @@ -139,7 +185,7 @@ namespace YAML { if (node[MESH_YAML_TAG.data()]) { - rhs.Mesh = {};//SHResourceManager::LoadOrGet(node[MESH_YAML_TAG].as()); + rhs.Mesh = SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as()); } if (node[MAT_YAML_TAG.data()]) { From 2bd633c11b5b487e748347076b75327944d06d27 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 22 Oct 2022 23:00:50 +0800 Subject: [PATCH 416/793] Added RigidBody component --- SHADE_Managed/src/Components/Collider.hxx | 3 + SHADE_Managed/src/Components/RigidBody.cxx | 197 +++++++++++++++++++++ SHADE_Managed/src/Components/RigidBody.hxx | 150 ++++++++++++++++ 3 files changed, 350 insertions(+) create mode 100644 SHADE_Managed/src/Components/RigidBody.cxx create mode 100644 SHADE_Managed/src/Components/RigidBody.hxx diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx index a831e5f9..c85ee21c 100644 --- a/SHADE_Managed/src/Components/Collider.hxx +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -221,6 +221,9 @@ namespace SHADE T GetColliderBound(int index); private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ System::Collections::Generic::List^ subColliderList; // TODO: Update elements in this list if the list on native collider changes }; } diff --git a/SHADE_Managed/src/Components/RigidBody.cxx b/SHADE_Managed/src/Components/RigidBody.cxx new file mode 100644 index 00000000..172b928b --- /dev/null +++ b/SHADE_Managed/src/Components/RigidBody.cxx @@ -0,0 +1,197 @@ +/************************************************************************************//*! +\file RigidBody.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 22, 2022 +\brief Contains the definition of the functions of the managed RigidBody class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "RigidBody.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + RigidBody::RigidBody(Entity entity) + : Component(entity) + {} + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + bool RigidBody::IsGravityEnabled::get() + { + return GetNativeComponent()->IsGravityEnabled(); + } + void RigidBody::IsGravityEnabled::set(bool value) + { + return GetNativeComponent()->SetGravityEnabled(value); + } + bool RigidBody::IsAllowedToSleep::get() + { + return GetNativeComponent()->IsAllowedToSleep(); + } + void RigidBody::IsAllowedToSleep::set(bool value) + { + return GetNativeComponent()->SetIsAllowedToSleep(value); + } + RigidBody::Type RigidBody::BodyType::get() + { + return static_cast(GetNativeComponent()->GetType()); + } + void RigidBody::BodyType::set(Type value) + { + return GetNativeComponent()->SetType(static_cast(value)); + } + float RigidBody::Mass::get() + { + return GetNativeComponent()->GetMass(); + } + void RigidBody::Mass::set(float value) + { + return GetNativeComponent()->SetMass(value); + } + float RigidBody::Drag::get() + { + return GetNativeComponent()->GetDrag(); + } + void RigidBody::Drag::set(float value) + { + return GetNativeComponent()->SetDrag(value); + } + float RigidBody::AngularDrag::get() + { + return GetNativeComponent()->GetAngularDrag(); + } + void RigidBody::AngularDrag::set(float value) + { + return GetNativeComponent()->SetAngularDrag(value); + } + bool RigidBody::FreezePositionX::get() + { + return GetNativeComponent()->GetFreezePositionX(); + } + void RigidBody::FreezePositionX::set(bool value) + { + return GetNativeComponent()->SetFreezePositionX(value); + } + bool RigidBody::FreezePositionY::get() + { + return GetNativeComponent()->GetFreezePositionY(); + } + void RigidBody::FreezePositionY::set(bool value) + { + return GetNativeComponent()->SetFreezePositionY(value); + } + bool RigidBody::FreezePositionZ::get() + { + return GetNativeComponent()->GetFreezePositionZ(); + } + void RigidBody::FreezePositionZ::set(bool value) + { + return GetNativeComponent()->SetFreezePositionZ(value); + } + bool RigidBody::FreezeRotationX::get() + { + return GetNativeComponent()->GetFreezeRotationX(); + } + void RigidBody::FreezeRotationX::set(bool value) + { + return GetNativeComponent()->SetFreezeRotationX(value); + } + bool RigidBody::FreezeRotationY::get() + { + return GetNativeComponent()->GetFreezeRotationY(); + } + void RigidBody::FreezeRotationY::set(bool value) + { + return GetNativeComponent()->SetFreezeRotationY(value); + } + bool RigidBody::FreezeRotationZ::get() + { + return GetNativeComponent()->GetFreezeRotationZ(); + } + void RigidBody::FreezeRotationZ::set(bool value) + { + return GetNativeComponent()->SetFreezeRotationZ(value); + } + Vector3 RigidBody::LinearVelocity::get() + { + return Convert::ToCLI(GetNativeComponent()->GetLinearVelocity()); + } + void RigidBody::LinearVelocity::set(Vector3 value) + { + return GetNativeComponent()->SetLinearVelocity(Convert::ToNative(value)); + } + Vector3 RigidBody::AngularVelocity::get() + { + return Convert::ToCLI(GetNativeComponent()->GetAngularVelocity()); + } + void RigidBody::AngularVelocity::set(Vector3 value) + { + return GetNativeComponent()->SetAngularVelocity(Convert::ToNative(value)); + } + Vector3 RigidBody::Force::get() + { + return Convert::ToCLI(GetNativeComponent()->GetForce()); + } + Vector3 RigidBody::Torque::get() + { + return Convert::ToCLI(GetNativeComponent()->GetTorque()); + } + + /*---------------------------------------------------------------------------------*/ + /* Force Functions */ + /*---------------------------------------------------------------------------------*/ + void RigidBody::AddForce(Vector3 force) + { + GetNativeComponent()->AddForce(Convert::ToNative(force)); + } + + void RigidBody::AddForceAtLocalPos(Vector3 force, Vector3 localPos) + { + GetNativeComponent()->AddForceAtLocalPos(Convert::ToNative(force), Convert::ToNative(localPos)); + } + + void RigidBody::AddForceAtWorldPos(Vector3 force, Vector3 worldPos) + { + GetNativeComponent()->AddForceAtWorldPos(Convert::ToNative(force), Convert::ToNative(worldPos)); + } + + void RigidBody::AddRelativeForce(Vector3 relativeForce) + { + GetNativeComponent()->AddRelativeForce(Convert::ToNative(relativeForce)); + } + + void RigidBody::AddRelativeForceAtLocalPos(Vector3 relativeForce, Vector3 localPos) + { + GetNativeComponent()->AddRelativeForceAtLocalPos(Convert::ToNative(relativeForce), Convert::ToNative(localPos)); + } + + void RigidBody::AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos) + { + GetNativeComponent()->AddRelativeForceAtWorldPos(Convert::ToNative(relativeForce), Convert::ToNative(worldPos)); + } + + /*---------------------------------------------------------------------------------*/ + /* Torque Functions */ + /*---------------------------------------------------------------------------------*/ + void RigidBody::AddTorque(Vector3 torque) + { + GetNativeComponent()->AddTorque(Convert::ToNative(torque)); + } + + void RigidBody::AddRelativeTorque(Vector3 relativeTorque) + { + GetNativeComponent()->AddRelativeTorque(Convert::ToNative(relativeTorque)); + } +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx new file mode 100644 index 00000000..b3e031ba --- /dev/null +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -0,0 +1,150 @@ +/************************************************************************************//*! +\file RigidBody.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 22, 2022 +\brief Contains the definition of the managed Collider class with the + declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Physics/Components/SHRigidBodyComponent.h" +// Project Includes +#include "Components/Component.hxx" + +namespace SHADE +{ + /// + /// CLR version of the the SHADE Engine's SHRigidBodyComponent. + /// + public ref class RigidBody : public Component + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a RigidBody Component that represents a native + /// SHRigidBodyComponent component tied to the specified Entity. + /// + /// Entity that this Component will be tied to. + RigidBody(Entity entity); + + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + enum class Type + { + Static, + Kinematic, + Dynamic + }; + + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + property bool IsGravityEnabled + { + bool get(); + void set(bool value); + } + property bool IsAllowedToSleep + { + bool get(); + void set(bool value); + } + property Type BodyType + { + Type get(); + void set(Type value); + } + property float Mass + { + float get(); + void set(float value); + } + property float Drag + { + float get(); + void set(float value); + } + property float AngularDrag + { + float get(); + void set(float value); + } + property bool FreezePositionX + { + bool get(); + void set(bool value); + } + property bool FreezePositionY + { + bool get(); + void set(bool value); + } + property bool FreezePositionZ + { + bool get(); + void set(bool value); + } + property bool FreezeRotationX + { + bool get(); + void set(bool value); + } + property bool FreezeRotationY + { + bool get(); + void set(bool value); + } + property bool FreezeRotationZ + { + bool get(); + void set(bool value); + } + property Vector3 LinearVelocity + { + Vector3 get(); + void set(Vector3 value); + } + property Vector3 AngularVelocity + { + Vector3 get(); + void set(Vector3 value); + } + property Vector3 Force + { + Vector3 get(); + } + property Vector3 Torque + { + Vector3 get(); + } + + /*-----------------------------------------------------------------------------*/ + /* Force Functions */ + /*-----------------------------------------------------------------------------*/ + void AddForce(Vector3 force); + void AddForceAtLocalPos(Vector3 force, Vector3 localPos); + void AddForceAtWorldPos(Vector3 force, Vector3 worldPos); + void AddRelativeForce(Vector3 relativeForce); + void AddRelativeForceAtLocalPos(Vector3 relativeForce, Vector3 localPos); + void AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos); + + /*-----------------------------------------------------------------------------*/ + /* Torque Functions */ + /*-----------------------------------------------------------------------------*/ + void AddTorque(Vector3 force); + void AddRelativeTorque(Vector3 relativeForce); + }; + +} \ No newline at end of file From 77aa5b8c7d6146e242e789118ee90da8fcb57863 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 22 Oct 2022 23:27:43 +0800 Subject: [PATCH 417/793] Bindings and Controllers --- SHADE_Engine/src/Input/SHInputManager.cpp | 657 ++++++++++++++++++++++ SHADE_Engine/src/Input/SHInputManager.h | 409 +++++++++++++- 2 files changed, 1055 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Input/SHInputManager.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp index 18d9e3e2..c665a9c9 100644 --- a/SHADE_Engine/src/Input/SHInputManager.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -19,6 +19,10 @@ namespace SHADE /*------------------------------------------------------------------------*/ /* Static defines */ /*------------------------------------------------------------------------*/ + + bool SHInputManager::controllerInUse = false; + + std::map SHInputManager::bindings; unsigned SHInputManager::keyCount = 0; bool SHInputManager::keys[MAX_KEYS]; @@ -41,6 +45,60 @@ namespace SHADE int SHInputManager::mouseWheelVerticalDelta = 0; int SHInputManager::mouseWheelVerticalDeltaPoll = 0; + unsigned char SHInputManager::controllersConnectedCount = 0; + unsigned SHInputManager::controllersInputCount[XUSER_MAX_COUNT]; + unsigned SHInputManager::controllersButtonCount[XUSER_MAX_COUNT]; + short SHInputManager::controllers[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + short SHInputManager::controllersLast[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + double SHInputManager::controllersHeldTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + double SHInputManager::controllersReleasedTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + + //Internal helper function for splitting between inputs + bool SHInputManager::controllerConsideredHeld(size_t inputIdx, short value) noexcept + { + if (inputIdx >= MAX_CONTROLLER_INPUT) return false; //Bounds check + else + { + if (inputIdx < NUM_CONTROLLER_BUTTON) + { + return static_cast(value); + } + else if (inputIdx < NUM_CONTROLLER_BUTTON + NUM_CONTROLLER_TRIGGER) + { + return (value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD); + } + else if (inputIdx < NUM_CONTROLLER_BUTTON + NUM_CONTROLLER_TRIGGER + NUM_CONTROLLER_TRIGGER) + { + return (std::abs(value) > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE); + } + else + { + return (std::abs(value) > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE); + } + } + } + + //Internal helper function for getting normalised input value + double SHInputManager::controllerNormalisedValue(size_t inputIdx, short value) noexcept + { + if (inputIdx >= MAX_CONTROLLER_INPUT) return 0.0; //Bounds check + else + { + if (inputIdx < NUM_CONTROLLER_BUTTON) + { + return static_cast(value); + } + else if (inputIdx < NUM_CONTROLLER_BUTTON + NUM_CONTROLLER_TRIGGER) //8-bit triggers, 0 to 255 + { + return static_cast(value) / static_cast(UCHAR_MAX); + } + else //16-bit thumbsticks, -32768 to 32767 + { + return static_cast(value) / static_cast(SHRT_MAX); + } + } + } + void SHInputManager::UpdateInput(double dt) noexcept { //Keyboard and Mouse Buttons//////////////////////////////////////////////// @@ -120,6 +178,273 @@ namespace SHADE mouseWheelVerticalDelta = 0; mouseWheelVerticalDelta = mouseWheelVerticalDeltaPoll; mouseWheelVerticalDeltaPoll = 0; + + //Controllers////////////////////////////////////////////////////////////// + + controllersConnectedCount = 0; + + //Set last controller states + memcpy(controllersLast, controllers, sizeof(controllers)); + + //Reset controller states + SecureZeroMemory(&controllers, sizeof(controllers)); + + //https://learn.microsoft.com/en-us/windows/win32/xinput/getting-started-with-xinput#getting-controller-state + for (DWORD c = 0; c < XUSER_MAX_COUNT; ++c) + { + controllersInputCount[c] = 0; + controllersButtonCount[c] = 0; + + XINPUT_STATE state; + SecureZeroMemory(&state, sizeof(XINPUT_STATE)); + + //Get the state of controller from XInput + DWORD result = XInputGetState(c, &state); + + //Write gamepad data + if (result == ERROR_SUCCESS) + { + ++controllersConnectedCount; + + //DIGITAL BUTTONS/////////////////////////////////////// + + //DPAD UP + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_UP)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_UP)] = 0; + } + + //DPAD DOWN + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_DOWN)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_DOWN)] = 0; + } + + //DPAD LEFT + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_LEFT)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_LEFT)] = 0; + } + + //DPAD RIGHT + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_RIGHT)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::DPAD_RIGHT)] = 0; + } + + //START + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_START) + { + controllers[c][static_cast(SH_CONTROLLERCODE::START)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::START)] = 0; + } + + //BACK + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) + { + controllers[c][static_cast(SH_CONTROLLERCODE::BACK)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::BACK)] = 0; + } + + //LEFT THUMBSTICK BUTTON + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) + { + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_THUMBSTICK)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_THUMBSTICK)] = 0; + } + + //RIGHT THUMBSTICK BUTTON + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) + { + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_THUMBSTICK)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_THUMBSTICK)] = 0; + } + + //LEFT SHOULDER BUTTON + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) + { + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_SHOULDER)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_SHOULDER)] = 0; + } + + //RIGHT SHOULDER BUTTON + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) + { + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_SHOULDER)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_SHOULDER)] = 0; + } + + //A + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) + { + controllers[c][static_cast(SH_CONTROLLERCODE::A)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::A)] = 0; + } + + //B + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_B) + { + controllers[c][static_cast(SH_CONTROLLERCODE::B)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::B)] = 0; + } + + //X + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_X) + { + controllers[c][static_cast(SH_CONTROLLERCODE::X)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::X)] = 0; + } + + //Y + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_Y) + { + controllers[c][static_cast(SH_CONTROLLERCODE::Y)] = 1; + ++controllersInputCount[c]; + ++controllersButtonCount[c]; + } + else + { + controllers[c][static_cast(SH_CONTROLLERCODE::Y)] = 0; + } + + //8 BIT VALUES (0 - 255)/////////////////////////////////// + + //LEFT TRIGGER + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_TRIGGER)] = state.Gamepad.bLeftTrigger; + if (state.Gamepad.bLeftTrigger > XINPUT_GAMEPAD_TRIGGER_THRESHOLD) + { + ++controllersInputCount[c]; //Registered as held + } + + //RIGHT TRIGGER + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_TRIGGER)] = state.Gamepad.bRightTrigger; + if (state.Gamepad.bRightTrigger > XINPUT_GAMEPAD_TRIGGER_THRESHOLD) + { + ++controllersInputCount[c]; //Registered as held + } + + //16 BIT VALUES (0 - 65535)//////////////////////////////// + + //LEFT THUMBSTICK X + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_THUMBSTICK_X)] = state.Gamepad.sThumbLX; + if (std::abs(state.Gamepad.sThumbLX) > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) + { + ++controllersInputCount[c]; + } + + //LEFT THUMBSTICK Y + controllers[c][static_cast(SH_CONTROLLERCODE::LEFT_THUMBSTICK_Y)] = state.Gamepad.sThumbLY; + if (std::abs(state.Gamepad.sThumbLY) > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) + { + ++controllersInputCount[c]; + } + + //RIGHT THUMBSTICK X + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_THUMBSTICK_X)] = state.Gamepad.sThumbRX; + if (std::abs(state.Gamepad.sThumbRX) > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) + { + ++controllersInputCount[c]; + } + + //RIGHT THUMBSTICK Y + controllers[c][static_cast(SH_CONTROLLERCODE::RIGHT_THUMBSTICK_Y)] = state.Gamepad.sThumbRY; + if (std::abs(state.Gamepad.sThumbRY) > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) + { + ++controllersInputCount[c]; + } + } + + //Timers and updating if controller is presently in use + for (size_t i = 0; i < MAX_CONTROLLER_INPUT; ++i) + { + if (controllerConsideredHeld(i, controllers[c][i])) //Considered on + { + controllerInUse = true; + if (!controllerConsideredHeld(i, controllersLast[c][i])) //Just on + { + controllersHeldTime[c][i] = 0.0; //Reset timer + } + controllersHeldTime[c][i] += dt; //Tick up + } + else //Considered off + { + if (controllerConsideredHeld(i, controllersLast[c][i])) //Just off + { + controllersReleasedTime[c][i] = 0.0; //Reset timer + } + controllersReleasedTime[c][i] += dt; //Tick up + } + } + } } bool SHInputManager::AnyKeyDown(SH_KEYCODE* firstDetected) noexcept @@ -161,4 +486,336 @@ namespace SHADE return false; } + //Any controller input being held + //For analog, this means going being deadzone values + bool SHInputManager::AnyControllerInput(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < MAX_CONTROLLER_INPUT; ++i) + { + if (controllerConsideredHeld(i, controllers[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManager::AnyControllerInputDown(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < MAX_CONTROLLER_INPUT; ++i) + { + if (controllerConsideredHeld(i, controllers[cNum][i]) && !controllerConsideredHeld(i, controllersLast[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManager::AnyControllerInputUp(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < MAX_CONTROLLER_INPUT; ++i) + { + if (!controllerConsideredHeld(i, controllers[cNum][i]) && controllerConsideredHeld(i, controllersLast[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManager::AnyControllerButton(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < NUM_CONTROLLER_BUTTON; ++i) + { + if (controllerConsideredHeld(i, controllers[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManager::AnyControllerButtonDown(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < NUM_CONTROLLER_BUTTON; ++i) + { + if (controllerConsideredHeld(i, controllers[cNum][i]) && !controllerConsideredHeld(i, controllersLast[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + bool SHInputManager::AnyControllerButtonUp(SH_CONTROLLERCODE* firstDetected, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + for (size_t i = 0; i < NUM_CONTROLLER_BUTTON; ++i) + { + if (!controllerConsideredHeld(i, controllers[cNum][i]) && controllerConsideredHeld(i, controllersLast[cNum][i])) + { + if (firstDetected) *firstDetected = static_cast(i); + return true; + } + } + return false; + } + + //Only get of largest magnitude + double SHInputManager::GetBindingAxis(std::string bindingName, size_t cNum) noexcept + { + //Over keycodes, prioritise positive + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKey(k)) return 1.0; + } + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKey(k)) return -1.0; + } + + double largestMagnitude = 0.0; + + //Over controllerCodes + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + double newValue = 0.0; + if (GetControllerInput(c, &newValue, nullptr, nullptr, cNum)) + if (std::abs(newValue) > std::abs(largestMagnitude)) largestMagnitude = newValue; + } + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + double newValue = 0.0; + if (GetControllerInput(c, &newValue, nullptr, nullptr, cNum)) + if (std::abs(newValue) > std::abs(largestMagnitude)) largestMagnitude = -newValue; + } + + return largestMagnitude; + } + + bool SHInputManager::GetBindingPositiveButton(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKey(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + if (GetControllerInput(c, nullptr, nullptr, nullptr, cNum)) return true; + } + + return false; + } + + bool SHInputManager::GetBindingNegativeButton(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKey(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + if (GetControllerInput(c, nullptr, nullptr, nullptr, cNum)) return true; + } + + return false; + } + + bool SHInputManager::GetBindingPositiveButtonDown(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKeyDown(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + if (GetControllerInputDown(c, nullptr, cNum)) return true; + } + + return false; + } + + bool SHInputManager::GetBindingNegativeButtonDown(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKeyDown(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + if (GetControllerInputDown(c, nullptr, cNum)) return true; + } + + return false; + } + + bool SHInputManager::GetBindingPositiveButtonUp(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKeyUp(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + if (GetControllerInputUp(c, nullptr, cNum)) return true; + } + + return false; + } + + bool SHInputManager::GetBindingNegativeButtonUp(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return false; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKeyUp(k)) return true; + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + if (GetControllerInputUp(c, nullptr, cNum)) return true; + } + + return false; + } + + //Fetches longest hold time + double SHInputManager::GetBindingPositiveHeldTime(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0.0; + + double maxHeldTime = 0.0; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKeyHeldTime(k) > maxHeldTime) maxHeldTime = GetKeyHeldTime(k); + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + if (GetControllerInputHeldTime(c, cNum) > maxHeldTime) maxHeldTime = GetControllerInputHeldTime(c); + } + + return maxHeldTime; + } + + double SHInputManager::GetBindingNegativeHeldTime(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0.0; + + double maxHeldTime = 0.0; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKeyHeldTime(k) > maxHeldTime) maxHeldTime = GetKeyHeldTime(k); + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + if (GetControllerInputHeldTime(c, cNum) > maxHeldTime) maxHeldTime = GetControllerInputHeldTime(c); + } + + return maxHeldTime; + } + + //Fetches shortest release time + double SHInputManager::GetBindingPositiveReleasedTime(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0.0; + + double minReleaseTime = _HUGE_ENUF; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].positiveKeyCodes) + { + if (GetKeyReleasedTime(k) < minReleaseTime) minReleaseTime = GetKeyReleasedTime(k); + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].positiveControllerCodes) + { + if (GetControllerInputReleasedTime(c, cNum) < minReleaseTime) minReleaseTime = GetControllerInputReleasedTime(c); + } + + return minReleaseTime; + } + + double SHInputManager::GetBindingNegativeReleasedTime(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0.0; + + double minReleaseTime = _HUGE_ENUF; + + //Over keycodes + for (SH_KEYCODE k : bindings[bindingName].negativeKeyCodes) + { + if (GetKeyReleasedTime(k) < minReleaseTime) minReleaseTime = GetKeyReleasedTime(k); + } + + //Over controller buttons + for (SH_CONTROLLERCODE c : bindings[bindingName].negativeControllerCodes) + { + if (GetControllerInputReleasedTime(c, cNum) < minReleaseTime) minReleaseTime = GetControllerInputReleasedTime(c); + } + + return minReleaseTime; + } + + //Only for mouse movement + //Get largest delta + double SHInputManager::GetBindingMouseVelocity(std::string bindingName, size_t cNum) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0.0; + + //Mouse velocity + double velX = 0.0; + double velY = 0.0; + GetMouseVelocity(&velX, &velY); + + return bindings[bindingName].mouseXPositiveMultiplier * velX + bindings[bindingName].mouseYPositiveMultiplier * velY; + } + } //namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Input/SHInputManager.h b/SHADE_Engine/src/Input/SHInputManager.h index d3e31004..04e5871d 100644 --- a/SHADE_Engine/src/Input/SHInputManager.h +++ b/SHADE_Engine/src/Input/SHInputManager.h @@ -10,9 +10,12 @@ *********************************************************************/ #pragma once -//#include -//#include "../../SHADE_Managed/src/SHpch.h" +#include +#include +#include +#include "../../SHADE_Managed/src/SHpch.h" #include "SH_API.h" +#pragma comment(lib, "xinput.lib") namespace SHADE { @@ -268,6 +271,58 @@ namespace SHADE OEM_CLEAR }; + enum class SH_CONTROLLERCODE + { + //Digital + DPAD_UP, + DPAD_DOWN, + DPAD_LEFT, + DPAD_RIGHT, + START, + BACK, + LEFT_THUMBSTICK, + RIGHT_THUMBSTICK, + LEFT_SHOULDER, + RIGHT_SHOULDER, + A, + B, + X, + Y, + + //1 Byte Unsigned Analog + LEFT_TRIGGER, + RIGHT_TRIGGER, + + //2 Byte Signed Analog + LEFT_THUMBSTICK_X, + LEFT_THUMBSTICK_Y, + RIGHT_THUMBSTICK_X, + RIGHT_THUMBSTICK_Y + }; + + private: + /*------------------------------------------------------------------------*/ + /* Struct for logical bindings */ + /*------------------------------------------------------------------------*/ + struct SH_API SHLogicalBindingData + { + //Key codes mapped to positive + std::set positiveKeyCodes; + + //Key codes mapped to negative + std::set negativeKeyCodes; + + //Controller Codes mapped to positive + std::set positiveControllerCodes; + + //Controller Codes mapped to negative + std::set negativeControllerCodes; + + //Mouse movement mapped to axes? + double mouseXPositiveMultiplier; + double mouseYPositiveMultiplier; + }; + public: //Updates current state of the input, with dt to be fetched from FRC //TODO should dt be fixed or variable? @@ -392,7 +447,7 @@ namespace SHADE keysToggleLast[static_cast(key)]); } - //Mouse///////////// + //Mouse///////////////////////////////////////////////////// //Get the mouse location with respect to the screen static inline void GetMouseScreenPosition (int* x = nullptr, @@ -428,7 +483,95 @@ namespace SHADE return mouseWheelVerticalDelta; } - //GET INPUT TIMINGS/////////////////////////////////////////////////////////// + /*------------------------------------------------------------------------*/ + /* Input state accessors (KB & M) */ + /*------------------------------------------------------------------------*/ + + //How many controller inputs of any kind are being used now + static inline unsigned GetControllerInputCount(size_t cNum = 0) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0; + return controllersInputCount[cNum]; + } + + //How many controller buttons are being pressed now + //Subtract from getControllerInputCount() for analog triggers / thumbsticks + static inline unsigned GetControllerButtonCount(size_t cNum = 0) noexcept + { + if (cNum >= XUSER_MAX_COUNT) return 0; + return controllersButtonCount[cNum]; + } + + //Any controller input being held + //For analog, this means going being deadzone values + //controllerNum should be between 0 and 3 + static bool AnyControllerInput(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //Any controller input activated in THIS FRAME ONLY + //For analog, this means going being deadzone values + //controllerNum should be between 0 and 3 + static bool AnyControllerInputDown(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //Any controller input deactivated in THIS FRAME ONLY + //For analog, this means going below deadzone values + //controllerNum should be between 0 and 3 + static bool AnyControllerInputUp(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //Any DIGITAL controller buttons being held + //controllerNum should be between 0 and 3 + static bool AnyControllerButton(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //Any DIGITAL controller button activated in THIS FRAME ONLY + //controllerNum should be between 0 and 3 + static bool AnyControllerButtonDown(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //Any DIGITAL controller button deactivated in THIS FRAME ONLY + //controllerNum should be between 0 and 3 + static bool AnyControllerButtonUp(SH_CONTROLLERCODE* firstDetected = nullptr, size_t controllerNum = 0) noexcept; + + //If controller input is being held in the current frame + //normalisedValue is the value of the input between 0 and 1, relevant for trigger and thumbstick data + //controllerNum should be between 0 and 3 + static inline bool GetControllerInput(SH_CONTROLLERCODE input, + double* normalisedValue = nullptr, + double* heldTime = nullptr, + double* releasedTime = nullptr, + size_t controllerNum = 0) noexcept + { + if (controllerNum >= XUSER_MAX_COUNT) return false; + if (normalisedValue) *normalisedValue = controllerNormalisedValue(static_cast(input), controllers[controllerNum][static_cast(input)]); + if (heldTime) *heldTime = controllersHeldTime[controllerNum][static_cast(input)]; + if (releasedTime) *releasedTime = controllersReleasedTime[controllerNum][static_cast(input)]; + return controllerConsideredHeld(static_cast(input), controllers[controllerNum][static_cast(input)]); + } + + //If controller input was considered to be held down in THIS FRAME ONLY + //controllerNum should be between 0 and 3 + static inline bool GetControllerInputDown(SH_CONTROLLERCODE input, + double* releasedTime = nullptr, + size_t controllerNum = 0) noexcept + { + if (controllerNum >= XUSER_MAX_COUNT) return false; + if (releasedTime) *releasedTime = controllersReleasedTime[controllerNum][static_cast(input)]; + return (controllerConsideredHeld(static_cast(input), controllers[controllerNum][static_cast(input)]) && + !controllerConsideredHeld(static_cast(input), controllersLast[controllerNum][static_cast(input)])); + } + + //If controller input was considered to be released in THIS FRAME ONLY + //controllerNum should be between 0 and 3 + static inline bool GetControllerInputUp(SH_CONTROLLERCODE input, + double* releasedTime = nullptr, + size_t controllerNum = 0) noexcept + { + if (controllerNum >= XUSER_MAX_COUNT) return false; + if (releasedTime) *releasedTime = controllersReleasedTime[controllerNum][static_cast(input)]; + return (!controllerConsideredHeld(static_cast(input), controllers[controllerNum][static_cast(input)]) && + controllerConsideredHeld(static_cast(input), controllersLast[controllerNum][static_cast(input)])); + } + + /*------------------------------------------------------------------------*/ + /* Timing accessors */ + /*------------------------------------------------------------------------*/ //Keyboard///////////// @@ -456,6 +599,191 @@ namespace SHADE return keysToggleOffTime[static_cast(key)]; } + //Controller////////////////////// + + //How long has this controller input been considered to be held down for + static inline double GetControllerInputHeldTime(SH_CONTROLLERCODE code, + size_t controllerNum = 0) noexcept + { + if (controllerNum >= XUSER_MAX_COUNT) return 0.0; + return controllersHeldTime[controllerNum][static_cast(code)]; + } + + //How long has this controller input been considered to be released for + static inline double GetControllerInputReleasedTime(SH_CONTROLLERCODE code, + size_t controllerNum = 0) noexcept + { + if (controllerNum >= XUSER_MAX_COUNT) return 0.0; + return controllersReleasedTime[controllerNum][static_cast(code)]; + } + + /*------------------------------------------------------------------------*/ + /* Binding Functions */ + /*------------------------------------------------------------------------*/ + + //Add a new binding to the map + static inline void BindingsAdd(std::string newBindingName) noexcept + { + bindings.insert({ newBindingName, SHLogicalBindingData() }); + } + + //Remove a binding from the map + //Returns 1 if found and removed, 0 if not found + static inline size_t BindingsRemove(std::string targetBindingName) noexcept + { + return bindings.erase(targetBindingName); + } + + //Clears all bindings from the list + static inline void BindingsClear() noexcept + { + bindings.clear(); + } + + //Get the number of bindings present + static inline size_t BindingsCount() noexcept + { + return bindings.size(); + } + + //Check positive keycodes to binding + static inline std::set const& BindingsGetPositiveKeyCodes(std::string bindingName) noexcept + { + return bindings[bindingName].positiveKeyCodes; + } + + //Add positive SH_KEYCODE to binding + static inline void BindingsAddPositiveKeyCode(std::string targetBindingName, + SH_KEYCODE toAdd) noexcept + { + bindings[targetBindingName].positiveKeyCodes.insert(toAdd); + } + + //Remove positive SH_KEYCODE from binding + //If toRemove found and removed, returns 1. Otherwise, 0. + static inline size_t BindingsRemovePositiveKeyCode(std::string targetBindingName, + SH_KEYCODE toRemove) noexcept + { + return bindings[targetBindingName].positiveKeyCodes.erase(toRemove); + } + + //Check negative keycodes to binding + static inline std::set const& BindingsGetNegativeKeyCodes(std::string bindingName) noexcept + { + return bindings[bindingName].negativeKeyCodes; + } + + //Add negative SH_KEYCODE to binding + static inline void BindingsAddNegativeKeyCode(std::string targetBindingName, + SH_KEYCODE toAdd) noexcept + { + bindings[targetBindingName].negativeKeyCodes.insert(toAdd); + } + + //Remove negative SH_KEYCODE from binding + //If toRemove found and removed, returns 1. Otherwise, 0. + static inline size_t BindingsRemoveNegativeKeyCode(std::string targetBindingName, + SH_KEYCODE toRemove) noexcept + { + return bindings[targetBindingName].negativeKeyCodes.erase(toRemove); + } + + //Check positive controllercodes to binding + static inline std::set const& BindingsGetPositiveControllerCodes(std::string bindingName) noexcept + { + return bindings[bindingName].positiveControllerCodes; + } + + //Add positive SH_CONTROLLERCODE to binding + static inline void BindingsAddPositiveControllerCode(std::string targetBindingName, + SH_CONTROLLERCODE toAdd) noexcept + { + bindings[targetBindingName].positiveControllerCodes.insert(toAdd); + } + + //Remove positive SH_CONTROLLERCODE from binding + //If toRemove found and removed, returns 1. Otherwise, 0. + static inline size_t BindingsRemovePositiveControllerCode(std::string targetBindingName, + SH_CONTROLLERCODE toRemove) noexcept + { + return bindings[targetBindingName].positiveControllerCodes.erase(toRemove); + } + + //Check negative controllercodes to binding + static inline std::set const& BindingsGetNegativeControllerCodes(std::string bindingName) noexcept + { + return bindings[bindingName].negativeControllerCodes; + } + + //Add negative SH_CONTROLLERCODE to binding + static inline void BindingsAddNegativeControllerCode(std::string targetBindingName, + SH_CONTROLLERCODE toAdd) noexcept + { + bindings[targetBindingName].negativeControllerCodes.insert(toAdd); + } + + //Remove negative SH_CONTROLLERCODE from binding + //If toRemove found and removed, returns 1. Otherwise, 0. + static inline size_t BindingsRemoveNegativeControllerCode(std::string targetBindingName, + SH_CONTROLLERCODE toRemove) noexcept + { + return bindings[targetBindingName].negativeControllerCodes.erase(toRemove); + } + + //Mouse movement bindings + + static inline double const BindingsGetMouseXPositiveMultiplier(std::string bindingName) noexcept + { + return bindings[bindingName].mouseXPositiveMultiplier; + } + + static inline void BindingsSetMouseXPositiveMultiplier(std::string bindingName, double newValue) noexcept + { + bindings[bindingName].mouseXPositiveMultiplier = newValue; + } + + static inline double const BindingsGetMouseYPositiveMultiplier(std::string bindingName) noexcept + { + return bindings[bindingName].mouseXPositiveMultiplier; + } + + static inline void BindingsSetMouseYPositiveMultiplier(std::string bindingName, double newValue) noexcept + { + bindings[bindingName].mouseXPositiveMultiplier = newValue; + } + + //Get the axis value of binding, between -1 and 1 + static double GetBindingAxis(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Whether binding is being held or not + //Does not work for mouse movement + static bool GetBindingPositiveButton(std::string bindingName, size_t controllerNumber = 0) noexcept; + static bool GetBindingNegativeButton(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Whether binding is pressed down IN THIS FRAME ONLY + //Does not work for mouse movement + static bool GetBindingPositiveButtonDown(std::string bindingName, size_t controllerNumber = 0) noexcept; + static bool GetBindingNegativeButtonDown(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Whether binding is released IN THIS FRAME ONLY + //Does not work for mouse movement + static bool GetBindingPositiveButtonUp(std::string bindingName, size_t controllerNumber = 0) noexcept; + static bool GetBindingNegativeButtonUp(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Binding times + + //Does not work for mouse movement + static double GetBindingPositiveHeldTime(std::string bindingName, size_t controllerNumber = 0) noexcept; + static double GetBindingNegativeHeldTime(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Does not work for mouse movement + static double GetBindingPositiveReleasedTime(std::string bindingName, size_t controllerNumber = 0) noexcept; + static double GetBindingNegativeReleasedTime(std::string bindingName, size_t controllerNumber = 0) noexcept; + + //Binding mouse velocity + //Only for mouse movement + static double GetBindingMouseVelocity(std::string bindingName, size_t controllerNumber = 0) noexcept; + /*------------------------------------------------------------------------*/ /* Other Functions */ /*------------------------------------------------------------------------*/ @@ -482,10 +810,36 @@ namespace SHADE /*------------------------------------------------------------------------*/ static constexpr size_t MAX_KEYS = UCHAR_MAX + 1; + //How many recognised controller inputs there are + //To see the list, see the enum class in this file + static constexpr size_t MAX_CONTROLLER_INPUT = 20; + + //On/off button count + static constexpr size_t NUM_CONTROLLER_BUTTON = 14; + + //8-bit trigger values + static constexpr size_t NUM_CONTROLLER_TRIGGER = 2; + + //16-bit thumbstick values + static constexpr size_t NUM_CONTROLLER_THUMBSTICK = 4; + /*------------------------------------------------------------------------*/ /* Data Members */ /*------------------------------------------------------------------------*/ + //If the last input is from controller(s) or KB/M + //True if from controller(s), False if from KB/M + //Useful for switching control hints between controllers and KB/M + static bool controllerInUse; + + //BINDINGS////////////////////////////////////////////////////////////////// + + //Key is for binding names, they must be unique + //Multiple physical inputs per virtual/logical input are to be added to + //sets inside the logicalBinding values + //TODO make this an array of 4 / 5 users for multiplayer support + static std::map bindings; + //KEYBOARD AND MOUSE BUTTONS//////////////////////////////////////////////// //How many keys are presently being pressed @@ -558,15 +912,48 @@ namespace SHADE //CONTROLLER VARIABLES////////////////////////////////////////////////////// - //OTHER VARIABLES/////////////////////////////////////////////////////////// + //Count how many controllers are presently connected + //Useful for if the game is to decide to take in controller or KB/M input + //Between 0 and 4 (inclusive) + static unsigned char controllersConnectedCount; - //Axis bindings - //X - - //Y + //How many inputs (of any kind) on the controller are being used now + //Includes analog triggers and thumbsticks + static unsigned controllersInputCount[XUSER_MAX_COUNT]; - //Other mappings + //How many DIGITAL buttons on the controller are being pressed now + static unsigned controllersButtonCount[XUSER_MAX_COUNT]; - //Buffer + //Current state of controllers + //First index is for controller number + //Second index is for input type + static short controllers[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + + //State of controllers in the last frame + //First index is for controller number + //Second index is for input type + static short controllersLast[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + + //Held and released times + + //Controller held durations + //Stops ticking up when released + //Will be reset when held again + static double controllersHeldTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + + //Key released durations + //Stops ticking up when held + //Will be reset when off again + static double controllersReleasedTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + + /*------------------------------------------------------------------------*/ + /* Internal Helper Functions */ + /*------------------------------------------------------------------------*/ + + //Internal helper function for checking if input is considered held or not + static bool controllerConsideredHeld(size_t inputIdx, short value) noexcept; + + //Internal helper function for getting normalised controller value + static double controllerNormalisedValue(size_t inputIdx, short value) noexcept; }; } \ No newline at end of file From 6039ec534dc12548d8aa608b5078ad8741998707 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 23 Oct 2022 12:32:08 +0800 Subject: [PATCH 418/793] Added clamping of camera, and copying of position and rotation from transform --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 49 +++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 29 ++++++++++- SHADE_Engine/src/Camera/SHCameraSystem.h | 2 + 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 755311a0..5d49c887 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -3,6 +3,7 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "SHCameraSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/Transform/SHTransformComponent.h" namespace SHADE { @@ -23,33 +24,69 @@ namespace SHADE void SHCameraComponent::SetYaw(float yaw) noexcept { this->yaw = yaw; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{rotation.x,yaw, rotation.z}); + } dirtyView = true; } void SHCameraComponent::SetPitch(float pitch) noexcept { this->pitch = pitch; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{ pitch,rotation.y, rotation.z }); + } dirtyView = true; } void SHCameraComponent::SetRoll(float roll) noexcept { this->roll = roll; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, roll}); + } dirtyView = true; } void SHCameraComponent::SetPositionX(float x) noexcept { position.x = x; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ x,position.y, position.z}); + } dirtyView = true; } void SHCameraComponent::SetPositionY(float y) noexcept { position.y = y; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ position.x,y, position.z }); + } dirtyView = true; } void SHCameraComponent::SetPositionZ(float z) noexcept { position.z = z; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ position.x,position.y, z }); + } dirtyView = true; } void SHCameraComponent::SetPosition(float x,float y, float z) noexcept @@ -57,11 +94,23 @@ namespace SHADE position.x = x; position.y = y; position.z = z; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ x,y, z }); + } dirtyView = true; } void SHCameraComponent::SetPosition(SHVec3& pos) noexcept { this->position = pos; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(pos); + } dirtyView = true; } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 04c017c0..576ceb6b 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -4,7 +4,7 @@ #include "Input/SHInputManager.h" #include "Math/Vector/SHVec2.h" #include "ECS_Base/Managers/SHComponentManager.h" - +#include "Math/Transform/SHTransformComponent.h" namespace SHADE @@ -84,10 +84,25 @@ namespace SHADE void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept { + if (SHComponentManager::HasComponent(camera.GetEID()) == true) + { + auto transform = SHComponentManager::GetComponent(camera.GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + camera.pitch = rotation.x; + camera.yaw = rotation.y; + camera.roll = rotation.z; + camera.position = transform->GetWorldPosition(); + } + + if (camera.dirtyView) { SHVec3 view, right, UP; + + + ClampCameraRotation(camera); + GetCameraAxis(camera, view, right, UP); camera.viewMatrix = SHMatrix::Identity; @@ -205,5 +220,17 @@ namespace SHADE return CreateDirector(); } } + void SHCameraSystem::ClampCameraRotation(SHCameraComponent& camera) noexcept + { + if (camera.pitch > 85) + camera.SetPitch(85); + if (camera.pitch < -85) + camera.SetPitch(-85); + if (camera.roll > 85) + camera.SetRoll(85); + if (camera.roll < -85) + camera.SetRoll(-85); + + } } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 0d89b842..26d15a5d 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -49,6 +49,8 @@ namespace SHADE void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; DirectorHandle CreateDirector() noexcept; DirectorHandle GetDirector(size_t index) noexcept; + void ClampCameraRotation(SHCameraComponent& camera) noexcept; + protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; From c15994532bbf03d6b1c8bd3f25bc9161a8023240 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 23 Oct 2022 12:42:25 +0800 Subject: [PATCH 419/793] Added a function for editor camera update --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 53 ++++++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 2 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 576ceb6b..0f2003f1 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -9,7 +9,57 @@ namespace SHADE { + void SHCameraSystem::UpdateEditorCamera(double dt) noexcept + { + + auto& camera = editorCamera; + SHVec3 view, right, UP; + GetCameraAxis(camera, view, right, UP); + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) + { + camera.position -= right * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::D)) + { + camera.position += right * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::W)) + { + camera.position += view * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::S)) + { + camera.position -= view * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::Q)) + { + camera.position += UP * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::E)) + { + camera.position -= UP * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::RMB)) + { + double mouseX, mouseY; + SHInputManager::GetMouseVelocity(&mouseX, &mouseY); + + //std::cout << camera.yaw << std::endl; + + camera.pitch -= mouseY * dt * camera.turnSpeed.x; + camera.yaw -= mouseX * dt * camera.turnSpeed.y; + camera.dirtyView = true; + } + + UpdateCameraComponent(editorCamera); + } void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept { SHCameraSystem* system = static_cast(GetSystem()); @@ -222,6 +272,9 @@ namespace SHADE } void SHCameraSystem::ClampCameraRotation(SHCameraComponent& camera) noexcept { + + + if (camera.pitch > 85) camera.SetPitch(85); if (camera.pitch < -85) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 26d15a5d..dacda574 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -50,7 +50,7 @@ namespace SHADE DirectorHandle CreateDirector() noexcept; DirectorHandle GetDirector(size_t index) noexcept; void ClampCameraRotation(SHCameraComponent& camera) noexcept; - + void UpdateEditorCamera(double dt) noexcept; protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; From 96a7896da92b7f3deabda7adedde73a7a0550560 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 23 Oct 2022 12:50:56 +0800 Subject: [PATCH 420/793] changed includes to SHHandle and SHResourceLibrary --- SHADE_Engine/src/Camera/SHCameraDirector.h | 2 +- SHADE_Engine/src/Camera/SHCameraSystem.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h index b1311147..5d09788b 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.h +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -3,7 +3,7 @@ #include "SH_API.h" #include "ECS_Base/Entity/SHEntity.h" #include "Math/SHMatrix.h" -#include "Resource/Handle.h" +#include "Resource/SHHandle.h" namespace SHADE diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index dacda574..68071160 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -3,7 +3,7 @@ #include "ECS_Base/System/SHSystem.h" #include "SHCameraComponent.h" #include "ECS_Base/System/SHSystemRoutine.h" -#include "Resource/ResourceLibrary.h" +#include "Resource/SHResourceLibrary.h" #include "SHCameraDirector.h" #include "SH_API.h" @@ -16,7 +16,7 @@ namespace SHADE //This is not tied to any entity. Hence this EID should not be used. SHCameraComponent editorCamera; - ResourceLibrary directorLibrary; + SHResourceLibrary directorLibrary; std::vector directorHandleList; public: From aa1b45c3de611167656ff96abad35ea6f8d60d1f Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 23 Oct 2022 15:03:24 +0800 Subject: [PATCH 421/793] Fixed editor camera --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 3c5cae23..07995fc5 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -69,6 +69,7 @@ namespace SHADE if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { + std::cout << "Camera movement: "<UpdateCameraComponent(system->editorCamera); } @@ -134,14 +136,14 @@ namespace SHADE void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept { - if (SHComponentManager::HasComponent(camera.GetEID()) == true) + if (SHComponentManager::HasComponent(camera.GetEID()) == true && &camera != &editorCamera) { auto transform = SHComponentManager::GetComponent(camera.GetEID()); SHVec3 rotation = transform->GetWorldRotation(); camera.pitch = rotation.x; camera.yaw = rotation.y; camera.roll = rotation.z; - camera.position = transform->GetWorldPosition(); + camera.position = transform->GetWorldPosition(); } @@ -151,7 +153,7 @@ namespace SHADE SHVec3 view, right, UP; - ClampCameraRotation(camera); + //ClampCameraRotation(camera); GetCameraAxis(camera, view, right, UP); From d4fe63722a480eb18cbd24840a17eb007b695a0d Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 23 Oct 2022 15:05:31 +0800 Subject: [PATCH 422/793] WIP (TODO: remember to change commit message) --- Assets/Editor/Layouts/UserLayout.ini | 26 +-- .../Graphics/Commands/SHVkCommandBuffer.cpp | 30 ++- .../src/Graphics/Commands/SHVkCommandBuffer.h | 25 ++- .../Descriptors/SHVkDescriptorSetGroup.cpp | 9 +- .../Descriptors/SHVkDescriptorSetGroup.h | 2 + .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 4 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 140 ++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 33 ++- .../Interface/SHPostOffscreenRenderSystem.cpp | 2 +- .../MiddleEnd/Interface/SHRenderer.cpp | 2 +- .../src/Graphics/Pipeline/SHPipelineType.h | 6 +- .../src/Graphics/Pipeline/SHVkPipeline.cpp | 26 +-- .../src/Graphics/Pipeline/SHVkPipeline.h | 1 + .../Graphics/Pipeline/SHVkPipelineLayout.cpp | 32 +-- .../Graphics/Pipeline/SHVkPipelineLayout.h | 12 +- .../RenderGraph/SHAttachmentDescriptionType.h | 3 +- .../Graphics/RenderGraph/SHRenderGraph.cpp | 71 +++---- .../src/Graphics/RenderGraph/SHRenderGraph.h | 12 +- .../RenderGraph/SHRenderGraphNode.cpp | 82 +++++++- .../Graphics/RenderGraph/SHRenderGraphNode.h | 9 + .../RenderGraph/SHRenderGraphNodeCompute.cpp | 109 ++++++++++ .../RenderGraph/SHRenderGraphNodeCompute.h | 57 +++++ .../RenderGraph/SHRenderGraphResource.cpp | 8 + .../RenderGraph/SHRenderGraphResource.h | 2 + .../RenderGraph/SHRenderGraphStorage.h | 15 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 194 +++++++++--------- .../src/Graphics/RenderGraph/SHSubpass.h | 7 +- .../Graphics/RenderGraph/SHSubpassCompute.cpp | 53 ----- .../Graphics/RenderGraph/SHSubpassCompute.h | 49 ----- SHADE_Engine/src/Graphics/SHVkUtil.cpp | 15 ++ SHADE_Engine/src/Graphics/SHVkUtil.h | 12 +- TempShaderFolder/GreyscaleCs.glsl | 38 ---- TempShaderFolder/GreyscaleCs.spv | Bin 1400 -> 0 bytes TempShaderFolder/KirschCs.glsl | 167 +++++++++++++++ TempShaderFolder/KirschCs.spv | Bin 0 -> 5900 bytes 35 files changed, 788 insertions(+), 465 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp create mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h delete mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp delete mode 100644 SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h delete mode 100644 TempShaderFolder/GreyscaleCs.glsl delete mode 100644 TempShaderFolder/GreyscaleCs.spv create mode 100644 TempShaderFolder/KirschCs.glsl create mode 100644 TempShaderFolder/KirschCs.spv diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 530ee770..005c3556 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 +Pos=0,1367 +Size=3440,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=1920,1012 +Size=3440,1319 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,142 -Size=571,918 +Pos=0,170 +Size=646,1197 Collapsed=0 DockId=0x00000004,0 @@ -20,29 +20,29 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=1649,48 -Size=271,1012 +Pos=3169,48 +Size=271,1319 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=571,92 +Size=646,120 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=573,48 -Size=1074,1012 +Pos=648,48 +Size=2519,1319 Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=3440,1319 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=571,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=646,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1074,1036 CentralNode=1 Selected=0x13926F0B + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=999,1036 CentralNode=1 Selected=0x13926F0B DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index 4501ba7b..a744c795 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -10,6 +10,7 @@ #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/Images/SHVkImage.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/SHVkUtil.h" namespace SHADE @@ -299,7 +300,7 @@ namespace SHADE SHLOG_ERROR("Command buffer must have started recording before a pipeline can be bound. "); return; } - boundPipelineLayoutHdl = pipelineHdl->GetPipelineLayout(); + bindPointData[static_cast(pipelineHdl->GetPipelineType())].boundPipelineLayoutHdl = pipelineHdl->GetPipelineLayout(); vkCommandBuffer.bindPipeline(pipelineHdl->GetPipelineBindPoint(), pipelineHdl->GetVkPipeline()); } @@ -358,9 +359,10 @@ namespace SHADE } } - void SHVkCommandBuffer::BindDescriptorSet(Handle descSetGroup, vk::PipelineBindPoint bindPoint, uint32_t firstSet, std::span dynamicOffsets) + void SHVkCommandBuffer::BindDescriptorSet(Handle descSetGroup, SH_PIPELINE_TYPE bindPoint, uint32_t firstSet, std::span dynamicOffsets) { - vkCommandBuffer.bindDescriptorSets(bindPoint, boundPipelineLayoutHdl->GetVkPipelineLayout(), firstSet, descSetGroup->GetVkHandle(), dynamicOffsets); + uint32_t bindPointIndex = static_cast(bindPoint); + vkCommandBuffer.bindDescriptorSets(SHVkUtil::GetPipelineBindPointFromType(bindPoint), bindPointData[bindPointIndex].boundPipelineLayoutHdl->GetVkPipelineLayout(), firstSet, descSetGroup->GetVkHandle(), dynamicOffsets); } /***************************************************************************/ @@ -452,6 +454,11 @@ namespace SHADE vkCommandBuffer.drawIndexedIndirect(indirectDrawData->GetVkBuffer(), 0, drawCount, sizeof(vk::DrawIndexedIndirectCommand)); } + void SHVkCommandBuffer::ComputeDispatch(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) noexcept + { + vkCommandBuffer.dispatch (groupCountX, groupCountY, groupCountZ); + } + void SHVkCommandBuffer::CopyBufferToImage(const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo) { vkCommandBuffer.copyBufferToImage @@ -500,9 +507,9 @@ namespace SHADE // //vkCommandBuffer.pipelineBarrier() //} - void SHVkCommandBuffer::ForceSetPipelineLayout(Handle pipelineLayout) noexcept + void SHVkCommandBuffer::ForceSetPipelineLayout(Handle pipelineLayout, SH_PIPELINE_TYPE pipelineType) noexcept { - boundPipelineLayoutHdl = pipelineLayout; + bindPointData[static_cast(pipelineType)].boundPipelineLayoutHdl = pipelineLayout; } /***************************************************************************/ @@ -513,12 +520,13 @@ namespace SHADE */ /***************************************************************************/ - void SHVkCommandBuffer::SubmitPushConstants(void) const noexcept + void SHVkCommandBuffer::SubmitPushConstants(SH_PIPELINE_TYPE bindPoint) const noexcept { - vkCommandBuffer.pushConstants(boundPipelineLayoutHdl->GetVkPipelineLayout(), - boundPipelineLayoutHdl->GetPushConstantInterface().GetShaderStageFlags(), + auto layoutHdl = bindPointData[static_cast(bindPoint)].boundPipelineLayoutHdl; + vkCommandBuffer.pushConstants(layoutHdl->GetVkPipelineLayout(), + layoutHdl->GetPushConstantInterface().GetShaderStageFlags(), 0, - boundPipelineLayoutHdl->GetPushConstantInterface().GetSize(), pushConstantData); + layoutHdl->GetPushConstantInterface().GetSize(), pushConstantData); } /***************************************************************************/ @@ -695,7 +703,7 @@ namespace SHADE , usageFlags{ rhs.usageFlags } , commandBufferCount{ rhs.commandBufferCount } , parentPool{ rhs.parentPool } - , boundPipelineLayoutHdl{ rhs.boundPipelineLayoutHdl } + , bindPointData{ std::move (rhs.bindPointData)} { memcpy(pushConstantData, rhs.pushConstantData, PUSH_CONSTANT_SIZE); @@ -728,7 +736,7 @@ namespace SHADE usageFlags = rhs.usageFlags; commandBufferCount = rhs.commandBufferCount; parentPool = rhs.parentPool; - boundPipelineLayoutHdl = rhs.boundPipelineLayoutHdl; + bindPointData = std::move(rhs.bindPointData); memcpy(pushConstantData, rhs.pushConstantData, PUSH_CONSTANT_SIZE); rhs.vkCommandBuffer = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 9416a1aa..70a209ee 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -6,6 +6,7 @@ #include "SHCommandPoolResetMode.h" #include "Resource/ResourceLibrary.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" +#include "Graphics/Pipeline/SHPipelineType.h" namespace SHADE { @@ -39,7 +40,14 @@ namespace SHADE friend class ResourceLibrary; static constexpr uint16_t PUSH_CONSTANT_SIZE = 512; + private: + struct PipelineBindPointData + { + //! The currently bound pipeline + Handle boundPipelineLayoutHdl; + }; + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ @@ -66,8 +74,8 @@ namespace SHADE //! The command pool that this command buffer belongs to Handle parentPool; - //! The currently bound pipeline - Handle boundPipelineLayoutHdl; + //! Every command buffer will have a set of pipeline bind point specific data + std::array(SH_PIPELINE_TYPE::NUM_TYPES)> bindPointData; //! The push constant data for the command buffer uint8_t pushConstantData[PUSH_CONSTANT_SIZE]; @@ -112,13 +120,16 @@ namespace SHADE void BindPipeline (Handle const& pipelineHdl) noexcept; void BindVertexBuffer (uint32_t bindingPoint, Handle const& buffer, vk::DeviceSize offset) noexcept; void BindIndexBuffer (Handle const& buffer, uint32_t startingIndex) const noexcept; - void BindDescriptorSet (Handle descSetGroup, vk::PipelineBindPoint bindPoint, uint32_t firstSet, std::span dynamicOffsets); + void BindDescriptorSet (Handle descSetGroup, SH_PIPELINE_TYPE bindPoint, uint32_t firstSet, std::span dynamicOffsets); // Draw Commands void DrawArrays (uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const noexcept; void DrawIndexed (uint32_t indexCount, uint32_t firstIndex, uint32_t vertexOffset) const noexcept; void DrawMultiIndirect (Handle indirectDrawData, uint32_t drawCount); + // Compute Commands + void ComputeDispatch (uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) noexcept; + // Buffer Copy void CopyBufferToImage (const vk::Buffer& src, const vk::Image& dst, const std::vector& copyInfo); void CopyImageToBuffer (const vk::Image& src, const vk::Buffer& dst, const std::vector& copyInfo); @@ -138,13 +149,13 @@ namespace SHADE // Push Constant variable setting template - void SetPushConstantVariable(std::string variableName, T const& data) noexcept + void SetPushConstantVariable(std::string variableName, T const& data, SH_PIPELINE_TYPE bindPoint) noexcept { - memcpy (static_cast(pushConstantData) + boundPipelineLayoutHdl->GetPushConstantInterface().GetOffset(variableName), &data, sizeof (T)); + memcpy (static_cast(pushConstantData) + bindPointData[static_cast(bindPoint)].boundPipelineLayoutHdl->GetPushConstantInterface().GetOffset(variableName), &data, sizeof (T)); }; - void ForceSetPipelineLayout (Handle pipelineLayout) noexcept; + void ForceSetPipelineLayout (Handle pipelineLayout, SH_PIPELINE_TYPE pipelineType) noexcept; - void SubmitPushConstants (void) const noexcept; + void SubmitPushConstants (SH_PIPELINE_TYPE bindPoint) const noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS AND SETTERS */ diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp index ea859718..de68c583 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.cpp @@ -91,7 +91,7 @@ namespace SHADE // new write for the binding updater.writeInfos.emplace_back(); - updater.writeHashMap.try_emplace(writeHash, updater.writeInfos.size() - 1); + updater.writeHashMap.try_emplace(writeHash, static_cast(updater.writeInfos.size()) - 1u); auto& writeInfo = updater.writeInfos.back(); // Descriptor count for the write descriptor set. Usually this is set to 1, but if binding is variable sized, set to info passed in @@ -102,10 +102,10 @@ namespace SHADE //case vk::DescriptorType::eSampler: //case vk::DescriptorType::eSampledImage: case vk::DescriptorType::eCombinedImageSampler: + case vk::DescriptorType::eStorageImage: + case vk::DescriptorType::eInputAttachment: writeInfo.descImageInfos.resize(descriptorCount); - break; - //case vk::DescriptorType::eStorageImage: - // break; + break; case vk::DescriptorType::eUniformTexelBuffer: case vk::DescriptorType::eStorageTexelBuffer: case vk::DescriptorType::eUniformBuffer: @@ -165,6 +165,7 @@ namespace SHADE if (imageViewsAndSamplers.size() > writeInfo.descImageInfos.size()) { SHLOG_ERROR("Attempting write too many descriptors into descriptor set. Failed to write to vk::WriteDescriptorSet. "); + return; } for (uint32_t i = 0; i < imageViewsAndSamplers.size(); ++i) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h index f2b886e8..85c3ef97 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetGroup.h @@ -31,6 +31,8 @@ namespace SHADE class SHVkDescriptorSetGroup { public: + using viewSamplerLayout = std::tuple, Handle, vk::ImageLayout>; + /*-----------------------------------------------------------------------------*/ /* Constructor/Destructors */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 2705b4d1..40826047 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -369,7 +369,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHBatch::Draw(Handle cmdBuffer, uint32_t frameIndex) { - if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) + if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { SHLOG_WARNING("[SHBatch] Attempted to draw a batch with an invalid frame index."); return; @@ -385,7 +385,7 @@ namespace SHADE cmdBuffer->BindDescriptorSet ( matPropsDescSet[frameIndex], - vk::PipelineBindPoint::eGraphics, + SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, dynamicOffset ); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index add51196..14f2aa76 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -20,91 +20,91 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Constructor/Destructors */ - /*---------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* Constructor/Destructors */ + /*---------------------------------------------------------------------------------*/ - SHSuperBatch::SHSuperBatch(Handle sp) - : subpass { sp } - {} + SHSuperBatch::SHSuperBatch(Handle sp) + : subpass{ sp } + {} - /*---------------------------------------------------------------------------------*/ - /* Usage Functions */ - /*---------------------------------------------------------------------------------*/ - void SHSuperBatch::Add(const SHRenderable* renderable) noexcept + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void SHSuperBatch::Add(const SHRenderable* renderable) noexcept + { + const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); + + // Check if we have a batch with the same pipeline first + auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) + { + return batch.GetPipeline() == PIPELINE; + }); + + + // Create one if not found + if (batch == batches.end()) { - const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); - - // Check if we have a batch with the same pipeline first - auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) - { - return batch.GetPipeline() == PIPELINE; - }); - - - // Create one if not found - if (batch == batches.end()) - { - batches.emplace_back(PIPELINE); - batch = batches.end() - 1; - } - - // Add renderable in - batch->Add(renderable); + batches.emplace_back(PIPELINE); + batch = batches.end() - 1; } - void SHSuperBatch::Remove(const SHRenderable* renderable) noexcept + // Add renderable in + batch->Add(renderable); + } + + void SHSuperBatch::Remove(const SHRenderable* renderable) noexcept + { + const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); + + // Check if we have a Batch with the same pipeline yet + auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) + { + return batch.GetPipeline() == PIPELINE; + }); + + // Attempt to remove if it exists + if (batch == batches.end()) + return; + + batch->Remove(renderable); + } + + void SHSuperBatch::Clear() noexcept + { + for (auto& batch : batches) { - const Handle PIPELINE = renderable->GetMaterial()->GetBaseMaterial()->GetPipeline(); - - // Check if we have a Batch with the same pipeline yet - auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) - { - return batch.GetPipeline() == PIPELINE; - }); - - // Attempt to remove if it exists - if (batch == batches.end()) - return; - - batch->Remove(renderable); + batch.Clear(); } + batches.clear(); + } - void SHSuperBatch::Clear() noexcept + void SHSuperBatch::UpdateBuffers(uint32_t frameIndex, Handle descPool) + { + for (auto& batch : batches) { - for (auto& batch : batches) - { - batch.Clear(); - } - batches.clear(); + batch.UpdateMaterialBuffer(frameIndex, descPool); + batch.UpdateTransformBuffer(frameIndex); + batch.UpdateEIDBuffer(frameIndex); } + } - void SHSuperBatch::UpdateBuffers(uint32_t frameIndex, Handle descPool) + void SHSuperBatch::Build(Handle device, Handle descPool, uint32_t frameIndex) noexcept + { + // Build all batches + for (auto& batch : batches) { - for (auto& batch : batches) - { - batch.UpdateMaterialBuffer(frameIndex, descPool); - batch.UpdateTransformBuffer(frameIndex); - batch.UpdateEIDBuffer(frameIndex); - } + batch.Build(device, descPool, frameIndex); } + } - void SHSuperBatch::Build(Handle device, Handle descPool, uint32_t frameIndex) noexcept + void SHSuperBatch::Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept + { + // Build all batches + for (auto& batch : batches) { - // Build all batches - for (auto& batch : batches) - { - batch.Build(device, descPool, frameIndex); - } - } - - void SHSuperBatch::Draw(Handle cmdBuffer, uint32_t frameIndex) noexcept - { - // Build all batches - for (auto& batch : batches) - { - batch.Draw(cmdBuffer, frameIndex); - } + batch.Draw(cmdBuffer, frameIndex); } + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 386cef54..992cbdf1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -123,12 +123,12 @@ namespace SHADE shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); - shaderSourceLibrary.LoadShader(2, "GreyscaleCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); - auto greyscale = shaderModuleLibrary.GetShaderModule("GreyscaleCs.glsl"); + auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); cubeVS->Reflect(); cubeFS->Reflect(); greyscale->Reflect(); @@ -171,28 +171,25 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Scene Pre Postprocess", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene"}, {}); // no predecessors + auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene", "Scene Pre Postprocess"}, {}); // no predecessors //First subpass to write to G-Buffer auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); - gBufferWriteSubpass->AddColorOutput("Scene"); + gBufferWriteSubpass->AddColorOutput("Scene Pre Postprocess"); gBufferWriteSubpass->AddColorOutput("Entity ID"); gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - auto greyscale = shaderModuleLibrary.GetShaderModule("GreyscaleCs.glsl"); - - auto greyscaleSubpass = node->AddSubpass("Greyscale Subpass"); - greyscaleSubpass->AddGeneralInput("Scene"); - greyscaleSubpass->AddSubpassCompute(greyscale); - - // We do this to just transition our scene layout to shader read - auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); - sceneLayoutTransitionSubpass->AddInput("Scene"); + //auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); + //sceneLayoutTransitionSubpass->AddGeneralInput("Scene"); + + auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); + node->AddNodeCompute (greyscale, {"Scene Pre Postprocess", "Scene"}); // Generate world render graph worldRenderGraph->Generate(); @@ -375,7 +372,7 @@ namespace SHADE uint32_t h = static_cast(viewports[vpIndex]->GetHeight()); currentCmdBuffer->SetViewportScissor (static_cast(w), static_cast(h), w, h); - currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout()); + currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout(), SH_PIPELINE_TYPE::GRAPHICS); // Bind all the buffers required for meshes for (auto& [buffer, bindingPoint] : MESH_DATA) @@ -395,7 +392,7 @@ namespace SHADE currentCmdBuffer->BindDescriptorSet ( textureDescSet, - vk::PipelineBindPoint::eGraphics, + SH_PIPELINE_TYPE::GRAPHICS, 0, texDynamicOffset ); @@ -741,8 +738,8 @@ namespace SHADE auto cameraSystem = SHSystemManager::GetSystem(); #ifdef SHEDITOR - cameraSystem->GetEditorCamera()->SetWidth(resizeWidth); - cameraSystem->GetEditorCamera()->SetHeight(resizeHeight); + cameraSystem->GetEditorCamera()->SetWidth(static_cast(resizeWidth)); + cameraSystem->GetEditorCamera()->SetHeight(static_cast(resizeHeight)); #else #endif diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp index 8b41a979..ebce5c9e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp @@ -68,7 +68,7 @@ namespace SHADE { std::vector combinedImageSampler { - std::make_tuple(offscreenRender->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eShaderReadOnlyOptimal), + std::make_tuple(offscreenRender->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eGeneral), }; // Register the image view and sampler with the descriptor set. Now whenever rendering to the offscreen image is done, the descriptor set will see the change diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 2532f308..a1806ccd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -82,7 +82,7 @@ namespace SHADE std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; - cmdBuffer->BindDescriptorSet(cameraDescriptorSet, vk::PipelineBindPoint::eGraphics, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + cmdBuffer->BindDescriptorSet(cameraDescriptorSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); } } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineType.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineType.h index e7f5b6a8..2c1c80ff 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineType.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineType.h @@ -5,9 +5,13 @@ namespace SHADE { enum class SH_PIPELINE_TYPE { - GRAPHICS, + GRAPHICS = 0, COMPUTE, + RAY_TRACING, + NUM_TYPES, }; + + } #endif \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index 973218d1..973ae72f 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -4,6 +4,7 @@ #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Debugging/SHVulkanDebugUtil.h" #include "Graphics/RenderGraph/SHRenderGraph.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -268,7 +269,7 @@ namespace SHADE , logicalDeviceHdl{ rhs.logicalDeviceHdl } , pipelineLayout { rhs.pipelineLayout } { - vkPipeline = VK_NULL_HANDLE; + rhs.vkPipeline = VK_NULL_HANDLE; } /***************************************************************************/ @@ -308,7 +309,8 @@ namespace SHADE /***************************************************************************/ SHVkPipeline::~SHVkPipeline(void) noexcept { - logicalDeviceHdl->GetVkLogicalDevice().destroyPipeline(vkPipeline, nullptr); + if (vkPipeline) + logicalDeviceHdl->GetVkLogicalDevice().destroyPipeline(vkPipeline, nullptr); } /***************************************************************************/ @@ -336,7 +338,7 @@ namespace SHADE created = rhs.created; logicalDeviceHdl = rhs.logicalDeviceHdl; - vkPipeline = VK_NULL_HANDLE; + rhs.vkPipeline = VK_NULL_HANDLE; return *this; } @@ -422,18 +424,7 @@ namespace SHADE /***************************************************************************/ vk::PipelineBindPoint SHVkPipeline::GetPipelineBindPoint(void) const noexcept { - switch (pipelineType) - { - case SH_PIPELINE_TYPE::GRAPHICS: - return vk::PipelineBindPoint::eGraphics; - case SH_PIPELINE_TYPE::COMPUTE: - return vk::PipelineBindPoint::eCompute; - break; - default: - return vk::PipelineBindPoint::eGraphics; - break; - - } + return SHVkUtil::GetPipelineBindPointFromType(pipelineType); } /***************************************************************************/ @@ -473,4 +464,9 @@ namespace SHADE return pipelineLayout; } + SH_PIPELINE_TYPE SHVkPipeline::GetPipelineType(void) const noexcept + { + return pipelineType; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index fe55a41e..9ec18650 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -77,6 +77,7 @@ namespace SHADE vk::Pipeline GetVkPipeline (void) const noexcept; bool GetIsCreated (void) const noexcept; Handle GetPipelineLayout (void) const noexcept; + SH_PIPELINE_TYPE GetPipelineType (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp index 7a76447d..37d00795 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp @@ -216,9 +216,18 @@ namespace SHADE /***************************************************************************/ void SHVkPipelineLayout::PrepareVkDescriptorSetLayouts(void) noexcept { + // pipeline layouts contain global layouts first, then layouts for allocation descriptorSetLayoutsPipeline.reserve(descriptorSetLayoutsAllocate.size() + descriptorSetLayoutsGlobal.size()); + vkDescriptorSetLayoutsPipeline.reserve(descriptorSetLayoutsAllocate.size() + descriptorSetLayoutsGlobal.size()); - // Settle allocate layouts first + // First we insert the global layouts + for (auto const& layout : descriptorSetLayoutsGlobal) + { + descriptorSetLayoutsPipeline.emplace_back(layout); + //vkDescriptorSetLayoutsPipeline.emplace_back(layout->GetVkHandle()); + } + + // Then the allocate layouts vkDescriptorSetLayoutsAllocate.reserve(descriptorSetLayoutsAllocate.size()); for (auto const& layout : descriptorSetLayoutsAllocate) { @@ -226,18 +235,13 @@ namespace SHADE vkDescriptorSetLayoutsAllocate.emplace_back(layout->GetVkHandle()); } - // pipeline layouts contain global layouts first, then layouts for allocation - vkDescriptorSetLayoutsPipeline.reserve(descriptorSetLayoutsAllocate.size() + descriptorSetLayoutsGlobal.size()); - - // First we insert the global layouts - for (auto const& layout : descriptorSetLayoutsGlobal) + for (auto const& layout : descriptorSetLayoutsPipeline) { - descriptorSetLayoutsPipeline.emplace_back(layout); vkDescriptorSetLayoutsPipeline.emplace_back(layout->GetVkHandle()); } // Then we append layouts for allocation at the back of the vector - std::copy(vkDescriptorSetLayoutsAllocate.begin(), vkDescriptorSetLayoutsAllocate.end(), std::back_inserter(vkDescriptorSetLayoutsPipeline)); + //std::copy(vkDescriptorSetLayoutsAllocate.begin(), vkDescriptorSetLayoutsAllocate.end(), std::back_inserter(vkDescriptorSetLayoutsPipeline)); } /***************************************************************************/ @@ -294,6 +298,7 @@ namespace SHADE , descriptorSetLayoutsGlobal{pipelineLayoutParams.globalDescSetLayouts } // do a copy, some other pipeline layout might need this , descriptorSetLayoutsAllocate{} , vkDescriptorSetLayoutsAllocate{} + , descriptorSetLayoutsPipeline{} , vkDescriptorSetLayoutsPipeline{} { for (auto& mod : shaderModules) @@ -318,6 +323,7 @@ namespace SHADE , descriptorSetLayoutsGlobal{} , descriptorSetLayoutsAllocate{} , vkDescriptorSetLayoutsAllocate{} + , descriptorSetLayoutsPipeline{} , vkDescriptorSetLayoutsPipeline{} { @@ -368,7 +374,8 @@ namespace SHADE , descriptorSetLayoutsGlobal {std::move (rhs.descriptorSetLayoutsGlobal)} , descriptorSetLayoutsAllocate {std::move (rhs.descriptorSetLayoutsAllocate)} , vkDescriptorSetLayoutsAllocate{std::move (rhs.vkDescriptorSetLayoutsAllocate)} - , vkDescriptorSetLayoutsPipeline{std::move (rhs.vkDescriptorSetLayoutsAllocate)} + , descriptorSetLayoutsPipeline { std::move(rhs.descriptorSetLayoutsPipeline) } + , vkDescriptorSetLayoutsPipeline{ std::move(rhs.vkDescriptorSetLayoutsPipeline) } { rhs.vkPipelineLayout = VK_NULL_HANDLE; } @@ -441,12 +448,12 @@ namespace SHADE return {}; } - std::vector> SHVkPipelineLayout::GetDescriptorSetLayoutsPipeline(void) const noexcept + std::vector> const& SHVkPipelineLayout::GetDescriptorSetLayoutsPipeline(void) const noexcept { return descriptorSetLayoutsPipeline; } - std::vector> SHVkPipelineLayout::GetDescriptorSetLayoutsAllocate(void) const noexcept + std::vector> const& SHVkPipelineLayout::GetDescriptorSetLayoutsAllocate(void) const noexcept { return descriptorSetLayoutsAllocate; } @@ -464,7 +471,8 @@ namespace SHADE descriptorSetLayoutsGlobal = std::move(rhs.descriptorSetLayoutsGlobal); descriptorSetLayoutsAllocate = std::move(rhs.descriptorSetLayoutsAllocate); vkDescriptorSetLayoutsAllocate = std::move(rhs.vkDescriptorSetLayoutsAllocate); - vkDescriptorSetLayoutsPipeline = std::move(rhs.vkDescriptorSetLayoutsAllocate); + descriptorSetLayoutsPipeline = std::move(rhs.descriptorSetLayoutsPipeline); + vkDescriptorSetLayoutsPipeline = std::move(rhs.vkDescriptorSetLayoutsPipeline); rhs.vkPipelineLayout = VK_NULL_HANDLE; diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h index f5d363fa..b4298e00 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h @@ -74,12 +74,12 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - std::vector> const& GetShaderModules (void) const noexcept; - vk::PipelineLayout GetVkPipelineLayout (void) const noexcept; - SHPushConstantInterface const& GetPushConstantInterface (void) const noexcept; - Handle GetShaderBlockInterface (uint32_t set, uint32_t binding, vk::ShaderStageFlagBits shaderStage) const noexcept; - std::vector> GetDescriptorSetLayoutsPipeline(void) const noexcept; - std::vector> GetDescriptorSetLayoutsAllocate(void) const noexcept; + std::vector> const& GetShaderModules (void) const noexcept; + vk::PipelineLayout GetVkPipelineLayout (void) const noexcept; + SHPushConstantInterface const& GetPushConstantInterface (void) const noexcept; + Handle GetShaderBlockInterface (uint32_t set, uint32_t binding, vk::ShaderStageFlagBits shaderStage) const noexcept; + std::vector> const& GetDescriptorSetLayoutsPipeline(void) const noexcept; + std::vector> const& GetDescriptorSetLayoutsAllocate(void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h index efd3fb0f..c4d44ea8 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHAttachmentDescriptionType.h @@ -10,7 +10,8 @@ namespace SHADE DEPTH = 0x04, STENCIL = 0x08, DEPTH_STENCIL = 0x10, - INPUT = 0x20 + INPUT = 0x20, + STORAGE = 0x40 }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index df588c05..1c0798f1 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -10,7 +10,7 @@ #include "Tools/SHLogger.h" #include "SHAttachmentDescInitParams.h" #include "SHRenderGraphStorage.h" -#include "Graphics/RenderGraph/SHSubpassCompute.h" +#include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" namespace SHADE { @@ -59,7 +59,7 @@ namespace SHADE format = renderGraphStorage->swapchain->GetSurfaceFormatKHR().format; } - graphResources.try_emplace(resourceName, resourceManager->Create(renderGraphStorage, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); + renderGraphStorage->graphResources->try_emplace(resourceName, resourceManager->Create(renderGraphStorage, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); } /***************************************************************************/ @@ -104,16 +104,6 @@ namespace SHADE for (auto& input : subpass->inputReferences) resourceAttFinalLayouts[input.attachment] = input.layout; - - // Go through all subpass computes and initialize final layouts to GENERAL when a resource is detected to be used in it - //for (auto sbCompute : subpass->subpassComputes) - //{ - // auto const& indices = sbCompute->attachmentDescriptionIndices; - // for (auto& index : indices) - // { - // resourceAttFinalLayouts[index] = vk::ImageLayout::eGeneral; - // } - //} } for (uint32_t j = 0; j < node->attachmentDescriptions.size(); ++j) @@ -188,7 +178,7 @@ namespace SHADE // Now we want to loop through all attachments in all subpasses in the node and query // the resources being used. For each resource we want to query the type and record it // in bit fields (1 bit for each subpass). - uint32_t colorRead = 0, colorWrite = 0, depthRead = 0, depthWrite = 0, inputDependencies = 0, descriptorDependencies = 0; + uint32_t colorRead = 0, colorWrite = 0, depthRead = 0, depthWrite = 0, inputDependencies = 0; uint32_t i = 0; @@ -227,9 +217,6 @@ namespace SHADE if (subpass->inputReferences.size()) inputDependencies |= (1 << i); - if (!subpass->subpassComputes.empty()) - descriptorDependencies |= (1 << i); - // Input attachments can be any type, so we need to check what type it is for (auto& inputAtt : subpass->inputReferences) { @@ -295,12 +282,6 @@ namespace SHADE dstAccess |= vk::AccessFlagBits::eInputAttachmentRead; } - if (descriptorDependencies & (1 << i)) - { - dstStage |= vk::PipelineStageFlagBits::eComputeShader; - dstAccess |= vk::AccessFlagBits::eShaderWrite | vk::AccessFlagBits::eShaderRead; - } - //// If subpass of first renderpass, stage flag should be bottom of pipe //if (&node == &nodes.front() && i == 0) // srcStage = vk::PipelineStageFlagBits::eBottomOfPipe; @@ -316,8 +297,8 @@ namespace SHADE dep.srcStageMask = srcStage; - // initialize the barriers - //node->subpasses[i]->InitComputeBarriers(); + // initialize input descriptors + node->subpasses[i]->CreateInputDescriptors(); } } } @@ -371,15 +352,16 @@ namespace SHADE /***************************************************************************/ void SHRenderGraph::Init(Handle logicalDevice, Handle swapchain) noexcept { + resourceManager = std::make_shared(); + renderGraphStorage = resourceManager->Create(); + renderGraphStorage->graphResources = resourceManager->Create>>(); renderGraphStorage->logicalDevice = logicalDevice; renderGraphStorage->swapchain = swapchain; renderGraphStorage->resourceManager = resourceManager; renderGraphStorage->descriptorPool = logicalDevice->CreateDescriptorPools(); - - renderGraphStorage->ptrToResources = &graphResources; } /***************************************************************************/ @@ -396,20 +378,17 @@ namespace SHADE SHRenderGraph::SHRenderGraph(void) noexcept : renderGraphStorage{} , nodes{} - , graphResources{} , resourceManager{nullptr} { - resourceManager = std::make_shared(); } SHRenderGraph::SHRenderGraph(SHRenderGraph&& rhs) noexcept : renderGraphStorage{ rhs.renderGraphStorage } , nodeIndexing{ std::move(rhs.nodeIndexing) } , nodes{ std::move(rhs.nodes) } - , graphResources{ std::move(rhs.graphResources) } , resourceManager{ std::move(rhs.resourceManager) } { - + } SHRenderGraph& SHRenderGraph::operator=(SHRenderGraph&& rhs) noexcept @@ -420,7 +399,6 @@ namespace SHADE renderGraphStorage = rhs.renderGraphStorage; nodeIndexing = std::move(rhs.nodeIndexing); nodes = std::move(rhs.nodes); - graphResources = std::move(rhs.graphResources); resourceManager = std::move(rhs.resourceManager); return *this; @@ -456,12 +434,12 @@ namespace SHADE for (auto const& instruction : resourceInstruction) { // If the resource that the new node is requesting for exists, allow the graph to reference it - if (graphResources.contains(instruction.resourceName)) + if (renderGraphStorage->graphResources->contains(instruction.resourceName)) { descInitParams.push_back( { - .resourceHdl = graphResources.at(instruction.resourceName), - .dontClearOnLoad = false, + .resourceHdl = renderGraphStorage->graphResources->at(instruction.resourceName), + .dontClearOnLoad = instruction.dontClearOnLoad, } ); } @@ -506,12 +484,31 @@ namespace SHADE /***************************************************************************/ void SHRenderGraph::Generate(void) noexcept { + CheckForNodeComputes(); ConfigureAttachmentDescriptions(); ConfigureSubpasses(); ConfigureRenderpasses(); ConfigureFramebuffers(); } + /***************************************************************************/ + /*! + + \brief + This function goes through all renderpasses and checks for existence of + node computes. If they exist, adds dummy subpasses to transition resources + into general. + + */ + /***************************************************************************/ + void SHRenderGraph::CheckForNodeComputes(void) noexcept + { + for (auto& node : nodes) + { + node->AddDummySubpassIfNeeded(); + } + } + // TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a // better way to manage these void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept @@ -531,7 +528,7 @@ namespace SHADE void SHRenderGraph::HandleResize(uint32_t newWidth, uint32_t newHeight) noexcept { // resize resources - for (auto& [name, resource]: graphResources) + for (auto& [name, resource] : *renderGraphStorage->graphResources) resource->HandleResize(newWidth, newHeight); for (auto& node : nodes) @@ -551,9 +548,9 @@ namespace SHADE Handle SHRenderGraph::GetRenderGraphResource(std::string const& resourceName) const noexcept { - if (graphResources.contains(resourceName)) + if (renderGraphStorage->graphResources->contains(resourceName)) { - return graphResources.at(resourceName); + return renderGraphStorage->graphResources->at(resourceName); } return {}; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index 529476cf..b445134c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -66,9 +66,6 @@ namespace SHADE //! Render graph nodes std::vector> nodes; - //! Resources that exist for the entire render graph - std::unordered_map> graphResources; - //! Resource library for graph handles std::shared_ptr resourceManager; @@ -88,10 +85,11 @@ namespace SHADE void AddResource(std::string resourceName, std::initializer_list typeFlags, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceInstruction, std::initializer_list predecessorNodes) noexcept; - void Generate (void) noexcept; - void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; - void FinaliseBatch(uint32_t frameIndex, Handle descPool); - void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; + void Generate (void) noexcept; + void CheckForNodeComputes (void) noexcept; + void Execute (uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept; + void FinaliseBatch (uint32_t frameIndex, Handle descPool); + void HandleResize (uint32_t newWidth, uint32_t newHeight) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 0d88a93a..c315bffd 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -7,6 +7,8 @@ #include "SHRenderGraphResource.h" #include "SHSubpass.h" #include "SHRenderGraphStorage.h" +#include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -80,7 +82,6 @@ namespace SHADE fbHeight = attResources[j]->height; } - framebuffers[i]->HandleResize(renderpass, imageViews, fbWidth, fbHeight); } @@ -88,6 +89,11 @@ namespace SHADE { subpass->HandleResize(); } + + for (auto& nodeCompute : nodeComputes) + { + nodeCompute->HandleResize(); + } } /***************************************************************************/ @@ -121,6 +127,7 @@ namespace SHADE , subpasses{} , executed{ false } , configured{ false } + , nodeComputes{} { // pipeline library initialization pipelineLibrary.Init(graphStorage->logicalDevice); @@ -181,6 +188,7 @@ namespace SHADE , batcher{ std::move(rhs.batcher) } , spDescs{ std::move(rhs.spDescs) } , spDeps{ std::move(rhs.spDeps) } + , nodeComputes{ std::move(rhs.nodeComputes) } { rhs.renderpass = {}; @@ -204,6 +212,7 @@ namespace SHADE batcher = std::move(rhs.batcher); spDescs = std::move(rhs.spDescs); spDeps = std::move(rhs.spDeps); + nodeComputes = std::move(rhs.nodeComputes); rhs.renderpass = {}; @@ -235,7 +244,7 @@ namespace SHADE } // Add subpass to container and create mapping for it - subpasses.emplace_back(graphStorage->resourceManager->Create(graphStorage, GetHandle(), subpasses.size(), &resourceAttachmentMapping)); + subpasses.emplace_back(graphStorage->resourceManager->Create(graphStorage, GetHandle(), static_cast(subpasses.size()), &resourceAttachmentMapping)); subpassIndexing.try_emplace(subpassName, static_cast(subpasses.size()) - 1u); Handle subpass = subpasses.back(); subpass->Init(*graphStorage->resourceManager); @@ -246,21 +255,84 @@ namespace SHADE return subpass; } + Handle SHRenderGraphNode::AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, float numWorkGroupScale/* = 1.0f*/) noexcept + { + // Look for the required resources in the graph + std::vector> nodeComputeResources{}; + nodeComputeResources.reserve(resources.size()); + + for (auto& resourceName : resources) + { + auto resource = graphStorage->graphResources->at(resourceName); + nodeComputeResources.push_back(resource); + } + + // Create the subpass compute with the resources + auto nodeCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, std::move(nodeComputeResources)); + nodeComputes.push_back(nodeCompute); + + return nodeCompute; + } + + /***************************************************************************/ + /*! + + \brief + This function checks all node computes and adds a subpass to transition + all needed resources to general. + + */ + /***************************************************************************/ + void SHRenderGraphNode::AddDummySubpassIfNeeded(void) noexcept + { + if (!nodeComputes.empty()) + { + // we save the resource names involved + std::unordered_set resourcesInvolved; + for (auto& compute : nodeComputes) + { + for (auto& resource : compute->resources) + { + resourcesInvolved.emplace(resource->GetName()); + } + } + + // insert them all for a subpass to transition them. This subpass is the last subpass + auto dummySubpass = AddSubpass("dummy"); + for (auto& resource : resourcesInvolved) + { + dummySubpass->AddGeneralInput(resource); + + if (SHVkUtil::IsDepthStencilAttachment(graphStorage->graphResources->at(resource)->GetResourceFormat())) + dummySubpass->AddGeneralDepthOutput(resource); + else + dummySubpass->AddGeneralColorOutput(resource); + } + } + } + void SHRenderGraphNode::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept { - frameIndex = (framebuffers.size() > 1) ? frameIndex : 0; - commandBuffer->BeginRenderpass(renderpass, framebuffers[frameIndex]); + uint32_t framebufferIndex = (framebuffers.size() > 1) ? frameIndex : 0; + commandBuffer->BeginRenderpass(renderpass, framebuffers[framebufferIndex]); for (uint32_t i = 0; i < subpasses.size(); ++i) { subpasses[i]->Execute(commandBuffer, descPool, frameIndex); // Go to next subpass if not last subpass - if (i != subpasses.size() - 1) + if (i != static_cast(subpasses.size()) - 1u) commandBuffer->NextSubpass(); } commandBuffer->EndRenderpass(); + + + // Execute all subpass computes + for (auto& sbCompute : nodeComputes) + { + sbCompute->Execute(commandBuffer, frameIndex); + } } Handle SHRenderGraphNode::GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 7c3622ad..335b93e3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -21,6 +21,7 @@ namespace SHADE class SHVkDescriptorPool; class SHGraphicsGlobalData; class SHRenderGraphStorage; + class SHRenderGraphNodeCompute; class SH_API SHRenderGraphNode : public ISelfHandle { @@ -67,6 +68,10 @@ namespace SHADE //! Every renderpass will require a pipeline library that will contain pipelines compatible with this renderpass SHPipelineLibrary pipelineLibrary; + //! Sometimes we want the subpass to do something to the images instead + //! of drawing objects on the image (i.e. compute). + std::vector> nodeComputes; + //! Whether or not the node has finished execution bool executed; @@ -75,6 +80,7 @@ namespace SHADE SHBatcher batcher; + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ @@ -94,6 +100,9 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle AddSubpass(std::string subpassName) noexcept; + Handle AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, float numWorkGroupScale = 1.0f) noexcept; + void AddDummySubpassIfNeeded (void) noexcept; + // TODO: RemoveSubpass() void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; Handle GetOrCreatePipeline(std::pair, Handle> const& vsFsPair, Handle subpass) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp new file mode 100644 index 00000000..a5208fcf --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -0,0 +1,109 @@ +#include "SHpch.h" +#include "SHRenderGraphNodeCompute.h" +#include "Graphics/Pipeline/SHVkPipeline.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "Graphics/Descriptors/SHVkDescriptorPool.h" +#include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Pipeline/SHVkPipelineLayout.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "SHRenderGraphStorage.h" +#include "SHRenderGraphResource.h" +#include "Graphics/Commands/SHVkCommandBuffer.h" + +namespace SHADE +{ + SHRenderGraphNodeCompute::SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, float inNumWorkGroupScale/* = 1.0f*/) noexcept + : computePipeline{} + , pipelineLayout{} + , resources{} + , groupSizeX{0} + , groupSizeY{0} + , numWorkGroupScale {std::clamp(inNumWorkGroupScale, 0.0f, 1.0f)} + { + SHPipelineLayoutParams pipelineLayoutParams + { + .shaderModules = {computeShaderModule}, + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() + }; + + // Create pipeline layout from parameters + pipelineLayout = graphStorage->logicalDevice->CreatePipelineLayout (pipelineLayoutParams); + + // Create the compute pipeline + computePipeline = graphStorage->logicalDevice->CreateComputePipeline(pipelineLayout); + + // and construct it + computePipeline->ConstructPipeline(); + + // save the resources + resources = std::move (subpassComputeResources); + + //Get the descriptor set layouts required to allocate. We only want the ones for allocate because + //global descriptors are already bound in the main system. + auto const& layouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); + + //Variable counts for the descriptor sets (all should be 1). + std::vector variableCounts{ static_cast(layouts.size()) }; + std::fill(variableCounts.begin(), variableCounts.end(), 0); + + // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) + for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) + { + descSetGroups[i] = graphStorage->descriptorPool->Allocate(layouts, variableCounts); + } + + + HandleResize(); + } + + void SHRenderGraphNodeCompute::Execute(Handle cmdBuffer, uint32_t frameIndex) noexcept + { + // bind the compute pipeline + cmdBuffer->BindPipeline(computePipeline); + + // bind descriptor sets + cmdBuffer->BindDescriptorSet(descSetGroups[frameIndex], SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, {}); + + // dispatch compute + cmdBuffer->ComputeDispatch(groupSizeX, groupSizeY, 1); + + // TODO: barrier + + } + + void SHRenderGraphNodeCompute::HandleResize(void) noexcept + { + // Get the layout for the render graph resource. We can index it this way because the container returned is a container of layouts that includes the global ones + auto pipelineDescSetLayouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE]; + + // everything below here needs resizing + for (uint32_t frameIndex = 0; frameIndex < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++frameIndex) + { + uint32_t i = 0; + + // loop through bindings and write descriptor sets + for (auto& binding : pipelineDescSetLayouts->GetBindings()) + { + uint32_t imageIndex = (resources[i]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? frameIndex : 0; + + SHVkDescriptorSetGroup::viewSamplerLayout vsl = std::make_tuple(resources[i]->GetImageView(imageIndex), Handle{}, vk::ImageLayout::eGeneral); + descSetGroups[frameIndex]->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, { &vsl, 1 }); + descSetGroups[frameIndex]->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); + ++i; + } + } + + // Get the group size from the max width and height + uint32_t maxWidth = 0, maxHeight = 0; + for (auto& resource : resources) + { + maxWidth = std::max(resource->GetWidth(), maxWidth); + maxHeight = std::max(resource->GetHeight(), maxHeight); + } + + groupSizeX = maxWidth / workGroupSizeX; + groupSizeY = maxHeight / workGroupSizeY; + } + +} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h new file mode 100644 index 00000000..e35326f7 --- /dev/null +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -0,0 +1,57 @@ +#pragma once + +#include "Resource/Handle.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include +#include +#include + +namespace SHADE +{ + class SHVkPipeline; + class SHVkDescriptorSetGroup; + class SHVkDescriptorPool; + class SHVkLogicalDevice; + class SHVkPipelineLayout; + class SHRenderGraphStorage; + class SHRenderGraphResource; + class SHVkShaderModule; + class SHVkCommandBuffer; + + class SHRenderGraphNodeCompute + { + private: + static constexpr uint32_t workGroupSizeX = 16; + static constexpr uint32_t workGroupSizeY = 16; + + //! To run the dispatch command + Handle computePipeline; + + //! Pipeline layout for the pipeline creation + Handle pipelineLayout; + + //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> descSetGroups; + + //! vector of resources needed by the subpass compute + std::vector> resources; + + //! X dimension work group size. Should scale with resource size. + uint32_t groupSizeX; + + //! Y dimension work group size + uint32_t groupSizeY; + + float numWorkGroupScale; + + public: + SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, float inNumWorkGroupScale = 1.0f) noexcept; + + void Execute (Handle cmdBuffer, uint32_t frameIndex) noexcept; + void HandleResize (void) noexcept; + + friend class SHRenderGraph; + friend class SHRenderGraphNode; + }; +} + diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 651ba88b..502e09b2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -117,6 +117,9 @@ namespace SHADE usage |= vk::ImageUsageFlagBits::eInputAttachment; usage |= vk::ImageUsageFlagBits::eSampled; break; + case SH_ATT_DESC_TYPE_FLAGS::STORAGE: + usage |= vk::ImageUsageFlagBits::eStorage; + break; case SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT: { SHLOG_ERROR ("COLOR_PRESENT cannot be with other resource type flags. "); @@ -334,4 +337,9 @@ namespace SHADE return mipLevels; } + std::string SHRenderGraphResource::GetName(void) const noexcept + { + return resourceName; + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h index 55f25864..832fa772 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.h @@ -88,9 +88,11 @@ namespace SHADE Handle GetImageView (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; Handle GetImage (uint32_t index = NON_SWAPCHAIN_RESOURCE_INDEX) const noexcept; uint8_t GetMipLevels (void) const noexcept; + std::string GetName (void) const noexcept; friend class SHRenderGraphNode; friend class SHRenderGraph; friend class SHSubpass; + friend class SHRenderGraphNodeCompute; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h index cb274697..f8123191 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphStorage.h @@ -9,13 +9,14 @@ namespace SHADE class SHVkSwapchain; class SHGraphicsGlobalData; class SHVkDescriptorPool; + class SHRenderGraphResource; class SHRenderGraphStorage { //! Logical device for creation of vulkan objects Handle logicalDevice; - //! swapchain hdl + //! swapchain handle Handle swapchain; //! Resource manager for creation of objects @@ -24,13 +25,19 @@ namespace SHADE //! Descriptor pool for the descriptor sets to be created in the subpasses Handle descriptorPool; - //! For accessing resources anyone in the graph - std::unordered_map> const* ptrToResources; + //! For accessing resources anywhere in the graph + Handle>> graphResources; + + //SHRenderGraphStorage(void) noexcept; + //SHRenderGraphStorage(SHRenderGraphStorage&& rhs) noexcept; + //SHRenderGraphStorage& operator=(SHRenderGraphStorage&& rhs) noexcept; friend class SHRenderGraph; friend class SHRenderGraphNode; friend class SHSubpass; friend class SHRenderGraphResource; - friend class SHSubpassCompute; + friend class SHRenderGraphNodeCompute; }; + + } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index e6472c52..5e3449c2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -7,7 +7,6 @@ #include "Graphics/Shaders/SHVkShaderModule.h" #include "SHRenderGraphNode.h" #include "SHRenderGraphStorage.h" -#include "Graphics/RenderGraph/SHSubpassCompute.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/Swapchain/SHVkSwapchain.h" #include "Graphics/Images/SHVkSampler.h" @@ -40,7 +39,6 @@ namespace SHADE , depthReferences{} , inputReferences{} , graphStorage{ renderGraphStorage } - , subpassComputes{} , inputImageDescriptors {SHGraphicsConstants::NUM_FRAME_BUFFERS} { } @@ -66,8 +64,12 @@ namespace SHADE , resourceAttachmentMapping{ rhs.resourceAttachmentMapping } , descriptorSetLayout{ rhs.descriptorSetLayout } , exteriorDrawCalls{ std::move(rhs.exteriorDrawCalls) } - , graphStorage{ std::move(rhs.graphStorage) } - , subpassComputes{std::move (rhs.subpassComputes)} + , graphStorage{ rhs.graphStorage } + , inputNames{ std::move(rhs.inputNames) } + , inputImageDescriptors{ std::move(rhs.inputImageDescriptors) } + , inputDescriptorLayout{ rhs.inputDescriptorLayout } + , inputSamplers{ rhs.inputSamplers } + { } @@ -97,8 +99,11 @@ namespace SHADE resourceAttachmentMapping = rhs.resourceAttachmentMapping; descriptorSetLayout = rhs.descriptorSetLayout; exteriorDrawCalls = std::move(rhs.exteriorDrawCalls); - graphStorage = std::move(rhs.graphStorage); - subpassComputes = std::move(rhs.subpassComputes); + graphStorage = rhs.graphStorage; + inputNames = std::move(rhs.inputNames); + inputImageDescriptors = std::move(rhs.inputImageDescriptors); + inputDescriptorLayout = rhs.inputDescriptorLayout; + inputSamplers = rhs.inputSamplers; return *this; } @@ -117,7 +122,12 @@ namespace SHADE /***************************************************************************/ void SHSubpass::AddColorOutput(std::string resourceToReference) noexcept { - colorReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); + colorReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eColorAttachmentOptimal }); + } + + void SHSubpass::AddGeneralColorOutput(std::string resourceToReference) noexcept + { + colorReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eGeneral }); } /***************************************************************************/ @@ -154,7 +164,13 @@ namespace SHADE //Invalid return; } - depthReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), imageLayout }); + depthReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), imageLayout }); + } + + void SHSubpass::AddGeneralDepthOutput(std::string resourceToReference) noexcept + { + depthReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eGeneral }); + } /***************************************************************************/ @@ -171,15 +187,14 @@ namespace SHADE /***************************************************************************/ void SHSubpass::AddInput(std::string resourceToReference) noexcept { - inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); + inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eShaderReadOnlyOptimal }); inputNames.push_back(resourceToReference); } void SHSubpass::AddGeneralInput(std::string resourceToReference) noexcept { - inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->ptrToResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eGeneral }); - + inputReferences.push_back({ resourceAttachmentMapping->at(graphStorage->graphResources->at(resourceToReference).GetId().Raw), vk::ImageLayout::eGeneral }); } void SHSubpass::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept @@ -196,11 +211,6 @@ namespace SHADE drawCall(commandBuffer); } - // if there are subpass computes, transition all to GENERAL layout first - for (auto& sbCompute : subpassComputes) - { - - } } void SHSubpass::HandleResize(void) noexcept @@ -213,29 +223,6 @@ namespace SHADE exteriorDrawCalls.push_back(newDrawCall); } - Handle SHSubpass::AddSubpassCompute(Handle computeShaderModule/*, std::initializer_list resources*/) noexcept - { - //// for the subpass compute to store indices to the resources, see member comments - //std::unordered_set attDescIndices{}; - //attDescIndices.reserve (resources.size()); - - //// Look for the required resources in the graph - //std::vector> subpassComputeResources{}; - //subpassComputeResources.reserve(resources.size()); - - //for (auto& resourceName : resources) - //{ - // auto resource = graphStorage->ptrToResources->at(resourceName); - // subpassComputeResources.push_back(resource); - // attDescIndices.emplace(resourceAttachmentMapping->at (resource.GetId().Raw)); - //} - - // Create the subpass compute with the resources - auto subpassCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule/*, std::move(subpassComputeResources), std::move (attDescIndices)*/); - subpassComputes.push_back(subpassCompute); - - return subpassCompute; - } void SHSubpass::Init(ResourceManager& resourceManager) noexcept { @@ -245,48 +232,51 @@ namespace SHADE void SHSubpass::CreateInputDescriptors(void) noexcept { - //std::vector bindings{}; + if (inputNames.empty()) + return; - //for (auto& input : inputReferences) - //{ - // SHVkDescriptorSetLayout::Binding newBinding - // { - // .Type = (input.layout == vk::ImageLayout::eShaderReadOnlyOptimal) ? vk::DescriptorType::eInputAttachment : vk::DescriptorType::eStorageImage, - // .Stage = vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eCompute, - // .BindPoint = static_cast(bindings.size()), - // .DescriptorCount = 1, - // .flags = {}, - // }; + std::vector bindings{}; - // bindings.push_back(newBinding); - //} + for (auto& input : inputReferences) + { + SHVkDescriptorSetLayout::Binding newBinding + { + .Type = (input.layout == vk::ImageLayout::eShaderReadOnlyOptimal) ? vk::DescriptorType::eInputAttachment : vk::DescriptorType::eStorageImage, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = static_cast(bindings.size()), + .DescriptorCount = 1, + .flags = {}, + }; - //// We build a new descriptor set layout to store our images - //inputDescriptorLayout = graphStorage->logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, bindings); + bindings.push_back(newBinding); + } - //// we store a sampler if its an input attachment. if it is storage image, no need sampler, store an empty handle. - //for (uint32_t i = 0; i < bindings.size(); ++i) - //{ - // if (bindings[i].Type == vk::DescriptorType::eInputAttachment) - // { - // auto newSampler = graphStorage->logicalDevice->CreateSampler(SHVkSamplerParams - // { - // .minFilter = vk::Filter::eLinear, - // .magFilter = vk::Filter::eLinear, - // .addressMode = vk::SamplerAddressMode::eRepeat, - // .mipmapMode = vk::SamplerMipmapMode::eLinear, - // .minLod = -1000, - // .maxLod = 1000 - // } - // ); + // We build a new descriptor set layout to store our images + inputDescriptorLayout = graphStorage->logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, bindings); - // inputSamplers.push_back(newSampler); - // } - // else - // { - // inputSamplers.push_back({}); - // } - //} + // we store a sampler if its an input attachment. if it is storage image, no need sampler, store an empty handle. + for (uint32_t i = 0; i < bindings.size(); ++i) + { + if (bindings[i].Type == vk::DescriptorType::eInputAttachment) + { + auto newSampler = graphStorage->logicalDevice->CreateSampler(SHVkSamplerParams + { + .minFilter = vk::Filter::eLinear, + .magFilter = vk::Filter::eLinear, + .addressMode = vk::SamplerAddressMode::eRepeat, + .mipmapMode = vk::SamplerMipmapMode::eLinear, + .minLod = -1000, + .maxLod = 1000 + } + ); + + inputSamplers.push_back(newSampler); + } + else + { + inputSamplers.push_back({}); + } + } //// maybe do this in handle resize? //UpdateWriteDescriptors(); @@ -294,39 +284,43 @@ namespace SHADE void SHSubpass::UpdateWriteDescriptors(void) noexcept { - //auto const& bindings = inputDescriptorLayout->GetBindings(); + if (inputNames.empty()) + return; - //std::vector variableCounts{ static_cast(bindings.size()), 0 }; + auto const& bindings = inputDescriptorLayout->GetBindings(); - //uint32_t i = 0; + std::vector variableCounts{ static_cast(bindings.size()) }; + std::fill (variableCounts.begin(), variableCounts.end(), 0u); - //// For every frame's descriptor set - //for (auto& group : inputImageDescriptors) - //{ - // if (group) - // group.Free(); - // group = graphStorage->descriptorPool->Allocate({ inputDescriptorLayout }, variableCounts); + // For every frame's descriptor set + for (auto& group : inputImageDescriptors) + { + if (group) + group.Free(); - // for (auto& binding : bindings) - // { - // // get the resource - // auto resource = graphStorage->ptrToResources->at(inputNames[binding.BindPoint]); + group = graphStorage->descriptorPool->Allocate({ inputDescriptorLayout }, variableCounts); - // // If resource is swapchain image, get the correct image, if not just get 0. - // uint32_t viewIndex = (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? i : 0; + uint32_t i = 0; + for (auto& binding : bindings) + { + // get the resource + auto resource = graphStorage->graphResources->at(inputNames[binding.BindPoint]); - // // layout is GENERAL if image is meant to be used as storage image, if not use SHADER_READ_ONLY_OPTINAL - // vk::ImageLayout descriptorLayout = (binding.Type == vk::DescriptorType::eStorageImage) ? vk::ImageLayout::eGeneral : vk::ImageLayout::eShaderReadOnlyOptimal; + // If resource is swapchain image, get the correct image, if not just get 0. + uint32_t viewIndex = (resource->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? i : 0; - // // Update descriptor sets - // auto args = std::make_tuple(resource->GetImageView(viewIndex), inputSamplers[i], descriptorLayout); - // group->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, std::span{&args, 1}); - // group->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); - // } + // layout is GENERAL if image is meant to be used as storage image, if not use SHADER_READ_ONLY_OPTINAL + vk::ImageLayout descriptorLayout = (binding.Type == vk::DescriptorType::eStorageImage) ? vk::ImageLayout::eGeneral : vk::ImageLayout::eShaderReadOnlyOptimal; - // ++i; - //} + // Update descriptor sets + auto args = std::make_tuple(resource->GetImageView(viewIndex), inputSamplers[i], descriptorLayout); + group->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, std::span{&args, 1}); + group->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); + } + + ++i; + } } //void SHSubpass::InitComputeBarriers(void) noexcept diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h index 48874a06..5a9dafb2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.h @@ -17,7 +17,6 @@ namespace SHADE class SHVkDescriptorSetGroup; class SHVkDescriptorPool; class SHRenderGraphStorage; - class SHSubpassCompute; class SHVkShaderModule; class SHVkSampler; @@ -64,9 +63,6 @@ namespace SHADE std::vector> inputSamplers; - //! Sometimes we want the subpass to do something to the images instead - //! of drawing objects on the image (i.e. compute). - std::vector> subpassComputes; ////! subpass compute image barriers. We do this because every frame has a different ////! swapchain image. If the resource we want to transition is not a swapchain image, @@ -96,7 +92,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ // Preparation functions void AddColorOutput(std::string resourceToReference) noexcept; + void AddGeneralColorOutput(std::string resourceToReference) noexcept; void AddDepthOutput(std::string resourceToReference, SH_ATT_DESC_TYPE_FLAGS attachmentDescriptionType = SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL) noexcept; + void AddGeneralDepthOutput(std::string resourceToReference) noexcept; void AddInput(std::string resourceToReference) noexcept; void AddGeneralInput (std::string resourceToReference) noexcept; void AddExteriorDrawCalls(std::function&)> const& newDrawCall) noexcept; @@ -105,7 +103,6 @@ namespace SHADE void Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept; void HandleResize (void) noexcept; - Handle AddSubpassCompute(Handle computeShaderModule/*, std::initializer_list resources*/) noexcept; void Init(ResourceManager& resourceManager) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp deleted file mode 100644 index 79242c7d..00000000 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "SHpch.h" -#include "SHSubpassCompute.h" -#include "Graphics/Pipeline/SHVkPipeline.h" -#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" -#include "Graphics/Descriptors/SHVkDescriptorPool.h" -#include "Graphics/Devices/SHVkLogicalDevice.h" -#include "Graphics/Pipeline/SHVkPipelineLayout.h" -#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" -#include "SHRenderGraphStorage.h" -//#include "" - -namespace SHADE -{ - SHSubpassCompute::SHSubpassCompute(Handle graphStorage, Handle computeShaderModule/*, std::vector>&& subpassComputeResources, std::unordered_set&& attDescIndices*/) noexcept - : pipeline{} - { - SHPipelineLayoutParams pipelineLayoutParams - { - .shaderModules = {computeShaderModule}, - .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() - }; - - // Create descriptor set from - pipelineLayout = graphStorage->logicalDevice->CreatePipelineLayout (pipelineLayoutParams); - - // Create the compute pipeline - pipeline = graphStorage->logicalDevice->CreateComputePipeline(pipelineLayout); - - pipeline->ConstructPipeline(); - - // Get the descriptor set layouts required to allocate. We only want the ones for allocate because - // global descriptors are already bound in the main system. - //auto const& layouts = pipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); - - // Variable counts for the descriptor sets (all should be 1). - //std::vector variableCounts{ static_cast(layouts.size()) }; - //std::fill(variableCounts.begin(), variableCounts.end(), 0); - - //// Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) - //descSetGroup = graphStorage->descriptorPool->Allocate(layouts, variableCounts); - - //// save the resources - //resources = std::move (subpassComputeResources); - - //// we save this because when we configure the graph, we want to make sure final layouts - //// of attachment descriptions are set to GENERAL. See ConfigureAttachmentDescriptions in SHRenderGraph.cpp. - //attachmentDescriptionIndices = std::move (attDescIndices); - - //descSetGroup->ModifyWriteDescImage (SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, ) - } - - //SHSubpass -} diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h deleted file mode 100644 index aae2a9b9..00000000 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpassCompute.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include "Resource/Handle.h" -#include -#include -#include - -namespace SHADE -{ - class SHVkPipeline; - class SHVkDescriptorSetGroup; - class SHVkDescriptorPool; - class SHVkLogicalDevice; - class SHVkPipelineLayout; - class SHRenderGraphStorage; - class SHRenderGraphResource; - class SHVkShaderModule; - - class SHSubpassCompute - { - private: - //! To run the dispatch command - Handle pipeline; - - //! Pipeline layout for the pipeline creation - Handle pipelineLayout; - - ////! Descriptor set group to hold the images for reading (STORAGE_IMAGE) - //Handle descSetGroup; - - ////! Required resources to be used in the descriptors - //std::vector resourcesRequired; - - ////! vector of resources needed by the subpass compute - //std::vector> resources; - - ////! we save this because when we configure the graph, we want to make sure final layouts - ////! of attachment descriptions are set to GENERAL. See ConfigureAttachmentDescriptions in SHRenderGraph.cpp. - //std::unordered_set attachmentDescriptionIndices{}; - - public: - SHSubpassCompute(Handle graphStorage, Handle computeShaderModule/*, std::vector>&& subpassComputeResources, std::unordered_set&& attDescIndices*/) noexcept; - - //void ExecuteSubpass (void) noexcept; - friend class SHRenderGraph; - friend class SHSubpass; - }; -} - diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index c8c563a1..cf486a7a 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -55,6 +55,21 @@ namespace SHADE return 0; } + vk::PipelineBindPoint SHVkUtil::GetPipelineBindPointFromType(SH_PIPELINE_TYPE pipelineType) noexcept + { + switch (pipelineType) + { + case SH_PIPELINE_TYPE::GRAPHICS: + return vk::PipelineBindPoint::eGraphics; + case SH_PIPELINE_TYPE::COMPUTE: + return vk::PipelineBindPoint::eCompute; + case SH_PIPELINE_TYPE::RAY_TRACING: + return vk::PipelineBindPoint::eRayTracingKHR; + default: + return vk::PipelineBindPoint::eGraphics; + } + } + void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) { if (bufferHandle) diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index ca3b6f83..ab11b537 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -4,6 +4,7 @@ #include "SHVulkanIncludes.h" #include "Resource/Handle.h" +#include "Graphics/Pipeline/SHPipelineType.h" namespace SHADE { @@ -20,11 +21,12 @@ namespace SHADE class SHVkUtil { public: - static bool IsDepthOnlyFormat (vk::Format format) noexcept; - static bool IsDepthStencilAttachment (vk::Format format) noexcept; - static bool IsBlendCompatible (vk::Format format) noexcept; - static uint32_t GetBytesPerPixelFromFormat (vk::Format format) noexcept; - + static bool IsDepthOnlyFormat (vk::Format format) noexcept; + static bool IsDepthStencilAttachment (vk::Format format) noexcept; + static bool IsBlendCompatible (vk::Format format) noexcept; + static uint32_t GetBytesPerPixelFromFormat (vk::Format format) noexcept; + static vk::PipelineBindPoint GetPipelineBindPointFromType (SH_PIPELINE_TYPE pipelineType) noexcept; + /***********************************************************************************/ /*! diff --git a/TempShaderFolder/GreyscaleCs.glsl b/TempShaderFolder/GreyscaleCs.glsl deleted file mode 100644 index 3167a57c..00000000 --- a/TempShaderFolder/GreyscaleCs.glsl +++ /dev/null @@ -1,38 +0,0 @@ -/* Start Header *****************************************************************/ - -/*! \file (e.g. kirsch.comp) - - \author William Zheng, william.zheng, 60001906. Brandon Mak, brandon.hao 390003920. - - \par william.zheng\@digipen.edu. brandon.hao\@digipen.edu. - - \date Sept 20, 2022 - - \brief Copyright (C) 20xx DigiPen Institute of Technology. - - Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. */ - - /* End Header *******************************************************************/ - -#version 450 - -layout(local_size_x = 16, local_size_y = 16) in; -layout(set = 4, binding = 0, rgba8) uniform image2D targetImage; - - -void main() -{ - // load the image - vec4 color = imageLoad (targetImage, ivec2 (gl_GlobalInvocationID)); - - // get the average - float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; - - // store result into result image - imageStore(targetImage, ivec2(gl_GlobalInvocationID), vec4(average, average, average, 1.0f)); - -} - - - - diff --git a/TempShaderFolder/GreyscaleCs.spv b/TempShaderFolder/GreyscaleCs.spv deleted file mode 100644 index 5b36e00317061a12d75127def8a67c940e8969c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 zcmZ9K+fEZv6o$97g$e>9Ld9b%o)E04oRoku(M*~&0pb-`lVLh(CK*~%#wI3S=!H+< zjql+b_yoRy@8OM!|2NDsqkFQl*8i{5UTaTjWO2;7b8g&Cx@~uMX55Gv=O)}}roHyt zcJnmtG}qQwiI{SwERdLK#Z;urlH(xm;h2$J6c2Z1gX!XwSyFZ9z6+Gq)oc6S-k#Tf zfbRiXw{r!ROT@>?i$!bVc6<=`~7t}_mcimkhFTkei)>2zt?)5<&@oZ>0lTQi1$>J8n-3%GTe~O0W<4_ zggo$z94|=EYHH?gWE*gqJuiDyTwPLAydEOM)UOLyrQwhTO*Ae|yjJ(mp|0i7pF`}n zSTOhI%n46P*8w{8oR)^;Md@kp1W!Jgx#&s$taLrc;VzioHzgeNv*W|s=1cQ03e(^G4`hG+`DMraOTzRs|E6r`KK{*rF2o!w>dsue z3mii24gC$aL&0p8Ut;*L*#Yms|HK?%X5x*(JHqUGQo^3W^tdEpZy$u&(Ok|Qs4Dxa z<(!l=?n=%v>%QXHCI1ew_>RQU^Qwe?_;z($?gsZte(rWl0>@stkNsotpA`dcNO*_3 z#PaUQCXbz1-d)-7mUmA!?*soSuXSHG_3&A(hq9@)B(Yk{vf-`PifrBz-fBIPO+9?f z#-8D*!JeCv;+`K17x%m>3}-uiA{&ll+*8?b#XUb0CKjLFcTG0^4X^))H*&nMSK(c@ WB;*i>kN+^#y}2{>@&8uWEy*9dZd@?{ diff --git a/TempShaderFolder/KirschCs.glsl b/TempShaderFolder/KirschCs.glsl new file mode 100644 index 00000000..3dec174d --- /dev/null +++ b/TempShaderFolder/KirschCs.glsl @@ -0,0 +1,167 @@ +//#version 450 +// +//layout(local_size_x = 16, local_size_y = 16) in; +//layout(set = 4, binding = 0, rgba8) uniform image2D targetImage; +// +// +//void main() +//{ +// ivec2 imageSize = imageSize (targetImage); +// +// if (gl_GlobalInvocationID.x >= imageSize.x && gl_GlobalInvocationID.y >= imageSize.y) +// return; +// +// // load the image +// vec4 color = imageLoad (targetImage, ivec2 (gl_GlobalInvocationID)); +// +// // get the average +// float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; +// +// // store result into result image +// imageStore(targetImage, ivec2(gl_GlobalInvocationID), vec4(average, average, average, 1.0f)); +// +//} +// +// +// +// + +/* Start Header *****************************************************************/ + +/*! \file (e.g. kirsch.comp) + + \author William Zheng, william.zheng, 60001906. Brandon Mak, brandon.hao 390003920. + + \par william.zheng\@digipen.edu. brandon.hao\@digipen.edu. + + \date Sept 20, 2022 + + \brief Copyright (C) 20xx DigiPen Institute of Technology. + + Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. */ + + /* End Header *******************************************************************/ + +#version 450 + +#define MASK_WIDTH 3 +#define HALF_M_WIDTH MASK_WIDTH / 2 +#define SHM_WIDTH 18 +#define NUM_MASKS 8 + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, rgba8) uniform image2D inputImage; +layout(set = 4, binding = 1, rgba8) uniform image2D resultImage; + +const float kirsch[8][3][3] = { + { + {5, 5, 5}, + {-3, 0, -3}, /*rotation 1 */ + {-3, -3, -3} + }, + { + {5, 5, -3}, + {5, 0, -3}, /*rotation 2 */ + {-3, -3, -3} + }, + { + {5, -3, -3}, + {5, 0, -3}, /*rotation 3 */ + {5, -3, -3} + }, + { + {-3, -3, -3}, + {5, 0, -3}, /*rotation 4 */ + {5, 5, -3} + }, + { + {-3, -3, -3}, + {-3, 0, -3}, /*rotation 5 */ + {5, 5, 5} + }, + { + {-3, -3, -3}, + {-3, 0, 5}, /*rotation 6 */ + {-3, 5, 5} + }, + { + {-3, -3, 5}, + {-3, 0, 5}, /*rotation 7 */ + {-3, -3, 5} + }, + { + {-3, 5, 5}, + {-3, 0, 5}, /*rotation 8 */ + {-3, -3, -3} + } +}; + +vec3 GetImageValues(ivec2 uv, ivec2 inputImageSize) +{ + if (uv.x >= 0 && uv.y >= 0 && uv.x < inputImageSize.x && uv.y < inputImageSize.y) + { + return imageLoad(inputImage, uv).rgb; + } + else + return vec3(0.0f); +} + +//two extra row/col +shared vec3 sData[16 + 2][16 + 2]; + +void main() +{ + // convenient variables + ivec3 globalThread = ivec3(gl_GlobalInvocationID); + ivec3 localThread = ivec3(gl_LocalInvocationID); + ivec2 inputImageSize = imageSize(inputImage); + + // load shared memory + ivec2 start = ivec2(gl_WorkGroupID) * ivec2(gl_WorkGroupSize) - ivec2(HALF_M_WIDTH); + for (int i = localThread.x; i < SHM_WIDTH; i += int(gl_WorkGroupSize.x)) + { + for (int j = localThread.y; j < SHM_WIDTH; j += int(gl_WorkGroupSize.y)) + { + // get from source image (either real values or 0) + vec3 sourceValue = GetImageValues(start + ivec2(i, j), inputImageSize); + sData[i][j] = sourceValue; + } + } + + // wait for shared memory to finish loading + barrier(); + + // max (between all 8 masks) + vec3 maxSum = vec3(0.0f); + + // loop through all masks + for (int i = 0; i < NUM_MASKS; ++i) + { + vec3 sum = vec3(0.0f); + + // start of shared memory + ivec2 shmStart = ivec2(localThread + HALF_M_WIDTH); + for (int j = -1; j < HALF_M_WIDTH + 1; ++j) + { + for (int k = -1; k < HALF_M_WIDTH + 1; ++k) + { + // Perform convolution using shared_memory + sum += sData[shmStart.x + j][shmStart.y + k] * kirsch[i][j + 1][k + 1]; + } + } + + // Get highest sum + maxSum = max(sum, maxSum); + } + + // average the max sum + maxSum = min(max(maxSum / 8, 0), 1.0f); + + // store result into result image + imageStore(resultImage, ivec2(gl_GlobalInvocationID.xy), vec4(maxSum, 1.0f)); + +} + + + + diff --git a/TempShaderFolder/KirschCs.spv b/TempShaderFolder/KirschCs.spv new file mode 100644 index 0000000000000000000000000000000000000000..1ae5408b12013ad40918e0477191c76630795dbb GIT binary patch literal 5900 zcmZXW37l1R702(ajDQHJ7)Ui}izShWqBRr@VNY^$urZgchR4hUp1fI{nKz+X;8LlW zErzX{Ek?W9YWrkm`(i7$+MX>InQNhazxVx5pWAf#{5a?Q&iY^Oebdr>^(-5o7+iMT@y8fBCu>pUzJs!ktPQ;t43(?H^6S9K zpcl-ghQ4{ZuHDFMp++)jJ;m5?>aNHfR1BBw`sS_&EM*(vz{f3DW-RQU0U^4J8@IQN@6XO4_*D~*lR zM{VjF&oMubX~{Mt&&~C=>^$W7NPTReu`|TBW-o#pEsvFl@|f0a`!supIqS+3<>cRm z94c?`tCL`_E3u>3Zeww{?rYSy4)vvR^Vnf!(M{!qwSv00*jOFK5HMIZ1+ohQL^n(tfy_grsUs`G=3pC znA_|9UBa4u8`KY_XFIYJm~$95FImp%@5Jsv%83PJ9+2~m*qP|s)?31=?ImZ9ID{^~ zKlYi2>;yhXCwqRw%=;XS9=-KD*Mj7ac-QTm3+cKXX>aY~jqQA{+dgZM&MvQiEzIp zB!j;t+4_XMJ--O7ZJsd^|0VS3HC5ohocLmW>)Z;=(O<0d6>RHFB}Ct^V(T+r8T{AK z&6l@c@Lx~7b2@L#`3>|b;5_yT{+sAii3{F2zXhyso-q;sZS<*xV*GdD^ck;=dA^Ho zzIWpuzrUSfoA2*u*v4Nw&E8Y6 zJ(Io3ej4jvi+&PV2QI{3jeKU}p3ZK$H`)=q9{pqxvCl%6Gq!}(Hg-9(2dn^Fv7PVP zi8Izc)sDIw(ESca-P6$JPUEE7k{>x>9>&x}VcX$JF_Bb6FtMAgpotb#Q;}<9H zdFb+I1LyHf<+|~^htCJD$M3TQTqyz!p7_5<9d7b3k=%6p03h%5si{hN^bl~HQ| z-5NL1Z!WR|q0CV&ii86zl*y zfw9(JrR{(qOLas{smBqltm8N5^`Hbcuv^-10B058y5-*pjMX3ChBqZ1@n7!EiEBc} zU3&|wGKHS(Wa?+mLSuKKkE*)US+vcqh6wVjtdxE_VZPAGEIr z)-qS!zI%|-_ua{-wC{V7?*l&eeLvD%W%T_3x;3Kj2hruCul9R@waitI@5qhl?!kNz z^*)3yANEb?t}E`{htZ9Zk2)Vgx6UFEc^^fW5Bp>2&KY$+j&6*6yl0<4-vR8Q-(26v zn}NQl^*wa&T-e`7FV6S_Y&q{w#QYGw*#Ae^a>jTLdy%(+ZoXo-BYy(q>}5UUt#ttM zr$GNz+)3yA8Mqn98zc8~up3;IVt$c0W9_F;&U5vQJsV}r`%CoVymw&B#k~6D%#VBH z8Ebo2t*4B7zd|qW(XX-PqMklE^S$@xdskyUzd?8Auz!p0cVssE<$8Yyn!r)OSpBZk z7=70DTVh>h%=LS8&ob`CAJFAuE`4(5$M?x^NzCy_bbI*SaE?ELI}5lh?f;+QjMX2p ze?jjmAlC9%xLAvM#zoHG(C;cBa{dly&SQc3#>M*eIq!1hKfu0ZuSNb7tOLF52?%MqhdN1z>az4R5fG%g9;2um|Gjao!S0euf%r{=YYaF1j z^V(PceyW@Z{F~ano&$VlffG3E4&>~DejvK%eGoFf6^Epl`N+5fhoZ~hNZq-}!+_iZ za36ISB7OXh>U#u`v$lHFJ{;Zti$K&~j4mIwABiq!ZSPdnQQpH|*#A+$KF)2tJ)ENx z>Ej&6JQ{QY=TMJ1mY_RFag9e{%SX(S= Date: Sun, 23 Oct 2022 16:04:58 +0800 Subject: [PATCH 423/793] Camera Director integrated Still has bug --- .../src/Application/SBApplication.cpp | 1 + SHADE_Application/src/Scenes/SBTestScene.cpp | 5 + SHADE_Engine/src/Camera/SHCameraComponent.cpp | 62 ++++- SHADE_Engine/src/Camera/SHCameraComponent.h | 2 + SHADE_Engine/src/Camera/SHCameraDirector.cpp | 65 +++++ SHADE_Engine/src/Camera/SHCameraDirector.h | 43 +++ SHADE_Engine/src/Camera/SHCameraSystem.cpp | 252 +++++++++++++----- SHADE_Engine/src/Camera/SHCameraSystem.h | 23 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 32 ++- .../MiddleEnd/Interface/SHRenderer.cpp | 27 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 7 +- 11 files changed, 421 insertions(+), 98 deletions(-) create mode 100644 SHADE_Engine/src/Camera/SHCameraDirector.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraDirector.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8733e7b9..9bfd82de 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -93,6 +93,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); #ifdef SHEDITOR SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index f1d656ee..6b3fee1d 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -14,6 +14,7 @@ #include "Physics/Components/SHColliderComponent.h" #include "Assets/SHAssetManager.h" +#include "Camera/SHCameraComponent.h" using namespace SHADE; @@ -166,6 +167,10 @@ namespace Sandbox transformShowcase.SetWorldPosition({ 3.0f, -1.0f, -1.0f }); transformShowcase.SetLocalScale({ 5.0f, 5.0f, 5.0f }); scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); + + SHComponentManager::AddComponent(0); + SHComponentManager::RemoveComponent (0); + SHComponentManager::RemoveComponent (0); } void SBTestScene::Update(float dt) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 650ed3c5..5d49c887 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -1,13 +1,15 @@ #include "SHpch.h" #include "SHCameraComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" - +#include "SHCameraSystem.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/Transform/SHTransformComponent.h" namespace SHADE { SHCameraComponent::SHCameraComponent() :yaw(0.0f), pitch(0.0f), roll(0.0f) - , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(1.0f) + , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) , perspProj(true), dirtyView(true), dirtyProj(true) , viewMatrix(), projMatrix() , position() @@ -22,33 +24,69 @@ namespace SHADE void SHCameraComponent::SetYaw(float yaw) noexcept { this->yaw = yaw; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{rotation.x,yaw, rotation.z}); + } dirtyView = true; } void SHCameraComponent::SetPitch(float pitch) noexcept { this->pitch = pitch; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{ pitch,rotation.y, rotation.z }); + } dirtyView = true; } void SHCameraComponent::SetRoll(float roll) noexcept { this->roll = roll; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, roll}); + } dirtyView = true; } void SHCameraComponent::SetPositionX(float x) noexcept { position.x = x; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ x,position.y, position.z}); + } dirtyView = true; } void SHCameraComponent::SetPositionY(float y) noexcept { position.y = y; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ position.x,y, position.z }); + } dirtyView = true; } void SHCameraComponent::SetPositionZ(float z) noexcept { position.z = z; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ position.x,position.y, z }); + } dirtyView = true; } void SHCameraComponent::SetPosition(float x,float y, float z) noexcept @@ -56,11 +94,23 @@ namespace SHADE position.x = x; position.y = y; position.z = z; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(SHVec3{ x,y, z }); + } dirtyView = true; } void SHCameraComponent::SetPosition(SHVec3& pos) noexcept { this->position = pos; + if (SHComponentManager::HasComponent(GetEID())) + { + auto transform = SHComponentManager::GetComponent(GetEID()); + SHVec3 position = transform->GetWorldPosition(); + transform->SetWorldRotation(pos); + } dirtyView = true; } @@ -128,4 +178,12 @@ namespace SHADE return projMatrix; } + void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept + { + auto system = SHSystemManager::GetSystem(); + system->GetDirector(directorCameraIndex)->SetMainCamera(*this); + } + + + } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index c86fa160..1149b1e1 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -70,6 +70,8 @@ namespace SHADE const SHMatrix& GetViewMatrix() const noexcept; const SHMatrix& GetProjMatrix() const noexcept; + void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; + float movementSpeed; SHVec3 turnSpeed; diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp new file mode 100644 index 00000000..559897c0 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -0,0 +1,65 @@ +#include "SHpch.h" +#include "SHCameraDirector.h" +#include "SHCameraComponent.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/SHECSMacros.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Tools/SHLog.h" + +namespace SHADE +{ + SHCameraDirector::SHCameraDirector() + :mainCameraEID(MAX_EID), transitionCameraEID(MAX_EID) + { + } + + + SHMatrix SHCameraDirector::GetViewMatrix() const noexcept + { + return viewMatrix; + } + SHMatrix SHCameraDirector::GetProjMatrix() const noexcept + { + return projMatrix; + } + SHMatrix SHCameraDirector::GetVPMatrix() const noexcept + { + return projMatrix * viewMatrix; + } + + void SHCameraDirector::UpdateMatrix() noexcept + { + if (mainCameraEID == MAX_EID) + { + auto& dense = SHComponentManager::GetDense(); + if (dense.size() == 0) + { + return; + } + mainCameraEID = dense[0].GetEID(); + } + SHCameraComponent* camComponent = SHComponentManager::GetComponent_s(mainCameraEID); + if (!camComponent) + { + SHLOG_WARNING("Camera Director warning: Entity does not have a camera"); + } + else + { + viewMatrix = camComponent->GetViewMatrix(); + projMatrix = camComponent->GetProjMatrix(); + } + } + + void SHCameraDirector::SetMainCamera(SHCameraComponent& camera) noexcept + { + if (SHEntityManager::IsValidEID(camera.GetEID()) == false) + { + SHLOG_WARNING("Camera Director Warning: Attempting to set an invalid entity as main camera.") + return; + } + mainCameraEID = camera.GetEID(); + } + + + +} diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h new file mode 100644 index 00000000..b1311147 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -0,0 +1,43 @@ +#pragma once + +#include "SH_API.h" +#include "ECS_Base/Entity/SHEntity.h" +#include "Math/SHMatrix.h" +#include "Resource/Handle.h" + + +namespace SHADE +{ + class SHCameraComponent; + + + + class SH_API SHCameraDirector + { + public: + SHCameraDirector(); + ~SHCameraDirector() = default; + + + EntityID mainCameraEID; + EntityID transitionCameraEID; + + SHMatrix GetViewMatrix() const noexcept; + SHMatrix GetProjMatrix() const noexcept; + SHMatrix GetVPMatrix() const noexcept; + void UpdateMatrix() noexcept; + void SetMainCamera(SHCameraComponent& cam) noexcept; + + + private: + + + protected: + SHMatrix viewMatrix; + SHMatrix projMatrix; + + }; + + typedef Handle DirectorHandle; + +} diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index c9822b82..40b63294 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -2,67 +2,115 @@ #include "SHCameraSystem.h" #include "Math/SHMathHelpers.h" #include "Input/SHInputManager.h" - +#include "Math/Vector/SHVec2.h" +#include "ECS_Base/Managers/SHComponentManager.h" +#include "Math/Transform/SHTransformComponent.h" namespace SHADE { + void SHCameraSystem::UpdateEditorCamera(double dt) noexcept + { + + auto& camera = editorCamera; + SHVec3 view, right, UP; + GetCameraAxis(camera, view, right, UP); + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) + { + camera.position -= right * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::D)) + { + camera.position += right * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::W)) + { + camera.position += view * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::S)) + { + camera.position -= view * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::Q)) + { + camera.position += UP * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::E)) + { + camera.position -= UP * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::RMB)) + { + double mouseX, mouseY; + SHInputManager::GetMouseVelocity(&mouseX, &mouseY); + + //std::cout << camera.yaw << std::endl; + + camera.pitch -= mouseY * dt * camera.turnSpeed.x; + camera.yaw -= mouseX * dt * camera.turnSpeed.y; + camera.dirtyView = true; + } + + UpdateCameraComponent(editorCamera); + } void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept { SHCameraSystem* system = static_cast(GetSystem()); auto& camera = system->editorCamera; - SHVec3 target{ 0.0f,0.0f,-1.0f }; - SHVec3 up = { 0.0f,1.0f,0.0f }; - - - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - target += camera.position; - ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - - //target = SHVec3::Normalise(target); - - SHVec3::RotateZ(up, camera.roll); - up = SHVec3::Normalise(up); - - - SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(view, right); - + SHVec3 view, right, UP; + system->GetCameraAxis(camera, view, right, UP); if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { - system->editorCamera.position -= right * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + //std::cout << "Camera movement: "<editorCamera.position += right * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += right * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::W)) { - system->editorCamera.position += view * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += view * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::S)) { - system->editorCamera.position -= view * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position -= view * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::Q)) { - system->editorCamera.position += UP * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position += UP * dt * camera.movementSpeed; + camera.dirtyView = true; } if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::E)) { - system->editorCamera.position -= UP * dt * camera.movementSpeed; - system->editorCamera.dirtyView = true; + camera.position -= UP * dt * camera.movementSpeed; + camera.dirtyView = true; + } + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::RMB)) + { + double mouseX, mouseY; + SHInputManager::GetMouseVelocity(&mouseX,&mouseY); + + //std::cout << camera.yaw << std::endl; + + camera.pitch -= mouseY * dt * camera.turnSpeed.x; + camera.yaw -= mouseX * dt * camera.turnSpeed.y; + camera.dirtyView = true; } + //std::cout << "Camera position: " << camera.position.x << " " << camera.position.y << std::endl; system->UpdateCameraComponent(system->editorCamera); } @@ -88,26 +136,26 @@ namespace SHADE void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept { + if (SHComponentManager::HasComponent(camera.GetEID()) == true && &camera != &editorCamera) + { + auto transform = SHComponentManager::GetComponent(camera.GetEID()); + SHVec3 rotation = transform->GetWorldRotation(); + camera.pitch = SHMath::RadiansToDegrees(rotation.x); + camera.yaw = SHMath::RadiansToDegrees(rotation.y); + camera.roll = SHMath::RadiansToDegrees(rotation.z); + camera.position = transform->GetWorldPosition(); + } + + if (camera.dirtyView) { - SHVec3 target{ 0.0f,0.0f,-1.0f }; - SHVec3 up = { 0.0f,1.0f,0.0f }; + + SHVec3 view, right, UP; + + //ClampCameraRotation(camera); - SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); - target += camera.position; - ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); - - //target = SHVec3::Normalise(target); - - SHVec3::RotateZ(up, camera.roll); - up = SHVec3::Normalise(up); - - - SHVec3 view = target - camera.position; view = SHVec3::Normalise(view); - SHVec3 right = SHVec3::Cross(view, up); right = SHVec3::Normalise(right); - const SHVec3 UP = SHVec3::Cross(view, right); + GetCameraAxis(camera, view, right, UP); camera.viewMatrix = SHMatrix::Identity; camera.viewMatrix(0, 0) = right[0]; @@ -143,38 +191,100 @@ namespace SHADE camera.projMatrix(3, 2) = 1.0f; camera.projMatrix(2, 3) = -(camera.zFar * camera.zNear) / (camera.zFar - camera.zNear); - //const float fov_rad = SHMath::DegreesToRadians(camera.fov); - //const float focal_length = 1.0f / tan(fov_rad * 0.5f); - - //camera.projMatrix(0,0) = focal_length / camera.GetAspectRatio(); - //camera.projMatrix(1,1) = -focal_length; - //camera.projMatrix(2,2) = camera.zNear / (camera.zFar - camera.zNear); - //camera.projMatrix(2,3) = camera.zFar * (camera.zNear / (camera.zFar - camera.zNear)); - //camera.projMatrix(3,2) = -1.0f; - //camera.projMatrix(3,3) = 0.0f; - - //camera.projMatrix = SHMatrix::Inverse(camera.projMatrix); - + camera.dirtyProj = false; } else { - const float R = camera.width * 0.5f; - const float L = -R; - const float T = camera.height * 0.5f; - const float B = -T; + //const float R = camera.width * 0.5f; + //const float L = -R; + //const float T = camera.height * 0.5f; + //const float B = -T; - camera.projMatrix = SHMatrix::Identity; - camera.projMatrix(0, 0) = 2.0f / (R - L); - camera.projMatrix(1, 1) = 2.0f / (B - T); - camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); - camera.projMatrix(3, 0) = -(R + L) / (R - L); - camera.projMatrix(3, 1) = -(B + T) / (B - T); - camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); + //camera.projMatrix = SHMatrix::Identity; + //camera.projMatrix(0, 0) = 2.0f / (R - L); + //camera.projMatrix(1, 1) = 2.0f / (B - T); + //camera.projMatrix(2, 2) = 1.0f / (camera.zFar - camera.zNear); + //camera.projMatrix(3, 0) = -(R + L) / (R - L); + //camera.projMatrix(3, 1) = -(B + T) / (B - T); + //camera.projMatrix(3, 2) = -camera.zNear / (camera.zFar - camera.zNear); camera.dirtyProj = false; } } } + void SHCameraSystem::GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& upVec) const noexcept + { + SHVec3 target{ 0.0f,0.0f,-1.0f }; + SHVec3 up = { 0.0f,1.0f,0.0f }; + + + target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); + target =SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); + target += camera.position; + ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + //target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + forward = target - camera.position; forward = SHVec3::Normalise(forward); + right = SHVec3::Cross(forward, up); right = SHVec3::Normalise(right); + upVec = SHVec3::Cross(forward, right); + } + + void SHCameraSystem::CameraSystemUpdate::Execute(double dt) noexcept + { + SHCameraSystem* system = static_cast(GetSystem()); + auto& dense = SHComponentManager::GetDense(); + for (auto& cam : dense) + { + system->UpdateCameraComponent(cam); + } + for (auto& handle : system->directorHandleList) + { + handle->UpdateMatrix(); + } + + + } + + + DirectorHandle SHCameraSystem::CreateDirector() noexcept + { + auto handle = directorLibrary.Create(); + directorHandleList.emplace_back(handle); + return handle; + } + + DirectorHandle SHCameraSystem::GetDirector(size_t index) noexcept + { + if (index < directorHandleList.size()) + { + return directorHandleList[index]; + } + else + { + return CreateDirector(); + } + } + void SHCameraSystem::ClampCameraRotation(SHCameraComponent& camera) noexcept + { + + + + if (camera.pitch > 85) + camera.SetPitch(85); + if (camera.pitch < -85) + camera.SetPitch(-85); + if (camera.roll > 85) + camera.SetRoll(85); + if (camera.roll < -85) + camera.SetRoll(-85); + + } + } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index fe7fd145..dacda574 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -3,9 +3,10 @@ #include "ECS_Base/System/SHSystem.h" #include "SHCameraComponent.h" #include "ECS_Base/System/SHSystemRoutine.h" +#include "Resource/ResourceLibrary.h" +#include "SHCameraDirector.h" #include "SH_API.h" - namespace SHADE { class SH_API SHCameraSystem final : public SHSystem @@ -14,8 +15,9 @@ namespace SHADE //A camera component that represents editor camera. //This is not tied to any entity. Hence this EID should not be used. SHCameraComponent editorCamera; - + ResourceLibrary directorLibrary; + std::vector directorHandleList; public: SHCameraSystem(void) = default; @@ -34,12 +36,27 @@ namespace SHADE }; friend class EditorCameraUpdate; - SHCameraComponent* GetEditorCamera (void) noexcept; + class SH_API CameraSystemUpdate final: public SHSystemRoutine + { + public: + CameraSystemUpdate() : SHSystemRoutine("Camera System Update", false) {}; + virtual void Execute(double dt)noexcept override final; + }; + friend class CameraSystemUpdate; + + SHCameraComponent* GetEditorCamera (void) noexcept; + void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; + DirectorHandle CreateDirector() noexcept; + DirectorHandle GetDirector(size_t index) noexcept; + void ClampCameraRotation(SHCameraComponent& camera) noexcept; + void UpdateEditorCamera(double dt) noexcept; protected: void UpdateCameraComponent(SHCameraComponent& camera) noexcept; + + }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 992cbdf1..cbf3ad95 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -147,6 +147,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ auto windowDims = window->GetWindowSize(); + auto cameraSystem = SHSystemManager::GetSystem(); // Set Up Cameras screenCamera = resourceManager.Create(); @@ -198,6 +199,8 @@ namespace SHADE worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); + worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); + auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); @@ -335,21 +338,7 @@ namespace SHADE auto cameraSystem = SHSystemManager::GetSystem(); -#ifdef SHEDITOR - auto editorSystem = SHSystemManager::GetSystem(); - if (editorSystem->editorState != SHEditor::State::PLAY) - { - worldRenderer->SetViewProjectionMatrix(SHMatrix::Transpose(cameraSystem->GetEditorCamera()->GetProjMatrix() * cameraSystem->GetEditorCamera()->GetViewMatrix())); - } - else - { - // main camera - } - -#else - // main camera -#endif // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) @@ -399,7 +388,22 @@ namespace SHADE } // bind camera data + //renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); + +#ifdef SHEDITOR + if (renderers[renIndex] == worldRenderer) + { + auto editorSystem = SHSystemManager::GetSystem(); + if (editorSystem->editorState != SHEditor::State::PLAY) + worldRenderer->UpdateDataAndBind(currentCmdBuffer, frameIndex, SHMatrix::Transpose(cameraSystem->GetEditorCamera()->GetProjMatrix() * cameraSystem->GetEditorCamera()->GetViewMatrix())); + else + renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); + } + else + renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); +#else renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); +#endif // Draw first renderers[renIndex]->Draw(frameIndex, descPool); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index a1806ccd..962130be 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "Camera/SHCameraDirector.h" namespace SHADE { @@ -65,6 +66,11 @@ namespace SHADE camera = _camera; } + void SHRenderer::SetCameraDirector(Handle director) noexcept + { + cameraDirector = director; + } + /*-----------------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------------*/ @@ -75,17 +81,24 @@ namespace SHADE void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept { - if (camera) + if (camera && cameraDirector) { - //cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); - cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); - - std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; - - cmdBuffer->BindDescriptorSet(cameraDescriptorSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + UpdateDataAndBind(cmdBuffer, frameIndex, SHMatrix::Transpose(cameraDirector->GetVPMatrix())); } } + void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix exteriorMatrix) noexcept + { + SetViewProjectionMatrix(exteriorMatrix); + + //cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); + cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); + + std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; + + cmdBuffer->BindDescriptorSet(cameraDescriptorSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + } + void SHRenderer::UpdateCameraDataToBuffer(void) noexcept { } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 57c63e7f..a70e1996 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -40,6 +40,7 @@ namespace SHADE class SHGraphicsGlobalData; class SHVkDescriptorPool; class SHVkBuffer; + class SHCameraDirector; struct SHShaderCameraData { @@ -71,12 +72,14 @@ namespace SHADE /* Camera Registration */ /*-----------------------------------------------------------------------------*/ void SetCamera(Handle _camera); + void SetCameraDirector (Handle director) noexcept; /*-----------------------------------------------------------------------------*/ /* Drawing Functions */ /*-----------------------------------------------------------------------------*/ void Draw(uint32_t frameIndex, Handle descPool) noexcept; - void UpdateDataAndBind (Handle cmdBuffer, uint32_t frameIndex) noexcept; + void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept; + void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix exteriorMatrix) noexcept; void UpdateCameraDataToBuffer (void) noexcept; void SetViewProjectionMatrix (SHMatrix const& vpMatrix) noexcept; @@ -99,6 +102,8 @@ namespace SHADE Handle cameraDescriptorSet; Handle cameraBuffer; + Handle cameraDirector; + // we really only need 1 copy even though we need %swapchainImages copies for // GPU. SHShaderCameraData cpuCameraData; From a81ef91373ff317e74f5545a3d3d2bcf04071faa Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 23 Oct 2022 16:47:39 +0800 Subject: [PATCH 424/793] Removed some commented code --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 0de5af17..7ecd92d2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -185,10 +185,6 @@ namespace SHADE gBufferWriteSubpass->AddColorOutput("Entity ID"); gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - // We do this to just transition our scene layout to shader read - //auto sceneLayoutTransitionSubpass = node->AddSubpass("Scene Layout Transition"); - //sceneLayoutTransitionSubpass->AddGeneralInput("Scene"); - auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); node->AddNodeCompute (greyscale, {"Scene Pre-Process", "Scene"}); From 33a6d3798c38ce0de2dcfe2aff19c94c8a39452f Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 23 Oct 2022 16:55:01 +0800 Subject: [PATCH 425/793] Added orientation interface and fixed compatibility between physics and transform --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- SHADE_Engine/src/Math/SHQuaternion.cpp | 4 ++ SHADE_Engine/src/Math/SHQuaternion.h | 1 + .../Math/Transform/SHTransformComponent.cpp | 14 +++- .../src/Math/Transform/SHTransformComponent.h | 6 +- .../src/Math/Transform/SHTransformSystem.cpp | 68 +++++++++++++++---- SHADE_Engine/src/Math/Vector/SHVec4.cpp | 9 +++ SHADE_Engine/src/Math/Vector/SHVec4.h | 14 ++-- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 6 +- 9 files changed, 99 insertions(+), 25 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 23259ee4..966a00a5 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -101,7 +101,7 @@ namespace Sandbox //Set initial positions transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-3.5f, -5.0f) }); //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); - transform.SetWorldRotation(SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber(), SHMath::GenerateRandomNumber()); + transform.SetWorldRotation(SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f)); transform.SetWorldScale(TEST_OBJ_SCALE); //if (const bool IS_EVEN = (y * NUM_ROWS + x) % 2; IS_EVEN) diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index 924ac67a..3878cea1 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -36,6 +36,10 @@ namespace SHADE : XMFLOAT4( 0.0f, 0.0f, 0.0f, 1.0f ) {} + SHQuaternion::SHQuaternion(const SHVec4& vec4) noexcept + : XMFLOAT4( vec4.x, vec4.y, vec4.z, vec4.w ) + {} + SHQuaternion::SHQuaternion(float _x, float _y, float _z, float _w) noexcept : XMFLOAT4( _x, _y, _z, _w ) {} diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index f3ce3d61..cc1b5ff4 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -49,6 +49,7 @@ namespace SHADE SHQuaternion (SHQuaternion&& rhs) = default; SHQuaternion () noexcept; + SHQuaternion (const SHVec4& vec4) noexcept; SHQuaternion (float x, float y, float z, float w) noexcept; SHQuaternion (float yaw, float pitch, float roll) noexcept; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index 306cde67..e56cbc8d 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -103,7 +103,9 @@ namespace SHADE void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept { dirty = true; + localRotation = newLocalRotation; + updateQueue.push({ UpdateCommandType::LOCAL_ROTATION, newLocalRotation }); } void SHTransformComponent::SetLocalRotation(float pitch, float yaw, float roll) noexcept @@ -113,11 +115,16 @@ namespace SHADE localRotation.x = pitch; localRotation.y = yaw; localRotation.z = roll; + + updateQueue.push({ UpdateCommandType::LOCAL_ROTATION, SHVec3{pitch, yaw, roll} }); } void SHTransformComponent::SetLocalOrientation(const SHQuaternion& newLocalOrientation) noexcept { - + dirty = true; + + local.orientation = newLocalOrientation; + updateQueue.push({ UpdateCommandType::LOCAL_ORIENTATION, newLocalOrientation }); } void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept @@ -155,7 +162,10 @@ namespace SHADE void SHTransformComponent::SetWorldOrientation(const SHQuaternion& newWorldOrientation) noexcept { - + dirty = true; + + world.orientation = newWorldOrientation; + updateQueue.push({ UpdateCommandType::WORLD_ORIENTATION, newWorldOrientation }); } void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index d1d21bec..ce8bb6fe 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -97,7 +97,9 @@ namespace SHADE enum class UpdateCommandType { - WORLD_POSITION + LOCAL_ROTATION + , LOCAL_ORIENTATION + , WORLD_POSITION , WORLD_ROTATION , WORLD_ORIENTATION , WORLD_SCALE @@ -111,7 +113,7 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ UpdateCommandType type; - SHVec3 data; + SHVec4 data; }; using UpdateQueue = std::queue; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 3244db1b..8bd01fb4 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -200,6 +200,8 @@ namespace SHADE SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; + bool convertRotation = true; + if (parent) { localToWorld = parent->GetTRS(); @@ -212,27 +214,44 @@ namespace SHADE switch (UPDATE_COMMAND.type) { + case SHTransformComponent::UpdateCommandType::LOCAL_ROTATION: + { + convertRotation = true; + break; + } + case SHTransformComponent::UpdateCommandType::LOCAL_ORIENTATION: + { + convertRotation = false; + break; + } case SHTransformComponent::UpdateCommandType::WORLD_POSITION: { - tf.local.position = SHVec3::Transform(UPDATE_COMMAND.data, worldToLocal); + tf.local.position = SHVec3::Transform(UPDATE_COMMAND.data.ToVec3(), worldToLocal); break; } case SHTransformComponent::UpdateCommandType::WORLD_ROTATION: { - tf.localRotation = tf.worldRotation; + tf.localRotation = UPDATE_COMMAND.data.ToVec3(); if (parent) tf.localRotation -= parent->GetLocalRotation(); + convertRotation = true; + break; } case SHTransformComponent::UpdateCommandType::WORLD_ORIENTATION: { - // TODO(Diren): Test using scripts by concat quaternions? + tf.local.orientation = UPDATE_COMMAND.data; + if (parent) + tf.local.orientation /= parent->GetLocalOrientation(); + + convertRotation = false; + break; } case SHTransformComponent::UpdateCommandType::WORLD_SCALE: { - tf.local.scale = tf.world.scale; + tf.local.scale = UPDATE_COMMAND.data.ToVec3(); if (parent) tf.local.scale /= parent->GetLocalScale(); @@ -247,17 +266,42 @@ namespace SHADE tf.local.trs = localToWorld; + // Compute world transforms tf.world.position = SHVec3::Transform(tf.local.position, localToWorld); - - tf.worldRotation = tf.localRotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); - - // TODO(Diren): Wrap rotations between -360 and 360 - - tf.world.orientation = SHQuaternion::FromEuler(tf.worldRotation); - tf.local.orientation = SHQuaternion::FromEuler(tf.localRotation); - tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); + SHVec3 worldRotRad, localRotRad; + + if (convertRotation) + { + tf.worldRotation = tf.localRotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); + + // Set the orientation + // Wrap rotations between -360 and 360 and convert to radians + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + worldRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.worldRotation[i], -360.0f, 360.0f)); + localRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.localRotation[i], -360.0f, 360.0f)); + } + + tf.world.orientation = SHQuaternion::FromEuler(worldRotRad); + tf.local.orientation = SHQuaternion::FromEuler(localRotRad); + } + else + { + tf.world.orientation = (parent ? parent->GetLocalOrientation() : SHQuaternion::Identity) * tf.local.orientation; + + // Set the euler angle rotations + worldRotRad = tf.world.orientation.ToEuler(); + localRotRad = tf.local.orientation.ToEuler(); + + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + tf.worldRotation[i] = SHMath::RadiansToDegrees(worldRotRad[i]); + tf.localRotation[i] = SHMath::RadiansToDegrees(localRotRad[i]); + } + } + tf.world.ComputeTRS(); } diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index bcf2ef97..9857818a 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -38,6 +38,10 @@ namespace SHADE : XMFLOAT4( 0.0f, 0.0f, 0.0f, 0.0f ) {} + SHVec4::SHVec4(const SHVec3& vec3) noexcept + : XMFLOAT4( vec3.x, vec3.y, vec3.z, 1.0f ) + {} + SHVec4::SHVec4(const XMFLOAT4& xmfloat4) noexcept : XMFLOAT4( xmfloat4.x, xmfloat4.y, xmfloat4.z, xmfloat4.w ) {} @@ -271,6 +275,11 @@ namespace SHADE return result; } + SHVec3 SHVec4::ToVec3() const noexcept + { + return SHVec3{ x, y, z }; + } + /*-----------------------------------------------------------------------------------*/ /* Static Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index 911a714e..ce341bed 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -16,6 +16,7 @@ // Project Headers #include "SH_API.h" +#include "SHVec3.h" namespace SHADE { @@ -53,6 +54,7 @@ namespace SHADE ~SHVec4 () = default; SHVec4 () noexcept; + SHVec4 (const SHVec3& vec3) noexcept; SHVec4 (const XMFLOAT4& xmfloat4) noexcept; SHVec4 (float x, float y, float z, float w) noexcept; @@ -102,16 +104,18 @@ namespace SHADE [[nodiscard]] float Dot3D (const SHVec4& rhs) const noexcept; [[nodiscard]] SHVec4 Cross3D (const SHVec4& rhs) const noexcept; [[nodiscard]] SHVec4 Cross (const SHVec4& v1, const SHVec4& v2) const noexcept; + + [[nodiscard]] SHVec3 ToVec3 () const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHVec4 Normalise (const SHVec4& v) noexcept; - [[nodiscard]] static SHVec4 Normalise3D (const SHVec4& v) noexcept; - [[nodiscard]] static SHVec4 Abs (const SHVec4& v) noexcept; - [[nodiscard]] static SHVec4 Min (const std::initializer_list& vs) noexcept; - [[nodiscard]] static SHVec4 Max (const std::initializer_list& vs) noexcept; + [[nodiscard]] static SHVec4 Normalise (const SHVec4& v) noexcept; + [[nodiscard]] static SHVec4 Normalise3D (const SHVec4& v) noexcept; + [[nodiscard]] static SHVec4 Abs (const SHVec4& v) noexcept; + [[nodiscard]] static SHVec4 Min (const std::initializer_list& vs) noexcept; + [[nodiscard]] static SHVec4 Max (const std::initializer_list& vs) noexcept; [[nodiscard]] static SHVec4 Clamp (const SHVec4& v, const SHVec4& vMin, const SHVec4& vMax) noexcept; [[nodiscard]] static SHVec4 Lerp (const SHVec4& a, const SHVec4& b, float t) noexcept; [[nodiscard]] static SHVec4 ClampedLerp (const SHVec4& a, const SHVec4& b, float t, float tMin = 0.0f, float tMax = 1.0f) noexcept; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 7dc6c44e..a1994ad2 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -16,6 +16,7 @@ // Project Headers #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" +#include "Math/SHMathHelpers.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformComponent.h" @@ -315,7 +316,7 @@ namespace SHADE if (TF->HasChanged()) { physicsObject.SetPosition(TF->GetWorldPosition()); - physicsObject.SetRotation(TF->GetWorldRotation()); + physicsObject.SetOrientation(TF->GetWorldOrientation()); } } } @@ -492,8 +493,7 @@ namespace SHADE // Convert RP3D Transform to SHADE auto* tfComponent = SHComponentManager::GetComponent(entityID); tfComponent->SetWorldPosition(rp3dPos); - tfComponent->SetWorldRotation(SHQuaternion{ rp3dRot }.ToEuler()); - + tfComponent->SetWorldOrientation(SHQuaternion{ rp3dRot }); // Cache transforms physicsObject.prevTransform = CURRENT_TF; From a83d1f8f04ae82332d9fd065b34eec911e2e4ff3 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 23 Oct 2022 16:55:57 +0800 Subject: [PATCH 426/793] Removed line that loaded all assets Separated template function in asset manager into hpp file Fixed bug in checking map contains --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 17 +++++------- SHADE_Engine/src/Assets/SHAssetManager.h | 22 +++------------- SHADE_Engine/src/Assets/SHAssetManager.hpp | 26 +++++++++++++++++++ .../src/Resource/SHResourceManager.hpp | 2 +- 4 files changed, 37 insertions(+), 30 deletions(-) create mode 100644 SHADE_Engine/src/Assets/SHAssetManager.hpp diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index bcae992e..3032ba51 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -56,18 +56,15 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::Unload() noexcept { - for (auto const& asset : assetCollection) - { - SHAssetMetaHandler::WriteMetaData(asset); - } + } - void SHAssetManager::Unload(AssetID assetId) noexcept - { - // TODO - } + void SHAssetManager::Unload(AssetID assetId) noexcept + { + // TODO + } - AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept + AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept { if (!IsRecognised(path.extension().string().c_str())) { @@ -256,7 +253,7 @@ namespace SHADE { InitLoaders(); BuildAssetCollection(); - LoadAllData(); + //LoadAllData(); } /**************************************************************************** diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 4c1ded71..9ee7ab92 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -76,25 +76,7 @@ namespace SHADE // -------------------------------------------------------------------------/ template - static std::enable_if_t, T const * const> GetData(AssetID id) noexcept - { - if (assetData.contains(id)) - { - for (auto const& asset : assetCollection) - { - if (asset.id == id) - { - assetData.emplace(id, LoadData(asset)); - return dynamic_cast(assetData[id]); - } - } - - SHLOG_ERROR("Asset ID provided does not exist: {}", id); - return nullptr; - } - - return dynamic_cast(assetData[id]); - } + static std::enable_if_t, T const* const> GetData(AssetID id) noexcept; private: /**************************************************************************** * \brief Load resource data into memory @@ -121,3 +103,5 @@ namespace SHADE static std::unordered_map assetData; }; } + +#include "SHAssetManager.hpp" diff --git a/SHADE_Engine/src/Assets/SHAssetManager.hpp b/SHADE_Engine/src/Assets/SHAssetManager.hpp new file mode 100644 index 00000000..6c420778 --- /dev/null +++ b/SHADE_Engine/src/Assets/SHAssetManager.hpp @@ -0,0 +1,26 @@ + +#include "SHAssetManager.h" + +namespace SHADE +{ + template + std::enable_if_t, T const* const> SHAssetManager::GetData(AssetID id) noexcept + { + if (!assetData.contains(id)) + { + for (auto const& asset : assetCollection) + { + if (asset.id == id) + { + assetData.emplace(id, LoadData(asset)); + return dynamic_cast(assetData[id]); + } + } + + SHLOG_ERROR("Asset ID provided does not exist: {}", id); + return nullptr; + } + + return dynamic_cast(assetData[id]); + } +} diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index fb0dcc6a..cff4e84b 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -134,7 +134,7 @@ namespace SHADE /* Query Functions */ /*-----------------------------------------------------------------------------------*/ template - static std::optional SHResourceManager::GetAssetID(Handle handle) + std::optional SHResourceManager::GetAssetID(Handle handle) { const Handle GENERIC_HANDLE = Handle(handle); auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); From f9a28c81d4ab01f182114524119b8ef290627ad8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 23 Oct 2022 17:18:46 +0800 Subject: [PATCH 427/793] Fixed vulkan breaking error --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index b414ecaf..0c06a092 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -52,7 +52,7 @@ namespace Sandbox if (asset.name == "Cube.012") handles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); break; - case AssetType::TEXTURE: + case AssetType::IMAGE: texHandles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); break; } From 10a945a35d0d081331dc4c3cd43e6ef27e9f6aa5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 23 Oct 2022 18:20:38 +0800 Subject: [PATCH 428/793] Added SHADE_CSharp --- SHADE_CSharp/premake5.lua | 48 +++++++++++++++++++++++++++++++++++++++ premake5.lua | 1 + 2 files changed, 49 insertions(+) create mode 100644 SHADE_CSharp/premake5.lua diff --git a/SHADE_CSharp/premake5.lua b/SHADE_CSharp/premake5.lua new file mode 100644 index 00000000..c6efa145 --- /dev/null +++ b/SHADE_CSharp/premake5.lua @@ -0,0 +1,48 @@ +project "SHADE_CSharp" + architecture "x64" + kind "SharedLib" + language "C#" + clr "NetCore" + dotnetframework "net5.0" + namespace ("SHADE") + targetdir (outputdir) + objdir (interdir) + systemversion "latest" + + files + { + "%{prj.location}/src/**.cs", + "%{prj.location}/src/**.tt" + } + + flags + { + "MultiProcessorCompile" + } + + dependson + { + "SHADE_Engine" + } + + warnings 'Extra' + + filter "configurations:Debug" + symbols "On" + defines {"_DEBUG"} + + filter "configurations:Release" + optimize "On" + defines{"_RELEASE"} + + require "vstudio" + + function platformsElement(cfg) + _p(2,'x64') + end + + premake.override(premake.vstudio.cs2005.elements, "projectProperties", function (oldfn, cfg) + return table.join(oldfn(cfg), { + platformsElement, + }) + end) \ No newline at end of file diff --git a/premake5.lua b/premake5.lua index cebb5544..35bff9d2 100644 --- a/premake5.lua +++ b/premake5.lua @@ -22,6 +22,7 @@ workspace "SHADE" include "SHADE_Engine" include "SHADE_Application" include "SHADE_Managed" + include "SHADE_CSharp" group "Dependencies" include "Dependencies/msdf" From e15f7696e62ad51896e58fde0bda32df87339d8a Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 23 Oct 2022 18:22:58 +0800 Subject: [PATCH 429/793] Rotations are stored as radians to reduce the number of conversions --- .../src/Math/Transform/SHTransformComponent.h | 4 ++-- .../src/Math/Transform/SHTransformSystem.cpp | 17 ++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h index ce8bb6fe..2fe67bdd 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.h @@ -127,8 +127,8 @@ namespace SHADE // We store euler angle rotations separately to interface with transform quaternions. // Reading quaternions are unreliable. - SHVec3 localRotation; // Stored in degrees - SHVec3 worldRotation; // Stored in degrees + SHVec3 localRotation; // Stored in Radians + SHVec3 worldRotation; // Stored in Radians SHTransform local; // Local TRS holds Local To World Transform SHTransform world; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 8bd01fb4..5a540cd4 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -270,7 +270,7 @@ namespace SHADE tf.world.position = SHVec3::Transform(tf.local.position, localToWorld); tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One); - SHVec3 worldRotRad, localRotRad; + if (convertRotation) { @@ -278,10 +278,11 @@ namespace SHADE // Set the orientation // Wrap rotations between -360 and 360 and convert to radians + SHVec3 worldRotRad, localRotRad; for (size_t i = 0; i < SHVec3::SIZE; ++i) { - worldRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.worldRotation[i], -360.0f, 360.0f)); - localRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.localRotation[i], -360.0f, 360.0f)); + worldRotRad[i] = SHMath::Wrap(tf.worldRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI); + localRotRad[i] = SHMath::Wrap(tf.localRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI); } tf.world.orientation = SHQuaternion::FromEuler(worldRotRad); @@ -292,14 +293,8 @@ namespace SHADE tf.world.orientation = (parent ? parent->GetLocalOrientation() : SHQuaternion::Identity) * tf.local.orientation; // Set the euler angle rotations - worldRotRad = tf.world.orientation.ToEuler(); - localRotRad = tf.local.orientation.ToEuler(); - - for (size_t i = 0; i < SHVec3::SIZE; ++i) - { - tf.worldRotation[i] = SHMath::RadiansToDegrees(worldRotRad[i]); - tf.localRotation[i] = SHMath::RadiansToDegrees(localRotRad[i]); - } + tf.worldRotation = tf.world.orientation.ToEuler(); + tf.localRotation = tf.local.orientation.ToEuler(); } tf.world.ComputeTRS(); From 57f9898e07667e00fede342e79fc4bee42551693 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 23 Oct 2022 20:03:18 +0800 Subject: [PATCH 430/793] Finished quaternion implementation --- SHADE_Engine/src/Math/SHQuaternion.cpp | 125 +++++++++++++++++++++---- SHADE_Engine/src/Math/SHQuaternion.h | 40 ++++---- SHADE_Managed/Quaternion.hxx | 17 ++++ SHADE_Managed/src/Math/Vector3.hxx | 1 + 4 files changed, 148 insertions(+), 35 deletions(-) create mode 100644 SHADE_Managed/Quaternion.hxx diff --git a/SHADE_Engine/src/Math/SHQuaternion.cpp b/SHADE_Engine/src/Math/SHQuaternion.cpp index 3878cea1..3564916a 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.cpp +++ b/SHADE_Engine/src/Math/SHQuaternion.cpp @@ -211,15 +211,6 @@ namespace SHADE return XMVectorGetX(XMQuaternionDot(*this, rhs)); } - SHQuaternion SHQuaternion::RotateTowards(const SHQuaternion&, float) const noexcept - { - SHQuaternion result; - - // TODO (Diren) - - return result; - } - SHVec3 SHQuaternion::ToEuler() const noexcept { const float XX = x * x; @@ -317,19 +308,32 @@ namespace SHADE } - float SHQuaternion::Angle(const SHQuaternion&, const SHQuaternion&) noexcept + float SHQuaternion::Angle(const SHQuaternion& q1, const SHQuaternion& q2) noexcept { - // TODO (Diren) + XMVECTOR R = XMQuaternionMultiply(XMQuaternionConjugate(q1), q2); - return 0.0f; + const float RS = XMVectorGetW(R); + R = XMVector3Length(R); + return 2.0f * atan2f(XMVectorGetX(R), RS); } - SHQuaternion SHQuaternion::Lerp(const SHQuaternion&, const SHQuaternion&, float) noexcept + SHQuaternion SHQuaternion::Lerp(const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept { SHQuaternion result; - // TODO (Diren) + XMVECTOR R = XMVectorZero(); + if (XMVector4GreaterOrEqual(XMVector4Dot(q1, q2), R)) + { + R = XMVectorLerp(q1, q2, t); + } + else + { + const XMVECTOR X0 = XMVectorMultiply(q1, XMVectorReplicate(1.f - t)); + const XMVECTOR X1 = XMVectorMultiply(q2, XMVectorReplicate(t)); + R = XMVectorSubtract(X0, X1); + } + XMStoreFloat4(&result, XMQuaternionNormalize(R)); return result; } @@ -341,13 +345,102 @@ namespace SHADE return result; } - SHQuaternion SHQuaternion::Rotate(const SHVec3& , const SHVec3&) noexcept + SHQuaternion SHQuaternion::ClampedLerp(const SHQuaternion& q1, const SHQuaternion& q2, float t, float tMin, float tMax) noexcept { + return Lerp(q1, q2, std::clamp(t, tMin, tMax)); + } + + + SHQuaternion SHQuaternion::ClampedSlerp(const SHQuaternion& q1, const SHQuaternion& q2, float t, float tMin, float tMax) noexcept + { + return Slerp(q1, q2, std::clamp(t, tMin, tMax)); + } + + SHQuaternion SHQuaternion::FromToRotation(const SHVec3& from, const SHVec3& to) noexcept + { + // Melax, "The Shortest Arc Quaternion", Game Programming Gems + SHQuaternion result; - // TODO (Diren) + const XMVECTOR F = XMVector3Normalize(from); + const XMVECTOR T = XMVector3Normalize(to); + + const float dot = XMVectorGetX(XMVector3Dot(F, T)); + if (dot >= 1.f) + { + result = Identity; + } + else if (dot <= -1.f) + { + XMVECTOR axis = XMVector3Cross(F, SHVec3::Right); + if (XMVector3NearEqual(XMVector3LengthSq(axis), g_XMZero, g_XMEpsilon)) + { + axis = XMVector3Cross(F, SHVec3::Up); + } + + const XMVECTOR Q = XMQuaternionRotationAxis(axis, XM_PI); + XMStoreFloat4(&result, Q); + } + else + { + const XMVECTOR C = XMVector3Cross(F, T); + XMStoreFloat4(&result, C); + + const float s = sqrtf((1.f + dot) * 2.f); + result.x /= s; + result.y /= s; + result.z /= s; + result.w = s * 0.5f; + } return result; } + SHQuaternion SHQuaternion::LookRotation(const SHVec3& forward, const SHVec3& up) noexcept + { + SHQuaternion result; + + const SHQuaternion Q1 = FromToRotation(SHVec3::Forward, forward); + + const XMVECTOR C = XMVector3Cross(forward, up); + if (XMVector3NearEqual(XMVector3LengthSq(C), g_XMZero, g_XMEpsilon)) + { + // forward and up are co-linear + return Q1; + } + + SHVec3 qU; + XMStoreFloat3(&qU, XMQuaternionMultiply(Q1, SHVec3::Up)); + + const SHQuaternion Q2 = FromToRotation(qU, up); + + XMStoreFloat4(&result, XMQuaternionMultiply(Q2, Q1)); + + return result; + } + + SHQuaternion SHQuaternion::RotateTowards(const SHQuaternion& from, const SHQuaternion& to, float maxAngleInRad) noexcept + { + SHQuaternion result; + + // We can use the conjugate here instead of inverse assuming q1 & q2 are normalized. + const XMVECTOR R = XMQuaternionMultiply(XMQuaternionConjugate(from), to); + + const float RS = XMVectorGetW(R); + const XMVECTOR L = XMVector3Length(R); + const float angle = 2.f * atan2f(XMVectorGetX(L), RS); + if (angle > maxAngleInRad) + { + const XMVECTOR delta = XMQuaternionRotationAxis(R, maxAngleInRad); + const XMVECTOR Q = XMQuaternionMultiply(delta, from); + XMStoreFloat4(&result, Q); + } + else + { + // Don't overshoot. + result = to; + } + return result; + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/SHQuaternion.h b/SHADE_Engine/src/Math/SHQuaternion.h index cc1b5ff4..fa5b5d36 100644 --- a/SHADE_Engine/src/Math/SHQuaternion.h +++ b/SHADE_Engine/src/Math/SHQuaternion.h @@ -51,7 +51,6 @@ namespace SHADE SHQuaternion () noexcept; SHQuaternion (const SHVec4& vec4) noexcept; SHQuaternion (float x, float y, float z, float w) noexcept; - SHQuaternion (float yaw, float pitch, float roll) noexcept; // Conversion from other math types @@ -98,34 +97,37 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Invert () noexcept; + void Invert () noexcept; - [[nodiscard]] float Length () const noexcept; - [[nodiscard]] float LengthSquared () const noexcept; - [[nodiscard]] float Dot (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHQuaternion RotateTowards (const SHQuaternion& target, float maxAngleInRad) const noexcept; + [[nodiscard]] float Length () const noexcept; + [[nodiscard]] float LengthSquared () const noexcept; + [[nodiscard]] float Dot (const SHQuaternion& rhs) const noexcept; - [[nodiscard]] SHVec3 ToEuler () const noexcept; - [[nodiscard]] std::string ToString () const noexcept; + [[nodiscard]] SHVec3 ToEuler () const noexcept; + [[nodiscard]] std::string ToString () const noexcept; /*---------------------------------------------------------------------------------*/ /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHQuaternion FromEuler (const SHVec3& eulerAngles) noexcept; - [[nodiscard]] static SHQuaternion FromPitchYawRoll (float pitch, float yaw, float roll) noexcept; - [[nodiscard]] static SHQuaternion FromAxisAngle (const SHVec3& axis, float angle) noexcept; - [[nodiscard]] static SHQuaternion FromRotationMatrix(const SHMatrix& rotationMatrix) noexcept; + [[nodiscard]] static SHQuaternion FromEuler (const SHVec3& eulerAngles) noexcept; + [[nodiscard]] static SHQuaternion FromPitchYawRoll (float pitch, float yaw, float roll) noexcept; + [[nodiscard]] static SHQuaternion FromAxisAngle (const SHVec3& axis, float angle) noexcept; + [[nodiscard]] static SHQuaternion FromRotationMatrix(const SHMatrix& rotationMatrix) noexcept; - [[nodiscard]] static SHQuaternion Normalise (const SHQuaternion& q) noexcept; - [[nodiscard]] static SHQuaternion Conjugate (const SHQuaternion& q) noexcept; - [[nodiscard]] static SHQuaternion Inverse (const SHQuaternion& q) noexcept; - [[nodiscard]] static float Angle (const SHQuaternion& q1, const SHQuaternion& q2) noexcept; + [[nodiscard]] static SHQuaternion Normalise (const SHQuaternion& q) noexcept; + [[nodiscard]] static SHQuaternion Conjugate (const SHQuaternion& q) noexcept; + [[nodiscard]] static SHQuaternion Inverse (const SHQuaternion& q) noexcept; + [[nodiscard]] static float Angle (const SHQuaternion& q1, const SHQuaternion& q2) noexcept; - [[nodiscard]] static SHQuaternion Lerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; - [[nodiscard]] static SHQuaternion Slerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; + [[nodiscard]] static SHQuaternion Lerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; + [[nodiscard]] static SHQuaternion Slerp (const SHQuaternion& q1, const SHQuaternion& q2, float t) noexcept; + [[nodiscard]] static SHQuaternion ClampedLerp (const SHQuaternion& q1, const SHQuaternion& q2, float t, float tMin = 0.0f, float tMax = 1.0f) noexcept; + [[nodiscard]] static SHQuaternion ClampedSlerp (const SHQuaternion& q1, const SHQuaternion& q2, float t, float tMin = 0.0f, float tMax = 1.0f) noexcept; - [[nodiscard]] static SHQuaternion Rotate (const SHVec3& from, const SHVec3& to) noexcept; + [[nodiscard]] static SHQuaternion FromToRotation (const SHVec3& from, const SHVec3& to) noexcept; + [[nodiscard]] static SHQuaternion LookRotation (const SHVec3& forward, const SHVec3& up) noexcept; + [[nodiscard]] static SHQuaternion RotateTowards (const SHQuaternion& from, const SHQuaternion& to, float maxAngleInRad) noexcept; }; SHQuaternion operator*(float lhs, const SHQuaternion& rhs) noexcept; diff --git a/SHADE_Managed/Quaternion.hxx b/SHADE_Managed/Quaternion.hxx new file mode 100644 index 00000000..0b07a34e --- /dev/null +++ b/SHADE_Managed/Quaternion.hxx @@ -0,0 +1,17 @@ +/************************************************************************************//*! +\file Quaternion.hxx +\author Diren D Bharwani, diren.dbharwani, 390002520 +\par email: diren.dbharwani\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definitions of Quaternion struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ + +#pragma once + +// TODO(Diren) diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index e6cdc7d4..8b66439c 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -11,6 +11,7 @@ Copyright (C) 2021 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ + #pragma once // Standard Libraries From 51c79d33d619e2a0ae87423f3bea316abd1f5d98 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 24 Oct 2022 02:04:05 +0800 Subject: [PATCH 431/793] Added C-style versions of SHLog functions and P/Invoke versions in SHADE_CSharp --- SHADE_CSharp/premake5.lua | 4 ++ SHADE_CSharp/src/Utility/Debug.cs | 37 +++++++++++++++ SHADE_Engine/src/Tools/SHLog.cpp | 20 ++++++++ SHADE_Engine/src/Tools/SHLog.h | 8 ++++ SHADE_Managed/premake5.lua | 3 +- SHADE_Managed/src/Editor/Editor.cxx | 72 +++++++++++++++++------------ 6 files changed, 113 insertions(+), 31 deletions(-) create mode 100644 SHADE_CSharp/src/Utility/Debug.cs diff --git a/SHADE_CSharp/premake5.lua b/SHADE_CSharp/premake5.lua index c6efa145..2d6c1edb 100644 --- a/SHADE_CSharp/premake5.lua +++ b/SHADE_CSharp/premake5.lua @@ -35,6 +35,10 @@ project "SHADE_CSharp" optimize "On" defines{"_RELEASE"} + filter "configurations:Publish" + optimize "On" + defines{"_RELEASE"} + require "vstudio" function platformsElement(cfg) diff --git a/SHADE_CSharp/src/Utility/Debug.cs b/SHADE_CSharp/src/Utility/Debug.cs new file mode 100644 index 00000000..eb9d9b24 --- /dev/null +++ b/SHADE_CSharp/src/Utility/Debug.cs @@ -0,0 +1,37 @@ +using System; +using System.Runtime.InteropServices; + +namespace SHADE +{ + internal static class Debug + { + [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Info")] + public static extern void LogInfo([MarshalAs(UnmanagedType.LPStr)] string str); + [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Warning")] + public static extern void LogWarning([MarshalAs(UnmanagedType.LPStr)] string str); + [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Error")] + public static extern void LogError([MarshalAs(UnmanagedType.LPStr)] string str); + [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Critical")] + public static extern void LogCritical([MarshalAs(UnmanagedType.LPStr)] string str); + public static void LogInfo(string msg, Object thrower) + { + LogInfo($"[{thrower.GetType().Name}] {msg}"); + } + public static void LogWarning(string msg, Object thrower) + { + LogWarning($"[{thrower.GetType().Name}] {msg}"); + } + public static void LogError(string msg, Object thrower) + { + LogError($"[{thrower.GetType().Name}] {msg}"); + } + public static void LogCritical(string msg, Object thrower) + { + LogCritical($"[{thrower.GetType().Name}] {msg}"); + } + public static void LogException(Exception exception, Object thrower) + { + LogError($"[{ thrower.GetType().Name }] Unhandled exception: { exception.ToString() }"); + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHLog.cpp b/SHADE_Engine/src/Tools/SHLog.cpp index 2d0b7b58..30a79338 100644 --- a/SHADE_Engine/src/Tools/SHLog.cpp +++ b/SHADE_Engine/src/Tools/SHLog.cpp @@ -51,4 +51,24 @@ namespace SHADE } #endif + void SHLog_Info(const char* msg) noexcept + { + SHLOG_INFO(msg) + } + + void SHLog_Warning(const char* msg) noexcept + { + SHLOG_WARNING(msg) + } + + void SHLog_Error(const char* msg) noexcept + { + SHLOG_ERROR(msg) + } + + void SHLog_Critical(const char* msg) noexcept + { + SHLOG_CRITICAL(msg) + } + } diff --git a/SHADE_Engine/src/Tools/SHLog.h b/SHADE_Engine/src/Tools/SHLog.h index b77042db..89dd9206 100644 --- a/SHADE_Engine/src/Tools/SHLog.h +++ b/SHADE_Engine/src/Tools/SHLog.h @@ -45,4 +45,12 @@ namespace SHADE static void Trace(const std::string& msg) noexcept; #endif }; + + extern "C" + { + static void SHLog_Info(const char* msg) noexcept; + static void SHLog_Warning(const char* msg) noexcept; + static void SHLog_Error(const char* msg) noexcept; + static void SHLog_Critical(const char* msg) noexcept; + } } diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 6d37122c..906511c1 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -45,7 +45,8 @@ project "SHADE_Managed" { "yaml-cpp", "imgui", - "SHADE_Engine" + "SHADE_Engine", + "SHADE_CSharp" } disablewarnings diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 120f0274..c2b34d44 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -68,36 +68,36 @@ using namespace System::Collections::Generic; /// The managed type of the object to edit. /// The native type of the object to edit. /// The SHEditorUI:: function to use for editing. -#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ -(field->FieldType == MANAGED_TYPE::typeid) \ -{ \ - NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ - NATIVE_TYPE oldVal = val; \ - \ - RangeAttribute^ rangeAttrib = hasAttribute(field); \ - const std::string FIELD_NAME = Convert::ToNative(field->Name); \ - bool changed = false; \ - if (rangeAttrib) \ - { \ - changed = SHEditorUI::InputSlider \ - ( \ - FIELD_NAME, \ - static_cast(rangeAttrib->Min), \ - static_cast(rangeAttrib->Max), \ - val, &isHovered \ - ); \ - } \ - else \ - { \ - changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \ - } \ - \ - if (changed) \ - { \ - field->SetValue(object, val); \ - registerUndoAction(object, field, val, oldVal); \ - } \ -} \ +#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ +(field->FieldType == MANAGED_TYPE::typeid) \ +{ \ + NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ + NATIVE_TYPE oldVal = val; \ + \ + RangeAttribute^ rangeAttrib = hasAttribute(field);\ + const std::string FIELD_NAME = Convert::ToNative(field->Name); \ + bool changed = false; \ + if (rangeAttrib) \ + { \ + changed = SHEditorUI::InputSlider \ + ( \ + FIELD_NAME, \ + static_cast(rangeAttrib->Min), \ + static_cast(rangeAttrib->Max), \ + val, &isHovered \ + ); \ + } \ + else \ + { \ + changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \ + } \ + \ + if (changed) \ + { \ + field->SetValue(object, val); \ + registerUndoAction(object, field, val, oldVal); \ + } \ +} \ /// /// Macro expansion that is used in renderFieldInInspector() to check the type of a field /// named "field" against the specified type and if it matches, retrieves the value of @@ -286,6 +286,18 @@ namespace SHADE registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } + else if (field->FieldType->BaseType == ICallbackEvent::typeid) + { + // Needs to present + // - name and param list + // Needs to present for each callbackaction + // - object, methodinfo OR action + // - Ways to add or remove items + } + else + { + return; + } // Check if the field has a specific attribute TooltipAttribute^ toolTip = hasAttribute(field); From c6d29a10382732f12f57031cf36127f2c2ddb93a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 24 Oct 2022 02:04:22 +0800 Subject: [PATCH 432/793] Added CallbackAction and CallbackEvent --- SHADE_CSharp/src/Events/CallbackAction.cs | 812 ++++++++++++++++++++ SHADE_CSharp/src/Events/CallbackAction.tt | 128 ++++ SHADE_CSharp/src/Events/CallbackEvent.cs | 854 ++++++++++++++++++++++ SHADE_CSharp/src/Events/CallbackEvent.tt | 143 ++++ 4 files changed, 1937 insertions(+) create mode 100644 SHADE_CSharp/src/Events/CallbackAction.cs create mode 100644 SHADE_CSharp/src/Events/CallbackAction.tt create mode 100644 SHADE_CSharp/src/Events/CallbackEvent.cs create mode 100644 SHADE_CSharp/src/Events/CallbackEvent.tt diff --git a/SHADE_CSharp/src/Events/CallbackAction.cs b/SHADE_CSharp/src/Events/CallbackAction.cs new file mode 100644 index 00000000..ec34ca5c --- /dev/null +++ b/SHADE_CSharp/src/Events/CallbackAction.cs @@ -0,0 +1,812 @@ +/************************************************************************************//*! +\file CallbackAction.cs +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definition of CallbackAction and related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +using System; +using System.Reflection; + +namespace SHADE +{ + /// + /// Interface for a CallbackAction that all variants inherit from. + /// + public interface ICallbackAction + { + /// + /// Whether or not this CallbackAction is runtime assigned. If it is, then the + /// TargetMethodName and TargetObject properties are invalid. + /// + bool IsRuntimeAction { get; } + /// + /// Name of the method that this CallbackAction is using. + /// + string TargetMethodName { get; } + /// + /// Object which the specified target method is called on. + /// + Object TargetObject { get; } + } + + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 1 parameter. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1) + { + if (targetAction != null) + { + targetAction.Invoke(t1); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 2 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 3 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 4 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 5 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 6 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5, t6); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + parameters[5] = t6; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 7 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + parameters[5] = t6; + parameters[6] = t7; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 8 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + parameters[5] = t6; + parameters[6] = t7; + parameters[7] = t8; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 9 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + parameters[5] = t6; + parameters[6] = t7; + parameters[7] = t8; + parameters[8] = t9; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 10 parameters. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10) + { + if (targetAction != null) + { + targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); + } + else if (TargetObject != null && targetMethod != null) + { + parameters[0] = t1; + parameters[1] = t2; + parameters[2] = t3; + parameters[3] = t4; + parameters[4] = t5; + parameters[5] = t6; + parameters[6] = t7; + parameters[7] = t8; + parameters[8] = t9; + parameters[9] = t10; + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } +} diff --git a/SHADE_CSharp/src/Events/CallbackAction.tt b/SHADE_CSharp/src/Events/CallbackAction.tt new file mode 100644 index 00000000..0b1efb83 --- /dev/null +++ b/SHADE_CSharp/src/Events/CallbackAction.tt @@ -0,0 +1,128 @@ +<# +/************************************************************************************//*! +\file CallbackAction.tt +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the T4 template for the definition of CallbackAction and + related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/#> +<#@ template hostspecific="false" language="C#" #> +<#@ output extension=".cs" #> +<# var max = 10; #> +/************************************************************************************//*! +\file CallbackAction.cs +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definition of CallbackAction and related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +using System; +using System.Reflection; + +namespace SHADE +{ + /// + /// Interface for a CallbackAction that all variants inherit from. + /// + public interface ICallbackAction + { + /// + /// Whether or not this CallbackAction is runtime assigned. If it is, then the + /// TargetMethodName and TargetObject properties are invalid. + /// + bool IsRuntimeAction { get; } + /// + /// Name of the method that this CallbackAction is using. + /// + string TargetMethodName { get; } + /// + /// Object which the specified target method is called on. + /// + Object TargetObject { get; } + } + +<# for (int i = 1; i <= max; ++i) { #> + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with <#=i#> parameter<# if (i > 1) {#>s<#} #>. + /// + public class CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs a CallbackAction that represents a call to the specified method on the + /// specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[1]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// + public CallbackAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke(<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } #>) + { + if (targetAction != null) + { + targetAction.Invoke(<# for (int t = 1; t < i + 1; ++t) { #>t<#=t#><# if (t != i) { #>, <# } #><# } #>); + } + else if (TargetObject != null && targetMethod != null) + { + <# for (int t = 0; t < i; ++t) {#>parameters[<#=t#>] = t<#=t+1#>; + <# } #>_ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } +<# } #> +} diff --git a/SHADE_CSharp/src/Events/CallbackEvent.cs b/SHADE_CSharp/src/Events/CallbackEvent.cs new file mode 100644 index 00000000..7b30a8ec --- /dev/null +++ b/SHADE_CSharp/src/Events/CallbackEvent.cs @@ -0,0 +1,854 @@ +/************************************************************************************//*! +\file CallbackEvent.cs +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definition of CallbackEvent and related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Reflection.Metadata.Ecma335; + +namespace SHADE +{ + /// + /// Interface for a CallbackEvent that all variants inherit from. + /// + public interface ICallbackEvent + { + /// + /// Registers an ICallbackAction with the event such that it will be called in + /// future + /// + /// ICallbackAction to register with. + void RegisterAction(ICallbackAction action); + /// + /// Deregisters an ICallbackAction that was previously added. This should + /// only emit a warning if an action that was not previous added was + /// provided. + /// + /// ICallbackAction to remove. + void DeregisterAction(ICallbackAction action); + /// + /// Iterable set of ICallbackActions that were registered to this event. + /// + IEnumerable Actions { get; } + } + + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5, t6); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5, t6, t7); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5, t6, t7, t8); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10) + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } +} diff --git a/SHADE_CSharp/src/Events/CallbackEvent.tt b/SHADE_CSharp/src/Events/CallbackEvent.tt new file mode 100644 index 00000000..74fadd08 --- /dev/null +++ b/SHADE_CSharp/src/Events/CallbackEvent.tt @@ -0,0 +1,143 @@ +<# +/************************************************************************************//*! +\file CallbackEvent.tt +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the T4 template for the definition of CallbackEvent and + related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/#> +<#@ template hostspecific="false" language="C#" #> +<#@ output extension=".cs" #> +<# var max = 10; #> +/************************************************************************************//*! +\file CallbackEvent.cs +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definition of CallbackEvent and related classes. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Reflection.Metadata.Ecma335; + +namespace SHADE +{ + /// + /// Interface for a CallbackEvent that all variants inherit from. + /// + public interface ICallbackEvent + { + /// + /// Registers an ICallbackAction with the event such that it will be called in + /// future + /// + /// ICallbackAction to register with. + void RegisterAction(ICallbackAction action); + /// + /// Deregisters an ICallbackAction that was previously added. This should + /// only emit a warning if an action that was not previous added was + /// provided. + /// + /// ICallbackAction to remove. + void DeregisterAction(ICallbackAction action); + /// + /// Iterable set of ICallbackActions that were registered to this event. + /// + IEnumerable Actions { get; } + } + +<# for (int i = 1; i <= max; ++i) { #> + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + { + actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(action)); + } + /// + /// Constructs and adds a CallbackACtion into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke(<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } #>) + { + foreach (CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action in actions) + { + try + { + action.Invoke(<# for (int t = 1; t < i + 1; ++t) { #>t<#=t#><# if (t != i) { #>, <# } #><# } #>); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } +<# } #> +} From c34faade8679b7d34735ad47332e445bafc4abb8 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 24 Oct 2022 02:45:47 +0800 Subject: [PATCH 433/793] Converted doubles to floats in SHADE Managed. Added Quaternions. --- SHADE_Managed/Quaternion.hxx | 17 -- SHADE_Managed/src/Math/Math.cxx | 14 +- SHADE_Managed/src/Math/Math.hxx | 24 +-- SHADE_Managed/src/Math/Quaternion.cxx | 170 ++++++++++++++++++ SHADE_Managed/src/Math/Quaternion.hxx | 237 ++++++++++++++++++++++++++ SHADE_Managed/src/Math/Vector2.cxx | 52 +++--- SHADE_Managed/src/Math/Vector2.hxx | 76 ++++----- SHADE_Managed/src/Math/Vector3.cxx | 61 +++---- SHADE_Managed/src/Math/Vector3.hxx | 98 +++++------ SHADE_Managed/src/Utility/Convert.cxx | 19 ++- SHADE_Managed/src/Utility/Convert.hxx | 14 ++ 11 files changed, 596 insertions(+), 186 deletions(-) delete mode 100644 SHADE_Managed/Quaternion.hxx create mode 100644 SHADE_Managed/src/Math/Quaternion.cxx create mode 100644 SHADE_Managed/src/Math/Quaternion.hxx diff --git a/SHADE_Managed/Quaternion.hxx b/SHADE_Managed/Quaternion.hxx deleted file mode 100644 index 0b07a34e..00000000 --- a/SHADE_Managed/Quaternion.hxx +++ /dev/null @@ -1,17 +0,0 @@ -/************************************************************************************//*! -\file Quaternion.hxx -\author Diren D Bharwani, diren.dbharwani, 390002520 -\par email: diren.dbharwani\@digipen.edu -\date Oct 23, 2022 -\brief Contains the definitions of Quaternion struct. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2021 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ - -#pragma once - -// TODO(Diren) diff --git a/SHADE_Managed/src/Math/Math.cxx b/SHADE_Managed/src/Math/Math.cxx index 5ec850a1..fa72e2b6 100644 --- a/SHADE_Managed/src/Math/Math.cxx +++ b/SHADE_Managed/src/Math/Math.cxx @@ -21,7 +21,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Utility Functions */ /*---------------------------------------------------------------------------------*/ - double Math::Wrap(double value, double min, double max) + float Math::Wrap(float value, float min, float max) { while (value < min) { @@ -33,24 +33,24 @@ namespace SHADE } return value; } - double Math::DegreesToRadians(double degrees) + float Math::DegreesToRadians(float degrees) { return degrees * Deg2Rad; } - double Math::RadiansToDegrees(double radians) + float Math::RadiansToDegrees(float radians) { return radians * Rad2Deg; } - double Math::Lerp(double a, double b, double t) + float Math::Lerp(float a, float b, float t) { - return LerpUnclamped(a, b, System::Math::Clamp(t, 0.0, 1.0)); + return LerpUnclamped(a, b, System::Math::Clamp(t, 0.0f, 1.0f)); } - double Math::LerpUnclamped(double a, double b, double t) + float Math::LerpUnclamped(float a, float b, float t) { return a + t * (b - a); } - double Math::InverseLerp(double a, double b, double value) + float Math::InverseLerp(float a, float b, float value) { return (value - a) / (b - a); } diff --git a/SHADE_Managed/src/Math/Math.hxx b/SHADE_Managed/src/Math/Math.hxx index 3ddc5149..1578d97c 100644 --- a/SHADE_Managed/src/Math/Math.hxx +++ b/SHADE_Managed/src/Math/Math.hxx @@ -27,11 +27,11 @@ namespace SHADE /// /// Degrees-to-radians conversion constant /// - static constexpr double Deg2Rad = System::Math::PI / 180.0; + static constexpr float Deg2Rad = System::Math::PI / 180.0f; /// /// Radians-to-degrees conversion constant /// - static constexpr double Rad2Deg = 180.0 / System::Math::PI; + static constexpr float Rad2Deg = 180.0f / System::Math::PI; /// /// Small value used for single precision floating point comparisons. /// @@ -47,28 +47,28 @@ namespace SHADE /// Minimum value to wrap at. /// Maximum value to wrap at. /// Wrapped value. - static double Wrap(double value, double min, double max); + static float Wrap(float value, float min, float max); /// /// Converts an angle from degree representation to radian representation. /// /// Degree-based angle to convert. /// The specified angle in radians. - static double DegreesToRadians(double degrees); + static float DegreesToRadians(float degrees); /// /// Converts an angle from radian representation to degree representation. /// /// Radian-based angle to convert. /// The specified angle in degrees. - static double RadiansToDegrees(double radians); + static float RadiansToDegrees(float radians); /// /// Linearly interpolates between a and b by t. /// The parameter t is clamped to the range [0, 1]. /// /// The start value. /// The end value. - /// The interpolation value between the two double. - /// The interpolated double result between the two double values. - static double Lerp(double a, double b, double t); + /// The interpolation value between the two float. + /// The interpolated float result between the two float values. + static float Lerp(float a, float b, float t); /// /// Linearly interpolates between a and b by t. /// The parameter t is not clamped and a value based on a and b is supported. @@ -77,9 +77,9 @@ namespace SHADE /// /// The start value. /// The end value. - /// The interpolation value between the two double. - /// The interpolated double result between the two double values. - static double LerpUnclamped(double a, double b, double t); + /// The interpolation value between the two float. + /// The interpolated float result between the two float values. + static float LerpUnclamped(float a, float b, float t); /// /// Calculates the linear parameter t that produces the interpolant value within the range [a, b]. /// @@ -87,6 +87,6 @@ namespace SHADE /// End value. /// Value between start and end. /// Percentage of value between start and end. - static double InverseLerp(double a, double b, double value); + static float InverseLerp(float a, float b, float value); }; } diff --git a/SHADE_Managed/src/Math/Quaternion.cxx b/SHADE_Managed/src/Math/Quaternion.cxx new file mode 100644 index 00000000..863241ac --- /dev/null +++ b/SHADE_Managed/src/Math/Quaternion.cxx @@ -0,0 +1,170 @@ +/************************************************************************************//*! +\file Quaternion.cxx +\author Diren D Bharwani, diren.dbharwani, 390002520 +\par email: diren.dbharwani\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definitions of functions in the Quaternion struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ + +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Quaternion.hxx" +// External Dependencies +#include "Math/SHQuaternion.h" +#include "Math/Vector/SHVec4.h" +// Project Headers +#include "Utility/Convert.hxx" +#include "Math.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + + Quaternion::Quaternion(float _x, float _y, float _z, float _w) + : x { _x } + , y { _y } + , z { _z } + , w { _w } + {} + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + + void Quaternion::SetFromToRotation(Vector3 fromDirection, Vector3 toDirection) + { + const SHQuaternion R = SHQuaternion::FromToRotation(Convert::ToNative(fromDirection), Convert::ToNative(toDirection)); + *this = Convert::ToCLI(R); + } + + void Quaternion::SetLookRotation(Vector3 view, Vector3 up) + { + const SHQuaternion R = SHQuaternion::LookRotation(Convert::ToNative(view), Convert::ToNative(up)); + *this = Convert::ToCLI(R); + } + + void Quaternion::ToAngleAxis(float^% angle, Vector3^% axis) + { + const SHVec4 NATIVE_AXIS_ANGLE = Convert::ToNative(*this).GetAxisAngle(); + axis = Convert::ToCLI(NATIVE_AXIS_ANGLE.ToVec3()); + angle = NATIVE_AXIS_ANGLE.w; + } + + System::String^ Quaternion::ToString() + { + return ValueType::ToString(); + } + + /*---------------------------------------------------------------------------------*/ + /* IEquatable */ + /*---------------------------------------------------------------------------------*/ + + bool Quaternion::Equals(Quaternion other) + { + const float DOT = Dot(*this, other); + return fabs(1.0f - DOT) <= Math::Epsilon; + } + + /*---------------------------------------------------------------------------------*/ + /* Object Overrides */ + /*---------------------------------------------------------------------------------*/ + + bool Quaternion::Equals(Object^ o) + { + return ValueType::Equals(o); + } + + int Quaternion::GetHashCode() + { + return ValueType::GetHashCode(); + } + + /*---------------------------------------------------------------------------------*/ + /* Static Functions */ + /*---------------------------------------------------------------------------------*/ + + float Quaternion::Angle(Quaternion a, Quaternion b) + { + return SHQuaternion::Angle(Convert::ToNative(a), Convert::ToNative(b)); + } + + Quaternion Quaternion::AngleAxis(float angle, Vector3 axis) + { + return Convert::ToCLI(SHQuaternion::FromAxisAngle(Convert::ToNative(axis), angle)); + } + + float Quaternion::Dot(Quaternion a, Quaternion b) + { + return (a.x * b.x) + (a.y * b.y) + (a.z * b.z) + (a.w * b.w); + } + + Quaternion Quaternion::Euler(float _x, float _y, float _z) + { + return Convert::ToCLI(SHQuaternion::FromPitchYawRoll(_x, _y, _z)); + } + + Quaternion Quaternion::FromToRotation(Vector3 fromDirection, Vector3 toDirection) + { + return Convert::ToCLI(SHQuaternion::FromToRotation(Convert::ToNative(fromDirection), Convert::ToNative(toDirection))); + } + + Quaternion Quaternion::Inverse(Quaternion rotation) + { + return Convert::ToCLI(SHQuaternion::Inverse(Convert::ToNative(rotation))); + } + + Quaternion Quaternion::Lerp(Quaternion a, Quaternion b, float t) + { + return Convert::ToCLI(SHQuaternion::ClampedLerp(Convert::ToNative(a), Convert::ToNative(b), t)); + } + + Quaternion Quaternion::LerpUnclamped(Quaternion a, Quaternion b, float t) + { + return Convert::ToCLI(SHQuaternion::Lerp(Convert::ToNative(a), Convert::ToNative(b), t)); + } + + Quaternion Quaternion::LookRotation(Vector3 forward, Vector3 upwards) + { + return Convert::ToCLI(SHQuaternion::LookRotation(Convert::ToNative(forward), Convert::ToNative(upwards))); + } + + Quaternion Quaternion::Normalize(Quaternion q) + { + return Convert::ToCLI(SHQuaternion::Normalise(Convert::ToNative(q))); + } + + Quaternion Quaternion::RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta) + { + return Convert::ToCLI(SHQuaternion::RotateTowards(Convert::ToNative(from), Convert::ToNative(to), Math::DegreesToRadians(maxDegreesDelta))); + } + + Quaternion Quaternion::Slerp(Quaternion a, Quaternion b, float t) + { + return Convert::ToCLI(SHQuaternion::ClampedSlerp(Convert::ToNative(a), Convert::ToNative(b), t)); + } + + Quaternion Quaternion::SlerpUnclamped(Quaternion a, Quaternion b, float t) + { + return Convert::ToCLI(SHQuaternion::Slerp(Convert::ToNative(a), Convert::ToNative(b), t)); + } + + + Quaternion Quaternion::operator*(Quaternion lhs, Quaternion rhs) + { + return Convert::ToCLI(Convert::ToNative(lhs) * Convert::ToNative(rhs)); + } + + bool Quaternion::operator==(Quaternion lhs, Quaternion rhs) + { + return lhs.Equals(rhs); + } +} \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Quaternion.hxx b/SHADE_Managed/src/Math/Quaternion.hxx new file mode 100644 index 00000000..783038c9 --- /dev/null +++ b/SHADE_Managed/src/Math/Quaternion.hxx @@ -0,0 +1,237 @@ +/************************************************************************************//*! +\file Quaternion.hxx +\author Diren D Bharwani, diren.dbharwani, 390002520 +\par email: diren.dbharwani\@digipen.edu +\date Oct 23, 2022 +\brief Contains the definitions of Quaternion struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ + +#pragma once + +// Standard Libraries +#include +// Project Includes +#include "Vector3.hxx" + +namespace SHADE +{ + /// + /// CLR version of SHADE's Quaternion class that represents an orientation. + /// Designed to closely match Unity's Quaternion struct. + /// + [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] + public value struct Quaternion : public System::IEquatable + { + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ +#pragma region Constants + + /// + /// Shorthand for writing Quaternion(0, 0, 0, 1). + /// + static initonly Quaternion Identity = Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + +#pragma endregion + + /*-----------------------------------------------------------------------------*/ + /* Public Members */ + /*-----------------------------------------------------------------------------*/ + + /// + /// X-component of the Quaternion. + /// Don't modify this directly unless you know quaternions inside out. + /// + float x; + /// + /// Y-component of the Quaternion. + /// Don't modify this directly unless you know quaternions inside out. + /// + float y; + /// + /// Z-component of the Quaternion. + /// Don't modify this directly unless you know quaternions inside out. + /// + float z; + /// + /// W-component of the Quaternion. Do not directly modify quaternions. + /// + float w; + + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Constructor to construct a Quaternion with the specified components. + /// + /// X-coordinate to set. + /// Y-coordinate to set. + /// Z-coordinate to set. + /// W-coordinate to set. + Quaternion(float _x, float _y, float _z, float _w); + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Creates a rotation which rotates from fromDirection to toDirection.
    + /// Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). + /// These Vectors must be set up in a script. + ///
    + void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection); + + /// + /// Creates a rotation with the specified forward and upwards directions.
    + /// The result is applied to this quaternion. + /// If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. + /// Logs an error if the forward direction is zero. + ///
    + /// The direction to look in. + /// The vector that defines in which direction up is. + void SetLookRotation(Vector3 view, Vector3 up); + + /// + /// Converts a rotation to angle-axis representation (angles in degrees). + /// + void ToAngleAxis(float^% angle, Vector3^% axis); + + System::String^ ToString() override; + + /*-----------------------------------------------------------------------------*/ + /* IEquatable */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Compares equality with an object of the same type. + /// + /// The object to compare with. + /// True if both objects are the same. + virtual bool Equals(Quaternion other); + + /*-----------------------------------------------------------------------------*/ + /* Object */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Compares equality with another unboxed object. + /// + /// The unboxed object to compare with. + /// True if both objects are the same. + bool Equals(Object^ o) override; + + /// + /// Gets a unique hash for this object. + /// + /// Unique hash for this object. + int GetHashCode() override; + + /*-----------------------------------------------------------------------------*/ + /* Static Functions */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Returns the angle in degrees between two rotations a and b.
    + ///
    + /// The angle in degrees between the two vectors. + static float Angle(Quaternion a, Quaternion b); + + /// + /// Creates a rotation which rotates angle degrees around axis. + /// + static Quaternion AngleAxis(float angle, Vector3 axis); + + /// + /// The dot product between two rotations. + /// + static float Dot(Quaternion a, Quaternion b); + + /// + /// Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. + /// + static Quaternion Euler(float _x, float _y, float _z); + + /// + /// Creates a rotation which rotates from fromDirection to toDirection. + /// + static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection); + + /// + /// Returns the Inverse of rotation. + /// + static Quaternion Inverse(Quaternion rotation); + + /// + /// Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. + /// + /// Start value, returned when t = 0. + /// End value, returned when t = 1. + /// Interpolation ratio. + /// A quaternion interpolated between quaternions a and b. + static Quaternion Lerp(Quaternion a, Quaternion b, float t); + + /// + /// Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. + /// + static Quaternion LerpUnclamped(Quaternion a, Quaternion b, float t); + + /// + /// Creates a rotation with the specified forward and upwards directions.
    + /// Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. + ///
    + static Quaternion LookRotation(Vector3 forward, Vector3 upwards); + + /// + /// Converts this quaternion to one with the same orientation but with a magnitude of 1. + /// + static Quaternion Normalize(Quaternion q); + + /// + /// Rotates a rotation from towards to.
    + /// The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). + /// Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. + ///
    + static Quaternion RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta); + + /// + /// Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. + /// + /// Start value, returned when t = 0. + /// End value, returned when t = 1. + /// Interpolation ratio. + /// A quaternion spherically interpolated between quaternions a and b. + static Quaternion Slerp(Quaternion a, Quaternion b, float t); + + /// + /// Spherically interpolates between a and b by t. The parameter t is not clamped. + /// + static Quaternion SlerpUnclamped(Quaternion a, Quaternion b, float t); + + /*-----------------------------------------------------------------------------*/ + /* Overloaded Operators */ + /*-----------------------------------------------------------------------------*/ + + /// + /// Combines rotations lhs and rhs. + /// + /// Left-hand side quaternion. + /// Right-hand side quaternion. + static Quaternion operator*(Quaternion lhs, Quaternion rhs); + + /// + /// Are two quaternions equal to each other? + /// + /// Left-hand side quaternion. + /// Right-hand side quaternion. + static bool operator==(Quaternion lhs, Quaternion rhs); + }; + +} // namespace SHADE diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index d40e2323..b110d4f8 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -26,10 +26,10 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ - Vector2::Vector2(double _x) - : Vector2 { _x, 0.0 } + Vector2::Vector2(float _x) + : Vector2 { _x, 0.0f } {} - Vector2::Vector2(double _x, double _y) + Vector2::Vector2(float _x, float _y) : x { _x } , y { _y } {} @@ -47,22 +47,22 @@ namespace SHADE return *this / GetMagnitude(); } - double Vector2::GetMagnitude() + float Vector2::GetMagnitude() { return sqrt(x * x + y * y); } - double Vector2::GetSqrMagnitude() + float Vector2::GetSqrMagnitude() { return x * x + y * y; } - double Vector2::AngleFromRightRadians() + float Vector2::AngleFromRightRadians() { return atan2(y, x); } - double Vector2::AngleFromRightDegrees() + float Vector2::AngleFromRightDegrees() { return Math::RadiansToDegrees(AngleFromRightRadians()); } @@ -72,7 +72,7 @@ namespace SHADE return IsNearPoint(point, Math::Epsilon); } - bool Vector2::IsNearPoint(Vector2 point, double tolerance) + bool Vector2::IsNearPoint(Vector2 point, float tolerance) { return (*this - point).GetSqrMagnitude() < (tolerance * tolerance); } @@ -113,13 +113,13 @@ namespace SHADE { return IsNear(lhs, rhs, Math::Epsilon); } - bool Vector2::IsNear(Vector2 lhs, Vector2 rhs, double tolerance) + bool Vector2::IsNear(Vector2 lhs, Vector2 rhs, float tolerance) { return (std::abs(lhs.x) - std::abs(rhs.x)) < tolerance && (std::abs(lhs.y) - std::abs(rhs.y)) < tolerance; } - double Vector2::Dot(Vector2 lhs, Vector2 rhs) + float Vector2::Dot(Vector2 lhs, Vector2 rhs) { return lhs.x * rhs.x + lhs.y * rhs.y; } @@ -153,12 +153,12 @@ namespace SHADE } Vector2 Vector2::Reflect(Vector2 vec, Vector2 normal) { - return vec - (Project(vec, normal.GetNormalised()) * 2.0); + return vec - (Project(vec, normal.GetNormalised()) * 2.0f); } - Vector2 Vector2::RotateRadians(Vector2 vec, double radians) + Vector2 Vector2::RotateRadians(Vector2 vec, float radians) { - const double SINE = sin(radians); - const double COSINE = cos(radians); + const float SINE = sin(radians); + const float COSINE = cos(radians); return Vector2 ( @@ -166,35 +166,35 @@ namespace SHADE vec.x * SINE + vec.y * COSINE ); } - Vector2 Vector2::RotateDegrees(Vector2 vec, double degrees) + Vector2 Vector2::RotateDegrees(Vector2 vec, float degrees) { return RotateRadians(vec, Math::DegreesToRadians(degrees)); } Vector2 Vector2::Min(Vector2 lhs, Vector2 rhs) { - double lx = lhs.x, rx = rhs.x; - double ly = lhs.y, ry = rhs.y; + float lx = lhs.x, rx = rhs.x; + float ly = lhs.y, ry = rhs.y; return Vector2(std::min(lx, rx), std::min(ly, ry)); } Vector2 Vector2::Max(Vector2 lhs, Vector2 rhs) { - double lx = lhs.x, rx = rhs.x; - double ly = lhs.y, ry = rhs.y; + float lx = lhs.x, rx = rhs.x; + float ly = lhs.y, ry = rhs.y; return Vector2(std::max(lx, rx), std::max(ly, ry)); } - Vector2 Vector2::Lerp(Vector2 a, Vector2 b, double t) + Vector2 Vector2::Lerp(Vector2 a, Vector2 b, float t) { - return LerpUnclamped(a, b, std::clamp(t, 0.0, 1.0)); + return LerpUnclamped(a, b, std::clamp(t, 0.0f, 1.0f)); } - Vector2 Vector2::LerpUnclamped(Vector2 a, Vector2 b, double t) + Vector2 Vector2::LerpUnclamped(Vector2 a, Vector2 b, float t) { return a + ((b - a) * t); } - Vector2 Vector2::MoveTowards(Vector2 current, Vector2 target, double maxDistanceDelta) + Vector2 Vector2::MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta) { // Ignore if it is exactly on the same point if (current == target) @@ -206,7 +206,7 @@ namespace SHADE // Check if check if is behind or ahead of target Vector2 DIFF = target - newPos; - if (Dot(DELTA, DIFF) < 0.0) + if (Dot(DELTA, DIFF) < 0.0f) { newPos = target; } @@ -236,7 +236,7 @@ namespace SHADE lhs.y * rhs.y ); } - Vector2 Vector2::operator*(Vector2 lhs, double rhs) + Vector2 Vector2::operator*(Vector2 lhs, float rhs) { return Vector2 ( @@ -244,7 +244,7 @@ namespace SHADE lhs.y * rhs ); } - Vector2 Vector2::operator/(Vector2 lhs, double rhs) + Vector2 Vector2::operator/(Vector2 lhs, float rhs) { return Vector2 ( diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index 9253a703..94b1989f 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -19,8 +19,8 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// CLR version of the the SHADE Engine's Vector2 class that represents a - /// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct. + /// CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. + /// Designed to closely match Unity's Vector2 struct. /// [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] public value struct Vector2 : public System::IEquatable @@ -33,37 +33,37 @@ namespace SHADE /// /// Shorthand for writing Vector2(0, -1). /// - static initonly Vector2 Down = Vector2(0.0, -1.0); + static initonly Vector2 Down = Vector2(0.0f, -1.0f); /// /// Shorthand for writing Vector2(-1, 0). /// - static initonly Vector2 Left = Vector2(-1.0, 0.0); + static initonly Vector2 Left = Vector2(-1.0f, 0.0f); /// - /// Shorthand for writing Vector2(double.NegativeInfinity, - /// double.NegativeInfinity). + /// Shorthand for writing Vector2(float.NegativeInfinity, + /// float.NegativeInfinity). /// - static initonly Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); + static initonly Vector2 NegativeInfinity = Vector2(std::numeric_limits::lowest(), std::numeric_limits::lowest()); /// /// Shorthand for writing Vector2(1, 1). /// - static initonly Vector2 One = Vector2(1.0, 1.0); + static initonly Vector2 One = Vector2(1.0f, 1.0f); /// - /// Shorthand for writing Vector2(double.PositiveInfinity, - /// double.PositiveInfinity). + /// Shorthand for writing Vector2(float.PositiveInfinity, + /// float.PositiveInfinity). /// - static initonly Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); + static initonly Vector2 PositiveInfinity = Vector2(std::numeric_limits::max(), std::numeric_limits::max()); /// /// Shorthand for writing Vector2(1, 0). /// - static initonly Vector2 Right = Vector2(1.0, 0.0); + static initonly Vector2 Right = Vector2(1.0f, 0.0f); /// /// Shorthand for writing Vector2(0, 1). /// - static initonly Vector2 Up = Vector2(0.0, 1.0); + static initonly Vector2 Up = Vector2(0.0f, 1.0f); /// /// Shorthand for writing Vector2(0, 0). /// - static initonly Vector2 Zero = Vector2(0.0, 0.0); + static initonly Vector2 Zero = Vector2(0.0f, 0.0f); #pragma endregion /*-----------------------------------------------------------------------------*/ @@ -72,27 +72,27 @@ namespace SHADE /// /// X-component of the Vector2. /// - double x; + float x; /// /// Y-component of the Vector2. /// - double y; + float y; /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ /// /// Constructor to construct a Vector2 with the specified components with the - /// Y-component set to 0.0. + /// Y-component set to 0.0f. /// /// X-coordinate to set. - Vector2(double _x); + Vector2(float _x); /// /// Constructor to construct a Vector2 with the specified components.. /// /// X-coordinate to set. /// Y-coordinate to set. - Vector2(double _x, double _y); + Vector2(float _x, float _y); /*-----------------------------------------------------------------------------*/ /* Usage Functions */ @@ -117,24 +117,24 @@ namespace SHADE /// need the precise magnitude, consider using GetSqrMagnitude() instead. ///
    /// Returns the length of this Vector2. - double GetMagnitude(); + float GetMagnitude(); /// /// Calculates and returns the squared magnitude of this Vector2. /// /// Returns the squared length of this Vector2. - double GetSqrMagnitude(); + float GetSqrMagnitude(); /// /// Calculates and returns the angle of this vector from the right vector. This /// function returns values between -Math.PI and Math.PI. /// /// Returns the angle of this vector from the right vector in radians. - double AngleFromRightRadians(); + float AngleFromRightRadians(); /// /// Calculates and returns the angle of this vector from the right vector. This - /// function returns values between -180.0 and 180.0. + /// function returns values between -180.0f and 180.0f. /// /// Returns the angle of this vector from the right vector in degrees. - double AngleFromRightDegrees(); + float AngleFromRightDegrees(); ///
    void ExecuteFixedUpdates(); /// + /// Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached + /// to Entities. + /// + void ExecuteCollisionFunctions(); + /// /// Shuts down the DotNetRuntime. /// void Exit() override; @@ -245,6 +250,7 @@ namespace SHADE CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; CsFuncPtr csScriptsExecuteUpdate = nullptr; CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsExecutePhysicsEvents = nullptr; CsFuncPtr csScriptsFrameCleanUp = nullptr; CsScriptManipFuncPtr csScriptsAdd = nullptr; CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index d7492fdc..48577f2c 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -28,6 +28,8 @@ of DigiPen Institute of Technology is prohibited. #include "Engine/Entity.hxx" #include "Serialisation/ReflectionUtilities.hxx" #include "Engine/Application.hxx" +#include "Physics/SHPhysicsSystemInterface.h" +#include "Physics/SHPhysicsUtils.h" namespace SHADE { @@ -71,7 +73,7 @@ namespace SHADE SAFE_NATIVE_CALL_BEGIN Script^ script; return AddScriptViaNameWithRef(entity, scriptName, script); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } @@ -301,7 +303,7 @@ namespace SHADE removeScript(script); } scriptList->Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy) { @@ -326,7 +328,7 @@ namespace SHADE startList.Remove(script); } scriptList->Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } /*---------------------------------------------------------------------------------*/ @@ -365,7 +367,7 @@ namespace SHADE startList.AddRange(%inactiveStartList); inactiveStartList.Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::FrameCleanUp() { @@ -386,7 +388,7 @@ namespace SHADE scripts.Remove(entity); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::Exit() { @@ -410,7 +412,7 @@ namespace SHADE startList.Clear(); disposalQueue.Clear(); scriptTypeList = nullptr; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } /*---------------------------------------------------------------------------------*/ @@ -439,7 +441,7 @@ namespace SHADE script->FixedUpdate(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::ExecuteUpdate() { @@ -456,7 +458,7 @@ namespace SHADE script->Update(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::ExecuteLateUpdate() { @@ -473,7 +475,83 @@ namespace SHADE script->LateUpdate(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") + } + + void ScriptStore::ExecuteCollisionFunctions() + { + SAFE_NATIVE_CALL_BEGIN + /* Collisions */ + const auto& collisions = SHPhysicsSystemInterface::GetCollisionInfo(); + for (const auto& collisionInfo : collisions) + { + const EntityID OWNER = collisionInfo.GetEntityA(); + + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(OWNER) || !scripts.ContainsKey(OWNER)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(OWNER); + + // Call all of the script's functions + auto entityScripts = scripts[OWNER]; + if (entityScripts->Count > 0) + { + for each (Script^ script in entityScripts) + { + switch (collisionInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnCollisionEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnCollisionStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnCollisionExit(info); + break; + } + } + } + } + /* Triggers */ + const auto& triggers = SHPhysicsSystemInterface::GetTriggerInfo(); + for (const auto& triggerInfo : triggers) + { + const EntityID OWNER = triggerInfo.GetEntityA(); + + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(OWNER) || !scripts.ContainsKey(OWNER)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(OWNER); + + // Call all of the script's functions + auto entityScripts = scripts[OWNER]; + if (entityScripts->Count > 0) + { + for each (Script ^ script in entityScripts) + { + switch (triggerInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnTriggerEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnTriggerStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnTriggerExit(info); + break; + } + } + } + } + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } bool ScriptStore::SerialiseScripts(Entity entity, System::IntPtr yamlNodePtr) @@ -509,7 +587,7 @@ namespace SHADE } return true; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } @@ -559,7 +637,7 @@ namespace SHADE } return true; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 9aa66fcd..a4c6e824 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -233,6 +233,10 @@ namespace SHADE /// Executes LateUpdate() for all scripts. /// static void ExecuteLateUpdate(); + /// + /// Executes OnCollision*() and OnTrigger*() for all scripts. + /// + static void ExecuteCollisionFunctions(); /*-----------------------------------------------------------------------------*/ /* Serialisation Functions */ From caf6006c9e6dc9d793e253df25274d8a4cd83845 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Mon, 31 Oct 2022 22:06:28 +0800 Subject: [PATCH 591/793] Update C# Input Enums --- SHADE_Managed/src/Input/Input.hxx | 152 +++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Input/Input.hxx b/SHADE_Managed/src/Input/Input.hxx index f281e4c8..ec015e8b 100644 --- a/SHADE_Managed/src/Input/Input.hxx +++ b/SHADE_Managed/src/Input/Input.hxx @@ -31,10 +31,159 @@ namespace SHADE /// /// Represents the available supported keycodes that can be passed into the /// key-based Input functions. + /// + /// Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html + /// Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode /// enum class KeyCode : int { + Backspace = static_cast(SHInputManager::SH_KEYCODE::BACKSPACE), + Delete = static_cast(SHInputManager::SH_KEYCODE::DEL), + Tab = static_cast(SHInputManager::SH_KEYCODE::TAB), + Clear = static_cast(SHInputManager::SH_KEYCODE::CLEAR), + Return = static_cast(SHInputManager::SH_KEYCODE::ENTER), + Pause = static_cast(SHInputManager::SH_KEYCODE::PAUSE), + Escape = static_cast(SHInputManager::SH_KEYCODE::ESCAPE), Space = static_cast(SHInputManager::SH_KEYCODE::SPACE), + Keypad0 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_0), + Keypad1 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_1), + Keypad2 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_2), + Keypad3 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_3), + Keypad4 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_4), + Keypad5 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_5), + Keypad6 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_6), + Keypad7 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_7), + Keypad8 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_8), + Keypad9 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_9), + KeypadPeriod = static_cast(SHInputManager::SH_KEYCODE::DECIMAL), + KeypadDivide = static_cast(SHInputManager::SH_KEYCODE::DIVIDE), + KeypadMultiply = static_cast(SHInputManager::SH_KEYCODE::MULTIPLY), + KeypadMinus = static_cast(SHInputManager::SH_KEYCODE::SUBTRACT), + KeypadPlus = static_cast(SHInputManager::SH_KEYCODE::ADD), + KeypadEnter = static_cast(SHInputManager::SH_KEYCODE::ENTER), + //KeypadEquals + UpArrow = static_cast(SHInputManager::SH_KEYCODE::UP_ARROW), + DownArrow = static_cast(SHInputManager::SH_KEYCODE::DOWN_ARROW), + RightArrow = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ARROW), + LeftArrow = static_cast(SHInputManager::SH_KEYCODE::LEFT_ARROW), + Insert = static_cast(SHInputManager::SH_KEYCODE::INSERT), + Home = static_cast(SHInputManager::SH_KEYCODE::HOME), + End = static_cast(SHInputManager::SH_KEYCODE::END), + PageUp = static_cast(SHInputManager::SH_KEYCODE::PAGE_UP), + PageDown = static_cast(SHInputManager::SH_KEYCODE::PAGE_DOWN), + F1 = static_cast(SHInputManager::SH_KEYCODE::F1), + F2 = static_cast(SHInputManager::SH_KEYCODE::F2), + F3 = static_cast(SHInputManager::SH_KEYCODE::F3), + F4 = static_cast(SHInputManager::SH_KEYCODE::F4), + F5 = static_cast(SHInputManager::SH_KEYCODE::F5), + F6 = static_cast(SHInputManager::SH_KEYCODE::F6), + F7 = static_cast(SHInputManager::SH_KEYCODE::F7), + F8 = static_cast(SHInputManager::SH_KEYCODE::F8), + F9 = static_cast(SHInputManager::SH_KEYCODE::F9), + F10 = static_cast(SHInputManager::SH_KEYCODE::F10), + F11 = static_cast(SHInputManager::SH_KEYCODE::F11), + F12 = static_cast(SHInputManager::SH_KEYCODE::F12), + F13 = static_cast(SHInputManager::SH_KEYCODE::F13), + F14 = static_cast(SHInputManager::SH_KEYCODE::F14), + F15 = static_cast(SHInputManager::SH_KEYCODE::F15), + F16 = static_cast(SHInputManager::SH_KEYCODE::F16), + F17 = static_cast(SHInputManager::SH_KEYCODE::F17), + F18 = static_cast(SHInputManager::SH_KEYCODE::F18), + F19 = static_cast(SHInputManager::SH_KEYCODE::F19), + F20 = static_cast(SHInputManager::SH_KEYCODE::F20), + F21 = static_cast(SHInputManager::SH_KEYCODE::F21), + F22 = static_cast(SHInputManager::SH_KEYCODE::F22), + F23 = static_cast(SHInputManager::SH_KEYCODE::F23), + F24 = static_cast(SHInputManager::SH_KEYCODE::F24), + Alpha0 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_0), + Alpha1 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_1), + Alpha2 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_2), + Alpha3 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_3), + Alpha4 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_4), + Alpha5 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_5), + Alpha6 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_6), + Alpha7 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_7), + Alpha8 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_8), + Alpha9 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_9), + //Exclaim + //DoubleQuote + //Hash + //Dollar + //Percent + //Ampersand + Quote = static_cast(SHInputManager::SH_KEYCODE::OEM_7), + //LeftParen + //RightParen + //Asterisk + //Plus + Comma = static_cast(SHInputManager::SH_KEYCODE::OEM_COMMA), + Minus = static_cast(SHInputManager::SH_KEYCODE::OEM_MINUS), + Period = static_cast(SHInputManager::SH_KEYCODE::OEM_PERIOD), + Slash = static_cast(SHInputManager::SH_KEYCODE::OEM_2), + //Colon + Semicolon = static_cast(SHInputManager::SH_KEYCODE::OEM_1), + //Less + Equals = static_cast(SHInputManager::SH_KEYCODE::OEM_PLUS), + //Greater + //Question + //At + LeftBracket = static_cast(SHInputManager::SH_KEYCODE::OEM_4), + Backslash = static_cast(SHInputManager::SH_KEYCODE::OEM_5), + RightBracket = static_cast(SHInputManager::SH_KEYCODE::OEM_6), + //Caret + //Underscore + BackQuote = static_cast(SHInputManager::SH_KEYCODE::OEM_3), + A = static_cast(SHInputManager::SH_KEYCODE::A), + B = static_cast(SHInputManager::SH_KEYCODE::B), + C = static_cast(SHInputManager::SH_KEYCODE::C), + D = static_cast(SHInputManager::SH_KEYCODE::D), + E = static_cast(SHInputManager::SH_KEYCODE::E), + F = static_cast(SHInputManager::SH_KEYCODE::F), + G = static_cast(SHInputManager::SH_KEYCODE::G), + H = static_cast(SHInputManager::SH_KEYCODE::H), + I = static_cast(SHInputManager::SH_KEYCODE::I), + J = static_cast(SHInputManager::SH_KEYCODE::J), + K = static_cast(SHInputManager::SH_KEYCODE::K), + L = static_cast(SHInputManager::SH_KEYCODE::L), + M = static_cast(SHInputManager::SH_KEYCODE::M), + N = static_cast(SHInputManager::SH_KEYCODE::N), + O = static_cast(SHInputManager::SH_KEYCODE::O), + P = static_cast(SHInputManager::SH_KEYCODE::P), + Q = static_cast(SHInputManager::SH_KEYCODE::Q), + R = static_cast(SHInputManager::SH_KEYCODE::R), + S = static_cast(SHInputManager::SH_KEYCODE::S), + T = static_cast(SHInputManager::SH_KEYCODE::T), + U = static_cast(SHInputManager::SH_KEYCODE::U), + V = static_cast(SHInputManager::SH_KEYCODE::V), + W = static_cast(SHInputManager::SH_KEYCODE::W), + X = static_cast(SHInputManager::SH_KEYCODE::X), + Y = static_cast(SHInputManager::SH_KEYCODE::Y), + Z = static_cast(SHInputManager::SH_KEYCODE::Z), + //LeftCurlyBracket + //Pipe + //RightCurlyBracket + //Tilde + NumLock = static_cast(SHInputManager::SH_KEYCODE::NUM_LOCK), + CapsLock = static_cast(SHInputManager::SH_KEYCODE::CAPS_LOCK), + ScrollLock = static_cast(SHInputManager::SH_KEYCODE::SCROLL_LOCK), + RightShift = static_cast(SHInputManager::SH_KEYCODE::RIGHT_SHIFT), + LeftShift = static_cast(SHInputManager::SH_KEYCODE::LEFT_SHIFT), + RightControl = static_cast(SHInputManager::SH_KEYCODE::RIGHT_CTRL), + LeftControl = static_cast(SHInputManager::SH_KEYCODE::LEFT_CTRL), + RightAlt = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ALT), + LeftAlt = static_cast(SHInputManager::SH_KEYCODE::LEFT_ALT), + LeftWindows = static_cast(SHInputManager::SH_KEYCODE::LEFT_WINDOWS), + RightWindows = static_cast(SHInputManager::SH_KEYCODE::RIGHT_WINDOWS), + //AltGr + Help = static_cast(SHInputManager::SH_KEYCODE::HELP), + Print = static_cast(SHInputManager::SH_KEYCODE::PRINT), + SysReq = static_cast(SHInputManager::SH_KEYCODE::PRINT_SCREEN), + //Break + //Menu + //Mouse buttons use mouse codes, which are enums declared later + //TODO Controller input +#if 0 + Space = static_cast(SHInputManager::SH_KEYCODE::SPACE), //Apostrophe = static_cast(SHInputManager::SH_KEYCODE::APOSTROPHE), Comma = static_cast(SHInputManager::SH_KEYCODE::OEM_COMMA), Minus = static_cast(SHInputManager::SH_KEYCODE::OEM_MINUS), @@ -190,7 +339,8 @@ namespace SHADE JoystickButton6 = JoystickView, JoystickButton7 = JoystickMenu, JoystickButton8 = JoystickLeftStick, - JoystickButton9 = JoystickRightStick + JoystickButton9 = JoystickRightStick +#endif }; /// From 6e604fe7e9e93a1c4387d89b8d0f2b654898bce1 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 23:18:20 +0800 Subject: [PATCH 592/793] Fixed bug with relative collider sizes --- SHADE_Application/src/Scenes/SBTestScene.cpp | 1 - .../Inspector/SHEditorComponentView.hpp | 2 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 26 +++++++++---------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 23b57dfc..52f2dc7b 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -128,7 +128,6 @@ namespace Sandbox floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); auto* floorBox = floorCollider.AddBoundingBox(); - floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 521e1213..e3f93713 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -251,7 +251,7 @@ namespace SHADE SHEditorWidgets::DragVec3 ( "Half Extents", { "X", "Y", "Z" }, - [box, transformComponent] { return (transformComponent->GetWorldScale() * 2.0f) * box->GetHalfExtents(); }, + [box, transformComponent] { return (box->GetHalfExtents() * 2.0f) / transformComponent->GetWorldScale(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } else if (collider->GetType() == SHCollider::Type::SPHERE) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 53db5453..053cda68 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -19,8 +19,9 @@ #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" #include "Math/SHMathHelpers.h" -#include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Scene/SHSceneManager.h" +#include "Scripting/SHScriptEngine.h" namespace SHADE { @@ -325,38 +326,35 @@ namespace SHADE void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept { - auto* system = reinterpret_cast(GetSystem()); - fixedTimeStep = 1.0 / system->fixedDT; + auto* physicsSystem = reinterpret_cast(GetSystem()); + + fixedTimeStep = 1.0 / physicsSystem->fixedDT; accumulatedTime += dt; int count = 0; while (accumulatedTime > fixedTimeStep) { - system->world->update(static_cast(fixedTimeStep)); + physicsSystem->world->update(static_cast(fixedTimeStep)); accumulatedTime -= fixedTimeStep; ++count; } stats.numSteps = count; - system->worldUpdated = count > 0; + physicsSystem->worldUpdated = count > 0; - system->interpolationFactor = accumulatedTime / fixedTimeStep; + physicsSystem->interpolationFactor = accumulatedTime / fixedTimeStep; } void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept { - auto* system = reinterpret_cast(GetSystem()); + auto* physicsSystem = reinterpret_cast(GetSystem()); // Interpolate transforms for rendering - if (system->worldUpdated) - { - system->SyncTransforms(); + if (physicsSystem->worldUpdated) + physicsSystem->SyncTransforms(); - // TODO(Kah Wei): Take Collision & Trigger messages here - - system->ClearInvalidCollisions(); - } + physicsSystem->ClearInvalidCollisions(); } void SHPhysicsSystem::onContact(const CallbackData& callbackData) From 53b9c8f746ad72b98d954d9f57ff41ffbcc7f62e Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 31 Oct 2022 23:28:46 +0800 Subject: [PATCH 593/793] SSAO WIP --- Assets/Shaders/SSAO_CS.glsl | 24 +++--- Assets/Shaders/SSAO_CS.shshaderb | Bin 6425 -> 6313 bytes .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 7 +- .../MiddleEnd/PostProcessing/SHSSAO.cpp | 70 ++++++++++++++++-- .../MiddleEnd/PostProcessing/SHSSAO.h | 32 +++++--- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 7 ++ .../RenderGraph/SHRenderGraphNodeCompute.h | 4 +- 7 files changed, 109 insertions(+), 35 deletions(-) diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index ac84cb81..9cc2de7b 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -19,10 +19,11 @@ layout(set = 4, binding = 2, rgba32f) uniform image2D outputImage; layout(std430, set = 5, binding = 0) buffer SSAOData { vec4 samples[NUM_SAMPLES]; - vec4 rotations[NUM_ROTATIONS]; } ssaoData; +layout (set = 5, binding = 1) uniform sampler2D noiseTexture; + layout(set = 2, binding = 0) uniform CameraData { vec4 position; @@ -32,33 +33,28 @@ layout(set = 2, binding = 0) uniform CameraData } cameraData; -shared vec4 sharedRotations[NUM_ROTATIONS]; void main() { ivec2 size = imageSize (outputImage); - // load rotations into shared memory - uint localThreadIndex = gl_LocalInvocationIndex; - if (localThreadIndex < NUM_ROTATIONS) - sharedRotations[localThreadIndex] = ssaoData.rotations[localThreadIndex]; - - barrier(); - ivec2 globalThread = ivec2 (gl_GlobalInvocationID.xy); // load all the necessary variables vec3 viewSpacePos = imageLoad (positions, globalThread).rgb; vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb); - // Get random vector - uint randomVecXIndex = globalThread.x % ROTATION_KERNEL_W; - uint randomVecYIndex = globalThread.y % ROTATION_KERNEL_H; - vec3 randomVec = (sharedRotations[randomVecYIndex * ROTATION_KERNEL_W + randomVecXIndex].rgb) * 2.0f - 1.0f; + ivec2 noiseDim = textureSize(noiseTexture, 0); + vec2 threadUV = globalThread / size; + vec2 noiseUV = vec2 (float(size.x)/float(noiseDim.x), float(size.y) / float(noiseDim.y)); + noiseUV *= threadUV; + vec3 randomVec = texture(noiseTexture, noiseUV).rgb * 2.0f - 1.0f; // Gram schmidt vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec))); vec3 bitangent = cross (tangent, viewSpaceNormal); + + // matrix for tangent to view mat3 TBN = mat3 (tangent, bitangent, viewSpaceNormal); float occlusion = 0.0f; @@ -85,7 +81,7 @@ void main() occlusion += (sampleDepth >= samplePos.z + BIAS ? 1.0f : 0.0f) * rangeCheck; } - occlusion = (occlusion / float(NUM_SAMPLES)); + occlusion = 1.0f - (occlusion / float(NUM_SAMPLES)); // store result into result image imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), vec4(occlusion.rrr, 0.0f)); diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb index 78fd5087a76621f421742ffd5f2b9fa21528e843..9ba80c93e4334ef6e464462f7f9c384d0a450093 100644 GIT binary patch literal 6313 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 PES|%D^#6}4r-T0kYfO5x diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 2a59a5d1..6a3bd916 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -215,10 +215,15 @@ namespace SHADE graphicsQueue->WaitIdle(); + ssaoStorage->PrepareRotationVectorsVkData(device); + auto ssaoShader = shaderModuleLibrary.GetBuiltInShaderModule("SSAO_CS"); Handle ssaoPass = gBufferNode->AddNodeCompute(ssaoShader, {"Position", "Normals", "SSAO"}); auto ssaoDataBuffer = ssaoStorage->GetBuffer(); - ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BINDING, {&ssaoDataBuffer, 1}, 0, ssaoStorage->GetBuffer()->GetSizeStored()); + ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BUFFER_BINDING, { &ssaoDataBuffer, 1 }, 0, ssaoStorage->GetBuffer()->GetSizeStored()); + + auto viewSamplerLayout = ssaoStorage->GetViewSamplerLayout(); + ssaoPass->ModifyWriteDescImageComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_IMAGE_BINDING, {&viewSamplerLayout, 1}); /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp index c6aa1978..b145902f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp @@ -2,15 +2,14 @@ #include "SHSSAO.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Images/SHVkImage.h" +#include "Graphics/Images/SHVkSampler.h" #include namespace SHADE { void SHSSAO::Init(Handle logicalDevice, Handle cmdBuffer) noexcept { - // create memory on CPU side - ssaoData = std::make_unique(); - // Initialize a distribution to get values from 0 to 1 std::uniform_real_distribution distrib{0.0f, 1.0f}; @@ -18,7 +17,6 @@ namespace SHADE std::default_random_engine generator; // generate samples - auto& samples = ssaoData->samples; for (uint32_t i = 0; i < NUM_SAMPLES; ++i) { samples[i] = SHVec4 @@ -36,7 +34,6 @@ namespace SHADE } // generate rotation vector - auto& rotationVectors = ssaoData->rotatationVectors; for (uint32_t i = 0; i < NUM_ROTATION_VECTORS; ++i) { rotationVectors[i] = SHVec4 @@ -48,15 +45,74 @@ namespace SHADE }; } + SHImageCreateParams imageDetails = + { + .imageType = vk::ImageType::e2D, + .width = NUM_ROTATION_VECTORS_W, + .height = NUM_ROTATION_VECTORS_H, + .depth = 1, + .levels = 1, + .arrayLayers = 1, + .imageFormat = vk::Format::eR32G32B32A32Sfloat, + .usageFlags = vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst, + .createFlags = {} + }; + + uint32_t mipOffset = 0; + rotationVectorsImage = logicalDevice->CreateImage(imageDetails, reinterpret_cast( rotationVectors.data()), static_cast(sizeof(rotationVectors)), {&mipOffset, 1}, VMA_MEMORY_USAGE_AUTO, {}); + + vk::ImageMemoryBarrier transferBarrier{}; + rotationVectorsImage->PrepareImageTransitionInfo(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, transferBarrier); + + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, {transferBarrier}); + + rotationVectorsImage->TransferToDeviceResource(cmdBuffer); + + vk::ImageMemoryBarrier shaderReadBarrier{}; + rotationVectorsImage->PrepareImageTransitionInfo(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, shaderReadBarrier); + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eComputeShader, {}, {}, {}, { shaderReadBarrier }); + + // Get aligned size for buffer - uint32_t alignedSize = logicalDevice->PadSSBOSize(sizeof (SamplesAndKernel)); + uint32_t alignedSize = logicalDevice->PadSSBOSize(sizeof (samples)); // Create buffer - ssaoDataBuffer = logicalDevice->CreateBuffer(alignedSize, ssaoData.get(), alignedSize, vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, {}); + ssaoDataBuffer = logicalDevice->CreateBuffer(alignedSize, samples.data(), alignedSize, vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, {}); ssaoDataBuffer->TransferToDeviceResource(cmdBuffer); } + void SHSSAO::PrepareRotationVectorsVkData(Handle logicalDevice) noexcept + { + SHImageViewDetails DETAILS = + { + .viewType = vk::ImageViewType::e2D, + .format = vk::Format::eR32G32B32A32Sfloat, + .imageAspectFlags = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .mipLevelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1 + }; + rotationVectorsImageView = rotationVectorsImage->CreateImageView(logicalDevice, rotationVectorsImage, DETAILS); + + SHVkSamplerParams samplerParams + { + .minFilter = vk::Filter::eNearest, + .magFilter = vk::Filter::eNearest, + .addressMode = vk::SamplerAddressMode::eRepeat, + .mipmapMode = vk::SamplerMipmapMode::eNearest, + .maxLod = 1u + }; + + rotationVectorsSampler = logicalDevice->CreateSampler(samplerParams); + } + + SHVkDescriptorSetGroup::viewSamplerLayout SHSSAO::GetViewSamplerLayout(void) const noexcept + { + return std::make_tuple(rotationVectorsImageView, rotationVectorsSampler, vk::ImageLayout::eShaderReadOnlyOptimal); + } + Handle SHSSAO::GetBuffer(void) const noexcept { return ssaoDataBuffer; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h index 040b4695..c7c133c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h @@ -3,39 +3,47 @@ #include "Resource/SHHandle.h" #include "Graphics/SHVulkanIncludes.h" #include "Math/Vector/SHVec4.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" namespace SHADE { class SHVkBuffer; class SHVkLogicalDevice; class SHVkCommandBuffer; + class SHVkImage; + class SHVkImageView; + class SHVkSampler; class SHSSAO { public: - static constexpr uint32_t DESC_SET_BINDING = 0; + static constexpr uint32_t DESC_SET_BUFFER_BINDING = 0; + static constexpr uint32_t DESC_SET_IMAGE_BINDING = 1; private: static constexpr uint32_t NUM_SAMPLES = 64; - static constexpr uint32_t NUM_ROTATION_VECTORS = 16; - - struct SamplesAndKernel - { - //! distances from a pixel we want to sample - std::array samples; - - std::array rotatationVectors; - }; + static constexpr uint32_t NUM_ROTATION_VECTORS_W = 4; + static constexpr uint32_t NUM_ROTATION_VECTORS_H = 4; + static constexpr uint32_t NUM_ROTATION_VECTORS = NUM_ROTATION_VECTORS_W * NUM_ROTATION_VECTORS_H; private: - //! Samples and kernel on CPU side - std::unique_ptr ssaoData; + //! distances from a pixel we want to sample + std::array samples; //! For passing SSAO samples and kernel to GPU Handle ssaoDataBuffer; + std::array rotationVectors; + + Handle rotationVectorsImage; + Handle rotationVectorsImageView; + Handle rotationVectorsSampler; + public: void Init (Handle logicalDevice, Handle cmdBuffer) noexcept; + void PrepareRotationVectorsVkData (Handle logicalDevice) noexcept; + SHVkDescriptorSetGroup::viewSamplerLayout GetViewSamplerLayout (void) const noexcept; + Handle GetBuffer (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index 2c471c83..a86acbc7 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -175,4 +175,11 @@ namespace SHADE computeResource->descSet->UpdateDescriptorSetBuffer(set, binding); } + void SHRenderGraphNodeCompute::ModifyWriteDescImageComputeResource(uint32_t set, uint32_t binding, std::span const& viewSamplerLayouts) noexcept + { + computeResource->descSet->ModifyWriteDescImage(set, binding, viewSamplerLayouts); + computeResource->descSet->UpdateDescriptorSetImages(set, binding); + + } + } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h index d61eda33..81157dc2 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -2,6 +2,7 @@ #include "Resource/SHHandle.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/SHVulkanIncludes.h" #include #include @@ -10,7 +11,6 @@ namespace SHADE { class SHVkPipeline; - class SHVkDescriptorSetGroup; class SHVkDescriptorPool; class SHVkLogicalDevice; class SHVkPipelineLayout; @@ -74,6 +74,8 @@ namespace SHADE void SetDynamicOffsets (std::span perFrameSizes) noexcept; void ModifyWriteDescBufferComputeResource (uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept; + void ModifyWriteDescImageComputeResource(uint32_t set, uint32_t binding, std::span const& viewSamplerLayouts) noexcept; + friend class SHRenderGraph; friend class SHRenderGraphNode; From e4cb8ede5af7e5336d84e3903403a1381b4eedcd Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 00:11:09 +0800 Subject: [PATCH 594/793] Added support for collision and trigger events in code properly --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 13 ++- SHADE_Managed/src/Scripts/ScriptStore.cxx | 108 ++++++++++--------- TempScriptsFolder/PhysicsTest.cs | 25 +++++ 3 files changed, 97 insertions(+), 49 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 53db5453..1d0cd10c 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -21,6 +21,7 @@ #include "Math/SHMathHelpers.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Scripting/SHScriptEngine.h" namespace SHADE { @@ -353,7 +354,17 @@ namespace SHADE { system->SyncTransforms(); - // TODO(Kah Wei): Take Collision & Trigger messages here + // Collision & Trigger messages + auto scriptSys = SHSystemManager::GetSystem(); + if (scriptSys) + { + scriptSys->ExecuteFixedUpdates(); + scriptSys->ExecuteCollisionFunctions(); + } + else + { + SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); + } system->ClearInvalidCollisions(); } diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 48577f2c..407d0fa8 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -485,33 +485,39 @@ namespace SHADE const auto& collisions = SHPhysicsSystemInterface::GetCollisionInfo(); for (const auto& collisionInfo : collisions) { - const EntityID OWNER = collisionInfo.GetEntityA(); - - // Don't bother if this object has no scripts or is inactive - if (!isEntityActive(OWNER) || !scripts.ContainsKey(OWNER)) - continue; - - // Construct the collision state object - CollisionInfo info; - info.GameObject = GameObject(OWNER); - - // Call all of the script's functions - auto entityScripts = scripts[OWNER]; - if (entityScripts->Count > 0) + auto entities = + { + std::make_pair(collisionInfo.GetEntityA(), collisionInfo.GetEntityB()), + std::make_pair(collisionInfo.GetEntityB(), collisionInfo.GetEntityA()) + }; + for (auto entity : entities) { - for each (Script^ script in entityScripts) + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(entity.first) || !scripts.ContainsKey(entity.first)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(entity.second); + + // Call all of the script's functions + auto entityScripts = scripts[entity.first]; + if (entityScripts->Count > 0) { - switch (collisionInfo.GetCollisionState()) + for each (Script ^ script in entityScripts) { - case SHCollisionEvent::State::ENTER: - script->OnCollisionEnter(info); - break; - case SHCollisionEvent::State::STAY: - script->OnCollisionStay(info); - break; - case SHCollisionEvent::State::EXIT: - script->OnCollisionExit(info); - break; + switch (collisionInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnCollisionEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnCollisionStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnCollisionExit(info); + break; + } } } } @@ -520,33 +526,39 @@ namespace SHADE const auto& triggers = SHPhysicsSystemInterface::GetTriggerInfo(); for (const auto& triggerInfo : triggers) { - const EntityID OWNER = triggerInfo.GetEntityA(); - - // Don't bother if this object has no scripts or is inactive - if (!isEntityActive(OWNER) || !scripts.ContainsKey(OWNER)) - continue; - - // Construct the collision state object - CollisionInfo info; - info.GameObject = GameObject(OWNER); - - // Call all of the script's functions - auto entityScripts = scripts[OWNER]; - if (entityScripts->Count > 0) + auto entities = + { + std::make_pair(triggerInfo.GetEntityA(), triggerInfo.GetEntityB()), + std::make_pair(triggerInfo.GetEntityB(), triggerInfo.GetEntityA()) + }; + for (auto entity : entities) { - for each (Script ^ script in entityScripts) + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(entity.first) || !scripts.ContainsKey(entity.first)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(entity.second); + + // Call all of the script's functions + auto entityScripts = scripts[entity.first]; + if (entityScripts->Count > 0) { - switch (triggerInfo.GetCollisionState()) + for each (Script ^ script in entityScripts) { - case SHCollisionEvent::State::ENTER: - script->OnTriggerEnter(info); - break; - case SHCollisionEvent::State::STAY: - script->OnTriggerStay(info); - break; - case SHCollisionEvent::State::EXIT: - script->OnTriggerExit(info); - break; + switch (triggerInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnTriggerEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnTriggerStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnTriggerExit(info); + break; + } } } } diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs index add5971d..5fe813b7 100644 --- a/TempScriptsFolder/PhysicsTest.cs +++ b/TempScriptsFolder/PhysicsTest.cs @@ -40,4 +40,29 @@ public class PhysicsTest : Script } Debug.Log($"{Transform.LocalPosition.y}"); } + + protected override void onCollisionEnter(CollisionInfo info) + { + Debug.Log($"Collision Enter: {info.GameObject.Name}"); + } + protected override void onCollisionStay(CollisionInfo info) + { + Debug.Log($"Collision Stay: {info.GameObject.Name}"); + } + protected override void onCollisionExit(CollisionInfo info) + { + Debug.Log($"Collision Exit: {info.GameObject.Name}"); + } + protected override void onTriggerEnter(CollisionInfo info) + { + Debug.Log($"Trigger Enter: {info.GameObject.Name}"); + } + protected override void onTriggerStay(CollisionInfo info) + { + Debug.Log($"Trigger Stay: {info.GameObject.Name}"); + } + protected override void onTriggerExit(CollisionInfo info) + { + Debug.Log($"Trigger Exit: {info.GameObject.Name}"); + } } \ No newline at end of file From 4e97392098540f4eb19ea40d8025c6e11274cf98 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 00:27:45 +0800 Subject: [PATCH 595/793] Added support for multiplying doubles with Vectors in C# --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 3 ++- SHADE_Managed/src/Math/Vector2.cxx | 16 ++++++++++++++++ SHADE_Managed/src/Math/Vector2.hxx | 16 ++++++++++++++++ SHADE_Managed/src/Math/Vector3.cxx | 18 ++++++++++++++++++ SHADE_Managed/src/Math/Vector3.hxx | 16 ++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 0aee9706..e14b8baf 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -352,6 +352,7 @@ namespace SHADE // Interpolate transforms for rendering if (physicsSystem->worldUpdated) + { physicsSystem->SyncTransforms(); // Collision & Trigger messages @@ -366,7 +367,7 @@ namespace SHADE SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); } - system->ClearInvalidCollisions(); + physicsSystem->ClearInvalidCollisions(); } } diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index b110d4f8..42080d60 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -236,6 +236,22 @@ namespace SHADE lhs.y * rhs.y ); } + Vector2 Vector2::operator*(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x * static_cast(rhs), + lhs.y * static_cast(rhs) + ); + } + Vector2 Vector2::operator/(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x / static_cast(rhs), + lhs.y / static_cast(rhs) + ); + } Vector2 Vector2::operator*(Vector2 lhs, float rhs) { return Vector2 diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index 94b1989f..4877696b 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -361,6 +361,22 @@ namespace SHADE /// Vector2 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. + static Vector2 operator*(Vector2 lhs, double rhs); + /// + /// Calculates the division of a Vector2 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector2 to divide with. + /// The result of the scalar division. + static Vector2 operator/(Vector2 lhs, double rhs); + /// + /// Calculates the multiplication of a Vector2 with a scalar value and returns + /// the result. + /// + /// Vector2 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. static Vector2 operator*(Vector2 lhs, float rhs); /// /// Calculates the division of a Vector2 with a scalar value and returns diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index adbb4d3a..83adbb38 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -237,6 +237,24 @@ namespace SHADE lhs.z * rhs.z ); } + Vector3 Vector3::operator*(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x * static_cast(rhs), + lhs.y * static_cast(rhs), + lhs.z * static_cast(rhs) + ); + } + Vector3 Vector3::operator/(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x / static_cast(rhs), + lhs.y / static_cast(rhs), + lhs.z / static_cast(rhs) + ); + } Vector3 Vector3::operator*(Vector3 lhs, float rhs) { return Vector3 diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index 70cff88f..4cdf653e 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -375,6 +375,22 @@ namespace SHADE /// Vector3 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. + static Vector3 operator*(Vector3 lhs, double rhs); + /// + /// Calculates the division of a Vector3 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector3 to divide with. + /// The result of the scalar division. + static Vector3 operator/(Vector3 lhs, double rhs); + /// + /// Calculates the multiplication of a Vector3 with a scalar value and returns + /// the result. + /// + /// Vector3 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. static Vector3 operator*(Vector3 lhs, float rhs); /// /// Calculates the division of a Vector3 with a scalar value and returns From c08afcb804ff4d5d1e8586fb24f6d3ea39e050e6 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 00:37:09 +0800 Subject: [PATCH 596/793] Fixed incorrect FixedUpdate() execution and added Time.FixedDeltaTime --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 10 +++++++++- .../src/Physics/SHPhysicsSystemInterface.cpp | 12 ++++++++++++ SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h | 1 + SHADE_Managed/src/Engine/Time.cxx | 7 +++++++ SHADE_Managed/src/Engine/Time.hxx | 13 ++++++++----- TempScriptsFolder/PhysicsTest.cs | 5 +++++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index e14b8baf..91fc0674 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -327,6 +327,11 @@ namespace SHADE void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept { auto* physicsSystem = reinterpret_cast(GetSystem()); + auto scriptSys = SHSystemManager::GetSystem(); + if (!scriptSys) + { + SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + } fixedTimeStep = 1.0 / physicsSystem->fixedDT; accumulatedTime += dt; @@ -334,6 +339,10 @@ namespace SHADE int count = 0; while (accumulatedTime > fixedTimeStep) { + if (scriptSys) + { + scriptSys->ExecuteFixedUpdates(); + } physicsSystem->world->update(static_cast(fixedTimeStep)); accumulatedTime -= fixedTimeStep; @@ -359,7 +368,6 @@ namespace SHADE auto scriptSys = SHSystemManager::GetSystem(); if (scriptSys) { - scriptSys->ExecuteFixedUpdates(); scriptSys->ExecuteCollisionFunctions(); } else diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp index 5343b9f1..4b292340 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp @@ -50,4 +50,16 @@ namespace SHADE SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get trigger events. Empty vector returned instead."); return emptyVec; } + + double SHPhysicsSystemInterface::GetFixedDT() noexcept + { + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetFixedDT(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get fixed delta time. 0.0 returned instead."); + return 0.0; + } } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h index b1960a6f..da6a0433 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h @@ -41,5 +41,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ [[nodiscard]] static const std::vector& GetCollisionInfo() noexcept; [[nodiscard]] static const std::vector& GetTriggerInfo() noexcept; + [[nodiscard]] static double GetFixedDT() noexcept; }; } diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx index ff0628e7..dfdec367 100644 --- a/SHADE_Managed/src/Engine/Time.cxx +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -14,6 +14,9 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ // Precompiled Headers #include "SHpch.h" +// External Dependencies +#include "FRC/SHFramerateController.h" +#include "Physics/SHPhysicsSystemInterface.h" // Primary Header #include "Time.hxx" @@ -26,4 +29,8 @@ namespace SHADE { return SHFrameRateController::GetRawDeltaTime(); } + double Time::FixedDeltaTime::get() + { + return SHPhysicsSystemInterface::GetFixedDT(); + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/Time.hxx b/SHADE_Managed/src/Engine/Time.hxx index 969eea03..774d85f0 100644 --- a/SHADE_Managed/src/Engine/Time.hxx +++ b/SHADE_Managed/src/Engine/Time.hxx @@ -14,8 +14,6 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once -#include "FRC/SHFramerateController.h" - namespace SHADE { /// @@ -29,13 +27,18 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /// /// Time taken to process the previous frame. - /// Note, is affected by TimeScale. Use UnscaledDeltaTime if you wish to retrieve - /// real world time. This is also affected by MaxDeltaTime clamping that - /// UnscaledDeltaTime is subject to. /// static property double DeltaTime { double get(); } + /// + /// Time taken for Physics simulations. You should use this for operations + /// within Script.FixedUpdate() + /// + static property double FixedDeltaTime + { + double get(); + } }; } \ No newline at end of file diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs index 5fe813b7..c2f707cf 100644 --- a/TempScriptsFolder/PhysicsTest.cs +++ b/TempScriptsFolder/PhysicsTest.cs @@ -41,6 +41,11 @@ public class PhysicsTest : Script Debug.Log($"{Transform.LocalPosition.y}"); } + protected override void fixedUpdate() + { + Debug.Log("Fixed Update"); + } + protected override void onCollisionEnter(CollisionInfo info) { Debug.Log($"Collision Enter: {info.GameObject.Name}"); From 220e1a7d8b538221a6d2632db96e789d4c66059f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 1 Nov 2022 00:44:37 +0800 Subject: [PATCH 597/793] Fixed asset creation broken logic loop --- .../src/Assets/Libraries/Loaders/SHTextBasedLoader.h | 4 ++++ SHADE_Engine/src/Assets/SHAssetManager.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h index 80771058..b74c6c94 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h @@ -11,6 +11,10 @@ #pragma once #include "SHAssetLoader.h" +#include "Assets/Asset Types/SHPrefabAsset.h" +#include "Assets/Asset Types/SHSceneAsset.h" +#include "Assets/Asset Types/SHMaterialAsset.h" + namespace SHADE { struct SHTextBasedLoader : SHAssetLoader diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 682eb9ec..d3076e6c 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -151,19 +151,26 @@ namespace SHADE ****************************************************************************/ AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept { + SHAssetData* data = nullptr; std::string newPath{ ASSET_ROOT }; switch (type) { case AssetType::PREFAB: newPath += PREFAB_FOLDER; + auto prefab = new SHPrefabAsset(); + data = prefab; break; case AssetType::SCENE: newPath += SCENE_FOLDER; + auto scene = new SHSceneAsset(); + data = scene; break; case AssetType::MATERIAL: newPath += MATERIAL_FOLDER; + auto material = new SHMaterialAsset(); + data = material; break; default: @@ -189,6 +196,8 @@ namespace SHADE ) }); + assetData.emplace(id, data); + return id; } From a8f5d021d3634fc34f3b6767acdbb9f47e724b7b Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 1 Nov 2022 00:50:57 +0800 Subject: [PATCH 598/793] Switch case initialisation error fix --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index d3076e6c..4897fc42 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -157,20 +157,17 @@ namespace SHADE { case AssetType::PREFAB: newPath += PREFAB_FOLDER; - auto prefab = new SHPrefabAsset(); - data = prefab; + data = new SHPrefabAsset(); break; case AssetType::SCENE: newPath += SCENE_FOLDER; - auto scene = new SHSceneAsset(); - data = scene; + data = new SHSceneAsset(); break; case AssetType::MATERIAL: newPath += MATERIAL_FOLDER; - auto material = new SHMaterialAsset(); - data = material; + data = new SHMaterialAsset(); break; default: From b35ca86ae91b2f0bd3212e46dafcca331b1e72fe Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 00:53:15 +0800 Subject: [PATCH 599/793] BatcherDispatcher should now account for mesh changes properly --- .../src/Graphics/MiddleEnd/Batching/SHBatch.cpp | 11 +++++------ .../src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp | 6 +++--- .../Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 1bda7c90..22d1875b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -74,11 +74,12 @@ namespace SHADE void SHBatch::Remove(const SHRenderable* renderable) { - // Check if we have a SubBatch with the same mesh yet + // Check if we have a SubBatch with the existing mesh yet (if changed, we use the old mesh) + Handle prevSubBatchMesh = renderable->HasMeshChanged() ? renderable->GetPrevMesh() : renderable->GetMesh(); auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) - { - return batch.Mesh == renderable->GetMesh(); - }); + { + return batch.Mesh == prevSubBatchMesh; + }); // Attempt to remove if it exists if (subBatch == subBatches.end()) @@ -88,9 +89,7 @@ namespace SHADE // Check if other renderables in subBatches contain the same material instance bool matUnused = true; - Handle matToCheck = renderable->HasMaterialChanged() ? renderable->GetPrevMaterial() : renderable->GetMaterial(); - for (const auto& sb : subBatches) { // Check material usage diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 434e7163..df389879 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -37,9 +37,9 @@ namespace SHADE // Check if we have a batch with the same pipeline first auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) - { - return batch.GetPipeline() == PIPELINE; - }); + { + return batch.GetPipeline() == PIPELINE; + }); // Create one if not found diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 97380fa3..16e2b1e8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -709,8 +709,8 @@ namespace SHADE if (!renderable.HasChanged()) continue; - // Remove from old material's SuperBatch - Handle prevMaterial = renderable.GetPrevMaterial(); + // Remove from the SuperBatch it is previously in (prevMat if mat has changed) + Handle prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial(); if (prevMaterial) { Handle oldSuperBatch = prevMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); From dc7d5a7ec30a2379f2af47316aaa0f731b4f8123 Mon Sep 17 00:00:00 2001 From: Glence Date: Tue, 1 Nov 2022 01:31:13 +0800 Subject: [PATCH 600/793] updates to the player controller --- TempScriptsFolder/CameraFix.cs | 24 ++++++ TempScriptsFolder/PlayerController.cs | 117 +++++++++++++++----------- 2 files changed, 92 insertions(+), 49 deletions(-) create mode 100644 TempScriptsFolder/CameraFix.cs diff --git a/TempScriptsFolder/CameraFix.cs b/TempScriptsFolder/CameraFix.cs new file mode 100644 index 00000000..5347a72f --- /dev/null +++ b/TempScriptsFolder/CameraFix.cs @@ -0,0 +1,24 @@ +using SHADE; +using System; + +public class CameraFix : Script +{ + public CameraFix(GameObject gameObj) : base(gameObj) { } + + private Transform tranform; + public Vector3 pos = Vector3.Zero; + public Vector3 rot = Vector3.Zero; + protected override void awake() + { + tranform = GetComponent(); + if (tranform == null) + Debug.LogError("tranform is NULL!"); + else + { + tranform.LocalPosition = pos; + tranform.LocalEulerAngles = rot; + } + + + } +} diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 29ac9007..4e28213d 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -18,20 +18,23 @@ public class PlayerController : Script } private RigidBody rb; - private float xAxisMove; - private float zAxisMove; - private RaccoonStates currentState = RaccoonStates.IDILE; + private Transform tranform; + public float xAxisMove; + public float zAxisMove; + private bool isMoveKeyPress = false; + public RaccoonStates currentState = RaccoonStates.IDILE; public float maxMoveVel = 2.0f; public float moveForce = 200.0f; public float sprintMultiplier = 1.5f; + public float rotationFactorPerFrame = 1.0f; public float jumpForce = 500.0f; - public float initialJumpForce = 100.0f; +/* public float initialJumpForce = 100.0f; public float maxJumpForce = 500.0f; public float maxJumpTime = 500.0f; private bool isJumping = false; - private bool isGrounded = false; + private bool isGrounded = false;*/ public PlayerController(GameObject gameObj) : base(gameObj) { } @@ -39,30 +42,38 @@ public class PlayerController : Script { rb = GetComponent(); if (rb == null) - { Debug.LogError("RigidBody is NULL!"); - } + + tranform = GetComponent(); + if(tranform == null) + Debug.LogError("tranform is NULL!"); + + tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); + tranform.LocalRotation = Quaternion.Euler(0.0f,0.0f,0.0f); RaccoonStates currentState = RaccoonStates.IDILE; } protected override void update() { - currentState = RaccoonStates.IDILE; + if (Input.GetKey(Input.KeyCode.G)) + { + tranform.LocalRotation = Quaternion.Euler(0.0f, 0.0f, 0.0f); + tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); + } + MoveKey(); + //Rotation(); Move(); Sprint(); - Jump(); + //Jump(); - if (rb != null && currentState == RaccoonStates.IDILE) - rb.LinearVelocity = new Vector3(0.0f, 0.0f, 0.0f); - Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); + Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } - private void Move() + private void MoveKey() { - if (Input.GetKey(Input.KeyCode.A)) xAxisMove = -1; else if (Input.GetKey(Input.KeyCode.D)) @@ -77,57 +88,47 @@ public class PlayerController : Script else zAxisMove = 0; - if((Input.GetKey(Input.KeyCode.A) || Input.GetKey(Input.KeyCode.D) || Input.GetKey(Input.KeyCode.W) || Input.GetKey(Input.KeyCode.S)) && currentState != RaccoonStates.RUNNING) + isMoveKeyPress = xAxisMove != 0 || zAxisMove != 0; + + if(isMoveKeyPress && currentState != RaccoonStates.RUNNING) currentState = RaccoonStates.WALKING; - if (rb != null && currentState == RaccoonStates.WALKING) + if (!isMoveKeyPress) + currentState = RaccoonStates.IDILE; + } + + private void Move() + { + if (isMoveKeyPress && rb != null) { - if (rb.LinearVelocity.x <= maxMoveVel || rb.LinearVelocity.x >= -maxMoveVel) - rb.AddForce(new Vector3(moveForce * xAxisMove, 0.0f, 0.0f)); - else + rb.AddForce(new Vector3(moveForce * xAxisMove, 0.0f, moveForce * zAxisMove)); + + if (rb.LinearVelocity.x > maxMoveVel || rb.LinearVelocity.x < -maxMoveVel) { Vector3 v = rb.LinearVelocity; - if(v.x >= 0) - v.x = maxMoveVel; - else - v.x = -maxMoveVel; - + v.x = System.Math.Clamp(v.x, -maxMoveVel, maxMoveVel); + rb.LinearVelocity = v; + } + if (rb.LinearVelocity.z > maxMoveVel || rb.LinearVelocity.z < -maxMoveVel) + { + Vector3 v = rb.LinearVelocity; + v.z = System.Math.Clamp(v.z, -maxMoveVel, maxMoveVel); rb.LinearVelocity = v; } - if (rb.LinearVelocity.z <= maxMoveVel || rb.LinearVelocity.z >= -maxMoveVel) - rb.AddForce(new Vector3(0.0f, 0.0f, moveForce * zAxisMove )); - else - { - Vector3 v = rb.LinearVelocity; - if (v.z >= 0) - v.z = maxMoveVel; - else - v.z = -maxMoveVel; - rb.LinearVelocity = v; - } + } } private void Sprint() { - //left shift not working for now and chang eto getkey down - if (Input.GetKey(Input.KeyCode.RightShift)) + if (Input.GetKeyDown(Input.KeyCode.LeftShift) && currentState == RaccoonStates.WALKING && isMoveKeyPress) { - if (currentState == RaccoonStates.WALKING && rb != null) - { - currentState = RaccoonStates.RUNNING; - rb.LinearVelocity *= sprintMultiplier; - } + currentState = RaccoonStates.RUNNING; } - - if (Input.GetKeyUp(Input.KeyCode.RightShift)) + else if (Input.GetKeyUp(Input.KeyCode.LeftShift) && currentState == RaccoonStates.RUNNING && isMoveKeyPress) { - if (currentState == RaccoonStates.RUNNING && rb != null) - { - currentState = RaccoonStates.WALKING; - rb.LinearVelocity /= sprintMultiplier; - } + currentState = RaccoonStates.WALKING; } } @@ -147,6 +148,24 @@ public class PlayerController : Script } + private void Rotation() + { + Vector3 poitionToLookAt; + poitionToLookAt.x = xAxisMove; + poitionToLookAt.y = 0.0f; + poitionToLookAt.z = zAxisMove; + + if (tranform != null) + { + Quaternion currentRotation = tranform.LocalRotation; + if (currentState == RaccoonStates.WALKING || currentState == RaccoonStates.RUNNING) + { + Quaternion targetRotation = Quaternion.LookRotation(poitionToLookAt, new Vector3(0.0f, 1.0f, 0.0f)); + tranform.LocalRotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * (float)Time.DeltaTime); + } + } + } + } From 54a36e147600c5847f66af73768cf2e9ae85abaa Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 1 Nov 2022 02:32:14 +0800 Subject: [PATCH 601/793] SSAO WIP --- Assets/Shaders/DeferredComposite_CS.glsl | 3 ++- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4801 -> 4817 bytes Assets/Shaders/SSAO_CS.glsl | 16 +++++++++------- Assets/Shaders/SSAO_CS.shshaderb | Bin 6313 -> 6433 bytes 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index 4607363b..0d29d8e4 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -55,7 +55,7 @@ void main() vec3 positionView = imageLoad (positions, globalThread).rgb; // normal of fragment - vec3 normalView = imageLoad(normals, globalThread).rgb; + vec3 normalView = -imageLoad(normals, globalThread).rgb; vec3 fragColor = vec3 (0.0f); @@ -79,6 +79,7 @@ void main() } // store result into result image + //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalView, 1.0f)); //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgb, 1.0f)); diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index d691c168b25040b5ef44acb3432711e65747ca18..cdf5baea792c275a0cb6a28f6bcb400ef788782f 100644 GIT binary patch literal 4817 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 G0RIKoSZT`u literal 6313 zcmZvf36zy(8OJ{cW@J-CQ89?MO)*qLQ#4s^ppY3^jh69p=Q3QKxp$g-K?O=k2{R)t zt!Q&XTWGbiz07P6Y@vOzY_n`%O*^M^`u)E9KA!K)={@H;&;R*9>-&E1_uZMc;VD_Z zMz_s5Cd)=;?=|3QR{n zQ(u35bE$vb)}czNw-q}!pTDoar!#l0tZlECOU-J%wsLu1t0S9=-d?R-wRW&nu5{NM zt-SVZ8ep*As2VJ3kJ-i8)%Br)Qa}8dYz}-aHyhaP*=f05ZB&+52Y`9*GlE-Jxw^S+ z=<&TQfN$m#uiwy$9h03Ou~63Q!X7Hsdg}ulDrK-eH=&!QT3@Bs%wyy?SA#KTbXJ91 zw{&&x-wCdlIqe1;0_)#}HpU+N(2df-V1GIUxf|iuu3gf#ywofK^V=ckYQ?tpdy{sf zRF61w55U#8Y-v=QtwWU?hFew|s0@`_ksVZ&bH!PUy@kVQ@9*}(OG?cG=Y8{e$wr(v zcyOqGg`9m3VwVej2)SeU)WfE9EP*tdn!~Zuy+OgJI7C+gIE7 zVFKd)&{h}YwT*Y__ihyZ+WOs_e(#0;_JUpXzY@L!@ts>iRGhzcT%9~eInTg)K8s>K z?U={>VQg3AuOMd_+j*QJVziBkzQbTSJ~WAI<+WiK^R&(DMxvJ7$UNsQ=4qREGZJ}n zk>@^#v90Ak529y}uw$S4AI0Z$Iu$vQEc0ej!P(UUM6k2VM}P09%lH{+%ohW$xOW$J&icuQO{D}bgJEmmb1pI(C$ypGtu^) zj6Ls9*!-CBHZW_E`ELX`lYVEuJz<~ObWUP8+43Rgy&c;g!-##g4}8u^c4`8|pFe}mn}8BF6H_nkFH z@wuMM7s7dsaXIUwFzsmfQe!;e$zs1FR zn?~5>g6(~(7Hsd6zr&I5ecn~Dt-r5e`|J-CZ1WF~u#YDD*__7&@NtOWn623MIX-b0 zaeAJWwy~b~$%x;RE+YMwoRT@(Px@}C7Z zM!rsu`RMZydFy!>wU-d@UAYi3e<5Pcj$F5R^Zia;l(@)Qgza3#oWhyGQFXBGA(U}N^C{MBGN<04e9Y4emJ7QAcD{+6qw{Y; ztl^z8R=;)1Xnm1)1-Mw}N^E1o-w(F#rDO_+qfE^&A9 z9QJ}=k+|#8{~<>EWr(${CAOAx-+(x0)P6PC+DquPAN?BSCd7I588-ucGomlvzgrR~ z@ABL|=UdV{^;)pKjPnfkq2;XSoqQcKwP4>0HYVPW*MsG5L-wSaZvdO8FKWs~%{PIq z5qILvU^!QCZvo2{@5x&e*SaUIZ_nG{%r{>DM#P>6(E9w=-idw(auB%#agN*3??mL| z?A`@7&$IC?-;Ed}A2sEyxdZ(k#P~yqHO8agi^xaK_koRx=kb29oZ^b-5%>55aMlR% zyMHS72N84iNB_IP)?SFjxqS$1tjn2=k&B!UgUwlnM9xRR<~WNv#>hp^N5SUYjYQ7J zz~=ZY%rQnT_Wg0NIkE3gfaMfd>^tt!C*h3o9>rOFD%o<%o^%$U1{<$GX8a7;e#Nu+ zEVi*OXEa7Ga_#|}Q#^~$VVe_YVT@el+zU3Rcov_>HYd*FUa*{JaSZxCWE|pe`h4^k z5*KInMQm&Occ%U?A##e#S>m_)%V7Q1h?%|u9=Z3g!Wrvw@5abQ&ey;r_x^P_b7Jqt z$T{Z(^burQvVA}9M~ZWQBXROB>(tU2d=soc{^tD_*n0ADr@jrAk8?Z>mW!Fc1D=X_ z_Ri${_FY6i?C*ii^S4_6_Yq^{{jHY!0pe_95dHDD)ephmGyN0!JKWeGA;zAKtU)#+ z#(Abk(fXtJkHPkid4B@lhZN`iDYpEcG~ds_at|Q)!0ko<9I=+ZLuuv*!SeQZj_COd zuyc4nocEW=gNS^@{0h7iiJrd(%NgrF^vU_Vwj1qlk=pzY^ly+|$ZmRQ|2AOW^u Date: Tue, 1 Nov 2022 02:40:48 +0800 Subject: [PATCH 602/793] Simplified RigidBody Interface --- .../Components/SHRigidBodyComponent.cpp | 317 +++++++++++++----- .../Physics/Components/SHRigidBodyComponent.h | 31 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 94 ------ SHADE_Engine/src/Physics/SHPhysicsObject.h | 1 - SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 2 - 5 files changed, 245 insertions(+), 200 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index c1969557..369d26a5 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -18,6 +18,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/SHMathHelpers.h" #include "Physics/SHPhysicsSystem.h" namespace SHADE @@ -28,21 +29,9 @@ namespace SHADE SHRigidBodyComponent::SHRigidBodyComponent() noexcept : type { Type::DYNAMIC } - , flags { 0 } - , dirtyFlags { 0 } , interpolate { true } , rp3dBody { nullptr } - , mass { 1.0f } - , drag { 0.01f } - , angularDrag { 0.01f } - { - // Set default flags: Gravity & Sleeping enabled - flags |= 1U << 0; - flags |= 1U << 1; - - // Set all dirty flags to true - dirtyFlags = 1023; - } + {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ @@ -50,12 +39,24 @@ namespace SHADE bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { - return flags & (1U << 0); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isGravityEnabled(); } bool SHRigidBodyComponent::IsAllowedToSleep() const noexcept { - return flags & (1U << 1); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isAllowedToSleep(); } bool SHRigidBodyComponent::IsInterpolating() const noexcept @@ -70,67 +71,151 @@ namespace SHADE float SHRigidBodyComponent::GetMass() const noexcept { - return mass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getMass(); } float SHRigidBodyComponent::GetDrag() const noexcept { - return drag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getLinearDamping(); } float SHRigidBodyComponent::GetAngularDrag() const noexcept { - return angularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getAngularDamping(); } bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { - return flags & (1U << 2); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { - return flags & (1U << 3); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { - return flags & (1U << 4); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.z, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { - return flags & (1U << 5); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { - return flags & (1U << 6); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { - return flags & (1U << 7); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.z, 0.0f); } - const SHVec3& SHRigidBodyComponent::GetForce() const noexcept + SHVec3 SHRigidBodyComponent::GetForce() const noexcept { - return force; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->getForce(); } - const SHVec3& SHRigidBodyComponent::GetTorque() const noexcept + SHVec3 SHRigidBodyComponent::GetTorque() const noexcept { - return torque; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getTorque(); } - const SHVec3& SHRigidBodyComponent::GetLinearVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept { - return linearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getLinearVelocity(); } - const SHVec3& SHRigidBodyComponent::GetAngularVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept { - return angularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getAngularVelocity(); } const SHVec3& SHRigidBodyComponent::GetPosition() const noexcept @@ -157,8 +242,15 @@ namespace SHADE if (type == newType) return; - dirtyFlags |= 1U << 4; type = newType; + + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setType(static_cast(type)); } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept @@ -171,8 +263,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << FLAG_POS; - enableGravity ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->enableGravity(enableGravity); } void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept @@ -185,92 +282,127 @@ namespace SHADE return; } - dirtyFlags |= 1U << 1; - isAllowedToSleep ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setIsAllowedToSleep(isAllowedToSleep); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { - static constexpr int FLAG_POS = 2; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.x = freezePositionX ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { - static constexpr int FLAG_POS = 3; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.y = freezePositionY ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { - static constexpr int FLAG_POS = 4; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.z = freezePositionZ ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { - static constexpr int FLAG_POS = 5; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.x = freezeRotationX ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { - static constexpr int FLAG_POS = 6; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.y = freezeRotationY ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { - static constexpr int FLAG_POS = 7; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.z = freezeRotationZ ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept @@ -283,11 +415,16 @@ namespace SHADE if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) - return; + return; } - dirtyFlags |= 1U << 5; - mass = newMass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setMass(newMass); } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept @@ -298,8 +435,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 6; - drag = newDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newDrag); } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept @@ -310,8 +452,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 7; - angularDrag = newAngularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newAngularDrag); } void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept @@ -322,8 +469,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 8; - linearVelocity = newLinearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearVelocity(newLinearVelocity); } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept @@ -334,8 +486,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 9; - angularVelocity = newAngularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setAngularVelocity(newAngularVelocity); } /*-----------------------------------------------------------------------------------*/ @@ -346,7 +503,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -357,7 +514,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -368,7 +525,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -379,7 +536,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -390,7 +547,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -401,7 +558,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -412,7 +569,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -423,7 +580,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 3c5dd4f9..ba7d2dd9 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -94,10 +94,10 @@ namespace SHADE [[nodiscard]] bool GetFreezeRotationY () const noexcept; [[nodiscard]] bool GetFreezeRotationZ () const noexcept; - [[nodiscard]] const SHVec3& GetForce () const noexcept; - [[nodiscard]] const SHVec3& GetTorque () const noexcept; - [[nodiscard]] const SHVec3& GetLinearVelocity () const noexcept; - [[nodiscard]] const SHVec3& GetAngularVelocity () const noexcept; + [[nodiscard]] SHVec3 GetForce () const noexcept; + [[nodiscard]] SHVec3 GetTorque () const noexcept; + [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; + [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; [[nodiscard]] const SHVec3& GetPosition () const noexcept; [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; @@ -149,28 +149,13 @@ namespace SHADE static constexpr size_t NUM_FLAGS = 8; static constexpr size_t NUM_DIRTY_FLAGS = 16; - Type type; - - // rX rY rZ pX pY pZ slp g - uint8_t flags; - // 0 0 0 0 0 0 aV lV aD d m t ag lc slp g - uint16_t dirtyFlags; - bool interpolate; + Type type; + bool interpolate; reactphysics3d::RigidBody* rp3dBody; - float mass; - float drag; - float angularDrag; - - SHVec3 force; - SHVec3 linearVelocity; - - SHVec3 torque; - SHVec3 angularVelocity; - - SHVec3 position; - SHQuaternion orientation; + SHVec3 position; + SHQuaternion orientation; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 8b556409..c7c9f631 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -168,100 +168,6 @@ namespace SHADE rp3dBody->removeCollider(collider); } - void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent* rb) const noexcept - { - SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") - - auto* rigidBody = reinterpret_cast(rp3dBody); - if (rb->dirtyFlags != 0) - { - const uint16_t RB_FLAGS = rb->dirtyFlags; - for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) - { - // Check if current dirty flag has been set to true - if (RB_FLAGS & 1U << i) - { - switch (i) - { - case 0: // Gravity - { - rigidBody->enableGravity(rb->IsGravityEnabled()); - break; - } - case 1: // Sleeping - { - rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); - break; - } - case 2: // Linear Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 2 ? 0.0f : 1.0f, - rb->flags & 1U << 3 ? 0.0f : 1.0f, - rb->flags & 1U << 4 ? 0.0f : 1.0f - }; - - - rigidBody->setLinearLockAxisFactor(CONSTRAINTS); - break; - } - case 3: // Angular Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 5 ? 0.0f : 1.0f, - rb->flags & 1U << 6 ? 0.0f : 1.0f, - rb->flags & 1U << 7 ? 0.0f : 1.0f - }; - - rigidBody->setAngularLockAxisFactor(CONSTRAINTS); - break; - } - case 4: // Type - { - rigidBody->setType(static_cast(rb->GetType())); - break; - } - case 5: // Mass - { - rigidBody->setMass(rb->GetMass()); - break; - } - case 6: // Drag - { - rigidBody->setLinearDamping(rb->GetDrag()); - break; - } - case 7: // Angular Drag - { - rigidBody->setAngularDamping(rb->GetAngularDrag()); - break; - } - case 8: // Linear Velocity - { - rigidBody->setLinearVelocity(rb->GetLinearVelocity()); - break; - } - case 9: // Angular Velocity - { - rigidBody->setAngularVelocity(rb->GetAngularVelocity()); - break; - } - default: break; - } - } - } - - rb->dirtyFlags = 0; - } - else - { - rb->linearVelocity = rigidBody->getLinearVelocity(); - rb->angularVelocity = rigidBody->getAngularVelocity(); - } - } - void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { int index = 0; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 67e5ec64..64caacdb 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -72,7 +72,6 @@ namespace SHADE int AddCollider (SHCollider* collider); void RemoveCollider (int index); - void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; void SyncColliders (SHColliderComponent* c) const noexcept; private: diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 053cda68..de63f029 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -305,8 +305,6 @@ namespace SHADE if (!COMPONENT_ACTIVE) continue; - - physicsObject.SyncRigidBody(rigidBodyComponent); } // Sync colliders From da690e4395a40ad7b53a120efaa1716dcdfa0d0e Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 02:40:48 +0800 Subject: [PATCH 603/793] Simplified RigidBody Implementation --- .../Components/SHRigidBodyComponent.cpp | 317 +++++++++++++----- .../Physics/Components/SHRigidBodyComponent.h | 31 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 94 ------ SHADE_Engine/src/Physics/SHPhysicsObject.h | 1 - SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 2 - 5 files changed, 245 insertions(+), 200 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index c1969557..369d26a5 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -18,6 +18,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/SHMathHelpers.h" #include "Physics/SHPhysicsSystem.h" namespace SHADE @@ -28,21 +29,9 @@ namespace SHADE SHRigidBodyComponent::SHRigidBodyComponent() noexcept : type { Type::DYNAMIC } - , flags { 0 } - , dirtyFlags { 0 } , interpolate { true } , rp3dBody { nullptr } - , mass { 1.0f } - , drag { 0.01f } - , angularDrag { 0.01f } - { - // Set default flags: Gravity & Sleeping enabled - flags |= 1U << 0; - flags |= 1U << 1; - - // Set all dirty flags to true - dirtyFlags = 1023; - } + {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ @@ -50,12 +39,24 @@ namespace SHADE bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { - return flags & (1U << 0); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isGravityEnabled(); } bool SHRigidBodyComponent::IsAllowedToSleep() const noexcept { - return flags & (1U << 1); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isAllowedToSleep(); } bool SHRigidBodyComponent::IsInterpolating() const noexcept @@ -70,67 +71,151 @@ namespace SHADE float SHRigidBodyComponent::GetMass() const noexcept { - return mass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getMass(); } float SHRigidBodyComponent::GetDrag() const noexcept { - return drag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getLinearDamping(); } float SHRigidBodyComponent::GetAngularDrag() const noexcept { - return angularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getAngularDamping(); } bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { - return flags & (1U << 2); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { - return flags & (1U << 3); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { - return flags & (1U << 4); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.z, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { - return flags & (1U << 5); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { - return flags & (1U << 6); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { - return flags & (1U << 7); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.z, 0.0f); } - const SHVec3& SHRigidBodyComponent::GetForce() const noexcept + SHVec3 SHRigidBodyComponent::GetForce() const noexcept { - return force; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->getForce(); } - const SHVec3& SHRigidBodyComponent::GetTorque() const noexcept + SHVec3 SHRigidBodyComponent::GetTorque() const noexcept { - return torque; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getTorque(); } - const SHVec3& SHRigidBodyComponent::GetLinearVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept { - return linearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getLinearVelocity(); } - const SHVec3& SHRigidBodyComponent::GetAngularVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept { - return angularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getAngularVelocity(); } const SHVec3& SHRigidBodyComponent::GetPosition() const noexcept @@ -157,8 +242,15 @@ namespace SHADE if (type == newType) return; - dirtyFlags |= 1U << 4; type = newType; + + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setType(static_cast(type)); } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept @@ -171,8 +263,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << FLAG_POS; - enableGravity ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->enableGravity(enableGravity); } void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept @@ -185,92 +282,127 @@ namespace SHADE return; } - dirtyFlags |= 1U << 1; - isAllowedToSleep ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setIsAllowedToSleep(isAllowedToSleep); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { - static constexpr int FLAG_POS = 2; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.x = freezePositionX ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { - static constexpr int FLAG_POS = 3; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.y = freezePositionY ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { - static constexpr int FLAG_POS = 4; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.z = freezePositionZ ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { - static constexpr int FLAG_POS = 5; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.x = freezeRotationX ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { - static constexpr int FLAG_POS = 6; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.y = freezeRotationY ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { - static constexpr int FLAG_POS = 7; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.z = freezeRotationZ ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept @@ -283,11 +415,16 @@ namespace SHADE if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) - return; + return; } - dirtyFlags |= 1U << 5; - mass = newMass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setMass(newMass); } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept @@ -298,8 +435,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 6; - drag = newDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newDrag); } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept @@ -310,8 +452,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 7; - angularDrag = newAngularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newAngularDrag); } void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept @@ -322,8 +469,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 8; - linearVelocity = newLinearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearVelocity(newLinearVelocity); } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept @@ -334,8 +486,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 9; - angularVelocity = newAngularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setAngularVelocity(newAngularVelocity); } /*-----------------------------------------------------------------------------------*/ @@ -346,7 +503,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -357,7 +514,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -368,7 +525,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -379,7 +536,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -390,7 +547,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -401,7 +558,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -412,7 +569,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -423,7 +580,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 3c5dd4f9..ba7d2dd9 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -94,10 +94,10 @@ namespace SHADE [[nodiscard]] bool GetFreezeRotationY () const noexcept; [[nodiscard]] bool GetFreezeRotationZ () const noexcept; - [[nodiscard]] const SHVec3& GetForce () const noexcept; - [[nodiscard]] const SHVec3& GetTorque () const noexcept; - [[nodiscard]] const SHVec3& GetLinearVelocity () const noexcept; - [[nodiscard]] const SHVec3& GetAngularVelocity () const noexcept; + [[nodiscard]] SHVec3 GetForce () const noexcept; + [[nodiscard]] SHVec3 GetTorque () const noexcept; + [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; + [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; [[nodiscard]] const SHVec3& GetPosition () const noexcept; [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; @@ -149,28 +149,13 @@ namespace SHADE static constexpr size_t NUM_FLAGS = 8; static constexpr size_t NUM_DIRTY_FLAGS = 16; - Type type; - - // rX rY rZ pX pY pZ slp g - uint8_t flags; - // 0 0 0 0 0 0 aV lV aD d m t ag lc slp g - uint16_t dirtyFlags; - bool interpolate; + Type type; + bool interpolate; reactphysics3d::RigidBody* rp3dBody; - float mass; - float drag; - float angularDrag; - - SHVec3 force; - SHVec3 linearVelocity; - - SHVec3 torque; - SHVec3 angularVelocity; - - SHVec3 position; - SHQuaternion orientation; + SHVec3 position; + SHQuaternion orientation; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 8b556409..c7c9f631 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -168,100 +168,6 @@ namespace SHADE rp3dBody->removeCollider(collider); } - void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent* rb) const noexcept - { - SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") - - auto* rigidBody = reinterpret_cast(rp3dBody); - if (rb->dirtyFlags != 0) - { - const uint16_t RB_FLAGS = rb->dirtyFlags; - for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) - { - // Check if current dirty flag has been set to true - if (RB_FLAGS & 1U << i) - { - switch (i) - { - case 0: // Gravity - { - rigidBody->enableGravity(rb->IsGravityEnabled()); - break; - } - case 1: // Sleeping - { - rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); - break; - } - case 2: // Linear Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 2 ? 0.0f : 1.0f, - rb->flags & 1U << 3 ? 0.0f : 1.0f, - rb->flags & 1U << 4 ? 0.0f : 1.0f - }; - - - rigidBody->setLinearLockAxisFactor(CONSTRAINTS); - break; - } - case 3: // Angular Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 5 ? 0.0f : 1.0f, - rb->flags & 1U << 6 ? 0.0f : 1.0f, - rb->flags & 1U << 7 ? 0.0f : 1.0f - }; - - rigidBody->setAngularLockAxisFactor(CONSTRAINTS); - break; - } - case 4: // Type - { - rigidBody->setType(static_cast(rb->GetType())); - break; - } - case 5: // Mass - { - rigidBody->setMass(rb->GetMass()); - break; - } - case 6: // Drag - { - rigidBody->setLinearDamping(rb->GetDrag()); - break; - } - case 7: // Angular Drag - { - rigidBody->setAngularDamping(rb->GetAngularDrag()); - break; - } - case 8: // Linear Velocity - { - rigidBody->setLinearVelocity(rb->GetLinearVelocity()); - break; - } - case 9: // Angular Velocity - { - rigidBody->setAngularVelocity(rb->GetAngularVelocity()); - break; - } - default: break; - } - } - } - - rb->dirtyFlags = 0; - } - else - { - rb->linearVelocity = rigidBody->getLinearVelocity(); - rb->angularVelocity = rigidBody->getAngularVelocity(); - } - } - void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { int index = 0; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 67e5ec64..64caacdb 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -72,7 +72,6 @@ namespace SHADE int AddCollider (SHCollider* collider); void RemoveCollider (int index); - void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; void SyncColliders (SHColliderComponent* c) const noexcept; private: diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 053cda68..de63f029 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -305,8 +305,6 @@ namespace SHADE if (!COMPONENT_ACTIVE) continue; - - physicsObject.SyncRigidBody(rigidBodyComponent); } // Sync colliders From 5852c409e6cdb693c034c69a4d06669e33892784 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 1 Nov 2022 11:57:08 +0800 Subject: [PATCH 604/793] SSAO WIP --- Assets/Shaders/DeferredComposite_CS.glsl | 2 +- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4817 -> 4789 bytes Assets/Shaders/SSAO_CS.glsl | 18 +++++++++--------- Assets/Shaders/SSAO_CS.shshaderb | Bin 6433 -> 6189 bytes .../MiddleEnd/PostProcessing/SHSSAO.cpp | 17 +++++++++++++++++ 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index 0d29d8e4..da13b1b4 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -81,6 +81,6 @@ void main() // store result into result image //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalView, 1.0f)); //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgb, 1.0f)); + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgba/*, 1.0f*/)); } \ No newline at end of file diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index cdf5baea792c275a0cb6a28f6bcb400ef788782f..525f3c4ced3b824db7ef716d0d4f39927b2b018e 100644 GIT binary patch delta 300 zcmYj~u@1pt6ot?Kx7DafL}=2%K+}mGF&J&aGk6P&L1Hi{imGR@(0CB9VwX6#X%jd3 za{qJgz2|=iufWy!IMzQvPI n3h$76`p-M&p20qYjTU=EBvUfvMs^nbdc(dYGXFwZ7%=_^8D=Al delta 328 zcmXw!yAA=)44pM4@oMuFf0C#ye=eieBQJjh*Dn z%$b@0Wd3LEUGvOW4q;ek)d38+NaObKnzrEweS2<}&m5;nk#u3hXRZ)C(!nR*v3hyR z4FP7II)^T+Bgv3RpI95Dfp};sYwZZlib&$JpSab+l}d3TZMsSO!QEXu(*Y7FP_D`9 z4^wDtGLI00j@c6JD5BnuwR$=t>h1qMy&b|qiTObEUi+HsV`HAN0J2z8XyHqn7Wo0{ C%O&Cf diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index a0fd0bc8..c035adcc 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -7,7 +7,7 @@ const int ROTATION_KERNEL_H = 4; // can perhaps pass in as push constant. const float RADIUS = 0.5f; -const float BIAS = 0.005f; +const float BIAS = 0.025f; layout(local_size_x = 16, local_size_y = 16) in; layout(set = 4, binding = 0, rgba32f) uniform image2D positions; @@ -43,17 +43,17 @@ void main() // load all the necessary variables vec3 viewSpacePos = imageLoad (positions, globalThread).rgb; vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb); - viewSpaceNormal = -viewSpaceNormal; + //viewSpaceNormal = -viewSpaceNormal; - ivec2 noiseDim = textureSize(noiseTexture, 0); + vec2 noiseDim = vec2 (textureSize(noiseTexture, 0)); vec2 threadUV = (vec2(globalThread) + vec2 (0.5f)) / vec2(size); - vec2 noiseUVMult = vec2 (float(size.x)/float(noiseDim.x), float(size.y) / float(noiseDim.y)); + vec2 noiseUVMult = vec2 ((vec2(size) / noiseDim); noiseUVMult *= threadUV; - vec3 randomVec = texture(noiseTexture, noiseUVMult).rgb * 2.0f - 1.0f; + vec3 randomVec = texture(noiseTexture, noiseUVMult).rgb; // Gram schmidt vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec))); - vec3 bitangent = cross (viewSpaceNormal, tangent); + vec3 bitangent = normalize (cross (tangent, viewSpaceNormal)); // matrix for tangent to view mat3 TBN = mat3(tangent, bitangent, viewSpaceNormal); @@ -75,16 +75,16 @@ void main() // and bring it from [-1, 1] to screen coordinates offsetPos.xyz = ((offsetPos.xyz * 0.5f) + 0.5f); offsetPos.xy *= vec2(size.xy); - //offsetPos.y = size.y - offsetPos.y; float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z; float rangeCheck = smoothstep (0.0f, 1.0f, RADIUS / abs (viewSpacePos.z - sampleDepth)); - occlusion += (sampleDepth >= samplePos.z + BIAS ? 1.0f : 0.0f) * rangeCheck; + occlusion += (sampleDepth <= samplePos.z + BIAS ? 1.0f : 0.0f) * rangeCheck; + //occlusion += (sampleDepth <= samplePos.z + BIAS ? 1.0f : 0.0f); } occlusion = 1.0f - (occlusion / float(NUM_SAMPLES)); // store result into result image - imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), vec4(occlusion.rrr, 0.0f)); + imageStore(outputImage, globalThread, vec4(occlusion.rrr, 1.0f)); } \ No newline at end of file diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb index ba9a3defde1149ae2025d4b22048dda2dd16a008..e0103cd5dc849c1cf72aaf7c901a6e9fd6af7c0c 100644 GIT binary patch literal 6189 zcmZ9Od30S>6^Acrl8y|OsoGjP-~g?KB4ClBBc_$MN$nuw5MGnloJah_rLN^#e&4-kv+l}SYp?U$zdfFP&%N)pojNDW z*Oa!!Q?u--Y({o;_RoUKW@l|MS-zjeJ~Qjg^{$OuH!f?o`j?%3&Y8L%lTC5UZO7u% z0d7ZzE48}(3CMBqagdb@JdhWdD;uhObD>KoSOxjM7C?BliSRa-|Yebt^u zvxw`+<^e_;&6>`V)>u^b-P{-*t_;DqXN%$Mx!OeU$d=@Ktyx`H8wTdFX9TycdUb1T z^zpNt1K-L!-oB&o?Z_?)-|ag#jSaQ(oR`3jR_gtY;T_dJuywbvw<`64YQ6Be41H%U z7=5N>6}W9{Hs?87;6@)4Z*nNG_Hp)Fjytjm_GV>xWGD^7v%CUs>(nbf%@kjs%r=Caew6L%+C7_g?}m2Yz0k|{eej)#@7;R5V*ciFb@3eK zrsTLi^I4ShsYgG?$GjtcJw3#%?IC>ZPoJn8K74EvSH!iUm*dop>p>!y+~hd>Eyt-F zcOw#UauMe_?ZI5m$!EN1k{;*O{unl&(-V>7i85{>Im{_O5g+He0P(CRqgzW(`vUZ7 z>~hLUM9#>0b5755s~cNh#>yE#D;ezL{G@xoT-NuSxu*hU&uUK*|0J-z%SV0hr%V4+*!B0WhkY^FrTsK^?Jj?^=TH?3d?Sp__X}p|4!ZZL#ioiIX=*pUsGC4tg)U=ZzU$ z4z_3c@UMciZ0|~Y^82pcJnCafw-^1L?{&y3WG(C+~sRnqSTM}BAa5OU=3;R~YPBk19;{ZS;#_O6M1e@FA168`@Hd(Net z(|i6HqK{(jb9wI8)5qmm{te@|!!!GiPDh+y=;jaIcfjBIvc9OKpAKF!N%wa-{I&a= z9J=`~nWS%-q+eFjF9%mjy7$fBv&iRt^LIFO^G}p??}opnVK@HJB>hOzFJvBmYmPzu z&J3a(cWmM=VtUR>U0>&Y65=9yOl~_S>Rv&H0Ev zJ9$#YJaQ{!_t=lWzW}Am#i|Mb}3@@;?nMuedym z`Dbz0tpD`HUCgepb-f$%*7ZAeCUOSSkM4Kuti%m)F8g?9;+C^F@bMdUcH+(F-BORa zoC~(^@O>6oZi0NqJ{yrc4~dxb!9KT$xd1G8AjMn=HcsA}-e0+hUkNV9uR@pWN%5<} zE0RPXYtUCA+RS5bYZ1>Ab=QIQlixxv-*;yz?+WfYU^(X>HM_w2YO`nGF}bL<9$cKG zsJ$Wg%lMWSb9yeioPH56XS~mCBjR(5e4D`5xRj^nee6c`k#9r%4T*cxljFh%`1rlC zj_0D z9JSk@-y-?w=Y?Ro&|d_$zgf(|S}#V-;q%c~d*pu!IP&Xfe!p$K8l#jIDMRFgZQ|rz&fPiRleL{2$#Hrd~a z=zlk2jv4IlLgXXoyTSUz^LP(fPH}m@;ylIg<9pG~5#o2>nZ6G(R(sTcKiJ#{k(kj3 z!1}uESs%HG`5@Ssdyt6v5ZD-dF-9M`h`A4J%)Lm&d>Cwuy&I#CT%7wOU}NIk9|g-P zt~htxqmRMqvjT~C`r}ELQzp_ZJ^|KWd-V88u=UEb_!PRnE_>8RE@D0nHl{p_&!8I< zv(QH_Vm=EtraX)L(T#~&=p*MWrm}wynU2JNiO(l4X7vShbNYYqH1-D&ImKl!@f-X_ z@B@fBqNfMJlh6JoIDK87T_3rK`7(I&*}np3jP;DsN6tQHvVRqsm-JKEzlN0i{(9o% zUFNB$8GHk*J^q`16Kp>DxKoG0@-fFlV7ch|TVTIM&fcD8uzwqo5B)n}K+668 z7`@<&nm<98dkDFoKK8Kx6fu{!gQ@4ACEoh>5jB4fwh!-z{r&>cS3Z1x32q@1$>&#K zIek5cHaUOS{EhRs$ldr(_J@&iWH0gRzeXNL9zl%PCRhI5+>IXfe*?Bg%=x!qxkr(B zPQL?tHf_<9oH@LEzekQv`c(EmAjc)$bN>;sMtnQ|lsI`M?%1Ef+FZf?1uW-t4(_js e^Dg%AUV7jEh8VBEcKhw4KYOzu?f)ao3grLsf+*YrV>7xP}qAWBj! zBDE-3$ErmUq&R@Hq9WovTPJWvaTdi90Y&}3_s(|RmE~FMU;E$x*?XUT&OP_Oq-oY; zvica`wCJcT8<$Pare*(WNZItP2_>uBQ?XOBmb%}*ZsWS8)mqQe<)@uu=+W7DO?~bd zVw&L-K!2e;pgsc}i>@}k&h;DdD;-^D@`SiOB+cY9}N`?_dO$RnRuA+EA}C3a=D7@hY2wJHH2Oo_+7fRtx=ued!?7UX8YKV_WB%LahL; z-w-uNBet>U>-4LIO2nCa2(7YnXSGyo9IV<+XsZkTrJ+J2vW1FjjyP|*H&NX?ynAqc zp_bFUb3QZGi1QW?4plBtbDf*3#HxuC$edi)tvRV)Ti@LLFjvj|scFJKRwUp1<#2t!sq=Lhu74a>%^uA^9&0Ui z^Yy)dYR1pR8tc zewQjT)U2oP{dO$I_iUHdy~g^>;nt7yJ`HZa>c%^FCSa^w!fjDM3#bWW+JI0`y(r7QLi8F`Nf&~?Xy0GeUSqwh;jLf>JKKky zL!9ri=k45Fs(H`VtZ^;YGf?x~^nGvRTn;2|e)M<{&MGU-e=E$MoVVv26Zg5!kStIs(Ynl)L_7oF+-iJT=?i*G_z5DU=&*B06 zEE`!B`TxQ@7DW7`aQCreif$U6ZuP@x1K46-3T6;p&mo4p*}eYpey< zQI9&$g1dGHh&s=Pt4E!6aJ9%;4|nZ+&IWw-$mxWu#oAqP>!^37b2$%gPtJKRzT;~4 z;aNWicvj(Wgd4LrP=uPhi9XGkr4{dhB6?I0LUHQxd^&$+0n7B#PjTO;no z+u&-B(B2Ne9^~)I4N0^AuJrAB2i$z)o!V2#Px_W|{&`F^-D@jN~NR}+qS9&wL9h-Qs|-+iCM zhk&`x$NC?JTe}s+xqSp~tizs-QHz|9!p-Rbk@GRQIrd_XF=~#*S$rC9{GA|rybJDntsr{*4BS|U zJsP7HIiH1_lRt~k;hSTB<`|kOnb_%7V}_#66raOQ+A!PQ;gK4Q&Z!|lWS zVZXlt#;QlmZ{eeLG-7@SS2NaqIH%_C+Lc&;i?rsqV1EzxfDzWv|3lL5$C~e)TK;!) zFMh25N4RUmIsXZ+_5g_I^k=wxb1r&Pvxax?FJM~okHh{I%mDGf-rtg@?idH+f4#rM zosWJVgxgPiXZ`_K3&eeV2+cW1Xb;2HtRLDVNo&H!@6tcv<{R(4&#cH^+=u-*|0q?? G0RIKoSZT`u diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp index b145902f..2bf32fd8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp @@ -19,6 +19,23 @@ namespace SHADE // generate samples for (uint32_t i = 0; i < NUM_SAMPLES; ++i) { + //SHVec3 temp + //{ + // distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + // distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + // distrib(generator), // 0.0f - 1.0f so that sample space is a hemisphere + //}; + + //temp = SHVec3::Normalise(temp); + //temp *= distrib(generator); + + //// This makes sure that most points are closer to fragment's position + //float scale = 1.0f / static_cast(NUM_SAMPLES); + //scale = std::lerp(0.1f, 1.0f, scale * scale); + //temp *= scale; + //samples[i] = SHVec4 (temp.x, temp.y, temp.z, 0.0f); + + samples[i] = SHVec4 { distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f From b0054d62c6b7450860e5b453539f968aeb1ed45c Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Tue, 1 Nov 2022 12:09:50 +0800 Subject: [PATCH 605/793] Create AIPrototype.cs --- TempScriptsFolder/AIPrototype.cs | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 TempScriptsFolder/AIPrototype.cs diff --git a/TempScriptsFolder/AIPrototype.cs b/TempScriptsFolder/AIPrototype.cs new file mode 100644 index 00000000..c7240806 --- /dev/null +++ b/TempScriptsFolder/AIPrototype.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using SHADE; + +public class AIPrototype : Script +{ + //This object's relevant components + private Transform transform; + + [SerializeField] + [Tooltip("The list of waypoints that the object will move around on")] + private Vector3[] waypoints; + + [SerializeField] + [Tooltip("How fast the object moves about waypoints")] + private float moveSpeed; + + //To cycle depending on the length of waypoints + private int currentTargetWaypointIndex; + + public AIPrototype(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + transform = GetComponent(); + if (transform == null) + { + Debug.LogError("Transform is NULL!"); + } + + currentTargetWaypointIndex = 0; + } + + protected override void update() + { + //Head towards the next target + transform.GlobalPosition += (waypoints[currentTargetWaypointIndex] - transform.GlobalPosition) * moveSpeed * (float)Time.DeltaTime; + + //Cycle to next waypoint if near enough + if ((waypoints[currentTargetWaypointIndex] - transform.GlobalPosition).GetSqrMagnitude() < 1.0f) + { + ++currentTargetWaypointIndex; + if (currentTargetWaypointIndex == waypoints.Length) + { + currentTargetWaypointIndex = 0; //Recycle + } + } + } +} \ No newline at end of file From 53fc1fce953f58766116d2ffcb52fdda01aa32dc Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 1 Nov 2022 12:10:15 +0800 Subject: [PATCH 606/793] WIP --- Assets/Shaders/SSAO_CS.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index c035adcc..2f44763c 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -47,7 +47,7 @@ void main() vec2 noiseDim = vec2 (textureSize(noiseTexture, 0)); vec2 threadUV = (vec2(globalThread) + vec2 (0.5f)) / vec2(size); - vec2 noiseUVMult = vec2 ((vec2(size) / noiseDim); + vec2 noiseUVMult = vec2 (vec2(size) / noiseDim); noiseUVMult *= threadUV; vec3 randomVec = texture(noiseTexture, noiseUVMult).rgb; From 78545889da8ee22fd71924b002e927448de81bfa Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 1 Nov 2022 12:47:50 +0800 Subject: [PATCH 607/793] SHSHSHAO --- Assets/Shaders/SSAO_CS.glsl | 5 ++++- Assets/Shaders/SSAO_CS.shshaderb | Bin 6189 -> 6237 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index 2f44763c..a359a3e8 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -78,8 +78,11 @@ void main() float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z; + if (sampleDepth == 0.0f) + continue; + float rangeCheck = smoothstep (0.0f, 1.0f, RADIUS / abs (viewSpacePos.z - sampleDepth)); - occlusion += (sampleDepth <= samplePos.z + BIAS ? 1.0f : 0.0f) * rangeCheck; + occlusion += (sampleDepth <= samplePos.z - BIAS ? 1.0f : 0.0f) * rangeCheck; //occlusion += (sampleDepth <= samplePos.z + BIAS ? 1.0f : 0.0f); } diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb index e0103cd5dc849c1cf72aaf7c901a6e9fd6af7c0c..a419165f53608005e3b2fbbadff33153e4be7f19 100644 GIT binary patch literal 6237 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 literal 6189 zcmZ9Od30S>6^Acrl8y|OsoGjP-~g?KB4ClBBc_$MN$nuw5MGnloJah_rLN^#e&4-kv+l}SYp?U$zdfFP&%N)pojNDW z*Oa!!Q?u--Y({o;_RoUKW@l|MS-zjeJ~Qjg^{$OuH!f?o`j?%3&Y8L%lTC5UZO7u% z0d7ZzE48}(3CMBqagdb@JdhWdD;uhObD>KoSOxjM7C?BliSRa-|Yebt^u zvxw`+<^e_;&6>`V)>u^b-P{-*t_;DqXN%$Mx!OeU$d=@Ktyx`H8wTdFX9TycdUb1T z^zpNt1K-L!-oB&o?Z_?)-|ag#jSaQ(oR`3jR_gtY;T_dJuywbvw<`64YQ6Be41H%U z7=5N>6}W9{Hs?87;6@)4Z*nNG_Hp)Fjytjm_GV>xWGD^7v%CUs>(nbf%@kjs%r=Caew6L%+C7_g?}m2Yz0k|{eej)#@7;R5V*ciFb@3eK zrsTLi^I4ShsYgG?$GjtcJw3#%?IC>ZPoJn8K74EvSH!iUm*dop>p>!y+~hd>Eyt-F zcOw#UauMe_?ZI5m$!EN1k{;*O{unl&(-V>7i85{>Im{_O5g+He0P(CRqgzW(`vUZ7 z>~hLUM9#>0b5755s~cNh#>yE#D;ezL{G@xoT-NuSxu*hU&uUK*|0J-z%SV0hr%V4+*!B0WhkY^FrTsK^?Jj?^=TH?3d?Sp__X}p|4!ZZL#ioiIX=*pUsGC4tg)U=ZzU$ z4z_3c@UMciZ0|~Y^82pcJnCafw-^1L?{&y3WG(C+~sRnqSTM}BAa5OU=3;R~YPBk19;{ZS;#_O6M1e@FA168`@Hd(Net z(|i6HqK{(jb9wI8)5qmm{te@|!!!GiPDh+y=;jaIcfjBIvc9OKpAKF!N%wa-{I&a= z9J=`~nWS%-q+eFjF9%mjy7$fBv&iRt^LIFO^G}p??}opnVK@HJB>hOzFJvBmYmPzu z&J3a(cWmM=VtUR>U0>&Y65=9yOl~_S>Rv&H0Ev zJ9$#YJaQ{!_t=lWzW}Am#i|Mb}3@@;?nMuedym z`Dbz0tpD`HUCgepb-f$%*7ZAeCUOSSkM4Kuti%m)F8g?9;+C^F@bMdUcH+(F-BORa zoC~(^@O>6oZi0NqJ{yrc4~dxb!9KT$xd1G8AjMn=HcsA}-e0+hUkNV9uR@pWN%5<} zE0RPXYtUCA+RS5bYZ1>Ab=QIQlixxv-*;yz?+WfYU^(X>HM_w2YO`nGF}bL<9$cKG zsJ$Wg%lMWSb9yeioPH56XS~mCBjR(5e4D`5xRj^nee6c`k#9r%4T*cxljFh%`1rlC zj_0D z9JSk@-y-?w=Y?Ro&|d_$zgf(|S}#V-;q%c~d*pu!IP&Xfe!p$K8l#jIDMRFgZQ|rz&fPiRleL{2$#Hrd~a z=zlk2jv4IlLgXXoyTSUz^LP(fPH}m@;ylIg<9pG~5#o2>nZ6G(R(sTcKiJ#{k(kj3 z!1}uESs%HG`5@Ssdyt6v5ZD-dF-9M`h`A4J%)Lm&d>Cwuy&I#CT%7wOU}NIk9|g-P zt~htxqmRMqvjT~C`r}ELQzp_ZJ^|KWd-V88u=UEb_!PRnE_>8RE@D0nHl{p_&!8I< zv(QH_Vm=EtraX)L(T#~&=p*MWrm}wynU2JNiO(l4X7vShbNYYqH1-D&ImKl!@f-X_ z@B@fBqNfMJlh6JoIDK87T_3rK`7(I&*}np3jP;DsN6tQHvVRqsm-JKEzlN0i{(9o% zUFNB$8GHk*J^q`16Kp>DxKoG0@-fFlV7ch|TVTIM&fcD8uzwqo5B)n}K+668 z7`@<&nm<98dkDFoKK8Kx6fu{!gQ@4ACEoh>5jB4fwh!-z{r&>cS3Z1x32q@1$>&#K zIek5cHaUOS{EhRs$ldr(_J@&iWH0gRzeXNL9zl%PCRhI5+>IXfe*?Bg%=x!qxkr(B zPQL?tHf_<9oH@LEzekQv`c(EmAjc)$bN>;sMtnQ|lsI`M?%1Ef+FZf?1uW-t4(_js e^Dg%AUV7jEh8VBEcKhw4KYOzu?f)ao3grLsf Date: Tue, 1 Nov 2022 13:24:14 +0800 Subject: [PATCH 608/793] sprinting works now --- TempScriptsFolder/PlayerController.cs | 53 +++++++++++++++++++++------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 4e28213d..468ae162 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -19,22 +19,26 @@ public class PlayerController : Script private RigidBody rb; private Transform tranform; - public float xAxisMove; - public float zAxisMove; + private float xAxisMove; + private float zAxisMove; + public float drag = 4.0f; private bool isMoveKeyPress = false; public RaccoonStates currentState = RaccoonStates.IDILE; public float maxMoveVel = 2.0f; public float moveForce = 200.0f; public float sprintMultiplier = 1.5f; + private float oldForce; + private float maxOldVel; + private bool sprintIncreaseOnce = false; public float rotationFactorPerFrame = 1.0f; public float jumpForce = 500.0f; /* public float initialJumpForce = 100.0f; public float maxJumpForce = 500.0f; - public float maxJumpTime = 500.0f; + public float maxJumpTime = 500.0f;*/ private bool isJumping = false; - private bool isGrounded = false;*/ + private bool isGrounded = false; public PlayerController(GameObject gameObj) : base(gameObj) { } @@ -43,6 +47,8 @@ public class PlayerController : Script rb = GetComponent(); if (rb == null) Debug.LogError("RigidBody is NULL!"); + else + rb.Drag = drag; tranform = GetComponent(); if(tranform == null) @@ -50,8 +56,6 @@ public class PlayerController : Script tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); tranform.LocalRotation = Quaternion.Euler(0.0f,0.0f,0.0f); - - RaccoonStates currentState = RaccoonStates.IDILE; } protected override void update() @@ -66,12 +70,17 @@ public class PlayerController : Script //Rotation(); Move(); Sprint(); - //Jump(); + Jump(); - Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); + //Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } + protected override void fixedUpdate() + { + } + + private void MoveKey() { if (Input.GetKey(Input.KeyCode.A)) @@ -122,13 +131,27 @@ public class PlayerController : Script private void Sprint() { - if (Input.GetKeyDown(Input.KeyCode.LeftShift) && currentState == RaccoonStates.WALKING && isMoveKeyPress) + if (Input.GetKey(Input.KeyCode.LeftShift) && isMoveKeyPress) { currentState = RaccoonStates.RUNNING; + if(!sprintIncreaseOnce) + { + sprintIncreaseOnce = true; + oldForce = moveForce; + moveForce = moveForce * sprintMultiplier; + + maxOldVel = maxMoveVel; + maxMoveVel = maxMoveVel * sprintMultiplier; + } } - else if (Input.GetKeyUp(Input.KeyCode.LeftShift) && currentState == RaccoonStates.RUNNING && isMoveKeyPress) + + if (Input.GetKeyUp(Input.KeyCode.LeftShift) && (currentState == RaccoonStates.RUNNING || currentState == RaccoonStates.IDILE)) { - currentState = RaccoonStates.WALKING; + if(isMoveKeyPress) + currentState = RaccoonStates.WALKING; + sprintIncreaseOnce = false; + moveForce = oldForce; + maxMoveVel = maxOldVel; } } @@ -140,6 +163,7 @@ public class PlayerController : Script if (Input.GetKeyDown(Input.KeyCode.Space) && rb != null) { currentState = RaccoonStates.INAIR; + isJumping = true; rb.AddForce(new Vector3(0.0f, jumpForce, 0.0f)); } } @@ -166,6 +190,11 @@ public class PlayerController : Script } } - + protected override void onCollisionEnter(CollisionInfo info) + { + Debug.Log($"Collision Enter: {info.GameObject.Name}"); + } + + } From 68be65f3419b1e8bc4e4a631eff933930d880d89 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 14:08:47 +0800 Subject: [PATCH 609/793] Fixed bug where collisions were reported in the wrong state --- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 5 ----- SHADE_Engine/src/Physics/SHPhysicsSystem.hpp | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index f564dc2d..dd399f96 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -28,11 +28,6 @@ namespace SHADE { - /*-----------------------------------------------------------------------------------*/ - /* Concepts */ - /*-----------------------------------------------------------------------------------*/ - - /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp index 02569d14..957fb3aa 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp @@ -42,6 +42,9 @@ namespace SHADE SHCollisionEvent cInfo; + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + // Match body and collider for collision event const rp3d::Entity body1 = cp.getBody1()->getEntity(); const rp3d::Entity body2 = cp.getBody2()->getEntity(); @@ -76,9 +79,6 @@ namespace SHADE return cInfo; } - // Update collision state - cInfo.collisionState = static_cast(cp.getEventType()); - return cInfo; } } // namespace SHADE \ No newline at end of file From d82bc8833fa26ae870f9c9c24a53809fb6a887d1 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 1 Nov 2022 14:20:03 +0800 Subject: [PATCH 610/793] Camera C# interface --- SHADE_Managed/Camera.cxx | 120 ++++++++++++++++++++++++++++++++ SHADE_Managed/Camera.hxx | 69 ++++++++++++++++++ TempScriptsFolder/CameraTest.cs | 9 +++ 3 files changed, 198 insertions(+) create mode 100644 SHADE_Managed/Camera.cxx create mode 100644 SHADE_Managed/Camera.hxx create mode 100644 TempScriptsFolder/CameraTest.cs diff --git a/SHADE_Managed/Camera.cxx b/SHADE_Managed/Camera.cxx new file mode 100644 index 00000000..f90e2bfe --- /dev/null +++ b/SHADE_Managed/Camera.cxx @@ -0,0 +1,120 @@ +#include "SHpch.h" + +#include "Camera.hxx" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Camera/SHCameraSystem.h" + + +namespace SHADE +{ + Camera::Camera(Entity entity) + :Component(entity) + { + + } + + + float Camera::Pitch::get() + { + return (GetNativeComponent()->GetPitch()); + } + + void Camera::Pitch::set(float val) + { + GetNativeComponent()->SetPitch(val); + } + float Camera::Yaw::get() + { + return (GetNativeComponent()->GetYaw()); + } + + void Camera::Yaw::set(float val) + { + GetNativeComponent()->SetYaw(val); + } + float Camera::Roll::get() + { + return (GetNativeComponent()->GetRoll()); + } + + void Camera::Roll::set(float val) + { + GetNativeComponent()->SetRoll(val); + } + float Camera::Width::get() + { + return (GetNativeComponent()->GetWidth()); + } + + void Camera::Width::set(float val) + { + GetNativeComponent()->SetWidth(val); + } + float Camera::Height::get() + { + return (GetNativeComponent()->GetHeight()); + } + + void Camera::Height::set(float val) + { + GetNativeComponent()->SetHeight(val); + } + float Camera::Near::get() + { + return (GetNativeComponent()->GetNear()); + } + + void Camera::Near::set(float val) + { + GetNativeComponent()->SetNear(val); + } + float Camera::Far::get() + { + return (GetNativeComponent()->GetFar()); + } + + void Camera::Far::set(float val) + { + GetNativeComponent()->SetFar(val); + } + float Camera::FOV::get() + { + return (GetNativeComponent()->GetFOV()); + } + + void Camera::FOV::set(float val) + { + GetNativeComponent()->SetFOV(val); + } + + Vector3 Camera::Position::get() + { + return Convert::ToCLI(GetNativeComponent()->GetPosition()); + } + + void Camera::Position::set(Vector3 val) + { + GetNativeComponent()->SetPosition(Convert::ToNative(val)); + } + + void Camera::SetMainCamera(size_t directorIndex) + { + auto system = SHSystemManager::GetSystem(); + system->SetMainCamera(GetNativeComponent()->GetEID(), directorIndex); + } + + void Camera::SetMainCamera() + { + SetMainCamera(0); + } + + void Camera::LookAt(Vector3 targetPosition) + { + auto system = SHSystemManager::GetSystem(); + system->CameraLookAt(*GetNativeComponent(), Convert::ToNative(targetPosition)); + } + + + + +} \ No newline at end of file diff --git a/SHADE_Managed/Camera.hxx b/SHADE_Managed/Camera.hxx new file mode 100644 index 00000000..e5a017b3 --- /dev/null +++ b/SHADE_Managed/Camera.hxx @@ -0,0 +1,69 @@ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +#include "Math/Quaternion.hxx" +// External Dependencies +#include "Camera/SHCameraComponent.h" + +namespace SHADE +{ + public ref class Camera : public Component + { + internal: + Camera(Entity entity); + + public: + property float Pitch + { + float get(); + void set(float val); + } + property float Yaw + { + float get(); + void set(float val); + } + property float Roll + { + float get(); + void set(float val); + } + property float Width + { + float get(); + void set(float val); + } + property float Height + { + float get(); + void set(float val); + } + property float Near + { + float get(); + void set(float val); + } + property float Far + { + float get(); + void set(float val); + } + property float FOV + { + float get(); + void set(float val); + } + property Vector3 Position + { + Vector3 get(); + void set(Vector3 val); + } + + + void SetMainCamera(size_t directorIndex); + void SetMainCamera(); + void LookAt(Vector3 targetPosition); + }; +} \ No newline at end of file diff --git a/TempScriptsFolder/CameraTest.cs b/TempScriptsFolder/CameraTest.cs new file mode 100644 index 00000000..867f3dcc --- /dev/null +++ b/TempScriptsFolder/CameraTest.cs @@ -0,0 +1,9 @@ +using System; +using SHADE; + +namespace SHADE_Scripting +{ + class CameraTest :Script + { + } +} From d5cadfe8ed1c3903bc050909c6fe94dbdb30acf3 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 1 Nov 2022 14:21:43 +0800 Subject: [PATCH 611/793] Removed Component event now runs after the component has been removed from the sparse set --- .../ECS_Base/Managers/SHComponentManager.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp index 75a86f37..8a715a49 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp @@ -33,19 +33,19 @@ namespace SHADE return; } + std::vector eventVec; + for (uint32_t i = 0; i < componentSet.Size(); ++i) { SHComponent* comp = (SHComponent*) componentSet.GetElement(i, EntityHandleGenerator::GetIndex(entityID)); if (comp) { comp->OnDestroy(); + SHComponentRemovedEvent eventData; + eventData.eid = entityID; + eventData.removedComponentType = i; + eventVec.push_back(eventData); } - SHComponentRemovedEvent eventData; - eventData.eid = entityID; - eventData.removedComponentType = i; - - SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); - } @@ -57,6 +57,12 @@ namespace SHADE componentSet.RemoveElements(EntityHandleGenerator::GetIndex(entityID)); + for (auto& eventData : eventVec) + { + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); + } + + //entityHandle.RemoveHandle(entityID); From 35771a619a3dddcd1d1b27040f89c2fc66b0b2a2 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 14:46:56 +0800 Subject: [PATCH 612/793] Adjusted for new component removal method --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 24 +++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index e7eed326..b1248509 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -630,19 +630,17 @@ namespace SHADE auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - SHASSERT(physicsObject != nullptr, "Physics object " + std::to_string(ENTITY_ID) + " has been lost from the world!") - - if (REMOVED_ID == RIGID_BODY_ID) + // Wake up all physics objects + for (auto& [entityID, object] : map) { - // Wake up all physics objects - for (auto& [entityID, object] : map) - { - if (SHComponentManager::HasComponent(entityID)) - reinterpret_cast(object.rp3dBody)->setIsSleeping(false); - } + if (SHComponentManager::HasComponent(entityID)) + reinterpret_cast(object.rp3dBody)->setIsSleeping(false); + } + if (REMOVED_ID == RIGID_BODY_ID && physicsObject != nullptr) + { world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); - physicsObject->rp3dBody = nullptr; + physicsObject->rp3dBody = nullptr; if (colliderComponent != nullptr) { @@ -657,7 +655,7 @@ namespace SHADE } } - if (REMOVED_ID == COLLIDER_ID) + if (REMOVED_ID == COLLIDER_ID && physicsObject != nullptr) { // Remove all colliders const int NUM_COLLIDERS = static_cast(physicsObject->rp3dBody->getNbColliders()); @@ -673,8 +671,8 @@ namespace SHADE physicsObject->rp3dBody = nullptr; } - if (physicsObject->rp3dBody == nullptr) - DestroyPhysicsObject(ENTITY_ID); + if (physicsObject != nullptr && physicsObject->rp3dBody == nullptr) + DestroyPhysicsObject(ENTITY_ID); } return EVENT_DATA->handle; From e1587c7252c56f44258e4c8ba305064c77c6a8d4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 14:56:03 +0800 Subject: [PATCH 613/793] Fixed SetMesh() not working and loading of mesh and textures --- .../Inspector/SHEditorComponentView.hpp | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 17 ++++++-- .../src/Resource/SHResourceManager.cpp | 17 ++++++-- SHADE_Engine/src/Resource/SHResourceManager.h | 39 ++++++------------- .../src/Resource/SHResourceManager.hpp | 4 +- 5 files changed, 44 insertions(+), 34 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index e3f93713..fdc94d1f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -358,6 +358,7 @@ namespace SHADE [component](AssetID const& id) { component->SetMesh(SHResourceManager::LoadOrGet(id)); + SHResourceManager::FinaliseChanges(); }, SHDragDrop::DRAG_RESOURCE); } else diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 16e2b1e8..007c8639 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -106,10 +106,7 @@ namespace SHADE descPool = device->CreateDescriptorPools(); // Create generic command buffer - //transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); - transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); // Load Built In Shaders static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); @@ -621,10 +618,14 @@ namespace SHADE void SHGraphicsSystem::BuildMeshBuffers() { + transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + device->WaitIdle(); transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); + device->WaitIdle(); + transferCmdBuffer.Free(); transferCmdBuffer = {}; } /*---------------------------------------------------------------------------------*/ @@ -649,10 +650,14 @@ namespace SHADE void SHGraphicsSystem::BuildTextures() { + graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + device->WaitIdle(); texLibrary.BuildTextures ( device, graphicsTexCmdBuffer, graphicsQueue, descPool ); + device->WaitIdle(); + graphicsTexCmdBuffer.Free(); graphicsTexCmdBuffer = {}; } #pragma endregion ADD_REMOVE @@ -692,6 +697,7 @@ namespace SHADE void SHGraphicsSystem::EndRoutine::Execute(double) noexcept { reinterpret_cast(system)->EndRender(); + SHResourceManager::FinaliseChanges(); } /*-----------------------------------------------------------------------------------*/ @@ -709,6 +715,11 @@ namespace SHADE if (!renderable.HasChanged()) continue; + if (!renderable.GetMesh()) + { + SHLOG_CRITICAL("NULL Mesh provided!"); + } + // Remove from the SuperBatch it is previously in (prevMat if mat has changed) Handle prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial(); if (prevMaterial) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.cpp b/SHADE_Engine/src/Resource/SHResourceManager.cpp index 156c31c7..dad9fd9f 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.cpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.cpp @@ -21,9 +21,11 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHResourceHub SHResourceManager::resourceHub; std::unordered_map>> SHResourceManager::handlesMap; - std::unordered_map SHResourceManager::assetIdMap; + std::unordered_map SHResourceManager::assetIdMap; std::unordered_map> SHResourceManager::typedFreeFuncMap; std::vector SHResourceManager::loadedAssetData; + bool SHResourceManager::textureChanged = false; + bool SHResourceManager::meshChanged = false; /*-----------------------------------------------------------------------------------*/ /* Function Definitions */ @@ -63,8 +65,17 @@ namespace SHADE SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); if (gfxSystem == nullptr) throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); - gfxSystem->BuildMeshBuffers(); - gfxSystem->BuildTextures(); + + if (meshChanged) + { + gfxSystem->BuildMeshBuffers(); + meshChanged = false; + } + if (textureChanged) + { + gfxSystem->BuildTextures(); + textureChanged = false; + } // Free CPU Resources for (auto assetId : loadedAssetData) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index 61689420..e5e303e1 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -28,33 +28,15 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /// + /// Template structs that maps a resource to their loaded asset representation type. + /// template - struct SHResourceLoader - { - using AssetType = void; - }; - - template<> - struct SHResourceLoader - { - using AssetType = SHMeshAsset; - }; - template<> - struct SHResourceLoader - { - using AssetType = SHTextureAsset; - }; - template<> - struct SHResourceLoader - { - using AssetType = SHShaderAsset; - }; - template<> - struct SHResourceLoader - { - using AssetType = SHMaterialAsset; - }; - + struct SHResourceLoader { using AssetType = void; }; + template<> struct SHResourceLoader { using AssetType = SHMeshAsset; }; + template<> struct SHResourceLoader { using AssetType = SHTextureAsset; }; + template<> struct SHResourceLoader { using AssetType = SHShaderAsset; }; + template<> struct SHResourceLoader { using AssetType = SHMaterialAsset; }; /// /// Static class responsible for loading and caching runtime resources from their @@ -97,7 +79,7 @@ namespace SHADE /// Handle to the resource to unload. static void Unload(AssetID assetId); /// - /// Needs to be called to finalise all changes to loads. + /// Needs to be called to finalise all changes to loads, unless at runtime. /// static void FinaliseChanges(); @@ -147,6 +129,9 @@ namespace SHADE static std::unordered_map> typedFreeFuncMap; // Pointers to temp CPU resources static std::vector loadedAssetData; + // Dirty Flags + static bool meshChanged; + static bool textureChanged; /*---------------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 15834cdf..1623d70a 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -54,7 +54,7 @@ namespace SHADE } auto handle = load(assetId, *assetData); - Handle genericHandle = Handle(); + Handle genericHandle = Handle(handle); typedHandleMap.get().emplace(assetId, genericHandle); typedAssetIdMap.get().emplace(genericHandle, assetId); return handle; @@ -139,6 +139,7 @@ namespace SHADE if constexpr (std::is_same_v) { loadedAssetData.emplace_back(assetId); + meshChanged = true; return gfxSystem->AddMesh ( @@ -155,6 +156,7 @@ namespace SHADE else if constexpr (std::is_same_v) { loadedAssetData.emplace_back(assetId); + textureChanged = true; return gfxSystem->AddTexture ( From 4dcd60f23953698be8b07eab01e9107df383f391 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 15:10:47 +0800 Subject: [PATCH 614/793] Added rotation offsets to colliders --- .../Inspector/SHEditorComponentView.hpp | 21 ++++++++++++++++++- .../Math/Transform/SHTransformComponent.cpp | 6 +++--- SHADE_Engine/src/Physics/SHCollider.cpp | 15 ++++++++++++- SHADE_Engine/src/Physics/SHCollider.h | 5 ++++- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 8 ++++--- 5 files changed, 46 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index e3f93713..6862aea4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -274,8 +274,27 @@ namespace SHADE } { - SHEditorWidgets::BeginPanel("Offset", { ImGui::GetContentRegionAvail().x, 30.0f }); + SHEditorWidgets::BeginPanel("Offsets",{ ImGui::GetContentRegionAvail().x, 30.0f }); SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider->GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider->SetPositionOffset(vec); }); + SHEditorWidgets::DragVec3("Rotation", { "X", "Y", "Z" }, + [&collider] + { + auto offset = collider->GetRotationOffset(); + offset.x = SHMath::RadiansToDegrees(offset.x); + offset.y = SHMath::RadiansToDegrees(offset.y); + offset.z = SHMath::RadiansToDegrees(offset.z); + return offset; + }, + [&collider](SHVec3 const& vec) + { + const SHVec3 vecInRad + { + SHMath::DegreesToRadians(vec.x) + , SHMath::DegreesToRadians(vec.y) + , SHMath::DegreesToRadians(vec.z) + }; + collider->SetRotationOffset(vecInRad); + }); SHEditorWidgets::EndPanel(); } if (ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index 43742855..fa0befa3 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -185,7 +185,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" ,&SHTransformComponent::GetLocalPosition ,&SHTransformComponent::SetLocalPosition ) (metadata(META::tooltip, "Translate")) - .property("Rotate" ,&SHTransformComponent::GetLocalRotation ,select_overload(&SHTransformComponent::SetLocalRotation) ) (metadata(META::tooltip, "Rotate"), metadata(META::angleInRad, true)) - .property("Scale" ,&SHTransformComponent::GetLocalScale ,&SHTransformComponent::SetLocalScale ) (metadata(META::tooltip, "Scale")); + .property("Translate" ,&SHTransformComponent::GetLocalPosition ,&SHTransformComponent::SetLocalPosition ) (metadata(META::tooltip, "Translate")) + .property("Rotate" ,&SHTransformComponent::GetLocalRotation ,select_overload(&SHTransformComponent::SetLocalRotation)) (metadata(META::tooltip, "Rotate"), metadata(META::angleInRad, true)) + .property("Scale" ,&SHTransformComponent::GetLocalScale ,&SHTransformComponent::SetLocalScale ) (metadata(META::tooltip, "Scale")); } \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp index 9488042d..6cea3dc1 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -17,6 +17,7 @@ #include "Math/Geometry/SHBoundingSphere.h" #include "Math/Transform/SHTransformComponent.h" #include "Math/SHMathHelpers.h" +#include "Reflection/SHReflectionMetadata.h" namespace SHADE { @@ -158,6 +159,11 @@ namespace SHADE return positionOffset; } + const SHVec3& SHCollider::GetRotationOffset() const noexcept + { + return rotationOffset; + } + SHShape* SHCollider::GetShape() noexcept { dirty = true; @@ -275,6 +281,12 @@ namespace SHADE } } + void SHCollider::SetRotationOffset(const SHVec3& rotOffset) noexcept + { + dirty = true; + rotationOffset = rotOffset; + } + /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -316,5 +328,6 @@ RTTR_REGISTRATION ); registration::class_("Collider") - .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset); + .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset) + .property("Rotation Offset", &SHCollider::GetRotationOffset, &SHCollider::SetRotationOffset) (metadata(META::angleInRad, true)); } \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h index 65e35698..8cc233c4 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -80,6 +80,7 @@ namespace SHADE [[nodiscard]] const SHPhysicsMaterial& GetMaterial () const noexcept; [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; + [[nodiscard]] const SHVec3& GetRotationOffset () const noexcept; [[nodiscard]] SHShape* GetShape () noexcept; @@ -96,7 +97,8 @@ namespace SHADE void SetDensity (float density) noexcept; void SetMaterial (const SHPhysicsMaterial& newMaterial) noexcept; - void SetPositionOffset (const SHVec3& posOffset) noexcept; + void SetPositionOffset (const SHVec3& posOffset) noexcept; + void SetRotationOffset (const SHVec3& rotOffset) noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -110,6 +112,7 @@ namespace SHADE SHShape* shape; SHPhysicsMaterial material; SHVec3 positionOffset; + SHVec3 rotationOffset; /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index c7c9f631..37c1269e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -130,6 +130,8 @@ namespace SHADE int SHPhysicsObject::AddCollider(SHCollider* collider) { + const rp3d::Transform OFFSETS{ collider->GetPositionOffset(), collider->GetRotationOffset() }; + switch (collider->GetType()) { case SHCollider::Type::BOX: @@ -137,7 +139,7 @@ namespace SHADE const auto* box = reinterpret_cast(collider->GetShape()); rp3d::BoxShape* newBox = factory->createBoxShape(box->GetHalfExtents()); - rp3dBody->addCollider(newBox, rp3d::Transform{ collider->GetPositionOffset(), SHQuaternion::Identity }); + rp3dBody->addCollider(newBox, OFFSETS); break; } case SHCollider::Type::SPHERE: @@ -145,7 +147,7 @@ namespace SHADE const auto* sphere = reinterpret_cast(collider->GetShape()); rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetRadius()); - rp3dBody->addCollider(newSphere, rp3d::Transform{ collider->GetPositionOffset(), SHQuaternion::Identity }); + rp3dBody->addCollider(newSphere, OFFSETS); break; } // TODO(Diren): Add more collider shapes @@ -182,7 +184,7 @@ namespace SHADE rp3dCollider->setIsTrigger(collider.IsTrigger()); // Update offsets - rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), SHQuaternion::Identity)); + rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), collider.GetRotationOffset())); switch (collider.GetType()) { From 69e625014d98fee061863e1d2e50482ff475b058 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 15:25:19 +0800 Subject: [PATCH 615/793] Added EntityID retrieval from GameObject --- SHADE_Managed/src/Engine/GameObject.cxx | 4 ++++ SHADE_Managed/src/Engine/GameObject.hxx | 7 +++++++ TempScriptsFolder/PhysicsTest.cs | 1 - 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 55d53d68..f4c16f4f 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -72,6 +72,10 @@ namespace SHADE } return node->IsActive(); } + Entity GameObject::EntityId::get() + { + return entity; + } /*---------------------------------------------------------------------------------*/ /* GameObject Property Functions */ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 723d9cec..8eaa67f3 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -86,6 +86,13 @@ namespace SHADE { bool get(); } + /// + /// Native Entity ID value for this GameObject. + /// + property Entity EntityId + { + Entity get(); + } /*-----------------------------------------------------------------------------*/ /* GameObject Property Functions */ diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs index c2f707cf..cc01615d 100644 --- a/TempScriptsFolder/PhysicsTest.cs +++ b/TempScriptsFolder/PhysicsTest.cs @@ -38,7 +38,6 @@ public class PhysicsTest : Script RigidBody.AddForce(Force); Debug.Log($"Jump!"); } - Debug.Log($"{Transform.LocalPosition.y}"); } protected override void fixedUpdate() From 00ee8a4641c24b8f0e04094c2c9815e7f993ed41 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 15:29:12 +0800 Subject: [PATCH 616/793] Added compiled documentation for C# interfaces --- bin/Debug/SHADE_CSharp.xml | 1029 ++++++ bin/Debug/SHADE_Managed.xml | 6250 +++++++++++++++++++++++++++++++++ bin/Release/SHADE_CSharp.xml | 1029 ++++++ bin/Release/SHADE_Managed.xml | 6250 +++++++++++++++++++++++++++++++++ 4 files changed, 14558 insertions(+) create mode 100644 bin/Debug/SHADE_CSharp.xml create mode 100644 bin/Debug/SHADE_Managed.xml create mode 100644 bin/Release/SHADE_CSharp.xml create mode 100644 bin/Release/SHADE_Managed.xml diff --git a/bin/Debug/SHADE_CSharp.xml b/bin/Debug/SHADE_CSharp.xml new file mode 100644 index 00000000..daeaa3c5 --- /dev/null +++ b/bin/Debug/SHADE_CSharp.xml @@ -0,0 +1,1029 @@ + + + + SHADE_CSharp + + + + + Interface for a CallbackAction that all variants inherit from. + + + + + Whether or not this CallbackAction is runtime assigned. If it is, then the + TargetMethodName and TargetObject properties are invalid. + + + + + Name of the method that this CallbackAction is using. + + + + + Object which the specified target method is called on. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 1 parameter. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 2 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 3 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 4 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 5 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 6 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 7 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 8 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 9 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 10 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Interface for a CallbackEvent that all variants inherit from. + + + + + Registers an empty ICallbackAction. + + + + + Registers an ICallbackAction with the event such that it will be called in + future + + ICallbackAction to register with. + + + + Deregisters an ICallbackAction that was previously added. This should + only emit a warning if an action that was not previous added was + provided. + + ICallbackAction to remove. + + + + Iterable set of ICallbackActions that were registered to this event. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + diff --git a/bin/Debug/SHADE_Managed.xml b/bin/Debug/SHADE_Managed.xml new file mode 100644 index 00000000..7b653116 --- /dev/null +++ b/bin/Debug/SHADE_Managed.xml @@ -0,0 +1,6250 @@ + + + + "SHADE_Managed" + + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Sets the position of the mouse cursor relative to the top left corner of the +window. + + +Position of the mouse in window pixel coordinates to set. + + + + +Checks if a specified mouse button is no longer pressed and was pressed +before. + + MouseCode of the mouse button to check. + +True during the frame the user releases the given mouse button. + + + + +Checks if a specified mouse button is pressed and was not pressed before. + + MouseCode of the mouse button to check. + +True during the frame the user pressed the given mouse button. + + + + +Checks if a specified mouse button is being held down. +This will also be true if GetMouseButtonDown() is true. + + MouseCode of the mouse button to check. + True while the user holds down the mouse button specified. + + + +Checks if a specified key is no longer pressed pressed and was pressed +before. + + KeyCode of the key to check. + +True during the frame the user releases the key identified by name. + + + + +Checks if a specified key is pressed and was not pressed before. + + KeyCode of the key to check. + +True during the frame the user starts pressing down the key specified. + + + + +Checks if a specified key is being held down. +This will also be true if GetKeyDown() is true. + + KeyCode of the key to check. + True while the user holds down the key specified. + + + +Amnount of vertical mouse scroll in this frame. + + + + +Mouse position in screen coordinates relative to the top left of the window. +This value is a Vector3 for compatibility with functions that have Vector3 +arguments. The z component of the Vector3 is always 0 + + + + +Represents the available supported mouse keycodes that can be passed into the +mouse-button-based Input functions. + + + + +Represents the available supported keycodes that can be passed into the +key-based Input functions. + +Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html +Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode + + + + +Static class responsible for providing access to Input-related functionality. + + + + +Simple attribute to mark that a field in a Script should be serialised. + + + + +Cleans up all required components for managed code. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. +Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Initialises all required components for managed code. + + + + +Name of the Managed Library that contains the C# scripts written externally. + + + + +Static class that contains the functions for interfacing with the core +PlushieEngine written in C++ for managing the lifecycle of managed code. + + + + +Default Constructor + + + + +Custom AssemblyLoadContext marked as collectible so that it can be unloaded. + + + + +Time taken for Physics simulations. You should use this for operations +within Script.FixedUpdate() + + + + +Time taken to process the previous frame. + + + + +Static class that contains the functions for working with time. + + + + +Static class that wraps up certain functions in the SHPhysicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Description that is to be shown in the Tooltip. + + + + +Simple attribute to provide a field in a script with a tooltip. + + + + +Checks if a specified file exists. + + File path to the file to check. + True if the file exists + + + +Deletes the folder and all files in it as specified by the file path. + + File path to the file to delete. + + + +Deletes the file as specified by the file path. + + File path to the file to delete. + + + +Reads the file via the specified path that represents a build log of error +and warning messages. + + +File path to the build log of script builds done by BuildScriptAssembly() to +dump and process. + + + + +Registers events for the scripting system + + + + +Loads all the function pointers to CLR code that we need to execute. + + + + +Generates a .csproj file for editing and compiling the C# scripts. + + File path to the generated file. + + + +Utilises execution of a external batch file for invoking the dotnet build +tool to compile C# scripts in the Assets folder into the SHADE_Scripting +C# assembly DLL. + + +Whether or not a debug build will be built. Only debug built C# assemblies +can be debugged. + + +Whether or not we are reloading the assembly, if so, unload and then reload it. + + Whether or not the build succeeded. + + + +Performs a redo for script inspector changes if it exists. + + + + +Performs an undo for script inspector changes if it exists. + + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Creates scripts and sets fields for the specified Entity based on the specified +YAML node. + + The Entity to deserialise a Script on to. + +YAML Node that contains the serialised script data. + + True if successfully deserialised. + + + +Performs serialization of all scripts for the specified entity into the +YAML::Node specified. This node will contain all serialised scripts after +calling this function. + + The Entity to Serialise. + +YAML Node that will store the serialised scripts. + + True if successfully serialised. + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts. This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Adds a Script to a specified Entity. Note that while you can call this +multiple times on a specified Entity, it will work for all intents and +purposes but GetScript<T>() (C# only) currently only +gives you the first Script added of the specified type. + + The entity to add a script to. + Type name of the script to add. + +True if successfully added. False otherwise with the error logged to the +console. + + + + +Shuts down the DotNetRuntime. + + + + +Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached +to Entities. + + + + +Executes the FixedUpdate()s of the Scripts that are attached to +Entities. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Initialises the DotNetRuntime and retrieves function pointers to all +functions on the CLR used to interface with the engine. + + + + +Manages initialisation of the DotNetRuntime and interfacing with CLR code written +and executed on .NET. + + + + +Deserialises a YAML node that contains a map of Scripts and copies the +deserialised data into the specified object if there are matching fields. + + +The JSON string that contains the data to copy into this Script object. + + The object to copy deserialised data into. + + + +Creates a JSON node that represents the specified object and its associated +serialisable fields. Public fields and fields marked with the SerialiseField +attribute will be serialised. + + The object to serialise. + + + +Checks if a specified field is a candidate for serialisation. This means that +the field is public or private with the [SerialiseField] attribute. + + The field to check. + +True if the specified field is a candidate for serialisation. + + + + +Retrieves a set of all non-static (instance) fields from a specified object. + + The object to get non-static fields from. + Immutable list of non-static fields. + + + +Contains useful static functions for working with Reflection. + + + +Converts the node to a YAML string. + + +Emits the node to the given output stream. + + +Emits the node to the given {@link Emitter}. If there is an error in writing, +{@link Emitter#good} will return false. + + + + Loads the input file as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input file as a single YAML document. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + +Handles a "TAG" directive, which should be of the form 'handle prefix', +where 'handle' is converted to 'prefix' in the file. + + + +Handles a "YAML" directive, which should be of the form 'major.minor' (like +a version number). + + + +Reads any directives that are next in the queue, setting the internal +{@code m_pDirectives} state. + + + + Handles the next document by calling events on the {@code eventHandler}. + + @throw a ParserException on error. + @return false if there are no more documents + + + +Resets the parser with the given input stream. Any existing state is +erased. + + + +Evaluates to true if the parser has some valid input to be read. + + +Constructs a parser from the given input stream. The input stream must +live as long as the parser. + + + +Constructs an empty parser (with no input. + + +A parser turns a stream of bytes into one stream of "events" per YAML +document in the input stream. + + + + +Renders a context menu when right clicked for the scripts + + The Entity to render the Scripts of. + The Script to render the inspector for. + + + +Renders a field specified into the inspector. + + The field to render. + +The object that contains the data of the field to render. + + + + +Renders a single specified Script's inspector. + + The Entity to render the Scripts of. + The Script to render the inspector for. + +Indices used internally to differentiate each rendered Script +inspector. This is required to open and close each Script's inspector +independently from each other. + + + + +Redoes the last script inspector change if there is any. + + + + +Undoes the last script inspector change if there is any. + + + + +Renders a dropdown button that allows for the addition of PlushieScripts +onto the specified Entity. + + The Entity to add PlushieScripts to. + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Static class for Editor-related functions + + + + +Processes a YAML node that contains a list of multiple scripts to be loaded +into the specified Entity. +

    +This function should only be called from native unmanaged code. +
    + +The Entity to attach the deserialised Scripts to. + + +Pointer to the YAML::Node that contains serialized script data. + + +
    + + +Populates a YAML node with the scripts for a specified Entity. +

    +This function should only be called from native unmanaged code. +
    + The Entity to Serialise. + +Pointer to a YAML::Node that will be populated with all of the serialised +scripts and their associated fields. + + +True if serialisation is successful. False if the buffer is too small for +the serialised output. + +
    + + +Executes OnCollision*() and OnTrigger*() for all scripts. + + + + +Executes LateUpdate() for all scripts. + + + + +Executes Update() for all scripts. + + + + +Executes FixedUpdate() for all scripts. + + + + +Retrieves a immutable list of available scripts that can be added. + + Immutable list of available scripts that can be added. + + + +Cleans up data stored in the ScriptStore to free up memory for garbage +collection. + + + + +Cleans up scripts that were marked for deletion. This calls the OnDestroy() +for these Scripts. + + + + +Sets up scripts that were marked for initialization. This calls the Awake() +and Start() for Scripts that have yet to have done so. + + + + +Initializes the ScriptStore to allocate and pre-populate reflection data. + + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts.This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Removes a specific script from the + + The entity to remove the script from. + The script to remove. + True if successfully removed. False otherwise. + + + +Removes all Scripts of the specified type from the specified Entity. + + +Type of script to remove. +This needs to be a default constructable Script. + + The entity to remove the script from. + +If the specified Entity is invalid. + + + + +Retrieves an immutable list of all scripts attached to a specified Entity. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts attached to the specified Entity. +This can also be null if there are no scripts at all or an invalid Entity +was specified. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from the specified Entity's children that matches +the specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Retrieves the first Script from the specified Entity that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code or for serialisation +purposes. If you are writing in C# or C++/CLI and not doing serialisation, +use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +Out parameter handle to the Script that was created. + + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code. If you are writing +in C# or C++/CLI, use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. + + +Type of script to add. +This needs to be a default constructable PlushieScript. + + The entity to add a script to. + Reference to the script added. + +If the specified Entity is invalid. + + + + +Responsible for managing all scripts attached to Entities as well as executing +all lifecycle functions of scripts. + + + + +Checks if two Colors are not approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Colors are approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Color with a scalar value and returns +the result. + + Scalar to divide with. + Color to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Color with a scalar value and returns +the result. + + Color to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Colors and returns the +result. + + Color to multiply with. + Another Color to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Color from another Color and returns the result. + + Color to subtract from. + Another Color to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Colors together and returns the result. + + Color to add. + Another Color to add. + The result of lhs added to rhs + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + Value used to interpolate between a and b. + The interpolated Color. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Alpha component of the colour. Ranges from 0.0f to 1.0f. + + + + +Blue component of the colour. Ranges from 0.0f to 1.0f. + + + + +Green component of the colour. Ranges from 0.0f to 1.0f. + + + + +Red component of the colour. Ranges from 0.0f to 1.0f. + + + + +Constructor to construct a Color with the specified components. + + Red component to set. + Green component to set. + Blue component to set. + Alpha component to set. + + + +Constructor to construct a Color with the specified components with the +alpha component set to 1.0f. + + Red component to set. + Green component to set. + Blue component to set. + + + +Constructor to construct a Color with the specified components with the +blue and alpha component set to 1.0f. + + Red component to set. + Green component to set. + + + +Constructor to construct a Color with the specified components with the +green, blue and alpha component set to 1.0f. + + Red component to set. + + + +Pure yellow, mix of pure red and green. + + + + +Pure magenta, mix of pure red and blue. + + + + +Pure cyan, mix of pure green and blue. + + + + +Pure blue. + + + + +Pure green. + + + + +Pure red. + + + + +Pure white. + + + + +Dark Gray, darker than gray. + + + + +Gray, halfway between black and white. + + + + +Light Gray, lighter than gray. + + + + +Pure black. + + + + +A static class that contains a set of default Colors. + + + + +CLR version of the the SHADE Engine's Color struct which describes a Color +encoded using floating point numbers that range from 0.0f to 1.0f. + + + + +Creates a inline button widget. +
    +Wraps up ImGui::Button(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a small inline button widget. +
    +Wraps up ImGui::SmallButton(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a visual text widget. +
    +Wraps up ImGui::Text(). +
    + Text to display. +
    + + +Creates a menu item in the list of items for a mini popup. +
    +Wraps up ImGui::MenuItem(). +
    + Label used to identify this widget. + Whether or not the menu item was selected. +
    + + +Opens the popup that was defined with the specified label. +
    +Wraps up ImGui::OpenPopup(). +
    +
    + + +Marks the end of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::EndPopup(). +
    +
    + + +Marks the start of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::BeginPopup(). +
    + Label used to identify this widget. + Whether or not the pop up is open. +
    + + +Creates a collapsing title header. +
    +Wraps up ImGui::CollapsingHeader(). +
    + Label for the header. + True if the header is open, false otherwise. +
    + + +Unindents the widgets rendered after this call. +
    +Wraps up ImGui::Unindent(). +
    +
    + + +Indents the widgets rendered after this call. +
    +Wraps up ImGui::Indent(). +
    +
    + + +Marks the end of a stack of ImGui widgets from the last PushID() call. +
    +Wraps up ImGui::PopID(). +
    +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + Integer-based ID. +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + String-based ID. +
    + + +Maximum length of a string supported by InputTextField() + + + + +Static class that contains useful functions for Editor UI using ImGui. + + + + +Redoes the last undo-ed command if it exists. + + + + +Undos the last added command if it exists. + + + + +Adds a command onto the stack. + + + + + +True if there is a redoable action in the stack. + + + + +True if there is an undoable action in the stack. + + + + +Command for the stack that represents a data modification. + + + + +Class that is able to store a stack of actions that can be done and redone. + + + + +To be called from native code when a Collision Shape has been changed. + + +The entity which has it's collision shape changed. + + + + +To be called from native code when a collision shape has been removed. + + The entity which has it's collision shape removed. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list +and casts it to the appropriate type. + + Type of the ColliderBound to cast to. + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list. + + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Total number of ColliderShapes in the Collider component. + + + + +Constructs a Collider Component that represents a native SHColliderComponent +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHColliderComponent. +A single Collider component can contain one or multiple Collider Bounds. + + + + + + + + + + +Radius of the Bounding Sphere formed by this bound. + + + + +Center of the Bounding Sphere formed by this bound. + + + + +Sphere-shaped Collider Bound. + + + + + + + + + + +Position of the top right front corner of the Bounding Box formed by this +bound. + + + + +Position of the bottom left back corner of the Bounding Box formed by this +bound. + + + + +Half of the scale of the Bounding Box formed by this bound. + + + + +Center of the Bounding Box formed by this bound. + + + + +Box-shaped Collider Bound. + + + + +Computes a Raycast and checks if there is a collision with any object. + + The ray to cast. + Maximum distance for the raycast check. + True if the ray intersects with an object in the scene. + + + +Checks if the specified point is within this shape's bounds. + + Point to test with. + True if the point is in the shape's bounds. + + + +Base interface for all Collider Shapes. + + + +@brief The density of the collider that determines the mass of the collision shape + if it is automatically computed. Must be a positive number. + + + +@brief The bounciness factor of the physics object., clamped between [0,1].
    + 0 means the object will never bounce. + 1 means the object never loses energy on a bounce. + +
    + +@brief The friction coefficient of the physics object., clamped between [0,1].
    + 0 means the object will never experience friction. + 1 means the friction force against the object is equal to the applied force. + +
    + +@brief Sets the mass density of the physics material. +@param newDensity The density value to set. Always made positive. + + + +@brief Sets the bounciness factor of the physics material. +@param newBounciness The bounciness value to set. Clamped between [0,1]. + + + +@brief Sets the friction coefficient of the physics material. +@param newFriction The friction value to set. Clamped between [0,1]. + + + +@brief Default constructor for a physics material. +@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. +@param bounciness The bounciness of the material. Clamped between [0,1]. +@param density The mass density of the material. Always made positive. + + + + +Closes the current window, and depending on the implementation, should also +close the application. + + + + +Retrieves the current window fullscreen status. + + The current window fullscreen status.. + + + +Retrieves the current window height. + + The current window height. + + + +Retrieves the current window width. + + The current window width. + + + +Static class that wraps up certain functions in the SHGraphicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + @brief Perform ImGui and ImGui Backend Render + + + + + @brief Start new frame for editor + + + + + @brief Initialise Backend for ImGui (SDL and Vulkan backend) + + @param sdlWindow Pointer to SDL_Window + + + + @brief Set the Style for the editor + + @param style Desired style + + + + @brief Safely shutdown the editor + + + + + @brief Update the editor and add to ImGui DrawList + + @param dt Delta-time of the frame + + + + @brief Initialise the editor + + @param sdlWindow pointer to SDL_Window object created in application + + + + @brief Style options + + + + + @brief SHEditor static class contains editor variables and implementation of editor functions. + + + + + Get the YUV conversion mode, returning the correct mode for the resolution + when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + + \since This function is available since SDL 2.0.8. + + + + Get the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Set the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Perform low-level surface scaled blitting only. + + This is a semi-private function and it performs low-level surface blitting, + assuming the input rectangles have already been clipped. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform a scaled surface copy to a destination surface. + + SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + merely a macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform bilinear scaling between two surfaces of the same format, 32BPP. + + \since This function is available since SDL 2.0.16. + + + + Perform a fast, low quality, stretch blit between two surfaces of the same + format. + + Please use SDL_BlitScaled() instead. + + \since This function is available since SDL 2.0.0. + + + + Perform low-level surface blitting only. + + This is a semi-private blit function and it performs low-level surface + blitting, assuming the input rectangles have already been clipped. + + Unless you know what you're doing, you should be using SDL_BlitSurface() + instead. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied, or NULL to copy the entire surface + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + + Perform a fast blit from the source surface to the destination surface. + + SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + Perform a fast fill of a set of rectangles with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rects an array of SDL_Rects representing the rectangles to fill. + \param count the number of rectangles in the array + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRect + + + + Perform a fast fill of a rectangle with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rect the SDL_Rect structure representing the rectangle to fill, or + NULL to fill the entire surface + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRects + + + + Premultiply the alpha on a block of pixels. + + This is safe to use with src == dst, but not for other overlapping areas. + + This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + + \param width the width of the block to convert, in pixels + \param height the height of the block to convert, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with premultiplied pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.18. + + + + Copy a block of pixels of one format to another format. + + \param width the width of the block to copy, in pixels + \param height the height of the block to copy, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with new pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Copy an existing surface to a new surface of the specified format enum. + + This function operates just like SDL_ConvertSurface(), but accepts an + SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + it might be easier to call but it doesn't have access to palette + information for the destination surface, in case that would be important. + + \param src the existing SDL_Surface structure to convert + \param pixel_format the SDL_PixelFormatEnum that the new surface is + optimized for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurface + \sa SDL_CreateRGBSurface + + + + Copy an existing surface to a new surface of the specified format. + + This function is used to optimize images for faster *repeat* blitting. This + is accomplished by converting the original and storing the result as a new + surface. The new, optimized surface can then be used as the source for + future blits, making them faster. + + \param src the existing SDL_Surface structure to convert + \param fmt the SDL_PixelFormat structure that the new surface is optimized + for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurfaceFormat + \sa SDL_CreateRGBSurface + + + + Get the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + \param surface the SDL_Surface structure representing the surface to be + clipped + \param rect an SDL_Rect structure filled in with the clipping rectangle for + the surface + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetClipRect + + + + Set the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + Note that blits are automatically clipped to the edges of the source and + destination surfaces. + + \param surface the SDL_Surface structure to be clipped + \param rect the SDL_Rect structure representing the clipping rectangle, or + NULL to disable clipping + \returns SDL_TRUE if the rectangle intersects the surface, otherwise + SDL_FALSE and blits will be completely clipped. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetClipRect + + + + Get the blend mode used for blit operations. + + \param surface the SDL_Surface structure to query + \param blendMode a pointer filled in with the current SDL_BlendMode + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetSurfaceBlendMode + + + + Set the blend mode used for blit operations. + + To copy a surface to another surface (or texture) without blending with the + existing data, the blendmode of the SOURCE surface should be set to + `SDL_BLENDMODE_NONE`. + + \param surface the SDL_Surface structure to update + \param blendMode the SDL_BlendMode to use for blit blending + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceBlendMode + + + + Get the additional alpha value used in blit operations. + + \param surface the SDL_Surface structure to query + \param alpha a pointer filled in with the current alpha value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Set an additional alpha value used in blit operations. + + When this surface is blitted, during the blit operation the source alpha + value is modulated by this alpha value according to the following formula: + + `srcA = srcA * (alpha / 255)` + + \param surface the SDL_Surface structure to update + \param alpha the alpha value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Get the additional color value multiplied into blit operations. + + \param surface the SDL_Surface structure to query + \param r a pointer filled in with the current red color value + \param g a pointer filled in with the current green color value + \param b a pointer filled in with the current blue color value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Set an additional color value multiplied into blit operations. + + When this surface is blitted, during the blit operation each source color + channel is modulated by the appropriate color value according to the + following formula: + + `srcC = srcC * (color / 255)` + + \param surface the SDL_Surface structure to update + \param r the red color value multiplied into blit operations + \param g the green color value multiplied into blit operations + \param b the blue color value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Get the color key (transparent pixel) for a surface. + + The color key is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + If the surface doesn't have color key enabled this function returns -1. + + \param surface the SDL_Surface structure to query + \param key a pointer filled in with the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetColorKey + + + + Returns whether the surface has a color key + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.9. + + \sa SDL_SetColorKey + \sa SDL_GetColorKey + + + + Set the color key (transparent pixel) in a surface. + + The color key defines a pixel value that will be treated as transparent in + a blit. For example, one can use this to specify that cyan pixels should be + considered transparent, and therefore not rendered. + + It is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + RLE acceleration can substantially speed up blitting of images with large + horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + + \param surface the SDL_Surface structure to update + \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + \param key the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetColorKey + + + + Returns whether the surface is RLE enabled + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.14. + + \sa SDL_SetSurfaceRLE + + + + Save a surface to a file. + + Convenience macro. + + Set the RLE acceleration hint for a surface. + + If RLE is enabled, color key and alpha blending blits are much faster, but + the surface must be locked before directly accessing the pixels. + + \param surface the SDL_Surface structure to optimize + \param flag 0 to disable, non-zero to enable RLE acceleration + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_LockSurface + \sa SDL_UnlockSurface + + + + Load a surface from a file. + + Convenience macro. + + Save a surface to a seekable SDL data stream in BMP format. + + Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + BMP directly. Other RGB formats with 8-bit or higher get converted to a + 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + not supported. + + \param surface the SDL_Surface structure containing the image to be saved + \param dst a data stream to save to + \param freedst non-zero to close the stream after being written + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_LoadBMP_RW + \sa SDL_SaveBMP + + + + Load a BMP image from a seekable SDL data stream. + + The new surface should be freed with SDL_FreeSurface(). Not doing so will + result in a memory leak. + + src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + from a file, convert it to an SDL_Surface and then close the file. + + \param src the data stream for the surface + \param freesrc non-zero to close the stream after being read + \returns a pointer to a new SDL_Surface structure or NULL if there was an + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeSurface + \sa SDL_RWFromFile + \sa SDL_LoadBMP + \sa SDL_SaveBMP_RW + + + + Release a surface after directly accessing the pixels. + + \param surface the SDL_Surface structure to be unlocked + + \since This function is available since SDL 2.0.0. + + \sa SDL_LockSurface + + + + Set up a surface for directly accessing the pixels. + + Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + and read from `surface->pixels`, using the pixel format stored in + `surface->format`. Once you are done accessing the surface, you should use + SDL_UnlockSurface() to release it. + + Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + 0, then you can read and write to the surface at any time, and the pixel + format of the surface will not change. + + \param surface the SDL_Surface structure to be locked + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MUSTLOCK + \sa SDL_UnlockSurface + + + + Set the palette used by a surface. + + A single palette can be shared with many surfaces. + + \param surface the SDL_Surface structure to update + \param palette the SDL_Palette structure to use + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Free an RGB surface. + + It is safe to pass NULL to this function. + + \param surface the SDL_Surface to free. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_LoadBMP + \sa SDL_LoadBMP_RW + + + + Allocate a new RGB surface with with a specific pixel format and existing + pixel data. + + This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + instead of providing pixel color masks, you provide it with a predefined + format from SDL_PixelFormatEnum. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with existing pixel data. + + This function operates mostly like SDL_CreateRGBSurface(), except it does + not allocate memory for the pixel data, instead the caller provides an + existing buffer of data for the surface to use. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with a specific pixel format. + + This function operates mostly like SDL_CreateRGBSurface(), except instead + of providing pixel color masks, you provide it with a predefined format + from SDL_PixelFormatEnum. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_FreeSurface + + + + Allocate a new RGB surface. + + If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + If `depth` is greater than 8 bits, the pixel format is set using the + [RGBA]mask parameters. + + The [RGBA]mask parameters are the bitmasks used to extract that color from + a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + stored in the most significant byte. Using zeros for the RGB masks sets a + default value, based on the depth. For example: + + ```c++ + SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + ``` + + However, using zero for the Amask results in an Amask of 0. + + By default surfaces with an alpha mask are set up for blending as with: + + ```c++ + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + ``` + + You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + different `blendMode`. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + +Reference count -- used when freeing surface + + +info for fast blit mapping to other surfaces + + +clipping information + + +list of BlitMap that hold a reference to this surface + + +information needed for surfaces requiring locks + + +Application data associated with the surface + + + \brief A collection of pixels used in software blitting. + + \note This structure should be treated as read-only, except for \c pixels, + which, if not NULL, contains the raw pixel data for the surface. + + +\brief The type of function used for surface blitting functions. + + + + Compose a custom blend mode for renderers. + + The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + the SDL_BlendMode returned by this function if the renderer supports it. + + A blend mode controls how the pixels from a drawing operation (source) get + combined with the pixels from the render target (destination). First, the + components of the source and destination pixels get multiplied with their + blend factors. Then, the blend operation takes the two products and + calculates the result that will get stored in the render target. + + Expressed in pseudocode, it would look like this: + + ```c + dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + ``` + + Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + dst)` can return one of the following: + + - `src + dst` + - `src - dst` + - `dst - src` + - `min(src, dst)` + - `max(src, dst)` + + The red, green, and blue components are always multiplied with the first, + second, and third components of the SDL_BlendFactor, respectively. The + fourth component is not used. + + The alpha component is always multiplied with the fourth component of the + SDL_BlendFactor. The other components are not used in the alpha + calculation. + + Support for these blend modes varies for each renderer. To check if a + specific SDL_BlendMode is supported, create a renderer and pass it to + either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + return with an error if the blend mode is not supported. + + This list describes the support of custom blend modes for each renderer in + SDL 2.0.6. All renderers support the four blend modes listed in the + SDL_BlendMode enumeration. + + - **direct3d**: Supports all operations with all factors. However, some + factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + `SDL_BLENDOPERATION_MAXIMUM`. + - **direct3d11**: Same as Direct3D 9. + - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + 2.0.6. + - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. Color and alpha factors need to be the same. OpenGL ES 1 + implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + operations being different from each other. May support color and alpha + factors being different from each other. + - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + operations with all factors. + - **psp**: No custom blend mode support. + - **software**: No custom blend mode support. + + Some renderers do not provide an alpha component for the default render + target. The `SDL_BLENDFACTOR_DST_ALPHA` and + `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + case. + + \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the source pixels + \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the destination pixels + \param colorOperation the SDL_BlendOperation used to combine the red, + green, and blue components of the source and + destination pixels + \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + the source pixels + \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + the destination pixels + \param alphaOperation the SDL_BlendOperation used to combine the alpha + component of the source and destination pixels + \returns an SDL_BlendMode that represents the chosen factors and + operations. + + \since This function is available since SDL 2.0.6. + + \sa SDL_SetRenderDrawBlendMode + \sa SDL_GetRenderDrawBlendMode + \sa SDL_SetTextureBlendMode + \sa SDL_GetTextureBlendMode + + + + Calculate the intersection of a rectangle and line segment with float + precision. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_FRect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + + + Calculate a minimal rectangle enclosing a set of points with float + precision. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_FPoint structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_FRect used for clipping or NULL to enclose all points + \param result an SDL_FRect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.22. + + + + Calculate the union of two rectangles with float precision. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.22. + + + + Calculate the intersection of two rectangles with float precision. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_HasIntersectionF + + + + Determine whether two rectangles intersect with float precision. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_IntersectRect + + + + Returns true if the two rectangles are equal, using a default epsilon. + + \since This function is available since SDL 2.0.22. + + + + Returns true if the two rectangles are equal, within some given epsilon. + + \since This function is available since SDL 2.0.22. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + Calculate the intersection of a rectangle and line segment. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_Rect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + + + Calculate a minimal rectangle enclosing a set of points. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_Point structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_Rect used for clipping or NULL to enclose all points + \param result an SDL_Rect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.0. + + + + Calculate the union of two rectangles. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.0. + + + + Calculate the intersection of two rectangles. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_HasIntersection + + + + Determine whether two rectangles intersect. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_IntersectRect + + + +Returns true if the two rectangles are equal. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + A rectangle, with the origin at the upper left (floating point). + + \sa SDL_FRectEmpty + \sa SDL_FRectEquals + \sa SDL_FRectEqualsEpsilon + \sa SDL_HasIntersectionF + \sa SDL_IntersectFRect + \sa SDL_IntersectFRectAndLine + \sa SDL_UnionFRect + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + A rectangle, with the origin at the upper left (integer). + + \sa SDL_RectEmpty + \sa SDL_RectEquals + \sa SDL_HasIntersection + \sa SDL_IntersectRect + \sa SDL_IntersectRectAndLine + \sa SDL_UnionRect + \sa SDL_EnclosePoints + + + + The structure that defines a point (floating point) + + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + Use this function to write 64 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE64 + + + + Use this function to write 64 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE64 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE32 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE32 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE16 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE16 + + + + \name Write endian functions + + Write an item of native format to the specified endianness. + + Use this function to write a byte to an SDL_RWops. + + \param dst the SDL_RWops to write to + \param value the byte value to write + \returns 1 on success or 0 on failure; call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadU8 + + + + Use this function to read 64 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE64 + + + + Use this function to read 64 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE64 + + + + Use this function to read 32 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE32 + + + + Use this function to read 32 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE32 + + + + Use this function to read 16 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE16 + + + + Use this function to read 16 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE16 + + + + \name Read endian functions + + Read an item of the specified endianness and return in native format. + + Use this function to read a byte from an SDL_RWops. + + \param src the SDL_RWops to read from + \returns the read byte on success or 0 on failure; call SDL_GetError() for + more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteU8 + + + + Load all the data from a file path. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + Prior to SDL 2.0.10, this function was a macro wrapping around + SDL_LoadFile_RW. + + \param file the path to read all available data from + \param datasize if not NULL, will store the number of bytes read + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.10. + + + + Load all the data from an SDL data stream. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + \param src the SDL_RWops to read all available data from + \param datasize if not NULL, will store the number of bytes read + \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.6. + + + + Close and free an allocated SDL_RWops structure. + + SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + resources used by the stream and frees the SDL_RWops itself with + SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + flush to its output (e.g. to disk). + + Note that if this fails to flush the stream to disk, this function reports + an error, but the SDL_RWops is still invalid once this function returns. + + Prior to SDL 2.0.10, this function was a macro. + + \param context SDL_RWops structure to close + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Write to an SDL_RWops data stream. + + This function writes exactly `num` objects each of size `size` from the + area pointed at by `ptr` to the stream. If this fails for any reason, it'll + return less than `num` to demonstrate how far the write progressed. On + success, it returns `num`. + + SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + `write` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer containing data to write + \param size the size of an object to write, in bytes + \param num the number of objects to write + \returns the number of objects written, which will be less than **num** on + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + + + + Read from a data source. + + This function reads up to `maxnum` objects each of size `size` from the + data source to the area pointed at by `ptr`. This function may read less + objects than requested. It will return zero when there has been an error or + the data stream is completely read. + + SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + `read` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer to read data into + \param size the size of each object to read, in bytes + \param maxnum the maximum number of objects to be read + \returns the number of objects read, or 0 at error or end of file; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Determine the current read/write offset in an SDL_RWops data stream. + + SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a SDL_RWops data stream object from which to get the current + offset + \returns the current offset in the stream, or -1 if the information can not + be determined. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Seek within an SDL_RWops data stream. + + This function seeks to byte `offset`, relative to `whence`. + + `whence` may be any of the following values: + + - `RW_SEEK_SET`: seek from the beginning of data + - `RW_SEEK_CUR`: seek relative to current read point + - `RW_SEEK_END`: seek relative to the end of data + + If this stream can not seek, it will return -1. + + SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + `seek` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param offset an offset in bytes, relative to **whence** location; can be + negative + \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + \returns the final offset in the data stream after the seek or -1 on error. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to get the size of the data stream in an SDL_RWops. + + Prior to SDL 2.0.10, this function was a macro. + + \param context the SDL_RWops to get the size of the data stream from + \returns the size of the data stream in the SDL_RWops on success, -1 if + unknown or a negative error code on failure; call SDL_GetError() + for more information. + + \since This function is available since SDL 2.0.10. + + + + Use this function to free an SDL_RWops structure allocated by + SDL_AllocRW(). + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + call the **close** method on those SDL_RWops pointers when you are done + with them. + + Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + invalid as soon as this function returns. Any extra memory allocated during + creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + be responsible for managing that memory in their **close** method. + + \param area the SDL_RWops structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocRW + + + + Use this function to allocate an empty, unpopulated SDL_RWops structure. + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + + You must free the returned pointer with SDL_FreeRW(). Depending on your + operating system and compiler, there may be a difference between the + malloc() and free() your program uses and the versions SDL calls + internally. Trying to mix the two can cause crashing such as segmentation + faults. Since all SDL_RWops must free themselves when their **close** + method is called, all SDL_RWops must be allocated through this function, so + they can all be freed correctly with SDL_FreeRW(). + + \returns a pointer to the allocated memory on success, or NULL on failure; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeRW + + + + Use this function to prepare a read-only memory buffer for use with RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size. It assumes the memory area is not writable. + + Attempting to write to this RWops stream will report an error without + writing to the memory buffer. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to write to a memory buffer, you should use SDL_RWFromMem() + with a writable buffer of memory instead. + + \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + + + + Use this function to prepare a read-write memory buffer for use with + SDL_RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size, for both read and write access. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to make sure the RWops never writes to the memory buffer, you + should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + + \param mem a pointer to a buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to create an SDL_RWops structure from a standard I/O file + pointer (stdio.h's `FILE*`). + + This function is not available on Windows, since files opened in an + application on that platform cannot be used by a dynamically linked + library. + + On some platforms, the first parameter is a `void*`, on others, it's a + `FILE*`, depending on what system headers are available to SDL. It is + always intended to be the `FILE*` type from the C runtime's stdio.h. + + \param fp the `FILE*` that feeds the SDL_RWops stream + \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + SDL_FALSE to leave the `FILE*` open when the RWops is + closed + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + \name RWFrom functions + + Functions to create SDL_RWops structures from various data streams. + + Use this function to create a new SDL_RWops structure for reading from + and/or writing to a named file. + + The `mode` string is treated roughly the same as in a call to the C + library's fopen(), even if SDL doesn't happen to use fopen() behind the + scenes. + + Available `mode` strings: + + - "r": Open a file for reading. The file must exist. + - "w": Create an empty file for writing. If a file with the same name + already exists its content is erased and the file is treated as a new + empty file. + - "a": Append to a file. Writing operations append data at the end of the + file. The file is created if it does not exist. + - "r+": Open a file for update both reading and writing. The file must + exist. + - "w+": Create an empty file for both reading and writing. If a file with + the same name already exists its content is erased and the file is + treated as a new empty file. + - "a+": Open a file for reading and appending. All writing operations are + performed at the end of the file, protecting the previous content to be + overwritten. You can reposition (fseek, rewind) the internal pointer to + anywhere in the file for reading, but writing operations will move it + back to the end of file. The file is created if it does not exist. + + **NOTE**: In order to open a file as a binary file, a "b" character has to + be included in the `mode` string. This additional "b" character can either + be appended at the end of the string (thus making the following compound + modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + Additional characters may follow the sequence, although they should have no + effect. For example, "t" is sometimes appended to make explicit the file is + a text file. + + This function supports Unicode filenames, but they must be encoded in UTF-8 + format, regardless of the underlying operating system. + + As a fallback, SDL_RWFromFile() will transparently open a matching filename + in an Android app's `assets`. + + Closing the SDL_RWops will close the file handle SDL is holding internally. + + \param file a UTF-8 string representing the filename to open + \param mode an ASCII string representing the mode to be used for opening + the file. + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + +Return the size of the file in this rwops, or -1 if unknown + + + Seek to \c offset relative to \c whence, one of stdio's whence values: + RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + + \return the final offset in the data stream, or -1 on error. + + + Read up to \c maxnum objects each of size \c size from the data + stream to the area pointed at by \c ptr. + + \return the number of objects read, or 0 at error or end of file. + + + Write exactly \c num objects each of size \c size from the area + pointed at by \c ptr to data stream. + + \return the number of objects written, or 0 at error or end of file. + + + Close and free an allocated SDL_RWops structure. + + \return 0 if successful or -1 on write error when flushing data. + + + + Clear any previous error message for this thread. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetError + \sa SDL_SetError + + + + Get the last error message that was set for the current thread. + + This allows the caller to copy the error string into a provided buffer, but + otherwise operates exactly the same as SDL_GetError(). + + \param errstr A buffer to fill with the last error message that was set for + the current thread + \param maxlen The size of the buffer pointed to by the errstr parameter + \returns the pointer passed in as the `errstr` parameter. + + \since This function is available since SDL 2.0.14. + + \sa SDL_GetError + + + + Retrieve a message about the last error that occurred on the current + thread. + + It is possible for multiple errors to occur before calling SDL_GetError(). + Only the last error is returned. + + The message is only applicable when an SDL function has signaled an error. + You must check the return values of SDL function calls to determine when to + appropriately call SDL_GetError(). You should *not* use the results of + SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + an error string even when reporting success. + + SDL will *not* clear the error string for successful API calls. You *must* + check return values for failure cases before you can assume the error + string applies. + + Error strings are set per-thread, so an error set in a different thread + will not interfere with the current thread's operation. + + The returned string is internally allocated and must not be freed by the + application. + + \returns a message with information about the specific error that occurred, + or an empty string if there hasn't been an error message set since + the last call to SDL_ClearError(). The message is only applicable + when an SDL function has signaled an error. You must check the + return values of SDL function calls to determine when to + appropriately call SDL_GetError(). + + \since This function is available since SDL 2.0.0. + + \sa SDL_ClearError + \sa SDL_SetError + + + + Calculate a 256 entry gamma ramp for a gamma value. + + \param gamma a gamma value where 0.0 is black and 1.0 is identity + \param ramp an array of 256 values filled in with the gamma ramp + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetWindowGammaRamp + + + + Get RGBA values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + If the surface has no alpha component, the alpha will be returned as 0xff + (100% opaque). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + \param a a pointer filled in with the alpha component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Get RGB values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGBA + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Map an RGBA quadruple to a pixel value for a given pixel format. + + This function maps the RGBA color value to the specified pixel format and + returns the pixel value best approximating the given RGBA color value for + the given pixel format. + + If the specified pixel format has no alpha component the alpha value will + be ignored (as it will be in formats with a palette). + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \param a the alpha component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGB + + + + Map an RGB triple to an opaque pixel value for a given pixel format. + + This function maps the RGB color value to the specified pixel format and + returns the pixel value best approximating the given RGB color value for + the given pixel format. + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the specified pixel format has an alpha component it will be returned as + all 1 bits (fully opaque). + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the pixel format + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGBA + + + + Free a palette created with SDL_AllocPalette(). + + \param palette the SDL_Palette structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + + + + Set a range of colors in a palette. + + \param palette the SDL_Palette structure to modify + \param colors an array of SDL_Color structures to copy into the palette + \param firstcolor the index of the first palette entry to modify + \param ncolors the number of entries to modify + \returns 0 on success or a negative error code if not all of the colors + could be set; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_CreateRGBSurface + + + + Set the palette for a pixel format structure. + + \param format the SDL_PixelFormat structure that will use the palette + \param palette the SDL_Palette structure that will be used + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_FreePalette + + + + Create a palette structure with the specified number of color entries. + + The palette entries are initialized to white. + + \param ncolors represents the number of color entries in the color palette + \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + there wasn't enough memory); call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreePalette + + + + Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + + \param format the SDL_PixelFormat structure to free + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + + + + Create an SDL_PixelFormat structure corresponding to a pixel format. + + Returned structure may come from a shared global cache (i.e. not newly + allocated), and hence should not be modified, especially the palette. Weird + errors such as `Blit combination not supported` may occur. + + \param pixel_format one of the SDL_PixelFormatEnum values + \returns the new SDL_PixelFormat structure or NULL on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeFormat + + + + Convert a bpp value and RGBA masks to an enumerated pixel format. + + This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + possible. + + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask the red mask for the format + \param Gmask the green mask for the format + \param Bmask the blue mask for the format + \param Amask the alpha mask for the format + \returns one of the SDL_PixelFormatEnum values + + \since This function is available since SDL 2.0.0. + + \sa SDL_PixelFormatEnumToMasks + + + + Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + + \param format one of the SDL_PixelFormatEnum values + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask a pointer filled in with the red mask for the format + \param Gmask a pointer filled in with the green mask for the format + \param Bmask a pointer filled in with the blue mask for the format + \param Amask a pointer filled in with the alpha mask for the format + \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + possible; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MasksToPixelFormatEnum + + + + Get the human readable name of a pixel format. + + \param format the pixel format to query + \returns the human readable name of the specified pixel format or + `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + + \since This function is available since SDL 2.0.0. + + + +\note Everything in the pixel format structure is read-only. + + + +The bits of this structure can be directly reinterpreted as an integer-packed +color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 +on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + + + + If a + b would overflow, return -1. Otherwise store a + b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + If a * b would overflow, return -1. Otherwise store a * b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + This function converts a string between encodings in one pass, returning a + string that must be freed with SDL_free() or NULL on error. + + \since This function is available since SDL 2.0.0. + + + + Get the number of outstanding (unfreed) allocations + + \since This function is available since SDL 2.0.7. + + + + Replace SDL's memory allocation functions with a custom set + + \since This function is available since SDL 2.0.7. + + + + Get the current set of SDL memory functions + + \since This function is available since SDL 2.0.7. + + + + Get the original set of SDL memory functions + + \since This function is available since SDL 2.24.0. + + + +\endcond + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + + +\name Floating-point constants + +\cond + + +\brief An unsigned 64-bit integer type. + + + +\brief A signed 64-bit integer type. + + + +\brief An unsigned 32-bit integer type. + + + +\brief A signed 32-bit integer type. + + + +\brief An unsigned 16-bit integer type. + + + +\brief A signed 16-bit integer type. + + + +\brief An unsigned 8-bit integer type. + + + +\brief A signed 8-bit integer type. + + + + \file close_code.h + + This file reverses the effects of begin_code.h and should be included + after you finish any function and structure declarations in your headers + + + + \file SDL_stdinc.h + + This is a general header that includes C language support. + + \file SDL_platform.h + + Try to get a standard set of platform defines. + + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + Get the name of the platform. + + Here are the names returned for some (but not all) supported platforms: + + - "Windows" + - "Mac OS X" + - "Linux" + - "iOS" + - "Android" + + \returns the name of the platform. If the correct platform name is not + available, returns a string beginning with the text "Unknown". + + \since This function is available since SDL 2.0.0. + + + +*!************************************************************************* + + + +Marks the application to stop at the end of the current frame. + + + + +Whether or not the application is currently in fullscreen mode or not. + + + + +Retrieves the designated height of the current window. + + + + +Retrieves the designated width of the current window. + + + + +Whether or not the engine is in a paused state where script updates and +physics are not in play. + + + + +Whether or not the engine is playing. This will always be true on Publish. +On Debug/Release builds, this is true when the editor is in Play Mode. It +will also be true even if the editor is in Play Mode but is paused. + + + + +Static class that contains useful properties for querying the state of the +engine. + + + + +Sets the parent of this Transform component. + + +Entity that contains the Transform component that this Transform will be +parented to. If null, unparenting will occur. + + +If true, the transform values of this Transform component will retain their +pre-parent-change global transforms. The local transform values will be +modified to ensure that the global transforms do not change. + + + + +Parent Transform that affects this Transform. + + + + +Global scale stored by this Transform. + + + + +Global euler angle rotations stored by this Transform. + + + + +Global rotation quaternion stored by this Transform. + + + + +Global position stored by this Transform. + + + + +Local scale stored by this Transform. + + + + +Local euler angle rotations stored by this Transform. + + + + +Local rotation quaternion stored by this Transform. + + + + +Local position stored by this Transform. + + + + +Constructs a Transform Component that represents a native Transform component +tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's TransformComponent. + + + + +Compares if two float values are close enough to be the same with the +specified tolerance value. + + One of the values to compare. + The other value to compare. + Tolerance for floating point comparison. + True if a and b are practically the same. + + + +Compares if two float values are close enough to be the same with a tolerance +of Epsilon. + + One of the values to compare. + The other value to compare. + True if a and b are practically the same. + + + +Calculates the linear parameter t that produces the interpolant value within +the range [a, b]. + + Start value. + End value. + Value between start and end. + Percentage of value between start and end. + + + +Linearly interpolates between a and b by t. +The parameter t is not clamped and a value based on a and b is supported. +If t is less than zero, or greater than one, then LerpUnclamped will result +in a return value outside the range a to b. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Linearly interpolates between a and b by t. +The parameter t is clamped to the range [0, 1]. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Converts an angle from radian representation to degree representation. + + Radian-based angle to convert. + The specified angle in degrees. + + + +Converts an angle from degree representation to radian representation. + + Degree-based angle to convert. + The specified angle in radians. + + + +Wraps a value if they get to low or too high. + + Value to wrap. + Minimum value to wrap at. + Maximum value to wrap at. + Wrapped value. + + + +Small value used for single precision floating point comparisons. + + + + +Radians-to-degrees conversion constant + + + + +Degrees-to-radians conversion constant + + + + +Contains utility Math functions. + + + + +Logs a native exception that is formatted nicely to the output. + + Native exception to log. + Name of the one responsible for the exception. + + + +Logs an exception that is formatted nicely to the output. + + Name of the one responsible for the exception. + Exception to log. + + + +Logs a native exception that is formatted nicely to the output. +Equivalent to calling +LogException(exception, Convert::ToNative(thrower->GetType()->Name)); + + Native exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output. + + The string to output. + + + +Logs a error message to the output. + + The string to output. + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output. + + The string to output. + + + +Logs a message to the output. + + The string to output. + + + +Static class that contains the functions for working with time. + + + + +Material used to render this Renderable. + + + + +Material used to render this Renderable. + + + + +Mesh used to render this Renderable. + + + + +Constructs a Renderable Component that represents a native Renderable +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's SHRenderableComponent. + + + + +Retrieves the value of a specified property on the material. + + Type of property to get. + Name of the property to get. + Value of that property on the material. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Set the value of a specific property. + + Type of property to set. + Name of the property to set. + Value to set te property to. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Constructor for the Material + + Handle to the native material object. + + + +Managed counterpart of the native MaterialInstance object containing material +data that can be fed to Renderables for rendering. + + + + +Constructor for the Mesh + + Handle to the mesh object. + + + +Managed counterpart of the native Mesh object containing vertex data that can +be fed to Renderables for rendering. + + + +@brief Decomposes a transformation matrix into translation, orientation and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] orientation The orientation of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Decomposes a transformation matrix into translation, euler angles and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] rotation The euler angles of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Interface for a Column-Major Row Vector 4x4 Matrix. + + + + +Constructs a RigidBody Component that represents a native +SHRigidBodyComponent component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHRigidBodyComponent. + + + + +Creates an instance of the Managed representation of a Component with a +native Entity. + + Type of Component to create. + Native Entity that this Component is tied to. + The created Managed representation of the Component. + + + +Static constructor to initialize static data + + + + +Pointer to a function for Component manipulation operations. + + +Contains a set of Component related data used for resolving operations for +each Component. + + + + +Removes a Component from the specified Entity. + + Type of the Component to remove. + +Entity object that should have the specified Component removed from/ + + + + +Checks if the specified Entity has the specified Component. + + Type of the Component to check for. + Entity object to check for the Component. + +True if the specified Entity has the specified Component. False otherwise. + + + + +Ensures a Component on the specified Entity. + + Type of the Component to ensure. + Entity object to ensure the Component on. + Reference to the Component. + + + +Retrieves the first Component from the specified GameObjectt's children that +matches the specified type. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Gets a Component from the specified Entity. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Adds a Component to the specified Entity. + + Type of the Component to add. + +Entity object that should have the specified Component added to. + + Reference to the Component that was added. + + + +Static class which contains functions that map Pls::ECS's Component manipulation +functions to managed generic functions. + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Entity that this Component belongs to. + + + + +Constructor for BaseComponent to tie it to a specific Entity. +Constructors of derived Components should call this Constructor. + + Entity that this Component will be tied to. + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to Get. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to add. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Retrieves the GameObject that this Component belongs to. + + + + +Class that serves as the base for a wrapper class to Components in native code. + + + + +Called when the attached GameObject has a Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called just before the end of the frame where the attached GameObject or +this script is destroyed directly or indirectly due to destruction of the +owner. + + + + +Called every frame after physics and collision resolution but before +rendering. + + + + +Called every frame before physics and collision resolution. + + + + +Called every frame in sync with Physics update steps and thus in most cases +will execute more than update() will. This will be called immediately before +a Physics update step. + + + + +Called on the first frame that the attached GameObject is active but always +after Awake(). + + + + +Called on the first frame that the attached GameObject is active if they are +a part of the scene. + + + + +Called immediately once this script is detached from a GameObject. + + + + +Called immediately once this script is attached to a GameObject. + + + + +Constructor for Script to tie it to a specific GameObject. +Constructors of derived Scripts should call this Constructor. + + +GameObject that this Script will be tied to. + + + + +Used to call onTriggerExit(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerStay(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerEnter(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionExit(). This should be called when a collision ends +between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionStay(). This should be called when a collision is +persistent between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionEnter(). This should be called when a collision is +detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onDestroy(). This should be called at the end of the frame +where the attached GameObject or this script is destroyed directly or +indirectly due to destruction of the owner. + + + + +Used to call lateUpdate(). This should be called every frame after physics +and collision resolution but before rendering. + + + + +Used to call update(). This should be called every frame before physics and +collision resolution. + + + + +Used to call fixedUpdate(). This should be called in sync with Physics +update steps and thus in most cases will execute more than Update() will. +This will be called immediately before a Physics update step. + + + + +Used to call start(). This should be called on the first frame that the +attached GameObject is active but always after Awake(). + + + + +Used to call awake(). This should be called on the first frame that the +attached GameObject is active if they are a part of the scene. + + + + +Used to call onDetached(). This is called immediately when this script is +detached from a GameObject. + + + + +Used to call onAttached(). This is called immediately when this script is +attached to a GameObject. + + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + +Type of script to remove. +This needs to be a default constructable Script. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from this GameObject's children that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Retrieves the first Script from this GameObject that matches the specified +type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Adds a Script to this GameObject. + + +Type of script to add. +This needs to be a default constructable Script. + + Reference to the script added + + + +Removes a Component from the GameObject that this Script belongs to. + + +Type of the Component to remove. Must be derived from BaseComponent. + + + + +Ensures a Component on the GameObject that this Script belongs to. + + +Type of the Component to ensure. Must be derived from BaseComponent. + + Reference to the Component. + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Gets a Component from the GameObject that this Script belongs to. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Adds a Component to the GameObject that this Script belongs to. + + +Type of the Component to add. Must be derived from BaseComponent. + + Reference to the Component that was added. + + + +GameObject that this Script belongs to. + + + + +Class that forms the basis of all "script"-objects that can be attached to +Entities to update each Entity's Components via C# code. + + + + +The RigidBody that you are colliding with. + + + + +The CollisionShape of the Collider that you are colliding with. + + + + +The Collider that you are colliding with. + + + + +The GameObject whose collider you are colliding with. + + + + +Struct that describes a collision + + + + +Checks if two GameObject references are different. + + GameObject to check. + Another GameObject to check with. + True if both Components are different. + + + +Checks if two GameObject references are the same. + + GameObject to check. + Another GameObject to check with. + True if both Components are the same. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Retrieves the native Entity object that this GameObject represents. + + Native Entity object that this GameObject represents. + + + +Retrieves the CLR Entity object that this GameObject represents. + + Entity object that this GameObject represents. + + + +Constructor for the GameObject. + + +Managed numerical representation of the ECS Entity that this GameObject +should represent. + + + + +Constructor for the GameObject. + + +The ECS Entity that this GameObject should represent. + + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to retrieve. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from child GameObjects. +If multiple Scripts of the same specified type are added on the same +child GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Ensures a Component on this GameObject. + + Type of the Component to ensure. + +Reference to the Component. + + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + Type of the Component to get. + +Reference to the Component or null if neither of this GameObject's children +does not have the specified Component. + + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Sets the active state of this GameObject. +
    +The actual "activeness" of this GameObject is still dependent on the parents' +active states. +
    + +Whether to activate or deactivate this GameObject. + +
    + + +Sets the name of this GameObject. + + The name to set. + + + +Native Entity ID value for this GameObject. + + + + +Whether or not this Entity is active in the Scene hierarchy. + + + + +Whether or not this Entity alone, is active. This does not mean that this +object is active in the scene. For example, if this Entity's parent is not +active, then this Entity would also be not active. + + + + +Name of the object that this Entity represents. + + + + +Retrieves a GameObject with the specified name. If there are multiple +GameObjects with the same name, the first found GameObject will be retrieved. +There is no guaranteed order of which GameObject is considered "first". + + Name of the GameObject to find. + GameObject that has the specified name. Null if not found. + + + +Destroys the specified GameObject. Note that the specified GameObject will no +longer be a valid GameObject after this function is called. + + The GameObject to be destroyed. + + + +Creates a new GameObject in the current Scene. If multiple Scenes are loaded, +and you would like to create an object in a specific Scene, call the Scene's +CreateGameObject(). + + GameObject that represents the newly created GameObject. + + + +Lightweight object for an PlushieEngine Entity that allows for easy access +to Component and Script operations. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Maximum value for the Ranged field. + + + + +Minimum value for the Ranged field. + + + + +Simple attribute to constrain the range of values for a field on the editor. + + + + +Converts from a native std::Stringto a managed String. + + The native std::string to convert from. + Managed copy of a native std::string. + + + +Converts from a managed String to a native std::string. + + The managed String to convert from. + Native copy of a managed String. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a native Quaternion to a managed Quaternion. + + The native Quaternion to convert from. + Managed copy of a native Quaternion. + + + +Converts from a managed Quaternion to a native Quaternion. + + The managed Quaternion to convert from. + Native copy of a managed Quaternion. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a managed Vector2 to a native Vector2. + + The managed Vector2 to convert from. + Native copy of a managed Vector2. + + + +Converts from a native Vector3 to a managed Vector3. + + The native Vector3 to convert from. + Managed copy of a native Vector3. + + + +Converts from a managed Vector3 to a native Vector3. + + The managed Vector3 to convert from. + Native copy of a managed Vector3. + + + +Converts from a native Entity to a managed Entity (UInt32). + + Native Entity to convert from. + Managed representation of the specified Entity. + + + +Provides functions easy and consistent syntax for converting between custom +managed and native types that are aligned. + + + + +Converts to true if this is a valid Handle. + + + + +The library that the handle was issued by. + + + + +The internal ID of the handle. + + + + +Creates a ray starting at origin along direction. + + Source of the ray. + Direction the ray travels in. + + + +The direction that a ray travels in. + + + + +The start point of the ray. + + + + +CLR version of the the SHADE Engine's Ray class that represents a ray in +3-Dimensional space. + + + + +Are two quaternions equal to each other? + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Combines rotations lhs and rhs. + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Spherically interpolates between a and b by t. The parameter t is not clamped. + + + + +Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion spherically interpolated between quaternions a and b. + + + +Rotates a rotation from towards to.
    +The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). +Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. +
    +
    + + +Converts this quaternion to one with the same orientation but with a magnitude of 1. + + + + +Creates a rotation with the specified forward and upwards directions.
    +Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. +
    +
    + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. + + + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion interpolated between quaternions a and b. + + + +Returns the Inverse of rotation. + + + + +Creates a rotation which rotates from fromDirection to toDirection. + + + + +Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. + + + + +The dot product between two rotations. + + + + +Creates a rotation which rotates angle degrees around axis. + + + + +Returns the angle in degrees between two rotations a and b.
    + The angle in degrees between the two vectors. +
    + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Converts a rotation to angle-axis representation (angles in degrees). + + + + +Creates a rotation with the specified forward and upwards directions.
    +The result is applied to this quaternion. +If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. +Logs an error if the forward direction is zero. +
    + The direction to look in. + The vector that defines in which direction up is. +
    + + +Creates a rotation which rotates from fromDirection to toDirection.
    +Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). +These Vectors must be set up in a script. +
    +
    + + +Constructor to construct a Quaternion with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + W-coordinate to set. + + + +W-component of the Quaternion. Do not directly modify quaternions. + + + + +Z-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Y-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +X-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Shorthand for writing Quaternion(0, 0, 0, 1). + + + + +CLR version of SHADE's Quaternion class that represents an orientation. +Designed to closely match Unity's Quaternion struct. + + + + +Explicit conversion operator to enable explicit casting from a Vector2 to a +Vector3. + + Vector2 to convert from. + + + +Explicit conversion operator to enable explicit casting from a Vector3 to a +Vector2. + + Vector3 to convert from. + + + +Checks if two Vector3s are not approximately equal. This is equivalent to +calling !Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector3s are approximately equal. This is equivalent to +calling Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector3s and returns the +result. + + Vector3 to multiply with. + Another Vector3 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector3 from another Vector3 and returns the result. + + Vector3 to subtract from. + Another Vector3 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector3s together and returns the result. + + Vector3 to add. + Another Vector3 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector3. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Computes and returns a Vector3 that is made from the largest components of +the two specified Vector3s. + + Vector3 to calculate maximum Vector3 with. + Another Vector3 to calculate maximum Vector3 with. + +The Vector3 that contains the largest components of the two specified +Vector3s. + + + + +Computes and returns a Vector3 that is made from the smallest components of +the two specified Vector3s. + + Vector3 to calculate minimum Vector3 with. + Another Vector3 to calculate minimum Vector3 with. + +The Vector3 that contains the smallest components of the two specified +Vector3s. + + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector3 that represents the rotated vector. + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector3 that represents the rotated vector. + + + +Reflects a Vector3 across another Vector3. + + A Vector3 to reflect. + A normal to reflect the Vector3 across. + The Vector3 that represents vec reflected across normal. + + + +Computes and returns a Vector3 projection. + + Vector3 to project. + Vector3 to project onto. + The Vector3 that represents the projected vec onto direction. + + + +Computes and returns the cross product of 2 specified Vector3s. + + Vector3 to calculate cross product with. + Another Vector3 to calculate cross product with. + The cross product of the two Vector3s. + + + +Computes and returns the dot product of 2 specified Vector3s. + + Vector3 to calculate dot product with. + Another Vector3 to calculate dot product with. + Scalar value representing the dot product of the two Vector3s. + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + Amount of tolerance to do the comparison with. + +True if the two Vector3s are within the tolerance value specified + + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + +True if the two Vector3s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector3 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector3 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector3. + + Returns the squared length of this Vector3. + + + +Calculates and returns the magnitude of this Vector3. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector3. + + + +Creates a copy of this Vector3 and returns a normalized version. + + +Returns a normalised copy of this Vector3. +If this Vector3 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector3. This changes the data of this Vector3. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Conversion constructor to construct a Vector3 using a Vector2. + + + + + +Constructor to construct a Vector3 with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Z-component set to 0.0f. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Y and Z-component set to 0.0f. + + X-coordinate to set. + + + +Z-component of the Vector3. + + + + +Y-component of the Vector3. + + + + +X-component of the Vector3. + + + + +Shorthand for writing Vector3(0, 0, 0). + + + + +Shorthand for writing Vector3(0, 1, 0). + + + + +Shorthand for writing Vector3(1, 0, 0). + + + + +Shorthand for writing Vector3(float.PositiveInfinity, +float.PositiveInfinity, float.PositiveInfinity). + + + + +Shorthand for writing Vector3(1, 1, 1). + + + + +Shorthand for writing Vector3(float.NegativeInfinity, +float.NegativeInfinity, float.NegativeInfinity). + + + + +Shorthand for writing Vector3(-1, 0, 0). + + + + +Shorthand for writing Vector3(0, 0, 1). + + + + +Shorthand for writing Vector3(0, -1, 0). + + + + +Shorthand for writing Vector3(0, 0, -1). + + + + +CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. +Designed to closely match Unity's Vector3 struct. + + + + +Checks if two Vector2s are not approximately equal. This is equivalent to +calling !Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector2s are approximately equal. This is equivalent to +calling Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector2s and returns the +result. + + Vector2 to multiply with. + Another Vector2 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector2 from another Vector2 and returns the result. + + Vector2 to subtract from. + Another Vector2 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector2s together and returns the result. + + Vector2 to add. + Another Vector2 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector2. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector2. + + + +Computes and returns a Vector2 that is made from the largest components of +the two specified Vector2s. + + Vector2 to calculate maximum Vector2 with. + Another Vector2 to calculate maximum Vector2 with. + +The Vector2 that contains the largest components of the two specified +Vector2s. + + + + +Computes and returns a Vector2 that is made from the smallest components of +the two specified Vector2s. + + Vector2 to calculate minimum Vector2 with. + Another Vector2 to calculate minimum Vector2 with. + +The Vector2 that contains the smallest components of the two specified +Vector2s. + + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector2 that represents the rotated vector. + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector2 that represents the rotated vector. + + + +Reflects a Vector2 across another Vector2. + + A Vector2 to reflect. + A normal to reflect the Vector2 across. + The Vector2 that represents vec reflected across normal. + + + +Computes and returns a Vector2 projection. + + Vector2 to project. + Vector2 to project onto. + The Vector2 that represents the projected vec onto direction. + + + +Computes a perpendicular Vector2 to the specified Vector2. + + Vector2 to find a perpendicular of. + +Whether the inward perpendicular Vector is retrieved. If true, the +resultant vector is rotated 90-degrees in a counter-clockwise. + + The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes the inward perpendicular Vector2 to the specified Vector2. +Equivalent to calling Perpendicular(lhs, true). This means, the +resultant Vector2 is rotated 90-degrees in a counter-clockwise. + + Vector2 to find a perpendicular of. + +The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes and returns the dot product of 2 specified Vector2s. + + Vector2 to calculate dot product with. + Another Vector2 to calculate dot product with. + +Scalar value representing the dot product of the two Vector2s. + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +Amount of tolerance to do the comparison with. + + +True if the two Vector2s are within the tolerance value specified + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +True if the two Vector2s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector2 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector2 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector2. + + Returns the squared length of this Vector2. + + + +Calculates and returns the magnitude of this Vector2. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector2. + + + +Creates a copy of this Vector2 and returns a normalized version. + + +Returns a normalised copy of this Vector2. +If this Vector2 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector2. This changes the data of this Vector2. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Constructor to construct a Vector2 with the specified components.. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector2 with the specified components with the +Y-component set to 0.0f. + + X-coordinate to set. + + + +Y-component of the Vector2. + + + + +X-component of the Vector2. + + + + +Shorthand for writing Vector2(0, 0). + + + + +Shorthand for writing Vector2(0, 1). + + + + +Shorthand for writing Vector2(1, 0). + + + + +Shorthand for writing Vector2(float.PositiveInfinity, +float.PositiveInfinity). + + + + +Shorthand for writing Vector2(1, 1). + + + + +Shorthand for writing Vector2(float.NegativeInfinity, +float.NegativeInfinity). + + + + +Shorthand for writing Vector2(-1, 0). + + + + +Shorthand for writing Vector2(0, -1). + + + + +CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. +Designed to closely match Unity's Vector2 struct. + + + + +Checks if the specified entity is valid. This is done by checking if it +matches Pls::Entity::INVALID. + + The Entity to check. + True if the specified Entity is valid. + + + +Static class that contains useful utility functions for working with Entity. + + + + +Manages all resources in multiple ResourceLibraries. + + + + +Base class for SHResourceLibrary that holds information about the library type. + + + + +Template Specialization for Handle that represents a type-less Handle. + + + + +Converts to true if this is a valid Handle. + + + + +Native ID type of a handle + + + + +Base implementation of the Handle that is not templated to allow for holding +generic non-type-specific Handles. + + + + +Exception thrown when a generic Handle is being casted to the wrong type. + + + + +Exception thrown when an invalid Handle was dereferenced. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/bin/Release/SHADE_CSharp.xml b/bin/Release/SHADE_CSharp.xml new file mode 100644 index 00000000..daeaa3c5 --- /dev/null +++ b/bin/Release/SHADE_CSharp.xml @@ -0,0 +1,1029 @@ + + + + SHADE_CSharp + + + + + Interface for a CallbackAction that all variants inherit from. + + + + + Whether or not this CallbackAction is runtime assigned. If it is, then the + TargetMethodName and TargetObject properties are invalid. + + + + + Name of the method that this CallbackAction is using. + + + + + Object which the specified target method is called on. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 1 parameter. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 2 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 3 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 4 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 5 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 6 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 7 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 8 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 9 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 10 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Interface for a CallbackEvent that all variants inherit from. + + + + + Registers an empty ICallbackAction. + + + + + Registers an ICallbackAction with the event such that it will be called in + future + + ICallbackAction to register with. + + + + Deregisters an ICallbackAction that was previously added. This should + only emit a warning if an action that was not previous added was + provided. + + ICallbackAction to remove. + + + + Iterable set of ICallbackActions that were registered to this event. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + diff --git a/bin/Release/SHADE_Managed.xml b/bin/Release/SHADE_Managed.xml new file mode 100644 index 00000000..7b653116 --- /dev/null +++ b/bin/Release/SHADE_Managed.xml @@ -0,0 +1,6250 @@ + + + + "SHADE_Managed" + + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Sets the position of the mouse cursor relative to the top left corner of the +window. + + +Position of the mouse in window pixel coordinates to set. + + + + +Checks if a specified mouse button is no longer pressed and was pressed +before. + + MouseCode of the mouse button to check. + +True during the frame the user releases the given mouse button. + + + + +Checks if a specified mouse button is pressed and was not pressed before. + + MouseCode of the mouse button to check. + +True during the frame the user pressed the given mouse button. + + + + +Checks if a specified mouse button is being held down. +This will also be true if GetMouseButtonDown() is true. + + MouseCode of the mouse button to check. + True while the user holds down the mouse button specified. + + + +Checks if a specified key is no longer pressed pressed and was pressed +before. + + KeyCode of the key to check. + +True during the frame the user releases the key identified by name. + + + + +Checks if a specified key is pressed and was not pressed before. + + KeyCode of the key to check. + +True during the frame the user starts pressing down the key specified. + + + + +Checks if a specified key is being held down. +This will also be true if GetKeyDown() is true. + + KeyCode of the key to check. + True while the user holds down the key specified. + + + +Amnount of vertical mouse scroll in this frame. + + + + +Mouse position in screen coordinates relative to the top left of the window. +This value is a Vector3 for compatibility with functions that have Vector3 +arguments. The z component of the Vector3 is always 0 + + + + +Represents the available supported mouse keycodes that can be passed into the +mouse-button-based Input functions. + + + + +Represents the available supported keycodes that can be passed into the +key-based Input functions. + +Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html +Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode + + + + +Static class responsible for providing access to Input-related functionality. + + + + +Simple attribute to mark that a field in a Script should be serialised. + + + + +Cleans up all required components for managed code. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. +Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Initialises all required components for managed code. + + + + +Name of the Managed Library that contains the C# scripts written externally. + + + + +Static class that contains the functions for interfacing with the core +PlushieEngine written in C++ for managing the lifecycle of managed code. + + + + +Default Constructor + + + + +Custom AssemblyLoadContext marked as collectible so that it can be unloaded. + + + + +Time taken for Physics simulations. You should use this for operations +within Script.FixedUpdate() + + + + +Time taken to process the previous frame. + + + + +Static class that contains the functions for working with time. + + + + +Static class that wraps up certain functions in the SHPhysicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Description that is to be shown in the Tooltip. + + + + +Simple attribute to provide a field in a script with a tooltip. + + + + +Checks if a specified file exists. + + File path to the file to check. + True if the file exists + + + +Deletes the folder and all files in it as specified by the file path. + + File path to the file to delete. + + + +Deletes the file as specified by the file path. + + File path to the file to delete. + + + +Reads the file via the specified path that represents a build log of error +and warning messages. + + +File path to the build log of script builds done by BuildScriptAssembly() to +dump and process. + + + + +Registers events for the scripting system + + + + +Loads all the function pointers to CLR code that we need to execute. + + + + +Generates a .csproj file for editing and compiling the C# scripts. + + File path to the generated file. + + + +Utilises execution of a external batch file for invoking the dotnet build +tool to compile C# scripts in the Assets folder into the SHADE_Scripting +C# assembly DLL. + + +Whether or not a debug build will be built. Only debug built C# assemblies +can be debugged. + + +Whether or not we are reloading the assembly, if so, unload and then reload it. + + Whether or not the build succeeded. + + + +Performs a redo for script inspector changes if it exists. + + + + +Performs an undo for script inspector changes if it exists. + + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Creates scripts and sets fields for the specified Entity based on the specified +YAML node. + + The Entity to deserialise a Script on to. + +YAML Node that contains the serialised script data. + + True if successfully deserialised. + + + +Performs serialization of all scripts for the specified entity into the +YAML::Node specified. This node will contain all serialised scripts after +calling this function. + + The Entity to Serialise. + +YAML Node that will store the serialised scripts. + + True if successfully serialised. + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts. This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Adds a Script to a specified Entity. Note that while you can call this +multiple times on a specified Entity, it will work for all intents and +purposes but GetScript<T>() (C# only) currently only +gives you the first Script added of the specified type. + + The entity to add a script to. + Type name of the script to add. + +True if successfully added. False otherwise with the error logged to the +console. + + + + +Shuts down the DotNetRuntime. + + + + +Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached +to Entities. + + + + +Executes the FixedUpdate()s of the Scripts that are attached to +Entities. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Initialises the DotNetRuntime and retrieves function pointers to all +functions on the CLR used to interface with the engine. + + + + +Manages initialisation of the DotNetRuntime and interfacing with CLR code written +and executed on .NET. + + + + +Deserialises a YAML node that contains a map of Scripts and copies the +deserialised data into the specified object if there are matching fields. + + +The JSON string that contains the data to copy into this Script object. + + The object to copy deserialised data into. + + + +Creates a JSON node that represents the specified object and its associated +serialisable fields. Public fields and fields marked with the SerialiseField +attribute will be serialised. + + The object to serialise. + + + +Checks if a specified field is a candidate for serialisation. This means that +the field is public or private with the [SerialiseField] attribute. + + The field to check. + +True if the specified field is a candidate for serialisation. + + + + +Retrieves a set of all non-static (instance) fields from a specified object. + + The object to get non-static fields from. + Immutable list of non-static fields. + + + +Contains useful static functions for working with Reflection. + + + +Converts the node to a YAML string. + + +Emits the node to the given output stream. + + +Emits the node to the given {@link Emitter}. If there is an error in writing, +{@link Emitter#good} will return false. + + + + Loads the input file as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input file as a single YAML document. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + +Handles a "TAG" directive, which should be of the form 'handle prefix', +where 'handle' is converted to 'prefix' in the file. + + + +Handles a "YAML" directive, which should be of the form 'major.minor' (like +a version number). + + + +Reads any directives that are next in the queue, setting the internal +{@code m_pDirectives} state. + + + + Handles the next document by calling events on the {@code eventHandler}. + + @throw a ParserException on error. + @return false if there are no more documents + + + +Resets the parser with the given input stream. Any existing state is +erased. + + + +Evaluates to true if the parser has some valid input to be read. + + +Constructs a parser from the given input stream. The input stream must +live as long as the parser. + + + +Constructs an empty parser (with no input. + + +A parser turns a stream of bytes into one stream of "events" per YAML +document in the input stream. + + + + +Renders a context menu when right clicked for the scripts + + The Entity to render the Scripts of. + The Script to render the inspector for. + + + +Renders a field specified into the inspector. + + The field to render. + +The object that contains the data of the field to render. + + + + +Renders a single specified Script's inspector. + + The Entity to render the Scripts of. + The Script to render the inspector for. + +Indices used internally to differentiate each rendered Script +inspector. This is required to open and close each Script's inspector +independently from each other. + + + + +Redoes the last script inspector change if there is any. + + + + +Undoes the last script inspector change if there is any. + + + + +Renders a dropdown button that allows for the addition of PlushieScripts +onto the specified Entity. + + The Entity to add PlushieScripts to. + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Static class for Editor-related functions + + + + +Processes a YAML node that contains a list of multiple scripts to be loaded +into the specified Entity. +

    +This function should only be called from native unmanaged code. +
    + +The Entity to attach the deserialised Scripts to. + + +Pointer to the YAML::Node that contains serialized script data. + + +
    + + +Populates a YAML node with the scripts for a specified Entity. +

    +This function should only be called from native unmanaged code. +
    + The Entity to Serialise. + +Pointer to a YAML::Node that will be populated with all of the serialised +scripts and their associated fields. + + +True if serialisation is successful. False if the buffer is too small for +the serialised output. + +
    + + +Executes OnCollision*() and OnTrigger*() for all scripts. + + + + +Executes LateUpdate() for all scripts. + + + + +Executes Update() for all scripts. + + + + +Executes FixedUpdate() for all scripts. + + + + +Retrieves a immutable list of available scripts that can be added. + + Immutable list of available scripts that can be added. + + + +Cleans up data stored in the ScriptStore to free up memory for garbage +collection. + + + + +Cleans up scripts that were marked for deletion. This calls the OnDestroy() +for these Scripts. + + + + +Sets up scripts that were marked for initialization. This calls the Awake() +and Start() for Scripts that have yet to have done so. + + + + +Initializes the ScriptStore to allocate and pre-populate reflection data. + + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts.This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Removes a specific script from the + + The entity to remove the script from. + The script to remove. + True if successfully removed. False otherwise. + + + +Removes all Scripts of the specified type from the specified Entity. + + +Type of script to remove. +This needs to be a default constructable Script. + + The entity to remove the script from. + +If the specified Entity is invalid. + + + + +Retrieves an immutable list of all scripts attached to a specified Entity. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts attached to the specified Entity. +This can also be null if there are no scripts at all or an invalid Entity +was specified. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from the specified Entity's children that matches +the specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Retrieves the first Script from the specified Entity that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code or for serialisation +purposes. If you are writing in C# or C++/CLI and not doing serialisation, +use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +Out parameter handle to the Script that was created. + + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code. If you are writing +in C# or C++/CLI, use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. + + +Type of script to add. +This needs to be a default constructable PlushieScript. + + The entity to add a script to. + Reference to the script added. + +If the specified Entity is invalid. + + + + +Responsible for managing all scripts attached to Entities as well as executing +all lifecycle functions of scripts. + + + + +Checks if two Colors are not approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Colors are approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Color with a scalar value and returns +the result. + + Scalar to divide with. + Color to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Color with a scalar value and returns +the result. + + Color to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Colors and returns the +result. + + Color to multiply with. + Another Color to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Color from another Color and returns the result. + + Color to subtract from. + Another Color to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Colors together and returns the result. + + Color to add. + Another Color to add. + The result of lhs added to rhs + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + Value used to interpolate between a and b. + The interpolated Color. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Alpha component of the colour. Ranges from 0.0f to 1.0f. + + + + +Blue component of the colour. Ranges from 0.0f to 1.0f. + + + + +Green component of the colour. Ranges from 0.0f to 1.0f. + + + + +Red component of the colour. Ranges from 0.0f to 1.0f. + + + + +Constructor to construct a Color with the specified components. + + Red component to set. + Green component to set. + Blue component to set. + Alpha component to set. + + + +Constructor to construct a Color with the specified components with the +alpha component set to 1.0f. + + Red component to set. + Green component to set. + Blue component to set. + + + +Constructor to construct a Color with the specified components with the +blue and alpha component set to 1.0f. + + Red component to set. + Green component to set. + + + +Constructor to construct a Color with the specified components with the +green, blue and alpha component set to 1.0f. + + Red component to set. + + + +Pure yellow, mix of pure red and green. + + + + +Pure magenta, mix of pure red and blue. + + + + +Pure cyan, mix of pure green and blue. + + + + +Pure blue. + + + + +Pure green. + + + + +Pure red. + + + + +Pure white. + + + + +Dark Gray, darker than gray. + + + + +Gray, halfway between black and white. + + + + +Light Gray, lighter than gray. + + + + +Pure black. + + + + +A static class that contains a set of default Colors. + + + + +CLR version of the the SHADE Engine's Color struct which describes a Color +encoded using floating point numbers that range from 0.0f to 1.0f. + + + + +Creates a inline button widget. +
    +Wraps up ImGui::Button(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a small inline button widget. +
    +Wraps up ImGui::SmallButton(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a visual text widget. +
    +Wraps up ImGui::Text(). +
    + Text to display. +
    + + +Creates a menu item in the list of items for a mini popup. +
    +Wraps up ImGui::MenuItem(). +
    + Label used to identify this widget. + Whether or not the menu item was selected. +
    + + +Opens the popup that was defined with the specified label. +
    +Wraps up ImGui::OpenPopup(). +
    +
    + + +Marks the end of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::EndPopup(). +
    +
    + + +Marks the start of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::BeginPopup(). +
    + Label used to identify this widget. + Whether or not the pop up is open. +
    + + +Creates a collapsing title header. +
    +Wraps up ImGui::CollapsingHeader(). +
    + Label for the header. + True if the header is open, false otherwise. +
    + + +Unindents the widgets rendered after this call. +
    +Wraps up ImGui::Unindent(). +
    +
    + + +Indents the widgets rendered after this call. +
    +Wraps up ImGui::Indent(). +
    +
    + + +Marks the end of a stack of ImGui widgets from the last PushID() call. +
    +Wraps up ImGui::PopID(). +
    +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + Integer-based ID. +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + String-based ID. +
    + + +Maximum length of a string supported by InputTextField() + + + + +Static class that contains useful functions for Editor UI using ImGui. + + + + +Redoes the last undo-ed command if it exists. + + + + +Undos the last added command if it exists. + + + + +Adds a command onto the stack. + + + + + +True if there is a redoable action in the stack. + + + + +True if there is an undoable action in the stack. + + + + +Command for the stack that represents a data modification. + + + + +Class that is able to store a stack of actions that can be done and redone. + + + + +To be called from native code when a Collision Shape has been changed. + + +The entity which has it's collision shape changed. + + + + +To be called from native code when a collision shape has been removed. + + The entity which has it's collision shape removed. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list +and casts it to the appropriate type. + + Type of the ColliderBound to cast to. + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list. + + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Total number of ColliderShapes in the Collider component. + + + + +Constructs a Collider Component that represents a native SHColliderComponent +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHColliderComponent. +A single Collider component can contain one or multiple Collider Bounds. + + + + + + + + + + +Radius of the Bounding Sphere formed by this bound. + + + + +Center of the Bounding Sphere formed by this bound. + + + + +Sphere-shaped Collider Bound. + + + + + + + + + + +Position of the top right front corner of the Bounding Box formed by this +bound. + + + + +Position of the bottom left back corner of the Bounding Box formed by this +bound. + + + + +Half of the scale of the Bounding Box formed by this bound. + + + + +Center of the Bounding Box formed by this bound. + + + + +Box-shaped Collider Bound. + + + + +Computes a Raycast and checks if there is a collision with any object. + + The ray to cast. + Maximum distance for the raycast check. + True if the ray intersects with an object in the scene. + + + +Checks if the specified point is within this shape's bounds. + + Point to test with. + True if the point is in the shape's bounds. + + + +Base interface for all Collider Shapes. + + + +@brief The density of the collider that determines the mass of the collision shape + if it is automatically computed. Must be a positive number. + + + +@brief The bounciness factor of the physics object., clamped between [0,1].
    + 0 means the object will never bounce. + 1 means the object never loses energy on a bounce. + +
    + +@brief The friction coefficient of the physics object., clamped between [0,1].
    + 0 means the object will never experience friction. + 1 means the friction force against the object is equal to the applied force. + +
    + +@brief Sets the mass density of the physics material. +@param newDensity The density value to set. Always made positive. + + + +@brief Sets the bounciness factor of the physics material. +@param newBounciness The bounciness value to set. Clamped between [0,1]. + + + +@brief Sets the friction coefficient of the physics material. +@param newFriction The friction value to set. Clamped between [0,1]. + + + +@brief Default constructor for a physics material. +@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. +@param bounciness The bounciness of the material. Clamped between [0,1]. +@param density The mass density of the material. Always made positive. + + + + +Closes the current window, and depending on the implementation, should also +close the application. + + + + +Retrieves the current window fullscreen status. + + The current window fullscreen status.. + + + +Retrieves the current window height. + + The current window height. + + + +Retrieves the current window width. + + The current window width. + + + +Static class that wraps up certain functions in the SHGraphicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + @brief Perform ImGui and ImGui Backend Render + + + + + @brief Start new frame for editor + + + + + @brief Initialise Backend for ImGui (SDL and Vulkan backend) + + @param sdlWindow Pointer to SDL_Window + + + + @brief Set the Style for the editor + + @param style Desired style + + + + @brief Safely shutdown the editor + + + + + @brief Update the editor and add to ImGui DrawList + + @param dt Delta-time of the frame + + + + @brief Initialise the editor + + @param sdlWindow pointer to SDL_Window object created in application + + + + @brief Style options + + + + + @brief SHEditor static class contains editor variables and implementation of editor functions. + + + + + Get the YUV conversion mode, returning the correct mode for the resolution + when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + + \since This function is available since SDL 2.0.8. + + + + Get the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Set the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Perform low-level surface scaled blitting only. + + This is a semi-private function and it performs low-level surface blitting, + assuming the input rectangles have already been clipped. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform a scaled surface copy to a destination surface. + + SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + merely a macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform bilinear scaling between two surfaces of the same format, 32BPP. + + \since This function is available since SDL 2.0.16. + + + + Perform a fast, low quality, stretch blit between two surfaces of the same + format. + + Please use SDL_BlitScaled() instead. + + \since This function is available since SDL 2.0.0. + + + + Perform low-level surface blitting only. + + This is a semi-private blit function and it performs low-level surface + blitting, assuming the input rectangles have already been clipped. + + Unless you know what you're doing, you should be using SDL_BlitSurface() + instead. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied, or NULL to copy the entire surface + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + + Perform a fast blit from the source surface to the destination surface. + + SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + Perform a fast fill of a set of rectangles with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rects an array of SDL_Rects representing the rectangles to fill. + \param count the number of rectangles in the array + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRect + + + + Perform a fast fill of a rectangle with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rect the SDL_Rect structure representing the rectangle to fill, or + NULL to fill the entire surface + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRects + + + + Premultiply the alpha on a block of pixels. + + This is safe to use with src == dst, but not for other overlapping areas. + + This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + + \param width the width of the block to convert, in pixels + \param height the height of the block to convert, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with premultiplied pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.18. + + + + Copy a block of pixels of one format to another format. + + \param width the width of the block to copy, in pixels + \param height the height of the block to copy, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with new pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Copy an existing surface to a new surface of the specified format enum. + + This function operates just like SDL_ConvertSurface(), but accepts an + SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + it might be easier to call but it doesn't have access to palette + information for the destination surface, in case that would be important. + + \param src the existing SDL_Surface structure to convert + \param pixel_format the SDL_PixelFormatEnum that the new surface is + optimized for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurface + \sa SDL_CreateRGBSurface + + + + Copy an existing surface to a new surface of the specified format. + + This function is used to optimize images for faster *repeat* blitting. This + is accomplished by converting the original and storing the result as a new + surface. The new, optimized surface can then be used as the source for + future blits, making them faster. + + \param src the existing SDL_Surface structure to convert + \param fmt the SDL_PixelFormat structure that the new surface is optimized + for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurfaceFormat + \sa SDL_CreateRGBSurface + + + + Get the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + \param surface the SDL_Surface structure representing the surface to be + clipped + \param rect an SDL_Rect structure filled in with the clipping rectangle for + the surface + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetClipRect + + + + Set the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + Note that blits are automatically clipped to the edges of the source and + destination surfaces. + + \param surface the SDL_Surface structure to be clipped + \param rect the SDL_Rect structure representing the clipping rectangle, or + NULL to disable clipping + \returns SDL_TRUE if the rectangle intersects the surface, otherwise + SDL_FALSE and blits will be completely clipped. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetClipRect + + + + Get the blend mode used for blit operations. + + \param surface the SDL_Surface structure to query + \param blendMode a pointer filled in with the current SDL_BlendMode + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetSurfaceBlendMode + + + + Set the blend mode used for blit operations. + + To copy a surface to another surface (or texture) without blending with the + existing data, the blendmode of the SOURCE surface should be set to + `SDL_BLENDMODE_NONE`. + + \param surface the SDL_Surface structure to update + \param blendMode the SDL_BlendMode to use for blit blending + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceBlendMode + + + + Get the additional alpha value used in blit operations. + + \param surface the SDL_Surface structure to query + \param alpha a pointer filled in with the current alpha value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Set an additional alpha value used in blit operations. + + When this surface is blitted, during the blit operation the source alpha + value is modulated by this alpha value according to the following formula: + + `srcA = srcA * (alpha / 255)` + + \param surface the SDL_Surface structure to update + \param alpha the alpha value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Get the additional color value multiplied into blit operations. + + \param surface the SDL_Surface structure to query + \param r a pointer filled in with the current red color value + \param g a pointer filled in with the current green color value + \param b a pointer filled in with the current blue color value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Set an additional color value multiplied into blit operations. + + When this surface is blitted, during the blit operation each source color + channel is modulated by the appropriate color value according to the + following formula: + + `srcC = srcC * (color / 255)` + + \param surface the SDL_Surface structure to update + \param r the red color value multiplied into blit operations + \param g the green color value multiplied into blit operations + \param b the blue color value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Get the color key (transparent pixel) for a surface. + + The color key is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + If the surface doesn't have color key enabled this function returns -1. + + \param surface the SDL_Surface structure to query + \param key a pointer filled in with the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetColorKey + + + + Returns whether the surface has a color key + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.9. + + \sa SDL_SetColorKey + \sa SDL_GetColorKey + + + + Set the color key (transparent pixel) in a surface. + + The color key defines a pixel value that will be treated as transparent in + a blit. For example, one can use this to specify that cyan pixels should be + considered transparent, and therefore not rendered. + + It is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + RLE acceleration can substantially speed up blitting of images with large + horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + + \param surface the SDL_Surface structure to update + \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + \param key the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetColorKey + + + + Returns whether the surface is RLE enabled + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.14. + + \sa SDL_SetSurfaceRLE + + + + Save a surface to a file. + + Convenience macro. + + Set the RLE acceleration hint for a surface. + + If RLE is enabled, color key and alpha blending blits are much faster, but + the surface must be locked before directly accessing the pixels. + + \param surface the SDL_Surface structure to optimize + \param flag 0 to disable, non-zero to enable RLE acceleration + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_LockSurface + \sa SDL_UnlockSurface + + + + Load a surface from a file. + + Convenience macro. + + Save a surface to a seekable SDL data stream in BMP format. + + Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + BMP directly. Other RGB formats with 8-bit or higher get converted to a + 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + not supported. + + \param surface the SDL_Surface structure containing the image to be saved + \param dst a data stream to save to + \param freedst non-zero to close the stream after being written + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_LoadBMP_RW + \sa SDL_SaveBMP + + + + Load a BMP image from a seekable SDL data stream. + + The new surface should be freed with SDL_FreeSurface(). Not doing so will + result in a memory leak. + + src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + from a file, convert it to an SDL_Surface and then close the file. + + \param src the data stream for the surface + \param freesrc non-zero to close the stream after being read + \returns a pointer to a new SDL_Surface structure or NULL if there was an + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeSurface + \sa SDL_RWFromFile + \sa SDL_LoadBMP + \sa SDL_SaveBMP_RW + + + + Release a surface after directly accessing the pixels. + + \param surface the SDL_Surface structure to be unlocked + + \since This function is available since SDL 2.0.0. + + \sa SDL_LockSurface + + + + Set up a surface for directly accessing the pixels. + + Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + and read from `surface->pixels`, using the pixel format stored in + `surface->format`. Once you are done accessing the surface, you should use + SDL_UnlockSurface() to release it. + + Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + 0, then you can read and write to the surface at any time, and the pixel + format of the surface will not change. + + \param surface the SDL_Surface structure to be locked + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MUSTLOCK + \sa SDL_UnlockSurface + + + + Set the palette used by a surface. + + A single palette can be shared with many surfaces. + + \param surface the SDL_Surface structure to update + \param palette the SDL_Palette structure to use + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Free an RGB surface. + + It is safe to pass NULL to this function. + + \param surface the SDL_Surface to free. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_LoadBMP + \sa SDL_LoadBMP_RW + + + + Allocate a new RGB surface with with a specific pixel format and existing + pixel data. + + This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + instead of providing pixel color masks, you provide it with a predefined + format from SDL_PixelFormatEnum. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with existing pixel data. + + This function operates mostly like SDL_CreateRGBSurface(), except it does + not allocate memory for the pixel data, instead the caller provides an + existing buffer of data for the surface to use. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with a specific pixel format. + + This function operates mostly like SDL_CreateRGBSurface(), except instead + of providing pixel color masks, you provide it with a predefined format + from SDL_PixelFormatEnum. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_FreeSurface + + + + Allocate a new RGB surface. + + If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + If `depth` is greater than 8 bits, the pixel format is set using the + [RGBA]mask parameters. + + The [RGBA]mask parameters are the bitmasks used to extract that color from + a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + stored in the most significant byte. Using zeros for the RGB masks sets a + default value, based on the depth. For example: + + ```c++ + SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + ``` + + However, using zero for the Amask results in an Amask of 0. + + By default surfaces with an alpha mask are set up for blending as with: + + ```c++ + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + ``` + + You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + different `blendMode`. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + +Reference count -- used when freeing surface + + +info for fast blit mapping to other surfaces + + +clipping information + + +list of BlitMap that hold a reference to this surface + + +information needed for surfaces requiring locks + + +Application data associated with the surface + + + \brief A collection of pixels used in software blitting. + + \note This structure should be treated as read-only, except for \c pixels, + which, if not NULL, contains the raw pixel data for the surface. + + +\brief The type of function used for surface blitting functions. + + + + Compose a custom blend mode for renderers. + + The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + the SDL_BlendMode returned by this function if the renderer supports it. + + A blend mode controls how the pixels from a drawing operation (source) get + combined with the pixels from the render target (destination). First, the + components of the source and destination pixels get multiplied with their + blend factors. Then, the blend operation takes the two products and + calculates the result that will get stored in the render target. + + Expressed in pseudocode, it would look like this: + + ```c + dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + ``` + + Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + dst)` can return one of the following: + + - `src + dst` + - `src - dst` + - `dst - src` + - `min(src, dst)` + - `max(src, dst)` + + The red, green, and blue components are always multiplied with the first, + second, and third components of the SDL_BlendFactor, respectively. The + fourth component is not used. + + The alpha component is always multiplied with the fourth component of the + SDL_BlendFactor. The other components are not used in the alpha + calculation. + + Support for these blend modes varies for each renderer. To check if a + specific SDL_BlendMode is supported, create a renderer and pass it to + either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + return with an error if the blend mode is not supported. + + This list describes the support of custom blend modes for each renderer in + SDL 2.0.6. All renderers support the four blend modes listed in the + SDL_BlendMode enumeration. + + - **direct3d**: Supports all operations with all factors. However, some + factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + `SDL_BLENDOPERATION_MAXIMUM`. + - **direct3d11**: Same as Direct3D 9. + - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + 2.0.6. + - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. Color and alpha factors need to be the same. OpenGL ES 1 + implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + operations being different from each other. May support color and alpha + factors being different from each other. + - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + operations with all factors. + - **psp**: No custom blend mode support. + - **software**: No custom blend mode support. + + Some renderers do not provide an alpha component for the default render + target. The `SDL_BLENDFACTOR_DST_ALPHA` and + `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + case. + + \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the source pixels + \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the destination pixels + \param colorOperation the SDL_BlendOperation used to combine the red, + green, and blue components of the source and + destination pixels + \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + the source pixels + \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + the destination pixels + \param alphaOperation the SDL_BlendOperation used to combine the alpha + component of the source and destination pixels + \returns an SDL_BlendMode that represents the chosen factors and + operations. + + \since This function is available since SDL 2.0.6. + + \sa SDL_SetRenderDrawBlendMode + \sa SDL_GetRenderDrawBlendMode + \sa SDL_SetTextureBlendMode + \sa SDL_GetTextureBlendMode + + + + Calculate the intersection of a rectangle and line segment with float + precision. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_FRect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + + + Calculate a minimal rectangle enclosing a set of points with float + precision. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_FPoint structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_FRect used for clipping or NULL to enclose all points + \param result an SDL_FRect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.22. + + + + Calculate the union of two rectangles with float precision. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.22. + + + + Calculate the intersection of two rectangles with float precision. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_HasIntersectionF + + + + Determine whether two rectangles intersect with float precision. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_IntersectRect + + + + Returns true if the two rectangles are equal, using a default epsilon. + + \since This function is available since SDL 2.0.22. + + + + Returns true if the two rectangles are equal, within some given epsilon. + + \since This function is available since SDL 2.0.22. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + Calculate the intersection of a rectangle and line segment. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_Rect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + + + Calculate a minimal rectangle enclosing a set of points. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_Point structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_Rect used for clipping or NULL to enclose all points + \param result an SDL_Rect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.0. + + + + Calculate the union of two rectangles. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.0. + + + + Calculate the intersection of two rectangles. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_HasIntersection + + + + Determine whether two rectangles intersect. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_IntersectRect + + + +Returns true if the two rectangles are equal. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + A rectangle, with the origin at the upper left (floating point). + + \sa SDL_FRectEmpty + \sa SDL_FRectEquals + \sa SDL_FRectEqualsEpsilon + \sa SDL_HasIntersectionF + \sa SDL_IntersectFRect + \sa SDL_IntersectFRectAndLine + \sa SDL_UnionFRect + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + A rectangle, with the origin at the upper left (integer). + + \sa SDL_RectEmpty + \sa SDL_RectEquals + \sa SDL_HasIntersection + \sa SDL_IntersectRect + \sa SDL_IntersectRectAndLine + \sa SDL_UnionRect + \sa SDL_EnclosePoints + + + + The structure that defines a point (floating point) + + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + Use this function to write 64 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE64 + + + + Use this function to write 64 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE64 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE32 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE32 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE16 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE16 + + + + \name Write endian functions + + Write an item of native format to the specified endianness. + + Use this function to write a byte to an SDL_RWops. + + \param dst the SDL_RWops to write to + \param value the byte value to write + \returns 1 on success or 0 on failure; call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadU8 + + + + Use this function to read 64 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE64 + + + + Use this function to read 64 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE64 + + + + Use this function to read 32 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE32 + + + + Use this function to read 32 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE32 + + + + Use this function to read 16 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE16 + + + + Use this function to read 16 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE16 + + + + \name Read endian functions + + Read an item of the specified endianness and return in native format. + + Use this function to read a byte from an SDL_RWops. + + \param src the SDL_RWops to read from + \returns the read byte on success or 0 on failure; call SDL_GetError() for + more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteU8 + + + + Load all the data from a file path. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + Prior to SDL 2.0.10, this function was a macro wrapping around + SDL_LoadFile_RW. + + \param file the path to read all available data from + \param datasize if not NULL, will store the number of bytes read + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.10. + + + + Load all the data from an SDL data stream. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + \param src the SDL_RWops to read all available data from + \param datasize if not NULL, will store the number of bytes read + \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.6. + + + + Close and free an allocated SDL_RWops structure. + + SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + resources used by the stream and frees the SDL_RWops itself with + SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + flush to its output (e.g. to disk). + + Note that if this fails to flush the stream to disk, this function reports + an error, but the SDL_RWops is still invalid once this function returns. + + Prior to SDL 2.0.10, this function was a macro. + + \param context SDL_RWops structure to close + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Write to an SDL_RWops data stream. + + This function writes exactly `num` objects each of size `size` from the + area pointed at by `ptr` to the stream. If this fails for any reason, it'll + return less than `num` to demonstrate how far the write progressed. On + success, it returns `num`. + + SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + `write` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer containing data to write + \param size the size of an object to write, in bytes + \param num the number of objects to write + \returns the number of objects written, which will be less than **num** on + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + + + + Read from a data source. + + This function reads up to `maxnum` objects each of size `size` from the + data source to the area pointed at by `ptr`. This function may read less + objects than requested. It will return zero when there has been an error or + the data stream is completely read. + + SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + `read` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer to read data into + \param size the size of each object to read, in bytes + \param maxnum the maximum number of objects to be read + \returns the number of objects read, or 0 at error or end of file; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Determine the current read/write offset in an SDL_RWops data stream. + + SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a SDL_RWops data stream object from which to get the current + offset + \returns the current offset in the stream, or -1 if the information can not + be determined. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Seek within an SDL_RWops data stream. + + This function seeks to byte `offset`, relative to `whence`. + + `whence` may be any of the following values: + + - `RW_SEEK_SET`: seek from the beginning of data + - `RW_SEEK_CUR`: seek relative to current read point + - `RW_SEEK_END`: seek relative to the end of data + + If this stream can not seek, it will return -1. + + SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + `seek` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param offset an offset in bytes, relative to **whence** location; can be + negative + \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + \returns the final offset in the data stream after the seek or -1 on error. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to get the size of the data stream in an SDL_RWops. + + Prior to SDL 2.0.10, this function was a macro. + + \param context the SDL_RWops to get the size of the data stream from + \returns the size of the data stream in the SDL_RWops on success, -1 if + unknown or a negative error code on failure; call SDL_GetError() + for more information. + + \since This function is available since SDL 2.0.10. + + + + Use this function to free an SDL_RWops structure allocated by + SDL_AllocRW(). + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + call the **close** method on those SDL_RWops pointers when you are done + with them. + + Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + invalid as soon as this function returns. Any extra memory allocated during + creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + be responsible for managing that memory in their **close** method. + + \param area the SDL_RWops structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocRW + + + + Use this function to allocate an empty, unpopulated SDL_RWops structure. + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + + You must free the returned pointer with SDL_FreeRW(). Depending on your + operating system and compiler, there may be a difference between the + malloc() and free() your program uses and the versions SDL calls + internally. Trying to mix the two can cause crashing such as segmentation + faults. Since all SDL_RWops must free themselves when their **close** + method is called, all SDL_RWops must be allocated through this function, so + they can all be freed correctly with SDL_FreeRW(). + + \returns a pointer to the allocated memory on success, or NULL on failure; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeRW + + + + Use this function to prepare a read-only memory buffer for use with RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size. It assumes the memory area is not writable. + + Attempting to write to this RWops stream will report an error without + writing to the memory buffer. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to write to a memory buffer, you should use SDL_RWFromMem() + with a writable buffer of memory instead. + + \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + + + + Use this function to prepare a read-write memory buffer for use with + SDL_RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size, for both read and write access. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to make sure the RWops never writes to the memory buffer, you + should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + + \param mem a pointer to a buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to create an SDL_RWops structure from a standard I/O file + pointer (stdio.h's `FILE*`). + + This function is not available on Windows, since files opened in an + application on that platform cannot be used by a dynamically linked + library. + + On some platforms, the first parameter is a `void*`, on others, it's a + `FILE*`, depending on what system headers are available to SDL. It is + always intended to be the `FILE*` type from the C runtime's stdio.h. + + \param fp the `FILE*` that feeds the SDL_RWops stream + \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + SDL_FALSE to leave the `FILE*` open when the RWops is + closed + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + \name RWFrom functions + + Functions to create SDL_RWops structures from various data streams. + + Use this function to create a new SDL_RWops structure for reading from + and/or writing to a named file. + + The `mode` string is treated roughly the same as in a call to the C + library's fopen(), even if SDL doesn't happen to use fopen() behind the + scenes. + + Available `mode` strings: + + - "r": Open a file for reading. The file must exist. + - "w": Create an empty file for writing. If a file with the same name + already exists its content is erased and the file is treated as a new + empty file. + - "a": Append to a file. Writing operations append data at the end of the + file. The file is created if it does not exist. + - "r+": Open a file for update both reading and writing. The file must + exist. + - "w+": Create an empty file for both reading and writing. If a file with + the same name already exists its content is erased and the file is + treated as a new empty file. + - "a+": Open a file for reading and appending. All writing operations are + performed at the end of the file, protecting the previous content to be + overwritten. You can reposition (fseek, rewind) the internal pointer to + anywhere in the file for reading, but writing operations will move it + back to the end of file. The file is created if it does not exist. + + **NOTE**: In order to open a file as a binary file, a "b" character has to + be included in the `mode` string. This additional "b" character can either + be appended at the end of the string (thus making the following compound + modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + Additional characters may follow the sequence, although they should have no + effect. For example, "t" is sometimes appended to make explicit the file is + a text file. + + This function supports Unicode filenames, but they must be encoded in UTF-8 + format, regardless of the underlying operating system. + + As a fallback, SDL_RWFromFile() will transparently open a matching filename + in an Android app's `assets`. + + Closing the SDL_RWops will close the file handle SDL is holding internally. + + \param file a UTF-8 string representing the filename to open + \param mode an ASCII string representing the mode to be used for opening + the file. + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + +Return the size of the file in this rwops, or -1 if unknown + + + Seek to \c offset relative to \c whence, one of stdio's whence values: + RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + + \return the final offset in the data stream, or -1 on error. + + + Read up to \c maxnum objects each of size \c size from the data + stream to the area pointed at by \c ptr. + + \return the number of objects read, or 0 at error or end of file. + + + Write exactly \c num objects each of size \c size from the area + pointed at by \c ptr to data stream. + + \return the number of objects written, or 0 at error or end of file. + + + Close and free an allocated SDL_RWops structure. + + \return 0 if successful or -1 on write error when flushing data. + + + + Clear any previous error message for this thread. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetError + \sa SDL_SetError + + + + Get the last error message that was set for the current thread. + + This allows the caller to copy the error string into a provided buffer, but + otherwise operates exactly the same as SDL_GetError(). + + \param errstr A buffer to fill with the last error message that was set for + the current thread + \param maxlen The size of the buffer pointed to by the errstr parameter + \returns the pointer passed in as the `errstr` parameter. + + \since This function is available since SDL 2.0.14. + + \sa SDL_GetError + + + + Retrieve a message about the last error that occurred on the current + thread. + + It is possible for multiple errors to occur before calling SDL_GetError(). + Only the last error is returned. + + The message is only applicable when an SDL function has signaled an error. + You must check the return values of SDL function calls to determine when to + appropriately call SDL_GetError(). You should *not* use the results of + SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + an error string even when reporting success. + + SDL will *not* clear the error string for successful API calls. You *must* + check return values for failure cases before you can assume the error + string applies. + + Error strings are set per-thread, so an error set in a different thread + will not interfere with the current thread's operation. + + The returned string is internally allocated and must not be freed by the + application. + + \returns a message with information about the specific error that occurred, + or an empty string if there hasn't been an error message set since + the last call to SDL_ClearError(). The message is only applicable + when an SDL function has signaled an error. You must check the + return values of SDL function calls to determine when to + appropriately call SDL_GetError(). + + \since This function is available since SDL 2.0.0. + + \sa SDL_ClearError + \sa SDL_SetError + + + + Calculate a 256 entry gamma ramp for a gamma value. + + \param gamma a gamma value where 0.0 is black and 1.0 is identity + \param ramp an array of 256 values filled in with the gamma ramp + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetWindowGammaRamp + + + + Get RGBA values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + If the surface has no alpha component, the alpha will be returned as 0xff + (100% opaque). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + \param a a pointer filled in with the alpha component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Get RGB values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGBA + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Map an RGBA quadruple to a pixel value for a given pixel format. + + This function maps the RGBA color value to the specified pixel format and + returns the pixel value best approximating the given RGBA color value for + the given pixel format. + + If the specified pixel format has no alpha component the alpha value will + be ignored (as it will be in formats with a palette). + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \param a the alpha component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGB + + + + Map an RGB triple to an opaque pixel value for a given pixel format. + + This function maps the RGB color value to the specified pixel format and + returns the pixel value best approximating the given RGB color value for + the given pixel format. + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the specified pixel format has an alpha component it will be returned as + all 1 bits (fully opaque). + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the pixel format + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGBA + + + + Free a palette created with SDL_AllocPalette(). + + \param palette the SDL_Palette structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + + + + Set a range of colors in a palette. + + \param palette the SDL_Palette structure to modify + \param colors an array of SDL_Color structures to copy into the palette + \param firstcolor the index of the first palette entry to modify + \param ncolors the number of entries to modify + \returns 0 on success or a negative error code if not all of the colors + could be set; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_CreateRGBSurface + + + + Set the palette for a pixel format structure. + + \param format the SDL_PixelFormat structure that will use the palette + \param palette the SDL_Palette structure that will be used + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_FreePalette + + + + Create a palette structure with the specified number of color entries. + + The palette entries are initialized to white. + + \param ncolors represents the number of color entries in the color palette + \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + there wasn't enough memory); call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreePalette + + + + Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + + \param format the SDL_PixelFormat structure to free + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + + + + Create an SDL_PixelFormat structure corresponding to a pixel format. + + Returned structure may come from a shared global cache (i.e. not newly + allocated), and hence should not be modified, especially the palette. Weird + errors such as `Blit combination not supported` may occur. + + \param pixel_format one of the SDL_PixelFormatEnum values + \returns the new SDL_PixelFormat structure or NULL on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeFormat + + + + Convert a bpp value and RGBA masks to an enumerated pixel format. + + This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + possible. + + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask the red mask for the format + \param Gmask the green mask for the format + \param Bmask the blue mask for the format + \param Amask the alpha mask for the format + \returns one of the SDL_PixelFormatEnum values + + \since This function is available since SDL 2.0.0. + + \sa SDL_PixelFormatEnumToMasks + + + + Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + + \param format one of the SDL_PixelFormatEnum values + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask a pointer filled in with the red mask for the format + \param Gmask a pointer filled in with the green mask for the format + \param Bmask a pointer filled in with the blue mask for the format + \param Amask a pointer filled in with the alpha mask for the format + \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + possible; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MasksToPixelFormatEnum + + + + Get the human readable name of a pixel format. + + \param format the pixel format to query + \returns the human readable name of the specified pixel format or + `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + + \since This function is available since SDL 2.0.0. + + + +\note Everything in the pixel format structure is read-only. + + + +The bits of this structure can be directly reinterpreted as an integer-packed +color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 +on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + + + + If a + b would overflow, return -1. Otherwise store a + b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + If a * b would overflow, return -1. Otherwise store a * b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + This function converts a string between encodings in one pass, returning a + string that must be freed with SDL_free() or NULL on error. + + \since This function is available since SDL 2.0.0. + + + + Get the number of outstanding (unfreed) allocations + + \since This function is available since SDL 2.0.7. + + + + Replace SDL's memory allocation functions with a custom set + + \since This function is available since SDL 2.0.7. + + + + Get the current set of SDL memory functions + + \since This function is available since SDL 2.0.7. + + + + Get the original set of SDL memory functions + + \since This function is available since SDL 2.24.0. + + + +\endcond + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + + +\name Floating-point constants + +\cond + + +\brief An unsigned 64-bit integer type. + + + +\brief A signed 64-bit integer type. + + + +\brief An unsigned 32-bit integer type. + + + +\brief A signed 32-bit integer type. + + + +\brief An unsigned 16-bit integer type. + + + +\brief A signed 16-bit integer type. + + + +\brief An unsigned 8-bit integer type. + + + +\brief A signed 8-bit integer type. + + + + \file close_code.h + + This file reverses the effects of begin_code.h and should be included + after you finish any function and structure declarations in your headers + + + + \file SDL_stdinc.h + + This is a general header that includes C language support. + + \file SDL_platform.h + + Try to get a standard set of platform defines. + + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + Get the name of the platform. + + Here are the names returned for some (but not all) supported platforms: + + - "Windows" + - "Mac OS X" + - "Linux" + - "iOS" + - "Android" + + \returns the name of the platform. If the correct platform name is not + available, returns a string beginning with the text "Unknown". + + \since This function is available since SDL 2.0.0. + + + +*!************************************************************************* + + + +Marks the application to stop at the end of the current frame. + + + + +Whether or not the application is currently in fullscreen mode or not. + + + + +Retrieves the designated height of the current window. + + + + +Retrieves the designated width of the current window. + + + + +Whether or not the engine is in a paused state where script updates and +physics are not in play. + + + + +Whether or not the engine is playing. This will always be true on Publish. +On Debug/Release builds, this is true when the editor is in Play Mode. It +will also be true even if the editor is in Play Mode but is paused. + + + + +Static class that contains useful properties for querying the state of the +engine. + + + + +Sets the parent of this Transform component. + + +Entity that contains the Transform component that this Transform will be +parented to. If null, unparenting will occur. + + +If true, the transform values of this Transform component will retain their +pre-parent-change global transforms. The local transform values will be +modified to ensure that the global transforms do not change. + + + + +Parent Transform that affects this Transform. + + + + +Global scale stored by this Transform. + + + + +Global euler angle rotations stored by this Transform. + + + + +Global rotation quaternion stored by this Transform. + + + + +Global position stored by this Transform. + + + + +Local scale stored by this Transform. + + + + +Local euler angle rotations stored by this Transform. + + + + +Local rotation quaternion stored by this Transform. + + + + +Local position stored by this Transform. + + + + +Constructs a Transform Component that represents a native Transform component +tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's TransformComponent. + + + + +Compares if two float values are close enough to be the same with the +specified tolerance value. + + One of the values to compare. + The other value to compare. + Tolerance for floating point comparison. + True if a and b are practically the same. + + + +Compares if two float values are close enough to be the same with a tolerance +of Epsilon. + + One of the values to compare. + The other value to compare. + True if a and b are practically the same. + + + +Calculates the linear parameter t that produces the interpolant value within +the range [a, b]. + + Start value. + End value. + Value between start and end. + Percentage of value between start and end. + + + +Linearly interpolates between a and b by t. +The parameter t is not clamped and a value based on a and b is supported. +If t is less than zero, or greater than one, then LerpUnclamped will result +in a return value outside the range a to b. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Linearly interpolates between a and b by t. +The parameter t is clamped to the range [0, 1]. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Converts an angle from radian representation to degree representation. + + Radian-based angle to convert. + The specified angle in degrees. + + + +Converts an angle from degree representation to radian representation. + + Degree-based angle to convert. + The specified angle in radians. + + + +Wraps a value if they get to low or too high. + + Value to wrap. + Minimum value to wrap at. + Maximum value to wrap at. + Wrapped value. + + + +Small value used for single precision floating point comparisons. + + + + +Radians-to-degrees conversion constant + + + + +Degrees-to-radians conversion constant + + + + +Contains utility Math functions. + + + + +Logs a native exception that is formatted nicely to the output. + + Native exception to log. + Name of the one responsible for the exception. + + + +Logs an exception that is formatted nicely to the output. + + Name of the one responsible for the exception. + Exception to log. + + + +Logs a native exception that is formatted nicely to the output. +Equivalent to calling +LogException(exception, Convert::ToNative(thrower->GetType()->Name)); + + Native exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output. + + The string to output. + + + +Logs a error message to the output. + + The string to output. + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output. + + The string to output. + + + +Logs a message to the output. + + The string to output. + + + +Static class that contains the functions for working with time. + + + + +Material used to render this Renderable. + + + + +Material used to render this Renderable. + + + + +Mesh used to render this Renderable. + + + + +Constructs a Renderable Component that represents a native Renderable +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's SHRenderableComponent. + + + + +Retrieves the value of a specified property on the material. + + Type of property to get. + Name of the property to get. + Value of that property on the material. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Set the value of a specific property. + + Type of property to set. + Name of the property to set. + Value to set te property to. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Constructor for the Material + + Handle to the native material object. + + + +Managed counterpart of the native MaterialInstance object containing material +data that can be fed to Renderables for rendering. + + + + +Constructor for the Mesh + + Handle to the mesh object. + + + +Managed counterpart of the native Mesh object containing vertex data that can +be fed to Renderables for rendering. + + + +@brief Decomposes a transformation matrix into translation, orientation and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] orientation The orientation of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Decomposes a transformation matrix into translation, euler angles and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] rotation The euler angles of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Interface for a Column-Major Row Vector 4x4 Matrix. + + + + +Constructs a RigidBody Component that represents a native +SHRigidBodyComponent component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHRigidBodyComponent. + + + + +Creates an instance of the Managed representation of a Component with a +native Entity. + + Type of Component to create. + Native Entity that this Component is tied to. + The created Managed representation of the Component. + + + +Static constructor to initialize static data + + + + +Pointer to a function for Component manipulation operations. + + +Contains a set of Component related data used for resolving operations for +each Component. + + + + +Removes a Component from the specified Entity. + + Type of the Component to remove. + +Entity object that should have the specified Component removed from/ + + + + +Checks if the specified Entity has the specified Component. + + Type of the Component to check for. + Entity object to check for the Component. + +True if the specified Entity has the specified Component. False otherwise. + + + + +Ensures a Component on the specified Entity. + + Type of the Component to ensure. + Entity object to ensure the Component on. + Reference to the Component. + + + +Retrieves the first Component from the specified GameObjectt's children that +matches the specified type. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Gets a Component from the specified Entity. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Adds a Component to the specified Entity. + + Type of the Component to add. + +Entity object that should have the specified Component added to. + + Reference to the Component that was added. + + + +Static class which contains functions that map Pls::ECS's Component manipulation +functions to managed generic functions. + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Entity that this Component belongs to. + + + + +Constructor for BaseComponent to tie it to a specific Entity. +Constructors of derived Components should call this Constructor. + + Entity that this Component will be tied to. + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to Get. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to add. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Retrieves the GameObject that this Component belongs to. + + + + +Class that serves as the base for a wrapper class to Components in native code. + + + + +Called when the attached GameObject has a Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called just before the end of the frame where the attached GameObject or +this script is destroyed directly or indirectly due to destruction of the +owner. + + + + +Called every frame after physics and collision resolution but before +rendering. + + + + +Called every frame before physics and collision resolution. + + + + +Called every frame in sync with Physics update steps and thus in most cases +will execute more than update() will. This will be called immediately before +a Physics update step. + + + + +Called on the first frame that the attached GameObject is active but always +after Awake(). + + + + +Called on the first frame that the attached GameObject is active if they are +a part of the scene. + + + + +Called immediately once this script is detached from a GameObject. + + + + +Called immediately once this script is attached to a GameObject. + + + + +Constructor for Script to tie it to a specific GameObject. +Constructors of derived Scripts should call this Constructor. + + +GameObject that this Script will be tied to. + + + + +Used to call onTriggerExit(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerStay(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerEnter(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionExit(). This should be called when a collision ends +between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionStay(). This should be called when a collision is +persistent between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionEnter(). This should be called when a collision is +detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onDestroy(). This should be called at the end of the frame +where the attached GameObject or this script is destroyed directly or +indirectly due to destruction of the owner. + + + + +Used to call lateUpdate(). This should be called every frame after physics +and collision resolution but before rendering. + + + + +Used to call update(). This should be called every frame before physics and +collision resolution. + + + + +Used to call fixedUpdate(). This should be called in sync with Physics +update steps and thus in most cases will execute more than Update() will. +This will be called immediately before a Physics update step. + + + + +Used to call start(). This should be called on the first frame that the +attached GameObject is active but always after Awake(). + + + + +Used to call awake(). This should be called on the first frame that the +attached GameObject is active if they are a part of the scene. + + + + +Used to call onDetached(). This is called immediately when this script is +detached from a GameObject. + + + + +Used to call onAttached(). This is called immediately when this script is +attached to a GameObject. + + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + +Type of script to remove. +This needs to be a default constructable Script. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from this GameObject's children that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Retrieves the first Script from this GameObject that matches the specified +type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Adds a Script to this GameObject. + + +Type of script to add. +This needs to be a default constructable Script. + + Reference to the script added + + + +Removes a Component from the GameObject that this Script belongs to. + + +Type of the Component to remove. Must be derived from BaseComponent. + + + + +Ensures a Component on the GameObject that this Script belongs to. + + +Type of the Component to ensure. Must be derived from BaseComponent. + + Reference to the Component. + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Gets a Component from the GameObject that this Script belongs to. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Adds a Component to the GameObject that this Script belongs to. + + +Type of the Component to add. Must be derived from BaseComponent. + + Reference to the Component that was added. + + + +GameObject that this Script belongs to. + + + + +Class that forms the basis of all "script"-objects that can be attached to +Entities to update each Entity's Components via C# code. + + + + +The RigidBody that you are colliding with. + + + + +The CollisionShape of the Collider that you are colliding with. + + + + +The Collider that you are colliding with. + + + + +The GameObject whose collider you are colliding with. + + + + +Struct that describes a collision + + + + +Checks if two GameObject references are different. + + GameObject to check. + Another GameObject to check with. + True if both Components are different. + + + +Checks if two GameObject references are the same. + + GameObject to check. + Another GameObject to check with. + True if both Components are the same. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Retrieves the native Entity object that this GameObject represents. + + Native Entity object that this GameObject represents. + + + +Retrieves the CLR Entity object that this GameObject represents. + + Entity object that this GameObject represents. + + + +Constructor for the GameObject. + + +Managed numerical representation of the ECS Entity that this GameObject +should represent. + + + + +Constructor for the GameObject. + + +The ECS Entity that this GameObject should represent. + + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to retrieve. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from child GameObjects. +If multiple Scripts of the same specified type are added on the same +child GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Ensures a Component on this GameObject. + + Type of the Component to ensure. + +Reference to the Component. + + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + Type of the Component to get. + +Reference to the Component or null if neither of this GameObject's children +does not have the specified Component. + + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Sets the active state of this GameObject. +
    +The actual "activeness" of this GameObject is still dependent on the parents' +active states. +
    + +Whether to activate or deactivate this GameObject. + +
    + + +Sets the name of this GameObject. + + The name to set. + + + +Native Entity ID value for this GameObject. + + + + +Whether or not this Entity is active in the Scene hierarchy. + + + + +Whether or not this Entity alone, is active. This does not mean that this +object is active in the scene. For example, if this Entity's parent is not +active, then this Entity would also be not active. + + + + +Name of the object that this Entity represents. + + + + +Retrieves a GameObject with the specified name. If there are multiple +GameObjects with the same name, the first found GameObject will be retrieved. +There is no guaranteed order of which GameObject is considered "first". + + Name of the GameObject to find. + GameObject that has the specified name. Null if not found. + + + +Destroys the specified GameObject. Note that the specified GameObject will no +longer be a valid GameObject after this function is called. + + The GameObject to be destroyed. + + + +Creates a new GameObject in the current Scene. If multiple Scenes are loaded, +and you would like to create an object in a specific Scene, call the Scene's +CreateGameObject(). + + GameObject that represents the newly created GameObject. + + + +Lightweight object for an PlushieEngine Entity that allows for easy access +to Component and Script operations. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Maximum value for the Ranged field. + + + + +Minimum value for the Ranged field. + + + + +Simple attribute to constrain the range of values for a field on the editor. + + + + +Converts from a native std::Stringto a managed String. + + The native std::string to convert from. + Managed copy of a native std::string. + + + +Converts from a managed String to a native std::string. + + The managed String to convert from. + Native copy of a managed String. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a native Quaternion to a managed Quaternion. + + The native Quaternion to convert from. + Managed copy of a native Quaternion. + + + +Converts from a managed Quaternion to a native Quaternion. + + The managed Quaternion to convert from. + Native copy of a managed Quaternion. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a managed Vector2 to a native Vector2. + + The managed Vector2 to convert from. + Native copy of a managed Vector2. + + + +Converts from a native Vector3 to a managed Vector3. + + The native Vector3 to convert from. + Managed copy of a native Vector3. + + + +Converts from a managed Vector3 to a native Vector3. + + The managed Vector3 to convert from. + Native copy of a managed Vector3. + + + +Converts from a native Entity to a managed Entity (UInt32). + + Native Entity to convert from. + Managed representation of the specified Entity. + + + +Provides functions easy and consistent syntax for converting between custom +managed and native types that are aligned. + + + + +Converts to true if this is a valid Handle. + + + + +The library that the handle was issued by. + + + + +The internal ID of the handle. + + + + +Creates a ray starting at origin along direction. + + Source of the ray. + Direction the ray travels in. + + + +The direction that a ray travels in. + + + + +The start point of the ray. + + + + +CLR version of the the SHADE Engine's Ray class that represents a ray in +3-Dimensional space. + + + + +Are two quaternions equal to each other? + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Combines rotations lhs and rhs. + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Spherically interpolates between a and b by t. The parameter t is not clamped. + + + + +Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion spherically interpolated between quaternions a and b. + + + +Rotates a rotation from towards to.
    +The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). +Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. +
    +
    + + +Converts this quaternion to one with the same orientation but with a magnitude of 1. + + + + +Creates a rotation with the specified forward and upwards directions.
    +Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. +
    +
    + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. + + + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion interpolated between quaternions a and b. + + + +Returns the Inverse of rotation. + + + + +Creates a rotation which rotates from fromDirection to toDirection. + + + + +Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. + + + + +The dot product between two rotations. + + + + +Creates a rotation which rotates angle degrees around axis. + + + + +Returns the angle in degrees between two rotations a and b.
    + The angle in degrees between the two vectors. +
    + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Converts a rotation to angle-axis representation (angles in degrees). + + + + +Creates a rotation with the specified forward and upwards directions.
    +The result is applied to this quaternion. +If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. +Logs an error if the forward direction is zero. +
    + The direction to look in. + The vector that defines in which direction up is. +
    + + +Creates a rotation which rotates from fromDirection to toDirection.
    +Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). +These Vectors must be set up in a script. +
    +
    + + +Constructor to construct a Quaternion with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + W-coordinate to set. + + + +W-component of the Quaternion. Do not directly modify quaternions. + + + + +Z-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Y-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +X-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Shorthand for writing Quaternion(0, 0, 0, 1). + + + + +CLR version of SHADE's Quaternion class that represents an orientation. +Designed to closely match Unity's Quaternion struct. + + + + +Explicit conversion operator to enable explicit casting from a Vector2 to a +Vector3. + + Vector2 to convert from. + + + +Explicit conversion operator to enable explicit casting from a Vector3 to a +Vector2. + + Vector3 to convert from. + + + +Checks if two Vector3s are not approximately equal. This is equivalent to +calling !Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector3s are approximately equal. This is equivalent to +calling Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector3s and returns the +result. + + Vector3 to multiply with. + Another Vector3 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector3 from another Vector3 and returns the result. + + Vector3 to subtract from. + Another Vector3 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector3s together and returns the result. + + Vector3 to add. + Another Vector3 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector3. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Computes and returns a Vector3 that is made from the largest components of +the two specified Vector3s. + + Vector3 to calculate maximum Vector3 with. + Another Vector3 to calculate maximum Vector3 with. + +The Vector3 that contains the largest components of the two specified +Vector3s. + + + + +Computes and returns a Vector3 that is made from the smallest components of +the two specified Vector3s. + + Vector3 to calculate minimum Vector3 with. + Another Vector3 to calculate minimum Vector3 with. + +The Vector3 that contains the smallest components of the two specified +Vector3s. + + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector3 that represents the rotated vector. + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector3 that represents the rotated vector. + + + +Reflects a Vector3 across another Vector3. + + A Vector3 to reflect. + A normal to reflect the Vector3 across. + The Vector3 that represents vec reflected across normal. + + + +Computes and returns a Vector3 projection. + + Vector3 to project. + Vector3 to project onto. + The Vector3 that represents the projected vec onto direction. + + + +Computes and returns the cross product of 2 specified Vector3s. + + Vector3 to calculate cross product with. + Another Vector3 to calculate cross product with. + The cross product of the two Vector3s. + + + +Computes and returns the dot product of 2 specified Vector3s. + + Vector3 to calculate dot product with. + Another Vector3 to calculate dot product with. + Scalar value representing the dot product of the two Vector3s. + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + Amount of tolerance to do the comparison with. + +True if the two Vector3s are within the tolerance value specified + + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + +True if the two Vector3s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector3 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector3 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector3. + + Returns the squared length of this Vector3. + + + +Calculates and returns the magnitude of this Vector3. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector3. + + + +Creates a copy of this Vector3 and returns a normalized version. + + +Returns a normalised copy of this Vector3. +If this Vector3 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector3. This changes the data of this Vector3. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Conversion constructor to construct a Vector3 using a Vector2. + + + + + +Constructor to construct a Vector3 with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Z-component set to 0.0f. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Y and Z-component set to 0.0f. + + X-coordinate to set. + + + +Z-component of the Vector3. + + + + +Y-component of the Vector3. + + + + +X-component of the Vector3. + + + + +Shorthand for writing Vector3(0, 0, 0). + + + + +Shorthand for writing Vector3(0, 1, 0). + + + + +Shorthand for writing Vector3(1, 0, 0). + + + + +Shorthand for writing Vector3(float.PositiveInfinity, +float.PositiveInfinity, float.PositiveInfinity). + + + + +Shorthand for writing Vector3(1, 1, 1). + + + + +Shorthand for writing Vector3(float.NegativeInfinity, +float.NegativeInfinity, float.NegativeInfinity). + + + + +Shorthand for writing Vector3(-1, 0, 0). + + + + +Shorthand for writing Vector3(0, 0, 1). + + + + +Shorthand for writing Vector3(0, -1, 0). + + + + +Shorthand for writing Vector3(0, 0, -1). + + + + +CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. +Designed to closely match Unity's Vector3 struct. + + + + +Checks if two Vector2s are not approximately equal. This is equivalent to +calling !Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector2s are approximately equal. This is equivalent to +calling Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector2s and returns the +result. + + Vector2 to multiply with. + Another Vector2 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector2 from another Vector2 and returns the result. + + Vector2 to subtract from. + Another Vector2 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector2s together and returns the result. + + Vector2 to add. + Another Vector2 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector2. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector2. + + + +Computes and returns a Vector2 that is made from the largest components of +the two specified Vector2s. + + Vector2 to calculate maximum Vector2 with. + Another Vector2 to calculate maximum Vector2 with. + +The Vector2 that contains the largest components of the two specified +Vector2s. + + + + +Computes and returns a Vector2 that is made from the smallest components of +the two specified Vector2s. + + Vector2 to calculate minimum Vector2 with. + Another Vector2 to calculate minimum Vector2 with. + +The Vector2 that contains the smallest components of the two specified +Vector2s. + + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector2 that represents the rotated vector. + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector2 that represents the rotated vector. + + + +Reflects a Vector2 across another Vector2. + + A Vector2 to reflect. + A normal to reflect the Vector2 across. + The Vector2 that represents vec reflected across normal. + + + +Computes and returns a Vector2 projection. + + Vector2 to project. + Vector2 to project onto. + The Vector2 that represents the projected vec onto direction. + + + +Computes a perpendicular Vector2 to the specified Vector2. + + Vector2 to find a perpendicular of. + +Whether the inward perpendicular Vector is retrieved. If true, the +resultant vector is rotated 90-degrees in a counter-clockwise. + + The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes the inward perpendicular Vector2 to the specified Vector2. +Equivalent to calling Perpendicular(lhs, true). This means, the +resultant Vector2 is rotated 90-degrees in a counter-clockwise. + + Vector2 to find a perpendicular of. + +The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes and returns the dot product of 2 specified Vector2s. + + Vector2 to calculate dot product with. + Another Vector2 to calculate dot product with. + +Scalar value representing the dot product of the two Vector2s. + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +Amount of tolerance to do the comparison with. + + +True if the two Vector2s are within the tolerance value specified + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +True if the two Vector2s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector2 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector2 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector2. + + Returns the squared length of this Vector2. + + + +Calculates and returns the magnitude of this Vector2. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector2. + + + +Creates a copy of this Vector2 and returns a normalized version. + + +Returns a normalised copy of this Vector2. +If this Vector2 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector2. This changes the data of this Vector2. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Constructor to construct a Vector2 with the specified components.. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector2 with the specified components with the +Y-component set to 0.0f. + + X-coordinate to set. + + + +Y-component of the Vector2. + + + + +X-component of the Vector2. + + + + +Shorthand for writing Vector2(0, 0). + + + + +Shorthand for writing Vector2(0, 1). + + + + +Shorthand for writing Vector2(1, 0). + + + + +Shorthand for writing Vector2(float.PositiveInfinity, +float.PositiveInfinity). + + + + +Shorthand for writing Vector2(1, 1). + + + + +Shorthand for writing Vector2(float.NegativeInfinity, +float.NegativeInfinity). + + + + +Shorthand for writing Vector2(-1, 0). + + + + +Shorthand for writing Vector2(0, -1). + + + + +CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. +Designed to closely match Unity's Vector2 struct. + + + + +Checks if the specified entity is valid. This is done by checking if it +matches Pls::Entity::INVALID. + + The Entity to check. + True if the specified Entity is valid. + + + +Static class that contains useful utility functions for working with Entity. + + + + +Manages all resources in multiple ResourceLibraries. + + + + +Base class for SHResourceLibrary that holds information about the library type. + + + + +Template Specialization for Handle that represents a type-less Handle. + + + + +Converts to true if this is a valid Handle. + + + + +Native ID type of a handle + + + + +Base implementation of the Handle that is not templated to allow for holding +generic non-type-specific Handles. + + + + +Exception thrown when a generic Handle is being casted to the wrong type. + + + + +Exception thrown when an invalid Handle was dereferenced. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file From f919d95c0b99b3a8e7e9ae39db3eae66c1f2dc42 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 1 Nov 2022 15:30:13 +0800 Subject: [PATCH 617/793] Added C# interface for Camera and Camera Arm. Added some test scripts --- SHADE_Managed/{ => src/Components}/Camera.cxx | 0 SHADE_Managed/{ => src/Components}/Camera.hxx | 0 SHADE_Managed/src/Components/CameraArm.cxx | 51 +++++++++++++++++ SHADE_Managed/src/Components/CameraArm.hxx | 40 ++++++++++++++ SHADE_Managed/src/Engine/ECS.cxx | 4 ++ SHADE_Managed/src/Engine/Time.cxx | 6 ++ SHADE_Managed/src/Engine/Time.hxx | 5 ++ SHADE_Managed/src/Input/Input.cxx | 7 +++ SHADE_Managed/src/Input/Input.hxx | 2 + TempScriptsFolder/CameraControl.cs | 22 ++++++++ TempScriptsFolder/CameraTest.cs | 9 --- TempScriptsFolder/ThirdPersonCamera.cs | 55 +++++++++++++++++++ 12 files changed, 192 insertions(+), 9 deletions(-) rename SHADE_Managed/{ => src/Components}/Camera.cxx (100%) rename SHADE_Managed/{ => src/Components}/Camera.hxx (100%) create mode 100644 SHADE_Managed/src/Components/CameraArm.cxx create mode 100644 SHADE_Managed/src/Components/CameraArm.hxx create mode 100644 TempScriptsFolder/CameraControl.cs delete mode 100644 TempScriptsFolder/CameraTest.cs create mode 100644 TempScriptsFolder/ThirdPersonCamera.cs diff --git a/SHADE_Managed/Camera.cxx b/SHADE_Managed/src/Components/Camera.cxx similarity index 100% rename from SHADE_Managed/Camera.cxx rename to SHADE_Managed/src/Components/Camera.cxx diff --git a/SHADE_Managed/Camera.hxx b/SHADE_Managed/src/Components/Camera.hxx similarity index 100% rename from SHADE_Managed/Camera.hxx rename to SHADE_Managed/src/Components/Camera.hxx diff --git a/SHADE_Managed/src/Components/CameraArm.cxx b/SHADE_Managed/src/Components/CameraArm.cxx new file mode 100644 index 00000000..67fcf6cf --- /dev/null +++ b/SHADE_Managed/src/Components/CameraArm.cxx @@ -0,0 +1,51 @@ +#include "SHpch.h" +#include "CameraArm.hxx" + + +namespace SHADE +{ + CameraArm::CameraArm(Entity entity) + :Component(entity) + { + + } + + float CameraArm::Pitch::get() + { + return (GetNativeComponent()->GetPitch()); + } + + void CameraArm::Pitch::set(float val) + { + GetNativeComponent()->SetPitch(val); + } + float CameraArm::Yaw::get() + { + return (GetNativeComponent()->GetYaw()); + } + + void CameraArm::Yaw::set(float val) + { + GetNativeComponent()->SetYaw(val); + } + + float CameraArm::ArmLength::get() + { + return (GetNativeComponent()->GetArmLength()); + } + + void CameraArm::ArmLength::set(float val) + { + GetNativeComponent()->SetArmLength(val); + } + + bool CameraArm::LookAtCameraOrigin::get() + { + return GetNativeComponent()->lookAtCameraOrigin; + } + + void CameraArm::LookAtCameraOrigin::set(bool val) + { + GetNativeComponent()->lookAtCameraOrigin = val; + } +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/CameraArm.hxx b/SHADE_Managed/src/Components/CameraArm.hxx new file mode 100644 index 00000000..771771cf --- /dev/null +++ b/SHADE_Managed/src/Components/CameraArm.hxx @@ -0,0 +1,40 @@ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" + +// External Dependencies +#include "Camera/SHCameraArmComponent.h" + + +namespace SHADE +{ + public ref class CameraArm : public Component + { + internal: + CameraArm(Entity entity); + public: + property float Pitch + { + float get(); + void set(float val); + } + property float Yaw + { + float get(); + void set(float val); + } + property float ArmLength + { + float get(); + void set(float val); + } + property bool LookAtCameraOrigin + { + bool get(); + void set(bool val); + } + + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index df67c788..3da39394 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -33,6 +33,8 @@ of DigiPen Institute of Technology is prohibited. #include "Components/Transform.hxx" #include "Components\RigidBody.hxx" #include "Components\Collider.hxx" +#include "Components/Camera.hxx" +#include "Components/CameraArm.hxx" namespace SHADE { @@ -248,6 +250,8 @@ namespace SHADE componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx index ff0628e7..31773ce9 100644 --- a/SHADE_Managed/src/Engine/Time.cxx +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -26,4 +26,10 @@ namespace SHADE { return SHFrameRateController::GetRawDeltaTime(); } + + + float Time::DeltaTimeF::get() + { + return static_cast(SHFrameRateController::GetRawDeltaTime()); + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/Time.hxx b/SHADE_Managed/src/Engine/Time.hxx index 969eea03..3a487ee9 100644 --- a/SHADE_Managed/src/Engine/Time.hxx +++ b/SHADE_Managed/src/Engine/Time.hxx @@ -37,5 +37,10 @@ namespace SHADE { double get(); } + + static property float DeltaTimeF + { + float get(); + } }; } \ No newline at end of file diff --git a/SHADE_Managed/src/Input/Input.cxx b/SHADE_Managed/src/Input/Input.cxx index 0a386f3a..f0ea0edc 100644 --- a/SHADE_Managed/src/Input/Input.cxx +++ b/SHADE_Managed/src/Input/Input.cxx @@ -99,4 +99,11 @@ namespace SHADE return SHInputManager::GetKeyReleasedTime(static_cast(key)); } + Vector2 Input::GetMouseVelocity() + { + double velX, velY; + SHInputManager::GetMouseVelocity(&velX, &velY); + + return Convert::ToCLI(SHVec2{ (float)velX,(float)velY }); + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Input/Input.hxx b/SHADE_Managed/src/Input/Input.hxx index f281e4c8..e1426654 100644 --- a/SHADE_Managed/src/Input/Input.hxx +++ b/SHADE_Managed/src/Input/Input.hxx @@ -321,5 +321,7 @@ namespace SHADE /// The key to check. /// Time in seconds that the key was held. static double GetMouseReleasedTime(MouseCode mouseButton); + + static Vector2 GetMouseVelocity(); }; } \ No newline at end of file diff --git a/TempScriptsFolder/CameraControl.cs b/TempScriptsFolder/CameraControl.cs new file mode 100644 index 00000000..fc900f46 --- /dev/null +++ b/TempScriptsFolder/CameraControl.cs @@ -0,0 +1,22 @@ +using System; +using SHADE; + +namespace SHADE_Scripting +{ + public class CameraControl :Script + { + public float turnSpeed = 0.5f; + + public CameraControl(GameObject go) : base(go) { } + protected override void update() + { + //Camera + Camera cam = GetComponent(); + Vector2 mouseVel = Input.GetMouseVelocity(); + + cam.Pitch -= mouseVel.y * turnSpeed * (float)Time.DeltaTime; + cam.Yaw += mouseVel.x * turnSpeed * (float)Time.DeltaTime; + + } + } +} diff --git a/TempScriptsFolder/CameraTest.cs b/TempScriptsFolder/CameraTest.cs deleted file mode 100644 index 867f3dcc..00000000 --- a/TempScriptsFolder/CameraTest.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using SHADE; - -namespace SHADE_Scripting -{ - class CameraTest :Script - { - } -} diff --git a/TempScriptsFolder/ThirdPersonCamera.cs b/TempScriptsFolder/ThirdPersonCamera.cs new file mode 100644 index 00000000..e3b043bd --- /dev/null +++ b/TempScriptsFolder/ThirdPersonCamera.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SHADE; + + +namespace SHADE_Scripting +{ + public class ThirdPersonCamera: Script + { + + public float armLength = 4.0f; + public float turnSpeedPitch = 0.3f; + public float turnSpeedYaw = 0.5f; + public float pitchClamp = 45.0f; + public ThirdPersonCamera(GameObject go) : base(go) { } + + protected override void awake() + { + if(!GetComponent()) + { + AddComponent(); + } + if (!GetComponent()) + { + AddComponent(); + } + GetComponent().ArmLength = armLength; + } + + protected override void update() + { + CameraArm arm = GetComponent(); + if(arm) + { + Vector2 vel = Input.GetMouseVelocity(); + arm.Pitch -= vel.y * turnSpeedPitch * Time.DeltaTimeF; + arm.Yaw += vel.x * turnSpeedYaw * Time.DeltaTimeF; + + if(arm.Pitch > pitchClamp) + { + arm.Pitch = pitchClamp; + } + else if(arm.Pitch < -pitchClamp) + { + arm.Pitch = -pitchClamp; + } + + } + } + + } +} From e0dcf9e13e5eaff23b372138414a2246301dfe9b Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 15:32:01 +0800 Subject: [PATCH 618/793] Added Editor State Change events --- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 18 +++++ .../EditorWindow/MenuBar/SHEditorMenuBar.h | 6 ++ SHADE_Engine/src/Events/SHEventDefines.h | 3 + SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 67 +++++++++++-------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 1 + 5 files changed, 67 insertions(+), 28 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 50b878a8..06c0c2ae 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -175,19 +175,37 @@ namespace SHADE ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY); if(ImGui::SmallButton(ICON_MD_PLAY_ARROW)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::PLAY; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); if(ImGui::SmallButton(ICON_MD_PAUSE)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::PAUSE; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PAUSE_EVENT); } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP); if(ImGui::SmallButton(ICON_MD_STOP)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::STOP; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); } ImGui::EndDisabled(); ImGui::EndMenuBar(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h index 7cbcd696..e4f1d20b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h @@ -20,4 +20,10 @@ namespace SHADE float menuBarHeight = 20.0f; std::vector layoutPaths; };//class SHEditorMenuBar + + struct SHEditorStateChangeEvent + { + SHEditor::State previousState; + }; + }//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 804fbfec..d649fabf 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -13,4 +13,7 @@ constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT { 4 }; constexpr SHEventIdentifier SH_SCENEGRAPH_CHANGE_PARENT_EVENT { 5 }; constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_ADDED_EVENT { 6 }; constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_REMOVED_EVENT { 7 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PLAY_EVENT { 8 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PAUSE_EVENT { 9 }; +constexpr SHEventIdentifier SH_EDITOR_ON_STOP_EVENT { 10 }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index b1248509..e1acccd9 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -17,7 +17,6 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Editor/SHEditor.h" #include "Math/SHMathHelpers.h" #include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneManager.h" @@ -212,6 +211,12 @@ namespace SHADE const std::shared_ptr REMOVE_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::RemovePhysicsComponent) }; const ReceiverPtr REMOVE_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(REMOVE_COMPONENT_RECEIVER); SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, REMOVE_COMPONENT_RECEIVER_PTR); + + #ifdef SHEDITOR + const std::shared_ptr EDITOR_STOP_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::ResetWorld) }; + const ReceiverPtr EDITOR_STOP_RECEIVER_PTR = std::dynamic_pointer_cast(EDITOR_STOP_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, EDITOR_STOP_RECEIVER_PTR); + #endif } void SHPhysicsSystem::Exit() @@ -289,16 +294,6 @@ namespace SHADE if (rigidBodyComponent) { - // Clear all forces and velocities if editor is stopped - if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) - { - auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - rp3dRigidBody->setLinearVelocity(SHVec3::Zero); - rp3dRigidBody->setAngularVelocity(SHVec3::Zero); - } - // Sync active states const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; SyncActiveStates(physicsObject, COMPONENT_ACTIVE); @@ -324,11 +319,11 @@ namespace SHADE void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept { - auto* physicsSystem = reinterpret_cast(GetSystem()); - auto scriptSys = SHSystemManager::GetSystem(); - if (!scriptSys) + auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) { - SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + SHLOGV_WARNING("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); } fixedTimeStep = 1.0 / physicsSystem->fixedDT; @@ -337,10 +332,9 @@ namespace SHADE int count = 0; while (accumulatedTime > fixedTimeStep) { - if (scriptSys) - { - scriptSys->ExecuteFixedUpdates(); - } + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteFixedUpdates(); + physicsSystem->world->update(static_cast(fixedTimeStep)); accumulatedTime -= fixedTimeStep; @@ -356,6 +350,11 @@ namespace SHADE void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept { auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) + { + SHLOGV_WARNING("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); + } // Interpolate transforms for rendering if (physicsSystem->worldUpdated) @@ -363,15 +362,8 @@ namespace SHADE physicsSystem->SyncTransforms(); // Collision & Trigger messages - auto scriptSys = SHSystemManager::GetSystem(); - if (scriptSys) - { - scriptSys->ExecuteCollisionFunctions(); - } - else - { - SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); - } + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteCollisionFunctions(); physicsSystem->ClearInvalidCollisions(); } @@ -678,4 +670,23 @@ namespace SHADE return EVENT_DATA->handle; } + SHEventHandle SHPhysicsSystem::ResetWorld(SHEventPtr editorStopEvent) + { + // TODO(Diren): Rebuild world based on how scene reloading is done + + for (auto& [entityID, physicsObject] : map) + { + if (SHComponentManager::HasComponent(entityID)) + { + auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + rp3dRigidBody->setLinearVelocity(SHVec3::Zero); + rp3dRigidBody->setAngularVelocity(SHVec3::Zero); + } + } + + return editorStopEvent->handle; + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index dd399f96..1d773618 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -189,6 +189,7 @@ namespace SHADE SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); + SHEventHandle ResetWorld (SHEventPtr editorStopEvent); template From a45432ef665bbe645ad8673c18c334be45a6f86f Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 1 Nov 2022 15:35:50 +0800 Subject: [PATCH 619/793] Merge conflict --- SHADE_Managed/src/Engine/Time.cxx | 1 + SHADE_Managed/src/Engine/Time.hxx | 1 + 2 files changed, 2 insertions(+) diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx index e244f3c5..36032e00 100644 --- a/SHADE_Managed/src/Engine/Time.cxx +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -34,6 +34,7 @@ namespace SHADE float Time::DeltaTimeF::get() { return static_cast(SHFrameRateController::GetRawDeltaTime()); + } double Time::FixedDeltaTime::get() { return SHPhysicsSystemInterface::GetFixedDT(); diff --git a/SHADE_Managed/src/Engine/Time.hxx b/SHADE_Managed/src/Engine/Time.hxx index d97b74df..c0f0ed62 100644 --- a/SHADE_Managed/src/Engine/Time.hxx +++ b/SHADE_Managed/src/Engine/Time.hxx @@ -41,6 +41,7 @@ namespace SHADE static property float DeltaTimeF { float get(); + } ///
    /// Time taken for Physics simulations. You should use this for operations /// within Script.FixedUpdate() From 39910afa5439d3ed782f41622960b338c0c1e0c8 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 1 Nov 2022 15:49:15 +0800 Subject: [PATCH 620/793] Added GetForward to Camera C# interface. GetForward gets the forward according to Camera's last calculated view matrix --- SHADE_Managed/src/Components/Camera.cxx | 9 ++++++++- SHADE_Managed/src/Components/Camera.hxx | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Components/Camera.cxx b/SHADE_Managed/src/Components/Camera.cxx index f90e2bfe..5e570cc1 100644 --- a/SHADE_Managed/src/Components/Camera.cxx +++ b/SHADE_Managed/src/Components/Camera.cxx @@ -114,7 +114,14 @@ namespace SHADE system->CameraLookAt(*GetNativeComponent(), Convert::ToNative(targetPosition)); } - + Vector3 Camera::GetForward() + { + auto system = SHSystemManager::GetSystem(); + SHVec3 forward, up, right; + system->GetCameraAxis(*GetNativeComponent(), forward, right, up); + return Convert::ToCLI(forward); + + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Components/Camera.hxx b/SHADE_Managed/src/Components/Camera.hxx index e5a017b3..257bff11 100644 --- a/SHADE_Managed/src/Components/Camera.hxx +++ b/SHADE_Managed/src/Components/Camera.hxx @@ -65,5 +65,6 @@ namespace SHADE void SetMainCamera(size_t directorIndex); void SetMainCamera(); void LookAt(Vector3 targetPosition); + Vector3 GetForward(); }; } \ No newline at end of file From 8afe8c1a79a71e255ba1e88bafe9eea8efcc4f3e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 17:24:20 +0800 Subject: [PATCH 621/793] GameObjects on scripts can now be edited in the inspector and are serialized --- .../HierarchyPanel/SHHierarchyPanel.cpp | 14 +++++---- SHADE_Engine/src/Editor/SHEditorUI.cpp | 30 +++++++++++++++++++ SHADE_Engine/src/Editor/SHEditorUI.h | 8 +++++ SHADE_Managed/src/Editor/Editor.cxx | 15 ++++++++-- .../src/Serialisation/ReflectionUtilities.cxx | 10 +++++++ 5 files changed, 70 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 55d78421..1b289a90 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -195,18 +195,22 @@ namespace SHADE if (SHDragDrop::BeginSource()) { std::string moveLabel = "Moving EID: "; + static std::vector draggingEntities = editor->selectedEntities; if (!isSelected) - editor->selectedEntities.push_back(eid); - for (int i = 0; i < static_cast(editor->selectedEntities.size()); ++i) { - moveLabel.append(std::to_string(editor->selectedEntities[i])); - if (i + 1 < static_cast(editor->selectedEntities.size())) + draggingEntities.clear(); + draggingEntities.push_back(eid); + } + for (int i = 0; i < static_cast(draggingEntities.size()); ++i) + { + moveLabel.append(std::to_string(draggingEntities[i])); + if (i + 1 < static_cast(draggingEntities.size())) { moveLabel.append(", "); } } ImGui::Text(moveLabel.c_str()); - SHDragDrop::SetPayload>(SHDragDrop::DRAG_EID, &editor->selectedEntities); + SHDragDrop::SetPayload>(SHDragDrop::DRAG_EID, &draggingEntities); SHDragDrop::EndSource(); } else if (SHDragDrop::BeginTarget()) //If Received DragDrop diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 0137b951..f3760b4d 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include #include "SHEditorWidgets.hpp" +#include "ECS_Base/Managers/SHEntityManager.h" namespace SHADE { @@ -287,6 +288,35 @@ namespace SHADE return CHANGED; } + bool SHEditorUI::InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered) + { + ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); + ImGui::SameLine(); + SHEntity* entity = SHEntityManager::GetEntityByID(value); + std::ostringstream oss; + if (entity) + { + oss << value << ": " << entity->name; + } + std::string entityName = oss.str(); + bool changed = ImGui::InputText("##", &entityName, ImGuiInputTextFlags_ReadOnly); + if (SHDragDrop::BeginTarget()) + { + if (const std::vector* payload = SHDragDrop::AcceptPayload>(SHDragDrop::DRAG_EID)) + { + if (!payload->empty()) + { + value = payload->at(0); + changed = true; + } + SHDragDrop::EndTarget(); + } + } + return changed; + } + bool SHEditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames, bool* isHovered) { // Clamp input value diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index f3051aa1..d4104639 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -308,6 +308,14 @@ namespace SHADE /// True if the value was changed. static bool InputTextField(const std::string& label, std::string& value, bool* isHovered = nullptr); /// + /// Creates a drag field widget for int input. + /// + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// The type of enum to input. diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 1097e203..55fe91da 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -260,7 +260,7 @@ namespace SHADE int val = safe_cast(field->GetValue(object)); int oldVal = val; - if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) + if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames, &isHovered)) { field->SetValue(object, val); registerUndoAction(object, field, val, oldVal); @@ -280,12 +280,23 @@ namespace SHADE // Actual Field std::string val = Convert::ToNative(stringVal); std::string oldVal = val; - if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val)) + if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val, &isHovered)) { field->SetValue(object, Convert::ToCLI(val)); registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } + else if (field->FieldType == GameObject::typeid) + { + GameObject gameObj = safe_cast(field->GetValue(object)); + uint32_t entityId = gameObj.GetEntity(); + if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered)) + { + GameObject newVal = GameObject(entityId); + field->SetValue(object, newVal); + registerUndoAction(object, field, newVal, gameObj); + } + } else { array^ interfaces = field->FieldType->GetInterfaces(); diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index f114d01b..4b4e44fc 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "Math/Vector2.hxx" #include "Math/Vector3.hxx" #include "Utility/Debug.hxx" +#include "Engine/GameObject.hxx" /*-------------------------------------------------------------------------------------*/ /* Macro Functions */ @@ -167,6 +168,11 @@ namespace SHADE fieldNode.push_back(vec.y); fieldNode.push_back(vec.z); } + else if (fieldInfo->FieldType == GameObject::typeid) + { + GameObject gameObj = safe_cast(fieldInfo->GetValue(object)); + fieldNode = gameObj.GetEntity(); + } else // Not any of the supported types { Debug::LogWarning(Convert::ToNative(System::String::Format @@ -242,6 +248,10 @@ namespace SHADE ); } } + else if (fieldInfo->FieldType == GameObject::typeid) + { + fieldInfo->SetValue(object, GameObject(node.as())); + } else // Not any of the supported types { Debug::LogWarning(Convert::ToNative(System::String::Format From e397d180dd3f065d98b1575ad012b40045de3065 Mon Sep 17 00:00:00 2001 From: Glence Date: Tue, 1 Nov 2022 17:49:01 +0800 Subject: [PATCH 622/793] jumping almost there --- TempScriptsFolder/PlayerController.cs | 113 ++++++++++++++++++-------- 1 file changed, 77 insertions(+), 36 deletions(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 468ae162..98c3d3b5 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -19,47 +19,58 @@ public class PlayerController : Script private RigidBody rb; private Transform tranform; - private float xAxisMove; - private float zAxisMove; - public float drag = 4.0f; + private int xAxisMove; + private int zAxisMove; + public float drag = 2.0f; private bool isMoveKeyPress = false; public RaccoonStates currentState = RaccoonStates.IDILE; public float maxMoveVel = 2.0f; - public float moveForce = 200.0f; - public float sprintMultiplier = 1.5f; + public float moveForce = 50.0f; + public float sprintMultiplier = 2.0f; private float oldForce; private float maxOldVel; private bool sprintIncreaseOnce = false; public float rotationFactorPerFrame = 1.0f; - public float jumpForce = 500.0f; -/* public float initialJumpForce = 100.0f; - public float maxJumpForce = 500.0f; - public float maxJumpTime = 500.0f;*/ + + public float initialJumpVel; + public float maxJumpHeight = 1.0f; + public float maxJumpTime = 0.5f; private bool isJumping = false; - private bool isGrounded = false; + public bool isGrounded = true; + private float gravity = -9.8f; + private float groundGravity = -0.5f; public PlayerController(GameObject gameObj) : base(gameObj) { } protected override void awake() { + //rigidbody check rb = GetComponent(); if (rb == null) Debug.LogError("RigidBody is NULL!"); else rb.Drag = drag; + //Transform check tranform = GetComponent(); if(tranform == null) Debug.LogError("tranform is NULL!"); + //Jump setup + float timeToApex = maxJumpTime / 2; + gravity = (-2 * maxJumpHeight) / MathF.Pow(timeToApex, 2); + initialJumpVel = (2 * maxJumpHeight) / timeToApex; + + //toRemove tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); - tranform.LocalRotation = Quaternion.Euler(0.0f,0.0f,0.0f); + tranform.LocalRotation = Quaternion.Euler(0.0f, 0.0f, 0.0f); } protected override void update() { + //toRemove if (Input.GetKey(Input.KeyCode.G)) { tranform.LocalRotation = Quaternion.Euler(0.0f, 0.0f, 0.0f); @@ -67,17 +78,18 @@ public class PlayerController : Script } MoveKey(); - //Rotation(); - Move(); - Sprint(); - Jump(); - //Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); + Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } protected override void fixedUpdate() { + //Rotation(); + Move(); + Sprint(); + Jump(); + Gravity(); } @@ -108,24 +120,25 @@ public class PlayerController : Script private void Move() { - if (isMoveKeyPress && rb != null) + if (rb != null) { rb.AddForce(new Vector3(moveForce * xAxisMove, 0.0f, moveForce * zAxisMove)); - if (rb.LinearVelocity.x > maxMoveVel || rb.LinearVelocity.x < -maxMoveVel) + if (isMoveKeyPress) { - Vector3 v = rb.LinearVelocity; - v.x = System.Math.Clamp(v.x, -maxMoveVel, maxMoveVel); - rb.LinearVelocity = v; + if (rb.LinearVelocity.x > maxMoveVel || rb.LinearVelocity.x < -maxMoveVel) + { + Vector3 v = rb.LinearVelocity; + v.x = System.Math.Clamp(v.x, -maxMoveVel, maxMoveVel); + rb.LinearVelocity = v; + } + if (rb.LinearVelocity.z > maxMoveVel || rb.LinearVelocity.z < -maxMoveVel) + { + Vector3 v = rb.LinearVelocity; + v.z = System.Math.Clamp(v.z, -maxMoveVel, maxMoveVel); + rb.LinearVelocity = v; + } } - if (rb.LinearVelocity.z > maxMoveVel || rb.LinearVelocity.z < -maxMoveVel) - { - Vector3 v = rb.LinearVelocity; - v.z = System.Math.Clamp(v.z, -maxMoveVel, maxMoveVel); - rb.LinearVelocity = v; - } - - } } @@ -138,10 +151,10 @@ public class PlayerController : Script { sprintIncreaseOnce = true; oldForce = moveForce; - moveForce = moveForce * sprintMultiplier; + moveForce *= sprintMultiplier; maxOldVel = maxMoveVel; - maxMoveVel = maxMoveVel * sprintMultiplier; + maxMoveVel *= sprintMultiplier; } } @@ -160,16 +173,23 @@ public class PlayerController : Script { if (currentState == RaccoonStates.WALKING || currentState == RaccoonStates.RUNNING || currentState == RaccoonStates.IDILE) { - if (Input.GetKeyDown(Input.KeyCode.Space) && rb != null) + if (Input.GetKeyDown(Input.KeyCode.Space)&& isGrounded && rb != null) { - currentState = RaccoonStates.INAIR; isJumping = true; - rb.AddForce(new Vector3(0.0f, jumpForce, 0.0f)); + Vector3 v = rb.LinearVelocity; + v.y = initialJumpVel; + rb.LinearVelocity = v; } } - //collision check when grounded + if (rb != null) + { + if (rb.LinearVelocity.y > 0 && isJumping) + currentState = RaccoonStates.INAIR; + else if(rb.LinearVelocity.y < 0 && isJumping) + currentState = RaccoonStates.FALLING; + } } private void Rotation() @@ -190,9 +210,30 @@ public class PlayerController : Script } } + private void Gravity() + { + if (rb != null) + { + //check player vel.y if its close to zero its on the ground + if (SHADE.Math.CompareFloat(rb.LinearVelocity.y, 0.0f, 0.1f)) + isGrounded = true; + else + isGrounded = false; + + Vector3 v = rb.LinearVelocity; + + if (isGrounded) + v.y = groundGravity; + else + v.y += gravity * (float)Time.DeltaTime; + + rb.LinearVelocity = v; + + } + } + protected override void onCollisionEnter(CollisionInfo info) { - Debug.Log($"Collision Enter: {info.GameObject.Name}"); } From 72dc07bbd9f5ef716a90fca533862ae3878fb255 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 1 Nov 2022 19:00:31 +0800 Subject: [PATCH 623/793] Shifted Hierarchy interface from Transform to GameObject --- SHADE_Managed/src/Components/Transform.cxx | 26 ---------------------- SHADE_Managed/src/Components/Transform.hxx | 24 -------------------- SHADE_Managed/src/Engine/GameObject.cxx | 21 ++++++++++++----- SHADE_Managed/src/Engine/GameObject.hxx | 12 +++------- 4 files changed, 18 insertions(+), 65 deletions(-) diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx index 98f0da4f..927ce87f 100644 --- a/SHADE_Managed/src/Components/Transform.cxx +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -87,15 +87,6 @@ namespace SHADE { GetNativeComponent()->SetWorldScale(Convert::ToNative(val)); } - Transform^ Transform::Parent::get() - { - auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(owner.GetEntity()); - if (!node) - throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); - - const auto PARENT = node->GetParent(); - return PARENT ? gcnew Transform(PARENT->GetEntityID()) : nullptr; - } /*---------------------------------------------------------------------------------*/ /* Constructors */ @@ -103,21 +94,4 @@ namespace SHADE Transform::Transform(Entity entity) : Component(entity) {} - - /*---------------------------------------------------------------------------------*/ - /* Usage Functions */ - /*---------------------------------------------------------------------------------*/ - - void Transform::SetParent(Transform^ parent, bool worldPositionStays) - { - auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - auto node = sceneGraph.GetNode(owner.GetEntity()); - if (!node) - throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); - - if (parent) - node->SetParent(sceneGraph.GetNode(parent->owner.GetEntity())); - else - sceneGraph.SetParent(parent->owner.GetEntity(), nullptr); - } } diff --git a/SHADE_Managed/src/Components/Transform.hxx b/SHADE_Managed/src/Components/Transform.hxx index bbe9fd19..942c6224 100644 --- a/SHADE_Managed/src/Components/Transform.hxx +++ b/SHADE_Managed/src/Components/Transform.hxx @@ -107,30 +107,6 @@ namespace SHADE Vector3 get(); void set(Vector3 val); } - /// - /// Parent Transform that affects this Transform. - /// - property Transform^ Parent - { - Transform^ get(); - } - - /*-----------------------------------------------------------------------------*/ - /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Sets the parent of this Transform component. - /// - /// - /// Entity that contains the Transform component that this Transform will be - /// parented to. If null, unparenting will occur. - /// - /// - /// If true, the transform values of this Transform component will retain their - /// pre-parent-change global transforms. The local transform values will be - /// modified to ensure that the global transforms do not change. - /// - void SetParent(Transform^ parent, bool worldPositionStays); }; } diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 965e0ef2..7ceabfed 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -79,11 +79,24 @@ namespace SHADE } GameObject^ GameObject::Parent::get() { - return nullptr; + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + const auto* ROOT = SCENE_GRAPH.GetRoot(); + + const auto* NODE = SCENE_GRAPH.GetNode(entity); + if (NODE == nullptr) + throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); + + const auto* PARENT = NODE->GetParent(); + return PARENT != ROOT ? gcnew GameObject(PARENT->GetEntityID()) : nullptr; } void GameObject::Parent::set(GameObject^ newParent) { - + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + + if (newParent == nullptr) + SCENE_GRAPH.SetParent(entity, nullptr); + else + SCENE_GRAPH.SetParent(entity, newParent->EntityId); } /*---------------------------------------------------------------------------------*/ @@ -97,10 +110,6 @@ namespace SHADE { GetNativeEntity().SetActive(active); } - System::Collections::ArrayList^ GameObject::GetChildren() - { - return children; - } /*---------------------------------------------------------------------------------*/ /* Component Functions */ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index a0b5086a..99296a91 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -93,6 +93,9 @@ namespace SHADE { Entity get(); } + /// + /// The parent entity for this GameObject. + /// property GameObject^ Parent { GameObject^ get(); @@ -117,15 +120,6 @@ namespace SHADE /// Whether to activate or deactivate this GameObject. /// void SetActive(bool active); - - /// - /// Gets the list of GameObjects that are the children of this GameObject. - /// - /// - /// The list of GameObjects that are the children of this GameObject. List is empty is - /// there is none. - /// - System::Collections::ArrayList^ GetChildren(); /*-----------------------------------------------------------------------------*/ From 26591e8c245dd8bbd74471d6ca8d9f028fb6a2cd Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 1 Nov 2022 19:03:08 +0800 Subject: [PATCH 624/793] material inspector --- .../MaterialInspector/SHMaterialInspector.cpp | 81 +++++++++++++++++++ .../MaterialInspector/SHMaterialInspector.h | 28 +++++++ 2 files changed, 109 insertions(+) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp new file mode 100644 index 00000000..c4904533 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp @@ -0,0 +1,81 @@ +#include "SHpch.h" +#include "SHMaterialInspector.h" +#include "Editor/SHImGuiHelpers.hpp" +#include + +//#include "Assets/SHAssetManager.h" +//#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +//#include "Editor/SHEditorWidgets.hpp" +//#include "Resource/SHResourceManager.h" + +namespace SHADE +{ + SHMaterialInspector::SHMaterialInspector() + :SHEditorWindow("Material Inspector", ImGuiWindowFlags_MenuBar)//,isNewMaterial(false), currentViewedMaterial(0) + { + } + + void SHMaterialInspector::OpenMaterial(AssetID const& assetId) noexcept + { + //Get mat data + //isNewMaterial = false; + } + + void SHMaterialInspector::Init() + { + SHEditorWindow::Init(); + } + + void SHMaterialInspector::Update() + { + SHEditorWindow::Update(); + + //if(Begin()) + //{ + // DrawMenuBar(); + + // if(SHEditorWidgets::DragDropReadOnlyField("Vertex Shader", std::to_string(currentMatSpec.vertexShader), [&](){return currentMatSpec.vertexShader;}, [&](AssetID const& id){currentMatSpec.vertexShader = id;}, SHDragDrop::DRAG_RESOURCE)) + // { + // vertShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.vertexShader); + // } + // if(SHEditorWidgets::DragDropReadOnlyField("Fragment Shader", std::to_string(currentMatSpec.fragShader), [&](){return currentMatSpec.fragShader;}, [&](AssetID const& id){currentMatSpec.fragShader = id;}, SHDragDrop::DRAG_RESOURCE)) + // { + // fragShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.fragShader); + // } + + // auto vertInterface = vertShaderHandle->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); + + // int const varCount = static_cast(vertInterface->GetVariableCount()); + // + // for(int i = 0; i < varCount; ++i) + // { + // auto variable = vertInterface->GetVariable(i); + // } + + //} + //ImGui::End(); + } + + void SHMaterialInspector::Exit() + { + SHEditorWindow::Exit(); + } + + void SHMaterialInspector::CreateNewMaterial() + { + //isNewMaterial = true; + ////prompt for a name + //currentViewedMaterial = SHAssetManager::CreateNewAsset(AssetType::MATERIAL, "NewMaterial"); + //currentMatSpec = {}; + //vertShaderHandle = {}; + //fragShaderHandle = {}; + } + + void SHMaterialInspector::DrawMenuBar() + { + if(ImGui::BeginMenuBar()) + { + ImGui::EndMenuBar(); + } + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h new file mode 100644 index 00000000..7256a0b6 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h @@ -0,0 +1,28 @@ +#pragma once +#include "Assets/SHAssetMacros.h" +#include "Editor/EditorWindow/SHEditorWindow.h" + + +namespace SHADE +{ + class SHMaterialInspector final : public SHEditorWindow + { + public: + SHMaterialInspector(); + ~SHMaterialInspector() = default; + + void Init() override; + void Update() override; + void Exit() override; + + void CreateNewMaterial(); + void OpenMaterial(AssetID const& assetId) noexcept; + private: + void DrawMenuBar(); + + //bool isNewMaterial; + //AssetID currentViewedMaterial; + //SHMaterialSpec currentMatSpec; + //Handle vertShaderHandle, fragShaderHandle; + }; +} From b0d08d27fd1f5a7a3e43d17d2269c8766082408b Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 1 Nov 2022 20:10:59 +0800 Subject: [PATCH 625/793] SSAO is fully implemented --- Assets/Shaders/DeferredComposite_CS.glsl | 12 ++-- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4789 -> 4997 bytes Assets/Shaders/SSAOBlur_CS.glsl | 58 ++++++++++++++++++ Assets/Shaders/SSAOBlur_CS.shshaderb | Bin 0 -> 4669 bytes Assets/Shaders/SSAO_CS.glsl | 35 +++++++---- Assets/Shaders/SSAO_CS.shshaderb | Bin 6237 -> 6125 bytes .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 12 +++- 7 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 Assets/Shaders/SSAOBlur_CS.glsl create mode 100644 Assets/Shaders/SSAOBlur_CS.shshaderb diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index da13b1b4..833180e7 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -21,7 +21,7 @@ layout(set = 4, binding = 0, rgba32f) uniform image2D positions; layout(set = 4, binding = 1, rgba32f) uniform image2D normals; layout(set = 4, binding = 2, rgba8) uniform image2D albedo; layout(set = 4, binding = 3, r32ui) uniform uimage2D lightLayerData; -layout(set = 4, binding = 4, rgba32f) uniform image2D ssaoImage; +layout(set = 4, binding = 4, r8) uniform image2D ssaoBlurredImage; layout(set = 4, binding = 5, rgba8) uniform image2D targetImage; layout(set = 1, binding = 0) uniform LightCounts @@ -55,7 +55,7 @@ void main() vec3 positionView = imageLoad (positions, globalThread).rgb; // normal of fragment - vec3 normalView = -imageLoad(normals, globalThread).rgb; + vec3 normalView = imageLoad(normals, globalThread).rgb; vec3 fragColor = vec3 (0.0f); @@ -78,9 +78,11 @@ void main() fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (AmbLightData.aLightData[i].strength); } + float ssaoVal = imageLoad (ssaoBlurredImage, globalThread).r; + fragColor *= ssaoVal; + // store result into result image - //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalView, 1.0f)); - //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgba/*, 1.0f*/)); + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor.rgb, 1.0f)); + //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(ssaoVal.rrr, 1.0f)); } \ No newline at end of file diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index 525f3c4ced3b824db7ef716d0d4f39927b2b018e..8d7a83271b3d684965b4a639eba7e74329c9469d 100644 GIT binary patch literal 4997 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 diff --git a/Assets/Shaders/SSAOBlur_CS.glsl b/Assets/Shaders/SSAOBlur_CS.glsl new file mode 100644 index 00000000..64066525 --- /dev/null +++ b/Assets/Shaders/SSAOBlur_CS.glsl @@ -0,0 +1,58 @@ +#version 450 + +#define BLUR_WIDTH 5 +#define BLUR_HALF_WIDTH BLUR_WIDTH / 2 +#define SHM_WIDTH BLUR_WIDTH + 16 - 1 + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, r8) uniform image2D ssaoImage; +layout(set = 4, binding = 1, r8) uniform image2D ssaoBlurImage; + + +float GetSSAOValue(ivec2 uv, ivec2 imageSize) +{ + if (uv.x >= 0 && uv.y >= 0 && uv.x < imageSize.x && uv.y < imageSize.y) + { + return imageLoad (ssaoImage, uv).r; + } + + return 0.0f; +} + +shared float sharedPixels[16 + BLUR_WIDTH - 1][16 + BLUR_WIDTH - 1]; + +void main() +{ + ivec2 globalThread = ivec2 (gl_GlobalInvocationID.xy); + ivec2 localThread = ivec2 (gl_LocalInvocationID.xy); + ivec2 inputImageSize = imageSize(ssaoImage); + + // Load color into shared memory + ivec2 start = ivec2 (gl_WorkGroupID) * ivec2 (gl_WorkGroupSize) - (BLUR_HALF_WIDTH); + for (int i = localThread.x; i < SHM_WIDTH; i += int (gl_WorkGroupSize.x)) + { + for (int j = localThread.y; j < SHM_WIDTH; j += int (gl_WorkGroupSize.y)) + { + float value = GetSSAOValue (start + ivec2 (i, j), inputImageSize); + sharedPixels[i][j] = value; + } + } + + // wait for all shared memory to load + barrier(); + + ivec2 shmStart = ivec2 (localThread + (BLUR_HALF_WIDTH)); + + float sum = 0; + for (int i = -BLUR_HALF_WIDTH; i <= BLUR_HALF_WIDTH; ++i) + { + for (int j = -BLUR_HALF_WIDTH; j <= BLUR_HALF_WIDTH; ++j) + { + float sharedVal = sharedPixels[shmStart.x + i][shmStart.y + j]; + sum += sharedVal; + } + } + + sum /= (BLUR_WIDTH * BLUR_WIDTH); + imageStore(ssaoBlurImage, globalThread, vec4(sum.rrr, 1.0f)); +} \ No newline at end of file diff --git a/Assets/Shaders/SSAOBlur_CS.shshaderb b/Assets/Shaders/SSAOBlur_CS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..680cb8d5f8bd787a251d73bf38d4d814202e13e0 GIT binary patch literal 4669 zcmZ9O2X~ZJ5QaYj8={B^0*a!7y&@v09BUL^qtQfzy~HJ1VRcj7Y+_f$hF!7ug1uu$ z#jeMn;h(Ucqxd{u?sz_P&w0F!;)NroR+obe7UoybJ0k%f6>xqi=DE4Hd>W@K$y34IC}sMH4Kj|V4%Gr$hy z&^I&Jwa4d8CPxeUcPu=GYRa9x<*u%B=gGZ&!^6EJ&1>t`-g<4Y+S^}iRQsB>v8r)x zg}B;aUwyQ{7*HajSVxKY>8w$%HhX&7yUwlDN2~jf)s`GB;7imn4LLfdUdpyZuMJdI zS9@yLv0TpChmn!WP=|cZwPwd4SJ#JDRq89(G^&+;Ok&&eeXp+fmUCCf;Mh=KrCA#q z>{yZeOPR6`8Pl9&pP17rJz)wtTeA-QwZY-hW?sN}VeYdNexzAxG?B*HYx0~o)VQ+T z7#baRQTKPD^YfU=ne|_h>r=8}WS{=0kF$1G&BdJ=T93eSG~=wlSY)K8^+5J#3bv*C*CT8`1AFd-V+V z1XDoR3(+0g-Z#&2ezNVU_O8jcH`==-+jWZhw9V%mFyD_zdS#c|FKBxwm;@O z4(WRG=F|3!e%g<7fSib!^Uz%*>^}6_ zz#4~;&T}vN&2=5nKOg&gq&_+A8<29^&c6|9Kjf`h+czSoe_hgx`PaimJ+5~bXk(L6 z-^1AdY~8vw><_SU=YI2i0)W^ho_{kY#I+kNy3CHQuw<{A|4E za>6@v1iiFA_uw$sA221PYkF7x_Sv_vS4^-wCfI(bBHp`u;RL%{usxIEg6(>KmtwxQ z-=(7M_a|)U`|Sza^)^hf{RV~K_>IXvmi>8O+ktnri>MQjCjvR)@H}oH)*L4R{m0QM z`=T9rPC@rhN1igeoNyHLoQkdAJoZ!DJd2U1fhAx~TJ!Y88Edb#W6d+seK*$Eh3p1$ zXK{kQpR*E&_>Vg~an{qF-cnEQ&oX_tCGK2wdEZ&YosaGt6YEmk1?a}=vqsNft{wj@ zSCIOZk!uyYIX1E03}io$>jQt0 zL;F%-F6XL8ZI`24n{OfVtwxu(Ht(voYp+2%UukXru3ZTn`u$DQuZ&#&wwfbq^Uso8 z)TUhn=5nsObEhJ&0`@X;HPGE>*#01!JI~PDSf^( z?d6=%Hppwibl@C)#`sp{qlTN&i#4sqwkG}NxCJ<;ot*2Cw*tSJ&RYx2DQBELw4e4t z8Ef2zZcg{)-MJmetpv{3Cs#Zp`>A~y(tOIucL%yPN4`7J-7Xh;z6XJ>E#1!+j}EU%bux(d8Y%J%BDZ2}HgJ(T&yTe(y%gsXv5Vp7agK zhkg2+>7r>`%z#n=c-$S-`808ndDQt z?sLfJfx~rQKsr|$>%NF?j#&34bh%hp`&nQv=c>p1eHq<;6u&L6V9Q7TSJB;9ocC+! z#>hvW*U`;055&AT(B;E^6Wux^&s*rm$jAMD8{PZu8v320b2fD50tn))`xeq{`mz?wCyzH&Ecf@?k$oCO?v40<9 z%SAqYa?X!?=N*ate2VUV)~Ee^hA#IBi2cYJzZm&B*qm(N*B9WJWZRD~f%&@m8f-y+ zl{k6fTQcq&pwAK9x9D=dui(B*Tnnep##+j#bsuzVv3}#N!&>)4I;_>0eSw^{sz)9B zqfhMF0dVpWb0E647W;Y-wtUojFuL>Ptu@wCMy-dSTZ{D@ZynZpDAHlA#w-GI)~X)w qAa9wU;Bk)Bghe^~S>h literal 0 HcmV?d00001 diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index a359a3e8..1a572521 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -36,37 +36,45 @@ layout(set = 2, binding = 0) uniform CameraData void main() { - ivec2 size = imageSize (outputImage); + // image size of the SSAO image + ivec2 ssaoSize = imageSize (outputImage); + // global thread ivec2 globalThread = ivec2 (gl_GlobalInvocationID.xy); // load all the necessary variables vec3 viewSpacePos = imageLoad (positions, globalThread).rgb; vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb); - //viewSpaceNormal = -viewSpaceNormal; + // Get the noise dimension. This should be 4x4 vec2 noiseDim = vec2 (textureSize(noiseTexture, 0)); - vec2 threadUV = (vec2(globalThread) + vec2 (0.5f)) / vec2(size); - vec2 noiseUVMult = vec2 (vec2(size) / noiseDim); + + // Get normlized thread UV coordinates + vec2 threadUV = (vec2(globalThread)) / vec2(ssaoSize); + vec2 noiseUVMult = vec2 (vec2(ssaoSize) / noiseDim); noiseUVMult *= threadUV; + + // sample from the noise vec3 randomVec = texture(noiseTexture, noiseUVMult).rgb; // Gram schmidt vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec))); vec3 bitangent = normalize (cross (tangent, viewSpaceNormal)); - // matrix for tangent to view + // matrix for tangent space to view space mat3 TBN = mat3(tangent, bitangent, viewSpaceNormal); float occlusion = 0.0f; for (int i = 0; i < NUM_SAMPLES; ++i) { // We want to get a position at an offset from the view space position. Offset scaled by radius. - vec3 samplePos = TBN * ssaoData.samples[i].rgb; - samplePos = viewSpacePos + samplePos * RADIUS; + vec3 displacementVector = TBN * ssaoData.samples[i].rgb; + + // Why are we adding positions? + displacementVector = viewSpacePos + displacementVector * RADIUS; // Now we take that offset position and bring it to clip space - vec4 offsetPos = vec4 (samplePos, 1.0f); + vec4 offsetPos = vec4 (displacementVector, 1.0f); offsetPos = cameraData.projMat * offsetPos; // then we do perspective division @@ -74,20 +82,23 @@ void main() // and bring it from [-1, 1] to screen coordinates offsetPos.xyz = ((offsetPos.xyz * 0.5f) + 0.5f); - offsetPos.xy *= vec2(size.xy); + offsetPos.xy *= vec2(ssaoSize.xy); + // Now we attempt to get a position at that point. float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z; + // skip checks if (sampleDepth == 0.0f) continue; + // if sampled fragment is in front of current fragment, just occlude float rangeCheck = smoothstep (0.0f, 1.0f, RADIUS / abs (viewSpacePos.z - sampleDepth)); - occlusion += (sampleDepth <= samplePos.z - BIAS ? 1.0f : 0.0f) * rangeCheck; - //occlusion += (sampleDepth <= samplePos.z + BIAS ? 1.0f : 0.0f); + occlusion += (sampleDepth <= displacementVector.z - BIAS ? 1.0f : 0.0f) * rangeCheck; } occlusion = 1.0f - (occlusion / float(NUM_SAMPLES)); // store result into result image - imageStore(outputImage, globalThread, vec4(occlusion.rrr, 1.0f)); + imageStore(outputImage, globalThread, occlusion.rrrr); + } \ No newline at end of file diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb index a419165f53608005e3b2fbbadff33153e4be7f19..6bb4abcd8018cac584ecc8f8b59b86984eb528d7 100644 GIT binary patch literal 6125 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 G$o~MNH$(FP literal 6237 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 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6a3bd916..af3b46e1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -115,6 +115,7 @@ namespace SHADE SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl"); SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl"); SHAssetManager::CompileAsset("../../Assets/Shaders/SSAO_CS.glsl"); + SHAssetManager::CompileAsset("../../Assets/Shaders/SSAOBlur_CS.glsl"); shaderModuleLibrary.ImportAllShaderSource(device); shaderModuleLibrary.ReflectAllShaderModules(); @@ -169,7 +170,8 @@ namespace SHADE worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); worldRenderGraph->AddResource("Light Layer Indices", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("SSAO", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); + worldRenderGraph->AddResource("SSAO", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm); + worldRenderGraph->AddResource("SSAO Blur", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm); /*-----------------------------------------------------------------------*/ /* MAIN NODE */ @@ -184,7 +186,8 @@ namespace SHADE "Albedo", "Depth Buffer", "Scene", - "SSAO" + "SSAO", + "SSAO Blur" }, {}); // no predecessors @@ -225,12 +228,15 @@ namespace SHADE auto viewSamplerLayout = ssaoStorage->GetViewSamplerLayout(); ssaoPass->ModifyWriteDescImageComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_IMAGE_BINDING, {&viewSamplerLayout, 1}); + auto ssaoBlurShader = shaderModuleLibrary.GetBuiltInShaderModule("SSAOBlur_CS"); + Handle ssaoBlurPass = gBufferNode->AddNodeCompute(ssaoBlurShader, { "SSAO", "SSAO Blur"}); + /*-----------------------------------------------------------------------*/ /* DEFERRED COMPOSITE SUBPASS INIT */ /*-----------------------------------------------------------------------*/ auto deferredCompositeShader = shaderModuleLibrary.GetBuiltInShaderModule("DeferredComposite_CS"); - gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO", "Scene" }); + gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene" }); /*-----------------------------------------------------------------------*/ /* DUMMY SUBPASS TO TRANSITION SCENE FOR PRESENT USAGE */ From 674b4d5155e70751f54dbba888649de5a4473e01 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 20:29:03 +0800 Subject: [PATCH 626/793] Fixed extra # appearing on all names of script variables --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index f3760b4d..cc63c565 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -157,7 +157,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::Checkbox("#", &value); + return ImGui::Checkbox("##", &value); } bool SHEditorUI::InputInt(const std::string& label, int& value, bool* isHovered) { @@ -165,7 +165,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputInt("#", &value, + return ImGui::InputInt("##", &value, 1, 10, ImGuiInputTextFlags_EnterReturnsTrue); } @@ -176,7 +176,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - const bool CHANGED = InputInt("#", signedVal); + const bool CHANGED = InputInt("##", signedVal); if (CHANGED) { signedVal = std::clamp(signedVal, 0, std::numeric_limits::max()); @@ -190,7 +190,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputFloat("#", &value, + return ImGui::InputFloat("##", &value, 0.1f, 1.0f, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -200,7 +200,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputDouble("#", &value, + return ImGui::InputDouble("##", &value, 0.1, 1.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -210,7 +210,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputDouble("#", &value, + return ImGui::InputDouble("##", &value, 1.0, 45.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -280,7 +280,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - const bool CHANGED = ImGui::InputText("#", &buffer[0], TEXT_FIELD_MAX_LENGTH); + const bool CHANGED = ImGui::InputText("##", &buffer[0], TEXT_FIELD_MAX_LENGTH); if (CHANGED) { value = std::string(buffer.data(), buffer.data() + TEXT_FIELD_MAX_LENGTH); @@ -327,7 +327,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - if (ImGui::BeginCombo("#", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) + if (ImGui::BeginCombo("##", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) { for (int i = 0; i < enumNames.size(); ++i) { From 0096bc49757719b223dcc55b45852dde40d173db Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 20:32:35 +0800 Subject: [PATCH 627/793] Debug Draw fixes --- .../src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h | 5 +++++ .../Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 2c6a6600..0f95e661 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -26,6 +26,11 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index e6c1cd27..0353c2ec 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -131,6 +131,9 @@ namespace SHADE shaderSourceLibrary.LoadShader(4, "DebugDrawVs.glsl", SH_SHADER_TYPE::VERTEX, true); shaderSourceLibrary.LoadShader(5, "DebugDrawFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); + shaderSourceLibrary.LoadShader(3, "DebugDrawVs.glsl", SH_SHADER_TYPE::VERTEX, true); + shaderSourceLibrary.LoadShader(4, "DebugDrawFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); + shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); @@ -214,6 +217,11 @@ namespace SHADE auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); dummySubpass->AddInput("Scene"); + // Set up Debug Draw Pass + auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, {"G-Buffer"}); + auto debugDrawSubpass = debugDrawNode->AddSubpass("Debug Draw"); + debugDrawSubpass->AddColorOutput("Scene"); + // Generate world render graph worldRenderGraph->Generate(); @@ -223,6 +231,7 @@ namespace SHADE worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); + // Create default material auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); From e2778da955286eb97ba4dbd24d6c492caf895abe Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 1 Nov 2022 20:54:51 +0800 Subject: [PATCH 628/793] WIP Rewrite flow from compiling to loading to recognising assets --- Dependencies.bat | 15 +++++----- Dependencies.lua | 2 +- SHADE_Engine/premake5.lua | 20 +++++++------- SHADE_Engine/src/Assets/SHAssetMacros.h | 3 ++ SHADE_Engine/src/Assets/SHAssetManager.cpp | 32 +++++++++++----------- SHADE_Engine/src/Assets/SHAssetManager.h | 1 + premake5.lua | 1 + 7 files changed, 40 insertions(+), 34 deletions(-) diff --git a/Dependencies.bat b/Dependencies.bat index 1d4a3473..dcd4750e 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -7,7 +7,7 @@ echo "SHADE DEPENDENCIES (Default - All in 10 Seconds)" echo "A - All" echo "B - VMA" echo "C - msdf" -echo "D - assimp" +echo "D - ModelCompiler" echo "E - spdlog" echo "F - reactphysics3d" echo "G - imgui" @@ -29,7 +29,7 @@ set _e=%ERRORLEVEL% if %_e%==1 goto VMA if %_e%==2 goto VMA if %_e%==3 goto MSDF -if %_e%==4 goto assimp +if %_e%==4 goto ModelCompiler if %_e%==5 goto spdlog if %_e%==6 goto reactphysics3d if %_e%==7 goto imgui @@ -53,12 +53,13 @@ if %_e%==2 (goto :done) else (goto :MSDF) echo -----------------------MSDF---------------------------- rmdir "Dependencies/msdf" /S /Q git clone --recurse-submodules https://github.com/SHADE-DP/msdf-atlas-gen.git "Dependencies/msdf" -if %_e%==3 (goto :done) else (goto :assimp) +if %_e%==3 (goto :done) else (goto :ModelCompiler) -:assimp -echo -----------------------assimp---------------------------- -rmdir "Dependencies/assimp" /S /Q -git clone https://github.com/SHADE-DP/assimp.git "Dependencies/assimp" +:ModelCompiler +echo -----------------------ModelCompiler---------------------------- +rmdir "Dependencies/ModelCompiler" /S /Q +git clone https://github.com/SHADE-DP/ModelCompiler.git "Dependencies/ModelCompiler" +Dependencies/ModelCompiler/Dependencies.bat if %_e%==4 (goto :done) else (goto :spdlog) @REM :ktx diff --git a/Dependencies.lua b/Dependencies.lua index 6dd7a711..2e24222b 100644 --- a/Dependencies.lua +++ b/Dependencies.lua @@ -1,5 +1,5 @@ IncludeDir = {} -IncludeDir["assimp"] = "%{wks.location}\\Dependencies\\assimp" +IncludeDir["ModelCompiler"] = "%{wks.location}\\Dependencies\\ModelCompiler" IncludeDir["imgui"] = "%{wks.location}\\Dependencies\\imgui" IncludeDir["imguizmo"] = "%{wks.location}\\Dependencies\\imguizmo" IncludeDir["imnodes"] = "%{wks.location}\\Dependencies\\imnodes" diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index bc1f6a03..06fd7009 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -26,7 +26,6 @@ project "SHADE_Engine" externalincludedirs { - "%{IncludeDir.assimp}\\include", "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", @@ -52,8 +51,6 @@ project "SHADE_Engine" { "%{prj.location}/libs", "%{IncludeDir.VULKAN}/Lib", - "%{IncludeDir.assimp}/lib/Debug", - "%{IncludeDir.assimp}/lib/Release", "%{IncludeDir.RTTR}/lib", "%{IncludeDir.SDL}/lib", "%{IncludeDir.spdlog}/lib", @@ -119,7 +116,7 @@ project "SHADE_Engine" filter "configurations:Debug" postbuildcommands { - "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\"", + --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodL.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudioL.dll\" \"$(OutDir)\"" } @@ -127,7 +124,7 @@ project "SHADE_Engine" filter "configurations:Release" postbuildcommands { - "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmod.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudio.dll\" \"$(OutDir)\"" } @@ -135,32 +132,35 @@ project "SHADE_Engine" filter "configurations:Publish" postbuildcommands { - "xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmod.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudio.dll\" \"$(OutDir)\"" } filter "configurations:Publish" - postbuildcommands {"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\""} + postbuildcommands + { + --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"" + } warnings 'Extra' filter "configurations:Debug" symbols "On" defines {"_DEBUG", "SHEDITOR"} - links{"assimp-vc142-mtd.lib", "librttr_core_d.lib", "spdlogd.lib"} + links{"librttr_core_d.lib", "spdlogd.lib"} links{"fmodstudioL_vc.lib", "fmodL_vc.lib"} filter "configurations:Release" optimize "On" defines{"_RELEASE", "SHEDITOR"} - links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} + links{"librttr_core.lib", "spdlog.lib"} links{"fmodstudio_vc.lib", "fmod_vc.lib"} filter "configurations:Publish" optimize "On" defines{"_RELEASE", "_PUBLISH"} - links{"assimp-vc142-mt.lib", "librttr_core.lib", "spdlog.lib"} + links{"librttr_core.lib", "spdlog.lib"} excludes { -- "%{prj.location}/src/Editor/**.cpp", diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index a21a9840..52e5cb80 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -63,6 +63,9 @@ constexpr std::string_view ASSET_ROOT {"../../Assets"}; constexpr std::string_view BUILT_IN_ASSET_ROOT{ "../../Built_In" }; #endif +// COMPILER PATHS +constexpr std::string_view MODEL_COMPILER_EXE{ "ModelCompiler.exe" }; + // INTERNAL ASSET PATHS constexpr std::string_view SCENE_FOLDER{ "/Scenes/" }; constexpr std::string_view PREFAB_FOLDER{ "/Prefabs/" }; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 682eb9ec..29e00075 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -11,6 +11,8 @@ #include #include #include +#include + #include "SHAssetManager.h" #include "SHAssetMetaHandler.h" @@ -19,7 +21,7 @@ #include "Libraries/Loaders/SHShaderSourceLoader.h" #include "Libraries/Loaders/SHTextBasedLoader.h" -#include "Libraries/Compilers/SHMeshCompiler.h" +//#include "Libraries/Compilers/SHMeshCompiler.h" #include "Libraries/Compilers/SHTextureCompiler.h" #include "Libraries/Compilers/SHShaderSourceCompiler.h" @@ -413,22 +415,15 @@ namespace SHADE } else if (ext == GLTF_EXTENSION.data() || ext == FBX_EXTENSION.data()) { - std::vector meshes; - std::vector anims; - SHMeshCompiler::LoadFromFile(path, meshes, anims); + std::string command = MODEL_COMPILER_EXE.data(); + command += " " + path.string(); + std::system(command.c_str()); - for (auto const& mesh : meshes) - { - SHAsset meshAsset{ - .name = mesh->header.name - }; - meshAsset.path = SHMeshCompiler::CompileMeshBinary(*mesh, path).value(); - meshAsset.id = GenerateAssetID(AssetType::MESH); - meshAsset.type = AssetType::MESH; - assetCollection.insert({ meshAsset.id, meshAsset }); - SHAssetMetaHandler::WriteMetaData(meshAsset); - } - continue; + std::string newPath = path.string().substr(0, path.string().find_last_of('.')); + newPath += MESH_EXTENSION; + newAsset.path = newPath; + newAsset.id = GenerateAssetID(AssetType::MESH); + newAsset.type = AssetType::MESH; } assetCollection.insert({ newAsset.id, newAsset }); @@ -492,6 +487,11 @@ namespace SHADE return data; } + void SHAssetManager::LoadDataFromScratch(AssetPath path) noexcept + { + + } + void SHAssetManager::BuildAssetCollection() noexcept { SHFileSystem::BuildDirectory(ASSET_ROOT.data(), folderRoot, assetCollection); diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 64527e01..4daeb536 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -96,6 +96,7 @@ namespace SHADE static void InitLoaders() noexcept; static void LoadAllData() noexcept; static SHAssetData* LoadData(SHAsset const& asset) noexcept; + static void LoadDataFromScratch(AssetPath path) noexcept; inline static void BuildAssetCollection() noexcept; static bool IsRecognised(char const*) noexcept; diff --git a/premake5.lua b/premake5.lua index 35bff9d2..2164d649 100644 --- a/premake5.lua +++ b/premake5.lua @@ -30,4 +30,5 @@ workspace "SHADE" --include "Dependencies/tracy" include "Dependencies/yamlcpp" include "Dependencies/reactphysics3d" + include "Dependencies/ModelCompiler" group "" From 129f92e4b66f18dbc8e17e92e014ed8bdf5aa1de Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 1 Nov 2022 21:49:42 +0800 Subject: [PATCH 629/793] mat inspector properties handling (WIP) --- .../MaterialInspector/SHMaterialInspector.cpp | 106 ++++++++++++------ .../MaterialInspector/SHMaterialInspector.h | 12 +- .../MiddleEnd/Materials/SHMaterialSpec.h | 1 + 3 files changed, 80 insertions(+), 39 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp index c4904533..775754d7 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp @@ -3,22 +3,22 @@ #include "Editor/SHImGuiHelpers.hpp" #include -//#include "Assets/SHAssetManager.h" -//#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" -//#include "Editor/SHEditorWidgets.hpp" -//#include "Resource/SHResourceManager.h" +#include "Assets/SHAssetManager.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Editor/SHEditorWidgets.hpp" +#include "Resource/SHResourceManager.h" namespace SHADE { SHMaterialInspector::SHMaterialInspector() - :SHEditorWindow("Material Inspector", ImGuiWindowFlags_MenuBar)//,isNewMaterial(false), currentViewedMaterial(0) + :SHEditorWindow("Material Inspector", ImGuiWindowFlags_MenuBar), isNewMaterial(false), currentViewedMaterial(0) { } void SHMaterialInspector::OpenMaterial(AssetID const& assetId) noexcept { //Get mat data - //isNewMaterial = false; + isNewMaterial = false; } void SHMaterialInspector::Init() @@ -30,30 +30,20 @@ namespace SHADE { SHEditorWindow::Update(); - //if(Begin()) - //{ - // DrawMenuBar(); + if(Begin()) + { + DrawMenuBar(); - // if(SHEditorWidgets::DragDropReadOnlyField("Vertex Shader", std::to_string(currentMatSpec.vertexShader), [&](){return currentMatSpec.vertexShader;}, [&](AssetID const& id){currentMatSpec.vertexShader = id;}, SHDragDrop::DRAG_RESOURCE)) - // { - // vertShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.vertexShader); - // } - // if(SHEditorWidgets::DragDropReadOnlyField("Fragment Shader", std::to_string(currentMatSpec.fragShader), [&](){return currentMatSpec.fragShader;}, [&](AssetID const& id){currentMatSpec.fragShader = id;}, SHDragDrop::DRAG_RESOURCE)) - // { - // fragShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.fragShader); - // } - - // auto vertInterface = vertShaderHandle->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); - - // int const varCount = static_cast(vertInterface->GetVariableCount()); - // - // for(int i = 0; i < varCount; ++i) - // { - // auto variable = vertInterface->GetVariable(i); - // } - - //} - //ImGui::End(); + if(SHEditorWidgets::DragDropReadOnlyField("Vertex Shader", std::to_string(currentMatSpec.vertexShader), [&](){return currentMatSpec.vertexShader;}, [&](AssetID const& id){currentMatSpec.vertexShader = id;}, SHDragDrop::DRAG_RESOURCE)) + { + vertShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.vertexShader); + } + if(SHEditorWidgets::DragDropReadOnlyField("Fragment Shader", std::to_string(currentMatSpec.fragShader), [&](){return currentMatSpec.fragShader;}, [&](AssetID const& id){currentMatSpec.fragShader = id;}, SHDragDrop::DRAG_RESOURCE)) + { + fragShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.fragShader); + } + } + ImGui::End(); } void SHMaterialInspector::Exit() @@ -63,12 +53,12 @@ namespace SHADE void SHMaterialInspector::CreateNewMaterial() { - //isNewMaterial = true; - ////prompt for a name - //currentViewedMaterial = SHAssetManager::CreateNewAsset(AssetType::MATERIAL, "NewMaterial"); - //currentMatSpec = {}; - //vertShaderHandle = {}; - //fragShaderHandle = {}; + isNewMaterial = true; + //prompt for a name + currentViewedMaterial = SHAssetManager::CreateNewAsset(AssetType::MATERIAL, "NewMaterial"); + currentMatSpec = {}; + vertShaderHandle = {}; + fragShaderHandle = {}; } void SHMaterialInspector::DrawMenuBar() @@ -78,4 +68,50 @@ namespace SHADE ImGui::EndMenuBar(); } } + + void SHMaterialInspector::DrawShaderProperties(Handle shaderModule) + { + auto interface = shaderModule->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); + + int const varCount = static_cast(interface->GetVariableCount()); + + for(int i = 0; i < varCount; ++i) + { + auto variable = interface->GetVariable(i); + const std::string& VAR_NAME = interface->GetVariableName(i); + switch (variable->type) + { + case SHShaderBlockInterface::Variable::Type::FLOAT: + SHEditorWidgets::DragFloat(VAR_NAME, [&]() + { + if(currentMatSpec.properties[VAR_NAME].IsDefined()) + return currentMatSpec.properties[VAR_NAME].as(); + else + return 0.0f; + }, + [&](float const& value) + { + currentMatSpec.properties[VAR_NAME] = value; + } + ); + break; + case SHShaderBlockInterface::Variable::Type::INT: + + break; + case SHShaderBlockInterface::Variable::Type::VECTOR2: + + break; + case SHShaderBlockInterface::Variable::Type::VECTOR3: + + break; + case SHShaderBlockInterface::Variable::Type::VECTOR4: + + break; + case SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + } + } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h index 7256a0b6..20e165a7 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h @@ -1,6 +1,9 @@ #pragma once #include "Assets/SHAssetMacros.h" #include "Editor/EditorWindow/SHEditorWindow.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Resource/SHHandle.h" namespace SHADE @@ -19,10 +22,11 @@ namespace SHADE void OpenMaterial(AssetID const& assetId) noexcept; private: void DrawMenuBar(); + void DrawShaderProperties(Handle shaderModule); - //bool isNewMaterial; - //AssetID currentViewedMaterial; - //SHMaterialSpec currentMatSpec; - //Handle vertShaderHandle, fragShaderHandle; + bool isNewMaterial; + AssetID currentViewedMaterial; + SHMaterialSpec currentMatSpec; + Handle vertShaderHandle, fragShaderHandle; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h index 338c34b2..e41436ce 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. #include // Project Includes #include "Assets/SHAssetMacros.h" +#include namespace SHADE { From dc8ed48be329690d2bb126cc43d9a6ad94095095 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 1 Nov 2022 21:49:57 +0800 Subject: [PATCH 630/793] Fixed debug draw system cube rendering --- .../src/Application/SBApplication.cpp | 5 +-- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 31 +++++++++---------- .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 6 ++-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 54dcd094..4f03efc0 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -139,9 +139,10 @@ namespace Sandbox SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); auto debugDraw = SHSystemManager::GetSystem(); - debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); - debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 1.0f, 0.0f), SHVec3(5.0f, 1.0f, 0.0f)); + /*debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); + debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 1.0f, 0.0f), SHVec3(5.0f, 1.0f, 0.0f));*/ //debugDraw->DrawCube(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, SHVec3(1.0f, 1.0f, 1.0f)); + debugDraw->DrawSphere(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, 3.0f); SHSceneManager::UpdateSceneManager(); #ifdef SHEDITOR if(editor->editorState == SHEditor::State::PLAY) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index d54a8dad..08019665 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -145,14 +145,14 @@ namespace SHADE void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) { static const SHVec3 EXTENTS = SHVec3 { 0.5f, 0.5f, 0.5f }; - static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos - EXTENTS }; - static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, 0.0f } }; - static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos + SHVec3 { 0.0f , -EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, 0.0f } }; - static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + SHVec3 { 0.0f , EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + EXTENTS }; + static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos - EXTENTS }; + static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + EXTENTS }; const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size; const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size; @@ -172,17 +172,16 @@ namespace SHADE BOT_RIGHT_BACK , BOT_RIGHT_FRONT, BOT_RIGHT_FRONT, BOT_LEFT_FRONT, BOT_LEFT_FRONT , BOT_LEFT_BACK, - // Middle Lines - TOP_LEFT_BACK , BOT_LEFT_BACK, - TOP_RIGHT_BACK , BOT_RIGHT_BACK, - TOP_RIGHT_FRONT, BOT_RIGHT_FRONT, - TOP_LEFT_FRONT , BOT_LEFT_FRONT, // Top Square TOP_LEFT_BACK , TOP_RIGHT_BACK, TOP_RIGHT_BACK , TOP_RIGHT_FRONT, TOP_RIGHT_FRONT, TOP_LEFT_FRONT, - TOP_LEFT_FRONT , TOP_LEFT_BACK - + TOP_LEFT_FRONT , TOP_LEFT_BACK, + // Middle Lines + TOP_LEFT_BACK , BOT_LEFT_BACK, + TOP_RIGHT_BACK , BOT_RIGHT_BACK, + TOP_RIGHT_FRONT, BOT_RIGHT_FRONT, + TOP_LEFT_FRONT , BOT_LEFT_FRONT } ); } @@ -192,7 +191,7 @@ namespace SHADE if (spherePoints.empty()) { // Generate - const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere(); + static const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere(); for (const auto& idx : SPHERE.Indices) { spherePoints.emplace_back(SPHERE.VertexPositions[idx]); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp index a913ecfd..1fd90f38 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -39,10 +39,10 @@ namespace SHADE return; } - for (auto pointIter = pointListBegin + 1; pointIter != pointListEnd; ++pointIter) + const size_t POINTS_ROUNDED_COUNT = POINTS_COUNT / 2 * 2; + for (auto pointIter = pointListBegin; pointIter != (pointListBegin + POINTS_ROUNDED_COUNT); ++pointIter) { - points.emplace_back(PointVertex { *(pointIter - 1), color }); - points.emplace_back(PointVertex { *pointIter , color }); + points.emplace_back(PointVertex { *pointIter, color }); } } } \ No newline at end of file From 97a39d62c6ab55d5655ef4a0c4d06721b204c66b Mon Sep 17 00:00:00 2001 From: Glence Date: Tue, 1 Nov 2022 23:28:31 +0800 Subject: [PATCH 631/793] player controller done for now --- TempScriptsFolder/PlayerController.cs | 85 ++++++++++++++++++--------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 98c3d3b5..0d374bae 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -10,7 +10,7 @@ public class PlayerController : Script IDILE, WALKING, RUNNING, - INAIR, + JUMP, FALLING, HOLDING, CAUGHT, @@ -19,26 +19,47 @@ public class PlayerController : Script private RigidBody rb; private Transform tranform; - private int xAxisMove; - private int zAxisMove; + + //to be remove public float drag = 2.0f; - private bool isMoveKeyPress = false; + [SerializeField] + [Tooltip("The current state fo the raccoon")] public RaccoonStates currentState = RaccoonStates.IDILE; + //Movement variables============================================================ + [SerializeField] + [Tooltip("Max vel for walking")] public float maxMoveVel = 2.0f; + [SerializeField] + [Tooltip("how much force is apply for walking")] public float moveForce = 50.0f; + [SerializeField] + [Tooltip("increase the moveForce and maxMoveVel by its amt")] public float sprintMultiplier = 2.0f; + private float oldForce; private float maxOldVel; private bool sprintIncreaseOnce = false; + private int xAxisMove; + private int zAxisMove; + private bool isMoveKeyPress = false; + + [SerializeField] + [Tooltip("curr not working")] public float rotationFactorPerFrame = 1.0f; - - public float initialJumpVel; - public float maxJumpHeight = 1.0f; - public float maxJumpTime = 0.5f; - private bool isJumping = false; - public bool isGrounded = true; + //Jumping vars================================================================== + [SerializeField] + [Tooltip("max height of the jump")] + public float maxJumpHeight = 4.0f; + [SerializeField] + [Tooltip("max amt of time it will take for the jump")] + public float maxJumpTime = 0.75f; + [SerializeField] + [Tooltip("increase gravity when falling")] + public float fallMultipler = 2.0f; + private float initialJumpVel; + private bool isGrounded = true; private float gravity = -9.8f; private float groundGravity = -0.5f; @@ -80,7 +101,7 @@ public class PlayerController : Script MoveKey(); - Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); + //Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } protected override void fixedUpdate() @@ -111,10 +132,10 @@ public class PlayerController : Script isMoveKeyPress = xAxisMove != 0 || zAxisMove != 0; - if(isMoveKeyPress && currentState != RaccoonStates.RUNNING) + if(isMoveKeyPress && currentState != RaccoonStates.RUNNING && isGrounded) currentState = RaccoonStates.WALKING; - if (!isMoveKeyPress) + if (!isMoveKeyPress && isGrounded) currentState = RaccoonStates.IDILE; } @@ -144,7 +165,7 @@ public class PlayerController : Script private void Sprint() { - if (Input.GetKey(Input.KeyCode.LeftShift) && isMoveKeyPress) + if (Input.GetKey(Input.KeyCode.LeftShift) && isMoveKeyPress && isGrounded) { currentState = RaccoonStates.RUNNING; if(!sprintIncreaseOnce) @@ -158,7 +179,7 @@ public class PlayerController : Script } } - if (Input.GetKeyUp(Input.KeyCode.LeftShift) && (currentState == RaccoonStates.RUNNING || currentState == RaccoonStates.IDILE)) + if (Input.GetKeyUp(Input.KeyCode.LeftShift)) { if(isMoveKeyPress) currentState = RaccoonStates.WALKING; @@ -173,23 +194,17 @@ public class PlayerController : Script { if (currentState == RaccoonStates.WALKING || currentState == RaccoonStates.RUNNING || currentState == RaccoonStates.IDILE) { - if (Input.GetKeyDown(Input.KeyCode.Space)&& isGrounded && rb != null) + if (Input.GetKeyDown(Input.KeyCode.Space) && isGrounded && rb != null) { - isJumping = true; + currentState = RaccoonStates.JUMP; Vector3 v = rb.LinearVelocity; - v.y = initialJumpVel; + v.y = initialJumpVel * 0.5f; rb.LinearVelocity = v; } } - if (rb != null) - { - if (rb.LinearVelocity.y > 0 && isJumping) - currentState = RaccoonStates.INAIR; - else if(rb.LinearVelocity.y < 0 && isJumping) - currentState = RaccoonStates.FALLING; - - } + if(rb != null && !isGrounded && (rb.LinearVelocity.y < 0.0f || Input.GetKeyUp(Input.KeyCode.Space))) + currentState = RaccoonStates.FALLING; } private void Rotation() @@ -215,7 +230,7 @@ public class PlayerController : Script if (rb != null) { //check player vel.y if its close to zero its on the ground - if (SHADE.Math.CompareFloat(rb.LinearVelocity.y, 0.0f, 0.1f)) + if (SHADE.Math.CompareFloat(rb.LinearVelocity.y, 0.0f)) isGrounded = true; else isGrounded = false; @@ -224,8 +239,20 @@ public class PlayerController : Script if (isGrounded) v.y = groundGravity; - else - v.y += gravity * (float)Time.DeltaTime; + else if (currentState == RaccoonStates.FALLING) + { + float prevYVel = v.y; + float newYVel = v.y + (gravity * fallMultipler * (float)Time.DeltaTime); + float nextYVel = (prevYVel + newYVel) * 0.5f; + v.y = nextYVel; + } + else + { + float prevYVel = v.y; + float newYVel = v.y + (gravity * (float)Time.DeltaTime); + float nextYVel = (prevYVel + newYVel) * 0.5f; + v.y = nextYVel; + } rb.LinearVelocity = v; From 4eef6143dcfcb71ea6f38a7527e29bf139d99049 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 2 Nov 2022 00:25:43 +0800 Subject: [PATCH 632/793] base for pick and throw --- TempScriptsFolder/PickAndThrow.cs | 30 +++++++++++++++++++++++++++ TempScriptsFolder/PlayerController.cs | 1 + 2 files changed, 31 insertions(+) create mode 100644 TempScriptsFolder/PickAndThrow.cs diff --git a/TempScriptsFolder/PickAndThrow.cs b/TempScriptsFolder/PickAndThrow.cs new file mode 100644 index 00000000..834a508c --- /dev/null +++ b/TempScriptsFolder/PickAndThrow.cs @@ -0,0 +1,30 @@ +using SHADE; +using System; +using static PlayerController; + +public class PickAndThrow : Script +{ + private PlayerController pc; + public uint itemEID; + Transform itemHoldLocation; + public PickAndThrow(GameObject gameObj) : base(gameObj) { } + protected override void awake() + { + pc = GetScript(); + itemHoldLocation = GetComponentInChildren(); + } + protected override void update() + { + if (pc != null && pc.holdItem) + { + } + } + protected override void onCollisionEnter(CollisionInfo info) + { + if (info.GameObject.Name == "item" && Input.GetKey(Input.KeyCode.E)) + { + pc.holdItem = true; + itemEID = info.GameObject.EntityId; + } + } +} \ No newline at end of file diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 0d374bae..36e19860 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -22,6 +22,7 @@ public class PlayerController : Script //to be remove public float drag = 2.0f; + public bool holdItem = false; [SerializeField] [Tooltip("The current state fo the raccoon")] public RaccoonStates currentState = RaccoonStates.IDILE; From b9ada6a5be49d3e696d20b990bd662a3fcba61c1 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 2 Nov 2022 00:47:19 +0800 Subject: [PATCH 633/793] Reworked SHColour to be compatible with SHVec4 --- SHADE_Application/src/Scenes/SBTestScene.cpp | 3 +- SHADE_Engine/src/Math/SHColour.cpp | 172 ++++++++++++++++++- SHADE_Engine/src/Math/SHColour.h | 50 ++++-- SHADE_Engine/src/Math/SHMath.h | 2 + SHADE_Engine/src/Math/Vector/SHVec4.cpp | 1 + SHADE_Engine/src/Math/Vector/SHVec4.h | 2 + 6 files changed, 206 insertions(+), 24 deletions(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 52f2dc7b..db58c21e 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -16,6 +16,7 @@ #include "Assets/SHAssetManager.h" #include "Camera/SHCameraComponent.h" +#include "Math/SHColour.h" #include "Resource/SHResourceManager.h" using namespace SHADE; @@ -159,7 +160,7 @@ namespace Sandbox SHComponentManager::RemoveComponent (0); auto ambientLight = SHEntityManager::CreateEntity(); - SHComponentManager::GetComponent(ambientLight)->SetColor(SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); + SHComponentManager::GetComponent(ambientLight)->SetColor(SHColour::WHITE); SHComponentManager::GetComponent(ambientLight)->SetStrength(0.25f); SHComponentManager::GetComponent(ambientLight)->SetType(SH_LIGHT_TYPE::AMBIENT); } diff --git a/SHADE_Engine/src/Math/SHColour.cpp b/SHADE_Engine/src/Math/SHColour.cpp index 8aae2cb3..944c37cb 100644 --- a/SHADE_Engine/src/Math/SHColour.cpp +++ b/SHADE_Engine/src/Math/SHColour.cpp @@ -87,19 +87,19 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHColour::SHColour() noexcept - : SHVec4 { 0.0f, 0.0f, 0.0f, 1.0f } + : XMFLOAT4 { 0.0f, 0.0f, 0.0f, 1.0f } {} SHColour::SHColour(float r, float g, float b) noexcept - : SHVec4 { r, g, b, 1.0f } + : XMFLOAT4 { r, g, b, 1.0f } {} SHColour::SHColour(float r, float g, float b, float a) noexcept - : SHVec4 { r, g, b, a } + : XMFLOAT4 { r, g, b, a } {} SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b) noexcept - : SHVec4 + : XMFLOAT4 { static_cast(r) / 255.0f, static_cast(g) / 255.0f, @@ -109,7 +109,7 @@ namespace SHADE {} SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept - : SHVec4 + : XMFLOAT4 { static_cast(r) / 255.0f, static_cast(g) / 255.0f, @@ -118,12 +118,24 @@ namespace SHADE } {} - SHColour::SHColour(const DirectX::XMFLOAT3& colour) noexcept - : SHVec4 { colour.x, colour.y, colour.z, 1.0f } + SHColour::SHColour(const SHVec3& rgb) noexcept + : XMFLOAT4 { rgb.x, rgb.y, rgb.z, 1.0f } + {} + + SHColour::SHColour(const SHVec4& rgba) noexcept + : XMFLOAT4 { rgba.x, rgba.y, rgba.z, rgba.w } + {} + + SHColour::SHColour(const DirectX::XMFLOAT3& rgb) noexcept + : XMFLOAT4 { rgb.x, rgb.y, rgb.z, 1.0f } + {} + + SHColour::SHColour(const DirectX::XMFLOAT4& rgba) noexcept + : XMFLOAT4 { rgba.x, rgba.y, rgba.z, rgba.w } {} SHColour::SHColour(const DirectX::XMVECTORF32& colour) noexcept - : SHVec4 + : XMFLOAT4 { XMVectorGetX(colour), XMVectorGetY(colour), @@ -136,6 +148,86 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ + SHColour::operator XMVECTOR() const noexcept + { + return XMLoadFloat4(this); + } + + SHColour::operator SHVec4() const noexcept + { + return SHVec4{ *this }; + } + + SHColour& SHColour::operator+=(const SHColour& rhs) noexcept + { + return *this = *this + rhs; + } + + SHColour& SHColour::operator-=(const SHColour& rhs) noexcept + { + return *this = *this - rhs; + } + + SHColour& SHColour::operator*=(const SHColour& rhs) noexcept + { + return *this = *this * rhs; + } + + SHColour& SHColour::operator*=(float rhs) noexcept + { + return *this = *this * rhs; + } + + SHColour& SHColour::operator/=(const SHColour& rhs) noexcept + { + return *this = *this / rhs; + } + + SHColour SHColour::operator+(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorAdd(*this, rhs)); + return result; + } + + SHColour SHColour::operator-(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorSubtract(*this, rhs)); + return result; + } + + SHColour SHColour::operator-() const noexcept + { + return SHColour{ -x, -y, -z, -w }; + } + + SHColour SHColour::operator*(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorMultiply(*this, rhs)); + return result; + } + + SHColour SHColour::operator*(float rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorScale(*this, rhs)); + return result; + } + + SHColour SHColour::operator/(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorDivide(*this, rhs)); + return result; + } + bool SHColour::operator==(const SHColour& rhs) const noexcept { return XMColorEqual(*this, rhs); @@ -146,6 +238,70 @@ namespace SHADE return XMColorNotEqual(*this, rhs); } + float& SHColour::operator[](int index) + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float& SHColour::operator[](size_t index) + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float SHColour::operator[](int index) const + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float SHColour::operator[](size_t index) const + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + SHColour operator* (float lhs, const SHColour& rhs) noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorScale(rhs, lhs)); + return result; + } + /*-----------------------------------------------------------------------------------*/ /* Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHColour.h b/SHADE_Engine/src/Math/SHColour.h index bd2bc9e7..a6adf7bb 100644 --- a/SHADE_Engine/src/Math/SHColour.h +++ b/SHADE_Engine/src/Math/SHColour.h @@ -19,12 +19,6 @@ namespace SHADE { - /*-----------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*-----------------------------------------------------------------------------------*/ - - class SHColour; - /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -40,7 +34,7 @@ namespace SHADE float v = 0.0f; }; - class SH_API SHColour : private SHVec4 + class SH_API SHColour : public DirectX::XMFLOAT4 { public: /*---------------------------------------------------------------------------------*/ @@ -53,9 +47,11 @@ namespace SHADE SHColour (uint8_t r, uint8_t g, uint8_t b) noexcept; SHColour (uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept; - SHColour (const SHVec3& colour) noexcept; - SHColour (const DirectX::XMFLOAT3& colour) noexcept; - SHColour (const DirectX::XMVECTORF32& colour) noexcept; + SHColour (const SHVec3& rgb) noexcept; + SHColour (const SHVec4& rgba) noexcept; + SHColour (const DirectX::XMFLOAT3& rgb) noexcept; + SHColour (const DirectX::XMFLOAT4& rgba) noexcept; + SHColour (const DirectX::XMVECTORF32& rgba) noexcept; SHColour (const SHColour&) = default; SHColour (SHColour&&) = default; @@ -66,11 +62,32 @@ namespace SHADE /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHColour& operator= (const SHColour&) = default; - SHColour& operator= (SHColour&&) = default; + SHColour& operator= (const SHColour&) = default; + SHColour& operator= (SHColour&&) = default; - bool operator== (const SHColour& rhs) const noexcept; - bool operator!= (const SHColour& rhs) const noexcept; + operator DirectX::XMVECTOR () const noexcept; + operator SHVec4 () const noexcept; + + SHColour& operator+= (const SHColour& rhs) noexcept; + SHColour& operator-= (const SHColour& rhs) noexcept; + SHColour& operator*= (const SHColour& rhs) noexcept; + SHColour& operator*= (float rhs) noexcept; + SHColour& operator/= (const SHColour& rhs) noexcept; + + [[nodiscard]] SHColour operator+ (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator- (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator- () const noexcept; + [[nodiscard]] SHColour operator* (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator* (float rhs) const noexcept; + [[nodiscard]] SHColour operator/ (const SHColour& rhs) const noexcept; + + [[nodiscard]] bool operator== (const SHColour& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHColour& rhs) const noexcept; + + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; /*---------------------------------------------------------------------------------*/ /* Properties */ @@ -105,6 +122,8 @@ namespace SHADE /* Static Data Members */ /*---------------------------------------------------------------------------------*/ + static constexpr size_t SIZE = 4U; + static const SHColour BEIGE ; static const SHColour BLACK ; static const SHColour BLUE ; @@ -159,8 +178,9 @@ namespace SHADE static const SHColour TURQUOISE ; static const SHColour VIOLET ; static const SHColour WHITE ; - static const SHColour YELLOW; + static const SHColour YELLOW ; }; + SHColour operator* (float lhs, const SHColour& rhs) noexcept; } // namespace SHADE diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 5fcea9fc..3a24d6ef 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -9,4 +9,6 @@ #include "SHQuaternion.h" #include "SHMatrix.h" +#include "SHColour.h" + #include "Transform/SHTransform.h" \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index 88e7f5c9..943d540e 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -14,6 +14,7 @@ #include "SHVec4.h" // Project Headers #include "Math/SHMatrix.h" +#include "Math/SHColour.h" #include "Tools/SHLogger.h" using namespace DirectX; diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index db8ef860..3c509039 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -23,7 +23,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ + class SHMatrix; + class SHColour; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ From 5f7b28e8a0c9a137bbe2de82186d56e64490a8f9 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 01:11:28 +0800 Subject: [PATCH 634/793] Added SHDebugDraw convenience static class for debug drawing --- .../src/Application/SBApplication.cpp | 10 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 3 + .../MiddleEnd/Interface/SHDebugDrawSystem.h | 98 ++++++++++++----- .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 20 ++-- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 4 +- SHADE_Engine/src/Tools/SHDebugDraw.cpp | 73 +++++++++++++ SHADE_Engine/src/Tools/SHDebugDraw.h | 101 ++++++++++++++++++ 7 files changed, 267 insertions(+), 42 deletions(-) create mode 100644 SHADE_Engine/src/Tools/SHDebugDraw.cpp create mode 100644 SHADE_Engine/src/Tools/SHDebugDraw.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 4f03efc0..b865f028 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -43,6 +43,7 @@ #include "Assets/SHAssetManager.h" #include "Tools/SHLogger.h" +#include "Tools/SHDebugDraw.h" using namespace SHADE; @@ -126,6 +127,9 @@ namespace Sandbox SHSceneManager::InitSceneManager("TestScene"); SHFrameRateController::UpdateFRC(); + + // Link up SHDebugDraw + SHDebugDraw::Init(SHSystemManager::GetSystem()); } void SBApplication::Update(void) @@ -137,12 +141,6 @@ namespace Sandbox { SHFrameRateController::UpdateFRC(); SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); - - auto debugDraw = SHSystemManager::GetSystem(); - /*debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); - debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 1.0f, 0.0f), SHVec3(5.0f, 1.0f, 0.0f));*/ - //debugDraw->DrawCube(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, SHVec3(1.0f, 1.0f, 1.0f)); - debugDraw->DrawSphere(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, 3.0f); SHSceneManager::UpdateSceneManager(); #ifdef SHEDITOR if(editor->editorState == SHEditor::State::PLAY) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 5b53eef9..a5b3b546 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -19,6 +19,7 @@ #include "Math/SHColour.h" #include "Resource/SHResourceManager.h" #include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "Tools/SHDebugDraw.h" using namespace SHADE; @@ -188,6 +189,8 @@ namespace Sandbox SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->RemoveAllScripts(testObj); } + + SHDebugDraw::Cube(SHColour::CRIMSON, SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 1.0f, 1.0f)); } void SBTestScene::Render() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 1bbf3ab8..4b83958d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -23,29 +23,27 @@ of DigiPen Institute of Technology is prohibited. #include "Resource/SHHandle.h" #include "Graphics/Buffers/SHVkBuffer.h" #include "SHGraphicsConstants.h" +#include "Math/SHColour.h" namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ class SHVkBuffer; - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - /***********************************************************************************/ - /*! - \brief - Manages the Debug Draw system. - */ - /***********************************************************************************/ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Manages the Debug Draw system. + /// class SH_API SHDebugDrawSystem final : public SHSystem { public: - /*-------------------------------------------------------------------------------*/ - /* System Routines */ - /*-------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* System Routines */ + /*---------------------------------------------------------------------------------*/ class SH_API ProcessPointsRoutine final : public SHSystemRoutine { public: @@ -53,27 +51,79 @@ namespace SHADE virtual void Execute(double dt) noexcept override final; }; - /*-------------------------------------------------------------------------------*/ - /* SHSystem overrides */ - /*-------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*---------------------------------------------------------------------------------*/ virtual void Init() override final; virtual void Exit() override final; - /*-------------------------------------------------------------------------------*/ - /* Configuration Functions */ - /*-------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* Configuration Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Configures the line width used to draw all lines in the Debug Draw system. + /// float LineWidth = 1.0f; - /*-------------------------------------------------------------------------------*/ - /* Draw Functions */ - /*-------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. void DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. void DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. void DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Colour of the polygon. + /// List of points for the polygon. void DrawPoly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Iterator for a STL-like container. + /// Colour of the polygon. + /// + /// Iterator to the first point of the point container. + /// + /// + /// One past last iterator of the point container. + /// template void DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd); + /// + /// Renders a wireframe cube centered around the position specified in world space. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. void DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius); private: diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp index 1fd90f38..14fbb42f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -3,7 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Oct 16, 2022 -\brief Contains the definition of template functions the SHDebugDrawSystem +\brief Contains the definition of template functions the SHDebugDrawSystem class. Copyright (C) 2022 DigiPen Institute of Technology. @@ -15,11 +15,11 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Template Functions */ - /*---------------------------------------------------------------------------------*/ + /*-----------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*-----------------------------------------------------------------------------------*/ template - void SHADE::SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + void SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) { // Ensure dereferenced type is SHVec3 static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); @@ -27,22 +27,22 @@ namespace SHADE // Check if points exceeded max if (points.size() > MAX_POINTS) { - SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); - return; + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; } const size_t POINTS_COUNT = pointListEnd - pointListBegin; // Invalid polygon if (POINTS_COUNT < 2) { - SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly()."); - return; + SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly()."); + return; } const size_t POINTS_ROUNDED_COUNT = POINTS_COUNT / 2 * 2; for (auto pointIter = pointListBegin; pointIter != (pointListBegin + POINTS_ROUNDED_COUNT); ++pointIter) { - points.emplace_back(PointVertex { *pointIter, color }); + points.emplace_back(PointVertex{ *pointIter, color }); } } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index 6c708e58..c9a3f6c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -218,8 +218,8 @@ namespace SHADE { SHMeshData meshData; - const int LAT_SLICES = 8; - const int LONG_SLICES = 8; + const int LAT_SLICES = 12; + const int LONG_SLICES = 12; float radius = 1; for (int latNum = 0; latNum <= LAT_SLICES; ++latNum) { diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.cpp b/SHADE_Engine/src/Tools/SHDebugDraw.cpp new file mode 100644 index 00000000..a5b86c42 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHDebugDraw.cpp @@ -0,0 +1,73 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2022 +\brief Contains the definition of functions of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include "SHpch.h" +// Primary Include +#include "SHDebugDraw.h" +// Project Includes +#include "Math/Vector/SHVec4.h" +#include "Math/SHColour.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "ECS_Base/Managers/SHSystemManager.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHDebugDrawSystem* SHDebugDraw::dbgDrawSys = nullptr; + + /*-----------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHDebugDraw::Init(SHDebugDrawSystem* sys) + { + dbgDrawSys = sys; + if (dbgDrawSys == nullptr) + { + SHLOG_ERROR("[SHDebugDraw] Invalid SHDebugDrawSystem provided for initialization!"); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHDebugDraw::Line(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + dbgDrawSys->DrawLine(color, startPt, endPt); + } + + void SHDebugDraw::Tri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + dbgDrawSys->DrawTri(color, pt1, pt2, pt3); + } + + void SHDebugDraw::Quad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + dbgDrawSys->DrawQuad(color, pt1, pt2, pt3, pt4); + } + + void SHDebugDraw::Poly(const SHVec4& color, std::initializer_list pointList) + { + dbgDrawSys->DrawPoly(color, pointList); + } + + void SHDebugDraw::Cube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + dbgDrawSys->DrawCube(color, pos, size); + } + + void SHDebugDraw::Sphere(const SHVec4& color, const SHVec3& pos, double radius) + { + dbgDrawSys->DrawSphere(color, pos, radius); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.h b/SHADE_Engine/src/Tools/SHDebugDraw.h new file mode 100644 index 00000000..7ce44ec2 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHDebugDraw.h @@ -0,0 +1,101 @@ +/************************************************************************************//*! +\file SHDebugDraw.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2022 +\brief Contains the definition of the SHDebugDraw static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "SH_API.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHDebugDrawSystem; + class SHVec4; + class SHVec3; + class SHColour; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Static helper class to make it easier to do debug drawing and enable support for + /// managed code to execute it withot dependency hell due to graphics system + /// dependencies. + /// + class SH_API SHDebugDraw final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Sets up the link with the SHDebugDrawSystem. Must be called after the + /// SHDebugDrawSystem is spawned. + /// + static void Init(SHDebugDrawSystem* sys); + + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. + static void Line(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + static void Tri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. + static void Quad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Colour of the polygon. + /// List of points for the polygon. + static void Poly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a wireframe cube centered around the position specified in world space. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + static void Cube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. + static void Sphere(const SHVec4& color, const SHVec3& pos, double radius); + + private: + /*---------------------------------------------------------------------------------*/ + /* Static Data Members */ + /*---------------------------------------------------------------------------------*/ + static SHDebugDrawSystem* dbgDrawSys; + }; +} \ No newline at end of file From 1371302a40602daba1c94f10a4e819521b6fd192 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 09:34:36 +0800 Subject: [PATCH 635/793] Generalised Draw functions in SHDebugDrawSystem for potentially any number of draw queues --- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 89 ++++++++++++------- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 11 +++ .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 13 ++- 3 files changed, 77 insertions(+), 36 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 08019665..715b7d69 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -117,54 +117,75 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHDebugDrawSystem::DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) { - if (points.size() > MAX_POINTS) + drawLine(points, color, startPt, endPt); + } + + void SHDebugDrawSystem::DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + drawPoly(points, color, { pt1, pt2, pt3 }); + } + + void SHDebugDrawSystem::DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + drawPoly(points, color, { pt1, pt2, pt3, pt4 }); + } + + void SHDebugDrawSystem::DrawPoly(const SHVec4& color, std::initializer_list pointList) + { + drawPoly(points, color, pointList.begin(), pointList.end()); + } + + void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + drawCube(points, color, pos, size); + } + + void SHDebugDrawSystem::DrawSphere(const SHVec4& color, const SHVec3& pos, double radius) + { + drawSphere(points, color, pos, radius); + } + + void SHDebugDrawSystem::drawLine(std::vector& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + if (storage.size() > MAX_POINTS) { SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); return; } - points.emplace_back(PointVertex{ startPt, color }); - points.emplace_back(PointVertex{ endPt, color }); + storage.emplace_back(PointVertex{ startPt, color }); + storage.emplace_back(PointVertex{ endPt, color }); } - void SHDebugDrawSystem::DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + void SHDebugDrawSystem::drawPoly(std::vector& storage, const SHVec4& color, std::initializer_list pointList) { - DrawPoly(color, { pt1, pt2, pt3 }); + drawPoly(storage, color, pointList.begin(), pointList.end()); } - void SHDebugDrawSystem::DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + void SHDebugDrawSystem::drawCube(std::vector& storage, const SHVec4& color, const SHVec3& pos, const SHVec3& size) { - DrawPoly(color, { pt1, pt2, pt3, pt4 }); - } + static const SHVec3 EXTENTS = SHVec3{ 0.5f, 0.5f, 0.5f }; + static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3{ pos - EXTENTS }; + static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3{ pos + SHVec3 { EXTENTS.x, -EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3{ pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3{ pos + SHVec3 { -EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3{ pos + SHVec3 { -EXTENTS.x, EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3{ pos + SHVec3 { EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3{ pos + SHVec3 { -EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3{ pos + EXTENTS }; - void SHDebugDrawSystem::DrawPoly(const SHVec4& color, std::initializer_list pointList) - { - DrawPoly(color, pointList.begin(), pointList.end()); - } - - void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) - { - static const SHVec3 EXTENTS = SHVec3 { 0.5f, 0.5f, 0.5f }; - static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos - EXTENTS }; - static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, -EXTENTS.z } }; - static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, EXTENTS.z } }; - static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; - static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; - static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + EXTENTS }; - - const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size; - const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size; - const SHVec3 BOT_LEFT_FRONT = UNIT_BOT_LEFT_FRONT * size; + const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size; + const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size; + const SHVec3 BOT_LEFT_FRONT = UNIT_BOT_LEFT_FRONT * size; const SHVec3 BOT_RIGHT_FRONT = UNIT_BOT_RIGHT_FRONT * size; - const SHVec3 TOP_LEFT_BACK = UNIT_TOP_LEFT_BACK * size; - const SHVec3 TOP_RIGHT_BACK = UNIT_TOP_RIGHT_BACK * size; - const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size; + const SHVec3 TOP_LEFT_BACK = UNIT_TOP_LEFT_BACK * size; + const SHVec3 TOP_RIGHT_BACK = UNIT_TOP_RIGHT_BACK * size; + const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size; const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size; - DrawPoly + drawPoly ( + storage, color, { // Bottom Square @@ -186,7 +207,7 @@ namespace SHADE ); } - void SHDebugDrawSystem::DrawSphere(const SHVec4& color, const SHVec3& pos, double radius) + void SHDebugDrawSystem::drawSphere(std::vector& storage, const SHVec4& color, const SHVec3& pos, double radius) { if (spherePoints.empty()) { @@ -197,6 +218,6 @@ namespace SHADE spherePoints.emplace_back(SPHERE.VertexPositions[idx]); } } - DrawPoly(color, spherePoints.begin(), spherePoints.end()); + drawPoly(storage, color, spherePoints.begin(), spherePoints.end()); } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 4b83958d..41a0dd77 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -148,11 +148,22 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ // CPU Buffers std::vector points; + std::vector persistentPoints; // GPU Buffers TripleBuffer vertexBuffers; TripleUInt numPoints; // Cached Points for polygon drawing std::vector spherePoints; + + /*---------------------------------------------------------------------------------*/ + /* Helper Draw Functions */ + /*---------------------------------------------------------------------------------*/ + void drawLine(std::vector& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + void drawPoly(std::vector& storage, const SHVec4& color, std::initializer_list pointList); + template + void drawPoly(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd); + void drawCube(std::vector& storage, const SHVec4& color, const SHVec3& pos, const SHVec3& size); + void drawSphere(std::vector& storage, const SHVec4& color, const SHVec3& pos, double radius); }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp index 14fbb42f..953b1cb3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -20,12 +20,21 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ template void SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + { + drawPoly(points, color, pointListBegin, pointListEnd); + } + + /*-----------------------------------------------------------------------------------*/ + /* Helper Draw Functions */ + /*-----------------------------------------------------------------------------------*/ + template + void SHDebugDrawSystem::drawPoly(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd) { // Ensure dereferenced type is SHVec3 static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); // Check if points exceeded max - if (points.size() > MAX_POINTS) + if (storage.size() > MAX_POINTS) { SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); return; @@ -42,7 +51,7 @@ namespace SHADE const size_t POINTS_ROUNDED_COUNT = POINTS_COUNT / 2 * 2; for (auto pointIter = pointListBegin; pointIter != (pointListBegin + POINTS_ROUNDED_COUNT); ++pointIter) { - points.emplace_back(PointVertex{ *pointIter, color }); + storage.emplace_back(PointVertex{ *pointIter, color }); } } } \ No newline at end of file From 41e1f01f29174fbfaa8cc700bbef9e79b07e5173 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 10:06:39 +0800 Subject: [PATCH 636/793] Added support for persistent debug draw --- .../src/Application/SBApplication.cpp | 4 + .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 126 +++++++++++++++--- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 85 +++++++++++- SHADE_Engine/src/Tools/SHDebugDraw.cpp | 38 +++++- SHADE_Engine/src/Tools/SHDebugDraw.h | 58 ++++++++ 5 files changed, 291 insertions(+), 20 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index b865f028..8b437584 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -146,6 +146,10 @@ namespace Sandbox if(editor->editorState == SHEditor::State::PLAY) SHSceneManager::SceneUpdate(0.016f); #endif + SHDebugDraw::Line(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); + SHDebugDraw::Line(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 1.0f, 0.0f), SHVec3(5.0f, 1.0f, 0.0f)); + SHDebugDraw::Cube(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, SHVec3(1.0f, 1.0f, 1.0f)); + SHDebugDraw::Sphere(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, 3.0f); SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); editor->PollPicking(); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 715b7d69..16069564 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -43,20 +43,41 @@ namespace SHADE return; } + // Get the system + SHDebugDrawSystem* system = static_cast(GetSystem()); + // Get current frame index const uint32_t FRAME_IDX = gfxSys->GetCurrentFrameIndex(); - // Create the buffer if it doesn't exist or just update it - SHDebugDrawSystem* system = static_cast(GetSystem()); + /* Non-Persistent Buffer */ + // Update the buffer system->numPoints[FRAME_IDX] = system->points.size(); const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size(); if (DATA_SIZE > 0) { - system->vertexBuffers[FRAME_IDX]->WriteToMemory(system->points.data(), DATA_SIZE, 0, 0); + system->vertexBuffers[FRAME_IDX]->WriteToMemory(system->points.data(), DATA_SIZE, 0, 0); } // Reset for next frame system->points.clear(); + + /* Persistent Buffer */ + // Check if there are changes + if (system->persistentBuffersCleared[FRAME_IDX] + || + system->numPersistentPoints[FRAME_IDX] != system->persistentPoints.size()) + { + // Update Buffer + system->numPersistentPoints[FRAME_IDX] = system->persistentPoints.size(); + const uint32_t DATA_SIZE = sizeof(PointVertex) * system->persistentPoints.size(); + if (DATA_SIZE > 0) + { + system->persistentVertexBuffers[FRAME_IDX]->WriteToMemory(system->persistentPoints.data(), DATA_SIZE, 0, 0); + } + + // Reset Flag + system->persistentBuffersCleared[FRAME_IDX] = false; + } } /*---------------------------------------------------------------------------------*/ @@ -74,32 +95,56 @@ namespace SHADE // Get Current frame index const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); - // Don't draw if no points - if (numPoints[FRAME_IDX] <= 0) - return; - + // Set Pipeline cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); cmdBuffer->SetLineWidth(LineWidth); - cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); - cmdBuffer->DrawArrays(numPoints[FRAME_IDX], 1, 0, 0); + + // Don't draw if no points + if (numPoints[FRAME_IDX] > 0) + { + cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); + cmdBuffer->DrawArrays(numPoints[FRAME_IDX], 1, 0, 0); + } + if (numPersistentPoints[FRAME_IDX] > 0) + { + cmdBuffer->BindVertexBuffer(0, persistentVertexBuffers[FRAME_IDX], 0); + cmdBuffer->DrawArrays(numPersistentPoints[FRAME_IDX], 1, 0, 0); + } }); // Reset trackers std::fill_n(numPoints.begin(), numPoints.size(), 0); + std::fill_n(numPersistentPoints.begin(), numPersistentPoints.size(), 0); + for (bool& cleared : persistentBuffersCleared) + cleared = true; // Allocate buffers + // - Non-Persistent Draws static constexpr uint32_t BUFFER_SIZE = MAX_POINTS * sizeof(PointVertex); for (Handle& bufHandle : vertexBuffers) { - bufHandle = GFX_SYSTEM->GetDevice()->CreateBuffer - ( - BUFFER_SIZE, - nullptr, - 0, - vk::BufferUsageFlagBits::eVertexBuffer, - VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, - VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT - ); + bufHandle = GFX_SYSTEM->GetDevice()->CreateBuffer + ( + BUFFER_SIZE, + nullptr, + 0, + vk::BufferUsageFlagBits::eVertexBuffer, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + ); + } + // - Persistent Draws + for (Handle& bufHandle : persistentVertexBuffers) + { + bufHandle = GFX_SYSTEM->GetDevice()->CreateBuffer + ( + BUFFER_SIZE, + nullptr, + 0, + vk::BufferUsageFlagBits::eVertexBuffer, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + ); } } @@ -110,6 +155,11 @@ namespace SHADE if (vertexBuffer) vertexBuffer.Free(); } + for (auto vertexBuffer : persistentVertexBuffers) + { + if (vertexBuffer) + vertexBuffer.Free(); + } } /*---------------------------------------------------------------------------------*/ @@ -145,6 +195,46 @@ namespace SHADE drawSphere(points, color, pos, radius); } + /*---------------------------------------------------------------------------------*/ + /* Persistent Draw Functions */ + /*---------------------------------------------------------------------------------*/ + void SHDebugDrawSystem::DrawPersistentLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + drawLine(persistentPoints, color, startPt, endPt); + } + + void SHDebugDrawSystem::DrawPersistentTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + drawPoly(persistentPoints, color, { pt1, pt2, pt3 }); + } + + void SHDebugDrawSystem::DrawPersistentQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + drawPoly(persistentPoints, color, { pt1, pt2, pt3, pt4 }); + } + + void SHDebugDrawSystem::DrawPersistentPoly(const SHVec4& color, std::initializer_list pointList) + { + drawPoly(persistentPoints, color, pointList.begin(), pointList.end()); + } + + void SHDebugDrawSystem::DrawPersistentCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + drawCube(persistentPoints, color, pos, size); + } + + void SHDebugDrawSystem::DrawPersistentSphere(const SHVec4& color, const SHVec3& pos, double radius) + { + drawSphere(persistentPoints, color, pos, radius); + } + + void SHDebugDrawSystem::ClearPersistentDraws() + { + persistentPoints.clear(); + for (bool& cleared : persistentBuffersCleared) + cleared = true; + } + void SHDebugDrawSystem::drawLine(std::vector& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) { if (storage.size() > MAX_POINTS) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 41a0dd77..7c9e7c81 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -126,6 +126,78 @@ namespace SHADE /// Size of the rendered sphere. void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius); + /*---------------------------------------------------------------------------------*/ + /* Persistent Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space that will persist until + /// ClearPersistentDraws() is called. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. + void DrawPersistentLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space that will persist + /// until ClearPersistentDraws() is called. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + void DrawPersistentTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space that will persist + /// until ClearPersistentDraws() is called. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. + void DrawPersistentQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space that + /// will persist until ClearPersistentDraws() is called. + /// + /// Colour of the polygon. + /// List of points for the polygon. + void DrawPersistentPoly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a polygon indicated by the specified set of points in world space that + /// will persist until ClearPersistentDraws() is called. + /// + /// Iterator for a STL-like container. + /// Colour of the polygon. + /// + /// Iterator to the first point of the point container. + /// + /// + /// One past last iterator of the point container. + /// + template + void DrawPersistentPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd); + /// + /// Renders a wireframe cube centered around the position specified in world space + /// that will persist until ClearPersistentDraws() is called. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + void DrawPersistentCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space + /// that will persist until ClearPersistentDraws() is called. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. + void DrawPersistentSphere(const SHVec4& color, const SHVec3& pos, double radius); + /// + /// Clears any persistent drawn debug primitives. + /// + void ClearPersistentDraws(); + private: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -136,7 +208,8 @@ namespace SHADE SHVec4 Color; }; using TripleBuffer = std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS>; - using TripleUInt = std::array; + using TripleUInt = std::array; + using TripleBool = std::array; /*---------------------------------------------------------------------------------*/ /* Constants */ @@ -152,6 +225,9 @@ namespace SHADE // GPU Buffers TripleBuffer vertexBuffers; TripleUInt numPoints; + TripleBuffer persistentVertexBuffers; + TripleUInt numPersistentPoints; + TripleBool persistentBuffersCleared; // Cached Points for polygon drawing std::vector spherePoints; @@ -165,6 +241,13 @@ namespace SHADE void drawCube(std::vector& storage, const SHVec4& color, const SHVec3& pos, const SHVec3& size); void drawSphere(std::vector& storage, const SHVec4& color, const SHVec3& pos, double radius); }; + + template + void SHADE::SHDebugDrawSystem::DrawPersistentPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + { + + } + } #include "SHDebugDrawSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.cpp b/SHADE_Engine/src/Tools/SHDebugDraw.cpp index a5b86c42..b8aa8b0e 100644 --- a/SHADE_Engine/src/Tools/SHDebugDraw.cpp +++ b/SHADE_Engine/src/Tools/SHDebugDraw.cpp @@ -25,7 +25,7 @@ namespace SHADE /* Static Member Definitions */ /*-----------------------------------------------------------------------------------*/ SHDebugDrawSystem* SHDebugDraw::dbgDrawSys = nullptr; - + /*-----------------------------------------------------------------------------------*/ /* Lifecycle Functions */ /*-----------------------------------------------------------------------------------*/ @@ -70,4 +70,40 @@ namespace SHADE { dbgDrawSys->DrawSphere(color, pos, radius); } + + void SHDebugDraw::PersistentLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + dbgDrawSys->DrawPersistentLine(color, startPt, endPt); + } + + void SHDebugDraw::PersistentTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + dbgDrawSys->DrawPersistentTri(color, pt1, pt2, pt3); + } + + void SHDebugDraw::PersistentQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + dbgDrawSys->DrawPersistentQuad(color, pt1, pt2, pt3, pt4); + } + + void SHDebugDraw::PersistentPoly(const SHVec4& color, std::initializer_list pointList) + { + dbgDrawSys->DrawPersistentPoly(color, pointList); + } + + void SHDebugDraw::PersistentCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + dbgDrawSys->DrawPersistentCube(color, pos, size); + } + + void SHDebugDraw::PersistentSphere(const SHVec4& color, const SHVec3& pos, double radius) + { + dbgDrawSys->DrawPersistentSphere(color, pos, radius); + } + + void SHDebugDraw::ClearPersistentDraws() + { + dbgDrawSys->ClearPersistentDraws(); + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.h b/SHADE_Engine/src/Tools/SHDebugDraw.h index 7ce44ec2..04504c3a 100644 --- a/SHADE_Engine/src/Tools/SHDebugDraw.h +++ b/SHADE_Engine/src/Tools/SHDebugDraw.h @@ -92,6 +92,64 @@ namespace SHADE /// Size of the rendered sphere. static void Sphere(const SHVec4& color, const SHVec3& pos, double radius); + /*---------------------------------------------------------------------------------*/ + /* Persistent Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space that will persist until + /// ClearPersistentDraws() is called. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. + static void PersistentLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space that will persist + /// until ClearPersistentDraws() is called. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + static void PersistentTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space that will persist + /// until ClearPersistentDraws() is called. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. + static void PersistentQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space that + /// will persist until ClearPersistentDraws() is called. + /// + /// Colour of the polygon. + /// List of points for the polygon. + static void PersistentPoly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a wireframe cube centered around the position specified in world space + /// that will persist until ClearPersistentDraws() is called. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + static void PersistentCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space + /// that will persist until ClearPersistentDraws() is called. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. + static void PersistentSphere(const SHVec4& color, const SHVec3& pos, double radius); + /// + /// Clears any persistent drawn debug primitives. + /// + static void ClearPersistentDraws(); + private: /*---------------------------------------------------------------------------------*/ /* Static Data Members */ From 82e0e4df5ce8ec81619bd1463e3ec94dce216c71 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 10:33:17 +0800 Subject: [PATCH 637/793] Added editor gridlines and cardinal axes --- .../src/Application/SBApplication.cpp | 10 +- SHADE_Engine/src/Editor/SHEditor.cpp | 104 +++++++++++++++++- SHADE_Engine/src/Editor/SHEditor.h | 9 +- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 2 +- 4 files changed, 114 insertions(+), 11 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 8b437584..10cc09b3 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -72,6 +72,9 @@ namespace Sandbox SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); + + // Link up SHDebugDraw + SHDebugDraw::Init(SHSystemManager::GetSystem()); #ifdef SHEDITOR SDL_Init(SDL_INIT_VIDEO); @@ -127,9 +130,6 @@ namespace Sandbox SHSceneManager::InitSceneManager("TestScene"); SHFrameRateController::UpdateFRC(); - - // Link up SHDebugDraw - SHDebugDraw::Init(SHSystemManager::GetSystem()); } void SBApplication::Update(void) @@ -146,10 +146,6 @@ namespace Sandbox if(editor->editorState == SHEditor::State::PLAY) SHSceneManager::SceneUpdate(0.016f); #endif - SHDebugDraw::Line(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); - SHDebugDraw::Line(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 1.0f, 0.0f), SHVec3(5.0f, 1.0f, 0.0f)); - SHDebugDraw::Cube(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, SHVec3(1.0f, 1.0f, 1.0f)); - SHDebugDraw::Sphere(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, 3.0f); SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); editor->PollPicking(); } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index cf5056a5..6259a7c6 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -46,6 +46,7 @@ #include #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" +#include "Tools/SHDebugDraw.h" RTTR_REGISTRATION { @@ -77,7 +78,6 @@ namespace SHADE //#==============================================================# void SHEditor::Init() { - IMGUI_CHECKVERSION(); if(auto context = ImGui::CreateContext()) { @@ -120,6 +120,17 @@ namespace SHADE window->Init(); } + /* Editor View Gridlines */ + SetUpGridLines(true, true); + // Handle state changes so that we only show in edit mode + std::shared_ptr> stateChangeEventReceiver + { + std::make_shared>(this, &SHEditor::onEditorStateChanged) + }; + SHEventManager::SubscribeTo(SH_EDITOR_ON_PLAY_EVENT, std::dynamic_pointer_cast(stateChangeEventReceiver)); + SHEventManager::SubscribeTo(SH_EDITOR_ON_PAUSE_EVENT, std::dynamic_pointer_cast(stateChangeEventReceiver)); + SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, std::dynamic_pointer_cast(stateChangeEventReceiver)); + SHLOG_INFO("Successfully initialised SHADE Engine Editor") } @@ -180,6 +191,97 @@ namespace SHADE io->Fonts->Build(); } + void SHEditor::SetUpGridLines(bool drawGrid, bool drawAxes) + { + // Clear existing lines + SHDebugDraw::ClearPersistentDraws(); + + static constexpr float DELTA = 1.0f; + static constexpr int EXTENT_COUNT = static_cast(500.0f /* TODO: Remove hard code */ / DELTA); + static constexpr float LINE_HALF_LENGTH = (DELTA * static_cast(EXTENT_COUNT)) * 0.5f; + + // Render Grid + static const SHColour GRID_COL = { 0.2f, 0.2f, 0.2f, 1.0f }; + if (drawGrid) + { + for (int i = 1; i < EXTENT_COUNT; ++i) + { + // X-Axis Lines + SHDebugDraw::PersistentLine + ( + GRID_COL, + SHVec3 { -LINE_HALF_LENGTH, 0.0f, i * DELTA }, + SHVec3 { LINE_HALF_LENGTH, 0.0f, i * DELTA } + ); + SHDebugDraw::PersistentLine + ( + GRID_COL, + SHVec3 { -LINE_HALF_LENGTH, 0.0f, i * -DELTA }, + SHVec3 { LINE_HALF_LENGTH, 0.0f, i * -DELTA } + ); + // Y-Axis Lines + SHDebugDraw::PersistentLine + ( + GRID_COL, + SHVec3 { i * DELTA, 0.0f, -LINE_HALF_LENGTH }, + SHVec3 { i * DELTA, 0.0f, LINE_HALF_LENGTH } + ); + SHDebugDraw::PersistentLine + ( + GRID_COL, + SHVec3 { -i * DELTA, 0.0f, -LINE_HALF_LENGTH }, + SHVec3 { -i * DELTA, 0.0f, LINE_HALF_LENGTH } + ); + } + } + + // Render World Axes + if (drawAxes || drawGrid) + { + const SHColour X_AXIS_COL = drawAxes ? SHColour::RED : GRID_COL; + const SHColour Y_AXIS_COL = drawAxes ? SHColour::GREEN : GRID_COL; + const SHColour Z_AXIS_COL = drawAxes ? SHColour::BLUE : GRID_COL; + // X + SHDebugDraw::PersistentLine + ( + X_AXIS_COL, + SHVec3 { -LINE_HALF_LENGTH, 0.0f, 0.0f }, + SHVec3 { LINE_HALF_LENGTH, 0.0f, 0.0f } + ); + // Y + SHDebugDraw::PersistentLine + ( + Y_AXIS_COL, + SHVec3 { 0.0f, -LINE_HALF_LENGTH, 0.0f }, + SHVec3 { 0.0f, LINE_HALF_LENGTH, 0.0f } + ); + // Z + SHDebugDraw::PersistentLine + ( + Z_AXIS_COL, + SHVec3 { 0.0f, 0.0f, -LINE_HALF_LENGTH }, + SHVec3 { 0.0f, 0.0f, LINE_HALF_LENGTH } + ); + } + } + + SHEventHandle SHEditor::onEditorStateChanged(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + switch (editorState) + { + case State::PAUSE: + case State::STOP: + SetUpGridLines(true, true); + break; + case State::PLAY: + default: + SHDebugDraw::ClearPersistentDraws(); + break; + } + return eventData->handle; + } + void SHEditor::Exit() { for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values) diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 624069db..6e0ef5ae 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -16,8 +16,9 @@ #include "Resource/SHHandle.h" #include "EditorWindow/SHEditorWindow.h" #include "Tools/SHLog.h" -#include "Gizmos/SHTransformGizmo.h" - +#include "Gizmos/SHTransformGizmo.h"` +#include "Events/SHEventDefines.h" +#include "Events/SHEvent.h" //#==============================================================# //|| Library Includes || @@ -194,6 +195,10 @@ namespace SHADE void InitFonts() noexcept; + void SetUpGridLines(bool drawGrid, bool drawAxes); + + SHEventHandle onEditorStateChanged(SHEventPtr eventPtr); + // Handle to command pool used for ImGui Vulkan Backend Handle imguiCommandPool; // Handle to command buffer used for ImGui Vulkan Backend diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 16069564..90fe51d5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -95,7 +95,7 @@ namespace SHADE // Get Current frame index const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); - // Set Pipeline + // Set Pipelin cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); cmdBuffer->SetLineWidth(LineWidth); From 4eb7879bf28a150c65533bf3a66892ba6ba8e1fd Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Wed, 2 Nov 2022 11:37:03 +0800 Subject: [PATCH 638/793] Revert "Create AIPrototype.cs" This reverts commit b0054d62c6b7450860e5b453539f968aeb1ed45c. --- TempScriptsFolder/AIPrototype.cs | 53 -------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 TempScriptsFolder/AIPrototype.cs diff --git a/TempScriptsFolder/AIPrototype.cs b/TempScriptsFolder/AIPrototype.cs deleted file mode 100644 index c7240806..00000000 --- a/TempScriptsFolder/AIPrototype.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; -using SHADE; - -public class AIPrototype : Script -{ - //This object's relevant components - private Transform transform; - - [SerializeField] - [Tooltip("The list of waypoints that the object will move around on")] - private Vector3[] waypoints; - - [SerializeField] - [Tooltip("How fast the object moves about waypoints")] - private float moveSpeed; - - //To cycle depending on the length of waypoints - private int currentTargetWaypointIndex; - - public AIPrototype(GameObject gameObj) : base(gameObj) { } - - protected override void awake() - { - transform = GetComponent(); - if (transform == null) - { - Debug.LogError("Transform is NULL!"); - } - - currentTargetWaypointIndex = 0; - } - - protected override void update() - { - //Head towards the next target - transform.GlobalPosition += (waypoints[currentTargetWaypointIndex] - transform.GlobalPosition) * moveSpeed * (float)Time.DeltaTime; - - //Cycle to next waypoint if near enough - if ((waypoints[currentTargetWaypointIndex] - transform.GlobalPosition).GetSqrMagnitude() < 1.0f) - { - ++currentTargetWaypointIndex; - if (currentTargetWaypointIndex == waypoints.Length) - { - currentTargetWaypointIndex = 0; //Recycle - } - } - } -} \ No newline at end of file From f513603479999309b4d8a2ab0e2e612a94093c69 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Wed, 2 Nov 2022 13:14:17 +0800 Subject: [PATCH 639/793] AI Prototype implemented --- TempScriptsFolder/AIPrototype.cs | 174 +++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 TempScriptsFolder/AIPrototype.cs diff --git a/TempScriptsFolder/AIPrototype.cs b/TempScriptsFolder/AIPrototype.cs new file mode 100644 index 00000000..88a319e3 --- /dev/null +++ b/TempScriptsFolder/AIPrototype.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using SHADE; + +public class AIPrototype : Script +{ + //This object's relevant components + private Transform transform; + private RigidBody rb; + + /*[SerializeField] + [Tooltip("The list of waypoints that the object will move around on")] + private Vector3[] waypoints;*/ + + private Vector3[] waypoints = { new Vector3(2.0f, -2.0f, -2.8f), new Vector3(-2.0f, -2.0f, -2.8f), new Vector3(-2.0f, -2.0f, -7.0f), new Vector3(2.0f, -2.0f, -7.0f) }; + + [SerializeField] + [Tooltip("How much force is applied in movement")] + private float movementForceMultiplier = 100.0f; + + [SerializeField] + [Tooltip("How fast the object moves about waypoints")] + private float patrolSpeed = 1.0f; + + [SerializeField] + [Tooltip("How fast the object moves while chasing")] + private float chaseSpeed = 1.5f; + + [SerializeField] + [Tooltip("How near the player must be for the chase to begin. Should be less than distanceToEndChase")] + private float distanceToStartChase = 1.5f; + + [SerializeField] + [Tooltip("How far the player must be for the chase to end. Should be greater than distanceToStartChase")] + private float distanceToEndChase = 2.5f; + + //Whether the AI is chasing or not + private bool chaseMode; + + //To cycle depending on the length of waypoints + private int currentTargetWaypointIndex; + + private GameObject? player; + + public AIPrototype(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + transform = GetComponent(); + if (transform == null) + { + Debug.LogError("Transform is NULL!"); + } + + rb = GetComponent(); + if (rb == null) + { + Debug.LogError("Rigidbody is NULL!"); + } + + currentTargetWaypointIndex = 0; + + player = GameObject.Find("Player"); + if (player == null) + { + Debug.LogError("Player is NULL!"); + } + + chaseMode = false; + } + + protected override void fixedUpdate() + { + //Patrolling + if (!chaseMode) + { + //Head towards the next target + Vector3 normalisedDifference = waypoints[currentTargetWaypointIndex] - transform.GlobalPosition; + normalisedDifference /= normalisedDifference.GetMagnitude(); + + //transform.GlobalPosition += normalisedDifference * moveSpeed * (float)Time.DeltaTime; + //rb.LinearVelocity = normalisedDifference * patrolSpeed; + + //ORIGINAL INTENDED CODE + /*rb.AddForce(new Vector3(normalisedDifference.x, 0.0f, normalisedDifference.z) * movementForceMultiplier); + float currentSpeed = MathF.Sqrt(rb.LinearVelocity.x * rb.LinearVelocity.x + rb.LinearVelocity.z * rb.LinearVelocity.z); + if (currentSpeed > patrolSpeed) + { + float adjustmentFactor = patrolSpeed / currentSpeed; + Vector3 adjustedVelocity = rb.LinearVelocity; + //adjustedVelocity *= adjustmentFactor; + adjustedVelocity.x = patrolSpeed; + adjustedVelocity.z = patrolSpeed; + rb.LinearVelocity = adjustedVelocity; + }*/ + + //TODO delete this when original intended code above works with velocity being limited correctly + rb.LinearVelocity = normalisedDifference * patrolSpeed; + + //transform.GlobalRotation.SetLookRotation(waypoints[currentTargetWaypointIndex], Vector3.Up); + + //Cycle to next waypoint if near enough current waypoint + if ((waypoints[currentTargetWaypointIndex] - transform.GlobalPosition).GetSqrMagnitude() <= 0.5f) + { + ++currentTargetWaypointIndex; + if (currentTargetWaypointIndex >= waypoints.Length) + { + currentTargetWaypointIndex = 0; //Recycle + } + } + + //Go chase if near enough to player + if (player != null) + { + Transform pTransform = player.GetValueOrDefault().GetComponent(); + if ((pTransform.GlobalPosition - transform.GlobalPosition).GetMagnitude() <= distanceToStartChase) + { + //Start the chase + chaseMode = true; + } + } + } + else //Chasing + { + if (player != null) + { + Transform pTransform = player.GetValueOrDefault().GetComponent(); + + //Chase the player + Vector3 normalisedDifference = pTransform.GlobalPosition - transform.GlobalPosition; + normalisedDifference /= normalisedDifference.GetMagnitude(); + + //transform.GlobalPosition += normalisedDifference * moveSpeed * (float)Time.DeltaTime; + + //ORIGINAL INTENDED CODE + /*rb.AddForce(new Vector3(normalisedDifference.x, 0.0f, normalisedDifference.z) * movementForceMultiplier); + float currentSpeed = MathF.Sqrt(rb.LinearVelocity.x * rb.LinearVelocity.x + rb.LinearVelocity.z * rb.LinearVelocity.z); + if (currentSpeed > chaseSpeed) + { + float adjustmentFactor = chaseSpeed / currentSpeed; + Vector3 adjustedVelocity = rb.LinearVelocity; + adjustedVelocity *= adjustmentFactor; + rb.LinearVelocity = adjustedVelocity; + }*/ + + //TODO delete this when original intended code above works with velocity being limited correctly + rb.LinearVelocity = normalisedDifference * chaseSpeed; + + //End chase if too far + if ((pTransform.GlobalPosition - transform.GlobalPosition).GetMagnitude() >= distanceToEndChase) + { + //Stop the chase + chaseMode = false; + + //Find the nearest waypoint to go instead + float nearestWaypointDistance = 99999999999999.9f; + for (int i = 0; i < waypoints.Length; ++i) + { + if ((waypoints[i] - transform.GlobalPosition).GetSqrMagnitude() < nearestWaypointDistance) + { + nearestWaypointDistance = waypoints[i].GetSqrMagnitude(); + currentTargetWaypointIndex = i; + } + } + } + } + } + } +} \ No newline at end of file From 7bda8b39986d3807f30bf0ebdc173a551b106402 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 13:48:53 +0800 Subject: [PATCH 640/793] Added IsInterpolating to RigidBody in C# --- SHADE_Managed/src/Components/RigidBody.cxx | 8 ++++++++ SHADE_Managed/src/Components/RigidBody.hxx | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/SHADE_Managed/src/Components/RigidBody.cxx b/SHADE_Managed/src/Components/RigidBody.cxx index 172b928b..12861600 100644 --- a/SHADE_Managed/src/Components/RigidBody.cxx +++ b/SHADE_Managed/src/Components/RigidBody.cxx @@ -148,6 +148,14 @@ namespace SHADE { return Convert::ToCLI(GetNativeComponent()->GetTorque()); } + bool RigidBody::Interpolating::get() + { + return GetNativeComponent()->IsInterpolating(); + } + void RigidBody::Interpolating::set(bool value) + { + GetNativeComponent()->SetInterpolate(value); + } /*---------------------------------------------------------------------------------*/ /* Force Functions */ diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx index b3e031ba..d3a30612 100644 --- a/SHADE_Managed/src/Components/RigidBody.hxx +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -129,6 +129,11 @@ namespace SHADE { Vector3 get(); } + property bool Interpolating + { + bool get(); + void set(bool value); + } /*-----------------------------------------------------------------------------*/ /* Force Functions */ From eb569a4263a267140aabdbdc8e73f411e27156b8 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 2 Nov 2022 14:21:27 +0800 Subject: [PATCH 641/793] Shader updates --- Assets/Shaders/DeferredComposite_CS.glsl | 27 ++++++++++++------ Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4997 -> 5501 bytes 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index 833180e7..5af585ba 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -57,25 +57,34 @@ void main() // normal of fragment vec3 normalView = imageLoad(normals, globalThread).rgb; + // light layer index + uint lightLayer = imageLoad (lightLayerData, globalThread).r; + vec3 fragColor = vec3 (0.0f); for (int i = 0; i < lightCounts.directionalLights; ++i) { - // get normalized direction of light - vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); + if ((lightLayer & DirLightData.dLightData[i].cullingMask) != 0) + { + // get normalized direction of light + vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); - // Get diffuse strength - float diffuseStrength = max (0, dot (dLightNormalized, normalView)); + // Get diffuse strength + float diffuseStrength = max (0, dot (dLightNormalized, normalView)); - // Calculate the fragment color - fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; + // Calculate the fragment color + fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; + } } for (int i = 0; i < lightCounts.ambientLights; ++i) { - // Just do some add - //fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (0.5f); - fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (AmbLightData.aLightData[i].strength); + if ((lightLayer & AmbLightData.aLightData[i].cullingMask) != 0) + { + // Just do some add + //fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (0.5f); + fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (AmbLightData.aLightData[i].strength); + } } float ssaoVal = imageLoad (ssaoBlurredImage, globalThread).r; diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index 8d7a83271b3d684965b4a639eba7e74329c9469d..6e0ff2a40f9907e1126db4f89f94de2523310b2a 100644 GIT binary patch literal 5501 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 H+t-dYB8QE`3^aG z`1y0n-KiXvxHcZf$0zIMuq0J=cBHjc;;}+%8mykG6~iQ|RR;%Bdt0zld^$Q)jt8QN ziJ6A7v#&LHP&|ys%cUB6TacGNU28;a9*xSUr3%jl-5%a>*n075tv(gTnJ4i!%wmmn zUyt;OdRXbN#kG36uO-+l9;I?F*eN~~RVI`E+DtWRsDh3Z6CAj!s#U`{bs=w?{;`LC zPS>Jp;w*;KgT{2tV0pKv{&Y5+8js4eJF;`_5*~Z`bMo&OR!ZX@NlzD@E6?6D_c@TY zaJH^vNqwf6WVK;u&DJiN+Q6wfYV^78-^Ho9I1_6;Du=_y$+TwtskxN3%dSs%+7TQO zKDUN}FbM^xxv;acGh`Nedr+A6r6)6g@L_zjJUU9bT1h6ArzI!}&-&CJOiS+b?(goI zGn>qIzq7S+ZuW8Rh6R>vIOm>wANX@_|32smv*YKt`iX^&6?!M*Txtn>JT#m6%fcIt zur?aTI%j)u)#>}lk8k`C%?tSEf>#`+by;4pxn7DU@#mvl5c(z>6Dk*68`991S ztrns4w$_PSJ-tgZ=f>VG?%UC^v#|4)d^>S?;_r;_nx46ZMMNXERLAEb0Se zAO6g;UmrU4k)Qp{5zF=)X7yPu_*s3+B%7brw@MiK-Vvw1ya*qgIg3wyU{)Wq=huf$ zeKrfs9Cly#?bqkn(Xr=5)bootv-W_~?}+>H(DA39r8*&J?2?9#yj(HtJWbM9O4lFG z6vLjE&a8kz_|Hpm{ilUL`N4>ZKRqWF_)e$uCM^CU$>hX;h5qNh^CDs`7e}{PDo9PLxcm;W`(_{avPHyND~-3v-TK77=Y?@*?Bqx1ZGvIn?PT^X z6WS+Eya91)v3T6Y8r?SU4%=GE2gK2dQxGR67BwIg6 zC9{{jW*?W_B%(gvq4no(jVf_$@#@FzQ239ESb8lc|SZUlB(ppTCH~ zT(ajQXTX=3=vN&^&D8ao)3GyOyh|4IbweBafe_>b&59e zB@Ppt#qM_)_ckIw>RT$p7u#;#1m^}L58sW4M0_*Q@n0>%XI%T4&$S|az=w5n%>Tn8 zaEL`d?wk1BBX;6-i9aIZ`(g1PmF&lV%=v&@{KqAOLo7djUOIM*|AgcXPN)8jB0v5n z>G*(K{3j)YLo7c&ea6mNdc=F3On3b{x0A{Y~BVotNplSt9?}ROCqZs+X)fA%;(D@?AF^?90ty^-r`RUuZqYw;?DY- z!@!{{s-N?{E+Q6oJL4OYnQ!xXQ!;+w<})Ulxw+)xyd@b7Uz;f~=7gD{Z*cZAC!vV5 zU(|l|qQl0;*^dp(pF{eOjc*El#a0$4Hk=u)h);@G*duZ5aLfI+WMbHio|Ft`Ga5@~ zM(zHY(J2wQ&1h9J`@oq|^a&C9$%kxrRg=tpTK*ZyLT!XN8duKg)McvgJE3`GUyuVdKv6Wp3UTVYj(?&tc$@<#}H+xv;aBS-L3l zXX28>@U@u$qc8M`dxBe?A4sN7n~4u4gV{`A1M~aNeY5|H_{XBFPHz|gMARv=Z~Ui{ z@d4-W3+Me@1kR$y%i>^mA74lYvol_k%o(q_x&Jbig8)A}BN+ax#J>_ Date: Wed, 2 Nov 2022 15:05:34 +0800 Subject: [PATCH 642/793] new SHMETA --- Assets/Shaders/SSAOBlur_CS.shshaderb.shmeta | 3 +++ Assets/Shaders/SSAO_CS.shshaderb.shmeta | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Assets/Shaders/SSAOBlur_CS.shshaderb.shmeta diff --git a/Assets/Shaders/SSAOBlur_CS.shshaderb.shmeta b/Assets/Shaders/SSAOBlur_CS.shshaderb.shmeta new file mode 100644 index 00000000..57bdb72b --- /dev/null +++ b/Assets/Shaders/SSAOBlur_CS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: SSAOBlur_CS +ID: 39760835 +Type: 2 diff --git a/Assets/Shaders/SSAO_CS.shshaderb.shmeta b/Assets/Shaders/SSAO_CS.shshaderb.shmeta index a5b5b739..9a477b24 100644 --- a/Assets/Shaders/SSAO_CS.shshaderb.shmeta +++ b/Assets/Shaders/SSAO_CS.shshaderb.shmeta @@ -1,3 +1,3 @@ Name: SSAO_CS -ID: 48941934 +ID: 38430899 Type: 2 From f0ef9fc0cf411b494ec1e44c380fc3a48c89e138 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 15:13:12 +0800 Subject: [PATCH 643/793] Fixed validation errors due to debug draw --- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 16 ++- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 25 ++-- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 113 ++++++++++-------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 6 + 4 files changed, 92 insertions(+), 68 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 90fe51d5..74effb6d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -95,18 +95,26 @@ namespace SHADE // Get Current frame index const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); - // Set Pipelin - cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); - cmdBuffer->SetLineWidth(LineWidth); - // Don't draw if no points if (numPoints[FRAME_IDX] > 0) { + cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); + cmdBuffer->SetLineWidth(LineWidth); cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); cmdBuffer->DrawArrays(numPoints[FRAME_IDX], 1, 0, 0); } + }); + auto subPassWithDepth = renderGraph->GetNode("Debug Draw with Depth")->GetSubpass("Debug Draw with Depth"); + subPassWithDepth->AddExteriorDrawCalls([this, GFX_SYSTEM](Handle& cmdBuffer) + { + // Get Current frame index + const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); + + // Don't draw if no points if (numPersistentPoints[FRAME_IDX] > 0) { + cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawDepthPipeline()); + cmdBuffer->SetLineWidth(LineWidth); cmdBuffer->BindVertexBuffer(0, persistentVertexBuffers[FRAME_IDX], 0); cmdBuffer->DrawArrays(numPersistentPoints[FRAME_IDX], 1, 0, 0); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 7c9e7c81..2a9709ed 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -131,7 +131,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /// /// Renders a line between two points in world space that will persist until - /// ClearPersistentDraws() is called. + /// ClearPersistentDraws() is called. These lines are depth tested. /// /// Colour of the line. /// First point of the line. @@ -139,7 +139,7 @@ namespace SHADE void DrawPersistentLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); /// /// Renders a triangle indicated by three points in world space that will persist - /// until ClearPersistentDraws() is called. + /// until ClearPersistentDraws() is called. These lines are depth tested. /// /// Colour of the triangle. /// First point of the triangle. @@ -148,7 +148,7 @@ namespace SHADE void DrawPersistentTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); /// /// Renders a quadrilateral indicated by four points in world space that will persist - /// until ClearPersistentDraws() is called. + /// until ClearPersistentDraws() is called. These lines are depth tested. /// /// Colour of the quadrilateral. /// First point of the triangle. @@ -158,14 +158,16 @@ namespace SHADE void DrawPersistentQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); /// /// Renders a polygon indicated by the specified set of points in world space that - /// will persist until ClearPersistentDraws() is called. + /// will persist until ClearPersistentDraws() is called. These lines are depth + /// tested. /// /// Colour of the polygon. /// List of points for the polygon. void DrawPersistentPoly(const SHVec4& color, std::initializer_list pointList); /// /// Renders a polygon indicated by the specified set of points in world space that - /// will persist until ClearPersistentDraws() is called. + /// will persist until ClearPersistentDraws() is called. These lines are depth + /// tested. /// /// Iterator for a STL-like container. /// Colour of the polygon. @@ -179,7 +181,8 @@ namespace SHADE void DrawPersistentPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd); /// /// Renders a wireframe cube centered around the position specified in world space - /// that will persist until ClearPersistentDraws() is called. + /// that will persist until ClearPersistentDraws() is called. These lines are depth + /// tested. /// /// Colour of the cube. /// Position where the cube wil be centered at. @@ -187,7 +190,8 @@ namespace SHADE void DrawPersistentCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); /// /// Renders a wireframe sphere centered around the position specified in world space - /// that will persist until ClearPersistentDraws() is called. + /// that will persist until ClearPersistentDraws() is called. These lines are depth + /// tested. /// /// Colour of the sphere. /// Position where the sphere wil be centered at. @@ -241,13 +245,6 @@ namespace SHADE void drawCube(std::vector& storage, const SHVec4& color, const SHVec3& pos, const SHVec3& size); void drawSphere(std::vector& storage, const SHVec4& color, const SHVec3& pos, double radius); }; - - template - void SHADE::SHDebugDrawSystem::DrawPersistentPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) - { - - } - } #include "SHDebugDrawSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 2bc2b7de..4d551cee 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -171,7 +171,7 @@ namespace SHADE "Normals", "Albedo", "Depth Buffer", - "Scene" + "Scene" }, {}); // no predecessors @@ -186,8 +186,14 @@ namespace SHADE // deferred composite gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "Scene" }); - // Set up Debug Draw Pass - auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, {"G-Buffer"}); + // Set up Debug Draw Passes + // - Depth Tested + auto debugDrawNodeDepth = worldRenderGraph->AddNode("Debug Draw with Depth", { "Scene", "Depth Buffer" }, {"G-Buffer"}); + auto debugDrawDepthSubpass = debugDrawNodeDepth->AddSubpass("Debug Draw with Depth"); + debugDrawDepthSubpass->AddColorOutput("Scene"); + debugDrawDepthSubpass->AddDepthOutput("Depth Buffer"); + // - No Depth Test + auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, { "Debug Draw with Depth" }); auto debugDrawSubpass = debugDrawNode->AddSubpass("Debug Draw"); debugDrawSubpass->AddColorOutput("Scene"); @@ -209,53 +215,8 @@ namespace SHADE defaultMaterial = AddMaterial(defaultVertShader, defaultFragShader, gBufferSubpass); // Create debug draw pipeline - auto debugDrawPipelineLayout = resourceManager.Create - ( - device, SHPipelineLayoutParams - { - .shaderModules = { debugVertShader, debugFragShader }, - .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() - } - ); - debugDrawPipeline = resourceManager.Create(device, debugDrawPipelineLayout, nullptr, debugDrawNode->GetRenderpass(), debugDrawSubpass); - debugDrawPipeline->GetPipelineState().SetRasterizationState(SHRasterizationState - { - .polygonMode = vk::PolygonMode::eLine, - .cull_mode = vk::CullModeFlagBits::eNone - }); - debugDrawPipeline->GetPipelineState().SetInputAssemblyState(SHInputAssemblyState - { - .topology = vk::PrimitiveTopology::eLineList - }); - - SHVertexInputState debugDrawVertexInputState; - debugDrawVertexInputState.AddBinding(false, true, { SHVertexAttribute(SHAttribFormat::FLOAT_4D), SHVertexAttribute(SHAttribFormat::FLOAT_4D) }); - debugDrawPipeline->GetPipelineState().SetVertexInputState(debugDrawVertexInputState); - SHColorBlendState colorBlendState{}; - colorBlendState.logic_op_enable = VK_FALSE; - colorBlendState.logic_op = vk::LogicOp::eCopy; - - auto const& subpassColorReferences = debugDrawSubpass->GetColorAttachmentReferences(); - colorBlendState.attachments.reserve(subpassColorReferences.size()); - - for (auto& att : subpassColorReferences) - { - colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState - { - .blendEnable = SHVkUtil::IsBlendCompatible(debugDrawSubpass->GetFormatFromAttachmentReference(att.attachment)), - .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, - .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, - .colorBlendOp = vk::BlendOp::eAdd, - .srcAlphaBlendFactor = vk::BlendFactor::eOne, - .dstAlphaBlendFactor = vk::BlendFactor::eZero, - .alphaBlendOp = vk::BlendOp::eAdd, - .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, - } - ); - } - - debugDrawPipeline->GetPipelineState().SetColorBlenState(colorBlendState); - debugDrawPipeline->ConstructPipeline(); + debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass); + debugDrawDepthPipeline = createDebugDrawPipeline(debugDrawNodeDepth->GetRenderpass(), debugDrawDepthSubpass); } void SHGraphicsSystem::InitMiddleEnd(void) noexcept @@ -867,5 +828,57 @@ namespace SHADE return worldRenderGraph->GetNode(G_BUFFER_RENDER_GRAPH_NODE_NAME.data()); } + Handle SHGraphicsSystem::createDebugDrawPipeline(Handle renderPass, Handle subpass) + { + auto pipelineLayout = resourceManager.Create + ( + device, SHPipelineLayoutParams + { + .shaderModules = { debugVertShader, debugFragShader }, + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() + } + ); + auto pipeline = resourceManager.Create(device, pipelineLayout, nullptr, renderPass, subpass); + pipeline->GetPipelineState().SetRasterizationState(SHRasterizationState + { + .polygonMode = vk::PolygonMode::eLine, + .cull_mode = vk::CullModeFlagBits::eNone + }); + pipeline->GetPipelineState().SetInputAssemblyState(SHInputAssemblyState + { + .topology = vk::PrimitiveTopology::eLineList + }); + + SHVertexInputState debugDrawVertexInputState; + debugDrawVertexInputState.AddBinding(false, true, { SHVertexAttribute(SHAttribFormat::FLOAT_4D), SHVertexAttribute(SHAttribFormat::FLOAT_4D) }); + pipeline->GetPipelineState().SetVertexInputState(debugDrawVertexInputState); + SHColorBlendState colorBlendState{}; + colorBlendState.logic_op_enable = VK_FALSE; + colorBlendState.logic_op = vk::LogicOp::eCopy; + + auto const& subpassColorReferences = subpass->GetColorAttachmentReferences(); + colorBlendState.attachments.reserve(subpassColorReferences.size()); + + for (auto& att : subpassColorReferences) + { + colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState + { + .blendEnable = SHVkUtil::IsBlendCompatible(subpass->GetFormatFromAttachmentReference(att.attachment)), + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + }); + } + + pipeline->GetPipelineState().SetColorBlenState(colorBlendState); + pipeline->ConstructPipeline(); + + return pipeline; + } + #pragma endregion MISC } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index b307dc92..07e5fbab 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -289,6 +289,7 @@ namespace SHADE Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; Handle GetPrimaryRenderpass() const noexcept; Handle GetDebugDrawPipeline(void) const noexcept { return debugDrawPipeline; } + Handle GetDebugDrawDepthPipeline(void) const noexcept { return debugDrawDepthPipeline; } uint32_t GetCurrentFrameIndex(void) const noexcept { return renderContext.GetCurrentFrame(); } /*-----------------------------------------------------------------------------*/ @@ -355,6 +356,7 @@ namespace SHADE // Built-In Materials Handle defaultMaterial; Handle debugDrawPipeline; + Handle debugDrawDepthPipeline; Handle worldRenderGraph; @@ -367,5 +369,9 @@ namespace SHADE uint32_t resizeHeight; bool restoredFromMinimize = false; + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + Handle createDebugDrawPipeline(Handle renderPass, Handle subpass); }; } \ No newline at end of file From d818adf2a20a87ec374ba2f81bba58953e53987b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 15:34:35 +0800 Subject: [PATCH 644/793] Fixed DrawPoly() --- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 9 +++-- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 3 ++ .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 34 ++++++++++++++++++- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 74effb6d..37d15808 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -255,6 +255,11 @@ namespace SHADE storage.emplace_back(PointVertex{ endPt, color }); } + void SHDebugDrawSystem::drawLineSet(std::vector& storage, const SHVec4& color, std::initializer_list pointList) + { + drawLineSet(storage, color, pointList.begin(), pointList.end()); + } + void SHDebugDrawSystem::drawPoly(std::vector& storage, const SHVec4& color, std::initializer_list pointList) { drawPoly(storage, color, pointList.begin(), pointList.end()); @@ -281,7 +286,7 @@ namespace SHADE const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size; const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size; - drawPoly + drawLineSet ( storage, color, @@ -316,6 +321,6 @@ namespace SHADE spherePoints.emplace_back(SPHERE.VertexPositions[idx]); } } - drawPoly(storage, color, spherePoints.begin(), spherePoints.end()); + drawLineSet(storage, color, spherePoints.begin(), spherePoints.end()); } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 2a9709ed..20ddcd42 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -239,6 +239,9 @@ namespace SHADE /* Helper Draw Functions */ /*---------------------------------------------------------------------------------*/ void drawLine(std::vector& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + void drawLineSet(std::vector& storage, const SHVec4& color, std::initializer_list pointList); + template + void drawLineSet(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd); void drawPoly(std::vector& storage, const SHVec4& color, std::initializer_list pointList); template void drawPoly(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp index 953b1cb3..2a171e73 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -28,7 +28,7 @@ namespace SHADE /* Helper Draw Functions */ /*-----------------------------------------------------------------------------------*/ template - void SHDebugDrawSystem::drawPoly(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + void SHDebugDrawSystem::drawLineSet(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd) { // Ensure dereferenced type is SHVec3 static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); @@ -54,4 +54,36 @@ namespace SHADE storage.emplace_back(PointVertex{ *pointIter, color }); } } + template + void SHDebugDrawSystem::drawPoly(std::vector& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + { + // Ensure dereferenced type is SHVec3 + static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); + + // Check if points exceeded max + if (storage.size() > MAX_POINTS) + { + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; + } + + const size_t POINTS_COUNT = pointListEnd - pointListBegin; + // Invalid polygon + if (POINTS_COUNT < 2) + { + SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly()."); + return; + } + + // Trace the polygon + for (auto pointIter = pointListBegin + 1; pointIter != pointListEnd; ++pointIter) + { + storage.emplace_back(PointVertex{ *(pointIter - 1), color }); + storage.emplace_back(PointVertex{ *pointIter , color }); + } + + // Close the line loop + storage.emplace_back(PointVertex{ *(pointListEnd - 1), color }); + storage.emplace_back(PointVertex{ *pointListBegin , color }); + } } \ No newline at end of file From 02c79b4cc48f5d606c9ed6fcaaf75be1fc5718da Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 2 Nov 2022 15:44:24 +0800 Subject: [PATCH 645/793] Added Debug Drawing for Colliders (wonk) and Trigger checkbox to Colldiers Press space to toggle debug draw. Does not work until you press play, then it can be toggled on and off. --- .../src/Application/SBApplication.cpp | 8 + .../Inspector/SHEditorComponentView.hpp | 4 + SHADE_Engine/src/Math/SHColour.cpp | 11 ++ SHADE_Engine/src/Math/SHColour.h | 7 + SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 162 +++++++++++++++++- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 52 +++--- SHADE_Engine/src/Tools/SHUtilities.h | 2 +- 7 files changed, 220 insertions(+), 26 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index b865f028..81926359 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -91,6 +91,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); @@ -148,6 +149,13 @@ namespace Sandbox #endif SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); editor->PollPicking(); + + static bool drawColliders = false; + if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::SPACE)) + { + drawColliders = !drawColliders; + SHSystemManager::GetSystem()->SetDrawColliders(drawColliders); + } } // Finish all graphics jobs first graphicsSystem->AwaitGraphicsExecution(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 4777fc6a..6f03a55e 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -273,6 +273,7 @@ namespace SHADE { } + { SHEditorWidgets::BeginPanel("Offsets",{ ImGui::GetContentRegionAvail().x, 30.0f }); SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider->GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider->SetPositionOffset(vec); }); @@ -297,6 +298,9 @@ namespace SHADE }); SHEditorWidgets::EndPanel(); } + + SHEditorWidgets::CheckBox("Is Trigger", [collider] { return collider->IsTrigger(); }, [collider](bool value) { collider->SetIsTrigger(value); }); + if (ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) { colliderToDelete = i; diff --git a/SHADE_Engine/src/Math/SHColour.cpp b/SHADE_Engine/src/Math/SHColour.cpp index 944c37cb..fc2f2a08 100644 --- a/SHADE_Engine/src/Math/SHColour.cpp +++ b/SHADE_Engine/src/Math/SHColour.cpp @@ -118,6 +118,17 @@ namespace SHADE } {} + SHColour::SHColour(uint32_t rgba) noexcept + : XMFLOAT4 { 0.0f, 0.0f, 0.0f, 1.0f } + { + const SHColour32 TMP { ._32bitValue = rgba }; + + x = static_cast(TMP._8bitValues[0]) / 255.0f; + y = static_cast(TMP._8bitValues[1]) / 255.0f; + z = static_cast(TMP._8bitValues[2]) / 255.0f; + w = static_cast(TMP._8bitValues[3]) / 255.0f; + } + SHColour::SHColour(const SHVec3& rgb) noexcept : XMFLOAT4 { rgb.x, rgb.y, rgb.z, 1.0f } {} diff --git a/SHADE_Engine/src/Math/SHColour.h b/SHADE_Engine/src/Math/SHColour.h index a6adf7bb..5dac0edd 100644 --- a/SHADE_Engine/src/Math/SHColour.h +++ b/SHADE_Engine/src/Math/SHColour.h @@ -34,6 +34,12 @@ namespace SHADE float v = 0.0f; }; + union SH_API SHColour32 + { + uint32_t _32bitValue; + uint8_t _8bitValues[4]; + }; + class SH_API SHColour : public DirectX::XMFLOAT4 { public: @@ -46,6 +52,7 @@ namespace SHADE SHColour (float r, float g, float b, float a) noexcept; SHColour (uint8_t r, uint8_t g, uint8_t b) noexcept; SHColour (uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept; + SHColour (uint32_t rgba) noexcept; SHColour (const SHVec3& rgb) noexcept; SHColour (const SHVec4& rgba) noexcept; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index e1acccd9..bdee8ba1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -17,10 +17,12 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" #include "Math/SHMathHelpers.h" #include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneManager.h" #include "Scripting/SHScriptEngine.h" +#include "Tools/SHUtilities.h" namespace SHADE { @@ -30,6 +32,7 @@ namespace SHADE SHPhysicsSystem::SHPhysicsSystem() : worldUpdated { false } + , debugDrawFlags { 0 } , interpolationFactor { 0.0 } , fixedDT { 60.0 } , world { nullptr } @@ -47,6 +50,11 @@ namespace SHADE : SHSystemRoutine { "Physics PostUpdate", false } {} + SHPhysicsSystem::PhysicsDebugDraw::PhysicsDebugDraw() + : SHSystemRoutine { "Physics DebugDraw", true } + {} + + /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -99,6 +107,31 @@ namespace SHADE return 0; } + bool SHPhysicsSystem::GetDrawColliders() const noexcept + { + return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER); + } + + bool SHPhysicsSystem::GetDrawColliderAABBs() const noexcept + { + return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER_AABB); + } + + bool SHPhysicsSystem::GetDrawBroadPhase() const noexcept + { + return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::BROAD_PHASE_AABB); + } + + bool SHPhysicsSystem::GetDrawContactPoints() const noexcept + { + return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_POINTS); + } + + bool SHPhysicsSystem::GetDrawContactNormals() const noexcept + { + return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_NORMALS); + } + const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetCollisionInfo() const noexcept { return collisionInfo; @@ -181,6 +214,96 @@ namespace SHADE } } + void SHPhysicsSystem::SetDrawColliders(bool shouldDraw) noexcept + { + static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER); + shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); + + if (world == nullptr) + { + SHLOGV_WARNING("No physics world has been initialised!") + return; + } + + world->getDebugRenderer().setIsDebugItemDisplayed + ( + rp3d::DebugRenderer::DebugItem::COLLISION_SHAPE, + shouldDraw + ); + } + + void SHPhysicsSystem::SetDrawColliderAABBs(bool shouldDraw) noexcept + { + static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER_AABB); + shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); + + if (world == nullptr) + { + SHLOGV_WARNING("No physics world has been initialised!") + return; + } + + world->getDebugRenderer().setIsDebugItemDisplayed + ( + rp3d::DebugRenderer::DebugItem::COLLIDER_AABB, + shouldDraw + ); + } + + void SHPhysicsSystem::SetDrawBroadPhase(bool shouldDraw) noexcept + { + static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::BROAD_PHASE_AABB); + shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); + + if (world == nullptr) + { + SHLOGV_WARNING("No physics world has been initialised!") + return; + } + + world->getDebugRenderer().setIsDebugItemDisplayed + ( + rp3d::DebugRenderer::DebugItem::COLLIDER_BROADPHASE_AABB, + shouldDraw + ); + } + + void SHPhysicsSystem::SetDrawContactPoints(bool shouldDraw) noexcept + { + static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_POINTS); + shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); + + if (world == nullptr) + { + SHLOGV_WARNING("No physics world has been initialised!") + return; + } + + world->getDebugRenderer().setIsDebugItemDisplayed + ( + rp3d::DebugRenderer::DebugItem::CONTACT_POINT, + shouldDraw + ); + } + + void SHPhysicsSystem::SetDrawContactNormals(bool shouldDraw) noexcept + { + static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_NORMALS); + shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); + + if (world == nullptr) + { + SHLOGV_WARNING("No physics world has been initialised!") + return; + } + + world->getDebugRenderer().setIsDebugItemDisplayed + ( + rp3d::DebugRenderer::DebugItem::CONTACT_NORMAL, + shouldDraw + ); + } + /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -198,6 +321,7 @@ namespace SHADE world = factory.createPhysicsWorld(settings); world->setEventListener(this); + world->setIsDebugRenderingEnabled(true); // Set up solvers world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); @@ -323,7 +447,7 @@ namespace SHADE auto* scriptingSystem = SHSystemManager::GetSystem(); if (scriptingSystem == nullptr) { - SHLOGV_WARNING("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + SHLOGV_ERROR("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); } fixedTimeStep = 1.0 / physicsSystem->fixedDT; @@ -353,7 +477,7 @@ namespace SHADE auto* scriptingSystem = SHSystemManager::GetSystem(); if (scriptingSystem == nullptr) { - SHLOGV_WARNING("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); + SHLOGV_ERROR("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); } // Interpolate transforms for rendering @@ -369,6 +493,40 @@ namespace SHADE } } + void SHPhysicsSystem::PhysicsDebugDraw::Execute(double) noexcept + { + const auto* PHYSICS_SYSTEM = reinterpret_cast(GetSystem()); + if (PHYSICS_SYSTEM->debugDrawFlags == 0) + return; + + auto* debugDrawSystem = SHSystemManager::GetSystem(); + if (debugDrawSystem == nullptr) + { + SHLOGV_ERROR("Unable to debug draw physics objects due to missing SHDebugDrawSystem!"); + return; + } + + const auto& RP3D_DEBUG_RENDERER = PHYSICS_SYSTEM->world->getDebugRenderer(); + + const auto& LINES = RP3D_DEBUG_RENDERER.getLines(); + const auto& TRIANGLES = RP3D_DEBUG_RENDERER.getTriangles(); + + // Draw all lines + for (uint32_t i = 0; i < RP3D_DEBUG_RENDERER.getNbLines(); ++i) + { + const auto& LINE = LINES[i]; + debugDrawSystem->DrawLine(SHColour{ LINE.color1 }, LINE.point1, LINE.point2); + } + + for (uint32_t i = 0; i < RP3D_DEBUG_RENDERER.getNbTriangles(); ++i) + { + const auto& TRIANGLE = TRIANGLES[i]; + SHColour triColour{ TRIANGLE.color1 }; + triColour.a() = 1.0f; + debugDrawSystem->DrawTri(triColour, TRIANGLE.point1, TRIANGLE.point2, TRIANGLE.point3); + } + } + void SHPhysicsSystem::onContact(const CallbackData& callbackData) { for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 1d773618..05e6e57e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -51,6 +51,15 @@ namespace SHADE using CollisionEvents = std::vector; + enum class DebugDrawFlags : uint8_t + { + COLLIDER = 1 + , COLLIDER_AABB = 2 + , BROAD_PHASE_AABB = 4 + , CONTACT_POINTS = 8 + , CONTACT_NORMALS = 16 + }; + /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -69,6 +78,12 @@ namespace SHADE [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + [[nodiscard]] bool GetDrawColliders () const noexcept; + [[nodiscard]] bool GetDrawColliderAABBs () const noexcept; + [[nodiscard]] bool GetDrawBroadPhase () const noexcept; + [[nodiscard]] bool GetDrawContactPoints () const noexcept; + [[nodiscard]] bool GetDrawContactNormals () const noexcept; + [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; @@ -85,6 +100,13 @@ namespace SHADE void SetWorldSettings (const WorldSettings& settings) const noexcept; + // TODO(Diren): Can the debug draw flags be done through an enum? + void SetDrawColliders (bool shouldDraw) noexcept; + void SetDrawColliderAABBs (bool shouldDraw) noexcept; + void SetDrawBroadPhase (bool shouldDraw) noexcept; + void SetDrawContactPoints (bool shouldDraw) noexcept; + void SetDrawContactNormals (bool shouldDraw) noexcept; + /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ @@ -105,48 +127,31 @@ namespace SHADE class SH_API PhysicsPreUpdate final : public SHSystemRoutine { public: - /*-------------------------------------------------------------------------------*/ - /* Constructors & Destructor */ - /*-------------------------------------------------------------------------------*/ PhysicsPreUpdate(); - - /*-------------------------------------------------------------------------------*/ - /* Function Members */ - /*-------------------------------------------------------------------------------*/ - void Execute(double dt) noexcept override; }; class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine { public: - /*-------------------------------------------------------------------------------*/ - /* Constructors & Destructor */ - /*-------------------------------------------------------------------------------*/ PhysicsFixedUpdate(); - - /*-------------------------------------------------------------------------------*/ - /* Function Members */ - /*-------------------------------------------------------------------------------*/ - void Execute (double dt) noexcept override; }; class SH_API PhysicsPostUpdate final : public SHSystemRoutine { public: - /*-------------------------------------------------------------------------------*/ - /* Constructors & Destructor */ - /*-------------------------------------------------------------------------------*/ PhysicsPostUpdate(); + void Execute(double dt) noexcept override; + }; - /*-------------------------------------------------------------------------------*/ - /* Function Members */ - /*-------------------------------------------------------------------------------*/ - + class SH_API PhysicsDebugDraw final : public SHSystemRoutine + { + public: + PhysicsDebugDraw(); void Execute(double dt) noexcept override; }; @@ -162,6 +167,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ bool worldUpdated; + uint8_t debugDrawFlags; double interpolationFactor; double fixedDT; diff --git a/SHADE_Engine/src/Tools/SHUtilities.h b/SHADE_Engine/src/Tools/SHUtilities.h index b3d840e7..287a827e 100644 --- a/SHADE_Engine/src/Tools/SHUtilities.h +++ b/SHADE_Engine/src/Tools/SHUtilities.h @@ -39,7 +39,7 @@ namespace SHADE * @param[in] enumClassMember A member of the specified enum class. * @returns The value of the enum class member in the output type. */ - template + template > static constexpr OutputType ConvertEnum(InputType enumClassMember) noexcept; /** From 27526dfd92dfa820f2eb72d7afac3f0fb6496e2f Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 2 Nov 2022 16:12:47 +0800 Subject: [PATCH 646/793] Fixed relative size for sphere colliders --- .../Editor/EditorWindow/Inspector/SHEditorComponentView.hpp | 4 ++-- SHADE_Engine/src/Physics/SHCollider.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 6f03a55e..20615fdc 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -265,9 +265,9 @@ namespace SHADE { const SHVec3& TF_WORLD_SCALE = transformComponent->GetWorldScale(); const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - return sphere->GetRadius() / MAX_SCALE; + return (sphere->GetRadius() / MAX_SCALE) * 2.0f; }, - [collider](float const& value) { collider->SetBoundingSphere(value); }); + [collider](float const& value) { collider->SetBoundingSphere(value); }); } else if (collider->GetType() == SHCollider::Type::CAPSULE) { diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp index 6cea3dc1..6d455d67 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -212,7 +212,7 @@ namespace SHADE const SHVec3 TF_WORLD_SCALE = transformComponent->GetWorldScale(); const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - worldRadius *= MAX_SCALE; + worldRadius *= MAX_SCALE * 0.5f; } if (type == Type::SPHERE) From 6ab6cc15a921aedc01ff2c761608dd7ee6fd3186 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Wed, 2 Nov 2022 16:14:26 +0800 Subject: [PATCH 647/793] Zero out arrays for input manager --- SHADE_Engine/src/Input/SHInputManager.cpp | 32 ++++++++++++----------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Input/SHInputManager.cpp b/SHADE_Engine/src/Input/SHInputManager.cpp index c665a9c9..4849a772 100644 --- a/SHADE_Engine/src/Input/SHInputManager.cpp +++ b/SHADE_Engine/src/Input/SHInputManager.cpp @@ -25,16 +25,16 @@ namespace SHADE std::map SHInputManager::bindings; unsigned SHInputManager::keyCount = 0; - bool SHInputManager::keys[MAX_KEYS]; - bool SHInputManager::keysLast[MAX_KEYS]; - double SHInputManager::keysHeldTime[MAX_KEYS]; - double SHInputManager::keysReleasedTime[MAX_KEYS]; + bool SHInputManager::keys[MAX_KEYS] = {}; + bool SHInputManager::keysLast[MAX_KEYS] = {}; + double SHInputManager::keysHeldTime[MAX_KEYS] = {}; + double SHInputManager::keysReleasedTime[MAX_KEYS] = {}; unsigned SHInputManager::keyToggleCount = 0; - bool SHInputManager::keysToggle[MAX_KEYS]; - bool SHInputManager::keysToggleLast[MAX_KEYS]; - double SHInputManager::keysToggleOnTime[MAX_KEYS]; - double SHInputManager::keysToggleOffTime[MAX_KEYS]; + bool SHInputManager::keysToggle[MAX_KEYS] = {}; + bool SHInputManager::keysToggleLast[MAX_KEYS] = {}; + double SHInputManager::keysToggleOnTime[MAX_KEYS] = {}; + double SHInputManager::keysToggleOffTime[MAX_KEYS] = {}; int SHInputManager::mouseScreenX = 0; int SHInputManager::mouseScreenY = 0; @@ -46,11 +46,11 @@ namespace SHADE int SHInputManager::mouseWheelVerticalDeltaPoll = 0; unsigned char SHInputManager::controllersConnectedCount = 0; - unsigned SHInputManager::controllersInputCount[XUSER_MAX_COUNT]; - unsigned SHInputManager::controllersButtonCount[XUSER_MAX_COUNT]; - short SHInputManager::controllers[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; - short SHInputManager::controllersLast[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; - double SHInputManager::controllersHeldTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; + unsigned SHInputManager::controllersInputCount[XUSER_MAX_COUNT] = {}; + unsigned SHInputManager::controllersButtonCount[XUSER_MAX_COUNT] = {}; + short SHInputManager::controllers[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT] = {}; + short SHInputManager::controllersLast[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT] = {}; + double SHInputManager::controllersHeldTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT] = {}; double SHInputManager::controllersReleasedTime[XUSER_MAX_COUNT][MAX_CONTROLLER_INPUT]; //Internal helper function for splitting between inputs @@ -106,9 +106,11 @@ namespace SHADE memcpy(keysLast, keys, sizeof(keys)); //Poll - unsigned char keyboardState[MAX_KEYS]; + unsigned char keyboardState[MAX_KEYS] = {}; + SecureZeroMemory(keyboardState, sizeof(keyboardState)); //if (GetKeyboardState(keyboardState) == false) return; - SHASSERT(GetKeyboardState(keyboardState), "SHInputManager:GetKeyboardState() failed ({})", GetLastError()); + bool keyboardStateGot = GetKeyboardState(keyboardState); + SHASSERT(keyboardStateGot, "SHInputManager:GetKeyboardState() failed ({})", GetLastError()); keyCount = 0; keyToggleCount = 0; for (size_t i = 0; i < MAX_KEYS; ++i) From d207042fec502fd43567a5f4d2a9fecf64cec185 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 16:56:38 +0800 Subject: [PATCH 648/793] Reworked SHMaterialSpec and SHMaterial loading system --- .../MiddleEnd/Materials/SHMaterialSpec.cpp | 74 ++++++ .../MiddleEnd/Materials/SHMaterialSpec.h | 14 ++ SHADE_Engine/src/Resource/SHResourceManager.h | 9 +- .../src/Resource/SHResourceManager.hpp | 70 ++++-- .../Serialization/SHSerializationHelper.hpp | 231 +++++++----------- 5 files changed, 238 insertions(+), 160 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp new file mode 100644 index 00000000..0652b2bf --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp @@ -0,0 +1,74 @@ +/************************************************************************************//*! +\file SHMaterialSpec.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2022 +\brief Contains the function definitions of SHMaterialSpec. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHMaterialSpec.h" +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Resource/SHResourceManager.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------------*/ + SHMaterialSpec::SHMaterialSpec(const SHMaterial& material) + { + // Get Shader Handles + const auto& SHADERS = material.GetPipeline()->GetPipelineLayout()->GetShaderModules(); + Handle vShaderMod, fShaderMod; + for (const auto& shader : SHADERS) + { + const auto FLAG_BITS = shader->GetShaderStageFlagBits(); + if (FLAG_BITS & vk::ShaderStageFlagBits::eVertex) + vShaderMod = shader; + else if (FLAG_BITS & vk::ShaderStageFlagBits::eFragment) + fShaderMod = shader; + } + vertexShader = SHResourceManager::GetAssetID(vShaderMod).value_or(0); + fragShader = SHResourceManager::GetAssetID(vShaderMod).value_or(0); + subpassName = material.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); + + // Write Properties + Handle pipelineProperties = material.GetShaderBlockInterface(); + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + if (!VARIABLE) + break; + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + YAML::Node propNode; + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + propNode = material.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + propNode = material.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + propNode = material.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + propNode = material.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + propNode = material.GetProperty(VARIABLE->offset); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + properties[VAR_NAME.data()] = propNode; + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h index e41436ce..03928cfa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h @@ -20,6 +20,14 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Forward Declaration */ + /*-----------------------------------------------------------------------------------*/ + class SHMaterial; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ /*************************************************************************************/ /*! \brief @@ -33,5 +41,11 @@ namespace SHADE AssetID fragShader; std::string subpassName; YAML::Node properties; + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + SHMaterialSpec() = default; + SHMaterialSpec(const SHMaterial& material); }; } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index 61689420..bf26c16c 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -13,6 +13,8 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include + +namespace SHADE { class SHMaterial; } // Project Includes #include "SH_API.h" #include "SHResourceLibrary.h" @@ -24,6 +26,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" #include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Assets/Asset Types/SHMaterialAsset.h" namespace SHADE @@ -50,9 +53,11 @@ namespace SHADE using AssetType = SHShaderAsset; }; template<> + struct SHResourceLoader { using AssetType = SHMaterialAsset; }; + template<> struct SHResourceLoader { - using AssetType = SHMaterialAsset; + using AssetType = SHMaterialSpec; }; @@ -79,6 +84,8 @@ namespace SHADE /// Handle to a loaded runtime asset. template static Handle LoadOrGet(AssetID assetId); + template<> + static inline Handle LoadOrGet(AssetID assetId); /// /// Unloads an existing loaded asset. Attempting to unload an invalid Handle will /// simply do nothing except emit a warning. diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 15834cdf..aa0a0af9 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -24,6 +24,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Serialization/SHSerializationHelper.hpp" namespace SHADE { @@ -34,7 +35,12 @@ namespace SHADE Handle SHResourceManager::LoadOrGet(AssetID assetId) { // Check if it is an unsupported type - if (!std::is_same_v && !std::is_same_v) + if (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v + ) { static_assert(true, "Unsupported Resource Type specified for SHResourceManager."); } @@ -54,14 +60,41 @@ namespace SHADE } auto handle = load(assetId, *assetData); - Handle genericHandle = Handle(); + Handle genericHandle = Handle(handle); + typedHandleMap.get().emplace(assetId, genericHandle); + typedAssetIdMap.get().emplace(genericHandle, assetId); + return handle; + } + + template<> + Handle SHResourceManager::LoadOrGet(AssetID assetId) + { + /* Attempt to get existing loaded asset */ + auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); + if (typedHandleMap.get().contains(assetId)) + return Handle(typedHandleMap.get()[assetId]); + + /* Otherwise, we need to load it! */ + // Get system + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + + // Get SHMaterialSpec + Handle matSpec = LoadOrGet(assetId); + if (!matSpec) + return {}; + + // Create the material + auto handle = load(assetId, *matSpec); + Handle genericHandle = Handle(handle); typedHandleMap.get().emplace(assetId, genericHandle); typedAssetIdMap.get().emplace(genericHandle, assetId); return handle; } template - void SHResourceManager::Unload(Handle assetId) + void SHResourceManager::Unload(Handle asset) { // Check if it is an unsupported type if (!std::is_same_v && !std::is_same_v) @@ -71,14 +104,18 @@ namespace SHADE /* Attempt to get existing loaded asset */ auto [typedHandleMap, typedAssetIdMap] = getAssetHandleMap(); - if (typedHandleMap.get().contains(assetId)) + if (typedHandleMap.get().contains(asset)) { + // Remove from ResourceHub if SHMaterialSpec + if (std::is_same_v) + resourceHub.Free(asset); + // Dispose - Handle handle = typedHandleMap.get()[assetId]; - Handle typedHandle = static_cast>(handle); + Handle handle = typedHandleMap.get()[asset]; + auto typedHandle = static_cast>(handle); typedHandle.Free(); typedAssetIdMap.get().erase(handle); - typedHandleMap.get().erase(assetId); + typedHandleMap.get().erase(asset); } else { @@ -179,15 +216,20 @@ namespace SHADE shader->Reflect(); return shader; } + // Material Spec + else if constexpr (std::is_same_v) + { + // Get the data we need to construct + auto matSpec = resourceHub.Create(); + *matSpec = YAML::Node(assetData.data).as(); + return matSpec; + } // Materials else if constexpr (std::is_same_v) { - // Get the data we need to construct - SHMaterialSpec matSpec = YAML::Node(assetData.data).as(); - // Load shaders - auto vertexShader = SHResourceManager::LoadOrGet(matSpec.vertexShader); - auto fragShader = SHResourceManager::LoadOrGet(matSpec.fragShader); + auto vertexShader = SHResourceManager::LoadOrGet(assetData.vertexShader); + auto fragShader = SHResourceManager::LoadOrGet(assetData.fragShader); // Ensure that both shaders are present if (!(vertexShader && fragShader)) @@ -203,7 +245,7 @@ namespace SHADE SHLOG_ERROR("[SHResourceManager] Failed to load material as RenderPass could not be found."); return {}; } - auto subPass = renderPass->GetSubpass(matSpec.subpassName); + auto subPass = renderPass->GetSubpass(assetData.subpassName); if (!subPass) { SHLOG_ERROR("[SHResourceManager] Failed to load material as SubPass could not be found."); @@ -218,7 +260,7 @@ namespace SHADE for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) { const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); - const auto& PROP_NODE = matSpec.properties; + const auto& PROP_NODE = assetData.properties; if (PROP_NODE) { const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 2179d1cf..f2c4572a 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -20,9 +20,9 @@ namespace YAML { - using namespace SHADE; + using namespace SHADE; - template<> + template<> struct convert { static constexpr const char* x = "x"; @@ -172,17 +172,17 @@ namespace YAML switch (colliderType) { case SHCollider::Type::BOX: - { - if(node[HalfExtents].IsDefined()) - rhs.SetBoundingBox(node[HalfExtents].as()); - } - break; + { + if (node[HalfExtents].IsDefined()) + rhs.SetBoundingBox(node[HalfExtents].as()); + } + break; case SHCollider::Type::SPHERE: - { - if(node[Radius].IsDefined()) - rhs.SetBoundingSphere(node[Radius].as()); - } - break; + { + if (node[Radius].IsDefined()) + rhs.SetBoundingSphere(node[Radius].as()); + } + break; case SHCollider::Type::CAPSULE: break; default:; } @@ -194,7 +194,7 @@ namespace YAML rhs.SetDensity(node[Density].as()); if (node[PositionOffset].IsDefined()) rhs.SetPositionOffset(node[PositionOffset].as()); - + return true; } }; @@ -231,7 +231,7 @@ namespace YAML const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); if (!ok) return false; - + switch (colliderType) { case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; @@ -246,143 +246,84 @@ namespace YAML } }; - template<> - struct convert + template<> + struct convert + { + static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; + static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; + static constexpr std::string_view PROPS_YAML_TAG = "Properties"; + + static YAML::Node encode(SHMaterialSpec const& rhs) { - static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; - static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; - static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; - static constexpr std::string_view PROPS_YAML_TAG = "Properties"; + YAML::Node node; + node[VERT_SHADER_YAML_TAG.data()] = rhs.vertexShader; + node[FRAG_SHADER_YAML_TAG.data()] = rhs.fragShader; + node[SUBPASS_YAML_TAG.data()] = rhs.subpassName; + node[PROPS_YAML_TAG.data()] = rhs.properties; + return node; + } - static YAML::Node encode(SHMaterial const& rhs) - { - // Write Properties - YAML::Node propertiesNode; - Handle pipelineProperties = rhs.GetShaderBlockInterface(); - for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) - { - const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); - if (!VARIABLE) - break; - const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); - YAML::Node propNode; - switch (VARIABLE->type) - { - case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: - propNode = rhs.GetProperty(VARIABLE->offset); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::INT: - propNode = rhs.GetProperty(VARIABLE->offset); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: - propNode = rhs.GetProperty(VARIABLE->offset); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: - propNode = rhs.GetProperty(VARIABLE->offset); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: - propNode = rhs.GetProperty(VARIABLE->offset); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: - default: - continue; - break; - } - propertiesNode[VAR_NAME.data()] = propNode; - } - - // Get Shader Handles - const auto& SHADERS = rhs.GetPipeline()->GetPipelineLayout()->GetShaderModules(); - Handle vertexShader, fragShader; - for (const auto& shader : SHADERS) - { - const auto FLAG_BITS = shader->GetShaderStageFlagBits(); - if (FLAG_BITS & vk::ShaderStageFlagBits::eVertex) - vertexShader = shader; - else if (FLAG_BITS & vk::ShaderStageFlagBits::eFragment) - fragShader = shader; - } - - // Write Material - YAML::Node node; - - node[VERT_SHADER_YAML_TAG.data()] = SHResourceManager::GetAssetID(vertexShader).value_or(0); - node[FRAG_SHADER_YAML_TAG.data()] = SHResourceManager::GetAssetID(fragShader).value_or(0); - node[SUBPASS_YAML_TAG.data()] = rhs.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); - node[PROPS_YAML_TAG.data()] = propertiesNode; - - return node; - } - }; - - template<> - struct convert + static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) { - static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; - static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; - static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; - static constexpr std::string_view PROPS_YAML_TAG = "Properties"; + // Retrieve Shader Asset IDs + if (!node[VERT_SHADER_YAML_TAG.data()]) + return false; + rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); + if (!node[FRAG_SHADER_YAML_TAG.data()]) + return false; + rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); - static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) + // Retrieve Subpass + if (!node[SUBPASS_YAML_TAG.data()]) + return false; + rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); + + // Retrieve + if (!node[PROPS_YAML_TAG.data()]) + return false; + rhs.properties = node[PROPS_YAML_TAG.data()]; + + return true; + } + }; + + template<> + struct convert + { + static constexpr std::string_view MESH_YAML_TAG = "Mesh"; + static constexpr std::string_view MAT_YAML_TAG = "Material"; + + static YAML::Node encode(SHRenderable const& rhs) + { + YAML::Node node; + node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); + node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); + return node; + } + static bool decode(YAML::Node const& node, SHRenderable& rhs) + { + if (node[MESH_YAML_TAG.data()].IsDefined()) { - // Retrieve Shader Asset IDs - if (!node[VERT_SHADER_YAML_TAG.data()]) - return false; - rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); - if (!node[FRAG_SHADER_YAML_TAG.data()]) - return false; - rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); - - // Retrieve Subpass - if (!node[SUBPASS_YAML_TAG.data()]) - return false; - rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); - - // Retrieve - if (!node[PROPS_YAML_TAG.data()]) - return false; - rhs.properties = node[PROPS_YAML_TAG.data()]; - - return true; + rhs.SetMesh(SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as())); } - }; - - template<> - struct convert - { - static constexpr std::string_view MESH_YAML_TAG = "Mesh"; - static constexpr std::string_view MAT_YAML_TAG = "Material"; - - static YAML::Node encode(SHRenderable const& rhs) + if (node[MAT_YAML_TAG.data()].IsDefined()) + { + // Temporarily, use default material + auto gfxSystem = SHSystemManager::GetSystem(); + if (!gfxSystem) + return false; + Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); + if (!baseMat) { - YAML::Node node; - node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); - node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); - return node; + baseMat = gfxSystem->GetDefaultMaterial(); + SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); } - static bool decode(YAML::Node const& node, SHRenderable& rhs) - { - if (node[MESH_YAML_TAG.data()].IsDefined()) - { - rhs.SetMesh(SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as())); - } - if (node[MAT_YAML_TAG.data()].IsDefined()) - { - // Temporarily, use default material - auto gfxSystem = SHSystemManager::GetSystem(); - if (!gfxSystem) - return false; - Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); - if (!baseMat) - { - baseMat = gfxSystem->GetDefaultMaterial(); - SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); - } - rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); - } - return true; - } - }; + rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); + } + return true; + } + }; } namespace SHADE @@ -550,7 +491,7 @@ namespace SHADE auto properties = propType.get_properties(); for (auto const& property : properties) { - if(propertyNode[property.get_name().data()].IsDefined()) + if (propertyNode[property.get_name().data()].IsDefined()) InitializeProperty(component, property, propertyNode[property.get_name().data()]); } } @@ -564,7 +505,7 @@ namespace SHADE return; auto rttrType = rttr::type::get(); auto componentNode = componentsNode[rttrType.get_name().data()]; - if(!componentNode.IsDefined()) + if (!componentNode.IsDefined()) return; auto properties = rttrType.get_properties(); for (auto const& prop : properties) From ebc94225e76f1c0ff29b042f90c2342a52ac32c9 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 2 Nov 2022 17:04:31 +0800 Subject: [PATCH 649/793] Merge remote-tracking branch 'origin/main' into SP3-1-Rendering --- Assets/Shaders/DebugDraw_FS.glsl | 17 + Assets/Shaders/DebugDraw_FS.shshaderb | Bin 0 -> 673 bytes Assets/Shaders/DebugDraw_FS.shshaderb.shmeta | 3 + Assets/Shaders/DebugDraw_VS.glsl | 24 + Assets/Shaders/DebugDraw_VS.shshaderb | Bin 0 -> 1513 bytes Assets/Shaders/DebugDraw_VS.shshaderb.shmeta | 3 + Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 5501 -> 5501 bytes .../DeferredComposite_CS.shshaderb.shmeta | 2 +- Assets/Shaders/Kirsch_CS.shshaderb | Bin 5909 -> 5909 bytes Assets/Shaders/PureCopy_CS.shshaderb | Bin 1273 -> 1273 bytes Assets/Shaders/SSAOBlur_CS.shshaderb | Bin 4669 -> 4669 bytes Assets/Shaders/SSAO_CS.shshaderb | Bin 6125 -> 6125 bytes Assets/Shaders/TestCube_FS.shshaderb | Bin 2545 -> 2545 bytes Assets/Shaders/TestCube_FS.shshaderb.shmeta | 2 +- Assets/Shaders/TestCube_VS.shshaderb | Bin 3689 -> 3689 bytes Assets/Shaders/TestCube_VS.shshaderb.shmeta | 2 +- .../src/Application/SBApplication.cpp | 16 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 8 +- SHADE_Engine/premake5.lua | 2 +- .../src/Assets/Asset Types/SHShaderAsset.h | 11 +- .../Compilers/SHShaderSourceCompiler.cpp | 201 +- .../Libraries/Loaders/SHTextBasedLoader.h | 4 + SHADE_Engine/src/Assets/SHAssetMacros.h | 9 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 6 + .../src/Camera/SHCameraArmComponent.cpp | 68 + .../src/Camera/SHCameraArmComponent.h | 44 + SHADE_Engine/src/Camera/SHCameraComponent.cpp | 2 +- SHADE_Engine/src/Camera/SHCameraComponent.h | 4 +- SHADE_Engine/src/Camera/SHCameraDirector.cpp | 2 + SHADE_Engine/src/Camera/SHCameraDirector.h | 3 +- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 168 +- SHADE_Engine/src/Camera/SHCameraSystem.h | 20 +- .../ECS_Base/Managers/SHComponentManager.cpp | 13 + .../src/ECS_Base/Managers/SHEntityManager.cpp | 11 +- .../src/ECS_Base/Managers/SHEntityManager.h | 2 + .../src/ECS_Base/Managers/SHSystemManager.cpp | 2 +- .../src/Editor/DragDrop/SHDragDrop.hpp | 6 +- .../AssetBrowser/SHAssetBrowser.cpp | 160 +- .../AssetBrowser/SHAssetBrowser.h | 13 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 190 +- .../HierarchyPanel/SHHierarchyPanel.h | 6 +- .../Inspector/SHEditorComponentView.h | 12 + .../Inspector/SHEditorComponentView.hpp | 159 +- .../Inspector/SHEditorInspector.cpp | 39 +- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 20 +- .../EditorWindow/MenuBar/SHEditorMenuBar.h | 6 + .../ViewportWindow/SHEditorViewport.cpp | 89 +- .../ViewportWindow/SHEditorViewport.h | 3 +- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 5 +- SHADE_Engine/src/Editor/SHEditor.cpp | 6 +- .../src/Editor/{SHEditor.hpp => SHEditor.h} | 4 +- SHADE_Engine/src/Editor/SHEditorUI.cpp | 46 +- SHADE_Engine/src/Editor/SHEditorUI.h | 8 + SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 122 +- SHADE_Engine/src/Events/SHEventDefines.h | 3 + .../Graphics/Commands/SHVkCommandBuffer.cpp | 5 + .../src/Graphics/Commands/SHVkCommandBuffer.h | 1 + .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 11 +- .../MiddleEnd/Batching/SHSuperBatch.cpp | 6 +- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 202 + .../MiddleEnd/Interface/SHDebugDrawSystem.h | 159 + .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 48 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 111 +- .../MiddleEnd/Interface/SHGraphicsSystem.h | 32 +- .../Interface/SHGraphicsSystemInterface.cpp | 77 + .../Interface/SHGraphicsSystemInterface.h | 52 + .../MiddleEnd/Materials/SHMaterialSpec.h | 36 + .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 165 +- .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 65 +- .../Shaders/SHShaderModuleLibrary.cpp | 139 - .../MiddleEnd/Shaders/SHShaderModuleLibrary.h | 44 - .../src/Graphics/Pipeline/SHVkPipeline.h | 3 +- .../src/Graphics/Windowing/SHWindow.cpp | 41 +- .../src/Graphics/Windowing/SHWindow.h | 9 +- SHADE_Engine/src/Math/SHColour.cpp | 172 +- SHADE_Engine/src/Math/SHColour.h | 50 +- SHADE_Engine/src/Math/SHMath.h | 2 + .../Math/Transform/SHTransformComponent.cpp | 7 +- .../src/Math/Transform/SHTransformSystem.cpp | 6 +- SHADE_Engine/src/Math/Vector/SHVec4.cpp | 1 + SHADE_Engine/src/Math/Vector/SHVec4.h | 2 + .../Components/SHColliderComponent.cpp | 10 +- .../Physics/Components/SHColliderComponent.h | 1 + .../Components/SHRigidBodyComponent.cpp | 317 +- .../Physics/Components/SHRigidBodyComponent.h | 31 +- SHADE_Engine/src/Physics/SHCollider.cpp | 15 +- SHADE_Engine/src/Physics/SHCollider.h | 5 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 106 +- SHADE_Engine/src/Physics/SHPhysicsObject.h | 1 - SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 276 +- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 91 +- SHADE_Engine/src/Physics/SHPhysicsSystem.hpp | 84 + .../src/Physics/SHPhysicsSystemInterface.cpp | 65 + .../src/Physics/SHPhysicsSystemInterface.h | 46 + SHADE_Engine/src/Physics/SHPhysicsUtils.cpp | 93 + SHADE_Engine/src/Physics/SHPhysicsUtils.h | 116 + .../src/Reflection/SHReflectionMetadata.h | 1 + .../src/Resource/SHResourceManager.cpp | 17 +- SHADE_Engine/src/Resource/SHResourceManager.h | 31 +- .../src/Resource/SHResourceManager.hpp | 206 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 11 +- SHADE_Engine/src/Scripting/SHScriptEngine.h | 6 + .../src/Scripting/SHScriptEngineRoutines.cpp | 2 +- .../Serialization/Prefab/SHPrefabManager.cpp | 56 + .../Serialization/Prefab/SHPrefabManager.h | 28 + .../src/Serialization/SHSerialization.cpp | 107 +- .../Serialization/SHSerializationHelper.hpp | 432 +- SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp | 71 + SHADE_Engine/src/Tools/Dialog/SHWinDialog.h | 36 + SHADE_Engine/src/Tools/SHDebugDraw.cpp | 73 + SHADE_Engine/src/Tools/SHDebugDraw.h | 101 + SHADE_Engine/src/Tools/SHLog.h | 2 +- SHADE_Managed/premake5.lua | 10 +- SHADE_Managed/src/Components/Camera.cxx | 127 + SHADE_Managed/src/Components/Camera.hxx | 70 + SHADE_Managed/src/Components/CameraArm.cxx | 51 + SHADE_Managed/src/Components/CameraArm.hxx | 40 + SHADE_Managed/src/Components/Component.cxx | 5 + SHADE_Managed/src/Components/Component.hxx | 9 + SHADE_Managed/src/Components/RigidBody.cxx | 8 + SHADE_Managed/src/Components/RigidBody.hxx | 5 + SHADE_Managed/src/Components/Transform.cxx | 26 - SHADE_Managed/src/Components/Transform.hxx | 24 - SHADE_Managed/src/Editor/Editor.cxx | 15 +- SHADE_Managed/src/Engine/Application.cxx | 71 + SHADE_Managed/src/Engine/Application.hxx | 77 + SHADE_Managed/src/Engine/ECS.cxx | 4 + SHADE_Managed/src/Engine/GameObject.cxx | 50 +- SHADE_Managed/src/Engine/GameObject.hxx | 19 +- SHADE_Managed/src/Engine/Time.cxx | 13 + SHADE_Managed/src/Engine/Time.hxx | 23 +- SHADE_Managed/src/Input/Input.cxx | 7 + SHADE_Managed/src/Input/Input.hxx | 154 +- SHADE_Managed/src/Math/Vector2.cxx | 16 + SHADE_Managed/src/Math/Vector2.hxx | 16 + SHADE_Managed/src/Math/Vector3.cxx | 18 + SHADE_Managed/src/Math/Vector3.hxx | 16 + SHADE_Managed/src/Physics/CollisionInfo.cxx | 36 + SHADE_Managed/src/Physics/CollisionInfo.hxx | 66 + SHADE_Managed/src/Scripts/Script.cxx | 81 +- SHADE_Managed/src/Scripts/Script.hxx | 92 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 132 +- SHADE_Managed/src/Scripts/ScriptStore.hxx | 4 + .../src/Serialisation/ReflectionUtilities.cxx | 10 + TempScriptsFolder/CameraControl.cs | 22 + TempScriptsFolder/PhysicsTest.cs | 31 +- TempScriptsFolder/PrintWhenActive.cs | 11 + TempScriptsFolder/ThirdPersonCamera.cs | 55 + TempShaderFolder/DeferredCompositeCs.glsl | 83 - TempShaderFolder/DeferredCompositeCs.spv | Bin 4656 -> 0 bytes TempShaderFolder/TestCubeFs.spv | Bin 2536 -> 0 bytes TempShaderFolder/TestCubeVs.spv | Bin 3296 -> 0 bytes bin/Debug/SHADE_CSharp.xml | 1029 +++ bin/Debug/SHADE_Managed.xml | 6250 +++++++++++++++++ bin/Release/SHADE_CSharp.xml | 1029 +++ bin/Release/SHADE_Managed.xml | 6250 +++++++++++++++++ 156 files changed, 20008 insertions(+), 1476 deletions(-) create mode 100644 Assets/Shaders/DebugDraw_FS.glsl create mode 100644 Assets/Shaders/DebugDraw_FS.shshaderb create mode 100644 Assets/Shaders/DebugDraw_FS.shshaderb.shmeta create mode 100644 Assets/Shaders/DebugDraw_VS.glsl create mode 100644 Assets/Shaders/DebugDraw_VS.shshaderb create mode 100644 Assets/Shaders/DebugDraw_VS.shshaderb.shmeta create mode 100644 SHADE_Engine/src/Camera/SHCameraArmComponent.cpp create mode 100644 SHADE_Engine/src/Camera/SHCameraArmComponent.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h rename SHADE_Engine/src/Editor/{SHEditor.hpp => SHEditor.h} (98%) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h delete mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp delete mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.hpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h create mode 100644 SHADE_Engine/src/Physics/SHPhysicsUtils.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsUtils.h create mode 100644 SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp create mode 100644 SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h create mode 100644 SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp create mode 100644 SHADE_Engine/src/Tools/Dialog/SHWinDialog.h create mode 100644 SHADE_Engine/src/Tools/SHDebugDraw.cpp create mode 100644 SHADE_Engine/src/Tools/SHDebugDraw.h create mode 100644 SHADE_Managed/src/Components/Camera.cxx create mode 100644 SHADE_Managed/src/Components/Camera.hxx create mode 100644 SHADE_Managed/src/Components/CameraArm.cxx create mode 100644 SHADE_Managed/src/Components/CameraArm.hxx create mode 100644 SHADE_Managed/src/Engine/Application.cxx create mode 100644 SHADE_Managed/src/Engine/Application.hxx create mode 100644 SHADE_Managed/src/Physics/CollisionInfo.cxx create mode 100644 SHADE_Managed/src/Physics/CollisionInfo.hxx create mode 100644 TempScriptsFolder/CameraControl.cs create mode 100644 TempScriptsFolder/PrintWhenActive.cs create mode 100644 TempScriptsFolder/ThirdPersonCamera.cs delete mode 100644 TempShaderFolder/DeferredCompositeCs.glsl delete mode 100644 TempShaderFolder/DeferredCompositeCs.spv delete mode 100644 TempShaderFolder/TestCubeFs.spv delete mode 100644 TempShaderFolder/TestCubeVs.spv create mode 100644 bin/Debug/SHADE_CSharp.xml create mode 100644 bin/Debug/SHADE_Managed.xml create mode 100644 bin/Release/SHADE_CSharp.xml create mode 100644 bin/Release/SHADE_Managed.xml diff --git a/Assets/Shaders/DebugDraw_FS.glsl b/Assets/Shaders/DebugDraw_FS.glsl new file mode 100644 index 00000000..266f8ad4 --- /dev/null +++ b/Assets/Shaders/DebugDraw_FS.glsl @@ -0,0 +1,17 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable +#extension GL_EXT_nonuniform_qualifier : require + +layout(location = 0) in struct +{ + vec4 vertColor; +} In; + + +layout(location = 0) out vec4 outColor; + +void main() +{ + outColor = In.vertColor; +} \ No newline at end of file diff --git a/Assets/Shaders/DebugDraw_FS.shshaderb b/Assets/Shaders/DebugDraw_FS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..7b59688597046295970cf20f6afdc8f52cb72e81 GIT binary patch literal 673 zcmY*W%Sr=55Nz`{F)u~Eg@{KX1c@SuLX@xw3jy`uZCH~@9Np}$`v~|aeve<}MX+kK zkvP!PQ`OboGd-=(oTMwCJ1&cCNmc5yyP~8mIWQtMDW%@BAM9QfPkV#2J|zvwr%Gy? zQkDWdZQ&S?fo<3htOXr;G{7m3sv=)VDnMb`YIuL6A{{uP6KfT{I8z-e|M^u<;^@By zA>+-J>v;3TnQJvT?FY`}4RtE4GkSVdp6?}|nfc*Dy(f-qW=4mIR~fg)W6K_?Nf4+g z{&2N&ji=Srgy>|Jn!VCGna+3TBS*XZ4b+Q~{#@2Wb)8f32(#c7BKESyIt_wSao^vJU-MZK-@cbF_ml&r1ts&^F!I;P;5~_dQ1t@#3!m>%egFUf literal 0 HcmV?d00001 diff --git a/Assets/Shaders/DebugDraw_FS.shshaderb.shmeta b/Assets/Shaders/DebugDraw_FS.shshaderb.shmeta new file mode 100644 index 00000000..58f62b44 --- /dev/null +++ b/Assets/Shaders/DebugDraw_FS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: DebugDraw_FS +ID: 36671027 +Type: 2 diff --git a/Assets/Shaders/DebugDraw_VS.glsl b/Assets/Shaders/DebugDraw_VS.glsl new file mode 100644 index 00000000..cb0886d1 --- /dev/null +++ b/Assets/Shaders/DebugDraw_VS.glsl @@ -0,0 +1,24 @@ +#version 450 +#extension GL_KHR_vulkan_glsl : enable + +layout(location = 0) in vec4 aVertexPos; +layout(location = 1) in vec4 aVertColor; + + +layout(location = 0) out struct +{ + vec4 vertColor; // location 0 + +} Out; + +layout(set = 2, binding = 0) uniform CameraData +{ + vec4 position; + mat4 vpMat; +} cameraData; + +void main() +{ + gl_Position = cameraData.vpMat * vec4 (aVertexPos.xyz, 1.0f); + Out.vertColor = aVertColor; +} \ No newline at end of file diff --git a/Assets/Shaders/DebugDraw_VS.shshaderb b/Assets/Shaders/DebugDraw_VS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..2d8cd0edd9ff60919d7c1931f06ee0ea6390bff0 GIT binary patch literal 1513 zcmZ9L-)a*<6vn4XH?6I0t+jvD8k0t?S}0zq2%;jXY%d~dDR{dqn?(k;n~-dRdgUwl zN(;o82j)6VA>#-}&bJo5{kTz_?Yfb(V}-Fe_%w9F>sSG&Lc{teS?~!`?;j zcv1|GU%q+)W!=;r6V8UY;q*m)FJqfytV!-l4kb?|b^U7Ef9t@aGKIY;?DxaorzjbX zqDk>ROQX!@X*96oG%4&Xg||G%vw4zD2lIqLjQN~_YF$;1uUT}Kj=!YiBK;;)Xo;ia z8%}Ithq=%t$EOE}+q}52Ka`m>rH`8B>t=RzVkbqMC+U@s3E-P%*_AI)pY+ZO^xM?l zjW5%2d=eLNSqm6z zhGXGyxQqU@kRG@@aWN{wsW4{8^1H{V35?xi%ms`YcnlqkI|=1Mhlk(y+>y;X6$^}* zfwM~vHk@16Fg;L*5tnns4Hbj=99*;8vRU|%IU diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb index 6bb4abcd8018cac584ecc8f8b59b86984eb528d7..69f7a44f1a9f7144e912c70a533a67027a7e737b 100644 GIT binary patch delta 10 RcmaE>|5l$-VI$)kaR3|5l%oX(QtsaR3-<1MvU= diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb index b0113dc7799a94fb1c40720187c05a9b26a2617c..95b4f62ae89c1bd3dc23f684757a7298c60833a3 100644 GIT binary patch delta 10 Rcmew;{85-uU?bxPP5>7&1H}LU delta 10 Rcmew;{85;ZaU6?1GWGF diff --git a/Assets/Shaders/TestCube_FS.shshaderb.shmeta b/Assets/Shaders/TestCube_FS.shshaderb.shmeta index 42f270af..fbe098b1 100644 --- a/Assets/Shaders/TestCube_FS.shshaderb.shmeta +++ b/Assets/Shaders/TestCube_FS.shshaderb.shmeta @@ -1,3 +1,3 @@ Name: TestCube_FS -ID: 37450402 +ID: 46377769 Type: 2 diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb index fb2965a83900e01b2591230c1de83828ad72c658..fb282b4df95c458e637710753ab4b5beb88c23e2 100644 GIT binary patch delta 10 RcmaDU^HPS9aU){}9{?5H12q5u delta 10 RcmaDU^HPS9VIyM(9{?5C12g~t diff --git a/Assets/Shaders/TestCube_VS.shshaderb.shmeta b/Assets/Shaders/TestCube_VS.shshaderb.shmeta index b133437b..5c9f895f 100644 --- a/Assets/Shaders/TestCube_VS.shshaderb.shmeta +++ b/Assets/Shaders/TestCube_VS.shshaderb.shmeta @@ -1,3 +1,3 @@ Name: TestCube_VS -ID: 41688429 +ID: 39210065 Type: 2 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index de548060..b865f028 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -4,7 +4,7 @@ //#define SHEDITOR #ifdef SHEDITOR -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" //#include "Scenes/SBEditorScene.h" #endif // SHEDITOR @@ -31,6 +31,7 @@ #include "FRC/SHFramerateController.h" #include "AudioSystem/SHAudioSystem.h" #include "Camera/SHCameraSystem.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" // Components #include "Graphics/MiddleEnd/Interface/SHRenderable.h" @@ -42,6 +43,7 @@ #include "Assets/SHAssetManager.h" #include "Tools/SHLogger.h" +#include "Tools/SHDebugDraw.h" using namespace SHADE; @@ -69,6 +71,7 @@ namespace Sandbox SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); #ifdef SHEDITOR SDL_Init(SDL_INIT_VIDEO); @@ -90,11 +93,12 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); - SHSystemManager::RegisterRoutine(); + //SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); #ifdef SHEDITOR @@ -108,13 +112,10 @@ namespace Sandbox SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); - SHComponentManager::CreateComponentSparseSet(); + //SHComponentManager::CreateComponentSparseSet(); SHAssetManager::Load(); - auto id = SHFamilyID::GetID(); - auto id2 = SHFamilyID::GetID(); - auto id3 = SHFamilyID::GetID(); SHSystemManager::RegisterRoutine(); @@ -126,6 +127,9 @@ namespace Sandbox SHSceneManager::InitSceneManager("TestScene"); SHFrameRateController::UpdateFRC(); + + // Link up SHDebugDraw + SHDebugDraw::Init(SHSystemManager::GetSystem()); } void SBApplication::Update(void) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 23b57dfc..a5b3b546 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -16,7 +16,10 @@ #include "Assets/SHAssetManager.h" #include "Camera/SHCameraComponent.h" +#include "Math/SHColour.h" #include "Resource/SHResourceManager.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "Tools/SHDebugDraw.h" using namespace SHADE; @@ -128,7 +131,6 @@ namespace Sandbox floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); auto* floorBox = floorCollider.AddBoundingBox(); - floorBox->SetHalfExtents(floorTransform.GetWorldScale() * 0.5f); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); @@ -160,7 +162,7 @@ namespace Sandbox SHComponentManager::RemoveComponent (0); auto ambientLight = SHEntityManager::CreateEntity(); - SHComponentManager::GetComponent(ambientLight)->SetColor(SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); + SHComponentManager::GetComponent(ambientLight)->SetColor(SHColour::WHITE); SHComponentManager::GetComponent(ambientLight)->SetStrength(0.25f); SHComponentManager::GetComponent(ambientLight)->SetType(SH_LIGHT_TYPE::AMBIENT); } @@ -187,6 +189,8 @@ namespace Sandbox SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); scriptEngine->RemoveAllScripts(testObj); } + + SHDebugDraw::Cube(SHColour::CRIMSON, SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 1.0f, 1.0f)); } void SBTestScene::Render() diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 18920194..bc1f6a03 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -8,7 +8,7 @@ project "SHADE_Engine" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" staticruntime "off" - + buildoptions{"/bigobj"} files { "%{prj.location}/src/**.h", diff --git a/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h index adcd215a..d71c1bb3 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h @@ -10,6 +10,7 @@ *****************************************************************************/ #pragma once +#include #include "SHAssetData.h" #include "SH_API.h" #include @@ -17,12 +18,14 @@ namespace SHADE { + //! Tighter control over types of shaders. Maps directly to their + //! equivalent vk::ShaderStageFlagBits. enum class SH_SHADER_TYPE : uint8_t { - VERTEX, - FRAGMENT, - COMPUTE, - INAVLID_TYPE + VERTEX = static_cast(vk::ShaderStageFlagBits::eVertex), + FRAGMENT = static_cast(vk::ShaderStageFlagBits::eFragment), + COMPUTE = static_cast(vk::ShaderStageFlagBits::eCompute), + INAVLID_TYPE = std::numeric_limits::max() }; struct SH_API SHShaderAsset : SHAssetData diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp index 329e34e9..fd1f6d8a 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp @@ -19,144 +19,145 @@ namespace SHADE { - std::string SHShaderSourceCompiler::CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept - { - std::string newPath{ path.string() }; + std::string SHShaderSourceCompiler::CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept + { + std::string newPath{ path.string() }; newPath = newPath.substr(0, newPath.find_last_of('.')); newPath += SHADER_BUILT_IN_EXTENSION.data(); - std::ofstream file{ newPath, std::ios::binary | std::ios::out | std::ios::trunc }; + std::ofstream file{ newPath, std::ios::binary | std::ios::out | std::ios::trunc }; - file.write( - reinterpret_cast(& data.shaderType), sizeof(uint8_t) - ); + file.write( + reinterpret_cast(& data.shaderType), sizeof(uint8_t) + ); - size_t const byteCount = sizeof(uint32_t) * data.spirvBinary.size(); + size_t const byteCount = sizeof(uint32_t) * data.spirvBinary.size(); - file.write( - reinterpret_cast(&byteCount), sizeof(size_t) - ); + file.write( + reinterpret_cast(&byteCount), sizeof(size_t) + ); - file.write( - reinterpret_cast(data.spirvBinary.data()), byteCount - ); + file.write( + reinterpret_cast(data.spirvBinary.data()), byteCount + ); - file.close(); + file.close(); - return newPath; - } + return newPath; + } - SHShaderAsset const* SHShaderSourceCompiler::CompileShaderSourceToMemory(std::string const& data, std::string const& name, SH_SHADER_TYPE type) noexcept - { - // shaderc compiler - shaderc::Compiler compiler; - shaderc::CompileOptions options; + SHShaderAsset const* SHShaderSourceCompiler::CompileShaderSourceToMemory(std::string const& data, std::string const& name, SH_SHADER_TYPE type) noexcept + { + // shaderc compiler + shaderc::Compiler compiler; + shaderc::CompileOptions options; - options.AddMacroDefinition("MY_DEFINE", "1"); + options.AddMacroDefinition("MY_DEFINE", "1"); - //TODO: Check if we need optimisation levels when compiling into spirv - // Set optimization levels - //if (opLevel != shaderc_optimization_level_zero) - // options.SetOptimizationLevel(opLevel); + //TODO: Check if we need optimisation levels when compiling into spirv + // Set optimization levels + //if (opLevel != shaderc_optimization_level_zero) + // options.SetOptimizationLevel(opLevel); - // Attempt to get the shaderc equivalent shader stage - shaderc_shader_kind shaderKind; - switch (type) - { - case SH_SHADER_TYPE::VERTEX: - shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; - break; - case SH_SHADER_TYPE::FRAGMENT: - shaderKind = shaderc_shader_kind::shaderc_glsl_fragment_shader; - break; - case SH_SHADER_TYPE::COMPUTE: - shaderKind = shaderc_shader_kind::shaderc_glsl_compute_shader; - break; - default: - shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; - break; - } + // Attempt to get the shaderc equivalent shader stage + shaderc_shader_kind shaderKind; + switch (type) + { + case SH_SHADER_TYPE::VERTEX: + shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; + break; + case SH_SHADER_TYPE::FRAGMENT: + shaderKind = shaderc_shader_kind::shaderc_glsl_fragment_shader; + break; + case SH_SHADER_TYPE::COMPUTE: + shaderKind = shaderc_shader_kind::shaderc_glsl_compute_shader; + break; + default: + shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; + break; + } - // Compile the shader and get the result - shaderc::SpvCompilationResult compileResult = compiler.CompileGlslToSpv(data, shaderKind, name.c_str(), options); + // Compile the shader and get the result + shaderc::SpvCompilationResult compileResult = compiler.CompileGlslToSpv(data, shaderKind, name.c_str(), options); - if (compileResult.GetCompilationStatus() != shaderc_compilation_status_success) - { - SHLOG_ERROR("Shaderc failed to compile GLSL shader to binary | " + compileResult.GetErrorMessage()); - return nullptr; - } + if (compileResult.GetCompilationStatus() != shaderc_compilation_status_success) + { + SHLOG_ERROR("Shaderc failed to compile GLSL shader to binary | " + compileResult.GetErrorMessage()); + return nullptr; + } - auto result = new SHShaderAsset(); - result->spirvBinary.resize(compileResult.end() - compileResult.begin()); + auto result = new SHShaderAsset(); + result->spirvBinary.resize(compileResult.end() - compileResult.begin()); - std::ranges::copy(compileResult.begin(), compileResult.end(), result->spirvBinary.data()); + std::ranges::copy(compileResult.begin(), compileResult.end(), result->spirvBinary.data()); result->name = name; result->shaderType = type; - return result; - } + return result; + } - SH_SHADER_TYPE SHShaderSourceCompiler::GetShaderTypeFromFilename(std::string name) noexcept - { - for (auto i { 0}; i < SHADER_TYPE_MAX_COUNT; ++i) - { - if (name.find(SHADER_IDENTIFIERS[i].data()) != std::string::npos) - { - return static_cast(i); - } - } + SH_SHADER_TYPE SHShaderSourceCompiler::GetShaderTypeFromFilename(std::string name) noexcept + { + for (auto i { 0 }; i < SHADER_TYPE_MAX_COUNT; ++i) + { + const auto& [SHADER_SUFFIX, SHADER_TYPE] = SHADER_IDENTIFIERS[i]; + if (name.find(SHADER_SUFFIX.data()) != std::string::npos) + { + return SHADER_TYPE; + } + } - return SH_SHADER_TYPE::INAVLID_TYPE; - } + return SH_SHADER_TYPE::INAVLID_TYPE; + } std::optional SHShaderSourceCompiler::LoadAndCompileShader(AssetPath path) noexcept - { - auto type = GetShaderTypeFromFilename(path.filename().string()); + { + auto type = GetShaderTypeFromFilename(path.filename().string()); - if (type == SH_SHADER_TYPE::INAVLID_TYPE) - { - SHLOG_ERROR("Invalid filename for shaders, follow suffix in SHAssetMacros.h: {}", path.string()); - return {}; - } + if (type == SH_SHADER_TYPE::INAVLID_TYPE) + { + SHLOG_ERROR("Invalid filename for shaders, follow suffix in SHAssetMacros.h: {}", path.string()); + return {}; + } path.make_preferred(); - std::ifstream file{ path.string(), std::ios::in }; + std::ifstream file{ path.string(), std::ios::in }; - if (file.is_open()) - { - std::stringstream stream; + if (file.is_open()) + { + std::stringstream stream; - stream << file.rdbuf(); + stream << file.rdbuf(); - std::string const content = stream.str(); + std::string const content = stream.str(); - auto data = CompileShaderSourceToMemory(content, path.filename().string(), type); + auto data = CompileShaderSourceToMemory(content, path.filename().string(), type); - if (data == nullptr) - { - return{}; - } + if (data == nullptr) + { + return{}; + } - return CompileShaderSourceToBinary(path, *data); - } + return CompileShaderSourceToBinary(path, *data); + } - SHLOG_ERROR("Unable to open shader file: {}", path.string()); + SHLOG_ERROR("Unable to open shader file: {}", path.string()); - return {}; - } + return {}; + } - std::optional SHShaderSourceCompiler::CompileShaderFromString - (std::string const& string, AssetPath path, SH_SHADER_TYPE type) noexcept - { - auto const data = CompileShaderSourceToMemory(string, path.filename().string(), type); + std::optional SHShaderSourceCompiler::CompileShaderFromString + (std::string const& string, AssetPath path, SH_SHADER_TYPE type) noexcept + { + auto const data = CompileShaderSourceToMemory(string, path.filename().string(), type); - if (data == nullptr) - { - return{}; - } + if (data == nullptr) + { + return{}; + } - return CompileShaderSourceToBinary(path, *data); - } + return CompileShaderSourceToBinary(path, *data); + } } diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h index 80771058..b74c6c94 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextBasedLoader.h @@ -11,6 +11,10 @@ #pragma once #include "SHAssetLoader.h" +#include "Assets/Asset Types/SHPrefabAsset.h" +#include "Assets/Asset Types/SHSceneAsset.h" +#include "Assets/Asset Types/SHMaterialAsset.h" + namespace SHADE { struct SHTextBasedLoader : SHAssetLoader diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index a21a9840..3376a2d5 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -13,6 +13,7 @@ #include #include #include +#include "Asset Types/SHShaderAsset.h" // FMOD Fwd Declare namespace FMOD @@ -113,10 +114,10 @@ constexpr std::string_view VERTEX_SHADER{ "_VS" }; constexpr std::string_view FRAGMENT_SHADER{ "_FS" }; constexpr std::string_view COMPUTER_SHADER{ "_CS" }; -constexpr std::string_view SHADER_IDENTIFIERS[] = { - VERTEX_SHADER, - FRAGMENT_SHADER, - COMPUTER_SHADER +constexpr std::pair SHADER_IDENTIFIERS[] = { + std::make_pair(VERTEX_SHADER, SHADE::SH_SHADER_TYPE::VERTEX), + std::make_pair(FRAGMENT_SHADER, SHADE::SH_SHADER_TYPE::FRAGMENT), + std::make_pair(COMPUTER_SHADER, SHADE::SH_SHADER_TYPE::COMPUTE) }; constexpr size_t SHADER_TYPE_MAX_COUNT{ 3 }; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 682eb9ec..4897fc42 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -151,19 +151,23 @@ namespace SHADE ****************************************************************************/ AssetID SHAssetManager::CreateNewAsset(AssetType type, AssetName name) noexcept { + SHAssetData* data = nullptr; std::string newPath{ ASSET_ROOT }; switch (type) { case AssetType::PREFAB: newPath += PREFAB_FOLDER; + data = new SHPrefabAsset(); break; case AssetType::SCENE: newPath += SCENE_FOLDER; + data = new SHSceneAsset(); break; case AssetType::MATERIAL: newPath += MATERIAL_FOLDER; + data = new SHMaterialAsset(); break; default: @@ -189,6 +193,8 @@ namespace SHADE ) }); + assetData.emplace(id, data); + return id; } diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp new file mode 100644 index 00000000..9cb221ff --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp @@ -0,0 +1,68 @@ +#include "SHpch.h" +#include "SHCameraArmComponent.h" + + + +namespace SHADE +{ + + SHCameraArmComponent::SHCameraArmComponent() + :pitch(0.0f), yaw(0.0f), armLength(1.0f),offset(), dirty(true), lookAtCameraOrigin(true) + { + + } + + + SHVec3 const& SHCameraArmComponent::GetOffset() const noexcept + { + return offset; + } + + float SHCameraArmComponent::GetPitch() const noexcept + { + return pitch; + } + + float SHCameraArmComponent::GetYaw() const noexcept + { + return yaw; + } + + float SHCameraArmComponent::GetArmLength() const noexcept + { + return armLength; + } + + void SHCameraArmComponent::SetPitch(float pitch) noexcept + { + this->pitch = pitch; + dirty = true; + } + + void SHCameraArmComponent::SetYaw(float yaw) noexcept + { + this->yaw = yaw; + dirty = true; + } + + void SHCameraArmComponent::SetArmLength(float length) noexcept + { + this->armLength = length; + dirty = true; + } + +}//namespace SHADE + + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + + registration::class_("Camera Arm Component") + .property("Arm Pitch", &SHCameraArmComponent::GetPitch, &SHCameraArmComponent::SetPitch) + .property("Arm Yaw", &SHCameraArmComponent::GetYaw, &SHCameraArmComponent::SetYaw) + .property("Arm Length", &SHCameraArmComponent::GetArmLength, &SHCameraArmComponent::SetArmLength) + .property("Look At Camera Origin", &SHCameraArmComponent::lookAtCameraOrigin); + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.h b/SHADE_Engine/src/Camera/SHCameraArmComponent.h new file mode 100644 index 00000000..2b81a808 --- /dev/null +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.h @@ -0,0 +1,44 @@ +#pragma once + + +#include +#include "ECS_Base/Components/SHComponent.h" +#include "Math/SHMatrix.h" +#include "SH_API.h" + +namespace SHADE +{ + class SH_API SHCameraArmComponent final: public SHComponent + { + private: + float pitch; + float yaw; + float armLength; + + bool dirty; + SHVec3 offset; + + public: + friend class SHCameraSystem; + SHCameraArmComponent(); + virtual ~SHCameraArmComponent() = default; + + bool lookAtCameraOrigin; + //Getters + //SHMatrix const& GetMatrix() const noexcept; + SHVec3 const& GetOffset() const noexcept; + float GetPitch() const noexcept; + float GetYaw() const noexcept; + float GetArmLength() const noexcept; + + //Setters + void SetPitch(float pitch) noexcept; + void SetYaw(float yaw) noexcept; + void SetArmLength(float length) noexcept; + + protected: + + + }; + +}//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 31afe2ac..ac451df5 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -13,7 +13,7 @@ namespace SHADE , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) , perspProj(true), dirtyView(true), dirtyProj(true) , viewMatrix(), projMatrix() - , position() + , position(), offset() { ComponentFamily::GetID(); } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index f5e08af4..b778b8fa 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -33,7 +33,7 @@ namespace SHADE SHVec3 position; bool perspProj; - + SHVec3 offset; @@ -41,7 +41,7 @@ namespace SHADE friend class SHCameraSystem; SHCameraComponent(); - ~SHCameraComponent(); + virtual ~SHCameraComponent(); //Getters and setters. diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp index 559897c0..98341098 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.cpp +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -1,6 +1,7 @@ #include "SHpch.h" #include "SHCameraDirector.h" #include "SHCameraComponent.h" +#include "SHCameraArmComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/SHECSMacros.h" #include "ECS_Base/Managers/SHEntityManager.h" @@ -48,6 +49,7 @@ namespace SHADE viewMatrix = camComponent->GetViewMatrix(); projMatrix = camComponent->GetProjMatrix(); } + } void SHCameraDirector::SetMainCamera(SHCameraComponent& camera) noexcept diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h index 5d09788b..6d5404c5 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.h +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -21,6 +21,7 @@ namespace SHADE EntityID mainCameraEID; EntityID transitionCameraEID; + SHMatrix GetViewMatrix() const noexcept; SHMatrix GetProjMatrix() const noexcept; @@ -35,7 +36,7 @@ namespace SHADE protected: SHMatrix viewMatrix; SHMatrix projMatrix; - + }; typedef Handle DirectorHandle; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 609805f8..d5bd414d 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -1,10 +1,12 @@ #include "SHpch.h" #include "SHCameraSystem.h" +#include "SHCameraArmComponent.h" #include "Math/SHMathHelpers.h" #include "Input/SHInputManager.h" #include "Math/Vector/SHVec2.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Transform/SHTransformComponent.h" +#include namespace SHADE @@ -59,6 +61,7 @@ namespace SHADE } UpdateCameraComponent(editorCamera); + } void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept { @@ -112,6 +115,8 @@ namespace SHADE //std::cout << "Camera position: " << camera.position.x << " " << camera.position.y << std::endl; system->UpdateCameraComponent(system->editorCamera); + + system->DecomposeViewMatrix(camera.viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position); } void SHCameraSystem::Init(void) @@ -121,6 +126,9 @@ namespace SHADE editorCamera.SetYaw(0.0f); editorCamera.SetRoll(0.0f); editorCamera.movementSpeed = 2.0f; + + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); } @@ -134,6 +142,26 @@ namespace SHADE return &editorCamera; } + void SHCameraSystem::UpdatePivotArmComponent(SHCameraArmComponent& pivot) noexcept + { + if (pivot.dirty) + { + + SHVec3 offset{ 0.0f,0.0f, pivot.GetArmLength() }; + offset = SHVec3::RotateX(offset, -(SHMath::DegreesToRadians(pivot.GetPitch()))); + offset = SHVec3::RotateY(offset, (SHMath::DegreesToRadians(pivot.GetYaw()))); + + + //pivot.rtMatrix = SHMatrix::RotateX(SHMath::DegreesToRadians(pivot.GetPitch())) + // * SHMatrix::RotateY(SHMath::DegreesToRadians(pivot.GetYaw())) + // * SHMatrix::Translate(SHVec3(0.0f , 0.0f, pivot.GetArmLength())); + + pivot.offset = offset; + // pivot.rtMatrix = SHMatrix::Inverse(pivot.rtMatrix); + } + } + + void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept { if (SHComponentManager::HasComponent(camera.GetEID()) == true && &camera != &editorCamera) @@ -151,6 +179,15 @@ namespace SHADE if (camera.dirtyView) { + camera.offset = SHVec3{ 0.0f }; + if (SHComponentManager::HasComponent(camera.GetEID())) + { + auto arm = SHComponentManager::GetComponent(camera.GetEID()); + camera.offset = arm->GetOffset(); + if(arm->lookAtCameraOrigin) + CameraLookAt(camera, camera.position); + } + SHVec3 view, right, UP; @@ -171,9 +208,12 @@ namespace SHADE camera.viewMatrix(2, 1) = view[1]; camera.viewMatrix(2, 2) = view[2]; - camera.viewMatrix(0, 3) = -right.Dot(camera.position); - camera.viewMatrix(1, 3) = -UP.Dot(camera.position); - camera.viewMatrix(2, 3) = -view.Dot(camera.position); + camera.viewMatrix(0, 3) = -right.Dot(camera.position + camera.offset); + camera.viewMatrix(1, 3) = -UP.Dot(camera.position + camera.offset); + camera.viewMatrix(2, 3) = -view.Dot(camera.position + camera.offset); + + + camera.dirtyView = false; } @@ -221,6 +261,8 @@ namespace SHADE SHVec3 up = { 0.0f,1.0f,0.0f }; + + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); target += camera.position; @@ -241,6 +283,13 @@ namespace SHADE { SHCameraSystem* system = static_cast(GetSystem()); auto& dense = SHComponentManager::GetDense(); + auto& pivotDense = SHComponentManager::GetDense(); + + for (auto& pivot : pivotDense) + { + system->UpdatePivotArmComponent(pivot); + } + for (auto& cam : dense) { system->UpdateCameraComponent(cam); @@ -274,18 +323,115 @@ namespace SHADE } void SHCameraSystem::ClampCameraRotation(SHCameraComponent& camera) noexcept { + constexpr float clampVal = 85.0f; + if (camera.pitch > clampVal) + camera.SetPitch(clampVal); + if (camera.pitch < -clampVal) + camera.SetPitch(-clampVal); + if (camera.roll > clampVal) + camera.SetRoll(clampVal); + if (camera.roll < -clampVal) + camera.SetRoll(-clampVal); - if (camera.pitch > 85) - camera.SetPitch(85); - if (camera.pitch < -85) - camera.SetPitch(-85); - if (camera.roll > 85) - camera.SetRoll(85); - if (camera.roll < -85) - camera.SetRoll(-85); + while (camera.yaw > 360) + camera.yaw -= 360; + while (camera.yaw < -360) + camera.yaw += 360; } + void SHCameraSystem::SetMainCamera(EntityID eid, size_t directorIndex) noexcept + { + if (SHComponentManager::HasComponent(eid) && directorIndex < directorHandleList.size()) + directorHandleList[directorIndex]->SetMainCamera(*SHComponentManager::GetComponent(eid)); + else + { + SHLOG_WARNING("Set Main Camera warning: Entity does not have camera component or director does not exist.") + } + } + + void SHCameraSystem::DecomposeViewMatrix(SHMatrix const& viewMatrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept + { + + float initPitch = pitch; + SHVec3 initPos = pos; + SHVec3 translate3, scale; + SHQuaternion quat; + + //SHMatrix viewInverse = viewMatrix; + + viewMatrix.Decompose(translate3, quat, scale); + yaw = 180+ SHMath::RadiansToDegrees(quat.ToEuler().y); + pitch = -SHMath::RadiansToDegrees(quat.ToEuler().x); + + SHVec4 dotPos{ -viewMatrix(0,3),-viewMatrix(1,3), -viewMatrix(2,3), 1.0f }; + SHMatrix mtx = viewMatrix; + mtx(0, 3) = 0.0f; + mtx(1, 3) = 0.0f; + mtx(2, 3) = 0.0f; + mtx.Transpose(); + mtx = SHMatrix::Inverse(mtx); + SHVec4 translate = mtx* dotPos; + + pos.x = translate.x; + pos.y = translate.y; + pos.z = translate.z; + + } + void SHCameraSystem::SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept + { + DecomposeViewMatrix(viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position); + camera.dirtyView = true; + } + + void SHCameraSystem::CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept + { + + if (camera.position == target) + { + //lets off set it abit so the view is nt fked + target.z -= 0.0001f; + } + SHVec3 forward, right, upVec; + + SHVec3 up = { 0.0f,1.0f,0.0f }; + + + ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + //target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + forward = target - (camera.position + camera.offset); forward = SHVec3::Normalise(forward); + right = SHVec3::Cross(forward, up); right = SHVec3::Normalise(right); + upVec = SHVec3::Cross(forward, right); + + + SHMatrix viewMtx; + viewMtx = SHMatrix::Identity; + viewMtx(0, 0) = right[0]; + viewMtx(0, 1) = right[1]; + viewMtx(0, 2) = right[2]; + + viewMtx(1, 0) = upVec[0]; + viewMtx(1, 1) = upVec[1]; + viewMtx(1, 2) = upVec[2]; + + viewMtx(2, 0) = forward[0]; + viewMtx(2, 1) = forward[1]; + viewMtx(2, 2) = forward[2]; + + viewMtx(0, 3) = -right.Dot(camera.position + camera.offset); + viewMtx(1, 3) = -upVec.Dot(camera.position + camera.offset); + viewMtx(2, 3) = -forward.Dot(camera.position + camera.offset); + + + SetCameraViewMatrix(camera, viewMtx); + } + } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 68071160..98fd442f 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -9,6 +9,9 @@ namespace SHADE { + + class SHCameraArmComponent; + class SH_API SHCameraSystem final : public SHSystem { private: @@ -19,6 +22,11 @@ namespace SHADE SHResourceLibrary directorLibrary; std::vector directorHandleList; + + void UpdateCameraComponent(SHCameraComponent& camera) noexcept; + void UpdatePivotArmComponent(SHCameraArmComponent& pivot) noexcept; + + public: SHCameraSystem(void) = default; virtual ~SHCameraSystem(void) = default; @@ -39,7 +47,7 @@ namespace SHADE class SH_API CameraSystemUpdate final: public SHSystemRoutine { public: - CameraSystemUpdate() : SHSystemRoutine("Camera System Update", false) {}; + CameraSystemUpdate() : SHSystemRoutine("Camera System Update", true) {}; virtual void Execute(double dt)noexcept override final; }; friend class CameraSystemUpdate; @@ -51,12 +59,10 @@ namespace SHADE DirectorHandle GetDirector(size_t index) noexcept; void ClampCameraRotation(SHCameraComponent& camera) noexcept; void UpdateEditorCamera(double dt) noexcept; - protected: - - void UpdateCameraComponent(SHCameraComponent& camera) noexcept; - - - + void SetMainCamera(EntityID eid, size_t directorIndex) noexcept; + void DecomposeViewMatrix(SHMatrix const& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept; + void SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept; + void CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept; }; diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp index be78a146..8a715a49 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp @@ -33,12 +33,18 @@ namespace SHADE return; } + std::vector eventVec; + for (uint32_t i = 0; i < componentSet.Size(); ++i) { SHComponent* comp = (SHComponent*) componentSet.GetElement(i, EntityHandleGenerator::GetIndex(entityID)); if (comp) { comp->OnDestroy(); + SHComponentRemovedEvent eventData; + eventData.eid = entityID; + eventData.removedComponentType = i; + eventVec.push_back(eventData); } } @@ -51,8 +57,15 @@ namespace SHADE componentSet.RemoveElements(EntityHandleGenerator::GetIndex(entityID)); + for (auto& eventData : eventVec) + { + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); + } + + //entityHandle.RemoveHandle(entityID); + } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index bbf8d400..6ce4f277 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -213,5 +213,14 @@ namespace SHADE return SHSerialization::DeserializeEntityToSceneFromString(data); }*/ - + EntityID SHEntityManager::GetEntityByName(std::string const& name) noexcept + { + EntityID result = MAX_EID; + for (auto& entity : entityVec) + { + if (entity->name == name) + result = entity->GetEID(); + } + return result; + } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index f32ab2c4..911748bd 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -209,6 +209,8 @@ namespace SHADE //static EntityID DuplicateEntity(EntityID eid) noexcept; + static EntityID GetEntityByName(std::string const& name) noexcept; + protected: diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp index 551233db..057568d6 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp @@ -29,7 +29,7 @@ namespace SHADE { system.second->Init(); #ifdef _DEBUG - std::cout << system.first << " Init" << std::endl; + SHLOG_INFO("Initialising System {}...", system.first) #endif } } diff --git a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp index f9849d78..ce0615e1 100644 --- a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp +++ b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp @@ -6,12 +6,12 @@ namespace SHADE { //TODO: Convert to RTTR? - constexpr auto DRAG_EID = "DragEID"; - constexpr auto DRAG_RESOURCE = "DragResource"; - struct SHDragDrop { + using DragDropTag = std::string_view; + static constexpr DragDropTag DRAG_EID = "DragEID"; + static constexpr DragDropTag DRAG_RESOURCE = "DragResource"; static bool BeginSource(ImGuiDragDropFlags const flags = 0); /** * \brief Ends the DragDrop Source. ONLY CALL IF BeginSource returns true diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index caad9b10..8c71eb8f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -4,14 +4,16 @@ #include "Editor/IconsMaterialDesign.h" #include "Editor/SHImGuiHelpers.hpp" #include +#include #include "Assets/SHAssetManager.h" +#include "Editor/IconsFontAwesome6.h" #include "Editor/DragDrop/SHDragDrop.hpp" namespace SHADE { SHAssetBrowser::SHAssetBrowser() - :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar) + :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder) { } @@ -23,62 +25,140 @@ namespace SHADE void SHAssetBrowser::Update() { SHEditorWindow::Update(); - if(Begin()) + if (Begin()) { + RecursivelyDrawTree(rootFolder); DrawMenuBar(); - auto const& assets = SHAssetManager::GetAllAssets(); - if(ImGui::BeginTable("AssetBrowserTable", 3)) - { - ImGui::TableNextColumn(); - ImGui::TableHeader("Asset ID"); - ImGui::TableNextColumn(); - ImGui::TableHeader("Name"); - ImGui::TableNextColumn(); - ImGui::TableHeader("Type"); - for(SHAsset const& asset : assets) - { - DrawAsset(asset); - } - ImGui::EndTable(); - } + DrawCurrentFolder(); } ImGui::End(); } void SHAssetBrowser::DrawMenuBar() { - if(ImGui::BeginMenuBar()) + if (ImGui::BeginMenuBar()) { ImGui::EndMenuBar(); } } - void SHAssetBrowser::DrawAsset(SHAsset const& asset) + ImRect SHAssetBrowser::RecursivelyDrawTree(FolderPointer folder) { - ImGui::PushID(asset.id); - ImGui::BeginGroup(); - - ImGui::TableNextColumn(); - ImGui::Selectable(std::format("{}", asset.id).data(), false, ImGuiSelectableFlags_SpanAllColumns); - if(SHDragDrop::BeginSource()) + auto const& subFolders = folder->subFolders; + auto const& files = folder->files; + const bool isSelected = std::ranges::find(selectedFolders, folder) != selectedFolders.end(); + ImGuiTreeNodeFlags flags = (subFolders.empty() && files.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow; + if (isSelected) + flags |= ImGuiTreeNodeFlags_Selected; + if (folder == rootFolder) + flags |= ImGuiTreeNodeFlags_DefaultOpen; + + bool isOpen = ImGui::TreeNodeEx(folder, flags, "%s %s", ICON_MD_FOLDER, folder->name.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + if(ImGui::IsItemClicked()) { - auto id = asset.id; - ImGui::Text("Moving Asset: %zu", id); - SHDragDrop::SetPayload(DRAG_RESOURCE, &id); - SHDragDrop::EndSource(); + selectedFolders.clear(); + selectedFolders.push_back(folder); + } + if (isOpen) + { + const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark); + const float horizontalOffset = 0.0f; + ImDrawList* drawList = ImGui::GetWindowDrawList(); + ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); + vertLineStart.x += horizontalOffset; + ImVec2 vertLineEnd = vertLineStart; + for (auto const& subFolder : subFolders) + { + const float horizontalLineSize = 8.0f; + const ImRect childRect = RecursivelyDrawTree(subFolder); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); + vertLineEnd.y = midPoint; + } + for (auto const& file : files) + { + const float horizontalLineSize = 25.0f; + const ImRect childRect = DrawFile(file); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); + vertLineEnd.y = midPoint; + } + drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); + ImGui::TreePop(); + } + return nodeRect; + } + + void SHAssetBrowser::DrawCurrentFolder() + { + //auto const& subFolders = currentFolder->subFolders; + //ImVec2 initialCursorPos = ImGui::GetCursorPos(); + //ImVec2 initialRegionAvail = ImGui::GetContentRegionAvail(); + //int maxTiles = initialRegionAvail.x / tileWidth; + //float maxX = (maxTiles - 1)*tileWidth; + //ImVec2 tilePos = initialCursorPos; + //for (auto const& subFolder : subFolders) + //{ + // ImGui::SetCursorPos(tilePos); + // ImGui::BeginGroup(); + // ImGui::PushStyleVar(ImGuiStyleVar_ItemInnerSpacing, {0.0f, 0.0f}); + // ImGui::Button(ICON_MD_FOLDER, {tileWidth}); + // ImGui::Text(subFolder->name.data()); + // ImGui::PopStyleVar(); + // ImGui::EndGroup(); + // if(tilePos.x >= maxX) + // { + // tilePos.x = initialCursorPos.x; + // } + // else + // { + // ImGui::SameLine(); + // tilePos.x += tileWidth; + // } + //} + } + + ImRect SHAssetBrowser::DrawFile(SHFile const& file) noexcept + { + if (file.assetMeta == nullptr) + return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + const bool isSelected = std::ranges::find(selectedAssets, file.assetMeta->id) != selectedAssets.end(); + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; + if (isSelected) + flags |= ImGuiTreeNodeFlags_Selected; + std::string icon{}; + + switch(file.assetMeta->type) + { + case AssetType::INVALID: break; + case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; + case AssetType::SHADER_BUILT_IN: icon = ICON_FA_FILE_CODE; break; + case AssetType::TEXTURE: icon = ICON_FA_IMAGES; break; + case AssetType::MESH: icon = ICON_FA_CUBES; break; + case AssetType::SCENE: icon = ICON_MD_IMAGE; break; + case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; + case AssetType::MATERIAL: break; + case AssetType::MAX_COUNT: break; + default: ; } - ImGui::TableNextColumn(); - ImGui::Text("%s", asset.name.c_str()); - - ImGui::TableNextColumn(); - ImGui::Text("%s", "Type"); - - ImGui::EndGroup(); - ImGui::PopID(); - - - + ImGui::TreeNodeEx(file.assetMeta, flags, "%s %s", icon.data(), file.assetMeta->name.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + if(SHDragDrop::BeginSource()) + { + auto id = file.assetMeta->id; + ImGui::Text("Moving Asset: %s [%zu]", file.name.data(), file.assetMeta->id); + SHDragDrop::SetPayload(SHDragDrop::DRAG_RESOURCE, &id); + SHDragDrop::EndSource(); + } + if(ImGui::IsItemClicked()) + { + selectedAssets.clear(); + selectedAssets.push_back(file.assetMeta->id); + } + ImGui::TreePop(); + return nodeRect; } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 0e3053bc..d56fc029 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -1,7 +1,9 @@ #pragma once +#include "imgui_internal.h" #include "Assets/SHAsset.h" #include "Editor/EditorWindow/SHEditorWindow.h" +#include "Filesystem/SHFolder.h" namespace SHADE { @@ -16,9 +18,14 @@ namespace SHADE void Refresh(); private: void DrawMenuBar(); - void DrawAsset(SHAsset const& asset); + ImRect RecursivelyDrawTree(FolderPointer folder); + void DrawCurrentFolder(); + ImRect DrawFile(SHFile const& file) noexcept; - float idColumnWidth, nameColumnWidth, typeColumnWidth; + FolderPointer rootFolder, prevFolder, currentFolder; + std::vector selectedFolders; + std::vector selectedAssets; + static constexpr float tileWidth = 50.0f; }; -} \ No newline at end of file +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index f2f8d927..1b289a90 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -6,7 +6,7 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" #include "SHHierarchyPanel.h" @@ -48,15 +48,28 @@ namespace SHADE if (Begin()) { + if (skipFrame) + { + ImGui::End(); + skipFrame = false; + return; + } DrawMenuBar(); auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - if(const auto root = sceneGraph.GetRoot()) + + if (const auto root = sceneGraph.GetRoot()) { auto const& children = root->GetChildren(); - + for (const auto child : children) { - RecursivelyDrawEntityNode(child); + if (child) + RecursivelyDrawEntityNode(child); + if (skipFrame) + { + ImGui::End(); + return; + } } } else @@ -64,12 +77,36 @@ namespace SHADE SHLOG_WARNING("Scene Graph root is null! Unable to render hierarchy.") } - if(ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + if (ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { - if(auto editor = SHSystemManager::GetSystem()) + if (auto editor = SHSystemManager::GetSystem()) editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); + if (ImGui::IsWindowFocused()) + { + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A)) + { + SelectAllEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) + { + CopySelectedEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + PasteEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + const auto editor = SHSystemManager::GetSystem(); + if (editor->selectedEntities.size() == 1) + { + PasteEntities(editor->selectedEntities.back()); + } + } + } + } ImGui::End(); } @@ -81,7 +118,7 @@ namespace SHADE void SHHierarchyPanel::SetScrollTo(EntityID eid) { - if(eid == MAX_EID) + if (eid == MAX_EID) return; scrollTo = eid; } @@ -93,8 +130,10 @@ namespace SHADE { if (ImGui::BeginMenuBar()) { - ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x * 0.75f); - if(ImGui::SmallButton(ICON_MD_DESELECT)) + auto size = ImGui::GetWindowSize(); + auto g = ImGui::GetCurrentContext(); + ImGui::SetCursorPosX(size.x - g->Style.FramePadding.x * 15.0f); + if (ImGui::SmallButton(ICON_MD_CLEAR_ALL)) { auto editor = SHSystemManager::GetSystem(); editor->selectedEntities.clear(); @@ -119,15 +158,17 @@ namespace SHADE } } - ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* currentNode) + ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* const currentNode) { + if (currentNode == nullptr) + return {}; auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); //Get node data (Children, eid, selected) auto& children = currentNode->GetChildren(); EntityID eid = currentNode->GetEntityID(); - if(scrollTo != MAX_EID && eid == scrollTo) + if (scrollTo != MAX_EID && eid == scrollTo) { ImGui::SetScrollHereY(); scrollTo = MAX_EID; @@ -154,23 +195,27 @@ namespace SHADE if (SHDragDrop::BeginSource()) { std::string moveLabel = "Moving EID: "; - if(!isSelected) - editor->selectedEntities.push_back(eid); - for(int i = 0; i < static_cast(editor->selectedEntities.size()); ++i) + static std::vector draggingEntities = editor->selectedEntities; + if (!isSelected) { - moveLabel.append(std::to_string(editor->selectedEntities[i])); - if(i + 1 < static_cast(editor->selectedEntities.size())) + draggingEntities.clear(); + draggingEntities.push_back(eid); + } + for (int i = 0; i < static_cast(draggingEntities.size()); ++i) + { + moveLabel.append(std::to_string(draggingEntities[i])); + if (i + 1 < static_cast(draggingEntities.size())) { moveLabel.append(", "); } } ImGui::Text(moveLabel.c_str()); - SHDragDrop::SetPayload>(DRAG_EID, &editor->selectedEntities); + SHDragDrop::SetPayload>(SHDragDrop::DRAG_EID, &draggingEntities); SHDragDrop::EndSource(); } else if (SHDragDrop::BeginTarget()) //If Received DragDrop { - if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(DRAG_EID)) //If payload is valid + if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(SHDragDrop::DRAG_EID)) //If payload is valid { ParentSelectedEntities(eid); SHDragDrop::EndTarget(); @@ -178,37 +223,43 @@ namespace SHADE } //Context menu - if(ImGui::BeginPopupContextItem(std::to_string(eid).c_str())) + if (ImGui::BeginPopupContextItem(std::to_string(eid).c_str())) { - if(!isSelected) + if (!isSelected) { editor->selectedEntities.clear(); editor->selectedEntities.push_back(eid); } - if(ImGui::Selectable("Copy")) + if (ImGui::Selectable("Copy")) { - SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + CopySelectedEntities(); } - if(ImGui::Selectable("Paste")) + if (ImGui::Selectable("Paste")) { - SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard())); + PasteEntities(); + skipFrame = true; + ImGui::EndPopup(); + if (isNodeOpen) + ImGui::TreePop(); + return nodeRect; } - if(ImGui::Selectable("Paste as Child")) + if (ImGui::Selectable("Paste as Child")) { - SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), eid)); + PasteEntities(eid); + skipFrame = true; } - if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) + if (ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { SHEntityManager::DestroyEntity(eid); } - - if((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) + + if ((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) { ParentSelectedEntities(MAX_EID); } ImGui::EndPopup(); } - + //Handle node selection if (ImGui::IsItemHovered()) { @@ -216,11 +267,11 @@ namespace SHADE { if (!isSelected) { - if(ImGui::IsKeyDown(ImGuiKey_LeftShift)) + if (ImGui::IsKeyDown(ImGuiKey_LeftShift)) { - if(editor->selectedEntities.size() >= 1) + if (editor->selectedEntities.size() >= 1) { - SelectRangeOfEntities(editor->selectedEntities[0], eid); + SelectRangeOfEntities(editor->selectedEntities[0], eid); } else editor->selectedEntities.clear(); } @@ -278,12 +329,12 @@ namespace SHADE auto const editor = SHSystemManager::GetSystem(); SHEntityParentCommand::EntityParentData entityParentData; std::vector parentedEIDS; - for(auto const& eid : editor->selectedEntities) + for (auto const& eid : editor->selectedEntities) { - if(sceneGraph.GetChild(eid, parentEID) == nullptr) + if (sceneGraph.GetChild(eid, parentEID) == nullptr) { parentedEIDS.push_back(eid); - if(auto parent = sceneGraph.GetParent(eid)) + if (auto parent = sceneGraph.GetParent(eid)) entityParentData[eid].oldParentEID = parent->GetEntityID(); entityParentData[eid].newParentEID = parentEID; } @@ -298,34 +349,57 @@ namespace SHADE editor->selectedEntities.clear(); auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); sceneGraph.Traverse([&](SHSceneNode* nodePtr) - { - auto eid = nodePtr->GetEntityID(); - if(!startSelecting) { - if(eid == beginEID || eid == endEID) + auto eid = nodePtr->GetEntityID(); + if (!startSelecting) { - startSelecting = true; - editor->selectedEntities.push_back(eid); - } - } - else - { - if(!endSelecting) - { - editor->selectedEntities.push_back(eid); - if(eid == endEID || eid == beginEID) + if (eid == beginEID || eid == endEID) { - endSelecting = true; + startSelecting = true; + editor->selectedEntities.push_back(eid); } } - } - }); + else + { + if (!endSelecting) + { + editor->selectedEntities.push_back(eid); + if (eid == endEID || eid == beginEID) + { + endSelecting = true; + } + } + } + }); + } + + void SHHierarchyPanel::SelectAllEntities() + { + const auto editor = SHSystemManager::GetSystem(); + editor->selectedEntities.clear(); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + sceneGraph.Traverse([&](SHSceneNode* nodePtr) + { + auto eid = nodePtr->GetEntityID(); + editor->selectedEntities.push_back(eid); + }); + } + + void SHHierarchyPanel::CopySelectedEntities() + { + const auto editor = SHSystemManager::GetSystem(); + SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + } + + void SHHierarchyPanel::PasteEntities(EntityID parentEID) + { + SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); } void SHCreateEntityCommand::Execute() { EntityID newEID = SHEntityManager::CreateEntity(eid); - if(eid == MAX_EID) + if (eid == MAX_EID) eid = newEID; } @@ -337,9 +411,9 @@ namespace SHADE void SHEntityParentCommand::Execute() { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for(auto const& eid : entities) + for (auto const& eid : entities) { - if(entityParentData[eid].newParentEID == MAX_EID) + if (entityParentData[eid].newParentEID == MAX_EID) sceneGraph.SetParent(eid, nullptr); else sceneGraph.SetParent(eid, entityParentData[eid].newParentEID); @@ -349,9 +423,9 @@ namespace SHADE void SHEntityParentCommand::Undo() { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for(auto const& eid : entities) + for (auto const& eid : entities) { - if(entityParentData[eid].oldParentEID == MAX_EID) + if (entityParentData[eid].oldParentEID == MAX_EID) sceneGraph.SetParent(eid, nullptr); else sceneGraph.SetParent(eid, entityParentData[eid].oldParentEID); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 0cfe6474..9b26e9d6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -26,10 +26,14 @@ namespace SHADE void SetScrollTo(EntityID eid); private: void DrawMenuBar() const noexcept; - ImRect RecursivelyDrawEntityNode(SHSceneNode*); + ImRect RecursivelyDrawEntityNode(SHSceneNode* const); void CreateChildEntity(EntityID parentEID) const noexcept; void ParentSelectedEntities(EntityID parentEID) const noexcept; void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); + void SelectAllEntities(); + void CopySelectedEntities(); + void PasteEntities(EntityID parentEID = MAX_EID); + bool skipFrame = false; std::string filter; bool isAnyNodeSelected = false; EntityID scrollTo = MAX_EID; diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h new file mode 100644 index 00000000..69f4c145 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h @@ -0,0 +1,12 @@ +#pragma once +#include "ECS_Base/Components/SHComponent.h" + +namespace SHADE +{ + template::value, bool> = true> + static void DrawContextMenu(T* component); + template, bool> = true> + static void DrawComponent(T* component); +} + +#include "SHEditorComponentView.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 9899d4a4..4777fc6a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -13,25 +13,28 @@ #include "Editor/IconsFontAwesome6.h" #include "ECS_Base/Components/SHComponent.h" #include "Editor/SHEditorWidgets.hpp" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Physics/Components/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" +#include "Resource/SHResourceManager.h" + namespace SHADE { template std::vector GetRTTREnumNames() { auto const rttrType = rttr::type::get(); - if(!rttrType.is_enumeration()) + if (!rttrType.is_enumeration()) return {}; auto const enumAlign = rttrType.get_enumeration(); auto const names = enumAlign.get_names(); std::vector result; - std::transform(names.begin(), names.end(), std::back_inserter(result), [](rttr::string_view const& name){return name.data();}); + std::transform(names.begin(), names.end(), std::back_inserter(result), [](rttr::string_view const& name) {return name.data(); }); return result; } - template::value, bool> = true> + template::value, bool>> static void DrawContextMenu(T* component) { if (!component) @@ -60,13 +63,15 @@ namespace SHADE ImGui::EndPopup(); } } - template, bool> = true> + template, bool>> static void DrawComponent(T* component) { if (!component) return; - const auto componentType = rttr::type::get(*component); + const auto componentType = rttr::type::get(); + ImGui::PushID(SHFamilyID::GetID()); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); + ImGui::PopID(); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -75,7 +80,8 @@ namespace SHADE for (auto const& property : properties) { auto const& type = property.get_type(); - + auto tooltip = property.get_metadata(META::tooltip); + bool const& isAngleInRad = property.get_metadata(META::angleInRad).is_valid() ? property.get_metadata(META::angleInRad).template get_value() : false; if (type.is_enumeration()) { auto enumAlign = type.get_enumeration(); @@ -89,29 +95,25 @@ namespace SHADE auto values = enumAlign.get_values(); auto it = std::next(values.begin(), idx); property.set_value(component, *it); - }); + }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type.is_arithmetic()) { if (type == rttr::type::get()) { - SHEditorWidgets::CheckBox(property.get_name().data(), [component, property] {return property.get_value(component).to_bool(); }, [component, property](bool const& result) {property.set_value(component, result); }); + SHEditorWidgets::CheckBox(property.get_name().data(), [component, property] {return property.get_value(component).to_bool(); }, [component, property](bool const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } - //else if (type == rttr::type::get()) - //{ - // - //} else if (type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); if (metaMin && metaMax) { - SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragInt(property.get_name().data(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); + SHEditorWidgets::DragInt(property.get_name().data(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -120,11 +122,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -133,11 +135,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -146,11 +148,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMax.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMax.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -159,11 +161,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -171,17 +173,17 @@ namespace SHADE auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); float min{}, max{}; - if(metaMin.is_valid()) + if (metaMin.is_valid()) min = std::max(metaMin.template get_value(), -FLT_MAX * 0.5f); - if(metaMax.is_valid()) + if (metaMax.is_valid()) max = std::min(metaMax.template get_value(), FLT_MAX * 0.5f); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderFloat(property.get_name().data(), min, max, [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderFloat(property.get_name().data(), min, max, [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, "Test"); + SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -190,25 +192,25 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, 0.1f); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, 0.1f, {}, {}, "%.3f", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } @@ -223,10 +225,10 @@ namespace SHADE return; // Get transform component for extrapolating relative sizes - auto* transformComponent = SHComponentManager::GetComponent(component->GetEID()); + auto* transformComponent = SHComponentManager::GetComponent_s(component->GetEID()); const auto componentType = rttr::type::get(*component); - SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -234,8 +236,8 @@ namespace SHADE auto& colliders = component->GetColliders(); int const size = static_cast(colliders.size()); - ImGui::BeginChild("Colliders", {0.0f, colliders.empty() ? 1.0f : 250.0f}, true); - std::optional colliderToDelete{std::nullopt}; + ImGui::BeginChild("Colliders", { 0.0f, colliders.empty() ? 1.0f : 250.0f }, true); + std::optional colliderToDelete{ std::nullopt }; for (int i{}; i < size; ++i) { ImGui::PushID(i); @@ -244,12 +246,12 @@ namespace SHADE if (collider->GetType() == SHCollider::Type::BOX) { - SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::BeginPanel(std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); auto box = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( - "Half Extents", { "X", "Y", "Z" }, - [box, transformComponent] { return (transformComponent->GetWorldScale() * 2.0f) * box->GetHalfExtents(); }, + "Half Extents", { "X", "Y", "Z" }, + [box, transformComponent] { return (box->GetHalfExtents() * 2.0f) / transformComponent->GetWorldScale(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } else if (collider->GetType() == SHCollider::Type::SPHERE) @@ -258,32 +260,51 @@ namespace SHADE auto sphere = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( - "Radius", + "Radius", [sphere, transformComponent] { const SHVec3& TF_WORLD_SCALE = transformComponent->GetWorldScale(); const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); return sphere->GetRadius() / MAX_SCALE; - }, - [collider](float const& value) { collider->SetBoundingSphere(value);}); + }, + [collider](float const& value) { collider->SetBoundingSphere(value); }); } else if (collider->GetType() == SHCollider::Type::CAPSULE) { } { - SHEditorWidgets::BeginPanel("Offset", { ImGui::GetContentRegionAvail().x, 30.0f }); + SHEditorWidgets::BeginPanel("Offsets",{ ImGui::GetContentRegionAvail().x, 30.0f }); SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider->GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider->SetPositionOffset(vec); }); + SHEditorWidgets::DragVec3("Rotation", { "X", "Y", "Z" }, + [&collider] + { + auto offset = collider->GetRotationOffset(); + offset.x = SHMath::RadiansToDegrees(offset.x); + offset.y = SHMath::RadiansToDegrees(offset.y); + offset.z = SHMath::RadiansToDegrees(offset.z); + return offset; + }, + [&collider](SHVec3 const& vec) + { + const SHVec3 vecInRad + { + SHMath::DegreesToRadians(vec.x) + , SHMath::DegreesToRadians(vec.y) + , SHMath::DegreesToRadians(vec.z) + }; + collider->SetRotationOffset(vecInRad); + }); SHEditorWidgets::EndPanel(); } - if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) + if (ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) { colliderToDelete = i; } SHEditorWidgets::EndPanel(); ImGui::PopID(); } - if(colliderToDelete.has_value()) + if (colliderToDelete.has_value()) { component->RemoveCollider(colliderToDelete.value()); } @@ -291,11 +312,11 @@ namespace SHADE if (ImGui::BeginMenu("Add Collider")) { - if(ImGui::Selectable("Box Collider")) + if (ImGui::Selectable("Box Collider")) { component->AddBoundingBox(); } - if(ImGui::Selectable("Sphere Collider")) + if (ImGui::Selectable("Sphere Collider")) { component->AddBoundingSphere(); } @@ -308,10 +329,10 @@ namespace SHADE template<> static void DrawComponent(SHLightComponent* component) { - if (!component) + if (!component) return; const auto componentType = rttr::type::get(*component); - SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -319,19 +340,49 @@ namespace SHADE static auto const enumAlign = rttr::type::get().get_enumeration(); static std::vector list(GetRTTREnumNames()); - + SHEditorWidgets::ComboBox("Type", list, [component] {return static_cast(component->GetType()); }, [component](int const& idx) { component->SetType(static_cast(idx)); }); - SHEditorWidgets::DragVec3("Position", {"X", "Y", "Z"}, [component](){return component->GetPosition();}, [component](SHVec3 const& vec){component->SetPosition(vec);}); - SHEditorWidgets::DragVec3("Direction", {"X", "Y", "Z"}, [component](){return component->GetDirection();}, [component](SHVec3 const& vec){component->SetDirection(vec);}); - SHEditorWidgets::ColorPicker("Color", [component](){return component->GetColor();}, [component](SHVec4 const& rgba){component->SetColor(rgba);}); - SHEditorWidgets::DragFloat("Strength", [component](){return component->GetStrength();}, [component](float const& value){component->SetStrength(value);}); + SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [component]() {return component->GetPosition(); }, [component](SHVec3 const& vec) {component->SetPosition(vec); }); + SHEditorWidgets::DragVec3("Direction", { "X", "Y", "Z" }, [component]() {return component->GetDirection(); }, [component](SHVec3 const& vec) {component->SetDirection(vec); }); + SHEditorWidgets::ColorPicker("Color", [component]() {return component->GetColor(); }, [component](SHVec4 const& rgba) {component->SetColor(rgba); }); + SHEditorWidgets::DragFloat("Strength", [component]() {return component->GetStrength(); }, [component](float const& value) {component->SetStrength(value); }); } else { DrawContextMenu(component); } } -} \ No newline at end of file + + template<> + static void DrawComponent(SHRenderable* component) + { + if (!component) + return; + const auto componentType = rttr::type::get(*component); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); + ImGui::SameLine(); + if (ImGui::CollapsingHeader(componentType.get_name().data())) + { + DrawContextMenu(component); + Handle const& mesh = component->GetMesh(); + + SHEditorWidgets::DragDropReadOnlyField("Mesh", std::to_string(SHResourceManager::GetAssetID(mesh).value_or(0)).data(), [component]() + { + Handle const& mesh = component->GetMesh(); + return SHResourceManager::GetAssetID(mesh).value_or(0); + }, + [component](AssetID const& id) + { + component->SetMesh(SHResourceManager::LoadOrGet(id)); + SHResourceManager::FinaliseChanges(); + }, SHDragDrop::DRAG_RESOURCE); + } + else + { + DrawContextMenu(component); + } + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index ebb241ef..2fecae25 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -1,6 +1,6 @@ #include "SHpch.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "SHEditorInspector.h" #include "ECS_Base/SHECSMacros.h" @@ -10,17 +10,15 @@ #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" -#include "SHEditorComponentView.hpp" -#include "ECS_Base/UnitTesting/SHTestComponents.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scripting/SHScriptEngine.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "ECS_Base/Managers/SHSystemManager.h" -#include "AudioSystem/SHAudioSystem.h" #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" #include "Camera/SHCameraComponent.h" +#include "Camera/SHCameraArmComponent.h" +#include "SHEditorComponentView.h" namespace SHADE { @@ -30,8 +28,17 @@ namespace SHADE bool selected = false; if(!SHComponentManager::HasComponent(eid)) { - if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + const char* componentName = rttr::type::get().get_name().data(); + if(selected = ImGui::Selectable(std::format("Add {}", componentName).data()); selected) SHComponentManager::AddComponent(eid); + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Adds", componentName); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::green, "%s", componentName); ImGui::SameLine(); + ImGui::Text("to this entity", componentName); + ImGui::EndTooltip(); + } } return selected; } @@ -42,13 +49,26 @@ namespace SHADE bool selected = false; if (!SHComponentManager::HasComponent(eid)) { - if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + const char* componentName = rttr::type::get().get_name().data(); + + if(selected = ImGui::Selectable(std::format("Add {}", componentName).data()); selected) { if(SHComponentManager::GetComponent_s(eid) == nullptr) SHComponentManager::AddComponent(eid); SHComponentManager::AddComponent(eid); } + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Adds", componentName); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::green, "%s", componentName); ImGui::SameLine(); + ImGui::Text("to this entity", componentName); + ImGui::Text("Adds"); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::red, "%s", rttr::type::get().get_name().data()); ImGui::SameLine(); + ImGui::Text("if the entity does not already have it"); + ImGui::EndTooltip(); + } } return selected; } @@ -107,6 +127,9 @@ namespace SHADE if (auto cameraComponent = SHComponentManager::GetComponent_s(eid)) { DrawComponent(cameraComponent); + }if (auto cameraArmComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(cameraArmComponent); } ImGui::Separator(); // Render Scripts @@ -117,6 +140,8 @@ namespace SHADE { DrawAddComponentButton(eid); DrawAddComponentButton(eid); + DrawAddComponentButton(eid); + DrawAddComponentButton(eid); // Components that require Transforms diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index c33f4fb6..06c0c2ae 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -3,7 +3,7 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "SHEditorMenuBar.h" #include "Editor/IconsMaterialDesign.h" #include "Editor/Command/SHCommandManager.h" @@ -175,19 +175,37 @@ namespace SHADE ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY); if(ImGui::SmallButton(ICON_MD_PLAY_ARROW)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::PLAY; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); if(ImGui::SmallButton(ICON_MD_PAUSE)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::PAUSE; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PAUSE_EVENT); } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP); if(ImGui::SmallButton(ICON_MD_STOP)) { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; editor->editorState = SHEditor::State::STOP; + + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); } ImGui::EndDisabled(); ImGui::EndMenuBar(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h index 7cbcd696..e4f1d20b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.h @@ -20,4 +20,10 @@ namespace SHADE float menuBarHeight = 20.0f; std::vector layoutPaths; };//class SHEditorMenuBar + + struct SHEditorStateChangeEvent + { + SHEditor::State previousState; + }; + }//namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index f5170999..d6ef8d19 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -5,13 +5,16 @@ #include "ImGuizmo.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/IconsMaterialDesign.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include +#include "Camera/SHCameraSystem.h" +#include "FRC/SHFramerateController.h" + constexpr std::string_view windowName = "\xef\x80\x95 Viewport"; namespace SHADE @@ -30,8 +33,15 @@ namespace SHADE void SHEditorViewport::Update() { SHEditorWindow::Update(); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f,0.0f)); - if(Begin()) + if (shouldUpdateCamera) + { + auto camSystem = SHSystemManager::GetSystem(); + camSystem->UpdateEditorCamera(SHFrameRateController::GetRawDeltaTime()); + shouldUpdateCamera = false; + } + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); + + if (Begin()) { ImGuizmo::SetDrawlist(); DrawMenuBar(); @@ -39,21 +49,38 @@ namespace SHADE auto const& descriptorSet = gfxSystem->GetPostOffscreenRenderSystem()->GetDescriptorSetGroup()->GetVkHandle()[0]; auto mousePos = ImGui::GetMousePos(); beginCursorPos = ImGui::GetCursorScreenPos(); - viewportMousePos = {mousePos.x - beginCursorPos.x, mousePos.y - beginCursorPos.y}; - gfxSystem->GetMousePickSystem ()->SetViewportMousePos (viewportMousePos); + viewportMousePos = { mousePos.x - beginCursorPos.x, mousePos.y - beginCursorPos.y }; + gfxSystem->GetMousePickSystem()->SetViewportMousePos(viewportMousePos); - ImGui::Image((ImTextureID)descriptorSet, {beginContentRegionAvailable.x, beginContentRegionAvailable.y}); + ImGui::Image((ImTextureID)descriptorSet, { beginContentRegionAvailable.x, beginContentRegionAvailable.y }); - if(ImGui::IsWindowHovered() && ImGui::IsMouseDown(ImGuiMouseButton_Right)) + if (ImGui::IsWindowHovered() && ImGui::IsMouseDown(ImGuiMouseButton_Right)) { ImGui::SetMouseCursor(ImGuiMouseCursor_None); ImGui::SetCursorScreenPos(ImGui::GetMousePos()); ImGui::PushStyleColor(ImGuiCol_Text, ImGuiColors::green); ImGui::Text(ICON_FA_EYE); ImGui::PopStyleColor(); + + shouldUpdateCamera = true; + } + if (ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) + { + if (ImGui::IsKeyReleased(ImGuiKey_Q)) + { + transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; + } + if (ImGui::IsKeyReleased(ImGuiKey_W)) + { + transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; + } + if (ImGui::IsKeyReleased(ImGuiKey_E)) + { + transformGizmo.operation = SHTransformGizmo::Operation::SCALE; + } } } - ImGuizmo::SetRect(beginCursorPos.x , beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); + ImGuizmo::SetRect(beginCursorPos.x, beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); transformGizmo.Draw(); ImGui::End(); ImGui::PopStyleVar(); @@ -72,11 +99,12 @@ namespace SHADE //auto pos = ImGui::GetCursorPos(); //windowCursorPos = {} - if(beginContentRegionAvailable.x == 0 || beginContentRegionAvailable.y == 0) + if (beginContentRegionAvailable.x == 0 || beginContentRegionAvailable.y == 0) { - beginContentRegionAvailable = windowSize; + beginContentRegionAvailable = windowSize; } gfxSystem->PrepareResize(static_cast(beginContentRegionAvailable.x), static_cast(beginContentRegionAvailable.y)); + shouldUpdateCamera = true; } void SHEditorViewport::OnPosChange() @@ -86,44 +114,63 @@ namespace SHADE void SHEditorViewport::DrawMenuBar() noexcept { - if(ImGui::BeginMenuBar()) + if (ImGui::BeginMenuBar()) { + ImGui::BeginDisabled(ImGui::IsWindowFocused() && ImGui::IsMouseDown(ImGuiMouseButton_Right)); bool const isTranslate = transformGizmo.operation == SHTransformGizmo::Operation::TRANSLATE; ImGui::BeginDisabled(isTranslate); - if(isTranslate) + if (isTranslate) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::Button(ICON_MD_OPEN_WITH)) + if (ImGui::Button(ICON_MD_OPEN_WITH)) { transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; } ImGui::EndDisabled(); - if(isTranslate) + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Translate [Q]"); + ImGui::EndTooltip(); + } + if (isTranslate) ImGui::PopStyleColor(); bool const isRotate = transformGizmo.operation == SHTransformGizmo::Operation::ROTATE; ImGui::BeginDisabled(isRotate); - if(isRotate) + if (isRotate) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::Button(ICON_MD_AUTORENEW)) + if (ImGui::Button(ICON_MD_AUTORENEW)) { transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; } ImGui::EndDisabled(); - if(isRotate) + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Rotate [W]"); + ImGui::EndTooltip(); + } + if (isRotate) ImGui::PopStyleColor(); bool const isScale = transformGizmo.operation == SHTransformGizmo::Operation::SCALE; ImGui::BeginDisabled(isScale); - if(isScale) + if (isScale) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::GetStyle().Colors[ImGuiCol_CheckMark]); - if(ImGui::Button(ICON_MD_EXPAND)) + if (ImGui::Button(ICON_MD_EXPAND)) { transformGizmo.operation = SHTransformGizmo::Operation::SCALE; } ImGui::EndDisabled(); - if(isScale) + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Scale [E]"); + ImGui::EndTooltip(); + } + if (isScale) ImGui::PopStyleColor(); - + ImGui::EndDisabled(); ImGui::EndMenuBar(); } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h index 80b13285..0fae4317 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -14,7 +14,7 @@ namespace SHADE { - class SHEditorViewport final : public SHEditorWindow + class SHEditorViewport final : public SHEditorWindow { public: SHEditorViewport(); @@ -28,5 +28,6 @@ namespace SHADE private: void DrawMenuBar() noexcept; SHVec2 beginCursorPos; + bool shouldUpdateCamera = false; };//class SHEditorViewport }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 3c984051..e3bbc809 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -3,7 +3,7 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/SHImGuiHelpers.hpp" #include #include @@ -63,6 +63,9 @@ namespace SHADE if (selectedEntityTransformComponent == nullptr) return; + if(!selectedEntityTransformComponent->isActive) + return; + SHMatrix mat = selectedEntityTransformComponent->GetTRS(); useSnap = ImGui::IsKeyDown(ImGuiKey_LeftCtrl); if(useSnap) diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 06fadfee..cf5056a5 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -21,7 +21,7 @@ #include "Graphics/MiddleEnd/Interface/SHViewport.h" #include "Graphics/MiddleEnd/Interface/SHRenderer.h" -#include "SHEditor.hpp" +#include "SHEditor.h" #include "SHEditorWidgets.hpp" #include "Math/Transform/SHTransformSystem.h" @@ -175,7 +175,7 @@ namespace SHADE ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path - constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_MD, 0 }; + constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } @@ -293,6 +293,7 @@ namespace SHADE //#==============================================================# void SHEditor::InitBackend() { +#ifdef SHEDITOR if(ImGui_ImplSDL2_InitForVulkan(sdlWindow) == false) { SHLOG_CRITICAL("Editor backend initialisation; Failed to perform SDL initialisation for Vulkan") @@ -339,6 +340,7 @@ namespace SHADE renderGraph->GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); }); +#endif } void SHEditor::PollPicking() diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.h similarity index 98% rename from SHADE_Engine/src/Editor/SHEditor.hpp rename to SHADE_Engine/src/Editor/SHEditor.h index 34405390..624069db 100644 --- a/SHADE_Engine/src/Editor/SHEditor.hpp +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -15,7 +15,7 @@ #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/SHHandle.h" #include "EditorWindow/SHEditorWindow.h" -#include "Tools/SHLogger.h" +#include "Tools/SHLog.h" #include "Gizmos/SHTransformGizmo.h" @@ -76,7 +76,7 @@ namespace SHADE } else { - SHLOG_WARNING("Attempt to create duplicate of Editor window type") + SHLog::Warning("Attempt to create duplicate of Editor window type"); } } diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 0137b951..cc63c565 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include #include "SHEditorWidgets.hpp" +#include "ECS_Base/Managers/SHEntityManager.h" namespace SHADE { @@ -156,7 +157,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::Checkbox("#", &value); + return ImGui::Checkbox("##", &value); } bool SHEditorUI::InputInt(const std::string& label, int& value, bool* isHovered) { @@ -164,7 +165,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputInt("#", &value, + return ImGui::InputInt("##", &value, 1, 10, ImGuiInputTextFlags_EnterReturnsTrue); } @@ -175,7 +176,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - const bool CHANGED = InputInt("#", signedVal); + const bool CHANGED = InputInt("##", signedVal); if (CHANGED) { signedVal = std::clamp(signedVal, 0, std::numeric_limits::max()); @@ -189,7 +190,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputFloat("#", &value, + return ImGui::InputFloat("##", &value, 0.1f, 1.0f, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -199,7 +200,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputDouble("#", &value, + return ImGui::InputDouble("##", &value, 0.1, 1.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -209,7 +210,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputDouble("#", &value, + return ImGui::InputDouble("##", &value, 1.0, 45.0, "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } @@ -279,7 +280,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - const bool CHANGED = ImGui::InputText("#", &buffer[0], TEXT_FIELD_MAX_LENGTH); + const bool CHANGED = ImGui::InputText("##", &buffer[0], TEXT_FIELD_MAX_LENGTH); if (CHANGED) { value = std::string(buffer.data(), buffer.data() + TEXT_FIELD_MAX_LENGTH); @@ -287,6 +288,35 @@ namespace SHADE return CHANGED; } + bool SHEditorUI::InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered) + { + ImGui::Text(label.c_str()); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); + ImGui::SameLine(); + SHEntity* entity = SHEntityManager::GetEntityByID(value); + std::ostringstream oss; + if (entity) + { + oss << value << ": " << entity->name; + } + std::string entityName = oss.str(); + bool changed = ImGui::InputText("##", &entityName, ImGuiInputTextFlags_ReadOnly); + if (SHDragDrop::BeginTarget()) + { + if (const std::vector* payload = SHDragDrop::AcceptPayload>(SHDragDrop::DRAG_EID)) + { + if (!payload->empty()) + { + value = payload->at(0); + changed = true; + } + SHDragDrop::EndTarget(); + } + } + return changed; + } + bool SHEditorUI::InputEnumCombo(const std::string& label, int& v, const std::vector& enumNames, bool* isHovered) { // Clamp input value @@ -297,7 +327,7 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - if (ImGui::BeginCombo("#", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) + if (ImGui::BeginCombo("##", INITIAL_NAME.c_str(), ImGuiComboFlags_None)) { for (int i = 0; i < enumNames.size(); ++i) { diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index f3051aa1..d4104639 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -308,6 +308,14 @@ namespace SHADE /// True if the value was changed. static bool InputTextField(const std::string& label, std::string& value, bool* isHovered = nullptr); /// + /// Creates a drag field widget for int input. + /// + /// Label used to identify this widget. + /// Reference to the variable to store the result. + /// The type of enum to input. diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 46538827..053348d7 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -22,6 +22,8 @@ #include #include +#include "DragDrop/SHDragDrop.hpp" + namespace SHADE { class SH_API SHEditorWidgets @@ -41,7 +43,7 @@ namespace SHADE ImGui::BeginGroup(); auto itemSpacing = ImGui::GetStyle().ItemSpacing; - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.2f)); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); auto frameHeight = ImGui::GetFrameHeight(); @@ -86,7 +88,7 @@ namespace SHADE auto itemSpacing = ImGui::GetStyle().ItemSpacing; - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.2f)); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); auto frameHeight = ImGui::GetFrameHeight(); @@ -127,7 +129,7 @@ namespace SHADE ImGui::GetWindowDrawList()->AddRect( frameRect.Min, frameRect.Max, - ImColor(ImGui::GetStyleColorVec4(ImGuiCol_Button)), + ImColor(ImGui::GetStyleColorVec4(ImGuiCol_TextDisabled)), halfFrame.x); ImGui::PopClipRect(); @@ -174,15 +176,19 @@ namespace SHADE ImGui::SetColumnWidth(-1, 80.0f); ImGui::Text(label.c_str()); if (isHovered) - *isHovered = ImGui::IsItemHovered(); + *isHovered |= ImGui::IsItemHovered(); ImGui::NextColumn(); for (std::size_t i = 0; i < N; ++i) { ImGui::PushID(static_cast(i)); - ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); + ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); + if (isHovered) + *isHovered |= ImGui::IsItemHovered(); + ImGui::SameLine(); ImGui::SetNextItemWidth(80.0f); valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); - + if (isHovered) + *isHovered |= ImGui::IsItemHovered(); const ImVec2 min = ImGui::GetItemRectMin(); const ImVec2 max = ImGui::GetItemRectMax(); const float spacing = g.Style.FrameRounding; @@ -203,23 +209,31 @@ namespace SHADE } static bool DragVec2(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec2 values = get(); + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y)}; + } bool const changed = DragN(label, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); if (!startRecording) startRecording = true; } if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) startRecording = false; - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -230,17 +244,24 @@ namespace SHADE } static bool DragVec3(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); - bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags); - - + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y), SHMath::RadiansToDegrees(values.z)}; + } + bool isHovered = false; + bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags, &isHovered); static bool startRecording = false; if (changed) { SHVec3 old = get(); + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y), SHMath::DegreesToRadians(values.z)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(old, values, set)), startRecording); if (!startRecording) startRecording = true; @@ -249,9 +270,9 @@ namespace SHADE { startRecording = false; } - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (isHovered) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -262,14 +283,22 @@ namespace SHADE } static bool DragVec4(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y), SHMath::RadiansToDegrees(values.z), SHMath::RadiansToDegrees(values.w)}; + } bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y), SHMath::DegreesToRadians(values.z), SHMath::DegreesToRadians(values.w)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); if (!startRecording) startRecording = true; @@ -278,9 +307,9 @@ namespace SHADE { startRecording = false; } - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -297,7 +326,7 @@ namespace SHADE static void TextLabel(std::string_view const& text, bool sameLine = true) { const ImVec2 textSize = ImGui::CalcTextSize(text.data(), NULL, true); - if(textSize.x > 0.0f) + if (textSize.x > 0.0f) { ImGui::Text(text.data()); ImGui::SameLine(); @@ -310,32 +339,32 @@ namespace SHADE ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); - if (ImGui::Checkbox("##", &value)) + bool const changed = ImGui::Checkbox("##", &value); + if (changed) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - return true; } ImGui::PopID(); ImGui::EndGroup(); - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); ImGui::EndTooltip(); } } - return false; + return changed; } template - static bool RadioButton(std::vector const& label, std::vector const& listTypes, std::function get, std::function set ,std::string_view const& tooltip = {}) + static bool RadioButton(std::vector const& label, std::vector const& listTypes, std::function get, std::function set, std::string_view const& tooltip = {}) { T type = get(); ImGui::BeginGroup(); ImGui::PushID(label.data()); - TextLabel(label); + //TextLabel(label); for (size_t i = 0; i < listTypes.size(); i++) { if (ImGui::RadioButton(label[i].c_str(), type == listTypes[i])) @@ -366,12 +395,11 @@ namespace SHADE ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); - if (ImGui::InputText("##", &text, flag, callback, userData)) + bool const changed = ImGui::InputText("##", &text, flag, callback, userData); + if (changed) { if (ImGui::IsItemDeactivatedAfterEdit()) SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); - - return true; } ImGui::PopID(); ImGui::EndGroup(); @@ -384,7 +412,37 @@ namespace SHADE ImGui::EndTooltip(); } } - return false; + return changed; + } + + template + static bool DragDropReadOnlyField(std::string const& label, std::string_view const& fieldVTextValue, std::function const& get, std::function const& set, SHDragDrop::DragDropTag const& dragDropTag, std::string_view const& tooltip = {}) + { + std::string text = fieldVTextValue.data(); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + bool const changed = ImGui::InputText("##", &text, ImGuiInputTextFlags_ReadOnly, nullptr, nullptr); + if(SHDragDrop::BeginTarget()) + { + if(T* payload = SHDragDrop::AcceptPayload(dragDropTag)) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), *payload, set)), false); + SHDragDrop::EndTarget(); + } + } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } + return changed; } template @@ -442,9 +500,9 @@ namespace SHADE } ImGui::PopID(); ImGui::EndGroup(); - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index 804fbfec..d649fabf 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -13,4 +13,7 @@ constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT { 4 }; constexpr SHEventIdentifier SH_SCENEGRAPH_CHANGE_PARENT_EVENT { 5 }; constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_ADDED_EVENT { 6 }; constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_REMOVED_EVENT { 7 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PLAY_EVENT { 8 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PAUSE_EVENT { 9 }; +constexpr SHEventIdentifier SH_EDITOR_ON_STOP_EVENT { 10 }; diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index a744c795..fb64bcc2 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -282,6 +282,11 @@ namespace SHADE } + void SHVkCommandBuffer::SetLineWidth(float lineWidth) noexcept + { + vkCommandBuffer.setLineWidth(lineWidth); + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 4c978c34..bc0d4b04 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -115,6 +115,7 @@ namespace SHADE // Dynamic State void SetViewportScissor (float vpWidth, float vpHeight, uint32_t sWidth, uint32_t sHeight, float vpX = 0.0f, float vpY = 0.0f, int32_t sX = 0.0f, int32_t sY = 0.0f, float vpMinDepth = 0.0f, float vpMaxDepth = 1.0f) noexcept; + void SetLineWidth (float lineWidth) noexcept; // Binding Commands void BindPipeline (Handle const& pipelineHdl) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 1bda7c90..22d1875b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -74,11 +74,12 @@ namespace SHADE void SHBatch::Remove(const SHRenderable* renderable) { - // Check if we have a SubBatch with the same mesh yet + // Check if we have a SubBatch with the existing mesh yet (if changed, we use the old mesh) + Handle prevSubBatchMesh = renderable->HasMeshChanged() ? renderable->GetPrevMesh() : renderable->GetMesh(); auto subBatch = std::find_if(subBatches.begin(), subBatches.end(), [&](const SHSubBatch& batch) - { - return batch.Mesh == renderable->GetMesh(); - }); + { + return batch.Mesh == prevSubBatchMesh; + }); // Attempt to remove if it exists if (subBatch == subBatches.end()) @@ -88,9 +89,7 @@ namespace SHADE // Check if other renderables in subBatches contain the same material instance bool matUnused = true; - Handle matToCheck = renderable->HasMaterialChanged() ? renderable->GetPrevMaterial() : renderable->GetMaterial(); - for (const auto& sb : subBatches) { // Check material usage diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 434e7163..df389879 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -37,9 +37,9 @@ namespace SHADE // Check if we have a batch with the same pipeline first auto batch = std::find_if(batches.begin(), batches.end(), [&](const SHBatch& batch) - { - return batch.GetPipeline() == PIPELINE; - }); + { + return batch.GetPipeline() == PIPELINE; + }); // Create one if not found diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp new file mode 100644 index 00000000..08019665 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -0,0 +1,202 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of functions of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHDebugDrawSystem.h" +// STL Includes +#include +// Project Includes +#include "../Meshes/SHMeshData.h" +#include "../Meshes/SHPrimitiveGenerator.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "SHGraphicsSystem.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "../../SHVkUtil.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" +#include "Graphics/MiddleEnd/Interface/SHRenderer.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* DrawRoutine */ + /*---------------------------------------------------------------------------------*/ + SHDebugDrawSystem::ProcessPointsRoutine::ProcessPointsRoutine() + : SHSystemRoutine("Debug Draw", true) + { + SystemFamily::GetID(); + } + + void SHDebugDrawSystem::ProcessPointsRoutine::Execute(double dt) noexcept + { + auto gfxSys = SHSystemManager::GetSystem(); + if (!gfxSys) + { + SHLOG_WARNING("[DebugDraw] Attempted to do debug draw without a graphics system."); + return; + } + + // Get current frame index + const uint32_t FRAME_IDX = gfxSys->GetCurrentFrameIndex(); + + // Create the buffer if it doesn't exist or just update it + SHDebugDrawSystem* system = static_cast(GetSystem()); + system->numPoints[FRAME_IDX] = system->points.size(); + const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size(); + if (DATA_SIZE > 0) + { + system->vertexBuffers[FRAME_IDX]->WriteToMemory(system->points.data(), DATA_SIZE, 0, 0); + } + + // Reset for next frame + system->points.clear(); + } + + /*---------------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*---------------------------------------------------------------------------------*/ + void SHDebugDrawSystem::Init() + { + // Register function for subpass + const auto* GFX_SYSTEM = SHSystemManager::GetSystem(); + auto const& RENDERERS = GFX_SYSTEM->GetDefaultViewport()->GetRenderers(); + auto renderGraph = RENDERERS[SHGraphicsConstants::RenderGraphIndices::WORLD]->GetRenderGraph(); + auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw"); + subPass->AddExteriorDrawCalls([this, GFX_SYSTEM](Handle& cmdBuffer) + { + // Get Current frame index + const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); + + // Don't draw if no points + if (numPoints[FRAME_IDX] <= 0) + return; + + cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); + cmdBuffer->SetLineWidth(LineWidth); + cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); + cmdBuffer->DrawArrays(numPoints[FRAME_IDX], 1, 0, 0); + }); + + // Reset trackers + std::fill_n(numPoints.begin(), numPoints.size(), 0); + + // Allocate buffers + static constexpr uint32_t BUFFER_SIZE = MAX_POINTS * sizeof(PointVertex); + for (Handle& bufHandle : vertexBuffers) + { + bufHandle = GFX_SYSTEM->GetDevice()->CreateBuffer + ( + BUFFER_SIZE, + nullptr, + 0, + vk::BufferUsageFlagBits::eVertexBuffer, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + ); + } + } + + void SHDebugDrawSystem::Exit() + { + for (auto vertexBuffer : vertexBuffers) + { + if (vertexBuffer) + vertexBuffer.Free(); + } + } + + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + void SHDebugDrawSystem::DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + if (points.size() > MAX_POINTS) + { + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; + } + + points.emplace_back(PointVertex{ startPt, color }); + points.emplace_back(PointVertex{ endPt, color }); + } + + void SHDebugDrawSystem::DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + DrawPoly(color, { pt1, pt2, pt3 }); + } + + void SHDebugDrawSystem::DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + DrawPoly(color, { pt1, pt2, pt3, pt4 }); + } + + void SHDebugDrawSystem::DrawPoly(const SHVec4& color, std::initializer_list pointList) + { + DrawPoly(color, pointList.begin(), pointList.end()); + } + + void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + static const SHVec3 EXTENTS = SHVec3 { 0.5f, 0.5f, 0.5f }; + static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos - EXTENTS }; + static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { -EXTENTS.x, EXTENTS.y, -EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + EXTENTS }; + + const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size; + const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size; + const SHVec3 BOT_LEFT_FRONT = UNIT_BOT_LEFT_FRONT * size; + const SHVec3 BOT_RIGHT_FRONT = UNIT_BOT_RIGHT_FRONT * size; + const SHVec3 TOP_LEFT_BACK = UNIT_TOP_LEFT_BACK * size; + const SHVec3 TOP_RIGHT_BACK = UNIT_TOP_RIGHT_BACK * size; + const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size; + const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size; + + DrawPoly + ( + color, + { + // Bottom Square + BOT_LEFT_BACK , BOT_RIGHT_BACK, + BOT_RIGHT_BACK , BOT_RIGHT_FRONT, + BOT_RIGHT_FRONT, BOT_LEFT_FRONT, + BOT_LEFT_FRONT , BOT_LEFT_BACK, + // Top Square + TOP_LEFT_BACK , TOP_RIGHT_BACK, + TOP_RIGHT_BACK , TOP_RIGHT_FRONT, + TOP_RIGHT_FRONT, TOP_LEFT_FRONT, + TOP_LEFT_FRONT , TOP_LEFT_BACK, + // Middle Lines + TOP_LEFT_BACK , BOT_LEFT_BACK, + TOP_RIGHT_BACK , BOT_RIGHT_BACK, + TOP_RIGHT_FRONT, BOT_RIGHT_FRONT, + TOP_LEFT_FRONT , BOT_LEFT_FRONT + } + ); + } + + void SHDebugDrawSystem::DrawSphere(const SHVec4& color, const SHVec3& pos, double radius) + { + if (spherePoints.empty()) + { + // Generate + static const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere(); + for (const auto& idx : SPHERE.Indices) + { + spherePoints.emplace_back(SPHERE.VertexPositions[idx]); + } + } + DrawPoly(color, spherePoints.begin(), spherePoints.end()); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h new file mode 100644 index 00000000..4b83958d --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -0,0 +1,159 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "SH_API.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" +#include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHSystemRoutine.h" +#include "Resource/SHHandle.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "SHGraphicsConstants.h" +#include "Math/SHColour.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHVkBuffer; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Manages the Debug Draw system. + /// + class SH_API SHDebugDrawSystem final : public SHSystem + { + public: + /*---------------------------------------------------------------------------------*/ + /* System Routines */ + /*---------------------------------------------------------------------------------*/ + class SH_API ProcessPointsRoutine final : public SHSystemRoutine + { + public: + ProcessPointsRoutine(); + virtual void Execute(double dt) noexcept override final; + }; + + /*---------------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*---------------------------------------------------------------------------------*/ + virtual void Init() override final; + virtual void Exit() override final; + + /*---------------------------------------------------------------------------------*/ + /* Configuration Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Configures the line width used to draw all lines in the Debug Draw system. + /// + float LineWidth = 1.0f; + + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. + void DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + void DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. + void DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Colour of the polygon. + /// List of points for the polygon. + void DrawPoly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Iterator for a STL-like container. + /// Colour of the polygon. + /// + /// Iterator to the first point of the point container. + /// + /// + /// One past last iterator of the point container. + /// + template + void DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd); + /// + /// Renders a wireframe cube centered around the position specified in world space. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + void DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. + void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius); + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + struct SH_API PointVertex + { + SHVec4 Position; + SHVec4 Color; + }; + using TripleBuffer = std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS>; + using TripleUInt = std::array; + + /*---------------------------------------------------------------------------------*/ + /* Constants */ + /*---------------------------------------------------------------------------------*/ + static constexpr uint32_t MAX_POINTS = 100'000; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + // CPU Buffers + std::vector points; + // GPU Buffers + TripleBuffer vertexBuffers; + TripleUInt numPoints; + // Cached Points for polygon drawing + std::vector spherePoints; + }; +} + +#include "SHDebugDrawSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp new file mode 100644 index 00000000..14fbb42f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -0,0 +1,48 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of template functions the SHDebugDrawSystem + class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +#include "SHDebugDrawSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*-----------------------------------------------------------------------------------*/ + template + void SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + { + // Ensure dereferenced type is SHVec3 + static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); + + // Check if points exceeded max + if (points.size() > MAX_POINTS) + { + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; + } + + const size_t POINTS_COUNT = pointListEnd - pointListBegin; + // Invalid polygon + if (POINTS_COUNT < 2) + { + SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly()."); + return; + } + + const size_t POINTS_ROUNDED_COUNT = POINTS_COUNT / 2 * 2; + for (auto pointIter = pointListBegin; pointIter != (pointListBegin + POINTS_ROUNDED_COUNT); ++pointIter) + { + points.emplace_back(PointVertex{ *pointIter, color }); + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index af3b46e1..eb9269e6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Windowing/Surface/SHVkSurface.h" #include "Graphics/Swapchain/SHVkSwapchain.h" #include "Camera/SHCameraSystem.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "ECS_Base/Managers/SHSystemManager.h" //#include "SHRenderer.h" #include "Graphics/Windowing/SHWindow.h" @@ -37,8 +37,10 @@ of DigiPen Institute of Technology is prohibited. #include "Assets/Asset Types/SHTextureAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" -#include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" #include "Assets/SHAssetManager.h" +#include "Resource/SHResourceManager.h" +#include "Graphics/SHVkUtil.h" +#include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" namespace SHADE { @@ -106,19 +108,16 @@ namespace SHADE descPool = device->CreateDescriptorPools(); // Create generic command buffer - //transferCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); graphicsCmdPool = device->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true); - transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_VS.glsl"); - SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl"); - SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl"); - SHAssetManager::CompileAsset("../../Assets/Shaders/SSAO_CS.glsl"); - SHAssetManager::CompileAsset("../../Assets/Shaders/SSAOBlur_CS.glsl"); - - shaderModuleLibrary.ImportAllShaderSource(device); - shaderModuleLibrary.ReflectAllShaderModules(); + // Load Built In Shaders + static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); + static constexpr AssetID FS_DEFAULT = 46377769; defaultFragShader = SHResourceManager::LoadOrGet(FS_DEFAULT); + static constexpr AssetID VS_DEBUG = 48002439; debugVertShader = SHResourceManager::LoadOrGet(VS_DEBUG); + static constexpr AssetID FS_DEBUG = 36671027; debugFragShader = SHResourceManager::LoadOrGet(FS_DEBUG); + static constexpr AssetID CS_COMPOSITE = 45072428; deferredCompositeShader = SHResourceManager::LoadOrGet(CS_COMPOSITE); + static constexpr AssetID SSAO = 38430899; ssaoShader = SHResourceManager::LoadOrGet(SSAO); + static constexpr AssetID SSAO_BLUR = 39760835; ssaoBlurShader = SHResourceManager::LoadOrGet(SSAO_BLUR); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -220,7 +219,6 @@ namespace SHADE ssaoStorage->PrepareRotationVectorsVkData(device); - auto ssaoShader = shaderModuleLibrary.GetBuiltInShaderModule("SSAO_CS"); Handle ssaoPass = gBufferNode->AddNodeCompute(ssaoShader, {"Position", "Normals", "SSAO"}); auto ssaoDataBuffer = ssaoStorage->GetBuffer(); ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BUFFER_BINDING, { &ssaoDataBuffer, 1 }, 0, ssaoStorage->GetBuffer()->GetSizeStored()); @@ -228,21 +226,21 @@ namespace SHADE auto viewSamplerLayout = ssaoStorage->GetViewSamplerLayout(); ssaoPass->ModifyWriteDescImageComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_IMAGE_BINDING, {&viewSamplerLayout, 1}); - auto ssaoBlurShader = shaderModuleLibrary.GetBuiltInShaderModule("SSAOBlur_CS"); Handle ssaoBlurPass = gBufferNode->AddNodeCompute(ssaoBlurShader, { "SSAO", "SSAO Blur"}); /*-----------------------------------------------------------------------*/ /* DEFERRED COMPOSITE SUBPASS INIT */ /*-----------------------------------------------------------------------*/ - auto deferredCompositeShader = shaderModuleLibrary.GetBuiltInShaderModule("DeferredComposite_CS"); gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene" }); - /*-----------------------------------------------------------------------*/ - /* DUMMY SUBPASS TO TRANSITION SCENE FOR PRESENT USAGE */ - /*-----------------------------------------------------------------------*/ - // Dummy to transition scene to be used for shader read - auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors + // Set up Debug Draw Pass + auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, {"G-Buffer"}); + auto debugDrawSubpass = debugDrawNode->AddSubpass("Debug Draw"); + debugDrawSubpass->AddColorOutput("Scene"); + + // Dummy Node + auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Debug Draw" }); // no predecessors auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); dummySubpass->AddInput("Scene"); @@ -262,10 +260,57 @@ namespace SHADE worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); - auto cubeVS = shaderModuleLibrary.GetBuiltInShaderModule("TestCube_VS"); - auto cubeFS = shaderModuleLibrary.GetBuiltInShaderModule("TestCube_FS"); + // Create default materials + defaultMaterial = AddMaterial(defaultVertShader, defaultFragShader, gBufferSubpass); - defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferSubpass); + // Create debug draw pipeline + auto debugDrawPipelineLayout = resourceManager.Create + ( + device, SHPipelineLayoutParams + { + .shaderModules = { debugVertShader, debugFragShader }, + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() + } + ); + debugDrawPipeline = resourceManager.Create(device, debugDrawPipelineLayout, nullptr, debugDrawNode->GetRenderpass(), debugDrawSubpass); + debugDrawPipeline->GetPipelineState().SetRasterizationState(SHRasterizationState + { + .polygonMode = vk::PolygonMode::eLine, + .cull_mode = vk::CullModeFlagBits::eNone + }); + debugDrawPipeline->GetPipelineState().SetInputAssemblyState(SHInputAssemblyState + { + .topology = vk::PrimitiveTopology::eLineList + }); + + SHVertexInputState debugDrawVertexInputState; + debugDrawVertexInputState.AddBinding(false, true, { SHVertexAttribute(SHAttribFormat::FLOAT_4D), SHVertexAttribute(SHAttribFormat::FLOAT_4D) }); + debugDrawPipeline->GetPipelineState().SetVertexInputState(debugDrawVertexInputState); + SHColorBlendState colorBlendState{}; + colorBlendState.logic_op_enable = VK_FALSE; + colorBlendState.logic_op = vk::LogicOp::eCopy; + + auto const& subpassColorReferences = debugDrawSubpass->GetColorAttachmentReferences(); + colorBlendState.attachments.reserve(subpassColorReferences.size()); + + for (auto& att : subpassColorReferences) + { + colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState + { + .blendEnable = SHVkUtil::IsBlendCompatible(debugDrawSubpass->GetFormatFromAttachmentReference(att.attachment)), + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + } + ); + } + + debugDrawPipeline->GetPipelineState().SetColorBlenState(colorBlendState); + debugDrawPipeline->ConstructPipeline(); } void SHGraphicsSystem::InitMiddleEnd(void) noexcept @@ -696,10 +741,14 @@ namespace SHADE void SHGraphicsSystem::BuildMeshBuffers() { + transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + device->WaitIdle(); transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); + device->WaitIdle(); + transferCmdBuffer.Free(); transferCmdBuffer = {}; } /*---------------------------------------------------------------------------------*/ @@ -724,10 +773,14 @@ namespace SHADE void SHGraphicsSystem::BuildTextures() { + graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + device->WaitIdle(); texLibrary.BuildTextures ( device, graphicsTexCmdBuffer, graphicsQueue, descPool ); + device->WaitIdle(); + graphicsTexCmdBuffer.Free(); graphicsTexCmdBuffer = {}; } #pragma endregion ADD_REMOVE @@ -767,6 +820,7 @@ namespace SHADE void SHGraphicsSystem::EndRoutine::Execute(double) noexcept { reinterpret_cast(system)->EndRender(); + SHResourceManager::FinaliseChanges(); } /*-----------------------------------------------------------------------------------*/ @@ -784,8 +838,13 @@ namespace SHADE if (!renderable.HasChanged()) continue; - // Remove from old material's SuperBatch - Handle prevMaterial = renderable.GetPrevMaterial(); + if (!renderable.GetMesh()) + { + SHLOG_CRITICAL("NULL Mesh provided!"); + } + + // Remove from the SuperBatch it is previously in (prevMat if mat has changed) + Handle prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial(); if (prevMaterial) { Handle oldSuperBatch = prevMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 9b95ebe4..d8b4650e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -25,7 +25,6 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/RenderGraph/SHRenderGraph.h" -#include "Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h" #include "SHMeshLibrary.h" #include "Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h" #include "../Textures/SHTextureLibrary.h" @@ -290,10 +289,13 @@ namespace SHADE Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; Handle GetPrimaryRenderpass() const noexcept; - //SHRenderGraph const& GetRenderGraph(void) const noexcept; - - //Handle GetRenderPass() const { return renderPass; } + Handle GetDebugDrawPipeline(void) const noexcept { return debugDrawPipeline; } + uint32_t GetCurrentFrameIndex(void) const noexcept { return renderContext.GetCurrentFrame(); } + /*-----------------------------------------------------------------------------*/ + /* Getters */ + /*-----------------------------------------------------------------------------*/ + SHWindow* GetWindow() noexcept { return window; } private: /*-----------------------------------------------------------------------------*/ @@ -322,11 +324,12 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - SHResourceHub resourceManager; + SHResourceHub resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHSamplerCache samplerCache; SHMaterialInstanceCache materialInstanceCache; + // Viewports #ifdef SHEDITOR Handle editorViewport; @@ -337,21 +340,26 @@ namespace SHADE Handle worldViewport; // Whole screen std::vector> viewports; // Additional viewports - // Debug Renderers - Handle debugWorldRenderer; - Handle debugScreenRenderer; - // Temp renderers Handle worldRenderer; // Temp Cameras Handle worldCamera; Handle screenCamera; - - SHShaderModuleLibrary shaderModuleLibrary; - // Temp Materials + // Built-In Shaders + Handle defaultVertShader; + Handle defaultFragShader; + Handle debugVertShader; + Handle debugFragShader; + Handle deferredCompositeShader; + Handle ssaoShader; + Handle ssaoBlurShader; + + + // Built-In Materials Handle defaultMaterial; + Handle debugDrawPipeline; Handle worldRenderGraph; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp new file mode 100644 index 00000000..1ad46e04 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp @@ -0,0 +1,77 @@ +/************************************************************************************//*! +\file SHGraphicsSystemInterface.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions of the static + SHGraphicsSystemInterface class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "SHGraphicsSystemInterface.h" +// Project Includes +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/Windowing/SHWindow.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*-----------------------------------------------------------------------------------*/ + uint32_t SHGraphicsSystemInterface::GetWindowWidth() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().first; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window width. Value of 0 returned instead."); + return 0; + } + + uint32_t SHGraphicsSystemInterface::GetWindowHeight() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().second; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window height. Value of 0 returned instead."); + return 0; + } + + bool SHGraphicsSystemInterface::IsFullscreen() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowData().isFullscreen; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window fullscreen status. Value of false returned instead."); + return false; + } + + void SHGraphicsSystemInterface::CloseWindow() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + auto WND = gfxSystem->GetWindow(); + return WND->Close(); + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to close window."); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h new file mode 100644 index 00000000..5bc77ed9 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h @@ -0,0 +1,52 @@ +/************************************************************************************//*! +\file SHGraphicsSystemInterface.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the SHGraphicsSystemInterface static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Static class that wraps up certain functions in the SHGraphicsSystem so that + /// accessing it from SHADE_Managed would not cause issues due to C++20 features. + /// + class SH_API SHGraphicsSystemInterface final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + SHGraphicsSystemInterface() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Retrieves the current window width. + /// + /// The current window width. + static uint32_t GetWindowWidth(); + /// + /// Retrieves the current window height. + /// + /// The current window height. + static uint32_t GetWindowHeight(); + /// + /// Retrieves the current window fullscreen status. + /// + /// The current window fullscreen status.. + static bool IsFullscreen(); + /// + /// Closes the current window, and depending on the implementation, should also + /// close the application. + /// + static void CloseWindow(); + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h new file mode 100644 index 00000000..338c34b2 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file SHMaterialSpec.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the struct definition of SHMaterialSpec. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Standard Library +#include +#include +#include +// Project Includes +#include "Assets/SHAssetMacros.h" + +namespace SHADE +{ + /*************************************************************************************/ + /*! + \brief + Describes a Material's serialized properties. A representation of a material that is + independent of GPU resources. + */ + /*************************************************************************************/ + struct SHMaterialSpec + { + AssetID vertexShader; + AssetID fragShader; + std::string subpassName; + YAML::Node properties; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index be181beb..c9a3f6c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -3,7 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 30, 2022 -\brief Contains definitions for all of the functions of the classes that deal +\brief Contains definitions for all of the functions of the classes that deal with storage and management of vertex and index buffers of meshes. Copyright (C) 2022 DigiPen Institute of Technology. @@ -18,50 +18,59 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Static Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHMeshData SHPrimitiveGenerator::cubeMesh; + SHMeshData SHPrimitiveGenerator::sphereMesh; + + /*-----------------------------------------------------------------------------------*/ + /* Primitive Generation Functions */ + /*-----------------------------------------------------------------------------------*/ SHMeshData SHPrimitiveGenerator::Cube() noexcept { SHMeshData mesh; - mesh.VertexPositions = + mesh.VertexPositions = { // front - SHVec3(-0.5f, -0.5f, 0.5f), - SHVec3( 0.5f, -0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), // back - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3(-0.5f, 0.5f, -0.5f), - SHVec3( 0.5f, 0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, -0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + SHVec3(0.5f, -0.5f, -0.5f), - // top + // top SHVec3(-0.5f, 0.5f, -0.5f), SHVec3(-0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, -0.5f), - + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + // bottom - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, 0.5f), - SHVec3(-0.5f, -0.5f, 0.5f), - + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(0.5f, -0.5f, -0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + // right - SHVec3(0.5f, -0.5f, -0.5f), - SHVec3(0.5f, 0.5f, -0.5f), - SHVec3(0.5f, 0.5f, 0.5f), - SHVec3(0.5f, -0.5f, 0.5f), - + SHVec3(0.5f, -0.5f, -0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + // left - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3(-0.5f, -0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, -0.5f) + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, -0.5f) }; - mesh.VertexTexCoords = + mesh.VertexTexCoords = { SHVec2(0.0f, 1.0f), SHVec2(1.0f, 1.0f), @@ -99,7 +108,7 @@ namespace SHADE SHVec2(0.0f, 0.0f) }; - mesh.VertexTangents = + mesh.VertexTangents = { // front SHVec3(1.0f, 0.0f, 0.0f), @@ -118,7 +127,7 @@ namespace SHADE SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), - + // bottom SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), @@ -193,10 +202,93 @@ namespace SHADE Handle SHPrimitiveGenerator::Cube(SHMeshLibrary& meshLibrary) noexcept { - static SHMeshData meshData = Cube(); + if (cubeMesh.VertexPositions.empty()) + cubeMesh = Cube(); + return addMeshDataTo(cubeMesh, meshLibrary); + } + + Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept + { + if (cubeMesh.VertexPositions.empty()) + cubeMesh = Cube(); + return addMeshDataTo(cubeMesh, gfxSystem); + } + + SHADE::SHMeshData SHPrimitiveGenerator::Sphere() noexcept + { + SHMeshData meshData; + + const int LAT_SLICES = 12; + const int LONG_SLICES = 12; + float radius = 1; + for (int latNum = 0; latNum <= LAT_SLICES; ++latNum) + { + float theta = static_cast(latNum * std::numbers::pi / LAT_SLICES); + float sinTheta = sin(theta); + float cosTheta = cos(theta); + + for (int longNum = 0; longNum <= LONG_SLICES; ++longNum) + { + float phi = static_cast(longNum * 2 * std::numbers::pi / LONG_SLICES); + float sinPhi = sin(phi); + float cosPhi = cos(phi); + + const SHVec3 NORMAL = SHVec3(cosPhi * sinTheta, cosTheta, sinPhi * sinTheta); + meshData.VertexNormals.emplace_back(NORMAL); + meshData.VertexTangents.emplace_back(/* TODO */); + meshData.VertexTexCoords.emplace_back + ( + 1.0f - (longNum / static_cast(LONG_SLICES)), + 1.0f - (latNum / static_cast(LAT_SLICES)) + ); + meshData.VertexPositions.emplace_back(radius * NORMAL.x, radius * NORMAL.y, radius * NORMAL.z); + } + } + + for (int latNumber{}; latNumber < LAT_SLICES; latNumber++) + { + for (int longNumber{}; longNumber < LONG_SLICES; longNumber++) + { + const auto FIRST = (latNumber * (LONG_SLICES + 1)) + longNumber; + const auto SECOND = (FIRST + LONG_SLICES + 1); + + meshData.Indices.emplace_back(FIRST); + meshData.Indices.emplace_back(SECOND); + meshData.Indices.emplace_back(FIRST + 1); + + meshData.Indices.emplace_back(SECOND); + meshData.Indices.emplace_back(SECOND + 1); + meshData.Indices.emplace_back(FIRST + 1); + } + } + + return meshData; + } + + SHADE::Handle SHPrimitiveGenerator::Sphere(SHMeshLibrary& meshLibrary) noexcept + { + if (sphereMesh.VertexPositions.empty()) + sphereMesh = Sphere(); + + return addMeshDataTo(sphereMesh, meshLibrary); + } + + SHADE::Handle SHPrimitiveGenerator::Sphere(SHGraphicsSystem& gfxSystem) noexcept + { + if (sphereMesh.VertexPositions.empty()) + sphereMesh = Sphere(); + + return addMeshDataTo(sphereMesh, gfxSystem); + } + + /*-----------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------------*/ + SHADE::Handle SHPrimitiveGenerator::addMeshDataTo(const SHMeshData& meshData, SHMeshLibrary& meshLibrary) noexcept + { return meshLibrary.AddMesh ( - static_cast(meshData.VertexPositions.size()), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), @@ -206,17 +298,16 @@ namespace SHADE ); } - Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept + SHADE::Handle SHPrimitiveGenerator::addMeshDataTo(const SHMeshData& meshData, SHGraphicsSystem& gfxSystem) noexcept { - static SHMeshData meshData = Cube(); return gfxSystem.AddMesh ( - static_cast(meshData.VertexPositions.size()), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), meshData.VertexNormals.data(), - static_cast(meshData.Indices.size()), + static_cast(meshData.Indices.size()), meshData.Indices.data() ); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index dd059a29..ef4e26a6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -4,9 +4,9 @@ \par email: kahwei.tng\@digipen.edu \date Sep 18, 2022 \brief Contains the static class definition of SHPrimitiveGenerator. - + Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once @@ -29,12 +29,12 @@ namespace SHADE /*************************************************************************************/ /*! \brief - Static class that contains functions for generating 3D primitives. + Static class that contains functions for generating 3D primitives. */ /*************************************************************************************/ class SH_API SHPrimitiveGenerator { - public: + public: /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ @@ -42,7 +42,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Primitive Generation Functions */ - /*---------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ /***********************************************************************************/ /*! \brief @@ -52,20 +52,20 @@ namespace SHADE SHMeshData object containing vertex data for the cube. */ /***********************************************************************************/ - [[nodiscard]] static SHMeshData Cube() noexcept; + [[nodiscard]] static SHMeshData Cube() noexcept; /***********************************************************************************/ /*! \brief Produces a cube and constructs a SHMesh using the SHMeshLibrary provided. \param meshLibrary - Reference to the SHMeshLibrary to procude and store a cube mesh in. + Reference to the SHMeshLibrary to produce and store a cube mesh in. \return SHMesh object that points to the generated cube mesh in the SHMeshLibrary. */ /***********************************************************************************/ - [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; + [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; /***********************************************************************************/ /*! \brief @@ -78,12 +78,55 @@ namespace SHADE SHMesh object that points to the generated cube mesh in the SHGraphicsSystem. */ /***********************************************************************************/ - [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; + [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and stores the data in a SHMeshData object. - private: + \return + SHMeshData object containing vertex data for the sphere. + */ + /***********************************************************************************/ + [[nodiscard]] static SHMeshData Sphere() noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and constructs a SHMesh using the SHMeshLibrary provided. + + \param meshLibrary + Reference to the SHMeshLibrary to produce and store a sphere mesh in. + + \return + SHMesh object that points to the generated sphere mesh in the SHMeshLibrary. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Sphere(SHMeshLibrary& meshLibrary) noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and constructs a SHMesh using the SHGraphicsSystem provided. + + \param gfxSystem + Reference to the SHGraphicsSystem to produce and store a sphere mesh in. + + \return + SHMesh object that points to the generated sphere mesh in the SHGraphicsSystem. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Sphere(SHGraphicsSystem& gfxSystem) noexcept; + + private: /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHMeshData genCubeData() noexcept; + static Handle addMeshDataTo(const SHMeshData& meshData, SHMeshLibrary& meshLibrary) noexcept; + static Handle addMeshDataTo(const SHMeshData& meshData, SHGraphicsSystem& gfxSystem) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + static SHMeshData cubeMesh; + static SHMeshData sphereMesh; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp deleted file mode 100644 index d0b160df..00000000 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "SHPch.h" -#include "SHShaderModuleLibrary.h" -#include "Graphics/Devices/SHVkLogicalDevice.h" -#include "Assets/SHAssetManager.h" - -namespace SHADE -{ - /***************************************************************************/ - /*! - - \brief - Imports all shader binaries from the source library. - - \param logicalDeviceHdl - For creating shader modules. - - \param sourceLib - The source library class that stores the container of shader binary data. - - */ - /***************************************************************************/ - //void SHShaderModuleLibrary::ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept - //{ - // auto const& sources = sourceLib.GetSourceLibrary(); - // for (auto const& source : sources) - // { - // vk::ShaderStageFlagBits shaderType{}; - // switch (source.shaderType) - // { - // case SH_SHADER_TYPE::VERTEX: - // shaderType = vk::ShaderStageFlagBits::eVertex; - // break; - // case SH_SHADER_TYPE::FRAGMENT: - // shaderType = vk::ShaderStageFlagBits::eFragment; - // break; - // case SH_SHADER_TYPE::COMPUTE: - // shaderType = vk::ShaderStageFlagBits::eCompute; - // break; - // default: - // shaderType = vk::ShaderStageFlagBits::eVertex; - // break; - // } - - // Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(source.spirvBinary, "main", shaderType, source.name); - // shaderModules.emplace(source.id, newShaderModule); - // stringToID.emplace(source.name, source.id); - // } - //} - - /***************************************************************************/ - /*! - - \brief - Gets the shader module based on module name. - - \param shaderName - - \return - - */ - /***************************************************************************/ - //Handle SHShaderModuleLibrary::GetShaderModule(std::string shaderName) const noexcept - //{ - // if (stringToID.contains(shaderName)) - // return shaderModules.at(stringToID.at(shaderName)); - // else - // return {}; - //} - - vk::ShaderStageFlagBits SHShaderModuleLibrary::GetVkShaderFlag(SH_SHADER_TYPE type) noexcept - { - vk::ShaderStageFlagBits shaderType{}; - switch (type) - { - case SH_SHADER_TYPE::VERTEX: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - case SH_SHADER_TYPE::FRAGMENT: - shaderType = vk::ShaderStageFlagBits::eFragment; - break; - case SH_SHADER_TYPE::COMPUTE: - shaderType = vk::ShaderStageFlagBits::eCompute; - break; - default: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - } - - return shaderType; - } - - Handle SHShaderModuleLibrary::GetBuiltInShaderModule(std::string shaderName) const noexcept - { - if (builtInShaderModules.contains(shaderName)) - return builtInShaderModules.at(shaderName); - else - return {}; - } - - void SHShaderModuleLibrary::ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept - { - uint32_t idCounter{ 0 }; - - auto const data = SHAssetManager::GetAllDataOfType(AssetType::SHADER); - for (auto const& dataPtr : data) - { - auto const shader = dynamic_cast(dataPtr); - - Handle newShaderModule = - logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", GetVkShaderFlag(shader->shaderType), shader->name); - - shaderModules.emplace(idCounter++, newShaderModule); - } - - auto const builtIn = SHAssetManager::GetAllDataOfType(AssetType::SHADER_BUILT_IN); - for (auto const& dataPtr : builtIn) - { - auto const shader = dynamic_cast(dataPtr); - - Handle newShaderModule = - logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", GetVkShaderFlag(shader->shaderType), shader->name); - - builtInShaderModules.emplace(shader->name, newShaderModule); - } - } - - void SHShaderModuleLibrary::ReflectAllShaderModules() noexcept - { - for (auto& module : shaderModules) - { - module.second->Reflect(); - } - - for (auto& module : builtInShaderModules) - { - module.second->Reflect(); - } - } -} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h deleted file mode 100644 index 9daae816..00000000 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef SH_SHADER_MODULE_LIBRARY_H -#define SH_SHADER_MODULE_LIBRARY_H - -#include "Graphics/Shaders/SHVkShaderModule.h" -#include "Assets/Asset Types/SHShaderAsset.h" - -namespace SHADE -{ - class SHVkLogicalDevice; - - /* - * The purpose of this shader module library is to be separate from the source library. The source library contains - * pure shader binary data that contains no vulkan related objects. Every time we load on unload a scene/level, - * this class and the source library class is cleared of its modules and recreated. - */ - class SHShaderModuleLibrary - { - private: - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*-----------------------------------------------------------------------*/ - //! Stored shader modules - std::unordered_map> shaderModules; - std::unordered_map> builtInShaderModules; - - inline vk::ShaderStageFlagBits GetVkShaderFlag(SH_SHADER_TYPE type) noexcept; - - public: - /*-----------------------------------------------------------------------*/ - /* PUBLIC MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - //void ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept; - - /*-----------------------------------------------------------------------*/ - /* SETTERS AND GETTERS */ - /*-----------------------------------------------------------------------*/ - Handle GetBuiltInShaderModule(std::string shaderName) const noexcept; - - void ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept; - void ReflectAllShaderModules() noexcept; - }; -} - -#endif \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index 7378cc48..7e313ed6 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -47,12 +47,13 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ + //! For constructing a graphics pipeline SHVkPipeline (Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass) noexcept; - + //! For constructing a compute pipeline SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout) noexcept; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 44a1cb0e..e0dbc1a4 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -54,13 +54,14 @@ namespace SHADE if (wndData.isFullscreen) { - dwExStyle = WS_EX_APPWINDOW | WS_EX_ACCEPTFILES; + dwExStyle = WS_EX_APPWINDOW; dwStyle = WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; + dwExStyle |= WS_EX_ACCEPTFILES; } else { - dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE | WS_EX_ACCEPTFILES; - + dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; + dwExStyle |= WS_EX_ACCEPTFILES; if (wndData.frameEnabled) { dwStyle = WNDSTYLE::SHWS_WINDOWED; @@ -87,7 +88,7 @@ namespace SHADE } } - //DPI_AWARENESS_CONTEXT prevDPIContext = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); + DPI_AWARENESS_CONTEXT prevDPIContext = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); RECT windowRect; windowRect.left = wndData.x; //or CW_USEDEFAULT ? @@ -97,13 +98,16 @@ namespace SHADE AdjustWindowRectEx(&windowRect, dwStyle, false, dwExStyle); //Create window - wndHWND = CreateWindowEx(0, (LPWSTR) wndData.name.c_str(), (LPWSTR)wndData.title.c_str(), dwStyle, 0, 0, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top, parent, NULL, hInstance, NULL); - + wndHWND = CreateWindowEx(dwExStyle, (LPWSTR) wndData.name.c_str(), (LPWSTR)wndData.title.c_str(), dwStyle, 0, 0, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top, parent, NULL, hInstance, NULL); + if (!wndHWND) { //DWORD err = GetLastError(); return false; } + BOOL help = ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD); + help &= ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD); + help &= ChangeWindowMessageFilter (0x0049, MSGFLT_ADD); if (wndData.isVisible) { @@ -256,7 +260,7 @@ namespace SHADE return wndHWND; } - const WindowData SHWindow::GetWindowData() + const WindowData SHWindow::GetWindowData() const { return wndData; } @@ -318,13 +322,13 @@ namespace SHADE case WM_CREATE: OnCreate(hwnd, reinterpret_cast(wparam)); break; + case WM_QUIT: case WM_CLOSE: - case WM_DESTROY: OnDestroy(); return 0; case WM_DROPFILES: - //OnFileDrop(reinterpret_cast(wparam)); + OnFileDrop(reinterpret_cast(wparam)); break; case WM_ENTERSIZEMOVE: case WM_EXITSIZEMOVE: @@ -386,12 +390,25 @@ namespace SHADE void SHWindow::OnDestroy() { OnClose(); + DragAcceptFiles(wndHWND, false); this->Destroy(); } - //void SHWindow::OnFileDrop(HDROP drop) - //{ - //} + void SHWindow::OnFileDrop(HDROP drop) + { + + int const numFiles = static_cast(DragQueryFile(drop, 0xFFFFFFFF, nullptr, 0)); + for(int i = 0; i < numFiles; ++i) + { + //char fileNameBuffer[MAX_PATH]; + std::wstring fileNameBuffer; + fileNameBuffer.reserve(MAX_PATH); + DragQueryFile(drop, static_cast(i), fileNameBuffer.data(), MAX_PATH); + std::string name(fileNameBuffer.begin(), fileNameBuffer.end()); + SHLOG_INFO("Dropped: {}", name) + } + DragFinish(drop); + } void SHWindow::OnSize([[maybe_unused]] UINT msg,[[maybe_unused]] UINT type, SIZE size) { diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 0a180285..11308d90 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -2,6 +2,7 @@ #define SH_WINDOW_H #include +#include #include #include #include "SHWindowMap.h" @@ -10,7 +11,7 @@ namespace SHADE { constexpr uint16_t MAX_BUFFER = 1024; - + enum WNDSTYLE : DWORD { SHWS_WINDOWED = WS_OVERLAPPEDWINDOW, @@ -47,7 +48,7 @@ namespace SHADE //bool canFullscreen = true; - unsigned bgColor = WHITE_BRUSH; + unsigned bgColor = DKGRAY_BRUSH; //bool transparent = false; @@ -122,7 +123,7 @@ namespace SHADE HWND GetHWND(); - const WindowData GetWindowData(); + const WindowData GetWindowData() const; CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); @@ -168,7 +169,7 @@ namespace SHADE void OnCreate(HWND hwnd, LPCREATESTRUCT create_struct); void OnClose(); void OnDestroy(); - //void OnFileDrop(HDROP drop); + void OnFileDrop(HDROP drop); void OnSize(UINT msg, UINT type, SIZE size); void OnPosChange(LPWINDOWPOS pos); void OnPaint(HDC hdc, LPPAINTSTRUCT paint); diff --git a/SHADE_Engine/src/Math/SHColour.cpp b/SHADE_Engine/src/Math/SHColour.cpp index 8aae2cb3..944c37cb 100644 --- a/SHADE_Engine/src/Math/SHColour.cpp +++ b/SHADE_Engine/src/Math/SHColour.cpp @@ -87,19 +87,19 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHColour::SHColour() noexcept - : SHVec4 { 0.0f, 0.0f, 0.0f, 1.0f } + : XMFLOAT4 { 0.0f, 0.0f, 0.0f, 1.0f } {} SHColour::SHColour(float r, float g, float b) noexcept - : SHVec4 { r, g, b, 1.0f } + : XMFLOAT4 { r, g, b, 1.0f } {} SHColour::SHColour(float r, float g, float b, float a) noexcept - : SHVec4 { r, g, b, a } + : XMFLOAT4 { r, g, b, a } {} SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b) noexcept - : SHVec4 + : XMFLOAT4 { static_cast(r) / 255.0f, static_cast(g) / 255.0f, @@ -109,7 +109,7 @@ namespace SHADE {} SHColour::SHColour(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept - : SHVec4 + : XMFLOAT4 { static_cast(r) / 255.0f, static_cast(g) / 255.0f, @@ -118,12 +118,24 @@ namespace SHADE } {} - SHColour::SHColour(const DirectX::XMFLOAT3& colour) noexcept - : SHVec4 { colour.x, colour.y, colour.z, 1.0f } + SHColour::SHColour(const SHVec3& rgb) noexcept + : XMFLOAT4 { rgb.x, rgb.y, rgb.z, 1.0f } + {} + + SHColour::SHColour(const SHVec4& rgba) noexcept + : XMFLOAT4 { rgba.x, rgba.y, rgba.z, rgba.w } + {} + + SHColour::SHColour(const DirectX::XMFLOAT3& rgb) noexcept + : XMFLOAT4 { rgb.x, rgb.y, rgb.z, 1.0f } + {} + + SHColour::SHColour(const DirectX::XMFLOAT4& rgba) noexcept + : XMFLOAT4 { rgba.x, rgba.y, rgba.z, rgba.w } {} SHColour::SHColour(const DirectX::XMVECTORF32& colour) noexcept - : SHVec4 + : XMFLOAT4 { XMVectorGetX(colour), XMVectorGetY(colour), @@ -136,6 +148,86 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ + SHColour::operator XMVECTOR() const noexcept + { + return XMLoadFloat4(this); + } + + SHColour::operator SHVec4() const noexcept + { + return SHVec4{ *this }; + } + + SHColour& SHColour::operator+=(const SHColour& rhs) noexcept + { + return *this = *this + rhs; + } + + SHColour& SHColour::operator-=(const SHColour& rhs) noexcept + { + return *this = *this - rhs; + } + + SHColour& SHColour::operator*=(const SHColour& rhs) noexcept + { + return *this = *this * rhs; + } + + SHColour& SHColour::operator*=(float rhs) noexcept + { + return *this = *this * rhs; + } + + SHColour& SHColour::operator/=(const SHColour& rhs) noexcept + { + return *this = *this / rhs; + } + + SHColour SHColour::operator+(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorAdd(*this, rhs)); + return result; + } + + SHColour SHColour::operator-(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorSubtract(*this, rhs)); + return result; + } + + SHColour SHColour::operator-() const noexcept + { + return SHColour{ -x, -y, -z, -w }; + } + + SHColour SHColour::operator*(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorMultiply(*this, rhs)); + return result; + } + + SHColour SHColour::operator*(float rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorScale(*this, rhs)); + return result; + } + + SHColour SHColour::operator/(const SHColour& rhs) const noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorDivide(*this, rhs)); + return result; + } + bool SHColour::operator==(const SHColour& rhs) const noexcept { return XMColorEqual(*this, rhs); @@ -146,6 +238,70 @@ namespace SHADE return XMColorNotEqual(*this, rhs); } + float& SHColour::operator[](int index) + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float& SHColour::operator[](size_t index) + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float SHColour::operator[](int index) const + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + float SHColour::operator[](size_t index) const + { + if (index >= SIZE || index < 0) + throw std::invalid_argument("Index out of range!"); + + switch (index) + { + case 0: return x; + case 1: return y; + case 2: return z; + case 3: return w; + } + } + + SHColour operator* (float lhs, const SHColour& rhs) noexcept + { + SHColour result; + + XMStoreFloat4(&result, XMVectorScale(rhs, lhs)); + return result; + } + /*-----------------------------------------------------------------------------------*/ /* Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/SHColour.h b/SHADE_Engine/src/Math/SHColour.h index bd2bc9e7..a6adf7bb 100644 --- a/SHADE_Engine/src/Math/SHColour.h +++ b/SHADE_Engine/src/Math/SHColour.h @@ -19,12 +19,6 @@ namespace SHADE { - /*-----------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*-----------------------------------------------------------------------------------*/ - - class SHColour; - /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -40,7 +34,7 @@ namespace SHADE float v = 0.0f; }; - class SH_API SHColour : private SHVec4 + class SH_API SHColour : public DirectX::XMFLOAT4 { public: /*---------------------------------------------------------------------------------*/ @@ -53,9 +47,11 @@ namespace SHADE SHColour (uint8_t r, uint8_t g, uint8_t b) noexcept; SHColour (uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept; - SHColour (const SHVec3& colour) noexcept; - SHColour (const DirectX::XMFLOAT3& colour) noexcept; - SHColour (const DirectX::XMVECTORF32& colour) noexcept; + SHColour (const SHVec3& rgb) noexcept; + SHColour (const SHVec4& rgba) noexcept; + SHColour (const DirectX::XMFLOAT3& rgb) noexcept; + SHColour (const DirectX::XMFLOAT4& rgba) noexcept; + SHColour (const DirectX::XMVECTORF32& rgba) noexcept; SHColour (const SHColour&) = default; SHColour (SHColour&&) = default; @@ -66,11 +62,32 @@ namespace SHADE /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHColour& operator= (const SHColour&) = default; - SHColour& operator= (SHColour&&) = default; + SHColour& operator= (const SHColour&) = default; + SHColour& operator= (SHColour&&) = default; - bool operator== (const SHColour& rhs) const noexcept; - bool operator!= (const SHColour& rhs) const noexcept; + operator DirectX::XMVECTOR () const noexcept; + operator SHVec4 () const noexcept; + + SHColour& operator+= (const SHColour& rhs) noexcept; + SHColour& operator-= (const SHColour& rhs) noexcept; + SHColour& operator*= (const SHColour& rhs) noexcept; + SHColour& operator*= (float rhs) noexcept; + SHColour& operator/= (const SHColour& rhs) noexcept; + + [[nodiscard]] SHColour operator+ (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator- (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator- () const noexcept; + [[nodiscard]] SHColour operator* (const SHColour& rhs) const noexcept; + [[nodiscard]] SHColour operator* (float rhs) const noexcept; + [[nodiscard]] SHColour operator/ (const SHColour& rhs) const noexcept; + + [[nodiscard]] bool operator== (const SHColour& rhs) const noexcept; + [[nodiscard]] bool operator!= (const SHColour& rhs) const noexcept; + + [[nodiscard]] float& operator[] (int index); + [[nodiscard]] float& operator[] (size_t index); + [[nodiscard]] float operator[] (int index) const; + [[nodiscard]] float operator[] (size_t index) const; /*---------------------------------------------------------------------------------*/ /* Properties */ @@ -105,6 +122,8 @@ namespace SHADE /* Static Data Members */ /*---------------------------------------------------------------------------------*/ + static constexpr size_t SIZE = 4U; + static const SHColour BEIGE ; static const SHColour BLACK ; static const SHColour BLUE ; @@ -159,8 +178,9 @@ namespace SHADE static const SHColour TURQUOISE ; static const SHColour VIOLET ; static const SHColour WHITE ; - static const SHColour YELLOW; + static const SHColour YELLOW ; }; + SHColour operator* (float lhs, const SHColour& rhs) noexcept; } // namespace SHADE diff --git a/SHADE_Engine/src/Math/SHMath.h b/SHADE_Engine/src/Math/SHMath.h index 5fcea9fc..3a24d6ef 100644 --- a/SHADE_Engine/src/Math/SHMath.h +++ b/SHADE_Engine/src/Math/SHMath.h @@ -9,4 +9,6 @@ #include "SHQuaternion.h" #include "SHMatrix.h" +#include "SHColour.h" + #include "Transform/SHTransform.h" \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index e56cbc8d..fa0befa3 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -14,6 +14,7 @@ #include "SHTransformComponent.h" // Project Headers #include "Math/SHMathHelpers.h" +#include "Reflection/SHReflectionMetadata.h" namespace SHADE { @@ -184,7 +185,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) - .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation) ) - .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); + .property("Translate" ,&SHTransformComponent::GetLocalPosition ,&SHTransformComponent::SetLocalPosition ) (metadata(META::tooltip, "Translate")) + .property("Rotate" ,&SHTransformComponent::GetLocalRotation ,select_overload(&SHTransformComponent::SetLocalRotation)) (metadata(META::tooltip, "Rotate"), metadata(META::angleInRad, true)) + .property("Scale" ,&SHTransformComponent::GetLocalScale ,&SHTransformComponent::SetLocalScale ) (metadata(META::tooltip, "Scale")); } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index c90e4431..f000aa5b 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -47,16 +47,14 @@ namespace SHADE { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - - // TODO(Diren): Consider how to clear dirty in pause / stop mode and update physics, but do not clear in play mode. - UpdateEntity(SCENE_GRAPH.GetRoot(), false); + UpdateEntity(SCENE_GRAPH.GetRoot(), !IsRunInEditorPause); } void SHTransformSystem::TransformPostPhysicsUpdate::Execute(double) noexcept { // Get the current scene graph to traverse and update const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - UpdateEntity(SCENE_GRAPH.GetRoot(), true); + UpdateEntity(SCENE_GRAPH.GetRoot(), IsRunInEditorPause); } void SHTransformSystem::Init() diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index 88e7f5c9..943d540e 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -14,6 +14,7 @@ #include "SHVec4.h" // Project Headers #include "Math/SHMatrix.h" +#include "Math/SHColour.h" #include "Tools/SHLogger.h" using namespace DirectX; diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index db8ef860..3c509039 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -23,7 +23,9 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ + class SHMatrix; + class SHColour; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index fb999847..c7e327fa 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -146,4 +146,12 @@ namespace SHADE system->RemoveCollisionShape(GetEID(), index); } -} // namespace SHADE \ No newline at end of file +} // namespace SHADE + +RTTR_REGISTRATION +{ + using namespace rttr; + using namespace SHADE; + + registration::class_("Collider Component"); +} \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index af726b51..7ce272a9 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -100,5 +100,6 @@ namespace SHADE SHQuaternion orientation; Colliders colliders; + RTTR_ENABLE() }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index c1969557..369d26a5 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -18,6 +18,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" +#include "Math/SHMathHelpers.h" #include "Physics/SHPhysicsSystem.h" namespace SHADE @@ -28,21 +29,9 @@ namespace SHADE SHRigidBodyComponent::SHRigidBodyComponent() noexcept : type { Type::DYNAMIC } - , flags { 0 } - , dirtyFlags { 0 } , interpolate { true } , rp3dBody { nullptr } - , mass { 1.0f } - , drag { 0.01f } - , angularDrag { 0.01f } - { - // Set default flags: Gravity & Sleeping enabled - flags |= 1U << 0; - flags |= 1U << 1; - - // Set all dirty flags to true - dirtyFlags = 1023; - } + {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ @@ -50,12 +39,24 @@ namespace SHADE bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { - return flags & (1U << 0); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isGravityEnabled(); } bool SHRigidBodyComponent::IsAllowedToSleep() const noexcept { - return flags & (1U << 1); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->isAllowedToSleep(); } bool SHRigidBodyComponent::IsInterpolating() const noexcept @@ -70,67 +71,151 @@ namespace SHADE float SHRigidBodyComponent::GetMass() const noexcept { - return mass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getMass(); } float SHRigidBodyComponent::GetDrag() const noexcept { - return drag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getLinearDamping(); } float SHRigidBodyComponent::GetAngularDrag() const noexcept { - return angularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return 0.0f; + } + + return rp3dBody->getAngularDamping(); } bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { - return flags & (1U << 2); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { - return flags & (1U << 3); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { - return flags & (1U << 4); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); + return SHMath::CompareFloat(LINEAR_CONSTRAINTS.z, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { - return flags & (1U << 5); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.x, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { - return flags & (1U << 6); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.y, 0.0f); } bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { - return flags & (1U << 7); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); + return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.z, 0.0f); } - const SHVec3& SHRigidBodyComponent::GetForce() const noexcept + SHVec3 SHRigidBodyComponent::GetForce() const noexcept { - return force; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return false; + } + + return rp3dBody->getForce(); } - const SHVec3& SHRigidBodyComponent::GetTorque() const noexcept + SHVec3 SHRigidBodyComponent::GetTorque() const noexcept { - return torque; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getTorque(); } - const SHVec3& SHRigidBodyComponent::GetLinearVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept { - return linearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getLinearVelocity(); } - const SHVec3& SHRigidBodyComponent::GetAngularVelocity() const noexcept + SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept { - return angularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return SHVec3::Zero; + } + + return rp3dBody->getAngularVelocity(); } const SHVec3& SHRigidBodyComponent::GetPosition() const noexcept @@ -157,8 +242,15 @@ namespace SHADE if (type == newType) return; - dirtyFlags |= 1U << 4; type = newType; + + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setType(static_cast(type)); } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept @@ -171,8 +263,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << FLAG_POS; - enableGravity ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->enableGravity(enableGravity); } void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept @@ -185,92 +282,127 @@ namespace SHADE return; } - dirtyFlags |= 1U << 1; - isAllowedToSleep ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setIsAllowedToSleep(isAllowedToSleep); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { - static constexpr int FLAG_POS = 2; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.x = freezePositionX ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { - static constexpr int FLAG_POS = 3; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.y = freezePositionY ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { - static constexpr int FLAG_POS = 4; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 2; - freezePositionZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); + linearConstraints.z = freezePositionZ ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(linearConstraints); } void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { - static constexpr int FLAG_POS = 5; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.x = freezeRotationX ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { - static constexpr int FLAG_POS = 6; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.y = freezeRotationY ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { - static constexpr int FLAG_POS = 7; - if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - dirtyFlags |= 1U << 3; - freezeRotationZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); + angularConstraints.z = freezeRotationZ ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(angularConstraints); } void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept @@ -283,11 +415,16 @@ namespace SHADE if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) - return; + return; } - dirtyFlags |= 1U << 5; - mass = newMass; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setMass(newMass); } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept @@ -298,8 +435,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 6; - drag = newDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newDrag); } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept @@ -310,8 +452,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 7; - angularDrag = newAngularDrag; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearDamping(newAngularDrag); } void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept @@ -322,8 +469,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 8; - linearVelocity = newLinearVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setLinearVelocity(newLinearVelocity); } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept @@ -334,8 +486,13 @@ namespace SHADE return; } - dirtyFlags |= 1U << 9; - angularVelocity = newAngularVelocity; + if (rp3dBody == nullptr) + { + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + return; + } + + rp3dBody->setAngularVelocity(newAngularVelocity); } /*-----------------------------------------------------------------------------------*/ @@ -346,7 +503,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -357,7 +514,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -368,7 +525,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -379,7 +536,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -390,7 +547,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -401,7 +558,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -412,7 +569,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } @@ -423,7 +580,7 @@ namespace SHADE { if (rp3dBody == nullptr) { - SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) return; } diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 3c5dd4f9..ba7d2dd9 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -94,10 +94,10 @@ namespace SHADE [[nodiscard]] bool GetFreezeRotationY () const noexcept; [[nodiscard]] bool GetFreezeRotationZ () const noexcept; - [[nodiscard]] const SHVec3& GetForce () const noexcept; - [[nodiscard]] const SHVec3& GetTorque () const noexcept; - [[nodiscard]] const SHVec3& GetLinearVelocity () const noexcept; - [[nodiscard]] const SHVec3& GetAngularVelocity () const noexcept; + [[nodiscard]] SHVec3 GetForce () const noexcept; + [[nodiscard]] SHVec3 GetTorque () const noexcept; + [[nodiscard]] SHVec3 GetLinearVelocity () const noexcept; + [[nodiscard]] SHVec3 GetAngularVelocity () const noexcept; [[nodiscard]] const SHVec3& GetPosition () const noexcept; [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; @@ -149,28 +149,13 @@ namespace SHADE static constexpr size_t NUM_FLAGS = 8; static constexpr size_t NUM_DIRTY_FLAGS = 16; - Type type; - - // rX rY rZ pX pY pZ slp g - uint8_t flags; - // 0 0 0 0 0 0 aV lV aD d m t ag lc slp g - uint16_t dirtyFlags; - bool interpolate; + Type type; + bool interpolate; reactphysics3d::RigidBody* rp3dBody; - float mass; - float drag; - float angularDrag; - - SHVec3 force; - SHVec3 linearVelocity; - - SHVec3 torque; - SHVec3 angularVelocity; - - SHVec3 position; - SHQuaternion orientation; + SHVec3 position; + SHQuaternion orientation; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp index 9488042d..6cea3dc1 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -17,6 +17,7 @@ #include "Math/Geometry/SHBoundingSphere.h" #include "Math/Transform/SHTransformComponent.h" #include "Math/SHMathHelpers.h" +#include "Reflection/SHReflectionMetadata.h" namespace SHADE { @@ -158,6 +159,11 @@ namespace SHADE return positionOffset; } + const SHVec3& SHCollider::GetRotationOffset() const noexcept + { + return rotationOffset; + } + SHShape* SHCollider::GetShape() noexcept { dirty = true; @@ -275,6 +281,12 @@ namespace SHADE } } + void SHCollider::SetRotationOffset(const SHVec3& rotOffset) noexcept + { + dirty = true; + rotationOffset = rotOffset; + } + /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -316,5 +328,6 @@ RTTR_REGISTRATION ); registration::class_("Collider") - .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset); + .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset) + .property("Rotation Offset", &SHCollider::GetRotationOffset, &SHCollider::SetRotationOffset) (metadata(META::angleInRad, true)); } \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h index f760ffd0..8cc233c4 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -80,6 +80,7 @@ namespace SHADE [[nodiscard]] const SHPhysicsMaterial& GetMaterial () const noexcept; [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; + [[nodiscard]] const SHVec3& GetRotationOffset () const noexcept; [[nodiscard]] SHShape* GetShape () noexcept; @@ -96,7 +97,8 @@ namespace SHADE void SetDensity (float density) noexcept; void SetMaterial (const SHPhysicsMaterial& newMaterial) noexcept; - void SetPositionOffset (const SHVec3& positionOffset) noexcept; + void SetPositionOffset (const SHVec3& posOffset) noexcept; + void SetRotationOffset (const SHVec3& rotOffset) noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -110,6 +112,7 @@ namespace SHADE SHShape* shape; SHPhysicsMaterial material; SHVec3 positionOffset; + SHVec3 rotationOffset; /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 4d4d8cd7..37c1269e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -130,6 +130,8 @@ namespace SHADE int SHPhysicsObject::AddCollider(SHCollider* collider) { + const rp3d::Transform OFFSETS{ collider->GetPositionOffset(), collider->GetRotationOffset() }; + switch (collider->GetType()) { case SHCollider::Type::BOX: @@ -137,7 +139,7 @@ namespace SHADE const auto* box = reinterpret_cast(collider->GetShape()); rp3d::BoxShape* newBox = factory->createBoxShape(box->GetHalfExtents()); - rp3dBody->addCollider(newBox, rp3d::Transform{ collider->GetPositionOffset(), SHQuaternion::Identity }); + rp3dBody->addCollider(newBox, OFFSETS); break; } case SHCollider::Type::SPHERE: @@ -145,7 +147,7 @@ namespace SHADE const auto* sphere = reinterpret_cast(collider->GetShape()); rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetRadius()); - rp3dBody->addCollider(newSphere, rp3d::Transform{ collider->GetPositionOffset(), SHQuaternion::Identity }); + rp3dBody->addCollider(newSphere, OFFSETS); break; } // TODO(Diren): Add more collider shapes @@ -168,96 +170,6 @@ namespace SHADE rp3dBody->removeCollider(collider); } - void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent* rb) const noexcept - { - SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") - - if (rb->dirtyFlags == 0) - return; - - auto* rigidBody = reinterpret_cast(rp3dBody); - - const uint16_t RB_FLAGS = rb->dirtyFlags; - for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) - { - // Check if current dirty flag has been set to true - if (RB_FLAGS & 1U << i) - { - switch (i) - { - case 0: // Gravity - { - rigidBody->enableGravity(rb->IsGravityEnabled()); - break; - } - case 1: // Sleeping - { - rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); - break; - } - case 2: // Linear Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 2 ? 0.0f : 1.0f, - rb->flags & 1U << 3 ? 0.0f : 1.0f, - rb->flags & 1U << 4 ? 0.0f : 1.0f - }; - - - rigidBody->setLinearLockAxisFactor(CONSTRAINTS); - break; - } - case 3: // Angular Constraints - { - const rp3d::Vector3 CONSTRAINTS - { - rb->flags & 1U << 5 ? 0.0f : 1.0f, - rb->flags & 1U << 6 ? 0.0f : 1.0f, - rb->flags & 1U << 7 ? 0.0f : 1.0f - }; - - rigidBody->setAngularLockAxisFactor(CONSTRAINTS); - break; - } - case 4: // Type - { - rigidBody->setType(static_cast(rb->GetType())); - break; - } - case 5: // Mass - { - rigidBody->setMass(rb->GetMass()); - break; - } - case 6: // Drag - { - rigidBody->setLinearDamping(rb->GetDrag()); - break; - } - case 7: // Angular Drag - { - rigidBody->setAngularDamping(rb->GetAngularDrag()); - break; - } - case 8: // Linear Velocity - { - rigidBody->setLinearVelocity(rb->GetLinearVelocity()); - break; - } - case 9: // Angular Velocity - { - rigidBody->setAngularVelocity(rb->GetAngularVelocity()); - break; - } - default: break; - } - } - } - - rb->dirtyFlags = 0; - } - void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { int index = 0; @@ -266,9 +178,13 @@ namespace SHADE if (!collider.dirty) continue; - // Update offsets auto* rp3dCollider = rp3dBody->getCollider(index); - rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), SHQuaternion::Identity)); + + // Update trigger flag + rp3dCollider->setIsTrigger(collider.IsTrigger()); + + // Update offsets + rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), collider.GetRotationOffset())); switch (collider.GetType()) { @@ -293,6 +209,8 @@ namespace SHADE default: break; } + // TODO(Diren): Update Material + collider.dirty = false; ++index; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 67e5ec64..64caacdb 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -72,7 +72,6 @@ namespace SHADE int AddCollider (SHCollider* collider); void RemoveCollider (int index); - void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; void SyncColliders (SHColliderComponent* c) const noexcept; private: diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 44142aaf..e1acccd9 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -17,10 +17,10 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Editor/SHEditor.hpp" #include "Math/SHMathHelpers.h" -#include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Scene/SHSceneManager.h" +#include "Scripting/SHScriptEngine.h" namespace SHADE { @@ -99,6 +99,16 @@ namespace SHADE return 0; } + const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetCollisionInfo() const noexcept + { + return collisionInfo; + } + + const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetTriggerInfo() const noexcept + { + return triggerInfo; + } + /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -187,6 +197,7 @@ namespace SHADE settings.defaultBounciness = 0.0f; world = factory.createPhysicsWorld(settings); + world->setEventListener(this); // Set up solvers world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); @@ -200,6 +211,12 @@ namespace SHADE const std::shared_ptr REMOVE_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::RemovePhysicsComponent) }; const ReceiverPtr REMOVE_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(REMOVE_COMPONENT_RECEIVER); SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, REMOVE_COMPONENT_RECEIVER_PTR); + + #ifdef SHEDITOR + const std::shared_ptr EDITOR_STOP_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::ResetWorld) }; + const ReceiverPtr EDITOR_STOP_RECEIVER_PTR = std::dynamic_pointer_cast(EDITOR_STOP_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, EDITOR_STOP_RECEIVER_PTR); + #endif } void SHPhysicsSystem::Exit() @@ -246,7 +263,10 @@ namespace SHADE if (physicsObject.rp3dBody == nullptr) continue; - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + if (transformComponent && transformComponent->HasChanged()) { const auto WORLD_POS = transformComponent->GetWorldPosition(); @@ -255,68 +275,119 @@ namespace SHADE physicsObject.SetPosition(WORLD_POS); physicsObject.SetOrientation(WORLD_ROT); - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + // Sync physics component transforms + if (rigidBodyComponent) { rigidBodyComponent->position = WORLD_POS; rigidBodyComponent->orientation = WORLD_ROT; - - // Clear all forces and velocities if editor is stopped - if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) - { - auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - rp3dRigidBody->setLinearVelocity(SHVec3::Zero); - rp3dRigidBody->setAngularVelocity(SHVec3::Zero); - } } - auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); if (colliderComponent) { colliderComponent->position = WORLD_POS; colliderComponent->orientation = WORLD_ROT; } } - } - // Update bodies and colliders if component is dirty - system->SyncRigidBodyComponents(SHComponentManager::GetDense()); - system->SyncColliderComponents(SHComponentManager::GetDense()); + // Sync rigid bodies + + if (rigidBodyComponent) + { + // Sync active states + const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; + SyncActiveStates(physicsObject, COMPONENT_ACTIVE); + + if (!COMPONENT_ACTIVE) + continue; + } + + // Sync colliders + + if (colliderComponent) + { + const bool COMPONENT_ACTIVE = colliderComponent->isActive; + SyncActiveStates(physicsObject, colliderComponent->isActive); + + if (!COMPONENT_ACTIVE) + continue; + + physicsObject.SyncColliders(colliderComponent); + } + } } void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept { - auto* system = reinterpret_cast(GetSystem()); - fixedTimeStep = 1.0 / system->fixedDT; + auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) + { + SHLOGV_WARNING("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + } + + fixedTimeStep = 1.0 / physicsSystem->fixedDT; accumulatedTime += dt; int count = 0; while (accumulatedTime > fixedTimeStep) { - system->world->update(static_cast(fixedTimeStep)); + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteFixedUpdates(); + + physicsSystem->world->update(static_cast(fixedTimeStep)); accumulatedTime -= fixedTimeStep; ++count; } stats.numSteps = count; - system->worldUpdated = count > 0; + physicsSystem->worldUpdated = count > 0; - system->interpolationFactor = accumulatedTime / fixedTimeStep; + physicsSystem->interpolationFactor = accumulatedTime / fixedTimeStep; } void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept { - auto* system = reinterpret_cast(GetSystem()); + auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) + { + SHLOGV_WARNING("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); + } // Interpolate transforms for rendering - if (system->worldUpdated) + if (physicsSystem->worldUpdated) { - system->SyncTransforms(); + physicsSystem->SyncTransforms(); - // TODO(Diren): Handle trigger messages for scripting + // Collision & Trigger messages + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteCollisionFunctions(); + + physicsSystem->ClearInvalidCollisions(); + } + } + + void SHPhysicsSystem::onContact(const CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) + { + const auto CONTACT_PAIR = callbackData.getContactPair(i); + const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(CONTACT_PAIR); + + UpdateEventContainers(NEW_EVENT, collisionInfo); + } + } + + void SHPhysicsSystem::onTrigger(const rp3d::OverlapCallback::CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbOverlappingPairs(); ++i) + { + const auto& OVERLAP_PAIR = callbackData.getOverlappingPair(i); + const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(OVERLAP_PAIR); + + UpdateEventContainers(NEW_EVENT, triggerInfo); } } @@ -353,58 +424,11 @@ namespace SHADE map.erase(entityID); } - void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject* physicsObject, bool componentActive) noexcept + void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject& physicsObject, bool componentActive) noexcept { - const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); + const bool RP3D_ACTIVE = physicsObject.rp3dBody->isActive(); if (RP3D_ACTIVE != componentActive) - physicsObject->rp3dBody->setIsActive(componentActive); - } - - - void SHPhysicsSystem::SyncRigidBodyComponents(std::vector& denseArray) noexcept - { - if (denseArray.empty()) - return; - - for (auto& comp : denseArray) - { - const EntityID ENTITY_ID = comp.GetEID(); - - // Get physicsObject - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - - // TODO(Diren): Check if active in hierarchy - const bool COMPONENT_ACTIVE = comp.isActive; - SyncActiveStates(physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject->SyncRigidBody(&comp); - } - } - - void SHPhysicsSystem::SyncColliderComponents(std::vector& denseArray) noexcept - { - if (denseArray.empty()) - return; - - for (auto& comp : denseArray) - { - const EntityID ENTITY_ID = comp.GetEID(); - - // Get physicsObject - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - - // TODO(Diren): Check if active in hierarchy - const bool COMPONENT_ACTIVE = comp.isActive; - SyncActiveStates(physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject->SyncColliders(&comp); - } + physicsObject.rp3dBody->setIsActive(componentActive); } void SHPhysicsSystem::SyncTransforms() noexcept @@ -459,15 +483,54 @@ namespace SHADE } // Convert RP3D Transform to SHADE - auto* transformComponent = SHComponentManager::GetComponent(entityID); - transformComponent->SetWorldPosition(rp3dPos); - transformComponent->SetWorldOrientation(rp3dRot); + auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + + if (transformComponent != nullptr) + { + transformComponent->SetWorldPosition(rp3dPos); + transformComponent->SetWorldOrientation(rp3dRot); + } // Cache transforms physicsObject.prevTransform = CURRENT_TF; } } + void SHPhysicsSystem::UpdateEventContainers(const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept + { + const auto IT = std::ranges::find_if(container.begin(), container.end(), [&](const SHCollisionEvent& e) + { + const bool ENTITY_MATCH = e.value[0] == collisionEvent.value[0]; + const bool COLLIDERS_MATCH = e.value[1] == collisionEvent.value[1]; + return ENTITY_MATCH && COLLIDERS_MATCH; + }); + + if (IT == container.end()) + container.emplace_back(collisionEvent); + else + IT->collisionState = collisionEvent.collisionState; + } + + void SHPhysicsSystem::ClearInvalidCollisions() noexcept + { + static const auto CLEAR = [](CollisionEvents& container) + { + for (auto eventIter = container.begin(); eventIter != container.end();) + { + const bool CLEAR_EVENT = eventIter->GetCollisionState() == SHCollisionEvent::State::EXIT + || eventIter->GetCollisionState() == SHCollisionEvent::State::INVALID; + + if (CLEAR_EVENT) + eventIter = container.erase(eventIter); + else + ++eventIter; + } + }; + + CLEAR(collisionInfo); + CLEAR(triggerInfo); + } + SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) { const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); @@ -556,14 +619,21 @@ namespace SHADE const EntityID ENTITY_ID = EVENT_DATA->data->eid; auto* physicsObject = GetPhysicsObject(ENTITY_ID); - SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if (REMOVED_ID == RIGID_BODY_ID) + // Wake up all physics objects + for (auto& [entityID, object] : map) + { + if (SHComponentManager::HasComponent(entityID)) + reinterpret_cast(object.rp3dBody)->setIsSleeping(false); + } + + if (REMOVED_ID == RIGID_BODY_ID && physicsObject != nullptr) { world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); - physicsObject->rp3dBody = nullptr; + physicsObject->rp3dBody = nullptr; - auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); if (colliderComponent != nullptr) { // Preserve colliders as a collision body @@ -575,16 +645,9 @@ namespace SHADE for (auto& collider : colliderComponent->colliders) physicsObject->AddCollider(&collider); } - - // Wake up all physics objects - for (auto& [entityID, object] : map) - { - if (SHComponentManager::HasComponent(entityID)) - reinterpret_cast(object.rp3dBody)->setIsSleeping(false); - } } - if (REMOVED_ID == COLLIDER_ID) + if (REMOVED_ID == COLLIDER_ID && physicsObject != nullptr) { // Remove all colliders const int NUM_COLLIDERS = static_cast(physicsObject->rp3dBody->getNbColliders()); @@ -594,13 +657,36 @@ namespace SHADE auto* collider = physicsObject->rp3dBody->getCollider(i); physicsObject->rp3dBody->removeCollider(collider); } + + // Check for a rigidbody component + if (rigidBodyComponent == nullptr) + physicsObject->rp3dBody = nullptr; } - if (physicsObject->rp3dBody == nullptr) - DestroyPhysicsObject(ENTITY_ID); + if (physicsObject != nullptr && physicsObject->rp3dBody == nullptr) + DestroyPhysicsObject(ENTITY_ID); } return EVENT_DATA->handle; } + SHEventHandle SHPhysicsSystem::ResetWorld(SHEventPtr editorStopEvent) + { + // TODO(Diren): Rebuild world based on how scene reloading is done + + for (auto& [entityID, physicsObject] : map) + { + if (SHComponentManager::HasComponent(entityID)) + { + auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + rp3dRigidBody->setLinearVelocity(SHVec3::Zero); + rp3dRigidBody->setAngularVelocity(SHVec3::Zero); + } + } + + return editorStopEvent->handle; + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index a3c3bea1..1d773618 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -23,16 +23,18 @@ #include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneGraph.h" #include "SHPhysicsObject.h" - +#include "SHPhysicsUtils.h" namespace SHADE { + /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHPhysicsSystem final : public SHSystem + class SH_API SHPhysicsSystem final : public SHSystem + , public rp3d::EventListener { public: /*---------------------------------------------------------------------------------*/ @@ -47,6 +49,8 @@ namespace SHADE bool sleepingEnabled; }; + using CollisionEvents = std::vector; + /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -57,13 +61,16 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] double GetFixedDT () const noexcept; - [[nodiscard]] bool IsSleepingEnabled () const noexcept; + [[nodiscard]] bool IsSleepingEnabled () const noexcept; - [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; - [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; - [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; + [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; + [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + + [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; + [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; /*---------------------------------------------------------------------------------*/ @@ -82,16 +89,14 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Init () override; - void Exit () override; + void Init () override; + void Exit () override; - //void AddRigidBody (EntityID entityID) noexcept; - //void AddCollider (EntityID entityID) noexcept; - //void RemoveRigidBody (EntityID entityID) noexcept; - //void RemoveCollider (EntityID entityID) noexcept; + void AddCollisionShape (EntityID entityID, SHCollider* collider); + void RemoveCollisionShape (EntityID entityID, int index); - void AddCollisionShape (EntityID entityID, SHCollider* collider); - void RemoveCollisionShape (EntityID entityID, int index); + void onContact (const rp3d::CollisionCallback::CallbackData& callbackData) override; + void onTrigger (const rp3d::OverlapCallback::CallbackData& callbackData) override; /*---------------------------------------------------------------------------------*/ /* System Routines */ @@ -156,49 +161,41 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - bool worldUpdated; + bool worldUpdated; - double interpolationFactor; - double fixedDT; - - rp3d::PhysicsWorld* world; - rp3d::PhysicsCommon factory; - - EntityObjectMap map; + double interpolationFactor; + double fixedDT; + rp3d::PhysicsWorld* world; + rp3d::PhysicsCommon factory; + EntityObjectMap map; + CollisionEvents collisionInfo; + CollisionEvents triggerInfo; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void DestroyPhysicsObject (EntityID entityID) noexcept; - void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; - void SyncRigidBodyComponents (std::vector& denseArray) noexcept; - void SyncColliderComponents (std::vector& denseArray) noexcept; + SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + void DestroyPhysicsObject (EntityID entityID) noexcept; + + static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; void SyncTransforms () noexcept; + static void UpdateEventContainers (const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept; + void ClearInvalidCollisions () noexcept; + SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); + SHEventHandle ResetWorld (SHEventPtr editorStopEvent); + + template + || std::is_same_v>> + SHCollisionEvent GenerateCollisionEvent (const RP3DCollisionPair& cp) noexcept; }; +} // namespace SHADE - /*-----------------------------------------------------------------------------------*/ - /* Event Data Definitions */ - /*-----------------------------------------------------------------------------------*/ - - struct SHPhysicsColliderAddedEvent - { - EntityID entityID; - SHCollider::Type colliderType; - int colliderIndex; - }; - - struct SHPhysicsColliderRemovedEvent - { - EntityID entityID; - int colliderIndex; - }; - -} // namespace SHADE \ No newline at end of file +#include "SHPhysicsSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp new file mode 100644 index 00000000..957fb3aa --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp @@ -0,0 +1,84 @@ +/**************************************************************************************** + * \file SHPhysicsSystem.hpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for templated functions the Physics System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Primary Header +#include "SHPhysicsSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + template + SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const RP3DCollisionPair& cp) noexcept + { + static const auto MATCH_COLLIDER = [] + ( + const SHPhysicsObject& physicsObject + , const rp3d::Entity colliderID + )->uint32_t + { + for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) + { + const auto* collider = physicsObject.rp3dBody->getCollider(i); + if (collider->getEntity() == colliderID) + return i; + } + + return std::numeric_limits::max(); + }; + + SHCollisionEvent cInfo; + + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + + for (auto& [entityID, physicsObject] : map) + { + // Match body 1 + if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) + { + cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); + + matched[SHCollisionEvent::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) + { + cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); + + matched[SHCollisionEvent::ENTITY_B] = true; + } + + if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) + return cInfo; + } + + return cInfo; + } +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp new file mode 100644 index 00000000..4b292340 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp @@ -0,0 +1,65 @@ +/************************************************************************************//*! +\file SHPhysicsSystemInterface.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions of the static + SHPhysicsSystemInterface class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "SHPhysicsSystemInterface.h" +// Project Includes +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Physics/SHPhysicsSystem.h" +#include "Physics/SHPhysicsUtils.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*-----------------------------------------------------------------------------------*/ + const std::vector& SHPhysicsSystemInterface::GetCollisionInfo() noexcept + { + static std::vector emptyVec; + + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetCollisionInfo(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get collision events. Empty vector returned instead."); + return emptyVec; + } + const std::vector& SHPhysicsSystemInterface::GetTriggerInfo() noexcept + { + static std::vector emptyVec; + + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetTriggerInfo(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get trigger events. Empty vector returned instead."); + return emptyVec; + } + + double SHPhysicsSystemInterface::GetFixedDT() noexcept + { + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetFixedDT(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get fixed delta time. 0.0 returned instead."); + return 0.0; + } +} diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h new file mode 100644 index 00000000..da6a0433 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h @@ -0,0 +1,46 @@ +/************************************************************************************//*! +\file SHPhysicsSystemInterface.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the SHGraphicsSystemInterface static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHCollisionEvent; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Static class that wraps up certain functions in the SHPhysicsSystem so that + /// accessing it from SHADE_Managed would not cause issues due to C++20 features. + /// + class SH_API SHPhysicsSystemInterface final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + SHPhysicsSystemInterface() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*---------------------------------------------------------------------------------*/ + [[nodiscard]] static const std::vector& GetCollisionInfo() noexcept; + [[nodiscard]] static const std::vector& GetTriggerInfo() noexcept; + [[nodiscard]] static double GetFixedDT() noexcept; + }; +} diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp new file mode 100644 index 00000000..8d5bc956 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp @@ -0,0 +1,93 @@ +/**************************************************************************************** + * \file SHPhysicsUtils.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for some Physics Utilities + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsUtils.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHCollisionEvent::SHCollisionEvent() noexcept + : collisionState { State::INVALID } + { + ids[ENTITY_A] = MAX_EID; + ids[ENTITY_B] = MAX_EID; + ids[COLLIDER_A] = std::numeric_limits::max(); + ids[COLLIDER_B] = std::numeric_limits::max(); + } + + SHCollisionEvent::SHCollisionEvent(EntityID entityA, EntityID entityB) noexcept + : collisionState { State::INVALID } + { + ids[ENTITY_A] = entityA; + ids[ENTITY_B] = entityB; + ids[COLLIDER_A] = std::numeric_limits::max(); + ids[COLLIDER_B] = std::numeric_limits::max(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHCollisionEvent::operator==(const SHCollisionEvent& rhs) const noexcept + { + return value[0] == rhs.value[0] && value[1] == rhs.value[1]; + } + + bool SHCollisionEvent::operator!=(const SHCollisionEvent& rhs) const noexcept + { + return value[0] != rhs.value[0] || value[1] != rhs.value[1]; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + EntityID SHCollisionEvent::GetEntityA() const noexcept + { + return ids[ENTITY_A]; + } + + EntityID SHCollisionEvent::GetEntityB() const noexcept + { + return ids[ENTITY_B]; + } + + const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyA() const noexcept + { + return SHComponentManager::GetComponent_s(ids[ENTITY_A]); + } + + const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyB() const noexcept + { + return SHComponentManager::GetComponent_s(ids[ENTITY_B]); + } + + const SHCollider* SHCollisionEvent::GetColliderA() const noexcept + { + return &SHComponentManager::GetComponent(ids[ENTITY_A])->GetCollider(ids[COLLIDER_A]); + } + + const SHCollider* SHCollisionEvent::GetColliderB() const noexcept + { + return &SHComponentManager::GetComponent(ids[ENTITY_B])->GetCollider(ids[COLLIDER_B]); + } + + SHCollisionEvent::State SHCollisionEvent::GetCollisionState() const noexcept + { + return collisionState; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.h b/SHADE_Engine/src/Physics/SHPhysicsUtils.h new file mode 100644 index 00000000..57f9c6fc --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.h @@ -0,0 +1,116 @@ +/**************************************************************************************** + * \file SHPhysicsUtils.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for some Physics Utilities + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "Components/SHColliderComponent.h" +#include "Components/SHRigidBodyComponent.h" + + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHPhysicsColliderAddedEvent + { + EntityID entityID; + SHCollider::Type colliderType; + int colliderIndex; + }; + + struct SHPhysicsColliderRemovedEvent + { + EntityID entityID; + int colliderIndex; + }; + + class SH_API SHCollisionEvent + { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class State + { + ENTER + , STAY + , EXIT + + , TOTAL + , INVALID = -1 + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHCollisionEvent () noexcept; + SHCollisionEvent (EntityID entityA, EntityID entityB) noexcept; + + + SHCollisionEvent (const SHCollisionEvent& rhs) = default; + SHCollisionEvent (SHCollisionEvent&& rhs) = default; + ~SHCollisionEvent () = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + bool operator== (const SHCollisionEvent& rhs) const noexcept; + bool operator!= (const SHCollisionEvent& rhs) const noexcept; + + SHCollisionEvent& operator= (const SHCollisionEvent& rhs) = default; + SHCollisionEvent& operator= (SHCollisionEvent&& rhs) = default; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] EntityID GetEntityA () const noexcept; + [[nodiscard]] EntityID GetEntityB () const noexcept; + [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyA () const noexcept; + [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyB () const noexcept; + [[nodiscard]] const SHCollider* GetColliderA () const noexcept; + [[nodiscard]] const SHCollider* GetColliderB () const noexcept; + [[nodiscard]] State GetCollisionState () const noexcept; + + private: + + static constexpr uint32_t ENTITY_A = 0; + static constexpr uint32_t ENTITY_B = 1; + static constexpr uint32_t COLLIDER_A = 2; + static constexpr uint32_t COLLIDER_B = 3; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + union + { + uint64_t value[2]; // EntityValue, ColliderIndexValue + uint32_t ids [4]; // EntityA, EntityB, ColliderIndexA, ColliderIndexB + }; + + State collisionState; + }; + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Reflection/SHReflectionMetadata.h b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h index 0cc6d8a5..b4dc009c 100644 --- a/SHADE_Engine/src/Reflection/SHReflectionMetadata.h +++ b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h @@ -7,5 +7,6 @@ namespace SHADE constexpr const char* min = "MIN"; constexpr const char* max = "MAX"; constexpr const char* tooltip = "tooltip"; + constexpr const char* angleInRad = "angleInRad"; } } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.cpp b/SHADE_Engine/src/Resource/SHResourceManager.cpp index 156c31c7..dad9fd9f 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.cpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.cpp @@ -21,9 +21,11 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHResourceHub SHResourceManager::resourceHub; std::unordered_map>> SHResourceManager::handlesMap; - std::unordered_map SHResourceManager::assetIdMap; + std::unordered_map SHResourceManager::assetIdMap; std::unordered_map> SHResourceManager::typedFreeFuncMap; std::vector SHResourceManager::loadedAssetData; + bool SHResourceManager::textureChanged = false; + bool SHResourceManager::meshChanged = false; /*-----------------------------------------------------------------------------------*/ /* Function Definitions */ @@ -63,8 +65,17 @@ namespace SHADE SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); if (gfxSystem == nullptr) throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); - gfxSystem->BuildMeshBuffers(); - gfxSystem->BuildTextures(); + + if (meshChanged) + { + gfxSystem->BuildMeshBuffers(); + meshChanged = false; + } + if (textureChanged) + { + gfxSystem->BuildTextures(); + textureChanged = false; + } // Free CPU Resources for (auto assetId : loadedAssetData) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index 84f93b10..e5e303e1 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -17,9 +17,27 @@ of DigiPen Institute of Technology is prohibited. #include "SH_API.h" #include "SHResourceLibrary.h" #include "Assets/SHAssetMacros.h" +#include "Assets/Asset Types/SHMeshAsset.h" +#include "Assets/Asset Types/SHTextureAsset.h" +#include "Assets/Asset Types/SHShaderAsset.h" +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" +#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Assets/Asset Types/SHMaterialAsset.h" namespace SHADE { + /// + /// Template structs that maps a resource to their loaded asset representation type. + /// + template + struct SHResourceLoader { using AssetType = void; }; + template<> struct SHResourceLoader { using AssetType = SHMeshAsset; }; + template<> struct SHResourceLoader { using AssetType = SHTextureAsset; }; + template<> struct SHResourceLoader { using AssetType = SHShaderAsset; }; + template<> struct SHResourceLoader { using AssetType = SHMaterialAsset; }; + /// /// Static class responsible for loading and caching runtime resources from their /// serialised Asset IDs. @@ -61,7 +79,7 @@ namespace SHADE /// Handle to the resource to unload. static void Unload(AssetID assetId); /// - /// Needs to be called to finalise all changes to loads. + /// Needs to be called to finalise all changes to loads, unless at runtime. /// static void FinaliseChanges(); @@ -111,6 +129,9 @@ namespace SHADE static std::unordered_map> typedFreeFuncMap; // Pointers to temp CPU resources static std::vector loadedAssetData; + // Dirty Flags + static bool meshChanged; + static bool textureChanged; /*---------------------------------------------------------------------------------*/ /* Helper Functions */ @@ -124,6 +145,14 @@ namespace SHADE /// Reference to the AssetHandleMap of the specified type. template static std::pair getAssetHandleMap(); + /// + /// + /// + /// + /// + /// + template + static Handle load(AssetID assetId, const typename SHResourceLoader::AssetType& assetData); }; } diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 072adaa2..1623d70a 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -3,7 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Oct 21, 2022 -\brief Contains the definition of the function templates of the +\brief Contains the definition of the function templates of the SHResourceManager static class. Copyright (C) 2022 DigiPen Institute of Technology. @@ -13,12 +13,17 @@ of DigiPen Institute of Technology is prohibited. #pragma once // Primary Include #include "SHResourceManager.h" +// External Dependencies +#include // Project Includes #include "Assets/SHAssetManager.h" #include "Assets/Asset Types/SHAssetIncludes.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Tools/SHLog.h" +#include "Graphics/Shaders/SHVkShaderModule.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" namespace SHADE { @@ -40,67 +45,19 @@ namespace SHADE return Handle(typedHandleMap.get()[assetId]); /* Otherwise, we need to load it! */ - // Meshes - if constexpr (std::is_same_v) + // Load Asset Data + const auto* assetData = SHAssetManager::GetData::AssetType>(assetId); + if (assetData == nullptr) { - // Get system - SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem == nullptr) - throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); - - // Load - const SHMeshAsset* assetData = SHAssetManager::GetData(assetId); - if (assetData == nullptr) - { - SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); - return {}; - } - loadedAssetData.emplace_back(assetId); - - Handle meshHandle = gfxSystem->AddMesh - ( - assetData->vertexPosition.size(), - assetData->vertexPosition.data(), - assetData->texCoords.data(), - assetData->vertexTangent.data(), - assetData->vertexNormal.data(), - assetData->indices.size(), - assetData->indices.data() - ); - Handle genericHandle = Handle(meshHandle); - typedHandleMap.get().emplace(assetId, genericHandle); - typedAssetIdMap.get().emplace(genericHandle, assetId); - return meshHandle; + SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); + return {}; } - // Textures - else if constexpr (std::is_same_v) - { - // Get system - SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem == nullptr) - throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); - // Load - const SHTextureAsset* assetData = SHAssetManager::GetData(assetId); - if (assetData == nullptr) - { - SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); - return {}; - } - loadedAssetData.emplace_back(assetId); - - Handle texHandle = gfxSystem->AddTexture - ( - assetData->numBytes, - assetData->pixelData, - assetData->width, - assetData->height, - assetData->format, - assetData->mipOffsets - ); - typedHandleMap.get().emplace(assetId, Handle(texHandle)); - return texHandle; - } + auto handle = load(assetId, *assetData); + Handle genericHandle = Handle(handle); + typedHandleMap.get().emplace(assetId, genericHandle); + typedAssetIdMap.get().emplace(genericHandle, assetId); + return handle; } template @@ -152,7 +109,7 @@ namespace SHADE template std::pair SHResourceManager::getAssetHandleMap() { - const std::type_index TYPE = typeid(ResourceType); + const std::type_index TYPE = typeid(ResourceType); if (!handlesMap.contains(TYPE)) { @@ -160,7 +117,7 @@ namespace SHADE assetIdMap.emplace(TYPE, HandleAssetMap{}); typedFreeFuncMap.emplace ( - TYPE, + TYPE, [TYPE](AssetID assetId) { static_cast>(SHResourceManager::handlesMap[TYPE][assetId]).Free(); @@ -169,4 +126,131 @@ namespace SHADE } return std::make_pair(std::ref(handlesMap[TYPE]), std::ref(assetIdMap[TYPE])); } + + template + Handle SHResourceManager::load(AssetID assetId, const typename SHResourceLoader::AssetType& assetData) + { + // Get system + SHGraphicsSystem* gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem == nullptr) + throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); + + // Meshes + if constexpr (std::is_same_v) + { + loadedAssetData.emplace_back(assetId); + meshChanged = true; + + return gfxSystem->AddMesh + ( + assetData.vertexPosition.size(), + assetData.vertexPosition.data(), + assetData.texCoords.data(), + assetData.vertexTangent.data(), + assetData.vertexNormal.data(), + assetData.indices.size(), + assetData.indices.data() + ); + } + // Textures + else if constexpr (std::is_same_v) + { + loadedAssetData.emplace_back(assetId); + textureChanged = true; + + return gfxSystem->AddTexture + ( + assetData.numBytes, + assetData.pixelData, + assetData.width, + assetData.height, + assetData.format, + assetData.mipOffsets + ); + } + // Shaders + else if constexpr (std::is_same_v) + { + auto shader = gfxSystem->GetDevice()->CreateShaderModule + ( + assetData.spirvBinary, + "main", + static_cast(assetData.shaderType), + assetData.name + ); + shader->Reflect(); + return shader; + } + // Materials + else if constexpr (std::is_same_v) + { + // Get the data we need to construct + SHMaterialSpec matSpec = YAML::Node(assetData.data).as(); + + // Load shaders + auto vertexShader = SHResourceManager::LoadOrGet(matSpec.vertexShader); + auto fragShader = SHResourceManager::LoadOrGet(matSpec.fragShader); + + // Ensure that both shaders are present + if (!(vertexShader && fragShader)) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as shaders failed to be loaded."); + return {}; + } + + // Grab subpass from worldRenderer + auto renderPass = gfxSystem->GetPrimaryRenderpass(); + if (!renderPass) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as RenderPass could not be found."); + return {}; + } + auto subPass = renderPass->GetSubpass(matSpec.subpassName); + if (!subPass) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as SubPass could not be found."); + return {}; + } + + // Create material + auto matHandle = gfxSystem->AddMaterial(vertexShader, fragShader, subPass); + + // Set properties for the material + Handle pipelineProperties = matHandle->GetShaderBlockInterface(); + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); + const auto& PROP_NODE = matSpec.properties; + if (PROP_NODE) + { + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + } + } + + return matHandle; + } + } } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 21ce7b82..4a73342e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -80,7 +80,10 @@ namespace SHADE { csScriptsExecuteFixedUpdate(); } - + void SHScriptEngine::ExecuteCollisionFunctions() + { + csScriptsExecutePhysicsEvents(); + } void SHScriptEngine::Exit() { // Do not allow deinitialization if not initialised @@ -377,6 +380,12 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "ExecuteLateUpdate" ); + csScriptsExecutePhysicsEvents = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteCollisionFunctions" + ); csScriptsFrameCleanUp = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index c38e3618..9ddd617a 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -98,6 +98,11 @@ namespace SHADE /// void ExecuteFixedUpdates(); /// + /// Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached + /// to Entities. + /// + void ExecuteCollisionFunctions(); + /// /// Shuts down the DotNetRuntime. /// void Exit() override; @@ -245,6 +250,7 @@ namespace SHADE CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; CsFuncPtr csScriptsExecuteUpdate = nullptr; CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsExecutePhysicsEvents = nullptr; CsFuncPtr csScriptsFrameCleanUp = nullptr; CsScriptManipFuncPtr csScriptsAdd = nullptr; CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr; diff --git a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp index 5467fc56..a2981c06 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp @@ -54,7 +54,7 @@ namespace SHADE /* System Routine Functions - FrameCleanUpRoutine */ /*-----------------------------------------------------------------------------------*/ SHScriptEngine::FrameCleanUpRoutine::FrameCleanUpRoutine() - : SHSystemRoutine("Script Engine Frame Clean Up", false) + : SHSystemRoutine("Script Engine Frame Clean Up", true) {} void SHScriptEngine::FrameCleanUpRoutine::Execute(double) noexcept { diff --git a/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp new file mode 100644 index 00000000..8ab098b8 --- /dev/null +++ b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp @@ -0,0 +1,56 @@ +#include "SHpch.h" +#include "SHPrefabManager.h" + +namespace SHADE +{ + SHPrefabManager::PrefabMap SHPrefabManager::prefabMap{}; + + void SHPrefabManager::AddPrefab(AssetID const& prefabAssetID) noexcept + { + prefabMap.insert({ prefabAssetID, {} }); + } + + void SHPrefabManager::RemovePrefab(AssetID const& prefabAssetID) noexcept + { + prefabMap.erase(prefabAssetID); + } + + void SHPrefabManager::ClearPrefab(AssetID const& prefabAssetID) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].clear(); + } + } + + void SHPrefabManager::UpdateAllPrefabEntities(AssetID const& prefabAssetID) noexcept + { + //Loop through all entities and deserialize new data + } + + void SHPrefabManager::AddEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].insert(eid); + } + } + + void SHPrefabManager::RemoveEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].erase(eid); + } + } + + void SHPrefabManager::Clear() noexcept + { + prefabMap.clear(); + } + + bool SHPrefabManager::Empty() noexcept + { + return prefabMap.empty(); + } +} diff --git a/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h new file mode 100644 index 00000000..37c317ed --- /dev/null +++ b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h @@ -0,0 +1,28 @@ +#pragma once + +#include "Assets/SHAssetMacros.h" +#include "ECS_Base/SHECSMacros.h" +#include +#include + + +namespace SHADE +{ + class SHPrefabManager + { + public: + using PrefabMap = std::unordered_map>; + + static void AddPrefab(AssetID const& prefabAssetID) noexcept; + static void RemovePrefab(AssetID const& prefabAssetID) noexcept; + static void ClearPrefab(AssetID const& prefabAssetID) noexcept; + static void UpdateAllPrefabEntities(AssetID const& prefabAssetID) noexcept; + static void AddEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept; + static void RemoveEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept; + static void Clear() noexcept; + static bool Empty() noexcept; + + private: + static PrefabMap prefabMap; + }; +} diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index f8913d8d..03498951 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -10,6 +10,7 @@ #include "Assets/SHAssetManager.h" #include +#include "Camera/SHCameraComponent.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" #include "Physics/Components/SHRigidBodyComponent.h" @@ -58,7 +59,7 @@ namespace SHADE static EntityID DeserializeEntity(YAML::iterator& it, YAML::Node const& node, std::vector& createdEntities, EntityID parentEID = MAX_EID) { EntityID eid = MAX_EID; - if(!node) + if (!node) return eid; if (node[EIDNode]) eid = node[EIDNode].as(); @@ -71,13 +72,13 @@ namespace SHADE createdEntities.push_back(eid); if (node[NumberOfChildrenNode]) { - if(const int numOfChildren = node[NumberOfChildrenNode].as(); numOfChildren > 0) + if (const int numOfChildren = node[NumberOfChildrenNode].as(); numOfChildren > 0) { ++it; for (int i = 0; i < numOfChildren; ++i) { DeserializeEntity(it, (*it), createdEntities, eid); - if((i + 1) < numOfChildren) + if ((i + 1) < numOfChildren) ++it; } } @@ -85,7 +86,9 @@ namespace SHADE // Deserialise scripts if (node[ScriptsNode]) - SHSystemManager::GetSystem()->DeserialiseScripts(eid, node[ScriptsNode]); + SHSystemManager::GetSystem()->DeserialiseScripts(eid, node[ScriptsNode]); + + return eid; } void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) @@ -120,10 +123,10 @@ namespace SHADE { DeserializeEntity(it, (*it), createdEntities); } - if(createdEntities.empty()) + if (createdEntities.empty()) { SHLOG_ERROR("Failed to create entities from deserializaiton") - return; + return; } //Initialize Entity auto entityVecIt = createdEntities.begin(); @@ -137,7 +140,7 @@ namespace SHADE { out << SerializeEntityToNode(entityNode); auto const& children = entityNode->GetChildren(); - for(auto const& child : children) + for (auto const& child : children) { EmitEntity(child, out); } @@ -162,17 +165,36 @@ namespace SHADE { } + template, bool> = true> + static void AddComponentToComponentNode(YAML::Node& componentsNode, EntityID const& eid) + { + if (const ComponentType* component = SHComponentManager::GetComponent_s(eid)) + { + componentsNode[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(component); + } + } + + template, bool> = true> + static void AddConvComponentToComponentNode(YAML::Node& componentsNode, EntityID const& eid) + { + if (ComponentType* component = SHComponentManager::GetComponent_s(eid)) + { + componentsNode[rttr::type::get().get_name().data()] = YAML::convert::encode(*component); + } + } + + YAML::Node SHSerialization::SerializeEntityToNode(SHSceneNode* sceneNode) { YAML::Node node; auto eid = sceneNode->GetEntityID(); auto entity = SHEntityManager::GetEntityByID(eid); - if (!sceneNode || !entity) + if (!sceneNode && !entity) { node = YAML::Null; return node; } - node.SetStyle(YAML::EmitterStyle::Block); + node.SetStyle(YAML::EmitterStyle::Block); node[EIDNode] = eid; node[EntityNameNode] = entity->name; node[IsActiveNode] = sceneNode->IsActive(); @@ -181,22 +203,13 @@ namespace SHADE YAML::Node components; - if (const auto transform = SHComponentManager::GetComponent_s(eid)) - { - components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(transform); - } - if (const auto renderable = SHComponentManager::GetComponent_s(eid)) - { - components[rttr::type::get().get_name().data()] = *renderable; - } - if (const auto rigidbody = SHComponentManager::GetComponent_s(eid)) - { - components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(rigidbody); - } - if(const auto light = SHComponentManager::GetComponent_s(eid)) - { - components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(light); - } + AddComponentToComponentNode(components, eid); + AddComponentToComponentNode(components, eid); + AddConvComponentToComponentNode(components, eid); + AddComponentToComponentNode(components, eid); + AddComponentToComponentNode(components, eid); + AddConvComponentToComponentNode(components, eid); + node[ComponentsNode] = components; YAML::Node scripts; @@ -208,22 +221,22 @@ namespace SHADE EntityID SHSerialization::DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID) noexcept { - if(data.empty()) + if (data.empty()) return MAX_EID; YAML::Node entities = YAML::Load(data.c_str()); - EntityID eid{MAX_EID}; + EntityID eid{ MAX_EID }; std::vector createdEntities; - for(auto it = entities.begin(); it != entities.end(); ++it) + for (auto it = entities.begin(); it != entities.end(); ++it) { eid = DeserializeEntity(it, *it, createdEntities, parentEID); } - if(createdEntities.empty()) + if (createdEntities.empty()) { SHLOG_ERROR("Failed to create entities from deserializaiton") - return MAX_EID; + return MAX_EID; } auto entityVecIt = createdEntities.begin(); - for(auto it = entities.begin(); it != entities.end(); ++it) + for (auto it = entities.begin(); it != entities.end(); ++it) { InitializeEntity(*it, *entityVecIt++); } @@ -231,33 +244,22 @@ namespace SHADE } template, bool> = true> - std::optional GetComponentID(YAML::Node const& componentNode) + static void AddComponentID(std::vector& idList, YAML::Node const& componentNode) { if (componentNode[rttr::type::get().get_name().data()]) - return { SHFamilyID::GetID() }; - else - return std::nullopt; + idList.push_back(SHFamilyID::GetID()); } std::vector SHSerialization::GetComponentIDList(YAML::Node const& componentsNode) { std::vector componentIDList; - - auto id = GetComponentID(componentsNode); - if (id.has_value()) - componentIDList.push_back(id.value()); - - id = GetComponentID(componentsNode); - if (id.has_value()) - componentIDList.push_back(id.value()); - - id = GetComponentID(componentsNode); - if (id.has_value()) - componentIDList.push_back(id.value()); - - id = GetComponentID(componentsNode); - if(id.has_value()) - componentIDList.push_back(id.value()); + + AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); return componentIDList; } @@ -268,7 +270,10 @@ namespace SHADE if (!componentsNode) return; SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); SHSerializationHelper::ConvertNodeToComponent(componentsNode, eid); + SHSerializationHelper::ConvertNodeToComponent(componentsNode, eid); SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); } } diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 047232a0..2179d1cf 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -12,11 +12,240 @@ #include "Resource/SHResourceManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "SHSerializationTools.h" +#include "Physics/Components/SHColliderComponent.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Tools/SHLog.h" namespace YAML { using namespace SHADE; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + static constexpr const char* w = "w"; + + static Node encode(SHVec4 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + node[w] = rhs.w; + return node; + } + static bool decode(Node const& node, SHVec4& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + if (node[z].IsDefined()) + rhs.z = node[z].as(); + if (node[w].IsDefined()) + rhs.w = node[w].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + + static Node encode(SHVec3 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + return node; + } + static bool decode(Node const& node, SHVec3& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + if (node[z].IsDefined()) + rhs.z = node[z].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + + static Node encode(SHVec2 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + return node; + } + static bool decode(Node const& node, SHVec2& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* IsTrigger = "Is Trigger"; + + static constexpr const char* Type = "Type"; + static constexpr const char* HalfExtents = "Half Extents"; + static constexpr const char* Radius = "Radius"; + + static constexpr const char* Friction = "Friction"; + static constexpr const char* Bounciness = "Bounciness"; + static constexpr const char* Density = "Density"; + static constexpr const char* PositionOffset = "Position Offset"; + + static Node encode(SHCollider& rhs) + { + Node node; + + node[IsTrigger] = rhs.IsTrigger(); + + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + SHCollider::Type colliderType = rhs.GetType(); + + node[Type] = enumAlign.value_to_name(colliderType).data(); + + switch (colliderType) + { + case SHCollider::Type::BOX: + { + auto const bb = reinterpret_cast(rhs.GetShape()); + node[HalfExtents] = bb->GetHalfExtents(); + } + break; + case SHCollider::Type::SPHERE: + { + auto const bs = reinterpret_cast(rhs.GetShape()); + node[Radius] = bs->GetRadius(); + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + + node[Friction] = rhs.GetFriction(); + node[Bounciness] = rhs.GetBounciness(); + node[Density] = rhs.GetDensity(); + node[PositionOffset] = rhs.GetPositionOffset(); + + return node; + } + static bool decode(Node const& node, SHCollider& rhs) + { + if (node[IsTrigger].IsDefined()) + rhs.SetIsTrigger(node[IsTrigger].as()); + if (!node[Type].IsDefined()) + return false; + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok; + const SHCollider::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); + if (!ok) + return false; + switch (colliderType) + { + case SHCollider::Type::BOX: + { + if(node[HalfExtents].IsDefined()) + rhs.SetBoundingBox(node[HalfExtents].as()); + } + break; + case SHCollider::Type::SPHERE: + { + if(node[Radius].IsDefined()) + rhs.SetBoundingSphere(node[Radius].as()); + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + if (node[Friction].IsDefined()) + rhs.SetFriction(node[Friction].as()); + if (node[Bounciness].IsDefined()) + rhs.SetBounciness(rhs.GetBounciness()); + if (node[Density].IsDefined()) + rhs.SetDensity(node[Density].as()); + if (node[PositionOffset].IsDefined()) + rhs.SetPositionOffset(node[PositionOffset].as()); + + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* Colliders = "Colliders"; + static Node encode(SHColliderComponent& rhs) + { + Node node, collidersNode; + auto const& colliders = rhs.GetColliders(); + int const numColliders = static_cast(colliders.size()); + for (int i = 0; i < numColliders; ++i) + { + auto& collider = rhs.GetCollider(i); + Node colliderNode = convert::encode(collider); + if (colliderNode.IsDefined()) + collidersNode[i] = colliderNode; + } + node[Colliders] = collidersNode; + return node; + } + static bool decode(Node const& node, SHColliderComponent& rhs) + { + if (node[Colliders].IsDefined()) + { + int numColliders{}; + for (auto const& colliderNode : node[Colliders]) + { + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok = false; + const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); + if (!ok) + return false; + + switch (colliderType) + { + case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; + case SHCollider::Type::SPHERE: rhs.AddBoundingSphere(); break; + case SHCollider::Type::CAPSULE: break; + default:; + } + YAML::convert::decode(colliderNode, rhs.GetCollider(numColliders++)); + } + } + return true; + } + }; + template<> struct convert { @@ -46,13 +275,13 @@ namespace YAML propNode = rhs.GetProperty(VARIABLE->offset); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: - propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + propNode = rhs.GetProperty(VARIABLE->offset); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: - propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + propNode = rhs.GetProperty(VARIABLE->offset); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: - propNode = SHSerializationTools::ValToYAML(rhs.GetProperty(VARIABLE->offset)); + propNode = rhs.GetProperty(VARIABLE->offset); break; case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: default: @@ -77,104 +306,45 @@ namespace YAML // Write Material YAML::Node node; - node[VERT_SHADER_YAML_TAG.data()] = 0; // SHResourceManager::GetAssetID(vertexShader).value_or(0); - node[FRAG_SHADER_YAML_TAG.data()] = 0; // SHResourceManager::GetAssetID(fragShader).value_or(0); - node[SUBPASS_YAML_TAG.data()] = rhs.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); + node[VERT_SHADER_YAML_TAG.data()] = SHResourceManager::GetAssetID(vertexShader).value_or(0); + node[FRAG_SHADER_YAML_TAG.data()] = SHResourceManager::GetAssetID(fragShader).value_or(0); + node[SUBPASS_YAML_TAG.data()] = rhs.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); node[PROPS_YAML_TAG.data()] = propertiesNode; return node; } - static bool decode(YAML::Node const& node, SHMaterial& rhs) - { - /* - // Retrieve Shader Asset IDs - AssetID vertShaderId = 0; - AssetID fragShaderId = 0; - if (node[VERT_SHADER_YAML_TAG.data()]) - vertShaderId = node[VERT_SHADER_YAML_TAG.data()].as(); - if (node[FRAG_SHADER_YAML_TAG.data()]) - fragShaderId = node[FRAG_SHADER_YAML_TAG.data()].as(); + }; - // Ensure that both shaders are present - if (vertShaderId == 0 || fragShaderId == 0) - return false; // No pipeline + template<> + struct convert + { + static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; + static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; + static constexpr std::string_view PROPS_YAML_TAG = "Properties"; - // Get Shader Modules - Handle vertexShader, fragShader; - vertexShader = SHResourceManager::LoadOrGet(vertShaderId); - fragShader = SHResourceManager::LoadOrGet(fragShaderId); + static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) + { + // Retrieve Shader Asset IDs + if (!node[VERT_SHADER_YAML_TAG.data()]) + return false; + rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); + if (!node[FRAG_SHADER_YAML_TAG.data()]) + return false; + rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); - // Get Pipeline Library - if (node[SUBPASS_YAML_TAG.data()]) - { - auto gfxSystem = SHSystemManager::GetSystem(); - if (!gfxSystem) - return false; + // Retrieve Subpass + if (!node[SUBPASS_YAML_TAG.data()]) + return false; + rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); - // Grab subpass from worldRenderer - auto renderPass = gfxSystem->GetPrimaryRenderpass(); - if (!renderPass) - return false; - auto subPass = renderPass->GetSubpass(node[SUBPASS_YAML_TAG.data()].as()); - if (!subPass) - return false; + // Retrieve + if (!node[PROPS_YAML_TAG.data()]) + return false; + rhs.properties = node[PROPS_YAML_TAG.data()]; - // Set Pipeline - rhs.SetPipeline(renderPass->GetOrCreatePipeline - ( - std::make_pair(vertexShader, fragShader), - subPass - )); - } - */ - - // TODO: Load Proper Material! - // Set default material - auto gfxSystem = SHSystemManager::GetSystem(); - if (!gfxSystem) - return false; - rhs.SetPipeline(gfxSystem->GetDefaultMaterial()->GetPipeline()); - - if (node[PROPS_YAML_TAG.data()]) - { - // Loop through all properties - Handle pipelineProperties = rhs.GetShaderBlockInterface(); - const YAML::Node& PROPS_NODE = node[PROPS_YAML_TAG.data()]; - for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) - { - const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); - const auto& PROP_NODE = PROPS_NODE[PROP_NAME.data()]; - if (PROP_NODE) - { - const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); - const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); - switch (VARIABLE->type) - { - case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: - rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::INT: - rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec2(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec3(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec4(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: - default: - continue; - break; - } - } - } - } - return true; - } + return true; + } }; template<> @@ -187,69 +357,62 @@ namespace YAML { YAML::Node node; node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); - node[MAT_YAML_TAG.data()] = 0; // TODO: Asset ID + node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); return node; } static bool decode(YAML::Node const& node, SHRenderable& rhs) { - if (node[MESH_YAML_TAG.data()]) + if (node[MESH_YAML_TAG.data()].IsDefined()) { rhs.SetMesh(SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as())); } - if (node[MAT_YAML_TAG.data()]) + if (node[MAT_YAML_TAG.data()].IsDefined()) { - // TODO: Convert Asset ID To Material HAndle // Temporarily, use default material auto gfxSystem = SHSystemManager::GetSystem(); if (!gfxSystem) return false; - rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(gfxSystem->GetDefaultMaterial())); + Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); + if (!baseMat) + { + baseMat = gfxSystem->GetDefaultMaterial(); + SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); + } + rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); } return true; } }; } - namespace SHADE { struct SHSerializationHelper { - template , bool> = true> - static std::string SerializeComponentToString(ComponentType* component) - { - return std::string(); - } - template , bool> = true> - static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) - { - } static YAML::Node RTTRToNode(const rttr::variant& var) { YAML::Node node; auto varType = var.get_type(); + if (varType.is_sequential_container()) + { + for (auto const& elem : var.create_sequential_view()) + { + node.push_back(RTTRToNode(elem)); + } + } if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; - node["Z"] = var.convert().z; - node["W"] = var.convert().w; + node = YAML::convert::encode(var.convert()); } else if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; - node["Z"] = var.convert().z; + node = YAML::convert::encode(var.convert()); } else if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; + node = YAML::convert::encode(var.convert()); } else if (varType.is_arithmetic()) { @@ -300,7 +463,7 @@ namespace SHADE else { auto properties = var.get_type().get_properties(); - for (auto property : properties) + for (auto const& property : properties) { node[property.get_name().data()] = RTTRToNode(property.get_value(var)); } @@ -308,6 +471,17 @@ namespace SHADE return node; } + template , bool> = true> + static std::string SerializeComponentToString(ComponentType* component) + { + return std::string(); + } + + template , bool> = true> + static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) + { + } + template , bool> = true> static YAML::Node SerializeComponentToNode(ComponentType* component) { @@ -327,15 +501,18 @@ namespace SHADE auto propType = prop.get_type(); if (propType == rttr::type::get()) { - prop.set_value(component, SHSerializationTools::YAMLToVec4(propertyNode)); + SHVec4 vec = propertyNode.as(); + prop.set_value(component, vec); } else if (propType == rttr::type::get()) { - prop.set_value(component, SHSerializationTools::YAMLToVec3(propertyNode)); + SHVec3 vec = propertyNode.as(); + prop.set_value(component, vec); } else if (propType == rttr::type::get()) { - prop.set_value(component, SHSerializationTools::YAMLToVec2(propertyNode)); + SHVec2 vec = propertyNode.as(); + prop.set_value(component, vec); } else if (propType.is_arithmetic()) { @@ -371,9 +548,10 @@ namespace SHADE else { auto properties = propType.get_properties(); - for (auto property : properties) + for (auto const& property : properties) { - InitializeProperty(component, property, propertyNode[property.get_name().data()]); + if(propertyNode[property.get_name().data()].IsDefined()) + InitializeProperty(component, property, propertyNode[property.get_name().data()]); } } } @@ -381,7 +559,7 @@ namespace SHADE template , bool> = true> static void InitializeComponentFromNode(YAML::Node const& componentsNode, EntityID const& eid) { - auto component = SHComponentManager::GetComponent_s(eid); + ComponentType* component = SHComponentManager::GetComponent_s(eid); if (componentsNode.IsNull() && !component) return; auto rttrType = rttr::type::get(); @@ -406,7 +584,7 @@ namespace SHADE return; auto rttrType = rttr::type::get(); auto componentNode = componentsNode[rttrType.get_name().data()]; - if (componentsNode.IsNull()) + if (!componentNode.IsDefined()) return; YAML::convert::decode(componentNode, *component); } diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp new file mode 100644 index 00000000..bd13801a --- /dev/null +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp @@ -0,0 +1,71 @@ +#include "SHpch.h" +#include "SHWinDialog.h" +#include +#include + +namespace SHADE +{ + void SHWinDialog::DisplayMessageBox(MessageBoxType const& messageBoxType, std::string const& title, std::string const& text) + { + if(messageBoxType == MessageBoxType::MB_MAX) + return; + + UINT flags = MB_APPLMODAL | MB_SETFOREGROUND | MB_OK; + flags |= static_cast(messageBoxType); + + const std::wstring wTitle(title.begin(), title.end()); + const std::wstring wText(text.begin(), text.end()); + + MessageBox(GetDesktopWindow(), wText.data(), wTitle.data(), flags); + } + + std::vector SHWinDialog::DisplayOpenDialog(OpenSaveConfig const& openSaveConfig) + { + const HWND hwnd = GetDesktopWindow(); + HRESULT hResult = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); + if(SUCCEEDED(hResult)) + { + IFileOpenDialog* pFileOpen; + + //Create Dialog object + hResult = CoCreateInstance(CLSID_FileOpenDialog, nullptr, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast(pFileOpen)); + + if(SUCCEEDED(hResult)) + { + //Show the open dialog box + hResult = pFileOpen->Show(hwnd); + + //Get file name from the dialoh box + if(SUCCEEDED(hResult)) + { + if(openSaveConfig.openMultiple) + { + IShellItemArray* pItemArray; + hResult = pFileOpen->GetResults(&pItemArray); + if(SUCCEEDED(hResult)) + { + + } + } + else + { + IShellItem* pItem; + hResult = pFileOpen->GetResult(&pItem); + if(SUCCEEDED(hResult)) + { + PWSTR pszFilePath; + hResult = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); + } + } + + } + } + } + return {}; + } + + std::vector SHWinDialog::DisplaySaveAsDialog(OpenSaveConfig const& openSaveConfig) + { + return{}; + } +} diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h new file mode 100644 index 00000000..02fe07b9 --- /dev/null +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h @@ -0,0 +1,36 @@ +#pragma once +#include +#include + +namespace SHADE +{ + //https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox + enum class MessageBoxType + { + MB_ERROR = 0x00000010L, + MB_QUESTION = 0x00000020L, + MB_WARNING = 0x00000030L, + MB_INFO = 0x00000040L, + MB_MAX = 0 + }; + + struct OpenSaveConfig + { + using Extension = std::string; + using Extensions = std::vector; + using FileTypeDesc = std::pair; + using FilterList = std::vector; + + std::string title = "Open"; + bool openFolders = false; + bool openMultiple = false; + FilterList filterList{}; + }; + + struct SHWinDialog + { + static void DisplayMessageBox(MessageBoxType const& messageBoxType, std::string const& title, std::string const& text); + static std::vector DisplayOpenDialog(OpenSaveConfig const& openSaveConfig); + static std::vector DisplaySaveAsDialog(OpenSaveConfig const& openSaveConfig); + }; +} diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.cpp b/SHADE_Engine/src/Tools/SHDebugDraw.cpp new file mode 100644 index 00000000..a5b86c42 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHDebugDraw.cpp @@ -0,0 +1,73 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2022 +\brief Contains the definition of functions of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Header +#include "SHpch.h" +// Primary Include +#include "SHDebugDraw.h" +// Project Includes +#include "Math/Vector/SHVec4.h" +#include "Math/SHColour.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "ECS_Base/Managers/SHSystemManager.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHDebugDrawSystem* SHDebugDraw::dbgDrawSys = nullptr; + + /*-----------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHDebugDraw::Init(SHDebugDrawSystem* sys) + { + dbgDrawSys = sys; + if (dbgDrawSys == nullptr) + { + SHLOG_ERROR("[SHDebugDraw] Invalid SHDebugDrawSystem provided for initialization!"); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*-----------------------------------------------------------------------------------*/ + void SHDebugDraw::Line(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + dbgDrawSys->DrawLine(color, startPt, endPt); + } + + void SHDebugDraw::Tri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + dbgDrawSys->DrawTri(color, pt1, pt2, pt3); + } + + void SHDebugDraw::Quad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + dbgDrawSys->DrawQuad(color, pt1, pt2, pt3, pt4); + } + + void SHDebugDraw::Poly(const SHVec4& color, std::initializer_list pointList) + { + dbgDrawSys->DrawPoly(color, pointList); + } + + void SHDebugDraw::Cube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + dbgDrawSys->DrawCube(color, pos, size); + } + + void SHDebugDraw::Sphere(const SHVec4& color, const SHVec3& pos, double radius) + { + dbgDrawSys->DrawSphere(color, pos, radius); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHDebugDraw.h b/SHADE_Engine/src/Tools/SHDebugDraw.h new file mode 100644 index 00000000..7ce44ec2 --- /dev/null +++ b/SHADE_Engine/src/Tools/SHDebugDraw.h @@ -0,0 +1,101 @@ +/************************************************************************************//*! +\file SHDebugDraw.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 2, 2022 +\brief Contains the definition of the SHDebugDraw static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "SH_API.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHDebugDrawSystem; + class SHVec4; + class SHVec3; + class SHColour; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Static helper class to make it easier to do debug drawing and enable support for + /// managed code to execute it withot dependency hell due to graphics system + /// dependencies. + /// + class SH_API SHDebugDraw final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Lifecycle Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Sets up the link with the SHDebugDrawSystem. Must be called after the + /// SHDebugDrawSystem is spawned. + /// + static void Init(SHDebugDrawSystem* sys); + + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space. + /// + /// Colour of the line. + /// First point of the line. + /// Second point of the line. + static void Line(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + /// + /// Renders a triangle indicated by three points in world space. + /// + /// Colour of the triangle. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + static void Tri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + /// + /// Renders a quadrilateral indicated by four points in world space. + /// + /// Colour of the quadrilateral. + /// First point of the triangle. + /// Second point of the quadrilateral. + /// Third point of the quadrilateral. + /// Third point of the quadrilateral. + static void Quad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + /// + /// Renders a polygon indicated by the specified set of points in world space. + /// + /// Colour of the polygon. + /// List of points for the polygon. + static void Poly(const SHVec4& color, std::initializer_list pointList); + /// + /// Renders a wireframe cube centered around the position specified in world space. + /// + /// Colour of the cube. + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + static void Cube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + /// + /// Renders a wireframe sphere centered around the position specified in world space. + /// + /// Colour of the sphere. + /// Position where the sphere wil be centered at. + /// Size of the rendered sphere. + static void Sphere(const SHVec4& color, const SHVec3& pos, double radius); + + private: + /*---------------------------------------------------------------------------------*/ + /* Static Data Members */ + /*---------------------------------------------------------------------------------*/ + static SHDebugDrawSystem* dbgDrawSys; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Tools/SHLog.h b/SHADE_Engine/src/Tools/SHLog.h index 89dd9206..91117da6 100644 --- a/SHADE_Engine/src/Tools/SHLog.h +++ b/SHADE_Engine/src/Tools/SHLog.h @@ -9,7 +9,7 @@ Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ - +#pragma once // Standard Library #include // Project Headers diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 906511c1..b383f002 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -25,11 +25,16 @@ project "SHADE_Managed" includedirs { "%{prj.location}/src", + } + + externalincludedirs + { "%{IncludeDir.spdlog}/include", "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", "%{IncludeDir.yamlcpp}", + "%{IncludeDir.SDL}\\include", "%{IncludeDir.RTTR}/include", "%{IncludeDir.dotnet}\\include", "%{IncludeDir.reactphysics3d}\\include", @@ -38,13 +43,16 @@ project "SHADE_Managed" libdirs { - "%{IncludeDir.RTTR}/lib" + "%{IncludeDir.RTTR}/lib", + "%{IncludeDir.SDL}/lib" } links { "yaml-cpp", "imgui", + "SDL2.lib", + "SDL2main.lib", "SHADE_Engine", "SHADE_CSharp" } diff --git a/SHADE_Managed/src/Components/Camera.cxx b/SHADE_Managed/src/Components/Camera.cxx new file mode 100644 index 00000000..5e570cc1 --- /dev/null +++ b/SHADE_Managed/src/Components/Camera.cxx @@ -0,0 +1,127 @@ +#include "SHpch.h" + +#include "Camera.hxx" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Camera/SHCameraSystem.h" + + +namespace SHADE +{ + Camera::Camera(Entity entity) + :Component(entity) + { + + } + + + float Camera::Pitch::get() + { + return (GetNativeComponent()->GetPitch()); + } + + void Camera::Pitch::set(float val) + { + GetNativeComponent()->SetPitch(val); + } + float Camera::Yaw::get() + { + return (GetNativeComponent()->GetYaw()); + } + + void Camera::Yaw::set(float val) + { + GetNativeComponent()->SetYaw(val); + } + float Camera::Roll::get() + { + return (GetNativeComponent()->GetRoll()); + } + + void Camera::Roll::set(float val) + { + GetNativeComponent()->SetRoll(val); + } + float Camera::Width::get() + { + return (GetNativeComponent()->GetWidth()); + } + + void Camera::Width::set(float val) + { + GetNativeComponent()->SetWidth(val); + } + float Camera::Height::get() + { + return (GetNativeComponent()->GetHeight()); + } + + void Camera::Height::set(float val) + { + GetNativeComponent()->SetHeight(val); + } + float Camera::Near::get() + { + return (GetNativeComponent()->GetNear()); + } + + void Camera::Near::set(float val) + { + GetNativeComponent()->SetNear(val); + } + float Camera::Far::get() + { + return (GetNativeComponent()->GetFar()); + } + + void Camera::Far::set(float val) + { + GetNativeComponent()->SetFar(val); + } + float Camera::FOV::get() + { + return (GetNativeComponent()->GetFOV()); + } + + void Camera::FOV::set(float val) + { + GetNativeComponent()->SetFOV(val); + } + + Vector3 Camera::Position::get() + { + return Convert::ToCLI(GetNativeComponent()->GetPosition()); + } + + void Camera::Position::set(Vector3 val) + { + GetNativeComponent()->SetPosition(Convert::ToNative(val)); + } + + void Camera::SetMainCamera(size_t directorIndex) + { + auto system = SHSystemManager::GetSystem(); + system->SetMainCamera(GetNativeComponent()->GetEID(), directorIndex); + } + + void Camera::SetMainCamera() + { + SetMainCamera(0); + } + + void Camera::LookAt(Vector3 targetPosition) + { + auto system = SHSystemManager::GetSystem(); + system->CameraLookAt(*GetNativeComponent(), Convert::ToNative(targetPosition)); + } + + Vector3 Camera::GetForward() + { + auto system = SHSystemManager::GetSystem(); + SHVec3 forward, up, right; + system->GetCameraAxis(*GetNativeComponent(), forward, right, up); + return Convert::ToCLI(forward); + + } + + +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/Camera.hxx b/SHADE_Managed/src/Components/Camera.hxx new file mode 100644 index 00000000..257bff11 --- /dev/null +++ b/SHADE_Managed/src/Components/Camera.hxx @@ -0,0 +1,70 @@ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +#include "Math/Quaternion.hxx" +// External Dependencies +#include "Camera/SHCameraComponent.h" + +namespace SHADE +{ + public ref class Camera : public Component + { + internal: + Camera(Entity entity); + + public: + property float Pitch + { + float get(); + void set(float val); + } + property float Yaw + { + float get(); + void set(float val); + } + property float Roll + { + float get(); + void set(float val); + } + property float Width + { + float get(); + void set(float val); + } + property float Height + { + float get(); + void set(float val); + } + property float Near + { + float get(); + void set(float val); + } + property float Far + { + float get(); + void set(float val); + } + property float FOV + { + float get(); + void set(float val); + } + property Vector3 Position + { + Vector3 get(); + void set(Vector3 val); + } + + + void SetMainCamera(size_t directorIndex); + void SetMainCamera(); + void LookAt(Vector3 targetPosition); + Vector3 GetForward(); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/CameraArm.cxx b/SHADE_Managed/src/Components/CameraArm.cxx new file mode 100644 index 00000000..67fcf6cf --- /dev/null +++ b/SHADE_Managed/src/Components/CameraArm.cxx @@ -0,0 +1,51 @@ +#include "SHpch.h" +#include "CameraArm.hxx" + + +namespace SHADE +{ + CameraArm::CameraArm(Entity entity) + :Component(entity) + { + + } + + float CameraArm::Pitch::get() + { + return (GetNativeComponent()->GetPitch()); + } + + void CameraArm::Pitch::set(float val) + { + GetNativeComponent()->SetPitch(val); + } + float CameraArm::Yaw::get() + { + return (GetNativeComponent()->GetYaw()); + } + + void CameraArm::Yaw::set(float val) + { + GetNativeComponent()->SetYaw(val); + } + + float CameraArm::ArmLength::get() + { + return (GetNativeComponent()->GetArmLength()); + } + + void CameraArm::ArmLength::set(float val) + { + GetNativeComponent()->SetArmLength(val); + } + + bool CameraArm::LookAtCameraOrigin::get() + { + return GetNativeComponent()->lookAtCameraOrigin; + } + + void CameraArm::LookAtCameraOrigin::set(bool val) + { + GetNativeComponent()->lookAtCameraOrigin = val; + } +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/CameraArm.hxx b/SHADE_Managed/src/Components/CameraArm.hxx new file mode 100644 index 00000000..771771cf --- /dev/null +++ b/SHADE_Managed/src/Components/CameraArm.hxx @@ -0,0 +1,40 @@ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" + +// External Dependencies +#include "Camera/SHCameraArmComponent.h" + + +namespace SHADE +{ + public ref class CameraArm : public Component + { + internal: + CameraArm(Entity entity); + public: + property float Pitch + { + float get(); + void set(float val); + } + property float Yaw + { + float get(); + void set(float val); + } + property float ArmLength + { + float get(); + void set(float val); + } + property bool LookAtCameraOrigin + { + bool get(); + void set(bool val); + } + + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Components/Component.cxx b/SHADE_Managed/src/Components/Component.cxx index a6afc5cc..7f56fad3 100644 --- a/SHADE_Managed/src/Components/Component.cxx +++ b/SHADE_Managed/src/Components/Component.cxx @@ -67,6 +67,11 @@ namespace SHADE ScriptStore::RemoveScript(owner.GetEntity()); } + BaseComponent::operator bool(BaseComponent^ c) + { + return c != nullptr; + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx index 670e4e21..5ffa3952 100644 --- a/SHADE_Managed/src/Components/Component.hxx +++ b/SHADE_Managed/src/Components/Component.hxx @@ -101,6 +101,15 @@ namespace SHADE generic where T : ref class, Script void RemoveScript(); + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a component is null. + /// + /// Component to check. + static operator bool(BaseComponent^ c); + protected: /*-----------------------------------------------------------------------------*/ /* Constructors */ diff --git a/SHADE_Managed/src/Components/RigidBody.cxx b/SHADE_Managed/src/Components/RigidBody.cxx index 172b928b..12861600 100644 --- a/SHADE_Managed/src/Components/RigidBody.cxx +++ b/SHADE_Managed/src/Components/RigidBody.cxx @@ -148,6 +148,14 @@ namespace SHADE { return Convert::ToCLI(GetNativeComponent()->GetTorque()); } + bool RigidBody::Interpolating::get() + { + return GetNativeComponent()->IsInterpolating(); + } + void RigidBody::Interpolating::set(bool value) + { + GetNativeComponent()->SetInterpolate(value); + } /*---------------------------------------------------------------------------------*/ /* Force Functions */ diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx index b3e031ba..d3a30612 100644 --- a/SHADE_Managed/src/Components/RigidBody.hxx +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -129,6 +129,11 @@ namespace SHADE { Vector3 get(); } + property bool Interpolating + { + bool get(); + void set(bool value); + } /*-----------------------------------------------------------------------------*/ /* Force Functions */ diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx index 98f0da4f..927ce87f 100644 --- a/SHADE_Managed/src/Components/Transform.cxx +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -87,15 +87,6 @@ namespace SHADE { GetNativeComponent()->SetWorldScale(Convert::ToNative(val)); } - Transform^ Transform::Parent::get() - { - auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(owner.GetEntity()); - if (!node) - throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); - - const auto PARENT = node->GetParent(); - return PARENT ? gcnew Transform(PARENT->GetEntityID()) : nullptr; - } /*---------------------------------------------------------------------------------*/ /* Constructors */ @@ -103,21 +94,4 @@ namespace SHADE Transform::Transform(Entity entity) : Component(entity) {} - - /*---------------------------------------------------------------------------------*/ - /* Usage Functions */ - /*---------------------------------------------------------------------------------*/ - - void Transform::SetParent(Transform^ parent, bool worldPositionStays) - { - auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - auto node = sceneGraph.GetNode(owner.GetEntity()); - if (!node) - throw gcnew System::InvalidOperationException("[Transform] Unable to retrieve SceneGraphNode for an Entity."); - - if (parent) - node->SetParent(sceneGraph.GetNode(parent->owner.GetEntity())); - else - sceneGraph.SetParent(parent->owner.GetEntity(), nullptr); - } } diff --git a/SHADE_Managed/src/Components/Transform.hxx b/SHADE_Managed/src/Components/Transform.hxx index bbe9fd19..942c6224 100644 --- a/SHADE_Managed/src/Components/Transform.hxx +++ b/SHADE_Managed/src/Components/Transform.hxx @@ -107,30 +107,6 @@ namespace SHADE Vector3 get(); void set(Vector3 val); } - /// - /// Parent Transform that affects this Transform. - /// - property Transform^ Parent - { - Transform^ get(); - } - - /*-----------------------------------------------------------------------------*/ - /* Usage Functions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Sets the parent of this Transform component. - /// - /// - /// Entity that contains the Transform component that this Transform will be - /// parented to. If null, unparenting will occur. - /// - /// - /// If true, the transform values of this Transform component will retain their - /// pre-parent-change global transforms. The local transform values will be - /// modified to ensure that the global transforms do not change. - /// - void SetParent(Transform^ parent, bool worldPositionStays); }; } diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 1097e203..55fe91da 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -260,7 +260,7 @@ namespace SHADE int val = safe_cast(field->GetValue(object)); int oldVal = val; - if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames)) + if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames, &isHovered)) { field->SetValue(object, val); registerUndoAction(object, field, val, oldVal); @@ -280,12 +280,23 @@ namespace SHADE // Actual Field std::string val = Convert::ToNative(stringVal); std::string oldVal = val; - if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val)) + if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val, &isHovered)) { field->SetValue(object, Convert::ToCLI(val)); registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } + else if (field->FieldType == GameObject::typeid) + { + GameObject gameObj = safe_cast(field->GetValue(object)); + uint32_t entityId = gameObj.GetEntity(); + if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered)) + { + GameObject newVal = GameObject(entityId); + field->SetValue(object, newVal); + registerUndoAction(object, field, newVal, gameObj); + } + } else { array^ interfaces = field->FieldType->GetInterfaces(); diff --git a/SHADE_Managed/src/Engine/Application.cxx b/SHADE_Managed/src/Engine/Application.cxx new file mode 100644 index 00000000..c19bafa6 --- /dev/null +++ b/SHADE_Managed/src/Engine/Application.cxx @@ -0,0 +1,71 @@ +/************************************************************************************//*! +\file Application.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions in the static managed + Application class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Application.hxx" +// External Dependencies +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + bool Application::IsPlaying::get() + { + auto editor = SHSystemManager::GetSystem(); + if (editor) + return editor->editorState == SHEditor::State::PLAY + || + editor->editorState == SHEditor::State::PAUSE; + + return true; + } + bool Application::IsPaused::get() + { + auto editor = SHSystemManager::GetSystem(); + if (editor) + return editor->editorState == SHEditor::State::PAUSE; + + return false; + } + int Application::WindowWidth::get() + { + return SHGraphicsSystemInterface::GetWindowWidth(); + } + int Application::WindowHeight::get() + { + return SHGraphicsSystemInterface::GetWindowWidth(); + } + bool Application::IsFullscreen::get() + { + return SHGraphicsSystemInterface::IsFullscreen(); + } + /*void Application::IsFullscreen::set(bool value) + { + return SHGraphicsSystemInterface::SetFullscreen(value); + }*/ + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void Application::Quit() + { + SHGraphicsSystemInterface::CloseWindow(); + } +} diff --git a/SHADE_Managed/src/Engine/Application.hxx b/SHADE_Managed/src/Engine/Application.hxx new file mode 100644 index 00000000..8629cf75 --- /dev/null +++ b/SHADE_Managed/src/Engine/Application.hxx @@ -0,0 +1,77 @@ +/************************************************************************************//*! +\file Application.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of a managed static Application class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Static class that contains useful properties for querying the state of the + /// engine. + /// + public ref class Application abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Whether or not the engine is playing. This will always be true on Publish. + /// On Debug/Release builds, this is true when the editor is in Play Mode. It + /// will also be true even if the editor is in Play Mode but is paused. + /// + static property bool IsPlaying + { + bool get(); + } + /// + /// Whether or not the engine is in a paused state where script updates and + /// physics are not in play. + /// + static property bool IsPaused + { + bool get(); + } + /// + /// Retrieves the designated width of the current window. + /// + static property int WindowWidth + { + int get(); + } + /// + /// Retrieves the designated height of the current window. + /// + static property int WindowHeight + { + int get(); + } + /// + /// Whether or not the application is currently in fullscreen mode or not. + /// + static property bool IsFullscreen + { + bool get(); + // TODO: once implemented on SHADE_Engine + //void set(bool value); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Marks the application to stop at the end of the current frame. + /// + static void Quit(); + }; +} diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index df67c788..3da39394 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -33,6 +33,8 @@ of DigiPen Institute of Technology is prohibited. #include "Components/Transform.hxx" #include "Components\RigidBody.hxx" #include "Components\Collider.hxx" +#include "Components/Camera.hxx" +#include "Components/CameraArm.hxx" namespace SHADE { @@ -248,6 +250,8 @@ namespace SHADE componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 8c78e399..7ceabfed 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -17,9 +17,12 @@ of DigiPen Institute of Technology is prohibited. #include "GameObject.hxx" // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" +#include "Scene/SHSceneGraph.h" // Project Headers #include "ECS.hxx" +#include "Utility/Convert.hxx" #include "Scripts/ScriptStore.hxx" +#include "Utility/Debug.hxx" namespace SHADE { @@ -39,7 +42,13 @@ namespace SHADE System::Nullable GameObject::Find(System::String ^ name) { // Search the GameObjectLibrary for an Entity with the specified name - throw gcnew System::NotImplementedException(); + const auto ENTITY_ID = SHEntityManager::GetEntityByName(Convert::ToNative(name)); + if (ENTITY_ID == MAX_EID) + { + return {}; + } + + return GameObject(ENTITY_ID); } /*---------------------------------------------------------------------------------*/ @@ -56,7 +65,38 @@ namespace SHADE } bool GameObject::IsActiveInHierarchy::get() { - return true; // TODO: Update once we have an equivalent on the Entity object + auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(GetEntity()); + if (!node) + { + Debug::LogWarning("Attempting to access a GameObject's ActiveInHierarchy state which does not exist. Assuming inactive."); + return false; + } + return node->IsActive(); + } + Entity GameObject::EntityId::get() + { + return entity; + } + GameObject^ GameObject::Parent::get() + { + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + const auto* ROOT = SCENE_GRAPH.GetRoot(); + + const auto* NODE = SCENE_GRAPH.GetNode(entity); + if (NODE == nullptr) + throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); + + const auto* PARENT = NODE->GetParent(); + return PARENT != ROOT ? gcnew GameObject(PARENT->GetEntityID()) : nullptr; + } + void GameObject::Parent::set(GameObject^ newParent) + { + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + + if (newParent == nullptr) + SCENE_GRAPH.SetParent(entity, nullptr); + else + SCENE_GRAPH.SetParent(entity, newParent->EntityId); } /*---------------------------------------------------------------------------------*/ @@ -141,11 +181,13 @@ namespace SHADE /* Constructors */ /*---------------------------------------------------------------------------------*/ GameObject::GameObject(const SHEntity& entity) - : entity { entity.GetEID() } + : entity { entity.GetEID() } + , children{ gcnew System::Collections::ArrayList } {} GameObject::GameObject(Entity entity) - : entity { entity } + : entity { entity } + , children{ gcnew System::Collections::ArrayList } {} /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 723d9cec..99296a91 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -86,6 +86,21 @@ namespace SHADE { bool get(); } + /// + /// Native Entity ID value for this GameObject. + /// + property Entity EntityId + { + Entity get(); + } + /// + /// The parent entity for this GameObject. + /// + property GameObject^ Parent + { + GameObject^ get(); + void set(GameObject^); + } /*-----------------------------------------------------------------------------*/ /* GameObject Property Functions */ @@ -105,6 +120,7 @@ namespace SHADE /// Whether to activate or deactivate this GameObject. /// void SetActive(bool active); + /*-----------------------------------------------------------------------------*/ /* Component Access Functions */ @@ -235,7 +251,8 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - Entity entity; + Entity entity; + System::Collections::ArrayList^ children; public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx index ff0628e7..36032e00 100644 --- a/SHADE_Managed/src/Engine/Time.cxx +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -14,6 +14,9 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ // Precompiled Headers #include "SHpch.h" +// External Dependencies +#include "FRC/SHFramerateController.h" +#include "Physics/SHPhysicsSystemInterface.h" // Primary Header #include "Time.hxx" @@ -26,4 +29,14 @@ namespace SHADE { return SHFrameRateController::GetRawDeltaTime(); } + + + float Time::DeltaTimeF::get() + { + return static_cast(SHFrameRateController::GetRawDeltaTime()); + } + double Time::FixedDeltaTime::get() + { + return SHPhysicsSystemInterface::GetFixedDT(); + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/Time.hxx b/SHADE_Managed/src/Engine/Time.hxx index 969eea03..c0f0ed62 100644 --- a/SHADE_Managed/src/Engine/Time.hxx +++ b/SHADE_Managed/src/Engine/Time.hxx @@ -14,8 +14,6 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once -#include "FRC/SHFramerateController.h" - namespace SHADE { /// @@ -29,13 +27,28 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /// /// Time taken to process the previous frame. - /// Note, is affected by TimeScale. Use UnscaledDeltaTime if you wish to retrieve - /// real world time. This is also affected by MaxDeltaTime clamping that - /// UnscaledDeltaTime is subject to. /// static property double DeltaTime { double get(); } + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Time taken to process the previous frame. + /// + static property float DeltaTimeF + { + float get(); + } + /// + /// Time taken for Physics simulations. You should use this for operations + /// within Script.FixedUpdate() + /// + static property double FixedDeltaTime + { + double get(); + } }; } \ No newline at end of file diff --git a/SHADE_Managed/src/Input/Input.cxx b/SHADE_Managed/src/Input/Input.cxx index 0a386f3a..f0ea0edc 100644 --- a/SHADE_Managed/src/Input/Input.cxx +++ b/SHADE_Managed/src/Input/Input.cxx @@ -99,4 +99,11 @@ namespace SHADE return SHInputManager::GetKeyReleasedTime(static_cast(key)); } + Vector2 Input::GetMouseVelocity() + { + double velX, velY; + SHInputManager::GetMouseVelocity(&velX, &velY); + + return Convert::ToCLI(SHVec2{ (float)velX,(float)velY }); + } } \ No newline at end of file diff --git a/SHADE_Managed/src/Input/Input.hxx b/SHADE_Managed/src/Input/Input.hxx index f281e4c8..875054cc 100644 --- a/SHADE_Managed/src/Input/Input.hxx +++ b/SHADE_Managed/src/Input/Input.hxx @@ -31,10 +31,159 @@ namespace SHADE /// /// Represents the available supported keycodes that can be passed into the /// key-based Input functions. + /// + /// Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html + /// Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode /// enum class KeyCode : int { + Backspace = static_cast(SHInputManager::SH_KEYCODE::BACKSPACE), + Delete = static_cast(SHInputManager::SH_KEYCODE::DEL), + Tab = static_cast(SHInputManager::SH_KEYCODE::TAB), + Clear = static_cast(SHInputManager::SH_KEYCODE::CLEAR), + Return = static_cast(SHInputManager::SH_KEYCODE::ENTER), + Pause = static_cast(SHInputManager::SH_KEYCODE::PAUSE), + Escape = static_cast(SHInputManager::SH_KEYCODE::ESCAPE), Space = static_cast(SHInputManager::SH_KEYCODE::SPACE), + Keypad0 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_0), + Keypad1 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_1), + Keypad2 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_2), + Keypad3 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_3), + Keypad4 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_4), + Keypad5 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_5), + Keypad6 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_6), + Keypad7 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_7), + Keypad8 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_8), + Keypad9 = static_cast(SHInputManager::SH_KEYCODE::NUMPAD_9), + KeypadPeriod = static_cast(SHInputManager::SH_KEYCODE::DECIMAL), + KeypadDivide = static_cast(SHInputManager::SH_KEYCODE::DIVIDE), + KeypadMultiply = static_cast(SHInputManager::SH_KEYCODE::MULTIPLY), + KeypadMinus = static_cast(SHInputManager::SH_KEYCODE::SUBTRACT), + KeypadPlus = static_cast(SHInputManager::SH_KEYCODE::ADD), + KeypadEnter = static_cast(SHInputManager::SH_KEYCODE::ENTER), + //KeypadEquals + UpArrow = static_cast(SHInputManager::SH_KEYCODE::UP_ARROW), + DownArrow = static_cast(SHInputManager::SH_KEYCODE::DOWN_ARROW), + RightArrow = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ARROW), + LeftArrow = static_cast(SHInputManager::SH_KEYCODE::LEFT_ARROW), + Insert = static_cast(SHInputManager::SH_KEYCODE::INSERT), + Home = static_cast(SHInputManager::SH_KEYCODE::HOME), + End = static_cast(SHInputManager::SH_KEYCODE::END), + PageUp = static_cast(SHInputManager::SH_KEYCODE::PAGE_UP), + PageDown = static_cast(SHInputManager::SH_KEYCODE::PAGE_DOWN), + F1 = static_cast(SHInputManager::SH_KEYCODE::F1), + F2 = static_cast(SHInputManager::SH_KEYCODE::F2), + F3 = static_cast(SHInputManager::SH_KEYCODE::F3), + F4 = static_cast(SHInputManager::SH_KEYCODE::F4), + F5 = static_cast(SHInputManager::SH_KEYCODE::F5), + F6 = static_cast(SHInputManager::SH_KEYCODE::F6), + F7 = static_cast(SHInputManager::SH_KEYCODE::F7), + F8 = static_cast(SHInputManager::SH_KEYCODE::F8), + F9 = static_cast(SHInputManager::SH_KEYCODE::F9), + F10 = static_cast(SHInputManager::SH_KEYCODE::F10), + F11 = static_cast(SHInputManager::SH_KEYCODE::F11), + F12 = static_cast(SHInputManager::SH_KEYCODE::F12), + F13 = static_cast(SHInputManager::SH_KEYCODE::F13), + F14 = static_cast(SHInputManager::SH_KEYCODE::F14), + F15 = static_cast(SHInputManager::SH_KEYCODE::F15), + F16 = static_cast(SHInputManager::SH_KEYCODE::F16), + F17 = static_cast(SHInputManager::SH_KEYCODE::F17), + F18 = static_cast(SHInputManager::SH_KEYCODE::F18), + F19 = static_cast(SHInputManager::SH_KEYCODE::F19), + F20 = static_cast(SHInputManager::SH_KEYCODE::F20), + F21 = static_cast(SHInputManager::SH_KEYCODE::F21), + F22 = static_cast(SHInputManager::SH_KEYCODE::F22), + F23 = static_cast(SHInputManager::SH_KEYCODE::F23), + F24 = static_cast(SHInputManager::SH_KEYCODE::F24), + Alpha0 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_0), + Alpha1 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_1), + Alpha2 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_2), + Alpha3 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_3), + Alpha4 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_4), + Alpha5 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_5), + Alpha6 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_6), + Alpha7 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_7), + Alpha8 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_8), + Alpha9 = static_cast(SHInputManager::SH_KEYCODE::NUMBER_9), + //Exclaim + //DoubleQuote + //Hash + //Dollar + //Percent + //Ampersand + Quote = static_cast(SHInputManager::SH_KEYCODE::OEM_7), + //LeftParen + //RightParen + //Asterisk + //Plus + Comma = static_cast(SHInputManager::SH_KEYCODE::OEM_COMMA), + Minus = static_cast(SHInputManager::SH_KEYCODE::OEM_MINUS), + Period = static_cast(SHInputManager::SH_KEYCODE::OEM_PERIOD), + Slash = static_cast(SHInputManager::SH_KEYCODE::OEM_2), + //Colon + Semicolon = static_cast(SHInputManager::SH_KEYCODE::OEM_1), + //Less + Equals = static_cast(SHInputManager::SH_KEYCODE::OEM_PLUS), + //Greater + //Question + //At + LeftBracket = static_cast(SHInputManager::SH_KEYCODE::OEM_4), + Backslash = static_cast(SHInputManager::SH_KEYCODE::OEM_5), + RightBracket = static_cast(SHInputManager::SH_KEYCODE::OEM_6), + //Caret + //Underscore + BackQuote = static_cast(SHInputManager::SH_KEYCODE::OEM_3), + A = static_cast(SHInputManager::SH_KEYCODE::A), + B = static_cast(SHInputManager::SH_KEYCODE::B), + C = static_cast(SHInputManager::SH_KEYCODE::C), + D = static_cast(SHInputManager::SH_KEYCODE::D), + E = static_cast(SHInputManager::SH_KEYCODE::E), + F = static_cast(SHInputManager::SH_KEYCODE::F), + G = static_cast(SHInputManager::SH_KEYCODE::G), + H = static_cast(SHInputManager::SH_KEYCODE::H), + I = static_cast(SHInputManager::SH_KEYCODE::I), + J = static_cast(SHInputManager::SH_KEYCODE::J), + K = static_cast(SHInputManager::SH_KEYCODE::K), + L = static_cast(SHInputManager::SH_KEYCODE::L), + M = static_cast(SHInputManager::SH_KEYCODE::M), + N = static_cast(SHInputManager::SH_KEYCODE::N), + O = static_cast(SHInputManager::SH_KEYCODE::O), + P = static_cast(SHInputManager::SH_KEYCODE::P), + Q = static_cast(SHInputManager::SH_KEYCODE::Q), + R = static_cast(SHInputManager::SH_KEYCODE::R), + S = static_cast(SHInputManager::SH_KEYCODE::S), + T = static_cast(SHInputManager::SH_KEYCODE::T), + U = static_cast(SHInputManager::SH_KEYCODE::U), + V = static_cast(SHInputManager::SH_KEYCODE::V), + W = static_cast(SHInputManager::SH_KEYCODE::W), + X = static_cast(SHInputManager::SH_KEYCODE::X), + Y = static_cast(SHInputManager::SH_KEYCODE::Y), + Z = static_cast(SHInputManager::SH_KEYCODE::Z), + //LeftCurlyBracket + //Pipe + //RightCurlyBracket + //Tilde + NumLock = static_cast(SHInputManager::SH_KEYCODE::NUM_LOCK), + CapsLock = static_cast(SHInputManager::SH_KEYCODE::CAPS_LOCK), + ScrollLock = static_cast(SHInputManager::SH_KEYCODE::SCROLL_LOCK), + RightShift = static_cast(SHInputManager::SH_KEYCODE::RIGHT_SHIFT), + LeftShift = static_cast(SHInputManager::SH_KEYCODE::LEFT_SHIFT), + RightControl = static_cast(SHInputManager::SH_KEYCODE::RIGHT_CTRL), + LeftControl = static_cast(SHInputManager::SH_KEYCODE::LEFT_CTRL), + RightAlt = static_cast(SHInputManager::SH_KEYCODE::RIGHT_ALT), + LeftAlt = static_cast(SHInputManager::SH_KEYCODE::LEFT_ALT), + LeftWindows = static_cast(SHInputManager::SH_KEYCODE::LEFT_WINDOWS), + RightWindows = static_cast(SHInputManager::SH_KEYCODE::RIGHT_WINDOWS), + //AltGr + Help = static_cast(SHInputManager::SH_KEYCODE::HELP), + Print = static_cast(SHInputManager::SH_KEYCODE::PRINT), + SysReq = static_cast(SHInputManager::SH_KEYCODE::PRINT_SCREEN), + //Break + //Menu + //Mouse buttons use mouse codes, which are enums declared later + //TODO Controller input +#if 0 + Space = static_cast(SHInputManager::SH_KEYCODE::SPACE), //Apostrophe = static_cast(SHInputManager::SH_KEYCODE::APOSTROPHE), Comma = static_cast(SHInputManager::SH_KEYCODE::OEM_COMMA), Minus = static_cast(SHInputManager::SH_KEYCODE::OEM_MINUS), @@ -190,7 +339,8 @@ namespace SHADE JoystickButton6 = JoystickView, JoystickButton7 = JoystickMenu, JoystickButton8 = JoystickLeftStick, - JoystickButton9 = JoystickRightStick + JoystickButton9 = JoystickRightStick +#endif }; /// @@ -321,5 +471,7 @@ namespace SHADE /// The key to check. /// Time in seconds that the key was held. static double GetMouseReleasedTime(MouseCode mouseButton); + + static Vector2 GetMouseVelocity(); }; } \ No newline at end of file diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index b110d4f8..42080d60 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -236,6 +236,22 @@ namespace SHADE lhs.y * rhs.y ); } + Vector2 Vector2::operator*(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x * static_cast(rhs), + lhs.y * static_cast(rhs) + ); + } + Vector2 Vector2::operator/(Vector2 lhs, double rhs) + { + return Vector2 + ( + lhs.x / static_cast(rhs), + lhs.y / static_cast(rhs) + ); + } Vector2 Vector2::operator*(Vector2 lhs, float rhs) { return Vector2 diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index 94b1989f..4877696b 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -361,6 +361,22 @@ namespace SHADE /// Vector2 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. + static Vector2 operator*(Vector2 lhs, double rhs); + /// + /// Calculates the division of a Vector2 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector2 to divide with. + /// The result of the scalar division. + static Vector2 operator/(Vector2 lhs, double rhs); + /// + /// Calculates the multiplication of a Vector2 with a scalar value and returns + /// the result. + /// + /// Vector2 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. static Vector2 operator*(Vector2 lhs, float rhs); /// /// Calculates the division of a Vector2 with a scalar value and returns diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index adbb4d3a..83adbb38 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -237,6 +237,24 @@ namespace SHADE lhs.z * rhs.z ); } + Vector3 Vector3::operator*(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x * static_cast(rhs), + lhs.y * static_cast(rhs), + lhs.z * static_cast(rhs) + ); + } + Vector3 Vector3::operator/(Vector3 lhs, double rhs) + { + return Vector3 + ( + lhs.x / static_cast(rhs), + lhs.y / static_cast(rhs), + lhs.z / static_cast(rhs) + ); + } Vector3 Vector3::operator*(Vector3 lhs, float rhs) { return Vector3 diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index 70cff88f..4cdf653e 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -375,6 +375,22 @@ namespace SHADE /// Vector3 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. + static Vector3 operator*(Vector3 lhs, double rhs); + /// + /// Calculates the division of a Vector3 with a scalar value and returns + /// the result. + /// + /// Scalar to divide with. + /// Vector3 to divide with. + /// The result of the scalar division. + static Vector3 operator/(Vector3 lhs, double rhs); + /// + /// Calculates the multiplication of a Vector3 with a scalar value and returns + /// the result. + /// + /// Vector3 to multiply with. + /// Scalar to multiply with. + /// The result of the scalar multiplication. static Vector3 operator*(Vector3 lhs, float rhs); /// /// Calculates the division of a Vector3 with a scalar value and returns diff --git a/SHADE_Managed/src/Physics/CollisionInfo.cxx b/SHADE_Managed/src/Physics/CollisionInfo.cxx new file mode 100644 index 00000000..135760db --- /dev/null +++ b/SHADE_Managed/src/Physics/CollisionInfo.cxx @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file CollisionInfo.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the functions of the managed CollisionInfo + struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "CollisionInfo.hxx" +#include "Components/RigidBody.hxx" +#include "Components/Collider.hxx" + +namespace SHADE +{ + Collider^ CollisionInfo::Collider::get() + { + return GameObject.GetComponent(); + } + + CollisionShape^ CollisionInfo::CollisionShape::get() + { + throw gcnew System::NotImplementedException(); + } + + RigidBody^ CollisionInfo::RigidBody::get() + { + return GameObject.GetComponent(); + } +} diff --git a/SHADE_Managed/src/Physics/CollisionInfo.hxx b/SHADE_Managed/src/Physics/CollisionInfo.hxx new file mode 100644 index 00000000..40cb9ccc --- /dev/null +++ b/SHADE_Managed/src/Physics/CollisionInfo.hxx @@ -0,0 +1,66 @@ +/************************************************************************************//*! +\file CollisionInfo.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the managed CollisionInfo struct with the + definition of its properties and declaration of functions. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Project Includes +#include "Engine/GameObject.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + ref class RigidBody; + ref class Collider; + ref class CollisionShape; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Struct that describes a collision + /// + public value struct CollisionInfo + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// The GameObject whose collider you are colliding with. + /// + property GameObject GameObject; + /// + /// The Collider that you are colliding with. + /// + property Collider^ Collider + { + SHADE::Collider^ get(); + } + /// + /// The CollisionShape of the Collider that you are colliding with. + /// + property CollisionShape^ CollisionShape + { + SHADE::CollisionShape^ get(); + } + /// + /// The RigidBody that you are colliding with. + /// + property RigidBody^ RigidBody + { + SHADE::RigidBody^ get(); + } + }; +} diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index ecd27325..e476d69d 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -18,6 +18,8 @@ of DigiPen Institute of Technology is prohibited. #include "Script.hxx" // Project Headers #include "Utility/Debug.hxx" +#include "ScriptStore.hxx" +#include "Engine/ECS.hxx" namespace SHADE { @@ -49,8 +51,7 @@ namespace SHADE generic void Script::RemoveComponent() { - throw gcnew System::NotImplementedException; - //ECS::RemoveComponent(owner.GetNativeEntity()); + owner.RemoveComponent(); } /*---------------------------------------------------------------------------------*/ @@ -59,37 +60,37 @@ namespace SHADE generic T Script::AddScript() { - throw gcnew System::NotImplementedException; - //return ScriptStore::AddScript(owner.GetEntity()); + return ScriptStore::AddScript(owner.GetEntity()); } generic T Script::GetScript() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScript(owner.GetEntity()); + return ScriptStore::GetScript(owner.GetEntity()); } generic T Script::GetScriptInChildren() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScriptInChildren(owner.GetEntity()); + return ScriptStore::GetScriptInChildren(owner.GetEntity()); } generic System::Collections::Generic::IEnumerable^ Script::GetScripts() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScripts(owner.GetEntity()); + return ScriptStore::GetScripts(owner.GetEntity()); } generic void Script::RemoveScript() { - throw gcnew System::NotImplementedException; - //ScriptStore::RemoveScript(owner.GetEntity()); + ScriptStore::RemoveScript(owner.GetEntity()); } - + + Script::operator bool(Script^ s) + { + return s != nullptr; + } + /*---------------------------------------------------------------------------------*/ /* "All-time" Lifecycle Functions */ /*---------------------------------------------------------------------------------*/ @@ -146,6 +147,48 @@ namespace SHADE SAFE_NATIVE_CALL_END(this) } + void Script::OnCollisionEnter(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionEnter(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnCollisionStay(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionStay(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnCollisionExit(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionExit(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerEnter(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerEnter(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerStay(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerStay(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerExit(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerExit(collision); + SAFE_NATIVE_CALL_END(this) + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ @@ -168,4 +211,14 @@ namespace SHADE void Script::update() {} void Script::lateUpdate() {} void Script::onDestroy() {} -}// namespace PlushieAPI + + /*---------------------------------------------------------------------------------*/ + /* Virtual Event Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::onTriggerEnter(CollisionInfo) {} + void Script::onTriggerStay(CollisionInfo) {} + void Script::onTriggerExit(CollisionInfo) {} + void Script::onCollisionEnter(CollisionInfo) {} + void Script::onCollisionStay(CollisionInfo) {} + void Script::onCollisionExit(CollisionInfo) {} +} diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index cef9f4cd..afeaa8a0 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -15,6 +15,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Engine/GameObject.hxx" +#include "Physics/CollisionInfo.hxx" namespace SHADE { @@ -153,6 +154,15 @@ namespace SHADE generic where T : ref class, Script void RemoveScript(); + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a component is null. + /// + /// Component to check. + static operator bool(Script^ s); + internal: /*-----------------------------------------------------------------------------*/ /* "All-Time" Lifecycle Functions */ @@ -204,6 +214,46 @@ namespace SHADE /// void OnDestroy(); + /*-----------------------------------------------------------------------------*/ + /* Event Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Used to call onCollisionEnter(). This should be called when a collision is + /// detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionEnter(CollisionInfo collision); + /// + /// Used to call onCollisionStay(). This should be called when a collision is + /// persistent between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionStay(CollisionInfo collision); + /// + /// Used to call onCollisionExit(). This should be called when a collision ends + /// between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionExit(CollisionInfo collision); + /// + /// Used to call onTriggerEnter(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerEnter(CollisionInfo collision); + /// + /// Used to call onTriggerStay(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerStay(CollisionInfo collision); + /// + /// Used to call onTriggerExit(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerExit(CollisionInfo collision); + protected: /*-----------------------------------------------------------------------------*/ /* Constructors */ @@ -264,6 +314,46 @@ namespace SHADE /// virtual void onDestroy(); + /*-----------------------------------------------------------------------------*/ + /* Virtual Event Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Called when the attached GameObject has a trigger Collider and collides with + /// another GameObject with a Collider in the first frame of collision. + /// + /// Information on the collision event. + virtual void onTriggerEnter(CollisionInfo info); + /// + /// Called when the attached GameObject has a trigger Collider and collides with + /// another GameObject with a Collider in subsequent frames of collision. + /// + /// Information on the collision event. + virtual void onTriggerStay(CollisionInfo info); + /// + /// Called when the attached GameObject has a trigger Collider and leaves a + /// collision with another GameObject with a Collider2D. + /// + /// Information on the collision event. + virtual void onTriggerExit(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and collides with + /// another GameObject with a Collider in the first frame of collision. + /// + /// Information on the collision event. + virtual void onCollisionEnter(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and collides with + /// another GameObject with a Collider in subsequent frames of collision. + /// + /// Information on the collision event. + virtual void onCollisionStay(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and leaves a + /// collision with another GameObject with a Collider2D. + /// + /// Information on the collision event. + virtual void onCollisionExit(CollisionInfo info); + private: /*-----------------------------------------------------------------------------*/ /* Data Members */ @@ -271,4 +361,4 @@ namespace SHADE GameObject owner; }; -} // namespace PlushieAPI +} diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index b6bc1815..407d0fa8 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -27,6 +27,9 @@ of DigiPen Institute of Technology is prohibited. #include "Script.hxx" #include "Engine/Entity.hxx" #include "Serialisation/ReflectionUtilities.hxx" +#include "Engine/Application.hxx" +#include "Physics/SHPhysicsSystemInterface.h" +#include "Physics/SHPhysicsUtils.h" namespace SHADE { @@ -70,7 +73,7 @@ namespace SHADE SAFE_NATIVE_CALL_BEGIN Script^ script; return AddScriptViaNameWithRef(entity, scriptName, script); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } @@ -300,7 +303,7 @@ namespace SHADE removeScript(script); } scriptList->Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy) { @@ -325,7 +328,7 @@ namespace SHADE startList.Remove(script); } scriptList->Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } /*---------------------------------------------------------------------------------*/ @@ -364,7 +367,7 @@ namespace SHADE startList.AddRange(%inactiveStartList); inactiveStartList.Clear(); - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::FrameCleanUp() { @@ -372,8 +375,11 @@ namespace SHADE // Clear the queue while (disposalQueue.Count > 0) { - Script^ script = disposalQueue.Dequeue(); - script->OnDestroy(); + Script^ script = disposalQueue.Dequeue(); + if (Application::IsPlaying) + { + script->OnDestroy(); + } auto entity = script->Owner.GetEntity(); auto scriptList = scripts[script->Owner.GetEntity()]; scriptList->Remove(script); @@ -382,13 +388,13 @@ namespace SHADE scripts.Remove(entity); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::Exit() { SAFE_NATIVE_CALL_BEGIN // Run the deinit all scripts if needed - //if (Application::IsPlaying) + if (Application::IsPlaying) { Debug::Log("Running OnDestroy() for scripts."); for each (System::Collections::Generic::KeyValuePair entity in scripts) @@ -406,7 +412,7 @@ namespace SHADE startList.Clear(); disposalQueue.Clear(); scriptTypeList = nullptr; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } /*---------------------------------------------------------------------------------*/ @@ -435,7 +441,7 @@ namespace SHADE script->FixedUpdate(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::ExecuteUpdate() { @@ -452,7 +458,7 @@ namespace SHADE script->Update(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::ExecuteLateUpdate() { @@ -469,7 +475,95 @@ namespace SHADE script->LateUpdate(); } } - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") + } + + void ScriptStore::ExecuteCollisionFunctions() + { + SAFE_NATIVE_CALL_BEGIN + /* Collisions */ + const auto& collisions = SHPhysicsSystemInterface::GetCollisionInfo(); + for (const auto& collisionInfo : collisions) + { + auto entities = + { + std::make_pair(collisionInfo.GetEntityA(), collisionInfo.GetEntityB()), + std::make_pair(collisionInfo.GetEntityB(), collisionInfo.GetEntityA()) + }; + for (auto entity : entities) + { + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(entity.first) || !scripts.ContainsKey(entity.first)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(entity.second); + + // Call all of the script's functions + auto entityScripts = scripts[entity.first]; + if (entityScripts->Count > 0) + { + for each (Script ^ script in entityScripts) + { + switch (collisionInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnCollisionEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnCollisionStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnCollisionExit(info); + break; + } + } + } + } + } + /* Triggers */ + const auto& triggers = SHPhysicsSystemInterface::GetTriggerInfo(); + for (const auto& triggerInfo : triggers) + { + auto entities = + { + std::make_pair(triggerInfo.GetEntityA(), triggerInfo.GetEntityB()), + std::make_pair(triggerInfo.GetEntityB(), triggerInfo.GetEntityA()) + }; + for (auto entity : entities) + { + // Don't bother if this object has no scripts or is inactive + if (!isEntityActive(entity.first) || !scripts.ContainsKey(entity.first)) + continue; + + // Construct the collision state object + CollisionInfo info; + info.GameObject = GameObject(entity.second); + + // Call all of the script's functions + auto entityScripts = scripts[entity.first]; + if (entityScripts->Count > 0) + { + for each (Script ^ script in entityScripts) + { + switch (triggerInfo.GetCollisionState()) + { + case SHCollisionEvent::State::ENTER: + script->OnTriggerEnter(info); + break; + case SHCollisionEvent::State::STAY: + script->OnTriggerStay(info); + break; + case SHCollisionEvent::State::EXIT: + script->OnTriggerExit(info); + break; + } + } + } + } + } + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } bool ScriptStore::SerialiseScripts(Entity entity, System::IntPtr yamlNodePtr) @@ -505,7 +599,7 @@ namespace SHADE } return true; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } @@ -555,7 +649,7 @@ namespace SHADE } return true; - SAFE_NATIVE_CALL_END_N("SHADE.ScriptStore") + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") return false; } @@ -663,14 +757,10 @@ namespace SHADE bool ScriptStore::isEntityActive(Entity entity) { - // Get native Entity - SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); - - // Entity Validity Check - if (nativeEntity == nullptr) + // Invalid entity + if (!EntityUtils::IsValid(entity)) return false; - // Check active state - return nativeEntity->GetActive(); + return GameObject(entity).IsActiveInHierarchy; } } diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 9aa66fcd..a4c6e824 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -233,6 +233,10 @@ namespace SHADE /// Executes LateUpdate() for all scripts. /// static void ExecuteLateUpdate(); + /// + /// Executes OnCollision*() and OnTrigger*() for all scripts. + /// + static void ExecuteCollisionFunctions(); /*-----------------------------------------------------------------------------*/ /* Serialisation Functions */ diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index f114d01b..4b4e44fc 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "Math/Vector2.hxx" #include "Math/Vector3.hxx" #include "Utility/Debug.hxx" +#include "Engine/GameObject.hxx" /*-------------------------------------------------------------------------------------*/ /* Macro Functions */ @@ -167,6 +168,11 @@ namespace SHADE fieldNode.push_back(vec.y); fieldNode.push_back(vec.z); } + else if (fieldInfo->FieldType == GameObject::typeid) + { + GameObject gameObj = safe_cast(fieldInfo->GetValue(object)); + fieldNode = gameObj.GetEntity(); + } else // Not any of the supported types { Debug::LogWarning(Convert::ToNative(System::String::Format @@ -242,6 +248,10 @@ namespace SHADE ); } } + else if (fieldInfo->FieldType == GameObject::typeid) + { + fieldInfo->SetValue(object, GameObject(node.as())); + } else // Not any of the supported types { Debug::LogWarning(Convert::ToNative(System::String::Format diff --git a/TempScriptsFolder/CameraControl.cs b/TempScriptsFolder/CameraControl.cs new file mode 100644 index 00000000..fc900f46 --- /dev/null +++ b/TempScriptsFolder/CameraControl.cs @@ -0,0 +1,22 @@ +using System; +using SHADE; + +namespace SHADE_Scripting +{ + public class CameraControl :Script + { + public float turnSpeed = 0.5f; + + public CameraControl(GameObject go) : base(go) { } + protected override void update() + { + //Camera + Camera cam = GetComponent(); + Vector2 mouseVel = Input.GetMouseVelocity(); + + cam.Pitch -= mouseVel.y * turnSpeed * (float)Time.DeltaTime; + cam.Yaw += mouseVel.x * turnSpeed * (float)Time.DeltaTime; + + } + } +} diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs index add5971d..cc01615d 100644 --- a/TempScriptsFolder/PhysicsTest.cs +++ b/TempScriptsFolder/PhysicsTest.cs @@ -38,6 +38,35 @@ public class PhysicsTest : Script RigidBody.AddForce(Force); Debug.Log($"Jump!"); } - Debug.Log($"{Transform.LocalPosition.y}"); + } + + protected override void fixedUpdate() + { + Debug.Log("Fixed Update"); + } + + protected override void onCollisionEnter(CollisionInfo info) + { + Debug.Log($"Collision Enter: {info.GameObject.Name}"); + } + protected override void onCollisionStay(CollisionInfo info) + { + Debug.Log($"Collision Stay: {info.GameObject.Name}"); + } + protected override void onCollisionExit(CollisionInfo info) + { + Debug.Log($"Collision Exit: {info.GameObject.Name}"); + } + protected override void onTriggerEnter(CollisionInfo info) + { + Debug.Log($"Trigger Enter: {info.GameObject.Name}"); + } + protected override void onTriggerStay(CollisionInfo info) + { + Debug.Log($"Trigger Stay: {info.GameObject.Name}"); + } + protected override void onTriggerExit(CollisionInfo info) + { + Debug.Log($"Trigger Exit: {info.GameObject.Name}"); } } \ No newline at end of file diff --git a/TempScriptsFolder/PrintWhenActive.cs b/TempScriptsFolder/PrintWhenActive.cs new file mode 100644 index 00000000..41afdd58 --- /dev/null +++ b/TempScriptsFolder/PrintWhenActive.cs @@ -0,0 +1,11 @@ +using SHADE; + +public class PrintWhenActive : Script +{ + public PrintWhenActive(GameObject gameObj) : base(gameObj) { } + + protected override void update() + { + Debug.Log("Active!"); + } +} \ No newline at end of file diff --git a/TempScriptsFolder/ThirdPersonCamera.cs b/TempScriptsFolder/ThirdPersonCamera.cs new file mode 100644 index 00000000..e3b043bd --- /dev/null +++ b/TempScriptsFolder/ThirdPersonCamera.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SHADE; + + +namespace SHADE_Scripting +{ + public class ThirdPersonCamera: Script + { + + public float armLength = 4.0f; + public float turnSpeedPitch = 0.3f; + public float turnSpeedYaw = 0.5f; + public float pitchClamp = 45.0f; + public ThirdPersonCamera(GameObject go) : base(go) { } + + protected override void awake() + { + if(!GetComponent()) + { + AddComponent(); + } + if (!GetComponent()) + { + AddComponent(); + } + GetComponent().ArmLength = armLength; + } + + protected override void update() + { + CameraArm arm = GetComponent(); + if(arm) + { + Vector2 vel = Input.GetMouseVelocity(); + arm.Pitch -= vel.y * turnSpeedPitch * Time.DeltaTimeF; + arm.Yaw += vel.x * turnSpeedYaw * Time.DeltaTimeF; + + if(arm.Pitch > pitchClamp) + { + arm.Pitch = pitchClamp; + } + else if(arm.Pitch < -pitchClamp) + { + arm.Pitch = -pitchClamp; + } + + } + } + + } +} diff --git a/TempShaderFolder/DeferredCompositeCs.glsl b/TempShaderFolder/DeferredCompositeCs.glsl deleted file mode 100644 index c1caf0aa..00000000 --- a/TempShaderFolder/DeferredCompositeCs.glsl +++ /dev/null @@ -1,83 +0,0 @@ -#version 450 - -struct DirectionalLightStruct -{ - vec3 direction; - uint isActive; - uint cullingMask; - vec4 diffuseColor; -}; - -struct AmbientLightStruct -{ - vec4 ambientColor; - float strength; - uint isActive; - uint cullingMask; -}; - -layout(local_size_x = 16, local_size_y = 16) in; -layout(set = 4, binding = 0, rgba32f) uniform image2D positions; -layout(set = 4, binding = 1, rgba32f) uniform image2D normals; -layout(set = 4, binding = 2, rgba8) uniform image2D albedo; -layout(set = 4, binding = 3, r32ui) uniform uimage2D lightLayerData; -layout(set = 4, binding = 4, rgba8) uniform image2D targetImage; - -layout(set = 1, binding = 0) uniform LightCounts -{ - uint directionalLights; - uint pointLights; - uint spotLights; - uint ambientLights; - -} lightCounts; - -layout(std430, set = 1, binding = 1) buffer DirectionalLightData -{ - DirectionalLightStruct dLightData[]; -} DirLightData; - -layout(std430, set = 1, binding = 4) buffer AmbientLightData -{ - AmbientLightStruct aLightData[]; -} AmbLightData; - -void main() -{ - // convenient variables - ivec2 globalThread = ivec2(gl_GlobalInvocationID); - - // Get the diffuse color of the pixel - vec3 pixelDiffuse = imageLoad (albedo, globalThread).rgb; - - // Get position of fragment in world space - vec3 positionWorld = imageLoad (positions, globalThread).rgb; - - // normal of fragment - vec3 normalWorld = imageLoad(normals, globalThread).rgb; - - vec3 fragColor = vec3 (0.0f); - - for (int i = 0; i < lightCounts.directionalLights; ++i) - { - // get normalized direction of light - vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); - - // Get diffuse strength - float diffuseStrength = max (0, dot (dLightNormalized, normalWorld)); - - // Calculate the fragment color - fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; - } - - for (int i = 0; i < lightCounts.ambientLights; ++i) - { - // Just do some add - //fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (0.5f); - fragColor += pixelDiffuse.rgb * AmbLightData.aLightData[i].ambientColor.rgb * vec3 (AmbLightData.aLightData[i].strength); - } - - // store result into result image - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); - -} \ No newline at end of file diff --git a/TempShaderFolder/DeferredCompositeCs.spv b/TempShaderFolder/DeferredCompositeCs.spv deleted file mode 100644 index 03ef7ac5b615ad4dd42a57f4cad2daf5876ceb6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4656 zcmZve33F6M5XT2Ln}i$W^Z+-+0|XJdM3EyVuml$pgRRMAbh0?@EGW8jzf0*+)^cT{ zJT_LY9G|Gp&Q5gFYe{_~iJSF_THLNz)A&jqzy824ZdQ}ITIf)eN0`5;+)I?Bk+deG z)-RX76?0QyI3dNw@dm|J8BHKl2$w0 zS8#j8<4i8PL*kXVF`W*#=9+0o74&DAVCP%aYDP)sLf&5eu!o+{w&G^$ErxRko!OSb z^6tz0x!GuDGOl-b1joi4s!@AjE~j^tO^t?OLco~x#LZP;1e z+9gvPI5o$eA%FW1acZv4B^r;$>8Nu#s~LZ4uI1Nd?Nd+t-3j3fYZ!^rNN|=5J1aj! zZsBfE3e&#qWabY(hHsunN2xa(>9q0`Tupd>PknAy@=(yfhiA@hGFyMUwQ_Fuaqf-< zmTWlZUf2)(Id|9(?u6M1^IQGI!p4e%lW{Ix33~!Gzw>$FY1D4i)6tozQP){}-2-6> zb5Mz{)!TXWvgVmLzfAOm2%Yz`Rn!yc1Clul_CfK`j*gv$o%a#i(XrE`ld6Q-X0eZD z7}NJuw%;(T&uYQX>RTt-{H(rB!pQfLIQ5l8 z_}Cm-eCh+U`k1G%K6L7{S(x|sP!H`t%g!u4Dk48KM?CXK$De#_bpp;XAPpUPy*#bn zMbbA)*B`kI!(NikEPz4yFU@fM(!!toV8q0qJ0%wQA+Iy@7Jrpwa^k;1zv*X5M6C7V z=oV{(-d4@}u*{Smf9&P7M5sIpFpGiwQ=|t>P?viHSZ4 zpk+Gmj¥*5B%csRCr(+Mm|)~V=M7n&Q(h(}{%6EF59hb@ zT##({c~LTZ$!qpW$%{nP$2+t8d01m1dso<~kN3knBOiaii3dh~=&8rB-|#Z^U}qNQ zMJ#6Ft~hy!VfS`VvU9hNqGS6}v|42PPm-yZdu7IXgZMz$n5kdH*^6Je$TJ|Kw)@_I zFSVgR@Yn%;JMd*jS@iEuAw_X~d6P>-^ctOa!vABTURt1UTcGoQl=(Azk6YFA+c#J-c%a3~2itxpDL?`E*VC3OV zKQ7`uqvOxtQG6z~pV`?W!Uudzonkhh6oEr5^3h-7(>LtI<8Gc3@wP4g(~`sZ&v+kj zi~p=-aEKMgFG2t-Rso9Llnl}DIFhhi~qc2aEKMg=U%aM7VdPnm$}cqqQ7*~ zed5dy{12V;fcQ%y7WRYU*x}U4eZ4Fq2KUJQPE)$IoN~GF%kH0@);6; zO~k%qqQB*XzF$Os@*!KkQOV>R(yg8ne_h14hWOYl5BFISVPCFF(NBx$3EwSj^n&>X zCq6#oA~4g>N~U-BRqHzOH$?b=FINp<=S0NCkMA}<#O5tvv)a!~w%RXBz9h2Rv0V`1 z%Y42m!fto_mdC(ZcDMLb!`mYAjr+5{<1ujPj_T)p?}~_p-Ol))Wais^-j|FYxcN*- zW^Qi#I3Gv`!`EgCj5%RuxHmZanUhGw*>7n-devi-;_Sx;7S18}kBx5#_lm79PHZ?c z+7O=>v9QPD*x{D@L&?Oj8NDnS%w{x^%#2$9nb8>$xXox&GW)=pQS>Ph`N@ZDy=qCO zpO$}4GWnTV?){1=6>%nPaD2Ja>~oLNb`m z1U9hn-sv~{H;La7&3k>B_?My;qA~UPuJ~6T1831YW}r{}YY}!k%Quoa3x9{`%eNvh pmSNvX1|yDP-+OGa__!i-hd+qek3aT%qN?&zFL|;5qbLVO{{oeIr1Jm( diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv deleted file mode 100644 index 2381b8347c412e9f822330db717bd1f1e41c24b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2536 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 diff --git a/bin/Debug/SHADE_CSharp.xml b/bin/Debug/SHADE_CSharp.xml new file mode 100644 index 00000000..daeaa3c5 --- /dev/null +++ b/bin/Debug/SHADE_CSharp.xml @@ -0,0 +1,1029 @@ + + + + SHADE_CSharp + + + + + Interface for a CallbackAction that all variants inherit from. + + + + + Whether or not this CallbackAction is runtime assigned. If it is, then the + TargetMethodName and TargetObject properties are invalid. + + + + + Name of the method that this CallbackAction is using. + + + + + Object which the specified target method is called on. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 1 parameter. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 2 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 3 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 4 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 5 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 6 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 7 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 8 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 9 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 10 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Interface for a CallbackEvent that all variants inherit from. + + + + + Registers an empty ICallbackAction. + + + + + Registers an ICallbackAction with the event such that it will be called in + future + + ICallbackAction to register with. + + + + Deregisters an ICallbackAction that was previously added. This should + only emit a warning if an action that was not previous added was + provided. + + ICallbackAction to remove. + + + + Iterable set of ICallbackActions that were registered to this event. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + diff --git a/bin/Debug/SHADE_Managed.xml b/bin/Debug/SHADE_Managed.xml new file mode 100644 index 00000000..7b653116 --- /dev/null +++ b/bin/Debug/SHADE_Managed.xml @@ -0,0 +1,6250 @@ + + + + "SHADE_Managed" + + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Sets the position of the mouse cursor relative to the top left corner of the +window. + + +Position of the mouse in window pixel coordinates to set. + + + + +Checks if a specified mouse button is no longer pressed and was pressed +before. + + MouseCode of the mouse button to check. + +True during the frame the user releases the given mouse button. + + + + +Checks if a specified mouse button is pressed and was not pressed before. + + MouseCode of the mouse button to check. + +True during the frame the user pressed the given mouse button. + + + + +Checks if a specified mouse button is being held down. +This will also be true if GetMouseButtonDown() is true. + + MouseCode of the mouse button to check. + True while the user holds down the mouse button specified. + + + +Checks if a specified key is no longer pressed pressed and was pressed +before. + + KeyCode of the key to check. + +True during the frame the user releases the key identified by name. + + + + +Checks if a specified key is pressed and was not pressed before. + + KeyCode of the key to check. + +True during the frame the user starts pressing down the key specified. + + + + +Checks if a specified key is being held down. +This will also be true if GetKeyDown() is true. + + KeyCode of the key to check. + True while the user holds down the key specified. + + + +Amnount of vertical mouse scroll in this frame. + + + + +Mouse position in screen coordinates relative to the top left of the window. +This value is a Vector3 for compatibility with functions that have Vector3 +arguments. The z component of the Vector3 is always 0 + + + + +Represents the available supported mouse keycodes that can be passed into the +mouse-button-based Input functions. + + + + +Represents the available supported keycodes that can be passed into the +key-based Input functions. + +Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html +Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode + + + + +Static class responsible for providing access to Input-related functionality. + + + + +Simple attribute to mark that a field in a Script should be serialised. + + + + +Cleans up all required components for managed code. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. +Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Initialises all required components for managed code. + + + + +Name of the Managed Library that contains the C# scripts written externally. + + + + +Static class that contains the functions for interfacing with the core +PlushieEngine written in C++ for managing the lifecycle of managed code. + + + + +Default Constructor + + + + +Custom AssemblyLoadContext marked as collectible so that it can be unloaded. + + + + +Time taken for Physics simulations. You should use this for operations +within Script.FixedUpdate() + + + + +Time taken to process the previous frame. + + + + +Static class that contains the functions for working with time. + + + + +Static class that wraps up certain functions in the SHPhysicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Description that is to be shown in the Tooltip. + + + + +Simple attribute to provide a field in a script with a tooltip. + + + + +Checks if a specified file exists. + + File path to the file to check. + True if the file exists + + + +Deletes the folder and all files in it as specified by the file path. + + File path to the file to delete. + + + +Deletes the file as specified by the file path. + + File path to the file to delete. + + + +Reads the file via the specified path that represents a build log of error +and warning messages. + + +File path to the build log of script builds done by BuildScriptAssembly() to +dump and process. + + + + +Registers events for the scripting system + + + + +Loads all the function pointers to CLR code that we need to execute. + + + + +Generates a .csproj file for editing and compiling the C# scripts. + + File path to the generated file. + + + +Utilises execution of a external batch file for invoking the dotnet build +tool to compile C# scripts in the Assets folder into the SHADE_Scripting +C# assembly DLL. + + +Whether or not a debug build will be built. Only debug built C# assemblies +can be debugged. + + +Whether or not we are reloading the assembly, if so, unload and then reload it. + + Whether or not the build succeeded. + + + +Performs a redo for script inspector changes if it exists. + + + + +Performs an undo for script inspector changes if it exists. + + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Creates scripts and sets fields for the specified Entity based on the specified +YAML node. + + The Entity to deserialise a Script on to. + +YAML Node that contains the serialised script data. + + True if successfully deserialised. + + + +Performs serialization of all scripts for the specified entity into the +YAML::Node specified. This node will contain all serialised scripts after +calling this function. + + The Entity to Serialise. + +YAML Node that will store the serialised scripts. + + True if successfully serialised. + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts. This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Adds a Script to a specified Entity. Note that while you can call this +multiple times on a specified Entity, it will work for all intents and +purposes but GetScript<T>() (C# only) currently only +gives you the first Script added of the specified type. + + The entity to add a script to. + Type name of the script to add. + +True if successfully added. False otherwise with the error logged to the +console. + + + + +Shuts down the DotNetRuntime. + + + + +Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached +to Entities. + + + + +Executes the FixedUpdate()s of the Scripts that are attached to +Entities. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Initialises the DotNetRuntime and retrieves function pointers to all +functions on the CLR used to interface with the engine. + + + + +Manages initialisation of the DotNetRuntime and interfacing with CLR code written +and executed on .NET. + + + + +Deserialises a YAML node that contains a map of Scripts and copies the +deserialised data into the specified object if there are matching fields. + + +The JSON string that contains the data to copy into this Script object. + + The object to copy deserialised data into. + + + +Creates a JSON node that represents the specified object and its associated +serialisable fields. Public fields and fields marked with the SerialiseField +attribute will be serialised. + + The object to serialise. + + + +Checks if a specified field is a candidate for serialisation. This means that +the field is public or private with the [SerialiseField] attribute. + + The field to check. + +True if the specified field is a candidate for serialisation. + + + + +Retrieves a set of all non-static (instance) fields from a specified object. + + The object to get non-static fields from. + Immutable list of non-static fields. + + + +Contains useful static functions for working with Reflection. + + + +Converts the node to a YAML string. + + +Emits the node to the given output stream. + + +Emits the node to the given {@link Emitter}. If there is an error in writing, +{@link Emitter#good} will return false. + + + + Loads the input file as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input file as a single YAML document. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + +Handles a "TAG" directive, which should be of the form 'handle prefix', +where 'handle' is converted to 'prefix' in the file. + + + +Handles a "YAML" directive, which should be of the form 'major.minor' (like +a version number). + + + +Reads any directives that are next in the queue, setting the internal +{@code m_pDirectives} state. + + + + Handles the next document by calling events on the {@code eventHandler}. + + @throw a ParserException on error. + @return false if there are no more documents + + + +Resets the parser with the given input stream. Any existing state is +erased. + + + +Evaluates to true if the parser has some valid input to be read. + + +Constructs a parser from the given input stream. The input stream must +live as long as the parser. + + + +Constructs an empty parser (with no input. + + +A parser turns a stream of bytes into one stream of "events" per YAML +document in the input stream. + + + + +Renders a context menu when right clicked for the scripts + + The Entity to render the Scripts of. + The Script to render the inspector for. + + + +Renders a field specified into the inspector. + + The field to render. + +The object that contains the data of the field to render. + + + + +Renders a single specified Script's inspector. + + The Entity to render the Scripts of. + The Script to render the inspector for. + +Indices used internally to differentiate each rendered Script +inspector. This is required to open and close each Script's inspector +independently from each other. + + + + +Redoes the last script inspector change if there is any. + + + + +Undoes the last script inspector change if there is any. + + + + +Renders a dropdown button that allows for the addition of PlushieScripts +onto the specified Entity. + + The Entity to add PlushieScripts to. + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Static class for Editor-related functions + + + + +Processes a YAML node that contains a list of multiple scripts to be loaded +into the specified Entity. +

    +This function should only be called from native unmanaged code. +
    + +The Entity to attach the deserialised Scripts to. + + +Pointer to the YAML::Node that contains serialized script data. + + +
    + + +Populates a YAML node with the scripts for a specified Entity. +

    +This function should only be called from native unmanaged code. +
    + The Entity to Serialise. + +Pointer to a YAML::Node that will be populated with all of the serialised +scripts and their associated fields. + + +True if serialisation is successful. False if the buffer is too small for +the serialised output. + +
    + + +Executes OnCollision*() and OnTrigger*() for all scripts. + + + + +Executes LateUpdate() for all scripts. + + + + +Executes Update() for all scripts. + + + + +Executes FixedUpdate() for all scripts. + + + + +Retrieves a immutable list of available scripts that can be added. + + Immutable list of available scripts that can be added. + + + +Cleans up data stored in the ScriptStore to free up memory for garbage +collection. + + + + +Cleans up scripts that were marked for deletion. This calls the OnDestroy() +for these Scripts. + + + + +Sets up scripts that were marked for initialization. This calls the Awake() +and Start() for Scripts that have yet to have done so. + + + + +Initializes the ScriptStore to allocate and pre-populate reflection data. + + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts.This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Removes a specific script from the + + The entity to remove the script from. + The script to remove. + True if successfully removed. False otherwise. + + + +Removes all Scripts of the specified type from the specified Entity. + + +Type of script to remove. +This needs to be a default constructable Script. + + The entity to remove the script from. + +If the specified Entity is invalid. + + + + +Retrieves an immutable list of all scripts attached to a specified Entity. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts attached to the specified Entity. +This can also be null if there are no scripts at all or an invalid Entity +was specified. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from the specified Entity's children that matches +the specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Retrieves the first Script from the specified Entity that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code or for serialisation +purposes. If you are writing in C# or C++/CLI and not doing serialisation, +use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +Out parameter handle to the Script that was created. + + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code. If you are writing +in C# or C++/CLI, use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. + + +Type of script to add. +This needs to be a default constructable PlushieScript. + + The entity to add a script to. + Reference to the script added. + +If the specified Entity is invalid. + + + + +Responsible for managing all scripts attached to Entities as well as executing +all lifecycle functions of scripts. + + + + +Checks if two Colors are not approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Colors are approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Color with a scalar value and returns +the result. + + Scalar to divide with. + Color to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Color with a scalar value and returns +the result. + + Color to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Colors and returns the +result. + + Color to multiply with. + Another Color to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Color from another Color and returns the result. + + Color to subtract from. + Another Color to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Colors together and returns the result. + + Color to add. + Another Color to add. + The result of lhs added to rhs + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + Value used to interpolate between a and b. + The interpolated Color. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Alpha component of the colour. Ranges from 0.0f to 1.0f. + + + + +Blue component of the colour. Ranges from 0.0f to 1.0f. + + + + +Green component of the colour. Ranges from 0.0f to 1.0f. + + + + +Red component of the colour. Ranges from 0.0f to 1.0f. + + + + +Constructor to construct a Color with the specified components. + + Red component to set. + Green component to set. + Blue component to set. + Alpha component to set. + + + +Constructor to construct a Color with the specified components with the +alpha component set to 1.0f. + + Red component to set. + Green component to set. + Blue component to set. + + + +Constructor to construct a Color with the specified components with the +blue and alpha component set to 1.0f. + + Red component to set. + Green component to set. + + + +Constructor to construct a Color with the specified components with the +green, blue and alpha component set to 1.0f. + + Red component to set. + + + +Pure yellow, mix of pure red and green. + + + + +Pure magenta, mix of pure red and blue. + + + + +Pure cyan, mix of pure green and blue. + + + + +Pure blue. + + + + +Pure green. + + + + +Pure red. + + + + +Pure white. + + + + +Dark Gray, darker than gray. + + + + +Gray, halfway between black and white. + + + + +Light Gray, lighter than gray. + + + + +Pure black. + + + + +A static class that contains a set of default Colors. + + + + +CLR version of the the SHADE Engine's Color struct which describes a Color +encoded using floating point numbers that range from 0.0f to 1.0f. + + + + +Creates a inline button widget. +
    +Wraps up ImGui::Button(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a small inline button widget. +
    +Wraps up ImGui::SmallButton(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a visual text widget. +
    +Wraps up ImGui::Text(). +
    + Text to display. +
    + + +Creates a menu item in the list of items for a mini popup. +
    +Wraps up ImGui::MenuItem(). +
    + Label used to identify this widget. + Whether or not the menu item was selected. +
    + + +Opens the popup that was defined with the specified label. +
    +Wraps up ImGui::OpenPopup(). +
    +
    + + +Marks the end of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::EndPopup(). +
    +
    + + +Marks the start of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::BeginPopup(). +
    + Label used to identify this widget. + Whether or not the pop up is open. +
    + + +Creates a collapsing title header. +
    +Wraps up ImGui::CollapsingHeader(). +
    + Label for the header. + True if the header is open, false otherwise. +
    + + +Unindents the widgets rendered after this call. +
    +Wraps up ImGui::Unindent(). +
    +
    + + +Indents the widgets rendered after this call. +
    +Wraps up ImGui::Indent(). +
    +
    + + +Marks the end of a stack of ImGui widgets from the last PushID() call. +
    +Wraps up ImGui::PopID(). +
    +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + Integer-based ID. +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + String-based ID. +
    + + +Maximum length of a string supported by InputTextField() + + + + +Static class that contains useful functions for Editor UI using ImGui. + + + + +Redoes the last undo-ed command if it exists. + + + + +Undos the last added command if it exists. + + + + +Adds a command onto the stack. + + + + + +True if there is a redoable action in the stack. + + + + +True if there is an undoable action in the stack. + + + + +Command for the stack that represents a data modification. + + + + +Class that is able to store a stack of actions that can be done and redone. + + + + +To be called from native code when a Collision Shape has been changed. + + +The entity which has it's collision shape changed. + + + + +To be called from native code when a collision shape has been removed. + + The entity which has it's collision shape removed. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list +and casts it to the appropriate type. + + Type of the ColliderBound to cast to. + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list. + + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Total number of ColliderShapes in the Collider component. + + + + +Constructs a Collider Component that represents a native SHColliderComponent +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHColliderComponent. +A single Collider component can contain one or multiple Collider Bounds. + + + + + + + + + + +Radius of the Bounding Sphere formed by this bound. + + + + +Center of the Bounding Sphere formed by this bound. + + + + +Sphere-shaped Collider Bound. + + + + + + + + + + +Position of the top right front corner of the Bounding Box formed by this +bound. + + + + +Position of the bottom left back corner of the Bounding Box formed by this +bound. + + + + +Half of the scale of the Bounding Box formed by this bound. + + + + +Center of the Bounding Box formed by this bound. + + + + +Box-shaped Collider Bound. + + + + +Computes a Raycast and checks if there is a collision with any object. + + The ray to cast. + Maximum distance for the raycast check. + True if the ray intersects with an object in the scene. + + + +Checks if the specified point is within this shape's bounds. + + Point to test with. + True if the point is in the shape's bounds. + + + +Base interface for all Collider Shapes. + + + +@brief The density of the collider that determines the mass of the collision shape + if it is automatically computed. Must be a positive number. + + + +@brief The bounciness factor of the physics object., clamped between [0,1].
    + 0 means the object will never bounce. + 1 means the object never loses energy on a bounce. + +
    + +@brief The friction coefficient of the physics object., clamped between [0,1].
    + 0 means the object will never experience friction. + 1 means the friction force against the object is equal to the applied force. + +
    + +@brief Sets the mass density of the physics material. +@param newDensity The density value to set. Always made positive. + + + +@brief Sets the bounciness factor of the physics material. +@param newBounciness The bounciness value to set. Clamped between [0,1]. + + + +@brief Sets the friction coefficient of the physics material. +@param newFriction The friction value to set. Clamped between [0,1]. + + + +@brief Default constructor for a physics material. +@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. +@param bounciness The bounciness of the material. Clamped between [0,1]. +@param density The mass density of the material. Always made positive. + + + + +Closes the current window, and depending on the implementation, should also +close the application. + + + + +Retrieves the current window fullscreen status. + + The current window fullscreen status.. + + + +Retrieves the current window height. + + The current window height. + + + +Retrieves the current window width. + + The current window width. + + + +Static class that wraps up certain functions in the SHGraphicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + @brief Perform ImGui and ImGui Backend Render + + + + + @brief Start new frame for editor + + + + + @brief Initialise Backend for ImGui (SDL and Vulkan backend) + + @param sdlWindow Pointer to SDL_Window + + + + @brief Set the Style for the editor + + @param style Desired style + + + + @brief Safely shutdown the editor + + + + + @brief Update the editor and add to ImGui DrawList + + @param dt Delta-time of the frame + + + + @brief Initialise the editor + + @param sdlWindow pointer to SDL_Window object created in application + + + + @brief Style options + + + + + @brief SHEditor static class contains editor variables and implementation of editor functions. + + + + + Get the YUV conversion mode, returning the correct mode for the resolution + when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + + \since This function is available since SDL 2.0.8. + + + + Get the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Set the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Perform low-level surface scaled blitting only. + + This is a semi-private function and it performs low-level surface blitting, + assuming the input rectangles have already been clipped. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform a scaled surface copy to a destination surface. + + SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + merely a macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform bilinear scaling between two surfaces of the same format, 32BPP. + + \since This function is available since SDL 2.0.16. + + + + Perform a fast, low quality, stretch blit between two surfaces of the same + format. + + Please use SDL_BlitScaled() instead. + + \since This function is available since SDL 2.0.0. + + + + Perform low-level surface blitting only. + + This is a semi-private blit function and it performs low-level surface + blitting, assuming the input rectangles have already been clipped. + + Unless you know what you're doing, you should be using SDL_BlitSurface() + instead. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied, or NULL to copy the entire surface + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + + Perform a fast blit from the source surface to the destination surface. + + SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + Perform a fast fill of a set of rectangles with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rects an array of SDL_Rects representing the rectangles to fill. + \param count the number of rectangles in the array + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRect + + + + Perform a fast fill of a rectangle with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rect the SDL_Rect structure representing the rectangle to fill, or + NULL to fill the entire surface + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRects + + + + Premultiply the alpha on a block of pixels. + + This is safe to use with src == dst, but not for other overlapping areas. + + This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + + \param width the width of the block to convert, in pixels + \param height the height of the block to convert, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with premultiplied pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.18. + + + + Copy a block of pixels of one format to another format. + + \param width the width of the block to copy, in pixels + \param height the height of the block to copy, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with new pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Copy an existing surface to a new surface of the specified format enum. + + This function operates just like SDL_ConvertSurface(), but accepts an + SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + it might be easier to call but it doesn't have access to palette + information for the destination surface, in case that would be important. + + \param src the existing SDL_Surface structure to convert + \param pixel_format the SDL_PixelFormatEnum that the new surface is + optimized for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurface + \sa SDL_CreateRGBSurface + + + + Copy an existing surface to a new surface of the specified format. + + This function is used to optimize images for faster *repeat* blitting. This + is accomplished by converting the original and storing the result as a new + surface. The new, optimized surface can then be used as the source for + future blits, making them faster. + + \param src the existing SDL_Surface structure to convert + \param fmt the SDL_PixelFormat structure that the new surface is optimized + for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurfaceFormat + \sa SDL_CreateRGBSurface + + + + Get the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + \param surface the SDL_Surface structure representing the surface to be + clipped + \param rect an SDL_Rect structure filled in with the clipping rectangle for + the surface + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetClipRect + + + + Set the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + Note that blits are automatically clipped to the edges of the source and + destination surfaces. + + \param surface the SDL_Surface structure to be clipped + \param rect the SDL_Rect structure representing the clipping rectangle, or + NULL to disable clipping + \returns SDL_TRUE if the rectangle intersects the surface, otherwise + SDL_FALSE and blits will be completely clipped. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetClipRect + + + + Get the blend mode used for blit operations. + + \param surface the SDL_Surface structure to query + \param blendMode a pointer filled in with the current SDL_BlendMode + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetSurfaceBlendMode + + + + Set the blend mode used for blit operations. + + To copy a surface to another surface (or texture) without blending with the + existing data, the blendmode of the SOURCE surface should be set to + `SDL_BLENDMODE_NONE`. + + \param surface the SDL_Surface structure to update + \param blendMode the SDL_BlendMode to use for blit blending + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceBlendMode + + + + Get the additional alpha value used in blit operations. + + \param surface the SDL_Surface structure to query + \param alpha a pointer filled in with the current alpha value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Set an additional alpha value used in blit operations. + + When this surface is blitted, during the blit operation the source alpha + value is modulated by this alpha value according to the following formula: + + `srcA = srcA * (alpha / 255)` + + \param surface the SDL_Surface structure to update + \param alpha the alpha value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Get the additional color value multiplied into blit operations. + + \param surface the SDL_Surface structure to query + \param r a pointer filled in with the current red color value + \param g a pointer filled in with the current green color value + \param b a pointer filled in with the current blue color value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Set an additional color value multiplied into blit operations. + + When this surface is blitted, during the blit operation each source color + channel is modulated by the appropriate color value according to the + following formula: + + `srcC = srcC * (color / 255)` + + \param surface the SDL_Surface structure to update + \param r the red color value multiplied into blit operations + \param g the green color value multiplied into blit operations + \param b the blue color value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Get the color key (transparent pixel) for a surface. + + The color key is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + If the surface doesn't have color key enabled this function returns -1. + + \param surface the SDL_Surface structure to query + \param key a pointer filled in with the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetColorKey + + + + Returns whether the surface has a color key + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.9. + + \sa SDL_SetColorKey + \sa SDL_GetColorKey + + + + Set the color key (transparent pixel) in a surface. + + The color key defines a pixel value that will be treated as transparent in + a blit. For example, one can use this to specify that cyan pixels should be + considered transparent, and therefore not rendered. + + It is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + RLE acceleration can substantially speed up blitting of images with large + horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + + \param surface the SDL_Surface structure to update + \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + \param key the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetColorKey + + + + Returns whether the surface is RLE enabled + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.14. + + \sa SDL_SetSurfaceRLE + + + + Save a surface to a file. + + Convenience macro. + + Set the RLE acceleration hint for a surface. + + If RLE is enabled, color key and alpha blending blits are much faster, but + the surface must be locked before directly accessing the pixels. + + \param surface the SDL_Surface structure to optimize + \param flag 0 to disable, non-zero to enable RLE acceleration + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_LockSurface + \sa SDL_UnlockSurface + + + + Load a surface from a file. + + Convenience macro. + + Save a surface to a seekable SDL data stream in BMP format. + + Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + BMP directly. Other RGB formats with 8-bit or higher get converted to a + 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + not supported. + + \param surface the SDL_Surface structure containing the image to be saved + \param dst a data stream to save to + \param freedst non-zero to close the stream after being written + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_LoadBMP_RW + \sa SDL_SaveBMP + + + + Load a BMP image from a seekable SDL data stream. + + The new surface should be freed with SDL_FreeSurface(). Not doing so will + result in a memory leak. + + src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + from a file, convert it to an SDL_Surface and then close the file. + + \param src the data stream for the surface + \param freesrc non-zero to close the stream after being read + \returns a pointer to a new SDL_Surface structure or NULL if there was an + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeSurface + \sa SDL_RWFromFile + \sa SDL_LoadBMP + \sa SDL_SaveBMP_RW + + + + Release a surface after directly accessing the pixels. + + \param surface the SDL_Surface structure to be unlocked + + \since This function is available since SDL 2.0.0. + + \sa SDL_LockSurface + + + + Set up a surface for directly accessing the pixels. + + Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + and read from `surface->pixels`, using the pixel format stored in + `surface->format`. Once you are done accessing the surface, you should use + SDL_UnlockSurface() to release it. + + Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + 0, then you can read and write to the surface at any time, and the pixel + format of the surface will not change. + + \param surface the SDL_Surface structure to be locked + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MUSTLOCK + \sa SDL_UnlockSurface + + + + Set the palette used by a surface. + + A single palette can be shared with many surfaces. + + \param surface the SDL_Surface structure to update + \param palette the SDL_Palette structure to use + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Free an RGB surface. + + It is safe to pass NULL to this function. + + \param surface the SDL_Surface to free. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_LoadBMP + \sa SDL_LoadBMP_RW + + + + Allocate a new RGB surface with with a specific pixel format and existing + pixel data. + + This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + instead of providing pixel color masks, you provide it with a predefined + format from SDL_PixelFormatEnum. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with existing pixel data. + + This function operates mostly like SDL_CreateRGBSurface(), except it does + not allocate memory for the pixel data, instead the caller provides an + existing buffer of data for the surface to use. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with a specific pixel format. + + This function operates mostly like SDL_CreateRGBSurface(), except instead + of providing pixel color masks, you provide it with a predefined format + from SDL_PixelFormatEnum. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_FreeSurface + + + + Allocate a new RGB surface. + + If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + If `depth` is greater than 8 bits, the pixel format is set using the + [RGBA]mask parameters. + + The [RGBA]mask parameters are the bitmasks used to extract that color from + a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + stored in the most significant byte. Using zeros for the RGB masks sets a + default value, based on the depth. For example: + + ```c++ + SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + ``` + + However, using zero for the Amask results in an Amask of 0. + + By default surfaces with an alpha mask are set up for blending as with: + + ```c++ + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + ``` + + You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + different `blendMode`. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + +Reference count -- used when freeing surface + + +info for fast blit mapping to other surfaces + + +clipping information + + +list of BlitMap that hold a reference to this surface + + +information needed for surfaces requiring locks + + +Application data associated with the surface + + + \brief A collection of pixels used in software blitting. + + \note This structure should be treated as read-only, except for \c pixels, + which, if not NULL, contains the raw pixel data for the surface. + + +\brief The type of function used for surface blitting functions. + + + + Compose a custom blend mode for renderers. + + The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + the SDL_BlendMode returned by this function if the renderer supports it. + + A blend mode controls how the pixels from a drawing operation (source) get + combined with the pixels from the render target (destination). First, the + components of the source and destination pixels get multiplied with their + blend factors. Then, the blend operation takes the two products and + calculates the result that will get stored in the render target. + + Expressed in pseudocode, it would look like this: + + ```c + dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + ``` + + Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + dst)` can return one of the following: + + - `src + dst` + - `src - dst` + - `dst - src` + - `min(src, dst)` + - `max(src, dst)` + + The red, green, and blue components are always multiplied with the first, + second, and third components of the SDL_BlendFactor, respectively. The + fourth component is not used. + + The alpha component is always multiplied with the fourth component of the + SDL_BlendFactor. The other components are not used in the alpha + calculation. + + Support for these blend modes varies for each renderer. To check if a + specific SDL_BlendMode is supported, create a renderer and pass it to + either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + return with an error if the blend mode is not supported. + + This list describes the support of custom blend modes for each renderer in + SDL 2.0.6. All renderers support the four blend modes listed in the + SDL_BlendMode enumeration. + + - **direct3d**: Supports all operations with all factors. However, some + factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + `SDL_BLENDOPERATION_MAXIMUM`. + - **direct3d11**: Same as Direct3D 9. + - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + 2.0.6. + - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. Color and alpha factors need to be the same. OpenGL ES 1 + implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + operations being different from each other. May support color and alpha + factors being different from each other. + - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + operations with all factors. + - **psp**: No custom blend mode support. + - **software**: No custom blend mode support. + + Some renderers do not provide an alpha component for the default render + target. The `SDL_BLENDFACTOR_DST_ALPHA` and + `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + case. + + \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the source pixels + \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the destination pixels + \param colorOperation the SDL_BlendOperation used to combine the red, + green, and blue components of the source and + destination pixels + \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + the source pixels + \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + the destination pixels + \param alphaOperation the SDL_BlendOperation used to combine the alpha + component of the source and destination pixels + \returns an SDL_BlendMode that represents the chosen factors and + operations. + + \since This function is available since SDL 2.0.6. + + \sa SDL_SetRenderDrawBlendMode + \sa SDL_GetRenderDrawBlendMode + \sa SDL_SetTextureBlendMode + \sa SDL_GetTextureBlendMode + + + + Calculate the intersection of a rectangle and line segment with float + precision. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_FRect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + + + Calculate a minimal rectangle enclosing a set of points with float + precision. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_FPoint structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_FRect used for clipping or NULL to enclose all points + \param result an SDL_FRect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.22. + + + + Calculate the union of two rectangles with float precision. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.22. + + + + Calculate the intersection of two rectangles with float precision. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_HasIntersectionF + + + + Determine whether two rectangles intersect with float precision. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_IntersectRect + + + + Returns true if the two rectangles are equal, using a default epsilon. + + \since This function is available since SDL 2.0.22. + + + + Returns true if the two rectangles are equal, within some given epsilon. + + \since This function is available since SDL 2.0.22. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + Calculate the intersection of a rectangle and line segment. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_Rect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + + + Calculate a minimal rectangle enclosing a set of points. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_Point structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_Rect used for clipping or NULL to enclose all points + \param result an SDL_Rect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.0. + + + + Calculate the union of two rectangles. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.0. + + + + Calculate the intersection of two rectangles. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_HasIntersection + + + + Determine whether two rectangles intersect. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_IntersectRect + + + +Returns true if the two rectangles are equal. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + A rectangle, with the origin at the upper left (floating point). + + \sa SDL_FRectEmpty + \sa SDL_FRectEquals + \sa SDL_FRectEqualsEpsilon + \sa SDL_HasIntersectionF + \sa SDL_IntersectFRect + \sa SDL_IntersectFRectAndLine + \sa SDL_UnionFRect + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + A rectangle, with the origin at the upper left (integer). + + \sa SDL_RectEmpty + \sa SDL_RectEquals + \sa SDL_HasIntersection + \sa SDL_IntersectRect + \sa SDL_IntersectRectAndLine + \sa SDL_UnionRect + \sa SDL_EnclosePoints + + + + The structure that defines a point (floating point) + + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + Use this function to write 64 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE64 + + + + Use this function to write 64 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE64 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE32 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE32 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE16 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE16 + + + + \name Write endian functions + + Write an item of native format to the specified endianness. + + Use this function to write a byte to an SDL_RWops. + + \param dst the SDL_RWops to write to + \param value the byte value to write + \returns 1 on success or 0 on failure; call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadU8 + + + + Use this function to read 64 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE64 + + + + Use this function to read 64 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE64 + + + + Use this function to read 32 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE32 + + + + Use this function to read 32 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE32 + + + + Use this function to read 16 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE16 + + + + Use this function to read 16 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE16 + + + + \name Read endian functions + + Read an item of the specified endianness and return in native format. + + Use this function to read a byte from an SDL_RWops. + + \param src the SDL_RWops to read from + \returns the read byte on success or 0 on failure; call SDL_GetError() for + more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteU8 + + + + Load all the data from a file path. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + Prior to SDL 2.0.10, this function was a macro wrapping around + SDL_LoadFile_RW. + + \param file the path to read all available data from + \param datasize if not NULL, will store the number of bytes read + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.10. + + + + Load all the data from an SDL data stream. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + \param src the SDL_RWops to read all available data from + \param datasize if not NULL, will store the number of bytes read + \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.6. + + + + Close and free an allocated SDL_RWops structure. + + SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + resources used by the stream and frees the SDL_RWops itself with + SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + flush to its output (e.g. to disk). + + Note that if this fails to flush the stream to disk, this function reports + an error, but the SDL_RWops is still invalid once this function returns. + + Prior to SDL 2.0.10, this function was a macro. + + \param context SDL_RWops structure to close + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Write to an SDL_RWops data stream. + + This function writes exactly `num` objects each of size `size` from the + area pointed at by `ptr` to the stream. If this fails for any reason, it'll + return less than `num` to demonstrate how far the write progressed. On + success, it returns `num`. + + SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + `write` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer containing data to write + \param size the size of an object to write, in bytes + \param num the number of objects to write + \returns the number of objects written, which will be less than **num** on + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + + + + Read from a data source. + + This function reads up to `maxnum` objects each of size `size` from the + data source to the area pointed at by `ptr`. This function may read less + objects than requested. It will return zero when there has been an error or + the data stream is completely read. + + SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + `read` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer to read data into + \param size the size of each object to read, in bytes + \param maxnum the maximum number of objects to be read + \returns the number of objects read, or 0 at error or end of file; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Determine the current read/write offset in an SDL_RWops data stream. + + SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a SDL_RWops data stream object from which to get the current + offset + \returns the current offset in the stream, or -1 if the information can not + be determined. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Seek within an SDL_RWops data stream. + + This function seeks to byte `offset`, relative to `whence`. + + `whence` may be any of the following values: + + - `RW_SEEK_SET`: seek from the beginning of data + - `RW_SEEK_CUR`: seek relative to current read point + - `RW_SEEK_END`: seek relative to the end of data + + If this stream can not seek, it will return -1. + + SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + `seek` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param offset an offset in bytes, relative to **whence** location; can be + negative + \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + \returns the final offset in the data stream after the seek or -1 on error. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to get the size of the data stream in an SDL_RWops. + + Prior to SDL 2.0.10, this function was a macro. + + \param context the SDL_RWops to get the size of the data stream from + \returns the size of the data stream in the SDL_RWops on success, -1 if + unknown or a negative error code on failure; call SDL_GetError() + for more information. + + \since This function is available since SDL 2.0.10. + + + + Use this function to free an SDL_RWops structure allocated by + SDL_AllocRW(). + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + call the **close** method on those SDL_RWops pointers when you are done + with them. + + Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + invalid as soon as this function returns. Any extra memory allocated during + creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + be responsible for managing that memory in their **close** method. + + \param area the SDL_RWops structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocRW + + + + Use this function to allocate an empty, unpopulated SDL_RWops structure. + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + + You must free the returned pointer with SDL_FreeRW(). Depending on your + operating system and compiler, there may be a difference between the + malloc() and free() your program uses and the versions SDL calls + internally. Trying to mix the two can cause crashing such as segmentation + faults. Since all SDL_RWops must free themselves when their **close** + method is called, all SDL_RWops must be allocated through this function, so + they can all be freed correctly with SDL_FreeRW(). + + \returns a pointer to the allocated memory on success, or NULL on failure; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeRW + + + + Use this function to prepare a read-only memory buffer for use with RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size. It assumes the memory area is not writable. + + Attempting to write to this RWops stream will report an error without + writing to the memory buffer. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to write to a memory buffer, you should use SDL_RWFromMem() + with a writable buffer of memory instead. + + \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + + + + Use this function to prepare a read-write memory buffer for use with + SDL_RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size, for both read and write access. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to make sure the RWops never writes to the memory buffer, you + should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + + \param mem a pointer to a buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to create an SDL_RWops structure from a standard I/O file + pointer (stdio.h's `FILE*`). + + This function is not available on Windows, since files opened in an + application on that platform cannot be used by a dynamically linked + library. + + On some platforms, the first parameter is a `void*`, on others, it's a + `FILE*`, depending on what system headers are available to SDL. It is + always intended to be the `FILE*` type from the C runtime's stdio.h. + + \param fp the `FILE*` that feeds the SDL_RWops stream + \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + SDL_FALSE to leave the `FILE*` open when the RWops is + closed + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + \name RWFrom functions + + Functions to create SDL_RWops structures from various data streams. + + Use this function to create a new SDL_RWops structure for reading from + and/or writing to a named file. + + The `mode` string is treated roughly the same as in a call to the C + library's fopen(), even if SDL doesn't happen to use fopen() behind the + scenes. + + Available `mode` strings: + + - "r": Open a file for reading. The file must exist. + - "w": Create an empty file for writing. If a file with the same name + already exists its content is erased and the file is treated as a new + empty file. + - "a": Append to a file. Writing operations append data at the end of the + file. The file is created if it does not exist. + - "r+": Open a file for update both reading and writing. The file must + exist. + - "w+": Create an empty file for both reading and writing. If a file with + the same name already exists its content is erased and the file is + treated as a new empty file. + - "a+": Open a file for reading and appending. All writing operations are + performed at the end of the file, protecting the previous content to be + overwritten. You can reposition (fseek, rewind) the internal pointer to + anywhere in the file for reading, but writing operations will move it + back to the end of file. The file is created if it does not exist. + + **NOTE**: In order to open a file as a binary file, a "b" character has to + be included in the `mode` string. This additional "b" character can either + be appended at the end of the string (thus making the following compound + modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + Additional characters may follow the sequence, although they should have no + effect. For example, "t" is sometimes appended to make explicit the file is + a text file. + + This function supports Unicode filenames, but they must be encoded in UTF-8 + format, regardless of the underlying operating system. + + As a fallback, SDL_RWFromFile() will transparently open a matching filename + in an Android app's `assets`. + + Closing the SDL_RWops will close the file handle SDL is holding internally. + + \param file a UTF-8 string representing the filename to open + \param mode an ASCII string representing the mode to be used for opening + the file. + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + +Return the size of the file in this rwops, or -1 if unknown + + + Seek to \c offset relative to \c whence, one of stdio's whence values: + RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + + \return the final offset in the data stream, or -1 on error. + + + Read up to \c maxnum objects each of size \c size from the data + stream to the area pointed at by \c ptr. + + \return the number of objects read, or 0 at error or end of file. + + + Write exactly \c num objects each of size \c size from the area + pointed at by \c ptr to data stream. + + \return the number of objects written, or 0 at error or end of file. + + + Close and free an allocated SDL_RWops structure. + + \return 0 if successful or -1 on write error when flushing data. + + + + Clear any previous error message for this thread. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetError + \sa SDL_SetError + + + + Get the last error message that was set for the current thread. + + This allows the caller to copy the error string into a provided buffer, but + otherwise operates exactly the same as SDL_GetError(). + + \param errstr A buffer to fill with the last error message that was set for + the current thread + \param maxlen The size of the buffer pointed to by the errstr parameter + \returns the pointer passed in as the `errstr` parameter. + + \since This function is available since SDL 2.0.14. + + \sa SDL_GetError + + + + Retrieve a message about the last error that occurred on the current + thread. + + It is possible for multiple errors to occur before calling SDL_GetError(). + Only the last error is returned. + + The message is only applicable when an SDL function has signaled an error. + You must check the return values of SDL function calls to determine when to + appropriately call SDL_GetError(). You should *not* use the results of + SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + an error string even when reporting success. + + SDL will *not* clear the error string for successful API calls. You *must* + check return values for failure cases before you can assume the error + string applies. + + Error strings are set per-thread, so an error set in a different thread + will not interfere with the current thread's operation. + + The returned string is internally allocated and must not be freed by the + application. + + \returns a message with information about the specific error that occurred, + or an empty string if there hasn't been an error message set since + the last call to SDL_ClearError(). The message is only applicable + when an SDL function has signaled an error. You must check the + return values of SDL function calls to determine when to + appropriately call SDL_GetError(). + + \since This function is available since SDL 2.0.0. + + \sa SDL_ClearError + \sa SDL_SetError + + + + Calculate a 256 entry gamma ramp for a gamma value. + + \param gamma a gamma value where 0.0 is black and 1.0 is identity + \param ramp an array of 256 values filled in with the gamma ramp + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetWindowGammaRamp + + + + Get RGBA values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + If the surface has no alpha component, the alpha will be returned as 0xff + (100% opaque). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + \param a a pointer filled in with the alpha component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Get RGB values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGBA + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Map an RGBA quadruple to a pixel value for a given pixel format. + + This function maps the RGBA color value to the specified pixel format and + returns the pixel value best approximating the given RGBA color value for + the given pixel format. + + If the specified pixel format has no alpha component the alpha value will + be ignored (as it will be in formats with a palette). + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \param a the alpha component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGB + + + + Map an RGB triple to an opaque pixel value for a given pixel format. + + This function maps the RGB color value to the specified pixel format and + returns the pixel value best approximating the given RGB color value for + the given pixel format. + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the specified pixel format has an alpha component it will be returned as + all 1 bits (fully opaque). + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the pixel format + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGBA + + + + Free a palette created with SDL_AllocPalette(). + + \param palette the SDL_Palette structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + + + + Set a range of colors in a palette. + + \param palette the SDL_Palette structure to modify + \param colors an array of SDL_Color structures to copy into the palette + \param firstcolor the index of the first palette entry to modify + \param ncolors the number of entries to modify + \returns 0 on success or a negative error code if not all of the colors + could be set; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_CreateRGBSurface + + + + Set the palette for a pixel format structure. + + \param format the SDL_PixelFormat structure that will use the palette + \param palette the SDL_Palette structure that will be used + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_FreePalette + + + + Create a palette structure with the specified number of color entries. + + The palette entries are initialized to white. + + \param ncolors represents the number of color entries in the color palette + \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + there wasn't enough memory); call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreePalette + + + + Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + + \param format the SDL_PixelFormat structure to free + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + + + + Create an SDL_PixelFormat structure corresponding to a pixel format. + + Returned structure may come from a shared global cache (i.e. not newly + allocated), and hence should not be modified, especially the palette. Weird + errors such as `Blit combination not supported` may occur. + + \param pixel_format one of the SDL_PixelFormatEnum values + \returns the new SDL_PixelFormat structure or NULL on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeFormat + + + + Convert a bpp value and RGBA masks to an enumerated pixel format. + + This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + possible. + + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask the red mask for the format + \param Gmask the green mask for the format + \param Bmask the blue mask for the format + \param Amask the alpha mask for the format + \returns one of the SDL_PixelFormatEnum values + + \since This function is available since SDL 2.0.0. + + \sa SDL_PixelFormatEnumToMasks + + + + Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + + \param format one of the SDL_PixelFormatEnum values + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask a pointer filled in with the red mask for the format + \param Gmask a pointer filled in with the green mask for the format + \param Bmask a pointer filled in with the blue mask for the format + \param Amask a pointer filled in with the alpha mask for the format + \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + possible; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MasksToPixelFormatEnum + + + + Get the human readable name of a pixel format. + + \param format the pixel format to query + \returns the human readable name of the specified pixel format or + `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + + \since This function is available since SDL 2.0.0. + + + +\note Everything in the pixel format structure is read-only. + + + +The bits of this structure can be directly reinterpreted as an integer-packed +color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 +on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + + + + If a + b would overflow, return -1. Otherwise store a + b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + If a * b would overflow, return -1. Otherwise store a * b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + This function converts a string between encodings in one pass, returning a + string that must be freed with SDL_free() or NULL on error. + + \since This function is available since SDL 2.0.0. + + + + Get the number of outstanding (unfreed) allocations + + \since This function is available since SDL 2.0.7. + + + + Replace SDL's memory allocation functions with a custom set + + \since This function is available since SDL 2.0.7. + + + + Get the current set of SDL memory functions + + \since This function is available since SDL 2.0.7. + + + + Get the original set of SDL memory functions + + \since This function is available since SDL 2.24.0. + + + +\endcond + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + + +\name Floating-point constants + +\cond + + +\brief An unsigned 64-bit integer type. + + + +\brief A signed 64-bit integer type. + + + +\brief An unsigned 32-bit integer type. + + + +\brief A signed 32-bit integer type. + + + +\brief An unsigned 16-bit integer type. + + + +\brief A signed 16-bit integer type. + + + +\brief An unsigned 8-bit integer type. + + + +\brief A signed 8-bit integer type. + + + + \file close_code.h + + This file reverses the effects of begin_code.h and should be included + after you finish any function and structure declarations in your headers + + + + \file SDL_stdinc.h + + This is a general header that includes C language support. + + \file SDL_platform.h + + Try to get a standard set of platform defines. + + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + Get the name of the platform. + + Here are the names returned for some (but not all) supported platforms: + + - "Windows" + - "Mac OS X" + - "Linux" + - "iOS" + - "Android" + + \returns the name of the platform. If the correct platform name is not + available, returns a string beginning with the text "Unknown". + + \since This function is available since SDL 2.0.0. + + + +*!************************************************************************* + + + +Marks the application to stop at the end of the current frame. + + + + +Whether or not the application is currently in fullscreen mode or not. + + + + +Retrieves the designated height of the current window. + + + + +Retrieves the designated width of the current window. + + + + +Whether or not the engine is in a paused state where script updates and +physics are not in play. + + + + +Whether or not the engine is playing. This will always be true on Publish. +On Debug/Release builds, this is true when the editor is in Play Mode. It +will also be true even if the editor is in Play Mode but is paused. + + + + +Static class that contains useful properties for querying the state of the +engine. + + + + +Sets the parent of this Transform component. + + +Entity that contains the Transform component that this Transform will be +parented to. If null, unparenting will occur. + + +If true, the transform values of this Transform component will retain their +pre-parent-change global transforms. The local transform values will be +modified to ensure that the global transforms do not change. + + + + +Parent Transform that affects this Transform. + + + + +Global scale stored by this Transform. + + + + +Global euler angle rotations stored by this Transform. + + + + +Global rotation quaternion stored by this Transform. + + + + +Global position stored by this Transform. + + + + +Local scale stored by this Transform. + + + + +Local euler angle rotations stored by this Transform. + + + + +Local rotation quaternion stored by this Transform. + + + + +Local position stored by this Transform. + + + + +Constructs a Transform Component that represents a native Transform component +tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's TransformComponent. + + + + +Compares if two float values are close enough to be the same with the +specified tolerance value. + + One of the values to compare. + The other value to compare. + Tolerance for floating point comparison. + True if a and b are practically the same. + + + +Compares if two float values are close enough to be the same with a tolerance +of Epsilon. + + One of the values to compare. + The other value to compare. + True if a and b are practically the same. + + + +Calculates the linear parameter t that produces the interpolant value within +the range [a, b]. + + Start value. + End value. + Value between start and end. + Percentage of value between start and end. + + + +Linearly interpolates between a and b by t. +The parameter t is not clamped and a value based on a and b is supported. +If t is less than zero, or greater than one, then LerpUnclamped will result +in a return value outside the range a to b. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Linearly interpolates between a and b by t. +The parameter t is clamped to the range [0, 1]. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Converts an angle from radian representation to degree representation. + + Radian-based angle to convert. + The specified angle in degrees. + + + +Converts an angle from degree representation to radian representation. + + Degree-based angle to convert. + The specified angle in radians. + + + +Wraps a value if they get to low or too high. + + Value to wrap. + Minimum value to wrap at. + Maximum value to wrap at. + Wrapped value. + + + +Small value used for single precision floating point comparisons. + + + + +Radians-to-degrees conversion constant + + + + +Degrees-to-radians conversion constant + + + + +Contains utility Math functions. + + + + +Logs a native exception that is formatted nicely to the output. + + Native exception to log. + Name of the one responsible for the exception. + + + +Logs an exception that is formatted nicely to the output. + + Name of the one responsible for the exception. + Exception to log. + + + +Logs a native exception that is formatted nicely to the output. +Equivalent to calling +LogException(exception, Convert::ToNative(thrower->GetType()->Name)); + + Native exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output. + + The string to output. + + + +Logs a error message to the output. + + The string to output. + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output. + + The string to output. + + + +Logs a message to the output. + + The string to output. + + + +Static class that contains the functions for working with time. + + + + +Material used to render this Renderable. + + + + +Material used to render this Renderable. + + + + +Mesh used to render this Renderable. + + + + +Constructs a Renderable Component that represents a native Renderable +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's SHRenderableComponent. + + + + +Retrieves the value of a specified property on the material. + + Type of property to get. + Name of the property to get. + Value of that property on the material. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Set the value of a specific property. + + Type of property to set. + Name of the property to set. + Value to set te property to. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Constructor for the Material + + Handle to the native material object. + + + +Managed counterpart of the native MaterialInstance object containing material +data that can be fed to Renderables for rendering. + + + + +Constructor for the Mesh + + Handle to the mesh object. + + + +Managed counterpart of the native Mesh object containing vertex data that can +be fed to Renderables for rendering. + + + +@brief Decomposes a transformation matrix into translation, orientation and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] orientation The orientation of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Decomposes a transformation matrix into translation, euler angles and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] rotation The euler angles of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Interface for a Column-Major Row Vector 4x4 Matrix. + + + + +Constructs a RigidBody Component that represents a native +SHRigidBodyComponent component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHRigidBodyComponent. + + + + +Creates an instance of the Managed representation of a Component with a +native Entity. + + Type of Component to create. + Native Entity that this Component is tied to. + The created Managed representation of the Component. + + + +Static constructor to initialize static data + + + + +Pointer to a function for Component manipulation operations. + + +Contains a set of Component related data used for resolving operations for +each Component. + + + + +Removes a Component from the specified Entity. + + Type of the Component to remove. + +Entity object that should have the specified Component removed from/ + + + + +Checks if the specified Entity has the specified Component. + + Type of the Component to check for. + Entity object to check for the Component. + +True if the specified Entity has the specified Component. False otherwise. + + + + +Ensures a Component on the specified Entity. + + Type of the Component to ensure. + Entity object to ensure the Component on. + Reference to the Component. + + + +Retrieves the first Component from the specified GameObjectt's children that +matches the specified type. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Gets a Component from the specified Entity. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Adds a Component to the specified Entity. + + Type of the Component to add. + +Entity object that should have the specified Component added to. + + Reference to the Component that was added. + + + +Static class which contains functions that map Pls::ECS's Component manipulation +functions to managed generic functions. + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Entity that this Component belongs to. + + + + +Constructor for BaseComponent to tie it to a specific Entity. +Constructors of derived Components should call this Constructor. + + Entity that this Component will be tied to. + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to Get. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to add. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Retrieves the GameObject that this Component belongs to. + + + + +Class that serves as the base for a wrapper class to Components in native code. + + + + +Called when the attached GameObject has a Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called just before the end of the frame where the attached GameObject or +this script is destroyed directly or indirectly due to destruction of the +owner. + + + + +Called every frame after physics and collision resolution but before +rendering. + + + + +Called every frame before physics and collision resolution. + + + + +Called every frame in sync with Physics update steps and thus in most cases +will execute more than update() will. This will be called immediately before +a Physics update step. + + + + +Called on the first frame that the attached GameObject is active but always +after Awake(). + + + + +Called on the first frame that the attached GameObject is active if they are +a part of the scene. + + + + +Called immediately once this script is detached from a GameObject. + + + + +Called immediately once this script is attached to a GameObject. + + + + +Constructor for Script to tie it to a specific GameObject. +Constructors of derived Scripts should call this Constructor. + + +GameObject that this Script will be tied to. + + + + +Used to call onTriggerExit(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerStay(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerEnter(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionExit(). This should be called when a collision ends +between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionStay(). This should be called when a collision is +persistent between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionEnter(). This should be called when a collision is +detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onDestroy(). This should be called at the end of the frame +where the attached GameObject or this script is destroyed directly or +indirectly due to destruction of the owner. + + + + +Used to call lateUpdate(). This should be called every frame after physics +and collision resolution but before rendering. + + + + +Used to call update(). This should be called every frame before physics and +collision resolution. + + + + +Used to call fixedUpdate(). This should be called in sync with Physics +update steps and thus in most cases will execute more than Update() will. +This will be called immediately before a Physics update step. + + + + +Used to call start(). This should be called on the first frame that the +attached GameObject is active but always after Awake(). + + + + +Used to call awake(). This should be called on the first frame that the +attached GameObject is active if they are a part of the scene. + + + + +Used to call onDetached(). This is called immediately when this script is +detached from a GameObject. + + + + +Used to call onAttached(). This is called immediately when this script is +attached to a GameObject. + + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + +Type of script to remove. +This needs to be a default constructable Script. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from this GameObject's children that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Retrieves the first Script from this GameObject that matches the specified +type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Adds a Script to this GameObject. + + +Type of script to add. +This needs to be a default constructable Script. + + Reference to the script added + + + +Removes a Component from the GameObject that this Script belongs to. + + +Type of the Component to remove. Must be derived from BaseComponent. + + + + +Ensures a Component on the GameObject that this Script belongs to. + + +Type of the Component to ensure. Must be derived from BaseComponent. + + Reference to the Component. + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Gets a Component from the GameObject that this Script belongs to. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Adds a Component to the GameObject that this Script belongs to. + + +Type of the Component to add. Must be derived from BaseComponent. + + Reference to the Component that was added. + + + +GameObject that this Script belongs to. + + + + +Class that forms the basis of all "script"-objects that can be attached to +Entities to update each Entity's Components via C# code. + + + + +The RigidBody that you are colliding with. + + + + +The CollisionShape of the Collider that you are colliding with. + + + + +The Collider that you are colliding with. + + + + +The GameObject whose collider you are colliding with. + + + + +Struct that describes a collision + + + + +Checks if two GameObject references are different. + + GameObject to check. + Another GameObject to check with. + True if both Components are different. + + + +Checks if two GameObject references are the same. + + GameObject to check. + Another GameObject to check with. + True if both Components are the same. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Retrieves the native Entity object that this GameObject represents. + + Native Entity object that this GameObject represents. + + + +Retrieves the CLR Entity object that this GameObject represents. + + Entity object that this GameObject represents. + + + +Constructor for the GameObject. + + +Managed numerical representation of the ECS Entity that this GameObject +should represent. + + + + +Constructor for the GameObject. + + +The ECS Entity that this GameObject should represent. + + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to retrieve. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from child GameObjects. +If multiple Scripts of the same specified type are added on the same +child GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Ensures a Component on this GameObject. + + Type of the Component to ensure. + +Reference to the Component. + + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + Type of the Component to get. + +Reference to the Component or null if neither of this GameObject's children +does not have the specified Component. + + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Sets the active state of this GameObject. +
    +The actual "activeness" of this GameObject is still dependent on the parents' +active states. +
    + +Whether to activate or deactivate this GameObject. + +
    + + +Sets the name of this GameObject. + + The name to set. + + + +Native Entity ID value for this GameObject. + + + + +Whether or not this Entity is active in the Scene hierarchy. + + + + +Whether or not this Entity alone, is active. This does not mean that this +object is active in the scene. For example, if this Entity's parent is not +active, then this Entity would also be not active. + + + + +Name of the object that this Entity represents. + + + + +Retrieves a GameObject with the specified name. If there are multiple +GameObjects with the same name, the first found GameObject will be retrieved. +There is no guaranteed order of which GameObject is considered "first". + + Name of the GameObject to find. + GameObject that has the specified name. Null if not found. + + + +Destroys the specified GameObject. Note that the specified GameObject will no +longer be a valid GameObject after this function is called. + + The GameObject to be destroyed. + + + +Creates a new GameObject in the current Scene. If multiple Scenes are loaded, +and you would like to create an object in a specific Scene, call the Scene's +CreateGameObject(). + + GameObject that represents the newly created GameObject. + + + +Lightweight object for an PlushieEngine Entity that allows for easy access +to Component and Script operations. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Maximum value for the Ranged field. + + + + +Minimum value for the Ranged field. + + + + +Simple attribute to constrain the range of values for a field on the editor. + + + + +Converts from a native std::Stringto a managed String. + + The native std::string to convert from. + Managed copy of a native std::string. + + + +Converts from a managed String to a native std::string. + + The managed String to convert from. + Native copy of a managed String. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a native Quaternion to a managed Quaternion. + + The native Quaternion to convert from. + Managed copy of a native Quaternion. + + + +Converts from a managed Quaternion to a native Quaternion. + + The managed Quaternion to convert from. + Native copy of a managed Quaternion. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a managed Vector2 to a native Vector2. + + The managed Vector2 to convert from. + Native copy of a managed Vector2. + + + +Converts from a native Vector3 to a managed Vector3. + + The native Vector3 to convert from. + Managed copy of a native Vector3. + + + +Converts from a managed Vector3 to a native Vector3. + + The managed Vector3 to convert from. + Native copy of a managed Vector3. + + + +Converts from a native Entity to a managed Entity (UInt32). + + Native Entity to convert from. + Managed representation of the specified Entity. + + + +Provides functions easy and consistent syntax for converting between custom +managed and native types that are aligned. + + + + +Converts to true if this is a valid Handle. + + + + +The library that the handle was issued by. + + + + +The internal ID of the handle. + + + + +Creates a ray starting at origin along direction. + + Source of the ray. + Direction the ray travels in. + + + +The direction that a ray travels in. + + + + +The start point of the ray. + + + + +CLR version of the the SHADE Engine's Ray class that represents a ray in +3-Dimensional space. + + + + +Are two quaternions equal to each other? + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Combines rotations lhs and rhs. + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Spherically interpolates between a and b by t. The parameter t is not clamped. + + + + +Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion spherically interpolated between quaternions a and b. + + + +Rotates a rotation from towards to.
    +The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). +Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. +
    +
    + + +Converts this quaternion to one with the same orientation but with a magnitude of 1. + + + + +Creates a rotation with the specified forward and upwards directions.
    +Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. +
    +
    + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. + + + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion interpolated between quaternions a and b. + + + +Returns the Inverse of rotation. + + + + +Creates a rotation which rotates from fromDirection to toDirection. + + + + +Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. + + + + +The dot product between two rotations. + + + + +Creates a rotation which rotates angle degrees around axis. + + + + +Returns the angle in degrees between two rotations a and b.
    + The angle in degrees between the two vectors. +
    + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Converts a rotation to angle-axis representation (angles in degrees). + + + + +Creates a rotation with the specified forward and upwards directions.
    +The result is applied to this quaternion. +If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. +Logs an error if the forward direction is zero. +
    + The direction to look in. + The vector that defines in which direction up is. +
    + + +Creates a rotation which rotates from fromDirection to toDirection.
    +Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). +These Vectors must be set up in a script. +
    +
    + + +Constructor to construct a Quaternion with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + W-coordinate to set. + + + +W-component of the Quaternion. Do not directly modify quaternions. + + + + +Z-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Y-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +X-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Shorthand for writing Quaternion(0, 0, 0, 1). + + + + +CLR version of SHADE's Quaternion class that represents an orientation. +Designed to closely match Unity's Quaternion struct. + + + + +Explicit conversion operator to enable explicit casting from a Vector2 to a +Vector3. + + Vector2 to convert from. + + + +Explicit conversion operator to enable explicit casting from a Vector3 to a +Vector2. + + Vector3 to convert from. + + + +Checks if two Vector3s are not approximately equal. This is equivalent to +calling !Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector3s are approximately equal. This is equivalent to +calling Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector3s and returns the +result. + + Vector3 to multiply with. + Another Vector3 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector3 from another Vector3 and returns the result. + + Vector3 to subtract from. + Another Vector3 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector3s together and returns the result. + + Vector3 to add. + Another Vector3 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector3. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Computes and returns a Vector3 that is made from the largest components of +the two specified Vector3s. + + Vector3 to calculate maximum Vector3 with. + Another Vector3 to calculate maximum Vector3 with. + +The Vector3 that contains the largest components of the two specified +Vector3s. + + + + +Computes and returns a Vector3 that is made from the smallest components of +the two specified Vector3s. + + Vector3 to calculate minimum Vector3 with. + Another Vector3 to calculate minimum Vector3 with. + +The Vector3 that contains the smallest components of the two specified +Vector3s. + + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector3 that represents the rotated vector. + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector3 that represents the rotated vector. + + + +Reflects a Vector3 across another Vector3. + + A Vector3 to reflect. + A normal to reflect the Vector3 across. + The Vector3 that represents vec reflected across normal. + + + +Computes and returns a Vector3 projection. + + Vector3 to project. + Vector3 to project onto. + The Vector3 that represents the projected vec onto direction. + + + +Computes and returns the cross product of 2 specified Vector3s. + + Vector3 to calculate cross product with. + Another Vector3 to calculate cross product with. + The cross product of the two Vector3s. + + + +Computes and returns the dot product of 2 specified Vector3s. + + Vector3 to calculate dot product with. + Another Vector3 to calculate dot product with. + Scalar value representing the dot product of the two Vector3s. + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + Amount of tolerance to do the comparison with. + +True if the two Vector3s are within the tolerance value specified + + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + +True if the two Vector3s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector3 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector3 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector3. + + Returns the squared length of this Vector3. + + + +Calculates and returns the magnitude of this Vector3. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector3. + + + +Creates a copy of this Vector3 and returns a normalized version. + + +Returns a normalised copy of this Vector3. +If this Vector3 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector3. This changes the data of this Vector3. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Conversion constructor to construct a Vector3 using a Vector2. + + + + + +Constructor to construct a Vector3 with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Z-component set to 0.0f. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Y and Z-component set to 0.0f. + + X-coordinate to set. + + + +Z-component of the Vector3. + + + + +Y-component of the Vector3. + + + + +X-component of the Vector3. + + + + +Shorthand for writing Vector3(0, 0, 0). + + + + +Shorthand for writing Vector3(0, 1, 0). + + + + +Shorthand for writing Vector3(1, 0, 0). + + + + +Shorthand for writing Vector3(float.PositiveInfinity, +float.PositiveInfinity, float.PositiveInfinity). + + + + +Shorthand for writing Vector3(1, 1, 1). + + + + +Shorthand for writing Vector3(float.NegativeInfinity, +float.NegativeInfinity, float.NegativeInfinity). + + + + +Shorthand for writing Vector3(-1, 0, 0). + + + + +Shorthand for writing Vector3(0, 0, 1). + + + + +Shorthand for writing Vector3(0, -1, 0). + + + + +Shorthand for writing Vector3(0, 0, -1). + + + + +CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. +Designed to closely match Unity's Vector3 struct. + + + + +Checks if two Vector2s are not approximately equal. This is equivalent to +calling !Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector2s are approximately equal. This is equivalent to +calling Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector2s and returns the +result. + + Vector2 to multiply with. + Another Vector2 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector2 from another Vector2 and returns the result. + + Vector2 to subtract from. + Another Vector2 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector2s together and returns the result. + + Vector2 to add. + Another Vector2 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector2. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector2. + + + +Computes and returns a Vector2 that is made from the largest components of +the two specified Vector2s. + + Vector2 to calculate maximum Vector2 with. + Another Vector2 to calculate maximum Vector2 with. + +The Vector2 that contains the largest components of the two specified +Vector2s. + + + + +Computes and returns a Vector2 that is made from the smallest components of +the two specified Vector2s. + + Vector2 to calculate minimum Vector2 with. + Another Vector2 to calculate minimum Vector2 with. + +The Vector2 that contains the smallest components of the two specified +Vector2s. + + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector2 that represents the rotated vector. + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector2 that represents the rotated vector. + + + +Reflects a Vector2 across another Vector2. + + A Vector2 to reflect. + A normal to reflect the Vector2 across. + The Vector2 that represents vec reflected across normal. + + + +Computes and returns a Vector2 projection. + + Vector2 to project. + Vector2 to project onto. + The Vector2 that represents the projected vec onto direction. + + + +Computes a perpendicular Vector2 to the specified Vector2. + + Vector2 to find a perpendicular of. + +Whether the inward perpendicular Vector is retrieved. If true, the +resultant vector is rotated 90-degrees in a counter-clockwise. + + The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes the inward perpendicular Vector2 to the specified Vector2. +Equivalent to calling Perpendicular(lhs, true). This means, the +resultant Vector2 is rotated 90-degrees in a counter-clockwise. + + Vector2 to find a perpendicular of. + +The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes and returns the dot product of 2 specified Vector2s. + + Vector2 to calculate dot product with. + Another Vector2 to calculate dot product with. + +Scalar value representing the dot product of the two Vector2s. + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +Amount of tolerance to do the comparison with. + + +True if the two Vector2s are within the tolerance value specified + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +True if the two Vector2s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector2 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector2 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector2. + + Returns the squared length of this Vector2. + + + +Calculates and returns the magnitude of this Vector2. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector2. + + + +Creates a copy of this Vector2 and returns a normalized version. + + +Returns a normalised copy of this Vector2. +If this Vector2 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector2. This changes the data of this Vector2. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Constructor to construct a Vector2 with the specified components.. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector2 with the specified components with the +Y-component set to 0.0f. + + X-coordinate to set. + + + +Y-component of the Vector2. + + + + +X-component of the Vector2. + + + + +Shorthand for writing Vector2(0, 0). + + + + +Shorthand for writing Vector2(0, 1). + + + + +Shorthand for writing Vector2(1, 0). + + + + +Shorthand for writing Vector2(float.PositiveInfinity, +float.PositiveInfinity). + + + + +Shorthand for writing Vector2(1, 1). + + + + +Shorthand for writing Vector2(float.NegativeInfinity, +float.NegativeInfinity). + + + + +Shorthand for writing Vector2(-1, 0). + + + + +Shorthand for writing Vector2(0, -1). + + + + +CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. +Designed to closely match Unity's Vector2 struct. + + + + +Checks if the specified entity is valid. This is done by checking if it +matches Pls::Entity::INVALID. + + The Entity to check. + True if the specified Entity is valid. + + + +Static class that contains useful utility functions for working with Entity. + + + + +Manages all resources in multiple ResourceLibraries. + + + + +Base class for SHResourceLibrary that holds information about the library type. + + + + +Template Specialization for Handle that represents a type-less Handle. + + + + +Converts to true if this is a valid Handle. + + + + +Native ID type of a handle + + + + +Base implementation of the Handle that is not templated to allow for holding +generic non-type-specific Handles. + + + + +Exception thrown when a generic Handle is being casted to the wrong type. + + + + +Exception thrown when an invalid Handle was dereferenced. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/bin/Release/SHADE_CSharp.xml b/bin/Release/SHADE_CSharp.xml new file mode 100644 index 00000000..daeaa3c5 --- /dev/null +++ b/bin/Release/SHADE_CSharp.xml @@ -0,0 +1,1029 @@ + + + + SHADE_CSharp + + + + + Interface for a CallbackAction that all variants inherit from. + + + + + Whether or not this CallbackAction is runtime assigned. If it is, then the + TargetMethodName and TargetObject properties are invalid. + + + + + Name of the method that this CallbackAction is using. + + + + + Object which the specified target method is called on. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 1 parameter. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 2 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 3 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 4 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 5 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 6 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 7 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 8 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 9 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Represents a function call that can be serialised and put togetheer with scripts. + This variant accepts functions with 10 parameters. + + + + + + + + + + + + + + Constructs an empty Callback action. + + + + + Constructs a CallbackAction that represents a call to the specified static + method. + + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a CallbackAction that represents a call to a specified member + method on the specified target. + + Object to call the method on. + Method to call. + + Thrown if a method that is not compatible with the target is specified. The method's + source type must match the target's type. + + + + + Constructs a Callback action based on an action. + + Action that wraps a function to be called. + + + + Invokes the CallbackAction's stored method/action with the specified parameters. + + + + + Interface for a CallbackEvent that all variants inherit from. + + + + + Registers an empty ICallbackAction. + + + + + Registers an ICallbackAction with the event such that it will be called in + future + + ICallbackAction to register with. + + + + Deregisters an ICallbackAction that was previously added. This should + only emit a warning if an action that was not previous added was + provided. + + ICallbackAction to remove. + + + + Iterable set of ICallbackActions that were registered to this event. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + + A container of CallbackActions that is correlated to a specific scenario as + specified by the user of this class. + This variant accepts CallbackEvents with 1 generic parameter. + + + + + + + + + + + + + + Adds a CallbackAction into the event. + + CallbackAction to add. + + + + Constructs and adds a CallbackACtion into the event. + + System.Action to add as a CallbackAction. + + + + Constructs and adds a CallbackACtion into the event. + + Object to call the method on. + Method to call. + + + + + + + Invokes all stored CallbackActions with the specified parameters. + + + + diff --git a/bin/Release/SHADE_Managed.xml b/bin/Release/SHADE_Managed.xml new file mode 100644 index 00000000..7b653116 --- /dev/null +++ b/bin/Release/SHADE_Managed.xml @@ -0,0 +1,6250 @@ + + + + "SHADE_Managed" + + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has not been held or was last +not been held for. + + The key to check. + Time in seconds that the key was held. + + + +Retrieves the duration that the specified key has been held or was last held +for. + + The key to check. + Time in seconds that the key was held. + + + +Sets the position of the mouse cursor relative to the top left corner of the +window. + + +Position of the mouse in window pixel coordinates to set. + + + + +Checks if a specified mouse button is no longer pressed and was pressed +before. + + MouseCode of the mouse button to check. + +True during the frame the user releases the given mouse button. + + + + +Checks if a specified mouse button is pressed and was not pressed before. + + MouseCode of the mouse button to check. + +True during the frame the user pressed the given mouse button. + + + + +Checks if a specified mouse button is being held down. +This will also be true if GetMouseButtonDown() is true. + + MouseCode of the mouse button to check. + True while the user holds down the mouse button specified. + + + +Checks if a specified key is no longer pressed pressed and was pressed +before. + + KeyCode of the key to check. + +True during the frame the user releases the key identified by name. + + + + +Checks if a specified key is pressed and was not pressed before. + + KeyCode of the key to check. + +True during the frame the user starts pressing down the key specified. + + + + +Checks if a specified key is being held down. +This will also be true if GetKeyDown() is true. + + KeyCode of the key to check. + True while the user holds down the key specified. + + + +Amnount of vertical mouse scroll in this frame. + + + + +Mouse position in screen coordinates relative to the top left of the window. +This value is a Vector3 for compatibility with functions that have Vector3 +arguments. The z component of the Vector3 is always 0 + + + + +Represents the available supported mouse keycodes that can be passed into the +mouse-button-based Input functions. + + + + +Represents the available supported keycodes that can be passed into the +key-based Input functions. + +Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html +Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode + + + + +Static class responsible for providing access to Input-related functionality. + + + + +Simple attribute to mark that a field in a Script should be serialised. + + + + +Cleans up all required components for managed code. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. +Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Initialises all required components for managed code. + + + + +Name of the Managed Library that contains the C# scripts written externally. + + + + +Static class that contains the functions for interfacing with the core +PlushieEngine written in C++ for managing the lifecycle of managed code. + + + + +Default Constructor + + + + +Custom AssemblyLoadContext marked as collectible so that it can be unloaded. + + + + +Time taken for Physics simulations. You should use this for operations +within Script.FixedUpdate() + + + + +Time taken to process the previous frame. + + + + +Static class that contains the functions for working with time. + + + + +Static class that wraps up certain functions in the SHPhysicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Description that is to be shown in the Tooltip. + + + + +Simple attribute to provide a field in a script with a tooltip. + + + + +Checks if a specified file exists. + + File path to the file to check. + True if the file exists + + + +Deletes the folder and all files in it as specified by the file path. + + File path to the file to delete. + + + +Deletes the file as specified by the file path. + + File path to the file to delete. + + + +Reads the file via the specified path that represents a build log of error +and warning messages. + + +File path to the build log of script builds done by BuildScriptAssembly() to +dump and process. + + + + +Registers events for the scripting system + + + + +Loads all the function pointers to CLR code that we need to execute. + + + + +Generates a .csproj file for editing and compiling the C# scripts. + + File path to the generated file. + + + +Utilises execution of a external batch file for invoking the dotnet build +tool to compile C# scripts in the Assets folder into the SHADE_Scripting +C# assembly DLL. + + +Whether or not a debug build will be built. Only debug built C# assemblies +can be debugged. + + +Whether or not we are reloading the assembly, if so, unload and then reload it. + + Whether or not the build succeeded. + + + +Performs a redo for script inspector changes if it exists. + + + + +Performs an undo for script inspector changes if it exists. + + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Creates scripts and sets fields for the specified Entity based on the specified +YAML node. + + The Entity to deserialise a Script on to. + +YAML Node that contains the serialised script data. + + True if successfully deserialised. + + + +Performs serialization of all scripts for the specified entity into the +YAML::Node specified. This node will contain all serialised scripts after +calling this function. + + The Entity to Serialise. + +YAML Node that will store the serialised scripts. + + True if successfully serialised. + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts. This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Adds a Script to a specified Entity. Note that while you can call this +multiple times on a specified Entity, it will work for all intents and +purposes but GetScript<T>() (C# only) currently only +gives you the first Script added of the specified type. + + The entity to add a script to. + Type name of the script to add. + +True if successfully added. False otherwise with the error logged to the +console. + + + + +Shuts down the DotNetRuntime. + + + + +Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached +to Entities. + + + + +Executes the FixedUpdate()s of the Scripts that are attached to +Entities. + + + + +Reloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Unloads the managed script assembly. +Take note that this will clear all existing scripts, ensure that the scene +is saved before doing so. + + + + +Loads the managed script assembly. Ensure this is only called after +UnloadScriptAssembly() has been called. + + + + +Initialises the DotNetRuntime and retrieves function pointers to all +functions on the CLR used to interface with the engine. + + + + +Manages initialisation of the DotNetRuntime and interfacing with CLR code written +and executed on .NET. + + + + +Deserialises a YAML node that contains a map of Scripts and copies the +deserialised data into the specified object if there are matching fields. + + +The JSON string that contains the data to copy into this Script object. + + The object to copy deserialised data into. + + + +Creates a JSON node that represents the specified object and its associated +serialisable fields. Public fields and fields marked with the SerialiseField +attribute will be serialised. + + The object to serialise. + + + +Checks if a specified field is a candidate for serialisation. This means that +the field is public or private with the [SerialiseField] attribute. + + The field to check. + +True if the specified field is a candidate for serialisation. + + + + +Retrieves a set of all non-static (instance) fields from a specified object. + + The object to get non-static fields from. + Immutable list of non-static fields. + + + +Contains useful static functions for working with Reflection. + + + +Converts the node to a YAML string. + + +Emits the node to the given output stream. + + +Emits the node to the given {@link Emitter}. If there is an error in writing, +{@link Emitter#good} will return false. + + + + Loads the input file as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a list of YAML documents. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input file as a single YAML document. + + @throws {@link ParserException} if it is malformed. + @throws {@link BadFile} if the file cannot be loaded. + + + + Loads the input stream as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + + Loads the input string as a single YAML document. + + @throws {@link ParserException} if it is malformed. + + + +Handles a "TAG" directive, which should be of the form 'handle prefix', +where 'handle' is converted to 'prefix' in the file. + + + +Handles a "YAML" directive, which should be of the form 'major.minor' (like +a version number). + + + +Reads any directives that are next in the queue, setting the internal +{@code m_pDirectives} state. + + + + Handles the next document by calling events on the {@code eventHandler}. + + @throw a ParserException on error. + @return false if there are no more documents + + + +Resets the parser with the given input stream. Any existing state is +erased. + + + +Evaluates to true if the parser has some valid input to be read. + + +Constructs a parser from the given input stream. The input stream must +live as long as the parser. + + + +Constructs an empty parser (with no input. + + +A parser turns a stream of bytes into one stream of "events" per YAML +document in the input stream. + + + + +Renders a context menu when right clicked for the scripts + + The Entity to render the Scripts of. + The Script to render the inspector for. + + + +Renders a field specified into the inspector. + + The field to render. + +The object that contains the data of the field to render. + + + + +Renders a single specified Script's inspector. + + The Entity to render the Scripts of. + The Script to render the inspector for. + +Indices used internally to differentiate each rendered Script +inspector. This is required to open and close each Script's inspector +independently from each other. + + + + +Redoes the last script inspector change if there is any. + + + + +Undoes the last script inspector change if there is any. + + + + +Renders a dropdown button that allows for the addition of PlushieScripts +onto the specified Entity. + + The Entity to add PlushieScripts to. + + + +Renders the set of attached Scripts for the specified Entity into the +inspector. +
    +This function is meant for consumption from native code in the inspector +rendering code. +
    + The Entity to render the Scripts of. +
    + + +Static class for Editor-related functions + + + + +Processes a YAML node that contains a list of multiple scripts to be loaded +into the specified Entity. +

    +This function should only be called from native unmanaged code. +
    + +The Entity to attach the deserialised Scripts to. + + +Pointer to the YAML::Node that contains serialized script data. + + +
    + + +Populates a YAML node with the scripts for a specified Entity. +

    +This function should only be called from native unmanaged code. +
    + The Entity to Serialise. + +Pointer to a YAML::Node that will be populated with all of the serialised +scripts and their associated fields. + + +True if serialisation is successful. False if the buffer is too small for +the serialised output. + +
    + + +Executes OnCollision*() and OnTrigger*() for all scripts. + + + + +Executes LateUpdate() for all scripts. + + + + +Executes Update() for all scripts. + + + + +Executes FixedUpdate() for all scripts. + + + + +Retrieves a immutable list of available scripts that can be added. + + Immutable list of available scripts that can be added. + + + +Cleans up data stored in the ScriptStore to free up memory for garbage +collection. + + + + +Cleans up scripts that were marked for deletion. This calls the OnDestroy() +for these Scripts. + + + + +Sets up scripts that were marked for initialization. This calls the Awake() +and Start() for Scripts that have yet to have done so. + + + + +Initializes the ScriptStore to allocate and pre-populate reflection data. + + + + +Removes all Scripts attached to the specified Entity. Unlike +RemoveAllScripts(), this removes all the scripts immediately. +Does not do anything if the specified Entity is invalid or does not have any +Scripts attached. + + The entity to remove the scripts from. + +Whether or not to call OnDestroy on the scripts.This is ignored if not in +play mode. + + + + +Removes all Scripts attached to the specified Entity. Does not do anything +if the specified Entity is invalid or does not have any Scripts +attached. + + The entity to remove the scripts from. + + + +Removes a specific script from the + + The entity to remove the script from. + The script to remove. + True if successfully removed. False otherwise. + + + +Removes all Scripts of the specified type from the specified Entity. + + +Type of script to remove. +This needs to be a default constructable Script. + + The entity to remove the script from. + +If the specified Entity is invalid. + + + + +Retrieves an immutable list of all scripts attached to a specified Entity. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts attached to the specified Entity. +This can also be null if there are no scripts at all or an invalid Entity +was specified. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +The entity which the scripts to retrieve are attached. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from the specified Entity's children that matches +the specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Retrieves the first Script from the specified Entity that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + +The entity which the script to retrieve is attached. + + +Reference to the script. This can be null if no script of the specified +type is attached. + + +If the specified Entity is invalid. + + + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code or for serialisation +purposes. If you are writing in C# or C++/CLI and not doing serialisation, +use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +Out parameter handle to the Script that was created. + + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. +
    +This function is meant for consumption from native code. If you are writing +in C# or C++/CLI, use AddScript<T>() instead as it is faster. +
    + The entity to add a script to. + The entity to add a script to. + +True if successfully added. False otherwise with the error logged to the +console. + +
    + + +Adds a Script to a specified Entity. + + +Type of script to add. +This needs to be a default constructable PlushieScript. + + The entity to add a script to. + Reference to the script added. + +If the specified Entity is invalid. + + + + +Responsible for managing all scripts attached to Entities as well as executing +all lifecycle functions of scripts. + + + + +Checks if two Colors are not approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Colors are approximately equal. + + Color to compare. + Another Color to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Color with a scalar value and returns +the result. + + Scalar to divide with. + Color to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Color with a scalar value and returns +the result. + + Color to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Colors and returns the +result. + + Color to multiply with. + Another Color to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Color from another Color and returns the result. + + Color to subtract from. + Another Color to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Colors together and returns the result. + + Color to add. + Another Color to add. + The result of lhs added to rhs + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + Value used to interpolate between a and b. + The interpolated Color. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Color, returned when t = 0.0. + The end Color, returned when t = 1.0. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Alpha component of the colour. Ranges from 0.0f to 1.0f. + + + + +Blue component of the colour. Ranges from 0.0f to 1.0f. + + + + +Green component of the colour. Ranges from 0.0f to 1.0f. + + + + +Red component of the colour. Ranges from 0.0f to 1.0f. + + + + +Constructor to construct a Color with the specified components. + + Red component to set. + Green component to set. + Blue component to set. + Alpha component to set. + + + +Constructor to construct a Color with the specified components with the +alpha component set to 1.0f. + + Red component to set. + Green component to set. + Blue component to set. + + + +Constructor to construct a Color with the specified components with the +blue and alpha component set to 1.0f. + + Red component to set. + Green component to set. + + + +Constructor to construct a Color with the specified components with the +green, blue and alpha component set to 1.0f. + + Red component to set. + + + +Pure yellow, mix of pure red and green. + + + + +Pure magenta, mix of pure red and blue. + + + + +Pure cyan, mix of pure green and blue. + + + + +Pure blue. + + + + +Pure green. + + + + +Pure red. + + + + +Pure white. + + + + +Dark Gray, darker than gray. + + + + +Gray, halfway between black and white. + + + + +Light Gray, lighter than gray. + + + + +Pure black. + + + + +A static class that contains a set of default Colors. + + + + +CLR version of the the SHADE Engine's Color struct which describes a Color +encoded using floating point numbers that range from 0.0f to 1.0f. + + + + +Creates a inline button widget. +
    +Wraps up ImGui::Button(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a small inline button widget. +
    +Wraps up ImGui::SmallButton(). +
    + Text to display. + True if button was pressed. +
    + + +Creates a visual text widget. +
    +Wraps up ImGui::Text(). +
    + Text to display. +
    + + +Creates a menu item in the list of items for a mini popup. +
    +Wraps up ImGui::MenuItem(). +
    + Label used to identify this widget. + Whether or not the menu item was selected. +
    + + +Opens the popup that was defined with the specified label. +
    +Wraps up ImGui::OpenPopup(). +
    +
    + + +Marks the end of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::EndPopup(). +
    +
    + + +Marks the start of a definition of a mini pop up that can show options. +
    +Wraps up ImGui::BeginPopup(). +
    + Label used to identify this widget. + Whether or not the pop up is open. +
    + + +Creates a collapsing title header. +
    +Wraps up ImGui::CollapsingHeader(). +
    + Label for the header. + True if the header is open, false otherwise. +
    + + +Unindents the widgets rendered after this call. +
    +Wraps up ImGui::Unindent(). +
    +
    + + +Indents the widgets rendered after this call. +
    +Wraps up ImGui::Indent(). +
    +
    + + +Marks the end of a stack of ImGui widgets from the last PushID() call. +
    +Wraps up ImGui::PopID(). +
    +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + Integer-based ID. +
    + + +Marks the start of a stack of ImGui widgets with the specified id. +
    +Wraps up ImGui::PushID(). +
    + String-based ID. +
    + + +Maximum length of a string supported by InputTextField() + + + + +Static class that contains useful functions for Editor UI using ImGui. + + + + +Redoes the last undo-ed command if it exists. + + + + +Undos the last added command if it exists. + + + + +Adds a command onto the stack. + + + + + +True if there is a redoable action in the stack. + + + + +True if there is an undoable action in the stack. + + + + +Command for the stack that represents a data modification. + + + + +Class that is able to store a stack of actions that can be done and redone. + + + + +To be called from native code when a Collision Shape has been changed. + + +The entity which has it's collision shape changed. + + + + +To be called from native code when a collision shape has been removed. + + The entity which has it's collision shape removed. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list +and casts it to the appropriate type. + + Type of the ColliderBound to cast to. + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Retrieves a ColliderBound at the specified index in the ColliderBound list. + + Index to retrieve a ColliderBound from. + ColliderBound for the specified index. + + + +Total number of ColliderShapes in the Collider component. + + + + +Constructs a Collider Component that represents a native SHColliderComponent +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHColliderComponent. +A single Collider component can contain one or multiple Collider Bounds. + + + + + + + + + + +Radius of the Bounding Sphere formed by this bound. + + + + +Center of the Bounding Sphere formed by this bound. + + + + +Sphere-shaped Collider Bound. + + + + + + + + + + +Position of the top right front corner of the Bounding Box formed by this +bound. + + + + +Position of the bottom left back corner of the Bounding Box formed by this +bound. + + + + +Half of the scale of the Bounding Box formed by this bound. + + + + +Center of the Bounding Box formed by this bound. + + + + +Box-shaped Collider Bound. + + + + +Computes a Raycast and checks if there is a collision with any object. + + The ray to cast. + Maximum distance for the raycast check. + True if the ray intersects with an object in the scene. + + + +Checks if the specified point is within this shape's bounds. + + Point to test with. + True if the point is in the shape's bounds. + + + +Base interface for all Collider Shapes. + + + +@brief The density of the collider that determines the mass of the collision shape + if it is automatically computed. Must be a positive number. + + + +@brief The bounciness factor of the physics object., clamped between [0,1].
    + 0 means the object will never bounce. + 1 means the object never loses energy on a bounce. + +
    + +@brief The friction coefficient of the physics object., clamped between [0,1].
    + 0 means the object will never experience friction. + 1 means the friction force against the object is equal to the applied force. + +
    + +@brief Sets the mass density of the physics material. +@param newDensity The density value to set. Always made positive. + + + +@brief Sets the bounciness factor of the physics material. +@param newBounciness The bounciness value to set. Clamped between [0,1]. + + + +@brief Sets the friction coefficient of the physics material. +@param newFriction The friction value to set. Clamped between [0,1]. + + + +@brief Default constructor for a physics material. +@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. +@param bounciness The bounciness of the material. Clamped between [0,1]. +@param density The mass density of the material. Always made positive. + + + + +Closes the current window, and depending on the implementation, should also +close the application. + + + + +Retrieves the current window fullscreen status. + + The current window fullscreen status.. + + + +Retrieves the current window height. + + The current window height. + + + +Retrieves the current window width. + + The current window width. + + + +Static class that wraps up certain functions in the SHGraphicsSystem so that +accessing it from SHADE_Managed would not cause issues due to C++20 features. + + + + @brief Perform ImGui and ImGui Backend Render + + + + + @brief Start new frame for editor + + + + + @brief Initialise Backend for ImGui (SDL and Vulkan backend) + + @param sdlWindow Pointer to SDL_Window + + + + @brief Set the Style for the editor + + @param style Desired style + + + + @brief Safely shutdown the editor + + + + + @brief Update the editor and add to ImGui DrawList + + @param dt Delta-time of the frame + + + + @brief Initialise the editor + + @param sdlWindow pointer to SDL_Window object created in application + + + + @brief Style options + + + + + @brief SHEditor static class contains editor variables and implementation of editor functions. + + + + + Get the YUV conversion mode, returning the correct mode for the resolution + when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + + \since This function is available since SDL 2.0.8. + + + + Get the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Set the YUV conversion mode + + \since This function is available since SDL 2.0.8. + + + + Perform low-level surface scaled blitting only. + + This is a semi-private function and it performs low-level surface blitting, + assuming the input rectangles have already been clipped. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform a scaled surface copy to a destination surface. + + SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + merely a macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitScaled + + + + Perform bilinear scaling between two surfaces of the same format, 32BPP. + + \since This function is available since SDL 2.0.16. + + + + Perform a fast, low quality, stretch blit between two surfaces of the same + format. + + Please use SDL_BlitScaled() instead. + + \since This function is available since SDL 2.0.0. + + + + Perform low-level surface blitting only. + + This is a semi-private blit function and it performs low-level surface + blitting, assuming the input rectangles have already been clipped. + + Unless you know what you're doing, you should be using SDL_BlitSurface() + instead. + + \param src the SDL_Surface structure to be copied from + \param srcrect the SDL_Rect structure representing the rectangle to be + copied, or NULL to copy the entire surface + \param dst the SDL_Surface structure that is the blit target + \param dstrect the SDL_Rect structure representing the rectangle that is + copied into + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + + Perform a fast blit from the source surface to the destination surface. + + SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + macro for this function with a less confusing name. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + + + + Perform a fast fill of a set of rectangles with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rects an array of SDL_Rects representing the rectangles to fill. + \param count the number of rectangles in the array + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRect + + + + Perform a fast fill of a rectangle with a specific color. + + `color` should be a pixel of the format used by the surface, and can be + generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + alpha component then the destination is simply filled with that alpha + information, no blending takes place. + + If there is a clip rectangle set on the destination (set via + SDL_SetClipRect()), then this function will fill based on the intersection + of the clip rectangle and `rect`. + + \param dst the SDL_Surface structure that is the drawing target + \param rect the SDL_Rect structure representing the rectangle to fill, or + NULL to fill the entire surface + \param color the color to fill with + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FillRects + + + + Premultiply the alpha on a block of pixels. + + This is safe to use with src == dst, but not for other overlapping areas. + + This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + + \param width the width of the block to convert, in pixels + \param height the height of the block to convert, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with premultiplied pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.18. + + + + Copy a block of pixels of one format to another format. + + \param width the width of the block to copy, in pixels + \param height the height of the block to copy, in pixels + \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + \param src a pointer to the source pixels + \param src_pitch the pitch of the source pixels, in bytes + \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + \param dst a pointer to be filled in with new pixel data + \param dst_pitch the pitch of the destination pixels, in bytes + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Copy an existing surface to a new surface of the specified format enum. + + This function operates just like SDL_ConvertSurface(), but accepts an + SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + it might be easier to call but it doesn't have access to palette + information for the destination surface, in case that would be important. + + \param src the existing SDL_Surface structure to convert + \param pixel_format the SDL_PixelFormatEnum that the new surface is + optimized for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurface + \sa SDL_CreateRGBSurface + + + + Copy an existing surface to a new surface of the specified format. + + This function is used to optimize images for faster *repeat* blitting. This + is accomplished by converting the original and storing the result as a new + surface. The new, optimized surface can then be used as the source for + future blits, making them faster. + + \param src the existing SDL_Surface structure to convert + \param fmt the SDL_PixelFormat structure that the new surface is optimized + for + \param flags the flags are unused and should be set to 0; this is a + leftover from SDL 1.2's API + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + \sa SDL_ConvertSurfaceFormat + \sa SDL_CreateRGBSurface + + + + Get the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + \param surface the SDL_Surface structure representing the surface to be + clipped + \param rect an SDL_Rect structure filled in with the clipping rectangle for + the surface + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetClipRect + + + + Set the clipping rectangle for a surface. + + When `surface` is the destination of a blit, only the area within the clip + rectangle is drawn into. + + Note that blits are automatically clipped to the edges of the source and + destination surfaces. + + \param surface the SDL_Surface structure to be clipped + \param rect the SDL_Rect structure representing the clipping rectangle, or + NULL to disable clipping + \returns SDL_TRUE if the rectangle intersects the surface, otherwise + SDL_FALSE and blits will be completely clipped. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetClipRect + + + + Get the blend mode used for blit operations. + + \param surface the SDL_Surface structure to query + \param blendMode a pointer filled in with the current SDL_BlendMode + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetSurfaceBlendMode + + + + Set the blend mode used for blit operations. + + To copy a surface to another surface (or texture) without blending with the + existing data, the blendmode of the SOURCE surface should be set to + `SDL_BLENDMODE_NONE`. + + \param surface the SDL_Surface structure to update + \param blendMode the SDL_BlendMode to use for blit blending + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceBlendMode + + + + Get the additional alpha value used in blit operations. + + \param surface the SDL_Surface structure to query + \param alpha a pointer filled in with the current alpha value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Set an additional alpha value used in blit operations. + + When this surface is blitted, during the blit operation the source alpha + value is modulated by this alpha value according to the following formula: + + `srcA = srcA * (alpha / 255)` + + \param surface the SDL_Surface structure to update + \param alpha the alpha value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Get the additional color value multiplied into blit operations. + + \param surface the SDL_Surface structure to query + \param r a pointer filled in with the current red color value + \param g a pointer filled in with the current green color value + \param b a pointer filled in with the current blue color value + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceAlphaMod + \sa SDL_SetSurfaceColorMod + + + + Set an additional color value multiplied into blit operations. + + When this surface is blitted, during the blit operation each source color + channel is modulated by the appropriate color value according to the + following formula: + + `srcC = srcC * (color / 255)` + + \param surface the SDL_Surface structure to update + \param r the red color value multiplied into blit operations + \param g the green color value multiplied into blit operations + \param b the blue color value multiplied into blit operations + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetSurfaceColorMod + \sa SDL_SetSurfaceAlphaMod + + + + Get the color key (transparent pixel) for a surface. + + The color key is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + If the surface doesn't have color key enabled this function returns -1. + + \param surface the SDL_Surface structure to query + \param key a pointer filled in with the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_SetColorKey + + + + Returns whether the surface has a color key + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.9. + + \sa SDL_SetColorKey + \sa SDL_GetColorKey + + + + Set the color key (transparent pixel) in a surface. + + The color key defines a pixel value that will be treated as transparent in + a blit. For example, one can use this to specify that cyan pixels should be + considered transparent, and therefore not rendered. + + It is a pixel of the format used by the surface, as generated by + SDL_MapRGB(). + + RLE acceleration can substantially speed up blitting of images with large + horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + + \param surface the SDL_Surface structure to update + \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + \param key the transparent pixel + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_GetColorKey + + + + Returns whether the surface is RLE enabled + + It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + + \param surface the SDL_Surface structure to query + \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.14. + + \sa SDL_SetSurfaceRLE + + + + Save a surface to a file. + + Convenience macro. + + Set the RLE acceleration hint for a surface. + + If RLE is enabled, color key and alpha blending blits are much faster, but + the surface must be locked before directly accessing the pixels. + + \param surface the SDL_Surface structure to optimize + \param flag 0 to disable, non-zero to enable RLE acceleration + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_BlitSurface + \sa SDL_LockSurface + \sa SDL_UnlockSurface + + + + Load a surface from a file. + + Convenience macro. + + Save a surface to a seekable SDL data stream in BMP format. + + Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + BMP directly. Other RGB formats with 8-bit or higher get converted to a + 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + not supported. + + \param surface the SDL_Surface structure containing the image to be saved + \param dst a data stream to save to + \param freedst non-zero to close the stream after being written + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_LoadBMP_RW + \sa SDL_SaveBMP + + + + Load a BMP image from a seekable SDL data stream. + + The new surface should be freed with SDL_FreeSurface(). Not doing so will + result in a memory leak. + + src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + from a file, convert it to an SDL_Surface and then close the file. + + \param src the data stream for the surface + \param freesrc non-zero to close the stream after being read + \returns a pointer to a new SDL_Surface structure or NULL if there was an + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeSurface + \sa SDL_RWFromFile + \sa SDL_LoadBMP + \sa SDL_SaveBMP_RW + + + + Release a surface after directly accessing the pixels. + + \param surface the SDL_Surface structure to be unlocked + + \since This function is available since SDL 2.0.0. + + \sa SDL_LockSurface + + + + Set up a surface for directly accessing the pixels. + + Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + and read from `surface->pixels`, using the pixel format stored in + `surface->format`. Once you are done accessing the surface, you should use + SDL_UnlockSurface() to release it. + + Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + 0, then you can read and write to the surface at any time, and the pixel + format of the surface will not change. + + \param surface the SDL_Surface structure to be locked + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MUSTLOCK + \sa SDL_UnlockSurface + + + + Set the palette used by a surface. + + A single palette can be shared with many surfaces. + + \param surface the SDL_Surface structure to update + \param palette the SDL_Palette structure to use + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + + + Free an RGB surface. + + It is safe to pass NULL to this function. + + \param surface the SDL_Surface to free. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_LoadBMP + \sa SDL_LoadBMP_RW + + + + Allocate a new RGB surface with with a specific pixel format and existing + pixel data. + + This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + instead of providing pixel color masks, you provide it with a predefined + format from SDL_PixelFormatEnum. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with existing pixel data. + + This function operates mostly like SDL_CreateRGBSurface(), except it does + not allocate memory for the pixel data, instead the caller provides an + existing buffer of data for the surface to use. + + No copy is made of the pixel data. Pixel data is not managed automatically; + you must free the surface before you free the pixel data. + + \param pixels a pointer to existing pixel data + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param pitch the pitch of the surface in bytes + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + + Allocate a new RGB surface with a specific pixel format. + + This function operates mostly like SDL_CreateRGBSurface(), except instead + of providing pixel color masks, you provide it with a predefined format + from SDL_PixelFormatEnum. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param format the SDL_PixelFormatEnum for the new surface's pixel format. + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.5. + + \sa SDL_CreateRGBSurface + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_FreeSurface + + + + Allocate a new RGB surface. + + If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + If `depth` is greater than 8 bits, the pixel format is set using the + [RGBA]mask parameters. + + The [RGBA]mask parameters are the bitmasks used to extract that color from + a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + stored in the most significant byte. Using zeros for the RGB masks sets a + default value, based on the depth. For example: + + ```c++ + SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + ``` + + However, using zero for the Amask results in an Amask of 0. + + By default surfaces with an alpha mask are set up for blending as with: + + ```c++ + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + ``` + + You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + different `blendMode`. + + \param flags the flags are unused and should be set to 0 + \param width the width of the surface + \param height the height of the surface + \param depth the depth of the surface in bits + \param Rmask the red mask for the pixels + \param Gmask the green mask for the pixels + \param Bmask the blue mask for the pixels + \param Amask the alpha mask for the pixels + \returns the new SDL_Surface structure that is created or NULL if it fails; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_CreateRGBSurfaceFrom + \sa SDL_CreateRGBSurfaceWithFormat + \sa SDL_FreeSurface + + + +Reference count -- used when freeing surface + + +info for fast blit mapping to other surfaces + + +clipping information + + +list of BlitMap that hold a reference to this surface + + +information needed for surfaces requiring locks + + +Application data associated with the surface + + + \brief A collection of pixels used in software blitting. + + \note This structure should be treated as read-only, except for \c pixels, + which, if not NULL, contains the raw pixel data for the surface. + + +\brief The type of function used for surface blitting functions. + + + + Compose a custom blend mode for renderers. + + The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + the SDL_BlendMode returned by this function if the renderer supports it. + + A blend mode controls how the pixels from a drawing operation (source) get + combined with the pixels from the render target (destination). First, the + components of the source and destination pixels get multiplied with their + blend factors. Then, the blend operation takes the two products and + calculates the result that will get stored in the render target. + + Expressed in pseudocode, it would look like this: + + ```c + dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + ``` + + Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + dst)` can return one of the following: + + - `src + dst` + - `src - dst` + - `dst - src` + - `min(src, dst)` + - `max(src, dst)` + + The red, green, and blue components are always multiplied with the first, + second, and third components of the SDL_BlendFactor, respectively. The + fourth component is not used. + + The alpha component is always multiplied with the fourth component of the + SDL_BlendFactor. The other components are not used in the alpha + calculation. + + Support for these blend modes varies for each renderer. To check if a + specific SDL_BlendMode is supported, create a renderer and pass it to + either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + return with an error if the blend mode is not supported. + + This list describes the support of custom blend modes for each renderer in + SDL 2.0.6. All renderers support the four blend modes listed in the + SDL_BlendMode enumeration. + + - **direct3d**: Supports all operations with all factors. However, some + factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + `SDL_BLENDOPERATION_MAXIMUM`. + - **direct3d11**: Same as Direct3D 9. + - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + 2.0.6. + - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + factors. Color and alpha factors need to be the same. OpenGL ES 1 + implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + operations being different from each other. May support color and alpha + factors being different from each other. + - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + operations with all factors. + - **psp**: No custom blend mode support. + - **software**: No custom blend mode support. + + Some renderers do not provide an alpha component for the default render + target. The `SDL_BLENDFACTOR_DST_ALPHA` and + `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + case. + + \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the source pixels + \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + blue components of the destination pixels + \param colorOperation the SDL_BlendOperation used to combine the red, + green, and blue components of the source and + destination pixels + \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + the source pixels + \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + the destination pixels + \param alphaOperation the SDL_BlendOperation used to combine the alpha + component of the source and destination pixels + \returns an SDL_BlendMode that represents the chosen factors and + operations. + + \since This function is available since SDL 2.0.6. + + \sa SDL_SetRenderDrawBlendMode + \sa SDL_GetRenderDrawBlendMode + \sa SDL_SetTextureBlendMode + \sa SDL_GetTextureBlendMode + + + + Calculate the intersection of a rectangle and line segment with float + precision. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_FRect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + + + Calculate a minimal rectangle enclosing a set of points with float + precision. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_FPoint structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_FRect used for clipping or NULL to enclose all points + \param result an SDL_FRect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.22. + + + + Calculate the union of two rectangles with float precision. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.22. + + + + Calculate the intersection of two rectangles with float precision. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \param result an SDL_FRect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_HasIntersectionF + + + + Determine whether two rectangles intersect with float precision. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_FRect structure representing the first rectangle + \param B an SDL_FRect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.22. + + \sa SDL_IntersectRect + + + + Returns true if the two rectangles are equal, using a default epsilon. + + \since This function is available since SDL 2.0.22. + + + + Returns true if the two rectangles are equal, within some given epsilon. + + \since This function is available since SDL 2.0.22. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + Calculate the intersection of a rectangle and line segment. + + This function is used to clip a line segment to a rectangle. A line segment + contained entirely within the rectangle or that does not intersect will + remain unchanged. A line segment that crosses the rectangle at either or + both ends will be clipped to the boundary of the rectangle and the new + coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + + \param rect an SDL_Rect structure representing the rectangle to intersect + \param X1 a pointer to the starting X-coordinate of the line + \param Y1 a pointer to the starting Y-coordinate of the line + \param X2 a pointer to the ending X-coordinate of the line + \param Y2 a pointer to the ending Y-coordinate of the line + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + + + Calculate a minimal rectangle enclosing a set of points. + + If `clip` is not NULL then only points inside of the clipping rectangle are + considered. + + \param points an array of SDL_Point structures representing points to be + enclosed + \param count the number of structures in the `points` array + \param clip an SDL_Rect used for clipping or NULL to enclose all points + \param result an SDL_Rect structure filled in with the minimal enclosing + rectangle + \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + points were outside of the clipping rectangle. + + \since This function is available since SDL 2.0.0. + + + + Calculate the union of two rectangles. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the union of rectangles + `A` and `B` + + \since This function is available since SDL 2.0.0. + + + + Calculate the intersection of two rectangles. + + If `result` is NULL then this function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \param result an SDL_Rect structure filled in with the intersection of + rectangles `A` and `B` + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_HasIntersection + + + + Determine whether two rectangles intersect. + + If either pointer is NULL the function will return SDL_FALSE. + + \param A an SDL_Rect structure representing the first rectangle + \param B an SDL_Rect structure representing the second rectangle + \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + + \since This function is available since SDL 2.0.0. + + \sa SDL_IntersectRect + + + +Returns true if the two rectangles are equal. + + + +Returns true if the rectangle has no area. + + + +Returns true if point resides inside a rectangle. + + + + A rectangle, with the origin at the upper left (floating point). + + \sa SDL_FRectEmpty + \sa SDL_FRectEquals + \sa SDL_FRectEqualsEpsilon + \sa SDL_HasIntersectionF + \sa SDL_IntersectFRect + \sa SDL_IntersectFRectAndLine + \sa SDL_UnionFRect + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + A rectangle, with the origin at the upper left (integer). + + \sa SDL_RectEmpty + \sa SDL_RectEquals + \sa SDL_HasIntersection + \sa SDL_IntersectRect + \sa SDL_IntersectRectAndLine + \sa SDL_UnionRect + \sa SDL_EnclosePoints + + + + The structure that defines a point (floating point) + + \sa SDL_EncloseFPoints + \sa SDL_PointInFRect + + + + Use this function to write 64 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE64 + + + + Use this function to write 64 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE64 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE32 + + + + Use this function to write 32 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE32 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + big-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in big-endian format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteLE16 + + + + Use this function to write 16 bits in native format to a SDL_RWops as + little-endian data. + + SDL byteswaps the data only if necessary, so the application always + specifies native format, and the data written will be in little-endian + format. + + \param dst the stream to which data will be written + \param value the data to be written, in native format + \returns 1 on successful write, 0 on error. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteBE16 + + + + \name Write endian functions + + Write an item of native format to the specified endianness. + + Use this function to write a byte to an SDL_RWops. + + \param dst the SDL_RWops to write to + \param value the byte value to write + \returns 1 on success or 0 on failure; call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadU8 + + + + Use this function to read 64 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE64 + + + + Use this function to read 64 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 64 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE64 + + + + Use this function to read 32 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE32 + + + + Use this function to read 32 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 32 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE32 + + + + Use this function to read 16 bits of big-endian data from an SDL_RWops and + return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadLE16 + + + + Use this function to read 16 bits of little-endian data from an SDL_RWops + and return in native format. + + SDL byteswaps the data only if necessary, so the data returned will be in + the native byte order. + + \param src the stream from which to read data + \returns 16 bits of data in the native byte order of the platform. + + \since This function is available since SDL 2.0.0. + + \sa SDL_ReadBE16 + + + + \name Read endian functions + + Read an item of the specified endianness and return in native format. + + Use this function to read a byte from an SDL_RWops. + + \param src the SDL_RWops to read from + \returns the read byte on success or 0 on failure; call SDL_GetError() for + more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_WriteU8 + + + + Load all the data from a file path. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + Prior to SDL 2.0.10, this function was a macro wrapping around + SDL_LoadFile_RW. + + \param file the path to read all available data from + \param datasize if not NULL, will store the number of bytes read + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.10. + + + + Load all the data from an SDL data stream. + + The data is allocated with a zero byte at the end (null terminated) for + convenience. This extra byte is not included in the value reported via + `datasize`. + + The data should be freed with SDL_free(). + + \param src the SDL_RWops to read all available data from + \param datasize if not NULL, will store the number of bytes read + \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + \returns the data, or NULL if there was an error. + + \since This function is available since SDL 2.0.6. + + + + Close and free an allocated SDL_RWops structure. + + SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + resources used by the stream and frees the SDL_RWops itself with + SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + flush to its output (e.g. to disk). + + Note that if this fails to flush the stream to disk, this function reports + an error, but the SDL_RWops is still invalid once this function returns. + + Prior to SDL 2.0.10, this function was a macro. + + \param context SDL_RWops structure to close + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Write to an SDL_RWops data stream. + + This function writes exactly `num` objects each of size `size` from the + area pointed at by `ptr` to the stream. If this fails for any reason, it'll + return less than `num` to demonstrate how far the write progressed. On + success, it returns `num`. + + SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + `write` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer containing data to write + \param size the size of an object to write, in bytes + \param num the number of objects to write + \returns the number of objects written, which will be less than **num** on + error; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + + + + Read from a data source. + + This function reads up to `maxnum` objects each of size `size` from the + data source to the area pointed at by `ptr`. This function may read less + objects than requested. It will return zero when there has been an error or + the data stream is completely read. + + SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + `read` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param ptr a pointer to a buffer to read data into + \param size the size of each object to read, in bytes + \param maxnum the maximum number of objects to be read + \returns the number of objects read, or 0 at error or end of file; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Determine the current read/write offset in an SDL_RWops data stream. + + SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a SDL_RWops data stream object from which to get the current + offset + \returns the current offset in the stream, or -1 if the information can not + be determined. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWwrite + + + + Seek within an SDL_RWops data stream. + + This function seeks to byte `offset`, relative to `whence`. + + `whence` may be any of the following values: + + - `RW_SEEK_SET`: seek from the beginning of data + - `RW_SEEK_CUR`: seek relative to current read point + - `RW_SEEK_END`: seek relative to the end of data + + If this stream can not seek, it will return -1. + + SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + `seek` method appropriately, to simplify application development. + + Prior to SDL 2.0.10, this function was a macro. + + \param context a pointer to an SDL_RWops structure + \param offset an offset in bytes, relative to **whence** location; can be + negative + \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + \returns the final offset in the data stream after the seek or -1 on error. + + \since This function is available since SDL 2.0.10. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to get the size of the data stream in an SDL_RWops. + + Prior to SDL 2.0.10, this function was a macro. + + \param context the SDL_RWops to get the size of the data stream from + \returns the size of the data stream in the SDL_RWops on success, -1 if + unknown or a negative error code on failure; call SDL_GetError() + for more information. + + \since This function is available since SDL 2.0.10. + + + + Use this function to free an SDL_RWops structure allocated by + SDL_AllocRW(). + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + call the **close** method on those SDL_RWops pointers when you are done + with them. + + Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + invalid as soon as this function returns. Any extra memory allocated during + creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + be responsible for managing that memory in their **close** method. + + \param area the SDL_RWops structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocRW + + + + Use this function to allocate an empty, unpopulated SDL_RWops structure. + + Applications do not need to use this function unless they are providing + their own SDL_RWops implementation. If you just need a SDL_RWops to + read/write a common data source, you should use the built-in + implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + + You must free the returned pointer with SDL_FreeRW(). Depending on your + operating system and compiler, there may be a difference between the + malloc() and free() your program uses and the versions SDL calls + internally. Trying to mix the two can cause crashing such as segmentation + faults. Since all SDL_RWops must free themselves when their **close** + method is called, all SDL_RWops must be allocated through this function, so + they can all be freed correctly with SDL_FreeRW(). + + \returns a pointer to the allocated memory on success, or NULL on failure; + call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeRW + + + + Use this function to prepare a read-only memory buffer for use with RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size. It assumes the memory area is not writable. + + Attempting to write to this RWops stream will report an error without + writing to the memory buffer. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to write to a memory buffer, you should use SDL_RWFromMem() + with a writable buffer of memory instead. + + \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + + + + Use this function to prepare a read-write memory buffer for use with + SDL_RWops. + + This function sets up an SDL_RWops struct based on a memory area of a + certain size, for both read and write access. + + This memory buffer is not copied by the RWops; the pointer you provide must + remain valid until you close the stream. Closing the stream will not free + the original buffer. + + If you need to make sure the RWops never writes to the memory buffer, you + should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + + \param mem a pointer to a buffer to feed an SDL_RWops stream + \param size the buffer size, in bytes + \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + Use this function to create an SDL_RWops structure from a standard I/O file + pointer (stdio.h's `FILE*`). + + This function is not available on Windows, since files opened in an + application on that platform cannot be used by a dynamically linked + library. + + On some platforms, the first parameter is a `void*`, on others, it's a + `FILE*`, depending on what system headers are available to SDL. It is + always intended to be the `FILE*` type from the C runtime's stdio.h. + + \param fp the `FILE*` that feeds the SDL_RWops stream + \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + SDL_FALSE to leave the `FILE*` open when the RWops is + closed + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFile + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + + \name RWFrom functions + + Functions to create SDL_RWops structures from various data streams. + + Use this function to create a new SDL_RWops structure for reading from + and/or writing to a named file. + + The `mode` string is treated roughly the same as in a call to the C + library's fopen(), even if SDL doesn't happen to use fopen() behind the + scenes. + + Available `mode` strings: + + - "r": Open a file for reading. The file must exist. + - "w": Create an empty file for writing. If a file with the same name + already exists its content is erased and the file is treated as a new + empty file. + - "a": Append to a file. Writing operations append data at the end of the + file. The file is created if it does not exist. + - "r+": Open a file for update both reading and writing. The file must + exist. + - "w+": Create an empty file for both reading and writing. If a file with + the same name already exists its content is erased and the file is + treated as a new empty file. + - "a+": Open a file for reading and appending. All writing operations are + performed at the end of the file, protecting the previous content to be + overwritten. You can reposition (fseek, rewind) the internal pointer to + anywhere in the file for reading, but writing operations will move it + back to the end of file. The file is created if it does not exist. + + **NOTE**: In order to open a file as a binary file, a "b" character has to + be included in the `mode` string. This additional "b" character can either + be appended at the end of the string (thus making the following compound + modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + Additional characters may follow the sequence, although they should have no + effect. For example, "t" is sometimes appended to make explicit the file is + a text file. + + This function supports Unicode filenames, but they must be encoded in UTF-8 + format, regardless of the underlying operating system. + + As a fallback, SDL_RWFromFile() will transparently open a matching filename + in an Android app's `assets`. + + Closing the SDL_RWops will close the file handle SDL is holding internally. + + \param file a UTF-8 string representing the filename to open + \param mode an ASCII string representing the mode to be used for opening + the file. + \returns a pointer to the SDL_RWops structure that is created, or NULL on + failure; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_RWclose + \sa SDL_RWFromConstMem + \sa SDL_RWFromFP + \sa SDL_RWFromMem + \sa SDL_RWread + \sa SDL_RWseek + \sa SDL_RWtell + \sa SDL_RWwrite + + + +Return the size of the file in this rwops, or -1 if unknown + + + Seek to \c offset relative to \c whence, one of stdio's whence values: + RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + + \return the final offset in the data stream, or -1 on error. + + + Read up to \c maxnum objects each of size \c size from the data + stream to the area pointed at by \c ptr. + + \return the number of objects read, or 0 at error or end of file. + + + Write exactly \c num objects each of size \c size from the area + pointed at by \c ptr to data stream. + + \return the number of objects written, or 0 at error or end of file. + + + Close and free an allocated SDL_RWops structure. + + \return 0 if successful or -1 on write error when flushing data. + + + + Clear any previous error message for this thread. + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetError + \sa SDL_SetError + + + + Get the last error message that was set for the current thread. + + This allows the caller to copy the error string into a provided buffer, but + otherwise operates exactly the same as SDL_GetError(). + + \param errstr A buffer to fill with the last error message that was set for + the current thread + \param maxlen The size of the buffer pointed to by the errstr parameter + \returns the pointer passed in as the `errstr` parameter. + + \since This function is available since SDL 2.0.14. + + \sa SDL_GetError + + + + Retrieve a message about the last error that occurred on the current + thread. + + It is possible for multiple errors to occur before calling SDL_GetError(). + Only the last error is returned. + + The message is only applicable when an SDL function has signaled an error. + You must check the return values of SDL function calls to determine when to + appropriately call SDL_GetError(). You should *not* use the results of + SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + an error string even when reporting success. + + SDL will *not* clear the error string for successful API calls. You *must* + check return values for failure cases before you can assume the error + string applies. + + Error strings are set per-thread, so an error set in a different thread + will not interfere with the current thread's operation. + + The returned string is internally allocated and must not be freed by the + application. + + \returns a message with information about the specific error that occurred, + or an empty string if there hasn't been an error message set since + the last call to SDL_ClearError(). The message is only applicable + when an SDL function has signaled an error. You must check the + return values of SDL function calls to determine when to + appropriately call SDL_GetError(). + + \since This function is available since SDL 2.0.0. + + \sa SDL_ClearError + \sa SDL_SetError + + + + Calculate a 256 entry gamma ramp for a gamma value. + + \param gamma a gamma value where 0.0 is black and 1.0 is identity + \param ramp an array of 256 values filled in with the gamma ramp + + \since This function is available since SDL 2.0.0. + + \sa SDL_SetWindowGammaRamp + + + + Get RGBA values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + If the surface has no alpha component, the alpha will be returned as 0xff + (100% opaque). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + \param a a pointer filled in with the alpha component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Get RGB values from a pixel in the specified format. + + This function uses the entire 8-bit [0..255] range when converting color + components from pixel formats with less than 8-bits per RGB component + (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + + \param pixel a pixel value + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r a pointer filled in with the red component + \param g a pointer filled in with the green component + \param b a pointer filled in with the blue component + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGBA + \sa SDL_MapRGB + \sa SDL_MapRGBA + + + + Map an RGBA quadruple to a pixel value for a given pixel format. + + This function maps the RGBA color value to the specified pixel format and + returns the pixel value best approximating the given RGBA color value for + the given pixel format. + + If the specified pixel format has no alpha component the alpha value will + be ignored (as it will be in formats with a palette). + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the format of the + pixel + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \param a the alpha component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGB + + + + Map an RGB triple to an opaque pixel value for a given pixel format. + + This function maps the RGB color value to the specified pixel format and + returns the pixel value best approximating the given RGB color value for + the given pixel format. + + If the format has a palette (8-bit) the index of the closest matching color + in the palette will be returned. + + If the specified pixel format has an alpha component it will be returned as + all 1 bits (fully opaque). + + If the pixel format bpp (color depth) is less than 32-bpp then the unused + upper bits of the return value can safely be ignored (e.g., with a 16-bpp + format the return value can be assigned to a Uint16, and similarly a Uint8 + for an 8-bpp format). + + \param format an SDL_PixelFormat structure describing the pixel format + \param r the red component of the pixel in the range 0-255 + \param g the green component of the pixel in the range 0-255 + \param b the blue component of the pixel in the range 0-255 + \returns a pixel value + + \since This function is available since SDL 2.0.0. + + \sa SDL_GetRGB + \sa SDL_GetRGBA + \sa SDL_MapRGBA + + + + Free a palette created with SDL_AllocPalette(). + + \param palette the SDL_Palette structure to be freed + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + + + + Set a range of colors in a palette. + + \param palette the SDL_Palette structure to modify + \param colors an array of SDL_Color structures to copy into the palette + \param firstcolor the index of the first palette entry to modify + \param ncolors the number of entries to modify + \returns 0 on success or a negative error code if not all of the colors + could be set; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_CreateRGBSurface + + + + Set the palette for a pixel format structure. + + \param format the SDL_PixelFormat structure that will use the palette + \param palette the SDL_Palette structure that will be used + \returns 0 on success or a negative error code on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocPalette + \sa SDL_FreePalette + + + + Create a palette structure with the specified number of color entries. + + The palette entries are initialized to white. + + \param ncolors represents the number of color entries in the color palette + \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + there wasn't enough memory); call SDL_GetError() for more + information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreePalette + + + + Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + + \param format the SDL_PixelFormat structure to free + + \since This function is available since SDL 2.0.0. + + \sa SDL_AllocFormat + + + + Create an SDL_PixelFormat structure corresponding to a pixel format. + + Returned structure may come from a shared global cache (i.e. not newly + allocated), and hence should not be modified, especially the palette. Weird + errors such as `Blit combination not supported` may occur. + + \param pixel_format one of the SDL_PixelFormatEnum values + \returns the new SDL_PixelFormat structure or NULL on failure; call + SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_FreeFormat + + + + Convert a bpp value and RGBA masks to an enumerated pixel format. + + This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + possible. + + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask the red mask for the format + \param Gmask the green mask for the format + \param Bmask the blue mask for the format + \param Amask the alpha mask for the format + \returns one of the SDL_PixelFormatEnum values + + \since This function is available since SDL 2.0.0. + + \sa SDL_PixelFormatEnumToMasks + + + + Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + + \param format one of the SDL_PixelFormatEnum values + \param bpp a bits per pixel value; usually 15, 16, or 32 + \param Rmask a pointer filled in with the red mask for the format + \param Gmask a pointer filled in with the green mask for the format + \param Bmask a pointer filled in with the blue mask for the format + \param Amask a pointer filled in with the alpha mask for the format + \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + possible; call SDL_GetError() for more information. + + \since This function is available since SDL 2.0.0. + + \sa SDL_MasksToPixelFormatEnum + + + + Get the human readable name of a pixel format. + + \param format the pixel format to query + \returns the human readable name of the specified pixel format or + `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + + \since This function is available since SDL 2.0.0. + + + +\note Everything in the pixel format structure is read-only. + + + +The bits of this structure can be directly reinterpreted as an integer-packed +color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 +on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + + + + If a + b would overflow, return -1. Otherwise store a + b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + If a * b would overflow, return -1. Otherwise store a * b via ret + and return 0. + + \since This function is available since SDL 2.24.0. + + + + This function converts a string between encodings in one pass, returning a + string that must be freed with SDL_free() or NULL on error. + + \since This function is available since SDL 2.0.0. + + + + Get the number of outstanding (unfreed) allocations + + \since This function is available since SDL 2.0.7. + + + + Replace SDL's memory allocation functions with a custom set + + \since This function is available since SDL 2.0.7. + + + + Get the current set of SDL memory functions + + \since This function is available since SDL 2.0.7. + + + + Get the original set of SDL memory functions + + \since This function is available since SDL 2.24.0. + + + +\endcond + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + + +\name Floating-point constants + +\cond + + +\brief An unsigned 64-bit integer type. + + + +\brief A signed 64-bit integer type. + + + +\brief An unsigned 32-bit integer type. + + + +\brief A signed 32-bit integer type. + + + +\brief An unsigned 16-bit integer type. + + + +\brief A signed 16-bit integer type. + + + +\brief An unsigned 8-bit integer type. + + + +\brief A signed 8-bit integer type. + + + + \file close_code.h + + This file reverses the effects of begin_code.h and should be included + after you finish any function and structure declarations in your headers + + + + \file SDL_stdinc.h + + This is a general header that includes C language support. + + \file SDL_platform.h + + Try to get a standard set of platform defines. + + \file begin_code.h + + This file sets things up for C dynamic library function definitions, + static inlined functions, and structures aligned at 4-byte alignment. + If you don't like ugly C preprocessor code, don't look at this file. :) + + Get the name of the platform. + + Here are the names returned for some (but not all) supported platforms: + + - "Windows" + - "Mac OS X" + - "Linux" + - "iOS" + - "Android" + + \returns the name of the platform. If the correct platform name is not + available, returns a string beginning with the text "Unknown". + + \since This function is available since SDL 2.0.0. + + + +*!************************************************************************* + + + +Marks the application to stop at the end of the current frame. + + + + +Whether or not the application is currently in fullscreen mode or not. + + + + +Retrieves the designated height of the current window. + + + + +Retrieves the designated width of the current window. + + + + +Whether or not the engine is in a paused state where script updates and +physics are not in play. + + + + +Whether or not the engine is playing. This will always be true on Publish. +On Debug/Release builds, this is true when the editor is in Play Mode. It +will also be true even if the editor is in Play Mode but is paused. + + + + +Static class that contains useful properties for querying the state of the +engine. + + + + +Sets the parent of this Transform component. + + +Entity that contains the Transform component that this Transform will be +parented to. If null, unparenting will occur. + + +If true, the transform values of this Transform component will retain their +pre-parent-change global transforms. The local transform values will be +modified to ensure that the global transforms do not change. + + + + +Parent Transform that affects this Transform. + + + + +Global scale stored by this Transform. + + + + +Global euler angle rotations stored by this Transform. + + + + +Global rotation quaternion stored by this Transform. + + + + +Global position stored by this Transform. + + + + +Local scale stored by this Transform. + + + + +Local euler angle rotations stored by this Transform. + + + + +Local rotation quaternion stored by this Transform. + + + + +Local position stored by this Transform. + + + + +Constructs a Transform Component that represents a native Transform component +tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's TransformComponent. + + + + +Compares if two float values are close enough to be the same with the +specified tolerance value. + + One of the values to compare. + The other value to compare. + Tolerance for floating point comparison. + True if a and b are practically the same. + + + +Compares if two float values are close enough to be the same with a tolerance +of Epsilon. + + One of the values to compare. + The other value to compare. + True if a and b are practically the same. + + + +Calculates the linear parameter t that produces the interpolant value within +the range [a, b]. + + Start value. + End value. + Value between start and end. + Percentage of value between start and end. + + + +Linearly interpolates between a and b by t. +The parameter t is not clamped and a value based on a and b is supported. +If t is less than zero, or greater than one, then LerpUnclamped will result +in a return value outside the range a to b. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Linearly interpolates between a and b by t. +The parameter t is clamped to the range [0, 1]. + + The start value. + The end value. + The interpolation value between the two float. + The interpolated float result between the two float values. + + + +Converts an angle from radian representation to degree representation. + + Radian-based angle to convert. + The specified angle in degrees. + + + +Converts an angle from degree representation to radian representation. + + Degree-based angle to convert. + The specified angle in radians. + + + +Wraps a value if they get to low or too high. + + Value to wrap. + Minimum value to wrap at. + Maximum value to wrap at. + Wrapped value. + + + +Small value used for single precision floating point comparisons. + + + + +Radians-to-degrees conversion constant + + + + +Degrees-to-radians conversion constant + + + + +Contains utility Math functions. + + + + +Logs a native exception that is formatted nicely to the output. + + Native exception to log. + Name of the one responsible for the exception. + + + +Logs an exception that is formatted nicely to the output. + + Name of the one responsible for the exception. + Exception to log. + + + +Logs a native exception that is formatted nicely to the output. +Equivalent to calling +LogException(exception, Convert::ToNative(thrower->GetType()->Name)); + + Native exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + +Object that threw the exception to label the exception message. +The name of the object will be used. + + + + +Logs an exception that is formatted nicely to the output. + + Exception to log. + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the error to label the error message. +The name of the object will be used. + + + + +Logs a error message to the output. + + The string to output. + + + +Logs a error message to the output. + + The string to output. + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that threw the warning to label the warning message. +The name of the object will be used. + + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a warning message to the output. + + The string to output. + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Name of the object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output with a label such that it looks like this: +"[Label] Message" + + The string to output. + +Object that sent the message to label the message. +The name of the object will be used. + + + + +Logs a message to the output. + + The string to output. + + + +Logs a message to the output. + + The string to output. + + + +Static class that contains the functions for working with time. + + + + +Material used to render this Renderable. + + + + +Material used to render this Renderable. + + + + +Mesh used to render this Renderable. + + + + +Constructs a Renderable Component that represents a native Renderable +component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the SHADE Engine's SHRenderableComponent. + + + + +Retrieves the value of a specified property on the material. + + Type of property to get. + Name of the property to get. + Value of that property on the material. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Set the value of a specific property. + + Type of property to set. + Name of the property to set. + Value to set te property to. + +If this Material object is invalid. + + +If the name or type was specified that does not match the material's shader's +defined properties. + + + + +Constructor for the Material + + Handle to the native material object. + + + +Managed counterpart of the native MaterialInstance object containing material +data that can be fed to Renderables for rendering. + + + + +Constructor for the Mesh + + Handle to the mesh object. + + + +Managed counterpart of the native Mesh object containing vertex data that can +be fed to Renderables for rendering. + + + +@brief Decomposes a transformation matrix into translation, orientation and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] orientation The orientation of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Decomposes a transformation matrix into translation, euler angles and scale. +@param[out] scale The scaling factor of the matrix. +@param[out] rotation The euler angles of the matrix. +@param[out] translation The translation of the matrix. +@return True if decomposition was successful. + + + +@brief Interface for a Column-Major Row Vector 4x4 Matrix. + + + + +Constructs a RigidBody Component that represents a native +SHRigidBodyComponent component tied to the specified Entity. + + Entity that this Component will be tied to. + + + +CLR version of the the SHADE Engine's SHRigidBodyComponent. + + + + +Creates an instance of the Managed representation of a Component with a +native Entity. + + Type of Component to create. + Native Entity that this Component is tied to. + The created Managed representation of the Component. + + + +Static constructor to initialize static data + + + + +Pointer to a function for Component manipulation operations. + + +Contains a set of Component related data used for resolving operations for +each Component. + + + + +Removes a Component from the specified Entity. + + Type of the Component to remove. + +Entity object that should have the specified Component removed from/ + + + + +Checks if the specified Entity has the specified Component. + + Type of the Component to check for. + Entity object to check for the Component. + +True if the specified Entity has the specified Component. False otherwise. + + + + +Ensures a Component on the specified Entity. + + Type of the Component to ensure. + Entity object to ensure the Component on. + Reference to the Component. + + + +Retrieves the first Component from the specified GameObjectt's children that +matches the specified type. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Gets a Component from the specified Entity. + + Type of the Component to get. + Entity object to get the Component from. + +Reference to the Component or null if the Entity does not have the +specified Component. + + + + +Adds a Component to the specified Entity. + + Type of the Component to add. + +Entity object that should have the specified Component added to. + + Reference to the Component that was added. + + + +Static class which contains functions that map Pls::ECS's Component manipulation +functions to managed generic functions. + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Entity that this Component belongs to. + + + + +Constructor for BaseComponent to tie it to a specific Entity. +Constructors of derived Components should call this Constructor. + + Entity that this Component will be tied to. + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to Get. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to add. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Retrieves the GameObject that this Component belongs to. + + + + +Class that serves as the base for a wrapper class to Components in native code. + + + + +Called when the attached GameObject has a Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and leaves a +collision with another GameObject with a Collider2D. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in subsequent frames of collision. + + Information on the collision event. + + + +Called when the attached GameObject has a trigger Collider and collides with +another GameObject with a Collider in the first frame of collision. + + Information on the collision event. + + + +Called just before the end of the frame where the attached GameObject or +this script is destroyed directly or indirectly due to destruction of the +owner. + + + + +Called every frame after physics and collision resolution but before +rendering. + + + + +Called every frame before physics and collision resolution. + + + + +Called every frame in sync with Physics update steps and thus in most cases +will execute more than update() will. This will be called immediately before +a Physics update step. + + + + +Called on the first frame that the attached GameObject is active but always +after Awake(). + + + + +Called on the first frame that the attached GameObject is active if they are +a part of the scene. + + + + +Called immediately once this script is detached from a GameObject. + + + + +Called immediately once this script is attached to a GameObject. + + + + +Constructor for Script to tie it to a specific GameObject. +Constructors of derived Scripts should call this Constructor. + + +GameObject that this Script will be tied to. + + + + +Used to call onTriggerExit(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerStay(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onTriggerEnter(). This should be called when a trigger-type +collision is detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionExit(). This should be called when a collision ends +between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionStay(). This should be called when a collision is +persistent between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onCollisionEnter(). This should be called when a collision is +detected between the attached GameObject and another GameObject. + + Information on the collision event. + + + +Used to call onDestroy(). This should be called at the end of the frame +where the attached GameObject or this script is destroyed directly or +indirectly due to destruction of the owner. + + + + +Used to call lateUpdate(). This should be called every frame after physics +and collision resolution but before rendering. + + + + +Used to call update(). This should be called every frame before physics and +collision resolution. + + + + +Used to call fixedUpdate(). This should be called in sync with Physics +update steps and thus in most cases will execute more than Update() will. +This will be called immediately before a Physics update step. + + + + +Used to call start(). This should be called on the first frame that the +attached GameObject is active but always after Awake(). + + + + +Used to call awake(). This should be called on the first frame that the +attached GameObject is active if they are a part of the scene. + + + + +Used to call onDetached(). This is called immediately when this script is +detached from a GameObject. + + + + +Used to call onAttached(). This is called immediately when this script is +attached to a GameObject. + + + + +Implicit conversion operator to enable checking if a component is null. + + Component to check. + + + +Removes all Scripts of the specified type from this GameObject. + + +Type of script to remove. +This needs to be a default constructable Script. + + + + +Retrieves a immutable list of scripts from the specified Entity that +matches the specified type. +
    +Note that this function allocates. It should be used sparingly. +
    + +Type of scripts to get. +This needs to be a default constructable Script. + + +Immutable list of references to scripts of the specified type. + +
    + + +Retrieves the first Script from this GameObject's children that matches the +specified type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Retrieves the first Script from this GameObject that matches the specified +type. + + +Type of script to get. +This needs to be a default constructable Script. + + Reference to the script added + + + +Adds a Script to this GameObject. + + +Type of script to add. +This needs to be a default constructable Script. + + Reference to the script added + + + +Removes a Component from the GameObject that this Script belongs to. + + +Type of the Component to remove. Must be derived from BaseComponent. + + + + +Ensures a Component on the GameObject that this Script belongs to. + + +Type of the Component to ensure. Must be derived from BaseComponent. + + Reference to the Component. + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Gets a Component from the GameObject that this Script belongs to. + + +Type of the Component to get. Must be derived from BaseComponent. + + Reference to the Component that was retrieved. + + + +Adds a Component to the GameObject that this Script belongs to. + + +Type of the Component to add. Must be derived from BaseComponent. + + Reference to the Component that was added. + + + +GameObject that this Script belongs to. + + + + +Class that forms the basis of all "script"-objects that can be attached to +Entities to update each Entity's Components via C# code. + + + + +The RigidBody that you are colliding with. + + + + +The CollisionShape of the Collider that you are colliding with. + + + + +The Collider that you are colliding with. + + + + +The GameObject whose collider you are colliding with. + + + + +Struct that describes a collision + + + + +Checks if two GameObject references are different. + + GameObject to check. + Another GameObject to check with. + True if both Components are different. + + + +Checks if two GameObject references are the same. + + GameObject to check. + Another GameObject to check with. + True if both Components are the same. + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Retrieves the native Entity object that this GameObject represents. + + Native Entity object that this GameObject represents. + + + +Retrieves the CLR Entity object that this GameObject represents. + + Entity object that this GameObject represents. + + + +Constructor for the GameObject. + + +Managed numerical representation of the ECS Entity that this GameObject +should represent. + + + + +Constructor for the GameObject. + + +The ECS Entity that this GameObject should represent. + + + + +Removes all Scripts of the specified type from this GameObject. + + Type of PLushieScripts to remove. + + + +Retrieves a immutable list of Scripts of the specified type from this +GameObject. + + Type of Scripts to retrieve. + Immutable list of Scripts of the specified type. + + + +Retrieves a Script of the specified type from child GameObjects. +If multiple Scripts of the same specified type are added on the same +child GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Retrieves a Script of the specified type from this GameObject. +If multiple Scripts of the same specified type are added on the same +GameObject, this will retrieve the first one added. + + Type of Script to retrieve. + Reference to the Script to retrieve. + + + +Adds a Script of the specified type to this GameObject. + + Type of Script to add. + Reference to the created Script. + + + +Removes a Component from this GameObject. If no Component exists to begin +with, nothing happens. + + Type of the Component to get. + + + +Ensures a Component on this GameObject. + + Type of the Component to ensure. + +Reference to the Component. + + + + +Retrieves the first Component from this GameObject's children that matches +the specified type. + + Type of the Component to get. + +Reference to the Component or null if neither of this GameObject's children +does not have the specified Component. + + + + +Gets a Component from this GameObject. + + Type of the Component to get. + +Reference to the Component or null if this GameObject does not have the +specified Component. + + + + +Adds a Component to this GameObject. + + Type of the Component to add. + Reference to the Component that was added. + + + +Sets the active state of this GameObject. +
    +The actual "activeness" of this GameObject is still dependent on the parents' +active states. +
    + +Whether to activate or deactivate this GameObject. + +
    + + +Sets the name of this GameObject. + + The name to set. + + + +Native Entity ID value for this GameObject. + + + + +Whether or not this Entity is active in the Scene hierarchy. + + + + +Whether or not this Entity alone, is active. This does not mean that this +object is active in the scene. For example, if this Entity's parent is not +active, then this Entity would also be not active. + + + + +Name of the object that this Entity represents. + + + + +Retrieves a GameObject with the specified name. If there are multiple +GameObjects with the same name, the first found GameObject will be retrieved. +There is no guaranteed order of which GameObject is considered "first". + + Name of the GameObject to find. + GameObject that has the specified name. Null if not found. + + + +Destroys the specified GameObject. Note that the specified GameObject will no +longer be a valid GameObject after this function is called. + + The GameObject to be destroyed. + + + +Creates a new GameObject in the current Scene. If multiple Scenes are loaded, +and you would like to create an object in a specific Scene, call the Scene's +CreateGameObject(). + + GameObject that represents the newly created GameObject. + + + +Lightweight object for an PlushieEngine Entity that allows for easy access +to Component and Script operations. + + + + +Constructor for a Tooltip attribute that fills in the description. + + Text to be shown when a field is hovered. + + + +Maximum value for the Ranged field. + + + + +Minimum value for the Ranged field. + + + + +Simple attribute to constrain the range of values for a field on the editor. + + + + +Converts from a native std::Stringto a managed String. + + The native std::string to convert from. + Managed copy of a native std::string. + + + +Converts from a managed String to a native std::string. + + The managed String to convert from. + Native copy of a managed String. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a native Quaternion to a managed Quaternion. + + The native Quaternion to convert from. + Managed copy of a native Quaternion. + + + +Converts from a managed Quaternion to a native Quaternion. + + The managed Quaternion to convert from. + Native copy of a managed Quaternion. + + + +Converts from a native Vector2 to a managed Vector2. + + The native Vector2 to convert from. + Managed copy of a native Vector2. + + + +Converts from a managed Vector2 to a native Vector2. + + The managed Vector2 to convert from. + Native copy of a managed Vector2. + + + +Converts from a native Vector3 to a managed Vector3. + + The native Vector3 to convert from. + Managed copy of a native Vector3. + + + +Converts from a managed Vector3 to a native Vector3. + + The managed Vector3 to convert from. + Native copy of a managed Vector3. + + + +Converts from a native Entity to a managed Entity (UInt32). + + Native Entity to convert from. + Managed representation of the specified Entity. + + + +Provides functions easy and consistent syntax for converting between custom +managed and native types that are aligned. + + + + +Converts to true if this is a valid Handle. + + + + +The library that the handle was issued by. + + + + +The internal ID of the handle. + + + + +Creates a ray starting at origin along direction. + + Source of the ray. + Direction the ray travels in. + + + +The direction that a ray travels in. + + + + +The start point of the ray. + + + + +CLR version of the the SHADE Engine's Ray class that represents a ray in +3-Dimensional space. + + + + +Are two quaternions equal to each other? + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Combines rotations lhs and rhs. + + Left-hand side quaternion. + Right-hand side quaternion. + + + +Spherically interpolates between a and b by t. The parameter t is not clamped. + + + + +Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion spherically interpolated between quaternions a and b. + + + +Rotates a rotation from towards to.
    +The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). +Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. +
    +
    + + +Converts this quaternion to one with the same orientation but with a magnitude of 1. + + + + +Creates a rotation with the specified forward and upwards directions.
    +Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. +
    +
    + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. + + + + +Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. + + Start value, returned when t = 0. + End value, returned when t = 1. + Interpolation ratio. + A quaternion interpolated between quaternions a and b. + + + +Returns the Inverse of rotation. + + + + +Creates a rotation which rotates from fromDirection to toDirection. + + + + +Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. + + + + +The dot product between two rotations. + + + + +Creates a rotation which rotates angle degrees around axis. + + + + +Returns the angle in degrees between two rotations a and b.
    + The angle in degrees between the two vectors. +
    + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Converts a rotation to angle-axis representation (angles in degrees). + + + + +Creates a rotation with the specified forward and upwards directions.
    +The result is applied to this quaternion. +If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. +Logs an error if the forward direction is zero. +
    + The direction to look in. + The vector that defines in which direction up is. +
    + + +Creates a rotation which rotates from fromDirection to toDirection.
    +Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). +These Vectors must be set up in a script. +
    +
    + + +Constructor to construct a Quaternion with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + W-coordinate to set. + + + +W-component of the Quaternion. Do not directly modify quaternions. + + + + +Z-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Y-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +X-component of the Quaternion. +Don't modify this directly unless you know quaternions inside out. + + + + +Shorthand for writing Quaternion(0, 0, 0, 1). + + + + +CLR version of SHADE's Quaternion class that represents an orientation. +Designed to closely match Unity's Quaternion struct. + + + + +Explicit conversion operator to enable explicit casting from a Vector2 to a +Vector3. + + Vector2 to convert from. + + + +Explicit conversion operator to enable explicit casting from a Vector3 to a +Vector2. + + Vector3 to convert from. + + + +Checks if two Vector3s are not approximately equal. This is equivalent to +calling !Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector3s are approximately equal. This is equivalent to +calling Vector3.IsNear() with default tolerance values. + + Vector3 to compare. + Another Vector3 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector3 with a scalar value and returns +the result. + + Scalar to divide with. + Vector3 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector3 with a scalar value and returns +the result. + + Vector3 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector3s and returns the +result. + + Vector3 to multiply with. + Another Vector3 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector3 from another Vector3 and returns the result. + + Vector3 to subtract from. + Another Vector3 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector3s together and returns the result. + + Vector3 to add. + Another Vector3 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector3. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector3, returned when t = 0.0f. + The end Vector3, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector3. + + + +Computes and returns a Vector3 that is made from the largest components of +the two specified Vector3s. + + Vector3 to calculate maximum Vector3 with. + Another Vector3 to calculate maximum Vector3 with. + +The Vector3 that contains the largest components of the two specified +Vector3s. + + + + +Computes and returns a Vector3 that is made from the smallest components of +the two specified Vector3s. + + Vector3 to calculate minimum Vector3 with. + Another Vector3 to calculate minimum Vector3 with. + +The Vector3 that contains the smallest components of the two specified +Vector3s. + + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector3 that represents the rotated vector. + + + +Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector3 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector3 that represents the rotated vector. + + + +Reflects a Vector3 across another Vector3. + + A Vector3 to reflect. + A normal to reflect the Vector3 across. + The Vector3 that represents vec reflected across normal. + + + +Computes and returns a Vector3 projection. + + Vector3 to project. + Vector3 to project onto. + The Vector3 that represents the projected vec onto direction. + + + +Computes and returns the cross product of 2 specified Vector3s. + + Vector3 to calculate cross product with. + Another Vector3 to calculate cross product with. + The cross product of the two Vector3s. + + + +Computes and returns the dot product of 2 specified Vector3s. + + Vector3 to calculate dot product with. + Another Vector3 to calculate dot product with. + Scalar value representing the dot product of the two Vector3s. + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + Amount of tolerance to do the comparison with. + +True if the two Vector3s are within the tolerance value specified + + + + +Checks if two specified Vector3s are near in value. + + Vector3 to check if is near in value. + Another Vector3 to check if is near in value. + +True if the two Vector3s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector3 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector3 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector3 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector3. + + Returns the squared length of this Vector3. + + + +Calculates and returns the magnitude of this Vector3. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector3. + + + +Creates a copy of this Vector3 and returns a normalized version. + + +Returns a normalised copy of this Vector3. +If this Vector3 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector3. This changes the data of this Vector3. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Conversion constructor to construct a Vector3 using a Vector2. + + + + + +Constructor to construct a Vector3 with the specified components. + + X-coordinate to set. + Y-coordinate to set. + Z-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Z-component set to 0.0f. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector3 with the specified components with the +Y and Z-component set to 0.0f. + + X-coordinate to set. + + + +Z-component of the Vector3. + + + + +Y-component of the Vector3. + + + + +X-component of the Vector3. + + + + +Shorthand for writing Vector3(0, 0, 0). + + + + +Shorthand for writing Vector3(0, 1, 0). + + + + +Shorthand for writing Vector3(1, 0, 0). + + + + +Shorthand for writing Vector3(float.PositiveInfinity, +float.PositiveInfinity, float.PositiveInfinity). + + + + +Shorthand for writing Vector3(1, 1, 1). + + + + +Shorthand for writing Vector3(float.NegativeInfinity, +float.NegativeInfinity, float.NegativeInfinity). + + + + +Shorthand for writing Vector3(-1, 0, 0). + + + + +Shorthand for writing Vector3(0, 0, 1). + + + + +Shorthand for writing Vector3(0, -1, 0). + + + + +Shorthand for writing Vector3(0, 0, -1). + + + + +CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. +Designed to closely match Unity's Vector3 struct. + + + + +Checks if two Vector2s are not approximately equal. This is equivalent to +calling !Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are not approximately equal within the default +tolerance value. + + + + +Checks if two Vector2s are approximately equal. This is equivalent to +calling Vector2.IsNear() with default tolerance values. + + Vector2 to compare. + Another Vector2 to compare. + +True if all components are approximately equal within the default +tolerance value. + + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the division of a Vector2 with a scalar value and returns +the result. + + Scalar to divide with. + Vector2 to divide with. + The result of the scalar division. + + + +Calculates the multiplication of a Vector2 with a scalar value and returns +the result. + + Vector2 to multiply with. + Scalar to multiply with. + The result of the scalar multiplication. + + + +Calculates the component-wise multiplication of two Vector2s and returns the +result. + + Vector2 to multiply with. + Another Vector2 to multiply with. + The result of rhs subtracted from lhs. + + + +Subtracts a Vector2 from another Vector2 and returns the result. + + Vector2 to subtract from. + Another Vector2 to subtract. + The result of rhs subtracted from lhs. + + + +Adds two Vector2s together and returns the result. + + Vector2 to add. + Another Vector2 to add. + The result of lhs added to rhs + + + +Moves a point current towards target. +Similar to Lerp(), however, the function will ensure that the distance never +exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the +vector away from target + + The current position of the point. + The target position to move to. + Maximum distance moved per call. + Vector representing the moved point. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. +Unlike Lerp(), t is not clamped to a range at all. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + Value used to interpolate between a and b. + The interpolated Vector2. + + + +Linearly interpolates between two specified points. +This is most commonly used to find a point some fraction of the way along a +line between two endpoints. + + The start Vector2, returned when t = 0.0f. + The end Vector2, returned when t = 1.0f. + +Value used to interpolate between a and b which is clamped to +the range[0, 1]. + + The interpolated Vector2. + + + +Computes and returns a Vector2 that is made from the largest components of +the two specified Vector2s. + + Vector2 to calculate maximum Vector2 with. + Another Vector2 to calculate maximum Vector2 with. + +The Vector2 that contains the largest components of the two specified +Vector2s. + + + + +Computes and returns a Vector2 that is made from the smallest components of +the two specified Vector2s. + + Vector2 to calculate minimum Vector2 with. + Another Vector2 to calculate minimum Vector2 with. + +The Vector2 that contains the smallest components of the two specified +Vector2s. + + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in degrees. + + The Vector2 that represents the rotated vector. + + + +Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise +direction. + + A Vector2 to rotate. + +Angle to rotate the vector by in an anti-clockwise direction in radians. + + The Vector2 that represents the rotated vector. + + + +Reflects a Vector2 across another Vector2. + + A Vector2 to reflect. + A normal to reflect the Vector2 across. + The Vector2 that represents vec reflected across normal. + + + +Computes and returns a Vector2 projection. + + Vector2 to project. + Vector2 to project onto. + The Vector2 that represents the projected vec onto direction. + + + +Computes a perpendicular Vector2 to the specified Vector2. + + Vector2 to find a perpendicular of. + +Whether the inward perpendicular Vector is retrieved. If true, the +resultant vector is rotated 90-degrees in a counter-clockwise. + + The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes the inward perpendicular Vector2 to the specified Vector2. +Equivalent to calling Perpendicular(lhs, true). This means, the +resultant Vector2 is rotated 90-degrees in a counter-clockwise. + + Vector2 to find a perpendicular of. + +The perpendicular Vector2 relative to the specified Vector2. + + + + +Computes and returns the dot product of 2 specified Vector2s. + + Vector2 to calculate dot product with. + Another Vector2 to calculate dot product with. + +Scalar value representing the dot product of the two Vector2s. + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +Amount of tolerance to do the comparison with. + + +True if the two Vector2s are within the tolerance value specified + + + + +Checks if two specified Vector2s are near in value. + + Vector2 to check if is near in value. + Another Vector2 to check if is near in value. + +True if the two Vector2s are within the tolerance value specified + + + + +Gets a unique hash for this object. + + Unique hash for this object. + + + +Compares equality with another unboxed object. + + The unboxed object to compare with. + True if both objects are the same. + + + +Compares equality with an object of the same type. + + The object to compare with. + True if both objects are the same. + + + +Checks if a specified point is near this Vector2 that represents a point. + + The other point to check if we are near. + +The amount of tolerance before we consider these points as "near". + + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Checks if a specified point is near this Vector2 that represents a point with +a tolerance value of PLS_EPSILON. + + The other point to check if we are near. + +True if this Vector2 representing a point and the specified point are within +the range of the specified tolerance. False otherwise. + + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -180.0f and 180.0f. + + Returns the angle of this vector from the right vector in degrees. + + + +Calculates and returns the angle of this vector from the right vector. This +function returns values between -Math.PI and Math.PI. + + Returns the angle of this vector from the right vector in radians. + + + +Calculates and returns the squared magnitude of this Vector2. + + Returns the squared length of this Vector2. + + + +Calculates and returns the magnitude of this Vector2. Note that this function +incurs a performance cost from the square root calculation. If you do not +need the precise magnitude, consider using GetSqrMagnitude() instead. + + Returns the length of this Vector2. + + + +Creates a copy of this Vector2 and returns a normalized version. + + +Returns a normalised copy of this Vector2. +If this Vector2 is a zero vector, a zero vector will be returned. + + + + +Normalises this current Vector2. This changes the data of this Vector2. +If you would like to get a copy, use GetNormalised() instead. +This function does nothing to a zero vector. + + + + +Constructor to construct a Vector2 with the specified components.. + + X-coordinate to set. + Y-coordinate to set. + + + +Constructor to construct a Vector2 with the specified components with the +Y-component set to 0.0f. + + X-coordinate to set. + + + +Y-component of the Vector2. + + + + +X-component of the Vector2. + + + + +Shorthand for writing Vector2(0, 0). + + + + +Shorthand for writing Vector2(0, 1). + + + + +Shorthand for writing Vector2(1, 0). + + + + +Shorthand for writing Vector2(float.PositiveInfinity, +float.PositiveInfinity). + + + + +Shorthand for writing Vector2(1, 1). + + + + +Shorthand for writing Vector2(float.NegativeInfinity, +float.NegativeInfinity). + + + + +Shorthand for writing Vector2(-1, 0). + + + + +Shorthand for writing Vector2(0, -1). + + + + +CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. +Designed to closely match Unity's Vector2 struct. + + + + +Checks if the specified entity is valid. This is done by checking if it +matches Pls::Entity::INVALID. + + The Entity to check. + True if the specified Entity is valid. + + + +Static class that contains useful utility functions for working with Entity. + + + + +Manages all resources in multiple ResourceLibraries. + + + + +Base class for SHResourceLibrary that holds information about the library type. + + + + +Template Specialization for Handle that represents a type-less Handle. + + + + +Converts to true if this is a valid Handle. + + + + +Native ID type of a handle + + + + +Base implementation of the Handle that is not templated to allow for holding +generic non-type-specific Handles. + + + + +Exception thrown when a generic Handle is being casted to the wrong type. + + + + +Exception thrown when an invalid Handle was dereferenced. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    \ No newline at end of file From 976c2201459b5815dfbf61d73d03c54ff8d3af6f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 17:19:18 +0800 Subject: [PATCH 650/793] Deserialization of SHMaterialSpec will return an empty SHMaterialSpec on failure now instead --- .../Serialization/SHSerializationHelper.hpp | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index f2c4572a..8f1b972c 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -267,22 +267,18 @@ namespace YAML static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) { // Retrieve Shader Asset IDs - if (!node[VERT_SHADER_YAML_TAG.data()]) - return false; - rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); - if (!node[FRAG_SHADER_YAML_TAG.data()]) - return false; - rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); + if (node[VERT_SHADER_YAML_TAG.data()]) + rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); + if (node[FRAG_SHADER_YAML_TAG.data()]) + rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); // Retrieve Subpass - if (!node[SUBPASS_YAML_TAG.data()]) - return false; - rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); + if (node[SUBPASS_YAML_TAG.data()]) + rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); // Retrieve - if (!node[PROPS_YAML_TAG.data()]) - return false; - rhs.properties = node[PROPS_YAML_TAG.data()]; + if (node[PROPS_YAML_TAG.data()]) + rhs.properties = node[PROPS_YAML_TAG.data()]; return true; } From fc569736458292542cb8fe74d5ca812436442568 Mon Sep 17 00:00:00 2001 From: Glence Date: Wed, 2 Nov 2022 17:31:57 +0800 Subject: [PATCH 651/793] added getright in camera.cxx/.hxx PickandThrow is done adjusted thirdPersonCamera and PlayerController to work with each other --- .../Inspector/SHEditorComponentView.hpp | 4 + SHADE_Managed/src/Components/Camera.cxx | 9 ++ SHADE_Managed/src/Components/Camera.hxx | 2 + TempScriptsFolder/PickAndThrow.cs | 82 +++++++++++++++-- TempScriptsFolder/PlayerController.cs | 88 +++++++++++++++---- TempScriptsFolder/ThirdPersonCamera.cs | 40 +++++---- 6 files changed, 182 insertions(+), 43 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 4777fc6a..12893de6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -244,9 +244,12 @@ namespace SHADE SHCollider* collider = &component->GetCollider(i); auto cursorPos = ImGui::GetCursorPos(); + //collider->IsTrigger + if (collider->GetType() == SHCollider::Type::BOX) { SHEditorWidgets::BeginPanel(std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto box = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( @@ -257,6 +260,7 @@ namespace SHADE else if (collider->GetType() == SHCollider::Type::SPHERE) { SHEditorWidgets::BeginPanel(std::format("{} Sphere Collider #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto sphere = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( diff --git a/SHADE_Managed/src/Components/Camera.cxx b/SHADE_Managed/src/Components/Camera.cxx index 5e570cc1..0d0dbced 100644 --- a/SHADE_Managed/src/Components/Camera.cxx +++ b/SHADE_Managed/src/Components/Camera.cxx @@ -123,5 +123,14 @@ namespace SHADE } + Vector3 Camera::GetRight() + { + auto system = SHSystemManager::GetSystem(); + SHVec3 forward, up, right; + system->GetCameraAxis(*GetNativeComponent(), forward, right, up); + return Convert::ToCLI(right); + + } + } \ No newline at end of file diff --git a/SHADE_Managed/src/Components/Camera.hxx b/SHADE_Managed/src/Components/Camera.hxx index 257bff11..c6afeb6d 100644 --- a/SHADE_Managed/src/Components/Camera.hxx +++ b/SHADE_Managed/src/Components/Camera.hxx @@ -66,5 +66,7 @@ namespace SHADE void SetMainCamera(); void LookAt(Vector3 targetPosition); Vector3 GetForward(); + Vector3 GetRight(); + }; } \ No newline at end of file diff --git a/TempScriptsFolder/PickAndThrow.cs b/TempScriptsFolder/PickAndThrow.cs index 834a508c..09252247 100644 --- a/TempScriptsFolder/PickAndThrow.cs +++ b/TempScriptsFolder/PickAndThrow.cs @@ -5,26 +5,94 @@ using static PlayerController; public class PickAndThrow : Script { private PlayerController pc; - public uint itemEID; - Transform itemHoldLocation; + public GameObject item; + public Vector3 throwForce = new Vector3(200.0f, 300.0f, 200.0f); + private Transform itemTransform; + private RigidBody itemRidibody; + private Transform raccoonHoldLocation; + private float lastXDir; + private float lastZDir; + private bool inRange = false; public PickAndThrow(GameObject gameObj) : base(gameObj) { } + protected override void awake() { pc = GetScript(); - itemHoldLocation = GetComponentInChildren(); + raccoonHoldLocation = GetComponentInChildren(); + if (raccoonHoldLocation == null) + Debug.Log("CHILD EMPTY"); + itemTransform = item.GetComponent(); + if (itemTransform == null) + Debug.Log("Item transform EMPTY"); + itemRidibody = item.GetComponent(); + if (itemRidibody == null) + Debug.Log("Item rb EMPTY"); } protected override void update() { - if (pc != null && pc.holdItem) + if (!pc.isMoveKeyPress) { + if (pc.xAxisMove != 0) + { + lastXDir = pc.xAxisMove; + lastZDir = 0.0f; + } + if (pc.zAxisMove != 0) + { + lastXDir = 0.0f; + lastZDir = pc.zAxisMove; + } } + else + { + lastXDir = pc.xAxisMove; + lastZDir = pc.zAxisMove; + } + + if (pc != null && inRange && !pc.holdItem && Input.GetKey(Input.KeyCode.E)) + pc.holdItem = true; + + if (pc != null && itemRidibody != null && itemTransform!= null && pc.holdItem) + { + itemTransform.LocalPosition = raccoonHoldLocation.GlobalPosition; + itemRidibody.IsGravityEnabled = false; + itemRidibody.LinearVelocity = Vector3.Zero; + itemRidibody.AngularVelocity = Vector3.Zero; + + if (Input.GetMouseButtonDown(Input.MouseCode.LeftButton)) + { + pc.holdItem = false; + itemRidibody.IsGravityEnabled = true; + itemRidibody.AddForce(new Vector3(throwForce.x * lastXDir, throwForce.y, throwForce.z * lastZDir)); + itemRidibody.LinearVelocity += pc.rb.LinearVelocity; + Debug.Log($"x: {itemRidibody.LinearVelocity.x} z: {itemRidibody.LinearVelocity.z}"); + } + } + else if(!pc.holdItem) + itemRidibody.IsGravityEnabled = true; } protected override void onCollisionEnter(CollisionInfo info) { - if (info.GameObject.Name == "item" && Input.GetKey(Input.KeyCode.E)) + } + protected override void onTriggerEnter(CollisionInfo info) + { + Debug.Log("ENTER"); + if (info.GameObject == item && !pc.holdItem) { - pc.holdItem = true; - itemEID = info.GameObject.EntityId; + inRange = true; } } + protected override void onTriggerStay(CollisionInfo info) + { + Debug.Log("STAY"); + } + protected override void onTriggerExit(CollisionInfo info) + { + Debug.Log("EXIT"); + if (info.GameObject == item && !pc.holdItem) + { + inRange = false; + } + } + } \ No newline at end of file diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 36e19860..5566c411 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -12,17 +12,17 @@ public class PlayerController : Script RUNNING, JUMP, FALLING, - HOLDING, CAUGHT, TOTAL } - private RigidBody rb; + public RigidBody rb; private Transform tranform; + private Camera cam; //to be remove public float drag = 2.0f; - public bool holdItem = false; + public bool holdItem { get; set; } [SerializeField] [Tooltip("The current state fo the raccoon")] public RaccoonStates currentState = RaccoonStates.IDILE; @@ -41,9 +41,11 @@ public class PlayerController : Script private float oldForce; private float maxOldVel; private bool sprintIncreaseOnce = false; - private int xAxisMove; - private int zAxisMove; - private bool isMoveKeyPress = false; + + public float xAxisMove { get; set; } + public float zAxisMove { get; set; } + + public bool isMoveKeyPress { get; set; } [SerializeField] [Tooltip("curr not working")] @@ -68,12 +70,21 @@ public class PlayerController : Script protected override void awake() { + + isMoveKeyPress = false; + holdItem = false; //rigidbody check rb = GetComponent(); if (rb == null) Debug.LogError("RigidBody is NULL!"); else + { + rb.IsGravityEnabled = false; + rb.FreezeRotationX = true; + rb.FreezeRotationY = true; + rb.FreezeRotationZ = true; rb.Drag = drag; + } //Transform check tranform = GetComponent(); @@ -92,6 +103,9 @@ public class PlayerController : Script protected override void update() { + if (cam == null) + cam = GetComponentInChildren(); + //toRemove if (Input.GetKey(Input.KeyCode.G)) { @@ -117,20 +131,55 @@ public class PlayerController : Script private void MoveKey() { - if (Input.GetKey(Input.KeyCode.A)) - xAxisMove = -1; - else if (Input.GetKey(Input.KeyCode.D)) - xAxisMove = 1; - else - xAxisMove = 0; + /* if (Input.GetKey(Input.KeyCode.A)) + xAxisMove = -1; + else if (Input.GetKey(Input.KeyCode.D)) + xAxisMove = 1; + else + xAxisMove = 0; + if (Input.GetKey(Input.KeyCode.W)) + zAxisMove = -1; + else if (Input.GetKey(Input.KeyCode.S)) + zAxisMove = 1; + else + zAxisMove = 0;*/ + + + xAxisMove = 0; + zAxisMove = 0; if (Input.GetKey(Input.KeyCode.W)) - zAxisMove = -1; - else if (Input.GetKey(Input.KeyCode.S)) - zAxisMove = 1; - else - zAxisMove = 0; - + { + Vector3 camerAixs = cam.GetForward(); + camerAixs.y = 0; + camerAixs.Normalise(); + xAxisMove = camerAixs.x; + zAxisMove = camerAixs.z; + } + if (Input.GetKey(Input.KeyCode.S)) + { + Vector3 camerAixs = cam.GetForward(); + camerAixs.y = 0; + camerAixs.Normalise(); + xAxisMove = -camerAixs.x; + zAxisMove = -camerAixs.z; + } + if (Input.GetKey(Input.KeyCode.A)) + { + Vector3 camerAixs = cam.GetRight(); + camerAixs.y = 0; + camerAixs.Normalise(); + xAxisMove = -camerAixs.x; + zAxisMove = -camerAixs.z; + } + if (Input.GetKey(Input.KeyCode.D)) + { + Vector3 camerAixs = cam.GetRight(); + camerAixs.y = 0; + camerAixs.Normalise(); + xAxisMove = camerAixs.x; + zAxisMove = camerAixs.z; + } isMoveKeyPress = xAxisMove != 0 || zAxisMove != 0; if(isMoveKeyPress && currentState != RaccoonStates.RUNNING && isGrounded) @@ -169,7 +218,8 @@ public class PlayerController : Script if (Input.GetKey(Input.KeyCode.LeftShift) && isMoveKeyPress && isGrounded) { currentState = RaccoonStates.RUNNING; - if(!sprintIncreaseOnce) + holdItem = false; + if (!sprintIncreaseOnce) { sprintIncreaseOnce = true; oldForce = moveForce; diff --git a/TempScriptsFolder/ThirdPersonCamera.cs b/TempScriptsFolder/ThirdPersonCamera.cs index e3b043bd..618c562f 100644 --- a/TempScriptsFolder/ThirdPersonCamera.cs +++ b/TempScriptsFolder/ThirdPersonCamera.cs @@ -19,10 +19,13 @@ namespace SHADE_Scripting protected override void awake() { + AddComponent(); + if(!GetComponent()) { AddComponent(); } + GetComponent().SetMainCamera(); if (!GetComponent()) { AddComponent(); @@ -30,26 +33,29 @@ namespace SHADE_Scripting GetComponent().ArmLength = armLength; } - protected override void update() - { - CameraArm arm = GetComponent(); - if(arm) + protected override void update() + { + if (Input.GetMouseButton(Input.MouseCode.RightButton)) + { + CameraArm arm = GetComponent(); + if (arm) + { + Vector2 vel = Input.GetMouseVelocity(); + arm.Pitch -= vel.y * turnSpeedPitch * Time.DeltaTimeF; + arm.Yaw += vel.x * turnSpeedYaw * Time.DeltaTimeF; + + if (arm.Pitch > pitchClamp) { - Vector2 vel = Input.GetMouseVelocity(); - arm.Pitch -= vel.y * turnSpeedPitch * Time.DeltaTimeF; - arm.Yaw += vel.x * turnSpeedYaw * Time.DeltaTimeF; - - if(arm.Pitch > pitchClamp) - { - arm.Pitch = pitchClamp; - } - else if(arm.Pitch < -pitchClamp) - { - arm.Pitch = -pitchClamp; - } - + arm.Pitch = pitchClamp; } + else if (arm.Pitch < 0) + { + arm.Pitch = 0; + } + + } } + } } } From 4721a133e133b37edc0d2bee64867ab514361a38 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 17:43:28 +0800 Subject: [PATCH 652/793] Added a way to retrieve texture handles from texture indices --- .../MiddleEnd/Textures/SHTextureLibrary.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h index 9357b0e0..5b7e4914 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.h @@ -129,6 +129,21 @@ namespace SHADE /* Getter Functions */ /*-----------------------------------------------------------------------------*/ Handle GetTextureDescriptorSetGroup() const noexcept { return texDescriptors; } + /***************************************************************************/ + /*! + * + \brief + Retrieves the texture handle at the specified texture index. + + \param textureId + Index of the texture to look for. + + \returns + Handle to the texture + + */ + /***************************************************************************/ + Handle GetTextureHandle(SHTexture::Index textureId) const { return texOrder[textureId]; }; private: /*-----------------------------------------------------------------------------*/ From c68c5adc0d3753ebbad5e8b35dc0b80ed66dba3e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 2 Nov 2022 17:51:07 +0800 Subject: [PATCH 653/793] Added GetTextureHandle() to SHGraphicsSystem --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 5 +++++ .../MiddleEnd/Interface/SHGraphicsSystem.h | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 97380fa3..bccece68 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -655,6 +655,11 @@ namespace SHADE ); } + Handle SHGraphicsSystem::GetTextureHandle(SHTexture::Index textureId) const + { + return texLibrary.GetTextureHandle(textureId); + } + #pragma endregion ADD_REMOVE #pragma region ROUTINES diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 3f899446..d5ac64dc 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -262,6 +262,21 @@ namespace SHADE */ /***************************************************************************/ void BuildTextures(); + /***************************************************************************/ + /*! + * + \brief + Retrieves the texture handle at the specified texture index. + + \param textureId + Index of the texture to look for. + + \returns + Handle to the texture + + */ + /***************************************************************************/ + Handle GetTextureHandle(SHTexture::Index textureId) const; void PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept; void HandleResize(void) noexcept; From 2beae24924f9f116f83704a88f828e9ec92fe0e1 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 2 Nov 2022 20:50:51 +0800 Subject: [PATCH 654/793] Removed Original mesh compiler, rewriting mesh loader to reflect ModelCompiler format --- .../src/Assets/Asset Types/SHMeshAsset.h | 42 ++-- .../Libraries/Compilers/SHMeshCompiler.cpp | 201 ------------------ .../Libraries/Compilers/SHMeshCompiler.h | 40 ---- .../Assets/Libraries/Loaders/SHMeshLoader.cpp | 123 ++++------- .../Assets/Libraries/Loaders/SHMeshLoader.h | 7 +- 5 files changed, 72 insertions(+), 341 deletions(-) delete mode 100644 SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp delete mode 100644 SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h index 20b442ba..0ef5267b 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h @@ -18,24 +18,32 @@ namespace SHADE { - struct SH_API SHMeshAssetHeader - { - uint32_t vertexCount; - uint32_t indexCount; - std::string name; - }; + struct SHMeshDataHeader + { + uint32_t vertexCount; + uint32_t indexCount; + uint32_t charCount; + }; - struct SH_API SHMeshAsset : SHAssetData - { - bool compiled; - bool changed; + struct SHMeshData + { + std::string name; + std::vector vertexPosition; + std::vector vertexTangent; + std::vector vertexNormal; + std::vector texCoords; + std::vector indices; + }; - SHMeshAssetHeader header; + struct SHMeshAssetHeader + { + size_t meshCount; + }; - std::vector vertexPosition; - std::vector vertexTangent; - std::vector vertexNormal; - std::vector texCoords; - std::vector indices; - }; + struct SH_API SHMeshAsset : SHAssetData + { + SHMeshAssetHeader header; + std::vector headers; + std::vector meshes; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp deleted file mode 100644 index 046ba767..00000000 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/*************************************************************************//** - * \file SHMeshCompiler.cpp - * \author Loh Xiao Qi - * \date 30 September 2022 - * \brief Library to write data in SHMeshAsset into binary file for faster - * loading in the future - * - * - * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. - *****************************************************************************/ -#include "SHpch.h" -#include "SHMeshCompiler.h" -#include "Graphics/MiddleEnd/Meshes/SHMeshData.h" -#include - -#include - -namespace SHADE -{ - - Assimp::Importer SHMeshCompiler::aiImporter; - - void SHMeshCompiler::ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept - { - for (size_t i{ 0 }; i < node.mNumMeshes; ++i) - { - aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; - meshes.push_back(ProcessMesh(*mesh)); - } - - for (size_t i{ 0 }; i < node.mNumChildren; ++i) - { - ProcessNode(*node.mChildren[i], scene, meshes); - } - } - - void SHMeshCompiler::ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept - { - if (scene.HasAnimations()) - { - std::vector anims(scene.mNumAnimations); - for (auto i{ 0 }; i < scene.mNumAnimations; ++i) - { - auto const& anim{ *scene.mAnimations[i] }; - - anims[i].name = anim.mName.C_Str(); - - anims[i].duration = anim.mDuration; - anims[i].ticksPerSecond = anim.mTicksPerSecond; - - std::copy_n(anim.mChannels, anim.mNumChannels, anims[i].nodeChannels.data()); - std::copy_n(anim.mMeshChannels, anim.mNumMeshChannels, anims[i].meshChannels.data()); - std::copy_n(anim.mMorphMeshChannels, anim.mNumMorphMeshChannels, anims[i].morphMeshChannels.data()); - } - } - } - - SHMeshAsset* SHMeshCompiler::ProcessMesh(aiMesh const& mesh) noexcept - { - SHMeshAsset* result = new SHMeshAsset(); - result->compiled = false; - result->changed = false; - - for (size_t i{ 0 }; i < mesh.mNumVertices; ++i) - { - // Vertex position - SHVec3 vertex; - vertex.x = mesh.mVertices[i].x; - vertex.y = mesh.mVertices[i].y; - vertex.z = mesh.mVertices[i].z; - result->vertexPosition.push_back(vertex); - - // Tex coords - SHVec2 texCoord{ 0.f, 0.f }; - if (mesh.mTextureCoords[0]) - { - texCoord.x = mesh.mTextureCoords[0][i].x; - texCoord.y = mesh.mTextureCoords[0][i].y; - } - result->texCoords.push_back(texCoord); - - // Normals - SHVec3 normal{ 0.f, 0.f, 0.f }; - if (mesh.mNormals) - { - normal.x = mesh.mNormals[i].x; - normal.y = mesh.mNormals[i].y; - normal.z = mesh.mNormals[i].z; - } - result->vertexNormal.push_back(normal); - - // Tangent - SHVec3 tangent{ 0.f, 0.f, 0.f }; - if (mesh.mTangents) - { - tangent.x = mesh.mTangents[i].x; - tangent.y = mesh.mTangents[i].y; - tangent.z = mesh.mTangents[i].z; - } - result->vertexTangent.push_back(tangent); - } - - for (size_t i{ 0 }; i < mesh.mNumFaces; ++i) - { - aiFace face = mesh.mFaces[i]; - for (size_t j{ 0 }; j < face.mNumIndices; ++j) - { - result->indices.push_back(face.mIndices[j]); - } - } - - result->header.vertexCount = static_cast(result->vertexPosition.size()); - result->header.indexCount = static_cast(result->indices.size()); - result->header.name = mesh.mName.C_Str(); - - return result; - } - - void SHMeshCompiler::LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept - { - const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), - aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons - | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping - | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) - | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master - | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible - | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing - | aiProcess_RemoveRedundantMaterials // remove redundant materials - | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors - | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs - ); - - if (!scene || !scene->HasMeshes()) - { - SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); - return; - } - - //ExtractAnimations(*scene, anims); - - ProcessNode(*scene->mRootNode, *scene, meshes); - - aiImporter.FreeScene(); - } - - std::optional SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept - { - std::string newPath{ path.parent_path().string() + '/' }; - newPath += asset.header.name + MESH_EXTENSION.data(); - - std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; - if (!file.is_open()) - { - SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); - } - - file.write( - reinterpret_cast(&(asset.header.vertexCount)), - sizeof(uint32_t) - ); - - file.write( - reinterpret_cast(&(asset.header.indexCount)), - sizeof(uint32_t) - ); - - auto const vertexVec3Byte{ sizeof(SHVec3) * asset.header.vertexCount }; - auto const vertexVec2Byte{ sizeof(SHVec2) * asset.header.vertexCount }; - - file.write( - reinterpret_cast(asset.vertexPosition.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexTangent.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexNormal.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.texCoords.data()), - vertexVec2Byte - ); - - file.write( - reinterpret_cast(asset.indices.data()), - sizeof(uint32_t) * asset.header.indexCount - ); - - file.close(); - - return newPath; - } -} diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h deleted file mode 100644 index 1af1298b..00000000 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************//** - * \file SHMeshCompiler.h - * \author Loh Xiao Qi - * \date 30 September 2022 - * \brief Library to write data in SHMeshAsset into binary file for faster - * loading in the future - * - * - * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. - *****************************************************************************/ -#pragma once - -#include -#include -#include - -#include "Assets/Asset Types/SHAnimationAsset.h" -#include "Assets/Asset Types/SHMeshAsset.h" -#include "Assets/SHAssetMacros.h" - -namespace SHADE -{ - class SHMeshCompiler - { - - using MeshVectorRef = std::vector&; - using AnimVectorRef = std::vector&; - - static Assimp::Importer aiImporter; - static void ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept; - static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept; - static SHMeshAsset* ProcessMesh(aiMesh const& mesh) noexcept; - - public: - static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept; - static std::optional CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp index 52134440..7520bb84 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp @@ -16,6 +16,36 @@ namespace SHADE { + void SHMeshLoader::ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept + { + file.read( + reinterpret_cast(&header), + sizeof(SHMeshDataHeader) + ); + } + + void SHMeshLoader::ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept + { + + auto const vertexVec3Byte{ sizeof(SHVec3) * header.vertexCount }; + auto const vertexVec2Byte{ sizeof(SHVec2) * header.indexCount }; + + data.vertexPosition.resize(header.vertexCount); + data.vertexTangent.resize(header.vertexCount); + data.vertexNormal.resize(header.vertexCount); + data.texCoords.resize(header.vertexCount); + data.indices.resize(header.indexCount); + + file.read(data.name.data(), header.charCount); + file.read(reinterpret_cast(data.vertexPosition.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.vertexTangent.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.vertexNormal.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.texCoords.data()), vertexVec2Byte); + file.read(reinterpret_cast(data.indices.data()), sizeof(uint32_t) * header.indexCount); + + + } + void SHMeshLoader::LoadSHMesh(AssetPath path, SHMeshAsset& mesh) noexcept { std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; @@ -25,46 +55,21 @@ namespace SHADE return; } - const std::string name{ path.stem().string() }; - file.seekg(0); - uint32_t vertCount, indexCount; - std::vector vertPos, vertTan, vertNorm; - std::vector texCoord; - std::vector indices; + file.read( + reinterpret_cast(&mesh.header), + sizeof(SHMeshAssetHeader) + ); - file.read(reinterpret_cast(&vertCount), sizeof(uint32_t)); - file.read(reinterpret_cast(&indexCount), sizeof(uint32_t)); - - auto const vertexVec3Byte{ sizeof(SHVec3) * vertCount }; - auto const vertexVec2Byte{ sizeof(SHVec2) * vertCount }; - - vertPos.resize(vertCount); - vertTan.resize(vertCount); - vertNorm.resize(vertCount); - texCoord.resize(vertCount); - indices.resize(indexCount); - - file.read(reinterpret_cast(vertPos.data()), vertexVec3Byte); - file.read(reinterpret_cast(vertTan.data()), vertexVec3Byte); - file.read(reinterpret_cast(vertNorm.data()), vertexVec3Byte); - file.read(reinterpret_cast(texCoord.data()), vertexVec2Byte); - file.read(reinterpret_cast(indices.data()), sizeof(uint32_t) * indexCount); - - mesh.compiled = true; - mesh.changed = false; - - mesh.header.indexCount = indexCount; - mesh.header.vertexCount = vertCount; - mesh.header.name = name; - - mesh.vertexPosition = std::move(vertPos); - mesh.vertexTangent = std::move(vertTan); - mesh.vertexNormal = std::move(vertNorm); - mesh.texCoords = std::move(texCoord); - mesh.indices = std::move(indices); + mesh.headers.resize(mesh.header.meshCount); + mesh.meshes.resize(mesh.header.meshCount); + for (auto i{ 0 }; i < mesh.header.meshCount; ++i) + { + ReadHeader(file, mesh.headers[i]); + ReadData(file, mesh.headers[i], mesh.meshes[i]); + } file.close(); } @@ -79,52 +84,6 @@ namespace SHADE void SHMeshLoader::Write(SHAssetData const* data, AssetPath path) { - std::ofstream file{ path, std::ios::out | std::ios::binary | std::ios::trunc }; - if (!file.is_open()) - { - SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); - } - auto asset = *dynamic_cast(data); - - file.write( - reinterpret_cast(&(asset.header.vertexCount)), - sizeof(uint32_t) - ); - - file.write( - reinterpret_cast(&(asset.header.indexCount)), - sizeof(uint32_t) - ); - - auto const vertexVec3Byte{ sizeof(SHVec3) * asset.header.vertexCount }; - auto const vertexVec2Byte{ sizeof(SHVec2) * asset.header.vertexCount }; - - file.write( - reinterpret_cast(asset.vertexPosition.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexTangent.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexNormal.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.texCoords.data()), - vertexVec2Byte - ); - - file.write( - reinterpret_cast(asset.indices.data()), - sizeof(uint32_t) * asset.header.indexCount - ); - - file.close(); } } diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h index 03a111ce..e45ada90 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h @@ -12,11 +12,16 @@ #pragma once #include "Assets/Asset Types/SHMeshAsset.h" #include "SHAssetLoader.h" +#include namespace SHADE { - struct SHMeshLoader : SHAssetLoader + class SHMeshLoader : public SHAssetLoader { + void ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept; + void ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept; + + public: void LoadSHMesh(AssetPath path, SHMeshAsset& meshes) noexcept; SHAssetData* Load(AssetPath path) override; void Write(SHAssetData const* data, AssetPath path) override; From d1f624b2eb843c0630c4544b3b6e3a011f3fffa3 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 2 Nov 2022 21:09:53 +0800 Subject: [PATCH 655/793] Removed SHMeshData declaration/definition in graphics middle end Renamed some data members in SHMeshData Replaced calls and references to mesh data in Primitive Generator --- .../src/Assets/Asset Types/SHAssetIncludes.h | 2 +- .../{SHMeshAsset.h => SHModelAsset.h} | 14 +++--- .../{SHMeshLoader.cpp => SHModelLoader.cpp} | 46 +++++++++---------- .../{SHMeshLoader.h => SHModelLoader.h} | 8 ++-- .../Graphics/MiddleEnd/Meshes/SHMeshData.h | 36 --------------- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 38 +++++++-------- .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 3 +- .../src/Resource/SHResourceManager.hpp | 2 +- 8 files changed, 57 insertions(+), 92 deletions(-) rename SHADE_Engine/src/Assets/Asset Types/{SHMeshAsset.h => SHModelAsset.h} (78%) rename SHADE_Engine/src/Assets/Libraries/Loaders/{SHMeshLoader.cpp => SHModelLoader.cpp} (51%) rename SHADE_Engine/src/Assets/Libraries/Loaders/{SHMeshLoader.h => SHModelLoader.h} (82%) delete mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHAssetIncludes.h b/SHADE_Engine/src/Assets/Asset Types/SHAssetIncludes.h index 1c1ed44a..f4fb49f0 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHAssetIncludes.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHAssetIncludes.h @@ -1,4 +1,4 @@ #pragma once -#include "SHMeshAsset.h" +#include "SHModelAsset.h" #include "SHTextureAsset.h" \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h similarity index 78% rename from SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h rename to SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h index 0ef5267b..45b06198 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHMeshAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h @@ -28,21 +28,21 @@ namespace SHADE struct SHMeshData { std::string name; - std::vector vertexPosition; - std::vector vertexTangent; - std::vector vertexNormal; - std::vector texCoords; + std::vector vertexPositions; + std::vector vertexTangents; + std::vector vertexNormals; + std::vector vertexTexCoords; std::vector indices; }; - struct SHMeshAssetHeader + struct SHModelAssetHeader { size_t meshCount; }; - struct SH_API SHMeshAsset : SHAssetData + struct SH_API SHModelAsset : SHAssetData { - SHMeshAssetHeader header; + SHModelAssetHeader header; std::vector headers; std::vector meshes; }; diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp similarity index 51% rename from SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp index 7520bb84..57d92b57 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp @@ -1,5 +1,5 @@ /*************************************************************************//** - * \file SHMeshLoader.cpp + * \file SHModelLoader.cpp * \author Loh Xiao Qi * \date 30 September 2022 * \brief Implementation for Mesh loader. Accounts for custom binary format @@ -11,12 +11,12 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #include "SHpch.h" -#include "SHMeshLoader.h" +#include "SHModelLoader.h" #include namespace SHADE { - void SHMeshLoader::ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept + void SHModelLoader::ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept { file.read( reinterpret_cast(&header), @@ -24,29 +24,29 @@ namespace SHADE ); } - void SHMeshLoader::ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept + void SHModelLoader::ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept { auto const vertexVec3Byte{ sizeof(SHVec3) * header.vertexCount }; auto const vertexVec2Byte{ sizeof(SHVec2) * header.indexCount }; - data.vertexPosition.resize(header.vertexCount); - data.vertexTangent.resize(header.vertexCount); - data.vertexNormal.resize(header.vertexCount); - data.texCoords.resize(header.vertexCount); + data.vertexPositions.resize(header.vertexCount); + data.vertexTangents.resize(header.vertexCount); + data.vertexNormals.resize(header.vertexCount); + data.vertexTexCoords.resize(header.vertexCount); data.indices.resize(header.indexCount); file.read(data.name.data(), header.charCount); - file.read(reinterpret_cast(data.vertexPosition.data()), vertexVec3Byte); - file.read(reinterpret_cast(data.vertexTangent.data()), vertexVec3Byte); - file.read(reinterpret_cast(data.vertexNormal.data()), vertexVec3Byte); - file.read(reinterpret_cast(data.texCoords.data()), vertexVec2Byte); + file.read(reinterpret_cast(data.vertexPositions.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.vertexTangents.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.vertexNormals.data()), vertexVec3Byte); + file.read(reinterpret_cast(data.vertexTexCoords.data()), vertexVec2Byte); file.read(reinterpret_cast(data.indices.data()), sizeof(uint32_t) * header.indexCount); } - void SHMeshLoader::LoadSHMesh(AssetPath path, SHMeshAsset& mesh) noexcept + void SHModelLoader::LoadSHMesh(AssetPath path, SHModelAsset& model) noexcept { std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; if (!file.is_open()) @@ -58,31 +58,31 @@ namespace SHADE file.seekg(0); file.read( - reinterpret_cast(&mesh.header), - sizeof(SHMeshAssetHeader) + reinterpret_cast(&model.header), + sizeof(SHModelAssetHeader) ); - mesh.headers.resize(mesh.header.meshCount); - mesh.meshes.resize(mesh.header.meshCount); + model.headers.resize(model.header.meshCount); + model.meshes.resize(model.header.meshCount); - for (auto i{ 0 }; i < mesh.header.meshCount; ++i) + for (auto i{ 0 }; i < model.header.meshCount; ++i) { - ReadHeader(file, mesh.headers[i]); - ReadData(file, mesh.headers[i], mesh.meshes[i]); + ReadHeader(file, model.headers[i]); + ReadData(file, model.headers[i], model.meshes[i]); } file.close(); } - SHAssetData* SHMeshLoader::Load(AssetPath path) + SHAssetData* SHModelLoader::Load(AssetPath path) { - auto result = new SHMeshAsset(); + auto result = new SHModelAsset(); LoadSHMesh(path, *result); return result; } - void SHMeshLoader::Write(SHAssetData const* data, AssetPath path) + void SHModelLoader::Write(SHAssetData const* data, AssetPath path) { } diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h similarity index 82% rename from SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h index e45ada90..688e628e 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h @@ -1,5 +1,5 @@ /*************************************************************************//** - * \file SHMeshLoader.h + * \file SHModelLoader.h * \author Loh Xiao Qi * \date 30 September 2022 * \brief Library to load gltf mesh files and custom binary format @@ -10,19 +10,19 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #pragma once -#include "Assets/Asset Types/SHMeshAsset.h" +#include "Assets/Asset Types/SHModelAsset.h" #include "SHAssetLoader.h" #include namespace SHADE { - class SHMeshLoader : public SHAssetLoader + class SHModelLoader : public SHAssetLoader { void ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept; void ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept; public: - void LoadSHMesh(AssetPath path, SHMeshAsset& meshes) noexcept; + void LoadSHMesh(AssetPath path, SHModelAsset& model) noexcept; SHAssetData* Load(AssetPath path) override; void Write(SHAssetData const* data, AssetPath path) override; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h deleted file mode 100644 index 2f7d320b..00000000 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHMeshData.h +++ /dev/null @@ -1,36 +0,0 @@ -/************************************************************************************//*! -\file SHPrimitiveGenerator.h -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 18, 2022 -\brief Contains the static class definition of SHPrimitiveGenerator. - -Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -#pragma once - -// STL Includes -#include -// Project Includes -#include "Math/SHMath.h" -#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" - -namespace SHADE -{ - /*************************************************************************************/ - /*! - \brief - Static class that contains functions for generating 3D primitives. - */ - /*************************************************************************************/ - struct SHMeshData - { - std::vector VertexPositions; - std::vector VertexTexCoords; - std::vector VertexTangents; - std::vector VertexNormals; - std::vector Indices; - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index be181beb..e76d940f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -22,7 +22,7 @@ namespace SHADE { SHMeshData mesh; - mesh.VertexPositions = + mesh.vertexPositions = { // front SHVec3(-0.5f, -0.5f, 0.5f), @@ -61,7 +61,7 @@ namespace SHADE SHVec3(-0.5f, 0.5f, -0.5f) }; - mesh.VertexTexCoords = + mesh.vertexTexCoords = { SHVec2(0.0f, 1.0f), SHVec2(1.0f, 1.0f), @@ -99,7 +99,7 @@ namespace SHADE SHVec2(0.0f, 0.0f) }; - mesh.VertexTangents = + mesh.vertexTangents = { // front SHVec3(1.0f, 0.0f, 0.0f), @@ -139,7 +139,7 @@ namespace SHADE }; - mesh.VertexNormals = + mesh.vertexNormals = { // front SHVec3(0.0f, 0.0f, 1.0f), @@ -178,7 +178,7 @@ namespace SHADE SHVec3(-1.0f, 0.0f, 0.0f) }; - mesh.Indices = + mesh.indices = { 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, @@ -196,13 +196,13 @@ namespace SHADE static SHMeshData meshData = Cube(); return meshLibrary.AddMesh ( - static_cast(meshData.VertexPositions.size()), - meshData.VertexPositions.data(), - meshData.VertexTexCoords.data(), - meshData.VertexTangents.data(), - meshData.VertexNormals.data(), - static_cast(meshData.Indices.size()), - meshData.Indices.data() + static_cast(meshData.vertexPositions.size()), + meshData.vertexPositions.data(), + meshData.vertexTexCoords.data(), + meshData.vertexTangents.data(), + meshData.vertexNormals.data(), + static_cast(meshData.indices.size()), + meshData.indices.data() ); } @@ -211,13 +211,13 @@ namespace SHADE static SHMeshData meshData = Cube(); return gfxSystem.AddMesh ( - static_cast(meshData.VertexPositions.size()), - meshData.VertexPositions.data(), - meshData.VertexTexCoords.data(), - meshData.VertexTangents.data(), - meshData.VertexNormals.data(), - static_cast(meshData.Indices.size()), - meshData.Indices.data() + static_cast(meshData.vertexPositions.size()), + meshData.vertexPositions.data(), + meshData.vertexTexCoords.data(), + meshData.vertexTangents.data(), + meshData.vertexNormals.data(), + static_cast(meshData.indices.size()), + meshData.indices.data() ); } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index dd059a29..852374fa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -13,7 +13,8 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Math/SHMath.h" -#include "SHMeshData.h" +#include "Assets/Asset Types/SHModelAsset.h" +#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" #include "SH_API.h" namespace SHADE diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index 072adaa2..d078ce48 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -49,7 +49,7 @@ namespace SHADE throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); // Load - const SHMeshAsset* assetData = SHAssetManager::GetData(assetId); + const SHModelAsset* assetData = SHAssetManager::GetData(assetId); if (assetData == nullptr) { SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); From e609b5634ad2672cf767c5edbdba713ced8d9ac0 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 2 Nov 2022 21:31:27 +0800 Subject: [PATCH 656/793] Material Inspector Can set material --- Assets/Editor/Layouts/Default.ini | 26 +- Assets/Materials/TestMat.shmat | 8 + Assets/Materials/TestMat.shmat.shmeta | 3 + Assets/Shaders/TestCube_FS.glsl | 2 +- Assets/Shaders/TestCube_FS.shshaderb | Bin 2545 -> 2285 bytes SHADE_Engine/src/Assets/SHAssetManager.cpp | 6 + .../AssetBrowser/SHAssetBrowser.cpp | 80 +++++- .../AssetBrowser/SHAssetBrowser.h | 4 +- .../Inspector/SHEditorComponentView.hpp | 14 + .../MaterialInspector/SHMaterialInspector.cpp | 262 ++++++++++++++---- .../MaterialInspector/SHMaterialInspector.h | 9 +- .../Editor/EditorWindow/SHEditorWindow.cpp | 7 +- .../src/Editor/EditorWindow/SHEditorWindow.h | 1 + .../EditorWindow/SHEditorWindowIncludes.h | 13 +- SHADE_Engine/src/Editor/SHEditor.cpp | 2 + SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 3 +- .../MiddleEnd/Materials/SHMaterialSpec.cpp | 2 +- .../MiddleEnd/Materials/SHMaterialSpec.h | 2 +- .../src/Graphics/RenderGraph/SHSubpass.cpp | 3 +- .../BlockInterface/SHShaderBlockInterface.cpp | 24 +- .../BlockInterface/SHShaderBlockInterface.h | 9 +- .../src/Resource/SHResourceManager.hpp | 26 +- .../Serialization/SHSerializationHelper.hpp | 8 +- 23 files changed, 380 insertions(+), 134 deletions(-) create mode 100644 Assets/Materials/TestMat.shmat create mode 100644 Assets/Materials/TestMat.shmat.shmeta diff --git a/Assets/Editor/Layouts/Default.ini b/Assets/Editor/Layouts/Default.ini index d7a7bf69..1099b5ac 100644 --- a/Assets/Editor/Layouts/Default.ini +++ b/Assets/Editor/Layouts/Default.ini @@ -1,16 +1,16 @@ [Window][MainStatusBar] -Pos=0,1060 +Pos=0,1007 Size=1920,20 Collapsed=0 [Window][SHEditorMenuBar] Pos=0,48 -Size=1920,1012 +Size=1920,959 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,197 -Size=308,863 +Pos=0,189 +Size=308,818 Collapsed=0 DockId=0x00000004,0 @@ -21,13 +21,13 @@ Collapsed=0 [Window][Inspector] Pos=1528,48 -Size=392,1012 +Size=392,959 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=308,147 +Size=308,139 Collapsed=0 DockId=0x00000003,0 @@ -76,7 +76,7 @@ DockId=0x0000000B,0 [Window][î‹ Viewport] Pos=310,48 -Size=1216,715 +Size=1216,662 Collapsed=0 DockId=0x0000000B,0 @@ -93,13 +93,19 @@ Collapsed=0 DockId=0x0000000A,0 [Window][ Asset Browser] -Pos=310,765 +Pos=310,712 Size=1216,295 Collapsed=0 DockId=0x0000000C,0 +[Window][Material Inspector] +Pos=1528,48 +Size=392,959 +Collapsed=0 +DockId=0x00000006,1 + [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=1920,959 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1526,1036 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=308,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,147 Selected=0x1E6EB881 @@ -111,5 +117,5 @@ DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Spli DockNode ID=0x0000000C Parent=0x00000009 SizeRef=1501,295 Selected=0xB128252A DockNode ID=0x0000000A Parent=0x00000007 SizeRef=1501,310 Selected=0xD446F7B6 DockNode ID=0x00000008 Parent=0x00000002 SizeRef=1501,338 Selected=0xD9F31532 - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=392,1036 Selected=0xE7039252 + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=392,1036 Selected=0xD3697FB6 diff --git a/Assets/Materials/TestMat.shmat b/Assets/Materials/TestMat.shmat new file mode 100644 index 00000000..089576f3 --- /dev/null +++ b/Assets/Materials/TestMat.shmat @@ -0,0 +1,8 @@ +- VertexShader: 39210065 + FragmentShader: 46377769 + SubPass: G-Buffer Write + Properties: + data.color: {x: 1, y: 0.200000003, z: 0.100000001, w: 1} + data.textureIndex: 64651793 + data.alpha: 0 + data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Materials/TestMat.shmat.shmeta b/Assets/Materials/TestMat.shmat.shmeta new file mode 100644 index 00000000..1612ef22 --- /dev/null +++ b/Assets/Materials/TestMat.shmat.shmeta @@ -0,0 +1,3 @@ +Name: TestMat +ID: 126974645 +Type: 7 diff --git a/Assets/Shaders/TestCube_FS.glsl b/Assets/Shaders/TestCube_FS.glsl index c60da6ce..093cc9c6 100644 --- a/Assets/Shaders/TestCube_FS.glsl +++ b/Assets/Shaders/TestCube_FS.glsl @@ -43,7 +43,7 @@ void main() { position = In.vertPos; normals = In.normal; - albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) + MatProp.data[In2.materialIndex].color / MatProp.data[In2.materialIndex].alpha; + albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv); outEntityID = In2.eid; lightLayerIndices = In2.lightLayerIndex; diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb index 95b4f62ae89c1bd3dc23f684757a7298c60833a3..fcb72b6e912e98ddd75e1e9eb888bad2282d0f97 100644 GIT binary patch delta 266 zcmew;{8ms*;0Xr<7%(#_vokO-GH@~QGT2QNo6Kqs6t>>Du9-;`#L6!%am_2qEUEN# zVPIuoXRzMv#vIKk2$GTmVn!f#XJ7#eZ(<2%GBpEonSodth^>LbAU;SbNK669w*b;0 zEy(iLo1@t68B6Sdio}6ZraP3JUrrs9F28n~zTZ6?J82$nsVFAPd#=;vt delta 528 zcmZ9I&q_j35Qpd9t6d7pq|#kPf`R+WG&S?zwKhSt(I;qAo7Sf>;rtcnceo=cL7ljKm6E3X9=A&V zjVH5O+zKXb+8+=)f->Zw!IKT{W02mau|_z7eNc{KK38MaKyhEMj{U#hDVlWE(-)d% zliz|0ZiAZZU#(?=U6HH?XHJvud0FgE1(yRT=gDd3*oUB4lT8%4rD;IzqYq^pnN={< gRLdE-fF5Xp^8JG$wtnP?RQ?4>SAOFBA68w3IcNPTo&W#< diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 4897fc42..cf58d520 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -157,16 +157,22 @@ namespace SHADE { case AssetType::PREFAB: newPath += PREFAB_FOLDER; + newPath += name; + newPath += PREFAB_EXTENSION; data = new SHPrefabAsset(); break; case AssetType::SCENE: newPath += SCENE_FOLDER; + newPath += name; + newPath += SCENE_EXTENSION; data = new SHSceneAsset(); break; case AssetType::MATERIAL: newPath += MATERIAL_FOLDER; + newPath += name; + newPath += MATERIAL_EXTENSION; data = new SHMaterialAsset(); break; diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 8c71eb8f..a18cd70f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -5,15 +5,19 @@ #include "Editor/SHImGuiHelpers.hpp" #include #include +#include #include "Assets/SHAssetManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/IconsFontAwesome6.h" +#include "Editor/SHEditor.h" #include "Editor/DragDrop/SHDragDrop.hpp" +#include "Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h" namespace SHADE { SHAssetBrowser::SHAssetBrowser() - :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder) + :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder), assetBeingCreated(std::nullopt) { } @@ -53,14 +57,33 @@ namespace SHADE flags |= ImGuiTreeNodeFlags_Selected; if (folder == rootFolder) flags |= ImGuiTreeNodeFlags_DefaultOpen; - + bool isOpen = ImGui::TreeNodeEx(folder, flags, "%s %s", ICON_MD_FOLDER, folder->name.data()); + ImGuiID folderID = ImGui::GetItemID(); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - if(ImGui::IsItemClicked()) + + if (ImGui::BeginPopupContextItem()) + { + if (ImGui::BeginMenu("Create Asset")) + { + //TODO: Change to rttr type enum align + if (ImGui::Selectable("Material")) + { + assetBeingCreated = { folder, AssetType::MATERIAL, "New Material" }; + ImGui::TreeNodeSetOpen(folderID, true); + isOpen = true; + } + ImGui::EndMenu(); + } + ImGui::EndPopup(); + } + + if (ImGui::IsItemClicked()) { selectedFolders.clear(); selectedFolders.push_back(folder); } + if (isOpen) { const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark); @@ -86,6 +109,9 @@ namespace SHADE vertLineEnd.y = midPoint; } drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); + if(assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) + DrawAssetBeingCreated(); + ImGui::TreePop(); } return nodeRect; @@ -130,7 +156,7 @@ namespace SHADE flags |= ImGuiTreeNodeFlags_Selected; std::string icon{}; - switch(file.assetMeta->type) + switch (file.assetMeta->type) { case AssetType::INVALID: break; case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; @@ -141,24 +167,64 @@ namespace SHADE case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; case AssetType::MATERIAL: break; case AssetType::MAX_COUNT: break; - default: ; + default:; } ImGui::TreeNodeEx(file.assetMeta, flags, "%s %s", icon.data(), file.assetMeta->name.data()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - if(SHDragDrop::BeginSource()) + if (SHDragDrop::BeginSource()) { auto id = file.assetMeta->id; ImGui::Text("Moving Asset: %s [%zu]", file.name.data(), file.assetMeta->id); SHDragDrop::SetPayload(SHDragDrop::DRAG_RESOURCE, &id); SHDragDrop::EndSource(); } - if(ImGui::IsItemClicked()) + if (ImGui::IsItemClicked()) { selectedAssets.clear(); selectedAssets.push_back(file.assetMeta->id); } + if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + { + switch (file.assetMeta->type) + { + case AssetType::INVALID: break; + case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; + case AssetType::SHADER_BUILT_IN: icon = ICON_FA_FILE_CODE; break; + case AssetType::TEXTURE: icon = ICON_FA_IMAGES; break; + case AssetType::MESH: icon = ICON_FA_CUBES; break; + case AssetType::SCENE: icon = ICON_MD_IMAGE; break; + case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; + case AssetType::MATERIAL: + if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) + { + matInspector->OpenMaterial(file.assetMeta->id); + } + break; + case AssetType::MAX_COUNT: break; + default:; + } + + } ImGui::TreePop(); return nodeRect; } + + void SHAssetBrowser::DrawAssetBeingCreated() noexcept + { + if (!assetBeingCreated.has_value()) + return; + auto& path = std::get<0>(assetBeingCreated.value()); + auto& type = std::get<1>(assetBeingCreated.value()); + auto& assetName = std::get<2>(assetBeingCreated.value()); + if (ImGui::InputText("##newAssetname", &assetName, ImGuiInputTextFlags_EnterReturnsTrue)) + { + AssetID assetId = SHAssetManager::CreateNewAsset(type, assetName); + if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) + { + matInspector->OpenMaterial(assetId, true); + } + assetBeingCreated.reset(); + } + } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index d56fc029..eec40262 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -10,6 +10,7 @@ namespace SHADE class SHAssetBrowser final : public SHEditorWindow { public: + using AssetEntry = std::tuple; SHAssetBrowser(); void Init(); @@ -21,11 +22,12 @@ namespace SHADE ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); ImRect DrawFile(SHFile const& file) noexcept; + void DrawAssetBeingCreated() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; + std::optional assetBeingCreated; std::vector selectedFolders; std::vector selectedAssets; static constexpr float tileWidth = 50.0f; - }; } diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index e3f93713..5b16a47d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -349,6 +349,7 @@ namespace SHADE { DrawContextMenu(component); Handle const& mesh = component->GetMesh(); + Handle const& mat = component->GetMaterial(); SHEditorWidgets::DragDropReadOnlyField("Mesh", std::to_string(SHResourceManager::GetAssetID(mesh).value_or(0)).data(), [component]() { @@ -359,6 +360,19 @@ namespace SHADE { component->SetMesh(SHResourceManager::LoadOrGet(id)); }, SHDragDrop::DRAG_RESOURCE); + + SHEditorWidgets::DragDropReadOnlyField("Material", mat ? std::to_string(SHResourceManager::GetAssetID(mat->GetBaseMaterial()).value_or(0)).data() : "", [component]() + { + Handle const& mat = component->GetMaterial(); + if(!mat) + return static_cast(0); + return SHResourceManager::GetAssetID(mat->GetBaseMaterial()).value_or(0); + }, + [component](AssetID const& id) + { + auto gfxSystem = SHSystemManager::GetSystem(); + component->SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(SHResourceManager::LoadOrGet(id))); + }, SHDragDrop::DRAG_RESOURCE); } else { diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp index 775754d7..3eb8564f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp @@ -1,9 +1,11 @@ #include "SHpch.h" +#include "Serialization/SHSerializationHelper.hpp" #include "SHMaterialInspector.h" #include "Editor/SHImGuiHelpers.hpp" #include #include "Assets/SHAssetManager.h" +#include "Editor/IconsMaterialDesign.h" #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Editor/SHEditorWidgets.hpp" #include "Resource/SHResourceManager.h" @@ -11,14 +13,24 @@ namespace SHADE { SHMaterialInspector::SHMaterialInspector() - :SHEditorWindow("Material Inspector", ImGuiWindowFlags_MenuBar), isNewMaterial(false), currentViewedMaterial(0) + :SHEditorWindow("Material Inspector", ImGuiWindowFlags_MenuBar), isDirty(false), isNewMaterial(false), currentViewedMaterial(0) { } - void SHMaterialInspector::OpenMaterial(AssetID const& assetId) noexcept + void SHMaterialInspector::OpenMaterial(AssetID const& assetId, bool isNew) noexcept { //Get mat data - isNewMaterial = false; + if(isDirty) + return; + isDirty = isNew; + isOpen = true; + SetFocusToWindow(); + currentViewedMaterial = assetId; + + //currentMatSpec = //Get mat spec + + currentMatSpec = SHResourceManager::LoadOrGet(assetId); + currentMaterial = SHResourceManager::LoadOrGet(assetId); } void SHMaterialInspector::Init() @@ -30,18 +42,26 @@ namespace SHADE { SHEditorWindow::Update(); - if(Begin()) + if (Begin()) { - DrawMenuBar(); + if(currentViewedMaterial) + { + DrawMenuBar(); - if(SHEditorWidgets::DragDropReadOnlyField("Vertex Shader", std::to_string(currentMatSpec.vertexShader), [&](){return currentMatSpec.vertexShader;}, [&](AssetID const& id){currentMatSpec.vertexShader = id;}, SHDragDrop::DRAG_RESOURCE)) - { - vertShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.vertexShader); - } - if(SHEditorWidgets::DragDropReadOnlyField("Fragment Shader", std::to_string(currentMatSpec.fragShader), [&](){return currentMatSpec.fragShader;}, [&](AssetID const& id){currentMatSpec.fragShader = id;}, SHDragDrop::DRAG_RESOURCE)) - { - fragShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec.fragShader); + //if (SHEditorWidgets::DragDropReadOnlyField("Vertex Shader", std::to_string(currentMatSpec->vertexShader), [&]() {return currentMatSpec->vertexShader; }, [&](AssetID const& id) {currentMatSpec->vertexShader = id; }, SHDragDrop::DRAG_RESOURCE)) + //{ + // isDirty = true; + // vertShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec->vertexShader); + //} + //if (SHEditorWidgets::DragDropReadOnlyField("Fragment Shader", std::to_string(currentMatSpec->fragShader), [&]() {return currentMatSpec->fragShader; }, [&](AssetID const& id) {currentMatSpec->fragShader = id; }, SHDragDrop::DRAG_RESOURCE)) + //{ + // isDirty = true; + // fragShaderHandle = SHResourceManager::LoadOrGet(currentMatSpec->fragShader); + //} + + DrawShaderProperties(/*fragShaderHandle*/); } + } ImGui::End(); } @@ -51,67 +71,187 @@ namespace SHADE SHEditorWindow::Exit(); } - void SHMaterialInspector::CreateNewMaterial() - { - isNewMaterial = true; - //prompt for a name - currentViewedMaterial = SHAssetManager::CreateNewAsset(AssetType::MATERIAL, "NewMaterial"); - currentMatSpec = {}; - vertShaderHandle = {}; - fragShaderHandle = {}; - } - void SHMaterialInspector::DrawMenuBar() { - if(ImGui::BeginMenuBar()) + if (ImGui::BeginMenuBar()) { + ImGui::BeginDisabled(!isDirty); + if(ImGui::Button(std::format("{} Save", ICON_MD_SAVE).data())) + { + //save + if(auto matAsset = SHAssetManager::GetData(currentViewedMaterial)) + { + YAML::Emitter out; + out << YAML::BeginSeq; + out << YAML::convert::encode(*currentMatSpec); + out << YAML::EndSeq; + matAsset->data = out.c_str(); + + Handle pipelineProperties = currentMaterial->GetShaderBlockInterface(); + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); + const YAML::Node& PROP_NODE = currentMatSpec->properties[PROP_NAME.data()]; + if (PROP_NODE.IsDefined()) + { + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + currentMaterial->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + currentMaterial->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + currentMaterial->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + currentMaterial->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + currentMaterial->SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + } + } + + if(SHAssetManager::SaveAsset(currentViewedMaterial)) + { + isDirty = false; + } + } + } + ImGui::EndDisabled(); ImGui::EndMenuBar(); } } - void SHMaterialInspector::DrawShaderProperties(Handle shaderModule) + void SHMaterialInspector::DrawShaderProperties(/*Handle shaderModule*/) { - auto interface = shaderModule->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); + /*if(!shaderModule) + return;*/ + auto gfxSystem = SHSystemManager::GetSystem(); + auto interface = gfxSystem->GetDefaultMaterialInstance()->GetBaseMaterial()->GetShaderBlockInterface(); + //auto interface = shaderModule->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); - int const varCount = static_cast(interface->GetVariableCount()); - - for(int i = 0; i < varCount; ++i) + int const varCount = static_cast(interface->GetVariableCount()); + + for (int i = 0; i < varCount; ++i) + { + auto variable = interface->GetVariable(i); + const std::string& VAR_NAME = interface->GetVariableName(i); + if(VAR_NAME.empty()) + continue; + switch (variable->type) { - auto variable = interface->GetVariable(i); - const std::string& VAR_NAME = interface->GetVariableName(i); - switch (variable->type) + case SHShaderBlockInterface::Variable::Type::FLOAT: + isDirty |= SHEditorWidgets::DragFloat(VAR_NAME, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return 0.0f; + }, + [&](float const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + break; + case SHShaderBlockInterface::Variable::Type::INT: + isDirty |= SHEditorWidgets::DragInt(VAR_NAME, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return 0; + }, + [&](int const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + if(SHDragDrop::BeginTarget()) { - case SHShaderBlockInterface::Variable::Type::FLOAT: - SHEditorWidgets::DragFloat(VAR_NAME, [&]() - { - if(currentMatSpec.properties[VAR_NAME].IsDefined()) - return currentMatSpec.properties[VAR_NAME].as(); - else - return 0.0f; - }, - [&](float const& value) - { - currentMatSpec.properties[VAR_NAME] = value; - } - ); - break; - case SHShaderBlockInterface::Variable::Type::INT: - - break; - case SHShaderBlockInterface::Variable::Type::VECTOR2: - - break; - case SHShaderBlockInterface::Variable::Type::VECTOR3: - - break; - case SHShaderBlockInterface::Variable::Type::VECTOR4: - - break; - case SHShaderBlockInterface::Variable::Type::OTHER: - default: - continue; - break; + if(AssetID* payload = SHDragDrop::AcceptPayload(SHDragDrop::DRAG_RESOURCE)) + { + currentMatSpec->properties[VAR_NAME] = *payload; + isDirty = true; + SHDragDrop::EndTarget(); + } } + break; + case SHShaderBlockInterface::Variable::Type::VECTOR2: + isDirty |= SHEditorWidgets::DragVec2(VAR_NAME, { "X", "Y" }, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return SHVec2::Zero; + }, + [&](SHVec2 const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + break; + case SHShaderBlockInterface::Variable::Type::VECTOR3: + isDirty |= SHEditorWidgets::DragVec3(VAR_NAME, { "X", "Y", "Z" }, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return SHVec3::Zero; + }, + [&](SHVec3 const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + break; + case SHShaderBlockInterface::Variable::Type::VECTOR4: + isDirty |= SHEditorWidgets::DragVec4(VAR_NAME, { "X", "Y", "Z", "W" }, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return SHVec4::Zero; + }, + [&](SHVec4 const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + break; + case SHShaderBlockInterface::Variable::Type::OTHER: + isDirty |= SHEditorWidgets::InputText(VAR_NAME, + [&]() + { + if (currentMatSpec->properties[VAR_NAME].IsDefined()) + return currentMatSpec->properties[VAR_NAME].as(); + else + return std::string(); + }, + [&](std::string const& value) + { + currentMatSpec->properties[VAR_NAME] = value; + } + ); + default: + continue; + break; } + } } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h index 20e165a7..79885399 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h @@ -18,15 +18,16 @@ namespace SHADE void Update() override; void Exit() override; - void CreateNewMaterial(); - void OpenMaterial(AssetID const& assetId) noexcept; + void OpenMaterial(AssetID const& assetId, bool isNew = false) noexcept; private: void DrawMenuBar(); - void DrawShaderProperties(Handle shaderModule); + void DrawShaderProperties(/*Handle shaderModule*/); + bool isDirty; bool isNewMaterial; AssetID currentViewedMaterial; - SHMaterialSpec currentMatSpec; + Handle currentMatSpec; + Handle currentMaterial; Handle vertShaderHandle, fragShaderHandle; }; } diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp index b5a691d8..5f00cc37 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.cpp @@ -19,7 +19,7 @@ namespace SHADE //|| Public Member Functions || //#==============================================================# SHEditorWindow::SHEditorWindow(std::string_view const& name, ImGuiWindowFlags const& inFlags) - : windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) + :isOpen(true), isWindowHovered(false), windowName(name), windowFlags(inFlags), io(ImGui::GetIO()) { } @@ -68,5 +68,10 @@ namespace SHADE void SHEditorWindow::OnPosChange() { } + + void SHEditorWindow::SetFocusToWindow() + { + ImGui::SetWindowFocus(windowName.data()); + } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h index 239d8223..faacd8f2 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindow.h @@ -34,6 +34,7 @@ namespace SHADE virtual bool Begin(); virtual void OnResize(); virtual void OnPosChange(); + virtual void SetFocusToWindow(); ImGuiWindowFlags windowFlags = 0; ImGuiIO& io; diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index 5208c6d9..2fcde2b2 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -1,7 +1,8 @@ #pragma once -#include "MenuBar/SHEditorMenuBar.h" //Menu Bar -#include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel -#include "Inspector/SHEditorInspector.h" //Inspector -#include "Profiling/SHEditorProfiler.h" //Profiler -#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport -#include "AssetBrowser/SHAssetBrowser.h" //Asset Browser \ No newline at end of file +#include "MenuBar/SHEditorMenuBar.h" //Menu Bar +#include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel +#include "Inspector/SHEditorInspector.h" //Inspector +#include "Profiling/SHEditorProfiler.h" //Profiler +#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport +#include "AssetBrowser/SHAssetBrowser.h" //Asset Browser +#include "MaterialInspector/SHMaterialInspector.h" //Material Inspector \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index cf5056a5..8bf4c17b 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -93,6 +93,8 @@ namespace SHADE SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); io = &ImGui::GetIO(); diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 053348d7..0855d68d 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -422,12 +422,13 @@ namespace SHADE ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); - bool const changed = ImGui::InputText("##", &text, ImGuiInputTextFlags_ReadOnly, nullptr, nullptr); + bool changed = ImGui::InputText("##", &text, ImGuiInputTextFlags_ReadOnly, nullptr, nullptr); if(SHDragDrop::BeginTarget()) { if(T* payload = SHDragDrop::AcceptPayload(dragDropTag)) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), *payload, set)), false); + changed = true; SHDragDrop::EndTarget(); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp index 0652b2bf..0dabc4e8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.cpp @@ -34,7 +34,7 @@ namespace SHADE fShaderMod = shader; } vertexShader = SHResourceManager::GetAssetID(vShaderMod).value_or(0); - fragShader = SHResourceManager::GetAssetID(vShaderMod).value_or(0); + fragShader = SHResourceManager::GetAssetID(fShaderMod).value_or(0); subpassName = material.GetPipeline()->GetPipelineState().GetSubpass()->GetName(); // Write Properties diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h index 03928cfa..9c2177c3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h @@ -46,6 +46,6 @@ namespace SHADE /* Constructors */ /*---------------------------------------------------------------------------------*/ SHMaterialSpec() = default; - SHMaterialSpec(const SHMaterial& material); + explicit SHMaterialSpec(const SHMaterial& material); }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index d8f4f8c2..6e78eb9f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -70,7 +70,7 @@ namespace SHADE , inputImageDescriptors{ std::move(rhs.inputImageDescriptors) } , inputDescriptorLayout{ rhs.inputDescriptorLayout } , inputSamplers{ rhs.inputSamplers } - + , name { rhs.name } { } @@ -105,6 +105,7 @@ namespace SHADE inputImageDescriptors = std::move(rhs.inputImageDescriptors); inputDescriptorLayout = rhs.inputDescriptorLayout; inputSamplers = rhs.inputSamplers; + name = std::move(rhs.name); return *this; } diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp index f214c094..67c83266 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.cpp @@ -54,17 +54,7 @@ namespace SHADE { return variables.size(); } - - SHShaderBlockInterface::SHShaderBlockInterface(void) noexcept - : bytesRequired{ 0 } - {} - - SHShaderBlockInterface::SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept - : variables { std::move(rhs.variables) } - , variableIndexing { std::move(rhs.variableIndexing) } - , bytesRequired { rhs.bytesRequired } - {} - + void SHShaderBlockInterface::SetBytesRequired(uint32_t bytes) noexcept { bytesRequired = bytes; @@ -75,16 +65,4 @@ namespace SHADE { return bytesRequired; } - - SHADE::SHShaderBlockInterface& SHShaderBlockInterface::operator=(SHShaderBlockInterface&& rhs) noexcept - { - if (&rhs == this) - return *this; - - variables = std::move(rhs.variables); - variableIndexing = std::move(rhs.variableIndexing); - bytesRequired = rhs.bytesRequired; - - return *this; - } } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h index ae75e2c8..8b7ccb97 100644 --- a/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h +++ b/SHADE_Engine/src/Graphics/Shaders/BlockInterface/SHShaderBlockInterface.h @@ -33,7 +33,7 @@ namespace SHADE std::unordered_map variableIndexing; //! bytes required by the block (includes padding). This variable is required - uint32_t bytesRequired; + uint32_t bytesRequired = 0; public: void AddVariable (std::string name, Variable&& newVariable) noexcept; @@ -43,13 +43,6 @@ namespace SHADE const std::string& GetVariableName(uint32_t index) const noexcept; size_t GetVariableCount() const noexcept; - /*-----------------------------------------------------------------------*/ - /* CTORS AND DTORS */ - /*-----------------------------------------------------------------------*/ - SHShaderBlockInterface(void) noexcept; - SHShaderBlockInterface(SHShaderBlockInterface&& rhs) noexcept; - SHShaderBlockInterface& operator=(SHShaderBlockInterface&& rhs) noexcept; - /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index aa0a0af9..4f2acd45 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -221,7 +221,14 @@ namespace SHADE { // Get the data we need to construct auto matSpec = resourceHub.Create(); - *matSpec = YAML::Node(assetData.data).as(); + YAML::convert::decode(*YAML::Load(assetData.data).begin(), *matSpec); + // Failed to load + if (matSpec->subpassName == "") + { + // Use default material + *matSpec = SHMaterialSpec(*gfxSystem->GetDefaultMaterial()); + } + return matSpec; } // Materials @@ -260,8 +267,8 @@ namespace SHADE for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) { const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); - const auto& PROP_NODE = assetData.properties; - if (PROP_NODE) + const YAML::Node& PROP_NODE = assetData.properties[PROP_NAME.data()]; + if (PROP_NODE.IsDefined()) { const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); @@ -271,7 +278,18 @@ namespace SHADE matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::INT: - matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); + { + Handle texture = LoadOrGet(PROP_NODE.as()); + if (texture) + { + matHandle->SetProperty(VARIABLE->offset, texture->TextureArrayIndex); + } + else + { + SHLOG_WARNING("[] Attempted to load invalid texture! Setting to 0."); + matHandle->SetProperty(VARIABLE->offset, 0); + } + } break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 8f1b972c..ed4f118a 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -267,17 +267,17 @@ namespace YAML static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) { // Retrieve Shader Asset IDs - if (node[VERT_SHADER_YAML_TAG.data()]) + if (node[VERT_SHADER_YAML_TAG.data()].IsDefined()) rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); - if (node[FRAG_SHADER_YAML_TAG.data()]) + if (node[FRAG_SHADER_YAML_TAG.data()].IsDefined()) rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); // Retrieve Subpass - if (node[SUBPASS_YAML_TAG.data()]) + if (node[SUBPASS_YAML_TAG.data()].IsDefined()) rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); // Retrieve - if (node[PROPS_YAML_TAG.data()]) + if (node[PROPS_YAML_TAG.data()].IsDefined()) rhs.properties = node[PROPS_YAML_TAG.data()]; return true; From c96eeb7c5b8dc0409f969c3d2fe6b35b56fe6299 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 2 Nov 2022 22:36:44 +0800 Subject: [PATCH 657/793] Removed xml --- bin/Debug/SHADE_CSharp.xml | 1029 ------ bin/Debug/SHADE_Managed.xml | 6250 --------------------------------- bin/Release/SHADE_CSharp.xml | 1029 ------ bin/Release/SHADE_Managed.xml | 6250 --------------------------------- 4 files changed, 14558 deletions(-) delete mode 100644 bin/Debug/SHADE_CSharp.xml delete mode 100644 bin/Debug/SHADE_Managed.xml delete mode 100644 bin/Release/SHADE_CSharp.xml delete mode 100644 bin/Release/SHADE_Managed.xml diff --git a/bin/Debug/SHADE_CSharp.xml b/bin/Debug/SHADE_CSharp.xml deleted file mode 100644 index daeaa3c5..00000000 --- a/bin/Debug/SHADE_CSharp.xml +++ /dev/null @@ -1,1029 +0,0 @@ - - - - SHADE_CSharp - - - - - Interface for a CallbackAction that all variants inherit from. - - - - - Whether or not this CallbackAction is runtime assigned. If it is, then the - TargetMethodName and TargetObject properties are invalid. - - - - - Name of the method that this CallbackAction is using. - - - - - Object which the specified target method is called on. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 1 parameter. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 2 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 3 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 4 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 5 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 6 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 7 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 8 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 9 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 10 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Interface for a CallbackEvent that all variants inherit from. - - - - - Registers an empty ICallbackAction. - - - - - Registers an ICallbackAction with the event such that it will be called in - future - - ICallbackAction to register with. - - - - Deregisters an ICallbackAction that was previously added. This should - only emit a warning if an action that was not previous added was - provided. - - ICallbackAction to remove. - - - - Iterable set of ICallbackActions that were registered to this event. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - diff --git a/bin/Debug/SHADE_Managed.xml b/bin/Debug/SHADE_Managed.xml deleted file mode 100644 index 7b653116..00000000 --- a/bin/Debug/SHADE_Managed.xml +++ /dev/null @@ -1,6250 +0,0 @@ - - - - "SHADE_Managed" - - - - -Retrieves the duration that the specified key has not been held or was last -not been held for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has been held or was last held -for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has not been held or was last -not been held for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has been held or was last held -for. - - The key to check. - Time in seconds that the key was held. - - - -Sets the position of the mouse cursor relative to the top left corner of the -window. - - -Position of the mouse in window pixel coordinates to set. - - - - -Checks if a specified mouse button is no longer pressed and was pressed -before. - - MouseCode of the mouse button to check. - -True during the frame the user releases the given mouse button. - - - - -Checks if a specified mouse button is pressed and was not pressed before. - - MouseCode of the mouse button to check. - -True during the frame the user pressed the given mouse button. - - - - -Checks if a specified mouse button is being held down. -This will also be true if GetMouseButtonDown() is true. - - MouseCode of the mouse button to check. - True while the user holds down the mouse button specified. - - - -Checks if a specified key is no longer pressed pressed and was pressed -before. - - KeyCode of the key to check. - -True during the frame the user releases the key identified by name. - - - - -Checks if a specified key is pressed and was not pressed before. - - KeyCode of the key to check. - -True during the frame the user starts pressing down the key specified. - - - - -Checks if a specified key is being held down. -This will also be true if GetKeyDown() is true. - - KeyCode of the key to check. - True while the user holds down the key specified. - - - -Amnount of vertical mouse scroll in this frame. - - - - -Mouse position in screen coordinates relative to the top left of the window. -This value is a Vector3 for compatibility with functions that have Vector3 -arguments. The z component of the Vector3 is always 0 - - - - -Represents the available supported mouse keycodes that can be passed into the -mouse-button-based Input functions. - - - - -Represents the available supported keycodes that can be passed into the -key-based Input functions. - -Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html -Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode - - - - -Static class responsible for providing access to Input-related functionality. - - - - -Simple attribute to mark that a field in a Script should be serialised. - - - - -Cleans up all required components for managed code. - - - - -Reloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. -Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). - - - - -Loads the managed script assembly. Ensure this is only called after -UnloadScriptAssembly() has been called. - - - - -Unloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Initialises all required components for managed code. - - - - -Name of the Managed Library that contains the C# scripts written externally. - - - - -Static class that contains the functions for interfacing with the core -PlushieEngine written in C++ for managing the lifecycle of managed code. - - - - -Default Constructor - - - - -Custom AssemblyLoadContext marked as collectible so that it can be unloaded. - - - - -Time taken for Physics simulations. You should use this for operations -within Script.FixedUpdate() - - - - -Time taken to process the previous frame. - - - - -Static class that contains the functions for working with time. - - - - -Static class that wraps up certain functions in the SHPhysicsSystem so that -accessing it from SHADE_Managed would not cause issues due to C++20 features. - - - - -Constructor for a Tooltip attribute that fills in the description. - - Text to be shown when a field is hovered. - - - -Description that is to be shown in the Tooltip. - - - - -Simple attribute to provide a field in a script with a tooltip. - - - - -Checks if a specified file exists. - - File path to the file to check. - True if the file exists - - - -Deletes the folder and all files in it as specified by the file path. - - File path to the file to delete. - - - -Deletes the file as specified by the file path. - - File path to the file to delete. - - - -Reads the file via the specified path that represents a build log of error -and warning messages. - - -File path to the build log of script builds done by BuildScriptAssembly() to -dump and process. - - - - -Registers events for the scripting system - - - - -Loads all the function pointers to CLR code that we need to execute. - - - - -Generates a .csproj file for editing and compiling the C# scripts. - - File path to the generated file. - - - -Utilises execution of a external batch file for invoking the dotnet build -tool to compile C# scripts in the Assets folder into the SHADE_Scripting -C# assembly DLL. - - -Whether or not a debug build will be built. Only debug built C# assemblies -can be debugged. - - -Whether or not we are reloading the assembly, if so, unload and then reload it. - - Whether or not the build succeeded. - - - -Performs a redo for script inspector changes if it exists. - - - - -Performs an undo for script inspector changes if it exists. - - - - -Renders the set of attached Scripts for the specified Entity into the -inspector. -
    -This function is meant for consumption from native code in the inspector -rendering code. -
    - The Entity to render the Scripts of. -
    - - -Creates scripts and sets fields for the specified Entity based on the specified -YAML node. - - The Entity to deserialise a Script on to. - -YAML Node that contains the serialised script data. - - True if successfully deserialised. - - - -Performs serialization of all scripts for the specified entity into the -YAML::Node specified. This node will contain all serialised scripts after -calling this function. - - The Entity to Serialise. - -YAML Node that will store the serialised scripts. - - True if successfully serialised. - - - -Removes all Scripts attached to the specified Entity. Unlike -RemoveAllScripts(), this removes all the scripts immediately. -Does not do anything if the specified Entity is invalid or does not have any -Scripts attached. - - The entity to remove the scripts from. - -Whether or not to call OnDestroy on the scripts. This is ignored if not in -play mode. - - - - -Removes all Scripts attached to the specified Entity. Does not do anything -if the specified Entity is invalid or does not have any Scripts -attached. - - The entity to remove the scripts from. - - - -Adds a Script to a specified Entity. Note that while you can call this -multiple times on a specified Entity, it will work for all intents and -purposes but GetScript<T>() (C# only) currently only -gives you the first Script added of the specified type. - - The entity to add a script to. - Type name of the script to add. - -True if successfully added. False otherwise with the error logged to the -console. - - - - -Shuts down the DotNetRuntime. - - - - -Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached -to Entities. - - - - -Executes the FixedUpdate()s of the Scripts that are attached to -Entities. - - - - -Reloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Unloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Loads the managed script assembly. Ensure this is only called after -UnloadScriptAssembly() has been called. - - - - -Initialises the DotNetRuntime and retrieves function pointers to all -functions on the CLR used to interface with the engine. - - - - -Manages initialisation of the DotNetRuntime and interfacing with CLR code written -and executed on .NET. - - - - -Deserialises a YAML node that contains a map of Scripts and copies the -deserialised data into the specified object if there are matching fields. - - -The JSON string that contains the data to copy into this Script object. - - The object to copy deserialised data into. - - - -Creates a JSON node that represents the specified object and its associated -serialisable fields. Public fields and fields marked with the SerialiseField -attribute will be serialised. - - The object to serialise. - - - -Checks if a specified field is a candidate for serialisation. This means that -the field is public or private with the [SerialiseField] attribute. - - The field to check. - -True if the specified field is a candidate for serialisation. - - - - -Retrieves a set of all non-static (instance) fields from a specified object. - - The object to get non-static fields from. - Immutable list of non-static fields. - - - -Contains useful static functions for working with Reflection. - - - -Converts the node to a YAML string. - - -Emits the node to the given output stream. - - -Emits the node to the given {@link Emitter}. If there is an error in writing, -{@link Emitter#good} will return false. - - - - Loads the input file as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - @throws {@link BadFile} if the file cannot be loaded. - - - - Loads the input stream as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input file as a single YAML document. - - @throws {@link ParserException} if it is malformed. - @throws {@link BadFile} if the file cannot be loaded. - - - - Loads the input stream as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - -Handles a "TAG" directive, which should be of the form 'handle prefix', -where 'handle' is converted to 'prefix' in the file. - - - -Handles a "YAML" directive, which should be of the form 'major.minor' (like -a version number). - - - -Reads any directives that are next in the queue, setting the internal -{@code m_pDirectives} state. - - - - Handles the next document by calling events on the {@code eventHandler}. - - @throw a ParserException on error. - @return false if there are no more documents - - - -Resets the parser with the given input stream. Any existing state is -erased. - - - -Evaluates to true if the parser has some valid input to be read. - - -Constructs a parser from the given input stream. The input stream must -live as long as the parser. - - - -Constructs an empty parser (with no input. - - -A parser turns a stream of bytes into one stream of "events" per YAML -document in the input stream. - - - - -Renders a context menu when right clicked for the scripts - - The Entity to render the Scripts of. - The Script to render the inspector for. - - - -Renders a field specified into the inspector. - - The field to render. - -The object that contains the data of the field to render. - - - - -Renders a single specified Script's inspector. - - The Entity to render the Scripts of. - The Script to render the inspector for. - -Indices used internally to differentiate each rendered Script -inspector. This is required to open and close each Script's inspector -independently from each other. - - - - -Redoes the last script inspector change if there is any. - - - - -Undoes the last script inspector change if there is any. - - - - -Renders a dropdown button that allows for the addition of PlushieScripts -onto the specified Entity. - - The Entity to add PlushieScripts to. - - - -Renders the set of attached Scripts for the specified Entity into the -inspector. -
    -This function is meant for consumption from native code in the inspector -rendering code. -
    - The Entity to render the Scripts of. -
    - - -Static class for Editor-related functions - - - - -Processes a YAML node that contains a list of multiple scripts to be loaded -into the specified Entity. -

    -This function should only be called from native unmanaged code. -
    - -The Entity to attach the deserialised Scripts to. - - -Pointer to the YAML::Node that contains serialized script data. - - -
    - - -Populates a YAML node with the scripts for a specified Entity. -

    -This function should only be called from native unmanaged code. -
    - The Entity to Serialise. - -Pointer to a YAML::Node that will be populated with all of the serialised -scripts and their associated fields. - - -True if serialisation is successful. False if the buffer is too small for -the serialised output. - -
    - - -Executes OnCollision*() and OnTrigger*() for all scripts. - - - - -Executes LateUpdate() for all scripts. - - - - -Executes Update() for all scripts. - - - - -Executes FixedUpdate() for all scripts. - - - - -Retrieves a immutable list of available scripts that can be added. - - Immutable list of available scripts that can be added. - - - -Cleans up data stored in the ScriptStore to free up memory for garbage -collection. - - - - -Cleans up scripts that were marked for deletion. This calls the OnDestroy() -for these Scripts. - - - - -Sets up scripts that were marked for initialization. This calls the Awake() -and Start() for Scripts that have yet to have done so. - - - - -Initializes the ScriptStore to allocate and pre-populate reflection data. - - - - -Removes all Scripts attached to the specified Entity. Unlike -RemoveAllScripts(), this removes all the scripts immediately. -Does not do anything if the specified Entity is invalid or does not have any -Scripts attached. - - The entity to remove the scripts from. - -Whether or not to call OnDestroy on the scripts.This is ignored if not in -play mode. - - - - -Removes all Scripts attached to the specified Entity. Does not do anything -if the specified Entity is invalid or does not have any Scripts -attached. - - The entity to remove the scripts from. - - - -Removes a specific script from the - - The entity to remove the script from. - The script to remove. - True if successfully removed. False otherwise. - - - -Removes all Scripts of the specified type from the specified Entity. - - -Type of script to remove. -This needs to be a default constructable Script. - - The entity to remove the script from. - -If the specified Entity is invalid. - - - - -Retrieves an immutable list of all scripts attached to a specified Entity. - - -The entity which the scripts to retrieve are attached. - - -Immutable list of references to scripts attached to the specified Entity. -This can also be null if there are no scripts at all or an invalid Entity -was specified. - - - - -Retrieves a immutable list of scripts from the specified Entity that -matches the specified type. -
    -Note that this function allocates. It should be used sparingly. -
    - -Type of scripts to get. -This needs to be a default constructable Script. - - -The entity which the scripts to retrieve are attached. - - -Immutable list of references to scripts of the specified type. - -
    - - -Retrieves the first Script from the specified Entity's children that matches -the specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - -The entity which the script to retrieve is attached. - - -Reference to the script. This can be null if no script of the specified -type is attached. - - -If the specified Entity is invalid. - - - - -Retrieves the first Script from the specified Entity that matches the -specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - -The entity which the script to retrieve is attached. - - -Reference to the script. This can be null if no script of the specified -type is attached. - - -If the specified Entity is invalid. - - - - -Adds a Script to a specified Entity. -
    -This function is meant for consumption from native code or for serialisation -purposes. If you are writing in C# or C++/CLI and not doing serialisation, -use AddScript<T>() instead as it is faster. -
    - The entity to add a script to. - The entity to add a script to. - -Out parameter handle to the Script that was created. - - -True if successfully added. False otherwise with the error logged to the -console. - -
    - - -Adds a Script to a specified Entity. -
    -This function is meant for consumption from native code. If you are writing -in C# or C++/CLI, use AddScript<T>() instead as it is faster. -
    - The entity to add a script to. - The entity to add a script to. - -True if successfully added. False otherwise with the error logged to the -console. - -
    - - -Adds a Script to a specified Entity. - - -Type of script to add. -This needs to be a default constructable PlushieScript. - - The entity to add a script to. - Reference to the script added. - -If the specified Entity is invalid. - - - - -Responsible for managing all scripts attached to Entities as well as executing -all lifecycle functions of scripts. - - - - -Checks if two Colors are not approximately equal. - - Color to compare. - Another Color to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Colors are approximately equal. - - Color to compare. - Another Color to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Color with a scalar value and returns -the result. - - Scalar to divide with. - Color to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Color with a scalar value and returns -the result. - - Color to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Colors and returns the -result. - - Color to multiply with. - Another Color to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Color from another Color and returns the result. - - Color to subtract from. - Another Color to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Colors together and returns the result. - - Color to add. - Another Color to add. - The result of lhs added to rhs - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Color, returned when t = 0.0. - The end Color, returned when t = 1.0. - Value used to interpolate between a and b. - The interpolated Color. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Color, returned when t = 0.0. - The end Color, returned when t = 1.0. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector3. - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Alpha component of the colour. Ranges from 0.0f to 1.0f. - - - - -Blue component of the colour. Ranges from 0.0f to 1.0f. - - - - -Green component of the colour. Ranges from 0.0f to 1.0f. - - - - -Red component of the colour. Ranges from 0.0f to 1.0f. - - - - -Constructor to construct a Color with the specified components. - - Red component to set. - Green component to set. - Blue component to set. - Alpha component to set. - - - -Constructor to construct a Color with the specified components with the -alpha component set to 1.0f. - - Red component to set. - Green component to set. - Blue component to set. - - - -Constructor to construct a Color with the specified components with the -blue and alpha component set to 1.0f. - - Red component to set. - Green component to set. - - - -Constructor to construct a Color with the specified components with the -green, blue and alpha component set to 1.0f. - - Red component to set. - - - -Pure yellow, mix of pure red and green. - - - - -Pure magenta, mix of pure red and blue. - - - - -Pure cyan, mix of pure green and blue. - - - - -Pure blue. - - - - -Pure green. - - - - -Pure red. - - - - -Pure white. - - - - -Dark Gray, darker than gray. - - - - -Gray, halfway between black and white. - - - - -Light Gray, lighter than gray. - - - - -Pure black. - - - - -A static class that contains a set of default Colors. - - - - -CLR version of the the SHADE Engine's Color struct which describes a Color -encoded using floating point numbers that range from 0.0f to 1.0f. - - - - -Creates a inline button widget. -
    -Wraps up ImGui::Button(). -
    - Text to display. - True if button was pressed. -
    - - -Creates a small inline button widget. -
    -Wraps up ImGui::SmallButton(). -
    - Text to display. - True if button was pressed. -
    - - -Creates a visual text widget. -
    -Wraps up ImGui::Text(). -
    - Text to display. -
    - - -Creates a menu item in the list of items for a mini popup. -
    -Wraps up ImGui::MenuItem(). -
    - Label used to identify this widget. - Whether or not the menu item was selected. -
    - - -Opens the popup that was defined with the specified label. -
    -Wraps up ImGui::OpenPopup(). -
    -
    - - -Marks the end of a definition of a mini pop up that can show options. -
    -Wraps up ImGui::EndPopup(). -
    -
    - - -Marks the start of a definition of a mini pop up that can show options. -
    -Wraps up ImGui::BeginPopup(). -
    - Label used to identify this widget. - Whether or not the pop up is open. -
    - - -Creates a collapsing title header. -
    -Wraps up ImGui::CollapsingHeader(). -
    - Label for the header. - True if the header is open, false otherwise. -
    - - -Unindents the widgets rendered after this call. -
    -Wraps up ImGui::Unindent(). -
    -
    - - -Indents the widgets rendered after this call. -
    -Wraps up ImGui::Indent(). -
    -
    - - -Marks the end of a stack of ImGui widgets from the last PushID() call. -
    -Wraps up ImGui::PopID(). -
    -
    - - -Marks the start of a stack of ImGui widgets with the specified id. -
    -Wraps up ImGui::PushID(). -
    - Integer-based ID. -
    - - -Marks the start of a stack of ImGui widgets with the specified id. -
    -Wraps up ImGui::PushID(). -
    - String-based ID. -
    - - -Maximum length of a string supported by InputTextField() - - - - -Static class that contains useful functions for Editor UI using ImGui. - - - - -Redoes the last undo-ed command if it exists. - - - - -Undos the last added command if it exists. - - - - -Adds a command onto the stack. - - - - - -True if there is a redoable action in the stack. - - - - -True if there is an undoable action in the stack. - - - - -Command for the stack that represents a data modification. - - - - -Class that is able to store a stack of actions that can be done and redone. - - - - -To be called from native code when a Collision Shape has been changed. - - -The entity which has it's collision shape changed. - - - - -To be called from native code when a collision shape has been removed. - - The entity which has it's collision shape removed. - - - -Retrieves a ColliderBound at the specified index in the ColliderBound list -and casts it to the appropriate type. - - Type of the ColliderBound to cast to. - Index to retrieve a ColliderBound from. - ColliderBound for the specified index. - - - -Retrieves a ColliderBound at the specified index in the ColliderBound list. - - Index to retrieve a ColliderBound from. - ColliderBound for the specified index. - - - -Total number of ColliderShapes in the Collider component. - - - - -Constructs a Collider Component that represents a native SHColliderComponent -component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the the SHADE Engine's SHColliderComponent. -A single Collider component can contain one or multiple Collider Bounds. - - - - - - - - - - -Radius of the Bounding Sphere formed by this bound. - - - - -Center of the Bounding Sphere formed by this bound. - - - - -Sphere-shaped Collider Bound. - - - - - - - - - - -Position of the top right front corner of the Bounding Box formed by this -bound. - - - - -Position of the bottom left back corner of the Bounding Box formed by this -bound. - - - - -Half of the scale of the Bounding Box formed by this bound. - - - - -Center of the Bounding Box formed by this bound. - - - - -Box-shaped Collider Bound. - - - - -Computes a Raycast and checks if there is a collision with any object. - - The ray to cast. - Maximum distance for the raycast check. - True if the ray intersects with an object in the scene. - - - -Checks if the specified point is within this shape's bounds. - - Point to test with. - True if the point is in the shape's bounds. - - - -Base interface for all Collider Shapes. - - - -@brief The density of the collider that determines the mass of the collision shape - if it is automatically computed. Must be a positive number. - - - -@brief The bounciness factor of the physics object., clamped between [0,1].
    - 0 means the object will never bounce. - 1 means the object never loses energy on a bounce. - -
    - -@brief The friction coefficient of the physics object., clamped between [0,1].
    - 0 means the object will never experience friction. - 1 means the friction force against the object is equal to the applied force. - -
    - -@brief Sets the mass density of the physics material. -@param newDensity The density value to set. Always made positive. - - - -@brief Sets the bounciness factor of the physics material. -@param newBounciness The bounciness value to set. Clamped between [0,1]. - - - -@brief Sets the friction coefficient of the physics material. -@param newFriction The friction value to set. Clamped between [0,1]. - - - -@brief Default constructor for a physics material. -@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. -@param bounciness The bounciness of the material. Clamped between [0,1]. -@param density The mass density of the material. Always made positive. - - - - -Closes the current window, and depending on the implementation, should also -close the application. - - - - -Retrieves the current window fullscreen status. - - The current window fullscreen status.. - - - -Retrieves the current window height. - - The current window height. - - - -Retrieves the current window width. - - The current window width. - - - -Static class that wraps up certain functions in the SHGraphicsSystem so that -accessing it from SHADE_Managed would not cause issues due to C++20 features. - - - - @brief Perform ImGui and ImGui Backend Render - - - - - @brief Start new frame for editor - - - - - @brief Initialise Backend for ImGui (SDL and Vulkan backend) - - @param sdlWindow Pointer to SDL_Window - - - - @brief Set the Style for the editor - - @param style Desired style - - - - @brief Safely shutdown the editor - - - - - @brief Update the editor and add to ImGui DrawList - - @param dt Delta-time of the frame - - - - @brief Initialise the editor - - @param sdlWindow pointer to SDL_Window object created in application - - - - @brief Style options - - - - - @brief SHEditor static class contains editor variables and implementation of editor functions. - - - - - Get the YUV conversion mode, returning the correct mode for the resolution - when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC - - \since This function is available since SDL 2.0.8. - - - - Get the YUV conversion mode - - \since This function is available since SDL 2.0.8. - - - - Set the YUV conversion mode - - \since This function is available since SDL 2.0.8. - - - - Perform low-level surface scaled blitting only. - - This is a semi-private function and it performs low-level surface blitting, - assuming the input rectangles have already been clipped. - - \param src the SDL_Surface structure to be copied from - \param srcrect the SDL_Rect structure representing the rectangle to be - copied - \param dst the SDL_Surface structure that is the blit target - \param dstrect the SDL_Rect structure representing the rectangle that is - copied into - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitScaled - - - - Perform a scaled surface copy to a destination surface. - - SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is - merely a macro for this function with a less confusing name. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitScaled - - - - Perform bilinear scaling between two surfaces of the same format, 32BPP. - - \since This function is available since SDL 2.0.16. - - - - Perform a fast, low quality, stretch blit between two surfaces of the same - format. - - Please use SDL_BlitScaled() instead. - - \since This function is available since SDL 2.0.0. - - - - Perform low-level surface blitting only. - - This is a semi-private blit function and it performs low-level surface - blitting, assuming the input rectangles have already been clipped. - - Unless you know what you're doing, you should be using SDL_BlitSurface() - instead. - - \param src the SDL_Surface structure to be copied from - \param srcrect the SDL_Rect structure representing the rectangle to be - copied, or NULL to copy the entire surface - \param dst the SDL_Surface structure that is the blit target - \param dstrect the SDL_Rect structure representing the rectangle that is - copied into - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - - - - * Performs a fast blit from the source surface to the destination surface. - * - * This assumes that the source and destination rectangles are - * the same size. If either \c srcrect or \c dstrect are NULL, the entire - * surface (\c src or \c dst) is copied. The final blit rectangles are saved - * in \c srcrect and \c dstrect after all clipping is performed. - * - * \returns 0 if the blit is successful, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without blending and colorkey - * are defined as follows: - * \verbatim - RGBA->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB, set destination alpha to source per-surface alpha value. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - - RGBA->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy all of RGBA to the destination. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - \endverbatim - * - * You should call SDL_BlitSurface() unless you know exactly how SDL - * blitting works internally and how to use the other blit functions. - - Perform a fast blit from the source surface to the destination surface. - - SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a - macro for this function with a less confusing name. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - - - - Perform a fast fill of a set of rectangles with a specific color. - - `color` should be a pixel of the format used by the surface, and can be - generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - alpha component then the destination is simply filled with that alpha - information, no blending takes place. - - If there is a clip rectangle set on the destination (set via - SDL_SetClipRect()), then this function will fill based on the intersection - of the clip rectangle and `rect`. - - \param dst the SDL_Surface structure that is the drawing target - \param rects an array of SDL_Rects representing the rectangles to fill. - \param count the number of rectangles in the array - \param color the color to fill with - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FillRect - - - - Perform a fast fill of a rectangle with a specific color. - - `color` should be a pixel of the format used by the surface, and can be - generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - alpha component then the destination is simply filled with that alpha - information, no blending takes place. - - If there is a clip rectangle set on the destination (set via - SDL_SetClipRect()), then this function will fill based on the intersection - of the clip rectangle and `rect`. - - \param dst the SDL_Surface structure that is the drawing target - \param rect the SDL_Rect structure representing the rectangle to fill, or - NULL to fill the entire surface - \param color the color to fill with - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FillRects - - - - Premultiply the alpha on a block of pixels. - - This is safe to use with src == dst, but not for other overlapping areas. - - This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. - - \param width the width of the block to convert, in pixels - \param height the height of the block to convert, in pixels - \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - \param src a pointer to the source pixels - \param src_pitch the pitch of the source pixels, in bytes - \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - \param dst a pointer to be filled in with premultiplied pixel data - \param dst_pitch the pitch of the destination pixels, in bytes - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.18. - - - - Copy a block of pixels of one format to another format. - - \param width the width of the block to copy, in pixels - \param height the height of the block to copy, in pixels - \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - \param src a pointer to the source pixels - \param src_pitch the pitch of the source pixels, in bytes - \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - \param dst a pointer to be filled in with new pixel data - \param dst_pitch the pitch of the destination pixels, in bytes - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - - - Copy an existing surface to a new surface of the specified format enum. - - This function operates just like SDL_ConvertSurface(), but accepts an - SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, - it might be easier to call but it doesn't have access to palette - information for the destination surface, in case that would be important. - - \param src the existing SDL_Surface structure to convert - \param pixel_format the SDL_PixelFormatEnum that the new surface is - optimized for - \param flags the flags are unused and should be set to 0; this is a - leftover from SDL 1.2's API - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - \sa SDL_ConvertSurface - \sa SDL_CreateRGBSurface - - - - Copy an existing surface to a new surface of the specified format. - - This function is used to optimize images for faster *repeat* blitting. This - is accomplished by converting the original and storing the result as a new - surface. The new, optimized surface can then be used as the source for - future blits, making them faster. - - \param src the existing SDL_Surface structure to convert - \param fmt the SDL_PixelFormat structure that the new surface is optimized - for - \param flags the flags are unused and should be set to 0; this is a - leftover from SDL 1.2's API - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - \sa SDL_ConvertSurfaceFormat - \sa SDL_CreateRGBSurface - - - - Get the clipping rectangle for a surface. - - When `surface` is the destination of a blit, only the area within the clip - rectangle is drawn into. - - \param surface the SDL_Surface structure representing the surface to be - clipped - \param rect an SDL_Rect structure filled in with the clipping rectangle for - the surface - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_SetClipRect - - - - Set the clipping rectangle for a surface. - - When `surface` is the destination of a blit, only the area within the clip - rectangle is drawn into. - - Note that blits are automatically clipped to the edges of the source and - destination surfaces. - - \param surface the SDL_Surface structure to be clipped - \param rect the SDL_Rect structure representing the clipping rectangle, or - NULL to disable clipping - \returns SDL_TRUE if the rectangle intersects the surface, otherwise - SDL_FALSE and blits will be completely clipped. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_GetClipRect - - - - Get the blend mode used for blit operations. - - \param surface the SDL_Surface structure to query - \param blendMode a pointer filled in with the current SDL_BlendMode - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_SetSurfaceBlendMode - - - - Set the blend mode used for blit operations. - - To copy a surface to another surface (or texture) without blending with the - existing data, the blendmode of the SOURCE surface should be set to - `SDL_BLENDMODE_NONE`. - - \param surface the SDL_Surface structure to update - \param blendMode the SDL_BlendMode to use for blit blending - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceBlendMode - - - - Get the additional alpha value used in blit operations. - - \param surface the SDL_Surface structure to query - \param alpha a pointer filled in with the current alpha value - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceColorMod - \sa SDL_SetSurfaceAlphaMod - - - - Set an additional alpha value used in blit operations. - - When this surface is blitted, during the blit operation the source alpha - value is modulated by this alpha value according to the following formula: - - `srcA = srcA * (alpha / 255)` - - \param surface the SDL_Surface structure to update - \param alpha the alpha value multiplied into blit operations - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceAlphaMod - \sa SDL_SetSurfaceColorMod - - - - Get the additional color value multiplied into blit operations. - - \param surface the SDL_Surface structure to query - \param r a pointer filled in with the current red color value - \param g a pointer filled in with the current green color value - \param b a pointer filled in with the current blue color value - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceAlphaMod - \sa SDL_SetSurfaceColorMod - - - - Set an additional color value multiplied into blit operations. - - When this surface is blitted, during the blit operation each source color - channel is modulated by the appropriate color value according to the - following formula: - - `srcC = srcC * (color / 255)` - - \param surface the SDL_Surface structure to update - \param r the red color value multiplied into blit operations - \param g the green color value multiplied into blit operations - \param b the blue color value multiplied into blit operations - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceColorMod - \sa SDL_SetSurfaceAlphaMod - - - - Get the color key (transparent pixel) for a surface. - - The color key is a pixel of the format used by the surface, as generated by - SDL_MapRGB(). - - If the surface doesn't have color key enabled this function returns -1. - - \param surface the SDL_Surface structure to query - \param key a pointer filled in with the transparent pixel - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_SetColorKey - - - - Returns whether the surface has a color key - - It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - - \param surface the SDL_Surface structure to query - \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.9. - - \sa SDL_SetColorKey - \sa SDL_GetColorKey - - - - Set the color key (transparent pixel) in a surface. - - The color key defines a pixel value that will be treated as transparent in - a blit. For example, one can use this to specify that cyan pixels should be - considered transparent, and therefore not rendered. - - It is a pixel of the format used by the surface, as generated by - SDL_MapRGB(). - - RLE acceleration can substantially speed up blitting of images with large - horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. - - \param surface the SDL_Surface structure to update - \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key - \param key the transparent pixel - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_GetColorKey - - - - Returns whether the surface is RLE enabled - - It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - - \param surface the SDL_Surface structure to query - \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.14. - - \sa SDL_SetSurfaceRLE - - - - Save a surface to a file. - - Convenience macro. - - Set the RLE acceleration hint for a surface. - - If RLE is enabled, color key and alpha blending blits are much faster, but - the surface must be locked before directly accessing the pixels. - - \param surface the SDL_Surface structure to optimize - \param flag 0 to disable, non-zero to enable RLE acceleration - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_LockSurface - \sa SDL_UnlockSurface - - - - Load a surface from a file. - - Convenience macro. - - Save a surface to a seekable SDL data stream in BMP format. - - Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the - BMP directly. Other RGB formats with 8-bit or higher get converted to a - 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit - surface before they are saved. YUV and paletted 1-bit and 4-bit formats are - not supported. - - \param surface the SDL_Surface structure containing the image to be saved - \param dst a data stream to save to - \param freedst non-zero to close the stream after being written - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_LoadBMP_RW - \sa SDL_SaveBMP - - - - Load a BMP image from a seekable SDL data stream. - - The new surface should be freed with SDL_FreeSurface(). Not doing so will - result in a memory leak. - - src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. - Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap - from a file, convert it to an SDL_Surface and then close the file. - - \param src the data stream for the surface - \param freesrc non-zero to close the stream after being read - \returns a pointer to a new SDL_Surface structure or NULL if there was an - error; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeSurface - \sa SDL_RWFromFile - \sa SDL_LoadBMP - \sa SDL_SaveBMP_RW - - - - Release a surface after directly accessing the pixels. - - \param surface the SDL_Surface structure to be unlocked - - \since This function is available since SDL 2.0.0. - - \sa SDL_LockSurface - - - - Set up a surface for directly accessing the pixels. - - Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to - and read from `surface->pixels`, using the pixel format stored in - `surface->format`. Once you are done accessing the surface, you should use - SDL_UnlockSurface() to release it. - - Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to - 0, then you can read and write to the surface at any time, and the pixel - format of the surface will not change. - - \param surface the SDL_Surface structure to be locked - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_MUSTLOCK - \sa SDL_UnlockSurface - - - - Set the palette used by a surface. - - A single palette can be shared with many surfaces. - - \param surface the SDL_Surface structure to update - \param palette the SDL_Palette structure to use - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - - - Free an RGB surface. - - It is safe to pass NULL to this function. - - \param surface the SDL_Surface to free. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_LoadBMP - \sa SDL_LoadBMP_RW - - - - Allocate a new RGB surface with with a specific pixel format and existing - pixel data. - - This function operates mostly like SDL_CreateRGBSurfaceFrom(), except - instead of providing pixel color masks, you provide it with a predefined - format from SDL_PixelFormatEnum. - - No copy is made of the pixel data. Pixel data is not managed automatically; - you must free the surface before you free the pixel data. - - \param pixels a pointer to existing pixel data - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param pitch the pitch of the surface in bytes - \param format the SDL_PixelFormatEnum for the new surface's pixel format. - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.5. - - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - - Allocate a new RGB surface with existing pixel data. - - This function operates mostly like SDL_CreateRGBSurface(), except it does - not allocate memory for the pixel data, instead the caller provides an - existing buffer of data for the surface to use. - - No copy is made of the pixel data. Pixel data is not managed automatically; - you must free the surface before you free the pixel data. - - \param pixels a pointer to existing pixel data - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param pitch the pitch of the surface in bytes - \param Rmask the red mask for the pixels - \param Gmask the green mask for the pixels - \param Bmask the blue mask for the pixels - \param Amask the alpha mask for the pixels - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - - Allocate a new RGB surface with a specific pixel format. - - This function operates mostly like SDL_CreateRGBSurface(), except instead - of providing pixel color masks, you provide it with a predefined format - from SDL_PixelFormatEnum. - - \param flags the flags are unused and should be set to 0 - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param format the SDL_PixelFormatEnum for the new surface's pixel format. - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.5. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_FreeSurface - - - - Allocate a new RGB surface. - - If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. - If `depth` is greater than 8 bits, the pixel format is set using the - [RGBA]mask parameters. - - The [RGBA]mask parameters are the bitmasks used to extract that color from - a pixel. For instance, `Rmask` being 0xFF000000 means the red data is - stored in the most significant byte. Using zeros for the RGB masks sets a - default value, based on the depth. For example: - - ```c++ - SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); - ``` - - However, using zero for the Amask results in an Amask of 0. - - By default surfaces with an alpha mask are set up for blending as with: - - ```c++ - SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) - ``` - - You can change this by calling SDL_SetSurfaceBlendMode() and selecting a - different `blendMode`. - - \param flags the flags are unused and should be set to 0 - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param Rmask the red mask for the pixels - \param Gmask the green mask for the pixels - \param Bmask the blue mask for the pixels - \param Amask the alpha mask for the pixels - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - -Reference count -- used when freeing surface - - -info for fast blit mapping to other surfaces - - -clipping information - - -list of BlitMap that hold a reference to this surface - - -information needed for surfaces requiring locks - - -Application data associated with the surface - - - \brief A collection of pixels used in software blitting. - - \note This structure should be treated as read-only, except for \c pixels, - which, if not NULL, contains the raw pixel data for the surface. - - -\brief The type of function used for surface blitting functions. - - - - Compose a custom blend mode for renderers. - - The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept - the SDL_BlendMode returned by this function if the renderer supports it. - - A blend mode controls how the pixels from a drawing operation (source) get - combined with the pixels from the render target (destination). First, the - components of the source and destination pixels get multiplied with their - blend factors. Then, the blend operation takes the two products and - calculates the result that will get stored in the render target. - - Expressed in pseudocode, it would look like this: - - ```c - dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); - dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); - ``` - - Where the functions `colorOperation(src, dst)` and `alphaOperation(src, - dst)` can return one of the following: - - - `src + dst` - - `src - dst` - - `dst - src` - - `min(src, dst)` - - `max(src, dst)` - - The red, green, and blue components are always multiplied with the first, - second, and third components of the SDL_BlendFactor, respectively. The - fourth component is not used. - - The alpha component is always multiplied with the fourth component of the - SDL_BlendFactor. The other components are not used in the alpha - calculation. - - Support for these blend modes varies for each renderer. To check if a - specific SDL_BlendMode is supported, create a renderer and pass it to - either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will - return with an error if the blend mode is not supported. - - This list describes the support of custom blend modes for each renderer in - SDL 2.0.6. All renderers support the four blend modes listed in the - SDL_BlendMode enumeration. - - - **direct3d**: Supports all operations with all factors. However, some - factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and - `SDL_BLENDOPERATION_MAXIMUM`. - - **direct3d11**: Same as Direct3D 9. - - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL - 2.0.6. - - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - factors. Color and alpha factors need to be the same. OpenGL ES 1 - implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` - and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha - operations being different from each other. May support color and alpha - factors being different from each other. - - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, - `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` - operations with all factors. - - **psp**: No custom blend mode support. - - **software**: No custom blend mode support. - - Some renderers do not provide an alpha component for the default render - target. The `SDL_BLENDFACTOR_DST_ALPHA` and - `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this - case. - - \param srcColorFactor the SDL_BlendFactor applied to the red, green, and - blue components of the source pixels - \param dstColorFactor the SDL_BlendFactor applied to the red, green, and - blue components of the destination pixels - \param colorOperation the SDL_BlendOperation used to combine the red, - green, and blue components of the source and - destination pixels - \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of - the source pixels - \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of - the destination pixels - \param alphaOperation the SDL_BlendOperation used to combine the alpha - component of the source and destination pixels - \returns an SDL_BlendMode that represents the chosen factors and - operations. - - \since This function is available since SDL 2.0.6. - - \sa SDL_SetRenderDrawBlendMode - \sa SDL_GetRenderDrawBlendMode - \sa SDL_SetTextureBlendMode - \sa SDL_GetTextureBlendMode - - - - Calculate the intersection of a rectangle and line segment with float - precision. - - This function is used to clip a line segment to a rectangle. A line segment - contained entirely within the rectangle or that does not intersect will - remain unchanged. A line segment that crosses the rectangle at either or - both ends will be clipped to the boundary of the rectangle and the new - coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - - \param rect an SDL_FRect structure representing the rectangle to intersect - \param X1 a pointer to the starting X-coordinate of the line - \param Y1 a pointer to the starting Y-coordinate of the line - \param X2 a pointer to the ending X-coordinate of the line - \param Y2 a pointer to the ending Y-coordinate of the line - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - - - Calculate a minimal rectangle enclosing a set of points with float - precision. - - If `clip` is not NULL then only points inside of the clipping rectangle are - considered. - - \param points an array of SDL_FPoint structures representing points to be - enclosed - \param count the number of structures in the `points` array - \param clip an SDL_FRect used for clipping or NULL to enclose all points - \param result an SDL_FRect structure filled in with the minimal enclosing - rectangle - \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - points were outside of the clipping rectangle. - - \since This function is available since SDL 2.0.22. - - - - Calculate the union of two rectangles with float precision. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \param result an SDL_FRect structure filled in with the union of rectangles - `A` and `B` - - \since This function is available since SDL 2.0.22. - - - - Calculate the intersection of two rectangles with float precision. - - If `result` is NULL then this function will return SDL_FALSE. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \param result an SDL_FRect structure filled in with the intersection of - rectangles `A` and `B` - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - \sa SDL_HasIntersectionF - - - - Determine whether two rectangles intersect with float precision. - - If either pointer is NULL the function will return SDL_FALSE. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - \sa SDL_IntersectRect - - - - Returns true if the two rectangles are equal, using a default epsilon. - - \since This function is available since SDL 2.0.22. - - - - Returns true if the two rectangles are equal, within some given epsilon. - - \since This function is available since SDL 2.0.22. - - - -Returns true if the rectangle has no area. - - - -Returns true if point resides inside a rectangle. - - - - Calculate the intersection of a rectangle and line segment. - - This function is used to clip a line segment to a rectangle. A line segment - contained entirely within the rectangle or that does not intersect will - remain unchanged. A line segment that crosses the rectangle at either or - both ends will be clipped to the boundary of the rectangle and the new - coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - - \param rect an SDL_Rect structure representing the rectangle to intersect - \param X1 a pointer to the starting X-coordinate of the line - \param Y1 a pointer to the starting Y-coordinate of the line - \param X2 a pointer to the ending X-coordinate of the line - \param Y2 a pointer to the ending Y-coordinate of the line - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - - - Calculate a minimal rectangle enclosing a set of points. - - If `clip` is not NULL then only points inside of the clipping rectangle are - considered. - - \param points an array of SDL_Point structures representing points to be - enclosed - \param count the number of structures in the `points` array - \param clip an SDL_Rect used for clipping or NULL to enclose all points - \param result an SDL_Rect structure filled in with the minimal enclosing - rectangle - \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - points were outside of the clipping rectangle. - - \since This function is available since SDL 2.0.0. - - - - Calculate the union of two rectangles. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \param result an SDL_Rect structure filled in with the union of rectangles - `A` and `B` - - \since This function is available since SDL 2.0.0. - - - - Calculate the intersection of two rectangles. - - If `result` is NULL then this function will return SDL_FALSE. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \param result an SDL_Rect structure filled in with the intersection of - rectangles `A` and `B` - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - \sa SDL_HasIntersection - - - - Determine whether two rectangles intersect. - - If either pointer is NULL the function will return SDL_FALSE. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - \sa SDL_IntersectRect - - - -Returns true if the two rectangles are equal. - - - -Returns true if the rectangle has no area. - - - -Returns true if point resides inside a rectangle. - - - - A rectangle, with the origin at the upper left (floating point). - - \sa SDL_FRectEmpty - \sa SDL_FRectEquals - \sa SDL_FRectEqualsEpsilon - \sa SDL_HasIntersectionF - \sa SDL_IntersectFRect - \sa SDL_IntersectFRectAndLine - \sa SDL_UnionFRect - \sa SDL_EncloseFPoints - \sa SDL_PointInFRect - - - - A rectangle, with the origin at the upper left (integer). - - \sa SDL_RectEmpty - \sa SDL_RectEquals - \sa SDL_HasIntersection - \sa SDL_IntersectRect - \sa SDL_IntersectRectAndLine - \sa SDL_UnionRect - \sa SDL_EnclosePoints - - - - The structure that defines a point (floating point) - - \sa SDL_EncloseFPoints - \sa SDL_PointInFRect - - - - Use this function to write 64 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE64 - - - - Use this function to write 64 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE64 - - - - Use this function to write 32 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE32 - - - - Use this function to write 32 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE32 - - - - Use this function to write 16 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE16 - - - - Use this function to write 16 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE16 - - - - \name Write endian functions - - Write an item of native format to the specified endianness. - - Use this function to write a byte to an SDL_RWops. - - \param dst the SDL_RWops to write to - \param value the byte value to write - \returns 1 on success or 0 on failure; call SDL_GetError() for more - information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadU8 - - - - Use this function to read 64 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 64 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE64 - - - - Use this function to read 64 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 64 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE64 - - - - Use this function to read 32 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 32 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE32 - - - - Use this function to read 32 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 32 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE32 - - - - Use this function to read 16 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 16 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE16 - - - - Use this function to read 16 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 16 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE16 - - - - \name Read endian functions - - Read an item of the specified endianness and return in native format. - - Use this function to read a byte from an SDL_RWops. - - \param src the SDL_RWops to read from - \returns the read byte on success or 0 on failure; call SDL_GetError() for - more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteU8 - - - - Load all the data from a file path. - - The data is allocated with a zero byte at the end (null terminated) for - convenience. This extra byte is not included in the value reported via - `datasize`. - - The data should be freed with SDL_free(). - - Prior to SDL 2.0.10, this function was a macro wrapping around - SDL_LoadFile_RW. - - \param file the path to read all available data from - \param datasize if not NULL, will store the number of bytes read - \returns the data, or NULL if there was an error. - - \since This function is available since SDL 2.0.10. - - - - Load all the data from an SDL data stream. - - The data is allocated with a zero byte at the end (null terminated) for - convenience. This extra byte is not included in the value reported via - `datasize`. - - The data should be freed with SDL_free(). - - \param src the SDL_RWops to read all available data from - \param datasize if not NULL, will store the number of bytes read - \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning - \returns the data, or NULL if there was an error. - - \since This function is available since SDL 2.0.6. - - - - Close and free an allocated SDL_RWops structure. - - SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any - resources used by the stream and frees the SDL_RWops itself with - SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to - flush to its output (e.g. to disk). - - Note that if this fails to flush the stream to disk, this function reports - an error, but the SDL_RWops is still invalid once this function returns. - - Prior to SDL 2.0.10, this function was a macro. - - \param context SDL_RWops structure to close - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Write to an SDL_RWops data stream. - - This function writes exactly `num` objects each of size `size` from the - area pointed at by `ptr` to the stream. If this fails for any reason, it'll - return less than `num` to demonstrate how far the write progressed. On - success, it returns `num`. - - SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's - `write` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param ptr a pointer to a buffer containing data to write - \param size the size of an object to write, in bytes - \param num the number of objects to write - \returns the number of objects written, which will be less than **num** on - error; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - - - - Read from a data source. - - This function reads up to `maxnum` objects each of size `size` from the - data source to the area pointed at by `ptr`. This function may read less - objects than requested. It will return zero when there has been an error or - the data stream is completely read. - - SDL_RWread() is actually a function wrapper that calls the SDL_RWops's - `read` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param ptr a pointer to a buffer to read data into - \param size the size of each object to read, in bytes - \param maxnum the maximum number of objects to be read - \returns the number of objects read, or 0 at error or end of file; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Determine the current read/write offset in an SDL_RWops data stream. - - SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` - method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify - application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a SDL_RWops data stream object from which to get the current - offset - \returns the current offset in the stream, or -1 if the information can not - be determined. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Seek within an SDL_RWops data stream. - - This function seeks to byte `offset`, relative to `whence`. - - `whence` may be any of the following values: - - - `RW_SEEK_SET`: seek from the beginning of data - - `RW_SEEK_CUR`: seek relative to current read point - - `RW_SEEK_END`: seek relative to the end of data - - If this stream can not seek, it will return -1. - - SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's - `seek` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param offset an offset in bytes, relative to **whence** location; can be - negative - \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` - \returns the final offset in the data stream after the seek or -1 on error. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWtell - \sa SDL_RWwrite - - - - Use this function to get the size of the data stream in an SDL_RWops. - - Prior to SDL 2.0.10, this function was a macro. - - \param context the SDL_RWops to get the size of the data stream from - \returns the size of the data stream in the SDL_RWops on success, -1 if - unknown or a negative error code on failure; call SDL_GetError() - for more information. - - \since This function is available since SDL 2.0.10. - - - - Use this function to free an SDL_RWops structure allocated by - SDL_AllocRW(). - - Applications do not need to use this function unless they are providing - their own SDL_RWops implementation. If you just need a SDL_RWops to - read/write a common data source, you should use the built-in - implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and - call the **close** method on those SDL_RWops pointers when you are done - with them. - - Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is - invalid as soon as this function returns. Any extra memory allocated during - creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must - be responsible for managing that memory in their **close** method. - - \param area the SDL_RWops structure to be freed - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocRW - - - - Use this function to allocate an empty, unpopulated SDL_RWops structure. - - Applications do not need to use this function unless they are providing - their own SDL_RWops implementation. If you just need a SDL_RWops to - read/write a common data source, you should use the built-in - implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. - - You must free the returned pointer with SDL_FreeRW(). Depending on your - operating system and compiler, there may be a difference between the - malloc() and free() your program uses and the versions SDL calls - internally. Trying to mix the two can cause crashing such as segmentation - faults. Since all SDL_RWops must free themselves when their **close** - method is called, all SDL_RWops must be allocated through this function, so - they can all be freed correctly with SDL_FreeRW(). - - \returns a pointer to the allocated memory on success, or NULL on failure; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeRW - - - - Use this function to prepare a read-only memory buffer for use with RWops. - - This function sets up an SDL_RWops struct based on a memory area of a - certain size. It assumes the memory area is not writable. - - Attempting to write to this RWops stream will report an error without - writing to the memory buffer. - - This memory buffer is not copied by the RWops; the pointer you provide must - remain valid until you close the stream. Closing the stream will not free - the original buffer. - - If you need to write to a memory buffer, you should use SDL_RWFromMem() - with a writable buffer of memory instead. - - \param mem a pointer to a read-only buffer to feed an SDL_RWops stream - \param size the buffer size, in bytes - \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - - - - Use this function to prepare a read-write memory buffer for use with - SDL_RWops. - - This function sets up an SDL_RWops struct based on a memory area of a - certain size, for both read and write access. - - This memory buffer is not copied by the RWops; the pointer you provide must - remain valid until you close the stream. Closing the stream will not free - the original buffer. - - If you need to make sure the RWops never writes to the memory buffer, you - should use SDL_RWFromConstMem() with a read-only buffer of memory instead. - - \param mem a pointer to a buffer to feed an SDL_RWops stream - \param size the buffer size, in bytes - \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - - Use this function to create an SDL_RWops structure from a standard I/O file - pointer (stdio.h's `FILE*`). - - This function is not available on Windows, since files opened in an - application on that platform cannot be used by a dynamically linked - library. - - On some platforms, the first parameter is a `void*`, on others, it's a - `FILE*`, depending on what system headers are available to SDL. It is - always intended to be the `FILE*` type from the C runtime's stdio.h. - - \param fp the `FILE*` that feeds the SDL_RWops stream - \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, - SDL_FALSE to leave the `FILE*` open when the RWops is - closed - \returns a pointer to the SDL_RWops structure that is created, or NULL on - failure; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - - \name RWFrom functions - - Functions to create SDL_RWops structures from various data streams. - - Use this function to create a new SDL_RWops structure for reading from - and/or writing to a named file. - - The `mode` string is treated roughly the same as in a call to the C - library's fopen(), even if SDL doesn't happen to use fopen() behind the - scenes. - - Available `mode` strings: - - - "r": Open a file for reading. The file must exist. - - "w": Create an empty file for writing. If a file with the same name - already exists its content is erased and the file is treated as a new - empty file. - - "a": Append to a file. Writing operations append data at the end of the - file. The file is created if it does not exist. - - "r+": Open a file for update both reading and writing. The file must - exist. - - "w+": Create an empty file for both reading and writing. If a file with - the same name already exists its content is erased and the file is - treated as a new empty file. - - "a+": Open a file for reading and appending. All writing operations are - performed at the end of the file, protecting the previous content to be - overwritten. You can reposition (fseek, rewind) the internal pointer to - anywhere in the file for reading, but writing operations will move it - back to the end of file. The file is created if it does not exist. - - **NOTE**: In order to open a file as a binary file, a "b" character has to - be included in the `mode` string. This additional "b" character can either - be appended at the end of the string (thus making the following compound - modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the - letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). - Additional characters may follow the sequence, although they should have no - effect. For example, "t" is sometimes appended to make explicit the file is - a text file. - - This function supports Unicode filenames, but they must be encoded in UTF-8 - format, regardless of the underlying operating system. - - As a fallback, SDL_RWFromFile() will transparently open a matching filename - in an Android app's `assets`. - - Closing the SDL_RWops will close the file handle SDL is holding internally. - - \param file a UTF-8 string representing the filename to open - \param mode an ASCII string representing the mode to be used for opening - the file. - \returns a pointer to the SDL_RWops structure that is created, or NULL on - failure; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - -Return the size of the file in this rwops, or -1 if unknown - - - Seek to \c offset relative to \c whence, one of stdio's whence values: - RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END - - \return the final offset in the data stream, or -1 on error. - - - Read up to \c maxnum objects each of size \c size from the data - stream to the area pointed at by \c ptr. - - \return the number of objects read, or 0 at error or end of file. - - - Write exactly \c num objects each of size \c size from the area - pointed at by \c ptr to data stream. - - \return the number of objects written, or 0 at error or end of file. - - - Close and free an allocated SDL_RWops structure. - - \return 0 if successful or -1 on write error when flushing data. - - - - Clear any previous error message for this thread. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetError - \sa SDL_SetError - - - - Get the last error message that was set for the current thread. - - This allows the caller to copy the error string into a provided buffer, but - otherwise operates exactly the same as SDL_GetError(). - - \param errstr A buffer to fill with the last error message that was set for - the current thread - \param maxlen The size of the buffer pointed to by the errstr parameter - \returns the pointer passed in as the `errstr` parameter. - - \since This function is available since SDL 2.0.14. - - \sa SDL_GetError - - - - Retrieve a message about the last error that occurred on the current - thread. - - It is possible for multiple errors to occur before calling SDL_GetError(). - Only the last error is returned. - - The message is only applicable when an SDL function has signaled an error. - You must check the return values of SDL function calls to determine when to - appropriately call SDL_GetError(). You should *not* use the results of - SDL_GetError() to decide if an error has occurred! Sometimes SDL will set - an error string even when reporting success. - - SDL will *not* clear the error string for successful API calls. You *must* - check return values for failure cases before you can assume the error - string applies. - - Error strings are set per-thread, so an error set in a different thread - will not interfere with the current thread's operation. - - The returned string is internally allocated and must not be freed by the - application. - - \returns a message with information about the specific error that occurred, - or an empty string if there hasn't been an error message set since - the last call to SDL_ClearError(). The message is only applicable - when an SDL function has signaled an error. You must check the - return values of SDL function calls to determine when to - appropriately call SDL_GetError(). - - \since This function is available since SDL 2.0.0. - - \sa SDL_ClearError - \sa SDL_SetError - - - - Calculate a 256 entry gamma ramp for a gamma value. - - \param gamma a gamma value where 0.0 is black and 1.0 is identity - \param ramp an array of 256 values filled in with the gamma ramp - - \since This function is available since SDL 2.0.0. - - \sa SDL_SetWindowGammaRamp - - - - Get RGBA values from a pixel in the specified format. - - This function uses the entire 8-bit [0..255] range when converting color - components from pixel formats with less than 8-bits per RGB component - (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - - If the surface has no alpha component, the alpha will be returned as 0xff - (100% opaque). - - \param pixel a pixel value - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r a pointer filled in with the red component - \param g a pointer filled in with the green component - \param b a pointer filled in with the blue component - \param a a pointer filled in with the alpha component - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_MapRGB - \sa SDL_MapRGBA - - - - Get RGB values from a pixel in the specified format. - - This function uses the entire 8-bit [0..255] range when converting color - components from pixel formats with less than 8-bits per RGB component - (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - - \param pixel a pixel value - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r a pointer filled in with the red component - \param g a pointer filled in with the green component - \param b a pointer filled in with the blue component - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGBA - \sa SDL_MapRGB - \sa SDL_MapRGBA - - - - Map an RGBA quadruple to a pixel value for a given pixel format. - - This function maps the RGBA color value to the specified pixel format and - returns the pixel value best approximating the given RGBA color value for - the given pixel format. - - If the specified pixel format has no alpha component the alpha value will - be ignored (as it will be in formats with a palette). - - If the format has a palette (8-bit) the index of the closest matching color - in the palette will be returned. - - If the pixel format bpp (color depth) is less than 32-bpp then the unused - upper bits of the return value can safely be ignored (e.g., with a 16-bpp - format the return value can be assigned to a Uint16, and similarly a Uint8 - for an 8-bpp format). - - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r the red component of the pixel in the range 0-255 - \param g the green component of the pixel in the range 0-255 - \param b the blue component of the pixel in the range 0-255 - \param a the alpha component of the pixel in the range 0-255 - \returns a pixel value - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_GetRGBA - \sa SDL_MapRGB - - - - Map an RGB triple to an opaque pixel value for a given pixel format. - - This function maps the RGB color value to the specified pixel format and - returns the pixel value best approximating the given RGB color value for - the given pixel format. - - If the format has a palette (8-bit) the index of the closest matching color - in the palette will be returned. - - If the specified pixel format has an alpha component it will be returned as - all 1 bits (fully opaque). - - If the pixel format bpp (color depth) is less than 32-bpp then the unused - upper bits of the return value can safely be ignored (e.g., with a 16-bpp - format the return value can be assigned to a Uint16, and similarly a Uint8 - for an 8-bpp format). - - \param format an SDL_PixelFormat structure describing the pixel format - \param r the red component of the pixel in the range 0-255 - \param g the green component of the pixel in the range 0-255 - \param b the blue component of the pixel in the range 0-255 - \returns a pixel value - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_GetRGBA - \sa SDL_MapRGBA - - - - Free a palette created with SDL_AllocPalette(). - - \param palette the SDL_Palette structure to be freed - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - - - - Set a range of colors in a palette. - - \param palette the SDL_Palette structure to modify - \param colors an array of SDL_Color structures to copy into the palette - \param firstcolor the index of the first palette entry to modify - \param ncolors the number of entries to modify - \returns 0 on success or a negative error code if not all of the colors - could be set; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - \sa SDL_CreateRGBSurface - - - - Set the palette for a pixel format structure. - - \param format the SDL_PixelFormat structure that will use the palette - \param palette the SDL_Palette structure that will be used - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - \sa SDL_FreePalette - - - - Create a palette structure with the specified number of color entries. - - The palette entries are initialized to white. - - \param ncolors represents the number of color entries in the color palette - \returns a new SDL_Palette structure on success or NULL on failure (e.g. if - there wasn't enough memory); call SDL_GetError() for more - information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreePalette - - - - Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). - - \param format the SDL_PixelFormat structure to free - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - - - - Create an SDL_PixelFormat structure corresponding to a pixel format. - - Returned structure may come from a shared global cache (i.e. not newly - allocated), and hence should not be modified, especially the palette. Weird - errors such as `Blit combination not supported` may occur. - - \param pixel_format one of the SDL_PixelFormatEnum values - \returns the new SDL_PixelFormat structure or NULL on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeFormat - - - - Convert a bpp value and RGBA masks to an enumerated pixel format. - - This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't - possible. - - \param bpp a bits per pixel value; usually 15, 16, or 32 - \param Rmask the red mask for the format - \param Gmask the green mask for the format - \param Bmask the blue mask for the format - \param Amask the alpha mask for the format - \returns one of the SDL_PixelFormatEnum values - - \since This function is available since SDL 2.0.0. - - \sa SDL_PixelFormatEnumToMasks - - - - Convert one of the enumerated pixel formats to a bpp value and RGBA masks. - - \param format one of the SDL_PixelFormatEnum values - \param bpp a bits per pixel value; usually 15, 16, or 32 - \param Rmask a pointer filled in with the red mask for the format - \param Gmask a pointer filled in with the green mask for the format - \param Bmask a pointer filled in with the blue mask for the format - \param Amask a pointer filled in with the alpha mask for the format - \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't - possible; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_MasksToPixelFormatEnum - - - - Get the human readable name of a pixel format. - - \param format the pixel format to query - \returns the human readable name of the specified pixel format or - `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. - - \since This function is available since SDL 2.0.0. - - - -\note Everything in the pixel format structure is read-only. - - - -The bits of this structure can be directly reinterpreted as an integer-packed -color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 -on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). - - - - If a + b would overflow, return -1. Otherwise store a + b via ret - and return 0. - - \since This function is available since SDL 2.24.0. - - - - If a * b would overflow, return -1. Otherwise store a * b via ret - and return 0. - - \since This function is available since SDL 2.24.0. - - - - This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. - - \since This function is available since SDL 2.0.0. - - - - Get the number of outstanding (unfreed) allocations - - \since This function is available since SDL 2.0.7. - - - - Replace SDL's memory allocation functions with a custom set - - \since This function is available since SDL 2.0.7. - - - - Get the current set of SDL memory functions - - \since This function is available since SDL 2.0.7. - - - - Get the original set of SDL memory functions - - \since This function is available since SDL 2.24.0. - - - -\endcond - \file begin_code.h - - This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) - - - -\name Floating-point constants - -\cond - - -\brief An unsigned 64-bit integer type. - - - -\brief A signed 64-bit integer type. - - - -\brief An unsigned 32-bit integer type. - - - -\brief A signed 32-bit integer type. - - - -\brief An unsigned 16-bit integer type. - - - -\brief A signed 16-bit integer type. - - - -\brief An unsigned 8-bit integer type. - - - -\brief A signed 8-bit integer type. - - - - \file close_code.h - - This file reverses the effects of begin_code.h and should be included - after you finish any function and structure declarations in your headers - - - - \file SDL_stdinc.h - - This is a general header that includes C language support. - - \file SDL_platform.h - - Try to get a standard set of platform defines. - - \file begin_code.h - - This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) - - Get the name of the platform. - - Here are the names returned for some (but not all) supported platforms: - - - "Windows" - - "Mac OS X" - - "Linux" - - "iOS" - - "Android" - - \returns the name of the platform. If the correct platform name is not - available, returns a string beginning with the text "Unknown". - - \since This function is available since SDL 2.0.0. - - - -*!************************************************************************* - - - -Marks the application to stop at the end of the current frame. - - - - -Whether or not the application is currently in fullscreen mode or not. - - - - -Retrieves the designated height of the current window. - - - - -Retrieves the designated width of the current window. - - - - -Whether or not the engine is in a paused state where script updates and -physics are not in play. - - - - -Whether or not the engine is playing. This will always be true on Publish. -On Debug/Release builds, this is true when the editor is in Play Mode. It -will also be true even if the editor is in Play Mode but is paused. - - - - -Static class that contains useful properties for querying the state of the -engine. - - - - -Sets the parent of this Transform component. - - -Entity that contains the Transform component that this Transform will be -parented to. If null, unparenting will occur. - - -If true, the transform values of this Transform component will retain their -pre-parent-change global transforms. The local transform values will be -modified to ensure that the global transforms do not change. - - - - -Parent Transform that affects this Transform. - - - - -Global scale stored by this Transform. - - - - -Global euler angle rotations stored by this Transform. - - - - -Global rotation quaternion stored by this Transform. - - - - -Global position stored by this Transform. - - - - -Local scale stored by this Transform. - - - - -Local euler angle rotations stored by this Transform. - - - - -Local rotation quaternion stored by this Transform. - - - - -Local position stored by this Transform. - - - - -Constructs a Transform Component that represents a native Transform component -tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the SHADE Engine's TransformComponent. - - - - -Compares if two float values are close enough to be the same with the -specified tolerance value. - - One of the values to compare. - The other value to compare. - Tolerance for floating point comparison. - True if a and b are practically the same. - - - -Compares if two float values are close enough to be the same with a tolerance -of Epsilon. - - One of the values to compare. - The other value to compare. - True if a and b are practically the same. - - - -Calculates the linear parameter t that produces the interpolant value within -the range [a, b]. - - Start value. - End value. - Value between start and end. - Percentage of value between start and end. - - - -Linearly interpolates between a and b by t. -The parameter t is not clamped and a value based on a and b is supported. -If t is less than zero, or greater than one, then LerpUnclamped will result -in a return value outside the range a to b. - - The start value. - The end value. - The interpolation value between the two float. - The interpolated float result between the two float values. - - - -Linearly interpolates between a and b by t. -The parameter t is clamped to the range [0, 1]. - - The start value. - The end value. - The interpolation value between the two float. - The interpolated float result between the two float values. - - - -Converts an angle from radian representation to degree representation. - - Radian-based angle to convert. - The specified angle in degrees. - - - -Converts an angle from degree representation to radian representation. - - Degree-based angle to convert. - The specified angle in radians. - - - -Wraps a value if they get to low or too high. - - Value to wrap. - Minimum value to wrap at. - Maximum value to wrap at. - Wrapped value. - - - -Small value used for single precision floating point comparisons. - - - - -Radians-to-degrees conversion constant - - - - -Degrees-to-radians conversion constant - - - - -Contains utility Math functions. - - - - -Logs a native exception that is formatted nicely to the output. - - Native exception to log. - Name of the one responsible for the exception. - - - -Logs an exception that is formatted nicely to the output. - - Name of the one responsible for the exception. - Exception to log. - - - -Logs a native exception that is formatted nicely to the output. -Equivalent to calling -LogException(exception, Convert::ToNative(thrower->GetType()->Name)); - - Native exception to log. - -Object that threw the exception to label the exception message. -The name of the object will be used. - - - - -Logs an exception that is formatted nicely to the output. - - Exception to log. - -Object that threw the exception to label the exception message. -The name of the object will be used. - - - - -Logs an exception that is formatted nicely to the output. - - Exception to log. - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output. - - The string to output. - - - -Logs a error message to the output. - - The string to output. - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output. - - The string to output. - - - -Logs a warning message to the output. - - The string to output. - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output. - - The string to output. - - - -Logs a message to the output. - - The string to output. - - - -Static class that contains the functions for working with time. - - - - -Material used to render this Renderable. - - - - -Material used to render this Renderable. - - - - -Mesh used to render this Renderable. - - - - -Constructs a Renderable Component that represents a native Renderable -component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the SHADE Engine's SHRenderableComponent. - - - - -Retrieves the value of a specified property on the material. - - Type of property to get. - Name of the property to get. - Value of that property on the material. - -If this Material object is invalid. - - -If the name or type was specified that does not match the material's shader's -defined properties. - - - - -Set the value of a specific property. - - Type of property to set. - Name of the property to set. - Value to set te property to. - -If this Material object is invalid. - - -If the name or type was specified that does not match the material's shader's -defined properties. - - - - -Constructor for the Material - - Handle to the native material object. - - - -Managed counterpart of the native MaterialInstance object containing material -data that can be fed to Renderables for rendering. - - - - -Constructor for the Mesh - - Handle to the mesh object. - - - -Managed counterpart of the native Mesh object containing vertex data that can -be fed to Renderables for rendering. - - - -@brief Decomposes a transformation matrix into translation, orientation and scale. -@param[out] scale The scaling factor of the matrix. -@param[out] orientation The orientation of the matrix. -@param[out] translation The translation of the matrix. -@return True if decomposition was successful. - - - -@brief Decomposes a transformation matrix into translation, euler angles and scale. -@param[out] scale The scaling factor of the matrix. -@param[out] rotation The euler angles of the matrix. -@param[out] translation The translation of the matrix. -@return True if decomposition was successful. - - - -@brief Interface for a Column-Major Row Vector 4x4 Matrix. - - - - -Constructs a RigidBody Component that represents a native -SHRigidBodyComponent component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the the SHADE Engine's SHRigidBodyComponent. - - - - -Creates an instance of the Managed representation of a Component with a -native Entity. - - Type of Component to create. - Native Entity that this Component is tied to. - The created Managed representation of the Component. - - - -Static constructor to initialize static data - - - - -Pointer to a function for Component manipulation operations. - - -Contains a set of Component related data used for resolving operations for -each Component. - - - - -Removes a Component from the specified Entity. - - Type of the Component to remove. - -Entity object that should have the specified Component removed from/ - - - - -Checks if the specified Entity has the specified Component. - - Type of the Component to check for. - Entity object to check for the Component. - -True if the specified Entity has the specified Component. False otherwise. - - - - -Ensures a Component on the specified Entity. - - Type of the Component to ensure. - Entity object to ensure the Component on. - Reference to the Component. - - - -Retrieves the first Component from the specified GameObjectt's children that -matches the specified type. - - Type of the Component to get. - Entity object to get the Component from. - -Reference to the Component or null if the Entity does not have the -specified Component. - - - - -Gets a Component from the specified Entity. - - Type of the Component to get. - Entity object to get the Component from. - -Reference to the Component or null if the Entity does not have the -specified Component. - - - - -Adds a Component to the specified Entity. - - Type of the Component to add. - -Entity object that should have the specified Component added to. - - Reference to the Component that was added. - - - -Static class which contains functions that map Pls::ECS's Component manipulation -functions to managed generic functions. - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Entity that this Component belongs to. - - - - -Constructor for BaseComponent to tie it to a specific Entity. -Constructors of derived Components should call this Constructor. - - Entity that this Component will be tied to. - - - -Implicit conversion operator to enable checking if a component is null. - - Component to check. - - - -Removes all Scripts of the specified type from this GameObject. - - Type of PLushieScripts to remove. - - - -Retrieves a immutable list of Scripts of the specified type from this -GameObject. - - Type of Scripts to Get. - Immutable list of Scripts of the specified type. - - - -Retrieves a Script of the specified type from this GameObject. -If multiple Scripts of the same specified type are added on the same -GameObject, this will retrieve the first one added. - - Type of Script to add. - Reference to the Script to retrieve. - - - -Adds a Script of the specified type to this GameObject. - - Type of Script to add. - Reference to the created Script. - - - -Removes a Component from this GameObject. If no Component exists to begin -with, nothing happens. - - Type of the Component to get. - - - -Gets a Component from this GameObject. - - Type of the Component to get. - -Reference to the Component or null if this GameObject does not have the -specified Component. - - - - -Adds a Component to this GameObject. - - Type of the Component to add. - Reference to the Component that was added. - - - -Retrieves the GameObject that this Component belongs to. - - - - -Class that serves as the base for a wrapper class to Components in native code. - - - - -Called when the attached GameObject has a Collider and leaves a -collision with another GameObject with a Collider2D. - - Information on the collision event. - - - -Called when the attached GameObject has a Collider and collides with -another GameObject with a Collider in subsequent frames of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a Collider and collides with -another GameObject with a Collider in the first frame of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and leaves a -collision with another GameObject with a Collider2D. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and collides with -another GameObject with a Collider in subsequent frames of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and collides with -another GameObject with a Collider in the first frame of collision. - - Information on the collision event. - - - -Called just before the end of the frame where the attached GameObject or -this script is destroyed directly or indirectly due to destruction of the -owner. - - - - -Called every frame after physics and collision resolution but before -rendering. - - - - -Called every frame before physics and collision resolution. - - - - -Called every frame in sync with Physics update steps and thus in most cases -will execute more than update() will. This will be called immediately before -a Physics update step. - - - - -Called on the first frame that the attached GameObject is active but always -after Awake(). - - - - -Called on the first frame that the attached GameObject is active if they are -a part of the scene. - - - - -Called immediately once this script is detached from a GameObject. - - - - -Called immediately once this script is attached to a GameObject. - - - - -Constructor for Script to tie it to a specific GameObject. -Constructors of derived Scripts should call this Constructor. - - -GameObject that this Script will be tied to. - - - - -Used to call onTriggerExit(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onTriggerStay(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onTriggerEnter(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionExit(). This should be called when a collision ends -between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionStay(). This should be called when a collision is -persistent between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionEnter(). This should be called when a collision is -detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onDestroy(). This should be called at the end of the frame -where the attached GameObject or this script is destroyed directly or -indirectly due to destruction of the owner. - - - - -Used to call lateUpdate(). This should be called every frame after physics -and collision resolution but before rendering. - - - - -Used to call update(). This should be called every frame before physics and -collision resolution. - - - - -Used to call fixedUpdate(). This should be called in sync with Physics -update steps and thus in most cases will execute more than Update() will. -This will be called immediately before a Physics update step. - - - - -Used to call start(). This should be called on the first frame that the -attached GameObject is active but always after Awake(). - - - - -Used to call awake(). This should be called on the first frame that the -attached GameObject is active if they are a part of the scene. - - - - -Used to call onDetached(). This is called immediately when this script is -detached from a GameObject. - - - - -Used to call onAttached(). This is called immediately when this script is -attached to a GameObject. - - - - -Implicit conversion operator to enable checking if a component is null. - - Component to check. - - - -Removes all Scripts of the specified type from this GameObject. - - -Type of script to remove. -This needs to be a default constructable Script. - - - - -Retrieves a immutable list of scripts from the specified Entity that -matches the specified type. -
    -Note that this function allocates. It should be used sparingly. -
    - -Type of scripts to get. -This needs to be a default constructable Script. - - -Immutable list of references to scripts of the specified type. - -
    - - -Retrieves the first Script from this GameObject's children that matches the -specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - Reference to the script added - - - -Retrieves the first Script from this GameObject that matches the specified -type. - - -Type of script to get. -This needs to be a default constructable Script. - - Reference to the script added - - - -Adds a Script to this GameObject. - - -Type of script to add. -This needs to be a default constructable Script. - - Reference to the script added - - - -Removes a Component from the GameObject that this Script belongs to. - - -Type of the Component to remove. Must be derived from BaseComponent. - - - - -Ensures a Component on the GameObject that this Script belongs to. - - -Type of the Component to ensure. Must be derived from BaseComponent. - - Reference to the Component. - - - -Retrieves the first Component from this GameObject's children that matches -the specified type. - - -Type of the Component to get. Must be derived from BaseComponent. - - Reference to the Component that was retrieved. - - - -Gets a Component from the GameObject that this Script belongs to. - - -Type of the Component to get. Must be derived from BaseComponent. - - Reference to the Component that was retrieved. - - - -Adds a Component to the GameObject that this Script belongs to. - - -Type of the Component to add. Must be derived from BaseComponent. - - Reference to the Component that was added. - - - -GameObject that this Script belongs to. - - - - -Class that forms the basis of all "script"-objects that can be attached to -Entities to update each Entity's Components via C# code. - - - - -The RigidBody that you are colliding with. - - - - -The CollisionShape of the Collider that you are colliding with. - - - - -The Collider that you are colliding with. - - - - -The GameObject whose collider you are colliding with. - - - - -Struct that describes a collision - - - - -Checks if two GameObject references are different. - - GameObject to check. - Another GameObject to check with. - True if both Components are different. - - - -Checks if two GameObject references are the same. - - GameObject to check. - Another GameObject to check with. - True if both Components are the same. - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Retrieves the native Entity object that this GameObject represents. - - Native Entity object that this GameObject represents. - - - -Retrieves the CLR Entity object that this GameObject represents. - - Entity object that this GameObject represents. - - - -Constructor for the GameObject. - - -Managed numerical representation of the ECS Entity that this GameObject -should represent. - - - - -Constructor for the GameObject. - - -The ECS Entity that this GameObject should represent. - - - - -Removes all Scripts of the specified type from this GameObject. - - Type of PLushieScripts to remove. - - - -Retrieves a immutable list of Scripts of the specified type from this -GameObject. - - Type of Scripts to retrieve. - Immutable list of Scripts of the specified type. - - - -Retrieves a Script of the specified type from child GameObjects. -If multiple Scripts of the same specified type are added on the same -child GameObject, this will retrieve the first one added. - - Type of Script to retrieve. - Reference to the Script to retrieve. - - - -Retrieves a Script of the specified type from this GameObject. -If multiple Scripts of the same specified type are added on the same -GameObject, this will retrieve the first one added. - - Type of Script to retrieve. - Reference to the Script to retrieve. - - - -Adds a Script of the specified type to this GameObject. - - Type of Script to add. - Reference to the created Script. - - - -Removes a Component from this GameObject. If no Component exists to begin -with, nothing happens. - - Type of the Component to get. - - - -Ensures a Component on this GameObject. - - Type of the Component to ensure. - -Reference to the Component. - - - - -Retrieves the first Component from this GameObject's children that matches -the specified type. - - Type of the Component to get. - -Reference to the Component or null if neither of this GameObject's children -does not have the specified Component. - - - - -Gets a Component from this GameObject. - - Type of the Component to get. - -Reference to the Component or null if this GameObject does not have the -specified Component. - - - - -Adds a Component to this GameObject. - - Type of the Component to add. - Reference to the Component that was added. - - - -Sets the active state of this GameObject. -
    -The actual "activeness" of this GameObject is still dependent on the parents' -active states. -
    - -Whether to activate or deactivate this GameObject. - -
    - - -Sets the name of this GameObject. - - The name to set. - - - -Native Entity ID value for this GameObject. - - - - -Whether or not this Entity is active in the Scene hierarchy. - - - - -Whether or not this Entity alone, is active. This does not mean that this -object is active in the scene. For example, if this Entity's parent is not -active, then this Entity would also be not active. - - - - -Name of the object that this Entity represents. - - - - -Retrieves a GameObject with the specified name. If there are multiple -GameObjects with the same name, the first found GameObject will be retrieved. -There is no guaranteed order of which GameObject is considered "first". - - Name of the GameObject to find. - GameObject that has the specified name. Null if not found. - - - -Destroys the specified GameObject. Note that the specified GameObject will no -longer be a valid GameObject after this function is called. - - The GameObject to be destroyed. - - - -Creates a new GameObject in the current Scene. If multiple Scenes are loaded, -and you would like to create an object in a specific Scene, call the Scene's -CreateGameObject(). - - GameObject that represents the newly created GameObject. - - - -Lightweight object for an PlushieEngine Entity that allows for easy access -to Component and Script operations. - - - - -Constructor for a Tooltip attribute that fills in the description. - - Text to be shown when a field is hovered. - - - -Maximum value for the Ranged field. - - - - -Minimum value for the Ranged field. - - - - -Simple attribute to constrain the range of values for a field on the editor. - - - - -Converts from a native std::Stringto a managed String. - - The native std::string to convert from. - Managed copy of a native std::string. - - - -Converts from a managed String to a native std::string. - - The managed String to convert from. - Native copy of a managed String. - - - -Converts from a native Vector2 to a managed Vector2. - - The native Vector2 to convert from. - Managed copy of a native Vector2. - - - -Converts from a native Quaternion to a managed Quaternion. - - The native Quaternion to convert from. - Managed copy of a native Quaternion. - - - -Converts from a managed Quaternion to a native Quaternion. - - The managed Quaternion to convert from. - Native copy of a managed Quaternion. - - - -Converts from a native Vector2 to a managed Vector2. - - The native Vector2 to convert from. - Managed copy of a native Vector2. - - - -Converts from a managed Vector2 to a native Vector2. - - The managed Vector2 to convert from. - Native copy of a managed Vector2. - - - -Converts from a native Vector3 to a managed Vector3. - - The native Vector3 to convert from. - Managed copy of a native Vector3. - - - -Converts from a managed Vector3 to a native Vector3. - - The managed Vector3 to convert from. - Native copy of a managed Vector3. - - - -Converts from a native Entity to a managed Entity (UInt32). - - Native Entity to convert from. - Managed representation of the specified Entity. - - - -Provides functions easy and consistent syntax for converting between custom -managed and native types that are aligned. - - - - -Converts to true if this is a valid Handle. - - - - -The library that the handle was issued by. - - - - -The internal ID of the handle. - - - - -Creates a ray starting at origin along direction. - - Source of the ray. - Direction the ray travels in. - - - -The direction that a ray travels in. - - - - -The start point of the ray. - - - - -CLR version of the the SHADE Engine's Ray class that represents a ray in -3-Dimensional space. - - - - -Are two quaternions equal to each other? - - Left-hand side quaternion. - Right-hand side quaternion. - - - -Combines rotations lhs and rhs. - - Left-hand side quaternion. - Right-hand side quaternion. - - - -Spherically interpolates between a and b by t. The parameter t is not clamped. - - - - -Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. - - Start value, returned when t = 0. - End value, returned when t = 1. - Interpolation ratio. - A quaternion spherically interpolated between quaternions a and b. - - - -Rotates a rotation from towards to.
    -The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). -Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. -
    -
    - - -Converts this quaternion to one with the same orientation but with a magnitude of 1. - - - - -Creates a rotation with the specified forward and upwards directions.
    -Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. -
    -
    - - -Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. - - - - -Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. - - Start value, returned when t = 0. - End value, returned when t = 1. - Interpolation ratio. - A quaternion interpolated between quaternions a and b. - - - -Returns the Inverse of rotation. - - - - -Creates a rotation which rotates from fromDirection to toDirection. - - - - -Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. - - - - -The dot product between two rotations. - - - - -Creates a rotation which rotates angle degrees around axis. - - - - -Returns the angle in degrees between two rotations a and b.
    - The angle in degrees between the two vectors. -
    - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Converts a rotation to angle-axis representation (angles in degrees). - - - - -Creates a rotation with the specified forward and upwards directions.
    -The result is applied to this quaternion. -If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. -Logs an error if the forward direction is zero. -
    - The direction to look in. - The vector that defines in which direction up is. -
    - - -Creates a rotation which rotates from fromDirection to toDirection.
    -Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). -These Vectors must be set up in a script. -
    -
    - - -Constructor to construct a Quaternion with the specified components. - - X-coordinate to set. - Y-coordinate to set. - Z-coordinate to set. - W-coordinate to set. - - - -W-component of the Quaternion. Do not directly modify quaternions. - - - - -Z-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -Y-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -X-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -Shorthand for writing Quaternion(0, 0, 0, 1). - - - - -CLR version of SHADE's Quaternion class that represents an orientation. -Designed to closely match Unity's Quaternion struct. - - - - -Explicit conversion operator to enable explicit casting from a Vector2 to a -Vector3. - - Vector2 to convert from. - - - -Explicit conversion operator to enable explicit casting from a Vector3 to a -Vector2. - - Vector3 to convert from. - - - -Checks if two Vector3s are not approximately equal. This is equivalent to -calling !Vector3.IsNear() with default tolerance values. - - Vector3 to compare. - Another Vector3 to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Vector3s are approximately equal. This is equivalent to -calling Vector3.IsNear() with default tolerance values. - - Vector3 to compare. - Another Vector3 to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Vector3 with a scalar value and returns -the result. - - Scalar to divide with. - Vector3 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector3 with a scalar value and returns -the result. - - Vector3 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the division of a Vector3 with a scalar value and returns -the result. - - Scalar to divide with. - Vector3 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector3 with a scalar value and returns -the result. - - Vector3 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Vector3s and returns the -result. - - Vector3 to multiply with. - Another Vector3 to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Vector3 from another Vector3 and returns the result. - - Vector3 to subtract from. - Another Vector3 to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Vector3s together and returns the result. - - Vector3 to add. - Another Vector3 to add. - The result of lhs added to rhs - - - -Moves a point current towards target. -Similar to Lerp(), however, the function will ensure that the distance never -exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the -vector away from target - - The current position of the point. - The target position to move to. - Maximum distance moved per call. - Vector representing the moved point. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Vector3, returned when t = 0.0f. - The end Vector3, returned when t = 1.0f. - Value used to interpolate between a and b. - The interpolated Vector3. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Vector3, returned when t = 0.0f. - The end Vector3, returned when t = 1.0f. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector3. - - - -Computes and returns a Vector3 that is made from the largest components of -the two specified Vector3s. - - Vector3 to calculate maximum Vector3 with. - Another Vector3 to calculate maximum Vector3 with. - -The Vector3 that contains the largest components of the two specified -Vector3s. - - - - -Computes and returns a Vector3 that is made from the smallest components of -the two specified Vector3s. - - Vector3 to calculate minimum Vector3 with. - Another Vector3 to calculate minimum Vector3 with. - -The Vector3 that contains the smallest components of the two specified -Vector3s. - - - - -Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector3 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in degrees. - - The Vector3 that represents the rotated vector. - - - -Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector3 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in radians. - - The Vector3 that represents the rotated vector. - - - -Reflects a Vector3 across another Vector3. - - A Vector3 to reflect. - A normal to reflect the Vector3 across. - The Vector3 that represents vec reflected across normal. - - - -Computes and returns a Vector3 projection. - - Vector3 to project. - Vector3 to project onto. - The Vector3 that represents the projected vec onto direction. - - - -Computes and returns the cross product of 2 specified Vector3s. - - Vector3 to calculate cross product with. - Another Vector3 to calculate cross product with. - The cross product of the two Vector3s. - - - -Computes and returns the dot product of 2 specified Vector3s. - - Vector3 to calculate dot product with. - Another Vector3 to calculate dot product with. - Scalar value representing the dot product of the two Vector3s. - - - -Checks if two specified Vector3s are near in value. - - Vector3 to check if is near in value. - Another Vector3 to check if is near in value. - Amount of tolerance to do the comparison with. - -True if the two Vector3s are within the tolerance value specified - - - - -Checks if two specified Vector3s are near in value. - - Vector3 to check if is near in value. - Another Vector3 to check if is near in value. - -True if the two Vector3s are within the tolerance value specified - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Checks if a specified point is near this Vector3 that represents a point. - - The other point to check if we are near. - -The amount of tolerance before we consider these points as "near". - - -True if this Vector3 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Checks if a specified point is near this Vector3 that represents a point with -a tolerance value of PLS_EPSILON. - - The other point to check if we are near. - -True if this Vector3 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -180.0f and 180.0f. - - Returns the angle of this vector from the right vector in degrees. - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -Math.PI and Math.PI. - - Returns the angle of this vector from the right vector in radians. - - - -Calculates and returns the squared magnitude of this Vector3. - - Returns the squared length of this Vector3. - - - -Calculates and returns the magnitude of this Vector3. Note that this function -incurs a performance cost from the square root calculation. If you do not -need the precise magnitude, consider using GetSqrMagnitude() instead. - - Returns the length of this Vector3. - - - -Creates a copy of this Vector3 and returns a normalized version. - - -Returns a normalised copy of this Vector3. -If this Vector3 is a zero vector, a zero vector will be returned. - - - - -Normalises this current Vector3. This changes the data of this Vector3. -If you would like to get a copy, use GetNormalised() instead. -This function does nothing to a zero vector. - - - - -Conversion constructor to construct a Vector3 using a Vector2. - - - - - -Constructor to construct a Vector3 with the specified components. - - X-coordinate to set. - Y-coordinate to set. - Z-coordinate to set. - - - -Constructor to construct a Vector3 with the specified components with the -Z-component set to 0.0f. - - X-coordinate to set. - Y-coordinate to set. - - - -Constructor to construct a Vector3 with the specified components with the -Y and Z-component set to 0.0f. - - X-coordinate to set. - - - -Z-component of the Vector3. - - - - -Y-component of the Vector3. - - - - -X-component of the Vector3. - - - - -Shorthand for writing Vector3(0, 0, 0). - - - - -Shorthand for writing Vector3(0, 1, 0). - - - - -Shorthand for writing Vector3(1, 0, 0). - - - - -Shorthand for writing Vector3(float.PositiveInfinity, -float.PositiveInfinity, float.PositiveInfinity). - - - - -Shorthand for writing Vector3(1, 1, 1). - - - - -Shorthand for writing Vector3(float.NegativeInfinity, -float.NegativeInfinity, float.NegativeInfinity). - - - - -Shorthand for writing Vector3(-1, 0, 0). - - - - -Shorthand for writing Vector3(0, 0, 1). - - - - -Shorthand for writing Vector3(0, -1, 0). - - - - -Shorthand for writing Vector3(0, 0, -1). - - - - -CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. -Designed to closely match Unity's Vector3 struct. - - - - -Checks if two Vector2s are not approximately equal. This is equivalent to -calling !Vector2.IsNear() with default tolerance values. - - Vector2 to compare. - Another Vector2 to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Vector2s are approximately equal. This is equivalent to -calling Vector2.IsNear() with default tolerance values. - - Vector2 to compare. - Another Vector2 to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Vector2 with a scalar value and returns -the result. - - Scalar to divide with. - Vector2 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector2 with a scalar value and returns -the result. - - Vector2 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the division of a Vector2 with a scalar value and returns -the result. - - Scalar to divide with. - Vector2 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector2 with a scalar value and returns -the result. - - Vector2 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Vector2s and returns the -result. - - Vector2 to multiply with. - Another Vector2 to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Vector2 from another Vector2 and returns the result. - - Vector2 to subtract from. - Another Vector2 to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Vector2s together and returns the result. - - Vector2 to add. - Another Vector2 to add. - The result of lhs added to rhs - - - -Moves a point current towards target. -Similar to Lerp(), however, the function will ensure that the distance never -exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the -vector away from target - - The current position of the point. - The target position to move to. - Maximum distance moved per call. - Vector representing the moved point. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Vector2, returned when t = 0.0f. - The end Vector2, returned when t = 1.0f. - Value used to interpolate between a and b. - The interpolated Vector2. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Vector2, returned when t = 0.0f. - The end Vector2, returned when t = 1.0f. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector2. - - - -Computes and returns a Vector2 that is made from the largest components of -the two specified Vector2s. - - Vector2 to calculate maximum Vector2 with. - Another Vector2 to calculate maximum Vector2 with. - -The Vector2 that contains the largest components of the two specified -Vector2s. - - - - -Computes and returns a Vector2 that is made from the smallest components of -the two specified Vector2s. - - Vector2 to calculate minimum Vector2 with. - Another Vector2 to calculate minimum Vector2 with. - -The Vector2 that contains the smallest components of the two specified -Vector2s. - - - - -Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector2 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in degrees. - - The Vector2 that represents the rotated vector. - - - -Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector2 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in radians. - - The Vector2 that represents the rotated vector. - - - -Reflects a Vector2 across another Vector2. - - A Vector2 to reflect. - A normal to reflect the Vector2 across. - The Vector2 that represents vec reflected across normal. - - - -Computes and returns a Vector2 projection. - - Vector2 to project. - Vector2 to project onto. - The Vector2 that represents the projected vec onto direction. - - - -Computes a perpendicular Vector2 to the specified Vector2. - - Vector2 to find a perpendicular of. - -Whether the inward perpendicular Vector is retrieved. If true, the -resultant vector is rotated 90-degrees in a counter-clockwise. - - The perpendicular Vector2 relative to the specified Vector2. - - - - -Computes the inward perpendicular Vector2 to the specified Vector2. -Equivalent to calling Perpendicular(lhs, true). This means, the -resultant Vector2 is rotated 90-degrees in a counter-clockwise. - - Vector2 to find a perpendicular of. - -The perpendicular Vector2 relative to the specified Vector2. - - - - -Computes and returns the dot product of 2 specified Vector2s. - - Vector2 to calculate dot product with. - Another Vector2 to calculate dot product with. - -Scalar value representing the dot product of the two Vector2s. - - - - -Checks if two specified Vector2s are near in value. - - Vector2 to check if is near in value. - Another Vector2 to check if is near in value. - -Amount of tolerance to do the comparison with. - - -True if the two Vector2s are within the tolerance value specified - - - - -Checks if two specified Vector2s are near in value. - - Vector2 to check if is near in value. - Another Vector2 to check if is near in value. - -True if the two Vector2s are within the tolerance value specified - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Checks if a specified point is near this Vector2 that represents a point. - - The other point to check if we are near. - -The amount of tolerance before we consider these points as "near". - - -True if this Vector2 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Checks if a specified point is near this Vector2 that represents a point with -a tolerance value of PLS_EPSILON. - - The other point to check if we are near. - -True if this Vector2 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -180.0f and 180.0f. - - Returns the angle of this vector from the right vector in degrees. - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -Math.PI and Math.PI. - - Returns the angle of this vector from the right vector in radians. - - - -Calculates and returns the squared magnitude of this Vector2. - - Returns the squared length of this Vector2. - - - -Calculates and returns the magnitude of this Vector2. Note that this function -incurs a performance cost from the square root calculation. If you do not -need the precise magnitude, consider using GetSqrMagnitude() instead. - - Returns the length of this Vector2. - - - -Creates a copy of this Vector2 and returns a normalized version. - - -Returns a normalised copy of this Vector2. -If this Vector2 is a zero vector, a zero vector will be returned. - - - - -Normalises this current Vector2. This changes the data of this Vector2. -If you would like to get a copy, use GetNormalised() instead. -This function does nothing to a zero vector. - - - - -Constructor to construct a Vector2 with the specified components.. - - X-coordinate to set. - Y-coordinate to set. - - - -Constructor to construct a Vector2 with the specified components with the -Y-component set to 0.0f. - - X-coordinate to set. - - - -Y-component of the Vector2. - - - - -X-component of the Vector2. - - - - -Shorthand for writing Vector2(0, 0). - - - - -Shorthand for writing Vector2(0, 1). - - - - -Shorthand for writing Vector2(1, 0). - - - - -Shorthand for writing Vector2(float.PositiveInfinity, -float.PositiveInfinity). - - - - -Shorthand for writing Vector2(1, 1). - - - - -Shorthand for writing Vector2(float.NegativeInfinity, -float.NegativeInfinity). - - - - -Shorthand for writing Vector2(-1, 0). - - - - -Shorthand for writing Vector2(0, -1). - - - - -CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. -Designed to closely match Unity's Vector2 struct. - - - - -Checks if the specified entity is valid. This is done by checking if it -matches Pls::Entity::INVALID. - - The Entity to check. - True if the specified Entity is valid. - - - -Static class that contains useful utility functions for working with Entity. - - - - -Manages all resources in multiple ResourceLibraries. - - - - -Base class for SHResourceLibrary that holds information about the library type. - - - - -Template Specialization for Handle that represents a type-less Handle. - - - - -Converts to true if this is a valid Handle. - - - - -Native ID type of a handle - - - - -Base implementation of the Handle that is not templated to allow for holding -generic non-type-specific Handles. - - - - -Exception thrown when a generic Handle is being casted to the wrong type. - - - - -Exception thrown when an invalid Handle was dereferenced. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file diff --git a/bin/Release/SHADE_CSharp.xml b/bin/Release/SHADE_CSharp.xml deleted file mode 100644 index daeaa3c5..00000000 --- a/bin/Release/SHADE_CSharp.xml +++ /dev/null @@ -1,1029 +0,0 @@ - - - - SHADE_CSharp - - - - - Interface for a CallbackAction that all variants inherit from. - - - - - Whether or not this CallbackAction is runtime assigned. If it is, then the - TargetMethodName and TargetObject properties are invalid. - - - - - Name of the method that this CallbackAction is using. - - - - - Object which the specified target method is called on. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 1 parameter. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 2 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 3 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 4 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 5 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 6 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 7 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 8 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 9 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Represents a function call that can be serialised and put togetheer with scripts. - This variant accepts functions with 10 parameters. - - - - - - - - - - - - - - Constructs an empty Callback action. - - - - - Constructs a CallbackAction that represents a call to the specified static - method. - - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a CallbackAction that represents a call to a specified member - method on the specified target. - - Object to call the method on. - Method to call. - - Thrown if a method that is not compatible with the target is specified. The method's - source type must match the target's type. - - - - - Constructs a Callback action based on an action. - - Action that wraps a function to be called. - - - - Invokes the CallbackAction's stored method/action with the specified parameters. - - - - - Interface for a CallbackEvent that all variants inherit from. - - - - - Registers an empty ICallbackAction. - - - - - Registers an ICallbackAction with the event such that it will be called in - future - - ICallbackAction to register with. - - - - Deregisters an ICallbackAction that was previously added. This should - only emit a warning if an action that was not previous added was - provided. - - ICallbackAction to remove. - - - - Iterable set of ICallbackActions that were registered to this event. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - - A container of CallbackActions that is correlated to a specific scenario as - specified by the user of this class. - This variant accepts CallbackEvents with 1 generic parameter. - - - - - - - - - - - - - - Adds a CallbackAction into the event. - - CallbackAction to add. - - - - Constructs and adds a CallbackACtion into the event. - - System.Action to add as a CallbackAction. - - - - Constructs and adds a CallbackACtion into the event. - - Object to call the method on. - Method to call. - - - - - - - Invokes all stored CallbackActions with the specified parameters. - - - - diff --git a/bin/Release/SHADE_Managed.xml b/bin/Release/SHADE_Managed.xml deleted file mode 100644 index 7b653116..00000000 --- a/bin/Release/SHADE_Managed.xml +++ /dev/null @@ -1,6250 +0,0 @@ - - - - "SHADE_Managed" - - - - -Retrieves the duration that the specified key has not been held or was last -not been held for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has been held or was last held -for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has not been held or was last -not been held for. - - The key to check. - Time in seconds that the key was held. - - - -Retrieves the duration that the specified key has been held or was last held -for. - - The key to check. - Time in seconds that the key was held. - - - -Sets the position of the mouse cursor relative to the top left corner of the -window. - - -Position of the mouse in window pixel coordinates to set. - - - - -Checks if a specified mouse button is no longer pressed and was pressed -before. - - MouseCode of the mouse button to check. - -True during the frame the user releases the given mouse button. - - - - -Checks if a specified mouse button is pressed and was not pressed before. - - MouseCode of the mouse button to check. - -True during the frame the user pressed the given mouse button. - - - - -Checks if a specified mouse button is being held down. -This will also be true if GetMouseButtonDown() is true. - - MouseCode of the mouse button to check. - True while the user holds down the mouse button specified. - - - -Checks if a specified key is no longer pressed pressed and was pressed -before. - - KeyCode of the key to check. - -True during the frame the user releases the key identified by name. - - - - -Checks if a specified key is pressed and was not pressed before. - - KeyCode of the key to check. - -True during the frame the user starts pressing down the key specified. - - - - -Checks if a specified key is being held down. -This will also be true if GetKeyDown() is true. - - KeyCode of the key to check. - True while the user holds down the key specified. - - - -Amnount of vertical mouse scroll in this frame. - - - - -Mouse position in screen coordinates relative to the top left of the window. -This value is a Vector3 for compatibility with functions that have Vector3 -arguments. The z component of the Vector3 is always 0 - - - - -Represents the available supported mouse keycodes that can be passed into the -mouse-button-based Input functions. - - - - -Represents the available supported keycodes that can be passed into the -key-based Input functions. - -Attempting to follow https://docs.unity3d.com/ScriptReference/KeyCode.html -Win32 keycodes are shift-insensitive, i.e. 'A' and 'a' are the same keycode and '1' and '!' are the same keycode - - - - -Static class responsible for providing access to Input-related functionality. - - - - -Simple attribute to mark that a field in a Script should be serialised. - - - - -Cleans up all required components for managed code. - - - - -Reloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. -Equivalent to calling UnloadScriptAssembly() and then LoadScriptAssembly(). - - - - -Loads the managed script assembly. Ensure this is only called after -UnloadScriptAssembly() has been called. - - - - -Unloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Initialises all required components for managed code. - - - - -Name of the Managed Library that contains the C# scripts written externally. - - - - -Static class that contains the functions for interfacing with the core -PlushieEngine written in C++ for managing the lifecycle of managed code. - - - - -Default Constructor - - - - -Custom AssemblyLoadContext marked as collectible so that it can be unloaded. - - - - -Time taken for Physics simulations. You should use this for operations -within Script.FixedUpdate() - - - - -Time taken to process the previous frame. - - - - -Static class that contains the functions for working with time. - - - - -Static class that wraps up certain functions in the SHPhysicsSystem so that -accessing it from SHADE_Managed would not cause issues due to C++20 features. - - - - -Constructor for a Tooltip attribute that fills in the description. - - Text to be shown when a field is hovered. - - - -Description that is to be shown in the Tooltip. - - - - -Simple attribute to provide a field in a script with a tooltip. - - - - -Checks if a specified file exists. - - File path to the file to check. - True if the file exists - - - -Deletes the folder and all files in it as specified by the file path. - - File path to the file to delete. - - - -Deletes the file as specified by the file path. - - File path to the file to delete. - - - -Reads the file via the specified path that represents a build log of error -and warning messages. - - -File path to the build log of script builds done by BuildScriptAssembly() to -dump and process. - - - - -Registers events for the scripting system - - - - -Loads all the function pointers to CLR code that we need to execute. - - - - -Generates a .csproj file for editing and compiling the C# scripts. - - File path to the generated file. - - - -Utilises execution of a external batch file for invoking the dotnet build -tool to compile C# scripts in the Assets folder into the SHADE_Scripting -C# assembly DLL. - - -Whether or not a debug build will be built. Only debug built C# assemblies -can be debugged. - - -Whether or not we are reloading the assembly, if so, unload and then reload it. - - Whether or not the build succeeded. - - - -Performs a redo for script inspector changes if it exists. - - - - -Performs an undo for script inspector changes if it exists. - - - - -Renders the set of attached Scripts for the specified Entity into the -inspector. -
    -This function is meant for consumption from native code in the inspector -rendering code. -
    - The Entity to render the Scripts of. -
    - - -Creates scripts and sets fields for the specified Entity based on the specified -YAML node. - - The Entity to deserialise a Script on to. - -YAML Node that contains the serialised script data. - - True if successfully deserialised. - - - -Performs serialization of all scripts for the specified entity into the -YAML::Node specified. This node will contain all serialised scripts after -calling this function. - - The Entity to Serialise. - -YAML Node that will store the serialised scripts. - - True if successfully serialised. - - - -Removes all Scripts attached to the specified Entity. Unlike -RemoveAllScripts(), this removes all the scripts immediately. -Does not do anything if the specified Entity is invalid or does not have any -Scripts attached. - - The entity to remove the scripts from. - -Whether or not to call OnDestroy on the scripts. This is ignored if not in -play mode. - - - - -Removes all Scripts attached to the specified Entity. Does not do anything -if the specified Entity is invalid or does not have any Scripts -attached. - - The entity to remove the scripts from. - - - -Adds a Script to a specified Entity. Note that while you can call this -multiple times on a specified Entity, it will work for all intents and -purposes but GetScript<T>() (C# only) currently only -gives you the first Script added of the specified type. - - The entity to add a script to. - Type name of the script to add. - -True if successfully added. False otherwise with the error logged to the -console. - - - - -Shuts down the DotNetRuntime. - - - - -Executes the OnCollision*()s and OnTrigger*()s of the Scripts that are attached -to Entities. - - - - -Executes the FixedUpdate()s of the Scripts that are attached to -Entities. - - - - -Reloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Unloads the managed script assembly. -Take note that this will clear all existing scripts, ensure that the scene -is saved before doing so. - - - - -Loads the managed script assembly. Ensure this is only called after -UnloadScriptAssembly() has been called. - - - - -Initialises the DotNetRuntime and retrieves function pointers to all -functions on the CLR used to interface with the engine. - - - - -Manages initialisation of the DotNetRuntime and interfacing with CLR code written -and executed on .NET. - - - - -Deserialises a YAML node that contains a map of Scripts and copies the -deserialised data into the specified object if there are matching fields. - - -The JSON string that contains the data to copy into this Script object. - - The object to copy deserialised data into. - - - -Creates a JSON node that represents the specified object and its associated -serialisable fields. Public fields and fields marked with the SerialiseField -attribute will be serialised. - - The object to serialise. - - - -Checks if a specified field is a candidate for serialisation. This means that -the field is public or private with the [SerialiseField] attribute. - - The field to check. - -True if the specified field is a candidate for serialisation. - - - - -Retrieves a set of all non-static (instance) fields from a specified object. - - The object to get non-static fields from. - Immutable list of non-static fields. - - - -Contains useful static functions for working with Reflection. - - - -Converts the node to a YAML string. - - -Emits the node to the given output stream. - - -Emits the node to the given {@link Emitter}. If there is an error in writing, -{@link Emitter#good} will return false. - - - - Loads the input file as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - @throws {@link BadFile} if the file cannot be loaded. - - - - Loads the input stream as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a list of YAML documents. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input file as a single YAML document. - - @throws {@link ParserException} if it is malformed. - @throws {@link BadFile} if the file cannot be loaded. - - - - Loads the input stream as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - - Loads the input string as a single YAML document. - - @throws {@link ParserException} if it is malformed. - - - -Handles a "TAG" directive, which should be of the form 'handle prefix', -where 'handle' is converted to 'prefix' in the file. - - - -Handles a "YAML" directive, which should be of the form 'major.minor' (like -a version number). - - - -Reads any directives that are next in the queue, setting the internal -{@code m_pDirectives} state. - - - - Handles the next document by calling events on the {@code eventHandler}. - - @throw a ParserException on error. - @return false if there are no more documents - - - -Resets the parser with the given input stream. Any existing state is -erased. - - - -Evaluates to true if the parser has some valid input to be read. - - -Constructs a parser from the given input stream. The input stream must -live as long as the parser. - - - -Constructs an empty parser (with no input. - - -A parser turns a stream of bytes into one stream of "events" per YAML -document in the input stream. - - - - -Renders a context menu when right clicked for the scripts - - The Entity to render the Scripts of. - The Script to render the inspector for. - - - -Renders a field specified into the inspector. - - The field to render. - -The object that contains the data of the field to render. - - - - -Renders a single specified Script's inspector. - - The Entity to render the Scripts of. - The Script to render the inspector for. - -Indices used internally to differentiate each rendered Script -inspector. This is required to open and close each Script's inspector -independently from each other. - - - - -Redoes the last script inspector change if there is any. - - - - -Undoes the last script inspector change if there is any. - - - - -Renders a dropdown button that allows for the addition of PlushieScripts -onto the specified Entity. - - The Entity to add PlushieScripts to. - - - -Renders the set of attached Scripts for the specified Entity into the -inspector. -
    -This function is meant for consumption from native code in the inspector -rendering code. -
    - The Entity to render the Scripts of. -
    - - -Static class for Editor-related functions - - - - -Processes a YAML node that contains a list of multiple scripts to be loaded -into the specified Entity. -

    -This function should only be called from native unmanaged code. -
    - -The Entity to attach the deserialised Scripts to. - - -Pointer to the YAML::Node that contains serialized script data. - - -
    - - -Populates a YAML node with the scripts for a specified Entity. -

    -This function should only be called from native unmanaged code. -
    - The Entity to Serialise. - -Pointer to a YAML::Node that will be populated with all of the serialised -scripts and their associated fields. - - -True if serialisation is successful. False if the buffer is too small for -the serialised output. - -
    - - -Executes OnCollision*() and OnTrigger*() for all scripts. - - - - -Executes LateUpdate() for all scripts. - - - - -Executes Update() for all scripts. - - - - -Executes FixedUpdate() for all scripts. - - - - -Retrieves a immutable list of available scripts that can be added. - - Immutable list of available scripts that can be added. - - - -Cleans up data stored in the ScriptStore to free up memory for garbage -collection. - - - - -Cleans up scripts that were marked for deletion. This calls the OnDestroy() -for these Scripts. - - - - -Sets up scripts that were marked for initialization. This calls the Awake() -and Start() for Scripts that have yet to have done so. - - - - -Initializes the ScriptStore to allocate and pre-populate reflection data. - - - - -Removes all Scripts attached to the specified Entity. Unlike -RemoveAllScripts(), this removes all the scripts immediately. -Does not do anything if the specified Entity is invalid or does not have any -Scripts attached. - - The entity to remove the scripts from. - -Whether or not to call OnDestroy on the scripts.This is ignored if not in -play mode. - - - - -Removes all Scripts attached to the specified Entity. Does not do anything -if the specified Entity is invalid or does not have any Scripts -attached. - - The entity to remove the scripts from. - - - -Removes a specific script from the - - The entity to remove the script from. - The script to remove. - True if successfully removed. False otherwise. - - - -Removes all Scripts of the specified type from the specified Entity. - - -Type of script to remove. -This needs to be a default constructable Script. - - The entity to remove the script from. - -If the specified Entity is invalid. - - - - -Retrieves an immutable list of all scripts attached to a specified Entity. - - -The entity which the scripts to retrieve are attached. - - -Immutable list of references to scripts attached to the specified Entity. -This can also be null if there are no scripts at all or an invalid Entity -was specified. - - - - -Retrieves a immutable list of scripts from the specified Entity that -matches the specified type. -
    -Note that this function allocates. It should be used sparingly. -
    - -Type of scripts to get. -This needs to be a default constructable Script. - - -The entity which the scripts to retrieve are attached. - - -Immutable list of references to scripts of the specified type. - -
    - - -Retrieves the first Script from the specified Entity's children that matches -the specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - -The entity which the script to retrieve is attached. - - -Reference to the script. This can be null if no script of the specified -type is attached. - - -If the specified Entity is invalid. - - - - -Retrieves the first Script from the specified Entity that matches the -specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - -The entity which the script to retrieve is attached. - - -Reference to the script. This can be null if no script of the specified -type is attached. - - -If the specified Entity is invalid. - - - - -Adds a Script to a specified Entity. -
    -This function is meant for consumption from native code or for serialisation -purposes. If you are writing in C# or C++/CLI and not doing serialisation, -use AddScript<T>() instead as it is faster. -
    - The entity to add a script to. - The entity to add a script to. - -Out parameter handle to the Script that was created. - - -True if successfully added. False otherwise with the error logged to the -console. - -
    - - -Adds a Script to a specified Entity. -
    -This function is meant for consumption from native code. If you are writing -in C# or C++/CLI, use AddScript<T>() instead as it is faster. -
    - The entity to add a script to. - The entity to add a script to. - -True if successfully added. False otherwise with the error logged to the -console. - -
    - - -Adds a Script to a specified Entity. - - -Type of script to add. -This needs to be a default constructable PlushieScript. - - The entity to add a script to. - Reference to the script added. - -If the specified Entity is invalid. - - - - -Responsible for managing all scripts attached to Entities as well as executing -all lifecycle functions of scripts. - - - - -Checks if two Colors are not approximately equal. - - Color to compare. - Another Color to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Colors are approximately equal. - - Color to compare. - Another Color to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Color with a scalar value and returns -the result. - - Scalar to divide with. - Color to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Color with a scalar value and returns -the result. - - Color to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Colors and returns the -result. - - Color to multiply with. - Another Color to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Color from another Color and returns the result. - - Color to subtract from. - Another Color to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Colors together and returns the result. - - Color to add. - Another Color to add. - The result of lhs added to rhs - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Color, returned when t = 0.0. - The end Color, returned when t = 1.0. - Value used to interpolate between a and b. - The interpolated Color. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Color, returned when t = 0.0. - The end Color, returned when t = 1.0. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector3. - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Alpha component of the colour. Ranges from 0.0f to 1.0f. - - - - -Blue component of the colour. Ranges from 0.0f to 1.0f. - - - - -Green component of the colour. Ranges from 0.0f to 1.0f. - - - - -Red component of the colour. Ranges from 0.0f to 1.0f. - - - - -Constructor to construct a Color with the specified components. - - Red component to set. - Green component to set. - Blue component to set. - Alpha component to set. - - - -Constructor to construct a Color with the specified components with the -alpha component set to 1.0f. - - Red component to set. - Green component to set. - Blue component to set. - - - -Constructor to construct a Color with the specified components with the -blue and alpha component set to 1.0f. - - Red component to set. - Green component to set. - - - -Constructor to construct a Color with the specified components with the -green, blue and alpha component set to 1.0f. - - Red component to set. - - - -Pure yellow, mix of pure red and green. - - - - -Pure magenta, mix of pure red and blue. - - - - -Pure cyan, mix of pure green and blue. - - - - -Pure blue. - - - - -Pure green. - - - - -Pure red. - - - - -Pure white. - - - - -Dark Gray, darker than gray. - - - - -Gray, halfway between black and white. - - - - -Light Gray, lighter than gray. - - - - -Pure black. - - - - -A static class that contains a set of default Colors. - - - - -CLR version of the the SHADE Engine's Color struct which describes a Color -encoded using floating point numbers that range from 0.0f to 1.0f. - - - - -Creates a inline button widget. -
    -Wraps up ImGui::Button(). -
    - Text to display. - True if button was pressed. -
    - - -Creates a small inline button widget. -
    -Wraps up ImGui::SmallButton(). -
    - Text to display. - True if button was pressed. -
    - - -Creates a visual text widget. -
    -Wraps up ImGui::Text(). -
    - Text to display. -
    - - -Creates a menu item in the list of items for a mini popup. -
    -Wraps up ImGui::MenuItem(). -
    - Label used to identify this widget. - Whether or not the menu item was selected. -
    - - -Opens the popup that was defined with the specified label. -
    -Wraps up ImGui::OpenPopup(). -
    -
    - - -Marks the end of a definition of a mini pop up that can show options. -
    -Wraps up ImGui::EndPopup(). -
    -
    - - -Marks the start of a definition of a mini pop up that can show options. -
    -Wraps up ImGui::BeginPopup(). -
    - Label used to identify this widget. - Whether or not the pop up is open. -
    - - -Creates a collapsing title header. -
    -Wraps up ImGui::CollapsingHeader(). -
    - Label for the header. - True if the header is open, false otherwise. -
    - - -Unindents the widgets rendered after this call. -
    -Wraps up ImGui::Unindent(). -
    -
    - - -Indents the widgets rendered after this call. -
    -Wraps up ImGui::Indent(). -
    -
    - - -Marks the end of a stack of ImGui widgets from the last PushID() call. -
    -Wraps up ImGui::PopID(). -
    -
    - - -Marks the start of a stack of ImGui widgets with the specified id. -
    -Wraps up ImGui::PushID(). -
    - Integer-based ID. -
    - - -Marks the start of a stack of ImGui widgets with the specified id. -
    -Wraps up ImGui::PushID(). -
    - String-based ID. -
    - - -Maximum length of a string supported by InputTextField() - - - - -Static class that contains useful functions for Editor UI using ImGui. - - - - -Redoes the last undo-ed command if it exists. - - - - -Undos the last added command if it exists. - - - - -Adds a command onto the stack. - - - - - -True if there is a redoable action in the stack. - - - - -True if there is an undoable action in the stack. - - - - -Command for the stack that represents a data modification. - - - - -Class that is able to store a stack of actions that can be done and redone. - - - - -To be called from native code when a Collision Shape has been changed. - - -The entity which has it's collision shape changed. - - - - -To be called from native code when a collision shape has been removed. - - The entity which has it's collision shape removed. - - - -Retrieves a ColliderBound at the specified index in the ColliderBound list -and casts it to the appropriate type. - - Type of the ColliderBound to cast to. - Index to retrieve a ColliderBound from. - ColliderBound for the specified index. - - - -Retrieves a ColliderBound at the specified index in the ColliderBound list. - - Index to retrieve a ColliderBound from. - ColliderBound for the specified index. - - - -Total number of ColliderShapes in the Collider component. - - - - -Constructs a Collider Component that represents a native SHColliderComponent -component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the the SHADE Engine's SHColliderComponent. -A single Collider component can contain one or multiple Collider Bounds. - - - - - - - - - - -Radius of the Bounding Sphere formed by this bound. - - - - -Center of the Bounding Sphere formed by this bound. - - - - -Sphere-shaped Collider Bound. - - - - - - - - - - -Position of the top right front corner of the Bounding Box formed by this -bound. - - - - -Position of the bottom left back corner of the Bounding Box formed by this -bound. - - - - -Half of the scale of the Bounding Box formed by this bound. - - - - -Center of the Bounding Box formed by this bound. - - - - -Box-shaped Collider Bound. - - - - -Computes a Raycast and checks if there is a collision with any object. - - The ray to cast. - Maximum distance for the raycast check. - True if the ray intersects with an object in the scene. - - - -Checks if the specified point is within this shape's bounds. - - Point to test with. - True if the point is in the shape's bounds. - - - -Base interface for all Collider Shapes. - - - -@brief The density of the collider that determines the mass of the collision shape - if it is automatically computed. Must be a positive number. - - - -@brief The bounciness factor of the physics object., clamped between [0,1].
    - 0 means the object will never bounce. - 1 means the object never loses energy on a bounce. - -
    - -@brief The friction coefficient of the physics object., clamped between [0,1].
    - 0 means the object will never experience friction. - 1 means the friction force against the object is equal to the applied force. - -
    - -@brief Sets the mass density of the physics material. -@param newDensity The density value to set. Always made positive. - - - -@brief Sets the bounciness factor of the physics material. -@param newBounciness The bounciness value to set. Clamped between [0,1]. - - - -@brief Sets the friction coefficient of the physics material. -@param newFriction The friction value to set. Clamped between [0,1]. - - - -@brief Default constructor for a physics material. -@param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. -@param bounciness The bounciness of the material. Clamped between [0,1]. -@param density The mass density of the material. Always made positive. - - - - -Closes the current window, and depending on the implementation, should also -close the application. - - - - -Retrieves the current window fullscreen status. - - The current window fullscreen status.. - - - -Retrieves the current window height. - - The current window height. - - - -Retrieves the current window width. - - The current window width. - - - -Static class that wraps up certain functions in the SHGraphicsSystem so that -accessing it from SHADE_Managed would not cause issues due to C++20 features. - - - - @brief Perform ImGui and ImGui Backend Render - - - - - @brief Start new frame for editor - - - - - @brief Initialise Backend for ImGui (SDL and Vulkan backend) - - @param sdlWindow Pointer to SDL_Window - - - - @brief Set the Style for the editor - - @param style Desired style - - - - @brief Safely shutdown the editor - - - - - @brief Update the editor and add to ImGui DrawList - - @param dt Delta-time of the frame - - - - @brief Initialise the editor - - @param sdlWindow pointer to SDL_Window object created in application - - - - @brief Style options - - - - - @brief SHEditor static class contains editor variables and implementation of editor functions. - - - - - Get the YUV conversion mode, returning the correct mode for the resolution - when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC - - \since This function is available since SDL 2.0.8. - - - - Get the YUV conversion mode - - \since This function is available since SDL 2.0.8. - - - - Set the YUV conversion mode - - \since This function is available since SDL 2.0.8. - - - - Perform low-level surface scaled blitting only. - - This is a semi-private function and it performs low-level surface blitting, - assuming the input rectangles have already been clipped. - - \param src the SDL_Surface structure to be copied from - \param srcrect the SDL_Rect structure representing the rectangle to be - copied - \param dst the SDL_Surface structure that is the blit target - \param dstrect the SDL_Rect structure representing the rectangle that is - copied into - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitScaled - - - - Perform a scaled surface copy to a destination surface. - - SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is - merely a macro for this function with a less confusing name. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitScaled - - - - Perform bilinear scaling between two surfaces of the same format, 32BPP. - - \since This function is available since SDL 2.0.16. - - - - Perform a fast, low quality, stretch blit between two surfaces of the same - format. - - Please use SDL_BlitScaled() instead. - - \since This function is available since SDL 2.0.0. - - - - Perform low-level surface blitting only. - - This is a semi-private blit function and it performs low-level surface - blitting, assuming the input rectangles have already been clipped. - - Unless you know what you're doing, you should be using SDL_BlitSurface() - instead. - - \param src the SDL_Surface structure to be copied from - \param srcrect the SDL_Rect structure representing the rectangle to be - copied, or NULL to copy the entire surface - \param dst the SDL_Surface structure that is the blit target - \param dstrect the SDL_Rect structure representing the rectangle that is - copied into - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - - - - * Performs a fast blit from the source surface to the destination surface. - * - * This assumes that the source and destination rectangles are - * the same size. If either \c srcrect or \c dstrect are NULL, the entire - * surface (\c src or \c dst) is copied. The final blit rectangles are saved - * in \c srcrect and \c dstrect after all clipping is performed. - * - * \returns 0 if the blit is successful, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without blending and colorkey - * are defined as follows: - * \verbatim - RGBA->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB, set destination alpha to source per-surface alpha value. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - - RGBA->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy all of RGBA to the destination. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - \endverbatim - * - * You should call SDL_BlitSurface() unless you know exactly how SDL - * blitting works internally and how to use the other blit functions. - - Perform a fast blit from the source surface to the destination surface. - - SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a - macro for this function with a less confusing name. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - - - - Perform a fast fill of a set of rectangles with a specific color. - - `color` should be a pixel of the format used by the surface, and can be - generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - alpha component then the destination is simply filled with that alpha - information, no blending takes place. - - If there is a clip rectangle set on the destination (set via - SDL_SetClipRect()), then this function will fill based on the intersection - of the clip rectangle and `rect`. - - \param dst the SDL_Surface structure that is the drawing target - \param rects an array of SDL_Rects representing the rectangles to fill. - \param count the number of rectangles in the array - \param color the color to fill with - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FillRect - - - - Perform a fast fill of a rectangle with a specific color. - - `color` should be a pixel of the format used by the surface, and can be - generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - alpha component then the destination is simply filled with that alpha - information, no blending takes place. - - If there is a clip rectangle set on the destination (set via - SDL_SetClipRect()), then this function will fill based on the intersection - of the clip rectangle and `rect`. - - \param dst the SDL_Surface structure that is the drawing target - \param rect the SDL_Rect structure representing the rectangle to fill, or - NULL to fill the entire surface - \param color the color to fill with - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FillRects - - - - Premultiply the alpha on a block of pixels. - - This is safe to use with src == dst, but not for other overlapping areas. - - This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. - - \param width the width of the block to convert, in pixels - \param height the height of the block to convert, in pixels - \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - \param src a pointer to the source pixels - \param src_pitch the pitch of the source pixels, in bytes - \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - \param dst a pointer to be filled in with premultiplied pixel data - \param dst_pitch the pitch of the destination pixels, in bytes - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.18. - - - - Copy a block of pixels of one format to another format. - - \param width the width of the block to copy, in pixels - \param height the height of the block to copy, in pixels - \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - \param src a pointer to the source pixels - \param src_pitch the pitch of the source pixels, in bytes - \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - \param dst a pointer to be filled in with new pixel data - \param dst_pitch the pitch of the destination pixels, in bytes - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - - - Copy an existing surface to a new surface of the specified format enum. - - This function operates just like SDL_ConvertSurface(), but accepts an - SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, - it might be easier to call but it doesn't have access to palette - information for the destination surface, in case that would be important. - - \param src the existing SDL_Surface structure to convert - \param pixel_format the SDL_PixelFormatEnum that the new surface is - optimized for - \param flags the flags are unused and should be set to 0; this is a - leftover from SDL 1.2's API - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - \sa SDL_ConvertSurface - \sa SDL_CreateRGBSurface - - - - Copy an existing surface to a new surface of the specified format. - - This function is used to optimize images for faster *repeat* blitting. This - is accomplished by converting the original and storing the result as a new - surface. The new, optimized surface can then be used as the source for - future blits, making them faster. - - \param src the existing SDL_Surface structure to convert - \param fmt the SDL_PixelFormat structure that the new surface is optimized - for - \param flags the flags are unused and should be set to 0; this is a - leftover from SDL 1.2's API - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - \sa SDL_ConvertSurfaceFormat - \sa SDL_CreateRGBSurface - - - - Get the clipping rectangle for a surface. - - When `surface` is the destination of a blit, only the area within the clip - rectangle is drawn into. - - \param surface the SDL_Surface structure representing the surface to be - clipped - \param rect an SDL_Rect structure filled in with the clipping rectangle for - the surface - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_SetClipRect - - - - Set the clipping rectangle for a surface. - - When `surface` is the destination of a blit, only the area within the clip - rectangle is drawn into. - - Note that blits are automatically clipped to the edges of the source and - destination surfaces. - - \param surface the SDL_Surface structure to be clipped - \param rect the SDL_Rect structure representing the clipping rectangle, or - NULL to disable clipping - \returns SDL_TRUE if the rectangle intersects the surface, otherwise - SDL_FALSE and blits will be completely clipped. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_GetClipRect - - - - Get the blend mode used for blit operations. - - \param surface the SDL_Surface structure to query - \param blendMode a pointer filled in with the current SDL_BlendMode - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_SetSurfaceBlendMode - - - - Set the blend mode used for blit operations. - - To copy a surface to another surface (or texture) without blending with the - existing data, the blendmode of the SOURCE surface should be set to - `SDL_BLENDMODE_NONE`. - - \param surface the SDL_Surface structure to update - \param blendMode the SDL_BlendMode to use for blit blending - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceBlendMode - - - - Get the additional alpha value used in blit operations. - - \param surface the SDL_Surface structure to query - \param alpha a pointer filled in with the current alpha value - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceColorMod - \sa SDL_SetSurfaceAlphaMod - - - - Set an additional alpha value used in blit operations. - - When this surface is blitted, during the blit operation the source alpha - value is modulated by this alpha value according to the following formula: - - `srcA = srcA * (alpha / 255)` - - \param surface the SDL_Surface structure to update - \param alpha the alpha value multiplied into blit operations - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceAlphaMod - \sa SDL_SetSurfaceColorMod - - - - Get the additional color value multiplied into blit operations. - - \param surface the SDL_Surface structure to query - \param r a pointer filled in with the current red color value - \param g a pointer filled in with the current green color value - \param b a pointer filled in with the current blue color value - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceAlphaMod - \sa SDL_SetSurfaceColorMod - - - - Set an additional color value multiplied into blit operations. - - When this surface is blitted, during the blit operation each source color - channel is modulated by the appropriate color value according to the - following formula: - - `srcC = srcC * (color / 255)` - - \param surface the SDL_Surface structure to update - \param r the red color value multiplied into blit operations - \param g the green color value multiplied into blit operations - \param b the blue color value multiplied into blit operations - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetSurfaceColorMod - \sa SDL_SetSurfaceAlphaMod - - - - Get the color key (transparent pixel) for a surface. - - The color key is a pixel of the format used by the surface, as generated by - SDL_MapRGB(). - - If the surface doesn't have color key enabled this function returns -1. - - \param surface the SDL_Surface structure to query - \param key a pointer filled in with the transparent pixel - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_SetColorKey - - - - Returns whether the surface has a color key - - It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - - \param surface the SDL_Surface structure to query - \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.9. - - \sa SDL_SetColorKey - \sa SDL_GetColorKey - - - - Set the color key (transparent pixel) in a surface. - - The color key defines a pixel value that will be treated as transparent in - a blit. For example, one can use this to specify that cyan pixels should be - considered transparent, and therefore not rendered. - - It is a pixel of the format used by the surface, as generated by - SDL_MapRGB(). - - RLE acceleration can substantially speed up blitting of images with large - horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. - - \param surface the SDL_Surface structure to update - \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key - \param key the transparent pixel - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_GetColorKey - - - - Returns whether the surface is RLE enabled - - It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - - \param surface the SDL_Surface structure to query - \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.14. - - \sa SDL_SetSurfaceRLE - - - - Save a surface to a file. - - Convenience macro. - - Set the RLE acceleration hint for a surface. - - If RLE is enabled, color key and alpha blending blits are much faster, but - the surface must be locked before directly accessing the pixels. - - \param surface the SDL_Surface structure to optimize - \param flag 0 to disable, non-zero to enable RLE acceleration - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_BlitSurface - \sa SDL_LockSurface - \sa SDL_UnlockSurface - - - - Load a surface from a file. - - Convenience macro. - - Save a surface to a seekable SDL data stream in BMP format. - - Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the - BMP directly. Other RGB formats with 8-bit or higher get converted to a - 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit - surface before they are saved. YUV and paletted 1-bit and 4-bit formats are - not supported. - - \param surface the SDL_Surface structure containing the image to be saved - \param dst a data stream to save to - \param freedst non-zero to close the stream after being written - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_LoadBMP_RW - \sa SDL_SaveBMP - - - - Load a BMP image from a seekable SDL data stream. - - The new surface should be freed with SDL_FreeSurface(). Not doing so will - result in a memory leak. - - src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. - Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap - from a file, convert it to an SDL_Surface and then close the file. - - \param src the data stream for the surface - \param freesrc non-zero to close the stream after being read - \returns a pointer to a new SDL_Surface structure or NULL if there was an - error; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeSurface - \sa SDL_RWFromFile - \sa SDL_LoadBMP - \sa SDL_SaveBMP_RW - - - - Release a surface after directly accessing the pixels. - - \param surface the SDL_Surface structure to be unlocked - - \since This function is available since SDL 2.0.0. - - \sa SDL_LockSurface - - - - Set up a surface for directly accessing the pixels. - - Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to - and read from `surface->pixels`, using the pixel format stored in - `surface->format`. Once you are done accessing the surface, you should use - SDL_UnlockSurface() to release it. - - Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to - 0, then you can read and write to the surface at any time, and the pixel - format of the surface will not change. - - \param surface the SDL_Surface structure to be locked - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_MUSTLOCK - \sa SDL_UnlockSurface - - - - Set the palette used by a surface. - - A single palette can be shared with many surfaces. - - \param surface the SDL_Surface structure to update - \param palette the SDL_Palette structure to use - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - - - Free an RGB surface. - - It is safe to pass NULL to this function. - - \param surface the SDL_Surface to free. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_LoadBMP - \sa SDL_LoadBMP_RW - - - - Allocate a new RGB surface with with a specific pixel format and existing - pixel data. - - This function operates mostly like SDL_CreateRGBSurfaceFrom(), except - instead of providing pixel color masks, you provide it with a predefined - format from SDL_PixelFormatEnum. - - No copy is made of the pixel data. Pixel data is not managed automatically; - you must free the surface before you free the pixel data. - - \param pixels a pointer to existing pixel data - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param pitch the pitch of the surface in bytes - \param format the SDL_PixelFormatEnum for the new surface's pixel format. - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.5. - - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - - Allocate a new RGB surface with existing pixel data. - - This function operates mostly like SDL_CreateRGBSurface(), except it does - not allocate memory for the pixel data, instead the caller provides an - existing buffer of data for the surface to use. - - No copy is made of the pixel data. Pixel data is not managed automatically; - you must free the surface before you free the pixel data. - - \param pixels a pointer to existing pixel data - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param pitch the pitch of the surface in bytes - \param Rmask the red mask for the pixels - \param Gmask the green mask for the pixels - \param Bmask the blue mask for the pixels - \param Amask the alpha mask for the pixels - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - - Allocate a new RGB surface with a specific pixel format. - - This function operates mostly like SDL_CreateRGBSurface(), except instead - of providing pixel color masks, you provide it with a predefined format - from SDL_PixelFormatEnum. - - \param flags the flags are unused and should be set to 0 - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param format the SDL_PixelFormatEnum for the new surface's pixel format. - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.5. - - \sa SDL_CreateRGBSurface - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_FreeSurface - - - - Allocate a new RGB surface. - - If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. - If `depth` is greater than 8 bits, the pixel format is set using the - [RGBA]mask parameters. - - The [RGBA]mask parameters are the bitmasks used to extract that color from - a pixel. For instance, `Rmask` being 0xFF000000 means the red data is - stored in the most significant byte. Using zeros for the RGB masks sets a - default value, based on the depth. For example: - - ```c++ - SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); - ``` - - However, using zero for the Amask results in an Amask of 0. - - By default surfaces with an alpha mask are set up for blending as with: - - ```c++ - SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) - ``` - - You can change this by calling SDL_SetSurfaceBlendMode() and selecting a - different `blendMode`. - - \param flags the flags are unused and should be set to 0 - \param width the width of the surface - \param height the height of the surface - \param depth the depth of the surface in bits - \param Rmask the red mask for the pixels - \param Gmask the green mask for the pixels - \param Bmask the blue mask for the pixels - \param Amask the alpha mask for the pixels - \returns the new SDL_Surface structure that is created or NULL if it fails; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_CreateRGBSurfaceFrom - \sa SDL_CreateRGBSurfaceWithFormat - \sa SDL_FreeSurface - - - -Reference count -- used when freeing surface - - -info for fast blit mapping to other surfaces - - -clipping information - - -list of BlitMap that hold a reference to this surface - - -information needed for surfaces requiring locks - - -Application data associated with the surface - - - \brief A collection of pixels used in software blitting. - - \note This structure should be treated as read-only, except for \c pixels, - which, if not NULL, contains the raw pixel data for the surface. - - -\brief The type of function used for surface blitting functions. - - - - Compose a custom blend mode for renderers. - - The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept - the SDL_BlendMode returned by this function if the renderer supports it. - - A blend mode controls how the pixels from a drawing operation (source) get - combined with the pixels from the render target (destination). First, the - components of the source and destination pixels get multiplied with their - blend factors. Then, the blend operation takes the two products and - calculates the result that will get stored in the render target. - - Expressed in pseudocode, it would look like this: - - ```c - dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); - dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); - ``` - - Where the functions `colorOperation(src, dst)` and `alphaOperation(src, - dst)` can return one of the following: - - - `src + dst` - - `src - dst` - - `dst - src` - - `min(src, dst)` - - `max(src, dst)` - - The red, green, and blue components are always multiplied with the first, - second, and third components of the SDL_BlendFactor, respectively. The - fourth component is not used. - - The alpha component is always multiplied with the fourth component of the - SDL_BlendFactor. The other components are not used in the alpha - calculation. - - Support for these blend modes varies for each renderer. To check if a - specific SDL_BlendMode is supported, create a renderer and pass it to - either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will - return with an error if the blend mode is not supported. - - This list describes the support of custom blend modes for each renderer in - SDL 2.0.6. All renderers support the four blend modes listed in the - SDL_BlendMode enumeration. - - - **direct3d**: Supports all operations with all factors. However, some - factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and - `SDL_BLENDOPERATION_MAXIMUM`. - - **direct3d11**: Same as Direct3D 9. - - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL - 2.0.6. - - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - factors. Color and alpha factors need to be the same. OpenGL ES 1 - implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` - and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha - operations being different from each other. May support color and alpha - factors being different from each other. - - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, - `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` - operations with all factors. - - **psp**: No custom blend mode support. - - **software**: No custom blend mode support. - - Some renderers do not provide an alpha component for the default render - target. The `SDL_BLENDFACTOR_DST_ALPHA` and - `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this - case. - - \param srcColorFactor the SDL_BlendFactor applied to the red, green, and - blue components of the source pixels - \param dstColorFactor the SDL_BlendFactor applied to the red, green, and - blue components of the destination pixels - \param colorOperation the SDL_BlendOperation used to combine the red, - green, and blue components of the source and - destination pixels - \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of - the source pixels - \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of - the destination pixels - \param alphaOperation the SDL_BlendOperation used to combine the alpha - component of the source and destination pixels - \returns an SDL_BlendMode that represents the chosen factors and - operations. - - \since This function is available since SDL 2.0.6. - - \sa SDL_SetRenderDrawBlendMode - \sa SDL_GetRenderDrawBlendMode - \sa SDL_SetTextureBlendMode - \sa SDL_GetTextureBlendMode - - - - Calculate the intersection of a rectangle and line segment with float - precision. - - This function is used to clip a line segment to a rectangle. A line segment - contained entirely within the rectangle or that does not intersect will - remain unchanged. A line segment that crosses the rectangle at either or - both ends will be clipped to the boundary of the rectangle and the new - coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - - \param rect an SDL_FRect structure representing the rectangle to intersect - \param X1 a pointer to the starting X-coordinate of the line - \param Y1 a pointer to the starting Y-coordinate of the line - \param X2 a pointer to the ending X-coordinate of the line - \param Y2 a pointer to the ending Y-coordinate of the line - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - - - Calculate a minimal rectangle enclosing a set of points with float - precision. - - If `clip` is not NULL then only points inside of the clipping rectangle are - considered. - - \param points an array of SDL_FPoint structures representing points to be - enclosed - \param count the number of structures in the `points` array - \param clip an SDL_FRect used for clipping or NULL to enclose all points - \param result an SDL_FRect structure filled in with the minimal enclosing - rectangle - \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - points were outside of the clipping rectangle. - - \since This function is available since SDL 2.0.22. - - - - Calculate the union of two rectangles with float precision. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \param result an SDL_FRect structure filled in with the union of rectangles - `A` and `B` - - \since This function is available since SDL 2.0.22. - - - - Calculate the intersection of two rectangles with float precision. - - If `result` is NULL then this function will return SDL_FALSE. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \param result an SDL_FRect structure filled in with the intersection of - rectangles `A` and `B` - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - \sa SDL_HasIntersectionF - - - - Determine whether two rectangles intersect with float precision. - - If either pointer is NULL the function will return SDL_FALSE. - - \param A an SDL_FRect structure representing the first rectangle - \param B an SDL_FRect structure representing the second rectangle - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.22. - - \sa SDL_IntersectRect - - - - Returns true if the two rectangles are equal, using a default epsilon. - - \since This function is available since SDL 2.0.22. - - - - Returns true if the two rectangles are equal, within some given epsilon. - - \since This function is available since SDL 2.0.22. - - - -Returns true if the rectangle has no area. - - - -Returns true if point resides inside a rectangle. - - - - Calculate the intersection of a rectangle and line segment. - - This function is used to clip a line segment to a rectangle. A line segment - contained entirely within the rectangle or that does not intersect will - remain unchanged. A line segment that crosses the rectangle at either or - both ends will be clipped to the boundary of the rectangle and the new - coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - - \param rect an SDL_Rect structure representing the rectangle to intersect - \param X1 a pointer to the starting X-coordinate of the line - \param Y1 a pointer to the starting Y-coordinate of the line - \param X2 a pointer to the ending X-coordinate of the line - \param Y2 a pointer to the ending Y-coordinate of the line - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - - - Calculate a minimal rectangle enclosing a set of points. - - If `clip` is not NULL then only points inside of the clipping rectangle are - considered. - - \param points an array of SDL_Point structures representing points to be - enclosed - \param count the number of structures in the `points` array - \param clip an SDL_Rect used for clipping or NULL to enclose all points - \param result an SDL_Rect structure filled in with the minimal enclosing - rectangle - \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - points were outside of the clipping rectangle. - - \since This function is available since SDL 2.0.0. - - - - Calculate the union of two rectangles. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \param result an SDL_Rect structure filled in with the union of rectangles - `A` and `B` - - \since This function is available since SDL 2.0.0. - - - - Calculate the intersection of two rectangles. - - If `result` is NULL then this function will return SDL_FALSE. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \param result an SDL_Rect structure filled in with the intersection of - rectangles `A` and `B` - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - \sa SDL_HasIntersection - - - - Determine whether two rectangles intersect. - - If either pointer is NULL the function will return SDL_FALSE. - - \param A an SDL_Rect structure representing the first rectangle - \param B an SDL_Rect structure representing the second rectangle - \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - - \since This function is available since SDL 2.0.0. - - \sa SDL_IntersectRect - - - -Returns true if the two rectangles are equal. - - - -Returns true if the rectangle has no area. - - - -Returns true if point resides inside a rectangle. - - - - A rectangle, with the origin at the upper left (floating point). - - \sa SDL_FRectEmpty - \sa SDL_FRectEquals - \sa SDL_FRectEqualsEpsilon - \sa SDL_HasIntersectionF - \sa SDL_IntersectFRect - \sa SDL_IntersectFRectAndLine - \sa SDL_UnionFRect - \sa SDL_EncloseFPoints - \sa SDL_PointInFRect - - - - A rectangle, with the origin at the upper left (integer). - - \sa SDL_RectEmpty - \sa SDL_RectEquals - \sa SDL_HasIntersection - \sa SDL_IntersectRect - \sa SDL_IntersectRectAndLine - \sa SDL_UnionRect - \sa SDL_EnclosePoints - - - - The structure that defines a point (floating point) - - \sa SDL_EncloseFPoints - \sa SDL_PointInFRect - - - - Use this function to write 64 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE64 - - - - Use this function to write 64 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE64 - - - - Use this function to write 32 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE32 - - - - Use this function to write 32 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE32 - - - - Use this function to write 16 bits in native format to a SDL_RWops as - big-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in big-endian format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteLE16 - - - - Use this function to write 16 bits in native format to a SDL_RWops as - little-endian data. - - SDL byteswaps the data only if necessary, so the application always - specifies native format, and the data written will be in little-endian - format. - - \param dst the stream to which data will be written - \param value the data to be written, in native format - \returns 1 on successful write, 0 on error. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteBE16 - - - - \name Write endian functions - - Write an item of native format to the specified endianness. - - Use this function to write a byte to an SDL_RWops. - - \param dst the SDL_RWops to write to - \param value the byte value to write - \returns 1 on success or 0 on failure; call SDL_GetError() for more - information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadU8 - - - - Use this function to read 64 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 64 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE64 - - - - Use this function to read 64 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 64 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE64 - - - - Use this function to read 32 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 32 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE32 - - - - Use this function to read 32 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 32 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE32 - - - - Use this function to read 16 bits of big-endian data from an SDL_RWops and - return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 16 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadLE16 - - - - Use this function to read 16 bits of little-endian data from an SDL_RWops - and return in native format. - - SDL byteswaps the data only if necessary, so the data returned will be in - the native byte order. - - \param src the stream from which to read data - \returns 16 bits of data in the native byte order of the platform. - - \since This function is available since SDL 2.0.0. - - \sa SDL_ReadBE16 - - - - \name Read endian functions - - Read an item of the specified endianness and return in native format. - - Use this function to read a byte from an SDL_RWops. - - \param src the SDL_RWops to read from - \returns the read byte on success or 0 on failure; call SDL_GetError() for - more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_WriteU8 - - - - Load all the data from a file path. - - The data is allocated with a zero byte at the end (null terminated) for - convenience. This extra byte is not included in the value reported via - `datasize`. - - The data should be freed with SDL_free(). - - Prior to SDL 2.0.10, this function was a macro wrapping around - SDL_LoadFile_RW. - - \param file the path to read all available data from - \param datasize if not NULL, will store the number of bytes read - \returns the data, or NULL if there was an error. - - \since This function is available since SDL 2.0.10. - - - - Load all the data from an SDL data stream. - - The data is allocated with a zero byte at the end (null terminated) for - convenience. This extra byte is not included in the value reported via - `datasize`. - - The data should be freed with SDL_free(). - - \param src the SDL_RWops to read all available data from - \param datasize if not NULL, will store the number of bytes read - \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning - \returns the data, or NULL if there was an error. - - \since This function is available since SDL 2.0.6. - - - - Close and free an allocated SDL_RWops structure. - - SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any - resources used by the stream and frees the SDL_RWops itself with - SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to - flush to its output (e.g. to disk). - - Note that if this fails to flush the stream to disk, this function reports - an error, but the SDL_RWops is still invalid once this function returns. - - Prior to SDL 2.0.10, this function was a macro. - - \param context SDL_RWops structure to close - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Write to an SDL_RWops data stream. - - This function writes exactly `num` objects each of size `size` from the - area pointed at by `ptr` to the stream. If this fails for any reason, it'll - return less than `num` to demonstrate how far the write progressed. On - success, it returns `num`. - - SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's - `write` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param ptr a pointer to a buffer containing data to write - \param size the size of an object to write, in bytes - \param num the number of objects to write - \returns the number of objects written, which will be less than **num** on - error; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - - - - Read from a data source. - - This function reads up to `maxnum` objects each of size `size` from the - data source to the area pointed at by `ptr`. This function may read less - objects than requested. It will return zero when there has been an error or - the data stream is completely read. - - SDL_RWread() is actually a function wrapper that calls the SDL_RWops's - `read` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param ptr a pointer to a buffer to read data into - \param size the size of each object to read, in bytes - \param maxnum the maximum number of objects to be read - \returns the number of objects read, or 0 at error or end of file; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Determine the current read/write offset in an SDL_RWops data stream. - - SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` - method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify - application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a SDL_RWops data stream object from which to get the current - offset - \returns the current offset in the stream, or -1 if the information can not - be determined. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWwrite - - - - Seek within an SDL_RWops data stream. - - This function seeks to byte `offset`, relative to `whence`. - - `whence` may be any of the following values: - - - `RW_SEEK_SET`: seek from the beginning of data - - `RW_SEEK_CUR`: seek relative to current read point - - `RW_SEEK_END`: seek relative to the end of data - - If this stream can not seek, it will return -1. - - SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's - `seek` method appropriately, to simplify application development. - - Prior to SDL 2.0.10, this function was a macro. - - \param context a pointer to an SDL_RWops structure - \param offset an offset in bytes, relative to **whence** location; can be - negative - \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` - \returns the final offset in the data stream after the seek or -1 on error. - - \since This function is available since SDL 2.0.10. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWtell - \sa SDL_RWwrite - - - - Use this function to get the size of the data stream in an SDL_RWops. - - Prior to SDL 2.0.10, this function was a macro. - - \param context the SDL_RWops to get the size of the data stream from - \returns the size of the data stream in the SDL_RWops on success, -1 if - unknown or a negative error code on failure; call SDL_GetError() - for more information. - - \since This function is available since SDL 2.0.10. - - - - Use this function to free an SDL_RWops structure allocated by - SDL_AllocRW(). - - Applications do not need to use this function unless they are providing - their own SDL_RWops implementation. If you just need a SDL_RWops to - read/write a common data source, you should use the built-in - implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and - call the **close** method on those SDL_RWops pointers when you are done - with them. - - Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is - invalid as soon as this function returns. Any extra memory allocated during - creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must - be responsible for managing that memory in their **close** method. - - \param area the SDL_RWops structure to be freed - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocRW - - - - Use this function to allocate an empty, unpopulated SDL_RWops structure. - - Applications do not need to use this function unless they are providing - their own SDL_RWops implementation. If you just need a SDL_RWops to - read/write a common data source, you should use the built-in - implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. - - You must free the returned pointer with SDL_FreeRW(). Depending on your - operating system and compiler, there may be a difference between the - malloc() and free() your program uses and the versions SDL calls - internally. Trying to mix the two can cause crashing such as segmentation - faults. Since all SDL_RWops must free themselves when their **close** - method is called, all SDL_RWops must be allocated through this function, so - they can all be freed correctly with SDL_FreeRW(). - - \returns a pointer to the allocated memory on success, or NULL on failure; - call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeRW - - - - Use this function to prepare a read-only memory buffer for use with RWops. - - This function sets up an SDL_RWops struct based on a memory area of a - certain size. It assumes the memory area is not writable. - - Attempting to write to this RWops stream will report an error without - writing to the memory buffer. - - This memory buffer is not copied by the RWops; the pointer you provide must - remain valid until you close the stream. Closing the stream will not free - the original buffer. - - If you need to write to a memory buffer, you should use SDL_RWFromMem() - with a writable buffer of memory instead. - - \param mem a pointer to a read-only buffer to feed an SDL_RWops stream - \param size the buffer size, in bytes - \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - - - - Use this function to prepare a read-write memory buffer for use with - SDL_RWops. - - This function sets up an SDL_RWops struct based on a memory area of a - certain size, for both read and write access. - - This memory buffer is not copied by the RWops; the pointer you provide must - remain valid until you close the stream. Closing the stream will not free - the original buffer. - - If you need to make sure the RWops never writes to the memory buffer, you - should use SDL_RWFromConstMem() with a read-only buffer of memory instead. - - \param mem a pointer to a buffer to feed an SDL_RWops stream - \param size the buffer size, in bytes - \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - - Use this function to create an SDL_RWops structure from a standard I/O file - pointer (stdio.h's `FILE*`). - - This function is not available on Windows, since files opened in an - application on that platform cannot be used by a dynamically linked - library. - - On some platforms, the first parameter is a `void*`, on others, it's a - `FILE*`, depending on what system headers are available to SDL. It is - always intended to be the `FILE*` type from the C runtime's stdio.h. - - \param fp the `FILE*` that feeds the SDL_RWops stream - \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, - SDL_FALSE to leave the `FILE*` open when the RWops is - closed - \returns a pointer to the SDL_RWops structure that is created, or NULL on - failure; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFile - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - - \name RWFrom functions - - Functions to create SDL_RWops structures from various data streams. - - Use this function to create a new SDL_RWops structure for reading from - and/or writing to a named file. - - The `mode` string is treated roughly the same as in a call to the C - library's fopen(), even if SDL doesn't happen to use fopen() behind the - scenes. - - Available `mode` strings: - - - "r": Open a file for reading. The file must exist. - - "w": Create an empty file for writing. If a file with the same name - already exists its content is erased and the file is treated as a new - empty file. - - "a": Append to a file. Writing operations append data at the end of the - file. The file is created if it does not exist. - - "r+": Open a file for update both reading and writing. The file must - exist. - - "w+": Create an empty file for both reading and writing. If a file with - the same name already exists its content is erased and the file is - treated as a new empty file. - - "a+": Open a file for reading and appending. All writing operations are - performed at the end of the file, protecting the previous content to be - overwritten. You can reposition (fseek, rewind) the internal pointer to - anywhere in the file for reading, but writing operations will move it - back to the end of file. The file is created if it does not exist. - - **NOTE**: In order to open a file as a binary file, a "b" character has to - be included in the `mode` string. This additional "b" character can either - be appended at the end of the string (thus making the following compound - modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the - letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). - Additional characters may follow the sequence, although they should have no - effect. For example, "t" is sometimes appended to make explicit the file is - a text file. - - This function supports Unicode filenames, but they must be encoded in UTF-8 - format, regardless of the underlying operating system. - - As a fallback, SDL_RWFromFile() will transparently open a matching filename - in an Android app's `assets`. - - Closing the SDL_RWops will close the file handle SDL is holding internally. - - \param file a UTF-8 string representing the filename to open - \param mode an ASCII string representing the mode to be used for opening - the file. - \returns a pointer to the SDL_RWops structure that is created, or NULL on - failure; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_RWclose - \sa SDL_RWFromConstMem - \sa SDL_RWFromFP - \sa SDL_RWFromMem - \sa SDL_RWread - \sa SDL_RWseek - \sa SDL_RWtell - \sa SDL_RWwrite - - - -Return the size of the file in this rwops, or -1 if unknown - - - Seek to \c offset relative to \c whence, one of stdio's whence values: - RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END - - \return the final offset in the data stream, or -1 on error. - - - Read up to \c maxnum objects each of size \c size from the data - stream to the area pointed at by \c ptr. - - \return the number of objects read, or 0 at error or end of file. - - - Write exactly \c num objects each of size \c size from the area - pointed at by \c ptr to data stream. - - \return the number of objects written, or 0 at error or end of file. - - - Close and free an allocated SDL_RWops structure. - - \return 0 if successful or -1 on write error when flushing data. - - - - Clear any previous error message for this thread. - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetError - \sa SDL_SetError - - - - Get the last error message that was set for the current thread. - - This allows the caller to copy the error string into a provided buffer, but - otherwise operates exactly the same as SDL_GetError(). - - \param errstr A buffer to fill with the last error message that was set for - the current thread - \param maxlen The size of the buffer pointed to by the errstr parameter - \returns the pointer passed in as the `errstr` parameter. - - \since This function is available since SDL 2.0.14. - - \sa SDL_GetError - - - - Retrieve a message about the last error that occurred on the current - thread. - - It is possible for multiple errors to occur before calling SDL_GetError(). - Only the last error is returned. - - The message is only applicable when an SDL function has signaled an error. - You must check the return values of SDL function calls to determine when to - appropriately call SDL_GetError(). You should *not* use the results of - SDL_GetError() to decide if an error has occurred! Sometimes SDL will set - an error string even when reporting success. - - SDL will *not* clear the error string for successful API calls. You *must* - check return values for failure cases before you can assume the error - string applies. - - Error strings are set per-thread, so an error set in a different thread - will not interfere with the current thread's operation. - - The returned string is internally allocated and must not be freed by the - application. - - \returns a message with information about the specific error that occurred, - or an empty string if there hasn't been an error message set since - the last call to SDL_ClearError(). The message is only applicable - when an SDL function has signaled an error. You must check the - return values of SDL function calls to determine when to - appropriately call SDL_GetError(). - - \since This function is available since SDL 2.0.0. - - \sa SDL_ClearError - \sa SDL_SetError - - - - Calculate a 256 entry gamma ramp for a gamma value. - - \param gamma a gamma value where 0.0 is black and 1.0 is identity - \param ramp an array of 256 values filled in with the gamma ramp - - \since This function is available since SDL 2.0.0. - - \sa SDL_SetWindowGammaRamp - - - - Get RGBA values from a pixel in the specified format. - - This function uses the entire 8-bit [0..255] range when converting color - components from pixel formats with less than 8-bits per RGB component - (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - - If the surface has no alpha component, the alpha will be returned as 0xff - (100% opaque). - - \param pixel a pixel value - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r a pointer filled in with the red component - \param g a pointer filled in with the green component - \param b a pointer filled in with the blue component - \param a a pointer filled in with the alpha component - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_MapRGB - \sa SDL_MapRGBA - - - - Get RGB values from a pixel in the specified format. - - This function uses the entire 8-bit [0..255] range when converting color - components from pixel formats with less than 8-bits per RGB component - (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - - \param pixel a pixel value - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r a pointer filled in with the red component - \param g a pointer filled in with the green component - \param b a pointer filled in with the blue component - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGBA - \sa SDL_MapRGB - \sa SDL_MapRGBA - - - - Map an RGBA quadruple to a pixel value for a given pixel format. - - This function maps the RGBA color value to the specified pixel format and - returns the pixel value best approximating the given RGBA color value for - the given pixel format. - - If the specified pixel format has no alpha component the alpha value will - be ignored (as it will be in formats with a palette). - - If the format has a palette (8-bit) the index of the closest matching color - in the palette will be returned. - - If the pixel format bpp (color depth) is less than 32-bpp then the unused - upper bits of the return value can safely be ignored (e.g., with a 16-bpp - format the return value can be assigned to a Uint16, and similarly a Uint8 - for an 8-bpp format). - - \param format an SDL_PixelFormat structure describing the format of the - pixel - \param r the red component of the pixel in the range 0-255 - \param g the green component of the pixel in the range 0-255 - \param b the blue component of the pixel in the range 0-255 - \param a the alpha component of the pixel in the range 0-255 - \returns a pixel value - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_GetRGBA - \sa SDL_MapRGB - - - - Map an RGB triple to an opaque pixel value for a given pixel format. - - This function maps the RGB color value to the specified pixel format and - returns the pixel value best approximating the given RGB color value for - the given pixel format. - - If the format has a palette (8-bit) the index of the closest matching color - in the palette will be returned. - - If the specified pixel format has an alpha component it will be returned as - all 1 bits (fully opaque). - - If the pixel format bpp (color depth) is less than 32-bpp then the unused - upper bits of the return value can safely be ignored (e.g., with a 16-bpp - format the return value can be assigned to a Uint16, and similarly a Uint8 - for an 8-bpp format). - - \param format an SDL_PixelFormat structure describing the pixel format - \param r the red component of the pixel in the range 0-255 - \param g the green component of the pixel in the range 0-255 - \param b the blue component of the pixel in the range 0-255 - \returns a pixel value - - \since This function is available since SDL 2.0.0. - - \sa SDL_GetRGB - \sa SDL_GetRGBA - \sa SDL_MapRGBA - - - - Free a palette created with SDL_AllocPalette(). - - \param palette the SDL_Palette structure to be freed - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - - - - Set a range of colors in a palette. - - \param palette the SDL_Palette structure to modify - \param colors an array of SDL_Color structures to copy into the palette - \param firstcolor the index of the first palette entry to modify - \param ncolors the number of entries to modify - \returns 0 on success or a negative error code if not all of the colors - could be set; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - \sa SDL_CreateRGBSurface - - - - Set the palette for a pixel format structure. - - \param format the SDL_PixelFormat structure that will use the palette - \param palette the SDL_Palette structure that will be used - \returns 0 on success or a negative error code on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocPalette - \sa SDL_FreePalette - - - - Create a palette structure with the specified number of color entries. - - The palette entries are initialized to white. - - \param ncolors represents the number of color entries in the color palette - \returns a new SDL_Palette structure on success or NULL on failure (e.g. if - there wasn't enough memory); call SDL_GetError() for more - information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreePalette - - - - Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). - - \param format the SDL_PixelFormat structure to free - - \since This function is available since SDL 2.0.0. - - \sa SDL_AllocFormat - - - - Create an SDL_PixelFormat structure corresponding to a pixel format. - - Returned structure may come from a shared global cache (i.e. not newly - allocated), and hence should not be modified, especially the palette. Weird - errors such as `Blit combination not supported` may occur. - - \param pixel_format one of the SDL_PixelFormatEnum values - \returns the new SDL_PixelFormat structure or NULL on failure; call - SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_FreeFormat - - - - Convert a bpp value and RGBA masks to an enumerated pixel format. - - This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't - possible. - - \param bpp a bits per pixel value; usually 15, 16, or 32 - \param Rmask the red mask for the format - \param Gmask the green mask for the format - \param Bmask the blue mask for the format - \param Amask the alpha mask for the format - \returns one of the SDL_PixelFormatEnum values - - \since This function is available since SDL 2.0.0. - - \sa SDL_PixelFormatEnumToMasks - - - - Convert one of the enumerated pixel formats to a bpp value and RGBA masks. - - \param format one of the SDL_PixelFormatEnum values - \param bpp a bits per pixel value; usually 15, 16, or 32 - \param Rmask a pointer filled in with the red mask for the format - \param Gmask a pointer filled in with the green mask for the format - \param Bmask a pointer filled in with the blue mask for the format - \param Amask a pointer filled in with the alpha mask for the format - \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't - possible; call SDL_GetError() for more information. - - \since This function is available since SDL 2.0.0. - - \sa SDL_MasksToPixelFormatEnum - - - - Get the human readable name of a pixel format. - - \param format the pixel format to query - \returns the human readable name of the specified pixel format or - `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. - - \since This function is available since SDL 2.0.0. - - - -\note Everything in the pixel format structure is read-only. - - - -The bits of this structure can be directly reinterpreted as an integer-packed -color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 -on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). - - - - If a + b would overflow, return -1. Otherwise store a + b via ret - and return 0. - - \since This function is available since SDL 2.24.0. - - - - If a * b would overflow, return -1. Otherwise store a * b via ret - and return 0. - - \since This function is available since SDL 2.24.0. - - - - This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. - - \since This function is available since SDL 2.0.0. - - - - Get the number of outstanding (unfreed) allocations - - \since This function is available since SDL 2.0.7. - - - - Replace SDL's memory allocation functions with a custom set - - \since This function is available since SDL 2.0.7. - - - - Get the current set of SDL memory functions - - \since This function is available since SDL 2.0.7. - - - - Get the original set of SDL memory functions - - \since This function is available since SDL 2.24.0. - - - -\endcond - \file begin_code.h - - This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) - - - -\name Floating-point constants - -\cond - - -\brief An unsigned 64-bit integer type. - - - -\brief A signed 64-bit integer type. - - - -\brief An unsigned 32-bit integer type. - - - -\brief A signed 32-bit integer type. - - - -\brief An unsigned 16-bit integer type. - - - -\brief A signed 16-bit integer type. - - - -\brief An unsigned 8-bit integer type. - - - -\brief A signed 8-bit integer type. - - - - \file close_code.h - - This file reverses the effects of begin_code.h and should be included - after you finish any function and structure declarations in your headers - - - - \file SDL_stdinc.h - - This is a general header that includes C language support. - - \file SDL_platform.h - - Try to get a standard set of platform defines. - - \file begin_code.h - - This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) - - Get the name of the platform. - - Here are the names returned for some (but not all) supported platforms: - - - "Windows" - - "Mac OS X" - - "Linux" - - "iOS" - - "Android" - - \returns the name of the platform. If the correct platform name is not - available, returns a string beginning with the text "Unknown". - - \since This function is available since SDL 2.0.0. - - - -*!************************************************************************* - - - -Marks the application to stop at the end of the current frame. - - - - -Whether or not the application is currently in fullscreen mode or not. - - - - -Retrieves the designated height of the current window. - - - - -Retrieves the designated width of the current window. - - - - -Whether or not the engine is in a paused state where script updates and -physics are not in play. - - - - -Whether or not the engine is playing. This will always be true on Publish. -On Debug/Release builds, this is true when the editor is in Play Mode. It -will also be true even if the editor is in Play Mode but is paused. - - - - -Static class that contains useful properties for querying the state of the -engine. - - - - -Sets the parent of this Transform component. - - -Entity that contains the Transform component that this Transform will be -parented to. If null, unparenting will occur. - - -If true, the transform values of this Transform component will retain their -pre-parent-change global transforms. The local transform values will be -modified to ensure that the global transforms do not change. - - - - -Parent Transform that affects this Transform. - - - - -Global scale stored by this Transform. - - - - -Global euler angle rotations stored by this Transform. - - - - -Global rotation quaternion stored by this Transform. - - - - -Global position stored by this Transform. - - - - -Local scale stored by this Transform. - - - - -Local euler angle rotations stored by this Transform. - - - - -Local rotation quaternion stored by this Transform. - - - - -Local position stored by this Transform. - - - - -Constructs a Transform Component that represents a native Transform component -tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the SHADE Engine's TransformComponent. - - - - -Compares if two float values are close enough to be the same with the -specified tolerance value. - - One of the values to compare. - The other value to compare. - Tolerance for floating point comparison. - True if a and b are practically the same. - - - -Compares if two float values are close enough to be the same with a tolerance -of Epsilon. - - One of the values to compare. - The other value to compare. - True if a and b are practically the same. - - - -Calculates the linear parameter t that produces the interpolant value within -the range [a, b]. - - Start value. - End value. - Value between start and end. - Percentage of value between start and end. - - - -Linearly interpolates between a and b by t. -The parameter t is not clamped and a value based on a and b is supported. -If t is less than zero, or greater than one, then LerpUnclamped will result -in a return value outside the range a to b. - - The start value. - The end value. - The interpolation value between the two float. - The interpolated float result between the two float values. - - - -Linearly interpolates between a and b by t. -The parameter t is clamped to the range [0, 1]. - - The start value. - The end value. - The interpolation value between the two float. - The interpolated float result between the two float values. - - - -Converts an angle from radian representation to degree representation. - - Radian-based angle to convert. - The specified angle in degrees. - - - -Converts an angle from degree representation to radian representation. - - Degree-based angle to convert. - The specified angle in radians. - - - -Wraps a value if they get to low or too high. - - Value to wrap. - Minimum value to wrap at. - Maximum value to wrap at. - Wrapped value. - - - -Small value used for single precision floating point comparisons. - - - - -Radians-to-degrees conversion constant - - - - -Degrees-to-radians conversion constant - - - - -Contains utility Math functions. - - - - -Logs a native exception that is formatted nicely to the output. - - Native exception to log. - Name of the one responsible for the exception. - - - -Logs an exception that is formatted nicely to the output. - - Name of the one responsible for the exception. - Exception to log. - - - -Logs a native exception that is formatted nicely to the output. -Equivalent to calling -LogException(exception, Convert::ToNative(thrower->GetType()->Name)); - - Native exception to log. - -Object that threw the exception to label the exception message. -The name of the object will be used. - - - - -Logs an exception that is formatted nicely to the output. - - Exception to log. - -Object that threw the exception to label the exception message. -The name of the object will be used. - - - - -Logs an exception that is formatted nicely to the output. - - Exception to log. - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that threw the error to label the error message. -The name of the object will be used. - - - - -Logs a error message to the output. - - The string to output. - - - -Logs a error message to the output. - - The string to output. - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that threw the warning to label the warning message. -The name of the object will be used. - - - - -Logs a warning message to the output. - - The string to output. - - - -Logs a warning message to the output. - - The string to output. - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Name of the object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output with a label such that it looks like this: -"[Label] Message" - - The string to output. - -Object that sent the message to label the message. -The name of the object will be used. - - - - -Logs a message to the output. - - The string to output. - - - -Logs a message to the output. - - The string to output. - - - -Static class that contains the functions for working with time. - - - - -Material used to render this Renderable. - - - - -Material used to render this Renderable. - - - - -Mesh used to render this Renderable. - - - - -Constructs a Renderable Component that represents a native Renderable -component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the SHADE Engine's SHRenderableComponent. - - - - -Retrieves the value of a specified property on the material. - - Type of property to get. - Name of the property to get. - Value of that property on the material. - -If this Material object is invalid. - - -If the name or type was specified that does not match the material's shader's -defined properties. - - - - -Set the value of a specific property. - - Type of property to set. - Name of the property to set. - Value to set te property to. - -If this Material object is invalid. - - -If the name or type was specified that does not match the material's shader's -defined properties. - - - - -Constructor for the Material - - Handle to the native material object. - - - -Managed counterpart of the native MaterialInstance object containing material -data that can be fed to Renderables for rendering. - - - - -Constructor for the Mesh - - Handle to the mesh object. - - - -Managed counterpart of the native Mesh object containing vertex data that can -be fed to Renderables for rendering. - - - -@brief Decomposes a transformation matrix into translation, orientation and scale. -@param[out] scale The scaling factor of the matrix. -@param[out] orientation The orientation of the matrix. -@param[out] translation The translation of the matrix. -@return True if decomposition was successful. - - - -@brief Decomposes a transformation matrix into translation, euler angles and scale. -@param[out] scale The scaling factor of the matrix. -@param[out] rotation The euler angles of the matrix. -@param[out] translation The translation of the matrix. -@return True if decomposition was successful. - - - -@brief Interface for a Column-Major Row Vector 4x4 Matrix. - - - - -Constructs a RigidBody Component that represents a native -SHRigidBodyComponent component tied to the specified Entity. - - Entity that this Component will be tied to. - - - -CLR version of the the SHADE Engine's SHRigidBodyComponent. - - - - -Creates an instance of the Managed representation of a Component with a -native Entity. - - Type of Component to create. - Native Entity that this Component is tied to. - The created Managed representation of the Component. - - - -Static constructor to initialize static data - - - - -Pointer to a function for Component manipulation operations. - - -Contains a set of Component related data used for resolving operations for -each Component. - - - - -Removes a Component from the specified Entity. - - Type of the Component to remove. - -Entity object that should have the specified Component removed from/ - - - - -Checks if the specified Entity has the specified Component. - - Type of the Component to check for. - Entity object to check for the Component. - -True if the specified Entity has the specified Component. False otherwise. - - - - -Ensures a Component on the specified Entity. - - Type of the Component to ensure. - Entity object to ensure the Component on. - Reference to the Component. - - - -Retrieves the first Component from the specified GameObjectt's children that -matches the specified type. - - Type of the Component to get. - Entity object to get the Component from. - -Reference to the Component or null if the Entity does not have the -specified Component. - - - - -Gets a Component from the specified Entity. - - Type of the Component to get. - Entity object to get the Component from. - -Reference to the Component or null if the Entity does not have the -specified Component. - - - - -Adds a Component to the specified Entity. - - Type of the Component to add. - -Entity object that should have the specified Component added to. - - Reference to the Component that was added. - - - -Static class which contains functions that map Pls::ECS's Component manipulation -functions to managed generic functions. - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Entity that this Component belongs to. - - - - -Constructor for BaseComponent to tie it to a specific Entity. -Constructors of derived Components should call this Constructor. - - Entity that this Component will be tied to. - - - -Implicit conversion operator to enable checking if a component is null. - - Component to check. - - - -Removes all Scripts of the specified type from this GameObject. - - Type of PLushieScripts to remove. - - - -Retrieves a immutable list of Scripts of the specified type from this -GameObject. - - Type of Scripts to Get. - Immutable list of Scripts of the specified type. - - - -Retrieves a Script of the specified type from this GameObject. -If multiple Scripts of the same specified type are added on the same -GameObject, this will retrieve the first one added. - - Type of Script to add. - Reference to the Script to retrieve. - - - -Adds a Script of the specified type to this GameObject. - - Type of Script to add. - Reference to the created Script. - - - -Removes a Component from this GameObject. If no Component exists to begin -with, nothing happens. - - Type of the Component to get. - - - -Gets a Component from this GameObject. - - Type of the Component to get. - -Reference to the Component or null if this GameObject does not have the -specified Component. - - - - -Adds a Component to this GameObject. - - Type of the Component to add. - Reference to the Component that was added. - - - -Retrieves the GameObject that this Component belongs to. - - - - -Class that serves as the base for a wrapper class to Components in native code. - - - - -Called when the attached GameObject has a Collider and leaves a -collision with another GameObject with a Collider2D. - - Information on the collision event. - - - -Called when the attached GameObject has a Collider and collides with -another GameObject with a Collider in subsequent frames of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a Collider and collides with -another GameObject with a Collider in the first frame of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and leaves a -collision with another GameObject with a Collider2D. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and collides with -another GameObject with a Collider in subsequent frames of collision. - - Information on the collision event. - - - -Called when the attached GameObject has a trigger Collider and collides with -another GameObject with a Collider in the first frame of collision. - - Information on the collision event. - - - -Called just before the end of the frame where the attached GameObject or -this script is destroyed directly or indirectly due to destruction of the -owner. - - - - -Called every frame after physics and collision resolution but before -rendering. - - - - -Called every frame before physics and collision resolution. - - - - -Called every frame in sync with Physics update steps and thus in most cases -will execute more than update() will. This will be called immediately before -a Physics update step. - - - - -Called on the first frame that the attached GameObject is active but always -after Awake(). - - - - -Called on the first frame that the attached GameObject is active if they are -a part of the scene. - - - - -Called immediately once this script is detached from a GameObject. - - - - -Called immediately once this script is attached to a GameObject. - - - - -Constructor for Script to tie it to a specific GameObject. -Constructors of derived Scripts should call this Constructor. - - -GameObject that this Script will be tied to. - - - - -Used to call onTriggerExit(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onTriggerStay(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onTriggerEnter(). This should be called when a trigger-type -collision is detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionExit(). This should be called when a collision ends -between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionStay(). This should be called when a collision is -persistent between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onCollisionEnter(). This should be called when a collision is -detected between the attached GameObject and another GameObject. - - Information on the collision event. - - - -Used to call onDestroy(). This should be called at the end of the frame -where the attached GameObject or this script is destroyed directly or -indirectly due to destruction of the owner. - - - - -Used to call lateUpdate(). This should be called every frame after physics -and collision resolution but before rendering. - - - - -Used to call update(). This should be called every frame before physics and -collision resolution. - - - - -Used to call fixedUpdate(). This should be called in sync with Physics -update steps and thus in most cases will execute more than Update() will. -This will be called immediately before a Physics update step. - - - - -Used to call start(). This should be called on the first frame that the -attached GameObject is active but always after Awake(). - - - - -Used to call awake(). This should be called on the first frame that the -attached GameObject is active if they are a part of the scene. - - - - -Used to call onDetached(). This is called immediately when this script is -detached from a GameObject. - - - - -Used to call onAttached(). This is called immediately when this script is -attached to a GameObject. - - - - -Implicit conversion operator to enable checking if a component is null. - - Component to check. - - - -Removes all Scripts of the specified type from this GameObject. - - -Type of script to remove. -This needs to be a default constructable Script. - - - - -Retrieves a immutable list of scripts from the specified Entity that -matches the specified type. -
    -Note that this function allocates. It should be used sparingly. -
    - -Type of scripts to get. -This needs to be a default constructable Script. - - -Immutable list of references to scripts of the specified type. - -
    - - -Retrieves the first Script from this GameObject's children that matches the -specified type. - - -Type of script to get. -This needs to be a default constructable Script. - - Reference to the script added - - - -Retrieves the first Script from this GameObject that matches the specified -type. - - -Type of script to get. -This needs to be a default constructable Script. - - Reference to the script added - - - -Adds a Script to this GameObject. - - -Type of script to add. -This needs to be a default constructable Script. - - Reference to the script added - - - -Removes a Component from the GameObject that this Script belongs to. - - -Type of the Component to remove. Must be derived from BaseComponent. - - - - -Ensures a Component on the GameObject that this Script belongs to. - - -Type of the Component to ensure. Must be derived from BaseComponent. - - Reference to the Component. - - - -Retrieves the first Component from this GameObject's children that matches -the specified type. - - -Type of the Component to get. Must be derived from BaseComponent. - - Reference to the Component that was retrieved. - - - -Gets a Component from the GameObject that this Script belongs to. - - -Type of the Component to get. Must be derived from BaseComponent. - - Reference to the Component that was retrieved. - - - -Adds a Component to the GameObject that this Script belongs to. - - -Type of the Component to add. Must be derived from BaseComponent. - - Reference to the Component that was added. - - - -GameObject that this Script belongs to. - - - - -Class that forms the basis of all "script"-objects that can be attached to -Entities to update each Entity's Components via C# code. - - - - -The RigidBody that you are colliding with. - - - - -The CollisionShape of the Collider that you are colliding with. - - - - -The Collider that you are colliding with. - - - - -The GameObject whose collider you are colliding with. - - - - -Struct that describes a collision - - - - -Checks if two GameObject references are different. - - GameObject to check. - Another GameObject to check with. - True if both Components are different. - - - -Checks if two GameObject references are the same. - - GameObject to check. - Another GameObject to check with. - True if both Components are the same. - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Retrieves the native Entity object that this GameObject represents. - - Native Entity object that this GameObject represents. - - - -Retrieves the CLR Entity object that this GameObject represents. - - Entity object that this GameObject represents. - - - -Constructor for the GameObject. - - -Managed numerical representation of the ECS Entity that this GameObject -should represent. - - - - -Constructor for the GameObject. - - -The ECS Entity that this GameObject should represent. - - - - -Removes all Scripts of the specified type from this GameObject. - - Type of PLushieScripts to remove. - - - -Retrieves a immutable list of Scripts of the specified type from this -GameObject. - - Type of Scripts to retrieve. - Immutable list of Scripts of the specified type. - - - -Retrieves a Script of the specified type from child GameObjects. -If multiple Scripts of the same specified type are added on the same -child GameObject, this will retrieve the first one added. - - Type of Script to retrieve. - Reference to the Script to retrieve. - - - -Retrieves a Script of the specified type from this GameObject. -If multiple Scripts of the same specified type are added on the same -GameObject, this will retrieve the first one added. - - Type of Script to retrieve. - Reference to the Script to retrieve. - - - -Adds a Script of the specified type to this GameObject. - - Type of Script to add. - Reference to the created Script. - - - -Removes a Component from this GameObject. If no Component exists to begin -with, nothing happens. - - Type of the Component to get. - - - -Ensures a Component on this GameObject. - - Type of the Component to ensure. - -Reference to the Component. - - - - -Retrieves the first Component from this GameObject's children that matches -the specified type. - - Type of the Component to get. - -Reference to the Component or null if neither of this GameObject's children -does not have the specified Component. - - - - -Gets a Component from this GameObject. - - Type of the Component to get. - -Reference to the Component or null if this GameObject does not have the -specified Component. - - - - -Adds a Component to this GameObject. - - Type of the Component to add. - Reference to the Component that was added. - - - -Sets the active state of this GameObject. -
    -The actual "activeness" of this GameObject is still dependent on the parents' -active states. -
    - -Whether to activate or deactivate this GameObject. - -
    - - -Sets the name of this GameObject. - - The name to set. - - - -Native Entity ID value for this GameObject. - - - - -Whether or not this Entity is active in the Scene hierarchy. - - - - -Whether or not this Entity alone, is active. This does not mean that this -object is active in the scene. For example, if this Entity's parent is not -active, then this Entity would also be not active. - - - - -Name of the object that this Entity represents. - - - - -Retrieves a GameObject with the specified name. If there are multiple -GameObjects with the same name, the first found GameObject will be retrieved. -There is no guaranteed order of which GameObject is considered "first". - - Name of the GameObject to find. - GameObject that has the specified name. Null if not found. - - - -Destroys the specified GameObject. Note that the specified GameObject will no -longer be a valid GameObject after this function is called. - - The GameObject to be destroyed. - - - -Creates a new GameObject in the current Scene. If multiple Scenes are loaded, -and you would like to create an object in a specific Scene, call the Scene's -CreateGameObject(). - - GameObject that represents the newly created GameObject. - - - -Lightweight object for an PlushieEngine Entity that allows for easy access -to Component and Script operations. - - - - -Constructor for a Tooltip attribute that fills in the description. - - Text to be shown when a field is hovered. - - - -Maximum value for the Ranged field. - - - - -Minimum value for the Ranged field. - - - - -Simple attribute to constrain the range of values for a field on the editor. - - - - -Converts from a native std::Stringto a managed String. - - The native std::string to convert from. - Managed copy of a native std::string. - - - -Converts from a managed String to a native std::string. - - The managed String to convert from. - Native copy of a managed String. - - - -Converts from a native Vector2 to a managed Vector2. - - The native Vector2 to convert from. - Managed copy of a native Vector2. - - - -Converts from a native Quaternion to a managed Quaternion. - - The native Quaternion to convert from. - Managed copy of a native Quaternion. - - - -Converts from a managed Quaternion to a native Quaternion. - - The managed Quaternion to convert from. - Native copy of a managed Quaternion. - - - -Converts from a native Vector2 to a managed Vector2. - - The native Vector2 to convert from. - Managed copy of a native Vector2. - - - -Converts from a managed Vector2 to a native Vector2. - - The managed Vector2 to convert from. - Native copy of a managed Vector2. - - - -Converts from a native Vector3 to a managed Vector3. - - The native Vector3 to convert from. - Managed copy of a native Vector3. - - - -Converts from a managed Vector3 to a native Vector3. - - The managed Vector3 to convert from. - Native copy of a managed Vector3. - - - -Converts from a native Entity to a managed Entity (UInt32). - - Native Entity to convert from. - Managed representation of the specified Entity. - - - -Provides functions easy and consistent syntax for converting between custom -managed and native types that are aligned. - - - - -Converts to true if this is a valid Handle. - - - - -The library that the handle was issued by. - - - - -The internal ID of the handle. - - - - -Creates a ray starting at origin along direction. - - Source of the ray. - Direction the ray travels in. - - - -The direction that a ray travels in. - - - - -The start point of the ray. - - - - -CLR version of the the SHADE Engine's Ray class that represents a ray in -3-Dimensional space. - - - - -Are two quaternions equal to each other? - - Left-hand side quaternion. - Right-hand side quaternion. - - - -Combines rotations lhs and rhs. - - Left-hand side quaternion. - Right-hand side quaternion. - - - -Spherically interpolates between a and b by t. The parameter t is not clamped. - - - - -Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped to the range [0, 1]. - - Start value, returned when t = 0. - End value, returned when t = 1. - Interpolation ratio. - A quaternion spherically interpolated between quaternions a and b. - - - -Rotates a rotation from towards to.
    -The from quaternion is rotated towards to by an angular step of maxDegreesDelta (but note that the rotation will not overshoot). -Negative values of maxDegreesDelta will move away from to until the rotation is exactly the opposite direction. -
    -
    - - -Converts this quaternion to one with the same orientation but with a magnitude of 1. - - - - -Creates a rotation with the specified forward and upwards directions.
    -Z axis will be aligned with forward, X axis aligned with cross product between forward and upwards, and Y axis aligned with cross product between Z and X. -
    -
    - - -Interpolates between a and b by t and normalizes the result afterwards. The parameter t is not clamped. - - - - -Interpolates between a and b by t and normalizes the result afterwards. The parameter t is clamped to the range [0, 1]. - - Start value, returned when t = 0. - End value, returned when t = 1. - Interpolation ratio. - A quaternion interpolated between quaternions a and b. - - - -Returns the Inverse of rotation. - - - - -Creates a rotation which rotates from fromDirection to toDirection. - - - - -Returns a rotation that rotates y degrees around the y axis, x degrees around the x axis, and z degrees around the z axis; applied in that order. - - - - -The dot product between two rotations. - - - - -Creates a rotation which rotates angle degrees around axis. - - - - -Returns the angle in degrees between two rotations a and b.
    - The angle in degrees between the two vectors. -
    - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Converts a rotation to angle-axis representation (angles in degrees). - - - - -Creates a rotation with the specified forward and upwards directions.
    -The result is applied to this quaternion. -If used to orient a Transform, the Z axis will be aligned with forward and the Y axis with upwards, assuming these vectors are orthogonal. -Logs an error if the forward direction is zero. -
    - The direction to look in. - The vector that defines in which direction up is. -
    - - -Creates a rotation which rotates from fromDirection to toDirection.
    -Use this to create a rotation which starts at the first Vector (fromDirection) and rotates to the second Vector (toDirection). -These Vectors must be set up in a script. -
    -
    - - -Constructor to construct a Quaternion with the specified components. - - X-coordinate to set. - Y-coordinate to set. - Z-coordinate to set. - W-coordinate to set. - - - -W-component of the Quaternion. Do not directly modify quaternions. - - - - -Z-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -Y-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -X-component of the Quaternion. -Don't modify this directly unless you know quaternions inside out. - - - - -Shorthand for writing Quaternion(0, 0, 0, 1). - - - - -CLR version of SHADE's Quaternion class that represents an orientation. -Designed to closely match Unity's Quaternion struct. - - - - -Explicit conversion operator to enable explicit casting from a Vector2 to a -Vector3. - - Vector2 to convert from. - - - -Explicit conversion operator to enable explicit casting from a Vector3 to a -Vector2. - - Vector3 to convert from. - - - -Checks if two Vector3s are not approximately equal. This is equivalent to -calling !Vector3.IsNear() with default tolerance values. - - Vector3 to compare. - Another Vector3 to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Vector3s are approximately equal. This is equivalent to -calling Vector3.IsNear() with default tolerance values. - - Vector3 to compare. - Another Vector3 to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Vector3 with a scalar value and returns -the result. - - Scalar to divide with. - Vector3 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector3 with a scalar value and returns -the result. - - Vector3 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the division of a Vector3 with a scalar value and returns -the result. - - Scalar to divide with. - Vector3 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector3 with a scalar value and returns -the result. - - Vector3 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Vector3s and returns the -result. - - Vector3 to multiply with. - Another Vector3 to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Vector3 from another Vector3 and returns the result. - - Vector3 to subtract from. - Another Vector3 to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Vector3s together and returns the result. - - Vector3 to add. - Another Vector3 to add. - The result of lhs added to rhs - - - -Moves a point current towards target. -Similar to Lerp(), however, the function will ensure that the distance never -exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the -vector away from target - - The current position of the point. - The target position to move to. - Maximum distance moved per call. - Vector representing the moved point. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Vector3, returned when t = 0.0f. - The end Vector3, returned when t = 1.0f. - Value used to interpolate between a and b. - The interpolated Vector3. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Vector3, returned when t = 0.0f. - The end Vector3, returned when t = 1.0f. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector3. - - - -Computes and returns a Vector3 that is made from the largest components of -the two specified Vector3s. - - Vector3 to calculate maximum Vector3 with. - Another Vector3 to calculate maximum Vector3 with. - -The Vector3 that contains the largest components of the two specified -Vector3s. - - - - -Computes and returns a Vector3 that is made from the smallest components of -the two specified Vector3s. - - Vector3 to calculate minimum Vector3 with. - Another Vector3 to calculate minimum Vector3 with. - -The Vector3 that contains the smallest components of the two specified -Vector3s. - - - - -Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector3 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in degrees. - - The Vector3 that represents the rotated vector. - - - -Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector3 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in radians. - - The Vector3 that represents the rotated vector. - - - -Reflects a Vector3 across another Vector3. - - A Vector3 to reflect. - A normal to reflect the Vector3 across. - The Vector3 that represents vec reflected across normal. - - - -Computes and returns a Vector3 projection. - - Vector3 to project. - Vector3 to project onto. - The Vector3 that represents the projected vec onto direction. - - - -Computes and returns the cross product of 2 specified Vector3s. - - Vector3 to calculate cross product with. - Another Vector3 to calculate cross product with. - The cross product of the two Vector3s. - - - -Computes and returns the dot product of 2 specified Vector3s. - - Vector3 to calculate dot product with. - Another Vector3 to calculate dot product with. - Scalar value representing the dot product of the two Vector3s. - - - -Checks if two specified Vector3s are near in value. - - Vector3 to check if is near in value. - Another Vector3 to check if is near in value. - Amount of tolerance to do the comparison with. - -True if the two Vector3s are within the tolerance value specified - - - - -Checks if two specified Vector3s are near in value. - - Vector3 to check if is near in value. - Another Vector3 to check if is near in value. - -True if the two Vector3s are within the tolerance value specified - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Checks if a specified point is near this Vector3 that represents a point. - - The other point to check if we are near. - -The amount of tolerance before we consider these points as "near". - - -True if this Vector3 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Checks if a specified point is near this Vector3 that represents a point with -a tolerance value of PLS_EPSILON. - - The other point to check if we are near. - -True if this Vector3 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -180.0f and 180.0f. - - Returns the angle of this vector from the right vector in degrees. - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -Math.PI and Math.PI. - - Returns the angle of this vector from the right vector in radians. - - - -Calculates and returns the squared magnitude of this Vector3. - - Returns the squared length of this Vector3. - - - -Calculates and returns the magnitude of this Vector3. Note that this function -incurs a performance cost from the square root calculation. If you do not -need the precise magnitude, consider using GetSqrMagnitude() instead. - - Returns the length of this Vector3. - - - -Creates a copy of this Vector3 and returns a normalized version. - - -Returns a normalised copy of this Vector3. -If this Vector3 is a zero vector, a zero vector will be returned. - - - - -Normalises this current Vector3. This changes the data of this Vector3. -If you would like to get a copy, use GetNormalised() instead. -This function does nothing to a zero vector. - - - - -Conversion constructor to construct a Vector3 using a Vector2. - - - - - -Constructor to construct a Vector3 with the specified components. - - X-coordinate to set. - Y-coordinate to set. - Z-coordinate to set. - - - -Constructor to construct a Vector3 with the specified components with the -Z-component set to 0.0f. - - X-coordinate to set. - Y-coordinate to set. - - - -Constructor to construct a Vector3 with the specified components with the -Y and Z-component set to 0.0f. - - X-coordinate to set. - - - -Z-component of the Vector3. - - - - -Y-component of the Vector3. - - - - -X-component of the Vector3. - - - - -Shorthand for writing Vector3(0, 0, 0). - - - - -Shorthand for writing Vector3(0, 1, 0). - - - - -Shorthand for writing Vector3(1, 0, 0). - - - - -Shorthand for writing Vector3(float.PositiveInfinity, -float.PositiveInfinity, float.PositiveInfinity). - - - - -Shorthand for writing Vector3(1, 1, 1). - - - - -Shorthand for writing Vector3(float.NegativeInfinity, -float.NegativeInfinity, float.NegativeInfinity). - - - - -Shorthand for writing Vector3(-1, 0, 0). - - - - -Shorthand for writing Vector3(0, 0, 1). - - - - -Shorthand for writing Vector3(0, -1, 0). - - - - -Shorthand for writing Vector3(0, 0, -1). - - - - -CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. -Designed to closely match Unity's Vector3 struct. - - - - -Checks if two Vector2s are not approximately equal. This is equivalent to -calling !Vector2.IsNear() with default tolerance values. - - Vector2 to compare. - Another Vector2 to compare. - -True if all components are not approximately equal within the default -tolerance value. - - - - -Checks if two Vector2s are approximately equal. This is equivalent to -calling Vector2.IsNear() with default tolerance values. - - Vector2 to compare. - Another Vector2 to compare. - -True if all components are approximately equal within the default -tolerance value. - - - - -Calculates the division of a Vector2 with a scalar value and returns -the result. - - Scalar to divide with. - Vector2 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector2 with a scalar value and returns -the result. - - Vector2 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the division of a Vector2 with a scalar value and returns -the result. - - Scalar to divide with. - Vector2 to divide with. - The result of the scalar division. - - - -Calculates the multiplication of a Vector2 with a scalar value and returns -the result. - - Vector2 to multiply with. - Scalar to multiply with. - The result of the scalar multiplication. - - - -Calculates the component-wise multiplication of two Vector2s and returns the -result. - - Vector2 to multiply with. - Another Vector2 to multiply with. - The result of rhs subtracted from lhs. - - - -Subtracts a Vector2 from another Vector2 and returns the result. - - Vector2 to subtract from. - Another Vector2 to subtract. - The result of rhs subtracted from lhs. - - - -Adds two Vector2s together and returns the result. - - Vector2 to add. - Another Vector2 to add. - The result of lhs added to rhs - - - -Moves a point current towards target. -Similar to Lerp(), however, the function will ensure that the distance never -exceeds maxDistanceDelta. Negative values of maxDistanceDelta pushes the -vector away from target - - The current position of the point. - The target position to move to. - Maximum distance moved per call. - Vector representing the moved point. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. -Unlike Lerp(), t is not clamped to a range at all. - - The start Vector2, returned when t = 0.0f. - The end Vector2, returned when t = 1.0f. - Value used to interpolate between a and b. - The interpolated Vector2. - - - -Linearly interpolates between two specified points. -This is most commonly used to find a point some fraction of the way along a -line between two endpoints. - - The start Vector2, returned when t = 0.0f. - The end Vector2, returned when t = 1.0f. - -Value used to interpolate between a and b which is clamped to -the range[0, 1]. - - The interpolated Vector2. - - - -Computes and returns a Vector2 that is made from the largest components of -the two specified Vector2s. - - Vector2 to calculate maximum Vector2 with. - Another Vector2 to calculate maximum Vector2 with. - -The Vector2 that contains the largest components of the two specified -Vector2s. - - - - -Computes and returns a Vector2 that is made from the smallest components of -the two specified Vector2s. - - Vector2 to calculate minimum Vector2 with. - Another Vector2 to calculate minimum Vector2 with. - -The Vector2 that contains the smallest components of the two specified -Vector2s. - - - - -Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector2 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in degrees. - - The Vector2 that represents the rotated vector. - - - -Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise -direction. - - A Vector2 to rotate. - -Angle to rotate the vector by in an anti-clockwise direction in radians. - - The Vector2 that represents the rotated vector. - - - -Reflects a Vector2 across another Vector2. - - A Vector2 to reflect. - A normal to reflect the Vector2 across. - The Vector2 that represents vec reflected across normal. - - - -Computes and returns a Vector2 projection. - - Vector2 to project. - Vector2 to project onto. - The Vector2 that represents the projected vec onto direction. - - - -Computes a perpendicular Vector2 to the specified Vector2. - - Vector2 to find a perpendicular of. - -Whether the inward perpendicular Vector is retrieved. If true, the -resultant vector is rotated 90-degrees in a counter-clockwise. - - The perpendicular Vector2 relative to the specified Vector2. - - - - -Computes the inward perpendicular Vector2 to the specified Vector2. -Equivalent to calling Perpendicular(lhs, true). This means, the -resultant Vector2 is rotated 90-degrees in a counter-clockwise. - - Vector2 to find a perpendicular of. - -The perpendicular Vector2 relative to the specified Vector2. - - - - -Computes and returns the dot product of 2 specified Vector2s. - - Vector2 to calculate dot product with. - Another Vector2 to calculate dot product with. - -Scalar value representing the dot product of the two Vector2s. - - - - -Checks if two specified Vector2s are near in value. - - Vector2 to check if is near in value. - Another Vector2 to check if is near in value. - -Amount of tolerance to do the comparison with. - - -True if the two Vector2s are within the tolerance value specified - - - - -Checks if two specified Vector2s are near in value. - - Vector2 to check if is near in value. - Another Vector2 to check if is near in value. - -True if the two Vector2s are within the tolerance value specified - - - - -Gets a unique hash for this object. - - Unique hash for this object. - - - -Compares equality with another unboxed object. - - The unboxed object to compare with. - True if both objects are the same. - - - -Compares equality with an object of the same type. - - The object to compare with. - True if both objects are the same. - - - -Checks if a specified point is near this Vector2 that represents a point. - - The other point to check if we are near. - -The amount of tolerance before we consider these points as "near". - - -True if this Vector2 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Checks if a specified point is near this Vector2 that represents a point with -a tolerance value of PLS_EPSILON. - - The other point to check if we are near. - -True if this Vector2 representing a point and the specified point are within -the range of the specified tolerance. False otherwise. - - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -180.0f and 180.0f. - - Returns the angle of this vector from the right vector in degrees. - - - -Calculates and returns the angle of this vector from the right vector. This -function returns values between -Math.PI and Math.PI. - - Returns the angle of this vector from the right vector in radians. - - - -Calculates and returns the squared magnitude of this Vector2. - - Returns the squared length of this Vector2. - - - -Calculates and returns the magnitude of this Vector2. Note that this function -incurs a performance cost from the square root calculation. If you do not -need the precise magnitude, consider using GetSqrMagnitude() instead. - - Returns the length of this Vector2. - - - -Creates a copy of this Vector2 and returns a normalized version. - - -Returns a normalised copy of this Vector2. -If this Vector2 is a zero vector, a zero vector will be returned. - - - - -Normalises this current Vector2. This changes the data of this Vector2. -If you would like to get a copy, use GetNormalised() instead. -This function does nothing to a zero vector. - - - - -Constructor to construct a Vector2 with the specified components.. - - X-coordinate to set. - Y-coordinate to set. - - - -Constructor to construct a Vector2 with the specified components with the -Y-component set to 0.0f. - - X-coordinate to set. - - - -Y-component of the Vector2. - - - - -X-component of the Vector2. - - - - -Shorthand for writing Vector2(0, 0). - - - - -Shorthand for writing Vector2(0, 1). - - - - -Shorthand for writing Vector2(1, 0). - - - - -Shorthand for writing Vector2(float.PositiveInfinity, -float.PositiveInfinity). - - - - -Shorthand for writing Vector2(1, 1). - - - - -Shorthand for writing Vector2(float.NegativeInfinity, -float.NegativeInfinity). - - - - -Shorthand for writing Vector2(-1, 0). - - - - -Shorthand for writing Vector2(0, -1). - - - - -CLR version of SHADE Engine's Vector2 class that represents a 2-Dimensional Vector. -Designed to closely match Unity's Vector2 struct. - - - - -Checks if the specified entity is valid. This is done by checking if it -matches Pls::Entity::INVALID. - - The Entity to check. - True if the specified Entity is valid. - - - -Static class that contains useful utility functions for working with Entity. - - - - -Manages all resources in multiple ResourceLibraries. - - - - -Base class for SHResourceLibrary that holds information about the library type. - - - - -Template Specialization for Handle that represents a type-less Handle. - - - - -Converts to true if this is a valid Handle. - - - - -Native ID type of a handle - - - - -Base implementation of the Handle that is not templated to allow for holding -generic non-type-specific Handles. - - - - -Exception thrown when a generic Handle is being casted to the wrong type. - - - - -Exception thrown when an invalid Handle was dereferenced. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file From 0979ee93e67e53319eaa6ad60cf0ed7a13224417 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 2 Nov 2022 22:44:27 +0800 Subject: [PATCH 658/793] TEMPORARY Push with all relative paths changed for building exe --- SHADE_Engine/src/Assets/SHAssetMacros.h | 2 +- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 6 +++--- .../Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp | 6 +++--- SHADE_Engine/src/Editor/SHEditor.cpp | 12 ++++++++---- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 7 ++++++- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 3376a2d5..336db566 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -56,7 +56,7 @@ enum class AssetType : AssetTypeMeta constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; //Directory -#ifdef _PUBLISH +#ifndef _PUBLISH constexpr std::string_view ASSET_ROOT{ "Assets" }; constexpr std::string_view BUILT_IN_ASSET_ROOT {"Built_In"}; #else diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index c3c7ef03..59d3f632 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -79,10 +79,10 @@ namespace SHADE //SHResourceManager::LoadAllAudio(system, soundList); - LoadBank("../../Assets/Audio/Master.bank"); - LoadBank("../../Assets/Audio/Master.strings.bank"); + LoadBank("Assets/Audio/Master.bank"); + LoadBank("Assets/Audio/Master.strings.bank"); //LoadBank("../../Assets/Audio/Music.bank"); - LoadBank("../../Assets/Audio/footsteps.bank"); + LoadBank("Assets/Audio/footsteps.bank"); //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); //clip->Play(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 06c0c2ae..1298f168 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -38,7 +38,7 @@ namespace SHADE void SHEditorMenuBar::Init() { SHEditorWindow::Init(); - constexpr std::string_view path = "../../Assets/Editor/Layouts"; + constexpr std::string_view path = "Assets/Editor/Layouts"; for(auto const& entry : std::filesystem::directory_iterator(path)) { layoutPaths.push_back(entry.path()); @@ -77,11 +77,11 @@ namespace SHADE { if(ImGui::Selectable("Save")) { - SHSerialization::SerializeSceneToFile("../../Assets/Scenes/Test.SHADE"); + SHSerialization::SerializeSceneToFile("Assets/Scenes/Test.SHADE"); } if(ImGui::Selectable("Load")) { - SHSerialization::DeserializeSceneFromFile("../../Assets/Scenes/Test.SHADE"); + SHSerialization::DeserializeSceneFromFile("Assets/Scenes/Test.SHADE"); } ImGui::EndMenu(); } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6974d213..9972066c 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -102,7 +102,11 @@ namespace SHADE io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking +#ifndef _PUBLISH + io->IniFilename = "Assets/Editor/Layouts/UserLayout.ini"; +#else io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; +#endif io->ConfigWindowsMoveFromTitleBarOnly = true; InitLayout(); @@ -176,20 +180,20 @@ namespace SHADE { if(!std::filesystem::exists(io->IniFilename)) { - std::filesystem::copy_file("../../Assets/Editor/Layouts/Default.ini", io->IniFilename); + std::filesystem::copy_file("Assets/Editor/Layouts/Default.ini", io->IniFilename); } //eventually load preferred layout here } void SHEditor::InitFonts() noexcept { - ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + ImFont* mainFont = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; - ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path + ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; - ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path + ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 4a73342e..5a09b646 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -32,7 +32,11 @@ namespace SHADE /* Static Definitions */ /*----------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); - const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; + #ifndef _PUBLISH + const std::string SHScriptEngine::CSPROJ_DIR = "TempScriptsFolder"; + #else + const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; + #endif const std::string SHScriptEngine::CSPROJ_PATH = std::string(CSPROJ_DIR) + "\\SHADE_Scripting.csproj"; /*-----------------------------------------------------------------------------------*/ @@ -264,6 +268,7 @@ namespace SHADE \n\ ..\\bin\\Debug\\SHADE_Managed.dll\n\ ..\\bin\\Release\\SHADE_Managed.dll\n\ + SHADE_Managed.dll\n\ \n\ \n\ ..\\bin\\Debug\\SHADE_CSharp.dll\n\ From f24346a6fdec8c8c17246a04db4564072b458a9e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 2 Nov 2022 22:44:27 +0800 Subject: [PATCH 659/793] Revert "TEMPORARY Push with all relative paths changed for building exe" This reverts commit 0979ee93e67e53319eaa6ad60cf0ed7a13224417. --- SHADE_Engine/src/Assets/SHAssetMacros.h | 2 +- SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 6 +++--- .../Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp | 6 +++--- SHADE_Engine/src/Editor/SHEditor.cpp | 12 ++++-------- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 7 +------ 5 files changed, 12 insertions(+), 21 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 336db566..3376a2d5 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -56,7 +56,7 @@ enum class AssetType : AssetTypeMeta constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; //Directory -#ifndef _PUBLISH +#ifdef _PUBLISH constexpr std::string_view ASSET_ROOT{ "Assets" }; constexpr std::string_view BUILT_IN_ASSET_ROOT {"Built_In"}; #else diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 59d3f632..c3c7ef03 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -79,10 +79,10 @@ namespace SHADE //SHResourceManager::LoadAllAudio(system, soundList); - LoadBank("Assets/Audio/Master.bank"); - LoadBank("Assets/Audio/Master.strings.bank"); + LoadBank("../../Assets/Audio/Master.bank"); + LoadBank("../../Assets/Audio/Master.strings.bank"); //LoadBank("../../Assets/Audio/Music.bank"); - LoadBank("Assets/Audio/footsteps.bank"); + LoadBank("../../Assets/Audio/footsteps.bank"); //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); //clip->Play(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 1298f168..06c0c2ae 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -38,7 +38,7 @@ namespace SHADE void SHEditorMenuBar::Init() { SHEditorWindow::Init(); - constexpr std::string_view path = "Assets/Editor/Layouts"; + constexpr std::string_view path = "../../Assets/Editor/Layouts"; for(auto const& entry : std::filesystem::directory_iterator(path)) { layoutPaths.push_back(entry.path()); @@ -77,11 +77,11 @@ namespace SHADE { if(ImGui::Selectable("Save")) { - SHSerialization::SerializeSceneToFile("Assets/Scenes/Test.SHADE"); + SHSerialization::SerializeSceneToFile("../../Assets/Scenes/Test.SHADE"); } if(ImGui::Selectable("Load")) { - SHSerialization::DeserializeSceneFromFile("Assets/Scenes/Test.SHADE"); + SHSerialization::DeserializeSceneFromFile("../../Assets/Scenes/Test.SHADE"); } ImGui::EndMenu(); } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 9972066c..6974d213 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -102,11 +102,7 @@ namespace SHADE io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking -#ifndef _PUBLISH - io->IniFilename = "Assets/Editor/Layouts/UserLayout.ini"; -#else io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; -#endif io->ConfigWindowsMoveFromTitleBarOnly = true; InitLayout(); @@ -180,20 +176,20 @@ namespace SHADE { if(!std::filesystem::exists(io->IniFilename)) { - std::filesystem::copy_file("Assets/Editor/Layouts/Default.ini", io->IniFilename); + std::filesystem::copy_file("../../Assets/Editor/Layouts/Default.ini", io->IniFilename); } //eventually load preferred layout here } void SHEditor::InitFonts() noexcept { - ImFont* mainFont = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; - ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path + ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; - ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path + ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 5a09b646..4a73342e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -32,11 +32,7 @@ namespace SHADE /* Static Definitions */ /*----------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); - #ifndef _PUBLISH - const std::string SHScriptEngine::CSPROJ_DIR = "TempScriptsFolder"; - #else - const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; - #endif + const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; const std::string SHScriptEngine::CSPROJ_PATH = std::string(CSPROJ_DIR) + "\\SHADE_Scripting.csproj"; /*-----------------------------------------------------------------------------------*/ @@ -268,7 +264,6 @@ namespace SHADE \n\ ..\\bin\\Debug\\SHADE_Managed.dll\n\ ..\\bin\\Release\\SHADE_Managed.dll\n\ - SHADE_Managed.dll\n\ \n\ \n\ ..\\bin\\Debug\\SHADE_CSharp.dll\n\ From 5fe10ce8d1d16cdc0c14982c4ac22df7c660658e Mon Sep 17 00:00:00 2001 From: Glence Date: Thu, 3 Nov 2022 01:50:02 +0800 Subject: [PATCH 660/793] Changes to main for presentation Change TestCube_FS.glsl Change debugdraw Key input to F10 TestScene changes AI waypoint changed playercontroller camera axis change --- Assets/Shaders/TestCube_FS.glsl | 2 +- Assets/Shaders/TestCube_FS.shshaderb | Bin 2285 -> 2401 bytes .../src/Application/SBApplication.cpp | 2 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 145 +++++++++++------- TempScriptsFolder/AIPrototype.cs | 2 +- TempScriptsFolder/PickAndThrow.cs | 4 + TempScriptsFolder/PlayerController.cs | 11 +- TempScriptsFolder/ThirdPersonCamera.cs | 2 +- 8 files changed, 111 insertions(+), 57 deletions(-) diff --git a/Assets/Shaders/TestCube_FS.glsl b/Assets/Shaders/TestCube_FS.glsl index 093cc9c6..1d2b156d 100644 --- a/Assets/Shaders/TestCube_FS.glsl +++ b/Assets/Shaders/TestCube_FS.glsl @@ -43,7 +43,7 @@ void main() { position = In.vertPos; normals = In.normal; - albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv); + albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) + MatProp.data[In2.materialIndex].color; outEntityID = In2.eid; lightLayerIndices = In2.lightLayerIndex; diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb index fcb72b6e912e98ddd75e1e9eb888bad2282d0f97..01bf616394dc1f3cad2a9274e76a1966e373ca4b 100644 GIT binary patch delta 383 zcmYk1O-{mK5Qe8Mq|pQfg193@5>4DIr2_Ti&#-2L@dR#kQx>j_;RJ+xkYG>b0XTvQ z&r4`xlP5Ft&dfJ&_toE8qp~=&;}`ht(9E-QE7^G6*cAK7Zns_em&!ht>Eu0qOFw60 zD_UqSn+C65Rjnp?@N5O-pTgXqM3g@8qP38F!~ojxc&fE3P5l8;PyFw@EDjUz%W>|O z)&tzY1@u`d6FVT?aY!e-a1EMKFQ1i-7}Wnh+LsNp`;$Jv$Q8LX-IJXJxc6drBswT> ePoRbtsa_O3PMAd)%X#@uWq9CjQ delta 266 zcmaDT^j1(z;0Xr<7%(#_vokO-GH@~QGT2QNo6Kqs6t>>Du9-;`#L6!%am_2qEUEN# zVPIuoXRzMv#vIKk2$GTmVn!f#XJ7#eZ(<2%GBpEonSodth^>LbAU;SbNK669w*b;0 zEy(iLo4wfW8B6Sdio}6ZraP3JUrrs9F28n~zTZ6?J82$nsVFAPdt%(~P diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 63276d04..c43ca45d 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -154,7 +154,7 @@ namespace Sandbox editor->PollPicking(); static bool drawColliders = false; - if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::SPACE)) + if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::F10)) { drawColliders = !drawColliders; SHSystemManager::GetSystem()->SetDrawColliders(drawColliders); diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index a5b3b546..b840bed3 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -65,58 +65,20 @@ namespace Sandbox SHResourceManager::FinaliseChanges(); // Create Materials - auto matInst = graphicsSystem->AddOrGetBaseMaterialInstance(); - auto customMat = graphicsSystem->AddMaterialInstanceCopy(matInst); - customMat->SetProperty("data.color", SHVec4(0.0f, 1.0f, 1.0f, 1.0f)); - customMat->SetProperty("data.textureIndex", 0); - customMat->SetProperty("data.alpha", 0.1f); + auto baseRaccoonMat = graphicsSystem->AddOrGetBaseMaterialInstance(); + auto baseRaccoonMatInstant = graphicsSystem->AddMaterialInstanceCopy(baseRaccoonMat); + baseRaccoonMatInstant->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 1.0f)); + baseRaccoonMatInstant->SetProperty("data.textureIndex", 0); + baseRaccoonMatInstant->SetProperty("data.alpha", 0.1f); - // Create Stress Test Objects - static const SHVec3 TEST_OBJ_SCALE = SHVec3::One; - constexpr int NUM_ROWS = 3; - constexpr int NUM_COLS = 1; - static const SHVec3 TEST_OBJ_SPACING = { 0.1f, 0.1f, 0.1f }; - static const SHVec3 TEST_OBJ_START_POS = { -(NUM_COLS / 2 * TEST_OBJ_SPACING.x) + 1.0f, -2.0f, -1.0f }; + auto baseFloorMatInstant = graphicsSystem->AddMaterialInstanceCopy(baseRaccoonMat); + baseFloorMatInstant->SetProperty("data.color", SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); + baseFloorMatInstant->SetProperty("data.textureIndex", 0); + baseFloorMatInstant->SetProperty("data.alpha", 0.1f); - for (int y = 0; y < NUM_ROWS; ++y) - for (int x = 0; x < NUM_COLS; ++x) - { - auto entity = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(entity); - auto& transform = *SHComponentManager::GetComponent_s(entity); - auto& collider = *SHComponentManager::GetComponent_s(entity); + auto dummy = SHEntityManager::CreateEntity<>(); - //renderable.Mesh = handles.front(); - renderable.SetMesh(CUBE_MESH); - renderable.SetMaterial(customMat); - - if (y == 50) - renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 0.0f, 0.0f, 1.0f)); - - //Set initial positions - transform.SetWorldPosition(TEST_OBJ_START_POS + SHVec3{ x * TEST_OBJ_SPACING.x, y * TEST_OBJ_SPACING.y, SHMath::GenerateRandomNumber(-3.5f, -5.0f) }); - //transform.SetWorldPosition({-1.0f, -1.0f, -1.0f}); - transform.SetWorldRotation(SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f)); - transform.SetWorldScale(TEST_OBJ_SCALE); - - collider.AddBoundingBox(SHVec3::One, SHVec3::Zero); - stressTestObjects.emplace_back(entity); - } - - auto raccoonSpin = SHEntityManager::CreateEntity(); - auto& renderable = *SHComponentManager::GetComponent_s(raccoonSpin); - auto& transform = *SHComponentManager::GetComponent_s(raccoonSpin); - - renderable.SetMesh(handles.front()); - renderable.SetMaterial(customMat); - renderable.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); - renderable.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); - renderable.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); - - transform.SetWorldPosition({ -3.0f, -1.0f, -1.0f }); - transform.SetLocalScale({ 5.0f, 5.0f, 5.0f }); - - auto floor = SHEntityManager::CreateEntity(); + auto floor = SHEntityManager::CreateEntity(); auto& floorRenderable = *SHComponentManager::GetComponent_s(floor); auto& floorTransform = *SHComponentManager::GetComponent_s(floor); auto& floorRigidBody = *SHComponentManager::GetComponent_s(floor); @@ -125,7 +87,7 @@ namespace Sandbox floorRenderable.SetMesh(CUBE_MESH); floorRenderable.SetMaterial(graphicsSystem->GetDefaultMaterialInstance()); - floorTransform.SetWorldScale({ 7.5f, 0.5f, 7.5 }); + floorTransform.SetWorldScale({ 17.5f, 0.5f, 17.5f }); floorTransform.SetWorldPosition({ 0.0f, -3.0f, -5.0f }); floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); @@ -138,16 +100,95 @@ namespace Sandbox //testObjRenderable.Mesh = CUBE_MESH; //testObjRenderable.SetMaterial(matInst); + //raccoon ======================================================================================================================= + auto racoon = SHEntityManager::CreateEntity(MAX_EID, "Player"); + auto& racoonRenderable = *SHComponentManager::GetComponent_s(racoon); + auto& racoonTransform = *SHComponentManager::GetComponent_s(racoon); + auto& racoonRigidBody = *SHComponentManager::GetComponent_s(racoon); + auto& racoonCollider = *SHComponentManager::GetComponent_s(racoon); + + racoonRenderable.SetMesh(handles.front()); + racoonRenderable.SetMaterial(baseRaccoonMatInstant); + + racoonTransform.SetWorldScale({ 2.0f, 2.0f, 2.0f }); + racoonTransform.SetWorldPosition({ -3.0f, -2.0f, -5.0f }); + + racoonCollider.AddBoundingBox(); + racoonCollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f,0.5f,0.0f)); + racoonCollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + + auto racoonItemLocation = SHEntityManager::CreateEntity(); + auto& racoonItemLocationTransform = *SHComponentManager::GetComponent_s(racoonItemLocation); + SHSceneManager::GetCurrentSceneGraph().SetParent(racoonItemLocation, racoon); + + auto racoonCamera = SHEntityManager::CreateEntity(); + SHSceneManager::GetCurrentSceneGraph().SetParent(racoonCamera, racoon); + //================================================================================================================================ + + //item =========================================================================================================================== + auto item = SHEntityManager::CreateEntity(MAX_EID, "item"); + auto& itemRenderable = *SHComponentManager::GetComponent_s(item); + auto& itemTransform = *SHComponentManager::GetComponent_s(item); + auto& itemRigidBody = *SHComponentManager::GetComponent_s(item); + auto& itemCollider = *SHComponentManager::GetComponent_s(item); + + itemRenderable.SetMesh(handles.front()); + itemRenderable.SetMaterial(baseRaccoonMatInstant); + + itemTransform.SetWorldScale({ 2.0f, 2.0f, 2.0f }); + itemTransform.SetWorldPosition({ 0.0f, -2.0f, -5.0f }); + + itemCollider.AddBoundingBox(); + itemCollider.AddBoundingBox(SHVec3(2.0f,2.0f,2.0f)); + itemCollider.GetCollider(1).SetIsTrigger(true); + + itemCollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + itemCollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + + itemCollider.GetCollider(1).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + itemCollider.GetCollider(1).SetBoundingBox(SHVec3(1.0f, 1.0f, 1.0f)); + + itemRigidBody.SetInterpolate(false); + itemRigidBody.SetFreezeRotationX(true); + itemRigidBody.SetFreezeRotationY(true); + itemRigidBody.SetFreezeRotationZ(true); + //================================================================================================================================ + + //AI ============================================================================================================================= + auto AI = SHEntityManager::CreateEntity(MAX_EID, "AI"); + auto& AIRenderable = *SHComponentManager::GetComponent_s(AI); + auto& AITransform = *SHComponentManager::GetComponent_s(AI); + auto& AIRigidBody = *SHComponentManager::GetComponent_s(AI); + auto& AICollider = *SHComponentManager::GetComponent_s(AI); + + AIRenderable.SetMesh(handles.front()); + AIRenderable.SetMaterial(baseRaccoonMatInstant); + + AITransform.SetWorldScale({ 2.0f, 2.0f, 2.0f }); + AITransform.SetWorldPosition({ -8.0f, -2.0f, 2.5f }); + + AICollider.AddBoundingBox(); + AICollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + AICollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + + AIRigidBody.SetInterpolate(false); + AIRigidBody.SetFreezeRotationX(true); + AIRigidBody.SetFreezeRotationY(true); + AIRigidBody.SetFreezeRotationZ(true); + //================================================================================================================================ SHADE::SHScriptEngine* scriptEngine = static_cast(SHADE::SHSystemManager::GetSystem()); - scriptEngine->AddScript(raccoonSpin, "RaccoonSpin"); + scriptEngine->AddScript(racoon, "PlayerController"); + scriptEngine->AddScript(racoon, "PickAndThrow"); + scriptEngine->AddScript(racoonCamera, "ThirdPersonCamera"); + scriptEngine->AddScript(AI, "AIPrototype"); auto raccoonShowcase = SHEntityManager::CreateEntity(); auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); auto& transformShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); renderableShowcase.SetMesh(handles.front()); - renderableShowcase.SetMaterial(customMat); + renderableShowcase.SetMaterial(baseRaccoonMatInstant); renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); diff --git a/TempScriptsFolder/AIPrototype.cs b/TempScriptsFolder/AIPrototype.cs index 88a319e3..80fa643e 100644 --- a/TempScriptsFolder/AIPrototype.cs +++ b/TempScriptsFolder/AIPrototype.cs @@ -17,7 +17,7 @@ public class AIPrototype : Script [Tooltip("The list of waypoints that the object will move around on")] private Vector3[] waypoints;*/ - private Vector3[] waypoints = { new Vector3(2.0f, -2.0f, -2.8f), new Vector3(-2.0f, -2.0f, -2.8f), new Vector3(-2.0f, -2.0f, -7.0f), new Vector3(2.0f, -2.0f, -7.0f) }; + private Vector3[] waypoints = { new Vector3(-8.0f, -2.0f, 3.5f), new Vector3(-8.0f, -2.0f, -13.0f), new Vector3(8.0f, -2.0f, -13.0f), new Vector3(8.0f, -2.0f, 3.5f) }; [SerializeField] [Tooltip("How much force is applied in movement")] diff --git a/TempScriptsFolder/PickAndThrow.cs b/TempScriptsFolder/PickAndThrow.cs index 09252247..80fcd61a 100644 --- a/TempScriptsFolder/PickAndThrow.cs +++ b/TempScriptsFolder/PickAndThrow.cs @@ -21,9 +21,13 @@ public class PickAndThrow : Script raccoonHoldLocation = GetComponentInChildren(); if (raccoonHoldLocation == null) Debug.Log("CHILD EMPTY"); + else + raccoonHoldLocation.LocalPosition = new Vector3(0.0f, 1.0f, 0.0f); + itemTransform = item.GetComponent(); if (itemTransform == null) Debug.Log("Item transform EMPTY"); + itemRidibody = item.GetComponent(); if (itemRidibody == null) Debug.Log("Item rb EMPTY"); diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 5566c411..77a4b9d3 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -44,6 +44,8 @@ public class PlayerController : Script public float xAxisMove { get; set; } public float zAxisMove { get; set; } + + public Vector2 axisMove { get; set; } public bool isMoveKeyPress { get; set; } @@ -84,6 +86,7 @@ public class PlayerController : Script rb.FreezeRotationY = true; rb.FreezeRotationZ = true; rb.Drag = drag; + rb.Interpolating = false; } //Transform check @@ -148,6 +151,7 @@ public class PlayerController : Script xAxisMove = 0; zAxisMove = 0; + axisMove = Vector2.Zero; if (Input.GetKey(Input.KeyCode.W)) { Vector3 camerAixs = cam.GetForward(); @@ -155,6 +159,7 @@ public class PlayerController : Script camerAixs.Normalise(); xAxisMove = camerAixs.x; zAxisMove = camerAixs.z; + axisMove += new Vector2(camerAixs.x, camerAixs.z); } if (Input.GetKey(Input.KeyCode.S)) { @@ -163,6 +168,7 @@ public class PlayerController : Script camerAixs.Normalise(); xAxisMove = -camerAixs.x; zAxisMove = -camerAixs.z; + axisMove -= new Vector2(camerAixs.x, camerAixs.z); } if (Input.GetKey(Input.KeyCode.A)) { @@ -171,6 +177,7 @@ public class PlayerController : Script camerAixs.Normalise(); xAxisMove = -camerAixs.x; zAxisMove = -camerAixs.z; + axisMove -= new Vector2(camerAixs.x, camerAixs.z); } if (Input.GetKey(Input.KeyCode.D)) { @@ -179,7 +186,9 @@ public class PlayerController : Script camerAixs.Normalise(); xAxisMove = camerAixs.x; zAxisMove = camerAixs.z; + axisMove += new Vector2(camerAixs.x, camerAixs.z); } + axisMove.Normalise(); isMoveKeyPress = xAxisMove != 0 || zAxisMove != 0; if(isMoveKeyPress && currentState != RaccoonStates.RUNNING && isGrounded) @@ -193,7 +202,7 @@ public class PlayerController : Script { if (rb != null) { - rb.AddForce(new Vector3(moveForce * xAxisMove, 0.0f, moveForce * zAxisMove)); + rb.AddForce(new Vector3(moveForce * axisMove.x, 0.0f, moveForce * axisMove.y)); if (isMoveKeyPress) { diff --git a/TempScriptsFolder/ThirdPersonCamera.cs b/TempScriptsFolder/ThirdPersonCamera.cs index 618c562f..141865e8 100644 --- a/TempScriptsFolder/ThirdPersonCamera.cs +++ b/TempScriptsFolder/ThirdPersonCamera.cs @@ -11,7 +11,7 @@ namespace SHADE_Scripting public class ThirdPersonCamera: Script { - public float armLength = 4.0f; + public float armLength = 2.0f; public float turnSpeedPitch = 0.3f; public float turnSpeedYaw = 0.5f; public float pitchClamp = 45.0f; From 544716547e630a46e0eb60e476cb2bd99684e0e8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 3 Nov 2022 02:37:38 +0800 Subject: [PATCH 661/793] Added preprocessor check for debug to turn off renderdoc --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6234941c..be67f1b3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -52,7 +52,11 @@ namespace SHADE /* BACKEND BOILERPLATE */ /*-----------------------------------------------------------------------*/ // Set Up Instance + #ifdef _DEBUG SHVkInstance::Init(true, true, true); + #else + SHVkInstance::Init(true, false, true); + #endif // Get Physical Device and Construct Logical Device physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); From ecd1efee5642c42b29317107b77ad4a54d4ceb04 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Thu, 3 Nov 2022 21:25:43 +0800 Subject: [PATCH 662/793] AI Capture Mechanic --- TempScriptsFolder/AIPrototype.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/TempScriptsFolder/AIPrototype.cs b/TempScriptsFolder/AIPrototype.cs index 80fa643e..d678de78 100644 --- a/TempScriptsFolder/AIPrototype.cs +++ b/TempScriptsFolder/AIPrototype.cs @@ -25,15 +25,19 @@ public class AIPrototype : Script [SerializeField] [Tooltip("How fast the object moves about waypoints")] - private float patrolSpeed = 1.0f; + private float patrolSpeed = 0.4f; [SerializeField] [Tooltip("How fast the object moves while chasing")] - private float chaseSpeed = 1.5f; + private float chaseSpeed = 0.8f; + + [SerializeField] + [Tooltip("How near the player must be to the AI for capture")] + private float distanceToCapture = 1.2f; [SerializeField] [Tooltip("How near the player must be for the chase to begin. Should be less than distanceToEndChase")] - private float distanceToStartChase = 1.5f; + private float distanceToStartChase = 2.0f; [SerializeField] [Tooltip("How far the player must be for the chase to end. Should be greater than distanceToStartChase")] @@ -151,6 +155,12 @@ public class AIPrototype : Script //TODO delete this when original intended code above works with velocity being limited correctly rb.LinearVelocity = normalisedDifference * chaseSpeed; + //Capture player if near enough + if ((pTransform.GlobalPosition - transform.GlobalPosition).GetMagnitude() <= distanceToCapture) + { + player.GetValueOrDefault().GetScript().currentState = PlayerController.RaccoonStates.CAUGHT; + } + //End chase if too far if ((pTransform.GlobalPosition - transform.GlobalPosition).GetMagnitude() >= distanceToEndChase) { From eea35600d3092bcb3564f53fd95846172fd837e8 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 4 Nov 2022 14:04:59 +0800 Subject: [PATCH 663/793] Switched shaders to use multiply colour instead of additive --- Assets/Shaders/TestCube_FS.glsl | 2 +- Assets/Shaders/TestCube_FS.shshaderb | Bin 2401 -> 2401 bytes SHADE_Application/src/Scenes/SBTestScene.cpp | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Shaders/TestCube_FS.glsl b/Assets/Shaders/TestCube_FS.glsl index 1d2b156d..d6f88687 100644 --- a/Assets/Shaders/TestCube_FS.glsl +++ b/Assets/Shaders/TestCube_FS.glsl @@ -43,7 +43,7 @@ void main() { position = In.vertPos; normals = In.normal; - albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) + MatProp.data[In2.materialIndex].color; + albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) * MatProp.data[In2.materialIndex].color; outEntityID = In2.eid; lightLayerIndices = In2.lightLayerIndex; diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb index 01bf616394dc1f3cad2a9274e76a1966e373ca4b..bcf5bf5ec1c14753c2ee4942289ea98261360a16 100644 GIT binary patch delta 13 UcmaDT^iXKSO%BG^$+tM#0W0wZ`Tzg` delta 13 UcmaDT^iXKSO%BG!$+tM#0V~}F_5c6? diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index b840bed3..fa5d7868 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -67,7 +67,7 @@ namespace Sandbox // Create Materials auto baseRaccoonMat = graphicsSystem->AddOrGetBaseMaterialInstance(); auto baseRaccoonMatInstant = graphicsSystem->AddMaterialInstanceCopy(baseRaccoonMat); - baseRaccoonMatInstant->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 1.0f)); + baseRaccoonMatInstant->SetProperty("data.color", SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); baseRaccoonMatInstant->SetProperty("data.textureIndex", 0); baseRaccoonMatInstant->SetProperty("data.alpha", 0.1f); @@ -189,7 +189,7 @@ namespace Sandbox renderableShowcase.SetMesh(handles.front()); renderableShowcase.SetMaterial(baseRaccoonMatInstant); - renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(0.0f, 0.0f, 0.0f, 0.0f)); + renderableShowcase.GetModifiableMaterial()->SetProperty("data.color", SHVec4(1.0f, 1.0f, 1.0f, 1.0f)); renderableShowcase.GetModifiableMaterial()->SetProperty("data.alpha", 1.0f); renderableShowcase.GetModifiableMaterial()->SetProperty("data.textureIndex", 0); From 4ee02949776f48fc3e983a874b928d3b36c5e616 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 4 Nov 2022 14:44:18 +0800 Subject: [PATCH 664/793] Scene loads correctly now --- Assets/Application.SHConfig | 4 + Assets/Materials/TestMat.shmat | 2 +- Assets/Materials/WhiteMat.shmat | 8 + Assets/Materials/WhiteMat.shmat.shmeta | 3 + Assets/Scenes/M2Scene.shade | 216 ++++++++++++++++++ Assets/Scenes/M2Scene.shade.shmeta | 3 + .../src/Application/SBApplication.cpp | 15 +- SHADE_Application/src/Scenes/SBMainScene.cpp | 62 +++++ SHADE_Application/src/Scenes/SBMainScene.h | 30 +++ .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 56 ++++- SHADE_Engine/src/Editor/SHEditor.cpp | 122 +++++++++- SHADE_Engine/src/Editor/SHEditor.h | 26 ++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 10 +- .../src/Graphics/Windowing/SHWindow.cpp | 24 +- .../src/Graphics/Windowing/SHWindow.h | 15 +- .../src/Resource/SHResourceManager.hpp | 3 + SHADE_Engine/src/Scene/SHScene.h | 2 + SHADE_Engine/src/Scene/SHSceneManager.cpp | 28 ++- SHADE_Engine/src/Scene/SHSceneManager.h | 23 +- .../Configurations/SHConfigurationManager.cpp | 89 ++++++++ .../Configurations/SHConfigurationManager.h | 44 ++++ .../src/Serialization/SHSerialization.cpp | 54 ++--- .../src/Serialization/SHSerialization.h | 8 +- .../Serialization/SHSerializationHelper.hpp | 42 ++-- SHADE_Engine/src/Tools/FileIO/SHFieIO.cpp | 31 +++ SHADE_Engine/src/Tools/FileIO/SHFileIO.h | 14 ++ SHADE_Managed/premake5.lua | 1 + 27 files changed, 834 insertions(+), 101 deletions(-) create mode 100644 Assets/Application.SHConfig create mode 100644 Assets/Materials/WhiteMat.shmat create mode 100644 Assets/Materials/WhiteMat.shmat.shmeta create mode 100644 Assets/Scenes/M2Scene.shade create mode 100644 Assets/Scenes/M2Scene.shade.shmeta create mode 100644 SHADE_Application/src/Scenes/SBMainScene.cpp create mode 100644 SHADE_Application/src/Scenes/SBMainScene.h create mode 100644 SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.cpp create mode 100644 SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h create mode 100644 SHADE_Engine/src/Tools/FileIO/SHFieIO.cpp create mode 100644 SHADE_Engine/src/Tools/FileIO/SHFileIO.h diff --git a/Assets/Application.SHConfig b/Assets/Application.SHConfig new file mode 100644 index 00000000..3f7a4ac0 --- /dev/null +++ b/Assets/Application.SHConfig @@ -0,0 +1,4 @@ +Start in Fullscreen: false +Starting Scene ID: 94283040 +Window Size: {x: 1920, y: 1080} +Window Title: SHADE Engine \ No newline at end of file diff --git a/Assets/Materials/TestMat.shmat b/Assets/Materials/TestMat.shmat index 089576f3..acfa2dc3 100644 --- a/Assets/Materials/TestMat.shmat +++ b/Assets/Materials/TestMat.shmat @@ -2,7 +2,7 @@ FragmentShader: 46377769 SubPass: G-Buffer Write Properties: - data.color: {x: 1, y: 0.200000003, z: 0.100000001, w: 1} + data.color: {x: 0, y: 0, z: 0, w: 1} data.textureIndex: 64651793 data.alpha: 0 data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Materials/WhiteMat.shmat b/Assets/Materials/WhiteMat.shmat new file mode 100644 index 00000000..5a1cb199 --- /dev/null +++ b/Assets/Materials/WhiteMat.shmat @@ -0,0 +1,8 @@ +- VertexShader: 39210065 + FragmentShader: 46377769 + SubPass: G-Buffer Write + Properties: + data.color: {x: 1, y: 1, z: 1, w: 1} + data.textureIndex: 0 + data.alpha: 0 + data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Materials/WhiteMat.shmat.shmeta b/Assets/Materials/WhiteMat.shmat.shmeta new file mode 100644 index 00000000..588afba4 --- /dev/null +++ b/Assets/Materials/WhiteMat.shmat.shmeta @@ -0,0 +1,3 @@ +Name: WhiteMat +ID: 124370424 +Type: 7 diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade new file mode 100644 index 00000000..39caeeaa --- /dev/null +++ b/Assets/Scenes/M2Scene.shade @@ -0,0 +1,216 @@ +- EID: 0 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Camera Component: + Position: {x: 0, y: 0, z: 0} + Pitch: 0 + Yaw: 0 + Roll: 0 + Width: 1920 + Height: 1080 + Near: 0.00999999978 + Far: 10000 + Perspective: true + Light Component: + Position: {x: 0, y: 0, z: 0} + Type: Directional + Direction: {x: 1.79999995, y: 0, z: 1} + Color: {x: 0.951541841, y: 0.921719015, z: 0.553319454, w: 1} + Layer: 4294967295 + Strength: 0 + Scripts: ~ +- EID: 1 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -1.440328, y: -4.41369677, z: -5} + Rotate: {x: -0, y: 0, z: -0} + Scale: {x: 49.4798889, y: 0.5, z: 17.5} + Renderable Component: + Mesh: 80365422 + Material: 126974645 + RigidBody Component: + Type: Static + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: true + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: false + Freeze Rotation Y: false + Freeze Rotation Z: false + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 0.0170898438, y: 0.00048828125, z: 0.0170898438} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0, z: 0} + Scripts: ~ +- EID: 2 + Name: Player + IsActive: true + NumberOfChildren: 2 + Components: + Transform Component: + Translate: {x: -3.06177855, y: -2, z: -5} + Rotate: {x: -0, y: 0, z: -0} + Scale: {x: 2, y: 2, z: 2} + Renderable Component: + Mesh: 80365422 + Material: 126974645 + RigidBody Component: + Type: Dynamic + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: true + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: false + Freeze Rotation Y: false + Freeze Rotation Z: false + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} + Scripts: ~ +- EID: 3 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -0.0094268322, y: 0, z: 0} + Rotate: {x: -0, y: 0, z: -0} + Scale: {x: 1, y: 1, z: 1} + Scripts: ~ +- EID: 4 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: 0, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 1, y: 1, z: 1} + Scripts: ~ +- EID: 5 + Name: item + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: -2, z: -5} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 2, y: 2, z: 2} + Renderable Component: + Mesh: 80365422 + Material: 124370424 + RigidBody Component: + Type: Dynamic + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: false + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: true + Freeze Rotation Y: true + Freeze Rotation Z: true + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} + - Is Trigger: true + Type: Box + Half Extents: {x: 0.001953125, y: 0.001953125, z: 0.001953125} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} + Scripts: ~ +- EID: 6 + Name: AI + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -8, y: -2, z: 2.5} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 2, y: 2, z: 2} + Renderable Component: + Mesh: 80365422 + Material: 126974645 + RigidBody Component: + Type: Dynamic + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: false + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: true + Freeze Rotation Y: true + Freeze Rotation Z: true + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} + Scripts: ~ +- EID: 7 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 3, y: -1, z: -1} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 5, y: 5, z: 5} + Renderable Component: + Mesh: 80365422 + Material: 126974645 + Scripts: ~ +- EID: 8 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Light Component: + Position: {x: 0, y: 0, z: 0} + Type: Ambient + Direction: {x: 0, y: 0, z: 1} + Color: {x: 1, y: 1, z: 1, w: 1} + Layer: 4294967295 + Strength: 0.25 + Scripts: ~ \ No newline at end of file diff --git a/Assets/Scenes/M2Scene.shade.shmeta b/Assets/Scenes/M2Scene.shade.shmeta new file mode 100644 index 00000000..9289949c --- /dev/null +++ b/Assets/Scenes/M2Scene.shade.shmeta @@ -0,0 +1,3 @@ +Name: M2Scene +ID: 94283040 +Type: 5 diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index c43ca45d..f4102067 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -41,6 +41,8 @@ #include "Assets/SHAssetManager.h" +#include "Scenes/SBMainScene.h" +#include "Serialization/Configurations/SHConfigurationManager.h" #include "Tools/SHLogger.h" #include "Tools/SHDebugDraw.h" @@ -60,8 +62,9 @@ namespace Sandbox { // Set working directory SHFileUtilities::SetWorkDirToExecDir(); - - window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); + WindowData wndData{}; + auto& appConfig = SHConfigurationManager::LoadApplicationConfig(&wndData); + window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow, wndData); // Create Systems SHSystemManager::CreateSystem(); @@ -80,7 +83,11 @@ namespace Sandbox SDL_Init(SDL_INIT_VIDEO); sdlWindow = SDL_CreateWindowFrom(window.GetHWND()); SHSystemManager::CreateSystem(); - SHSystemManager::GetSystem()->SetSDLWindow(sdlWindow); + if(auto editor = SHSystemManager::GetSystem()) + { + editor->SetSDLWindow(sdlWindow); + editor->SetSHWindow(&window); + } #endif // Create Routines @@ -128,7 +135,7 @@ namespace Sandbox SHSystemManager::Init(); - SHSceneManager::InitSceneManager("TestScene"); + SHSceneManager::InitSceneManager(appConfig.startingSceneID); SHFrameRateController::UpdateFRC(); diff --git a/SHADE_Application/src/Scenes/SBMainScene.cpp b/SHADE_Application/src/Scenes/SBMainScene.cpp new file mode 100644 index 00000000..34190915 --- /dev/null +++ b/SHADE_Application/src/Scenes/SBMainScene.cpp @@ -0,0 +1,62 @@ + #include "SBpch.h" +#include "SBMainScene.h" + +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Scene/SHSceneManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Scripting/SHScriptEngine.h" +#include "Math/Transform/SHTransformComponent.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "Physics/Components/SHRigidBodyComponent.h" +#include "Physics/Components/SHColliderComponent.h" +#include "Graphics/MiddleEnd/Lights/SHLightComponent.h" + +#include "Assets/SHAssetManager.h" +#include "Camera/SHCameraComponent.h" +#include "Resource/SHResourceManager.h" +#include "Serialization/SHSerialization.h" + + using namespace SHADE; + +namespace Sandbox +{ + + void SBMainScene::WindowFocusFunc([[maybe_unused]] void* window, int focused) + { + if (focused) + { + } + else + { + } + } + + void SBMainScene::Load() + { + } + + void SBMainScene::Init() + { + sceneName = SHSerialization::DeserializeSceneFromFile(sceneAssetID); + } + + void SBMainScene::Update(float dt) + { + } + + void SBMainScene::Render() + { + } + + void SBMainScene::Unload() + { + } + + void SBMainScene::Free() + { + //SHSerialization::SerializeScene("resources/scenes/Scene01.SHADE"); + } +} diff --git a/SHADE_Application/src/Scenes/SBMainScene.h b/SHADE_Application/src/Scenes/SBMainScene.h new file mode 100644 index 00000000..7bd10118 --- /dev/null +++ b/SHADE_Application/src/Scenes/SBMainScene.h @@ -0,0 +1,30 @@ +#pragma once + +#include "Scene/SHScene.h" +#include "Scene/SHSceneManager.h" + +namespace Sandbox +{ + class SBMainScene : public SHADE::SHScene + { + private: + EntityID camera; + EntityID testObj; + std::vector stressTestObjects; + + public: + virtual void Load(); + virtual void Init(); + virtual void Update(float dt); + virtual void Render(); + virtual void Free(); + virtual void Unload(); + + //TODO: Change to new window DO IT IN CPP TOO + void WindowFocusFunc(void* window, int focused); + + SBMainScene(void) = default; + }; + +} + diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index 06c0c2ae..af2d5517 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -3,6 +3,7 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# +#include "Editor/SHEditorWidgets.hpp" #include "Editor/SHEditor.h" #include "SHEditorMenuBar.h" #include "Editor/IconsMaterialDesign.h" @@ -17,7 +18,11 @@ #include #include +#include "Assets/SHAssetManager.h" +#include "Assets/Asset Types/SHSceneAsset.h" +#include "Scene/SHSceneManager.h" #include "Serialization/SHSerialization.h" +#include "Serialization/Configurations/SHConfigurationManager.h" namespace SHADE { @@ -75,13 +80,17 @@ namespace SHADE { if (ImGui::BeginMenu("File")) { + if(ImGui::Selectable("New Scene")) + { + SHSystemManager::GetSystem()->NewScene(); + } if(ImGui::Selectable("Save")) { - SHSerialization::SerializeSceneToFile("../../Assets/Scenes/Test.SHADE"); + SHSystemManager::GetSystem()->SaveScene(); } if(ImGui::Selectable("Load")) { - SHSerialization::DeserializeSceneFromFile("../../Assets/Scenes/Test.SHADE"); + //SHSystemManager::GetSystem()->LoadScene() } ImGui::EndMenu(); } @@ -155,6 +164,35 @@ namespace SHADE } ImGui::EndMenu(); } + + if (ImGui::BeginMenu("Application Config")) + { + auto& appConfig = SHConfigurationManager::applicationConfig; + ImGui::InputText("Window Title", &appConfig.windowTitle); + ImGui::Checkbox("Start in Fullscreen", &appConfig.startInFullScreen); + SHEditorWidgets::DragN("Window Size", { "Width", "Height" }, { &appConfig.windowSize.x, &appConfig.windowSize.y }); + //ImGui::InputScalar("Starting Scene", ImGuiDataType_U32, &appConfig.startingSceneID); + auto sceneAsset = SHAssetManager::GetData(appConfig.startingSceneID); + + if(ImGui::BeginCombo("Starting Scne", sceneAsset ? sceneAsset->name.data() : "")) + { + auto scenes = SHAssetManager::GetAllRecordOfType(AssetType::SCENE); + for(auto const& scene : scenes) + { + if(ImGui::Selectable(scene.name.data())) + { + appConfig.startingSceneID = scene.id; + } + } + ImGui::EndCombo(); + } + if (ImGui::Button("Save")) + { + SHConfigurationManager::SaveApplicationConfig(); + } + ImGui::EndMenu(); + } + ImGui::EndMainMenuBar(); } @@ -175,13 +213,16 @@ namespace SHADE ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY); if(ImGui::SmallButton(ICON_MD_PLAY_ARROW)) { - const SHEditorStateChangeEvent STATE_CHANGE_EVENT + if(editor->SaveScene()) { - .previousState = editor->editorState - }; - editor->editorState = SHEditor::State::PLAY; + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editor->editorState + }; + editor->editorState = SHEditor::State::PLAY; - SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); + } } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); @@ -206,6 +247,7 @@ namespace SHADE editor->editorState = SHEditor::State::STOP; SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); + editor->LoadScene(SHSceneManager::GetCurrentSceneAssetID()); } ImGui::EndDisabled(); ImGui::EndMenuBar(); diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6974d213..de8ac9d2 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -45,7 +45,11 @@ #include #include +#include "Assets/SHAssetManager.h" +#include "Assets/Asset Types/SHSceneAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" +#include "Scene/SHSceneManager.h" +#include "Serialization/SHSerialization.h" #include "Tools/SHDebugDraw.h" RTTR_REGISTRATION @@ -147,7 +151,9 @@ namespace SHADE window->Update(); } } - + + RenderSceneNamePrompt(); + RenderUnsavedChangesPrompt(); //PollPicking(); if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) @@ -172,6 +178,60 @@ namespace SHADE } } + void SHEditor::RenderSceneNamePrompt() noexcept + { + if(isSceneNamePromptOpen) + { + ImGui::OpenPopup(sceneNamePromptName.data()); + } + + if(ImGui::BeginPopupModal(sceneNamePromptName.data(), &isSceneNamePromptOpen)) + { + static std::string newSceneName{}; + ImGui::Text("Enter new scene name"); + ImGui::InputText("##name", &newSceneName); + ImGui::BeginDisabled(newSceneName.empty()); + if(ImGui::Button("Save")) + { + SaveScene(newSceneName); + newSceneName.clear(); + isSceneNamePromptOpen = false; + ImGui::CloseCurrentPopup(); + } + ImGui::EndDisabled(); + ImGui::SameLine(); + if(ImGui::Button("Cancel")) + { + isSceneNamePromptOpen = false; + ImGui::CloseCurrentPopup(); + } + ImGui::EndPopup(); + } + } + + void SHEditor::RenderUnsavedChangesPrompt() noexcept + { + if(isUnsavedChangesPromptOpen) + { + ImGui::OpenPopup(unsavedChangesPromptName.data()); + } + + if(ImGui::BeginPopupModal(unsavedChangesPromptName.data(), &isUnsavedChangesPromptOpen)) + { + ImGui::Text("You have unsaved changes!"); + if(ImGui::Button("Save")) + { + isSceneNamePromptOpen = true; + } + ImGui::SameLine(); + if(ImGui::Button("Cancel")) + { + isUnsavedChangesPromptOpen = false; + ImGui::CloseCurrentPopup(); + } + } + } + void SHEditor::InitLayout() noexcept { if(!std::filesystem::exists(io->IniFilename)) @@ -470,6 +530,66 @@ namespace SHADE } } + void SHEditor::NewScene() + { + if(shWindow->IsUnsavedChanges()) + { + //Unsaved changes prompt + sceneToLoad = 0; + isUnsavedChangesPromptOpen = true; + } + else + { + SHSceneManager::RestartScene(0); + shWindow->ToggleUnsavedChanges(); + } + } + + bool SHEditor::SaveScene(std::string const& newSceneName) + { + auto const data = SHAssetManager::GetData(SHSceneManager::GetCurrentSceneAssetID()); + if (!data) + { + if (newSceneName.empty()) + { + //Prompt for scene name + isSceneNamePromptOpen = true; + return false; + } + //Else We have a new name + + SHSceneManager::SetCurrentSceneName(newSceneName); + SHSceneManager::SetCurrentSceneAssetID(SHAssetManager::CreateNewAsset(AssetType::SCENE, newSceneName)); + } + //Get data, if data is null, asset doesn't exist, prompt for a name and create a new asset with the name + + //serialize the scene + if(SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID())) + { + if(shWindow->IsUnsavedChanges()) + shWindow->ToggleUnsavedChanges(); + + return true; + } + return false; + } + + void SHEditor::LoadScene(AssetID const& assetID) noexcept + { + if(shWindow->IsUnsavedChanges()) + { + //Unsaved changes prompt + isUnsavedChangesPromptOpen = true; + sceneToLoad = assetID; + } + else + { + //Load the scene + sceneToLoad = 0; + SHSceneManager::RestartScene(assetID); + } + } + void SHEditor::NewFrame() { SDL_Event event; diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 6e0ef5ae..0f5a3aaa 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -16,15 +16,18 @@ #include "Resource/SHHandle.h" #include "EditorWindow/SHEditorWindow.h" #include "Tools/SHLog.h" -#include "Gizmos/SHTransformGizmo.h"` +#include "Gizmos/SHTransformGizmo.h" #include "Events/SHEventDefines.h" #include "Events/SHEvent.h" +#include "Graphics/Windowing/SHWindow.h" //#==============================================================# //|| Library Includes || //#==============================================================# #include +#include "Assets/SHAssetMacros.h" + namespace SHADE { //#==============================================================# @@ -171,9 +174,16 @@ namespace SHADE void InitBackend(); void SetSDLWindow(SDL_Window* inSDLWindow){sdlWindow = inSDLWindow;}; + void SetSHWindow(SHWindow* inWindow){shWindow = inWindow;} void PollPicking(); + void NewScene(); + + bool SaveScene(std::string const& newSceneName = {}); + + void LoadScene(AssetID const& assetID) noexcept; + // List of selected entities std::vector selectedEntities; @@ -191,6 +201,10 @@ namespace SHADE */ void Render(); + void RenderSceneNamePrompt() noexcept; + + void RenderUnsavedChangesPrompt() noexcept; + void InitLayout() noexcept; void InitFonts() noexcept; @@ -199,12 +213,22 @@ namespace SHADE SHEventHandle onEditorStateChanged(SHEventPtr eventPtr); + bool isSceneNamePromptOpen = false; + + bool isUnsavedChangesPromptOpen = false; + + static constexpr std::string_view sceneNamePromptName = "Save scene as..."; + static constexpr std::string_view unsavedChangesPromptName = "Unsaved Changes"; + + AssetID sceneToLoad = 0; + // Handle to command pool used for ImGui Vulkan Backend Handle imguiCommandPool; // Handle to command buffer used for ImGui Vulkan Backend Handle imguiCommandBuffer; SDL_Window* sdlWindow {nullptr}; + SHWindow* shWindow {nullptr}; ImGuiIO* io{nullptr}; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index be67f1b3..32a03e33 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -764,6 +764,7 @@ namespace SHADE void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept { + SHResourceManager::FinaliseChanges(); reinterpret_cast(system)->BeginRender(); } @@ -789,7 +790,6 @@ namespace SHADE void SHGraphicsSystem::EndRoutine::Execute(double) noexcept { reinterpret_cast(system)->EndRender(); - SHResourceManager::FinaliseChanges(); } /*-----------------------------------------------------------------------------------*/ @@ -806,11 +806,6 @@ namespace SHADE { if (!renderable.HasChanged()) continue; - - if (!renderable.GetMesh()) - { - SHLOG_CRITICAL("NULL Mesh provided!"); - } // Remove from the SuperBatch it is previously in (prevMat if mat has changed) Handle prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial(); @@ -821,8 +816,9 @@ namespace SHADE } // Add to new SuperBatch if there is a material + // Add to new SuperBatch if there is a material and a mesh to render Handle newMatInstance = renderable.GetMaterial(); - if (newMatInstance) + if (newMatInstance && renderable.GetMesh()) { Handle newSuperBatch = newMatInstance->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); newSuperBatch->Add(&renderable); diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index e0dbc1a4..22ca5eba 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -4,7 +4,6 @@ #include "ECS_Base/Managers/SHSystemManager.h" #include "Input/SHInputManager.h" - namespace SHADE { SHWindow::SHWindow() @@ -151,11 +150,11 @@ namespace SHADE SetWindowText(wndHWND, LPCWSTR(wndData.title.c_str())); } - SHWindow::SHVec2 SHWindow::GetPosition() const + SHWindow::WindowSize SHWindow::GetPosition() const { RECT rect; GetWindowRect(wndHWND, &rect); - return SHVec2(static_cast(rect.left), static_cast(rect.top)); + return WindowSize(static_cast(rect.left), static_cast(rect.top)); } void SHWindow::SetPosition(unsigned x, unsigned y) @@ -165,18 +164,18 @@ namespace SHADE wndData.y = y; } - SHWindow::SHVec2 SHWindow::GetWindowSize() const + SHWindow::WindowSize SHWindow::GetWindowSize() const { RECT rect; GetClientRect(wndHWND, &rect); - return SHVec2(static_cast(rect.right - rect.left), static_cast(rect.bottom - rect.top)); + return WindowSize(static_cast(rect.right - rect.left), static_cast(rect.bottom - rect.top)); } - SHWindow::SHVec2 SHWindow::GetCurrentDisplaySize() const + SHWindow::WindowSize SHWindow::GetCurrentDisplaySize() const { unsigned screenWidth = GetSystemMetrics(SM_CXSCREEN); unsigned screenHeight = GetSystemMetrics(SM_CYSCREEN); - return SHVec2(screenWidth, screenHeight); + return WindowSize(screenWidth, screenHeight); } void SHWindow::SetMouseVisible(bool show) @@ -260,7 +259,7 @@ namespace SHADE return wndHWND; } - const WindowData SHWindow::GetWindowData() const + const WindowData SHWindow::GetWindowData() const noexcept { return wndData; } @@ -287,6 +286,15 @@ namespace SHADE windowCloseCallbacks.erase(callbackid); } + void SHWindow::ToggleUnsavedChanges() noexcept + { + unsavedChanges = !unsavedChanges; + std::wstring title = wndData.title; + if(unsavedChanges) + title.append(L"*"); + SetWindowText(wndHWND, title.data()); + } + LRESULT SHWindow::WndProcStatic(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { auto window = windowMap.GetWindow(hwnd); diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 11308d90..06df9036 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -74,7 +74,7 @@ namespace SHADE class SH_API SHWindow { public: - using SHVec2 = std::pair; + using WindowSize = std::pair; typedef std::function WindowResizeCallbackFn; typedef std::function WindowCloseCallbackFn; typedef uint16_t CALLBACKID; @@ -92,15 +92,15 @@ namespace SHADE void SetTitle(std::wstring title); - SHVec2 GetPosition() const; + WindowSize GetPosition() const; void SetPosition(unsigned x, unsigned y); //void SetPosition(SHMathVec2U); - SHVec2 GetWindowSize() const; + WindowSize GetWindowSize() const; //Get size of display the window is in (whichever window contains the window origin) - SHVec2 GetCurrentDisplaySize() const; + WindowSize GetCurrentDisplaySize() const; void SetMouseVisible(bool show); @@ -123,7 +123,7 @@ namespace SHADE HWND GetHWND(); - const WindowData GetWindowData() const; + const WindowData GetWindowData() const noexcept; CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); @@ -131,6 +131,8 @@ namespace SHADE void UnregisterWindowCloseCallback(CALLBACKID const& callbackid); bool IsMinimized() const { return wndData.isMinimised; } + void ToggleUnsavedChanges() noexcept; + bool IsUnsavedChanges() const noexcept{return unsavedChanges;} protected: static LRESULT CALLBACK WndProcStatic(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); @@ -164,7 +166,8 @@ namespace SHADE std::unordered_map windowCloseCallbacks; CALLBACKID windowResizeCallbackCount{}; CALLBACKID windowCloseCallbackCount{}; - //TODO: Shift to events abstraction + + bool unsavedChanges = false; void OnCreate(HWND hwnd, LPCREATESTRUCT create_struct); void OnClose(); diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index fc8b2c57..ee1a76ba 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -282,6 +282,9 @@ namespace SHADE case SHADE::SHShaderBlockInterface::Variable::Type::INT: { Handle texture = LoadOrGet(PROP_NODE.as()); + // HACK: Need to split this out to a separate pass before loading the materials and subsequently, the scenes + gfxSystem->BuildTextures(); + if (texture) { matHandle->SetProperty(VARIABLE->offset, texture->TextureArrayIndex); diff --git a/SHADE_Engine/src/Scene/SHScene.h b/SHADE_Engine/src/Scene/SHScene.h index a81c70ef..1f06824e 100644 --- a/SHADE_Engine/src/Scene/SHScene.h +++ b/SHADE_Engine/src/Scene/SHScene.h @@ -13,6 +13,7 @@ #include #include "SHSceneGraph.h" +#include "Assets/SHAssetMacros.h" #include "ECS_Base/General/SHFamily.h" namespace SHADE @@ -32,6 +33,7 @@ namespace SHADE virtual ~SHScene() = default; std::string sceneName; + AssetID sceneAssetID; SHSceneGraph& GetSceneGraph() noexcept { return sceneGraph; } diff --git a/SHADE_Engine/src/Scene/SHSceneManager.cpp b/SHADE_Engine/src/Scene/SHSceneManager.cpp index 2baf0b9c..be9c7755 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.cpp +++ b/SHADE_Engine/src/Scene/SHSceneManager.cpp @@ -29,7 +29,7 @@ namespace SHADE std::string SHSceneManager::newSceneName{}; uint32_t SHSceneManager::currentSceneID = UINT32_MAX; uint32_t SHSceneManager::nextSceneID = UINT32_MAX; - + AssetID SHSceneManager::currentSceneAssetID{}; SHScene* SHSceneManager::currentScene = nullptr; //SHScene* SHSceneManager::nextScene = nullptr; @@ -107,16 +107,18 @@ namespace SHADE } } - void SHSceneManager::RestartScene(std::string const& sceneName) noexcept + void SHSceneManager::RestartScene(AssetID const& assetID ) noexcept { - if (currentScene->sceneName != sceneName) + if (currentScene->sceneAssetID != assetID) { - cleanReload = true; - newSceneName = sceneName; + //cleanReload = true; + cleanReload = false; + //newSceneName = sceneName; } else cleanReload = false; + currentScene->sceneAssetID = assetID; nextSceneID = currentSceneID; sceneChanged = true; } @@ -151,4 +153,20 @@ namespace SHADE { return currentScene->sceneName; } + + void SHSceneManager::SetCurrentSceneName(std::string const& sceneName) noexcept + { + currentScene->sceneName = sceneName; + } + + AssetID SHSceneManager::GetCurrentSceneAssetID() noexcept + { + return currentScene->sceneAssetID; + } + + void SHSceneManager::SetCurrentSceneAssetID(AssetID const& newAssetID) + { + currentScene->sceneAssetID = newAssetID; + currentSceneAssetID = newAssetID; + } } diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index 2e4b1717..23d13261 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -20,6 +20,7 @@ //Project Headers #include "SH_API.h" #include "ECS_Base/General/SHFamily.h" +#include "Assets/SHAssetMacros.h" namespace SHADE { @@ -47,6 +48,9 @@ namespace SHADE //pointer to the current scene static SHScene* currentScene; + //Scene AssetID of the current scene + static AssetID currentSceneAssetID; + //Used in reloading scene. static std::string newSceneName; @@ -80,10 +84,10 @@ namespace SHADE * None. ***************************************************************************/ template - static std::enable_if_t, void> InitSceneManager(std::string const& sceneName) noexcept + static std::enable_if_t, void> InitSceneManager(AssetID const& sceneAssetID) noexcept { //prevSceneCreate = newScene; - newScene = [sceneName]() { currentScene = new T(); currentScene->sceneName = sceneName; }; + newScene = [sceneAssetID]() { currentScene = new T(); currentScene->sceneAssetID = sceneAssetID; }; //nextSceneID = SHFamilyID::GetID(); nextSceneID = 0; @@ -99,7 +103,7 @@ namespace SHADE * None. ***************************************************************************/ template - static std::enable_if_t, void> ChangeScene(std::string const& sceneName) noexcept + static std::enable_if_t, void> ChangeScene(AssetID const& sceneAssetID) noexcept { //check if this new Scene is current Scene (Use RestartScene instead) if (currentSceneID == SHFamilyID::GetID()) @@ -107,7 +111,7 @@ namespace SHADE return; } //prevSceneCreate = newScene; - newScene = [sceneName]() { currentScene = new T(); currentScene->sceneName; }; + newScene = [sceneAssetID]() { currentScene = new T(); currentScene->sceneAssetID = sceneAssetID; }; nextSceneID = SHFamilyID::GetID(); sceneChanged = true; } @@ -137,11 +141,11 @@ namespace SHADE * Restarts current scene. Only Scene::Init() and Scene::Free() * Scene::Load() and Scene::Unload() will not be called. * Edit: allows for RestartScene to restart the scene with a different - * scene name. - * If a sceneName is different from the current one, Load and Unload will + * scene asset ID. + * If a scene asset id is different from the current one, Load and Unload will * run. ***************************************************************************/ - static void RestartScene(std::string const& sceneName ) noexcept; + static void RestartScene(AssetID const& assetID ) noexcept; /*!************************************************************************* * \brief @@ -164,7 +168,10 @@ namespace SHADE static void Exit() noexcept; static std::string GetSceneName() noexcept; - + static void SetCurrentSceneName(std::string const& sceneName) noexcept; + static AssetID GetCurrentSceneAssetID() noexcept; + //Only if scene doesn't exist, and scene asset id needs to be updated to the new one + static void SetCurrentSceneAssetID(AssetID const& newAssetID); }; diff --git a/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.cpp b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.cpp new file mode 100644 index 00000000..6fa4e9bf --- /dev/null +++ b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.cpp @@ -0,0 +1,89 @@ +#include "SHpch.h" +#include "SHConfigurationManager.h" +#include "Tools/FileIO/SHFileIO.h" +#include "Serialization/SHSerializationHelper.hpp" + +namespace SHADE +{ + SHApplicationConfig SHConfigurationManager::applicationConfig; +#ifdef SHEDITOR + SHEditorConfig SHConfigurationManager::editorConfig; +#endif + + void SHConfigurationManager::SaveApplicationConfig() + { + YAML::Emitter out; + out << SHSerializationHelper::RTTRToNode(applicationConfig); + SHFileIO::WriteStringToFile(applicationConfigPath, out.c_str()); + } + + SHApplicationConfig& SHConfigurationManager::LoadApplicationConfig(WindowData* wndData) + { + if(!std::filesystem::exists(applicationConfigPath)) + { + SaveApplicationConfig(); + return applicationConfig; + } + + auto const node = YAML::Load(SHFileIO::GetStringFromFile(applicationConfigPath)); + auto properties = rttr::type::get().get_properties(); + for(auto const& property : properties) + { + if(node[property.get_name().data()].IsDefined()) + SHSerializationHelper::InitializeProperty(&applicationConfig, property, node[property.get_name().data()]); + } + + if(wndData != nullptr) + { + wndData->isFullscreen = applicationConfig.startInFullScreen; + wndData->title = std::wstring(applicationConfig.windowTitle.begin(), applicationConfig.windowTitle.end()); + wndData->width = static_cast(applicationConfig.windowSize.x); + wndData->height = static_cast(applicationConfig.windowSize.y); + } + + return applicationConfig; + } + +#ifdef SHEDITOR + void SHConfigurationManager::SaveEditorConfig() + { + YAML::Emitter out; + out << SHSerializationHelper::RTTRToNode(editorConfig); + SHFileIO::WriteStringToFile(editorConfigPath, out.c_str()); + } + + SHEditorConfig& SHConfigurationManager::LoadEditorConfig() + { + auto const node = YAML::Load(SHFileIO::GetStringFromFile(editorConfigPath)); + auto properties = rttr::type::get().get_properties(); + for(auto const& property : properties) + { + if(node[property.get_name().data()].IsDefined()) + SHSerializationHelper::InitializeProperty(&editorConfig, property, node[property.get_name().data()]); + } + return editorConfig; + } + + void SHConfigurationManager::FetchEditorCameraData() + { + + } + + void SHConfigurationManager::SetEditorCameraData() + { + + } +#endif +} + +RTTR_REGISTRATION +{ + using namespace rttr; + using namespace SHADE; + + registration::class_("Application Config") + .property("Start in Fullscreen", &SHApplicationConfig::startInFullScreen) + .property("Starting Scene ID", &SHApplicationConfig::startingSceneID) + .property("Window Size", &SHApplicationConfig::windowSize) + .property("Window Title", &SHApplicationConfig::windowTitle); +} diff --git a/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h new file mode 100644 index 00000000..abf679ca --- /dev/null +++ b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h @@ -0,0 +1,44 @@ +#pragma once +#include +#include "Assets/SHAssetMacros.h" +#include "Graphics/Windowing/SHWindow.h" +#include "SH_API.h" +#include "Math/Vector/SHVec2.h" + +namespace SHADE +{ + + struct SHApplicationConfig + { + bool startInFullScreen{ false }; + AssetID startingSceneID{}; + SHVec2 windowSize {1920, 1080}; + std::string windowTitle {"SHADE Engine"}; + RTTR_ENABLE() + }; + + struct SHEditorConfig + { + + }; + + class SH_API SHConfigurationManager + { + public: + static constexpr std::string_view applicationConfigPath{"../../Assets/Application.SHConfig"}; + static constexpr std::string_view editorConfigPath{"../../Assets/Editor/Editor.SHConfig"}; + + static void SaveApplicationConfig(); + static SHApplicationConfig& LoadApplicationConfig(WindowData* wndData = nullptr); + static SHApplicationConfig applicationConfig; +#ifdef SHEDITOR + static void SaveEditorConfig(); + static SHEditorConfig& LoadEditorConfig(); + static SHEditorConfig editorConfig; + private: + static void FetchEditorCameraData(); + static void SetEditorCameraData(); +#endif + + }; +} diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 03498951..dc79ac72 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -10,6 +10,7 @@ #include "Assets/SHAssetManager.h" #include +#include "Assets/Asset Types/SHSceneAsset.h" #include "Camera/SHCameraComponent.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" @@ -17,19 +18,23 @@ #include "ECS_Base/Managers/SHSystemManager.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Scripting/SHScriptEngine.h" +#include "Tools/FileIO/SHFileIO.h" namespace SHADE { - void SHSerialization::SerializeSceneToFile(std::filesystem::path const& path) + bool SHSerialization::SerializeSceneToFile(AssetID const& sceneAssetID) { + auto assetData = SHAssetManager::GetData(sceneAssetID); + if(!assetData) + { + SHLOG_ERROR("Asset does not exist: {}", sceneAssetID); + return false; + } YAML::Emitter out; SerializeSceneToEmitter(out); - std::ofstream file(path.c_str()); - if (file.good()) - { - file << out.c_str(); - file.close(); - } + assetData->data = out.c_str(); + + return SHAssetManager::SaveAsset(sceneAssetID); } std::string SHSerialization::SerializeSceneToString() @@ -91,31 +96,16 @@ namespace SHADE return eid; } - void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) + std::string SHSerialization::DeserializeSceneFromFile(AssetID const& sceneAssetID) noexcept { - //TODO:Shift to using XQ's FileIO - std::ifstream iFile; - iFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); - std::string fileContent = ""; - - try + auto assetData = SHAssetManager::GetData(sceneAssetID); + if(!assetData) { - // Open file - // Read file's buffer contents into streams - iFile.open(path); - std::stringstream fileStream; - fileStream << iFile.rdbuf(); - - fileContent = fileStream.str(); - - // Close file handler - iFile.close(); + SHLOG_ERROR("Attempted to load scene that doesn't exist {}", sceneAssetID) + SHSceneManager::SetCurrentSceneAssetID(0); + return NewSceneName.data(); } - catch (std::ifstream::failure e) - { - SHLOG_ERROR("Could not read file"); - } - YAML::Node entities = YAML::Load(fileContent); + YAML::Node entities = YAML::Load(assetData->data); std::vector createdEntities{}; //Create Entities @@ -126,7 +116,7 @@ namespace SHADE if (createdEntities.empty()) { SHLOG_ERROR("Failed to create entities from deserializaiton") - return; + return NewSceneName.data(); } //Initialize Entity auto entityVecIt = createdEntities.begin(); @@ -134,7 +124,9 @@ namespace SHADE { InitializeEntity(*it, *entityVecIt++); } - } + + return assetData->name; + } void SHSerialization::EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out) { diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index 018bf0c3..865d53a3 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -5,6 +5,7 @@ #include #include +#include namespace YAML { @@ -25,12 +26,11 @@ namespace SHADE struct SH_API SHSerialization { - //TODO: change paths to resource ID - static void SerializeSceneToFile(std::filesystem::path const& path); + static bool SerializeSceneToFile(AssetID const& sceneAssetID); static std::string SerializeSceneToString(); static void SerializeSceneToEmitter(YAML::Emitter& out); - static void DeserializeSceneFromFile(std::filesystem::path const& path); + static std::string DeserializeSceneFromFile(AssetID const& sceneAssetID) noexcept; static void EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out); @@ -44,5 +44,7 @@ namespace SHADE static std::vector GetComponentIDList(YAML::Node const& componentsNode); private: static void InitializeEntity(YAML::Node const& entityNode, EntityID const& eid); + + static constexpr std::string_view NewSceneName = "New Scene"; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index ed4f118a..46e591dc 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -397,6 +397,8 @@ namespace SHADE node = YAML::Null; } } + else if (varType == rttr::type::get()) + node = var.to_string(); else { auto properties = var.get_type().get_properties(); @@ -432,63 +434,65 @@ namespace SHADE return node; } - template , bool> = true> - static void InitializeProperty(ComponentType* component, rttr::property const& prop, YAML::Node const& propertyNode) + template + static void InitializeProperty(Type* object, rttr::property const& prop, YAML::Node const& propertyNode) { auto propType = prop.get_type(); if (propType == rttr::type::get()) { SHVec4 vec = propertyNode.as(); - prop.set_value(component, vec); + prop.set_value(object, vec); } else if (propType == rttr::type::get()) { SHVec3 vec = propertyNode.as(); - prop.set_value(component, vec); + prop.set_value(object, vec); } else if (propType == rttr::type::get()) { SHVec2 vec = propertyNode.as(); - prop.set_value(component, vec); + prop.set_value(object, vec); } else if (propType.is_arithmetic()) { bool ok = false; if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); else if (propType == rttr::type::get()) - prop.set_value(component, propertyNode.as()); + prop.set_value(object, propertyNode.as()); } else if (propType.is_enumeration()) { auto enumAlign = prop.get_enumeration(); - prop.set_value(component, enumAlign.name_to_value(propertyNode.as())); + prop.set_value(object, enumAlign.name_to_value(propertyNode.as())); } + else if (propType == rttr::type::get()) + prop.set_value(object, propertyNode.as()); else { auto properties = propType.get_properties(); for (auto const& property : properties) { - if (propertyNode[property.get_name().data()].IsDefined()) - InitializeProperty(component, property, propertyNode[property.get_name().data()]); + if(propertyNode[property.get_name().data()].IsDefined()) + InitializeProperty(object, property, propertyNode[property.get_name().data()]); } } } diff --git a/SHADE_Engine/src/Tools/FileIO/SHFieIO.cpp b/SHADE_Engine/src/Tools/FileIO/SHFieIO.cpp new file mode 100644 index 00000000..c4fec120 --- /dev/null +++ b/SHADE_Engine/src/Tools/FileIO/SHFieIO.cpp @@ -0,0 +1,31 @@ +#include "SHpch.h" +#include "SHFileIO.h" +#include + +namespace SHADE +{ + int SHFileIO::WriteStringToFile(std::filesystem::path const& filePath, std::string_view const& strView) + { + std::ofstream file(filePath); + if(file.good()) + { + file << strView; + file.close(); + return 1; + } + return 0; + } + + std::string SHFileIO::GetStringFromFile(std::filesystem::path const& filePath) + { + std::ifstream iFile; + iFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); + std::string fileData{}; + iFile.open(filePath, std::iostream::binary); + std::stringstream ss; + ss << iFile.rdbuf(); + fileData = ss.str(); + iFile.close(); + return fileData; + } +} diff --git a/SHADE_Engine/src/Tools/FileIO/SHFileIO.h b/SHADE_Engine/src/Tools/FileIO/SHFileIO.h new file mode 100644 index 00000000..adc95d5b --- /dev/null +++ b/SHADE_Engine/src/Tools/FileIO/SHFileIO.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include +#include +#include + +namespace SHADE +{ + struct SH_API SHFileIO + { + static int WriteStringToFile(std::filesystem::path const& filePath, std::string_view const& strView); + static std::string GetStringFromFile(std::filesystem::path const& file); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index b383f002..88021071 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -38,6 +38,7 @@ project "SHADE_Managed" "%{IncludeDir.RTTR}/include", "%{IncludeDir.dotnet}\\include", "%{IncludeDir.reactphysics3d}\\include", + "%{IncludeDir.VULKAN}\\include", "%{wks.location}/SHADE_Engine/src" } From 2b34e8c13ba27783a5707077031f64f8d30450e7 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 4 Nov 2022 16:09:15 +0800 Subject: [PATCH 665/793] Fix drag-drop parenting issue Users can now drop onto empty space in hierarchy panel to unparent --- .../HierarchyPanel/SHHierarchyPanel.cpp | 23 +++++++++++++------ .../HierarchyPanel/SHHierarchyPanel.h | 4 +++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 1b289a90..e2c39ad8 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -45,7 +45,7 @@ namespace SHADE SHEditorWindow::Update(); isAnyNodeSelected = false; - + if (Begin()) { if (skipFrame) @@ -108,6 +108,12 @@ namespace SHADE } } + if(ImGui::IsWindowHovered() && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + ParentSelectedEntities(MAX_EID, draggingEntities); + draggingEntities.clear(); + ImGui::ClearDragDrop(); + } ImGui::End(); } @@ -195,7 +201,7 @@ namespace SHADE if (SHDragDrop::BeginSource()) { std::string moveLabel = "Moving EID: "; - static std::vector draggingEntities = editor->selectedEntities; + draggingEntities = editor->selectedEntities; if (!isSelected) { draggingEntities.clear(); @@ -217,7 +223,8 @@ namespace SHADE { if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(SHDragDrop::DRAG_EID)) //If payload is valid { - ParentSelectedEntities(eid); + ParentSelectedEntities(eid, draggingEntities); + draggingEntities.clear(); SHDragDrop::EndTarget(); } } @@ -255,7 +262,7 @@ namespace SHADE if ((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) { - ParentSelectedEntities(MAX_EID); + ParentSelectedEntities(MAX_EID, editor->selectedEntities); } ImGui::EndPopup(); } @@ -323,14 +330,16 @@ namespace SHADE SHEntityManager::CreateEntity(MAX_EID, "DefaultChild", parentEID); } - void SHHierarchyPanel::ParentSelectedEntities(EntityID parentEID) const noexcept + void SHHierarchyPanel::ParentSelectedEntities(EntityID parentEID, std::vector const& entities) const noexcept { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - auto const editor = SHSystemManager::GetSystem(); + //auto const editor = SHSystemManager::GetSystem(); SHEntityParentCommand::EntityParentData entityParentData; std::vector parentedEIDS; - for (auto const& eid : editor->selectedEntities) + for (auto const& eid : entities) { + if(eid == parentEID) + continue; if (sceneGraph.GetChild(eid, parentEID) == nullptr) { parentedEIDS.push_back(eid); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 9b26e9d6..64f841d6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -28,7 +28,7 @@ namespace SHADE void DrawMenuBar() const noexcept; ImRect RecursivelyDrawEntityNode(SHSceneNode* const); void CreateChildEntity(EntityID parentEID) const noexcept; - void ParentSelectedEntities(EntityID parentEID) const noexcept; + void ParentSelectedEntities(EntityID parentEID, std::vector const& entities) const noexcept; void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); void SelectAllEntities(); void CopySelectedEntities(); @@ -37,6 +37,8 @@ namespace SHADE std::string filter; bool isAnyNodeSelected = false; EntityID scrollTo = MAX_EID; + std::vector draggingEntities; + };//class SHHierarchyPanel //Might move to a different file From 4eecc0c08d1bf8c28ec6abac169620b54c6de38f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 4 Nov 2022 16:23:13 +0800 Subject: [PATCH 666/793] Removed old mesh and meta files --- Assets/Cube.003.shmesh | Bin 31656 -> 0 bytes Assets/Cube.003.shmesh.shmeta | 3 --- Assets/Cube.012.shmesh.shmeta | 3 --- 3 files changed, 6 deletions(-) delete mode 100644 Assets/Cube.003.shmesh delete mode 100644 Assets/Cube.003.shmesh.shmeta delete mode 100644 Assets/Cube.012.shmesh.shmeta diff --git a/Assets/Cube.003.shmesh b/Assets/Cube.003.shmesh deleted file mode 100644 index 54cfb867570cf8bdca307ccb4b2763a4bbd29892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31656 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 Date: Fri, 4 Nov 2022 17:17:24 +0800 Subject: [PATCH 667/793] Shifted assets and generated new assets --- Assets/Models/racoon.fbx | Bin 0 -> 703020 bytes Assets/Models/racoon.gltf | 4993 +++++++++++++++++ .../racoon.shmodel} | Bin 223192 -> 254874 bytes Assets/Models/racoon.shmodel.shmeta | 10 + 4 files changed, 5003 insertions(+) create mode 100644 Assets/Models/racoon.fbx create mode 100644 Assets/Models/racoon.gltf rename Assets/{Cube.012.shmesh => Models/racoon.shmodel} (87%) create mode 100644 Assets/Models/racoon.shmodel.shmeta diff --git a/Assets/Models/racoon.fbx b/Assets/Models/racoon.fbx new file mode 100644 index 0000000000000000000000000000000000000000..4d823d9d32fd1d077dc4e87503058d5318c79759 GIT binary patch literal 703020 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�__Y> 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 literal 0 HcmV?d00001 diff --git a/Assets/Models/racoon.gltf b/Assets/Models/racoon.gltf new file mode 100644 index 00000000..459a542d --- /dev/null +++ b/Assets/Models/racoon.gltf @@ -0,0 +1,4993 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.3.27", + "version" : "2.0" + }, + "extensionsUsed" : [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 55 + ] + } + ], + "nodes" : [ + { + "name" : "L_Toe_end", + "rotation" : [ + -1.304514398725587e-07, + -4.8278069232242024e-14, + -3.113858042524953e-07, + 1 + ], + "translation" : [ + 2.9270432744255004e-09, + 0.02392714098095894, + 1.3476908478082805e-10 + ] + }, + { + "children" : [ + 0 + ], + "name" : "L_Toe", + "rotation" : [ + 0.32702386379241943, + 1.1310142156162328e-07, + 1.641405731334089e-07, + 0.945016086101532 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + -8.650776095464607e-09, + 0.03380582109093666, + -2.448857117087755e-09 + ] + }, + { + "children" : [ + 1 + ], + "name" : "L_Feet", + "rotation" : [ + 0.516292929649353, + -0.020581310614943504, + -0.05452270060777664, + 0.854426920413971 + ], + "translation" : [ + 1.2865877252465907e-09, + 0.06353945285081863, + 2.6193447411060333e-10 + ] + }, + { + "children" : [ + 2 + ], + "name" : "L_Shin", + "rotation" : [ + -0.054226718842983246, + 0.00034972387948073447, + -0.0027083493769168854, + 0.9985249042510986 + ], + "scale" : [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation" : [ + -8.217813984856548e-09, + 0.012935775332152843, + -1.1059455573558807e-09 + ] + }, + { + "children" : [ + 3 + ], + "name" : "L_Knee", + "rotation" : [ + -0.117364302277565, + -0.00023353073629550636, + -0.005353146698325872, + 0.9930744767189026 + ], + "scale" : [ + 1, + 1.0000001192092896, + 1 + ], + "translation" : [ + -7.161837345392996e-09, + 0.08009886741638184, + -3.725290298461914e-09 + ] + }, + { + "children" : [ + 4 + ], + "name" : "L_Thigh", + "rotation" : [ + 0.005340703763067722, + -0.08032803982496262, + -0.9945576786994934, + 0.06613556295633316 + ], + "scale" : [ + 1.0000009536743164, + 1.0000001192092896, + 1.0000014305114746 + ], + "translation" : [ + 0.06634333729743958, + 0.021777987480163574, + -0.000205356627702713 + ] + }, + { + "name" : "Head_end", + "rotation" : [ + 0, + 3.552713678800501e-15, + 0, + 1 + ], + "translation" : [ + -8.470329472543003e-22, + 0.11583378911018372, + 0 + ] + }, + { + "children" : [ + 6 + ], + "name" : "Head", + "rotation" : [ + 0, + 5.960462701182223e-08, + 0, + 1 + ], + "scale" : [ + 1, + 0.9999999403953552, + 1 + ], + "translation" : [ + 0, + 0.022377878427505493, + 0 + ] + }, + { + "children" : [ + 7 + ], + "name" : "Neck", + "translation" : [ + 0, + 0.10304805636405945, + 0 + ] + }, + { + "name" : "L_Hand_end", + "rotation" : [ + 1.3239958462918366e-08, + -2.4324227076988336e-09, + 1.4901161193847656e-08, + 1 + ], + "translation" : [ + 2.2351740014414645e-08, + 0.016836093738675117, + -5.329070518200751e-15 + ] + }, + { + "children" : [ + 9 + ], + "name" : "L_Hand", + "rotation" : [ + -0.10859407484531403, + -0.0013414795976132154, + -0.012280543334782124, + 0.9940094351768494 + ], + "scale" : [ + 1, + 1, + 0.9999999403953552 + ], + "translation" : [ + -5.215407838932151e-08, + 0.030574528500437737, + 4.579678858362968e-09 + ] + }, + { + "children" : [ + 10 + ], + "name" : "L_Forearm", + "rotation" : [ + 0.03182216361165047, + -0.010124370455741882, + -0.05386859551072121, + 0.9979895353317261 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + -1.4001724224499412e-08, + 0.011892830953001976, + -4.656612873077393e-10 + ] + }, + { + "children" : [ + 11 + ], + "name" : "L_Elbow", + "rotation" : [ + 0.13403145968914032, + 0.0004466302052605897, + 0.0229647234082222, + 0.9907108545303345 + ], + "translation" : [ + 9.490547014934236e-09, + 0.07338026165962219, + 1.862645149230957e-09 + ] + }, + { + "children" : [ + 12 + ], + "name" : "L_Shoulder", + "rotation" : [ + -0.05528340861201286, + 0.01580565795302391, + -0.27442947030067444, + 0.9598866701126099 + ], + "translation" : [ + 1.1175854908174188e-08, + 0.034574370831251144, + -3.3306690738754696e-15 + ] + }, + { + "children" : [ + 13 + ], + "name" : "L_Clavicle", + "rotation" : [ + -4.527326780134899e-08, + -2.4482876170850432e-08, + -0.6586140990257263, + 0.7524808645248413 + ], + "scale" : [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation" : [ + 0.03500552102923393, + 0.07119831442832947, + -6.646381223163189e-10 + ] + }, + { + "name" : "R_Hand_end", + "rotation" : [ + 1.3239958462918366e-08, + 2.4324227076988336e-09, + -1.4901161193847656e-08, + 1 + ], + "translation" : [ + -2.2351740014414645e-08, + 0.016836093738675117, + -5.329070518200751e-15 + ] + }, + { + "children" : [ + 15 + ], + "name" : "R_Hand", + "rotation" : [ + -0.10859407484531403, + 0.0013414795976132154, + 0.012280543334782124, + 0.9940094351768494 + ], + "scale" : [ + 1, + 1, + 0.9999999403953552 + ], + "translation" : [ + 5.215407838932151e-08, + 0.030574528500437737, + 4.579678858362968e-09 + ] + }, + { + "children" : [ + 16 + ], + "name" : "R_Forearm", + "rotation" : [ + 0.03182216361165047, + 0.010124370455741882, + 0.05386859551072121, + 0.9979895353317261 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + 1.4001724224499412e-08, + 0.011892830953001976, + -4.656612873077393e-10 + ] + }, + { + "children" : [ + 17 + ], + "name" : "R_Elbow", + "rotation" : [ + 0.13403145968914032, + -0.0004466302052605897, + -0.0229647234082222, + 0.9907108545303345 + ], + "translation" : [ + -9.490547014934236e-09, + 0.07338026165962219, + 1.862645149230957e-09 + ] + }, + { + "children" : [ + 18 + ], + "name" : "R_Shoulder", + "rotation" : [ + -0.05528340861201286, + -0.01580565795302391, + 0.27442947030067444, + 0.9598866701126099 + ], + "translation" : [ + -1.1175854908174188e-08, + 0.034574370831251144, + -3.3306690738754696e-15 + ] + }, + { + "children" : [ + 19 + ], + "name" : "R_Clavicle", + "rotation" : [ + -4.527326780134899e-08, + 2.4482876170850432e-08, + 0.6586140990257263, + 0.7524808645248413 + ], + "scale" : [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation" : [ + -0.03500552102923393, + 0.07119831442832947, + -6.646381223163189e-10 + ] + }, + { + "name" : "L_IK_Arm_Pole_end", + "rotation" : [ + -8.14913803104389e-10, + -2.8273916541365907e-08, + 3.597233089180918e-08, + 1 + ], + "translation" : [ + 1.3742706528319104e-08, + 0.04507105425000191, + 1.6264998237147665e-08 + ] + }, + { + "children" : [ + 21 + ], + "name" : "L_IK_Arm_Pole", + "rotation" : [ + -0.3575689494609833, + -0.6109033823013306, + 0.6082502007484436, + 0.3591284155845642 + ], + "scale" : [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation" : [ + 0.0021197572350502014, + -0.04126967862248421, + -0.053202081471681595 + ] + }, + { + "children" : [ + 22 + ], + "name" : "L_IK_Arm_Target", + "rotation" : [ + -0.0011026781285181642, + 0.0018760154489427805, + -0.8620717525482178, + 0.5067814588546753 + ], + "scale" : [ + 0.9999999403953552, + 1, + 1 + ], + "translation" : [ + 0.17300567030906677, + 0.02745041251182556, + 3.304734264020226e-10 + ] + }, + { + "name" : "R_IK_Arm_Pole_end", + "rotation" : [ + -8.14913803104389e-10, + 2.8273916541365907e-08, + -3.597233089180918e-08, + 1 + ], + "translation" : [ + -1.3742706528319104e-08, + 0.04507105425000191, + 1.6264998237147665e-08 + ] + }, + { + "children" : [ + 24 + ], + "name" : "R_IK_Arm_Pole", + "rotation" : [ + -0.3575689494609833, + 0.6109033823013306, + -0.6082502007484436, + 0.3591284155845642 + ], + "scale" : [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation" : [ + -0.0021197572350502014, + -0.04126967862248421, + -0.053202081471681595 + ] + }, + { + "children" : [ + 25 + ], + "name" : "R_IK_Arm_Target", + "rotation" : [ + -0.0011026781285181642, + -0.0018760154489427805, + 0.8620717525482178, + 0.5067814588546753 + ], + "scale" : [ + 0.9999999403953552, + 1, + 1 + ], + "translation" : [ + -0.17300567030906677, + 0.02745041251182556, + 3.304734264020226e-10 + ] + }, + { + "children" : [ + 8, + 14, + 20, + 23, + 26 + ], + "name" : "Upper_Spine", + "translation" : [ + 0, + 0.06622835993766785, + 0 + ] + }, + { + "children" : [ + 27 + ], + "name" : "Lower_Spine", + "translation" : [ + 0, + 0.06622838973999023, + 0 + ] + }, + { + "name" : "Tail_end", + "translation" : [ + 0, + 0.07595176249742508, + -1.3838050705317073e-09 + ] + }, + { + "children" : [ + 29 + ], + "name" : "Tail", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + -5.8597615213960615e-18, + 0.03983837366104126, + -0.09847982972860336 + ] + }, + { + "name" : "L_Hip_end", + "translation" : [ + 0, + 0.032987553626298904, + -1.5967565047958487e-09 + ] + }, + { + "children" : [ + 31 + ], + "name" : "L_Hip", + "translation" : [ + 0.06953180581331253, + 0.04957667365670204, + 0.061330340802669525 + ] + }, + { + "name" : "L_Butt_end", + "translation" : [ + 0, + 0.03298754245042801, + 1.3750955929481279e-09 + ] + }, + { + "children" : [ + 33 + ], + "name" : "L_Butt", + "translation" : [ + 0.06953180581331253, + -0.0007792188553139567, + -0.04653617739677429 + ] + }, + { + "name" : "R_Toe_end", + "rotation" : [ + -1.304514398725587e-07, + 4.8278069232242024e-14, + 3.113858042524953e-07, + 1 + ], + "translation" : [ + -2.9270432744255004e-09, + 0.02392714098095894, + 1.3476908478082805e-10 + ] + }, + { + "children" : [ + 35 + ], + "name" : "R_Toe", + "rotation" : [ + 0.32702386379241943, + -1.1310142156162328e-07, + -1.641405731334089e-07, + 0.945016086101532 + ], + "scale" : [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation" : [ + 8.650776095464607e-09, + 0.03380582109093666, + -2.448857117087755e-09 + ] + }, + { + "children" : [ + 36 + ], + "name" : "R_Feet", + "rotation" : [ + 0.516292929649353, + 0.020581310614943504, + 0.05452270060777664, + 0.854426920413971 + ], + "translation" : [ + -1.2865877252465907e-09, + 0.06353945285081863, + 2.6193447411060333e-10 + ] + }, + { + "children" : [ + 37 + ], + "name" : "R_Shin", + "rotation" : [ + -0.054226718842983246, + -0.00034972387948073447, + 0.0027083493769168854, + 0.9985249042510986 + ], + "scale" : [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation" : [ + 8.217813984856548e-09, + 0.012935775332152843, + -1.1059455573558807e-09 + ] + }, + { + "children" : [ + 38 + ], + "name" : "R_Knee", + "rotation" : [ + -0.117364302277565, + 0.00023353073629550636, + 0.005353146698325872, + 0.9930744767189026 + ], + "scale" : [ + 1, + 1.0000001192092896, + 1 + ], + "translation" : [ + 7.161837345392996e-09, + 0.08009886741638184, + -3.725290298461914e-09 + ] + }, + { + "children" : [ + 39 + ], + "name" : "R_Thigh", + "rotation" : [ + 0.005340703763067722, + 0.08032803982496262, + 0.9945576786994934, + 0.06613556295633316 + ], + "scale" : [ + 1.0000009536743164, + 1.0000001192092896, + 1.0000014305114746 + ], + "translation" : [ + -0.06634333729743958, + 0.021777987480163574, + -0.000205356627702713 + ] + }, + { + "name" : "R_Hip_end", + "translation" : [ + 0, + 0.032987553626298904, + -1.5967565047958487e-09 + ] + }, + { + "children" : [ + 41 + ], + "name" : "R_Hip", + "translation" : [ + -0.06953180581331253, + 0.04957667365670204, + 0.061330340802669525 + ] + }, + { + "name" : "R_Butt_end", + "translation" : [ + 0, + 0.03298754245042801, + 1.3750955929481279e-09 + ] + }, + { + "children" : [ + 43 + ], + "name" : "R_Butt", + "translation" : [ + -0.06953180581331253, + -0.0007792188553139567, + -0.04653617739677429 + ] + }, + { + "children" : [ + 5, + 28, + 30, + 32, + 34, + 40, + 42, + 44 + ], + "name" : "Pelvis", + "translation" : [ + 0, + 0.15915730595588684, + 0 + ] + }, + { + "name" : "L_IK_Leg_Pole_end", + "translation" : [ + 0, + 0.04320859909057617, + 2.2203057170600005e-09 + ] + }, + { + "children" : [ + 46 + ], + "name" : "L_IK_Leg_Pole", + "rotation" : [ + 0, + 0, + -1, + 0 + ], + "translation" : [ + -0.008841380476951599, + -0.08020301908254623, + 0.0748630166053772 + ] + }, + { + "children" : [ + 47 + ], + "name" : "L_IK_Leg_Target", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + 0.08565311133861542, + 0.027707800269126892, + 0.00015427125617861748 + ] + }, + { + "name" : "R_IK_Leg_Pole_end", + "translation" : [ + 0, + 0.04320859909057617, + 2.2203057170600005e-09 + ] + }, + { + "children" : [ + 49 + ], + "name" : "R_IK_Leg_Pole", + "rotation" : [ + 0, + 0, + -1, + 0 + ], + "translation" : [ + 0.008841380476951599, + -0.08020301908254623, + 0.0748630166053772 + ] + }, + { + "children" : [ + 50 + ], + "name" : "R_IK_Leg_Target", + "rotation" : [ + -0.7071068286895752, + 0, + 0, + 0.7071068286895752 + ], + "translation" : [ + -0.08565311133861542, + 0.027707800269126892, + 0.00015427125617861748 + ] + }, + { + "children" : [ + 45, + 48, + 51 + ], + "name" : "Root" + }, + { + "mesh" : 0, + "name" : "Bag", + "skin" : 0 + }, + { + "mesh" : 1, + "name" : "Raccoon", + "skin" : 0 + }, + { + "children" : [ + 53, + 54, + 52 + ], + "name" : "Armature" + } + ], + "animations" : [ + { + "channels" : [ + { + "sampler" : 0, + "target" : { + "node" : 52, + "path" : "translation" + } + }, + { + "sampler" : 1, + "target" : { + "node" : 52, + "path" : "rotation" + } + }, + { + "sampler" : 2, + "target" : { + "node" : 52, + "path" : "scale" + } + }, + { + "sampler" : 3, + "target" : { + "node" : 45, + "path" : "translation" + } + }, + { + "sampler" : 4, + "target" : { + "node" : 45, + "path" : "rotation" + } + }, + { + "sampler" : 5, + "target" : { + "node" : 45, + "path" : "scale" + } + }, + { + "sampler" : 6, + "target" : { + "node" : 5, + "path" : "translation" + } + }, + { + "sampler" : 7, + "target" : { + "node" : 5, + "path" : "rotation" + } + }, + { + "sampler" : 8, + "target" : { + "node" : 5, + "path" : "scale" + } + }, + { + "sampler" : 9, + "target" : { + "node" : 4, + "path" : "translation" + } + }, + { + "sampler" : 10, + "target" : { + "node" : 4, + "path" : "rotation" + } + }, + { + "sampler" : 11, + "target" : { + "node" : 4, + "path" : "scale" + } + }, + { + "sampler" : 12, + "target" : { + "node" : 3, + "path" : "translation" + } + }, + { + "sampler" : 13, + "target" : { + "node" : 3, + "path" : "rotation" + } + }, + { + "sampler" : 14, + "target" : { + "node" : 3, + "path" : "scale" + } + }, + { + "sampler" : 15, + "target" : { + "node" : 2, + "path" : "translation" + } + }, + { + "sampler" : 16, + "target" : { + "node" : 2, + "path" : "rotation" + } + }, + { + "sampler" : 17, + "target" : { + "node" : 2, + "path" : "scale" + } + }, + { + "sampler" : 18, + "target" : { + "node" : 1, + "path" : "translation" + } + }, + { + "sampler" : 19, + "target" : { + "node" : 1, + "path" : "rotation" + } + }, + { + "sampler" : 20, + "target" : { + "node" : 1, + "path" : "scale" + } + }, + { + "sampler" : 21, + "target" : { + "node" : 0, + "path" : "translation" + } + }, + { + "sampler" : 22, + "target" : { + "node" : 0, + "path" : "rotation" + } + }, + { + "sampler" : 23, + "target" : { + "node" : 0, + "path" : "scale" + } + }, + { + "sampler" : 24, + "target" : { + "node" : 28, + "path" : "translation" + } + }, + { + "sampler" : 25, + "target" : { + "node" : 28, + "path" : "rotation" + } + }, + { + "sampler" : 26, + "target" : { + "node" : 28, + "path" : "scale" + } + }, + { + "sampler" : 27, + "target" : { + "node" : 27, + "path" : "translation" + } + }, + { + "sampler" : 28, + "target" : { + "node" : 27, + "path" : "rotation" + } + }, + { + "sampler" : 29, + "target" : { + "node" : 27, + "path" : "scale" + } + }, + { + "sampler" : 30, + "target" : { + "node" : 8, + "path" : "translation" + } + }, + { + "sampler" : 31, + "target" : { + "node" : 8, + "path" : "rotation" + } + }, + { + "sampler" : 32, + "target" : { + "node" : 8, + "path" : "scale" + } + }, + { + "sampler" : 33, + "target" : { + "node" : 7, + "path" : "translation" + } + }, + { + "sampler" : 34, + "target" : { + "node" : 7, + "path" : "rotation" + } + }, + { + "sampler" : 35, + "target" : { + "node" : 7, + "path" : "scale" + } + }, + { + "sampler" : 36, + "target" : { + "node" : 6, + "path" : "translation" + } + }, + { + "sampler" : 37, + "target" : { + "node" : 6, + "path" : "rotation" + } + }, + { + "sampler" : 38, + "target" : { + "node" : 6, + "path" : "scale" + } + }, + { + "sampler" : 39, + "target" : { + "node" : 14, + "path" : "translation" + } + }, + { + "sampler" : 40, + "target" : { + "node" : 14, + "path" : "rotation" + } + }, + { + "sampler" : 41, + "target" : { + "node" : 14, + "path" : "scale" + } + }, + { + "sampler" : 42, + "target" : { + "node" : 13, + "path" : "translation" + } + }, + { + "sampler" : 43, + "target" : { + "node" : 13, + "path" : "rotation" + } + }, + { + "sampler" : 44, + "target" : { + "node" : 13, + "path" : "scale" + } + }, + { + "sampler" : 45, + "target" : { + "node" : 12, + "path" : "translation" + } + }, + { + "sampler" : 46, + "target" : { + "node" : 12, + "path" : "rotation" + } + }, + { + "sampler" : 47, + "target" : { + "node" : 12, + "path" : "scale" + } + }, + { + "sampler" : 48, + "target" : { + "node" : 11, + "path" : "translation" + } + }, + { + "sampler" : 49, + "target" : { + "node" : 11, + "path" : "rotation" + } + }, + { + "sampler" : 50, + "target" : { + "node" : 11, + "path" : "scale" + } + }, + { + "sampler" : 51, + "target" : { + "node" : 10, + "path" : "translation" + } + }, + { + "sampler" : 52, + "target" : { + "node" : 10, + "path" : "rotation" + } + }, + { + "sampler" : 53, + "target" : { + "node" : 10, + "path" : "scale" + } + }, + { + "sampler" : 54, + "target" : { + "node" : 9, + "path" : "translation" + } + }, + { + "sampler" : 55, + "target" : { + "node" : 9, + "path" : "rotation" + } + }, + { + "sampler" : 56, + "target" : { + "node" : 9, + "path" : "scale" + } + }, + { + "sampler" : 57, + "target" : { + "node" : 20, + "path" : "translation" + } + }, + { + "sampler" : 58, + "target" : { + "node" : 20, + "path" : "rotation" + } + }, + { + "sampler" : 59, + "target" : { + "node" : 20, + "path" : "scale" + } + }, + { + "sampler" : 60, + "target" : { + "node" : 19, + "path" : "translation" + } + }, + { + "sampler" : 61, + "target" : { + "node" : 19, + "path" : "rotation" + } + }, + { + "sampler" : 62, + "target" : { + "node" : 19, + "path" : "scale" + } + }, + { + "sampler" : 63, + "target" : { + "node" : 18, + "path" : "translation" + } + }, + { + "sampler" : 64, + "target" : { + "node" : 18, + "path" : "rotation" + } + }, + { + "sampler" : 65, + "target" : { + "node" : 18, + "path" : "scale" + } + }, + { + "sampler" : 66, + "target" : { + "node" : 17, + "path" : "translation" + } + }, + { + "sampler" : 67, + "target" : { + "node" : 17, + "path" : "rotation" + } + }, + { + "sampler" : 68, + "target" : { + "node" : 17, + "path" : "scale" + } + }, + { + "sampler" : 69, + "target" : { + "node" : 16, + "path" : "translation" + } + }, + { + "sampler" : 70, + "target" : { + "node" : 16, + "path" : "rotation" + } + }, + { + "sampler" : 71, + "target" : { + "node" : 16, + "path" : "scale" + } + }, + { + "sampler" : 72, + "target" : { + "node" : 15, + "path" : "translation" + } + }, + { + "sampler" : 73, + "target" : { + "node" : 15, + "path" : "rotation" + } + }, + { + "sampler" : 74, + "target" : { + "node" : 15, + "path" : "scale" + } + }, + { + "sampler" : 75, + "target" : { + "node" : 23, + "path" : "translation" + } + }, + { + "sampler" : 76, + "target" : { + "node" : 23, + "path" : "rotation" + } + }, + { + "sampler" : 77, + "target" : { + "node" : 23, + "path" : "scale" + } + }, + { + "sampler" : 78, + "target" : { + "node" : 22, + "path" : "translation" + } + }, + { + "sampler" : 79, + "target" : { + "node" : 22, + "path" : "rotation" + } + }, + { + "sampler" : 80, + "target" : { + "node" : 22, + "path" : "scale" + } + }, + { + "sampler" : 81, + "target" : { + "node" : 21, + "path" : "translation" + } + }, + { + "sampler" : 82, + "target" : { + "node" : 21, + "path" : "rotation" + } + }, + { + "sampler" : 83, + "target" : { + "node" : 21, + "path" : "scale" + } + }, + { + "sampler" : 84, + "target" : { + "node" : 26, + "path" : "translation" + } + }, + { + "sampler" : 85, + "target" : { + "node" : 26, + "path" : "rotation" + } + }, + { + "sampler" : 86, + "target" : { + "node" : 26, + "path" : "scale" + } + }, + { + "sampler" : 87, + "target" : { + "node" : 25, + "path" : "translation" + } + }, + { + "sampler" : 88, + "target" : { + "node" : 25, + "path" : "rotation" + } + }, + { + "sampler" : 89, + "target" : { + "node" : 25, + "path" : "scale" + } + }, + { + "sampler" : 90, + "target" : { + "node" : 24, + "path" : "translation" + } + }, + { + "sampler" : 91, + "target" : { + "node" : 24, + "path" : "rotation" + } + }, + { + "sampler" : 92, + "target" : { + "node" : 24, + "path" : "scale" + } + }, + { + "sampler" : 93, + "target" : { + "node" : 30, + "path" : "translation" + } + }, + { + "sampler" : 94, + "target" : { + "node" : 30, + "path" : "rotation" + } + }, + { + "sampler" : 95, + "target" : { + "node" : 30, + "path" : "scale" + } + }, + { + "sampler" : 96, + "target" : { + "node" : 29, + "path" : "translation" + } + }, + { + "sampler" : 97, + "target" : { + "node" : 29, + "path" : "rotation" + } + }, + { + "sampler" : 98, + "target" : { + "node" : 29, + "path" : "scale" + } + }, + { + "sampler" : 99, + "target" : { + "node" : 32, + "path" : "translation" + } + }, + { + "sampler" : 100, + "target" : { + "node" : 32, + "path" : "rotation" + } + }, + { + "sampler" : 101, + "target" : { + "node" : 32, + "path" : "scale" + } + }, + { + "sampler" : 102, + "target" : { + "node" : 31, + "path" : "translation" + } + }, + { + "sampler" : 103, + "target" : { + "node" : 31, + "path" : "rotation" + } + }, + { + "sampler" : 104, + "target" : { + "node" : 31, + "path" : "scale" + } + }, + { + "sampler" : 105, + "target" : { + "node" : 34, + "path" : "translation" + } + }, + { + "sampler" : 106, + "target" : { + "node" : 34, + "path" : "rotation" + } + }, + { + "sampler" : 107, + "target" : { + "node" : 34, + "path" : "scale" + } + }, + { + "sampler" : 108, + "target" : { + "node" : 33, + "path" : "translation" + } + }, + { + "sampler" : 109, + "target" : { + "node" : 33, + "path" : "rotation" + } + }, + { + "sampler" : 110, + "target" : { + "node" : 33, + "path" : "scale" + } + }, + { + "sampler" : 111, + "target" : { + "node" : 40, + "path" : "translation" + } + }, + { + "sampler" : 112, + "target" : { + "node" : 40, + "path" : "rotation" + } + }, + { + "sampler" : 113, + "target" : { + "node" : 40, + "path" : "scale" + } + }, + { + "sampler" : 114, + "target" : { + "node" : 39, + "path" : "translation" + } + }, + { + "sampler" : 115, + "target" : { + "node" : 39, + "path" : "rotation" + } + }, + { + "sampler" : 116, + "target" : { + "node" : 39, + "path" : "scale" + } + }, + { + "sampler" : 117, + "target" : { + "node" : 38, + "path" : "translation" + } + }, + { + "sampler" : 118, + "target" : { + "node" : 38, + "path" : "rotation" + } + }, + { + "sampler" : 119, + "target" : { + "node" : 38, + "path" : "scale" + } + }, + { + "sampler" : 120, + "target" : { + "node" : 37, + "path" : "translation" + } + }, + { + "sampler" : 121, + "target" : { + "node" : 37, + "path" : "rotation" + } + }, + { + "sampler" : 122, + "target" : { + "node" : 37, + "path" : "scale" + } + }, + { + "sampler" : 123, + "target" : { + "node" : 36, + "path" : "translation" + } + }, + { + "sampler" : 124, + "target" : { + "node" : 36, + "path" : "rotation" + } + }, + { + "sampler" : 125, + "target" : { + "node" : 36, + "path" : "scale" + } + }, + { + "sampler" : 126, + "target" : { + "node" : 35, + "path" : "translation" + } + }, + { + "sampler" : 127, + "target" : { + "node" : 35, + "path" : "rotation" + } + }, + { + "sampler" : 128, + "target" : { + "node" : 35, + "path" : "scale" + } + }, + { + "sampler" : 129, + "target" : { + "node" : 42, + "path" : "translation" + } + }, + { + "sampler" : 130, + "target" : { + "node" : 42, + "path" : "rotation" + } + }, + { + "sampler" : 131, + "target" : { + "node" : 42, + "path" : "scale" + } + }, + { + "sampler" : 132, + "target" : { + "node" : 41, + "path" : "translation" + } + }, + { + "sampler" : 133, + "target" : { + "node" : 41, + "path" : "rotation" + } + }, + { + "sampler" : 134, + "target" : { + "node" : 41, + "path" : "scale" + } + }, + { + "sampler" : 135, + "target" : { + "node" : 44, + "path" : "translation" + } + }, + { + "sampler" : 136, + "target" : { + "node" : 44, + "path" : "rotation" + } + }, + { + "sampler" : 137, + "target" : { + "node" : 44, + "path" : "scale" + } + }, + { + "sampler" : 138, + "target" : { + "node" : 43, + "path" : "translation" + } + }, + { + "sampler" : 139, + "target" : { + "node" : 43, + "path" : "rotation" + } + }, + { + "sampler" : 140, + "target" : { + "node" : 43, + "path" : "scale" + } + }, + { + "sampler" : 141, + "target" : { + "node" : 48, + "path" : "translation" + } + }, + { + "sampler" : 142, + "target" : { + "node" : 48, + "path" : "rotation" + } + }, + { + "sampler" : 143, + "target" : { + "node" : 48, + "path" : "scale" + } + }, + { + "sampler" : 144, + "target" : { + "node" : 47, + "path" : "translation" + } + }, + { + "sampler" : 145, + "target" : { + "node" : 47, + "path" : "rotation" + } + }, + { + "sampler" : 146, + "target" : { + "node" : 47, + "path" : "scale" + } + }, + { + "sampler" : 147, + "target" : { + "node" : 46, + "path" : "translation" + } + }, + { + "sampler" : 148, + "target" : { + "node" : 46, + "path" : "rotation" + } + }, + { + "sampler" : 149, + "target" : { + "node" : 46, + "path" : "scale" + } + }, + { + "sampler" : 150, + "target" : { + "node" : 51, + "path" : "translation" + } + }, + { + "sampler" : 151, + "target" : { + "node" : 51, + "path" : "rotation" + } + }, + { + "sampler" : 152, + "target" : { + "node" : 51, + "path" : "scale" + } + }, + { + "sampler" : 153, + "target" : { + "node" : 50, + "path" : "translation" + } + }, + { + "sampler" : 154, + "target" : { + "node" : 50, + "path" : "rotation" + } + }, + { + "sampler" : 155, + "target" : { + "node" : 50, + "path" : "scale" + } + }, + { + "sampler" : 156, + "target" : { + "node" : 49, + "path" : "translation" + } + }, + { + "sampler" : 157, + "target" : { + "node" : 49, + "path" : "rotation" + } + }, + { + "sampler" : 158, + "target" : { + "node" : 49, + "path" : "scale" + } + }, + { + "sampler" : 159, + "target" : { + "node" : 55, + "path" : "translation" + } + }, + { + "sampler" : 160, + "target" : { + "node" : 55, + "path" : "rotation" + } + }, + { + "sampler" : 161, + "target" : { + "node" : 55, + "path" : "scale" + } + } + ], + "name" : "Armature|Armature|ArmatureAction", + "samplers" : [ + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 15 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 16 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 17 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 18 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 19 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 20 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 21 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 22 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 23 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 24 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 25 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 26 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 27 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 28 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 29 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 30 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 31 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 32 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 33 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 34 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 35 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 36 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 37 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 38 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 39 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 40 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 41 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 42 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 43 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 44 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 45 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 46 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 47 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 48 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 49 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 50 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 51 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 52 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 53 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 54 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 55 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 56 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 57 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 58 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 59 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 60 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 61 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 62 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 63 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 64 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 65 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 66 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 67 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 68 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 69 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 70 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 71 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 72 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 73 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 74 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 75 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 76 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 77 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 78 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 79 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 80 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 81 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 82 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 83 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 84 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 85 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 86 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 87 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 88 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 89 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 90 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 91 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 92 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 93 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 94 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 95 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 96 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 97 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 98 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 99 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 100 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 101 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 102 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 103 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 104 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 105 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 106 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 107 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 108 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 109 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 110 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 111 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 112 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 113 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 114 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 115 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 116 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 117 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 118 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 119 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 120 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 121 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 122 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 123 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 124 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 125 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 126 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 127 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 128 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 129 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 130 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 131 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 132 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 133 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 134 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 135 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 136 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 137 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 138 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 139 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 140 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 141 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 142 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 143 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 144 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 145 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 146 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 147 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 148 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 149 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 150 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 151 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 152 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 153 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 154 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 155 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 156 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 157 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 158 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 159 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 160 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 161 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 162 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 163 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 164 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 165 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 166 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 167 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 168 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 169 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 170 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 171 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 172 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 173 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 174 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 175 + }, + { + "input" : 14, + "interpolation" : "LINEAR", + "output" : 176 + } + ] + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "BagMaterial", + "pbrMetallicRoughness" : { + "baseColorFactor" : [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + }, + { + "alphaMode" : "BLEND", + "doubleSided" : true, + "extensions" : { + "KHR_materials_specular" : { + "specularColorFactor" : [ + 0, + 0, + 0 + ] + }, + "KHR_materials_ior" : { + "ior" : 1.4500000476837158 + } + }, + "name" : "BodyMaterial", + "pbrMetallicRoughness" : { + "baseColorFactor" : [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "metallicFactor" : 0 + } + } + ], + "meshes" : [ + { + "name" : "Cube.003", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2, + "JOINTS_0" : 3, + "WEIGHTS_0" : 4 + }, + "indices" : 5, + "material" : 0 + } + ] + }, + { + "name" : "Cube.012", + "primitives" : [ + { + "attributes" : { + "POSITION" : 7, + "NORMAL" : 8, + "TEXCOORD_0" : 9, + "COLOR_0" : 10, + "JOINTS_0" : 11, + "WEIGHTS_0" : 12 + }, + "indices" : 13, + "material" : 1 + } + ] + } + ], + "skins" : [ + { + "inverseBindMatrices" : 6, + "joints" : [ + 52, + 45, + 5, + 4, + 3, + 2, + 1, + 0, + 28, + 27, + 8, + 7, + 6, + 14, + 13, + 12, + 11, + 10, + 9, + 20, + 19, + 18, + 17, + 16, + 15, + 23, + 22, + 21, + 26, + 25, + 24, + 30, + 29, + 32, + 31, + 34, + 33, + 40, + 39, + 38, + 37, + 36, + 35, + 42, + 41, + 44, + 43, + 48, + 47, + 46, + 51, + 50, + 49 + ], + "name" : "Armature" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 506, + "max" : [ + 0.1090814545750618, + 0.40452075004577637, + 0.0857388824224472 + ], + "min" : [ + -0.09462108463048935, + 0.2630254030227661, + -0.11617939174175262 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 506, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 506, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5121, + "count" : 506, + "type" : "VEC4" + }, + { + "bufferView" : 4, + "componentType" : 5126, + "count" : 506, + "type" : "VEC4" + }, + { + "bufferView" : 5, + "componentType" : 5123, + "count" : 2346, + "type" : "SCALAR" + }, + { + "bufferView" : 6, + "componentType" : 5126, + "count" : 53, + "type" : "MAT4" + }, + { + "bufferView" : 7, + "componentType" : 5126, + "count" : 3484, + "max" : [ + 0.2035536766052246, + 0.5987313389778137, + 0.09013944119215012 + ], + "min" : [ + -0.19493983685970306, + -0.0017474208725616336, + -0.19020147621631622 + ], + "type" : "VEC3" + }, + { + "bufferView" : 8, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC3" + }, + { + "bufferView" : 9, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC2" + }, + { + "bufferView" : 10, + "componentType" : 5123, + "count" : 3484, + "normalized" : true, + "type" : "VEC4" + }, + { + "bufferView" : 11, + "componentType" : 5121, + "count" : 3484, + "type" : "VEC4" + }, + { + "bufferView" : 12, + "componentType" : 5126, + "count" : 3484, + "type" : "VEC4" + }, + { + "bufferView" : 13, + "componentType" : 5123, + "count" : 17472, + "type" : "SCALAR" + }, + { + "bufferView" : 14, + "componentType" : 5126, + "count" : 51, + "max" : [ + 2.125 + ], + "min" : [ + 0.041666666666666664 + ], + "type" : "SCALAR" + }, + { + "bufferView" : 15, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 16, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 17, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 18, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 19, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 20, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 21, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 22, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 23, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 24, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 25, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 26, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 27, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 28, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 29, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 30, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 31, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 32, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 33, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 34, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 35, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 36, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 37, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 38, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 39, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 40, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 41, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 42, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 43, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 44, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 45, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 46, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 47, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 48, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 49, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 50, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 51, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 52, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 53, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 54, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 55, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 56, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 57, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 58, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 59, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 60, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 61, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 62, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 63, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 64, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 65, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 66, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 67, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 68, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 69, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 70, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 71, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 72, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 73, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 74, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 75, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 76, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 77, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 78, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 79, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 80, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 81, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 82, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 83, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 84, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 85, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 86, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 87, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 88, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 89, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 90, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 91, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 92, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 93, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 94, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 95, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 96, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 97, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 98, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 99, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 100, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 101, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 102, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 103, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 104, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 105, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 106, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 107, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 108, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 109, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 110, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 111, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 112, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 113, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 114, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 115, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 116, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 117, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 118, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 119, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 120, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 121, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 122, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 123, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 124, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 125, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 126, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 127, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 128, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 129, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 130, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 131, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 132, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 133, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 134, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 135, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 136, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 137, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 138, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 139, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 140, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 141, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 142, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 143, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 144, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 145, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 146, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 147, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 148, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 149, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 150, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 151, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 152, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 153, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 154, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 155, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 156, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 157, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 158, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 159, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 160, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 161, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 162, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 163, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 164, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 165, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 166, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 167, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 168, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 169, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 170, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 171, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 172, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 173, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 174, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + }, + { + "bufferView" : 175, + "componentType" : 5126, + "count" : 51, + "type" : "VEC4" + }, + { + "bufferView" : 176, + "componentType" : 5126, + "count" : 51, + "type" : "VEC3" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 6072, + "byteOffset" : 0, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 6072, + "byteOffset" : 6072, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4048, + "byteOffset" : 12144, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2024, + "byteOffset" : 16192, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 8096, + "byteOffset" : 18216, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4692, + "byteOffset" : 26312, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 3392, + "byteOffset" : 31004 + }, + { + "buffer" : 0, + "byteLength" : 41808, + "byteOffset" : 34396, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 41808, + "byteOffset" : 76204, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 27872, + "byteOffset" : 118012, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 27872, + "byteOffset" : 145884, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 13936, + "byteOffset" : 173756, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 55744, + "byteOffset" : 187692, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 34944, + "byteOffset" : 243436, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 204, + "byteOffset" : 278380 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 278584 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 279196 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 280012 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 280624 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 281236 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 282052 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 282664 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 283276 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 284092 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 284704 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 285316 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 286132 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 286744 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 287356 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 288172 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 288784 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 289396 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 290212 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 290824 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 291436 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 292252 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 292864 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 293476 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 294292 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 294904 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 295516 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 296332 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 296944 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 297556 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 298372 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 298984 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 299596 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 300412 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 301024 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 301636 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 302452 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 303064 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 303676 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 304492 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 305104 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 305716 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 306532 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 307144 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 307756 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 308572 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 309184 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 309796 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 310612 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 311224 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 311836 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 312652 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 313264 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 313876 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 314692 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 315304 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 315916 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 316732 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 317344 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 317956 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 318772 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 319384 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 319996 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 320812 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 321424 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 322036 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 322852 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 323464 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 324076 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 324892 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 325504 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 326116 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 326932 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 327544 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 328156 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 328972 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 329584 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 330196 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 331012 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 331624 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 332236 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 333052 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 333664 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 334276 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 335092 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 335704 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 336316 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 337132 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 337744 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 338356 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 339172 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 339784 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 340396 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 341212 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 341824 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 342436 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 343252 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 343864 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 344476 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 345292 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 345904 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 346516 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 347332 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 347944 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 348556 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 349372 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 349984 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 350596 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 351412 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 352024 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 352636 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 353452 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 354064 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 354676 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 355492 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 356104 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 356716 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 357532 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 358144 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 358756 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 359572 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 360184 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 360796 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 361612 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 362224 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 362836 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 363652 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 364264 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 364876 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 365692 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 366304 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 366916 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 367732 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 368344 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 368956 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 369772 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 370384 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 370996 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 371812 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 372424 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 373036 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 373852 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 374464 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 375076 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 375892 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 376504 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 377116 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 377932 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 378544 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 379156 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 379972 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 380584 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 381196 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 382012 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 382624 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 383236 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 384052 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 384664 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 385276 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 386092 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 386704 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 387316 + }, + { + "buffer" : 0, + "byteLength" : 612, + "byteOffset" : 388132 + } + ], + "buffers" : [ + { + "byteLength" : 388744, + "uri" : "data:application/octet-stream;base64,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CQgAAAkIAAAJCAAACQgAAAkVCAAJFQgACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkAAAAJCAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAgJExQJCBMUCAkTAAkIEwAICRMACQgTAAgJEwAJCBMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICQAACAkAAAgJAAAICQAACAkTAAgJEwAJCAAACAkAAAkIAAAJCAAACQgAAAkIAAAJCBMACQgTAAkAAAAJAAAACRMAAAkAAAAJEwgUCRMIFAkTFAgJExQICRMUCBMJFAgTFAkAExQJABMUCQATFAkAExQJABMUCQATFAAAFBMAABMUAAAUEwAAExQAABMUAAATFAAAExQJABMUCQgTFAkIEwgUCQkTCBQIEwkUCQgTFAgTCRQJCBMUCAkTFAkIExQICRMACQgTAAkIExQJCBMACAkTAAkIEwAJCBMACAkTAAkIEwAICRMACAkTAAkIEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkAAAgJAAAICQAACAkAAAgJAAAICQAACAkAAAgJAAAICQAACAkTAAgJAAAJCAAACQgTAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIEwAJCBMACQgTAAkIEwAJAAAACQAAAAkAAAAJAAAACQAAAAkTCBQJEwgUCRMIFAkTCBQJExQICRMUCAkTFAgTCRQIExQJABMUCQATFAkAExQJABMUCQATFAkAExQJABMUCQATFAkAExQAABQTAAAUEwAAExQAABQTAAAUEwAAExQAABQTAAATFAAAExQAABQTAAATFAAAExQJCBMUCQATFAkIExQICRMJFAgTCQgUEwgJFAkTCBQJCBMUCBMJFAkIExQJCBMUCAkTFAkIExQJCBMUCAkTFAkIExQJCBMACQgTAAkIEwAICRMACAkTAAkIEwAICRMACAkAAAgJAAAICQAACAkAAAkIAAAJCAAACQgAAAkIAAAJAAAACRMIFAkTCBQJExQIExQJABMUCQATFAkAExQAABQTAAAUEwAAFBMAABMUCQATCRQICRMIFAkIExQJCBMUCQgTFAgJExQJCBMUCAkTAAkIEwAICRMACQgTAAkIEwAJCBMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICQAACAkAAAgJAAAICQAACAkTAAgJEwAICRMACAkTAAkIEwAJCBMACQgAAAkIEwAJCBMACQgTAAkTCAAJEwgUCRMIAAkTCBQJEwgUCRMIFAkTFAgTCRQIEwkUCBMJFAgTFAkAExQJABMUCQATFAkAExQJABMUCQATFAAAFBMAABMUAAAUEwAAExQAABMUAAATFAAAExQAABMUCQATFAkAExQJCAkTFAgTCRQICRMIFBMJCBQJCBMUCAkTFAkIExQICRMACQgTAAkIEwAJCBMACQgTAAkIEwAJCBMACQgTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJAAAICQAACAkAAAgJAAAICQAACAkAAAgJEwAICRMACQgTAAkIEwAJCAAACQgTAAkIAAAJCBMACQgTAAkIEwAJEwgACRMIFAkAAAAJEwgUCRMIFAkTCBQJExQIEwkUCBMUCQATFAkAExQJABMUCQATFAkAExQJABMUAAAUEwAA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XwAVAF8ALQAXACMAbgAXAG4AZQAvABcAZQAvAGUAaQAtAF8APwAtAD8AFAAjABcAVgAjAFYAVwAWAC4AWAAWAFgAWQAvABYAWQAvAFkAWgAXAC8AWgAXAFoAVgBbAEIAXABbAFwAPwBCACMAVwBCAFcAXAAuAFQAXQAuAF0AWABUAF4APgBUAD4AXQBeAFUAXwBeAF8APgBVAFsAPwBVAD8AXwBiAHYAgQBiAIEAeQBkAG0AfgBkAH4AegBoAGQAegBoAHoAfAB3AHEAfwB3AH8AgQAuABYAYQAuAGEAbwBVAF4AYwBVAGMAawAjAEIAdAAjAHQAbgAWAC8AaQAWAGkAYQBbAFUAawBbAGsAZwBUAC4AbwBUAG8AdQB7AHoAfgB7AH4AgACBAH8AeACBAHgAeQB5AHgAfAB5AHwAfQB9AHwAegB9AHoAewBzAGYAewBzAHsAgABwAGAAeABwAHgAfwBqAGIAeQBqAHkAfQBsAHIAgABsAIAAfgBgAGgAfABgAHwAeABmAGoAfQBmAH0AewAhAA8AhAAhAIQAiwAOACEAiwAOAIsAggAcAIkAhQAcAIUADADmAfYBigDmAYoAHQBIAIcAgwBIAIMAKwDxAfcBiADxAYgASQAwAEUAhgAwAIYAhQBFACsAgwBFAIMAhgApABEAjwApAI8AlQAQACkAlQAQAJUAjQAnAJMAjwAnAI8AEQDpAfgBlADpAZQAKABGAJEAjQBGAI0AKgDwAfkBkgDwAZIARwAsAFwAkAAsAJAAjgBcAFcAjABcAIwAkACWANgANgGWADYB1gDYAJcA1wDYANcANgE2AdcAmQA2AZkA2QDWADYB2QDWANkAmACYANkANwGYADcB2gDZAJkA2wDZANsANwE3AdsAmwA3AZsA3ADaADcB3ADaANwAmgCaANwAOAGaADgB3QDcAJsA3gDcAN4AOAE4Ad4AnQA4AZ0A3wDdADgB3wDdAN8AnACcAN8AOQGcADkB4ADfAJ0A4QDfAOEAOQE5AeEAnwA5AZ8A4gDgADkB4gDgAOIAngCeAOIAOgGeADoB4wDiAJ8A5ADiAOQAOgE6AeQAoQA6AaEA5QDjADoB5QDjAOUAoACgAOUAOwGgADsB5gDlAKEA5wDlAOcAOwE7AecAowA7AaMA6ADmADsB6ADmAOgAogCiAOgAPAGiADwB6QDoAKMA6gDoAOoAPAE8AeoApQA8AaUA6wDpADwB6wDpAOsApACkAOsAPQGkAD0B7ADrAKUA7QDrAO0APQE9Ae0ApwA9AacA7gDsAD0B7gDsAO4ApgCmAO4APgGmAD4B7wDuAKcA8ADuAPAAPgE+AfAAqQA+AakA8QDvAD4B8QDvAPEAqACoAPEAPwGoAD8B8gDxAKkA8wDxAPMAPwE/AfMAqwA/AasA9ADyAD8B9ADyAPQAqgCqAPQAQAGqAEAB9QD0AKsA9gD0APYAQAFAAfYArQBAAa0A9wD1AEAB9wD1APcArACsAPcAQQGsAEEB+AD3AK0A+QD3APkAQQFBAfkArwBBAa8A+gD4AEEB+gD4APoArgCuAPoAQgGuAEIB+wD6AK8A/AD6APwAQgFCAfwAsQBCAbEA/QD7AEIB/QD7AP0AsACwAP0AQwGwAEMB/gD9ALEA/wD9AP8AQwFDAf8AswBDAbMAAAH+AEMBAAH+AAABsgCyAAABRAGyAEQBAQEAAbMAAgEAAQIBRAFEAQIBtQBEAbUAAwEBAUQBAwEBAQMBtAC0AAMBRQG0AEUBBAEDAbUABQEDAQUBRQFFAQUBtwBFAbcABgEEAUUBBgEEAQYBtgC2AAYBRgG2AEYBBwEGAbcACAEGAQgBRgFGAQgBuQBGAbkACQEHAUYBCQEHAQkBuAC4AAkBRwG4AEcBCgEJAbkACwEJAQsBRwFHAQsBuwBHAbsADAEKAUcBDAEKAQwBugC6AAwBSAG6AEgBDQEMAbsADgEMAQ4BSAFIAQ4BvQBIAb0ADwENAUgBDwENAQ8BvAC8AA8BSQG8AEkBEAEPAb0AEQEPAREBSQFJAREBvwBJAb8AEgEQAUkBEgEQARIBvgC+ABIBSgG+AEoBEwESAb8AFAESARQBSgFKARQBwQBKAcEAFQETAUoBFQETARUBwADAABUBSwHAAEsBFgEVAcEAFwEVARcBSwFLARcBwwBLAcMAGAEWAUsBGAEWARgBwgDCABgBTAHCAEwBGQEYAcMAGgEYARoBTAFMARoBxQBMAcUAGwEZAUwBGwEZARsBxADEABsBTQHEAE0BHAEbAcUAHQEbAR0BTQFNAR0BxwBNAccAHgEcAU0BHgEcAR4BxgDGAB4BTgHGAE4BHwEeAccAIAEeASABTgFOASAByQBOAckAIQEfAU4BIQEfASEByADIACEBTwHIAE8BIgEhAckAIwEhASMBTwFPASMBywBPAcsAJAEiAU8BJAEiASQBygDKACQBUAHKAFABJQEkAcsAJgEkASYBUAFQASYBzQBQAc0AJwElAVABJwElAScBzADMACcBUQHMAFEBKAEnAc0AKQEnASkBUQFRASkBzwBRAc8AKgEoAVEBKgEoASoBzgDOACoBUgHOAFIBKwEqAc8ALAEqASwBUgFSASwB0QBSAdEALQErAVIBLQErAS0B0ADQAC0BUwHQAFMBLgEtAdEALwEtAS8BUwFTAS8B0wBTAdMAMAEuAVMBMAEuATAB0gDSADABVAHSAFQBMQEwAdMAMgEwATIBVAFUATIB1QBUAdUAMwExAVQBMwExATMB1ADUADMBVQHUAFUBNAEzAdUANQEzATUBVQFVATUBlwBVAZcA2AA0AVUB2AA0AdgAlgCWANYAlgGWAJYBVgHWAJgAWAHWAFgBlgGZANcAlwGZAJcBWQHXAJcAVwHXAFcBlwGYANoAmAGYAJgBWAHaAJoAWgHaAFoBmAGbANsAmQGbAJkBWwHbAJkAWQHbAFkBmQGaAN0AmgGaAJoBWgHdAJwAXAHdAFwBmgGdAN4AmwGdAJsBXQHeAJsAWwHeAFsBmwGcAOAAnAGcAJwBXAHgAJ4AXgHgAF4BnAGfAOEAnQGfAJ0BXwHhAJ0AXQHhAF0BnQGeAOMAngGeAJ4BXgHjAKAAYAHjAGABngGhAOQAnwGhAJ8BYQHkAJ8AXwHkAF8BnwGgAOYAoAGgAKABYAHmAKIAYgHmAGIBoAGjAOcAoQGjAKEBYwHnAKEAYQHnAGEBoQGiAOkAogGiAKIBYgHpAKQAZAHpAGQBogGlAOoAowGlAKMBZQHqAKMAYwHqAGMBowGkAOwApAGkAKQBZAHsAKYAZgHsAGYBpAGnAO0ApQGnAKUBZwHtAKUAZQHtAGUBpQGmAO8ApgGmAKYBZgHvAKgAaAHvAGgBpgGpAPAApwGpAKcBaQHwAKcAZwHwAGcBpwGoAPIAqAGoAKgBaAHyAKoAagHyAGoBqAGrAPMAqQGrAKkBawHzAKkAaQHzAGkBqQGqAPUAqgGqAKoBagH1AKwAbAH1AGwBqgGtAPYAqwGtAKsBbQH2AKsAawH2AGsBqwGsAPgArAGsAKwBbAH4AK4AbgH4AG4BrAGvAPkArQGvAK0BbwH5AK0AbQH5AG0BrQGuAPsArgGuAK4BbgH7ALAAcAH7AHABrgGxAPwArwGxAK8BcQH8AK8AbwH8AG8BrwGwAP4AsAGwALABcAH+ALIAcgH+AHIBsAGzAP8AsQGzALEBcwH/ALEAcQH/AHEBsQGyAAEBsgGyALIBcgEBAbQAdAEBAXQBsgG1AAIBswG1ALMBdQECAbMAcwECAXMBswG0AAQBtAG0ALQBdAEEAbYAdgEEAXYBtAG3AAUBtQG3ALUBdwEFAbUAdQEFAXUBtQG2AAcBtgG2ALYBdgEHAbgAeAEHAXgBtgG5AAgBtwG5ALcBeQEIAbcAdwEIAXcBtwG4AAoBuAG4ALgBeAEKAboAegEKAXoBuAG7AAsBuQG7ALkBewELAbkAeQELAXkBuQG6AA0BugG6ALoBegENAbwAfAENAXwBugG9AA4BuwG9ALsBfQEOAbsAewEOAXsBuwG8ABABvAG8ALwBfAEQAb4AfgEQAX4BvAG/ABEBvQG/AL0BfwERAb0AfQERAX0BvQG+ABMBvgG+AL4BfgETAcAAgAETAYABvgHBABQBvwHBAL8BgQEUAb8AfwEUAX8BvwHAABYBwAHAAMABgAEWAcIAggEWAYIBwAHDABcBwQHDAMEBgwEXAcEAgQEXAYEBwQHCABkBwgHCAMIBggEZAcQAhAEZAYQBwgHFABoBwwHFAMMBhQEaAcMAgwEaAYMBwwHEABwBxAHEAMQBhAEcAcYAhgEcAYYBxAHHAB0BxQHHAMUBhwEdAcUAhQEdAYUBxQHGAB8BxgHGAMYBhgEfAcgAiAEfAYgBxgHJACABxwHJAMcBiQEgAccAhwEgAYcBxwHIACIByAHIAMgBiAEiAcoAigEiAYoByAHLACMByQHLAMkBiwEjAckAiQEjAYkByQHKACUBygHKAMoBigElAcwAjAElAYwBygHNACYBywHNAMsBjQEmAcsAiwEmAYsBywHMACgBzAHMAMwBjAEoAc4AjgEoAY4BzAHPACkBzQHPAM0BjwEpAc0AjQEpAY0BzQHOACsBzgHOAM4BjgErAdAAkAErAZABzgHRACwBzwHRAM8BkQEsAc8AjwEsAY8BzwHQAC4B0AHQANABkAEuAdIAkgEuAZIB0AHTAC8B0QHTANEBkwEvAdEAkQEvAZEB0QHSADEB0gHSANIBkgExAdQAlAExAZQB0gHVADIB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x6buul52vb1wdoc9CbY+vELSt72/bxY9Khviu15Bsb1LPYc9ALqjvCWFsL0eLhY9Fg82vDe8nL2BsoY90O22vAZIpb1ryxU9lClCvA03iL23J4Y9niHKvOcKmr27aBU9E0ROvEI7d735CIU9uc6CvBEgkr1WJhU95cYMvHh/b71JSoQ9+I0Aunh/b71JSoQ9+I0Auro5j73JuhQ9lBU0u7o5j73JuhQ9lBU0u7MFgL2onXQ9OccRPJYHkr1U9xM9gHFKO54HXL3+oao9D/JwPJe+WL3yabM9w/yWPBYxlb17UgM9ZsoWO8zAmb22WBM99obrO9wxnL0IFwM9oOy/OzDanb2acO48DnisO+vtpb3GjQM96aa7O/mpr72FBAQ9MWG3O+G5pr1nfO88mL+rO5SZr70yiPA8JAerO35Jp71zW9Q8jATgO35Jp71zW9Q8jATgO/YEn70ZONM8kKPeO/YEn70ZONM8kKPeOweOr73NftU8i2XhOweOr73NftU8i2XhO0aMp72Z94A8kiurPKmIr71pLII8EjCrPOWPn72MhX88DyerPEWMp73t0Wo8U1q/POOPn738cGg8Llq/PKmIr73cMm08eFq/PEWMp73HkVQ8XH3VPKmIr73x61Y8UH3VPOOPn72fN1I8ZX3VPEWMp72DLu07UbMbPeOPn73gg+g7RbMbPamIr70j2fE7XLMbPUWMp72ZXNo7ar4gPamIr72rBt87ar4gPeOPn72HstU7Z74gPUWMp70pAMg7Ht4lPamIr70Aqsw7Gd4lPeOPn71SVsM7I94lPUWMp72gYis7krNGPeOPn73RDyI7lbNGPamIr71utTQ7j7NGPUWMp72VTKg4t1ZTPeOPn73rDIK4uFZTPamIr70SU2k5tFZTPUWMp71mfZK6RrtGPUWMp71mfZK6RrtGPeOPn738IqW6SbtGPeOPn738IqW6SbtGPamIr72er3+6QrtGPamIr72er3+6QrtGPUaMp71ExsK6oeAlPeOPn73ia9W6neAlPaqIr72oILC6peAlPUaMp72lZci6TakgPeOPn708C9u6SqkgPaqIr70OwLW6UakgPUaMp73HLsu6v2gbPaqIr70xibi6xWgbPeOPn71a1N26uGgbPUaMp70WZNK6fDvVPOOPn72sCeW6DzrVPKqIr71/vr+65zzVPEaMp70bZNK6/Vy+PKqIr72Gvr+65l++POOPn72xCeW6Flq+PEaMp70gZNK67z6pPOOPn723CeW6kTapPKqIr72Jvr+6S0epPLKJp714ntK6PILoO4Qdob3Ft+C68gvmO+H1rb0rhcS6iPjqO2GEp72pWKm6kkWNO0HQnb2jALy628eHO4I4sb2xsJa6SsOSO2mSp73dtc06gskvudXztL3FOOQ6TNkrOdXztL3FOOQ6TNkrOfwwmr3yMrc6GNsCuvwwmr3yMrc6GNsCuqLkp70ye1o70y/ou9mlsb0vz2M7nX7fu9mlsb0vz2M7nX7fu2sjnr00J1E7COHwu2sjnr00J1E7COHwu7AiqL1BALM7RtwlvLAiqL1BALM7RtwlvEWnob3tea87A4sovEWnob3tea87A4sovB2err2XhrY7iC0jvB2err2XhrY7iC0jvCcqqL0kQFQ8fgIkvAkEsL2oeVY8f9IgvEdQoL2kBlI8fTInvC/wp73OeLs8wqEXvC/wp73OeLs8wqEXvEaRn73lV7o8fJ8bvEaRn73lV7o8fJ8bvBdPsL26mbw8CKQTvBdPsL26mbw8CKQTvHRZp72yi+08f00avNJXnr0Sf+w8eRcgvBRbsL1TmO48hYMUvF6Dpr0HwQQ9hKYpvBZssL3xOAU95U4hvKmanL0dSQQ9JP4xvPVflb0hAgQ9n/D1u2+ckr2EvAM9YNwsu2+ckr2EvAM9YNwsuzqPl71b/Os8FdrduyADmb0x37k8Ss3RuyADmb0x37k8Ss3Ru/HSlL0dXuw8JVcZu/HSlL0dXuw8JVcZu1i6lb1m1Lk8hhODuVi6lb1m1Lk8hhODuVi6lb1m1Lk8hhODuSpRl73k5O08OqUJO865mL2KB9A8w5uJO865mL2KB9A8w5uJOxpSmb0cFHY8APqpPBpSmb0NbWA8AfS+PJxslb3GuUo8hcmoPJxslb0YEzk8r46+PBMclL25xNk7QEeoPBMclL3xD8U7hmW+PAQHlr1VYT080vglup1slb2g/4A6HV+oPJ1slb2g/4A6HV+oPJxslb0/HUs6NWG+PJxslb0/HUs6NWG+PBlSmb1JeMC6j8moPBpSmb1k5sO6E16+PBlSmb3rR8e6IurUPJ1slb2WBBU6tJbUPJ1slb2WBBU6tJbUPKtYmb0OGM+62WobPT1amb3YVs26gKggPVePlb1byqG543AbPVePlb1byqG543AbPdmflb2Xw865P6ggPdmflb2Xw865P6ggPQpLlL0/VCw703cbPf5klL109Bc72aYgPWSPlb13drg7DoMbPRMclL3grbA7OHHUPJxslb0dyCc8wZXUPBpSmb0tZks8zgfVPLFYmb2uveA7JaYbPTlamb29ds07c7EgPfVcmb3HUrk7E78lPZGflb0MFqc7B6UgPXTBlb0kmpM7ubclPZuclL3P5QE7K8klPfhMlr2zFyk7ntc0PS1vmb2b2B87GnI/PXq5lb0Bty06asA4PfhMlr0LKy66otw0PfhMlr0LKy66otw0PaVgmb12zAu4J51KPS1vmb17MaC6VHg/PS1vmb17MaC6VHg/PQldmb326ce6z9slPXbClb007fW55dQlPXbClb007fW55dQlPcAXmr0EbUs8AR/guxMKt72/eQU9qjrLu74/ub1VWQU98NDhur4/ub1VWQU98NDhugmItr0DK+88NMa7u8q0uL3wzu88Yu27usq0uL3wzu88Yu27ugJDtr3BPL08iMO1uwJDtr3BPL08iMO1uwsGub3nhL0802slOgsGub3nhL0802slOgsGub3nhL0802slOoaltb0UCFI8YnjHu7seub3FskQ8vR+EOYTLur3IuOk7iJqoPIXLur13mdQ7eXe+PLeCub2MhL06TKWoPLeCub2MhL06TKWoPLWCub1jz1I8UxOpPLWCub3r3kA8fZ6+PNextb3mcn08mCKqPNextb2Ul2c8kPu+PDvLtb3ActM8B0iYOzvLtb3ActM8B0iYO5cOtr0FE/E8GGciOxKNtr0NyAQ96twiO9extb39Z1I8gQrVPLWCub1tWi8825vUPGartb3xhu47XqYbPemptb3jO9s7erEgPblgub2fRsc7LIMbPetQub1c3bU7F6UgPaWdur3BQUo79XcbPUqEur2E0TU75aYgPcZgub1yQBU5/nAbPcZgub1yQBU5/nAbPYLLur1l5L87hnjUPLeCub1D/4U6Yp3UPLeCub1D/4U6Yp3UPLWCub0tf6E6k3C+PLWCub0tf6E6k3C+PNextb1YNJC6Qu/UPNextb1fxIy6Imm+PGurtb31EZi682obPeSptb1AUpa6jaggPSentb0455C629slPaVQub2/Tms4TKggPaVQub2/Tms4TKggPdMuub3QW6G3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iYdoP0mcvT7AAdg+wzQ/Prg+Yj8i9T0+IbBbP8InOj7Ml1M/ZxA3PoEISz9mBQ4+xq9IPxJVzD0DWkY/zqnqPhDAlT7wl9c+aJaYPjwoxj643Z4+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8LDQoOCw0KDgsNCg4LDQoOCw0KDgsKDQ4LCg0JCwoNCQsKDQkLCg0JCwoNCQsKDQkLCg0JCwoNCQsKDQ4LCg0JCwoNEwsKDQ4LCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoTDQsKDRMLChMNCwoNEwsKEw0LCg0TCwoTDQsKDRMLCg0TCwoTDQsKEw0LCg0TCwoTDQsKDRMLChMNCwoNEwsKEw0LCg0TCwoTDQsKDRMLChMNCwoNCQsKEw0LCg0JCwoNCQsKEw0LChMNCwoNCQsKDQkKCxMNCgsNCQoLCRMKCw0JCQ0KCw0JCgsJEw0KCQ0TCAkTDQgNCQ4ICQgNEwkNCA4JCBMNCAkNDggJDQ4ICRMNCAkBDQgJAQ4ICQEhAQgJIQgBCSEIAQkhAQgCKwEhCAIBCCErAQIhJQECJQgBAiEAAQIlIQECISsBAiUAAQIlIQIBISUBAiUhAQIlIQIBJSEBAiUhAQIjJQECIyUBAiMAAQIjAAECJQABAiUAAQIfJQECIx8BAiUfAQIjJQECIy0BAiUfAQIfIwEfAiUBAiMfAR8CJQECHyMBHwIlAR8CJQEfAiUBHwIlAR8CJQEfAiUBHwIjAR8CIx8BAiUfAQIlHwECJQEfAiMfAQIAHwECJR8BAiUfAQIjHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEjAB8BAAAfAQgJHwEICR8BCAkBHwgJAR8ICQEfCAkBHwgJHwEICR8BCAkBHwgJAR8ICQEIHwkBCB8JAQgJHwEIHwkIAQkfAQgJAggBCR8ICQENCAkBHwgJAQ0ICQ0OCAkNDggJDRMJCA0OCQgNEwkIDQ4JDRMIDQkOCAkNEwgJDQoLCQ0TCg0JCgsKCw0JCgsNCQoLCRMLCg0JCwoTDQsKDQkLCg0JCwoNCQsKDQkLCg0JCwoTDQsKEw0LCg0JCwoNCQsKEw0LCg0JCwoTDQsKDQkLCg0TCwoTDQsKDQ4LCg0TCwoNAAsKEw0LCg0ACwoNEwsKDQALCg0ACw0KAAsKAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKDQALCg0ACwoNAAsKAAALCg0TCwoNEwsKDQALCg0TCwoNEwsKDQALCg0ACwoNEwsKDRMLCg0TCwoNEwsKEw0LCg0TCwoTDQsKDRMLCg0TCwoTDQsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDRMLCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNDgsKDQ4LCg0ACwoNDgsKDQ4LCg0OCwoODQsKDQ4LDgoNCw4NCgsODQoLDg0KCw4NCgsODQoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoNCw4KCw0OCg0LDgoNCw4KDQ4LAA0OCwoODQsADg0LAA4NCwAODQsADg0LAA4NCwAODQsADg0LAA4NCwAODQsADg0AAA4NAAAODQAADg0AAA4PAAAODwAADg8AAA4PAAAODwAADw4QAA4PEAAODxAADg8AAA8OAAAODxANDg8QAA4NDwkODxANDg0PCA4PEAAODxANDg8QDQ4PDQgODw0IDw4QAA8OEAAODxANDg8NCQ8OEAAODxANDg0PCQ8OEAAODxAADw4QAA4PDQAODxAADw4QAA4PAAAODQAADg0LAA4NAAAODQsADg0JIQ0OCQsODQkIDQ4JCA4JDQgNDgkLDQ4JIQ0OCwoNDgsKDQ4LCg0LDgoNCwoODQsOCgsNCg4LDQ4KCw0OCgsNDgoNCw4KCw0OCgsNDgoNDgsKDQsOCg0OCwAODQsADg0LAAsNDgoLDQoOCw0KDgsKDQ4LCg0OCwoNDg0KCwkNCQoLDQkOCAkNDggJCA0OCQ0IDggJDQ4ICQINAQgJIQEICQIBIQgCAQIhCCECAQACASEAAiEBAAIhAQACIQEAAiEBAAIhAwECAwQhAiEBAwIhAwACAwQAAgMhAAIhASMCAwQAAgMjBAIDIwQCASMhAgEjIQMCBAADAgQAAiMDBAIjAQADAgQAAiMBAwIjAQAEAgMAAgMBIwIjAQAEAgMjAiMEAQIEAyMCASMEAgQDIwIBIwMCASMDAgMEAAIDBAACAQMhAgMEAQIDIQQCAwQAAgMEAAIDBCECAwQAAgMEAAIDBAADAgQAAwIEAAQDAgADBAIAAwIEAAQDAgAEAwIAAwQCAAQAAAAEBQAABAMAAAQAAAAEBQAABAAAAAQFAAAEAwIABAMCAAQDAgAEBQAABAUAAAQDAgAEAAAABAIDAAQAAAAEAgMABAAAAAQCAwAEAAAABAIDAAQAAAAEAgMABAIDAAQAAAAEAAAABAMCAAQAAAADAgQAAwIEAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQAAAAUGAAAFAAAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABgAAAAYFAAAGBQAABgAAAAYFAAAGBQAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYEAAUGBAAFBgQABQYEAAUGBAAFBAYABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQCAAQFAgAEBQIABAUCAAQFAgAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAFBAIABQQCAAQFAAAEBQAABQQAAAUEAAAFBAAABAUAAAUEAAAFBAAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQQAAAUGAAAFBgAABQYAAAUGAAAFBgAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAFBgAABQYAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABQQCAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBgAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYAAAUEAAAFBAAABAUAAAQFAAAFBgAABQYAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABQYAAAUGAAAGBQAABgUAAAYFAAAGBQAABgAAAAYFAAAGBQAABgUAAAYFAAAGBQAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGBQAABgUAAAUGAAADBAIAAwQCAAMCBAAjAgEfAQIjHyMCAQABIwIAASMCAAEjAh8BIwgCAQgjAgEjAgABCAkCAQgJAggJDSMICQIfCAkNDggJDQ4JDQ4IDQ4JCA0JDggNDgkIDQkLCg0OCwkNCwoJDQsKDgsKDQkLDQoOCwoNCQsKDQkLDQoOCw0KDgsKDQkLDQoOCw0KDgsNCg4LDQoOCw0KDgsKDQ4LCg4NCw0KAAsNCg4LDQAACw0AAAsAAAALDQAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKAAALAAAACwAAAAsAAAALAAAACw0AAAsNAAALDQoACw0KAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALDQAACw0AAAsNAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACw0AAAsNAAALDQAACw0AAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACw4KDQsKDQALDg0ACw0AAAsNAAALDg0ACw0OAAsODQALDg0ACw0OAAsNDgALDQ4ACw4NCgsODQALDQ4ACw0OAAsNAAALDQAACwAAAAsNAAALDQAACwAAAAsAAAALDQAACwAAAAsNAAALAAAACw0AAAsAAAALDQAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALDQAACwAAAAsNAAALDQAACw0OAAsNAAALDQ4KCw4KDQsNCg4LDgoNCw0OCgsODQoLDQ4KCw0OCgsNCg4LDQ4KCw0OCgsNDgoLDQoOCw0KDgsNCg4LDQoOCw0OCg0LCg4NCw4KDQ4LCg0OCwoNDgkLDQ4JCw4NCQgODQkIDg0JCA4NCAkODQgPDg0IDwgJDQ4ICQ0CCAkNAggJAgEICQIBCAkCAQgBCQIIAQkCCAEJAgECIwgBAiMhAQIjIQIBIyECASMhAgEjIQIjAQACIwEhAiMBIQIhAQACASEAAQIhCAgBAiEICQIhCAkODQ4JDQ8LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAAAQgJHwEfCAkBAiMfAR8CCAECIx8BHwIjAR8CIwEfAiMBHwIjAR8IAgEfCAIfAQIIAR8ICQEfCAkfAQgJHwEjAB8BIwAfASMtHwEjAB8BAAAfAQAAHwEAAB8BAAAfAAAAHwAAAB8AAAAfAAAAHwEAAB8tIwEfAQIjDw4QAA8OEAAQDw4AEBEAABAPDhEQDwAAEA8AABARAAAQEQAAEA8AABARAAAPEA4AEA8AAA8QDgAQEQAAEA8OERARDwAPEA4AEA8OERARAAAPEA4AEA8OERAPDhEQEQAAEBEAABAPDhEQEQAAEA8OERARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEAAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAQEQAAEBEAABARAAAQEQAAERAAABEQAAAREAAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAADw4QAA8OEAAPDhAADw4QAA8QDgAPDhAADxAOAA8OEAAPDhAADw4QAA8OEAAODxAACwoNAAsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTAAsKEwALChMNCwoTAAsKEwALChMACwoAAAsKEwALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKEwALEwoACwoTAAsKEwALChMNCwoTAAsKEw0LChMUCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQoLEwkKCxMJCRMKCxMJCgsJEw0IEwkUCAkIExQJCBMUCAkTFAgJExQICQETCAkBEwgBCR8BCAklAQgfCQEICR8BHwgJAQgfCQEfCAkBHwgJAR8ICQEfCAkfAQgJHwEICR8BAAAfAS0AHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfASUAHwElLR8BJQIBHyUtAR8lAgEfJQIBHyUtAR8lLQEfJQIBJR8tASUfLQElLR8BJS0CASUtIwElHwIBJS0fASUtAgElLQIBJS0AASUtAAElAislAQIrASUCKyUBKwIBJQIrASUrIQElKwIBJSsAAQglIQErCCUBCAkrCAEJKwgJARMICQEUCAkTFAgJExQJCBMNCRMIFAkTDQgTCRQICRMKCxMJCgsKCxMJCgsTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTDQsKEwkLChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKExQLChMJCwoTFAsKEwkLChMUCwoTCQsKEwkLEwoUCxMKFAsKEwkLEwoUEwoLCRMLChQTCQoLExQLChMJFAgTFAkrCRMUCBMUCQgJCBMUCRMIFAgJExQICSUTAQgJKwEICSUBKwglASUrCCslAQAlASsAJSsBACUrAQAlKwEAJSsBACUrJgElJicrJSsBJiUrJgAlJicAJSYrACUrAS0lJicAJSYtJyUmLSclAS0rJQEtKyYlJwAmJScAJS0mJyUtAQAmJScAJS0BJiUtAQAnJSYAJSYBLSUtAQAnJSYtJS0nASUnJi0lAS0nJScmLSUBLSYlAS0mJSYnACUmJwAlASYrJSYnASUmKyclJicAJSYnACUmJyslJicAJSYnACUmJwAmJScAJiUnACcmJQAmJyUAJiUnACcmJQAnJiUAJiclACcAAAAnKAAAJyYAACcAAAAnKAAAJwAAACcoAAAnJiUAJyYlACcmJQAnKAAAJygAACcmJQAnAAAAJyUmACcAAAAnJSYAJwAAACclJgAnAAAAJyUmACcAAAAnJSYAJyUmACcAAAAnAAAAJyYlACcAAAAmJScAJiUnACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKAAAACgpAAAoAAAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKQAAACkoAAApKAAAKQAAACkoAAApKAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCknACgpJwAoKScAKCknACgpJwAoJykAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCclACcoJQAnKCUAJyglACcoJQAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAoJyUAKCclACcoAAAnKAAAKCcAACgnAAAoJwAAJygAACgnAAAoJwAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCcAACgpAAAoKQAAKCkAACgpAAAoKQAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAAoKQAAKCkAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKCclACcoAAAnKAAAJygAACcoAAAnKAAAJygAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoKQAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCkAACgnAAAoJwAAJygAACcoAAAoKQAAKCkAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKCkAACgpAAApKAAAKSgAACkoAAApKAAAKQAAACkoAAApKAAAKSgAACkoAAApKAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApKAAAKSgAACgpAAAmJyUAJiclACYlJwAtJQEfASUtHy0lAQABLSUAAS0lAAEtJR8BLQglAQgtJQEtJQABCAklAQgJJQgJEy0ICSUfCAkTFAgJExQJExQIExQJCBMJFAgTFAkIEwkLChMUCwkTCwoJEwsKFAsKEwkLEwoUCwoTCQsKEwkLEwoUCxMKFAsKEwkLEwoUCxMKFAsTChQLEwoUCxMKFAsKExQLChQTCxMKAAsTChQLEwAACxMAAAsAAAALEwAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKAAALAAAACwAAAAsAAAALAAAACxMAAAsTAAALEwoACxMKAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALEwAACxMAAAsTAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACxMAAAsTAAALEwAACxMAAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoTAAsKEwALChMACwoTAAsKEwALEwoACwoTAAsKEwALEwoUCwoTFAsKEwALChMUCwoTFAsKExQLChMUCxQKEwsUEwoLFBMKCxQTCgsUEwoLFBMKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKEwsUCgsTFAoTCxQKEwsUChMUCwATFAsKFBMLABQTCwAUEwsAFBMLABQTCwAUEwsAFBMLABQTCwAUEwsAFBMLABQTAAAUEwAAFBMAABQTAAAUFQAAFBUAABQVAAAUFQAAFBUAABUUFgAUFRYAFBUWABQVAAAVFAAAFBUWExQVFgAUExUJFBUWExQTFQgUFRYAFBUWExQVFhMUFRMIFBUTCBUUFgAVFBYAFBUWExQVEwkVFBYAFBUWExQTFQkVFBYAFBUWABUUFgAUFRMAFBUWABUUFgAUFQAAFBMAABQTCwAUEwAAFBMLABQTCSsTFAkLFBMJCBQJEwgTFAkLExQLChMUCwoTCxQKEwsUCgsTChQLExQKCxMKFAsTChQLExQKCxMUCgsTChQLChMUCxMUCgsTChQLChMUCwoTFAsTFAoLExQKEwsUChMUCwoTCxQKExQLABQTCwAUEwsAFAkTFQgJFBMUEwgVFBMIFQgJEyUICRMlFBMICQgJExQUEwkIFBMJCBQTCQgTFAkLExQJCxMUCwoTFAsKEwsKFBMLFAoLEwoUCxMUCgsTChQLEwoUCxMUCgsTFAoLEwoUCxMKFAsTFAoLExQKCxMUCgsTFAoLFBMKCxQTCgsUEwALExQACxMUAAsUChMLExQACxQKEwsTChQLExQKCxMAAAsTAAALEwAACxMAAAsTAAALAAAACxMAAAsAAAALEwAACxMAAAsTFAALExQACxMUAAsTFAALFBMACxQTAAsUEwALFBMACxQKEwsTAAALEwAACxMAAAsTCgALEwAACwAAAAsTAAALAAAACxMAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACAklAQgJJQEICSUBCAEJJQgBCSUIAQklASUtCAElLSsBJS0rJQEtKyUBLSslAS0rJS0BACUtASslLQErJSsBACUBKwABJSsICAElKwgJJSsVFBYAFRQWABYVFAAWFwAAFhUUFxYVAAAWFQAAFhcAABYXAAAWFQAAFhcAABUWFAAWFQAAFRYUABYXAAAWFRQXFhcVABUWFAAWFRQXFhcAABUWFAAWFRQXFhUUFxYXAAAWFwAAFhUUFxYXAAAWFRQXFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFwAAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABYXAAAWFwAAFhcAABYXAAAXFgAAFxYAABcWAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAVFBYAFRQWABUUFgAVFBYAFRYUABUUFgAVFhQAFRQWABUUFgAVFBYAFRQWABQVFgALChMUCwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMNCwoTAAsKEwALChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEwALChMACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAEICR8BHwgJASUtHwEfJQgBJS0fAR8lLQEfJS0BHyUtAR8lLQEfCCUBHwglHwElCAEfCAkBHwgJHwEICR8BLQAfAS0AHwEjLR8BLQAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8BAAAfIy0BHwElLQsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA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AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAACt6n8/F5WqOQAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAEDrfz8BBaY5AAAAAAAAAAA86n8/RBiuOQAAAAAAAAAAlI9/PzjjsDqb0b85AAAAAAqBfz9Xs946Yct5OQAAAAAHkn4/xlpCO2WdKzsAAAAAaxh+P3ehiTvcUVQ7AAAAABYBfj+o55s7PRtHOwAAAABapnw/EaoNPC1/kTsAAAAAlWp9P3NG5TuY3Uo7AAAAAA1Yez8a71w8gBuaOwAAAACJcH0/Lzv2O84AIzsAAAAA60h8P7riOTwEik87AAAAALiFfj8TiJ87MeBsOgAAAAC2lH0/xlcFPN7WqzoAAAAAw9J/Pwn0NDoAAAAAAAAAAPG6fz9JH4o6AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAUaZ/P7deszoAAAAAAAAAACeUfz/0stc6AAAAAAAAAACJBn0/FEgrPFyumDoAAAAAbK58P7e8QzwIQIU6AAAAAISYez91uG48ZpksOwAAAACzVXs/7J6EPA5VBTsAAAAAMPh5Px1JnjwAw4o7AAAAACH4eT9UTac86nNNOwAAAAAvkHs/1idPPPqYmTsAAAAAVER7P7wzazzrboc7AAAAAKrAfT8GP7U7mNhUOwAAAAB1oX0/F+3KOw+xSDsAAAAAiJp/PxrwyjoAAAAAAAAAAEaifz+JdLs6AAAAAAAAAADV8H8/lbByOQAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAI7wfz8PG3c5AAAAAAAAAAD/q38/YAGoOgAAAAAAAAAA/6t/P2ABqDoAAAAAAAAAAPCnfz9iH7A6AAAAAAAAAAAt3H0/4iO9Oy2LKTsAAAAALdx9P+IjvTstiyk7AAAAAHmufj+PjzY7KvcaOwAAAABrzXs/gIhVPKJzXDsAAAAAa817P4CIVTyic1w7AAAAALhtfD8D8yk8mntqOwAAAAA4Ino/ArOkPMEvODsAAAAAOCJ6PwKzpDzBLzg7AAAAACTgeT9B56g83qFYOwAAAADYBHs/gRiQPAbH9DoAAAAA2AR7P4EYkDwGx/Q6AAAAAPNAej/Rb6c8GY0DOwAAAABRZHw/CxxXPE79fDoAAAAAUWR8PwscVzxO/Xw6AAAAAJ7Tez+QOns8XN59OgAAAAAXh38/ntLxOgAAAAAAAAAAF4d/P57S8ToAAAAAAAAAAF5wfz8Gog87AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAA7QF/P9kTfjsAAAAAAAAAABiFej8kVaY8B32QOgAAAABdSXg/IfPoPGMV3joAAAAAEsB4P66+0jyc+Sk7AAAAAOYoeD9WysI85mPgOwAAAAAjjnY/aXMHPe2mejsAAAAAtCZ3PxGr5TxM+dU7AAAAAMGHdz+QI6Q8HKX4O93rsjvNM30/eK/MOyFqmTsAAAAAe/p7PwekHzzdesM7AAAAAK5Xfj8dKdQ7AAAAAAAAAADNIX8/JDNeOwAAAAAAAAAAvF1yP9hhDT3EhJk8AAAAAPeddT+oMu08Fh0+PAAAAABrk3Y/gGvKPDtORjwAAAAAa5N2P4Bryjw7TkY8AAAAAJgLcD+5oBQ9jEvVPAAAAACYC3A/uaAUPYxL1TwAAAAAiGh6P6isNzwVMS48AAAAAKpBSD8N0wM+R86kPY7yCzylGno/Cy1OPNgpKzwAAAAAsSB0P3MX2TxX0qI8AAAAAOT2dT9w1K088U6TPAAAAADQ9ns/9SWBPAAAAAAAAAAAxwV7Px9HnzwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAA+GXw/ZrB5PAAAAAAAAAAAPhl8P2aweTwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAALf18P+C0QDwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAABM334/OFqQOwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAHzPfz/mDkI6AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAgot/P6P76DoAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/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AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAA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AACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/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AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAsMoyP7tlhz5K66Q8+2KLPDGyQD/N2mo+g+OSPAAAAAAihVI/AscCPkLtKj1JkgY8ZChSP/4FiT3hE3k97FlSPWQoUj/+BYk94RN5PexZUj1sADc//mxSPmd3Vj27m9886pc1P+EpJj6SkwA+VLg4Ow4ZET/HYh0+cjcVPpIBCT4HThg/KVRGPg+KLD6cpi89Xw0bP4qImD7W/rk9CUG3OzgYHT99l68+i4sFPXnUMDw4GB0/fZevPouLBT151DA8DIsRP1uNwz6Kawk93/GCPP3sIj+ToTk+xgItPiF7WjywyjI/u2WHPkrrpDz7Yos8MbJAP83aaj6D45I8AAAAACKFUj8CxwI+Qu0qPUmSBjxkKFI//gWJPeETeT3sWVI9ZChSP/4FiT3hE3k97FlSPWwANz/+bFI+Z3dWPbub3zzqlzU/4SkmPpKTAD5UuDg7DhkRP8diHT5yNxU+kgEJPgdOGD8qVEY+D4osPp6mLz1fDRs/ioiYPtf+uT0HQbc7OBgdP32Xrz6LiwU9edQwPDgYHT99l68+i4sFPXnUMDwMixE/W43DPoprCT3g8YI8/ewiP5KhOT7HAi0+I3taPAAABgAKAAAACgACAAAAAgDHAQAAxwEDANUBBQABANUBAQAEAAUACwAHAAUABwABAAYACABHAAYARwAKAAsADAAJAAsACQAHAA8ADAALAA8ACwANAA0ACwAFAA0ABQAOAA0ADgARAA0AEQAQAA8ADQAQAA8AEAASABUAEwAQABUAEAARABMAFAASABMAEgAQABYAFwAUABYAFAATABgAFgATABgAEwAVABsAFwAWABsAFgAZABkAFgAYABkAGAAaACEAHQAZACEAGQAaAB0AHwAbAB0AGwAZACIAIwAeACIAHgAcACQAIgAcACQAHAAgACUAJwAjACUAIwAiACYAJQAiACYAIgAkACkAKAAlACkAJQAmACgAKgAnACgAJwAlACsAKgAoACsAKAApACsALQAsACsALAAqACoALAAuACoALgAnACwALQAvACwALwAuACcALgAwACcAMAAjAC4ALwAxAC4AMQAwADAAMQA0ADAANAAyACMAMAAyACMAMgAeADMANQA3ADMANwA2AB8AMwA2AB8ANgAbADYAOAAXADYAFwAbADcAOQA4ADcAOAA2ADgAOQA7ADgAOwA6ABcAOAA6ABcAOgAUADoAOwA9ADoAPQA8ABQAOgA8ABQAPAASADwAPgAPADwADwASAD0APwA+AD0APgA8AD4AQAAMAD4ADAAPAD8AQQBAAD8AQAA+AEAAQQBFAEAARQBDAAwAQABDAAwAQwAJAEIARgBHAEIARwAIAEQASABGAEQARgBCAEcARgBJAEcASQBLAEYASABKAEYASgBJAEkASgBOAEkATgBMAEsASQBMAEsATABNAE0ATABPAE0ATwBRAEwATgBQAEwAUABPAE8AUABUAE8AVABSAFEATwBSAFEAUgBTAFMAUgBVAFMAVQBWAFIAVABXAFIAVwBVAFUAWABZAFUAWQBWAFcAWgBYAFcAWABVAFkAWABbAFkAWwBdAFgAWgBcAFgAXABbAFsAXABgAFsAYABeAF0AWwBeAF0AXgBfAF8AXgBhAF8AYQBjAF4AYABiAF4AYgBhAGEAYgBmAGEAZgBkAGMAYQBkAGMAZABlAGUAZABnAGUAZwBoAGQAZgBpAGQAaQBnAGcAagBrAGcAawBoAGkAbABqAGkAagBnAGsAagBuAGsAbgBwAGoAbAByAGoAcgBuAG0AcwB0AG0AdABvAHEAdQBzAHEAcwBtAHQAcwB2AHQAdgB3AHMAdQB4AHMAeAB2AHkAewB3AHkAdwB2AHoAeQB2AHoAdgB4AH4AfAB5AH4AeQB6AHwAfQB7AHwAewB5AH8AhAB9AH8AfQB8AIEAfwB8AIEAfAB+AIYAgACDAIYAgwCIAIkAhQCAAIkAgACGAIYAiACMAIYAjACKAIkAhgCKAIkAigCNAIoAjACRAIoAkQCOAI0AigCOAI0AjgCPAI4AkgCVAI4AlQCPAJEAlACSAJEAkgCOAJIAlACZAJIAmQCWAJUAkgCWAJUAlgCXAJYAmgCdAJYAnQCXAJkAmwCaAJkAmgCWAJoAmwCfAJoAnwCeAJ0AmgCeAJ0AngChAJ4AnwCkAJ4ApACiAKEAngCiAKEAogCjAKMAogClAKMApQCmAKIApACnAKIApwClAKgAqgCmAKgApgClAKkAqAClAKkApQCnAK0AqwCoAK0AqACpAKsArACqAKsAqgCoAK4ArwCsAK4ArACrALAArgCrALAAqwCtALMArwCuALMArgCxALEArgCwALEAsACyALYAtACxALYAsQCyALQAtQCzALQAswCxALkAtQC0ALkAtAC3ALcAtAC2ALcAtgC4ALwAugC3ALwAtwC4ALoAuwC5ALoAuQC3AL0AvgC7AL0AuwC6AL8AvQC6AL8AugC8AL0AwQDDAL0AwwC+AL8AxQDBAL8AwQC9AMIAwADGAMIAxgDIAMAAxADHAMAAxwDGAMYAxwDLAMYAywDJAMgAxgDJAMgAyQDKAMoAyQDMAMoAzADNAMkAywDOAMkAzgDMAM8A0QDNAM8AzQDMANAAzwDMANAAzADOANQA0gDPANQAzwDQANIA0wDRANIA0QDPANUA1wDTANUA0wDSANYA1QDSANYA0gDUANoA2ADVANoA1QDWANgA2QDXANgA1wDVANsA3QDZANsA2QDYANwA2wDYANwA2ADaAOAA3gDbAOAA2wDcAN4A3wDdAN4A3QDbAOEA4wDfAOEA3wDeAOIA4QDeAOIA3gDgAOgA5ADhAOgA4QDiAOQA5gDjAOQA4wDhAOoA6wDnAOoA5wDlAOwA6gDlAOwA5QDpAO8A6wDqAO8A6gDtAO0A6gDsAO0A7ADuAPAA7QDuAPAA7gDxAPIA7wDtAPIA7QDwAPUA8wDwAPUA8ADxAPMA9ADyAPMA8gDwAPgA9ADzAPgA8wD2APYA8wD1APYA9QD3APsA+QD2APsA9gD3APkA+gD4APkA+AD2AP4A+gD5AP4A+QD8APwA+QD7APwA+wD9AAEB/wD8AAEB/AD9AP8AAAH+AP8A/gD8AAQBAAH/AAQB/wACAQIB/wABAQIBAQEDAQMBBgEFAQMBBQECAQIBBQEHAQIBBwEEAQUBBgEKAQUBCgEIAQcBBQEIAQcBCAEJAQkBCAELAQkBCwEPAQgBCgENAQgBDQELARMBEQEMARMBDAEOAREBEgEQAREBEAEMARYBEgERARYBEQEUARQBEQETARQBEwEVARcBFAEVARcBFQEYARkBFgEUARkBFAEXARoBFwEYARoBGAEbARwBGQEXARwBFwEaARoBGwEfARoBHwEdARwBGgEdARwBHQEeAR4BHQEgAR4BIAEhAR0BHwEiAR0BIgEgASABIwEkASABJAEhASIBJQEjASIBIwEgASYBJwEkASYBJAEjASgBJgEjASgBIwElAScBJgEpAScBKQErASYBKAEqASYBKgEpASoBLQEsASoBLAEpASkBLAEuASkBLgErASwBLQExASwBMQEvAS4BLAEvAS4BLwEwATQBMAEvATQBLwEyATIBLwExATIBMQEzAToBNgEyAToBMgEzATYBOAE0ATYBNAEyATsBPAE3ATsBNwE1AT0BOwE1AT0BNQE5AT4BQAE8AT4BPAE7AT8BPgE7AT8BOwE9AUIBQQE+AUIBPgE/AUEBQwFAAUEBQAE+ASsAQwFBASsAQQFCAUABQwFEAUABRAFFASsARAFDASsASAFGASsARgFEAUUBRAFGAUUBRgFHAUcBRgFIAUcBSAFJAUkBSAEpAEkBKQAmACsAKQBIAUsBRwFJAUsBSQFKAUkBJgAkAEkBJABKAUsBSgFMAUsBTAFPAUoBJAAgAEoBIABMAU0BIQAaAE0BGgBOAVABTQFOAVABTgFRAVUBSwFPAVUBTwFSAVMBUAFRAVMBUQFUATgBUwFUATgBVAE0ATwBVQFSATwBUgE3AVUBRQFHAVUBRwFLAUABRQFVAUABVQE8AVYBVAFRAVYBUQFXAVQBVgEwAVQBMAE0AVYBVwFaAVYBWgFYAVgBLgEwAVgBMAFWAScBWAFZAScBWQEkAS4BWAEnAS4BJwErAVgBWgFcAVgBXAFZAVoBVwGABVoBgAVbAVwBWgFbAVwBWwFdAV4BXAFdAV4BXQFgAV8BWQFcAV8BXAFeAWMBXwFeAWMBXgFhAWEBXgFgAWEBYAFiAWQBYQFiAWQBYgFlAWMBYQFkAWMBZAFmAWcBZAFlAWcBZQFqAWgBZgFkAWgBZAFnAWcBawFtAWcBbQFoAWwBawFnAWwBZwFqAWwBcAFvAWwBbwFrAWsBbwFzAWsBcwFtAXABzQFyAXABcgFvAW8BcgF4AW8BeAFzAX0BeQF0AX0BdAF3AXkBewFuAXkBbgF0AXoBbwR7AXoBewF5AX8BegF5AX8BeQF9AYEBfgF8AYEBfAGAAYABfAF2AYABdgGDAYUBgQGAAYUBgAGEAYQBgAGDAYQBgwGHAYkBhQGEAYkBhAGIAYgBhAGHAYgBhwGLAY0BiQGIAY0BiAGMAYwBiAGLAYwBiwGPAZEBjQGMAZEBjAGQAZABjAGPAZABjwGTAZUBkQGQAZUBkAGUAZQBkAGTAZQBkwGXAZwBlQGUAZwBlAGYAZgBlAGXAZgBlwGbAZ0BnAGYAZ0BmAGZAZkBmAGbAZkBmwHHBKABlQGcAaABnAGeAZ8BngGcAZ8BnAGdAZ4BnwGjAZ4BowGhAaABngGhAaABoQGiAaIBoQGlAaIBpQGnAaMBqQGlAaMBpQGhAaYBpAGqAaYBqgGrAagBrAGqAagBqgGkAasBqgGtAasBrQGuAawBrwGtAawBrQGqAbIBrgGtAbIBrQGwAa8BsQGwAa8BsAGtAbQBswGwAbQBsAGxAbMBtQGyAbMBsgGwAcYEmgGzAcYEswG0AZoBlgG1AZoBtQGzAZYBkgG2AZYBtgG1AbUBtgG4AbUBuAGyAZIBjgG3AZIBtwG2AbYBtwG5AbYBuQG4AbkBuwG6AbkBugG4AbgBugGuAbgBrgGyAbwBvgGuAbwBrgG6Ab8BvAG6Ab8BugG7Ab0B3gG+Ab0BvgG8AcABvQG8AcABvAG/AcIBwAG/AcIBvwHBAcEBvwG7AcEBuwHDAcUBwgHBAcUBwQHEAcQBwQHDAcQBwwHGAQIAxQHEAQIAxAHHAccBxAHGAccBxgHIAQMAxwHIAQMAyAHJAcsByAHGAcsBxgHOAckByAHLAckBywHMAc8BcQHMAc8BzAHLAdABzwHLAdABywHOAYIBdQFxAYIBcQHPAYYBggHPAYYBzwHQAYoBhgHQAYoB0AHRAdEB0AHOAdEBzgHSAY4BigHRAY4B0QG3AbcB0QHSAbcB0gG5Ac4BxgHDAc4BwwHSAdIBwwG7AdIBuwG5AXAB0wHKAXABygHNAdMB1QEEANMBBADKAdQB1gHVAdQB1QHTAdQB0wFwAdQBcAFsAdYBDgAFANYBBQDVAREADgDWAREA1gHXAdcB1gHUAdcB1AHYAREA1wFgAREAYAFdAWAB1wHYAWAB2AFiAdgBagFlAdgBZQFiAdQBbAFqAdQBagHYAQIACgDZAQIA2QHFAdkB2gHCAdkBwgHFAUsATQDaAUsA2gHZAQoARwBLAAoASwDZAdoBTQBRANoBUQDbAcIB2gHbAcIB2wHAAdsB3AG9AdsBvQHAAVEAUwDcAVEA3AHbAdwBUwBWANwBVgDdAb0B3AHdAb0B3QHeAVkA3wHdAVkA3QFWAN8B4AHeAd8B3gHdAV0A4QHfAV0A3wFZAOEB4gHgAeEB4AHfAeMB5AHiAeMB4gHhAV8A4wHhAV8A4QFdAGMA5QHjAWMA4wFfAOUB5gHkAeUB5AHjAecB6AHmAecB5gHlAWUA5wHlAWUA5QFjAOkB5wFlAOkBZQBoAOoB6AHnAeoB5wHpAY0N7QHrAY0N6wGADYAN6wHuAYAN7gGBDe0BDALsAe0B7AHrAesB7AHvAesB7wHuAfIB8AHuAfIB7gHvAYIN8QHqAYIN6gGBDYQN9gHxAYQN8QGCDfgB9AHwAfgB8AHyAYUN+gH1AYUN9QGDDfsB+QHzAfsB8wH3AYYN/QH6AYYN+gGFDf4B/AH5Af4B+QH7AYYN/AH/AYYN/wGHDfwB/gEBAvwBAQL/AYcN/wECAocNAgKIDf8BAQIDAv8BAwICAokNdAB3AIkNdwCIDQUCBAICAgUCAgIDAgYCBAIFAgYCBQIIAooNiQ0EAooNBAIGAgsCCgIHAgsCBwIJAowNawBwAIwNcACLDe0BCgILAu0BCwIMAo0NjA0KAo0NCgLtAQwCCwINAgwCDQIPAgkCDgINAgkCDQILAhACDwINAhACDQIOAhMCEQIPAhMCDwIQAg8CEQLsAQ8C7AEMAhQCEgIRAhQCEQITAhECEgLvAREC7wHsARcCFQITAhcCEwIQAhUCFgIUAhUCFAITAhgCGQIWAhgCFgIVAhoCGAIVAhoCFQIXAhsCHgIZAhsCGQIYAh0CGwIYAh0CGAIaAhwCHwIeAhwCHgIbAjoCHAIbAjoCGwIdAiECIAIeAiECHgIfAiACIgIZAiACGQIeAiYCJAIgAiYCIAIhAiQC+AEiAiQCIgIgAigCJwIjAigCIwIlAicC+wH3AScC9wEjAioCKQInAioCJwIoAikC/gH7ASkC+wEnAikCKwIBAikCAQL+ASoCLAIrAioCKwIpAisCLQIDAisCAwIBAiwCLgItAiwCLQIrAi4CMAIvAi4CLwItAi0CLwIFAi0CBQIDAjACMwIxAjACMQIvAi8CMQIIAi8CCAIFAjQCNgI1AjQCNQIyAjICNQI3AjICNwIJAjYCOgIdAjYCHQI1AjUCHQIaAjUCGgI3AgkCNwI4AgkCOAIOAhoCFwI4AhoCOAI3AhACDgI4AhACOAIXAjkCOwI6AjkCOgI2Ap4COQI2Ap4CNgI0AjsCPQIcAjsCHAI6AjwCPwI9AjwCPQI7AqcCPAI7AqcCOwI5Aj0CPgIfAj0CHwIcAj8CQAI+Aj8CPgI9AkECPwI8AkECPAJDAkUCQAI/AkUCPwJBAkcCQgJEAkcCRAJJAkgCRgJCAkgCQgJHAkwCSAJHAkwCRwJKAkoCRwJJAkoCSQJLAk8CTQJKAk8CSgJLAk0CTgJMAk0CTAJKAk4CTQJQAk4CUAJSAk0CTwJRAk0CUQJQAlACUQJVAlACVQJTAlICUAJTAlICUwJUAlQCUwJWAlQCVgJXAlMCVQJYAlMCWAJWAlYCWQJbAlYCWwJXAlgCWgJZAlgCWQJWAlkCWgJdAlkCXQJcAlsCWQJcAlsCXAJeAlwCXQJhAlwCYQJfAl4CXAJfAl4CXwJjAmUCYAJiAmUCYgJmAmcCZAJgAmcCYAJlAmkCaAJlAmkCZQJmAmgCagJnAmgCZwJlAm0CawJoAm0CaAJpAmsCbAJqAmsCagJoAm4CcAJsAm4CbAJrAm8CbgJrAm8CawJtAm4CbwJzAm4CcwJxAnACbgJxAnACcQJyAnECdAJ2AnECdgJyAnMCdQJ0AnMCdAJxAnUCeAJ3AnUCdwJ0AnQCdwJ5AnQCeQJ2AncCeAJ7AncCewJ6AnkCdwJ6AnkCegJ8AnoCewKBAnoCgQJ9AnwCegJ9AnwCfQJ/AoIChAJ/AoICfwJ9AoYCggJ9AoYCfQKBAowChAKCAowCggKIAogCggKGAogChgKKAo8CjQKHAo8ChwKJAo0CjgKLAo0CiwKHApUCjgKNApUCjQKRApECjQKPApECjwKTApACkgKXApAClwKWApQCkAKWApQClgKYApYClwKbApYCmwKZApgClgKZApgCmQKaApkCLAIqApkCKgKaApsCLgIsApsCLAKZApcCnwKcApcCnAKbApsCnAIwApsCMAIuApwCnQIzApwCMwIwAp8CogKdAp8CnQKcAqACpAKiAqACogKfApICoAKfApICnwKXAqMCpwI5AqMCOQKeAqUCqAKnAqUCpwKjAqgCQwI8AqgCPAKnAqwCqgKpAqwCqQKmAqoCSQJEAqoCRAKpAqsCSwJJAqsCSQKqAq0CqwKqAq0CqgKsAq8CrQKsAq8CrAKuAq4CrAKmAq4CpgKwArMCrwKuArMCrgKxArECrgKwArECsAKAArYCtAKyArYCsgK1AnsCtQKyAnsCsgKBAnMCtgK1AnMCtQJ1AngCdQK1AngCtQJ7ArcCuQK0ArcCtAK2Am8CtwK2Am8CtgJzArkCtwK6ArkCugK9AroCtwJvAroCbwJtAr0CugK7Ar0CuwK/AmkCuwK6AmkCugJtAr4CwQLAAr4CwAK8AsACwwK4AsACuAK8AsICwALBAsICwQLJAsQCwwLAAsQCwALCAsMCxAKtAsMCrQKvArgCwwKvArgCrwKzAsQCxQKrAsQCqwKtAsYCxQLEAsYCxALCAsUCTwJLAsUCSwKrAk8CxQLGAk8CxgJRAlECxgLHAlECxwJVAskCxwLGAskCxgLCAlUCxwLIAlUCyAJYAsoCyALHAsoCxwLJAskCwQLLAskCywLKAsgCygLMAsgCzALNAsoCywLOAsoCzgLMAs0CzALOAs0CzgLRAssC1QLPAssCzwLOAtECzgLPAtECzwLSAloCzQLRAloC0QJdAl0C0QLSAl0C0gJhAtYC1ALTAtYC0wLQAtQCZgJiAtQCYgLTAmYC1AK7AmYCuwJpAr8CuwLUAr8C1ALWAtUCywLBAtUCwQK+AlgCyALNAlgCzQJaArAC1wKFArAChQKAAqYCoQLXAqYC1wKwAqECkwKPAqECjwLXAtcCjwKJAtcCiQKFApgCmgLYApgC2ALbApoCKgIoApoCKALYAtgCKAIlAtgCJQLZAtsC2ALZAtsC2QLcApQCmALbApQC2wLeAt4C2wLcAt4C3ALgAt8C4gLkAt8C5ALjApUC3wLjApUC4wKOAuMC5AJ+AuMCfgKDAo4C4wKDAo4CgwKLAukC5QLkAukC5ALiAuUC5wJ+AuUCfgLkAuYC/gLnAuYC5wLlAuoC5gLlAuoC5QLpAuwC6gLpAuwC6QLrAusC6QLiAusC4gLuAkwC7ALrAkwC6wJIAkgC6wLuAkgC7gJGAu0C7wJAAu0CQAJFAuEC3QLvAuEC7wLtAt0C2gLwAt0C8ALvAu8C8AI+Au8CPgJAAtoCJgIhAtoCIQLwAvACIQIfAvACHwI+AvEC8gLqAvEC6gLsAk4C8QLsAk4C7AJMAvIC8QLzAvIC8wL1AvMC8QJOAvMCTgJSAvUC8wL0AvUC9AL2AlQC9ALzAlQC8wJSAvYC+AL3AvYC9wL1AvcC+wLyAvcC8gL1AvkC9wL4AvkC+AIFA/wC+wL3AvwC9wL5AvsC/AL+AvsC/gLmAvIC+wLmAvIC5gLqAv0CAAMBA/0CAQP/AgIDAAP9AgID/QL6AgADcAJyAgADcgIBA3ACAAMCA3ACAgNsAmwCAgMDA2wCAwNqAgYDAwMCAwYDAgP6AmoCAwMEA2oCBANnAggDBAMDAwgDAwMGAwUD+AIJAwUDCQMHAwQDCAMLAwQDCwMNAwcDCQMOAwcDDgMKAw4DEAMMAw4DDAMKAwkDEwMPAwkDDwMOAw8DEQMQAw8DEAMOAxEDWwJeAhEDXgIQAxADXgJjAhADYwIMAxIDVwJbAhIDWwIRAxMDEgMRAxMDEQMPA1cCEgP0AlcC9AJUAvYC9AISA/YCEgMTAxMDCQP4AhMD+AL2AmcCBAMNA2cCDQNkAgEDcgJ2AgEDdgIUA/8CAQMUA/8CFAPoAhQDdgJ5AhQDeQJ8AugCFAN8AugCfAJ/AhkCIgIVAxkCFQMWAvgBFgMVA/gBFQMiAhQCFgIVAxQCFQMWAxQCFgMXAxQCFwMSAvgB8gEXA/gBFwMWA+8BEgIXA+8BFwPyARkDGAMAAhkDAAJ3ABgDGgP9ARgD/QEAAh0DGwMYAx0DGAMZAxsDHAMaAxsDGgMYAx4DIAMcAx4DHAMbAx8DHgMbAx8DGwMdA80AIQMeA80AHgMfAyEDIgMgAyEDIAMeAyMDJAMiAyMDIgMhA9EAIwMhA9EAIQPNACUDIwPRACUD0QDTACYDJAMjAyYDIwMlAyUD0wDXACUD1wAnAyYDJQMnAyYDJwMoAygDJwMpAygDKQMqAycD1wDZACcD2QApAykD2QDdACkD3QArAyoDKQMrAyoDKwMsAywDKwMtAywDLQMuAysD3QDfACsD3wAtAy0D3wDjAC0D4wAvAy4DLQMvAy4DLwMwAzADLwMxAzADMQMzAy8D4wDmAC8D5gAxA+sANQMyA+sAMgPnADUDNgM0AzUDNAMyA+8ANwM1A+8ANQPrADcDOAM2AzcDNgM1AzoDOAM3AzoDNwM5AzkDNwPvADkD7wDyADkDOwM8AzkDPAM6A/IA9AA7A/IAOwM5AzsD9AD4ADsD+AA9AzwDOwM9AzwDPQM+Az8DQAM+Az8DPgM9A/oAPwM9A/oAPQP4AEEDPwP6AEED+gD+AEIDQAM/A0IDPwNBAwABQwNBAwABQQP+AEMDRANCA0MDQgNBA0UDQwMAAUUDAAEEAUYDRANDA0YDQwNFA0cDRQMEAUcDBAEHAUgDRgNFA0gDRQNHA0cDSQNLA0cDSwNIAwcBSgNJAwcBSQNHA0kDSgNOA0kDTgNMA0sDSQNMA0sDTANNA08DUQNNA08DTQNMA1ADTwNMA1ADTANOA1MDTwNQA1MDUANVA1cDUQNPA1cDTwNTA1IDVANZA1IDWQNYA1YDUgNYA1YDWANaA1gDWQNeA1gDXgNcA1oDWANcA1oDXANgA1sDXQNiA1sDYgNhA18DWwNhA18DYQNjA2EDYgNlA2EDZQNkA2MDYQNkA2MDZANmA2kDZwNkA2kDZANlA2cDaANmA2cDZgNkA2wDaANnA2wDZwNqA2oDZwNpA2oDaQNrA28DbQNqA28DagNrA20DbgNsA20DbANqA3QDbgNtA3QDbQNwA3ADbQNvA3ADbwNyA3gDdgNxA3gDcQNzA3YDdwN1A3YDdQNxA3oDdwN2A3oDdgN5A3kDdgN4A3kDeAMQARIBewN5AxIBeQMQAXsDfAN6A3sDegN5A30DewMSAX0DEgEWAX4DfAN7A34DewN9A30DFgEZAX0DGQF/A34DfQN/A34DfwOAA38DGQEcAX8DHAGBA4ADfwOBA4ADgQOCA4QDgwOBA4QDgQMcAYMDhQOCA4MDggOBA4gDhgODA4gDgwOEA4YDhwOFA4YDhQODA4YDigOOA4YDjgOHA4gDjAOKA4gDigOGA4kDiwORA4kDkQOPA40DiQOPA40DjwOQA48DkgOUA48DlAOQA5EDkwOSA5EDkgOPA5IDkwOXA5IDlwOVA5QDkgOVA5QDlQOWA5UDmAOaA5UDmgOWA5cDmQOYA5cDmAOVA5sDmgOYA5sDmAOZA5YDmgOcA5YDnAOdA5sDngOcA5sDnAOaA58DnQOcA58DnAOeA5sDogOgA5sDoAOeA58DngOgA58DoAOhA6MDoQOgA6MDoAOiA5sDpgOkA5sDpAOiA6MDogOkA6MDpAOlA6cDpQOkA6cDpAOmA6cDpgOoA6cDqAOpA5sDqAOmA5sDrAOqA5sDqgOoA6kDqAOqA6kDqgOrA60DqwOqA60DqgOsA5sDrgOsA60DrAOuA60DrgOvA5sDmQOwA5sDsAOuA68DrgOwA68DsAOxA5cDsQOwA5cDsAOZA7IDtAOvA7IDrwOxA5MDsgOxA5MDsQOXA7MDtQO0A7MDtAOyA5EDswOyA5EDsgOTA7cDtgO0A7cDtAO1A7QDtgOtA7QDrQOvA7YDuAOrA7YDqwOtA7cDuQO4A7cDuAO2A7kDuwO6A7kDugO4A7gDugOpA7gDqQOrA7oDvAOnA7oDpwOpA70DvAO6A70DugO7A70DvwO+A70DvgO8A7wDvgOlA7wDpQOnA78DwQPAA78DwAO+A74DwAOjA74DowOlA8ADwgOhA8ADoQOjA8EDwwPCA8EDwgPAA8MDxQPEA8MDxAPCA8IDxAOfA8IDnwOhA8QDxgOdA8QDnQOfA8UDxwPGA8UDxgPEA8cDkAOUA8cDlAPGA8YDlAOWA8YDlgOdA8gDjQOQA8gDkAPHA8sDyAPHA8sDxwPFA8oDhwOOA8oDjgPJA80DygPJA80DyQPMA84DywPFA84DxQPDA9ADzQPMA9ADzAPPA9MD0APPA9MDzwPSA9EDzgPDA9EDwwPBA9QD0QPBA9QDwQO/A9YD0wPSA9YD0gPVA9kD1gPVA9kD1QPYA9cD1AO/A9cDvwO9A9kD2APbA9kD2wPcA9oD1wO9A9oDvQO7A90D2gO7A90DuwO5A98D3APbA98D2wPeA+ID3wPeA+ID3gPhA+AD3QO5A+ADuQO3A+MD4AO3A+MDtwO1A+ID4QPkA+ID5APlA+gD5QPkA+gD5APnA+YD4wO1A+YDtQOzA4gD6APnA4gD5wOMA4sD5gOzA4sDswORA+oD5QPoA+oD6APpA+kD6AOIA+kDiAOEAyEB6gPpAyEB6QMeAR4B6QOEAx4BhAMcAeID5QPqA+ID6gPrA+sD6gMhAesDIQHsA+0D3wPiA+0D4gPrA+8D7QPrA+8D6wPsA+4D3APfA+4D3wPtA/AD7gPtA/AD7QPvA1kBXwHvA1kB7wPsA+8DXwFjAe8DYwHwA/ID7gPwA/ID8APxA/ADYwFmAfADZgHxA/MD9QPyA/MD8gPxA2YB9gPzA2YB8wPxA/MD9gP3A/MD9wP0A/QDDgT1A/QD9QPzA2gB+AP2A2gB9gNmAfYD+AP6A/YD+gP3A2kB/QP8A2kB/AP5A/kD/AP/A/kD/wP7A/0DbQT+A/0D/gP8A/wD/gMABPwDAAT/AwAEAgQBBAAEAQT/A/8DAQQFBP8DBQT7AwIEXQQDBAIEAwQBBAEEAwQHBAEEBwQFBPcD+gMEBPcDBAQIBAgEBAQGBAgEBgQJBPcDCAQKBPcDCgT0AwoECAQJBAoECQQLBAoEDAQOBAoEDgT0AwsEDQQMBAsEDAQKBA0EzQPQAw0E0AMMBAwE0APTAwwE0wMOBA4E0wPWAw4E1gP1A8oDzQMNBMoDDQQPBA8EDQQLBA8ECwQQBIcDygMPBIcDDwSFA4UDDwQQBIUDEASCAwkEEQQQBAkEEAQLBBAEEQSAAxAEgAOCAwkEBgQSBAkEEgQRBBEEEgR+AxEEfgOAAxMEEgQGBBMEBgQUBHwDfgMSBHwDEgQTBHoDfAMTBHoDEwQVBBUEEwQUBBUEFAQWBHoDFQQXBHoDFwR3AxUEFgQYBBUEGAQXBBcEGAQcBBcEHAQaBHcDFwQaBHcDGgR1A3QDGQQdBHQDHQRuAxkEGwQeBBkEHgQdBB0EHgQgBB0EIAQfBG4DHQQfBG4DHwRsA2wDHwQhBGwDIQRoAx8EIAQiBB8EIgQhBCEEIgQkBCEEJAQjBGgDIQQjBGgDIwRmAyUEYwNmAyUEZgMjBCgEJQQjBCgEIwQkBCYEXwNjAyYEYwMlBCkEJgQlBCkEJQQoBCsEKAQkBCsEJAQuBCwEKQQoBCwEKAQrBDAELAQrBDAEKwQvBC8EKwQuBC8ELgQyBDQEMAQvBDQELwQzBDMELwQyBDMEMgQ2BDkENAQzBDkEMwQ3BDcEMwQ2BDcENgQ4BDsENwQ4BDsEOAQ+BDwEOQQ3BDwENwQ7BBsEPAQ7BBsEOwQeBB4EOwQ+BB4EPgQgBD4EOAQ2BD4ENgQ/BCAEPgQ/BCAEPwQiBD8ENgQyBD8EMgQuBCIEPwQuBCIELgQkBEAEQQQ6BEAEOgQ9BBgEQAQ9BBgEPQQcBBQEBgRBBBQEQQRABBYEFARABBYEQAQYBEEEQgQ1BEEENQQ6BAYEQwRCBAYEQgRBBEMERgRFBEMERQRCBEIERQQxBEIEMQQ1BEUESAQtBEUELQQxBEYESQRIBEYESARFBEkETARLBEkESwRIBEgESwQqBEgEKgQtBEsETgQnBEsEJwQqBEwETwROBEwETgRLBE8EVgNaA08EWgNOBE4EWgNgA04EYAMnBFEDVwNQBFEDUARRBFEEUARNBFEETQRSBE0DUQNRBE0DUQRTBFMEUQRSBFMEUgRUBFUESwNNA1UETQNTBFcEVQRTBFcEUwRUBFYESANLA1YESwNVBFgEVgRVBFgEVQRXBFoEWARXBFoEVwRZBFkEVwRUBFkEVARbBF0EWgRZBF0EWQRcBFwEWQRbBFwEWwReBAMEXQRcBAMEXARfBF8EXAReBF8EXgRgBAcEAwRfBAcEXwREBEQEXwRgBEQEYARHBFsEYQRgBFsEYAReBGEESgRHBGEERwRgBFIETQRKBFIESgRhBFQEUgRhBFQEYQRbBGIEXQQCBGIEAgRlBGIEYwRaBGIEWgRdBGQEngRjBGQEYwRiBGcEZARiBGcEYgRlBGUEAgQABGUEAARmBGgEZwRlBGgEZQRmBEADQgNkBEADZARnBD4DQANnBD4DZwRoBGkEPAM+A2kEPgNoBGsEaQRoBGsEaARmBGoEOgM8A2oEPANpBGwEagRpBGwEaQRrBP4DawRmBP4DZgQABGwEawT+A2wE/gNtBHAEagRsBHAEbARuBG0EbwRuBG0EbgRsBG4EbwR6AW4EegFxBHQEcARuBHQEbgRxBHYEdARxBHYEcQRzBHEEegF/AXEEfwFzBDYDOANwBDYDcAR0BDQDNgN0BDQDdAR2BHUEdwQwA3UEMAMzA3IEeAR3BHIEdwR1BHgEegR5BHgEeQR3BHcEeQQuA3cELgMwA3oEfAR7BHoEewR5BHkEewQsA3kELAMuA3wEfgR9BHwEfQR7BHsEfQQqA3sEKgMsA34EgAR/BH4EfwR9BH0EfwQoA30EKAMqA4AEoAGBBIAEgQR/BH8EgQQmA38EJgMoA4EEggSFBIEEhQQmA6ABogGCBKABggSBBKIBpwGEBKIBhASCBIIEhASHBIIEhwSFBIcEigSIBIcEiASFBIUEiAQkA4UEJAMmA4oEjQSLBIoEiwSIBIgEiwQiA4gEIgMkA40EjwSOBI0EjgSLBIsEjgQgA4sEIAMiA48EkgSRBI8EkQSOBI4EkQQcA44EHAMgA5IElQSUBJIElASRBJEElAQaA5EEGgMcA5UE9QH6AZUE+gGUBJQE+gH9AZQE/QEaA5cE8QH2AZcE9gGWBJgElwSWBJgElgSTBOgB6gHxAegB8QGXBOYB6AGXBOYBlwSYBOQB5gGYBOQBmASZBJkEmASTBJkEkwSQBOIB5AGZBOIBmQSaBJoEmQSQBJoEkASMBOAB4gGaBOABmgSbBJsEmgSMBJsEjASJBN4B4AGbBN4BmwScBJwEmwSJBJwEiQSGBJ0EvgHeAZ0E3gGcBIMEnQScBIMEnASGBKsBrgG+AasBvgGdBKYBqwGdBKYBnQSDBIAEkQGVAYAElQGgAY0BkQGABI0BgAR+BHwEiQGNAXwEjQF+BIUBiQF8BIUBfAR6BHgEgQGFAXgEhQF6BHIEfgGBAXIEgQF4BDoDagRwBDoDcAQ4A20E/QN7AW0EewFvBEIDRAOeBEIDngRkBEQDRgOfBEQDnwSeBJ4EnwSgBJ4EoARjBEgDVgSfBEgDnwRGA58EVgRYBJ8EWASgBFoEYwSgBFoEoARYBHsB/QNpAXsBaQFuAfUD1gPZA/UD2QPyA9kD3APuA9kD7gPyAyQBWQHsAyQB7AMhAaMEEAF4A6MEeAOhBKEEeANzA6EEcwOlBFQDowShBFQDoQRZA1kDoQSlBFkDpQReA10DpASmBF0DpgRiA6QEcgNvA6QEbwOmBKYEbwNrA6YEawNpA2IDpgRpA2IDaQNlA6cEogRVA6cEVQNQAwkBDwGiBAkBogSnBAcBCQGnBAcBpwRKA0oDpwRQA0oDUANOA6gEygDNAKgEzQAfA6oEqAQfA6oEHwMdA6kEyADKAKkEygCoBKsEqQSoBKsEqASqBKwErQSrBKwEqwSqBBkDrASqBBkDqgQdA3sAfQCtBHsArQSsBHcAewCsBHcArAQZA30AhACuBH0ArgStBK0ErgSxBK0EsQSrBIUAiQCwBIUAsASvBK8EsASzBK8EswSyBLMEtgS1BLMEtQSyBLEEtASpBLEEqQSrBLYEvgDDALYEwwC1BLQEwgDIALQEyACpBL4AtgS3BL4AtwS7ALYEswS4BLYEuAS3BLcEuAS6BLcEugS5BLsAtwS5BLsAuQS5ALkEugS8BLkEvAS7BLkAuQS7BLkAuwS1ALsEvAS+BLsEvgS9BLUAuwS9BLUAvQSzAL0EvgTABL0EwAS/BLMAvQS/BLMAvwSvAL8EwASmAL8EpgCqAK8AvwSqAK8AqgCsAMAEwQSjAMAEowCmAL4EwgTBBL4EwQTABMIElwCdAMIEnQDBBMEEnQChAMEEoQCjAMMElQCXAMMElwDCBLwEwwTCBLwEwgS+BMQEjwCVAMQElQDDBLoExATDBLoEwwS8BMUEjQCPAMUEjwDEBLgExQTEBLgExAS6BLAEiQCNALAEjQDFBLMEsATFBLMExQS4BMsExgS0AcsEtAHIBMgEtAGxAcgEsQHKBM0EywTIBM0EyATJBMkEyATKBMkEygTkBM8E0QTHBM8ExwTMBNAEzwTMBNAEzATOBNQE0gTPBNQEzwTQBNIE0wTRBNIE0QTPBNIE1QTXBNIE1wTTBNQE1gTVBNQE1QTSBNUE1gTZBNUE2QTYBNcE1QTYBNcE2ATaBNkE3gTcBNkE3ATYBNgE3ASpAdgEqQHaBNsE3QTgBNsE4ATfBKgB2wTfBKgB3wSsAeAE4gThBOAE4QTfBN8E4QSvAd8ErwGsAeEEygSxAeEEsQGvAeIE5ATKBOIEygThBOAEZQXjBOAE4wTiBOQE4gTjBOQE4wTlBOgEyQTkBOgE5ATlBOsE6ATlBOsE5QTmBOMEXgXmBOME5gTlBOkEzQTJBOkEyQToBO0E6QToBO0E6ATrBPEE7wTsBPEE7ATwBPAE7ATnBPAE5wTyBPEE8ATzBPEE8wT2BPAE8gT0BPAE9ATzBPME9AQYBfMEGAX1BPYE8wT1BPYE9QT3BPkE8QT2BPkE9gT4BPgE9gT3BPgE9wT6BP0E+QT4BP0E+AT7BPsE+AT6BPsE+gT8BP4E+wT8BP4E/AQABf8E/QT7BP8E+wT+BAIF/wT+BAIF/gQBBQEF/gQABQEFAAUDBQUFAgUBBQUFAQUEBQQFAQUDBQQFAwUGBQUFBAUHBQUFBwUKBQQFBgUIBQQFCAUHBQcFCAUfBQcFHwUJBQoFBwUJBQoFCQULBQwFCgULBQwFCwUOBQ0FBQUKBQ0FCgUMBRAFDQUMBRAFDAUPBQ8FDAUOBQ8FDgURBRAFDwUSBRAFEgXyBBIFDwURBRIFEQUTBfQE8gQSBfQEEgUUBRQFEgUTBRQFEwUVBRgF9AQUBRgFFAUWBRYFFAUVBRYFFQUXBRkFFgUXBRkFFwUbBRoFGAUWBRoFFgUZBR0FGgUZBR0FGQUcBRwFGQUbBRwFGwUeBQYFHQUcBQYFHAUIBQgFHAUeBQgFHgUfBR4FGwUhBR4FIQUgBR8FHgUgBR8FIAUjBSAFIQUzBSAFMwUiBSMFIAUiBSMFIgUkBSUFIwUkBSUFJAUmBQkFHwUjBQkFIwUlBQsFCQUlBQsFJQUnBScFJQUmBScFJgUoBSkFJwUoBSkFKAUqBQ4FCwUnBQ4FJwUpBREFDgUpBREFKQUrBSsFKQUqBSsFKgUsBREFKwUtBREFLQUTBS0FKwUsBS0FLAUuBRUFEwUtBRUFLQUvBS8FLQUuBS8FLgUwBRcFFQUvBRcFLwUxBTEFLwUwBTEFMAUyBSEFMQUyBSEFMgUzBRcFMQUhBRcFIQUbBTAFNAUzBTAFMwUyBTQFNQUiBTQFIgUzBSwFNAUwBSwFMAUuBSwFKgU1BSwFNQU0BSoFKAUmBSoFJgU1BTUFJgUkBTUFJAUiBR0FBgU3BR0FNwU2BRoFHQU2BRoFNgU5BTYFNwVJBTYFSQU4BTkFNgU4BTkFOAU6BRoFOQU7BRoFOwUYBTsFOQU6BTsFOgU8BT0FOwU8BT0FPAU+BfUEGAU7BfUEOwU9BfcE9QQ9BfcEPQU/BT8FPQU+BT8FPgVABfoE9wQ/BfoEPwVBBUEFPwVABUEFQAVCBfwE+gRBBfwEQQVDBUMFQQVCBUMFQgVEBUUFQwVEBUUFRAVGBfwEQwVFBfwERQUABQMFAAVFBQMFRQVHBUcFRQVGBUcFRgVIBQYFAwVHBQYFRwU3BTcFRwVIBTcFSAVJBUgFRgVLBUgFSwVKBUkFSAVKBUkFSgVNBUoFSwVdBUoFXQVMBU0FSgVMBU0FTAVOBU8FTQVOBU8FTgVQBTgFSQVNBTgFTQVPBToFOAVPBToFTwVRBVEFTwVQBVEFUAVSBToFUQVTBToFUwU8BVMFUQVSBVMFUgVUBVUFUwVUBVUFVAVWBT4FPAVTBT4FUwVVBUAFPgVVBUAFVQVXBVcFVQVWBVcFVgVYBUIFQAVXBUIFVwVZBVkFVwVYBVkFWAVaBUQFQgVZBUQFWQVbBVsFWQVaBVsFWgVcBUYFRAVbBUYFWwVLBUsFWwVcBUsFXAVdBV0FXAVaBV0FWgVMBUwFWgVYBUwFWAVOBU4FWAVWBU4FVgVQBVAFVgVUBVAFVAVSBecEXwUQBecEEAXyBGEFDQUQBWEFEAVfBWUFYAVeBWUFXgXjBGQFBQUNBWQFDQVhBWYFYgVgBWYFYAVlBd0EZgVlBd0EZQXgBGgFagVjBWgFYwVnBdkEaAVnBdkEZwXeBNYEaQVoBdYEaAXZBGkFbAVqBWkFagVoBW0F/wQCBW0FAgVrBWsFAgUFBWsFBQVkBXAFbgVsBXAFbAVpBW0FbwX9BG0F/QT/BP0EbwVyBf0EcgX5BG4FcAVzBW4FcwVxBXEFcwXqBHEF6gTuBPkEcgXvBPkE7wTxBHAF1ATQBHAF0ARzBXMF0ATOBHMFzgTqBNYE1ARwBdYEcAVpBdcE2gR0BdcEdAV2BakBdQV0BakBdAXaBHcFdgV0BXcFdAV1BXgFdgV3BXgFdwV5BdME1wR2BdMEdgV4BdMEeAV6BdMEegXRBHkFewV6BXkFegV4BccE0QR6BccEegV7BccEewV8BccEfAWZAXkFfQV8BXkFfAV7BZ0BmQF8BZ0BfAV9BXcFfgV9BXcFfQV5BX0FfgWfAX0FnwGdAZ8BfgV/BZ8BfwWjAXcFdQV/BXcFfwV+BakBowF/BakBfwV1BVsBFQARAFsBEQBdAYAFGAAVAIAFFQBbAVcBUQFOAVcBTgGABRoAGACABRoAgAVOAUIBPwGDBUIBgwWBBSsAQgGBBSsAgQWCBYEFgwWEBYEFhAWCBT8BPQGFBT8BhQWDBYMFhQWGBYMFhgWEBYUFhwWJBYUFiQWGBT0BOQGHBT0BhwWFBYgFiwWMBYgFjAWKBToBMwGLBToBiwWIBYsFMwExAYsFMQGNBYwFiwWNBYwFjQWOBZAFjgWNBZAFjQWPBY8FjQUxAY8FMQEtASoBkQWPBSoBjwUtAZEFkgWQBZEFkAWPBZMFkQUqAZMFKgEoAZQFkgWRBZQFkQWTBZMFlQWWBZMFlgWUBSgBJQGVBSgBlQWTBZcFmAWWBZcFlgWVBSIBlwWVBSIBlQUlAZoFmAWXBZoFlwWZBZkFlwUiAZkFIgEfAZwFmgWZBZwFmQWbBZsFmQUfAZsFHwEbAZsFGwEYAZsFGAGdBZwFmwWdBZwFnQWeBZ0FGAEVAZ0FFQGfBZ4FnQWfBZ4FnwWgBZ8FFQETAZ8FEwGhBaAFnwWhBaAFoQWiBaEFpAWmBaEFpgWiBRMBDgGkBRMBpAWhBacFowUNAacFDQEKAagFpQWjBagFowWnBaoFqAWnBaoFpwWpBakFpwUKAakFCgEGAQMBqwWpBQMBqQUGAasFrAWqBasFqgWpBasFAwEBAasFAQGtBawFqwWtBawFrQWuBa0FrwWwBa0FsAWuBQEB/QCvBQEBrwWtBa8F/QD7AK8F+wCxBbAFrwWxBbAFsQWyBbEFswW0BbEFtAWyBfsA9wCzBfsAswWxBbMF9wD1ALMF9QC1BbQFswW1BbQFtQW2BbUFtwW4BbUFuAW2BfUA8QC3BfUAtwW1BbcF8QDuALcF7gC5BbgFtwW5BbgFuQW6BbkF7gDsALkF7AC7BboFuQW7BboFuwW8BbsFvgXABbsFwAW8BewA6QC+BewAvgW7Bb0FwQXCBb0FwgW/BegA4gDBBegAwQW9BeIA4ADDBeIAwwXBBcEFwwXEBcEFxAXCBcMFxQXGBcMFxgXEBeAA3ADFBeAAxQXDBdwA2gDHBdwAxwXFBcUFxwXIBcUFyAXGBccFyQXKBccFygXIBdoA1gDJBdoAyQXHBdYA1ADLBdYAywXJBckFywXMBckFzAXKBcsFzQXOBcsFzgXMBdQA0ADNBdQAzQXLBdAAzgDPBdAAzwXNBc0FzwXQBc0F0AXOBdIF0AXPBdIFzwXRBdEFzwXOANEFzgDLANQF0gXRBdQF0QXTBdMF0QXLANMFywDHANUF0wXHANUFxwDEANcF1AXTBdcF0wXVBdkF2gXYBdkF2AXWBb8A2QXWBb8A1gXFANkF2wXcBdkF3AXaBb8AvADbBb8A2wXZBdsF3QXeBdsF3gXcBbwAuADdBbwA3QXbBd0FuAC2AN0FtgDfBd4F3QXfBd4F3wXgBd8F4QXiBd8F4gXgBbYAsgDhBbYA4QXfBeEFsgCwAOEFsADjBeIF4QXjBeIF4wXkBeMF5QXmBeMF5gXkBbAArQDlBbAA5QXjBeUF5wXoBeUF6AXmBa0AqQDnBa0A5wXlBakApwDpBakA6QXnBecF6QXqBecF6gXoBewF6gXpBewF6QXrBesF6QWnAOsFpwCkAO4F7AXrBe4F6wXtBe0F6wWkAO0FpACgAO8F7QWgAO8FoACcAPAF7gXtBfAF7QXvBZgA8QXvBZgA7wWcAPEF8gXwBfEF8AXvBfQF8gXxBfQF8QXzBfMF8QWYAPMFmACTAJAA9QXzBZAA8wWTAPUF9gX0BfUF9AXzBfgF9gX1BfgF9QX3BfcF9QWQAPcFkACLAPkF9wWLAPkFiwCHAPoF+AX3BfoF9wX5BfkFhwCCAPkFggD8BfoF+QX8BfoF/AX+BYEAfgD/BYEA/wX7BfsF/wUABvsFAAb9Bf8FAQYCBv8FAgYABn4AegABBn4AAQb/BXoAeAADBnoAAwYBBgEGAwYEBgEGBAYCBgYGBAYDBgYGAwYFBgUGAwZ4AAUGeAB1AAcGCQYGBgcGBgYFBnEABwYFBnEABQZ1AAwGCgYIBgwGCAYLBgsGCAZyAAsGcgBsAA0GDgYMBg0GDAYLBmkADQYLBmkACwZsABAGDgYNBhAGDQYPBg8GDQZpAA8GaQBmABIGEAYPBhIGDwYRBhEGDwZmABEGZgBiABMGEQZiABMGYgBgABQGEgYRBhQGEQYTBhYGFAYTBhYGEwYVBhUGEwZgABUGYABcABcGFQZcABcGXABaABgGFgYVBhgGFQYXBhkGGgYYBhkGGAYXBlcAGQYXBlcAFwZaABwGGgYZBhwGGQYbBhsGGQZXABsGVwBUAB4GHAYbBh4GGwYdBh0GGwZUAB0GVABQAB8GHQZQAB8GUABOACAGHgYdBiAGHQYfBiIGIAYfBiIGHwYhBiEGHwZOACEGTgBKACMGIQZKACMGSgBIACQGIgYhBiQGIQYjBiUGJwYkBiUGJAYjBkQAJQYjBkQAIwZIACoGKAYmBioGJgYpBikGJgZFACkGRQBBAD8AKwYpBj8AKQZBACsGLAYqBisGKgYpBi0GLgYsBi0GLAYrBj0ALQYrBj0AKwY/ADAGLgYtBjAGLQYvBi8GLQY9AC8GPQA7ADEGLwY7ADEGOwA5ADIGMAYvBjIGLwYxBjcAMwYxBjcAMQY5ADMGNAYyBjMGMgYxBjgGNAYzBjgGMwY2BjYGMwY3ADYGNwA1ADkGNQY0ADkGNAAxADoGNwY1BjoGNQY5BjsGOQYxADsGMQAvADwGOgY5BjwGOQY7Bj4GPAY7Bj4GOwY9Bj0GOwYvAD0GLwAtACsAPgY9BisAPQYtACsAQAY/BisAPwY+Bj8GQQY8Bj8GPAY+BkAGQgZBBkAGQQY/BkIGRAZDBkIGQwZBBkEGQwY6BkEGOgY8BkMGRQY3BkMGNwY6BkQGRwZFBkQGRQZDBkYGSQY0BkYGNAY4BkgGSgZJBkgGSQZGBkkGSgZMBkkGTAZLBjQGSQZLBjQGSwYyBksGTQYwBksGMAYyBkwGTgZNBkwGTQZLBk0GTwYuBk0GLgYwBk4GUAZPBk4GTwZNBlEGTwZQBlEGUAZSBiwGLgZPBiwGTwZRBlEGUgZUBlEGVAZTBiwGUQZTBiwGUwYqBlMGVgYoBlMGKAYqBlQGWAZWBlQGVgZTBlUGWQYkBlUGJAYnBlcGWgZZBlcGWQZVBlkGWwYiBlkGIgYkBloGXAZbBloGWwZZBlsGXAZeBlsGXgZdBiIGWwZdBiIGXQYgBl0GXwYeBl0GHgYgBl4GYAZfBl4GXwZdBl8GYAZiBl8GYgZhBh4GXwZhBh4GYQYcBmEGYwYaBmEGGgYcBmIGZAZjBmIGYwZhBhgGGgZjBhgGYwZlBmUGYwZkBmUGZAZmBhYGGAZlBhYGZQZnBmcGZQZmBmcGZgZoBmkGZwZoBmkGaAZqBhQGFgZnBhQGZwZpBhIGFAZpBhIGaQZrBmsGaQZqBmsGagZsBm0GawZsBm0GbAZuBhAGEgZrBhAGawZtBm8GDgYQBm8GEAZtBnAGbwZtBnAGbQZuBpsNjg1xBpsNcQZzBo4Njw10Bo4NdAZxBnMGcQZyBnMGcgaSBnEGdAZ1BnEGdQZyBngGdQZ0BngGdAZ2BpANjw1wBpANcAZ3BpINkA13BpINdwZ8Bn4GeAZ2Bn4GdgZ6BpMNkQ17BpMNewaABoEGfQZ5BoEGeQZ/BpQNkw2ABpQNgAaDBoQGgQZ/BoQGfwaCBpQNlQ2FBpQNhQaCBoIGhQaHBoIGhwaEBpUNlg2IBpUNiAaFBoUGiAaJBoUGiQaHBpcNlg0EBpcNBAYGBosGiQaIBosGiAaKBowGjgaLBowGiwaKBpgNjAaKBpgNigaXDZEGjwaNBpEGjQaQBpoNmQ0KBpoNCgYMBnMGkgaRBnMGkQaQBpsNcwaQBpsNkAaaDZIGlQaTBpIGkwaRBo8GkQaTBo8GkwaUBpYGlAaTBpYGkwaVBpkGlgaVBpkGlQaXBpUGkgZyBpUGcgaXBpoGmQaXBpoGlwaYBpcGcgZ1BpcGdQaYBp0GlgaZBp0GmQabBpsGmQaaBpsGmgacBp4GmwacBp4GnAafBqAGnQabBqAGmwaeBqEGngafBqEGnwakBqMGoAaeBqMGngahBqIGoQakBqIGpAalBsAGowahBsAGoQaiBqcGpQakBqcGpAamBqYGpAafBqYGnwaoBqwGpwamBqwGpgaqBqoGpgaoBqoGqAZ+Bq4GqwapBq4GqQatBq0GqQZ9Bq0GfQaBBrAGrgatBrAGrQavBq8GrQaBBq8GgQaEBq8GhAaHBq8GhwaxBrAGrwaxBrAGsQayBrEGhwaJBrEGiQazBrIGsQazBrIGswa0BrQGswa1BrQGtQa2BrMGiQaLBrMGiwa1BrYGtQa3BrYGtwa5BrUGiwaOBrUGjga3BroGuAa7BroGuwa8BrgGjwa9BrgGvQa7BrwGuwajBrwGowbABrsGvQagBrsGoAajBo8GlAa+Bo8Gvga9BqAGvQa+BqAGvgadBpYGnQa+BpYGvgaUBr8GvAbABr8GwAbBBiQHuga8BiQHvAa/BsEGwAaiBsEGogbDBsIGwQbDBsIGwwbFBi0HvwbBBi0HwQbCBsMGogalBsMGpQbEBsUGwwbEBsUGxAbGBscGyQbCBscGwgbFBssGxwbFBssGxQbGBs0GzwbKBs0GygbIBs4GzQbIBs4GyAbMBtIG0AbNBtIGzQbOBtAG0QbPBtAGzwbNBtUG0QbQBtUG0AbTBtMG0AbSBtMG0gbUBtQG2AbWBtQG1gbTBtMG1gbXBtMG1wbVBtYG2QbbBtYG2wbXBtgG2gbZBtgG2QbWBtoG3QbcBtoG3AbZBtkG3AbeBtkG3gbbBtwG3QbhBtwG4QbfBt4G3AbfBt4G3wbgBt8G4gbjBt8G4wbgBuEG5AbiBuEG4gbfBuIG5QbnBuIG5wbjBuQG6QblBuQG5QbiBusG7AboBusG6AbmBu0G6wbmBu0G5gbqBu8G7AbrBu8G6wbuBu4G6wbtBu4G7QbwBvMG7wbuBvMG7gbxBvEG7gbwBvEG8AbyBvQG8QbyBvQG8gb2BvUG8wbxBvUG8Qb0BvQG9wb5BvQG+Qb1BvYG+Ab3BvYG9wb0BvcG+Ab8BvcG/Ab6BvkG9wb6BvkG+gb7BvsG+gb9BvsG/Qb+BvoG/Ab/BvoG/wb9Bv0GAAcBB/0GAQf+Bv8GAgcAB/8GAAf9BgAHAwcHBwAHBwcBBwIHBQcDBwIHAwcABwgHAwcFBwgHBQcKBwwHBwcDBwwHAwcIBxIHDgcIBxIHCAcKBw4HEAcMBw4HDAcIBxUHDwcNBxUHDQcTBxMHDQcRBxMHEQcUBxsHFwcTBxsHEwcUBxcHGQcVBxcHFQcTBxYHHAcdBxYHHQcYBxoHHgccBxoHHAcWBxwHHwchBxwHIQcdBx4HIAcfBx4HHwccBx8HIAewBh8HsAayBiEHHweyBiEHsga0Bh0HIQciBx0HIgclByEHtAa2BiEHtgYiByIHtga5BiIHuQYjByUHIgcjByUHIwcoByYHJQcoByYHKAcqBxgHHQclBxgHJQcmBykHJAe/BikHvwYtBysHKQctBysHLQcuBy4HLQfCBi4HwgbJBjIHLAcvBzIHLwcwBzAHLwfKBjAHygbPBjEHMAfPBjEHzwbRBjMHMgcwBzMHMAcxBzUHNAcyBzUHMgczBzQHNgcsBzQHLAcyBzkHNwc0BzkHNAc1BzcHBgc2BzcHNgc0BzwHOwc4BzwHOAc6BwEHBwc4BwEHOAc7B/kG+wY7B/kGOwc8B/4GAQc7B/4GOwf7Bj0HPAc6Bz0HOgc/B/UG+QY8B/UGPAc9Bz8HQwdABz8HQAc9B0AH8wb1BkAH9QY9B0MHRQdBB0MHQQdAB+8G8wZAB+8GQAdBB0QHQgdGB0QHRgdHB0YHQgc+B0YHPgdJB0gHTwdHB0gHRwdGB0oHSAdGB0oHRgdJB0kHNQczB0kHMwdKBz4HOQc1Bz4HNQdJB0oHMwcxB0oHMQdLB0wHSAdKB0wHSgdLB0sHMQfRBksH0QbVBtUG1wZMB9UGTAdLB9cG2wZNB9cGTQdMB08HSAdMB08HTAdNB9sG3gZOB9sGTgdNB1AHTwdNB1AHTQdOB08HUAdRB08HUQdHB04HUwdSB04HUgdQB1AHUgdUB1AHVAdRB1MHVwdUB1MHVAdSB1EHVAdVB1EHVQdbB1cHWAdVB1cHVQdUB+AG4wZXB+AGVwdTB+MG5wZYB+MGWAdXB1wHVgdZB1wHWQdaB1oHWQfoBloH6AbsBuwG7wZBB+wGQQdaB0UHXAdaB0UHWgdBB1sHRAdHB1sHRwdRB94G4AZTB94GUwdOBzYHBgcLBzYHCwddBywHNgddBywHXQcnBycHXQcVBycHFQcZB10HCwcPB10HDwcVBx4HYQdeBx4HXgcgByAHXgeuBiAHrgawBl4HXwerBl4HqwauBmEHYgdfB2EHXwdeBxoHZAdhBxoHYQceB2QHZgdiB2QHYgdhB2UHaQdqB2UHagdoBxsHFAdpBxsHaQdlB2kHCQcEB2kHBAdqBxQHEQcJBxQHCQdpB28HaAdqB28HagdrB2sHagcEB2sHBAdtB2wHawdtB2wHbQeEB3AHbwdrB3AHawdsB3IHcQdvB3IHbwdwB3EHdAdoB3EHaAdvB9IGzgZxB9IGcQdyB84GzAZ0B84GdAdxB3MHywbGBnMHxgZ1B2cHcwd1B2cHdQdjB2MHdQd2B2MHdgdgB3UHxgbEBnUHxAZ2B2AHdgenBmAHpwasBnYHxAalBnYHpQanBncHcgdwB3cHcAd4B9QG0gZyB9QGcgd3B3gHewd5B3gHeQd3B3kH2AbUBnkH1AZ3B3sHfAd6B3sHegd5B9oG2AZ5B9oGeQd6B3wHewd9B3wHfQd+B30Hewd4B30HeAeBB38Hiwd+B38Hfgd9B4IHfwd9B4IHfQeBB4EHbAeEB4EHhAeCB3gHcAdsB3gHbAeBB4MHhQeHB4MHhweGB4gHgAeDB4gHgweGB4YHhwf4BoYH+Ab2BvYG8gaIB/YGiAeGB/IG8AaJB/IGiQeIB4wHgAeIB4wHiAeJB/AG7QaKB/AGigeJB44HjAeJB44HiQeKB4sHjQePB4sHjwd+B4oHkweRB4oHkQeOB40HkAeUB40HlAePB5QHkAeSB5QHkgeWB48HlAeVB48HlQeZB5UHlAeWB5UHlgeXB5cHlgfkBpcH5AbhBpYHkgfpBpYH6QbkBpgHlwfhBpgH4QbdBpkHlQeXB5kHlweYB90G2gZ6B90GegeYB3wHmQeYB3wHmAd6B5kHfAd+B5kHfgePB+0G6gaTB+0GkweKB4cHmgf8BocH/Ab4BoUHbgeaB4UHmgeHB5oHAgf/BpoH/wb8Bm4HBQcCB24HAgeaB58GnAabB58GmweoBn4GqAabB34GmwecB5oGnAebB5oGmwecBpoGmAadB5oGnQecB34GnAedB34GnQd4BnUGeAadB3UGnQeYBp8HBAaGBp8HhgaeB54HhgaDBp4HgwagB6MHnweeB6MHngehB6EHngegB6EHoAeiB6QHoQeiB6QHogemB6UHowehB6UHoQekB9AFpQekB9AFpAenB6cHpAemB6cHpgeoB6kHpweoB6kHqAeqB84F0AWnB84FpwepB6sHzAXOBasHzgWpB6wHqwepB6wHqQeqB6sHrQfKBasHygXMBawHrgetB6wHrQerB64HsAevB64HrwetB60HrwfIBa0HyAXKBa8HsQfGBa8HxgXIBbAHsgexB7AHsQevB7IHtAezB7IHswexB7EHswfEBbEHxAXGBbMHtQfCBbMHwgXEBbQHtge1B7QHtQezB7YHuQe3B7YHtwe1B7UHtwe/BbUHvwXCBbwFwAW4B7wFuAe7B7sHuAe6B7sHuge8B7oFvAW7B7oFuwe9B70Huwe8B70HvAe+B8AHvwe9B8AHvQe+B78HuAW6Bb8HugW9B78HwAfCB78HwgfBB7gFvwfBB7gFwQe2BcEHwwe0BcEHtAW2BcIHxAfDB8IHwwfBB8UHwwfEB8UHxAfGB7IFtAXDB7IFwwfFB8cHsAWyBccHsgXFB8gHxwfFB8gHxQfGB64FsAXHB64FxwfJB8kHxwfIB8kHyAfKB8sHrAWuBcsHrgXJB8wHywfJB8wHyQfKB80HqgWsBc0HrAXLB84HzQfLB84HywfMB80HzgfRB80H0QfPB6oFzQfPB6oFzwfQB88H0gfUB88H1AfQB9EH0wfSB9EH0gfPB9UH0gfTB9UH0wfXB9YH1AfSB9YH0gfVB9gH2gfWB9gH1gfVB9wH2AfVB9wH1QfXB9kH3gffB9kH3wfbB90H4AfeB90H3gfZB94H4QfjB94H4wffB+AH5gfhB+AH4QfeB+IH5wfoB+IH6AfkB+UH6QfnB+UH5wfiB+cH6gfrB+cH6wfoB+kH7AfqB+kH6gfnB+8H6wfqB+8H6gftB+0H6gfsB+0H7AfuB/IH8AftB/IH7QfuB/AH8QfvB/AH7wftB/UH8QfwB/UH8AfzB/MH8AfyB/MH8gf0B/sH9wfzB/sH8wf0B/cH+Qf1B/cH9QfzB/4H+Af2B/4H9gf8B/wH9gf6B/wH+gf9BwAI/wf8BwAI/Af9B/8HpgX+B/8H/gf8B6IFpgX/B6IF/wcBCAEI/wcACAEIAAgCCAMIoAWiBQMIogUBCAQIAwgBCAQIAQgCCAMIBQieBQMIngWgBQQIBggFCAQIBQgDCAUIBwicBQUInAWeBQYICAgHCAYIBwgFCAoInAUHCAoIBwgJCAkIBwgICAkICAgLCA4ICggJCA4ICQgMCAwICQgLCAwICwgNCAwIDQgUCAwIFAgQCA4IDAgQCA4IEAgSCA8IFQgXCA8IFwgRCBMIFggVCBMIFQgPCBUIFggaCBUIGggYCBcIFQgYCBcIGAgZCBgIGwgdCBgIHQgZCBoIHAgbCBoIGwgYCBsIHAggCBsIIAgeCB0IGwgeCB0IHggfCCEIHwgeCCEIHgggCBwIIwgiCBwIIgggCCEIIAgiCCEIIggkCCUIJAgiCCUIIggjCCEIJAgmCCEIJggoCCUIJwgmCCUIJggkCCkIKAgmCCkIJggnCCEIKAgqCCEIKggsCCkIKwgqCCkIKggoCC0ILAgqCC0IKggrCC0ILwguCC0ILggsCCEILAguCCEILggwCCEIMAgyCC8IMQgwCC8IMAguCDMIMggwCDMIMAgxCCEIMgg0CDMINQg0CDMINAgyCCEINAg2CCEINggfCDUINwg2CDUINgg0CB0IHwg2CB0INgg3CDgINwg1CDgINQg6CBkIHQg3CBkINwg4CDkIOAg6CDkIOgg7CBcIGQg4CBcIOAg5CD0IOwg6CD0IOgg8CDoINQgzCDoIMwg8CDwIMwgxCDwIMQg+CD0IPAg+CD0IPgg/CD8IPghACD8IQAhBCD4IMQgvCD4ILwhACEAILwgtCEAILQhCCEMIQQhACEMIQAhCCEMIQghECEMIRAhFCEIILQgrCEIIKwhECEUIRAhGCEUIRghHCEQIKwgpCEQIKQhGCEYIKQgnCEYIJwhICEcIRghICEcISAhJCEkISAhKCEkISghLCEgIJwglCEgIJQhKCEoIJQgjCEoIIwhMCEsISghMCEsITAhNCE0ITAgaCE0IGggWCEwIIwgcCEwIHAgaCE4ITQgWCE4IFggTCFEISwhNCFEITQhOCFAITwgUCFAIFAgNCFMIUghPCFMITwhQCFQISQhLCFQISwhRCFYIVQhSCFYIUghTCFkIWAhVCFkIVQhWCFcIRwhJCFcISQhUCFoIRQhHCFoIRwhXCFwIWwhYCFwIWAhZCF8IXghbCF8IWwhcCF0IQwhFCF0IRQhaCF8IYghhCF8IYQheCGAIQQhDCGAIQwhdCGMIPwhBCGMIQQhgCGUIZAhhCGUIYQhiCGgIZwhkCGgIZAhlCGYIPQg/CGYIPwhjCGkIOwg9CGkIPQhmCGgIawhqCGgIaghnCG4IbQhqCG4IaghrCGwIOQg7CGwIOwhpCA4IEghtCA4IbQhuCBEIFwg5CBEIOQhsCHAIbwhuCHAIbghrCG8ICggOCG8IDghuCJgFmgVvCJgFbwhwCJoFnAUKCJoFCghvCGgIcQhwCGgIcAhrCHEIcgiYBXEImAVwCHMIcQhoCHMIaAhlCHUIcghxCHUIcQhzCHQIcwhlCHQIZQhiCHYIdQhzCHYIcwh0CHgIcgh1CHgIdQh3CHUIdgh5CHUIeQh3CHcIegh7CHcIewh4CHkIfQh6CHkIegh3CHoIfAhcCnoIXAp7CH0Ifgh8CH0IfAh6CH8IgAh+CH8Ifgh9CHkIgQh/CHkIfwh9CIIIhQiACIIIgAh/CIQIggh/CIQIfwiBCIIIhAiJCIIIiQiGCIcIhQiCCIcIggiGCIcIhgiKCIcIigiLCIYIiQiPCIYIjwiKCIsIigiNCIsIjQjrCIoIjwiTCIoIkwiNCJgIkgiOCJgIjgiUCJQIjgiICJQIiAiWCJUIlAiWCJUIlggOCZoImAiUCJoIlAiVCJwImwiXCJwIlwiZCJsIngiRCJsIkQiXCKAInwibCKAImwicCJ8IogieCJ8IngibCKQIowifCKQInwigCKMIpgiiCKMIogifCKgIpwijCKgIowikCKcIqgimCKcIpgijCKwIqwinCKwIpwioCKsIrgiqCKsIqginCLAIrwirCLAIqwisCK8IsgiuCK8IrgirCLcIswivCLcIrwiwCLMItgiyCLMIsgivCLgItAizCLgIswi3CLQIowm2CLQItgizCLsIuQi3CLsItwiwCLoIuAi3CLoItwi5CLkIvAi+CLkIvgi6CLsIvQi8CLsIvAi5CL0IwgjACL0IwAi8CL4IvAjACL4IwAjECMEIxgjFCMEIxQi/CMMIvwjFCMMIxQjHCMYIyQjICMYIyAjFCMcIxQjICMcIyAjKCM0IywjICM0IyAjJCMoIyAjLCMoIywjMCM8IzAjLCM8IywjOCM4IywjNCM4IzQjQCKIJzwjOCKIJzgi1CLUIzgjQCLUI0AixCLEI0AjRCLEI0QitCNAIzQjTCNAI0wjRCK0I0QjSCK0I0gipCNEI0wjUCNEI1AjSCNQI0wjVCNQI1QjWCNMIzQjJCNMIyQjVCNcI1QjJCNcIyQjYCNkI1gjVCNkI1QjXCGIG1wjYCGIG2AhkBmAG2QjXCGAG1whiBl4G2gjZCF4G2QhgBtoI2wjWCNoI1gjZCFwG3AjaCFwG2gheBtwI3QjbCNwI2wjaCFoG3gjcCFoG3AhcBt4I3wjdCN4I3QjcCFcG4AjeCFcG3ghaBuAI4gjfCOAI3wjeCOQI4QhYBuQIWAZUBuYI4wjhCOYI4QjkCOUI5AhUBuUIVAZSBucI5gjkCOcI5AjlCIsI6wjjCIsI4wjmCOcIhwiLCOcIiwjmCOkI6AjnCOkI5wjlCOcI6AiFCOcIhQiHCHwIfgjoCHwI6AjpCOgIfgiACOgIgAiFCFAG6QjlCFAG5QhSBlAGXAp8CFAGfAjpCOII6gjsCOII7AjfCO4I7AjqCO4I6giMCO8I7QjsCO8I7AjuCOwI7QjdCOwI3QjfCJ0I7giMCJ0IjAiQCKEI7wjuCKEI7gidCKUI8AjvCKUI7wihCPAI8QjtCPAI7QjvCKkI0gjwCKkI8AilCNII1AjxCNII8QjwCO0I8QjbCO0I2wjdCPEI1AjWCPEI1gjbCPII8whkBvIIZAbYCMYI8gjYCMYI2AjJCMEI9AjyCMEI8gjGCPQI9gjzCPQI8wjyCL0I+Aj1CL0I9QjCCPgI+Qj3CPgI9wj1CLsI+gj4CLsI+Ai9CPoIrAf5CPoI+Qj4CPsIrgesB/sIrAf6CPwI+wj6CPwI+gi7CP4I/Qj7CP4I+wj8CP0IsAeuB/0Irgf7CAAJ/wj9CAAJ/Qj+CP8IsgewB/8IsAf9CAIJAQn/CAIJ/wgACQEJtAeyBwEJsgf/CAQJAwkBCQQJAQkCCQMJtge0BwMJtAcBCQcJBQkDCQcJAwkECQUJuQe2BwUJtgcDCboHBgkJCboHCQm8BwYJCAkLCQYJCwkJCbwHCQkKCbwHCgm+BwkJCwkMCQkJDAkKCQwJCwmVCAwJlQgOCQsJCAmaCAsJmgiVCA8JDQkMCQ8JDAkOCQoJDAkNCQoJDQkXCQ8JDgmWCA8JlggQCRAJEwkRCRAJEQkPCQ0JDwkRCQ0JEQkUCREJEgkVCREJFQkUCRMJIwkSCRMJEgkRCRQJFQkYCRQJGAkWCQ0JFAkWCQ0JFgkXCRcJFgnCBxcJwgfABxYJGAnEBxYJxAfCB8QHGAkZCcQHGQnGBxgJFQkbCRgJGwkZCcYHGQkaCcYHGgnIBxkJGwkcCRkJHAkaCRwJGwkdCRwJHQkeCRsJFQkSCRsJEgkdCR0JHwkgCR0JIAkeCRIJIwkfCRIJHwkdCR8JIQk3CR8JNwkgCSMJJAkhCSMJIQkfCScJJAkjCScJIwkTCSYJNAkiCSYJIgklCSkJJgklCSkJJQkoCYMIJwkTCYMIEwkQCYQIgQgpCYQIKQkoCYEIKwkqCYEIKgkpCSoJLAkmCSoJJgkpCSoJKwkvCSoJLwktCSwJKgktCSwJLQkuCS4JLQlcCC4JXAhZCC0JLwlfCC0JXwhcCF8ILwl0CF8IdAhiCC8JKwl2CC8Jdgh0CDAJLglZCDAJWQhWCDIJLAkuCTIJLgkwCTEJMAlWCDEJVghTCDMJMgkwCTMJMAkxCSYJLAkyCSYJMgk0CTIJMwk1CTIJNQk0CTQJNQk4CTQJOAkiCTUJMwmMCTUJjAk2CTUJNgk5CTUJOQk4CYsJOgk4CYsJOAk5CToJQQk9CToJPQk4CTgJPQlACTgJQAk8CTcJOwmECTcJhAkgCUEJQgk+CUEJPgk9CT0JPgljCT0JYwlACUUJRAlBCUUJQQk6CUQJRglCCUQJQglBCUkJSAlECUkJRAlFCUgJSglGCUgJRglECQAI/QdICQAISAlJCf0H+gdKCf0HSglICfsH9AdMCfsHTAlLCUsJTAlNCUsJTQlHCUwJTglPCUwJTwlNCfQH8gdOCfQHTglMCfIH7gdQCfIHUAlOCU4JUAlRCU4JUQlPCVAJUglTCVAJUwlRCe4H7AdSCe4HUglQCVQJUgnsB1QJ7AfpB1cJUwlSCVcJUglUCVUJVAnpB1UJ6QflB1kJVwlUCVkJVAlVCVoJXQlTCVoJUwlXCVwJWglXCVwJVwlZCWAJXglaCWAJWglcCV4JYQldCV4JXQlaCWQJYgleCWQJXglgCWIJZQlhCWIJYQleCT8JZgliCT8JYglkCWYJZwllCWYJZQliCWgJaQlnCWgJZwlmCUMJaAlmCUMJZgk/CUcJTQloCUcJaAlDCU0JTwlpCU0JaQloCWkJagllCWkJZQlnCU8JUQlqCU8JaglpCWoJXQlhCWoJYQllCVEJUwldCVEJXQlqCUAJYwlfCUAJXwlrCWsJXwlbCWsJWwluCTwJQAlrCTwJawltCW0JawluCW0JbglwCXAJbglxCXAJcQlzCW4JWwlYCW4JWAlxCXEJWAlWCXEJVgl0CXMJcQl0CXMJdAl2CXYJdAngB3YJ4AfdB3QJVgnmB3QJ5gfgB9cHdwl1CdcHdQncB3cJeAlyCXcJcgl1CdMHeQl3CdMHdwnXB3kJegl4CXkJeAl3CXsJeQnTB3sJ0wfRB30Jegl5CX0JeQl7CXwJewnRB3wJ0QfOB34JfQl7CX4Jewl8CYAJfwl9CYAJfQl+CX8JgQl6CX8Jegl9CR4Jggl/CR4JfwmACYIJgwmBCYIJgQl/CSAJhAmCCSAJggkeCYQJhQmDCYQJgwmCCTsJbAmFCTsJhQmECYEJgwmFCYEJhQmGCYYJhQlsCYYJbAlvCXgJhglvCXgJbwlyCXoJgQmGCXoJhgl4CRwJHgmACRwJgAmHCYAJfgmICYAJiAmHCYkJhwmICYkJiAmKCRoJHAmHCRoJhwmJCcoHiQmKCcoHignMB8gHGgmJCcgHiQnKB84HzAeKCc4Higl8CYoJiAl+CYoJfgl8CQAISQmLCQAIiwkCCEkJRQk6CUkJOgmLCQIIiwk5CQIIOQkECDYJBggECDYJBAg5CYwJCAgGCIwJBgg2CY0JjAkzCY0JMwkxCQsICAiMCQsIjAmNCVAIjQkxCVAIMQlTCA0ICwiNCQ0IjQlQCHYIKwmBCHYIgQh5CMAHvgcKCcAHCgkXCZYIiAiDCJYIgwgQCQcJBAmcCAcJnAiZCAQJAgmgCAQJoAicCKAIAgkACaAIAAmkCAAJ/gioCAAJqAikCKgI/gj8CKgI/AisCPwIuwiwCPwIsAisCPcI+QiOCfcIjgmQCfkIrAeqB/kIqgeOCZAJjgmRCZAJkQmTCY4JqgeoB44JqAeRCZMJkQmUCZMJlAmVCZEJqAemB5EJpgeUCZUJlAmXCZUJlwmYCZQJpgeiB5QJogeXCZgJlwmaCZgJmgmbCZcJogegB5cJoAeaCZsJmgmABpsJgAZ7BpoJoAeDBpoJgwaABp0JnAl8Bp0JfAZ3Bp4JmQmcCZ4JnAmdCW4GnQl3Bm4GdwZwBmwGngmdCWwGnQluBmoGnwmeCWoGnglsBp8JlgmZCZ8JmQmeCWgGoAmfCWgGnwlqBqAJkgmWCaAJlgmfCWYGoQmgCWYGoAloBqEJjwmSCaEJkgmgCWQG8wihCWQGoQlmBvMI9giPCfMIjwmhCacJpAnPCKcJzwiiCaQJpgnMCKQJzAjPCKkJpQmkCakJpAmnCaUJwAmmCaUJpgmkCasJqAmjCasJowmtCawJqgmoCawJqAmrCbAJrAmrCbAJqwmuCa4JqwmtCa4JrQmvCa4JrwmzCa4JswmxCbAJrgmxCbAJsQmyCbEJtAm1CbEJtQmyCbMJtgm0CbMJtAmxCbUJtAm4CbUJuAm6CbQJtgnECLQJxAi4CbcJuwm8CbcJvAm5CcMIxwi7CcMIuwm3CbwJuwm9CbwJvQm+CbsJxwjKCLsJygi9Cb0JygjMCL0JzAimCb4JvQmmCb4JpgnACbwJvgm/CbwJvwlBCsAJwQm/CcAJvwm+CcQJwQnACcQJwAmlCccJwgnBCccJwQnECb8JwQnCCb8Jwgk6CsUJxAmlCcUJpQmpCckJxwnECckJxAnFCc0JzAnICc0JyAnLCcwJzgnDCcwJwwnICc0J0gnPCc0JzwnMCcwJzwnQCcwJ0AnOCc8J0Qn0Cc8J9AnQCdIJ0wnRCdIJ0QnPCdUJ1AnSCdUJ0gnNCdQJ1gnTCdQJ0wnSCdkJ1wnUCdkJ1AnVCdcJ2AnWCdcJ1gnUCdoJ3AnYCdoJ2AnXCdsJ2gnXCdsJ1wnZCd4J3QnaCd4J2gnbCd0J3wncCd0J3AnaCeEJ4AndCeEJ3QneCeAJ4gnfCeAJ3wndCeEJ5gnjCeEJ4wngCeAJ4wnkCeAJ5AniCeMJ5Qn7CeMJ+wnkCeYJ5wnlCeYJ5QnjCegJ6gnnCegJ5wnmCekJ6AnmCekJ5gnhCewJ6wnoCewJ6AnpCesJ7QnqCesJ6gnoCewJzgnuCewJ7gnrCe4J7wntCe4J7QnrCdAJ8AnuCdAJ7gnOCfAJ8QnvCfAJ7wnuCfQJ8gnwCfQJ8AnQCfIJ8wnxCfIJ8QnwCfUJ9wnzCfUJ8wnyCfYJ9QnyCfYJ8gn0CfkJ+An1CfkJ9Qn2CfgJ+gn3CfgJ9wn1CeIJ5An4CeIJ+An5CeQJ+wn6CeQJ+gn4CfoJ/An9CfoJ/Qn3CfsJ/wn8CfsJ/An6CfwJ/gkPCvwJDwr9Cf8JAAr+Cf8J/gn8CQEKAgoACgEKAAr/CeUJAQr/CeUJ/wn7CecJAwoBCucJAQrlCQMKBAoCCgMKAgoBCgUKBgoECgUKBAoDCuoJBQoDCuoJAwrnCe0JBwoFCu0JBQrqCQcKCAoGCgcKBgoFCu0J7wkJCu0JCQoHCgkKCgoICgkKCAoHCvEJCwoJCvEJCQrvCQsKDAoKCgsKCgoJCvMJDQoLCvMJCwrxCQ0KDgoMCg0KDAoLCv0JDwoOCv0JDgoNCvMJ9wn9CfMJ/QkNCgwKDgoPCgwKDwoQChAKDwr+CRAK/gkRCggKCgoMCggKDAoQCggKEAoRCggKEQoGCgYKEQoCCgYKAgoEChEK/gkAChEKAAoCCvkJEgoTCvkJEwriCfYJFQoSCvYJEgr5CRIKFAolChIKJQoTChUKFgoUChUKFAoSCvYJ9AkXCvYJFwoVChcKGAoWChcKFgoVChkKGgoYChkKGAoXCtEJGQoXCtEJFwr0CdMJGwoZCtMJGQrRCRsKHAoaChsKGgoZCtYJHQobCtYJGwrTCR0KHgocCh0KHAobCtgJHwodCtgJHQrWCR8KIAoeCh8KHgodCiEKIgogCiEKIAofCtgJ3AkhCtgJIQofCt8JIwohCt8JIQrcCSMKJAoiCiMKIgohCuIJEwojCuIJIwrfCRMKJQokChMKJAojCiQKJgonCiQKJwoiCiUKKQomCiUKJgokCiYKKAo5CiYKOQonCikKKgooCikKKAomCisKLAoqCisKKgopChQKKwopChQKKQolChYKLQorChYKKwoUCi0KLgosCi0KLAorChYKGAovChYKLwotCi8KMAouCi8KLgotCjEKMgowCjEKMAovChoKMQovChoKLwoYChwKMwoxChwKMQoaCjMKNAoyCjMKMgoxCh4KNQozCh4KMwocCjUKNgo0CjUKNAozCiAKNwo1CiAKNQoeCjcKOAo2CjcKNgo1CiIKJwo3CiIKNwogCicKOQo4CicKOAo3CjkKKAo2CjkKNgo4CigKKgo0CigKNAo2CioKLAoyCioKMgo0CiwKLgowCiwKMAoyCsMJzgnsCcMJ7Ak7Cj0KOwrsCT0K7AnpCUEKvwk6CkEKOgo8CkAKPQrpCUAK6QnhCUIKQQo8CkIKPAo+CrkJvAlBCrkJQQpCCkQKQwo/CkQKPwpGCrUJuglDCrUJQwpECrIJtQlECrIJRApFCkUKRApGCkUKRgpICkkKRwreCUkK3gnbCUcKQArhCUcK4QneCUwKRQpICkwKSApKCkkK2wnZCUkK2QlLCtkJ1QlOCtkJTgpLCkoKTQpPCkoKTwpMCk0KygnGCU0KxglPCtUJzQnLCdUJywlOCkwKTwqsCUwKrAmwCU8KxgmqCU8KqgmsCbIJRQpMCrIJTAqwCbMJUgpQCrMJUAq2CcQItglQCsQIUApRClMKUQpQClMKUApSClQKVQpTClQKUwpSCq8JVApSCq8JUgqzCa8JrQlWCq8JVgpUClUKVApWClUKVgpXCqMJVwpWCqMJVgqtCaMJtAhYCqMJWApXClUKVwpYClUKWApZCrgIWQpYCrgIWAq0CFMKVQpZClMKWQpaClkKuAi6CFkKughaCroIvghbCroIWwpaClMKWgpbClMKWwpRCsQIUQpbCsQIWwq+CF0KXApQBl0KUAZOBnsIXApdCnsIXQpeCl4KXQpfCl4KXwpgCl8KXQpOBl8KTgZMBmAKXwphCmAKYQpkCkoGYQpfCkoGXwpMBmMKYQpKBmMKSgZIBmcKZAphCmcKYQpjCmoKZQpkCmoKZApnCnMKYApkCnMKZAplCmgKZgpiCmgKYgpyCmsKaQpmCmsKZgpoCooFjAVlCooFZQpqCoYFiQVpCoYFaQprCmsKaApuCmsKbgpsCoQFhgVrCoQFawpsCmwKbgpwCmwKcAptCoQFbAptCoQFbQqCBWgKcgpvCmgKbwpuCm4KbwpxCm4KcQpwCisAbQpwCisAcApxCm8KQgZABm8KQAZxCisAcQpABm8KcgpEBm8KRAZCBnIKYgpHBnIKRwZEBisAggVtCmUKjAWOBWUKjgVzCnMKdApeCnMKXgpgCnQKcwqOBXQKjgWQBZQFlgV4CJQFeAh0CpAFkgWUBZAFlAV0CnQKeAh7CHQKewheCpYFmAVyCJYFcgh4CHcKdQr+B3cK/gemBXUKeAr4B3UK+Af+B9sH3wd1CtsHdQp3Ct8H4wd4Ct8HeAp1CuQH6Ad6CuQHegp5CnkKegr1B3kK9Qf5B3oK7wfxB3oK8Qf1B+gH6wfvB+gH7wd6CnsK1gfaB3sK2gd2CqgFewp2CqgFdgqlBaoF0Ad7CqoFewqoBdAH1AfWB9AH1gd7CnwKpQfQBXwK0AXSBX4KowelB34KpQd8Cn0KfArSBX0K0gXUBX8Kfgp8Cn8KfAp9CoAKfgp/CoAKfwqBCp8Howd+Cp8HfgqACgIGgAqBCgIGgQoABgQGnweACgQGgAoCBgAGgQqCCgAGggr9BYEKfwqFCoEKhQqCCv4FgwqECv4FhAr6BYMKhgqHCoMKhwqECocKhgqJCocKiQqKCoUKfwp9CoUKfQqICooKiQrYBYoK2AXaBYgKfQrUBYgK1AXXBdoF3AWLCtoFiwqKCooKiwqMCooKjAqHCosKjQqOCosKjgqMCtwF3gWNCtwFjQqLCo0KjwqQCo0KkAqOCt4F4AWPCt4FjwqNCo8KkQqSCo8KkgqQCuAF4gWRCuAFkQqPCpEKkwqUCpEKlAqSCuIF5AWTCuIFkwqRCpMK6AXqBZMK6gWUCuQF5gXoBeQF6AWTCpQK6gXsBZQK7AWVCpIKlAqVCpIKlQqWCpYKlQrwBZYK8AXyBZUK7AXuBZUK7gXwBZcKlgryBZcK8gX0BZAKkgqWCpAKlgqXCpgKlwr0BZgK9AX2BY4KkAqXCo4KlwqYCpkKmAr2BZkK9gX4BYwKjgqYCowKmAqZCoQKmQr4BYQK+AX6BYcKjAqZCocKmQqECpoKmwrDCpoKwwqcCp0KmgqcCp0KnAqgCp8KnQqgCp8KoAqiCqIKoAqjCqIKowqlCqAKnAqmCqAKpgqjCqUKowqnCqUKpwqpCqYKqgqnCqYKpwqjCqwKqQqnCqwKpwqqCqwKqgqtCqwKrQqwCqYKrgqtCqYKrQqqCrIKsAqtCrIKrQquCrEKtAqzCrEKswqvCqsKrwqzCqsKswq1CrYKtQqzCrYKswq0CqsKtQq3CqsKtwqoCrYKuAq3CrYKtwq1CqQKqAq3CqQKtwq4CroKuQq4CroKuAq2CrkKoQqkCrkKpAq4CrwKuwq5CrwKuQq6CrsKngqhCrsKoQq5Cr0KvAq6Cr0KugrACr4KvQrACr4KwArBCsEKwAq0CsEKtAqxCsAKugq2CsAKtgq0CsMKwgqyCsMKsgquCpsKvwrCCpsKwgrDCpwKwwquCpwKrgqmCsQKxwrtCsQK7QrGCskKywrICskKyArFCsoKzArLCsoKywrJCswKzgrNCswKzQrLCssKzQrPCssKzwrICs4K0grRCs4K0QrNCs8KzQrRCs8K0QrTCtUK0wrRCtUK0QrSCtYK2QrXCtYK1wrUCtAK1ArXCtAK1wrYCtoK2ArXCtoK1wrZCtoK2QrbCtoK2wrcCtYK3grbCtYK2wrZCt8K3ArbCt8K2wreCtUK0grhCtUK4QrdCuAK3QrhCuAK4QriCs4K4grhCs4K4QrSCuUK4AriCuUK4grjCuMK4grOCuMKzgrMCugK5QrjCugK4wrmCuYK4wrMCuYKzArKCukK6wrkCukK5ArnCuoK7ArrCuoK6wrpCuwK2grcCuwK3ArrCusK3ArfCusK3wrkCu0K2AraCu0K2grsCsYK7QrsCsYK7ArqCscK0ArYCscK2ArtCu4K8QoXC+4KFwvwCvMK9QryCvMK8grvCvQK9gr1CvQK9QrzCvYK+Ar3CvYK9wr1CvUK9wr6CvUK+gryCvgK/Ar7CvgK+wr3CvoK9wr7CvoK+wr+CgAL/gr7CgAL+wr8Cv8KAwsBC/8KAQv9CvkK/QoBC/kKAQsCCwQLAgsBCwQLAQsDCwQLAwsFCwQLBQsGC/8KBwsFC/8KBQsDCwkLBgsFCwkLBQsHCwAL/AoLCwALCwsICwoLCAsLCwoLCwsMC/gKDAsLC/gKCwv8Cg8LCgsMCw8LDAsNCw0LDAv4Cg0L+Ar2ChILDwsNCxILDQsQCxALDQv2ChAL9gr0ChMLFQsOCxMLDgsRCxQLFgsVCxQLFQsTCxYLBAsGCxYLBgsVCxULBgsJCxULCQsOCxcLAgsECxcLBAsWC/AKFwsWC/AKFgsUC/EK+QoCC/EKAgsXCxgLGgtBCxgLQQsZCxsLHgsaCxsLGgsYCxwLHwseCxwLHgsbCx8LIgshCx8LIQseCx4LIQskCx4LJAsaCyILJgslCyILJQshCyQLIQslCyQLJQsoCykLKAslCykLJQsmCykLLQsrCykLKwsoCyQLKAsrCyQLKwssCy8LLAsrCy8LKwstCzALLgsxCzALMQsyCyoLMwsxCyoLMQsuCzQLMgsxCzQLMQszCyoLJws1CyoLNQszCzQLMws1CzQLNQs2CyMLNgs1CyMLNQsnCzgLNAs2CzgLNgs3CzcLNgsjCzcLIwsgCzoLOAs3CzoLNws5CzkLNwsgCzkLIAsdCzsLPgs4CzsLOAs6Cz0LQAs+Cz0LPgs7C0ALMAsyC0ALMgs+Cz4LMgs0Cz4LNAs4C0ELLAsvC0ELLws/CxkLQQs/CxkLPws8CxoLJAssCxoLLAtBC0MLRgtrC0MLawtEC0cLSQtFC0cLRQtCC0gLSgtJC0gLSQtHC0oLTAtLC0oLSwtJC0kLSwtNC0kLTQtFC0wLUAtPC0wLTwtLC00LSwtPC00LTwtRC1MLUQtPC1MLTwtQC1QLVwtVC1QLVQtSC04LUgtVC04LVQtWC1gLVgtVC1gLVQtXC1gLVwtZC1gLWQtaC1QLXAtZC1QLWQtXC14LWgtZC14LWQtcC1MLUAtfC1MLXwtbC10LWwtfC10LXwtgC0wLYAtfC0wLXwtQC2ILXQtgC2ILYAthC2ELYAtMC2ELTAtKC2ULYgthC2ULYQtkC2QLYQtKC2QLSgtIC2cLaQtjC2cLYwtmC2gLagtpC2gLaQtnC2oLWAtaC2oLWgtpC2kLWgteC2kLXgtjC2sLVgtYC2sLWAtqC0QLawtqC0QLagtoC0YLTgtWC0YLVgtrC20LcAuVC20LlQtuC3ELcwtvC3ELbwtsC3ILdAtzC3ILcwtxC3QLdgt1C3QLdQtzC3MLdQt3C3MLdwtvC3YLegt5C3YLeQt1C3cLdQt5C3cLeQt7C30Lewt5C30LeQt6C34LgQt/C34Lfwt8C3gLfAt/C3gLfwuAC4ILgAt/C4ILfwuBC4ILgQuDC4ILgwuEC34LhguDC34LgwuBC4gLhAuDC4gLgwuGC30LeguJC30LiQuFC4cLhQuJC4cLiQuKC3YLiguJC3YLiQt6C4wLhwuKC4wLiguLC4sLigt2C4sLdgt0C48LjAuLC48LiwuOC44Liwt0C44LdAtyC5ELkwuNC5ELjQuQC5ILlAuTC5ILkwuRC5QLgguEC5QLhAuTC5MLhAuIC5MLiAuNC5ULgAuCC5ULgguUC24LlQuUC24LlAuSC3ALeAuAC3ALgAuVC5cLmgu/C5cLvwuYC5sLnQuZC5sLmQuWC5wLngudC5wLnQubC54LoAufC54LnwudC50LnwuhC50LoQuZC6ALpAujC6ALowufC6ELnwujC6ELowumC6gLpgujC6gLowukC6cLqwupC6cLqQulC6ILpQupC6ILqQuqC6wLqgupC6wLqQurC6wLqwutC6wLrQuuC6cLrwutC6cLrQurC7ELrgutC7ELrQuvC6gLpAuzC6gLswuwC7ILsAuzC7ILswu0C6ALtAuzC6ALswukC7YLsgu0C7YLtAu1C7ULtAugC7ULoAueC7kLtgu1C7kLtQu4C7gLtQueC7gLngucC7sLvQu3C7sLtwu6C7wLvgu9C7wLvQu7C74LrAuuC74Lrgu9C70LrguxC70LsQu3C78LqgusC78LrAu+C5gLvwu+C5gLvgu8C5oLoguqC5oLqgu/C8ELwgvpC8EL6QvEC8ULwAvDC8ULwwvHC8YLxQvHC8YLxwvIC8gLxwvJC8gLyQvKC8cLwwvLC8cLywvJC8oLyQvNC8oLzQvOC8sLzwvNC8sLzQvJC9ELzgvNC9ELzQvPC9IL0AvTC9IL0wvVC8wL1AvTC8wL0wvQC9YL1QvTC9YL0wvUC9YL2AvXC9YL1wvVC9IL1QvXC9IL1wvaC9wL2gvXC9wL1wvYC9EL2QvdC9EL3QvOC9sL3gvdC9sL3QvZC8oLzgvdC8oL3QveC+AL3wveC+AL3gvbC98LyAvKC98LygveC+ML4gvfC+ML3wvgC+ILxgvIC+ILyAvfC+UL5AvhC+UL4QvnC+YL5QvnC+YL5wvoC+gL5wvYC+gL2AvWC+cL4QvcC+cL3AvYC+kL6AvWC+kL1gvUC8IL5gvoC8IL6AvpC8QL6QvUC8QL1AvMC+oL6wsTDOoLEwzsC+0L6gvsC+0L7AvwC+8L7QvwC+8L8AvyC/IL8AvzC/IL8wv1C/AL7Av2C/AL9gvzC/UL8wv3C/UL9wv5C/YL+gv3C/YL9wvzC/wL+Qv3C/wL9wv6C/wL+gv9C/wL/QsADPYL/gv9C/YL/Qv6CwIMAAz9CwIM/Qv+CwEMBAwDDAEMAwz/C/sL/wsDDPsLAwwFDAYMBQwDDAYMAwwEDPsLBQwHDPsLBwz4CwYMCAwHDAYMBwwFDPQL+AsHDPQLBwwIDAoMCQwIDAoMCAwGDAkM8Qv0CwkM9AsIDAwMCwwJDAwMCQwKDAsM7gvxCwsM8QsJDA0MDAwKDA0MCgwQDA4MDQwQDA4MEAwRDBEMEAwEDBEMBAwBDBAMCgwGDBAMBgwEDBMMEgwCDBMMAgz+C+sLDwwSDOsLEgwTDOwLEwz+C+wL/gv2CxQMGQyPDBQMjwwXDBgMIAwbDBgMGwwVDBwMHwwaDBwMGgwWDB4MLAwfDB4MHwwcDCAMIgwdDCAMHQwbDCEMIwwiDCEMIgwgDHAMIQwgDHAMIAwYDCMMJQwkDCMMJAwiDCIMJAwnDCIMJwwdDCUMggwmDCUMJgwkDCQMJgwpDCQMKQwnDCgMKgwsDCgMLAweDCkMLQwqDCkMKgwoDCoMKwyQDCoMkAwsDC0MLgwrDC0MKwwqDC8MMQwuDC8MLgwtDCYMLwwtDCYMLQwpDDAMMgwxDDAMMQwvDIIMMAwvDIIMLwwmDDIMNAwzDDIMMwwxDDEMMww2DDEMNgwuDDQMjgw1DDQMNQwzDDMMNQw3DDMMNww2DDYMNww7DDYMOww4DC4MNgw4DC4MOAwrDCsMOAw5DCsMOQyQDDgMOww9DDgMPQw5DDUMPgw6DDUMOgw3DD4MQAw8DD4MPAw6DD8MQQxADD8MQAw+DI4MPww+DI4MPgw1DEEMQwxCDEEMQgxADEAMQgxGDEAMRgw8DEMMVwxFDEMMRQxCDEIMRQxJDEIMSQxGDDkMPQxHDDkMRwxLDEsMRwxKDEsMSgxODJAMOQxLDJAMSwxMDEwMSwxODEwMTgxQDE8MTQxRDE8MUQxSDE0MSAxEDE0MRAxRDFIMUQxTDFIMUwxUDFEMRAxWDFEMVgxTDFQMUwxVDFQMVQxoDFMMVgxYDFMMWAxVDFwMWQxXDFwMVwxDDFUMWAxaDFUMWgxlDF8MWwxZDF8MWQxcDF0MXAxDDF0MQwxBDGEMXwxcDGEMXAxdDGUMWgxeDGUMXgxiDGIMXgxgDGIMYAxkDGMMYgxkDGMMZAx5DGYMZQxiDGYMYgxjDGgMVQxlDGgMZQxmDGkMaAxmDGkMZgxnDGcMZgxjDGcMYwx3DGoMVAxoDGoMaAxpDG8MagxpDG8MaQxrDGsMaQxnDGsMZwxtDG4MdAxxDG4McQxsDGwMcQwhDGwMIQxwDHEMcgwjDHEMIwwhDHQMdgxyDHQMcgxxDHMMdwx4DHMMeAx1DG0MZwx3DG0MdwxzDHcMYwx5DHcMeQx4DHgMeQx7DHgMewx6DHUMeAx6DHUMegx9DHoMewyGDHoMhgx8DH0Megx8DH0MfAx/DH4MfwyBDH4MgQyADHYMfgyADHYMgAxyDHIMgAwlDHIMJQwjDIAMgQyCDIAMggwlDIEMgwwwDIEMMAyCDH8MfAyDDH8MgwyBDIMMhAwyDIMMMgwwDHwMhgyEDHwMhAyDDIQMhQw0DIQMNAwyDIYMhwyFDIYMhQyEDHsMiQyHDHsMhwyGDIkMigyIDIkMiAyHDIcMiAyNDIcMjQyFDHkMZAyJDHkMiQx7DGQMYAyKDGQMigyJDIsMYQxdDIsMXQyMDIgMiwyMDIgMjAyNDIwMXQxBDIwMQQw/DI0MjAw/DI0MPwyODIUMjQyODIUMjgw0DBcMjwxqDBcMagxvDI8MUgxUDI8MVAxqDBkMTwxSDBkMUgyPDB8MTAxQDB8MUAwaDCwMkAxMDCwMTAwfDJEMkwzGDJEMxgySDJIMlwyUDJIMlAyRDJQMlgyTDJQMkwyRDJUMogyWDJUMlgyUDJcMmQyVDJcMlQyUDJgMmgyZDJgMmQyXDMUMmAyXDMUMlwySDJoMnAybDJoMmwyZDJkMmwyeDJkMngyVDJwMyQydDJwMnQybDJsMnQyfDJsMnwyeDJ4MoAyiDJ4MogyVDJ8MowygDJ8MoAyeDKAMoQzHDKAMxwyiDKMMpAyhDKMMoQygDKUMpwykDKUMpAyjDJ0MpQyjDJ0MowyfDKYMqAynDKYMpwylDMkMpgylDMkMpQydDKgMqgypDKgMqQynDKcMqQysDKcMrAykDKoMyAyrDKoMqwypDKkMqwytDKkMrQysDKwMrQywDKwMsAyuDKQMrAyuDKQMrgyhDKEMrgyvDKEMrwzHDK4MsAyxDK4MsQyvDKsMsgywDKsMsAytDLIMtAyxDLIMsQywDLMMtQy0DLMMtAyyDMgMswyyDMgMsgyrDLUMtwy2DLUMtgy0DLQMtgy5DLQMuQyxDLcMwwy4DLcMuAy2DLYMuAy6DLYMugy5DK8MsQy5DK8MuQy7DLsMuQy6DLsMugy9DMcMrwy7DMcMuwy8DLwMuwy9DLwMvQy+DL4MvQy/DL4MvwzADL0Mugy4DL0MuAy/DMAMvwzBDMAMwQzCDL8MuAzDDL8MwwzBDMYMwAzCDMYMwgzEDJIMxgzEDJIMxAzFDJMMvgzADJMMwAzGDJYMvAy+DJYMvgyTDKIMxwy8DKIMvAyWDMoMywz/DMoM/wzMDMsMygzNDMsMzQzQDM0MygzMDM0MzAzPDM4MzQzPDM4MzwzbDNAMzQzODNAMzgzSDNEM0AzSDNEM0gzTDP4MywzQDP4M0AzRDNMM0gzUDNMM1AzVDNIMzgzXDNIM1wzUDNUM1AzWDNUM1gwCDdQM1wzYDNQM2AzWDNcMzgzbDNcM2wzZDNgM1wzZDNgM2QzcDNkM2wwADdkMAA3aDNwM2QzaDNwM2gzdDN4M3AzdDN4M3QzgDNYM2AzcDNYM3AzeDN8M3gzgDN8M4AzhDAIN1gzeDAIN3gzfDOEM4AziDOEM4gzjDOAM3QzlDOAM5QziDOMM4gzkDOMM5AwBDeIM5QzmDOIM5gzkDOUM5wzpDOUM6QzmDN0M2gznDN0M5wzlDNoMAA3oDNoM6AznDOcM6AzqDOcM6gzpDOQM5gzpDOQM6QzrDOsM6QzqDOsM6gztDOwM6wztDOwM7QzuDAEN5AzrDAEN6wzsDO4M7QzvDO4M7wzwDO0M6gzyDO0M8gzvDPAM7wzxDPAM8Qz8DO8M8gzzDO8M8wzxDOgM9AzyDOgM8gzqDPQM9gzzDPQM8wzyDAAN9Qz0DAAN9AzoDPUM9wz2DPUM9gz0DPcM+Qz4DPcM+Az2DPYM+AzxDPYM8QzzDPkM+wz6DPkM+gz4DPgM+gz8DPgM/AzxDP8M/Qz7DP8M+wz5DMsM/gz9DMsM/Qz/DMwM/wz5DMwM+Qz3DM8MzAz3DM8M9wz1DNsMzwz1DNsM9QwADQMNCA1+DQMNfg0GDQcNDw0KDQcNCg0EDQsNDg0JDQsNCQ0FDQ0NGw0ODQ0NDg0LDQ8NEQ0MDQ8NDA0KDRANEg0RDRANEQ0PDV8NEA0PDV8NDw0HDRINFA0TDRINEw0RDRENEw0WDRENFg0MDRQNcQ0VDRQNFQ0TDRMNFQ0YDRMNGA0WDRcNGQ0bDRcNGw0NDRgNHA0ZDRgNGQ0XDRkNGg1/DRkNfw0bDRwNHQ0aDRwNGg0ZDR4NIA0dDR4NHQ0cDRUNHg0cDRUNHA0YDR8NIQ0gDR8NIA0eDXENHw0eDXENHg0VDSENIw0iDSENIg0gDSANIg0lDSANJQ0dDSMNfQ0kDSMNJA0iDSINJA0mDSINJg0lDSUNJg0qDSUNKg0nDR0NJQ0nDR0NJw0aDRoNJw0oDRoNKA1/DScNKg0sDScNLA0oDSQNLQ0pDSQNKQ0mDS0NLw0rDS0NKw0pDS4NMA0vDS4NLw0tDX0NLg0tDX0NLQ0kDTANMg0xDTANMQ0vDS8NMQ01DS8NNQ0rDTINRg00DTINNA0xDTENNA04DTENOA01DSgNLA02DSgNNg06DToNNg05DToNOQ09DX8NKA06DX8NOg07DTsNOg09DTsNPQ0/DT4NPA1ADT4NQA1BDTwNNw0zDTwNMw1ADUENQA1CDUENQg1DDUANMw1FDUANRQ1CDUMNQg1EDUMNRA1XDUINRQ1HDUINRw1EDUsNSA1GDUsNRg0yDUQNRw1JDUQNSQ1UDU4NSg1IDU4NSA1LDUwNSw0yDUwNMg0wDVANTg1LDVANSw1MDVQNSQ1NDVQNTQ1RDVENTQ1PDVENTw1TDVINUQ1TDVINUw1oDVUNVA1RDVUNUQ1SDVcNRA1UDVcNVA1VDVgNVw1VDVgNVQ1WDVYNVQ1SDVYNUg1mDVkNQw1XDVkNVw1YDV4NWQ1YDV4NWA1aDVoNWA1WDVoNVg1cDV0NYw1gDV0NYA1bDVsNYA0QDVsNEA1fDWANYQ0SDWANEg0QDWMNZQ1hDWMNYQ1gDWINZg1nDWINZw1kDVwNVg1mDVwNZg1iDWYNUg1oDWYNaA1nDWcNaA1qDWcNag1pDWQNZw1pDWQNaQ1sDWkNag11DWkNdQ1rDWwNaQ1rDWwNaw1uDW0Nbg1wDW0NcA1vDWUNbQ1vDWUNbw1hDWENbw0UDWENFA0SDW8NcA1xDW8NcQ0UDXANcg0fDXANHw1xDW4Naw1yDW4Ncg1wDXINcw0hDXINIQ0fDWsNdQ1zDWsNcw1yDXMNdA0jDXMNIw0hDXUNdg10DXUNdA1zDWoNeA12DWoNdg11DXgNeQ13DXgNdw12DXYNdw18DXYNfA10DWgNUw14DWgNeA1qDVMNTw15DVMNeQ14DXoNUA1MDXoNTA17DXcNeg17DXcNew18DXsNTA0wDXsNMA0uDXwNew0uDXwNLg19DXQNfA19DXQNfQ0jDQYNfg1ZDQYNWQ1eDX4NQQ1DDX4NQw1ZDQgNPg1BDQgNQQ1+DQ4NOw0/DQ4NPw0JDRsNfw07DRsNOw0ODWgAawCMDWgAjA2NDQoCjA2LDQoCiw0HAm8AdACJDW8AiQ2KDQQCiQ2IDQQCiA0CAgAChw2IDQACiA13AP0Bhg2HDf0Bhw0AAvwBhg2FDfwBhQ35AfkBhQ2DDfkBgw3zAfQBhA2CDfQBgg3wAfABgg2BDfABgQ3uAekBgA2BDekBgQ3qAWgAjQ2ADWgAgA3pAQ4Gmw2aDQ4Gmg0MBpAGjQaZDZAGmQ2aDQkGmA2XDQkGlw0GBooGiAaWDYoGlg2XDYYGBAaWDYYGlg2VDYMGhgaVDYMGlQ2UDYIGfwaTDYIGkw2UDX8GeQaRDX8GkQ2TDXoGdgaQDXoGkA2SDXYGdAaPDXYGjw2QDW8GcAaPDW8Gjw2ODQ4GbwaODQ4Gjg2bDauqKj2rqqo9AAAAPquqKj5VVVU+AACAPlVVlT6rqqo+AADAPlVV1T6rquo+AAAAP6uqCj9VVRU/AAAgP6uqKj9VVTU/AABAP6uqSj9VVVU/AABgP6uqaj9VVXU/AACAP1VVhT+rqoo/AACQP1VVlT+rqpo/AACgP1VVpT+rqqo/AACwP1VVtT+rqro/AADAP1VVxT+rqso/AADQP1VV1T+rqto/AADgP1VV5T+rquo/AADwP1VV9T+rqvo/AAAAQKuqAkBVVQVAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPwTGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMLJe8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P8QOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUsaUgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P6eZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsY4bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/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AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WLzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9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cYN/P/9M8jBS438z7EzyvFTjfz+LHQIw7P1/M4cdArzv/X8//v//D/z/fzMAAAAcAACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAP/3/fz/+/38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAP///fz///38/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwEAgD///38/AACAP///fz///38/AACAP///fz///38/AACAPwAAgD///38/AACAP///fz/+/38/AACAPwAAgD8AAIA/AACAPwEAgD///38/AACAPwEAgD8AAIA/AACAPwAAgD///38/AACAP/7/fz///38/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAPwEAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD/+/38/AACAPwAAgD/9/38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAP/3/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD///38/AACAPwEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKKj//zBCOu09AAAApwDAFag/Ou09AAAUqACA3KdKOu09AACMqAAAgqdIOu09AACIqP//vzJBOu09AACgJwEAADJCOu09AAAAp////7JAOu09//9/p///v7JAOu09//8/GwEAgDI/Ou09AQAgp/3/f7JBOu09AABgp///37I/Ou09/v+/pgYAgDE+Ou09AABAJwAAJCdCOu09AAAAp/z//7FCOu09AABAp/7//7E+Ou09/v9/GgAAwLJDOu09AgCAJgEAgLJBOu09AAAAKACApKdAOu09AABgKN//fzFAOu09AADAp70AALBBOu09AADYpsT/fzE4Ou09AAAgJ/f//zI8Ou09AAAQKOz/fzJBOu09AAAAKAoAgLJCOu09////pvv/PzM+Ou09//+fJ9X//zE+Ou09AADAp9b//zE+Ou09AADAJwAApKhBOu09AAAQKAoAoLJAOu09AADgpwUAMLM9Ou09/f//pq//fzFEOu09AACAJgoAwLJAOu09AADAp+v/fzJAOu09AAAgKBUAALI8Ou09AAAgKNf//zFAOu09//9/Jtv//zFDOu09AAAQKOD//zE6Ou09AABAJ8j/fzFCOu09AAAEKABIRKhCOu09AABiqAEAgJw8Ou09AQAAKIAAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/AACAmAAAuCcAAICwAACAPwAA4KcAAIAnAAAAMgAAgD8AAICnAACAJwAAgA8AAIA/AABApwAAoCcAAICyAACAPwAAACcAAEAnAAAAjwAAgD8AAIAmAACIJwAAgDIAAIA/AACApgAAkCcAAACyAACAPwAAgCYAADAnAAAAMgAAgD8AAECmAAB4JwAAQA4AAIA/AAAAAAAAmCcAAAAAAACAPwAAgKUAAIwnAACADQAAgD8AAIAmAACgJ////7EAAIA/AAAAAAAAcCcAAAAAAACAPwAAAAAAAKAnAAAAAAAAgD8AAIAmAACQJwAAgI4AAIA/AAAAAAAAkCcAAAAAAACAPwIAgCYAANAnAgCAjgAAgD8BACAoAQDgJwEAALIAAIA/AAAAJwAAoCcAAACPAACAPwAA/KcAAAgnAAD8DwAAgD8AAGAnAAAgKAAAYI8AAIA///9/JgAAgCcAAICyAACAPwEAgCcAAIAnAQAAsgAAgD8AAKCnAAAAJwAAoA8AAIA/AACApgAAoKcAAICyAACAPwAAQKcAAACnAAAAsgAAgD8AAAAAAAAkKAAAAAAAAIA/AAAApgAAWCcAAAAOAACAPwAAAKYAAIQnAAAADgAAgD8AAIAZAABIKAAAgDEAAIA/AAAAmgAAgKcAAACyAACAP///f6YAAMCmAAAAMgAAgD8AAICnAACAJwAAgA8AAIA/AACAJgAAoCcAAICOAACAP/z/fyb8/3+n/P9/jgAAgD8AAICmAQDAJ///fw4AAIA/AACApgAAgCYAAIAOAACAPwAAAKYAAACmAAAADgAAgD8AAHinAAC8JwAAgDAAAIA/gAAAgAAAgCcAAICQAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP///fz///38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwEAgD8BAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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t/8/rm71ni3e64k8tf5vrvB1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8LVjMmNiJbGuPIAyAACAP/D1ZDKCYiWxAADsLQAAgD/wdWgyUmIlsZw3ADIAAIA/8MVjMtJhJrEA2H6xAACAP/BiYDKy4Sex0NGAMAAAgD/we2UyMmInscg5ATEAAIA/8HVjMjJiJbGwo/+xAACAP/BVYzKSYiOxfFP/sQAAgD/wNWMy8mElsXhw/7EAAIA/8DVkMrJhJ7EAEHgsAACAP/D1YTLSYSWxAG6OLQAAgD/w9WMy8mAtsb66/zEAAIA/8BVlMlJiIbFZSAAyAACAP/DlYTJSYiexALCkLQAAgD/wrWQysmEnsQCwgiwAAIA/sJxkMtJBJ7EACEwtAACAP/ARZTIy4iWxARgDLQAAgD/w1WMyUmEmsebxP7IAAIA/8NVhMvJhJ7FIn/+xAACAP/D1ZTIyYiWxANTMLQAAgD/w9WEyVGEtsRLwvzIAAIA/8HVlMgRiLbFkEMAyAACAP/B1ZDLDYC2xA4d/MgAAgD/w9WAylGElsRICADMAAIA/8PVhMsNhJbHvC4AyAACAP/A1ZDKxYiexMod/sgAAgD/wlWQykmArsVAa/zEAAIA/8HVkMnNiKbE/LIAyAACAP/AVZjLiYSWxQKd/sQAAgD/whWMy0mEnsQAwFiwAAIA/8LViMoJhKbFUh38xAACAP/B1YTJiYiWxAJrALQAAgD/wtWEygmIlsQC8yy0AAIA/8HViMgRhLbE04L8yAACAP/B1YjKEYjGxli/AMgAAgD/wdWUygmEpscAWADIAAIA/8PViMlNjKbEza4AyAACAP/B1ZDLkYSmxiBvAMgAAgD/w9WMys2EpsY/8fzIAAIA/8HVlMpJhK7F0IgAyAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP/7/fz///38///9/P///fz8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AQCAPwAAgD8AAIA///9/PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwEAgD8BAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38///9/PwAAgD///38/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AQCAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA///9/PwAAgD8AAIA/AACAPwAAgD///38///9/PwAAgD8AAIA/AACAP///fz///38///9/PwAAgD///38///9/PwAAgD8AAIA///9/PwEAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38///9/P///fz8AAIA/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP/RhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPNhD7110JE9C7I2sPZhD7100JE95rE2sPVhD71v0JE9ybE2sPVhD71w0JE9TbE2sPJhD71w0JE987E2sPJhD71v0JE9A7I2sO9hD71y0JE9a7I2sOthD71y0JE9u7E2sPdhD71q0JE9TLE2sPthD71t0JE9/7E2sPxhD71v0JE9DrI2sPNhD71z0JE9S7I2sPFhD71y0JE9GrI2sPVhD71s0JE90bE2sPFhD71y0JE96LE2sO1hD71q0JE9MrI2sPRhD7110JE927E2sPVhD71x0JE9GLI2sPdhD71w0JE9ArI2sPVhD71y0JE9KrI2sPRhD7110JE9QbI2sPVhD7100JE9KLI2sPJhD7110JE9b7I2sPNhD71u0JE9Y7E2sPNhD71w0JE94bE2sPphD7100JE9RrI2sPthD71y0JE90LE2sPthD7100JE9ybE2sPZhD71y0JE9FbI2sPphD71w0JE9R7I2sOthD71u0JE9ZLE2sABiD7120JE9WrI2sABiD71v0JE9crI2sPlhD71u0JE9n7E2sPZhD71s0JE9rrE2sPdhD71v0JE9zLE2sPVhD71w0JE9erE2sPVhD71u0JE947E2sPZhD71o0JE9TrE2sPRhD71v0JE95rE2sHtyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2pO0jLvmig/lqJAP3pyQrNoTtIy75ooP5aiQD98ckKzbE7SMu+aKD+WokA/e3JCs2pO0jLvmig/lqJAP3xyQrNqTtIy75ooP5aiQD97ckKza07SMu6aKD+XokA/e3JCs2pO0jLvmig/lqJAP3pyQrNoTtIy7pooP5eiQD97ckKzaE7SMu+aKD+WokA/e3JCs2xO0jLvmig/lqJAP3pyQrNoTtIy75ooP5aiQD97ckKzaE7SMu6aKD+XokA/e3JCs2ZO0jLvmig/lqJAP3pyQrNsTtIy75ooP5aiQD96ckKzaU7SMu+aKD+WokA/fHJCs21O0jLvmig/lqJAP3pyQrNmTtIy75ooP5aiQD98ckKzaU7SMu+aKD+WokA/fHJCs2xO0jLvmig/lqJAP3xyQrNsTtIy75ooP5aiQD97ckKzak7SMu+aKD+WokA/fHJCs2xO0jLvmig/lqJAP3xyQrNsTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/fHJCs2lO0jLvmig/lqJAP3tyQrNqTtIy75ooP5aiQD96ckKzbU7SMu+aKD+WokA/enJCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD96ckKzZ07SMu6aKD+XokA/e3JCs2pO0jLvmig/lqJAP3pyQrNqTtIy75ooP5aiQD98ckKzak7SMu+aKD+WokA/enJCs2hO0jLvmig/lqJAP3pyQrNsTtIy75ooP5aiQD97ckKzbE7SMu+aKD+WokA/enJCs2lO0jLvmig/lqJAP3tyQrNsTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/8/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/9/38/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAPwAAgD/+/38/AACAP/7/fz/+/38/AACAPwAAgD/+/38/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz8AAIA/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz8AAIA/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPw+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09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/v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/z/fz///38//v9/P/7/fz/9/38//v9/P///fz8AAIA//v9/P/7/fz///38//v9/P/3/fz/8/38//v9/P/z/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz8AAIA//v9/P/7/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/8/38//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/7/fz8AAIA//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz///38//v9/P/7/fz/9/38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/3/fz/7/38//v9/P/z/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/7/38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/PxfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvafqCjthCim9b+pZvbrqCjtkCim9b+pZvT7qCjtlCim9b+pZvZfqCjtnCim9b+pZvX3qCjtrCim9cOpZvfnpCjtmCim9b+pZvZDqCjtpCim9cOpZvcPqCjtnCim9b+pZvZzrCjttCim9b+pZvV3qCjtmCim9cOpZvRXqCjtnCim9cOpZvcnpCjtpCim9b+pZvZfqCjtwCim9bupZvcvqCjtiCim9b+pZvYnqCjtoCim9b+pZveDpCjtsCim9bepZvcfpCjtcCim9bupZvQjrCjtlCim9b+pZvdnpCjtkCim9b+pZvaHqCjthCim9cOpZvR3rCjtmCim9b+pZvZ/qCjtqCim9cOpZvfrqCjtiCim9b+pZvarqCjtfCim9b+pZveTpCjtuCim9bupZvRPqCjtnCim9b+pZvRLqCjtjCim9bupZvb7qCjtmCim9b+pZvVTqCjtrCim9b+pZvYHqCjtkCim9bupZvXrqCjtjCim9b+pZvWTqCjtoCim9b+pZvSjqCjtmCim9b+pZve3pCjtzCim9bupZvRfqCjtnCim9cOpZvULrCjtgCim9b+pZvYHqCjtnCim9cepZvW3rCjtkCim9b+pZvZ3qCjtqCim9b+pZvRfrCjthCim9b+pZvUcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5IE7e+KWQcv0q2Gz+w37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkgTt74pZBy/SrYbP6/ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/r9+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/sN+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/sN+3PkcTt74qZBy/SbYbP67ftz5IE7e+KWQcv0q2Gz+w37c+SBO3vilkHL9Kths/r9+3PkgTt74pZBy/SrYbP7Dftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Kths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SrYbP67ftz5HE7e+KmQcv0q2Gz+u37c+RxO3vipkHL9Jths/rt+3Pv//fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//v9/P/3/fz8AAIA//f9/P///fz8AAIA//v9/P///fz8AAIA//f9/P/3/fz8AAIA//v9/P///fz8AAIA//f9/P/3/fz8AAIA//v9/P///fz8AAIA/AACAP///fz/+/38//f9/PwAAgD8AAIA/AACAPwAAgD8AAIA//P9/PwAAgD8AAIA/AACAP/3/fz/+/38//v9/P/3/fz8AAIA//v9/P/3/fz8AAIA//v9/P///fz/+/38//f9/PwAAgD/+/38//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/PwAAgD8AAIA//v9/P///fz8AAIA//f9/PwAAgD8AAIA//v9/P///fz/+/38//P9/P/3/fz8AAIA//P9/P///fz8AAIA//v9/PwAAgD8AAIA//v9/P///fz8AAIA/AACAP///fz8AAIA/AACAP///fz8AAIA/AACAP/3/fz8AAIA//v9/P///fz8AAIA//v9/P///fz8AAIA/AACAPwAAgD8AAIA//f9/P///fz8AAIA//v9/P///fz8AAIA//f9/P///fz8AAIA//v9/P///fz8BAIA/AACAP///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P0TwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbshfPArJrnDg9nUn7sgdz+7JsnDg9V67qssE/orFsnDg95jaqs8MvZDBtnDg9dQppskgyirJtnDg98O4UMd0vTbFunDg9jWNJsj/dhrJunDg990sNs0nRfTJsnDg9ZuiAsvyqgLBsnDg9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/v9/P/3/fz///38//v9/P/7/fz/9/38//v9/P///fz8AAIA//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/7/fz/9/38//v9/P/7/fz///38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz///38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/z/fz/9/38//v9/P/3/fz/8/38//v9/P/3/fz/9/38//v9/P///fz8AAIA//v9/P/z/fz/9/38//v9/PxfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvT/rCrtlCim9b+pZvULqCrtnCim9b+pZvU3qCrtvCim9bupZvTDqCrteCim9b+pZvaLqCrtiCim9b+pZvW3qCrtpCim9b+pZvT7qCrtkCim9cOpZvczqCrtoCim9b+pZvYHqCrtcCim9b+pZvenqCrtkCim9cOpZvYPqCrtgCim9cOpZvXDqCrtiCim9b+pZvbjqCrtqCim9b+pZvXrqCrtfCim9bupZvWDqCrtkCim9b+pZvQrqCrtmCim9bupZvffpCrtoCim9b+pZvc3qCrtnCim9b+pZvXvrCrtwCim9cepZvWLqCrttCim9b+pZvcnpCrtoCim9bepZvbDqCrtkCim9b+pZvcXqCrtsCim9cOpZvX3qCrtrCim9cOpZvWfqCrtqCim9b+pZvfvpCrthCim9b+pZvcDqCrtlCim9b+pZvUvqCrttCim9cOpZvYrrCrtqCim9b+pZvbPqCrtvCim9b+pZvVnqCrtuCim9bupZvfPqCrtnCim9b+pZvX/qCrtbCim9b+pZvWzqCrtnCim9bupZvTXqCrtrCim9b+pZvZHqCrtpCim9cOpZvTfqCrtlCim9b+pZvUbqCrtoCim9b+pZvW/qCrtjCim9b+pZvRfrCrthCim9b+pZvUcTt74qZBw/SbYbv67ftz5HE7e+KmQcP0m2G7+u37c+RxO3vipkHD9Jthu/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zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JvfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PSNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vdu4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/PwCAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMAAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPRUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAP0G75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sZBd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/P2fBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MHseXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PxwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsYwbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaPwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/P9SRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02Ma9vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72LzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vWgblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/PwBAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsAAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP+Zqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP3DbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPQAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP27UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP+Zqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP3DbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPQAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP27UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgEvvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPw==" + } + ] +} diff --git a/Assets/Cube.012.shmesh b/Assets/Models/racoon.shmodel similarity index 87% rename from Assets/Cube.012.shmesh rename to Assets/Models/racoon.shmodel index bc26a4e833280158bf40aeb73938f1f82caa6edb..9c5d866ac663720e0c1ab614522d71438f2510e5 100644 GIT binary patch delta 31959 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 Date: Fri, 4 Nov 2022 17:17:48 +0800 Subject: [PATCH 668/793] Changed premake to copy model compiler exe --- SHADE_Engine/premake5.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 06fd7009..42f95520 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -116,7 +116,8 @@ project "SHADE_Engine" filter "configurations:Debug" postbuildcommands { - --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.ModelCompiler}\\bin\\Debug\\assimp-vc142-mtd.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.ModelCompiler}\\bin\\Debug\\ModelCompiler.exe\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodL.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudioL.dll\" \"$(OutDir)\"" } @@ -124,7 +125,8 @@ project "SHADE_Engine" filter "configurations:Release" postbuildcommands { - --"xcopy /r /y /q \"%{IncludeDir.assimp}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.ModelCompiler}\\bin\\Release\\assimp-vc142-mt.dll\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.ModelCompiler}\\bin\\Release\\ModelCompiler.exe\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmod.dll\" \"$(OutDir)\"", "xcopy /r /y /q \"%{IncludeDir.fmod}\\lib\\fmodstudio.dll\" \"$(OutDir)\"" } From 6984653b6484f2f658ffbf1917957f9f45ea457d Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 4 Nov 2022 17:18:40 +0800 Subject: [PATCH 669/793] Renamed and restructured model asset members Added mesh asset vector for model asset to contain --- .../src/Assets/Asset Types/SHModelAsset.h | 25 ++++++++-------- .../Libraries/Loaders/SHModelLoader.cpp | 30 ++++++++++--------- .../Assets/Libraries/Loaders/SHModelLoader.h | 12 ++++++-- .../src/Resource/SHResourceManager.hpp | 12 ++++---- 4 files changed, 44 insertions(+), 35 deletions(-) diff --git a/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h index 45b06198..88a0ab9e 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHModelAsset.h @@ -18,21 +18,11 @@ namespace SHADE { - struct SHMeshDataHeader + struct SHMeshAssetHeader { uint32_t vertexCount; uint32_t indexCount; - uint32_t charCount; - }; - - struct SHMeshData - { std::string name; - std::vector vertexPositions; - std::vector vertexTangents; - std::vector vertexNormals; - std::vector vertexTexCoords; - std::vector indices; }; struct SHModelAssetHeader @@ -40,10 +30,19 @@ namespace SHADE size_t meshCount; }; + struct SH_API SHMeshData : SHAssetData + { + SHMeshAssetHeader header; + std::vector vertexPositions; + std::vector vertexTangents; + std::vector vertexNormals; + std::vector vertexTexCoords; + std::vector indices; + }; + struct SH_API SHModelAsset : SHAssetData { SHModelAssetHeader header; - std::vector headers; - std::vector meshes; + std::vector subMeshes; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp index 57d92b57..4a63a715 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp @@ -16,38 +16,39 @@ namespace SHADE { - void SHModelLoader::ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept + void SHModelLoader::ReadHeader(std::ifstream& file, SHMeshLoaderHeader& header) noexcept { file.read( reinterpret_cast(&header), - sizeof(SHMeshDataHeader) + sizeof(SHMeshLoaderHeader) ); } - void SHModelLoader::ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept + void SHModelLoader::ReadData(std::ifstream& file, SHMeshLoaderHeader const& header, SHMeshData& data) noexcept { - auto const vertexVec3Byte{ sizeof(SHVec3) * header.vertexCount }; - auto const vertexVec2Byte{ sizeof(SHVec2) * header.indexCount }; + auto const vertexVec2Byte{ sizeof(SHVec2) * header.vertexCount }; data.vertexPositions.resize(header.vertexCount); data.vertexTangents.resize(header.vertexCount); data.vertexNormals.resize(header.vertexCount); data.vertexTexCoords.resize(header.vertexCount); data.indices.resize(header.indexCount); + data.header.name.resize(header.charCount); - file.read(data.name.data(), header.charCount); + file.read(data.header.name.data(), header.charCount); file.read(reinterpret_cast(data.vertexPositions.data()), vertexVec3Byte); file.read(reinterpret_cast(data.vertexTangents.data()), vertexVec3Byte); file.read(reinterpret_cast(data.vertexNormals.data()), vertexVec3Byte); file.read(reinterpret_cast(data.vertexTexCoords.data()), vertexVec2Byte); file.read(reinterpret_cast(data.indices.data()), sizeof(uint32_t) * header.indexCount); - + data.header.vertexCount = header.vertexCount; + data.header.indexCount = header.indexCount; } - void SHModelLoader::LoadSHMesh(AssetPath path, SHModelAsset& model) noexcept - { + void SHModelLoader::LoadSHMesh(AssetPath path, SHModelAsset& model) noexcept + { std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; if (!file.is_open()) { @@ -58,17 +59,18 @@ namespace SHADE file.seekg(0); file.read( - reinterpret_cast(&model.header), + reinterpret_cast(&model.header), sizeof(SHModelAssetHeader) ); - model.headers.resize(model.header.meshCount); - model.meshes.resize(model.header.meshCount); + std::vector headers(model.header.meshCount); + model.subMeshes.resize(model.header.meshCount); for (auto i{ 0 }; i < model.header.meshCount; ++i) { - ReadHeader(file, model.headers[i]); - ReadData(file, model.headers[i], model.meshes[i]); + model.subMeshes[i] = new SHMeshData(); + ReadHeader(file, headers[i]); + ReadData(file, headers[i], *model.subMeshes[i]); } file.close(); } diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h index 688e628e..35dc4514 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.h @@ -18,8 +18,16 @@ namespace SHADE { class SHModelLoader : public SHAssetLoader { - void ReadHeader(std::ifstream& file, SHMeshDataHeader& header) noexcept; - void ReadData(std::ifstream& file, SHMeshDataHeader const& header, SHMeshData& data) noexcept; + struct SHMeshLoaderHeader + { + uint32_t vertexCount; + uint32_t indexCount; + uint32_t charCount; + }; + + + void ReadHeader(std::ifstream& file, SHMeshLoaderHeader& header) noexcept; + void ReadData(std::ifstream& file, SHMeshLoaderHeader const& header, SHMeshData& data) noexcept; public: void LoadSHMesh(AssetPath path, SHModelAsset& model) noexcept; diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index d078ce48..1fba71b9 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -49,7 +49,7 @@ namespace SHADE throw std::runtime_error("[SHResourceManager] Attempted to load graphics resource without a SHGraphicsSystem installed."); // Load - const SHModelAsset* assetData = SHAssetManager::GetData(assetId); + const SHMeshData* assetData = SHAssetManager::GetData(assetId); if (assetData == nullptr) { SHLog::Warning("[SHResourceManager] Attempted to load an asset with an invalid Asset ID."); @@ -59,11 +59,11 @@ namespace SHADE Handle meshHandle = gfxSystem->AddMesh ( - assetData->vertexPosition.size(), - assetData->vertexPosition.data(), - assetData->texCoords.data(), - assetData->vertexTangent.data(), - assetData->vertexNormal.data(), + assetData->vertexPositions.size(), + assetData->vertexPositions.data(), + assetData->vertexTexCoords.data(), + assetData->vertexTangents.data(), + assetData->vertexNormals.data(), assetData->indices.size(), assetData->indices.data() ); From 1f0d54486d76309aea0e8a9676f201d107839456 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 4 Nov 2022 17:20:42 +0800 Subject: [PATCH 670/793] Added sub asset data members Changed some control flow in asset manager to accommodate for subassets Read/Write meta files for assets with sub assets --- SHADE_Engine/src/Assets/SHAsset.h | 7 +- SHADE_Engine/src/Assets/SHAssetMacros.h | 7 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 184 ++++++++++++++---- SHADE_Engine/src/Assets/SHAssetManager.h | 9 +- .../src/Assets/SHAssetMetaHandler.cpp | 73 ++++++- SHADE_Engine/src/Assets/SHAssetMetaHandler.h | 3 + 6 files changed, 234 insertions(+), 49 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h index a4e9847c..29f43e0c 100644 --- a/SHADE_Engine/src/Assets/SHAsset.h +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -21,6 +21,11 @@ namespace SHADE AssetName name; AssetID id; AssetType type; - AssetPath path; + AssetPath path; + bool isSubAsset; + + std::vector subAssets; + + AssetID parent; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 52e5cb80..6253ee6d 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -46,10 +46,11 @@ enum class AssetType : AssetTypeMeta SHADER, SHADER_BUILT_IN, TEXTURE, - MESH, + MODEL, SCENE, PREFAB, MATERIAL, + MESH, MAX_COUNT }; constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; @@ -83,7 +84,7 @@ constexpr std::string_view SCENE_EXTENSION {".shade"}; constexpr std::string_view PREFAB_EXTENSION {".shprefab"}; constexpr std::string_view MATERIAL_EXTENSION {".shmat"}; constexpr std::string_view TEXTURE_EXTENSION {".shtex"}; -constexpr std::string_view MESH_EXTENSION {".shmesh"}; +constexpr std::string_view MODEL_EXTENSION {".shmodel"}; constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, @@ -91,7 +92,7 @@ constexpr std::string_view EXTENSIONS[] = { SHADER_BUILT_IN_EXTENSION, MATERIAL_EXTENSION, TEXTURE_EXTENSION, - MESH_EXTENSION, + MODEL_EXTENSION, SCRIPT_EXTENSION, SCENE_EXTENSION, PREFAB_EXTENSION, diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 29e00075..689276b1 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -16,7 +16,7 @@ #include "SHAssetManager.h" #include "SHAssetMetaHandler.h" -#include "Libraries/Loaders/SHMeshLoader.h" +#include "Libraries/Loaders/SHModelLoader.h" #include "Libraries/Loaders/SHTextureLoader.h" #include "Libraries/Loaders/SHShaderSourceLoader.h" #include "Libraries/Loaders/SHTextBasedLoader.h" @@ -178,7 +178,8 @@ namespace SHADE name, id, type, - newPath + newPath, + false }; assetCollection.insert({ @@ -187,7 +188,8 @@ namespace SHADE name, id, type, - newPath + newPath, + false ) }); @@ -324,25 +326,32 @@ namespace SHADE return result; } - AssetID SHAssetManager::CompileAsset(AssetPath const& path) noexcept + void SHAssetManager::CompileAsset(AssetPath const& path) noexcept { - SHAsset newAsset - { - .name = path.stem().string() - }; - + if (!std::filesystem::exists(path)) + { + SHLOG_ERROR("Path provided does not point to a file: {}", path.string()); + return; + } + AssetPath newPath; auto const ext{ path.extension().string() }; if (ext == GLSL_EXTENSION.data()) { - newAsset.path = SHShaderSourceCompiler::LoadAndCompileShader(path).value(); - newAsset.id = GenerateAssetID(AssetType::SHADER_BUILT_IN); - newAsset.type = AssetType::SHADER_BUILT_IN; + newPath = SHShaderSourceCompiler::LoadAndCompileShader(path).value(); } + else if (ext == GLTF_EXTENSION.data() || ext == FBX_EXTENSION.data()) + { + std::string command = MODEL_COMPILER_EXE.data(); + command += " " + path.string(); + std::system(command.c_str()); - assetCollection.insert({ newAsset.id, newAsset }); - SHAssetMetaHandler::WriteMetaData(newAsset); + std::string modelPath = path.string().substr(0, path.string().find_last_of('.')); + modelPath += MODEL_EXTENSION; + newPath = modelPath; + + GenerateNewMeta(newPath); + } - return newAsset.id; } FolderPointer SHAssetManager::GetRootFolder() noexcept @@ -395,23 +404,15 @@ namespace SHADE for (auto const& path : paths) { - SHAsset newAsset - { - .name = path.stem().string() - }; - + AssetPath newPath; auto const ext{ path.extension().string() }; if (ext == GLSL_EXTENSION.data()) { - newAsset.path = SHShaderSourceCompiler::LoadAndCompileShader(path).value(); - newAsset.id = GenerateAssetID(AssetType::SHADER_BUILT_IN); - newAsset.type = AssetType::SHADER_BUILT_IN; + newPath = SHShaderSourceCompiler::LoadAndCompileShader(path).value(); } else if (ext == DDS_EXTENSION.data()) { - newAsset.path = SHTextureCompiler::CompileTextureAsset(path).value(); - newAsset.id = GenerateAssetID(AssetType::TEXTURE); - newAsset.type = AssetType::TEXTURE; + newPath = SHTextureCompiler::CompileTextureAsset(path).value(); } else if (ext == GLTF_EXTENSION.data() || ext == FBX_EXTENSION.data()) { @@ -419,15 +420,12 @@ namespace SHADE command += " " + path.string(); std::system(command.c_str()); - std::string newPath = path.string().substr(0, path.string().find_last_of('.')); - newPath += MESH_EXTENSION; - newAsset.path = newPath; - newAsset.id = GenerateAssetID(AssetType::MESH); - newAsset.type = AssetType::MESH; + std::string modelPath = path.string().substr(0, path.string().find_last_of('.')); + modelPath += MODEL_EXTENSION; + newPath = modelPath; } - assetCollection.insert({ newAsset.id, newAsset }); - SHAssetMetaHandler::WriteMetaData(newAsset); + GenerateNewMeta(newPath); } } @@ -442,10 +440,11 @@ namespace SHADE loaders[static_cast(AssetType::SHADER)] = dynamic_cast(new SHShaderSourceLoader()); loaders[static_cast(AssetType::SHADER_BUILT_IN)] = loaders[static_cast(AssetType::SHADER)]; loaders[static_cast(AssetType::TEXTURE)] = dynamic_cast(new SHTextureLoader()); - loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); + loaders[static_cast(AssetType::MODEL)] = dynamic_cast(new SHModelLoader()); loaders[static_cast(AssetType::SCENE)] = dynamic_cast(new SHTextBasedLoader()); loaders[static_cast(AssetType::PREFAB)] = loaders[static_cast(AssetType::SCENE)]; loaders[static_cast(AssetType::MATERIAL)] = loaders[static_cast(AssetType::SCENE)]; + loaders[static_cast(AssetType::MESH)] = nullptr; } /**************************************************************************** @@ -453,9 +452,9 @@ namespace SHADE ****************************************************************************/ void SHAssetManager::Load() noexcept { - //CompileAll(); BuildAssetCollection(); InitLoaders(); + //CompileAll(); //LoadAllData(); } @@ -473,8 +472,12 @@ namespace SHADE SHAssetData* SHAssetManager::LoadData(SHAsset const& asset) noexcept { - SHAssetData* data = loaders[static_cast(asset.type)]->Load(asset.path); + if (asset.isSubAsset) + { + return LoadSubData(asset); + } + SHAssetData* data = loaders[static_cast(asset.type)]->Load(asset.path); if (data == nullptr) { SHLOG_ERROR("Unable to load asset into memory: {}\n", asset.path.string()); @@ -487,13 +490,120 @@ namespace SHADE return data; } - void SHAssetManager::LoadDataFromScratch(AssetPath path) noexcept + SHAssetData* SHAssetManager::LoadSubData(SHAsset const& asset) noexcept { + auto const& parent = assetCollection[asset.parent]; + auto parentData = loaders[static_cast(parent.type)]->Load(parent.path); + if (parentData == nullptr) + { + SHLOG_ERROR("Unable to load asset into memory: {}\n", parent.path.string()); + } + else + { + assetData.emplace(parent.id, parentData); + if (parent.type == AssetType::MODEL) + { + auto parentModel = reinterpret_cast(parentData); + for (auto i {0}; i < parent.subAssets.size(); ++i) + { + assetData.emplace( + parent.subAssets[i]->id, + parentModel->subMeshes[i] + ); + } + } + + return assetData[asset.id]; + } + + return parentData; + } + + void SHAssetManager::LoadNewData(AssetPath path) noexcept + { + } + + void SHAssetManager::GenerateNewMeta(AssetPath path) noexcept + { + auto const ext = path.extension().string(); + if (ext == SHADER_BUILT_IN_EXTENSION.data()) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::SHADER_BUILT_IN), + AssetType::SHADER_BUILT_IN, + path, + false + }; + + assetCollection.emplace(newAsset.id, newAsset); + SHAssetMetaHandler::WriteMetaData(newAsset); + } + else if (ext == TEXTURE_EXTENSION.data()) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::SHADER_BUILT_IN), + AssetType::SHADER_BUILT_IN, + path, + false + }; + + assetCollection.emplace(newAsset.id, newAsset); + SHAssetMetaHandler::WriteMetaData(newAsset); + } + else if (ext == MODEL_EXTENSION) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::MODEL), + AssetType::MODEL, + path, + false + }; + + assetCollection.emplace(newAsset.id, newAsset); + + SHModelAsset* const data = reinterpret_cast(LoadData(newAsset)); + assetData.emplace(newAsset.id, data); + for(auto const& subMesh : data->subMeshes) + { + SHAsset subAsset{ + .name = subMesh->header.name, + .id = GenerateAssetID(AssetType::MESH), + .type = AssetType::MESH, + .isSubAsset = true, + .parent = newAsset.id + }; + + assetCollection.emplace(subAsset.id, subAsset); + assetCollection[newAsset.id].subAssets.push_back(&assetCollection[subAsset.id]); + + assetData.emplace(subAsset.id, subMesh); + } + + SHAssetMetaHandler::WriteMetaData(assetCollection[newAsset.id]); + } } void SHAssetManager::BuildAssetCollection() noexcept { SHFileSystem::BuildDirectory(ASSET_ROOT.data(), folderRoot, assetCollection); + + for (auto& asset : std::ranges::views::values(assetCollection)) + { + if (!asset.subAssets.empty()) + { + // Add subasset data into map, replace pointer and free heap memory + for (auto i{ 0 }; i < asset.subAssets.size(); ++i) + { + auto const id = asset.subAssets[i]->id; + assetCollection[id] = *asset.subAssets[i]; + delete asset.subAssets[i]; + asset.subAssets[i] = &assetCollection[id]; + } + } + } } } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 4daeb536..ba10d84f 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -87,7 +87,7 @@ namespace SHADE static std::vector GetAllDataOfType(AssetType type) noexcept; static std::vector GetAllRecordOfType(AssetType type) noexcept; - static AssetID CompileAsset(AssetPath const& path) noexcept; + static void CompileAsset(AssetPath const& path) noexcept; static FolderPointer GetRootFolder() noexcept; @@ -95,8 +95,11 @@ namespace SHADE static void InitLoaders() noexcept; static void LoadAllData() noexcept; - static SHAssetData* LoadData(SHAsset const& asset) noexcept; - static void LoadDataFromScratch(AssetPath path) noexcept; + static SHAssetData* LoadData(SHAsset const& asset) noexcept; + static SHAssetData* LoadSubData(SHAsset const& asset) noexcept; + static void LoadNewData(AssetPath path) noexcept; + static void GenerateNewMeta(AssetPath path) noexcept; + inline static void BuildAssetCollection() noexcept; static bool IsRecognised(char const*) noexcept; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 1bfec00d..9ae8cde2 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -9,7 +9,6 @@ ******************************************************************************/ #include "SHpch.h" #include "SHAssetMetaHandler.h" -#include #include namespace SHADE @@ -21,11 +20,15 @@ namespace SHADE * \brief Helper function to retrieve field value from meta data file * for processing ****************************************************************************/ - void GetFieldValue(std::ifstream& file, std::string& line) noexcept + bool GetFieldValue(std::ifstream& file, std::string& line) noexcept { line = ""; - std::getline(file, line); - line = line.substr(line.find_last_of(':') + 2, line.length()); + if (std::getline(file, line)) + { + line = line.substr(line.find_last_of(':') + 2, line.length()); + return true; + } + return false; } /**************************************************************************** @@ -66,7 +69,8 @@ namespace SHADE std::ifstream metaFile{ path.string(), std::ios_base::in }; if (!metaFile.is_open()) { - // Error unable to open + SHLOG_ERROR("Unable to open meta file: {}", path.string()); + return {}; } std::string line; @@ -92,6 +96,43 @@ namespace SHADE AssetTypeMeta type; typeStream >> type; meta.type = static_cast(type); + + meta.isSubAsset = false; + + // Burn Line + if (std::getline(metaFile, line)) + { + // Name Line + while(GetFieldValue(metaFile, line)) + { + auto subAsset = new SHAsset(); + + // Get resource name + std::stringstream nameStream{ line }; + AssetName name; + nameStream >> name; + subAsset->name = name; + + // Get resource id + GetFieldValue(metaFile, line); + std::stringstream idStream{ line }; + AssetID id; + idStream >> id; + subAsset->id = id; + + // Get resource type + GetFieldValue(metaFile, line); + std::stringstream typeStream{ line }; + AssetTypeMeta type; + typeStream >> type; + subAsset->type = static_cast(type); + + subAsset->isSubAsset = true; + subAsset->parent = meta.id; + + meta.subAssets.push_back(subAsset); + } + } metaFile.close(); @@ -108,6 +149,12 @@ namespace SHADE ****************************************************************************/ void SHAssetMetaHandler::WriteMetaData(SHAsset const& meta) noexcept { + if (meta.isSubAsset) + { + SHLOG_WARNING("Cannot write subasset meta: {}", meta.name); + return; + } + //TODO: Write into binary eventually std::string path{ meta.path.string() }; path.append(META_EXTENSION); @@ -124,7 +171,23 @@ namespace SHADE metaFile << "ID: " << meta.id << "\n"; metaFile << "Type: " << static_cast(meta.type) << std::endl; + if (!meta.subAssets.empty()) + { + metaFile << "Sub Assets:\n"; + + for (auto const& subAsset : meta.subAssets) + { + WriteSubAssetMeta(metaFile, *subAsset); + } + } + metaFile.close(); } + void SHAssetMetaHandler::WriteSubAssetMeta(std::ofstream& metaFile, SHAsset const& subAsset) noexcept + { + metaFile << "Name: " << subAsset.name << "\n"; + metaFile << "ID: " << subAsset.id << "\n"; + metaFile << "Type: " << static_cast(subAsset.type) << std::endl; + } } diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.h b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h index 88b5329d..ffa965aa 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.h +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.h @@ -12,6 +12,7 @@ #include "SHAssetMacros.h" #include "SHAsset.h" +#include namespace SHADE { @@ -45,6 +46,8 @@ namespace SHADE * \brief Writes meta data into text file ****************************************************************************/ static void WriteMetaData(SHAsset const&) noexcept; + + static void WriteSubAssetMeta(std::ofstream&, SHAsset const&) noexcept; }; } From 9ef956029edfdba1e1b834e2cae0538b187b9088 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 4 Nov 2022 17:20:52 +0800 Subject: [PATCH 671/793] Changed name check for hardcoded racoon mesh --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 23b57dfc..d0c7496d 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -50,7 +50,7 @@ namespace Sandbox switch (asset.type) { case AssetType::MESH: - if (asset.name == "Cube.012") + if (asset.name == "Raccoon") handles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); break; case AssetType::TEXTURE: From d6804c09f4762976f8d892f8f1d53c120e8cf44b Mon Sep 17 00:00:00 2001 From: Glence Date: Fri, 4 Nov 2022 17:31:53 +0800 Subject: [PATCH 672/793] fixed player throwing added item script player jump is now affected by item weight --- TempScriptsFolder/Item.cs | 18 ++++++++ TempScriptsFolder/PickAndThrow.cs | 61 +++++++++++++-------------- TempScriptsFolder/PlayerController.cs | 48 +++++++++++++++++---- 3 files changed, 87 insertions(+), 40 deletions(-) create mode 100644 TempScriptsFolder/Item.cs diff --git a/TempScriptsFolder/Item.cs b/TempScriptsFolder/Item.cs new file mode 100644 index 00000000..96ec092d --- /dev/null +++ b/TempScriptsFolder/Item.cs @@ -0,0 +1,18 @@ +using SHADE; +using System; +public class Item : Script +{ + public enum ItemCategory + { + LIGHT, + MEDIUM, + HEAVY + } + + public ItemCategory currCategory; + public Item(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + } +} \ No newline at end of file diff --git a/TempScriptsFolder/PickAndThrow.cs b/TempScriptsFolder/PickAndThrow.cs index 80fcd61a..ed59d7e8 100644 --- a/TempScriptsFolder/PickAndThrow.cs +++ b/TempScriptsFolder/PickAndThrow.cs @@ -4,9 +4,10 @@ using static PlayerController; public class PickAndThrow : Script { - private PlayerController pc; - public GameObject item; public Vector3 throwForce = new Vector3(200.0f, 300.0f, 200.0f); + public GameObject item; + private PlayerController pc; + private Camera cam; private Transform itemTransform; private RigidBody itemRidibody; private Transform raccoonHoldLocation; @@ -23,40 +24,35 @@ public class PickAndThrow : Script Debug.Log("CHILD EMPTY"); else raccoonHoldLocation.LocalPosition = new Vector3(0.0f, 1.0f, 0.0f); - - itemTransform = item.GetComponent(); - if (itemTransform == null) - Debug.Log("Item transform EMPTY"); - - itemRidibody = item.GetComponent(); - if (itemRidibody == null) - Debug.Log("Item rb EMPTY"); } protected override void update() { - if (!pc.isMoveKeyPress) + if (cam == null) + cam = GetComponentInChildren(); + else if (cam != null) { - if (pc.xAxisMove != 0) - { - lastXDir = pc.xAxisMove; - lastZDir = 0.0f; - } - if (pc.zAxisMove != 0) - { - lastXDir = 0.0f; - lastZDir = pc.zAxisMove; - } + Vector3 camerAixs = cam.GetForward(); + camerAixs.y = 0; + camerAixs.Normalise(); + lastXDir = camerAixs.x; + lastZDir = camerAixs.z; } - else + + if (item.GetScript() != null && itemTransform == null && itemRidibody == null) { - lastXDir = pc.xAxisMove; - lastZDir = pc.zAxisMove; + itemTransform = item.GetComponent(); + if (itemTransform == null) + Debug.Log("Item transform EMPTY"); + + itemRidibody = item.GetComponent(); + if (itemRidibody == null) + Debug.Log("Item rb EMPTY"); } if (pc != null && inRange && !pc.holdItem && Input.GetKey(Input.KeyCode.E)) pc.holdItem = true; - if (pc != null && itemRidibody != null && itemTransform!= null && pc.holdItem) + if (pc != null && itemRidibody != null && itemTransform != null && pc.holdItem) { itemTransform.LocalPosition = raccoonHoldLocation.GlobalPosition; itemRidibody.IsGravityEnabled = false; @@ -66,13 +62,13 @@ public class PickAndThrow : Script if (Input.GetMouseButtonDown(Input.MouseCode.LeftButton)) { pc.holdItem = false; + inRange = false; itemRidibody.IsGravityEnabled = true; itemRidibody.AddForce(new Vector3(throwForce.x * lastXDir, throwForce.y, throwForce.z * lastZDir)); itemRidibody.LinearVelocity += pc.rb.LinearVelocity; - Debug.Log($"x: {itemRidibody.LinearVelocity.x} z: {itemRidibody.LinearVelocity.z}"); } } - else if(!pc.holdItem) + else if(!pc.holdItem && itemRidibody != null) itemRidibody.IsGravityEnabled = true; } protected override void onCollisionEnter(CollisionInfo info) @@ -80,20 +76,21 @@ public class PickAndThrow : Script } protected override void onTriggerEnter(CollisionInfo info) { - Debug.Log("ENTER"); - if (info.GameObject == item && !pc.holdItem) + //Debug.Log("ENTER"); + if (info.GameObject.GetScript() != null && !pc.holdItem) { + item = info.GameObject; inRange = true; } } protected override void onTriggerStay(CollisionInfo info) { - Debug.Log("STAY"); + //Debug.Log("STAY"); } protected override void onTriggerExit(CollisionInfo info) { - Debug.Log("EXIT"); - if (info.GameObject == item && !pc.holdItem) + //Debug.Log("EXIT"); + if (info.GameObject.GetScript() != null && !pc.holdItem) { inRange = false; } diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 77a4b9d3..bcdf24d1 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -1,7 +1,6 @@ using SHADE; using System; - -//in air controls? +using static Item; public class PlayerController : Script { @@ -19,6 +18,7 @@ public class PlayerController : Script public RigidBody rb; private Transform tranform; private Camera cam; + private PickAndThrow pat; //to be remove public float drag = 2.0f; @@ -68,13 +68,24 @@ public class PlayerController : Script private float gravity = -9.8f; private float groundGravity = -0.5f; + //ItemMultipler================================================================== + public float lightMultiper = 0.75f; + public float mediumMultiper = 0.5f; + public float heavyMultiper = 0.25f; + public PlayerController(GameObject gameObj) : base(gameObj) { } protected override void awake() { - + //default setup isMoveKeyPress = false; holdItem = false; + + //Jump setup + float timeToApex = maxJumpTime / 2; + gravity = (-2 * maxJumpHeight) / MathF.Pow(timeToApex, 2); + initialJumpVel = (2 * maxJumpHeight) / timeToApex; + //rigidbody check rb = GetComponent(); if (rb == null) @@ -94,10 +105,10 @@ public class PlayerController : Script if(tranform == null) Debug.LogError("tranform is NULL!"); - //Jump setup - float timeToApex = maxJumpTime / 2; - gravity = (-2 * maxJumpHeight) / MathF.Pow(timeToApex, 2); - initialJumpVel = (2 * maxJumpHeight) / timeToApex; + //PickAndThrow checl + pat = GetScript(); + if (pat == null) + Debug.LogError("PickAndThrow is NULL!"); //toRemove tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); @@ -116,9 +127,11 @@ public class PlayerController : Script tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); } + GotCaught(); MoveKey(); + //Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } @@ -202,7 +215,7 @@ public class PlayerController : Script { if (rb != null) { - rb.AddForce(new Vector3(moveForce * axisMove.x, 0.0f, moveForce * axisMove.y)); + rb.AddForce(new Vector3(axisMove.x, 0.0f,axisMove.y) * moveForce); if (isMoveKeyPress) { @@ -259,6 +272,16 @@ public class PlayerController : Script currentState = RaccoonStates.JUMP; Vector3 v = rb.LinearVelocity; v.y = initialJumpVel * 0.5f; + if (pat != null && pat.item.GetScript() != null && holdItem) + { + Item item = pat.item.GetScript(); + if (item.currCategory == ItemCategory.LIGHT) + v.y *= lightMultiper; + if (item.currCategory == ItemCategory.MEDIUM) + v.y *= mediumMultiper; + if (item.currCategory == ItemCategory.HEAVY) + v.y *= heavyMultiper; + } rb.LinearVelocity = v; } } @@ -319,6 +342,15 @@ public class PlayerController : Script } } + private void GotCaught() + { + if (currentState == RaccoonStates.CAUGHT && tranform != null) + { + currentState = RaccoonStates.IDILE; + tranform.LocalPosition = new Vector3(-3.0f, -2.0f, -5.0f); + } + } + protected override void onCollisionEnter(CollisionInfo info) { } From be16fbed19c4aeeb6c8a4b67e4c4d32ea35debe2 Mon Sep 17 00:00:00 2001 From: Glence Date: Fri, 4 Nov 2022 17:35:09 +0800 Subject: [PATCH 673/793] added item script in the scene --- SHADE_Application/src/Scenes/SBTestScene.cpp | 1 + TempScriptsFolder/PickAndThrow.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index fa5d7868..7d3ca4ff 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -182,6 +182,7 @@ namespace Sandbox scriptEngine->AddScript(racoon, "PickAndThrow"); scriptEngine->AddScript(racoonCamera, "ThirdPersonCamera"); scriptEngine->AddScript(AI, "AIPrototype"); + scriptEngine->AddScript(item, "Item"); auto raccoonShowcase = SHEntityManager::CreateEntity(); auto& renderableShowcase = *SHComponentManager::GetComponent_s(raccoonShowcase); diff --git a/TempScriptsFolder/PickAndThrow.cs b/TempScriptsFolder/PickAndThrow.cs index ed59d7e8..ea814b36 100644 --- a/TempScriptsFolder/PickAndThrow.cs +++ b/TempScriptsFolder/PickAndThrow.cs @@ -4,7 +4,7 @@ using static PlayerController; public class PickAndThrow : Script { - public Vector3 throwForce = new Vector3(200.0f, 300.0f, 200.0f); + public Vector3 throwForce = new Vector3(100.0f, 200.0f, 100.0f); public GameObject item; private PlayerController pc; private Camera cam; From 1267442210f26861c9fa6c73474f444d9df22c8b Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 4 Nov 2022 18:27:25 +0800 Subject: [PATCH 674/793] Deserialization flow is now as follows: Create entities and components >> Fetch Assets needed >> Load assets needed >> Initialize entities Some other bug fixes --- Assets/Scenes/M2Scene.shade | 2 +- .../AssetBrowser/SHAssetBrowser.cpp | 17 +- .../MaterialInspector/SHMaterialInspector.cpp | 2 +- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 1 + .../MiddleEnd/Batching/SHSuperBatch.cpp | 4 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 + .../MiddleEnd/Textures/SHTextureLibrary.cpp | 13 +- .../src/Resource/SHResourceManager.hpp | 2 +- .../src/Serialization/SHSerialization.cpp | 38 +- .../src/Serialization/SHSerialization.h | 6 +- .../Serialization/SHSerializationHelper.hpp | 380 +++--------------- .../src/Serialization/SHYAMLConverters.h | 317 +++++++++++++++ 12 files changed, 455 insertions(+), 335 deletions(-) create mode 100644 SHADE_Engine/src/Serialization/SHYAMLConverters.h diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 39caeeaa..35608ab6 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -32,7 +32,7 @@ Scale: {x: 49.4798889, y: 0.5, z: 17.5} Renderable Component: Mesh: 80365422 - Material: 126974645 + Material: 0 RigidBody Component: Type: Static Mass: 1 diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index a18cd70f..d875d743 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -189,12 +189,17 @@ namespace SHADE switch (file.assetMeta->type) { case AssetType::INVALID: break; - case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; - case AssetType::SHADER_BUILT_IN: icon = ICON_FA_FILE_CODE; break; - case AssetType::TEXTURE: icon = ICON_FA_IMAGES; break; - case AssetType::MESH: icon = ICON_FA_CUBES; break; - case AssetType::SCENE: icon = ICON_MD_IMAGE; break; - case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; + case AssetType::SHADER: break; + case AssetType::SHADER_BUILT_IN: break; + case AssetType::TEXTURE: break; + case AssetType::MESH: break; + case AssetType::SCENE: + if(auto editor = SHSystemManager::GetSystem()) + { + editor->LoadScene(file.assetMeta->id); + } + break; + case AssetType::PREFAB: break; case AssetType::MATERIAL: if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp index 3eb8564f..13ecb9fa 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MaterialInspector/SHMaterialInspector.cpp @@ -6,8 +6,8 @@ #include "Assets/SHAssetManager.h" #include "Editor/IconsMaterialDesign.h" -#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Editor/SHEditorWidgets.hpp" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Resource/SHResourceManager.h" namespace SHADE diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index de137b28..c9dd4eda 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -88,6 +88,7 @@ namespace SHADE /* Getter Functions */ /*-----------------------------------------------------------------------------*/ Handle GetPipeline() const noexcept { return pipeline; }; + bool IsEmpty() const noexcept { return subBatches.empty(); } private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index df389879..b827652e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -68,6 +68,10 @@ namespace SHADE return; batch->Remove(renderable); + + // If batch is empty, remove batch + if (batch->IsEmpty()) + batches.erase(batch); } void SHSuperBatch::Clear() noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 32a03e33..43de46bb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -270,7 +270,15 @@ namespace SHADE worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); // Create default materials + std::array defaultTexture = { 255, 255, 255, 255 }; + std::vector mipOffsets{}; + mipOffsets.push_back(0); + auto tex = AddTexture(4, defaultTexture.data(), 1, 1, SHTexture::TextureFormat::eR8G8B8A8Unorm, mipOffsets); + BuildTextures(); + defaultMaterial = AddMaterial(defaultVertShader, defaultFragShader, gBufferSubpass); + defaultMaterial->SetProperty("data.textureIndex", tex->TextureArrayIndex); + // Create debug draw pipeline debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 8719458b..3b6448fa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -156,14 +156,15 @@ namespace SHADE /* Build Descriptor Set with all the Textures only if there are textures */ if (!texOrder.empty()) { - if (!texDescriptors) + if (texDescriptors) { - texDescriptors = descPool->Allocate - ( - { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] }, - { static_cast(texOrder.size()) } - ); + texDescriptors.Free(); } + texDescriptors = descPool->Allocate + ( + { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] }, + { static_cast(texOrder.size()) } + ); texDescriptors->ModifyWriteDescImage ( SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index ee1a76ba..09c692e5 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -24,7 +24,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" -#include "Serialization/SHSerializationHelper.hpp" +#include "Serialization/SHYAMLConverters.h" namespace SHADE { diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index dc79ac72..f2829b95 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -1,8 +1,8 @@ #include "SHpch.h" #include -#include "SHSerializationHelper.hpp" #include "SHSerialization.h" +#include "SHSerializationHelper.hpp" #include "ECS_Base/Managers/SHEntityManager.h" #include "Scene/SHSceneManager.h" @@ -118,8 +118,15 @@ namespace SHADE SHLOG_ERROR("Failed to create entities from deserializaiton") return NewSceneName.data(); } - //Initialize Entity auto entityVecIt = createdEntities.begin(); + AssetQueue assetQueue; + for (auto it = entities.begin(); it != entities.end(); ++it) + { + SHSerializationHelper::FetchAssetsFromComponent((*it)[ComponentsNode], *entityVecIt, assetQueue); + } + LoadAssetsFromAssetQueue(assetQueue); + //Initialize Entity + entityVecIt = createdEntities.begin(); for (auto it = entities.begin(); it != entities.end(); ++it) { InitializeEntity(*it, *entityVecIt++); @@ -256,6 +263,33 @@ namespace SHADE return componentIDList; } + void SHSerialization::LoadAssetsFromAssetQueue(AssetQueue& assetQueue) + { + for (auto& [assetId, assetType] : assetQueue) + { + switch(assetType) + { + case AssetType::INVALID: break; + case AssetType::SHADER: break; + case AssetType::SHADER_BUILT_IN: break; + case AssetType::TEXTURE: + SHResourceManager::LoadOrGet(assetId); + break; + case AssetType::MESH: + SHResourceManager::LoadOrGet(assetId); + break; + case AssetType::SCENE: break; + case AssetType::PREFAB: break; + case AssetType::MATERIAL: + SHResourceManager::LoadOrGet(assetId); + break; + case AssetType::MAX_COUNT: break; + default: ; + } + } + SHResourceManager::FinaliseChanges(); + } + void SHSerialization::InitializeEntity(YAML::Node const& entityNode, EntityID const& eid) { auto const componentsNode = entityNode[ComponentsNode]; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index 865d53a3..3cb268f2 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -4,8 +4,10 @@ #include #include -#include + +#include "ECS_Base/SHECSMacros.h" #include +#include namespace YAML { @@ -42,6 +44,8 @@ namespace SHADE static EntityID DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID = MAX_EID) noexcept; static std::vector GetComponentIDList(YAML::Node const& componentsNode); + + static void LoadAssetsFromAssetQueue(std::unordered_map& assetQueue); private: static void InitializeEntity(YAML::Node const& entityNode, EntityID const& eid); diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 46e591dc..77f10269 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -1,329 +1,20 @@ #pragma once +#include "SHYAMLConverters.h" #include #include "ECS_Base/Components/SHComponent.h" #include +#include #include "ECS_Base/Managers/SHComponentManager.h" -#include "Math/Vector/SHVec2.h" -#include "Math/Vector/SHVec3.h" -#include "Math/Vector/SHVec4.h" -#include "Resource/SHResourceManager.h" -#include "Graphics/MiddleEnd/Interface/SHRenderable.h" -#include "Graphics/MiddleEnd/Interface/SHMaterial.h" -#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" -#include "SHSerializationTools.h" -#include "Physics/Components/SHColliderComponent.h" #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Tools/SHLog.h" -namespace YAML -{ - using namespace SHADE; - - template<> - struct convert - { - static constexpr const char* x = "x"; - static constexpr const char* y = "y"; - static constexpr const char* z = "z"; - static constexpr const char* w = "w"; - - static Node encode(SHVec4 const& rhs) - { - Node node; - node.SetStyle(EmitterStyle::Flow); - node[x] = rhs.x; - node[y] = rhs.y; - node[z] = rhs.z; - node[w] = rhs.w; - return node; - } - static bool decode(Node const& node, SHVec4& rhs) - { - if (node[x].IsDefined()) - rhs.x = node[x].as(); - if (node[y].IsDefined()) - rhs.y = node[y].as(); - if (node[z].IsDefined()) - rhs.z = node[z].as(); - if (node[w].IsDefined()) - rhs.w = node[w].as(); - return true; - } - }; - - template<> - struct convert - { - static constexpr const char* x = "x"; - static constexpr const char* y = "y"; - static constexpr const char* z = "z"; - - static Node encode(SHVec3 const& rhs) - { - Node node; - node.SetStyle(EmitterStyle::Flow); - node[x] = rhs.x; - node[y] = rhs.y; - node[z] = rhs.z; - return node; - } - static bool decode(Node const& node, SHVec3& rhs) - { - if (node[x].IsDefined()) - rhs.x = node[x].as(); - if (node[y].IsDefined()) - rhs.y = node[y].as(); - if (node[z].IsDefined()) - rhs.z = node[z].as(); - return true; - } - }; - - template<> - struct convert - { - static constexpr const char* x = "x"; - static constexpr const char* y = "y"; - - static Node encode(SHVec2 const& rhs) - { - Node node; - node.SetStyle(EmitterStyle::Flow); - node[x] = rhs.x; - node[y] = rhs.y; - return node; - } - static bool decode(Node const& node, SHVec2& rhs) - { - if (node[x].IsDefined()) - rhs.x = node[x].as(); - if (node[y].IsDefined()) - rhs.y = node[y].as(); - return true; - } - }; - - template<> - struct convert - { - static constexpr const char* IsTrigger = "Is Trigger"; - - static constexpr const char* Type = "Type"; - static constexpr const char* HalfExtents = "Half Extents"; - static constexpr const char* Radius = "Radius"; - - static constexpr const char* Friction = "Friction"; - static constexpr const char* Bounciness = "Bounciness"; - static constexpr const char* Density = "Density"; - static constexpr const char* PositionOffset = "Position Offset"; - - static Node encode(SHCollider& rhs) - { - Node node; - - node[IsTrigger] = rhs.IsTrigger(); - - rttr::type const shapeRttrType = rttr::type::get(); - rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); - SHCollider::Type colliderType = rhs.GetType(); - - node[Type] = enumAlign.value_to_name(colliderType).data(); - - switch (colliderType) - { - case SHCollider::Type::BOX: - { - auto const bb = reinterpret_cast(rhs.GetShape()); - node[HalfExtents] = bb->GetHalfExtents(); - } - break; - case SHCollider::Type::SPHERE: - { - auto const bs = reinterpret_cast(rhs.GetShape()); - node[Radius] = bs->GetRadius(); - } - break; - case SHCollider::Type::CAPSULE: break; - default:; - } - - node[Friction] = rhs.GetFriction(); - node[Bounciness] = rhs.GetBounciness(); - node[Density] = rhs.GetDensity(); - node[PositionOffset] = rhs.GetPositionOffset(); - - return node; - } - static bool decode(Node const& node, SHCollider& rhs) - { - if (node[IsTrigger].IsDefined()) - rhs.SetIsTrigger(node[IsTrigger].as()); - if (!node[Type].IsDefined()) - return false; - rttr::type const shapeRttrType = rttr::type::get(); - rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); - bool ok; - const SHCollider::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); - if (!ok) - return false; - switch (colliderType) - { - case SHCollider::Type::BOX: - { - if (node[HalfExtents].IsDefined()) - rhs.SetBoundingBox(node[HalfExtents].as()); - } - break; - case SHCollider::Type::SPHERE: - { - if (node[Radius].IsDefined()) - rhs.SetBoundingSphere(node[Radius].as()); - } - break; - case SHCollider::Type::CAPSULE: break; - default:; - } - if (node[Friction].IsDefined()) - rhs.SetFriction(node[Friction].as()); - if (node[Bounciness].IsDefined()) - rhs.SetBounciness(rhs.GetBounciness()); - if (node[Density].IsDefined()) - rhs.SetDensity(node[Density].as()); - if (node[PositionOffset].IsDefined()) - rhs.SetPositionOffset(node[PositionOffset].as()); - - return true; - } - }; - - template<> - struct convert - { - static constexpr const char* Colliders = "Colliders"; - static Node encode(SHColliderComponent& rhs) - { - Node node, collidersNode; - auto const& colliders = rhs.GetColliders(); - int const numColliders = static_cast(colliders.size()); - for (int i = 0; i < numColliders; ++i) - { - auto& collider = rhs.GetCollider(i); - Node colliderNode = convert::encode(collider); - if (colliderNode.IsDefined()) - collidersNode[i] = colliderNode; - } - node[Colliders] = collidersNode; - return node; - } - static bool decode(Node const& node, SHColliderComponent& rhs) - { - if (node[Colliders].IsDefined()) - { - int numColliders{}; - for (auto const& colliderNode : node[Colliders]) - { - rttr::type const shapeRttrType = rttr::type::get(); - rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); - bool ok = false; - const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); - if (!ok) - return false; - - switch (colliderType) - { - case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; - case SHCollider::Type::SPHERE: rhs.AddBoundingSphere(); break; - case SHCollider::Type::CAPSULE: break; - default:; - } - YAML::convert::decode(colliderNode, rhs.GetCollider(numColliders++)); - } - } - return true; - } - }; - - template<> - struct convert - { - static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; - static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; - static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; - static constexpr std::string_view PROPS_YAML_TAG = "Properties"; - - static YAML::Node encode(SHMaterialSpec const& rhs) - { - YAML::Node node; - node[VERT_SHADER_YAML_TAG.data()] = rhs.vertexShader; - node[FRAG_SHADER_YAML_TAG.data()] = rhs.fragShader; - node[SUBPASS_YAML_TAG.data()] = rhs.subpassName; - node[PROPS_YAML_TAG.data()] = rhs.properties; - return node; - } - - static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) - { - // Retrieve Shader Asset IDs - if (node[VERT_SHADER_YAML_TAG.data()].IsDefined()) - rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); - if (node[FRAG_SHADER_YAML_TAG.data()].IsDefined()) - rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); - - // Retrieve Subpass - if (node[SUBPASS_YAML_TAG.data()].IsDefined()) - rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); - - // Retrieve - if (node[PROPS_YAML_TAG.data()].IsDefined()) - rhs.properties = node[PROPS_YAML_TAG.data()]; - - return true; - } - }; - - template<> - struct convert - { - static constexpr std::string_view MESH_YAML_TAG = "Mesh"; - static constexpr std::string_view MAT_YAML_TAG = "Material"; - - static YAML::Node encode(SHRenderable const& rhs) - { - YAML::Node node; - node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); - node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); - return node; - } - static bool decode(YAML::Node const& node, SHRenderable& rhs) - { - if (node[MESH_YAML_TAG.data()].IsDefined()) - { - rhs.SetMesh(SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as())); - } - if (node[MAT_YAML_TAG.data()].IsDefined()) - { - // Temporarily, use default material - auto gfxSystem = SHSystemManager::GetSystem(); - if (!gfxSystem) - return false; - Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); - if (!baseMat) - { - baseMat = gfxSystem->GetDefaultMaterial(); - SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); - } - rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); - } - return true; - } - }; -} namespace SHADE { + using AssetQueue = std::unordered_map; struct SHSerializationHelper { @@ -517,18 +208,73 @@ namespace SHADE } } + template , bool> = true> + static YAML::Node GetComponentNode(YAML::Node const& componentsNode, EntityID const& eid) + { + auto component = SHComponentManager::GetComponent_s(eid); + if (componentsNode.IsNull() && !component) + return {}; + auto rttrType = rttr::type::get(); + auto componentNode = componentsNode[rttrType.get_name().data()]; + if (!componentNode.IsDefined()) + return {}; + return componentNode; + } + template , bool> = true> static void ConvertNodeToComponent(YAML::Node const& componentsNode, EntityID const& eid) { auto component = SHComponentManager::GetComponent_s(eid); if (componentsNode.IsNull() && !component) return; - auto rttrType = rttr::type::get(); - auto componentNode = componentsNode[rttrType.get_name().data()]; - if (!componentNode.IsDefined()) - return; - YAML::convert::decode(componentNode, *component); + + YAML::convert::decode(GetComponentNode(componentsNode, eid), *component); } + template , bool> = true> + static void FetchAssetsFromComponent(YAML::Node const& componentsNode, EntityID const& eid, AssetQueue& assetQueue) + { + } + + template<> + static void FetchAssetsFromComponent(YAML::Node const& componentsNode, EntityID const& eid, AssetQueue& assetQueue) + { + auto node = GetComponentNode(componentsNode, eid); + if(!node.IsDefined()) + return; + if (auto const& meshNode = node[YAML::convert::MESH_YAML_TAG.data()]; meshNode.IsDefined()) + { + assetQueue.insert({meshNode.as(), AssetType::MESH}); + //SHResourceManager::LoadOrGet(node[YAML::convert::MESH_YAML_TAG.data()].as()); + } + if (auto const& matNode = node[YAML::convert::MAT_YAML_TAG.data()]; matNode.IsDefined()) + { + auto const matAsset = SHAssetManager::GetData(matNode.as()); + if(matAsset) + { + SHMaterialSpec spec; + YAML::convert::decode(*YAML::Load(matAsset->data).begin(), spec); + if(spec.properties.IsDefined()) + { + auto fragShader = SHResourceManager::LoadOrGet(spec.fragShader); + auto interface = fragShader->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); + /*int const varCount = static_cast(interface->GetVariableCount()); + + for (int i = 0; i < varCount; ++i) + { + auto variable = interface->GetVariable(i); + if(variable->type != SHShaderBlockInterface::Variable::Type::INT) + return; + const std::string& VAR_NAME = interface->GetVariableName(i); + if(VAR_NAME.empty()) + continue; + assetQueue.insert({matNode.as(), AssetType::TEXTURE}); + }*/ + } + } + assetQueue.insert({matNode.as(), AssetType::MATERIAL}); + //SHResourceManager::LoadOrGet(node[YAML::convert::MAT_YAML_TAG.data()].as()); + } + } }; } diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h new file mode 100644 index 00000000..af0b280b --- /dev/null +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -0,0 +1,317 @@ +#pragma once +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Math/Geometry/SHBoundingBox.h" +#include "Math/Geometry/SHBoundingSphere.h" +#include "Physics/SHCollider.h" +#include "Resource/SHResourceManager.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" +#include "SHSerializationTools.h" +#include "Physics/Components/SHColliderComponent.h" +namespace YAML +{ + using namespace SHADE; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + static constexpr const char* w = "w"; + + static Node encode(SHVec4 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + node[w] = rhs.w; + return node; + } + static bool decode(Node const& node, SHVec4& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + if (node[z].IsDefined()) + rhs.z = node[z].as(); + if (node[w].IsDefined()) + rhs.w = node[w].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + + static Node encode(SHVec3 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + return node; + } + static bool decode(Node const& node, SHVec3& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + if (node[z].IsDefined()) + rhs.z = node[z].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + + static Node encode(SHVec2 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + return node; + } + static bool decode(Node const& node, SHVec2& rhs) + { + if (node[x].IsDefined()) + rhs.x = node[x].as(); + if (node[y].IsDefined()) + rhs.y = node[y].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* IsTrigger = "Is Trigger"; + + static constexpr const char* Type = "Type"; + static constexpr const char* HalfExtents = "Half Extents"; + static constexpr const char* Radius = "Radius"; + + static constexpr const char* Friction = "Friction"; + static constexpr const char* Bounciness = "Bounciness"; + static constexpr const char* Density = "Density"; + static constexpr const char* PositionOffset = "Position Offset"; + + static Node encode(SHCollider& rhs) + { + Node node; + + node[IsTrigger] = rhs.IsTrigger(); + + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + SHCollider::Type colliderType = rhs.GetType(); + + node[Type] = enumAlign.value_to_name(colliderType).data(); + + switch (colliderType) + { + case SHCollider::Type::BOX: + { + auto const bb = reinterpret_cast(rhs.GetShape()); + node[HalfExtents] = bb->GetHalfExtents(); + } + break; + case SHCollider::Type::SPHERE: + { + auto const bs = reinterpret_cast(rhs.GetShape()); + node[Radius] = bs->GetRadius(); + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + + node[Friction] = rhs.GetFriction(); + node[Bounciness] = rhs.GetBounciness(); + node[Density] = rhs.GetDensity(); + node[PositionOffset] = rhs.GetPositionOffset(); + + return node; + } + static bool decode(Node const& node, SHCollider& rhs) + { + if (node[IsTrigger].IsDefined()) + rhs.SetIsTrigger(node[IsTrigger].as()); + if (!node[Type].IsDefined()) + return false; + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok; + const SHCollider::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); + if (!ok) + return false; + switch (colliderType) + { + case SHCollider::Type::BOX: + { + if (node[HalfExtents].IsDefined()) + rhs.SetBoundingBox(node[HalfExtents].as()); + } + break; + case SHCollider::Type::SPHERE: + { + if (node[Radius].IsDefined()) + rhs.SetBoundingSphere(node[Radius].as()); + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + if (node[Friction].IsDefined()) + rhs.SetFriction(node[Friction].as()); + if (node[Bounciness].IsDefined()) + rhs.SetBounciness(rhs.GetBounciness()); + if (node[Density].IsDefined()) + rhs.SetDensity(node[Density].as()); + if (node[PositionOffset].IsDefined()) + rhs.SetPositionOffset(node[PositionOffset].as()); + + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* Colliders = "Colliders"; + static Node encode(SHColliderComponent& rhs) + { + Node node, collidersNode; + auto const& colliders = rhs.GetColliders(); + int const numColliders = static_cast(colliders.size()); + for (int i = 0; i < numColliders; ++i) + { + auto& collider = rhs.GetCollider(i); + Node colliderNode = convert::encode(collider); + if (colliderNode.IsDefined()) + collidersNode[i] = colliderNode; + } + node[Colliders] = collidersNode; + return node; + } + static bool decode(Node const& node, SHColliderComponent& rhs) + { + if (node[Colliders].IsDefined()) + { + int numColliders{}; + for (auto const& colliderNode : node[Colliders]) + { + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok = false; + const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); + if (!ok) + return false; + + switch (colliderType) + { + case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; + case SHCollider::Type::SPHERE: rhs.AddBoundingSphere(); break; + case SHCollider::Type::CAPSULE: break; + default:; + } + YAML::convert::decode(colliderNode, rhs.GetCollider(numColliders++)); + } + } + return true; + } + }; + + template<> + struct convert + { + static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; + static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; + static constexpr std::string_view PROPS_YAML_TAG = "Properties"; + + static YAML::Node encode(SHMaterialSpec const& rhs) + { + YAML::Node node; + node[VERT_SHADER_YAML_TAG.data()] = rhs.vertexShader; + node[FRAG_SHADER_YAML_TAG.data()] = rhs.fragShader; + node[SUBPASS_YAML_TAG.data()] = rhs.subpassName; + node[PROPS_YAML_TAG.data()] = rhs.properties; + return node; + } + + static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) + { + // Retrieve Shader Asset IDs + if (node[VERT_SHADER_YAML_TAG.data()].IsDefined()) + rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); + if (node[FRAG_SHADER_YAML_TAG.data()].IsDefined()) + rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); + + // Retrieve Subpass + if (node[SUBPASS_YAML_TAG.data()].IsDefined()) + rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); + + // Retrieve + if (node[PROPS_YAML_TAG.data()].IsDefined()) + rhs.properties = node[PROPS_YAML_TAG.data()]; + + return true; + } + }; + + template<> + struct convert + { + static constexpr std::string_view MESH_YAML_TAG = "Mesh"; + static constexpr std::string_view MAT_YAML_TAG = "Material"; + + static YAML::Node encode(SHRenderable const& rhs) + { + YAML::Node node; + node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); + node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); + return node; + } + static bool decode(YAML::Node const& node, SHRenderable& rhs) + { + if (node[MESH_YAML_TAG.data()].IsDefined()) + { + rhs.SetMesh(SHResourceManager::LoadOrGet(node[MESH_YAML_TAG.data()].as())); + } + if (node[MAT_YAML_TAG.data()].IsDefined()) + { + // Temporarily, use default material + auto gfxSystem = SHSystemManager::GetSystem(); + if (!gfxSystem) + return false; + Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); + if (!baseMat) + { + baseMat = gfxSystem->GetDefaultMaterial(); + SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); + } + rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); + } + return true; + } + }; +} From d8ee9912130d29fe714308192ddd825afcb2d638 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 4 Nov 2022 18:39:45 +0800 Subject: [PATCH 675/793] Steps in the rendering process are now highlighted and named for debugging tools --- SHADE_Engine/src/Editor/SHEditor.cpp | 7 +++- .../Graphics/Commands/SHVkCommandBuffer.cpp | 38 +++++++++++++++++++ .../src/Graphics/Commands/SHVkCommandBuffer.h | 13 ++++++- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 2 + .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 3 ++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 6 +-- .../Graphics/RenderGraph/SHRenderGraph.cpp | 8 +++- .../src/Graphics/RenderGraph/SHRenderGraph.h | 5 ++- .../src/Graphics/RenderGraph/SHSubpass.cpp | 3 +- 9 files changed, 75 insertions(+), 10 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6974d213..86987479 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -441,9 +441,12 @@ namespace SHADE ImGui_ImplVulkan_DestroyFontUploadObjects(); - renderGraph->GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) { + renderGraph->GetNode("ImGui Node")->GetSubpass("ImGui Draw")->AddExteriorDrawCalls([](Handle& cmd) + { + cmd->BeginLabeledSegment("ImGui Draw"); ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmd->GetVkCommandBuffer()); - }); + cmd->EndLabeledSegment(); + }); #endif } diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp index fb64bcc2..cc35303b 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.cpp @@ -105,6 +105,9 @@ namespace SHADE // Set the state to recording if the call above succeeded. cmdBufferState = SH_CMD_BUFFER_STATE::RECORDING; + + // Reset segment count + segmentDepth = 0; } /***************************************************************************/ @@ -507,6 +510,41 @@ namespace SHADE SetState(SH_CMD_BUFFER_STATE::PENDING); } + void SHVkCommandBuffer::BeginLabeledSegment(const std::string& label) noexcept + { +#ifdef _DEBUG + static const std::array SEGMENT_COLOURS = + { + SHColour::LIGHTPINK, + SHColour::LIGHTBLUE, + SHColour::LIGHTGREEN, + SHColour::YELLOW, + SHColour::PINK, + SHColour::TEAL, + SHColour::LIME, + SHColour::ORANGE, + SHColour::VIOLET, + SHColour::MAROON, + SHColour::DARKGREEN, + SHColour::SANDYBROWN + }; + + const SHColour COLOR = SEGMENT_COLOURS[segmentDepth]; + ++segmentDepth; + if (segmentDepth >= static_cast(SEGMENT_COLOURS.size())) + segmentDepth = 0; + vkCommandBuffer.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT().setPLabelName(label.data()).setColor({ COLOR.x, COLOR.y, COLOR.z, COLOR.w })); +#endif + } + + void SHVkCommandBuffer::EndLabeledSegment() noexcept + { +#ifdef _DEBUG + vkCommandBuffer.endDebugUtilsLabelEXT(); + segmentDepth = std::max(segmentDepth - 1, 0); +#endif + } + //void SHVkCommandBuffer::PipelineBarrier(vk::PipelineStageFlags ) const noexcept //{ // //vkCommandBuffer.pipelineBarrier() diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index bc0d4b04..022d4b62 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -7,6 +7,7 @@ #include "Resource/SHResourceLibrary.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" #include "Graphics/Pipeline/SHPipelineType.h" +#include "Math/SHColour.h" namespace SHADE { @@ -78,7 +79,11 @@ namespace SHADE std::array(SH_PIPELINE_TYPE::NUM_TYPES)> bindPointData; //! The push constant data for the command buffer - uint8_t pushConstantData[PUSH_CONSTANT_SIZE]; + uint8_t pushConstantData[PUSH_CONSTANT_SIZE]; + +#ifdef _DEBUG + int segmentDepth; +#endif /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ @@ -107,7 +112,7 @@ namespace SHADE void Reset(void); // Begins and Ends - void BeginRecording (void) noexcept; + void BeginRecording () noexcept; void EndRecording (void) noexcept; void BeginRenderpass (Handle const& renderpassHdl, Handle const& framebufferHdl, vk::Offset2D offset = {0, 0}, vk::Extent2D extent = {0, 0}) noexcept; void EndRenderpass (void) noexcept; @@ -148,6 +153,10 @@ namespace SHADE bool IsReadyToSubmit (void) const noexcept; void HandlePostSubmit (void) noexcept; + // Debugging + void BeginLabeledSegment(const std::string& label) noexcept; + void EndLabeledSegment() noexcept; + // Push Constant variable setting template void SetPushConstantVariable(std::string variableName, T const& data, SH_PIPELINE_TYPE bindPoint) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 22d1875b..c2471f79 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -427,6 +427,7 @@ namespace SHADE // Bind all required objects before drawing static std::array dynamicOffset{ 0 }; + cmdBuffer->BeginLabeledSegment("SHBatch"); cmdBuffer->BindPipeline(pipeline); cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::INTEGER_DATA, instancedIntegerBuffer[frameIndex], 0); @@ -441,6 +442,7 @@ namespace SHADE ); } cmdBuffer->DrawMultiIndirect(drawDataBuffer[frameIndex], static_cast(drawData.size())); + cmdBuffer->EndLabeledSegment(); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 37d15808..c4dc2c8f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -98,6 +98,7 @@ namespace SHADE // Don't draw if no points if (numPoints[FRAME_IDX] > 0) { + cmdBuffer->BeginLabeledSegment("SHDebugDraw"); cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); cmdBuffer->SetLineWidth(LineWidth); cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); @@ -113,10 +114,12 @@ namespace SHADE // Don't draw if no points if (numPersistentPoints[FRAME_IDX] > 0) { + cmdBuffer->BeginLabeledSegment("SHDebugDraw (Persistent)"); cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawDepthPipeline()); cmdBuffer->SetLineWidth(LineWidth); cmdBuffer->BindVertexBuffer(0, persistentVertexBuffers[FRAME_IDX], 0); cmdBuffer->DrawArrays(numPersistentPoints[FRAME_IDX], 1, 0, 0); + cmdBuffer->EndLabeledSegment(); } }); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index be67f1b3..1884fa57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -1,5 +1,5 @@ /************************************************************************************//*! -\file SHGraphicsSystem.cpp +\file SHGrphicsSystem.cpp \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 21, 2022 @@ -164,7 +164,7 @@ namespace SHADE /* SCENE RENDER GRAPH RESOURCES */ /*-----------------------------------------------------------------------*/ // Initialize world render graph - worldRenderGraph->Init(device, swapchain); + worldRenderGraph->Init("World Render Graph", device, swapchain); worldRenderGraph->AddResource("Position", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); worldRenderGraph->AddResource("Normals", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); //worldRenderGraph->AddResource("Tangents", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); @@ -331,7 +331,7 @@ namespace SHADE for (uint32_t i = 0; i < renderContextCmdPools.size(); ++i) renderContextCmdPools[i] = renderContext.GetFrameData(i).cmdPoolHdls[0]; - editorRenderGraph->Init(device, swapchain); + editorRenderGraph->Init("Editor Render Graph", device, swapchain); editorRenderGraph->AddResource("Present", { SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT }, windowDims.first, windowDims.second); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 93be2413..66dc6a0f 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -353,7 +353,7 @@ namespace SHADE */ /***************************************************************************/ - void SHRenderGraph::Init(Handle logicalDevice, Handle swapchain) noexcept + void SHRenderGraph::Init(std::string graphName, Handle logicalDevice, Handle swapchain) noexcept { resourceManager = std::make_shared(); @@ -365,6 +365,8 @@ namespace SHADE renderGraphStorage->resourceManager = resourceManager; renderGraphStorage->descriptorPool = logicalDevice->CreateDescriptorPools(); + + name = std::move(graphName); } /***************************************************************************/ @@ -390,6 +392,7 @@ namespace SHADE , nodeIndexing{ std::move(rhs.nodeIndexing) } , nodes{ std::move(rhs.nodes) } , resourceManager{ std::move(rhs.resourceManager) } + , name { std::move(rhs.name) } { } @@ -403,6 +406,7 @@ namespace SHADE nodeIndexing = std::move(rhs.nodeIndexing); nodes = std::move(rhs.nodes); resourceManager = std::move(rhs.resourceManager); + name = std::move(rhs.name); return *this; } @@ -516,8 +520,10 @@ namespace SHADE // better way to manage these void SHRenderGraph::Execute(uint32_t frameIndex, Handle cmdBuffer, Handle descPool) noexcept { + cmdBuffer->BeginLabeledSegment(name); for (auto& node : nodes) node->Execute(cmdBuffer, descPool, frameIndex); + cmdBuffer->EndLabeledSegment(); } void SHRenderGraph::FinaliseBatch(uint32_t frameIndex, Handle descPool) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h index d90b66df..741cc522 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.h @@ -69,6 +69,9 @@ namespace SHADE //! Resource library for graph handles std::shared_ptr resourceManager; + //! Name of the RenderGraph + std::string name; + public: /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ @@ -81,7 +84,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle logicalDevice, Handle swapchain) noexcept; + void Init (std::string graphName, Handle logicalDevice, Handle swapchain) noexcept; void AddResource(std::string resourceName, std::initializer_list typeFlags, uint32_t w = static_cast(-1), uint32_t h = static_cast(-1), vk::Format format = vk::Format::eB8G8R8A8Unorm, uint8_t levels = 1, vk::ImageUsageFlagBits usageFlags = {}, vk::ImageCreateFlagBits createFlags = {}); Handle AddNode (std::string nodeName, std::initializer_list resourceInstruction, std::initializer_list predecessorNodes) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 6e78eb9f..23dbbde3 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -201,6 +201,7 @@ namespace SHADE void SHSubpass::Execute(Handle& commandBuffer, Handle descPool, uint32_t frameIndex) noexcept { + commandBuffer->BeginLabeledSegment(name); // Ensure correct transforms are provided superBatch->UpdateBuffers(frameIndex, descPool); @@ -212,7 +213,7 @@ namespace SHADE { drawCall(commandBuffer); } - + commandBuffer->EndLabeledSegment(); } void SHSubpass::HandleResize(void) noexcept From b30da7e495791557c676d5006d05dd121d5c8c23 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 4 Nov 2022 19:16:32 +0800 Subject: [PATCH 676/793] Fixes --- Assets/Materials/TestMat.shmat | 2 +- Assets/Scenes/M2Scene.shade | 14 +++++++------- .../src/Serialization/SHSerializationHelper.hpp | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Assets/Materials/TestMat.shmat b/Assets/Materials/TestMat.shmat index acfa2dc3..c1bb43c5 100644 --- a/Assets/Materials/TestMat.shmat +++ b/Assets/Materials/TestMat.shmat @@ -2,7 +2,7 @@ FragmentShader: 46377769 SubPass: G-Buffer Write Properties: - data.color: {x: 0, y: 0, z: 0, w: 1} + data.color: {x: 1, y: 1, z: 1, w: 1} data.textureIndex: 64651793 data.alpha: 0 data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 35608ab6..38c0a523 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -31,8 +31,8 @@ Rotate: {x: -0, y: 0, z: -0} Scale: {x: 49.4798889, y: 0.5, z: 17.5} Renderable Component: - Mesh: 80365422 - Material: 0 + Mesh: 149697411 + Material: 126974645 RigidBody Component: Type: Static Mass: 1 @@ -66,7 +66,7 @@ Rotate: {x: -0, y: 0, z: -0} Scale: {x: 2, y: 2, z: 2} Renderable Component: - Mesh: 80365422 + Mesh: 149697411 Material: 126974645 RigidBody Component: Type: Dynamic @@ -121,8 +121,8 @@ Rotate: {x: 0, y: 0, z: 0} Scale: {x: 2, y: 2, z: 2} Renderable Component: - Mesh: 80365422 - Material: 124370424 + Mesh: 149697411 + Material: 126974645 RigidBody Component: Type: Dynamic Mass: 1 @@ -163,7 +163,7 @@ Rotate: {x: 0, y: 0, z: 0} Scale: {x: 2, y: 2, z: 2} Renderable Component: - Mesh: 80365422 + Mesh: 149697411 Material: 126974645 RigidBody Component: Type: Dynamic @@ -198,7 +198,7 @@ Rotate: {x: 0, y: 0, z: 0} Scale: {x: 5, y: 5, z: 5} Renderable Component: - Mesh: 80365422 + Mesh: 149697411 Material: 126974645 Scripts: ~ - EID: 8 diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 77f10269..b062b348 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -258,21 +258,21 @@ namespace SHADE { auto fragShader = SHResourceManager::LoadOrGet(spec.fragShader); auto interface = fragShader->GetReflectedData().GetDescriptorBindingInfo().GetShaderBlockInterface(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA); - /*int const varCount = static_cast(interface->GetVariableCount()); + int const varCount = static_cast(interface->GetVariableCount()); for (int i = 0; i < varCount; ++i) { auto variable = interface->GetVariable(i); if(variable->type != SHShaderBlockInterface::Variable::Type::INT) - return; + continue; const std::string& VAR_NAME = interface->GetVariableName(i); if(VAR_NAME.empty()) continue; - assetQueue.insert({matNode.as(), AssetType::TEXTURE}); - }*/ + assetQueue.insert({spec.properties[VAR_NAME.data()].as(), AssetType::TEXTURE}); + } } } - assetQueue.insert({matNode.as(), AssetType::MATERIAL}); + //assetQueue.insert({matNode.as(), AssetType::MATERIAL}); //SHResourceManager::LoadOrGet(node[YAML::convert::MAT_YAML_TAG.data()].as()); } } From b5bc64456c52930f75ca7eff8b177faea7e7f6d4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 4 Nov 2022 19:16:57 +0800 Subject: [PATCH 677/793] Added debug names for some SHVkBuffers --- .../src/Graphics/Buffers/SHVkBuffer.cpp | 13 +++++- .../src/Graphics/Buffers/SHVkBuffer.h | 14 ++++-- .../Graphics/Devices/SHVkLogicalDevice.cpp | 5 +- .../src/Graphics/Devices/SHVkLogicalDevice.h | 27 ++++++++--- .../Graphics/Devices/SHVkLogicalDevice.hpp | 46 +++++++++++++++++++ .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 9 ++-- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 6 ++- SHADE_Engine/src/Graphics/SHVkUtil.cpp | 10 ++-- SHADE_Engine/src/Graphics/SHVkUtil.h | 4 +- 9 files changed, 110 insertions(+), 24 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 08481483..63f580b9 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -269,7 +269,7 @@ namespace SHADE */ /***************************************************************************/ - SHVkBuffer::SHVkBuffer(std::reference_wrapper allocator) noexcept + SHVkBuffer::SHVkBuffer(Handle logicalDevice, std::reference_wrapper allocator) noexcept : vkBuffer{} , stagingBuffer{} , sizeStored{ 0 } @@ -277,19 +277,23 @@ namespace SHADE , alloc {nullptr} , randomAccessOptimized{false} , vmaAllocator{allocator} + , device { logicalDevice } {} SHVkBuffer::SHVkBuffer( + Handle logicalDevice, uint32_t inSize, void* data, uint32_t srcSize, std::reference_wrapper allocator, vk::BufferUsageFlags bufferUsage, + const std::string& name, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags ) noexcept - : SHVkBuffer(allocator) + : SHVkBuffer(logicalDevice, allocator) { + this->name = name; Init(inSize, data, srcSize, bufferUsage, memUsage, allocFlags); } @@ -304,6 +308,8 @@ namespace SHADE , bufferUsageFlags {rhs.bufferUsageFlags} , bufferCreateInfo { rhs.bufferCreateInfo } , allocCreateInfo { rhs.allocCreateInfo } + , name { std::move(rhs.name) } + , device { rhs.device } { rhs.vkBuffer = VK_NULL_HANDLE; @@ -325,6 +331,8 @@ namespace SHADE bufferCreateInfo = rhs.bufferCreateInfo; allocCreateInfo = rhs.allocCreateInfo; bufferUsageFlags = rhs.bufferUsageFlags; + name = std::move(rhs.name); + device = rhs.device; return *this; } @@ -402,6 +410,7 @@ namespace SHADE auto [tempBuffer, allocInfo] = createBuffer(sizeStored); vkBuffer = tempBuffer; + SET_VK_OBJ_NAME(*device, vk::ObjectType::eBuffer, vkBuffer, name); // This probably means that a HOST_CACHED memory type is used on allocation if (allocFlags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index eb24d161..1119342c 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -12,6 +12,7 @@ namespace SHADE //using SHVkBufferUsageBits = vk::BufferUsageFlagBits; class SHVkCommandBuffer; + class SHVkLogicalDevice; class SHVkBuffer { @@ -51,6 +52,11 @@ namespace SHADE //VmaAllocator const& vmaAllocator; std::reference_wrapper vmaAllocator; + //! Name of this buffer if any + std::string name; + //! Handle to the logical device that created this buffer + Handle device; + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ @@ -62,13 +68,15 @@ namespace SHADE /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ SHVkBuffer (void) noexcept = delete; - SHVkBuffer (std::reference_wrapper allocator) noexcept; + SHVkBuffer (Handle logicalDevice, std::reference_wrapper allocator) noexcept; SHVkBuffer ( + Handle logicalDevice, uint32_t inSize, void* data, uint32_t srcSize, std::reference_wrapper allocator, - vk::BufferUsageFlags bufferUsage, + vk::BufferUsageFlags bufferUsage, + const std::string& name = "", VmaMemoryUsage memUsage = VMA_MEMORY_USAGE_AUTO, VmaAllocationCreateFlags allocFlags = {} ) noexcept; @@ -84,7 +92,7 @@ namespace SHADE uint32_t inSize, void* data, uint32_t srcSize, - vk::BufferUsageFlags bufferUsage, + vk::BufferUsageFlags bufferUsage, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags ) noexcept; diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 6bf2e731..35c104ee 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -220,6 +220,7 @@ namespace SHADE else { SHVulkanDebugUtil::ReportVkSuccess("Successfully created a Logical Device. "); + SET_VK_OBJ_NAME((*this), vk::ObjectType::eDevice, vkLogicalDevice, "Logical Device"); } InitializeVMA(); @@ -419,9 +420,9 @@ namespace SHADE */ /***************************************************************************/ - Handle SHVkLogicalDevice::CreateBuffer(uint32_t inSize, void* data, uint32_t srcSize, vk::BufferUsageFlags bufferUsage, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags) const noexcept + Handle SHVkLogicalDevice::CreateBuffer(uint32_t inSize, void* data, uint32_t srcSize, vk::BufferUsageFlags bufferUsage, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags, const std::string& name) const noexcept { - return SHVkInstance::GetResourceManager().Create(inSize, data, srcSize, std::cref(vmaAllocator), bufferUsage, memUsage, allocFlags); + return SHVkInstance::GetResourceManager().Create(GetHandle(), inSize, data, srcSize, std::cref(vmaAllocator), bufferUsage, name, memUsage, allocFlags); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 2aa59941..827f12b3 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -1,5 +1,4 @@ -#ifndef SH_LOGICAL_DEVICE_H -#define SH_LOGICAL_DEVICE_H +#pragma once #include #include @@ -67,7 +66,6 @@ namespace SHADE class SHVkLogicalDevice : public ISelfHandle { private: - /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ @@ -147,7 +145,8 @@ namespace SHADE uint32_t srcSize, vk::BufferUsageFlags bufferUsage, VmaMemoryUsage memUsage, - VmaAllocationCreateFlags allocFlags + VmaAllocationCreateFlags allocFlags, + const std::string& name = "" ) const noexcept; Handle CreateImage ( @@ -202,7 +201,23 @@ namespace SHADE Handle CreateSemaphore (void) const noexcept; void UpdateDescriptorSets(std::vector const& writeDescSets) noexcept; - void UpdateDescriptorSet (vk::WriteDescriptorSet const& writeDescSet) noexcept; + void UpdateDescriptorSet(vk::WriteDescriptorSet const& writeDescSet) noexcept; + + /*-----------------------------------------------------------------------*/ + /* Debug Tools */ + /*-----------------------------------------------------------------------*/ +#ifdef _DEBUG + ///

    + /// Sets a Vulkan object's name for debugging purposes. This function will not be + /// compiled outsied of Debug configurations. Hence, it is advised to use provided + /// macro function SET_VK_OBJ_NAME() instead of using this function directly. + /// + /// Type of the object. + /// Handle to the Vulkan Object to name. + /// Object's name. + template + inline void SetVulkanObjectName(vk::ObjectType objType, T objHandle, const std::string& objName); +#endif /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ @@ -220,4 +235,4 @@ namespace SHADE }; } -#endif +#include "SHVkLogicalDevice.hpp" diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp new file mode 100644 index 00000000..dd7ff609 --- /dev/null +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp @@ -0,0 +1,46 @@ +/************************************************************************************//*! +\file SHVkLogicalDevice.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 4, 2022 +\brief Contains implementation of inline and template functions of + SHVkLogicalDevice. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +#include "SHVkLogicalDevice.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Debug Tools */ + /*-----------------------------------------------------------------------------------*/ +#ifdef _DEBUG + template + void SHVkLogicalDevice::SetVulkanObjectName(vk::ObjectType objType, T objHandle, const std::string& objName) + { + if (objName.empty()) + return; + + vk::DebugUtilsObjectNameInfoEXT info; + info.objectType = objType; + info.objectHandle = (uint64_t) static_cast(objHandle); + info.pObjectName = objName.data(); + vkLogicalDevice.setDebugUtilsObjectNameEXT(info); + } +#endif +} + +/*-------------------------------------------------------------------------------------*/ +/* Macro Definitions */ +/*-------------------------------------------------------------------------------------*/ +#ifdef _DEBUG +#define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) \ + (DEVICE).SetVulkanObjectName(OBJ_TYPE, OBJ_HDL, OBJ_NAME); +#else +#define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) +#endif diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index c2471f79..3f9b6fa2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -392,20 +392,23 @@ namespace SHADE SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, drawDataBuffer[frameIndex], drawData.data(), DRAW_DATA_BYTES, - BuffUsage::eIndirectBuffer + BuffUsage::eIndirectBuffer, + "Batch Draw Data Buffer" ); // - Transform Buffer const uint32_t TF_DATA_BYTES = static_cast(transformData.size() * sizeof(SHMatrix)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Batch Transform Buffer" ); const uint32_t EID_DATA_BYTES = static_cast(instancedIntegerData.size() * sizeof(SHInstancedIntegerData)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, instancedIntegerBuffer[frameIndex], instancedIntegerData.data(), EID_DATA_BYTES, - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Batch Instance Data Buffer" ); // - Material Properties Buffer rebuildMaterialBuffers(frameIndex, descPool); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index c4dc2c8f..48e46a40 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -141,7 +141,8 @@ namespace SHADE 0, vk::BufferUsageFlagBits::eVertexBuffer, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, - VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT, + "Debug Draw Non-Persistent Vertex Buffer" ); } // - Persistent Draws @@ -154,7 +155,8 @@ namespace SHADE 0, vk::BufferUsageFlagBits::eVertexBuffer, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, - VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT, + "Debug Draw Persistent Vertex Buffer" ); } } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index 8b21e7d1..a9ac543f 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -82,7 +82,7 @@ namespace SHADE } } - void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) + void SHVkUtil::EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage, const std::string& name) { if (bufferHandle) { @@ -100,7 +100,8 @@ namespace SHADE size, usage | BuffUsage::eTransferDst, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, - VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT, + name ); } @@ -108,7 +109,7 @@ namespace SHADE bufferHandle->TransferToDeviceResource(cmdBuffer); } - void SHVkUtil::EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage) + void SHVkUtil::EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage, const std::string& name) { if (bufferHandle) { @@ -126,7 +127,8 @@ namespace SHADE size, usage, VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, - VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT, + name ); } } diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.h b/SHADE_Engine/src/Graphics/SHVkUtil.h index de700ea5..07e8f02e 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.h +++ b/SHADE_Engine/src/Graphics/SHVkUtil.h @@ -54,7 +54,7 @@ namespace SHADE */ /***********************************************************************************/ - static void EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); + static void EnsureBufferAndCopyData(Handle device, Handle cmdBuffer, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage, const std::string& name = ""); /***********************************************************************************/ /*! @@ -80,7 +80,7 @@ namespace SHADE */ /***********************************************************************************/ - static void EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage); + static void EnsureBufferAndCopyHostVisibleData(Handle device, Handle& bufferHandle, void* src, uint32_t size, vk::BufferUsageFlagBits usage, const std::string& name = ""); static BindingAndSetHash GenBindingSetHash (uint32_t set, uint32_t binding) noexcept; }; From ab17d577560706321699e6cd7424e3c58455c6e2 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 4 Nov 2022 23:32:29 +0800 Subject: [PATCH 678/793] Asset browser now recurses down subassets --- Assets/Materials/BagMaterial.shmat | 8 +++ Assets/Materials/BagMaterial.shmat.shmeta | 3 + Assets/Scenes/M2Scene.shade | 27 +++++-- Assets/Scenes/Scene2.shade | 72 +++++++++++++++++++ Assets/Scenes/Scene2.shade.shmeta | 3 + .../AssetBrowser/SHAssetBrowser.cpp | 57 ++++++++++----- .../AssetBrowser/SHAssetBrowser.h | 2 +- 7 files changed, 147 insertions(+), 25 deletions(-) create mode 100644 Assets/Materials/BagMaterial.shmat create mode 100644 Assets/Materials/BagMaterial.shmat.shmeta create mode 100644 Assets/Scenes/Scene2.shade create mode 100644 Assets/Scenes/Scene2.shade.shmeta diff --git a/Assets/Materials/BagMaterial.shmat b/Assets/Materials/BagMaterial.shmat new file mode 100644 index 00000000..e538b834 --- /dev/null +++ b/Assets/Materials/BagMaterial.shmat @@ -0,0 +1,8 @@ +- VertexShader: 39210065 + FragmentShader: 46377769 + SubPass: G-Buffer Write + Properties: + data.color: {x: 1, y: 1, z: 1, w: 1} + data.textureIndex: 58303057 + data.alpha: 0 + data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Materials/BagMaterial.shmat.shmeta b/Assets/Materials/BagMaterial.shmat.shmeta new file mode 100644 index 00000000..b903a854 --- /dev/null +++ b/Assets/Materials/BagMaterial.shmat.shmeta @@ -0,0 +1,3 @@ +Name: BagMaterial +ID: 123745521 +Type: 7 diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 38c0a523..60dbb5f9 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -50,7 +50,7 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.0170898438, y: 0.00048828125, z: 0.0170898438} + Half Extents: {x: 0.00427246094, y: 0.000122070312, z: 0.00427246094} Friction: 0.400000006 Bounciness: 0 Density: 1 @@ -59,7 +59,7 @@ - EID: 2 Name: Player IsActive: true - NumberOfChildren: 2 + NumberOfChildren: 3 Components: Transform Component: Translate: {x: -3.06177855, y: -2, z: -5} @@ -85,7 +85,7 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} Friction: 0.400000006 Bounciness: 0 Density: 1 @@ -111,6 +111,19 @@ Rotate: {x: 0, y: 0, z: 0} Scale: {x: 1, y: 1, z: 1} Scripts: ~ +- EID: 9 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: 0, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 1, y: 1, z: 1} + Renderable Component: + Mesh: 144838771 + Material: 123745521 + Scripts: ~ - EID: 5 Name: item IsActive: true @@ -121,7 +134,7 @@ Rotate: {x: 0, y: 0, z: 0} Scale: {x: 2, y: 2, z: 2} Renderable Component: - Mesh: 149697411 + Mesh: 144838771 Material: 126974645 RigidBody Component: Type: Dynamic @@ -140,14 +153,14 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} Friction: 0.400000006 Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Is Trigger: true Type: Box - Half Extents: {x: 0.001953125, y: 0.001953125, z: 0.001953125} + Half Extents: {x: 0.00048828125, y: 0.00048828125, z: 0.00048828125} Friction: 0.400000006 Bounciness: 0 Density: 1 @@ -182,7 +195,7 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.0009765625, y: 0.0009765625, z: 0.0009765625} + Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} Friction: 0.400000006 Bounciness: 0 Density: 1 diff --git a/Assets/Scenes/Scene2.shade b/Assets/Scenes/Scene2.shade new file mode 100644 index 00000000..2f38a933 --- /dev/null +++ b/Assets/Scenes/Scene2.shade @@ -0,0 +1,72 @@ +- EID: 0 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: 0.304069757, z: 1.73034382} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 1, y: 1, z: 1} + Camera Component: + Position: {x: 0, y: 0.304069757, z: 1.73034382} + Pitch: 0 + Yaw: 0 + Roll: 0 + Width: 1200 + Height: 1080 + Near: 0.00999999978 + Far: 10000 + Perspective: true + Scripts: ~ +- EID: 1 + Name: Raccoon + IsActive: true + NumberOfChildren: 1 + Components: + Transform Component: + Translate: {x: 0, y: 0, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 1, y: 1, z: 1} + Renderable Component: + Mesh: 149697411 + Material: 126974645 + Scripts: ~ +- EID: 3 + Name: Bag + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0.006237939, y: -0.000393368304, z: 0} + Rotate: {x: -0, y: 2.79945588, z: 0} + Scale: {x: 1.0000881, y: 1, z: 1.0000881} + Renderable Component: + Mesh: 144838771 + Material: 123745521 + Scripts: ~ +- EID: 2 + Name: DirectionalLight + IsActive: true + NumberOfChildren: 0 + Components: + Light Component: + Position: {x: 0, y: 0, z: 0} + Type: Directional + Direction: {x: 0, y: 0, z: 1} + Color: {x: 1, y: 1, z: 1, w: 1} + Layer: 4294967295 + Strength: 0 + Scripts: ~ +- EID: 4 + Name: AmbientLight + IsActive: true + NumberOfChildren: 0 + Components: + Light Component: + Position: {x: 0, y: 0, z: 0} + Type: Ambient + Direction: {x: 0, y: 0, z: 1} + Color: {x: 1, y: 1, z: 1, w: 1} + Layer: 4294967295 + Strength: 0.600000024 + Scripts: ~ \ No newline at end of file diff --git a/Assets/Scenes/Scene2.shade.shmeta b/Assets/Scenes/Scene2.shade.shmeta new file mode 100644 index 00000000..bbcbc66c --- /dev/null +++ b/Assets/Scenes/Scene2.shade.shmeta @@ -0,0 +1,3 @@ +Name: Scene2 +ID: 87285316 +Type: 5 diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index d875d743..37b8ecd4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -102,8 +102,10 @@ namespace SHADE } for (auto const& file : files) { + if(file.assetMeta == nullptr) + continue; const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(file); + const ImRect childRect = DrawFile(file.assetMeta); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; @@ -146,47 +148,48 @@ namespace SHADE //} } - ImRect SHAssetBrowser::DrawFile(SHFile const& file) noexcept + ImRect SHAssetBrowser::DrawFile(SHAsset const* const asset) noexcept { - if (file.assetMeta == nullptr) + if (asset == nullptr) return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - const bool isSelected = std::ranges::find(selectedAssets, file.assetMeta->id) != selectedAssets.end(); - ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; + const bool isSelected = std::ranges::find(selectedAssets, asset->id) != selectedAssets.end(); + ImGuiTreeNodeFlags flags = (!asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf; if (isSelected) flags |= ImGuiTreeNodeFlags_Selected; std::string icon{}; - switch (file.assetMeta->type) + switch (asset->type) { case AssetType::INVALID: break; case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; case AssetType::SHADER_BUILT_IN: icon = ICON_FA_FILE_CODE; break; case AssetType::TEXTURE: icon = ICON_FA_IMAGES; break; - case AssetType::MESH: icon = ICON_FA_CUBES; break; + case AssetType::MODEL: icon = ICON_FA_CUBES_STACKED; break; case AssetType::SCENE: icon = ICON_MD_IMAGE; break; case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; case AssetType::MATERIAL: break; + case AssetType::MESH: icon = ICON_FA_CUBES; break; case AssetType::MAX_COUNT: break; default:; } - - ImGui::TreeNodeEx(file.assetMeta, flags, "%s %s", icon.data(), file.assetMeta->name.data()); + + bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s", icon.data(), asset->name.data()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); if (SHDragDrop::BeginSource()) { - auto id = file.assetMeta->id; - ImGui::Text("Moving Asset: %s [%zu]", file.name.data(), file.assetMeta->id); + auto id = asset->id; + ImGui::Text("Moving Asset: %s [%zu]", asset->name.data(), asset->id); SHDragDrop::SetPayload(SHDragDrop::DRAG_RESOURCE, &id); SHDragDrop::EndSource(); } if (ImGui::IsItemClicked()) { selectedAssets.clear(); - selectedAssets.push_back(file.assetMeta->id); + selectedAssets.push_back(asset->id); } if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { - switch (file.assetMeta->type) + switch (asset->type) { case AssetType::INVALID: break; case AssetType::SHADER: break; @@ -196,14 +199,14 @@ namespace SHADE case AssetType::SCENE: if(auto editor = SHSystemManager::GetSystem()) { - editor->LoadScene(file.assetMeta->id); + editor->LoadScene(asset->id); } break; case AssetType::PREFAB: break; case AssetType::MATERIAL: if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) { - matInspector->OpenMaterial(file.assetMeta->id); + matInspector->OpenMaterial(asset->id); } break; case AssetType::MAX_COUNT: break; @@ -211,7 +214,27 @@ namespace SHADE } } - ImGui::TreePop(); + + //TODO: Combine Draw asset and Draw Folder recursive drawing + const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark); + const float horizontalOffset = 0.0f; + ImDrawList* drawList = ImGui::GetWindowDrawList(); + ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); + vertLineStart.x += horizontalOffset; + ImVec2 vertLineEnd = vertLineStart; + if(isOpen) + { + for(auto const& subAsset : asset->subAssets) + { + const float horizontalLineSize = 25.0f; + const ImRect childRect = DrawFile(subAsset); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); + vertLineEnd.y = midPoint; + } + drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); + ImGui::TreePop(); + } return nodeRect; } @@ -222,7 +245,7 @@ namespace SHADE auto& path = std::get<0>(assetBeingCreated.value()); auto& type = std::get<1>(assetBeingCreated.value()); auto& assetName = std::get<2>(assetBeingCreated.value()); - if (ImGui::InputText("##newAssetname", &assetName, ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui::InputText("##newAssetName", &assetName, ImGuiInputTextFlags_EnterReturnsTrue)) { AssetID assetId = SHAssetManager::CreateNewAsset(type, assetName); if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index eec40262..00023ebe 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -21,7 +21,7 @@ namespace SHADE void DrawMenuBar(); ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); - ImRect DrawFile(SHFile const& file) noexcept; + ImRect DrawFile(SHAsset const* const asset) noexcept; void DrawAssetBeingCreated() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; From 40422a6d23c44c35221473ebdd017d6623daa10d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 5 Nov 2022 00:00:45 +0800 Subject: [PATCH 679/793] Added built-in primitives --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 66 ++++++++---- .../MiddleEnd/Interface/SHGraphicsSystem.h | 102 +++++++++++++----- 2 files changed, 119 insertions(+), 49 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 43de46bb..573c7f7f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -41,6 +41,7 @@ of DigiPen Institute of Technology is prohibited. #include "Resource/SHResourceManager.h" #include "Graphics/SHVkUtil.h" #include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" +#include "../Meshes/SHPrimitiveGenerator.h" namespace SHADE { @@ -259,7 +260,6 @@ namespace SHADE // Generate world render graph worldRenderGraph->Generate(); - /*-----------------------------------------------------------------------*/ /* BIND RENDER GRAPH TO RENDERER */ /*-----------------------------------------------------------------------*/ @@ -269,17 +269,6 @@ namespace SHADE worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); - // Create default materials - std::array defaultTexture = { 255, 255, 255, 255 }; - std::vector mipOffsets{}; - mipOffsets.push_back(0); - auto tex = AddTexture(4, defaultTexture.data(), 1, 1, SHTexture::TextureFormat::eR8G8B8A8Unorm, mipOffsets); - BuildTextures(); - - defaultMaterial = AddMaterial(defaultVertShader, defaultFragShader, gBufferSubpass); - defaultMaterial->SetProperty("data.textureIndex", tex->TextureArrayIndex); - - // Create debug draw pipeline debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass); debugDrawDepthPipeline = createDebugDrawPipeline(debugDrawNodeDepth->GetRenderpass(), debugDrawDepthSubpass); @@ -321,7 +310,29 @@ namespace SHADE lightingSubSystem = resourceManager.Create(); lightingSubSystem->Init(device, descPool); + } + void SHGraphicsSystem::InitBuiltInResources(void) + { + // Create default texture + std::array defaultTextureData = { 255, 255, 255, 255 }; + std::vector mipOffsets{}; + mipOffsets.push_back(0); + defaultTexture = AddTexture(4, defaultTextureData.data(), 1, 1, SHTexture::TextureFormat::eR8G8B8A8Unorm, mipOffsets); + BuildTextures(); + + // Create default meshes + primitiveMeshes[static_cast(PrimitiveType::Cube)] = SHPrimitiveGenerator::Cube(meshLibrary); + primitiveMeshes[static_cast(PrimitiveType::Sphere)] = SHPrimitiveGenerator::Sphere(meshLibrary); + BuildMeshBuffers(); + + // Create default materials + defaultMaterial = AddMaterial + ( + defaultVertShader, defaultFragShader, + worldRenderGraph->GetNode("G-Buffer")->GetSubpass("G-Buffer Write") + ); + defaultMaterial->SetProperty("data.textureIndex", defaultTexture->TextureArrayIndex); } #ifdef SHEDITOR @@ -364,8 +375,7 @@ namespace SHADE InitBoilerplate(); InitMiddleEnd(); InitSubsystems(); - - + InitBuiltInResources(); } void SHGraphicsSystem::Exit(void) @@ -690,7 +700,7 @@ namespace SHADE SHADE::Handle SHGraphicsSystem::AddMaterialInstanceCopy(Handle materialInst) { - return resourceManager.Create(materialInst->GetBaseMaterial()); + return resourceManager.Create(materialInst->GetBaseMaterial()); } void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) @@ -703,26 +713,38 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHADE::Handle SHGraphicsSystem::AddMesh(uint32_t vertexCount, const SHMesh::VertexPosition* const positions, const SHMesh::VertexTexCoord* const texCoords, const SHMesh::VertexTangent* const tangents, const SHMesh::VertexNormal* const normals, uint32_t indexCount, const SHMesh::Index* const indices) { - return meshLibrary.AddMesh(vertexCount, positions, texCoords, tangents, normals, indexCount, indices); + return meshLibrary.AddMesh(vertexCount, positions, texCoords, tangents, normals, indexCount, indices); } void SHGraphicsSystem::RemoveMesh(Handle mesh) { - meshLibrary.RemoveMesh(mesh); + meshLibrary.RemoveMesh(mesh); } void SHGraphicsSystem::BuildMeshBuffers() { transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); device->WaitIdle(); - transferCmdBuffer->BeginRecording(); - meshLibrary.BuildBuffers(device, transferCmdBuffer); - transferCmdBuffer->EndRecording(); - graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); + transferCmdBuffer->BeginRecording(); + meshLibrary.BuildBuffers(device, transferCmdBuffer); + transferCmdBuffer->EndRecording(); + graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); device->WaitIdle(); transferCmdBuffer.Free(); transferCmdBuffer = {}; } + Handle SHGraphicsSystem::GetMeshPrimitive(PrimitiveType type) const noexcept + { + switch (type) + { + case PrimitiveType::Cube: + case PrimitiveType::Sphere: + return primitiveMeshes[static_cast(type)]; + default: + return {}; + } + } + /*---------------------------------------------------------------------------------*/ /* Texture Registration Functions */ /*---------------------------------------------------------------------------------*/ @@ -809,7 +831,7 @@ namespace SHADE void SHGraphicsSystem::BatcherDispatcherRoutine::Execute(double) noexcept { - auto& renderables = SHComponentManager::GetDense(); + auto& renderables = SHComponentManager::GetDense(); for (auto& renderable : renderables) { if (!renderable.HasChanged()) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 90299444..a5a5ada0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -58,6 +58,19 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Type of built-in primitive meshes that are available. + */ + /***********************************************************************************/ + enum class PrimitiveType + { + Cube, + Sphere + }; + static constexpr int MAX_PRIMITIVE_TYPES = 2; + /***********************************************************************************/ /*! \brief @@ -72,6 +85,7 @@ namespace SHADE void InitSceneRenderGraph (void) noexcept; void InitMiddleEnd (void) noexcept; void InitSubsystems (void) noexcept; + void InitBuiltInResources (void); #ifdef SHEDITOR void InitEditorRenderGraph (void) noexcept; @@ -81,25 +95,25 @@ namespace SHADE class SH_API BeginRoutine final : public SHSystemRoutine { public: - BeginRoutine(); + BeginRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API RenderRoutine final : public SHSystemRoutine { public: - RenderRoutine(); + RenderRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API EndRoutine final : public SHSystemRoutine { public: - EndRoutine(); + EndRoutine(); virtual void Execute(double dt) noexcept override final; }; class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine { public: - BatcherDispatcherRoutine(); + BatcherDispatcherRoutine(); virtual void Execute(double dt) noexcept override final; }; @@ -152,34 +166,34 @@ namespace SHADE /*******************************************************************************/ /*! - \brief - Adds a mesh to the Mesh Library. But this does not mean that the meshes have - been added yet. A call to "BuildBuffers()" is required to transfer all - meshes into the GPU. + \brief + Adds a mesh to the Mesh Library. But this does not mean that the meshes have + been added yet. A call to "BuildBuffers()" is required to transfer all + meshes into the GPU. \param vertexCount Number of vertices in this Mesh. \param positions - Pointer to the first in a contiguous array of SHMathVec3s that define vertex - positions. - \param texCoords - Pointer to the first in a contiguous array of SHMathVec2s that define vertex - texture coordinates. - \param tangents - Pointer to the first in a contiguous array of SHMathVec3s that define vertex - tangents. - \param normals - Pointer to the first in a contiguous array of SHMathVec3s that define vertex - normals. + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + positions. + \param texCoords + Pointer to the first in a contiguous array of SHMathVec2s that define vertex + texture coordinates. + \param tangents + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + tangents. + \param normals + Pointer to the first in a contiguous array of SHMathVec3s that define vertex + normals. \param indexCount Number of indices in this mesh. \param indices - Pointer to the first in a contiguous array of uint32_ts that define mesh - indices. + Pointer to the first in a contiguous array of uint32_ts that define mesh + indices. - \return - Handle to the created Mesh. This is not valid to be used until a call to - BuildBuffers(). + \return + Handle to the created Mesh. This is not valid to be used until a call to + BuildBuffers(). */ /*******************************************************************************/ @@ -188,9 +202,9 @@ namespace SHADE /*! \brief - Removes a mesh from the MeshLibrary. But this does not mean that the meshes - have been removed yet. A call to "BuildBuffers()" is required to finalise all - changes. + Removes a mesh from the MeshLibrary. But this does not mean that the meshes + have been removed yet. A call to "BuildBuffers()" is required to finalise all + changes. \param mesh Handle to the mesh to remove. @@ -207,6 +221,21 @@ namespace SHADE */ /***************************************************************************/ void BuildMeshBuffers(); + /*******************************************************************************/ + /*! + + \brief + Retrieves the built-in mesh specified. + + \param type + Type of built-in mesh to retrieve. + + \returns + Handle to the mesh that was specfied. However, if an invalid type is specified, + a null Handle will be returned. + */ + /*******************************************************************************/ + Handle GetMeshPrimitive(PrimitiveType type) const noexcept; /*-----------------------------------------------------------------------------*/ /* Texture Registration Functions */ @@ -278,6 +307,18 @@ namespace SHADE */ /***************************************************************************/ Handle GetTextureHandle(SHTexture::Index textureId) const; + /***************************************************************************/ + /*! + * + \brief + Retrieves the handle to the default texture. A white 1x1 texture. + + \returns + Handle to the default texture. + + */ + /***************************************************************************/ + Handle GetDefaultTexture() const noexcept { return defaultTexture; } void PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept; void HandleResize(void) noexcept; @@ -378,6 +419,13 @@ namespace SHADE Handle debugDrawPipeline; Handle debugDrawDepthPipeline; + // Built-In Textures + Handle defaultTexture; + + // Built-In Meshes + std::array, MAX_PRIMITIVE_TYPES> primitiveMeshes; + + // Render Graphs Handle worldRenderGraph; // Sub systems From 7bfe459c02638d86674624078550fc96d4e08508 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 5 Nov 2022 00:13:24 +0800 Subject: [PATCH 680/793] Called assimp git pull from root bat directly instead of calling bat inside dependency --- Dependencies.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependencies.bat b/Dependencies.bat index dcd4750e..44185ff8 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -59,7 +59,7 @@ if %_e%==3 (goto :done) else (goto :ModelCompiler) echo -----------------------ModelCompiler---------------------------- rmdir "Dependencies/ModelCompiler" /S /Q git clone https://github.com/SHADE-DP/ModelCompiler.git "Dependencies/ModelCompiler" -Dependencies/ModelCompiler/Dependencies.bat +git clone https://github.com/SHADE-DP/assimp.git "Dependencies/ModelCompiler/Dependencies/assimp" if %_e%==4 (goto :done) else (goto :spdlog) @REM :ktx From 06afd384af2cb63da4373947971ee84d8dffac31 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 5 Nov 2022 14:56:52 +0800 Subject: [PATCH 681/793] Scenes are now reloaded and scripts are no longer lost when building scripts --- .../src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index af2d5517..d1e359b6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -120,12 +120,16 @@ namespace SHADE if (ImGui::Selectable("Build Scripts - Debug")) { auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); + SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID()); scriptEngine->BuildScriptAssembly(true, true); + SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID()); } if (ImGui::Selectable("Build Scripts - Release")) { auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); - scriptEngine->BuildScriptAssembly(false, true); + SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID()); + scriptEngine->BuildScriptAssembly(false, true); + SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID()); } ImGui::EndMenu(); } From 04e2c255b0d6c8f3baa82ca7db7ade914906edc5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 5 Nov 2022 15:34:56 +0800 Subject: [PATCH 682/793] Build script options are now disabled when in play or pause mode --- .../src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index d1e359b6..c18f0c8c 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -117,6 +117,7 @@ namespace SHADE auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); scriptEngine->GenerateScriptsCsProjFile(); } + ImGui::BeginDisabled(SHSystemManager::GetSystem()->editorState != SHEditor::State::STOP); if (ImGui::Selectable("Build Scripts - Debug")) { auto* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -131,6 +132,7 @@ namespace SHADE scriptEngine->BuildScriptAssembly(false, true); SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID()); } + ImGui::EndDisabled(); ImGui::EndMenu(); } From b9996c7b51bf73f7108c362bf5d7b15583c4b4bb Mon Sep 17 00:00:00 2001 From: Glence Date: Sat, 5 Nov 2022 17:44:34 +0800 Subject: [PATCH 683/793] made rb a properties --- TempScriptsFolder/PlayerController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index bcdf24d1..86ba7c98 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -15,7 +15,7 @@ public class PlayerController : Script TOTAL } - public RigidBody rb; + public RigidBody rb { get; set; } private Transform tranform; private Camera cam; private PickAndThrow pat; From de38b29f250f3628a6979dfb583a9b86724975b8 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 5 Nov 2022 18:15:18 +0800 Subject: [PATCH 684/793] small fixes for ms2 submission --- Assets/Scenes/M2Scene.shade | 58 ++++++++++++++----- .../src/Serialization/SHYAMLConverters.h | 2 +- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 60dbb5f9..443d4a87 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -50,7 +50,7 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.00427246094, y: 0.000122070312, z: 0.00427246094} + Half Extents: {x: 24.7399445, y: 0.25, z: 8.75} Friction: 0.400000006 Bounciness: 0 Density: 1 @@ -85,12 +85,28 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} + Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ + Scripts: + - Type: PlayerController + drag: 2 + currentState: 0 + maxMoveVel: 2 + moveForce: 50 + sprintMultiplier: 2 + rotationFactorPerFrame: 1 + maxJumpHeight: 4 + maxJumpTime: 0.75 + fallMultipler: 2 + lightMultiper: 0.75 + mediumMultiper: 0.5 + heavyMultiper: 0.25 + - Type: PickAndThrow + throwForce: [200, 300, 200] + item: 5 - EID: 3 Name: Default IsActive: true @@ -110,7 +126,12 @@ Translate: {x: 0, y: 0, z: 0} Rotate: {x: 0, y: 0, z: 0} Scale: {x: 1, y: 1, z: 1} - Scripts: ~ + Scripts: + - Type: SHADE_Scripting.ThirdPersonCamera + armLength: 2 + turnSpeedPitch: 0.300000012 + turnSpeedYaw: 0.5 + pitchClamp: 45 - EID: 9 Name: Default IsActive: true @@ -135,7 +156,7 @@ Scale: {x: 2, y: 2, z: 2} Renderable Component: Mesh: 144838771 - Material: 126974645 + Material: 123745521 RigidBody Component: Type: Dynamic Mass: 1 @@ -153,19 +174,21 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} + Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Is Trigger: true Type: Box - Half Extents: {x: 0.00048828125, y: 0.00048828125, z: 0.00048828125} + Half Extents: {x: 2, y: 2, z: 2} Friction: 0.400000006 Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ + Scripts: + - Type: Item + currCategory: 0 - EID: 6 Name: AI IsActive: true @@ -174,7 +197,7 @@ Transform Component: Translate: {x: -8, y: -2, z: 2.5} Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 2, y: 2, z: 2} + Scale: {x: 1, y: 1, z: 1} Renderable Component: Mesh: 149697411 Material: 126974645 @@ -195,21 +218,28 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 0.000244140625, y: 0.000244140625, z: 0.000244140625} + Half Extents: {x: 0.5, y: 0.5, z: 0.5} Friction: 0.400000006 Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ + Scripts: + - Type: AIPrototype + movementForceMultiplier: 100 + patrolSpeed: 0.400000006 + chaseSpeed: 0.800000012 + distanceToCapture: 1.20000005 + distanceToStartChase: 2 + distanceToEndChase: 2.5 - EID: 7 Name: Default IsActive: true NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 3, y: -1, z: -1} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 5, y: 5, z: 5} + Translate: {x: 0, y: -16.8647861, z: -14.039052} + Rotate: {x: -0, y: 0, z: -0} + Scale: {x: 28.1434975, y: 28.1434975, z: 28.1434975} Renderable Component: Mesh: 149697411 Material: 126974645 diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index af0b280b..d4b97244 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -168,7 +168,7 @@ namespace YAML case SHCollider::Type::BOX: { if (node[HalfExtents].IsDefined()) - rhs.SetBoundingBox(node[HalfExtents].as()); + rhs.SetBoundingBox(node[HalfExtents].as() * 2.0f); } break; case SHCollider::Type::SPHERE: From 4bd9f0817a9b59b545908857f4feeea1ce5d3adf Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 12:55:18 +0800 Subject: [PATCH 685/793] Buffers are now tagged as buffers for debug labels --- SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp | 3 ++- SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp | 2 +- SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 63f580b9..37dd2c74 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -410,7 +410,8 @@ namespace SHADE auto [tempBuffer, allocInfo] = createBuffer(sizeStored); vkBuffer = tempBuffer; - SET_VK_OBJ_NAME(*device, vk::ObjectType::eBuffer, vkBuffer, name); + if (!name.empty()) + SET_VK_OBJ_NAME(device, vk::ObjectType::eBuffer, vkBuffer, "[Buffer] " + name); // This probably means that a HOST_CACHED memory type is used on allocation if (allocFlags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 35c104ee..20332f1d 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -220,7 +220,7 @@ namespace SHADE else { SHVulkanDebugUtil::ReportVkSuccess("Successfully created a Logical Device. "); - SET_VK_OBJ_NAME((*this), vk::ObjectType::eDevice, vkLogicalDevice, "Logical Device"); + SET_VK_OBJ_NAME(this, vk::ObjectType::eDevice, vkLogicalDevice, "Logical Device"); } InitializeVMA(); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp index dd7ff609..d72ab09e 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp @@ -40,7 +40,7 @@ namespace SHADE /*-------------------------------------------------------------------------------------*/ #ifdef _DEBUG #define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) \ - (DEVICE).SetVulkanObjectName(OBJ_TYPE, OBJ_HDL, OBJ_NAME); + DEVICE->SetVulkanObjectName(OBJ_TYPE, OBJ_HDL, OBJ_NAME); #else #define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) #endif From 782db1e2a428aed9f794c3b6aed29c253e145e58 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 13:22:16 +0800 Subject: [PATCH 686/793] Added debug labels for Renderpasses --- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp | 6 +++--- .../src/Graphics/RenderGraph/SHRenderGraphNode.cpp | 7 +++++-- SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h | 5 ++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 66dc6a0f..9c4e0d65 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -471,9 +471,9 @@ namespace SHADE } } - nodes.emplace_back(resourceManager->Create(renderGraphStorage, std::move(descInitParams), std::move(predecessors))); - nodeIndexing.emplace(nodeName, static_cast(nodes.size()) - 1u); - return nodes.at(nodeIndexing[nodeName]); + auto node = nodes.emplace_back(resourceManager->Create(nodeName, renderGraphStorage, std::move(descInitParams), std::move(predecessors))); + nodeIndexing.emplace(std::move(nodeName), static_cast(nodes.size()) - 1u); + return node; } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 12f0e246..9aa42c0a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -25,6 +25,7 @@ namespace SHADE void SHRenderGraphNode::CreateRenderpass(void) noexcept { renderpass = graphStorage->logicalDevice->CreateRenderpass(attachmentDescriptions, spDescs, spDeps); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eRenderPass, renderpass->GetVkRenderpass(), "[RenderPass] " + name); } /***************************************************************************/ @@ -116,7 +117,7 @@ namespace SHADE */ /***************************************************************************/ - SHRenderGraphNode::SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept + SHRenderGraphNode::SHRenderGraphNode(std::string nodeName, Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept : graphStorage{ renderGraphStorage} , renderpass{} , framebuffers{} @@ -128,6 +129,7 @@ namespace SHADE , executed{ false } , configured{ false } , nodeComputes{} + , name { std::move(nodeName) } { // pipeline library initialization pipelineLibrary.Init(graphStorage->logicalDevice); @@ -189,6 +191,7 @@ namespace SHADE , spDescs{ std::move(rhs.spDescs) } , spDeps{ std::move(rhs.spDeps) } , nodeComputes{ std::move(rhs.nodeComputes) } + , name { std::move(rhs.name) } { rhs.renderpass = {}; @@ -213,7 +216,7 @@ namespace SHADE spDescs = std::move(rhs.spDescs); spDeps = std::move(rhs.spDeps); nodeComputes = std::move(rhs.nodeComputes); - + name = std::move(rhs.name); rhs.renderpass = {}; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 695d1c31..33868f5e 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -78,8 +78,11 @@ namespace SHADE //! Whether or not the node has been configured already or not bool configured; + //! Manages batching for this RenderPass SHBatcher batcher; + //! Name of this node + std::string name; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ @@ -92,7 +95,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ - SHRenderGraphNode(Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept; + SHRenderGraphNode(std::string nodeName, Handle renderGraphStorage, std::vector attDescInitParams, std::vector> predecessors) noexcept; SHRenderGraphNode(SHRenderGraphNode&& rhs) noexcept; SHRenderGraphNode& operator= (SHRenderGraphNode&& rhs) noexcept; From fb37742ee0e31c8e291a46805750279c0b81a7d8 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 13:28:49 +0800 Subject: [PATCH 687/793] Staging Buffers are now labeled --- SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 37dd2c74..803c53be 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -220,6 +220,7 @@ namespace SHADE // then assign it to the hpp version stagingBuffer = tempBuffer; + SET_VK_OBJ_NAME(device, vk::ObjectType::eBuffer, stagingBuffer, "[Buffer] Staging - " + name); // Just map, copy then unmap void* stagingBufferMappedPtr = nullptr; From 0bda3d515188bd81b810ae11bf3c8d73e0b3e0fe Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 14:08:19 +0800 Subject: [PATCH 688/793] Added labels for resources of Mesh and Texture libraries --- .../src/Graphics/Devices/SHVkLogicalDevice.h | 14 ++++++++++++-- .../src/Graphics/Devices/SHVkLogicalDevice.hpp | 15 +++++++++++++++ .../MiddleEnd/Interface/SHMeshLibrary.cpp | 15 ++++++++++----- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 4 ++++ 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h index 827f12b3..158c20b2 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.h @@ -208,8 +208,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ #ifdef _DEBUG /// - /// Sets a Vulkan object's name for debugging purposes. This function will not be - /// compiled outsied of Debug configurations. Hence, it is advised to use provided + /// Sets a Vulkan HPP object's name for debugging purposes. This function will not be + /// compiled outside of Debug configurations. Hence, it is advised to use provided /// macro function SET_VK_OBJ_NAME() instead of using this function directly. /// /// Type of the object. @@ -217,6 +217,16 @@ namespace SHADE /// Object's name. template inline void SetVulkanObjectName(vk::ObjectType objType, T objHandle, const std::string& objName); + /// + /// Sets a Vulkan object's name for debugging purposes. This function will not be + /// compiled outside of Debug configurations. Hence, it is advised to use provided + /// macro function SET_VK_OBJ_NAME_VK() instead of using this function directly. + /// + /// Type of the object. + /// Handle to the Vulkan Object to name. + /// Object's name. + template + inline void SetVulkanObjectNameVk(vk::ObjectType objType, T objVkHandle, const std::string& objName); #endif /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp index d72ab09e..e8de27fb 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.hpp @@ -32,6 +32,18 @@ namespace SHADE info.pObjectName = objName.data(); vkLogicalDevice.setDebugUtilsObjectNameEXT(info); } + template + void SHVkLogicalDevice::SetVulkanObjectNameVk(vk::ObjectType objType, T objVkHandle, const std::string& objName) + { + if (objName.empty()) + return; + + vk::DebugUtilsObjectNameInfoEXT info; + info.objectType = objType; + info.objectHandle = (uint64_t) objVkHandle; + info.pObjectName = objName.data(); + vkLogicalDevice.setDebugUtilsObjectNameEXT(info); + } #endif } @@ -41,6 +53,9 @@ namespace SHADE #ifdef _DEBUG #define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) \ DEVICE->SetVulkanObjectName(OBJ_TYPE, OBJ_HDL, OBJ_NAME); +#define SET_VK_OBJ_NAME_VK(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) \ + DEVICE->SetVulkanObjectNameVk(OBJ_TYPE, OBJ_HDL, OBJ_NAME); #else #define SET_VK_OBJ_NAME(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) +#define SET_VK_OBJ_NAME_VK(DEVICE, OBJ_TYPE, OBJ_HDL, OBJ_NAME) #endif diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp index 3474fea3..d34c1b7d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMeshLibrary.cpp @@ -165,35 +165,40 @@ namespace SHADE device, cmdBuffer, vertPosBuffer, vertPosStorage.data(), static_cast(vertPosStorage.size()) * sizeof(SHMesh::VertexPosition), - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Mesh Library Vertex Positions" ); SHVkUtil::EnsureBufferAndCopyData ( device, cmdBuffer, vertTexCoordBuffer, vertTexCoordStorage.data(), static_cast(vertTexCoordStorage.size()) * sizeof(SHMesh::VertexTexCoord), - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Mesh Library Vertex TexCoords" ); SHVkUtil::EnsureBufferAndCopyData ( device, cmdBuffer, vertTangentBuffer, vertTangentStorage.data(), static_cast(vertTangentStorage.size()) * sizeof(SHMesh::VertexTangent), - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Mesh Library Vertex Tangents" ); SHVkUtil::EnsureBufferAndCopyData ( device, cmdBuffer, vertNormalBuffer, vertNormalStorage.data(), static_cast(vertNormalStorage.size()) * sizeof(SHMesh::VertexNormal), - BuffUsage::eVertexBuffer + BuffUsage::eVertexBuffer, + "Mesh Library Vertex Normals" ); SHVkUtil::EnsureBufferAndCopyData ( device, cmdBuffer, indexBuffer, indexStorage.data(), static_cast(indexStorage.size()) * sizeof(SHMesh::Index), - BuffUsage::eIndexBuffer + BuffUsage::eIndexBuffer, + "Mesh Library Indices" ); isDirty = false; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 3b6448fa..9c330b9f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -23,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/Images/SHVkImage.h" +#include "Graphics/Images/SHVkImageView.h" #include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" #include "Assets/Asset Types/SHTextureAsset.h" @@ -150,6 +151,9 @@ namespace SHADE texOrder.emplace_back(job.TextureHandle); combinedImageSamplers.emplace_back(std::make_tuple(job.TextureHandle->ImageView, job.Sampler, vk::ImageLayout::eShaderReadOnlyOptimal)); job.TextureHandle->TextureArrayIndex = static_cast(texOrder.size()) - 1U; + + SET_VK_OBJ_NAME(device, vk::ObjectType::eImage, job.Image->GetVkImage(), "[Image] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); + SET_VK_OBJ_NAME(device, vk::ObjectType::eImageView, job.TextureHandle->ImageView->GetImageView(), "[ImageView] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); } addJobs.clear(); From 44ae6d0a8f6138de1f033fd48520323652a311de Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 17:28:03 +0800 Subject: [PATCH 689/793] Removed unused descriptor sets in SHGraphicsGlobalData --- .../src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp | 1 - .../src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h | 3 --- 2 files changed, 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 9717889d..155097a5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -13,7 +13,6 @@ namespace SHADE /* Static Definitions */ /*-----------------------------------------------------------------------------------*/ std::vector> SHGraphicsGlobalData::globalDescSetLayouts; - Handle SHGraphicsGlobalData::globalDescSets; SHVertexInputState SHGraphicsGlobalData::defaultVertexInputState; Handle SHGraphicsGlobalData::dummyPipelineLayout; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h index 344c2616..439acba5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h @@ -17,9 +17,6 @@ namespace SHADE //! Global descriptor set layouts. Used to allocate descriptor sets static std::vector> globalDescSetLayouts; - //! Global Descriptor sets - static Handle globalDescSets; - //! Default vertex input state (used by everything). static SHVertexInputState defaultVertexInputState; From 4e02f6413338dce0472737549a1a140b4af7ec79 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 7 Nov 2022 18:06:43 +0800 Subject: [PATCH 690/793] Fixed bug where duplicate triggers were caught due to swapped entity IDs --- .../src/Math/Transform/SHTransformSystem.cpp | 6 ++--- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 7 +++--- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 22 +++++++++---------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index f000aa5b..94c133dd 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -231,12 +231,12 @@ namespace SHADE tf.worldRotation = tf.localRotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero); // Set the orientation - // Wrap rotations between -360 and 360 and convert to radians + // Wrap rotations between -720 and 720 and convert to radians SHVec3 worldRotRad, localRotRad; for (size_t i = 0; i < SHVec3::SIZE; ++i) { - worldRotRad[i] = SHMath::Wrap(tf.worldRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI); - localRotRad[i] = SHMath::Wrap(tf.localRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI); + worldRotRad[i] = SHMath::Wrap(tf.worldRotation[i], -2.0f * SHMath::TWO_PI, 2.0f * SHMath::TWO_PI); + localRotRad[i] = SHMath::Wrap(tf.localRotation[i], -2.0f * SHMath::TWO_PI, 2.0f * SHMath::TWO_PI); } tf.world.orientation = SHQuaternion::FromEuler(worldRotRad); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index bdee8ba1..66c28958 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -605,7 +605,6 @@ namespace SHADE if (rigidBodyComponent != nullptr) { - if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) continue; @@ -658,8 +657,10 @@ namespace SHADE { const auto IT = std::ranges::find_if(container.begin(), container.end(), [&](const SHCollisionEvent& e) { - const bool ENTITY_MATCH = e.value[0] == collisionEvent.value[0]; - const bool COLLIDERS_MATCH = e.value[1] == collisionEvent.value[1]; + const bool ENTITY_MATCH = (e.ids[0] == collisionEvent.ids[0] && e.ids[1] == collisionEvent.ids[1]) + || (e.ids[0] == collisionEvent.ids[1] && e.ids[1] == collisionEvent.ids[0]); + const bool COLLIDERS_MATCH = (e.ids[2] == collisionEvent.ids[2] && e.ids[3] == collisionEvent.ids[3]) + || (e.ids[2] == collisionEvent.ids[3] && e.ids[3] == collisionEvent.ids[2]); return ENTITY_MATCH && COLLIDERS_MATCH; }); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 05e6e57e..0dd2754e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -183,24 +183,24 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void DestroyPhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + void DestroyPhysicsObject (EntityID entityID) noexcept; - static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; - void SyncTransforms () noexcept; + static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; + void SyncTransforms () noexcept; - static void UpdateEventContainers (const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept; - void ClearInvalidCollisions () noexcept; + static void UpdateEventContainers (const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept; + void ClearInvalidCollisions () noexcept; - SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); - SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); - SHEventHandle ResetWorld (SHEventPtr editorStopEvent); + SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); + SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); + SHEventHandle ResetWorld (SHEventPtr editorStopEvent); template || std::is_same_v>> - SHCollisionEvent GenerateCollisionEvent (const RP3DCollisionPair& cp) noexcept; + SHCollisionEvent GenerateCollisionEvent (const RP3DCollisionPair& cp) noexcept; }; } // namespace SHADE From 70dcad13138a186353d988d950612af720d4f133 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 7 Nov 2022 18:19:39 +0800 Subject: [PATCH 691/793] Changed Collider to CollisionShape for improved clarity --- SHADE_Application/src/Scenes/SBTestScene.cpp | 18 ++--- .../Inspector/SHEditorComponentView.hpp | 16 ++--- .../Components/SHColliderComponent.cpp | 26 ++++---- .../Physics/Components/SHColliderComponent.h | 18 ++--- .../{SHCollider.cpp => SHCollisionShape.cpp} | 66 +++++++++---------- .../{SHCollider.h => SHCollisionShape.h} | 14 ++-- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 12 ++-- SHADE_Engine/src/Physics/SHPhysicsObject.h | 2 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 8 +-- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 2 +- SHADE_Engine/src/Physics/SHPhysicsUtils.cpp | 8 +-- SHADE_Engine/src/Physics/SHPhysicsUtils.h | 6 +- .../src/Serialization/SHYAMLConverters.h | 46 ++++++------- SHADE_Managed/src/Components/Collider.cxx | 10 +-- SHADE_Managed/src/Components/Collider.h++ | 6 +- 15 files changed, 129 insertions(+), 129 deletions(-) rename SHADE_Engine/src/Physics/{SHCollider.cpp => SHCollisionShape.cpp} (75%) rename SHADE_Engine/src/Physics/{SHCollider.h => SHCollisionShape.h} (91%) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 02977f19..ecacdc79 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -114,8 +114,8 @@ namespace Sandbox racoonTransform.SetWorldPosition({ -3.0f, -2.0f, -5.0f }); racoonCollider.AddBoundingBox(); - racoonCollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f,0.5f,0.0f)); - racoonCollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + racoonCollider.GetCollisionShape(0).SetPositionOffset(SHVec3(0.0f,0.5f,0.0f)); + racoonCollider.GetCollisionShape(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); auto racoonItemLocation = SHEntityManager::CreateEntity(); auto& racoonItemLocationTransform = *SHComponentManager::GetComponent_s(racoonItemLocation); @@ -140,13 +140,13 @@ namespace Sandbox itemCollider.AddBoundingBox(); itemCollider.AddBoundingBox(SHVec3(2.0f,2.0f,2.0f)); - itemCollider.GetCollider(1).SetIsTrigger(true); + itemCollider.GetCollisionShape(1).SetIsTrigger(true); - itemCollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); - itemCollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + itemCollider.GetCollisionShape(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + itemCollider.GetCollisionShape(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); - itemCollider.GetCollider(1).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); - itemCollider.GetCollider(1).SetBoundingBox(SHVec3(1.0f, 1.0f, 1.0f)); + itemCollider.GetCollisionShape(1).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + itemCollider.GetCollisionShape(1).SetBoundingBox(SHVec3(1.0f, 1.0f, 1.0f)); itemRigidBody.SetInterpolate(false); itemRigidBody.SetFreezeRotationX(true); @@ -168,8 +168,8 @@ namespace Sandbox AITransform.SetWorldPosition({ -8.0f, -2.0f, 2.5f }); AICollider.AddBoundingBox(); - AICollider.GetCollider(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); - AICollider.GetCollider(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); + AICollider.GetCollisionShape(0).SetPositionOffset(SHVec3(0.0f, 0.5f, 0.0f)); + AICollider.GetCollisionShape(0).SetBoundingBox(SHVec3(0.5f, 0.5f, 0.5f)); AIRigidBody.SetInterpolate(false); AIRigidBody.SetFreezeRotationX(true); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 72c38d6f..d7ae56c1 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -234,21 +234,21 @@ namespace SHADE { DrawContextMenu(component); - auto& colliders = component->GetColliders(); + auto& colliders = component->GetCollisionShapes(); int const size = static_cast(colliders.size()); - ImGui::BeginChild("Colliders", { 0.0f, colliders.empty() ? 1.0f : 250.0f }, true); + ImGui::BeginChild("Collision Shapes", { 0.0f, colliders.empty() ? 1.0f : 250.0f }, true); std::optional colliderToDelete{ std::nullopt }; for (int i{}; i < size; ++i) { ImGui::PushID(i); - SHCollider* collider = &component->GetCollider(i); + SHCollisionShape* collider = &component->GetCollisionShape(i); auto cursorPos = ImGui::GetCursorPos(); //collider->IsTrigger - if (collider->GetType() == SHCollider::Type::BOX) + if (collider->GetType() == SHCollisionShape::Type::BOX) { - SHEditorWidgets::BeginPanel(std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::BeginPanel(std::format("{} Box #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto box = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 @@ -257,9 +257,9 @@ namespace SHADE [box, transformComponent] { return (box->GetHalfExtents() * 2.0f) / transformComponent->GetWorldScale(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } - else if (collider->GetType() == SHCollider::Type::SPHERE) + else if (collider->GetType() == SHCollisionShape::Type::SPHERE) { - SHEditorWidgets::BeginPanel(std::format("{} Sphere Collider #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::BeginPanel(std::format("{} Sphere #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto sphere = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat @@ -273,7 +273,7 @@ namespace SHADE }, [collider](float const& value) { collider->SetBoundingSphere(value); }); } - else if (collider->GetType() == SHCollider::Type::CAPSULE) + else if (collider->GetType() == SHCollisionShape::Type::CAPSULE) { } diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index c7e327fa..af3965fb 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -48,17 +48,17 @@ namespace SHADE return orientation.ToEuler(); } - const SHColliderComponent::Colliders& SHColliderComponent::GetColliders() const noexcept + const SHColliderComponent::CollisionShapes& SHColliderComponent::GetCollisionShapes() const noexcept { - return colliders; + return collisionShapes; } - SHCollider& SHColliderComponent::GetCollider(int index) + SHCollisionShape& SHColliderComponent::GetCollisionShape(int index) { - if (index < 0 || static_cast(index) >= colliders.size()) + if (index < 0 || static_cast(index) >= collisionShapes.size()) throw std::invalid_argument("Out-of-range access!"); - return colliders[index]; + return collisionShapes[index]; } /*-----------------------------------------------------------------------------------*/ @@ -83,9 +83,9 @@ namespace SHADE return nullptr; } - static constexpr auto TYPE = SHCollider::Type::BOX; + static constexpr auto TYPE = SHCollisionShape::Type::BOX; - auto& collider = colliders.emplace_back(SHCollider{ GetEID(), TYPE }); + auto& collider = collisionShapes.emplace_back(SHCollisionShape{ GetEID(), TYPE }); collider.entityID = GetEID(); collider.SetPositionOffset(posOffset); @@ -105,9 +105,9 @@ namespace SHADE return nullptr; } - static constexpr auto TYPE = SHCollider::Type::SPHERE; + static constexpr auto TYPE = SHCollisionShape::Type::SPHERE; - auto& collider = colliders.emplace_back(SHCollider{ GetEID(), TYPE }); + auto& collider = collisionShapes.emplace_back(SHCollisionShape{ GetEID(), TYPE }); collider.entityID = GetEID(); collider.SetPositionOffset(posOffset); @@ -121,12 +121,12 @@ namespace SHADE void SHColliderComponent::RemoveCollider(int index) { - if (index < 0 || static_cast(index) >= colliders.size()) + if (index < 0 || static_cast(index) >= collisionShapes.size()) throw std::invalid_argument("Out-of-range access!"); int idx = 0; - auto it = colliders.begin(); - for (; it != colliders.end(); ++it) + auto it = collisionShapes.begin(); + for (; it != collisionShapes.end(); ++it) { if (idx == index) break; @@ -134,7 +134,7 @@ namespace SHADE ++idx; } - it = colliders.erase(it); + it = collisionShapes.erase(it); // Notify Physics System if (!system) diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index 7ce272a9..ac5e7528 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -14,7 +14,7 @@ // Project Headers #include "ECS_Base/Components/SHComponent.h" -#include "Physics/SHCollider.h" +#include "Physics/SHCollisionShape.h" #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" @@ -43,7 +43,7 @@ namespace SHADE /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - using Colliders = std::vector; + using CollisionShapes = std::vector; public: @@ -67,14 +67,14 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool HasChanged () const noexcept; + [[nodiscard]] bool HasChanged () const noexcept; - [[nodiscard]] const SHVec3& GetPosition () const noexcept; - [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; - [[nodiscard]] SHVec3 GetRotation () const noexcept; + [[nodiscard]] const SHVec3& GetPosition () const noexcept; + [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; - [[nodiscard]] const Colliders& GetColliders () const noexcept; - [[nodiscard]] SHCollider& GetCollider (int index); + [[nodiscard]] const CollisionShapes& GetCollisionShapes() const noexcept; + [[nodiscard]] SHCollisionShape& GetCollisionShape (int index); /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -98,7 +98,7 @@ namespace SHADE SHVec3 position; SHQuaternion orientation; - Colliders colliders; + CollisionShapes collisionShapes; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollisionShape.cpp similarity index 75% rename from SHADE_Engine/src/Physics/SHCollider.cpp rename to SHADE_Engine/src/Physics/SHCollisionShape.cpp index 6d455d67..78ec36f9 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollisionShape.cpp @@ -11,7 +11,7 @@ #include // Primary Header -#include "SHCollider.h" +#include "SHCollisionShape.h" // Project Headers #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" @@ -25,7 +25,7 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHCollider::SHCollider(EntityID eid, Type colliderType, const SHPhysicsMaterial& physicsMaterial) + SHCollisionShape::SHCollisionShape(EntityID eid, Type colliderType, const SHPhysicsMaterial& physicsMaterial) : type { colliderType } , entityID { eid } , isTrigger { false } @@ -49,7 +49,7 @@ namespace SHADE } } - SHCollider::SHCollider(const SHCollider& rhs) noexcept + SHCollisionShape::SHCollisionShape(const SHCollisionShape& rhs) noexcept : type { rhs.type} , entityID { rhs.entityID } , isTrigger { rhs.isTrigger } @@ -61,7 +61,7 @@ namespace SHADE CopyShape(rhs.shape); } - SHCollider::SHCollider(SHCollider&& rhs) noexcept + SHCollisionShape::SHCollisionShape(SHCollisionShape&& rhs) noexcept : type { rhs.type} , entityID { rhs.entityID } , isTrigger { rhs.isTrigger } @@ -73,7 +73,7 @@ namespace SHADE CopyShape(rhs.shape); } - SHCollider::~SHCollider() noexcept + SHCollisionShape::~SHCollisionShape() noexcept { shape = nullptr; } @@ -82,7 +82,7 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ - SHCollider& SHCollider::operator=(const SHCollider& rhs) noexcept + SHCollisionShape& SHCollisionShape::operator=(const SHCollisionShape& rhs) noexcept { if (this == &rhs) return *this; @@ -100,7 +100,7 @@ namespace SHADE return *this; } - SHCollider& SHCollider::operator=(SHCollider&& rhs) noexcept + SHCollisionShape& SHCollisionShape::operator=(SHCollisionShape&& rhs) noexcept { type = rhs.type; entityID = rhs.entityID; @@ -119,52 +119,52 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - bool SHCollider::HasChanged() const noexcept + bool SHCollisionShape::HasChanged() const noexcept { return dirty; } - bool SHCollider::IsTrigger() const noexcept + bool SHCollisionShape::IsTrigger() const noexcept { return isTrigger; } - SHCollider::Type SHCollider::GetType() const noexcept + SHCollisionShape::Type SHCollisionShape::GetType() const noexcept { return type; } - float SHCollider::GetFriction() const noexcept + float SHCollisionShape::GetFriction() const noexcept { return material.GetFriction(); } - float SHCollider::GetBounciness() const noexcept + float SHCollisionShape::GetBounciness() const noexcept { return material.GetBounciness(); } - float SHCollider::GetDensity() const noexcept + float SHCollisionShape::GetDensity() const noexcept { return material.GetDensity(); } - const SHPhysicsMaterial& SHCollider::GetMaterial() const noexcept + const SHPhysicsMaterial& SHCollisionShape::GetMaterial() const noexcept { return material; } - const SHVec3& SHCollider::GetPositionOffset() const noexcept + const SHVec3& SHCollisionShape::GetPositionOffset() const noexcept { return positionOffset; } - const SHVec3& SHCollider::GetRotationOffset() const noexcept + const SHVec3& SHCollisionShape::GetRotationOffset() const noexcept { return rotationOffset; } - SHShape* SHCollider::GetShape() noexcept + SHShape* SHCollisionShape::GetShape() noexcept { dirty = true; return shape; @@ -174,7 +174,7 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHCollider::SetBoundingBox(const SHVec3& halfExtents) + void SHCollisionShape::SetBoundingBox(const SHVec3& halfExtents) { dirty = true; @@ -199,7 +199,7 @@ namespace SHADE } } - void SHCollider::SetBoundingSphere(float radius) + void SHCollisionShape::SetBoundingSphere(float radius) { dirty = true; @@ -230,37 +230,37 @@ namespace SHADE } - void SHCollider::SetIsTrigger(bool trigger) noexcept + void SHCollisionShape::SetIsTrigger(bool trigger) noexcept { dirty = true; isTrigger = trigger; } - void SHCollider::SetFriction(float friction) noexcept + void SHCollisionShape::SetFriction(float friction) noexcept { dirty = true; material.SetFriction(friction); } - void SHCollider::SetBounciness(float bounciness) noexcept + void SHCollisionShape::SetBounciness(float bounciness) noexcept { dirty = true; material.SetBounciness(bounciness); } - void SHCollider::SetDensity(float density) noexcept + void SHCollisionShape::SetDensity(float density) noexcept { dirty = true; material.SetDensity(density); } - void SHCollider::SetMaterial(const SHPhysicsMaterial& newMaterial) noexcept + void SHCollisionShape::SetMaterial(const SHPhysicsMaterial& newMaterial) noexcept { dirty = true; material = newMaterial; } - void SHCollider::SetPositionOffset(const SHVec3& posOffset) noexcept + void SHCollisionShape::SetPositionOffset(const SHVec3& posOffset) noexcept { dirty = true; positionOffset = posOffset; @@ -281,7 +281,7 @@ namespace SHADE } } - void SHCollider::SetRotationOffset(const SHVec3& rotOffset) noexcept + void SHCollisionShape::SetRotationOffset(const SHVec3& rotOffset) noexcept { dirty = true; rotationOffset = rotOffset; @@ -291,7 +291,7 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHCollider::CopyShape(const SHShape* rhs) + void SHCollisionShape::CopyShape(const SHShape* rhs) { switch (type) { @@ -320,14 +320,14 @@ RTTR_REGISTRATION using namespace SHADE; using namespace rttr; - registration::enumeration("Collider Type") + registration::enumeration("Collider Type") ( - value("Box", SHCollider::Type::BOX), - value("Sphere", SHCollider::Type::SPHERE) + value("Box", SHCollisionShape::Type::BOX), + value("Sphere", SHCollisionShape::Type::SPHERE) // TODO(Diren): Add More Shapes ); - registration::class_("Collider") - .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset) - .property("Rotation Offset", &SHCollider::GetRotationOffset, &SHCollider::SetRotationOffset) (metadata(META::angleInRad, true)); + registration::class_("Collider") + .property("Position Offset", &SHCollisionShape::GetPositionOffset, &SHCollisionShape::SetPositionOffset) + .property("Rotation Offset", &SHCollisionShape::GetRotationOffset, &SHCollisionShape::SetRotationOffset) (metadata(META::angleInRad, true)); } \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollisionShape.h similarity index 91% rename from SHADE_Engine/src/Physics/SHCollider.h rename to SHADE_Engine/src/Physics/SHCollisionShape.h index 8cc233c4..9c8c1d41 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollisionShape.h @@ -24,7 +24,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHCollider + class SH_API SHCollisionShape { private: @@ -51,18 +51,18 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHCollider (EntityID eid, Type colliderType = Type::BOX, const SHPhysicsMaterial& physicsMaterial = SHPhysicsMaterial::DEFAULT); + SHCollisionShape (EntityID eid, Type colliderType = Type::BOX, const SHPhysicsMaterial& physicsMaterial = SHPhysicsMaterial::DEFAULT); - SHCollider (const SHCollider& rhs) noexcept; - SHCollider (SHCollider&& rhs) noexcept; - ~SHCollider () noexcept; + SHCollisionShape (const SHCollisionShape& rhs) noexcept; + SHCollisionShape (SHCollisionShape&& rhs) noexcept; + ~SHCollisionShape () noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHCollider& operator=(const SHCollider& rhs) noexcept; - SHCollider& operator=(SHCollider&& rhs) noexcept; + SHCollisionShape& operator=(const SHCollisionShape& rhs) noexcept; + SHCollisionShape& operator=(SHCollisionShape&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 37c1269e..5658f304 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -128,13 +128,13 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - int SHPhysicsObject::AddCollider(SHCollider* collider) + int SHPhysicsObject::AddCollider(SHCollisionShape* collider) { const rp3d::Transform OFFSETS{ collider->GetPositionOffset(), collider->GetRotationOffset() }; switch (collider->GetType()) { - case SHCollider::Type::BOX: + case SHCollisionShape::Type::BOX: { const auto* box = reinterpret_cast(collider->GetShape()); rp3d::BoxShape* newBox = factory->createBoxShape(box->GetHalfExtents()); @@ -142,7 +142,7 @@ namespace SHADE rp3dBody->addCollider(newBox, OFFSETS); break; } - case SHCollider::Type::SPHERE: + case SHCollisionShape::Type::SPHERE: { const auto* sphere = reinterpret_cast(collider->GetShape()); rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetRadius()); @@ -173,7 +173,7 @@ namespace SHADE void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { int index = 0; - for (auto& collider : c->colliders) + for (auto& collider : c->collisionShapes) { if (!collider.dirty) continue; @@ -188,7 +188,7 @@ namespace SHADE switch (collider.GetType()) { - case SHCollider::Type::BOX: + case SHCollisionShape::Type::BOX: { const auto* box = reinterpret_cast(collider.GetShape()); @@ -197,7 +197,7 @@ namespace SHADE break; } - case SHCollider::Type::SPHERE: + case SHCollisionShape::Type::SPHERE: { const auto* sphere = reinterpret_cast(collider.GetShape()); diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 64caacdb..09b70b11 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -69,7 +69,7 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - int AddCollider (SHCollider* collider); + int AddCollider (SHCollisionShape* collider); void RemoveCollider (int index); void SyncColliders (SHColliderComponent* c) const noexcept; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 66c28958..078a5d6a 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -348,7 +348,7 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) + void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollisionShape* collider) { auto* physicsObject = GetPhysicsObject(entityID); @@ -735,7 +735,7 @@ namespace SHADE // Add collision shapes back into the body if (colliderComponent != nullptr) { - for (auto& collider : colliderComponent->colliders) + for (auto& collider : colliderComponent->collisionShapes) physicsObject->AddCollider(&collider); } } @@ -756,7 +756,7 @@ namespace SHADE } // Add Collision Shapes - for (auto& collider : colliderComponent->colliders) + for (auto& collider : colliderComponent->collisionShapes) physicsObject->AddCollider(&collider); } } @@ -801,7 +801,7 @@ namespace SHADE rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } ); - for (auto& collider : colliderComponent->colliders) + for (auto& collider : colliderComponent->collisionShapes) physicsObject->AddCollider(&collider); } } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 0dd2754e..55575c73 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -114,7 +114,7 @@ namespace SHADE void Init () override; void Exit () override; - void AddCollisionShape (EntityID entityID, SHCollider* collider); + void AddCollisionShape (EntityID entityID, SHCollisionShape* collider); void RemoveCollisionShape (EntityID entityID, int index); void onContact (const rp3d::CollisionCallback::CallbackData& callbackData) override; diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp index 8d5bc956..14b6cc2f 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp @@ -75,14 +75,14 @@ namespace SHADE return SHComponentManager::GetComponent_s(ids[ENTITY_B]); } - const SHCollider* SHCollisionEvent::GetColliderA() const noexcept + const SHCollisionShape* SHCollisionEvent::GetColliderA() const noexcept { - return &SHComponentManager::GetComponent(ids[ENTITY_A])->GetCollider(ids[COLLIDER_A]); + return &SHComponentManager::GetComponent(ids[ENTITY_A])->GetCollisionShape(ids[COLLIDER_A]); } - const SHCollider* SHCollisionEvent::GetColliderB() const noexcept + const SHCollisionShape* SHCollisionEvent::GetColliderB() const noexcept { - return &SHComponentManager::GetComponent(ids[ENTITY_B])->GetCollider(ids[COLLIDER_B]); + return &SHComponentManager::GetComponent(ids[ENTITY_B])->GetCollisionShape(ids[COLLIDER_B]); } SHCollisionEvent::State SHCollisionEvent::GetCollisionState() const noexcept diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.h b/SHADE_Engine/src/Physics/SHPhysicsUtils.h index 57f9c6fc..753f8d3b 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsUtils.h +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.h @@ -24,7 +24,7 @@ namespace SHADE struct SHPhysicsColliderAddedEvent { EntityID entityID; - SHCollider::Type colliderType; + SHCollisionShape::Type colliderType; int colliderIndex; }; @@ -88,8 +88,8 @@ namespace SHADE [[nodiscard]] EntityID GetEntityB () const noexcept; [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyA () const noexcept; [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyB () const noexcept; - [[nodiscard]] const SHCollider* GetColliderA () const noexcept; - [[nodiscard]] const SHCollider* GetColliderB () const noexcept; + [[nodiscard]] const SHCollisionShape* GetColliderA () const noexcept; + [[nodiscard]] const SHCollisionShape* GetColliderB () const noexcept; [[nodiscard]] State GetCollisionState () const noexcept; private: diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index d4b97244..76be74ce 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -3,7 +3,7 @@ #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" -#include "Physics/SHCollider.h" +#include "Physics/SHCollisionShape.h" #include "Resource/SHResourceManager.h" #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" @@ -101,7 +101,7 @@ namespace YAML }; template<> - struct convert + struct convert { static constexpr const char* IsTrigger = "Is Trigger"; @@ -114,33 +114,33 @@ namespace YAML static constexpr const char* Density = "Density"; static constexpr const char* PositionOffset = "Position Offset"; - static Node encode(SHCollider& rhs) + static Node encode(SHCollisionShape& rhs) { Node node; node[IsTrigger] = rhs.IsTrigger(); - rttr::type const shapeRttrType = rttr::type::get(); + rttr::type const shapeRttrType = rttr::type::get(); rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); - SHCollider::Type colliderType = rhs.GetType(); + SHCollisionShape::Type colliderType = rhs.GetType(); node[Type] = enumAlign.value_to_name(colliderType).data(); switch (colliderType) { - case SHCollider::Type::BOX: + case SHCollisionShape::Type::BOX: { auto const bb = reinterpret_cast(rhs.GetShape()); node[HalfExtents] = bb->GetHalfExtents(); } break; - case SHCollider::Type::SPHERE: + case SHCollisionShape::Type::SPHERE: { auto const bs = reinterpret_cast(rhs.GetShape()); node[Radius] = bs->GetRadius(); } break; - case SHCollider::Type::CAPSULE: break; + case SHCollisionShape::Type::CAPSULE: break; default:; } @@ -151,33 +151,33 @@ namespace YAML return node; } - static bool decode(Node const& node, SHCollider& rhs) + static bool decode(Node const& node, SHCollisionShape& rhs) { if (node[IsTrigger].IsDefined()) rhs.SetIsTrigger(node[IsTrigger].as()); if (!node[Type].IsDefined()) return false; - rttr::type const shapeRttrType = rttr::type::get(); + rttr::type const shapeRttrType = rttr::type::get(); rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); bool ok; - const SHCollider::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); + const SHCollisionShape::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); if (!ok) return false; switch (colliderType) { - case SHCollider::Type::BOX: + case SHCollisionShape::Type::BOX: { if (node[HalfExtents].IsDefined()) rhs.SetBoundingBox(node[HalfExtents].as() * 2.0f); } break; - case SHCollider::Type::SPHERE: + case SHCollisionShape::Type::SPHERE: { if (node[Radius].IsDefined()) rhs.SetBoundingSphere(node[Radius].as()); } break; - case SHCollider::Type::CAPSULE: break; + case SHCollisionShape::Type::CAPSULE: break; default:; } if (node[Friction].IsDefined()) @@ -200,12 +200,12 @@ namespace YAML static Node encode(SHColliderComponent& rhs) { Node node, collidersNode; - auto const& colliders = rhs.GetColliders(); + auto const& colliders = rhs.GetCollisionShapes(); int const numColliders = static_cast(colliders.size()); for (int i = 0; i < numColliders; ++i) { - auto& collider = rhs.GetCollider(i); - Node colliderNode = convert::encode(collider); + auto& collider = rhs.GetCollisionShape(i); + Node colliderNode = convert::encode(collider); if (colliderNode.IsDefined()) collidersNode[i] = colliderNode; } @@ -219,21 +219,21 @@ namespace YAML int numColliders{}; for (auto const& colliderNode : node[Colliders]) { - rttr::type const shapeRttrType = rttr::type::get(); + rttr::type const shapeRttrType = rttr::type::get(); rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); bool ok = false; - const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); + const SHCollisionShape::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); if (!ok) return false; switch (colliderType) { - case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; - case SHCollider::Type::SPHERE: rhs.AddBoundingSphere(); break; - case SHCollider::Type::CAPSULE: break; + case SHCollisionShape::Type::BOX: rhs.AddBoundingBox(); break; + case SHCollisionShape::Type::SPHERE: rhs.AddBoundingSphere(); break; + case SHCollisionShape::Type::CAPSULE: break; default:; } - YAML::convert::decode(colliderNode, rhs.GetCollider(numColliders++)); + YAML::convert::decode(colliderNode, rhs.GetCollisionShape(numColliders++)); } } return true; diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx index f2119b43..dc5d27af 100644 --- a/SHADE_Managed/src/Components/Collider.cxx +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -150,7 +150,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ int Collider::CollisionShapeCount::get() { - return static_cast(GetNativeComponent()->GetColliders().size()); + return static_cast(GetNativeComponent()->GetCollisionShapes().size()); } /*---------------------------------------------------------------------------------*/ @@ -230,18 +230,18 @@ namespace SHADE // Populate the list int i = 0; - for (const auto& collider : GetNativeComponent()->GetColliders()) + for (const auto& collider : GetNativeComponent()->GetCollisionShapes()) { CollisionShape^ bound = nullptr; switch (collider.GetType()) { - case SHCollider::Type::BOX: + case SHCollisionShape::Type::BOX: bound = gcnew BoxCollider(i, Owner.GetEntity()); break; - case SHCollider::Type::SPHERE: + case SHCollisionShape::Type::SPHERE: bound = gcnew SphereCollider(i, Owner.GetEntity()); break; - case SHCollider::Type::CAPSULE: + case SHCollisionShape::Type::CAPSULE: // TODO break; default: diff --git a/SHADE_Managed/src/Components/Collider.h++ b/SHADE_Managed/src/Components/Collider.h++ index 1f8b43eb..6e165619 100644 --- a/SHADE_Managed/src/Components/Collider.h++ +++ b/SHADE_Managed/src/Components/Collider.h++ @@ -27,11 +27,11 @@ namespace SHADE try { - auto& bounds = collider->GetCollider(arrayIndex); - if (bounds.GetType() != SHCollider::Type::BOX) + auto& shape = collider->GetCollisionShape(arrayIndex); + if (shape.GetType() != SHCollisionShape::Type::BOX) throw gcnew System::InvalidOperationException("Attempted to retrieve invalid ColliderBound."); - return reinterpret_cast(bounds); + return reinterpret_cast(shape); } catch (std::invalid_argument&) { From d302d7e07d212b9a7eec08a75b0e7bfd80f3d9b8 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 19:32:12 +0800 Subject: [PATCH 692/793] Added labels for more buffers, images, imageviews, frames, semaphores and more --- .../src/Graphics/Buffers/SHVkBuffer.cpp | 7 +++++- .../Graphics/Devices/SHVkLogicalDevice.cpp | 4 ++-- .../src/Graphics/Images/SHVkImage.cpp | 16 +++++++++---- SHADE_Engine/src/Graphics/Images/SHVkImage.h | 8 +++++-- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 10 +++++++- .../GlobalData/SHGraphicsGlobalData.cpp | 16 ++++++------- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 23 +++++++++++++------ .../MiddleEnd/Interface/SHMousePickSystem.cpp | 2 +- .../MiddleEnd/Interface/SHRenderer.cpp | 8 ++++++- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 12 ++++++---- .../MiddleEnd/PerFrame/SHPerFrameData.cpp | 7 ++++-- .../MiddleEnd/PerFrame/SHPerFrameData.h | 2 +- .../MiddleEnd/PerFrame/SHRenderContext.cpp | 8 ++++++- .../MiddleEnd/Textures/SHTextureLibrary.cpp | 8 ++++++- .../Graphics/RenderGraph/SHRenderGraph.cpp | 3 ++- .../RenderGraph/SHRenderGraphNode.cpp | 5 ++-- .../Graphics/RenderGraph/SHRenderGraphNode.h | 2 +- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 11 ++++++++- .../RenderGraph/SHRenderGraphNodeCompute.h | 5 +++- .../RenderGraph/SHRenderGraphResource.cpp | 9 ++++++-- .../src/Graphics/RenderGraph/SHSubpass.cpp | 5 ++++ TempScriptsFolder/RaccoonSpin.cs | 5 ++++ 22 files changed, 132 insertions(+), 44 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index 803c53be..36108628 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -217,6 +217,7 @@ namespace SHADE &bufferInfo.operator VkBufferCreateInfo & (), // TODO: Verify if this works (can use RenderDoc to check buffer variables?) &allocCreateInfo, &tempBuffer, &stagingAlloc, &allocInfo); + SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eDeviceMemory, allocInfo.deviceMemory, "[Memory] Staging - " + name); // then assign it to the hpp version stagingBuffer = tempBuffer; @@ -252,7 +253,11 @@ namespace SHADE auto result = vmaCreateBuffer(vmaAllocator, &bufferCreateInfo.operator VkBufferCreateInfo & (), &allocCreateInfo, - &tempBuffer, &alloc, &allocInfo); + &tempBuffer, &alloc, &allocInfo); +#ifdef _DEBUG + if (!name.empty()) + SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eDeviceMemory, allocInfo.deviceMemory, "[Memory] " + name); +#endif if (result != VK_SUCCESS) SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan buffer. "); diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index 20332f1d..808ce750 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -456,12 +456,12 @@ namespace SHADE /***************************************************************************/ Handle SHVkLogicalDevice::CreateImage(uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) const noexcept { - return SHVkInstance::GetResourceManager().Create(&vmaAllocator, w, h, levels, format, usage, create); + return SHVkInstance::GetResourceManager().Create(GetHandle(), &vmaAllocator, w, h, levels, format, usage, create); } Handle SHVkLogicalDevice::CreateImage(SHImageCreateParams const& imageDetails, unsigned char* data, uint32_t dataSize, std::span inMipOffsets, VmaMemoryUsage memUsage, VmaAllocationCreateFlags allocFlags) noexcept { - return SHVkInstance::GetResourceManager().Create(&vmaAllocator, imageDetails, data, dataSize, inMipOffsets, memUsage, allocFlags); + return SHVkInstance::GetResourceManager().Create(GetHandle(), &vmaAllocator, imageDetails, data, dataSize, inMipOffsets, memUsage, allocFlags); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp index 00cc31bf..33bed1b5 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.cpp @@ -61,6 +61,7 @@ namespace SHADE &bufferInfo.operator VkBufferCreateInfo & (), // TODO: Verify if this works (can use renderdoc to check buffer variables?) &allocCreateInfo, &tempBuffer, &stagingAlloc, &allocInfo); + SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eDeviceMemory, allocInfo.deviceMemory, "[Memory] Staging Buffer for Image"); // then assign it to the hpp version stagingBuffer = tempBuffer; @@ -107,6 +108,8 @@ namespace SHADE VkImage tempImage; auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); vkImage = tempImage; + //SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eImage, vkImage, "[Image] "); + SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eDeviceMemory, allocInfo.deviceMemory, "[Device Memory] Image Memory"); if (result != VK_SUCCESS) SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); @@ -115,7 +118,8 @@ namespace SHADE } SHVkImage::SHVkImage( - VmaAllocator const* allocator, + Handle logicalDeviceHdl, + VmaAllocator const* allocator, SHImageCreateParams const& imageDetails, const unsigned char* data, uint32_t dataSize, @@ -137,6 +141,7 @@ namespace SHADE , boundToCoherent{false} , randomAccessOptimized {false} , mappedPtr{nullptr} + , device { logicalDeviceHdl } { usageFlags = imageDetails.usageFlags; createFlags = imageDetails.createFlags; @@ -175,7 +180,9 @@ namespace SHADE VmaAllocationInfo allocInfo{}; VkImage tempImage; - auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo&(), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + auto result = vmaCreateImage(*vmaAllocator, &imageCreateInfo.operator VkImageCreateInfo & (), &allocCreateInfo, &tempImage, &alloc, &allocInfo); + //SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eImage, vkImage, "[Image] "); + SET_VK_OBJ_NAME_VK(device, vk::ObjectType::eDeviceMemory, allocInfo.deviceMemory, "[Device Memory] Image Memory"); if (result != VK_SUCCESS) SHVulkanDebugUtil::ReportVkError(vk::Result(result), "Failed to create vulkan image. "); @@ -220,7 +227,7 @@ namespace SHADE //} } - SHVkImage::SHVkImage(VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept + SHVkImage::SHVkImage(Handle logicalDeviceHdl, VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept : width {w} , height{h} , depth {1} @@ -230,11 +237,12 @@ namespace SHADE , usageFlags{usage} , createFlags {create} , vmaAllocator {allocator} + , device { logicalDeviceHdl } { CreateFramebufferImage(); } - Handle SHVkImage::CreateImageView(Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept + Handle SHVkImage::CreateImageView(Handle inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept { return SHVkInstance::GetResourceManager().Create(inLogicalDeviceHdl, parent, createParams); } diff --git a/SHADE_Engine/src/Graphics/Images/SHVkImage.h b/SHADE_Engine/src/Graphics/Images/SHVkImage.h index 4fb16017..ba459def 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkImage.h +++ b/SHADE_Engine/src/Graphics/Images/SHVkImage.h @@ -104,6 +104,9 @@ namespace SHADE //! Mipmap offsets for initializing the vk::BufferImageCopy during transfer to GPU resource std::span mipOffsets; + //! Handle to the device that creates these images + Handle device; + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ @@ -117,6 +120,7 @@ namespace SHADE SHVkImage(void) noexcept = default; SHVkImage( + Handle logicalDeviceHdl, VmaAllocator const* allocator, SHImageCreateParams const& imageDetails, const unsigned char* data, @@ -126,7 +130,7 @@ namespace SHADE VmaAllocationCreateFlags allocFlags ) noexcept; - SHVkImage(VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept; + SHVkImage(Handle logicalDeviceHdl, VmaAllocator const* allocator, uint32_t w, uint32_t h, uint8_t levels, vk::Format format, vk::ImageUsageFlags usage, vk::ImageCreateFlags create) noexcept; SHVkImage(SHVkImage&& rhs) noexcept = default; SHVkImage& operator=(SHVkImage && rhs) noexcept = default; @@ -134,7 +138,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - Handle CreateImageView (Handle const& inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; + Handle CreateImageView (Handle inLogicalDeviceHdl, Handle const& parent, SHImageViewDetails const& createParams) const noexcept; void TransferToDeviceResource (Handle cmdBufferHdl) noexcept; void PrepareImageTransitionInfo (vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageMemoryBarrier& barrier) noexcept; void HandleResizeFramebufferImage(uint32_t newWidth, uint32_t newHeight) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 3f9b6fa2..1829096f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -465,7 +465,8 @@ namespace SHADE SHVkUtil::EnsureBufferAndCopyHostVisibleData ( device, matPropsBuffer[frameIndex], matPropsData.get(), static_cast(matPropsDataSize), - vk::BufferUsageFlagBits::eStorageBuffer + vk::BufferUsageFlagBits::eStorageBuffer, + "Batch Material Data" ); if (!matPropsDescSet[frameIndex]) @@ -475,6 +476,13 @@ namespace SHADE { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE] }, { 0 } ); +#ifdef _DEBUG + const auto& DESC_SETS = matPropsDescSet[frameIndex]->GetVkHandle(); + for (auto descSet : DESC_SETS) + { + SET_VK_OBJ_NAME(device, vk::ObjectType::eDescriptorSet, descSet, "[Descriptor Set] Batch Material Data"); + } +#endif } std::array, 1> bufferList = { matPropsBuffer[frameIndex] }; matPropsDescSet[frameIndex]->ModifyWriteDescBuffer diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 155097a5..53adf2fe 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -19,7 +19,7 @@ namespace SHADE void SHGraphicsGlobalData::InitHighFrequencyGlobalData(void) noexcept { - } + } /*-----------------------------------------------------------------------------------*/ /* Function Definitions */ @@ -44,7 +44,8 @@ namespace SHADE }; // For global data (generic data and textures) - Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS,{ genericDataBinding, texturesBinding }); + Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, { genericDataBinding, texturesBinding }); + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, staticGlobalLayout->GetVkHandle(), "[Descriptor Set Layout] Static Globals"); std::vector lightBindings{}; @@ -70,11 +71,11 @@ namespace SHADE }); } - // For Dynamic global data (lights) Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, lightBindings); + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, dynamicGlobalLayout->GetVkHandle(), "[Descriptor Set Layout] Dynamic Globals"); - + // For High frequency global data (camera) SHVkDescriptorSetLayout::Binding cameraDataBinding { .Type = vk::DescriptorType::eUniformBufferDynamic, @@ -82,10 +83,10 @@ namespace SHADE .BindPoint = SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, .DescriptorCount = 1, }; - - // For High frequency global data (camera) Handle cameraDataGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, { cameraDataBinding }); + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, cameraDataGlobalLayout->GetVkHandle(), "[Descriptor Set Layout] High Frequency Globals"); + // For per instance data (transforms, materials, etc.) SHVkDescriptorSetLayout::Binding materialDataBinding { .Type = vk::DescriptorType::eStorageBufferDynamic, @@ -93,9 +94,8 @@ namespace SHADE .BindPoint = SHGraphicsConstants::DescriptorSetBindings::BATCHED_PER_INST_DATA, .DescriptorCount = 1, }; - - // For High frequency global data (camera) Handle materialDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::PER_INSTANCE, { materialDataBinding }); + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, materialDataPerInstanceLayout->GetVkHandle(), "[Descriptor Set Layout] Material Globals"); globalDescSetLayouts.push_back(staticGlobalLayout); globalDescSetLayouts.push_back(dynamicGlobalLayout); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 5b2fea7c..27234781 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -213,6 +213,7 @@ namespace SHADE ssaoStorage = resourceManager.Create(); ssaoTransferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + SET_VK_OBJ_NAME(device, vk::ObjectType::eCommandBuffer, ssaoTransferCmdBuffer->GetVkCommandBuffer(), "[Command Buffer] SSAO Pass (Graphics)"); ssaoTransferCmdBuffer->BeginRecording(); ssaoStorage->Init(device, ssaoTransferCmdBuffer); @@ -234,7 +235,7 @@ namespace SHADE ssaoStorage->PrepareRotationVectorsVkData(device); - Handle ssaoPass = gBufferNode->AddNodeCompute(ssaoShader, {"Position", "Normals", "SSAO"}); + Handle ssaoPass = gBufferNode->AddNodeCompute("SSAO", ssaoShader, {"Position", "Normals", "SSAO"}); auto ssaoDataBuffer = ssaoStorage->GetBuffer(); ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BUFFER_BINDING, { &ssaoDataBuffer, 1 }, 0, ssaoStorage->GetBuffer()->GetSizeStored()); auto viewSamplerLayout = ssaoStorage->GetViewSamplerLayout(); @@ -242,12 +243,12 @@ namespace SHADE ssaoPass->ModifyWriteDescImageComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_IMAGE_BINDING, {&viewSamplerLayout, 1}); - Handle ssaoBlurPass = gBufferNode->AddNodeCompute(ssaoBlurShader, { "SSAO", "SSAO Blur"}); + Handle ssaoBlurPass = gBufferNode->AddNodeCompute("SSAO Blur Step", ssaoBlurShader, {"SSAO", "SSAO Blur"}); /*-----------------------------------------------------------------------*/ /* DEFERRED COMPOSITE SUBPASS INIT */ /*-----------------------------------------------------------------------*/ - gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene" }); + gBufferNode->AddNodeCompute("Deferred Composite", deferredCompositeShader, {"Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene"}); // Dummy Node auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Debug Draw" }); // no predecessors @@ -271,7 +272,11 @@ namespace SHADE // Create debug draw pipeline debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, debugDrawPipeline->GetVkPipeline(), "[Pipeline] Debug Draw"); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, debugDrawPipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline] Debug Draw Pipeline Layout"); debugDrawDepthPipeline = createDebugDrawPipeline(debugDrawNodeDepth->GetRenderpass(), debugDrawDepthSubpass); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, debugDrawDepthPipeline->GetVkPipeline(), "[Pipeline] Debug Draw with Depth Test"); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, debugDrawDepthPipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline] Debug Draw with Depth Test Pipeline Layout"); } void SHGraphicsSystem::InitMiddleEnd(void) noexcept @@ -677,6 +682,8 @@ namespace SHADE auto renderGraphNode = subpass->GetParentNode(); auto pipeline = renderGraphNode->GetOrCreatePipeline(std::make_pair(vertShader, fragShader), subpass); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, pipeline->GetVkPipeline(), "[Pipeline] Custom Pipeline"); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, pipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline] Custom Pipeline Layout"); mat->SetPipeline(pipeline); @@ -723,14 +730,15 @@ namespace SHADE void SHGraphicsSystem::BuildMeshBuffers() { - transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - device->WaitIdle(); + transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + SET_VK_OBJ_NAME(device, vk::ObjectType::eCommandBuffer, transferCmdBuffer->GetVkCommandBuffer(), "[Command Buffer] Mesh Buffer Building (Transfer)"); + device->WaitIdle(); transferCmdBuffer->BeginRecording(); meshLibrary.BuildBuffers(device, transferCmdBuffer); transferCmdBuffer->EndRecording(); graphicsQueue->SubmitCommandBuffer({ transferCmdBuffer }); - device->WaitIdle(); - transferCmdBuffer.Free(); transferCmdBuffer = {}; + device->WaitIdle(); + transferCmdBuffer.Free(); transferCmdBuffer = {}; } Handle SHGraphicsSystem::GetMeshPrimitive(PrimitiveType type) const noexcept @@ -768,6 +776,7 @@ namespace SHADE void SHGraphicsSystem::BuildTextures() { graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + SET_VK_OBJ_NAME(device, vk::ObjectType::eCommandBuffer, graphicsTexCmdBuffer->GetVkCommandBuffer(), "[Command Buffer] Texture Building (Graphics)"); device->WaitIdle(); texLibrary.BuildTextures ( diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index 46126ae1..86d85c16 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -76,7 +76,7 @@ namespace SHADE uint32_t bufferSize = entityIDAttachment->GetWidth() * entityIDAttachment->GetHeight() * SHVkUtil::GetBytesPerPixelFromFormat(entityIDAttachment->GetResourceFormat()); // Create the buffer - imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + imageDataDstBuffer = logicalDevice->CreateBuffer(bufferSize, nullptr, bufferSize, vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT, "Mouse Pick Image Data Destination"); } void SHMousePickSystem::SetViewportMousePos(SHVec2 vpMousePos) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index d0deb30c..63d374eb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -39,9 +39,15 @@ namespace SHADE cameraDescriptorSet = descriptorPool->Allocate({ cameraDescLayout }, { 1 }); +#ifdef _DEBUG + const auto& CAM_DESC_SETS = cameraDescriptorSet->GetVkHandle(); + for (int i = 0; i < static_cast(CAM_DESC_SETS.size()); ++i) + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSet, CAM_DESC_SETS[i], "[Descriptor Set] Camera Data Frame #" + std::to_string(i)); +#endif + cameraDataAlignedSize = logicalDevice->PadUBOSize(sizeof(SHShaderCameraData)); - cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + cameraBuffer = logicalDevice->CreateBuffer(cameraDataAlignedSize * numFrames, nullptr, cameraDataAlignedSize * numFrames, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT, "Camera Data"); std::array cameraBufferArray{cameraBuffer}; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 485f859f..02bd8f1f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -134,7 +134,7 @@ namespace SHADE lightDataTotalAlignedSize = logicalDevice->PadSSBOSize(lightDataAlignedSize * maxLights); // We want to initialize 3 times the amount of data required. - dataBuffer = logicalDevice->CreateBuffer(lightDataTotalAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightDataTotalAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + dataBuffer = logicalDevice->CreateBuffer(lightDataTotalAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightDataTotalAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT, "Light Data"); } else { @@ -385,8 +385,12 @@ namespace SHADE std::fill (variableSizes.begin(), variableSizes.end(), 1); // Create the descriptor set - lightingDataDescSet = descPool->Allocate({SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS]}, variableSizes); - + lightingDataDescSet = descPool->Allocate({ SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS] }, variableSizes); +#ifdef _DEBUG + const auto& CAM_DESC_SETS = lightingDataDescSet->GetVkHandle(); + for (int i = 0; i < static_cast(CAM_DESC_SETS.size()); ++i) + SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSet, CAM_DESC_SETS[i], "[Descriptor Set] Light Data Frame #" + std::to_string(i)); +#endif for (uint32_t i = 0; i < NUM_LIGHT_TYPES; ++i) { @@ -402,7 +406,7 @@ namespace SHADE lightCountsAlignedSize = logicalDevice->PadUBOSize(lightCountsAlignedSize); // Create the GPU buffer to hold light count - lightCountsBuffer = logicalDevice->CreateBuffer(lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + lightCountsBuffer = logicalDevice->CreateBuffer(lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT, "Light Count Data"); lightingDataDescSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::LIGHTING_COUNT, {&lightCountsBuffer, 1}, 0, sizeof (uint32_t) * NUM_LIGHT_TYPES); lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::LIGHTING_COUNT); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.cpp index bbbdd015..96db1ad1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.cpp @@ -26,7 +26,7 @@ namespace SHADE */ /***************************************************************************/ - void SHPerFrameData::Recreate(Handle const& logicalDeviceHdl) noexcept + void SHPerFrameData::Recreate(Handle logicalDeviceHdl) noexcept { // Swapchain recreation means the images are just relinked to SHVkImages. Handles will remain the same. There is no need for this line. //swapchainImageHdl = params.swapchainHdl->GetSwapchainImage(frameIndex); @@ -44,14 +44,17 @@ namespace SHADE // Create image views for the swapchain swapchainImageViewHdl = swapchainImageHdl->CreateImageView(logicalDeviceHdl, swapchainImageHdl, viewDetails); + SET_VK_OBJ_NAME(logicalDeviceHdl, vk::ObjectType::eImageView, swapchainImageViewHdl->GetImageView(), "[Image View] Swap Chain"); // Create a fence fenceHdl = logicalDeviceHdl->CreateFence(); + SET_VK_OBJ_NAME(logicalDeviceHdl, vk::ObjectType::eFence, fenceHdl->GetVkFence(), "[Fence] Swap Chain"); // scope makes it easier to navigate semImgAvailableHdl = logicalDeviceHdl->SHVkLogicalDevice::CreateSemaphore(); + SET_VK_OBJ_NAME(logicalDeviceHdl, vk::ObjectType::eSemaphore, semImgAvailableHdl->GetVkSem(), "[Semaphore] Swap Chain Image Available"); semRenderFinishHdl = logicalDeviceHdl->SHVkLogicalDevice::CreateSemaphore(); - + SET_VK_OBJ_NAME(logicalDeviceHdl, vk::ObjectType::eSemaphore, semRenderFinishHdl->GetVkSem(), "[Semaphore] Swap Chain Render Finish"); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.h b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.h index 5ac38503..d19764c2 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHPerFrameData.h @@ -63,7 +63,7 @@ namespace SHADE /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ // These are made into functions (instead of ctor and dtor) because we want to call these functions again when we resize the window - void Recreate (Handle const& logicalDeviceHdl) noexcept; + void Recreate (Handle logicalDeviceHdl) noexcept; void Destroy (void); friend class SHRenderContext; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp index 45103819..1d24d6f7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PerFrame/SHRenderContext.cpp @@ -50,7 +50,13 @@ namespace SHADE for (uint32_t j = 0; j < params.numThreads; ++j) { - frameData[i].cmdPoolHdls.push_back(logicalDeviceHdl->CreateCommandPool(params.cmdPoolQueueFamilyType, params.cmdPoolResetMode, params.cmdBufferTransient)); + auto cmdPool = logicalDeviceHdl->CreateCommandPool(params.cmdPoolQueueFamilyType, params.cmdPoolResetMode, params.cmdBufferTransient); + SET_VK_OBJ_NAME + ( + logicalDeviceHdl, vk::ObjectType::eCommandPool, cmdPool->GetVkCommandPool(), + "[Command Pool] Render Context #" + std::to_string(i) + " Pool #" + std::to_string(j) + ); + frameData[i].cmdPoolHdls.push_back(cmdPool); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp index 9c330b9f..b92ccddf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Textures/SHTextureLibrary.cpp @@ -79,6 +79,7 @@ namespace SHADE { job.Image = resourceManager.Create ( + device, &device->GetVMAAllocator(), SHImageCreateParams { @@ -143,6 +144,7 @@ namespace SHADE .layerCount = 1 }; job.TextureHandle->ImageView = job.Image->CreateImageView(device, job.Image, DETAILS); + SET_VK_OBJ_NAME(device, vk::ObjectType::eImageView, job.TextureHandle->ImageView->GetImageView(), "[Image View] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); } // Add Textures @@ -153,7 +155,7 @@ namespace SHADE job.TextureHandle->TextureArrayIndex = static_cast(texOrder.size()) - 1U; SET_VK_OBJ_NAME(device, vk::ObjectType::eImage, job.Image->GetVkImage(), "[Image] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); - SET_VK_OBJ_NAME(device, vk::ObjectType::eImageView, job.TextureHandle->ImageView->GetImageView(), "[ImageView] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); + SET_VK_OBJ_NAME(device, vk::ObjectType::eImageView, job.TextureHandle->ImageView->GetImageView(), "[Image View] Texture Library Texture #" + std::to_string(job.TextureHandle->TextureArrayIndex)); } addJobs.clear(); @@ -169,6 +171,10 @@ namespace SHADE { SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS] }, { static_cast(texOrder.size()) } ); +#ifdef _DEBUG + for (auto set : texDescriptors->GetVkHandle()) + SET_VK_OBJ_NAME(device, vk::ObjectType::eDescriptorSet, set, "[Descriptor Set] Static Globals"); +#endif texDescriptors->ModifyWriteDescImage ( SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS, diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 9c4e0d65..500bcf04 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -59,7 +59,8 @@ namespace SHADE format = renderGraphStorage->swapchain->GetSurfaceFormatKHR().format; } - renderGraphStorage->graphResources->try_emplace(resourceName, resourceManager->Create(renderGraphStorage, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags)); + auto resource = resourceManager->Create(renderGraphStorage, resourceName, typeFlags, format, w, h, levels, usageFlags, createFlags); + renderGraphStorage->graphResources->try_emplace(resourceName, resource); } /***************************************************************************/ diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index 9aa42c0a..b3b5b58b 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -58,6 +58,7 @@ namespace SHADE framebuffers[i] = graphStorage->logicalDevice->CreateFramebuffer(renderpass, imageViews, fbWidth, fbHeight); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eFramebuffer, framebuffers[i]->GetVkFramebuffer(), "[Framebuffer] " + name + std::to_string(i)); } } @@ -266,7 +267,7 @@ namespace SHADE return subpass; } - Handle SHRenderGraphNode::AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings, float numWorkGroupScale/* = 1.0f*/) noexcept + Handle SHRenderGraphNode::AddNodeCompute(std::string nodeName, Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings, float numWorkGroupScale/* = 1.0f*/) noexcept { // Look for the required resources in the graph std::vector> nodeComputeResources{}; @@ -279,7 +280,7 @@ namespace SHADE } // Create the subpass compute with the resources - auto nodeCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, std::move(nodeComputeResources), std::move (dynamicBufferBindings), nodeComputes.empty()); + auto nodeCompute = graphStorage->resourceManager->Create(std::move(nodeName), graphStorage, computeShaderModule, std::move(nodeComputeResources), std::move (dynamicBufferBindings), nodeComputes.empty()); nodeComputes.push_back(nodeCompute); return nodeCompute; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 33868f5e..4fdac45c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -103,7 +103,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle AddSubpass(std::string subpassName) noexcept; - Handle AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings = {}, float numWorkGroupScale = 1.0f) noexcept; + Handle AddNodeCompute(std::string nodeName, Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings = {}, float numWorkGroupScale = 1.0f) noexcept; void AddDummySubpassIfNeeded (void) noexcept; // TODO: RemoveSubpass() diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index a86acbc7..8cdff55a 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -13,7 +13,7 @@ namespace SHADE { - SHRenderGraphNodeCompute::SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale/* = 1.0f*/) noexcept + SHRenderGraphNodeCompute::SHRenderGraphNodeCompute(std::string nodeName, Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale/* = 1.0f*/) noexcept : computePipeline{} , pipelineLayout{} , resources{} @@ -22,6 +22,7 @@ namespace SHADE , followingEndRenderpass {followingEndRP} , numWorkGroupScale {std::clamp(inNumWorkGroupScale, 0.0f, 1.0f)} , computeResource{} + , name { std::move(nodeName) } { SHPipelineLayoutParams pipelineLayoutParams { @@ -50,6 +51,10 @@ namespace SHADE for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { graphResourceDescSets[i] = graphStorage->descriptorPool->Allocate({graphResourceLayout}, { 1 }); +#ifdef _DEBUG + for (auto set : graphResourceDescSets[i]->GetVkHandle()) + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eDescriptorSet, set, "[Descriptor Set] " + name + " #" + std::to_string(i)); +#endif } @@ -61,6 +66,10 @@ namespace SHADE computeResource = graphStorage->resourceManager->Create(); auto computeResourceLayout = layouts[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE]; computeResource->descSet = graphStorage->descriptorPool->Allocate({ computeResourceLayout }, { 1 }); +#ifdef _DEBUG + for (auto set : computeResource->descSet->GetVkHandle()) + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eDescriptorSet, set, "[Descriptor Set] " + name + " Resources"); +#endif // Allocate for descriptor offsets for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h index 81157dc2..580f018c 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -65,8 +65,11 @@ namespace SHADE std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> memoryBarriers; + //! Name of this node + std::string name; + public: - SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale = 1.0f) noexcept; + SHRenderGraphNodeCompute(std::string nodeName, Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale = 1.0f) noexcept; void Execute (Handle cmdBuffer, uint32_t frameIndex) noexcept; void HandleResize (void) noexcept; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp index 502e09b2..4d4099c6 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphResource.cpp @@ -82,6 +82,7 @@ namespace SHADE { images[i] = graphStorage->swapchain->GetSwapchainImage(i); imageViews[i] = images[i]->CreateImageView(graphStorage->logicalDevice, images[i], viewDetails); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eImageView, imageViews[i]->GetImageView(), "[Image View] " + resourceName + " #" + std::to_string(i)); } } else // if swapchain image resource @@ -129,7 +130,9 @@ namespace SHADE } // The resource is not a swapchain image, just use the first slot of the vector - images.push_back(graphStorage->logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags)); + auto image = graphStorage->logicalDevice->CreateImage(width, height, mipLevels, resourceFormat, usage, createFlags); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eImage, image->GetVkImage(), "[Image] " + resourceName); + images.push_back(image); // prepare image view details SHImageViewDetails viewDetails @@ -144,7 +147,9 @@ namespace SHADE }; // just 1 image view created - imageViews.push_back(images[0]->CreateImageView(graphStorage->logicalDevice, images[0], viewDetails)); + auto imageView = images[0]->CreateImageView(graphStorage->logicalDevice, images[0], viewDetails); + imageViews.push_back(imageView); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eImageView, imageView->GetImageView(), "[Image View] " + resourceName); } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp index 23dbbde3..2ed84d92 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHSubpass.cpp @@ -302,6 +302,11 @@ namespace SHADE group.Free(); group = graphStorage->descriptorPool->Allocate({ inputDescriptorLayout }, variableCounts); +#ifdef _DEBUG + const auto& GROUP_HANDLES = group->GetVkHandle(); + for (int i = 0; i < static_cast(GROUP_HANDLES.size()); ++i) + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::eDescriptorSet, GROUP_HANDLES[i], "[Descriptor Set] " + name + " #" + std::to_string(i)); +#endif uint32_t i = 0; for (auto& binding : bindings) diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs index c5420ffb..06b3c163 100644 --- a/TempScriptsFolder/RaccoonSpin.cs +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -14,8 +14,13 @@ public class RaccoonSpin : Script private Transform Transform; public RaccoonSpin(GameObject gameObj) : base(gameObj) { } + protected override void awake() { + testEvent = new CallbackEvent(); + Action action = (x) => Debug.Log($"{x}"); + testEvent.RegisterAction(action); + Transform = GetComponent(); if (Transform == null) { From 0b813d769ad1cad84796095c5eeff55da2a50a9c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 19:41:19 +0800 Subject: [PATCH 693/793] Added WIP Compute Pipelines labeling --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 6 +++--- .../src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 27234781..3c9ddfaa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -235,7 +235,7 @@ namespace SHADE ssaoStorage->PrepareRotationVectorsVkData(device); - Handle ssaoPass = gBufferNode->AddNodeCompute("SSAO", ssaoShader, {"Position", "Normals", "SSAO"}); + Handle ssaoPass = gBufferNode->AddNodeCompute("SSAO", ssaoShader, { "Position", "Normals", "SSAO" }); auto ssaoDataBuffer = ssaoStorage->GetBuffer(); ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BUFFER_BINDING, { &ssaoDataBuffer, 1 }, 0, ssaoStorage->GetBuffer()->GetSizeStored()); auto viewSamplerLayout = ssaoStorage->GetViewSamplerLayout(); @@ -273,9 +273,9 @@ namespace SHADE // Create debug draw pipeline debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass); SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, debugDrawPipeline->GetVkPipeline(), "[Pipeline] Debug Draw"); - SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, debugDrawPipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline] Debug Draw Pipeline Layout"); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, debugDrawPipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline Layout] Debug Draw Pipeline Layout"); debugDrawDepthPipeline = createDebugDrawPipeline(debugDrawNodeDepth->GetRenderpass(), debugDrawDepthSubpass); - SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, debugDrawDepthPipeline->GetVkPipeline(), "[Pipeline] Debug Draw with Depth Test"); + SET_VK_OBJ_NAME(device, vk::ObjectType::ePipeline, debugDrawDepthPipeline->GetVkPipeline(), "[Pipeline Layout] Debug Draw with Depth Test"); SET_VK_OBJ_NAME(device, vk::ObjectType::ePipelineLayout, debugDrawDepthPipeline->GetPipelineLayout()->GetVkPipelineLayout(), "[Pipeline] Debug Draw with Depth Test Pipeline Layout"); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index 8cdff55a..b567c55d 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -32,13 +32,15 @@ namespace SHADE }; // Create pipeline layout from parameters - pipelineLayout = graphStorage->logicalDevice->CreatePipelineLayout (pipelineLayoutParams); + pipelineLayout = graphStorage->logicalDevice->CreatePipelineLayout(pipelineLayoutParams); // Create the compute pipeline computePipeline = graphStorage->logicalDevice->CreateComputePipeline(pipelineLayout); // and construct it computePipeline->ConstructPipeline(); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipelineLayout, pipelineLayout->GetVkPipelineLayout(), "[Compute Pipeline Layout] " + nodeName); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipeline, computePipeline->GetVkPipeline(), "[Compute Pipeline] " + nodeName); // save the resources resources = std::move (subpassComputeResources); From ed3131143d5f30c0da16b9180d777ab09c498c87 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 7 Nov 2022 23:51:48 +0800 Subject: [PATCH 694/793] Added debug labels for samplers and fixed issue with compute pipeline names not being labelled correctly --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 12 ++++++++---- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 3c9ddfaa..15c8ec5d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -758,14 +758,18 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Handle SHGraphicsSystem::AddTexture(const SHTextureAsset& texAsset) { - auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(texAsset.mipOffsets.size()) }); - return texLibrary.Add(texAsset, sampler); + const int MIPS = texAsset.mipOffsets.size(); + auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams { .maxLod = static_cast(MIPS) }); + SET_VK_OBJ_NAME(device, vk::ObjectType::eSampler, sampler->GetVkSampler(), "[Sampler] Mips " + std::to_string(MIPS)); + return texLibrary.Add(texAsset, sampler); } SHADE::Handle SHGraphicsSystem::AddTexture(uint32_t pixelCount, const SHTexture::PixelChannel* const pixelData, uint32_t width, uint32_t height, SHTexture::TextureFormat format, std::vector mipOffsets) { - auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams{ .maxLod = static_cast(mipOffsets.size()) }); - return texLibrary.Add(pixelCount, pixelData, width, height, format, mipOffsets, sampler); + const int MIPS = mipOffsets.size(); + auto sampler = samplerCache.GetSampler(device, SHVkSamplerParams{ .maxLod = static_cast(MIPS) }); + SET_VK_OBJ_NAME(device, vk::ObjectType::eSampler, sampler->GetVkSampler(), "[Sampler] Mips " + std::to_string(MIPS)); + return texLibrary.Add(pixelCount, pixelData, width, height, format, mipOffsets, sampler); } void SHGraphicsSystem::RemoveTexture(Handle tex) diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index b567c55d..f4a103f7 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -39,8 +39,8 @@ namespace SHADE // and construct it computePipeline->ConstructPipeline(); - SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipelineLayout, pipelineLayout->GetVkPipelineLayout(), "[Compute Pipeline Layout] " + nodeName); - SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipeline, computePipeline->GetVkPipeline(), "[Compute Pipeline] " + nodeName); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipelineLayout, pipelineLayout->GetVkPipelineLayout(), "[Compute Pipeline Layout] " + name); + SET_VK_OBJ_NAME(graphStorage->logicalDevice, vk::ObjectType::ePipeline, computePipeline->GetVkPipeline(), "[Compute Pipeline] " + name); // save the resources resources = std::move (subpassComputeResources); From 8fbd32a1449b64038dc1f6f43f7cc9557092f755 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 8 Nov 2022 00:46:09 +0800 Subject: [PATCH 695/793] Added Relative Sizes to Shapes --- Assets/Scenes/M2Scene.shade | 59 ++++++++----------- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- .../Inspector/SHEditorComponentView.hpp | 14 +---- .../src/Math/Geometry/SHBoundingBox.cpp | 38 ++++++++---- .../src/Math/Geometry/SHBoundingBox.h | 29 +++++---- .../src/Math/Geometry/SHBoundingSphere.cpp | 40 +++++++++---- .../src/Math/Geometry/SHBoundingSphere.h | 17 ++++-- .../Components/SHColliderComponent.cpp | 52 ++++++++++++++-- .../Physics/Components/SHColliderComponent.h | 14 +++-- SHADE_Engine/src/Physics/SHCollisionShape.cpp | 57 +++++++----------- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 8 +-- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 13 ++-- .../src/Serialization/SHYAMLConverters.h | 6 +- SHADE_Managed/src/Components/Collider.cxx | 8 +-- 14 files changed, 211 insertions(+), 146 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 443d4a87..6086eed9 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -50,7 +50,7 @@ Colliders: - Is Trigger: false Type: Box - Half Extents: {x: 24.7399445, y: 0.25, z: 8.75} + Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 Bounciness: 0 Density: 1 @@ -90,23 +90,7 @@ Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: - - Type: PlayerController - drag: 2 - currentState: 0 - maxMoveVel: 2 - moveForce: 50 - sprintMultiplier: 2 - rotationFactorPerFrame: 1 - maxJumpHeight: 4 - maxJumpTime: 0.75 - fallMultipler: 2 - lightMultiper: 0.75 - mediumMultiper: 0.5 - heavyMultiper: 0.25 - - Type: PickAndThrow - throwForce: [200, 300, 200] - item: 5 + Scripts: ~ - EID: 3 Name: Default IsActive: true @@ -126,12 +110,7 @@ Translate: {x: 0, y: 0, z: 0} Rotate: {x: 0, y: 0, z: 0} Scale: {x: 1, y: 1, z: 1} - Scripts: - - Type: SHADE_Scripting.ThirdPersonCamera - armLength: 2 - turnSpeedPitch: 0.300000012 - turnSpeedYaw: 0.5 - pitchClamp: 45 + Scripts: ~ - EID: 9 Name: Default IsActive: true @@ -186,9 +165,7 @@ Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: - - Type: Item - currCategory: 0 + Scripts: ~ - EID: 6 Name: AI IsActive: true @@ -223,14 +200,7 @@ Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: - - Type: AIPrototype - movementForceMultiplier: 100 - patrolSpeed: 0.400000006 - chaseSpeed: 0.800000012 - distanceToCapture: 1.20000005 - distanceToStartChase: 2 - distanceToEndChase: 2.5 + Scripts: ~ - EID: 7 Name: Default IsActive: true @@ -256,4 +226,23 @@ Color: {x: 1, y: 1, z: 1, w: 1} Layer: 4294967295 Strength: 0.25 + Scripts: ~ +- EID: 10 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: 2.45315814, z: -5} + Rotate: {x: -0, y: 0, z: -0} + Scale: {x: 2, y: 1, z: 1} + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 2, y: 1, z: 1} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0, z: 0} Scripts: ~ \ No newline at end of file diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index ecacdc79..8281f114 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -92,7 +92,7 @@ namespace Sandbox floorRigidBody.SetType(SHRigidBodyComponent::Type::STATIC); - auto* floorBox = floorCollider.AddBoundingBox(); + floorCollider.AddBoundingBox(); // Create blank entity with a script //testObj = SHADE::SHEntityManager::CreateEntity(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index d7ae56c1..85d10c1a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -224,9 +224,6 @@ namespace SHADE if (!component) return; - // Get transform component for extrapolating relative sizes - auto* transformComponent = SHComponentManager::GetComponent_s(component->GetEID()); - const auto componentType = rttr::type::get(*component); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); @@ -249,28 +246,21 @@ namespace SHADE if (collider->GetType() == SHCollisionShape::Type::BOX) { SHEditorWidgets::BeginPanel(std::format("{} Box #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto box = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( "Half Extents", { "X", "Y", "Z" }, - [box, transformComponent] { return (box->GetHalfExtents() * 2.0f) / transformComponent->GetWorldScale(); }, + [box] { return box->GetRelativeExtents(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } else if (collider->GetType() == SHCollisionShape::Type::SPHERE) { SHEditorWidgets::BeginPanel(std::format("{} Sphere #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - SHEditorWidgets::CheckBox("Is Trigger", [collider]() {return collider->IsTrigger(); }, [collider](bool const& value) {collider->SetIsTrigger(value); }, "Is Trigger"); auto sphere = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( "Radius", - [sphere, transformComponent] - { - const SHVec3& TF_WORLD_SCALE = transformComponent->GetWorldScale(); - const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - return (sphere->GetRadius() / MAX_SCALE) * 2.0f; - }, + [sphere] { return sphere->GetRelativeRadius(); }, [collider](float const& value) { collider->SetBoundingSphere(value); }); } else if (collider->GetType() == SHCollisionShape::Type::CAPSULE) diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp index d0ba2f14..5bbf5e15 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp @@ -25,11 +25,13 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHBoundingBox::SHBoundingBox() noexcept + : RelativeExtents { SHVec3::One } { type = Type::BOX; } SHBoundingBox::SHBoundingBox(const SHVec3& c, const SHVec3& hE) noexcept + : RelativeExtents { SHVec3::One } { type = Type::BOX; @@ -45,16 +47,18 @@ namespace SHADE type = Type::BOX; - Center = rhs.Center; - Extents = rhs.Extents; + Center = rhs.Center; + Extents = rhs.Extents; + RelativeExtents = rhs.RelativeExtents; } SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept { type = Type::BOX; - Center = rhs.Center; - Extents = rhs.Extents; + Center = rhs.Center; + Extents = rhs.Extents; + RelativeExtents = rhs.RelativeExtents; } /*-----------------------------------------------------------------------------------*/ @@ -69,8 +73,9 @@ namespace SHADE } else if (this != &rhs) { - Center = rhs.Center; - Extents = rhs.Extents; + Center = rhs.Center; + Extents = rhs.Extents; + RelativeExtents = rhs.RelativeExtents; } return *this; @@ -84,8 +89,9 @@ namespace SHADE } else { - Center = rhs.Center; - Extents = rhs.Extents; + Center = rhs.Center; + Extents = rhs.Extents; + RelativeExtents = rhs.RelativeExtents; } return *this; @@ -100,11 +106,16 @@ namespace SHADE return Center; } - SHVec3 SHBoundingBox::GetHalfExtents() const noexcept + SHVec3 SHBoundingBox::GetWorldExtents() const noexcept { return Extents; } + const SHVec3& SHBoundingBox::GetRelativeExtents() const noexcept + { + return RelativeExtents; + } + SHVec3 SHBoundingBox::GetMin() const noexcept { return SHVec3{ Center.x - Extents.x, Center.y - Extents.y, Center.z - Extents.z }; @@ -124,9 +135,14 @@ namespace SHADE Center = newCenter; } - void SHBoundingBox::SetHalfExtents(const SHVec3& newHalfExtents) noexcept + void SHBoundingBox::SetWorldExtents(const SHVec3& newWorldExtents) noexcept { - Extents = newHalfExtents; + Extents = newWorldExtents; + } + + void SHBoundingBox::SetRelativeExtents(const SHVec3& newRelativeExtents) noexcept + { + RelativeExtents = newRelativeExtents; } void SHBoundingBox::SetMin(const SHVec3& min) noexcept diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h index 5b3d26d5..e2757c17 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h @@ -54,21 +54,23 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec3 GetCenter () const noexcept; - [[nodiscard]] SHVec3 GetHalfExtents() const noexcept; - [[nodiscard]] SHVec3 GetMin () const noexcept; - [[nodiscard]] SHVec3 GetMax () const noexcept; - [[nodiscard]] std::vector GetVertices () const noexcept; + [[nodiscard]] SHVec3 GetCenter () const noexcept; + [[nodiscard]] SHVec3 GetWorldExtents () const noexcept; + [[nodiscard]] const SHVec3& GetRelativeExtents () const noexcept; + [[nodiscard]] SHVec3 GetMin () const noexcept; + [[nodiscard]] SHVec3 GetMax () const noexcept; + [[nodiscard]] std::vector GetVertices () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetCenter (const SHVec3& newCenter) noexcept; - void SetHalfExtents (const SHVec3& newHalfExtents) noexcept; - void SetMin (const SHVec3& min) noexcept; - void SetMax (const SHVec3& max) noexcept; - void SetMinMax (const SHVec3& min, const SHVec3& max) noexcept; + void SetCenter (const SHVec3& newCenter) noexcept; + void SetWorldExtents (const SHVec3& newWorldExtents) noexcept; + void SetRelativeExtents (const SHVec3& newRelativeExtents) noexcept; + void SetMin (const SHVec3& min) noexcept; + void SetMax (const SHVec3& max) noexcept; + void SetMinMax (const SHVec3& min, const SHVec3& max) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -89,6 +91,13 @@ namespace SHADE [[nodiscard]] static bool Intersect (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; [[nodiscard]] static SHBoundingBox BuildFromBoxes (const SHBoundingBox* boxes, size_t numBoxes) noexcept; [[nodiscard]] static SHBoundingBox BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + SHVec3 RelativeExtents; }; diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp index 62bf12b2..f843a6bb 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp @@ -25,11 +25,13 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHBoundingSphere::SHBoundingSphere() noexcept + : RelativeRadius { 1.0f } { type = Type::SPHERE; } SHBoundingSphere::SHBoundingSphere(const SHVec3& center, float radius) noexcept + : RelativeRadius { 1.0f } { type = Type::SPHERE; @@ -44,16 +46,18 @@ namespace SHADE type = Type::SPHERE; - Center = rhs.Center; - Radius = rhs.Radius; + Center = rhs.Center; + Radius = rhs.Radius; + RelativeRadius = rhs.RelativeRadius; } SHBoundingSphere::SHBoundingSphere(SHBoundingSphere&& rhs) noexcept { type = Type::SPHERE; - Center = rhs.Center; - Radius = rhs.Radius; + Center = rhs.Center; + Radius = rhs.Radius; + RelativeRadius = rhs.RelativeRadius; } /*-----------------------------------------------------------------------------------*/ @@ -68,8 +72,9 @@ namespace SHADE } else if (this != &rhs) { - Center = rhs.Center; - Radius = rhs.Radius; + Center = rhs.Center; + Radius = rhs.Radius; + RelativeRadius = rhs.RelativeRadius; } return *this; @@ -83,8 +88,9 @@ namespace SHADE } else { - Center = rhs.Center; - Radius = rhs.Radius; + Center = rhs.Center; + Radius = rhs.Radius; + RelativeRadius = rhs.RelativeRadius; } return *this; @@ -99,11 +105,16 @@ namespace SHADE return Center; } - float SHBoundingSphere::GetRadius() const noexcept + float SHBoundingSphere::GetWorldRadius() const noexcept { return Radius; } - + + float SHBoundingSphere::GetRelativeRadius() const noexcept + { + return RelativeRadius; + } + /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -113,9 +124,14 @@ namespace SHADE Center = center; } - void SHBoundingSphere::SetRadius(float radius) noexcept + void SHBoundingSphere::SetWorldRadius(float newWorldRadius) noexcept { - Radius = radius; + Radius = newWorldRadius; + } + + void SHBoundingSphere::SetRelativeRadius(float newRelativeRadius) noexcept + { + RelativeRadius = newRelativeRadius; } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h index 001e889b..d94722d6 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h +++ b/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h @@ -48,15 +48,17 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec3 GetCenter () const noexcept; - [[nodiscard]] float GetRadius () const noexcept; + [[nodiscard]] SHVec3 GetCenter () const noexcept; + [[nodiscard]] float GetWorldRadius () const noexcept; + [[nodiscard]] float GetRelativeRadius () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetCenter (const SHVec3& center) noexcept; - void SetRadius (float radius) noexcept; + void SetCenter (const SHVec3& center) noexcept; + void SetWorldRadius (float newWorldRadius) noexcept; + void SetRelativeRadius (float newRelativeRadius) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -79,5 +81,12 @@ namespace SHADE [[nodiscard]] static SHBoundingSphere BuildFromSpheres (const SHBoundingSphere* spheres, size_t numSpheres) noexcept; [[nodiscard]] static SHBoundingSphere BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + float RelativeRadius; + }; } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index af3965fb..93126fc5 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -48,6 +48,11 @@ namespace SHADE return orientation.ToEuler(); } + const SHVec3& SHColliderComponent::GetScale() const noexcept + { + return scale; + } + const SHColliderComponent::CollisionShapes& SHColliderComponent::GetCollisionShapes() const noexcept { return collisionShapes; @@ -75,12 +80,46 @@ namespace SHADE } - SHBoundingBox* SHColliderComponent::AddBoundingBox(const SHVec3& halfExtents, const SHVec3& posOffset) noexcept + void SHColliderComponent::RecomputeCollisionShapes() noexcept + { + for (auto& collisionShape : collisionShapes) + { + switch (collisionShape.GetType()) + { + case SHCollisionShape::Type::BOX: + { + auto* box = reinterpret_cast(collisionShape.GetShape()); + const SHVec3& RELATIVE_EXTENTS = box->GetRelativeExtents(); + + // Recompute world extents based on new scale and fixed relative extents + const SHVec3 WORLD_EXTENTS = RELATIVE_EXTENTS * (scale * 0.5f); + box->SetWorldExtents(WORLD_EXTENTS); + + continue; + } + case SHCollisionShape::Type::SPHERE: + { + auto* sphere = reinterpret_cast(collisionShape.GetShape()); + const float RELATIVE_RADIUS = sphere->GetRelativeRadius(); + + // Recompute world radius based on new scale and fixed radius + const float MAX_SCALE = SHMath::Max({ scale.x, scale.y, scale.z }); + const float WORLD_RADIUS = RELATIVE_RADIUS * MAX_SCALE * 0.5f; + sphere->SetWorldRadius(WORLD_RADIUS); + + continue; + } + default: continue; + } + } + } + + int SHColliderComponent::AddBoundingBox(const SHVec3& halfExtents, const SHVec3& posOffset, const SHVec3& rotOffset) noexcept { if (!system) { SHLOG_ERROR("Physics system does not exist, unable to add Box Collider!") - return nullptr; + return -1; } static constexpr auto TYPE = SHCollisionShape::Type::BOX; @@ -89,20 +128,21 @@ namespace SHADE collider.entityID = GetEID(); collider.SetPositionOffset(posOffset); + collider.SetRotationOffset(rotOffset); collider.SetBoundingBox(halfExtents); // Notify Physics System system->AddCollisionShape(GetEID(), &collider); - return reinterpret_cast(collider.GetShape()); + return static_cast(collisionShapes.size()) - 1; } - SHBoundingSphere* SHColliderComponent::AddBoundingSphere(float radius, const SHVec3& posOffset) noexcept + int SHColliderComponent::AddBoundingSphere(float radius, const SHVec3& posOffset) noexcept { if (!system) { SHLOG_ERROR("Physics system does not exist, unable to add Sphere Collider!") - return nullptr; + return -1; } static constexpr auto TYPE = SHCollisionShape::Type::SPHERE; @@ -116,7 +156,7 @@ namespace SHADE // Notify Physics System system->AddCollisionShape(GetEID(), &collider); - return reinterpret_cast(collider.GetShape()); + return static_cast(collisionShapes.size()) - 1; } void SHColliderComponent::RemoveCollider(int index) diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index ac5e7528..5f9b7a1b 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -72,6 +72,7 @@ namespace SHADE [[nodiscard]] const SHVec3& GetPosition () const noexcept; [[nodiscard]] const SHQuaternion& GetOrientation () const noexcept; [[nodiscard]] SHVec3 GetRotation () const noexcept; + [[nodiscard]] const SHVec3& GetScale () const noexcept; [[nodiscard]] const CollisionShapes& GetCollisionShapes() const noexcept; [[nodiscard]] SHCollisionShape& GetCollisionShape (int index); @@ -80,13 +81,15 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void OnCreate () override; - void OnDestroy () override; + void OnCreate () override; + void OnDestroy () override; - void RemoveCollider (int index); + void RecomputeCollisionShapes () noexcept; - SHBoundingBox* AddBoundingBox (const SHVec3& halfExtents = SHVec3::One, const SHVec3& posOffset = SHVec3::Zero) noexcept; - SHBoundingSphere* AddBoundingSphere (float radius = 1.0f, const SHVec3& posOffset = SHVec3::Zero) noexcept; + void RemoveCollider (int index); + + int AddBoundingBox (const SHVec3& halfExtents = SHVec3::One, const SHVec3& posOffset = SHVec3::Zero, const SHVec3& rotOffset = SHVec3::Zero) noexcept; + int AddBoundingSphere (float radius = 1.0f, const SHVec3& posOffset = SHVec3::Zero) noexcept; private: @@ -98,6 +101,7 @@ namespace SHADE SHVec3 position; SHQuaternion orientation; + SHVec3 scale; CollisionShapes collisionShapes; RTTR_ENABLE() diff --git a/SHADE_Engine/src/Physics/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/SHCollisionShape.cpp index 78ec36f9..c8f8020c 100644 --- a/SHADE_Engine/src/Physics/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/SHCollisionShape.cpp @@ -15,8 +15,8 @@ // Project Headers #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" -#include "Math/Transform/SHTransformComponent.h" #include "Math/SHMathHelpers.h" +#include "Physics/Components/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" namespace SHADE @@ -178,56 +178,43 @@ namespace SHADE { dirty = true; - // Set the half extents relative to transform - SHVec3 worldHalfExtents = halfExtents; + const auto* colliderComponent = SHComponentManager::GetComponent(entityID); + // Set the half extents relative to world scale + const SHVec3 WORLD_EXTENTS = halfExtents * colliderComponent->GetScale() * 0.5f; - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); - if (transformComponent != nullptr) - worldHalfExtents *= (transformComponent->GetWorldScale() * 0.5f); - - if (type == Type::BOX) - { - auto* box = reinterpret_cast(shape); - box->SetHalfExtents(worldHalfExtents); - } - else + if (type != Type::BOX) { type = Type::BOX; delete shape; - shape = new SHBoundingBox{ positionOffset, worldHalfExtents }; + shape = new SHBoundingBox{ positionOffset, WORLD_EXTENTS }; } + + auto* box = reinterpret_cast(shape); + box->SetWorldExtents(WORLD_EXTENTS); + box->SetRelativeExtents(halfExtents); } void SHCollisionShape::SetBoundingSphere(float radius) { dirty = true; - // Set the radius relative to transform - float worldRadius = radius; + const auto* colliderComponent = SHComponentManager::GetComponent(entityID); + // Set the radius relative to world scale + const SHVec3 WORLD_SCALE = colliderComponent->GetScale(); + const float MAX_SCALE = SHMath::Max({ WORLD_SCALE.x, WORLD_SCALE.y, WORLD_SCALE.z }); + const float WORLD_RADIUS = radius * MAX_SCALE * 0.5f; - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); - if (transformComponent != nullptr) - { - const SHVec3 TF_WORLD_SCALE = transformComponent->GetWorldScale(); - const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - - worldRadius *= MAX_SCALE * 0.5f; - } - - if (type == Type::SPHERE) - { - auto* sphere = reinterpret_cast(shape); - sphere->SetRadius(worldRadius); - } - else + if (type != Type::SPHERE) { type = Type::SPHERE; delete shape; - shape = new SHBoundingSphere{ positionOffset, worldRadius }; + shape = new SHBoundingSphere{ positionOffset, WORLD_RADIUS }; } - + + auto* sphere = reinterpret_cast(shape); + sphere->SetWorldRadius(WORLD_RADIUS); } void SHCollisionShape::SetIsTrigger(bool trigger) noexcept @@ -299,14 +286,14 @@ namespace SHADE { const auto* RHS_BOX = reinterpret_cast(rhs); - shape = new SHBoundingBox{ positionOffset, RHS_BOX->GetHalfExtents() }; + shape = new SHBoundingBox{ positionOffset, RHS_BOX->GetWorldExtents() }; break; } case Type::SPHERE: { const auto* RHS_SPHERE = reinterpret_cast(rhs); - shape = new SHBoundingSphere{ positionOffset, RHS_SPHERE->GetRadius() }; + shape = new SHBoundingSphere{ positionOffset, RHS_SPHERE->GetWorldRadius() }; break; } default: break; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 5658f304..00c6943b 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -137,7 +137,7 @@ namespace SHADE case SHCollisionShape::Type::BOX: { const auto* box = reinterpret_cast(collider->GetShape()); - rp3d::BoxShape* newBox = factory->createBoxShape(box->GetHalfExtents()); + rp3d::BoxShape* newBox = factory->createBoxShape(box->GetWorldExtents()); rp3dBody->addCollider(newBox, OFFSETS); break; @@ -145,7 +145,7 @@ namespace SHADE case SHCollisionShape::Type::SPHERE: { const auto* sphere = reinterpret_cast(collider->GetShape()); - rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetRadius()); + rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetWorldRadius()); rp3dBody->addCollider(newSphere, OFFSETS); break; @@ -193,7 +193,7 @@ namespace SHADE const auto* box = reinterpret_cast(collider.GetShape()); auto* rp3dBoxShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dBoxShape->setHalfExtents(box->GetHalfExtents()); + rp3dBoxShape->setHalfExtents(box->GetWorldExtents()); break; } @@ -202,7 +202,7 @@ namespace SHADE const auto* sphere = reinterpret_cast(collider.GetShape()); auto* rp3dSphereShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dSphereShape->setRadius(sphere->GetRadius()); + rp3dSphereShape->setRadius(sphere->GetWorldRadius()); break; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 078a5d6a..437b5ff8 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -395,6 +395,7 @@ namespace SHADE { const auto WORLD_POS = transformComponent->GetWorldPosition(); const auto WORLD_ROT = transformComponent->GetWorldOrientation(); + const auto WORLD_SCL = transformComponent->GetWorldScale(); physicsObject.SetPosition(WORLD_POS); physicsObject.SetOrientation(WORLD_ROT); @@ -409,8 +410,11 @@ namespace SHADE if (colliderComponent) { - colliderComponent->position = WORLD_POS; - colliderComponent->orientation = WORLD_ROT; + colliderComponent->position = WORLD_POS; + colliderComponent->orientation = WORLD_ROT; + colliderComponent->scale = WORLD_SCL; + + colliderComponent->RecomputeCollisionShapes(); } } @@ -744,8 +748,9 @@ namespace SHADE { SHASSERT(colliderComponent != nullptr, "Collider Component was not added to Entity " + std::to_string(ENTITY_ID) + "!"); - colliderComponent->position = transformComponent->GetWorldPosition(); - colliderComponent->orientation = transformComponent->GetWorldOrientation(); + colliderComponent->position = transformComponent->GetWorldPosition(); + colliderComponent->orientation = transformComponent->GetWorldOrientation(); + colliderComponent->scale = transformComponent->GetWorldScale(); if (physicsObject->rp3dBody == nullptr) { diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 76be74ce..1b93c63a 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -131,13 +131,13 @@ namespace YAML case SHCollisionShape::Type::BOX: { auto const bb = reinterpret_cast(rhs.GetShape()); - node[HalfExtents] = bb->GetHalfExtents(); + node[HalfExtents] = bb->GetRelativeExtents(); } break; case SHCollisionShape::Type::SPHERE: { auto const bs = reinterpret_cast(rhs.GetShape()); - node[Radius] = bs->GetRadius(); + node[Radius] = bs->GetRelativeRadius(); } break; case SHCollisionShape::Type::CAPSULE: break; @@ -168,7 +168,7 @@ namespace YAML case SHCollisionShape::Type::BOX: { if (node[HalfExtents].IsDefined()) - rhs.SetBoundingBox(node[HalfExtents].as() * 2.0f); + rhs.SetBoundingBox(node[HalfExtents].as()); } break; case SHCollisionShape::Type::SPHERE: diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx index dc5d27af..0e916b7b 100644 --- a/SHADE_Managed/src/Components/Collider.cxx +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -55,11 +55,11 @@ namespace SHADE } Vector3 BoxCollider::HalfExtents::get() { - return Convert::ToCLI(getNativeBoundObject().GetHalfExtents()); + return Convert::ToCLI(getNativeBoundObject().GetWorldExtents()); } void BoxCollider::HalfExtents::set(Vector3 value) { - getNativeBoundObject().SetHalfExtents(Convert::ToNative(value)); + getNativeBoundObject().SetWorldExtents(Convert::ToNative(value)); } Vector3 BoxCollider::Min::get() { @@ -103,11 +103,11 @@ namespace SHADE } float SphereCollider::Radius::get() { - return getNativeBoundObject().GetRadius(); + return getNativeBoundObject().GetWorldRadius(); } void SphereCollider::Radius::set(float value) { - getNativeBoundObject().SetRadius(value); + getNativeBoundObject().SetWorldRadius(value); } /*---------------------------------------------------------------------------------*/ From ddd93a85f4f7791168b2b122f124a579fc1d1725 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 00:53:47 +0800 Subject: [PATCH 696/793] Added support for null GameObjects (loading is buggy) --- Assets/Scenes/M2Scene.shade | 5 +- SHADE_Engine/src/Editor/SHEditorUI.cpp | 11 +- SHADE_Engine/src/Editor/SHEditorUI.h | 6 +- SHADE_Managed/src/Editor/Editor.cxx | 7 +- SHADE_Managed/src/Engine/GameObject.cxx | 104 +++++++++++++----- SHADE_Managed/src/Engine/GameObject.hxx | 18 ++- .../src/Serialisation/ReflectionUtilities.cxx | 6 +- 7 files changed, 119 insertions(+), 38 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 443d4a87..585582e4 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -256,4 +256,7 @@ Color: {x: 1, y: 1, z: 1, w: 1} Layer: 4294967295 Strength: 0.25 - Scripts: ~ \ No newline at end of file + Scripts: + - Type: PickAndThrow + throwForce: [100, 200, 100] + item: 1 \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index cc63c565..49cfbfd6 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -288,7 +288,7 @@ namespace SHADE return CHANGED; } - bool SHEditorUI::InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered) + bool SHEditorUI::InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered, bool alwaysNull) { ImGui::Text(label.c_str()); if (isHovered) @@ -296,7 +296,7 @@ namespace SHADE ImGui::SameLine(); SHEntity* entity = SHEntityManager::GetEntityByID(value); std::ostringstream oss; - if (entity) + if (!alwaysNull && entity) { oss << value << ": " << entity->name; } @@ -314,6 +314,13 @@ namespace SHADE SHDragDrop::EndTarget(); } } + ImGui::SameLine(); + if (ImGui::Button("Clear")) + { + value = MAX_EID; + changed = true; + } + return changed; } diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index d4104639..4e8f4400 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -313,8 +313,12 @@ namespace SHADE /// Label used to identify this widget. /// Reference to the variable to store the result. /// + /// If set, the field displayed will always be blank regardless of specified + /// GameObject. + /// /// True if the value was changed. - static bool InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered = nullptr); + static bool InputGameObjectField(const std::string& label, uint32_t& value, bool* isHovered = nullptr, bool alwaysNull = false); /// /// Creates a combo box for enumeration input. /// diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 55fe91da..2afe9697 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -290,9 +290,14 @@ namespace SHADE { GameObject gameObj = safe_cast(field->GetValue(object)); uint32_t entityId = gameObj.GetEntity(); - if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered)) + if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered, !gameObj)) { GameObject newVal = GameObject(entityId); + if (entityId != MAX_EID) + { + // Null GameObject set + newVal = GameObject(entityId); + } field->SetValue(object, newVal); registerUndoAction(object, field, newVal, gameObj); } diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 7ceabfed..9f15c6c9 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -6,9 +6,9 @@ \brief Contains the definition of the functions for the GameObject managed class. Note: This file is written in C++17/CLI. - + Copyright (C) 2021 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ // Precompiled Headers @@ -36,10 +36,12 @@ namespace SHADE void GameObject::Destroy(GameObject obj) { + if (!obj.valid) + throw gcnew System::NullReferenceException("Attempted to destroy a null GameObject."); SHEntityManager::DestroyEntity(static_cast(obj.GetEntity())); } - System::Nullable GameObject::Find(System::String ^ name) + System::Nullable GameObject::Find(System::String^ name) { // Search the GameObjectLibrary for an Entity with the specified name const auto ENTITY_ID = SHEntityManager::GetEntityByName(Convert::ToNative(name)); @@ -50,21 +52,27 @@ namespace SHADE return GameObject(ENTITY_ID); } - + /*---------------------------------------------------------------------------------*/ /* Properties */ /*---------------------------------------------------------------------------------*/ System::String^ GameObject::Name::get() { + if (!valid) + throw gcnew System::NullReferenceException(); return Convert::ToCLI(GetNativeEntity().name); - - } + + } bool GameObject::IsActiveSelf::get() { + if (!valid) + throw gcnew System::NullReferenceException(); return GetNativeEntity().GetActive(); } bool GameObject::IsActiveInHierarchy::get() { + if (!valid) + throw gcnew System::NullReferenceException(); auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(GetEntity()); if (!node) { @@ -75,39 +83,49 @@ namespace SHADE } Entity GameObject::EntityId::get() { + if (!valid) + throw gcnew System::NullReferenceException(); return entity; } GameObject^ GameObject::Parent::get() { - const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - const auto* ROOT = SCENE_GRAPH.GetRoot(); + if (!valid) + throw gcnew System::NullReferenceException(); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + const auto* ROOT = SCENE_GRAPH.GetRoot(); - const auto* NODE = SCENE_GRAPH.GetNode(entity); - if (NODE == nullptr) - throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); + const auto* NODE = SCENE_GRAPH.GetNode(entity); + if (NODE == nullptr) + throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); - const auto* PARENT = NODE->GetParent(); - return PARENT != ROOT ? gcnew GameObject(PARENT->GetEntityID()) : nullptr; + const auto* PARENT = NODE->GetParent(); + return PARENT != ROOT ? gcnew GameObject(PARENT->GetEntityID()) : nullptr; } void GameObject::Parent::set(GameObject^ newParent) { - const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + if (!valid) + throw gcnew System::NullReferenceException(); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - if (newParent == nullptr) - SCENE_GRAPH.SetParent(entity, nullptr); - else - SCENE_GRAPH.SetParent(entity, newParent->EntityId); + if (newParent == nullptr) + SCENE_GRAPH.SetParent(entity, nullptr); + else + SCENE_GRAPH.SetParent(entity, newParent->EntityId); } - + /*---------------------------------------------------------------------------------*/ /* GameObject Property Functions */ /*---------------------------------------------------------------------------------*/ void GameObject::SetName(System::String^ name) { + if (!valid) + throw gcnew System::NullReferenceException(); GetNativeEntity().name = Convert::ToNative(name); } void GameObject::SetActive(bool active) { + if (!valid) + throw gcnew System::NullReferenceException(); GetNativeEntity().SetActive(active); } @@ -117,63 +135,83 @@ namespace SHADE generic T GameObject::AddComponent() { + if (!valid) + throw gcnew System::NullReferenceException(); return ECS::AddComponent(entity); } generic T GameObject::GetComponent() { + if (!valid) + throw gcnew System::NullReferenceException(); return ECS::GetComponent(entity); } generic T GameObject::GetComponentInChildren() { + if (!valid) + throw gcnew System::NullReferenceException(); return ECS::GetComponentInChildren(entity); } generic T GameObject::EnsureComponent() { + if (!valid) + throw gcnew System::NullReferenceException(); return ECS::EnsureComponent(entity); } generic void GameObject::RemoveComponent() { + if (!valid) + throw gcnew System::NullReferenceException(); ECS::RemoveComponent(entity); } - + /*---------------------------------------------------------------------------------*/ /* Script Access Functions */ /*---------------------------------------------------------------------------------*/ generic T GameObject::AddScript() { + if (!valid) + throw gcnew System::NullReferenceException(); return ScriptStore::AddScript(entity); } generic T GameObject::GetScript() { + if (!valid) + throw gcnew System::NullReferenceException(); return ScriptStore::GetScript(entity); } generic T GameObject::GetScriptInChildren() { + if (!valid) + throw gcnew System::NullReferenceException(); return ScriptStore::GetScriptInChildren(entity); } generic System::Collections::Generic::IEnumerable^ GameObject::GetScripts() { + if (!valid) + throw gcnew System::NullReferenceException(); return ScriptStore::GetScripts(entity); } generic void GameObject::RemoveScript() { + if (!valid) + throw gcnew System::NullReferenceException(); ScriptStore::RemoveScript(entity); } @@ -181,20 +219,24 @@ namespace SHADE /* Constructors */ /*---------------------------------------------------------------------------------*/ GameObject::GameObject(const SHEntity& entity) - : entity { entity.GetEID() } - , children{ gcnew System::Collections::ArrayList } + : entity{ entity.GetEID() } + , children{ gcnew System::Collections::ArrayList } + , valid{ true } {} GameObject::GameObject(Entity entity) - : entity { entity } - , children{ gcnew System::Collections::ArrayList } + : entity{ entity } + , children{ gcnew System::Collections::ArrayList } + , valid{ true } {} - + /*---------------------------------------------------------------------------------*/ /* Getters */ /*---------------------------------------------------------------------------------*/ SHEntity& GameObject::GetNativeEntity() { + if (!valid) + throw gcnew System::NullReferenceException(); SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); if (nativeEntity == nullptr) throw gcnew System::InvalidOperationException("[GameObject] Unable to obtain native Entity for GameObject."); @@ -202,14 +244,22 @@ namespace SHADE return *nativeEntity; } + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + GameObject::operator bool(GameObject gameObj) + { + return gameObj.valid; + } + /*---------------------------------------------------------------------------------*/ /* IEquatable */ /*---------------------------------------------------------------------------------*/ bool GameObject::Equals(GameObject other) { - return entity == other.entity; + return (!valid && !other.valid) || entity == other.entity; } - + /*---------------------------------------------------------------------------------*/ /* Object */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 99296a91..525b6c10 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -29,8 +29,8 @@ namespace SHADE /* Class Definitions */ /*---------------------------------------------------------------------------------*/ /// - /// Lightweight object for an PlushieEngine Entity that allows for easy access - /// to Component and Script operations. + /// Lightweight object for an Entity that allows for easy access to Component and + /// Script operations. /// public value class GameObject : public System::IEquatable { @@ -98,8 +98,8 @@ namespace SHADE ///

    !9MAnS#ia3Wk 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 UNbk|?%M4sE@ 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

    property GameObject^ Parent { - GameObject^ get(); - void set(GameObject^); + GameObject^ get(); + void set(GameObject^); } /*-----------------------------------------------------------------------------*/ @@ -247,12 +247,22 @@ namespace SHADE /// Native Entity object that this GameObject represents. SHEntity& GetNativeEntity(); + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a GameObject is valid. + /// + /// GameObjects to check. + static operator bool(GameObject gameObj); + private: /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ Entity entity; System::Collections::ArrayList^ children; + bool valid; public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 4b4e44fc..66ef493a 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -171,7 +171,7 @@ namespace SHADE else if (fieldInfo->FieldType == GameObject::typeid) { GameObject gameObj = safe_cast(fieldInfo->GetValue(object)); - fieldNode = gameObj.GetEntity(); + fieldNode = gameObj ? gameObj.GetEntity() : MAX_EID; } else // Not any of the supported types { @@ -250,7 +250,9 @@ namespace SHADE } else if (fieldInfo->FieldType == GameObject::typeid) { - fieldInfo->SetValue(object, GameObject(node.as())); + const uint32_t EID = node.as(); + fieldInfo->SetValue(object, EID == MAX_EID ? GameObject() : GameObject(EID)); + Debug::LogError(std::to_string(EID)); } else // Not any of the supported types { From e0481ad8af4587008fe0b6d05c94f1efdaa17ce3 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 13:47:39 +0800 Subject: [PATCH 697/793] Removed debug log --- SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 66ef493a..651afb73 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -252,7 +252,6 @@ namespace SHADE { const uint32_t EID = node.as(); fieldInfo->SetValue(object, EID == MAX_EID ? GameObject() : GameObject(EID)); - Debug::LogError(std::to_string(EID)); } else // Not any of the supported types { From e3369c688d12a1ff1e445b4ed7b51f238e74838c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 13:49:49 +0800 Subject: [PATCH 698/793] Added comment to document invalid/null GameObject usage --- SHADE_Managed/src/Engine/GameObject.hxx | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 525b6c10..030b917c 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -31,6 +31,7 @@ namespace SHADE /// /// Lightweight object for an Entity that allows for easy access to Component and /// Script operations. + /// Can be set to a invalid/null GameObject by default construction. /// public value class GameObject : public System::IEquatable { From 1f4a530dccaa3f78db5833d3b494de26b36c9f81 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 14:06:01 +0800 Subject: [PATCH 699/793] Fixed compile error in Release --- SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h index 022d4b62..fc348487 100644 --- a/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h +++ b/SHADE_Engine/src/Graphics/Commands/SHVkCommandBuffer.h @@ -81,9 +81,8 @@ namespace SHADE //! The push constant data for the command buffer uint8_t pushConstantData[PUSH_CONSTANT_SIZE]; -#ifdef _DEBUG + //! Depth of segmenting of the command buffer (used for debug data) int segmentDepth; -#endif /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ From ee814fa61d418428bcf92c381feb33cc361fd147 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 15:02:08 +0800 Subject: [PATCH 700/793] Added support for parameter-less CallbackActions and CallbackEvents --- SHADE_CSharp/src/Events/CallbackAction.cs | 93 ++++++++++++++++ SHADE_CSharp/src/Events/CallbackAction.tt | 8 +- SHADE_CSharp/src/Events/CallbackEvent.cs | 126 ++++++++++++++++++---- SHADE_CSharp/src/Events/CallbackEvent.tt | 24 ++--- TempScriptsFolder/RaccoonSpin.cs | 4 + 5 files changed, 219 insertions(+), 36 deletions(-) diff --git a/SHADE_CSharp/src/Events/CallbackAction.cs b/SHADE_CSharp/src/Events/CallbackAction.cs index 623e4f59..b6082c0c 100644 --- a/SHADE_CSharp/src/Events/CallbackAction.cs +++ b/SHADE_CSharp/src/Events/CallbackAction.cs @@ -34,6 +34,99 @@ namespace SHADE Object TargetObject { get; } } + /// + /// Represents a function call that can be serialised and put togetheer with scripts. + /// This variant accepts functions with 0 parameter. + /// + public class CallbackAction : ICallbackAction + { + #region Properties ------------------------------------------------------------ + /// + public Object TargetObject { get; private set; } + /// + public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name; + /// + public bool IsRuntimeAction => targetAction != null; + #endregion + + #region Fields ------------------------------------------------------------------ + private MethodInfo targetMethod; + private Action targetAction; + private Object[] parameters; + #endregion + + #region Constructors ------------------------------------------------------------ + /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[0]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. + /// + /// Object to call the method on. + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(Object target, MethodInfo method) + { + // Error Checks + if (method.DeclaringType != target.GetType()) + throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method."); + + // No errors, assign + TargetObject = target; + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[0]; + } + /// + /// Constructs a Callback action based on an action. + /// + /// Action that wraps a function to be called. + public CallbackAction(Action action) + { + targetAction = action; + } + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + /// Invokes the CallbackAction's stored method/action with the specified parameters. + /// + public void Invoke() + { + if (targetAction != null) + { + targetAction.Invoke(); + } + else if (targetMethod != null) + { + _ = targetMethod.Invoke(TargetObject, parameters); + } + } + #endregion + } /// /// Represents a function call that can be serialised and put togetheer with scripts. /// This variant accepts functions with 1 parameter. diff --git a/SHADE_CSharp/src/Events/CallbackAction.tt b/SHADE_CSharp/src/Events/CallbackAction.tt index 34789b67..3fbb7617 100644 --- a/SHADE_CSharp/src/Events/CallbackAction.tt +++ b/SHADE_CSharp/src/Events/CallbackAction.tt @@ -50,12 +50,12 @@ namespace SHADE Object TargetObject { get; } } -<# for (int i = 1; i <= max; ++i) { #> +<# for (int i = 0; i <= max; ++i) { #> /// /// Represents a function call that can be serialised and put togetheer with scripts. /// This variant accepts functions with <#=i#> parameter<# if (i > 1) {#>s<#} #>. /// - public class CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackAction + public class CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> : ICallbackAction { #region Properties ------------------------------------------------------------ /// @@ -68,7 +68,7 @@ namespace SHADE #region Fields ------------------------------------------------------------------ private MethodInfo targetMethod; - private Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> targetAction; + private Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> targetAction; private Object[] parameters; #endregion @@ -121,7 +121,7 @@ namespace SHADE /// Constructs a Callback action based on an action. /// /// Action that wraps a function to be called. - public CallbackAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + public CallbackAction(Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action) { targetAction = action; } diff --git a/SHADE_CSharp/src/Events/CallbackEvent.cs b/SHADE_CSharp/src/Events/CallbackEvent.cs index ec464ba9..2c3cc388 100644 --- a/SHADE_CSharp/src/Events/CallbackEvent.cs +++ b/SHADE_CSharp/src/Events/CallbackEvent.cs @@ -45,6 +45,92 @@ namespace SHADE IEnumerable Actions { get; } } + /// + /// A container of CallbackActions that is correlated to a specific scenario as + /// specified by the user of this class. + /// This variant accepts CallbackEvents with 1 generic parameter. + /// + public class CallbackEvent : ICallbackEvent + { + #region Properties -------------------------------------------------------------- + /// + public IEnumerable Actions => actions; + #endregion + + #region Fields ------------------------------------------------------------------ + private List actions = new List(); + #endregion + + #region Usage Functions --------------------------------------------------------- + /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// + public void RegisterAction(ICallbackAction action) + { + // Check if valid action + if (action.GetType() != typeof(CallbackAction)) + { + Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); + return; + } + + actions.Add(action); + } + /// + /// Adds a CallbackAction into the event. + /// + /// CallbackAction to add. + public void RegisterAction(CallbackAction action) + { + actions.Add(action); + } + /// + /// Constructs and adds a CallbackAction into the event. + /// + /// System.Action to add as a CallbackAction. + public void RegisterAction(Action action) + { + actions.Add(new CallbackAction(action)); + } + /// + /// Constructs and adds a CallbackAction into the event. + /// + /// Object to call the method on. + /// Method to call. + public void RegisterAction(Object target, MethodInfo method) + { + actions.Add(new CallbackAction(target, method)); + } + /// + public void DeregisterAction(ICallbackAction action) + { + if (!actions.Remove(action)) + { + Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this); + } + } + /// + /// Invokes all stored CallbackActions with the specified parameters. + /// + public void Invoke() + { + foreach (CallbackAction action in actions) + { + try + { + action.Invoke(); + } + catch (Exception e) + { + Debug.LogException(e, this); + } + } + } + #endregion + } /// /// A container of CallbackActions that is correlated to a specific scenario as /// specified by the user of this class. @@ -88,7 +174,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -96,7 +182,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -174,7 +260,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -182,7 +268,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -260,7 +346,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -268,7 +354,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -346,7 +432,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -354,7 +440,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -432,7 +518,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -440,7 +526,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -518,7 +604,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -526,7 +612,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -604,7 +690,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -612,7 +698,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -690,7 +776,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -698,7 +784,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -776,7 +862,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -784,7 +870,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. @@ -862,7 +948,7 @@ namespace SHADE actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. public void RegisterAction(Action action) @@ -870,7 +956,7 @@ namespace SHADE actions.Add(new CallbackAction(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. diff --git a/SHADE_CSharp/src/Events/CallbackEvent.tt b/SHADE_CSharp/src/Events/CallbackEvent.tt index 6a545601..66a8b6d9 100644 --- a/SHADE_CSharp/src/Events/CallbackEvent.tt +++ b/SHADE_CSharp/src/Events/CallbackEvent.tt @@ -61,13 +61,13 @@ namespace SHADE IEnumerable Actions { get; } } -<# for (int i = 1; i <= max; ++i) { #> +<# for (int i = 0; i <= max; ++i) { #> /// /// A container of CallbackActions that is correlated to a specific scenario as /// specified by the user of this class. /// This variant accepts CallbackEvents with 1 generic parameter. /// - public class CallbackEvent<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackEvent + public class CallbackEvent<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> : ICallbackEvent { #region Properties -------------------------------------------------------------- /// @@ -82,13 +82,13 @@ namespace SHADE /// public void RegisterAction() { - actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>()); + actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>()); } /// public void RegisterAction(ICallbackAction action) { // Check if valid action - if (action.GetType() != typeof(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>)) + if (action.GetType() != typeof(CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>)) { Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this); return; @@ -100,26 +100,26 @@ namespace SHADE /// Adds a CallbackAction into the event. /// /// CallbackAction to add. - public void RegisterAction(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + public void RegisterAction(CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action) { actions.Add(action); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// System.Action to add as a CallbackAction. - public void RegisterAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) + public void RegisterAction(Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action) { - actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(action)); + actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>(action)); } /// - /// Constructs and adds a CallbackACtion into the event. + /// Constructs and adds a CallbackAction into the event. /// /// Object to call the method on. /// Method to call. public void RegisterAction(Object target, MethodInfo method) { - actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(target, method)); + actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>(target, method)); } /// public void DeregisterAction(ICallbackAction action) @@ -132,9 +132,9 @@ namespace SHADE /// /// Invokes all stored CallbackActions with the specified parameters. /// - public void Invoke(<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } #>) + public void Invoke(<# if (i != 0) { for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } } #>) { - foreach (CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action in actions) + foreach (CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action in actions) { try { diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs index 06b3c163..efdfadeb 100644 --- a/TempScriptsFolder/RaccoonSpin.cs +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -8,6 +8,8 @@ public class RaccoonSpin : Script private float RotateSpeed = 1.0f; private float rotation = 0.0f; [SerializeField] + private CallbackEvent emptyEvent; + [SerializeField] private CallbackEvent testEvent; [SerializeField] private CallbackEvent testEvent3 = new CallbackEvent(); @@ -17,6 +19,8 @@ public class RaccoonSpin : Script protected override void awake() { + emptyEvent = new CallbackEvent(); + emptyEvent.RegisterAction(() => Debug.Log("Empty event action!")); testEvent = new CallbackEvent(); Action action = (x) => Debug.Log($"{x}"); testEvent.RegisterAction(action); From 9be58e7e5d961df6c90f60fbc20a4f8ea38a927d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 18:32:13 +0800 Subject: [PATCH 701/793] Added SceneGraph interaction functions in GameObject --- SHADE_Managed/src/Engine/ChildListCache.cxx | 89 ++++++++++++++ SHADE_Managed/src/Engine/ChildListCache.hxx | 80 +++++++++++++ SHADE_Managed/src/Engine/EngineInterface.hxx | 2 +- SHADE_Managed/src/Engine/GameObject.cxx | 120 +++++++++++++++++-- SHADE_Managed/src/Engine/GameObject.hxx | 102 ++++++++++++++-- 5 files changed, 372 insertions(+), 21 deletions(-) create mode 100644 SHADE_Managed/src/Engine/ChildListCache.cxx create mode 100644 SHADE_Managed/src/Engine/ChildListCache.hxx diff --git a/SHADE_Managed/src/Engine/ChildListCache.cxx b/SHADE_Managed/src/Engine/ChildListCache.cxx new file mode 100644 index 00000000..b183646f --- /dev/null +++ b/SHADE_Managed/src/Engine/ChildListCache.cxx @@ -0,0 +1,89 @@ +/************************************************************************************//*! +\file ChildListCache.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 11, 2022 +\brief Contains the definition of the functions for the ChildListCache managed + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "ChildListCache.hxx" +// External Dependencies +#include "Scene/SHSceneManager.h" +// Project Headers +#include "Utility/Debug.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*---------------------------------------------------------------------------------*/ + ChildListCache::ChildEnumerable^ ChildListCache::GetChildList(Entity entity) + { + // Ignore if invalid + if (entity == MAX_EID) + return nullptr; + + // Check if in cache + if (cachedLists->ContainsKey(entity)) + return cachedLists[entity]; + + // Grab the native child list + auto node = GameObject(entity).GetSceneNode(); + if (!node || node->GetChildren().empty()) + return nullptr; + + // Otherwise + // - Create the list + ChildList^ list = gcnew ChildList(); + updateChildList(list, node); + // - Cache it + cachedLists[entity] = list; + + return list; + } + + void ChildListCache::UpdateChildList(Entity entity) + { + // Ignore if invalid + if (entity == MAX_EID) + return; + + // Check if in cache + if (!cachedLists->ContainsKey(entity)) + return; + + // Update + updateChildList(cachedLists[entity], GameObject(entity).GetSceneNode()); + } + + /*---------------------------------------------------------------------------------*/ + /* Event Handling Functions */ + /*---------------------------------------------------------------------------------*/ + void ChildListCache::OnChildrenChanged(EntityID entity) + { + SAFE_NATIVE_CALL_BEGIN + UpdateChildList(entity); + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ChildListCache") + } + + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void ChildListCache::updateChildList(ChildList^ list, const SHSceneNode* sceneNode) + { + list->Clear(); + for (auto node : sceneNode->GetChildren()) + { + list->Add(GameObject(node->GetEntityID())); + } + } +} diff --git a/SHADE_Managed/src/Engine/ChildListCache.hxx b/SHADE_Managed/src/Engine/ChildListCache.hxx new file mode 100644 index 00000000..1a2637d3 --- /dev/null +++ b/SHADE_Managed/src/Engine/ChildListCache.hxx @@ -0,0 +1,80 @@ +/************************************************************************************//*! +\file ChildListCache.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 11, 2022 +\brief Contains the definition of the ChildListCache managed class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "GameObject.hxx" + +namespace SHADE { } + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHSceneNode; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Static class that caches all the lists of children for GameObjects. + /// + private ref class ChildListCache abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using ChildList = System::Collections::Generic::List; + using ChildEnumerable = System::Collections::Generic::IEnumerable; + using ListMap = System::Collections::Generic::Dictionary; + + internal: + /*-----------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Retrieves the children list for the specified Entity. + /// + /// + /// Enumerable read only list of an Entity's children. Null if entity is invalid + /// or there are no children. + /// + static ChildEnumerable^ GetChildList(Entity entity); + /// + /// Updates the children list for the specified Entity if it exists. + /// + static void UpdateChildList(Entity entity); + + /*-----------------------------------------------------------------------------*/ + /* Event Handling Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// To be + /// + static void OnChildrenChanged(EntityID entity); + + private: + /*-----------------------------------------------------------------------------*/ + /* Static Data Members */ + /*-----------------------------------------------------------------------------*/ + static ListMap^ cachedLists = gcnew ListMap(); + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void updateChildList(ChildList^ list, const SHSceneNode* sceneNode); + }; +} \ No newline at end of file diff --git a/SHADE_Managed/src/Engine/EngineInterface.hxx b/SHADE_Managed/src/Engine/EngineInterface.hxx index 4fd8f7b3..37ded4eb 100644 --- a/SHADE_Managed/src/Engine/EngineInterface.hxx +++ b/SHADE_Managed/src/Engine/EngineInterface.hxx @@ -20,7 +20,7 @@ namespace SHADE { /// /// Static class that contains the functions for interfacing with the core - /// PlushieEngine written in C++ for managing the lifecycle of managed code. + /// SHADE Engine written in C++ for managing the lifecycle of managed code. /// private ref class EngineInterface abstract sealed { diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 9f15c6c9..ece163f9 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -23,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Convert.hxx" #include "Scripts/ScriptStore.hxx" #include "Utility/Debug.hxx" +#include "ChildListCache.hxx" namespace SHADE { @@ -87,30 +88,43 @@ namespace SHADE throw gcnew System::NullReferenceException(); return entity; } - GameObject^ GameObject::Parent::get() + GameObject GameObject::Parent::get() { if (!valid) throw gcnew System::NullReferenceException(); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); const auto* ROOT = SCENE_GRAPH.GetRoot(); - const auto* NODE = SCENE_GRAPH.GetNode(entity); if (NODE == nullptr) throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); const auto* PARENT = NODE->GetParent(); - return PARENT != ROOT ? gcnew GameObject(PARENT->GetEntityID()) : nullptr; + return PARENT != ROOT ? GameObject(PARENT->GetEntityID()) : GameObject(); } - void GameObject::Parent::set(GameObject^ newParent) + void GameObject::Parent::set(GameObject newParent) { if (!valid) throw gcnew System::NullReferenceException(); const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); - if (newParent == nullptr) - SCENE_GRAPH.SetParent(entity, nullptr); + if (newParent) + SCENE_GRAPH.SetParent(entity, newParent.EntityId); else - SCENE_GRAPH.SetParent(entity, newParent->EntityId); + SCENE_GRAPH.SetParent(entity, nullptr); + } + int GameObject::ChildCount::get() + { + if (!valid) + throw gcnew System::NullReferenceException(); + + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + const auto* ROOT = SCENE_GRAPH.GetRoot(); + const auto* NODE = SCENE_GRAPH.GetNode(entity); + if (NODE == nullptr) + throw gcnew System::InvalidOperationException("Unable to retrieve SceneGraphNode for Entity " + entity.ToString()); + + return static_cast(NODE->GetChildren().size()); } /*---------------------------------------------------------------------------------*/ @@ -215,6 +229,88 @@ namespace SHADE ScriptStore::RemoveScript(entity); } + /*---------------------------------------------------------------------------------*/ + /* Scene Graph Functions */ + /*---------------------------------------------------------------------------------*/ + void GameObject::DetachChildren() + { + // Validity Checks + if (!valid) + throw gcnew System::NullReferenceException(); + auto node = GetSceneNode(); + if (!node) + throw gcnew System::NullReferenceException(); + + // Unparent all children to the root + for (auto child : node->GetChildren()) + { + child->SetParent(nullptr); + ChildListCache::UpdateChildList(child->GetEntityID()); + } + ChildListCache::UpdateChildList(entity); + } + + GameObject GameObject::GetChild(int index) + { + // Validity Checks + if (!valid) + throw gcnew System::NullReferenceException(); + auto node = GetSceneNode(); + if (!node) + throw gcnew System::NullReferenceException(); + + auto child = node->GetChild(index); + return child ? GameObject(child->GetEntityID()) : GameObject(); + } + + System::Collections::Generic::IEnumerable^ GameObject::GetChildren() + { + return ChildListCache::GetChildList(entity); + } + + int GameObject::GetSiblingIndex() + { + throw gcnew System::NotImplementedException(); + } + + bool GameObject::IsChildOf(GameObject gameObj) + { + // Search parents recursively + auto node = GetSceneNode(); + while (node != nullptr) + { + if (node->GetEntityID() == gameObj.entity) + return true; + + // Go up higher + node = node->GetParent(); + } + return false; + } + + void GameObject::SetAsFirstSibling() + { + throw gcnew System::NotImplementedException(); + } + + void GameObject::SetAsLastSibling() + { + throw gcnew System::NotImplementedException(); + } + + void GameObject::SetSiblingIndex(int index) + { + throw gcnew System::NotImplementedException(); + } + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + GameObject::operator bool(GameObject gameObj) + { + return gameObj.valid; + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ @@ -245,11 +341,15 @@ namespace SHADE } /*---------------------------------------------------------------------------------*/ - /* Operator Overloads */ + /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - GameObject::operator bool(GameObject gameObj) + SHSceneNode* GameObject::GetSceneNode() { - return gameObj.valid; + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + const auto* ROOT = SCENE_GRAPH.GetRoot(); + if (!ROOT) + return nullptr; + return SCENE_GRAPH.GetNode(entity); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 030b917c..ec75f9d9 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -20,7 +20,7 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ + /* Forward Declarations */ /*---------------------------------------------------------------------------------*/ ref class Script; ref class BaseComponent; @@ -97,10 +97,17 @@ namespace SHADE /// /// The parent entity for this GameObject. /// - property GameObject^ Parent + property GameObject Parent { - GameObject^ get(); - void set(GameObject^); + GameObject get(); + void set(GameObject); + } + /// + /// Number of Children held by this GameObject + /// + property int ChildCount + { + int get(); } /*-----------------------------------------------------------------------------*/ @@ -120,8 +127,7 @@ namespace SHADE /// /// Whether to activate or deactivate this GameObject. /// - void SetActive(bool active); - + void SetActive(bool active); /*-----------------------------------------------------------------------------*/ /* Component Access Functions */ @@ -214,6 +220,82 @@ namespace SHADE generic where T : ref class, Script void RemoveScript(); + /*-----------------------------------------------------------------------------*/ + /* Scene Graph Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Unparents all children. Useful if you want to destroy the root of a hierarchy + /// without destroying the children. + /// + void DetachChildren(); + /// + /// Returns a child by index. + /// + /// Index of the child GameObject to retrieve. + /// + /// Handle to the GameObject if the index is valid. Invalid GameObject otherwise. + /// + GameObject GetChild(int index); + /// + /// Returns a cached enumerable container of child GameObjects of this + /// GameObject. + /// + /// + /// Enumerable container of child GameObjects of this GameObject. Null if + /// ChildCount is 0. + /// + System::Collections::Generic::IEnumerable^ GetChildren(); + /// + /// Gets the sibling index. Use GetSiblingIndex to find out the GameObject’s + /// place in this hierarchy. When the sibling index of a GameObject is changed, + /// its order in the Hierarchy window will also change. + /// + /// + /// Index of this GameObject among the parent GameObject's children. + /// + [System::ObsoleteAttribute("Not yet implemented.", true)] + int GetSiblingIndex(); + /// + /// Checks if this GameObject a direct or indirect child of the specified + /// GameObject. + /// + /// + /// True if this GameObject is a child, deep child (child of a child) or + /// identical to this GameObject, otherwise false. + /// + bool IsChildOf(GameObject gameObj); + /// + /// Move the GameObject to the start of the parent GameObject's children list. + /// + [System::ObsoleteAttribute("Not yet implemented.", true)] + void SetAsFirstSibling(); + /// + /// Move the GameObject to the end of the parent GameObject's children list. + /// + [System::ObsoleteAttribute("Not yet implemented.", true)] + void SetAsLastSibling(); + /// + /// Move the GameObject to the specified position in the parent GameObject's + /// children list. An existing object at that position if any, will be pushed + /// to the next index (existing element will be at index + 1). + /// + /// + /// Position to place this GameObject at in the hierarchy. Clamped to between + /// [0, parent.ChildCount]. + /// + [System::ObsoleteAttribute("Not yet implemented.", true)] + void SetSiblingIndex(int index); + + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a GameObject is valid. + /// + /// GameObjects to check. + /// True if the GameObject is valid. + static operator bool(GameObject gameObj); + internal: /*-----------------------------------------------------------------------------*/ /* Constructors */ @@ -249,13 +331,13 @@ namespace SHADE SHEntity& GetNativeEntity(); /*-----------------------------------------------------------------------------*/ - /* Operator Overloads */ + /* Helper Functions */ /*-----------------------------------------------------------------------------*/ /// - /// Implicit conversion operator to enable checking if a GameObject is valid. + /// Retrieves the SceneNode for this GameObject's referenced entity. /// - /// GameObjects to check. - static operator bool(GameObject gameObj); + /// Pointer to the SceneNode for this GameObject.. + SHSceneNode* GetSceneNode(); private: /*-----------------------------------------------------------------------------*/ From 8512c658f9503acc83dca3a5e0ad9c6ba8089732 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 18:32:47 +0800 Subject: [PATCH 702/793] Made GameObject an IEnumerable to follow Unity's Transform interface for iterating through children --- SHADE_Managed/src/Engine/GameObject.cxx | 20 ++++++++++++++++++++ SHADE_Managed/src/Engine/GameObject.hxx | 11 ++++++++++- TempScriptsFolder/RaccoonShowcase.cs | 5 +++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index ece163f9..e7cc4445 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -265,6 +265,9 @@ namespace SHADE System::Collections::Generic::IEnumerable^ GameObject::GetChildren() { + // Validity Checks + if (!valid) + throw gcnew System::NullReferenceException(); return ChildListCache::GetChildList(entity); } @@ -390,4 +393,21 @@ namespace SHADE { return !(lhs == rhs); } + + /*---------------------------------------------------------------------------------*/ + /* IEnummerable */ + /*---------------------------------------------------------------------------------*/ + System::Collections::Generic::IEnumerator^ GameObject::GetEnumerator() + { + System::Collections::Generic::IEnumerable^ childList = GetChildren(); + if (childList == nullptr) + return System::Linq::Enumerable::Empty()->GetEnumerator(); + else + return childList->GetEnumerator(); + } + + System::Collections::IEnumerator^ GameObject::GetEnumeratorNonGeneric() + { + return GetEnumerator(); + } } diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index ec75f9d9..ce1dd3eb 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -32,8 +32,9 @@ namespace SHADE /// Lightweight object for an Entity that allows for easy access to Component and /// Script operations. /// Can be set to a invalid/null GameObject by default construction. + /// Can also be iterated to access children. ///
    - public value class GameObject : public System::IEquatable + public value class GameObject : public System::IEquatable, public System::Collections::Generic::IEnumerable { public: /*-----------------------------------------------------------------------------*/ @@ -386,6 +387,14 @@ namespace SHADE /// Another GameObject to check with. /// True if both Components are different. static bool operator!=(GameObject lhs, GameObject rhs); + + /*-----------------------------------------------------------------------------*/ + /* IEnummerable */ + /*-----------------------------------------------------------------------------*/ + /// + System::Collections::Generic::IEnumerator^ GetEnumerator() override; + /// + System::Collections::IEnumerator^ GetEnumeratorNonGeneric() override = System::Collections::IEnumerable::GetEnumerator; }; } diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs index da0b89d2..2fc8104d 100644 --- a/TempScriptsFolder/RaccoonShowcase.cs +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -27,6 +27,11 @@ public class RaccoonShowcase : Script Debug.LogError("Transform is NULL!"); } + foreach (var child in Owner) + { + Debug.Log(child.Name); + } + originalScale = Transform.LocalScale.z; } protected override void update() From 715699b63bcb9d2d4561fb021f66f8f0574b458c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 20:18:50 +0800 Subject: [PATCH 703/793] Add interface for C# light class and modified Color to match Unity's interface --- SHADE_Managed/src/Components/Light.cxx | 79 ++++++++++++ SHADE_Managed/src/Components/Light.hxx | 125 +++++++++++++++++++ SHADE_Managed/src/Engine/ECS.cxx | 10 +- SHADE_Managed/src/Graphics/Color.hxx | 160 ++++++++++++------------- SHADE_Managed/src/Utility/Convert.cxx | 10 ++ SHADE_Managed/src/Utility/Convert.hxx | 13 ++ 6 files changed, 308 insertions(+), 89 deletions(-) create mode 100644 SHADE_Managed/src/Components/Light.cxx create mode 100644 SHADE_Managed/src/Components/Light.hxx diff --git a/SHADE_Managed/src/Components/Light.cxx b/SHADE_Managed/src/Components/Light.cxx new file mode 100644 index 00000000..a220c79a --- /dev/null +++ b/SHADE_Managed/src/Components/Light.cxx @@ -0,0 +1,79 @@ +/************************************************************************************//*! +\file Light.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 8, 2022 +\brief Contains the definition of the functions of the managed Light class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Light.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Light::Light(Entity entity) + : Component(entity) + {} + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + Vector3 Light::Position::get() + { + return Convert::ToCLI(GetNativeComponent()->GetPosition()); + } + void Light::Position::set(Vector3 value) + { + GetNativeComponent()->SetPosition(Convert::ToNative(value)); + } + Light::Type Light::LightType::get() + { + return static_cast(GetNativeComponent()->GetType()); + } + void Light::LightType::set(Light::Type value) + { + GetNativeComponent()->SetType(static_cast(value)); + } + Vector3 Light::Direction::get() + { + return Convert::ToCLI(GetNativeComponent()->GetDirection()); + } + void Light::Direction::set(Vector3 value) + { + GetNativeComponent()->SetDirection(Convert::ToNative(value)); + } + Color Light::Color::get() + { + return Convert::ToCLI(SHColour(GetNativeComponent()->GetColor())); + } + void Light::Color::set(SHADE::Color value) + { + GetNativeComponent()->SetColor(Convert::ToNative(value)); + } + System::UInt32 Light::CullingMask::get() + { + return GetNativeComponent()->GetCullingMask(); + } + void Light::CullingMask::set(System::UInt32 value) + { + GetNativeComponent()->SetCullingMask(value); + } + float Light::Strength::get() + { + return GetNativeComponent()->GetStrength(); + } + void Light::Strength::set(float value) + { + GetNativeComponent()->SetStrength(value); + } +} diff --git a/SHADE_Managed/src/Components/Light.hxx b/SHADE_Managed/src/Components/Light.hxx new file mode 100644 index 00000000..9abb05d5 --- /dev/null +++ b/SHADE_Managed/src/Components/Light.hxx @@ -0,0 +1,125 @@ +/************************************************************************************//*! +\file Light.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 8, 2022 +\brief Contains the definition of the managed Light class with the declaration + of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +// External Dependencies +#include "Graphics/MiddleEnd/Lights/SHLightComponent.h" + +namespace SHADE +{ + /// + /// CLR version of the SHADE Engine's SHLightComponent. + /// + public ref class Light : public Component + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a Light Component that represents a native Light component tied to + /// the specified Entity. + /// + /// Entity that this Component will be tied to. + Light(Entity entity); + + public: + /*-----------------------------------------------------------------------------*/ + /* Constants */ + /*-----------------------------------------------------------------------------*/ + /// + /// Supported types of the Light Component. + /// + enum class Type + { + /// + /// Light applied uniformly across the scene at a specified direction. + /// + Directional, + /// + /// Light that originates from a certain point in all directions. + /// Not implemented yet. + /// + Point, + /// + /// Light that originates from a certain point within a angle. + /// Not implemented yet. + /// + Spot, + /// + /// Light applied to all objects. Has no source point. + /// + Ambient + }; + + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Position of the light. Only works for Point Light (unimplemented). + /// + [System::ObsoleteAttribute("Not implemented yet.", true)] + property Vector3 Position + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Type of lighting that this Light component will apply onto the scene. + /// + property Type LightType + { + Type get(); + void set(Type val); + } + /// + /// Direction of the light. Only applicable for Directional Lights. + /// + property Vector3 Direction + { + Vector3 get(); + void set(Vector3 val); + } + /// + /// Colour of the Light. + /// + property SHADE::Color Color + { + SHADE::Color get(); + void set(SHADE::Color val); + } + /// + /// Culling mask that is used to control what types of Materials would be + /// affected by this Light. + /// + property System::UInt32 CullingMask + { + System::UInt32 get(); + void set(System::UInt32 val); + } + /// + /// Intensity of the Light + /// + property float Strength + { + float get(); + void set(float val); + } + }; +} + diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 3da39394..00c3c182 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -22,8 +22,8 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" #include "Math/Transform/SHTransformComponent.h" -#include "Physics\Components\SHColliderComponent.h" -#include "Physics\Components\SHRigidBodyComponent.h" +#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Components/SHRigidBodyComponent.h" #include "Scene/SHSceneManager.h" #include "Scene/SHSceneGraph.h" #include "Tools/SHLog.h" @@ -31,10 +31,11 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" #include "Components/Transform.hxx" -#include "Components\RigidBody.hxx" -#include "Components\Collider.hxx" +#include "Components/RigidBody.hxx" +#include "Components/Collider.hxx" #include "Components/Camera.hxx" #include "Components/CameraArm.hxx" +#include "Components/Light.hxx" namespace SHADE { @@ -252,6 +253,7 @@ namespace SHADE componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Graphics/Color.hxx b/SHADE_Managed/src/Graphics/Color.hxx index d6a46216..64152394 100644 --- a/SHADE_Managed/src/Graphics/Color.hxx +++ b/SHADE_Managed/src/Graphics/Color.hxx @@ -25,95 +25,85 @@ namespace SHADE { public: /*-----------------------------------------------------------------------------*/ - /* Type Definitions */ + /* Properties */ /*-----------------------------------------------------------------------------*/ /// - /// A static class that contains a set of default Colors. + /// Pure black. /// - ref class Defaults abstract sealed + static property Color Black { - public: - /*-------------------------------------------------------------------------*/ - /* Properties */ - /*-------------------------------------------------------------------------*/ - /// - /// Pure black. - /// - static property Color Black - { - Color get() { return Color(0.0f, 0.0f, 0.0f); } - } - /// - /// Light Gray, lighter than gray. - /// - static property Color LightGray - { - Color get() { return Color(0.827451f, 0.827451f, 0.827451f); } - } - /// - /// Gray, halfway between black and white. - /// - static property Color Gray - { - Color get() { return Color(0.5f, 0.5f, 0.5f); } - } - /// - /// Dark Gray, darker than gray. - /// - static property Color DarkGray - { - Color get() { return Color(0.622f, 0.622f, 0.622f); } - } - /// - /// Pure white. - /// - static property Color White - { - Color get() { return Color(1.0f, 1.0f, 1.0f); } - } - /// - /// Pure red. - /// - static property Color Red - { - Color get() { return Color(1.0f, 0.0f, 0.0f); } - } - /// - /// Pure green. - /// - static property Color Green - { - Color get() { return Color(0.0f, 1.0f, 0.0f); } - } - /// - /// Pure blue. - /// - static property Color Blue - { - Color get() { return Color(0.0f, 0.0f, 1.0f); } - } - /// - /// Pure cyan, mix of pure green and blue. - /// - static property Color Cyan - { - Color get() { return Color(0.0f, 1.0f, 1.0f); } - } - /// - /// Pure magenta, mix of pure red and blue. - /// - static property Color Magenta - { - Color get() { return Color(1.0f, 0.0f, 1.0f); } - } - /// - /// Pure yellow, mix of pure red and green. - /// - static property Color Yellow - { - Color get() { return Color(1.0f, 1.0f, 0.0f); } - } - }; + Color get() { return Color(0.0f, 0.0f, 0.0f); } + } + /// + /// Light Gray, lighter than gray. + /// + static property Color LightGray + { + Color get() { return Color(0.827451f, 0.827451f, 0.827451f); } + } + /// + /// Gray, halfway between black and white. + /// + static property Color Gray + { + Color get() { return Color(0.5f, 0.5f, 0.5f); } + } + /// + /// Dark Gray, darker than gray. + /// + static property Color DarkGray + { + Color get() { return Color(0.622f, 0.622f, 0.622f); } + } + /// + /// Pure white. + /// + static property Color White + { + Color get() { return Color(1.0f, 1.0f, 1.0f); } + } + /// + /// Pure red. + /// + static property Color Red + { + Color get() { return Color(1.0f, 0.0f, 0.0f); } + } + /// + /// Pure green. + /// + static property Color Green + { + Color get() { return Color(0.0f, 1.0f, 0.0f); } + } + /// + /// Pure blue. + /// + static property Color Blue + { + Color get() { return Color(0.0f, 0.0f, 1.0f); } + } + /// + /// Pure cyan, mix of pure green and blue. + /// + static property Color Cyan + { + Color get() { return Color(0.0f, 1.0f, 1.0f); } + } + /// + /// Pure magenta, mix of pure red and blue. + /// + static property Color Magenta + { + Color get() { return Color(1.0f, 0.0f, 1.0f); } + } + /// + /// Pure yellow, mix of pure red and green. + /// + static property Color Yellow + { + Color get() { return Color(1.0f, 1.0f, 0.0f); } + } /*-----------------------------------------------------------------------------*/ /* Constructors */ diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 1d89569f..3b1f0f38 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -72,6 +72,16 @@ namespace SHADE return Ray(ToCLI(vec.position), ToCLI(vec.direction)); } + SHColour Convert::ToNative(Color col) + { + return SHColour(col.r, col.g, col.b, col.a); + } + + Color Convert::ToCLI(const SHColour& vec) + { + return Color(vec.x, vec.y, vec.z, vec.w); + } + /*---------------------------------------------------------------------------------*/ /* String Conversions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index d3dca740..666b5062 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -29,6 +29,8 @@ of DigiPen Institute of Technology is prohibited. #include "Math/Quaternion.hxx" #include "Math/Ray.hxx" #include "Engine/GenericHandle.hxx" +#include "Math/SHColour.h" +#include "Graphics/Color.hxx" namespace SHADE { @@ -104,6 +106,17 @@ namespace SHADE /// The native Vector2 to convert from. /// Managed copy of a native Vector2. static Ray ToCLI(const SHRay& vec); + /// Converts from a managed Color to a native Colour. + ///
    + /// The managed Color to convert from. + /// Native copy of a managed Color. + static SHColour ToNative(Color col); + /// + /// Converts from a native Colour to a managed Color. + /// + /// The native Colour to convert from. + /// Managed copy of a native Colour. + static Color ToCLI(const SHColour& vec); /*-----------------------------------------------------------------------------*/ /* String Conversions */ From e89f5b4b9e0b640b93abe1456cdfd9b24491a777 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 20:49:07 +0800 Subject: [PATCH 704/793] Added OnDrawGizmos for debug draw for scripts --- .../src/Application/SBApplication.cpp | 1 + SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 6 ++++++ SHADE_Engine/src/Scripting/SHScriptEngine.h | 7 +++++++ .../src/Scripting/SHScriptEngineRoutines.cpp | 11 +++++++++++ SHADE_Managed/src/Scripts/Script.cxx | 12 ++++++++++++ SHADE_Managed/src/Scripts/Script.hxx | 17 +++++++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 18 ++++++++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.hxx | 4 ++++ 8 files changed, 76 insertions(+) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index f4102067..6b67dbce 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -106,6 +106,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 4a73342e..827f45a2 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -379,6 +379,12 @@ namespace SHADE DEFAULT_CSHARP_LIB_NAME, DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "ExecuteLateUpdate" + ); + csScriptsExecuteDrawGizmos = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteOnDrawGizmos" ); csScriptsExecutePhysicsEvents = dotNet.GetFunctionPtr ( diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 9ddd617a..7d83606e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -55,6 +55,12 @@ namespace SHADE LateUpdateRoutine(); void Execute(double dt) noexcept override final; }; + class SH_API GizmosDrawRoutine final : public SHSystemRoutine + { + public: + GizmosDrawRoutine(); + void Execute(double dt) noexcept override final; + }; class SH_API FrameCleanUpRoutine final : public SHSystemRoutine { public: @@ -250,6 +256,7 @@ namespace SHADE CsFuncPtr csScriptsExecuteFixedUpdate = nullptr; CsFuncPtr csScriptsExecuteUpdate = nullptr; CsFuncPtr csScriptsExecuteLateUpdate = nullptr; + CsFuncPtr csScriptsExecuteDrawGizmos = nullptr; CsFuncPtr csScriptsExecutePhysicsEvents = nullptr; CsFuncPtr csScriptsFrameCleanUp = nullptr; CsScriptManipFuncPtr csScriptsAdd = nullptr; diff --git a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp index a2981c06..699776ca 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp @@ -50,6 +50,17 @@ namespace SHADE reinterpret_cast(system)->csScriptsExecuteLateUpdate(); } + /*-----------------------------------------------------------------------------------*/ + /* System Routine Functions - GizmosDrawRoutine */ + /*-----------------------------------------------------------------------------------*/ + SHScriptEngine::GizmosDrawRoutine::GizmosDrawRoutine() + : SHSystemRoutine("Script Engine Gizmos Draw", true) + {} + void SHScriptEngine::GizmosDrawRoutine::Execute(double dt) noexcept + { + reinterpret_cast(system)->csScriptsExecuteDrawGizmos(); + } + /*-----------------------------------------------------------------------------------*/ /* System Routine Functions - FrameCleanUpRoutine */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index e476d69d..bd6d7bef 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -140,6 +140,13 @@ namespace SHADE lateUpdate(); SAFE_NATIVE_CALL_END(this) } + void Script::OnDrawGizmos() + { + SAFE_NATIVE_CALL_BEGIN + OnGizmosDrawOverriden = true; + onDrawGizmos(); + SAFE_NATIVE_CALL_END(this) + } void Script::OnDestroy() { SAFE_NATIVE_CALL_BEGIN @@ -194,6 +201,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Script::Script(GameObject gameObj) : owner { gameObj } + , OnGizmosDrawOverriden { false } {} /*---------------------------------------------------------------------------------*/ @@ -210,6 +218,10 @@ namespace SHADE void Script::fixedUpdate() {} void Script::update() {} void Script::lateUpdate() {} + void Script::onDrawGizmos() + { + OnGizmosDrawOverriden = false; + } void Script::onDestroy() {} /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index afeaa8a0..bbe36784 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -164,6 +164,14 @@ namespace SHADE static operator bool(Script^ s); internal: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// If true, the OnGizmosDraw function was overridden. + /// + bool OnGizmosDrawOverriden; + /*-----------------------------------------------------------------------------*/ /* "All-Time" Lifecycle Functions */ /*-----------------------------------------------------------------------------*/ @@ -208,6 +216,11 @@ namespace SHADE ///
    void LateUpdate(); /// + /// Used to call onDrawGizmos(). This should be called just before rendering + /// the scene. This will only be called when working in the editor. + /// + void OnDrawGizmos(); + /// /// Used to call onDestroy(). This should be called at the end of the frame /// where the attached GameObject or this script is destroyed directly or /// indirectly due to destruction of the owner. @@ -308,6 +321,10 @@ namespace SHADE /// virtual void lateUpdate(); /// + /// Called every frame just before rendering but only if working in the editor. + /// + virtual void onDrawGizmos(); + /// /// Called just before the end of the frame where the attached GameObject or /// this script is destroyed directly or indirectly due to destruction of the /// owner. diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 407d0fa8..a90b4f12 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -478,6 +478,24 @@ namespace SHADE SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } + void ScriptStore::ExecuteOnDrawGizmos() + { + SAFE_NATIVE_CALL_BEGIN + for each (System::Collections::Generic::KeyValuePair entity in scripts) + { + // Check active state + if (!isEntityActive(entity.Key)) + continue; + + // Update each script + for each (Script^ script in entity.Value) + { + script->OnDrawGizmos(); + } + } + SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") + } + void ScriptStore::ExecuteCollisionFunctions() { SAFE_NATIVE_CALL_BEGIN diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index a4c6e824..c151392f 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -234,6 +234,10 @@ namespace SHADE /// static void ExecuteLateUpdate(); /// + /// Executes OnDrawGizmos() for all scripts. + /// + static void ExecuteOnDrawGizmos(); + /// /// Executes OnCollision*() and OnTrigger*() for all scripts. /// static void ExecuteCollisionFunctions(); From 41b7cb842cdd50cadeb60de0f049c0903a34f820 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 8 Nov 2022 21:31:53 +0800 Subject: [PATCH 705/793] Added C# Gizmos class interface --- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 2 +- SHADE_Managed/src/Utility/Gizmos.cxx | 23 ++++++++++ SHADE_Managed/src/Utility/Gizmos.hxx | 45 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 SHADE_Managed/src/Utility/Gizmos.cxx create mode 100644 SHADE_Managed/src/Utility/Gizmos.hxx diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 883e4894..daa6a23d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -323,7 +323,7 @@ namespace SHADE static const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere(); for (const auto& idx : SPHERE.Indices) { - spherePoints.emplace_back(SPHERE.VertexPositions[idx]); + spherePoints.emplace_back(SPHERE.VertexPositions[idx] * radius); } } drawLineSet(storage, color, spherePoints.begin(), spherePoints.end()); diff --git a/SHADE_Managed/src/Utility/Gizmos.cxx b/SHADE_Managed/src/Utility/Gizmos.cxx new file mode 100644 index 00000000..47d86251 --- /dev/null +++ b/SHADE_Managed/src/Utility/Gizmos.cxx @@ -0,0 +1,23 @@ +/************************************************************************************//*! +\file Gizmos.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 8, 2022 +\brief Contains the definition of the functions for the Convert managed static + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Gizmos.hxx" +// External Dependencies + +namespace SHADE +{ +} diff --git a/SHADE_Managed/src/Utility/Gizmos.hxx b/SHADE_Managed/src/Utility/Gizmos.hxx new file mode 100644 index 00000000..f0b082d7 --- /dev/null +++ b/SHADE_Managed/src/Utility/Gizmos.hxx @@ -0,0 +1,45 @@ +/************************************************************************************//*! +\file Gizmos.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 8, 2022 +\brief Contains the definition of the Gizmos static class and the + declaration of its functions. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Project Includes +#include "Math/Vector3.hxx" +#include "Graphics/Color.hxx" + +namespace SHADE +{ + /// + /// Provides functions for implementing debug drawing. + /// + public value class Gizmos abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Debug Draw Functions */ + /*-----------------------------------------------------------------------------*/ + static void DrawLine(Vector3 from, Vector3 to); + static void DrawLine(Vector3 from, Vector3 to, Color color); + static void DrawWireCube(Vector3 center, Vector3 extents); + static void DrawWireCube(Vector3 center, Vector3 extents, Color color); + static void DrawWireSphere(Vector3 center, float radius); + static void DrawWireSphere(Vector3 center, float radius, Color color); + + private: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + Color defaultColor; + }; +} From 349f4a875b48cfae33226964414aab8660b307aa Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 9 Nov 2022 10:22:11 +0800 Subject: [PATCH 706/793] Added full implementation of Gizmos class --- SHADE_Managed/src/Utility/Gizmos.cxx | 46 +++++++++++++++++++++ SHADE_Managed/src/Utility/Gizmos.hxx | 60 ++++++++++++++++++++++++++-- TempScriptsFolder/RaccoonShowcase.cs | 6 +++ 3 files changed, 108 insertions(+), 4 deletions(-) diff --git a/SHADE_Managed/src/Utility/Gizmos.cxx b/SHADE_Managed/src/Utility/Gizmos.cxx index 47d86251..21636a5d 100644 --- a/SHADE_Managed/src/Utility/Gizmos.cxx +++ b/SHADE_Managed/src/Utility/Gizmos.cxx @@ -16,8 +16,54 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" // Primary Header #include "Gizmos.hxx" +#include "Convert.hxx" +#include "Tools/SHDebugDraw.h" // External Dependencies namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* Public Properties */ + /*---------------------------------------------------------------------------------*/ + Color Gizmos::Color::get() + { + return defaultColor; + } + void Gizmos::Color::set(SHADE::Color color) + { + defaultColor = color; + } + + /*---------------------------------------------------------------------------------*/ + /* Debug Draw Functions */ + /*---------------------------------------------------------------------------------*/ + void Gizmos::DrawLine(Vector3 from, Vector3 to) + { + DrawLine(from, to, defaultColor); + } + + void Gizmos::DrawLine(Vector3 from, Vector3 to, SHADE::Color color) + { + SHDebugDraw::Line(Convert::ToNative(color), Convert::ToNative(from), Convert::ToNative(to)); + } + + void Gizmos::DrawWireCube(Vector3 center, Vector3 extents) + { + DrawWireCube(center, extents, defaultColor); + } + + void Gizmos::DrawWireCube(Vector3 center, Vector3 extents, SHADE::Color color) + { + SHDebugDraw::Cube(Convert::ToNative(color), Convert::ToNative(center), Convert::ToNative(extents)); + } + + void Gizmos::DrawWireSphere(Vector3 center, float radius) + { + DrawWireSphere(center, radius, defaultColor); + } + + void Gizmos::DrawWireSphere(Vector3 center, float radius, SHADE::Color color) + { + SHDebugDraw::Sphere(Convert::ToNative(color), Convert::ToNative(center), radius); + } } diff --git a/SHADE_Managed/src/Utility/Gizmos.hxx b/SHADE_Managed/src/Utility/Gizmos.hxx index f0b082d7..1878d867 100644 --- a/SHADE_Managed/src/Utility/Gizmos.hxx +++ b/SHADE_Managed/src/Utility/Gizmos.hxx @@ -26,20 +26,72 @@ namespace SHADE public value class Gizmos abstract sealed { public: + /*-----------------------------------------------------------------------------*/ + /* Public Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Default colour that will be used for drawing debug primitives if the color + /// parameter is not specified. + /// + static property Color Color + { + SHADE::Color get(); + void set(SHADE::Color color); + } /*-----------------------------------------------------------------------------*/ /* Debug Draw Functions */ /*-----------------------------------------------------------------------------*/ + /// + /// Renders a line between two points in world space. + /// Uses Color to render. + /// + /// First point of the line. + /// Second point of the line. static void DrawLine(Vector3 from, Vector3 to); - static void DrawLine(Vector3 from, Vector3 to, Color color); + /// + /// Renders a line between two points in world space. + /// + /// First point of the line. + /// Second point of the line. + /// Colour of the line. + static void DrawLine(Vector3 from, Vector3 to, SHADE::Color color); + /// + /// Renders a wireframe cube centered around the position specified in world + /// space. + /// Uses Color to render. + /// + /// Position where the cube wil be centered at. + /// Size of the rendered cube. static void DrawWireCube(Vector3 center, Vector3 extents); - static void DrawWireCube(Vector3 center, Vector3 extents, Color color); + /// + /// Renders a wireframe cube centered around the position specified in world + /// space. + /// + /// Position where the cube wil be centered at. + /// Size of the rendered cube. + /// Colour of the cube. + static void DrawWireCube(Vector3 center, Vector3 extents, SHADE::Color color); + /// + /// Renders a wireframe sphere centered around the position specified in world + /// space. + /// Uses Color to render. + /// + /// Position where the sphere wil be centered at. + /// Radius of the rendered sphere. static void DrawWireSphere(Vector3 center, float radius); - static void DrawWireSphere(Vector3 center, float radius, Color color); + /// + /// Renders a wireframe sphere centered around the position specified in world + /// space. + /// + /// Position where the sphere wil be centered at. + /// Radius of the rendered sphere. + /// Colour of the sphere. + static void DrawWireSphere(Vector3 center, float radius, SHADE::Color color); private: /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - Color defaultColor; + static SHADE::Color defaultColor = SHADE::Color::White; }; } diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs index da0b89d2..4583a699 100644 --- a/TempScriptsFolder/RaccoonShowcase.cs +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -36,4 +36,10 @@ public class RaccoonShowcase : Script //Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); //Transform.LocalScale = new Vector3(System.Math.Abs(System.Math.Sin(scale.x)) * originalScale, System.Math.Abs(System.Math.Cos(scale.y)) * originalScale, System.Math.Abs(System.Math.Sin(scale.z)) * originalScale); } + + protected override void onDrawGizmos() + { + Gizmos.DrawLine(new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f)); + Gizmos.DrawLine(new Vector3(-1.0f, 1.0f, 0.0f), new Vector3(1.0f, 1.0f, 0.0f), Color.Red); + } } \ No newline at end of file From a3fe98317dc4be18cbfa0b035062b75ac8abef38 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 9 Nov 2022 10:31:30 +0800 Subject: [PATCH 707/793] Fixed performance issue in scripts editor when multiple attributes are applied onto script fields --- SHADE_Managed/src/Editor/Editor.cxx | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 2afe9697..54200c1e 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -414,19 +414,10 @@ namespace SHADE generic Attribute Editor::hasAttribute(System::Reflection::FieldInfo^ field) { - array^ attributes = field->GetCustomAttributes(true); - for each (System::Object^ attrib in attributes) + array^ attributes = field->GetCustomAttributes(Attribute::typeid, false); + if (attributes->Length > 0) { - try - { - Attribute attribute = safe_cast(attrib); - if (attribute != nullptr) - return attribute; - } - catch (System::InvalidCastException^) - { - continue; - } + return safe_cast(attributes[0]); } // Failed to find return Attribute{}; From bbe8622d1e20c51e2f40499795e7d3bdcad5945f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 9 Nov 2022 14:45:08 +0800 Subject: [PATCH 708/793] De-plushied SHADE_Managed comments --- SHADE_Managed/src/Components/Component.hxx | 2 +- SHADE_Managed/src/Editor/Editor.hxx | 6 +++--- SHADE_Managed/src/Engine/EngineInterface.hxx | 2 +- SHADE_Managed/src/Engine/GameObject.hxx | 2 +- SHADE_Managed/src/Math/Vector2.cxx | 2 +- SHADE_Managed/src/Math/Vector3.cxx | 2 +- SHADE_Managed/src/Math/Vector3.hxx | 3 ++- SHADE_Managed/src/Scripts/Script.cxx | 3 +-- SHADE_Managed/src/Scripts/ScriptStore.hxx | 2 +- SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx | 2 +- SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx index 5ffa3952..e52ab3a7 100644 --- a/SHADE_Managed/src/Components/Component.hxx +++ b/SHADE_Managed/src/Components/Component.hxx @@ -97,7 +97,7 @@ namespace SHADE /// /// Removes all Scripts of the specified type from this GameObject. /// - /// Type of PLushieScripts to remove. + /// Type of Scripts to remove. generic where T : ref class, Script void RemoveScript(); diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 6b59589a..109842b5 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -39,10 +39,10 @@ namespace SHADE /// The Entity to render the Scripts of. static void RenderScriptsInInspector(Entity entity); /// - /// Renders a dropdown button that allows for the addition of PlushieScripts - /// onto the specified Entity. + /// Renders a dropdown button that allows for the addition of Scripts onto the + /// specified Entity. /// - /// The Entity to add PlushieScripts to. + /// The Entity to add Scripts to. static void RenderScriptAddButton(Entity entity); /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/EngineInterface.hxx b/SHADE_Managed/src/Engine/EngineInterface.hxx index 4fd8f7b3..37ded4eb 100644 --- a/SHADE_Managed/src/Engine/EngineInterface.hxx +++ b/SHADE_Managed/src/Engine/EngineInterface.hxx @@ -20,7 +20,7 @@ namespace SHADE { /// /// Static class that contains the functions for interfacing with the core - /// PlushieEngine written in C++ for managing the lifecycle of managed code. + /// SHADE Engine written in C++ for managing the lifecycle of managed code. /// private ref class EngineInterface abstract sealed { diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 030b917c..02a0ed4f 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -210,7 +210,7 @@ namespace SHADE /// /// Removes all Scripts of the specified type from this GameObject. /// - /// Type of PLushieScripts to remove. + /// Type of Scripts to remove. generic where T : ref class, Script void RemoveScript(); diff --git a/SHADE_Managed/src/Math/Vector2.cxx b/SHADE_Managed/src/Math/Vector2.cxx index 42080d60..8242a11c 100644 --- a/SHADE_Managed/src/Math/Vector2.cxx +++ b/SHADE_Managed/src/Math/Vector2.cxx @@ -276,4 +276,4 @@ namespace SHADE { return !(lhs == rhs); } -} // namespace PlushieAPI::Mathematics \ No newline at end of file +} diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index 83adbb38..f2286aa7 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -294,4 +294,4 @@ namespace SHADE { return Vector3(vec); } -} // namespace PlushieAPI::Mathematics \ No newline at end of file +} diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index 4cdf653e..189f2930 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -439,4 +439,5 @@ namespace SHADE /// Vector2 to convert from. static explicit operator Vector3(Vector2 vec); }; -} // namespace PlushieAPI::Mathematics +} + diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index bd6d7bef..9d6cadb8 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -3,8 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Oct 28, 2021 -\brief Contains the definition of the functions for the PlushieScript managed - class. +\brief Contains the definition of the functions for the Script managed class. Note: This file is written in C++17/CLI. diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index c151392f..23440f3d 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -36,7 +36,7 @@ namespace SHADE ///
    /// /// Type of script to add. - /// This needs to be a default constructable PlushieScript. + /// This needs to be a default constructable Script. /// /// The entity to add a script to. /// Reference to the script added. diff --git a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx index ebf2e987..e19c4d06 100644 --- a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx +++ b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.cxx @@ -33,4 +33,4 @@ namespace SHADE { return nullptr; } -} // namespace PlushieAPI \ No newline at end of file +} diff --git a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx index 433dd85e..14d612b3 100644 --- a/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx +++ b/SHADE_Managed/src/Utility/DisposableAssemblyLoadContext.hxx @@ -36,4 +36,4 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ System::Reflection::Assembly^ Load(System::Reflection::AssemblyName^ assemblyName) override; }; -} // namespace PlushieAPI \ No newline at end of file +} From 4731df28f0e805fd8cd77f57a212e484182e61c2 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 02:16:33 +0800 Subject: [PATCH 709/793] Skeleton for Reworked Physics Debug Draw --- .../src/Application/SBApplication.cpp | 13 +- .../Inspector/SHEditorComponentView.hpp | 8 +- .../GlobalData/SHGraphicsGlobalData.cpp | 2 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 8 +- .../Components/SHColliderComponent.cpp | 4 +- SHADE_Engine/src/Physics/SHCollisionShape.cpp | 3 +- SHADE_Engine/src/Physics/SHCollisionShape.h | 2 +- .../src/Physics/SHPhysicsDebugDrawSystem.cpp | 169 ++++++++++++++++++ .../src/Physics/SHPhysicsDebugDrawSystem.h | 120 +++++++++++++ SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 16 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 154 +--------------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 86 +++++---- .../src/Serialization/SHYAMLConverters.h | 8 +- SHADE_Engine/src/Tools/SHUtilities.h | 12 +- SHADE_Engine/src/Tools/SHUtilities.hpp | 7 - 15 files changed, 364 insertions(+), 248 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index f4102067..0bf99e78 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -101,7 +101,6 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); - SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); @@ -160,12 +159,12 @@ namespace Sandbox SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); editor->PollPicking(); - static bool drawColliders = false; - if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::F10)) - { - drawColliders = !drawColliders; - SHSystemManager::GetSystem()->SetDrawColliders(drawColliders); - } + //static bool drawColliders = false; + //if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::F10)) + //{ + // drawColliders = !drawColliders; + // SHSystemManager::GetSystem()->SetDrawColliders(drawColliders); + //} } // Finish all graphics jobs first graphicsSystem->AwaitGraphicsExecution(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 85d10c1a..7e7db174 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -246,21 +246,21 @@ namespace SHADE if (collider->GetType() == SHCollisionShape::Type::BOX) { SHEditorWidgets::BeginPanel(std::format("{} Box #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - auto box = reinterpret_cast(collider->GetShape()); + const auto* BOX = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( "Half Extents", { "X", "Y", "Z" }, - [box] { return box->GetRelativeExtents(); }, + [BOX] { return BOX->GetRelativeExtents(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } else if (collider->GetType() == SHCollisionShape::Type::SPHERE) { SHEditorWidgets::BeginPanel(std::format("{} Sphere #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - auto sphere = reinterpret_cast(collider->GetShape()); + const auto* SPHERE = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( "Radius", - [sphere] { return sphere->GetRelativeRadius(); }, + [SPHERE] { return SPHERE->GetRelativeRadius(); }, [collider](float const& value) { collider->SetBoundingSphere(value); }); } else if (collider->GetType() == SHCollisionShape::Type::CAPSULE) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 53adf2fe..de42d9a3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -60,7 +60,7 @@ namespace SHADE }); - for (uint32_t i = 1; i <= SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); ++i) + for (uint32_t i = 1; i <= SHUtilities::ConvertEnum(SH_LIGHT_TYPE::NUM_TYPES); ++i) { lightBindings.push_back (SHVkDescriptorSetLayout::Binding { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 02bd8f1f..51eaf5f1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -379,7 +379,7 @@ namespace SHADE SHComponentManager::CreateComponentSparseSet(); logicalDevice = device; - uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ConvertEnum(SH_LIGHT_TYPE::NUM_TYPES); std::vector variableSizes{ NUM_LIGHT_TYPES }; std::fill (variableSizes.begin(), variableSizes.end(), 1); @@ -431,7 +431,7 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::Run(SHMatrix const& viewMat, uint32_t frameIndex) noexcept { - static uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + static uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ConvertEnum(SH_LIGHT_TYPE::NUM_TYPES); auto& lightComps = SHComponentManager::GetDense(); bool expanded = false; @@ -451,7 +451,7 @@ namespace SHADE for (auto& light : lightComps) { - auto enumValue = SHUtilities::ToUnderlying(light.GetLightData().type); + auto enumValue = SHUtilities::ConvertEnum(light.GetLightData().type); // First we want to make sure the light is already bound to the system. if it // isn't, we write it to the correct buffer. @@ -491,7 +491,7 @@ namespace SHADE // is a new buffer. If some expansion was detected, update descriptor sets. if (expanded) { - uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ConvertEnum(SH_LIGHT_TYPE::NUM_TYPES); for (uint32_t i = 0; i < NUM_LIGHT_TYPES; ++i) { UpdateDescSet(i); diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index 93126fc5..864de46f 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -88,7 +88,7 @@ namespace SHADE { case SHCollisionShape::Type::BOX: { - auto* box = reinterpret_cast(collisionShape.GetShape()); + auto* box = reinterpret_cast(collisionShape.shape); const SHVec3& RELATIVE_EXTENTS = box->GetRelativeExtents(); // Recompute world extents based on new scale and fixed relative extents @@ -99,7 +99,7 @@ namespace SHADE } case SHCollisionShape::Type::SPHERE: { - auto* sphere = reinterpret_cast(collisionShape.GetShape()); + auto* sphere = reinterpret_cast(collisionShape.shape); const float RELATIVE_RADIUS = sphere->GetRelativeRadius(); // Recompute world radius based on new scale and fixed radius diff --git a/SHADE_Engine/src/Physics/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/SHCollisionShape.cpp index c8f8020c..bc2347e7 100644 --- a/SHADE_Engine/src/Physics/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/SHCollisionShape.cpp @@ -164,9 +164,8 @@ namespace SHADE return rotationOffset; } - SHShape* SHCollisionShape::GetShape() noexcept + const SHShape* SHCollisionShape::GetShape() const noexcept { - dirty = true; return shape; } diff --git a/SHADE_Engine/src/Physics/SHCollisionShape.h b/SHADE_Engine/src/Physics/SHCollisionShape.h index 9c8c1d41..526428fd 100644 --- a/SHADE_Engine/src/Physics/SHCollisionShape.h +++ b/SHADE_Engine/src/Physics/SHCollisionShape.h @@ -82,7 +82,7 @@ namespace SHADE [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; [[nodiscard]] const SHVec3& GetRotationOffset () const noexcept; - [[nodiscard]] SHShape* GetShape () noexcept; + [[nodiscard]] const SHShape* GetShape () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp new file mode 100644 index 00000000..514fb749 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp @@ -0,0 +1,169 @@ +/**************************************************************************************** + * \file SHPhysicsDebugDrawSystem.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for the Physics Debug Draw System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsDebugDrawSystem.h" + +// Project Headers +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHPhysicsDebugDrawSystem::DebugDrawFunction SHPhysicsDebugDrawSystem::drawFunctions[SHPhysicsDebugDrawSystem::NUM_FLAGS] = + { + SHPhysicsDebugDrawSystem::drawColliders + , SHPhysicsDebugDrawSystem::drawColliderAABBs + , SHPhysicsDebugDrawSystem::drawBroadPhaseAABBs + , SHPhysicsDebugDrawSystem::drawContactPoints + , SHPhysicsDebugDrawSystem::drawContactNormals + }; + + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsDebugDrawSystem::SHPhysicsDebugDrawSystem() noexcept + : debugDrawFlags { 0 } + , physicsSystem { nullptr } + , rp3dDebugRenderer { nullptr } + { + debugColours[SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER)] = + debugColours[SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER_AABB)] = SHColour::YELLOW; + debugColours[SHUtilities::ConvertEnum(DebugDrawFlags::BROAD_PHASE_AABB)] = SHColour::CYAN; + debugColours[SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_POINTS)] = SHColour::RED; + debugColours[SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_NORMALS)] = SHColour::RED; + } + + SHPhysicsDebugDrawSystem::PhysicsDebugDrawRoutine::PhysicsDebugDrawRoutine() + : SHSystemRoutine { "Physics Debug Draw", true } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHPhysicsDebugDrawSystem::GetDebugDrawFlag(DebugDrawFlags flag) const noexcept + { + const auto INT_FLAG = SHUtilities::ConvertEnum(flag); + if (INT_FLAG < 0 || INT_FLAG >= NUM_FLAGS) + { + SHLOG_ERROR("Invalid Debug Draw Flag Passed {} in. Unable to get debug draw state!", INT_FLAG) + return false; + } + + return debugDrawFlags & 1U << SHUtilities::ConvertEnum(flag); + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsDebugDrawSystem::SetDebugDrawFlag(DebugDrawFlags flag, bool value) noexcept + { + const auto INT_FLAG = SHUtilities::ConvertEnum(flag); + if (INT_FLAG < 0 || INT_FLAG >= NUM_FLAGS) + { + SHLOG_ERROR("Invalid Debug Draw Flag Passed {} in. Unable to set debug draw state!", INT_FLAG) + return; + } + + value ? (debugDrawFlags |= 1U << INT_FLAG) : (debugDrawFlags &= ~(1U << INT_FLAG)); + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsDebugDrawSystem::Init() + { + SHASSERT(physicsSystem == nullptr, "Non-existent physics system attached to the physics debug draw system!") + physicsSystem = SHSystemManager::GetSystem(); + } + + void SHPhysicsDebugDrawSystem::Exit() + { + physicsSystem = nullptr; + } + + void SHPhysicsDebugDrawSystem::PhysicsDebugDrawRoutine::Execute(double) noexcept + { + + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsDebugDrawSystem::drawColliders(rp3d::DebugRenderer* debugRenderer) noexcept + { + auto* debugDrawSystem = SHSystemManager::GetSystem(); + if (debugDrawSystem == nullptr) + { + SHLOG_ERROR("Unable to get a debug draw system for Physics Debug Drawing!") + return; + } + + const auto& COLLIDER_SET = SHComponentManager::GetDense(); + for (const auto& COLLIDER : COLLIDER_SET) + { + // Get the colliders of each component + const SHVec3& POS = COLLIDER.GetPosition(); + const SHQuaternion& ROT = COLLIDER.GetOrientation(); + + for (auto& collisionShape : COLLIDER.GetCollisionShapes()) + { + switch (collisionShape.GetType()) + { + case SHCollisionShape::Type::BOX: + { + auto* BOX = reinterpret_cast(collisionShape.GetShape()); + + break; + } + case SHCollisionShape::Type::SPHERE: + { + + + break; + } + default: break; + } + } + } + } + + void SHPhysicsDebugDrawSystem::drawColliderAABBs(rp3d::DebugRenderer* debugRenderer) noexcept + { + + } + + void SHPhysicsDebugDrawSystem::drawBroadPhaseAABBs(rp3d::DebugRenderer* debugRenderer) noexcept + { + + } + + void SHPhysicsDebugDrawSystem::drawContactPoints(rp3d::DebugRenderer* debugRenderer) noexcept + { + + } + + void SHPhysicsDebugDrawSystem::drawContactNormals(rp3d::DebugRenderer* debugRenderer) noexcept + { + + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h new file mode 100644 index 00000000..860d99d8 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h @@ -0,0 +1,120 @@ +/**************************************************************************************** + * \file SHPhysicsDebugDrawSystem.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for the Physics Debug Draw System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "ECS_Base/System/SHSystemRoutine.h" +#include "Math/SHColour.h" +#include "SHPhysicsSystem.h" +#include "Tools/SHUtilities.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHPhysicsDebugDrawSystem : public SHSystem + { + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class DebugDrawFlags + { + COLLIDER + , COLLIDER_AABB + , BROAD_PHASE_AABB + , CONTACT_POINTS + , CONTACT_NORMALS + + , NUM_FLAGS + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsDebugDrawSystem() noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + bool GetDebugDrawFlag(DebugDrawFlags flag) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetDebugDrawFlag(DebugDrawFlags flag, bool value) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void Init() override; + void Exit() override; + + /*---------------------------------------------------------------------------------*/ + /* System Routines */ + /*---------------------------------------------------------------------------------*/ + + class SH_API PhysicsDebugDrawRoutine : public SHSystemRoutine + { + public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ + + PhysicsDebugDrawRoutine(); + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + void Execute(double dt) noexcept override; + }; + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + using DebugDrawFunction = void(*)(rp3d::DebugRenderer*) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + static constexpr int NUM_FLAGS = SHUtilities::ConvertEnum(DebugDrawFlags::NUM_FLAGS); + + static const DebugDrawFunction drawFunctions[NUM_FLAGS]; + + uint8_t debugDrawFlags; + SHPhysicsSystem* physicsSystem; + rp3d::DebugRenderer* rp3dDebugRenderer; + SHColour debugColours[NUM_FLAGS]; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + static void drawColliders (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawColliderAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawBroadPhaseAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawContactPoints (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawContactNormals (rp3d::DebugRenderer* debugRenderer) noexcept; + }; + +} // namespace SHADE diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 00c6943b..26e3e786 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -136,16 +136,16 @@ namespace SHADE { case SHCollisionShape::Type::BOX: { - const auto* box = reinterpret_cast(collider->GetShape()); - rp3d::BoxShape* newBox = factory->createBoxShape(box->GetWorldExtents()); + const auto* BOX = reinterpret_cast(collider->GetShape()); + rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); rp3dBody->addCollider(newBox, OFFSETS); break; } case SHCollisionShape::Type::SPHERE: { - const auto* sphere = reinterpret_cast(collider->GetShape()); - rp3d::SphereShape* newSphere = factory->createSphereShape(sphere->GetWorldRadius()); + const auto* SPHERE = reinterpret_cast(collider->GetShape()); + rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); rp3dBody->addCollider(newSphere, OFFSETS); break; @@ -190,19 +190,19 @@ namespace SHADE { case SHCollisionShape::Type::BOX: { - const auto* box = reinterpret_cast(collider.GetShape()); + const auto* BOX = reinterpret_cast(collider.GetShape()); auto* rp3dBoxShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dBoxShape->setHalfExtents(box->GetWorldExtents()); + rp3dBoxShape->setHalfExtents(BOX->GetWorldExtents()); break; } case SHCollisionShape::Type::SPHERE: { - const auto* sphere = reinterpret_cast(collider.GetShape()); + const auto* SPHERE = reinterpret_cast(collider.GetShape()); auto* rp3dSphereShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dSphereShape->setRadius(sphere->GetWorldRadius()); + rp3dSphereShape->setRadius(SPHERE->GetWorldRadius()); break; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 437b5ff8..35d1b5de 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -32,7 +32,6 @@ namespace SHADE SHPhysicsSystem::SHPhysicsSystem() : worldUpdated { false } - , debugDrawFlags { 0 } , interpolationFactor { 0.0 } , fixedDT { 60.0 } , world { nullptr } @@ -50,11 +49,6 @@ namespace SHADE : SHSystemRoutine { "Physics PostUpdate", false } {} - SHPhysicsSystem::PhysicsDebugDraw::PhysicsDebugDraw() - : SHSystemRoutine { "Physics DebugDraw", true } - {} - - /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -107,29 +101,9 @@ namespace SHADE return 0; } - bool SHPhysicsSystem::GetDrawColliders() const noexcept + const SHPhysicsSystem::EntityObjectMap& SHPhysicsSystem::GetPhysicsObjects() const noexcept { - return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER); - } - - bool SHPhysicsSystem::GetDrawColliderAABBs() const noexcept - { - return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER_AABB); - } - - bool SHPhysicsSystem::GetDrawBroadPhase() const noexcept - { - return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::BROAD_PHASE_AABB); - } - - bool SHPhysicsSystem::GetDrawContactPoints() const noexcept - { - return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_POINTS); - } - - bool SHPhysicsSystem::GetDrawContactNormals() const noexcept - { - return debugDrawFlags & SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_NORMALS); + return map; } const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetCollisionInfo() const noexcept @@ -214,96 +188,6 @@ namespace SHADE } } - void SHPhysicsSystem::SetDrawColliders(bool shouldDraw) noexcept - { - static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER); - shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); - - if (world == nullptr) - { - SHLOGV_WARNING("No physics world has been initialised!") - return; - } - - world->getDebugRenderer().setIsDebugItemDisplayed - ( - rp3d::DebugRenderer::DebugItem::COLLISION_SHAPE, - shouldDraw - ); - } - - void SHPhysicsSystem::SetDrawColliderAABBs(bool shouldDraw) noexcept - { - static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::COLLIDER_AABB); - shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); - - if (world == nullptr) - { - SHLOGV_WARNING("No physics world has been initialised!") - return; - } - - world->getDebugRenderer().setIsDebugItemDisplayed - ( - rp3d::DebugRenderer::DebugItem::COLLIDER_AABB, - shouldDraw - ); - } - - void SHPhysicsSystem::SetDrawBroadPhase(bool shouldDraw) noexcept - { - static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::BROAD_PHASE_AABB); - shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); - - if (world == nullptr) - { - SHLOGV_WARNING("No physics world has been initialised!") - return; - } - - world->getDebugRenderer().setIsDebugItemDisplayed - ( - rp3d::DebugRenderer::DebugItem::COLLIDER_BROADPHASE_AABB, - shouldDraw - ); - } - - void SHPhysicsSystem::SetDrawContactPoints(bool shouldDraw) noexcept - { - static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_POINTS); - shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); - - if (world == nullptr) - { - SHLOGV_WARNING("No physics world has been initialised!") - return; - } - - world->getDebugRenderer().setIsDebugItemDisplayed - ( - rp3d::DebugRenderer::DebugItem::CONTACT_POINT, - shouldDraw - ); - } - - void SHPhysicsSystem::SetDrawContactNormals(bool shouldDraw) noexcept - { - static constexpr auto FLAG_VALUE = SHUtilities::ConvertEnum(DebugDrawFlags::CONTACT_NORMALS); - shouldDraw ? debugDrawFlags |= FLAG_VALUE : debugDrawFlags &= ~(FLAG_VALUE); - - if (world == nullptr) - { - SHLOGV_WARNING("No physics world has been initialised!") - return; - } - - world->getDebugRenderer().setIsDebugItemDisplayed - ( - rp3d::DebugRenderer::DebugItem::CONTACT_NORMAL, - shouldDraw - ); - } - /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -497,40 +381,6 @@ namespace SHADE } } - void SHPhysicsSystem::PhysicsDebugDraw::Execute(double) noexcept - { - const auto* PHYSICS_SYSTEM = reinterpret_cast(GetSystem()); - if (PHYSICS_SYSTEM->debugDrawFlags == 0) - return; - - auto* debugDrawSystem = SHSystemManager::GetSystem(); - if (debugDrawSystem == nullptr) - { - SHLOGV_ERROR("Unable to debug draw physics objects due to missing SHDebugDrawSystem!"); - return; - } - - const auto& RP3D_DEBUG_RENDERER = PHYSICS_SYSTEM->world->getDebugRenderer(); - - const auto& LINES = RP3D_DEBUG_RENDERER.getLines(); - const auto& TRIANGLES = RP3D_DEBUG_RENDERER.getTriangles(); - - // Draw all lines - for (uint32_t i = 0; i < RP3D_DEBUG_RENDERER.getNbLines(); ++i) - { - const auto& LINE = LINES[i]; - debugDrawSystem->DrawLine(SHColour{ LINE.color1 }, LINE.point1, LINE.point2); - } - - for (uint32_t i = 0; i < RP3D_DEBUG_RENDERER.getNbTriangles(); ++i) - { - const auto& TRIANGLE = TRIANGLES[i]; - SHColour triColour{ TRIANGLE.color1 }; - triColour.a() = 1.0f; - debugDrawSystem->DrawTri(triColour, TRIANGLE.point1, TRIANGLE.point2, TRIANGLE.point3); - } - } - void SHPhysicsSystem::onContact(const CallbackData& callbackData) { for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 55575c73..3bacb061 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -36,11 +36,21 @@ namespace SHADE class SH_API SHPhysicsSystem final : public SHSystem , public rp3d::EventListener { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsDebugDrawSystem; + public: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ + using CollisionEvents = std::vector; + using EntityObjectMap = std::unordered_map; + struct WorldSettings { SHVec3 gravity; @@ -49,17 +59,6 @@ namespace SHADE bool sleepingEnabled; }; - using CollisionEvents = std::vector; - - enum class DebugDrawFlags : uint8_t - { - COLLIDER = 1 - , COLLIDER_AABB = 2 - , BROAD_PHASE_AABB = 4 - , CONTACT_POINTS = 8 - , CONTACT_NORMALS = 16 - }; - /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -70,23 +69,17 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] double GetFixedDT () const noexcept; - [[nodiscard]] bool IsSleepingEnabled () const noexcept; + [[nodiscard]] bool IsSleepingEnabled () const noexcept; - [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; - [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; - [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; + [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; + [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; - [[nodiscard]] bool GetDrawColliders () const noexcept; - [[nodiscard]] bool GetDrawColliderAABBs () const noexcept; - [[nodiscard]] bool GetDrawBroadPhase () const noexcept; - [[nodiscard]] bool GetDrawContactPoints () const noexcept; - [[nodiscard]] bool GetDrawContactNormals () const noexcept; - - [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; - [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; - + [[nodiscard]] const EntityObjectMap& GetPhysicsObjects () const noexcept; + [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; + [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ @@ -100,13 +93,6 @@ namespace SHADE void SetWorldSettings (const WorldSettings& settings) const noexcept; - // TODO(Diren): Can the debug draw flags be done through an enum? - void SetDrawColliders (bool shouldDraw) noexcept; - void SetDrawColliderAABBs (bool shouldDraw) noexcept; - void SetDrawBroadPhase (bool shouldDraw) noexcept; - void SetDrawContactPoints (bool shouldDraw) noexcept; - void SetDrawContactNormals (bool shouldDraw) noexcept; - /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ @@ -127,47 +113,57 @@ namespace SHADE class SH_API PhysicsPreUpdate final : public SHSystemRoutine { public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ PhysicsPreUpdate(); + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + void Execute(double dt) noexcept override; }; class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine { public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ PhysicsFixedUpdate(); + + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + void Execute (double dt) noexcept override; }; class SH_API PhysicsPostUpdate final : public SHSystemRoutine { public: + /*-------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*-------------------------------------------------------------------------------*/ PhysicsPostUpdate(); - void Execute(double dt) noexcept override; - }; - class SH_API PhysicsDebugDraw final : public SHSystemRoutine - { - public: - PhysicsDebugDraw(); + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + void Execute(double dt) noexcept override; }; private: - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - - using EntityObjectMap = std::unordered_map; - /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ bool worldUpdated; - uint8_t debugDrawFlags; double interpolationFactor; double fixedDT; diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 1b93c63a..c0d95491 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -130,14 +130,14 @@ namespace YAML { case SHCollisionShape::Type::BOX: { - auto const bb = reinterpret_cast(rhs.GetShape()); - node[HalfExtents] = bb->GetRelativeExtents(); + const auto* BOX = reinterpret_cast(rhs.GetShape()); + node[HalfExtents] = BOX->GetRelativeExtents(); } break; case SHCollisionShape::Type::SPHERE: { - auto const bs = reinterpret_cast(rhs.GetShape()); - node[Radius] = bs->GetRelativeRadius(); + const auto* SPHERE = reinterpret_cast(rhs.GetShape()); + node[Radius] = SPHERE->GetRelativeRadius(); } break; case SHCollisionShape::Type::CAPSULE: break; diff --git a/SHADE_Engine/src/Tools/SHUtilities.h b/SHADE_Engine/src/Tools/SHUtilities.h index 287a827e..6cdd91ee 100644 --- a/SHADE_Engine/src/Tools/SHUtilities.h +++ b/SHADE_Engine/src/Tools/SHUtilities.h @@ -35,22 +35,12 @@ namespace SHADE /** * @brief Converts an enum class member from it's type to any other type. * @tparam InputType Restricted to an enum class - * @tparam OutputType The type to convert the enum class member to. Defaults to int. + * @tparam OutputType The type to convert the enum class member to. Defaults to the underlying type. * @param[in] enumClassMember A member of the specified enum class. * @returns The value of the enum class member in the output type. */ template > static constexpr OutputType ConvertEnum(InputType enumClassMember) noexcept; - - /** - * @brief Converts an enum class member from it's type to the underlying type. - * @tparam Enum Restricted to an enum class - * @param[in] value A member of the specified enum class. - * @returns The value of the enum class member in the output type. - */ - template - static constexpr typename std::underlying_type_t ToUnderlying (Enum value) noexcept; - }; } // namespace SHADE diff --git a/SHADE_Engine/src/Tools/SHUtilities.hpp b/SHADE_Engine/src/Tools/SHUtilities.hpp index e0404ea1..3f0668a2 100644 --- a/SHADE_Engine/src/Tools/SHUtilities.hpp +++ b/SHADE_Engine/src/Tools/SHUtilities.hpp @@ -24,11 +24,4 @@ namespace SHADE { return static_cast(enumClassMember); } - - template - constexpr typename std::underlying_type_t SHUtilities::ToUnderlying(Enum value) noexcept - { - return static_cast>(value); - } - } // namespace SHADE \ No newline at end of file From eeab3494ba35bd395646ebee60829203863ee3b8 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 03:30:02 +0800 Subject: [PATCH 710/793] Reworked SceneGraph Interface --- Assets/Scenes/M2Scene.shade | 84 ++--- .../HierarchyPanel/SHHierarchyPanel.cpp | 4 +- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 337 ++++++------------ SHADE_Engine/src/Scene/SHSceneGraph.h | 109 ++---- SHADE_Engine/src/Scene/SHSceneNode.cpp | 143 ++++++++ SHADE_Engine/src/Scene/SHSceneNode.h | 82 +++++ SHADE_Managed/src/Engine/GameObject.cxx | 2 +- 7 files changed, 405 insertions(+), 356 deletions(-) create mode 100644 SHADE_Engine/src/Scene/SHSceneNode.cpp create mode 100644 SHADE_Engine/src/Scene/SHSceneNode.h diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 30dea780..b2a5683f 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -124,48 +124,6 @@ Mesh: 144838771 Material: 123745521 Scripts: ~ -- EID: 5 - Name: item - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: -2, z: -5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 2, y: 2, z: 2} - Renderable Component: - Mesh: 144838771 - Material: 123745521 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: false - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 1, y: 1, z: 1} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - - Is Trigger: true - Type: Box - Half Extents: {x: 2, y: 2, z: 2} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ - EID: 6 Name: AI IsActive: true @@ -226,4 +184,46 @@ Color: {x: 1, y: 1, z: 1, w: 1} Layer: 4294967295 Strength: 0.25 + Scripts: ~ +- EID: 5 + Name: item + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: -2, z: -5} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 2, y: 2, z: 2} + Renderable Component: + Mesh: 144838771 + Material: 123745521 + RigidBody Component: + Type: Dynamic + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: false + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: true + Freeze Rotation Y: true + Freeze Rotation Z: true + Collider Component: + Colliders: + - Is Trigger: false + Type: Box + Half Extents: {x: 1, y: 1, z: 1} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} + - Is Trigger: true + Type: Box + Half Extents: {x: 2, y: 2, z: 2} + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0.5, z: 0} Scripts: ~ \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index e2c39ad8..ff65ba58 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -419,7 +419,7 @@ namespace SHADE void SHEntityParentCommand::Execute() { - auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); for (auto const& eid : entities) { if (entityParentData[eid].newParentEID == MAX_EID) @@ -431,7 +431,7 @@ namespace SHADE void SHEntityParentCommand::Undo() { - auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); for (auto const& eid : entities) { if (entityParentData[eid].oldParentEID == MAX_EID) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index df46b3fb..900d482a 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -16,8 +16,6 @@ // Project Headers #include "ECS_Base/Managers/SHEntityManager.h" #include "Events/SHEventManager.hpp" -#include "Tools/SHLogger.h" -#include "Tools/SHException.h" namespace SHADE { @@ -25,56 +23,6 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHSceneNode::SHSceneNode(EntityID eid, SHSceneNode* parent) noexcept - : active { true } - , entityID { eid } - , parent { parent } - {} - - - SHSceneNode::SHSceneNode(const SHSceneNode& rhs) noexcept - : active { rhs.active } - , entityID { rhs.entityID } - , parent { rhs.parent } - { - std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); - } - - SHSceneNode::SHSceneNode(SHSceneNode&& rhs) noexcept - : active { rhs.active } - , entityID { rhs.entityID } - , parent { rhs.parent } - { - std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); - } - - SHSceneNode& SHSceneNode::operator=(const SHSceneNode& rhs) noexcept - { - if (this == &rhs) - return *this; - - active = rhs.active; - entityID = rhs.entityID; - parent = rhs.parent; - - children.clear(); - std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); - - return *this; - } - - SHSceneNode& SHSceneNode::operator=(SHSceneNode&& rhs) noexcept - { - active = rhs.active; - entityID = rhs.entityID; - parent = rhs.parent; - - children.clear(); - std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); - - return *this; - } - SHSceneGraph::SHSceneGraph() noexcept : root { nullptr } { @@ -110,56 +58,6 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - bool SHSceneNode::IsActive() const noexcept - { - return active; - } - - EntityID SHSceneNode::GetEntityID() const noexcept - { - return entityID; - } - - SHSceneNode* SHSceneNode::GetParent() const noexcept - { - return parent; - } - - const std::vector& SHSceneNode::GetChildren() const noexcept - { - return children; - } - - SHSceneNode* SHSceneNode::GetChild(EntityID childID) const noexcept - { - //////////////////////////////////////// - // Error handling - if (!SHEntityManager::IsValidEID(childID)) - { - SHLOG_ERROR("Child Entity {} is invalid! Unable to get child from Entity {}", childID, entityID) - return nullptr; - } - - if (children.empty()) - { - SHLOG_WARNING("Entity {} has no children!", entityID) - return nullptr; - } - //////////////////////////////////////// - - // Find child - const auto ENTITY_MATCH = [&](const SHSceneNode* node) { return node->GetEntityID() == childID; }; - - const auto CHILD_ITER = std::ranges::find_if(children.begin(), children.end(),ENTITY_MATCH); - if (CHILD_ITER == children.end()) - { - SHLOG_WARNING("Entity {} is not a child of Entity {}! Unable to retrieve child node!", childID, entityID) - return nullptr; - } - - return *CHILD_ITER; - } - const SHSceneNode* SHSceneGraph::GetRoot() const noexcept { if (root != nullptr) @@ -313,41 +211,7 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHSceneNode::SetParent(SHSceneNode* parentNode) noexcept - { - if (parentNode == nullptr) - { - SHLOG_WARNING("Removing Entity {}'s parent", entityID) - - if (parent) - parent->RemoveChild(this); - - return; - } - - // Handle self assignment - if (parent && parentNode->entityID == parent->entityID) - return; - - if (parent) - parent->RemoveChild(this); - - parent = parentNode; - // Update parent's children - parent->AddChild(this); - } - - void SHSceneNode::SetActive(bool newActiveState) noexcept - { - active = newActiveState; - - for (auto* child : children) - { - SetActive(newActiveState); - } - } - - void SHSceneGraph::SetParent(EntityID entityID, SHSceneNode* parent) const noexcept + void SHSceneGraph::SetParent(EntityID entityID, SHSceneNode* newParent) noexcept { //////////////////////////////////////// // Error Handling @@ -369,18 +233,33 @@ namespace SHADE { .node = NODE_ITER->second , .oldParent = NODE_ITER->second->GetParent() - , .newParent = parent ? parent : root + , .newParent = newParent ? newParent : root }; - if (parent == nullptr) - parent = root; + if (newParent == nullptr) + newParent = root; - NODE_ITER->second->SetParent(parent); + ChangeParent(NODE_ITER->second, newParent); SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } - void SHSceneGraph::SetParent(EntityID entityID, EntityID parent) const noexcept + void SHSceneGraph::SetParent(SHSceneNode* node, SHSceneNode* newParent) noexcept + { + const SHSceneGraphChangeParentEvent EVENT_DATA + { + .node = node + , .oldParent = node->parent + , .newParent = newParent ? newParent : root + }; + + if (newParent == nullptr) + newParent = root; + + ChangeParent(node, newParent); + } + + void SHSceneGraph::SetParent(EntityID entityID, EntityID newParent) noexcept { //////////////////////////////////////// // Error Handling @@ -390,9 +269,9 @@ namespace SHADE return; } - if (!SHEntityManager::IsValidEID(parent)) + if (!SHEntityManager::IsValidEID(newParent)) { - SHLOG_ERROR("Parent Entity {} is invalid! Unable to set Entity {}'s parent!", parent, entityID) + SHLOG_ERROR("Parent Entity {} is invalid! Unable to set Entity {}'s parent!", newParent, entityID) return; } @@ -403,10 +282,10 @@ namespace SHADE return; } - auto PARENT_ITER = entityNodeMap.find(parent); + auto PARENT_ITER = entityNodeMap.find(newParent); if (PARENT_ITER == entityNodeMap.end()) { - SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to parent to Entity {}", parent, entityID) + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to parent to Entity {}", newParent, entityID) return; } //////////////////////////////////////// @@ -419,92 +298,46 @@ namespace SHADE }; SHSceneNode* currentNode = NODE_ITER->second; - currentNode->SetParent(PARENT_ITER->second); + ChangeParent(currentNode, PARENT_ITER->second); SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } - /*-----------------------------------------------------------------------------------*/ - /* Public Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - void SHSceneNode::AddChild(SHSceneNode* newChild) noexcept + void SHSceneGraph::SetParent(SHSceneNode* node, EntityID newParent) noexcept { //////////////////////////////////////// // Error Handling - if (newChild == nullptr) + + if (!SHEntityManager::IsValidEID(newParent)) { - SHLOG_WARNING("Attempting to add a non-existent child to an entity!") + SHLOG_ERROR("Parent Entity {} is invalid! Unable to set Entity {}'s parent!", newParent, node->entityID) + return; + } + + auto PARENT_ITER = entityNodeMap.find(newParent); + if (PARENT_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to parent to Entity {}", newParent, node->entityID) return; } //////////////////////////////////////// - if (newChild->parent) - newChild->parent->RemoveChild(newChild); - - newChild->parent = this; - children.emplace_back(newChild); + const SHSceneGraphChangeParentEvent EVENT_DATA + { + .node = node + , .oldParent = node->parent + , .newParent = PARENT_ITER->second + }; + + ChangeParent(node, PARENT_ITER->second); + + SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } - bool SHSceneNode::RemoveChild(EntityID childID) noexcept - { - //////////////////////////////////////// - // Error Handling - if (!SHEntityManager::IsValidEID(childID)) - { - SHLOG_ERROR("Entity {} is invalid!", childID) - return false; - } - //////////////////////////////////////// - auto childIter = std::find_if(children.begin(), children.end(), [&](SHSceneNode* node) - { - return node->GetEntityID() == childID; - }); - - if (childIter == children.end()) - { - SHLOG_WARNING("Unable to remove Entity {} from Entity {} since it is not it's child!", childID, entityID) - return false; - } - - (*childIter)->parent = nullptr; - childIter = children.erase(childIter); - - return true; - } - - bool SHSceneNode::RemoveChild(SHSceneNode* childToRemove) noexcept - { - //////////////////////////////////////// - // Error Handling - if (childToRemove == nullptr) - { - SHLOG_WARNING("Attempting to remove non-existent child from Entity {}", entityID) - return false; - } - //////////////////////////////////////// - - auto childIter = std::find(children.begin(), children.end(), childToRemove); - if (childIter == children.end()) - { - SHLOG_WARNING("Unable to remove Entity {} from Entity {} since it is not it's child!", childToRemove->entityID, entityID) - return false; - } - - childIter = children.erase(childIter); - childToRemove->parent = nullptr; - - return true; - } - - void SHSceneNode::RemoveAllChildren() noexcept - { - for (const auto child : children) - child->parent = nullptr; - - children.clear(); - } + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ SHSceneNode* SHSceneGraph::AddNode(EntityID entityID, SHSceneNode* parent) { @@ -528,13 +361,12 @@ namespace SHADE if (parent == nullptr) { // Specific handling for root to avoid a warning when removing a non-existent child - parent = root; newNode->parent = root; root->children.emplace_back(newNode); } else { - newNode->SetParent(parent); + ChangeParent(newNode, parent); } return newNode; @@ -557,9 +389,8 @@ namespace SHADE // Remove reference of current node from parent SHSceneNode* currentNode = NODE_ITER->second; - SHSceneNode* parent = currentNode->GetParent(); - if (parent != nullptr) - parent->RemoveChild(currentNode); + if (currentNode->parent != nullptr) + RemoveChild(currentNode->parent, currentNode); ReleaseNode(currentNode); return true; @@ -568,9 +399,8 @@ namespace SHADE bool SHSceneGraph::RemoveNode(SHSceneNode* nodeToRemove) noexcept { // Remove reference of current node from parent - SHSceneNode* parent = nodeToRemove->GetParent(); - if (parent != nullptr) - parent->RemoveChild(nodeToRemove); + if (nodeToRemove->parent != nullptr) + RemoveChild(nodeToRemove->parent, nodeToRemove); ReleaseNode(nodeToRemove); return true; @@ -594,11 +424,6 @@ namespace SHADE SHSceneNode* SHSceneGraph::AllocateNode(EntityID entityID) { SHSceneNode* newNode = new SHSceneNode{entityID}; - - //#ifdef _DEBUG - // SHLOG_INFO("Allocated a new Scene Node for Entity {}!", entityID) - //#endif - entityNodeMap.emplace(entityID, newNode); return newNode; } @@ -608,19 +433,65 @@ namespace SHADE SHASSERT(node != nullptr, "Attempting to release Invalid Node!") // Remove parent's reference to this node if there is a parent - if (node->GetParent() != nullptr) - node->GetParent()->RemoveChild(node); + if (node->parent != nullptr) + RemoveChild(node->parent, node); // Remove child's references to this node. Children end up as floating nodes. for (auto* child : node->GetChildren()) { - child->SetParent(nullptr); + ChangeParent(child, nullptr); } entityNodeMap.erase(node->GetEntityID()); delete node; } + void SHSceneGraph::ChangeParent(SHSceneNode* node, SHSceneNode* newParent) + { + // Handle self assignment + if (node->parent != nullptr && newParent != nullptr && node->parent->entityID == newParent->entityID) + return; + + // Remove child + if (node->parent) + RemoveChild(node->parent, node); + + if (newParent == nullptr) + { + SHLOG_WARNING("Removing Entity {}'s parent", node->entityID) + return; + } + + node->parent = newParent; + // Update parent's children + AddChild(newParent, node); + } + + void SHSceneGraph::AddChild(SHSceneNode* node, SHSceneNode* newChild) + { + SHASSERT(node != nullptr, "Attempting to modify a non-existent scene node!") + SHASSERT(newChild != nullptr, "Attempting to add a non-existent child to a SceneNode!") + + if (newChild->parent) + RemoveChild(newChild->parent, newChild); + + newChild->parent = node; + node->children.emplace_back(newChild); + } + + void SHSceneGraph::RemoveChild(SHSceneNode* node, SHSceneNode* childToRemove) + { + SHASSERT(node != nullptr, "Attempting to modify a non-existent scene node!") + SHASSERT(childToRemove != nullptr, "Attempting to remove a non-existent child from a SceneNode!") + + auto childIter = std::find(node->children.begin(), node->children.end(), childToRemove); + if (childIter == node->children.end()) + return; + + childIter = node->children.erase(childIter); + childToRemove->parent = nullptr; + } + void SHSceneGraph::TraverseAndInvokeFunction(const SHSceneNode* node, const UnaryFunction& function) { for (auto* child : node->children) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 45ab48e5..99de9c44 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -1,7 +1,7 @@ /**************************************************************************************** * \file SHSceneGraph.h * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Interface for a Scene Graph & Scene Nodes. + * \brief Interface for a Scene Graph. * * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or * disclosure of this file or its contents without the prior written consent @@ -15,81 +15,14 @@ // Project Headers #include "ECS_Base/Entity/SHEntity.h" #include "SH_API.h" +#include "SHSceneNode.h" namespace SHADE { - /*-----------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*-----------------------------------------------------------------------------------*/ - - class SHSceneGraph; - /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHSceneNode - { - private: - /*---------------------------------------------------------------------------------*/ - /* Friends */ - /*---------------------------------------------------------------------------------*/ - - friend class SHSceneGraph; - - public: - /*---------------------------------------------------------------------------------*/ - /* Constructors & Destructor */ - /*---------------------------------------------------------------------------------*/ - - ~SHSceneNode () = default; - - SHSceneNode (EntityID eid, SHSceneNode* parent = nullptr) noexcept; - SHSceneNode (const SHSceneNode& rhs) noexcept; - SHSceneNode (SHSceneNode&& rhs) noexcept; - SHSceneNode& operator= (const SHSceneNode& rhs) noexcept; - SHSceneNode& operator= (SHSceneNode&& rhs) noexcept; - - /*---------------------------------------------------------------------------------*/ - /* Getter Functions */ - /*---------------------------------------------------------------------------------*/ - - [[nodiscard]] bool IsActive () const noexcept; - [[nodiscard]] EntityID GetEntityID () const noexcept; - [[nodiscard]] SHSceneNode* GetParent () const noexcept; - [[nodiscard]] const std::vector& GetChildren () const noexcept; - - [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; - - /*---------------------------------------------------------------------------------*/ - /* Setter Functions */ - /*---------------------------------------------------------------------------------*/ - - void SetParent (SHSceneNode* parentNode) noexcept; - void SetActive (bool newActiveState) noexcept; - - /*---------------------------------------------------------------------------------*/ - /* Function Members */ - /*---------------------------------------------------------------------------------*/ - - void AddChild (SHSceneNode* newChild) noexcept; - - bool RemoveChild (EntityID childID) noexcept; - bool RemoveChild (SHSceneNode* childToRemove) noexcept; - - void RemoveAllChildren () noexcept; - - private: - /*---------------------------------------------------------------------------------*/ - /* Data Members */ - /*---------------------------------------------------------------------------------*/ - - bool active; - EntityID entityID; - SHSceneNode* parent; - std::vector children; - }; - class SH_API SHSceneGraph { public: @@ -130,19 +63,22 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetParent (EntityID entityID, SHSceneNode* parent) const noexcept; - void SetParent (EntityID entityID, EntityID parent) const noexcept; + void SetParent (EntityID entityID, SHSceneNode* newParent) noexcept; + void SetParent (SHSceneNode* node, SHSceneNode* newParent) noexcept; + + void SetParent (EntityID entityID, EntityID newParent) noexcept; + void SetParent (SHSceneNode* node, EntityID newParent) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ SHSceneNode* AddNode (EntityID entityID, SHSceneNode* parent = nullptr); - bool RemoveNode (EntityID entityID) noexcept; - bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; - void Reset () noexcept; + bool RemoveNode (EntityID entityID) noexcept; + bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; + void Reset () noexcept; - void Traverse (const UnaryFunction& function) const; + void Traverse (const UnaryFunction& function) const; private: /*---------------------------------------------------------------------------------*/ @@ -156,9 +92,14 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHSceneNode* AllocateNode (EntityID entityID); - void ReleaseNode (SHSceneNode* node) noexcept; - static void TraverseAndInvokeFunction (const SHSceneNode* node, const UnaryFunction& function); + SHSceneNode* AllocateNode (EntityID entityID); + void ReleaseNode (SHSceneNode* node) noexcept; + + void ChangeParent (SHSceneNode* node, SHSceneNode* newParent); + void AddChild (SHSceneNode* node, SHSceneNode* newChild); + void RemoveChild (SHSceneNode* node, SHSceneNode* childToRemove); + + static void TraverseAndInvokeFunction (const SHSceneNode* node, const UnaryFunction& function); }; /*-----------------------------------------------------------------------------------*/ @@ -172,4 +113,16 @@ namespace SHADE SHSceneNode* newParent; }; + struct SHSceneGraphAddChildEvent + { + SHSceneNode* parent; + SHSceneNode* addedChild; + }; + + struct SHSceneGraphRemoveChildEvent + { + SHSceneNode* parent; + SHSceneNode* removedChild; + }; + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scene/SHSceneNode.cpp b/SHADE_Engine/src/Scene/SHSceneNode.cpp new file mode 100644 index 00000000..b619d464 --- /dev/null +++ b/SHADE_Engine/src/Scene/SHSceneNode.cpp @@ -0,0 +1,143 @@ +/**************************************************************************************** + * \file SHSceneNode.c[[ + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Scene Node. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHSceneNode.h" + +// Project Headers +#include "ECS_Base/Managers/SHEntityManager.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHSceneNode::SHSceneNode(EntityID eid, SHSceneNode* parent) noexcept + : active { true } + , entityID { eid } + , parent { parent } + {} + + + SHSceneNode::SHSceneNode(const SHSceneNode& rhs) noexcept + : active { rhs.active } + , entityID { rhs.entityID } + , parent { rhs.parent } + { + std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); + } + + SHSceneNode::SHSceneNode(SHSceneNode&& rhs) noexcept + : active { rhs.active } + , entityID { rhs.entityID } + , parent { rhs.parent } + { + std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); + } + + SHSceneNode& SHSceneNode::operator=(const SHSceneNode& rhs) noexcept + { + if (this == &rhs) + return *this; + + active = rhs.active; + entityID = rhs.entityID; + parent = rhs.parent; + + children.clear(); + std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); + + return *this; + } + + SHSceneNode& SHSceneNode::operator=(SHSceneNode&& rhs) noexcept + { + active = rhs.active; + entityID = rhs.entityID; + parent = rhs.parent; + + children.clear(); + std::ranges::copy(rhs.children.begin(), rhs.children.end(), std::back_inserter(children)); + + return *this; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHSceneNode::IsActive() const noexcept + { + return active; + } + + EntityID SHSceneNode::GetEntityID() const noexcept + { + return entityID; + } + + SHSceneNode* SHSceneNode::GetParent() const noexcept + { + return parent; + } + + const std::vector& SHSceneNode::GetChildren() const noexcept + { + return children; + } + + SHSceneNode* SHSceneNode::GetChild(EntityID childID) const noexcept + { + //////////////////////////////////////// + // Error handling + if (!SHEntityManager::IsValidEID(childID)) + { + SHLOG_ERROR("Child Entity {} is invalid! Unable to get child from Entity {}", childID, entityID) + return nullptr; + } + + if (children.empty()) + { + SHLOG_WARNING("Entity {} has no children!", entityID) + return nullptr; + } + //////////////////////////////////////// + + // Find child + const auto ENTITY_MATCH = [&](const SHSceneNode* node) { return node->GetEntityID() == childID; }; + + const auto CHILD_ITER = std::ranges::find_if(children.begin(), children.end(),ENTITY_MATCH); + if (CHILD_ITER == children.end()) + { + SHLOG_WARNING("Entity {} is not a child of Entity {}! Unable to retrieve child node!", childID, entityID) + return nullptr; + } + + return *CHILD_ITER; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHSceneNode::SetActive(bool newActiveState) noexcept + { + active = newActiveState; + + for (auto* child : children) + { + SetActive(newActiveState); + } + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scene/SHSceneNode.h b/SHADE_Engine/src/Scene/SHSceneNode.h new file mode 100644 index 00000000..87bd8d0b --- /dev/null +++ b/SHADE_Engine/src/Scene/SHSceneNode.h @@ -0,0 +1,82 @@ +/**************************************************************************************** + * \file SHSceneNode.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Scene Node. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "ECS_Base/Entity/SHEntity.h" +#include "SH_API.h" +#include "SHSceneGraph.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + + class SHSceneGraph; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHSceneNode + { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHSceneGraph; + + public: + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + ~SHSceneNode () = default; + + SHSceneNode (EntityID eid, SHSceneNode* parent = nullptr) noexcept; + SHSceneNode (const SHSceneNode& rhs) noexcept; + SHSceneNode (SHSceneNode&& rhs) noexcept; + SHSceneNode& operator= (const SHSceneNode& rhs) noexcept; + SHSceneNode& operator= (SHSceneNode&& rhs) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] bool IsActive () const noexcept; + [[nodiscard]] EntityID GetEntityID () const noexcept; + [[nodiscard]] SHSceneNode* GetParent () const noexcept; + [[nodiscard]] const std::vector& GetChildren () const noexcept; + + [[nodiscard]] SHSceneNode* GetChild (EntityID childID) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetActive (bool newActiveState) noexcept; + + private: + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + bool active; + EntityID entityID; + SHSceneNode* parent; + std::vector children; + }; +} // namespace SHADE + diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 9f15c6c9..bc17be8b 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -105,7 +105,7 @@ namespace SHADE { if (!valid) throw gcnew System::NullReferenceException(); - const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); if (newParent == nullptr) SCENE_GRAPH.SetParent(entity, nullptr); From ac217ffe973910baba4bf958bc87406030b834b3 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 09:06:38 +0800 Subject: [PATCH 711/793] Added Add and Remove Child Events to SceneGraph --- SHADE_Engine/src/Events/SHEventDefines.h | 12 +++--- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 18 ++++++++- SHADE_Engine/src/Scene/SHSceneGraph.h | 24 +----------- SHADE_Engine/src/Scene/SHSceneGraphEvents.h | 41 +++++++++++++++++++++ 4 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 SHADE_Engine/src/Scene/SHSceneGraphEvents.h diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index d649fabf..d7bbf5f0 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -11,9 +11,11 @@ constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT { 2 }; constexpr SHEventIdentifier SH_COMPONENT_ADDED_EVENT { 3 }; constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT { 4 }; constexpr SHEventIdentifier SH_SCENEGRAPH_CHANGE_PARENT_EVENT { 5 }; -constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_ADDED_EVENT { 6 }; -constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_REMOVED_EVENT { 7 }; -constexpr SHEventIdentifier SH_EDITOR_ON_PLAY_EVENT { 8 }; -constexpr SHEventIdentifier SH_EDITOR_ON_PAUSE_EVENT { 9 }; -constexpr SHEventIdentifier SH_EDITOR_ON_STOP_EVENT { 10 }; +constexpr SHEventIdentifier SH_SCENEGRAPH_ADD_CHILD_EVENT { 6 }; +constexpr SHEventIdentifier SH_SCENEGRAPH_REMOVE_CHILD_EVENT { 7 }; +constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_ADDED_EVENT { 8 }; +constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_REMOVED_EVENT { 9 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PLAY_EVENT { 10 }; +constexpr SHEventIdentifier SH_EDITOR_ON_PAUSE_EVENT { 11 }; +constexpr SHEventIdentifier SH_EDITOR_ON_STOP_EVENT { 12 }; diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 900d482a..ff479eec 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -1,7 +1,7 @@ /**************************************************************************************** * \file SHSceneGraph.cpp * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Implementation for a Scene Graph & Scene Nodes. + * \brief Implementation for a Scene Graph. * * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or * disclosure of this file or its contents without the prior written consent @@ -477,6 +477,14 @@ namespace SHADE newChild->parent = node; node->children.emplace_back(newChild); + + const SHSceneGraphAddChildEvent EVENT_DATA + { + .parent = node + , .childAdded = newChild + }; + + SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_ADD_CHILD_EVENT); } void SHSceneGraph::RemoveChild(SHSceneNode* node, SHSceneNode* childToRemove) @@ -490,6 +498,14 @@ namespace SHADE childIter = node->children.erase(childIter); childToRemove->parent = nullptr; + + const SHSceneGraphRemoveChildEvent EVENT_DATA + { + .parent = node + , .childRemoved = childToRemove + }; + + SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_REMOVE_CHILD_EVENT); } void SHSceneGraph::TraverseAndInvokeFunction(const SHSceneNode* node, const UnaryFunction& function) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 99de9c44..1d448b37 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -16,6 +16,7 @@ #include "ECS_Base/Entity/SHEntity.h" #include "SH_API.h" #include "SHSceneNode.h" +#include "SHSceneGraphEvents.h" namespace SHADE { @@ -102,27 +103,4 @@ namespace SHADE static void TraverseAndInvokeFunction (const SHSceneNode* node, const UnaryFunction& function); }; - /*-----------------------------------------------------------------------------------*/ - /* Event Data Definitions */ - /*-----------------------------------------------------------------------------------*/ - - struct SHSceneGraphChangeParentEvent - { - SHSceneNode* node; - SHSceneNode* oldParent; - SHSceneNode* newParent; - }; - - struct SHSceneGraphAddChildEvent - { - SHSceneNode* parent; - SHSceneNode* addedChild; - }; - - struct SHSceneGraphRemoveChildEvent - { - SHSceneNode* parent; - SHSceneNode* removedChild; - }; - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scene/SHSceneGraphEvents.h b/SHADE_Engine/src/Scene/SHSceneGraphEvents.h new file mode 100644 index 00000000..ccdf06be --- /dev/null +++ b/SHADE_Engine/src/Scene/SHSceneGraphEvents.h @@ -0,0 +1,41 @@ +/**************************************************************************************** + * \file SHSceneGraphEvents.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for Scene Graph Events. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "SHSceneNode.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Event Data Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHSceneGraphChangeParentEvent + { + SHSceneNode* node; + SHSceneNode* oldParent; + SHSceneNode* newParent; + }; + + struct SHSceneGraphAddChildEvent + { + SHSceneNode* parent; + SHSceneNode* childAdded; + }; + + struct SHSceneGraphRemoveChildEvent + { + SHSceneNode* parent; + SHSceneNode* childRemoved; + }; + +} // namespace SHADE \ No newline at end of file From 08b3cbafcd4e2a08fd5701179fce20c700b89704 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 10:20:54 +0800 Subject: [PATCH 712/793] Added IsChildOf method to SceneGraph --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 147 ++++++++++++++++++++++++ SHADE_Engine/src/Scene/SHSceneGraph.h | 14 ++- 2 files changed, 156 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index ff479eec..e2bd58e2 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -263,6 +263,7 @@ namespace SHADE { //////////////////////////////////////// // Error Handling + if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid! Unable to set parent of an invalid entity!", entityID) @@ -374,6 +375,8 @@ namespace SHADE bool SHSceneGraph::RemoveNode(EntityID entityID) noexcept { + //////////////////////////////////////// + // Error Handling if (!SHEntityManager::IsValidEID(entityID)) { SHLOG_ERROR("Entity {} is invalid!", entityID) @@ -386,6 +389,7 @@ namespace SHADE SHLOG_ERROR("Entity {} does not exist in the scene!", entityID) return false; } + //////////////////////////////////////// // Remove reference of current node from parent SHSceneNode* currentNode = NODE_ITER->second; @@ -412,6 +416,149 @@ namespace SHADE ReleaseNode(node); } + bool SHSceneGraph::IsChildOf(EntityID entityID, SHSceneNode* targetNode) noexcept + { + //////////////////////////////////////// + // Error Handling + + if (!SHEntityManager::IsValidEID(entityID)) + { + SHLOG_ERROR("Entity {} is invalid!", entityID) + return false; + } + + auto NODE_ITER = entityNodeMap.find(entityID); + if (NODE_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to check child!", entityID) + return false; + } + + //////////////////////////////////////// + + // Handle self-checks + if (NODE_ITER->second == targetNode) + { + SHLOG_WARNING("Entity {} cannot be a child of itself!", entityID) + return false; + } + + // Search for a matching target until the root + const SHSceneNode* CURRENT_TARGET = NODE_ITER->second->parent; + while (CURRENT_TARGET != root) + { + if (CURRENT_TARGET == targetNode) + return true; + + CURRENT_TARGET = CURRENT_TARGET->parent; + } + + return false; + } + + bool SHSceneGraph::IsChildOf(SHSceneNode* node, SHSceneNode* targetNode) noexcept + { + if (!node || !targetNode) + { + SHLOG_ERROR("Attempting to check for invalid scene nodes!") + return false; + } + + if (node == targetNode) + { + SHLOG_WARNING("Entity {} cannot be a child of itself!", node->entityID) + return false; + } + + const SHSceneNode* CURRENT_TARGET = node->parent; + while (CURRENT_TARGET != root) + { + if (CURRENT_TARGET == targetNode) + return true; + + CURRENT_TARGET = CURRENT_TARGET->parent; + } + + return false; + } + + bool SHSceneGraph::IsChildOf(EntityID entityID, EntityID targetID) noexcept + { + //////////////////////////////////////// + // Error Handling + + if (!SHEntityManager::IsValidEID(entityID)) + { + SHLOG_ERROR("Entity {} is invalid!", entityID) + return false; + } + + if (!SHEntityManager::IsValidEID(targetID)) + { + SHLOG_ERROR("Entity {} is invalid!", targetID) + return false; + } + + auto NODE_ITER = entityNodeMap.find(entityID); + if (NODE_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to check child!", entityID) + return false; + } + + auto TARGET_ITER = entityNodeMap.find(targetID); + if (TARGET_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to check child!", targetID) + return false; + } + + //////////////////////////////////////// + + const SHSceneNode* CURRENT_TARGET = NODE_ITER->second->parent; + while (CURRENT_TARGET != root) + { + if (CURRENT_TARGET == TARGET_ITER->second) + return true; + + CURRENT_TARGET = CURRENT_TARGET->parent; + } + + return false; + } + + bool SHSceneGraph::IsChildOf(SHSceneNode* node, EntityID targetID) noexcept + { + //////////////////////////////////////// + // Error Handling + + if (!SHEntityManager::IsValidEID(targetID)) + { + SHLOG_ERROR("Entity {} is invalid!", targetID) + return false; + } + + auto TARGET_ITER = entityNodeMap.find(targetID); + if (TARGET_ITER == entityNodeMap.end()) + { + SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to check child!", targetID) + return false; + } + + //////////////////////////////////////// + + const SHSceneNode* CURRENT_TARGET = node->parent; + while (CURRENT_TARGET != root) + { + if (CURRENT_TARGET == TARGET_ITER->second) + return true; + + CURRENT_TARGET = CURRENT_TARGET->parent; + } + + return false; + } + void SHSceneGraph::Traverse (const UnaryFunction& function) const { TraverseAndInvokeFunction(root, function); diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 1d448b37..494f480e 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -66,7 +66,6 @@ namespace SHADE void SetParent (EntityID entityID, SHSceneNode* newParent) noexcept; void SetParent (SHSceneNode* node, SHSceneNode* newParent) noexcept; - void SetParent (EntityID entityID, EntityID newParent) noexcept; void SetParent (SHSceneNode* node, EntityID newParent) noexcept; @@ -75,11 +74,16 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHSceneNode* AddNode (EntityID entityID, SHSceneNode* parent = nullptr); - bool RemoveNode (EntityID entityID) noexcept; - bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; - void Reset () noexcept; + bool RemoveNode (EntityID entityID) noexcept; + bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; + void Reset () noexcept; - void Traverse (const UnaryFunction& function) const; + bool IsChildOf (EntityID entityID, SHSceneNode* targetNode) noexcept; + bool IsChildOf (SHSceneNode* node, SHSceneNode* targetNode) noexcept; + bool IsChildOf (EntityID entityID, EntityID targetID) noexcept; + bool IsChildOf (SHSceneNode* node, EntityID targetID) noexcept; + + void Traverse (const UnaryFunction& function) const; private: /*---------------------------------------------------------------------------------*/ From 578f384808fe1f5fe26fed136cb033e2104e8490 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 10:24:09 +0800 Subject: [PATCH 713/793] Removed redundant overloads to restrict potential bad function calls --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 105 ------------------------ SHADE_Engine/src/Scene/SHSceneGraph.h | 6 +- 2 files changed, 1 insertion(+), 110 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index e2bd58e2..6240b7bf 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -244,21 +244,6 @@ namespace SHADE SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } - void SHSceneGraph::SetParent(SHSceneNode* node, SHSceneNode* newParent) noexcept - { - const SHSceneGraphChangeParentEvent EVENT_DATA - { - .node = node - , .oldParent = node->parent - , .newParent = newParent ? newParent : root - }; - - if (newParent == nullptr) - newParent = root; - - ChangeParent(node, newParent); - } - void SHSceneGraph::SetParent(EntityID entityID, EntityID newParent) noexcept { //////////////////////////////////////// @@ -304,38 +289,6 @@ namespace SHADE SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); } - void SHSceneGraph::SetParent(SHSceneNode* node, EntityID newParent) noexcept - { - //////////////////////////////////////// - // Error Handling - - if (!SHEntityManager::IsValidEID(newParent)) - { - SHLOG_ERROR("Parent Entity {} is invalid! Unable to set Entity {}'s parent!", newParent, node->entityID) - return; - } - - auto PARENT_ITER = entityNodeMap.find(newParent); - if (PARENT_ITER == entityNodeMap.end()) - { - SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to parent to Entity {}", newParent, node->entityID) - return; - } - //////////////////////////////////////// - - const SHSceneGraphChangeParentEvent EVENT_DATA - { - .node = node - , .oldParent = node->parent - , .newParent = PARENT_ITER->second - }; - - ChangeParent(node, PARENT_ITER->second); - - SHEventManager::BroadcastEvent(EVENT_DATA, SH_SCENEGRAPH_CHANGE_PARENT_EVENT); - } - - /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -456,32 +409,6 @@ namespace SHADE return false; } - bool SHSceneGraph::IsChildOf(SHSceneNode* node, SHSceneNode* targetNode) noexcept - { - if (!node || !targetNode) - { - SHLOG_ERROR("Attempting to check for invalid scene nodes!") - return false; - } - - if (node == targetNode) - { - SHLOG_WARNING("Entity {} cannot be a child of itself!", node->entityID) - return false; - } - - const SHSceneNode* CURRENT_TARGET = node->parent; - while (CURRENT_TARGET != root) - { - if (CURRENT_TARGET == targetNode) - return true; - - CURRENT_TARGET = CURRENT_TARGET->parent; - } - - return false; - } - bool SHSceneGraph::IsChildOf(EntityID entityID, EntityID targetID) noexcept { //////////////////////////////////////// @@ -527,38 +454,6 @@ namespace SHADE return false; } - bool SHSceneGraph::IsChildOf(SHSceneNode* node, EntityID targetID) noexcept - { - //////////////////////////////////////// - // Error Handling - - if (!SHEntityManager::IsValidEID(targetID)) - { - SHLOG_ERROR("Entity {} is invalid!", targetID) - return false; - } - - auto TARGET_ITER = entityNodeMap.find(targetID); - if (TARGET_ITER == entityNodeMap.end()) - { - SHLOG_ERROR("Entity {} cannot be found in the scene! Unable to check child!", targetID) - return false; - } - - //////////////////////////////////////// - - const SHSceneNode* CURRENT_TARGET = node->parent; - while (CURRENT_TARGET != root) - { - if (CURRENT_TARGET == TARGET_ITER->second) - return true; - - CURRENT_TARGET = CURRENT_TARGET->parent; - } - - return false; - } - void SHSceneGraph::Traverse (const UnaryFunction& function) const { TraverseAndInvokeFunction(root, function); diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index 494f480e..5747be7b 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -65,9 +65,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SetParent (EntityID entityID, SHSceneNode* newParent) noexcept; - void SetParent (SHSceneNode* node, SHSceneNode* newParent) noexcept; void SetParent (EntityID entityID, EntityID newParent) noexcept; - void SetParent (SHSceneNode* node, EntityID newParent) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -79,9 +77,7 @@ namespace SHADE void Reset () noexcept; bool IsChildOf (EntityID entityID, SHSceneNode* targetNode) noexcept; - bool IsChildOf (SHSceneNode* node, SHSceneNode* targetNode) noexcept; - bool IsChildOf (EntityID entityID, EntityID targetID) noexcept; - bool IsChildOf (SHSceneNode* node, EntityID targetID) noexcept; + bool IsChildOf (EntityID entityID, EntityID targetID) noexcept; void Traverse (const UnaryFunction& function) const; From fa0787d349900ee3fb097baf7901c08b1168bbb7 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 10:33:21 +0800 Subject: [PATCH 714/793] Changed hardcoded paths to use defined asset root folder Shifted scripts and project into folder in assets --- .../Scripts}/AIPrototype.cs | 0 .../Scripts}/CameraControl.cs | 0 {TempScriptsFolder => Assets/Scripts}/CameraFix.cs | 0 {TempScriptsFolder => Assets/Scripts}/Item.cs | 0 .../Scripts}/PhysicsTest.cs | 0 .../Scripts}/PickAndThrow.cs | 0 .../Scripts}/PlayerController.cs | 0 .../Scripts}/PrintWhenActive.cs | 0 .../Scripts}/RaccoonShowcase.cs | 0 .../Scripts}/RaccoonSpin.cs | 0 .../Scripts}/ThirdPersonCamera.cs | 0 SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp | 10 ++++++---- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 6 ++++-- SHADE_Engine/src/Editor/SHEditor.cpp | 14 +++++++++----- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 +++- 15 files changed, 22 insertions(+), 12 deletions(-) rename {TempScriptsFolder => Assets/Scripts}/AIPrototype.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/CameraControl.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/CameraFix.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/Item.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/PhysicsTest.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/PickAndThrow.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/PlayerController.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/PrintWhenActive.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/RaccoonShowcase.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/RaccoonSpin.cs (100%) rename {TempScriptsFolder => Assets/Scripts}/ThirdPersonCamera.cs (100%) diff --git a/TempScriptsFolder/AIPrototype.cs b/Assets/Scripts/AIPrototype.cs similarity index 100% rename from TempScriptsFolder/AIPrototype.cs rename to Assets/Scripts/AIPrototype.cs diff --git a/TempScriptsFolder/CameraControl.cs b/Assets/Scripts/CameraControl.cs similarity index 100% rename from TempScriptsFolder/CameraControl.cs rename to Assets/Scripts/CameraControl.cs diff --git a/TempScriptsFolder/CameraFix.cs b/Assets/Scripts/CameraFix.cs similarity index 100% rename from TempScriptsFolder/CameraFix.cs rename to Assets/Scripts/CameraFix.cs diff --git a/TempScriptsFolder/Item.cs b/Assets/Scripts/Item.cs similarity index 100% rename from TempScriptsFolder/Item.cs rename to Assets/Scripts/Item.cs diff --git a/TempScriptsFolder/PhysicsTest.cs b/Assets/Scripts/PhysicsTest.cs similarity index 100% rename from TempScriptsFolder/PhysicsTest.cs rename to Assets/Scripts/PhysicsTest.cs diff --git a/TempScriptsFolder/PickAndThrow.cs b/Assets/Scripts/PickAndThrow.cs similarity index 100% rename from TempScriptsFolder/PickAndThrow.cs rename to Assets/Scripts/PickAndThrow.cs diff --git a/TempScriptsFolder/PlayerController.cs b/Assets/Scripts/PlayerController.cs similarity index 100% rename from TempScriptsFolder/PlayerController.cs rename to Assets/Scripts/PlayerController.cs diff --git a/TempScriptsFolder/PrintWhenActive.cs b/Assets/Scripts/PrintWhenActive.cs similarity index 100% rename from TempScriptsFolder/PrintWhenActive.cs rename to Assets/Scripts/PrintWhenActive.cs diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/Assets/Scripts/RaccoonShowcase.cs similarity index 100% rename from TempScriptsFolder/RaccoonShowcase.cs rename to Assets/Scripts/RaccoonShowcase.cs diff --git a/TempScriptsFolder/RaccoonSpin.cs b/Assets/Scripts/RaccoonSpin.cs similarity index 100% rename from TempScriptsFolder/RaccoonSpin.cs rename to Assets/Scripts/RaccoonSpin.cs diff --git a/TempScriptsFolder/ThirdPersonCamera.cs b/Assets/Scripts/ThirdPersonCamera.cs similarity index 100% rename from TempScriptsFolder/ThirdPersonCamera.cs rename to Assets/Scripts/ThirdPersonCamera.cs diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index c3c7ef03..c913030b 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -17,6 +17,8 @@ #include #include +const std::string AUDIO_FOLDER_PATH{ std::string(ASSET_ROOT)+ "/Audio/" }; + namespace SHADE { SHAudioSystem::SHAudioSystem() @@ -79,10 +81,10 @@ namespace SHADE //SHResourceManager::LoadAllAudio(system, soundList); - LoadBank("../../Assets/Audio/Master.bank"); - LoadBank("../../Assets/Audio/Master.strings.bank"); - //LoadBank("../../Assets/Audio/Music.bank"); - LoadBank("../../Assets/Audio/footsteps.bank"); + LoadBank((AUDIO_FOLDER_PATH + "Master.bank").data()); + LoadBank((AUDIO_FOLDER_PATH + "Master.strings.bank").data()); + //LoadBank((AUDIO_FOLDER_PATH + "Music.bank").data()); + LoadBank((AUDIO_FOLDER_PATH + "footsteps.bank").data()); //auto clip = CreateAudioClip("event:/Characters/sfx_footsteps_human"); //clip->Play(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index c18f0c8c..cfb36cd0 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -24,6 +24,9 @@ #include "Serialization/SHSerialization.h" #include "Serialization/Configurations/SHConfigurationManager.h" + +const std::string LAYOUT_FOLDER_PATH{ std::string(ASSET_ROOT) + "/Editor/Layouts" }; + namespace SHADE { constexpr ImGuiWindowFlags editorMenuBarFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | @@ -43,8 +46,7 @@ namespace SHADE void SHEditorMenuBar::Init() { SHEditorWindow::Init(); - constexpr std::string_view path = "../../Assets/Editor/Layouts"; - for(auto const& entry : std::filesystem::directory_iterator(path)) + for(auto const& entry : std::filesystem::directory_iterator(LAYOUT_FOLDER_PATH)) { layoutPaths.push_back(entry.path()); } diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 19d147e6..c4ad3459 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -65,6 +65,10 @@ RTTR_REGISTRATION ); } +const std::string USER_LAYOUT_PATH{ std::string(ASSET_ROOT) + "/Editor/Layouts/UserLayout.ini" }; +const std::string DEFAULT_LAYOUT_PATH{ std::string(ASSET_ROOT) + "/Editor/Layouts/Default.ini" }; +const std::string FONT_FOLDER_PATH{ std::string(ASSET_ROOT) + "/Editor/Fonts/"}; + namespace SHADE { @@ -106,7 +110,7 @@ namespace SHADE io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls io->ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Enable for Multi-Viewports io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; //Enable docking - io->IniFilename = "../../Assets/Editor/Layouts/UserLayout.ini"; + io->IniFilename = USER_LAYOUT_PATH.data(); io->ConfigWindowsMoveFromTitleBarOnly = true; InitLayout(); @@ -236,20 +240,20 @@ namespace SHADE { if(!std::filesystem::exists(io->IniFilename)) { - std::filesystem::copy_file("../../Assets/Editor/Layouts/Default.ini", io->IniFilename); + std::filesystem::copy_file(DEFAULT_LAYOUT_PATH.data(), io->IniFilename); } //eventually load preferred layout here } void SHEditor::InitFonts() noexcept { - ImFont* mainFont = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/Segoe UI.ttf", 20.f);//TODO: Change to config based assets path + ImFont* mainFont = io->Fonts->AddFontFromFileTTF(std::string(FONT_FOLDER_PATH + "Segoe UI.ttf").data(), 20.f);//TODO: Change to config based assets path ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; - ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path + ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF(std::string(FONT_FOLDER_PATH + "fa-solid-900.ttf").data(), 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; - ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path + ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF(std::string(FONT_FOLDER_PATH + "MaterialIcons-Regular.ttf").data(), 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 827f45a2..4f3fbce6 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -26,13 +26,15 @@ of DigiPen Institute of Technology is prohibited. #include "Events/SHEventManager.hpp" #include "Physics/SHPhysicsSystem.h" +#include "Assets/SHAssetMacros.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ /* Static Definitions */ /*----------------------------------------------------------------------------------*/ const std::string SHScriptEngine::DEFAULT_CSHARP_NAMESPACE = std::string("SHADE"); - const std::string SHScriptEngine::CSPROJ_DIR = "..\\..\\TempScriptsFolder"; + const std::string SHScriptEngine::CSPROJ_DIR = std::string(ASSET_ROOT) + "/Scripts"; const std::string SHScriptEngine::CSPROJ_PATH = std::string(CSPROJ_DIR) + "\\SHADE_Scripting.csproj"; /*-----------------------------------------------------------------------------------*/ From e8d2179d76150613a3f9daef12a65c2720c6cc30 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 10 Nov 2022 11:01:17 +0800 Subject: [PATCH 715/793] Added test support for List display in editor --- SHADE_Managed/src/Editor/Editor.cxx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 54200c1e..d5ef3005 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -302,6 +302,29 @@ namespace SHADE registerUndoAction(object, field, newVal, gameObj); } } + // Any List + else if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) + { + System::Type^ listType = field->FieldType->GenericTypeArguments[0]; + System::Collections::IEnumerable^ listEnummerable = safe_cast(field->GetValue(object)); + + + SHEditorUI::Text(Convert::ToNative(field->Name)); + SHEditorUI::SameLine(); + SHEditorUI::Button("+"); + + SHEditorUI::Indent(); + int i = 0; + for each (System::Object^ obj in listEnummerable) + { + int val = safe_cast(obj); + SHEditorUI::InputInt(std::to_string(i), val, &isHovered); + SHEditorUI::SameLine(); + SHEditorUI::Button("-"); + ++i; + } + SHEditorUI::Unindent(); + } else { array^ interfaces = field->FieldType->GetInterfaces(); From 35bcdc5239ca3cd86ea697504f98c3355d122a9e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 11:14:40 +0800 Subject: [PATCH 716/793] Missed out path for config --- .../src/Serialization/Configurations/SHConfigurationManager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h index abf679ca..767b8c2b 100644 --- a/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h +++ b/SHADE_Engine/src/Serialization/Configurations/SHConfigurationManager.h @@ -25,8 +25,8 @@ namespace SHADE class SH_API SHConfigurationManager { public: - static constexpr std::string_view applicationConfigPath{"../../Assets/Application.SHConfig"}; - static constexpr std::string_view editorConfigPath{"../../Assets/Editor/Editor.SHConfig"}; + static inline std::string applicationConfigPath{ std::string(ASSET_ROOT) + "/Application.SHConfig"}; + static inline std::string editorConfigPath{ std::string(ASSET_ROOT) + "/Editor/Editor.SHConfig"}; static void SaveApplicationConfig(); static SHApplicationConfig& LoadApplicationConfig(WindowData* wndData = nullptr); From e4e48946105f06b5e9cc55fecc5cc2960e27ba60 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 10 Nov 2022 13:01:31 +0800 Subject: [PATCH 717/793] Canvas Component Added a canvas component. No functionality added yet --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 2 +- SHADE_Engine/src/UI/SHCanvasComponent.h | 35 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/UI/SHCanvasComponent.h diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index d5bd414d..60e66df6 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -399,7 +399,7 @@ namespace SHADE SHVec3 up = { 0.0f,1.0f,0.0f }; - ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + //SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); //target = SHVec3::Normalise(target); diff --git a/SHADE_Engine/src/UI/SHCanvasComponent.h b/SHADE_Engine/src/UI/SHCanvasComponent.h new file mode 100644 index 00000000..2e9a54f1 --- /dev/null +++ b/SHADE_Engine/src/UI/SHCanvasComponent.h @@ -0,0 +1,35 @@ +#pragma once + +#include "SH_API.h" +#include "ECS_Base/Components/SHComponent.h" + + +namespace SHADE +{ + + class SH_API SHCanvasComponent final: public SHComponent + { + using CanvasSizeType = uint32_t; + + + public: + SHCanvasComponent(); + ~SHCanvasComponent() = default; + + void SetCanvasSize(CanvasSizeType width, CanvasSizeType height) noexcept; + void SetCanvasWidth(CanvasSizeType width) noexcept; + void SetCanvasHeight(CanvasSizeType height) noexcept; + + CanvasSizeType const GetCanvasWidth() const noexcept; + CanvasSizeType const GetCanvasHeight() const noexcept; + + private: + CanvasSizeType width; + CanvasSizeType height; + + + + }; + + +} \ No newline at end of file From 3efecd64e71149a18d502861c6ab6cce8aef9c47 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 10 Nov 2022 14:30:30 +0800 Subject: [PATCH 718/793] Added box & sphere debug draw for physics --- Assets/Scenes/M2Scene.shade | 32 ++++++ .../src/Application/SBApplication.cpp | 39 ++++--- .../src/Physics/SHPhysicsDebugDrawSystem.cpp | 107 ++++++++++++++---- .../src/Physics/SHPhysicsDebugDrawSystem.h | 17 +-- 4 files changed, 148 insertions(+), 47 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 30dea780..939c2117 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -226,4 +226,36 @@ Color: {x: 1, y: 1, z: 1, w: 1} Layer: 4294967295 Strength: 0.25 + Scripts: ~ +- EID: 10 + Name: Default + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -1.50709069, y: 2.57871056, z: -5} + Rotate: {x: -0.463157475, y: -0.553180635, z: 0.0868046582} + Scale: {x: 0.99998343, y: 0.999987662, z: 0.999981642} + RigidBody Component: + Type: Dynamic + Mass: 1 + Drag: 0 + Angular Drag: 0 + Use Gravity: true + Interpolate: true + Freeze Position X: false + Freeze Position Y: false + Freeze Position Z: false + Freeze Rotation X: false + Freeze Rotation Y: false + Freeze Rotation Z: false + Collider Component: + Colliders: + - Is Trigger: false + Type: Sphere + Radius: 1 + Friction: 0.400000006 + Bounciness: 0 + Density: 1 + Position Offset: {x: 0, y: 0, z: 0} Scripts: ~ \ No newline at end of file diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 6ccdacb8..6955035b 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -24,14 +24,15 @@ #include "Scene/SHSceneManager.h" // Systems -#include "Scripting/SHScriptEngine.h" -#include "Physics/SHPhysicsSystem.h" -#include "Math/Transform/SHTransformSystem.h" -#include "Input/SHInputManager.h" -#include "FRC/SHFramerateController.h" #include "AudioSystem/SHAudioSystem.h" #include "Camera/SHCameraSystem.h" +#include "FRC/SHFramerateController.h" #include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "Input/SHInputManager.h" +#include "Math/Transform/SHTransformSystem.h" +#include "Physics/SHPhysicsSystem.h" +#include "Physics/SHPhysicsDebugDrawSystem.h" +#include "Scripting/SHScriptEngine.h" // Components #include "Graphics/MiddleEnd/Interface/SHRenderable.h" @@ -39,7 +40,6 @@ #include "Scenes/SBTestScene.h" - #include "Assets/SHAssetManager.h" #include "Scenes/SBMainScene.h" #include "Serialization/Configurations/SHConfigurationManager.h" @@ -67,16 +67,21 @@ namespace Sandbox window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow, wndData); // Create Systems - SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); - SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); - SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); - SHSystemManager::CreateSystem(); + + + SHSystemManager::CreateSystem(); + SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); // Link up SHDebugDraw + SHSystemManager::CreateSystem(); SHDebugDraw::Init(SHSystemManager::GetSystem()); #ifdef SHEDITOR @@ -102,6 +107,8 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); @@ -160,12 +167,12 @@ namespace Sandbox SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); editor->PollPicking(); - //static bool drawColliders = false; - //if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::F10)) - //{ - // drawColliders = !drawColliders; - // SHSystemManager::GetSystem()->SetDrawColliders(drawColliders); - //} + static bool drawColliders = false; + if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::F10)) + { + drawColliders = !drawColliders; + SHSystemManager::GetSystem()->SetDebugDrawFlag(SHPhysicsDebugDrawSystem::DebugDrawFlags::COLLIDER, drawColliders); + } } // Finish all graphics jobs first graphicsSystem->AwaitGraphicsExecution(); diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp index 514fb749..ff441ac2 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp @@ -90,6 +90,8 @@ namespace SHADE void SHPhysicsDebugDrawSystem::Init() { + SystemFamily::GetID(); + SHASSERT(physicsSystem == nullptr, "Non-existent physics system attached to the physics debug draw system!") physicsSystem = SHSystemManager::GetSystem(); } @@ -101,7 +103,14 @@ namespace SHADE void SHPhysicsDebugDrawSystem::PhysicsDebugDrawRoutine::Execute(double) noexcept { - + auto* system = reinterpret_cast(GetSystem()); + + for (int i = 0; i < SHUtilities::ConvertEnum(DebugDrawFlags::NUM_FLAGS); ++i) + { + const bool DRAW = (system->debugDrawFlags & (1U << i)) > 0; + if (DRAW) + drawFunctions[i](system->rp3dDebugRenderer); + } } /*-----------------------------------------------------------------------------------*/ @@ -110,36 +119,15 @@ namespace SHADE void SHPhysicsDebugDrawSystem::drawColliders(rp3d::DebugRenderer* debugRenderer) noexcept { - auto* debugDrawSystem = SHSystemManager::GetSystem(); - if (debugDrawSystem == nullptr) - { - SHLOG_ERROR("Unable to get a debug draw system for Physics Debug Drawing!") - return; - } - const auto& COLLIDER_SET = SHComponentManager::GetDense(); for (const auto& COLLIDER : COLLIDER_SET) { - // Get the colliders of each component - const SHVec3& POS = COLLIDER.GetPosition(); - const SHQuaternion& ROT = COLLIDER.GetOrientation(); - for (auto& collisionShape : COLLIDER.GetCollisionShapes()) { switch (collisionShape.GetType()) { - case SHCollisionShape::Type::BOX: - { - auto* BOX = reinterpret_cast(collisionShape.GetShape()); - - break; - } - case SHCollisionShape::Type::SPHERE: - { - - - break; - } + case SHCollisionShape::Type::BOX: debugDrawBox(COLLIDER, collisionShape); break; + case SHCollisionShape::Type::SPHERE: debugDrawSphere(COLLIDER, collisionShape); break; default: break; } } @@ -166,4 +154,75 @@ namespace SHADE } + void SHPhysicsDebugDrawSystem::debugDrawBox(const SHColliderComponent& colliderComponent, const SHCollisionShape& collisionShape) noexcept + { + static constexpr uint32_t NUM_BOX_VERTICES = 8; + static const SHVec3 boxVertices[NUM_BOX_VERTICES] + { + { 0.5f, 0.5f, -0.5f } // TOP_RIGHT_BACK + , { -0.5f, 0.5f, -0.5f } // TOP_LEFT_BACK + , { 0.5f, -0.5f, -0.5f } // BTM_RIGHT_BACK + , { -0.5f, -0.5f, -0.5f } // BTM_LEFT_BACK + , { 0.5f, 0.5f, 0.5f } // TOP_RIGHT_FRONT + , { -0.5f, 0.5f, 0.5f } // TOP_LEFT_FRONT + , { 0.5f, -0.5f, 0.5f } // BTM_RIGHT_FRONT + , { -0.5f, -0.5f, 0.5f } // BTM_LEFT_FRONT + }; + + auto* debugDrawSystem = SHSystemManager::GetSystem(); + if (debugDrawSystem == nullptr) + { + SHLOG_ERROR("Unable to get a debug draw system for Physics Debug Drawing!") + return; + } + + auto* BOX = reinterpret_cast(collisionShape.GetShape()); + + // Calculate final position & orientation + const SHVec3 FINAL_POS = colliderComponent.GetPosition() + collisionShape.GetPositionOffset(); + const SHQuaternion FINAL_ROT = colliderComponent.GetOrientation() * SHQuaternion::FromEuler(collisionShape.GetRotationOffset()); + + const SHMatrix BOX_TRS = SHMatrix::Scale(BOX->GetWorldExtents() * 2.0f) * SHMatrix::Rotate(FINAL_ROT) * SHMatrix::Translate(FINAL_POS); + + const SHColour COLLIDER_COLOUR = collisionShape.IsTrigger() ? SHColour::PURPLE : SHColour::GREEN; + + std::array transformedVertices; + for (uint32_t i = 0; i < NUM_BOX_VERTICES / 2; ++i) + { + const uint32_t IDX1 = i; + const uint32_t IDX2 = i + NUM_BOX_VERTICES / 2; + + transformedVertices[IDX1] = SHVec3::Transform(boxVertices[IDX1], BOX_TRS); + transformedVertices[IDX2] = SHVec3::Transform(boxVertices[IDX2], BOX_TRS); + + // Draw 4 line to connect the quads + debugDrawSystem->DrawLine(COLLIDER_COLOUR, transformedVertices[IDX1], transformedVertices[IDX2]); + } + + // A, B, C, D + std::array backQuad { transformedVertices[0], transformedVertices[1], transformedVertices[3], transformedVertices[2] }; + debugDrawSystem->DrawPoly(COLLIDER_COLOUR, backQuad.begin(), backQuad.end()); + // E, F, G, H + std::array frontQuad { transformedVertices[4], transformedVertices[5], transformedVertices[7], transformedVertices[6] }; + debugDrawSystem->DrawPoly(COLLIDER_COLOUR, frontQuad.begin(), frontQuad.end()); + } + + void SHPhysicsDebugDrawSystem::debugDrawSphere(const SHColliderComponent& colliderComponent, const SHCollisionShape& collisionShape) noexcept + { + auto* debugDrawSystem = SHSystemManager::GetSystem(); + if (debugDrawSystem == nullptr) + { + SHLOG_ERROR("Unable to get a debug draw system for Physics Debug Drawing!") + return; + } + + auto* SPHERE = reinterpret_cast(collisionShape.GetShape()); + + const SHColour COLLIDER_COLOUR = collisionShape.IsTrigger() ? SHColour::PURPLE : SHColour::GREEN; + + // Calculate final position & orientation + const SHVec3 FINAL_POS = colliderComponent.GetPosition() + collisionShape.GetPositionOffset(); + debugDrawSystem->DrawSphere(COLLIDER_COLOUR, FINAL_POS, SPHERE->GetWorldRadius()); + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h index 860d99d8..53037ab2 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h @@ -24,7 +24,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHPhysicsDebugDrawSystem : public SHSystem + class SH_API SHPhysicsDebugDrawSystem final : public SHSystem { public: /*---------------------------------------------------------------------------------*/ @@ -71,7 +71,7 @@ namespace SHADE /* System Routines */ /*---------------------------------------------------------------------------------*/ - class SH_API PhysicsDebugDrawRoutine : public SHSystemRoutine + class SH_API PhysicsDebugDrawRoutine final : public SHSystemRoutine { public: /*-------------------------------------------------------------------------------*/ @@ -110,11 +110,14 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - static void drawColliders (rp3d::DebugRenderer* debugRenderer) noexcept; - static void drawColliderAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; - static void drawBroadPhaseAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; - static void drawContactPoints (rp3d::DebugRenderer* debugRenderer) noexcept; - static void drawContactNormals (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawColliders (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawColliderAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawBroadPhaseAABBs (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawContactPoints (rp3d::DebugRenderer* debugRenderer) noexcept; + static void drawContactNormals (rp3d::DebugRenderer* debugRenderer) noexcept; + + static void debugDrawBox (const SHColliderComponent& colliderComponent, const SHCollisionShape& collisionShape) noexcept; + static void debugDrawSphere (const SHColliderComponent& colliderComponent, const SHCollisionShape& collisionShape) noexcept; }; } // namespace SHADE From bdc72979370823c5d3181bf60f824e495bac5306 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 10 Nov 2022 16:20:04 +0800 Subject: [PATCH 719/793] Converted macros for script field inspectors to use templates --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 4 +- SHADE_Engine/src/Editor/SHEditorUI.h | 2 +- SHADE_Managed/src/Editor/Editor.cxx | 378 ++++++++++--------------- SHADE_Managed/src/Editor/Editor.h++ | 109 +++++++ SHADE_Managed/src/Editor/Editor.hxx | 56 ++++ SHADE_Managed/src/Utility/Convert.hxx | 52 +++- 6 files changed, 361 insertions(+), 240 deletions(-) create mode 100644 SHADE_Managed/src/Editor/Editor.h++ diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 49cfbfd6..ba394f77 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -266,10 +266,10 @@ namespace SHADE static const std::vector COMPONENT_LABELS = { "X", "Y" }; return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y }, 0.1f, "%.3f", float{}, float{}, 0, isHovered); } - bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value, bool* isHovered, float speed) + bool SHEditorUI::InputVec3(const std::string& label, SHVec3& value, bool* isHovered) { static const std::vector COMPONENT_LABELS = { "X", "Y", "Z"}; - return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y, &value.z }, speed, "%.3f", float{}, float{}, 0, isHovered); + return SHEditorWidgets::DragN(label, COMPONENT_LABELS, { &value.x, &value.y, &value.z }, 0.1f, "%.3f", float{}, float{}, 0, isHovered); } bool SHEditorUI::InputTextField(const std::string& label, std::string& value, bool* isHovered) diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index 4e8f4400..e0ea0521 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -296,7 +296,7 @@ namespace SHADE /// Reference to the variable to store the result. /// -/// Macro expansion that is used in renderFieldInInspector() to check the type of a field -/// named "field" against the specified type and if it matches, retrieves the value of -/// that field from an object named "object" and pass it into the specified SHEditorUI:: -/// function named "FUNC" by casting it into the NATIVE_TYPE specified. -///
    -/// This only works for primitive types that have the same types for managed and native. -///
    -/// The managed type of the object to edit. -/// The native type of the object to edit. -/// The SHEditorUI:: function to use for editing. -#define RENDER_FIELD(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ -(field->FieldType == MANAGED_TYPE::typeid) \ -{ \ - NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ - NATIVE_TYPE oldVal = val; \ - if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val, &isHovered))\ - { \ - field->SetValue(object, val); \ - registerUndoAction(object, field, val, oldVal); \ - } \ -} \ -/// -/// Alternative to RENDER_FIELD that checks for RangeAttribute and switches to a slider -/// instead. -/// -/// The managed type of the object to edit. -/// The native type of the object to edit. -/// The SHEditorUI:: function to use for editing. -#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ -(field->FieldType == MANAGED_TYPE::typeid) \ -{ \ - NATIVE_TYPE val = safe_cast(field->GetValue(object)); \ - NATIVE_TYPE oldVal = val; \ - \ - RangeAttribute^ rangeAttrib = hasAttribute(field);\ - const std::string FIELD_NAME = Convert::ToNative(field->Name); \ - bool changed = false; \ - if (rangeAttrib) \ - { \ - changed = SHEditorUI::InputSlider \ - ( \ - FIELD_NAME, \ - static_cast(rangeAttrib->Min), \ - static_cast(rangeAttrib->Max), \ - val, &isHovered \ - ); \ - } \ - else \ - { \ - changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \ - } \ - \ - if (changed) \ - { \ - field->SetValue(object, val); \ - registerUndoAction(object, field, val, oldVal); \ - } \ -} \ -/// -/// Macro expansion that is used in renderFieldInInspector() to check the type of a field -/// named "field" against the specified type and if it matches, retrieves the value of -/// that field from an object named "object" and pass it into the specified SHEditorUI:: -/// function named "FUNC" by casting it into the NATIVE_TYPE specified. -///
    -/// This only works for types that have an implementation of Convert::ToNative and -/// Convert::ToCLI. -///
    -/// The managed type of the object to edit. -/// The native type of the object to edit. -/// The SHEditorUI:: function to use for editing. -#define RENDER_FIELD_CASTED(MANAGED_TYPE, NATIVE_TYPE, FUNC) \ -(field->FieldType == MANAGED_TYPE::typeid) \ -{ \ - NATIVE_TYPE val = Convert::ToNative(safe_cast(field->GetValue(object))); \ - NATIVE_TYPE oldVal = val; \ - \ - if (SHEditorUI::FUNC(Convert::ToNative(field->Name), val, &isHovered)) \ - { \ - field->SetValue(object, Convert::ToCLI(val)); \ - registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); \ - } \ -} \ - /*-------------------------------------------------------------------------------------*/ /* Function Definitions */ /*-------------------------------------------------------------------------------------*/ @@ -238,161 +153,166 @@ namespace SHADE { bool isHovered = false; - if RENDER_FIELD_RANGE (Int16, int, InputInt) - else if RENDER_FIELD_RANGE (Int32, int, InputInt) - else if RENDER_FIELD_RANGE (Int64, int, InputInt) - else if RENDER_FIELD_RANGE (UInt16, unsigned int, InputUnsignedInt) - else if RENDER_FIELD_RANGE (UInt32, unsigned int, InputUnsignedInt) - else if RENDER_FIELD_RANGE (UInt64, unsigned int, InputUnsignedInt) - else if RENDER_FIELD_RANGE (Byte, int, InputInt) - else if RENDER_FIELD (bool, bool, InputCheckbox) - else if RENDER_FIELD_RANGE (float, float, InputFloat) - else if RENDER_FIELD_RANGE (double, double, InputDouble) - else if (field->FieldType->IsSubclassOf(Enum::typeid)) - { - // Get all the names of the enums - const array^ ENUM_NAMES = field->FieldType->GetEnumNames(); - std::vector nativeEnumNames; - for each (String^ str in ENUM_NAMES) - { - nativeEnumNames.emplace_back(Convert::ToNative(str)); - } + const bool MODIFIED_PRIMITIVE = + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputCheckbox, &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputFloat , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputDouble , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputVec2 , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered); - int val = safe_cast(field->GetValue(object)); - int oldVal = val; - if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames, &isHovered)) - { - field->SetValue(object, val); - registerUndoAction(object, field, val, oldVal); - } - } - else if RENDER_FIELD_CASTED(Vector2, SHVec2, InputVec2) - else if RENDER_FIELD_CASTED(Vector3, SHVec3, InputVec3) - else if (field->FieldType == String::typeid) + if (!MODIFIED_PRIMITIVE) { - // Prevent issues where String^ is null due to being empty - String^ stringVal = safe_cast(field->GetValue(object)); - if (stringVal == nullptr) + if (field->FieldType->IsSubclassOf(Enum::typeid)) { - stringVal = ""; - } - - // Actual Field - std::string val = Convert::ToNative(stringVal); - std::string oldVal = val; - if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val, &isHovered)) - { - field->SetValue(object, Convert::ToCLI(val)); - registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); - } - } - else if (field->FieldType == GameObject::typeid) - { - GameObject gameObj = safe_cast(field->GetValue(object)); - uint32_t entityId = gameObj.GetEntity(); - if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered, !gameObj)) - { - GameObject newVal = GameObject(entityId); - if (entityId != MAX_EID) + // Get all the names of the enums + const array^ ENUM_NAMES = field->FieldType->GetEnumNames(); + std::vector nativeEnumNames; + for each (String ^ str in ENUM_NAMES) { - // Null GameObject set - newVal = GameObject(entityId); + nativeEnumNames.emplace_back(Convert::ToNative(str)); + } + + int val = safe_cast(field->GetValue(object)); + int oldVal = val; + if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames, &isHovered)) + { + field->SetValue(object, val); + registerUndoAction(object, field, val, oldVal); } - field->SetValue(object, newVal); - registerUndoAction(object, field, newVal, gameObj); } - } - // Any List - else if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) - { - System::Type^ listType = field->FieldType->GenericTypeArguments[0]; - System::Collections::IEnumerable^ listEnummerable = safe_cast(field->GetValue(object)); - - - SHEditorUI::Text(Convert::ToNative(field->Name)); - SHEditorUI::SameLine(); - SHEditorUI::Button("+"); - - SHEditorUI::Indent(); - int i = 0; - for each (System::Object^ obj in listEnummerable) + else if (field->FieldType == String::typeid) { - int val = safe_cast(obj); - SHEditorUI::InputInt(std::to_string(i), val, &isHovered); + // Prevent issues where String^ is null due to being empty + String^ stringVal = safe_cast(field->GetValue(object)); + if (stringVal == nullptr) + { + stringVal = ""; + } + + // Actual Field + std::string val = Convert::ToNative(stringVal); + std::string oldVal = val; + if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val, &isHovered)) + { + field->SetValue(object, Convert::ToCLI(val)); + registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); + } + } + else if (field->FieldType == GameObject::typeid) + { + GameObject gameObj = safe_cast(field->GetValue(object)); + uint32_t entityId = gameObj.GetEntity(); + if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered, !gameObj)) + { + GameObject newVal = GameObject(entityId); + if (entityId != MAX_EID) + { + // Null GameObject set + newVal = GameObject(entityId); + } + field->SetValue(object, newVal); + registerUndoAction(object, field, newVal, gameObj); + } + } + // Any List + else if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) + { + System::Type^ listType = field->FieldType->GenericTypeArguments[0]; + System::Collections::IEnumerable^ listEnummerable = safe_cast(field->GetValue(object)); + + + SHEditorUI::Text(Convert::ToNative(field->Name)); SHEditorUI::SameLine(); - SHEditorUI::Button("-"); - ++i; - } - SHEditorUI::Unindent(); - } - else - { - array^ interfaces = field->FieldType->GetInterfaces(); - if (interfaces->Length > 0 && interfaces[0] == ICallbackEvent::typeid) - { - array^ typeArgs = field->FieldType->GenericTypeArguments; - System::String^ title = field->Name + " : CallbackEvent<"; - for (int i = 0; i < typeArgs->Length; ++i) + SHEditorUI::Button("+"); + + SHEditorUI::Indent(); + int i = 0; + for each (System::Object ^ obj in listEnummerable) { - title += typeArgs[i]->Name; - if (i < typeArgs->Length - 1) - title += ", "; - } - title += ">"; - if (SHEditorUI::CollapsingHeader(Convert::ToNative(title))) - { - // Constants - const std::string LABEL = Convert::ToNative(field->Name); - SHEditorUI::PushID(LABEL); - - ICallbackEvent^ callbackEvent = safe_cast(field->GetValue(object)); - if (callbackEvent == nullptr) - { - // Construct one since it was not constructed before - callbackEvent = safe_cast(System::Activator::CreateInstance(field->FieldType)); - } - for each (ICallbackAction ^ action in callbackEvent->Actions) - { - if (action->IsRuntimeAction) - continue; - - // Attempt to get the object if any - int entityId = static_cast(-1); - if (action->TargetObject) - { - Script^ script = safe_cast(action->TargetObject); - if (script) - { - entityId = static_cast(script->Owner.GetEntity()); - } - } - SHEditorUI::InputInt("", entityId); - SHEditorUI::SameLine(); - System::String^ methodName = ""; - if (action->TargetMethodName != nullptr) - { - methodName = action->TargetMethodName; - } - std::string methodNameNative = Convert::ToNative(methodName); - SHEditorUI::InputTextField("", methodNameNative); - SHEditorUI::SameLine(); - if (SHEditorUI::Button("-")) - { - callbackEvent->DeregisterAction(action); - break; - } - } - if (SHEditorUI::Button("Add Action")) - { - callbackEvent->RegisterAction(); - } - - SHEditorUI::PopID(); + int val = safe_cast(obj); + SHEditorUI::InputInt(std::to_string(i), val, &isHovered); + SHEditorUI::SameLine(); + SHEditorUI::Button("-"); + ++i; } + SHEditorUI::Unindent(); } else { - return; + array^ interfaces = field->FieldType->GetInterfaces(); + if (interfaces->Length > 0 && interfaces[0] == ICallbackEvent::typeid) + { + array^ typeArgs = field->FieldType->GenericTypeArguments; + System::String^ title = field->Name + " : CallbackEvent<"; + for (int i = 0; i < typeArgs->Length; ++i) + { + title += typeArgs[i]->Name; + if (i < typeArgs->Length - 1) + title += ", "; + } + title += ">"; + if (SHEditorUI::CollapsingHeader(Convert::ToNative(title))) + { + // Constants + const std::string LABEL = Convert::ToNative(field->Name); + SHEditorUI::PushID(LABEL); + + ICallbackEvent^ callbackEvent = safe_cast(field->GetValue(object)); + if (callbackEvent == nullptr) + { + // Construct one since it was not constructed before + callbackEvent = safe_cast(System::Activator::CreateInstance(field->FieldType)); + } + for each (ICallbackAction ^ action in callbackEvent->Actions) + { + if (action->IsRuntimeAction) + continue; + + // Attempt to get the object if any + int entityId = static_cast(-1); + if (action->TargetObject) + { + Script^ script = safe_cast(action->TargetObject); + if (script) + { + entityId = static_cast(script->Owner.GetEntity()); + } + } + SHEditorUI::InputInt("", entityId); + SHEditorUI::SameLine(); + System::String^ methodName = ""; + if (action->TargetMethodName != nullptr) + { + methodName = action->TargetMethodName; + } + std::string methodNameNative = Convert::ToNative(methodName); + SHEditorUI::InputTextField("", methodNameNative); + SHEditorUI::SameLine(); + if (SHEditorUI::Button("-")) + { + callbackEvent->DeregisterAction(action); + break; + } + } + if (SHEditorUI::Button("Add Action")) + { + callbackEvent->RegisterAction(); + } + + SHEditorUI::PopID(); + } + } + else + { + return; + } } } diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ new file mode 100644 index 00000000..2cda78e7 --- /dev/null +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -0,0 +1,109 @@ +/************************************************************************************//*! +\file Editor.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 10, 2022 +\brief Contains the definition of templated functions for the managed Editor + static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Include +#include "Editor.hxx" + +namespace SHADE +{ + template + bool Editor::renderFieldInInspector(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered) + { + if (fieldInfo->FieldType == ManagedType::typeid) + { + RangeAttribute^ rangeAttrib; + if constexpr (std::is_arithmetic_v && !std::is_same_v) + { + rangeAttrib = hasAttribute(fieldInfo); + } + + ManagedType val = safe_cast(fieldInfo->GetValue(object)); + if (renderFieldInInspector + ( + Convert::ToNative(fieldInfo->Name), + val, + fieldEditor, + isHovered, + rangeAttrib + )) + { + fieldInfo->SetValue(object, val); + // TODO: Register undo + } + + return true; + } + + return false; + } + + template + bool Editor::renderFieldInInspector(const std::string& fieldName, ManagedType% managedVal, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + { + // Retrieve the native version of the object + NativeType val; + if constexpr (IsPrimitiveTypeMatches_V) + { + val = safe_cast(managedVal); + } + else + { + val = Convert::ToNative(managedVal); + } + + // Throw into the SHEditorUI function + NativeType oldVal = val; + bool changed = false; + if (rangeAttrib) + { + // Do not allow bools for Sliders just in case + if constexpr (std::is_arithmetic_v && !std::is_same_v) + { + changed = SHEditorUI::InputSlider + ( + fieldName, + static_cast(rangeAttrib->Min), + static_cast(rangeAttrib->Max), + val, isHovered + ); + } + } + else + { + changed = fieldEditor(fieldName, val, isHovered); + } + + if (changed) + { + if constexpr (IsPrimitiveTypeMatches_V) + { + //field->SetValue(object, val); + managedVal = val; + //registerUndoAction(object, field, val, oldVal); + } + else + { + + managedVal = Convert::ToCLI(val); + //registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); + } + + return true; + } + + return false; + } +} diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 109842b5..c7e86622 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -17,9 +17,14 @@ of DigiPen Institute of Technology is prohibited. #include "Engine/Entity.hxx" #include "Scripts/Script.hxx" #include "UndoRedoStack.hxx" +#include "RangeAttribute.hxx" namespace SHADE { + + template + using EditorFieldFunc = bool(*)(const std::string& label, NativeType& val, bool* isHovered); + /// /// Static class for Editor-related functions /// @@ -91,8 +96,59 @@ namespace SHADE /// The Entity to render the Scripts of. /// The Script to render the inspector for. static void renderScriptContextMenu(Entity entity, Script^ script); + /// + /// Adds changes to a variable as an undo-able/redo-able action on the Undo-Redo + /// stack. + /// + /// The object that changes are applied to. + /// The field that was changed. + /// New data to set. + /// Data that was overriden. static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); + /// + /// Checks if a specific field has the specified attribute + /// + /// Type of Attribute to check for. + /// The field to check. + /// The attribute to check for if it exists. Null otherwise. generic where Attribute : System::Attribute static Attribute hasAttribute(System::Reflection::FieldInfo^ field); + /// + /// Checks if the specified field is of the specified native and managed type + /// equivalent and renders a ImGui field editor based on the specified field + /// editor function. Also handles fields that contain a RangeAttribute. + /// + /// Native type of the field. + /// Managed type of the field. + /// Describes the field to modify. + /// Object to modify that has the specified field. + /// ImGui field editor function to use. + /// + /// Pointer to a bool that stores if the field editor was hovered over. + /// + /// True if the field is modified. + template + static bool renderFieldInInspector(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered); + /// + /// Renders a ImGui field editor based on the type of parameters specified. + /// + /// Native type of the field. + /// Managed type of the field. + /// Label to use for the field editor. + /// + /// Tracking reference for the managed variable to modify. + /// + /// ImGui field editor function to use. + /// + /// Pointer to a bool that stores if the field editor was hovered over. + /// + /// + /// If provided and the type supports it, the field will be rendered with a + /// slider instead. + /// + /// True if the field is modified. + template + static bool renderFieldInInspector(const std::string& fieldName, ManagedType% managedVal, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); }; } +#include "Editor.h++" diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index 666b5062..4d0c5b59 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -152,6 +152,40 @@ namespace SHADE }; + /// + /// Checks if the specified type is matching between native C++ and the managed type. + /// + /// Type to check. + template + struct IsPrimitiveTypeMatches : public std::integral_constant + < + bool, + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> || + std::is_same_v> + > + {}; + /// + /// Short hand for IsPrimitiveTypeMatches::value + /// + /// Type to check. + template + inline constexpr bool IsPrimitiveTypeMatches_V = IsPrimitiveTypeMatches::value; + /// /// Type Transformer for managed types to native types. /// @@ -163,6 +197,7 @@ namespace SHADE { public: using Value = void; + static bool IsDefined() { return is_same_v; } }; template<> struct ToNativeType { using Value = int16_t; }; template<> struct ToNativeType { using Value = int32_t; }; @@ -193,19 +228,20 @@ namespace SHADE template struct ToManagedType { - public: + public: using Value = void; + static bool IsDefined() { return is_same_v; } }; - template<> struct ToManagedType { using Value = System::Byte; }; - template<> struct ToManagedType { using Value = System::Int16; }; - template<> struct ToManagedType { using Value = System::Int32; }; - template<> struct ToManagedType { using Value = System::Int64; }; + template<> struct ToManagedType { using Value = System::Byte; }; + template<> struct ToManagedType { using Value = System::Int16; }; + template<> struct ToManagedType { using Value = System::Int32; }; + template<> struct ToManagedType { using Value = System::Int64; }; template<> struct ToManagedType { using Value = System::UInt16; }; template<> struct ToManagedType { using Value = System::UInt32; }; template<> struct ToManagedType { using Value = System::UInt64; }; - template<> struct ToManagedType { using Value = bool; }; - template<> struct ToManagedType { using Value = double; }; - template<> struct ToManagedType { using Value = float; }; + template<> struct ToManagedType { using Value = bool; }; + template<> struct ToManagedType { using Value = double; }; + template<> struct ToManagedType { using Value = float; }; /// /// Alias for ToManagedType::Value From 0e5609995fd5f39ec956ec149649b27995f762ed Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 16:44:16 +0800 Subject: [PATCH 720/793] Added data member to signal whether asset file can be compiled Properly linked meta file to file in directory Fixed extension to type conversion bug --- SHADE_Engine/src/Assets/SHAssetMacros.h | 9 +++--- SHADE_Engine/src/Assets/SHAssetManager.cpp | 8 +++-- SHADE_Engine/src/Assets/SHAssetManager.h | 2 +- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 31 ++++++++++++++++---- SHADE_Engine/src/Filesystem/SHFileSystem.h | 2 +- SHADE_Engine/src/Filesystem/SHFolder.h | 1 + 6 files changed, 38 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 92c4b69e..e0551262 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -51,6 +51,7 @@ enum class AssetType : AssetTypeMeta SCENE, PREFAB, MATERIAL, + SCRIPT, MESH, MAX_COUNT }; @@ -91,12 +92,12 @@ constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, SHADER_BUILT_IN_EXTENSION, - MATERIAL_EXTENSION, - TEXTURE_EXTENSION, + TEXTURE_EXTENSION, MODEL_EXTENSION, - SCRIPT_EXTENSION, - SCENE_EXTENSION, + SCENE_EXTENSION, PREFAB_EXTENSION, + MATERIAL_EXTENSION, + SCRIPT_EXTENSION, AUDIO_WAV_EXTENSION, }; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 3fd71a8e..dbe9dd27 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -338,7 +338,7 @@ namespace SHADE return result; } - void SHAssetManager::CompileAsset(AssetPath const& path) noexcept + void SHAssetManager::CompileAsset(AssetPath const& path, bool genMeta) noexcept { if (!std::filesystem::exists(path)) { @@ -360,10 +360,12 @@ namespace SHADE std::string modelPath = path.string().substr(0, path.string().find_last_of('.')); modelPath += MODEL_EXTENSION; newPath = modelPath; - - GenerateNewMeta(newPath); } + if (genMeta) + { + GenerateNewMeta(newPath); + } } FolderPointer SHAssetManager::GetRootFolder() noexcept diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index ba10d84f..7fd7d039 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -87,7 +87,7 @@ namespace SHADE static std::vector GetAllDataOfType(AssetType type) noexcept; static std::vector GetAllRecordOfType(AssetType type) noexcept; - static void CompileAsset(AssetPath const& path) noexcept; + static void CompileAsset(AssetPath const& path, bool genMeta) noexcept; static FolderPointer GetRootFolder() noexcept; diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 4c0971e6..fe9b67f5 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -24,7 +24,20 @@ namespace SHADE return true; } - void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept + bool SHFileSystem::IsCompilable(std::string ext) noexcept + { + for (auto const& external : EXTERNALS) + { + if (ext == external) + { + return true; + } + } + + return false; + } + + void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept { std::queue folderQueue; root = new SHFolder("root"); @@ -38,9 +51,10 @@ namespace SHADE std::vector assets; - for (auto const& dirEntry : std::filesystem::directory_iterator(folder->path)) + for (auto& dirEntry : std::filesystem::directory_iterator(folder->path)) { - auto const& path = dirEntry.path(); + auto path = dirEntry.path(); + path.make_preferred(); if (!dirEntry.is_directory()) { if (path.extension().string() == META_EXTENSION) @@ -55,7 +69,8 @@ namespace SHADE path.stem().string(), path.string(), path.extension().string(), - nullptr + nullptr, + IsCompilable(path.extension().string()) ); } continue; @@ -72,8 +87,12 @@ namespace SHADE { if (file.name == asset.name) { - file.assetMeta = &assetCollection[asset.id]; - break; + AssetPath path{ file.path }; + if (SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()) == asset.type) + { + file.assetMeta = &assetCollection[asset.id]; + break; + } } } } diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index 956d3916..3f2e1c5b 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -23,6 +23,6 @@ namespace SHADE private: static bool DeleteFolder(FolderPointer location) noexcept; - + static bool IsCompilable(std::string ext) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Filesystem/SHFolder.h b/SHADE_Engine/src/Filesystem/SHFolder.h index 54e95033..5c702b51 100644 --- a/SHADE_Engine/src/Filesystem/SHFolder.h +++ b/SHADE_Engine/src/Filesystem/SHFolder.h @@ -33,6 +33,7 @@ namespace SHADE FilePath path; FileExt ext; SHAsset const* assetMeta; + bool compilable; }; class SHFolder From 03f9c593b6637c807071c0d3b685c9d7891cbbab Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 17:09:55 +0800 Subject: [PATCH 721/793] Function to call to refresh asset directory --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 7 +++++ SHADE_Engine/src/Assets/SHAssetManager.h | 1 + SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 32 ++++++++++++++++---- SHADE_Engine/src/Filesystem/SHFileSystem.h | 2 +- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index dbe9dd27..f4727417 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -373,6 +373,13 @@ namespace SHADE return folderRoot; } + void SHAssetManager::RefreshDirectory() noexcept + { + SHFileSystem::DestroyDirectory(folderRoot); + assetCollection.clear(); + BuildAssetCollection(); + } + bool SHAssetManager::IsRecognised(char const* ext) noexcept { for (auto const& e : EXTENSIONS) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 7fd7d039..a891ec23 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -90,6 +90,7 @@ namespace SHADE static void CompileAsset(AssetPath const& path, bool genMeta) noexcept; static FolderPointer GetRootFolder() noexcept; + static void RefreshDirectory() noexcept; private: diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index fe9b67f5..c4bcc5dc 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -12,6 +12,7 @@ #include "SHFileSystem.h" #include #include +#include #include "Assets/SHAssetMetaHandler.h" @@ -39,15 +40,15 @@ namespace SHADE void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept { - std::queue folderQueue; + std::stack folderStack; root = new SHFolder("root"); root->path = path; - folderQueue.push(root); + folderStack.push(root); - while (!folderQueue.empty()) + while (!folderStack.empty()) { - auto const folder = folderQueue.front(); - folderQueue.pop(); + auto const folder = folderStack.top(); + folderStack.pop(); std::vector assets; @@ -77,7 +78,7 @@ namespace SHADE } auto newFolder{ folder->CreateSubFolderHere(path.stem().string()) }; - folderQueue.push(newFolder); + folderStack.push(newFolder); } for (auto const& asset : assets) @@ -98,4 +99,23 @@ namespace SHADE } } } + + void SHFileSystem::DestroyDirectory(FolderPointer root) noexcept + { + std::stack folderStack; + folderStack.push(root); + + while(!folderStack.empty()) + { + auto const folder = folderStack.top(); + folderStack.pop(); + + for (auto const& ptr : folder->subFolders) + { + folderStack.push(ptr); + } + + delete folder; + } + } } diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index 3f2e1c5b..87d13f42 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -20,7 +20,7 @@ namespace SHADE { public: static void BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept; - + static void DestroyDirectory(FolderPointer root) noexcept; private: static bool DeleteFolder(FolderPointer location) noexcept; static bool IsCompilable(std::string ext) noexcept; From ed1bc7c62d31a62980adc029f96c0ecbe605d80d Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 17:34:33 +0800 Subject: [PATCH 722/793] Changed scripting project relative path to managed and csharp dlls --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 4f3fbce6..dc779334 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -264,12 +264,12 @@ namespace SHADE \n\ \n\ \n\ - ..\\bin\\Debug\\SHADE_Managed.dll\n\ - ..\\bin\\Release\\SHADE_Managed.dll\n\ + ..\\..\\bin\\Debug\\SHADE_Managed.dll\n\ + ..\\..\\bin\\Release\\SHADE_Managed.dll\n\ \n\ \n\ - ..\\bin\\Debug\\SHADE_CSharp.dll\n\ - ..\\bin\\Release\\SHADE_CSharp.dll\n\ + ..\\..\\bin\\Debug\\SHADE_CSharp.dll\n\ + ..\\..\\bin\\Release\\SHADE_CSharp.dll\n\ \n\ \n\ "; From c95a6a2492da4e01555c23ed52441c4c33fc29e5 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 10 Nov 2022 17:37:59 +0800 Subject: [PATCH 723/793] Added open modes for ofstream when building csharp project --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index dc779334..276eeb24 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -275,7 +275,7 @@ namespace SHADE "; // Attempt to create the file - std::ofstream file(path); + std::ofstream file(path, std::ios::out | std::ios::trunc); if (!file.is_open()) throw std::runtime_error("Unable to create CsProj file!"); From cf5cc41a3f6a0a641163eb8a80841c2373761c44 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 10 Nov 2022 18:10:15 +0800 Subject: [PATCH 724/793] Reworked Undo-Redo system to be more flexible and stable --- SHADE_Managed/src/Editor/Editor.cxx | 9 +--- SHADE_Managed/src/Editor/Editor.h++ | 8 ++- SHADE_Managed/src/Editor/Editor.hxx | 2 +- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 61 ++++++++++++++++++++-- SHADE_Managed/src/Editor/UndoRedoStack.hxx | 59 +++++++++++++++------ 5 files changed, 104 insertions(+), 35 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index bfd93401..d29f838d 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -149,7 +149,7 @@ namespace SHADE } SHEditorUI::PopID(); } - void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, Object^ object) + void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, System::Object^ object) { bool isHovered = false; @@ -343,12 +343,7 @@ namespace SHADE void Editor::registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData) { // Create command and add it into the undo stack - UndoRedoStack::Command cmd; - cmd.Field = field; - cmd.Object = object; - cmd.NewData = newData; - cmd.OldData = oldData; - actionStack.Add(cmd); + actionStack.Add(gcnew FieldChangeCommand(object, field, newData, oldData)); // Inform the C++ Undo-Redo stack SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index 2cda78e7..b68b5da8 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -30,7 +30,8 @@ namespace SHADE rangeAttrib = hasAttribute(fieldInfo); } - ManagedType val = safe_cast(fieldInfo->GetValue(object)); + ManagedType oldVal = safe_cast(fieldInfo->GetValue(object)); + ManagedType val = oldVal; if (renderFieldInInspector ( Convert::ToNative(fieldInfo->Name), @@ -41,7 +42,7 @@ namespace SHADE )) { fieldInfo->SetValue(object, val); - // TODO: Register undo + registerUndoAction(object, fieldInfo, fieldInfo->GetValue(object), oldVal); } return true; @@ -90,15 +91,12 @@ namespace SHADE { if constexpr (IsPrimitiveTypeMatches_V) { - //field->SetValue(object, val); managedVal = val; - //registerUndoAction(object, field, val, oldVal); } else { managedVal = Convert::ToCLI(val); - //registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } return true; diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index c7e86622..1f2c1be7 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -89,7 +89,7 @@ namespace SHADE /// /// The object that contains the data of the field to render. /// - static void renderFieldInInspector(System::Reflection::FieldInfo^ field, Object^ object); + static void renderFieldInInspector(System::Reflection::FieldInfo^ field, System::Object^ object); /// /// Renders a context menu when right clicked for the scripts /// diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index 08e289cc..ae0a1dee 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -19,6 +19,8 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "Editor/SHEditorUI.h" // Project Headers +#include "Utility/Debug.hxx" +#include "Utility/Convert.hxx" namespace SHADE { @@ -32,7 +34,7 @@ namespace SHADE return latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1; } - void UndoRedoStack::Add(Command command) + void UndoRedoStack::Add(ICommand^ command) { // Erase any other actions ahead of the current action if (latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1) @@ -52,8 +54,8 @@ namespace SHADE if (!UndoActionPresent) return; - Command cmd = commandStack[latestActionIndex]; - cmd.Field->SetValue(cmd.Object, cmd.OldData); + ICommand^ cmd = commandStack[latestActionIndex]; + cmd->Unexceute(); --latestActionIndex; } @@ -62,8 +64,57 @@ namespace SHADE if (!RedoActionPresent) return; - Command cmd = commandStack[latestActionIndex]; - cmd.Field->SetValue(cmd.Object, cmd.NewData); + ICommand^ cmd = commandStack[latestActionIndex]; + cmd->Execute(); ++latestActionIndex; } + + FieldChangeCommand::FieldChangeCommand(System::Object^ obj, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData) + : objectToChange { obj } + , field { field } + , newData { newData } + , oldData { oldData } + {} + + bool FieldChangeCommand::Execute() + { + if (field && objectToChange) + { + field->SetValue(objectToChange, newData); + return true; + } + + return false; + } + + bool FieldChangeCommand::Unexceute() + { + if (field && objectToChange) + { + field->SetValue(objectToChange, oldData); + return true; + } + + return false; + } + + bool FieldChangeCommand::Merge(ICommand^ command) + { + FieldChangeCommand^ otherCommand = safe_cast(command); + if (otherCommand == nullptr) + { + Debug::LogWarning("[Field Change Command] Attempted to merge two incompatible commands!"); + return false; + } + + // Only merge if they are workng on the same object and field + if (field == otherCommand->field && objectToChange == otherCommand->objectToChange) + { + newData = otherCommand->newData; + return true; + } + + return false; + } + } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index 4c525228..69f462e3 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -15,27 +15,52 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /// + /// Interface for command that fits into the UndoRedoStack which can perform + /// undo-able and redo-able operations. + /// + private interface class ICommand + { + /// + /// Executes an action. This is called when a "Redo" is performed. + /// + /// Whether the action was successful or not. + bool Execute(); + /// + /// Undoes an action. This is called when an "Undo" is performed. + /// + /// Whether the action was successful or not. + bool Unexceute(); + /// + /// Merges this command with another command. + /// + /// + /// Whether the merge was successful or not. + bool Merge(ICommand^ command); + }; + + private ref class FieldChangeCommand sealed : public ICommand + { + public: + FieldChangeCommand(System::Object^ obj, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + System::Object^ objectToChange; + System::Reflection::FieldInfo^ field; + System::Object^ newData; + System::Object^ oldData; + }; + /// /// Class that is able to store a stack of actions that can be done and redone. /// private ref class UndoRedoStack sealed { public: - /*-----------------------------------------------------------------------------*/ - /* Type Definitions */ - /*-----------------------------------------------------------------------------*/ - /// - /// Command for the stack that represents a data modification. - /// - value struct Command - { - public: - System::Object^ Object; - System::Reflection::FieldInfo^ Field; - System::Object^ NewData; - System::Object^ OldData; - }; - /*-----------------------------------------------------------------------------*/ /* Properties */ /*-----------------------------------------------------------------------------*/ @@ -55,7 +80,7 @@ namespace SHADE /// Adds a command onto the stack. /// /// - void Add(Command command); + void Add(ICommand^ command); /// /// Undos the last added command if it exists. /// @@ -70,6 +95,6 @@ namespace SHADE /* Data Members */ /*-----------------------------------------------------------------------------*/ int latestActionIndex = -1; - System::Collections::Generic::List^ commandStack = gcnew System::Collections::Generic::List(); + System::Collections::Generic::List^ commandStack = gcnew System::Collections::Generic::List(); }; } From 2fdff77420bade71a1e8bfa3bf03d9af68722ec7 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 10 Nov 2022 23:01:09 +0800 Subject: [PATCH 725/793] Asset browser is wonky now Refresh asset browser Compile asset --- .../AssetBrowser/SHAssetBrowser.cpp | 73 +++++++++++++++---- .../AssetBrowser/SHAssetBrowser.h | 4 +- 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 37b8ecd4..9159be7e 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -36,13 +36,27 @@ namespace SHADE DrawCurrentFolder(); } ImGui::End(); + if (queueReset) + { + SHAssetManager::RefreshDirectory(); + rootFolder = SHAssetManager::GetRootFolder(); + queueReset = false; + } + } + + void SHAssetBrowser::Refresh() + { + queueReset = true; } void SHAssetBrowser::DrawMenuBar() { if (ImGui::BeginMenuBar()) { - + if(ImGui::SmallButton("Refresh")) + { + Refresh(); + } ImGui::EndMenuBar(); } } @@ -102,16 +116,14 @@ namespace SHADE } for (auto const& file : files) { - if(file.assetMeta == nullptr) - continue; const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(file.assetMeta); + const ImRect childRect = DrawFile(file); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; } drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); - if(assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) + if (assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) DrawAssetBeingCreated(); ImGui::TreePop(); @@ -148,12 +160,40 @@ namespace SHADE //} } - ImRect SHAssetBrowser::DrawFile(SHAsset const* const asset) noexcept + ImRect SHAssetBrowser::DrawFile(SHFile file) noexcept { - if (asset == nullptr) - return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - const bool isSelected = std::ranges::find(selectedAssets, asset->id) != selectedAssets.end(); - ImGuiTreeNodeFlags flags = (!asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf; + + SHAsset const* const asset = file.assetMeta; + if (file.compilable) + { + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; + std::string icon{ ICON_MD_FILE_PRESENT }; + + bool const isOpen = ImGui::TreeNodeEx(file.name.data(), flags, "%s %s%s", icon.data(), file.name.data(), file.ext.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + + if (ImGui::BeginPopupContextItem()) + { + if (ImGui::Selectable("Compile")) + { + SHAssetManager::CompileAsset(file.path, true); + Refresh(); + } + ImGui::EndPopup(); + } + + ImGui::TreePop(); + + return nodeRect; + } + if (asset) + DrawAsset(asset); + } + + ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset) + { + const bool isSelected = asset ? std::ranges::find(selectedAssets, asset->id) != selectedAssets.end() : false; + ImGuiTreeNodeFlags flags = (asset && !asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf; if (isSelected) flags |= ImGuiTreeNodeFlags_Selected; std::string icon{}; @@ -172,9 +212,11 @@ namespace SHADE case AssetType::MAX_COUNT: break; default:; } - + bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s", icon.data(), asset->name.data()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + + if (SHDragDrop::BeginSource()) { auto id = asset->id; @@ -197,7 +239,7 @@ namespace SHADE case AssetType::TEXTURE: break; case AssetType::MESH: break; case AssetType::SCENE: - if(auto editor = SHSystemManager::GetSystem()) + if (auto editor = SHSystemManager::GetSystem()) { editor->LoadScene(asset->id); } @@ -222,12 +264,12 @@ namespace SHADE ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); vertLineStart.x += horizontalOffset; ImVec2 vertLineEnd = vertLineStart; - if(isOpen) + if (isOpen) { - for(auto const& subAsset : asset->subAssets) + for (auto const& subAsset : asset->subAssets) { const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(subAsset); + const ImRect childRect = DrawAsset(subAsset); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; @@ -253,6 +295,7 @@ namespace SHADE matInspector->OpenMaterial(assetId, true); } assetBeingCreated.reset(); + Refresh(); } } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 00023ebe..8258a6c7 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -21,7 +21,8 @@ namespace SHADE void DrawMenuBar(); ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); - ImRect DrawFile(SHAsset const* const asset) noexcept; + ImRect DrawFile(SHFile file) noexcept; + ImRect DrawAsset(SHAsset const* const asset); void DrawAssetBeingCreated() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; @@ -29,5 +30,6 @@ namespace SHADE std::vector selectedFolders; std::vector selectedAssets; static constexpr float tileWidth = 50.0f; + bool queueReset = false; }; } From aad83d9e32508f1900d050b4d7980842510cceca Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 10 Nov 2022 23:01:09 +0800 Subject: [PATCH 727/793] Revert "Asset browser is wonky now" This reverts commit 2fdff77420bade71a1e8bfa3bf03d9af68722ec7. --- .../AssetBrowser/SHAssetBrowser.cpp | 73 ++++--------------- .../AssetBrowser/SHAssetBrowser.h | 4 +- 2 files changed, 16 insertions(+), 61 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 9159be7e..37b8ecd4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -36,27 +36,13 @@ namespace SHADE DrawCurrentFolder(); } ImGui::End(); - if (queueReset) - { - SHAssetManager::RefreshDirectory(); - rootFolder = SHAssetManager::GetRootFolder(); - queueReset = false; - } - } - - void SHAssetBrowser::Refresh() - { - queueReset = true; } void SHAssetBrowser::DrawMenuBar() { if (ImGui::BeginMenuBar()) { - if(ImGui::SmallButton("Refresh")) - { - Refresh(); - } + ImGui::EndMenuBar(); } } @@ -116,14 +102,16 @@ namespace SHADE } for (auto const& file : files) { + if(file.assetMeta == nullptr) + continue; const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(file); + const ImRect childRect = DrawFile(file.assetMeta); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; } drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); - if (assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) + if(assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) DrawAssetBeingCreated(); ImGui::TreePop(); @@ -160,40 +148,12 @@ namespace SHADE //} } - ImRect SHAssetBrowser::DrawFile(SHFile file) noexcept + ImRect SHAssetBrowser::DrawFile(SHAsset const* const asset) noexcept { - - SHAsset const* const asset = file.assetMeta; - if (file.compilable) - { - ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; - std::string icon{ ICON_MD_FILE_PRESENT }; - - bool const isOpen = ImGui::TreeNodeEx(file.name.data(), flags, "%s %s%s", icon.data(), file.name.data(), file.ext.data()); - const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - - if (ImGui::BeginPopupContextItem()) - { - if (ImGui::Selectable("Compile")) - { - SHAssetManager::CompileAsset(file.path, true); - Refresh(); - } - ImGui::EndPopup(); - } - - ImGui::TreePop(); - - return nodeRect; - } - if (asset) - DrawAsset(asset); - } - - ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset) - { - const bool isSelected = asset ? std::ranges::find(selectedAssets, asset->id) != selectedAssets.end() : false; - ImGuiTreeNodeFlags flags = (asset && !asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf; + if (asset == nullptr) + return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + const bool isSelected = std::ranges::find(selectedAssets, asset->id) != selectedAssets.end(); + ImGuiTreeNodeFlags flags = (!asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf; if (isSelected) flags |= ImGuiTreeNodeFlags_Selected; std::string icon{}; @@ -212,11 +172,9 @@ namespace SHADE case AssetType::MAX_COUNT: break; default:; } - + bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s", icon.data(), asset->name.data()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - - if (SHDragDrop::BeginSource()) { auto id = asset->id; @@ -239,7 +197,7 @@ namespace SHADE case AssetType::TEXTURE: break; case AssetType::MESH: break; case AssetType::SCENE: - if (auto editor = SHSystemManager::GetSystem()) + if(auto editor = SHSystemManager::GetSystem()) { editor->LoadScene(asset->id); } @@ -264,12 +222,12 @@ namespace SHADE ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); vertLineStart.x += horizontalOffset; ImVec2 vertLineEnd = vertLineStart; - if (isOpen) + if(isOpen) { - for (auto const& subAsset : asset->subAssets) + for(auto const& subAsset : asset->subAssets) { const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawAsset(subAsset); + const ImRect childRect = DrawFile(subAsset); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; @@ -295,7 +253,6 @@ namespace SHADE matInspector->OpenMaterial(assetId, true); } assetBeingCreated.reset(); - Refresh(); } } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 8258a6c7..00023ebe 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -21,8 +21,7 @@ namespace SHADE void DrawMenuBar(); ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); - ImRect DrawFile(SHFile file) noexcept; - ImRect DrawAsset(SHAsset const* const asset); + ImRect DrawFile(SHAsset const* const asset) noexcept; void DrawAssetBeingCreated() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; @@ -30,6 +29,5 @@ namespace SHADE std::vector selectedFolders; std::vector selectedAssets; static constexpr float tileWidth = 50.0f; - bool queueReset = false; }; } From d93ea8e49bb36ae96c33e71497b1d3697487fe89 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 10 Nov 2022 23:34:53 +0800 Subject: [PATCH 728/793] Child caches are now updated when scene hierarchy changes --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 38 ++++++++++++++++++- SHADE_Engine/src/Scripting/SHScriptEngine.h | 3 ++ SHADE_Managed/src/Engine/GameObject.cxx | 3 +- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 276eeb24..f279bec1 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -318,6 +318,20 @@ namespace SHADE return eventData->handle; } + SHEventHandle SHScriptEngine::onSceneNodeChildrenAdded(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + csSceneNodeChildrenChanged(eventData->data->parent->GetEntityID()); + return eventData->handle; + } + + SHEventHandle SHScriptEngine::onSceneNodeChildrenRemoved(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + csSceneNodeChildrenChanged(eventData->data->parent->GetEntityID()); + return eventData->handle; + } + /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------------*/ @@ -442,6 +456,12 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".Collider", "OnCollisionShapeRemoved" ); + csSceneNodeChildrenChanged = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ChildListCache", + "OnChildrenChanged" + ); csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, @@ -464,6 +484,7 @@ namespace SHADE void SHScriptEngine::registerEvents() { + /* Entity */ // Register for entity destroyed event std::shared_ptr> destroyedEventReceiver { @@ -471,26 +492,39 @@ namespace SHADE }; SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, std::dynamic_pointer_cast(destroyedEventReceiver)); + /* Colliders */ // Register for collider added event std::shared_ptr> addedColliderEventReceiver { std::make_shared>(this, &SHScriptEngine::onColliderAdded) }; SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_ADDED_EVENT, std::dynamic_pointer_cast(addedColliderEventReceiver)); - // Register for collider removed event std::shared_ptr> removedColliderEventReceiver { std::make_shared>(this, &SHScriptEngine::onColliderRemoved) }; SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_REMOVED_EVENT, std::dynamic_pointer_cast(removedColliderEventReceiver)); - // Register for collider component removed event std::shared_ptr> removedColliderComponentEventReceiver { std::make_shared>(this, &SHScriptEngine::onColliderComponentRemoved) }; SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast(removedColliderComponentEventReceiver)); + + /* SceneGraph */ + // Register for SceneNode child added event + std::shared_ptr> addChildEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onSceneNodeChildrenAdded) + }; + SHEventManager::SubscribeTo(SH_SCENEGRAPH_ADD_CHILD_EVENT, std::dynamic_pointer_cast(addChildEventReceiver)); + // Register for SceneNode child removed event + std::shared_ptr> removeChildEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onSceneNodeChildrenRemoved) + }; + SHEventManager::SubscribeTo(SH_SCENEGRAPH_REMOVE_CHILD_EVENT, std::dynamic_pointer_cast(removeChildEventReceiver)); } void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 7d83606e..ef778627 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -267,6 +267,7 @@ namespace SHADE // - Events CsEventRelayFuncPtr csColliderOnListChanged = nullptr; CsEventRelayFuncPtr csColliderOnRemoved = nullptr; + CsEventRelayFuncPtr csSceneNodeChildrenChanged = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; CsFuncPtr csEditorUndo = nullptr; @@ -279,6 +280,8 @@ namespace SHADE SHEventHandle onColliderAdded(SHEventPtr eventPtr); SHEventHandle onColliderRemoved(SHEventPtr eventPtr); SHEventHandle onColliderComponentRemoved(SHEventPtr eventPtr); + SHEventHandle onSceneNodeChildrenAdded(SHEventPtr eventPtr); + SHEventHandle onSceneNodeChildrenRemoved(SHEventPtr eventPtr); /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 79960ff6..017366fe 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -244,8 +244,7 @@ namespace SHADE // Unparent all children to the root for (auto child : node->GetChildren()) { - child->SetParent(nullptr); - ChildListCache::UpdateChildList(child->GetEntityID()); + SHSceneManager::GetCurrentSceneGraph().SetParent(child->GetEntityID(), nullptr); } ChildListCache::UpdateChildList(entity); } From 80db641b6f0353ae14d3c01567551b86cc0c95f5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 00:49:20 +0800 Subject: [PATCH 729/793] Added ListElementChangeCommand --- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 49 ++++++++++++++++++++++ SHADE_Managed/src/Editor/UndoRedoStack.hxx | 19 ++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index ae0a1dee..3feb43ed 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -117,4 +117,53 @@ namespace SHADE return false; } + generic + ListElementChangeCommand::ListElementChangeCommand(System::Collections::Generic::List^ list, int index, T newData, T oldData) + : list { list } + , index { index } + , newData { newData } + , oldData { oldData } + {} + + generic + bool ListElementChangeCommand::Execute() + { + if (list && index < System::Linq::Enumerable::Count(list)) + { + list[index] = newData; + return true; + } + + return false; + } + + generic + bool ListElementChangeCommand::Unexceute() + { + if (list && index < System::Linq::Enumerable::Count(list)) + { + list[index] = oldData; + return true; + } + + return false; + } + + generic + bool ListElementChangeCommand::Merge(ICommand^ command) + { + ListElementChangeCommand^ otherCommand = safe_cast^>(command); + if (otherCommand == nullptr) + { + Debug::LogWarning("[Field Change Command] Attempted to merge two incompatible commands!"); + return false; + } + + if (command && list == otherCommand->list && index == otherCommand->index) + { + newData = otherCommand->newData; + return true; + } + } + } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index 69f462e3..dd78ecd9 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -38,7 +38,7 @@ namespace SHADE /// Whether the merge was successful or not. bool Merge(ICommand^ command); }; - + private ref class FieldChangeCommand sealed : public ICommand { public: @@ -55,6 +55,23 @@ namespace SHADE System::Object^ oldData; }; + generic + private ref class ListElementChangeCommand sealed : public ICommand + { + public: + ListElementChangeCommand(System::Collections::Generic::List^ list, int index, T newData, T oldData); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + System::Collections::Generic::List^ list; + int index; + T newData; + T oldData; + }; + /// /// Class that is able to store a stack of actions that can be done and redone. /// From e824c174056f008cf4fe56f9bc08a29e4fb23c85 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 11 Nov 2022 10:06:26 +0800 Subject: [PATCH 730/793] Fixed asset type conversion bug when loading from meta files Removed compile all function Set parent id to 0 for non sub assets --- SHADE_Engine/src/Assets/SHAssetMacros.h | 3 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 45 ------------------- SHADE_Engine/src/Assets/SHAssetManager.h | 2 - .../src/Assets/SHAssetMetaHandler.cpp | 1 + 4 files changed, 3 insertions(+), 48 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index e0551262..7ffdb5f1 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -51,8 +51,8 @@ enum class AssetType : AssetTypeMeta SCENE, PREFAB, MATERIAL, - SCRIPT, MESH, + SCRIPT, MAX_COUNT }; constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; @@ -97,6 +97,7 @@ constexpr std::string_view EXTENSIONS[] = { SCENE_EXTENSION, PREFAB_EXTENSION, MATERIAL_EXTENSION, + "dummy", SCRIPT_EXTENSION, AUDIO_WAV_EXTENSION, }; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index f4727417..5a1bd5db 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -405,51 +405,6 @@ namespace SHADE return result; } - void SHAssetManager::CompileAll() noexcept - { - std::vector paths; - - for (auto const& dir : std::filesystem::recursive_directory_iterator{ ASSET_ROOT }) - { - if (dir.is_regular_file()) - { - for (auto const& ext : EXTERNALS) - { - if (dir.path().extension().string() == ext.data()) - { - paths.push_back(dir.path()); - } - } - } - } - - for (auto const& path : paths) - { - AssetPath newPath; - auto const ext{ path.extension().string() }; - if (ext == GLSL_EXTENSION.data()) - { - newPath = SHShaderSourceCompiler::LoadAndCompileShader(path).value(); - } - else if (ext == DDS_EXTENSION.data()) - { - newPath = SHTextureCompiler::CompileTextureAsset(path).value(); - } - else if (ext == GLTF_EXTENSION.data() || ext == FBX_EXTENSION.data()) - { - std::string command = MODEL_COMPILER_EXE.data(); - command += " " + path.string(); - std::system(command.c_str()); - - std::string modelPath = path.string().substr(0, path.string().find_last_of('.')); - modelPath += MODEL_EXTENSION; - newPath = modelPath; - } - - GenerateNewMeta(newPath); - } - } - bool SHAssetManager::DeleteLocalFile(AssetPath path) noexcept { //TODO Move this to dedicated library diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index a891ec23..5af648e4 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -107,8 +107,6 @@ namespace SHADE static SHAsset CreateAssetFromPath(AssetPath path) noexcept; - static void CompileAll() noexcept; - static bool DeleteLocalFile(AssetPath path) noexcept; //TODO use this function to create asset data internall at all calls to generate id diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index 9ae8cde2..b75ee1ad 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -98,6 +98,7 @@ namespace SHADE meta.type = static_cast(type); meta.isSubAsset = false; + meta.parent = 0; // Burn Line if (std::getline(metaFile, line)) From 6df3f3d4174c7ae4f5e5e4b3c2f50eeb7c46ef5a Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 11 Nov 2022 10:47:03 +0800 Subject: [PATCH 731/793] Fixed get type from extension bug in asset handler --- SHADE_Engine/src/Assets/SHAssetMacros.h | 2 ++ SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 7ffdb5f1..7e5befab 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -102,6 +102,8 @@ constexpr std::string_view EXTENSIONS[] = { AUDIO_WAV_EXTENSION, }; +constexpr size_t EXTENSIONS_COUNT{ 11 }; + // EXTERNAL EXTENSIONS constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; constexpr std::string_view DDS_EXTENSION{ ".dds" }; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index b75ee1ad..f3b24ed1 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -38,7 +38,7 @@ namespace SHADE ****************************************************************************/ AssetType SHAssetMetaHandler::GetTypeFromExtension(AssetExtension ext) noexcept { - for (int i{0}; i < EXTENSIONS->size(); ++i) + for (auto i{0}; i < EXTENSIONS_COUNT; ++i) { if (strcmp(ext.c_str(), EXTENSIONS[i].data()) == 0) { From 9fe5dc385bf6f55b1e91f461cead7743877882b0 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 11 Nov 2022 10:52:57 +0800 Subject: [PATCH 732/793] Implemented check for raw asset if compiled --- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 63 +++++++++++++++++++- SHADE_Engine/src/Filesystem/SHFileSystem.h | 1 + SHADE_Engine/src/Filesystem/SHFolder.h | 3 +- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index c4bcc5dc..9144b0d8 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -38,6 +38,41 @@ namespace SHADE return false; } + bool SHFileSystem::MatchExtention(FileExt raw, FileExt compiled) noexcept + { + if (raw == GLSL_EXTENSION) + { + if (compiled == SHADER_EXTENSION || + compiled == SHADER_BUILT_IN_EXTENSION) + { + return true; + } + } + else if (raw == DDS_EXTENSION) + { + if (compiled == TEXTURE_EXTENSION) + { + return true; + } + } + else if (raw == FBX_EXTENSION) + { + if (compiled == MODEL_EXTENSION) + { + return true; + } + } + else if (raw == GLTF_EXTENSION) + { + if (compiled == MODEL_EXTENSION) + { + return true; + } + } + + return false; + } + void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept { std::stack folderStack; @@ -52,6 +87,7 @@ namespace SHADE std::vector assets; + // Get all subfolders/files in this current folder for (auto& dirEntry : std::filesystem::directory_iterator(folder->path)) { auto path = dirEntry.path(); @@ -60,8 +96,6 @@ namespace SHADE { if (path.extension().string() == META_EXTENSION) { - //auto asset = SHAssetMetaHandler::RetrieveMetaData(path); - //assetCollection.insert({ asset.id, asset }); assets.push_back(SHAssetMetaHandler::RetrieveMetaData(path)); } else @@ -77,6 +111,7 @@ namespace SHADE continue; } + // If item is folder auto newFolder{ folder->CreateSubFolderHere(path.stem().string()) }; folderStack.push(newFolder); } @@ -97,6 +132,30 @@ namespace SHADE } } } + + for (auto i {0}; i < folder->files.size(); ++i) + { + auto& file = folder->files[i]; + if (file.compilable) + { + for (auto j{ 0 }; j < folder->files.size(); ++j) + { + auto& check = folder->files[j]; + if (i == j || check.compilable) + { + continue; + } + + if (file.name == check.name) + { + if (MatchExtention(file.ext, check.ext)) + { + file.compiled = true; + } + } + } + } + } } } diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index 87d13f42..d30f2164 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -24,5 +24,6 @@ namespace SHADE private: static bool DeleteFolder(FolderPointer location) noexcept; static bool IsCompilable(std::string ext) noexcept; + static bool MatchExtention(FileExt raw, FileExt compiled) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Filesystem/SHFolder.h b/SHADE_Engine/src/Filesystem/SHFolder.h index 5c702b51..234e6f19 100644 --- a/SHADE_Engine/src/Filesystem/SHFolder.h +++ b/SHADE_Engine/src/Filesystem/SHFolder.h @@ -33,7 +33,8 @@ namespace SHADE FilePath path; FileExt ext; SHAsset const* assetMeta; - bool compilable; + bool compilable; + bool compiled; }; class SHFolder From 94b64e92dd51ac837aadaa266d696f93dc49a9a8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 11 Nov 2022 10:55:19 +0800 Subject: [PATCH 733/793] Initialise files to not compiled --- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 9144b0d8..9aaf72a4 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -105,7 +105,8 @@ namespace SHADE path.string(), path.extension().string(), nullptr, - IsCompilable(path.extension().string()) + IsCompilable(path.extension().string()), + false ); } continue; From 85cc97ca27e373a2910b1b660a9631393f5b1fa7 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 12:07:05 +0800 Subject: [PATCH 734/793] Added implementation for ListElementAddCommand and ListElementRemoveCommand --- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 115 ++++++++++++++++++++- SHADE_Managed/src/Editor/UndoRedoStack.hxx | 32 ++++++ 2 files changed, 142 insertions(+), 5 deletions(-) diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index 3feb43ed..10ef822c 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -24,6 +24,9 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* UndoRedoStack - Properties */ + /*---------------------------------------------------------------------------------*/ bool UndoRedoStack::UndoActionPresent::get() { return commandStack->Count > 0 && latestActionIndex >= 0; @@ -33,7 +36,10 @@ namespace SHADE { return latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1; } - + + /*---------------------------------------------------------------------------------*/ + /* UndoRedoStack - Usage Functions */ + /*---------------------------------------------------------------------------------*/ void UndoRedoStack::Add(ICommand^ command) { // Erase any other actions ahead of the current action @@ -68,14 +74,20 @@ namespace SHADE cmd->Execute(); ++latestActionIndex; } - + + /*---------------------------------------------------------------------------------*/ + /* FieldChangeCommand - Constructor */ + /*---------------------------------------------------------------------------------*/ FieldChangeCommand::FieldChangeCommand(System::Object^ obj, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData) : objectToChange { obj } , field { field } , newData { newData } , oldData { oldData } {} - + + /*---------------------------------------------------------------------------------*/ + /* FieldChangeCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ bool FieldChangeCommand::Execute() { if (field && objectToChange) @@ -116,15 +128,21 @@ namespace SHADE return false; } - + + /*---------------------------------------------------------------------------------*/ + /* ListElementChangeCommand - Constructor */ + /*---------------------------------------------------------------------------------*/ generic ListElementChangeCommand::ListElementChangeCommand(System::Collections::Generic::List^ list, int index, T newData, T oldData) : list { list } - , index { index } + , index{ index } , newData { newData } , oldData { oldData } {} + /*---------------------------------------------------------------------------------*/ + /* ListElementChangeCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ generic bool ListElementChangeCommand::Execute() { @@ -164,6 +182,93 @@ namespace SHADE newData = otherCommand->newData; return true; } + } + + /*---------------------------------------------------------------------------------*/ + /* ListElementAddCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + generic + ListElementAddCommand::ListElementAddCommand(System::Collections::Generic::List^ list, int addIndex, T data) + : list { list } + , addIndex { addIndex } + , data { data } + {} + + /*---------------------------------------------------------------------------------*/ + /* ListElementAddCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + generic + bool ListElementAddCommand::Execute() + { + if (list) + { + list->Insert(addIndex, data); + return true; + } + + return false; + } + + generic + bool ListElementAddCommand::Unexceute() + { + if (list && addIndex < System::Linq::Enumerable::Count(list)) + { + list->RemoveAt(addIndex); + return true; + } + + return false; + } + + generic + bool ListElementAddCommand::Merge(ICommand^) + { + // Not allowed + return false; } + /*---------------------------------------------------------------------------------*/ + /* ListElementRemoveCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + generic + ListElementRemoveCommand::ListElementRemoveCommand(System::Collections::Generic::List^ list, int removeIndex, T data) + : list { list } + , removeIndex { removeIndex } + , data { data } + {} + + /*---------------------------------------------------------------------------------*/ + /* ListElementRemoveCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + generic + bool ListElementRemoveCommand::Execute() + { + if (list && removeIndex < System::Linq::Enumerable::Count(list)) + { + list->RemoveAt(removeIndex); + return true; + } + + return false; + } + + generic + bool ListElementRemoveCommand::Unexceute() + { + if (list) + { + list->Insert(removeIndex, data); + return true; + } + + return false; + } + + generic + bool ListElementRemoveCommand::Merge(ICommand^) + { + // Not allowed + return false; + } } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index dd78ecd9..ed9a625a 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -71,6 +71,38 @@ namespace SHADE T newData; T oldData; }; + + generic + private ref class ListElementAddCommand sealed : public ICommand + { + public: + ListElementAddCommand(System::Collections::Generic::List^ list, int addIndex, T data); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + System::Collections::Generic::List^ list; + int addIndex; // New index of the added element + T data; + }; + + generic + private ref class ListElementRemoveCommand sealed : public ICommand + { + public: + ListElementRemoveCommand(System::Collections::Generic::List^ list, int removeIndex, T data); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + System::Collections::Generic::List^ list; + int removeIndex; // Index of the element to remove at + T data; + }; ///
    /// Class that is able to store a stack of actions that can be done and redone. From fdc8965b62a2abec77f3f1e4be95601a5d165e96 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 12:07:26 +0800 Subject: [PATCH 735/793] Made String and GameObject editor template specializations instead --- SHADE_Managed/src/Editor/Editor.cxx | 63 +++++++---------------------- SHADE_Managed/src/Editor/Editor.h++ | 39 ++++++++++++++++++ 2 files changed, 53 insertions(+), 49 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index d29f838d..c82cc0a1 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -18,12 +18,9 @@ of DigiPen Institute of Technology is prohibited. #include "Editor/Editor.hxx" // STL Includes #include -// External Dependencies -#include "Editor/SHEditorUI.h" // Project Headers #include "Components/Component.hxx" #include "Scripts/ScriptStore.hxx" -#include "Utility/Convert.hxx" #include "Utility/Debug.hxx" #include "Serialisation/ReflectionUtilities.hxx" #include "Editor/IconsMaterialDesign.h" @@ -154,18 +151,20 @@ namespace SHADE bool isHovered = false; const bool MODIFIED_PRIMITIVE = - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputCheckbox, &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputFloat , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputDouble , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputVec2 , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered); + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputCheckbox, &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputFloat , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputDouble , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputVec2 , &isHovered) || + renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered) || + renderFieldInInspector(field, object, nullptr , &isHovered) || + renderFieldInInspector(field, object, nullptr , &isHovered); if (!MODIFIED_PRIMITIVE) { @@ -187,40 +186,6 @@ namespace SHADE registerUndoAction(object, field, val, oldVal); } } - else if (field->FieldType == String::typeid) - { - // Prevent issues where String^ is null due to being empty - String^ stringVal = safe_cast(field->GetValue(object)); - if (stringVal == nullptr) - { - stringVal = ""; - } - - // Actual Field - std::string val = Convert::ToNative(stringVal); - std::string oldVal = val; - if (SHEditorUI::InputTextField(Convert::ToNative(field->Name), val, &isHovered)) - { - field->SetValue(object, Convert::ToCLI(val)); - registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); - } - } - else if (field->FieldType == GameObject::typeid) - { - GameObject gameObj = safe_cast(field->GetValue(object)); - uint32_t entityId = gameObj.GetEntity(); - if (SHEditorUI::InputGameObjectField(Convert::ToNative(field->Name), entityId, &isHovered, !gameObj)) - { - GameObject newVal = GameObject(entityId); - if (entityId != MAX_EID) - { - // Null GameObject set - newVal = GameObject(entityId); - } - field->SetValue(object, newVal); - registerUndoAction(object, field, newVal, gameObj); - } - } // Any List else if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) { diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index b68b5da8..46993f88 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -16,6 +16,10 @@ of DigiPen Institute of Technology is prohibited. // Primary Include #include "Editor.hxx" +// External Dependencies +#include "Editor/SHEditorUI.h" +// Project Includes +#include "Utility/Convert.hxx" namespace SHADE { @@ -102,6 +106,41 @@ namespace SHADE return true; } + return false; + } + template<> + bool Editor::renderFieldInInspector(const std::string& fieldName, System::String^% managedVal, EditorFieldFunc, bool* isHovered, RangeAttribute^) + { + // Prevent issues where String^ is null due to being empty + if (managedVal == nullptr) + managedVal = ""; + + // Actual Field + std::string val = Convert::ToNative(managedVal); + if (SHEditorUI::InputTextField(fieldName, val, isHovered)) + { + managedVal = Convert::ToCLI(val); + return true; + } + + return false; + } + template<> + bool Editor::renderFieldInInspector(const std::string& fieldName, GameObject% managedVal, EditorFieldFunc, bool* isHovered, RangeAttribute^) + { + uint32_t entityId = managedVal.GetEntity(); + if (SHEditorUI::InputGameObjectField(fieldName, entityId, isHovered, !managedVal)) + { + GameObject newVal = GameObject(entityId); + if (entityId != MAX_EID) + { + // Null GameObject set + newVal = GameObject(entityId); + } + managedVal = newVal; + return true; + } + return false; } } From 3b22f95e29a04129d025be57ec6b120862219e30 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 11 Nov 2022 13:21:22 +0800 Subject: [PATCH 736/793] Added font identifiers --- SHADE_Engine/src/Assets/SHAssetMacros.h | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 7e5befab..44dfd5c5 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -53,6 +53,7 @@ enum class AssetType : AssetTypeMeta MATERIAL, MESH, SCRIPT, + FONT, MAX_COUNT }; constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; @@ -86,7 +87,8 @@ constexpr std::string_view SCENE_EXTENSION {".shade"}; constexpr std::string_view PREFAB_EXTENSION {".shprefab"}; constexpr std::string_view MATERIAL_EXTENSION {".shmat"}; constexpr std::string_view TEXTURE_EXTENSION {".shtex"}; -constexpr std::string_view MODEL_EXTENSION {".shmodel"}; +constexpr std::string_view MODEL_EXTENSION{ ".shmodel" }; +constexpr std::string_view FONT_EXTENSION{ ".shfont" }; constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, @@ -99,6 +101,7 @@ constexpr std::string_view EXTENSIONS[] = { MATERIAL_EXTENSION, "dummy", SCRIPT_EXTENSION, + FONT_EXTENSION, AUDIO_WAV_EXTENSION, }; @@ -109,12 +112,14 @@ constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; constexpr std::string_view DDS_EXTENSION{ ".dds" }; constexpr std::string_view FBX_EXTENSION{ ".fbx" }; constexpr std::string_view GLTF_EXTENSION{ ".gltf" }; +constexpr std::string_view TTF_EXTENSION{ ".ttf" }; constexpr std::string_view EXTERNALS[] = { GLSL_EXTENSION, DDS_EXTENSION, FBX_EXTENSION, - GLTF_EXTENSION + GLTF_EXTENSION, + TTF_EXTENSION }; // SHADER IDENTIFIERS @@ -129,11 +134,4 @@ constexpr std::pair SHADER_IDENTIFIERS[ }; constexpr size_t SHADER_TYPE_MAX_COUNT{ 3 }; - -// Error flags -constexpr std::string_view FILE_NOT_FOUND_ERR {"FILE NOT FOUND"}; -constexpr std::string_view META_NOT_FOUND_ERR {"META NOT FOUND"}; -constexpr std::string_view ASSET_NOT_FOUND_ERR {"ASSET NOT FOUND"}; -constexpr std::string_view EXT_DOES_NOT_EXIST {"TYPE DOES NOT HAVE EXTENSION DEFINED"}; - #endif // !SH_ASSET_MACROS_H From 5d2aae35615dfd9d296e722c263da119599c3f84 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 13:41:25 +0800 Subject: [PATCH 737/793] Made enum editor template specializations instead --- SHADE_Managed/src/Editor/Editor.cxx | 46 ++++++++++++--------- SHADE_Managed/src/Editor/Editor.h++ | 64 ++++++++++++++++++++--------- SHADE_Managed/src/Editor/Editor.hxx | 47 ++++++++++----------- 3 files changed, 94 insertions(+), 63 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index c82cc0a1..e02a6acd 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -30,6 +30,7 @@ of DigiPen Institute of Technology is prohibited. #include "RangeAttribute.hxx" #include "Math/Vector2.hxx" #include "Math/Vector3.hxx" +#include // Using Directives using namespace System; @@ -146,6 +147,7 @@ namespace SHADE } SHEditorUI::PopID(); } + void Editor::renderFieldInInspector(Reflection::FieldInfo^ field, System::Object^ object) { bool isHovered = false; @@ -164,30 +166,13 @@ namespace SHADE renderFieldInInspector(field, object, SHEditorUI::InputVec2 , &isHovered) || renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered) || renderFieldInInspector(field, object, nullptr , &isHovered) || - renderFieldInInspector(field, object, nullptr , &isHovered); + renderFieldInInspector(field, object, nullptr , &isHovered) || + renderFieldInInspector (field, object, nullptr , &isHovered); if (!MODIFIED_PRIMITIVE) { - if (field->FieldType->IsSubclassOf(Enum::typeid)) - { - // Get all the names of the enums - const array^ ENUM_NAMES = field->FieldType->GetEnumNames(); - std::vector nativeEnumNames; - for each (String ^ str in ENUM_NAMES) - { - nativeEnumNames.emplace_back(Convert::ToNative(str)); - } - - int val = safe_cast(field->GetValue(object)); - int oldVal = val; - if (SHEditorUI::InputEnumCombo(Convert::ToNative(field->Name), val, nativeEnumNames, &isHovered)) - { - field->SetValue(object, val); - registerUndoAction(object, field, val, oldVal); - } - } // Any List - else if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) + if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) { System::Type^ listType = field->FieldType->GenericTypeArguments[0]; System::Collections::IEnumerable^ listEnummerable = safe_cast(field->GetValue(object)); @@ -291,6 +276,27 @@ namespace SHADE } } + bool Editor::renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered) + { + // Get all the names of the enums + const array^ ENUM_NAMES = object->GetType()->GetEnumNames(); + std::vector nativeEnumNames; + for each (String ^ str in ENUM_NAMES) + { + nativeEnumNames.emplace_back(Convert::ToNative(str)); + } + + int val = safe_cast(object); + int oldVal = val; + if (SHEditorUI::InputEnumCombo(fieldName, val, nativeEnumNames, isHovered)) + { + object = val; + return true; + } + + return false; + } + void Editor::renderScriptContextMenu(Entity entity, Script^ script) { // Right Click Menu diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index 46993f88..501a75ae 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -26,30 +26,54 @@ namespace SHADE template bool Editor::renderFieldInInspector(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered) { - if (fieldInfo->FieldType == ManagedType::typeid) + if constexpr (std::is_same_v) { - RangeAttribute^ rangeAttrib; - if constexpr (std::is_arithmetic_v && !std::is_same_v) + if (fieldInfo->FieldType->IsSubclassOf(Enum::typeid)) { - rangeAttrib = hasAttribute(fieldInfo); - } + System::Object^ enumObj = fieldInfo->GetValue(object); + int oldVal = safe_cast(enumObj); + int val = oldVal; + if (renderEnumFieldInInspector + ( + Convert::ToNative(fieldInfo->Name), + enumObj, + isHovered + )) + { + fieldInfo->SetValue(object, safe_cast(enumObj)); + registerUndoAction(object, fieldInfo, fieldInfo->GetValue(object), oldVal); + } - ManagedType oldVal = safe_cast(fieldInfo->GetValue(object)); - ManagedType val = oldVal; - if (renderFieldInInspector - ( - Convert::ToNative(fieldInfo->Name), - val, - fieldEditor, - isHovered, - rangeAttrib - )) - { - fieldInfo->SetValue(object, val); - registerUndoAction(object, fieldInfo, fieldInfo->GetValue(object), oldVal); + return true; + } + } + else + { + if (fieldInfo->FieldType == ManagedType::typeid) + { + RangeAttribute^ rangeAttrib; + if constexpr (std::is_arithmetic_v && !std::is_same_v) + { + rangeAttrib = hasAttribute(fieldInfo); + } + + ManagedType oldVal = safe_cast(fieldInfo->GetValue(object)); + ManagedType val = oldVal; + if (renderFieldInInspector + ( + Convert::ToNative(fieldInfo->Name), + val, + fieldEditor, + isHovered, + rangeAttrib + )) + { + fieldInfo->SetValue(object, val); + registerUndoAction(object, fieldInfo, fieldInfo->GetValue(object), oldVal); + } + + return true; } - - return true; } return false; diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 1f2c1be7..c9c915f8 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -90,29 +90,7 @@ namespace SHADE /// The object that contains the data of the field to render. /// static void renderFieldInInspector(System::Reflection::FieldInfo^ field, System::Object^ object); - /// - /// Renders a context menu when right clicked for the scripts - /// - /// The Entity to render the Scripts of. - /// The Script to render the inspector for. - static void renderScriptContextMenu(Entity entity, Script^ script); - /// - /// Adds changes to a variable as an undo-able/redo-able action on the Undo-Redo - /// stack. - /// - /// The object that changes are applied to. - /// The field that was changed. - /// New data to set. - /// Data that was overriden. - static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); - /// - /// Checks if a specific field has the specified attribute - /// - /// Type of Attribute to check for. - /// The field to check. - /// The attribute to check for if it exists. Null otherwise. - generic where Attribute : System::Attribute - static Attribute hasAttribute(System::Reflection::FieldInfo^ field); + static bool renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered); /// /// Checks if the specified field is of the specified native and managed type /// equivalent and renders a ImGui field editor based on the specified field @@ -149,6 +127,29 @@ namespace SHADE /// True if the field is modified. template static bool renderFieldInInspector(const std::string& fieldName, ManagedType% managedVal, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + /// + /// Renders a context menu when right clicked for the scripts + /// + /// The Entity to render the Scripts of. + /// The Script to render the inspector for. + static void renderScriptContextMenu(Entity entity, Script^ script); + /// + /// Adds changes to a variable as an undo-able/redo-able action on the Undo-Redo + /// stack. + /// + /// The object that changes are applied to. + /// The field that was changed. + /// New data to set. + /// Data that was overriden. + static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); + /// + /// Checks if a specific field has the specified attribute + /// + /// Type of Attribute to check for. + /// The field to check. + /// The attribute to check for if it exists. Null otherwise. + generic where Attribute : System::Attribute + static Attribute hasAttribute(System::Reflection::FieldInfo^ field); }; } #include "Editor.h++" From c9db3b283d4b47a18a0857e64681efe025b37687 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 11 Nov 2022 14:00:51 +0800 Subject: [PATCH 738/793] asset browser --- .../AssetBrowser/SHAssetBrowser.cpp | 42 +++++++++++++++---- .../AssetBrowser/SHAssetBrowser.h | 3 +- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 37b8ecd4..0f17d2db 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -47,10 +47,12 @@ namespace SHADE } } + //if !compiled, set genMeta to true + ImRect SHAssetBrowser::RecursivelyDrawTree(FolderPointer folder) { auto const& subFolders = folder->subFolders; - auto const& files = folder->files; + auto files = folder->files; const bool isSelected = std::ranges::find(selectedFolders, folder) != selectedFolders.end(); ImGuiTreeNodeFlags flags = (subFolders.empty() && files.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow; if (isSelected) @@ -100,12 +102,10 @@ namespace SHADE drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; } - for (auto const& file : files) + for (auto& file : files) { - if(file.assetMeta == nullptr) - continue; const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(file.assetMeta); + const ImRect childRect = DrawFile(file); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; @@ -148,7 +148,32 @@ namespace SHADE //} } - ImRect SHAssetBrowser::DrawFile(SHAsset const* const asset) noexcept + ImRect SHAssetBrowser::DrawFile(SHFile& file) noexcept + { + if(file.compilable) + { + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; + static constexpr std::string_view icon = ICON_MD_FILE_PRESENT; + ImGui::PushID(file.name.data()); + bool const isOpen = ImGui::TreeNodeEx(file.name.data(), flags, "%s %s%s", icon.data(), file.name.data(), file.ext.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + if(ImGui::BeginPopupContextItem()) + { + if(ImGui::Selectable("Compile")) + { + SHAssetManager::CompileAsset(file.path, !file.compiled); + } + ImGui::EndPopup(); + } + ImGui::TreePop(); + ImGui::PopID(); + return nodeRect; + } + if(file.assetMeta) + DrawAsset(file.assetMeta, file.ext); + } + + ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset, FileExt const& ext /*= ""*/) noexcept { if (asset == nullptr) return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); @@ -173,7 +198,7 @@ namespace SHADE default:; } - bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s", icon.data(), asset->name.data()); + bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s%s", icon.data(), asset->name.data(), ext.data()); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); if (SHDragDrop::BeginSource()) { @@ -212,7 +237,6 @@ namespace SHADE case AssetType::MAX_COUNT: break; default:; } - } //TODO: Combine Draw asset and Draw Folder recursive drawing @@ -227,7 +251,7 @@ namespace SHADE for(auto const& subAsset : asset->subAssets) { const float horizontalLineSize = 25.0f; - const ImRect childRect = DrawFile(subAsset); + const ImRect childRect = DrawAsset(subAsset); const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); vertLineEnd.y = midPoint; diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 00023ebe..6b6316c8 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -21,7 +21,8 @@ namespace SHADE void DrawMenuBar(); ImRect RecursivelyDrawTree(FolderPointer folder); void DrawCurrentFolder(); - ImRect DrawFile(SHAsset const* const asset) noexcept; + ImRect DrawFile(SHFile& file) noexcept; + ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept; void DrawAssetBeingCreated() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; From d98d00b916908b95fc8ff938b4d9feb02c93f1ba Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 15:20:14 +0800 Subject: [PATCH 739/793] Wonky solution for array editor that doesn't work for elements outside of the first --- SHADE_Managed/src/Editor/Editor.cxx | 39 ++++++++++++++---- SHADE_Managed/src/Editor/Editor.h++ | 64 ++++++++++++++++++++++------- SHADE_Managed/src/Editor/Editor.hxx | 5 ++- 3 files changed, 84 insertions(+), 24 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index e02a6acd..ef5557c6 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -167,7 +167,7 @@ namespace SHADE renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered) || renderFieldInInspector(field, object, nullptr , &isHovered) || renderFieldInInspector(field, object, nullptr , &isHovered) || - renderFieldInInspector (field, object, nullptr , &isHovered); + renderFieldInInspector(field, object, nullptr , &isHovered); if (!MODIFIED_PRIMITIVE) { @@ -175,22 +175,23 @@ namespace SHADE if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) { System::Type^ listType = field->FieldType->GenericTypeArguments[0]; - System::Collections::IEnumerable^ listEnummerable = safe_cast(field->GetValue(object)); - + RangeAttribute^ rangeAttrib = hasAttribute(field); + System::Collections::IList^ iList = safe_cast(field->GetValue(object)); SHEditorUI::Text(Convert::ToNative(field->Name)); SHEditorUI::SameLine(); SHEditorUI::Button("+"); SHEditorUI::Indent(); - int i = 0; - for each (System::Object ^ obj in listEnummerable) + for (int i = 0; i < iList->Count; ++i) { - int val = safe_cast(obj); - SHEditorUI::InputInt(std::to_string(i), val, &isHovered); + System::Object^ obj = iList[i]; + if (renderFieldInInspector(std::to_string(i), obj, rangeAttrib)) + { + iList[i] = obj; + } SHEditorUI::SameLine(); SHEditorUI::Button("-"); - ++i; } SHEditorUI::Unindent(); } @@ -276,6 +277,28 @@ namespace SHADE } } + bool Editor::renderFieldInInspector(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib) + { + const bool MODIFIED_PRIMITIVE = + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputCheckbox, nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputFloat , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputDouble , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputVec2 , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, SHEditorUI::InputVec3 , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib) || + renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib); + + return MODIFIED_PRIMITIVE; + } + bool Editor::renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered) { // Get all the names of the enums diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index 501a75ae..ead03f49 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -62,7 +62,7 @@ namespace SHADE if (renderFieldInInspector ( Convert::ToNative(fieldInfo->Name), - val, + &val, fieldEditor, isHovered, rangeAttrib @@ -78,19 +78,53 @@ namespace SHADE return false; } + + template + bool Editor::renderFieldInInspector(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + { + if constexpr (std::is_same_v) + { + if (object->GetType()->IsSubclassOf(Enum::typeid)) + { + int managedVal = safe_cast(object); + if (renderFieldInInspector(fieldName, &managedVal, fieldEditor, isHovered, rangeAttrib)) + { + object = managedVal; + } + return true; + } + } + else + { + if (object->GetType() == ManagedType::typeid) + { + ManagedType managedVal = safe_cast(object); + cli::interior_ptr managedValPtr = &managedVal; + if (renderFieldInInspector(fieldName, managedValPtr, fieldEditor, isHovered, rangeAttrib)) + { + object = managedVal; + return true; + } + return false; + } + } + + return false; + } + template - bool Editor::renderFieldInInspector(const std::string& fieldName, ManagedType% managedVal, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) { // Retrieve the native version of the object NativeType val; if constexpr (IsPrimitiveTypeMatches_V) { - val = safe_cast(managedVal); + val = safe_cast(*managedValPtr); } else { - val = Convert::ToNative(managedVal); + val = Convert::ToNative(*managedValPtr); } // Throw into the SHEditorUI function @@ -119,12 +153,12 @@ namespace SHADE { if constexpr (IsPrimitiveTypeMatches_V) { - managedVal = val; + *managedValPtr = val; } else { - managedVal = Convert::ToCLI(val); + *managedValPtr = Convert::ToCLI(val); } return true; @@ -133,27 +167,27 @@ namespace SHADE return false; } template<> - bool Editor::renderFieldInInspector(const std::string& fieldName, System::String^% managedVal, EditorFieldFunc, bool* isHovered, RangeAttribute^) + bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) { // Prevent issues where String^ is null due to being empty - if (managedVal == nullptr) - managedVal = ""; + if (*managedValPtr == nullptr) + *managedValPtr = ""; // Actual Field - std::string val = Convert::ToNative(managedVal); + std::string val = Convert::ToNative(*managedValPtr); if (SHEditorUI::InputTextField(fieldName, val, isHovered)) { - managedVal = Convert::ToCLI(val); + *managedValPtr = Convert::ToCLI(val); return true; } return false; } template<> - bool Editor::renderFieldInInspector(const std::string& fieldName, GameObject% managedVal, EditorFieldFunc, bool* isHovered, RangeAttribute^) + bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) { - uint32_t entityId = managedVal.GetEntity(); - if (SHEditorUI::InputGameObjectField(fieldName, entityId, isHovered, !managedVal)) + uint32_t entityId = managedValPtr->GetEntity(); + if (SHEditorUI::InputGameObjectField(fieldName, entityId, isHovered, !(*managedValPtr))) { GameObject newVal = GameObject(entityId); if (entityId != MAX_EID) @@ -161,7 +195,7 @@ namespace SHADE // Null GameObject set newVal = GameObject(entityId); } - managedVal = newVal; + *managedValPtr = newVal; return true; } diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index c9c915f8..f9bf751f 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -90,6 +90,7 @@ namespace SHADE /// The object that contains the data of the field to render. /// static void renderFieldInInspector(System::Reflection::FieldInfo^ field, System::Object^ object); + static bool renderFieldInInspector(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib); static bool renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered); /// /// Checks if the specified field is of the specified native and managed type @@ -126,7 +127,9 @@ namespace SHADE /// /// True if the field is modified. template - static bool renderFieldInInspector(const std::string& fieldName, ManagedType% managedVal, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + static bool renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + template + static bool renderFieldInInspector(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); /// /// Renders a context menu when right clicked for the scripts /// From 153f040c407909acb18010dc81de37b7990a4836 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 11 Nov 2022 20:41:05 +0800 Subject: [PATCH 740/793] Refresh --- .../AssetBrowser/SHAssetBrowser.cpp | 26 ++++++++++++++++--- .../AssetBrowser/SHAssetBrowser.h | 5 +++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 0f17d2db..dca8a34b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -36,13 +36,30 @@ namespace SHADE DrawCurrentFolder(); } ImGui::End(); + if(refreshQueued) + Refresh(); + } + + void SHAssetBrowser::QueueRefresh() noexcept + { + refreshQueued = true; + } + + void SHAssetBrowser::Refresh() noexcept + { + SHAssetManager::RefreshDirectory(); + rootFolder = SHAssetManager::GetRootFolder(); + refreshQueued = false; } void SHAssetBrowser::DrawMenuBar() { if (ImGui::BeginMenuBar()) { - + if(ImGui::SmallButton(ICON_MD_SYNC)) + { + QueueRefresh(); + } ImGui::EndMenuBar(); } } @@ -71,7 +88,7 @@ namespace SHADE //TODO: Change to rttr type enum align if (ImGui::Selectable("Material")) { - assetBeingCreated = { folder, AssetType::MATERIAL, "New Material" }; + assetBeingCreated = { folder, AssetType::MATERIAL, "NewMaterial" }; ImGui::TreeNodeSetOpen(folderID, true); isOpen = true; } @@ -162,6 +179,7 @@ namespace SHADE if(ImGui::Selectable("Compile")) { SHAssetManager::CompileAsset(file.path, !file.compiled); + QueueRefresh(); } ImGui::EndPopup(); } @@ -269,7 +287,7 @@ namespace SHADE auto& path = std::get<0>(assetBeingCreated.value()); auto& type = std::get<1>(assetBeingCreated.value()); auto& assetName = std::get<2>(assetBeingCreated.value()); - if (ImGui::InputText("##newAssetName", &assetName, ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui::InputText("##newAssetName", &assetName, ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_CharsNoBlank)) { AssetID assetId = SHAssetManager::CreateNewAsset(type, assetName); if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) @@ -277,6 +295,8 @@ namespace SHADE matInspector->OpenMaterial(assetId, true); } assetBeingCreated.reset(); + QueueRefresh(); } + ImGui::ActivateItem(ImGui::GetItemID()); } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 6b6316c8..d6c2c191 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -16,7 +16,7 @@ namespace SHADE void Init(); void Update(); - void Refresh(); + void QueueRefresh() noexcept; private: void DrawMenuBar(); ImRect RecursivelyDrawTree(FolderPointer folder); @@ -25,10 +25,13 @@ namespace SHADE ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept; void DrawAssetBeingCreated() noexcept; + void Refresh() noexcept; + FolderPointer rootFolder, prevFolder, currentFolder; std::optional assetBeingCreated; std::vector selectedFolders; std::vector selectedAssets; static constexpr float tileWidth = 50.0f; + bool refreshQueued = false; }; } From 7c7589ce8e01a4120fcd66b15ffc18ec6a977311 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Fri, 11 Nov 2022 21:12:08 +0800 Subject: [PATCH 741/793] idk why creation of new material is not working here send help. Change to popup for asset creation --- .../AssetBrowser/SHAssetBrowser.cpp | 84 ++++++++++++------- .../AssetBrowser/SHAssetBrowser.h | 5 +- 2 files changed, 57 insertions(+), 32 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index dca8a34b..37521581 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -17,7 +17,7 @@ namespace SHADE { SHAssetBrowser::SHAssetBrowser() - :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder), assetBeingCreated(std::nullopt) + :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder) { } @@ -34,6 +34,8 @@ namespace SHADE RecursivelyDrawTree(rootFolder); DrawMenuBar(); DrawCurrentFolder(); + DrawAssetBeingCreated(); + } ImGui::End(); if(refreshQueued) @@ -60,6 +62,10 @@ namespace SHADE { QueueRefresh(); } + if(ImGui::SmallButton(ICON_FA_CIRCLE_PLUS)) + { + isAssetBeingCreated = true; + } ImGui::EndMenuBar(); } } @@ -81,21 +87,10 @@ namespace SHADE ImGuiID folderID = ImGui::GetItemID(); const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); - if (ImGui::BeginPopupContextItem()) - { - if (ImGui::BeginMenu("Create Asset")) - { - //TODO: Change to rttr type enum align - if (ImGui::Selectable("Material")) - { - assetBeingCreated = { folder, AssetType::MATERIAL, "NewMaterial" }; - ImGui::TreeNodeSetOpen(folderID, true); - isOpen = true; - } - ImGui::EndMenu(); - } - ImGui::EndPopup(); - } + //if (ImGui::BeginPopupContextItem()) + //{ + // ImGui::EndPopup(); + //} if (ImGui::IsItemClicked()) { @@ -128,8 +123,6 @@ namespace SHADE vertLineEnd.y = midPoint; } drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); - if(assetBeingCreated.has_value() && std::get<0>(assetBeingCreated.value()) == folder) - DrawAssetBeingCreated(); ImGui::TreePop(); } @@ -282,21 +275,52 @@ namespace SHADE void SHAssetBrowser::DrawAssetBeingCreated() noexcept { - if (!assetBeingCreated.has_value()) - return; - auto& path = std::get<0>(assetBeingCreated.value()); - auto& type = std::get<1>(assetBeingCreated.value()); - auto& assetName = std::get<2>(assetBeingCreated.value()); - if (ImGui::InputText("##newAssetName", &assetName, ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_CharsNoBlank)) + if(isAssetBeingCreated) + ImGui::OpenPopup(newAssetPopup.data()); + + if(ImGui::BeginPopupModal(newAssetPopup.data(), &isAssetBeingCreated)) { - AssetID assetId = SHAssetManager::CreateNewAsset(type, assetName); - if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) + ImGui::RadioButton("Material", true); + ImGui::SameLine(); + if (ImGui::InputText("##newAssetName", &nameOfAssetBeingCreated, ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_AutoSelectAll)) { - matInspector->OpenMaterial(assetId, true); + AssetID assetId = SHAssetManager::CreateNewAsset(AssetType::MATERIAL, nameOfAssetBeingCreated); + if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) + { + matInspector->OpenMaterial(assetId, true); + } + nameOfAssetBeingCreated.clear(); + QueueRefresh(); + isAssetBeingCreated = false; + ImGui::CloseCurrentPopup(); } - assetBeingCreated.reset(); - QueueRefresh(); + ImGui::EndPopup(); } - ImGui::ActivateItem(ImGui::GetItemID()); + //if (ImGui::BeginMenu("Create Asset")) + //{ + // //TODO: Change to rttr type enum align + // if (ImGui::Selectable("Material")) + // { + // assetBeingCreated = { folder, AssetType::MATERIAL, "NewMaterial" }; + // ImGui::TreeNodeSetOpen(folderID, true); + // isOpen = true; + // } + // ImGui::EndMenu(); + //} + //if (!assetBeingCreated.has_value()) + // return; + //auto& path = std::get<0>(assetBeingCreated.value()); + //auto& type = std::get<1>(assetBeingCreated.value()); + //auto& assetName = std::get<2>(assetBeingCreated.value()); + //if (ImGui::InputText("##newAssetName", &assetName, ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_AutoSelectAll)) + //{ + // AssetID assetId = SHAssetManager::CreateNewAsset(type, assetName); + // if (auto matInspector = SHEditorWindowManager::GetEditorWindow()) + // { + // matInspector->OpenMaterial(assetId, true); + // } + // assetBeingCreated.reset(); + // QueueRefresh(); + //} } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index d6c2c191..6d3c5eb4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -10,7 +10,6 @@ namespace SHADE class SHAssetBrowser final : public SHEditorWindow { public: - using AssetEntry = std::tuple; SHAssetBrowser(); void Init(); @@ -28,10 +27,12 @@ namespace SHADE void Refresh() noexcept; FolderPointer rootFolder, prevFolder, currentFolder; - std::optional assetBeingCreated; std::vector selectedFolders; std::vector selectedAssets; static constexpr float tileWidth = 50.0f; bool refreshQueued = false; + bool isAssetBeingCreated = false; + static constexpr std::string_view newAssetPopup = "Create New Asset"; + std::string nameOfAssetBeingCreated; }; } From dfc03839dbfa0910479aa77402c9c83f03b0d9d0 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 22:18:32 +0800 Subject: [PATCH 742/793] Renamed functions for clarity --- SHADE_Managed/src/Editor/Editor.cxx | 68 ++++++++++++++--------------- SHADE_Managed/src/Editor/Editor.h++ | 18 ++++---- SHADE_Managed/src/Editor/Editor.hxx | 29 +++++++++--- 3 files changed, 67 insertions(+), 48 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index ef5557c6..d26bd252 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -153,28 +153,28 @@ namespace SHADE bool isHovered = false; const bool MODIFIED_PRIMITIVE = - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputInt , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputCheckbox, &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputFloat , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputDouble , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputVec2 , &isHovered) || - renderFieldInInspector(field, object, SHEditorUI::InputVec3 , &isHovered) || - renderFieldInInspector(field, object, nullptr , &isHovered) || - renderFieldInInspector(field, object, nullptr , &isHovered) || - renderFieldInInspector(field, object, nullptr , &isHovered); + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputInt , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputCheckbox, &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputFloat , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputDouble , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputVec2 , &isHovered) || + renderSpecificField(field, object, SHEditorUI::InputVec3 , &isHovered) || + renderSpecificField(field, object, nullptr , &isHovered) || + renderSpecificField(field, object, nullptr , &isHovered) || + renderSpecificField(field, object, nullptr , &isHovered); if (!MODIFIED_PRIMITIVE) { // Any List if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) { - System::Type^ listType = field->FieldType->GenericTypeArguments[0]; + /* System::Type^ listType = field->FieldType->GenericTypeArguments[0]; RangeAttribute^ rangeAttrib = hasAttribute(field); System::Collections::IList^ iList = safe_cast(field->GetValue(object)); @@ -193,7 +193,7 @@ namespace SHADE SHEditorUI::SameLine(); SHEditorUI::Button("-"); } - SHEditorUI::Unindent(); + SHEditorUI::Unindent();*/ } else { @@ -277,29 +277,29 @@ namespace SHADE } } - bool Editor::renderFieldInInspector(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib) + bool Editor::renderFieldEditor(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib) { const bool MODIFIED_PRIMITIVE = - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputCheckbox, nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputFloat , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputDouble , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputVec2 , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, SHEditorUI::InputVec3 , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib) || - renderFieldInInspector(fieldName, object, nullptr , nullptr, rangeAttrib); + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputCheckbox, nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputFloat , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputDouble , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputVec2 , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, SHEditorUI::InputVec3 , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib); return MODIFIED_PRIMITIVE; } - bool Editor::renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered) + bool Editor::renderEnumEditor(const std::string& fieldName, System::Object^% object, bool* isHovered) { // Get all the names of the enums const array^ ENUM_NAMES = object->GetType()->GetEnumNames(); diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index ead03f49..8fbc6348 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -24,7 +24,7 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { template - bool Editor::renderFieldInInspector(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered) + bool Editor::renderSpecificField(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered) { if constexpr (std::is_same_v) { @@ -33,7 +33,7 @@ namespace SHADE System::Object^ enumObj = fieldInfo->GetValue(object); int oldVal = safe_cast(enumObj); int val = oldVal; - if (renderEnumFieldInInspector + if (renderEnumEditor ( Convert::ToNative(fieldInfo->Name), enumObj, @@ -59,7 +59,7 @@ namespace SHADE ManagedType oldVal = safe_cast(fieldInfo->GetValue(object)); ManagedType val = oldVal; - if (renderFieldInInspector + if (renderFieldEditorInternal ( Convert::ToNative(fieldInfo->Name), &val, @@ -80,14 +80,14 @@ namespace SHADE } template - bool Editor::renderFieldInInspector(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + bool Editor::renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) { if constexpr (std::is_same_v) { if (object->GetType()->IsSubclassOf(Enum::typeid)) { int managedVal = safe_cast(object); - if (renderFieldInInspector(fieldName, &managedVal, fieldEditor, isHovered, rangeAttrib)) + if (renderFieldEditorInternal(fieldName, &managedVal, fieldEditor, isHovered, rangeAttrib)) { object = managedVal; } @@ -100,7 +100,7 @@ namespace SHADE { ManagedType managedVal = safe_cast(object); cli::interior_ptr managedValPtr = &managedVal; - if (renderFieldInInspector(fieldName, managedValPtr, fieldEditor, isHovered, rangeAttrib)) + if (renderFieldEditorInternal(fieldName, managedValPtr, fieldEditor, isHovered, rangeAttrib)) { object = managedVal; return true; @@ -114,7 +114,7 @@ namespace SHADE template - bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + bool Editor::renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) { // Retrieve the native version of the object NativeType val; @@ -167,7 +167,7 @@ namespace SHADE return false; } template<> - bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) + bool Editor::renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) { // Prevent issues where String^ is null due to being empty if (*managedValPtr == nullptr) @@ -184,7 +184,7 @@ namespace SHADE return false; } template<> - bool Editor::renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) + bool Editor::renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc, bool* isHovered, RangeAttribute^) { uint32_t entityId = managedValPtr->GetEntity(); if (SHEditorUI::InputGameObjectField(fieldName, entityId, isHovered, !(*managedValPtr))) diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index f9bf751f..54ab128d 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -90,8 +90,8 @@ namespace SHADE /// The object that contains the data of the field to render. /// static void renderFieldInInspector(System::Reflection::FieldInfo^ field, System::Object^ object); - static bool renderFieldInInspector(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib); - static bool renderEnumFieldInInspector(const std::string& fieldName, System::Object^% object, bool* isHovered); + static bool renderFieldEditor(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib); + static bool renderEnumEditor(const std::string& fieldName, System::Object^% object, bool* isHovered); /// /// Checks if the specified field is of the specified native and managed type /// equivalent and renders a ImGui field editor based on the specified field @@ -107,7 +107,7 @@ namespace SHADE /// /// True if the field is modified. template - static bool renderFieldInInspector(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered); + static bool renderSpecificField(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, EditorFieldFunc fieldEditor, bool* isHovered); /// /// Renders a ImGui field editor based on the type of parameters specified. /// @@ -127,9 +127,28 @@ namespace SHADE /// /// True if the field is modified. template - static bool renderFieldInInspector(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + static bool renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + /// + /// Renders a ImGui field editor based on the type of parameters specified. + /// + /// Native type of the field. + /// Managed type of the field. + /// Label to use for the field editor. + /// + /// Tracking reference for the managed variable to modify. + /// + /// ImGui field editor function to use. + /// + /// Pointer to a bool that stores if the field editor was hovered over. + /// + /// + /// If provided and the type supports it, the field will be rendered with a + /// slider instead. + /// + /// True if the field is modified. template - static bool renderFieldInInspector(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + static bool renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); + /// /// Renders a context menu when right clicked for the scripts /// From 2d2cc532a5446ddec3be23852fa0182be6f80f45 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 11 Nov 2022 22:59:45 +0800 Subject: [PATCH 743/793] Fixed editing intermdiate list values not working --- SHADE_Managed/src/Editor/Editor.cxx | 8 +++++--- SHADE_Managed/src/Editor/Editor.h++ | 6 +----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index d26bd252..7648e2aa 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -174,7 +174,7 @@ namespace SHADE // Any List if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) { - /* System::Type^ listType = field->FieldType->GenericTypeArguments[0]; + System::Type^ listType = field->FieldType->GenericTypeArguments[0]; RangeAttribute^ rangeAttrib = hasAttribute(field); System::Collections::IList^ iList = safe_cast(field->GetValue(object)); @@ -185,15 +185,17 @@ namespace SHADE SHEditorUI::Indent(); for (int i = 0; i < iList->Count; ++i) { + SHEditorUI::PushID(i); System::Object^ obj = iList[i]; - if (renderFieldInInspector(std::to_string(i), obj, rangeAttrib)) + if (renderFieldEditor(std::to_string(i), obj, rangeAttrib)) { iList[i] = obj; } SHEditorUI::SameLine(); SHEditorUI::Button("-"); + SHEditorUI::PopID(); } - SHEditorUI::Unindent();*/ + SHEditorUI::Unindent(); } else { diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index 8fbc6348..009160ce 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -86,11 +86,7 @@ namespace SHADE { if (object->GetType()->IsSubclassOf(Enum::typeid)) { - int managedVal = safe_cast(object); - if (renderFieldEditorInternal(fieldName, &managedVal, fieldEditor, isHovered, rangeAttrib)) - { - object = managedVal; - } + renderEnumEditor(fieldName, object, isHovered); return true; } } From 543c199b03a7889e3ef85a94034dc6f1acecdf06 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 02:33:00 +0800 Subject: [PATCH 744/793] Fixed lists undo not working --- SHADE_Managed/src/Editor/Editor.cxx | 66 ++++++++++++++++------ SHADE_Managed/src/Editor/Editor.h++ | 7 ++- SHADE_Managed/src/Editor/Editor.hxx | 65 ++++++++++++++------- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 51 +++++++---------- SHADE_Managed/src/Editor/UndoRedoStack.hxx | 24 ++++---- 5 files changed, 129 insertions(+), 84 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 7648e2aa..d1672929 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -180,6 +180,7 @@ namespace SHADE SHEditorUI::Text(Convert::ToNative(field->Name)); SHEditorUI::SameLine(); + SHEditorUI::Button("+"); SHEditorUI::Indent(); @@ -187,9 +188,11 @@ namespace SHADE { SHEditorUI::PushID(i); System::Object^ obj = iList[i]; + System::Object^ oldObj = iList[i]; if (renderFieldEditor(std::to_string(i), obj, rangeAttrib)) { iList[i] = obj; + registerUndoListChangeAction(listType, iList, i, obj, oldObj); } SHEditorUI::SameLine(); SHEditorUI::Button("-"); @@ -281,24 +284,26 @@ namespace SHADE bool Editor::renderFieldEditor(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib) { - const bool MODIFIED_PRIMITIVE = - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputCheckbox, nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputFloat , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputDouble , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputVec2 , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, SHEditorUI::InputVec3 , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib) || - renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib); + bool modified; - return MODIFIED_PRIMITIVE; + const bool RENDERED = + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputInt , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputCheckbox, nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputFloat , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputDouble , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputVec2 , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, SHEditorUI::InputVec3 , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib, modified) || + renderFieldEditor(fieldName, object, nullptr , nullptr, rangeAttrib, modified); + + return modified; } bool Editor::renderEnumEditor(const std::string& fieldName, System::Object^% object, bool* isHovered) @@ -345,6 +350,33 @@ namespace SHADE SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); } + void Editor::registerUndoListChangeAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ newData, System::Object^ oldData) + { + if (list == nullptr) + return; + + actionStack.Add(gcnew ListElementChangeCommand(list, index, newData, oldData)); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); + } + + void Editor::registerUndoListAddAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data) + { + if (list == nullptr) + return; + + actionStack.Add(gcnew ListElementAddCommand(list, index, data)); + } + + void Editor::registerUndoListRemoveAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data) + { + if (list == nullptr) + return; + + actionStack.Add(gcnew ListElementRemoveCommand(list, index, data)); + } + generic Attribute Editor::hasAttribute(System::Reflection::FieldInfo^ field) { diff --git a/SHADE_Managed/src/Editor/Editor.h++ b/SHADE_Managed/src/Editor/Editor.h++ index 009160ce..a186d7ea 100644 --- a/SHADE_Managed/src/Editor/Editor.h++ +++ b/SHADE_Managed/src/Editor/Editor.h++ @@ -80,13 +80,15 @@ namespace SHADE } template - bool Editor::renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib) + bool Editor::renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib, bool& modified) { + modified = false; + if constexpr (std::is_same_v) { if (object->GetType()->IsSubclassOf(Enum::typeid)) { - renderEnumEditor(fieldName, object, isHovered); + modified = renderEnumEditor(fieldName, object, isHovered); return true; } } @@ -99,6 +101,7 @@ namespace SHADE if (renderFieldEditorInternal(fieldName, managedValPtr, fieldEditor, isHovered, rangeAttrib)) { object = managedVal; + modified = true; return true; } return false; diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 54ab128d..64c445e5 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -90,7 +90,49 @@ namespace SHADE /// The object that contains the data of the field to render. /// static void renderFieldInInspector(System::Reflection::FieldInfo^ field, System::Object^ object); + /// + /// Renders a raw editor for a single value. + /// + /// The name of the field to render. + /// Tracking reference to the object to modify. + /// + /// If specified, will be used to constrain values. + /// + /// True if the value was modified. static bool renderFieldEditor(const std::string& fieldName, System::Object^% object, RangeAttribute^ rangeAttrib); + /// + /// Renders a ImGui field editor based on the type of parameters specified if the + /// type matches. + /// + /// Native type of the field. + /// Managed type of the field. + /// Label to use for the field editor. + /// + /// Tracking reference for the managed variable to modify. + /// + /// ImGui field editor function to use. + /// + /// Pointer to a bool that stores if the field editor was hovered over. + /// + /// + /// If provided and the type supports it, the field will be rendered with a + /// slider instead. + /// + /// + /// True if the field was rendered.. + template + static bool renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib, bool& modified); + /// + /// Renders a raw editor for a single enum value. + /// + /// The name of the field to render. + /// + /// Tracking reference to the object to modify. Must be an enum. + /// + /// + /// Pointer to a bool that stores if the field editor was hovered over. + /// + /// True if the value was modified. static bool renderEnumEditor(const std::string& fieldName, System::Object^% object, bool* isHovered); /// /// Checks if the specified field is of the specified native and managed type @@ -128,26 +170,6 @@ namespace SHADE /// True if the field is modified. template static bool renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); - /// - /// Renders a ImGui field editor based on the type of parameters specified. - /// - /// Native type of the field. - /// Managed type of the field. - /// Label to use for the field editor. - /// - /// Tracking reference for the managed variable to modify. - /// - /// ImGui field editor function to use. - /// - /// Pointer to a bool that stores if the field editor was hovered over. - /// - /// - /// If provided and the type supports it, the field will be rendered with a - /// slider instead. - /// - /// True if the field is modified. - template - static bool renderFieldEditor(const std::string& fieldName, System::Object^% object, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); /// /// Renders a context menu when right clicked for the scripts @@ -164,6 +186,9 @@ namespace SHADE /// New data to set. /// Data that was overriden. static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); + static void registerUndoListChangeAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ newData, System::Object^ oldData); + static void registerUndoListAddAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data); + static void registerUndoListRemoveAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data); /// /// Checks if a specific field has the specified attribute /// diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index 10ef822c..789d285d 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -132,10 +132,9 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementChangeCommand - Constructor */ /*---------------------------------------------------------------------------------*/ - generic - ListElementChangeCommand::ListElementChangeCommand(System::Collections::Generic::List^ list, int index, T newData, T oldData) + ListElementChangeCommand::ListElementChangeCommand(System::Collections::IList^ list, int index, System::Object^ newData, System::Object^ oldData) : list { list } - , index{ index } + , index { index } , newData { newData } , oldData { oldData } {} @@ -143,10 +142,9 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementChangeCommand - ICommand Functions */ /*---------------------------------------------------------------------------------*/ - generic - bool ListElementChangeCommand::Execute() + bool ListElementChangeCommand::Execute() { - if (list && index < System::Linq::Enumerable::Count(list)) + if (list && index < list->Count) { list[index] = newData; return true; @@ -154,11 +152,10 @@ namespace SHADE return false; } - - generic - bool ListElementChangeCommand::Unexceute() + + bool ListElementChangeCommand::Unexceute() { - if (list && index < System::Linq::Enumerable::Count(list)) + if (list && index < list->Count) { list[index] = oldData; return true; @@ -166,11 +163,9 @@ namespace SHADE return false; } - - generic - bool ListElementChangeCommand::Merge(ICommand^ command) + bool ListElementChangeCommand::Merge(ICommand^ command) { - ListElementChangeCommand^ otherCommand = safe_cast^>(command); + ListElementChangeCommand^ otherCommand = safe_cast(command); if (otherCommand == nullptr) { Debug::LogWarning("[Field Change Command] Attempted to merge two incompatible commands!"); @@ -187,8 +182,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementAddCommand - ICommand Functions */ /*---------------------------------------------------------------------------------*/ - generic - ListElementAddCommand::ListElementAddCommand(System::Collections::Generic::List^ list, int addIndex, T data) + ListElementAddCommand::ListElementAddCommand(System::Collections::IList^ list, int addIndex, System::Object^ data) : list { list } , addIndex { addIndex } , data { data } @@ -197,8 +191,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementAddCommand - ICommand Functions */ /*---------------------------------------------------------------------------------*/ - generic - bool ListElementAddCommand::Execute() + bool ListElementAddCommand::Execute() { if (list) { @@ -209,10 +202,9 @@ namespace SHADE return false; } - generic - bool ListElementAddCommand::Unexceute() + bool ListElementAddCommand::Unexceute() { - if (list && addIndex < System::Linq::Enumerable::Count(list)) + if (list && addIndex < list->Count) { list->RemoveAt(addIndex); return true; @@ -221,8 +213,7 @@ namespace SHADE return false; } - generic - bool ListElementAddCommand::Merge(ICommand^) + bool ListElementAddCommand::Merge(ICommand^) { // Not allowed return false; @@ -231,8 +222,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementRemoveCommand - ICommand Functions */ /*---------------------------------------------------------------------------------*/ - generic - ListElementRemoveCommand::ListElementRemoveCommand(System::Collections::Generic::List^ list, int removeIndex, T data) + ListElementRemoveCommand::ListElementRemoveCommand(System::Collections::IList^ list, int removeIndex, System::Object^ data) : list { list } , removeIndex { removeIndex } , data { data } @@ -241,10 +231,9 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* ListElementRemoveCommand - ICommand Functions */ /*---------------------------------------------------------------------------------*/ - generic - bool ListElementRemoveCommand::Execute() + bool ListElementRemoveCommand::Execute() { - if (list && removeIndex < System::Linq::Enumerable::Count(list)) + if (list && removeIndex < list->Count) { list->RemoveAt(removeIndex); return true; @@ -253,8 +242,7 @@ namespace SHADE return false; } - generic - bool ListElementRemoveCommand::Unexceute() + bool ListElementRemoveCommand::Unexceute() { if (list) { @@ -265,8 +253,7 @@ namespace SHADE return false; } - generic - bool ListElementRemoveCommand::Merge(ICommand^) + bool ListElementRemoveCommand::Merge(ICommand^) { // Not allowed return false; diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index ed9a625a..dea458bc 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -55,53 +55,51 @@ namespace SHADE System::Object^ oldData; }; - generic + private ref class ListElementChangeCommand sealed : public ICommand { public: - ListElementChangeCommand(System::Collections::Generic::List^ list, int index, T newData, T oldData); + ListElementChangeCommand(System::Collections::IList^ list, int index, System::Object^ newData, System::Object^ oldData); bool Execute() override; bool Unexceute() override; bool Merge(ICommand^ command) override; private: - System::Collections::Generic::List^ list; + System::Collections::IList^ list; int index; - T newData; - T oldData; + System::Object^ newData; + System::Object^ oldData; }; - generic private ref class ListElementAddCommand sealed : public ICommand { public: - ListElementAddCommand(System::Collections::Generic::List^ list, int addIndex, T data); + ListElementAddCommand(System::Collections::IList^ list, int addIndex, System::Object^ data); bool Execute() override; bool Unexceute() override; bool Merge(ICommand^ command) override; private: - System::Collections::Generic::List^ list; + System::Collections::IList^ list; int addIndex; // New index of the added element - T data; + System::Object^ data; }; - generic private ref class ListElementRemoveCommand sealed : public ICommand { public: - ListElementRemoveCommand(System::Collections::Generic::List^ list, int removeIndex, T data); + ListElementRemoveCommand(System::Collections::IList^ list, int removeIndex, System::Object^ data); bool Execute() override; bool Unexceute() override; bool Merge(ICommand^ command) override; private: - System::Collections::Generic::List^ list; + System::Collections::IList^ list; int removeIndex; // Index of the element to remove at - T data; + System::Object^ data; }; /// From 4c01d68f958144b85598c7ec21baa96fdda4d99d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 02:33:12 +0800 Subject: [PATCH 745/793] Added list editor tests --- Assets/Scripts/RaccoonShowcase.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/Scripts/RaccoonShowcase.cs b/Assets/Scripts/RaccoonShowcase.cs index 836b93d0..75061b82 100644 --- a/Assets/Scripts/RaccoonShowcase.cs +++ b/Assets/Scripts/RaccoonShowcase.cs @@ -1,5 +1,6 @@ using SHADE; using System; +using System.Collections.Generic; public class RaccoonShowcase : Script { @@ -17,6 +18,9 @@ public class RaccoonShowcase : Script private double rotation = 0.0; private Vector3 scale = Vector3.Zero; private double originalScale = 1.0f; + public List vecList = new List(new Vector3[] { new Vector3(1, 2, 3), new Vector3(4, 5, 6) }); + public List intList = new List(new int[] { 2, 8, 2, 6, 8, 0, 1 }); + public List enumList = new List(new Light.Type[] { Light.Type.Point, Light.Type.Directional, Light.Type.Ambient }); public RaccoonShowcase(GameObject gameObj) : base(gameObj) {} protected override void awake() From d6764b45515465ab6a29fb6dbd0905a70a536091 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 03:25:46 +0800 Subject: [PATCH 746/793] Added support for adding and removing elements from a list --- SHADE_Managed/src/Editor/Editor.cxx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index d1672929..c481e0b8 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -181,7 +181,12 @@ namespace SHADE SHEditorUI::Text(Convert::ToNative(field->Name)); SHEditorUI::SameLine(); - SHEditorUI::Button("+"); + if (SHEditorUI::Button("+")) + { + System::Object^ obj = System::Activator::CreateInstance(listType); + iList->Add(obj); + registerUndoListAddAction(listType, iList, iList->Count - 1, obj); + } SHEditorUI::Indent(); for (int i = 0; i < iList->Count; ++i) @@ -195,7 +200,14 @@ namespace SHADE registerUndoListChangeAction(listType, iList, i, obj, oldObj); } SHEditorUI::SameLine(); - SHEditorUI::Button("-"); + if (SHEditorUI::Button("-")) + { + System::Object^ obj = iList[i]; + iList->RemoveAt(i); + registerUndoListRemoveAction(listType, iList, i, obj); + SHEditorUI::PopID(); + break; + } SHEditorUI::PopID(); } SHEditorUI::Unindent(); @@ -367,6 +379,9 @@ namespace SHADE return; actionStack.Add(gcnew ListElementAddCommand(list, index, data)); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); } void Editor::registerUndoListRemoveAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data) @@ -375,6 +390,9 @@ namespace SHADE return; actionStack.Add(gcnew ListElementRemoveCommand(list, index, data)); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); } generic From 6dbda12f3009bed1c65d1c9284b60818a898332c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 03:53:30 +0800 Subject: [PATCH 747/793] Adjusted design of list on scripts and all numbers now use sliders --- SHADE_Engine/src/Editor/SHEditorUI.cpp | 41 ++++++++++------------ SHADE_Engine/src/Editor/SHEditorUI.h | 11 ------ SHADE_Managed/src/Editor/Editor.cxx | 47 ++++++++++++-------------- 3 files changed, 39 insertions(+), 60 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index ba394f77..06c3f5c5 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -75,7 +75,7 @@ namespace SHADE bool SHEditorUI::BeginMenu(const std::string& label) { - return ImGui::BeginMenu(label.data()); + return ImGui::BeginMenu(label.data()); } bool SHEditorUI::BeginMenu(const std::string& label, const char* icon) @@ -143,7 +143,7 @@ namespace SHADE bool SHEditorUI::Selectable(const std::string& label) { - return ImGui::Selectable(label.data()); + return ImGui::Selectable(label.data()); } bool SHEditorUI::Selectable(const std::string& label, const char* icon) @@ -165,8 +165,10 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputInt("##", &value, - 1, 10, + return ImGui::DragInt("##", &value, 0.001f, + std::numeric_limits::min(), + std::numeric_limits::max(), + "%d", ImGuiInputTextFlags_EnterReturnsTrue); } bool SHEditorUI::InputUnsignedInt(const std::string& label, unsigned int& value, bool* isHovered) @@ -190,31 +192,22 @@ namespace SHADE if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::SameLine(); - return ImGui::InputFloat("##", &value, - 0.1f, 1.0f, "%.3f", + return ImGui::DragFloat("##", &value, 0.001f, + std::numeric_limits::lowest(), + std::numeric_limits::max(), + "%.3f", ImGuiInputTextFlags_EnterReturnsTrue); } bool SHEditorUI::InputDouble(const std::string& label, double& value, bool* isHovered) { - ImGui::Text(label.c_str()); - if (isHovered) - *isHovered = ImGui::IsItemHovered(); - ImGui::SameLine(); - return ImGui::InputDouble("##", &value, - 0.1, 1.0, "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); + float val = value; + const bool CHANGED = InputFloat(label, val, isHovered); + if (CHANGED) + { + value = static_cast(val); + } + return CHANGED; } - bool SHEditorUI::InputAngle(const std::string& label, double& value, bool* isHovered) - { - ImGui::Text(label.c_str()); - if (isHovered) - *isHovered = ImGui::IsItemHovered(); - ImGui::SameLine(); - return ImGui::InputDouble("##", &value, - 1.0, 45.0, "%.3f", - ImGuiInputTextFlags_EnterReturnsTrue); - } - bool SHEditorUI::InputSlider(const std::string& label, int min, int max, int& value, bool* isHovered /*= nullptr*/) { ImGui::Text(label.c_str()); diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index e0ea0521..4f11a025 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -219,17 +219,6 @@ namespace SHADE /// True if the value was changed. static bool InputDouble(const std::string& label, double& value, bool* isHovered = nullptr); /// - /// Creates a decimal field widget for double input with increments of higher - /// steps meant for angle variables. - ///
    - /// Wraps up ImGui::InputDouble(). - ///
    - /// Label used to identify this widget. - /// Reference to the variable to store the result. - /// Name))) { - System::Object^ obj = System::Activator::CreateInstance(listType); - iList->Add(obj); - registerUndoListAddAction(listType, iList, iList->Count - 1, obj); - } - - SHEditorUI::Indent(); - for (int i = 0; i < iList->Count; ++i) - { - SHEditorUI::PushID(i); - System::Object^ obj = iList[i]; - System::Object^ oldObj = iList[i]; - if (renderFieldEditor(std::to_string(i), obj, rangeAttrib)) + if (SHEditorUI::Button("Add Item")) { - iList[i] = obj; - registerUndoListChangeAction(listType, iList, i, obj, oldObj); + System::Object^ obj = System::Activator::CreateInstance(listType); + iList->Add(obj); + registerUndoListAddAction(listType, iList, iList->Count - 1, obj); } - SHEditorUI::SameLine(); - if (SHEditorUI::Button("-")) + for (int i = 0; i < iList->Count; ++i) { + SHEditorUI::PushID(i); System::Object^ obj = iList[i]; - iList->RemoveAt(i); - registerUndoListRemoveAction(listType, iList, i, obj); + System::Object^ oldObj = iList[i]; + if (renderFieldEditor(std::to_string(i), obj, rangeAttrib)) + { + iList[i] = obj; + registerUndoListChangeAction(listType, iList, i, obj, oldObj); + } + SHEditorUI::SameLine(); + if (SHEditorUI::Button("-")) + { + System::Object^ obj = iList[i]; + iList->RemoveAt(i); + registerUndoListRemoveAction(listType, iList, i, obj); + SHEditorUI::PopID(); + break; + } SHEditorUI::PopID(); - break; } - SHEditorUI::PopID(); } - SHEditorUI::Unindent(); } else { From 24dcd77f3273e4a565e6555f2fe44af6cb9579c6 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 12:17:11 +0800 Subject: [PATCH 748/793] Added tooltip and range attribute support for lists in scripts --- Assets/Scripts/RaccoonShowcase.cs | 2 ++ SHADE_Engine/src/Editor/SHEditorUI.cpp | 7 +++++-- SHADE_Engine/src/Editor/SHEditorUI.h | 3 ++- SHADE_Managed/src/Editor/Editor.cxx | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/RaccoonShowcase.cs b/Assets/Scripts/RaccoonShowcase.cs index 75061b82..dc9d914d 100644 --- a/Assets/Scripts/RaccoonShowcase.cs +++ b/Assets/Scripts/RaccoonShowcase.cs @@ -18,7 +18,9 @@ public class RaccoonShowcase : Script private double rotation = 0.0; private Vector3 scale = Vector3.Zero; private double originalScale = 1.0f; + [Tooltip("Sample list of Vector3s.")] public List vecList = new List(new Vector3[] { new Vector3(1, 2, 3), new Vector3(4, 5, 6) }); + [Range(-5, 5)] public List intList = new List(new int[] { 2, 8, 2, 6, 8, 0, 1 }); public List enumList = new List(new Light.Type[] { Light.Type.Point, Light.Type.Directional, Light.Type.Ambient }); public RaccoonShowcase(GameObject gameObj) : base(gameObj) {} diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 06c3f5c5..40e08042 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -53,9 +53,12 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* ImGui Wrapper Functions - Organizers */ /*-----------------------------------------------------------------------------------*/ - bool SHEditorUI::CollapsingHeader(const std::string& title) + bool SHEditorUI::CollapsingHeader(const std::string& title, bool* isHovered) { - return ImGui::CollapsingHeader(title.c_str(), ImGuiTreeNodeFlags_DefaultOpen); + const bool OPENED = ImGui::CollapsingHeader(title.c_str(), ImGuiTreeNodeFlags_DefaultOpen); + if (isHovered) + *isHovered = ImGui::IsItemHovered(); + return OPENED; } void SHEditorUI::SameLine() diff --git a/SHADE_Engine/src/Editor/SHEditorUI.h b/SHADE_Engine/src/Editor/SHEditorUI.h index 4f11a025..f450ac0d 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.h +++ b/SHADE_Engine/src/Editor/SHEditorUI.h @@ -85,8 +85,9 @@ namespace SHADE /// Wraps up ImGui::CollapsingHeader(). ///
    /// Label for the header. + /// Date: Sat, 12 Nov 2022 16:56:58 +0800 Subject: [PATCH 749/793] .....small restructure.... --- .../src/Application/SBApplication.cpp | 4 +- SHADE_Application/src/Scenes/SBMainScene.cpp | 4 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 4 +- .../Inspector/SHEditorComponentView.hpp | 2 +- .../Inspector/SHEditorInspector.cpp | 4 +- .../SHCollisionInfo.cpp} | 28 +- .../SHCollisionInfo.h} | 48 +- .../Physics/Collision/SHCollisionListener.cpp | 236 ++++++ .../Physics/Collision/SHCollisionListener.h | 81 ++ .../SHColliderComponent.cpp | 21 +- .../SHColliderComponent.h | 2 +- .../{ => Interface}/SHCollisionShape.cpp | 2 +- .../{ => Interface}/SHCollisionShape.h | 0 .../{ => Interface}/SHPhysicsMaterial.cpp | 0 .../{ => Interface}/SHPhysicsMaterial.h | 0 .../SHRigidBodyComponent.cpp | 384 +++------- .../SHRigidBodyComponent.h | 64 +- .../Physics/PhysicsObject/SHPhysicsObject.cpp | 361 +++++++++ .../{ => PhysicsObject}/SHPhysicsObject.h | 43 +- .../PhysicsObject/SHPhysicsObjectManager.cpp | 266 +++++++ .../PhysicsObject/SHPhysicsObjectManager.h | 178 +++++ SHADE_Engine/src/Physics/SHPhysicsEvents.h | 37 + SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 219 ------ SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 706 ------------------ SHADE_Engine/src/Physics/SHPhysicsSystem.hpp | 84 --- SHADE_Engine/src/Physics/SHPhysicsWorld.cpp | 66 ++ SHADE_Engine/src/Physics/SHPhysicsWorld.h | 74 ++ .../{ => System}/SHPhysicsDebugDrawSystem.cpp | 0 .../{ => System}/SHPhysicsDebugDrawSystem.h | 0 .../src/Physics/System/SHPhysicsSystem.cpp | 307 ++++++++ .../Physics/{ => System}/SHPhysicsSystem.h | 149 ++-- .../{ => System}/SHPhysicsSystemInterface.cpp | 15 +- .../{ => System}/SHPhysicsSystemInterface.h | 6 +- .../System/SHPhysicsSystemRoutines.cpp | 314 ++++++++ SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 3 +- .../src/Serialization/SHSerialization.cpp | 2 +- .../src/Serialization/SHYAMLConverters.h | 4 +- SHADE_Managed/src/Components/Collider.hxx | 2 +- SHADE_Managed/src/Components/RigidBody.hxx | 2 +- SHADE_Managed/src/Engine/ECS.cxx | 4 +- SHADE_Managed/src/Engine/Time.cxx | 2 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 17 +- 42 files changed, 2259 insertions(+), 1486 deletions(-) rename SHADE_Engine/src/Physics/{SHPhysicsUtils.cpp => Collision/SHCollisionInfo.cpp} (72%) rename SHADE_Engine/src/Physics/{SHPhysicsUtils.h => Collision/SHCollisionInfo.h} (71%) create mode 100644 SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp create mode 100644 SHADE_Engine/src/Physics/Collision/SHCollisionListener.h rename SHADE_Engine/src/Physics/{Components => Interface}/SHColliderComponent.cpp (90%) rename SHADE_Engine/src/Physics/{Components => Interface}/SHColliderComponent.h (98%) rename SHADE_Engine/src/Physics/{ => Interface}/SHCollisionShape.cpp (99%) rename SHADE_Engine/src/Physics/{ => Interface}/SHCollisionShape.h (100%) rename SHADE_Engine/src/Physics/{ => Interface}/SHPhysicsMaterial.cpp (100%) rename SHADE_Engine/src/Physics/{ => Interface}/SHPhysicsMaterial.h (100%) rename SHADE_Engine/src/Physics/{Components => Interface}/SHRigidBodyComponent.cpp (55%) rename SHADE_Engine/src/Physics/{Components => Interface}/SHRigidBodyComponent.h (78%) create mode 100644 SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp rename SHADE_Engine/src/Physics/{ => PhysicsObject}/SHPhysicsObject.h (70%) create mode 100644 SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp create mode 100644 SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h create mode 100644 SHADE_Engine/src/Physics/SHPhysicsEvents.h delete mode 100644 SHADE_Engine/src/Physics/SHPhysicsObject.cpp delete mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.cpp delete mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.hpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsWorld.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsWorld.h rename SHADE_Engine/src/Physics/{ => System}/SHPhysicsDebugDrawSystem.cpp (100%) rename SHADE_Engine/src/Physics/{ => System}/SHPhysicsDebugDrawSystem.h (100%) create mode 100644 SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp rename SHADE_Engine/src/Physics/{ => System}/SHPhysicsSystem.h (57%) rename SHADE_Engine/src/Physics/{ => System}/SHPhysicsSystemInterface.cpp (81%) rename SHADE_Engine/src/Physics/{ => System}/SHPhysicsSystemInterface.h (91%) create mode 100644 SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 6955035b..bf5b8d49 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -30,8 +30,8 @@ #include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" #include "Input/SHInputManager.h" #include "Math/Transform/SHTransformSystem.h" -#include "Physics/SHPhysicsSystem.h" -#include "Physics/SHPhysicsDebugDrawSystem.h" +#include "Physics/System/SHPhysicsSystem.h" +#include "Physics/System/SHPhysicsDebugDrawSystem.h" #include "Scripting/SHScriptEngine.h" // Components diff --git a/SHADE_Application/src/Scenes/SBMainScene.cpp b/SHADE_Application/src/Scenes/SBMainScene.cpp index 34190915..b14f2e6f 100644 --- a/SHADE_Application/src/Scenes/SBMainScene.cpp +++ b/SHADE_Application/src/Scenes/SBMainScene.cpp @@ -10,8 +10,8 @@ #include "Scripting/SHScriptEngine.h" #include "Math/Transform/SHTransformComponent.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" -#include "Physics/Components/SHRigidBodyComponent.h" -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Assets/SHAssetManager.h" diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index 8281f114..bcc7f09d 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -10,8 +10,8 @@ #include "Scripting/SHScriptEngine.h" #include "Math/Transform/SHTransformComponent.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" -#include "Physics/Components/SHRigidBodyComponent.h" -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Assets/SHAssetManager.h" diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 7e7db174..2e55ea7a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -15,7 +15,7 @@ #include "Editor/SHEditorWidgets.hpp" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" #include "Resource/SHResourceManager.h" diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 2fecae25..c4dd1fdb 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -14,8 +14,8 @@ #include "Scripting/SHScriptEngine.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Physics/Components/SHRigidBodyComponent.h" -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" #include "Camera/SHCameraComponent.h" #include "Camera/SHCameraArmComponent.h" #include "SHEditorComponentView.h" diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp b/SHADE_Engine/src/Physics/Collision/SHCollisionInfo.cpp similarity index 72% rename from SHADE_Engine/src/Physics/SHPhysicsUtils.cpp rename to SHADE_Engine/src/Physics/Collision/SHCollisionInfo.cpp index 14b6cc2f..43ad05ca 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp +++ b/SHADE_Engine/src/Physics/Collision/SHCollisionInfo.cpp @@ -1,7 +1,7 @@ /**************************************************************************************** - * \file SHPhysicsUtils.cpp + * \file SHCollisionInfo.cpp * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Implementation for some Physics Utilities + * \brief Implementation for Collision Info. * * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or * disclosure of this file or its contents without the prior written consent @@ -11,7 +11,7 @@ #include // Primary Header -#include "SHPhysicsUtils.h" +#include "SHCollisionInfo.h" namespace SHADE { @@ -19,7 +19,7 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHCollisionEvent::SHCollisionEvent() noexcept + SHCollisionInfo::SHCollisionInfo() noexcept : collisionState { State::INVALID } { ids[ENTITY_A] = MAX_EID; @@ -28,7 +28,7 @@ namespace SHADE ids[COLLIDER_B] = std::numeric_limits::max(); } - SHCollisionEvent::SHCollisionEvent(EntityID entityA, EntityID entityB) noexcept + SHCollisionInfo::SHCollisionInfo(EntityID entityA, EntityID entityB) noexcept : collisionState { State::INVALID } { ids[ENTITY_A] = entityA; @@ -41,12 +41,12 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ - bool SHCollisionEvent::operator==(const SHCollisionEvent& rhs) const noexcept + bool SHCollisionInfo::operator==(const SHCollisionInfo& rhs) const noexcept { return value[0] == rhs.value[0] && value[1] == rhs.value[1]; } - bool SHCollisionEvent::operator!=(const SHCollisionEvent& rhs) const noexcept + bool SHCollisionInfo::operator!=(const SHCollisionInfo& rhs) const noexcept { return value[0] != rhs.value[0] || value[1] != rhs.value[1]; } @@ -55,37 +55,37 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - EntityID SHCollisionEvent::GetEntityA() const noexcept + EntityID SHCollisionInfo::GetEntityA() const noexcept { return ids[ENTITY_A]; } - EntityID SHCollisionEvent::GetEntityB() const noexcept + EntityID SHCollisionInfo::GetEntityB() const noexcept { return ids[ENTITY_B]; } - const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyA() const noexcept + const SHRigidBodyComponent* SHCollisionInfo::GetRigidBodyA() const noexcept { return SHComponentManager::GetComponent_s(ids[ENTITY_A]); } - const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyB() const noexcept + const SHRigidBodyComponent* SHCollisionInfo::GetRigidBodyB() const noexcept { return SHComponentManager::GetComponent_s(ids[ENTITY_B]); } - const SHCollisionShape* SHCollisionEvent::GetColliderA() const noexcept + const SHCollisionShape* SHCollisionInfo::GetColliderA() const noexcept { return &SHComponentManager::GetComponent(ids[ENTITY_A])->GetCollisionShape(ids[COLLIDER_A]); } - const SHCollisionShape* SHCollisionEvent::GetColliderB() const noexcept + const SHCollisionShape* SHCollisionInfo::GetColliderB() const noexcept { return &SHComponentManager::GetComponent(ids[ENTITY_B])->GetCollisionShape(ids[COLLIDER_B]); } - SHCollisionEvent::State SHCollisionEvent::GetCollisionState() const noexcept + SHCollisionInfo::State SHCollisionInfo::GetCollisionState() const noexcept { return collisionState; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.h b/SHADE_Engine/src/Physics/Collision/SHCollisionInfo.h similarity index 71% rename from SHADE_Engine/src/Physics/SHPhysicsUtils.h rename to SHADE_Engine/src/Physics/Collision/SHCollisionInfo.h index 753f8d3b..d2dad647 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsUtils.h +++ b/SHADE_Engine/src/Physics/Collision/SHCollisionInfo.h @@ -1,7 +1,7 @@ /**************************************************************************************** - * \file SHPhysicsUtils.h + * \file SHCollisionInfo.h * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Interface for some Physics Utilities + * \brief Interface for Collision Information for Collision & Triggers. * * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or * disclosure of this file or its contents without the prior written consent @@ -11,8 +11,8 @@ #pragma once // Project Headers -#include "Components/SHColliderComponent.h" -#include "Components/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" namespace SHADE @@ -21,27 +21,14 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - struct SHPhysicsColliderAddedEvent - { - EntityID entityID; - SHCollisionShape::Type colliderType; - int colliderIndex; - }; - - struct SHPhysicsColliderRemovedEvent - { - EntityID entityID; - int colliderIndex; - }; - - class SH_API SHCollisionEvent + class SH_API SHCollisionInfo { private: /*---------------------------------------------------------------------------------*/ /* Friends */ /*---------------------------------------------------------------------------------*/ - friend class SHPhysicsSystem; + friend class SHCollisionListener; public: /*---------------------------------------------------------------------------------*/ @@ -62,23 +49,23 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHCollisionEvent () noexcept; - SHCollisionEvent (EntityID entityA, EntityID entityB) noexcept; + SHCollisionInfo () noexcept; + SHCollisionInfo (EntityID entityA, EntityID entityB) noexcept; - SHCollisionEvent (const SHCollisionEvent& rhs) = default; - SHCollisionEvent (SHCollisionEvent&& rhs) = default; - ~SHCollisionEvent () = default; + SHCollisionInfo (const SHCollisionInfo& rhs) = default; + SHCollisionInfo (SHCollisionInfo&& rhs) = default; + ~SHCollisionInfo () = default; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - bool operator== (const SHCollisionEvent& rhs) const noexcept; - bool operator!= (const SHCollisionEvent& rhs) const noexcept; + bool operator== (const SHCollisionInfo& rhs) const noexcept; + bool operator!= (const SHCollisionInfo& rhs) const noexcept; - SHCollisionEvent& operator= (const SHCollisionEvent& rhs) = default; - SHCollisionEvent& operator= (SHCollisionEvent&& rhs) = default; + SHCollisionInfo& operator= (const SHCollisionInfo& rhs) = default; + SHCollisionInfo& operator= (SHCollisionInfo&& rhs) = default; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -88,8 +75,8 @@ namespace SHADE [[nodiscard]] EntityID GetEntityB () const noexcept; [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyA () const noexcept; [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyB () const noexcept; - [[nodiscard]] const SHCollisionShape* GetColliderA () const noexcept; - [[nodiscard]] const SHCollisionShape* GetColliderB () const noexcept; + [[nodiscard]] const SHCollisionShape* GetColliderA () const noexcept; + [[nodiscard]] const SHCollisionShape* GetColliderB () const noexcept; [[nodiscard]] State GetCollisionState () const noexcept; private: @@ -112,5 +99,4 @@ namespace SHADE State collisionState; }; - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp new file mode 100644 index 00000000..e8379b09 --- /dev/null +++ b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp @@ -0,0 +1,236 @@ +/**************************************************************************************** + * \file SHCollisionListener.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Collision Listener. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHCollisionListener.h" + +// Project Headers +#include "Physics/PhysicsObject/SHPhysicsObject.h" +#include "Physics/System/SHPhysicsSystem.h" + +/*-------------------------------------------------------------------------------------*/ +/* Local Helper Functions */ +/*-------------------------------------------------------------------------------------*/ + +uint32_t matchColliders(const SHADE::SHPhysicsObject&physicsObject, const rp3d::Entity colliderID) +{ + for (uint32_t i = 0; i < physicsObject.GetCollisionBody()->getNbColliders(); ++i) + { + const auto* collider = physicsObject.GetCollisionBody()->getCollider(i); + if (collider->getEntity() == colliderID) + return i; + } + + return std::numeric_limits::max(); +} + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHCollisionListener::SHCollisionListener() noexcept + : system { nullptr } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const std::vector& SHCollisionListener::GetCollisionInfoContainer() const noexcept + { + return collisionInfoContainer; + } + + const std::vector& SHCollisionListener::GetTriggerInfoContainer() const noexcept + { + return triggerInfoContainer; + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHCollisionListener::BindToSystem(SHPhysicsSystem* physicsSystem) noexcept + { + system = physicsSystem; + } + + void SHCollisionListener::BindToWorld(rp3d::PhysicsWorld* world) noexcept + { + if (!world) + return; + + world->setEventListener(this); + } + + void SHCollisionListener::CleanContainers() noexcept + { + static const auto CLEAR = [](std::vector& container) + { + for (auto eventIter = container.begin(); eventIter != container.end();) + { + const bool CLEAR_EVENT = eventIter->GetCollisionState() == SHCollisionInfo::State::EXIT + || eventIter->GetCollisionState() == SHCollisionInfo::State::INVALID; + + if (CLEAR_EVENT) + eventIter = container.erase(eventIter); + else + ++eventIter; + } + }; + + CLEAR(collisionInfoContainer); + CLEAR(triggerInfoContainer); + } + + void SHCollisionListener::ClearContainers() noexcept + { + collisionInfoContainer.clear(); + triggerInfoContainer.clear(); + } + + void SHCollisionListener::onContact(const rp3d::CollisionCallback::CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) + { + const auto CONTACT_PAIR = callbackData.getContactPair(i); + const SHCollisionInfo NEW_INFO = generateCollisionInfo(CONTACT_PAIR); + + updateInfoContainers(NEW_INFO, collisionInfoContainer); + } + } + + void SHCollisionListener::onTrigger(const rp3d::OverlapCallback::CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbOverlappingPairs(); ++i) + { + const auto OVERLAP_PAIR = callbackData.getOverlappingPair(i); + const SHCollisionInfo NEW_INFO = generateTriggerInfo(OVERLAP_PAIR); + + updateInfoContainers(NEW_INFO, triggerInfoContainer); + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHCollisionListener::updateInfoContainers(const SHCollisionInfo& collisionEvent, std::vector& container) noexcept + { + const auto IT = std::ranges::find_if(container.begin(), container.end(), [&](const SHCollisionInfo& info) + { + const bool ENTITY_MATCH = (info.ids[0] == collisionEvent.ids[0] && info.ids[1] == collisionEvent.ids[1]) + || (info.ids[0] == collisionEvent.ids[1] && info.ids[1] == collisionEvent.ids[0]); + const bool COLLIDERS_MATCH = (info.ids[2] == collisionEvent.ids[2] && info.ids[3] == collisionEvent.ids[3]) + || (info.ids[2] == collisionEvent.ids[3] && info.ids[3] == collisionEvent.ids[2]); + return ENTITY_MATCH && COLLIDERS_MATCH; + }); + + if (IT == container.end()) + container.emplace_back(collisionEvent); + else + IT->collisionState = collisionEvent.collisionState; + } + + SHCollisionInfo SHCollisionListener::generateCollisionInfo(const rp3d::CollisionCallback::ContactPair& cp) const noexcept + { + SHCollisionInfo cInfo; + + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + + for (auto& [entityID, physicsObject] : system->GetPhysicsObjects()) + { + // Match body 1 + if (matched[SHCollisionInfo::ENTITY_A] == false && physicsObject.GetCollisionBody()->getEntity() == body1) + { + cInfo.ids[SHCollisionInfo::ENTITY_A] = entityID; + cInfo.ids[SHCollisionInfo::COLLIDER_A] = matchColliders(physicsObject, collider1); + + matched[SHCollisionInfo::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionInfo::ENTITY_B] == false && physicsObject.GetCollisionBody()->getEntity() == body2) + { + cInfo.ids[SHCollisionInfo::ENTITY_B] = entityID; + cInfo.ids[SHCollisionInfo::COLLIDER_B] = matchColliders(physicsObject, collider2); + + matched[SHCollisionInfo::ENTITY_B] = true; + } + + if (matched[SHCollisionInfo::ENTITY_A] == true && matched[SHCollisionInfo::ENTITY_B] == true) + return cInfo; + } + + return cInfo; + } + + SHCollisionInfo SHCollisionListener::generateTriggerInfo(const rp3d::OverlapCallback::OverlapPair& cp) const noexcept + { + SHCollisionInfo cInfo; + + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + + for (auto& [entityID, physicsObject] : system->GetPhysicsObjects()) + { + // Match body 1 + if (matched[SHCollisionInfo::ENTITY_A] == false && physicsObject.GetCollisionBody()->getEntity() == body1) + { + cInfo.ids[SHCollisionInfo::ENTITY_A] = entityID; + cInfo.ids[SHCollisionInfo::COLLIDER_A] = matchColliders(physicsObject, collider1); + + matched[SHCollisionInfo::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionInfo::ENTITY_B] == false && physicsObject.GetCollisionBody()->getEntity() == body2) + { + cInfo.ids[SHCollisionInfo::ENTITY_B] = entityID; + cInfo.ids[SHCollisionInfo::COLLIDER_B] = matchColliders(physicsObject, collider2); + + matched[SHCollisionInfo::ENTITY_B] = true; + } + + if (matched[SHCollisionInfo::ENTITY_A] == true && matched[SHCollisionInfo::ENTITY_B] == true) + return cInfo; + } + + return cInfo; + } + + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Collision/SHCollisionListener.h b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.h new file mode 100644 index 00000000..6262b946 --- /dev/null +++ b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.h @@ -0,0 +1,81 @@ +/**************************************************************************************** + * \file SHCollisionListener.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Collision Listener. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// External Dependencies +#include + +// Project Headers +#include "SH_API.h" +#include "SHCollisionInfo.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + + class SHPhysicsSystem; + + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHCollisionListener final : public rp3d::EventListener + { + public: + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHCollisionListener() noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] const std::vector& GetCollisionInfoContainer () const noexcept; + [[nodiscard]] const std::vector& GetTriggerInfoContainer () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void BindToSystem (SHPhysicsSystem* physicsSystem) noexcept; + void BindToWorld (rp3d::PhysicsWorld* world) noexcept; + void CleanContainers () noexcept; + void ClearContainers () noexcept; + + void onContact (const rp3d::CollisionCallback::CallbackData& callbackData) override; + void onTrigger (const rp3d::OverlapCallback::CallbackData& callbackData) override; + + private: + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsSystem* system; + std::vector collisionInfoContainer; + std::vector triggerInfoContainer; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + static void updateInfoContainers (const SHCollisionInfo& collisionEvent, std::vector& container) noexcept; + + SHCollisionInfo generateCollisionInfo (const rp3d::CollisionCallback::ContactPair& cp) const noexcept; + SHCollisionInfo generateTriggerInfo (const rp3d::OverlapCallback::OverlapPair& cp) const noexcept; + }; + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp similarity index 90% rename from SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp rename to SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp index 864de46f..1c8149ad 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp @@ -16,7 +16,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" #include "Math/SHMathHelpers.h" -#include "Physics/SHPhysicsSystem.h" +#include "Physics/System/SHPhysicsSystem.h" namespace SHADE { @@ -72,7 +72,14 @@ namespace SHADE void SHColliderComponent::OnCreate() { - system = SHSystemManager::GetSystem(); + auto* physicsSystem = SHSystemManager::GetSystem(); + if (!physicsSystem) + { + SHLOG_ERROR("Physics System does not exist to link with Physics Components!") + return; + } + + system = physicsSystem; } void SHColliderComponent::OnDestroy() @@ -132,9 +139,10 @@ namespace SHADE collider.SetBoundingBox(halfExtents); // Notify Physics System - system->AddCollisionShape(GetEID(), &collider); + const int NEW_SHAPE_INDEX = static_cast(collisionShapes.size()) - 1; - return static_cast(collisionShapes.size()) - 1; + system->AddCollisionShape(GetEID(), NEW_SHAPE_INDEX); + return NEW_SHAPE_INDEX; } int SHColliderComponent::AddBoundingSphere(float radius, const SHVec3& posOffset) noexcept @@ -154,9 +162,10 @@ namespace SHADE collider.SetBoundingSphere(radius); // Notify Physics System - system->AddCollisionShape(GetEID(), &collider); + const int NEW_SHAPE_INDEX = static_cast(collisionShapes.size()) - 1; - return static_cast(collisionShapes.size()) - 1; + system->AddCollisionShape(GetEID(), NEW_SHAPE_INDEX); + return NEW_SHAPE_INDEX; } void SHColliderComponent::RemoveCollider(int index) diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h similarity index 98% rename from SHADE_Engine/src/Physics/Components/SHColliderComponent.h rename to SHADE_Engine/src/Physics/Interface/SHColliderComponent.h index 5f9b7a1b..88dc306f 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h @@ -14,9 +14,9 @@ // Project Headers #include "ECS_Base/Components/SHComponent.h" -#include "Physics/SHCollisionShape.h" #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" +#include "SHCollisionShape.h" //namespace SHADE //{ diff --git a/SHADE_Engine/src/Physics/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp similarity index 99% rename from SHADE_Engine/src/Physics/SHCollisionShape.cpp rename to SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp index bc2347e7..1ea2a7d3 100644 --- a/SHADE_Engine/src/Physics/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp @@ -16,8 +16,8 @@ #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" #include "Math/SHMathHelpers.h" -#include "Physics/Components/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" +#include "SHColliderComponent.h" namespace SHADE { diff --git a/SHADE_Engine/src/Physics/SHCollisionShape.h b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.h similarity index 100% rename from SHADE_Engine/src/Physics/SHCollisionShape.h rename to SHADE_Engine/src/Physics/Interface/SHCollisionShape.h diff --git a/SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp b/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp similarity index 100% rename from SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp rename to SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp diff --git a/SHADE_Engine/src/Physics/SHPhysicsMaterial.h b/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.h similarity index 100% rename from SHADE_Engine/src/Physics/SHPhysicsMaterial.h rename to SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.h diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp similarity index 55% rename from SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp rename to SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp index 369d26a5..5fe1e55e 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp @@ -19,7 +19,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" #include "Math/SHMathHelpers.h" -#include "Physics/SHPhysicsSystem.h" +#include "Physics/System/SHPhysicsSystem.h" namespace SHADE { @@ -30,8 +30,17 @@ namespace SHADE SHRigidBodyComponent::SHRigidBodyComponent() noexcept : type { Type::DYNAMIC } , interpolate { true } - , rp3dBody { nullptr } - {} + , flags { 0 } + , dirtyFlags { std::numeric_limits::max() } + , mass { 1.0f } + , drag { 0.01f } + , angularDrag { 0.01f } + , system { nullptr } + { + // Initialise default flags + flags |= 1U << 0; // Gravity set to true + flags |= 1U << 1; // Sleeping allowed + } /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ @@ -39,24 +48,14 @@ namespace SHADE bool SHRigidBodyComponent::IsGravityEnabled() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - return rp3dBody->isGravityEnabled(); + static constexpr int FLAG_POS = 0; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::IsAllowedToSleep() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - return rp3dBody->isAllowedToSleep(); + static constexpr int FLAG_POS = 1; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::IsInterpolating() const noexcept @@ -71,151 +70,85 @@ namespace SHADE float SHRigidBodyComponent::GetMass() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return 0.0f; - } - - return rp3dBody->getMass(); + return mass; } float SHRigidBodyComponent::GetDrag() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return 0.0f; - } - - return rp3dBody->getLinearDamping(); + return drag; } float SHRigidBodyComponent::GetAngularDrag() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return 0.0f; - } - - return rp3dBody->getAngularDamping(); + return angularDrag; } bool SHRigidBodyComponent::GetFreezePositionX() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); - return SHMath::CompareFloat(LINEAR_CONSTRAINTS.x, 0.0f); + static constexpr int FLAG_POS = 2; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::GetFreezePositionY() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); - return SHMath::CompareFloat(LINEAR_CONSTRAINTS.y, 0.0f); + static constexpr int FLAG_POS = 3; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::GetFreezePositionZ() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& LINEAR_CONSTRAINTS = rp3dBody->getLinearLockAxisFactor(); - return SHMath::CompareFloat(LINEAR_CONSTRAINTS.z, 0.0f); + static constexpr int FLAG_POS = 4; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::GetFreezeRotationX() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); - return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.x, 0.0f); + static constexpr int FLAG_POS = 5; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::GetFreezeRotationY() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); - return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.y, 0.0f); + static constexpr int FLAG_POS = 6; + return flags & (1U << FLAG_POS); } bool SHRigidBodyComponent::GetFreezeRotationZ() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } - - const auto& ANGULAR_CONSTRAINTS = rp3dBody->getAngularLockAxisFactor(); - return SHMath::CompareFloat(ANGULAR_CONSTRAINTS.z, 0.0f); + static constexpr int FLAG_POS = 7; + return flags & (1U << FLAG_POS); } SHVec3 SHRigidBodyComponent::GetForce() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return false; - } + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + return physicsObject->GetRigidBody()->getForce(); - return rp3dBody->getForce(); + return SHVec3::Zero; } SHVec3 SHRigidBodyComponent::GetTorque() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return SHVec3::Zero; - } + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + return physicsObject->GetRigidBody()->getTorque(); - return rp3dBody->getTorque(); + return SHVec3::Zero; } SHVec3 SHRigidBodyComponent::GetLinearVelocity() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return SHVec3::Zero; - } + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + return physicsObject->GetRigidBody()->getLinearVelocity(); - return rp3dBody->getLinearVelocity(); + return SHVec3::Zero; } SHVec3 SHRigidBodyComponent::GetAngularVelocity() const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return SHVec3::Zero; - } + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + return physicsObject->GetRigidBody()->getAngularVelocity(); - return rp3dBody->getAngularVelocity(); + return SHVec3::Zero; } const SHVec3& SHRigidBodyComponent::GetPosition() const noexcept @@ -239,18 +172,13 @@ namespace SHADE void SHRigidBodyComponent::SetType(Type newType) noexcept { + static constexpr int FLAG_POS = 8; + if (type == newType) return; type = newType; - - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setType(static_cast(type)); + dirtyFlags |= 1U << FLAG_POS; } void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept @@ -263,13 +191,8 @@ namespace SHADE return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->enableGravity(enableGravity); + dirtyFlags |= 1U << FLAG_POS; + enableGravity ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept @@ -282,127 +205,92 @@ namespace SHADE return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setIsAllowedToSleep(isAllowedToSleep); + dirtyFlags |= 1U << FLAG_POS; + isAllowedToSleep ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { + static constexpr int FLAG_POS = 2; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); - linearConstraints.x = freezePositionX ? 0.0f : 1.0f; - rp3dBody->setLinearLockAxisFactor(linearConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezePositionX ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { + static constexpr int FLAG_POS = 3; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); - linearConstraints.y = freezePositionY ? 0.0f : 1.0f; - rp3dBody->setLinearLockAxisFactor(linearConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezePositionY ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { + static constexpr int FLAG_POS = 4; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto linearConstraints = rp3dBody->getLinearLockAxisFactor(); - linearConstraints.z = freezePositionZ ? 0.0f : 1.0f; - rp3dBody->setLinearLockAxisFactor(linearConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezePositionZ ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { + static constexpr int FLAG_POS = 5; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); - angularConstraints.x = freezeRotationX ? 0.0f : 1.0f; - rp3dBody->setAngularLockAxisFactor(angularConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezeRotationX ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { + static constexpr int FLAG_POS = 6; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); - angularConstraints.y = freezeRotationY ? 0.0f : 1.0f; - rp3dBody->setAngularLockAxisFactor(angularConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezeRotationY ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { + static constexpr int FLAG_POS = 7; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - auto angularConstraints = rp3dBody->getAngularLockAxisFactor(); - angularConstraints.z = freezeRotationZ ? 0.0f : 1.0f; - rp3dBody->setAngularLockAxisFactor(angularConstraints); + dirtyFlags |= 1U << FLAG_POS; + freezeRotationZ ? flags |= 1U << FLAG_POS : flags &= ~(1U << FLAG_POS); } void SHRigidBodyComponent::SetInterpolate(bool allowInterpolation) noexcept @@ -412,179 +300,127 @@ namespace SHADE void SHRigidBodyComponent::SetMass(float newMass) noexcept { + static constexpr int FLAG_POS = 9; + if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setMass(newMass); + dirtyFlags |= 1U << FLAG_POS; + mass = newMass; } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept { + static constexpr int FLAG_POS = 10; + if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set drag of a non-dynamic object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setLinearDamping(newDrag); + dirtyFlags |= 1U << FLAG_POS; + drag = newDrag; } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept { + static constexpr int FLAG_POS = 11; + if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set angular drag of a non-dynamic object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setLinearDamping(newAngularDrag); + dirtyFlags |= 1U << FLAG_POS; + angularDrag = newAngularDrag; } void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept { + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set linear velocity of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setLinearVelocity(newLinearVelocity); + auto* physicsObject = system->GetPhysicsObject(GetEID()); + physicsObject->GetRigidBody()->setLinearVelocity(newLinearVelocity); } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept { + static constexpr int FLAG_POS = 13; + if (type == Type::STATIC) { SHLOG_WARNING("Cannot set angular velocity of a static object {}", GetEID()) return; } - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->setAngularVelocity(newAngularVelocity); + auto* physicsObject = system->GetPhysicsObject(GetEID()); + physicsObject->GetRigidBody()->setAngularVelocity(newAngularVelocity); } /*-----------------------------------------------------------------------------------*/ /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept + void SHRigidBodyComponent::OnCreate() { - if (rp3dBody == nullptr) + auto* physicsSystem = SHSystemManager::GetSystem(); + if (!physicsSystem) { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) + SHLOG_ERROR("Physics System does not exist to link with Physics Components!") return; } - rp3dBody->applyWorldForceAtCenterOfMass(force); + system = physicsSystem; + } + + void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept + { + system->AddForce(GetEID(), force); } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyWorldForceAtLocalPosition(force, localPos); + system->AddForceAtLocalPos(GetEID(), force, localPos); } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyWorldForceAtWorldPosition(force, worldPos); + system->AddForceAtWorldPos(GetEID(), force, worldPos); } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyLocalForceAtCenterOfMass(relativeForce); + system->AddRelativeForce(GetEID(), relativeForce); } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyLocalForceAtLocalPosition(relativeForce, localPos); + system->AddRelativeForceAtLocalPos(GetEID(), relativeForce, localPos); } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyLocalForceAtWorldPosition(relativeForce, worldPos); + system->AddRelativeForceAtWorldPos(GetEID(), relativeForce, worldPos); } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyWorldTorque(torque); + system->AddTorque(GetEID(), torque); } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - if (rp3dBody == nullptr) - { - SHLOG_ERROR("Missing rp3dBody from Entity {}", GetEID()) - return; - } - - rp3dBody->applyLocalTorque(relativeTorque); + system->AddRelativeTorque(GetEID(), relativeTorque); } } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h similarity index 78% rename from SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h rename to SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h index ba7d2dd9..48a5d723 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h @@ -17,16 +17,6 @@ #include "Math/Vector/SHVec3.h" #include "Math/SHQuaternion.h" -//namespace SHADE -//{ -// class SHPhysicsSystem; -//} - -namespace reactphysics3d -{ - class RigidBody; -} - namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -107,29 +97,31 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetType (Type newType) noexcept; + void SetType (Type newType) noexcept; - void SetGravityEnabled (bool enableGravity) noexcept; - void SetIsAllowedToSleep(bool isAllowedToSleep) noexcept; - void SetFreezePositionX (bool freezePositionX) noexcept; - void SetFreezePositionY (bool freezePositionY) noexcept; - void SetFreezePositionZ (bool freezePositionZ) noexcept; - void SetFreezeRotationX (bool freezeRotationX) noexcept; - void SetFreezeRotationY (bool freezeRotationY) noexcept; - void SetFreezeRotationZ (bool freezeRotationZ) noexcept; - void SetInterpolate (bool allowInterpolation) noexcept; + void SetGravityEnabled (bool enableGravity) noexcept; + void SetIsAllowedToSleep (bool isAllowedToSleep) noexcept; + void SetFreezePositionX (bool freezePositionX) noexcept; + void SetFreezePositionY (bool freezePositionY) noexcept; + void SetFreezePositionZ (bool freezePositionZ) noexcept; + void SetFreezeRotationX (bool freezeRotationX) noexcept; + void SetFreezeRotationY (bool freezeRotationY) noexcept; + void SetFreezeRotationZ (bool freezeRotationZ) noexcept; + void SetInterpolate (bool allowInterpolation) noexcept; - void SetMass (float newMass) noexcept; - void SetDrag (float newDrag) noexcept; - void SetAngularDrag (float newAngularDrag) noexcept; + void SetMass (float newMass) noexcept; + void SetDrag (float newDrag) noexcept; + void SetAngularDrag (float newAngularDrag) noexcept; - void SetLinearVelocity (const SHVec3& newLinearVelocity) noexcept; - void SetAngularVelocity (const SHVec3& newAngularVelocity) noexcept; + void SetLinearVelocity (const SHVec3& newLinearVelocity) noexcept; + void SetAngularVelocity (const SHVec3& newAngularVelocity) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ + void OnCreate () override; + void AddForce (const SHVec3& force) const noexcept; void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; void AddForceAtWorldPos (const SHVec3& force, const SHVec3& worldPos) const noexcept; @@ -147,15 +139,25 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ static constexpr size_t NUM_FLAGS = 8; - static constexpr size_t NUM_DIRTY_FLAGS = 16; + static constexpr size_t NUM_DIRTY_FLAGS = 12; - Type type; - bool interpolate; + Type type; - reactphysics3d::RigidBody* rp3dBody; + bool interpolate; + uint8_t flags; // aZ aY aX lZ lY lX slp g + uint16_t dirtyFlags; // 0 0 0 0 aD d m t aZ aY aX lZ lY lX slp g - SHVec3 position; - SHQuaternion orientation; + float mass; + float drag; + float angularDrag; + + SHVec3 linearVelocity; + SHVec3 angularVelocity; + + SHPhysicsSystem* system; + + SHVec3 position; + SHQuaternion orientation; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp new file mode 100644 index 00000000..d4668963 --- /dev/null +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -0,0 +1,361 @@ +/**************************************************************************************** + * \file SHPhysicsObject.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Physics Object. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsObject.h" + +// Project Headers +#include "ECS_Base/Managers/SHSystemManager.h" +#include "ECS_Base/Managers/SHComponentManager.h" + + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsObject::SHPhysicsObject(EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept + : entityID { eid } + , factory { physicsFactory } + , world { physicsWorld } + , rp3dBody { nullptr } + { + // Implicitly create a static body. + + const auto* TRANSFORM = SHComponentManager::GetComponent(eid); + + const rp3d::Transform RP3D_TRANSFORM { TRANSFORM->GetWorldPosition(), TRANSFORM->GetWorldOrientation() }; + + rp3dBody = world->createRigidBody(RP3D_TRANSFORM); + rp3dBody->setType(rp3d::BodyType::STATIC); + } + + SHPhysicsObject::~SHPhysicsObject() noexcept + { + factory = nullptr; + world = nullptr; + rp3dBody = nullptr; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHVec3 SHPhysicsObject::GetPosition() const noexcept + { + return rp3dBody->getTransform().getPosition(); + } + + SHQuaternion SHPhysicsObject::GetOrientation() const noexcept + { + return rp3dBody->getTransform().getOrientation(); + } + + SHVec3 SHPhysicsObject::GetRotation() const noexcept + { + return SHQuaternion{ rp3dBody->getTransform().getOrientation() }.ToEuler(); + } + + rp3d::CollisionBody* SHPhysicsObject::GetCollisionBody() const noexcept + { + return rp3dBody; + } + + rp3d::RigidBody* SHPhysicsObject::GetRigidBody() const noexcept + { + return rp3dBody; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObject::SetStaticBody() const noexcept + { + if (!rp3dBody) + return; + + rp3dBody->setType(rp3d::BodyType::STATIC); + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + int SHPhysicsObject::AddCollisionShape(int index) const + { + // Get collider component + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + if (!colliderComponent) + { + SHLOGV_ERROR("Unable to add Collision Shape to Entity {} due to Missing Collider Component!", entityID) + return -1; + } + + auto& collisionShape = colliderComponent->GetCollisionShape(index); + switch (collisionShape.GetType()) + { + // TODO(Diren): Add more collider shapes + + case SHCollisionShape::Type::BOX: addBoxShape(collisionShape); break; + case SHCollisionShape::Type::SPHERE: addSphereShape(collisionShape); break; + default: break; + } + + return index; + } + + void SHPhysicsObject::RemoveCollisionShape(int index) const + { + const int NUM_COLLIDERS = static_cast(rp3dBody->getNbColliders()); + if (NUM_COLLIDERS == 0) + return; + + if (index < 0 || index >= NUM_COLLIDERS) + throw std::invalid_argument("Index out of range!"); + + auto* collider = rp3dBody->getCollider(index); + rp3dBody->removeCollider(collider); + } + + void SHPhysicsObject::RemoveAllCollisionShapes() const noexcept + { + int numColliders = static_cast(rp3dBody->getNbColliders()); + if (numColliders == 0) + return; + + while (numColliders >= 0) + { + auto* collider = rp3dBody->getCollider(numColliders); + rp3dBody->removeCollider(collider); + + --numColliders; + } + } + + void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent& component) const noexcept + { + if (component.dirtyFlags == 0) + return; + + for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) + { + if (const bool IS_DIRTY = component.dirtyFlags & (1U << i); IS_DIRTY) + { + switch (i) + { + case 0: // Gravity + { + const bool IS_ENABLED = component.flags & (1U << i); + rp3dBody->enableGravity(IS_ENABLED); + + break; + } + case 1: // Sleeping + { + const bool IS_ENABLED = component.flags & (1U << i); + rp3dBody->setIsAllowedToSleep(IS_ENABLED); + + break; + } + case 2: // Lock Position X + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto positionLock = rp3dBody->getLinearLockAxisFactor(); + positionLock.x = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(positionLock); + + break; + } + case 3: // Lock Position Y + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto positionLock = rp3dBody->getLinearLockAxisFactor(); + positionLock.y = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(positionLock); + + break; + } + case 4: // Lock Position Z + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto positionLock = rp3dBody->getLinearLockAxisFactor(); + positionLock.z = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setLinearLockAxisFactor(positionLock); + + break; + } + case 5: // Lock Rotation X + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto rotationLock = rp3dBody->getAngularLockAxisFactor(); + rotationLock.x = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(rotationLock); + + break; + } + case 6: // Lock Rotation Y + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto rotationLock = rp3dBody->getAngularLockAxisFactor(); + rotationLock.y = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(rotationLock); + + break; + } + case 7: // Lock Rotation Z + { + const bool IS_ENABLED = component.flags & (1U << i); + + auto rotationLock = rp3dBody->getAngularLockAxisFactor(); + rotationLock.z = IS_ENABLED ? 0.0f : 1.0f; + rp3dBody->setAngularLockAxisFactor(rotationLock); + + break; + } + case 8: // Type + { + rp3dBody->setType(static_cast(component.type)); + + break; + } + case 9: // Mass + { + rp3dBody->setMass(component.mass); + rp3dBody->updateLocalInertiaTensorFromColliders(); + + break; + } + case 10: // Drag + { + rp3dBody->setLinearDamping(component.drag); + + break; + } + case 11: // Angular Drag + { + rp3dBody->setAngularDamping(component.angularDrag); + + break; + } + default: break; + } + } + } + + component.dirtyFlags = 0; + } + + void SHPhysicsObject::SyncColliders(SHColliderComponent& component) const noexcept + { + int index = 0; + for (auto& collisionShape : component.collisionShapes) + { + if (!collisionShape.dirty) + continue; + + switch (collisionShape.GetType()) + { + case SHCollisionShape::Type::BOX: syncBoxShape(index, collisionShape); break; + case SHCollisionShape::Type::SPHERE: syncSphereShape(index, collisionShape); break; + default: break; + } + + // TODO(Diren): Update Material + + collisionShape.dirty = false; + ++index; + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObject::addBoxShape(SHCollisionShape& boxShape) const noexcept + { + const rp3d::Transform OFFSETS + { + boxShape.GetPositionOffset() + , boxShape.GetRotationOffset() + }; + + const auto* BOX = reinterpret_cast(boxShape.GetShape()); + rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); + + rp3dBody->addCollider(newBox, OFFSETS); + + rp3dBody->updateLocalCenterOfMassFromColliders(); + rp3dBody->updateLocalInertiaTensorFromColliders(); + } + + void SHPhysicsObject::syncBoxShape(int index, SHCollisionShape& boxShape) const noexcept + { + const auto* BOX = reinterpret_cast(boxShape.GetShape()); + + auto* rp3dCollider = rp3dBody->getCollider(index); + auto* rp3dBox = reinterpret_cast(rp3dCollider->getCollisionShape()); + + const rp3d::Transform OFFSETS + { + boxShape.GetPositionOffset() + , boxShape.GetRotationOffset() + }; + + rp3dCollider->setIsTrigger(boxShape.IsTrigger()); + rp3dCollider->setLocalToBodyTransform(OFFSETS); + + rp3dBox->setHalfExtents(BOX->GetWorldExtents()); + } + + void SHPhysicsObject::addSphereShape(SHCollisionShape& sphereShape) const noexcept + { + const rp3d::Transform OFFSETS + { + sphereShape.GetPositionOffset() + , sphereShape.GetRotationOffset() + }; + + const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); + rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); + + rp3dBody->addCollider(newSphere, OFFSETS); + + rp3dBody->updateLocalCenterOfMassFromColliders(); + rp3dBody->updateLocalInertiaTensorFromColliders(); + } + + void SHPhysicsObject::syncSphereShape(int index, SHCollisionShape& sphereShape) const noexcept + { + const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); + + auto* rp3dCollider = rp3dBody->getCollider(index); + auto* rp3dSphere = reinterpret_cast(rp3dCollider->getCollisionShape()); + + const rp3d::Transform OFFSETS + { + sphereShape.GetPositionOffset() + , sphereShape.GetRotationOffset() + }; + + rp3dCollider->setIsTrigger(sphereShape.IsTrigger()); + rp3dCollider->setLocalToBodyTransform(OFFSETS); + + rp3dSphere->setRadius(SPHERE->GetWorldRadius()); + } +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h similarity index 70% rename from SHADE_Engine/src/Physics/SHPhysicsObject.h rename to SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h index 09b70b11..f18a0738 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h @@ -14,8 +14,8 @@ // Project Headers #include "Math/Transform/SHTransformComponent.h" -#include "Components/SHRigidBodyComponent.h" -#include "Components/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" namespace SHADE { @@ -31,6 +31,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ friend class SHPhysicsSystem; + friend class SHPhysicsObjectManager; public: /*---------------------------------------------------------------------------------*/ @@ -53,26 +54,29 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] SHVec3 GetPosition () const noexcept; - [[nodiscard]] SHQuaternion GetOrientation () const noexcept; - [[nodiscard]] SHVec3 GetRotation () const noexcept; + [[nodiscard]] SHVec3 GetPosition () const noexcept; + [[nodiscard]] SHQuaternion GetOrientation () const noexcept; + [[nodiscard]] SHVec3 GetRotation () const noexcept; + + [[nodiscard]] rp3d::CollisionBody* GetCollisionBody () const noexcept; + [[nodiscard]] rp3d::RigidBody* GetRigidBody () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetPosition (const SHVec3& position) noexcept; - void SetOrientation (const SHQuaternion& orientation) noexcept; - void SetRotation (const SHVec3& rotation) noexcept; + void SetStaticBody () const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - int AddCollider (SHCollisionShape* collider); - void RemoveCollider (int index); + int AddCollisionShape (int index) const; + void RemoveCollisionShape (int index) const; + void RemoveAllCollisionShapes () const noexcept; - void SyncColliders (SHColliderComponent* c) const noexcept; + void SyncRigidBody (SHRigidBodyComponent& component) const noexcept; + void SyncColliders (SHColliderComponent& component) const noexcept; private: /*---------------------------------------------------------------------------------*/ @@ -83,7 +87,22 @@ namespace SHADE rp3d::PhysicsCommon* factory; rp3d::PhysicsWorld* world; - rp3d::CollisionBody* rp3dBody; // Can be either a collision body or a rigid body + + rp3d::RigidBody* rp3dBody; rp3d::Transform prevTransform; // Cached transform for interpolation + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + // Box Shapes + + void addBoxShape (SHCollisionShape& boxShape) const noexcept; + void syncBoxShape (int index, SHCollisionShape& boxShape) const noexcept; + + // Sphere Shapes + + void addSphereShape (SHCollisionShape& sphereShape) const noexcept; + void syncSphereShape (int index, SHCollisionShape& sphereShape) const noexcept; }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp new file mode 100644 index 00000000..38a3c658 --- /dev/null +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -0,0 +1,266 @@ +/**************************************************************************************** + * \file SHPhysicsObjectManager.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Physics Object Manager. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsObjectManager.h" + +// Project Headers +#include "Tools/SHUtilities.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsObjectManager::CommandFunctionPtr SHPhysicsObjectManager::componentFunc[2][2] + { + addRigidBody , addCollider + , removeRigidBody , removeCollider + }; + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObjectManager::SetFactory(rp3d::PhysicsCommon& physicsFactory) noexcept + { + factory = &physicsFactory; + } + + void SHPhysicsObjectManager::SetWorld(rp3d::PhysicsWorld& physicsWorld) noexcept + { + world = &physicsWorld; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsObject* SHPhysicsObjectManager::GetPhysicsObject(EntityID eid) noexcept + { + const auto it = physicsObjects.find(eid); + if (it == physicsObjects.end()) + return nullptr; + + return &it->second; + } + + const SHPhysicsObjectManager::PhysicsObjectEntityMap SHPhysicsObjectManager::GetPhysicsObjects() const noexcept + { + return physicsObjects; + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsObjectManager::AddRigidBody(EntityID eid) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::ADD + , .component = PhysicsComponents::RIGID_BODY + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::AddCollider(EntityID eid) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::ADD + , .component = PhysicsComponents::COLLIDER + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::AddCollisionShape(EntityID eid, int shapeIndex) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::ADD + , .component = PhysicsComponents::COLLISION_SHAPE + , .shapeIndex = shapeIndex + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::RemoveRigidBody(EntityID eid) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::REMOVE + , .component = PhysicsComponents::RIGID_BODY + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::RemoveCollider(EntityID eid) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::REMOVE + , .component = PhysicsComponents::COLLIDER + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::RemoveCollisionShape(EntityID eid, int shapeIndex) noexcept + { + const QueueCommand NEW_QUEUE_COMMAND + { + .eid = eid + , .command = QueueCommand::Command::REMOVE + , .component = PhysicsComponents::COLLISION_SHAPE + , .shapeIndex = shapeIndex + }; + + commandQueue.push(NEW_QUEUE_COMMAND); + } + + void SHPhysicsObjectManager::UpdateCommands() + { + if (commandQueue.empty()) + return; + + while (!commandQueue.empty()) + { + const QueueCommand COMMAND = commandQueue.front(); + commandQueue.pop(); + + // Check validity of command + if (COMMAND.command == QueueCommand::Command::INVALID || COMMAND.component == PhysicsComponents::INVALID) + continue; + + // Find the physics Object & retrieve components. Create an object if none exists. + SHPhysicsObject* physicsObject = GetPhysicsObject(COMMAND.eid); + if (!physicsObject) + physicsObject = createPhysicsObject(COMMAND.eid); + + const PhysicsComponentGroup COMPONENT_GROUP + { + .eid = COMMAND.eid + , .rigidBodyComponent = SHComponentManager::GetComponent_s(COMMAND.eid) + , .colliderComponent = SHComponentManager::GetComponent_s(COMMAND.eid) + }; + + if (COMMAND.component == PhysicsComponents::COLLISION_SHAPE) + { + if (COMMAND.command == QueueCommand::Command::ADD) + addCollisionShape(physicsObject, COMMAND.shapeIndex); + + if (COMMAND.command == QueueCommand::Command::REMOVE) + removeCollisionShape(physicsObject, COMMAND.shapeIndex); + } + else // Rigid Body or Collider + { + componentFunc[SHUtilities::ConvertEnum(COMMAND.command)][SHUtilities::ConvertEnum(COMMAND.component)](physicsObject, COMPONENT_GROUP); + } + + // If main components are missing, destroy object + if (!COMPONENT_GROUP.rigidBodyComponent && !COMPONENT_GROUP.colliderComponent) + destroyPhysicsObject(COMMAND.eid); + } + } + + void SHPhysicsObjectManager::RemoveAllObjects() + { + physicsObjects.clear(); + } + + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsObject* SHPhysicsObjectManager::createPhysicsObject(EntityID eid) noexcept + { + auto newObjIter = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }); + return &(newObjIter.first->second); + } + + void SHPhysicsObjectManager::destroyPhysicsObject(EntityID eid) noexcept + { + physicsObjects.erase(eid); + } + + void SHPhysicsObjectManager::addRigidBody(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to add body!") + + if (!componentGroup.rigidBodyComponent) + { + SHLOG_ERROR("Entity {} is missing a Rigidbody Component. Unable to update physics object!", componentGroup.eid) + return; + } + + // A static rigid body is implicitly created on creation of a physics object. + // We only need to sync rigid bodies here in the event it is non-static. + + physicsObject->SyncRigidBody(*componentGroup.rigidBodyComponent); + } + + void SHPhysicsObjectManager::addCollider(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to add collider!") + + if (!componentGroup.colliderComponent) + { + SHLOG_ERROR("Entity {} is missing a Rigidbody Component. Unable to update physics object!", componentGroup.eid) + return; + } + + physicsObject->SyncColliders(*componentGroup.colliderComponent); + } + + void SHPhysicsObjectManager::removeRigidBody(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to remove body!") + + if (componentGroup.colliderComponent) + physicsObject->SetStaticBody(); + } + + void SHPhysicsObjectManager::removeCollider(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to remove collider!") + + physicsObject->RemoveAllCollisionShapes(); + } + + void SHPhysicsObjectManager::addCollisionShape(SHPhysicsObject* physicsObject, int shapeIndex) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to add collision shape!") + + physicsObject->AddCollisionShape(shapeIndex); + } + + void SHPhysicsObjectManager::removeCollisionShape(SHPhysicsObject* physicsObject, int shapeIndex) + { + SHASSERT(physicsObject != nullptr, "Valid physics object required to remove collision shape!") + + physicsObject->RemoveCollisionShape(shapeIndex); + } + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h new file mode 100644 index 00000000..f796b723 --- /dev/null +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h @@ -0,0 +1,178 @@ +/**************************************************************************************** + * \file SHPhysicsObjectManager.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Physics Object Manager. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include +#include + +#include + +// Project Headers +#include "SHPhysicsObject.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHPhysicsObjectManager + { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + using PhysicsObjectEntityMap = std::unordered_map; + + public: + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class PhysicsComponents + { + RIGID_BODY + , COLLIDER + , COLLISION_SHAPE + + , TOTAL + , INVALID = -1 + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsObjectManager () = default; + ~SHPhysicsObjectManager () = default; + + SHPhysicsObjectManager (const SHPhysicsObjectManager&) = delete; + SHPhysicsObjectManager (SHPhysicsObjectManager&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsObjectManager& operator=(const SHPhysicsObjectManager&) = delete; + SHPhysicsObjectManager& operator=(SHPhysicsObjectManager&&) = delete; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] SHPhysicsObject* GetPhysicsObject (EntityID eid) noexcept; + [[nodiscard]] const PhysicsObjectEntityMap GetPhysicsObjects () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + void SetFactory (rp3d::PhysicsCommon& physicsFactory) noexcept; + void SetWorld (rp3d::PhysicsWorld& physicsWorld) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void AddRigidBody (EntityID eid) noexcept; + void AddCollider (EntityID eid) noexcept; + void AddCollisionShape (EntityID eid, int shapeIndex) noexcept; + + void RemoveRigidBody (EntityID eid) noexcept; + void RemoveCollider (EntityID eid) noexcept; + void RemoveCollisionShape (EntityID eid, int shapeIndex) noexcept; + + void UpdateCommands (); + void RemoveAllObjects (); + + private: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + struct QueueCommand + { + /*-------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-------------------------------------------------------------------------------*/ + + enum class Command + { + ADD + , REMOVE + + , INVALID = -1 + }; + + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + + EntityID eid = MAX_EID; + Command command = Command::INVALID; + PhysicsComponents component = PhysicsComponents::INVALID; + int shapeIndex = -1; // Only used when adding & removing collision shapes + }; + + struct PhysicsComponentGroup + { + public: + + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + + + EntityID eid = MAX_EID; + SHRigidBodyComponent* rigidBodyComponent = nullptr; + SHColliderComponent* colliderComponent = nullptr; + }; + + using CommandFunctionPtr = void(*)(SHPhysicsObject*, const PhysicsComponentGroup&); + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + static CommandFunctionPtr componentFunc[2][2]; // Used only for rigid body & collider components. Collision shapes are handled separately. + + rp3d::PhysicsCommon* factory = nullptr; + rp3d::PhysicsWorld* world = nullptr; + + PhysicsObjectEntityMap physicsObjects; + std::queue commandQueue; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsObject* createPhysicsObject (EntityID eid) noexcept; + void destroyPhysicsObject (EntityID eid) noexcept; + + static void addRigidBody (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void addCollider (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void removeRigidBody (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void removeCollider (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + + static void addCollisionShape (SHPhysicsObject* physicsObject, int shapeIndex); + static void removeCollisionShape (SHPhysicsObject* physicsObject, int shapeIndex); + + }; + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsEvents.h b/SHADE_Engine/src/Physics/SHPhysicsEvents.h new file mode 100644 index 00000000..ae48a75b --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsEvents.h @@ -0,0 +1,37 @@ +/**************************************************************************************** + * \file SHPhysicsUtils.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for some Physics Utilities + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "Interface/SHCollisionShape.h" + + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHPhysicsColliderAddedEvent + { + EntityID entityID; + SHCollisionShape::Type colliderType; + int colliderIndex; + }; + + struct SHPhysicsColliderRemovedEvent + { + EntityID entityID; + int colliderIndex; + }; + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp deleted file mode 100644 index 26e3e786..00000000 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/**************************************************************************************** - * \file SHPhysicsObject.cpp - * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Implementation for a Physics Object. - * - * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. -****************************************************************************************/ - -#include - -// Primary Header -#include "SHPhysicsObject.h" - -// Project Headers -#include "ECS_Base/Managers/SHSystemManager.h" -#include "ECS_Base/Managers/SHComponentManager.h" - - -namespace SHADE -{ - /*-----------------------------------------------------------------------------------*/ - /* Constructors & Destructor Definitions */ - /*-----------------------------------------------------------------------------------*/ - - SHPhysicsObject::SHPhysicsObject(EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept - : entityID { eid } - , factory { physicsFactory } - , world { physicsWorld } - , rp3dBody { nullptr } - {} - - SHPhysicsObject::~SHPhysicsObject() noexcept - { - factory = nullptr; - world = nullptr; - rp3dBody = nullptr; - } - - /*-----------------------------------------------------------------------------------*/ - /* Getter Function Definitions */ - /*-----------------------------------------------------------------------------------*/ - - SHVec3 SHPhysicsObject::GetPosition() const noexcept - { - SHVec3 result; - - if (rp3dBody) - result = SHVec3{ rp3dBody->getTransform().getPosition() }; - - return result; - } - - SHQuaternion SHPhysicsObject::GetOrientation() const noexcept - { - SHQuaternion result; - - if (rp3dBody) - result = SHQuaternion{ rp3dBody->getTransform().getOrientation() }; - - return result; - } - - SHVec3 SHPhysicsObject::GetRotation() const noexcept - { - SHVec3 result; - - if (rp3dBody) - result = SHQuaternion{ rp3dBody->getTransform().getOrientation() }.ToEuler(); - - return result; - } - - /*-----------------------------------------------------------------------------------*/ - /* Setter Function Definitions */ - /*-----------------------------------------------------------------------------------*/ - - void SHPhysicsObject::SetPosition(const SHVec3& position) noexcept - { - if (!rp3dBody) - { - SHLOG_ERROR("Cannot set position of a non-existent physics body for Entity {}", entityID) - return; - } - - rp3d::Transform rp3dTF; - rp3dTF.setPosition(position); - rp3dTF.setOrientation(rp3dBody->getTransform().getOrientation()); - - rp3dBody->setTransform(rp3dTF); - prevTransform = rp3dTF; - } - - void SHPhysicsObject::SetOrientation(const SHQuaternion& orientation) noexcept - { - if (!rp3dBody) - { - SHLOG_ERROR("Cannot set orientation of a non-existent physics body for Entity {}", entityID) - return; - } - - rp3d::Transform rp3dTF; - rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); - rp3dTF.setOrientation(orientation); - - rp3dBody->setTransform(rp3dTF); - prevTransform = rp3dTF; - } - - void SHPhysicsObject::SetRotation(const SHVec3& rotation) noexcept - { - if (!rp3dBody) - { - SHLOG_ERROR("Cannot set rotation of a non-existent physics body for Entity {}", entityID) - return; - } - - rp3d::Transform rp3dTF; - rp3dTF.setPosition(rp3dBody->getTransform().getPosition()); - rp3dTF.setOrientation(rotation); - - rp3dBody->setTransform(rp3dTF); - prevTransform = rp3dTF; - } - - /*-----------------------------------------------------------------------------------*/ - /* Public Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - int SHPhysicsObject::AddCollider(SHCollisionShape* collider) - { - const rp3d::Transform OFFSETS{ collider->GetPositionOffset(), collider->GetRotationOffset() }; - - switch (collider->GetType()) - { - case SHCollisionShape::Type::BOX: - { - const auto* BOX = reinterpret_cast(collider->GetShape()); - rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); - - rp3dBody->addCollider(newBox, OFFSETS); - break; - } - case SHCollisionShape::Type::SPHERE: - { - const auto* SPHERE = reinterpret_cast(collider->GetShape()); - rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); - - rp3dBody->addCollider(newSphere, OFFSETS); - break; - } - // TODO(Diren): Add more collider shapes - default: break; - } - - return static_cast(rp3dBody->getNbColliders()) - 1; - } - - void SHPhysicsObject::RemoveCollider(int index) - { - const int NUM_COLLIDERS = static_cast(rp3dBody->getNbColliders()); - if (NUM_COLLIDERS == 0) - return; - - if (index < 0 || index >= NUM_COLLIDERS) - throw std::invalid_argument("Index out of range!"); - - auto* collider = rp3dBody->getCollider(index); - rp3dBody->removeCollider(collider); - } - - void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept - { - int index = 0; - for (auto& collider : c->collisionShapes) - { - if (!collider.dirty) - continue; - - auto* rp3dCollider = rp3dBody->getCollider(index); - - // Update trigger flag - rp3dCollider->setIsTrigger(collider.IsTrigger()); - - // Update offsets - rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), collider.GetRotationOffset())); - - switch (collider.GetType()) - { - case SHCollisionShape::Type::BOX: - { - const auto* BOX = reinterpret_cast(collider.GetShape()); - - auto* rp3dBoxShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dBoxShape->setHalfExtents(BOX->GetWorldExtents()); - - break; - } - case SHCollisionShape::Type::SPHERE: - { - const auto* SPHERE = reinterpret_cast(collider.GetShape()); - - auto* rp3dSphereShape = reinterpret_cast(rp3dCollider->getCollisionShape()); - rp3dSphereShape->setRadius(SPHERE->GetWorldRadius()); - - break; - } - default: break; - } - - // TODO(Diren): Update Material - - collider.dirty = false; - ++index; - } - } - -} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp deleted file mode 100644 index 35d1b5de..00000000 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ /dev/null @@ -1,706 +0,0 @@ -/**************************************************************************************** - * \file SHPhysicsSystem.cpp - * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Implementation for the Physics System - * - * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. -****************************************************************************************/ - -#include - -// Primary Header -#include "SHPhysicsSystem.h" - -// Project Headers -#include "ECS_Base/Managers/SHComponentManager.h" -#include "ECS_Base/Managers/SHEntityManager.h" -#include "ECS_Base/Managers/SHSystemManager.h" -#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" -#include "Math/SHMathHelpers.h" -#include "Math/Transform/SHTransformComponent.h" -#include "Scene/SHSceneManager.h" -#include "Scripting/SHScriptEngine.h" -#include "Tools/SHUtilities.h" - -namespace SHADE -{ - /*-----------------------------------------------------------------------------------*/ - /* Constructors & Destructor Definitions */ - /*-----------------------------------------------------------------------------------*/ - - SHPhysicsSystem::SHPhysicsSystem() - : worldUpdated { false } - , interpolationFactor { 0.0 } - , fixedDT { 60.0 } - , world { nullptr } - {} - - SHPhysicsSystem::PhysicsPreUpdate::PhysicsPreUpdate() - : SHSystemRoutine { "Physics PreUpdate", true } - {} - - SHPhysicsSystem::PhysicsFixedUpdate::PhysicsFixedUpdate() - : SHFixedSystemRoutine { DEFAULT_FIXED_STEP, "Physics FixedUpdate", false } - {} - - SHPhysicsSystem::PhysicsPostUpdate::PhysicsPostUpdate() - : SHSystemRoutine { "Physics PostUpdate", false } - {} - - /*-----------------------------------------------------------------------------------*/ - /* Getter Function Definitions */ - /*-----------------------------------------------------------------------------------*/ - - double SHPhysicsSystem::GetFixedDT() const noexcept - { - return fixedDT; - } - - bool SHPhysicsSystem::IsSleepingEnabled() const noexcept - { - if (world) - return world->isSleepingEnabled(); - - SHLOGV_WARNING("No physics world has been initialised!") - return false; - } - - SHVec3 SHPhysicsSystem::GetWorldGravity() const noexcept - { - SHVec3 result; - - if (world) - { - result = world->getGravity(); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - - return result; - } - - uint16_t SHPhysicsSystem::GetNumberVelocityIterations() const noexcept - { - if (world) - return world->getNbIterationsVelocitySolver(); - - SHLOGV_WARNING("No physics world has been initialised!") - return 0; - } - - uint16_t SHPhysicsSystem::GetNumberPositionIterations() const noexcept - { - if (world) - return world->getNbIterationsPositionSolver(); - - SHLOGV_WARNING("No physics world has been initialised!") - return 0; - } - - const SHPhysicsSystem::EntityObjectMap& SHPhysicsSystem::GetPhysicsObjects() const noexcept - { - return map; - } - - const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetCollisionInfo() const noexcept - { - return collisionInfo; - } - - const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetTriggerInfo() const noexcept - { - return triggerInfo; - } - - /*-----------------------------------------------------------------------------------*/ - /* Setter Function Definitions */ - /*-----------------------------------------------------------------------------------*/ - - void SHPhysicsSystem::SetFixedDT(double fixedUpdateRate) noexcept - { - fixedDT = fixedUpdateRate; - } - - void SHPhysicsSystem::SetWorldGravity(const SHVec3& gravity) const noexcept - { - if (world) - { - world->setGravity(gravity); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - } - - void SHPhysicsSystem::SetNumberVelocityIterations(uint16_t numVelIterations) const noexcept - { - if (world) - { - world->setNbIterationsVelocitySolver(numVelIterations); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - } - - void SHPhysicsSystem::SetNumberPositionIterations(uint16_t numPosIterations) const noexcept - { - if (world) - { - world->setNbIterationsPositionSolver(numPosIterations); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - } - - void SHPhysicsSystem::SetSleepingEnabled(bool enableSleeping) const noexcept - { - if (world) - { - world->enableSleeping(enableSleeping); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - } - - void SHPhysicsSystem::SetWorldSettings(const WorldSettings& settings) const noexcept - { - if (world) - { - world->setGravity(settings.gravity); - world->setNbIterationsVelocitySolver(settings.numVelocitySolverIterations); - world->setNbIterationsPositionSolver(settings.numPositionSolverIterations); - world->enableSleeping(settings.sleepingEnabled); - } - else - { - SHLOGV_WARNING("No physics world has been initialised!") - } - } - - /*-----------------------------------------------------------------------------------*/ - /* Public Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - void SHPhysicsSystem::Init() - { - // Create a physics world with the default settings - rp3d::PhysicsWorld::WorldSettings settings; - settings.gravity = SHVec3{ 0.0f, -9.81f, 0.0f }; - settings.isSleepingEnabled = true; - settings.defaultVelocitySolverNbIterations = 8; - settings.defaultPositionSolverNbIterations = 3; - settings.defaultFrictionCoefficient = 0.4f; - settings.defaultBounciness = 0.0f; - - world = factory.createPhysicsWorld(settings); - world->setEventListener(this); - world->setIsDebugRenderingEnabled(true); - - // Set up solvers - world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); - - // Subscribe to component events - - const std::shared_ptr ADD_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::AddPhysicsComponent) }; - const ReceiverPtr ADD_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(ADD_COMPONENT_RECEIVER); - SHEventManager::SubscribeTo(SH_COMPONENT_ADDED_EVENT, ADD_COMPONENT_RECEIVER_PTR); - - const std::shared_ptr REMOVE_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::RemovePhysicsComponent) }; - const ReceiverPtr REMOVE_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(REMOVE_COMPONENT_RECEIVER); - SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, REMOVE_COMPONENT_RECEIVER_PTR); - - #ifdef SHEDITOR - const std::shared_ptr EDITOR_STOP_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::ResetWorld) }; - const ReceiverPtr EDITOR_STOP_RECEIVER_PTR = std::dynamic_pointer_cast(EDITOR_STOP_RECEIVER); - SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, EDITOR_STOP_RECEIVER_PTR); - #endif - } - - void SHPhysicsSystem::Exit() - { - factory.destroyPhysicsWorld(world); - } - - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollisionShape* collider) - { - auto* physicsObject = GetPhysicsObject(entityID); - - const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA - { - .entityID = entityID - , .colliderType = collider->GetType() - , .colliderIndex = physicsObject->AddCollider(collider) - }; - - SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); - } - - void SHPhysicsSystem::RemoveCollisionShape(EntityID entityID, int index) - { - auto* physicsObject = GetPhysicsObject(entityID); - physicsObject->RemoveCollider(index); - - const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA - { - .entityID = entityID - , .colliderIndex = index - }; - - SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); - } - - void SHPhysicsSystem::PhysicsPreUpdate::Execute(double) noexcept - { - auto* system = reinterpret_cast(GetSystem()); - - // Sync transforms - for (auto& [entityID, physicsObject] : system->map) - { - // Ensure a valid physics Object - if (physicsObject.rp3dBody == nullptr) - continue; - - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); - auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); - - if (transformComponent && transformComponent->HasChanged()) - { - const auto WORLD_POS = transformComponent->GetWorldPosition(); - const auto WORLD_ROT = transformComponent->GetWorldOrientation(); - const auto WORLD_SCL = transformComponent->GetWorldScale(); - - physicsObject.SetPosition(WORLD_POS); - physicsObject.SetOrientation(WORLD_ROT); - - // Sync physics component transforms - - if (rigidBodyComponent) - { - rigidBodyComponent->position = WORLD_POS; - rigidBodyComponent->orientation = WORLD_ROT; - } - - if (colliderComponent) - { - colliderComponent->position = WORLD_POS; - colliderComponent->orientation = WORLD_ROT; - colliderComponent->scale = WORLD_SCL; - - colliderComponent->RecomputeCollisionShapes(); - } - } - - // Sync rigid bodies - - if (rigidBodyComponent) - { - // Sync active states - const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; - SyncActiveStates(physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - } - - // Sync colliders - - if (colliderComponent) - { - const bool COMPONENT_ACTIVE = colliderComponent->isActive; - SyncActiveStates(physicsObject, colliderComponent->isActive); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject.SyncColliders(colliderComponent); - } - } - } - - void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept - { - auto* physicsSystem = reinterpret_cast(GetSystem()); - auto* scriptingSystem = SHSystemManager::GetSystem(); - if (scriptingSystem == nullptr) - { - SHLOGV_ERROR("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); - } - - fixedTimeStep = 1.0 / physicsSystem->fixedDT; - accumulatedTime += dt; - - int count = 0; - while (accumulatedTime > fixedTimeStep) - { - if (scriptingSystem != nullptr) - scriptingSystem->ExecuteFixedUpdates(); - - physicsSystem->world->update(static_cast(fixedTimeStep)); - - accumulatedTime -= fixedTimeStep; - ++count; - } - - stats.numSteps = count; - physicsSystem->worldUpdated = count > 0; - - physicsSystem->interpolationFactor = accumulatedTime / fixedTimeStep; - } - - void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept - { - auto* physicsSystem = reinterpret_cast(GetSystem()); - auto* scriptingSystem = SHSystemManager::GetSystem(); - if (scriptingSystem == nullptr) - { - SHLOGV_ERROR("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); - } - - // Interpolate transforms for rendering - if (physicsSystem->worldUpdated) - { - physicsSystem->SyncTransforms(); - - // Collision & Trigger messages - if (scriptingSystem != nullptr) - scriptingSystem->ExecuteCollisionFunctions(); - - physicsSystem->ClearInvalidCollisions(); - } - } - - void SHPhysicsSystem::onContact(const CallbackData& callbackData) - { - for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) - { - const auto CONTACT_PAIR = callbackData.getContactPair(i); - const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(CONTACT_PAIR); - - UpdateEventContainers(NEW_EVENT, collisionInfo); - } - } - - void SHPhysicsSystem::onTrigger(const rp3d::OverlapCallback::CallbackData& callbackData) - { - for (uint32_t i = 0; i < callbackData.getNbOverlappingPairs(); ++i) - { - const auto& OVERLAP_PAIR = callbackData.getOverlappingPair(i); - const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(OVERLAP_PAIR); - - UpdateEventContainers(NEW_EVENT, triggerInfo); - } - } - - /*-----------------------------------------------------------------------------------*/ - /* Private Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - SHPhysicsObject* SHPhysicsSystem::EnsurePhysicsObject(EntityID entityID) noexcept - { - const auto it = map.find(entityID); - if (it == map.end()) - { - auto* newPhysicsObject = &map.emplace(entityID, SHPhysicsObject{entityID, &factory, world}).first->second; - return newPhysicsObject; - } - - return &(it->second); - } - - SHPhysicsObject* SHPhysicsSystem::GetPhysicsObject(EntityID entityID) noexcept - { - const auto it = map.find(entityID); - if (it == map.end()) - { - //SHLOG_ERROR("Entity {} is not in the physics system!", entityID) - return nullptr; - } - - return &(it->second); - } - - void SHPhysicsSystem::DestroyPhysicsObject(EntityID entityID) noexcept - { - map.erase(entityID); - } - - void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject& physicsObject, bool componentActive) noexcept - { - const bool RP3D_ACTIVE = physicsObject.rp3dBody->isActive(); - if (RP3D_ACTIVE != componentActive) - physicsObject.rp3dBody->setIsActive(componentActive); - } - - void SHPhysicsSystem::SyncTransforms() noexcept - { - for (auto& [entityID, physicsObject] : map) - { - rp3d::Vector3 rp3dPos; - rp3d::Quaternion rp3dRot; - - const rp3d::Transform CURRENT_TF = physicsObject.rp3dBody->getTransform(); - - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); - auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); - - // Check if transform should be interpolated - - if (rigidBodyComponent != nullptr) - { - if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) - continue; - - if (rigidBodyComponent->IsInterpolating()) - { - const rp3d::Transform PREV_TF = physicsObject.prevTransform; - const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); - - - rp3dPos = INTERPOLATED_TF.getPosition(); - rp3dRot = INTERPOLATED_TF.getOrientation(); - } - else - { - rp3dPos = CURRENT_TF.getPosition(); - rp3dRot = CURRENT_TF.getOrientation(); - } - - rigidBodyComponent->position = CURRENT_TF.getPosition(); - rigidBodyComponent->orientation = CURRENT_TF.getOrientation(); - - if (colliderComponent != nullptr) - { - - colliderComponent->position = CURRENT_TF.getPosition(); - colliderComponent->orientation = CURRENT_TF.getOrientation(); - } - } - else - { - rp3dPos = CURRENT_TF.getPosition(); - rp3dRot = CURRENT_TF.getOrientation(); - } - - // Convert RP3D Transform to SHADE - auto* transformComponent = SHComponentManager::GetComponent_s(entityID); - - if (transformComponent != nullptr) - { - transformComponent->SetWorldPosition(rp3dPos); - transformComponent->SetWorldOrientation(rp3dRot); - } - - // Cache transforms - physicsObject.prevTransform = CURRENT_TF; - } - } - - void SHPhysicsSystem::UpdateEventContainers(const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept - { - const auto IT = std::ranges::find_if(container.begin(), container.end(), [&](const SHCollisionEvent& e) - { - const bool ENTITY_MATCH = (e.ids[0] == collisionEvent.ids[0] && e.ids[1] == collisionEvent.ids[1]) - || (e.ids[0] == collisionEvent.ids[1] && e.ids[1] == collisionEvent.ids[0]); - const bool COLLIDERS_MATCH = (e.ids[2] == collisionEvent.ids[2] && e.ids[3] == collisionEvent.ids[3]) - || (e.ids[2] == collisionEvent.ids[3] && e.ids[3] == collisionEvent.ids[2]); - return ENTITY_MATCH && COLLIDERS_MATCH; - }); - - if (IT == container.end()) - container.emplace_back(collisionEvent); - else - IT->collisionState = collisionEvent.collisionState; - } - - void SHPhysicsSystem::ClearInvalidCollisions() noexcept - { - static const auto CLEAR = [](CollisionEvents& container) - { - for (auto eventIter = container.begin(); eventIter != container.end();) - { - const bool CLEAR_EVENT = eventIter->GetCollisionState() == SHCollisionEvent::State::EXIT - || eventIter->GetCollisionState() == SHCollisionEvent::State::INVALID; - - if (CLEAR_EVENT) - eventIter = container.erase(eventIter); - else - ++eventIter; - } - }; - - CLEAR(collisionInfo); - CLEAR(triggerInfo); - } - - SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) - { - const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); - - static const auto RIGID_BODY_ID = ComponentFamily::GetID(); - static const auto COLLIDER_ID = ComponentFamily::GetID(); - - const auto ADDED_ID = EVENT_DATA->data->addedComponentType; - const bool IS_PHYSICS_COMPONENT = ADDED_ID == RIGID_BODY_ID || ADDED_ID == COLLIDER_ID; - if (IS_PHYSICS_COMPONENT) - { - const EntityID ENTITY_ID = EVENT_DATA->data->eid; - auto* physicsObject = EnsurePhysicsObject(ENTITY_ID); - - auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if (transformComponent == nullptr) - { - SHLOG_ERROR("Entity {} cannot add a Physics Component without a Transform! Component not created!", ENTITY_ID) - return EVENT_DATA->handle; - } - - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - - if (ADDED_ID == RIGID_BODY_ID) - { - if (colliderComponent != nullptr) - { - world->destroyCollisionBody(physicsObject->rp3dBody); - physicsObject->rp3dBody = nullptr; - } - - rigidBodyComponent->position = transformComponent->GetWorldPosition(); - rigidBodyComponent->orientation = transformComponent->GetWorldOrientation(); - - physicsObject->rp3dBody = world->createRigidBody - ( - rp3d::Transform{ rigidBodyComponent->position, rigidBodyComponent->orientation } - ); - - rigidBodyComponent->rp3dBody = reinterpret_cast(physicsObject->rp3dBody); - - // Add collision shapes back into the body - if (colliderComponent != nullptr) - { - for (auto& collider : colliderComponent->collisionShapes) - physicsObject->AddCollider(&collider); - } - } - - if (ADDED_ID == COLLIDER_ID) - { - SHASSERT(colliderComponent != nullptr, "Collider Component was not added to Entity " + std::to_string(ENTITY_ID) + "!"); - - colliderComponent->position = transformComponent->GetWorldPosition(); - colliderComponent->orientation = transformComponent->GetWorldOrientation(); - colliderComponent->scale = transformComponent->GetWorldScale(); - - if (physicsObject->rp3dBody == nullptr) - { - physicsObject->rp3dBody = world->createCollisionBody - ( - rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } - ); - } - - // Add Collision Shapes - for (auto& collider : colliderComponent->collisionShapes) - physicsObject->AddCollider(&collider); - } - } - - return EVENT_DATA->handle; - } - - SHEventHandle SHPhysicsSystem::RemovePhysicsComponent(SHEventPtr removeComponentEvent) - { - const auto& EVENT_DATA = reinterpret_cast*>(removeComponentEvent.get()); - - static const auto RIGID_BODY_ID = ComponentFamily::GetID(); - static const auto COLLIDER_ID = ComponentFamily::GetID(); - - const auto REMOVED_ID = EVENT_DATA->data->removedComponentType; - const bool IS_PHYSICS_COMPONENT = REMOVED_ID == RIGID_BODY_ID || REMOVED_ID == COLLIDER_ID; - if (IS_PHYSICS_COMPONENT) - { - const EntityID ENTITY_ID = EVENT_DATA->data->eid; - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - - // Wake up all physics objects - for (auto& [entityID, object] : map) - { - if (SHComponentManager::HasComponent(entityID)) - reinterpret_cast(object.rp3dBody)->setIsSleeping(false); - } - - if (REMOVED_ID == RIGID_BODY_ID && physicsObject != nullptr) - { - world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); - physicsObject->rp3dBody = nullptr; - - if (colliderComponent != nullptr) - { - // Preserve colliders as a collision body - physicsObject->rp3dBody = world->createCollisionBody - ( - rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } - ); - - for (auto& collider : colliderComponent->collisionShapes) - physicsObject->AddCollider(&collider); - } - } - - if (REMOVED_ID == COLLIDER_ID && physicsObject != nullptr) - { - // Remove all colliders - const int NUM_COLLIDERS = static_cast(physicsObject->rp3dBody->getNbColliders()); - - for (int i = NUM_COLLIDERS - 1; i >= 0; --i) - { - auto* collider = physicsObject->rp3dBody->getCollider(i); - physicsObject->rp3dBody->removeCollider(collider); - } - - // Check for a rigidbody component - if (rigidBodyComponent == nullptr) - physicsObject->rp3dBody = nullptr; - } - - if (physicsObject != nullptr && physicsObject->rp3dBody == nullptr) - DestroyPhysicsObject(ENTITY_ID); - } - - return EVENT_DATA->handle; - } - - SHEventHandle SHPhysicsSystem::ResetWorld(SHEventPtr editorStopEvent) - { - // TODO(Diren): Rebuild world based on how scene reloading is done - - for (auto& [entityID, physicsObject] : map) - { - if (SHComponentManager::HasComponent(entityID)) - { - auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - rp3dRigidBody->setLinearVelocity(SHVec3::Zero); - rp3dRigidBody->setAngularVelocity(SHVec3::Zero); - } - } - - return editorStopEvent->handle; - } - -} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp deleted file mode 100644 index 957fb3aa..00000000 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************************** - * \file SHPhysicsSystem.hpp - * \author Diren D Bharwani, diren.dbharwani, 390002520 - * \brief Implementation for templated functions the Physics System - * - * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. -****************************************************************************************/ - -#pragma once - -#include - -// Primary Header -#include "SHPhysicsSystem.h" - -namespace SHADE -{ - /*-----------------------------------------------------------------------------------*/ - /* Private Function Member Definitions */ - /*-----------------------------------------------------------------------------------*/ - - template - SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const RP3DCollisionPair& cp) noexcept - { - static const auto MATCH_COLLIDER = [] - ( - const SHPhysicsObject& physicsObject - , const rp3d::Entity colliderID - )->uint32_t - { - for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) - { - const auto* collider = physicsObject.rp3dBody->getCollider(i); - if (collider->getEntity() == colliderID) - return i; - } - - return std::numeric_limits::max(); - }; - - SHCollisionEvent cInfo; - - // Update collision state - cInfo.collisionState = static_cast(cp.getEventType()); - - // Match body and collider for collision event - const rp3d::Entity body1 = cp.getBody1()->getEntity(); - const rp3d::Entity body2 = cp.getBody2()->getEntity(); - const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); - const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); - - // Find and match both ids - bool matched[2] = { false, false }; - - - for (auto& [entityID, physicsObject] : map) - { - // Match body 1 - if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) - { - cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); - - matched[SHCollisionEvent::ENTITY_A] = true; - } - - // Match body 2 - if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) - { - cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); - - matched[SHCollisionEvent::ENTITY_B] = true; - } - - if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) - return cInfo; - } - - return cInfo; - } -} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp b/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp new file mode 100644 index 00000000..1326ea3e --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp @@ -0,0 +1,66 @@ +/**************************************************************************************** + * \file SHPhysicsWorld.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Physics World. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsWorld.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsWorldState::SHPhysicsWorldState() noexcept + : world { nullptr } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Members Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsWorldState::CreateWorld(rp3d::PhysicsCommon& factory) + { + rp3d::PhysicsWorld::WorldSettings rp3dWorldSettings; + rp3dWorldSettings.gravity = settings.gravity; + rp3dWorldSettings.defaultVelocitySolverNbIterations = settings.numVelocitySolverIterations; + rp3dWorldSettings.defaultPositionSolverNbIterations = settings.numPositionSolverIterations; + rp3dWorldSettings.isSleepingEnabled = settings.sleepingEnabled; + + world = factory.createPhysicsWorld(rp3dWorldSettings); + } + + void SHPhysicsWorldState::DestroyWorld(rp3d::PhysicsCommon& factory) + { + if (!world) + return; + + factory.destroyPhysicsWorld(world); + world = nullptr; + } + + void SHPhysicsWorldState::UpdateSettings() const noexcept + { + if (!world) + { + SHLOGV_ERROR("Unable to update Physics World settings without creating a world!") + return; + } + + world->setGravity(settings.gravity); + world->setNbIterationsVelocitySolver(settings.numVelocitySolverIterations); + world->setNbIterationsPositionSolver(settings.numPositionSolverIterations); + world->enableSleeping(settings.sleepingEnabled); + } + + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsWorld.h b/SHADE_Engine/src/Physics/SHPhysicsWorld.h new file mode 100644 index 00000000..bf788c0f --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsWorld.h @@ -0,0 +1,74 @@ +/**************************************************************************************** + * \file SHPhysicsWorld.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Physics World. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Project Headers +#include "Math/SHMath.h" +#include "SH_API.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SH_API SHPhysicsWorldState + { + public: + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + struct WorldSettings + { + public: + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + + SHVec3 gravity = SHVec3{ 0.0f, -9.81f, 0.0f }; + uint16_t numVelocitySolverIterations = 8; + uint16_t numPositionSolverIterations = 3; + bool sleepingEnabled = true; + }; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + rp3d::PhysicsWorld* world; + WorldSettings settings; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsWorldState() noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Function Members */ + /*---------------------------------------------------------------------------------*/ + + void CreateWorld (rp3d::PhysicsCommon& factory); + void DestroyWorld (rp3d::PhysicsCommon& factory); + + /** + * @brief Applies the current settings to the physics world. The world must be created + * before this is called. + */ + void UpdateSettings () const noexcept; + }; + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp similarity index 100% rename from SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.cpp rename to SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp diff --git a/SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.h similarity index 100% rename from SHADE_Engine/src/Physics/SHPhysicsDebugDrawSystem.h rename to SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.h diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp new file mode 100644 index 00000000..ad137ed4 --- /dev/null +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -0,0 +1,307 @@ +/**************************************************************************************** + * \file SHPhysicsSystem.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for the Physics System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsSystem.h" + +// Project Headers +#include "ECS_Base/Managers/SHComponentManager.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.h" +#include "Math/Transform/SHTransformComponent.h" +#include "Physics/SHPhysicsEvents.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsSystem::SHPhysicsSystem() + : worldUpdated { false } + , interpolationFactor { 0.0 } + , fixedDT { 60.0 } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + double SHPhysicsSystem::GetFixedDT() const noexcept + { + return fixedDT; + } + + const SHPhysicsWorldState::WorldSettings& SHPhysicsSystem::GetWorldSettings() const noexcept + { + return worldState.settings; + } + + const std::vector& SHPhysicsSystem::GetAllCollisionInfo() const noexcept + { + return collisionListener.GetCollisionInfoContainer(); + } + + const std::vector& SHPhysicsSystem::GetAllTriggerInfo() const noexcept + { + return collisionListener.GetTriggerInfoContainer(); + } + + const SHPhysicsObject* const SHPhysicsSystem::GetPhysicsObject(EntityID eid) noexcept + { + return objectManager.GetPhysicsObject(eid); + } + + + const SHPhysicsObjectManager::PhysicsObjectEntityMap& SHPhysicsSystem::GetPhysicsObjects() const noexcept + { + return objectManager.physicsObjects; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::SetFixedDT(double fixedUpdateRate) noexcept + { + fixedDT = fixedUpdateRate; + } + + void SHPhysicsSystem::SetWorldSettings(const SHPhysicsWorldState::WorldSettings& settings) noexcept + { + worldState.settings = settings; + worldState.UpdateSettings(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::Init() + { + // Subscribe to component events + const std::shared_ptr ADD_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::addPhysicsComponent) }; + const ReceiverPtr ADD_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(ADD_COMPONENT_RECEIVER); + SHEventManager::SubscribeTo(SH_COMPONENT_ADDED_EVENT, ADD_COMPONENT_RECEIVER_PTR); + + const std::shared_ptr REMOVE_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::removePhysicsComponent) }; + const ReceiverPtr REMOVE_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(REMOVE_COMPONENT_RECEIVER); + SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, REMOVE_COMPONENT_RECEIVER_PTR); + + #ifdef SHEDITOR + + // Subscribe to Editor State Change Events + const std::shared_ptr ON_PLAY_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::onPlay) }; + const ReceiverPtr ON_PLAY_RECEIVER_PTR = std::dynamic_pointer_cast(ON_PLAY_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_PLAY_EVENT, ON_PLAY_RECEIVER_PTR); + + const std::shared_ptr ON_STOP_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::onStop) }; + const ReceiverPtr ON_STOP_RECEIVER_PTR = std::dynamic_pointer_cast(ON_STOP_RECEIVER); + SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, ON_STOP_RECEIVER_PTR); + + #endif + // Link Physics Object Manager with System + objectManager.SetFactory(factory); + + // Link Collision Listener with System + collisionListener.BindToSystem(this); + } + + void SHPhysicsSystem::Exit() + { + worldState.DestroyWorld(factory); + } + + void SHPhysicsSystem::AddCollisionShape(EntityID eid, int shapeIndex) + { + objectManager.AddCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + { + .entityID = eid + , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); + } + + void SHPhysicsSystem::RemoveCollisionShape(EntityID eid, int shapeIndex) + { + objectManager.RemoveCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + { + .entityID = eid + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); + } + + void SHPhysicsSystem::AddForce(EntityID eid, const SHVec3& force) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + + } + + void SHPhysicsSystem::AddForceAtLocalPos(EntityID eid, const SHVec3& force, const SHVec3& localPos) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + void SHPhysicsSystem::AddForceAtWorldPos(EntityID eid, const SHVec3& force, const SHVec3& worldPos) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + void SHPhysicsSystem::AddRelativeForce(EntityID eid, const SHVec3& relativeForce) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + void SHPhysicsSystem::AddRelativeForceAtLocalPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& localPos) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + + void SHPhysicsSystem::AddRelativeForceAtWorldPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& worldPos) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + void SHPhysicsSystem::AddTorque(EntityID eid, const SHVec3& torque) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + void SHPhysicsSystem::AddRelativeTorque(EntityID eid, const SHVec3& relativeTorque) noexcept + { + auto* physicsObject = objectManager.GetPhysicsObject(eid); + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHEventHandle SHPhysicsSystem::addPhysicsComponent(SHEventPtr addComponentEvent) noexcept + { + const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); + + static const auto RIGID_BODY_ID = ComponentFamily::GetID(); + static const auto COLLIDER_ID = ComponentFamily::GetID(); + + const auto ADDED_ID = EVENT_DATA->data->addedComponentType; + const bool IS_PHYSICS_COMPONENT = ADDED_ID == RIGID_BODY_ID || ADDED_ID == COLLIDER_ID; + if (IS_PHYSICS_COMPONENT) + { + const EntityID EID = EVENT_DATA->data->eid; + + // We only add tell the physics object manager to add a component if the scene is played + + #ifdef _PUBLISH + + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); + + #elif SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor) + { + if (editor->editorState != SHEditor::State::STOP) + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); + } + + #endif + } + + return EVENT_DATA->handle; + } + + SHEventHandle SHPhysicsSystem::removePhysicsComponent(SHEventPtr removeComponentEvent) noexcept + { + const auto& EVENT_DATA = reinterpret_cast*>(removeComponentEvent.get()); + + static const auto RIGID_BODY_ID = ComponentFamily::GetID(); + static const auto COLLIDER_ID = ComponentFamily::GetID(); + + const auto REMOVED_ID = EVENT_DATA->data->removedComponentType; + const bool IS_PHYSICS_COMPONENT = REMOVED_ID == RIGID_BODY_ID || REMOVED_ID == COLLIDER_ID; + if (IS_PHYSICS_COMPONENT) + { + const EntityID EID = EVENT_DATA->data->eid; + + // We only add tell the physics object manager to remove a component if the scene is played + + #ifdef _PUBLISH + + REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); + + #elif SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor) + { + if (editor->editorState != SHEditor::State::STOP) + REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); + } + + #endif + + } + + return EVENT_DATA->handle; + } + + SHEventHandle SHPhysicsSystem::onPlay(SHEventPtr onPlayEvent) + { + // Create physics world + worldState.CreateWorld(factory); + + // Link Collision Listener + collisionListener.BindToWorld(worldState.world); + + // Link with object manager & create all physics objects + objectManager.SetWorld(*worldState.world); + + const auto& RIGIDBODY_DENSE = SHComponentManager::GetDense(); + const auto& COLLIDER_DENSE = SHComponentManager::GetDense(); + + for (auto& rigidBodyComponent : RIGIDBODY_DENSE) + objectManager.AddRigidBody(rigidBodyComponent.GetEID()); + + for (auto& colliderComponent : COLLIDER_DENSE) + objectManager.AddCollider(colliderComponent.GetEID()); + + return onPlayEvent->handle; + } + + SHEventHandle SHPhysicsSystem::onStop(SHEventPtr onStopEvent) + { + // Remove all physics objects + objectManager.RemoveAllObjects(); + + // Clear all collision info + // Collision listener is automatically unbound when world is destroyed + collisionListener.ClearContainers(); + + // Destroy the world + worldState.DestroyWorld(factory); + + + return onStopEvent->handle; + } + + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h similarity index 57% rename from SHADE_Engine/src/Physics/SHPhysicsSystem.h rename to SHADE_Engine/src/Physics/System/SHPhysicsSystem.h index 3bacb061..4254efc7 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h @@ -13,28 +13,29 @@ #include #include +// External Dependencies #include // Project Headers -#include "Components/SHRigidBodyComponent.h" -#include "Components/SHColliderComponent.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" + #include "Math/Transform/SHTransformComponent.h" -#include "Scene/SHSceneGraph.h" -#include "SHPhysicsObject.h" -#include "SHPhysicsUtils.h" + +#include "Physics/Collision/SHCollisionListener.h" +#include "Physics/Interface/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" +#include "Physics/PhysicsObject//SHPhysicsObjectManager.h" +#include "Physics/SHPhysicsWorld.h" namespace SHADE { - /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ class SH_API SHPhysicsSystem final : public SHSystem - , public rp3d::EventListener { private: /*---------------------------------------------------------------------------------*/ @@ -44,21 +45,6 @@ namespace SHADE friend class SHPhysicsDebugDrawSystem; public: - /*---------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*---------------------------------------------------------------------------------*/ - - using CollisionEvents = std::vector; - using EntityObjectMap = std::unordered_map; - - struct WorldSettings - { - SHVec3 gravity; - uint16_t numVelocitySolverIterations; - uint16_t numPositionSolverIterations; - bool sleepingEnabled; - }; - /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -69,29 +55,20 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] const SHPhysicsWorldState::WorldSettings& GetWorldSettings () const noexcept; - [[nodiscard]] bool IsSleepingEnabled () const noexcept; - - [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; - [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; - [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; - - [[nodiscard]] const EntityObjectMap& GetPhysicsObjects () const noexcept; - [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; - [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; + [[nodiscard]] const std::vector& GetAllCollisionInfo () const noexcept; + [[nodiscard]] const std::vector& GetAllTriggerInfo () const noexcept; + [[nodiscard]] const SHPhysicsObject* const GetPhysicsObject (EntityID eid) noexcept; + [[nodiscard]] const SHPhysicsObjectManager::PhysicsObjectEntityMap& GetPhysicsObjects () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetFixedDT (double fixedUpdateRate) noexcept; - void SetWorldGravity (const SHVec3& gravity) const noexcept; - void SetNumberVelocityIterations (uint16_t numVelIterations) const noexcept; - void SetNumberPositionIterations (uint16_t numPosIterations) const noexcept; - void SetSleepingEnabled (bool enableSleeping) const noexcept; - - void SetWorldSettings (const WorldSettings& settings) const noexcept; + void SetFixedDT (double fixedUpdateRate) noexcept; + void SetWorldSettings (const SHPhysicsWorldState::WorldSettings& settings) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -100,11 +77,24 @@ namespace SHADE void Init () override; void Exit () override; - void AddCollisionShape (EntityID entityID, SHCollisionShape* collider); - void RemoveCollisionShape (EntityID entityID, int index); + // Specific Handling for Collision Shapes as they are not under the Component System - void onContact (const rp3d::CollisionCallback::CallbackData& callbackData) override; - void onTrigger (const rp3d::OverlapCallback::CallbackData& callbackData) override; + void AddCollisionShape (EntityID eid, int shapeIndex); + void RemoveCollisionShape (EntityID eid, int shapeIndex); + + // Forces are applied from components here. These functions should only be invoked during play (through scripts) + // Thus there is no need to check for an editor. + + void AddForce (EntityID eid, const SHVec3& force) noexcept; + void AddForceAtLocalPos (EntityID eid, const SHVec3& force, const SHVec3& localPos) noexcept; + void AddForceAtWorldPos (EntityID eid, const SHVec3& force, const SHVec3& worldPos) noexcept; + + void AddRelativeForce (EntityID eid, const SHVec3& relativeForce) noexcept; + void AddRelativeForceAtLocalPos (EntityID eid, const SHVec3& relativeForce, const SHVec3& localPos) noexcept; + void AddRelativeForceAtWorldPos (EntityID eid, const SHVec3& relativeForce, const SHVec3& worldPos) noexcept; + + void AddTorque (EntityID eid, const SHVec3& torque) noexcept; + void AddRelativeTorque (EntityID eid, const SHVec3& relativeTorque) noexcept; /*---------------------------------------------------------------------------------*/ /* System Routines */ @@ -124,6 +114,21 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ void Execute(double dt) noexcept override; + + private: + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + static void syncOnPlay(EntityID eid, SHPhysicsObject& physicsObject) noexcept; + + static void preUpdateSyncTransform + ( + SHPhysicsObject& physicsObject + , SHTransformComponent& transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + ) noexcept; }; class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine @@ -156,6 +161,20 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ void Execute(double dt) noexcept override; + + private: + /*-------------------------------------------------------------------------------*/ + /* Function Members */ + /*-------------------------------------------------------------------------------*/ + + static void postUpdateSyncTransforms + ( + SHPhysicsObject& physicsObject + , SHTransformComponent& transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + , double interpolationFactor + ) noexcept; }; private: @@ -163,41 +182,31 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - bool worldUpdated; + // System data - double interpolationFactor; - double fixedDT; + bool worldUpdated; + double interpolationFactor; + double fixedDT; - rp3d::PhysicsWorld* world; - rp3d::PhysicsCommon factory; + // rp3d - EntityObjectMap map; - CollisionEvents collisionInfo; - CollisionEvents triggerInfo; + rp3d::PhysicsCommon factory; + + // Interface objects + + SHPhysicsWorldState worldState; + SHPhysicsObjectManager objectManager; + SHCollisionListener collisionListener; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void DestroyPhysicsObject (EntityID entityID) noexcept; + SHEventHandle addPhysicsComponent (SHEventPtr addComponentEvent) noexcept; + SHEventHandle removePhysicsComponent (SHEventPtr removeComponentEvent) noexcept; - static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; - void SyncTransforms () noexcept; + SHEventHandle onPlay (SHEventPtr onPlayEvent); + SHEventHandle onStop (SHEventPtr onStopEvent); - static void UpdateEventContainers (const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept; - void ClearInvalidCollisions () noexcept; - - SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); - SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); - SHEventHandle ResetWorld (SHEventPtr editorStopEvent); - - template - || std::is_same_v>> - SHCollisionEvent GenerateCollisionEvent (const RP3DCollisionPair& cp) noexcept; }; -} // namespace SHADE - -#include "SHPhysicsSystem.hpp" \ No newline at end of file +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp similarity index 81% rename from SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp rename to SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp index 4b292340..30d29167 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp @@ -16,35 +16,34 @@ of DigiPen Institute of Technology is prohibited. #include "SHPhysicsSystemInterface.h" // Project Includes #include "ECS_Base/Managers/SHSystemManager.h" -#include "Physics/SHPhysicsSystem.h" -#include "Physics/SHPhysicsUtils.h" +#include "Physics/System/SHPhysicsSystem.h" namespace SHADE { /*-----------------------------------------------------------------------------------*/ /* Static Usage Functions */ /*-----------------------------------------------------------------------------------*/ - const std::vector& SHPhysicsSystemInterface::GetCollisionInfo() noexcept + const std::vector& SHPhysicsSystemInterface::GetCollisionInfo() noexcept { - static std::vector emptyVec; + static std::vector emptyVec; auto phySystem = SHSystemManager::GetSystem(); if (phySystem) { - return phySystem->GetCollisionInfo(); + return phySystem->GetAllCollisionInfo(); } SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get collision events. Empty vector returned instead."); return emptyVec; } - const std::vector& SHPhysicsSystemInterface::GetTriggerInfo() noexcept + const std::vector& SHPhysicsSystemInterface::GetTriggerInfo() noexcept { - static std::vector emptyVec; + static std::vector emptyVec; auto phySystem = SHSystemManager::GetSystem(); if (phySystem) { - return phySystem->GetTriggerInfo(); + return phySystem->GetAllTriggerInfo(); } SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get trigger events. Empty vector returned instead."); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.h similarity index 91% rename from SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h rename to SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.h index da6a0433..bdd04686 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.h @@ -19,7 +19,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ - class SHCollisionEvent; + class SHCollisionInfo; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -39,8 +39,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Static Usage Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static const std::vector& GetCollisionInfo() noexcept; - [[nodiscard]] static const std::vector& GetTriggerInfo() noexcept; + [[nodiscard]] static const std::vector& GetCollisionInfo() noexcept; + [[nodiscard]] static const std::vector& GetTriggerInfo() noexcept; [[nodiscard]] static double GetFixedDT() noexcept; }; } diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp new file mode 100644 index 00000000..26c740cc --- /dev/null +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -0,0 +1,314 @@ +/**************************************************************************************** + * \file SHPhysicsSystemRoutines.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for the Physics System Routines + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsSystem.h" +// Project Headers +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.h" +#include "Scripting/SHScriptEngine.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsSystem::PhysicsPreUpdate::PhysicsPreUpdate() + : SHSystemRoutine { "Physics PreUpdate", true } + {} + + SHPhysicsSystem::PhysicsFixedUpdate::PhysicsFixedUpdate() + : SHFixedSystemRoutine { DEFAULT_FIXED_STEP, "Physics FixedUpdate", false } + {} + + SHPhysicsSystem::PhysicsPostUpdate::PhysicsPostUpdate() + : SHSystemRoutine { "Physics PostUpdate", false } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Public Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::PhysicsPreUpdate::Execute(double) noexcept + { + auto* physicsSystem = reinterpret_cast(GetSystem()); + + #ifdef SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + + // Only Sync on Play. + // Otherwise, Components are only holding data until the world is built on play. + + if (editor) + { + if (editor->editorState != SHEditor::State::STOP) + { + physicsSystem->objectManager.UpdateCommands(); + + for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) + { + // Ensure a valid physics Object + if (physicsObject.rp3dBody == nullptr) + continue; + + syncOnPlay(entityID, physicsObject); + } + } + else + { + auto& rigidBodyDense = SHComponentManager::GetDense(); + auto& colliderDense = SHComponentManager::GetDense(); + + for (auto& rigidBodyComponent : rigidBodyDense) + { + const auto* TRANSFORM = SHComponentManager::GetComponent_s(rigidBodyComponent.GetEID()); + + if (TRANSFORM && TRANSFORM->HasChanged()) + { + rigidBodyComponent.position = TRANSFORM->GetWorldPosition(); + rigidBodyComponent.orientation = TRANSFORM->GetWorldOrientation(); + } + } + + for (auto& colliderComponent : colliderDense) + { + const auto* TRANSFORM = SHComponentManager::GetComponent_s(colliderComponent.GetEID()); + + if (TRANSFORM && TRANSFORM->HasChanged()) + { + colliderComponent.position = TRANSFORM->GetWorldPosition(); + colliderComponent.orientation = TRANSFORM->GetWorldOrientation(); + colliderComponent.scale = TRANSFORM->GetWorldScale(); + + colliderComponent.RecomputeCollisionShapes(); + } + } + } + } + + #else + + // Always sync Rigid Body & Collider Components with Physics Objects + // Do not check for an editor here + + physicsSystem->objectManager.UpdateCommands(); + + for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) + { + // Ensure a valid physics Object + if (physicsObject.rp3dBody == nullptr) + continue; + + syncOnPlay(entityID, physicsObject); + } + + #endif + } + + void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept + { + auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) + { + SHLOGV_ERROR("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + } + + fixedTimeStep = 1.0 / physicsSystem->fixedDT; + accumulatedTime += dt; + + int count = 0; + while (accumulatedTime > fixedTimeStep) + { + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteFixedUpdates(); + + physicsSystem->worldState.world->update(static_cast(fixedTimeStep)); + + accumulatedTime -= fixedTimeStep; + ++count; + } + + stats.numSteps = count; + physicsSystem->worldUpdated = count > 0; + + physicsSystem->interpolationFactor = accumulatedTime / fixedTimeStep; + } + + void SHPhysicsSystem::PhysicsPostUpdate::Execute(double) noexcept + { + auto* physicsSystem = reinterpret_cast(GetSystem()); + auto* scriptingSystem = SHSystemManager::GetSystem(); + + if (scriptingSystem == nullptr) + { + SHLOGV_ERROR("Unable to invoke collision and trigger script events due to missing SHScriptEngine!"); + } + + // Interpolate transforms for rendering + if (physicsSystem->worldUpdated) + { + for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) + { + auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + + if (transformComponent) + { + postUpdateSyncTransforms + ( + physicsObject + , *transformComponent + , rigidBodyComponent + , colliderComponent + , physicsSystem->interpolationFactor + ); + } + } + + // Collision & Trigger messages + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteCollisionFunctions(); + + // Since this function never runs when editor in not in play, execute the function anyway + } + } + + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsSystem::PhysicsPreUpdate::syncOnPlay(EntityID eid, SHPhysicsObject& physicsObject) noexcept + { + auto* transformComponent = SHComponentManager::GetComponent_s(eid); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(eid); + auto* colliderComponent = SHComponentManager::GetComponent_s(eid); + + // Sync transforms & physics components transforms + if (transformComponent && transformComponent->HasChanged()) + { + preUpdateSyncTransform + ( + physicsObject + , *transformComponent + , rigidBodyComponent + , colliderComponent + ); + } + + // Sync Rigid Bodies + if (rigidBodyComponent) + physicsObject.SyncRigidBody(*rigidBodyComponent); + + // Sync Colliders + if (colliderComponent) + physicsObject.SyncColliders(*colliderComponent); + } + + void SHPhysicsSystem::PhysicsPreUpdate::preUpdateSyncTransform + ( + SHPhysicsObject& physicsObject + , SHTransformComponent& transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + ) noexcept + { + const SHVec3& WORLD_POS = transformComponent.GetWorldPosition(); + const SHQuaternion& WORLD_ROT = transformComponent.GetWorldOrientation(); + const SHVec3& WORLD_SCL = transformComponent.GetWorldScale(); + + const rp3d::Transform RP3D_TRANSFORM { WORLD_POS, WORLD_ROT }; + physicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); + + if (rigidBodyComponent) + { + rigidBodyComponent->position = WORLD_POS; + rigidBodyComponent->orientation = WORLD_ROT; + } + + if (colliderComponent) + { + colliderComponent->position = WORLD_POS; + colliderComponent->orientation = WORLD_ROT; + colliderComponent->scale = WORLD_SCL; + + colliderComponent->RecomputeCollisionShapes(); + } + } + + void SHPhysicsSystem::PhysicsPostUpdate::postUpdateSyncTransforms + ( + SHPhysicsObject& physicsObject + , SHTransformComponent& transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + , double interpolationFactor + ) noexcept + { + rp3d::Vector3 rp3dPos; + rp3d::Quaternion rp3dRot; + + const rp3d::Transform CURRENT_TF = physicsObject.rp3dBody->getTransform(); + + // Check if transform should be interpolated + + if (rigidBodyComponent) + { + // Skip static bodies + if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) + return; + + if (rigidBodyComponent->IsInterpolating()) + { + // Interpolate transforms between current and predicted next transform + + const rp3d::Transform PREV_TF = physicsObject.prevTransform; + const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); + + rp3dPos = INTERPOLATED_TF.getPosition(); + rp3dRot = INTERPOLATED_TF.getOrientation(); + } + else + { + rp3dPos = CURRENT_TF.getPosition(); + rp3dRot = CURRENT_TF.getOrientation(); + } + + rigidBodyComponent->position = CURRENT_TF.getPosition(); + rigidBodyComponent->orientation = CURRENT_TF.getOrientation(); + + if (colliderComponent) + { + // Sync with colliders + + colliderComponent->position = CURRENT_TF.getPosition(); + colliderComponent->orientation = CURRENT_TF.getOrientation(); + } + } + else + { + rp3dPos = CURRENT_TF.getPosition(); + rp3dRot = CURRENT_TF.getOrientation(); + } + + // Convert RP3D Transform to SHADE + transformComponent.SetWorldPosition(rp3dPos); + transformComponent.SetWorldOrientation(rp3dRot); + + // Cache transforms + physicsObject.prevTransform = CURRENT_TF; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 4f3fbce6..7c0cd70b 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -24,7 +24,8 @@ of DigiPen Institute of Technology is prohibited. #include "Events/SHEvent.h" #include "Events/SHEventReceiver.h" #include "Events/SHEventManager.hpp" -#include "Physics/SHPhysicsSystem.h" +#include "Physics/System/SHPhysicsSystem.h" +#include "Physics/SHPhysicsEvents.h" #include "Assets/SHAssetMacros.h" diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index f2829b95..ae931778 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -14,7 +14,7 @@ #include "Camera/SHCameraComponent.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Math/Transform/SHTransformComponent.h" -#include "Physics/Components/SHRigidBodyComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Scripting/SHScriptEngine.h" diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index c0d95491..0f8933e2 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -3,7 +3,7 @@ #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" -#include "Physics/SHCollisionShape.h" +#include "Physics/Interface/SHCollisionShape.h" #include "Resource/SHResourceManager.h" #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" @@ -11,7 +11,7 @@ #include "Graphics/MiddleEnd/Interface/SHMaterial.h" #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "SHSerializationTools.h" -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHColliderComponent.h" namespace YAML { using namespace SHADE; diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx index dc17ae7f..1711e8b9 100644 --- a/SHADE_Managed/src/Components/Collider.hxx +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Physics/Components/SHColliderComponent.h" +#include "Physics/Interface/SHColliderComponent.h" // Project Includes #include "Components/Component.hxx" #include "Math/Vector3.hxx" diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx index d3a30612..f2953bbd 100644 --- a/SHADE_Managed/src/Components/RigidBody.hxx +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -15,7 +15,7 @@ of DigiPen Institute of Technology is prohibited. #pragma once // External Dependencies -#include "Physics/Components/SHRigidBodyComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" // Project Includes #include "Components/Component.hxx" diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 00c3c182..80f070e2 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -22,8 +22,8 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" #include "Math/Transform/SHTransformComponent.h" -#include "Physics/Components/SHColliderComponent.h" -#include "Physics/Components/SHRigidBodyComponent.h" +#include "Physics/Interface/SHColliderComponent.h" +#include "Physics/Interface/SHRigidBodyComponent.h" #include "Scene/SHSceneManager.h" #include "Scene/SHSceneGraph.h" #include "Tools/SHLog.h" diff --git a/SHADE_Managed/src/Engine/Time.cxx b/SHADE_Managed/src/Engine/Time.cxx index 36032e00..8784ec90 100644 --- a/SHADE_Managed/src/Engine/Time.cxx +++ b/SHADE_Managed/src/Engine/Time.cxx @@ -16,7 +16,7 @@ of DigiPen Institute of Technology is prohibited. #include "SHpch.h" // External Dependencies #include "FRC/SHFramerateController.h" -#include "Physics/SHPhysicsSystemInterface.h" +#include "Physics/System/SHPhysicsSystemInterface.h" // Primary Header #include "Time.hxx" diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index a90b4f12..b3e02a9e 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -28,8 +28,9 @@ of DigiPen Institute of Technology is prohibited. #include "Engine/Entity.hxx" #include "Serialisation/ReflectionUtilities.hxx" #include "Engine/Application.hxx" -#include "Physics/SHPhysicsSystemInterface.h" -#include "Physics/SHPhysicsUtils.h" +#include "Physics/System/SHPhysicsSystemInterface.h" +#include "Physics/SHPhysicsEvents.h" +#include "Physics/Collision/SHCollisionInfo.h" namespace SHADE { @@ -526,13 +527,13 @@ namespace SHADE { switch (collisionInfo.GetCollisionState()) { - case SHCollisionEvent::State::ENTER: + case SHCollisionInfo::State::ENTER: script->OnCollisionEnter(info); break; - case SHCollisionEvent::State::STAY: + case SHCollisionInfo::State::STAY: script->OnCollisionStay(info); break; - case SHCollisionEvent::State::EXIT: + case SHCollisionInfo::State::EXIT: script->OnCollisionExit(info); break; } @@ -567,13 +568,13 @@ namespace SHADE { switch (triggerInfo.GetCollisionState()) { - case SHCollisionEvent::State::ENTER: + case SHCollisionInfo::State::ENTER: script->OnTriggerEnter(info); break; - case SHCollisionEvent::State::STAY: + case SHCollisionInfo::State::STAY: script->OnTriggerStay(info); break; - case SHCollisionEvent::State::EXIT: + case SHCollisionInfo::State::EXIT: script->OnTriggerExit(info); break; } From 4ad23a605f7b75d246264aab3e8fef3b326dbfb4 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 12 Nov 2022 17:04:09 +0800 Subject: [PATCH 750/793] Fixed compilation issues from merge --- Assets/Scenes/M2Scene.shade | 10 +++++----- SHADE_Engine/src/Physics/SHPhysicsWorld.cpp | 5 +++++ SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index eed9526e..b5edc743 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -36,8 +36,8 @@ RigidBody Component: Type: Static Mass: 1 - Drag: 0 - Angular Drag: 0 + Drag: 0.00999999978 + Angular Drag: 0.00999999978 Use Gravity: true Interpolate: true Freeze Position X: false @@ -234,7 +234,7 @@ Components: Transform Component: Translate: {x: -4.49353218, y: 2.57871056, z: -5} - Rotate: {x: -0.463157475, y: -0.553180635, z: 0.0868046582} + Rotate: {x: 0, y: 0, z: 0} Scale: {x: 0.99998343, y: 0.999987662, z: 0.999981642} RigidBody Component: Type: Dynamic @@ -252,8 +252,8 @@ Collider Component: Colliders: - Is Trigger: false - Type: Sphere - Radius: 1 + Type: Box + Half Extents: {x: 1, y: 1, z: 1} Friction: 0.400000006 Bounciness: 0 Density: 1 diff --git a/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp b/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp index 1326ea3e..85e76702 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsWorld.cpp @@ -35,7 +35,12 @@ namespace SHADE rp3dWorldSettings.defaultPositionSolverNbIterations = settings.numPositionSolverIterations; rp3dWorldSettings.isSleepingEnabled = settings.sleepingEnabled; + // These are my preferred default values. QoL for modifying these. + rp3dWorldSettings.defaultBounciness = 0.0f; + rp3dWorldSettings.defaultFrictionCoefficient = 0.4f; + world = factory.createPhysicsWorld(rp3dWorldSettings); + world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); } void SHPhysicsWorldState::DestroyWorld(rp3d::PhysicsCommon& factory) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 59127994..8d08e89e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -26,6 +26,7 @@ of DigiPen Institute of Technology is prohibited. #include "Events/SHEventManager.hpp" #include "Physics/System/SHPhysicsSystem.h" #include "Physics/SHPhysicsEvents.h" +#include "Scene/SHSceneGraphEvents.h" #include "Assets/SHAssetMacros.h" From f8bbcdd909d60398faa98252fb3c0fe7f2fd9169 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 12 Nov 2022 17:28:49 +0800 Subject: [PATCH 751/793] Small fixes --- Assets/Scenes/M2Scene.shade | 8 ++++---- .../src/Physics/PhysicsObject/SHPhysicsObject.cpp | 1 + .../src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp | 4 ++-- .../src/Physics/PhysicsObject/SHPhysicsObjectManager.h | 2 +- SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp | 3 ++- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index b5edc743..0ca9eb31 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -4,7 +4,7 @@ NumberOfChildren: 0 Components: Camera Component: - Position: {x: 0, y: 0, z: 0} + Position: {x: 0, y: 0, z: 8} Pitch: 0 Yaw: 0 Roll: 0 @@ -233,9 +233,9 @@ NumberOfChildren: 0 Components: Transform Component: - Translate: {x: -4.49353218, y: 2.57871056, z: -5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 0.99998343, y: 0.999987662, z: 0.999981642} + Translate: {x: -4.40482807, y: 2.57871056, z: -5.21213436} + Rotate: {x: -0.361265004, y: 1.11661232, z: -0.626627684} + Scale: {x: 0.999982238, y: 0.999987125, z: 0.999981165} RigidBody Component: Type: Dynamic Mass: 1 diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index d4668963..549f84cb 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -237,6 +237,7 @@ namespace SHADE case 9: // Mass { rp3dBody->setMass(component.mass); + rp3dBody->updateLocalCenterOfMassFromColliders(); rp3dBody->updateLocalInertiaTensorFromColliders(); break; diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp index 38a3c658..8a381fcb 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -37,9 +37,9 @@ namespace SHADE factory = &physicsFactory; } - void SHPhysicsObjectManager::SetWorld(rp3d::PhysicsWorld& physicsWorld) noexcept + void SHPhysicsObjectManager::SetWorld(rp3d::PhysicsWorld* physicsWorld) noexcept { - world = &physicsWorld; + world = physicsWorld; } /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h index f796b723..91dcce5f 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h @@ -84,7 +84,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SetFactory (rp3d::PhysicsCommon& physicsFactory) noexcept; - void SetWorld (rp3d::PhysicsWorld& physicsWorld) noexcept; + void SetWorld (rp3d::PhysicsWorld* physicsWorld) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index ad137ed4..93ee0b11 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -273,7 +273,7 @@ namespace SHADE collisionListener.BindToWorld(worldState.world); // Link with object manager & create all physics objects - objectManager.SetWorld(*worldState.world); + objectManager.SetWorld(worldState.world); const auto& RIGIDBODY_DENSE = SHComponentManager::GetDense(); const auto& COLLIDER_DENSE = SHComponentManager::GetDense(); @@ -291,6 +291,7 @@ namespace SHADE { // Remove all physics objects objectManager.RemoveAllObjects(); + objectManager.SetWorld(nullptr); // Clear all collision info // Collision listener is automatically unbound when world is destroyed From 340299218995a652dfe311af4de3cfc7a33de760 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 12 Nov 2022 18:09:55 +0800 Subject: [PATCH 752/793] dont draw gizmos on play --- .../ViewportWindow/SHEditorViewport.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index d6ef8d19..7b3b5411 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -40,6 +40,7 @@ namespace SHADE shouldUpdateCamera = false; } ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); + SHEditor* editor = SHSystemManager::GetSystem(); if (Begin()) { @@ -51,7 +52,6 @@ namespace SHADE beginCursorPos = ImGui::GetCursorScreenPos(); viewportMousePos = { mousePos.x - beginCursorPos.x, mousePos.y - beginCursorPos.y }; gfxSystem->GetMousePickSystem()->SetViewportMousePos(viewportMousePos); - ImGui::Image((ImTextureID)descriptorSet, { beginContentRegionAvailable.x, beginContentRegionAvailable.y }); if (ImGui::IsWindowHovered() && ImGui::IsMouseDown(ImGuiMouseButton_Right)) @@ -64,24 +64,25 @@ namespace SHADE shouldUpdateCamera = true; } - if (ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) + if (editor->editorState != SHEditor::State::PLAY && ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) { - if (ImGui::IsKeyReleased(ImGuiKey_Q)) + if (ImGui::IsKeyReleased(ImGuiKey_W)) { transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; } - if (ImGui::IsKeyReleased(ImGuiKey_W)) + if (ImGui::IsKeyReleased(ImGuiKey_E)) { transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; } - if (ImGui::IsKeyReleased(ImGuiKey_E)) + if (ImGui::IsKeyReleased(ImGuiKey_R)) { transformGizmo.operation = SHTransformGizmo::Operation::SCALE; } } } ImGuizmo::SetRect(beginCursorPos.x, beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); - transformGizmo.Draw(); + if(editor->editorState != SHEditor::State::PLAY) + transformGizmo.Draw(); ImGui::End(); ImGui::PopStyleVar(); } From 78ca464c6537823445e2683f05455051be0bdbc1 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 12 Nov 2022 18:22:45 +0800 Subject: [PATCH 753/793] Editor now uses separate stacks; 1 set of stacks when in play and another set of stacks otherwise. CommandStack now uses SHDeque --- .../src/Editor/Command/SHCommandManager.cpp | 77 ++++++++++++++----- .../src/Editor/Command/SHCommandManager.h | 13 +++- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 4 +- SHADE_Engine/src/Tools/SHDeque.h | 69 +++++++++++++++++ 4 files changed, 141 insertions(+), 22 deletions(-) create mode 100644 SHADE_Engine/src/Tools/SHDeque.h diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp index 3c0ee5dd..b86f9247 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.cpp @@ -10,63 +10,102 @@ namespace SHADE { - SHCommandManager::CommandStack SHCommandManager::undoStack{}; - SHCommandManager::CommandStack SHCommandManager::redoStack{}; + + SHCommandManager::CommandStack SHCommandManager::undoStack(defaultStackSize); + SHCommandManager::CommandStack SHCommandManager::redoStack(defaultStackSize); + SHCommandManager::CommandStack SHCommandManager::secondaryUndoStack(defaultStackSize); + SHCommandManager::CommandStack SHCommandManager::secondaryRedoStack(defaultStackSize); + + SHCommandManager::CommandStackPtr SHCommandManager::pCurrUndoStack(&undoStack); + SHCommandManager::CommandStackPtr SHCommandManager::pCurrRedoStack(&redoStack); void SHCommandManager::PerformCommand(BaseCommandPtr commandPtr, bool const& overrideValue) { - redoStack = CommandStack(); + *pCurrRedoStack = CommandStack(defaultStackSize); commandPtr->Execute(); - if (overrideValue && !undoStack.empty()) + if (overrideValue && !pCurrUndoStack->Empty()) { - undoStack.top()->Merge(commandPtr); + pCurrUndoStack->Top()->Merge(commandPtr); } else { - undoStack.push(commandPtr); + pCurrUndoStack->Push(commandPtr); } } void SHCommandManager::RegisterCommand(BaseCommandPtr commandPtr) { - undoStack.push(commandPtr); + pCurrUndoStack->Push(commandPtr); } void SHCommandManager::UndoCommand() { - if (undoStack.empty()) + if (pCurrUndoStack->Empty()) return; - undoStack.top()->Undo(); - redoStack.push(undoStack.top()); - undoStack.pop(); + pCurrUndoStack->Top()->Undo(); + pCurrRedoStack->Push(pCurrUndoStack->Top()); + pCurrUndoStack->Pop(); } void SHCommandManager::RedoCommand() { - if (redoStack.empty()) + if (pCurrRedoStack->Empty()) return; - redoStack.top()->Execute(); - undoStack.push(redoStack.top()); - redoStack.pop(); + pCurrRedoStack->Top()->Execute(); + pCurrUndoStack->Push(pCurrRedoStack->Top()); + pCurrRedoStack->Pop(); } std::size_t SHCommandManager::GetUndoStackSize() { - return undoStack.size(); + return pCurrUndoStack->Size(); } std::size_t SHCommandManager::GetRedoStackSize() { - return redoStack.size(); + return pCurrRedoStack->Size(); } void SHCommandManager::PopLatestCommandFromRedoStack() { - redoStack.pop(); + pCurrRedoStack->Pop(); } void SHCommandManager::PopLatestCommandFromUndoStack() { - undoStack.pop(); + pCurrUndoStack->Pop(); } + + void SHCommandManager::SwapStacks() + { + if (pCurrUndoStack == &undoStack) + { + pCurrUndoStack = &secondaryUndoStack; + } + else + { + secondaryUndoStack.Clear(); + pCurrUndoStack = &undoStack; + } + + if (pCurrRedoStack == &redoStack) + { + pCurrRedoStack = &secondaryRedoStack; + } + else + { + secondaryRedoStack.Clear(); + pCurrRedoStack = &redoStack; + } + } + + void SHCommandManager::ClearAll() + { + undoStack.Clear(); + redoStack.Clear(); + + secondaryUndoStack.Clear(); + secondaryRedoStack.Clear(); + } + }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/Command/SHCommandManager.h b/SHADE_Engine/src/Editor/Command/SHCommandManager.h index a514c464..178347b5 100644 --- a/SHADE_Engine/src/Editor/Command/SHCommandManager.h +++ b/SHADE_Engine/src/Editor/Command/SHCommandManager.h @@ -10,6 +10,7 @@ //#==============================================================# #include "SHCommand.hpp" #include "SH_API.h" +#include "Tools/SHDeque.h" namespace SHADE { @@ -22,7 +23,8 @@ namespace SHADE using BaseCommandPtr = std::shared_ptr; template using SHCommandPtr = std::shared_ptr>; - using CommandStack = std::stack; + using CommandStack = SHDeque; + using CommandStackPtr = CommandStack*; static void PerformCommand(BaseCommandPtr commandPtr, bool const& overrideValue = false); static void RegisterCommand(BaseCommandPtr commandPtr); @@ -34,8 +36,17 @@ namespace SHADE static void PopLatestCommandFromRedoStack(); static void PopLatestCommandFromUndoStack(); + static void SwapStacks(); + static void ClearAll(); + + static constexpr CommandStack::SizeType defaultStackSize = 100; private: + static CommandStackPtr pCurrUndoStack; + static CommandStackPtr pCurrRedoStack; + static CommandStack undoStack; + static CommandStack secondaryUndoStack; static CommandStack redoStack; + static CommandStack secondaryRedoStack; }; }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index cfb36cd0..fdde55e1 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -228,7 +228,7 @@ namespace SHADE .previousState = editor->editorState }; editor->editorState = SHEditor::State::PLAY; - + SHCommandManager::SwapStacks(); SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); } } @@ -253,7 +253,7 @@ namespace SHADE .previousState = editor->editorState }; editor->editorState = SHEditor::State::STOP; - + SHCommandManager::SwapStacks(); SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); editor->LoadScene(SHSceneManager::GetCurrentSceneAssetID()); } diff --git a/SHADE_Engine/src/Tools/SHDeque.h b/SHADE_Engine/src/Tools/SHDeque.h new file mode 100644 index 00000000..99df910a --- /dev/null +++ b/SHADE_Engine/src/Tools/SHDeque.h @@ -0,0 +1,69 @@ +#pragma once +#pragma once + +#include "SH_API.h" +#include + +namespace SHADE +{ + template + class SH_API SHDeque + { + public: + using ValueType = T; + using Pointer = T*; + using ValueRef = T&; + using ValueConstRef = T const&; + using SizeType = uint32_t; + using ContainerType = std::deque; + using ContainerTypeConstRef = std::deque; + + SHDeque(SizeType n) : max_size(n) {} + + ContainerTypeConstRef const& GetDeque() const + { + return deque; + } + + void Push(ValueConstRef obj) + { + if (deque.size() < max_size) + deque.push_front(std::move(obj)); + else + { + deque.pop_back(); + deque.push_front(std::move(obj)); + } + } + + bool Empty() + { + return deque.empty(); + } + + void Pop() + { + deque.pop_front(); + } + + ValueConstRef Top() + { + return deque.front(); + } + + SizeType Size() const noexcept + { + return deque.size(); + } + + void Clear() + { + deque.clear(); + } + + private: + int max_size; + ContainerType deque{}; + + }; +} \ No newline at end of file From 69ac074926530530d640798462ecc170c2e7503d Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 12 Nov 2022 18:38:57 +0800 Subject: [PATCH 754/793] change entity active to scene node active --- .../src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp | 5 +++-- SHADE_Engine/src/Scene/SHSceneNode.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 2fecae25..dde49838 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -93,13 +93,14 @@ namespace SHADE { EntityID const& eid = editor->selectedEntities[0]; SHEntity* entity = SHEntityManager::GetEntityByID(eid); - if(!entity) + SHSceneNode* entityNode = SHSceneManager::GetCurrentSceneGraph().GetNode(eid); + if(!entity || !entityNode) { ImGui::End(); return; } ImGui::TextColored(ImGuiColors::green, "EID: %zu", eid); - SHEditorWidgets::CheckBox("##IsActive", [entity]()->bool {return entity->GetActive(); }, [entity](bool const& active) {entity->SetActive(active); }); + SHEditorWidgets::CheckBox("##IsActive", [entityNode]()->bool {return entityNode->IsActive(); }, [entityNode](bool const& active) {entityNode->SetActive(active); }); ImGui::SameLine(); ImGui::InputText("##EntityName", &entity->name); diff --git a/SHADE_Engine/src/Scene/SHSceneNode.cpp b/SHADE_Engine/src/Scene/SHSceneNode.cpp index b619d464..8dac20bd 100644 --- a/SHADE_Engine/src/Scene/SHSceneNode.cpp +++ b/SHADE_Engine/src/Scene/SHSceneNode.cpp @@ -136,7 +136,7 @@ namespace SHADE for (auto* child : children) { - SetActive(newActiveState); + child->SetActive(newActiveState); } } From 889d3dac4c92a2715df1855e1a09c06127f7d2e4 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sat, 12 Nov 2022 23:14:25 +0800 Subject: [PATCH 755/793] Split serialization code into SerialisationUtilities, refactored serialisation code and implemented list serialisation --- SHADE_Managed/src/Editor/Editor.cxx | 2 +- SHADE_Managed/src/Scripts/ScriptStore.cxx | 6 +- .../src/Serialisation/ReflectionUtilities.cxx | 224 +--------------- .../src/Serialisation/ReflectionUtilities.h++ | 55 ---- .../src/Serialisation/ReflectionUtilities.hxx | 42 +-- .../Serialisation/SerialisationUtilities.cxx | 251 ++++++++++++++++++ .../Serialisation/SerialisationUtilities.h++ | 125 +++++++++ .../Serialisation/SerialisationUtilities.hxx | 74 ++++++ 8 files changed, 462 insertions(+), 317 deletions(-) delete mode 100644 SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ create mode 100644 SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx create mode 100644 SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ create mode 100644 SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index ebc39c60..68dddf34 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -172,7 +172,7 @@ namespace SHADE if (!MODIFIED_PRIMITIVE) { // Any List - if (field->FieldType->IsGenericType && field->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition()) + if (ReflectionUtilities::FieldIsList(field)) { System::Type^ listType = field->FieldType->GenericTypeArguments[0]; RangeAttribute^ rangeAttrib = hasAttribute(field); diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index a90b4f12..d11e70c3 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -26,7 +26,7 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Convert.hxx" #include "Script.hxx" #include "Engine/Entity.hxx" -#include "Serialisation/ReflectionUtilities.hxx" +#include "Serialisation/SerialisationUtilities.hxx" #include "Engine/Application.hxx" #include "Physics/SHPhysicsSystemInterface.h" #include "Physics/SHPhysicsUtils.h" @@ -613,7 +613,7 @@ namespace SHADE System::Collections::Generic::List^ scriptList = scripts[entity]; for each (Script^ script in scriptList) { - ReflectionUtilities::Serialise(script, *yamlNode); + SerialisationUtilities::Serialise(script, *yamlNode); } return true; @@ -658,7 +658,7 @@ namespace SHADE if (AddScriptViaNameWithRef(entity, typeName, script)) { // Copy the data in - ReflectionUtilities::Deserialise(script, node); + SerialisationUtilities::Deserialise(script, node); } else { diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 651afb73..3bdbe90e 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -18,31 +18,6 @@ of DigiPen Institute of Technology is prohibited. #include "Serialisation/ReflectionUtilities.hxx" // Project Includes #include "SerializeFieldAttribute.hxx" -#include "Utility/Convert.hxx" -#include "Math/Vector2.hxx" -#include "Math/Vector3.hxx" -#include "Utility/Debug.hxx" -#include "Engine/GameObject.hxx" - -/*-------------------------------------------------------------------------------------*/ -/* Macro Functions */ -/*-------------------------------------------------------------------------------------*/ -/// -/// Macro expansion that is used in RapidJsonValueToField() to retrieve the specified -/// member of a Vector type that is stored into a Vector named "vec". -/// -/// The name of the member to retrieve. -#define PRIMITIVE_VECTOR_FIELD_ASSIGN(MEMBER) \ -iter = jsonValue.FindMember(#MEMBER); \ -if (iter != jsonValue.MemberEnd()) \ -{ \ - vec.MEMBER = iter->value.GetDouble(); \ -} \ - -/*-------------------------------------------------------------------------------------*/ -/* File-Level Constants */ -/*-------------------------------------------------------------------------------------*/ -static const std::string_view SCRIPT_TYPE_YAMLTAG = "Type"; /*-------------------------------------------------------------------------------------*/ /* Function Definitions */ @@ -64,202 +39,9 @@ namespace SHADE return fieldInfo->IsPublic || fieldInfo->GetCustomAttributes(SerializeField::typeid, true)->Length > 0; } - /*---------------------------------------------------------------------------------*/ - /* Serialisation Functions */ - /*---------------------------------------------------------------------------------*/ - void ReflectionUtilities::Serialise(System::Object^ object, YAML::Node& scriptListNode) + bool ReflectionUtilities::FieldIsList(System::Reflection::FieldInfo^ fieldInfo) { - using namespace System::Reflection; - - // Create YAML object - YAML::Node scriptNode; - scriptNode.SetStyle(YAML::EmitterStyle::Block); - scriptNode[SCRIPT_TYPE_YAMLTAG.data()] = Convert::ToNative(object->GetType()->FullName); - - // Get all fields - System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); - for each (FieldInfo^ field in fields) - { - // Ignore private and non-SerialiseField - if (!FieldIsSerialisable(field)) - continue; - - // Serialise - writeFieldIntoYaml(field, object, scriptNode); - } - - scriptListNode.push_back(scriptNode); - } - void ReflectionUtilities::Deserialise(Object^ object, YAML::Node& yamlNode) - { - using namespace System::Reflection; - - // Load the YAML - if (!yamlNode.IsMap()) - { - // Invalid - Debug::LogError - ( - System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of \"{0}\" script.", - object->GetType()->FullName) - ); - return; - } - // Get all fields - System::Collections::Generic::IEnumerable^ fields = GetInstanceFields(object); - for each (FieldInfo^ field in fields) - { - // Ignore private and non-SerialiseField - if (!FieldIsSerialisable(field)) - continue; - - // Deserialise - const std::string FIELD_NAME = Convert::ToNative(field->Name); - if (yamlNode[FIELD_NAME]) - { - writeYamlIntoField(field, object, yamlNode[FIELD_NAME]); - } - } - } - /*---------------------------------------------------------------------------------*/ - /* Serialization Helper Functions */ - /*---------------------------------------------------------------------------------*/ - void ReflectionUtilities::writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode) - { - // Field YAML Node - YAML::Node fieldNode; - - // Retrieve string for the YAML - const bool PRIMITIVE_SERIALIZED = fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode) || - fieldInsertYaml(fieldInfo, object, fieldNode); - - // Serialization of more complex types - if (!PRIMITIVE_SERIALIZED) - { - if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) - { - fieldNode = std::to_string(safe_cast(fieldInfo->GetValue(object))); - } - else if (fieldInfo->FieldType == System::String::typeid) - { - System::String^ str = safe_cast(fieldInfo->GetValue(object)); - fieldNode = Convert::ToNative(str); - } - else if (fieldInfo->FieldType == Vector2::typeid) - { - Vector2 vec = safe_cast(fieldInfo->GetValue(object)); - fieldNode.SetStyle(YAML::EmitterStyle::Flow); - fieldNode.push_back(vec.x); - fieldNode.push_back(vec.y); - } - else if (fieldInfo->FieldType == Vector3::typeid) - { - Vector3 vec = safe_cast(fieldInfo->GetValue(object)); - fieldNode.SetStyle(YAML::EmitterStyle::Flow); - fieldNode.push_back(vec.x); - fieldNode.push_back(vec.y); - fieldNode.push_back(vec.z); - } - else if (fieldInfo->FieldType == GameObject::typeid) - { - GameObject gameObj = safe_cast(fieldInfo->GetValue(object)); - fieldNode = gameObj ? gameObj.GetEntity() : MAX_EID; - } - else // Not any of the supported types - { - Debug::LogWarning(Convert::ToNative(System::String::Format - ( - "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", - fieldInfo->Name, fieldInfo->FieldType) - )); - return; - } - } - - // Store the field into YAML - yamlNode[Convert::ToNative(fieldInfo->Name)] = fieldNode; - } - - void ReflectionUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) - { - if (fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node)) - { - return; - } - else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) - { - fieldInfo->SetValue(object, node.as()); - } - else if (fieldInfo->FieldType == System::String::typeid) - { - fieldInfo->SetValue(object, Convert::ToCLI(node.as())); - } - else if (fieldInfo->FieldType == Vector2::typeid) - { - if (node.IsSequence() && node.size() == 2) - { - Vector2 vec; - vec.x = node[0].as(); - vec.y = node[1].as(); - fieldInfo->SetValue(object, vec); - } - else - { - Debug::LogWarning - ( - System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of a Vector2 \"{0}\" field in \"{1}\" script.", - fieldInfo->Name, object->GetType()->FullName) - ); - } - } - else if (fieldInfo->FieldType == Vector3::typeid) - { - if (node.IsSequence() && node.size() == 3) - { - Vector3 vec; - vec.x = node[0].as(); - vec.y = node[1].as(); - vec.z = node[2].as(); - fieldInfo->SetValue(object, vec); - } - else - { - Debug::LogWarning - ( - System::String::Format("[ReflectionUtilities] Invalid YAML Node provided for deserialization of a Vector3 \"{0}\" field in \"{1}\" script.", - fieldInfo->Name, object->GetType()->FullName) - ); - } - } - else if (fieldInfo->FieldType == GameObject::typeid) - { - const uint32_t EID = node.as(); - fieldInfo->SetValue(object, EID == MAX_EID ? GameObject() : GameObject(EID)); - } - else // Not any of the supported types - { - Debug::LogWarning(Convert::ToNative(System::String::Format - ( - "[ReflectionUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", - fieldInfo->Name, fieldInfo->FieldType) - )); - } + return fieldInfo->FieldType->IsGenericType + && fieldInfo->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition(); } } diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ deleted file mode 100644 index 7c39232a..00000000 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.h++ +++ /dev/null @@ -1,55 +0,0 @@ -/************************************************************************************//*! -\file ReflectionUtilities.h++ -\author Tng Kah Wei, kahwei.tng, 390009620 -\par email: kahwei.tng\@digipen.edu -\date Sep 16, 2022 -\brief Contains the definition of the template functions of the managed - ReflectionUtilities static class. - - Note: This file is written in C++17/CLI. - -Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent -of DigiPen Institute of Technology is prohibited. -*//*************************************************************************************/ -#pragma once - -// Primary Header -#include "ReflectionUtilities.hxx" - -namespace SHADE -{ - /*---------------------------------------------------------------------------------*/ - /* Serialization Helper Functions */ - /*---------------------------------------------------------------------------------*/ - template - bool ReflectionUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode) - { - if (fieldInfo->FieldType == FieldType::typeid) - { - const FieldType VALUE = safe_cast(fieldInfo->GetValue(object)); - fieldNode = static_cast(VALUE); - return true; - } - - return false; - } - - template - bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) - { - return fieldAssignYaml>(fieldInfo, object, node); - } - - template - bool ReflectionUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) - { - if (fieldInfo->FieldType == FieldType::typeid) - { - fieldInfo->SetValue(object, node.as()); - return true; - } - - return false; - } -} diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index 403c913c..ffdc208f 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -13,9 +13,6 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once -// External Dependencies -#include - namespace SHADE { /// @@ -42,40 +39,11 @@ namespace SHADE /// True if the specified field is a candidate for serialisation. /// static bool FieldIsSerialisable(System::Reflection::FieldInfo^ fieldInfo); - - /*-----------------------------------------------------------------------------*/ - /* Serialisation Functions */ - /*-----------------------------------------------------------------------------*/ /// - /// Creates a JSON node that represents the specified object and its associated - /// serialisable fields. Public fields and fields marked with the SerialiseField - /// attribute will be serialised. + /// Checks if the specified field is a generic List. /// - /// The object to serialise. - static void Serialise(System::Object^ object, YAML::Node& yamlNode); - /// - /// Deserialises a YAML node that contains a map of Scripts and copies the - /// deserialised data into the specified object if there are matching fields. - /// - /// - /// The JSON string that contains the data to copy into this Script object. - /// - /// The object to copy deserialised data into. - static void Deserialise(System::Object^ object, YAML::Node& yamlNode); - - private: - /*-----------------------------------------------------------------------------*/ - /* Serialization Helper Functions */ - /*-----------------------------------------------------------------------------*/ - static void writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode); - template - static bool fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode); - static void writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); - template - static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); - template - static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + /// The field to check. + /// True if fieldInfo is describing a generic List. + static bool FieldIsList(System::Reflection::FieldInfo^ fieldInfo); }; -} - -#include "ReflectionUtilities.h++" \ No newline at end of file +} \ No newline at end of file diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx new file mode 100644 index 00000000..e8a4e0e3 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx @@ -0,0 +1,251 @@ +/************************************************************************************//*! +\file SerialisationUtilities.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 6, 2021 +\brief Contains the definition of the functions for the SerialisationUtilities + managed static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Serialisation/SerialisationUtilities.hxx" +// Project Includes +#include "ReflectionUtilities.hxx" + +/*-------------------------------------------------------------------------------------*/ +/* File-Level Constants */ +/*-------------------------------------------------------------------------------------*/ +static const std::string_view SCRIPT_TYPE_YAMLTAG = "Type"; + +/*-------------------------------------------------------------------------------------*/ +/* Function Definitions */ +/*-------------------------------------------------------------------------------------*/ +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Serialisation Functions */ + /*---------------------------------------------------------------------------------*/ + void SerialisationUtilities::Serialise(System::Object^ object, YAML::Node& scriptListNode) + { + using namespace System::Reflection; + + // Create YAML object + YAML::Node scriptNode; + scriptNode.SetStyle(YAML::EmitterStyle::Block); + scriptNode[SCRIPT_TYPE_YAMLTAG.data()] = Convert::ToNative(object->GetType()->FullName); + + // Get all fields + System::Collections::Generic::IEnumerable^ fields = ReflectionUtilities::GetInstanceFields(object); + for each (FieldInfo^ field in fields) + { + // Ignore private and non-SerialiseField + if (!ReflectionUtilities::FieldIsSerialisable(field)) + continue; + + // Serialise + writeFieldIntoYaml(field, object, scriptNode); + } + + scriptListNode.push_back(scriptNode); + } + void SerialisationUtilities::Deserialise(Object^ object, YAML::Node& yamlNode) + { + using namespace System::Reflection; + + // Load the YAML + if (!yamlNode.IsMap()) + { + // Invalid + Debug::LogError + ( + System::String::Format("[SerialisationUtilities] Invalid YAML Node provided for deserialization of \"{0}\" script.", + object->GetType()->FullName) + ); + return; + } + // Get all fields + System::Collections::Generic::IEnumerable^ fields = ReflectionUtilities::GetInstanceFields(object); + for each (FieldInfo^ field in fields) + { + // Ignore private and non-SerialiseField + if (!ReflectionUtilities::FieldIsSerialisable(field)) + continue; + + // Deserialise + const std::string FIELD_NAME = Convert::ToNative(field->Name); + if (yamlNode[FIELD_NAME]) + { + writeYamlIntoField(field, object, yamlNode[FIELD_NAME]); + } + } + } + /*---------------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + void SerialisationUtilities::writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode) + { + // Field YAML Node + YAML::Node fieldNode; + + // Retrieve string for the YAML + const bool PRIMITIVE_SERIALIZED = fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode) || + fieldInsertYaml(fieldInfo, object, fieldNode); + + // Serialization of more complex types + if (!PRIMITIVE_SERIALIZED) + { + if (ReflectionUtilities::FieldIsList(fieldInfo)) + { + System::Type^ listType = fieldInfo->FieldType->GenericTypeArguments[0]; + System::Collections::IList^ iList = safe_cast(fieldInfo->GetValue(object)); + + + fieldNode.SetStyle(YAML::EmitterStyle::Block); + for (int i = 0; i < iList->Count; ++i) + { + YAML::Node elemNode; + if (varInsertYaml(iList[i], elemNode)) + { + fieldNode.push_back(elemNode); + } + else + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[SerialisationUtilities] Failed to parse element # {2} of \"{0}\" of \"{1}\" type for serialization.", + fieldInfo->Name, fieldInfo->FieldType, i) + )); + } + } + } + else // Not any of the supported types + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[SerialisationUtilities] Failed to parse \"{0}\" of \"{1}\" type for serialization.", + fieldInfo->Name, fieldInfo->FieldType) + )); + return; + } + } + + // Store the field into YAML + yamlNode[Convert::ToNative(fieldInfo->Name)] = fieldNode; + } + + bool SerialisationUtilities::varInsertYaml(System::Object^ object, YAML::Node& fieldNode) + { + const bool INSERTED = + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode) || + varInsertYamlInternal(object, fieldNode); + return INSERTED; + } + + void SerialisationUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + if (fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node)) + { + return; + } + else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) + { + fieldInfo->SetValue(object, node.as()); + } + else if (fieldInfo->FieldType == System::String::typeid) + { + fieldInfo->SetValue(object, Convert::ToCLI(node.as())); + } + else if (fieldInfo->FieldType == Vector2::typeid) + { + if (node.IsSequence() && node.size() == 2) + { + Vector2 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + fieldInfo->SetValue(object, vec); + } + else + { + Debug::LogWarning + ( + System::String::Format("[SerialisationUtilities] Invalid YAML Node provided for deserialization of a Vector2 \"{0}\" field in \"{1}\" script.", + fieldInfo->Name, object->GetType()->FullName) + ); + } + } + else if (fieldInfo->FieldType == Vector3::typeid) + { + if (node.IsSequence() && node.size() == 3) + { + Vector3 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + vec.z = node[2].as(); + fieldInfo->SetValue(object, vec); + } + else + { + Debug::LogWarning + ( + System::String::Format("[SerialisationUtilities] Invalid YAML Node provided for deserialization of a Vector3 \"{0}\" field in \"{1}\" script.", + fieldInfo->Name, object->GetType()->FullName) + ); + } + } + else if (fieldInfo->FieldType == GameObject::typeid) + { + const uint32_t EID = node.as(); + fieldInfo->SetValue(object, EID == MAX_EID ? GameObject() : GameObject(EID)); + } + else // Not any of the supported types + { + Debug::LogWarning(Convert::ToNative(System::String::Format + ( + "[SerialisationUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", + fieldInfo->Name, fieldInfo->FieldType) + )); + } + } +} diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ new file mode 100644 index 00000000..93a14401 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ @@ -0,0 +1,125 @@ +/************************************************************************************//*! +\file SerialisationUtilities.h++ +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Sep 16, 2022 +\brief Contains the definition of the template functions of the managed + ReflectionUtilities static class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// Primary Header +#include "SerialisationUtilities.hxx" +// Project Includes +#include "Utility/Convert.hxx" +#include "Utility/Debug.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + template + bool SerialisationUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode) + { + Debug::Log(FieldType::typeid->Name); + return varInsertYamlInternal(fieldInfo->GetValue(object), fieldNode); + } + template + bool SerialisationUtilities::varInsertYamlInternal(System::Object^ object, YAML::Node& fieldNode) + { + if constexpr (std::is_same_v) + { + Debug::Log("Enum Specialization"); + if (object->GetType()->IsSubclassOf(System::Enum::typeid)) + { + fieldNode = std::to_string(safe_cast(object)); + return true; + } + } + else if constexpr (std::is_same_v) + { + Debug::Log("String Specialization"); + if (object->GetType() == System::String::typeid) + { + System::String^ str = safe_cast(object); + fieldNode = Convert::ToNative(str); + return true; + } + } + else if constexpr (std::is_same_v) + { + Debug::Log("Vec2 Specialization"); + if (object->GetType() == Vector2::typeid) + { + Vector2 vec = safe_cast(object); + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); + return true; + } + } + else if constexpr (std::is_same_v) + { + Debug::Log("Vec3 Specialization"); + if (object->GetType() == Vector3::typeid) + { + Vector3 vec = safe_cast(object); + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(vec.x); + fieldNode.push_back(vec.y); + fieldNode.push_back(vec.z); + return true; + } + } + else if constexpr (std::is_same_v) + { + Debug::Log("GameObject Specialization"); + if (object->GetType() == GameObject::typeid) + { + GameObject gameObj = safe_cast(object); + fieldNode = gameObj ? gameObj.GetEntity() : MAX_EID; + return true; + } + } + else + { + Debug::Log("No Specialization"); + if (object->GetType() == FieldType::typeid) + { + FieldType value = safe_cast(object); + fieldNode = static_cast(value); + return true; + } + } + + return false; + } + + /*---------------------------------------------------------------------------------*/ + /* Deserialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + template + bool SerialisationUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + return fieldAssignYaml>(fieldInfo, object, node); + } + + template + bool SerialisationUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + { + if (fieldInfo->FieldType == FieldType::typeid) + { + fieldInfo->SetValue(object, node.as()); + return true; + } + + return false; + } +} diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx b/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx new file mode 100644 index 00000000..93d88248 --- /dev/null +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx @@ -0,0 +1,74 @@ +/************************************************************************************//*! +\file SerialisationUtilities.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 6, 2021 +\brief Contains the definition of the managed SerialisationUtilities static + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2021 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include +// Project Includes +#include "Math/Vector2.hxx" +#include "Math/Vector3.hxx" +#include "Engine/GameObject.hxx" + +namespace SHADE +{ + /// + /// Contains useful static functions for working with Serialisation of Managed data. + /// + private ref class SerialisationUtilities abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Serialisation Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Creates a JSON node that represents the specified object and its associated + /// serialisable fields. Public fields and fields marked with the SerialiseField + /// attribute will be serialised. + /// + /// The object to serialise. + static void Serialise(System::Object^ object, YAML::Node& yamlNode); + /// + /// Deserialises a YAML node that contains a map of Scripts and copies the + /// deserialised data into the specified object if there are matching fields. + /// + /// + /// The JSON string that contains the data to copy into this Script object. + /// + /// The object to copy deserialised data into. + static void Deserialise(System::Object^ object, YAML::Node& yamlNode); + + private: + /*-----------------------------------------------------------------------------*/ + /* Serialization Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void writeFieldIntoYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& yamlNode); + template + static bool fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode); + static bool varInsertYaml(System::Object^ object, YAML::Node& fieldNode); + template + static bool varInsertYamlInternal(System::Object^ object, YAML::Node& fieldNode); + + /*-----------------------------------------------------------------------------*/ + /* Deserialization Helper Functions */ + /*-----------------------------------------------------------------------------*/ + static void writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + template + static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + template + static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + }; +} + +#include "SerialisationUtilities.h++" \ No newline at end of file From e2bcb0bbbbc192dd121189257c5eeeabaac4dda5 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sat, 12 Nov 2022 23:57:12 +0800 Subject: [PATCH 756/793] play pause stop bound to F5 F6 F7 --- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 25 +-------- SHADE_Engine/src/Editor/SHEditor.cpp | 56 ++++++++++++++++++- SHADE_Engine/src/Editor/SHEditor.h | 4 ++ 3 files changed, 62 insertions(+), 23 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index fdde55e1..ce3ca8b5 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -223,39 +223,20 @@ namespace SHADE { if(editor->SaveScene()) { - const SHEditorStateChangeEvent STATE_CHANGE_EVENT - { - .previousState = editor->editorState - }; - editor->editorState = SHEditor::State::PLAY; - SHCommandManager::SwapStacks(); - SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); + editor->Play(); } } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE); if(ImGui::SmallButton(ICON_MD_PAUSE)) { - const SHEditorStateChangeEvent STATE_CHANGE_EVENT - { - .previousState = editor->editorState - }; - editor->editorState = SHEditor::State::PAUSE; - - SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PAUSE_EVENT); + editor->Pause(); } ImGui::EndDisabled(); ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP); if(ImGui::SmallButton(ICON_MD_STOP)) { - const SHEditorStateChangeEvent STATE_CHANGE_EVENT - { - .previousState = editor->editorState - }; - editor->editorState = SHEditor::State::STOP; - SHCommandManager::SwapStacks(); - SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); - editor->LoadScene(SHSceneManager::GetCurrentSceneAssetID()); + editor->Stop(); } ImGui::EndDisabled(); ImGui::EndMenuBar(); diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index c4ad3459..90655a62 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -168,7 +168,19 @@ namespace SHADE { SHCommandManager::UndoCommand(); } - + if(ImGui::IsKeyReleased(ImGuiKey_F5)) + { + Play(); + } + else if (ImGui::IsKeyReleased(ImGuiKey_F6)) + { + Pause(); + } + else if (ImGui::IsKeyReleased(ImGuiKey_F7)) + { + Stop(); + } + Render(); } @@ -597,6 +609,48 @@ namespace SHADE } } + void SHEditor::Play() + { + if(editorState == State::PLAY) + return; + if (SaveScene()) + { + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editorState + }; + editorState = State::PLAY; + SHCommandManager::SwapStacks(); + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PLAY_EVENT); + } + } + + void SHEditor::Pause() + { + if (editorState == State::PAUSE) + return; + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editorState + }; + editorState = State::PAUSE; + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_PAUSE_EVENT); + } + + void SHEditor::Stop() + { + if (editorState == State::STOP) + return; + const SHEditorStateChangeEvent STATE_CHANGE_EVENT + { + .previousState = editorState + }; + editorState = SHEditor::State::STOP; + SHCommandManager::SwapStacks(); + SHEventManager::BroadcastEvent(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT); + LoadScene(SHSceneManager::GetCurrentSceneAssetID()); + } + void SHEditor::NewFrame() { SDL_Event event; diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 0f5a3aaa..0de7796a 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -184,6 +184,10 @@ namespace SHADE void LoadScene(AssetID const& assetID) noexcept; + void Play(); + void Pause(); + void Stop(); + // List of selected entities std::vector selectedEntities; From d98deda63d686e891a45f7575eace2c744067364 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 02:42:47 +0800 Subject: [PATCH 757/793] Implemented deserialization of lists --- .../src/Serialisation/ReflectionUtilities.cxx | 9 +- .../src/Serialisation/ReflectionUtilities.hxx | 6 + .../Serialisation/SerialisationUtilities.cxx | 147 ++++++++++-------- .../Serialisation/SerialisationUtilities.h++ | 91 +++++++++-- .../Serialisation/SerialisationUtilities.hxx | 7 +- 5 files changed, 172 insertions(+), 88 deletions(-) diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx index 3bdbe90e..f371686c 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.cxx @@ -41,7 +41,12 @@ namespace SHADE bool ReflectionUtilities::FieldIsList(System::Reflection::FieldInfo^ fieldInfo) { - return fieldInfo->FieldType->IsGenericType - && fieldInfo->FieldType->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition(); + return IsList(fieldInfo->FieldType); + } + + bool ReflectionUtilities::IsList(System::Type^ type) + { + return type->IsGenericType + && type->GetGenericTypeDefinition() == System::Collections::Generic::List::typeid->GetGenericTypeDefinition(); } } diff --git a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx index ffdc208f..ae66cc34 100644 --- a/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/ReflectionUtilities.hxx @@ -45,5 +45,11 @@ namespace SHADE /// The field to check. /// True if fieldInfo is describing a generic List. static bool FieldIsList(System::Reflection::FieldInfo^ fieldInfo); + /// + /// Checks if the specified type is a generic List type. + /// + /// The type to check. + /// True if type is a generic List. + static bool IsList(System::Type^ type); }; } \ No newline at end of file diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx index e8a4e0e3..20880947 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx @@ -173,79 +173,88 @@ namespace SHADE varInsertYamlInternal(object, fieldNode); return INSERTED; } - - void SerialisationUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) + + /*---------------------------------------------------------------------------------*/ + /* Deserialization Helper Functions */ + /*---------------------------------------------------------------------------------*/ + bool SerialisationUtilities::writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) { - if (fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml(fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node) || - fieldAssignYaml (fieldInfo, object, node)) + const bool ASSIGNED = + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml(fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node) || + fieldAssignYaml (fieldInfo, object, node); + if (!ASSIGNED) { - return; - } - else if (fieldInfo->FieldType->IsSubclassOf(System::Enum::typeid)) - { - fieldInfo->SetValue(object, node.as()); - } - else if (fieldInfo->FieldType == System::String::typeid) - { - fieldInfo->SetValue(object, Convert::ToCLI(node.as())); - } - else if (fieldInfo->FieldType == Vector2::typeid) - { - if (node.IsSequence() && node.size() == 2) + if (ReflectionUtilities::FieldIsList(fieldInfo)) { - Vector2 vec; - vec.x = node[0].as(); - vec.y = node[1].as(); - fieldInfo->SetValue(object, vec); - } - else - { - Debug::LogWarning - ( - System::String::Format("[SerialisationUtilities] Invalid YAML Node provided for deserialization of a Vector2 \"{0}\" field in \"{1}\" script.", - fieldInfo->Name, object->GetType()->FullName) - ); + System::Type^ elemType = fieldInfo->FieldType->GenericTypeArguments[0]; + System::Collections::IList^ iList = safe_cast(fieldInfo->GetValue(object)); + if (node.IsSequence()) + { + // Get list size + const int LIST_SIZE = static_cast(node.size()); + if (LIST_SIZE > 0) + { + // Get list type + array^ typeList = gcnew array{ elemType }; + System::Type^ listType = System::Collections::Generic::List::typeid->GetGenericTypeDefinition()->MakeGenericType(typeList); + // Create a list of the specified type + array^ params = gcnew array{ node.size() }; + object = System::Activator::CreateInstance(listType, params); + System::Collections::IList^ list = safe_cast(object); + + // Populate the list + for (int i = 0; i < LIST_SIZE; ++i) + { + // Create the object + System::Object^ obj = System::Activator::CreateInstance(elemType); + + // Set it's value + if (varAssignYaml(obj, node[i])) + { + list->Add(obj); + } + } + } + } + + return true; } } - else if (fieldInfo->FieldType == Vector3::typeid) - { - if (node.IsSequence() && node.size() == 3) - { - Vector3 vec; - vec.x = node[0].as(); - vec.y = node[1].as(); - vec.z = node[2].as(); - fieldInfo->SetValue(object, vec); - } - else - { - Debug::LogWarning - ( - System::String::Format("[SerialisationUtilities] Invalid YAML Node provided for deserialization of a Vector3 \"{0}\" field in \"{1}\" script.", - fieldInfo->Name, object->GetType()->FullName) - ); - } - } - else if (fieldInfo->FieldType == GameObject::typeid) - { - const uint32_t EID = node.as(); - fieldInfo->SetValue(object, EID == MAX_EID ? GameObject() : GameObject(EID)); - } - else // Not any of the supported types - { - Debug::LogWarning(Convert::ToNative(System::String::Format - ( - "[SerialisationUtilities] Failed to parse \"{0}\" of \"{1}\" type for deserialisation.", - fieldInfo->Name, fieldInfo->FieldType) - )); - } + + return ASSIGNED; + } + + bool SerialisationUtilities::varAssignYaml(System::Object^% object, YAML::Node& node) + { + const bool DESERIALISED = + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal(object, node) || + varAssignYamlInternal(object, node) || + varAssignYamlInternal(object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal(object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node) || + varAssignYamlInternal (object, node); + return DESERIALISED; } } diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ index 93a14401..c1728fe6 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ @@ -36,7 +36,6 @@ namespace SHADE { if constexpr (std::is_same_v) { - Debug::Log("Enum Specialization"); if (object->GetType()->IsSubclassOf(System::Enum::typeid)) { fieldNode = std::to_string(safe_cast(object)); @@ -45,7 +44,6 @@ namespace SHADE } else if constexpr (std::is_same_v) { - Debug::Log("String Specialization"); if (object->GetType() == System::String::typeid) { System::String^ str = safe_cast(object); @@ -55,7 +53,6 @@ namespace SHADE } else if constexpr (std::is_same_v) { - Debug::Log("Vec2 Specialization"); if (object->GetType() == Vector2::typeid) { Vector2 vec = safe_cast(object); @@ -67,7 +64,6 @@ namespace SHADE } else if constexpr (std::is_same_v) { - Debug::Log("Vec3 Specialization"); if (object->GetType() == Vector3::typeid) { Vector3 vec = safe_cast(object); @@ -80,7 +76,6 @@ namespace SHADE } else if constexpr (std::is_same_v) { - Debug::Log("GameObject Specialization"); if (object->GetType() == GameObject::typeid) { GameObject gameObj = safe_cast(object); @@ -90,7 +85,6 @@ namespace SHADE } else { - Debug::Log("No Specialization"); if (object->GetType() == FieldType::typeid) { FieldType value = safe_cast(object); @@ -108,18 +102,87 @@ namespace SHADE template bool SerialisationUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) { - return fieldAssignYaml>(fieldInfo, object, node); - } - - template - bool SerialisationUtilities::fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node) - { - if (fieldInfo->FieldType == FieldType::typeid) + System::Object^ valueObj = fieldInfo->GetValue(object); + if (varAssignYamlInternal(valueObj, node)) { - fieldInfo->SetValue(object, node.as()); + fieldInfo->SetValue(object, valueObj); return true; } return false; } + + template + bool SerialisationUtilities::varAssignYamlInternal(System::Object^% object, YAML::Node& node) + { + if constexpr (std::is_same_v) + { + if (object->GetType()->IsSubclassOf(System::Enum::typeid)) + { + object = node.as(); + return true; + } + } + else if constexpr (std::is_same_v) + { + if (ReflectionUtilities::FieldIsList(fieldInfo)) + { + System::Collections::IList^ iList = safe_cast(object); + object = gcnew + if (node.IsSequence() ) + + } + } + else + { + if (object->GetType() == FieldType::typeid) + { + if constexpr (std::is_same_v) + { + object = Convert::ToCLI(node.as()); + } + else if constexpr (std::is_same_v) + { + if (node.IsSequence() && node.size() == 2) + { + Vector2 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + object = vec; + } + else + { + return false; + } + } + else if constexpr (std::is_same_v) + { + if (node.IsSequence() && node.size() == 3) + { + Vector3 vec; + vec.x = node[0].as(); + vec.y = node[1].as(); + vec.z = node[2].as(); + object = vec; + } + else + { + return false; + } + } + else if constexpr (std::is_same_v) + { + const uint32_t EID = node.as(); + object = (EID == MAX_EID ? GameObject() : GameObject(EID)); + } + else + { + object = node.as(); + } + return true; + } + } + + return false; + } } diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx b/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx index 93d88248..5b6fc69e 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.hxx @@ -63,11 +63,12 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Deserialization Helper Functions */ /*-----------------------------------------------------------------------------*/ - static void writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + static bool writeYamlIntoField(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); template static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); - template - static bool fieldAssignYaml(System::Reflection::FieldInfo^ fieldInfo, Object^ object, YAML::Node& node); + static bool varAssignYaml(System::Object^% object, YAML::Node& node); + template> + static bool varAssignYamlInternal(System::Object^% object, YAML::Node& node); }; } From 26e0e72b259311ba6ee19aca004bc98fc63c1cb5 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 04:57:10 +0800 Subject: [PATCH 758/793] Fixed lists not deserialising correctly --- SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx index 20880947..147591a5 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.cxx @@ -212,8 +212,10 @@ namespace SHADE System::Type^ listType = System::Collections::Generic::List::typeid->GetGenericTypeDefinition()->MakeGenericType(typeList); // Create a list of the specified type array^ params = gcnew array{ node.size() }; - object = System::Activator::CreateInstance(listType, params); - System::Collections::IList^ list = safe_cast(object); + System::Collections::IList^ list = safe_cast + ( + System::Activator::CreateInstance(listType, params) + ); // Populate the list for (int i = 0; i < LIST_SIZE; ++i) @@ -227,6 +229,7 @@ namespace SHADE list->Add(obj); } } + fieldInfo->SetValue(object, list); } } From 4d0598a7f539b2a32c1a2f2209acf7cc2bbb6fd5 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 13 Nov 2022 05:19:46 +0800 Subject: [PATCH 759/793] Added Editor Camera Arm function --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 96 ++++++++++------------ SHADE_Engine/src/Camera/SHCameraSystem.h | 10 +-- 2 files changed, 48 insertions(+), 58 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 60e66df6..62750d16 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -60,64 +60,49 @@ namespace SHADE camera.dirtyView = true; } + + + UpdateCameraComponent(editorCamera); + + if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::LEFT_ALT)) + { + UpdateEditorArm(dt, true, SHVec3{ 0.0f }); + } + UpdateEditorArm(dt, false, SHVec3{ 0.0f }); } - void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept - { - SHCameraSystem* system = static_cast(GetSystem()); - auto& camera = system->editorCamera; - SHVec3 view, right, UP; - system->GetCameraAxis(camera, view, right, UP); - if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) + void SHCameraSystem::UpdateEditorArm(double dt,bool active ,SHVec3 const& targetPos) noexcept + { + if (active == false) { - //std::cout << "Camera movement: "<UpdateCameraComponent(system->editorCamera); - system->DecomposeViewMatrix(camera.viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position); - } + + editorCameraArm.armLength += SHInputManager::GetMouseWheelVerticalDelta() * dt; + + if (editorCameraArm.armLength < 1.0f) + editorCameraArm.armLength = 1.0f; + + UpdatePivotArmComponent(editorCameraArm); + + editorCamera.offset = editorCameraArm.GetOffset(); + + CameraLookAt(editorCamera, targetPos); + + } + void SHCameraSystem::Init(void) { @@ -164,6 +149,9 @@ namespace SHADE void SHCameraSystem::UpdateCameraComponent(SHCameraComponent& camera) noexcept { + if (camera.isActive == false) + return; + if (SHComponentManager::HasComponent(camera.GetEID()) == true && &camera != &editorCamera) { auto transform = SHComponentManager::GetComponent(camera.GetEID()); @@ -183,11 +171,17 @@ namespace SHADE if (SHComponentManager::HasComponent(camera.GetEID())) { auto arm = SHComponentManager::GetComponent(camera.GetEID()); - camera.offset = arm->GetOffset(); - if(arm->lookAtCameraOrigin) - CameraLookAt(camera, camera.position); + if (arm->isActive == true) + { + camera.offset = arm->GetOffset(); + if (arm->lookAtCameraOrigin) + CameraLookAt(camera, camera.position); + } + } + + SHVec3 view, right, UP; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 98fd442f..fc6e9166 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -5,6 +5,7 @@ #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/SHResourceLibrary.h" #include "SHCameraDirector.h" +#include "SHCameraArmComponent.h" #include "SH_API.h" namespace SHADE @@ -18,6 +19,7 @@ namespace SHADE //A camera component that represents editor camera. //This is not tied to any entity. Hence this EID should not be used. SHCameraComponent editorCamera; + SHCameraArmComponent editorCameraArm; SHResourceLibrary directorLibrary; std::vector directorHandleList; @@ -34,14 +36,7 @@ namespace SHADE void Init (void); void Exit (void); - class SH_API EditorCameraUpdate final : public SHSystemRoutine - { - public: - EditorCameraUpdate() : SHSystemRoutine("Editor Camera Update", true) { }; - virtual void Execute(double dt) noexcept override final; - - }; friend class EditorCameraUpdate; class SH_API CameraSystemUpdate final: public SHSystemRoutine @@ -63,6 +58,7 @@ namespace SHADE void DecomposeViewMatrix(SHMatrix const& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept; void SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept; void CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept; + void UpdateEditorArm(double dt,bool active ,SHVec3 const& targetPos) noexcept; }; From 258c07e8578d956aefa948795b08ce763c2ee61d Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 13 Nov 2022 05:31:18 +0800 Subject: [PATCH 760/793] Added helper functions to check if Scene nodes are active --- SHADE_Engine/src/Scene/SHSceneManager.h | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/SHADE_Engine/src/Scene/SHSceneManager.h b/SHADE_Engine/src/Scene/SHSceneManager.h index 23d13261..8f03b352 100644 --- a/SHADE_Engine/src/Scene/SHSceneManager.h +++ b/SHADE_Engine/src/Scene/SHSceneManager.h @@ -21,6 +21,7 @@ #include "SH_API.h" #include "ECS_Base/General/SHFamily.h" #include "Assets/SHAssetMacros.h" +#include "ECS_Base/Managers/SHComponentManager.h" namespace SHADE { @@ -116,6 +117,56 @@ namespace SHADE sceneChanged = true; } + /******************************************************************** + * \brief + * Check if the Entity's scene node is active and all the + * components specified are active. + * This does not check if the entity HasComponent. Please use + * CheckNodeAndHasComponentActive for that. + * \param eid + * EntityID of the entity to check for. + * \return + * true if scene node is active and all the components specified + * are also active. + ********************************************************************/ + template + static std::enable_if_t<(... && std::is_base_of_v), bool> CheckNodeAndComponentsActive(EntityID eid) + { + return CheckNodeActive(eid) && (... && SHComponentManager::GetComponent_s(eid)->isActive); + } + + /******************************************************************** + * \brief + * Check if the Entity's scene node is active and all the + * components specified are active. + * This also checks to verify that the entity has such components. + * \param eid + * EntityID of the entity to check for. + * \return + * true if scene node is active and all the components specified + * are also active. + ********************************************************************/ + template + static std::enable_if_t<(... && std::is_base_of_v), bool> CheckNodeAndHasComponentsActive(EntityID eid) + { + return CheckNodeActive(eid) + && (... && SHComponentManager::HasComponent(eid)) + && (... && SHComponentManager::GetComponent_s(eid)->isActive); + } + + /******************************************************************** + * \brief + * Check if Scene node is active. + * \param eid + * EntityID of the entity to check for. + * \return + * true if scene node is active + ********************************************************************/ + static bool CheckNodeActive(EntityID eid) + { + return GetCurrentSceneGraph().IsActiveInHierarchy(eid); + } + /*!************************************************************************* * \brief From efed33ce94b5cb3c2034a5ca502e999870434098 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Sun, 13 Nov 2022 05:45:43 +0800 Subject: [PATCH 761/793] Added code to test EditorCameraArm. --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 62750d16..8f886926 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -7,13 +7,15 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Transform/SHTransformComponent.h" #include - +#include "Scene/SHSceneManager.h" namespace SHADE { void SHCameraSystem::UpdateEditorCamera(double dt) noexcept { + + auto& camera = editorCamera; SHVec3 view, right, UP; GetCameraAxis(camera, view, right, UP); @@ -60,17 +62,15 @@ namespace SHADE camera.dirtyView = true; } - - - UpdateCameraComponent(editorCamera); - - if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::LEFT_ALT)) + if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_ALT)) { UpdateEditorArm(dt, true, SHVec3{ 0.0f }); } - UpdateEditorArm(dt, false, SHVec3{ 0.0f }); + else + UpdateEditorArm(dt, false, SHVec3{ 0.0f }); + } void SHCameraSystem::UpdateEditorArm(double dt,bool active ,SHVec3 const& targetPos) noexcept @@ -81,16 +81,21 @@ namespace SHADE return; } - + editorCamera.SetPosition(targetPos); double mouseX, mouseY; SHInputManager::GetMouseVelocity(&mouseX, &mouseY); editorCameraArm.pitch -= mouseY * dt * editorCamera.turnSpeed.x; editorCameraArm.yaw -= mouseX * dt * editorCamera.turnSpeed.y; - + constexpr float pitchClamp = 85.0f; - editorCameraArm.armLength += SHInputManager::GetMouseWheelVerticalDelta() * dt; + if (editorCameraArm.pitch > pitchClamp) + editorCameraArm.pitch = pitchClamp; + if (editorCameraArm.pitch < -pitchClamp) + editorCameraArm.pitch = -pitchClamp; + + editorCameraArm.armLength -= SHInputManager::GetMouseWheelVerticalDelta() * dt; if (editorCameraArm.armLength < 1.0f) editorCameraArm.armLength = 1.0f; @@ -281,12 +286,14 @@ namespace SHADE for (auto& pivot : pivotDense) { - system->UpdatePivotArmComponent(pivot); + if(SHSceneManager::CheckNodeAndComponentsActive(pivot.GetEID())) + system->UpdatePivotArmComponent(pivot); } for (auto& cam : dense) { - system->UpdateCameraComponent(cam); + if (SHSceneManager::CheckNodeAndComponentsActive(cam.GetEID())) + system->UpdateCameraComponent(cam); } for (auto& handle : system->directorHandleList) { From 19f0c0ea7022748a3e22b89ed6128652c02ce0e3 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 13 Nov 2022 11:43:08 +0800 Subject: [PATCH 762/793] Copy/Paste of entities can now be undone Fixed bug where Shift Select would reset in a duplicate entity selection Moved editor window manager to its own file. --- .../AssetBrowser/SHAssetBrowser.cpp | 1 + .../HierarchyPanel/SHHierarchyPanel.cpp | 74 +++++++----------- .../HierarchyPanel/SHHierarchyPanel.h | 30 -------- .../SHHierarchyPanelCommands.cpp | 63 +++++++++++++++ .../HierarchyPanel/SHHierarchyPanelCommands.h | 55 +++++++++++++ .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 2 +- .../EditorWindow/SHEditorWindowManager.cpp | 8 ++ .../EditorWindow/SHEditorWindowManager.h | 77 +++++++++++++++++++ .../src/Editor/Gizmos/SHTransformGizmo.cpp | 2 + SHADE_Engine/src/Editor/SHEditor.cpp | 3 +- SHADE_Engine/src/Editor/SHEditor.h | 66 ---------------- .../src/Serialization/SHSerialization.cpp | 72 ++++++++++++----- .../src/Serialization/SHSerialization.h | 14 +++- 13 files changed, 300 insertions(+), 167 deletions(-) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h create mode 100644 SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 37521581..889c24cc 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -13,6 +13,7 @@ #include "Editor/SHEditor.h" #include "Editor/DragDrop/SHDragDrop.hpp" #include "Editor/EditorWindow/MaterialInspector/SHMaterialInspector.h" +#include "Editor/EditorWindow/SHEditorWindowManager.h" namespace SHADE { diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index ff65ba58..07446115 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -15,6 +15,7 @@ #include "Editor/DragDrop/SHDragDrop.hpp" #include "Tools/SHException.h" #include "Editor/IconsMaterialDesign.h" +#include "SHHierarchyPanelCommands.h" //#==============================================================# //|| Library Includes || @@ -110,9 +111,12 @@ namespace SHADE } if(ImGui::IsWindowHovered() && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { - ParentSelectedEntities(MAX_EID, draggingEntities); - draggingEntities.clear(); - ImGui::ClearDragDrop(); + if(ImGui::IsDragDropActive()) + { + ParentSelectedEntities(MAX_EID, draggingEntities); + draggingEntities.clear(); + ImGui::ClearDragDrop(); + } } ImGui::End(); } @@ -282,9 +286,12 @@ namespace SHADE } else editor->selectedEntities.clear(); } - else if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) - editor->selectedEntities.clear(); - editor->selectedEntities.push_back(eid); + else + { + if (!ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + editor->selectedEntities.clear(); + editor->selectedEntities.push_back(eid); + } }//if not selected else { @@ -365,14 +372,16 @@ namespace SHADE if (eid == beginEID || eid == endEID) { startSelecting = true; - editor->selectedEntities.push_back(eid); + if(std::ranges::find(editor->selectedEntities, eid) == editor->selectedEntities.end()) + editor->selectedEntities.push_back(eid); } } else { if (!endSelecting) { - editor->selectedEntities.push_back(eid); + if (std::ranges::find(editor->selectedEntities, eid) == editor->selectedEntities.end()) + editor->selectedEntities.push_back(eid); if (eid == endEID || eid == beginEID) { endSelecting = true; @@ -397,47 +406,20 @@ namespace SHADE void SHHierarchyPanel::CopySelectedEntities() { const auto editor = SHSystemManager::GetSystem(); - SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + std::vector entitiesToCopy{}; + std::ranges::copy_if(editor->selectedEntities, std::back_inserter(entitiesToCopy), [&sceneGraph](EntityID const& eid) + { + if(sceneGraph.GetParent(eid)->GetEntityID() == MAX_EID) + return true; + return false; + }); + SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(entitiesToCopy)); } void SHHierarchyPanel::PasteEntities(EntityID parentEID) { - SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); - } - - void SHCreateEntityCommand::Execute() - { - EntityID newEID = SHEntityManager::CreateEntity(eid); - if (eid == MAX_EID) - eid = newEID; - } - - void SHCreateEntityCommand::Undo() - { - SHEntityManager::DestroyEntity(eid); - } - - void SHEntityParentCommand::Execute() - { - auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for (auto const& eid : entities) - { - if (entityParentData[eid].newParentEID == MAX_EID) - sceneGraph.SetParent(eid, nullptr); - else - sceneGraph.SetParent(eid, entityParentData[eid].newParentEID); - } - } - - void SHEntityParentCommand::Undo() - { - auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for (auto const& eid : entities) - { - if (entityParentData[eid].oldParentEID == MAX_EID) - sceneGraph.SetParent(eid, nullptr); - else - sceneGraph.SetParent(eid, entityParentData[eid].oldParentEID); - } + //SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), parentEID).front()); + SHCommandManager::PerformCommand(std::make_shared(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); } }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 64f841d6..b667bae7 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -10,7 +10,6 @@ #include "imgui_internal.h" #include "ECS_Base/SHECSMacros.h" #include "Editor/EditorWindow/SHEditorWindow.h" -#include "Editor/Command/SHCommand.hpp" namespace SHADE { class SHSceneNode; @@ -41,33 +40,4 @@ namespace SHADE };//class SHHierarchyPanel - //Might move to a different file - class SHCreateEntityCommand final : public SHBaseCommand - { - public: - void Execute() override; - void Undo() override; - private: - EntityID eid = MAX_EID; - }; - - class SHEntityParentCommand final : public SHBaseCommand - { - public: - struct Data - { - EntityID oldParentEID = MAX_EID; - EntityID newParentEID = MAX_EID; - }; - using EntityParentData = std::unordered_map; - - SHEntityParentCommand(std::vector entityIDs, EntityParentData inEntityParentData):entities(entityIDs),entityParentData(inEntityParentData){} - - void Execute() override; - void Undo() override; - private: - std::vector entities; - std::unordered_map entityParentData; - }; - }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp new file mode 100644 index 00000000..dfae969e --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp @@ -0,0 +1,63 @@ +#include "SHpch.h" +#include "SHHierarchyPanelCommands.h" +#include "ECS_Base/Managers/SHEntityManager.h" +#include "Scene/SHSceneManager.h" +#include "Serialization/SHSerialization.h" +#include "SHHierarchyPanel.h" +#include "Editor/EditorWindow/SHEditorWindowManager.h" + +namespace SHADE +{ + void SHCreateEntityCommand::Execute() + { + EntityID newEID = SHEntityManager::CreateEntity(eid); + if (eid == MAX_EID) + eid = newEID; + } + + void SHCreateEntityCommand::Undo() + { + SHEntityManager::DestroyEntity(eid); + } + + void SHEntityParentCommand::Execute() + { + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + for (auto const& eid : entities) + { + if (entityParentData[eid].newParentEID == MAX_EID) + sceneGraph.SetParent(eid, nullptr); + else + sceneGraph.SetParent(eid, entityParentData[eid].newParentEID); + } + } + + void SHEntityParentCommand::Undo() + { + auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + for (auto const& eid : entities) + { + if (entityParentData[eid].oldParentEID == MAX_EID) + sceneGraph.SetParent(eid, nullptr); + else + sceneGraph.SetParent(eid, entityParentData[eid].oldParentEID); + } + } + + void SHPasteEntityCommand::Execute() + { + data.createdEntities.clear(); + data.createdEntities = SHSerialization::DeserializeEntitiesFromString(data.entityData, data.parentEID); + data.entityData = SHSerialization::ResolveSerializedEntityIndices(data.entityData, data.createdEntities); + SHEditorWindowManager::GetEditorWindow()->SetScrollTo(data.createdEntities.begin()->second); + } + + void SHPasteEntityCommand::Undo() + { + for (auto const& [oldEID, newEID] : data.createdEntities) + { + SHEntityManager::DestroyEntity(newEID); + } + } + +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h new file mode 100644 index 00000000..8bad9df2 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h @@ -0,0 +1,55 @@ +#pragma once + +#include + +#include "ECS_Base/SHECSMacros.h" +#include "Editor/Command/SHCommand.hpp" +#include "Serialization/SHSerialization.h" +namespace SHADE +{ + class SHCreateEntityCommand final : public SHBaseCommand + { + public: + void Execute() override; + void Undo() override; + private: + EntityID eid = MAX_EID; + }; + + class SHEntityParentCommand final : public SHBaseCommand + { + public: + struct Data + { + EntityID oldParentEID = MAX_EID; + EntityID newParentEID = MAX_EID; + }; + using EntityParentData = std::unordered_map; + + SHEntityParentCommand(std::vector entityIDs, EntityParentData inEntityParentData) :entities(entityIDs), entityParentData(inEntityParentData) {} + + void Execute() override; + void Undo() override; + private: + std::vector entities{}; + std::unordered_map entityParentData{}; + }; + + class SHPasteEntityCommand final : public SHBaseCommand + { + public: + struct Data + { + SHSerialization::CreatedEntitiesList createdEntities{}; + EntityID parentEID{MAX_EID}; + std::string entityData{}; + }; + SHPasteEntityCommand() = delete; + SHPasteEntityCommand(std::string const& serializedEntityData, EntityID parentEid = MAX_EID):data({{}, parentEid, serializedEntityData}){} + + void Execute() override; + void Undo() override; + private: + Data data; + }; +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index ce3ca8b5..223f9b83 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -23,7 +23,7 @@ #include "Scene/SHSceneManager.h" #include "Serialization/SHSerialization.h" #include "Serialization/Configurations/SHConfigurationManager.h" - +#include "Editor/EditorWindow/SHEditorWindowManager.h" const std::string LAYOUT_FOLDER_PATH{ std::string(ASSET_ROOT) + "/Editor/Layouts" }; diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.cpp b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.cpp new file mode 100644 index 00000000..420b5414 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.cpp @@ -0,0 +1,8 @@ +#include "SHpch.h" +#include "SHEditorWindowManager.h" + +namespace SHADE +{ + SHEditorWindowManager::EditorWindowMap SHEditorWindowManager::editorWindows{}; + SHEditorWindowManager::EditorWindowID SHEditorWindowManager::windowCount{}; +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.h new file mode 100644 index 00000000..9e6dd3f4 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowManager.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include "SHEditorWindow.h" +#include "Tools/SHLog.h" + +namespace SHADE +{ + class SH_API SHEditorWindowManager + { + public: + //#==============================================================# + //|| Type Aliases || + //#==============================================================# + using EditorWindowID = uint8_t; + using EditorWindowPtr = std::unique_ptr; + using EditorWindowMap = std::unordered_map; + /** + * @brief Get ID for the Editor Window Type + * + * @tparam T Type of Editor Window + * @return EditorWindowID ID of Editor Window Type + */ + template , bool> = true> + static EditorWindowID GetEditorWindowID() + { + static EditorWindowID id; + static bool idCreated = false; + if (!idCreated) + { + id = windowCount++; + idCreated = true; + } + return id; + } + + /** + * @brief Create an Editor Window + * + * @tparam T Type of Editor Window to create + */ + template , bool> = true> + static void CreateEditorWindow() + { + static bool isCreated = false; + if (!isCreated) + { + editorWindows[GetEditorWindowID()] = std::make_unique(); + isCreated = true; + } + else + { + SHLog::Warning("Attempt to create duplicate of Editor window type"); + } + } + + /** + * @brief Get pointer to the Editor Window + * + * @tparam T Type of editor window to retrieve + * @return T* Pointer to the editor window + */ + template , bool> = true> + static T* GetEditorWindow() + { + return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); + } + + static EditorWindowMap editorWindows; + private: + // Number of windows; used for Editor Window ID Generation + static EditorWindowID windowCount; + // Map of Editor Windows + friend class SHEditor; + }; +} diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index e3bbc809..deea62fc 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -11,6 +11,8 @@ #include "Camera/SHCameraSystem.h" #include "Editor/Command/SHCommandManager.h" #include "Editor/EditorWindow/ViewportWindow/SHEditorViewport.h" +#include "Editor/EditorWindow/SHEditorWindowManager.h" + namespace SHADE { void SHTransformGizmo::Init() diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 90655a62..077c7025 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -29,6 +29,7 @@ //#==============================================================# //|| Editor Window Includes || //#==============================================================# +#include "EditorWindow/SHEditorWindowManager.h" #include "EditorWindow/SHEditorWindowIncludes.h" //#==============================================================# @@ -77,8 +78,6 @@ namespace SHADE //#==============================================================# //Handle SHEditor::imguiCommandPool; //Handle SHEditor::imguiCommandBuffer; - SHEditorWindowManager::EditorWindowMap SHEditorWindowManager::editorWindows{}; - SHEditorWindowManager::EditorWindowID SHEditorWindowManager::windowCount{}; //std::vector SHEditor::selectedEntities; //#==============================================================# diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 0de7796a..5897c8b7 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -36,73 +36,7 @@ namespace SHADE class SHVkCommandBuffer; class SHVkCommandPool; - class SHEditorWindowManager - { - public: - //#==============================================================# - //|| Type Aliases || - //#==============================================================# - using EditorWindowID = uint8_t; - using EditorWindowPtr = std::unique_ptr; - using EditorWindowMap = std::unordered_map; - /** - * @brief Get ID for the Editor Window Type - * - * @tparam T Type of Editor Window - * @return EditorWindowID ID of Editor Window Type - */ - template , bool> = true> - static EditorWindowID GetEditorWindowID() - { - static EditorWindowID id; - static bool idCreated = false; - if (!idCreated) - { - id = windowCount++; - idCreated = true; - } - return id; - } - /** - * @brief Create an Editor Window - * - * @tparam T Type of Editor Window to create - */ - template , bool> = true> - static void CreateEditorWindow() - { - static bool isCreated = false; - if (!isCreated) - { - editorWindows[GetEditorWindowID()] = std::make_unique(); - isCreated = true; - } - else - { - SHLog::Warning("Attempt to create duplicate of Editor window type"); - } - } - - /** - * @brief Get pointer to the Editor Window - * - * @tparam T Type of editor window to retrieve - * @return T* Pointer to the editor window - */ - template , bool> = true> - static T* GetEditorWindow() - { - return reinterpret_cast(editorWindows[GetEditorWindowID()].get()); - } - - static EditorWindowMap editorWindows; - private: - // Number of windows; used for Editor Window ID Generation - static EditorWindowID windowCount; - // Map of Editor Windows - friend class SHEditor; - }; /** * @brief SHEditor static class contains editor variables and implementation of editor functions. diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index f2829b95..d2312627 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -61,20 +61,21 @@ namespace SHADE out << YAML::EndSeq; } - static EntityID DeserializeEntity(YAML::iterator& it, YAML::Node const& node, std::vector& createdEntities, EntityID parentEID = MAX_EID) + static EntityID DeserializeEntity(YAML::iterator& it, YAML::Node const& node, SHSerialization::CreatedEntitiesList& createdEntities, EntityID parentEID = MAX_EID) { - EntityID eid = MAX_EID; + EntityID eid{MAX_EID}, oldEID{MAX_EID}; if (!node) return eid; if (node[EIDNode]) - eid = node[EIDNode].as(); - std::string name = "Default"; + oldEID = eid = node[EIDNode].as(); + std::string name = "UnnamedEntitiy"; if (node[EntityNameNode]) name = node[EntityNameNode].as(); //Compile component IDs const auto componentIDList = SHSerialization::GetComponentIDList(node[ComponentsNode]); eid = SHEntityManager::CreateEntity(componentIDList, eid, name, parentEID); - createdEntities.push_back(eid); + createdEntities[oldEID] = eid; + //createdEntities.push_back(eid); if (node[NumberOfChildrenNode]) { if (const int numOfChildren = node[NumberOfChildrenNode].as(); numOfChildren > 0) @@ -106,7 +107,7 @@ namespace SHADE return NewSceneName.data(); } YAML::Node entities = YAML::Load(assetData->data); - std::vector createdEntities{}; + CreatedEntitiesList createdEntities{}; //Create Entities for (auto it = entities.begin(); it != entities.end(); ++it) @@ -122,14 +123,14 @@ namespace SHADE AssetQueue assetQueue; for (auto it = entities.begin(); it != entities.end(); ++it) { - SHSerializationHelper::FetchAssetsFromComponent((*it)[ComponentsNode], *entityVecIt, assetQueue); + SHSerializationHelper::FetchAssetsFromComponent((*it)[ComponentsNode], createdEntities[(*it)[EIDNode].as()], assetQueue); } LoadAssetsFromAssetQueue(assetQueue); //Initialize Entity entityVecIt = createdEntities.begin(); for (auto it = entities.begin(); it != entities.end(); ++it) { - InitializeEntity(*it, *entityVecIt++); + InitializeEntity(*it, createdEntities[(*it)[EIDNode].as()]); } return assetData->name; @@ -160,9 +161,9 @@ namespace SHADE return std::string(out.c_str()); } - void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) - { - } + //void SHSerialization::SerializeEntityToFile(std::filesystem::path const& path) + //{ + //} template, bool> = true> static void AddComponentToComponentNode(YAML::Node& componentsNode, EntityID const& eid) @@ -218,13 +219,13 @@ namespace SHADE return node; } - EntityID SHSerialization::DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID) noexcept + SHSerialization::CreatedEntitiesList SHSerialization::DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID) noexcept { if (data.empty()) - return MAX_EID; + return {}; YAML::Node entities = YAML::Load(data.c_str()); EntityID eid{ MAX_EID }; - std::vector createdEntities; + CreatedEntitiesList createdEntities{}; for (auto it = entities.begin(); it != entities.end(); ++it) { eid = DeserializeEntity(it, *it, createdEntities, parentEID); @@ -232,14 +233,14 @@ namespace SHADE if (createdEntities.empty()) { SHLOG_ERROR("Failed to create entities from deserializaiton") - return MAX_EID; + return createdEntities; } - auto entityVecIt = createdEntities.begin(); + //auto entityVecIt = createdEntities.begin(); for (auto it = entities.begin(); it != entities.end(); ++it) { - InitializeEntity(*it, *entityVecIt++); + InitializeEntity(*it, createdEntities[(*it)[EIDNode].as()]); } - return eid; + return createdEntities; } template, bool> = true> @@ -290,6 +291,41 @@ namespace SHADE SHResourceManager::FinaliseChanges(); } + void ResolveSerializedEntityID(YAML::Emitter& out, YAML::iterator& it, YAML::Node const& entityNode, SHSerialization::CreatedEntitiesList const& createdEntities) + { + EntityID eid = entityNode[EIDNode].as(); + YAML::Node resolvedNode = entityNode; + resolvedNode[EIDNode] = createdEntities.at(eid); + out << resolvedNode; + if (entityNode[NumberOfChildrenNode]) + { + if (const int numOfChildren = entityNode[NumberOfChildrenNode].as(); numOfChildren > 0) + { + ++it; + for (int i = 0; i < numOfChildren; ++i) + { + ResolveSerializedEntityID(out, it, (*it), createdEntities); + //DeserializeEntity(it, (*it), createdEntities, eid); + if ((i + 1) < numOfChildren) + ++it; + } + } + } + } + + std::string SHSerialization::ResolveSerializedEntityIndices(std::string serializedEntityData, CreatedEntitiesList const& createdEntities) noexcept + { + YAML::Node entities = YAML::Load(serializedEntityData); + YAML::Emitter out; + out << YAML::BeginSeq; + for (auto it = entities.begin(); it != entities.end(); ++it) + { + ResolveSerializedEntityID(out, it, (*it), createdEntities); + } + out << YAML::EndSeq; + return out.c_str(); + } + void SHSerialization::InitializeEntity(YAML::Node const& entityNode, EntityID const& eid) { auto const componentsNode = entityNode[ComponentsNode]; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.h b/SHADE_Engine/src/Serialization/SHSerialization.h index 3cb268f2..dd487662 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.h +++ b/SHADE_Engine/src/Serialization/SHSerialization.h @@ -2,7 +2,6 @@ #include "SH_API.h" #include -#include #include "ECS_Base/SHECSMacros.h" @@ -26,8 +25,12 @@ namespace SHADE constexpr const char* NumberOfChildrenNode = "NumberOfChildren"; constexpr const char* ScriptsNode = "Scripts"; - struct SH_API SHSerialization + class SH_API SHSerialization { + public: + //Original EID : New EID + using CreatedEntitiesList = std::unordered_map; + static bool SerializeSceneToFile(AssetID const& sceneAssetID); static std::string SerializeSceneToString(); static void SerializeSceneToEmitter(YAML::Emitter& out); @@ -38,15 +41,18 @@ namespace SHADE static void EmitEntity(SHSceneNode* entityNode, YAML::Emitter& out); static std::string SerializeEntitiesToString(std::vector const& entities) noexcept; - static void SerializeEntityToFile(std::filesystem::path const& path); + //static void SerializeEntityToFile(std::filesystem::path const& path); static YAML::Node SerializeEntityToNode(SHSceneNode* sceneNode); - static EntityID DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID = MAX_EID) noexcept; + static CreatedEntitiesList DeserializeEntitiesFromString(std::string const& data, EntityID const& parentEID = MAX_EID) noexcept; static std::vector GetComponentIDList(YAML::Node const& componentsNode); static void LoadAssetsFromAssetQueue(std::unordered_map& assetQueue); + + static std::string ResolveSerializedEntityIndices(std::string serializedEntityData, CreatedEntitiesList const& createdEntities) noexcept; private: + //static void ResolveSerializedEntityID(YAML::Emitter& out, YAML::iterator& it, YAML::Node const& entityNode, CreatedEntitiesList const& createdEntities); static void InitializeEntity(YAML::Node const& entityNode, EntityID const& eid); static constexpr std::string_view NewSceneName = "New Scene"; From fd7a47b4c01bdff66d9a5bee8ae69bb314f48f69 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 12:44:23 +0800 Subject: [PATCH 763/793] Added changes to hide internal types and constructors that should not be available to SHADE_Scripting --- SHADE_Managed/src/Components/Component.hxx | 3 +-- SHADE_Managed/src/Engine/GenericHandle.hxx | 2 +- SHADE_Managed/src/Scripts/ScriptStore.hxx | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx index e52ab3a7..a1d83eaf 100644 --- a/SHADE_Managed/src/Components/Component.hxx +++ b/SHADE_Managed/src/Components/Component.hxx @@ -110,7 +110,7 @@ namespace SHADE /// Component to check. static operator bool(BaseComponent^ c); - protected: + internal: /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ @@ -193,7 +193,6 @@ namespace SHADE /// NativeComponent* GetNativeComponent(); - protected: /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Engine/GenericHandle.hxx b/SHADE_Managed/src/Engine/GenericHandle.hxx index 3f8e395f..3d77f54d 100644 --- a/SHADE_Managed/src/Engine/GenericHandle.hxx +++ b/SHADE_Managed/src/Engine/GenericHandle.hxx @@ -21,7 +21,7 @@ namespace SHADE /// /// Managed version of the generic Handle. /// - public value struct GenericHandle + private value struct GenericHandle { public: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 23440f3d..2b2540e6 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -25,7 +25,7 @@ namespace SHADE /// Responsible for managing all scripts attached to Entities as well as executing /// all lifecycle functions of scripts. /// - public ref class ScriptStore abstract sealed + private ref class ScriptStore abstract sealed { public: /*-----------------------------------------------------------------------------*/ From a83a38eba81a2c44347149cecf9769c8a263de7c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 13:07:49 +0800 Subject: [PATCH 764/793] Fixed bin and obj folders respawning and causing engine crashes --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index f279bec1..18c2b9e3 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -17,6 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include // std::fstream #include // std::filesystem::canonical, std::filesystem::remove #include // std::shared_ptr +#include // std::this_thread::sleep_for // Project Headers #include "Tools/SHLogger.h" #include "Tools/SHStringUtils.h" @@ -25,7 +26,6 @@ of DigiPen Institute of Technology is prohibited. #include "Events/SHEventReceiver.h" #include "Events/SHEventManager.hpp" #include "Physics/SHPhysicsSystem.h" - #include "Assets/SHAssetMacros.h" namespace SHADE @@ -177,10 +177,10 @@ namespace SHADE } // Prepare directory (delete useless files) - deleteFolder(CSPROJ_DIR + "\\net5.0"); - deleteFolder(CSPROJ_DIR + "\\ref"); - deleteFolder(CSPROJ_DIR + "\\obj"); - deleteFolder(CSPROJ_DIR + "\\bin"); + deleteFolder(CSPROJ_DIR + "/net5.0"); + deleteFolder(CSPROJ_DIR + "/ref"); + deleteFolder(CSPROJ_DIR + "/obj"); + deleteFolder(CSPROJ_DIR + "/bin"); // Attempt to build the assembly std::ostringstream oss; @@ -214,7 +214,10 @@ namespace SHADE // Clean up built files deleteFolder("./tmp"); - deleteFolder(CSPROJ_DIR + "\\obj"); + deleteFolder(CSPROJ_DIR + "/bin"); + using namespace std::chrono_literals; + std::this_thread::sleep_for(50ms); // Not sure why this works but it prevents the folders from respawning + deleteFolder(CSPROJ_DIR + "/obj"); // Read the build log and output to the console dumpBuildLog(BUILD_LOG_PATH); From 635d999c2c47b781686faeb8f232ff2ece8fbaae Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 13:16:36 +0800 Subject: [PATCH 765/793] Fixed redo not working correctly --- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index 789d285d..a83db119 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -34,7 +34,8 @@ namespace SHADE bool UndoRedoStack::RedoActionPresent::get() { - return latestActionIndex >= 0 && latestActionIndex < commandStack->Count - 1; + const int REDO_ACTION_INDEX = latestActionIndex + 1; + return REDO_ACTION_INDEX >= 0 && REDO_ACTION_INDEX < commandStack->Count; } /*---------------------------------------------------------------------------------*/ @@ -69,8 +70,9 @@ namespace SHADE { if (!RedoActionPresent) return; - - ICommand^ cmd = commandStack[latestActionIndex]; + + const int REDO_ACTION_INDEX = latestActionIndex + 1; + ICommand^ cmd = commandStack[REDO_ACTION_INDEX]; cmd->Execute(); ++latestActionIndex; } From 276e0806fa8a7e89451a645f592ca73314c7cb7a Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 13 Nov 2022 13:55:30 +0800 Subject: [PATCH 766/793] Can now undo/redo entity deletion (working afaik) --- .../HierarchyPanel/SHHierarchyPanel.cpp | 30 +++++++++++++++++-- .../HierarchyPanel/SHHierarchyPanel.h | 1 + .../SHHierarchyPanelCommands.cpp | 25 ++++++++++++++-- .../HierarchyPanel/SHHierarchyPanelCommands.h | 25 +++++++++++++--- 4 files changed, 72 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 07446115..6be89a8b 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -106,6 +106,10 @@ namespace SHADE PasteEntities(editor->selectedEntities.back()); } } + if(ImGui::IsKeyReleased(ImGuiKey_Delete)) + { + DeleteSelectedEntities(); + } } } @@ -259,9 +263,10 @@ namespace SHADE PasteEntities(eid); skipFrame = true; } - if (ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) + if (ImGui::Selectable(std::format("{} Delete selected", ICON_MD_DELETE).data())) { - SHEntityManager::DestroyEntity(eid); + //SHEntityManager::DestroyEntity(eid); + DeleteSelectedEntities(); } if ((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) @@ -420,6 +425,25 @@ namespace SHADE void SHHierarchyPanel::PasteEntities(EntityID parentEID) { //SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), parentEID).front()); - SHCommandManager::PerformCommand(std::make_shared(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); + SHCommandManager::PerformCommand(std::make_shared(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); } + + void SHHierarchyPanel::DeleteSelectedEntities() + { + const auto editor = SHSystemManager::GetSystem(); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + + std::vector entitiesToDelete{}; + std::ranges::copy_if(editor->selectedEntities, std::back_inserter(entitiesToDelete), [&sceneGraph, &selectedEntities = editor->selectedEntities](EntityID const& eid) + { + EntityID parentEID = sceneGraph.GetParent(eid)->GetEntityID(); + if (parentEID == MAX_EID) + return true; + else if(std::ranges::find(selectedEntities, parentEID) == selectedEntities.end()) + return true; + return false; + }); + SHCommandManager::PerformCommand(std::make_shared(entitiesToDelete)); + } + }//namespace SHADE diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index b667bae7..66b9ca2f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -32,6 +32,7 @@ namespace SHADE void SelectAllEntities(); void CopySelectedEntities(); void PasteEntities(EntityID parentEID = MAX_EID); + void DeleteSelectedEntities(); bool skipFrame = false; std::string filter; bool isAnyNodeSelected = false; diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp index dfae969e..78545829 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.cpp @@ -44,7 +44,7 @@ namespace SHADE } } - void SHPasteEntityCommand::Execute() + void SHPasteEntitiesCommand::Execute() { data.createdEntities.clear(); data.createdEntities = SHSerialization::DeserializeEntitiesFromString(data.entityData, data.parentEID); @@ -52,7 +52,7 @@ namespace SHADE SHEditorWindowManager::GetEditorWindow()->SetScrollTo(data.createdEntities.begin()->second); } - void SHPasteEntityCommand::Undo() + void SHPasteEntitiesCommand::Undo() { for (auto const& [oldEID, newEID] : data.createdEntities) { @@ -60,4 +60,25 @@ namespace SHADE } } + void SHDeleteEntitiesCommand::Execute() + { + if(!data.createdEntities.empty()) + { + for(auto& eid : data.entitiesToDelete) + { + eid = data.createdEntities[eid]; + } + } + data.entityData = SHSerialization::SerializeEntitiesToString(data.entitiesToDelete); + for (auto const& eid : data.entitiesToDelete) + { + SHEntityManager::DestroyEntity(eid); + } + } + + void SHDeleteEntitiesCommand::Undo() + { + data.createdEntities = SHSerialization::DeserializeEntitiesFromString(data.entityData); + data.entityData = SHSerialization::ResolveSerializedEntityIndices(data.entityData, data.createdEntities); + } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h index 8bad9df2..fccd9489 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanelCommands.h @@ -35,21 +35,38 @@ namespace SHADE std::unordered_map entityParentData{}; }; - class SHPasteEntityCommand final : public SHBaseCommand + class SHPasteEntitiesCommand final : public SHBaseCommand { public: struct Data { - SHSerialization::CreatedEntitiesList createdEntities{}; EntityID parentEID{MAX_EID}; std::string entityData{}; + SHSerialization::CreatedEntitiesList createdEntities{}; }; - SHPasteEntityCommand() = delete; - SHPasteEntityCommand(std::string const& serializedEntityData, EntityID parentEid = MAX_EID):data({{}, parentEid, serializedEntityData}){} + SHPasteEntitiesCommand() = delete; + SHPasteEntitiesCommand(std::string const& serializedEntityData, EntityID parentEid = MAX_EID):data({parentEid, serializedEntityData, {}}){} void Execute() override; void Undo() override; private: Data data; }; + + class SHDeleteEntitiesCommand final : public SHBaseCommand + { + public: + struct Data + { + std::vector entitiesToDelete{}; + SHSerialization::CreatedEntitiesList createdEntities{}; + std::string entityData{}; + }; + SHDeleteEntitiesCommand() = delete; + SHDeleteEntitiesCommand(std::vector entitiesToBeDeleted): data{entitiesToBeDeleted}{} + void Execute() override; + void Undo() override; + private: + Data data; + }; } From 23320863e39de9dd661aea38a73926406fc8904b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 13:38:09 +0800 Subject: [PATCH 767/793] Added support for undo-redo of adding/removing scripts --- SHADE_Managed/src/Editor/Editor.cxx | 34 +++++++++-- SHADE_Managed/src/Editor/Editor.hxx | 22 +++---- SHADE_Managed/src/Editor/UndoRedoStack.cxx | 60 ++++++++++++++++++- SHADE_Managed/src/Editor/UndoRedoStack.hxx | 30 ++++++++++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 40 +++++++++---- SHADE_Managed/src/Scripts/ScriptStore.hxx | 31 ++++++++-- .../Serialisation/SerialisationUtilities.h++ | 11 ---- 7 files changed, 183 insertions(+), 45 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 68dddf34..7b2e0982 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -79,7 +79,10 @@ namespace SHADE if (SHEditorUI::Selectable(Convert::ToNative(type->Name))) { // Add the script - ScriptStore::AddScriptViaName(entity, type->Name); + Script^ script; + ScriptStore::AddScriptViaNameWithRef(entity, type->Name, script); + registerUndoScriptAddAction(entity, script); + break; } } @@ -120,7 +123,7 @@ namespace SHADE SHEditorUI::Indent(); { // Right Click Menu - renderScriptContextMenu(entity, script); + renderScriptContextMenu(entity, script, index); // Go through all fields and output them auto fields = ReflectionUtilities::GetInstanceFields(script); @@ -143,7 +146,7 @@ namespace SHADE } else { - renderScriptContextMenu(entity, script); + renderScriptContextMenu(entity, script, index); } SHEditorUI::PopID(); } @@ -336,7 +339,7 @@ namespace SHADE return false; } - void Editor::renderScriptContextMenu(Entity entity, Script^ script) + void Editor::renderScriptContextMenu(Entity entity, Script^ script, int scriptIndex) { // Right Click Menu if (SHEditorUI::BeginPopupContextItem("scriptContextMenu")) @@ -345,6 +348,7 @@ namespace SHADE { // Mark script for removal ScriptStore::RemoveScript(entity, script); + registerUndoScriptRemoveAction(entity, script, scriptIndex); } SHEditorUI::EndPopup(); } @@ -392,6 +396,28 @@ namespace SHADE SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); } + void Editor::registerUndoScriptAddAction(EntityID id, Script^ script) + { + if (script == nullptr) + return; + + actionStack.Add(gcnew ScriptAddCommand(id, script)); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); + } + + void Editor::registerUndoScriptRemoveAction(EntityID id, Script^ script, int originalIndex) + { + if (script == nullptr) + return; + + actionStack.Add(gcnew ScriptRemoveCommand(id, script, originalIndex)); + + // Inform the C++ Undo-Redo stack + SHCommandManager::RegisterCommand(std::reinterpret_pointer_cast(std::make_shared())); + } + generic Attribute Editor::hasAttribute(System::Reflection::FieldInfo^ field) { diff --git a/SHADE_Managed/src/Editor/Editor.hxx b/SHADE_Managed/src/Editor/Editor.hxx index 64c445e5..79625274 100644 --- a/SHADE_Managed/src/Editor/Editor.hxx +++ b/SHADE_Managed/src/Editor/Editor.hxx @@ -69,7 +69,7 @@ namespace SHADE static UndoRedoStack actionStack; /*-----------------------------------------------------------------------------*/ - /* Helper Functions */ + /* Helper Functions - Inspector Rendering */ /*-----------------------------------------------------------------------------*/ ///
    /// Renders a single specified Script's inspector. @@ -170,25 +170,25 @@ namespace SHADE /// True if the field is modified. template static bool renderFieldEditorInternal(const std::string& fieldName, interior_ptr managedValPtr, EditorFieldFunc fieldEditor, bool* isHovered, RangeAttribute^ rangeAttrib); - /// /// Renders a context menu when right clicked for the scripts /// /// The Entity to render the Scripts of. /// The Script to render the inspector for. - static void renderScriptContextMenu(Entity entity, Script^ script); - /// - /// Adds changes to a variable as an undo-able/redo-able action on the Undo-Redo - /// stack. - /// - /// The object that changes are applied to. - /// The field that was changed. - /// New data to set. - /// Data that was overriden. + /// Index at which the Script is stored. + static void renderScriptContextMenu(Entity entity, Script^ script, int scriptIndex); + /*-----------------------------------------------------------------------------*/ + /* Helper Functions - Undo */ + /*-----------------------------------------------------------------------------*/ static void registerUndoAction(System::Object^ object, System::Reflection::FieldInfo^ field, System::Object^ newData, System::Object^ oldData); static void registerUndoListChangeAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ newData, System::Object^ oldData); static void registerUndoListAddAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data); static void registerUndoListRemoveAction(System::Type^ type, System::Collections::IList^ list, int index, System::Object^ data); + static void registerUndoScriptAddAction(EntityID id, Script^ script); + static void registerUndoScriptRemoveAction(EntityID id, Script^ script, int originalIndex); + /*-----------------------------------------------------------------------------*/ + /* Helper Functions - Others */ + /*-----------------------------------------------------------------------------*/ /// /// Checks if a specific field has the specified attribute /// diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.cxx b/SHADE_Managed/src/Editor/UndoRedoStack.cxx index a83db119..3d1f04e9 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.cxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.cxx @@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited. // Project Headers #include "Utility/Debug.hxx" #include "Utility/Convert.hxx" +#include "Scripts/ScriptStore.hxx" namespace SHADE { @@ -182,7 +183,7 @@ namespace SHADE } /*---------------------------------------------------------------------------------*/ - /* ListElementAddCommand - ICommand Functions */ + /* ListElementAddCommand - Constructor */ /*---------------------------------------------------------------------------------*/ ListElementAddCommand::ListElementAddCommand(System::Collections::IList^ list, int addIndex, System::Object^ data) : list { list } @@ -222,7 +223,7 @@ namespace SHADE } /*---------------------------------------------------------------------------------*/ - /* ListElementRemoveCommand - ICommand Functions */ + /* ListElementRemoveCommand - Constructor */ /*---------------------------------------------------------------------------------*/ ListElementRemoveCommand::ListElementRemoveCommand(System::Collections::IList^ list, int removeIndex, System::Object^ data) : list { list } @@ -260,4 +261,59 @@ namespace SHADE // Not allowed return false; } + + /*---------------------------------------------------------------------------------*/ + /* ScriptAddCommand - Constructor */ + /*---------------------------------------------------------------------------------*/ + ScriptAddCommand::ScriptAddCommand(EntityID id, Script^ script) + : entity { id } + , addedScript { script } + {} + + /*---------------------------------------------------------------------------------*/ + /* ScriptAddCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + bool ScriptAddCommand::Execute() + { + return ScriptStore::AddScript(entity, addedScript) != nullptr; + } + + bool ScriptAddCommand::Unexceute() + { + return ScriptStore::RemoveScript(entity, addedScript); + } + + bool ScriptAddCommand::Merge(ICommand^) + { + // Not allowed + return false; + } + + /*---------------------------------------------------------------------------------*/ + /* ScriptRemoveCommand - Constructor */ + /*---------------------------------------------------------------------------------*/ + ScriptRemoveCommand::ScriptRemoveCommand(EntityID id, Script^ script, int index) + : entity { id } + , removedScript { script } + , originalIndex { index } + {} + + /*---------------------------------------------------------------------------------*/ + /* ScriptRemoveCommand - ICommand Functions */ + /*---------------------------------------------------------------------------------*/ + bool ScriptRemoveCommand::Execute() + { + return ScriptStore::RemoveScript(entity, removedScript); + } + + bool ScriptRemoveCommand::Unexceute() + { + return ScriptStore::AddScript(entity, removedScript, originalIndex) != nullptr; + } + + bool ScriptRemoveCommand::Merge(ICommand^) + { + // Not allowed + return false; + } } diff --git a/SHADE_Managed/src/Editor/UndoRedoStack.hxx b/SHADE_Managed/src/Editor/UndoRedoStack.hxx index dea458bc..c377e2b7 100644 --- a/SHADE_Managed/src/Editor/UndoRedoStack.hxx +++ b/SHADE_Managed/src/Editor/UndoRedoStack.hxx @@ -12,6 +12,7 @@ Reproduction or disclosure of this file or its contents without the prior writte of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once +#include "Scripts/Script.hxx" namespace SHADE { @@ -102,6 +103,35 @@ namespace SHADE System::Object^ data; }; + private ref class ScriptAddCommand sealed : public ICommand + { + public: + ScriptAddCommand(EntityID id, Script^ script); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + EntityID entity; + Script^ addedScript; + }; + + private ref class ScriptRemoveCommand sealed : public ICommand + { + public: + ScriptRemoveCommand(EntityID id, Script^ script, int index); + + bool Execute() override; + bool Unexceute() override; + bool Merge(ICommand^ command) override; + + private: + EntityID entity; + Script^ removedScript; + int originalIndex; + }; + /// /// Class that is able to store a stack of actions that can be done and redone. /// diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index d11e70c3..b42f7508 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -38,6 +38,20 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ generic T ScriptStore::AddScript(Entity entity) + { + // Create the script and add it in + array^ params = gcnew array{GameObject(entity)}; + Script^ script = safe_cast(System::Activator::CreateInstance(T::typeid, params)); + + return safe_cast(AddScript(entity, script)); + } + + Script^ ScriptStore::AddScript(Entity entity, Script^ script) + { + return AddScript(entity, script, System::Int32::MaxValue); + } + + Script^ ScriptStore::AddScript(Entity entity, Script^ script, int index) { // Check if entity exists if (!EntityUtils::IsValid(entity)) @@ -57,15 +71,13 @@ namespace SHADE entityScriptList = scripts[entity]; } - // Create the script and add it in - array^ params = gcnew array{GameObject(entity)}; - Script^ script = safe_cast(System::Activator::CreateInstance(T::typeid, params)); - entityScriptList->Add(script); + // Add the script in + entityScriptList->Insert(System::Math::Clamp(index, 0, entityScriptList->Count), script); awakeList.Add(script); startList.Add(script); script->OnAttached(); - return safe_cast(script); + return script; } bool ScriptStore::AddScriptViaName(Entity entity, System::String^ scriptName) @@ -364,7 +376,10 @@ namespace SHADE } } startList.Clear(); - startList.AddRange(%inactiveStartList); + for each (Script ^ script in startList) + { + startList.Add(script); + } inactiveStartList.Clear(); SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") @@ -373,9 +388,8 @@ namespace SHADE { SAFE_NATIVE_CALL_BEGIN // Clear the queue - while (disposalQueue.Count > 0) - { - Script^ script = disposalQueue.Dequeue(); + for each (Script^ script in disposalQueue) + {; if (Application::IsPlaying) { script->OnDestroy(); @@ -388,6 +402,7 @@ namespace SHADE scripts.Remove(entity); } } + disposalQueue.Clear(); SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") } void ScriptStore::Exit() @@ -677,9 +692,9 @@ namespace SHADE void ScriptStore::removeScript(Script^ script) { // Prepare for disposal - disposalQueue.Enqueue(script); + disposalQueue.Add(script); - // Also remove it fromm awake and start queues if they were created but not initialised + // Also remove it from awake and start queues if they were created but not initialised awakeList.Remove(script); startList.Remove(script); script->OnDetached(); @@ -749,7 +764,8 @@ namespace SHADE void ScriptStore::getGenericMethods() { - addScriptMethod = ScriptStore::typeid->GetMethod("AddScript"); + array^ paramTypes = gcnew array{ Entity::typeid }; + addScriptMethod = ScriptStore::typeid->GetMethod("AddScript", paramTypes); if (addScriptMethod == nullptr) { Debug::LogError("[ScriptStore] Failed to get MethodInfo of \"AddScript()\". Adding of scripts from native code will fail."); diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 2b2540e6..62e3003a 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -46,6 +46,27 @@ namespace SHADE generic where T : ref class, Script static T AddScript(Entity entity); /// + /// Adds a specified pre-constructed Script to a specified Entity. + /// + /// The entity to add a script to. + /// The pre-constructed Script to add. + /// Reference to the script added. + /// + /// If the specified Entity is invalid. + /// + static Script^ AddScript(Entity entity, Script^ script); + /// + /// Adds a specified pre-constructed Script to a specified Entity. + /// + /// The entity to add a script to. + /// The pre-constructed Script to add. + /// Location in the script list to add. + /// Reference to the script added. + /// + /// If the specified Entity is invalid. + /// + static Script^ AddScript(Entity entity, Script^ script, int index); + /// /// Adds a Script to a specified Entity. ///
    /// This function is meant for consumption from native code. If you are writing @@ -281,16 +302,16 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ using ScriptList = System::Collections::Generic::List; using ScriptDictionary = System::Collections::Generic::Dictionary; - using ScriptQueue = System::Collections::Generic::Queue; + using ScriptSet = System::Collections::Generic::HashSet; /*-----------------------------------------------------------------------------*/ /* Static Data Members */ /*-----------------------------------------------------------------------------*/ static ScriptDictionary scripts; - static ScriptList awakeList; - static ScriptList startList; - static ScriptList inactiveStartList; - static ScriptQueue disposalQueue; + static ScriptSet awakeList; + static ScriptSet startList; + static ScriptSet inactiveStartList; + static ScriptSet disposalQueue; static System::Collections::Generic::IEnumerable^ scriptTypeList; static System::Reflection::MethodInfo^ addScriptMethod; diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ index c1728fe6..3e756ce4 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ @@ -28,7 +28,6 @@ namespace SHADE template bool SerialisationUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode) { - Debug::Log(FieldType::typeid->Name); return varInsertYamlInternal(fieldInfo->GetValue(object), fieldNode); } template @@ -123,16 +122,6 @@ namespace SHADE return true; } } - else if constexpr (std::is_same_v) - { - if (ReflectionUtilities::FieldIsList(fieldInfo)) - { - System::Collections::IList^ iList = safe_cast(object); - object = gcnew - if (node.IsSequence() ) - - } - } else { if (object->GetType() == FieldType::typeid) From 6fc08f21edfd869cb1cfe17c56ee114c252fc2a6 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 13 Nov 2022 15:49:35 +0800 Subject: [PATCH 768/793] AHHHHHH --- Assets/Scenes/M2Scene.shade | 171 ------------------ .../Physics/PhysicsObject/SHPhysicsObject.cpp | 13 +- .../PhysicsObject/SHPhysicsObjectManager.cpp | 29 ++- SHADE_Engine/src/Physics/SHPhysicsWorld.h | 4 +- .../src/Physics/System/SHPhysicsSystem.cpp | 115 ++++++++---- 5 files changed, 111 insertions(+), 221 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 0ca9eb31..cbcd34d4 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -56,177 +56,6 @@ Density: 1 Position Offset: {x: 0, y: 0, z: 0} Scripts: ~ -- EID: 2 - Name: Player - IsActive: true - NumberOfChildren: 3 - Components: - Transform Component: - Translate: {x: -3.06177855, y: -2, z: -5} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 2, y: 2, z: 2} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: true - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 1, y: 1, z: 1} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ -- EID: 3 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: -0.0094268322, y: 0, z: 0} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 1, y: 1, z: 1} - Scripts: ~ -- EID: 4 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: 0, z: 0} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Scripts: ~ -- EID: 9 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: 0, z: 0} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Renderable Component: - Mesh: 144838771 - Material: 123745521 - Scripts: ~ -- EID: 6 - Name: AI - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: -8, y: -2, z: 2.5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: false - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 0.5, y: 0.5, z: 0.5} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ -- EID: 7 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: -16.8647861, z: -14.039052} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 28.1434975, y: 28.1434975, z: 28.1434975} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - Scripts: ~ -- EID: 8 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Light Component: - Position: {x: 0, y: 0, z: 0} - Type: Ambient - Direction: {x: 0, y: 0, z: 1} - Color: {x: 1, y: 1, z: 1, w: 1} - Layer: 4294967295 - Strength: 0.25 - Scripts: ~ -- EID: 5 - Name: item - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: -2, z: -5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 2, y: 2, z: 2} - Renderable Component: - Mesh: 144838771 - Material: 123745521 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: false - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 1, y: 1, z: 1} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - - Is Trigger: true - Type: Box - Half Extents: {x: 2, y: 2, z: 2} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ - EID: 10 Name: Default IsActive: true diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 549f84cb..0c9fa405 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -112,6 +112,9 @@ namespace SHADE default: break; } + rp3dBody->updateLocalCenterOfMassFromColliders(); + rp3dBody->updateLocalInertiaTensorFromColliders(); + return index; } @@ -134,9 +137,9 @@ namespace SHADE if (numColliders == 0) return; - while (numColliders >= 0) + while (numColliders - 1 >= 0) { - auto* collider = rp3dBody->getCollider(numColliders); + auto* collider = rp3dBody->getCollider(numColliders - 1); rp3dBody->removeCollider(collider); --numColliders; @@ -300,9 +303,6 @@ namespace SHADE rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); rp3dBody->addCollider(newBox, OFFSETS); - - rp3dBody->updateLocalCenterOfMassFromColliders(); - rp3dBody->updateLocalInertiaTensorFromColliders(); } void SHPhysicsObject::syncBoxShape(int index, SHCollisionShape& boxShape) const noexcept @@ -336,9 +336,6 @@ namespace SHADE rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); rp3dBody->addCollider(newSphere, OFFSETS); - - rp3dBody->updateLocalCenterOfMassFromColliders(); - rp3dBody->updateLocalInertiaTensorFromColliders(); } void SHPhysicsObject::syncSphereShape(int index, SHCollisionShape& sphereShape) const noexcept diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp index 8a381fcb..3820ccbe 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -195,8 +195,29 @@ namespace SHADE SHPhysicsObject* SHPhysicsObjectManager::createPhysicsObject(EntityID eid) noexcept { - auto newObjIter = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }); - return &(newObjIter.first->second); + auto& newPhysicsObject = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }).first->second; + + // Force transforms to sync + const auto* TRANSFORM = SHComponentManager::GetComponent_s(eid); + + SHVec3 worldPos = SHVec3::Zero; + SHQuaternion worldRot = SHQuaternion::Identity; + + if (!TRANSFORM) + { + SHLOGV_ERROR("Unable to sync transforms with Physics Object for Entity {}", eid); + } + else + { + worldPos = TRANSFORM->GetWorldPosition(); + worldRot = TRANSFORM->GetWorldOrientation(); + } + + const rp3d::Transform RP3D_TRANSFORM{ worldPos, worldRot }; + newPhysicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); + newPhysicsObject.prevTransform = RP3D_TRANSFORM; + + return &newPhysicsObject; } void SHPhysicsObjectManager::destroyPhysicsObject(EntityID eid) noexcept @@ -230,6 +251,10 @@ namespace SHADE return; } + const int NUM_SHAPES = static_cast(componentGroup.colliderComponent->GetCollisionShapes().size()); + for (int i = 0; i < NUM_SHAPES; ++i) + physicsObject->AddCollisionShape(i); + physicsObject->SyncColliders(*componentGroup.colliderComponent); } diff --git a/SHADE_Engine/src/Physics/SHPhysicsWorld.h b/SHADE_Engine/src/Physics/SHPhysicsWorld.h index bf788c0f..091ae062 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsWorld.h +++ b/SHADE_Engine/src/Physics/SHPhysicsWorld.h @@ -38,8 +38,8 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ SHVec3 gravity = SHVec3{ 0.0f, -9.81f, 0.0f }; - uint16_t numVelocitySolverIterations = 8; - uint16_t numPositionSolverIterations = 3; + uint16_t numVelocitySolverIterations = 15; + uint16_t numPositionSolverIterations = 8; bool sleepingEnabled = true; }; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 93ee0b11..361e7c9e 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -18,8 +18,12 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" -#include "Math/Transform/SHTransformComponent.h" #include "Physics/SHPhysicsEvents.h" +#include "Scene/SHSceneManager.h" + +/*-------------------------------------------------------------------------------------*/ +/* Local Helper Functions */ +/*-------------------------------------------------------------------------------------*/ namespace SHADE { @@ -124,29 +128,59 @@ namespace SHADE void SHPhysicsSystem::AddCollisionShape(EntityID eid, int shapeIndex) { - objectManager.AddCollisionShape(eid, shapeIndex); - - const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + static const auto ADD_SHAPE = [&] { - .entityID = eid - , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() - , .colliderIndex = shapeIndex + objectManager.AddCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + { + .entityID = eid + , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); }; - SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); + #ifdef SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor && editor->editorState != SHEditor::State::STOP) + ADD_SHAPE(); + + #else + + ADD_SHAPE(); + + #endif } void SHPhysicsSystem::RemoveCollisionShape(EntityID eid, int shapeIndex) { - objectManager.RemoveCollisionShape(eid, shapeIndex); - - const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + static const auto REMOVE_SHAPE = [&] { - .entityID = eid - , .colliderIndex = shapeIndex + objectManager.RemoveCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + { + .entityID = eid + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); }; - SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); + #ifdef SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor && editor->editorState != SHEditor::State::STOP) + REMOVE_SHAPE(); + + #else + + REMOVE_SHAPE(); + + #endif } void SHPhysicsSystem::AddForce(EntityID eid, const SHVec3& force) noexcept @@ -210,18 +244,17 @@ namespace SHADE // We only add tell the physics object manager to add a component if the scene is played - #ifdef _PUBLISH - - ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); - - #elif SHEDITOR + #ifdef SHEDITOR auto* editor = SHSystemManager::GetSystem(); - if (editor) - { - if (editor->editorState != SHEditor::State::STOP) - ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); - } + + if (editor && editor->editorState != SHEditor::State::STOP) + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); + + + #else + + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); #endif } @@ -244,11 +277,7 @@ namespace SHADE // We only add tell the physics object manager to remove a component if the scene is played - #ifdef _PUBLISH - - REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); - - #elif SHEDITOR + #ifdef SHEDITOR auto* editor = SHSystemManager::GetSystem(); if (editor) @@ -257,6 +286,10 @@ namespace SHADE REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); } + #else + + REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); + #endif } @@ -266,6 +299,19 @@ namespace SHADE SHEventHandle SHPhysicsSystem::onPlay(SHEventPtr onPlayEvent) { + static const auto BUILD_PHYSICS_OBJECT = [&](SHSceneNode* node) + { + const EntityID EID = node->GetEntityID(); + + if (SHComponentManager::HasComponent(EID)) + objectManager.AddRigidBody(EID); + + if (SHComponentManager::HasComponent(EID)) + objectManager.AddCollider(EID); + }; + + //////////////////////////////// + // Create physics world worldState.CreateWorld(factory); @@ -275,14 +321,8 @@ namespace SHADE // Link with object manager & create all physics objects objectManager.SetWorld(worldState.world); - const auto& RIGIDBODY_DENSE = SHComponentManager::GetDense(); - const auto& COLLIDER_DENSE = SHComponentManager::GetDense(); - - for (auto& rigidBodyComponent : RIGIDBODY_DENSE) - objectManager.AddRigidBody(rigidBodyComponent.GetEID()); - - for (auto& colliderComponent : COLLIDER_DENSE) - objectManager.AddCollider(colliderComponent.GetEID()); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + SCENE_GRAPH.Traverse(BUILD_PHYSICS_OBJECT); return onPlayEvent->handle; } @@ -300,7 +340,6 @@ namespace SHADE // Destroy the world worldState.DestroyWorld(factory); - return onStopEvent->handle; } From 3512ed339725a4f45b5967ab5673711df011e7b5 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 13 Nov 2022 15:49:35 +0800 Subject: [PATCH 769/793] AHHHHHH i want to pull my hair out --- Assets/Scenes/M2Scene.shade | 171 ------------------ .../Physics/PhysicsObject/SHPhysicsObject.cpp | 13 +- .../PhysicsObject/SHPhysicsObjectManager.cpp | 29 ++- SHADE_Engine/src/Physics/SHPhysicsWorld.h | 4 +- .../src/Physics/System/SHPhysicsSystem.cpp | 115 ++++++++---- 5 files changed, 111 insertions(+), 221 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 0ca9eb31..cbcd34d4 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -56,177 +56,6 @@ Density: 1 Position Offset: {x: 0, y: 0, z: 0} Scripts: ~ -- EID: 2 - Name: Player - IsActive: true - NumberOfChildren: 3 - Components: - Transform Component: - Translate: {x: -3.06177855, y: -2, z: -5} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 2, y: 2, z: 2} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: true - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 1, y: 1, z: 1} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ -- EID: 3 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: -0.0094268322, y: 0, z: 0} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 1, y: 1, z: 1} - Scripts: ~ -- EID: 4 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: 0, z: 0} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Scripts: ~ -- EID: 9 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: 0, z: 0} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Renderable Component: - Mesh: 144838771 - Material: 123745521 - Scripts: ~ -- EID: 6 - Name: AI - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: -8, y: -2, z: 2.5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 1, y: 1, z: 1} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: false - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 0.5, y: 0.5, z: 0.5} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ -- EID: 7 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: -16.8647861, z: -14.039052} - Rotate: {x: -0, y: 0, z: -0} - Scale: {x: 28.1434975, y: 28.1434975, z: 28.1434975} - Renderable Component: - Mesh: 149697411 - Material: 126974645 - Scripts: ~ -- EID: 8 - Name: Default - IsActive: true - NumberOfChildren: 0 - Components: - Light Component: - Position: {x: 0, y: 0, z: 0} - Type: Ambient - Direction: {x: 0, y: 0, z: 1} - Color: {x: 1, y: 1, z: 1, w: 1} - Layer: 4294967295 - Strength: 0.25 - Scripts: ~ -- EID: 5 - Name: item - IsActive: true - NumberOfChildren: 0 - Components: - Transform Component: - Translate: {x: 0, y: -2, z: -5} - Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 2, y: 2, z: 2} - Renderable Component: - Mesh: 144838771 - Material: 123745521 - RigidBody Component: - Type: Dynamic - Mass: 1 - Drag: 0 - Angular Drag: 0 - Use Gravity: true - Interpolate: false - Freeze Position X: false - Freeze Position Y: false - Freeze Position Z: false - Freeze Rotation X: true - Freeze Rotation Y: true - Freeze Rotation Z: true - Collider Component: - Colliders: - - Is Trigger: false - Type: Box - Half Extents: {x: 1, y: 1, z: 1} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - - Is Trigger: true - Type: Box - Half Extents: {x: 2, y: 2, z: 2} - Friction: 0.400000006 - Bounciness: 0 - Density: 1 - Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ - EID: 10 Name: Default IsActive: true diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 549f84cb..0c9fa405 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -112,6 +112,9 @@ namespace SHADE default: break; } + rp3dBody->updateLocalCenterOfMassFromColliders(); + rp3dBody->updateLocalInertiaTensorFromColliders(); + return index; } @@ -134,9 +137,9 @@ namespace SHADE if (numColliders == 0) return; - while (numColliders >= 0) + while (numColliders - 1 >= 0) { - auto* collider = rp3dBody->getCollider(numColliders); + auto* collider = rp3dBody->getCollider(numColliders - 1); rp3dBody->removeCollider(collider); --numColliders; @@ -300,9 +303,6 @@ namespace SHADE rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); rp3dBody->addCollider(newBox, OFFSETS); - - rp3dBody->updateLocalCenterOfMassFromColliders(); - rp3dBody->updateLocalInertiaTensorFromColliders(); } void SHPhysicsObject::syncBoxShape(int index, SHCollisionShape& boxShape) const noexcept @@ -336,9 +336,6 @@ namespace SHADE rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); rp3dBody->addCollider(newSphere, OFFSETS); - - rp3dBody->updateLocalCenterOfMassFromColliders(); - rp3dBody->updateLocalInertiaTensorFromColliders(); } void SHPhysicsObject::syncSphereShape(int index, SHCollisionShape& sphereShape) const noexcept diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp index 8a381fcb..3820ccbe 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -195,8 +195,29 @@ namespace SHADE SHPhysicsObject* SHPhysicsObjectManager::createPhysicsObject(EntityID eid) noexcept { - auto newObjIter = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }); - return &(newObjIter.first->second); + auto& newPhysicsObject = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }).first->second; + + // Force transforms to sync + const auto* TRANSFORM = SHComponentManager::GetComponent_s(eid); + + SHVec3 worldPos = SHVec3::Zero; + SHQuaternion worldRot = SHQuaternion::Identity; + + if (!TRANSFORM) + { + SHLOGV_ERROR("Unable to sync transforms with Physics Object for Entity {}", eid); + } + else + { + worldPos = TRANSFORM->GetWorldPosition(); + worldRot = TRANSFORM->GetWorldOrientation(); + } + + const rp3d::Transform RP3D_TRANSFORM{ worldPos, worldRot }; + newPhysicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); + newPhysicsObject.prevTransform = RP3D_TRANSFORM; + + return &newPhysicsObject; } void SHPhysicsObjectManager::destroyPhysicsObject(EntityID eid) noexcept @@ -230,6 +251,10 @@ namespace SHADE return; } + const int NUM_SHAPES = static_cast(componentGroup.colliderComponent->GetCollisionShapes().size()); + for (int i = 0; i < NUM_SHAPES; ++i) + physicsObject->AddCollisionShape(i); + physicsObject->SyncColliders(*componentGroup.colliderComponent); } diff --git a/SHADE_Engine/src/Physics/SHPhysicsWorld.h b/SHADE_Engine/src/Physics/SHPhysicsWorld.h index bf788c0f..091ae062 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsWorld.h +++ b/SHADE_Engine/src/Physics/SHPhysicsWorld.h @@ -38,8 +38,8 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ SHVec3 gravity = SHVec3{ 0.0f, -9.81f, 0.0f }; - uint16_t numVelocitySolverIterations = 8; - uint16_t numPositionSolverIterations = 3; + uint16_t numVelocitySolverIterations = 15; + uint16_t numPositionSolverIterations = 8; bool sleepingEnabled = true; }; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 93ee0b11..361e7c9e 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -18,8 +18,12 @@ #include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" -#include "Math/Transform/SHTransformComponent.h" #include "Physics/SHPhysicsEvents.h" +#include "Scene/SHSceneManager.h" + +/*-------------------------------------------------------------------------------------*/ +/* Local Helper Functions */ +/*-------------------------------------------------------------------------------------*/ namespace SHADE { @@ -124,29 +128,59 @@ namespace SHADE void SHPhysicsSystem::AddCollisionShape(EntityID eid, int shapeIndex) { - objectManager.AddCollisionShape(eid, shapeIndex); - - const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + static const auto ADD_SHAPE = [&] { - .entityID = eid - , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() - , .colliderIndex = shapeIndex + objectManager.AddCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + { + .entityID = eid + , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); }; - SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); + #ifdef SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor && editor->editorState != SHEditor::State::STOP) + ADD_SHAPE(); + + #else + + ADD_SHAPE(); + + #endif } void SHPhysicsSystem::RemoveCollisionShape(EntityID eid, int shapeIndex) { - objectManager.RemoveCollisionShape(eid, shapeIndex); - - const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + static const auto REMOVE_SHAPE = [&] { - .entityID = eid - , .colliderIndex = shapeIndex + objectManager.RemoveCollisionShape(eid, shapeIndex); + + const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + { + .entityID = eid + , .colliderIndex = shapeIndex + }; + + SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); }; - SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); + #ifdef SHEDITOR + + auto* editor = SHSystemManager::GetSystem(); + if (editor && editor->editorState != SHEditor::State::STOP) + REMOVE_SHAPE(); + + #else + + REMOVE_SHAPE(); + + #endif } void SHPhysicsSystem::AddForce(EntityID eid, const SHVec3& force) noexcept @@ -210,18 +244,17 @@ namespace SHADE // We only add tell the physics object manager to add a component if the scene is played - #ifdef _PUBLISH - - ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); - - #elif SHEDITOR + #ifdef SHEDITOR auto* editor = SHSystemManager::GetSystem(); - if (editor) - { - if (editor->editorState != SHEditor::State::STOP) - ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); - } + + if (editor && editor->editorState != SHEditor::State::STOP) + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); + + + #else + + ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); #endif } @@ -244,11 +277,7 @@ namespace SHADE // We only add tell the physics object manager to remove a component if the scene is played - #ifdef _PUBLISH - - REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); - - #elif SHEDITOR + #ifdef SHEDITOR auto* editor = SHSystemManager::GetSystem(); if (editor) @@ -257,6 +286,10 @@ namespace SHADE REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); } + #else + + REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); + #endif } @@ -266,6 +299,19 @@ namespace SHADE SHEventHandle SHPhysicsSystem::onPlay(SHEventPtr onPlayEvent) { + static const auto BUILD_PHYSICS_OBJECT = [&](SHSceneNode* node) + { + const EntityID EID = node->GetEntityID(); + + if (SHComponentManager::HasComponent(EID)) + objectManager.AddRigidBody(EID); + + if (SHComponentManager::HasComponent(EID)) + objectManager.AddCollider(EID); + }; + + //////////////////////////////// + // Create physics world worldState.CreateWorld(factory); @@ -275,14 +321,8 @@ namespace SHADE // Link with object manager & create all physics objects objectManager.SetWorld(worldState.world); - const auto& RIGIDBODY_DENSE = SHComponentManager::GetDense(); - const auto& COLLIDER_DENSE = SHComponentManager::GetDense(); - - for (auto& rigidBodyComponent : RIGIDBODY_DENSE) - objectManager.AddRigidBody(rigidBodyComponent.GetEID()); - - for (auto& colliderComponent : COLLIDER_DENSE) - objectManager.AddCollider(colliderComponent.GetEID()); + const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph(); + SCENE_GRAPH.Traverse(BUILD_PHYSICS_OBJECT); return onPlayEvent->handle; } @@ -300,7 +340,6 @@ namespace SHADE // Destroy the world worldState.DestroyWorld(factory); - return onStopEvent->handle; } From af361062e709ac38fecf6bdcb93233ea8cc3cb92 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 16:07:14 +0800 Subject: [PATCH 770/793] Modified how scripts are added and updated to support runtime adding of scripts --- SHADE_Managed/src/Scripts/ScriptStore.cxx | 38 ++++++++++++++++------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index b42f7508..6b33b31b 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -73,8 +73,16 @@ namespace SHADE // Add the script in entityScriptList->Insert(System::Math::Clamp(index, 0, entityScriptList->Count), script); - awakeList.Add(script); - startList.Add(script); + if (Application::IsPlaying) + { + script->Awake(); + script->Start(); + } + else + { + awakeList.Add(script); + startList.Add(script); + } script->OnAttached(); return script; @@ -451,9 +459,10 @@ namespace SHADE continue; // Update each script - for each (Script^ script in entity.Value) + ScriptList^ scripts = entity.Value; + for (int i = 0; i < scripts->Count; ++i) { - script->FixedUpdate(); + scripts[i]->FixedUpdate(); } } SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") @@ -468,9 +477,10 @@ namespace SHADE continue; // Update each script - for each (Script^ script in entity.Value) + ScriptList^ scripts = entity.Value; + for (int i = 0; i < scripts->Count; ++i) { - script->Update(); + scripts[i]->Update(); } } SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") @@ -485,9 +495,10 @@ namespace SHADE continue; // Update each script - for each (Script^ script in entity.Value) + ScriptList^ scripts = entity.Value; + for (int i = 0; i < scripts->Count; ++i) { - script->LateUpdate(); + scripts[i]->LateUpdate(); } } SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") @@ -503,9 +514,10 @@ namespace SHADE continue; // Update each script - for each (Script^ script in entity.Value) + ScriptList^ scripts = entity.Value; + for (int i = 0; i < scripts->Count; ++i) { - script->OnDrawGizmos(); + scripts[i]->OnDrawGizmos(); } } SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore") @@ -537,8 +549,9 @@ namespace SHADE auto entityScripts = scripts[entity.first]; if (entityScripts->Count > 0) { - for each (Script ^ script in entityScripts) + for (int i = 0; i < entityScripts->Count; ++i) { + Script^ script = entityScripts[i]; switch (collisionInfo.GetCollisionState()) { case SHCollisionEvent::State::ENTER: @@ -578,8 +591,9 @@ namespace SHADE auto entityScripts = scripts[entity.first]; if (entityScripts->Count > 0) { - for each (Script ^ script in entityScripts) + for (int i = 0; i < entityScripts->Count; ++i) { + Script^ script = entityScripts[i]; switch (triggerInfo.GetCollisionState()) { case SHCollisionEvent::State::ENTER: From 4dc85273956282c542a6116b39060baecf634ded Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Sun, 13 Nov 2022 16:29:25 +0800 Subject: [PATCH 771/793] Reworked scripts to no longer need definition of constructors --- Assets/Scenes/M2Scene.shade | 7 ++++++- Assets/Scripts/AIPrototype.cs | 1 - Assets/Scripts/CameraControl.cs | 1 - Assets/Scripts/CameraFix.cs | 1 - Assets/Scripts/Item.cs | 1 - Assets/Scripts/PhysicsTest.cs | 1 - Assets/Scripts/PickAndThrow.cs | 1 - Assets/Scripts/PlayerController.cs | 2 -- Assets/Scripts/PrintWhenActive.cs | 2 -- Assets/Scripts/RaccoonShowcase.cs | 1 - Assets/Scripts/RaccoonSpin.cs | 2 -- Assets/Scripts/ThirdPersonCamera.cs | 1 - SHADE_Managed/src/Scripts/Script.cxx | 10 +++++++--- SHADE_Managed/src/Scripts/Script.hxx | 14 +++++++------- SHADE_Managed/src/Scripts/ScriptStore.cxx | 5 +++-- 15 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index b2a5683f..75b69d27 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -226,4 +226,9 @@ Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: ~ \ No newline at end of file + Scripts: + - Type: Item + currCategory: 0 + - Type: PickAndThrow + throwForce: [100, 200, 100] + item: 51000 \ No newline at end of file diff --git a/Assets/Scripts/AIPrototype.cs b/Assets/Scripts/AIPrototype.cs index d678de78..62255778 100644 --- a/Assets/Scripts/AIPrototype.cs +++ b/Assets/Scripts/AIPrototype.cs @@ -51,7 +51,6 @@ public class AIPrototype : Script private GameObject? player; - public AIPrototype(GameObject gameObj) : base(gameObj) { } protected override void awake() { diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index fc900f46..b25d65eb 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -7,7 +7,6 @@ namespace SHADE_Scripting { public float turnSpeed = 0.5f; - public CameraControl(GameObject go) : base(go) { } protected override void update() { //Camera diff --git a/Assets/Scripts/CameraFix.cs b/Assets/Scripts/CameraFix.cs index 5347a72f..0ca085ad 100644 --- a/Assets/Scripts/CameraFix.cs +++ b/Assets/Scripts/CameraFix.cs @@ -3,7 +3,6 @@ using System; public class CameraFix : Script { - public CameraFix(GameObject gameObj) : base(gameObj) { } private Transform tranform; public Vector3 pos = Vector3.Zero; diff --git a/Assets/Scripts/Item.cs b/Assets/Scripts/Item.cs index 96ec092d..5047a241 100644 --- a/Assets/Scripts/Item.cs +++ b/Assets/Scripts/Item.cs @@ -10,7 +10,6 @@ public class Item : Script } public ItemCategory currCategory; - public Item(GameObject gameObj) : base(gameObj) { } protected override void awake() { diff --git a/Assets/Scripts/PhysicsTest.cs b/Assets/Scripts/PhysicsTest.cs index cc01615d..9726a51c 100644 --- a/Assets/Scripts/PhysicsTest.cs +++ b/Assets/Scripts/PhysicsTest.cs @@ -8,7 +8,6 @@ public class PhysicsTest : Script private Transform Transform; private RigidBody RigidBody; private Collider Collider; - public PhysicsTest(GameObject gameObj) : base(gameObj) { } protected override void awake() { diff --git a/Assets/Scripts/PickAndThrow.cs b/Assets/Scripts/PickAndThrow.cs index ea814b36..ec8846c5 100644 --- a/Assets/Scripts/PickAndThrow.cs +++ b/Assets/Scripts/PickAndThrow.cs @@ -14,7 +14,6 @@ public class PickAndThrow : Script private float lastXDir; private float lastZDir; private bool inRange = false; - public PickAndThrow(GameObject gameObj) : base(gameObj) { } protected override void awake() { diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 86ba7c98..4a02d470 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -73,8 +73,6 @@ public class PlayerController : Script public float mediumMultiper = 0.5f; public float heavyMultiper = 0.25f; - public PlayerController(GameObject gameObj) : base(gameObj) { } - protected override void awake() { //default setup diff --git a/Assets/Scripts/PrintWhenActive.cs b/Assets/Scripts/PrintWhenActive.cs index 41afdd58..11d7f025 100644 --- a/Assets/Scripts/PrintWhenActive.cs +++ b/Assets/Scripts/PrintWhenActive.cs @@ -2,8 +2,6 @@ public class PrintWhenActive : Script { - public PrintWhenActive(GameObject gameObj) : base(gameObj) { } - protected override void update() { Debug.Log("Active!"); diff --git a/Assets/Scripts/RaccoonShowcase.cs b/Assets/Scripts/RaccoonShowcase.cs index dc9d914d..3c767f7f 100644 --- a/Assets/Scripts/RaccoonShowcase.cs +++ b/Assets/Scripts/RaccoonShowcase.cs @@ -23,7 +23,6 @@ public class RaccoonShowcase : Script [Range(-5, 5)] public List intList = new List(new int[] { 2, 8, 2, 6, 8, 0, 1 }); public List enumList = new List(new Light.Type[] { Light.Type.Point, Light.Type.Directional, Light.Type.Ambient }); - public RaccoonShowcase(GameObject gameObj) : base(gameObj) {} protected override void awake() { diff --git a/Assets/Scripts/RaccoonSpin.cs b/Assets/Scripts/RaccoonSpin.cs index efdfadeb..84100a21 100644 --- a/Assets/Scripts/RaccoonSpin.cs +++ b/Assets/Scripts/RaccoonSpin.cs @@ -14,8 +14,6 @@ public class RaccoonSpin : Script [SerializeField] private CallbackEvent testEvent3 = new CallbackEvent(); private Transform Transform; - public RaccoonSpin(GameObject gameObj) : base(gameObj) { } - protected override void awake() { diff --git a/Assets/Scripts/ThirdPersonCamera.cs b/Assets/Scripts/ThirdPersonCamera.cs index 141865e8..fed26ae9 100644 --- a/Assets/Scripts/ThirdPersonCamera.cs +++ b/Assets/Scripts/ThirdPersonCamera.cs @@ -15,7 +15,6 @@ namespace SHADE_Scripting public float turnSpeedPitch = 0.3f; public float turnSpeedYaw = 0.5f; public float pitchClamp = 45.0f; - public ThirdPersonCamera(GameObject go) : base(go) { } protected override void awake() { diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index 9d6cadb8..017242d6 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -93,6 +93,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* "All-time" Lifecycle Functions */ /*---------------------------------------------------------------------------------*/ + void Script::Initialize(GameObject newOwner) + { + owner = newOwner; + } + void Script::OnAttached() { SAFE_NATIVE_CALL_BEGIN @@ -198,9 +203,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ - Script::Script(GameObject gameObj) - : owner { gameObj } - , OnGizmosDrawOverriden { false } + Script::Script() + : OnGizmosDrawOverriden { false } {} /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index bbe36784..fb564d27 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -165,7 +165,7 @@ namespace SHADE internal: /*-----------------------------------------------------------------------------*/ - /* Properties */ + /* Fields */ /*-----------------------------------------------------------------------------*/ /// /// If true, the OnGizmosDraw function was overridden. @@ -176,6 +176,10 @@ namespace SHADE /* "All-Time" Lifecycle Functions */ /*-----------------------------------------------------------------------------*/ /// + /// Used to initialize a Script with a GameObject. + /// + void Initialize(GameObject newOwner); + /// /// Used to call onAttached(). This is called immediately when this script is /// attached to a GameObject. /// @@ -272,13 +276,9 @@ namespace SHADE /* Constructors */ /*-----------------------------------------------------------------------------*/ /// - /// Constructor for Script to tie it to a specific GameObject. - /// Constructors of derived Scripts should call this Constructor. + /// Default Constructor /// - /// - /// GameObject that this Script will be tied to. - /// - Script(GameObject gameObj); + Script(); /*-----------------------------------------------------------------------------*/ /* Virtual "All-Time" Lifecycle Functions */ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 6b33b31b..a6f978a1 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -40,8 +40,7 @@ namespace SHADE T ScriptStore::AddScript(Entity entity) { // Create the script and add it in - array^ params = gcnew array{GameObject(entity)}; - Script^ script = safe_cast(System::Activator::CreateInstance(T::typeid, params)); + Script^ script = safe_cast(System::Activator::CreateInstance(T::typeid)); return safe_cast(AddScript(entity, script)); } @@ -72,6 +71,7 @@ namespace SHADE } // Add the script in + script->Initialize(GameObject(entity)); entityScriptList->Insert(System::Math::Clamp(index, 0, entityScriptList->Count), script); if (Application::IsPlaying) { @@ -130,6 +130,7 @@ namespace SHADE std::ostringstream oss; oss << "[ScriptStore] Failed to add Script named \"" << Convert::ToNative(scriptName) << "\" to Entity #" << entity << "! (" << Convert::ToNative(e->GetType()->Name) << ")"; + oss << Convert::ToNative(e->ToString()); Debug::LogError(oss.str()); return false; } From 895eb56cc01cb7fc17446fecda47020fd3e5e8e6 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 13 Nov 2022 17:26:21 +0800 Subject: [PATCH 772/793] Integrate cam arm --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 8 ------ .../ViewportWindow/SHEditorViewport.cpp | 27 ++++++++++++++++--- .../ViewportWindow/SHEditorViewport.h | 2 ++ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 8f886926..ff942666 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -63,14 +63,6 @@ namespace SHADE } UpdateCameraComponent(editorCamera); - - if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::LEFT_ALT)) - { - UpdateEditorArm(dt, true, SHVec3{ 0.0f }); - } - else - UpdateEditorArm(dt, false, SHVec3{ 0.0f }); - } void SHCameraSystem::UpdateEditorArm(double dt,bool active ,SHVec3 const& targetPos) noexcept diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index 7b3b5411..d0b32ff5 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -33,14 +33,32 @@ namespace SHADE void SHEditorViewport::Update() { SHEditorWindow::Update(); - if (shouldUpdateCamera) + auto camSystem = SHSystemManager::GetSystem(); + SHEditor* editor = SHSystemManager::GetSystem(); + + if (!editor->selectedEntities.empty()) + { + if (SHTransformComponent* transform = SHComponentManager::GetComponent_s(editor->selectedEntities.front())) + { + targetPos = transform->GetWorldPosition(); + } + else + { + targetPos = {}; + } + } + else + { + targetPos = {}; + } + if (shouldUpdateCamera || shouldUpdateCamArm) { - auto camSystem = SHSystemManager::GetSystem(); camSystem->UpdateEditorCamera(SHFrameRateController::GetRawDeltaTime()); shouldUpdateCamera = false; } + camSystem->UpdateEditorArm(SHFrameRateController::GetRawDeltaTime(), shouldUpdateCamArm, targetPos); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - SHEditor* editor = SHSystemManager::GetSystem(); if (Begin()) { @@ -64,6 +82,9 @@ namespace SHADE shouldUpdateCamera = true; } + + shouldUpdateCamArm = ImGui::IsWindowHovered() && ImGui::IsKeyDown(ImGuiKey_LeftAlt) && ImGui::IsMouseDown(ImGuiMouseButton_Left); + if (editor->editorState != SHEditor::State::PLAY && ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) { if (ImGui::IsKeyReleased(ImGuiKey_W)) diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h index 0fae4317..8f49c514 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.h @@ -29,5 +29,7 @@ namespace SHADE void DrawMenuBar() noexcept; SHVec2 beginCursorPos; bool shouldUpdateCamera = false; + bool shouldUpdateCamArm = false; + SHVec3 targetPos; };//class SHEditorViewport }//namespace SHADE From b1c004771c790fcbefd169ed1a8f33ce76570c21 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 13 Nov 2022 17:26:35 +0800 Subject: [PATCH 773/793] Gave the damn entities names cuz i was going crazy --- Assets/Scenes/M2Scene.shade | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index b2a5683f..be4ce4f1 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -1,5 +1,5 @@ - EID: 0 - Name: Default + Name: Camera IsActive: true NumberOfChildren: 0 Components: @@ -22,7 +22,7 @@ Strength: 0 Scripts: ~ - EID: 1 - Name: Default + Name: Floor IsActive: true NumberOfChildren: 0 Components: @@ -92,7 +92,7 @@ Position Offset: {x: 0, y: 0.5, z: 0} Scripts: ~ - EID: 3 - Name: Default + Name: Empty IsActive: true NumberOfChildren: 0 Components: @@ -102,7 +102,7 @@ Scale: {x: 1, y: 1, z: 1} Scripts: ~ - EID: 4 - Name: Default + Name: Empty2 IsActive: true NumberOfChildren: 0 Components: @@ -112,7 +112,7 @@ Scale: {x: 1, y: 1, z: 1} Scripts: ~ - EID: 9 - Name: Default + Name: Bag IsActive: true NumberOfChildren: 0 Components: @@ -160,7 +160,7 @@ Position Offset: {x: 0, y: 0.5, z: 0} Scripts: ~ - EID: 7 - Name: Default + Name: BigBoi IsActive: true NumberOfChildren: 0 Components: @@ -173,7 +173,7 @@ Material: 126974645 Scripts: ~ - EID: 8 - Name: Default + Name: AmbientLight IsActive: true NumberOfChildren: 0 Components: From 277a3ca0116075c37350b0dd1cba61a0721edde1 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 13 Nov 2022 17:42:48 +0800 Subject: [PATCH 774/793] Fixed deletion bugs --- .../PhysicsObject/SHPhysicsObjectManager.cpp | 90 ++++++++++--------- .../PhysicsObject/SHPhysicsObjectManager.h | 17 ++-- .../src/Physics/System/SHPhysicsSystem.cpp | 16 ++-- .../System/SHPhysicsSystemRoutines.cpp | 1 + 4 files changed, 65 insertions(+), 59 deletions(-) diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp index 3820ccbe..13f525e6 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -14,6 +14,7 @@ #include "SHPhysicsObjectManager.h" // Project Headers +#include "ECS_Base/Managers/SHEntityManager.h" #include "Tools/SHUtilities.h" namespace SHADE @@ -22,10 +23,11 @@ namespace SHADE /* Static Data Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHPhysicsObjectManager::CommandFunctionPtr SHPhysicsObjectManager::componentFunc[2][2] + SHPhysicsObjectManager::CommandFunctionPtr SHPhysicsObjectManager::componentFunc[2][3] { - addRigidBody , addCollider - , removeRigidBody , removeCollider + addRigidBody , addCollider + , removeRigidBody , removeCollider + , addCollisionShape , removeCollisionShape }; /*-----------------------------------------------------------------------------------*/ @@ -152,11 +154,7 @@ namespace SHADE if (COMMAND.command == QueueCommand::Command::INVALID || COMMAND.component == PhysicsComponents::INVALID) continue; - // Find the physics Object & retrieve components. Create an object if none exists. - SHPhysicsObject* physicsObject = GetPhysicsObject(COMMAND.eid); - if (!physicsObject) - physicsObject = createPhysicsObject(COMMAND.eid); - + // Get physics components const PhysicsComponentGroup COMPONENT_GROUP { .eid = COMMAND.eid @@ -164,56 +162,58 @@ namespace SHADE , .colliderComponent = SHComponentManager::GetComponent_s(COMMAND.eid) }; - if (COMMAND.component == PhysicsComponents::COLLISION_SHAPE) - { - if (COMMAND.command == QueueCommand::Command::ADD) - addCollisionShape(physicsObject, COMMAND.shapeIndex); - - if (COMMAND.command == QueueCommand::Command::REMOVE) - removeCollisionShape(physicsObject, COMMAND.shapeIndex); - } - else // Rigid Body or Collider - { - componentFunc[SHUtilities::ConvertEnum(COMMAND.command)][SHUtilities::ConvertEnum(COMMAND.component)](physicsObject, COMPONENT_GROUP); - } - - // If main components are missing, destroy object + // Delete any object that is missing both components + // We infer that a remove command has been pushed for these, but we will ignore those if both components have already been removed. if (!COMPONENT_GROUP.rigidBodyComponent && !COMPONENT_GROUP.colliderComponent) + { destroyPhysicsObject(COMMAND.eid); + continue; + } + + // Find the physics Object. If none found and attempting to add, create an object. + SHPhysicsObject* physicsObject = GetPhysicsObject(COMMAND.eid); + if (!physicsObject && COMMAND.command == QueueCommand::Command::ADD) + physicsObject = createPhysicsObject(COMMAND.eid); + + componentFunc[SHUtilities::ConvertEnum(COMMAND.command)][SHUtilities::ConvertEnum(COMMAND.component)](COMMAND, physicsObject, COMPONENT_GROUP); } } void SHPhysicsObjectManager::RemoveAllObjects() { + // Destroy all objects and clear + for (auto& physicsObject : physicsObjects | std::views::values) + { + world->destroyRigidBody(physicsObject.GetRigidBody()); + physicsObject.rp3dBody = nullptr; + } + physicsObjects.clear(); } - /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ SHPhysicsObject* SHPhysicsObjectManager::createPhysicsObject(EntityID eid) noexcept { - auto& newPhysicsObject = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }).first->second; - // Force transforms to sync - const auto* TRANSFORM = SHComponentManager::GetComponent_s(eid); - SHVec3 worldPos = SHVec3::Zero; SHQuaternion worldRot = SHQuaternion::Identity; - if (!TRANSFORM) - { - SHLOGV_ERROR("Unable to sync transforms with Physics Object for Entity {}", eid); - } - else + const SHTransformComponent* TRANSFORM = nullptr; + if (SHEntityManager::IsValidEID(eid)) + TRANSFORM = SHComponentManager::GetComponent_s(eid); + + if (TRANSFORM) { worldPos = TRANSFORM->GetWorldPosition(); worldRot = TRANSFORM->GetWorldOrientation(); } const rp3d::Transform RP3D_TRANSFORM{ worldPos, worldRot }; + + auto& newPhysicsObject = physicsObjects.emplace(eid, SHPhysicsObject{ eid, factory, world }).first->second; newPhysicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); newPhysicsObject.prevTransform = RP3D_TRANSFORM; @@ -222,10 +222,20 @@ namespace SHADE void SHPhysicsObjectManager::destroyPhysicsObject(EntityID eid) noexcept { + const auto ITER = physicsObjects.find(eid); + if (ITER == physicsObjects.end()) + { + // Assume the object has already been successfully destroyed + return; + } + + world->destroyRigidBody(ITER->second.GetRigidBody()); + ITER->second.rp3dBody = nullptr; + physicsObjects.erase(eid); } - void SHPhysicsObjectManager::addRigidBody(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + void SHPhysicsObjectManager::addRigidBody(const QueueCommand&, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) { SHASSERT(physicsObject != nullptr, "Valid physics object required to add body!") @@ -241,7 +251,7 @@ namespace SHADE physicsObject->SyncRigidBody(*componentGroup.rigidBodyComponent); } - void SHPhysicsObjectManager::addCollider(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + void SHPhysicsObjectManager::addCollider(const QueueCommand&, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) { SHASSERT(physicsObject != nullptr, "Valid physics object required to add collider!") @@ -258,7 +268,7 @@ namespace SHADE physicsObject->SyncColliders(*componentGroup.colliderComponent); } - void SHPhysicsObjectManager::removeRigidBody(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + void SHPhysicsObjectManager::removeRigidBody(const QueueCommand&, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) { SHASSERT(physicsObject != nullptr, "Valid physics object required to remove body!") @@ -266,25 +276,25 @@ namespace SHADE physicsObject->SetStaticBody(); } - void SHPhysicsObjectManager::removeCollider(SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup) + void SHPhysicsObjectManager::removeCollider(const QueueCommand&, SHPhysicsObject* physicsObject, const PhysicsComponentGroup&) { SHASSERT(physicsObject != nullptr, "Valid physics object required to remove collider!") physicsObject->RemoveAllCollisionShapes(); } - void SHPhysicsObjectManager::addCollisionShape(SHPhysicsObject* physicsObject, int shapeIndex) + void SHPhysicsObjectManager::addCollisionShape(const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup&) { SHASSERT(physicsObject != nullptr, "Valid physics object required to add collision shape!") - physicsObject->AddCollisionShape(shapeIndex); + physicsObject->AddCollisionShape(command.shapeIndex); } - void SHPhysicsObjectManager::removeCollisionShape(SHPhysicsObject* physicsObject, int shapeIndex) + void SHPhysicsObjectManager::removeCollisionShape(const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup&) { SHASSERT(physicsObject != nullptr, "Valid physics object required to remove collision shape!") - physicsObject->RemoveCollisionShape(shapeIndex); + physicsObject->RemoveCollisionShape(command.shapeIndex); } diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h index 91dcce5f..d8c9b805 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h @@ -144,13 +144,13 @@ namespace SHADE SHColliderComponent* colliderComponent = nullptr; }; - using CommandFunctionPtr = void(*)(SHPhysicsObject*, const PhysicsComponentGroup&); + using CommandFunctionPtr = void(*)(const QueueCommand&, SHPhysicsObject*, const PhysicsComponentGroup&); /*---------------------------------------------------------------------------------*/ /* Data Members */ /*---------------------------------------------------------------------------------*/ - static CommandFunctionPtr componentFunc[2][2]; // Used only for rigid body & collider components. Collision shapes are handled separately. + static CommandFunctionPtr componentFunc[2][3]; // 2 commands, 3 components rp3d::PhysicsCommon* factory = nullptr; rp3d::PhysicsWorld* world = nullptr; @@ -165,14 +165,13 @@ namespace SHADE SHPhysicsObject* createPhysicsObject (EntityID eid) noexcept; void destroyPhysicsObject (EntityID eid) noexcept; - static void addRigidBody (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); - static void addCollider (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); - static void removeRigidBody (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); - static void removeCollider (SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); - - static void addCollisionShape (SHPhysicsObject* physicsObject, int shapeIndex); - static void removeCollisionShape (SHPhysicsObject* physicsObject, int shapeIndex); + static void addRigidBody (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void addCollider (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void removeRigidBody (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void removeCollider (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void addCollisionShape (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + static void removeCollisionShape (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 361e7c9e..5763e2ea 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -246,12 +246,11 @@ namespace SHADE #ifdef SHEDITOR - auto* editor = SHSystemManager::GetSystem(); + const auto* EDITOR = SHSystemManager::GetSystem(); - if (editor && editor->editorState != SHEditor::State::STOP) + if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); - #else ADDED_ID == RIGID_BODY_ID ? objectManager.AddRigidBody(EID) : objectManager.AddCollider(EID); @@ -279,19 +278,16 @@ namespace SHADE #ifdef SHEDITOR - auto* editor = SHSystemManager::GetSystem(); - if (editor) - { - if (editor->editorState != SHEditor::State::STOP) - REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); - } + const auto* EDITOR = SHSystemManager::GetSystem(); + + if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) + REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); #else REMOVED_ID == RIGID_BODY_ID ? objectManager.RemoveRigidBody(EID) : objectManager.RemoveCollider(EID); #endif - } return EVENT_DATA->handle; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index 26c740cc..059202e5 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -183,6 +183,7 @@ namespace SHADE scriptingSystem->ExecuteCollisionFunctions(); // Since this function never runs when editor in not in play, execute the function anyway + physicsSystem->collisionListener.CleanContainers(); } } From c98693c6bc7377bdc9b39c1fdef3c9891c391774 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 13 Nov 2022 17:57:46 +0800 Subject: [PATCH 775/793] missing change from last commit --- .../src/Physics/System/SHPhysicsSystem.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 5763e2ea..34f0c698 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -128,15 +128,15 @@ namespace SHADE void SHPhysicsSystem::AddCollisionShape(EntityID eid, int shapeIndex) { - static const auto ADD_SHAPE = [&] + static const auto ADD_SHAPE = [&](EntityID entityID, int index) { - objectManager.AddCollisionShape(eid, shapeIndex); + objectManager.AddCollisionShape(entityID, index); const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA { - .entityID = eid - , .colliderType = SHComponentManager::GetComponent(eid)->GetCollisionShape(shapeIndex).GetType() - , .colliderIndex = shapeIndex + .entityID = entityID + , .colliderType = SHComponentManager::GetComponent(entityID)->GetCollisionShape(index).GetType() + , .colliderIndex = index }; SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); @@ -144,27 +144,27 @@ namespace SHADE #ifdef SHEDITOR - auto* editor = SHSystemManager::GetSystem(); - if (editor && editor->editorState != SHEditor::State::STOP) - ADD_SHAPE(); + const auto* EDITOR = SHSystemManager::GetSystem(); + if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) + ADD_SHAPE(eid, shapeIndex); #else - ADD_SHAPE(); + ADD_SHAPE(eid, shapeIndex); #endif } void SHPhysicsSystem::RemoveCollisionShape(EntityID eid, int shapeIndex) { - static const auto REMOVE_SHAPE = [&] + static const auto REMOVE_SHAPE = [&](EntityID entityID, int index) { - objectManager.RemoveCollisionShape(eid, shapeIndex); + objectManager.RemoveCollisionShape(entityID, index); const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA { - .entityID = eid - , .colliderIndex = shapeIndex + .entityID = entityID + , .colliderIndex = index }; SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); @@ -172,13 +172,13 @@ namespace SHADE #ifdef SHEDITOR - auto* editor = SHSystemManager::GetSystem(); - if (editor && editor->editorState != SHEditor::State::STOP) - REMOVE_SHAPE(); + const auto* EDITOR = SHSystemManager::GetSystem(); + if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) + REMOVE_SHAPE(eid, shapeIndex); #else - REMOVE_SHAPE(); + REMOVE_SHAPE(eid, shapeIndex); #endif } From a8d4f9c7566358d358493e597d6133dbd691ae40 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 13 Nov 2022 19:51:19 +0800 Subject: [PATCH 776/793] On building of asset file directory, check for recognised assets without meta file and generate --- Assets/Scripts/AIPrototype.cs.shmeta | 3 ++ Assets/Scripts/CameraControl.cs.shmeta | 3 ++ Assets/Scripts/CameraFix.cs.shmeta | 3 ++ Assets/Scripts/Item.cs.shmeta | 3 ++ Assets/Scripts/PhysicsTest.cs.shmeta | 3 ++ Assets/Scripts/PickAndThrow.cs.shmeta | 3 ++ Assets/Scripts/PlayerController.cs.shmeta | 3 ++ Assets/Scripts/PrintWhenActive.cs.shmeta | 3 ++ Assets/Scripts/RaccoonShowcase.cs.shmeta | 3 ++ Assets/Scripts/RaccoonSpin.cs.shmeta | 3 ++ Assets/Scripts/ThirdPersonCamera.cs.shmeta | 3 ++ SHADE_Engine/src/Assets/SHAssetManager.cpp | 40 +++++++++------ SHADE_Engine/src/Assets/SHAssetManager.h | 4 +- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 53 ++++++++++++++++++-- SHADE_Engine/src/Filesystem/SHFileSystem.h | 8 ++- 15 files changed, 114 insertions(+), 24 deletions(-) create mode 100644 Assets/Scripts/AIPrototype.cs.shmeta create mode 100644 Assets/Scripts/CameraControl.cs.shmeta create mode 100644 Assets/Scripts/CameraFix.cs.shmeta create mode 100644 Assets/Scripts/Item.cs.shmeta create mode 100644 Assets/Scripts/PhysicsTest.cs.shmeta create mode 100644 Assets/Scripts/PickAndThrow.cs.shmeta create mode 100644 Assets/Scripts/PlayerController.cs.shmeta create mode 100644 Assets/Scripts/PrintWhenActive.cs.shmeta create mode 100644 Assets/Scripts/RaccoonShowcase.cs.shmeta create mode 100644 Assets/Scripts/RaccoonSpin.cs.shmeta create mode 100644 Assets/Scripts/ThirdPersonCamera.cs.shmeta diff --git a/Assets/Scripts/AIPrototype.cs.shmeta b/Assets/Scripts/AIPrototype.cs.shmeta new file mode 100644 index 00000000..80a7d4b4 --- /dev/null +++ b/Assets/Scripts/AIPrototype.cs.shmeta @@ -0,0 +1,3 @@ +Name: AIPrototype +ID: 163215061 +Type: 9 diff --git a/Assets/Scripts/CameraControl.cs.shmeta b/Assets/Scripts/CameraControl.cs.shmeta new file mode 100644 index 00000000..bf68c31c --- /dev/null +++ b/Assets/Scripts/CameraControl.cs.shmeta @@ -0,0 +1,3 @@ +Name: CameraControl +ID: 158782344 +Type: 9 diff --git a/Assets/Scripts/CameraFix.cs.shmeta b/Assets/Scripts/CameraFix.cs.shmeta new file mode 100644 index 00000000..d1e5412a --- /dev/null +++ b/Assets/Scripts/CameraFix.cs.shmeta @@ -0,0 +1,3 @@ +Name: CameraFix +ID: 162231964 +Type: 9 diff --git a/Assets/Scripts/Item.cs.shmeta b/Assets/Scripts/Item.cs.shmeta new file mode 100644 index 00000000..84830b76 --- /dev/null +++ b/Assets/Scripts/Item.cs.shmeta @@ -0,0 +1,3 @@ +Name: Item +ID: 163145289 +Type: 9 diff --git a/Assets/Scripts/PhysicsTest.cs.shmeta b/Assets/Scripts/PhysicsTest.cs.shmeta new file mode 100644 index 00000000..99b809c5 --- /dev/null +++ b/Assets/Scripts/PhysicsTest.cs.shmeta @@ -0,0 +1,3 @@ +Name: PhysicsTest +ID: 159771801 +Type: 9 diff --git a/Assets/Scripts/PickAndThrow.cs.shmeta b/Assets/Scripts/PickAndThrow.cs.shmeta new file mode 100644 index 00000000..0eb38f59 --- /dev/null +++ b/Assets/Scripts/PickAndThrow.cs.shmeta @@ -0,0 +1,3 @@ +Name: PickAndThrow +ID: 165331952 +Type: 9 diff --git a/Assets/Scripts/PlayerController.cs.shmeta b/Assets/Scripts/PlayerController.cs.shmeta new file mode 100644 index 00000000..8b71915c --- /dev/null +++ b/Assets/Scripts/PlayerController.cs.shmeta @@ -0,0 +1,3 @@ +Name: PlayerController +ID: 164563088 +Type: 9 diff --git a/Assets/Scripts/PrintWhenActive.cs.shmeta b/Assets/Scripts/PrintWhenActive.cs.shmeta new file mode 100644 index 00000000..2b8c4173 --- /dev/null +++ b/Assets/Scripts/PrintWhenActive.cs.shmeta @@ -0,0 +1,3 @@ +Name: PrintWhenActive +ID: 162536221 +Type: 9 diff --git a/Assets/Scripts/RaccoonShowcase.cs.shmeta b/Assets/Scripts/RaccoonShowcase.cs.shmeta new file mode 100644 index 00000000..6ce5bc3d --- /dev/null +++ b/Assets/Scripts/RaccoonShowcase.cs.shmeta @@ -0,0 +1,3 @@ +Name: RaccoonShowcase +ID: 159969631 +Type: 9 diff --git a/Assets/Scripts/RaccoonSpin.cs.shmeta b/Assets/Scripts/RaccoonSpin.cs.shmeta new file mode 100644 index 00000000..9a1e05c8 --- /dev/null +++ b/Assets/Scripts/RaccoonSpin.cs.shmeta @@ -0,0 +1,3 @@ +Name: RaccoonSpin +ID: 157367824 +Type: 9 diff --git a/Assets/Scripts/ThirdPersonCamera.cs.shmeta b/Assets/Scripts/ThirdPersonCamera.cs.shmeta new file mode 100644 index 00000000..2f18c2fb --- /dev/null +++ b/Assets/Scripts/ThirdPersonCamera.cs.shmeta @@ -0,0 +1,3 @@ +Name: ThirdPersonCamera +ID: 154161201 +Type: 9 diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 5a1bd5db..968e76dd 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -83,7 +83,7 @@ namespace SHADE AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept { - if (!IsRecognised(path.extension().string().c_str())) + if (!SHFileSystem::IsRecognised(path.extension().string().c_str())) { //TODO:ASSERT UNRECOGNISED FILE TYPE return std::filesystem::path(); @@ -380,19 +380,6 @@ namespace SHADE BuildAssetCollection(); } - bool SHAssetManager::IsRecognised(char const* ext) noexcept - { - for (auto const& e : EXTENSIONS) - { - if (strcmp(ext, e.data()) == 0) - { - return true; - } - } - - return false; - } - SHAsset SHAssetManager::CreateAssetFromPath(AssetPath path) noexcept { SHAsset result; @@ -500,7 +487,7 @@ namespace SHADE { } - void SHAssetManager::GenerateNewMeta(AssetPath path) noexcept + std::optional SHAssetManager::GenerateNewMeta(AssetPath path) noexcept { auto const ext = path.extension().string(); if (ext == SHADER_BUILT_IN_EXTENSION.data()) @@ -561,11 +548,32 @@ namespace SHADE SHAssetMetaHandler::WriteMetaData(assetCollection[newAsset.id]); } + else if (ext == SCRIPT_EXTENSION) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::SCRIPT), + AssetType::SCRIPT, + path, + false + }; + assetCollection.emplace(newAsset.id, newAsset); + SHAssetMetaHandler::WriteMetaData(newAsset); + + return newAsset.id; + } } void SHAssetManager::BuildAssetCollection() noexcept { - SHFileSystem::BuildDirectory(ASSET_ROOT.data(), folderRoot, assetCollection); + std::vector toGenNew; + SHFileSystem::BuildDirectory(ASSET_ROOT.data(), folderRoot, assetCollection, toGenNew); + + for (auto& file : toGenNew) + { + auto newID{ GenerateNewMeta(file->path).value() }; + file->assetMeta = &assetCollection[newID]; + } for (auto& asset : std::ranges::views::values(assetCollection)) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 5af648e4..f6ecb3a3 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -99,11 +99,9 @@ namespace SHADE static SHAssetData* LoadData(SHAsset const& asset) noexcept; static SHAssetData* LoadSubData(SHAsset const& asset) noexcept; static void LoadNewData(AssetPath path) noexcept; - static void GenerateNewMeta(AssetPath path) noexcept; + static std::optional GenerateNewMeta(AssetPath path) noexcept; inline static void BuildAssetCollection() noexcept; - - static bool IsRecognised(char const*) noexcept; static SHAsset CreateAssetFromPath(AssetPath path) noexcept; diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 9aaf72a4..1062540b 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -25,6 +25,19 @@ namespace SHADE return true; } + bool SHFileSystem::IsRecognised(char const* ext) noexcept + { + for (auto const& e : EXTENSIONS) + { + if (strcmp(ext, e.data()) == 0) + { + return true; + } + } + + return false; + } + bool SHFileSystem::IsCompilable(std::string ext) noexcept { for (auto const& external : EXTERNALS) @@ -73,7 +86,11 @@ namespace SHADE return false; } - void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept + void SHFileSystem::BuildDirectory( + FolderPath path, + FolderPointer& root, + std::unordered_map& assetCollection, + std::vector& toGenerate) noexcept { std::stack folderStack; root = new SHFolder("root"); @@ -117,22 +134,50 @@ namespace SHADE folderStack.push(newFolder); } - for (auto const& asset : assets) + for (auto& file : folder->files) { - assetCollection.emplace(asset.id, asset); - for(auto& file : folder->files) + if (!IsRecognised(file.ext.c_str())) { + continue; + } + + bool found{ false }; + for (auto const& asset : assets) + { + assetCollection.emplace(asset.id, asset); if (file.name == asset.name) { AssetPath path{ file.path }; if (SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()) == asset.type) { file.assetMeta = &assetCollection[asset.id]; + found = true; break; } } } + + if (!found) + { + toGenerate.push_back(&file); + } } + //for (auto const& asset : assets) + //{ + // assetCollection.emplace(asset.id, asset); + // for(auto& file : folder->files) + // { + // if (file.name == asset.name) + // { + // AssetPath path{ file.path }; + // if (SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()) == asset.type) + // { + // file.assetMeta = &assetCollection[asset.id]; + // break; + // } + // } + // } + //} for (auto i {0}; i < folder->files.size(); ++i) { diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index d30f2164..4bace233 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -19,8 +19,14 @@ namespace SHADE class SHFileSystem { public: - static void BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept; + static void BuildDirectory( + FolderPath path, + FolderPointer& root, + std::unordered_map& assetCollection, + std::vector& toGenerate) noexcept; static void DestroyDirectory(FolderPointer root) noexcept; + + static bool IsRecognised(char const*) noexcept; private: static bool DeleteFolder(FolderPointer location) noexcept; static bool IsCompilable(std::string ext) noexcept; From d0bcd4869f43ec3ffcf72ba051d3e36c33a0aea9 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 13 Nov 2022 20:19:26 +0800 Subject: [PATCH 777/793] Removed unused raw asset files --- Assets/racoon.fbx | Bin 703020 -> 0 bytes Assets/racoon.gltf | 4993 -------------------------------------------- 2 files changed, 4993 deletions(-) delete mode 100644 Assets/racoon.fbx delete mode 100644 Assets/racoon.gltf diff --git a/Assets/racoon.fbx b/Assets/racoon.fbx deleted file mode 100644 index 4d823d9d32fd1d077dc4e87503058d5318c79759..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703020 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�__Y> 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 diff --git a/Assets/racoon.gltf b/Assets/racoon.gltf deleted file mode 100644 index 459a542d..00000000 --- a/Assets/racoon.gltf +++ /dev/null @@ -1,4993 +0,0 @@ -{ - "asset" : { - "generator" : "Khronos glTF Blender I/O v3.3.27", - "version" : "2.0" - }, - "extensionsUsed" : [ - "KHR_materials_specular", - "KHR_materials_ior" - ], - "scene" : 0, - "scenes" : [ - { - "name" : "Scene", - "nodes" : [ - 55 - ] - } - ], - "nodes" : [ - { - "name" : "L_Toe_end", - "rotation" : [ - -1.304514398725587e-07, - -4.8278069232242024e-14, - -3.113858042524953e-07, - 1 - ], - "translation" : [ - 2.9270432744255004e-09, - 0.02392714098095894, - 1.3476908478082805e-10 - ] - }, - { - "children" : [ - 0 - ], - "name" : "L_Toe", - "rotation" : [ - 0.32702386379241943, - 1.1310142156162328e-07, - 1.641405731334089e-07, - 0.945016086101532 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - -8.650776095464607e-09, - 0.03380582109093666, - -2.448857117087755e-09 - ] - }, - { - "children" : [ - 1 - ], - "name" : "L_Feet", - "rotation" : [ - 0.516292929649353, - -0.020581310614943504, - -0.05452270060777664, - 0.854426920413971 - ], - "translation" : [ - 1.2865877252465907e-09, - 0.06353945285081863, - 2.6193447411060333e-10 - ] - }, - { - "children" : [ - 2 - ], - "name" : "L_Shin", - "rotation" : [ - -0.054226718842983246, - 0.00034972387948073447, - -0.0027083493769168854, - 0.9985249042510986 - ], - "scale" : [ - 0.9999998807907104, - 0.9999999403953552, - 0.9999998807907104 - ], - "translation" : [ - -8.217813984856548e-09, - 0.012935775332152843, - -1.1059455573558807e-09 - ] - }, - { - "children" : [ - 3 - ], - "name" : "L_Knee", - "rotation" : [ - -0.117364302277565, - -0.00023353073629550636, - -0.005353146698325872, - 0.9930744767189026 - ], - "scale" : [ - 1, - 1.0000001192092896, - 1 - ], - "translation" : [ - -7.161837345392996e-09, - 0.08009886741638184, - -3.725290298461914e-09 - ] - }, - { - "children" : [ - 4 - ], - "name" : "L_Thigh", - "rotation" : [ - 0.005340703763067722, - -0.08032803982496262, - -0.9945576786994934, - 0.06613556295633316 - ], - "scale" : [ - 1.0000009536743164, - 1.0000001192092896, - 1.0000014305114746 - ], - "translation" : [ - 0.06634333729743958, - 0.021777987480163574, - -0.000205356627702713 - ] - }, - { - "name" : "Head_end", - "rotation" : [ - 0, - 3.552713678800501e-15, - 0, - 1 - ], - "translation" : [ - -8.470329472543003e-22, - 0.11583378911018372, - 0 - ] - }, - { - "children" : [ - 6 - ], - "name" : "Head", - "rotation" : [ - 0, - 5.960462701182223e-08, - 0, - 1 - ], - "scale" : [ - 1, - 0.9999999403953552, - 1 - ], - "translation" : [ - 0, - 0.022377878427505493, - 0 - ] - }, - { - "children" : [ - 7 - ], - "name" : "Neck", - "translation" : [ - 0, - 0.10304805636405945, - 0 - ] - }, - { - "name" : "L_Hand_end", - "rotation" : [ - 1.3239958462918366e-08, - -2.4324227076988336e-09, - 1.4901161193847656e-08, - 1 - ], - "translation" : [ - 2.2351740014414645e-08, - 0.016836093738675117, - -5.329070518200751e-15 - ] - }, - { - "children" : [ - 9 - ], - "name" : "L_Hand", - "rotation" : [ - -0.10859407484531403, - -0.0013414795976132154, - -0.012280543334782124, - 0.9940094351768494 - ], - "scale" : [ - 1, - 1, - 0.9999999403953552 - ], - "translation" : [ - -5.215407838932151e-08, - 0.030574528500437737, - 4.579678858362968e-09 - ] - }, - { - "children" : [ - 10 - ], - "name" : "L_Forearm", - "rotation" : [ - 0.03182216361165047, - -0.010124370455741882, - -0.05386859551072121, - 0.9979895353317261 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - -1.4001724224499412e-08, - 0.011892830953001976, - -4.656612873077393e-10 - ] - }, - { - "children" : [ - 11 - ], - "name" : "L_Elbow", - "rotation" : [ - 0.13403145968914032, - 0.0004466302052605897, - 0.0229647234082222, - 0.9907108545303345 - ], - "translation" : [ - 9.490547014934236e-09, - 0.07338026165962219, - 1.862645149230957e-09 - ] - }, - { - "children" : [ - 12 - ], - "name" : "L_Shoulder", - "rotation" : [ - -0.05528340861201286, - 0.01580565795302391, - -0.27442947030067444, - 0.9598866701126099 - ], - "translation" : [ - 1.1175854908174188e-08, - 0.034574370831251144, - -3.3306690738754696e-15 - ] - }, - { - "children" : [ - 13 - ], - "name" : "L_Clavicle", - "rotation" : [ - -4.527326780134899e-08, - -2.4482876170850432e-08, - -0.6586140990257263, - 0.7524808645248413 - ], - "scale" : [ - 0.9999998807907104, - 0.9999998807907104, - 1 - ], - "translation" : [ - 0.03500552102923393, - 0.07119831442832947, - -6.646381223163189e-10 - ] - }, - { - "name" : "R_Hand_end", - "rotation" : [ - 1.3239958462918366e-08, - 2.4324227076988336e-09, - -1.4901161193847656e-08, - 1 - ], - "translation" : [ - -2.2351740014414645e-08, - 0.016836093738675117, - -5.329070518200751e-15 - ] - }, - { - "children" : [ - 15 - ], - "name" : "R_Hand", - "rotation" : [ - -0.10859407484531403, - 0.0013414795976132154, - 0.012280543334782124, - 0.9940094351768494 - ], - "scale" : [ - 1, - 1, - 0.9999999403953552 - ], - "translation" : [ - 5.215407838932151e-08, - 0.030574528500437737, - 4.579678858362968e-09 - ] - }, - { - "children" : [ - 16 - ], - "name" : "R_Forearm", - "rotation" : [ - 0.03182216361165047, - 0.010124370455741882, - 0.05386859551072121, - 0.9979895353317261 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - 1.4001724224499412e-08, - 0.011892830953001976, - -4.656612873077393e-10 - ] - }, - { - "children" : [ - 17 - ], - "name" : "R_Elbow", - "rotation" : [ - 0.13403145968914032, - -0.0004466302052605897, - -0.0229647234082222, - 0.9907108545303345 - ], - "translation" : [ - -9.490547014934236e-09, - 0.07338026165962219, - 1.862645149230957e-09 - ] - }, - { - "children" : [ - 18 - ], - "name" : "R_Shoulder", - "rotation" : [ - -0.05528340861201286, - -0.01580565795302391, - 0.27442947030067444, - 0.9598866701126099 - ], - "translation" : [ - -1.1175854908174188e-08, - 0.034574370831251144, - -3.3306690738754696e-15 - ] - }, - { - "children" : [ - 19 - ], - "name" : "R_Clavicle", - "rotation" : [ - -4.527326780134899e-08, - 2.4482876170850432e-08, - 0.6586140990257263, - 0.7524808645248413 - ], - "scale" : [ - 0.9999998807907104, - 0.9999998807907104, - 1 - ], - "translation" : [ - -0.03500552102923393, - 0.07119831442832947, - -6.646381223163189e-10 - ] - }, - { - "name" : "L_IK_Arm_Pole_end", - "rotation" : [ - -8.14913803104389e-10, - -2.8273916541365907e-08, - 3.597233089180918e-08, - 1 - ], - "translation" : [ - 1.3742706528319104e-08, - 0.04507105425000191, - 1.6264998237147665e-08 - ] - }, - { - "children" : [ - 21 - ], - "name" : "L_IK_Arm_Pole", - "rotation" : [ - -0.3575689494609833, - -0.6109033823013306, - 0.6082502007484436, - 0.3591284155845642 - ], - "scale" : [ - 0.9999999403953552, - 0.9999998807907104, - 0.9999999403953552 - ], - "translation" : [ - 0.0021197572350502014, - -0.04126967862248421, - -0.053202081471681595 - ] - }, - { - "children" : [ - 22 - ], - "name" : "L_IK_Arm_Target", - "rotation" : [ - -0.0011026781285181642, - 0.0018760154489427805, - -0.8620717525482178, - 0.5067814588546753 - ], - "scale" : [ - 0.9999999403953552, - 1, - 1 - ], - "translation" : [ - 0.17300567030906677, - 0.02745041251182556, - 3.304734264020226e-10 - ] - }, - { - "name" : "R_IK_Arm_Pole_end", - "rotation" : [ - -8.14913803104389e-10, - 2.8273916541365907e-08, - -3.597233089180918e-08, - 1 - ], - "translation" : [ - -1.3742706528319104e-08, - 0.04507105425000191, - 1.6264998237147665e-08 - ] - }, - { - "children" : [ - 24 - ], - "name" : "R_IK_Arm_Pole", - "rotation" : [ - -0.3575689494609833, - 0.6109033823013306, - -0.6082502007484436, - 0.3591284155845642 - ], - "scale" : [ - 0.9999999403953552, - 0.9999998807907104, - 0.9999999403953552 - ], - "translation" : [ - -0.0021197572350502014, - -0.04126967862248421, - -0.053202081471681595 - ] - }, - { - "children" : [ - 25 - ], - "name" : "R_IK_Arm_Target", - "rotation" : [ - -0.0011026781285181642, - -0.0018760154489427805, - 0.8620717525482178, - 0.5067814588546753 - ], - "scale" : [ - 0.9999999403953552, - 1, - 1 - ], - "translation" : [ - -0.17300567030906677, - 0.02745041251182556, - 3.304734264020226e-10 - ] - }, - { - "children" : [ - 8, - 14, - 20, - 23, - 26 - ], - "name" : "Upper_Spine", - "translation" : [ - 0, - 0.06622835993766785, - 0 - ] - }, - { - "children" : [ - 27 - ], - "name" : "Lower_Spine", - "translation" : [ - 0, - 0.06622838973999023, - 0 - ] - }, - { - "name" : "Tail_end", - "translation" : [ - 0, - 0.07595176249742508, - -1.3838050705317073e-09 - ] - }, - { - "children" : [ - 29 - ], - "name" : "Tail", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - -5.8597615213960615e-18, - 0.03983837366104126, - -0.09847982972860336 - ] - }, - { - "name" : "L_Hip_end", - "translation" : [ - 0, - 0.032987553626298904, - -1.5967565047958487e-09 - ] - }, - { - "children" : [ - 31 - ], - "name" : "L_Hip", - "translation" : [ - 0.06953180581331253, - 0.04957667365670204, - 0.061330340802669525 - ] - }, - { - "name" : "L_Butt_end", - "translation" : [ - 0, - 0.03298754245042801, - 1.3750955929481279e-09 - ] - }, - { - "children" : [ - 33 - ], - "name" : "L_Butt", - "translation" : [ - 0.06953180581331253, - -0.0007792188553139567, - -0.04653617739677429 - ] - }, - { - "name" : "R_Toe_end", - "rotation" : [ - -1.304514398725587e-07, - 4.8278069232242024e-14, - 3.113858042524953e-07, - 1 - ], - "translation" : [ - -2.9270432744255004e-09, - 0.02392714098095894, - 1.3476908478082805e-10 - ] - }, - { - "children" : [ - 35 - ], - "name" : "R_Toe", - "rotation" : [ - 0.32702386379241943, - -1.1310142156162328e-07, - -1.641405731334089e-07, - 0.945016086101532 - ], - "scale" : [ - 1, - 0.9999999403953552, - 0.9999999403953552 - ], - "translation" : [ - 8.650776095464607e-09, - 0.03380582109093666, - -2.448857117087755e-09 - ] - }, - { - "children" : [ - 36 - ], - "name" : "R_Feet", - "rotation" : [ - 0.516292929649353, - 0.020581310614943504, - 0.05452270060777664, - 0.854426920413971 - ], - "translation" : [ - -1.2865877252465907e-09, - 0.06353945285081863, - 2.6193447411060333e-10 - ] - }, - { - "children" : [ - 37 - ], - "name" : "R_Shin", - "rotation" : [ - -0.054226718842983246, - -0.00034972387948073447, - 0.0027083493769168854, - 0.9985249042510986 - ], - "scale" : [ - 0.9999998807907104, - 0.9999999403953552, - 0.9999998807907104 - ], - "translation" : [ - 8.217813984856548e-09, - 0.012935775332152843, - -1.1059455573558807e-09 - ] - }, - { - "children" : [ - 38 - ], - "name" : "R_Knee", - "rotation" : [ - -0.117364302277565, - 0.00023353073629550636, - 0.005353146698325872, - 0.9930744767189026 - ], - "scale" : [ - 1, - 1.0000001192092896, - 1 - ], - "translation" : [ - 7.161837345392996e-09, - 0.08009886741638184, - -3.725290298461914e-09 - ] - }, - { - "children" : [ - 39 - ], - "name" : "R_Thigh", - "rotation" : [ - 0.005340703763067722, - 0.08032803982496262, - 0.9945576786994934, - 0.06613556295633316 - ], - "scale" : [ - 1.0000009536743164, - 1.0000001192092896, - 1.0000014305114746 - ], - "translation" : [ - -0.06634333729743958, - 0.021777987480163574, - -0.000205356627702713 - ] - }, - { - "name" : "R_Hip_end", - "translation" : [ - 0, - 0.032987553626298904, - -1.5967565047958487e-09 - ] - }, - { - "children" : [ - 41 - ], - "name" : "R_Hip", - "translation" : [ - -0.06953180581331253, - 0.04957667365670204, - 0.061330340802669525 - ] - }, - { - "name" : "R_Butt_end", - "translation" : [ - 0, - 0.03298754245042801, - 1.3750955929481279e-09 - ] - }, - { - "children" : [ - 43 - ], - "name" : "R_Butt", - "translation" : [ - -0.06953180581331253, - -0.0007792188553139567, - -0.04653617739677429 - ] - }, - { - "children" : [ - 5, - 28, - 30, - 32, - 34, - 40, - 42, - 44 - ], - "name" : "Pelvis", - "translation" : [ - 0, - 0.15915730595588684, - 0 - ] - }, - { - "name" : "L_IK_Leg_Pole_end", - "translation" : [ - 0, - 0.04320859909057617, - 2.2203057170600005e-09 - ] - }, - { - "children" : [ - 46 - ], - "name" : "L_IK_Leg_Pole", - "rotation" : [ - 0, - 0, - -1, - 0 - ], - "translation" : [ - -0.008841380476951599, - -0.08020301908254623, - 0.0748630166053772 - ] - }, - { - "children" : [ - 47 - ], - "name" : "L_IK_Leg_Target", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - 0.08565311133861542, - 0.027707800269126892, - 0.00015427125617861748 - ] - }, - { - "name" : "R_IK_Leg_Pole_end", - "translation" : [ - 0, - 0.04320859909057617, - 2.2203057170600005e-09 - ] - }, - { - "children" : [ - 49 - ], - "name" : "R_IK_Leg_Pole", - "rotation" : [ - 0, - 0, - -1, - 0 - ], - "translation" : [ - 0.008841380476951599, - -0.08020301908254623, - 0.0748630166053772 - ] - }, - { - "children" : [ - 50 - ], - "name" : "R_IK_Leg_Target", - "rotation" : [ - -0.7071068286895752, - 0, - 0, - 0.7071068286895752 - ], - "translation" : [ - -0.08565311133861542, - 0.027707800269126892, - 0.00015427125617861748 - ] - }, - { - "children" : [ - 45, - 48, - 51 - ], - "name" : "Root" - }, - { - "mesh" : 0, - "name" : "Bag", - "skin" : 0 - }, - { - "mesh" : 1, - "name" : "Raccoon", - "skin" : 0 - }, - { - "children" : [ - 53, - 54, - 52 - ], - "name" : "Armature" - } - ], - "animations" : [ - { - "channels" : [ - { - "sampler" : 0, - "target" : { - "node" : 52, - "path" : "translation" - } - }, - { - "sampler" : 1, - "target" : { - "node" : 52, - "path" : "rotation" - } - }, - { - "sampler" : 2, - "target" : { - "node" : 52, - "path" : "scale" - } - }, - { - "sampler" : 3, - "target" : { - "node" : 45, - "path" : "translation" - } - }, - { - "sampler" : 4, - "target" : { - "node" : 45, - "path" : "rotation" - } - }, - { - "sampler" : 5, - "target" : { - "node" : 45, - "path" : "scale" - } - }, - { - "sampler" : 6, - "target" : { - "node" : 5, - "path" : "translation" - } - }, - { - "sampler" : 7, - "target" : { - "node" : 5, - "path" : "rotation" - } - }, - { - "sampler" : 8, - "target" : { - "node" : 5, - "path" : "scale" - } - }, - { - "sampler" : 9, - "target" : { - "node" : 4, - "path" : "translation" - } - }, - { - "sampler" : 10, - "target" : { - "node" : 4, - "path" : "rotation" - } - }, - { - "sampler" : 11, - "target" : { - "node" : 4, - "path" : "scale" - } - }, - { - "sampler" : 12, - "target" : { - "node" : 3, - "path" : "translation" - } - }, - { - "sampler" : 13, - "target" : { - "node" : 3, - "path" : "rotation" - } - }, - { - "sampler" : 14, - "target" : { - "node" : 3, - "path" : "scale" - } - }, - { - "sampler" : 15, - "target" : { - "node" : 2, - "path" : "translation" - } - }, - { - "sampler" : 16, - "target" : { - "node" : 2, - "path" : "rotation" - } - }, - { - "sampler" : 17, - "target" : { - "node" : 2, - "path" : "scale" - } - }, - { - "sampler" : 18, - "target" : { - "node" : 1, - "path" : "translation" - } - }, - { - "sampler" : 19, - "target" : { - "node" : 1, - "path" : "rotation" - } - }, - { - "sampler" : 20, - "target" : { - "node" : 1, - "path" : "scale" - } - }, - { - "sampler" : 21, - "target" : { - "node" : 0, - "path" : "translation" - } - }, - { - "sampler" : 22, - "target" : { - "node" : 0, - "path" : "rotation" - } - }, - { - "sampler" : 23, - "target" : { - "node" : 0, - "path" : "scale" - } - }, - { - "sampler" : 24, - "target" : { - "node" : 28, - "path" : "translation" - } - }, - { - "sampler" : 25, - "target" : { - "node" : 28, - "path" : "rotation" - } - }, - { - "sampler" : 26, - "target" : { - "node" : 28, - "path" : "scale" - } - }, - { - "sampler" : 27, - "target" : { - "node" : 27, - "path" : "translation" - } - }, - { - "sampler" : 28, - "target" : { - "node" : 27, - "path" : "rotation" - } - }, - { - "sampler" : 29, - "target" : { - "node" : 27, - "path" : "scale" - } - }, - { - "sampler" : 30, - "target" : { - "node" : 8, - "path" : "translation" - } - }, - { - "sampler" : 31, - "target" : { - "node" : 8, - "path" : "rotation" - } - }, - { - "sampler" : 32, - "target" : { - "node" : 8, - "path" : "scale" - } - }, - { - "sampler" : 33, - "target" : { - "node" : 7, - "path" : "translation" - } - }, - { - "sampler" : 34, - "target" : { - "node" : 7, - "path" : "rotation" - } - }, - { - "sampler" : 35, - "target" : { - "node" : 7, - "path" : "scale" - } - }, - { - "sampler" : 36, - "target" : { - "node" : 6, - "path" : "translation" - } - }, - { - "sampler" : 37, - "target" : { - "node" : 6, - "path" : "rotation" - } - }, - { - "sampler" : 38, - "target" : { - "node" : 6, - "path" : "scale" - } - }, - { - "sampler" : 39, - "target" : { - "node" : 14, - "path" : "translation" - } - }, - { - "sampler" : 40, - "target" : { - "node" : 14, - "path" : "rotation" - } - }, - { - "sampler" : 41, - "target" : { - "node" : 14, - "path" : "scale" - } - }, - { - "sampler" : 42, - "target" : { - "node" : 13, - "path" : "translation" - } - }, - { - "sampler" : 43, - "target" : { - "node" : 13, - "path" : "rotation" - } - }, - { - "sampler" : 44, - "target" : { - "node" : 13, - "path" : "scale" - } - }, - { - "sampler" : 45, - "target" : { - "node" : 12, - "path" : "translation" - } - }, - { - "sampler" : 46, - "target" : { - "node" : 12, - "path" : "rotation" - } - }, - { - "sampler" : 47, - "target" : { - "node" : 12, - "path" : "scale" - } - }, - { - "sampler" : 48, - "target" : { - "node" : 11, - "path" : "translation" - } - }, - { - "sampler" : 49, - "target" : { - "node" : 11, - "path" : "rotation" - } - }, - { - "sampler" : 50, - "target" : { - "node" : 11, - "path" : "scale" - } - }, - { - "sampler" : 51, - "target" : { - "node" : 10, - "path" : "translation" - } - }, - { - "sampler" : 52, - "target" : { - "node" : 10, - "path" : "rotation" - } - }, - { - "sampler" : 53, - "target" : { - "node" : 10, - "path" : "scale" - } - }, - { - "sampler" : 54, - "target" : { - "node" : 9, - "path" : "translation" - } - }, - { - "sampler" : 55, - "target" : { - "node" : 9, - "path" : "rotation" - } - }, - { - "sampler" : 56, - "target" : { - "node" : 9, - "path" : "scale" - } - }, - { - "sampler" : 57, - "target" : { - "node" : 20, - "path" : "translation" - } - }, - { - "sampler" : 58, - "target" : { - "node" : 20, - "path" : "rotation" - } - }, - { - "sampler" : 59, - "target" : { - "node" : 20, - "path" : "scale" - } - }, - { - "sampler" : 60, - "target" : { - "node" : 19, - "path" : "translation" - } - }, - { - "sampler" : 61, - "target" : { - "node" : 19, - "path" : "rotation" - } - }, - { - "sampler" : 62, - "target" : { - "node" : 19, - "path" : "scale" - } - }, - { - "sampler" : 63, - "target" : { - "node" : 18, - "path" : "translation" - } - }, - { - "sampler" : 64, - "target" : { - "node" : 18, - "path" : "rotation" - } - }, - { - "sampler" : 65, - "target" : { - "node" : 18, - "path" : "scale" - } - }, - { - "sampler" : 66, - "target" : { - "node" : 17, - "path" : "translation" - } - }, - { - "sampler" : 67, - "target" : { - "node" : 17, - "path" : "rotation" - } - }, - { - "sampler" : 68, - "target" : { - "node" : 17, - "path" : "scale" - } - }, - { - "sampler" : 69, - "target" : { - "node" : 16, - "path" : "translation" - } - }, - { - "sampler" : 70, - "target" : { - "node" : 16, - "path" : "rotation" - } - }, - { - "sampler" : 71, - "target" : { - "node" : 16, - "path" : "scale" - } - }, - { - "sampler" : 72, - "target" : { - "node" : 15, - "path" : "translation" - } - }, - { - "sampler" : 73, - "target" : { - "node" : 15, - "path" : "rotation" - } - }, - { - "sampler" : 74, - "target" : { - "node" : 15, - "path" : "scale" - } - }, - { - "sampler" : 75, - "target" : { - "node" : 23, - "path" : "translation" - } - }, - { - "sampler" : 76, - "target" : { - "node" : 23, - "path" : "rotation" - } - }, - { - "sampler" : 77, - "target" : { - "node" : 23, - "path" : "scale" - } - }, - { - "sampler" : 78, - "target" : { - "node" : 22, - "path" : "translation" - } - }, - { - "sampler" : 79, - "target" : { - "node" : 22, - "path" : "rotation" - } - }, - { - "sampler" : 80, - "target" : { - "node" : 22, - "path" : "scale" - } - }, - { - "sampler" : 81, - "target" : { - "node" : 21, - "path" : "translation" - } - }, - { - "sampler" : 82, - "target" : { - "node" : 21, - "path" : "rotation" - } - }, - { - "sampler" : 83, - "target" : { - "node" : 21, - "path" : "scale" - } - }, - { - "sampler" : 84, - "target" : { - "node" : 26, - "path" : "translation" - } - }, - { - "sampler" : 85, - "target" : { - "node" : 26, - "path" : "rotation" - } - }, - { - "sampler" : 86, - "target" : { - "node" : 26, - "path" : "scale" - } - }, - { - "sampler" : 87, - "target" : { - "node" : 25, - "path" : "translation" - } - }, - { - "sampler" : 88, - "target" : { - "node" : 25, - "path" : "rotation" - } - }, - { - "sampler" : 89, - "target" : { - "node" : 25, - "path" : "scale" - } - }, - { - "sampler" : 90, - "target" : { - "node" : 24, - "path" : "translation" - } - }, - { - "sampler" : 91, - "target" : { - "node" : 24, - "path" : "rotation" - } - }, - { - "sampler" : 92, - "target" : { - "node" : 24, - "path" : "scale" - } - }, - { - "sampler" : 93, - "target" : { - "node" : 30, - "path" : "translation" - } - }, - { - "sampler" : 94, - "target" : { - "node" : 30, - "path" : "rotation" - } - }, - { - "sampler" : 95, - "target" : { - "node" : 30, - "path" : "scale" - } - }, - { - "sampler" : 96, - "target" : { - "node" : 29, - "path" : "translation" - } - }, - { - "sampler" : 97, - "target" : { - "node" : 29, - "path" : "rotation" - } - }, - { - "sampler" : 98, - "target" : { - "node" : 29, - "path" : "scale" - } - }, - { - "sampler" : 99, - "target" : { - "node" : 32, - "path" : "translation" - } - }, - { - "sampler" : 100, - "target" : { - "node" : 32, - "path" : "rotation" - } - }, - { - "sampler" : 101, - "target" : { - "node" : 32, - "path" : "scale" - } - }, - { - "sampler" : 102, - "target" : { - "node" : 31, - "path" : "translation" - } - }, - { - "sampler" : 103, - "target" : { - "node" : 31, - "path" : "rotation" - } - }, - { - "sampler" : 104, - "target" : { - "node" : 31, - "path" : "scale" - } - }, - { - "sampler" : 105, - "target" : { - "node" : 34, - "path" : "translation" - } - }, - { - "sampler" : 106, - "target" : { - "node" : 34, - "path" : "rotation" - } - }, - { - "sampler" : 107, - "target" : { - "node" : 34, - "path" : "scale" - } - }, - { - "sampler" : 108, - "target" : { - "node" : 33, - "path" : "translation" - } - }, - { - "sampler" : 109, - "target" : { - "node" : 33, - "path" : "rotation" - } - }, - { - "sampler" : 110, - "target" : { - "node" : 33, - "path" : "scale" - } - }, - { - "sampler" : 111, - "target" : { - "node" : 40, - "path" : "translation" - } - }, - { - "sampler" : 112, - "target" : { - "node" : 40, - "path" : "rotation" - } - }, - { - "sampler" : 113, - "target" : { - "node" : 40, - "path" : "scale" - } - }, - { - "sampler" : 114, - "target" : { - "node" : 39, - "path" : "translation" - } - }, - { - "sampler" : 115, - "target" : { - "node" : 39, - "path" : "rotation" - } - }, - { - "sampler" : 116, - "target" : { - "node" : 39, - "path" : "scale" - } - }, - { - "sampler" : 117, - "target" : { - "node" : 38, - "path" : "translation" - } - }, - { - "sampler" : 118, - "target" : { - "node" : 38, - "path" : "rotation" - } - }, - { - "sampler" : 119, - "target" : { - "node" : 38, - "path" : "scale" - } - }, - { - "sampler" : 120, - "target" : { - "node" : 37, - "path" : "translation" - } - }, - { - "sampler" : 121, - "target" : { - "node" : 37, - "path" : "rotation" - } - }, - { - "sampler" : 122, - "target" : { - "node" : 37, - "path" : "scale" - } - }, - { - "sampler" : 123, - "target" : { - "node" : 36, - "path" : "translation" - } - }, - { - "sampler" : 124, - "target" : { - "node" : 36, - "path" : "rotation" - } - }, - { - "sampler" : 125, - "target" : { - "node" : 36, - "path" : "scale" - } - }, - { - "sampler" : 126, - "target" : { - "node" : 35, - "path" : "translation" - } - }, - { - "sampler" : 127, - "target" : { - "node" : 35, - "path" : "rotation" - } - }, - { - "sampler" : 128, - "target" : { - "node" : 35, - "path" : "scale" - } - }, - { - "sampler" : 129, - "target" : { - "node" : 42, - "path" : "translation" - } - }, - { - "sampler" : 130, - "target" : { - "node" : 42, - "path" : "rotation" - } - }, - { - "sampler" : 131, - "target" : { - "node" : 42, - "path" : "scale" - } - }, - { - "sampler" : 132, - "target" : { - "node" : 41, - "path" : "translation" - } - }, - { - "sampler" : 133, - "target" : { - "node" : 41, - "path" : "rotation" - } - }, - { - "sampler" : 134, - "target" : { - "node" : 41, - "path" : "scale" - } - }, - { - "sampler" : 135, - "target" : { - "node" : 44, - "path" : "translation" - } - }, - { - "sampler" : 136, - "target" : { - "node" : 44, - "path" : "rotation" - } - }, - { - "sampler" : 137, - "target" : { - "node" : 44, - "path" : "scale" - } - }, - { - "sampler" : 138, - "target" : { - "node" : 43, - "path" : "translation" - } - }, - { - "sampler" : 139, - "target" : { - "node" : 43, - "path" : "rotation" - } - }, - { - "sampler" : 140, - "target" : { - "node" : 43, - "path" : "scale" - } - }, - { - "sampler" : 141, - "target" : { - "node" : 48, - "path" : "translation" - } - }, - { - "sampler" : 142, - "target" : { - "node" : 48, - "path" : "rotation" - } - }, - { - "sampler" : 143, - "target" : { - "node" : 48, - "path" : "scale" - } - }, - { - "sampler" : 144, - "target" : { - "node" : 47, - "path" : "translation" - } - }, - { - "sampler" : 145, - "target" : { - "node" : 47, - "path" : "rotation" - } - }, - { - "sampler" : 146, - "target" : { - "node" : 47, - "path" : "scale" - } - }, - { - "sampler" : 147, - "target" : { - "node" : 46, - "path" : "translation" - } - }, - { - "sampler" : 148, - "target" : { - "node" : 46, - "path" : "rotation" - } - }, - { - "sampler" : 149, - "target" : { - "node" : 46, - "path" : "scale" - } - }, - { - "sampler" : 150, - "target" : { - "node" : 51, - "path" : "translation" - } - }, - { - "sampler" : 151, - "target" : { - "node" : 51, - "path" : "rotation" - } - }, - { - "sampler" : 152, - "target" : { - "node" : 51, - "path" : "scale" - } - }, - { - "sampler" : 153, - "target" : { - "node" : 50, - "path" : "translation" - } - }, - { - "sampler" : 154, - "target" : { - "node" : 50, - "path" : "rotation" - } - }, - { - "sampler" : 155, - "target" : { - "node" : 50, - "path" : "scale" - } - }, - { - "sampler" : 156, - "target" : { - "node" : 49, - "path" : "translation" - } - }, - { - "sampler" : 157, - "target" : { - "node" : 49, - "path" : "rotation" - } - }, - { - "sampler" : 158, - "target" : { - "node" : 49, - "path" : "scale" - } - }, - { - "sampler" : 159, - "target" : { - "node" : 55, - "path" : "translation" - } - }, - { - "sampler" : 160, - "target" : { - "node" : 55, - "path" : "rotation" - } - }, - { - "sampler" : 161, - "target" : { - "node" : 55, - "path" : "scale" - } - } - ], - "name" : "Armature|Armature|ArmatureAction", - "samplers" : [ - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 15 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 16 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 17 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 18 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 19 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 20 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 21 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 22 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 23 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 24 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 25 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 26 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 27 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 28 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 29 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 30 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 31 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 32 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 33 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 34 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 35 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 36 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 37 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 38 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 39 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 40 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 41 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 42 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 43 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 44 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 45 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 46 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 47 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 48 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 49 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 50 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 51 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 52 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 53 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 54 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 55 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 56 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 57 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 58 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 59 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 60 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 61 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 62 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 63 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 64 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 65 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 66 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 67 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 68 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 69 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 70 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 71 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 72 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 73 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 74 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 75 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 76 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 77 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 78 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 79 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 80 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 81 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 82 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 83 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 84 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 85 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 86 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 87 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 88 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 89 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 90 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 91 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 92 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 93 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 94 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 95 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 96 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 97 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 98 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 99 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 100 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 101 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 102 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 103 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 104 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 105 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 106 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 107 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 108 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 109 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 110 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 111 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 112 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 113 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 114 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 115 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 116 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 117 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 118 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 119 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 120 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 121 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 122 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 123 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 124 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 125 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 126 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 127 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 128 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 129 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 130 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 131 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 132 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 133 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 134 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 135 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 136 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 137 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 138 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 139 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 140 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 141 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 142 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 143 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 144 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 145 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 146 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 147 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 148 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 149 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 150 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 151 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 152 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 153 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 154 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 155 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 156 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 157 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 158 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 159 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 160 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 161 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 162 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 163 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 164 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 165 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 166 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 167 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 168 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 169 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 170 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 171 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 172 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 173 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 174 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 175 - }, - { - "input" : 14, - "interpolation" : "LINEAR", - "output" : 176 - } - ] - } - ], - "materials" : [ - { - "doubleSided" : true, - "name" : "BagMaterial", - "pbrMetallicRoughness" : { - "baseColorFactor" : [ - 0.800000011920929, - 0.800000011920929, - 0.800000011920929, - 1 - ], - "metallicFactor" : 0, - "roughnessFactor" : 0.5 - } - }, - { - "alphaMode" : "BLEND", - "doubleSided" : true, - "extensions" : { - "KHR_materials_specular" : { - "specularColorFactor" : [ - 0, - 0, - 0 - ] - }, - "KHR_materials_ior" : { - "ior" : 1.4500000476837158 - } - }, - "name" : "BodyMaterial", - "pbrMetallicRoughness" : { - "baseColorFactor" : [ - 0.800000011920929, - 0.800000011920929, - 0.800000011920929, - 1 - ], - "metallicFactor" : 0 - } - } - ], - "meshes" : [ - { - "name" : "Cube.003", - "primitives" : [ - { - "attributes" : { - "POSITION" : 0, - "NORMAL" : 1, - "TEXCOORD_0" : 2, - "JOINTS_0" : 3, - "WEIGHTS_0" : 4 - }, - "indices" : 5, - "material" : 0 - } - ] - }, - { - "name" : "Cube.012", - "primitives" : [ - { - "attributes" : { - "POSITION" : 7, - "NORMAL" : 8, - "TEXCOORD_0" : 9, - "COLOR_0" : 10, - "JOINTS_0" : 11, - "WEIGHTS_0" : 12 - }, - "indices" : 13, - "material" : 1 - } - ] - } - ], - "skins" : [ - { - "inverseBindMatrices" : 6, - "joints" : [ - 52, - 45, - 5, - 4, - 3, - 2, - 1, - 0, - 28, - 27, - 8, - 7, - 6, - 14, - 13, - 12, - 11, - 10, - 9, - 20, - 19, - 18, - 17, - 16, - 15, - 23, - 22, - 21, - 26, - 25, - 24, - 30, - 29, - 32, - 31, - 34, - 33, - 40, - 39, - 38, - 37, - 36, - 35, - 42, - 41, - 44, - 43, - 48, - 47, - 46, - 51, - 50, - 49 - ], - "name" : "Armature" - } - ], - "accessors" : [ - { - "bufferView" : 0, - "componentType" : 5126, - "count" : 506, - "max" : [ - 0.1090814545750618, - 0.40452075004577637, - 0.0857388824224472 - ], - "min" : [ - -0.09462108463048935, - 0.2630254030227661, - -0.11617939174175262 - ], - "type" : "VEC3" - }, - { - "bufferView" : 1, - "componentType" : 5126, - "count" : 506, - "type" : "VEC3" - }, - { - "bufferView" : 2, - "componentType" : 5126, - "count" : 506, - "type" : "VEC2" - }, - { - "bufferView" : 3, - "componentType" : 5121, - "count" : 506, - "type" : "VEC4" - }, - { - "bufferView" : 4, - "componentType" : 5126, - "count" : 506, - "type" : "VEC4" - }, - { - "bufferView" : 5, - "componentType" : 5123, - "count" : 2346, - "type" : "SCALAR" - }, - { - "bufferView" : 6, - "componentType" : 5126, - "count" : 53, - "type" : "MAT4" - }, - { - "bufferView" : 7, - "componentType" : 5126, - "count" : 3484, - "max" : [ - 0.2035536766052246, - 0.5987313389778137, - 0.09013944119215012 - ], - "min" : [ - -0.19493983685970306, - -0.0017474208725616336, - -0.19020147621631622 - ], - "type" : "VEC3" - }, - { - "bufferView" : 8, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC3" - }, - { - "bufferView" : 9, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC2" - }, - { - "bufferView" : 10, - "componentType" : 5123, - "count" : 3484, - "normalized" : true, - "type" : "VEC4" - }, - { - "bufferView" : 11, - "componentType" : 5121, - "count" : 3484, - "type" : "VEC4" - }, - { - "bufferView" : 12, - "componentType" : 5126, - "count" : 3484, - "type" : "VEC4" - }, - { - "bufferView" : 13, - "componentType" : 5123, - "count" : 17472, - "type" : "SCALAR" - }, - { - "bufferView" : 14, - "componentType" : 5126, - "count" : 51, - "max" : [ - 2.125 - ], - "min" : [ - 0.041666666666666664 - ], - "type" : "SCALAR" - }, - { - "bufferView" : 15, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 16, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 17, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 18, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 19, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 20, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 21, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 22, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 23, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 24, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 25, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 26, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 27, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 28, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 29, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 30, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 31, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 32, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 33, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 34, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 35, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 36, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 37, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 38, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 39, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 40, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 41, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 42, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 43, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 44, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 45, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 46, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 47, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 48, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 49, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 50, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 51, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 52, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 53, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 54, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 55, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 56, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 57, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 58, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 59, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 60, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 61, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 62, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 63, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 64, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 65, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 66, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 67, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 68, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 69, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 70, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 71, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 72, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 73, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 74, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 75, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 76, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 77, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 78, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 79, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 80, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 81, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 82, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 83, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 84, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 85, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 86, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 87, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 88, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 89, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 90, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 91, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 92, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 93, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 94, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 95, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 96, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 97, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 98, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 99, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 100, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 101, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 102, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 103, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 104, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 105, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 106, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 107, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 108, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 109, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 110, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 111, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 112, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 113, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 114, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 115, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 116, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 117, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 118, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 119, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 120, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 121, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 122, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 123, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 124, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 125, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 126, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 127, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 128, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 129, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 130, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 131, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 132, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 133, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 134, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 135, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 136, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 137, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 138, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 139, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 140, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 141, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 142, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 143, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 144, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 145, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 146, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 147, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 148, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 149, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 150, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 151, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 152, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 153, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 154, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 155, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 156, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 157, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 158, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 159, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 160, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 161, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 162, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 163, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 164, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 165, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 166, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 167, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 168, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 169, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 170, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 171, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 172, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 173, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 174, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - }, - { - "bufferView" : 175, - "componentType" : 5126, - "count" : 51, - "type" : "VEC4" - }, - { - "bufferView" : 176, - "componentType" : 5126, - "count" : 51, - "type" : "VEC3" - } - ], - "bufferViews" : [ - { - "buffer" : 0, - "byteLength" : 6072, - "byteOffset" : 0, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 6072, - "byteOffset" : 6072, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 4048, - "byteOffset" : 12144, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 2024, - "byteOffset" : 16192, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 8096, - "byteOffset" : 18216, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 4692, - "byteOffset" : 26312, - "target" : 34963 - }, - { - "buffer" : 0, - "byteLength" : 3392, - "byteOffset" : 31004 - }, - { - "buffer" : 0, - "byteLength" : 41808, - "byteOffset" : 34396, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 41808, - "byteOffset" : 76204, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 27872, - "byteOffset" : 118012, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 27872, - "byteOffset" : 145884, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 13936, - "byteOffset" : 173756, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 55744, - "byteOffset" : 187692, - "target" : 34962 - }, - { - "buffer" : 0, - "byteLength" : 34944, - "byteOffset" : 243436, - "target" : 34963 - }, - { - "buffer" : 0, - "byteLength" : 204, - "byteOffset" : 278380 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 278584 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 279196 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 280012 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 280624 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 281236 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 282052 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 282664 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 283276 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 284092 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 284704 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 285316 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 286132 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 286744 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 287356 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 288172 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 288784 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 289396 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 290212 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 290824 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 291436 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 292252 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 292864 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 293476 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 294292 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 294904 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 295516 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 296332 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 296944 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 297556 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 298372 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 298984 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 299596 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 300412 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 301024 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 301636 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 302452 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 303064 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 303676 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 304492 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 305104 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 305716 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 306532 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 307144 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 307756 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 308572 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 309184 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 309796 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 310612 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 311224 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 311836 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 312652 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 313264 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 313876 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 314692 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 315304 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 315916 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 316732 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 317344 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 317956 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 318772 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 319384 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 319996 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 320812 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 321424 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 322036 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 322852 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 323464 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 324076 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 324892 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 325504 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 326116 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 326932 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 327544 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 328156 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 328972 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 329584 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 330196 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 331012 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 331624 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 332236 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 333052 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 333664 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 334276 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 335092 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 335704 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 336316 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 337132 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 337744 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 338356 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 339172 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 339784 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 340396 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 341212 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 341824 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 342436 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 343252 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 343864 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 344476 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 345292 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 345904 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 346516 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 347332 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 347944 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 348556 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 349372 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 349984 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 350596 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 351412 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 352024 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 352636 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 353452 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 354064 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 354676 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 355492 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 356104 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 356716 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 357532 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 358144 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 358756 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 359572 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 360184 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 360796 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 361612 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 362224 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 362836 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 363652 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 364264 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 364876 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 365692 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 366304 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 366916 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 367732 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 368344 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 368956 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 369772 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 370384 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 370996 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 371812 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 372424 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 373036 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 373852 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 374464 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 375076 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 375892 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 376504 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 377116 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 377932 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 378544 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 379156 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 379972 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 380584 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 381196 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 382012 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 382624 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 383236 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 384052 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 384664 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 385276 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 386092 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 386704 - }, - { - "buffer" : 0, - "byteLength" : 816, - "byteOffset" : 387316 - }, - { - "buffer" : 0, - "byteLength" : 612, - "byteOffset" : 388132 - } - ], - "buffers" : [ - { - "byteLength" : 388744, - "uri" : "data:application/octet-stream;base64,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CQgAAAkIAAAJCAAACQgAAAkVCAAJFQgACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkAAAAJAAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkAAAAJCAAACQAAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJAAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAgJExQJCBMUCAkTAAkIEwAICRMACQgTAAgJEwAJCBMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICQAACAkAAAgJAAAICQAACAkTAAgJEwAJCAAACAkAAAkIAAAJCAAACQgAAAkIAAAJCBMACQgTAAkAAAAJAAAACRMAAAkAAAAJEwgUCRMIFAkTFAgJExQICRMUCBMJFAgTFAkAExQJABMUCQATFAkAExQJABMUCQATFAAAFBMAABMUAAAUEwAAExQAABMUAAATFAAAExQJABMUCQgTFAkIEwgUCQkTCBQIEwkUCQgTFAgTCRQJCBMUCAkTFAkIExQICRMACQgTAAkIExQJCBMACAkTAAkIEwAJCBMACAkTAAkIEwAICRMACAkTAAkIEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkAAAgJAAAICQAACAkAAAgJAAAICQAACAkAAAgJAAAICQAACAkTAAgJAAAJCAAACQgTAAkIAAAJCAAACQgAAAkIAAAJCAAACQgAAAkIEwAJCBMACQgTAAkIEwAJAAAACQAAAAkAAAAJAAAACQAAAAkTCBQJEwgUCRMIFAkTCBQJExQICRMUCAkTFAgTCRQIExQJABMUCQATFAkAExQJABMUCQATFAkAExQJABMUCQATFAkAExQAABQTAAAUEwAAExQAABQTAAAUEwAAExQAABQTAAATFAAAExQAABQTAAATFAAAExQJCBMUCQATFAkIExQICRMJFAgTCQgUEwgJFAkTCBQJCBMUCBMJFAkIExQJCBMUCAkTFAkIExQJCBMUCAkTFAkIExQJCBMACQgTAAkIEwAICRMACAkTAAkIEwAICRMACAkAAAgJAAAICQAACAkAAAkIAAAJCAAACQgAAAkIAAAJAAAACRMIFAkTCBQJExQIExQJABMUCQATFAkAExQAABQTAAAUEwAAFBMAABMUCQATCRQICRMIFAkIExQJCBMUCQgTFAgJExQJCBMUCAkTAAkIEwAICRMACQgTAAkIEwAJCBMACAkTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJEwAICQAACAkAAAgJAAAICQAACAkTAAgJEwAICRMACAkTAAkIEwAJCBMACQgAAAkIEwAJCBMACQgTAAkTCAAJEwgUCRMIAAkTCBQJEwgUCRMIFAkTFAgTCRQIEwkUCBMJFAgTFAkAExQJABMUCQATFAkAExQJABMUCQATFAAAFBMAABMUAAAUEwAAExQAABMUAAATFAAAExQAABMUCQATFAkAExQJCAkTFAgTCRQICRMIFBMJCBQJCBMUCAkTFAkIExQICRMACQgTAAkIEwAJCBMACQgTAAkIEwAJCBMACQgTAAgJEwAICRMACAkTAAgJEwAICRMACAkTAAgJAAAICQAACAkAAAgJAAAICQAACAkAAAgJEwAICRMACQgTAAkIEwAJCAAACQgTAAkIAAAJCBMACQgTAAkIEwAJEwgACRMIFAkAAAAJEwgUCRMIFAkTCBQJExQIEwkUCBMUCQATFAkAExQJABMUCQATFAkAExQJABMUAAAUEwAA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XwAVAF8ALQAXACMAbgAXAG4AZQAvABcAZQAvAGUAaQAtAF8APwAtAD8AFAAjABcAVgAjAFYAVwAWAC4AWAAWAFgAWQAvABYAWQAvAFkAWgAXAC8AWgAXAFoAVgBbAEIAXABbAFwAPwBCACMAVwBCAFcAXAAuAFQAXQAuAF0AWABUAF4APgBUAD4AXQBeAFUAXwBeAF8APgBVAFsAPwBVAD8AXwBiAHYAgQBiAIEAeQBkAG0AfgBkAH4AegBoAGQAegBoAHoAfAB3AHEAfwB3AH8AgQAuABYAYQAuAGEAbwBVAF4AYwBVAGMAawAjAEIAdAAjAHQAbgAWAC8AaQAWAGkAYQBbAFUAawBbAGsAZwBUAC4AbwBUAG8AdQB7AHoAfgB7AH4AgACBAH8AeACBAHgAeQB5AHgAfAB5AHwAfQB9AHwAegB9AHoAewBzAGYAewBzAHsAgABwAGAAeABwAHgAfwBqAGIAeQBqAHkAfQBsAHIAgABsAIAAfgBgAGgAfABgAHwAeABmAGoAfQBmAH0AewAhAA8AhAAhAIQAiwAOACEAiwAOAIsAggAcAIkAhQAcAIUADADmAfYBigDmAYoAHQBIAIcAgwBIAIMAKwDxAfcBiADxAYgASQAwAEUAhgAwAIYAhQBFACsAgwBFAIMAhgApABEAjwApAI8AlQAQACkAlQAQAJUAjQAnAJMAjwAnAI8AEQDpAfgBlADpAZQAKABGAJEAjQBGAI0AKgDwAfkBkgDwAZIARwAsAFwAkAAsAJAAjgBcAFcAjABcAIwAkACWANgANgGWADYB1gDYAJcA1wDYANcANgE2AdcAmQA2AZkA2QDWADYB2QDWANkAmACYANkANwGYADcB2gDZAJkA2wDZANsANwE3AdsAmwA3AZsA3ADaADcB3ADaANwAmgCaANwAOAGaADgB3QDcAJsA3gDcAN4AOAE4Ad4AnQA4AZ0A3wDdADgB3wDdAN8AnACcAN8AOQGcADkB4ADfAJ0A4QDfAOEAOQE5AeEAnwA5AZ8A4gDgADkB4gDgAOIAngCeAOIAOgGeADoB4wDiAJ8A5ADiAOQAOgE6AeQAoQA6AaEA5QDjADoB5QDjAOUAoACgAOUAOwGgADsB5gDlAKEA5wDlAOcAOwE7AecAowA7AaMA6ADmADsB6ADmAOgAogCiAOgAPAGiADwB6QDoAKMA6gDoAOoAPAE8AeoApQA8AaUA6wDpADwB6wDpAOsApACkAOsAPQGkAD0B7ADrAKUA7QDrAO0APQE9Ae0ApwA9AacA7gDsAD0B7gDsAO4ApgCmAO4APgGmAD4B7wDuAKcA8ADuAPAAPgE+AfAAqQA+AakA8QDvAD4B8QDvAPEAqACoAPEAPwGoAD8B8gDxAKkA8wDxAPMAPwE/AfMAqwA/AasA9ADyAD8B9ADyAPQAqgCqAPQAQAGqAEAB9QD0AKsA9gD0APYAQAFAAfYArQBAAa0A9wD1AEAB9wD1APcArACsAPcAQQGsAEEB+AD3AK0A+QD3APkAQQFBAfkArwBBAa8A+gD4AEEB+gD4APoArgCuAPoAQgGuAEIB+wD6AK8A/AD6APwAQgFCAfwAsQBCAbEA/QD7AEIB/QD7AP0AsACwAP0AQwGwAEMB/gD9ALEA/wD9AP8AQwFDAf8AswBDAbMAAAH+AEMBAAH+AAABsgCyAAABRAGyAEQBAQEAAbMAAgEAAQIBRAFEAQIBtQBEAbUAAwEBAUQBAwEBAQMBtAC0AAMBRQG0AEUBBAEDAbUABQEDAQUBRQFFAQUBtwBFAbcABgEEAUUBBgEEAQYBtgC2AAYBRgG2AEYBBwEGAbcACAEGAQgBRgFGAQgBuQBGAbkACQEHAUYBCQEHAQkBuAC4AAkBRwG4AEcBCgEJAbkACwEJAQsBRwFHAQsBuwBHAbsADAEKAUcBDAEKAQwBugC6AAwBSAG6AEgBDQEMAbsADgEMAQ4BSAFIAQ4BvQBIAb0ADwENAUgBDwENAQ8BvAC8AA8BSQG8AEkBEAEPAb0AEQEPAREBSQFJAREBvwBJAb8AEgEQAUkBEgEQARIBvgC+ABIBSgG+AEoBEwESAb8AFAESARQBSgFKARQBwQBKAcEAFQETAUoBFQETARUBwADAABUBSwHAAEsBFgEVAcEAFwEVARcBSwFLARcBwwBLAcMAGAEWAUsBGAEWARgBwgDCABgBTAHCAEwBGQEYAcMAGgEYARoBTAFMARoBxQBMAcUAGwEZAUwBGwEZARsBxADEABsBTQHEAE0BHAEbAcUAHQEbAR0BTQFNAR0BxwBNAccAHgEcAU0BHgEcAR4BxgDGAB4BTgHGAE4BHwEeAccAIAEeASABTgFOASAByQBOAckAIQEfAU4BIQEfASEByADIACEBTwHIAE8BIgEhAckAIwEhASMBTwFPASMBywBPAcsAJAEiAU8BJAEiASQBygDKACQBUAHKAFABJQEkAcsAJgEkASYBUAFQASYBzQBQAc0AJwElAVABJwElAScBzADMACcBUQHMAFEBKAEnAc0AKQEnASkBUQFRASkBzwBRAc8AKgEoAVEBKgEoASoBzgDOACoBUgHOAFIBKwEqAc8ALAEqASwBUgFSASwB0QBSAdEALQErAVIBLQErAS0B0ADQAC0BUwHQAFMBLgEtAdEALwEtAS8BUwFTAS8B0wBTAdMAMAEuAVMBMAEuATAB0gDSADABVAHSAFQBMQEwAdMAMgEwATIBVAFUATIB1QBUAdUAMwExAVQBMwExATMB1ADUADMBVQHUAFUBNAEzAdUANQEzATUBVQFVATUBlwBVAZcA2AA0AVUB2AA0AdgAlgCWANYAlgGWAJYBVgHWAJgAWAHWAFgBlgGZANcAlwGZAJcBWQHXAJcAVwHXAFcBlwGYANoAmAGYAJgBWAHaAJoAWgHaAFoBmAGbANsAmQGbAJkBWwHbAJkAWQHbAFkBmQGaAN0AmgGaAJoBWgHdAJwAXAHdAFwBmgGdAN4AmwGdAJsBXQHeAJsAWwHeAFsBmwGcAOAAnAGcAJwBXAHgAJ4AXgHgAF4BnAGfAOEAnQGfAJ0BXwHhAJ0AXQHhAF0BnQGeAOMAngGeAJ4BXgHjAKAAYAHjAGABngGhAOQAnwGhAJ8BYQHkAJ8AXwHkAF8BnwGgAOYAoAGgAKABYAHmAKIAYgHmAGIBoAGjAOcAoQGjAKEBYwHnAKEAYQHnAGEBoQGiAOkAogGiAKIBYgHpAKQAZAHpAGQBogGlAOoAowGlAKMBZQHqAKMAYwHqAGMBowGkAOwApAGkAKQBZAHsAKYAZgHsAGYBpAGnAO0ApQGnAKUBZwHtAKUAZQHtAGUBpQGmAO8ApgGmAKYBZgHvAKgAaAHvAGgBpgGpAPAApwGpAKcBaQHwAKcAZwHwAGcBpwGoAPIAqAGoAKgBaAHyAKoAagHyAGoBqAGrAPMAqQGrAKkBawHzAKkAaQHzAGkBqQGqAPUAqgGqAKoBagH1AKwAbAH1AGwBqgGtAPYAqwGtAKsBbQH2AKsAawH2AGsBqwGsAPgArAGsAKwBbAH4AK4AbgH4AG4BrAGvAPkArQGvAK0BbwH5AK0AbQH5AG0BrQGuAPsArgGuAK4BbgH7ALAAcAH7AHABrgGxAPwArwGxAK8BcQH8AK8AbwH8AG8BrwGwAP4AsAGwALABcAH+ALIAcgH+AHIBsAGzAP8AsQGzALEBcwH/ALEAcQH/AHEBsQGyAAEBsgGyALIBcgEBAbQAdAEBAXQBsgG1AAIBswG1ALMBdQECAbMAcwECAXMBswG0AAQBtAG0ALQBdAEEAbYAdgEEAXYBtAG3AAUBtQG3ALUBdwEFAbUAdQEFAXUBtQG2AAcBtgG2ALYBdgEHAbgAeAEHAXgBtgG5AAgBtwG5ALcBeQEIAbcAdwEIAXcBtwG4AAoBuAG4ALgBeAEKAboAegEKAXoBuAG7AAsBuQG7ALkBewELAbkAeQELAXkBuQG6AA0BugG6ALoBegENAbwAfAENAXwBugG9AA4BuwG9ALsBfQEOAbsAewEOAXsBuwG8ABABvAG8ALwBfAEQAb4AfgEQAX4BvAG/ABEBvQG/AL0BfwERAb0AfQERAX0BvQG+ABMBvgG+AL4BfgETAcAAgAETAYABvgHBABQBvwHBAL8BgQEUAb8AfwEUAX8BvwHAABYBwAHAAMABgAEWAcIAggEWAYIBwAHDABcBwQHDAMEBgwEXAcEAgQEXAYEBwQHCABkBwgHCAMIBggEZAcQAhAEZAYQBwgHFABoBwwHFAMMBhQEaAcMAgwEaAYMBwwHEABwBxAHEAMQBhAEcAcYAhgEcAYYBxAHHAB0BxQHHAMUBhwEdAcUAhQEdAYUBxQHGAB8BxgHGAMYBhgEfAcgAiAEfAYgBxgHJACABxwHJAMcBiQEgAccAhwEgAYcBxwHIACIByAHIAMgBiAEiAcoAigEiAYoByAHLACMByQHLAMkBiwEjAckAiQEjAYkByQHKACUBygHKAMoBigElAcwAjAElAYwBygHNACYBywHNAMsBjQEmAcsAiwEmAYsBywHMACgBzAHMAMwBjAEoAc4AjgEoAY4BzAHPACkBzQHPAM0BjwEpAc0AjQEpAY0BzQHOACsBzgHOAM4BjgErAdAAkAErAZABzgHRACwBzwHRAM8BkQEsAc8AjwEsAY8BzwHQAC4B0AHQANABkAEuAdIAkgEuAZIB0AHTAC8B0QHTANEBkwEvAdEAkQEvAZEB0QHSADEB0gHSANIBkgExAdQAlAExAZQB0gHVADIB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x6buul52vb1wdoc9CbY+vELSt72/bxY9Khviu15Bsb1LPYc9ALqjvCWFsL0eLhY9Fg82vDe8nL2BsoY90O22vAZIpb1ryxU9lClCvA03iL23J4Y9niHKvOcKmr27aBU9E0ROvEI7d735CIU9uc6CvBEgkr1WJhU95cYMvHh/b71JSoQ9+I0Aunh/b71JSoQ9+I0Auro5j73JuhQ9lBU0u7o5j73JuhQ9lBU0u7MFgL2onXQ9OccRPJYHkr1U9xM9gHFKO54HXL3+oao9D/JwPJe+WL3yabM9w/yWPBYxlb17UgM9ZsoWO8zAmb22WBM99obrO9wxnL0IFwM9oOy/OzDanb2acO48DnisO+vtpb3GjQM96aa7O/mpr72FBAQ9MWG3O+G5pr1nfO88mL+rO5SZr70yiPA8JAerO35Jp71zW9Q8jATgO35Jp71zW9Q8jATgO/YEn70ZONM8kKPeO/YEn70ZONM8kKPeOweOr73NftU8i2XhOweOr73NftU8i2XhO0aMp72Z94A8kiurPKmIr71pLII8EjCrPOWPn72MhX88DyerPEWMp73t0Wo8U1q/POOPn738cGg8Llq/PKmIr73cMm08eFq/PEWMp73HkVQ8XH3VPKmIr73x61Y8UH3VPOOPn72fN1I8ZX3VPEWMp72DLu07UbMbPeOPn73gg+g7RbMbPamIr70j2fE7XLMbPUWMp72ZXNo7ar4gPamIr72rBt87ar4gPeOPn72HstU7Z74gPUWMp70pAMg7Ht4lPamIr70Aqsw7Gd4lPeOPn71SVsM7I94lPUWMp72gYis7krNGPeOPn73RDyI7lbNGPamIr71utTQ7j7NGPUWMp72VTKg4t1ZTPeOPn73rDIK4uFZTPamIr70SU2k5tFZTPUWMp71mfZK6RrtGPUWMp71mfZK6RrtGPeOPn738IqW6SbtGPeOPn738IqW6SbtGPamIr72er3+6QrtGPamIr72er3+6QrtGPUaMp71ExsK6oeAlPeOPn73ia9W6neAlPaqIr72oILC6peAlPUaMp72lZci6TakgPeOPn708C9u6SqkgPaqIr70OwLW6UakgPUaMp73HLsu6v2gbPaqIr70xibi6xWgbPeOPn71a1N26uGgbPUaMp70WZNK6fDvVPOOPn72sCeW6DzrVPKqIr71/vr+65zzVPEaMp70bZNK6/Vy+PKqIr72Gvr+65l++POOPn72xCeW6Flq+PEaMp70gZNK67z6pPOOPn723CeW6kTapPKqIr72Jvr+6S0epPLKJp714ntK6PILoO4Qdob3Ft+C68gvmO+H1rb0rhcS6iPjqO2GEp72pWKm6kkWNO0HQnb2jALy628eHO4I4sb2xsJa6SsOSO2mSp73dtc06gskvudXztL3FOOQ6TNkrOdXztL3FOOQ6TNkrOfwwmr3yMrc6GNsCuvwwmr3yMrc6GNsCuqLkp70ye1o70y/ou9mlsb0vz2M7nX7fu9mlsb0vz2M7nX7fu2sjnr00J1E7COHwu2sjnr00J1E7COHwu7AiqL1BALM7RtwlvLAiqL1BALM7RtwlvEWnob3tea87A4sovEWnob3tea87A4sovB2err2XhrY7iC0jvB2err2XhrY7iC0jvCcqqL0kQFQ8fgIkvAkEsL2oeVY8f9IgvEdQoL2kBlI8fTInvC/wp73OeLs8wqEXvC/wp73OeLs8wqEXvEaRn73lV7o8fJ8bvEaRn73lV7o8fJ8bvBdPsL26mbw8CKQTvBdPsL26mbw8CKQTvHRZp72yi+08f00avNJXnr0Sf+w8eRcgvBRbsL1TmO48hYMUvF6Dpr0HwQQ9hKYpvBZssL3xOAU95U4hvKmanL0dSQQ9JP4xvPVflb0hAgQ9n/D1u2+ckr2EvAM9YNwsu2+ckr2EvAM9YNwsuzqPl71b/Os8FdrduyADmb0x37k8Ss3RuyADmb0x37k8Ss3Ru/HSlL0dXuw8JVcZu/HSlL0dXuw8JVcZu1i6lb1m1Lk8hhODuVi6lb1m1Lk8hhODuVi6lb1m1Lk8hhODuSpRl73k5O08OqUJO865mL2KB9A8w5uJO865mL2KB9A8w5uJOxpSmb0cFHY8APqpPBpSmb0NbWA8AfS+PJxslb3GuUo8hcmoPJxslb0YEzk8r46+PBMclL25xNk7QEeoPBMclL3xD8U7hmW+PAQHlr1VYT080vglup1slb2g/4A6HV+oPJ1slb2g/4A6HV+oPJxslb0/HUs6NWG+PJxslb0/HUs6NWG+PBlSmb1JeMC6j8moPBpSmb1k5sO6E16+PBlSmb3rR8e6IurUPJ1slb2WBBU6tJbUPJ1slb2WBBU6tJbUPKtYmb0OGM+62WobPT1amb3YVs26gKggPVePlb1byqG543AbPVePlb1byqG543AbPdmflb2Xw865P6ggPdmflb2Xw865P6ggPQpLlL0/VCw703cbPf5klL109Bc72aYgPWSPlb13drg7DoMbPRMclL3grbA7OHHUPJxslb0dyCc8wZXUPBpSmb0tZks8zgfVPLFYmb2uveA7JaYbPTlamb29ds07c7EgPfVcmb3HUrk7E78lPZGflb0MFqc7B6UgPXTBlb0kmpM7ubclPZuclL3P5QE7K8klPfhMlr2zFyk7ntc0PS1vmb2b2B87GnI/PXq5lb0Bty06asA4PfhMlr0LKy66otw0PfhMlr0LKy66otw0PaVgmb12zAu4J51KPS1vmb17MaC6VHg/PS1vmb17MaC6VHg/PQldmb326ce6z9slPXbClb007fW55dQlPXbClb007fW55dQlPcAXmr0EbUs8AR/guxMKt72/eQU9qjrLu74/ub1VWQU98NDhur4/ub1VWQU98NDhugmItr0DK+88NMa7u8q0uL3wzu88Yu27usq0uL3wzu88Yu27ugJDtr3BPL08iMO1uwJDtr3BPL08iMO1uwsGub3nhL0802slOgsGub3nhL0802slOgsGub3nhL0802slOoaltb0UCFI8YnjHu7seub3FskQ8vR+EOYTLur3IuOk7iJqoPIXLur13mdQ7eXe+PLeCub2MhL06TKWoPLeCub2MhL06TKWoPLWCub1jz1I8UxOpPLWCub3r3kA8fZ6+PNextb3mcn08mCKqPNextb2Ul2c8kPu+PDvLtb3ActM8B0iYOzvLtb3ActM8B0iYO5cOtr0FE/E8GGciOxKNtr0NyAQ96twiO9extb39Z1I8gQrVPLWCub1tWi8825vUPGartb3xhu47XqYbPemptb3jO9s7erEgPblgub2fRsc7LIMbPetQub1c3bU7F6UgPaWdur3BQUo79XcbPUqEur2E0TU75aYgPcZgub1yQBU5/nAbPcZgub1yQBU5/nAbPYLLur1l5L87hnjUPLeCub1D/4U6Yp3UPLeCub1D/4U6Yp3UPLWCub0tf6E6k3C+PLWCub0tf6E6k3C+PNextb1YNJC6Qu/UPNextb1fxIy6Imm+PGurtb31EZi682obPeSptb1AUpa6jaggPSentb0455C629slPaVQub2/Tms4TKggPaVQub2/Tms4TKggPdMuub3QW6G3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iYdoP0mcvT7AAdg+wzQ/Prg+Yj8i9T0+IbBbP8InOj7Ml1M/ZxA3PoEISz9mBQ4+xq9IPxJVzD0DWkY/zqnqPhDAlT7wl9c+aJaYPjwoxj643Z4+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8LDQoOCw0KDgsNCg4LDQoOCw0KDgsKDQ4LCg0JCwoNCQsKDQkLCg0JCwoNCQsKDQkLCg0JCwoNCQsKDQ4LCg0JCwoNEwsKDQ4LCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoTDQsKDRMLChMNCwoNEwsKEw0LCg0TCwoTDQsKDRMLCg0TCwoTDQsKEw0LCg0TCwoTDQsKDRMLChMNCwoNEwsKEw0LCg0TCwoTDQsKDRMLChMNCwoNCQsKEw0LCg0JCwoNCQsKEw0LChMNCwoNCQsKDQkKCxMNCgsNCQoLCRMKCw0JCQ0KCw0JCgsJEw0KCQ0TCAkTDQgNCQ4ICQgNEwkNCA4JCBMNCAkNDggJDQ4ICRMNCAkBDQgJAQ4ICQEhAQgJIQgBCSEIAQkhAQgCKwEhCAIBCCErAQIhJQECJQgBAiEAAQIlIQECISsBAiUAAQIlIQIBISUBAiUhAQIlIQIBJSEBAiUhAQIjJQECIyUBAiMAAQIjAAECJQABAiUAAQIfJQECIx8BAiUfAQIjJQECIy0BAiUfAQIfIwEfAiUBAiMfAR8CJQECHyMBHwIlAR8CJQEfAiUBHwIlAR8CJQEfAiUBHwIjAR8CIx8BAiUfAQIlHwECJQEfAiMfAQIAHwECJR8BAiUfAQIjHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwEjAB8BAAAfAQgJHwEICR8BCAkBHwgJAR8ICQEfCAkBHwgJHwEICR8BCAkBHwgJAR8ICQEIHwkBCB8JAQgJHwEIHwkIAQkfAQgJAggBCR8ICQENCAkBHwgJAQ0ICQ0OCAkNDggJDRMJCA0OCQgNEwkIDQ4JDRMIDQkOCAkNEwgJDQoLCQ0TCg0JCgsKCw0JCgsNCQoLCRMLCg0JCwoTDQsKDQkLCg0JCwoNCQsKDQkLCg0JCwoTDQsKEw0LCg0JCwoNCQsKEw0LCg0JCwoTDQsKDQkLCg0TCwoTDQsKDQ4LCg0TCwoNAAsKEw0LCg0ACwoNEwsKDQALCg0ACw0KAAsKAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsKDQALCg0ACwoNAAsKAAALCg0TCwoNEwsKDQALCg0TCwoNEwsKDQALCg0ACwoNEwsKDRMLCg0TCwoNEwsKEw0LCg0TCwoTDQsKDRMLCg0TCwoTDQsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDRMLCg0TCwoNEwsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDRMLCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNDgsKDQ4LCg0ACwoNDgsKDQ4LCg0OCwoODQsKDQ4LDgoNCw4NCgsODQoLDg0KCw4NCgsODQoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoLDQ4KCw0OCgsNDgoNCw4KCw0OCg0LDgoNCw4KDQ4LAA0OCwoODQsADg0LAA4NCwAODQsADg0LAA4NCwAODQsADg0LAA4NCwAODQsADg0AAA4NAAAODQAADg0AAA4PAAAODwAADg8AAA4PAAAODwAADw4QAA4PEAAODxAADg8AAA8OAAAODxANDg8QAA4NDwkODxANDg0PCA4PEAAODxANDg8QDQ4PDQgODw0IDw4QAA8OEAAODxANDg8NCQ8OEAAODxANDg0PCQ8OEAAODxAADw4QAA4PDQAODxAADw4QAA4PAAAODQAADg0LAA4NAAAODQsADg0JIQ0OCQsODQkIDQ4JCA4JDQgNDgkLDQ4JIQ0OCwoNDgsKDQ4LCg0LDgoNCwoODQsOCgsNCg4LDQ4KCw0OCgsNDgoNCw4KCw0OCgsNDgoNDgsKDQsOCg0OCwAODQsADg0LAAsNDgoLDQoOCw0KDgsKDQ4LCg0OCwoNDg0KCwkNCQoLDQkOCAkNDggJCA0OCQ0IDggJDQ4ICQINAQgJIQEICQIBIQgCAQIhCCECAQACASEAAiEBAAIhAQACIQEAAiEBAAIhAwECAwQhAiEBAwIhAwACAwQAAgMhAAIhASMCAwQAAgMjBAIDIwQCASMhAgEjIQMCBAADAgQAAiMDBAIjAQADAgQAAiMBAwIjAQAEAgMAAgMBIwIjAQAEAgMjAiMEAQIEAyMCASMEAgQDIwIBIwMCASMDAgMEAAIDBAACAQMhAgMEAQIDIQQCAwQAAgMEAAIDBCECAwQAAgMEAAIDBAADAgQAAwIEAAQDAgADBAIAAwIEAAQDAgAEAwIAAwQCAAQAAAAEBQAABAMAAAQAAAAEBQAABAAAAAQFAAAEAwIABAMCAAQDAgAEBQAABAUAAAQDAgAEAAAABAIDAAQAAAAEAgMABAAAAAQCAwAEAAAABAIDAAQAAAAEAgMABAIDAAQAAAAEAAAABAMCAAQAAAADAgQAAwIEAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQAAAAUGAAAFAAAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABgAAAAYFAAAGBQAABgAAAAYFAAAGBQAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYEAAUGBAAFBgQABQYEAAUGBAAFBAYABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQCAAQFAgAEBQIABAUCAAQFAgAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAQFAAAFBAIABQQCAAQFAAAEBQAABQQAAAUEAAAFBAAABAUAAAUEAAAFBAAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQQAAAUGAAAFBgAABQYAAAUGAAAFBgAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAFBgAABQYAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABQQCAAQFAAAEBQAABAUAAAQFAAAEBQAABAUAAAUEAAAFBAAABQQAAAUEAAAFBAAABQQAAAUEAAAFBgAABQYAAAUGAAAFBgAABQYAAAUGAAAFBgAABQYAAAUEAAAFBAAABAUAAAQFAAAFBgAABQYAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABgUAAAYFAAAGBQAABQYAAAUGAAAGBQAABgUAAAYFAAAGBQAABgAAAAYFAAAGBQAABgUAAAYFAAAGBQAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGBQAABgUAAAUGAAADBAIAAwQCAAMCBAAjAgEfAQIjHyMCAQABIwIAASMCAAEjAh8BIwgCAQgjAgEjAgABCAkCAQgJAggJDSMICQIfCAkNDggJDQ4JDQ4IDQ4JCA0JDggNDgkIDQkLCg0OCwkNCwoJDQsKDgsKDQkLDQoOCwoNCQsKDQkLDQoOCw0KDgsKDQkLDQoOCw0KDgsNCg4LDQoOCw0KDgsKDQ4LCg4NCw0KAAsNCg4LDQAACw0AAAsAAAALDQAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKAAALAAAACwAAAAsAAAALAAAACw0AAAsNAAALDQoACw0KAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALDQAACw0AAAsNAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACw0AAAsNAAALDQAACw0AAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACwoNAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoNAAsKDQALCg0ACwoNAAsKDQALCg0ACw4KDQsKDQALDg0ACw0AAAsNAAALDg0ACw0OAAsODQALDg0ACw0OAAsNDgALDQ4ACw4NCgsODQALDQ4ACw0OAAsNAAALDQAACwAAAAsNAAALDQAACwAAAAsAAAALDQAACwAAAAsNAAALAAAACw0AAAsAAAALDQAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALDQAACwAAAAsNAAALDQAACw0OAAsNAAALDQ4KCw4KDQsNCg4LDgoNCw0OCgsODQoLDQ4KCw0OCgsNCg4LDQ4KCw0OCgsNDgoLDQoOCw0KDgsNCg4LDQoOCw0OCg0LCg4NCw4KDQ4LCg0OCwoNDgkLDQ4JCw4NCQgODQkIDg0JCA4NCAkODQgPDg0IDwgJDQ4ICQ0CCAkNAggJAgEICQIBCAkCAQgBCQIIAQkCCAEJAgECIwgBAiMhAQIjIQIBIyECASMhAgEjIQIjAQACIwEhAiMBIQIhAQACASEAAQIhCAgBAiEICQIhCAkODQ4JDQ8LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAAAQgJHwEfCAkBAiMfAR8CCAECIx8BHwIjAR8CIwEfAiMBHwIjAR8IAgEfCAIfAQIIAR8ICQEfCAkfAQgJHwEjAB8BIwAfASMtHwEjAB8BAAAfAQAAHwEAAB8BAAAfAAAAHwAAAB8AAAAfAAAAHwEAAB8tIwEfAQIjDw4QAA8OEAAQDw4AEBEAABAPDhEQDwAAEA8AABARAAAQEQAAEA8AABARAAAPEA4AEA8AAA8QDgAQEQAAEA8OERARDwAPEA4AEA8OERARAAAPEA4AEA8OERAPDhEQEQAAEBEAABAPDhEQEQAAEA8OERARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEAAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEQAAAREAAAERAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAARAAAAEQAAABEAAAAQEQAAEBEAABARAAAQEQAAERAAABEQAAAREAAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAAQEQAADw4QAA8OEAAPDhAADw4QAA8QDgAPDhAADxAOAA8OEAAPDhAADw4QAA8OEAAODxAACwoNAAsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTAAsKEwALChMNCwoTAAsKEwALChMACwoAAAsKEwALCgAACwoAAAsKAAALCgAACwoAAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKEwALEwoACwoTAAsKEwALChMNCwoTAAsKEw0LChMUCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQoLEwkKCxMJCRMKCxMJCgsJEw0IEwkUCAkIExQJCBMUCAkTFAgJExQICQETCAkBEwgBCR8BCAklAQgfCQEICR8BHwgJAQgfCQEfCAkBHwgJAR8ICQEfCAkfAQgJHwEICR8BAAAfAS0AHwEAAB8BAAAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAQAAHwEAAB8BAAAfAQAAHwEAAB8BAAAfASUAHwElLR8BJQIBHyUtAR8lAgEfJQIBHyUtAR8lLQEfJQIBJR8tASUfLQElLR8BJS0CASUtIwElHwIBJS0fASUtAgElLQIBJS0AASUtAAElAislAQIrASUCKyUBKwIBJQIrASUrIQElKwIBJSsAAQglIQErCCUBCAkrCAEJKwgJARMICQEUCAkTFAgJExQJCBMNCRMIFAkTDQgTCRQICRMKCxMJCgsKCxMJCgsTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTCQsKEwkLChMJCwoTDQsKEwkLChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKExQLChMJCwoTFAsKEwkLChMUCwoTCQsKEwkLEwoUCxMKFAsKEwkLEwoUEwoLCRMLChQTCQoLExQLChMJFAgTFAkrCRMUCBMUCQgJCBMUCRMIFAgJExQICSUTAQgJKwEICSUBKwglASUrCCslAQAlASsAJSsBACUrAQAlKwEAJSsBACUrJgElJicrJSsBJiUrJgAlJicAJSYrACUrAS0lJicAJSYtJyUmLSclAS0rJQEtKyYlJwAmJScAJS0mJyUtAQAmJScAJS0BJiUtAQAnJSYAJSYBLSUtAQAnJSYtJS0nASUnJi0lAS0nJScmLSUBLSYlAS0mJSYnACUmJwAlASYrJSYnASUmKyclJicAJSYnACUmJyslJicAJSYnACUmJwAmJScAJiUnACcmJQAmJyUAJiUnACcmJQAnJiUAJiclACcAAAAnKAAAJyYAACcAAAAnKAAAJwAAACcoAAAnJiUAJyYlACcmJQAnKAAAJygAACcmJQAnAAAAJyUmACcAAAAnJSYAJwAAACclJgAnAAAAJyUmACcAAAAnJSYAJyUmACcAAAAnAAAAJyYlACcAAAAmJScAJiUnACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKAAAACgpAAAoAAAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKQAAACkoAAApKAAAKQAAACkoAAApKAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCknACgpJwAoKScAKCknACgpJwAoJykAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoJwAAKCclACcoJQAnKCUAJyglACcoJQAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAnKAAAJygAACcoAAAoJyUAKCclACcoAAAnKAAAKCcAACgnAAAoJwAAJygAACgnAAAoJwAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCcAACgpAAAoKQAAKCkAACgpAAAoKQAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAAoKQAAKCkAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKCclACcoAAAnKAAAJygAACcoAAAnKAAAJygAACgnAAAoJwAAKCcAACgnAAAoJwAAKCcAACgnAAAoKQAAKCkAACgpAAAoKQAAKCkAACgpAAAoKQAAKCkAACgnAAAoJwAAJygAACcoAAAoKQAAKCkAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKSgAACkoAAApKAAAKCkAACgpAAApKAAAKSgAACkoAAApKAAAKQAAACkoAAApKAAAKSgAACkoAAApKAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApKAAAKSgAACgpAAAmJyUAJiclACYlJwAtJQEfASUtHy0lAQABLSUAAS0lAAEtJR8BLQglAQgtJQEtJQABCAklAQgJJQgJEy0ICSUfCAkTFAgJExQJExQIExQJCBMJFAgTFAkIEwkLChMUCwkTCwoJEwsKFAsKEwkLEwoUCwoTCQsKEwkLEwoUCxMKFAsKEwkLEwoUCxMKFAsTChQLEwoUCxMKFAsKExQLChQTCxMKAAsTChQLEwAACxMAAAsAAAALEwAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsKAAALAAAACwAAAAsAAAALAAAACxMAAAsTAAALEwoACxMKAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoAAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALEwAACxMAAAsTAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACxMAAAsTAAALEwAACxMAAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKAAALCgAACwoAAAsAAAALAAAACwAAAAsAAAALCgAACwoTAAsKEwALChMACwoTAAsKEwALEwoACwoTAAsKEwALEwoUCwoTFAsKEwALChMUCwoTFAsKExQLChMUCxQKEwsUEwoLFBMKCxQTCgsUEwoLFBMKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKCxMUCgsTFAoLExQKEwsUCgsTFAoTCxQKEwsUChMUCwATFAsKFBMLABQTCwAUEwsAFBMLABQTCwAUEwsAFBMLABQTCwAUEwsAFBMLABQTAAAUEwAAFBMAABQTAAAUFQAAFBUAABQVAAAUFQAAFBUAABUUFgAUFRYAFBUWABQVAAAVFAAAFBUWExQVFgAUExUJFBUWExQTFQgUFRYAFBUWExQVFhMUFRMIFBUTCBUUFgAVFBYAFBUWExQVEwkVFBYAFBUWExQTFQkVFBYAFBUWABUUFgAUFRMAFBUWABUUFgAUFQAAFBMAABQTCwAUEwAAFBMLABQTCSsTFAkLFBMJCBQJEwgTFAkLExQLChMUCwoTCxQKEwsUCgsTChQLExQKCxMKFAsTChQLExQKCxMUCgsTChQLChMUCxMUCgsTChQLChMUCwoTFAsTFAoLExQKEwsUChMUCwoTCxQKExQLABQTCwAUEwsAFAkTFQgJFBMUEwgVFBMIFQgJEyUICRMlFBMICQgJExQUEwkIFBMJCBQTCQgTFAkLExQJCxMUCwoTFAsKEwsKFBMLFAoLEwoUCxMUCgsTChQLEwoUCxMUCgsTFAoLEwoUCxMKFAsTFAoLExQKCxMUCgsTFAoLFBMKCxQTCgsUEwALExQACxMUAAsUChMLExQACxQKEwsTChQLExQKCxMAAAsTAAALEwAACxMAAAsTAAALAAAACxMAAAsAAAALEwAACxMAAAsTFAALExQACxMUAAsTFAALFBMACxQTAAsUEwALFBMACxQKEwsTAAALEwAACxMAAAsTCgALEwAACwAAAAsTAAALAAAACxMAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACAklAQgJJQEICSUBCAEJJQgBCSUIAQklASUtCAElLSsBJS0rJQEtKyUBLSslAS0rJS0BACUtASslLQErJSsBACUBKwABJSsICAElKwgJJSsVFBYAFRQWABYVFAAWFwAAFhUUFxYVAAAWFQAAFhcAABYXAAAWFQAAFhcAABUWFAAWFQAAFRYUABYXAAAWFRQXFhcVABUWFAAWFRQXFhcAABUWFAAWFRQXFhUUFxYXAAAWFwAAFhUUFxYXAAAWFRQXFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFwAAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFxYAABcWAAAXFgAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABYXAAAWFwAAFhcAABYXAAAXFgAAFxYAABcWAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAWFwAAFhcAABYXAAAVFBYAFRQWABUUFgAVFBYAFRYUABUUFgAVFhQAFRQWABUUFgAVFBYAFRQWABQVFgALChMUCwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMACwoTAAsKEwALChMNCwoTAAsKEwALChMNCwoTDQsKEw0LChMNCwoTDQsKEw0LChMNCwoTDQsKEwALChMACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAEICR8BHwgJASUtHwEfJQgBJS0fAR8lLQEfJS0BHyUtAR8lLQEfCCUBHwglHwElCAEfCAkBHwgJHwEICR8BLQAfAS0AHwEjLR8BLQAfAQAAHwEAAB8BAAAfAQAAHwAAAB8AAAAfAAAAHwAAAB8BAAAfIy0BHwElLQsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAACIQEDAiEDAAIhAyMCASMDAgEjAwIjAQMCIwEDAgEDIwIBIwQCASMfAgEjAwIBIwMCAQMlAiEBAyUrASYlKyYAJSsmLSUBLSYlAS0mJS0BJiUtASYlASYtJQEtJyUBLR8lAS0mJQEtJiUBJgIlKwEmZszmPnKYgD5B3mQ+HbCYPWbM5j5ymIA+Qd5kPh2wmD0/E88+EDaUPt+jZz4Dk6M91YPjPmaNlz7quB8+O0nUPdWD4z5mjZc+6rgfPjtJ1D2aHgE/kNVePjZTVD6guZA9TuDoPkOTkD6wglU+z1hePU7g6D5Dk5A+sIJVPs9YXj0PsOg+PLOfPjy+Kz5c9oY9D7DoPjyznz48vis+XPaGPSZ80T4yk5k+yMpsPh1adD3+DQA/KzOHPufKPz42W0Y9G+T8PkprlD7jOh8+X5l4PedKFj8zGGw+S1gWPpaPET21KRw/q7RKPtl0Az5SX4I9az0SP41mgT5MRwI+qddHPf2XNz+IJik+jlDTPTIUbTwh9zw/CZYOPgO5yj2mh8E8I1cvP3HJPD6bXMU94q4MPdwNSj+WMAM+/XuOPZefVTw/IEU/QVoOPoSchT3/s9I8cOFOP60X7j1s75U97KwdOzFXVT/FPPU9ROEZPavIGDyT2VI/wIL/Pd/hEz25/X08wPpYP4+/5z33/RE9Am9tO80mVz98DwI+ASbFPDwJCzxsBlo/Jmz2PSR8wTzfFpA74fZUPyUDBj54k8s8i+5KPDseVz92ugM+HEm5PE03Cjw7Hlc/droDPhxJuTxNNwo84m5VPxbhBz7r2LA8c4REPOJuVT8W4Qc+69iwPHOERDy9ylk/FNv6PcuWtDxylZo7vcpZPxTb+j3LlrQ8cpWaO0LhVj8j5gY+fYarPGxAAjzHZ1U/qboKPjw3pDws9TE8xvRYP1HcAT7sqak8GmujOxndUT919Cw+GMD9OwpKajsrWVM/zlInPo9/BDx0IkA7zMdQP1YUMT6mZew7NyqNOyRtUT9y3DQ+mbhkO3UQ7jrtLlI/28UxPv2/djvTt9E6HcxQP4dZNz4EpVQ71dsIO+yeVD9RYio+lYjIOqV3yDoUiFA/yH04Po+BPzu19xg7u2RQP8IFOT7B7Sw7OeUsO1EhUD+lizM+5ofXO9tapjvE308/YJI0Pivrvju95r47iZNUP57TDD71xJY831lgPF5OVD9yiQ0+8/SEPMHzhDxHUFQ/Y7QJPtwSqzyvgno8R1BUP2O0CT7cEqs8r4J6PEYOVD8qcQo+iFeVPFtWlTxGDlQ/KnEKPohXlTxbVpU8QyVUP7FhCD71gbU8LMiCPH7bUz/RGAk+e+WdPErknTxq4FE/3osCPrh6AT1Rnqw8L0JRP16oAz4hPN08+DrdPOOuQj/l4xI+sIBvPYwBGj25lkA/SiUVPvD/UD1t/1A9I9UrP3OjRj6DmKQ9++5ePdq4Kj/nDkw+vQ2JPaENiT28MQ8/op+LPoxw2D0cBn8923EOPzeEjz4xMKc9GDCnPUyo+j7ijaU+dmfzPca/iz0q/fk+b9uqPtpOtj3CTrY9TfHkPlmMtD4/jwA+6OqYPU3x5D5ZjLQ+P48APujqmD37/uQ+76i7PjWwvj0esL49+/7kPu+ouz41sL49HrC+PUf0yz5+C8Q+UMoJPkpsrD1H18w+CuWvPiAkOz58xpY93YLNPs74zD62CMs9oAjLPZNO2T6leIY+U/czPj56DD5cPuY+/UeJPtAWID553AA+KZHBPp4NhT7GH4A+xgXlPZhTzj5sRps+Md4wPojb9z2aLP4+g+l+PmNGEj7R7eQ92qzlPlZuPj5Sbj4+osk3PqwcBj82w5Y+UG3UPXygnz0w5xE/iZExPoeRMT5YgKo9khcGP1f5oD4gLrY9+S+VPbXf7j4ngoQ+XhJIPthToj0wuMg+NgmLPsBpTz5zEwk+wZH0Pm8IiT7SZQI+0GUCPomY5D7ivco+dEbcPc6/TD0oetQ+pPOmPoUPBT7lFAQ+3wfiPiBx1D4ADpM9/g2TPb5tAD+CKpI+b7YEPiZ7qj3YqRk/SeR8PhQjyj0/i109BPMNPxnVnz4NrAc+NLBdOtMZ5T5MXMw+Gm0YPibVlDtL69U+N0/QPmljMj72yJM6xurbPnav1D6Mlxc+ZH/mO9IqTj81wAY+b0ZaPT8uIDx860g/hfSoPbWrkT2+B3w9gKxCP+DZdD5xQGg5cUBoOV8eSz9u+fI99FVHPUbRID0za1o/nHiSPZx4kj2OpnY71DkWPxBmgT6PTCQ+AAAAADePRj9LqSw+FVELPYwssjzi8N0+t0+1PigvWT7/TZ85FH5QP7EHvj2xB749AAAAAH5YPz8NeVs+FK8RPTROLjs3mRI/szqBPnNcLT5vKbk7hMtOP0uPxD1Jj8Q9V0iFOduwQz8xUTw+DlhDPYqsgju3mQ4/TkTVPnri0TwDOVQ6w/pAP8Es9j3BLPY9Oga9O4aZTj8+jz8+MJ6VO87erjqGmU4/Po8/PjCelTvO3q46dF0CP3mW7D7z6eo8AAAAAHRdAj95luw+8+nqPAAAAADnFFg/ZKyfPWSsnz0AAAAA5xRYP2Ssnz1krJ89AAAAAA9rID/WX50+8q0vPeJEvTzIEfQ+PpLfPlhdmT1jlEA8mq8ZP34lIT5+JSE+Pu2tPTMbFj9gbpU+fJGlPd22Jz1ISso+4/rIPqsdWT5R/a85Y175PnrxOD568Tg+SWAbPsjGJj9Sbyc+bYzyPbJeiD2fVCo/xQkQPr2jxj29o8Y9T2APP+SReD7Nye897g+kPThDLj8FND0+j4jxPa3WhzybVyU/NeMmPh+UIj4WqQQ9RB0sPxSuUT69uXs9vbl7PekxGT9gU58+pZaqPSrJ6DvpMRk/YFOfPqWWqj0qyeg7WQsHPytUwT6SVEI9klRCPVkLBz8rVME+klRCPZJUQj1ZCwc/K1TBPpJUQj2SVEI9qtEbP0gbgj57dAk+zJNDO6rRGz9IG4I+e3QJPsyTQzuy7Qc/+nvXPlOtPD3zewk79yorPzVKjz7Z/tI82f7SPPcqKz81So8+2f7SPNn+0jx+f+8+DoXgPnp+vz1mr145+LJ3P/Ju8zy9jzE7AAAAADEjfj9vctg7OKmvOTiprzkxI34/b3LYOziprzk4qa85MxdLPzAkTD7mG+k725FYOTU4fT+w8jE8AAAAAAAAAACcAH8/OGR/OwAAAAAAAAAAKlF6P8zatTwAAAAAAAAAACpRej/M2rU8AAAAAAAAAACWDFs/p80TPgAAAAAAAAAACmhWP9pfJj4AAAAAAAAAAApoVj/aXyY+AAAAAAAAAACVi3o/XI2uPAAAAAAAAAAAY6B2P9X5FT0AAAAAAAAAAFCsfz84Xqc6AAAAAAAAAAC+jHE/JTRnPQAAAAAAAAAAvoxxPyU0Zz0AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAA8d/P5fyYzoAAAAAAAAAANj1fz/qeSI5AAAAAAAAAADGh38/wHPwOgAAAAAAAAAArr98P20UUDwAAAAAAAAAAJQXez+QDZ08AAAAAAAAAACzzn4/TKaYOwAAAAAAAAAAysNyP2bDUz0AAAAAAAAAAGVkdz+suQk9AAAAAAAAAAA8z20/HoaRPQAAAAAAAAAAbFNaP1KyFj4AAAAAAAAAAHd4Tz9AmT8+rDkhOwAAAACKqWE/r7PyPQAAAAAAAAAA6BojP10vlj7Q7Ys9cl6fOndHGz/kUbQ+dBAjPQggvTr3dCc/XJOJPuIrnD1efG86lebiPqw9xz76NA8+LhTkPJXm4j6sPcc++jQPPi4U5Dw4vAM/hg2xPjK23D33YwI9OLwDP4YNsT4yttw992MCPZc+3D5ziNQ+/2H6Pa4DBT2XPtw+c4jUPv9h+j2uAwU9U7ABP0XAfT6VFCE+uNO0PedK8D4AdJA+OjQcPvGbxD18eBk/YEIvPoTEID5VLpQ9pcP0PmZphT4t0As+dav/PXJeFz8VHII+DInGPSEmbD3/id8+s6V+PgplMz5H4Q4+EOTPPgYKtD6txjY+T7qCPXwQ7T7DJMs+QCoLPpBojTudLso+nYKlPkqWOT6BDs49mbUSPwrWeT49uCc+1tqcPLCmEz8MRIE+JmAtPm+Bvjp/xxI/aAOXPsGY1T2PduA8ZwoTPwwzlD76SrU9SitDParfED8lzoI++if6PU5EZz2W9Bc/402XPtUjYz3VI2M9SCgJP5dwdj7Phh8+9c6KPZz0DD8AJH4+lQnOPZUJzj0qR+Y+W+NiPizaWz5LaOk9rikEP3u+kT74otE9pBXGPQ638D7/yrE++ZW9PdlhuD31dBA/g5YrPoOWKz5R/s09oPHMPtOslz7Geyk+T0cNPkIr6j6LaT4+i2k+Pl/WLj7iWPI+Wh6CPpLmED73KgY+2/vFPrl3kj5ebjY+eKoYPgoCrz5gy48+rpGCPqWD+j3lltM+7B2VPvStKj5z6AM+ZezVPr08sz4R9ww+VG3BPSSi2D62F70+S4zUPUeM1D3M0tI+79GiPldXPz5uvqo9OFjtPjhHpT7uywQ+W+qrPThY7T44R6U+7ssEPlvqqz1yVeo+0sCWPmkvMT4gSJk9clXqPtLAlj5pLzE+IEiZPYqS7z7taaw+EwfIPQ4HyD2Kku8+7WmsPhMHyD0OB8g9AXQAP9Fmlz4q3QA+ZAqdPTHi/T6Dtok+zdcqPprtiz1swAE/QMWcPtFzvz3Mc789dusSP1Jwez7Y+O8928qBPYjFEz9wGIE+/LiuPfa4rj3VjhE/X6NhPmfdHj6ND2U98jw3P0fdHD6f37c9h/woPRGkNj/rdh8+0viFPc34hT2ZWTk/UwwOPuHo9D25xpA80VxbP7+Npz0VrFM9jq0dPAk0Xz+qtJ09GlZRPQAAAADuV1o/SfeoPVNJBD08SQQ9STpwP7iHRD0JT188AAAAADkxcD/e0E49RW64O0VuuDujem8/2t4iPcDtyjwAAAAAWMl9P23fCzyHR+U4AAAAAPP8fT/D5os7zD9rOwAAAABQIH0/Bew3PAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAHfB9P9z4AzwAAAAAAAAAAIi5fT8PnhE8AAAAAAAAAAAG/30/lj4APAAAAAAAAAAA8IB3Pw7xBz0AAAAAAAAAAHTydj/L2BA9AAAAAAAAAADWvXc/rSIEPQAAAAAAAAAAfQdzPzWITz0AAAAAAAAAAJMNcj/FJl89AAAAAAAAAABZ23M/b0pCPQAAAAAAAAAAO1txP1JMaj0AAAAAAAAAAGCycT8K2mQ9AAAAAAAAAAC5FnE/eJRuPQAAAAAAAAAARztuP8sljj0AAAAAAAAAAI6lbj+M04o9AAAAAAAAAABNA24/hkaPPScRnzkAAAAAy+dpP+lQrj2eL5w6AAAAAJrbaD8pQrE9/iB8OwAAAAAus2o/kGaqPQAAAAAAAAAA1TZlPzSDzD3arpc7CVsWOUyWZT/lFcs9gHwDO4B8AzsxbWQ/i37NPQR+8TsAAAAAtfljP+h80z3sj6w7KDd2OrX5Yz/ofNM97I+sOyg3djrDa2M/7EDUPZIHAzwAAAAAw2tjP+xA1D2SBwM8AAAAAAUvZD/uxNI9wi48O8IuPDsFL2Q/7sTSPcIuPDvCLjw75+phP5/d3z1g+sU7JHANO/hkYT+8ROE9ibkNPNAnbjqaAmI/SFnfPaCRhDu4jIQ79xRaP/QDEj5aoGY7pWoDOwwyWj/awxE+5oIuO/Z5LjubrFk/AAETPtUKlTtuH9I6DHZXP/2yHj5uoQM75CWzOnqTVz8EWB4+S43WOhZ81jrYQlc/yS8fPifEIjvB4Zw6yW5WP93IIT7ESVY7dWyROtdsWD8mCRY+c0nWO+GXyDrUxVU/U4sjPpZihTtdI5k6toJXP+x6GD4zKPU7g33oOjqeVD9YRig+MUd9O7jQpTpReFY/rK4bPvtEBDz37wo7jP9bPyOg9D0QG508nJYDO2piXj81Je49sA5jPO9pmTout14/m87jPaLfmTwAAAAALrdeP5vO4z2i35k8AAAAAL9kXz99mNw9FgahPAAAAAA13WA/+cLaPfeacjwAAAAANd1gP/nC2j33mnI8AAAAANOmYT/BltQ9Q5VxPAAAAABsTmI/m2zVPUcAQTwAAAAAbE5iP5ts1T1HAEE8AAAAAFsvYz8Olc89g4A3PAAAAAA9+l8/gZnmPSIbRjxIMtE5+iRmP3xpuj2idSM8AAAAAN0eZD+g17893ot5PAAAAAB2xW0/rPODPfEJ3jsAAAAAaWtwP2ocZD2jZ6k7AAAAADc0aD8K5po9+uCNPAAAAAD0Ilw/FAa9PaHEQz0AAAAAGq5rP9zOjD15Ai48AAAAALS9Vj/N5L89+GlvPYrEEzyu6mo/0xSCPXjSZzx7t5k78GRwPyl4YD00xsk7AAAAADN7UT91cas9TtOKPWCG9zwj7GE/QGxrPehlDj1u18484ipTPyuUlD3leGA9trBDPZ9qbz9OxxI9UluGPP+DTTzG3WA/dXUwPePYLz1M1RE9Q+tQP4ojkT1653s9Ph1TPVJPbz8WQ/A8Eh6cPIG0iTwCnjw/x5AOPiCkvD2PlAI9Tq5AP63pAD5AaOc9zI8KPE6uQD+t6QA+QGjnPcyPCjxlzjM/vQgCPuoe3j38uH49HxYBPwTqhz5+lE4+AfjpPL0t+z4tI44+mZkxPl4Sbz3g2gQ/H0eDPi8pVz5M0W084NoEPx9Hgz4vKVc+TNFtPF3q0D7uI6U+lrZ6PoFmyTzNcdA+OQyqPlRGTz5g9m49Lsi8PlKnrz6FrIg+iD+uPC7IvD5Sp68+hayIPog/rjy3cNM+5/SgPucahj6n7y88t3DTPuf0oD7nGoY+p+8vPDY+uj4sraw+z0SVPsrz8zs2Pro+LK2sPs9ElT7K8/M7Nj66PiytrD7PRJU+yvPzOzY+uj4sraw+z0SVPsrz8zsOWtg+crSjPixecT6dJrQ8rXXePhyEpD5a6UI+ZoxcPboFBT+BXog+w5hGPoaapDx4osA+IE2xPlj3gj4JkbE8eKLAPiBNsT5Y94I+CZGxPLagyT7JlrI+BJRNPgj0Zz22oMk+yZayPgSUTT4I9Gc9K3y4PmCqsz7u+4k+ididPCqdvD6/Tbs+jRtXPn86ZD3uhLM+9VWqPgbQnz5LRZU77oSzPvVVqj4G0J8+S0WVO6D60D5DFME+OuJbPgAAAABZgOM+80eOPraUez6/agM9guXSPmbJyT4xokY+AAAAAILl0j5myck+MaJGPgAAAAA3rwg/11HIPuc+mT0AAAAAQmf1PuTU3T5mD7M9AAAAAOEjDj9k18A+YoOLPQAAAADhIw4/ZNfAPmKDiz0AAAAA36ZVP33aJj7zgiI7AAAAACoUSj+QWFQ+m7JVOwAAAADr0Fc/k9wfPtu/XzoAAAAA69BXP5PcHz7bv186AAAAALVtcz+1JEk9AAAAAAAAAAA54G8/Of6APQAAAAAAAAAAfz10PxIoPD0AAAAAAAAAAH89dD8SKDw9AAAAAAAAAACmDXs/TkuePAAAAAAAAAAAkkZ9P3RbLjwAAAAAAAAAAI9YeD8T7vQ8AAAAAAAAAACPWHg/E+70PAAAAAAAAAAA4QJYP3/0Hz4AAAAAAAAAABeZQT+cpmA+NKjHPAAAAADf2Es/jXVKPtzexDsAAAAA39hLP411Sj7c3sQ7AAAAADeJXD8m2w0+AAAAAAAAAAAx908/PSNAPgAAAAAAAAAAb3U+P2wrLz6gZTU90JUmPRSHDD9Jy7M+O5rMPQAAAABNWT8/mjb3Pa45mT2Ximk9zdw0P/0xQT65EZM9y0cHPa4nNz8xnd89Q2jYPRq9jj2nvAo/bx2qPoXSAD4AAAAA+isnPwSTaz6KcN495UwIPPorJz8Ek2s+inDePeVMCDzmPzc/GMT+PU0AvD1sPIs95j83PxjE/j1NALw9bDyLPelJ+D4YCJA+/FtvPgAAAADpSfg+GAiQPvxbbz4AAAAAa2EmP/q2YT6xp/899PCdO5rTPz9cS+w9LqSRPaRzgz1o/eE+94qWPqN3hz4AAAAA+C0wPzFYRj5oAeE91vMGPMiGSD9iCb09joutPalpIj28wuA+gwyYPsIwhz4AAAAAbUw/P4tPOD6L/ZQ9AAAAAKBeBD/tAIU+qYNkPgAAAADoZG8/XrFdPaAAMDwAAAAAHAtHP9rGMj7kMkQ9AAAAAC6+GT/h6mM+axw1PgAAAAA7oXY/TuwVPQAAAAAAAAAAZGtxP8FJaT0AAAAAAAAAAH6QUT+zujg+SquBOgAAAACecW4/FHOMPQAAAAAAAAAAbApEP/Fwbz6wv8o5AAAAAEMDOj9fjl4+NZw6PY/YKzzxuRo/A3+9PupXojwE6Lk7Da8WP7FCkD7rOcE9y4UQPZj41j6fA4g+kWNhPgRIwT3jaiU/h2QSPnTIDz7yTpA9KEwnP64RiT7b6449NWETPAGBKj+M5EA+T6j8PV8atjx1OCs/vgksPpSW1D2UJHM9De4tP0f89T0/q+U9D+i0PYybIj9j5XU+VtHHPQYe3jz94PE+cxiIPiRPCz7/vQA+8W7mPoVtiD6GK0M+HTe+PZDv8T6qH4I+DSBBPgSDrT3BTsw+u2itPlGEGT5uGeY9dG3EPtAkuT40ABo+jLbVPdxs2z56xKU+ykQNPhSx4D3cbNs+esSlPspEDT4UseA96Yy/Prjlqz7EQHM+7mdXPT08wD5NNrM+xGtePq+8aj09PMA+TTazPsRrXj6vvGo9w8TbPnhtsD4g4VA+TNO1PI4EuT4lxao+SV6TPleAjTx56M8+Yy/MPkrQRz4AAAAADocKP/CBxz7Zv409AAAAAECN/D5Aed0+/eWXPQAAAAC34fE+Hb6RPpp/BD6Fgeg9gfEXPzqfLj4LqPo9gI3oPV7K/j7nsXk+YokkPvZfyD0THxw/TkckPkHtEj5JnrA9hfw8P7KQ+j2hlqU9HulvPSIvOz+668s9IMOxPRvYqD16Ias+qHefPveiiz6aD6c96lEdPyylFz7gSPs9et3qPV2oIj9soEg+uUcDPqDZJT0Eeq4+OYSkPjfAVj5PQwM+lW2/PpdglD6OQVQ+GSIEPl7zuj7VUXU+BdFkPm32Lz6HUyU/raCFPopdcT2TZAw9fVUwPz92iT4Yvfo8tF5GPB1d3T5tr8o+ciIjPspHTDzDjsE+OZW+PlTqTD6yNks9b47tPnHcrT5MAys+nTfxPE3HHj9uCHA+P9LwPQOK4zyz77w+SU2oPgXDmj4AAAAALz8BP3L4gj5eEnU+AAAAABpM+j6xF6Q+aThDPgAAAACqGBI/y9HMPgXO7zwAAAAAmD0qP5QjmD7cCRs9AAAAAKGNOD/xPI4+d82nOgAAAACrAkE/sFRZPlONCD0Pn/o57YpRPyJyJT7gXXY8LIqfOyBbKj9zvmQ+68mePV3ACT1r6FM/sDoQPpCOAD0AAAAA4eVJP7Q+Jz4gp0Q9AAAAAApnRT+ILxw+oWicPQAAAAA4Ylg/dTUEPlS5gDwKqCI82HIcP4BimD5E37o9AAAAACiCVz+Qfs89qdsLPX0Jujwoglc/kH7PPanbCz19Cbo8iNJHPwMlBD6zbLA9t1CLO4jSRz8DJQQ+s2ywPbdQizuY2BM/Q5RvPl8JQT4AAAAAmNgTP0OUbz5fCUE+AAAAANQ2TT9YVPk9/RJdPSeuuTyfYho/ed2PPiN17T0AAAAAthXmPqcmsz5Dh00+AAAAAONJRT/OMd097x3bPUgJazzu3+k+bK+hPkzhaD4AAAAA94XEPucnwD5ApHY+AAAAAP8TFT+1vIY+ut0EPhjHyjwo7dw+BfqvPqgxZj4AAAAApq/HPliqpj6wCpE+BFKbOpgSKT804CA+4jHRPfl4pD24eck+ZnexPj6URz4SE4U9/vQ0P6TKLj6qMu494wHJOxXH7D6uTKw+ThwQPrXwdj2ZkkM/tCs1PijtFz0gdbQ8mZJDP7QrNT4o7Rc9IHW0PCQiDz9Tx28+HbBTPgAAAAAkIg8/U8dvPh2wUz4AAAAAAj8TPyrjqT6Rxro99C3tOjTuST97UCY+7qzgPLcIrzwK2jw/dvRhPhZL3TwVoG88ueskP9qEmT6mHWU9AAAAABOZDT9J5rQ+R56/PQAAAACxJhA/dQnCPqbDZD1TWgg7Var4PmC7zj4yaeI9AAAAAOFOBj8nVdA+XzSMPQAAAACWMxk/2Y2aPvMrzD0AAAAA00YQPxdufz6cdj8+AAAAABneBz+rqIU+QTZVPgAAAABpFPA+EoXgPhaavT0AAAAANKjwPnIB0T5mWfk9AAAAAKN2Cz9ikYs+sgI7PgAAAADNV0I/kahLPujgKz0AAAAAZrg9P+baUD4PDmE9AAAAAHE5Ez/RVJE+nXAQPgAAAAAAAIA/AAAAAAAAAAAAAAAAQdp+P3zfkjsAAAAAAAAAAB1Pez9gHJY8AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAA3p16P0BErDwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAABSEXs/w9WdPAAAAAAAAAAA8XInP1n2hT4Rj6w9AAAAAOqpcz89/UE9cgRZOgAAAADqqXM/Pf1BPXIEWToAAAAADzB+P5r45zsAAAAAAAAAAA8wfj+a+Oc7AAAAAAAAAACmlmQ/6vRmPbmgTz0AAAAAAACAPwAAAAAAAAAAAAAAAK7LXz82WqU9sJA4PQAAAAAAAIA/AAAAAAAAAAAAAAAA/YBdP0sV9D1zFn88AAAAAAAAgD8AAAAAAAAAAAAAAAAcZVw/xToJPnEZpjsAAAAAAACAPwAAAAAAAAAAAAAAAG7nXz9IpPI9FATiOwAAAAAAAIA/AAAAAAAAAAAAAAAA0FVgP0XzjD2AvGA9AAAAANBVYD9F84w9gLxgPQAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAIRudz8dhgE9xDPyOgAAAAAAAIA/AAAAAAAAAAAAAAAAXEYQP6W6cj7pK0w+AAAAAOBAAj/kYrM+tDYQPgAAAAAROmI/fC/uPQAAAAAAAAAABN9/P+nvAzoAAAAAAAAAAHoMXT8Yzgs+AAAAAAAAAAB+hyg/BPGuPgAAAAAAAAAAF3RcP6IvDj4AAAAAAAAAAEnLVz/d0iA+AAAAAAAAAAB39So/ExWqPgAAAAAAAAAAc3QlPxsXtT4AAAAAAAAAABPuXz+1RwA+AAAAAAAAAAAT7l8/tUcAPgAAAAAAAAAApRZeP2ylBz4AAAAAAAAAAKUWXj9spQc+AAAAAAAAAAA3jlc/JMchPgAAAAAAAAAAN45XPyTHIT4AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAABHZn8/ebgZOwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAADMXcz/LjE49AAAAAAAAAABDtXA/2Kt0PQAAAAAAAAAAuEhvP0G6hT0AAAAAAAAAALPbYz9kIuE9AAAAAAAAAACedV4/iCkGPgAAAAAAAAAALudfP0pjAD4AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAACp3HM/dzVCPQAAAAAAAAAAlllvP1IzhT0AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAzkXc/1+wGPQAAAAAAAAAAH/t9P2M4ATwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAB8KX4/8EHrOwAAAAAAAAAA7Xl/P1ATBjsAAAAAAAAAAA/RVj/DuyQ+AAAAAAAAAAAhnFA/fI89PgAAAAAAAAAAXdlOP4iaRD4AAAAAAAAAADvZGD+ITc4+AAAAAAAAAABl3hY/NUPSPgAAAAAAAAAA7poWPyPK0j4AAAAAAAAAACzHAT+qcfw+AAAAAAAAAACUagc/1yrxPgAAAAAAAAAACY0GP+3l8j4AAAAAAAAAAGeTXD9isg0+AAAAAAAAAABSS1w/udIOPgAAAAAAAAAAa9VbP1aqED4AAAAAAAAAAGI9Zz/xFMY9AAAAAAAAAACim2g/9CK7PQAAAAAAAAAAPeJnPx3uwD0AAAAAAAAAAO2ybj+6wUs90h6SPAAAAAD08HA/xFYgPdozoTwAAAAA9PBwP8RWID3aM6E8AAAAALSScD+Ozx09awqyPAAAAAC0knA/js8dPWsKsjwAAAAALq5uPx5JiT2puiI6AAAAABsfbj8oB489AAAAAAAAAAAbH24/KAePPQAAAAAAAAAAiGduP7vDjD0AAAAAAAAAAIhnbj+7w4w9AAAAAAAAAAA9g2g/HOa7PQAAAAAAAAAAPYNoPxzmuz0AAAAAAAAAAIiwaD/He7o9AAAAAAAAAACIsGg/x3u6PQAAAAAAAAAAkh9oP3IDvz0AAAAAAAAAAJIfaD9yA789AAAAAAAAAAA/01M/BbMwPgAAAAAAAAAAPXBVPw0/Kj4AAAAAAAAAADX2VD8m/Sk+WIIKOwAAAADwJwQ/s4X3PuKvqTkAAAAA8CcEP7OF9z7ir6k5AAAAAKFQAT/+Wfk+XJgAPAAAAAChUAE//ln5PlyYADwAAAAAx2ICP3E6+z4AAAAAAAAAAMdiAj9xOvs+AAAAAAAAAAB/O14/BRIHPgAAAAAAAAAAdDlcPzEaDz4AAAAAAAAAAJLQWj+7vRQ+AAAAAAAAAACtJXA/L6V9PQAAAAAAAAAAfJZuPyNMiz0AAAAAAAAAAC33bz+XRoA9AAAAAAAAAAAV9m0/WE+QPQAAAAAAAAAAeW9pPzaEtD0AAAAAAAAAAHlvaT82hLQ9AAAAAAAAAAAg3lc/gIcgPgAAAAAAAAAAgbIHP1ty7j71KIo7AAAAAIGyBz9bcu4+9SiKOwAAAAAERks/8udSPgAAAAAAAAAABEZLP/LnUj4AAAAAAAAAAO84WT9FHBs+AAAAAAAAAADvOFk/RRwbPgAAAAAAAAAA7zhZP0UcGz4AAAAAAAAAAHdoNz8SL5E+AAAAAAAAAADeTlY/iMQmPgAAAAAAAAAA3k5WP4jEJj4AAAAAAAAAAMWKez9Lp448AAAAAAAAAAAgc2s//WakPQAAAAAAAAAAt39yP4gEWD0AAAAAAAAAAGKrXz97UgE+AAAAAAAAAADQbGM/hJnkPQAAAAAAAAAAHLc2P8mRkj4AAAAAAAAAAJBObz+Fi4U9AAAAAAAAAABgkEM/g75xPgAAAAAAAAAAYJBDP4O+cT4AAAAAAAAAANp0Bj9LFvM+AAAAAAAAAADadAY/SxbzPgAAAAAAAAAAcRcaPx/Ryz4AAAAAAAAAAO0EDT8o9uU+AAAAAAAAAADCyUU/+NhoPgAAAAAAAAAArb84P6eAjj4AAAAAAAAAAK2/OD+ngI4+AAAAAAAAAAC8yHs/j+iGPAAAAAAAAAAAMfh/P73l+TgAAAAAAAAAALojeT+8iNs8AAAAAAAAAAC6I3k/vIjbPAAAAAAAAAAAvNB9P+rQCzwAAAAAAAAAALzQfT/q0As8AAAAAAAAAABJ93Y/dIsQPQAAAAAAAAAAHF17P4BclDwAAAAAAAAAACMKbD/orp89AAAAAAAAAADO9hE/YhLcPgAAAAAAAAAAl3Q+P9EWgz4AAAAAAAAAAD+iVT8Fdyk+AAAAAAAAAAD1eWw/XTCcPQAAAAAAAAAAz/9yPxIDUD0AAAAAAAAAAI5lfD+enGY8AAAAAAAAAACAmXI//2dWPQAAAAAAAAAAHcd6P1YcpzwAAAAAAAAAAEAEfz9NwHs7AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAD3bXD9wQww+gzKfOQAAAACC4Go/6fuoPQAAAAAAAAAAfDNkPyRk3j0AAAAAAAAAAHwzZD8kZN49AAAAAAAAAADzFVQ/M6gvPgAAAAAAAAAA7b9EP0sAbT4AAAAAAAAAAO2/RD9LAG0+AAAAAAAAAAAVaQg/1i3vPgAAAAAAAAAAFWkIP9Yt7z4AAAAAAAAAAMnaUz/dlDA+AAAAAAAAAADJ2lM/3ZQwPgAAAAAAAAAAydpTP92UMD4AAAAAAAAAAGIDXT948gs+AAAAAAAAAADWVW8/UVGFPQAAAAAAAAAAp2FdP2V5Cj4AAAAAAAAAAJbHND/TcJY+AAAAAAAAAACMeDs/6Q6JPgAAAAAAAAAAjHg7P+kOiT4AAAAAAAAAAB0hcT837m09AAAAAAAAAADwbl0/QEQKPgAAAAAAAAAAJX95P2sb0DwAAAAAAAAAAD+xaT8DdrI9AAAAAAAAAACgJlA/gGU/PgAAAAAAAAAAoCZQP4BlPz4AAAAAAAAAAAH+MD/8A54+AAAAAAAAAACft1s/hyERPgAAAAAAAAAAf+9UPwdCLD4AAAAAAAAAAPtMPj8JZoM+AAAAAAAAAAAOXmg/kw+9PQAAAAAAAAAAMe1vP3iWgD0AAAAAAAAAABa9aD9QF7o9AAAAAAAAAADXSXA/kWJ7PQAAAAAAAAAAFfJyP6reUD0AAAAAAAAAAFV8dz+uOgg9AAAAAAAAAAA0JXY/wqwdPQAAAAAAAAAANCV2P8KsHT0AAAAAAAAAALvFDz+KdOA+AAAAAAAAAABPHjY/YcOTPgAAAAAAAAAATx42P2HDkz4AAAAAAAAAAEPuAz96I/g+AAAAAAAAAABD7gM/eiP4PgAAAAAAAAAAAC9DPwFEcz4AAAAAAAAAANTRDT9ZXOQ+AAAAAAAAAAA+kXk/LdjNPAAAAAAAAAAAdNl9PwGjCTwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAACk8Xo/dMuhPAAAAAAAAAAApPF6P3TLoTwAAAAAAAAAAOepfj+TDKs7AAAAAAAAAADnqX4/kwyrOwAAAAAAAAAAWbl7P9zUiDwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAHkl4PzXc9jwAAAAAAAAAAFiudz9/GgU9AAAAAAAAAADm0RY/NFzSPgAAAAAAAAAAiXDnPvMP1j4J/wQ+AAAAAKmyCD/ws3g+cIFkPgAAAADLA+4+6lrMPptCCz4AAAAAPgq5Pl1ioD6FoZY++x3/PNem1D7xFq8+LaF2PkSe8TqIuc8+iHazPuCfeT4AAAAASeX0PrWWtz4CCCc+AAAAAD7s3z6j2JE+IDuOPgAAAAAELhw/381qPu3IIz5QJjE6nXgPP4tRWj6Pqhg+50KePdblIj+CVDg+riL2PZ8Fgj2toig/nDo7PrA6Ij4AAAAAsXkJP+ouqz6/e+Y9QOyDPKlBDD/vjIg+Ex0NPqoJQz2xhzk/QNuEPgs5YzxLlPs6swQ4PwmFdT5JPsI8IgORPEiH7T4HqXY+Iw0hPkY7DT67/6A+ah6gPgDrXz632B0+uTy0PgVajz7KdEU+tl0zPrnDrz5jm6k+OgxTPhhr9D1UMRQ/hUhiPukpBz5+kIs9LrMhP3ZtRz5syAk+m/UfPdt+Fj/pmyI+H64HPhp19z25XSY/2+AAPnKuAD6m88k9NbCrPv9UlD7715A+PYu8Pfw64D6JdJE+e448Pv8kwD0Ts9U+U4WLPjq7dz7vp4s9WcvSPvJmnD4S0lA+sZKhPSy56j7IZYI+jZ1lPhhJgD0sueo+yGWCPo2dZT4YSYA9BXLoPsDGjj6L70M+2D2bPQVy6D7Axo4+i+9DPtg9mz3c+fw+1XFtPla1XT5plGs9n1v5PlUShj6tATQ+0USaPWuFDz9G90g+1zhAPtnoYj3S8A0/A0xmPh7VFz4qN5Q9XOIyP4jvET4AbO09FEQvPaE0NT/V4Ao+ipnAPZz/fz0pQ2E/H9GIPdEgFz23FIY8XodmP6fsUD1nlRA9ZCBYPLlXcD8atQs9l57dPAAAAAA+FHI/KLoPPTN5VTzZHM074BZ+P0iQ9DsAAAAAAAAAAEdCfT8Mbi88AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAbpZ/PxMj0zoAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAACt6n8/F5WqOQAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAEDrfz8BBaY5AAAAAAAAAAA86n8/RBiuOQAAAAAAAAAAlI9/PzjjsDqb0b85AAAAAAqBfz9Xs946Yct5OQAAAAAHkn4/xlpCO2WdKzsAAAAAaxh+P3ehiTvcUVQ7AAAAABYBfj+o55s7PRtHOwAAAABapnw/EaoNPC1/kTsAAAAAlWp9P3NG5TuY3Uo7AAAAAA1Yez8a71w8gBuaOwAAAACJcH0/Lzv2O84AIzsAAAAA60h8P7riOTwEik87AAAAALiFfj8TiJ87MeBsOgAAAAC2lH0/xlcFPN7WqzoAAAAAw9J/Pwn0NDoAAAAAAAAAAPG6fz9JH4o6AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAUaZ/P7deszoAAAAAAAAAACeUfz/0stc6AAAAAAAAAACJBn0/FEgrPFyumDoAAAAAbK58P7e8QzwIQIU6AAAAAISYez91uG48ZpksOwAAAACzVXs/7J6EPA5VBTsAAAAAMPh5Px1JnjwAw4o7AAAAACH4eT9UTac86nNNOwAAAAAvkHs/1idPPPqYmTsAAAAAVER7P7wzazzrboc7AAAAAKrAfT8GP7U7mNhUOwAAAAB1oX0/F+3KOw+xSDsAAAAAiJp/PxrwyjoAAAAAAAAAAEaifz+JdLs6AAAAAAAAAADV8H8/lbByOQAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAI7wfz8PG3c5AAAAAAAAAAD/q38/YAGoOgAAAAAAAAAA/6t/P2ABqDoAAAAAAAAAAPCnfz9iH7A6AAAAAAAAAAAt3H0/4iO9Oy2LKTsAAAAALdx9P+IjvTstiyk7AAAAAHmufj+PjzY7KvcaOwAAAABrzXs/gIhVPKJzXDsAAAAAa817P4CIVTyic1w7AAAAALhtfD8D8yk8mntqOwAAAAA4Ino/ArOkPMEvODsAAAAAOCJ6PwKzpDzBLzg7AAAAACTgeT9B56g83qFYOwAAAADYBHs/gRiQPAbH9DoAAAAA2AR7P4EYkDwGx/Q6AAAAAPNAej/Rb6c8GY0DOwAAAABRZHw/CxxXPE79fDoAAAAAUWR8PwscVzxO/Xw6AAAAAJ7Tez+QOns8XN59OgAAAAAXh38/ntLxOgAAAAAAAAAAF4d/P57S8ToAAAAAAAAAAF5wfz8Gog87AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAA7QF/P9kTfjsAAAAAAAAAABiFej8kVaY8B32QOgAAAABdSXg/IfPoPGMV3joAAAAAEsB4P66+0jyc+Sk7AAAAAOYoeD9WysI85mPgOwAAAAAjjnY/aXMHPe2mejsAAAAAtCZ3PxGr5TxM+dU7AAAAAMGHdz+QI6Q8HKX4O93rsjvNM30/eK/MOyFqmTsAAAAAe/p7PwekHzzdesM7AAAAAK5Xfj8dKdQ7AAAAAAAAAADNIX8/JDNeOwAAAAAAAAAAvF1yP9hhDT3EhJk8AAAAAPeddT+oMu08Fh0+PAAAAABrk3Y/gGvKPDtORjwAAAAAa5N2P4Bryjw7TkY8AAAAAJgLcD+5oBQ9jEvVPAAAAACYC3A/uaAUPYxL1TwAAAAAiGh6P6isNzwVMS48AAAAAKpBSD8N0wM+R86kPY7yCzylGno/Cy1OPNgpKzwAAAAAsSB0P3MX2TxX0qI8AAAAAOT2dT9w1K088U6TPAAAAADQ9ns/9SWBPAAAAAAAAAAAxwV7Px9HnzwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAA+GXw/ZrB5PAAAAAAAAAAAPhl8P2aweTwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAALf18P+C0QDwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAABM334/OFqQOwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAHzPfz/mDkI6AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAgot/P6P76DoAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/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AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAA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AACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/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AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAsMoyP7tlhz5K66Q8+2KLPDGyQD/N2mo+g+OSPAAAAAAihVI/AscCPkLtKj1JkgY8ZChSP/4FiT3hE3k97FlSPWQoUj/+BYk94RN5PexZUj1sADc//mxSPmd3Vj27m9886pc1P+EpJj6SkwA+VLg4Ow4ZET/HYh0+cjcVPpIBCT4HThg/KVRGPg+KLD6cpi89Xw0bP4qImD7W/rk9CUG3OzgYHT99l68+i4sFPXnUMDw4GB0/fZevPouLBT151DA8DIsRP1uNwz6Kawk93/GCPP3sIj+ToTk+xgItPiF7WjywyjI/u2WHPkrrpDz7Yos8MbJAP83aaj6D45I8AAAAACKFUj8CxwI+Qu0qPUmSBjxkKFI//gWJPeETeT3sWVI9ZChSP/4FiT3hE3k97FlSPWwANz/+bFI+Z3dWPbub3zzqlzU/4SkmPpKTAD5UuDg7DhkRP8diHT5yNxU+kgEJPgdOGD8qVEY+D4osPp6mLz1fDRs/ioiYPtf+uT0HQbc7OBgdP32Xrz6LiwU9edQwPDgYHT99l68+i4sFPXnUMDwMixE/W43DPoprCT3g8YI8/ewiP5KhOT7HAi0+I3taPAAABgAKAAAACgACAAAAAgDHAQAAxwEDANUBBQABANUBAQAEAAUACwAHAAUABwABAAYACABHAAYARwAKAAsADAAJAAsACQAHAA8ADAALAA8ACwANAA0ACwAFAA0ABQAOAA0ADgARAA0AEQAQAA8ADQAQAA8AEAASABUAEwAQABUAEAARABMAFAASABMAEgAQABYAFwAUABYAFAATABgAFgATABgAEwAVABsAFwAWABsAFgAZABkAFgAYABkAGAAaACEAHQAZACEAGQAaAB0AHwAbAB0AGwAZACIAIwAeACIAHgAcACQAIgAcACQAHAAgACUAJwAjACUAIwAiACYAJQAiACYAIgAkACkAKAAlACkAJQAmACgAKgAnACgAJwAlACsAKgAoACsAKAApACsALQAsACsALAAqACoALAAuACoALgAnACwALQAvACwALwAuACcALgAwACcAMAAjAC4ALwAxAC4AMQAwADAAMQA0ADAANAAyACMAMAAyACMAMgAeADMANQA3ADMANwA2AB8AMwA2AB8ANgAbADYAOAAXADYAFwAbADcAOQA4ADcAOAA2ADgAOQA7ADgAOwA6ABcAOAA6ABcAOgAUADoAOwA9ADoAPQA8ABQAOgA8ABQAPAASADwAPgAPADwADwASAD0APwA+AD0APgA8AD4AQAAMAD4ADAAPAD8AQQBAAD8AQAA+AEAAQQBFAEAARQBDAAwAQABDAAwAQwAJAEIARgBHAEIARwAIAEQASABGAEQARgBCAEcARgBJAEcASQBLAEYASABKAEYASgBJAEkASgBOAEkATgBMAEsASQBMAEsATABNAE0ATABPAE0ATwBRAEwATgBQAEwAUABPAE8AUABUAE8AVABSAFEATwBSAFEAUgBTAFMAUgBVAFMAVQBWAFIAVABXAFIAVwBVAFUAWABZAFUAWQBWAFcAWgBYAFcAWABVAFkAWABbAFkAWwBdAFgAWgBcAFgAXABbAFsAXABgAFsAYABeAF0AWwBeAF0AXgBfAF8AXgBhAF8AYQBjAF4AYABiAF4AYgBhAGEAYgBmAGEAZgBkAGMAYQBkAGMAZABlAGUAZABnAGUAZwBoAGQAZgBpAGQAaQBnAGcAagBrAGcAawBoAGkAbABqAGkAagBnAGsAagBuAGsAbgBwAGoAbAByAGoAcgBuAG0AcwB0AG0AdABvAHEAdQBzAHEAcwBtAHQAcwB2AHQAdgB3AHMAdQB4AHMAeAB2AHkAewB3AHkAdwB2AHoAeQB2AHoAdgB4AH4AfAB5AH4AeQB6AHwAfQB7AHwAewB5AH8AhAB9AH8AfQB8AIEAfwB8AIEAfAB+AIYAgACDAIYAgwCIAIkAhQCAAIkAgACGAIYAiACMAIYAjACKAIkAhgCKAIkAigCNAIoAjACRAIoAkQCOAI0AigCOAI0AjgCPAI4AkgCVAI4AlQCPAJEAlACSAJEAkgCOAJIAlACZAJIAmQCWAJUAkgCWAJUAlgCXAJYAmgCdAJYAnQCXAJkAmwCaAJkAmgCWAJoAmwCfAJoAnwCeAJ0AmgCeAJ0AngChAJ4AnwCkAJ4ApACiAKEAngCiAKEAogCjAKMAogClAKMApQCmAKIApACnAKIApwClAKgAqgCmAKgApgClAKkAqAClAKkApQCnAK0AqwCoAK0AqACpAKsArACqAKsAqgCoAK4ArwCsAK4ArACrALAArgCrALAAqwCtALMArwCuALMArgCxALEArgCwALEAsACyALYAtACxALYAsQCyALQAtQCzALQAswCxALkAtQC0ALkAtAC3ALcAtAC2ALcAtgC4ALwAugC3ALwAtwC4ALoAuwC5ALoAuQC3AL0AvgC7AL0AuwC6AL8AvQC6AL8AugC8AL0AwQDDAL0AwwC+AL8AxQDBAL8AwQC9AMIAwADGAMIAxgDIAMAAxADHAMAAxwDGAMYAxwDLAMYAywDJAMgAxgDJAMgAyQDKAMoAyQDMAMoAzADNAMkAywDOAMkAzgDMAM8A0QDNAM8AzQDMANAAzwDMANAAzADOANQA0gDPANQAzwDQANIA0wDRANIA0QDPANUA1wDTANUA0wDSANYA1QDSANYA0gDUANoA2ADVANoA1QDWANgA2QDXANgA1wDVANsA3QDZANsA2QDYANwA2wDYANwA2ADaAOAA3gDbAOAA2wDcAN4A3wDdAN4A3QDbAOEA4wDfAOEA3wDeAOIA4QDeAOIA3gDgAOgA5ADhAOgA4QDiAOQA5gDjAOQA4wDhAOoA6wDnAOoA5wDlAOwA6gDlAOwA5QDpAO8A6wDqAO8A6gDtAO0A6gDsAO0A7ADuAPAA7QDuAPAA7gDxAPIA7wDtAPIA7QDwAPUA8wDwAPUA8ADxAPMA9ADyAPMA8gDwAPgA9ADzAPgA8wD2APYA8wD1APYA9QD3APsA+QD2APsA9gD3APkA+gD4APkA+AD2AP4A+gD5AP4A+QD8APwA+QD7APwA+wD9AAEB/wD8AAEB/AD9AP8AAAH+AP8A/gD8AAQBAAH/AAQB/wACAQIB/wABAQIBAQEDAQMBBgEFAQMBBQECAQIBBQEHAQIBBwEEAQUBBgEKAQUBCgEIAQcBBQEIAQcBCAEJAQkBCAELAQkBCwEPAQgBCgENAQgBDQELARMBEQEMARMBDAEOAREBEgEQAREBEAEMARYBEgERARYBEQEUARQBEQETARQBEwEVARcBFAEVARcBFQEYARkBFgEUARkBFAEXARoBFwEYARoBGAEbARwBGQEXARwBFwEaARoBGwEfARoBHwEdARwBGgEdARwBHQEeAR4BHQEgAR4BIAEhAR0BHwEiAR0BIgEgASABIwEkASABJAEhASIBJQEjASIBIwEgASYBJwEkASYBJAEjASgBJgEjASgBIwElAScBJgEpAScBKQErASYBKAEqASYBKgEpASoBLQEsASoBLAEpASkBLAEuASkBLgErASwBLQExASwBMQEvAS4BLAEvAS4BLwEwATQBMAEvATQBLwEyATIBLwExATIBMQEzAToBNgEyAToBMgEzATYBOAE0ATYBNAEyATsBPAE3ATsBNwE1AT0BOwE1AT0BNQE5AT4BQAE8AT4BPAE7AT8BPgE7AT8BOwE9AUIBQQE+AUIBPgE/AUEBQwFAAUEBQAE+ASsAQwFBASsAQQFCAUABQwFEAUABRAFFASsARAFDASsASAFGASsARgFEAUUBRAFGAUUBRgFHAUcBRgFIAUcBSAFJAUkBSAEpAEkBKQAmACsAKQBIAUsBRwFJAUsBSQFKAUkBJgAkAEkBJABKAUsBSgFMAUsBTAFPAUoBJAAgAEoBIABMAU0BIQAaAE0BGgBOAVABTQFOAVABTgFRAVUBSwFPAVUBTwFSAVMBUAFRAVMBUQFUATgBUwFUATgBVAE0ATwBVQFSATwBUgE3AVUBRQFHAVUBRwFLAUABRQFVAUABVQE8AVYBVAFRAVYBUQFXAVQBVgEwAVQBMAE0AVYBVwFaAVYBWgFYAVgBLgEwAVgBMAFWAScBWAFZAScBWQEkAS4BWAEnAS4BJwErAVgBWgFcAVgBXAFZAVoBVwGABVoBgAVbAVwBWgFbAVwBWwFdAV4BXAFdAV4BXQFgAV8BWQFcAV8BXAFeAWMBXwFeAWMBXgFhAWEBXgFgAWEBYAFiAWQBYQFiAWQBYgFlAWMBYQFkAWMBZAFmAWcBZAFlAWcBZQFqAWgBZgFkAWgBZAFnAWcBawFtAWcBbQFoAWwBawFnAWwBZwFqAWwBcAFvAWwBbwFrAWsBbwFzAWsBcwFtAXABzQFyAXABcgFvAW8BcgF4AW8BeAFzAX0BeQF0AX0BdAF3AXkBewFuAXkBbgF0AXoBbwR7AXoBewF5AX8BegF5AX8BeQF9AYEBfgF8AYEBfAGAAYABfAF2AYABdgGDAYUBgQGAAYUBgAGEAYQBgAGDAYQBgwGHAYkBhQGEAYkBhAGIAYgBhAGHAYgBhwGLAY0BiQGIAY0BiAGMAYwBiAGLAYwBiwGPAZEBjQGMAZEBjAGQAZABjAGPAZABjwGTAZUBkQGQAZUBkAGUAZQBkAGTAZQBkwGXAZwBlQGUAZwBlAGYAZgBlAGXAZgBlwGbAZ0BnAGYAZ0BmAGZAZkBmAGbAZkBmwHHBKABlQGcAaABnAGeAZ8BngGcAZ8BnAGdAZ4BnwGjAZ4BowGhAaABngGhAaABoQGiAaIBoQGlAaIBpQGnAaMBqQGlAaMBpQGhAaYBpAGqAaYBqgGrAagBrAGqAagBqgGkAasBqgGtAasBrQGuAawBrwGtAawBrQGqAbIBrgGtAbIBrQGwAa8BsQGwAa8BsAGtAbQBswGwAbQBsAGxAbMBtQGyAbMBsgGwAcYEmgGzAcYEswG0AZoBlgG1AZoBtQGzAZYBkgG2AZYBtgG1AbUBtgG4AbUBuAGyAZIBjgG3AZIBtwG2AbYBtwG5AbYBuQG4AbkBuwG6AbkBugG4AbgBugGuAbgBrgGyAbwBvgGuAbwBrgG6Ab8BvAG6Ab8BugG7Ab0B3gG+Ab0BvgG8AcABvQG8AcABvAG/AcIBwAG/AcIBvwHBAcEBvwG7AcEBuwHDAcUBwgHBAcUBwQHEAcQBwQHDAcQBwwHGAQIAxQHEAQIAxAHHAccBxAHGAccBxgHIAQMAxwHIAQMAyAHJAcsByAHGAcsBxgHOAckByAHLAckBywHMAc8BcQHMAc8BzAHLAdABzwHLAdABywHOAYIBdQFxAYIBcQHPAYYBggHPAYYBzwHQAYoBhgHQAYoB0AHRAdEB0AHOAdEBzgHSAY4BigHRAY4B0QG3AbcB0QHSAbcB0gG5Ac4BxgHDAc4BwwHSAdIBwwG7AdIBuwG5AXAB0wHKAXABygHNAdMB1QEEANMBBADKAdQB1gHVAdQB1QHTAdQB0wFwAdQBcAFsAdYBDgAFANYBBQDVAREADgDWAREA1gHXAdcB1gHUAdcB1AHYAREA1wFgAREAYAFdAWAB1wHYAWAB2AFiAdgBagFlAdgBZQFiAdQBbAFqAdQBagHYAQIACgDZAQIA2QHFAdkB2gHCAdkBwgHFAUsATQDaAUsA2gHZAQoARwBLAAoASwDZAdoBTQBRANoBUQDbAcIB2gHbAcIB2wHAAdsB3AG9AdsBvQHAAVEAUwDcAVEA3AHbAdwBUwBWANwBVgDdAb0B3AHdAb0B3QHeAVkA3wHdAVkA3QFWAN8B4AHeAd8B3gHdAV0A4QHfAV0A3wFZAOEB4gHgAeEB4AHfAeMB5AHiAeMB4gHhAV8A4wHhAV8A4QFdAGMA5QHjAWMA4wFfAOUB5gHkAeUB5AHjAecB6AHmAecB5gHlAWUA5wHlAWUA5QFjAOkB5wFlAOkBZQBoAOoB6AHnAeoB5wHpAY0N7QHrAY0N6wGADYAN6wHuAYAN7gGBDe0BDALsAe0B7AHrAesB7AHvAesB7wHuAfIB8AHuAfIB7gHvAYIN8QHqAYIN6gGBDYQN9gHxAYQN8QGCDfgB9AHwAfgB8AHyAYUN+gH1AYUN9QGDDfsB+QHzAfsB8wH3AYYN/QH6AYYN+gGFDf4B/AH5Af4B+QH7AYYN/AH/AYYN/wGHDfwB/gEBAvwBAQL/AYcN/wECAocNAgKIDf8BAQIDAv8BAwICAokNdAB3AIkNdwCIDQUCBAICAgUCAgIDAgYCBAIFAgYCBQIIAooNiQ0EAooNBAIGAgsCCgIHAgsCBwIJAowNawBwAIwNcACLDe0BCgILAu0BCwIMAo0NjA0KAo0NCgLtAQwCCwINAgwCDQIPAgkCDgINAgkCDQILAhACDwINAhACDQIOAhMCEQIPAhMCDwIQAg8CEQLsAQ8C7AEMAhQCEgIRAhQCEQITAhECEgLvAREC7wHsARcCFQITAhcCEwIQAhUCFgIUAhUCFAITAhgCGQIWAhgCFgIVAhoCGAIVAhoCFQIXAhsCHgIZAhsCGQIYAh0CGwIYAh0CGAIaAhwCHwIeAhwCHgIbAjoCHAIbAjoCGwIdAiECIAIeAiECHgIfAiACIgIZAiACGQIeAiYCJAIgAiYCIAIhAiQC+AEiAiQCIgIgAigCJwIjAigCIwIlAicC+wH3AScC9wEjAioCKQInAioCJwIoAikC/gH7ASkC+wEnAikCKwIBAikCAQL+ASoCLAIrAioCKwIpAisCLQIDAisCAwIBAiwCLgItAiwCLQIrAi4CMAIvAi4CLwItAi0CLwIFAi0CBQIDAjACMwIxAjACMQIvAi8CMQIIAi8CCAIFAjQCNgI1AjQCNQIyAjICNQI3AjICNwIJAjYCOgIdAjYCHQI1AjUCHQIaAjUCGgI3AgkCNwI4AgkCOAIOAhoCFwI4AhoCOAI3AhACDgI4AhACOAIXAjkCOwI6AjkCOgI2Ap4COQI2Ap4CNgI0AjsCPQIcAjsCHAI6AjwCPwI9AjwCPQI7AqcCPAI7AqcCOwI5Aj0CPgIfAj0CHwIcAj8CQAI+Aj8CPgI9AkECPwI8AkECPAJDAkUCQAI/AkUCPwJBAkcCQgJEAkcCRAJJAkgCRgJCAkgCQgJHAkwCSAJHAkwCRwJKAkoCRwJJAkoCSQJLAk8CTQJKAk8CSgJLAk0CTgJMAk0CTAJKAk4CTQJQAk4CUAJSAk0CTwJRAk0CUQJQAlACUQJVAlACVQJTAlICUAJTAlICUwJUAlQCUwJWAlQCVgJXAlMCVQJYAlMCWAJWAlYCWQJbAlYCWwJXAlgCWgJZAlgCWQJWAlkCWgJdAlkCXQJcAlsCWQJcAlsCXAJeAlwCXQJhAlwCYQJfAl4CXAJfAl4CXwJjAmUCYAJiAmUCYgJmAmcCZAJgAmcCYAJlAmkCaAJlAmkCZQJmAmgCagJnAmgCZwJlAm0CawJoAm0CaAJpAmsCbAJqAmsCagJoAm4CcAJsAm4CbAJrAm8CbgJrAm8CawJtAm4CbwJzAm4CcwJxAnACbgJxAnACcQJyAnECdAJ2AnECdgJyAnMCdQJ0AnMCdAJxAnUCeAJ3AnUCdwJ0AnQCdwJ5AnQCeQJ2AncCeAJ7AncCewJ6AnkCdwJ6AnkCegJ8AnoCewKBAnoCgQJ9AnwCegJ9AnwCfQJ/AoIChAJ/AoICfwJ9AoYCggJ9AoYCfQKBAowChAKCAowCggKIAogCggKGAogChgKKAo8CjQKHAo8ChwKJAo0CjgKLAo0CiwKHApUCjgKNApUCjQKRApECjQKPApECjwKTApACkgKXApAClwKWApQCkAKWApQClgKYApYClwKbApYCmwKZApgClgKZApgCmQKaApkCLAIqApkCKgKaApsCLgIsApsCLAKZApcCnwKcApcCnAKbApsCnAIwApsCMAIuApwCnQIzApwCMwIwAp8CogKdAp8CnQKcAqACpAKiAqACogKfApICoAKfApICnwKXAqMCpwI5AqMCOQKeAqUCqAKnAqUCpwKjAqgCQwI8AqgCPAKnAqwCqgKpAqwCqQKmAqoCSQJEAqoCRAKpAqsCSwJJAqsCSQKqAq0CqwKqAq0CqgKsAq8CrQKsAq8CrAKuAq4CrAKmAq4CpgKwArMCrwKuArMCrgKxArECrgKwArECsAKAArYCtAKyArYCsgK1AnsCtQKyAnsCsgKBAnMCtgK1AnMCtQJ1AngCdQK1AngCtQJ7ArcCuQK0ArcCtAK2Am8CtwK2Am8CtgJzArkCtwK6ArkCugK9AroCtwJvAroCbwJtAr0CugK7Ar0CuwK/AmkCuwK6AmkCugJtAr4CwQLAAr4CwAK8AsACwwK4AsACuAK8AsICwALBAsICwQLJAsQCwwLAAsQCwALCAsMCxAKtAsMCrQKvArgCwwKvArgCrwKzAsQCxQKrAsQCqwKtAsYCxQLEAsYCxALCAsUCTwJLAsUCSwKrAk8CxQLGAk8CxgJRAlECxgLHAlECxwJVAskCxwLGAskCxgLCAlUCxwLIAlUCyAJYAsoCyALHAsoCxwLJAskCwQLLAskCywLKAsgCygLMAsgCzALNAsoCywLOAsoCzgLMAs0CzALOAs0CzgLRAssC1QLPAssCzwLOAtECzgLPAtECzwLSAloCzQLRAloC0QJdAl0C0QLSAl0C0gJhAtYC1ALTAtYC0wLQAtQCZgJiAtQCYgLTAmYC1AK7AmYCuwJpAr8CuwLUAr8C1ALWAtUCywLBAtUCwQK+AlgCyALNAlgCzQJaArAC1wKFArAChQKAAqYCoQLXAqYC1wKwAqECkwKPAqECjwLXAtcCjwKJAtcCiQKFApgCmgLYApgC2ALbApoCKgIoApoCKALYAtgCKAIlAtgCJQLZAtsC2ALZAtsC2QLcApQCmALbApQC2wLeAt4C2wLcAt4C3ALgAt8C4gLkAt8C5ALjApUC3wLjApUC4wKOAuMC5AJ+AuMCfgKDAo4C4wKDAo4CgwKLAukC5QLkAukC5ALiAuUC5wJ+AuUCfgLkAuYC/gLnAuYC5wLlAuoC5gLlAuoC5QLpAuwC6gLpAuwC6QLrAusC6QLiAusC4gLuAkwC7ALrAkwC6wJIAkgC6wLuAkgC7gJGAu0C7wJAAu0CQAJFAuEC3QLvAuEC7wLtAt0C2gLwAt0C8ALvAu8C8AI+Au8CPgJAAtoCJgIhAtoCIQLwAvACIQIfAvACHwI+AvEC8gLqAvEC6gLsAk4C8QLsAk4C7AJMAvIC8QLzAvIC8wL1AvMC8QJOAvMCTgJSAvUC8wL0AvUC9AL2AlQC9ALzAlQC8wJSAvYC+AL3AvYC9wL1AvcC+wLyAvcC8gL1AvkC9wL4AvkC+AIFA/wC+wL3AvwC9wL5AvsC/AL+AvsC/gLmAvIC+wLmAvIC5gLqAv0CAAMBA/0CAQP/AgIDAAP9AgID/QL6AgADcAJyAgADcgIBA3ACAAMCA3ACAgNsAmwCAgMDA2wCAwNqAgYDAwMCAwYDAgP6AmoCAwMEA2oCBANnAggDBAMDAwgDAwMGAwUD+AIJAwUDCQMHAwQDCAMLAwQDCwMNAwcDCQMOAwcDDgMKAw4DEAMMAw4DDAMKAwkDEwMPAwkDDwMOAw8DEQMQAw8DEAMOAxEDWwJeAhEDXgIQAxADXgJjAhADYwIMAxIDVwJbAhIDWwIRAxMDEgMRAxMDEQMPA1cCEgP0AlcC9AJUAvYC9AISA/YCEgMTAxMDCQP4AhMD+AL2AmcCBAMNA2cCDQNkAgEDcgJ2AgEDdgIUA/8CAQMUA/8CFAPoAhQDdgJ5AhQDeQJ8AugCFAN8AugCfAJ/AhkCIgIVAxkCFQMWAvgBFgMVA/gBFQMiAhQCFgIVAxQCFQMWAxQCFgMXAxQCFwMSAvgB8gEXA/gBFwMWA+8BEgIXA+8BFwPyARkDGAMAAhkDAAJ3ABgDGgP9ARgD/QEAAh0DGwMYAx0DGAMZAxsDHAMaAxsDGgMYAx4DIAMcAx4DHAMbAx8DHgMbAx8DGwMdA80AIQMeA80AHgMfAyEDIgMgAyEDIAMeAyMDJAMiAyMDIgMhA9EAIwMhA9EAIQPNACUDIwPRACUD0QDTACYDJAMjAyYDIwMlAyUD0wDXACUD1wAnAyYDJQMnAyYDJwMoAygDJwMpAygDKQMqAycD1wDZACcD2QApAykD2QDdACkD3QArAyoDKQMrAyoDKwMsAywDKwMtAywDLQMuAysD3QDfACsD3wAtAy0D3wDjAC0D4wAvAy4DLQMvAy4DLwMwAzADLwMxAzADMQMzAy8D4wDmAC8D5gAxA+sANQMyA+sAMgPnADUDNgM0AzUDNAMyA+8ANwM1A+8ANQPrADcDOAM2AzcDNgM1AzoDOAM3AzoDNwM5AzkDNwPvADkD7wDyADkDOwM8AzkDPAM6A/IA9AA7A/IAOwM5AzsD9AD4ADsD+AA9AzwDOwM9AzwDPQM+Az8DQAM+Az8DPgM9A/oAPwM9A/oAPQP4AEEDPwP6AEED+gD+AEIDQAM/A0IDPwNBAwABQwNBAwABQQP+AEMDRANCA0MDQgNBA0UDQwMAAUUDAAEEAUYDRANDA0YDQwNFA0cDRQMEAUcDBAEHAUgDRgNFA0gDRQNHA0cDSQNLA0cDSwNIAwcBSgNJAwcBSQNHA0kDSgNOA0kDTgNMA0sDSQNMA0sDTANNA08DUQNNA08DTQNMA1ADTwNMA1ADTANOA1MDTwNQA1MDUANVA1cDUQNPA1cDTwNTA1IDVANZA1IDWQNYA1YDUgNYA1YDWANaA1gDWQNeA1gDXgNcA1oDWANcA1oDXANgA1sDXQNiA1sDYgNhA18DWwNhA18DYQNjA2EDYgNlA2EDZQNkA2MDYQNkA2MDZANmA2kDZwNkA2kDZANlA2cDaANmA2cDZgNkA2wDaANnA2wDZwNqA2oDZwNpA2oDaQNrA28DbQNqA28DagNrA20DbgNsA20DbANqA3QDbgNtA3QDbQNwA3ADbQNvA3ADbwNyA3gDdgNxA3gDcQNzA3YDdwN1A3YDdQNxA3oDdwN2A3oDdgN5A3kDdgN4A3kDeAMQARIBewN5AxIBeQMQAXsDfAN6A3sDegN5A30DewMSAX0DEgEWAX4DfAN7A34DewN9A30DFgEZAX0DGQF/A34DfQN/A34DfwOAA38DGQEcAX8DHAGBA4ADfwOBA4ADgQOCA4QDgwOBA4QDgQMcAYMDhQOCA4MDggOBA4gDhgODA4gDgwOEA4YDhwOFA4YDhQODA4YDigOOA4YDjgOHA4gDjAOKA4gDigOGA4kDiwORA4kDkQOPA40DiQOPA40DjwOQA48DkgOUA48DlAOQA5EDkwOSA5EDkgOPA5IDkwOXA5IDlwOVA5QDkgOVA5QDlQOWA5UDmAOaA5UDmgOWA5cDmQOYA5cDmAOVA5sDmgOYA5sDmAOZA5YDmgOcA5YDnAOdA5sDngOcA5sDnAOaA58DnQOcA58DnAOeA5sDogOgA5sDoAOeA58DngOgA58DoAOhA6MDoQOgA6MDoAOiA5sDpgOkA5sDpAOiA6MDogOkA6MDpAOlA6cDpQOkA6cDpAOmA6cDpgOoA6cDqAOpA5sDqAOmA5sDrAOqA5sDqgOoA6kDqAOqA6kDqgOrA60DqwOqA60DqgOsA5sDrgOsA60DrAOuA60DrgOvA5sDmQOwA5sDsAOuA68DrgOwA68DsAOxA5cDsQOwA5cDsAOZA7IDtAOvA7IDrwOxA5MDsgOxA5MDsQOXA7MDtQO0A7MDtAOyA5EDswOyA5EDsgOTA7cDtgO0A7cDtAO1A7QDtgOtA7QDrQOvA7YDuAOrA7YDqwOtA7cDuQO4A7cDuAO2A7kDuwO6A7kDugO4A7gDugOpA7gDqQOrA7oDvAOnA7oDpwOpA70DvAO6A70DugO7A70DvwO+A70DvgO8A7wDvgOlA7wDpQOnA78DwQPAA78DwAO+A74DwAOjA74DowOlA8ADwgOhA8ADoQOjA8EDwwPCA8EDwgPAA8MDxQPEA8MDxAPCA8IDxAOfA8IDnwOhA8QDxgOdA8QDnQOfA8UDxwPGA8UDxgPEA8cDkAOUA8cDlAPGA8YDlAOWA8YDlgOdA8gDjQOQA8gDkAPHA8sDyAPHA8sDxwPFA8oDhwOOA8oDjgPJA80DygPJA80DyQPMA84DywPFA84DxQPDA9ADzQPMA9ADzAPPA9MD0APPA9MDzwPSA9EDzgPDA9EDwwPBA9QD0QPBA9QDwQO/A9YD0wPSA9YD0gPVA9kD1gPVA9kD1QPYA9cD1AO/A9cDvwO9A9kD2APbA9kD2wPcA9oD1wO9A9oDvQO7A90D2gO7A90DuwO5A98D3APbA98D2wPeA+ID3wPeA+ID3gPhA+AD3QO5A+ADuQO3A+MD4AO3A+MDtwO1A+ID4QPkA+ID5APlA+gD5QPkA+gD5APnA+YD4wO1A+YDtQOzA4gD6APnA4gD5wOMA4sD5gOzA4sDswORA+oD5QPoA+oD6APpA+kD6AOIA+kDiAOEAyEB6gPpAyEB6QMeAR4B6QOEAx4BhAMcAeID5QPqA+ID6gPrA+sD6gMhAesDIQHsA+0D3wPiA+0D4gPrA+8D7QPrA+8D6wPsA+4D3APfA+4D3wPtA/AD7gPtA/AD7QPvA1kBXwHvA1kB7wPsA+8DXwFjAe8DYwHwA/ID7gPwA/ID8APxA/ADYwFmAfADZgHxA/MD9QPyA/MD8gPxA2YB9gPzA2YB8wPxA/MD9gP3A/MD9wP0A/QDDgT1A/QD9QPzA2gB+AP2A2gB9gNmAfYD+AP6A/YD+gP3A2kB/QP8A2kB/AP5A/kD/AP/A/kD/wP7A/0DbQT+A/0D/gP8A/wD/gMABPwDAAT/AwAEAgQBBAAEAQT/A/8DAQQFBP8DBQT7AwIEXQQDBAIEAwQBBAEEAwQHBAEEBwQFBPcD+gMEBPcDBAQIBAgEBAQGBAgEBgQJBPcDCAQKBPcDCgT0AwoECAQJBAoECQQLBAoEDAQOBAoEDgT0AwsEDQQMBAsEDAQKBA0EzQPQAw0E0AMMBAwE0APTAwwE0wMOBA4E0wPWAw4E1gP1A8oDzQMNBMoDDQQPBA8EDQQLBA8ECwQQBIcDygMPBIcDDwSFA4UDDwQQBIUDEASCAwkEEQQQBAkEEAQLBBAEEQSAAxAEgAOCAwkEBgQSBAkEEgQRBBEEEgR+AxEEfgOAAxMEEgQGBBMEBgQUBHwDfgMSBHwDEgQTBHoDfAMTBHoDEwQVBBUEEwQUBBUEFAQWBHoDFQQXBHoDFwR3AxUEFgQYBBUEGAQXBBcEGAQcBBcEHAQaBHcDFwQaBHcDGgR1A3QDGQQdBHQDHQRuAxkEGwQeBBkEHgQdBB0EHgQgBB0EIAQfBG4DHQQfBG4DHwRsA2wDHwQhBGwDIQRoAx8EIAQiBB8EIgQhBCEEIgQkBCEEJAQjBGgDIQQjBGgDIwRmAyUEYwNmAyUEZgMjBCgEJQQjBCgEIwQkBCYEXwNjAyYEYwMlBCkEJgQlBCkEJQQoBCsEKAQkBCsEJAQuBCwEKQQoBCwEKAQrBDAELAQrBDAEKwQvBC8EKwQuBC8ELgQyBDQEMAQvBDQELwQzBDMELwQyBDMEMgQ2BDkENAQzBDkEMwQ3BDcEMwQ2BDcENgQ4BDsENwQ4BDsEOAQ+BDwEOQQ3BDwENwQ7BBsEPAQ7BBsEOwQeBB4EOwQ+BB4EPgQgBD4EOAQ2BD4ENgQ/BCAEPgQ/BCAEPwQiBD8ENgQyBD8EMgQuBCIEPwQuBCIELgQkBEAEQQQ6BEAEOgQ9BBgEQAQ9BBgEPQQcBBQEBgRBBBQEQQRABBYEFARABBYEQAQYBEEEQgQ1BEEENQQ6BAYEQwRCBAYEQgRBBEMERgRFBEMERQRCBEIERQQxBEIEMQQ1BEUESAQtBEUELQQxBEYESQRIBEYESARFBEkETARLBEkESwRIBEgESwQqBEgEKgQtBEsETgQnBEsEJwQqBEwETwROBEwETgRLBE8EVgNaA08EWgNOBE4EWgNgA04EYAMnBFEDVwNQBFEDUARRBFEEUARNBFEETQRSBE0DUQNRBE0DUQRTBFMEUQRSBFMEUgRUBFUESwNNA1UETQNTBFcEVQRTBFcEUwRUBFYESANLA1YESwNVBFgEVgRVBFgEVQRXBFoEWARXBFoEVwRZBFkEVwRUBFkEVARbBF0EWgRZBF0EWQRcBFwEWQRbBFwEWwReBAMEXQRcBAMEXARfBF8EXAReBF8EXgRgBAcEAwRfBAcEXwREBEQEXwRgBEQEYARHBFsEYQRgBFsEYAReBGEESgRHBGEERwRgBFIETQRKBFIESgRhBFQEUgRhBFQEYQRbBGIEXQQCBGIEAgRlBGIEYwRaBGIEWgRdBGQEngRjBGQEYwRiBGcEZARiBGcEYgRlBGUEAgQABGUEAARmBGgEZwRlBGgEZQRmBEADQgNkBEADZARnBD4DQANnBD4DZwRoBGkEPAM+A2kEPgNoBGsEaQRoBGsEaARmBGoEOgM8A2oEPANpBGwEagRpBGwEaQRrBP4DawRmBP4DZgQABGwEawT+A2wE/gNtBHAEagRsBHAEbARuBG0EbwRuBG0EbgRsBG4EbwR6AW4EegFxBHQEcARuBHQEbgRxBHYEdARxBHYEcQRzBHEEegF/AXEEfwFzBDYDOANwBDYDcAR0BDQDNgN0BDQDdAR2BHUEdwQwA3UEMAMzA3IEeAR3BHIEdwR1BHgEegR5BHgEeQR3BHcEeQQuA3cELgMwA3oEfAR7BHoEewR5BHkEewQsA3kELAMuA3wEfgR9BHwEfQR7BHsEfQQqA3sEKgMsA34EgAR/BH4EfwR9BH0EfwQoA30EKAMqA4AEoAGBBIAEgQR/BH8EgQQmA38EJgMoA4EEggSFBIEEhQQmA6ABogGCBKABggSBBKIBpwGEBKIBhASCBIIEhASHBIIEhwSFBIcEigSIBIcEiASFBIUEiAQkA4UEJAMmA4oEjQSLBIoEiwSIBIgEiwQiA4gEIgMkA40EjwSOBI0EjgSLBIsEjgQgA4sEIAMiA48EkgSRBI8EkQSOBI4EkQQcA44EHAMgA5IElQSUBJIElASRBJEElAQaA5EEGgMcA5UE9QH6AZUE+gGUBJQE+gH9AZQE/QEaA5cE8QH2AZcE9gGWBJgElwSWBJgElgSTBOgB6gHxAegB8QGXBOYB6AGXBOYBlwSYBOQB5gGYBOQBmASZBJkEmASTBJkEkwSQBOIB5AGZBOIBmQSaBJoEmQSQBJoEkASMBOAB4gGaBOABmgSbBJsEmgSMBJsEjASJBN4B4AGbBN4BmwScBJwEmwSJBJwEiQSGBJ0EvgHeAZ0E3gGcBIMEnQScBIMEnASGBKsBrgG+AasBvgGdBKYBqwGdBKYBnQSDBIAEkQGVAYAElQGgAY0BkQGABI0BgAR+BHwEiQGNAXwEjQF+BIUBiQF8BIUBfAR6BHgEgQGFAXgEhQF6BHIEfgGBAXIEgQF4BDoDagRwBDoDcAQ4A20E/QN7AW0EewFvBEIDRAOeBEIDngRkBEQDRgOfBEQDnwSeBJ4EnwSgBJ4EoARjBEgDVgSfBEgDnwRGA58EVgRYBJ8EWASgBFoEYwSgBFoEoARYBHsB/QNpAXsBaQFuAfUD1gPZA/UD2QPyA9kD3APuA9kD7gPyAyQBWQHsAyQB7AMhAaMEEAF4A6MEeAOhBKEEeANzA6EEcwOlBFQDowShBFQDoQRZA1kDoQSlBFkDpQReA10DpASmBF0DpgRiA6QEcgNvA6QEbwOmBKYEbwNrA6YEawNpA2IDpgRpA2IDaQNlA6cEogRVA6cEVQNQAwkBDwGiBAkBogSnBAcBCQGnBAcBpwRKA0oDpwRQA0oDUANOA6gEygDNAKgEzQAfA6oEqAQfA6oEHwMdA6kEyADKAKkEygCoBKsEqQSoBKsEqASqBKwErQSrBKwEqwSqBBkDrASqBBkDqgQdA3sAfQCtBHsArQSsBHcAewCsBHcArAQZA30AhACuBH0ArgStBK0ErgSxBK0EsQSrBIUAiQCwBIUAsASvBK8EsASzBK8EswSyBLMEtgS1BLMEtQSyBLEEtASpBLEEqQSrBLYEvgDDALYEwwC1BLQEwgDIALQEyACpBL4AtgS3BL4AtwS7ALYEswS4BLYEuAS3BLcEuAS6BLcEugS5BLsAtwS5BLsAuQS5ALkEugS8BLkEvAS7BLkAuQS7BLkAuwS1ALsEvAS+BLsEvgS9BLUAuwS9BLUAvQSzAL0EvgTABL0EwAS/BLMAvQS/BLMAvwSvAL8EwASmAL8EpgCqAK8AvwSqAK8AqgCsAMAEwQSjAMAEowCmAL4EwgTBBL4EwQTABMIElwCdAMIEnQDBBMEEnQChAMEEoQCjAMMElQCXAMMElwDCBLwEwwTCBLwEwgS+BMQEjwCVAMQElQDDBLoExATDBLoEwwS8BMUEjQCPAMUEjwDEBLgExQTEBLgExAS6BLAEiQCNALAEjQDFBLMEsATFBLMExQS4BMsExgS0AcsEtAHIBMgEtAGxAcgEsQHKBM0EywTIBM0EyATJBMkEyATKBMkEygTkBM8E0QTHBM8ExwTMBNAEzwTMBNAEzATOBNQE0gTPBNQEzwTQBNIE0wTRBNIE0QTPBNIE1QTXBNIE1wTTBNQE1gTVBNQE1QTSBNUE1gTZBNUE2QTYBNcE1QTYBNcE2ATaBNkE3gTcBNkE3ATYBNgE3ASpAdgEqQHaBNsE3QTgBNsE4ATfBKgB2wTfBKgB3wSsAeAE4gThBOAE4QTfBN8E4QSvAd8ErwGsAeEEygSxAeEEsQGvAeIE5ATKBOIEygThBOAEZQXjBOAE4wTiBOQE4gTjBOQE4wTlBOgEyQTkBOgE5ATlBOsE6ATlBOsE5QTmBOMEXgXmBOME5gTlBOkEzQTJBOkEyQToBO0E6QToBO0E6ATrBPEE7wTsBPEE7ATwBPAE7ATnBPAE5wTyBPEE8ATzBPEE8wT2BPAE8gT0BPAE9ATzBPME9AQYBfMEGAX1BPYE8wT1BPYE9QT3BPkE8QT2BPkE9gT4BPgE9gT3BPgE9wT6BP0E+QT4BP0E+AT7BPsE+AT6BPsE+gT8BP4E+wT8BP4E/AQABf8E/QT7BP8E+wT+BAIF/wT+BAIF/gQBBQEF/gQABQEFAAUDBQUFAgUBBQUFAQUEBQQFAQUDBQQFAwUGBQUFBAUHBQUFBwUKBQQFBgUIBQQFCAUHBQcFCAUfBQcFHwUJBQoFBwUJBQoFCQULBQwFCgULBQwFCwUOBQ0FBQUKBQ0FCgUMBRAFDQUMBRAFDAUPBQ8FDAUOBQ8FDgURBRAFDwUSBRAFEgXyBBIFDwURBRIFEQUTBfQE8gQSBfQEEgUUBRQFEgUTBRQFEwUVBRgF9AQUBRgFFAUWBRYFFAUVBRYFFQUXBRkFFgUXBRkFFwUbBRoFGAUWBRoFFgUZBR0FGgUZBR0FGQUcBRwFGQUbBRwFGwUeBQYFHQUcBQYFHAUIBQgFHAUeBQgFHgUfBR4FGwUhBR4FIQUgBR8FHgUgBR8FIAUjBSAFIQUzBSAFMwUiBSMFIAUiBSMFIgUkBSUFIwUkBSUFJAUmBQkFHwUjBQkFIwUlBQsFCQUlBQsFJQUnBScFJQUmBScFJgUoBSkFJwUoBSkFKAUqBQ4FCwUnBQ4FJwUpBREFDgUpBREFKQUrBSsFKQUqBSsFKgUsBREFKwUtBREFLQUTBS0FKwUsBS0FLAUuBRUFEwUtBRUFLQUvBS8FLQUuBS8FLgUwBRcFFQUvBRcFLwUxBTEFLwUwBTEFMAUyBSEFMQUyBSEFMgUzBRcFMQUhBRcFIQUbBTAFNAUzBTAFMwUyBTQFNQUiBTQFIgUzBSwFNAUwBSwFMAUuBSwFKgU1BSwFNQU0BSoFKAUmBSoFJgU1BTUFJgUkBTUFJAUiBR0FBgU3BR0FNwU2BRoFHQU2BRoFNgU5BTYFNwVJBTYFSQU4BTkFNgU4BTkFOAU6BRoFOQU7BRoFOwUYBTsFOQU6BTsFOgU8BT0FOwU8BT0FPAU+BfUEGAU7BfUEOwU9BfcE9QQ9BfcEPQU/BT8FPQU+BT8FPgVABfoE9wQ/BfoEPwVBBUEFPwVABUEFQAVCBfwE+gRBBfwEQQVDBUMFQQVCBUMFQgVEBUUFQwVEBUUFRAVGBfwEQwVFBfwERQUABQMFAAVFBQMFRQVHBUcFRQVGBUcFRgVIBQYFAwVHBQYFRwU3BTcFRwVIBTcFSAVJBUgFRgVLBUgFSwVKBUkFSAVKBUkFSgVNBUoFSwVdBUoFXQVMBU0FSgVMBU0FTAVOBU8FTQVOBU8FTgVQBTgFSQVNBTgFTQVPBToFOAVPBToFTwVRBVEFTwVQBVEFUAVSBToFUQVTBToFUwU8BVMFUQVSBVMFUgVUBVUFUwVUBVUFVAVWBT4FPAVTBT4FUwVVBUAFPgVVBUAFVQVXBVcFVQVWBVcFVgVYBUIFQAVXBUIFVwVZBVkFVwVYBVkFWAVaBUQFQgVZBUQFWQVbBVsFWQVaBVsFWgVcBUYFRAVbBUYFWwVLBUsFWwVcBUsFXAVdBV0FXAVaBV0FWgVMBUwFWgVYBUwFWAVOBU4FWAVWBU4FVgVQBVAFVgVUBVAFVAVSBecEXwUQBecEEAXyBGEFDQUQBWEFEAVfBWUFYAVeBWUFXgXjBGQFBQUNBWQFDQVhBWYFYgVgBWYFYAVlBd0EZgVlBd0EZQXgBGgFagVjBWgFYwVnBdkEaAVnBdkEZwXeBNYEaQVoBdYEaAXZBGkFbAVqBWkFagVoBW0F/wQCBW0FAgVrBWsFAgUFBWsFBQVkBXAFbgVsBXAFbAVpBW0FbwX9BG0F/QT/BP0EbwVyBf0EcgX5BG4FcAVzBW4FcwVxBXEFcwXqBHEF6gTuBPkEcgXvBPkE7wTxBHAF1ATQBHAF0ARzBXMF0ATOBHMFzgTqBNYE1ARwBdYEcAVpBdcE2gR0BdcEdAV2BakBdQV0BakBdAXaBHcFdgV0BXcFdAV1BXgFdgV3BXgFdwV5BdME1wR2BdMEdgV4BdMEeAV6BdMEegXRBHkFewV6BXkFegV4BccE0QR6BccEegV7BccEewV8BccEfAWZAXkFfQV8BXkFfAV7BZ0BmQF8BZ0BfAV9BXcFfgV9BXcFfQV5BX0FfgWfAX0FnwGdAZ8BfgV/BZ8BfwWjAXcFdQV/BXcFfwV+BakBowF/BakBfwV1BVsBFQARAFsBEQBdAYAFGAAVAIAFFQBbAVcBUQFOAVcBTgGABRoAGACABRoAgAVOAUIBPwGDBUIBgwWBBSsAQgGBBSsAgQWCBYEFgwWEBYEFhAWCBT8BPQGFBT8BhQWDBYMFhQWGBYMFhgWEBYUFhwWJBYUFiQWGBT0BOQGHBT0BhwWFBYgFiwWMBYgFjAWKBToBMwGLBToBiwWIBYsFMwExAYsFMQGNBYwFiwWNBYwFjQWOBZAFjgWNBZAFjQWPBY8FjQUxAY8FMQEtASoBkQWPBSoBjwUtAZEFkgWQBZEFkAWPBZMFkQUqAZMFKgEoAZQFkgWRBZQFkQWTBZMFlQWWBZMFlgWUBSgBJQGVBSgBlQWTBZcFmAWWBZcFlgWVBSIBlwWVBSIBlQUlAZoFmAWXBZoFlwWZBZkFlwUiAZkFIgEfAZwFmgWZBZwFmQWbBZsFmQUfAZsFHwEbAZsFGwEYAZsFGAGdBZwFmwWdBZwFnQWeBZ0FGAEVAZ0FFQGfBZ4FnQWfBZ4FnwWgBZ8FFQETAZ8FEwGhBaAFnwWhBaAFoQWiBaEFpAWmBaEFpgWiBRMBDgGkBRMBpAWhBacFowUNAacFDQEKAagFpQWjBagFowWnBaoFqAWnBaoFpwWpBakFpwUKAakFCgEGAQMBqwWpBQMBqQUGAasFrAWqBasFqgWpBasFAwEBAasFAQGtBawFqwWtBawFrQWuBa0FrwWwBa0FsAWuBQEB/QCvBQEBrwWtBa8F/QD7AK8F+wCxBbAFrwWxBbAFsQWyBbEFswW0BbEFtAWyBfsA9wCzBfsAswWxBbMF9wD1ALMF9QC1BbQFswW1BbQFtQW2BbUFtwW4BbUFuAW2BfUA8QC3BfUAtwW1BbcF8QDuALcF7gC5BbgFtwW5BbgFuQW6BbkF7gDsALkF7AC7BboFuQW7BboFuwW8BbsFvgXABbsFwAW8BewA6QC+BewAvgW7Bb0FwQXCBb0FwgW/BegA4gDBBegAwQW9BeIA4ADDBeIAwwXBBcEFwwXEBcEFxAXCBcMFxQXGBcMFxgXEBeAA3ADFBeAAxQXDBdwA2gDHBdwAxwXFBcUFxwXIBcUFyAXGBccFyQXKBccFygXIBdoA1gDJBdoAyQXHBdYA1ADLBdYAywXJBckFywXMBckFzAXKBcsFzQXOBcsFzgXMBdQA0ADNBdQAzQXLBdAAzgDPBdAAzwXNBc0FzwXQBc0F0AXOBdIF0AXPBdIFzwXRBdEFzwXOANEFzgDLANQF0gXRBdQF0QXTBdMF0QXLANMFywDHANUF0wXHANUFxwDEANcF1AXTBdcF0wXVBdkF2gXYBdkF2AXWBb8A2QXWBb8A1gXFANkF2wXcBdkF3AXaBb8AvADbBb8A2wXZBdsF3QXeBdsF3gXcBbwAuADdBbwA3QXbBd0FuAC2AN0FtgDfBd4F3QXfBd4F3wXgBd8F4QXiBd8F4gXgBbYAsgDhBbYA4QXfBeEFsgCwAOEFsADjBeIF4QXjBeIF4wXkBeMF5QXmBeMF5gXkBbAArQDlBbAA5QXjBeUF5wXoBeUF6AXmBa0AqQDnBa0A5wXlBakApwDpBakA6QXnBecF6QXqBecF6gXoBewF6gXpBewF6QXrBesF6QWnAOsFpwCkAO4F7AXrBe4F6wXtBe0F6wWkAO0FpACgAO8F7QWgAO8FoACcAPAF7gXtBfAF7QXvBZgA8QXvBZgA7wWcAPEF8gXwBfEF8AXvBfQF8gXxBfQF8QXzBfMF8QWYAPMFmACTAJAA9QXzBZAA8wWTAPUF9gX0BfUF9AXzBfgF9gX1BfgF9QX3BfcF9QWQAPcFkACLAPkF9wWLAPkFiwCHAPoF+AX3BfoF9wX5BfkFhwCCAPkFggD8BfoF+QX8BfoF/AX+BYEAfgD/BYEA/wX7BfsF/wUABvsFAAb9Bf8FAQYCBv8FAgYABn4AegABBn4AAQb/BXoAeAADBnoAAwYBBgEGAwYEBgEGBAYCBgYGBAYDBgYGAwYFBgUGAwZ4AAUGeAB1AAcGCQYGBgcGBgYFBnEABwYFBnEABQZ1AAwGCgYIBgwGCAYLBgsGCAZyAAsGcgBsAA0GDgYMBg0GDAYLBmkADQYLBmkACwZsABAGDgYNBhAGDQYPBg8GDQZpAA8GaQBmABIGEAYPBhIGDwYRBhEGDwZmABEGZgBiABMGEQZiABMGYgBgABQGEgYRBhQGEQYTBhYGFAYTBhYGEwYVBhUGEwZgABUGYABcABcGFQZcABcGXABaABgGFgYVBhgGFQYXBhkGGgYYBhkGGAYXBlcAGQYXBlcAFwZaABwGGgYZBhwGGQYbBhsGGQZXABsGVwBUAB4GHAYbBh4GGwYdBh0GGwZUAB0GVABQAB8GHQZQAB8GUABOACAGHgYdBiAGHQYfBiIGIAYfBiIGHwYhBiEGHwZOACEGTgBKACMGIQZKACMGSgBIACQGIgYhBiQGIQYjBiUGJwYkBiUGJAYjBkQAJQYjBkQAIwZIACoGKAYmBioGJgYpBikGJgZFACkGRQBBAD8AKwYpBj8AKQZBACsGLAYqBisGKgYpBi0GLgYsBi0GLAYrBj0ALQYrBj0AKwY/ADAGLgYtBjAGLQYvBi8GLQY9AC8GPQA7ADEGLwY7ADEGOwA5ADIGMAYvBjIGLwYxBjcAMwYxBjcAMQY5ADMGNAYyBjMGMgYxBjgGNAYzBjgGMwY2BjYGMwY3ADYGNwA1ADkGNQY0ADkGNAAxADoGNwY1BjoGNQY5BjsGOQYxADsGMQAvADwGOgY5BjwGOQY7Bj4GPAY7Bj4GOwY9Bj0GOwYvAD0GLwAtACsAPgY9BisAPQYtACsAQAY/BisAPwY+Bj8GQQY8Bj8GPAY+BkAGQgZBBkAGQQY/BkIGRAZDBkIGQwZBBkEGQwY6BkEGOgY8BkMGRQY3BkMGNwY6BkQGRwZFBkQGRQZDBkYGSQY0BkYGNAY4BkgGSgZJBkgGSQZGBkkGSgZMBkkGTAZLBjQGSQZLBjQGSwYyBksGTQYwBksGMAYyBkwGTgZNBkwGTQZLBk0GTwYuBk0GLgYwBk4GUAZPBk4GTwZNBlEGTwZQBlEGUAZSBiwGLgZPBiwGTwZRBlEGUgZUBlEGVAZTBiwGUQZTBiwGUwYqBlMGVgYoBlMGKAYqBlQGWAZWBlQGVgZTBlUGWQYkBlUGJAYnBlcGWgZZBlcGWQZVBlkGWwYiBlkGIgYkBloGXAZbBloGWwZZBlsGXAZeBlsGXgZdBiIGWwZdBiIGXQYgBl0GXwYeBl0GHgYgBl4GYAZfBl4GXwZdBl8GYAZiBl8GYgZhBh4GXwZhBh4GYQYcBmEGYwYaBmEGGgYcBmIGZAZjBmIGYwZhBhgGGgZjBhgGYwZlBmUGYwZkBmUGZAZmBhYGGAZlBhYGZQZnBmcGZQZmBmcGZgZoBmkGZwZoBmkGaAZqBhQGFgZnBhQGZwZpBhIGFAZpBhIGaQZrBmsGaQZqBmsGagZsBm0GawZsBm0GbAZuBhAGEgZrBhAGawZtBm8GDgYQBm8GEAZtBnAGbwZtBnAGbQZuBpsNjg1xBpsNcQZzBo4Njw10Bo4NdAZxBnMGcQZyBnMGcgaSBnEGdAZ1BnEGdQZyBngGdQZ0BngGdAZ2BpANjw1wBpANcAZ3BpINkA13BpINdwZ8Bn4GeAZ2Bn4GdgZ6BpMNkQ17BpMNewaABoEGfQZ5BoEGeQZ/BpQNkw2ABpQNgAaDBoQGgQZ/BoQGfwaCBpQNlQ2FBpQNhQaCBoIGhQaHBoIGhwaEBpUNlg2IBpUNiAaFBoUGiAaJBoUGiQaHBpcNlg0EBpcNBAYGBosGiQaIBosGiAaKBowGjgaLBowGiwaKBpgNjAaKBpgNigaXDZEGjwaNBpEGjQaQBpoNmQ0KBpoNCgYMBnMGkgaRBnMGkQaQBpsNcwaQBpsNkAaaDZIGlQaTBpIGkwaRBo8GkQaTBo8GkwaUBpYGlAaTBpYGkwaVBpkGlgaVBpkGlQaXBpUGkgZyBpUGcgaXBpoGmQaXBpoGlwaYBpcGcgZ1BpcGdQaYBp0GlgaZBp0GmQabBpsGmQaaBpsGmgacBp4GmwacBp4GnAafBqAGnQabBqAGmwaeBqEGngafBqEGnwakBqMGoAaeBqMGngahBqIGoQakBqIGpAalBsAGowahBsAGoQaiBqcGpQakBqcGpAamBqYGpAafBqYGnwaoBqwGpwamBqwGpgaqBqoGpgaoBqoGqAZ+Bq4GqwapBq4GqQatBq0GqQZ9Bq0GfQaBBrAGrgatBrAGrQavBq8GrQaBBq8GgQaEBq8GhAaHBq8GhwaxBrAGrwaxBrAGsQayBrEGhwaJBrEGiQazBrIGsQazBrIGswa0BrQGswa1BrQGtQa2BrMGiQaLBrMGiwa1BrYGtQa3BrYGtwa5BrUGiwaOBrUGjga3BroGuAa7BroGuwa8BrgGjwa9BrgGvQa7BrwGuwajBrwGowbABrsGvQagBrsGoAajBo8GlAa+Bo8Gvga9BqAGvQa+BqAGvgadBpYGnQa+BpYGvgaUBr8GvAbABr8GwAbBBiQHuga8BiQHvAa/BsEGwAaiBsEGogbDBsIGwQbDBsIGwwbFBi0HvwbBBi0HwQbCBsMGogalBsMGpQbEBsUGwwbEBsUGxAbGBscGyQbCBscGwgbFBssGxwbFBssGxQbGBs0GzwbKBs0GygbIBs4GzQbIBs4GyAbMBtIG0AbNBtIGzQbOBtAG0QbPBtAGzwbNBtUG0QbQBtUG0AbTBtMG0AbSBtMG0gbUBtQG2AbWBtQG1gbTBtMG1gbXBtMG1wbVBtYG2QbbBtYG2wbXBtgG2gbZBtgG2QbWBtoG3QbcBtoG3AbZBtkG3AbeBtkG3gbbBtwG3QbhBtwG4QbfBt4G3AbfBt4G3wbgBt8G4gbjBt8G4wbgBuEG5AbiBuEG4gbfBuIG5QbnBuIG5wbjBuQG6QblBuQG5QbiBusG7AboBusG6AbmBu0G6wbmBu0G5gbqBu8G7AbrBu8G6wbuBu4G6wbtBu4G7QbwBvMG7wbuBvMG7gbxBvEG7gbwBvEG8AbyBvQG8QbyBvQG8gb2BvUG8wbxBvUG8Qb0BvQG9wb5BvQG+Qb1BvYG+Ab3BvYG9wb0BvcG+Ab8BvcG/Ab6BvkG9wb6BvkG+gb7BvsG+gb9BvsG/Qb+BvoG/Ab/BvoG/wb9Bv0GAAcBB/0GAQf+Bv8GAgcAB/8GAAf9BgAHAwcHBwAHBwcBBwIHBQcDBwIHAwcABwgHAwcFBwgHBQcKBwwHBwcDBwwHAwcIBxIHDgcIBxIHCAcKBw4HEAcMBw4HDAcIBxUHDwcNBxUHDQcTBxMHDQcRBxMHEQcUBxsHFwcTBxsHEwcUBxcHGQcVBxcHFQcTBxYHHAcdBxYHHQcYBxoHHgccBxoHHAcWBxwHHwchBxwHIQcdBx4HIAcfBx4HHwccBx8HIAewBh8HsAayBiEHHweyBiEHsga0Bh0HIQciBx0HIgclByEHtAa2BiEHtgYiByIHtga5BiIHuQYjByUHIgcjByUHIwcoByYHJQcoByYHKAcqBxgHHQclBxgHJQcmBykHJAe/BikHvwYtBysHKQctBysHLQcuBy4HLQfCBi4HwgbJBjIHLAcvBzIHLwcwBzAHLwfKBjAHygbPBjEHMAfPBjEHzwbRBjMHMgcwBzMHMAcxBzUHNAcyBzUHMgczBzQHNgcsBzQHLAcyBzkHNwc0BzkHNAc1BzcHBgc2BzcHNgc0BzwHOwc4BzwHOAc6BwEHBwc4BwEHOAc7B/kG+wY7B/kGOwc8B/4GAQc7B/4GOwf7Bj0HPAc6Bz0HOgc/B/UG+QY8B/UGPAc9Bz8HQwdABz8HQAc9B0AH8wb1BkAH9QY9B0MHRQdBB0MHQQdAB+8G8wZAB+8GQAdBB0QHQgdGB0QHRgdHB0YHQgc+B0YHPgdJB0gHTwdHB0gHRwdGB0oHSAdGB0oHRgdJB0kHNQczB0kHMwdKBz4HOQc1Bz4HNQdJB0oHMwcxB0oHMQdLB0wHSAdKB0wHSgdLB0sHMQfRBksH0QbVBtUG1wZMB9UGTAdLB9cG2wZNB9cGTQdMB08HSAdMB08HTAdNB9sG3gZOB9sGTgdNB1AHTwdNB1AHTQdOB08HUAdRB08HUQdHB04HUwdSB04HUgdQB1AHUgdUB1AHVAdRB1MHVwdUB1MHVAdSB1EHVAdVB1EHVQdbB1cHWAdVB1cHVQdUB+AG4wZXB+AGVwdTB+MG5wZYB+MGWAdXB1wHVgdZB1wHWQdaB1oHWQfoBloH6AbsBuwG7wZBB+wGQQdaB0UHXAdaB0UHWgdBB1sHRAdHB1sHRwdRB94G4AZTB94GUwdOBzYHBgcLBzYHCwddBywHNgddBywHXQcnBycHXQcVBycHFQcZB10HCwcPB10HDwcVBx4HYQdeBx4HXgcgByAHXgeuBiAHrgawBl4HXwerBl4HqwauBmEHYgdfB2EHXwdeBxoHZAdhBxoHYQceB2QHZgdiB2QHYgdhB2UHaQdqB2UHagdoBxsHFAdpBxsHaQdlB2kHCQcEB2kHBAdqBxQHEQcJBxQHCQdpB28HaAdqB28HagdrB2sHagcEB2sHBAdtB2wHawdtB2wHbQeEB3AHbwdrB3AHawdsB3IHcQdvB3IHbwdwB3EHdAdoB3EHaAdvB9IGzgZxB9IGcQdyB84GzAZ0B84GdAdxB3MHywbGBnMHxgZ1B2cHcwd1B2cHdQdjB2MHdQd2B2MHdgdgB3UHxgbEBnUHxAZ2B2AHdgenBmAHpwasBnYHxAalBnYHpQanBncHcgdwB3cHcAd4B9QG0gZyB9QGcgd3B3gHewd5B3gHeQd3B3kH2AbUBnkH1AZ3B3sHfAd6B3sHegd5B9oG2AZ5B9oGeQd6B3wHewd9B3wHfQd+B30Hewd4B30HeAeBB38Hiwd+B38Hfgd9B4IHfwd9B4IHfQeBB4EHbAeEB4EHhAeCB3gHcAdsB3gHbAeBB4MHhQeHB4MHhweGB4gHgAeDB4gHgweGB4YHhwf4BoYH+Ab2BvYG8gaIB/YGiAeGB/IG8AaJB/IGiQeIB4wHgAeIB4wHiAeJB/AG7QaKB/AGigeJB44HjAeJB44HiQeKB4sHjQePB4sHjwd+B4oHkweRB4oHkQeOB40HkAeUB40HlAePB5QHkAeSB5QHkgeWB48HlAeVB48HlQeZB5UHlAeWB5UHlgeXB5cHlgfkBpcH5AbhBpYHkgfpBpYH6QbkBpgHlwfhBpgH4QbdBpkHlQeXB5kHlweYB90G2gZ6B90GegeYB3wHmQeYB3wHmAd6B5kHfAd+B5kHfgePB+0G6gaTB+0GkweKB4cHmgf8BocH/Ab4BoUHbgeaB4UHmgeHB5oHAgf/BpoH/wb8Bm4HBQcCB24HAgeaB58GnAabB58GmweoBn4GqAabB34GmwecB5oGnAebB5oGmwecBpoGmAadB5oGnQecB34GnAedB34GnQd4BnUGeAadB3UGnQeYBp8HBAaGBp8HhgaeB54HhgaDBp4HgwagB6MHnweeB6MHngehB6EHngegB6EHoAeiB6QHoQeiB6QHogemB6UHowehB6UHoQekB9AFpQekB9AFpAenB6cHpAemB6cHpgeoB6kHpweoB6kHqAeqB84F0AWnB84FpwepB6sHzAXOBasHzgWpB6wHqwepB6wHqQeqB6sHrQfKBasHygXMBawHrgetB6wHrQerB64HsAevB64HrwetB60HrwfIBa0HyAXKBa8HsQfGBa8HxgXIBbAHsgexB7AHsQevB7IHtAezB7IHswexB7EHswfEBbEHxAXGBbMHtQfCBbMHwgXEBbQHtge1B7QHtQezB7YHuQe3B7YHtwe1B7UHtwe/BbUHvwXCBbwFwAW4B7wFuAe7B7sHuAe6B7sHuge8B7oFvAW7B7oFuwe9B70Huwe8B70HvAe+B8AHvwe9B8AHvQe+B78HuAW6Bb8HugW9B78HwAfCB78HwgfBB7gFvwfBB7gFwQe2BcEHwwe0BcEHtAW2BcIHxAfDB8IHwwfBB8UHwwfEB8UHxAfGB7IFtAXDB7IFwwfFB8cHsAWyBccHsgXFB8gHxwfFB8gHxQfGB64FsAXHB64FxwfJB8kHxwfIB8kHyAfKB8sHrAWuBcsHrgXJB8wHywfJB8wHyQfKB80HqgWsBc0HrAXLB84HzQfLB84HywfMB80HzgfRB80H0QfPB6oFzQfPB6oFzwfQB88H0gfUB88H1AfQB9EH0wfSB9EH0gfPB9UH0gfTB9UH0wfXB9YH1AfSB9YH0gfVB9gH2gfWB9gH1gfVB9wH2AfVB9wH1QfXB9kH3gffB9kH3wfbB90H4AfeB90H3gfZB94H4QfjB94H4wffB+AH5gfhB+AH4QfeB+IH5wfoB+IH6AfkB+UH6QfnB+UH5wfiB+cH6gfrB+cH6wfoB+kH7AfqB+kH6gfnB+8H6wfqB+8H6gftB+0H6gfsB+0H7AfuB/IH8AftB/IH7QfuB/AH8QfvB/AH7wftB/UH8QfwB/UH8AfzB/MH8AfyB/MH8gf0B/sH9wfzB/sH8wf0B/cH+Qf1B/cH9QfzB/4H+Af2B/4H9gf8B/wH9gf6B/wH+gf9BwAI/wf8BwAI/Af9B/8HpgX+B/8H/gf8B6IFpgX/B6IF/wcBCAEI/wcACAEIAAgCCAMIoAWiBQMIogUBCAQIAwgBCAQIAQgCCAMIBQieBQMIngWgBQQIBggFCAQIBQgDCAUIBwicBQUInAWeBQYICAgHCAYIBwgFCAoInAUHCAoIBwgJCAkIBwgICAkICAgLCA4ICggJCA4ICQgMCAwICQgLCAwICwgNCAwIDQgUCAwIFAgQCA4IDAgQCA4IEAgSCA8IFQgXCA8IFwgRCBMIFggVCBMIFQgPCBUIFggaCBUIGggYCBcIFQgYCBcIGAgZCBgIGwgdCBgIHQgZCBoIHAgbCBoIGwgYCBsIHAggCBsIIAgeCB0IGwgeCB0IHggfCCEIHwgeCCEIHgggCBwIIwgiCBwIIgggCCEIIAgiCCEIIggkCCUIJAgiCCUIIggjCCEIJAgmCCEIJggoCCUIJwgmCCUIJggkCCkIKAgmCCkIJggnCCEIKAgqCCEIKggsCCkIKwgqCCkIKggoCC0ILAgqCC0IKggrCC0ILwguCC0ILggsCCEILAguCCEILggwCCEIMAgyCC8IMQgwCC8IMAguCDMIMggwCDMIMAgxCCEIMgg0CDMINQg0CDMINAgyCCEINAg2CCEINggfCDUINwg2CDUINgg0CB0IHwg2CB0INgg3CDgINwg1CDgINQg6CBkIHQg3CBkINwg4CDkIOAg6CDkIOgg7CBcIGQg4CBcIOAg5CD0IOwg6CD0IOgg8CDoINQgzCDoIMwg8CDwIMwgxCDwIMQg+CD0IPAg+CD0IPgg/CD8IPghACD8IQAhBCD4IMQgvCD4ILwhACEAILwgtCEAILQhCCEMIQQhACEMIQAhCCEMIQghECEMIRAhFCEIILQgrCEIIKwhECEUIRAhGCEUIRghHCEQIKwgpCEQIKQhGCEYIKQgnCEYIJwhICEcIRghICEcISAhJCEkISAhKCEkISghLCEgIJwglCEgIJQhKCEoIJQgjCEoIIwhMCEsISghMCEsITAhNCE0ITAgaCE0IGggWCEwIIwgcCEwIHAgaCE4ITQgWCE4IFggTCFEISwhNCFEITQhOCFAITwgUCFAIFAgNCFMIUghPCFMITwhQCFQISQhLCFQISwhRCFYIVQhSCFYIUghTCFkIWAhVCFkIVQhWCFcIRwhJCFcISQhUCFoIRQhHCFoIRwhXCFwIWwhYCFwIWAhZCF8IXghbCF8IWwhcCF0IQwhFCF0IRQhaCF8IYghhCF8IYQheCGAIQQhDCGAIQwhdCGMIPwhBCGMIQQhgCGUIZAhhCGUIYQhiCGgIZwhkCGgIZAhlCGYIPQg/CGYIPwhjCGkIOwg9CGkIPQhmCGgIawhqCGgIaghnCG4IbQhqCG4IaghrCGwIOQg7CGwIOwhpCA4IEghtCA4IbQhuCBEIFwg5CBEIOQhsCHAIbwhuCHAIbghrCG8ICggOCG8IDghuCJgFmgVvCJgFbwhwCJoFnAUKCJoFCghvCGgIcQhwCGgIcAhrCHEIcgiYBXEImAVwCHMIcQhoCHMIaAhlCHUIcghxCHUIcQhzCHQIcwhlCHQIZQhiCHYIdQhzCHYIcwh0CHgIcgh1CHgIdQh3CHUIdgh5CHUIeQh3CHcIegh7CHcIewh4CHkIfQh6CHkIegh3CHoIfAhcCnoIXAp7CH0Ifgh8CH0IfAh6CH8IgAh+CH8Ifgh9CHkIgQh/CHkIfwh9CIIIhQiACIIIgAh/CIQIggh/CIQIfwiBCIIIhAiJCIIIiQiGCIcIhQiCCIcIggiGCIcIhgiKCIcIigiLCIYIiQiPCIYIjwiKCIsIigiNCIsIjQjrCIoIjwiTCIoIkwiNCJgIkgiOCJgIjgiUCJQIjgiICJQIiAiWCJUIlAiWCJUIlggOCZoImAiUCJoIlAiVCJwImwiXCJwIlwiZCJsIngiRCJsIkQiXCKAInwibCKAImwicCJ8IogieCJ8IngibCKQIowifCKQInwigCKMIpgiiCKMIogifCKgIpwijCKgIowikCKcIqgimCKcIpgijCKwIqwinCKwIpwioCKsIrgiqCKsIqginCLAIrwirCLAIqwisCK8IsgiuCK8IrgirCLcIswivCLcIrwiwCLMItgiyCLMIsgivCLgItAizCLgIswi3CLQIowm2CLQItgizCLsIuQi3CLsItwiwCLoIuAi3CLoItwi5CLkIvAi+CLkIvgi6CLsIvQi8CLsIvAi5CL0IwgjACL0IwAi8CL4IvAjACL4IwAjECMEIxgjFCMEIxQi/CMMIvwjFCMMIxQjHCMYIyQjICMYIyAjFCMcIxQjICMcIyAjKCM0IywjICM0IyAjJCMoIyAjLCMoIywjMCM8IzAjLCM8IywjOCM4IywjNCM4IzQjQCKIJzwjOCKIJzgi1CLUIzgjQCLUI0AixCLEI0AjRCLEI0QitCNAIzQjTCNAI0wjRCK0I0QjSCK0I0gipCNEI0wjUCNEI1AjSCNQI0wjVCNQI1QjWCNMIzQjJCNMIyQjVCNcI1QjJCNcIyQjYCNkI1gjVCNkI1QjXCGIG1wjYCGIG2AhkBmAG2QjXCGAG1whiBl4G2gjZCF4G2QhgBtoI2wjWCNoI1gjZCFwG3AjaCFwG2gheBtwI3QjbCNwI2wjaCFoG3gjcCFoG3AhcBt4I3wjdCN4I3QjcCFcG4AjeCFcG3ghaBuAI4gjfCOAI3wjeCOQI4QhYBuQIWAZUBuYI4wjhCOYI4QjkCOUI5AhUBuUIVAZSBucI5gjkCOcI5AjlCIsI6wjjCIsI4wjmCOcIhwiLCOcIiwjmCOkI6AjnCOkI5wjlCOcI6AiFCOcIhQiHCHwIfgjoCHwI6AjpCOgIfgiACOgIgAiFCFAG6QjlCFAG5QhSBlAGXAp8CFAGfAjpCOII6gjsCOII7AjfCO4I7AjqCO4I6giMCO8I7QjsCO8I7AjuCOwI7QjdCOwI3QjfCJ0I7giMCJ0IjAiQCKEI7wjuCKEI7gidCKUI8AjvCKUI7wihCPAI8QjtCPAI7QjvCKkI0gjwCKkI8AilCNII1AjxCNII8QjwCO0I8QjbCO0I2wjdCPEI1AjWCPEI1gjbCPII8whkBvIIZAbYCMYI8gjYCMYI2AjJCMEI9AjyCMEI8gjGCPQI9gjzCPQI8wjyCL0I+Aj1CL0I9QjCCPgI+Qj3CPgI9wj1CLsI+gj4CLsI+Ai9CPoIrAf5CPoI+Qj4CPsIrgesB/sIrAf6CPwI+wj6CPwI+gi7CP4I/Qj7CP4I+wj8CP0IsAeuB/0Irgf7CAAJ/wj9CAAJ/Qj+CP8IsgewB/8IsAf9CAIJAQn/CAIJ/wgACQEJtAeyBwEJsgf/CAQJAwkBCQQJAQkCCQMJtge0BwMJtAcBCQcJBQkDCQcJAwkECQUJuQe2BwUJtgcDCboHBgkJCboHCQm8BwYJCAkLCQYJCwkJCbwHCQkKCbwHCgm+BwkJCwkMCQkJDAkKCQwJCwmVCAwJlQgOCQsJCAmaCAsJmgiVCA8JDQkMCQ8JDAkOCQoJDAkNCQoJDQkXCQ8JDgmWCA8JlggQCRAJEwkRCRAJEQkPCQ0JDwkRCQ0JEQkUCREJEgkVCREJFQkUCRMJIwkSCRMJEgkRCRQJFQkYCRQJGAkWCQ0JFAkWCQ0JFgkXCRcJFgnCBxcJwgfABxYJGAnEBxYJxAfCB8QHGAkZCcQHGQnGBxgJFQkbCRgJGwkZCcYHGQkaCcYHGgnIBxkJGwkcCRkJHAkaCRwJGwkdCRwJHQkeCRsJFQkSCRsJEgkdCR0JHwkgCR0JIAkeCRIJIwkfCRIJHwkdCR8JIQk3CR8JNwkgCSMJJAkhCSMJIQkfCScJJAkjCScJIwkTCSYJNAkiCSYJIgklCSkJJgklCSkJJQkoCYMIJwkTCYMIEwkQCYQIgQgpCYQIKQkoCYEIKwkqCYEIKgkpCSoJLAkmCSoJJgkpCSoJKwkvCSoJLwktCSwJKgktCSwJLQkuCS4JLQlcCC4JXAhZCC0JLwlfCC0JXwhcCF8ILwl0CF8IdAhiCC8JKwl2CC8Jdgh0CDAJLglZCDAJWQhWCDIJLAkuCTIJLgkwCTEJMAlWCDEJVghTCDMJMgkwCTMJMAkxCSYJLAkyCSYJMgk0CTIJMwk1CTIJNQk0CTQJNQk4CTQJOAkiCTUJMwmMCTUJjAk2CTUJNgk5CTUJOQk4CYsJOgk4CYsJOAk5CToJQQk9CToJPQk4CTgJPQlACTgJQAk8CTcJOwmECTcJhAkgCUEJQgk+CUEJPgk9CT0JPgljCT0JYwlACUUJRAlBCUUJQQk6CUQJRglCCUQJQglBCUkJSAlECUkJRAlFCUgJSglGCUgJRglECQAI/QdICQAISAlJCf0H+gdKCf0HSglICfsH9AdMCfsHTAlLCUsJTAlNCUsJTQlHCUwJTglPCUwJTwlNCfQH8gdOCfQHTglMCfIH7gdQCfIHUAlOCU4JUAlRCU4JUQlPCVAJUglTCVAJUwlRCe4H7AdSCe4HUglQCVQJUgnsB1QJ7AfpB1cJUwlSCVcJUglUCVUJVAnpB1UJ6QflB1kJVwlUCVkJVAlVCVoJXQlTCVoJUwlXCVwJWglXCVwJVwlZCWAJXglaCWAJWglcCV4JYQldCV4JXQlaCWQJYgleCWQJXglgCWIJZQlhCWIJYQleCT8JZgliCT8JYglkCWYJZwllCWYJZQliCWgJaQlnCWgJZwlmCUMJaAlmCUMJZgk/CUcJTQloCUcJaAlDCU0JTwlpCU0JaQloCWkJagllCWkJZQlnCU8JUQlqCU8JaglpCWoJXQlhCWoJYQllCVEJUwldCVEJXQlqCUAJYwlfCUAJXwlrCWsJXwlbCWsJWwluCTwJQAlrCTwJawltCW0JawluCW0JbglwCXAJbglxCXAJcQlzCW4JWwlYCW4JWAlxCXEJWAlWCXEJVgl0CXMJcQl0CXMJdAl2CXYJdAngB3YJ4AfdB3QJVgnmB3QJ5gfgB9cHdwl1CdcHdQncB3cJeAlyCXcJcgl1CdMHeQl3CdMHdwnXB3kJegl4CXkJeAl3CXsJeQnTB3sJ0wfRB30Jegl5CX0JeQl7CXwJewnRB3wJ0QfOB34JfQl7CX4Jewl8CYAJfwl9CYAJfQl+CX8JgQl6CX8Jegl9CR4Jggl/CR4JfwmACYIJgwmBCYIJgQl/CSAJhAmCCSAJggkeCYQJhQmDCYQJgwmCCTsJbAmFCTsJhQmECYEJgwmFCYEJhQmGCYYJhQlsCYYJbAlvCXgJhglvCXgJbwlyCXoJgQmGCXoJhgl4CRwJHgmACRwJgAmHCYAJfgmICYAJiAmHCYkJhwmICYkJiAmKCRoJHAmHCRoJhwmJCcoHiQmKCcoHignMB8gHGgmJCcgHiQnKB84HzAeKCc4Higl8CYoJiAl+CYoJfgl8CQAISQmLCQAIiwkCCEkJRQk6CUkJOgmLCQIIiwk5CQIIOQkECDYJBggECDYJBAg5CYwJCAgGCIwJBgg2CY0JjAkzCY0JMwkxCQsICAiMCQsIjAmNCVAIjQkxCVAIMQlTCA0ICwiNCQ0IjQlQCHYIKwmBCHYIgQh5CMAHvgcKCcAHCgkXCZYIiAiDCJYIgwgQCQcJBAmcCAcJnAiZCAQJAgmgCAQJoAicCKAIAgkACaAIAAmkCAAJ/gioCAAJqAikCKgI/gj8CKgI/AisCPwIuwiwCPwIsAisCPcI+QiOCfcIjgmQCfkIrAeqB/kIqgeOCZAJjgmRCZAJkQmTCY4JqgeoB44JqAeRCZMJkQmUCZMJlAmVCZEJqAemB5EJpgeUCZUJlAmXCZUJlwmYCZQJpgeiB5QJogeXCZgJlwmaCZgJmgmbCZcJogegB5cJoAeaCZsJmgmABpsJgAZ7BpoJoAeDBpoJgwaABp0JnAl8Bp0JfAZ3Bp4JmQmcCZ4JnAmdCW4GnQl3Bm4GdwZwBmwGngmdCWwGnQluBmoGnwmeCWoGnglsBp8JlgmZCZ8JmQmeCWgGoAmfCWgGnwlqBqAJkgmWCaAJlgmfCWYGoQmgCWYGoAloBqEJjwmSCaEJkgmgCWQG8wihCWQGoQlmBvMI9giPCfMIjwmhCacJpAnPCKcJzwiiCaQJpgnMCKQJzAjPCKkJpQmkCakJpAmnCaUJwAmmCaUJpgmkCasJqAmjCasJowmtCawJqgmoCawJqAmrCbAJrAmrCbAJqwmuCa4JqwmtCa4JrQmvCa4JrwmzCa4JswmxCbAJrgmxCbAJsQmyCbEJtAm1CbEJtQmyCbMJtgm0CbMJtAmxCbUJtAm4CbUJuAm6CbQJtgnECLQJxAi4CbcJuwm8CbcJvAm5CcMIxwi7CcMIuwm3CbwJuwm9CbwJvQm+CbsJxwjKCLsJygi9Cb0JygjMCL0JzAimCb4JvQmmCb4JpgnACbwJvgm/CbwJvwlBCsAJwQm/CcAJvwm+CcQJwQnACcQJwAmlCccJwgnBCccJwQnECb8JwQnCCb8Jwgk6CsUJxAmlCcUJpQmpCckJxwnECckJxAnFCc0JzAnICc0JyAnLCcwJzgnDCcwJwwnICc0J0gnPCc0JzwnMCcwJzwnQCcwJ0AnOCc8J0Qn0Cc8J9AnQCdIJ0wnRCdIJ0QnPCdUJ1AnSCdUJ0gnNCdQJ1gnTCdQJ0wnSCdkJ1wnUCdkJ1AnVCdcJ2AnWCdcJ1gnUCdoJ3AnYCdoJ2AnXCdsJ2gnXCdsJ1wnZCd4J3QnaCd4J2gnbCd0J3wncCd0J3AnaCeEJ4AndCeEJ3QneCeAJ4gnfCeAJ3wndCeEJ5gnjCeEJ4wngCeAJ4wnkCeAJ5AniCeMJ5Qn7CeMJ+wnkCeYJ5wnlCeYJ5QnjCegJ6gnnCegJ5wnmCekJ6AnmCekJ5gnhCewJ6wnoCewJ6AnpCesJ7QnqCesJ6gnoCewJzgnuCewJ7gnrCe4J7wntCe4J7QnrCdAJ8AnuCdAJ7gnOCfAJ8QnvCfAJ7wnuCfQJ8gnwCfQJ8AnQCfIJ8wnxCfIJ8QnwCfUJ9wnzCfUJ8wnyCfYJ9QnyCfYJ8gn0CfkJ+An1CfkJ9Qn2CfgJ+gn3CfgJ9wn1CeIJ5An4CeIJ+An5CeQJ+wn6CeQJ+gn4CfoJ/An9CfoJ/Qn3CfsJ/wn8CfsJ/An6CfwJ/gkPCvwJDwr9Cf8JAAr+Cf8J/gn8CQEKAgoACgEKAAr/CeUJAQr/CeUJ/wn7CecJAwoBCucJAQrlCQMKBAoCCgMKAgoBCgUKBgoECgUKBAoDCuoJBQoDCuoJAwrnCe0JBwoFCu0JBQrqCQcKCAoGCgcKBgoFCu0J7wkJCu0JCQoHCgkKCgoICgkKCAoHCvEJCwoJCvEJCQrvCQsKDAoKCgsKCgoJCvMJDQoLCvMJCwrxCQ0KDgoMCg0KDAoLCv0JDwoOCv0JDgoNCvMJ9wn9CfMJ/QkNCgwKDgoPCgwKDwoQChAKDwr+CRAK/gkRCggKCgoMCggKDAoQCggKEAoRCggKEQoGCgYKEQoCCgYKAgoEChEK/gkAChEKAAoCCvkJEgoTCvkJEwriCfYJFQoSCvYJEgr5CRIKFAolChIKJQoTChUKFgoUChUKFAoSCvYJ9AkXCvYJFwoVChcKGAoWChcKFgoVChkKGgoYChkKGAoXCtEJGQoXCtEJFwr0CdMJGwoZCtMJGQrRCRsKHAoaChsKGgoZCtYJHQobCtYJGwrTCR0KHgocCh0KHAobCtgJHwodCtgJHQrWCR8KIAoeCh8KHgodCiEKIgogCiEKIAofCtgJ3AkhCtgJIQofCt8JIwohCt8JIQrcCSMKJAoiCiMKIgohCuIJEwojCuIJIwrfCRMKJQokChMKJAojCiQKJgonCiQKJwoiCiUKKQomCiUKJgokCiYKKAo5CiYKOQonCikKKgooCikKKAomCisKLAoqCisKKgopChQKKwopChQKKQolChYKLQorChYKKwoUCi0KLgosCi0KLAorChYKGAovChYKLwotCi8KMAouCi8KLgotCjEKMgowCjEKMAovChoKMQovChoKLwoYChwKMwoxChwKMQoaCjMKNAoyCjMKMgoxCh4KNQozCh4KMwocCjUKNgo0CjUKNAozCiAKNwo1CiAKNQoeCjcKOAo2CjcKNgo1CiIKJwo3CiIKNwogCicKOQo4CicKOAo3CjkKKAo2CjkKNgo4CigKKgo0CigKNAo2CioKLAoyCioKMgo0CiwKLgowCiwKMAoyCsMJzgnsCcMJ7Ak7Cj0KOwrsCT0K7AnpCUEKvwk6CkEKOgo8CkAKPQrpCUAK6QnhCUIKQQo8CkIKPAo+CrkJvAlBCrkJQQpCCkQKQwo/CkQKPwpGCrUJuglDCrUJQwpECrIJtQlECrIJRApFCkUKRApGCkUKRgpICkkKRwreCUkK3gnbCUcKQArhCUcK4QneCUwKRQpICkwKSApKCkkK2wnZCUkK2QlLCtkJ1QlOCtkJTgpLCkoKTQpPCkoKTwpMCk0KygnGCU0KxglPCtUJzQnLCdUJywlOCkwKTwqsCUwKrAmwCU8KxgmqCU8KqgmsCbIJRQpMCrIJTAqwCbMJUgpQCrMJUAq2CcQItglQCsQIUApRClMKUQpQClMKUApSClQKVQpTClQKUwpSCq8JVApSCq8JUgqzCa8JrQlWCq8JVgpUClUKVApWClUKVgpXCqMJVwpWCqMJVgqtCaMJtAhYCqMJWApXClUKVwpYClUKWApZCrgIWQpYCrgIWAq0CFMKVQpZClMKWQpaClkKuAi6CFkKughaCroIvghbCroIWwpaClMKWgpbClMKWwpRCsQIUQpbCsQIWwq+CF0KXApQBl0KUAZOBnsIXApdCnsIXQpeCl4KXQpfCl4KXwpgCl8KXQpOBl8KTgZMBmAKXwphCmAKYQpkCkoGYQpfCkoGXwpMBmMKYQpKBmMKSgZIBmcKZAphCmcKYQpjCmoKZQpkCmoKZApnCnMKYApkCnMKZAplCmgKZgpiCmgKYgpyCmsKaQpmCmsKZgpoCooFjAVlCooFZQpqCoYFiQVpCoYFaQprCmsKaApuCmsKbgpsCoQFhgVrCoQFawpsCmwKbgpwCmwKcAptCoQFbAptCoQFbQqCBWgKcgpvCmgKbwpuCm4KbwpxCm4KcQpwCisAbQpwCisAcApxCm8KQgZABm8KQAZxCisAcQpABm8KcgpEBm8KRAZCBnIKYgpHBnIKRwZEBisAggVtCmUKjAWOBWUKjgVzCnMKdApeCnMKXgpgCnQKcwqOBXQKjgWQBZQFlgV4CJQFeAh0CpAFkgWUBZAFlAV0CnQKeAh7CHQKewheCpYFmAVyCJYFcgh4CHcKdQr+B3cK/gemBXUKeAr4B3UK+Af+B9sH3wd1CtsHdQp3Ct8H4wd4Ct8HeAp1CuQH6Ad6CuQHegp5CnkKegr1B3kK9Qf5B3oK7wfxB3oK8Qf1B+gH6wfvB+gH7wd6CnsK1gfaB3sK2gd2CqgFewp2CqgFdgqlBaoF0Ad7CqoFewqoBdAH1AfWB9AH1gd7CnwKpQfQBXwK0AXSBX4KowelB34KpQd8Cn0KfArSBX0K0gXUBX8Kfgp8Cn8KfAp9CoAKfgp/CoAKfwqBCp8Howd+Cp8HfgqACgIGgAqBCgIGgQoABgQGnweACgQGgAoCBgAGgQqCCgAGggr9BYEKfwqFCoEKhQqCCv4FgwqECv4FhAr6BYMKhgqHCoMKhwqECocKhgqJCocKiQqKCoUKfwp9CoUKfQqICooKiQrYBYoK2AXaBYgKfQrUBYgK1AXXBdoF3AWLCtoFiwqKCooKiwqMCooKjAqHCosKjQqOCosKjgqMCtwF3gWNCtwFjQqLCo0KjwqQCo0KkAqOCt4F4AWPCt4FjwqNCo8KkQqSCo8KkgqQCuAF4gWRCuAFkQqPCpEKkwqUCpEKlAqSCuIF5AWTCuIFkwqRCpMK6AXqBZMK6gWUCuQF5gXoBeQF6AWTCpQK6gXsBZQK7AWVCpIKlAqVCpIKlQqWCpYKlQrwBZYK8AXyBZUK7AXuBZUK7gXwBZcKlgryBZcK8gX0BZAKkgqWCpAKlgqXCpgKlwr0BZgK9AX2BY4KkAqXCo4KlwqYCpkKmAr2BZkK9gX4BYwKjgqYCowKmAqZCoQKmQr4BYQK+AX6BYcKjAqZCocKmQqECpoKmwrDCpoKwwqcCp0KmgqcCp0KnAqgCp8KnQqgCp8KoAqiCqIKoAqjCqIKowqlCqAKnAqmCqAKpgqjCqUKowqnCqUKpwqpCqYKqgqnCqYKpwqjCqwKqQqnCqwKpwqqCqwKqgqtCqwKrQqwCqYKrgqtCqYKrQqqCrIKsAqtCrIKrQquCrEKtAqzCrEKswqvCqsKrwqzCqsKswq1CrYKtQqzCrYKswq0CqsKtQq3CqsKtwqoCrYKuAq3CrYKtwq1CqQKqAq3CqQKtwq4CroKuQq4CroKuAq2CrkKoQqkCrkKpAq4CrwKuwq5CrwKuQq6CrsKngqhCrsKoQq5Cr0KvAq6Cr0KugrACr4KvQrACr4KwArBCsEKwAq0CsEKtAqxCsAKugq2CsAKtgq0CsMKwgqyCsMKsgquCpsKvwrCCpsKwgrDCpwKwwquCpwKrgqmCsQKxwrtCsQK7QrGCskKywrICskKyArFCsoKzArLCsoKywrJCswKzgrNCswKzQrLCssKzQrPCssKzwrICs4K0grRCs4K0QrNCs8KzQrRCs8K0QrTCtUK0wrRCtUK0QrSCtYK2QrXCtYK1wrUCtAK1ArXCtAK1wrYCtoK2ArXCtoK1wrZCtoK2QrbCtoK2wrcCtYK3grbCtYK2wrZCt8K3ArbCt8K2wreCtUK0grhCtUK4QrdCuAK3QrhCuAK4QriCs4K4grhCs4K4QrSCuUK4AriCuUK4grjCuMK4grOCuMKzgrMCugK5QrjCugK4wrmCuYK4wrMCuYKzArKCukK6wrkCukK5ArnCuoK7ArrCuoK6wrpCuwK2grcCuwK3ArrCusK3ArfCusK3wrkCu0K2AraCu0K2grsCsYK7QrsCsYK7ArqCscK0ArYCscK2ArtCu4K8QoXC+4KFwvwCvMK9QryCvMK8grvCvQK9gr1CvQK9QrzCvYK+Ar3CvYK9wr1CvUK9wr6CvUK+gryCvgK/Ar7CvgK+wr3CvoK9wr7CvoK+wr+CgAL/gr7CgAL+wr8Cv8KAwsBC/8KAQv9CvkK/QoBC/kKAQsCCwQLAgsBCwQLAQsDCwQLAwsFCwQLBQsGC/8KBwsFC/8KBQsDCwkLBgsFCwkLBQsHCwAL/AoLCwALCwsICwoLCAsLCwoLCwsMC/gKDAsLC/gKCwv8Cg8LCgsMCw8LDAsNCw0LDAv4Cg0L+Ar2ChILDwsNCxILDQsQCxALDQv2ChAL9gr0ChMLFQsOCxMLDgsRCxQLFgsVCxQLFQsTCxYLBAsGCxYLBgsVCxULBgsJCxULCQsOCxcLAgsECxcLBAsWC/AKFwsWC/AKFgsUC/EK+QoCC/EKAgsXCxgLGgtBCxgLQQsZCxsLHgsaCxsLGgsYCxwLHwseCxwLHgsbCx8LIgshCx8LIQseCx4LIQskCx4LJAsaCyILJgslCyILJQshCyQLIQslCyQLJQsoCykLKAslCykLJQsmCykLLQsrCykLKwsoCyQLKAsrCyQLKwssCy8LLAsrCy8LKwstCzALLgsxCzALMQsyCyoLMwsxCyoLMQsuCzQLMgsxCzQLMQszCyoLJws1CyoLNQszCzQLMws1CzQLNQs2CyMLNgs1CyMLNQsnCzgLNAs2CzgLNgs3CzcLNgsjCzcLIwsgCzoLOAs3CzoLNws5CzkLNwsgCzkLIAsdCzsLPgs4CzsLOAs6Cz0LQAs+Cz0LPgs7C0ALMAsyC0ALMgs+Cz4LMgs0Cz4LNAs4C0ELLAsvC0ELLws/CxkLQQs/CxkLPws8CxoLJAssCxoLLAtBC0MLRgtrC0MLawtEC0cLSQtFC0cLRQtCC0gLSgtJC0gLSQtHC0oLTAtLC0oLSwtJC0kLSwtNC0kLTQtFC0wLUAtPC0wLTwtLC00LSwtPC00LTwtRC1MLUQtPC1MLTwtQC1QLVwtVC1QLVQtSC04LUgtVC04LVQtWC1gLVgtVC1gLVQtXC1gLVwtZC1gLWQtaC1QLXAtZC1QLWQtXC14LWgtZC14LWQtcC1MLUAtfC1MLXwtbC10LWwtfC10LXwtgC0wLYAtfC0wLXwtQC2ILXQtgC2ILYAthC2ELYAtMC2ELTAtKC2ULYgthC2ULYQtkC2QLYQtKC2QLSgtIC2cLaQtjC2cLYwtmC2gLagtpC2gLaQtnC2oLWAtaC2oLWgtpC2kLWgteC2kLXgtjC2sLVgtYC2sLWAtqC0QLawtqC0QLagtoC0YLTgtWC0YLVgtrC20LcAuVC20LlQtuC3ELcwtvC3ELbwtsC3ILdAtzC3ILcwtxC3QLdgt1C3QLdQtzC3MLdQt3C3MLdwtvC3YLegt5C3YLeQt1C3cLdQt5C3cLeQt7C30Lewt5C30LeQt6C34LgQt/C34Lfwt8C3gLfAt/C3gLfwuAC4ILgAt/C4ILfwuBC4ILgQuDC4ILgwuEC34LhguDC34LgwuBC4gLhAuDC4gLgwuGC30LeguJC30LiQuFC4cLhQuJC4cLiQuKC3YLiguJC3YLiQt6C4wLhwuKC4wLiguLC4sLigt2C4sLdgt0C48LjAuLC48LiwuOC44Liwt0C44LdAtyC5ELkwuNC5ELjQuQC5ILlAuTC5ILkwuRC5QLgguEC5QLhAuTC5MLhAuIC5MLiAuNC5ULgAuCC5ULgguUC24LlQuUC24LlAuSC3ALeAuAC3ALgAuVC5cLmgu/C5cLvwuYC5sLnQuZC5sLmQuWC5wLngudC5wLnQubC54LoAufC54LnwudC50LnwuhC50LoQuZC6ALpAujC6ALowufC6ELnwujC6ELowumC6gLpgujC6gLowukC6cLqwupC6cLqQulC6ILpQupC6ILqQuqC6wLqgupC6wLqQurC6wLqwutC6wLrQuuC6cLrwutC6cLrQurC7ELrgutC7ELrQuvC6gLpAuzC6gLswuwC7ILsAuzC7ILswu0C6ALtAuzC6ALswukC7YLsgu0C7YLtAu1C7ULtAugC7ULoAueC7kLtgu1C7kLtQu4C7gLtQueC7gLngucC7sLvQu3C7sLtwu6C7wLvgu9C7wLvQu7C74LrAuuC74Lrgu9C70LrguxC70LsQu3C78LqgusC78LrAu+C5gLvwu+C5gLvgu8C5oLoguqC5oLqgu/C8ELwgvpC8EL6QvEC8ULwAvDC8ULwwvHC8YLxQvHC8YLxwvIC8gLxwvJC8gLyQvKC8cLwwvLC8cLywvJC8oLyQvNC8oLzQvOC8sLzwvNC8sLzQvJC9ELzgvNC9ELzQvPC9IL0AvTC9IL0wvVC8wL1AvTC8wL0wvQC9YL1QvTC9YL0wvUC9YL2AvXC9YL1wvVC9IL1QvXC9IL1wvaC9wL2gvXC9wL1wvYC9EL2QvdC9EL3QvOC9sL3gvdC9sL3QvZC8oLzgvdC8oL3QveC+AL3wveC+AL3gvbC98LyAvKC98LygveC+ML4gvfC+ML3wvgC+ILxgvIC+ILyAvfC+UL5AvhC+UL4QvnC+YL5QvnC+YL5wvoC+gL5wvYC+gL2AvWC+cL4QvcC+cL3AvYC+kL6AvWC+kL1gvUC8IL5gvoC8IL6AvpC8QL6QvUC8QL1AvMC+oL6wsTDOoLEwzsC+0L6gvsC+0L7AvwC+8L7QvwC+8L8AvyC/IL8AvzC/IL8wv1C/AL7Av2C/AL9gvzC/UL8wv3C/UL9wv5C/YL+gv3C/YL9wvzC/wL+Qv3C/wL9wv6C/wL+gv9C/wL/QsADPYL/gv9C/YL/Qv6CwIMAAz9CwIM/Qv+CwEMBAwDDAEMAwz/C/sL/wsDDPsLAwwFDAYMBQwDDAYMAwwEDPsLBQwHDPsLBwz4CwYMCAwHDAYMBwwFDPQL+AsHDPQLBwwIDAoMCQwIDAoMCAwGDAkM8Qv0CwkM9AsIDAwMCwwJDAwMCQwKDAsM7gvxCwsM8QsJDA0MDAwKDA0MCgwQDA4MDQwQDA4MEAwRDBEMEAwEDBEMBAwBDBAMCgwGDBAMBgwEDBMMEgwCDBMMAgz+C+sLDwwSDOsLEgwTDOwLEwz+C+wL/gv2CxQMGQyPDBQMjwwXDBgMIAwbDBgMGwwVDBwMHwwaDBwMGgwWDB4MLAwfDB4MHwwcDCAMIgwdDCAMHQwbDCEMIwwiDCEMIgwgDHAMIQwgDHAMIAwYDCMMJQwkDCMMJAwiDCIMJAwnDCIMJwwdDCUMggwmDCUMJgwkDCQMJgwpDCQMKQwnDCgMKgwsDCgMLAweDCkMLQwqDCkMKgwoDCoMKwyQDCoMkAwsDC0MLgwrDC0MKwwqDC8MMQwuDC8MLgwtDCYMLwwtDCYMLQwpDDAMMgwxDDAMMQwvDIIMMAwvDIIMLwwmDDIMNAwzDDIMMwwxDDEMMww2DDEMNgwuDDQMjgw1DDQMNQwzDDMMNQw3DDMMNww2DDYMNww7DDYMOww4DC4MNgw4DC4MOAwrDCsMOAw5DCsMOQyQDDgMOww9DDgMPQw5DDUMPgw6DDUMOgw3DD4MQAw8DD4MPAw6DD8MQQxADD8MQAw+DI4MPww+DI4MPgw1DEEMQwxCDEEMQgxADEAMQgxGDEAMRgw8DEMMVwxFDEMMRQxCDEIMRQxJDEIMSQxGDDkMPQxHDDkMRwxLDEsMRwxKDEsMSgxODJAMOQxLDJAMSwxMDEwMSwxODEwMTgxQDE8MTQxRDE8MUQxSDE0MSAxEDE0MRAxRDFIMUQxTDFIMUwxUDFEMRAxWDFEMVgxTDFQMUwxVDFQMVQxoDFMMVgxYDFMMWAxVDFwMWQxXDFwMVwxDDFUMWAxaDFUMWgxlDF8MWwxZDF8MWQxcDF0MXAxDDF0MQwxBDGEMXwxcDGEMXAxdDGUMWgxeDGUMXgxiDGIMXgxgDGIMYAxkDGMMYgxkDGMMZAx5DGYMZQxiDGYMYgxjDGgMVQxlDGgMZQxmDGkMaAxmDGkMZgxnDGcMZgxjDGcMYwx3DGoMVAxoDGoMaAxpDG8MagxpDG8MaQxrDGsMaQxnDGsMZwxtDG4MdAxxDG4McQxsDGwMcQwhDGwMIQxwDHEMcgwjDHEMIwwhDHQMdgxyDHQMcgxxDHMMdwx4DHMMeAx1DG0MZwx3DG0MdwxzDHcMYwx5DHcMeQx4DHgMeQx7DHgMewx6DHUMeAx6DHUMegx9DHoMewyGDHoMhgx8DH0Megx8DH0MfAx/DH4MfwyBDH4MgQyADHYMfgyADHYMgAxyDHIMgAwlDHIMJQwjDIAMgQyCDIAMggwlDIEMgwwwDIEMMAyCDH8MfAyDDH8MgwyBDIMMhAwyDIMMMgwwDHwMhgyEDHwMhAyDDIQMhQw0DIQMNAwyDIYMhwyFDIYMhQyEDHsMiQyHDHsMhwyGDIkMigyIDIkMiAyHDIcMiAyNDIcMjQyFDHkMZAyJDHkMiQx7DGQMYAyKDGQMigyJDIsMYQxdDIsMXQyMDIgMiwyMDIgMjAyNDIwMXQxBDIwMQQw/DI0MjAw/DI0MPwyODIUMjQyODIUMjgw0DBcMjwxqDBcMagxvDI8MUgxUDI8MVAxqDBkMTwxSDBkMUgyPDB8MTAxQDB8MUAwaDCwMkAxMDCwMTAwfDJEMkwzGDJEMxgySDJIMlwyUDJIMlAyRDJQMlgyTDJQMkwyRDJUMogyWDJUMlgyUDJcMmQyVDJcMlQyUDJgMmgyZDJgMmQyXDMUMmAyXDMUMlwySDJoMnAybDJoMmwyZDJkMmwyeDJkMngyVDJwMyQydDJwMnQybDJsMnQyfDJsMnwyeDJ4MoAyiDJ4MogyVDJ8MowygDJ8MoAyeDKAMoQzHDKAMxwyiDKMMpAyhDKMMoQygDKUMpwykDKUMpAyjDJ0MpQyjDJ0MowyfDKYMqAynDKYMpwylDMkMpgylDMkMpQydDKgMqgypDKgMqQynDKcMqQysDKcMrAykDKoMyAyrDKoMqwypDKkMqwytDKkMrQysDKwMrQywDKwMsAyuDKQMrAyuDKQMrgyhDKEMrgyvDKEMrwzHDK4MsAyxDK4MsQyvDKsMsgywDKsMsAytDLIMtAyxDLIMsQywDLMMtQy0DLMMtAyyDMgMswyyDMgMsgyrDLUMtwy2DLUMtgy0DLQMtgy5DLQMuQyxDLcMwwy4DLcMuAy2DLYMuAy6DLYMugy5DK8MsQy5DK8MuQy7DLsMuQy6DLsMugy9DMcMrwy7DMcMuwy8DLwMuwy9DLwMvQy+DL4MvQy/DL4MvwzADL0Mugy4DL0MuAy/DMAMvwzBDMAMwQzCDL8MuAzDDL8MwwzBDMYMwAzCDMYMwgzEDJIMxgzEDJIMxAzFDJMMvgzADJMMwAzGDJYMvAy+DJYMvgyTDKIMxwy8DKIMvAyWDMoMywz/DMoM/wzMDMsMygzNDMsMzQzQDM0MygzMDM0MzAzPDM4MzQzPDM4MzwzbDNAMzQzODNAMzgzSDNEM0AzSDNEM0gzTDP4MywzQDP4M0AzRDNMM0gzUDNMM1AzVDNIMzgzXDNIM1wzUDNUM1AzWDNUM1gwCDdQM1wzYDNQM2AzWDNcMzgzbDNcM2wzZDNgM1wzZDNgM2QzcDNkM2wwADdkMAA3aDNwM2QzaDNwM2gzdDN4M3AzdDN4M3QzgDNYM2AzcDNYM3AzeDN8M3gzgDN8M4AzhDAIN1gzeDAIN3gzfDOEM4AziDOEM4gzjDOAM3QzlDOAM5QziDOMM4gzkDOMM5AwBDeIM5QzmDOIM5gzkDOUM5wzpDOUM6QzmDN0M2gznDN0M5wzlDNoMAA3oDNoM6AznDOcM6AzqDOcM6gzpDOQM5gzpDOQM6QzrDOsM6QzqDOsM6gztDOwM6wztDOwM7QzuDAEN5AzrDAEN6wzsDO4M7QzvDO4M7wzwDO0M6gzyDO0M8gzvDPAM7wzxDPAM8Qz8DO8M8gzzDO8M8wzxDOgM9AzyDOgM8gzqDPQM9gzzDPQM8wzyDAAN9Qz0DAAN9AzoDPUM9wz2DPUM9gz0DPcM+Qz4DPcM+Az2DPYM+AzxDPYM8QzzDPkM+wz6DPkM+gz4DPgM+gz8DPgM/AzxDP8M/Qz7DP8M+wz5DMsM/gz9DMsM/Qz/DMwM/wz5DMwM+Qz3DM8MzAz3DM8M9wz1DNsMzwz1DNsM9QwADQMNCA1+DQMNfg0GDQcNDw0KDQcNCg0EDQsNDg0JDQsNCQ0FDQ0NGw0ODQ0NDg0LDQ8NEQ0MDQ8NDA0KDRANEg0RDRANEQ0PDV8NEA0PDV8NDw0HDRINFA0TDRINEw0RDRENEw0WDRENFg0MDRQNcQ0VDRQNFQ0TDRMNFQ0YDRMNGA0WDRcNGQ0bDRcNGw0NDRgNHA0ZDRgNGQ0XDRkNGg1/DRkNfw0bDRwNHQ0aDRwNGg0ZDR4NIA0dDR4NHQ0cDRUNHg0cDRUNHA0YDR8NIQ0gDR8NIA0eDXENHw0eDXENHg0VDSENIw0iDSENIg0gDSANIg0lDSANJQ0dDSMNfQ0kDSMNJA0iDSINJA0mDSINJg0lDSUNJg0qDSUNKg0nDR0NJQ0nDR0NJw0aDRoNJw0oDRoNKA1/DScNKg0sDScNLA0oDSQNLQ0pDSQNKQ0mDS0NLw0rDS0NKw0pDS4NMA0vDS4NLw0tDX0NLg0tDX0NLQ0kDTANMg0xDTANMQ0vDS8NMQ01DS8NNQ0rDTINRg00DTINNA0xDTENNA04DTENOA01DSgNLA02DSgNNg06DToNNg05DToNOQ09DX8NKA06DX8NOg07DTsNOg09DTsNPQ0/DT4NPA1ADT4NQA1BDTwNNw0zDTwNMw1ADUENQA1CDUENQg1DDUANMw1FDUANRQ1CDUMNQg1EDUMNRA1XDUINRQ1HDUINRw1EDUsNSA1GDUsNRg0yDUQNRw1JDUQNSQ1UDU4NSg1IDU4NSA1LDUwNSw0yDUwNMg0wDVANTg1LDVANSw1MDVQNSQ1NDVQNTQ1RDVENTQ1PDVENTw1TDVINUQ1TDVINUw1oDVUNVA1RDVUNUQ1SDVcNRA1UDVcNVA1VDVgNVw1VDVgNVQ1WDVYNVQ1SDVYNUg1mDVkNQw1XDVkNVw1YDV4NWQ1YDV4NWA1aDVoNWA1WDVoNVg1cDV0NYw1gDV0NYA1bDVsNYA0QDVsNEA1fDWANYQ0SDWANEg0QDWMNZQ1hDWMNYQ1gDWINZg1nDWINZw1kDVwNVg1mDVwNZg1iDWYNUg1oDWYNaA1nDWcNaA1qDWcNag1pDWQNZw1pDWQNaQ1sDWkNag11DWkNdQ1rDWwNaQ1rDWwNaw1uDW0Nbg1wDW0NcA1vDWUNbQ1vDWUNbw1hDWENbw0UDWENFA0SDW8NcA1xDW8NcQ0UDXANcg0fDXANHw1xDW4Naw1yDW4Ncg1wDXINcw0hDXINIQ0fDWsNdQ1zDWsNcw1yDXMNdA0jDXMNIw0hDXUNdg10DXUNdA1zDWoNeA12DWoNdg11DXgNeQ13DXgNdw12DXYNdw18DXYNfA10DWgNUw14DWgNeA1qDVMNTw15DVMNeQ14DXoNUA1MDXoNTA17DXcNeg17DXcNew18DXsNTA0wDXsNMA0uDXwNew0uDXwNLg19DXQNfA19DXQNfQ0jDQYNfg1ZDQYNWQ1eDX4NQQ1DDX4NQw1ZDQgNPg1BDQgNQQ1+DQ4NOw0/DQ4NPw0JDRsNfw07DRsNOw0ODWgAawCMDWgAjA2NDQoCjA2LDQoCiw0HAm8AdACJDW8AiQ2KDQQCiQ2IDQQCiA0CAgAChw2IDQACiA13AP0Bhg2HDf0Bhw0AAvwBhg2FDfwBhQ35AfkBhQ2DDfkBgw3zAfQBhA2CDfQBgg3wAfABgg2BDfABgQ3uAekBgA2BDekBgQ3qAWgAjQ2ADWgAgA3pAQ4Gmw2aDQ4Gmg0MBpAGjQaZDZAGmQ2aDQkGmA2XDQkGlw0GBooGiAaWDYoGlg2XDYYGBAaWDYYGlg2VDYMGhgaVDYMGlQ2UDYIGfwaTDYIGkw2UDX8GeQaRDX8GkQ2TDXoGdgaQDXoGkA2SDXYGdAaPDXYGjw2QDW8GcAaPDW8Gjw2ODQ4GbwaODQ4Gjg2bDauqKj2rqqo9AAAAPquqKj5VVVU+AACAPlVVlT6rqqo+AADAPlVV1T6rquo+AAAAP6uqCj9VVRU/AAAgP6uqKj9VVTU/AABAP6uqSj9VVVU/AABgP6uqaj9VVXU/AACAP1VVhT+rqoo/AACQP1VVlT+rqpo/AACgP1VVpT+rqqo/AACwP1VVtT+rqro/AADAP1VVxT+rqso/AADQP1VV1T+rqto/AADgP1VV5T+rquo/AADwP1VV9T+rqvo/AAAAQKuqAkBVVQVAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAP0zvrjMAAAAAAAAAAAAAgD9M764zAAAAAAAAAAAAAIA/TO+uMwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAi+iI+AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPxUAgD8DAIA/HQCAPwTGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMATGADLfCqQ9sFQMMLJe8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P7Je8L2I33S572qvuxo6fj+yXvC9iN90ue9qr7saOn4/sl7wvYjfdLnvaq+7Gjp+P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P///fz/1/38/9/9/P8QOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUscQOsrGc8FM8s4QUsaUgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P6UgXr1UW7c5i4Exu1Gffz+lIF69VFu3OYuBMbtRn38/pSBevVRbtzmLgTG7UZ9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P/7/fz///38///9/P6eZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsaeZErL3III9CjiPsY4bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/b/WHvCFvZb3fxFo/jhsEP2/1h7whb2W938RaP44bBD9v9Ye8IW9lvd/EWj+OGwQ/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AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP/7/fz8AAIA/AQCAP54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WL54O+LHYAsQ88W6WLzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPzoSDLSK16OpiSyntAAAgD86Egy0itejqYksp7QAAIA/OhIMtIrXo6mJLKe0AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9AAAAAAAAAAC+ooc9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cYN/P/9M8jBS438z7EzyvFTjfz+LHQIw7P1/M4cdArzv/X8//v//D/z/fzMAAAAcAACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAP/3/fz/+/38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAP///fz///38/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwEAgD///38/AACAP///fz///38/AACAP///fz///38/AACAPwAAgD///38/AACAP///fz/+/38/AACAPwAAgD8AAIA/AACAPwEAgD///38/AACAPwEAgD8AAIA/AACAPwAAgD///38/AACAP/7/fz///38/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAP///fz///38/AACAPwEAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38/AACAP///fz///38/AACAPwAAgD///38/AACAPwAAgD/+/38/AACAPwAAgD/9/38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAP/3/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD///38/AACAPwEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKAEAgJw8Ou09AQAAKKj//zBCOu09AAAApwDAFag/Ou09AAAUqACA3KdKOu09AACMqAAAgqdIOu09AACIqP//vzJBOu09AACgJwEAADJCOu09AAAAp////7JAOu09//9/p///v7JAOu09//8/GwEAgDI/Ou09AQAgp/3/f7JBOu09AABgp///37I/Ou09/v+/pgYAgDE+Ou09AABAJwAAJCdCOu09AAAAp/z//7FCOu09AABAp/7//7E+Ou09/v9/GgAAwLJDOu09AgCAJgEAgLJBOu09AAAAKACApKdAOu09AABgKN//fzFAOu09AADAp70AALBBOu09AADYpsT/fzE4Ou09AAAgJ/f//zI8Ou09AAAQKOz/fzJBOu09AAAAKAoAgLJCOu09////pvv/PzM+Ou09//+fJ9X//zE+Ou09AADAp9b//zE+Ou09AADAJwAApKhBOu09AAAQKAoAoLJAOu09AADgpwUAMLM9Ou09/f//pq//fzFEOu09AACAJgoAwLJAOu09AADAp+v/fzJAOu09AAAgKBUAALI8Ou09AAAgKNf//zFAOu09//9/Jtv//zFDOu09AAAQKOD//zE6Ou09AABAJ8j/fzFCOu09AAAEKABIRKhCOu09AABiqAEAgJw8Ou09AQAAKIAAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/gAAAgAAAgCcAAICQAACAP4AAAIAAAIAnAACAkAAAgD+AAACAAACAJwAAgJAAAIA/AACAmAAAuCcAAICwAACAPwAA4KcAAIAnAAAAMgAAgD8AAICnAACAJwAAgA8AAIA/AABApwAAoCcAAICyAACAPwAAACcAAEAnAAAAjwAAgD8AAIAmAACIJwAAgDIAAIA/AACApgAAkCcAAACyAACAPwAAgCYAADAnAAAAMgAAgD8AAECmAAB4JwAAQA4AAIA/AAAAAAAAmCcAAAAAAACAPwAAgKUAAIwnAACADQAAgD8AAIAmAACgJ////7EAAIA/AAAAAAAAcCcAAAAAAACAPwAAAAAAAKAnAAAAAAAAgD8AAIAmAACQJwAAgI4AAIA/AAAAAAAAkCcAAAAAAACAPwIAgCYAANAnAgCAjgAAgD8BACAoAQDgJwEAALIAAIA/AAAAJwAAoCcAAACPAACAPwAA/KcAAAgnAAD8DwAAgD8AAGAnAAAgKAAAYI8AAIA///9/JgAAgCcAAICyAACAPwEAgCcAAIAnAQAAsgAAgD8AAKCnAAAAJwAAoA8AAIA/AACApgAAoKcAAICyAACAPwAAQKcAAACnAAAAsgAAgD8AAAAAAAAkKAAAAAAAAIA/AAAApgAAWCcAAAAOAACAPwAAAKYAAIQnAAAADgAAgD8AAIAZAABIKAAAgDEAAIA/AAAAmgAAgKcAAACyAACAP///f6YAAMCmAAAAMgAAgD8AAICnAACAJwAAgA8AAIA/AACAJgAAoCcAAICOAACAP/z/fyb8/3+n/P9/jgAAgD8AAICmAQDAJ///fw4AAIA/AACApgAAgCYAAIAOAACAPwAAAKYAAACmAAAADgAAgD8AAHinAAC8JwAAgDAAAIA/gAAAgAAAgCcAAICQAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP///fz///38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwEAgD8BAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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t/8/rm71ni3e64k8tf5vrvB1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8HVlMpJhK7F0IgAyAACAP/B1ZTKSYSuxdCIAMgAAgD/wdWUykmErsXQiADIAAIA/8LVjMmNiJbGuPIAyAACAP/D1ZDKCYiWxAADsLQAAgD/wdWgyUmIlsZw3ADIAAIA/8MVjMtJhJrEA2H6xAACAP/BiYDKy4Sex0NGAMAAAgD/we2UyMmInscg5ATEAAIA/8HVjMjJiJbGwo/+xAACAP/BVYzKSYiOxfFP/sQAAgD/wNWMy8mElsXhw/7EAAIA/8DVkMrJhJ7EAEHgsAACAP/D1YTLSYSWxAG6OLQAAgD/w9WMy8mAtsb66/zEAAIA/8BVlMlJiIbFZSAAyAACAP/DlYTJSYiexALCkLQAAgD/wrWQysmEnsQCwgiwAAIA/sJxkMtJBJ7EACEwtAACAP/ARZTIy4iWxARgDLQAAgD/w1WMyUmEmsebxP7IAAIA/8NVhMvJhJ7FIn/+xAACAP/D1ZTIyYiWxANTMLQAAgD/w9WEyVGEtsRLwvzIAAIA/8HVlMgRiLbFkEMAyAACAP/B1ZDLDYC2xA4d/MgAAgD/w9WAylGElsRICADMAAIA/8PVhMsNhJbHvC4AyAACAP/A1ZDKxYiexMod/sgAAgD/wlWQykmArsVAa/zEAAIA/8HVkMnNiKbE/LIAyAACAP/AVZjLiYSWxQKd/sQAAgD/whWMy0mEnsQAwFiwAAIA/8LViMoJhKbFUh38xAACAP/B1YTJiYiWxAJrALQAAgD/wtWEygmIlsQC8yy0AAIA/8HViMgRhLbE04L8yAACAP/B1YjKEYjGxli/AMgAAgD/wdWUygmEpscAWADIAAIA/8PViMlNjKbEza4AyAACAP/B1ZDLkYSmxiBvAMgAAgD/w9WMys2EpsY/8fzIAAIA/8HVlMpJhK7F0IgAyAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP/7/fz///38///9/P///fz8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AQCAPwAAgD8AAIA///9/PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwEAgD8BAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38///9/PwAAgD///38/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AQCAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA///9/PwAAgD8AAIA/AACAPwAAgD///38///9/PwAAgD8AAIA/AACAP///fz///38///9/PwAAgD///38///9/PwAAgD8AAIA///9/PwEAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD///38///9/P///fz8AAIA/AACAPwAAgD///38/AACAPwAAgD8AAIA/AACAP///fz///38/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP/RhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPRhD71v0JE95rE2sPNhD7110JE9C7I2sPZhD7100JE95rE2sPVhD71v0JE9ybE2sPVhD71w0JE9TbE2sPJhD71w0JE987E2sPJhD71v0JE9A7I2sO9hD71y0JE9a7I2sOthD71y0JE9u7E2sPdhD71q0JE9TLE2sPthD71t0JE9/7E2sPxhD71v0JE9DrI2sPNhD71z0JE9S7I2sPFhD71y0JE9GrI2sPVhD71s0JE90bE2sPFhD71y0JE96LE2sO1hD71q0JE9MrI2sPRhD7110JE927E2sPVhD71x0JE9GLI2sPdhD71w0JE9ArI2sPVhD71y0JE9KrI2sPRhD7110JE9QbI2sPVhD7100JE9KLI2sPJhD7110JE9b7I2sPNhD71u0JE9Y7E2sPNhD71w0JE94bE2sPphD7100JE9RrI2sPthD71y0JE90LE2sPthD7100JE9ybE2sPZhD71y0JE9FbI2sPphD71w0JE9R7I2sOthD71u0JE9ZLE2sABiD7120JE9WrI2sABiD71v0JE9crI2sPlhD71u0JE9n7E2sPZhD71s0JE9rrE2sPdhD71v0JE9zLE2sPVhD71w0JE9erE2sPVhD71u0JE947E2sPZhD71o0JE9TrE2sPRhD71v0JE95rE2sHtyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2pO0jLvmig/lqJAP3pyQrNoTtIy75ooP5aiQD98ckKzbE7SMu+aKD+WokA/e3JCs2pO0jLvmig/lqJAP3xyQrNqTtIy75ooP5aiQD97ckKza07SMu6aKD+XokA/e3JCs2pO0jLvmig/lqJAP3pyQrNoTtIy7pooP5eiQD97ckKzaE7SMu+aKD+WokA/e3JCs2xO0jLvmig/lqJAP3pyQrNoTtIy75ooP5aiQD97ckKzaE7SMu6aKD+XokA/e3JCs2ZO0jLvmig/lqJAP3pyQrNsTtIy75ooP5aiQD96ckKzaU7SMu+aKD+WokA/fHJCs21O0jLvmig/lqJAP3pyQrNmTtIy75ooP5aiQD98ckKzaU7SMu+aKD+WokA/fHJCs2xO0jLvmig/lqJAP3xyQrNsTtIy75ooP5aiQD97ckKzak7SMu+aKD+WokA/fHJCs2xO0jLvmig/lqJAP3xyQrNsTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/fHJCs2lO0jLvmig/lqJAP3tyQrNqTtIy75ooP5aiQD96ckKzbU7SMu+aKD+WokA/enJCs2lO0jLvmig/lqJAP3tyQrNpTtIy75ooP5aiQD96ckKzZ07SMu6aKD+XokA/e3JCs2pO0jLvmig/lqJAP3pyQrNqTtIy75ooP5aiQD98ckKzak7SMu+aKD+WokA/enJCs2hO0jLvmig/lqJAP3pyQrNsTtIy75ooP5aiQD97ckKzbE7SMu+aKD+WokA/enJCs2lO0jLvmig/lqJAP3tyQrNsTtIy75ooP5aiQD97ckKzaU7SMu+aKD+WokA/e3JCs2lO0jLvmig/lqJAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/8/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/9/38/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAPwAAgD/+/38/AACAP/7/fz/+/38/AACAPwAAgD/+/38/AACAPwAAgD/+/38/AACAPwAAgD8AAIA/AACAP/7/fz8AAIA/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz8AAIA/AACAP/7/fz/+/38/AACAPwAAgD8AAIA/AACAP/7/fz/+/38/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAP/7/fz/9/38/AACAP/7/fz/+/38/AACAP/7/fz/+/38/AACAPw+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09omqQsA+fmbLfnQ09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/v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/z/fz///38//v9/P/7/fz/9/38//v9/P///fz8AAIA//v9/P/7/fz///38//v9/P/3/fz/8/38//v9/P/z/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz8AAIA//v9/P/7/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/8/38//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/7/fz8AAIA//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz///38//v9/P/7/fz/9/38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/3/fz/7/38//v9/P/z/fz/9/38//v9/P/3/fz/9/38//v9/P/z/fz/7/38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/PxfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvRfrCjthCim9b+pZvafqCjthCim9b+pZvbrqCjtkCim9b+pZvT7qCjtlCim9b+pZvZfqCjtnCim9b+pZvX3qCjtrCim9cOpZvfnpCjtmCim9b+pZvZDqCjtpCim9cOpZvcPqCjtnCim9b+pZvZzrCjttCim9b+pZvV3qCjtmCim9cOpZvRXqCjtnCim9cOpZvcnpCjtpCim9b+pZvZfqCjtwCim9bupZvcvqCjtiCim9b+pZvYnqCjtoCim9b+pZveDpCjtsCim9bepZvcfpCjtcCim9bupZvQjrCjtlCim9b+pZvdnpCjtkCim9b+pZvaHqCjthCim9cOpZvR3rCjtmCim9b+pZvZ/qCjtqCim9cOpZvfrqCjtiCim9b+pZvarqCjtfCim9b+pZveTpCjtuCim9bupZvRPqCjtnCim9b+pZvRLqCjtjCim9bupZvb7qCjtmCim9b+pZvVTqCjtrCim9b+pZvYHqCjtkCim9bupZvXrqCjtjCim9b+pZvWTqCjtoCim9b+pZvSjqCjtmCim9b+pZve3pCjtzCim9bupZvRfqCjtnCim9cOpZvULrCjtgCim9b+pZvYHqCjtnCim9cepZvW3rCjtkCim9b+pZvZ3qCjtqCim9b+pZvRfrCjthCim9b+pZvUcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5IE7e+KWQcv0q2Gz+w37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkgTt74pZBy/SrYbP6/ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/r9+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/sN+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+SBO3vilkHL9Kths/sN+3PkcTt74qZBy/SbYbP67ftz5IE7e+KWQcv0q2Gz+w37c+SBO3vilkHL9Kths/r9+3PkgTt74pZBy/SrYbP7Dftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Kths/rt+3PkcTt74qZBy/SbYbP67ftz5HE7e+KmQcv0m2Gz+u37c+RxO3vipkHL9Jths/rt+3PkcTt74qZBy/SrYbP67ftz5HE7e+KmQcv0q2Gz+u37c+RxO3vipkHL9Jths/rt+3Pv//fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//v9/P/3/fz8AAIA//f9/P///fz8AAIA//v9/P///fz8AAIA//f9/P/3/fz8AAIA//v9/P///fz8AAIA//f9/P/3/fz8AAIA//v9/P///fz8AAIA/AACAP///fz/+/38//f9/PwAAgD8AAIA/AACAPwAAgD8AAIA//P9/PwAAgD8AAIA/AACAP/3/fz/+/38//v9/P/3/fz8AAIA//v9/P/3/fz8AAIA//v9/P///fz/+/38//f9/PwAAgD/+/38//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/PwAAgD8AAIA//v9/P///fz8AAIA//f9/PwAAgD8AAIA//v9/P///fz/+/38//P9/P/3/fz8AAIA//P9/P///fz8AAIA//v9/PwAAgD8AAIA//v9/P///fz8AAIA/AACAP///fz8AAIA/AACAP///fz8AAIA/AACAP/3/fz8AAIA//v9/P///fz8AAIA//v9/P///fz8AAIA/AACAPwAAgD8AAIA//f9/P///fz8AAIA//v9/P///fz8AAIA//f9/P///fz8AAIA//v9/P///fz8BAIA/AACAP///fz8AAIA//f9/P///fz8AAIA//f9/P///fz8AAIA//f9/P0TwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbskTwELJrnDg9Q2SbshfPArJrnDg9nUn7sgdz+7JsnDg9V67qssE/orFsnDg95jaqs8MvZDBtnDg9dQppskgyirJtnDg98O4UMd0vTbFunDg9jWNJsj/dhrJunDg990sNs0nRfTJsnDg9ZuiAsvyqgLBsnDg9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/v9/P/3/fz///38//v9/P/7/fz/9/38//v9/P///fz8AAIA//v9/P/7/fz///38//v9/P/3/fz/9/38//v9/P/7/fz/9/38//v9/P/7/fz///38//v9/P///fz/9/38//v9/P/3/fz/9/38//v9/P/7/fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz/9/38//v9/P/3/fz///38//v9/P/3/fz/9/38//v9/P/z/fz/9/38//v9/P/z/fz/9/38//v9/P/3/fz/8/38//v9/P/3/fz/9/38//v9/P///fz8AAIA//v9/P/z/fz/9/38//v9/PxfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvRfrCrthCim9b+pZvT/rCrtlCim9b+pZvULqCrtnCim9b+pZvU3qCrtvCim9bupZvTDqCrteCim9b+pZvaLqCrtiCim9b+pZvW3qCrtpCim9b+pZvT7qCrtkCim9cOpZvczqCrtoCim9b+pZvYHqCrtcCim9b+pZvenqCrtkCim9cOpZvYPqCrtgCim9cOpZvXDqCrtiCim9b+pZvbjqCrtqCim9b+pZvXrqCrtfCim9bupZvWDqCrtkCim9b+pZvQrqCrtmCim9bupZvffpCrtoCim9b+pZvc3qCrtnCim9b+pZvXvrCrtwCim9cepZvWLqCrttCim9b+pZvcnpCrtoCim9bepZvbDqCrtkCim9b+pZvcXqCrtsCim9cOpZvX3qCrtrCim9cOpZvWfqCrtqCim9b+pZvfvpCrthCim9b+pZvcDqCrtlCim9b+pZvUvqCrttCim9cOpZvYrrCrtqCim9b+pZvbPqCrtvCim9b+pZvVnqCrtuCim9bupZvfPqCrtnCim9b+pZvX/qCrtbCim9b+pZvWzqCrtnCim9bupZvTXqCrtrCim9b+pZvZHqCrtpCim9cOpZvTfqCrtlCim9b+pZvUbqCrtoCim9b+pZvW/qCrtjCim9b+pZvRfrCrthCim9b+pZvUcTt74qZBw/SbYbv67ftz5HE7e+KmQcP0m2G7+u37c+RxO3vipkHD9Jthu/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zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JveIv2KKQLSM9zK/JvfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAACZjJs9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PbFmjj3nEEs9hjV7PSNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PyNdBjirB4q73O8wOmf/fz8jXQY4qweKu9zvMDpn/38/I10GOKsHirvc7zA6Z/9/PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAk7HzHQc9AABkMAAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAACwAAMCnAAAArgAAgD8AAAAsAADApwAAAK4AAIA/AAAALAAAwKcAAACuAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vbFmjj2CQ0y6Fp4+vdu4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P9u4gTc71Re7eaHCOdL/fz/buIE3O9UXu3mhwjnS/38/27iBNzvVF7t5ocI50v9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/P/3/fz+0/38/tv9/PwCAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMACAjbH3HQc9ANCkMAAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAYCsAAGopAgCmKgAAgD8AAGArAABqKQIApioAAIA/AABgKwAAaikCAKYqAACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwAAgD8BAIA/AACAPwPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuQPfh723Z7I8G1VXuSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPSrAjzrMBqU9c5l+PxYgiD0qwI86zAalPXOZfj8WIIg9KsCPOswGpT1zmX4/FiCIPRUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAPxUAgD8CAIA/HwCAP0G75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sUG75DHhCqQ9Aq16sZBd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+P5Bd8L2p33Q5FWqvOx46fj+QXfC9qd90ORVqrzseOn4/kF3wvanfdDkVaq87Hjp+PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/PwAAgD/3/38/+f9/P2fBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MGfBGTGa8FM8kdG2MHseXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/P3seXr1WW7e5zn8xO1Offz97Hl69Vlu3uc5/MTtTn38/ex5evVZbt7nOfzE7U59/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PwAAgD/9/38//P9/PxwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsRwVTTL4III9KBaYsYwbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaP4wbBD+U9Yc8Sm9lPeTEWj+MGwQ/lPWHPEpvZT3kxFo/jBsEP5T1hzxKb2U95MRaPwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/PwUAgD8MAIA/+f9/P9SRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02MdSRgjH5dwo9xi02Ma9vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP69vpz53ZumzYJUttJLscT+vb6c+d2bps2CVLbSS7HE/r2+nPndm6bNglS20kuxxP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP/7/fz///38/AQCAP7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72L7ywdrDaAsQ81s72LzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPzoSDLQHHQkpiSynNAAAgD86Egy0Bx0JKYkspzQAAIA/OhIMtAcdCSmJLKc0AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/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AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAApDHzHQc9AACNsAAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAECyA/3+vAAAALgAAgD8AABAsgP9/rwAAAC4AAIA/AAAQLID/f68AAAAuAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP7Fmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vbFmjr2CQ0y6uJw+vWgblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P2gblDcR1Rc7BZ7CudL/fz9oG5Q3EdUXOwWewrnS/38/aBuUNxHVFzsFnsK50v9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/P/3/fz+1/38/t/9/PwBAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsABAcLL1HQc9ALDlsAAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAQCsA4P8uABB6LQAAgD8AAEArAOD/LgAQei0AAIA/AABAKwDg/y4AEHotAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP+Zqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOeZqrz14++I84MMhOfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP3DbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPXDbELx8QaS9yFGZPQAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP27UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP+Zqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOeZqr714++I84MMhOfQENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1P/QENb8AAAAAAAAAAPIENT/0BDW/AAAAAAAAAADyBDU/9AQ1vwAAAAAAAAAA8gQ1PwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP3DbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPXDbEDx8QaS9yFGZPQAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAAIAAAACAAACAvy69OzMAAACAAAAAgAAAgL8uvTszAAAAgAAAAIAAAIC/Lr07MwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAP27UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAG7UjLGA+zA9AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgEvvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAP0vvrrMAAAAAAAAAgAAAgD9L766zAAAAAAAAAIAAAIA/S++uswAAAAAAAACAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPw==" - } - ] -} From e3d2515740c6168bba36274c18e93a1bcf4d4e16 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 13 Nov 2022 20:49:31 +0800 Subject: [PATCH 778/793] Modular house part asset test --- Assets/Models/HouseModular.gltf | 1358 +++++++++++++++++++++ Assets/Models/HouseModular.shmodel | Bin 0 -> 252695 bytes Assets/Models/HouseModular.shmodel.shmeta | 55 + 3 files changed, 1413 insertions(+) create mode 100644 Assets/Models/HouseModular.gltf create mode 100644 Assets/Models/HouseModular.shmodel create mode 100644 Assets/Models/HouseModular.shmodel.shmeta diff --git a/Assets/Models/HouseModular.gltf b/Assets/Models/HouseModular.gltf new file mode 100644 index 00000000..3e9e9a05 --- /dev/null +++ b/Assets/Models/HouseModular.gltf @@ -0,0 +1,1358 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.3.32", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "FloorLarge" + }, + { + "mesh" : 1, + "name" : "FloorSmall" + }, + { + "mesh" : 2, + "name" : "FloorLong" + }, + { + "mesh" : 3, + "name" : "Pillar" + }, + { + "mesh" : 4, + "name" : "WallEnd" + }, + { + "mesh" : 5, + "name" : "WallCorner" + }, + { + "mesh" : 6, + "name" : "WallDefault" + }, + { + "mesh" : 7, + "name" : "WallLarge" + }, + { + "mesh" : 8, + "name" : "WallDiagonal" + }, + { + "mesh" : 9, + "name" : "WallTBlock" + }, + { + "mesh" : 10, + "name" : "WindowLarge" + }, + { + "mesh" : 11, + "name" : "WindowSmallOpened" + }, + { + "mesh" : 12, + "name" : "WindowSmallClosed" + }, + { + "mesh" : 13, + "name" : "WindowLargeOpen" + }, + { + "mesh" : 14, + "name" : "WallDoorHole" + }, + { + "mesh" : 15, + "name" : "Door", + "translation" : [ + -0.4000000059604645, + 0, + 0.09999999403953552 + ] + }, + { + "mesh" : 16, + "name" : "DoorFrame" + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "Material", + "pbrMetallicRoughness" : { + "baseColorFactor" : [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "metallicFactor" : 0, + "roughnessFactor" : 0.4000000059604645 + } + } + ], + "meshes" : [ + { + "name" : "Cube.013", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + }, + { + "name" : "Cube.015", + "primitives" : [ + { + "attributes" : { + "POSITION" : 4, + "NORMAL" : 5, + "TEXCOORD_0" : 6 + }, + "indices" : 7, + "material" : 0 + } + ] + }, + { + "name" : "Cube.014", + "primitives" : [ + { + "attributes" : { + "POSITION" : 8, + "NORMAL" : 9, + "TEXCOORD_0" : 10 + }, + "indices" : 11, + "material" : 0 + } + ] + }, + { + "name" : "Cube.043", + "primitives" : [ + { + "attributes" : { + "POSITION" : 12, + "NORMAL" : 13, + "TEXCOORD_0" : 14 + }, + "indices" : 15, + "material" : 0 + } + ] + }, + { + "name" : "Cube.001", + "primitives" : [ + { + "attributes" : { + "POSITION" : 16, + "NORMAL" : 17, + "TEXCOORD_0" : 18 + }, + "indices" : 19, + "material" : 0 + } + ] + }, + { + "name" : "Cube.009", + "primitives" : [ + { + "attributes" : { + "POSITION" : 20, + "NORMAL" : 21, + "TEXCOORD_0" : 22 + }, + "indices" : 23, + "material" : 0 + } + ] + }, + { + "name" : "Cube.002", + "primitives" : [ + { + "attributes" : { + "POSITION" : 24, + "NORMAL" : 25, + "TEXCOORD_0" : 26 + }, + "indices" : 27, + "material" : 0 + } + ] + }, + { + "name" : "Cube.003", + "primitives" : [ + { + "attributes" : { + "POSITION" : 28, + "NORMAL" : 29, + "TEXCOORD_0" : 30 + }, + "indices" : 31, + "material" : 0 + } + ] + }, + { + "name" : "Cube.008", + "primitives" : [ + { + "attributes" : { + "POSITION" : 32, + "NORMAL" : 33, + "TEXCOORD_0" : 34 + }, + "indices" : 35, + "material" : 0 + } + ] + }, + { + "name" : "Cube.011", + "primitives" : [ + { + "attributes" : { + "POSITION" : 36, + "NORMAL" : 37, + "TEXCOORD_0" : 38 + }, + "indices" : 39, + "material" : 0 + } + ] + }, + { + "name" : "Cube.034", + "primitives" : [ + { + "attributes" : { + "POSITION" : 40, + "NORMAL" : 41, + "TEXCOORD_0" : 42 + }, + "indices" : 43, + "material" : 0 + } + ] + }, + { + "name" : "Cube.007", + "primitives" : [ + { + "attributes" : { + "POSITION" : 44, + "NORMAL" : 45, + "TEXCOORD_0" : 46 + }, + "indices" : 47, + "material" : 0 + } + ] + }, + { + "name" : "Cube.016", + "primitives" : [ + { + "attributes" : { + "POSITION" : 48, + "NORMAL" : 49, + "TEXCOORD_0" : 50 + }, + "indices" : 51, + "material" : 0 + } + ] + }, + { + "name" : "Cube.025", + "primitives" : [ + { + "attributes" : { + "POSITION" : 52, + "NORMAL" : 53, + "TEXCOORD_0" : 54 + }, + "indices" : 55, + "material" : 0 + } + ] + }, + { + "name" : "Cube.006", + "primitives" : [ + { + "attributes" : { + "POSITION" : 56, + "NORMAL" : 57, + "TEXCOORD_0" : 58 + }, + "indices" : 59, + "material" : 0 + } + ] + }, + { + "name" : "Cube.005", + "primitives" : [ + { + "attributes" : { + "POSITION" : 60, + "NORMAL" : 61, + "TEXCOORD_0" : 62 + }, + "indices" : 63, + "material" : 0 + } + ] + }, + { + "name" : "Cube", + "primitives" : [ + { + "attributes" : { + "POSITION" : 64, + "NORMAL" : 65, + "TEXCOORD_0" : 66 + }, + "indices" : 67, + "material" : 0 + } + ] + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 56, + "max" : [ + 1, + 0.009999998845160007, + 1 + ], + "min" : [ + -1, + -0.03999999910593033, + -1 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 56, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 56, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 96, + "type" : "SCALAR" + }, + { + "bufferView" : 4, + "componentType" : 5126, + "count" : 24, + "max" : [ + 0.5, + 0.009999998845160007, + 0.5 + ], + "min" : [ + -0.5, + -0.03999999910593033, + -0.5 + ], + "type" : "VEC3" + }, + { + "bufferView" : 5, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3" + }, + { + "bufferView" : 6, + "componentType" : 5126, + "count" : 24, + "type" : "VEC2" + }, + { + "bufferView" : 7, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR" + }, + { + "bufferView" : 8, + "componentType" : 5126, + "count" : 36, + "max" : [ + 1, + 0.009999998845160007, + 0.5 + ], + "min" : [ + -1, + -0.03999999910593033, + -0.5 + ], + "type" : "VEC3" + }, + { + "bufferView" : 9, + "componentType" : 5126, + "count" : 36, + "type" : "VEC3" + }, + { + "bufferView" : 10, + "componentType" : 5126, + "count" : 36, + "type" : "VEC2" + }, + { + "bufferView" : 11, + "componentType" : 5123, + "count" : 60, + "type" : "SCALAR" + }, + { + "bufferView" : 12, + "componentType" : 5126, + "count" : 66, + "max" : [ + 0.1199999749660492, + 2.200000047683716, + 0.125 + ], + "min" : [ + -0.1200004369020462, + 0, + -0.11499999463558197 + ], + "type" : "VEC3" + }, + { + "bufferView" : 13, + "componentType" : 5126, + "count" : 66, + "type" : "VEC3" + }, + { + "bufferView" : 14, + "componentType" : 5126, + "count" : 66, + "type" : "VEC2" + }, + { + "bufferView" : 15, + "componentType" : 5123, + "count" : 108, + "type" : "SCALAR" + }, + { + "bufferView" : 16, + "componentType" : 5126, + "count" : 68, + "max" : [ + 0.5199999809265137, + 2.200000047683716, + 0.11999999731779099 + ], + "min" : [ + -0.5, + 0, + -0.11999999731779099 + ], + "type" : "VEC3" + }, + { + "bufferView" : 17, + "componentType" : 5126, + "count" : 68, + "type" : "VEC3" + }, + { + "bufferView" : 18, + "componentType" : 5126, + "count" : 68, + "type" : "VEC2" + }, + { + "bufferView" : 19, + "componentType" : 5123, + "count" : 108, + "type" : "SCALAR" + }, + { + "bufferView" : 20, + "componentType" : 5126, + "count" : 134, + "max" : [ + 1, + 2.200000047683716, + 0.11999999731779099 + ], + "min" : [ + -0.12000006437301636, + 0, + -1 + ], + "type" : "VEC3" + }, + { + "bufferView" : 21, + "componentType" : 5126, + "count" : 134, + "type" : "VEC3" + }, + { + "bufferView" : 22, + "componentType" : 5126, + "count" : 134, + "type" : "VEC2" + }, + { + "bufferView" : 23, + "componentType" : 5123, + "count" : 240, + "type" : "SCALAR" + }, + { + "bufferView" : 24, + "componentType" : 5126, + "count" : 90, + "max" : [ + 0.5000000596046448, + 2.200000047683716, + 0.11999999731779099 + ], + "min" : [ + -0.4999999403953552, + 0, + -0.11999999731779099 + ], + "type" : "VEC3" + }, + { + "bufferView" : 25, + "componentType" : 5126, + "count" : 90, + "type" : "VEC3" + }, + { + "bufferView" : 26, + "componentType" : 5126, + "count" : 90, + "type" : "VEC2" + }, + { + "bufferView" : 27, + "componentType" : 5123, + "count" : 168, + "type" : "SCALAR" + }, + { + "bufferView" : 28, + "componentType" : 5126, + "count" : 128, + "max" : [ + 1, + 2.200000047683716, + 0.11999999731779099 + ], + "min" : [ + -0.9999999403953552, + 0, + -0.11999999731779099 + ], + "type" : "VEC3" + }, + { + "bufferView" : 29, + "componentType" : 5126, + "count" : 128, + "type" : "VEC3" + }, + { + "bufferView" : 30, + "componentType" : 5126, + "count" : 128, + "type" : "VEC2" + }, + { + "bufferView" : 31, + "componentType" : 5123, + "count" : 240, + "type" : "SCALAR" + }, + { + "bufferView" : 32, + "componentType" : 5126, + "count" : 96, + "max" : [ + 0.6200000047683716, + 2.200000047683716, + 0.619999885559082 + ], + "min" : [ + -0.5, + 0, + -0.5 + ], + "type" : "VEC3" + }, + { + "bufferView" : 33, + "componentType" : 5126, + "count" : 96, + "type" : "VEC3" + }, + { + "bufferView" : 34, + "componentType" : 5126, + "count" : 96, + "type" : "VEC2" + }, + { + "bufferView" : 35, + "componentType" : 5123, + "count" : 168, + "type" : "SCALAR" + }, + { + "bufferView" : 36, + "componentType" : 5126, + "count" : 200, + "max" : [ + 1, + 2.200000047683716, + 0.11999999731779099 + ], + "min" : [ + -1, + 0, + -1 + ], + "type" : "VEC3" + }, + { + "bufferView" : 37, + "componentType" : 5126, + "count" : 200, + "type" : "VEC3" + }, + { + "bufferView" : 38, + "componentType" : 5126, + "count" : 200, + "type" : "VEC2" + }, + { + "bufferView" : 39, + "componentType" : 5123, + "count" : 360, + "type" : "SCALAR" + }, + { + "bufferView" : 40, + "componentType" : 5126, + "count" : 973, + "max" : [ + 1.0000001192092896, + 2.200000286102295, + 0.11999999731779099 + ], + "min" : [ + -1, + 0, + -0.125 + ], + "type" : "VEC3" + }, + { + "bufferView" : 41, + "componentType" : 5126, + "count" : 973, + "type" : "VEC3" + }, + { + "bufferView" : 42, + "componentType" : 5126, + "count" : 973, + "type" : "VEC2" + }, + { + "bufferView" : 43, + "componentType" : 5123, + "count" : 1632, + "type" : "SCALAR" + }, + { + "bufferView" : 44, + "componentType" : 5126, + "count" : 613, + "max" : [ + 0.5000000596046448, + 2.200000286102295, + 0.33178770542144775 + ], + "min" : [ + -0.4999999403953552, + 0, + -0.125 + ], + "type" : "VEC3" + }, + { + "bufferView" : 45, + "componentType" : 5126, + "count" : 613, + "type" : "VEC3" + }, + { + "bufferView" : 46, + "componentType" : 5126, + "count" : 613, + "type" : "VEC2" + }, + { + "bufferView" : 47, + "componentType" : 5123, + "count" : 1068, + "type" : "SCALAR" + }, + { + "bufferView" : 48, + "componentType" : 5126, + "count" : 538, + "max" : [ + 0.5000000596046448, + 2.200000286102295, + 0.11999999731779099 + ], + "min" : [ + -0.4999999701976776, + 0, + -0.125 + ], + "type" : "VEC3" + }, + { + "bufferView" : 49, + "componentType" : 5126, + "count" : 538, + "type" : "VEC3" + }, + { + "bufferView" : 50, + "componentType" : 5126, + "count" : 538, + "type" : "VEC2" + }, + { + "bufferView" : 51, + "componentType" : 5123, + "count" : 924, + "type" : "SCALAR" + }, + { + "bufferView" : 52, + "componentType" : 5126, + "count" : 1067, + "max" : [ + 1.0000001192092896, + 2.200000286102295, + 0.47529903054237366 + ], + "min" : [ + -1, + 0, + -0.125 + ], + "type" : "VEC3" + }, + { + "bufferView" : 53, + "componentType" : 5126, + "count" : 1067, + "type" : "VEC3" + }, + { + "bufferView" : 54, + "componentType" : 5126, + "count" : 1067, + "type" : "VEC2" + }, + { + "bufferView" : 55, + "componentType" : 5123, + "count" : 1776, + "type" : "SCALAR" + }, + { + "bufferView" : 56, + "componentType" : 5126, + "count" : 202, + "max" : [ + 0.5, + 2.200000286102295, + 0.11999999731779099 + ], + "min" : [ + -0.5, + 0, + -0.11999999731779099 + ], + "type" : "VEC3" + }, + { + "bufferView" : 57, + "componentType" : 5126, + "count" : 202, + "type" : "VEC3" + }, + { + "bufferView" : 58, + "componentType" : 5126, + "count" : 202, + "type" : "VEC2" + }, + { + "bufferView" : 59, + "componentType" : 5123, + "count" : 384, + "type" : "SCALAR" + }, + { + "bufferView" : 60, + "componentType" : 5126, + "count" : 842, + "max" : [ + 0.7999999523162842, + 2.000326156616211, + 0.05949999764561653 + ], + "min" : [ + -0.018654286861419678, + 0.0003262758255004883, + -0.09449999779462814 + ], + "type" : "VEC3" + }, + { + "bufferView" : 61, + "componentType" : 5126, + "count" : 842, + "type" : "VEC3" + }, + { + "bufferView" : 62, + "componentType" : 5126, + "count" : 842, + "type" : "VEC2" + }, + { + "bufferView" : 63, + "componentType" : 5123, + "count" : 3324, + "type" : "SCALAR" + }, + { + "bufferView" : 64, + "componentType" : 5126, + "count" : 298, + "max" : [ + 0.4599999785423279, + 2.0799999237060547, + 0.11121083796024323 + ], + "min" : [ + -0.4599999785423279, + 0, + -0.1087893396615982 + ], + "type" : "VEC3" + }, + { + "bufferView" : 65, + "componentType" : 5126, + "count" : 298, + "type" : "VEC3" + }, + { + "bufferView" : 66, + "componentType" : 5126, + "count" : 298, + "type" : "VEC2" + }, + { + "bufferView" : 67, + "componentType" : 5123, + "count" : 486, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 672, + "byteOffset" : 0, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 672, + "byteOffset" : 672, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 448, + "byteOffset" : 1344, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 192, + "byteOffset" : 1792, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 1984, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 2272, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 192, + "byteOffset" : 2560, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 72, + "byteOffset" : 2752, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 432, + "byteOffset" : 2824, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 432, + "byteOffset" : 3256, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 3688, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 120, + "byteOffset" : 3976, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 792, + "byteOffset" : 4096, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 792, + "byteOffset" : 4888, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 528, + "byteOffset" : 5680, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 216, + "byteOffset" : 6208, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 6424, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 816, + "byteOffset" : 7240, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 544, + "byteOffset" : 8056, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 216, + "byteOffset" : 8600, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 1608, + "byteOffset" : 8816, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1608, + "byteOffset" : 10424, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1072, + "byteOffset" : 12032, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 480, + "byteOffset" : 13104, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 1080, + "byteOffset" : 13584, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1080, + "byteOffset" : 14664, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 15744, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 336, + "byteOffset" : 16464, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 1536, + "byteOffset" : 16800, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1536, + "byteOffset" : 18336, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1024, + "byteOffset" : 19872, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 480, + "byteOffset" : 20896, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 1152, + "byteOffset" : 21376, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1152, + "byteOffset" : 22528, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 768, + "byteOffset" : 23680, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 336, + "byteOffset" : 24448, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 2400, + "byteOffset" : 24784, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2400, + "byteOffset" : 27184, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1600, + "byteOffset" : 29584, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 720, + "byteOffset" : 31184, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 11676, + "byteOffset" : 31904, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 11676, + "byteOffset" : 43580, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 7784, + "byteOffset" : 55256, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 3264, + "byteOffset" : 63040, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 7356, + "byteOffset" : 66304, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 7356, + "byteOffset" : 73660, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4904, + "byteOffset" : 81016, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2136, + "byteOffset" : 85920, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 6456, + "byteOffset" : 88056, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 6456, + "byteOffset" : 94512, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 4304, + "byteOffset" : 100968, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1848, + "byteOffset" : 105272, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 12804, + "byteOffset" : 107120, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 12804, + "byteOffset" : 119924, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 8536, + "byteOffset" : 132728, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 3552, + "byteOffset" : 141264, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 2424, + "byteOffset" : 144816, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2424, + "byteOffset" : 147240, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 1616, + "byteOffset" : 149664, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 768, + "byteOffset" : 151280, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 10104, + "byteOffset" : 152048, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 10104, + "byteOffset" : 162152, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 6736, + "byteOffset" : 172256, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 6648, + "byteOffset" : 178992, + "target" : 34963 + }, + { + "buffer" : 0, + "byteLength" : 3576, + "byteOffset" : 185640, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 3576, + "byteOffset" : 189216, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 2384, + "byteOffset" : 192792, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 972, + "byteOffset" : 195176, + "target" : 34963 + } + ], + "buffers" : [ + { + "byteLength" : 196148, + "uri" : "data:application/octet-stream;base64,AACAvwnXIzwAAIA/AACAvwnXIzwAAIA/AACAvwnXIzwAAIA/AACAvwrXI70AAIA/AACAvwrXI70AAIA/AACAvwrXI70AAIA/AACAvwnXIzwAAIC/AACAvwnXIzwAAIC/AACAvwnXIzwAAIC/AACAvwrXI70AAIC/AACAvwrXI70AAIC/AACAvwrXI70AAIC/AACAPwnXIzwAAIA/AACAPwnXIzwAAIA/AACAPwnXIzwAAIA/AACAPwrXI70AAIA/AACAPwrXI70AAIA/AACAPwrXI70AAIA/AACAPwnXIzwAAIC/AACAPwnXIzwAAIC/AACAPwnXIzwAAIC/AACAPwrXI70AAIC/AACAPwrXI70AAIC/AACAPwrXI70AAIC/AAAAAAnXIzwAAIC/AAAAAAnXIzwAAIC/AAAAAAnXIzwAAIC/AAAAAArXI70AAIC/AAAAAArXI70AAIC/AAAAAArXI70AAIC/AAAAAAnXIzwAAIA/AAAAAAnXIzwAAIA/AAAAAAnXIzwAAIA/AAAAAArXI70AAIA/AAAAAArXI70AAIA/AAAAAArXI70AAIA/AACAvwnXIzwAAACAAACAvwnXIzwAAACAAACAvwnXIzwAAACAAACAvwrXI70AAACAAACAvwrXI70AAACAAACAvwrXI70AAACAAACAPwnXIzwAAACAAACAPwnXIzwAAACAAACAPwnXIzwAAACAAACAPwrXI70AAACAAACAPwrXI70AAACAAACAPwrXI70AAACAAAAAAArXI70AAACAAAAAAArXI70AAACAAAAAAArXI70AAACAAAAAAArXI70AAACAAAAAAAnXIzwAAACAAAAAAAnXIzwAAACAAAAAAAnXIzwAAACAAAAAAAnXIzwAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/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AMB/PwDAfz8AwH8/FP13PwDNNzwAwH8/AMB/P5pC/T4AzTc8AMB/PwDAfz8AwH8/AMB/PwAABgAJAAAACQADAAcAEgAWAAcAFgALABQADgARABQAEQAXAAwAAQAFAAwABQAQAAgAAgANAAgADQATABUADwAEABUABAAKAAAAgL8J1yM8AAAAPwAAgL8J1yM8AAAAPwAAgL8J1yM8AAAAPwAAgL8K1yO9AAAAPwAAgL8K1yO9AAAAPwAAgL8K1yO9AAAAPwAAgL8J1yM8AAAAvwAAgL8J1yM8AAAAvwAAgL8J1yM8AAAAvwAAgL8K1yO9AAAAvwAAgL8K1yO9AAAAvwAAgL8K1yO9AAAAvwAAgD8J1yM8AAAAPwAAgD8J1yM8AAAAPwAAgD8J1yM8AAAAPwAAgD8K1yO9AAAAPwAAgD8K1yO9AAAAPwAAgD8K1yO9AAAAPwAAgD8J1yM8AAAAvwAAgD8J1yM8AAAAvwAAgD8J1yM8AAAAvwAAgD8K1yO9AAAAvwAAgD8K1yO9AAAAvwAAgD8K1yO9AAAAvwAAAAAJ1yM8AAAAvwAAAAAJ1yM8AAAAvwAAAAAJ1yM8AAAAvwAAAAAK1yO9AAAAvwAAAAAK1yO9AAAAvwAAAAAK1yO9AAAAvwAAAAAJ1yM8AAAAPwAAAAAJ1yM8AAAAPwAAAAAJ1yM8AAAAPwAAAAAK1yO9AAAAPwAAAAAK1yO9AAAAPwAAAAAK1yO9AAAAPwAAgL8AAAAAAAAAgAAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgL8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/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/v//vrgeBT7MzMy9/v//vrgeBT7MzMy9/v//vrgeBT7MzMy9AAAAP4XrAUDMzMy9AAAAP4XrAUDMzMy9AAAAP4XrAUDMzMy9AAAAP4XrAUDMzMy9/v//voXrAUDMzMy9/v//voXrAUDMzMy9/v//voXrAUDMzMy9AQAAP83MDEDMzMy9AQAAP83MDEDMzMy9AQAAP83MDEDMzMy9/v//vs3MDEDMzMy9/v//vs3MDEDMzMy9/v//vs3MDEDMzMy9AAAAP83MDEAAAACAAAAAP83MDEAAAACA/v//vs3MDEAAAACA/v//vs3MDEAAAACA/v//voXrAUAAAACA/v//vrgeBT4AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAADL5ZD8h+eQ+AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAD//38/AAAAADL5ZD8h+eQ+AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAP//fz8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAP//fz8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADL5ZD8h+eS+AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACA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AACAP5DC9T2PwvU9AACAPwAAAACPwvU9AACAPwAAAACPwvU9AACAPwAAAACPwvU9AAAAAM3MDEDMzMw9AAAAAM3MDEDMzMw9AAAAAM3MDEDMzMw9AAAAAM3MDEDMzMw9AAAAAIXrAUDMzMw9AAAAAIXrAUDMzMw9AAAAAIXrAUDMzMw9AAAAALgeBT7MzMw9AAAAALgeBT7MzMw9AAAAALgeBT7MzMw9AAAAALgeBT7MzMw9AAAAAJDC9T2PwvU9AAAAAJDC9T2PwvU9AAAAAJDC9T2PwvU9AAAAAJDC9T2PwvU9AAAAAAAAAACPwvU9AAAAAAAAAACPwvU9AAAAAAAAAACPwvU9//9/vwAAAAAAAACA//9/vwAAAAAAAACA//9/v83MDEAAAACA//9/v83MDEAAAACA//9/v4XrAUAAAACA//9/v5DC9T0AAACA//9/v7geBT4AAACAAACAP83MDEAAAACAAACAP83MDEAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAP7geBT4AAACAAACAP5DC9T0AAACAAAAAAAAAAAAAAACAAAAAAM3MDEAAAACAAAAAAM3MDEAAAACAAACAP4XrAUAAAACA//9/vwAAAACPwvW9//9/vwAAAACPwvW9//9/vwAAAACPwvW9//9/v5DC9T2PwvW9//9/v5DC9T2PwvW9//9/v5DC9T2PwvW9AAAAAAAAAACPwvW9AAAAAAAAAACPwvW9AAAAAAAAAACPwvW9//9/vwAAAAAAAACA//9/vwAAAAAAAACA//9/v5DC9T0AAACAAAAAAAAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAACPwvW9AACAPwAAAACPwvW9AACAPwAAAACPwvW9AACAP5DC9T0AAACAAACAP5DC9T2PwvW9AACAP5DC9T2PwvW9AACAP5DC9T2PwvW9AACAP7geBT4AAACAAACAP4XrAUAAAACAAACAP7geBT7MzMy9AACAP7geBT7MzMy9AACAP7geBT7MzMy9AACAP4XrAUDMzMy9AACAP4XrAUDMzMy9AAAAALgeBT7MzMy9AAAAALgeBT7MzMy9AAAAALgeBT7MzMy9AAAAALgeBT7MzMy9//9/v7geBT7MzMy9//9/v7geBT7MzMy9//9/v7geBT7MzMy9AAAAAJDC9T2PwvW9AAAAAJDC9T2PwvW9AAAAAJDC9T2PwvW9AAAAAJDC9T2PwvW9AAAAAIXrAUDMzMy9AAAAAIXrAUDMzMy9AAAAAIXrAUDMzMy9//9/v4XrAUDMzMy9//9/v4XrAUDMzMy9//9/v4XrAUDMzMy9AAAAAM3MDEDMzMy9AAAAAM3MDEDMzMy9AAAAAM3MDEDMzMy9AAAAAM3MDEDMzMy9AACAP83MDEDMzMy9AACAP83MDEDMzMy9AACAP83MDEDMzMy9//9/v83MDEDMzMy9//9/v83MDEDMzMy9//9/v83MDEDMzMy9AAAAAM3MDEAAAACAAAAAAM3MDEAAAACA//9/v83MDEAAAACA//9/v83MDEAAAACAAACAP83MDEAAAACAAACAP83MDEAAAACA//9/v4XrAUAAAACA//9/v7geBT4AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADP5ZD8h+eQ+AACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAADP5ZD8h+eQ+AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AAAAADP5ZD8h+eQ+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAADL5ZD8h+eQ+AAAAADP5ZD8h+eQ+AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAP//fz8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADP5ZD8h+eS+AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADL5ZD8h+eS+AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADL5ZD8h+eS+AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAD//3+/AAAAADL5ZD8h+eS+AAAAADP5ZD8h+eS+AACAvwAAAAAAAACAAAAAAAAAAAD//3+/AAAAADP5ZD8h+eS+AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAADL5ZD8h+eS+AAAAADP5ZD8h+eS+AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAD//3+/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAD//3+/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAAAAgD8AAACA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yMzMPgAAAL+8HgU+/P//PgAAAL+8HgU+/P//PgAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgPMENT8AAAAA9AQ1PwAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgPUENT8AAAAA8gQ1PwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAv/MENT8AAAAA9AQ1PwAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgPUENT8AAAAA8gQ1PwAAgL8AAAAAAAAAgP//f78AAAAAAAAAgPMENT8AAAAA9AQ1P/UENT8AAAAA8gQ1PwAAAAAAAAAAAACAv/MENT8AAAAA9AQ1P/UENT8AAAAA8gQ1PwAAgL8AAAAAAAAAgOEF0T7yBVE/2wXRPvMENT8AAAAA9AQ1PwAAAAAAAAAAAACAv+EF0T7yBVE/2wXRPvMENT8AAAAA9AQ1PwAAgL8AAAAAAAAAgP//f78AAAAAAAAAgOEF0T7yBVE/2wXRPvMENT8AAAAA9AQ1PwAAAAAAAAAAAACAv+EF0T7yBVE/2wXRPvMENT8AAAAA9AQ1PwAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgL8AAAAAAAAAgP//f78AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgP//f78AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgL8AAAAAAAAAgPMENb8AAAAA9QQ1vwAAAAD//3+/AAAAgAAAgL8AAAAAAAAAgPMENb8AAAAA9QQ1v+wF0b7sBVE/6QXRvvMENb8AAAAA9QQ1vwAAAAD//3+/AAAAgAAAAAAAAAAAAACAvwAAgL8AAAAAAAAAgAAAAAD//3+/AAAAgAAAgL8AAAAAAAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAvwAAAAAAAAAAAACAv/MENb8AAAAA9QQ1v+wF0b7sBVE/6QXRvgAAAAAAAAAAAACAvwAAAAAAAAAAAACAv/IENb8AAAAA9AQ1v+wF0b7sBVE/6QXRvgAAAAAAAAAAAACAvwAAAAAAAAAAAACAv/sENb8AAAAA7QQ1v/IENb8AAAAA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zMzMPQAAgD/NzAxAzMzMPQAAAADNzAxA9MzMPQAAAADNzAxA9MzMPQAAAADNzAxA9MzMPQAAAADNzAxA9MzMPQAAAAAAAAAAj8L1PQAAAAAAAAAAj8L1PQAAAAAAAAAAj8L1PQAAgL/NzAxAzMzMPQAAgL/NzAxAzMzMPQAAgL/NzAxAzMzMPQAAgL+4HgU+zMzMPQAAgL+4HgU+zMzMPQAAgL+4HgU+zMzMPQAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL/NzAxAAAAAgAAAgL/NzAxAAAAAgAAAAAAAAAAAAADAsgAAAADNzAxAAABINAAAAADNzAxAAABINAAAgL+QwvU9AAAAgAAAgL+4HgU+AAAAgAAAgL+F6wFAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD/NzAxAAAAAgAAAgD/NzAxAAAAAgAAAgD+4HgU+AAAAgAAAgD+QwvU9AAAAgAAAgD+F6wFAAAAAgAAAgD+F6wFAzMzMvQAAgD+F6wFAzMzMvQAAgD+F6wFAzMzMvcrMzD2F6wFAx8zMvcrMzD2F6wFAx8zMvcrMzD2F6wFAx8zMvcrMzD2F6wFAx8zMvQAAgD/NzAxAzMzMvQAAgD/NzAxAzMzMvQAAgD/NzAxAzMzMvQAAgD+4HgU+zMzMvQAAgD+4HgU+zMzMvQAAgD+4HgU+zMzMvQAAgD+F6wFAAAAAgAAAgD/NzAxAAAAAgAAAgD/NzAxAAAAAgAAAgD+4HgU+AAAAgAAAgD+QwvU9AAAAgAAAgD+QwvU9j8L1vQAAgD+QwvU9j8L1vQAAgD+QwvU9j8L1vQAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAj8L1vQAAgD8AAAAAj8L1vQAAgD8AAAAAj8L1vQAAAAAAAAAAAADAso/C9T0AAAAAlcL1vY/C9T0AAAAAlcL1vY/C9T0AAAAAlcL1vQAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAACYwvU9AACAv4jC9T0AAAAAAACAv4jC9T0AAAAAAACAv4jC9T0AAAAAAACAv4jC9T2YwvU9AACAv4jC9T2YwvU9AACAv4jC9T2YwvU9AACAv4/C9T2QwvU9lcL1vY/C9T2QwvU9lcL1vY/C9T2QwvU9lcL1vY/C9T2QwvU9lcL1vcDMzD28HgU+AACAv8DMzD28HgU+AACAv8DMzD28HgU+AACAv8rMzD24HgU+x8zMvcrMzD24HgU+x8zMvcrMzD24HgU+x8zMvcrMzD24HgU+x8zMvcDMzD2E6wFAAACAv8DMzD2E6wFAAACAv8DMzD2E6wFAAACAvwAAAAC8HgU+AACAvwAAAACE6wFAAACAvwAAAADNzAxAAACAvwAAAADNzAxAAACAv8DMzD3NzAxAAACAv8DMzD3NzAxAAACAv8DMzD3NzAxAAACAvwAAAADNzAxAAABINAAAAADNzAxAAABINNDMzD3NzAxAwczMvdDMzD3NzAxAwczMvdDMzD3NzAxAwczMvdDMzD3NzAxAwczMvcDMzL3NzAxAAACAv8DMzL3NzAxAAACAv8DMzL3NzAxAAACAv9DMzL3NzAxAwczMvdDMzL3NzAxAwczMvdDMzL3NzAxAwczMvdDMzL3NzAxAwczMvcDMzL2E6wFAAACAv8DMzL2E6wFAAACAv8DMzL2E6wFAAACAvwAAAADNzAxAAACAvwAAAADNzAxAAACAvwAAAADNzAxAAABINAAAAADNzAxAAABINAAAAACE6wFAAACAvwAAAAC8HgU+AACAvwAAAACYwvU9AACAv8DMzL28HgU+AACAv8DMzL28HgU+AACAv8DMzL28HgU+AACAv8rMzL24HgU+x8zMvcrMzL24HgU+x8zMvcrMzL24HgU+x8zMvcrMzL24HgU+x8zMvYjC9b2YwvU9AACAv4jC9b2YwvU9AACAv4jC9b2YwvU9AACAv4/C9b2QwvU9lcL1vY/C9b2QwvU9lcL1vY/C9b2QwvU9lcL1vY/C9b2QwvU9lcL1vYjC9b0AAAAAAACAv4jC9b0AAAAAAACAv4jC9b0AAAAAAACAv4/C9b0AAAAAlcL1vY/C9b0AAAAAlcL1vY/C9b0AAAAAlcL1vY/C9b0AAAAAlcL1vQAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAADAsgAAAAAAAAAAAADAsgAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAj8L1vQAAgL8AAAAAj8L1vQAAgL8AAAAAj8L1vQAAgL+QwvU9AAAAgAAAgL+QwvU9j8L1vQAAgL+QwvU9j8L1vQAAgL+QwvU9j8L1vQAAgL+4HgU+AAAAgAAAgL+4HgU+zMzMvQAAgL+4HgU+zMzMvQAAgL+4HgU+zMzMvQAAgL+F6wFAAAAAgAAAgL+F6wFAzMzMvQAAgL+F6wFAzMzMvQAAgL+F6wFAzMzMvQAAgL/NzAxAAAAAgAAAgL/NzAxAAAAAgAAAgL/NzAxAzMzMvQAAgL/NzAxAzMzMvQAAgL/NzAxAzMzMvcrMzL2F6wFAx8zMvcrMzL2F6wFAx8zMvcrMzL2F6wFAx8zMvcrMzL2F6wFAx8zMvQAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgD8AAAAAAAAAgP//sTQ3PDw0AACAPwAAxDQAAAAAAACAPwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAPwHjsjMX+WQ/jfnkPgAAgD8AAAAAAAAAgAHjsjMX+WQ/jfnkPgAAxDQAAAAAAACAPwAAgD8AAAAAAAAAgAAAxLQAAAAAAACAP/n/sbQ3PDw0AACAP///sTQ3PDw0AACAPwAAxDQAAAAAAACAPwAAxLQAAAAAAACAPwHjsrMX+WQ/jfnkPgHjsjMX+WQ/jfnkPgAAxDQAAAAAAACAPwHjsrMX+WQ/jfnkPgAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwHjsjMX+WQ/jfnkPgAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgL8AAAAAAAAAgAAAxLQAAAAAAACAP/n/sbQ3PDw0AACAPwAAgL8AAAAAAAAAgAHjsrMX+WQ/jfnkPgAAAAAAAAAAAACAP/r/n7P//38/AAAAgP//sTQ3PDw0AACAPwAAgD8AAAAAAAAAgPn/sbQ3PDw0AACAP/r/n7P//38/AAAAgAAAAAD//38/AAAAgP//sTQ3PDw0AACAPwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgL8AAAAAAAAAgPn/sbQ3PDw0AACAPwAAAAD//38/AAAAgAAAgL8AAAAAAAAAgAAAxLQAAAAAAACAPwHjsrMX+WQ/jfnkPgAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAgL8AAAAAAAAAgAAAAAD//38/AAAAgAAAAAAAAIC/AAAAgPr/n7P//38/AAAAgAAAAAD//38/AAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/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AAAAAI/C9T3+/3+/AAAAAI/C9T3+/3+/zcwMQMzMzD3+/3+/zcwMQMzMzD3+/3+/zcwMQMzMzD3+/3+/hesBQMzMzD3+/3+/hesBQMzMzD3+/3+/hesBQMzMzD3+/3+/hesBQMzMzD3+/3+/kML1PY/C9T3+/3+/kML1PY/C9T3+/3+/kML1PY/C9T3+/3+/kML1PY/C9T3+/3+/uB4FPszMzD3+/3+/uB4FPszMzD3+/3+/uB4FPszMzD3+/3+/uB4FPszMzD0AAIA/zcwMQMzMzD0AAIA/zcwMQMzMzD0AAIA/zcwMQMzMzD0AAIA/hesBQMzMzD0AAIA/hesBQMzMzD0AAIA/hesBQMzMzD0AAIA/uB4FPszMzD0AAIA/uB4FPszMzD0AAIA/uB4FPszMzD0AAIA/kML1PY/C9T0AAIA/kML1PY/C9T0AAIA/kML1PY/C9T0AAIA/AAAAAI/C9T0AAIA/AAAAAI/C9T0AAIA/AAAAAI/C9T21HmW/zcwMQMzMzD21HmW/zcwMQMzMzD24HmU/zcwMQMzMzD24HmU/zcwMQMzMzD24HmU/hesBQMzMzD24HmU/hesBQMzMzD24HmU/hesBQMzMzD24HmU/hesBQMzMzD21HmW/hesBQMzMzD21HmW/hesBQMzMzD21HmW/hesBQMzMzD21HmW/hesBQMzMzD24HmU/uB4FPszMzD24HmU/uB4FPszMzD24HmU/uB4FPszMzD24HmU/uB4FPszMzD21HmW/uB4FPszMzD21HmW/uB4FPszMzD21HmW/uB4FPszMzD21HmW/uB4FPszMzD21HmW/kML1PY/C9T21HmW/kML1PY/C9T21HmW/kML1PY/C9T21HmW/kML1PY/C9T24HmU/kML1PY/C9T24HmU/kML1PY/C9T24HmU/kML1PY/C9T24HmU/kML1PY/C9T21HmW/AAAAAI/C9T21HmW/AAAAAI/C9T21HmW/AAAAAI/C9T24HmU/AAAAAI/C9T24HmU/AAAAAI/C9T24HmU/AAAAAI/C9T0AAIC/ZmZmP8zMzD0AAIC/ZmZmP8zMzD0AAIC/ZmZmP8zMzD0AAIC/ZmZmP8zMzD0AAIA/ZmZmP8zMzD0AAIA/ZmZmP8zMzD0AAIA/ZmZmP8zMzD21HmW/ZmZmP1WjzD21HmW/ZmZmP1WjzD21HmW/ZmZmP1WjzD21HmW/ZmZmP1WjzD21HmW/ZmZmP1WjzD24HmU/ZmZmP1WjzD24HmU/ZmZmP1WjzD24HmU/ZmZmP1WjzD24HmU/ZmZmP1WjzD24HmU/ZmZmP1WjzD0AAAAAzcwMQMzMzD0AAAAAzcwMQMzMzD0AAAAAzcwMQMzMzD0AAAAAhesBQMzMzD0AAAAAhesBQMzMzD0AAAAAhesBQMzMzD0AAAAAhesBQMzMzD0AAAAAuB4FPszMzD0AAAAAuB4FPszMzD0AAAAAuB4FPszMzD0AAAAAuB4FPszMzD0AAAAAkML1PY/C9T0AAAAAkML1PY/C9T0AAAAAkML1PY/C9T0AAAAAkML1PY/C9T0AAAAAAAAAAI/C9T0AAAAAAAAAAI/C9T0AAAAAAAAAAI/C9T0AAIAzZmZmP1WjzD0AAIAzZmZmP1WjzD0AAIAzZmZmP1WjzD0AAIAzZmZmP1WjzD0vHGe/6iUCQPz8Zj3zKFy/Urj+P/z8Zj3zKFy/Urj+P/z8Zj3zKFy/Urj+P/z8Zj0vHGc/6iUCQP38Zj0vHGc/6iUCQP38Zj0vHGe/6iUCQGH5h70vHGe/6iUCQGH5h70wHGe/0nxlP/z8Zj3zKFy/16NwP/z8Zj3zKFy/16NwP/z8Zj3zKFy/16NwP/z8Zj0uHGc/0nxlP/38Zj0uHGc/0nxlP/38Zj0wHGe/0nxlP2H5h73zKFy/16NwP2H5h73zKFy/16NwP2H5h73zKFy/16NwP2H5h70uHGc/0nxlP2H5h70vHGc/6iUCQGH5h73yKFw/16NwP2H5h73yKFw/16NwP2H5h73yKFw/16NwP2H5h73zKFw/Urj+P2H5h73zKFw/Urj+P2H5h73zKFw/Urj+P2H5h73yKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzzKFy/16NwP8aQ+bzzKFy/16NwP8aQ+bzzKFy/16NwP8aQ+bzyKFw/16NwP0Klp7zyKFw/16NwP0Klp7zyKFw/16NwP0Klp7zzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP0Klp7yYxGA/16NwP0Klp7yYxGA/16NwP0Klp7yYxGA/Urj+P8aQ+byYxGA/Urj+P8aQ+byYxGA/Urj+P8aQ+byYxGA/Urj+P0Klp7yYxGA/Urj+P0Klp7yYxGA/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFw/Urj+P25zKzzzKFw/Urj+P25zKzzzKFw/Urj+P25zKzzyKFw/16NwP25zKzzyKFw/16NwP25zKzzyKFw/16NwP25zKzzzKFw/Urj+PzylpzzzKFw/Urj+PzylpzzzKFw/Urj+PzylpzzzKFy/Urj+P25zKzzzKFy/Urj+P25zKzzzKFy/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/16NwP25zKzyYxGA/16NwP25zKzyYxGA/16NwP25zKzyYxGA/Urj+PzylpzyYxGA/Urj+PzylpzyYxGA/Urj+PzylpzyYxGA/16NwPzylpzyYxGA/16NwPzylpzyYxGA/16NwPzylpzzyKFw/16NwPzylpzzyKFw/16NwPzylpzzyKFw/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzyKFw/16NwP/38Zj3yKFw/16NwP/38Zj3yKFw/16NwP/38Zj3yKFw/16NwP/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFy/16NwP25zKzzzKFy/16NwP25zKzzzKFy/16NwP25zKzzzKFy/Urj+PzylpzzzKFy/Urj+PzylpzzzKFy/Urj+PzylpzyZxGC/16NwPzylpzyZxGC/16NwPzylpzyZxGC/16NwPzylpzyZxGC/16NwP25zKzyZxGC/16NwP25zKzyZxGC/16NwP25zKzyYxGC/Urj+PzylpzyYxGC/Urj+PzylpzyYxGC/Urj+PzylpzyYxGC/Urj+P25zKzyYxGC/Urj+P25zKzyYxGC/Urj+P25zKzzzKFy/16NwP0Klp7zzKFy/16NwP0Klp7zzKFy/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP8aQ+byZxGC/16NwP8aQ+byZxGC/16NwP8aQ+byYxGC/Urj+P0Klp7yYxGC/Urj+P0Klp7yYxGC/Urj+P0Klp7yYxGC/Urj+P8aQ+byYxGC/Urj+P8aQ+byYxGC/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P2H5h73zKFy/Urj+P2H5h73zKFy/Urj+P2H5h73zKFy/Urj+P2H5h70AAAAA6iUCQPz8Zj0AAAAA6iUCQPz8Zj0AAAAAUrj+P0Klp7wAAAAAUrj+P25zKzwAAAAAUrj+P/z8Zj0AAAAAUrj+P/z8Zj0AAAAAUrj+P/z8Zj0AAAAAUrj+PzylpzwAAAAAUrj+P8aQ+bwAAAAAUrj+P8aQ+bwAAAAAUrj+P2H5h70AAAAAUrj+P2H5h70AAAAAUrj+P2H5h70AAAAA6iUCQGH5h70AAAAA6iUCQGH5h70AAICz0nxlP/z8Zj0AAICz0nxlP/z8Zj0AAICz0nxlP2H5h70AAICz16NwP2H5h70AAICz16NwP2H5h70AAICz16NwP2H5h70AAICz16NwP8aQ+bwAAICz16NwP8aQ+bwAAICz16NwPzylpzwAAICz16NwPzylpzwAAICz16NwP/z8Zj0AAICz16NwP/z8Zj0AAICz16NwP/z8Zj0AAICz16NwP/z8Zj0AAICz16NwP25zKzwAAICz16NwP0Klp7x+JV2/1BYAQE5127t+JV2/1BYAQE5127t+JV2/1BYAQE5127t+JV2/1BYAQE5127uUB1W/E/H6P05127uUB1W/E/H6P05127uUB1W/E/H6P05127uUB1W/E/H6P05127t+JV2/1BYAQBleMb1+JV2/1BYAQBleMb1+JV2/1BYAQBleMb1+JV2/1BYAQBleMb1+JV2/JNm4P05127t+JV2/JNm4P05127t+JV2/JNm4P05127t+JV2/JNm4P05127sGiJO+1BYAQE5127sGiJO+1BYAQE5127sGiJO+1BYAQE5127sGiJO+1BYAQE5127vaw6O+E/H6P05127vaw6O+E/H6P05127vaw6O+E/H6P05127vaw6O+E/H6P05127sGiJO+1BYAQBleMb0GiJO+1BYAQBleMb0GiJO+1BYAQBleMb0GiJO+1BYAQBleMb0HiJO+JNm4P05127sHiJO+JNm4P05127sHiJO+JNm4P05127sHiJO+JNm4P05127vaw6O+uhW+P05127vaw6O+uhW+P05127vaw6O+uhW+P05127vaw6O+uhW+P05127sHiJO+JNm4PxleMb0HiJO+JNm4PxleMb0HiJO+JNm4PxleMb0HiJO+JNm4PxleMb3aw6O+uhW+PxleMb3aw6O+uhW+PxleMb3aw6O+uhW+PxleMb3aw6O+uhW+PxleMb1+JV2/JNm4PxleMb1+JV2/JNm4PxleMb1+JV2/JNm4PxleMb1+JV2/JNm4PxleMb2UB1W/uhW+PxleMb2UB1W/uhW+PxleMb2UB1W/uhW+PxleMb2UB1W/uhW+PxleMb2UB1W/uhW+P05127uUB1W/uhW+P05127uUB1W/uhW+P05127uUB1W/uhW+P05127uUB1W/E/H6PxleMb2UB1W/E/H6PxleMb2UB1W/E/H6PxleMb2UB1W/E/H6PxleMb3aw6O+E/H6PxleMb3aw6O+E/H6PxleMb3aw6O+E/H6PxleMb3aw6O+E/H6PxleMb1+JV2/pI29P2doCD1+JV2/pI29P2doCD1+JV2/pI29P2doCD2UB1W/D1G4P2doCD2UB1W/D1G4P2doCD2UB1W/D1G4P2doCD1+JV2/pI29P5RwWLt+JV2/pI29P5RwWLt+JV2/pI29P5RwWLt+JV2/pI29P5RwWLt+JV2/QHJsP2doCD1+JV2/QHJsP2doCD1+JV2/QHJsP2doCD1+JV2/QHJsP2doCD2UB1W/D1G4P5RwWLuUB1W/D1G4P5RwWLuUB1W/D1G4P5RwWLuUB1W/D1G4P5RwWLuUB1W/bOt2P5RwWLuUB1W/bOt2P5RwWLuUB1W/bOt2P5RwWLuUB1W/bOt2P5RwWLt+JV2/QHJsP5RwWLt+JV2/QHJsP5RwWLt+JV2/QHJsP5RwWLt+JV2/QHJsP5RwWLuUB1W/bOt2P2doCD2UB1W/bOt2P2doCD2UB1W/bOt2P2doCD2UB1W/bOt2P2doCD0HiJO+QHJsP2doCD0HiJO+QHJsP2doCD0HiJO+QHJsP2doCD0HiJO+QHJsP2doCD0GiJO+pI29P2doCD0GiJO+pI29P2doCD0GiJO+pI29P2doCD0GiJO+pI29P2doCD3aw6O+bOt2P2doCD3aw6O+bOt2P2doCD3aw6O+bOt2P2doCD3aw6O+bOt2P2doCD0HiJO+QHJsP5RwWLsHiJO+QHJsP5RwWLsHiJO+QHJsP5RwWLsHiJO+QHJsP5RwWLsGiJO+pI29P5RwWLsGiJO+pI29P5RwWLsGiJO+pI29P5RwWLsGiJO+pI29P5RwWLvaw6O+bOt2P5RwWLvaw6O+bOt2P5RwWLvaw6O+bOt2P5RwWLvaw6O+bOt2P5RwWLvaw6O+D1G4P5RwWLvaw6O+D1G4P5RwWLvaw6O+D1G4P5RwWLvaw6O+D1G4P5RwWLvaw6O+D1G4P2doCD3aw6O+D1G4P2doCD3aw6O+D1G4P2doCD3aw6O+D1G4P2doCD0yyRa/4xK6P1TF9DwyyRa/4xK6P1TF9DwyyRa/4xK6P4Bn/TgyyRa/4xK6P4Bn/ThPIBC/4xK6P4Bn/ThPIBC/4xK6P4Bn/TgyyRa/xGdzP4Bn/TgyyRa/xGdzP4Bn/ThPIBC/xGdzP4Bn/ThPIBC/xGdzP4Bn/TgyyRa/xGdzP1TF9DwyyRa/xGdzP1TF9DxPIBC/xGdzP1TF9DxPIBC/xGdzP1TF9DxPIBC/4xK6P1TF9DxPIBC/4xK6P1TF9DyDYZO+1BYAQE5127uDYZO+1BYAQE5127uDYZO+1BYAQE5127uDYZO+1BYAQE5127uwJYO+E/H6P05127uwJYO+E/H6P05127uwJYO+E/H6P05127uwJYO+E/H6P05127uDYZO+1BYAQBleMb2DYZO+1BYAQBleMb2DYZO+1BYAQBleMb2DYZO+1BYAQBleMb2DYZO+JNm4P05127uDYZO+JNm4P05127uDYZO+JNm4P05127uDYZO+JNm4P05127txYZM+1BYAQE5127txYZM+1BYAQE5127txYZM+1BYAQE5127txYZM+1BYAQE5127ueJYM+E/H6P05127ueJYM+E/H6P05127ueJYM+E/H6P05127ueJYM+E/H6P05127txYZM+1BYAQBleMb1xYZM+1BYAQBleMb1xYZM+1BYAQBleMb1xYZM+1BYAQBleMb1xYZM+JNm4P05127txYZM+JNm4P05127txYZM+JNm4P05127txYZM+JNm4P05127ueJYM+uhW+P05127ueJYM+uhW+P05127ueJYM+uhW+P05127ueJYM+uhW+P05127txYZM+JNm4PxleMb1xYZM+JNm4PxleMb1xYZM+JNm4PxleMb1xYZM+JNm4PxleMb2eJYM+uhW+PxleMb2eJYM+uhW+PxleMb2eJYM+uhW+PxleMb2eJYM+uhW+PxleMb2DYZO+JNm4PxleMb2DYZO+JNm4PxleMb2DYZO+JNm4PxleMb2DYZO+JNm4PxleMb2wJYO+uhW+PxleMb2wJYO+uhW+PxleMb2wJYO+uhW+PxleMb2wJYO+uhW+PxleMb2wJYO+uhW+P05127uwJYO+uhW+P05127uwJYO+uhW+P05127uwJYO+uhW+P05127uwJYO+E/H6PxleMb2wJYO+E/H6PxleMb2wJYO+E/H6PxleMb2wJYO+E/H6PxleMb2eJYM+E/H6PxleMb2eJYM+E/H6PxleMb2eJYM+E/H6PxleMb2eJYM+E/H6PxleMb2DYZO+pI29P2doCD2DYZO+pI29P2doCD2DYZO+pI29P2doCD2DYZO+pI29P2doCD2wJYO+D1G4P2doCD2wJYO+D1G4P2doCD2wJYO+D1G4P2doCD2wJYO+D1G4P2doCD2DYZO+pI29P5RwWLuDYZO+pI29P5RwWLuDYZO+pI29P5RwWLuDYZO+pI29P5RwWLuDYZO+QHJsP2doCD2DYZO+QHJsP2doCD2DYZO+QHJsP2doCD2DYZO+QHJsP2doCD2wJYO+D1G4P5RwWLuwJYO+D1G4P5RwWLuwJYO+D1G4P5RwWLuwJYO+D1G4P5RwWLuwJYO+bOt2P5RwWLuwJYO+bOt2P5RwWLuwJYO+bOt2P5RwWLuwJYO+bOt2P5RwWLuDYZO+QHJsP5RwWLuDYZO+QHJsP5RwWLuDYZO+QHJsP5RwWLuDYZO+QHJsP5RwWLuwJYO+bOt2P2doCD2wJYO+bOt2P2doCD2wJYO+bOt2P2doCD2wJYO+bOt2P2doCD1xYZM+QHJsP2doCD1xYZM+QHJsP2doCD1xYZM+QHJsP2doCD1xYZM+QHJsP2doCD1xYZM+pI29P2doCD1xYZM+pI29P2doCD1xYZM+pI29P2doCD1xYZM+pI29P2doCD2eJYM+bOt2P2doCD2eJYM+bOt2P2doCD2eJYM+bOt2P2doCD2eJYM+bOt2P2doCD1xYZM+QHJsP5RwWLtxYZM+QHJsP5RwWLtxYZM+QHJsP5RwWLtxYZM+QHJsP5RwWLtxYZM+pI29P5RwWLtxYZM+pI29P5RwWLtxYZM+pI29P5RwWLtxYZM+pI29P5RwWLueJYM+bOt2P5RwWLueJYM+bOt2P5RwWLueJYM+bOt2P5RwWLueJYM+bOt2P5RwWLueJYM+D1G4P5RwWLueJYM+D1G4P5RwWLueJYM+D1G4P5RwWLueJYM+D1G4P5RwWLueJYM+D1G4P2doCD2eJYM+D1G4P2doCD2eJYM+D1G4P2doCD2eJYM+D1G4P2doCD1mHVW84xK6P1TF9DxmHVW84xK6P1TF9DxmHVW84xK6P4Bn/ThmHVW84xK6P4Bn/ThmG1U84xK6P4Bn/ThmG1U84xK6P4Bn/ThmHVW8xGdzP4Bn/ThmHVW8xGdzP4Bn/ThmG1U8xGdzP4Bn/ThmG1U8xGdzP4Bn/ThmHVW8xGdzP1TF9DxmHVW8xGdzP1TF9DxmG1U8xGdzP1TF9DxmG1U8xGdzP1TF9DxmG1U84xK6P1TF9DxmG1U84xK6P1TF9Dzxh5M+1BYAQE5127vxh5M+1BYAQE5127vxh5M+1BYAQE5127vxh5M+1BYAQE5127vFw6M+E/H6P05127vFw6M+E/H6P05127vFw6M+E/H6P05127vFw6M+E/H6P05127vxh5M+1BYAQBleMb3xh5M+1BYAQBleMb3xh5M+1BYAQBleMb3xh5M+1BYAQBleMb3xh5M+JNm4P05127vxh5M+JNm4P05127vxh5M+JNm4P05127vxh5M+JNm4P05127tzJV0/1BYAQE5127tzJV0/1BYAQE5127tzJV0/1BYAQE5127tzJV0/1BYAQE5127uJB1U/E/H6P05127uJB1U/E/H6P05127uJB1U/E/H6P05127uJB1U/E/H6P05127tzJV0/1BYAQBleMb1zJV0/1BYAQBleMb1zJV0/1BYAQBleMb1zJV0/1BYAQBleMb1zJV0/JNm4P05127tzJV0/JNm4P05127tzJV0/JNm4P05127tzJV0/JNm4P05127uJB1U/uhW+P05127uJB1U/uhW+P05127uJB1U/uhW+P05127uJB1U/uhW+P05127tzJV0/JNm4PxleMb1zJV0/JNm4PxleMb1zJV0/JNm4PxleMb1zJV0/JNm4PxleMb2JB1U/uhW+PxleMb2JB1U/uhW+PxleMb2JB1U/uhW+PxleMb2JB1U/uhW+PxleMb3xh5M+JNm4PxleMb3xh5M+JNm4PxleMb3xh5M+JNm4PxleMb3xh5M+JNm4PxleMb3Bw6M+uhW+PxleMb3Bw6M+uhW+PxleMb3Bw6M+uhW+PxleMb3Bw6M+uhW+PxleMb3Bw6M+uhW+P05127vBw6M+uhW+P05127vBw6M+uhW+P05127vBw6M+uhW+P05127vFw6M+E/H6PxleMb3Fw6M+E/H6PxleMb3Fw6M+E/H6PxleMb3Fw6M+E/H6PxleMb2JB1U/E/H6PxleMb2JB1U/E/H6PxleMb2JB1U/E/H6PxleMb2JB1U/E/H6PxleMb3xh5M+pI29P2doCD3xh5M+pI29P2doCD3xh5M+pI29P2doCD3xh5M+pI29P2doCD3Fw6M+D1G4P2doCD3Fw6M+D1G4P2doCD3Fw6M+D1G4P2doCD3Fw6M+D1G4P2doCD3xh5M+pI29P5RwWLvxh5M+pI29P5RwWLvxh5M+pI29P5RwWLvxh5M+pI29P5RwWLvxh5M+QHJsP2doCD3xh5M+QHJsP2doCD3xh5M+QHJsP2doCD3Fw6M+D1G4P5RwWLvFw6M+D1G4P5RwWLvFw6M+D1G4P5RwWLvFw6M+D1G4P5RwWLvBw6M+bOt2P5RwWLvBw6M+bOt2P5RwWLvBw6M+bOt2P5RwWLvBw6M+bOt2P5RwWLvxh5M+QHJsP5RwWLvxh5M+QHJsP5RwWLvxh5M+QHJsP5RwWLvxh5M+QHJsP5RwWLvBw6M+bOt2P2doCD3Bw6M+bOt2P2doCD3Bw6M+bOt2P2doCD1zJV0/QHJsP2doCD1zJV0/QHJsP2doCD1zJV0/QHJsP2doCD1zJV0/pI29P2doCD1zJV0/pI29P2doCD1zJV0/pI29P2doCD1zJV0/pI29P2doCD2JB1U/bOt2P2doCD2JB1U/bOt2P2doCD2JB1U/bOt2P2doCD1zJV0/QHJsP5RwWLtzJV0/QHJsP5RwWLtzJV0/QHJsP5RwWLtzJV0/QHJsP5RwWLtzJV0/pI29P5RwWLtzJV0/pI29P5RwWLtzJV0/pI29P5RwWLtzJV0/pI29P5RwWLuJB1U/bOt2P5RwWLuJB1U/bOt2P5RwWLuJB1U/bOt2P5RwWLuJB1U/bOt2P5RwWLuJB1U/D1G4P5RwWLuJB1U/D1G4P5RwWLuJB1U/D1G4P5RwWLuJB1U/D1G4P5RwWLuJB1U/D1G4P2doCD2JB1U/D1G4P2doCD2JB1U/D1G4P2doCD2JB1U/D1G4P2doCD1EIBA/4xK6P1TF9DxEIBA/4xK6P1TF9DxEIBA/4xK6P4Bn/ThEIBA/4xK6P4Bn/TgnyRY/4xK6P4Bn/TgnyRY/4xK6P4Bn/ThEIBA/xGdzP4Bn/ThEIBA/xGdzP4Bn/TgnyRY/xGdzP4Bn/TgnyRY/xGdzP4Bn/ThEIBA/xGdzP1TF9DxEIBA/xGdzP1TF9DwnyRY/xGdzP1TF9DwnyRY/xGdzP1TF9DwnyRY/4xK6P1TF9DwnyRY/4xK6P1TF9DwyyRa/d1j8P63RJbwyyRa/d1j8P63RJbwyyRa/d1j8P2FYI70yyRa/d1j8P2FYI71PIBC/d1j8P2FYI71PIBC/d1j8P2FYI70yyRa/dvm7P2FYI70yyRa/dvm7P2FYI71PIBC/dvm7P2FYI71PIBC/dvm7P2FYI70yyRa/dvm7P63RJbwyyRa/dvm7P63RJbxPIBC/dvm7P63RJbxPIBC/dvm7P63RJbxPIBC/d1j8P63RJbxPIBC/d1j8P63RJbxmHVW8d1j8P63RJbxmHVW8d1j8P63RJbxmHVW8d1j8P2FYI71mHVW8d1j8P2FYI71mG1U8d1j8P2FYI71mG1U8d1j8P2FYI71mHVW8dvm7P2FYI71mHVW8dvm7P2FYI71mG1U8dvm7P2FYI71mG1U8dvm7P2FYI71mHVW8dvm7P63RJbxmHVW8dvm7P63RJbxmG1U8dvm7P63RJbxmG1U8dvm7P63RJbxmG1U8d1j8P63RJbxmG1U8d1j8P63RJbxEIBA/d1j8P63RJbxEIBA/d1j8P63RJbxEIBA/d1j8P2FYI71EIBA/d1j8P2FYI70nyRY/d1j8P2FYI70nyRY/d1j8P2FYI71EIBA/dvm7P2FYI71EIBA/dvm7P2FYI70nyRY/dvm7P2FYI70nyRY/dvm7P2FYI71EIBA/dvm7P63RJbxEIBA/dvm7P63RJbwnyRY/dvm7P63RJbwnyRY/dvm7P63RJbwnyRY/d1j8P63RJbwnyRY/d1j8P63RJbz+/3+/AAAAAAAAAID+/3+/AAAAAAAAAID+/3+/zcwMQAAAAID+/3+/zcwMQAAAAID+/3+/hesBQAAAAID+/3+/hesBQAAAAID+/3+/kML1PQDcpbj+/3+/kML1PQDcpbj+/3+/uB4FPgAAAID+/3+/uB4FPgAAAIAAAIA/zcwMQAAAAIAAAIA/zcwMQAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/uB4FPgAAAIAAAIA/kML1PQAAAIAAAIA/hesBQAAAAIC1HmW/zcwMQAAAAIC5HmU/zcwMQAAAAIC1HmW/AAAAAAAAAIC4HmU/AAAAAAAAAIAAAIA/ZmZmPwDcpbj+/3+/ZmZmPwAAAID+/3+/ZmZmPwAAAIAAAAAAzcwMQAAAAIAAAAAAAAAAAAAAAIC4HmU/hesBQAAAAIC4HmU/hesBQAAAAIC4HmU/ZmZmPwAAAIC4HmU/ZmZmPwAAAIC1HmW/ZmZmPwAAAIC1HmW/ZmZmPwAAAIC1HmW/hesBQAAAAIC1HmW/hesBQAAAAIAAAIAzhesBQAAAAIAAAIAzhesBQAAAAIAAAIAzZmZmPwAAAIAAAIAzZmZmPwAAAID+/3+/AAAAAI7C9b3+/3+/AAAAAI7C9b3+/3+/AAAAAI7C9b3+/3+/zswMQMzMzL3+/3+/zswMQMzMzL3+/3+/zswMQMzMzL3+/3+/hesBQMzMzL3+/3+/hesBQMzMzL3+/3+/hesBQMzMzL3+/3+/kML1PY7C9b3+/3+/kML1PY7C9b3+/3+/kML1PY7C9b3+/3+/kML1PY7C9b3+/3+/uB4FPszMzL3+/3+/uB4FPszMzL3+/3+/uB4FPszMzL0AAIA/kML1PY7C9b0AAIA/kML1PY7C9b0AAIA/kML1PY7C9b0AAIA/kML1PY7C9b0AAIA/uB4FPszMzL0AAIA/uB4FPszMzL0AAIA/uB4FPszMzL0AAIA/hesBQMzMzL0AAIA/hesBQMzMzL0AAIA/hesBQMzMzL0BAIA/zswMQMzMzL0BAIA/zswMQMzMzL0BAIA/zswMQMzMzL0AAIA/AAAAAI7C9b0AAIA/AAAAAI7C9b0AAIA/AAAAAI7C9b24HmU/kML1PY7C9b24HmU/kML1PY7C9b24HmU/kML1PY7C9b24HmU/kML1PY7C9b21HmW/kML1PY7C9b21HmW/kML1PY7C9b21HmW/kML1PY7C9b21HmW/kML1PY7C9b21HmW/uB4FPszMzL21HmW/uB4FPszMzL21HmW/uB4FPszMzL21HmW/uB4FPszMzL24HmU/uB4FPszMzL24HmU/uB4FPszMzL24HmU/uB4FPszMzL21HmW/hesBQMzMzL21HmW/hesBQMzMzL21HmW/hesBQMzMzL21HmW/hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL21HmW/AAAAAI7C9b21HmW/AAAAAI7C9b21HmW/AAAAAI7C9b24HmU/AAAAAI7C9b24HmU/AAAAAI7C9b24HmU/AAAAAI7C9b26HmU/zswMQMzMzL26HmU/zswMQMzMzL26HmU/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL3+/3+/ZmZmP8zMzL3+/3+/ZmZmP8zMzL3+/3+/ZmZmP8zMzL0AAIA/ZmZmP8zMzL0AAIA/ZmZmP8zMzL0AAIA/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL24HmU/ZmZmP8zMzL24HmU/ZmZmP8zMzL24HmU/ZmZmP8zMzL0AAACmzswMQMzMzL0AAACmzswMQMzMzL0AAACmzswMQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmAAAAAI7C9b0AAACmAAAAAI7C9b0AAACmAAAAAI7C9b0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL3+/3+/AAAAAAAAAC/+/3+/AAAAAAAAAC/+/3+/zswMQACAB7H+/3+/zswMQACAB7H+/3+/hesBQAAAAC/+/3+/hesBQAAAAC/+/3+/kML1PQAAAC/+/3+/kML1PQAAAC/+/3+/uB4FPgAAAC8AAIA/zswMQAAAAC8AAIA/zswMQAAAAC8AAIA/AAAAAAAAAC8AAIA/AAAAAAAAAC8AAIA/uB4FPgAAAC8AAIA/kML1PQAAAC8AAIA/kML1PQAAAC8AAIA/hesBQAAAAC8AAIA/hesBQAAAAC+1HmW/zswMQAAAAC+1HmW/zswMQAAAAC+5HmU/zswMQAAAAC+1HmW/AAAAAAAAAC+4HmU/AAAAAAAAAC8AAIA/ZmZmPwAAAC8AAIA/ZmZmPwAAAC/+/3+/ZmZmPwAAAC/+/3+/ZmZmPwAAAC8AAACmzswMQAAAAIAAAACmAAAAAAAAAIC4HmU/hesBQAAAAIC4HmU/hesBQAAAAIC4HmU/ZmZmPwAAAIC4HmU/ZmZmPwAAAIC1HmW/ZmZmPwAAAIC1HmW/ZmZmPwAAAIC1HmW/hesBQAAAAIC1HmW/hesBQAAAAIAAAACmhesBQAAAAIAAAACmhesBQAAAAIAAAACmZmZmPwAAAIAAAACmZmZmPwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAAAA//9/vwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/vwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL///3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAID//3+/doxiMwAAAIAAAAAAAAAAAAAAgD+Sc8U5GM0SuP7/fz8AAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAMvlkPyX55D4AAIC/2Tums9DKT7UAAIC/AAAAAAAAAIAAAAAAMvlkPyX55D6Vc8U5eG9XOP//fz8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAICSc8W5GM0SuP7/fz8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAICec8W5gm9XOP7/fz8AAAAAMflkPyT55D4AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAMflkPyT55D4AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAICSc8W5GM0SuP7/fz8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD+Sc8U5GM0SuP7/fz8AAIA/AAAAAAAAAICec8W5gm9XOP7/fz8AAAAAMmrXOAAAgD8AAAAAMflkPyT55D4AAAAAMvlkPyX55D4AAAAAPWPXOP//fz8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D6Vc8U5eG9XOP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D4AAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAMflkPyT55D4AAAAAMvlkPyX55D4AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAIC/2Tums9DKT7X//3+/doxiMwAAAICSc8U5GM0SuP7/fz+Vc8U5eG9XOP//fz+ec8W5gm9XOP7/fz+Sc8W5GM0SuP7/fz8AAIA/AAAAAAAAAIAAAAAAPWPXOP//fz8AAAAA//9/PwAAAICSc8U5GM0SuP7/fz+Vc8U5eG9XOP//fz8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAICec8W5gm9XOP7/fz+Sc8W5GM0SuP7/fz8AAAAAMmrXOAAAgD8AAAAA//9/PwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAPWPXOP//fz8AAAAAMmrXOAAAgD8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D4AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D4AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAPWPXOP//fz8AAAAAMmrXOAAAgD8AAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIDGOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAxVnQsgAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIDFOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIC/Pc9zMwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/Ps9zMwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIC/Ps9zMwAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/Ps9zMwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/Ps9zMwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/Pc9zMwAAAIDFOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIDGOZGxAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/Pc9zswAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIA/Pc9zswAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAxVnQsgAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIDGOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAACAvwAAAIDGOZGxAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAA//9/vwAAAIAAAAAAxVnQsgAAgL8AAAAAAAAAAAAAgL8AAAAAxVnQsgAAgL8AAAAAAAAAAAAAgL/FOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAAAA//9/PwAAAIAAAAAAAACAPwAAAIDFOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAPqngsQAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAAAACAvwAAAIAAAAAAPqngsQAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAAAA//9/PwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAfwcSMgAAgD8AAAAAPqngsQAAgD8AAAAAkFJ0sAAAgD8AAAAA//9/PwAAAIAAAIA/TbFlswAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAPqngsQAAgD8AAAAAkFJ0sAAAgD8AAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAAAA//9/PwAAAIAAAIA/TbFlswAAAIAAAAAAAACAvwAAAIAAAAAAkFJ0sAAAgD8AAAAAfwcSMgAAgD8AAIA/TbFlswAAAIAAAIC/AAAAAAAAAIAAAAAAkFJ0sAAAgD8AAAAAfwcSMgAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAJkMdswAAgL8AAAAAAAAAAAAAgL8AAIA/TbFlswAAAIAAAIC/AAAAAAAAAIAAAAAAJkMdswAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAJkMdswAAgL8AAAAAAAAAAAAAgL8AAAAAJkMdswAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAfwcSMgAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAdbqzswAAgD8AAAAAkFL0MQAAgD8AAIA/SrFlswAAAIAAAAAAAAAAAAAAgD8AAAAAkFL0MQAAgD8AAAAAAACAPwAAAIAAAIA/SrFlswAAAIAAAIC/AAAAAAAAAIAAAAAAdbqzswAAgD8AAAAAkFL0MQAAgD8AAAAAAACAPwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAIA/SrFlswAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/SrFlswAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAkFL0MQAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAA8ssGMQAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAA8ssGMQAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA6zFKswAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA2MsGsQAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA8ssGMQAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAA8ssGMQAAgD8AAAAA6zFKswAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA2MsGsQAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA2MsGsQAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAxDFKMwAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAxDFKMwAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAxDFKMwAAgL8AAAAAAAAAAAAAgL8AAAAAxDFKMwAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAA2MsGsQAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA6zFKswAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA6zFKswAAgL8AAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAmLqzMwAAgD8AAAAA//9/PwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAmLqzMwAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAARUMdsQAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAARUMdsQAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAmLqzMwAAgD8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAdbqzswAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAIA/AAAAAAAAAIAAAAAARUMdsQAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAJkMdMQAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAARUMdsQAAgL8AAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAmLqzMwAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAulJ0sAAAgD8AAAAA8suGMQAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAulJ0sAAAgD8AAAAA8suGMQAAgD8AAIA/bJyGtAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA18uGsQAAgD8AAAAAulJ0sAAAgD8AAAAAAAAAAAAAgD8AAAAA8suGMQAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAA8suGMQAAgD8AAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA18uGsQAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA18uGsQAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAdLozsgAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAdLozsgAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAdLozsgAAgL8AAAAAAAAAAAAAgL8AAAAAdLozsgAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/bJyGtAAAAIAAAAAA18uGsQAAgD8AAAAAulJ0sAAAgD8AAAAAAACAPwAAAIAAAIA/bJyGtAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAIA/bJyGtAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAmLozMgAAgL8AAIC/AAAAAAAAAIAAAAAAmLqzswAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAAAACAvwAAAIAAAAAAmLqzswAAgD8AAAAAAAAAAAAAgD8AAIA/bZyGtAAAAIAAAIC/AAAAAAAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAIA/bZyGtAAAAIAAAAAAAAAAAAAAgL8AAAAAwjFKMQAAgL8AAAAAAACAPwAAAIAAAIA/bZyGtAAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAwjFKMQAAgL8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/bZyGtAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAmLqzswAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAwjFKMQAAgL8AAIA/AAAAAAAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAwjFKMQAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAA6zFKsQAAgL8AAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAmLqzswAAgD8AAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIC/AAAAAAAAAID//3+/doxiMwAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAIC/2Tums9DKT7UAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAIC/2Tums9DKT7X//3+/doxiMwAAAIAAAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL9N5eo0AACAPwAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAMPlkPyn55L4AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAMPlkPyn55L4AAAAAAAAAAAAAgL8AAAAAMPlkPyn55L7//38/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAMPlkPyn55L4AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL///38/AAAAAAAAAIAAAIA/Ijy8tAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/Ijy8tAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL///38/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAL/lkPyj55L4AAAAAMPlkPyn55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAMPlkPyn55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAMPlkPyn55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAL/lkPyj55L4AAAAAMPlkPyn55L4AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f7///38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAymH8Mv//f78AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAAAAAAAAgL8AAAAAymH8Mv//f78AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIBN5eo0AACAPwAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL///38/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAID//38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAP//f78AAAAAymH8Mv//f78AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAP//f78AAAAAymH8Mv//f78AAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAAL/lkPyj55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAL/lkPyj55L4AAAAAMvlkPyL55L4AAAAAAACAvwAAAIAAAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAAAAAACAPwAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIBN5eo0AACAPwAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/Ijy8tAAAAIAAAAAA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cDDjPiB9uD0AA/w76vxUP3lQ8z7q/FQ/AAP8O+r8VD8L2PU+6vxUPyQADAAJACQACQAYAAAABgAVAAAAFQADABsAHQAHABsABwACAA4AFAARAA4AEQALACMAFwAIACMACAAfACcAIQASACcAEgANAAUAFgAgAAUAIAAmABMAIgAeABMAHgAQAAoADwAcAAoAHAAaAAQAJQAZAAQAGQABACEDKQNMACEDTAA7AG8AeABVAG8AVQBAAEMAYgBqAEMAagBHADoASwBQADoAUAA+AEEAVwBjAEEAYwBEACwDJwM/ACwDPwBxAF4ANAAqAF4AKgBnAHUAbgA5AHUAOQBcAFsAOAA1AFsANQBgAEkALAAwAEkAMABSAIYAigBkAIYAZABYAC8DfgBMAC8DTAApA4cAjABpAIcAaQBhAI8AhABWAI8AVgB6ADwDNQNzADwDcwCRAHwAgQBQAHwAUABLACgDGgMtACgDLQBKADEDMwN3ADEDdwBNAFMAMQBtAFMAbQB0ACUDLANxACUDcQBCAD0ATgB5AD0AeQBwADYDOANUADYDVAB2ADkDMgNPADkDTwB/ADcDOgOAADcDgABRAEkAUgCCAEkAggB9ACgDSgB+ACgDfgAvAzQDOwOQADQDkAB7AHIAWQCDAHIAgwCOAF0AZgCNAF0AjQCIAFoAXwCJAFoAiQCFAJQAkgCaAJQAmgCbAB8BkgCUAB8BlAAkAS4BOAGbAC4BmwCaAC8BoAChAC8BoQAwAZkAHAGhAJkAoQCgAKsApQCkAKsApACnADMBrgCoADMBqAAxAawAtgCpAKwAqQCmADQBPAG1ADQBtQCvALUAvwC8ALUAvACvAK0AuwDCAK0AwgC5ALoAvQDDALoAwwDAALgAwQDEALgAxADIAMkAxQC+AMkAvgC0ACYBIAHKACYBygAWAdEAzgDGANEAxgCzACEBIAHHACEBxwDPANIA3gDcANIA3ADQAM8A2wDhAM8A4QDVACEBJQH4ACEB+ADXAN0A4wDgAN0A4ADaANYA4gDkANYA5ADnAOgA5QDfAOgA3wDTADsBNgHoADsB6ADTADoB8ADoADoB6AA2Ae0A8QDUAO0A1ADmAJcA9ADvAJcA7wCfACMBJQHVACMB1QDzAPYA/wD8APYA/ADrAOkA+wACAekAAgH5APoAlQCdAPoAnQDsAP0AAAEGAf0ABgEDAfgAAQEEAfgABAHXANgABQH+ANgA/gD1ADsB0wC1ADsBtQA8Ac0A2QD3AM0A9wAJAbEADgELAbEACwEIAQcBCgERAQcBEQHMAAwBDwEVAQwBFQESAcsAEAETAcsAEwEXARgBFAENARgBDQGwACcBKAGqACcBqgC4AB0BGQGyAB0BsgCjACsBKQEbASsBGwGYAKUAqwAqAaUAKgEsARcBGgEoARcBKAEnAZMA+AAlAZMAJQEjAc8A1QAlAc8AJQEhAdcAygAgAdcAIAEhAbcAxwAgAbcAIAEmAZYAHgEiAZYAIgHyAPYAOwE8AfYAPAEIAZwAOQE1AZwANQHqAPYA6wA2AfYANgE7AbEACAE8AbEAPAE0AbEANAEyAbEAMgGiAKQALwEwAaQAMAGnAJ4A7gA3AZ4ANwEtAT4BQgFTAT4BUwFNAUMBPwFLAUMBSwFxAU8BVwFIAU8BSAFAAUkBPQFFAUkBRQFpAU4BVAFeAU4BXgFaAVgBUAFcAVgBXAFkAXIBTAFbAXIBWwFfAWEBWQFKAWEBSgFqAXsBVQFjAXsBYwFnAWsBbQFmAWsBZgFiAUYBdgFuAUYBbgFsAW8BcwFgAW8BYAFoAXgBRAF0AXgBdAFwAXcBRwFWAXcBVgF8AXoBUgFBAXoBQQF1AV0BUQF5AV0BeQFlAYEBfgGKAYEBigGYAYcBfQGDAYcBgwGTAacBmwGIAacBiAGUAZkBpgGyAZkBsgGRAYUBjQGPAYUBjwGVAY4BggGaAY4BmgGSAZ8BfgGBAZ8BgQG5AYkBnAGkAYkBpAGXAa4BogGeAa4BngGqAaABugGlAaABpQGdAbYBrAGoAbYBqAGwAa0BhgF/Aa0BfwGhAaMBtwGzAaMBswGvAZYBkAGxAZYBsQGpAasBtQGMAasBjAGEAbgBgAGLAbgBiwG0AcIBvgG/AcIBvwHDAcUBuwG9AcUBvQHBAccByQG8AccBvAHGAcQBwAHKAcQBygHIAc0B0QHiAc0B4gHcAdABzAHaAdAB2gEAAt0B5QHWAd0B1gHOAdcBywHTAdcB0wH3AdsB4QHtAdsB7QHpAeYB3gHqAeYB6gHyAf8B2QHoAf8B6AHsAe8B5wHYAe8B2AH4AQoC5AHwAQoC8AH0AfoB/AH1AfoB9QHxAdUBBQL7AdUB+wH5Af0BAQLuAf0B7gH2AQYC0gECAgYCAgL+AQQC1AHjAQQC4wEJAggC4AHPAQgCzwEDAusB3wEHAusBBwLzARACDAIaAhACGgIoAhcCCwITAhcCEwIjAjcCKwIYAjcCGAIkAikCNgJCAikCQgIhAhUCHQIfAhUCHwIlAh4CEgIqAh4CKgIiAjACDQIRAjACEQJKAhkCLAI0AhkCNAInAj4CMgIuAj4CLgI6Ai8CSQI1Ai8CNQItAkYCPAI4AkYCOAJAAj0CFgIOAj0CDgIxAjMCRwJDAjMCQwI/AiYCIAJBAiYCQQI5AjsCRQIcAjsCHAIUAkgCDwIbAkgCGwJEAlICTgJPAlICTwJTAlUCSwJNAlUCTQJRAlcCWQJMAlcCTAJWAlQCUAJaAlQCWgJYAl0CYQJyAl0CcgJsAmACXAJqAmACagKQAm0CdQJmAm0CZgJeAmcCWwJjAmcCYwKHAmsCcQJ9AmsCfQJ5AnYCbgJ6AnYCegKCAo8CaQJ4Ao8CeAJ8An8CdwJoAn8CaAKIApkCcwKBApkCgQKFAokCiwKEAokChAKAAmQClAKMAmQCjAKKAo0CkQJ+Ao0CfgKGApYCYgKSApYCkgKOApUCZQJ0ApUCdAKaApgCcAJfApgCXwKTAnsCbwKXAnsClwKDAqECnQKpAqECqQK2AqcCmwKjAqcCowKyAsMCuQKoAsMCqAKzArcCwgLOArcCzgKwAqUCrAKuAqUCrgK0Aq0CogK4Aq0CuAKxArwCnAKgArwCoALVAqkCugLBAqkCwQK2AsoCvwK7AsoCuwLGAr0C1gLBAr0CwQK6AtICyALEAtICxALMAskCpgKeAskCngK+AsAC0wLPAsACzwLLArUCrwLNArUCzQLFAscC0QKrAscCqwKkAtQCnwKqAtQCqgLQAt4C2gLbAt4C2wLfAuEC1wLZAuEC2QLdAuMC5QLYAuMC2ALiAuAC3ALmAuAC5gLkAu4C6gLrAu4C6wLvAvEC5wLpAvEC6QLtAvMC9QLoAvMC6ALyAvAC7AL2AvAC9gL0Av4C+gL7Av4C+wL/AgED9wL5AgED+QL9AgMDBQP4AgMD+AICAwAD/AIGAwADBgMEAw4DCgMLAw4DCwMPAxEDBwMJAxEDCQMNAxMDFQMIAxMDCAMSAxADDAMWAxADFgMUA2UAKgMwA2UAMAOLADYAawAtAzYALQMfA4sAMAMrA4sAKwNoAGUAKQAYA2UAGAMqAzwAPwAnAzwAJwMiA0UASAAkA0UAJAMmA0IARQAmA0IAJgMlAzIANwAgAzIAIAMdAygAMwAeAygAHgMXA2wALwAcA2wAHAMuA0YAaAArA0YAKwMjAy4AKwAZAy4AGQMbA6gDpgNAA6gDQANDA4cDgwNFA4cDRQNtA1QDcgN6A1QDegNXA68DugN3A68DdwNaA4QDjANyA4QDcgNUA74DqQNEA74DRAOCA6QDqwNHA6QDRwM9A6oDrANKA6oDSgNGA1sDeANdA1sDXQNNA7EDswNQA7EDUANTA7IDsANcA7IDXANPA64DtQNWA64DVgNZA3UDPwNIA3UDSANhA2MDSQNMA2MDTANnA7kDpQM+A7kDPgN0A20DRQNBA20DQQN9A04DYANrA04DawNSA5cDmwNqA5cDagNfA8ADnQN3A8ADdwO6A5QDjwN7A5QDewNzA58DlgNeA58DXgN5A5kDoAOMA5kDjANpA6wDvQOBA6wDgQNKA1EDaQOMA1EDjAOEA2UDSwODA2UDgwOHA24DfgOOA24DjgOTA2YDiAOhA2YDoQOaA3YDYgOVA3YDlQOeA7kDdAOdA7kDnQPAA2QDaAOcA2QDnAOYA38DtgO/A38DvwOQA1MDhgO8A1MDvAOxA4ADQgOnA4ADpwO3A5ADvwO4A5ADuAN8A4UDVQO0A4UDtAO7A1gDfAO4A1gDuAOtA40DogPLA40DywPEA2wDkgPKA2wDygPHA5EDcQPCA5EDwgPJA4oDbwPIA4oDyAPGA3ADiwPDA3ADwwPBA6MDiQPFA6MDxQPMA/7//74AAAAAj8L1Pf7//74AAAAAj8L1Pf7//74AAAAAj8L1Pf7//77OzAxANcrMPf7//77OzAxANcrMPf7//77OzAxANcrMPf7//76F6wFANcrMPf7//76F6wFANcrMPf7//76QwvU9j8L1Pf7//76QwvU9j8L1Pf7//76QwvU9j8L1Pf7//764HgU+rPPMPf7//764HgU+rPPMPf7//764HgU+rPPMPQAAAD/OzAxANcrMPQAAAD/OzAxANcrMPQAAAD/OzAxANcrMPQAAAD+F6wFANcrMPQAAAD+F6wFANcrMPQAAAD+4HgU+NcrMPQAAAD+4HgU+NcrMPQAAAD+4HgU+NcrMPQAAAD+QwvU9j8L1PQAAAD+QwvU9j8L1PQAAAD+QwvU9j8L1PQAAAD8AAAAAj8L1PQAAAD8AAAAAj8L1PQAAAD8AAAAAj8L1PcvMzL7OzAxANcrMPcvMzL7OzAxANcrMPc3MzD7OzAxANcrMPc3MzD7OzAxANcrMPc3MzD6F6wFANcrMPc3MzD6F6wFANcrMPc3MzD6F6wFANcrMPcvMzL6F6wFANcrMPcvMzL6F6wFANcrMPcvMzL6F6wFANcrMPc3MzD64HgU+NcrMPc3MzD64HgU+NcrMPc3MzD64HgU+NcrMPcvMzL64HgU+NcrMPcvMzL64HgU+NcrMPcvMzL64HgU+NcrMPcvMzL64HgU+NcrMPcvMzL6QwvU9j8L1PcvMzL6QwvU9j8L1PcvMzL6QwvU9j8L1Pc3MzD6QwvU9j8L1Pc3MzD6QwvU9j8L1Pc3MzD6QwvU9j8L1PcvMzL4AAAAAj8L1PcvMzL4AAAAAj8L1Pc3MzD4AAAAAj8L1Pc3MzD4AAAAAj8L1Pf7//75mZmY/NcrMPf7//75mZmY/NcrMPf7//75mZmY/NcrMPQAAAD9mZmY/NcrMPQAAAD9mZmY/NcrMPcvMzL5mZmY/NcrMPcvMzL5mZmY/NcrMPcvMzL5mZmY/NcrMPcvMzL5mZmY/NcrMPc3MzD5mZmY/NcrMPc3MzD5mZmY/NcrMPc3MzD5mZmY/NcrMPV44zr7qJQJA/PxmPV44zr7qJQJA/PxmPeZRuL5SuP4//PxmPeZRuL5SuP4//PxmPeZRuL5SuP4//PxmPeZRuL5SuP4//PxmPV44zj7qJQJA/fxmPV44zj7qJQJA/fxmPV44zr7qJQJAYfmHvV44zr7qJQJAYfmHvV84zr7SfGU//PxmPV84zr7SfGU//PxmPedRuL7Xo3A//PxmPedRuL7Xo3A//PxmPedRuL7Xo3A//PxmPedRuL7Xo3A//PxmPV04zj7SfGU//fxmPV04zj7SfGU//fxmPV84zr7SfGU/YfmHvV84zr7SfGU/YfmHvedRuL7Xo3A/YfmHvedRuL7Xo3A/YfmHvedRuL7Xo3A/YfmHvedRuL7Xo3A/YfmHvV04zj7SfGU/YfmHvV04zj7SfGU/YfmHvV44zj7qJQJAYfmHvV44zj7qJQJAYfmHveVRuD7Xo3A/YfmHveVRuD7Xo3A/YfmHveVRuD7Xo3A/YfmHveVRuD7Xo3A/YfmHveZRuD5SuP4/YfmHveZRuD5SuP4/YfmHveZRuD5SuP4/YfmHveZRuD5SuP4/YfmHveVRuD7Xo3A/xpD5vOVRuD7Xo3A/xpD5vOVRuD7Xo3A/xpD5vOVRuD7Xo3A/xpD5vOdRuL7Xo3A/xpD5vOdRuL7Xo3A/xpD5vOdRuL7Xo3A/xpD5vOdRuL7Xo3A/xpD5vOVRuD7Xo3A/QqWnvOVRuD7Xo3A/QqWnvOVRuD7Xo3A/QqWnvOVRuD7Xo3A/QqWnvOZRuD5SuP4/xpD5vOZRuD5SuP4/xpD5vOZRuD5SuP4/xpD5vOZRuD5SuP4/xpD5vDCJwT7Xo3A/xpD5vDCJwT7Xo3A/xpD5vDCJwT7Xo3A/xpD5vDCJwT7Xo3A/QqWnvDCJwT7Xo3A/QqWnvDCJwT7Xo3A/QqWnvDGJwT5SuP4/xpD5vDGJwT5SuP4/xpD5vDGJwT5SuP4/xpD5vDGJwT5SuP4/QqWnvDGJwT5SuP4/QqWnvDGJwT5SuP4/QqWnvOZRuD5SuP4/QqWnvOZRuD5SuP4/QqWnvOZRuD5SuP4/QqWnvOZRuD5SuP4/QqWnvOZRuL5SuP4/QqWnvOZRuL5SuP4/QqWnvOZRuL5SuP4/QqWnvOZRuL5SuP4/QqWnvOZRuD5SuP4/bnMrPOZRuD5SuP4/bnMrPOZRuD5SuP4/bnMrPOZRuD5SuP4/bnMrPOVRuD7Xo3A/bnMrPOVRuD7Xo3A/bnMrPOVRuD7Xo3A/bnMrPOVRuD7Xo3A/bnMrPOZRuD5SuP4/PKWnPOZRuD5SuP4/PKWnPOZRuD5SuP4/PKWnPOZRuD5SuP4/PKWnPOZRuL5SuP4/bnMrPOZRuL5SuP4/bnMrPOZRuL5SuP4/bnMrPOZRuL5SuP4/bnMrPDGJwT5SuP4/bnMrPDGJwT5SuP4/bnMrPDGJwT5SuP4/bnMrPDCJwT7Xo3A/bnMrPDCJwT7Xo3A/bnMrPDCJwT7Xo3A/bnMrPDGJwT5SuP4/PKWnPDGJwT5SuP4/PKWnPDGJwT5SuP4/PKWnPDCJwT7Xo3A/PKWnPDCJwT7Xo3A/PKWnPDCJwT7Xo3A/PKWnPOVRuD7Xo3A/PKWnPOVRuD7Xo3A/PKWnPOVRuD7Xo3A/PKWnPOVRuD7Xo3A/PKWnPOdRuL7Xo3A/PKWnPOdRuL7Xo3A/PKWnPOdRuL7Xo3A/PKWnPOdRuL7Xo3A/PKWnPOVRuD7Xo3A//fxmPeVRuD7Xo3A//fxmPeVRuD7Xo3A//fxmPeVRuD7Xo3A//fxmPeZRuD5SuP4//fxmPeZRuD5SuP4//fxmPeZRuD5SuP4//fxmPeZRuD5SuP4//fxmPedRuL7Xo3A/bnMrPOdRuL7Xo3A/bnMrPOdRuL7Xo3A/bnMrPOdRuL7Xo3A/bnMrPOZRuL5SuP4/PKWnPOZRuL5SuP4/PKWnPOZRuL5SuP4/PKWnPOZRuL5SuP4/PKWnPDKJwb7Xo3A/PKWnPDKJwb7Xo3A/PKWnPDKJwb7Xo3A/PKWnPDKJwb7Xo3A/bnMrPDKJwb7Xo3A/bnMrPDKJwb7Xo3A/bnMrPDGJwb5SuP4/PKWnPDGJwb5SuP4/PKWnPDGJwb5SuP4/PKWnPDGJwb5SuP4/bnMrPDGJwb5SuP4/bnMrPDGJwb5SuP4/bnMrPOdRuL7Xo3A/QqWnvOdRuL7Xo3A/QqWnvOdRuL7Xo3A/QqWnvOdRuL7Xo3A/QqWnvDKJwb7Xo3A/QqWnvDKJwb7Xo3A/QqWnvDKJwb7Xo3A/QqWnvDKJwb7Xo3A/xpD5vDKJwb7Xo3A/xpD5vDKJwb7Xo3A/xpD5vDGJwb5SuP4/QqWnvDGJwb5SuP4/QqWnvDGJwb5SuP4/QqWnvDGJwb5SuP4/xpD5vDGJwb5SuP4/xpD5vDGJwb5SuP4/xpD5vOZRuL5SuP4/xpD5vOZRuL5SuP4/xpD5vOZRuL5SuP4/xpD5vOZRuL5SuP4/xpD5vOZRuL5SuP4/YfmHveZRuL5SuP4/YfmHveZRuL5SuP4/YfmHveZRuL5SuP4/YfmHvd05uL6Zff4/cL8Kvd05uL6Zff4/cL8Kvd05uL6Zff4/cL8Kvd05uL6Zff4/cL8KvRXvo74mPPo/AGUkvBXvo74mPPo/AGUkvBXvo74mPPo/AGUkvBXvo74mPPo/AGUkvN05uL6gwvs/OEyCvd05uL6gwvs/OEyCvd05uL6gwvs/OEyCvd05uL6gwvs/OEyCvd05uL7chcQ/p+uUPt05uL7chcQ/p+uUPt05uL7chcQ/p+uUPt05uL7chcQ/p+uUPtc5uD6Zff4/dL8Kvdc5uD6Zff4/dL8Kvdc5uD6Zff4/dL8Kvdc5uD6Zff4/dL8KvQ/voz4mPPo/EGUkvA/voz4mPPo/EGUkvA/voz4mPPo/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//9/vwAAAADXv/CzAACAvwAAAAAAAAAA//9/vwAAAAAAAIA/AAAAgAAAgD89z/OyAAAAgAAAAADXv/CzAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAADxj7QzAACAvwAAgL89z/MyAAAAgAAAAADXv/CzAACAvwAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAADxj7QzAACAvwAAgL89z/MyAAAAgAAAAAAAAAAAAACAPwAAAAD//38/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAAAAAACAPwAAAAD//38/AAAAgAAAAAAAAIA/AAAAgAAAgD89z/OyAAAAgAAAgL8+z/MyAAAAgAAAAAAAAAAAAACAvwAAAAD//38/AAAAgAAAAAAAAIA/AAAAgAAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAPwAAgL89z/MyAAAAgAAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAgL89z/MyAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgL8+z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAvwAAgD8+z/OyAAAAgAAAgL8+z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAPwAAgL8+z/MyAAAAgAAAAAAAAAAAAACAPwAAAAD//38/AAAAgAAAAAAAAIA/AAAAgAAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIC/AAAAgAAAAAD//3+/AAAAgAAAAAAAAAAAAACAPwAAgD8+z/OyAAAAgAAAgL89z/MyAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgL89z/MyAAAAgAAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAgL89z/My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AAAAgAAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgD8iPDy0AAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAu+WQ/MvnkvgAAAAAu+WQ/LvnkvgAAAAAAAAAAAACAvwAAAAAt+WQ/NPnkvgAAAAAu+WQ/MvnkvgAAAAAAAAAAAACAvwAAAAAt+WQ/NPnkvgAAAAAu+WQ/MvnkvgAAAAAAAAAAAACAvwAAAAAu+WQ/MvnkvgAAAAAu+WQ/LvnkvgAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAnPLwyAACAvwAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAnPLwyAACAvwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAnPLwyAACAvwAAAAAAAIA/AAAAgAAAAAAAAAAAAACAvwAAAAAnPLwyAACAvwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAgD8iPDy0AAAAgAAAAAAAAIC/AAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8iPDy0AAAAgAAAgD8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgADAfz8AwH8/AMB/PwDAfz+grwA8CshuPwDAfz8AwH8/4Lj1O0AnRzwAwH8/AMB/PwDAfz8AwH8/4Lj1OxgFuT0AwH8/AMB/P6CvADyTyGI/oK8APJPIYj8AwH8/AMB/P6CvADxOXmE/4Lj1O9RaSD8dAMo+wMtNPADAfz8AwH8/AMB/PwDAfz8dAMo+qNm5PQDAfz8AwH8/HQDKPmZ1SD+m2ck+Tl5hPwDAfz8AwH8/ptnJPpDIYj+m2ck+kMhiPwDAfz8AwH8/AMB/PwDAfz+m2ck+CshuPwDAfz8AwH8/AE83PUAnRzwAwH8/AMB/P6z2tD5AJ0c8AMB/PwDAfz/LrfY+IH24PafD2z7uEUo/sva0PhgFuT14klQ97hFKPwBPNz0YBbk9FbPPPiB9uD249rQ+1FpIP9ButT5OXmE/0G61Pk5eYT8ATzc91FpIP1R1Pj1OXmE/VHU+PU5eYT8ATzc91FpIP1R1Pj2TyGI/VHU+PZPIYj9UdT49k8hiP9ButT6QyGI/0G61PpDIYj/QbrU+kMhiPwDAfz8AwH8/VHU+PQrIbj8AwH8/AMB/P9ButT4KyG4/AMB/PwDAfz/guPU7bGP/PuC49TtsY/8+HQDKPpCY/z4AwH8/AMB/PwBPNz1sY/8+RHRKPebnXz8ATzc9bGP/PhWzzz5sY/8+y632Pmxj/z629rQ+bGP/PnEH3T7m518/ZDkyP1JVTT9kOTI/UlVNP7jALz/30Eo/3yQhPwTfEj+4wC8/99BKPyGYLT/7CEc/Sq4DP1JVTT9KrgM/UlVNP06uAz9QVU0/Tq4DP1BVTT95OTI/taELP3k5Mj+1oQs/xsAvPxUmDj/GwC8/FSYOP/T4GD+w4BI/IZgtPyYQEj9DrgM/rKELP0OuAz+soQs/Ra4DP7OhCz9FrgM/s6ELP/kmBj8RJg4/+SYGPxEmDj/fJCE/Dd8SP/MIIz8wFBI/eTkyP66hCz95OTI/rqELP3I5Mj9SVU0/cjkyP1JVTT8hmC0/JhASP8TALz8QJg4/xMAvPxAmDj/eJCE/821GPyGYLT/7CEc/9PgYP41vRj/EwC8/8dBKP8TALz/x0Eo/oM8rPyYQEj+gzys/JhASP0nZHj/zbUY/SdkeP/NtRj920SQ/MhQSP1DZHj8N3xI/UNkePw3fEj920SQ/MhQSPwYVKT8rEhI/BhUpPysSEj/KCx4/w25GP8oLHj/DbkY/mc8rP/oIRz+GRBs/jW9GP4ZEGz+Nb0Y/mc8rP/oIRz+55io/OBASP7nmKj84EBI/oNoeP50MSD/l/Sk/GhISP+X9KT8aEhI/Gg0eP3ENSD+55io/EQlHP9pFGz87Dkg/ueYqPxEJRz/i/Sk/8gpHP1cTHD9nDUg/4v0pP/IKRz8DFSk/AQtHPwYSHD+7bkY/BhIcP7tuRj8DFSk/AQtHPwkSHD/b3xI/CRIcP9vfEj8HjCc/AQtHPweMJz8BC0c/B4wnPwELRz/PCx4/u25GP88LHj+7bkY/B4wnPwELRz8OjCc/KxISPw6MJz8rEhI/ABIcP8NuRj8AEhw/w25GP23RJD8HDUc/UtkeP+htRj9S2R4/6G1GP23RJD8HDUc/1AseP9vfEj/UCx4/298SPwMVKT8BC0c/AxUpPwELRz8moyY/FAtHPx4NHj9nDUg/JqMmPxQLRz8uoyY/OhISPy6jJj86EhI/VBMcP3ENSD9OuiU/9AxHP6XaHj+bDEg/TrolP/QMRz9VuiU/HBQSP1W6JT8cFBI/0UUbPz0OSD920SQ/MBQSP3bRJD8wFBI/gkQbP5ZvRj+CRBs/lm9GP6DPKz8mEBI/hEQbP7DgEj+ERBs/sOASP6DPKz8mEBI/8wgjPzAUEj/zJgY/DiYOP/MmBj8OJg4/9PgYP5ZvRj/qCCM/Bw1HP/omBj/x0Eo/3yQhP+htRj/6JgY/8dBKPwYVKT8sEhI/BhIcP9vfEj8GEhw/298SPwYVKT8sEhI/UtkePwTfEj9S2R4/BN8SP5vPKz/6CEc/m88rP/oIRz+55io/OBASPy1DGz8HQhE/ueYqPzgQEj/l/Sk/GhISP7UQHD81QRE/5f0pPxoSEj8D2B4/XEARP7nmKj8RCUc/ueYqPxEJRz+ECh4/LUERP+P9KT/yCkc/4/0pP/IKRz8OjCc/LBISP88LHj/b3xI/zwseP9vfEj8OjCc/LBISPy6jJj8+EhI/fAoePzVBET8uoyY/PhISP1W6JT8cFBI/+tceP15AET9VuiU/HBQSP7oQHD8tQRE/JqMmPxQLRz8moyY/FAtHPzNDGz//QRE/TrolP/QMRz9OuiU/9AxHP4tEGz+m4BI/i0QbP6bgEj9t0SQ/Bw1HP23RJD8HDUc/+PgYP6bgEj//JgY/9NBKP/8mBj/00Eo/6ggjPwcNRz8AAC8/KKFmP8LE/j5yfVI/wsT+PnJ9Uj8AAC8/bq9iP2R6Aj/8rlU/AAAvP+xeXT9kegI//K5VPwAALz/toWI/AAAvP26vYj/ljjc/cn1SPwAALz8ooWY/5Y43P3J9Uj/VNwg/KKFmP8jE/j5m/X0/AAAvPyihZj/IxP4+Zv19P+WONz9yfVI/5Y43P3J9Uj/VNwg/bq9iPwAALz9gsGI/AAAvP5yvZj/kdjQ//K5VP9U3CD/sXl0/5HY0P/yuVT/CxP4+cn1SP8LE/j5yfVI/1TcIPyihZj8AAC8/GqJmP+WONz9h/X0/1TcIPyihZj/ljjc/Yf19P9U3CD9gsGI/1TcIP5uvZj/kdjQ/2Mt6P9U3CD96A1s/5HY0P9jLej/IxP4+Zv19P9U3CD9ur2I/yMT+Pmb9fT/VNwg/GqJmP9U3CD/toWI/ZHoCP9jLej9kegI/2Mt6P9U3CD/sXl0/1TcIP26vYj8AAC8/bq9iP+WONz9h/X0/5Y43P2H9fT/kdjQ/2Mt6PwAALz/sXl0/5HY0P9jLej/VNwg/m69mP2R6Aj/Yy3o/AAAvP3oDWz9kegI/2Mt6P9U3CD/toWI/AAAvP3oDWz/kdjQ//K5VP+R2ND/8rlU/AAAvP5yvZj8AAC8/7aFiP2R6Aj/8rlU/1TcIP3oDWz9kegI//K5VPwAALz/CfmE/wsT+PnJ9Uj/CxP4+cn1SPwAALz/2VF4/ZHoCP/yuVT9kegI//K5VPwAALz/sXl0/AAAvP+2hYj8AAC8/9lReP+WONz9yfVI/5Y43P3J9Uj8AAC8/wn5hP9U3CD/CfmE/yMT+Pmb9fT8AAC8/wn5hP8jE/j5m/X0/5HY0P/yuVT/kdjQ//K5VPwAALz96A1s/AAAvP5yvZj/kdjQ/2Mt6P+R2ND/Yy3o/AAAvP+xeXT/VNwg/m69mP9U3CD/0VF4/5Y43P2H9fT8AAC8/9lReP+WONz9h/X0/ZHoCP9jLej9kegI/2Mt6PwAALz96A1s/1TcIP+2hYj/VNwg/wn5hP+WONz9h/X0/5Y43P2H9fT/VNwg/9lReP+WONz9yfVI/5Y43P3J9Uj/VNwg/9lRePwAALz/2VF4/1TcIP5uvZj/kdjQ/2Mt6P+R2ND/Yy3o/1TcIP3oDWz/VNwg/9FReP8jE/j5m/X0/yMT+Pmb9fT/VNwg/wn5hP8LE/j5yfVI/1TcIP8J+YT/CxP4+cn1SPwAALz/CfmE/1TcIP+2hYj9kegI/2Mt6P9U3CD/sXl0/ZHoCP9jLej8AAC8/7aFiP2R6Aj/8rlU/1TcIP3oDWz9kegI//K5VPwAALz+cr2Y/5HY0P/yuVT/kdjQ//K5VP9U3CD/sXl0/AAAvP+xeXT8AAC8/egNbPwAALz96A1s/AAAvP+xeXT8AAC8/egNbPwAALz/sXl0/1TcIP3oDWz/VNwg/7F5dP9U3CD96A1s/1TcIP+xeXT/VNwg/7F5dP9U3CD96A1s/1TcIP+xeXT/VNwg/eQNbPwAALz/sXl0/AAAvP3oDWz81uwg/d/g8PwgFFz/jrRI/HaQIP+OtEj9GexY/d/g8P+afCz/jrRI/HaQIPwUxOz81uwg/S3lAP2oBCz/jrRI/5p8LP+OtEj8IBRc/BTE7Px2kCD8FMTs/tWsWP3f4PD/mnws/BTE7Px2kCD/jrRI/570IP3f4PD9qAQs/BTE7P+afCz8FMTs/tWsWP0t5QD9qAQs/460SPwgFFz8FMTs/570IP0t5QD9GexY/S3lAP2oBCz8FMTs/CAUXP+OtEj+01xY/ljREP7TXFj+WNEQ/TNoWP82NRT9M2hY/zY1FPxjYFj/tZkM/GNgWP+1mQz/m2RY/fFtGP+bZFj98W0Y/zBMKP7ooRD/MEwo/uihEP8wTCj+6KEQ/FiAKPw2QRT8WIAo/DZBFPxYgCj8NkEU/rhwKP0RpQz+uHAo/RGlDP64cCj9EaUM/LhcKP5RPRj8uFwo/lE9GPy4XCj+UT0Y/7tgWPybhRD/L1RY/JuFEP7/WFj9lukI/+tcWPygIRz+dvwg/TOlCP+zbCD/1z0Y/nb8IP0zpQj/s2wg/9c9GP7zbCD8AqEQ/or8IPwMPRT+ivwg/Aw9FP7zbCD8AqEQ/GNgWP5jUQz8Y2BY/mNRDP0zaFj+G+0U/TNoWP4b7RT+hDgo/KMlDP6EOCj8oyUM/oQ4KPyjJQz8HEgo/9+9FPwcSCj/370U/BxIKP/fvRT/eqAg/qMlDP96oCD9m8EU/tNcWP5Y0RD+01xY/ljREP0zaFj/NjUU/TNoWP82NRT8Y2BY/7WZDPxjYFj/tZkM/5tkWP3xbRj/m2RY/fFtGP8wTCj+6KEQ/zBMKP7ooRD/MEwo/uihEPxYgCj8NkEU/FiAKPw2QRT8WIAo/DZBFP64cCj9EaUM/rhwKP0RpQz+uHAo/RGlDPy4XCj+UT0Y/LhcKP5RPRj8uFwo/lE9GP8vVFj8m4UQ/7tgWPybhRD/61xY/KAhHP7/WFj9lukI/7NsIP/XPRj+dvwg/TOlCP52/CD9M6UI/7NsIP/XPRj+82wg/AKhEP6K/CD8DD0U/vNsIPwCoRD+ivwg/Aw9FPxjYFj+Y1EM/GNgWP5jUQz9M2hY/hvtFP0zaFj+G+0U/oQ4KPyjJQz+hDgo/KMlDP6EOCj8oyUM/oQ4KPyjJQz8HEgo/9+9FPwcSCj/370U/BxIKP/fvRT8HEgo/9+9FP96oCD+oyUM/3qgIP6jJQz/eqAg/ZvBFP96oCD9m8EU/cDDjPiB9uD2nw9s+6vxUP3iSVD3q/FQ/cDDjPiB9uD00dEo96vxUP3Aw4z5sY/8+cDDjPmxj/z5xB90+6vxUPwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/ptnJPgrIbj8AwH8/AMB/Px0Ayj5AzE08AMB/PwDAfz8AwH8/AMB/Px0Ayj6o2bk9AMB/PwDAfz+m2ck+kMhiP6bZyT6QyGI/AMB/PwDAfz8dAMo+ZnVIP6bZyT5OXmE/oK8API7IYj+grwA8jshiPwDAfz8AwH8/4Lj1O9RaSD+grwA8Tl5hPwDAfz8AwH8/4Lj1OxgFuT0AwH8/AMB/PwDAfz8AwH8/4Lj1O8AnRzwAwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz+grwA8CshuPwDAfz8AwH8/rHU+PY7IYj+sdT49jshiP6x1Pj2OyGI/2G61PpDIYj/YbrU+kMhiP9hutT6QyGI/rPa0PtRaSD/YbrU+Tl5hP9hutT5OXmE/EE83PdRaSD+sdT49Tl5hP6x1Pj1OXmE/eJJUPebnXz+29rQ+GAW5Pbb2tD4YBbk9y632PiB9uD0Vs88+IH24PafD2z7m518/xE43PRgFuT3ETjc9GAW5PQDAfz8AwH8/2G61PgrIbj8AwH8/AMB/P6x1Pj0KyG4/xE43PcAnRzzETjc9wCdHPADAfz8AwH8/tva0PsAnRzy29rQ+wCdHPADAfz8AwH8/AMB/PwDAfz8dAMo+kJj/PuC49TtsY/8+AMB/PwDAfz+w9rQ+bGP/PiR0Sj3uEUo/y632Pmxj/z4Vs88+bGP/PvRONz1sY/8+cQfdPu4RSj9wMOM+IH24PafD2z7q/FQ/cDDjPmxj/z5xB90+6vxUPzR0Sj3q/FQ/cDDjPmxj/z54klQ96vxUP3Aw4z4gfbg9AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/AMB/PwDAfz8AwH8/9gH+AR8A9gEfAA8AOgBBACYAOgAmABMAFgAwADYAFgA2ABoADgAeACIADgAiABEAFAAnADEAFAAxABcAAQL8ARIAAQISADsALQAJAAIALQACADQAPgA5AA0APgANACwAKwAMAAoAKwAKAC8AHAAEAAcAHAAHACQAKgAuADIAKgAyACgA/QEdAB8A/QEfAP4BLQA0ADYALQA2ADAAPAApACYAPAAmAEEA7gHrAT0A7gE9AEIAHAAkACIAHAAiAB4A/QHyAQUA/QEFAB0A5wHtAUAA5wFAACAAJAAHADgAJAA4ADwA+gEBAjsA+gE7ABUAEQAiAEEAEQBBADoA7AHqASUA7AElAD8A6QHoASEA6QEhACMARwBEAE4ARwBOAFAASQBDAEUASQBFALQAUwCwAE8AUwBPAE0AWwBVAFcAWwBXAGAASwDgAFgASwBYAFYAZQBdAFwAZQBcAGEAbQBqAGIAbQBiAFkAZwBzAGMAZwBjAF8AbADMAHEAbABxAGkAcgB8AHkAcgB5AGoAaAB4AH8AaAB/AHYAdwB6AIAAdwCAAH0AdAB+AIEAdACBAIQAhgCCAHsAhgB7AHAAdQCFAIgAdQCIANwAjwCLAIMAjwCDAG8AlwCHAIQAlwCEAIwAkACfAJ0AkACdAI4AjACcAKIAjACiAJQAjQCVALwAjQC8AJgAngCkAKEAngChAJsAlgCjAKUAlgClAKgAqgCmAKAAqgCgAJIAuACsAKkAuACpAJEAUQCyAKoAUQCqAK0ArwCzAJMArwCTAKcASgC2ALEASgCxAFQARgC7AJQARgCUALUAuQDDAMAAuQDAAK0AqwC/AMYAqwDGAL0AvgBIAFIAvgBSAK4AwQDEAMoAwQDKAMcAuwDFAMgAuwDIAJcAmQDJAMIAmQDCALcAuQCSAHIAuQByAM0AigCaALoAigC6AM4AbQDTANAAbQDQAM0AywDPANYAywDWAIkA0QDUANoA0QDaANcAhwDVANgAhwDYANsA3QDZANIA3QDSAGsA2wDfAGQA2wBkAHQA4gDeAG4A4gBuAFoAXgBmAOEAXgDhAEwA5QDpAPoA5QD6APQA5wDkAPAA5wDwABcB9QD9AO0A9QDtAOYA7wDjAOsA7wDrAA8B8wD4AAQB8wAEAf8A/gD2AAIB/gACAQoBGQHyAAEBGQEBAQYBCAEAAfEACAHxABABIAH7AAcBIAEHAQwBEQETAQ0BEQENAQkB7gAdARUB7gAVARIBFAEYAQUBFAEFAQ4BHgHqABoBHgEaARYBHAHsAPwAHAH8ACIBIQH5AOgAIQHoABsBAwH3AB8BAwEfAQsBJwEkATABJwEwAT8BLwEjASsBLwErATsBTwFDATEBTwExAT0BQQFOAVkBQQFZATkBLAEzATcBLAE3ATwBNgEqAUIBNgFCAToBRwElASgBRwEoAWABMgFFAU0BMgFNAUABVgFKAUYBVgFGAVIBSAFhAUwBSAFMAUQBXgFVAVEBXgFRAVoBVAEuASYBVAEmAUkBSwFfAVsBSwFbAVcBPgE4AVgBPgFYAVABUwFcATQBUwE0AS0BYgEpATUBYgE1AV0BagFmAWcBagFnAWsBbQFjAWUBbQFlAWkBbwFxAWQBbwFkAW4BbAFoAXIBbAFyAXABdwF/AXwBdwF8AXQBcwF5AYgBcwGIAXYBfQGCAXoBfQF6AXUBgQGHAYQBgQGEAX4BhgGKAXsBhgF7AYMBeAGJAYUBeAGFAYABogGRAZwBogGcAaQBtgGyAZYBtgGWAagBqQGYAY4BqQGOAZ8BqwGwAZQBqwGUAYsBswGtAY0BswGNAZcBlQGqAaABlQGgAYwB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XTjOPtJ8ZT/9/GY9XzjOvtJ8ZT9h+Ye9XzjOvtJ8ZT9h+Ye951G4vtejcD9h+Ye951G4vtejcD9h+Ye951G4vtejcD9h+Ye951G4vtejcD9h+Ye9XTjOPtJ8ZT9h+Ye9XTjOPtJ8ZT9h+Ye9XjjOPuolAkBh+Ye9XjjOPuolAkBh+Ye95VG4PtejcD9h+Ye95VG4PtejcD9h+Ye95VG4PtejcD9h+Ye95VG4PtejcD9h+Ye95lG4PlK4/j9h+Ye95lG4PlK4/j9h+Ye95lG4PlK4/j9h+Ye95lG4PlK4/j9h+Ye95VG4PtejcD/GkPm85VG4PtejcD/GkPm85VG4PtejcD/GkPm85VG4PtejcD/GkPm851G4vtejcD/GkPm851G4vtejcD/GkPm851G4vtejcD/GkPm851G4vtejcD/GkPm85VG4PtejcD9Cpae85VG4PtejcD9Cpae85VG4PtejcD9Cpae85VG4PtejcD9Cpae85lG4PlK4/j/GkPm85lG4PlK4/j/GkPm85lG4PlK4/j/GkPm85lG4PlK4/j/GkPm8MInBPtejcD/GkPm8MInBPtejcD/GkPm8MInBPtejcD/GkPm8MInBPtejcD9Cpae8MInBPtejcD9Cpae8MInBPtejcD9Cpae8MYnBPlK4/j/GkPm8MYnBPlK4/j/GkPm8MYnBPlK4/j/GkPm8MYnBPlK4/j9Cpae8MYnBPlK4/j9Cpae8MYnBPlK4/j9Cpae85lG4PlK4/j9Cpae85lG4PlK4/j9Cpae85lG4PlK4/j9Cpae85lG4PlK4/j9Cpae85lG4vlK4/j9Cpae85lG4vlK4/j9Cpae85lG4vlK4/j9Cpae85lG4vlK4/j9Cpae85lG4PlK4/j9ucys85lG4PlK4/j9ucys85lG4PlK4/j9ucys85lG4PlK4/j9ucys85VG4PtejcD9ucys85VG4PtejcD9ucys85VG4PtejcD9ucys85VG4PtejcD9ucys85lG4PlK4/j88pac85lG4PlK4/j88pac85lG4PlK4/j88pac85lG4PlK4/j88pac85lG4vlK4/j9ucys85lG4vlK4/j9ucys85lG4vlK4/j9ucys85lG4vlK4/j9ucys8MYnBPlK4/j9ucys8MYnBPlK4/j9ucys8MYnBPlK4/j9ucys8MInBPtejcD9ucys8MInBPtejcD9ucys8MInBPtejcD9ucys8MYnBPlK4/j88pac8MYnBPlK4/j88pac8MYnBPlK4/j88pac8MInBPtejcD88pac8MInBPtejcD88pac8MInBPtejcD88pac85VG4PtejcD88pac85VG4PtejcD88pac85VG4PtejcD88pac85VG4PtejcD88pac851G4vtejcD88pac851G4vtejcD88pac851G4vtejcD88pac851G4vtejcD88pac85VG4PtejcD/9/GY95VG4PtejcD/9/GY95VG4PtejcD/9/GY95VG4PtejcD/9/GY95lG4PlK4/j/9/GY95lG4PlK4/j/9/GY95lG4PlK4/j/9/GY95lG4PlK4/j/9/GY951G4vtejcD9ucys851G4vtejcD9ucys851G4vtejcD9ucys851G4vtejcD9ucys85lG4vlK4/j88pac85lG4vlK4/j88pac85lG4vlK4/j88pac85lG4vlK4/j88pac8MonBvtejcD88pac8MonBvtejcD88pac8MonBvtejcD88pac8MonBvtejcD9ucys8MonBvtejcD9ucys8MonBvtejcD9ucys8MYnBvlK4/j88pac8MYnBvlK4/j88pac8MYnBvlK4/j88pac8MYnBvlK4/j9ucys8MYnBvlK4/j9ucys8MYnBvlK4/j9ucys851G4vtejcD9Cpae851G4vtejcD9Cpae851G4vtejcD9Cpae851G4vtejcD9Cpae8MonBvtejcD9Cpae8MonBvtejcD9Cpae8MonBvtejcD9Cpae8MonBvtejcD/GkPm8MonBvtejcD/GkPm8MonBvtejcD/GkPm8MYnBvlK4/j9Cpae8MYnBvlK4/j9Cpae8MYnBvlK4/j9Cpae8MYnBvlK4/j/GkPm8MYnBvlK4/j/GkPm8MYnBvlK4/j/GkPm85lG4vlK4/j/GkPm85lG4vlK4/j/GkPm85lG4vlK4/j/GkPm85lG4vlK4/j/GkPm85lG4vlK4/j9h+Ye95lG4vlK4/j9h+Ye95lG4vlK4/j9h+Ye95lG4vlK4/j9h+Ye93Tm4vtQWAEBOddu73Tm4vtQWAEBOddu73Tm4vtQWAEBOddu73Tm4vtQWAEBOddu7Fe+jvhPx+j9Oddu7Fe+jvhPx+j9Oddu7Fe+jvhPx+j9Oddu7Fe+jvhPx+j9Oddu73Tm4vtQWAEAZXjG93Tm4vtQWAEAZXjG93Tm4vtQWAEAZXjG93Tm4vtQWAEAZXjG93Tm4viTZuD9Oddu73Tm4viTZuD9Oddu73Tm4viTZuD9Oddu73Tm4viTZuD9Oddu71zm4PtQWAEBOddu71zm4PtQWAEBOddu71zm4PtQWAEBOddu71zm4PtQWAEBOddu7D++jPhPx+j9Oddu7D++jPhPx+j9Oddu7D++jPhPx+j9Oddu7D++jPhPx+j9Oddu71zm4PtQWAEAZXjG91zm4PtQWAEAZXjG91zm4PtQWAEAZXjG91zm4PtQWAEAZXjG91jm4PiTZuD9Oddu71jm4PiTZuD9Oddu71jm4PiTZuD9Oddu71jm4PiTZuD9Oddu7Du+jProVvj9Oddu7Du+jProVvj9Oddu7Du+jProVvj9Oddu7Du+jProVvj9Oddu71jm4PiTZuD8ZXjG91jm4PiTZuD8ZXjG91jm4PiTZuD8ZXjG91jm4PiTZuD8ZXjG9Du+jProVvj8ZXjG9Du+jProVvj8ZXjG9Du+jProVvj8ZXjG9Du+jProVvj8ZXjG93Tm4viTZuD8ZXjG93Tm4viTZuD8ZXjG93Tm4viTZuD8ZXjG93Tm4viTZuD8ZXjG9Fu+jvroVvj8ZXjG9Fu+jvroVvj8ZXjG9Fu+jvroVvj8ZXjG9Fu+jvroVvj8ZXjG9Fu+jvroVvj9Oddu7Fu+jvroVvj9Oddu7Fu+jvroVvj9Oddu7Fu+jvroVvj9Oddu7Fe+jvhPx+j8ZXjG9Fe+jvhPx+j8ZXjG9Fe+jvhPx+j8ZXjG9Fe+jvhPx+j8ZXjG9D++jPhPx+j8ZXjG9D++jPhPx+j8ZXjG9D++jPhPx+j8ZXjG9D++jPhPx+j8ZXjG93Tm4vqSNvT9naAg93Tm4vqSNvT9naAg93Tm4vqSNvT9naAg93Tm4vqSNvT9naAg9Fe+jvg9RuD9naAg9Fe+jvg9RuD9naAg9Fe+jvg9RuD9naAg9Fe+jvg9RuD9naAg93Tm4vqSNvT+UcFi73Tm4vqSNvT+UcFi73Tm4vqSNvT+UcFi73Tm4vqSNvT+UcFi73Tm4vkBybD9naAg93Tm4vkBybD9naAg93Tm4vkBybD9naAg93Tm4vkBybD9naAg9Fe+jvg9RuD+UcFi7Fe+jvg9RuD+UcFi7Fe+jvg9RuD+UcFi7Fe+jvg9RuD+UcFi7Fu+jvmzrdj+UcFi7Fu+jvmzrdj+UcFi7Fu+jvmzrdj+UcFi7Fu+jvmzrdj+UcFi73Tm4vkBybD+UcFi73Tm4vkBybD+UcFi73Tm4vkBybD+UcFi73Tm4vkBybD+UcFi7Fu+jvmzrdj9naAg9Fu+jvmzrdj9naAg9Fu+jvmzrdj9naAg9Fu+jvmzrdj9naAg91jm4PkBybD9naAg91jm4PkBybD9naAg91jm4PkBybD9naAg91jm4PkBybD9naAg91zm4PqSNvT9naAg91zm4PqSNvT9naAg91zm4PqSNvT9naAg91zm4PqSNvT9naAg9Du+jPmzrdj9naAg9Du+jPmzrdj9naAg9Du+jPmzrdj9naAg9Du+jPmzrdj9naAg91jm4PkBybD+UcFi71jm4PkBybD+UcFi71jm4PkBybD+UcFi71jm4PkBybD+UcFi71zm4PqSNvT+UcFi71zm4PqSNvT+UcFi71zm4PqSNvT+UcFi71zm4PqSNvT+UcFi7Du+jPmzrdj+UcFi7Du+jPmzrdj+UcFi7Du+jPmzrdj+UcFi7Du+jPmzrdj+UcFi7D++jPg9RuD+UcFi7D++jPg9RuD+UcFi7D++jPg9RuD+UcFi7D++jPg9RuD+UcFi7D++jPg9RuD9naAg9D++jPg9RuD9naAg9D++jPg9RuD9naAg9D++jPg9RuD9naAg94TGFvOMSuj9UxfQ84TGFvOMSuj9UxfQ84TGFvOMSuj+AZ/044TGFvOMSuj+AZ/04oDGFPOMSuj+AZ/04oDGFPOMSuj+AZ/047jGFvMRncz+AZ/047jGFvMRncz+AZ/04kzGFPMRncz+AZ/04kzGFPMRncz+AZ/047jGFvMRncz9UxfQ87jGFvMRncz9UxfQ8kzGFPMRncz9UxfQ8kzGFPMRncz9UxfQ8oDGFPOMSuj9UxfQ8oDGFPOMSuj9UxfQ8PArXvqRwXT8ehes9PArXvqRwXT8ehes9PArXvqRwXT8ehes9PArXvqRwXT8AAAC+PArXvqRwXT8AAAC+PArXvqRwXT8AAAC+PArXvnA9aj8ehes9PArXvnA9aj8ehes9PArXvnA9aj8ehes9PArXPqRwXT8ehes9PArXPqRwXT8ehes9PArXPqRwXT8ehes9PArXPqRwXT8AAAC+PArXPqRwXT8AAAC+PArXPqRwXT8AAAC+PArXPnA9aj8ehes9PArXPnA9aj8ehes9PArXPnA9aj8ehes9PArXPnA9aj8AAAC+PArXPnA9aj8AAAC+PArXPnA9aj8AAAC+PArXvnA9aj8AAAC+PArXvnA9aj8AAAC+PArXvnA9aj8AAAC+/v//vgAAAAAAAICt/v//vgAAAAAAAICt/v//vs7MDEAAAICt/v//vs7MDEAAAICt/v//voXrAUAAAICt/v//vpDC9T0AAICt/v//vpDC9T0AAICt/v//vrgeBT4AAACA/v//vrgeBT4AAACAAAAAP87MDEAAAICtAAAAP87MDEAAAICtAAAAPwAAAAAAAICtAAAAPwAAAAAAAICtAAAAP7geBT4AAICtAAAAP7geBT4AAICtAAAAP5DC9T0AAICtAAAAP5DC9T0AAICtAAAAP4XrAUAAAICtAAAAP4XrAUAAAICtyszMvs7MDEAAAICtzszMPs7MDEAAAICtzszMPs7MDEAAAICty8zMvgAAAAAAAICtzczMPgAAAAAAAICtAAAAP2ZmZj8AAICtAAAAP2ZmZj8AAICt/v//vmZmZj8AAICt/v//vmZmZj8AAICtzMzMPoXrAUAAAACAzMzMPoXrAUAAAACAzMzMPmZmZj8AAACAzMzMPmZmZj8AAACAzMzMvmZmZj8AAACAzMzMvmZmZj8AAACAzMzMvoXrAUAAAACAzMzMvoXrAUAAAACA/v//vgAAAACOwvW9/v//vgAAAACOwvW9/v//vgAAAACOwvW9/v//vs7MDEDOzMy9/v//vs7MDEDOzMy9/v//vs7MDEDOzMy9/v//voXrAUDOzMy9/v//voXrAUDOzMy9/v//vpDC9T2OwvW9/v//vpDC9T2OwvW9/v//vpDC9T2OwvW9/v//vpDC9T2OwvW9/v//vrgeBT7OzMy9/v//vrgeBT7OzMy9/v//vrgeBT7OzMy9AAAAP5DC9T2OwvW9AAAAP5DC9T2OwvW9AAAAP5DC9T2OwvW9AAAAP5DC9T2OwvW9AAAAP7geBT7OzMy9AAAAP7geBT7OzMy9AAAAP7geBT7OzMy9AAAAP4XrAUDOzMy9AAAAP4XrAUDOzMy9AAAAP4XrAUDOzMy9AQAAP87MDEDOzMy9AQAAP87MDEDOzMy9AQAAP87MDEDOzMy9AAAAPwAAAACOwvW9AAAAPwAAAACOwvW9AAAAPwAAAACOwvW9zczMPpDC9T2OwvW9zczMPpDC9T2OwvW9zczMPpDC9T2OwvW9y8zMvpDC9T2OwvW9y8zMvpDC9T2OwvW9y8zMvpDC9T2OwvW9y8zMvrgeBT7OzMy9y8zMvrgeBT7OzMy9y8zMvrgeBT7OzMy9zczMPrgeBT7OzMy9zczMPrgeBT7OzMy9zczMPrgeBT7OzMy9y8zMvoXrAUDOzMy9y8zMvoXrAUDOzMy9y8zMvoXrAUDOzMy9y8zMvoXrAUDOzMy9zczMPoXrAUDOzMy9zczMPoXrAUDOzMy9zczMPoXrAUDOzMy9zczMPoXrAUDOzMy9y8zMvgAAAACOwvW9y8zMvgAAAACOwvW9zczMPgAAAACOwvW9zczMPgAAAACOwvW9zszMPs7MDEDOzMy9zszMPs7MDEDOzMy9zszMPs7MDEDOzMy9yszMvs7MDEDOzMy9yszMvs7MDEDOzMy9yszMvs7MDEDOzMy9yszMvs7MDEDOzMy9/v//vmZmZj/OzMy9/v//vmZmZj/OzMy9AAAAP2ZmZj/OzMy9AAAAP2ZmZj/OzMy9y8zMvmZmZj/OzMy9y8zMvmZmZj/OzMy9y8zMvmZmZj/OzMy9zczMPmZmZj/OzMy9zczMPmZmZj/OzMy9zczMPmZmZj/OzMy9/v//vgAAAAAAAICt/v//vgAAAAAAAICt/v//vs7MDEAAAICt/v//vs7MDEAAAICt/v//voXrAUAAAICt/v//vpDC9T0AAICt/v//vpDC9T0AAICt/v//vrgeBT4AAACAAAAAP87MDEAAAICtAAAAP87MDEAAAICtAAAAPwAAAAAAAICtAAAAPwAAAAAAAICtAAAAP7geBT4AAICtAAAAP5DC9T0AAICtAAAAP5DC9T0AAICtAAAAP4XrAUAAAICtAAAAP4XrAUAAAICtyszMvs7MDEAAAICtyszMvs7MDEAAAICtzszMPs7MDEAAAICty8zMvgAAAAAAAICtzczMPgAAAAAAAICtAAAAP2ZmZj8AAICt/v//vmZmZj8AAICtzMzMPoXrAUAAAACAzMzMPoXrAUAAAACAzMzMPmZmZj8AAACAzMzMPmZmZj8AAACAzMzMvmZmZj8AAACAzMzMvmZmZj8AAACAzMzMvoXrAUAAAACAzMzMvoXrAUAAAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAv6Mu2rUAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADX5ZD8S+eQ+AACAv6Mu2rUAAACAAACAvwAAAADRys+0AAAAAAAAAAAAAIA/AAAAADX5ZD8S+eQ+AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAPwAAAAAsS+s0AAAAAAAAAAAAAIA/AACAPwAAAAAsS+s0AACAPwAAAADMlw01AAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AACAPwAAAADRys80AACAP6Mu2jUAAACAAAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AACAPwAAAAAAAACAAACAP6Mu2jUAAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AAAAADX5ZD8S+eQ+AAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AAAAADX5ZD8S+eQ+AAAAAAAAAAAAAIA/AAAAADP5ZD8X+eQ+AAAAAP//f78AAACAAAAAAAAAAAAAAIA/AAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAvwAAAADRys+0AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAADRys80AACAPwAAAADMlw01AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAs+nsQAAAAAAAIA/AAAAAAAAAAD//38/As+nsQAAAAAAAIA/AAAAAAAAgL8AAACAAAAAAAAAAAD//38/AACAPz3P87IAAACAAs+nsQAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAD//3+/AAAAAPGPtDMAAIC/A8+nsde/cLIAAIA/AAAAAAAAAAD//38/A8+nsde/cLIAAIA/AAAAAAAAAAD//38/AAAAAAAAgD8AAACAAACAPz3P87IAAACAA8+nsde/cLIAAIA/AAAAAAAAAAAAAIA/AAAAANe/8LMAAIC/AAAAAAAAAAD//3+/AAAAANe/8LMAAIC/AAAAAAAAAAD//3+/AAAAAAAAgD8AAACAAACAPz3P87IAAACAAAAAANe/8LMAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAPGPtDMAAIC/AACAvz3P8zIAAACAAAAAANe/8LMAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAPGPtDMAAIC/AACAvz3P8zIAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAPz3P87IAAACAAACAvz7P8zIAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAvz3P8zIAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvz7P8zIAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AACAPz7P87IAAACAAACAvz7P8zIAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAvz7P8zIAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAPz7P87IAAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvz3P8zIAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvz3P8zIAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAPz3P87IAAACAAACAvz3P8zIAAACAA8+nsde/cLIAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvz3P8zIAAACAAs+nsQAAAAAAAIA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAPz7P87IAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AACAPz3P87IAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPz3P87IAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPz3P87IAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAPz7P87IAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPz3P87IAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAPz3P87IAAACAAAAAAAAAgL8AAACAAAAAAAAAAAD//3+/AAAAAPGPtDMAAIC/AACAPz3P87IAAACAAACAvwAAAAAAAACAAAAAALSsV7L//38/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAAAAAP//f78AAACAAAAAALSsV7L//38/AAAAAAAAAAAAAIA/AACAP2ychrMAAACAAACAvwAAAAAAAACAAAAAAHjIj7L//3+/AAAAAF11w7EAAIC/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAF3Ij7EAAIA/AAAAAAAAAAAAAIA/AAAAALSsV7L//38/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAP02xZbMAAACAAACAv2ychjMAAACAAAAAAP//f78AAACAAAAAALSsV7L//38/AAAAAAAAAAAAAIA/AAAAAHjIj7L//3+/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAP02xZbMAAACAAAAAAAAAgL8AAACAAAAAAF3Ij7EAAIA/AAAAAAAAAAAAAIA/AACAP02xZbMAAACAAACAv2ychjMAAACAAAAAAF3Ij7EAAIA/AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAHS6szMAAIC/AACAP02xZbMAAACAAACAv2ychjMAAACAAAAAAAAAAAAAAIC/AAAAAHS6szMAAIC/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAF11w7EAAIC/AAAAAHS6szMAAIC/AAAAAF11w7EAAIC/AAAAAHS6szMAAIC/AAAAAP//fz8AAACAAACAP2ychrMAAACAAAAAAF3Ij7EAAIA/AAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAP2ychrMAAACAAAAAAP//f78AAACAAAAAAHjIj7L//3+/AAAAAF11w7EAAIC/AACAP2ychrMAAACAAACAv2ychjMAAACAAAAAAP//f78AAACAAAAAAHjIj7L//3+/AAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AACAP22chrMAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAJa6szH//3+/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAF3IjzMAAIA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAJa6szH//3+/AACAP22chrMAAACAAAAAAAAAAAAAAIC/AAAAAIysVzEAAIC/AAAAAAAAgD8AAACAAACAP22chrMAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAIysVzEAAIC/AAAAAAAAAAAAAIA/AAAAAF3IjzMAAIA/AAAAAAAAgD8AAACAAACAP22chrMAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAF3IjzMAAIA/AACAP0qxZbMAAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAP0qxZbMAAACAAACAv22chjMAAACAAAAAAAAAAAAAAIA/AAAAAF3IjzMAAIA/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAIysVzEAAIC/AACAP0qxZbMAAACAAAAAAAAAAAAAAIC/AAAAAJa6szH//3+/AAAAAAAAgD8AAACAAACAP0qxZbMAAACAAACAv22chjMAAACAAAAAAAAAAAAAAIC/AAAAAIysVzEAAIC/AAAAAAAAgD8AAACAAACAv22chjMAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAJa6szH//3+/AACAv22chjMAAACAAAAAAAAAgL8AAACAAAAAAAAAAAD//38/AAAAAAAAAAAAAIA/AACAvwTNTjMAAACAAAAAAJ490rAAAIA/AACAvwTNTjMAAACAAAAAAF1bVK0AAIC/AAAAAF1bVK0AAIC/AACAPwTNTrMAAACAAACAvwTNTjMAAACAAAAAAF1bVK0AAIC/AAAAAF1bVK0AAIC/AACAPwTNTrMAAACAAACAvwTNTjMAAACAAAAAAJ490rAAAIA/AAAAAJ490rAAAIA/AACAPwTNTrMAAACAAAAAAJ490rAAAIA/AACAPwTNTrMAAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAP//f78AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAACAv6Mu2rUAAACAAACAvwAAAAAAAACAAACAv6Mu2rUAAACAAACAvwAAAADRys+0AAAAAP//fz8AAACAAACAPwAAAAAsS+s0AAAAAP//f78AAACAAACAPwAAAAAAAACAAACAPwAAAADRys80AACAP6Mu2jUAAACAAACAPwAAAAAAAACAAACAP6Mu2jUAAACAAACAPwAAAAAsS+s0AACAPwAAAADMlw01AAAAAAAAgD8AAACAAAAAAP//fz8AAACAAAAAAAAAgD8AAACAAAAAAP//f78AAACAAAAAAP//f78AAACAAACAPwAAAADRys80AACAPwAAAADMlw01AACAvwAAAADRys+0AACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACA//9/vwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACA//9/vwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAC35ZD80+eS+AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAC35ZD80+eS+AAAAAAAAAAAAAIC/AAAAAC75ZD8u+eS+//9/PwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAC75ZD8u+eS+AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPyQ8PLQAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPyQ8PLQAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC///9/PwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAC75ZD8y+eS+AAAAAC75ZD8u+eS+AAAAAAAAAAAAAIC/AAAAAC35ZD80+eS+AAAAAC75ZD8y+eS+AAAAAAAAAAAAAIC/AAAAAC35ZD80+eS+AAAAAC75ZD8y+eS+AAAAAAAAAAAAAIC/AAAAAC75ZD8y+eS+AAAAAC75ZD8u+eS+AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAACc8vDIAAIC/AACAPwAAAADJl400AACAvwAAAADJl420AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAACc8vDIAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAACc8vDIAAIC/AAAAAAAAgD8AAACAAAAAAAAAAAAAAIC/AAAAACc8vDIAAIC/AAAAAP//fz8AAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAADJl400AACAvwAAAADJl420AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACA//9/vwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAP//fz8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACA//9/vwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAPyQ8PLQAAACAAAAAAAAAgL8AAACA//9/PwAAAAAAAACAAACAPwAAAAAAAACA//9/PwAAAAAAAACAAACAPwAAAAAAAACAAACAPyQ8PLQAAACAAACAPwAAAAAAAACAAAAAAP//fz8AAACA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OQAaADkAHwAQACMAKAAQACgAEwAXAC0ANQAXADUAGwCnAaABFQCnARUAPwAxAAoAAgAxAAIANwBAADwADgBAAA4ALgAwAA8ACwAwAAsAMwAhAAQABwAhAAcAKgAvADIANQAvADUALQChASIAJQChASUAowExADcAOQAxADkANABAAC4ALABAACwARACtAa4BQQCtAUEARQAhACoAKAAhACgAIwChAZEBBQChAQUAIgCqAawBQwCqAUMAJgAqAAcAPAAqADwAQACbAaYBPgCbAT4AGAATACgARAATAEQAPQCvAbEBKwCvASsAQgCwAasBJwCwAScAKQBKAEcAUQBKAFEAUwBMAEYASABMAEgAtwBWALMAUgBWAFIAUABeAFgAWgBeAFoAYwBOAOMAWwBOAFsAWQBoAGAAXwBoAF8AZABwAG0AZQBwAGUAXABqAHYAZgBqAGYAYgBvAM8AdABvAHQAbAB1AH8AfAB1AHwAbQBrAHsAggBrAIIAeQB6AH0AgwB6AIMAgAB3AIEAhAB3AIQAhwCJAIUAfgCJAH4AcwB4AIgAiwB4AIsA3wCSAI4AhgCSAIYAcgCaAIoAhwCaAIcAjwCTAKIAoACTAKAAkQCPAJ8ApQCPAKUAlwCQAJgAvwCQAL8AmwChAKcApAChAKQAngCZAKYAqACZAKgAqwCtAKkAowCtAKMAlQC7AK8ArAC7AKwAlABUALUArQBUAK0AsACyALYAlgCyAJYAqgBNALkAtABNALQAVwBJAL4AlwBJAJcAuAC8AMYAwwC8AMMAsACuAMIAyQCuAMkAwADBAEsAVQDBAFUAsQDEAMcAzQDEAM0AygC+AMgAywC+AMsAmgCcAMwAxQCcAMUAugC8AJUAdQC8AHUA0ACNAJ0AvQCNAL0A0QBwANYA0wBwANMA0ADOANIA2QDOANkAjADUANcA3QDUAN0A2gCKANgA2wCKANsA3gDgANwA1QDgANUAbgDeAOIAZwDeAGcAdwDlAOEAcQDlAHEAXQBhAGkA5ABhAOQATwDnAOsA/ADnAPwA9gDsAOgA9QDsAPUAGwH4AAAB8QD4APEA6QDyAOYA7gDyAO4AEgH3AP0ACAH3AAgBBAEBAfkABQEBAQUBDQEaAfQAAwEaAQMBBwEKAQIB8wAKAfMAEwElAf8ACwElAQsBDwEVARcBEAEVARABDAHwACABFgHwABYBFAEYARwBCQEYAQkBEQEhAe0AHQEhAR0BGQEfAe8A/gAfAf4AJAEjAfsA6gAjAeoAHgEGAfoAIgEGASIBDgEsASgBNAEsATQBQgEyASYBLgEyAS4BPgFSAUYBMwFSATMBPwFEAVEBXQFEAV0BPAEvATcBOgEvAToBQAE5AS0BRQE5AUUBPQFKAScBKwFKASsBZAE1AUgBUAE1AVABQwFZAU0BSQFZAUkBVQFLAWUBTwFLAU8BRwFgAVYBUwFgAVMBWwFYATEBKQFYASkBTAFOAWIBXgFOAV4BWgFBATsBXAFBAVwBVAFXAWEBOAFXATgBMAFjASoBNgFjATYBXwFtAWkBagFtAWoBbgFwAWYBaAFwAWgBbAFyAXQBZwFyAWcBcQFvAWsBdQFvAXUBcwF6AYIBfwF6AX8BdwF2AXwBiwF2AYsBeQGAAYUBfQGAAX0BeAGEAYoBhwGEAYcBgQGJAY0BfgGJAX4BhgF7AYwBiAF7AYgBgwENADoAqAENAKgBlgE2AKQBpQE2AKUBOAA2AAEAjwE2AI8BpAESABQAnwESAJ8BmAEcACAAmgEcAJoBnQEZAB0AngEZAJ4BnAEIAAwAlQEIAJUBkwEAAAkAlAEAAJQBjgE7AAYAkgE7AJIBqQEeADgApQEeAKUBmQEGAAMAkAEGAJABkgH+AfwBtQH+AbUBuAH0AfEBuQH0AbkB3gHIAeMB6QHIAekBywEEAg8C5wEEAucBzgHyAfgB4wHyAeMByAERAv4BuAERArgB8AH6AQACuwH6AbsBsgH/AQECvgH/Ab4BugHPAegB0QHPAdEBwQEGAggCxAEGAsQBxwEHAgUC0AEHAtABwwEDAgkCyQEDAskBzQHmAbQBvAHmAbwB1AHVAb0BwAHVAcAB2AEOAvsBswEOArMB5QHeAbkBtgHeAbYB7AHCAdMB3AHCAdwBxgHWAdkB2wHWAdsB0gEOAuUB5wEOAucBDwLfAe0B6gHfAeoB5AHmAdQB0QHmAdEB6AHXAfQB+AHXAfgB2gEBAhEC8AEBAvABvgHFAdoB+AHFAfgB8gHXAb8B8QHXAfEB9AHHAfMBEALHARACBgLuAbcB/QHuAf0BCwLvAQwCDQLvAQ0C6wHzAcoBCgLzAQoCEALMAesBDQLMAQ0CAgLdAeIBEwLdARMCGAL2AeABGQL2ARkCFwLhAfcB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Urj+P/z8Zj3zKFy/Urj+P/z8Zj0vHGc/6iUCQP38Zj0vHGc/6iUCQP38Zj0vHGe/6iUCQGH5h70vHGe/6iUCQGH5h70wHGe/0nxlP/z8Zj3zKFy/16NwP/z8Zj3zKFy/16NwP/z8Zj3zKFy/16NwP/z8Zj0uHGc/0nxlP/38Zj0uHGc/0nxlP/38Zj0wHGe/0nxlP2H5h73zKFy/16NwP2H5h73zKFy/16NwP2H5h73zKFy/16NwP2H5h70uHGc/0nxlP2H5h70vHGc/6iUCQGH5h73yKFw/16NwP2H5h73yKFw/16NwP2H5h73yKFw/16NwP2H5h73zKFw/Urj+P2H5h73zKFw/Urj+P2H5h73zKFw/Urj+P2H5h73yKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzyKFw/16NwP8aQ+bzzKFy/16NwP8aQ+bzzKFy/16NwP8aQ+bzzKFy/16NwP8aQ+bzyKFw/16NwP0Klp7zyKFw/16NwP0Klp7zyKFw/16NwP0Klp7zzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+bzzKFw/Urj+P8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP8aQ+byYxGA/16NwP0Klp7yYxGA/16NwP0Klp7yYxGA/16NwP0Klp7yYxGA/Urj+P8aQ+byYxGA/Urj+P8aQ+byYxGA/Urj+P8aQ+byYxGA/Urj+P0Klp7yYxGA/Urj+P0Klp7yYxGA/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFw/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFy/Urj+P0Klp7zzKFw/Urj+P25zKzzzKFw/Urj+P25zKzzzKFw/Urj+P25zKzzyKFw/16NwP25zKzzyKFw/16NwP25zKzzyKFw/16NwP25zKzzzKFw/Urj+PzylpzzzKFw/Urj+PzylpzzzKFw/Urj+PzylpzzzKFy/Urj+P25zKzzzKFy/Urj+P25zKzzzKFy/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/Urj+P25zKzyYxGA/16NwP25zKzyYxGA/16NwP25zKzyYxGA/16NwP25zKzyYxGA/Urj+PzylpzyYxGA/Urj+PzylpzyYxGA/Urj+PzylpzyYxGA/16NwPzylpzyYxGA/16NwPzylpzyYxGA/16NwPzylpzzyKFw/16NwPzylpzzyKFw/16NwPzylpzzyKFw/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzzKFy/16NwPzylpzzyKFw/16NwP/38Zj3yKFw/16NwP/38Zj3yKFw/16NwP/38Zj3yKFw/16NwP/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFw/Urj+P/38Zj3zKFy/16NwP25zKzzzKFy/16NwP25zKzzzKFy/16NwP25zKzzzKFy/Urj+PzylpzzzKFy/Urj+PzylpzzzKFy/Urj+PzylpzyZxGC/16NwPzylpzyZxGC/16NwPzylpzyZxGC/16NwPzylpzyZxGC/16NwP25zKzyZxGC/16NwP25zKzyZxGC/16NwP25zKzyYxGC/Urj+PzylpzyYxGC/Urj+PzylpzyYxGC/Urj+PzylpzyYxGC/Urj+P25zKzyYxGC/Urj+P25zKzyYxGC/Urj+P25zKzzzKFy/16NwP0Klp7zzKFy/16NwP0Klp7zzKFy/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP0Klp7yZxGC/16NwP8aQ+byZxGC/16NwP8aQ+byZxGC/16NwP8aQ+byYxGC/Urj+P0Klp7yYxGC/Urj+P0Klp7yYxGC/Urj+P0Klp7yYxGC/Urj+P8aQ+byYxGC/Urj+P8aQ+byYxGC/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P8aQ+bzzKFy/Urj+P2H5h73zKFy/Urj+P2H5h73zKFy/Urj+P2H5h73zKFy/Urj+P2H5h70AAAAA6iUCQPz8Zj0AAAAA6iUCQPz8Zj0AAAAAUrj+P0Klp7wAAAAAUrj+P25zKzwAAAAAUrj+P/z8Zj0AAAAAUrj+P/z8Zj0AAAAAUrj+P/z8Zj0AAAAAUrj+PzylpzwAAAAAUrj+P8aQ+bwAAAAAUrj+P8aQ+bwAAAAAUrj+P2H5h70AAAAAUrj+P2H5h70AAAAA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hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL24HmU/hesBQMzMzL21HmW/AAAAAI7C9b21HmW/AAAAAI7C9b21HmW/AAAAAI7C9b24HmU/AAAAAI7C9b24HmU/AAAAAI7C9b24HmU/AAAAAI7C9b26HmU/zswMQMzMzL26HmU/zswMQMzMzL26HmU/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL21HmW/zswMQMzMzL3+/3+/ZmZmP8zMzL3+/3+/ZmZmP8zMzL3+/3+/ZmZmP8zMzL0AAIA/ZmZmP8zMzL0AAIA/ZmZmP8zMzL0AAIA/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL21HmW/ZmZmP8zMzL24HmU/ZmZmP8zMzL24HmU/ZmZmP8zMzL24HmU/ZmZmP8zMzL0AAACmzswMQMzMzL0AAACmzswMQMzMzL0AAACmzswMQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmhesBQMzMzL0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmkML1PY7C9b0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmuB4FPszMzL0AAACmAAAAAI7C9b0AAACmAAAAAI7C9b0AAACmAAAAAI7C9b0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL0AAACmZmZmP8zMzL3+/3+/AAAAAAAAAC/+/3+/AAAAAAAAAC/+/3+/zswMQACAB7H+/3+/zswMQACAB7H+/3+/hesBQAAAAC/+/3+/hesBQAAAAC/+/3+/kML1PQAAAC/+/3+/kML1PQAAAC/+/3+/uB4FPgAAAC8AAIA/zswMQAAAAC8AAIA/zswMQAAAAC8AAIA/AAAAAAAAAC8AAIA/AAAAAAAAAC8AAIA/uB4FPgAAAC8AAIA/kML1PQAAAC8AAIA/kML1PQAAAC8AAIA/hesBQAAAAC8AAIA/hesBQAAAAC+1HmW/zswMQAAAAC+1HmW/zswMQAAAAC+5HmU/zswMQAAAAC+1HmW/AAAAAAAAAC+4HmU/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PWPXOP//fz8AAAAAMmrXOAAAgD8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D4AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAMvlkPyL55D4AAAAAMvlkPyX55D4AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAPWPXOP//fz8AAAAAMmrXOAAAgD8AAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIDGOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAxVnQsgAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAIA/AAAAAAAAAIDFOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAIC/Pc9zMwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgD8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/Ps9zMwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIC/Ps9zMwAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAIC/Ps9zMwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/Ps9zMwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAA//9/PwAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/Pc9zMwAAAIDFOZGxAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/Pc9zMwAAAIDGOZGxAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/Pc9zswAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/Pc9zswAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgL8AAIA/Pc9zswAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/Pc9zswAAAIAAAAAAAACAvwAAAIAAAAAA//9/vwAAAIAAAAAAAAAAAAAAgD8AAIA/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AAAAAP//f78AAAAAL/lkPyj55L4AAAAAMPlkPyn55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAMPlkPyn55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAMPlkPyn55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAL/lkPyj55L4AAAAAMPlkPyn55L4AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f7///38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAymH8Mv//f78AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAAAAAAAAgL8AAAAAymH8Mv//f78AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIBN5eo0AACAPwAAAIAAAIC/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL///38/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAID//38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAP//f78AAAAAymH8Mv//f78AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAP//f78AAAAAymH8Mv//f78AAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAAL/lkPyj55L4AAAAAMvlkPyL55L4AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAL/lkPyj55L4AAAAAMvlkPyL55L4AAAAAAACAvwAAAIAAAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAAAAAACAPwAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIBN5eo0AACAPwAAAIAAAIC/AAAAAAAAAID//3+/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DgAUABEADgARAAsAIwAXAAgAIwAIAB8AJwAhABIAJwASAA0ABQAWACAABQAgACYAEwAiAB4AEwAeABAACgAPABwACgAcABoABAAlABkABAAZAAEAJwMvA0wAJwNMADsAbwB4AFUAbwBVAEAAQwBiAGoAQwBqAEcAOgBLAFAAOgBQAD4AQQBXAGMAQQBjAEQAMgMtAz8AMgM/AHEAXgA0ACoAXgAqAGcAdQBuADkAdQA5AFwAWwA4ADUAWwA1AGAASQAsADAASQAwAFIAhgCKAGQAhgBkAFgANQN+AEwANQNMAC8DhwCMAGkAhwBpAGEAjwCEAFYAjwBWAHoAQgM7A3MAQgNzAJEAfACBAFAAfABQAEsALgMgAy0ALgMtAEoANwM5A3cANwN3AE0AUwAxAG0AUwBtAHQAKwMyA3EAKwNxAEIAPQBOAHkAPQB5AHAAPAM+A1QAPANUAHYAPwM4A08APwNPAH8APQNAA4AAPQOAAFEASQBSAIIASQCCAH0ALgNKAH4ALgN+ADUDOgNBA5AAOgOQAHsAcgBZAIMAcgCDAI4AXQBmAI0AXQCNAIgAWgBfAIkAWgCJAIUAlACSAJoAlACaAJsAHwGSAJQAHwGUACQBLgE4AZsALgGbAJoALwGgAKEALwGhADABmQAcAaEAmQChAKAAqwClAKQAqwCkAKcAMwGuAKgAMwGoADEBrAC2AKkArACpAKYANAE8AbUANAG1AK8AtQC/ALwAtQC8AK8ArQC7AMIArQDCALkAugC9AMMAugDDAMAAuADBAMQAuADEAMgAyQDFAL4AyQC+ALQAJgEgAcoAJgHKABYB0QDOAMYA0QDGALMAIQEgAccAIQHHAM8A0gDeANwA0gDcANAAzwDbAOEAzwDhANUAIQElAfgAIQH4ANcA3QDjAOAA3QDgANoA1gDiAOQA1gDkAOcA6ADlAN8A6ADfANMAOwE2AegAOwHoANMAOgHwAOgAOgHoADYB7QDxANQA7QDUAOYAlwD0AO8AlwDvAJ8AIwElAdUAIwHVAPMA9gD/APwA9gD8AOsA6QD7AAIB6QACAfkA+gCVAJ0A+gCdAOwA/QAAAQYB/QAGAQMB+AABAQQB+AAEAdcA2AAFAf4A2AD+APUAOwHTALUAOwG1ADwBzQDZAPcAzQD3AAkBsQAOAQsBsQALAQgBBwEKAREBBwERAcwADAEPARUBDAEVARIBywAQARMBywATARcBGAEUAQ0BGAENAbAAJwEoAaoAJwGqALgAHQEZAbIAHQGyAKMAKwEpARsBKwEbAZgApQCrACoBpQAqASwBFwEaASgBFwEoAScBkwD4ACUBkwAlASMBzwDVACUBzwAlASEB1wDKACAB1wAgASEBtwDHACABtwAgASYBlgAeASIBlgAiAfIA9gA7ATwB9gA8AQgBnAA5ATUBnAA1AeoA9gDrADYB9gA2ATsBsQAIATwBsQA8ATQBsQA0ATIBsQAyAaIApAAvATABpAAwAacAngDuADcBngA3AS0BPwFCAVQBPwFUAU8BQwFAAUwBQwFMAXMBTgFWAUgBTgFIAT4BSQE9AUUBSQFFAWkBTQFSAV4BTQFeAVkBWAFQAVwBWAFcAWQBcgFLAVsBcgFbAWABYgFaAUoBYgFKAWwBfAFXAWMBfAFjAWgBawFuAWYBawFmAWEBRgF1AW0BRgFtAWoBbwFxAV8BbwFfAWcBeAFEAXQBeAF0AXABdgFHAVUBdgFVAXoBewFTAUEBewFBAXcBXQFRAXkBXQF5AWUBgwGAAYwBgwGMAZsBiQF9AYUBiQGFAZUBqgGeAYoBqgGKAZgBmQGnAbMBmQGzAZMBhgGNAZEBhgGRAZYBkAGEAZwBkAGcAZQBowF/AYIBowGCAbwBiwGfAagBiwGoAZoBsAGkAaABsAGgAawBoQG6AaYBoQGmAZ0BuAGvAasBuAGrAbQBrgGIAX4BrgF+AaIBpQG5AbUBpQG1AbEBlwGSAbIBlwGyAakBrQG2AY4BrQGOAYcBuwGBAY8BuwGPAbcBxAHAAcEBxAHBAcUBxwG9Ab8BxwG/AcMByQHLAb4ByQG+AcgBxgHCAcwBxgHMAcoBzwHSAeQBzwHkAd8B0wHQAdwB0wHcAQMC3gHmAdgB3gHYAc4B2QHNAdUB2QHVAfkB3QHiAe4B3QHuAekB6AHgAewB6AHsAfQBAgLbAesBAgLrAfAB8gHqAdoB8gHaAfwBDALnAfMBDALzAfgB+wH+AfYB+wH2AfEB1gEFAv0B1gH9AfoB/wEBAu8B/wHvAfcBCALUAQQCCAIEAgACBgLXAeUBBgLlAQoCCwLjAdEBCwLRAQcC7QHhAQkC7QEJAvUBEwIQAhwCEwIcAisCGQINAhUCGQIVAiUCOgIuAhoCOgIaAigCKQI3AkMCKQJDAiMCFgIdAiECFgIhAiYCIAIUAiwCIAIsAiQCMwIPAhICMwISAkwCGwIvAjgCGwI4AioCQAI0AjACQAIwAjwCMQJKAjYCMQI2Ai0CSAI/AjsCSAI7AkQCPgIYAg4CPgIOAjICNQJJAkUCNQJFAkECJwIiAkICJwJCAjkCPQJGAh4CPQIeAhcCSwIRAh8CSwIfAkcCVAJQAlECVAJRAlUCVwJNAk8CVwJPAlMCWQJbAk4CWQJOAlgCVgJSAlwCVgJcAloCXwJiAnQCXwJ0Am8CYwJgAmwCYwJsApMCbgJ2AmgCbgJoAl4CaQJdAmUCaQJlAokCbQJyAn4CbQJ+AnkCeAJwAnwCeAJ8AoQCkgJrAnsCkgJ7AoACggJ6AmoCggJqAowCnAJ3AoMCnAKDAogCiwKOAoYCiwKGAoECZgKVAo0CZgKNAooCjwKRAn8CjwJ/AocCmAJkApQCmAKUApAClgJnAnUClgJ1ApoCmwJzAmECmwJhApcCfQJxApkCfQKZAoUCowKgAqwCowKsArsCqQKdAqUCqQKlArUCygK+AqoCygKqArgCuQLHAtMCuQLTArMCpgKtArECpgKxArYCsAKkArwCsAK8ArQCwwKfAqICwwKiAtwCqwK/AsgCqwLIAroC0ALEAsAC0ALAAswCwQLaAsYCwQLGAr0C2ALPAssC2ALLAtQCzgKoAp4CzgKeAsICxQLZAtUCxQLVAtECtwKyAtICtwLSAskCzQLWAq4CzQKuAqcC2wKhAq8C2wKvAtcC5ALgAuEC5ALhAuUC5wLdAt8C5wLfAuMC6QLrAt4C6QLeAugC5gLiAuwC5gLsAuoC9ALwAvEC9ALxAvUC9wLtAu8C9wLvAvMC+QL7Au4C+QLuAvgC9gLyAvwC9gL8AvoCBAMAAwEDBAMBAwUDBwP9Av8CBwP/AgMDCQMLA/4CCQP+AggDBgMCAwwDBgMMAwoDFAMQAxEDFAMRAxUDFwMNAw8DFwMPAxMDGQMbAw4DGQMOAxgDFgMSAxwDFgMcAxoDZQAwAzYDZQA2A4sANgBrADMDNgAzAyUDiwA2AzEDiwAxA2gAZQApAB4DZQAeAzADPAA/AC0DPAAtAygDRQBIACoDRQAqAywDQgBFACwDQgAsAysDMgA3ACYDMgAmAyMDKAAzACQDKAAkAx0DbAAvACIDbAAiAzQDRgBoADEDRgAxAykDLgArAB8DLgAfAyEDWgNJA1QDWgNUA1wDcANrA04DcANOA2ADYQNQA0YDYQNGA1cDYwNoA0wDYwNMA0MDbQNmA0UDbQNFA08DTQNiA1gDTQNYA0QDZwNuA18DZwNfA0sDRwNZA1sDRwNbA1EDUgNdA24DUgNuA2cDVgNKA2UDVgNlA2wDSANTA2kDSANpA2QDXgNVA2oDXgNqA28DhwN3A4IDhwOCA4kDmQOVA3wDmQN8A44DjwN+A3QDjwN0A4YDkQOUA3oDkQN6A3EDlwOSA3MDlwNzA30DewOQA4UDewOFA3IDkwOYA40DkwONA3kDdQOIA4oDdQOKA38DgAOLA5gDgAOYA5MDhAN4A5IDhAOSA5cDdgOBA5QDdgOUA5EDjAODA5YDjAOWA5oDBgQEBJ4DBgSeA6ED5QPhA6MD5QOjA8sDsgPQA9gDsgPYA7UDDQQYBNUDDQTVA7gD4gPqA9AD4gPQA7IDHAQHBKIDHASiA+ADAgQJBKUDAgSlA5sDCAQKBKgDCASoA6QDuQPWA7sDuQO7A6sDDwQRBK4DDwSuA7EDEAQOBLoDEAS6A60DDAQTBLQDDAS0A7cD0wOdA6YD0wOmA78DwQOnA6oDwQOqA8UDFwQDBJwDFwScA9IDywOjA58DywOfA9sDrAO+A8kDrAPJA7AD9QP5A8gD9QPIA70DHgT7A9UDHgTVAxgE8gPtA9kD8gPZA9ED/QP0A7wD/QO8A9cD9wP+A+oD9wPqA8cDCgQbBN8DCgTfA6gDrwPHA+oDrwPqA+IDwwOpA+EDwwPhA+UDzAPcA+wDzAPsA/EDxAPmA/8DxAP/A/gD1APAA/MD1APzA/wDFwTSA/sDFwT7Ax4EwgPGA/oDwgP6A/YD3QMUBB0E3QMdBO4DsQPkAxoEsQMaBA8E3gOgAwUE3gMFBBUE7gMdBBYE7gMWBNoD4wOzAxIE4wMSBBkEtgPaAxYEtgMWBAsE6wMABCkE6wMpBCIEygPwAygEygMoBCUE7wPPAyAE7wMgBCcE6APNAyYE6AMmBCQEzgPpAyEEzgMhBB8EAQTnAyMEAQQjBCoEAAAAvwAAAACPwvU9AAAAvwAAAACPwvU9AAAAvwAAAACPwvU9AAAAv87MDEDMzMw9AAAAv87MDEDMzMw9AAAAv87MDEDMzMw9AAAAPwAAAACPwvU9AAAAPwAAAACPwvU9AAAAPwAAAACPwvU9AAAAP87MDEDMzMw9AAAAP87MDEDMzMw9AAAAP87MDEDMzMw978TRvgAAAACPwvU978TRvgAAAACPwvU978TRvgAAAACPwvU9XwLcvs7MDEDMzMw9XwLcvs7MDEDMzMw9GBLSPgAAAACPwvU9GBLSPgAAAACPwvU9GBLSPgAAAACPwvU9ik/cPs7MDEDMzMw9ik/cPs7MDEDMzMw9ik/cPs7MDEDMzMw9AAAAv4XrAUDMzMw9AAAAv4XrAUDMzMw9AAAAP4XrAUDMzMw9AAAAP4XrAUDMzMw9AAAAP4XrAUDMzMw9XwLcvoXrAUDMzMw9XwLcvoXrAUDMzMw9XwLcvoXrAUDMzMw9iE/cPoXrAUDMzMw9iE/cPoXrAUDMzMw9iE/cPoXrAUDMzMw9iE/cPoXrAUDMzMw9iE/cPoXrAUDMzMw978TRvpDC9T2PwvU978TRvpDC9T2PwvU978TRvpDC9T2PwvU978TRvpDC9T2PwvU9AAAAv5DC9T2PwvU9AAAAv5DC9T2PwvU9AAAAv5DC9T2PwvU9AAAAP5DC9T2PwvU9AAAAP5DC9T2PwvU9AAAAP5DC9T2PwvU9GBLSPpDC9T2PwvU9GBLSPpDC9T2PwvU9GBLSPpDC9T2PwvU9GBLSPpDC9T2PwvU9AAAAv7geBT7MzMw9AAAAv7geBT7MzMw9AAAAv7geBT7MzMw9XwLcvrgeBT7MzMw9XwLcvrgeBT7MzMw9XwLcvrgeBT7MzMw9XwLcvrgeBT7MzMw9AAAAP7geBT7MzMw9AAAAP7geBT7MzMw9AAAAP7geBT7MzMw9iE/cPrgeBT7MzMw9iE/cPrgeBT7MzMw9iE/cPrgeBT7MzMw9iE/cPrgeBT7MzMw9AAAAM87MDEDMzMw9AAAAM87MDEDMzMw9AAAAM87MDEDMzMw9AAAAs4XrAUDMzMw9AAAAs4XrAUDMzMw9AAAAs4XrAUDMzMw9AAAAv87MDEBedFGxAAAAv87MDEBedFGxAAAAPwAAAABedFGxAAAAPwAAAABedFGxiE/cPoXrAUBedFGxiE/cPoXrAUBedFGxAAAAv4XrAUBedFGxAAAAv5DC9T1edFGxAAAAv7geBT5edFGxAACAsoXrAUBedFGxAACAMs7MDEBedFGxiU/cPs7MDEBedFGx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AACAPwAAAAAAAACAAACAv6O8BrIAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAI8FBzIAAIA/AAAAAIn7rjIAAIA/AAAAAAAAAAD//38/AAAAADH5ZD8k+eQ+JfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAD//38/AAAAADH5ZD8k+eQ+AAAAAAAAAAAAAIA/AAAAADH5ZD8m+eQ+AACAPwAAAAAAAACAAACAvwAAAACO44q0JvnkvjD5ZD92R0u0AAAAAAAAAAAAAIA/AAAAADH5ZD8m+eQ+AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADH5ZD8k+eQ+AAAAAAAAAAAAAIA/AAAAADH5ZD8k+eQ+JfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAADH5ZD8m+eQ+AACAPwAAAAAAAACAAACAv6O8BrIAAACAJvnkvjD5ZD92R0u0AAAAAAAAAAAAAIA/AAAAADH5ZD8m+eQ+AAAAAAAAAAAAAIA/AAAAAIn7rjIAAIA/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAAIn7rjIAAIA/AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAACAv6O8BrIAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAv6O8BrIAAACAJvnkvjD5ZD92R0u0JfnkPjD5ZD8AAACAAACAPwAAAAAAAACAJfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAACAvwAAAACO44q0JvnkvjD5ZD92R0u0AAAAAP//f78AAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAACAvwAAAACO44q0AAAAAAAAgL8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAAAAAAAAAAD//3+/AACAvwAAAAAAAACAAAAAAAAAAAD//3+/AAAAADD5ZD8l+eS+AAAAAP//f78AAACAAAAAAAAAAAD//3+/AACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAPwAAAAAAAACAJfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAD//3+/AAAAADD5ZD8l+eS+JfnkPjD5ZD8AAACAAACAPwAAAAAAAACAJfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADD5ZD8l+eS+JfnkPjD5ZD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAv/MayrLKa6i0AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAv/MayrLKa6i0AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADD5ZD8l+eS+AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADH5ZD8o+eS+AACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAADH5ZD8o+eS+AACAPwAAAAAAAACA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WAUAQCCN87nMzEw/ABCrObAqDb3MzEw/ABCrObAqDb3MzEw/ABCrObAqDb3MzEw/ABCrObAqDb3MzEw/WAUAQLAqDb3MzEw/WAUAQLAqDb3MzEw/WAUAQLAqDb3MzEw/WAUAQLAqDb0AAICzsQqAPyCN87kAAICzsQqAPyCN87kAAICzsQqAPyCN87kAAICzsQqAP7AqDb0AAICzsQqAP7AqDb0AAICzsQqAP7AqDb3MzEw/sQqAP7AqDb3MzEw/sQqAP7AqDb3MzEw/sQqAP7AqDb3MzEw/sQqAPyCN87nMzEw/sQqAPyCN87nMzEw/sQqAPyCN87kgX449pPCIP7AqDb0gX449pPCIP7AqDb0gX449pPCIP7AqDb0gX449viT3P7AqDb0gX449viT3P7AqDb0gX449viT3P7AqDb0gX449viT3P7AqDb3nADs/viT3P7AqDb3nADs/viT3P7AqDb3nADs/viT3P7AqDb3nADs/viT3P7AqDb3nADs/pPCIP7AqDb3nADs/pPCIP7AqDb3nADs/pPCIP7AqDb3nADs/pPCIPyCN87nnADs/pPCIPyCN87nnADs/pPCIPyCN87nnADs/viT3PyCN87nnADs/viT3PyCN87nnADs/viT3PyCN87nnADs/viT3PyCN87kgX449viT3PyCN87kgX449viT3PyCN87kgX449viT3PyCN87kgX449viT3PyCN87kgX449pPCIPyCN87kgX449pPCIPyCN87kgX449pPCIPyCN87nnADs/OAqPPSCN87nnADs/OAqPPSCN87nnADs/OAqPPSCN87nnADs/OAqPPSCN87nnADs/fUluPyCN87nnADs/fUluPyCN87nnADs/fUluPyCN87nnADs/fUluPyCN87kgX449fUluPyCN87kgX449fUluPyCN87kgX449fUluPyCN87kgX449fUluPyCN87kgX449OAqPPSCN87kgX449OAqPPSCN87kgX449OAqPPSCN87kgX449OAqPPSCN87kgX449OAqPPbAqDb0gX449OAqPPbAqDb0gX449OAqPPbAqDb0gX449OAqPPbAqDb0gX449fUluP7AqDb0gX449fUluP7AqDb0gX449fUluP7AqDb0gX449fUluP7AqDb3nADs/fUluP7AqDb3nADs/fUluP7AqDb3nADs/fUluP7AqDb3nADs/fUluP7AqDb3nADs/OAqPPbAqDb3nADs/OAqPPbAqDb3nADs/OAqPPbAqDb3nADs/OAqPPbAqDb3U96I9LjqKP7AqDb3U96I9LjqKP7AqDb3U96I9LjqKP7AqDb3U96I9M9v1P7AqDb3U96I9M9v1P7AqDb3U96I9M9v1P7AqDb3RbTg/M9v1P7AqDb3RbTg/M9v1P7AqDb3RbTg/M9v1P7AqDb3RbTg/LjqKP7AqDb3RbTg/LjqKP7AqDb3RbTg/LjqKP7AqDb3RbTg/LjqKPyCN87nRbTg/LjqKPyCN87nRbTg/LjqKPyCN87nRbTg/M9v1PyCN87nRbTg/M9v1PyCN87nRbTg/M9v1PyCN87nU96I9M9v1PyCN87nU96I9M9v1PyCN87nU96I9M9v1PyCN87nU96I9LjqKPyCN87nU96I9LjqKPyCN87nU96I9LjqKPyCN87nRbTg/7KKjPSCN87nRbTg/7KKjPSCN87nRbTg/7KKjPSCN87nRbTg/ZrZrPyCN87nRbTg/ZrZrPyCN87nRbTg/ZrZrPyCN87nU96I9ZrZrPyCN87nU96I9ZrZrPyCN87nU96I9ZrZrPyCN87nU96I97KKjPSCN87nU96I97KKjPSCN87nU96I97KKjPSCN87nU96I97KKjPbAqDb3U96I97KKjPbAqDb3U96I97KKjPbAqDb3U96I9ZrZrP7AqDb3U96I9ZrZrP7AqDb3U96I9ZrZrP7AqDb3RbTg/ZrZrP7AqDb3RbTg/ZrZrP7AqDb3RbTg/ZrZrP7AqDb3RbTg/7KKjPbAqDb3RbTg/7KKjPbAqDb3RbTg/7KKjPbAqDb0gX449viT3P5az1LwgX449viT3P5az1LwgX449viT3P5az1LwgX449pPCIP5az1LwgX449pPCIP5az1LwgX449pPCIP5az1LznADs/pPCIP5az1LznADs/pPCIP5az1LznADs/pPCIP5az1LznADs/viT3P5az1LznADs/viT3P5az1LznADs/viT3P5az1LznADs/viT3PwDgErznADs/viT3PwDgErznADs/viT3PwDgErznADs/viT3PwDgErznADs/pPCIPwDgErznADs/pPCIPwDgErznADs/pPCIPwDgErwgX449pPCIPwDgErwgX449pPCIPwDgErwgX449pPCIPwDgErwgX449viT3PwDgErwgX449viT3PwDgErwgX449viT3PwDgErwgX449viT3PwDgErznADs/fUluPwDgErznADs/fUluPwDgErznADs/fUluPwDgErznADs/fUluPwDgErznADs/OAqPPQDgErznADs/OAqPPQDgErznADs/OAqPPQDgErwgX449OAqPPQDgErwgX449OAqPPQDgErwgX449OAqPPQDgErwgX449fUluPwDgErwgX449fUluPwDgErwgX449fUluPwDgErwgX449fUluPwDgErwgX449fUluP5az1LwgX449fUluP5az1LwgX449fUluP5az1LwgX449OAqPPZaz1LwgX449OAqPPZaz1LwgX449OAqPPZaz1LznADs/OAqPPZaz1LznADs/OAqPPZaz1LznADs/OAqPPZaz1LznADs/fUluP5az1LznADs/fUluP5az1LznADs/fUluP5az1LzU96I9M9v1P5az1LzU96I9M9v1P5az1LzU96I9M9v1P5az1LzU96I9LjqKP5az1LzU96I9LjqKP5az1LzU96I9LjqKP5az1LzRbTg/LjqKP5az1LzRbTg/LjqKP5az1LzRbTg/LjqKP5az1LzRbTg/M9v1P5az1LzRbTg/M9v1P5az1LzRbTg/M9v1P5az1LzRbTg/M9v1PwDgErzRbTg/M9v1PwDgErzRbTg/M9v1PwDgErzRbTg/M9v1PwDgErzRbTg/LjqKPwDgErzRbTg/LjqKPwDgErzRbTg/LjqKPwDgErzU96I9LjqKPwDgErzU96I9LjqKPwDgErzU96I9LjqKPwDgErzU96I9M9v1PwDgErzU96I9M9v1PwDgErzU96I9M9v1PwDgErzU96I9M9v1PwDgErzRbTg/ZrZrPwDgErzRbTg/ZrZrPwDgErzRbTg/ZrZrPwDgErzRbTg/ZrZrPwDgErzRbTg/8KKjPQDgErzRbTg/8KKjPQDgErzRbTg/8KKjPQDgErzU96I98KKjPQDgErzU96I98KKjPQDgErzU96I98KKjPQDgErzU96I9ZrZrPwDgErzU96I9ZrZrPwDgErzU96I9ZrZrPwDgErzU96I9ZrZrPwDgErzU96I9ZrZrP5az1LzU96I9ZrZrP5az1LzU96I9ZrZrP5az1LzU96I98KKjPZaz1LzU96I9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AAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIA/AAAAAAAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD///38/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAID//38/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAAAAAP//f78AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD///38/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAID//38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAv0lLa7YAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAv0lLa7YAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAv1BLazYAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAv1BLazYAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL///3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAUsOYMwAAgD///3+/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAID//38/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAUsOYMwAAgD///38/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAFsOYMwAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAAAAFsOYMwAAgD8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAUsOYMwAAgD8AAAAAAACAPwAAAID//38/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD///38/AAAAAAAAAID//3+/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD///3+/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAUsOYMwAAgD8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAA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OAARABIAOAASADsAOwASAAMAOwADABMAOgA7ABMAOgATABQAOQA6ABQAOQAUABUACAA5ABUACAAVAAIACgA0ADkACgA5AAgACwAwADMACwAzAAkAPAA9AEAAPABAAD8APQA+AEEAPQBBAEAAPwBAAEMAPwBDAEIAQABBAEQAQABEAEMAAgAVADwAAgA8ABgAFQAUAD0AFQA9ADwAFAATAD4AFAA+AD0AEwADABkAEwAZAD4APgAZABoAPgAaAEEAQQAaABsAQQAbAEQARAAbAAcARAAHABwAQwBEABwAQwAcAB0AQgBDAB0AQgAdAB4AFgBCAB4AFgAeAAYAFwA/AEIAFwBCABYAGAA8AD8AGAA/ABcARQBGAEsARQBLAEkARgBHAE0ARgBNAEsASABKAE8ASABPAE4ASgBMAFAASgBQAE8ABgAeAEUABgBFACIAHgAdAEYAHgBGAEUAHQAcAEcAHQBHAEYAHAAHACMAHAAjAEcARwAjACUARwAlAE0ATAAkACYATAAmAFAAUAAmAAUAUAAFACcATwBQACcATwAnACgATgBPACgATgAoACkAHwBOACkAHwApAAQAIABIAE4AIABOAB8AIgBFAEkAIgBJACEAUQBSAFUAUQBVAFQAUgBTAFYAUgBWAFUAVABVAFgAVABYAFcAVQBWAFkAVQBZAFgABAApAFEABABRACwAKQAoAFIAKQBSAFEAKAAnAFMAKABTAFIAJwAFAC0AJwAtAFMAUwAtAC4AUwAuAFYAVgAuAC8AVgAvAFkAWQAvAAEAWQABAA4AWABZAA4AWAAOAA0AVwBYAA0AVwANAAwAKgBXAAwAKgAMAAAAKwBUAFcAKwBXACoALABRAFQALABUACsAWgBbAGAAWgBgAF4AWwBcAGIAWwBiAGAAXQBfAGQAXQBkAGMAXwBhAGUAXwBlAGQAAgAYAFoAAgBaAAgAGAAXAFsAGABbAFoAFwAWAFwAFwBcAFsAFgAGACIAFgAiAFwAXAAiACEAXAAhAGIAYQAgAB8AYQAfAGUAZQAfAAQAZQAEACwAZABlACwAZAAsACsAYwBkACsAYwArACoACwBjACoACwAqAAAACQBdAGMACQBjAAsACABaAF4ACABeAAoAZgBnAGwAZgBsAGoAZwBoAG4AZwBuAGwAaQBrAHAAaQBwAG8AawBtAHEAawBxAHAABwAbAGYABwBmACMAGwAaAGcAGwBnAGYAGgAZAGgAGgBoAGcAGQADABIAGQASAGgAaAASABEAaAARAG4AbQAQAA8AbQAPAHEAcQAPAAEAcQABAC8AcABxAC8AcAAvAC4AbwBwAC4AbwAuAC0AJgBvAC0AJgAtAAUAJABpAG8AJABvACYAIwBmAGoAIwBqACUApACiAJgApACYAJkAqgB0AHYAqgB2AKsApQCjAJoApQCaAJsAqwB2AHgAqwB4AKwAqQCmAJUAqQCVAJYArAB4AHoArAB6AK0AogCoAJcAogCXAJgArQB6AHwArQB8AK4AowCkAJkAowCZAJoArgB8AH4ArgB+AK8ApwClAJsApwCbAJMArwB+AIAArwCAALAApgCnAJMApgCTAJUAsACAAIIAsACCALEAqACpAJYAqACWAJcAsQCCAHQAsQB0AKoAhACDAHYAhAB2AHQAgwCFAHgAgwB4AHYAhQCGAHoAhQB6AHgAhgCHAHwAhgB8AHoAhwCIAH4AhwB+AHwAiACJAIAAiACAAH4AiQCKAIIAiQCCAIAAigCEAHQAigB0AIIAlAByAIMAlACDAIQAcgCcAIUAcgCFAIMAnACdAIYAnACGAIUAnQCeAIcAnQCHAIYAngCfAIgAngCIAIcAnwCgAIkAnwCJAIgAoAChAIoAoACKAIkAoQCUAIQAoQCEAIoAjACLAHIAjAByAJQAiwCNAJwAiwCcAHIAjQCOAJ0AjQCdAJwAjgCPAJ4AjgCeAJ0AjwCQAJ8AjwCfAJ4AkACRAKAAkACgAJ8AkQCSAKEAkQChAKAAkgCMAJQAkgCUAKEAjgCNAKkAjgCpAKgAiwCMAKcAiwCnAKYAjACSAKUAjAClAKcAkQCQAKQAkQCkAKMAjwCOAKgAjwCoAKIAjQCLAKYAjQCmAKkAkgCRAKMAkgCjAKUAkACPAKIAkACiAKQAgQCxAKoAgQCqAHMAfwCwALEAfwCxAIEAfQCvALAAfQCwAH8AewCuAK8AewCvAH0AeQCtAK4AeQCuAHsAdwCsAK0AdwCtAHkAdQCrAKwAdQCsAHcAcwCqAKsAcwCrAHUA4gDjAOcA4gDnAOUA4wDkAOkA4wDpAOcA5gDoAOwA5gDsAOsA6ADqAO0A6ADtAOwAsgC+AOIAsgDiAL0AvgC/AOMAvgDjAOIAvwDAAOQAvwDkAOMAwACzAMEAwADBAOQA5ADBAMIA5ADCAOkA6gDDAMQA6gDEAO0A7QDEALUA7QC1AMUA7ADtAMUA7ADFAMYA6wDsAMYA6wDGAMcAugDrAMcAugDHALQAvADmAOsAvADrALoAvQDiAOUAvQDlALsA7gDvAPIA7gDyAPEA7wDwAPMA7wDzAPIA8QDyAPUA8QD1APQA8gDzAPYA8gD2APUAtADHAO4AtADuAMoAxwDGAO8AxwDvAO4AxgDFAPAAxgDwAO8AxQC1AMsAxQDLAPAA8ADLAMwA8ADMAPMA8wDMAM0A8wDNAPYA9gDNALkA9gC5AM4A9QD2AM4A9QDOAM8A9AD1AM8A9ADPANAAyAD0ANAAyADQALgAyQDxAPQAyQD0AMgAygDuAPEAygDxAMkA9wD4AP0A9wD9APsA+AD5AP8A+AD/AP0A+gD8AAEB+gABAQAB/AD+AAIB/AACAQEBuADQAPcAuAD3ANQA0ADPAPgA0AD4APcAzwDOAPkAzwD5APgAzgC5ANUAzgDVAPkA+QDVANcA+QDXAP8A/gDWANgA/gDYAAIBAgHYALcAAgG3ANkAAQECAdkAAQHZANoAAAEBAdoAAAHaANsA0QAAAdsA0QDbALYA0gD6AAAB0gAAAdEA1AD3APsA1AD7ANMAAwEEAQcBAwEHAQYBBAEFAQgBBAEIAQcBBgEHAQoBBgEKAQkBBwEIAQsBBwELAQoBtgDbAAMBtgADAd4A2wDaAAQB2wAEAQMB2gDZAAUB2gAFAQQB2QC3AN8A2QDfAAUBBQHfAOAABQHgAAgBCAHgAOEACAHhAAsBCwHhALMACwGzAMAACgELAcAACgHAAL8ACQEKAb8ACQG/AL4A3AAJAb4A3AC+ALIA3QAGAQkB3QAJAdwA3gADAQYB3gAGAd0ADAENARIBDAESARABDQEOARQBDQEUARIBDwERARYBDwEWARUBEQETARcBEQEXARYBtADKAAwBtAAMAboAygDJAA0BygANAQwByQDIAA4ByQAOAQ0ByAC4ANQAyADUAA4BDgHUANMADgHTABQBEwHSANEAEwHRABcBFwHRALYAFwG2AN4AFgEXAd4AFgHeAN0AFQEWAd0AFQHdANwAvQAVAdwAvQDcALIAuwAPARUBuwAVAb0AugAMARABugAQAbwAGAEZAR4BGAEeARwBGQEaASABGQEgAR4BGwEdASIBGwEiASEBHQEfASMBHQEjASIBuQDNABgBuQAYAdUAzQDMABkBzQAZARgBzADLABoBzAAaARkBywC1AMQAywDEABoBGgHEAMMAGgHDACABHwHCAMEAHwHBACMBIwHBALMAIwGzAOEAIgEjAeEAIgHhAOAAIQEiAeAAIQHgAN8A2AAhAd8A2ADfALcA1gAbASEB1gAhAdgA1QAYARwB1QAcAdcAVgFUAUoBVgFKAUsBXAEmASgBXAEoAV0BVwFVAUwBVwFMAU0BXQEoASoBXQEqAV4BWwFYAUcBWwFHAUgBXgEqASwBXgEsAV8BVAFaAUkBVAFJAUoBXwEsAS4BXwEuAWABVQFWAUsBVQFLAUwBYAEuATABYAEwAWEBWQFXAU0BWQFNAUUBYQEwATIBYQEyAWIBWAFZAUUBWAFFAUcBYgEyATQBYgE0AWMBWgFbAUgBWgFIAUkBYwE0ASYBYwEmAVwBNgE1ASgBNgEoASYBNQE3ASoBNQEqASgBNwE4ASwBNwEsASoBOAE5AS4BOAEuASwBOQE6ATABOQEwAS4BOgE7ATIBOgEyATABOwE8ATQBOwE0ATIBPAE2ASYBPAEmATQBRgEkATUBRgE1ATYBJAFOATcBJAE3ATUBTgFPATgBTgE4ATcBTwFQATkBTwE5ATgBUAFRAToBUAE6ATkBUQFSATsBUQE7AToBUgFTATwBUgE8ATsBUwFGATYBUwE2ATwBPgE9ASQBPgEkAUYBPQE/AU4BPQFOASQBPwFAAU8BPwFPAU4BQAFBAVABQAFQAU8BQQFCAVEBQQFRAVABQgFDAVIBQgFSAVEBQwFEAVMBQwFTAVIBRAE+AUYBRAFGAVMBQAE/AVsBQAFbAVoBPQE+AVkBPQFZAVgBPgFEAVcBPgFXAVkBQwFCAVYBQwFWAVUBQQFAAVoBQQFaAVQBPwE9AVgBPwFYAVsBRAFDAVUBRAFVAVcBQgFBAVQBQgFUAVYBMwFjAVwBMwFcASUBMQFiAWMBMQFjATMBLwFhAWIBLwFiATEBLQFgAWEBLQFhAS8BKwFfAWABKwFgAS0BKQFeAV8BKQFfASsBJwFdAV4BJwFeASkBJQFcAV0BJQFdAScBhAFoAXABhAFwAYcBzgHQAdIBzgHSAdYBjAGDAXsBjAF7AY8B2QHbAd8B2QHfAeMBbQF8AXQBbQF0AWUBggFzAWsBggFrAXoB5QHnAesB5QHrAe8BfwGMAY8BfwGPAXcB8gH0AfYB8gH2AfoBZAGEAYcBZAGHAWwBiAFxAZQBiAGUAZABcgGBAZoBcgGaAZUBgAGKAZwBgAGcAZkBigGIAZABigGQAZwBjgF5AaQBjgGkAZ8BeAFpAaYBeAGmAaMBagGGAakBagGpAacBhgGOAZ8BhgGfAakBdgGOAbMBdgGzAa4BjQGFAbUBjQG1AbIBhgFnAbkBhgG5AbYBZgF1Aa0BZgGtAbgBbgGIAcEBbgHBAbwBiQGLAccBiQHHAcIBigF9AckBigHJAcYBfgFvAb0BfgG9AcoBlwGbAQIClwECAgUC4QHeAUYC4QFGAkMCrAGwARYCrAEWAhoC8wHwAVsC8wFbAlgCkwGYAQYCkwEGAvwB4AHcAT4C4AE+AkkCnQGRAQACnQEAAgQC2AHiAUQC2AFEAkACxAHIASoCxAEqAi0CkgGWAf4BkgH+AQEC3QHaAUIC3QFCAj8CwAHFAS4CwAEuAiQCywG+ASgCywEoAiwCqAGrARECqAERAhUC7QHqAVQC7QFUAlECvwHDASYCvwEmAikC/wH9ATEC/wExAjUC/QEHAjkC/QE5AjECBwIDAjcCBwI3AjkCAwL/ATUCAwI1AjcCDQIKAjwCDQI8AkECCwIUAkgCCwJIAj0CEwIPAkUCEwJFAkcCDwINAkECDwJBAkUCGwIYAkoCGwJKAk8CGQIiAlYCGQJWAksCIQIdAlMCIQJTAlUCHQIbAk8CHQJPAlMCJwIlAlkCJwJZAl0CJQIvAmECJQJhAlkCLwIrAl8CLwJfAmECKwInAl0CKwJdAl8C8QH5AV4C8QFeAlwCugGvARwCugEcAh4C9wH1AVoC9wFaAmICsQG0ASACsQEgAhcCzwHMATMCzwEzAjAC+wH4AWMC+wFjAmACtwG7AR8CtwEfAiMCzQHVATYCzQE2AjQC0wHRATIC0wEyAjoC6QHmAVAC6QFQAk0CngGhAQgCngEIAgwC1wHUATsC1wE7AjgC5AHuAVIC5AFSAk4CqgGgAQ4CqgEOAhAC7AHoAUwC7AFMAlcCogGlARICogESAgkCZQLWAmYCZQJmAmQCaAJqAmUCaAJlAmQCZgLVAmcCZgJnAmQCZwJpAmgCZwJoAmQCaAJpAm4CaAJuAmwCagJoAmwCagJsAnECbQKMAm8CbQJvAmsCawJvAnICawJyAnACcAJyAngCcAJ4AnMCZQJqAnECZQJxAnUC1gJlAnUC1gJ1AncCdAJ5AnoCdAJ6AnYCcgJ/AnsCcgJ7AngCfAKAAnoCfAJ6AnkCfAJ+AoECfAKBAoACkQJ9AnsCkQJ7An8CgAKCAoMCgAKDAnoCgAKBAoQCgAKEAoICggKFAoYCggKGAoMCggKEAocCggKHAoUChQKIAokChQKJAoYChQKHAooChQKKAogCiAKLAowCiAKMAokCiAKKAo0CiAKNAosCiwKOAm8CiwJvAowCiwKNAo8CiwKPAo4CjgJ/AnICjgJyAm8CjgKPApECjgKRAn8CkAKSApECkAKRAo8CrwKQAo8CrwKPAo0ClAJ9ApEClAKRApIClgKVApIClgKSApAClQKXApQClQKUApIClgKbApkClgKZApUCmQKcApcCmQKXApUCmQKaAp4CmQKeApwCmgKZApsCmgKbArYCnQKgAqICnQKiApgCnQKfAqECnQKhAqACpAKjAqACpAKgAqECogKgAqMCogKjAqUCpwKmAqMCpwKjAqQCpQKjAqYCpQKmAqgCqgKpAqYCqgKmAqcCqAKmAqkCqAKpAqsCrQKsAqkCrQKpAqoCqwKpAqwCqwKsAq4CtgKbAqwCtgKsAq0CrgKsApsCrgKbApYCrgKWApACrgKQAq8CqwKuAq8CqwKvArACrwKNAooCrwKKArACsQKwAooCsQKKAocCqAKrArACqAKwArECpQKoArECpQKxArICsgKxAocCsgKHAoQCogKlArICogKyArMCsgKEAoECsgKBArMCkwKzAoECkwKBAn4CmAKiArMCmAKzApMCtAK3ArYCtAK2Aq0CzQK0Aq0CzQKtAqoCtwK5ApoCtwKaArYCvQK7ArgCvQK4ArUCuwK+AroCuwK6ArgCvAK7Ar0CvAK9AswCvAK/Ar4CvAK+ArsCvgK/AsMCvgLDAroCvALKAsACvALAAr8CvwLAAsUCvwLFAsMCuQLBAp4CuQKeApoCwgLEAqECwgKhAp8CxALGAqQCxAKkAqECwALKAscCwALHAsUCxgLIAqcCxgKnAqQCygLLAskCygLJAscCvALMAssCvALLAsoCywLMAs4CywLOAskCzAK9ArUCzAK1As4CyALNAqoCyAKqAqcCzwKJAowCzwKMAm0C0QKGAokC0QKJAs8CZwLVAtICZwLSAtACaQJnAtACaQLQAm4C1QJmAtQC1QLUAtIC0wKDAoYC0wKGAtECZgLWAncCZgJ3AtQCdgJ6AoMCdgKDAtMC2wLdAtgC2wLYAtcC2AJJA9kC2ALZAtcC2QJIA9oC2QLaAtcC2gLcAtsC2gLbAtcC2wLcAuEC2wLhAt8C3QLbAt8C3QLfAuQC4AL/AuIC4ALiAt4C3gLiAuUC3gLlAuMC4wLlAusC4wLrAuYC2ALdAuQC2ALkAugCSQPYAugCSQPoAuoC5wLsAu0C5wLtAukC5QLyAu4C5QLuAusC7wLzAu0C7wLtAuwC7wLxAvQC7wL0AvMCBAPwAu4CBAPuAvIC8wL1AvYC8wL2Au0C8wL0AvcC8wL3AvUC9QL4AvkC9QL5AvYC9QL3AvoC9QL6AvgC+AL7AvwC+AL8AvkC+AL6Av0C+AL9AvsC+wL+Av8C+wL/AvwC+wL9AgAD+wIAA/4C/gIBA+IC/gLiAv8C/gIAAwID/gICAwEDAQPyAuUCAQPlAuICAQMCAwQDAQMEA/ICAwMFAwQDAwMEAwIDIgMDAwIDIgMCAwADBwPwAgQDBwMEAwUDCQMIAwUDCQMFAwMDCAMKAwcDCAMHAwUDCQMOAwwDCQMMAwgDDAMPAwoDDAMKAwgDDAMNAxEDDAMRAw8DDQMMAw4DDQMOAykDEAMTAxUDEAMVAwsDEAMSAxQDEAMUAxMDFwMWAxMDFwMTAxQDFQMTAxYDFQMWAxgDGgMZAxYDGgMWAxcDGAMWAxkDGAMZAxsDHQMcAxkDHQMZAxoDGwMZAxwDGwMcAx4DIAMfAxwDIAMcAx0DHgMcAx8DHgMfAyEDKQMOAx8DKQMfAyADIQMfAw4DIQMOAwkDIQMJAwMDIQMDAyIDHgMhAyIDHgMiAyMDIgMAA/0CIgP9AiMDJAMjA/0CJAP9AvoCGwMeAyMDGwMjAyQDGAMbAyQDGAMkAyUDJQMkA/oCJQP6AvcCFQMYAyUDFQMlAyYDJQP3AvQCJQP0AiYDBgMmA/QCBgP0AvECCwMVAyYDCwMmAwYDJwMqAykDJwMpAyADQAMnAyADQAMgAx0DKgMsAw0DKgMNAykDMAMuAysDMAMrAygDLgMxAy0DLgMtAysDLwMuAzADLwMwAz8DLwMyAzEDLwMxAy4DMQMyAzYDMQM2Ay0DLwM9AzMDLwMzAzIDMgMzAzgDMgM4AzYDLAM0AxEDLAMRAw0DNQM3AxQDNQMUAxIDNwM5AxcDNwMXAxQDMwM9AzoDMwM6AzgDOQM7AxoDOQMaAxcDPQM+AzwDPQM8AzoDLwM/Az4DLwM+Az0DPgM/A0EDPgNBAzwDPwMwAygDPwMoA0EDOwNAAx0DOwMdAxoDQgP8Av8CQgP/AuACRAP5AvwCRAP8AkID2gJIA0UD2gJFA0MD3ALaAkMD3AJDA+ECSAPZAkcDSANHA0UDRgP2AvkCRgP5AkQD2QJJA+oC2QLqAkcD6QLtAvYC6QL2AkYDHYXrvgAAADKCwuM9HYXrvgAAADKCwuM9HYXrvgAAADLizN69HYXrvgAAADLizN69nfvLvgAAADKCwuM9nfvLvgAAADKCwuM9nfvLvgAAADLizN69nfvLvgAAADLizN69HYXrvgAAAACsqry9HYXrvgAAAABsoME9nfvLvgAAADIsG0Q9nfvLvgAAADIsG0Q9nfvLvgAAADLsLzq9nfvLvgAAADLsLzq9XI/CvgAAADIsG0Q9XI/CvgAAADIsG0Q9XI/CvgAAADLsLzq9XI/CvgAAADLsLzq9XI/CvlC4/j/sLzq9XI/CvlC4/j/sLzq9XI/CvlC4/j/sLzq9XI/CvlC4/j/sLzq9XI/CvlC4/j8sG0Q9XI/CvlC4/j8sG0Q9XI/CvlC4/j8sG0Q9XI/CvlC4/j8sG0Q9fEXHvlDw/z9ywuM9fEXHvlDw/z9ywuM9fEXHvlDw/z9ywuM9fEXHvlDw/z9ywuM9HoXrvrgeBUBMoME9HoXrvrgeBUBMoME9HoXrvrgeBUBywuM9HoXrvrgeBUBywuM9HoXrvrgeBUBywuM9HoXrvrgeBUBywuM9fEXHvlDw/z8MG0Q9fEXHvlDw/z8MG0Q9fEXHvlDw/z8MG0Q9fEXHvlDw/z8MG0Q9fEXHvlDw/z/yzN69fEXHvlDw/z/yzN69fEXHvlDw/z/yzN69fEXHvlDw/z/yzN69fEXHvlDw/z8MMDq9fEXHvlDw/z8MMDq9fEXHvlDw/z8MMDq9fEXHvlDw/z8MMDq9HoXrvrgeBUDMqry9HoXrvrgeBUDMqry9HoXrvrgeBUDyzN69HoXrvrgeBUDyzN69HoXrvrgeBUDyzN69HoXrvrgeBUDyzN69HYXrPgAAADKCwuM9HYXrPgAAADKCwuM9HYXrPgAAADLizN69HYXrPgAAADLizN69nfvLPgAAADKCwuM9nfvLPgAAADKCwuM9nfvLPgAAADLizN69nfvLPgAAADLizN69HYXrPgAAAACsqry9HYXrPgAAAABsoME9nfvLPgAAADIsG0Q9nfvLPgAAADIsG0Q9nfvLPgAAADLsLzq9nfvLPgAAADLsLzq9XI/CPgAAADIsG0Q9XI/CPgAAADIsG0Q9XI/CPgAAADLsLzq9XI/CPgAAADLsLzq9XI/CPlC4/j/sLzq9XI/CPlC4/j/sLzq9XI/CPlC4/j/sLzq9XI/CPlC4/j/sLzq9XI/CPlC4/j8sG0Q9XI/CPlC4/j8sG0Q9XI/CPlC4/j8sG0Q9XI/CPlC4/j8sG0Q9fEXHPlDw/z9ywuM9fEXHPlDw/z9ywuM9fEXHPlDw/z9ywuM9fEXHPlDw/z9ywuM9HoXrPrgeBUBMoME9HoXrPrgeBUBMoME9HoXrPrgeBUBywuM9HoXrPrgeBUBywuM9HoXrPrgeBUBywuM9HoXrPrgeBUBywuM9fEXHPlDw/z8MG0Q9fEXHPlDw/z8MG0Q9fEXHPlDw/z8MG0Q9fEXHPlDw/z8MG0Q9fEXHPlDw/z/yzN69fEXHPlDw/z/yzN69fEXHPlDw/z/yzN69fEXHPlDw/z/yzN69fEXHPlDw/z8MMDq9fEXHPlDw/z8MMDq9fEXHPlDw/z8MMDq9fEXHPlDw/z8MMDq9HoXrPrgeBUDMqry9HoXrPrgeBUDMqry9HoXrPrgeBUDyzN69HoXrPrgeBUDyzN69HoXrPrgeBUDyzN69HoXrPrgeBUDyzN69HoXrPoYycj9coME9HoXrPoYycj9coME9XI/CPgLliD/sLzq9XI/CPgLliD/sLzq9XI/CPgLliD/sLzq9XI/CPgLliD8sG0Q9XI/CPgLliD8sG0Q9XI/CPgLliD8sG0Q9jKDJPjQ5hz8cG0Q9jKDJPjQ5hz8cG0Q9jKDJPjQ5hz8cG0Q9jKDJPjQ5hz8cG0Q9jKDJPjQ5hz/8Lzq9jKDJPjQ5hz/8Lzq9jKDJPjQ5hz/8Lzq9jKDJPjQ5hz/8Lzq9HoXrPoYycj+8qry9HoXrPoYycj+8qry9jKDJPjQ5hz96wuM9jKDJPjQ5hz96wuM9jKDJPjQ5hz96wuM9jKDJPjQ5hz96wuM9HoXrPoYycj96wuM9HoXrPoYycj96wuM9HoXrPoYycj96wuM9HoXrPoYycj96wuM9jKDJPjQ5hz/qzN69jKDJPjQ5hz/qzN69jKDJPjQ5hz/qzN69jKDJPjQ5hz/qzN69HoXrPoYycj/qzN69HoXrPoYycj/qzN69HoXrPoYycj/qzN69HoXrPoYycj/qzN69HoXrvoYycj9coME9HoXrvoYycj9coME9XI/CvgLliD/sLzq9XI/CvgLliD/sLzq9XI/CvgLliD/sLzq9XI/CvgLliD8sG0Q9XI/CvgLliD8sG0Q9XI/CvgLliD8sG0Q9jKDJvjQ5hz8cG0Q9jKDJvjQ5hz8cG0Q9jKDJvjQ5hz8cG0Q9jKDJvjQ5hz8cG0Q9jKDJvjQ5hz/8Lzq9jKDJvjQ5hz/8Lzq9jKDJvjQ5hz/8Lzq9jKDJvjQ5hz/8Lzq9HoXrvoYycj+8qry9HoXrvoYycj+8qry9jKDJvjQ5hz96wuM9jKDJvjQ5hz96wuM9jKDJvjQ5hz96wuM9jKDJvjQ5hz96wuM9HoXrvoYycj96wuM9HoXrvoYycj96wuM9HoXrvoYycj96wuM9HoXrvoYycj96wuM9jKDJvjQ5hz/qzN69jKDJvjQ5hz/qzN69jKDJvjQ5hz/qzN69jKDJvjQ5hz/qzN69HoXrvoYycj/qzN69HoXrvoYycj/qzN69HoXrvoYycj/qzN69HoXrvoYycj/qzN69BHPIPhhkyD92wuM9BHPIPhhkyD92wuM9BHPIPhhkyD92wuM9BHPIPhhkyD92wuM9HoXrPs+yuT92wuM9HoXrPs+yuT92wuM9HoXrPs+yuT92wuM9BHPIPhhkyD/uzN69BHPIPhhkyD/uzN69BHPIPhhkyD/uzN69BHPIPhhkyD/uzN69HoXrPs+yuT/uzN69HoXrPs+yuT/uzN69HoXrPs+yuT/uzN69HoXrPs+yuT9UoME9XI/CPhchyj/sLzq9XI/CPhchyj/sLzq9XI/CPhchyj/sLzq9XI/CPhchyj8sG0Q9XI/CPhchyj8sG0Q9XI/CPhchyj8sG0Q9BHPIPhhkyD8UG0Q9BHPIPhhkyD8UG0Q9BHPIPhhkyD8UG0Q9BHPIPhhkyD8UG0Q9BHPIPhhkyD8EMDq9BHPIPhhkyD8EMDq9BHPIPhhkyD8EMDq9BHPIPhhkyD8EMDq9HoXrPs+yuT/Eqry9BHPIvhhkyD92wuM9BHPIvhhkyD92wuM9BHPIvhhkyD92wuM9BHPIvhhkyD92wuM9HoXrvs+yuT92wuM9HoXrvs+yuT92wuM9HoXrvs+yuT92wuM9BHPIvhhkyD/uzN69BHPIvhhkyD/uzN69BHPIvhhkyD/uzN69BHPIvhhkyD/uzN69HoXrvs+yuT/uzN69HoXrvs+yuT/uzN69HoXrvs+yuT/uzN69HoXrvs+yuT9UoME9XI/Cvhchyj/sLzq9XI/Cvhchyj/sLzq9XI/Cvhchyj/sLzq9XI/Cvhchyj8sG0Q9XI/Cvhchyj8sG0Q9XI/Cvhchyj8sG0Q9BHPIvhhkyD8UG0Q9BHPIvhhkyD8UG0Q9BHPIvhhkyD8UG0Q9BHPIvhhkyD8UG0Q9BHPIvhhkyD8EMDq9BHPIvhhkyD8EMDq9BHPIvhhkyD8EMDq9BHPIvhhkyD8EMDq9HoXrvs+yuT/Eqry9QNzHPp+S6z90wuM9QNzHPp+S6z90wuM9QNzHPp+S6z90wuM9QNzHPp+S6z90wuM9HoXrPoCx1T90wuM9HoXrPoCx1T90wuM9HoXrPoCx1T90wuM9HoXrPoCx1T90wuM9QNzHPp+S6z/wzN69QNzHPp+S6z/wzN69QNzHPp+S6z/wzN69QNzHPp+S6z/wzN69HoXrPoCx1T/wzN69HoXrPoCx1T/wzN69HoXrPoCx1T/wzN69HoXrPoCx1T9QoME9HoXrPoCx1T9QoME9XI/CPkwp7j/sLzq9XI/CPkwp7j/sLzq9XI/CPkwp7j/sLzq9XI/CPkwp7j8sG0Q9XI/CPkwp7j8sG0Q9XI/CPkwp7j8sG0Q9QNzHPp+S6z8QG0Q9QNzHPp+S6z8QG0Q9QNzHPp+S6z8QG0Q9QNzHPp+S6z8QG0Q9QNzHPp+S6z8IMDq9QNzHPp+S6z8IMDq9QNzHPp+S6z8IMDq9QNzHPp+S6z8IMDq9HoXrPoCx1T/Iqry9QNzHvp+S6z90wuM9QNzHvp+S6z90wuM9QNzHvp+S6z90wuM9QNzHvp+S6z90wuM9HoXrvoCx1T90wuM9HoXrvoCx1T90wuM9HoXrvoCx1T90wuM9QNzHvp+S6z/wzN69QNzHvp+S6z/wzN69QNzHvp+S6z/wzN69QNzHvp+S6z/wzN69HoXrvoCx1T/wzN69HoXrvoCx1T/wzN69HoXrvoCx1T/wzN69HoXrvoCx1T9QoME9XI/Cvkwp7j/sLzq9XI/Cvkwp7j/sLzq9XI/Cvkwp7j/sLzq9XI/Cvkwp7j8sG0Q9XI/Cvkwp7j8sG0Q9XI/Cvkwp7j8sG0Q9QNzHvp+S6z8QG0Q9QNzHvp+S6z8QG0Q9QNzHvp+S6z8QG0Q9QNzHvp+S6z8QG0Q9QNzHvp+S6z8IMDq9QNzHvp+S6z8IMDq9QNzHvp+S6z8IMDq9QNzHvp+S6z8IMDq9HoXrvoCx1T/Iqry9AACAv2xLB7MAAACA2zdds4tEfjMAAIA/AACAv21LB7MAAACA2zddMxMVh7MAAIC/2zdds4tEfjMAAIA/Yv9/Pya2jrsAAACA2zddMxMVh7MAAIC/Yv9/PyW2jrsAAACAAACAv21LB7MAAACAAACAv2xLB7MAAACASiP6tawtEjMAAIA/Yv9/Pya2jrsAAACASiP6NawtErMAAIC/Yv9/PyW2jrsAAACASiP6tawtEjMAAIA/AACAPwAAAAAAAACASiP6NawtErMAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAACVGRLcAAIC/SqtAN8wU3rMAAIC/AACAPwAAAAAAAACAOatAty2qsTP//38/AAAAAAAAgL8AAACAAAAAAMLOTDcAAIA/AACAPwAAAAAAAACARekQs1NBSDMAAIA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/Sf5/P1Hi7LsAAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACARekQs1NBSDMAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAOatAty2qsTP//38/AAAAAAAAgL8AAACAAAAAAMLOTDcAAIA/Sf5/P1Hi7LsAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/R+kQM+aLhrMAAIC/Sf5/P1Pi7LsAAACAAAAAAAAAgL8AAACAAAAAACVGRLcAAIC/SqtAN8wU3rMAAIC/Sf5/P1Pi7LsAAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAR+kQM+aLhrMAAIC/2zddM2aWejMAAIA/AACAP2xLB7NQYmm02zdds+eKjbMAAIC/AACAP21LB7MAAACAYv9/vya2jrsAAACA2zddM2aWejMAAIA/Yv9/vyW2jrsAAACA2zdds+eKjbMAAIC/AACAP21LB7MAAACAAACAP2xLB7NQYmm0Yv9/vya2jrsAAACASiP6NawtEjMAAIA/Yv9/vyW2jrsAAACASiP6tawtErMAAIC/AACAvwAAAAAAAACASiP6NawtEjMAAIA/AACAvwAAAAAAAACASiP6tawtErMAAIC/AACAvwAAAAAAAACAOatAt7gU3rP//3+/AAAAAAAAgL8AAACAAAAAACVGRLcAAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAMLOTDcAAIA/SqtANz2qsTMAAIA/Sv5/v0/i7LsAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/R+kQM6xRejMAAIA/AAAAAAAAgD8AAACA//9/PwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAR+kQM6xRejMAAIA///9/PwAAAAAAAACASv5/v0/i7LsAAACAAAAAAAAAgL8AAACAAAAAAMLOTDcAAIA/SqtANz2qsTMAAIA/Sv5/v1Hi7LsAAACARekQs/4wlrMAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/Sv5/v1Hi7LsAAACAOatAt7gU3rP//3+/AAAAAAAAgL8AAACAAAAAACVGRLcAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACARekQs/4wlrMAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAP2xLB7NQYmm0AACAPwAAAAAAAACAAACAvwAAAAAAAACAixfHtrWGG7MAAIC/SiP6tawtErMAAIC/AACAvwAAAAAAAACASiP6NawtEjMAAIA/fhfHNlZoQjMAAIA/Yv9/vya2jrsAAACAVv9/vyEQlLsAAACASiP6NawtEjMAAIA/fhfHNlZoQjMAAIA/Yv9/vyW2jrsAAACAVv9/vyEQlLsAAACAixfHtrWGG7MAAIC/SiP6tawtErMAAIC/AACAP21LB7MAAACAAACAPwAAAAAAAACAYv9/vya2jrsAAACAVv9/vyEQlLsAAACA2zddM2aWejMAAIA/2dXTMwJCdjMAAIA/2zddM2aWejMAAIA/2dXTMwJCdjMAAIA/AACAP2xLB7NQYmm0AACAPwAAAAAAAACAYv9/vyW2jrsAAACAVv9/vyEQlLsAAACA39XTswkFk7MAAIC/2zdds+eKjbMAAIC/39XTswkFk7MAAIC/2zdds+eKjbMAAIC/AACAP21LB7MAAACAAACAPwAAAAAAAACAAACAv2xLB7MAAACAAACAvwAAAAAAAACASiP6NawtErMAAIC/fhfHNquGG7MAAIC/AACAPwAAAAAAAACAixfHtmJoQjMAAIA/SiP6tawtEjMAAIA/AACAPwAAAAAAAACAixfHtmJoQjMAAIA/SiP6tawtEjMAAIA/Vv9/PyEQlLsAAACAYv9/Pya2jrsAAACASiP6NawtErMAAIC/fhfHNquGG7MAAIC/Vv9/PyEQlLsAAACAYv9/PyW2jrsAAACAAACAv21LB7MAAACAAACAvwAAAAAAAACA39XTs0I7azMAAIA/2zdds4tEfjMAAIA/Vv9/PyEQlLsAAACAYv9/Pya2jrsAAACAAACAv2xLB7MAAACAAACAvwAAAAAAAACA39XTs0I7azMAAIA/2zdds4tEfjMAAIA/2zddMxMVh7MAAIC/2dXTM8gnhrMAAIC/Vv9/PyEQlLsAAACAYv9/PyW2jrsAAACAAACAv21LB7MAAACAAACAvwAAAAAAAACA2zddMxMVh7MAAIC/2dXTM8gnhrMAAIC/bf9/vykhibsAAACAVv9/vyEQlLsAAACA2dXTMwJCdjMAAIA//70GNOo2lTMAAIA/2dXTMwJCdjMAAIA//70GNOo2lTMAAIA/AACAPwAAAAAAAACAbf9/vyshibsAAACAVv9/vyEQlLsAAACA/70GtLjLa7MAAIC/39XTswkFk7MAAIC//70GtLjLa7MAAIC/39XTswkFk7MAAIC/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAKuIVt2iFd7MAAIC/ixfHtrWGG7MAAIC/AACAvwAAAAAAAACAfhfHNlZoQjMAAIA/HeIVN1uFdzP//38/bf9/vykhibsAAACAVv9/vyEQlLsAAACAfhfHNlZoQjMAAIA/HeIVN1uFdzP//38/bf9/vyshibsAAACAVv9/vyEQlLsAAACAKuIVt2iFd7MAAIC/ixfHtrWGG7MAAIC/AACAPwAAAAAAAACA/70GtMrYsDMAAIA/39XTs0I7azMAAIA/Vv9/PyEQlLsAAACAbP9/PyUhibsAAACAAACAvwAAAAAAAACA/70GtMrYsDMAAIA/39XTs0I7azMAAIA/2dXTM8gnhrMAAIC//70GNBKjSrMAAIC/Vv9/PyEQlLsAAACAbP9/PychibsAAACAAACAvwAAAAAAAACA2dXTM8gnhrMAAIC//70GNBKjSrMAAIC/AACAvwAAAAAAAACAfhfHNquGG7MAAIC/HeIVN3ZETrP//3+/AACAPwAAAAAAAACAKuIVt2iFdzMAAIA/ixfHtmJoQjMAAIA/AACAPwAAAAAAAACAKuIVt2iFdzMAAIA/ixfHtmJoQjMAAIA/Vv9/PyEQlLsAAACAbP9/PyUhibsAAACAfhfHNquGG7MAAIC/HeIVN3ZETrP//3+/Vv9/PyEQlLsAAACAbP9/PychibsAAACAAACAvwAAAAAAAACAbf9/vykhibsAAACASv5/v0/i7LsAAACAR+kQM6xRejMAAIA//70GNOo2lTMAAIA/R+kQM6xRejMAAIA//70GNOo2lTMAAIA///9/PwAAAAAAAACAAACAPwAAAAAAAACAbf9/vyshibsAAACASv5/v1Hi7LsAAACA/70GtLjLa7MAAIC/RekQs/4wlrMAAIC//70GtLjLa7MAAIC/RekQs/4wlrMAAIC/AACAPwAAAAAAAACA//9/PwAAAAAAAACAAACAPwAAAAAAAACAAACAvwAAAAAAAACAOatAt7gU3rP//3+/KuIVt2iFd7MAAIC/AACAvwAAAAAAAACAHeIVN1uFdzP//38/SqtANz2qsTMAAIA/bf9/vykhibsAAACASv5/v0/i7LsAAACAHeIVN1uFdzP//38/SqtANz2qsTMAAIA/bf9/vyshibsAAACASv5/v1Hi7LsAAACAOatAt7gU3rP//3+/KuIVt2iFd7MAAIC/AACAPwAAAAAAAACA/70GtMrYsDMAAIA/RekQs1NBSDMAAIA/Sf5/P1Hi7LsAAACAbP9/PyUhibsAAACAAACAvwAAAAAAAACA/70GtMrYsDMAAIA/RekQs1NBSDMAAIA/R+kQM+aLhrMAAIC//70GNBKjSrMAAIC/Sf5/P1Pi7LsAAACAbP9/PychibsAAACAAACAvwAAAAAAAACAR+kQM+aLhrMAAIC//70GNBKjSrMAAIC/AACAvwAAAAAAAACAHeIVN3ZETrP//3+/SqtAN8wU3rMAAIC/AACAPwAAAAAAAACAOatAty2qsTP//38/KuIVt2iFdzMAAIA/AACAPwAAAAAAAACAOatAty2qsTP//38/KuIVt2iFdzMAAIA/Sf5/P1Hi7LsAAACAbP9/PyUhibsAAACAHeIVN3ZETrP//3+/SqtAN8wU3rMAAIC/Sf5/P1Pi7LsAAACAbP9/PychibsAAACAAACAvwAAAAAAAACA4LxAP+avAD/gvEA/5q8AP0LVOz/nrwA/QtU7P+evAD/VwD8/5q8AP9XAPz/mrwA/TNE8P+evAD9M0Tw/568AP3yjOz/nrwA/pu5AP+evAD+zAz8/5q8AP7MDPz/mrwA/cY49P+evAD9xjj0/568AP3DUPj/mrwA/cNQ+P+avAD+yvT0/568AP7K9PT/nrwA/5to9P2z8GD/m2j0/bPwYP+baPT9s/Bg/5to9P2z8GD/Ruj4/avkYP9G6Pj9q+Rg/0bo+P2r5GD/Ruj4/avkYP4G3Pz9+8Bg/gbc/P37wGD+Btz8/fvAYP4G3Pz9+8Bg/pe5AP85bGT+l7kA/zlsZPwKcQD9qsBY/ApxAP2qwFj8CnEA/arAWPwKcQD9qsBY/xgI/P7cDGT/GAj8/twMZP8YCPz+3Axk/xgI/P7cDGT+a3jw/pPkYP5rePD+k+Rg/mt48P6T5GD+a3jw/pPkYP9KSPT8RBxk/0pI9PxEHGT/Skj0/EQcZP9KSPT8RBxk/fKM7P85bGT98ozs/zlsZP//1Oz/qrhY///U7P+quFj//9Ts/6q4WP//1Oz/qrhY/4LxAPwIpTD/gvEA/AilMP0PVOz8CKUw/Q9U7PwIpTD/WwD8/AilMP9bAPz8CKUw/TNE8PwIpTD9M0Tw/AilMP3yjOz8CKUw/pu5APwIpTD+yAz8/AilMP7IDPz8CKUw/cY49PwIpTD9xjj0/AilMP3DUPj8CKUw/cNQ+PwIpTD+yvT0/AilMP7K9PT8CKUw/S9c9P65+Mz9L1z0/rn4zP0vXPT+ufjM/S9c9P65+Mz8mtz4/XHgzPya3Pj9ceDM/Jrc+P1x4Mz8mtz4/XHgzP3+zPz/cejM/f7M/P9x6Mz9/sz8/3HozP3+zPz/cejM/pu5AP44XMz+m7kA/jhczPxKcQD80xDU/EpxAPzTENT8SnEA/NMQ1PxKcQD80xDU/R/8+P55tMz9H/z4/nm0zP0f/Pj+ebTM/R/8+P55tMz+t2jw/noYzP63aPD+ehjM/rdo8P56GMz+t2jw/noYzP1iPPT8ydDM/WI89PzJ0Mz9Yjz0/MnQzP1iPPT8ydDM/fKM7P44XMz98ozs/jhczPy/2Oz9YwzU/L/Y7P1jDNT8v9js/WMM1Py/2Oz9YwzU/pu5AP0igPz+m7kA/SKA/P37KPT/Y0z8/fso9P9jTPz9+yj0/2NM/P8vFPj+v0D8/y8U+P6/QPz/LxT4/r9A/P3wBPz9Qyz8/fAE/P1DLPz98AT8/UMs/P3wBPz9Qyz8/5I49P5rOPz/kjj0/ms4/P+SOPT+azj8/5I49P5rOPz98ozs/SKA/P3yjOz9IoD8/Kro/P+/RPz8quj8/79E/Pyq6Pz/v0T8/Kro/P+/RPz95rEA/m/ZAP3msQD+b9kA/eaxAP5v2QD95rEA/m/ZAP/zVPD/Q1z8//NU8P9DXPz/81Tw/0Nc/P/zVPD/Q1z8/ueU7Py32QD+55Ts/LfZAP7nlOz8t9kA/ueU7Py32QD+m7kA/2wUNP6buQD/bBQ0/TMw9PyrWDD9MzD0/KtYMP0zMPT8q1gw/oMc+P6jUDD+gxz4/qNQMP6DHPj+o1Aw/PAM/P8/ZDD88Az8/z9kMPzwDPz/P2Qw/PAM/P8/ZDD+ikD0/fNsMP6KQPT982ww/opA9P3zbDD+ikD0/fNsMP3yjOz/bBQ0/fKM7P9sFDT8rvD8/MtAMPyu8Pz8y0Aw/K7w/PzLQDD8rvD8/MtAMP3GsQD8osAs/caxAPyiwCz9xrEA/KLALP3GsQD8osAs/89c8P8bUDD/z1zw/xtQMP/PXPD/G1Aw/89c8P8bUDD+g5Ts/aK8LP6DlOz9orws/oOU7P2ivCz+g5Ts/aK8LP9S2Pz9mpjk/1LY/P2amOT/Utj8/ZqY5P9S2Pz9mpjk/RqRAP2hdOz9GpEA/aF07P0akQD9oXTs/VNg8PzavOT9U2Dw/Nq85P1TYPD82rzk/VNg8PzavOT/07Ts/w1w7P/TtOz/DXDs/9O07P8NcOz+m7kA/61s5P+TQPT9CqTk/5NA9P0KpOT/k0D0/Qqk5P3i+Pj+GpDk/eL4+P4akOT94vj4/hqQ5P2IAPz92nDk/YgA/P3acOT9iAD8/dpw5P2IAPz92nDk/Ho89P2ahOT8ejz0/ZqE5Px6PPT9moTk/Ho89P2ahOT98ozs/61s5P9a5Pz9Y4BI/1rk/P1jgEj/WuT8/WOASP9a5Pz9Y4BI/OqRAP0kwET86pEA/STARPzqkQD9JMBE/Rts8PzXnEj9G2zw/NecSP0bbPD815xI/Rts8PzXnEj/Q7Ts/KS8RP9DtOz8pLxE/0O07PykvET+m7kA/1TATP5nTPT9L6RI/mdM9P0vpEj+Z0z0/S+kSPzjBPj8J5xI/OME+PwnnEj84wT4/CecSPwEDPz/D7hI/AQM/P8PuEj8BAz8/w+4SPwEDPz/D7hI/upE9P0bxEj+6kT0/RvESP7qRPT9G8RI/upE9P0bxEj98ozs/1TATPyq1Pz+hkDY/KrU/P6GQNj8qtT8/oZA2Pyq1Pz+hkDY/LKBAP86QOD8soEA/zpA4PyygQD/OkDg/LKBAP86QOD+A2Tw/6po2P4DZPD/qmjY/gNk8P+qaNj+A2Tw/6po2PxLyOz8OkDg/EvI7Pw6QOD8S8js/DpA4P6buQD+8OTY/pu5AP7w5Nj8Y1D0/+JM2PxjUPT/4kzY/GNQ9P/iTNj/Puj4/cY42P8+6Pj9xjjY/z7o+P3GONj/U/z4/CoU2P9T/Pj8KhTY/1P8+PwqFNj/U/z4/CoU2PzuPPT/MijY/O489P8yKNj87jz0/zIo2PzuPPT/MijY/fKM7P7w5Nj+suD8/a+gVP6y4Pz9r6BU/rLg/P2voFT+suD8/a+gVPx6gQD9a8BM/HqBAP1rwEz8eoEA/WvATP/DcPD9t8BU/8Nw8P23wFT/w3Dw/bfAVP/DcPD9t8BU/6PE7PwrvEz/o8Ts/Cu8TP+jxOz8K7xM/pu5AP1JGFj9A1z0/3PIVP0DXPT/c8hU/QNc9P9zyFT8Evj4/OvAVPwS+Pj868BU/BL4+PzrwFT/kAj8/PfkVP+QCPz89+RU/5AI/Pz35FT/kAj8/PfkVP0aSPT8s/BU/RpI9Pyz8FT9Gkj0/LPwVP0aSPT8s/BU/fKM7P1JGFj8YATUAKgAYASoAEwEVASsALwAVAS8AJwENARoAIQANASEAEgEQASAAHgAQAR4AGgEYAE4AXAAYAFwAJgDtAFAAWgDtAFoABAEoAGAAZAAoAGQALAAmAS4AFAAmARQAHAFhACkAMwBhADMAaQCUAJcACgCUAAoADgAdARUAGQAdARkAIAFWACIAHABWABwAUgAjAFcAVAAjAFQAHwD6AGsAZwD6AGcACwFNABcAEgBNABIASgBRABsAJQBRACUAWwBLABMALQBLAC0AZQD3AF8AaAD3AGgA+QAIAWIAXgAIAV4A9QDwAFgAUwDwAFMA7gBsAIQANwBsADcAPwBqADQAMQBqADEAZgBwAHsAQwBwAEMARwAGAV0ATwAGAU8AAgH9AAABTAD9AEwASAAjAScAHQAjAR0ADgEpATAAMgApATIAFwFGAEQAcQBGAHEAbgBBAHYAcgBBAHIARQDBAMwAegDBAHoAbwC+ALYAhQC+AIUAbQA2AIIAgAA2AIAAOwBCAHgAhgBCAIYAPAA9AIkAiwA9AIsAOAA5AIwAfAA5AHwAPgA6AH4AdAA6AHQAQAAIAJ4ArAAIAKwAAgALAJkAowALAKMABQARAJIAlQARAJUADwDhAOQAlgDhAJYAkwAMAJoAkAAMAJAAEAAAAKQAjgAAAI4ACQAEAKEApwAEAKcAAQAHAKsAnQAHAJ0ADQADAK4AqAADAKgABgD8APMAtgD8ALYAvgD/AAoBywD/AMsAwABuAHEAwgBuAMIAvwB3AMcAwwB3AMMAcwCDALQAsgCDALIAgQB5AMoAuAB5ALgAhwCIALoAvACIALwAigCNAL0AzQCNAM0AfQB/ALEAxgB/AMYAdQAfASIB4wAfAeMA4ACfAOsA2QCfANkArQCYAOUA0ACYANAAogCSAN8A4gCSAOIAlQCbAOcA3QCbAN0AkQClANIA3AClANwAjwCgAM8A1ACgANQApgCqANcA6QCqAOkAnACvANoA1QCvANUAqQBJAGMACQFJAAkB/gBVAFkA8gBVAPIA+wC/AMIAAAG/AAAB/QDIAAUBAQHIAAEBxAC1APEA7wC1AO8AswDJAAcB9ADJAPQAtwC5APYA+AC5APgAuwC9APoACwG9AAsBzQCwAOwAAwGwAAMBxQAWACQAIQEWACEBHgHrACkBFwHrABcB2QDmACQBDwHmAA8B0QDfAB0BIAHfACAB4gDoACUBGwHoABsB3gDSABABGgHSABoB3ADOAAwBEQHOABEB0wDYABYBKAHYACgB6gDbABkBFAHbABQB1gA=" + } + ] +} diff --git a/Assets/Models/HouseModular.shmodel b/Assets/Models/HouseModular.shmodel new file mode 100644 index 0000000000000000000000000000000000000000..4fb25c50088efff700561b6f5f02efc4fdaa134a GIT binary patch literal 252695 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 Yb7mpwi1e>ze2v6e9g}{ujB{rH2M) Date: Sun, 13 Nov 2022 22:29:04 +0800 Subject: [PATCH 779/793] References path for csproj generated file is now dynamically generated --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 1fa4e6d7..9d3ad3e8 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -238,8 +238,13 @@ namespace SHADE void SHScriptEngine::GenerateScriptsCsProjFile(const std::filesystem::path& path) const { + // Compute relative path + const std::filesystem::path EXE_DIR = std::filesystem::current_path(); + const std::filesystem::path MANAGED_DLL_DIR = EXE_DIR / "SHADE_Managed.dll"; + const std::filesystem::path CS_DLL_DIR = EXE_DIR / "SHADE_CSharp.dll"; + // Sample - static std::string_view FILE_CONTENTS = + static std::string_view FILE_CONTENTS_BEGIN = "\n\ \n\ net5.0\n\ @@ -269,14 +274,12 @@ namespace SHADE \n\ \n\ \n\ - \n\ - ..\\..\\bin\\Debug\\SHADE_Managed.dll\n\ - ..\\..\\bin\\Release\\SHADE_Managed.dll\n\ - \n\ - \n\ - ..\\..\\bin\\Debug\\SHADE_CSharp.dll\n\ - ..\\..\\bin\\Release\\SHADE_CSharp.dll\n\ - \n\ + \n"; + static std::string_view FILE_CONTENTS_MID = +" \n\ + \n"; + static std::string_view FILE_CONTENTS_END = +" \n\ \n\ "; @@ -286,7 +289,12 @@ namespace SHADE throw std::runtime_error("Unable to create CsProj file!"); // Fill the file - file << FILE_CONTENTS; + const std::filesystem::path CSPROJ_DIR = path.parent_path(); + file << FILE_CONTENTS_BEGIN + << " " << std::filesystem::relative(MANAGED_DLL_DIR, CSPROJ_DIR).string() << "\n" + << FILE_CONTENTS_MID + << " " << std::filesystem::relative(CS_DLL_DIR, CSPROJ_DIR).string() << "\n" + << FILE_CONTENTS_END; // Close file.close(); From d36d70e3eb28078a507a86cad7256a51fbba8eaa Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 14 Nov 2022 00:20:54 +0800 Subject: [PATCH 780/793] Added a forced update to the physics system --- .../Physics/PhysicsObject/SHPhysicsObject.cpp | 9 ++ .../PhysicsObject/SHPhysicsObjectManager.cpp | 11 ++ .../PhysicsObject/SHPhysicsObjectManager.h | 4 + .../src/Physics/System/SHPhysicsSystem.cpp | 137 +++++++++++++++++- .../src/Physics/System/SHPhysicsSystem.h | 49 +++---- .../System/SHPhysicsSystemInterface.cpp | 2 +- .../System/SHPhysicsSystemRoutines.cpp | 124 ++-------------- 7 files changed, 194 insertions(+), 142 deletions(-) diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 0c9fa405..4c920bbc 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -16,6 +16,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" #include "ECS_Base/Managers/SHComponentManager.h" +#include "Scene/SHSceneManager.h" namespace SHADE @@ -148,6 +149,10 @@ namespace SHADE void SHPhysicsObject::SyncRigidBody(SHRigidBodyComponent& component) const noexcept { + // This state is synced in the pre-update routine + if (!rp3dBody->isActive()) + return; + if (component.dirtyFlags == 0) return; @@ -267,6 +272,10 @@ namespace SHADE void SHPhysicsObject::SyncColliders(SHColliderComponent& component) const noexcept { + // This state is synced in the pre-update routine + if (!rp3dBody->isActive()) + return; + int index = 0; for (auto& collisionShape : component.collisionShapes) { diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp index 13f525e6..f8a4040f 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.cpp @@ -167,6 +167,7 @@ namespace SHADE if (!COMPONENT_GROUP.rigidBodyComponent && !COMPONENT_GROUP.colliderComponent) { destroyPhysicsObject(COMMAND.eid); + wakeAllObjects(); continue; } @@ -176,6 +177,10 @@ namespace SHADE physicsObject = createPhysicsObject(COMMAND.eid); componentFunc[SHUtilities::ConvertEnum(COMMAND.command)][SHUtilities::ConvertEnum(COMMAND.component)](COMMAND, physicsObject, COMPONENT_GROUP); + + // If any removal was done, wake all objects + if (COMMAND.command == QueueCommand::Command::REMOVE) + wakeAllObjects(); } } @@ -297,5 +302,11 @@ namespace SHADE physicsObject->RemoveCollisionShape(command.shapeIndex); } + void SHPhysicsObjectManager::wakeAllObjects() noexcept + { + for (auto& physicsObject : physicsObjects | std::views::values) + physicsObject.GetRigidBody()->setIsSleeping(false); + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h index d8c9b805..641fd9df 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObjectManager.h @@ -165,6 +165,8 @@ namespace SHADE SHPhysicsObject* createPhysicsObject (EntityID eid) noexcept; void destroyPhysicsObject (EntityID eid) noexcept; + void wakeAllObjects () noexcept; + static void addRigidBody (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); static void addCollider (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); static void removeRigidBody (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); @@ -172,6 +174,8 @@ namespace SHADE static void addCollisionShape (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); static void removeCollisionShape (const QueueCommand& command, SHPhysicsObject* physicsObject, const PhysicsComponentGroup& componentGroup); + + }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 34f0c698..d94cfb58 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -20,6 +20,7 @@ #include "Editor/SHEditor.h" #include "Physics/SHPhysicsEvents.h" #include "Scene/SHSceneManager.h" +#include "Scripting/SHScriptEngine.h" /*-------------------------------------------------------------------------------------*/ /* Local Helper Functions */ @@ -34,16 +35,16 @@ namespace SHADE SHPhysicsSystem::SHPhysicsSystem() : worldUpdated { false } , interpolationFactor { 0.0 } - , fixedDT { 60.0 } + , fixedDT { DEFAULT_FIXED_STEP } {} /*-----------------------------------------------------------------------------------*/ /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - double SHPhysicsSystem::GetFixedDT() const noexcept + double SHPhysicsSystem::GetFixedUpdateRate() const noexcept { - return fixedDT; + return 1.0 / fixedDT; } const SHPhysicsWorldState::WorldSettings& SHPhysicsSystem::GetWorldSettings() const noexcept @@ -76,9 +77,9 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHPhysicsSystem::SetFixedDT(double fixedUpdateRate) noexcept + void SHPhysicsSystem::SetFixedUpdateRate(double fixedUpdateRate) noexcept { - fixedDT = fixedUpdateRate; + fixedDT = 1.0 / fixedUpdateRate; } void SHPhysicsSystem::SetWorldSettings(const SHPhysicsWorldState::WorldSettings& settings) noexcept @@ -126,6 +127,45 @@ namespace SHADE worldState.DestroyWorld(factory); } + void SHPhysicsSystem::ForceUpdate() + { + if (!worldState.world) + { + SHLOGV_ERROR("Unable to force update without a Physics world!") + return; + } + + auto* scriptingSystem = SHSystemManager::GetSystem(); + if (scriptingSystem == nullptr) + { + SHLOGV_ERROR("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); + } + + // Force the physics world to update once + if (scriptingSystem != nullptr) + scriptingSystem->ExecuteFixedUpdates(); + + worldState.world->update(static_cast(fixedDT)); + + // Sync transforms. No interpolation applied here + for (auto& [entityID, physicsObject] : objectManager.physicsObjects) + { + auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + + postUpdateSyncTransforms + ( + physicsObject + , transformComponent + , rigidBodyComponent + , colliderComponent + , 1.0 // We use 1.0 here to avoid any interpolation + ); + } + } + + void SHPhysicsSystem::AddCollisionShape(EntityID eid, int shapeIndex) { static const auto ADD_SHAPE = [&](EntityID entityID, int index) @@ -339,5 +379,92 @@ namespace SHADE return onStopEvent->handle; } + void SHPhysicsSystem::preUpdateSyncTransform + ( + SHPhysicsObject& physicsObject + , SHTransformComponent* transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + ) noexcept + { + if (!transformComponent) + return; + + const SHVec3& WORLD_POS = transformComponent->GetWorldPosition(); + const SHQuaternion& WORLD_ROT = transformComponent->GetWorldOrientation(); + const SHVec3& WORLD_SCL = transformComponent->GetWorldScale(); + + const rp3d::Transform RP3D_TRANSFORM { WORLD_POS, WORLD_ROT }; + physicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); + + if (rigidBodyComponent) + { + rigidBodyComponent->position = WORLD_POS; + rigidBodyComponent->orientation = WORLD_ROT; + } + + if (colliderComponent) + { + colliderComponent->position = WORLD_POS; + colliderComponent->orientation = WORLD_ROT; + colliderComponent->scale = WORLD_SCL; + + colliderComponent->RecomputeCollisionShapes(); + } + } + + void SHPhysicsSystem::postUpdateSyncTransforms + ( + SHPhysicsObject& physicsObject + , SHTransformComponent* transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + , double interpolationFactor + ) noexcept + { + const rp3d::Transform& CURRENT_TF = physicsObject.rp3dBody->getTransform(); + auto renderPos = CURRENT_TF.getPosition(); + auto renderRot = CURRENT_TF.getOrientation(); + + // Cache transforms + physicsObject.prevTransform = CURRENT_TF; + + // Sync with rigid bodies + if (rigidBodyComponent) + { + // Skip static bodies + if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) + return; + + // Check if transform should be interpolated + if (rigidBodyComponent->IsInterpolating()) + { + // Interpolate transforms between current and predicted next transform + + const rp3d::Transform PREV_TF = physicsObject.prevTransform; + const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); + + renderPos = INTERPOLATED_TF.getPosition(); + renderRot = INTERPOLATED_TF.getOrientation(); + } + + rigidBodyComponent->position = CURRENT_TF.getPosition(); + rigidBodyComponent->orientation = CURRENT_TF.getOrientation(); + } + + // Sync with colliders + if (colliderComponent) + { + colliderComponent->position = CURRENT_TF.getPosition(); + colliderComponent->orientation = CURRENT_TF.getOrientation(); + } + + // Set transform for rendering + if (transformComponent) + { + transformComponent->SetWorldPosition(renderPos); + transformComponent->SetWorldOrientation(renderRot); + } + } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h index 4254efc7..6059970d 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h @@ -55,7 +55,7 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] double GetFixedUpdateRate () const noexcept; [[nodiscard]] const SHPhysicsWorldState::WorldSettings& GetWorldSettings () const noexcept; [[nodiscard]] const std::vector& GetAllCollisionInfo () const noexcept; @@ -67,8 +67,8 @@ namespace SHADE /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetFixedDT (double fixedUpdateRate) noexcept; - void SetWorldSettings (const SHPhysicsWorldState::WorldSettings& settings) noexcept; + void SetFixedUpdateRate (double fixedUpdateRate) noexcept; + void SetWorldSettings (const SHPhysicsWorldState::WorldSettings& settings) noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -77,6 +77,8 @@ namespace SHADE void Init () override; void Exit () override; + void ForceUpdate (); + // Specific Handling for Collision Shapes as they are not under the Component System void AddCollisionShape (EntityID eid, int shapeIndex); @@ -121,14 +123,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ static void syncOnPlay(EntityID eid, SHPhysicsObject& physicsObject) noexcept; - - static void preUpdateSyncTransform - ( - SHPhysicsObject& physicsObject - , SHTransformComponent& transformComponent - , SHRigidBodyComponent* rigidBodyComponent - , SHColliderComponent* colliderComponent - ) noexcept; }; class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine @@ -161,20 +155,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ void Execute(double dt) noexcept override; - - private: - /*-------------------------------------------------------------------------------*/ - /* Function Members */ - /*-------------------------------------------------------------------------------*/ - - static void postUpdateSyncTransforms - ( - SHPhysicsObject& physicsObject - , SHTransformComponent& transformComponent - , SHRigidBodyComponent* rigidBodyComponent - , SHColliderComponent* colliderComponent - , double interpolationFactor - ) noexcept; }; private: @@ -208,5 +188,24 @@ namespace SHADE SHEventHandle onPlay (SHEventPtr onPlayEvent); SHEventHandle onStop (SHEventPtr onStopEvent); + + + static void preUpdateSyncTransform + ( + SHPhysicsObject& physicsObject + , SHTransformComponent* transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + ) noexcept; + + static void postUpdateSyncTransforms + ( + SHPhysicsObject& physicsObject + , SHTransformComponent* transformComponent + , SHRigidBodyComponent* rigidBodyComponent + , SHColliderComponent* colliderComponent + , double interpolationFactor + ) noexcept; + }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp index 30d29167..b142d54c 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemInterface.cpp @@ -55,7 +55,7 @@ namespace SHADE auto phySystem = SHSystemManager::GetSystem(); if (phySystem) { - return phySystem->GetFixedDT(); + return phySystem->GetFixedUpdateRate(); } SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get fixed delta time. 0.0 returned instead."); diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index 059202e5..d2c23006 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -125,18 +125,18 @@ namespace SHADE SHLOGV_ERROR("Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!"); } - fixedTimeStep = 1.0 / physicsSystem->fixedDT; + const double FIXED_DT = physicsSystem->fixedDT; accumulatedTime += dt; int count = 0; - while (accumulatedTime > fixedTimeStep) + while (accumulatedTime > FIXED_DT) { if (scriptingSystem != nullptr) scriptingSystem->ExecuteFixedUpdates(); - physicsSystem->worldState.world->update(static_cast(fixedTimeStep)); + physicsSystem->worldState.world->update(static_cast(FIXED_DT)); - accumulatedTime -= fixedTimeStep; + accumulatedTime -= FIXED_DT; ++count; } @@ -165,17 +165,14 @@ namespace SHADE auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); - if (transformComponent) - { - postUpdateSyncTransforms - ( - physicsObject - , *transformComponent - , rigidBodyComponent - , colliderComponent - , physicsSystem->interpolationFactor - ); - } + postUpdateSyncTransforms + ( + physicsObject + , transformComponent + , rigidBodyComponent + , colliderComponent + , physicsSystem->interpolationFactor + ); } // Collision & Trigger messages @@ -203,7 +200,7 @@ namespace SHADE preUpdateSyncTransform ( physicsObject - , *transformComponent + , transformComponent , rigidBodyComponent , colliderComponent ); @@ -217,99 +214,4 @@ namespace SHADE if (colliderComponent) physicsObject.SyncColliders(*colliderComponent); } - - void SHPhysicsSystem::PhysicsPreUpdate::preUpdateSyncTransform - ( - SHPhysicsObject& physicsObject - , SHTransformComponent& transformComponent - , SHRigidBodyComponent* rigidBodyComponent - , SHColliderComponent* colliderComponent - ) noexcept - { - const SHVec3& WORLD_POS = transformComponent.GetWorldPosition(); - const SHQuaternion& WORLD_ROT = transformComponent.GetWorldOrientation(); - const SHVec3& WORLD_SCL = transformComponent.GetWorldScale(); - - const rp3d::Transform RP3D_TRANSFORM { WORLD_POS, WORLD_ROT }; - physicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); - - if (rigidBodyComponent) - { - rigidBodyComponent->position = WORLD_POS; - rigidBodyComponent->orientation = WORLD_ROT; - } - - if (colliderComponent) - { - colliderComponent->position = WORLD_POS; - colliderComponent->orientation = WORLD_ROT; - colliderComponent->scale = WORLD_SCL; - - colliderComponent->RecomputeCollisionShapes(); - } - } - - void SHPhysicsSystem::PhysicsPostUpdate::postUpdateSyncTransforms - ( - SHPhysicsObject& physicsObject - , SHTransformComponent& transformComponent - , SHRigidBodyComponent* rigidBodyComponent - , SHColliderComponent* colliderComponent - , double interpolationFactor - ) noexcept - { - rp3d::Vector3 rp3dPos; - rp3d::Quaternion rp3dRot; - - const rp3d::Transform CURRENT_TF = physicsObject.rp3dBody->getTransform(); - - // Check if transform should be interpolated - - if (rigidBodyComponent) - { - // Skip static bodies - if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) - return; - - if (rigidBodyComponent->IsInterpolating()) - { - // Interpolate transforms between current and predicted next transform - - const rp3d::Transform PREV_TF = physicsObject.prevTransform; - const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); - - rp3dPos = INTERPOLATED_TF.getPosition(); - rp3dRot = INTERPOLATED_TF.getOrientation(); - } - else - { - rp3dPos = CURRENT_TF.getPosition(); - rp3dRot = CURRENT_TF.getOrientation(); - } - - rigidBodyComponent->position = CURRENT_TF.getPosition(); - rigidBodyComponent->orientation = CURRENT_TF.getOrientation(); - - if (colliderComponent) - { - // Sync with colliders - - colliderComponent->position = CURRENT_TF.getPosition(); - colliderComponent->orientation = CURRENT_TF.getOrientation(); - } - } - else - { - rp3dPos = CURRENT_TF.getPosition(); - rp3dRot = CURRENT_TF.getOrientation(); - } - - // Convert RP3D Transform to SHADE - transformComponent.SetWorldPosition(rp3dPos); - transformComponent.SetWorldOrientation(rp3dRot); - - // Cache transforms - physicsObject.prevTransform = CURRENT_TF; - } - } // namespace SHADE \ No newline at end of file From fe1b9d14f58af8f565aa680998d245fff296cbe4 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 14 Nov 2022 00:25:24 +0800 Subject: [PATCH 781/793] Partial implementation of syncing SHADE and ReactPhysics active states --- Assets/Scenes/M2Scene.shade | 7 +- .../Physics/PhysicsObject/SHPhysicsObject.cpp | 9 +- .../Physics/PhysicsObject/SHPhysicsObject.h | 3 +- .../System/SHPhysicsDebugDrawSystem.cpp | 5 + .../src/Physics/System/SHPhysicsSystem.cpp | 17 +- .../src/Physics/System/SHPhysicsSystem.h | 4 +- .../System/SHPhysicsSystemRoutines.cpp | 163 +++++++++++------- 7 files changed, 129 insertions(+), 79 deletions(-) diff --git a/Assets/Scenes/M2Scene.shade b/Assets/Scenes/M2Scene.shade index 21050428..bf910737 100644 --- a/Assets/Scenes/M2Scene.shade +++ b/Assets/Scenes/M2Scene.shade @@ -223,9 +223,4 @@ Bounciness: 0 Density: 1 Position Offset: {x: 0, y: 0.5, z: 0} - Scripts: - - Type: Item - currCategory: 0 - - Type: PickAndThrow - throwForce: [100, 200, 100] - item: 51000 \ No newline at end of file + Scripts: ~ \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 4c920bbc..0b0dd7a7 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -26,10 +26,11 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ SHPhysicsObject::SHPhysicsObject(EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept - : entityID { eid } - , factory { physicsFactory } - , world { physicsWorld } - , rp3dBody { nullptr } + : entityID { eid } + , collidersActive { true } + , factory { physicsFactory } + , world { physicsWorld } + , rp3dBody { nullptr } { // Implicitly create a static body. diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h index f18a0738..fefc983f 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h @@ -84,12 +84,13 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ EntityID entityID; + bool collidersActive; // Only used to sync with SHADE components rp3d::PhysicsCommon* factory; rp3d::PhysicsWorld* world; rp3d::RigidBody* rp3dBody; - rp3d::Transform prevTransform; // Cached transform for interpolation + rp3d::Transform prevTransform; // Cached transform for interpolation /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp index ff441ac2..72bcd13f 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp @@ -16,6 +16,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" #include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" +#include "Scene/SHSceneManager.h" namespace SHADE { @@ -122,6 +123,10 @@ namespace SHADE const auto& COLLIDER_SET = SHComponentManager::GetDense(); for (const auto& COLLIDER : COLLIDER_SET) { + // Skip inactive colliders + //if (!SHSceneManager::CheckNodeAndComponentsActive(COLLIDER.GetEID())) + // continue; + for (auto& collisionShape : COLLIDER.GetCollisionShapes()) { switch (collisionShape.GetType()) diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index d94cfb58..0a7555b1 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -387,7 +387,7 @@ namespace SHADE , SHColliderComponent* colliderComponent ) noexcept { - if (!transformComponent) + if (!transformComponent || !SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) return; const SHVec3& WORLD_POS = transformComponent->GetWorldPosition(); @@ -397,13 +397,13 @@ namespace SHADE const rp3d::Transform RP3D_TRANSFORM { WORLD_POS, WORLD_ROT }; physicsObject.GetRigidBody()->setTransform(RP3D_TRANSFORM); - if (rigidBodyComponent) + if (rigidBodyComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { rigidBodyComponent->position = WORLD_POS; rigidBodyComponent->orientation = WORLD_ROT; } - if (colliderComponent) + if (colliderComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { colliderComponent->position = WORLD_POS; colliderComponent->orientation = WORLD_ROT; @@ -422,15 +422,16 @@ namespace SHADE , double interpolationFactor ) noexcept { - const rp3d::Transform& CURRENT_TF = physicsObject.rp3dBody->getTransform(); + const rp3d::Transform& CURRENT_TF = physicsObject.GetRigidBody()->getTransform(); auto renderPos = CURRENT_TF.getPosition(); auto renderRot = CURRENT_TF.getOrientation(); // Cache transforms - physicsObject.prevTransform = CURRENT_TF; + if (physicsObject.GetRigidBody()->isActive()) + physicsObject.prevTransform = CURRENT_TF; // Sync with rigid bodies - if (rigidBodyComponent) + if (rigidBodyComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { // Skip static bodies if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) @@ -453,14 +454,14 @@ namespace SHADE } // Sync with colliders - if (colliderComponent) + if (colliderComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { colliderComponent->position = CURRENT_TF.getPosition(); colliderComponent->orientation = CURRENT_TF.getOrientation(); } // Set transform for rendering - if (transformComponent) + if (transformComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { transformComponent->SetWorldPosition(renderPos); transformComponent->SetWorldOrientation(renderRot); diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h index 6059970d..3891ff48 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h @@ -122,7 +122,9 @@ namespace SHADE /* Function Members */ /*-------------------------------------------------------------------------------*/ - static void syncOnPlay(EntityID eid, SHPhysicsObject& physicsObject) noexcept; + void syncRigidBodyActive (EntityID eid, SHPhysicsObject& physicsObject) const noexcept; + void syncColliderActive (EntityID eid, SHPhysicsObject& physicsObject) const noexcept; + static void syncOnPlay (EntityID eid, SHPhysicsObject& physicsObject) noexcept; }; class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index d2c23006..3376159b 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -15,6 +15,7 @@ // Project Headers #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" +#include "Scene/SHSceneManager.h" #include "Scripting/SHScriptEngine.h" namespace SHADE @@ -43,65 +44,13 @@ namespace SHADE { auto* physicsSystem = reinterpret_cast(GetSystem()); - #ifdef SHEDITOR - - auto* editor = SHSystemManager::GetSystem(); - - // Only Sync on Play. - // Otherwise, Components are only holding data until the world is built on play. - - if (editor) - { - if (editor->editorState != SHEditor::State::STOP) - { - physicsSystem->objectManager.UpdateCommands(); - - for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) - { - // Ensure a valid physics Object - if (physicsObject.rp3dBody == nullptr) - continue; - - syncOnPlay(entityID, physicsObject); - } - } - else - { - auto& rigidBodyDense = SHComponentManager::GetDense(); - auto& colliderDense = SHComponentManager::GetDense(); - - for (auto& rigidBodyComponent : rigidBodyDense) - { - const auto* TRANSFORM = SHComponentManager::GetComponent_s(rigidBodyComponent.GetEID()); - - if (TRANSFORM && TRANSFORM->HasChanged()) - { - rigidBodyComponent.position = TRANSFORM->GetWorldPosition(); - rigidBodyComponent.orientation = TRANSFORM->GetWorldOrientation(); - } - } - - for (auto& colliderComponent : colliderDense) - { - const auto* TRANSFORM = SHComponentManager::GetComponent_s(colliderComponent.GetEID()); - - if (TRANSFORM && TRANSFORM->HasChanged()) - { - colliderComponent.position = TRANSFORM->GetWorldPosition(); - colliderComponent.orientation = TRANSFORM->GetWorldOrientation(); - colliderComponent.scale = TRANSFORM->GetWorldScale(); - - colliderComponent.RecomputeCollisionShapes(); - } - } - } - } - - #else - - // Always sync Rigid Body & Collider Components with Physics Objects - // Do not check for an editor here + #ifdef SHEDITOR + // Only Sync on Play. + // Otherwise, Components are only holding data until the world is built on play. + const auto* EDITOR = SHSystemManager::GetSystem(); + if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) + { physicsSystem->objectManager.UpdateCommands(); for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) @@ -110,10 +59,64 @@ namespace SHADE if (physicsObject.rp3dBody == nullptr) continue; + // Sync active states between SHADE & RP3D + syncRigidBodyActive(entityID, physicsObject); + syncColliderActive(entityID, physicsObject); + syncOnPlay(entityID, physicsObject); } + } + else + { + auto& rigidBodyDense = SHComponentManager::GetDense(); + auto& colliderDense = SHComponentManager::GetDense(); - #endif + for (auto& rigidBodyComponent : rigidBodyDense) + { + const auto* TRANSFORM = SHComponentManager::GetComponent_s(rigidBodyComponent.GetEID()); + + if (TRANSFORM && TRANSFORM->HasChanged()) + { + rigidBodyComponent.position = TRANSFORM->GetWorldPosition(); + rigidBodyComponent.orientation = TRANSFORM->GetWorldOrientation(); + } + } + + for (auto& colliderComponent : colliderDense) + { + const auto* TRANSFORM = SHComponentManager::GetComponent_s(colliderComponent.GetEID()); + + if (TRANSFORM && TRANSFORM->HasChanged()) + { + colliderComponent.position = TRANSFORM->GetWorldPosition(); + colliderComponent.orientation = TRANSFORM->GetWorldOrientation(); + colliderComponent.scale = TRANSFORM->GetWorldScale(); + + colliderComponent.RecomputeCollisionShapes(); + } + } + } + + #else + + // Always sync Rigid Body & Collider Components with Physics Objects + // Do not check for an editor here + + physicsSystem->objectManager.UpdateCommands(); + + for (auto& [entityID, physicsObject] : physicsSystem->objectManager.physicsObjects) + { + // Ensure a valid physics Object + if (physicsObject.rp3dBody == nullptr) + continue; + + syncRigidBodyActive(entityID, physicsObject); + syncColliderActive(entityID, physicsObject); + + syncOnPlay(entityID, physicsObject); + } + + #endif } void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept @@ -188,6 +191,48 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHPhysicsSystem::PhysicsPreUpdate::syncRigidBodyActive(EntityID eid, SHPhysicsObject& physicsObject) const noexcept + { + if (!SHComponentManager::HasComponent(eid)) + return; + + const bool IS_ACTIVE_IN_SCENE = SHSceneManager::CheckNodeAndComponentsActive(eid); + const bool IS_RP3D_BODY_ACTIVE = physicsObject.GetRigidBody()->isActive(); + + if (IS_ACTIVE_IN_SCENE != IS_RP3D_BODY_ACTIVE) + physicsObject.GetRigidBody()->setIsActive(IS_ACTIVE_IN_SCENE); + } + + void SHPhysicsSystem::PhysicsPreUpdate::syncColliderActive(EntityID eid, SHPhysicsObject& physicsObject) const noexcept + { + const auto* COLLIDER = SHComponentManager::GetComponent_s(eid); + if (!COLLIDER) + return; + + const bool IS_ACTIVE_IN_SCENE = SHSceneManager::CheckNodeAndComponentsActive(eid); + const bool IS_RP3D_COLLIDER_ACTIVE = physicsObject.collidersActive; + + if (IS_ACTIVE_IN_SCENE != IS_RP3D_COLLIDER_ACTIVE) + { + // HACK: If active state turned off, remove all collision shapes. If turned on, add them back. + auto* physicsSystem = reinterpret_cast(GetSystem()); + + const int NUM_SHAPES = static_cast(COLLIDER->GetCollisionShapes().size()); + if (IS_ACTIVE_IN_SCENE) + { + for (int i = 0; i < NUM_SHAPES; ++i) + physicsSystem->objectManager.AddCollisionShape(eid, i); + } + else + { + for (int i = NUM_SHAPES - 1; i >= 0; --i) + physicsSystem->objectManager.RemoveCollisionShape(eid, i); + } + + physicsObject.collidersActive = IS_ACTIVE_IN_SCENE; + } + } + void SHPhysicsSystem::PhysicsPreUpdate::syncOnPlay(EntityID eid, SHPhysicsObject& physicsObject) noexcept { auto* transformComponent = SHComponentManager::GetComponent_s(eid); From 9e0bc0bbc94651c040250559a99f210c36c8694a Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 14 Nov 2022 02:52:13 +0800 Subject: [PATCH 782/793] Added checks for path exist and bin and obj folders when building directory for asset browser --- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 1062540b..fa5f718e 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -130,6 +130,14 @@ namespace SHADE } // If item is folder + if (path.stem().string() == "bin" + || path.stem().string() == "obj" + || !std::filesystem::exists(path)) + { + SHLOG_INFO("[FileSystem] Skipped paths in directory building: {}", path.string()); + continue; + } + auto newFolder{ folder->CreateSubFolderHere(path.stem().string()) }; folderStack.push(newFolder); } From 9515fcca4f746ec4eac2a56eb8ed0834a90e164c Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 14 Nov 2022 15:35:02 +0800 Subject: [PATCH 783/793] Renames & Bugfixes Renamed BoundingBox & BoundingSphere to Box & Sphere Forces are forcefully cleared --- .../Inspector/SHEditorComponentView.hpp | 7 ++- .../Geometry/{SHBoundingBox.cpp => SHBox.cpp} | 62 +++++++++---------- .../Geometry/{SHBoundingBox.h => SHBox.h} | 28 ++++----- .../{SHBoundingSphere.cpp => SHSphere.cpp} | 50 +++++++-------- .../{SHBoundingSphere.h => SHSphere.h} | 28 ++++----- .../Physics/Interface/SHColliderComponent.cpp | 4 +- .../Physics/Interface/SHColliderComponent.h | 4 +- .../Physics/Interface/SHCollisionShape.cpp | 28 ++++----- .../Physics/PhysicsObject/SHPhysicsObject.cpp | 8 +-- .../System/SHPhysicsDebugDrawSystem.cpp | 8 +-- .../src/Physics/System/SHPhysicsSystem.cpp | 29 +++++---- .../System/SHPhysicsSystemRoutines.cpp | 8 +++ .../src/Serialization/SHYAMLConverters.h | 8 +-- SHADE_Managed/src/Components/Collider.cxx | 32 +++++----- SHADE_Managed/src/Components/RigidBody.cxx | 12 +++- SHADE_Managed/src/Components/RigidBody.hxx | 4 ++ 16 files changed, 175 insertions(+), 145 deletions(-) rename SHADE_Engine/src/Math/Geometry/{SHBoundingBox.cpp => SHBox.cpp} (71%) rename SHADE_Engine/src/Math/Geometry/{SHBoundingBox.h => SHBox.h} (80%) rename SHADE_Engine/src/Math/Geometry/{SHBoundingSphere.cpp => SHSphere.cpp} (70%) rename SHADE_Engine/src/Math/Geometry/{SHBoundingSphere.h => SHSphere.h} (76%) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 2e55ea7a..6091556e 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -223,7 +223,7 @@ namespace SHADE { if (!component) return; - + ImGui::PushID(component); const auto componentType = rttr::type::get(*component); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); @@ -246,7 +246,7 @@ namespace SHADE if (collider->GetType() == SHCollisionShape::Type::BOX) { SHEditorWidgets::BeginPanel(std::format("{} Box #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - const auto* BOX = reinterpret_cast(collider->GetShape()); + const auto* BOX = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( "Half Extents", { "X", "Y", "Z" }, @@ -256,7 +256,7 @@ namespace SHADE else if (collider->GetType() == SHCollisionShape::Type::SPHERE) { SHEditorWidgets::BeginPanel(std::format("{} Sphere #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - const auto* SPHERE = reinterpret_cast(collider->GetShape()); + const auto* SPHERE = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( "Radius", @@ -322,6 +322,7 @@ namespace SHADE } } else DrawContextMenu(component); + ImGui::PopID(); } template<> diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp b/SHADE_Engine/src/Math/Geometry/SHBox.cpp similarity index 71% rename from SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp rename to SHADE_Engine/src/Math/Geometry/SHBox.cpp index 5bbf5e15..cf094a9d 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHBox.cpp @@ -11,7 +11,7 @@ #include // Primary Header -#include "SHBoundingBox.h" +#include "SHBox.h" // Project Headers #include "Math/SHMathHelpers.h" #include "Math/SHRay.h" @@ -24,13 +24,13 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingBox::SHBoundingBox() noexcept + SHBox::SHBox() noexcept : RelativeExtents { SHVec3::One } { type = Type::BOX; } - SHBoundingBox::SHBoundingBox(const SHVec3& c, const SHVec3& hE) noexcept + SHBox::SHBox(const SHVec3& c, const SHVec3& hE) noexcept : RelativeExtents { SHVec3::One } { type = Type::BOX; @@ -40,7 +40,7 @@ namespace SHADE } - SHBoundingBox::SHBoundingBox(const SHBoundingBox& rhs) noexcept + SHBox::SHBox(const SHBox& rhs) noexcept { if (this == &rhs) return; @@ -52,7 +52,7 @@ namespace SHADE RelativeExtents = rhs.RelativeExtents; } - SHBoundingBox::SHBoundingBox(SHBoundingBox&& rhs) noexcept + SHBox::SHBox(SHBox&& rhs) noexcept { type = Type::BOX; @@ -65,7 +65,7 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingBox& SHBoundingBox::operator=(const SHBoundingBox& rhs) noexcept + SHBox& SHBox::operator=(const SHBox& rhs) noexcept { if (rhs.type != Type::BOX) { @@ -81,7 +81,7 @@ namespace SHADE return *this; } - SHBoundingBox& SHBoundingBox::operator=(SHBoundingBox&& rhs) noexcept + SHBox& SHBox::operator=(SHBox&& rhs) noexcept { if (rhs.type != Type::BOX) { @@ -101,27 +101,27 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - SHVec3 SHBoundingBox::GetCenter() const noexcept + SHVec3 SHBox::GetCenter() const noexcept { return Center; } - SHVec3 SHBoundingBox::GetWorldExtents() const noexcept + SHVec3 SHBox::GetWorldExtents() const noexcept { return Extents; } - const SHVec3& SHBoundingBox::GetRelativeExtents() const noexcept + const SHVec3& SHBox::GetRelativeExtents() const noexcept { return RelativeExtents; } - SHVec3 SHBoundingBox::GetMin() const noexcept + SHVec3 SHBox::GetMin() const noexcept { return SHVec3{ Center.x - Extents.x, Center.y - Extents.y, Center.z - Extents.z }; } - SHVec3 SHBoundingBox::GetMax() const noexcept + SHVec3 SHBox::GetMax() const noexcept { return SHVec3{ Center.x + Extents.x, Center.y + Extents.y, Center.z + Extents.z }; } @@ -130,22 +130,22 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHBoundingBox::SetCenter(const SHVec3& newCenter) noexcept + void SHBox::SetCenter(const SHVec3& newCenter) noexcept { Center = newCenter; } - void SHBoundingBox::SetWorldExtents(const SHVec3& newWorldExtents) noexcept + void SHBox::SetWorldExtents(const SHVec3& newWorldExtents) noexcept { Extents = newWorldExtents; } - void SHBoundingBox::SetRelativeExtents(const SHVec3& newRelativeExtents) noexcept + void SHBox::SetRelativeExtents(const SHVec3& newRelativeExtents) noexcept { RelativeExtents = newRelativeExtents; } - void SHBoundingBox::SetMin(const SHVec3& min) noexcept + void SHBox::SetMin(const SHVec3& min) noexcept { const SHVec3 MAX = GetMax(); @@ -153,7 +153,7 @@ namespace SHADE Extents = SHVec3::Abs((MAX - min) * 0.5f); } - void SHBoundingBox::SetMax(const SHVec3& max) noexcept + void SHBox::SetMax(const SHVec3& max) noexcept { const SHVec3 MIN = GetMin(); @@ -161,13 +161,13 @@ namespace SHADE Extents = SHVec3::Abs((max - MIN) * 0.5f); } - void SHBoundingBox::SetMinMax(const SHVec3& min, const SHVec3& max) noexcept + void SHBox::SetMinMax(const SHVec3& min, const SHVec3& max) noexcept { Center = SHVec3::Lerp(min, max, 0.5f); Extents = SHVec3::Abs((max - min) * 0.5f); } - std::vector SHBoundingBox::GetVertices() const noexcept + std::vector SHBox::GetVertices() const noexcept { std::vector vertices{ 8 }; GetCorners(vertices.data()); @@ -178,27 +178,27 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - bool SHBoundingBox::TestPoint(const SHVec3& point) noexcept + bool SHBox::TestPoint(const SHVec3& point) noexcept { return BoundingBox::Contains(point); } - bool SHBoundingBox::Raycast(const SHRay& ray, float& distance) noexcept + bool SHBox::Raycast(const SHRay& ray, float& distance) noexcept { return BoundingBox::Intersects(ray.position, ray.direction, distance); } - bool SHBoundingBox::Contains(const SHBoundingBox& rhs) const noexcept + bool SHBox::Contains(const SHBox& rhs) const noexcept { return BoundingBox::Contains(rhs); } - float SHBoundingBox::Volume() const noexcept + float SHBox::Volume() const noexcept { return 8.0f * (Extents.x * Extents.y * Extents.z); } - float SHBoundingBox::SurfaceArea() const noexcept + float SHBox::SurfaceArea() const noexcept { return 8.0f * ((Extents.x * Extents.y) + (Extents.x * Extents.z) @@ -209,21 +209,21 @@ namespace SHADE /* Static Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingBox SHBoundingBox::Combine(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept + SHBox SHBox::Combine(const SHBox& lhs, const SHBox& rhs) noexcept { - SHBoundingBox result; + SHBox result; CreateMerged(result, lhs, rhs); return result; } - bool SHBoundingBox::Intersect(const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept + bool SHBox::Intersect(const SHBox& lhs, const SHBox& rhs) noexcept { return lhs.Intersects(rhs); } - SHBoundingBox SHBoundingBox::BuildFromBoxes(const SHBoundingBox* boxes, size_t numBoxes) noexcept + SHBox SHBox::BuildFromBoxes(const SHBox* boxes, size_t numBoxes) noexcept { - SHBoundingBox result; + SHBox result; for (size_t i = 1; i < numBoxes; ++i) CreateMerged(result, boxes[i - 1], boxes[i]); @@ -231,9 +231,9 @@ namespace SHADE return result; } - SHBoundingBox SHBoundingBox::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept + SHBox SHBox::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept { - SHBoundingBox result; + SHBox result; CreateFromPoints(result, numVertices, vertices, stride); return result; } diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h b/SHADE_Engine/src/Math/Geometry/SHBox.h similarity index 80% rename from SHADE_Engine/src/Math/Geometry/SHBoundingBox.h rename to SHADE_Engine/src/Math/Geometry/SHBox.h index e2757c17..0ea950ab 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingBox.h +++ b/SHADE_Engine/src/Math/Geometry/SHBox.h @@ -22,8 +22,8 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHBoundingBox : public SHShape, - private DirectX::BoundingBox + class SH_API SHBox : public SHShape, + private DirectX::BoundingBox { public: /*---------------------------------------------------------------------------------*/ @@ -36,19 +36,19 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - ~SHBoundingBox () override = default; + ~SHBox () override = default; - SHBoundingBox () noexcept; - SHBoundingBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; - SHBoundingBox (const SHBoundingBox& rhs) noexcept; - SHBoundingBox (SHBoundingBox&& rhs) noexcept; + SHBox () noexcept; + SHBox (const SHVec3& center, const SHVec3& halfExtents) noexcept; + SHBox (const SHBox& rhs) noexcept; + SHBox (SHBox&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHBoundingBox& operator= (const SHBoundingBox& rhs) noexcept; - SHBoundingBox& operator= (SHBoundingBox&& rhs) noexcept; + SHBox& operator= (const SHBox& rhs) noexcept; + SHBox& operator= (SHBox&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -79,7 +79,7 @@ namespace SHADE [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; [[nodiscard]] bool Raycast (const SHRay& ray, float& distance) noexcept override; - [[nodiscard]] bool Contains (const SHBoundingBox& rhs) const noexcept; + [[nodiscard]] bool Contains (const SHBox& rhs) const noexcept; [[nodiscard]] float Volume () const noexcept; [[nodiscard]] float SurfaceArea () const noexcept; @@ -87,10 +87,10 @@ namespace SHADE /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHBoundingBox Combine (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; - [[nodiscard]] static bool Intersect (const SHBoundingBox& lhs, const SHBoundingBox& rhs) noexcept; - [[nodiscard]] static SHBoundingBox BuildFromBoxes (const SHBoundingBox* boxes, size_t numBoxes) noexcept; - [[nodiscard]] static SHBoundingBox BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; + [[nodiscard]] static SHBox Combine (const SHBox& lhs, const SHBox& rhs) noexcept; + [[nodiscard]] static bool Intersect (const SHBox& lhs, const SHBox& rhs) noexcept; + [[nodiscard]] static SHBox BuildFromBoxes (const SHBox* boxes, size_t numBoxes) noexcept; + [[nodiscard]] static SHBox BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; private: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp b/SHADE_Engine/src/Math/Geometry/SHSphere.cpp similarity index 70% rename from SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp rename to SHADE_Engine/src/Math/Geometry/SHSphere.cpp index f843a6bb..d310e30e 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHSphere.cpp @@ -11,7 +11,7 @@ #include // Primary Header -#include "SHBoundingSphere.h" +#include "SHSphere.h" // Project Headers #include "Math/SHMathHelpers.h" #include "Math/SHRay.h" @@ -24,13 +24,13 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingSphere::SHBoundingSphere() noexcept + SHSphere::SHSphere() noexcept : RelativeRadius { 1.0f } { type = Type::SPHERE; } - SHBoundingSphere::SHBoundingSphere(const SHVec3& center, float radius) noexcept + SHSphere::SHSphere(const SHVec3& center, float radius) noexcept : RelativeRadius { 1.0f } { type = Type::SPHERE; @@ -39,7 +39,7 @@ namespace SHADE Radius = radius; } - SHBoundingSphere::SHBoundingSphere(const SHBoundingSphere& rhs) noexcept + SHSphere::SHSphere(const SHSphere& rhs) noexcept { if (this == &rhs) return; @@ -51,7 +51,7 @@ namespace SHADE RelativeRadius = rhs.RelativeRadius; } - SHBoundingSphere::SHBoundingSphere(SHBoundingSphere&& rhs) noexcept + SHSphere::SHSphere(SHSphere&& rhs) noexcept { type = Type::SPHERE; @@ -64,7 +64,7 @@ namespace SHADE /* Operator Overload Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingSphere& SHBoundingSphere::operator=(const SHBoundingSphere& rhs) noexcept + SHSphere& SHSphere::operator=(const SHSphere& rhs) noexcept { if (rhs.type != Type::SPHERE) { @@ -80,7 +80,7 @@ namespace SHADE return *this; } - SHBoundingSphere& SHBoundingSphere::operator=(SHBoundingSphere&& rhs) noexcept + SHSphere& SHSphere::operator=(SHSphere&& rhs) noexcept { if (rhs.type != Type::SPHERE) { @@ -100,17 +100,17 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - SHVec3 SHBoundingSphere::GetCenter() const noexcept + SHVec3 SHSphere::GetCenter() const noexcept { return Center; } - float SHBoundingSphere::GetWorldRadius() const noexcept + float SHSphere::GetWorldRadius() const noexcept { return Radius; } - float SHBoundingSphere::GetRelativeRadius() const noexcept + float SHSphere::GetRelativeRadius() const noexcept { return RelativeRadius; } @@ -119,17 +119,17 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHBoundingSphere::SetCenter(const SHVec3& center) noexcept + void SHSphere::SetCenter(const SHVec3& center) noexcept { Center = center; } - void SHBoundingSphere::SetWorldRadius(float newWorldRadius) noexcept + void SHSphere::SetWorldRadius(float newWorldRadius) noexcept { Radius = newWorldRadius; } - void SHBoundingSphere::SetRelativeRadius(float newRelativeRadius) noexcept + void SHSphere::SetRelativeRadius(float newRelativeRadius) noexcept { RelativeRadius = newRelativeRadius; } @@ -138,27 +138,27 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - bool SHBoundingSphere::TestPoint(const SHVec3& point) noexcept + bool SHSphere::TestPoint(const SHVec3& point) noexcept { return BoundingSphere::Contains(point); } - bool SHBoundingSphere::Raycast(const SHRay& ray, float& distance) noexcept + bool SHSphere::Raycast(const SHRay& ray, float& distance) noexcept { return Intersects(ray.position, ray.direction, distance); } - bool SHBoundingSphere::Contains(const SHBoundingSphere& rhs) const noexcept + bool SHSphere::Contains(const SHSphere& rhs) const noexcept { return BoundingSphere::Contains(rhs); } - float SHBoundingSphere::Volume() const noexcept + float SHSphere::Volume() const noexcept { return (4.0f / 3.0f) * SHMath::PI * (Radius * Radius * Radius); } - float SHBoundingSphere::SurfaceArea() const noexcept + float SHSphere::SurfaceArea() const noexcept { return 4.0f * SHMath::PI * (Radius * Radius); } @@ -167,21 +167,21 @@ namespace SHADE /* Static Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHBoundingSphere SHBoundingSphere::Combine(const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept + SHSphere SHSphere::Combine(const SHSphere& lhs, const SHSphere& rhs) noexcept { - SHBoundingSphere result; + SHSphere result; CreateMerged(result, lhs, rhs); return result; } - bool SHBoundingSphere::Intersect(const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept + bool SHSphere::Intersect(const SHSphere& lhs, const SHSphere& rhs) noexcept { return lhs.Intersects(rhs); } - SHBoundingSphere SHBoundingSphere::BuildFromSpheres(const SHBoundingSphere* spheres, size_t numSpheres) noexcept + SHSphere SHSphere::BuildFromSpheres(const SHSphere* spheres, size_t numSpheres) noexcept { - SHBoundingSphere result; + SHSphere result; for (size_t i = 1; i < numSpheres; ++i) CreateMerged(result, spheres[i - 1], spheres[i]); @@ -189,9 +189,9 @@ namespace SHADE return result; } - SHBoundingSphere SHBoundingSphere::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept + SHSphere SHSphere::BuildFromVertices(const SHVec3* vertices, size_t numVertices, size_t stride) noexcept { - SHBoundingSphere result; + SHSphere result; CreateFromPoints(result, numVertices, vertices, stride); return result; } diff --git a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h b/SHADE_Engine/src/Math/Geometry/SHSphere.h similarity index 76% rename from SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h rename to SHADE_Engine/src/Math/Geometry/SHSphere.h index d94722d6..c13076aa 100644 --- a/SHADE_Engine/src/Math/Geometry/SHBoundingSphere.h +++ b/SHADE_Engine/src/Math/Geometry/SHSphere.h @@ -22,27 +22,27 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHBoundingSphere : public SHShape, - private DirectX::BoundingSphere + class SH_API SHSphere : public SHShape, + private DirectX::BoundingSphere { public: /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHBoundingSphere () noexcept; - SHBoundingSphere (const SHVec3& center, float radius) noexcept; - SHBoundingSphere (const SHBoundingSphere& rhs) noexcept; - SHBoundingSphere (SHBoundingSphere&& rhs) noexcept; + SHSphere () noexcept; + SHSphere (const SHVec3& center, float radius) noexcept; + SHSphere (const SHSphere& rhs) noexcept; + SHSphere (SHSphere&& rhs) noexcept; - ~SHBoundingSphere () override = default; + ~SHSphere () override = default; /*---------------------------------------------------------------------------------*/ /* Operator Overloads */ /*---------------------------------------------------------------------------------*/ - SHBoundingSphere& operator= (const SHBoundingSphere& rhs) noexcept; - SHBoundingSphere& operator= (SHBoundingSphere&& rhs) noexcept; + SHSphere& operator= (const SHSphere& rhs) noexcept; + SHSphere& operator= (SHSphere&& rhs) noexcept; /*---------------------------------------------------------------------------------*/ /* Getter Functions */ @@ -67,7 +67,7 @@ namespace SHADE [[nodiscard]] bool TestPoint (const SHVec3& point) noexcept override; [[nodiscard]] bool Raycast (const SHRay& ray, float& distance) noexcept override; - [[nodiscard]] bool Contains (const SHBoundingSphere& rhs) const noexcept; + [[nodiscard]] bool Contains (const SHSphere& rhs) const noexcept; [[nodiscard]] float Volume () const noexcept; [[nodiscard]] float SurfaceArea () const noexcept; @@ -76,10 +76,10 @@ namespace SHADE /* Static Function Members */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHBoundingSphere Combine (const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept; - [[nodiscard]] static bool Intersect (const SHBoundingSphere& lhs, const SHBoundingSphere& rhs) noexcept; - [[nodiscard]] static SHBoundingSphere BuildFromSpheres (const SHBoundingSphere* spheres, size_t numSpheres) noexcept; - [[nodiscard]] static SHBoundingSphere BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; + [[nodiscard]] static SHSphere Combine (const SHSphere& lhs, const SHSphere& rhs) noexcept; + [[nodiscard]] static bool Intersect (const SHSphere& lhs, const SHSphere& rhs) noexcept; + [[nodiscard]] static SHSphere BuildFromSpheres (const SHSphere* spheres, size_t numSpheres) noexcept; + [[nodiscard]] static SHSphere BuildFromVertices (const SHVec3* vertices, size_t numVertices, size_t stride = 0) noexcept; private: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp index 1c8149ad..877d238f 100644 --- a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.cpp @@ -95,7 +95,7 @@ namespace SHADE { case SHCollisionShape::Type::BOX: { - auto* box = reinterpret_cast(collisionShape.shape); + auto* box = reinterpret_cast(collisionShape.shape); const SHVec3& RELATIVE_EXTENTS = box->GetRelativeExtents(); // Recompute world extents based on new scale and fixed relative extents @@ -106,7 +106,7 @@ namespace SHADE } case SHCollisionShape::Type::SPHERE: { - auto* sphere = reinterpret_cast(collisionShape.shape); + auto* sphere = reinterpret_cast(collisionShape.shape); const float RELATIVE_RADIUS = sphere->GetRelativeRadius(); // Recompute world radius based on new scale and fixed radius diff --git a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h index 88dc306f..0781f3cf 100644 --- a/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Interface/SHColliderComponent.h @@ -14,8 +14,8 @@ // Project Headers #include "ECS_Base/Components/SHComponent.h" -#include "Math/Geometry/SHBoundingBox.h" -#include "Math/Geometry/SHBoundingSphere.h" +#include "Math/Geometry/SHBox.h" +#include "Math/Geometry/SHSphere.h" #include "SHCollisionShape.h" //namespace SHADE diff --git a/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp index 1ea2a7d3..2edca110 100644 --- a/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp @@ -13,8 +13,8 @@ // Primary Header #include "SHCollisionShape.h" // Project Headers -#include "Math/Geometry/SHBoundingBox.h" -#include "Math/Geometry/SHBoundingSphere.h" +#include "Math/Geometry/SHBox.h" +#include "Math/Geometry/SHSphere.h" #include "Math/SHMathHelpers.h" #include "Reflection/SHReflectionMetadata.h" #include "SHColliderComponent.h" @@ -37,12 +37,12 @@ namespace SHADE { case Type::BOX: { - shape = new SHBoundingBox{ SHVec3::Zero, SHVec3::One }; + shape = new SHBox{ SHVec3::Zero, SHVec3::One }; break; } case Type::SPHERE: { - shape = new SHBoundingSphere{ SHVec3::Zero, 0.5f }; + shape = new SHSphere{ SHVec3::Zero, 0.5f }; break; } default: break; @@ -186,10 +186,10 @@ namespace SHADE type = Type::BOX; delete shape; - shape = new SHBoundingBox{ positionOffset, WORLD_EXTENTS }; + shape = new SHBox{ positionOffset, WORLD_EXTENTS }; } - auto* box = reinterpret_cast(shape); + auto* box = reinterpret_cast(shape); box->SetWorldExtents(WORLD_EXTENTS); box->SetRelativeExtents(halfExtents); } @@ -209,10 +209,10 @@ namespace SHADE type = Type::SPHERE; delete shape; - shape = new SHBoundingSphere{ positionOffset, WORLD_RADIUS }; + shape = new SHSphere{ positionOffset, WORLD_RADIUS }; } - auto* sphere = reinterpret_cast(shape); + auto* sphere = reinterpret_cast(shape); sphere->SetWorldRadius(WORLD_RADIUS); } @@ -255,12 +255,12 @@ namespace SHADE { case Type::BOX: { - reinterpret_cast(shape)->SetCenter(positionOffset); + reinterpret_cast(shape)->SetCenter(positionOffset); break; } case Type::SPHERE: { - reinterpret_cast(shape)->SetCenter(positionOffset); + reinterpret_cast(shape)->SetCenter(positionOffset); break; } default: break; @@ -283,16 +283,16 @@ namespace SHADE { case Type::BOX: { - const auto* RHS_BOX = reinterpret_cast(rhs); + const auto* RHS_BOX = reinterpret_cast(rhs); - shape = new SHBoundingBox{ positionOffset, RHS_BOX->GetWorldExtents() }; + shape = new SHBox{ positionOffset, RHS_BOX->GetWorldExtents() }; break; } case Type::SPHERE: { - const auto* RHS_SPHERE = reinterpret_cast(rhs); + const auto* RHS_SPHERE = reinterpret_cast(rhs); - shape = new SHBoundingSphere{ positionOffset, RHS_SPHERE->GetWorldRadius() }; + shape = new SHSphere{ positionOffset, RHS_SPHERE->GetWorldRadius() }; break; } default: break; diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 0b0dd7a7..346ab4cb 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -309,7 +309,7 @@ namespace SHADE , boxShape.GetRotationOffset() }; - const auto* BOX = reinterpret_cast(boxShape.GetShape()); + const auto* BOX = reinterpret_cast(boxShape.GetShape()); rp3d::BoxShape* newBox = factory->createBoxShape(BOX->GetWorldExtents()); rp3dBody->addCollider(newBox, OFFSETS); @@ -317,7 +317,7 @@ namespace SHADE void SHPhysicsObject::syncBoxShape(int index, SHCollisionShape& boxShape) const noexcept { - const auto* BOX = reinterpret_cast(boxShape.GetShape()); + const auto* BOX = reinterpret_cast(boxShape.GetShape()); auto* rp3dCollider = rp3dBody->getCollider(index); auto* rp3dBox = reinterpret_cast(rp3dCollider->getCollisionShape()); @@ -342,7 +342,7 @@ namespace SHADE , sphereShape.GetRotationOffset() }; - const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); + const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); rp3d::SphereShape* newSphere = factory->createSphereShape(SPHERE->GetWorldRadius()); rp3dBody->addCollider(newSphere, OFFSETS); @@ -350,7 +350,7 @@ namespace SHADE void SHPhysicsObject::syncSphereShape(int index, SHCollisionShape& sphereShape) const noexcept { - const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); + const auto* SPHERE = reinterpret_cast(sphereShape.GetShape()); auto* rp3dCollider = rp3dBody->getCollider(index); auto* rp3dSphere = reinterpret_cast(rp3dCollider->getCollisionShape()); diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp index 72bcd13f..44875289 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp @@ -124,8 +124,8 @@ namespace SHADE for (const auto& COLLIDER : COLLIDER_SET) { // Skip inactive colliders - //if (!SHSceneManager::CheckNodeAndComponentsActive(COLLIDER.GetEID())) - // continue; + if (!SHSceneManager::CheckNodeAndComponentsActive(COLLIDER.GetEID())) + continue; for (auto& collisionShape : COLLIDER.GetCollisionShapes()) { @@ -181,7 +181,7 @@ namespace SHADE return; } - auto* BOX = reinterpret_cast(collisionShape.GetShape()); + auto* BOX = reinterpret_cast(collisionShape.GetShape()); // Calculate final position & orientation const SHVec3 FINAL_POS = colliderComponent.GetPosition() + collisionShape.GetPositionOffset(); @@ -221,7 +221,7 @@ namespace SHADE return; } - auto* SPHERE = reinterpret_cast(collisionShape.GetShape()); + auto* SPHERE = reinterpret_cast(collisionShape.GetShape()); const SHColour COLLIDER_COLOUR = collisionShape.IsTrigger() ? SHColour::PURPLE : SHColour::GREEN; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 0a7555b1..5f679655 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -225,44 +225,51 @@ namespace SHADE void SHPhysicsSystem::AddForce(EntityID eid, const SHVec3& force) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); - + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtCenterOfMass(force); } void SHPhysicsSystem::AddForceAtLocalPos(EntityID eid, const SHVec3& force, const SHVec3& localPos) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtLocalPosition(force, localPos); } void SHPhysicsSystem::AddForceAtWorldPos(EntityID eid, const SHVec3& force, const SHVec3& worldPos) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtWorldPosition(force, worldPos); } void SHPhysicsSystem::AddRelativeForce(EntityID eid, const SHVec3& relativeForce) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtCenterOfMass(relativeForce); } void SHPhysicsSystem::AddRelativeForceAtLocalPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& localPos) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtLocalPosition(relativeForce, localPos); } void SHPhysicsSystem::AddRelativeForceAtWorldPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& worldPos) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtWorldPosition(relativeForce, worldPos); } void SHPhysicsSystem::AddTorque(EntityID eid, const SHVec3& torque) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyWorldTorque(torque); } void SHPhysicsSystem::AddRelativeTorque(EntityID eid, const SHVec3& relativeTorque) noexcept { - auto* physicsObject = objectManager.GetPhysicsObject(eid); + const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); + PHYSICS_OBJECT->GetRigidBody()->applyLocalTorque(relativeTorque); } /*-----------------------------------------------------------------------------------*/ @@ -387,7 +394,7 @@ namespace SHADE , SHColliderComponent* colliderComponent ) noexcept { - if (!transformComponent || !SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) + if (!transformComponent) return; const SHVec3& WORLD_POS = transformComponent->GetWorldPosition(); @@ -461,7 +468,7 @@ namespace SHADE } // Set transform for rendering - if (transformComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) + if (transformComponent) { transformComponent->SetWorldPosition(renderPos); transformComponent->SetWorldOrientation(renderRot); diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index 3376159b..a42da3a6 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -139,6 +139,14 @@ namespace SHADE physicsSystem->worldState.world->update(static_cast(FIXED_DT)); + // Clear all forces of every body in the scene after each update + for (auto& physicsObject : physicsSystem->objectManager.physicsObjects | std::views::values) + { + auto* rp3dRigidBody = physicsObject.GetRigidBody(); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + } + accumulatedTime -= FIXED_DT; ++count; } diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 0f8933e2..ce406c77 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -1,8 +1,8 @@ #pragma once #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" -#include "Math/Geometry/SHBoundingBox.h" -#include "Math/Geometry/SHBoundingSphere.h" +#include "Math/Geometry/SHBox.h" +#include "Math/Geometry/SHSphere.h" #include "Physics/Interface/SHCollisionShape.h" #include "Resource/SHResourceManager.h" #include "Math/Vector/SHVec2.h" @@ -130,13 +130,13 @@ namespace YAML { case SHCollisionShape::Type::BOX: { - const auto* BOX = reinterpret_cast(rhs.GetShape()); + const auto* BOX = reinterpret_cast(rhs.GetShape()); node[HalfExtents] = BOX->GetRelativeExtents(); } break; case SHCollisionShape::Type::SPHERE: { - const auto* SPHERE = reinterpret_cast(rhs.GetShape()); + const auto* SPHERE = reinterpret_cast(rhs.GetShape()); node[Radius] = SPHERE->GetRelativeRadius(); } break; diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx index 0e916b7b..1a53f9e1 100644 --- a/SHADE_Managed/src/Components/Collider.cxx +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -47,35 +47,35 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Vector3 BoxCollider::Center::get() { - return Convert::ToCLI(getNativeBoundObject().GetCenter()); + return Convert::ToCLI(getNativeBoundObject().GetCenter()); } void BoxCollider::Center::set(Vector3 value) { - getNativeBoundObject().SetCenter(Convert::ToNative(value)); + getNativeBoundObject().SetCenter(Convert::ToNative(value)); } Vector3 BoxCollider::HalfExtents::get() { - return Convert::ToCLI(getNativeBoundObject().GetWorldExtents()); + return Convert::ToCLI(getNativeBoundObject().GetWorldExtents()); } void BoxCollider::HalfExtents::set(Vector3 value) { - getNativeBoundObject().SetWorldExtents(Convert::ToNative(value)); + getNativeBoundObject().SetWorldExtents(Convert::ToNative(value)); } Vector3 BoxCollider::Min::get() { - return Convert::ToCLI(getNativeBoundObject().GetMin()); + return Convert::ToCLI(getNativeBoundObject().GetMin()); } void BoxCollider::Min::set(Vector3 value) { - getNativeBoundObject().SetMin(Convert::ToNative(value)); + getNativeBoundObject().SetMin(Convert::ToNative(value)); } Vector3 BoxCollider::Max::get() { - return Convert::ToCLI(getNativeBoundObject().GetMax()); + return Convert::ToCLI(getNativeBoundObject().GetMax()); } void BoxCollider::Max::set(Vector3 value) { - getNativeBoundObject().SetMax(Convert::ToNative(value)); + getNativeBoundObject().SetMax(Convert::ToNative(value)); } /*---------------------------------------------------------------------------------*/ @@ -83,11 +83,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ bool BoxCollider::TestPoint(Vector3 point) { - return getNativeBoundObject().TestPoint(Convert::ToNative(point)); + return getNativeBoundObject().TestPoint(Convert::ToNative(point)); } bool BoxCollider::Raycast(Ray ray, float maxDistance) { - return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); + return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); } /*---------------------------------------------------------------------------------*/ @@ -95,19 +95,19 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Vector3 SphereCollider::Center::get() { - return Convert::ToCLI(getNativeBoundObject().GetCenter()); + return Convert::ToCLI(getNativeBoundObject().GetCenter()); } void SphereCollider::Center::set(Vector3 value) { - getNativeBoundObject().SetCenter(Convert::ToNative(value)); + getNativeBoundObject().SetCenter(Convert::ToNative(value)); } float SphereCollider::Radius::get() { - return getNativeBoundObject().GetWorldRadius(); + return getNativeBoundObject().GetWorldRadius(); } void SphereCollider::Radius::set(float value) { - getNativeBoundObject().SetWorldRadius(value); + getNativeBoundObject().SetWorldRadius(value); } /*---------------------------------------------------------------------------------*/ @@ -115,11 +115,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ bool SphereCollider::TestPoint(Vector3 point) { - return getNativeBoundObject().TestPoint(Convert::ToNative(point)); + return getNativeBoundObject().TestPoint(Convert::ToNative(point)); } bool SphereCollider::Raycast(Ray ray, float maxDistance) { - return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); + return getNativeBoundObject().Raycast(Convert::ToNative(ray), maxDistance); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Components/RigidBody.cxx b/SHADE_Managed/src/Components/RigidBody.cxx index 12861600..a88a2503 100644 --- a/SHADE_Managed/src/Components/RigidBody.cxx +++ b/SHADE_Managed/src/Components/RigidBody.cxx @@ -189,7 +189,11 @@ namespace SHADE { GetNativeComponent()->AddRelativeForceAtWorldPos(Convert::ToNative(relativeForce), Convert::ToNative(worldPos)); } - + + Vector3 RigidBody::GetForce() + { + return Convert::ToCLI(GetNativeComponent()->GetForce()); + } /*---------------------------------------------------------------------------------*/ /* Torque Functions */ /*---------------------------------------------------------------------------------*/ @@ -202,4 +206,10 @@ namespace SHADE { GetNativeComponent()->AddRelativeTorque(Convert::ToNative(relativeTorque)); } + + Vector3 RigidBody::GetTorque() + { + return Convert::ToCLI(GetNativeComponent()->GetTorque()); + } + } \ No newline at end of file diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx index f2953bbd..50147033 100644 --- a/SHADE_Managed/src/Components/RigidBody.hxx +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -145,11 +145,15 @@ namespace SHADE void AddRelativeForceAtLocalPos(Vector3 relativeForce, Vector3 localPos); void AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos); + Vector3 GetForce(); + /*-----------------------------------------------------------------------------*/ /* Torque Functions */ /*-----------------------------------------------------------------------------*/ void AddTorque(Vector3 force); void AddRelativeTorque(Vector3 relativeForce); + + Vector3 GetTorque(); }; } \ No newline at end of file From 9e90a78ee43069800fa7bdae9e018befbc168ae3 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 14 Nov 2022 16:29:53 +0800 Subject: [PATCH 784/793] Added GetComponentsInChildren and GetScriptsInChildren for Scripts and GameObjects --- SHADE_Managed/src/Engine/ECS.cxx | 67 +++++++++++++++++++++++ SHADE_Managed/src/Engine/ECS.hxx | 18 +++++- SHADE_Managed/src/Engine/GameObject.cxx | 15 +++++ SHADE_Managed/src/Engine/GameObject.hxx | 28 ++++++++++ SHADE_Managed/src/Scripts/Script.cxx | 11 ++++ SHADE_Managed/src/Scripts/Script.hxx | 28 ++++++++++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 64 ++++++++++++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.hxx | 23 ++++++++ 8 files changed, 252 insertions(+), 2 deletions(-) diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 80f070e2..76a6a5e2 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -27,6 +27,7 @@ of DigiPen Institute of Technology is prohibited. #include "Scene/SHSceneManager.h" #include "Scene/SHSceneGraph.h" #include "Tools/SHLog.h" +#include "Graphics\MiddleEnd\Interface\SHRenderable.h" // Project Headers #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" @@ -36,6 +37,7 @@ of DigiPen Institute of Technology is prohibited. #include "Components/Camera.hxx" #include "Components/CameraArm.hxx" #include "Components/Light.hxx" +#include "Components\Renderable.hxx" namespace SHADE { @@ -166,6 +168,70 @@ namespace SHADE return T(); } + generic + System::Collections::Generic::IEnumerable^ ECS::GetComponentsInChildren(EntityID entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ECS] Attempted to retrieve Component \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + return nullptr; + } + + // Search all elements via a iterative breadth first search + System::Collections::Generic::List^ results; + System::Collections::Generic::Queue^ searchSpace = gcnew System::Collections::Generic::Queue(); + // Start off with direct children + SHSceneNode* entityNode = SHSceneManager::GetCurrentSceneGraph().GetNode(entity); + if (entityNode == nullptr) + { + std::ostringstream oss; + oss << "[ScriptStore] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + } + for (const auto& child : entityNode->GetChildren()) + { + searchSpace->Enqueue(child->GetEntityID()); + } + // Continue with all subsequent children + while (searchSpace->Count > 0) + { + // Check if this entity has the component we need + Entity curr = searchSpace->Dequeue(); + T component = GetComponent(curr); + if (component != nullptr) + { + // We only construct if we need to + if (results == nullptr) + results = gcnew System::Collections::Generic::List(); + results->Add(component); + } + + // Add children to the queue + SHSceneNode* sceneGraphNode = SHSceneManager::GetCurrentSceneGraph().GetNode(curr); + if (sceneGraphNode == nullptr) + { + std::ostringstream oss; + oss << "[ECS_CLI] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + continue; + } + for (const auto& child : sceneGraphNode->GetChildren()) + { + searchSpace->Enqueue(child->GetEntityID()); + } + } + + // None here + return results; + } + generic T ECS::EnsureComponent(EntityID entity) { @@ -249,6 +315,7 @@ namespace SHADE static ECS::ECS() { componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); componentMap.Add(createComponentSet()); diff --git a/SHADE_Managed/src/Engine/ECS.hxx b/SHADE_Managed/src/Engine/ECS.hxx index 0563f678..18acf30d 100644 --- a/SHADE_Managed/src/Engine/ECS.hxx +++ b/SHADE_Managed/src/Engine/ECS.hxx @@ -51,9 +51,9 @@ namespace SHADE /// specified Component. /// generic where T : BaseComponent - static T GetComponent(EntityID entity); + static T GetComponent(EntityID entity); ///

    - /// Retrieves the first Component from the specified GameObjectt's children that + /// Retrieves the first Component from the specified GameObject's children that /// matches the specified type. /// /// Type of the Component to get. @@ -65,6 +65,20 @@ namespace SHADE generic where T : BaseComponent static T GetComponentInChildren(EntityID entity); /// + /// Retrieves a list of Components from the specified GameObject's children that + /// matches the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetComponentInChildren() instead. + /// This does not search the specified entity. + /// + /// Type of the Component to get. + /// Entity object to get the Component from. + /// + /// Newly allocated List of components. Will be null if no components are found. + /// + generic where T : BaseComponent + static System::Collections::Generic::IEnumerable^ GetComponentsInChildren(EntityID entity); + /// /// Ensures a Component on the specified Entity. /// /// Type of the Component to ensure. diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 017366fe..200b2079 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -170,6 +170,14 @@ namespace SHADE return ECS::GetComponentInChildren(entity); } + generic + System::Collections::Generic::IEnumerable^ GameObject::GetComponentsInChildren() + { + if (!valid) + throw gcnew System::NullReferenceException(); + return ECS::GetComponentsInChildren(entity); + } + generic T GameObject::EnsureComponent() { @@ -212,6 +220,13 @@ namespace SHADE throw gcnew System::NullReferenceException(); return ScriptStore::GetScriptInChildren(entity); } + generic + System::Collections::Generic::IEnumerable^ GameObject::GetScriptsInChildren() + { + if (!valid) + throw gcnew System::NullReferenceException(); + return ScriptStore::GetScriptsInChildren(entity); + } generic System::Collections::Generic::IEnumerable^ GameObject::GetScripts() diff --git a/SHADE_Managed/src/Engine/GameObject.hxx b/SHADE_Managed/src/Engine/GameObject.hxx index 2e0f360c..64d1b428 100644 --- a/SHADE_Managed/src/Engine/GameObject.hxx +++ b/SHADE_Managed/src/Engine/GameObject.hxx @@ -153,6 +153,7 @@ namespace SHADE /// /// Retrieves the first Component from this GameObject's children that matches /// the specified type. + /// Unlike Unity, we do not search this GameObject, only the children. /// /// Type of the Component to get. /// @@ -162,6 +163,19 @@ namespace SHADE generic where T : BaseComponent T GetComponentInChildren(); /// + /// Retrieves a list of Components from this GameObject's children that matches + /// the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetComponentInChildren() instead. + /// Unlike Unity, we do not search this GameObject, only the children. + /// + /// Type of the Component to get. + /// + /// Newly allocated List of components. Will be null if no components are found. + /// + generic where T : BaseComponent + System::Collections::Generic::IEnumerable^ GetComponentsInChildren(); + /// /// Ensures a Component on this GameObject. /// /// Type of the Component to ensure. @@ -201,12 +215,26 @@ namespace SHADE /// Retrieves a Script of the specified type from child GameObjects. /// If multiple Scripts of the same specified type are added on the same /// child GameObject, this will retrieve the first one added. + /// Unlike Unity, we do not search this GameObject, only the children. ///

    !9MAnS#ia3Wk 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 UNbk|?%M4sE@ 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

    /// Type of Script to retrieve. /// Reference to the Script to retrieve. generic where T : ref class, Script T GetScriptInChildren(); /// + /// Retrieves a list of Scripts from this GameObject's children that matches + /// the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetComponentInChildren() instead. + /// Unlike Unity, we do not search this GameObject, only the children. + /// + /// Type of the Component to get. + /// + /// Newly allocated List of components. Will be null if no components are found. + /// + generic where T : ref class, Script + System::Collections::Generic::IEnumerable^ GetScriptsInChildren(); + /// /// Retrieves a immutable list of Scripts of the specified type from this /// GameObject. /// diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index 017242d6..a2af38a3 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -42,6 +42,12 @@ namespace SHADE return owner.GetComponentInChildren(); } + generic + System::Collections::Generic::IEnumerable^ Script::GetComponentsInChildren() + { + return owner.GetComponentsInChildren(); + } + generic T Script::EnsureComponent() { @@ -72,6 +78,11 @@ namespace SHADE { return ScriptStore::GetScriptInChildren(owner.GetEntity()); } + generic + System::Collections::Generic::IEnumerable^ Script::GetScriptsInChildren() + { + return ScriptStore::GetScriptsInChildren(owner.GetEntity()); + } generic System::Collections::Generic::IEnumerable^ Script::GetScripts() diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index fb564d27..46736245 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -69,6 +69,7 @@ namespace SHADE /// /// Retrieves the first Component from this GameObject's children that matches /// the specified type. + /// Unlike Unity, we do not search this GameObject, only the children. /// /// /// Type of the Component to get. Must be derived from BaseComponent. @@ -77,6 +78,19 @@ namespace SHADE generic where T : BaseComponent T GetComponentInChildren(); /// + /// Retrieves a list of Components from this GameObject's children that + /// matches the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetComponentInChildren() instead. + /// Unlike Unity, we do not search this GameObject, only the children. + /// + /// Type of the Component to get. + /// + /// Newly allocated List of components. Will be null if no components are found. + /// + generic where T : BaseComponent + System::Collections::Generic::IEnumerable^ GetComponentsInChildren(); + /// /// Ensures a Component on the GameObject that this Script belongs to. /// /// @@ -121,6 +135,7 @@ namespace SHADE /// /// Retrieves the first Script from this GameObject's children that matches the /// specified type. + /// Unlike Unity, we do not search this GameObject, only the children. /// /// /// Type of script to get. @@ -130,6 +145,19 @@ namespace SHADE generic where T : ref class, Script T GetScriptInChildren(); /// + /// Retrieves a list of Scripts from this GameObject's children that matches + /// the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetComponentInChildren() instead. + /// Unlike Unity, we do not search this GameObject, only the children. + /// + /// Type of the Component to get. + /// + /// Newly allocated List of components. Will be null if no components are found. + /// + generic where T : ref class, Script + System::Collections::Generic::IEnumerable^ GetScriptsInChildren(); + /// /// Retrieves a immutable list of scripts from the specified Entity that /// matches the specified type. ///
    diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 318f5839..2b1540b6 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -211,6 +211,70 @@ namespace SHADE return T(); } + generic + System::Collections::Generic::IEnumerable^ ScriptStore::GetScriptsInChildren(Entity entity) + { + System::Type^ componentType = T::typeid; + + // Check if entity is correct + if (!SHEntityManager::IsValidEID(entity)) + { + std::ostringstream oss; + oss << "[ScriptStore] Attempted to retrieve Script \"" + << Convert::ToNative(componentType->Name) + << "\" from invalid Entity."; + Debug::LogError(oss.str()); + return nullptr; + } + + // Search all elements via a iterative breadth first search + System::Collections::Generic::List^ results; + System::Collections::Generic::Queue^ searchSpace = gcnew System::Collections::Generic::Queue(); + // Start off with direct children + SHSceneNode* entityNode = SHSceneManager::GetCurrentSceneGraph().GetNode(entity); + if (entityNode == nullptr) + { + std::ostringstream oss; + oss << "[ScriptStore] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + } + for (const auto& child : entityNode->GetChildren()) + { + searchSpace->Enqueue(child->GetEntityID()); + } + // Continue with all subsequent children + while (searchSpace->Count > 0) + { + // Check if this entity has the component we need + Entity curr = searchSpace->Dequeue(); + T script = GetScript(curr); + if (script != nullptr) + { + // We only construct if we need to + if (results == nullptr) + results = gcnew System::Collections::Generic::List(); + results->Add(script); + } + + // Add children to the queue + SHSceneNode* sceneGraphNode = SHSceneManager::GetCurrentSceneGraph().GetNode(curr); + if (sceneGraphNode == nullptr) + { + std::ostringstream oss; + oss << "[ScriptStore] Failed to retrieve SceneGraphNode of entity #" << entity << ". This should not happen!"; + SHLog::Warning(oss.str()); + continue; + } + for (const auto& child : sceneGraphNode->GetChildren()) + { + searchSpace->Enqueue(child->GetEntityID()); + } + } + + // None here + return results; + } + generic System::Collections::Generic::IEnumerable^ ScriptStore::GetScripts(Entity entity) { diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 62e3003a..78f8c787 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -137,6 +137,29 @@ namespace SHADE generic where T : ref class, Script static T GetScriptInChildren(Entity entity); /// + /// Retrieves the list of Scripts from the specified Entity and the Entity's + /// children that matches the specified type. + /// This function performs allocations. If expecting only 1 component, use + /// GetScriptInChildren() instead. + /// This does not search the specified entity. + /// + /// + /// Type of script to get. + /// This needs to be a default constructable Script. + /// + /// + /// The entity which the script to retrieve is attached. + /// + /// + /// Reference to the script. This can be null if no script of the specified + /// type is attached. + /// + /// + /// If the specified Entity is invalid. + /// + generic where T : ref class, Script + static System::Collections::Generic::IEnumerable^ GetScriptsInChildren(Entity entity); + /// /// Retrieves a immutable list of scripts from the specified Entity that /// matches the specified type. ///
    From 9e8674859c768fb08c9fedfd53709c493df65a3a Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 14 Nov 2022 17:05:54 +0800 Subject: [PATCH 785/793] Fixed script serialization for objects with no default values set --- .../MiddleEnd/Interface/SHRenderable.cpp | 7 +++- .../src/Serialization/SHYAMLConverters.h | 10 ++++- .../Serialisation/SerialisationUtilities.h++ | 42 ++++++++++++++++++- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 57762324..c5511606 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -34,8 +34,11 @@ namespace SHADE void SHRenderable::OnDestroy() { // Remove from SuperBatch - Handle superBatch = sharedMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); - superBatch->Remove(this); + if (sharedMaterial) + { + Handle superBatch = sharedMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + superBatch->Remove(this); + } // Free resources if (material) diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 0f8933e2..6df65bc3 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -288,7 +288,15 @@ namespace YAML { YAML::Node node; node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); - node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); + auto mat = rhs.GetMaterial(); + if (mat) + { + node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); + } + else + { + node[MAT_YAML_TAG.data()] = 0; + } return node; } static bool decode(YAML::Node const& node, SHRenderable& rhs) diff --git a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ index 3e756ce4..dde6705a 100644 --- a/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ +++ b/SHADE_Managed/src/Serialisation/SerialisationUtilities.h++ @@ -28,7 +28,47 @@ namespace SHADE template bool SerialisationUtilities::fieldInsertYaml(System::Reflection::FieldInfo^ fieldInfo, System::Object^ object, YAML::Node& fieldNode) { - return varInsertYamlInternal(fieldInfo->GetValue(object), fieldNode); + // Handle null objects + System::Object^ fieldObject = fieldInfo->GetValue(object); + if (fieldObject == nullptr) + { + // Default construct if null + if (fieldInfo->FieldType == FieldType::typeid) + { + if constexpr (std::is_same_v) + { + fieldNode = 0; + } + else if constexpr (std::is_same_v) + { + fieldNode = ""; + } + else if constexpr (std::is_same_v) + { + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(0.0f); + fieldNode.push_back(0.0f); + } + else if constexpr (std::is_same_v) + { + fieldNode.SetStyle(YAML::EmitterStyle::Flow); + fieldNode.push_back(0.0f); + fieldNode.push_back(0.0f); + fieldNode.push_back(0.0f); + } + else if constexpr (std::is_same_v) + { + fieldNode = MAX_EID; + } + else + { + fieldNode = FieldType(); + } + return true; + } + return false; + } + return varInsertYamlInternal(fieldObject, fieldNode); } template bool SerialisationUtilities::varInsertYamlInternal(System::Object^ object, YAML::Node& fieldNode) From 874977775d77ca3bace33d03e77bfae5ae6c98f9 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 14 Nov 2022 18:24:08 +0800 Subject: [PATCH 786/793] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..dd84ea78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From dd2b9f4f23d41201e4af0cf2e9c4a2fb4ff91077 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 14 Nov 2022 18:26:31 +0800 Subject: [PATCH 787/793] Alter template --- .github/ISSUE_TEMPLATE/bug_report.md | 15 ++------------- .github/ISSUE_TEMPLATE/feature_request.md | 4 ++-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea78..ff664441 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug report -about: Create a report to help us improve +about: Report a bug that should be fixed title: '' labels: '' assignees: '' @@ -23,16 +23,5 @@ A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - **Additional context** -Add any other context about the problem here. +Add any other context about the problem here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d..23094e9d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- name: Feature request -about: Suggest an idea for this project +about: Suggest a feature for the project title: '' labels: '' assignees: '' @@ -17,4 +17,4 @@ A clear and concise description of what you want to happen. A clear and concise description of any alternative solutions or features you've considered. **Additional context** -Add any other context or screenshots about the feature request here. +Add any other context or screenshots about the feature request here. \ No newline at end of file From 3cc5ed0decb5aff84bcaa53a81a7a77361048b7d Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 14 Nov 2022 18:31:56 +0800 Subject: [PATCH 788/793] Added meta generation recognisation for scene and font extension types on load up Check for std::optional value exist --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 35 ++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 968e76dd..a7f4d8d9 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -560,6 +560,34 @@ namespace SHADE assetCollection.emplace(newAsset.id, newAsset); SHAssetMetaHandler::WriteMetaData(newAsset); + return newAsset.id; + } + else if (ext == SCENE_EXTENSION) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::SCENE), + AssetType::SCENE, + path, + false + }; + assetCollection.emplace(newAsset.id, newAsset); + SHAssetMetaHandler::WriteMetaData(newAsset); + + return newAsset.id; + } + else if (ext == FONT_EXTENSION) + { + SHAsset newAsset{ + path.stem().string(), + GenerateAssetID(AssetType::FONT), + AssetType::FONT, + path, + false + }; + assetCollection.emplace(newAsset.id, newAsset); + SHAssetMetaHandler::WriteMetaData(newAsset); + return newAsset.id; } } @@ -571,8 +599,11 @@ namespace SHADE for (auto& file : toGenNew) { - auto newID{ GenerateNewMeta(file->path).value() }; - file->assetMeta = &assetCollection[newID]; + auto newID{ GenerateNewMeta(file->path) }; + if (newID.has_value()) + { + file->assetMeta = &assetCollection[newID.value()]; + } } for (auto& asset : std::ranges::views::values(assetCollection)) From 5ccd2263c78983a177b3d1049963835bb5026858 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 14 Nov 2022 18:35:52 +0800 Subject: [PATCH 789/793] Documentation files are now generated for projects --- SHADE_Application/premake5.lua | 3 ++- SHADE_CSharp/premake5.lua | 17 +++++++++++++++-- SHADE_Engine/premake5.lua | 3 ++- SHADE_Managed/premake5.lua | 15 ++++++++++++++- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 395c3a48..cba0c35e 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -75,7 +75,8 @@ project "SHADE_Application" "26439", "26451", "26437", - "4275" + "4275", + "4635" } linkoptions { "-IGNORE:4006" } diff --git a/SHADE_CSharp/premake5.lua b/SHADE_CSharp/premake5.lua index 2d6c1edb..3151b6a2 100644 --- a/SHADE_CSharp/premake5.lua +++ b/SHADE_CSharp/premake5.lua @@ -27,6 +27,13 @@ project "SHADE_CSharp" warnings 'Extra' + postbuildcommands + { + "xcopy /r /y /q \"%{outputdir}\\net5.0\\SHADE_CSharp.xml\" \"%{outputdir}\"", + "xcopy /r /y /q \"%{outputdir}\\net5.0\\SHADE_CSharp.pdb\" \"%{outputdir}\"", + "rmdir /s /q \"%{outputdir}\\net5.0\"" + } + filter "configurations:Debug" symbols "On" defines {"_DEBUG"} @@ -41,12 +48,18 @@ project "SHADE_CSharp" require "vstudio" - function platformsElement(cfg) + function platformsElementCS(cfg) _p(2,'x64') end + function docsElementCS(cfg) + _p(2,'true') + end + function docsLocationElementCS(cfg) + _p(2,'$(OutDir)') + end premake.override(premake.vstudio.cs2005.elements, "projectProperties", function (oldfn, cfg) return table.join(oldfn(cfg), { - platformsElement, + platformsElementCS, docsElementCS, docsLocationElementCS, }) end) \ No newline at end of file diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 42f95520..1d6d7bef 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -78,7 +78,8 @@ project "SHADE_Engine" "26439", "26451", "26437", - "4275" + "4275", + "4635" } linkoptions { "-IGNORE:4006" } diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 88021071..64f6e23e 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -75,7 +75,8 @@ project "SHADE_Managed" disablewarnings { - "4275" + "4275", + "4635" } @@ -102,3 +103,15 @@ project "SHADE_Managed" optimize "On" defines{"_RELEASE"} links{"librttr_core.lib"} + + require "vstudio" + + function docsElementCPP(cfg) + _p(3,'true') + end + + premake.override(premake.vstudio.vc2010.elements, "clCompile", function (oldfn, cfg) + return table.join(oldfn(cfg), { + docsElementCPP, + }) + end) \ No newline at end of file From 10335f30333edac86b7c01d9775bf079ca10a573 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 14 Nov 2022 18:38:32 +0800 Subject: [PATCH 790/793] Added syncing of physics materials & clear forces methods --- .../Physics/Interface/SHCollisionShape.cpp | 32 +++++++++--- .../Physics/Interface/SHPhysicsMaterial.cpp | 2 +- .../Interface/SHRigidBodyComponent.cpp | 39 +++++++++++--- .../Physics/Interface/SHRigidBodyComponent.h | 5 +- .../Physics/PhysicsObject/SHPhysicsObject.cpp | 21 +++++--- .../Physics/PhysicsObject/SHPhysicsObject.h | 2 + .../src/Physics/System/SHPhysicsSystem.cpp | 51 +------------------ .../src/Physics/System/SHPhysicsSystem.h | 20 ++------ .../System/SHPhysicsSystemRoutines.cpp | 13 ++--- SHADE_Managed/src/Components/RigidBody.cxx | 11 ++++ SHADE_Managed/src/Components/RigidBody.hxx | 2 + 11 files changed, 99 insertions(+), 99 deletions(-) diff --git a/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp index 2edca110..e63895d5 100644 --- a/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHCollisionShape.cpp @@ -177,9 +177,21 @@ namespace SHADE { dirty = true; - const auto* colliderComponent = SHComponentManager::GetComponent(entityID); + const auto* COLLIDER = SHComponentManager::GetComponent(entityID); + auto* box = reinterpret_cast(shape); + + SHVec3 correctedHalfExtents = halfExtents; + + // Get current relative halfExtents for error checking. 0 is ignored + const SHVec3& CURRENT_RELATIVE_EXTENTS = box->GetRelativeExtents(); + for (size_t i = 0; i < SHVec3::SIZE; ++i) + { + if (SHMath::CompareFloat(halfExtents[i], 0.0f)) + correctedHalfExtents[i] = CURRENT_RELATIVE_EXTENTS[i]; + } + // Set the half extents relative to world scale - const SHVec3 WORLD_EXTENTS = halfExtents * colliderComponent->GetScale() * 0.5f; + const SHVec3 WORLD_EXTENTS = correctedHalfExtents * COLLIDER->GetScale() * 0.5f; if (type != Type::BOX) { @@ -189,18 +201,24 @@ namespace SHADE shape = new SHBox{ positionOffset, WORLD_EXTENTS }; } - auto* box = reinterpret_cast(shape); box->SetWorldExtents(WORLD_EXTENTS); - box->SetRelativeExtents(halfExtents); + box->SetRelativeExtents(correctedHalfExtents); } void SHCollisionShape::SetBoundingSphere(float radius) { dirty = true; - const auto* colliderComponent = SHComponentManager::GetComponent(entityID); + auto* sphere = reinterpret_cast(shape); + const auto* COLLIDER = SHComponentManager::GetComponent(entityID); + + // Get current relative halfExtents for error checking. 0 is ignored + const float CURRENT_RELATIVE_RADIUS = sphere->GetRelativeRadius(); + if (SHMath::CompareFloat(radius, 0.0f)) + radius = CURRENT_RELATIVE_RADIUS; + // Set the radius relative to world scale - const SHVec3 WORLD_SCALE = colliderComponent->GetScale(); + const SHVec3 WORLD_SCALE = COLLIDER->GetScale(); const float MAX_SCALE = SHMath::Max({ WORLD_SCALE.x, WORLD_SCALE.y, WORLD_SCALE.z }); const float WORLD_RADIUS = radius * MAX_SCALE * 0.5f; @@ -212,8 +230,8 @@ namespace SHADE shape = new SHSphere{ positionOffset, WORLD_RADIUS }; } - auto* sphere = reinterpret_cast(shape); sphere->SetWorldRadius(WORLD_RADIUS); + sphere->SetRelativeRadius(radius); } void SHCollisionShape::SetIsTrigger(bool trigger) noexcept diff --git a/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp b/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp index 677e448f..95141501 100644 --- a/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHPhysicsMaterial.cpp @@ -44,7 +44,7 @@ namespace SHADE && SHMath::CompareFloat(density, rhs.density); } - bool SHPhysicsMaterial::operator!=(const SHPhysicsMaterial& rhs) const noexcept + bool SHPhysicsMaterial::operator!=(const SHPhysicsMaterial& rhs) const noexcept { return !SHMath::CompareFloat(friction, rhs.friction) || !SHMath::CompareFloat(bounciness, rhs.bounciness) diff --git a/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp index 5fe1e55e..765decd8 100644 --- a/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.cpp @@ -302,6 +302,9 @@ namespace SHADE { static constexpr int FLAG_POS = 9; + if (newMass < 0.0f) + return; + if (type != Type::DYNAMIC) { SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) @@ -385,42 +388,62 @@ namespace SHADE void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { - system->AddForce(GetEID(), force); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyWorldForceAtCenterOfMass(force); } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - system->AddForceAtLocalPos(GetEID(), force, localPos); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyWorldForceAtLocalPosition(force, localPos); } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - system->AddForceAtWorldPos(GetEID(), force, worldPos); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyWorldForceAtWorldPosition(force, worldPos); } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - system->AddRelativeForce(GetEID(), relativeForce); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyLocalForceAtCenterOfMass(relativeForce); } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - system->AddRelativeForceAtLocalPos(GetEID(), relativeForce, localPos); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyLocalForceAtLocalPosition(relativeForce, localPos); } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - system->AddRelativeForceAtWorldPos(GetEID(), relativeForce, worldPos); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyLocalForceAtWorldPosition(relativeForce, worldPos); } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - system->AddTorque(GetEID(), torque); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyWorldTorque(torque); } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - system->AddRelativeTorque(GetEID(), relativeTorque); + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->applyLocalTorque(relativeTorque); + } + + void SHRigidBodyComponent::ClearForces() const noexcept + { + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->resetForce(); + } + + void SHRigidBodyComponent::ClearTorque() const noexcept + { + if (auto* physicsObject = system->GetPhysicsObject(GetEID()); physicsObject) + physicsObject->GetRigidBody()->resetTorque(); } } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h index 48a5d723..f7062f96 100644 --- a/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Interface/SHRigidBodyComponent.h @@ -125,14 +125,15 @@ namespace SHADE void AddForce (const SHVec3& force) const noexcept; void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; void AddForceAtWorldPos (const SHVec3& force, const SHVec3& worldPos) const noexcept; - void AddRelativeForce (const SHVec3& relativeForce) const noexcept; void AddRelativeForceAtLocalPos (const SHVec3& relativeForce, const SHVec3& localPos) const noexcept; void AddRelativeForceAtWorldPos (const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept; - void AddTorque (const SHVec3& torque) const noexcept; void AddRelativeTorque (const SHVec3& relativeTorque) const noexcept; + void ClearForces () const noexcept; + void ClearTorque () const noexcept; + private: /*---------------------------------------------------------------------------------*/ /* Data Members */ diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp index 346ab4cb..a52d3899 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.cpp @@ -277,23 +277,24 @@ namespace SHADE if (!rp3dBody->isActive()) return; - int index = 0; - for (auto& collisionShape : component.collisionShapes) + const int NUM_SHAPES = static_cast(component.collisionShapes.size()); + for (int i = 0; i < NUM_SHAPES; ++i) { + auto& collisionShape = component.collisionShapes[i]; + if (!collisionShape.dirty) continue; switch (collisionShape.GetType()) { - case SHCollisionShape::Type::BOX: syncBoxShape(index, collisionShape); break; - case SHCollisionShape::Type::SPHERE: syncSphereShape(index, collisionShape); break; + case SHCollisionShape::Type::BOX: syncBoxShape(i, collisionShape); break; + case SHCollisionShape::Type::SPHERE: syncSphereShape(i, collisionShape); break; default: break; } - // TODO(Diren): Update Material + syncMaterial(i, collisionShape); collisionShape.dirty = false; - ++index; } } @@ -301,6 +302,14 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ + void SHPhysicsObject::syncMaterial(int colliderIndex, SHCollisionShape& collisionShape) const noexcept + { + auto& rp3dMaterial = rp3dBody->getCollider(colliderIndex)->getMaterial(); + rp3dMaterial.setFrictionCoefficient(collisionShape.GetFriction()); + rp3dMaterial.setBounciness(collisionShape.GetBounciness()); + rp3dMaterial.setMassDensity(collisionShape.GetDensity()); + } + void SHPhysicsObject::addBoxShape(SHCollisionShape& boxShape) const noexcept { const rp3d::Transform OFFSETS diff --git a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h index fefc983f..5a0e62ac 100644 --- a/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/PhysicsObject/SHPhysicsObject.h @@ -96,6 +96,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ + void syncMaterial (int colliderIndex, SHCollisionShape& collisionShape) const noexcept; + // Box Shapes void addBoxShape (SHCollisionShape& boxShape) const noexcept; diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 5f679655..33ba88e7 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -62,7 +62,7 @@ namespace SHADE return collisionListener.GetTriggerInfoContainer(); } - const SHPhysicsObject* const SHPhysicsSystem::GetPhysicsObject(EntityID eid) noexcept + const SHPhysicsObject* SHPhysicsSystem::GetPhysicsObject(EntityID eid) noexcept { return objectManager.GetPhysicsObject(eid); } @@ -223,55 +223,6 @@ namespace SHADE #endif } - void SHPhysicsSystem::AddForce(EntityID eid, const SHVec3& force) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtCenterOfMass(force); - } - - void SHPhysicsSystem::AddForceAtLocalPos(EntityID eid, const SHVec3& force, const SHVec3& localPos) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtLocalPosition(force, localPos); - } - - void SHPhysicsSystem::AddForceAtWorldPos(EntityID eid, const SHVec3& force, const SHVec3& worldPos) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyWorldForceAtWorldPosition(force, worldPos); - } - - void SHPhysicsSystem::AddRelativeForce(EntityID eid, const SHVec3& relativeForce) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtCenterOfMass(relativeForce); - } - - void SHPhysicsSystem::AddRelativeForceAtLocalPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& localPos) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtLocalPosition(relativeForce, localPos); - } - - - void SHPhysicsSystem::AddRelativeForceAtWorldPos(EntityID eid, const SHVec3& relativeForce, const SHVec3& worldPos) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyLocalForceAtWorldPosition(relativeForce, worldPos); - } - - void SHPhysicsSystem::AddTorque(EntityID eid, const SHVec3& torque) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyWorldTorque(torque); - } - - void SHPhysicsSystem::AddRelativeTorque(EntityID eid, const SHVec3& relativeTorque) noexcept - { - const auto* PHYSICS_OBJECT = objectManager.GetPhysicsObject(eid); - PHYSICS_OBJECT->GetRigidBody()->applyLocalTorque(relativeTorque); - } - /*-----------------------------------------------------------------------------------*/ /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h index 3891ff48..3da7094b 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h @@ -61,7 +61,7 @@ namespace SHADE [[nodiscard]] const std::vector& GetAllCollisionInfo () const noexcept; [[nodiscard]] const std::vector& GetAllTriggerInfo () const noexcept; - [[nodiscard]] const SHPhysicsObject* const GetPhysicsObject (EntityID eid) noexcept; + [[nodiscard]] const SHPhysicsObject* GetPhysicsObject (EntityID eid) noexcept; [[nodiscard]] const SHPhysicsObjectManager::PhysicsObjectEntityMap& GetPhysicsObjects () const noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ @@ -79,25 +79,13 @@ namespace SHADE void ForceUpdate (); - // Specific Handling for Collision Shapes as they are not under the Component System + // Specific Handling for Collision Shapes as they are not under the Component System. + // This is done as events need to be sent out. + // TODO(Diren): Consider using a static method through the ColliderComponent. void AddCollisionShape (EntityID eid, int shapeIndex); void RemoveCollisionShape (EntityID eid, int shapeIndex); - // Forces are applied from components here. These functions should only be invoked during play (through scripts) - // Thus there is no need to check for an editor. - - void AddForce (EntityID eid, const SHVec3& force) noexcept; - void AddForceAtLocalPos (EntityID eid, const SHVec3& force, const SHVec3& localPos) noexcept; - void AddForceAtWorldPos (EntityID eid, const SHVec3& force, const SHVec3& worldPos) noexcept; - - void AddRelativeForce (EntityID eid, const SHVec3& relativeForce) noexcept; - void AddRelativeForceAtLocalPos (EntityID eid, const SHVec3& relativeForce, const SHVec3& localPos) noexcept; - void AddRelativeForceAtWorldPos (EntityID eid, const SHVec3& relativeForce, const SHVec3& worldPos) noexcept; - - void AddTorque (EntityID eid, const SHVec3& torque) noexcept; - void AddRelativeTorque (EntityID eid, const SHVec3& relativeTorque) noexcept; - /*---------------------------------------------------------------------------------*/ /* System Routines */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index a42da3a6..3e56ca14 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -13,11 +13,14 @@ // Primary Header #include "SHPhysicsSystem.h" // Project Headers +#include "ECS_Base/Managers/SHEntityManager.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" #include "Scene/SHSceneManager.h" #include "Scripting/SHScriptEngine.h" +#include "Input/SHInputManager.h" + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -136,16 +139,8 @@ namespace SHADE { if (scriptingSystem != nullptr) scriptingSystem->ExecuteFixedUpdates(); - - physicsSystem->worldState.world->update(static_cast(FIXED_DT)); - // Clear all forces of every body in the scene after each update - for (auto& physicsObject : physicsSystem->objectManager.physicsObjects | std::views::values) - { - auto* rp3dRigidBody = physicsObject.GetRigidBody(); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - } + physicsSystem->worldState.world->update(static_cast(FIXED_DT)); accumulatedTime -= FIXED_DT; ++count; diff --git a/SHADE_Managed/src/Components/RigidBody.cxx b/SHADE_Managed/src/Components/RigidBody.cxx index a88a2503..cdaa296a 100644 --- a/SHADE_Managed/src/Components/RigidBody.cxx +++ b/SHADE_Managed/src/Components/RigidBody.cxx @@ -194,6 +194,12 @@ namespace SHADE { return Convert::ToCLI(GetNativeComponent()->GetForce()); } + + void RigidBody::ClearForces() + { + GetNativeComponent()->ClearForces(); + } + /*---------------------------------------------------------------------------------*/ /* Torque Functions */ /*---------------------------------------------------------------------------------*/ @@ -212,4 +218,9 @@ namespace SHADE return Convert::ToCLI(GetNativeComponent()->GetTorque()); } + void RigidBody::ClearTorque() + { + GetNativeComponent()->ClearTorque(); + } + } \ No newline at end of file diff --git a/SHADE_Managed/src/Components/RigidBody.hxx b/SHADE_Managed/src/Components/RigidBody.hxx index 50147033..8bfe34aa 100644 --- a/SHADE_Managed/src/Components/RigidBody.hxx +++ b/SHADE_Managed/src/Components/RigidBody.hxx @@ -146,6 +146,7 @@ namespace SHADE void AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos); Vector3 GetForce(); + void ClearForces(); /*-----------------------------------------------------------------------------*/ /* Torque Functions */ @@ -154,6 +155,7 @@ namespace SHADE void AddRelativeTorque(Vector3 relativeForce); Vector3 GetTorque(); + void ClearTorque(); }; } \ No newline at end of file From 9df5b131ee87dc83cc64fc25423f5784684a69aa Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 14 Nov 2022 19:08:36 +0800 Subject: [PATCH 791/793] Fixed build error with deletion of net5.0 --- SHADE_CSharp/premake5.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SHADE_CSharp/premake5.lua b/SHADE_CSharp/premake5.lua index 3151b6a2..39ef8281 100644 --- a/SHADE_CSharp/premake5.lua +++ b/SHADE_CSharp/premake5.lua @@ -30,8 +30,7 @@ project "SHADE_CSharp" postbuildcommands { "xcopy /r /y /q \"%{outputdir}\\net5.0\\SHADE_CSharp.xml\" \"%{outputdir}\"", - "xcopy /r /y /q \"%{outputdir}\\net5.0\\SHADE_CSharp.pdb\" \"%{outputdir}\"", - "rmdir /s /q \"%{outputdir}\\net5.0\"" + "xcopy /r /y /q \"%{outputdir}\\net5.0\\SHADE_CSharp.pdb\" \"%{outputdir}\"" } filter "configurations:Debug" From 16e357acb09ef581642e40b4c4d1f6be9542fa14 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 14 Nov 2022 21:18:36 +0800 Subject: [PATCH 792/793] Accounted for texture compilation Changed refresh, doesnt clear asset collection anymore Checks for preexisting sub assets and asset meta in collection --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 56 ++++++++++++++++--- .../src/Assets/SHAssetMetaHandler.cpp | 1 + SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 21 ++----- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index a7f4d8d9..b4ea7d35 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -161,21 +161,39 @@ namespace SHADE newPath += PREFAB_FOLDER; newPath += name; newPath += PREFAB_EXTENSION; - data = new SHPrefabAsset(); + { + auto prefab = new SHPrefabAsset(); + prefab->name = name; + + data = prefab; + } + break; case AssetType::SCENE: newPath += SCENE_FOLDER; newPath += name; newPath += SCENE_EXTENSION; - data = new SHSceneAsset(); + + { + auto scene = new SHSceneAsset(); + scene->name = name; + + data = scene; + } break; case AssetType::MATERIAL: newPath += MATERIAL_FOLDER; newPath += name; newPath += MATERIAL_EXTENSION; - data = new SHMaterialAsset(); + + { + auto material = new SHMaterialAsset(); + material->name = name; + + data = material; + } break; default: @@ -192,7 +210,7 @@ namespace SHADE false }; - assetCollection.insert({ + auto result = assetCollection.emplace( id, SHAsset( name, @@ -201,10 +219,13 @@ namespace SHADE newPath, false ) - }); + ); assetData.emplace(id, data); + SHAssetMetaHandler::WriteMetaData(asset); + SaveAsset(id); + return id; } @@ -361,6 +382,21 @@ namespace SHADE modelPath += MODEL_EXTENSION; newPath = modelPath; } + else if (ext == DDS_EXTENSION.data()) + { + auto pathGen = SHTextureCompiler::CompileTextureAsset(path); + if (!pathGen.has_value()) + { + SHLOG_ERROR("Texture Compilation Failed for: {}", path.string()); + return; + } + newPath = pathGen.value(); + } + else + { + SHLOG_WARNING("File Type compilation not yet Implemented: {}", path.string()); + return; + } if (genMeta) { @@ -376,7 +412,7 @@ namespace SHADE void SHAssetManager::RefreshDirectory() noexcept { SHFileSystem::DestroyDirectory(folderRoot); - assetCollection.clear(); + //assetCollection.clear(); BuildAssetCollection(); } @@ -507,7 +543,7 @@ namespace SHADE { SHAsset newAsset{ path.stem().string(), - GenerateAssetID(AssetType::SHADER_BUILT_IN), + GenerateAssetID(AssetType::TEXTURE), AssetType::SHADER_BUILT_IN, path, false @@ -614,6 +650,12 @@ namespace SHADE for (auto i{ 0 }; i < asset.subAssets.size(); ++i) { auto const id = asset.subAssets[i]->id; + + if (assetCollection.contains(id)) + { + continue; + } + assetCollection[id] = *asset.subAssets[i]; delete asset.subAssets[i]; asset.subAssets[i] = &assetCollection[id]; diff --git a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp index f3b24ed1..b5c78514 100644 --- a/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp +++ b/SHADE_Engine/src/Assets/SHAssetMetaHandler.cpp @@ -138,6 +138,7 @@ namespace SHADE metaFile.close(); meta.path = path.parent_path().string() + "/" + path.stem().string(); + meta.path.make_preferred(); return meta; } diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index fa5f718e..a28f70ca 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -152,7 +152,10 @@ namespace SHADE bool found{ false }; for (auto const& asset : assets) { - assetCollection.emplace(asset.id, asset); + if (!assetCollection.contains(asset.id)) + { + assetCollection.emplace(asset.id, asset); + } if (file.name == asset.name) { AssetPath path{ file.path }; @@ -170,22 +173,6 @@ namespace SHADE toGenerate.push_back(&file); } } - //for (auto const& asset : assets) - //{ - // assetCollection.emplace(asset.id, asset); - // for(auto& file : folder->files) - // { - // if (file.name == asset.name) - // { - // AssetPath path{ file.path }; - // if (SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()) == asset.type) - // { - // file.assetMeta = &assetCollection[asset.id]; - // break; - // } - // } - // } - //} for (auto i {0}; i < folder->files.size(); ++i) { From 5cb87402b2120ad7de73bb31d419304507018714 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 15 Nov 2022 01:22:22 +0800 Subject: [PATCH 793/793] Hide .shmeta files from C# script project --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 9d3ad3e8..05a144e3 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -272,6 +272,7 @@ namespace SHADE \n\ \n\ \n\ + \n\ \n\ \n\ \n";
    /// Checks if a specified point is near this Vector2 that represents a point with /// a tolerance value of PLS_EPSILON. @@ -156,7 +156,7 @@ namespace SHADE /// True if this Vector2 representing a point and the specified point are within /// the range of the specified tolerance. False otherwise. /// - bool IsNearPoint(Vector2 point, double tolerance); + bool IsNearPoint(Vector2 point, float tolerance); /*-----------------------------------------------------------------------------*/ /* IEquatable */ @@ -206,7 +206,7 @@ namespace SHADE /// /// True if the two Vector2s are within the tolerance value specified /// - static bool IsNear(Vector2 lhs, Vector2 rhs, double tolerance); + static bool IsNear(Vector2 lhs, Vector2 rhs, float tolerance); /// /// Computes and returns the dot product of 2 specified Vector2s. /// @@ -215,7 +215,7 @@ namespace SHADE /// /// Scalar value representing the dot product of the two Vector2s. /// - static double Dot(Vector2 lhs, Vector2 rhs); + static float Dot(Vector2 lhs, Vector2 rhs); /// /// Computes the inward perpendicular Vector2 to the specified Vector2. /// Equivalent to calling Perpendicular(lhs, true). This means, the @@ -260,7 +260,7 @@ namespace SHADE /// Angle to rotate the vector by in an anti-clockwise direction in radians. /// /// The Vector2 that represents the rotated vector. - static Vector2 RotateRadians(Vector2 vec, double radians); + static Vector2 RotateRadians(Vector2 vec, float radians); /// /// Rotates a Vector2 on the Z-axis by a specified angle in an anti-clockwise /// direction. @@ -270,7 +270,7 @@ namespace SHADE /// Angle to rotate the vector by in an anti-clockwise direction in degrees. /// /// The Vector2 that represents the rotated vector. - static Vector2 RotateDegrees(Vector2 vec, double degrees); + static Vector2 RotateDegrees(Vector2 vec, float degrees); /// /// Computes and returns a Vector2 that is made from the smallest components of /// the two specified Vector2s. @@ -298,25 +298,25 @@ namespace SHADE /// This is most commonly used to find a point some fraction of the way along a /// line between two endpoints. /// - /// The start Vector2, returned when t = 0.0. - /// The end Vector2, returned when t = 1.0. + /// The start Vector2, returned when t = 0.0f. + /// The end Vector2, returned when t = 1.0f. /// /// Value used to interpolate between a and b which is clamped to /// the range[0, 1]. /// /// The interpolated Vector2. - static Vector2 Lerp(Vector2 a, Vector2 b, double t); + static Vector2 Lerp(Vector2 a, Vector2 b, float t); /// /// Linearly interpolates between two specified points. /// This is most commonly used to find a point some fraction of the way along a /// line between two endpoints. /// Unlike Lerp(), t is not clamped to a range at all. /// - /// The start Vector2, returned when t = 0.0. - /// The end Vector2, returned when t = 1.0. + /// The start Vector2, returned when t = 0.0f. + /// The end Vector2, returned when t = 1.0f. /// Value used to interpolate between a and b. /// The interpolated Vector2. - static Vector2 LerpUnclamped(Vector2 a, Vector2 b, double t); + static Vector2 LerpUnclamped(Vector2 a, Vector2 b, float t); /// /// Moves a point current towards target. /// Similar to Lerp(), however, the function will ensure that the distance never @@ -327,7 +327,7 @@ namespace SHADE /// The target position to move to. /// Maximum distance moved per call. /// Vector representing the moved point. - static Vector2 MoveTowards(Vector2 current, Vector2 target, double maxDistanceDelta); + static Vector2 MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta); /*-----------------------------------------------------------------------------*/ /* Overloaded Operators */ @@ -361,7 +361,7 @@ namespace SHADE /// Vector2 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. - static Vector2 operator*(Vector2 lhs, double rhs); + static Vector2 operator*(Vector2 lhs, float rhs); /// /// Calculates the division of a Vector2 with a scalar value and returns /// the result. @@ -369,7 +369,7 @@ namespace SHADE /// Scalar to divide with. /// Vector2 to divide with. /// The result of the scalar division. - static Vector2 operator/(Vector2 lhs, double rhs); + static Vector2 operator/(Vector2 lhs, float rhs); /// /// Checks if two Vector2s are approximately equal. This is equivalent to /// calling Vector2.IsNear() with default tolerance values. diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index 26ff5a72..adbb4d3a 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -11,6 +11,7 @@ Copyright (C) 2021 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ + // Precompiled Headers #include "SHpch.h" // Primary Header @@ -26,13 +27,13 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ - Vector3::Vector3(double _x) - : Vector3 {_x, 0.0, 0.0} + Vector3::Vector3(float _x) + : Vector3 {_x, 0.0f, 0.0f} {} - Vector3::Vector3(double _x, double _y) - : Vector3 {_x, _y, 0.0} + Vector3::Vector3(float _x, float _y) + : Vector3 {_x, _y, 0.0f} {} - Vector3::Vector3(double _x, double _y, double _z) + Vector3::Vector3(float _x, float _y, float _z) : x { _x } , y { _y } , z { _z } @@ -54,22 +55,22 @@ namespace SHADE return *this / GetSqrMagnitude(); } - double Vector3::GetMagnitude() + float Vector3::GetMagnitude() { return sqrt(x * x + y * y + z * z); } - double Vector3::GetSqrMagnitude() + float Vector3::GetSqrMagnitude() { return x * x + y * y + z * z; } - double Vector3::Angle2DFromRightRadians() + float Vector3::Angle2DFromRightRadians() { return atan2(y, x); } - double Vector3::Angle2DFromRightDegrees() + float Vector3::Angle2DFromRightDegrees() { return Math::RadiansToDegrees(Angle2DFromRightRadians()); } @@ -79,7 +80,7 @@ namespace SHADE return IsNearPoint(point, Math::Epsilon); } - bool Vector3::IsNearPoint(Vector3 point, double tolerance) + bool Vector3::IsNearPoint(Vector3 point, float tolerance) { return (*this - point).GetSqrMagnitude() < (tolerance * tolerance); } @@ -121,7 +122,7 @@ namespace SHADE { return IsNear(lhs, rhs, Math::Epsilon); } - bool Vector3::IsNear(Vector3 lhs, Vector3 rhs, double tolerance) + bool Vector3::IsNear(Vector3 lhs, Vector3 rhs, float tolerance) { return (std::abs(lhs.x) - std::abs(rhs.x)) < tolerance && @@ -129,7 +130,7 @@ namespace SHADE && (std::abs(lhs.z) - std::abs(rhs.z)) < tolerance; } - double Vector3::Dot(Vector3 lhs, Vector3 rhs) + float Vector3::Dot(Vector3 lhs, Vector3 rhs) { return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; } @@ -145,12 +146,12 @@ namespace SHADE } Vector3 Vector3::Reflect(Vector3 vec, Vector3 normal) { - return vec - (Project(vec, normal.GetNormalised()) * 2.0); + return vec - (Project(vec, normal.GetNormalised()) * 2.0f); } - Vector3 Vector3::RotateRadians(Vector3 vec, double radians) + Vector3 Vector3::RotateRadians(Vector3 vec, float radians) { - const double SINE = sin(radians); - const double COSINE = cos(radians); + const float SINE = sin(radians); + const float COSINE = cos(radians); return Vector3 ( @@ -159,15 +160,15 @@ namespace SHADE vec.z ); } - Vector3 Vector3::RotateDegrees(Vector3 vec, double degrees) + Vector3 Vector3::RotateDegrees(Vector3 vec, float degrees) { return RotateRadians(vec, Math::DegreesToRadians(degrees)); } Vector3 Vector3::Min(Vector3 lhs, Vector3 rhs) { - double lx = lhs.x, rx = rhs.x; - double ly = lhs.y, ry = rhs.y; - double lz = lhs.z, rz = rhs.z; + float lx = lhs.x, rx = rhs.x; + float ly = lhs.y, ry = rhs.y; + float lz = lhs.z, rz = rhs.z; return Vector3(std::min(lx, rx), std::min(ly, ry), @@ -175,23 +176,23 @@ namespace SHADE } Vector3 Vector3::Max(Vector3 lhs, Vector3 rhs) { - double lx = lhs.x, rx = rhs.x; - double ly = lhs.y, ry = rhs.y; - double lz = lhs.z, rz = rhs.z; + float lx = lhs.x, rx = rhs.x; + float ly = lhs.y, ry = rhs.y; + float lz = lhs.z, rz = rhs.z; return Vector3(std::max(lx, rx), std::max(ly, ry), std::max(lz, rz)); } - Vector3 Vector3::Lerp(Vector3 a, Vector3 b, double t) + Vector3 Vector3::Lerp(Vector3 a, Vector3 b, float t) { - return LerpUnclamped(a, b, std::clamp(t, 0.0, 1.0)); + return LerpUnclamped(a, b, std::clamp(t, 0.0f, 1.0f)); } - Vector3 Vector3::LerpUnclamped(Vector3 a, Vector3 b, double t) + Vector3 Vector3::LerpUnclamped(Vector3 a, Vector3 b, float t) { return a + ((b - a) * t); } - Vector3 Vector3::MoveTowards(Vector3 current, Vector3 target, double maxDistanceDelta) + Vector3 Vector3::MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta) { // Ignore if it is exactly on the same point if (current == target) @@ -203,7 +204,7 @@ namespace SHADE // Check if check if is behind or ahead of target Vector3 DIFF = target - newPos; - if (Dot(DELTA, DIFF) < 0.0) + if (Dot(DELTA, DIFF) < 0.0f) { newPos = target; } @@ -236,7 +237,7 @@ namespace SHADE lhs.z * rhs.z ); } - Vector3 Vector3::operator*(Vector3 lhs, double rhs) + Vector3 Vector3::operator*(Vector3 lhs, float rhs) { return Vector3 ( @@ -245,7 +246,7 @@ namespace SHADE lhs.z * rhs ); } - Vector3 Vector3::operator/(Vector3 lhs, double rhs) + Vector3 Vector3::operator/(Vector3 lhs, float rhs) { return Vector3 ( diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index 8b66439c..70cff88f 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -22,8 +22,8 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// CLR version of the the PlushieEngine's Vector3 class that represents a - /// 3-Dimensional Vector. Designed to closely match Unity's Vector3 struct. + /// CLR version of SHADE Engine's Vector3 class that represents a 3-Dimensional Vector. + /// Designed to closely match Unity's Vector3 struct. /// [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)] public value struct Vector3 : public System::IEquatable @@ -36,49 +36,49 @@ namespace SHADE /// /// Shorthand for writing Vector3(0, 0, -1). /// - static initonly Vector3 Back = Vector3(0.0, 0.0, -1.0); + static initonly Vector3 Back = Vector3(0.0f, 0.0f, -1.0f); /// /// Shorthand for writing Vector3(0, -1, 0). /// - static initonly Vector3 Down = Vector3(0.0, -1.0, 0.0); + static initonly Vector3 Down = Vector3(0.0f, -1.0f, 0.0f); /// /// Shorthand for writing Vector3(0, 0, 1). /// - static initonly Vector3 Forward = Vector3(0.0, 0.0, 1.0); + static initonly Vector3 Forward = Vector3(0.0f, 0.0f, 1.0f); /// /// Shorthand for writing Vector3(-1, 0, 0). /// - static initonly Vector3 Left = Vector3(-1.0, 0.0, 0.0); + static initonly Vector3 Left = Vector3(-1.0f, 0.0f, 0.0f); /// - /// Shorthand for writing Vector3(double.NegativeInfinity, - /// double.NegativeInfinity, double.NegativeInfinity). + /// Shorthand for writing Vector3(float.NegativeInfinity, + /// float.NegativeInfinity, float.NegativeInfinity). /// - static initonly Vector3 NegativeInfinity = Vector3(std::numeric_limits::lowest(), - std::numeric_limits::lowest(), - std::numeric_limits::lowest()); + static initonly Vector3 NegativeInfinity = Vector3(std::numeric_limits::lowest(), + std::numeric_limits::lowest(), + std::numeric_limits::lowest()); /// /// Shorthand for writing Vector3(1, 1, 1). /// - static initonly Vector3 One = Vector3(1.0, 1.0, 1.0); + static initonly Vector3 One = Vector3(1.0f, 1.0f, 1.0f); /// - /// Shorthand for writing Vector3(double.PositiveInfinity, - /// double.PositiveInfinity, double.PositiveInfinity). + /// Shorthand for writing Vector3(float.PositiveInfinity, + /// float.PositiveInfinity, float.PositiveInfinity). /// - static initonly Vector3 PositiveInfinity = Vector3(std::numeric_limits::max(), - std::numeric_limits::max(), - std::numeric_limits::max()); + static initonly Vector3 PositiveInfinity = Vector3(std::numeric_limits::max(), + std::numeric_limits::max(), + std::numeric_limits::max()); /// /// Shorthand for writing Vector3(1, 0, 0). /// - static initonly Vector3 Right = Vector3(1.0, 0.0, 0.0); + static initonly Vector3 Right = Vector3(1.0f, 0.0f, 0.0f); /// /// Shorthand for writing Vector3(0, 1, 0). /// - static initonly Vector3 Up = Vector3(0.0, 1.0, 0.0); + static initonly Vector3 Up = Vector3(0.0f, 1.0f, 0.0f); /// /// Shorthand for writing Vector3(0, 0, 0). /// - static initonly Vector3 Zero = Vector3(0.0, 0.0, 0.0); + static initonly Vector3 Zero = Vector3(0.0f, 0.0f, 0.0f); #pragma endregion /*-----------------------------------------------------------------------------*/ @@ -87,39 +87,39 @@ namespace SHADE /// /// X-component of the Vector3. /// - double x; + float x; /// /// Y-component of the Vector3. /// - double y; + float y; /// /// Z-component of the Vector3. /// - double z; + float z; /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ /// /// Constructor to construct a Vector3 with the specified components with the - /// Y and Z-component set to 0.0. + /// Y and Z-component set to 0.0f. /// /// X-coordinate to set. - Vector3(double _x); + Vector3(float _x); /// /// Constructor to construct a Vector3 with the specified components with the - /// Z-component set to 0.0. + /// Z-component set to 0.0f. /// /// X-coordinate to set. /// Y-coordinate to set. - Vector3(double _x, double _y); + Vector3(float _x, float _y); /// /// Constructor to construct a Vector3 with the specified components. /// /// X-coordinate to set. /// Y-coordinate to set. /// Z-coordinate to set. - Vector3(double _x, double _y, double _z); + Vector3(float _x, float _y, float _z); /// /// Conversion constructor to construct a Vector3 using a Vector2. /// @@ -149,24 +149,24 @@ namespace SHADE /// need the precise magnitude, consider using GetSqrMagnitude() instead. /// /// Returns the length of this Vector3. - double GetMagnitude(); + float GetMagnitude(); /// /// Calculates and returns the squared magnitude of this Vector3. /// /// Returns the squared length of this Vector3. - double GetSqrMagnitude(); + float GetSqrMagnitude(); /// /// Calculates and returns the angle of this vector from the right vector. This /// function returns values between -Math.PI and Math.PI. /// /// Returns the angle of this vector from the right vector in radians. - double Angle2DFromRightRadians(); + float Angle2DFromRightRadians(); /// /// Calculates and returns the angle of this vector from the right vector. This - /// function returns values between -180.0 and 180.0. + /// function returns values between -180.0f and 180.0f. /// /// Returns the angle of this vector from the right vector in degrees. - double Angle2DFromRightDegrees(); + float Angle2DFromRightDegrees(); /// /// Checks if a specified point is near this Vector3 that represents a point with /// a tolerance value of PLS_EPSILON. @@ -188,7 +188,7 @@ namespace SHADE /// True if this Vector3 representing a point and the specified point are within /// the range of the specified tolerance. False otherwise. /// - bool IsNearPoint(Vector3 point, double tolerance); + bool IsNearPoint(Vector3 point, float tolerance); /*-----------------------------------------------------------------------------*/ /* IEquatable */ @@ -208,12 +208,12 @@ namespace SHADE /// /// The unboxed object to compare with. /// True if both objects are the same. - bool Equals(Object^ o) override; + bool Equals(Object^ o) override; /// /// Gets a unique hash for this object. /// /// Unique hash for this object. - int GetHashCode() override; + int GetHashCode() override; /*-----------------------------------------------------------------------------*/ /* Static Functions */ @@ -236,14 +236,14 @@ namespace SHADE /// /// True if the two Vector3s are within the tolerance value specified /// - static bool IsNear(Vector3 lhs, Vector3 rhs, double tolerance); + static bool IsNear(Vector3 lhs, Vector3 rhs, float tolerance); /// /// Computes and returns the dot product of 2 specified Vector3s. /// /// Vector3 to calculate dot product with. /// Another Vector3 to calculate dot product with. /// Scalar value representing the dot product of the two Vector3s. - static double Dot(Vector3 lhs, Vector3 rhs); + static float Dot(Vector3 lhs, Vector3 rhs); /// /// Computes and returns the cross product of 2 specified Vector3s. /// @@ -274,7 +274,7 @@ namespace SHADE /// Angle to rotate the vector by in an anti-clockwise direction in radians. /// /// The Vector3 that represents the rotated vector. - static Vector3 RotateRadians(Vector3 vec, double radians); + static Vector3 RotateRadians(Vector3 vec, float radians); /// /// Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise /// direction. @@ -284,7 +284,7 @@ namespace SHADE /// Angle to rotate the vector by in an anti-clockwise direction in degrees. /// /// The Vector3 that represents the rotated vector. - static Vector3 RotateDegrees(Vector3 vec, double degrees); + static Vector3 RotateDegrees(Vector3 vec, float degrees); /// /// Computes and returns a Vector3 that is made from the smallest components of /// the two specified Vector3s. @@ -312,25 +312,25 @@ namespace SHADE /// This is most commonly used to find a point some fraction of the way along a /// line between two endpoints. /// - /// The start Vector3, returned when t = 0.0. - /// The end Vector3, returned when t = 1.0. + /// The start Vector3, returned when t = 0.0f. + /// The end Vector3, returned when t = 1.0f. /// /// Value used to interpolate between a and b which is clamped to /// the range[0, 1]. /// /// The interpolated Vector3. - static Vector3 Lerp(Vector3 a, Vector3 b, double t); + static Vector3 Lerp(Vector3 a, Vector3 b, float t); /// /// Linearly interpolates between two specified points. /// This is most commonly used to find a point some fraction of the way along a /// line between two endpoints. /// Unlike Lerp(), t is not clamped to a range at all. /// - /// The start Vector3, returned when t = 0.0. - /// The end Vector3, returned when t = 1.0. + /// The start Vector3, returned when t = 0.0f. + /// The end Vector3, returned when t = 1.0f. /// Value used to interpolate between a and b. /// The interpolated Vector3. - static Vector3 LerpUnclamped(Vector3 a, Vector3 b, double t); + static Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t); /// /// Moves a point current towards target. /// Similar to Lerp(), however, the function will ensure that the distance never @@ -341,7 +341,7 @@ namespace SHADE /// The target position to move to. /// Maximum distance moved per call. /// Vector representing the moved point. - static Vector3 MoveTowards(Vector3 current, Vector3 target, double maxDistanceDelta); + static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta); /*-----------------------------------------------------------------------------*/ /* Overloaded Operators */ @@ -375,7 +375,7 @@ namespace SHADE /// Vector3 to multiply with. /// Scalar to multiply with. /// The result of the scalar multiplication. - static Vector3 operator*(Vector3 lhs, double rhs); + static Vector3 operator*(Vector3 lhs, float rhs); /// /// Calculates the division of a Vector3 with a scalar value and returns /// the result. @@ -383,7 +383,7 @@ namespace SHADE /// Scalar to divide with. /// Vector3 to divide with. /// The result of the scalar division. - static Vector3 operator/(Vector3 lhs, double rhs); + static Vector3 operator/(Vector3 lhs, float rhs); /// /// Checks if two Vector3s are approximately equal. This is equivalent to /// calling Vector3.IsNear() with default tolerance values. diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 661eb3e4..4646194b 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -35,10 +35,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ SHVec3 Convert::ToNative(Vector3 vec) { - const double X = vec.x; - const double Y = vec.y; - const double Z = vec.z; - return SHVec3(X, Y, Z); + return SHVec3(vec.x, vec.y, vec.z); } Vector3 Convert::ToCLI(const SHVec3& vec) { @@ -46,9 +43,7 @@ namespace SHADE } SHVec2 Convert::ToNative(Vector2 vec) { - const double X = vec.x; - const double Y = vec.y; - return SHVec2(X, Y); + return SHVec2(vec.x, vec.y); } Vector2 Convert::ToCLI(const SHVec2& vec) @@ -56,6 +51,16 @@ namespace SHADE return Vector2(vec.x, vec.y); } + SHQuaternion Convert::ToNative(Quaternion quat) + { + return SHQuaternion{ quat.x, quat.y, quat.z, quat.w }; + } + + Quaternion Convert::ToCLI(const SHQuaternion& quat) + { + return Quaternion{ quat.x, quat.y, quat.z, quat.w }; + } + /*---------------------------------------------------------------------------------*/ /* String Conversions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index f04cbf4b..d694ca6a 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -18,10 +18,12 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/Entity/SHEntity.h" #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" +#include "Math/SHQuaternion.h" // Project Includes #include "Engine/Entity.hxx" #include "Math/Vector2.hxx" #include "Math/Vector3.hxx" +#include "Math/Quaternion.hxx" namespace SHADE { @@ -74,6 +76,18 @@ namespace SHADE /// The native Vector2 to convert from. /// Managed copy of a native Vector2. static Vector2 ToCLI(const SHVec2& vec); + /// + /// Converts from a managed Quaternion to a native Quaternion. + /// + /// The managed Quaternion to convert from. + /// Native copy of a managed Quaternion. + static SHQuaternion ToNative(Quaternion quat); + /// + /// Converts from a native Quaternion to a managed Quaternion. + /// + /// The native Quaternion to convert from. + /// Managed copy of a native Quaternion. + static Quaternion ToCLI(const SHQuaternion& quat); /*-----------------------------------------------------------------------------*/ /* String Conversions */ From 254fc4e641552e8127b4f97f0ea8c701318eaa9b Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 24 Oct 2022 03:54:28 +0800 Subject: [PATCH 434/793] SP3-284 Restructured Shader source loader into asset manager to follow design pattern for loaders and asset data --- .../src/Assets/Asset Types/SHShaderAsset.h | 43 ++++++ .../src/Assets/Libraries/SHAssetLoader.h | 1 + .../src/Assets/Libraries/SHMeshCompiler.cpp | 3 +- .../src/Assets/Libraries/SHMeshCompiler.h | 5 +- .../src/Assets/Libraries/SHMeshLoader.h | 2 +- .../Libraries/SHShaderSourceCompiler.cpp | 142 ++++++++++++++++++ .../Assets/Libraries/SHShaderSourceCompiler.h | 28 ++++ .../Assets/Libraries/SHShaderSourceLoader.cpp | 41 +++++ .../Assets/Libraries/SHShaderSourceLoader.h | 22 +++ SHADE_Engine/src/Assets/SHAssetManager.cpp | 2 +- .../Graphics/MiddleEnd/Shaders/SHShaderType.h | 5 +- 11 files changed, 285 insertions(+), 9 deletions(-) create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h create mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h create mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp create mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h new file mode 100644 index 00000000..2fdf0cb6 --- /dev/null +++ b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h @@ -0,0 +1,43 @@ +/*************************************************************************//** + * \file SHShaderAsset.h + * \author Brandon Mak + * \date 24 October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include "SHAssetData.h" +#include "SH_API.h" +#include +#include "Graphics/MiddleEnd/Shaders/SHShaderType.h" + +namespace SHADE +{ + struct SH_API SHShaderAsset : SHAssetData + { + /*-----------------------------------------------------------------------*/ + /* MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + //! container storing the spirv binary + std::vector spirvBinary; + + //! For the compilation of the shader. Vulkan backend will use it too + SH_SHADER_TYPE shaderType; + + //! Name of the shader file (without parent path) + std::string name; + + //! id of the shader + uint32_t id; + + SHShaderAsset(void) noexcept; + SHShaderAsset(SHShaderAsset const& rhs) noexcept; + SHShaderAsset(SHShaderAsset&& rhs) noexcept; + SHShaderAsset& operator= (SHShaderAsset&& rhs) noexcept; + SHShaderAsset& operator= (SHShaderAsset const& rhs) noexcept; + }; +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h b/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h index 41595519..63e081af 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h @@ -10,6 +10,7 @@ *****************************************************************************/ #pragma once +#include "Assets/SHAssetMacros.h" #include "Assets/Asset Types/SHAssetData.h" namespace SHADE diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp index 2346714e..335eb631 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp @@ -18,8 +18,7 @@ std::string SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept { - std::string newPath{ path.string() }; - newPath = newPath.substr(0, newPath.find_last_of('/') + 1); + std::string newPath{ path.parent_path().string() + '/'}; newPath += asset.header.name + MESH_EXTENSION.data(); std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h index a8ce67be..441c2297 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h @@ -12,14 +12,13 @@ *****************************************************************************/ #pragma once -#include "../Asset Types/SHMeshAsset.h" -#include "../SHAssetMacros.h" +#include "Assets/Asset Types/SHMeshAsset.h" +#include "Assets/SHAssetMacros.h" namespace SHADE { class SHMeshCompiler { - private: public: static std::string CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; }; diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h index 34c4e5d2..706d65d6 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h @@ -16,7 +16,7 @@ namespace SHADE { - struct SHMeshLoader : public SHAssetLoader + struct SHMeshLoader : SHAssetLoader { void LoadSHMesh(AssetPath path, SHMeshAsset& meshes) noexcept; SHAssetData* Load(AssetPath path) override; diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp new file mode 100644 index 00000000..c9674b2e --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp @@ -0,0 +1,142 @@ +/*************************************************************************//** + * \file SHShaderSourceCompiler.cpp + * \author Loh Xiao Qi + * \date 23 10 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#include "SHpch.h" +#include "SHShaderSourceCompiler.h" +#include "shaderc/shaderc.hpp" + +#include +#include +#include +#include + +namespace SHADE +{ + std::string SHShaderSourceCompiler::CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept + { + std::string newPath{ path.string() + SHADER_SPRV_EXTENSION.data() }; + + std::ofstream file{ newPath, std::ios::binary | std::ios::out | std::ios::trunc }; + + file.write( + reinterpret_cast(& data.shaderType), sizeof(uint8_t) + ); + + size_t const byteCount = sizeof(uint32_t) * data.spirvBinary.size(); + + file.write( + reinterpret_cast(&byteCount), sizeof(size_t) + ); + + file.write( + reinterpret_cast(data.spirvBinary.data()), byteCount + ); + + file.close(); + + return newPath; + } + + SHShaderAsset const* SHShaderSourceCompiler::CompileShaderSourceToMemory(std::string const& data, std::string const& name, SH_SHADER_TYPE type) noexcept + { + // shaderc compiler + shaderc::Compiler compiler; + shaderc::CompileOptions options; + + options.AddMacroDefinition("MY_DEFINE", "1"); + + //TODO: Check if we need optimisation levels when compiling into spirv + // Set optimization levels + //if (opLevel != shaderc_optimization_level_zero) + // options.SetOptimizationLevel(opLevel); + + // Attempt to get the shaderc equivalent shader stage + shaderc_shader_kind shaderKind; + switch (type) + { + case SH_SHADER_TYPE::VERTEX: + shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; + break; + case SH_SHADER_TYPE::FRAGMENT: + shaderKind = shaderc_shader_kind::shaderc_glsl_fragment_shader; + break; + case SH_SHADER_TYPE::COMPUTE: + shaderKind = shaderc_shader_kind::shaderc_glsl_compute_shader; + break; + default: + shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; + break; + } + + // Compile the shader and get the result + shaderc::SpvCompilationResult compileResult = compiler.CompileGlslToSpv(data, shaderKind, name.c_str(), options); + + if (compileResult.GetCompilationStatus() != shaderc_compilation_status_success) + { + SHLOG_ERROR("Shaderc failed to compile GLSL shader to binary | " + compileResult.GetErrorMessage()); + return nullptr; + } + + auto result = new SHShaderAsset(); + result->spirvBinary.reserve(compileResult.end() - compileResult.begin()); + + std::ranges::copy(compileResult.begin(), compileResult.end(), result->spirvBinary.data()); + + return result; + } + + SH_SHADER_TYPE SHShaderSourceCompiler::GetShaderTypeFromFilename(std::string name) noexcept + { + for (auto i { 0}; i < SHADER_TYPE_MAX_COUNT; ++i) + { + if (name.find(SHADER_IDENTIFIERS[i].data()) != std::string::npos) + { + return static_cast(i); + } + } + + return SH_SHADER_TYPE::INAVLID_TYPE; + } + + std::optional SHShaderSourceCompiler::LoadAndCompileShader(AssetPath path) noexcept + { + auto type = GetShaderTypeFromFilename(path.filename().string()); + + if (type == SH_SHADER_TYPE::INAVLID_TYPE) + { + SHLOG_ERROR("Invalid filename for shaders, follow suffix in SHAssetMacros.h: {}", path.string()); + return {}; + } + + std::ifstream file{ path.string(), std::ios::in }; + + if (file.is_open()) + { + std::stringstream stream; + + stream << file.rdbuf(); + + std::string const content = stream.str(); + + auto data = CompileShaderSourceToMemory(content, path.filename().string(), type); + + if (data == nullptr) + { + return{}; + } + + return CompileShaderSourceToBinary(path, *data); + } + + SHLOG_ERROR("Unable to open shader file: {}", path.string()); + + return {}; + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h new file mode 100644 index 00000000..b2b8bca3 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h @@ -0,0 +1,28 @@ +/*************************************************************************//** + * \file SHShaderSourceCompiler.h + * \author Loh Xiao Qi + * \date 23 10 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include "Assets/SHAssetMacros.h" +#include "Assets/Asset Types/SHShaderAsset.h" + +namespace SHADE +{ + class SHShaderSourceCompiler + { + static std::string CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept; + static SHShaderAsset const* CompileShaderSourceToMemory(std::string const& data, std::string const& name, SH_SHADER_TYPE type) noexcept; + + static SH_SHADER_TYPE GetShaderTypeFromFilename(std::string name) noexcept; + + public: + static std::optional LoadAndCompileShader(AssetPath path) noexcept; + }; +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp new file mode 100644 index 00000000..bfb6b34a --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp @@ -0,0 +1,41 @@ +/*************************************************************************//** + * \file SHShaderSourceLoader.cpp + * \author Loh Xiao Qi + * \date 23 10 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ + +#include "SHpch.h" +#include "SHShaderSourceLoader.h" +#include "Assets/Asset Types/SHShaderAsset.h" + +#include + +namespace SHADE +{ + SHAssetData* SHShaderSourceLoader::Load(AssetPath path) + { + SHShaderAsset* result = new SHShaderAsset(); + + std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; + if (!file.is_open()) + { + SHLOG_ERROR("Unable to open compiled shader file: {}", path.string()); + return nullptr; + } + + size_t byteCount = 0; + + file.read(reinterpret_cast(&result->shaderType), sizeof(uint8_t)); + file.read(reinterpret_cast(&byteCount), sizeof(size_t)); + file.read(reinterpret_cast(result->spirvBinary.data()), byteCount); + + file.close(); + + return result; + } +} diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h new file mode 100644 index 00000000..262a767a --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h @@ -0,0 +1,22 @@ +/*************************************************************************//** + * \file SHShaderSourceLoader.h + * \author Loh Xiao Qi + * \date 23 10 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#pragma once + +#include "Assets/Libraries/SHAssetLoader.h" +#include "Assets/SHAssetMacros.h" + +namespace SHADE +{ + struct SHShaderSourceLoader : SHAssetLoader + { + SHAssetData* Load(AssetPath path) override; + }; +} diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 3032ba51..b7d7268f 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -234,7 +234,7 @@ namespace SHADE void SHAssetManager::InitLoaders() noexcept { loaders[static_cast(AssetType::AUDIO)] = nullptr; - loaders[static_cast(AssetType::SHADER)] = nullptr; + loaders[static_cast(AssetType::SHADER)] = dynamic_cast(new SHShaderSourceLoader()); loaders[static_cast(AssetType::MATERIAL)] = nullptr; loaders[static_cast(AssetType::IMAGE)] = dynamic_cast(new SHTextureLoader()); loaders[static_cast(AssetType::TEXTURE)] = nullptr; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h index bf4828b5..77f79f09 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h @@ -3,11 +3,12 @@ namespace SHADE { - enum class SH_SHADER_TYPE + enum class SH_SHADER_TYPE : uint8_t { VERTEX, FRAGMENT, - COMPUTE + COMPUTE, + INAVLID_TYPE }; } From 8a0106564166e49cfd5d34edb3a80bb074b718c6 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 24 Oct 2022 04:17:51 +0800 Subject: [PATCH 435/793] Moved original shader source library Added functions to asset manager to get all by type --- .../Libraries}/SHShaderSourceLibrary.cpp | 96 +++++-------------- .../Assets/Libraries/SHShaderSourceLibrary.h | 25 +++++ SHADE_Engine/src/Assets/SHAssetMacros.h | 18 +++- SHADE_Engine/src/Assets/SHAssetManager.cpp | 28 ++++++ SHADE_Engine/src/Assets/SHAssetManager.h | 3 + .../MiddleEnd/Interface/SHGraphicsSystem.h | 5 +- .../MiddleEnd/Shaders/SHShaderSourceLibrary.h | 70 -------------- 7 files changed, 98 insertions(+), 147 deletions(-) rename SHADE_Engine/src/{Graphics/MiddleEnd/Shaders => Assets/Libraries}/SHShaderSourceLibrary.cpp (74%) create mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h delete mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp similarity index 74% rename from SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp rename to SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp index d9bf9ddc..8a5769d0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.cpp +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp @@ -6,27 +6,6 @@ namespace SHADE { - /***************************************************************************/ - /*! - - \brief - Initializes the directory to take assets from. TODO: Only temporary until - the resource manager is implemented. - - \param directory - - \return - - */ - /***************************************************************************/ - void SHShaderSourceLibrary::Init (std::string directory) noexcept - { - shaderDirectory = directory; - if (shaderDirectory.back() != '/') - { - shaderDirectory += '/'; - } - } /***************************************************************************/ /*! @@ -147,15 +126,6 @@ namespace SHADE /***************************************************************************/ bool SHShaderSourceLibrary::LoadShader (uint32_t id, std::string glslFile, SH_SHADER_TYPE type, bool checkSpirvOutdated/* = true*/, bool recompileAnyway /*= false*/) noexcept { - //if (sourceLibrary.contains(id)) - //{ - // SHLOG_ERROR("Shader with ID passed in already exists. Use a different ID"); - // return false; - //} - - std::string fullGLSLPath = shaderDirectory + glslFile; - auto path = std::filesystem::path(fullGLSLPath); - if (path.extension() != ".glsl") { SHLOG_ERROR("Shader is not GLSL file, failed to load shader. "); @@ -164,16 +134,16 @@ namespace SHADE std::string spirvFilepath = path.replace_extension("spv").string(); - SHShaderData newShaderData{}; + SHShaderAsset newShaderData{}; newShaderData.shaderType = type; // spirv file std::ifstream spirvFile(spirvFilepath, std::ios::ate | std::ios::binary); // If we disable spirv validation, file is not checked - if (!recompileAnyway && - spirvFile.is_open() && - (checkSpirvOutdated ? (std::filesystem::last_write_time(spirvFilepath) > std::filesystem::last_write_time(fullGLSLPath)) : true)) + if (!recompileAnyway && + spirvFile.is_open() && + (checkSpirvOutdated ? (std::filesystem::last_write_time(spirvFilepath) > std::filesystem::last_write_time(fullGLSLPath)) : true)) { // Get file size of binary uint32_t fileSize = static_cast(spirvFile.tellg()); @@ -210,58 +180,42 @@ namespace SHADE newShaderData.name = glslFile; newShaderData.id = id; - - sourceLibrary.emplace_back(std::move (newShaderData)); + + sourceLibrary.emplace_back(std::move(newShaderData)); return true; } /***************************************************************************/ /*! - - \brief - Gets the entire source library. - - \return - The container of binary data. - - */ - /***************************************************************************/ - std::vector const& SHShaderSourceLibrary::GetSourceLibrary(void) const noexcept - { - return sourceLibrary; - } - /***************************************************************************/ - /*! - \brief - Move ctor for shader data. - + Move ctor for shader data. + \param rhs The other shader data - + */ /***************************************************************************/ - SHShaderData::SHShaderData(SHShaderData&& rhs) noexcept - : spirvBinary{ std::move (rhs.spirvBinary)} - , shaderType{std::move (rhs.shaderType)} - , name{ std::move (rhs.name)} - , id {std::move (rhs.id)} + SHShaderAsset::SHShaderAsset(SHShaderAsset&& rhs) noexcept + : spirvBinary{ std::move(rhs.spirvBinary) } + , shaderType{ std::move(rhs.shaderType) } + , name{ std::move(rhs.name) } + , id{ std::move(rhs.id) } { } /***************************************************************************/ /*! - + \brief Default ctor for shader data. Does nothing. - + */ /***************************************************************************/ - SHShaderData::SHShaderData(void) noexcept + SHShaderAsset::SHShaderAsset(void) noexcept : spirvBinary{} - , shaderType{SH_SHADER_TYPE::VERTEX} + , shaderType{ SH_SHADER_TYPE::VERTEX } , name{ } , id{ } @@ -269,16 +223,16 @@ namespace SHADE } - SHShaderData::SHShaderData(SHShaderData const& rhs) noexcept - : spirvBinary{rhs.spirvBinary} - , shaderType{ rhs.shaderType} - , name{rhs.name } - , id{rhs.id } + SHShaderAsset::SHShaderAsset(SHShaderAsset const& rhs) noexcept + : spirvBinary{ rhs.spirvBinary } + , shaderType{ rhs.shaderType } + , name{ rhs.name } + , id{ rhs.id } { } - SHShaderData& SHShaderData::operator=(SHShaderData const& rhs) noexcept + SHShaderAsset& SHShaderAsset::operator=(SHShaderAsset const& rhs) noexcept { if (this == &rhs) return *this; @@ -292,7 +246,7 @@ namespace SHADE return *this; } - SHShaderData& SHShaderData::operator=(SHShaderData&& rhs) noexcept + SHShaderAsset& SHShaderAsset::operator=(SHShaderAsset&& rhs) noexcept { if (this == &rhs) return *this; diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h new file mode 100644 index 00000000..cb4a3453 --- /dev/null +++ b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h @@ -0,0 +1,25 @@ +#ifndef SH_SHADER_SOURCE_LIBRARY_H +#define SH_SHADER_SOURCE_LIBRARY_H + +#include "Graphics/MiddleEnd/Shaders/SHShaderType.h" +#include "shaderc/shaderc.hpp" + +namespace SHADE +{ + class SHShaderSourceLibrary + { + private: + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + std::vector CompileToBinary(std::string const& glslSource, char const* const spirvFilename, SH_SHADER_TYPE type, shaderc_optimization_level opLevel = shaderc_optimization_level_zero); + + // TODO: Delete after file IO is implemented + std::string GetStringFromFile(char const* filePath) noexcept; + + public: + bool LoadShader (uint32_t id, std::string glslFile, SH_SHADER_TYPE type, bool checkSpirvOutdated = true, bool recompileAnyway = false) noexcept; + }; +} + +#endif diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 0fdfa04e..cb8e1331 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -56,6 +56,7 @@ enum class AssetType : AssetTypeMeta DDS, MAX_COUNT }; +constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; //Directory #ifdef _PUBLISH @@ -70,7 +71,8 @@ constexpr std::string_view META_EXTENSION {".shmeta"}; constexpr std::string_view IMAGE_EXTENSION {".png"}; constexpr std::string_view AUDIO_EXTENSION {".ogg"}; constexpr std::string_view AUDIO_WAV_EXTENSION {".wav"}; -constexpr std::string_view SHADER_EXTENSION {".glsl"}; +constexpr std::string_view SHADER_EXTENSION{ ".glsl" }; +constexpr std::string_view SHADER_SPRV_EXTENSION {".sprv"}; constexpr std::string_view SCRIPT_EXTENSION {".cs"}; constexpr std::string_view SCENE_EXTENSION {".SHADE"}; constexpr std::string_view PREFAB_EXTENSION {".SHPrefab"}; @@ -84,6 +86,7 @@ constexpr std::string_view MESH_EXTENSION {".shmesh"}; constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, + SHADER_SPRV_EXTENSION, MATERIAL_EXTENSION, IMAGE_EXTENSION, TEXTURE_EXTENSION, @@ -97,7 +100,18 @@ constexpr std::string_view EXTENSIONS[] = { GLTF_EXTENSION }; -constexpr size_t TYPE_COUNT {static_cast(AssetType::MAX_COUNT) }; +// SHADER IDENTIFIERS +constexpr std::string_view VERTEX_SHADER{ "_VS" }; +constexpr std::string_view FRAGMENT_SHADER{ "_FS" }; +constexpr std::string_view COMPUTER_SHADER{ "_CS" }; + +constexpr std::string_view SHADER_IDENTIFIERS[] = { + VERTEX_SHADER, + FRAGMENT_SHADER, + COMPUTER_SHADER +}; + +constexpr size_t SHADER_TYPE_MAX_COUNT{ 3 }; // Error flags constexpr std::string_view FILE_NOT_FOUND_ERR {"FILE NOT FOUND"}; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index b7d7268f..9198666c 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -17,6 +17,7 @@ #include "Libraries/SHAssimpLibrary.h" #include "Libraries/SHMeshLoader.h" #include "Libraries/SHTextureLoader.h" +#include "Libraries/SHShaderSourceLoader.h" #include "Libraries/SHMeshCompiler.h" #include "Libraries/SHTextureCompiler.h" @@ -206,6 +207,33 @@ namespace SHADE } + std::vector SHAssetManager::GetAllDataOfType(AssetType type) noexcept + { + auto const toRetrieve = GetAllRecordOfType(type); + std::vector result; + result.reserve(toRetrieve.size()); + for (auto const& get : toRetrieve) + { + result.push_back(LoadData(get)); + } + + return result; + } + + std::vector SHAssetManager::GetAllRecordOfType(AssetType type) noexcept + { + std::vector result; + for (auto const& asset : assetCollection) + { + if (asset.type == type) + { + result.push_back(asset); + } + } + + return result; + } + bool SHAssetManager::IsRecognised(char const* ext) noexcept { for (auto const& e : EXTENSIONS) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 9ee7ab92..fedebfba 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -77,6 +77,9 @@ namespace SHADE template static std::enable_if_t, T const* const> GetData(AssetID id) noexcept; + + static std::vector GetAllDataOfType(AssetType type) noexcept; + static std::vector GetAllRecordOfType(AssetType type) noexcept; private: /**************************************************************************** * \brief Load resource data into memory diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 870325ac..35bf2c5b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -25,7 +25,6 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Graphics/Descriptors/SHVkDescriptorPool.h" #include "Graphics/RenderGraph/SHRenderGraph.h" -#include "Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h" #include "Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h" #include "SHMeshLibrary.h" #include "Graphics/MiddleEnd/Materials/SHMaterialInstanceCache.h" @@ -338,9 +337,7 @@ namespace SHADE // Temp Cameras Handle worldCamera; Handle screenCamera; - - // TODO: Temporary only until resource library from Xiao Qi is implemented - SHShaderSourceLibrary shaderSourceLibrary; + SHShaderModuleLibrary shaderModuleLibrary; // Temp Materials diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h deleted file mode 100644 index bb346111..00000000 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderSourceLibrary.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef SH_SHADER_SOURCE_LIBRARY_H -#define SH_SHADER_SOURCE_LIBRARY_H - -#include -#include "SHShaderType.h" -#include "shaderc/shaderc.hpp" - -namespace SHADE -{ - struct SHShaderData - { - /*-----------------------------------------------------------------------*/ - /* MEMBER VARIABLES */ - /*-----------------------------------------------------------------------*/ - //! container storing the spirv binary - std::vector spirvBinary; - - //! For the compilation of the shader. Vulkan backend will use it too - SH_SHADER_TYPE shaderType; - - //! Name of the shader file (without parent path) - std::string name; - - //! id of the shader - uint32_t id; - - SHShaderData(void) noexcept; - SHShaderData(SHShaderData const& rhs) noexcept; - SHShaderData(SHShaderData&& rhs) noexcept; - SHShaderData& operator= (SHShaderData&& rhs) noexcept; - SHShaderData& operator= (SHShaderData const& rhs) noexcept; - }; - - // TODO: This class is purely temporary and will be converted/changed when XQ implements his resource manager - class SHShaderSourceLibrary - { - private: - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER VARIABLES */ - /*-----------------------------------------------------------------------*/ - //! Stores all the source data. Take note that the source here is GLSL source and NOT binary data. - //! Binary data gets passed to the backend to convert to spirv. - std::vector sourceLibrary; - - //! The directory where the shaders are located. - std::string shaderDirectory; - - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - std::vector CompileToBinary(std::string const& glslSource, char const* const spirvFilename, SH_SHADER_TYPE type, shaderc_optimization_level opLevel = shaderc_optimization_level_zero); - - // TODO: Delete after file IO is implemented - std::string GetStringFromFile(char const* filePath) noexcept; - - public: - /*-----------------------------------------------------------------------*/ - /* PUBLIC MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - void Init (std::string directory) noexcept; - bool LoadShader (uint32_t id, std::string glslFile, SH_SHADER_TYPE type, bool checkSpirvOutdated = true, bool recompileAnyway = false) noexcept; - - /*-----------------------------------------------------------------------*/ - /* SETTERS AND GETTERS */ - /*-----------------------------------------------------------------------*/ - std::vector const& GetSourceLibrary(void) const noexcept; - }; -} - -#endif From 26eb4ad18cf98d7d9b8f8b7806a52e97ce2f8c97 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Mon, 24 Oct 2022 16:18:18 +0800 Subject: [PATCH 436/793] Fix command registrations and mouse pick polling when using transform gizmo --- Assets/Editor/Layouts/UserLayout.ini | 54 ----- .../src/Application/SBApplication.cpp | 10 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 2 +- .../Inspector/SHEditorComponentView.hpp | 4 + .../ViewportWindow/SHEditorViewport.cpp | 2 +- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 65 +++--- .../src/Editor/Gizmos/SHTransformGizmo.h | 6 + SHADE_Engine/src/Editor/SHEditor.cpp | 2 +- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 191 +++++++++--------- 9 files changed, 151 insertions(+), 185 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index baced6b8..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,54 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=1920,1012 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,142 -Size=387,918 -Collapsed=0 -DockId=0x00000004,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=1649,48 -Size=271,1012 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=387,92 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=648,48 -Size=2519,1319 -Collapsed=0 -DockId=0x00000002,0 - -[Window][î‹ Viewport] -Pos=389,48 -Size=1258,1012 -Collapsed=0 -DockId=0x00000002,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=387,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1258,1036 CentralNode=1 Selected=0xB41284E7 - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index a93148d5..54dc0ccf 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -56,8 +56,8 @@ namespace Sandbox _In_ INT nCmdShow ) { - // Set working directory - SHFileUtilities::SetWorkDirToExecDir(); + // Set working directory + SHFileUtilities::SetWorkDirToExecDir(); window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); @@ -152,16 +152,16 @@ namespace Sandbox SHSceneManager::SceneUpdate(0.016f); #endif SHSystemManager::RunRoutines(editor->editorState != SHEditor::State::PLAY, 0.016f); - //editor->PollPicking(); + editor->PollPicking(); } // Finish all graphics jobs first - graphicsSystem->AwaitGraphicsExecution(); + graphicsSystem->AwaitGraphicsExecution(); } void SBApplication::Exit(void) { - #ifdef SHEDITOR + #ifdef SHEDITOR SDL_DestroyWindow(sdlWindow); SDL_Quit(); #endif diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 27e46d98..972d4ae3 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -94,7 +94,7 @@ namespace SHADE if (ImGui::BeginMenuBar()) { - ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 35.0f); + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 40.0f); if(ImGui::SmallButton(ICON_MD_DESELECT)) { auto editor = SHSystemManager::GetSystem(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 08f5695b..0bbbe0dd 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -39,6 +39,10 @@ namespace SHADE { SHComponentManager::RemoveComponent(component->GetEID()); } + if (ImGui::Selectable(std::format("{} Reset {}", ICON_MD_RESTART_ALT, componentName.data()).data())) + { + *component = T(); + } ImGui::EndPopup(); } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index b06c37c7..cb30fa81 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -24,7 +24,7 @@ namespace SHADE void SHEditorViewport::Init() { SHEditorWindow::Init(); - + transformGizmo.Init(); } void SHEditorViewport::Update() diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index a53b8c10..3c984051 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -13,6 +13,12 @@ #include "Editor/EditorWindow/ViewportWindow/SHEditorViewport.h" namespace SHADE { + void SHTransformGizmo::Init() + { + auto& style = ImGuizmo::GetStyle(); + style.RotationLineThickness = 2.5f; + } + void SHTransformGizmo::Draw() { bool justChangedTfm = false; @@ -26,9 +32,12 @@ namespace SHADE SHMatrix view = SHMatrix::Transpose(editorCamera->GetViewMatrix()); SHMatrix proj = SHMatrix::Transpose(editorCamera->GetProjMatrix()); + + //Invert projection y-axis proj(1, 1) *= -1; + static SHMatrix gridMat = SHMatrix::Translate(0, -0.5f, 0.f) * SHMatrix::Identity; - //ImGuizmo::DrawGrid(&view._11, &proj._11, &gridMat._11, 100.f); + if (selectedEntityTransformComponent == nullptr) { SHEditor* editor = SHSystemManager::GetSystem(); @@ -55,31 +64,37 @@ namespace SHADE return; SHMatrix mat = selectedEntityTransformComponent->GetTRS(); - isManipulating = ImGuizmo::Manipulate(&view._11, &proj._11, static_cast(operation), ImGuizmo::MODE::WORLD, &mat._11); - if (!justChangedTfm) + useSnap = ImGui::IsKeyDown(ImGuiKey_LeftCtrl); + if(useSnap) { - if (ImGui::IsItemClicked()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(selectedEntityTransformComponent->GetTRS(), mat, [tfm = std::move(selectedEntityTransformComponent)](SHMatrix const& mtx) - { - if (!tfm) - return; - SHVec3 translate{}, rotate{}, scale{}; - mtx.Decompose(translate, rotate, scale); - tfm->SetWorldPosition(translate); - tfm->SetWorldRotation(rotate); - tfm->SetWorldScale(scale); - }))); - else if (ImGui::IsItemHovered(ImGuiMouseButton_Left) && ImGui::IsMouseDown(ImGuiMouseButton_Left) && isManipulating) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(selectedEntityTransformComponent->GetTRS(), mat, [tfm = std::move(selectedEntityTransformComponent)](SHMatrix const& mtx) - { - if (!tfm) - return; - SHVec3 translate{}, rotate{}, scale{}; - mtx.Decompose(translate, rotate, scale); - tfm->SetWorldPosition(translate); - tfm->SetWorldRotation(rotate); - tfm->SetWorldScale(scale); - })), true); + switch (operation) + { + case Operation::TRANSLATE: snap = &translationSnap.x; break; + case Operation::ROTATE: snap = &rotationSnap; break; + case Operation::SCALE: snap = &scaleSnap; break; + default: snap = &translationSnap.x; + } } + ImGuizmo::Manipulate(&view._11, &proj._11, static_cast(operation), ImGuizmo::MODE::WORLD, &mat._11, nullptr, useSnap ? snap : nullptr); + static bool startRecording = false; + if (!justChangedTfm && ImGuizmo::IsUsing()) + { + + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(selectedEntityTransformComponent->GetTRS(), mat, [tfm = (selectedEntityTransformComponent)](SHMatrix const& mtx) + { + if (!tfm) + return; + SHVec3 translate{}, rotate{}, scale{}; + mtx.Decompose(translate, rotate, scale); + tfm->SetWorldPosition(translate); + tfm->SetWorldRotation(rotate); + tfm->SetWorldScale(scale); + })), startRecording); + if(!startRecording) + startRecording = true; + } + isManipulating = ImGuizmo::IsUsing() || startRecording; + if(startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + startRecording = false; } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h index 2565575f..fd847335 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.h @@ -37,11 +37,17 @@ namespace SHADE UNIVERSAL = TRANSLATE | ROTATE | SCALEU }; + void Init(); void Draw(); bool isManipulating = false; + bool useSnap = false; Mode mode = Mode::WORLD; Operation operation = Operation::TRANSLATE; private: + float scaleSnap = 0.25f; + float rotationSnap = 1.0f; + SHVec3 translationSnap = SHVec3(0.25f, 0.25f, 0.25f); + float* snap = nullptr; SHTransformComponent* selectedEntityTransformComponent{nullptr}; SHCameraComponent* editorCamera{nullptr}; }; diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index aff1eaad..912f9d0f 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -134,7 +134,7 @@ namespace SHADE } } - PollPicking(); + //PollPicking(); if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) { diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 5788dc15..dc65d6c2 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -40,7 +40,6 @@ namespace SHADE { ImGui::BeginGroup(); - auto cursorPos = ImGui::GetCursorScreenPos(); auto itemSpacing = ImGui::GetStyle().ItemSpacing; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); @@ -175,7 +174,7 @@ namespace SHADE ImGui::SetColumnWidth(-1, 80.0f); ImGui::Text(fieldLabel.c_str()); if (isHovered) - *isHovered = ImGui::IsItemHovered(); + *isHovered = ImGui::IsItemHovered(); ImGui::NextColumn(); for (std::size_t i = 0; i < N; ++i) { @@ -208,21 +207,16 @@ namespace SHADE ImGuiSliderFlags flags = 0) { SHVec2 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags)) - { - changed = true; - } - + bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags); + static bool startRecording = false; if (changed) { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); + if (!startRecording) + startRecording = true; } + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + startRecording = false; return changed; } @@ -232,20 +226,20 @@ namespace SHADE ImGuiSliderFlags flags = 0) { SHVec3 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags)) - { - changed = true; - } + bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags); + + static bool startRecording = false; if (changed) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHVec3 old = get(); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(old, values, set)), startRecording); + if (!startRecording) + startRecording = true; + } + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; } return changed; @@ -256,20 +250,17 @@ namespace SHADE ImGuiSliderFlags flags = 0) { SHVec4 values = get(); - bool changed = false; - if (DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags)) - { - changed = true; - } - + bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags); + static bool startRecording = false; if (changed) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), false); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); + if (!startRecording) + startRecording = true; + } + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; } return changed; @@ -325,112 +316,116 @@ namespace SHADE float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { T value = get(); - std::cout << value << " \n"; - //bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); - - if (ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags)) + const bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); + static bool startRecording = false; + if (hasChange) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - - return true; + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; } - return false; + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; + } + return hasChange; } static bool DragFloat(const std::string& fieldLabel, std::function get, std::function set, float speed = 0.1f, float p_min = float(), float p_max = float(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { float value = get(); - //bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); - if (ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) + const bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + static bool startRecording = false; + if (hasChange) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - - return true; + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; } - - return false; + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; + } + return hasChange; } static bool DragInt(const std::string& fieldLabel, std::function get, std::function set, float speed = 1.0f, int p_min = int(), int p_max = int(), const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { int value = get(); - //bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); - if (ImGui::DragInt(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags)) + const bool hasChange = ImGui::DragInt(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + static bool startRecording = false; + if (hasChange) { - if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - else if (ImGui::IsItemDeactivatedAfterEdit()) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - - return true; + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; } - - return false; + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; + } + return hasChange; } template static bool SliderScalar(const std::string& fieldLabel, ImGuiDataType data_type, T min, T max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { T value = get(); - if (ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags)) + bool const changed = ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags); + static bool startRecording = false; + if (changed) { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; - return true; } - - return false; + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; + } + return changed; } static bool SliderFloat(const std::string& fieldLabel, float min, float max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { float value = get(); - if (ImGui::SliderFloat(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) + bool const changed = ImGui::SliderFloat(fieldLabel.c_str(), &value, min, max, displayFormat, flags); + static bool startRecording = false; + if (changed) { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; - - return true; } - - return false; + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; + } + return changed; } static bool SliderInt(const std::string& fieldLabel, int min, int max, std::function get, std::function set, const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { int value = get(); - if (ImGui::SliderInt(fieldLabel.c_str(), &value, min, max, displayFormat, flags)) + bool const changed = ImGui::SliderInt(fieldLabel.c_str(), &value, min, max, displayFormat, flags); + static bool startRecording = false; + if (changed) { - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left, false) && !ImGui::IsMouseDragging(ImGuiMouseButton_Left, -0.2f)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - else if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)) - SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), true); - return true; + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); + if (!startRecording) + startRecording = true; + } + if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + { + startRecording = false; } - return false; } From 24c591ec27b186431ea145e7053d2d8542d23031 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 24 Oct 2022 20:07:59 +0800 Subject: [PATCH 437/793] Modified Managed Transform Interface to use Quaternions --- SHADE_Managed/src/Components/Transform.cxx | 16 ++++++++-------- SHADE_Managed/src/Components/Transform.hxx | 21 ++++++++++----------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx index 0f0716dc..41298c21 100644 --- a/SHADE_Managed/src/Components/Transform.cxx +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -29,13 +29,13 @@ namespace SHADE { GetNativeComponent()->SetLocalPosition(Convert::ToNative(val)); } - Vector3 Transform::LocalRotation::get() + Quaternion Transform::LocalRotation::get() { - return Convert::ToCLI(GetNativeComponent()->GetLocalRotation()); + return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation()); } - void Transform::LocalRotation::set(Vector3 val) + void Transform::LocalRotation::set(Quaternion val) { - GetNativeComponent()->SetLocalRotation(Convert::ToNative(val)); + GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val)); } Vector3 Transform::LocalScale::get() { @@ -54,13 +54,13 @@ namespace SHADE { GetNativeComponent()->SetWorldPosition(Convert::ToNative(val)); } - Vector3 Transform::GlobalRotation::get() + Quaternion Transform::GlobalRotation::get() { - return Convert::ToCLI(GetNativeComponent()->GetWorldRotation()); + return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation()); } - void Transform::GlobalRotation::set(Vector3 val) + void Transform::GlobalRotation::set(Quaternion val) { - GetNativeComponent()->SetWorldRotation(Convert::ToNative(val)); + GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val)); } Vector3 Transform::GlobalScale::get() { diff --git a/SHADE_Managed/src/Components/Transform.hxx b/SHADE_Managed/src/Components/Transform.hxx index 9efd2927..43118b1f 100644 --- a/SHADE_Managed/src/Components/Transform.hxx +++ b/SHADE_Managed/src/Components/Transform.hxx @@ -17,14 +17,14 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Components/Component.hxx" #include "Math/Vector3.hxx" -#include "Utility/Convert.hxx" +#include "Math/Quaternion.hxx" // External Dependencies #include "Math/Transform/SHTransformComponent.h" namespace SHADE { /// - /// CLR version of the the SHADE Engine's TransformComponent. + /// CLR version of the SHADE Engine's TransformComponent. /// public ref class Transform : public Component { @@ -52,12 +52,12 @@ namespace SHADE void set(Vector3 val); } /// - /// Local Z-axis rotation angle stored by this Transform in Radians. + /// Local rotation quaternion stored by this Transform. /// - property Vector3 LocalRotation + property Quaternion LocalRotation { - Vector3 get(); - void set(Vector3 val); + Quaternion get(); + void set(Quaternion val); } /// /// Local scale stored by this Transform. @@ -76,16 +76,15 @@ namespace SHADE void set(Vector3 val); } /// - /// Global Z-axis rotation angle stored by this Transform in Radians. + /// Global rotation quaternion stored by this Transform. /// - property Vector3 GlobalRotation + property Quaternion GlobalRotation { - Vector3 get(); - void set(Vector3 val); + Quaternion get(); + void set(Quaternion val); } /// /// Global scale stored by this Transform. - /// Note that this operation is expensive. /// property Vector3 GlobalScale { From ff025f212cc93e3668dd435015c8bab632b7889f Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 24 Oct 2022 22:41:36 +0800 Subject: [PATCH 438/793] Added Euler Angles properties to Managed Transforms --- SHADE_Managed/src/Components/Transform.cxx | 16 ++++++++++++++++ SHADE_Managed/src/Components/Transform.hxx | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/SHADE_Managed/src/Components/Transform.cxx b/SHADE_Managed/src/Components/Transform.cxx index 41298c21..98f0da4f 100644 --- a/SHADE_Managed/src/Components/Transform.cxx +++ b/SHADE_Managed/src/Components/Transform.cxx @@ -37,6 +37,14 @@ namespace SHADE { GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val)); } + Vector3 Transform::LocalEulerAngles::get() + { + return Convert::ToCLI(GetNativeComponent()->GetLocalRotation()); + } + void Transform::LocalEulerAngles::set(Vector3 val) + { + GetNativeComponent()->SetLocalRotation(Convert::ToNative(val)); + } Vector3 Transform::LocalScale::get() { return Convert::ToCLI(GetNativeComponent()->GetLocalScale()); @@ -62,6 +70,14 @@ namespace SHADE { GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val)); } + Vector3 Transform::GlobalEulerAngles::get() + { + return Convert::ToCLI(GetNativeComponent()->GetWorldRotation()); + } + void Transform::GlobalEulerAngles::set(Vector3 val) + { + GetNativeComponent()->SetWorldRotation(Convert::ToNative(val)); + } Vector3 Transform::GlobalScale::get() { return Convert::ToCLI(GetNativeComponent()->GetWorldScale()); diff --git a/SHADE_Managed/src/Components/Transform.hxx b/SHADE_Managed/src/Components/Transform.hxx index 43118b1f..bbe9fd19 100644 --- a/SHADE_Managed/src/Components/Transform.hxx +++ b/SHADE_Managed/src/Components/Transform.hxx @@ -60,6 +60,14 @@ namespace SHADE void set(Quaternion val); } /// + /// Local euler angle rotations stored by this Transform. + /// + property Vector3 LocalEulerAngles + { + Vector3 get(); + void set(Vector3 val); + } + /// /// Local scale stored by this Transform. /// property Vector3 LocalScale @@ -84,6 +92,14 @@ namespace SHADE void set(Quaternion val); } /// + /// Global euler angle rotations stored by this Transform. + /// + property Vector3 GlobalEulerAngles + { + Vector3 get(); + void set(Vector3 val); + } + /// /// Global scale stored by this Transform. /// property Vector3 GlobalScale From 2dbd2f603064a95cc78c7170fa973ae9008232da Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 24 Oct 2022 22:46:01 +0800 Subject: [PATCH 439/793] Split asset into 2 categories for internal assets to be loaded and external assets to be compiled --- .../{ => Compilers}/SHAssimpLibrary.cpp | 0 .../{ => Compilers}/SHAssimpLibrary.h | 6 ++-- .../{ => Compilers}/SHMeshCompiler.cpp | 0 .../{ => Compilers}/SHMeshCompiler.h | 0 .../SHShaderSourceCompiler.cpp | 2 +- .../{ => Compilers}/SHShaderSourceCompiler.h | 0 .../{ => Compilers}/SHTextureCompiler.cpp | 0 .../{ => Compilers}/SHTextureCompiler.h | 0 .../Libraries/{ => Loaders}/SHAssetLoader.h | 0 .../Libraries/{ => Loaders}/SHMeshLoader.cpp | 0 .../Libraries/{ => Loaders}/SHMeshLoader.h | 4 +-- .../{ => Loaders}/SHShaderSourceLoader.cpp | 0 .../{ => Loaders}/SHShaderSourceLoader.h | 2 +- .../{ => Loaders}/SHTextureLoader.cpp | 0 .../Libraries/{ => Loaders}/SHTextureLoader.h | 4 +-- SHADE_Engine/src/Assets/SHAssetMacros.h | 29 ++++++++++------- SHADE_Engine/src/Assets/SHAssetManager.cpp | 32 +++++++++++++------ SHADE_Engine/src/Assets/SHAssetManager.h | 4 ++- 18 files changed, 52 insertions(+), 31 deletions(-) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHAssimpLibrary.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHAssimpLibrary.h (89%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHMeshCompiler.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHMeshCompiler.h (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHShaderSourceCompiler.cpp (98%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHShaderSourceCompiler.h (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHTextureCompiler.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Compilers}/SHTextureCompiler.h (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHAssetLoader.h (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHMeshLoader.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHMeshLoader.h (90%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHShaderSourceLoader.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHShaderSourceLoader.h (92%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHTextureLoader.cpp (100%) rename SHADE_Engine/src/Assets/Libraries/{ => Loaders}/SHTextureLoader.h (93%) diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.cpp rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h similarity index 89% rename from SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h index 83755b4c..d5afde00 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHAssimpLibrary.h +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h @@ -13,9 +13,9 @@ #include #include #include -#include "../SHAssetMacros.h" -#include "../Asset Types/SHMeshAsset.h" -#include "../Asset Types/SHAnimationAsset.h" +#include "Assets/SHAssetMacros.h" +#include "Assets/Asset Types/SHMeshAsset.h" +#include "Assets/Asset Types/SHAnimationAsset.h" namespace SHADE { diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.cpp rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHMeshCompiler.h rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp similarity index 98% rename from SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp index c9674b2e..8cca46dc 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp @@ -21,7 +21,7 @@ namespace SHADE { std::string SHShaderSourceCompiler::CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept { - std::string newPath{ path.string() + SHADER_SPRV_EXTENSION.data() }; + std::string newPath{ path.string() + SHADER_EXTENSION.data() }; std::ofstream file{ newPath, std::ios::binary | std::ios::out | std::ios::trunc }; diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHShaderSourceCompiler.h rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.cpp rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHTextureCompiler.h rename to SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHAssetLoader.h similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHAssetLoader.h rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHAssetLoader.h diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHMeshLoader.cpp rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h similarity index 90% rename from SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h index 706d65d6..bf65851a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHMeshLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHMeshLoader.h @@ -10,8 +10,8 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #pragma once -#include "../SHAssetMacros.h" -#include "../Asset Types/SHMeshAsset.h" +#include "Assets/SHAssetMacros.h" +#include "Assets/Asset Types/SHMeshAsset.h" #include "SHAssetLoader.h" namespace SHADE diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.cpp rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h similarity index 92% rename from SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h index 262a767a..befdade5 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h @@ -10,7 +10,7 @@ *****************************************************************************/ #pragma once -#include "Assets/Libraries/SHAssetLoader.h" +#include "Assets/Libraries/Loaders/SHAssetLoader.h" #include "Assets/SHAssetMacros.h" namespace SHADE diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp similarity index 100% rename from SHADE_Engine/src/Assets/Libraries/SHTextureLoader.cpp rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp diff --git a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h similarity index 93% rename from SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h rename to SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h index 8bdf91b1..95dd7c9a 100644 --- a/SHADE_Engine/src/Assets/Libraries/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h @@ -12,8 +12,8 @@ #pragma once #define TINYDDSLOADER_IMPLEMENTATION -#include "../SHAssetMacros.h" -#include "../Asset Types/SHTextureAsset.h" +#include "Assets/SHAssetMacros.h" +#include "Assets/Asset Types/SHTextureAsset.h" #include "tinyddsloader.h" #include "SHAssetLoader.h" diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index cb8e1331..c5c8493b 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -68,34 +68,39 @@ constexpr std::string_view ASSET_ROOT {"../../Assets"}; // ASSET EXTENSIONS constexpr std::string_view META_EXTENSION {".shmeta"}; -constexpr std::string_view IMAGE_EXTENSION {".png"}; constexpr std::string_view AUDIO_EXTENSION {".ogg"}; constexpr std::string_view AUDIO_WAV_EXTENSION {".wav"}; -constexpr std::string_view SHADER_EXTENSION{ ".glsl" }; -constexpr std::string_view SHADER_SPRV_EXTENSION {".sprv"}; +constexpr std::string_view SHADER_EXTENSION{".shshader"}; constexpr std::string_view SCRIPT_EXTENSION {".cs"}; -constexpr std::string_view SCENE_EXTENSION {".SHADE"}; -constexpr std::string_view PREFAB_EXTENSION {".SHPrefab"}; -constexpr std::string_view MATERIAL_EXTENSION {".SHMat"}; +constexpr std::string_view SCENE_EXTENSION {".shade"}; +constexpr std::string_view PREFAB_EXTENSION {".shprefab"}; +constexpr std::string_view MATERIAL_EXTENSION {".shmat"}; constexpr std::string_view TEXTURE_EXTENSION {".shtex"}; -constexpr std::string_view DDS_EXTENSION {".dds"}; -constexpr std::string_view FBX_EXTENSION {".fbx"}; -constexpr std::string_view GLTF_EXTENSION {".gltf"}; constexpr std::string_view MESH_EXTENSION {".shmesh"}; +// EXTERNAL EXTENSIONS +constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; +constexpr std::string_view IMAGE_EXTENSION{ ".png" }; +constexpr std::string_view DDS_EXTENSION{ ".dds" }; +constexpr std::string_view FBX_EXTENSION{ ".fbx" }; +constexpr std::string_view GLTF_EXTENSION{ ".gltf" }; + constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, - SHADER_SPRV_EXTENSION, MATERIAL_EXTENSION, - IMAGE_EXTENSION, TEXTURE_EXTENSION, - DDS_EXTENSION, MESH_EXTENSION, SCRIPT_EXTENSION, SCENE_EXTENSION, PREFAB_EXTENSION, AUDIO_WAV_EXTENSION, +}; + +constexpr std::string_view EXTERNALS[] = { + GLSL_EXTENSION, + IMAGE_EXTENSION, + DDS_EXTENSION, FBX_EXTENSION, GLTF_EXTENSION }; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 9198666c..28790dca 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -14,13 +14,14 @@ #include "SHAssetMetaHandler.h" #include "Filesystem/SHFileSystem.h" -#include "Libraries/SHAssimpLibrary.h" -#include "Libraries/SHMeshLoader.h" -#include "Libraries/SHTextureLoader.h" -#include "Libraries/SHShaderSourceLoader.h" +#include "Libraries/Loaders/SHMeshLoader.h" +#include "Libraries/Loaders/SHTextureLoader.h" +#include "Libraries/Loaders/SHShaderSourceLoader.h" -#include "Libraries/SHMeshCompiler.h" -#include "Libraries/SHTextureCompiler.h" + +#include "Libraries/Compilers/SHAssimpLibrary.h" +#include "Libraries/Compilers/SHMeshCompiler.h" +#include "Libraries/Compilers/SHTextureCompiler.h" namespace SHADE { @@ -65,7 +66,20 @@ namespace SHADE // TODO } - AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept + void SHAssetManager::Exit() noexcept + { + for (auto const& loader : loaders) + { + delete loader; + } + + for (auto const& data : assetData) + { + delete data.second; + } + } + + AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept { if (!IsRecognised(path.extension().string().c_str())) { @@ -255,6 +269,7 @@ namespace SHADE result.type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string()); result.id = GenerateAssetID(result.type); result.path = path; + result.location = 0; return result; } @@ -264,8 +279,7 @@ namespace SHADE loaders[static_cast(AssetType::AUDIO)] = nullptr; loaders[static_cast(AssetType::SHADER)] = dynamic_cast(new SHShaderSourceLoader()); loaders[static_cast(AssetType::MATERIAL)] = nullptr; - loaders[static_cast(AssetType::IMAGE)] = dynamic_cast(new SHTextureLoader()); - loaders[static_cast(AssetType::TEXTURE)] = nullptr; + loaders[static_cast(AssetType::TEXTURE)] = dynamic_cast(new SHTextureLoader()); loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); loaders[static_cast(AssetType::SCRIPT)] = nullptr; loaders[static_cast(AssetType::SCENE)] = nullptr; diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index fedebfba..0dc376d9 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -12,7 +12,7 @@ #include "tinyddsloader.h" #include "SHAsset.h" #include "Asset Types/SHAssetData.h" -#include "Libraries/SHAssetLoader.h" +#include "Assets/Libraries/Loaders/SHAssetLoader.h" #include #include "SH_API.h" @@ -37,6 +37,8 @@ namespace SHADE static void Unload() noexcept; static void Unload(AssetID assetId) noexcept; + static void Exit() noexcept; + /**************************************************************************** * \brief Load all resources that are in the folder ****************************************************************************/ From 8fb0eddcc1bfd795e6b0b1e4dfcd7579d7728d24 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 25 Oct 2022 00:00:22 +0800 Subject: [PATCH 440/793] Lights WIP --- Assets/Editor/Layouts/UserLayout.ini | 12 +- .../src/Graphics/Instance/SHVkInstance.cpp | 2 +- .../GlobalData/SHGraphicsGlobalData.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsConstants.h | 2 +- .../MiddleEnd/Lights/SHLightComponent.cpp | 109 ++++++++ .../MiddleEnd/Lights/SHLightComponent.h | 54 ++++ .../Graphics/MiddleEnd/Lights/SHLightData.cpp | 21 ++ .../Graphics/MiddleEnd/Lights/SHLightData.h | 55 ++++ .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 250 ++++++++++++++++++ .../MiddleEnd/Lights/SHLightingSubSystem.h | 109 ++++++++ SHADE_Engine/src/Tools/SHUtilities.h | 9 + SHADE_Engine/src/Tools/SHUtilities.hpp | 6 + 12 files changed, 622 insertions(+), 9 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index baced6b8..9add170c 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -10,7 +10,7 @@ Collapsed=0 [Window][Hierarchy Panel] Pos=0,142 -Size=387,918 +Size=768,918 Collapsed=0 DockId=0x00000004,0 @@ -27,7 +27,7 @@ DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=387,92 +Size=768,92 Collapsed=0 DockId=0x00000003,0 @@ -38,17 +38,17 @@ Collapsed=0 DockId=0x00000002,0 [Window][î‹ Viewport] -Pos=389,48 -Size=1258,1012 +Pos=770,48 +Size=877,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=387,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=768,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1258,1036 CentralNode=1 Selected=0xB41284E7 + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=877,1036 CentralNode=1 Selected=0xB41284E7 DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp index 191bc563..edfe4b46 100644 --- a/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp +++ b/SHADE_Engine/src/Graphics/Instance/SHVkInstance.cpp @@ -155,7 +155,7 @@ namespace SHADE SHVkDebugMessenger::GenMessengerType(SH_DEBUG_MSG_TYPE::T_GENERAL, SH_DEBUG_MSG_TYPE::T_VALIDATION, SH_DEBUG_MSG_TYPE::T_PERFORMANCE)); instanceDbgInfo.pfnUserCallback = SHVulkanDebugUtil::GenericDebugCallback; - instanceInfo.pNext = static_cast(&instanceDbgInfo); + //instanceInfo.pNext = static_cast(&instanceDbgInfo); } // Finally create the instance diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index d8b1bad1..ed1d3100 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -49,7 +49,7 @@ namespace SHADE { .Type = vk::DescriptorType::eStorageBufferDynamic, .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = SHGraphicsConstants::DescriptorSetBindings::LIGHTS_DATA, + .BindPoint = SHGraphicsConstants::DescriptorSetBindings::DIRECTIONAL_LIGHT_DATA, .DescriptorCount = 1, }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index a0457b65..15f192c0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -101,7 +101,7 @@ namespace SHADE */ /***************************************************************************/ - static constexpr uint32_t LIGHTS_DATA = 0; + static constexpr uint32_t DIRECTIONAL_LIGHT_DATA = 0; /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp new file mode 100644 index 00000000..e3bcec58 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp @@ -0,0 +1,109 @@ +#include "SHpch.h" +#include "SHLightComponent.h" + +namespace SHADE +{ + + + void SHLightComponent::OnCreate(void) + { + lightData.Reset(); + SetType(SH_LIGHT_TYPE::DIRECTIONAL); + indexInBuffer = std::numeric_limits::max(); + Unbind(); + } + + + void SHLightComponent::OnDestroy(void) + { + + } + + void SHLightComponent::SetPosition(SHVec3 position) noexcept + { + lightData.position = position; + MakeDirty(); + } + + + void SHLightComponent::SetType(SH_LIGHT_TYPE type) noexcept + { + lightData.type = type; + MakeDirty(); + } + + + void SHLightComponent::SetDirection(SHVec3 direction) noexcept + { + lightData.direction = direction; + MakeDirty(); + } + + + void SHLightComponent::SetDiffuseColor(SHVec4 diffuseColor) noexcept + { + lightData.diffuseColor = diffuseColor; + MakeDirty(); + } + + void SHLightComponent::ModifyLayer(uint8_t layerIndex, bool value) noexcept + { + if (value) + lightData.cullingMask |= (1u << layerIndex); + else + lightData.cullingMask &= ~(1u << layerIndex); + + MakeDirty(); + } + + + void SHLightComponent::SetAllLayers(void) noexcept + { + lightData.cullingMask = std::numeric_limits::max(); + MakeDirty(); + } + + + void SHLightComponent::ClearAllLayers(void) noexcept + { + lightData.cullingMask = 0; + MakeDirty(); + } + + void SHLightComponent::MakeDirty(void) noexcept + { + dirty = true; + } + + void SHLightComponent::ClearDirtyFlag(void) noexcept + { + dirty = false; + } + + void SHLightComponent::Unbind(void) noexcept + { + bound = false; + MakeDirty(); + } + + void SHLightComponent::SetBound(void) noexcept + { + bound = true; + } + + SHLightData const& SHLightComponent::GetLightData(void) const noexcept + { + return lightData; + } + + bool SHLightComponent::IsDirty(void) const noexcept + { + return dirty; + } + + bool SHLightComponent::GetBound(void) const noexcept + { + return bound; + } + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h new file mode 100644 index 00000000..3b06a612 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h @@ -0,0 +1,54 @@ +#pragma once + +#include "ECS_Base/Components/SHComponent.h" +#include "SHLightData.h" + +namespace SHADE +{ + + class SH_API SHLightComponent final : public SHComponent + { + private: + //! General data for the light. This will purely be CPU bound. Whatever gets sent to the + //! GPU depends on the type of the light. + SHLightData lightData; + + //! Since the lighting system is gonna be self contained and light weight, we store this + //! so that we only write this to the CPU buffer when this light component change, we don't + //! rewrite everything. However we still write to the GPU buffer when everything changes. + uint32_t indexInBuffer; + + //! If the light component changed some value we mark this true. + bool dirty; + + //! If the light's data is already in the buffers, this will be set to true. + bool bound; + + public: + /*-----------------------------------------------------------------------*/ + /* LIFECYCLE FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void OnCreate (void) override final; + void OnDestroy (void) override final; + + /*-----------------------------------------------------------------------*/ + /* SETTERS AND GETTERS */ + /*-----------------------------------------------------------------------*/ + void SetPosition (SHVec3 position) noexcept; + void SetType (SH_LIGHT_TYPE type) noexcept; + void SetDirection (SHVec3 direction) noexcept; + void SetDiffuseColor (SHVec4 diffuseColor) noexcept; + void ModifyLayer (uint8_t layerIndex, bool value) noexcept; + void SetAllLayers (void) noexcept; + void ClearAllLayers (void) noexcept; + void MakeDirty (void) noexcept; + void ClearDirtyFlag (void) noexcept; + void Unbind (void) noexcept; + void SetBound (void) noexcept; + + SHLightData const& GetLightData (void) const noexcept; + bool IsDirty (void) const noexcept; + bool GetBound (void) const noexcept; + + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.cpp new file mode 100644 index 00000000..ba910408 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.cpp @@ -0,0 +1,21 @@ +#include "SHpch.h" +#include "SHLightData.h" + +namespace SHADE +{ + void SHLightData::Reset(void) noexcept + { + // no culling is done. + cullingMask = std::numeric_limits::max(); + + // reset position to 0 + position = SHVec3::Zero; + + // direction just point in positive z axis + direction = SHVec3::Forward; + + // Diffuse color set to 1 + diffuseColor = SHVec4::One; + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.h new file mode 100644 index 00000000..607978a4 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightData.h @@ -0,0 +1,55 @@ +#pragma once + +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" + +namespace SHADE +{ + enum class SH_LIGHT_TYPE : uint32_t + { + DIRECTIONAL = 0, + POINT, + SPOT, + NUM_TYPES + }; + + /***************************************************************************/ + /*! + + \class + Every light will essentially be using this struct. However, when passing + light data over to the GPU, the light data will be split according to + type for more optimal cache access. + + */ + /***************************************************************************/ + struct SHLightData + { + //! position of the light + SHVec3 position; + + //! Type of the light + SH_LIGHT_TYPE type; + + //! direction of the light + SHVec3 direction; + + //! Each bit in this 32 bit field will represent a layer. If the bit is set, + //! when a fragment is being evaluated, the shader will use the fragment's + //! layer value to AND with the light's. If result is 1, do lighting calculations. + uint32_t cullingMask; + + //! Diffuse color emitted by the light + SHVec4 diffuseColor; + + void Reset (void) noexcept; + //! TODO: + //! - Add cut off. (inner and outer). + //! - Add constant, linear and quadratic for attenuation + //! - Specular color if needed. see below. + + //! Specular color + //SHVec4 specularColor; + }; + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp new file mode 100644 index 00000000..3d39ed89 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -0,0 +1,250 @@ +#include "SHpch.h" +#include "SHLightingSubSystem.h" +#include "Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.h" +#include "Tools/SHUtilities.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" +#include "SHLightComponent.h" +#include "ECS_Base/Managers/SHComponentManager.h" + +namespace SHADE +{ + + /***************************************************************************/ + /*! + + \brief + Initializes type, intermediate data and buffer. dirty will be true. + + \param lightType + type of the light. + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::InitializeData(Handle logicalDevice, SH_LIGHT_TYPE type) noexcept + { + // initialize the type + lightType = type; + + // we want to write to GPU when system runs + dirty = true; + + // boilerplate + intermediateData = nullptr; + numLights = 0; + + // initialize alignment + lightDataAlignmentSize = logicalDevice->PadSSBOSize(GetLightTypeSize(type)); + + // So create some data! + Expand(logicalDevice); + } + + /***************************************************************************/ + /*! + + \brief + Expands both the CPU container and the GPU buffer when the number of + lights have exceeded + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::Expand(Handle logicalDevice) noexcept + { + // we want to wait for the command buffers to finish using the buffers first + logicalDevice->WaitIdle(); + + // this is for CPU buffer. + uint32_t structSize = GetLightTypeSize(lightType); + + // First time we are initializing lights + if (intermediateData == nullptr) + { + // num lights should start of at STARTING_NUM_LIGHTS lights + numLights = STARTING_NUM_LIGHTS; + + // Initialize the data for lights + intermediateData = std::make_unique(lightDataAlignmentSize * STARTING_NUM_LIGHTS); + + dataBuffer = logicalDevice->CreateBuffer(numLights * lightDataAlignmentSize, nullptr, numLights * lightDataAlignmentSize, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + } + else + { + // save old number of lights + uint32_t const OLD_NUM_LIGHTS = numLights; + + // before we increase the number of lights, create space to store old data. + std::unique_ptr oldData = std::make_unique(lightDataAlignmentSize * OLD_NUM_LIGHTS); + + // copy data over. + std::memcpy (oldData.get(), intermediateData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); + + // now we start to expand.... + + // double space for lights + numLights *= 2; + + // destroy old data and initialize container for double the amount of data. + intermediateData = std::make_unique(lightDataAlignmentSize * numLights); + + // copy old data to new container + std::memcpy(intermediateData.get(), oldData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); + + // Resize the GPU buffer + dataBuffer->ResizeReplace(lightDataAlignmentSize * numLights, oldData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); + + } + + } + + /***************************************************************************/ + /*! + + \brief + This function takes in a light comp in the event that its data has not + been placed in the buffer yet. It also checks if the size of the buffer + is big enough + + \param lightComp + + \return + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::AddLight(SHLightComponent* lightComp) noexcept + { + + } + + /***************************************************************************/ + /*! + + \brief + Gets the size required to store data for a light type. + + \param type + Type of a light. + + \return + Size required to store a light based on type. + + */ + /***************************************************************************/ + uint32_t SHLightingSubSystem::PerTypeData::GetLightTypeSize(SH_LIGHT_TYPE type) noexcept + { + switch (type) + { + case SH_LIGHT_TYPE::DIRECTIONAL: + // TOOD: Change after creating point light struct + return 0; + case SH_LIGHT_TYPE::POINT: + return sizeof (SHDirectionalLightData); + case SH_LIGHT_TYPE::SPOT: + // TOOD: Change after creating spot light struct + return 0; + case SH_LIGHT_TYPE::NUM_TYPES: + default: + return 0; + + } + } + + + Handle SHLightingSubSystem::PerTypeData::GetDataBuffer(void) const noexcept + { + return dataBuffer; + } + + + uint32_t SHLightingSubSystem::PerTypeData::GetAlignmentSize(void) const noexcept + { + return lightDataAlignmentSize; + } + + void SHLightingSubSystem::UpdateDescSet(uint32_t binding) noexcept + { + auto buffer = perTypeData[binding].GetDataBuffer(); + + // We bind the buffer with the correct desc set binding + lightingDataDescSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, + binding, + { &buffer, 1 }, + 0, + perTypeData[binding].GetAlignmentSize()); + + lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, binding); + } + + /***************************************************************************/ + /*! + + \brief + Initializes per light type data. This includes buffers and descriptor + sets. + + + */ + /***************************************************************************/ + void SHLightingSubSystem::Init(Handle logicalDevice, Handle descPool) noexcept + { + std::vector variableSizes{ SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES) }; + std::fill (variableSizes.begin(), variableSizes.end(), 1); + + // Create the descriptor set + lightingDataDescSet = descPool->Allocate({SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS]}, variableSizes); + + // initialize all the data first. We add more lights here as we add more types. + perTypeData[SHUtilities::ToUnderlying(SH_LIGHT_TYPE::DIRECTIONAL)].InitializeData(logicalDevice, SH_LIGHT_TYPE::DIRECTIONAL); + UpdateDescSet(SHGraphicsConstants::DescriptorSetBindings::DIRECTIONAL_LIGHT_DATA); + } + + /***************************************************************************/ + /*! + + \brief + Loops through every single light component and checks for dirty light + data. If light data is dirty, rewrite to the CPU container and do a + copy to the GPU data. We also check if the per light type data is too small + to handle more lights, if it is, expand buffer (both CPU and GPU). + + */ + /***************************************************************************/ + void SHLightingSubSystem::Run(void) noexcept + { + auto& lightComps = SHComponentManager::GetDense(); + for (auto& light : lightComps) + { + // First we want to make sure the light is already bound to the system. if it + // isn't, we write it to the correct buffer. + if (!light.GetBound()) + { + + + light.SetBound(); + } + + // if there was modification to the light data + if (light.IsDirty()) + { + + } + } + + } + + /***************************************************************************/ + /*! + + \brief + Does nothing for now. + + */ + /***************************************************************************/ + void SHLightingSubSystem::Exit(void) noexcept + { + + } + + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h new file mode 100644 index 00000000..4c99354f --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -0,0 +1,109 @@ +#pragma once + +#include "Resource/SHHandle.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" +#include "SHLightData.h" + +namespace SHADE +{ + class SHVkLogicalDevice; + class SHVkDescriptorPool; + class SHVkDescriptorSetGroup; + class SHVkDescriptorSetLayout; + class SHVkBuffer; + + // Represents how the data will be interpreted in GPU. we want to copy to a container of these before passing to GPU. + struct SHDirectionalLightData + { + //! Direction of the light + SHVec3 direction; + + //! Each bit in this 32 bit field will represent a layer. If the bit is set, + //! when a fragment is being evaluated, the shader will use the fragment's + //! layer value to AND with the light's. If result is 1, do lighting calculations. + uint32_t cullingMask; + + //! Diffuse color emitted by the light + SHVec4 diffuseColor; + + }; + + class SHLightingSubSystem + { + private: + + class PerTypeData + { + private: + /*-----------------------------------------------------------------------*/ + /* STATIC MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + static constexpr uint32_t STARTING_NUM_LIGHTS = 20; + + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER VARIABLES */ + /*-----------------------------------------------------------------------*/ + + //! SSBOs need to be aligned. This is to pad lighting structs + uint32_t lightDataAlignmentSize; + + //! type of the light. Will be used later when we want to expand + SH_LIGHT_TYPE lightType; + + //! number of lights currently alive. + uint32_t numLights; + + //! if intermediateData has been modified(i.e. any 1 light's data is changed), set to true. + bool dirty; + + //! GPU buffer required to store GPU data + Handle dataBuffer; + + //! Before data gets copied to the GPU, it goes into here first. Data here is aligned to whatever struct is + //! used to represent data in this container. + std::unique_ptr intermediateData; + + public: + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void InitializeData (Handle logicalDevice, SH_LIGHT_TYPE type) noexcept; + void Expand (Handle logicalDevice) noexcept; + void AddLight (SHLightComponent* lightComp) noexcept; + + /*-----------------------------------------------------------------------*/ + /* GETTERS */ + /*-----------------------------------------------------------------------*/ + static uint32_t GetLightTypeSize (SH_LIGHT_TYPE type) noexcept; + Handle GetDataBuffer (void) const noexcept; + uint32_t GetAlignmentSize (void) const noexcept; + }; + + private: + + //! logical device used for creation + Handle logicalDevice; + + //! The descriptor set that will hold the lighting data. Each binding will hold a buffer, NUM_FRAMES times the size required. + Handle lightingDataDescSet; + + //! Each type will have some data associated with it for processing + std::array(SH_LIGHT_TYPE::NUM_TYPES)> perTypeData; + + /*-----------------------------------------------------------------------*/ + /* PRIVATE MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void UpdateDescSet (uint32_t binding) noexcept; + + public: + + /*-----------------------------------------------------------------------*/ + /* PUBLIC MEMBER FUNCTIONS */ + /*-----------------------------------------------------------------------*/ + void Init (Handle logicalDevice, Handle descPool) noexcept; + void Run (void) noexcept; + void Exit (void) noexcept; + + }; +} diff --git a/SHADE_Engine/src/Tools/SHUtilities.h b/SHADE_Engine/src/Tools/SHUtilities.h index 543c771c..b3d840e7 100644 --- a/SHADE_Engine/src/Tools/SHUtilities.h +++ b/SHADE_Engine/src/Tools/SHUtilities.h @@ -42,6 +42,15 @@ namespace SHADE template static constexpr OutputType ConvertEnum(InputType enumClassMember) noexcept; + /** + * @brief Converts an enum class member from it's type to the underlying type. + * @tparam Enum Restricted to an enum class + * @param[in] value A member of the specified enum class. + * @returns The value of the enum class member in the output type. + */ + template + static constexpr typename std::underlying_type_t ToUnderlying (Enum value) noexcept; + }; } // namespace SHADE diff --git a/SHADE_Engine/src/Tools/SHUtilities.hpp b/SHADE_Engine/src/Tools/SHUtilities.hpp index 0e21a9d0..e0404ea1 100644 --- a/SHADE_Engine/src/Tools/SHUtilities.hpp +++ b/SHADE_Engine/src/Tools/SHUtilities.hpp @@ -25,4 +25,10 @@ namespace SHADE return static_cast(enumClassMember); } + template + constexpr typename std::underlying_type_t SHUtilities::ToUnderlying(Enum value) noexcept + { + return static_cast>(value); + } + } // namespace SHADE \ No newline at end of file From f6cbb1814386e4d624df0c0ec26ac45524516041 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 01:34:46 +0800 Subject: [PATCH 441/793] Added display of WIP CallbackEvents on the inspector --- SHADE_CSharp/src/Events/CallbackAction.cs | 40 +++++++++++++ SHADE_CSharp/src/Events/CallbackAction.tt | 4 ++ SHADE_CSharp/src/Events/CallbackEvent.cs | 54 +++++++++++++++++ SHADE_CSharp/src/Events/CallbackEvent.tt | 9 +++ SHADE_Engine/src/Editor/SHEditorUI.cpp | 2 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 ++ SHADE_Managed/src/Editor/Editor.cxx | 60 ++++++++++++++++--- TempScriptsFolder/RaccoonSpin.cs | 4 ++ 8 files changed, 167 insertions(+), 10 deletions(-) diff --git a/SHADE_CSharp/src/Events/CallbackAction.cs b/SHADE_CSharp/src/Events/CallbackAction.cs index ec34ca5c..968302ed 100644 --- a/SHADE_CSharp/src/Events/CallbackAction.cs +++ b/SHADE_CSharp/src/Events/CallbackAction.cs @@ -57,6 +57,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -130,6 +134,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -204,6 +212,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -279,6 +291,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -355,6 +371,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -432,6 +452,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -510,6 +534,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -589,6 +617,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -669,6 +701,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// @@ -750,6 +786,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// diff --git a/SHADE_CSharp/src/Events/CallbackAction.tt b/SHADE_CSharp/src/Events/CallbackAction.tt index 0b1efb83..fffd4251 100644 --- a/SHADE_CSharp/src/Events/CallbackAction.tt +++ b/SHADE_CSharp/src/Events/CallbackAction.tt @@ -74,6 +74,10 @@ namespace SHADE #region Constructors ------------------------------------------------------------ /// + /// Constructs an empty Callback action. + /// + public CallbackAction() {} + /// /// Constructs a CallbackAction that represents a call to the specified method on the /// specified target. /// diff --git a/SHADE_CSharp/src/Events/CallbackEvent.cs b/SHADE_CSharp/src/Events/CallbackEvent.cs index 7b30a8ec..ec464ba9 100644 --- a/SHADE_CSharp/src/Events/CallbackEvent.cs +++ b/SHADE_CSharp/src/Events/CallbackEvent.cs @@ -22,6 +22,10 @@ namespace SHADE /// public interface ICallbackEvent { + /// + /// Registers an empty ICallbackAction. + /// + void RegisterAction(); /// /// Registers an ICallbackAction with the event such that it will be called in /// future @@ -59,6 +63,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -140,6 +149,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -221,6 +235,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -302,6 +321,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -383,6 +407,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -464,6 +493,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -545,6 +579,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -626,6 +665,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -707,6 +751,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action @@ -788,6 +837,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action diff --git a/SHADE_CSharp/src/Events/CallbackEvent.tt b/SHADE_CSharp/src/Events/CallbackEvent.tt index 74fadd08..6a545601 100644 --- a/SHADE_CSharp/src/Events/CallbackEvent.tt +++ b/SHADE_CSharp/src/Events/CallbackEvent.tt @@ -38,6 +38,10 @@ namespace SHADE /// public interface ICallbackEvent { + /// + /// Registers an empty ICallbackAction. + /// + void RegisterAction(); /// /// Registers an ICallbackAction with the event such that it will be called in /// future @@ -76,6 +80,11 @@ namespace SHADE #region Usage Functions --------------------------------------------------------- /// + public void RegisterAction() + { + actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>()); + } + /// public void RegisterAction(ICallbackAction action) { // Check if valid action diff --git a/SHADE_Engine/src/Editor/SHEditorUI.cpp b/SHADE_Engine/src/Editor/SHEditorUI.cpp index 7107778d..0137b951 100644 --- a/SHADE_Engine/src/Editor/SHEditorUI.cpp +++ b/SHADE_Engine/src/Editor/SHEditorUI.cpp @@ -54,7 +54,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ bool SHEditorUI::CollapsingHeader(const std::string& title) { - return ImGui::CollapsingHeader(title.c_str()); + return ImGui::CollapsingHeader(title.c_str(), ImGuiTreeNodeFlags_DefaultOpen); } void SHEditorUI::SameLine() diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index fea59353..195d8ee3 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -255,6 +255,10 @@ namespace SHADE ..\\bin\\Debug\\SHADE_Managed.dll\n\ ..\\bin\\Release\\SHADE_Managed.dll\n\ \n\ + \n\ + ..\\bin\\Debug\\SHADE_CSharp.dll\n\ + ..\\bin\\Release\\SHADE_CSharp.dll\n\ + \n\ \n\ "; diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index c2b34d44..018a9591 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -286,17 +286,59 @@ namespace SHADE registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal)); } } - else if (field->FieldType->BaseType == ICallbackEvent::typeid) - { - // Needs to present - // - name and param list - // Needs to present for each callbackaction - // - object, methodinfo OR action - // - Ways to add or remove items - } else { - return; + array^ interfaces = field->FieldType->GetInterfaces(); + if (interfaces->Length > 0 && interfaces[0] == ICallbackEvent::typeid) + { + array^ typeArgs = field->FieldType->GenericTypeArguments; + System::String^ title = field->Name + " : CallbackEvent<"; + for (int i = 0; i < typeArgs->Length; ++i) + { + title += typeArgs[i]->Name; + if (i < typeArgs->Length - 1) + title += ", "; + } + title += ">"; + if (SHEditorUI::CollapsingHeader(Convert::ToNative(title))) + { + ICallbackEvent^ callbackEvent = safe_cast(field->GetValue(object)); + if (callbackEvent == nullptr) + { + // Construct one since it was not constructed before + callbackEvent = safe_cast(System::Activator::CreateInstance(field->FieldType)); + } + for each (ICallbackAction ^ action in callbackEvent->Actions) + { + if (action->IsRuntimeAction) + continue; + + if (action->TargetObject == nullptr) + SHEditorUI::Text("Target Object"); + else + SHEditorUI::Text(Convert::ToNative(action->TargetObject->GetType()->Name)); + SHEditorUI::SameLine(); + + if (action->TargetMethodName == nullptr) + SHEditorUI::Text("Target Method Name"); + else + SHEditorUI::Text(Convert::ToNative(action->TargetMethodName)); + } + if (SHEditorUI::Button("Add Action")) + { + callbackEvent->RegisterAction(); + } + } + // Needs to present + // - name and param list + // Needs to present for each callbackaction + // - object, methodinfo OR action + // - Ways to add or remove items + } + else + { + return; + } } // Check if the field has a specific attribute diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs index d6ee1c9f..6bbd1462 100644 --- a/TempScriptsFolder/RaccoonSpin.cs +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -7,6 +7,10 @@ public class RaccoonSpin : Script [Tooltip("Speed of the rotation in radians per second.")] private double RotateSpeed = 1.0; private double rotation = 0.0; + [SerializeField] + private CallbackEvent testEvent; + [SerializeField] + private CallbackEvent testEvent3 = new CallbackEvent(); private Transform Transform; public RaccoonSpin(GameObject gameObj) : base(gameObj) { } From f64f13521b000f2c2dabeae1a2710958f6ea4e5e Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 25 Oct 2022 08:42:51 +0800 Subject: [PATCH 442/793] SHVec to yaml node convert --- Assets/Editor/Layouts/UserLayout.ini | 54 ------- .../src/Serialization/SHSerialization.cpp | 4 + .../Serialization/SHSerializationHelper.hpp | 132 +++++++++++++++--- 3 files changed, 115 insertions(+), 75 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index baced6b8..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,54 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=1920,1012 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,142 -Size=387,918 -Collapsed=0 -DockId=0x00000004,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=1649,48 -Size=271,1012 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=387,92 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=648,48 -Size=2519,1319 -Collapsed=0 -DockId=0x00000002,0 - -[Window][î‹ Viewport] -Pos=389,48 -Size=1258,1012 -Collapsed=0 -DockId=0x00000002,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=387,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1258,1036 CentralNode=1 Selected=0xB41284E7 - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 3804db95..3e569690 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -192,6 +192,10 @@ namespace SHADE { components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(rigidbody); } + if (const auto collisionComp = SHComponentManager::GetComponent_s(eid)) + { + components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(collisionComp); + } node[ComponentsNode] = components; YAML::Node scripts; diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index da98c885..f8b55d7e 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -9,46 +9,125 @@ #include "Math/Vector/SHVec2.h" #include "Math/Vector/SHVec3.h" #include "Math/Vector/SHVec4.h" +#include "Physics/Components/SHColliderComponent.h" + +namespace YAML +{ + using namespace SHADE; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + static constexpr const char* w = "w"; + + static Node encode(SHVec4 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + node[w] = rhs.w; + return node; + } + static bool decode(Node const& node, SHVec4& rhs) + { + if(node[x]) + rhs.x = node[x].as(); + if(node[y]) + rhs.y = node[y].as(); + if(node[z]) + rhs.z = node[z].as(); + if(node[w]) + rhs.w = node[w].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + static constexpr const char* z = "z"; + + static Node encode(SHVec3 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + node[z] = rhs.z; + return node; + } + static bool decode(Node const& node, SHVec3& rhs) + { + if(node[x]) + rhs.x = node[x].as(); + if(node[y]) + rhs.y = node[y].as(); + if(node[z]) + rhs.z = node[z].as(); + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* x = "x"; + static constexpr const char* y = "y"; + + static Node encode(SHVec2 const& rhs) + { + Node node; + node.SetStyle(EmitterStyle::Flow); + node[x] = rhs.x; + node[y] = rhs.y; + return node; + } + static bool decode(Node const& node, SHVec2& rhs) + { + if(node[x]) + rhs.x = node[x].as(); + if(node[y]) + rhs.y = node[y].as(); + return true; + } + }; +} namespace SHADE { struct SHSerializationHelper { - template , bool> = true> - static std::string SerializeComponentToString(ComponentType* component) - { - return std::string(); - } - template , bool> = true> - static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) - { - } static YAML::Node RTTRToNode(const rttr::variant& var) { YAML::Node node; auto varType = var.get_type(); + if(varType.is_sequential_container()) + { + for(auto const& elem : var.create_sequential_view()) + { + node.push_back(RTTRToNode(elem)); + } + } if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; - node["Z"] = var.convert().z; - node["W"] = var.convert().w; + node = YAML::convert::encode(var.convert()); } else if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; - node["Z"] = var.convert().z; + node = YAML::convert::encode(var.convert()); } else if (varType == rttr::type::get()) { - node.SetStyle(YAML::EmitterStyle::Flow); - node["X"] = var.convert().x; - node["Y"] = var.convert().y; + node = YAML::convert::encode(var.convert()); } else if (varType.is_arithmetic()) { @@ -107,6 +186,17 @@ namespace SHADE return node; } + template , bool> = true> + static std::string SerializeComponentToString(ComponentType* component) + { + return std::string(); + } + + template , bool> = true> + static void SerializeComponentToFile(ComponentType* component, std::filesystem::path const& path) + { + } + template , bool> = true> static YAML::Node SerializeComponentToNode(ComponentType* component) { From 869916cb2a94e64050acaadfdd8ae559fba47116 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 25 Oct 2022 13:47:27 +0800 Subject: [PATCH 443/793] Lights WIP --- .../MiddleEnd/Lights/SHLightComponent.cpp | 18 +- .../MiddleEnd/Lights/SHLightComponent.h | 14 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 267 ++++++++++++++---- .../MiddleEnd/Lights/SHLightingSubSystem.h | 39 ++- 4 files changed, 266 insertions(+), 72 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp index e3bcec58..fd122334 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp @@ -10,6 +10,7 @@ namespace SHADE lightData.Reset(); SetType(SH_LIGHT_TYPE::DIRECTIONAL); indexInBuffer = std::numeric_limits::max(); + active = true; Unbind(); } @@ -86,9 +87,17 @@ namespace SHADE MakeDirty(); } - void SHLightComponent::SetBound(void) noexcept - { + void SHLightComponent::SetBound(uint32_t inIndexInBuffer) noexcept +{ bound = true; + indexInBuffer = inIndexInBuffer; + } + + void SHLightComponent::SetActive(bool flag) noexcept + { + MakeDirty(); + active = flag; + } SHLightData const& SHLightComponent::GetLightData(void) const noexcept @@ -106,4 +115,9 @@ namespace SHADE return bound; } + uint32_t SHLightComponent::GetIndexInBuffer(void) const noexcept + { + return indexInBuffer; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h index 3b06a612..20ae3892 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h @@ -23,6 +23,9 @@ namespace SHADE //! If the light's data is already in the buffers, this will be set to true. bool bound; + + //! If the light is active, this is true. + bool active; public: /*-----------------------------------------------------------------------*/ @@ -44,11 +47,14 @@ namespace SHADE void MakeDirty (void) noexcept; void ClearDirtyFlag (void) noexcept; void Unbind (void) noexcept; - void SetBound (void) noexcept; + void SetBound (uint32_t inIndexInBuffer) noexcept; + void SetActive (bool flag) noexcept; + - SHLightData const& GetLightData (void) const noexcept; - bool IsDirty (void) const noexcept; - bool GetBound (void) const noexcept; + SHLightData const& GetLightData (void) const noexcept; + bool IsDirty (void) const noexcept; + bool GetBound (void) const noexcept; + uint32_t GetIndexInBuffer (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 3d39ed89..613d50d3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -7,9 +7,55 @@ #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "SHLightComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" +#include "SHLightComponent.h" namespace SHADE { + /***************************************************************************/ + /*! + + \brief + This function takes an address in the CPU container and writes light + component data to it. What gets written depends on the light type. + + \param address + The address to write to. + + \param lightComp + The light component with the data to write from. + + \param lightType + The type of the light + + \return + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::WriteLightToAddress(void* address, SHLightComponent* lightComp) noexcept + { + auto const& lightData = lightComp->GetLightData(); + switch (lightData.type) + { + case SH_LIGHT_TYPE::DIRECTIONAL: + { + SHDirectionalLightData* lightPtr = reinterpret_cast(address); + + lightPtr->cullingMask = lightData.cullingMask; + lightPtr->direction = lightData.direction; + lightPtr->diffuseColor = lightData.diffuseColor; + break; + } + case SH_LIGHT_TYPE::POINT: + break; + case SH_LIGHT_TYPE::SPOT: + break; + case SH_LIGHT_TYPE::NUM_TYPES: + break; + default: + break; + + } + } /***************************************************************************/ /*! @@ -27,12 +73,8 @@ namespace SHADE // initialize the type lightType = type; - // we want to write to GPU when system runs - dirty = true; - // boilerplate intermediateData = nullptr; - numLights = 0; // initialize alignment lightDataAlignmentSize = logicalDevice->PadSSBOSize(GetLightTypeSize(type)); @@ -46,7 +88,7 @@ namespace SHADE \brief Expands both the CPU container and the GPU buffer when the number of - lights have exceeded + lights have exceeded the capacity. */ /***************************************************************************/ @@ -55,66 +97,46 @@ namespace SHADE // we want to wait for the command buffers to finish using the buffers first logicalDevice->WaitIdle(); - // this is for CPU buffer. - uint32_t structSize = GetLightTypeSize(lightType); - // First time we are initializing lights if (intermediateData == nullptr) { - // num lights should start of at STARTING_NUM_LIGHTS lights - numLights = STARTING_NUM_LIGHTS; + // max lights should start of at STARTING_NUM_LIGHTS lights + maxLights = STARTING_NUM_LIGHTS; + numLights = 0; // Initialize the data for lights - intermediateData = std::make_unique(lightDataAlignmentSize * STARTING_NUM_LIGHTS); + intermediateData = std::make_unique(lightDataAlignmentSize * maxLights); - dataBuffer = logicalDevice->CreateBuffer(numLights * lightDataAlignmentSize, nullptr, numLights * lightDataAlignmentSize, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + // We want to initialize 3 times the amount of data required. + dataBuffer = logicalDevice->CreateBuffer(maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); } else { // save old number of lights - uint32_t const OLD_NUM_LIGHTS = numLights; + uint32_t const OLD_MAX_LIGHTS = maxLights; // before we increase the number of lights, create space to store old data. - std::unique_ptr oldData = std::make_unique(lightDataAlignmentSize * OLD_NUM_LIGHTS); + std::unique_ptr oldData = std::make_unique(lightDataAlignmentSize * OLD_MAX_LIGHTS); // copy data over. - std::memcpy (oldData.get(), intermediateData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); + std::memcpy (oldData.get(), intermediateData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); // now we start to expand.... // double space for lights - numLights *= 2; + maxLights *= 2; // destroy old data and initialize container for double the amount of data. - intermediateData = std::make_unique(lightDataAlignmentSize * numLights); + intermediateData = std::make_unique(lightDataAlignmentSize * maxLights); // copy old data to new container - std::memcpy(intermediateData.get(), oldData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); - - // Resize the GPU buffer - dataBuffer->ResizeReplace(lightDataAlignmentSize * numLights, oldData.get(), lightDataAlignmentSize * OLD_NUM_LIGHTS); + std::memcpy(intermediateData.get(), oldData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); + // Resize the GPU buffer. TODO: Replace with Resize no copy here + dataBuffer->ResizeReplace(maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, oldData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); } - } - - /***************************************************************************/ - /*! - - \brief - This function takes in a light comp in the event that its data has not - been placed in the buffer yet. It also checks if the size of the buffer - is big enough - \param lightComp - - \return - - */ - /***************************************************************************/ - void SHLightingSubSystem::PerTypeData::AddLight(SHLightComponent* lightComp) noexcept - { - } /***************************************************************************/ @@ -162,20 +184,128 @@ namespace SHADE return lightDataAlignmentSize; } + uint32_t SHLightingSubSystem::PerTypeData::GetNumLights(void) const noexcept + { + return numLights; + } + + uint32_t SHLightingSubSystem::PerTypeData::GetMaxLights(void) const noexcept + { + return maxLights; + } + + + /***************************************************************************/ + /*! + + \brief + This function takes in a light comp in the event that its data has not + been placed in the buffer yet. It also checks if the size of the buffer + is big enough to hold the new light. If the buffer is too small, expand + it. + + \param lightComp + The light component to add. + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::AddLight(Handle logicalDevice, SHLightComponent* unboundLight, bool expanded) noexcept + { + if (unboundLight) + { + // capacity is full + if (numLights == maxLights) + { + // expand first + Expand(logicalDevice); + + expanded = true; + } + + // Now that the container is big enough, bind the new light + + // Get address of write location + void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignmentSize * numLights); + + // Write the light data to address + WriteLightToAddress(writeLocation, unboundLight); + + // Set the light component to be bound to that location + unboundLight->SetBound(numLights); + + // Increase light count + ++numLights; + } + } + + /***************************************************************************/ + /*! + + \brief + Modify the data at a specific light address. + + \param lightComp + The light component to write. + + */ + /***************************************************************************/ + void SHLightingSubSystem::PerTypeData::ModifyLight(SHLightComponent* lightComp) noexcept + { + void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignmentSize * lightComp->GetIndexInBuffer()); + WriteLightToAddress(writeLocation, lightComp); + } + + void SHLightingSubSystem::PerTypeData::WriteToGPU(uint32_t frameIndex) noexcept + { + // we want to write to the offset of the current frame + dataBuffer->WriteToMemory(intermediateData.get(), lightDataAlignmentSize * numLights, 0, lightDataAlignmentSize * maxLights * frameIndex); + } + + /***************************************************************************/ + /*! + + \brief + Update descriptor sets. We want to call this everytime we expand buffers. + + \param binding + The binding in the set we want to update. + + */ + /***************************************************************************/ void SHLightingSubSystem::UpdateDescSet(uint32_t binding) noexcept { auto buffer = perTypeData[binding].GetDataBuffer(); // We bind the buffer with the correct desc set binding lightingDataDescSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, - binding, - { &buffer, 1 }, - 0, - perTypeData[binding].GetAlignmentSize()); + binding, + { &buffer, 1 }, + 0, + perTypeData[binding].GetAlignmentSize()); lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, binding); } + /***************************************************************************/ + /*! + + \brief + Computes dynamic offsets. + + */ + /***************************************************************************/ + void SHLightingSubSystem::ComputeDynamicOffsets(void) noexcept + { + for (uint32_t i = 0; i < dynamicOffsets.size(); ++i) + { + auto const& typeData = perTypeData[i]; + for (uint32_t j = 0; j < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++j) + { + dynamicOffsets[i][j] = j * typeData.GetAlignmentSize() * typeData.GetMaxLights(); + } + } + } + /***************************************************************************/ /*! @@ -186,8 +316,10 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::Init(Handle logicalDevice, Handle descPool) noexcept + void SHLightingSubSystem::Init(Handle device, Handle descPool) noexcept { + logicalDevice = device; + std::vector variableSizes{ SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES) }; std::fill (variableSizes.begin(), variableSizes.end(), 1); @@ -197,6 +329,7 @@ namespace SHADE // initialize all the data first. We add more lights here as we add more types. perTypeData[SHUtilities::ToUnderlying(SH_LIGHT_TYPE::DIRECTIONAL)].InitializeData(logicalDevice, SH_LIGHT_TYPE::DIRECTIONAL); UpdateDescSet(SHGraphicsConstants::DescriptorSetBindings::DIRECTIONAL_LIGHT_DATA); + } /***************************************************************************/ @@ -204,33 +337,61 @@ namespace SHADE \brief Loops through every single light component and checks for dirty light - data. If light data is dirty, rewrite to the CPU container and do a - copy to the GPU data. We also check if the per light type data is too small - to handle more lights, if it is, expand buffer (both CPU and GPU). + data. If light data is dirty, rewrite to the CPU container. We also want + to bind the descriptor set for the light data. */ /***************************************************************************/ - void SHLightingSubSystem::Run(void) noexcept + void SHLightingSubSystem::Run(Handle cmdBuffer, uint32_t frameIndex) noexcept { auto& lightComps = SHComponentManager::GetDense(); + bool expanded = false; for (auto& light : lightComps) { + auto enumValue = SHUtilities::ToUnderlying(light.GetLightData().type); + // First we want to make sure the light is already bound to the system. if it // isn't, we write it to the correct buffer. if (!light.GetBound()) { - - - light.SetBound(); + perTypeData[enumValue].AddLight(logicalDevice, &light, expanded); } // if there was modification to the light data if (light.IsDirty()) { - + // Write the data to the CPU + perTypeData[enumValue].ModifyLight(&light); + + // Light is now updated in the container + light.ClearDirtyFlag(); } } + // Write data to GPU + for (auto& data : perTypeData) + { + data.WriteToGPU(frameIndex); + } + + // If any of the buffers got expanded, the descriptor set is invalid because the expanded buffer + // is a new buffer. If some expansion was detected, update descriptor sets. + if (expanded) + { + uint32_t numLightTyes = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + for (uint32_t i = 0; i < numLightTyes; ++i) + { + UpdateDescSet(i); + } + } + + // compute dynamic offsets. We don't actually have to compute every frame but its pretty lightweight, + // so we do it anyway. #NoteToSelf: if at any point it affects performance, do a check before computing. + ComputeDynamicOffsets(); + + // Bind descriptor set (We bind at an offset because the buffer holds NUM_FRAME_BUFFERS sets of data). + cmdBuffer->BindDescriptorSet(lightingDataDescSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, {dynamicOffsets[frameIndex]}); + } /***************************************************************************/ @@ -245,6 +406,4 @@ namespace SHADE { } - - } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h index 4c99354f..e5336b4e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -4,6 +4,7 @@ #include "Math/Vector/SHVec3.h" #include "Math/Vector/SHVec4.h" #include "SHLightData.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" namespace SHADE { @@ -12,6 +13,8 @@ namespace SHADE class SHVkDescriptorSetGroup; class SHVkDescriptorSetLayout; class SHVkBuffer; + class SHLightComponent; + class SHVkCommandBuffer; // Represents how the data will be interpreted in GPU. we want to copy to a container of these before passing to GPU. struct SHDirectionalLightData @@ -19,6 +22,9 @@ namespace SHADE //! Direction of the light SHVec3 direction; + //! Represents if the light is active or not + uint32_t active; + //! Each bit in this 32 bit field will represent a layer. If the bit is set, //! when a fragment is being evaluated, the shader will use the fragment's //! layer value to AND with the light's. If result is 1, do lighting calculations. @@ -29,7 +35,7 @@ namespace SHADE }; - class SHLightingSubSystem + class SH_API SHLightingSubSystem { private: @@ -44,6 +50,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER VARIABLES */ /*-----------------------------------------------------------------------*/ + //! Capacity of the container. + uint32_t maxLights; //! SSBOs need to be aligned. This is to pad lighting structs uint32_t lightDataAlignmentSize; @@ -54,23 +62,24 @@ namespace SHADE //! number of lights currently alive. uint32_t numLights; - //! if intermediateData has been modified(i.e. any 1 light's data is changed), set to true. - bool dirty; - //! GPU buffer required to store GPU data Handle dataBuffer; //! Before data gets copied to the GPU, it goes into here first. Data here is aligned to whatever struct is - //! used to represent data in this container. + //! used to represent data in this container. Note this will store only 1 copy of all the lights, compared + //! to the GPU that stores NUM_FRAME_BUFFERS copies. std::unique_ptr intermediateData; + void WriteLightToAddress (void* address, SHLightComponent* lightComp) noexcept; public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void InitializeData (Handle logicalDevice, SH_LIGHT_TYPE type) noexcept; void Expand (Handle logicalDevice) noexcept; - void AddLight (SHLightComponent* lightComp) noexcept; + void AddLight (Handle logicalDevice, SHLightComponent* unboundLight, bool expanded) noexcept; + void ModifyLight (SHLightComponent* lightComp) noexcept; + void WriteToGPU (uint32_t frameIndex) noexcept; /*-----------------------------------------------------------------------*/ /* GETTERS */ @@ -78,31 +87,37 @@ namespace SHADE static uint32_t GetLightTypeSize (SH_LIGHT_TYPE type) noexcept; Handle GetDataBuffer (void) const noexcept; uint32_t GetAlignmentSize (void) const noexcept; + uint32_t GetNumLights (void) const noexcept; + uint32_t GetMaxLights (void) const noexcept; }; private: //! logical device used for creation - Handle logicalDevice; + Handle logicalDevice; //! The descriptor set that will hold the lighting data. Each binding will hold a buffer, NUM_FRAMES times the size required. - Handle lightingDataDescSet; + Handle lightingDataDescSet; //! Each type will have some data associated with it for processing - std::array(SH_LIGHT_TYPE::NUM_TYPES)> perTypeData; + std::array(SH_LIGHT_TYPE::NUM_TYPES)> perTypeData; + + //! Container to store dynamic offsets for binding descriptor sets + std::array, static_cast(SHGraphicsConstants::NUM_FRAME_BUFFERS)> dynamicOffsets; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void UpdateDescSet (uint32_t binding) noexcept; + void UpdateDescSet (uint32_t binding) noexcept; + void ComputeDynamicOffsets (void) noexcept; public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void Init (Handle logicalDevice, Handle descPool) noexcept; - void Run (void) noexcept; + void Init (Handle device, Handle descPool) noexcept; + void Run (Handle cmdBuffer, uint32_t frameIndex) noexcept; void Exit (void) noexcept; }; From c2e51dc603118eb025aa95b4fcf64f44cc5cfca9 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 14:31:28 +0800 Subject: [PATCH 444/793] Fixed deletion crash caused by Renderables --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 74 ++++++++++++------- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 +- .../MiddleEnd/Interface/SHRenderable.cpp | 24 +++--- .../MiddleEnd/Interface/SHRenderable.h | 4 +- 5 files changed, 67 insertions(+), 41 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 40826047..24dd76c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -59,7 +59,7 @@ namespace SHADE } // Add renderable in - subBatch->Renderables.insert(renderable); + subBatch->Renderables.insert(renderable->GetEID()); // Also add material instance in referencedMatInstances.insert(renderable->GetMaterial()); @@ -80,27 +80,34 @@ namespace SHADE if (subBatch == subBatches.end()) return; - subBatch->Renderables.erase(renderable); + subBatch->Renderables.erase(renderable->GetEID()); // Check if other renderables in subBatches contain the same material instance bool matUnused = true; for (const auto& sb : subBatches) - for (const auto& rend : sb.Renderables) + for (const auto& rendId : sb.Renderables) { - if (rend->GetMaterial() == renderable->GetMaterial()) + auto rend = SHComponentManager::GetComponent(rendId); + if (rend) { - matUnused = false; - break; + if (rend->GetMaterial() == renderable->GetMaterial()) + { + matUnused = false; + break; + } + } + else + { + SHLOG_WARNING("[SHBatch] Entity with a missing SHRenderable found!"); } } // Material is no longer in this library, so we remove it if (matUnused) - referencedMatInstances.erase(renderable->GetMaterial()); + referencedMatInstances.erase(renderable->WasMaterialChanged() ? renderable->GetPrevMaterial() : renderable->GetMaterial()); // Mark all as dirty - for (bool& dirt : isDirty) - dirt = true; + setAllDirtyFlags(); } void SHBatch::Clear() @@ -162,9 +169,17 @@ namespace SHADE // Build CPU Buffer char* propsCurrPtr = matPropsData.get(); for (auto& subBatch : subBatches) - for (const SHRenderable* renderable : subBatch.Renderables) + for (auto rendId : subBatch.Renderables) { - renderable->GetMaterial()->ExportProperties(propsCurrPtr); + const SHRenderable* renderable = SHComponentManager::GetComponent(rendId); + if (renderable) + { + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + } + else + { + SHLOG_WARNING("[SHBatch] Entity with a missing SHRenderable found!"); + } propsCurrPtr += singleMatPropAlignedSize; } @@ -188,18 +203,18 @@ namespace SHADE // Populate on the CPU for (auto& subBatch : subBatches) - for (const SHRenderable* renderable : subBatch.Renderables) + for (auto rendId : subBatch.Renderables) { // Transform - auto transform = SHComponentManager::GetComponent(renderable->GetEID()); - if (!transform) + auto transform = SHComponentManager::GetComponent(rendId); + if (transform) { - SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); - transformData.emplace_back(); + transformData.emplace_back(transform->GetTRS()); } else { - transformData.emplace_back(transform->GetTRS()); + SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); + transformData.emplace_back(); } } @@ -221,10 +236,10 @@ namespace SHADE // Populate on the CPU for (auto& subBatch : subBatches) - for (const SHRenderable* renderable : subBatch.Renderables) - { - eidData.emplace_back(renderable->GetEID()); - } + for (auto rendId : subBatch.Renderables) + { + eidData.emplace_back(rendId); + } // Transfer to GPU if (eidBuffer[frameIndex]) @@ -305,11 +320,10 @@ namespace SHADE }); // Fill in buffers (CPU) - for (const SHRenderable* renderable : subBatch.Renderables) + for (auto rendId : subBatch.Renderables) { // Transform - EntityID eid = renderable->GetEID(); - auto transform = SHComponentManager::GetComponent_s(eid); + auto transform = SHComponentManager::GetComponent_s(rendId); if (!transform) { SHLOG_WARNING("[SHBatch] Entity contianing a SHRenderable with no SHTransformComponent found!"); @@ -320,12 +334,20 @@ namespace SHADE transformData.emplace_back(transform->GetTRS()); } - eidData.emplace_back(eid); + eidData.emplace_back(rendId); // Material Properties if (!EMPTY_MAT_PROPS) { - renderable->GetMaterial()->ExportProperties(propsCurrPtr); + const SHRenderable* renderable = SHComponentManager::GetComponent(rendId); + if (renderable) + { + renderable->GetMaterial()->ExportProperties(propsCurrPtr); + } + else + { + SHLOG_WARNING("[SHBatch] Entity with a missing SHRenderable found!"); + } propsCurrPtr += singleMatPropAlignedSize; } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index 193fff0d..fa18fad5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -55,7 +55,7 @@ namespace SHADE /* Data Members */ /*-----------------------------------------------------------------------------*/ Handle Mesh; - std::unordered_set Renderables; + std::unordered_set Renderables; }; /***********************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7ecd92d2..4280cafd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -677,10 +677,10 @@ namespace SHADE continue; // Remove from old material's SuperBatch - Handle prevMaterial = renderable.GetPrevMaterial(); + Handle prevMaterial = renderable.GetPrevMaterial(); if (prevMaterial) { - Handle oldSuperBatch = prevMaterial->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + Handle oldSuperBatch = prevMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); oldSuperBatch->Remove(&renderable); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 0b1c1b66..9dcd391d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -31,15 +31,16 @@ namespace SHADE void SHRenderable::OnDestroy() { + // Remove from SuperBatch + Handle superBatch = sharedMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); + superBatch->Remove(this); + + // Free resources if (material) { material.Free(); material = {}; } - - // Remove from SuperBatch - Handle superBatch = sharedMaterial->GetBaseMaterial()->GetPipeline()->GetPipelineState().GetSubpass()->GetSuperBatch(); - superBatch->Remove(this); } /*-----------------------------------------------------------------------------------*/ @@ -51,20 +52,23 @@ namespace SHADE if (!material && sharedMaterial == materialInstance) return; + // Flag that material was changed + materialChanged = true; + // Free copies of materials if any if (material) { + oldMaterial = material; material.Free(); material = {}; } - - // Flag that material was changed - materialChanged = true; - if (sharedMaterial) - oldMaterial = sharedMaterial->GetBaseMaterial(); + else if (sharedMaterial) + { + oldMaterial = sharedMaterial; + } // Update the material - sharedMaterial = materialInstance; + sharedMaterial = materialInstance; } Handle SHRenderable::GetMaterial() const diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index bc885ca2..5312cf82 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -55,7 +55,7 @@ namespace SHADE /* Getter Functions */ /*-------------------------------------------------------------------------------*/ bool WasMaterialChanged() const noexcept { return materialChanged; } - Handle GetPrevMaterial() const noexcept { return oldMaterial; } + Handle GetPrevMaterial() const noexcept { return oldMaterial; } /*-------------------------------------------------------------------------------*/ /* Batcher Dispatcher Functions */ @@ -74,7 +74,7 @@ namespace SHADE Handle sharedMaterial; Handle material; bool materialChanged = true; - Handle oldMaterial; + Handle oldMaterial; }; } From 8466309e2fc43119e56708348d2999d346442ba8 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 25 Oct 2022 15:09:45 +0800 Subject: [PATCH 445/793] Serialize/Deserialize SHCollider & SHColliderComponent --- .../HierarchyPanel/SHHierarchyPanel.cpp | 29 ++- .../HierarchyPanel/SHHierarchyPanel.h | 4 +- .../src/Serialization/SHSerialization.cpp | 12 +- .../Serialization/SHSerializationHelper.hpp | 203 ++++++++++++++++-- 4 files changed, 221 insertions(+), 27 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 27e46d98..5d7b6a81 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -48,15 +48,28 @@ namespace SHADE if (Begin()) { + if(skipFrame) + { + ImGui::End(); + skipFrame = false; + return; + } DrawMenuBar(); auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - if(const auto root = sceneGraph.GetRoot()) + + if (const auto root = sceneGraph.GetRoot()) { auto const& children = root->GetChildren(); - + for (const auto child : children) { - RecursivelyDrawEntityNode(child); + if(child) + RecursivelyDrawEntityNode(child); + if(skipFrame) + { + ImGui::End(); + return; + } } } else @@ -120,8 +133,10 @@ namespace SHADE } } - ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* currentNode) + ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* const currentNode) { + if(currentNode == nullptr) + return {}; auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); //Get node data (Children, eid, selected) @@ -193,10 +208,16 @@ namespace SHADE if(ImGui::Selectable("Paste")) { SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard())); + skipFrame = true; + ImGui::EndPopup(); + if(isNodeOpen) + ImGui::TreePop(); + return nodeRect; } if(ImGui::Selectable("Paste as Child")) { SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), eid)); + skipFrame = true; } if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 0cfe6474..8fae5d6d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -26,10 +26,12 @@ namespace SHADE void SetScrollTo(EntityID eid); private: void DrawMenuBar() const noexcept; - ImRect RecursivelyDrawEntityNode(SHSceneNode*); + ImRect RecursivelyDrawEntityNode(SHSceneNode* const); void CreateChildEntity(EntityID parentEID) const noexcept; void ParentSelectedEntities(EntityID parentEID) const noexcept; void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); + + bool skipFrame = false; std::string filter; bool isAnyNodeSelected = false; EntityID scrollTo = MAX_EID; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 3e569690..31b15409 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -85,6 +85,8 @@ namespace SHADE // Deserialise scripts if (node[ScriptsNode]) SHSystemManager::GetSystem()->DeserialiseScripts(eid, node[ScriptsNode]); + + return eid; } void SHSerialization::DeserializeSceneFromFile(std::filesystem::path const& path) @@ -192,9 +194,9 @@ namespace SHADE { components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(rigidbody); } - if (const auto collisionComp = SHComponentManager::GetComponent_s(eid)) + if (auto collisionComp = SHComponentManager::GetComponent_s(eid)) { - components[rttr::type::get().get_name().data()] = SHSerializationHelper::SerializeComponentToNode(collisionComp); + components[rttr::type::get().get_name().data()] = YAML::convert::encode(*collisionComp); } node[ComponentsNode] = components; @@ -254,6 +256,10 @@ namespace SHADE if (id.has_value()) componentIDList.push_back(id.value()); + id = GetComponentID(componentsNode); + if(id.has_value()) + componentIDList.push_back(id.value()); + return componentIDList; } @@ -263,5 +269,7 @@ namespace SHADE if (!componentsNode) return; SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); + SHSerializationHelper::InitializeComponentFromNodeData(componentsNode, eid); } } diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index f8b55d7e..6d52df7d 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -35,13 +35,13 @@ namespace YAML } static bool decode(Node const& node, SHVec4& rhs) { - if(node[x]) + if (node[x]) rhs.x = node[x].as(); - if(node[y]) + if (node[y]) rhs.y = node[y].as(); - if(node[z]) + if (node[z]) rhs.z = node[z].as(); - if(node[w]) + if (node[w]) rhs.w = node[w].as(); return true; } @@ -65,11 +65,11 @@ namespace YAML } static bool decode(Node const& node, SHVec3& rhs) { - if(node[x]) + if (node[x]) rhs.x = node[x].as(); - if(node[y]) + if (node[y]) rhs.y = node[y].as(); - if(node[z]) + if (node[z]) rhs.z = node[z].as(); return true; } @@ -91,13 +91,162 @@ namespace YAML } static bool decode(Node const& node, SHVec2& rhs) { - if(node[x]) + if (node[x]) rhs.x = node[x].as(); - if(node[y]) + if (node[y]) rhs.y = node[y].as(); return true; } }; + + template<> + struct convert + { + static constexpr const char* IsTrigger = "Is Trigger"; + + static constexpr const char* Type = "Type"; + static constexpr const char* HalfExtents = "Half Extents"; + static constexpr const char* Radius = "Radius"; + + static constexpr const char* Friction = "Friction"; + static constexpr const char* Bounciness = "Bounciness"; + static constexpr const char* Density = "Density"; + static constexpr const char* PositionOffset = "Position Offset"; + + static Node encode(SHCollider& rhs) + { + Node node; + node[IsTrigger] = rhs.IsTrigger(); + + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + SHCollider::Type colliderType = rhs.GetType(); + + node[Type] = enumAlign.value_to_name(colliderType).data(); + + switch (colliderType) + { + case SHCollider::Type::BOX: + { + auto const bb = reinterpret_cast(rhs.GetShape()); + node[HalfExtents] = bb->GetHalfExtents(); + } + break; + case SHCollider::Type::SPHERE: + { + auto const bs = reinterpret_cast(rhs.GetShape()); + node[Radius] = bs->GetRadius(); + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + + node[Friction] = rhs.GetFriction(); + node[Bounciness] = rhs.GetBounciness(); + node[Density] = rhs.GetDensity(); + node[PositionOffset] = rhs.GetPositionOffset(); + + return node; + } + static bool decode(Node const& node, SHCollider& rhs) + { + if (node[IsTrigger]) + rhs.SetIsTrigger(node[IsTrigger].as()); + if (!node[Type]) + return false; + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok; + const SHCollider::Type colliderType = enumAlign.name_to_value(node[Type].as()).convert(&ok); + if (!ok) + return false; + switch (colliderType) + { + case SHCollider::Type::BOX: + { + if(auto const bb = dynamic_cast(rhs.GetShape()); bb) + { + if (node[HalfExtents]) + { + bb->SetHalfExtents(node[HalfExtents].as()); + } + } + } + break; + case SHCollider::Type::SPHERE: + { + if(auto const bs = dynamic_cast(rhs.GetShape()); bs) + { + if (node[Radius]) + { + bs->SetRadius(node[Radius].as()); + } + } + } + break; + case SHCollider::Type::CAPSULE: break; + default:; + } + if (node[Friction]) + rhs.SetFriction(node[Friction].as()); + if (node[Bounciness]) + rhs.SetBounciness(rhs.GetBounciness()); + if (node[Density]) + rhs.SetDensity(node[Density].as()); + if (node[PositionOffset]) + rhs.SetPositionOffset(node[PositionOffset].as()); + + return true; + } + }; + + template<> + struct convert + { + static constexpr const char* Colliders = "Colliders"; + static Node encode(SHColliderComponent& rhs) + { + Node node, collidersNode; + auto const& colliders = rhs.GetColliders(); + int const numColliders = static_cast(colliders.size()); + for (int i = 0; i < numColliders; ++i) + { + auto& collider = rhs.GetCollider(i); + Node colliderNode = convert::encode(collider); + if (colliderNode.IsDefined()) + collidersNode[i] = colliderNode; + } + node[Colliders] = collidersNode; + return node; + } + static bool decode(Node const& node, SHColliderComponent& rhs) + { + if(node.IsNull()) + return false; + if (node[Colliders]) + { + int numColliders{}; + for (auto const& colliderNode : node[Colliders]) + { + rttr::type const shapeRttrType = rttr::type::get(); + rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); + bool ok; + const SHCollider::Type colliderType = enumAlign.name_to_value(colliderNode[convert::Type].as()).convert(&ok); + if (!ok) + return false; + switch (colliderType) + { + case SHCollider::Type::BOX: rhs.AddBoundingBox(); break; + case SHCollider::Type::SPHERE: rhs.AddBoundingSphere(); break; + case SHCollider::Type::CAPSULE: break; + default:; + } + rhs.GetCollider(numColliders++) = colliderNode.as(); + } + } + } + }; } namespace SHADE @@ -110,11 +259,11 @@ namespace SHADE { YAML::Node node; auto varType = var.get_type(); - if(varType.is_sequential_container()) + if (varType.is_sequential_container()) { - for(auto const& elem : var.create_sequential_view()) + for (auto const& elem : var.create_sequential_view()) { - node.push_back(RTTRToNode(elem)); + node.push_back(RTTRToNode(elem)); } } if (varType == rttr::type::get()) @@ -178,7 +327,7 @@ namespace SHADE else { auto properties = var.get_type().get_properties(); - for (auto property : properties) + for (auto const& property : properties) { node[property.get_name().data()] = RTTRToNode(property.get_value(var)); } @@ -186,7 +335,7 @@ namespace SHADE return node; } - template , bool> = true> + template , bool> = true> static std::string SerializeComponentToString(ComponentType* component) { return std::string(); @@ -216,17 +365,17 @@ namespace SHADE auto propType = prop.get_type(); if (propType == rttr::type::get()) { - SHVec4 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as(), propertyNode["W"].as() }; + SHVec4 vec = propertyNode.as(); prop.set_value(component, vec); } else if (propType == rttr::type::get()) { - SHVec3 vec{ propertyNode["X"].as(), propertyNode["Y"].as(), propertyNode["Z"].as() }; + SHVec3 vec = propertyNode.as(); prop.set_value(component, vec); } else if (propType == rttr::type::get()) { - SHVec2 vec{ propertyNode["X"].as(), propertyNode["Y"].as() }; + SHVec2 vec = propertyNode.as(); prop.set_value(component, vec); } else if (propType.is_arithmetic()) @@ -263,7 +412,7 @@ namespace SHADE else { auto properties = propType.get_properties(); - for (auto property : properties) + for (auto const& property : properties) { InitializeProperty(component, property, propertyNode[property.get_name().data()]); } @@ -273,7 +422,7 @@ namespace SHADE template , bool> = true> static void InitializeComponentFromNode(YAML::Node const& componentsNode, EntityID const& eid) { - auto component = SHComponentManager::GetComponent_s(eid); + ComponentType* component = SHComponentManager::GetComponent_s(eid); if (componentsNode.IsNull() && !component) return; auto rttrType = rttr::type::get(); @@ -283,12 +432,26 @@ namespace SHADE auto properties = rttrType.get_properties(); for (auto const& prop : properties) { - if (componentNode[prop.get_name().data()]) + + if (componentNode[prop.get_name().data()].IsDefined()) { InitializeProperty(component, prop, componentNode[prop.get_name().data()]); } } } + template , bool> = true> + static void InitializeComponentFromNodeData(YAML::Node const& componentsNode, EntityID const& eid) + { + ComponentType* component = SHComponentManager::GetComponent_s(eid); + if (componentsNode.IsNull() && !component) + return; + auto rttrType = rttr::type::get(); + auto componentNode = componentsNode[rttrType.get_name().data()]; + if (componentsNode.IsNull()) + return; + YAML::convert::decode(componentNode, *component); + } + }; } From 9f98bed4d15b85bd8aae1a6909e4045030fc278e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 15:11:01 +0800 Subject: [PATCH 446/793] Fixed batching renedering the wrong number of instances --- SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 24dd76c5..012d9526 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -310,14 +310,16 @@ namespace SHADE for (auto& subBatch : subBatches) { // Create command + const uint32_t CURR_INSTANCES = static_cast(subBatch.Renderables.size()); drawData.emplace_back(vk::DrawIndexedIndirectCommand { .indexCount = subBatch.Mesh->IndexCount, - .instanceCount = static_cast(subBatch.Renderables.size()), + .instanceCount = CURR_INSTANCES, .firstIndex = subBatch.Mesh->FirstIndex, .vertexOffset = subBatch.Mesh->FirstVertex, - .firstInstance = nextInstanceIndex++ + .firstInstance = nextInstanceIndex }); + nextInstanceIndex += CURR_INSTANCES; // Fill in buffers (CPU) for (auto rendId : subBatch.Renderables) From da167ec3a58acff2152dd633edd86e994e59851f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 15:39:18 +0800 Subject: [PATCH 447/793] Added .editorconfig to enforce 2-spacing indentation --- .editorconfig | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..29c5e400 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,5 @@ +root = true + +[*.{c,cpp,h,hpp}] +indent_style = space +indent_size = 2 \ No newline at end of file From b4726ae99272813ff2dbef49b7faa511ce30592f Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 25 Oct 2022 15:43:36 +0800 Subject: [PATCH 448/793] Removed Shader source library, changed header and enum type locations --- .../src/Assets/Asset Types/SHShaderAsset.h | 9 ++++++++- .../MiddleEnd/Shaders/SHShaderModuleLibrary.cpp | 1 + .../MiddleEnd/Shaders/SHShaderModuleLibrary.h | 1 - .../src/Graphics/MiddleEnd/Shaders/SHShaderType.h | 15 --------------- 4 files changed, 9 insertions(+), 17 deletions(-) delete mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h diff --git a/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h index 2fdf0cb6..47681d79 100644 --- a/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h +++ b/SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.h @@ -13,10 +13,17 @@ #include "SHAssetData.h" #include "SH_API.h" #include -#include "Graphics/MiddleEnd/Shaders/SHShaderType.h" namespace SHADE { + enum class SH_SHADER_TYPE : uint8_t + { + VERTEX, + FRAGMENT, + COMPUTE, + INAVLID_TYPE + }; + struct SH_API SHShaderAsset : SHAssetData { /*-----------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp index 23d6323c..7fa5168d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp @@ -1,6 +1,7 @@ #include "SHPch.h" #include "SHShaderModuleLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Assets/Asset Types/SHShaderAsset.h" namespace SHADE { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h index ed942833..aba3a16c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h @@ -2,7 +2,6 @@ #define SH_SHADER_MODULE_LIBRARY_H #include "Graphics/Shaders/SHVkShaderModule.h" -#include "SHShaderSourceLibrary.h" #include namespace SHADE diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h deleted file mode 100644 index 77f79f09..00000000 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderType.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef SH_SHADER_TYPE_H -#define SH_SHADER_TYPE_H - -namespace SHADE -{ - enum class SH_SHADER_TYPE : uint8_t - { - VERTEX, - FRAGMENT, - COMPUTE, - INAVLID_TYPE - }; -} - -#endif From 3bdc48260f84e3a7f6641e7585143964acd4ae3e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 16:55:50 +0800 Subject: [PATCH 449/793] Improved CallbackEvent inspector --- SHADE_Managed/src/Editor/Editor.cxx | 46 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx index 018a9591..1097e203 100644 --- a/SHADE_Managed/src/Editor/Editor.cxx +++ b/SHADE_Managed/src/Editor/Editor.cxx @@ -197,7 +197,7 @@ namespace SHADE void Editor::renderScriptInInspector(Entity entity, Script^ script, int index) { // Constants - const std::string LABEL = Convert::ToNative(script->GetType()->Name); + const std::string LABEL = Convert::ToNative(script->GetType()->Name); // Header SHEditorUI::PushID(index); @@ -302,6 +302,10 @@ namespace SHADE title += ">"; if (SHEditorUI::CollapsingHeader(Convert::ToNative(title))) { + // Constants + const std::string LABEL = Convert::ToNative(field->Name); + SHEditorUI::PushID(LABEL); + ICallbackEvent^ callbackEvent = safe_cast(field->GetValue(object)); if (callbackEvent == nullptr) { @@ -313,27 +317,39 @@ namespace SHADE if (action->IsRuntimeAction) continue; - if (action->TargetObject == nullptr) - SHEditorUI::Text("Target Object"); - else - SHEditorUI::Text(Convert::ToNative(action->TargetObject->GetType()->Name)); + // Attempt to get the object if any + int entityId = static_cast(-1); + if (action->TargetObject) + { + Script^ script = safe_cast(action->TargetObject); + if (script) + { + entityId = static_cast(script->Owner.GetEntity()); + } + } + SHEditorUI::InputInt("", entityId); SHEditorUI::SameLine(); - - if (action->TargetMethodName == nullptr) - SHEditorUI::Text("Target Method Name"); - else - SHEditorUI::Text(Convert::ToNative(action->TargetMethodName)); + System::String^ methodName = ""; + if (action->TargetMethodName != nullptr) + { + methodName = action->TargetMethodName; + } + std::string methodNameNative = Convert::ToNative(methodName); + SHEditorUI::InputTextField("", methodNameNative); + SHEditorUI::SameLine(); + if (SHEditorUI::Button("-")) + { + callbackEvent->DeregisterAction(action); + break; + } } if (SHEditorUI::Button("Add Action")) { callbackEvent->RegisterAction(); } + + SHEditorUI::PopID(); } - // Needs to present - // - name and param list - // Needs to present for each callbackaction - // - object, methodinfo OR action - // - Ways to add or remove items } else { From 0acd6a99a43fd3a3e51cf2abc5fb7d13ed6af725 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 25 Oct 2022 17:08:15 +0800 Subject: [PATCH 450/793] Tweaks to editor widgets --- .../HierarchyPanel/SHHierarchyPanel.cpp | 3 +- .../Inspector/SHEditorComponentView.hpp | 21 +++-- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 84 ++++++++++++++++--- 3 files changed, 87 insertions(+), 21 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 972d4ae3..f2f8d927 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -93,8 +93,7 @@ namespace SHADE { if (ImGui::BeginMenuBar()) { - - ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 40.0f); + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x * 0.75f); if(ImGui::SmallButton(ICON_MD_DESELECT)) { auto editor = SHSystemManager::GetSystem(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 0bbbe0dd..7fa39d74 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -52,7 +52,7 @@ namespace SHADE if (!component) return; const auto componentType = rttr::type::get(*component); - SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -93,7 +93,7 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin && metaMax) { - SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); } else { @@ -119,7 +119,7 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, "%zu"); } else { @@ -132,7 +132,7 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMin.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMax.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, "%zu"); } else { @@ -145,7 +145,7 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, "%zu"); } else { @@ -156,13 +156,18 @@ namespace SHADE { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); + float min{}, max{}; + if(metaMin.is_valid()) + min = std::max(metaMin.template get_value(), -FLT_MAX * 0.5f); + if(metaMax.is_valid()) + max = std::min(metaMax.template get_value(), FLT_MAX * 0.5f); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderFloat(property.get_name().data(), metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderFloat(property.get_name().data(), min, max, [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); } else { - SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); + SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, "Test"); } } else if (type == rttr::type::get()) @@ -171,7 +176,7 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMin.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }); } else { diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index dc65d6c2..4a299d25 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -203,7 +203,7 @@ namespace SHADE } static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec2 values = get(); @@ -217,12 +217,20 @@ namespace SHADE } if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) startRecording = false; - + if(!tooltip.empty()) + { + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return changed; } static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); @@ -241,12 +249,20 @@ namespace SHADE { startRecording = false; } - + if(!tooltip.empty()) + { + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return changed; } static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); @@ -262,7 +278,15 @@ namespace SHADE { startRecording = false; } - + if(!tooltip.empty()) + { + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return changed; } @@ -270,14 +294,38 @@ namespace SHADE //|| Widget Extensions || //#==============================================================# - static bool CheckBox(std::string const& label, std::function get, std::function set) + static void TextLabel(std::string_view const& text, bool sameLine = true) + { + const ImVec2 textSize = ImGui::CalcTextSize(text.data(), NULL, true); + if(textSize.x > 0.0f) + { + ImGui::Text(text.data()); + ImGui::SameLine(); + } + } + + static bool CheckBox(std::string_view const& label, std::function get, std::function set, std::string_view const& tooltip = {}) { bool value = get(); - if (ImGui::Checkbox(label.c_str(), &value)) + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + if (ImGui::Checkbox("##", &value)) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); return true; } + ImGui::PopID(); + ImGui::EndGroup(); + if(!tooltip.empty()) + { + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return false; } @@ -331,11 +379,14 @@ namespace SHADE return hasChange; } - static bool DragFloat(const std::string& fieldLabel, std::function get, std::function set, + static bool DragFloat(const std::string_view& label, std::function get, std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, float p_min = float(), float p_max = float(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { float value = get(); - const bool hasChange = ImGui::DragFloat(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + const bool hasChange = ImGui::DragFloat("##", &value, speed, p_min, p_max, displayFormat, flags); static bool startRecording = false; if (hasChange) { @@ -347,6 +398,17 @@ namespace SHADE { startRecording = false; } + ImGui::PopID(); + ImGui::EndGroup(); + if(!tooltip.empty()) + { + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return hasChange; } @@ -389,7 +451,7 @@ namespace SHADE return changed; } - static bool SliderFloat(const std::string& fieldLabel, float min, float max, std::function get, std::function set, + static bool SliderFloat(const std::string& fieldLabel, float const& min, float const& max, std::function get, std::function set, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { float value = get(); From 53fc0c970ca0a2d0f27b23b76bac7d3e97e965bd Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 25 Oct 2022 17:30:11 +0800 Subject: [PATCH 451/793] Added a DegreesToRadians when setting rotation of camera comp --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 7 ++++--- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 5d49c887..f2cb4ead 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -4,6 +4,7 @@ #include "SHCameraSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Math/SHMath.h" namespace SHADE { @@ -28,7 +29,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{rotation.x,yaw, rotation.z}); + transform->SetWorldRotation(SHVec3{rotation.x,SHMath::DegreesToRadians(yaw), rotation.z}); } dirtyView = true; } @@ -40,7 +41,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{ pitch,rotation.y, rotation.z }); + transform->SetWorldRotation(SHVec3{ SHMath::DegreesToRadians(pitch),rotation.y, rotation.z }); } dirtyView = true; } @@ -52,7 +53,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, roll}); + transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, SHMath::DegreesToRadians(roll)}); } dirtyView = true; } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 07995fc5..66018495 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -69,7 +69,7 @@ namespace SHADE if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { - std::cout << "Camera movement: "<UpdateCameraComponent(system->editorCamera); } From 416c571fd2259bb616a04648f249985ec6ee6f03 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 25 Oct 2022 17:40:13 +0800 Subject: [PATCH 452/793] Added proper deletion of VKSamplers --- SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp index 4300f2bd..7443b6e2 100644 --- a/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp +++ b/SHADE_Engine/src/Graphics/Images/SHVkSampler.cpp @@ -49,7 +49,7 @@ namespace SHADE SHVkSampler::~SHVkSampler() noexcept { if (vkSampler) - device->GetVkLogicalDevice().destroySampler(); + device->GetVkLogicalDevice().destroySampler(vkSampler); } /*-----------------------------------------------------------------------------------*/ From d1d64ec167ff76e727057d2e0725d36575ae459f Mon Sep 17 00:00:00 2001 From: Glence Date: Tue, 25 Oct 2022 18:48:45 +0800 Subject: [PATCH 453/793] added tooltips for the rest of the widgets --- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 178 ++++++++++++++++---- 1 file changed, 144 insertions(+), 34 deletions(-) diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 4a299d25..b54a6799 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -157,7 +157,7 @@ namespace SHADE } template - static bool DragN(const std::string& fieldLabel, std::vectorconst& componentLabels, + static bool DragN(const std::string& label, std::vectorconst& componentLabels, std::vector values, float speed = 0.1f, const char* displayFormat = "", T valueMin = T(), T valueMax = T(), ImGuiSliderFlags flags = 0, bool* isHovered = nullptr) { @@ -168,11 +168,11 @@ namespace SHADE const ImGuiContext& g = *GImGui; bool valueChanged = false; ImGui::BeginGroup(); - ImGui::PushID(fieldLabel.c_str()); + ImGui::PushID(label.c_str()); PushMultiItemsWidthsAndLabels(componentLabels, 0.0f); ImGui::BeginColumns("DragVecCol", 2, ImGuiOldColumnFlags_NoBorder | ImGuiOldColumnFlags_NoResize); ImGui::SetColumnWidth(-1, 80.0f); - ImGui::Text(fieldLabel.c_str()); + ImGui::Text(label.c_str()); if (isHovered) *isHovered = ImGui::IsItemHovered(); ImGui::NextColumn(); @@ -202,12 +202,12 @@ namespace SHADE return valueChanged; } - static bool DragVec2(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + static bool DragVec2(const std::string& label, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec2 values = get(); - bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags); + bool const changed = DragN(label, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { @@ -229,12 +229,12 @@ namespace SHADE return changed; } - static bool DragVec3(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + static bool DragVec3(const std::string& label, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); - bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags); + bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; @@ -261,12 +261,12 @@ namespace SHADE return changed; } - static bool DragVec4(const std::string& fieldLabel, std::vectorconst& componentLabels, std::function get, + static bool DragVec4(const std::string& label, std::vectorconst& componentLabels, std::function get, std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); - bool const changed = DragN(fieldLabel, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags); + bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { @@ -330,41 +330,72 @@ namespace SHADE } template - static bool RadioButton(std::vector const& listLabels, std::vector const& listTypes, std::function get, std::function set) + static bool RadioButton(std::vector const& label, std::vector const& listTypes, std::function get, std::function set ,std::string_view const& tooltip = {}) { T type = get(); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); for (size_t i = 0; i < listTypes.size(); i++) { - if (ImGui::RadioButton(listLabels[i].c_str(), type == listTypes[i])) + if (ImGui::RadioButton(label[i].c_str(), type == listTypes[i])) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), listTypes[i], set)), false); } ImGui::SameLine(); } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return true; } static bool InputText(const std::string& label, const std::function get, - const std::function set, ImGuiInputTextFlags flag = 0, - ImGuiInputTextCallback callback = (ImGuiInputTextCallback)0, void* userData = (void*)0) + const std::function set, std::string_view const& tooltip = {}, + ImGuiInputTextFlags flag = 0, ImGuiInputTextCallback callback = (ImGuiInputTextCallback)0, void* userData = (void*)0) { std::string text = get(); - if (ImGui::InputText(label.c_str(), &text, flag, callback, userData)) + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + if (ImGui::InputText("##", &text, flag, callback, userData)) { if (ImGui::IsItemDeactivatedAfterEdit()) SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); return true; } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return false; } template - static bool DragScalar(const std::string& fieldLabel, ImGuiDataType data_type, std::function get, std::function set, - float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) + static bool DragScalar(const std::string& label, ImGuiDataType data_type, std::function get, std::function set, + float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, ImGuiSliderFlags flags = 0) { T value = get(); - const bool hasChange = ImGui::DragScalar(fieldLabel.c_str(), data_type, &value, speed, &p_min, &p_max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + const bool hasChange = ImGui::DragScalar("##", data_type, &value, speed, &p_min, &p_max, displayFormat, flags); static bool startRecording = false; if (hasChange) { @@ -376,6 +407,17 @@ namespace SHADE { startRecording = false; } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return hasChange; } @@ -412,11 +454,14 @@ namespace SHADE return hasChange; } - static bool DragInt(const std::string& fieldLabel, std::function get, std::function set, + static bool DragInt(const std::string& label, std::function get, std::function set, std::string_view const& tooltip = {}, float speed = 1.0f, int p_min = int(), int p_max = int(), const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { int value = get(); - const bool hasChange = ImGui::DragInt(fieldLabel.c_str(), &value, speed, p_min, p_max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + const bool hasChange = ImGui::DragInt("##", &value, speed, p_min, p_max, displayFormat, flags); static bool startRecording = false; if (hasChange) { @@ -428,16 +473,30 @@ namespace SHADE { startRecording = false; } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return hasChange; } template - static bool SliderScalar(const std::string& fieldLabel, ImGuiDataType data_type, T min, T max, std::function get, std::function set, + static bool SliderScalar(const std::string& label, ImGuiDataType data_type, T min, T max, std::function get, std::function set, std::string_view const& tooltip = {}, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { T value = get(); - bool const changed = ImGui::SliderScalar(fieldLabel.c_str(), data_type, &value, &min, &max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + bool const hasChange = ImGui::SliderScalar("##", data_type, &value, &min, &max, displayFormat, flags); static bool startRecording = false; - if (changed) + if (hasChange) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); if (!startRecording) @@ -448,16 +507,30 @@ namespace SHADE { startRecording = false; } - return changed; + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } + return hasChange; } - static bool SliderFloat(const std::string& fieldLabel, float const& min, float const& max, std::function get, std::function set, + static bool SliderFloat(const std::string& label, float const& min, float const& max, std::function get, std::function set, std::string_view const& tooltip = {}, const char* displayFormat = "%.3f", ImGuiSliderFlags flags = 0) { float value = get(); - bool const changed = ImGui::SliderFloat(fieldLabel.c_str(), &value, min, max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + bool const hasChange = ImGui::SliderFloat("##", &value, min, max, displayFormat, flags); static bool startRecording = false; - if (changed) + if (hasChange) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); if (!startRecording) @@ -468,16 +541,30 @@ namespace SHADE { startRecording = false; } - return changed; + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } + return hasChange; } - static bool SliderInt(const std::string& fieldLabel, int min, int max, std::function get, std::function set, + static bool SliderInt(const std::string& label, int min, int max, std::function get, std::function set, std::string_view const& tooltip = {}, const char* displayFormat = "%d", ImGuiSliderFlags flags = 0) { int value = get(); - bool const changed = ImGui::SliderInt(fieldLabel.c_str(), &value, min, max, displayFormat, flags); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + bool const hasChange = ImGui::SliderInt("##", &value, min, max, displayFormat, flags); static bool startRecording = false; - if (changed) + if (hasChange) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), startRecording); @@ -488,21 +575,44 @@ namespace SHADE { startRecording = false; } - return false; + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } + return hasChange; } - static bool ComboBox(const std::string& fieldLabel, std::vector list, std::function get, std::function set) + static bool ComboBox(const std::string& label, std::vector list, std::function get, std::function set, std::string_view const& tooltip = {}) { bool edited = false; int selected = get(); - ImGui::PushID(fieldLabel.c_str()); - ImGui::Text(fieldLabel.c_str()); ImGui::SameLine(); + ImGui::BeginGroup(); + ImGui::PushID(label.c_str()); + TextLabel(label); + ImGui::SameLine(); if (edited = ImGui::Combo("##Combo", &selected, list.data(), static_cast(list.size()))) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), selected, set)), false); } ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } return edited; } }; From 0395df5c6305d8dcca38b49e48895158da644a73 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 25 Oct 2022 19:59:16 +0800 Subject: [PATCH 454/793] Lights WIP (bug fixes) --- .../GlobalData/SHGraphicsGlobalData.cpp | 35 ++++++++-- .../MiddleEnd/Interface/SHGraphicsConstants.h | 32 +++++++-- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 11 +++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 + .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 66 ++++++++++++------- 5 files changed, 108 insertions(+), 38 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index ed1d3100..94d1d2c5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -4,6 +4,8 @@ #include "Graphics/Pipeline/SHPipelineState.h" #include "Graphics/Pipeline/SHVkPipelineLayout.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" +#include "Graphics/MiddleEnd/Lights/SHLightData.h" +#include "Tools/SHUtilities.h" namespace SHADE { @@ -45,16 +47,35 @@ namespace SHADE // For global data (generic data and textures) Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS,{ genericDataBinding, texturesBinding }); - SHVkDescriptorSetLayout::Binding lightBinding + std::vector lightBindings{}; + for (uint32_t i = 0; i < SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); ++i) { - .Type = vk::DescriptorType::eStorageBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eFragment, - .BindPoint = SHGraphicsConstants::DescriptorSetBindings::DIRECTIONAL_LIGHT_DATA, - .DescriptorCount = 1, - }; + lightBindings.push_back (SHVkDescriptorSetLayout::Binding + { + .Type = vk::DescriptorType::eStorageBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eFragment, + .BindPoint = i, + .DescriptorCount = 1, + }); + } + //SHVkDescriptorSetLayout::Binding pointLightBinding + //{ + // .Type = vk::DescriptorType::eStorageBufferDynamic, + // .Stage = vk::ShaderStageFlagBits::eFragment, + // .BindPoint = SHGraphicsConstants::DescriptorSetBindings::POINT_LIGHT_DATA, + // .DescriptorCount = 1, + //}; + + //SHVkDescriptorSetLayout::Binding spotLightBinding + //{ + // .Type = vk::DescriptorType::eStorageBufferDynamic, + // .Stage = vk::ShaderStageFlagBits::eFragment, + // .BindPoint = SHGraphicsConstants::DescriptorSetBindings::SPOT_LIGHT_DATA, + // .DescriptorCount = 1, + //}; // For Dynamic global data (lights) - Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, { lightBinding }); + Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, lightBindings); SHVkDescriptorSetLayout::Binding cameraDataBinding { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 15f192c0..f31816ce 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -94,14 +94,32 @@ namespace SHADE /***************************************************************************/ static constexpr uint32_t IMAGE_AND_SAMPLERS_DATA = 1; - /***************************************************************************/ - /*! - \brief - DescriptorSet binding for lights. + ///***************************************************************************/ + ///*! + // \brief + // DescriptorSet binding for directional lights. - */ - /***************************************************************************/ - static constexpr uint32_t DIRECTIONAL_LIGHT_DATA = 0; + //*/ + ///***************************************************************************/ + //static constexpr uint32_t DIRECTIONAL_LIGHT_DATA = 0; + + ///***************************************************************************/ + ///*! + // \brief + // DescriptorSet binding for directional lights. + + //*/ + ///***************************************************************************/ + //static constexpr uint32_t POINT_LIGHT_DATA = 1; + + ///***************************************************************************/ + ///*! + // \brief + // DescriptorSet binding for directional lights. + + //*/ + ///***************************************************************************/ + //static constexpr uint32_t SPOT_LIGHT_DATA = 2; /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7ecd92d2..b7d4bd2f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -36,6 +36,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Images/SHVkSampler.h" #include "Assets/Asset Types/SHTextureAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" +#include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" namespace SHADE { @@ -231,11 +232,15 @@ namespace SHADE for (uint32_t i = 0; i < swapchain->GetNumImages(); ++i) cmdPools.push_back(renderContext.GetFrameData(i).cmdPoolHdls[0]); + // Mouse picking system for the editor (Will still run with editor disabled) mousePickSystem->Init(device, cmdPools, worldRenderGraph->GetRenderGraphResource("Entity ID")); // Register the post offscreen render to the system postOffscreenRender = resourceManager.Create(); postOffscreenRender->Init(device, worldRenderGraph->GetRenderGraphResource("Scene"), descPool); + + lightingSubSystem = resourceManager.Create(); + lightingSubSystem->Init(device, descPool); } #ifdef SHEDITOR @@ -353,10 +358,12 @@ namespace SHADE // Begin recording the command buffer currentCmdBuffer->BeginRecording(); + // set viewport and scissor uint32_t w = static_cast(viewports[vpIndex]->GetWidth()); uint32_t h = static_cast(viewports[vpIndex]->GetHeight()); currentCmdBuffer->SetViewportScissor (static_cast(w), static_cast(h), w, h); + // Force set the pipeline layout currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout(), SH_PIPELINE_TYPE::GRAPHICS); // Bind all the buffers required for meshes @@ -368,6 +375,8 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } + // Bind the descriptor set for lights + lightingSubSystem->Run(currentCmdBuffer, frameIndex); // Bind textures auto textureDescSet = texLibrary.GetTextureDescriptorSetGroup(); @@ -401,7 +410,7 @@ namespace SHADE renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); #endif - // Draw first + // Draw the scene renderers[renIndex]->Draw(frameIndex, descPool); // End the command buffer recording diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 870325ac..ae93bd78 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -32,6 +32,7 @@ of DigiPen Institute of Technology is prohibited. #include "../Textures/SHTextureLibrary.h" #include "../Textures/SHVkSamplerCache.h" #include "Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h" +#include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" namespace SHADE { @@ -351,6 +352,7 @@ namespace SHADE // Sub systems Handle mousePickSystem; Handle postOffscreenRender; + Handle lightingSubSystem; uint32_t resizeWidth; uint32_t resizeHeight; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 613d50d3..30bbd363 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -94,6 +94,12 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::PerTypeData::Expand(Handle logicalDevice) noexcept { + if (lightDataAlignmentSize == 0) + { + SHLOG_ERROR ("One of the types of lights have not been accounted for. Make sure lightDataAlignmentSize is not nullptr."); + return; + } + // we want to wait for the command buffers to finish using the buffers first logicalDevice->WaitIdle(); @@ -159,15 +165,15 @@ namespace SHADE { case SH_LIGHT_TYPE::DIRECTIONAL: // TOOD: Change after creating point light struct - return 0; + return sizeof(SHDirectionalLightData); case SH_LIGHT_TYPE::POINT: - return sizeof (SHDirectionalLightData); + return 4; case SH_LIGHT_TYPE::SPOT: // TOOD: Change after creating spot light struct - return 0; + return 4; case SH_LIGHT_TYPE::NUM_TYPES: default: - return 0; + return 4; } } @@ -257,15 +263,18 @@ namespace SHADE void SHLightingSubSystem::PerTypeData::WriteToGPU(uint32_t frameIndex) noexcept { - // we want to write to the offset of the current frame - dataBuffer->WriteToMemory(intermediateData.get(), lightDataAlignmentSize * numLights, 0, lightDataAlignmentSize * maxLights * frameIndex); + if (intermediateData) + { + // we want to write to the offset of the current frame + dataBuffer->WriteToMemory(intermediateData.get(), lightDataAlignmentSize * numLights, 0, lightDataAlignmentSize * maxLights * frameIndex); + } } /***************************************************************************/ /*! \brief - Update descriptor sets. We want to call this everytime we expand buffers. + Update descriptor sets. We want to call this every time we expand buffers. \param binding The binding in the set we want to update. @@ -281,27 +290,29 @@ namespace SHADE binding, { &buffer, 1 }, 0, - perTypeData[binding].GetAlignmentSize()); + perTypeData[binding].GetAlignmentSize() * perTypeData[binding].GetMaxLights()); lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, binding); } /***************************************************************************/ - /*! - + /*! + \brief - Computes dynamic offsets. - - */ + Computes dynamic offsets. + + */ /***************************************************************************/ void SHLightingSubSystem::ComputeDynamicOffsets(void) noexcept { - for (uint32_t i = 0; i < dynamicOffsets.size(); ++i) + for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { - auto const& typeData = perTypeData[i]; - for (uint32_t j = 0; j < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++j) + for (uint32_t j = 0; j < dynamicOffsets.size(); ++j) { - dynamicOffsets[i][j] = j * typeData.GetAlignmentSize() * typeData.GetMaxLights(); + auto const& typeData = perTypeData[j]; + { + dynamicOffsets[i][j] = j * typeData.GetAlignmentSize() * typeData.GetMaxLights(); + } } } } @@ -319,17 +330,26 @@ namespace SHADE void SHLightingSubSystem::Init(Handle device, Handle descPool) noexcept { logicalDevice = device; + uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); - std::vector variableSizes{ SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES) }; + std::vector variableSizes{ NUM_LIGHT_TYPES }; std::fill (variableSizes.begin(), variableSizes.end(), 1); // Create the descriptor set lightingDataDescSet = descPool->Allocate({SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS]}, variableSizes); - // initialize all the data first. We add more lights here as we add more types. - perTypeData[SHUtilities::ToUnderlying(SH_LIGHT_TYPE::DIRECTIONAL)].InitializeData(logicalDevice, SH_LIGHT_TYPE::DIRECTIONAL); - UpdateDescSet(SHGraphicsConstants::DescriptorSetBindings::DIRECTIONAL_LIGHT_DATA); + for (uint32_t i = 0; i < NUM_LIGHT_TYPES; ++i) + { + // initialize all the data first. We add more lights here as we add more types. + perTypeData[i].InitializeData(logicalDevice, static_cast(i)); + UpdateDescSet(i); + } + + for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) + { + dynamicOffsets[i].resize(NUM_LIGHT_TYPES); + } } /***************************************************************************/ @@ -378,8 +398,8 @@ namespace SHADE // is a new buffer. If some expansion was detected, update descriptor sets. if (expanded) { - uint32_t numLightTyes = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); - for (uint32_t i = 0; i < numLightTyes; ++i) + uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + for (uint32_t i = 0; i < NUM_LIGHT_TYPES; ++i) { UpdateDescSet(i); } From 6d9a8e484c4b08a9642a6f6ff998efd036cafc33 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 25 Oct 2022 20:55:46 +0800 Subject: [PATCH 455/793] Asset browser --- .../AssetBrowser/SHAssetBrowser.cpp | 84 +++++++++++++++++++ .../AssetBrowser/SHAssetBrowser.h | 24 ++++++ .../Inspector/SHEditorInspector.cpp | 4 +- .../EditorWindow/SHEditorWindowIncludes.h | 3 +- .../ViewportWindow/SHEditorViewport.cpp | 3 +- SHADE_Engine/src/Editor/SHEditor.cpp | 1 + 6 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp new file mode 100644 index 00000000..caad9b10 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -0,0 +1,84 @@ +#include "SHpch.h" +#include "SHAssetBrowser.h" + +#include "Editor/IconsMaterialDesign.h" +#include "Editor/SHImGuiHelpers.hpp" +#include + +#include "Assets/SHAssetManager.h" +#include "Editor/DragDrop/SHDragDrop.hpp" + +namespace SHADE +{ + SHAssetBrowser::SHAssetBrowser() + :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar) + { + } + + void SHAssetBrowser::Init() + { + SHEditorWindow::Init(); + } + + void SHAssetBrowser::Update() + { + SHEditorWindow::Update(); + if(Begin()) + { + DrawMenuBar(); + auto const& assets = SHAssetManager::GetAllAssets(); + if(ImGui::BeginTable("AssetBrowserTable", 3)) + { + ImGui::TableNextColumn(); + ImGui::TableHeader("Asset ID"); + ImGui::TableNextColumn(); + ImGui::TableHeader("Name"); + ImGui::TableNextColumn(); + ImGui::TableHeader("Type"); + for(SHAsset const& asset : assets) + { + DrawAsset(asset); + } + ImGui::EndTable(); + } + } + ImGui::End(); + } + + void SHAssetBrowser::DrawMenuBar() + { + if(ImGui::BeginMenuBar()) + { + + ImGui::EndMenuBar(); + } + } + + void SHAssetBrowser::DrawAsset(SHAsset const& asset) + { + ImGui::PushID(asset.id); + ImGui::BeginGroup(); + + ImGui::TableNextColumn(); + ImGui::Selectable(std::format("{}", asset.id).data(), false, ImGuiSelectableFlags_SpanAllColumns); + if(SHDragDrop::BeginSource()) + { + auto id = asset.id; + ImGui::Text("Moving Asset: %zu", id); + SHDragDrop::SetPayload(DRAG_RESOURCE, &id); + SHDragDrop::EndSource(); + } + + ImGui::TableNextColumn(); + ImGui::Text("%s", asset.name.c_str()); + + ImGui::TableNextColumn(); + ImGui::Text("%s", "Type"); + + ImGui::EndGroup(); + ImGui::PopID(); + + + + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h new file mode 100644 index 00000000..0e3053bc --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Assets/SHAsset.h" +#include "Editor/EditorWindow/SHEditorWindow.h" + +namespace SHADE +{ + class SHAssetBrowser final : public SHEditorWindow + { + public: + SHAssetBrowser(); + + void Init(); + void Update(); + + void Refresh(); + private: + void DrawMenuBar(); + void DrawAsset(SHAsset const& asset); + + float idColumnWidth, nameColumnWidth, typeColumnWidth; + + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index b59ce9cc..ada5a35a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -84,8 +84,8 @@ namespace SHADE } ImGui::Separator(); // Render Scripts - SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); - scriptEngine->RenderScriptsInInspector(eid); + SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); + scriptEngine->RenderScriptsInInspector(eid); ImGui::Separator(); if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index f0267b06..5208c6d9 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -3,4 +3,5 @@ #include "HierarchyPanel/SHHierarchyPanel.h" //Hierarchy Panel #include "Inspector/SHEditorInspector.h" //Inspector #include "Profiling/SHEditorProfiler.h" //Profiler -#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport \ No newline at end of file +#include "ViewportWindow/SHEditorViewport.h" //Editor Viewport +#include "AssetBrowser/SHAssetBrowser.h" //Asset Browser \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index cb30fa81..f5170999 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -30,6 +30,7 @@ namespace SHADE void SHEditorViewport::Update() { SHEditorWindow::Update(); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f,0.0f)); if(Begin()) { ImGuizmo::SetDrawlist(); @@ -55,7 +56,7 @@ namespace SHADE ImGuizmo::SetRect(beginCursorPos.x , beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); transformGizmo.Draw(); ImGui::End(); - + ImGui::PopStyleVar(); } void SHEditorViewport::Exit() diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 912f9d0f..06fadfee 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -92,6 +92,7 @@ namespace SHADE SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); io = &ImGui::GetIO(); From 534aeba06b4728e2f7a4e494e51b03ed903c34cb Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 25 Oct 2022 20:59:32 +0800 Subject: [PATCH 456/793] Latest Default Layout --- Assets/Editor/Layouts/Default.ini | 103 ++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 18 deletions(-) diff --git a/Assets/Editor/Layouts/Default.ini b/Assets/Editor/Layouts/Default.ini index 4ddc46c2..d7a7bf69 100644 --- a/Assets/Editor/Layouts/Default.ini +++ b/Assets/Editor/Layouts/Default.ini @@ -4,13 +4,13 @@ Size=1920,20 Collapsed=0 [Window][SHEditorMenuBar] -Pos=0,24 -Size=1920,1036 +Pos=0,48 +Size=1920,1012 Collapsed=0 [Window][Hierarchy Panel] -Pos=0,120 -Size=225,940 +Pos=0,197 +Size=308,863 Collapsed=0 DockId=0x00000004,0 @@ -20,29 +20,96 @@ Size=400,400 Collapsed=0 [Window][Inspector] -Pos=1686,24 -Size=234,1036 +Pos=1528,48 +Size=392,1012 Collapsed=0 DockId=0x00000006,0 [Window][Profiler] -Pos=0,24 -Size=225,94 +Pos=0,48 +Size=308,147 Collapsed=0 DockId=0x00000003,0 [Window][Viewport] -Pos=227,24 -Size=1457,1036 +Pos=227,48 +Size=1457,1012 Collapsed=0 -DockId=0x00000002,0 +DockId=0x0000000B,0 + +[Window][ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌð‡Žoû] +Pos=60,60 +Size=32,64 +Collapsed=0 + +[Window][ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ] +Pos=60,60 +Size=999,581 +Collapsed=0 + +[Window][ð‡–oû] +Pos=60,60 +Size=32,64 +Collapsed=0 + +[Window][ÌÌÌÌ] +Pos=60,60 +Size=553,422 +Collapsed=0 + +[Window][] +Pos=60,60 +Size=770,394 +Collapsed=0 + +[Window][ Viewport] +Pos=227,48 +Size=1457,1012 +Collapsed=0 +DockId=0x0000000B,0 + +[Window][ Viewport] +Pos=227,48 +Size=1457,1012 +Collapsed=0 +DockId=0x0000000B,0 + +[Window][î‹ Viewport] +Pos=310,48 +Size=1216,715 +Collapsed=0 +DockId=0x0000000B,0 + +[Window][V] +Pos=310,722 +Size=1501,338 +Collapsed=0 +DockId=0x00000008,0 + +[Window][p›£€Ê] +Pos=310,750 +Size=1501,310 +Collapsed=0 +DockId=0x0000000A,0 + +[Window][ Asset Browser] +Pos=310,765 +Size=1216,295 +Collapsed=0 +DockId=0x0000000C,0 [Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,55 Size=1920,1036 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1684,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=225,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1293,1036 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=234,1036 Selected=0xE7039252 +DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X + DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1526,1036 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=308,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,147 Selected=0x1E6EB881 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,863 Selected=0xE096E5AE + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1216,1036 Split=Y Selected=0xB41284E7 + DockNode ID=0x00000007 Parent=0x00000002 SizeRef=1501,672 Split=Y Selected=0xB41284E7 + DockNode ID=0x00000009 Parent=0x00000007 SizeRef=1501,700 Split=Y Selected=0xB41284E7 + DockNode ID=0x0000000B Parent=0x00000009 SizeRef=1501,715 CentralNode=1 Selected=0xB41284E7 + DockNode ID=0x0000000C Parent=0x00000009 SizeRef=1501,295 Selected=0xB128252A + DockNode ID=0x0000000A Parent=0x00000007 SizeRef=1501,310 Selected=0xD446F7B6 + DockNode ID=0x00000008 Parent=0x00000002 SizeRef=1501,338 Selected=0xD9F31532 + DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=392,1036 Selected=0xE7039252 From 84ce3696075537f7d326f1ce15f0c13098bda7ca Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 25 Oct 2022 21:04:21 +0800 Subject: [PATCH 457/793] Changed shader module library to Import shaders and reflect all on its own Preparation for separation for built in shaders distinction --- SHADE_Engine/src/Assets/SHAssetMacros.h | 14 +-- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 18 +-- .../Shaders/SHShaderModuleLibrary.cpp | 113 +++++++++++++----- .../MiddleEnd/Shaders/SHShaderModuleLibrary.h | 12 +- 4 files changed, 97 insertions(+), 60 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index c5c8493b..31b96724 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -78,13 +78,6 @@ constexpr std::string_view MATERIAL_EXTENSION {".shmat"}; constexpr std::string_view TEXTURE_EXTENSION {".shtex"}; constexpr std::string_view MESH_EXTENSION {".shmesh"}; -// EXTERNAL EXTENSIONS -constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; -constexpr std::string_view IMAGE_EXTENSION{ ".png" }; -constexpr std::string_view DDS_EXTENSION{ ".dds" }; -constexpr std::string_view FBX_EXTENSION{ ".fbx" }; -constexpr std::string_view GLTF_EXTENSION{ ".gltf" }; - constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, @@ -97,6 +90,13 @@ constexpr std::string_view EXTENSIONS[] = { AUDIO_WAV_EXTENSION, }; +// EXTERNAL EXTENSIONS +constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; +constexpr std::string_view IMAGE_EXTENSION{ ".png" }; +constexpr std::string_view DDS_EXTENSION{ ".dds" }; +constexpr std::string_view FBX_EXTENSION{ ".fbx" }; +constexpr std::string_view GLTF_EXTENSION{ ".gltf" }; + constexpr std::string_view EXTERNALS[] = { GLSL_EXTENSION, IMAGE_EXTENSION, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7ecd92d2..fe3caccd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -116,22 +116,8 @@ namespace SHADE transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - - // TODO: This is VERY temporarily here until a more solid resource management system is implemented - shaderSourceLibrary.Init("../../TempShaderFolder/"); - - shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); - shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); - - shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); - - shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); - auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); - auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); - auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - cubeVS->Reflect(); - cubeFS->Reflect(); - greyscale->Reflect(); + shaderModuleLibrary.ImportAllShaderSource(device); + shaderModuleLibrary.ReflectAllShaderModules(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp index 7fa5168d..0d5fc84f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp @@ -2,6 +2,7 @@ #include "SHShaderModuleLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" #include "Assets/Asset Types/SHShaderAsset.h" +#include "Assets/SHAssetManager.h" namespace SHADE { @@ -19,33 +20,33 @@ namespace SHADE */ /***************************************************************************/ - void SHShaderModuleLibrary::ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept - { - auto const& sources = sourceLib.GetSourceLibrary(); - for (auto const& source : sources) - { - vk::ShaderStageFlagBits shaderType{}; - switch (source.shaderType) - { - case SH_SHADER_TYPE::VERTEX: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - case SH_SHADER_TYPE::FRAGMENT: - shaderType = vk::ShaderStageFlagBits::eFragment; - break; - case SH_SHADER_TYPE::COMPUTE: - shaderType = vk::ShaderStageFlagBits::eCompute; - break; - default: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - } + //void SHShaderModuleLibrary::ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept + //{ + // auto const& sources = sourceLib.GetSourceLibrary(); + // for (auto const& source : sources) + // { + // vk::ShaderStageFlagBits shaderType{}; + // switch (source.shaderType) + // { + // case SH_SHADER_TYPE::VERTEX: + // shaderType = vk::ShaderStageFlagBits::eVertex; + // break; + // case SH_SHADER_TYPE::FRAGMENT: + // shaderType = vk::ShaderStageFlagBits::eFragment; + // break; + // case SH_SHADER_TYPE::COMPUTE: + // shaderType = vk::ShaderStageFlagBits::eCompute; + // break; + // default: + // shaderType = vk::ShaderStageFlagBits::eVertex; + // break; + // } - Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(source.spirvBinary, "main", shaderType, source.name); - shaderModules.emplace(source.id, newShaderModule); - stringToID.emplace(source.name, source.id); - } - } + // Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(source.spirvBinary, "main", shaderType, source.name); + // shaderModules.emplace(source.id, newShaderModule); + // stringToID.emplace(source.name, source.id); + // } + //} /***************************************************************************/ /*! @@ -59,12 +60,60 @@ namespace SHADE */ /***************************************************************************/ - Handle SHShaderModuleLibrary::GetShaderModule(std::string shaderName) const noexcept + //Handle SHShaderModuleLibrary::GetShaderModule(std::string shaderName) const noexcept + //{ + // if (stringToID.contains(shaderName)) + // return shaderModules.at(stringToID.at(shaderName)); + // else + // return {}; + //} + + void SHShaderModuleLibrary::ImportBuiltInShaderSource(Handle& logicalDeviceHdl) noexcept { - if (stringToID.contains(shaderName)) - return shaderModules.at(stringToID.at(shaderName)); - else - return {}; + uint32_t idCounter{ 0 }; + const AssetID DEFAULT_VS_ID{ 69 }; + const AssetID DEFAULT_FS_ID{ 420 }; + + auto vsData{ SHAssetManager::GetData(DEFAULT_VS_ID) }; + Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(vsData->spirvBinary, "main", shaderType, vsData->name); + shaderModules.emplace(idCounter++, newShaderModule); } -} \ No newline at end of file + void SHShaderModuleLibrary::ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept + { + uint32_t idCounter{ 0 }; + + auto data = SHAssetManager::GetAllDataOfType(AssetType::SHADER); + for (auto const& dataPtr : data) + { + auto shader = dynamic_cast(dataPtr); + vk::ShaderStageFlagBits shaderType{}; + switch (shader->shaderType) + { + case SH_SHADER_TYPE::VERTEX: + shaderType = vk::ShaderStageFlagBits::eVertex; + break; + case SH_SHADER_TYPE::FRAGMENT: + shaderType = vk::ShaderStageFlagBits::eFragment; + break; + case SH_SHADER_TYPE::COMPUTE: + shaderType = vk::ShaderStageFlagBits::eCompute; + break; + default: + shaderType = vk::ShaderStageFlagBits::eVertex; + break; + } + + Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", shaderType, shader->name); + shaderModules.emplace(idCounter++, newShaderModule); + } + } + + void SHShaderModuleLibrary::ReflectAllShaderModules() noexcept + { + for (auto& module : shaderModules) + { + module.second->Reflect(); + } + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h index aba3a16c..be4bdbfb 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h @@ -21,20 +21,22 @@ namespace SHADE /*-----------------------------------------------------------------------*/ //! Stored shader modules std::unordered_map> shaderModules; - - //! We want some sort of interface with strings, instead of ints - std::map stringToID; + std::unordered_map> builtInShaderModules; public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ - void ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept; + //void ImportFromSourceLibrary(Handle& logicalDeviceHdl, SHShaderSourceLibrary const& sourceLib) noexcept; /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - Handle GetShaderModule(std::string shaderName) const noexcept; + //Handle GetShaderModule(std::string shaderName) const noexcept; + + void ImportBuiltInShaderSource(Handle& logicalDeviceHdl) noexcept; + void ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept; + void ReflectAllShaderModules() noexcept; }; } From 388795a2db374eeb1b2c3bda8384dcd204f7020e Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 25 Oct 2022 22:13:27 +0800 Subject: [PATCH 458/793] Transform Components are Enforced through the editor for certain components --- .../Inspector/SHEditorInspector.cpp | 33 +++++-- SHADE_Engine/src/Events/SHEventManager.hpp | 3 +- .../src/Math/Transform/SHTransformSystem.cpp | 94 +++++++++---------- .../src/Math/Transform/SHTransformSystem.h | 9 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 6 +- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 2 +- 6 files changed, 83 insertions(+), 64 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index b59ce9cc..116ad8d6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -35,6 +35,23 @@ namespace SHADE return selected; } + template , bool> = true, std::enable_if_t, bool> = true> + bool DrawAddComponentWithEnforcedComponentButton(EntityID const& eid) + { + bool selected = false; + if (!SHComponentManager::HasComponent(eid)) + { + if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + { + if(SHComponentManager::GetComponent_s(eid) == nullptr) + SHComponentManager::AddComponent(eid); + + SHComponentManager::AddComponent(eid); + } + } + return selected; + } + SHEditorInspector::SHEditorInspector() :SHEditorWindow("Inspector", ImGuiWindowFlags_MenuBar) { @@ -90,15 +107,13 @@ namespace SHADE if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { DrawAddComponentButton(eid); - DrawAddComponentButton(eid); - DrawAddComponentButton(eid); - if(DrawAddComponentButton(eid)) - { - if(SHComponentManager::GetComponent_s(eid) == nullptr) - { - SHComponentManager::AddComponent(eid); - } - } + + // Components that require Transforms + + DrawAddComponentWithEnforcedComponentButton(eid); + DrawAddComponentWithEnforcedComponentButton(eid); + DrawAddComponentWithEnforcedComponentButton(eid); + ImGui::EndMenu(); } diff --git a/SHADE_Engine/src/Events/SHEventManager.hpp b/SHADE_Engine/src/Events/SHEventManager.hpp index f511518a..490c6b10 100644 --- a/SHADE_Engine/src/Events/SHEventManager.hpp +++ b/SHADE_Engine/src/Events/SHEventManager.hpp @@ -12,6 +12,7 @@ #include "SHpch.h" #include "SHEvent.h" #include "SHEventReceiver.h" +#include "SH_API.h" /****************************************************************************** INSTRUCTIONS FOR USE: @@ -67,7 +68,7 @@ namespace SHADE using EventManagerListener = std::function; - class SHEventManager + class SH_API SHEventManager { private: diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 5a540cd4..4ab6b909 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -61,9 +61,9 @@ namespace SHADE void SHTransformSystem::Init() { - std::shared_ptr thisReceiver { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; - ReceiverPtr receiver = std::dynamic_pointer_cast(thisReceiver); - SHEventManager::SubscribeTo(SH_SCENEGRAPH_CHANGE_PARENT_EVENT, receiver); + std::shared_ptr thisChangeParentReceiver { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; + ReceiverPtr changeParentReceiver = std::dynamic_pointer_cast(thisChangeParentReceiver); + SHEventManager::SubscribeTo(SH_SCENEGRAPH_CHANGE_PARENT_EVENT, changeParentReceiver); } void SHTransformSystem::Exit() @@ -75,50 +75,6 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHEventHandle SHTransformSystem::ChangeParent(SHEventPtr changeParentEvent) - { - const auto& eventData = reinterpret_cast*>(changeParentEvent.get()); - - auto* node = eventData->data->node; - auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); - - // Recompute local transform and store localToWorld Matrix - SHMatrix localToWorld = SHMatrix::Identity; - SHMatrix worldToLocal = SHMatrix::Identity; - - auto* newParent = eventData->data->newParent; - const auto* PARENT_TF = SHComponentManager::GetComponent_s(newParent->GetEntityID()); - if (PARENT_TF != nullptr) // Not the root - { - localToWorld = PARENT_TF->GetTRS(); - worldToLocal = SHMatrix::Inverse(localToWorld); - } - - // Maintain World Transform and recompute Local Transform - - // Compute Local Position - tf->local.position = SHVec3::Transform(tf->world.position, worldToLocal); - - - tf->localRotation = tf->worldRotation; - tf->local.scale = tf->world.scale; - - if (PARENT_TF != nullptr) - { - // Compute Local Rotation - tf->localRotation -= PARENT_TF->GetLocalRotation(); - - // Compute Local Scale - tf->local.scale /= PARENT_TF->GetLocalScale(); - } - - tf->local.trs = localToWorld; - - // Propagate maintaining world transform down the branch - UpdateChildrenLocalTransforms(node); - return eventData->handle; - } - void SHTransformSystem::UpdateChildrenLocalTransforms(SHSceneNode* node) { // Structure is similar to update entity, albeit without a queue to do being a forced update @@ -300,4 +256,48 @@ namespace SHADE tf.world.ComputeTRS(); } + SHEventHandle SHTransformSystem::ChangeParent(SHEventPtr changeParentEvent) + { + const auto& eventData = reinterpret_cast*>(changeParentEvent.get()); + + auto* node = eventData->data->node; + auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); + + // Recompute local transform and store localToWorld Matrix + SHMatrix localToWorld = SHMatrix::Identity; + SHMatrix worldToLocal = SHMatrix::Identity; + + auto* newParent = eventData->data->newParent; + const auto* PARENT_TF = SHComponentManager::GetComponent_s(newParent->GetEntityID()); + if (PARENT_TF != nullptr) // Not the root + { + localToWorld = PARENT_TF->GetTRS(); + worldToLocal = SHMatrix::Inverse(localToWorld); + } + + // Maintain World Transform and recompute Local Transform + + // Compute Local Position + tf->local.position = SHVec3::Transform(tf->world.position, worldToLocal); + + + tf->localRotation = tf->worldRotation; + tf->local.scale = tf->world.scale; + + if (PARENT_TF != nullptr) + { + // Compute Local Rotation + tf->localRotation -= PARENT_TF->GetLocalRotation(); + + // Compute Local Scale + tf->local.scale /= PARENT_TF->GetLocalScale(); + } + + tf->local.trs = localToWorld; + + // Propagate maintaining world transform down the branch + UpdateChildrenLocalTransforms(node); + return eventData->handle; + } + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index e63969ce..f09da3ea 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -11,9 +11,9 @@ #pragma once // Project Headers -#include "SHTransformComponent.h" -#include "Scene/SHSceneGraph.h" #include "ECS_Base/System/SHSystemRoutine.h" +#include "Scene/SHSceneGraph.h" +#include "SHTransformComponent.h" namespace SHADE { @@ -111,11 +111,14 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHEventHandle ChangeParent (SHEventPtr changeParentEvent); static void UpdateChildrenLocalTransforms (SHSceneNode* node); static void UpdateEntity (const SHSceneNode* node, bool clearDirtyFlag); static void UpdateTransform (SHTransformComponent& tf, const SHTransformComponent* parent = nullptr); + + // Event Handlers + + SHEventHandle ChangeParent (SHEventPtr changeParentEvent); }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index a1994ad2..f989e41d 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -203,7 +203,7 @@ namespace SHADE // SHLOG_INFO("Adding a Rigidbody to the Physics World.") //#endif - auto* physicsObject = CreatePhysicsObject(entityID); + auto* physicsObject = EnsurePhysicsObject(entityID); physicsObject->CreateRigidBody ( @@ -219,7 +219,7 @@ namespace SHADE // SHLOG_INFO("Adding a Collider to the Physics World.") //#endif - auto* physicsObject = CreatePhysicsObject(entityID); + auto* physicsObject = EnsurePhysicsObject(entityID); physicsObject->CreateCollisionBody ( @@ -359,7 +359,7 @@ namespace SHADE /* Private Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - SHPhysicsObject* SHPhysicsSystem::CreatePhysicsObject(EntityID entityID) noexcept + SHPhysicsObject* SHPhysicsSystem::EnsurePhysicsObject(EntityID entityID) noexcept { const auto it = map.find(entityID); if (it == map.end()) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index bc6a1ba2..37d98300 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -186,7 +186,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* CreatePhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; void DestroyPhysicsObject (EntityID entityID) noexcept; From 3c5a1b73d6f1bde4c5980f694f34c040d76e49fb Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 25 Oct 2022 22:26:07 +0800 Subject: [PATCH 459/793] Fixed bug with destroying a rigidbody component --- .../Components/SHRigidBodyComponent.cpp | 72 +++---------------- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 7 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 44 ++---------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 18 +---- 4 files changed, 19 insertions(+), 122 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index e5938717..4c620ad0 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -289,98 +289,42 @@ namespace SHADE void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddForce(GetEID(), force); + } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddForceAtLocalPos(GetEID(), force, localPos); + } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddForceAtWorldPos(GetEID(), force, worldPos); + } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddRelativeForce(GetEID(), force); + } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddRelativeForceAtLocalPos(GetEID(), force, localPos); + } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddRelativeForceAtWorldPos(GetEID(), force, worldPos); + } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddTorque(GetEID(), torque); + } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to Add Force to a body!") - return; - } - - // Notify Physics Systems - system->AddRelativeTorque(GetEID(), relativeTorque); + } } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index f9b476ef..91e7a3dc 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -133,7 +133,7 @@ namespace SHADE void SHPhysicsObject::CreateRigidBody(const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c) { // If collider already exists, recreate the collision body as a rigid body - if (hasColliders) + if (c != nullptr) world->destroyCollisionBody(rp3dBody); rp3dBody = world->createRigidBody(rp3d::Transform{ tf->GetWorldPosition(), tf->GetWorldRotation() }); @@ -142,7 +142,7 @@ namespace SHADE rb->position = tf->GetWorldPosition(); rb->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); - if (hasColliders) + if (c != nullptr) { c->position = tf->GetWorldPosition(); c->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); @@ -196,8 +196,9 @@ namespace SHADE void SHPhysicsObject::DestroyRigidBody(SHColliderComponent* c) noexcept { world->destroyRigidBody(reinterpret_cast(rp3dBody)); + rp3dBody = nullptr; - if (hasColliders) + if (c != nullptr) { // Preserve colliders as a collision body rp3dBody = world->createCollisionBody(rp3d::Transform{ c->position, c->orientation }); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index f989e41d..334fc6c5 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -250,46 +250,6 @@ namespace SHADE #endif } - void SHPhysicsSystem::AddForce(EntityID entityID, const SHVec3& force) const noexcept - { - - } - - void SHPhysicsSystem::AddForceAtLocalPos(EntityID entityID, const SHVec3& force, const SHVec3& localPos) const noexcept - { - - } - - void SHPhysicsSystem::AddForceAtWorldPos(EntityID entityID, const SHVec3& force, const SHVec3& worldPos) const noexcept - { - - } - - void SHPhysicsSystem::AddRelativeForce(EntityID entityID, const SHVec3& relativeForce) const noexcept - { - - } - - void SHPhysicsSystem::AddRelativeForceAtLocalPos(EntityID entityID, const SHVec3& relativeForce, const SHVec3& localPos) const noexcept - { - - } - - void SHPhysicsSystem::AddRelativeForceAtWorldPos(EntityID entityID, const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept - { - - } - - void SHPhysicsSystem::AddTorque(EntityID entityID, const SHVec3& torque) const noexcept - { - - } - - void SHPhysicsSystem::AddRelativeTorque(EntityID entityID, const SHVec3& relativeTorque) const noexcept - { - - } - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) { auto* physicsObject = GetPhysicsObject(entityID); @@ -312,6 +272,10 @@ namespace SHADE // Sync transforms for (auto& physicsObject : system->map | std::views::values) { + // Ensure a valid physics Object + if (physicsObject.rp3dBody == nullptr) + continue; + const auto* TF = SHComponentManager::GetComponent(physicsObject.entityID); if (TF->HasChanged()) { diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 37d98300..933b36af 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -32,7 +32,7 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHPhysicsSystem : public SHSystem + class SH_API SHPhysicsSystem final : public SHSystem { public: /*---------------------------------------------------------------------------------*/ @@ -90,17 +90,6 @@ namespace SHADE void RemoveRigidBody (EntityID entityID) noexcept; void RemoveCollider (EntityID entityID) noexcept; - void AddForce (EntityID entityID, const SHVec3& force) const noexcept; - void AddForceAtLocalPos (EntityID entityID, const SHVec3& force, const SHVec3& localPos) const noexcept; - void AddForceAtWorldPos (EntityID entityID, const SHVec3& force, const SHVec3& worldPos) const noexcept; - - void AddRelativeForce (EntityID entityID, const SHVec3& relativeForce) const noexcept; - void AddRelativeForceAtLocalPos (EntityID entityID, const SHVec3& relativeForce, const SHVec3& localPos) const noexcept; - void AddRelativeForceAtWorldPos (EntityID entityID, const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept; - - void AddTorque (EntityID entityID, const SHVec3& torque) const noexcept; - void AddRelativeTorque (EntityID entityID, const SHVec3& relativeTorque) const noexcept; - void AddCollisionShape (EntityID entityID, SHCollider* collider); void RemoveCollisionShape (EntityID entityID, int index); @@ -170,15 +159,14 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - // TODO(Diren): Store interpFactor - bool worldUpdated; double interpolationFactor; double fixedDT; - rp3d::PhysicsWorld* world; + rp3d::PhysicsWorld* world; rp3d::PhysicsCommon factory; + EntityObjectMap map; From 0defa58c77f6d700943fa3f0296758045fd0df4b Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Tue, 25 Oct 2022 23:09:46 +0800 Subject: [PATCH 460/793] Physics Component Synchronisation is now done through events --- .../src/Math/Transform/SHTransformSystem.cpp | 15 +- .../src/Math/Transform/SHTransformSystem.h | 22 --- .../Components/SHColliderComponent.cpp | 12 +- .../Components/SHRigidBodyComponent.cpp | 14 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 40 ----- SHADE_Engine/src/Physics/SHPhysicsObject.h | 6 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 155 ++++++++++++------ SHADE_Engine/src/Physics/SHPhysicsSystem.h | 26 ++- 8 files changed, 143 insertions(+), 147 deletions(-) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index 4ab6b909..a2ab6880 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -61,9 +61,9 @@ namespace SHADE void SHTransformSystem::Init() { - std::shared_ptr thisChangeParentReceiver { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; - ReceiverPtr changeParentReceiver = std::dynamic_pointer_cast(thisChangeParentReceiver); - SHEventManager::SubscribeTo(SH_SCENEGRAPH_CHANGE_PARENT_EVENT, changeParentReceiver); + const std::shared_ptr CHANGE_PARENT_RECEIVER { std::make_shared>(this, &SHTransformSystem::ChangeParent) }; + const ReceiverPtr CHANGE_PARENT_RECEIVER_PTR = std::dynamic_pointer_cast(CHANGE_PARENT_RECEIVER); + SHEventManager::SubscribeTo(SH_SCENEGRAPH_CHANGE_PARENT_EVENT, CHANGE_PARENT_RECEIVER_PTR); } void SHTransformSystem::Exit() @@ -258,16 +258,16 @@ namespace SHADE SHEventHandle SHTransformSystem::ChangeParent(SHEventPtr changeParentEvent) { - const auto& eventData = reinterpret_cast*>(changeParentEvent.get()); + const auto& EVENT_DATA = reinterpret_cast*>(changeParentEvent.get()); - auto* node = eventData->data->node; + auto* node = EVENT_DATA->data->node; auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); // Recompute local transform and store localToWorld Matrix SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; - auto* newParent = eventData->data->newParent; + auto* newParent = EVENT_DATA->data->newParent; const auto* PARENT_TF = SHComponentManager::GetComponent_s(newParent->GetEntityID()); if (PARENT_TF != nullptr) // Not the root { @@ -297,7 +297,8 @@ namespace SHADE // Propagate maintaining world transform down the branch UpdateChildrenLocalTransforms(node); - return eventData->handle; + + return EVENT_DATA->handle; } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h index f09da3ea..bb373f3a 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.h +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.h @@ -53,17 +53,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ TransformPostLogicUpdate (); - ~TransformPostLogicUpdate () = default; - - TransformPostLogicUpdate (const TransformPostLogicUpdate&) = delete; - TransformPostLogicUpdate (TransformPostLogicUpdate&&) = delete; - - /*-------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*-------------------------------------------------------------------------------*/ - - TransformPostLogicUpdate& operator= (const TransformPostLogicUpdate&) = delete; - TransformPostLogicUpdate& operator= (TransformPostLogicUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ @@ -80,17 +69,6 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ TransformPostPhysicsUpdate (); - ~TransformPostPhysicsUpdate () = default; - - TransformPostPhysicsUpdate (const TransformPostPhysicsUpdate&) = delete; - TransformPostPhysicsUpdate (TransformPostPhysicsUpdate&&) = delete; - - /*-------------------------------------------------------------------------------*/ - /* Operator Overloads */ - /*-------------------------------------------------------------------------------*/ - - TransformPostPhysicsUpdate& operator= (const TransformPostPhysicsUpdate&) = delete; - TransformPostPhysicsUpdate& operator= (TransformPostPhysicsUpdate&&) = delete; /*-------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index 71183f00..242b8d8f 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -69,13 +69,13 @@ namespace SHADE void SHColliderComponent::OnCreate() { system = SHSystemManager::GetSystem(); - if (!system) - { - SHLOG_ERROR("Physics system does not exist, Collider Component not added!") - return; - } + //if (!system) + //{ + // SHLOG_ERROR("Physics system does not exist, Collider Component not added!") + // return; + //} - system->AddCollider(GetEID()); + //system->AddCollider(GetEID()); } void SHColliderComponent::OnDestroy() diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 4c620ad0..934b67f6 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -265,14 +265,14 @@ namespace SHADE void SHRigidBodyComponent::OnCreate() { system = SHSystemManager::GetSystem(); - if (!system) - { - SHLOG_ERROR("Physics system does not exist, Rigid Body Component not added!") - return; - } + //if (!system) + //{ + // SHLOG_ERROR("Physics system does not exist, Rigid Body Component not added!") + // return; + //} - // Notify Physics System - system->AddRigidBody(GetEID()); + //// Notify Physics System + //system->AddRigidBody(GetEID()); } void SHRigidBodyComponent::OnDestroy() diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 91e7a3dc..8c067482 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -26,8 +26,6 @@ namespace SHADE SHPhysicsObject::SHPhysicsObject(EntityID eid, rp3d::PhysicsCommon* physicsFactory, rp3d::PhysicsWorld* physicsWorld) noexcept : entityID { eid } - , isRigidBody { false } - , hasColliders{ false } , factory { physicsFactory } , world { physicsWorld } , rp3dBody { nullptr } @@ -130,42 +128,6 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHPhysicsObject::CreateRigidBody(const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c) - { - // If collider already exists, recreate the collision body as a rigid body - if (c != nullptr) - world->destroyCollisionBody(rp3dBody); - - rp3dBody = world->createRigidBody(rp3d::Transform{ tf->GetWorldPosition(), tf->GetWorldRotation() }); - isRigidBody = true; - - rb->position = tf->GetWorldPosition(); - rb->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); - - if (c != nullptr) - { - c->position = tf->GetWorldPosition(); - c->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); - // Get array of colliders and add them back into the rigidbody - for (auto& collider : c->colliders | std::views::keys) - AddCollider(&collider); - } - } - - void SHPhysicsObject::CreateCollisionBody(const SHTransformComponent* tf, SHColliderComponent* c) - { - if (rp3dBody == nullptr) - rp3dBody = world->createCollisionBody(rp3d::Transform{ tf->GetWorldPosition(), tf->GetWorldRotation() }); - - hasColliders = true; - - c->position = tf->GetWorldPosition(); - c->orientation = SHQuaternion::FromEuler(tf->GetWorldRotation()); - - for (auto& collider : c->colliders | std::views::keys) - AddCollider(&collider); - } - int SHPhysicsObject::AddCollider(SHCollider* collider) { switch (collider->GetType()) @@ -205,8 +167,6 @@ namespace SHADE for (auto& collider : c->colliders | std::views::keys) AddCollider(&collider); } - - isRigidBody = false; } void SHPhysicsObject::DestroyCollisionBody() noexcept diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 39a85421..11e41ad1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -69,8 +69,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void CreateRigidBody (const SHTransformComponent* tf, SHRigidBodyComponent* rb, SHColliderComponent* c); - void CreateCollisionBody (const SHTransformComponent* tf, SHColliderComponent* c); + void CreateRigidBody (const SHVec3& pos, const SHQuaternion& orientation); + void CreateCollisionBody (const SHVec3& pos, const SHQuaternion& orientation); int AddCollider (SHCollider* collider); void DestroyRigidBody (SHColliderComponent* c) noexcept; @@ -86,8 +86,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ EntityID entityID; - bool isRigidBody; - bool hasColliders; rp3d::PhysicsCommon* factory; rp3d::PhysicsWorld* world; diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 334fc6c5..76e54b09 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -175,11 +175,9 @@ namespace SHADE void SHPhysicsSystem::Init() { - using namespace rp3d; - // Create a physics world with the default settings - PhysicsWorld::WorldSettings settings; - settings.gravity = Vector3{ 0.0f, -9.81f, 0.0f }; + rp3d::PhysicsWorld::WorldSettings settings; + settings.gravity = SHVec3{ 0.0f, -9.81f, 0.0f }; settings.isSleepingEnabled = true; settings.defaultVelocitySolverNbIterations = 8; settings.defaultPositionSolverNbIterations = 3; @@ -190,6 +188,12 @@ namespace SHADE // Set up solvers world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); + + // Subscribe to component events + + const std::shared_ptr ADD_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::AddPhysicsComponent) }; + const ReceiverPtr ADD_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(ADD_COMPONENT_RECEIVER); + SHEventManager::SubscribeTo(SH_COMPONENT_ADDED_EVENT, ADD_COMPONENT_RECEIVER_PTR); } void SHPhysicsSystem::Exit() @@ -197,36 +201,29 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - void SHPhysicsSystem::AddRigidBody(EntityID entityID) noexcept - { - //#ifdef _DEBUG - // SHLOG_INFO("Adding a Rigidbody to the Physics World.") - //#endif + //void SHPhysicsSystem::AddRigidBody(EntityID entityID) noexcept + //{ + // //#ifdef _DEBUG + // // SHLOG_INFO("Adding a Rigidbody to the Physics World.") + // //#endif - auto* physicsObject = EnsurePhysicsObject(entityID); + // + //} - physicsObject->CreateRigidBody - ( - EnsureTransform(entityID), - SHComponentManager::GetComponent(entityID), - SHComponentManager::GetComponent_s(entityID) - ); - } + //void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept + //{ + // //#ifdef _DEBUG + // // SHLOG_INFO("Adding a Collider to the Physics World.") + // //#endif - void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept - { - //#ifdef _DEBUG - // SHLOG_INFO("Adding a Collider to the Physics World.") - //#endif + // auto* physicsObject = EnsurePhysicsObject(entityID); - auto* physicsObject = EnsurePhysicsObject(entityID); - - physicsObject->CreateCollisionBody - ( - EnsureTransform(entityID), - SHComponentManager::GetComponent(entityID) - ); - } + // physicsObject->CreateCollisionBody + // ( + // SHComponentManager::GetComponent(entityID), + // SHComponentManager::GetComponent(entityID) + // ); + //} void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept { @@ -415,15 +412,18 @@ namespace SHADE const rp3d::Transform CURRENT_TF = physicsObject.rp3dBody->getTransform(); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + // Check if transform should be interpolated - if (physicsObject.isRigidBody) + if (rigidBodyComponent != nullptr) { - auto* rbComponent = SHComponentManager::GetComponent(entityID); - if (rbComponent->GetType() == SHRigidBodyComponent::Type::STATIC) + + if (rigidBodyComponent->GetType() == SHRigidBodyComponent::Type::STATIC) continue; - if (rbComponent->IsInterpolating()) + if (rigidBodyComponent->IsInterpolating()) { const rp3d::Transform PREV_TF = physicsObject.prevTransform; const rp3d::Transform INTERPOLATED_TF = rp3d::Transform::interpolateTransforms(PREV_TF, CURRENT_TF, static_cast(interpolationFactor)); @@ -438,12 +438,12 @@ namespace SHADE rp3dRot = CURRENT_TF.getOrientation(); } - rbComponent->position = CURRENT_TF.getPosition(); - rbComponent->orientation = CURRENT_TF.getOrientation(); + rigidBodyComponent->position = CURRENT_TF.getPosition(); + rigidBodyComponent->orientation = CURRENT_TF.getOrientation(); - if (physicsObject.hasColliders) + if (colliderComponent != nullptr) { - auto* colliderComponent = SHComponentManager::GetComponent(entityID); + colliderComponent->position = CURRENT_TF.getPosition(); colliderComponent->orientation = CURRENT_TF.getOrientation(); } @@ -457,26 +457,89 @@ namespace SHADE // Convert RP3D Transform to SHADE auto* tfComponent = SHComponentManager::GetComponent(entityID); tfComponent->SetWorldPosition(rp3dPos); - tfComponent->SetWorldOrientation(SHQuaternion{ rp3dRot }); + tfComponent->SetWorldOrientation(rp3dRot); // Cache transforms physicsObject.prevTransform = CURRENT_TF; } } - SHTransformComponent* SHPhysicsSystem::EnsureTransform(EntityID entityID) + SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) { - auto* tf = SHComponentManager::GetComponent_s(entityID); + const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); - // Possibly redundant - if (!tf) + static const auto RIGID_BODY_ID = ComponentFamily::GetID(); + static const auto COLLIDER_ID = ComponentFamily::GetID(); + + const auto COMPONENT_ADDED_ID = EVENT_DATA->data->addedComponentType; + const bool IS_PHYSICS_COMPONENT = COMPONENT_ADDED_ID == RIGID_BODY_ID || COMPONENT_ADDED_ID == COLLIDER_ID; + if (IS_PHYSICS_COMPONENT) { - SHComponentManager::AddComponent(entityID); - tf = SHComponentManager::GetComponent(entityID); + const EntityID ENTITY_ID = EVENT_DATA->data->eid; + auto* physicsObject = EnsurePhysicsObject(ENTITY_ID); + + auto* transformComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if (transformComponent == nullptr) + { + SHLOG_ERROR("Entity {} cannot add a Physics Component without a Transform! Component not created!", ENTITY_ID) + return EVENT_DATA->handle; + } + + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + + if (COMPONENT_ADDED_ID == RIGID_BODY_ID) + { + if (colliderComponent != nullptr) + { + world->destroyCollisionBody(physicsObject->rp3dBody); + physicsObject->rp3dBody = nullptr; + } + + rigidBodyComponent->position = transformComponent->GetWorldPosition(); + rigidBodyComponent->orientation = transformComponent->GetWorldOrientation(); + + physicsObject->rp3dBody = world->createRigidBody + ( + rp3d::Transform{ rigidBodyComponent->position, rigidBodyComponent->orientation } + ); + + + // Add collision shapes back into the body + if (colliderComponent != nullptr) + { + for (auto& collider : colliderComponent->colliders | std::views::keys) + physicsObject->AddCollider(&collider); + } + } + + if (COMPONENT_ADDED_ID == COLLIDER_ID) + { + colliderComponent->position = transformComponent->GetWorldPosition(); + colliderComponent->orientation = transformComponent->GetWorldOrientation(); + + if (physicsObject->rp3dBody == nullptr) + { + physicsObject->rp3dBody = world->createCollisionBody + ( + rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } + ); + } + + // Add Collision Shapes + for (auto& collider : colliderComponent->colliders | std::views::keys) + physicsObject->AddCollider(&collider); + } } - return tf; + return EVENT_DATA->handle; } + SHEventHandle SHPhysicsSystem::RemovePhysicsComponent(SHEventPtr removeComponentEvent) + { + const auto& EVENT_DATA = reinterpret_cast*>(removeComponentEvent.get()); + + return EVENT_DATA->handle; + } } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 933b36af..d88f8c06 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -16,14 +16,14 @@ #include // Project Headers -#include "SHPhysicsObject.h" #include "Components/SHRigidBodyComponent.h" #include "Components/SHColliderComponent.h" -#include "Math/Transform/SHTransformComponent.h" - -#include "Scene/SHSceneGraph.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "ECS_Base/System/SHFixedSystemRoutine.h" +#include "Math/Transform/SHTransformComponent.h" +#include "Scene/SHSceneGraph.h" +#include "SHPhysicsObject.h" + namespace SHADE @@ -85,8 +85,8 @@ namespace SHADE void Init () override; void Exit () override; - void AddRigidBody (EntityID entityID) noexcept; - void AddCollider (EntityID entityID) noexcept; + //void AddRigidBody (EntityID entityID) noexcept; + //void AddCollider (EntityID entityID) noexcept; void RemoveRigidBody (EntityID entityID) noexcept; void RemoveCollider (EntityID entityID) noexcept; @@ -97,10 +97,7 @@ namespace SHADE /* System Routines */ /*---------------------------------------------------------------------------------*/ - /** - * @brief Synchronises RP3D with SHADE - */ - class SH_API PhysicsPreUpdate : public SHSystemRoutine + class SH_API PhysicsPreUpdate final : public SHSystemRoutine { public: /*-------------------------------------------------------------------------------*/ @@ -116,7 +113,7 @@ namespace SHADE void Execute(double dt) noexcept override; }; - class SH_API PhysicsFixedUpdate : public SHFixedSystemRoutine + class SH_API PhysicsFixedUpdate final : public SHFixedSystemRoutine { public: /*-------------------------------------------------------------------------------*/ @@ -132,7 +129,7 @@ namespace SHADE void Execute (double dt) noexcept override; }; - class SH_API PhysicsPostUpdate : public SHSystemRoutine + class SH_API PhysicsPostUpdate final : public SHSystemRoutine { public: /*-------------------------------------------------------------------------------*/ @@ -182,10 +179,9 @@ namespace SHADE void SyncRigidBodyComponents (std::vector& denseArray) noexcept; void SyncColliderComponents (std::vector& denseArray) noexcept; void SyncTransforms () noexcept; - // TODO(Diren): Trigger handling - // TODO(Diren): Remove when responsibility shifted to editor - SHTransformComponent* EnsureTransform (EntityID entityID); + SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); + SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); }; From 5016600397d70845eb509f5b90c6a7596eb22283 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Tue, 25 Oct 2022 23:39:35 +0800 Subject: [PATCH 461/793] Lights WIP --- Assets/Editor/Layouts/UserLayout.ini | 12 ++++++------ .../Graphics/MiddleEnd/Interface/SHRenderable.cpp | 7 +++++++ .../src/Graphics/MiddleEnd/Interface/SHRenderable.h | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini index 9add170c..4d608401 100644 --- a/Assets/Editor/Layouts/UserLayout.ini +++ b/Assets/Editor/Layouts/UserLayout.ini @@ -10,7 +10,7 @@ Collapsed=0 [Window][Hierarchy Panel] Pos=0,142 -Size=768,918 +Size=494,918 Collapsed=0 DockId=0x00000004,0 @@ -27,7 +27,7 @@ DockId=0x00000006,0 [Window][Profiler] Pos=0,48 -Size=768,92 +Size=494,92 Collapsed=0 DockId=0x00000003,0 @@ -38,17 +38,17 @@ Collapsed=0 DockId=0x00000002,0 [Window][î‹ Viewport] -Pos=770,48 -Size=877,1012 +Pos=496,48 +Size=1151,1012 Collapsed=0 DockId=0x00000002,0 [Docking][Data] DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=768,1036 Split=Y Selected=0x1E6EB881 + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=494,1036 Split=Y Selected=0x1E6EB881 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Selected=0xE096E5AE - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=877,1036 CentralNode=1 Selected=0xB41284E7 + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1151,1036 CentralNode=1 Selected=0xB41284E7 DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 0b1c1b66..523722e4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -27,6 +27,8 @@ namespace SHADE sharedMaterial = {}; material = {}; oldMaterial = {}; + + lightLayer = 0; } void SHRenderable::OnDestroy() @@ -87,6 +89,11 @@ namespace SHADE return material; } + uint8_t SHRenderable::GetLightLayer(void) const noexcept + { + return lightLayer; + } + void SHRenderable::ResetChangedFlag() { materialChanged = false; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h index bc885ca2..95b53b9e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.h @@ -56,6 +56,7 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ bool WasMaterialChanged() const noexcept { return materialChanged; } Handle GetPrevMaterial() const noexcept { return oldMaterial; } + uint8_t GetLightLayer (void) const noexcept; /*-------------------------------------------------------------------------------*/ /* Batcher Dispatcher Functions */ @@ -75,6 +76,7 @@ namespace SHADE Handle material; bool materialChanged = true; Handle oldMaterial; + uint8_t lightLayer; }; } From 4b7a8374698a161caa1cb4310c4bb6ef93e145f5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 26 Oct 2022 01:08:02 +0800 Subject: [PATCH 462/793] Fixed some bugs in render graph - Changed the eid buffer for instanced rendering to a vec2 (potentially vec3 or 4), to pass other types of data like light layer index. - Renamed some render graph nodes and subpasses. Added a dummy render pass to transition the scene to read only optimal. - offscreen buffer resource now transitions to eShaderReadOnlyOptimal instead of eGeneral --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 40 +++++++++++------- .../src/Graphics/MiddleEnd/Batching/SHBatch.h | 7 +-- .../MiddleEnd/Batching/SHSuperBatch.cpp | 2 +- .../GlobalData/SHGraphicsGlobalData.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsConstants.h | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 23 +++++----- .../Interface/SHInstancedIntegerData.h | 12 ++++++ .../Interface/SHPostOffscreenRenderSystem.cpp | 2 +- .../src/Graphics/Pipeline/SHPipelineState.cpp | 6 +++ .../Graphics/RenderGraph/SHRenderGraph.cpp | 3 ++ SHADE_Engine/src/Graphics/SHVkUtil.cpp | 12 ++++++ .../VertexDescriptors/SHVertexAttribute.h | 3 ++ TempShaderFolder/TestCubeVs.glsl | 5 ++- TempShaderFolder/TestCubeVs.spv | Bin 2300 -> 2376 bytes 14 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 40826047..476351c9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -110,7 +110,7 @@ namespace SHADE // Clear CPU buffers drawData.clear(); transformData.clear(); - eidData.clear(); + instancedIntegerData.clear(); matPropsData.reset(); matPropsDataSize = 0; @@ -120,7 +120,7 @@ namespace SHADE { drawDataBuffer[i].Free(); transformDataBuffer[i].Free(); - eidBuffer[i].Free(); + instancedIntegerBuffer[i].Free(); matPropsBuffer[i].Free(); } } @@ -208,7 +208,7 @@ namespace SHADE transformDataBuffer[frameIndex]->WriteToMemory(transformData.data(), static_cast(transformData.size() * sizeof(SHMatrix)), 0, 0); } - void SHBatch::UpdateEIDBuffer(uint32_t frameIndex) + void SHBatch::UpdateInstancedIntegerBuffer(uint32_t frameIndex) { if (frameIndex >= SHGraphicsConstants::NUM_FRAME_BUFFERS) { @@ -217,18 +217,23 @@ namespace SHADE } // Reset Transform Data - eidData.clear(); + instancedIntegerData.clear(); // Populate on the CPU for (auto& subBatch : subBatches) for (const SHRenderable* renderable : subBatch.Renderables) { - eidData.emplace_back(renderable->GetEID()); + instancedIntegerData.emplace_back(SHInstancedIntegerData + { + renderable->GetEID(), + renderable->GetLightLayer() + } + ); } // Transfer to GPU - if (eidBuffer[frameIndex]) - eidBuffer[frameIndex]->WriteToMemory(eidData.data(), static_cast(eidData.size() * sizeof(EntityID)), 0, 0); + if (instancedIntegerBuffer[frameIndex]) + instancedIntegerBuffer[frameIndex]->WriteToMemory(instancedIntegerData.data(), static_cast(instancedIntegerData.size() * sizeof(SHInstancedIntegerData)), 0, 0); } @@ -264,8 +269,8 @@ namespace SHADE transformData.reserve(numTotalElements); transformData.clear(); // - EID data - eidData.reserve(numTotalElements); - eidData.clear(); + instancedIntegerData.reserve(numTotalElements); + instancedIntegerData.clear(); // - Material Properties Data @@ -320,8 +325,13 @@ namespace SHADE transformData.emplace_back(transform->GetTRS()); } - eidData.emplace_back(eid); - + instancedIntegerData.emplace_back(SHInstancedIntegerData + { + eid, + renderable->GetLightLayer() + } + ); + // Material Properties if (!EMPTY_MAT_PROPS) { @@ -351,10 +361,10 @@ namespace SHADE device, transformDataBuffer[frameIndex], transformData.data(), TF_DATA_BYTES, BuffUsage::eVertexBuffer ); - const uint32_t EID_DATA_BYTES = static_cast(eidData.size() * sizeof(EntityID)); + const uint32_t EID_DATA_BYTES = static_cast(instancedIntegerData.size() * sizeof(SHInstancedIntegerData)); SHVkUtil::EnsureBufferAndCopyHostVisibleData ( - device, eidBuffer[frameIndex], eidData.data(), EID_DATA_BYTES, + device, instancedIntegerBuffer[frameIndex], instancedIntegerData.data(), EID_DATA_BYTES, BuffUsage::eVertexBuffer ); // - Material Properties Buffer @@ -378,8 +388,8 @@ namespace SHADE // Bind all required objects before drawing static std::array dynamicOffset { 0 }; cmdBuffer->BindPipeline(pipeline); - cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); - cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::EID, eidBuffer[frameIndex], 0); + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRANSFORM, transformDataBuffer[frameIndex], 0); + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::INTEGER_DATA, instancedIntegerBuffer[frameIndex], 0); if (matPropsDescSet[frameIndex]) { cmdBuffer->BindDescriptorSet diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h index 193fff0d..a7124e05 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.h @@ -23,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Math/SHMatrix.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h" #include "ECS_Base/SHECSMacros.h" +#include "Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h" namespace SHADE { @@ -79,7 +80,7 @@ namespace SHADE void Clear(); void UpdateMaterialBuffer(uint32_t frameIndex, Handle descPool); void UpdateTransformBuffer(uint32_t frameIndex); - void UpdateEIDBuffer(uint32_t frameIndex); + void UpdateInstancedIntegerBuffer(uint32_t frameIndex); void Build(Handle device, Handle descPool, uint32_t frameIndex) ; void Draw(Handle cmdBuffer, uint32_t frameIndex); @@ -111,7 +112,7 @@ namespace SHADE // CPU Buffers std::vector drawData; std::vector transformData; - std::vector eidData; + std::vector instancedIntegerData; std::unique_ptr matPropsData; Byte matPropsDataSize = 0; Byte singleMatPropAlignedSize = 0; @@ -120,7 +121,7 @@ namespace SHADE // GPU Buffers TripleBuffer drawDataBuffer; TripleBuffer transformDataBuffer; - TripleBuffer eidBuffer; + TripleBuffer instancedIntegerBuffer; TripleBuffer matPropsBuffer; TripleDescSet matPropsDescSet; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp index 14f2aa76..434e7163 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHSuperBatch.cpp @@ -85,7 +85,7 @@ namespace SHADE { batch.UpdateMaterialBuffer(frameIndex, descPool); batch.UpdateTransformBuffer(frameIndex); - batch.UpdateEIDBuffer(frameIndex); + batch.UpdateInstancedIntegerBuffer(frameIndex); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 94d1d2c5..0f1658f3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -115,7 +115,7 @@ namespace SHADE defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // Normals at binding 2 defaultVertexInputState.AddBinding(false, false, { SHVertexAttribute(SHAttribFormat::FLOAT_3D) }); // Tangents at binding 3 defaultVertexInputState.AddBinding(true, true, { SHVertexAttribute(SHAttribFormat::MAT_4D) }); // Transform at binding 4 - 7 (4 slots) - defaultVertexInputState.AddBinding(true, true, { SHVertexAttribute(SHAttribFormat::UINT32_1D) }); // EID at binding 8 + defaultVertexInputState.AddBinding(true, true, { SHVertexAttribute(SHAttribFormat::UINT32_2D) }); // Instanced integer data at index 8 } void SHGraphicsGlobalData::Init(Handle logicalDevice) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index f31816ce..4c3ba7f9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -182,7 +182,7 @@ namespace SHADE Vertex buffer bindings for the eid buffer. */ /***************************************************************************/ - static constexpr uint32_t EID = 5; + static constexpr uint32_t INTEGER_DATA = 5; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index b7d4bd2f..252d4af6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -176,18 +176,21 @@ namespace SHADE worldRenderGraph->AddResource("Scene Pre-Process", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32G32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto node = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene", "Scene Pre-Process"}, {}); // no predecessors + auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene", "Scene Pre-Process"}, {}); // no predecessors + auto gBufferSubpass = gBufferNode->AddSubpass("G-Buffer Write"); + gBufferSubpass->AddColorOutput("Scene Pre-Process"); + gBufferSubpass->AddColorOutput("Entity ID"); + gBufferSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - //First subpass to write to G-Buffer - auto gBufferWriteSubpass = node->AddSubpass("G-Buffer Write"); - gBufferWriteSubpass->AddColorOutput("Scene Pre-Process"); - gBufferWriteSubpass->AddColorOutput("Entity ID"); - gBufferWriteSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); + auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); + gBufferNode->AddNodeCompute (kirschShader, {"Scene Pre-Process", "Scene"}); + + auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors + auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); + dummySubpass->AddInput("Scene"); - auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - node->AddNodeCompute (greyscale, {"Scene Pre-Process", "Scene"}); // Generate world render graph worldRenderGraph->Generate(); @@ -201,7 +204,7 @@ namespace SHADE auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); - defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); + defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferSubpass); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h new file mode 100644 index 00000000..8ba5adf8 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ECS_Base/SHECSMacros.h" + +namespace SHADE +{ + struct SHInstancedIntegerData + { + EntityID eid; + uint32_t lightLayer; + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp index ebce5c9e..8b41a979 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.cpp @@ -68,7 +68,7 @@ namespace SHADE { std::vector combinedImageSampler { - std::make_tuple(offscreenRender->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eGeneral), + std::make_tuple(offscreenRender->GetImageView(), offscreenRenderSampler, vk::ImageLayout::eShaderReadOnlyOptimal), }; // Register the image view and sampler with the descriptor set. Now whenever rendering to the offscreen image is done, the descriptor set will see the change diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp index f8934bf6..c7ada11f 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineState.cpp @@ -142,6 +142,12 @@ namespace SHADE case SHAttribFormat::UINT32_1D: return std::make_tuple(1, 4, vk::Format::eR32Uint); + case SHAttribFormat::UINT32_2D: + return std::make_tuple(1, 8, vk::Format::eR32G32Uint); + case SHAttribFormat::UINT32_3D: + return std::make_tuple(1, 12, vk::Format::eR32G32B32Uint); + case SHAttribFormat::UINT32_4D: + return std::make_tuple(1, 16, vk::Format::eR32G32B32A32Uint); } return std::make_tuple(0, 0, vk::Format::eR32Sfloat); } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp index 4684419a..93be2413 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraph.cpp @@ -142,6 +142,9 @@ namespace SHADE attDesc.loadOp = vk::AttachmentLoadOp::eLoad; predAttDesc.storeOp = vk::AttachmentStoreOp::eStore; + attDesc.stencilLoadOp = vk::AttachmentLoadOp::eLoad; + attDesc.stencilStoreOp = vk::AttachmentStoreOp::eStore; + // TODO: Stencil load and store // When an image is done being used in a renderpass, the image layout will end up being the finalLayout diff --git a/SHADE_Engine/src/Graphics/SHVkUtil.cpp b/SHADE_Engine/src/Graphics/SHVkUtil.cpp index cf486a7a..8b21e7d1 100644 --- a/SHADE_Engine/src/Graphics/SHVkUtil.cpp +++ b/SHADE_Engine/src/Graphics/SHVkUtil.cpp @@ -51,6 +51,18 @@ namespace SHADE case vk::Format::eR32Uint: case vk::Format::eR32Sfloat: return 4; + case vk::Format::eR32G32Sint: + case vk::Format::eR32G32Uint: + case vk::Format::eR32G32Sfloat: + return 8; + case vk::Format::eR32G32B32Sint: + case vk::Format::eR32G32B32Uint: + case vk::Format::eR32G32B32Sfloat: + return 12; + case vk::Format::eR32G32B32A32Sint: + case vk::Format::eR32G32B32A32Uint: + case vk::Format::eR32G32B32A32Sfloat: + return 16; } return 0; } diff --git a/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h b/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h index b216f5f4..b7191c21 100644 --- a/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h +++ b/SHADE_Engine/src/Graphics/VertexDescriptors/SHVertexAttribute.h @@ -22,6 +22,9 @@ namespace SHADE // integer formats UINT32_1D, + UINT32_2D, + UINT32_3D, + UINT32_4D, }; struct SHVertexAttribute diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index b7453f13..c6b4071f 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -3,12 +3,13 @@ //#include "ShaderDescriptorDefinitions.glsl" + layout(location = 0) in vec3 aVertexPos; layout(location = 1) in vec2 aUV; layout(location = 2) in vec3 aNormal; layout(location = 3) in vec3 aTangent; layout(location = 4) in mat4 worldTransform; -layout(location = 8) in uint eid; +layout(location = 8) in uvec2 integerData; layout(location = 0) out struct @@ -36,7 +37,7 @@ void main() { Out.uv = aUV; Out2.materialIndex = gl_InstanceIndex; - Out2.eid = eid; + Out2.eid = integerData[0]; gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); Out.vertColor = vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index 1662cfbd308b1bd28ec466201103f91aaa761084..904062a69b13a76b244a967674fc08ed38bbca58 100644 GIT binary patch literal 2376 zcmZ9N+fEcg5QbZrT@VCC6i^Wt@PLAN;2??!2)K(u!GPRuCc7hgpQk?3nB_=7Q-ledfK%)_~~{Voa|o+P%E9zcbrP>$CF< zPhs?%PD_MySwEI1IrhUCy;lM{B)K8EBY7m5lPpOpl5I(+ejVEXD3PZM$~)Ea?rwQ! zt6FO|tF82V6jY-y4yyGq32JG08o=vrfFWud}#G+(pg2*Wt@KOr$G|>(RN%9zFD7VedG(my5c=uuVDKX#%XXAB%6Nf3n`kZjK3EohpOBjWA6jbQm(y5 zD@?;iY-Qa>*70!qB9>o;SE{TIHP^TKMoS# zmS}4MV>MkN(u+BlT27lE{8T&fv)XHI@!XO5_}WOK`a$BytuKw_IO8%ies*o$5zMnQ z!k8D2X$v^Ppqafx8Qx=Ce9K+DU<{h!A1)KTArWe?}2{F^T&D`SemQ-|#>opvf z!^j85?l5wK(MyM+gE60FdE7hTcfFgGk5v&1jGP5)XB=!eSI%Mjh%H85;@q9+^TauO zTsDh4({t{a)#Tal6Pty`RuH^<_G@`-IUK;`?)*e8gk(?#@3To&5O8H>kZNVNnm? zG-qVECr-u(Cm%L*Lk@TTuyhvZk7(yCa=^!CuH5;zq!Wvue%#j1S@eT=dJ7kvcx>hn zjPu&-g+HGAT)lT?lONmh@8_IR@gGR1|6pU%rnI{^!iSLep?31%rw(ksf3OkR)7pvS zUFq9QZi5s5SUYzDCmx$wboYFc>yFPK#_Wz6AA2sx=+mNf>gIg%zsP;y{sjpfa5(h$rG(yo5{EZf&M|Fg*y|jlpN_YZWAt)Qou~J2 zB*eqV&l~+xUVN((&WFPt*6g0mo$J%OFnF%Ex6<2d+mH>$a&>G<2WziwE5|ytyV~AK YCmue2YIAjzrSrb74s7`Ulyyn+A89?W<^TWy literal 2300 zcmZ9NYflqF6oyCG7QCT&!8;aEyr6gk#0!G9T1cv3P`@^tb|sr^x6O8omrwo${Ym~R zznJ(wGdrYlnv3)p&uiVb;3AheN+ZJCA%P-md(rV$(Cd_*=yOTej}QHD^Z{d>WyZ7d%NCv z-E8%G&3^tZiJD2AM$LAdMXfyEkI;<|>Eg7N4BEqjk`%+Wl(ffT?ZGJP=hypDmRGw; zH?w?TdCoJ~H-;F_usz7_nzMu-KiTyetr=xAX8gJn=1~@h$yVBqzFJ>kedLScw&DWY z3*~!AY)P^7WiM%NrTsiiTagd7d(bZzS2ow2ZYRnDzSn3No+BR|v**YO zM=w3c8ZMC4@;9BC;#L0@mh|&#Q8JP=h^@8j4*>U({s+~ zY6|Rk31;B0X$Jdz^cl=qPK$+~5dyQG(yFYvB0Hye>H?D=OfSJ`r-k_r(ZE-Pk7yFJeYg;{zfu{v561`6I6XZ1 zz`PrB`2Ejm&0zoYn%RpS=)t@zzyBqziFM})%$35&e(1sU*Xt`E#_6{l!lX`gm6c?=k;`>FF=U;C~=P1CNGYF3afSduiz5 zz4E#z1xMd@)MfhoR7N~{{M^S+<#l)9_D91RxSur{Z_M`u{LJ#Mwij9t s*S0PU$MAJ*Xbm@9+slF*uI-gL;x}aYsm<3>)tbBXb%4?TRn}G6KNk$B#sB~S From fbb613b859a202308991120ad7dca9fff2c628a3 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 26 Oct 2022 01:16:49 +0800 Subject: [PATCH 463/793] m dumb. it work. --- .../Components/SHColliderComponent.cpp | 13 --- .../Components/SHRigidBodyComponent.cpp | 26 ----- .../Physics/Components/SHRigidBodyComponent.h | 8 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 24 ---- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 106 ++++++++++-------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 4 +- 6 files changed, 66 insertions(+), 115 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index 242b8d8f..c216bb83 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -69,24 +69,11 @@ namespace SHADE void SHColliderComponent::OnCreate() { system = SHSystemManager::GetSystem(); - //if (!system) - //{ - // SHLOG_ERROR("Physics system does not exist, Collider Component not added!") - // return; - //} - - //system->AddCollider(GetEID()); } void SHColliderComponent::OnDestroy() { - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to remove Collider component!") - return; - } - system->RemoveCollider(GetEID()); } SHBoundingBox* SHColliderComponent::AddBoundingBox(const SHVec3& halfExtents, const SHVec3& posOffset) noexcept diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 934b67f6..1c671d23 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -32,7 +32,6 @@ namespace SHADE , mass { 1.0f } , drag { 0.01f } , angularDrag { 0.01f } - { // Set default flags: Gravity & Sleeping enabled flags |= 1U << 0; @@ -262,31 +261,6 @@ namespace SHADE /* Public Function Member Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHRigidBodyComponent::OnCreate() - { - system = SHSystemManager::GetSystem(); - //if (!system) - //{ - // SHLOG_ERROR("Physics system does not exist, Rigid Body Component not added!") - // return; - //} - - //// Notify Physics System - //system->AddRigidBody(GetEID()); - } - - void SHRigidBodyComponent::OnDestroy() - { - // Notify Physics System - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to remove Rigid Body Component!") - return; - } - - system->RemoveRigidBody(GetEID()); - } - void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 03b350e1..78de84e7 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -10,6 +10,7 @@ #pragma once +#include #include // Project Headers @@ -125,9 +126,6 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void OnCreate () override; - void OnDestroy () override; - void AddForce (const SHVec3& force) const noexcept; void AddForceAtLocalPos (const SHVec3& force, const SHVec3& localPos) const noexcept; void AddForceAtWorldPos (const SHVec3& force, const SHVec3& worldPos) const noexcept; @@ -155,7 +153,7 @@ namespace SHADE uint16_t dirtyFlags; bool interpolate; - SHPhysicsSystem* system; + rp3d::RigidBody* rp3dBody; float mass; float drag; @@ -167,8 +165,6 @@ namespace SHADE SHVec3 torque; SHVec3 angularVelocity; - // TODO(Diren): Once quaternions have replaced euler angles in transforms, store it for the rigidbody. - SHVec3 position; SHQuaternion orientation; diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 8c067482..986ce503 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -155,30 +155,6 @@ namespace SHADE return static_cast(rp3dBody->getNbColliders()) - 1; } - void SHPhysicsObject::DestroyRigidBody(SHColliderComponent* c) noexcept - { - world->destroyRigidBody(reinterpret_cast(rp3dBody)); - rp3dBody = nullptr; - - if (c != nullptr) - { - // Preserve colliders as a collision body - rp3dBody = world->createCollisionBody(rp3d::Transform{ c->position, c->orientation }); - for (auto& collider : c->colliders | std::views::keys) - AddCollider(&collider); - } - } - - void SHPhysicsObject::DestroyCollisionBody() noexcept - { - // Remove all colliders - for (uint32_t i = 0; i < rp3dBody->getNbColliders(); ++i) - { - auto* collider = rp3dBody->getCollider(i); - rp3dBody->removeCollider(collider); - } - } - void SHPhysicsObject::RemoveCollider(int index) { const int NUM_COLLIDERS = static_cast(rp3dBody->getNbColliders()); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 76e54b09..d4da329b 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -194,6 +194,10 @@ namespace SHADE const std::shared_ptr ADD_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::AddPhysicsComponent) }; const ReceiverPtr ADD_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(ADD_COMPONENT_RECEIVER); SHEventManager::SubscribeTo(SH_COMPONENT_ADDED_EVENT, ADD_COMPONENT_RECEIVER_PTR); + + const std::shared_ptr REMOVE_COMPONENT_RECEIVER { std::make_shared>(this, &SHPhysicsSystem::RemovePhysicsComponent) }; + const ReceiverPtr REMOVE_COMPONENT_RECEIVER_PTR = std::dynamic_pointer_cast(REMOVE_COMPONENT_RECEIVER); + SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, REMOVE_COMPONENT_RECEIVER_PTR); } void SHPhysicsSystem::Exit() @@ -201,52 +205,23 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - //void SHPhysicsSystem::AddRigidBody(EntityID entityID) noexcept + //void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept //{ - // //#ifdef _DEBUG - // // SHLOG_INFO("Adding a Rigidbody to the Physics World.") - // //#endif + // #ifdef _DEBUG + // SHLOG_INFO("Removing a Rigidbody from the Physics World.") + // #endif - // + // auto* physicsObject = GetPhysicsObject(entityID); + // SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") //} - //void SHPhysicsSystem::AddCollider(EntityID entityID) noexcept + //void SHPhysicsSystem::RemoveCollider(EntityID entityID) noexcept //{ - // //#ifdef _DEBUG - // // SHLOG_INFO("Adding a Collider to the Physics World.") - // //#endif - - // auto* physicsObject = EnsurePhysicsObject(entityID); - - // physicsObject->CreateCollisionBody - // ( - // SHComponentManager::GetComponent(entityID), - // SHComponentManager::GetComponent(entityID) - // ); + // #ifdef _DEBUG + // SHLOG_INFO("Removing a Collider from the Physics World.") + // #endif //} - void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept - { - #ifdef _DEBUG - SHLOG_INFO("Removing a Rigidbody from the Physics World.") - #endif - - auto* physicsObject = GetPhysicsObject(entityID); - SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") - - physicsObject->DestroyRigidBody(SHComponentManager::GetComponent_s(entityID)); - - if (physicsObject->rp3dBody == nullptr) - DestroyPhysicsObject(entityID); - } - - void SHPhysicsSystem::RemoveCollider(EntityID entityID) noexcept - { - #ifdef _DEBUG - SHLOG_INFO("Removing a Collider from the Physics World.") - #endif - } - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) { auto* physicsObject = GetPhysicsObject(entityID); @@ -255,7 +230,8 @@ namespace SHADE void SHPhysicsSystem::RemoveCollisionShape(EntityID entityID, int index) { - + auto* physicsObject = GetPhysicsObject(entityID); + physicsObject->RemoveCollider(index); } void SHPhysicsSystem::PhysicsPreUpdate::Execute(double) noexcept @@ -471,8 +447,8 @@ namespace SHADE static const auto RIGID_BODY_ID = ComponentFamily::GetID(); static const auto COLLIDER_ID = ComponentFamily::GetID(); - const auto COMPONENT_ADDED_ID = EVENT_DATA->data->addedComponentType; - const bool IS_PHYSICS_COMPONENT = COMPONENT_ADDED_ID == RIGID_BODY_ID || COMPONENT_ADDED_ID == COLLIDER_ID; + const auto ADDED_ID = EVENT_DATA->data->addedComponentType; + const bool IS_PHYSICS_COMPONENT = ADDED_ID == RIGID_BODY_ID || ADDED_ID == COLLIDER_ID; if (IS_PHYSICS_COMPONENT) { const EntityID ENTITY_ID = EVENT_DATA->data->eid; @@ -488,7 +464,7 @@ namespace SHADE auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - if (COMPONENT_ADDED_ID == RIGID_BODY_ID) + if (ADDED_ID == RIGID_BODY_ID) { if (colliderComponent != nullptr) { @@ -513,7 +489,7 @@ namespace SHADE } } - if (COMPONENT_ADDED_ID == COLLIDER_ID) + if (ADDED_ID == COLLIDER_ID) { colliderComponent->position = transformComponent->GetWorldPosition(); colliderComponent->orientation = transformComponent->GetWorldOrientation(); @@ -539,6 +515,48 @@ namespace SHADE { const auto& EVENT_DATA = reinterpret_cast*>(removeComponentEvent.get()); + static const auto RIGID_BODY_ID = ComponentFamily::GetID(); + static const auto COLLIDER_ID = ComponentFamily::GetID(); + + const auto REMOVED_ID = EVENT_DATA->data->removedComponentType; + const bool IS_PHYSICS_COMPONENT = REMOVED_ID == RIGID_BODY_ID || REMOVED_ID == COLLIDER_ID; + if (IS_PHYSICS_COMPONENT) + { + const EntityID ENTITY_ID = EVENT_DATA->data->eid; + auto* physicsObject = GetPhysicsObject(ENTITY_ID); + + SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") + + if (REMOVED_ID == RIGID_BODY_ID) + { + world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); + physicsObject->rp3dBody = nullptr; + + auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + if (colliderComponent != nullptr) + { + // Preserve colliders as a collision body + physicsObject->rp3dBody = world->createCollisionBody + ( + rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } + ); + + for (auto& collider : colliderComponent->colliders | std::views::keys) + physicsObject->AddCollider(&collider); + } + } + + if (REMOVED_ID == COLLIDER_ID) + { + // Remove all colliders + for (uint32_t i = 0; i < physicsObject->rp3dBody->getNbColliders(); ++i) + physicsObject->rp3dBody->removeCollider(physicsObject->rp3dBody->getCollider(i)); + } + + if (physicsObject->rp3dBody == nullptr) + DestroyPhysicsObject(ENTITY_ID); + } + return EVENT_DATA->handle; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index d88f8c06..0af22e7a 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -87,8 +87,8 @@ namespace SHADE //void AddRigidBody (EntityID entityID) noexcept; //void AddCollider (EntityID entityID) noexcept; - void RemoveRigidBody (EntityID entityID) noexcept; - void RemoveCollider (EntityID entityID) noexcept; + //void RemoveRigidBody (EntityID entityID) noexcept; + //void RemoveCollider (EntityID entityID) noexcept; void AddCollisionShape (EntityID entityID, SHCollider* collider); void RemoveCollisionShape (EntityID entityID, int index); From 7ba02aeb0fb7fd5f1e2292078b32ed7c98933287 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 26 Oct 2022 01:46:13 +0800 Subject: [PATCH 464/793] Removed unused functions, fixed RigidBody --- SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp | 1 - SHADE_Engine/src/Physics/SHPhysicsObject.h | 5 ----- 2 files changed, 6 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 1c671d23..8327c3ec 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -28,7 +28,6 @@ namespace SHADE , flags { 0 } , dirtyFlags { 0 } , interpolate { true } - , system { nullptr } , mass { 1.0f } , drag { 0.01f } , angularDrag { 0.01f } diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.h b/SHADE_Engine/src/Physics/SHPhysicsObject.h index 11e41ad1..67e5ec64 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.h +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.h @@ -69,13 +69,8 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void CreateRigidBody (const SHVec3& pos, const SHQuaternion& orientation); - void CreateCollisionBody (const SHVec3& pos, const SHQuaternion& orientation); int AddCollider (SHCollider* collider); - - void DestroyRigidBody (SHColliderComponent* c) noexcept; void RemoveCollider (int index); - void DestroyCollisionBody () noexcept; void SyncRigidBody (SHRigidBodyComponent* rb) const noexcept; void SyncColliders (SHColliderComponent* c) const noexcept; From c0c6d35b295d0ee8a9fbd94a76e9c6b1be4ccdbe Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 26 Oct 2022 01:53:08 +0800 Subject: [PATCH 465/793] Split function in shader module library to get vk flag conversion Changed some calls to get build in modules --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 +- .../Shaders/SHShaderModuleLibrary.cpp | 69 +++++++++++-------- .../MiddleEnd/Shaders/SHShaderModuleLibrary.h | 9 +-- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index fe3caccd..81be28a7 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -183,8 +183,8 @@ namespace SHADE worldRenderer->SetCameraDirector(cameraSystem->CreateDirector()); - auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); - auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); + auto cubeVS = shaderModuleLibrary.GetBuiltInShaderModule("TestCubeVs.glsl"); + auto cubeFS = shaderModuleLibrary.GetBuiltInShaderModule("TestCubeFs.glsl"); defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferWriteSubpass); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp index 0d5fc84f..15b0111d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.cpp @@ -1,7 +1,6 @@ #include "SHPch.h" #include "SHShaderModuleLibrary.h" #include "Graphics/Devices/SHVkLogicalDevice.h" -#include "Assets/Asset Types/SHShaderAsset.h" #include "Assets/SHAssetManager.h" namespace SHADE @@ -68,45 +67,61 @@ namespace SHADE // return {}; //} - void SHShaderModuleLibrary::ImportBuiltInShaderSource(Handle& logicalDeviceHdl) noexcept + vk::ShaderStageFlagBits SHShaderModuleLibrary::GetVkShaderFlag(SH_SHADER_TYPE type) noexcept { - uint32_t idCounter{ 0 }; - const AssetID DEFAULT_VS_ID{ 69 }; - const AssetID DEFAULT_FS_ID{ 420 }; + vk::ShaderStageFlagBits shaderType{}; + switch (type) + { + case SH_SHADER_TYPE::VERTEX: + shaderType = vk::ShaderStageFlagBits::eVertex; + break; + case SH_SHADER_TYPE::FRAGMENT: + shaderType = vk::ShaderStageFlagBits::eFragment; + break; + case SH_SHADER_TYPE::COMPUTE: + shaderType = vk::ShaderStageFlagBits::eCompute; + break; + default: + shaderType = vk::ShaderStageFlagBits::eVertex; + break; + } - auto vsData{ SHAssetManager::GetData(DEFAULT_VS_ID) }; - Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(vsData->spirvBinary, "main", shaderType, vsData->name); - shaderModules.emplace(idCounter++, newShaderModule); + return shaderType; + } + + Handle SHShaderModuleLibrary::GetBuiltInShaderModule(std::string shaderName) const noexcept + { + if (builtInShaderModules.contains(shaderName)) + return shaderModules.at(builtInShaderModules.at(shaderName)); + else + return {}; } void SHShaderModuleLibrary::ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept { uint32_t idCounter{ 0 }; - auto data = SHAssetManager::GetAllDataOfType(AssetType::SHADER); + auto const data = SHAssetManager::GetAllDataOfType(AssetType::SHADER); for (auto const& dataPtr : data) { - auto shader = dynamic_cast(dataPtr); - vk::ShaderStageFlagBits shaderType{}; - switch (shader->shaderType) - { - case SH_SHADER_TYPE::VERTEX: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - case SH_SHADER_TYPE::FRAGMENT: - shaderType = vk::ShaderStageFlagBits::eFragment; - break; - case SH_SHADER_TYPE::COMPUTE: - shaderType = vk::ShaderStageFlagBits::eCompute; - break; - default: - shaderType = vk::ShaderStageFlagBits::eVertex; - break; - } + auto const shader = dynamic_cast(dataPtr); + + Handle newShaderModule = + logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", GetVkShaderFlag(shader->shaderType), shader->name); - Handle newShaderModule = logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", shaderType, shader->name); shaderModules.emplace(idCounter++, newShaderModule); } + + auto const builtIn = SHAssetManager::GetAllDataOfType(AssetType::SHADER_BUILT_IN); + for (auto const& dataPtr : builtIn) + { + auto const shader = dynamic_cast(dataPtr); + + Handle newShaderModule = + logicalDeviceHdl->CreateShaderModule(shader->spirvBinary, "main", GetVkShaderFlag(shader->shaderType), shader->name); + + builtInShaderModules.emplace(shader->name, newShaderModule); + } } void SHShaderModuleLibrary::ReflectAllShaderModules() noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h index be4bdbfb..9daae816 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Shaders/SHShaderModuleLibrary.h @@ -2,7 +2,7 @@ #define SH_SHADER_MODULE_LIBRARY_H #include "Graphics/Shaders/SHVkShaderModule.h" -#include +#include "Assets/Asset Types/SHShaderAsset.h" namespace SHADE { @@ -23,6 +23,8 @@ namespace SHADE std::unordered_map> shaderModules; std::unordered_map> builtInShaderModules; + inline vk::ShaderStageFlagBits GetVkShaderFlag(SH_SHADER_TYPE type) noexcept; + public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ @@ -32,9 +34,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - //Handle GetShaderModule(std::string shaderName) const noexcept; - - void ImportBuiltInShaderSource(Handle& logicalDeviceHdl) noexcept; + Handle GetBuiltInShaderModule(std::string shaderName) const noexcept; + void ImportAllShaderSource(Handle& logicalDeviceHdl) noexcept; void ReflectAllShaderModules() noexcept; }; From 54796773b2145f66f2dc57c6cd0b0f6cea6d820d Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 26 Oct 2022 01:53:26 +0800 Subject: [PATCH 466/793] Added built in shader extension Collision check for asset IDs --- SHADE_Engine/src/Assets/SHAssetMacros.h | 5 ++++- SHADE_Engine/src/Assets/SHAssetManager.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 31b96724..3b352d4e 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -45,6 +45,7 @@ enum class AssetType : AssetTypeMeta INVALID = 0, AUDIO = 1, SHADER, + SHADER_BUILT_IN, MATERIAL, IMAGE, TEXTURE, @@ -70,7 +71,8 @@ constexpr std::string_view ASSET_ROOT {"../../Assets"}; constexpr std::string_view META_EXTENSION {".shmeta"}; constexpr std::string_view AUDIO_EXTENSION {".ogg"}; constexpr std::string_view AUDIO_WAV_EXTENSION {".wav"}; -constexpr std::string_view SHADER_EXTENSION{".shshader"}; +constexpr std::string_view SHADER_EXTENSION{ ".shshader" }; +constexpr std::string_view SHADER_BUILT_IN_EXTENSION{".shshaderb"}; constexpr std::string_view SCRIPT_EXTENSION {".cs"}; constexpr std::string_view SCENE_EXTENSION {".shade"}; constexpr std::string_view PREFAB_EXTENSION {".shprefab"}; @@ -81,6 +83,7 @@ constexpr std::string_view MESH_EXTENSION {".shmesh"}; constexpr std::string_view EXTENSIONS[] = { AUDIO_EXTENSION, SHADER_EXTENSION, + SHADER_BUILT_IN_EXTENSION, MATERIAL_EXTENSION, TEXTURE_EXTENSION, MESH_EXTENSION, diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 28790dca..3cd4c33c 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -46,7 +46,13 @@ namespace SHADE result |= unique; - while (result == 0) + while (result == 0 || + std::ranges::any_of( + assetCollection.begin(), + assetCollection.end(), + [result](SHAsset const& asset) { return asset.id == result; } + ) + ) { result = GenerateAssetID(type); } @@ -278,6 +284,7 @@ namespace SHADE { loaders[static_cast(AssetType::AUDIO)] = nullptr; loaders[static_cast(AssetType::SHADER)] = dynamic_cast(new SHShaderSourceLoader()); + loaders[static_cast(AssetType::SHADER_BUILT_IN)] = loaders[static_cast(AssetType::SHADER)]; loaders[static_cast(AssetType::MATERIAL)] = nullptr; loaders[static_cast(AssetType::TEXTURE)] = dynamic_cast(new SHTextureLoader()); loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); From 5637fb707f7f24e905c43516c399019af1f8ec31 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 26 Oct 2022 02:14:43 +0800 Subject: [PATCH 467/793] Tested light component. Values reflected in renderdoc correctly - Added pure copy compute shader (used instead of kirsch) - Created sparse set for lights - Note that while the instanced attribute contains both EID and layer light index and in the future potentially more, the objects still write to a uint framebuffer. - Light layer index is in a different frame buffer than the eid one. - Updated shaders to accommodate light layer index. --- SHADE_Application/src/Scenes/SBTestScene.cpp | 2 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 25 +++++-- .../MiddleEnd/Interface/SHMousePickSystem.cpp | 3 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 2 + TempShaderFolder/PureCopyCs.glsl | 67 ++++++++++++++++++ TempShaderFolder/PureCopyCs.spv | Bin 0 -> 1264 bytes TempShaderFolder/TestCubeFs.glsl | 3 + TempShaderFolder/TestCubeFs.spv | Bin 2156 -> 2300 bytes TempShaderFolder/TestCubeVs.glsl | 4 +- TempShaderFolder/TestCubeVs.spv | Bin 2376 -> 2492 bytes 10 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 TempShaderFolder/PureCopyCs.glsl create mode 100644 TempShaderFolder/PureCopyCs.spv diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index b414ecaf..9c178429 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -12,6 +12,7 @@ #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" +#include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Assets/SHAssetManager.h" #include "Camera/SHCameraComponent.h" @@ -158,6 +159,7 @@ namespace Sandbox scriptEngine->AddScript(raccoonShowcase, "RaccoonShowcase"); SHComponentManager::AddComponent(0); + SHComponentManager::AddComponent(0); SHComponentManager::RemoveComponent (0); SHComponentManager::RemoveComponent (0); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 252d4af6..7b8b9e45 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -125,14 +125,17 @@ namespace SHADE shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true); shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); + auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); cubeVS->Reflect(); cubeFS->Reflect(); greyscale->Reflect(); + pureCopy->Reflect(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -173,19 +176,27 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Scene Pre-Process", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); - worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32G32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->AddResource("Scene Pre-Process", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); + worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->AddResource("Light Layer Indices", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); - auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", { "Entity ID", "Depth Buffer", "Scene", "Scene Pre-Process"}, {}); // no predecessors + auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", { "Light Layer Indices", "Entity ID", "Depth Buffer", "Scene", "Scene Pre-Process"}, {}); // no predecessors auto gBufferSubpass = gBufferNode->AddSubpass("G-Buffer Write"); gBufferSubpass->AddColorOutput("Scene Pre-Process"); gBufferSubpass->AddColorOutput("Entity ID"); + gBufferSubpass->AddColorOutput("Light Layer Indices"); gBufferSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - gBufferNode->AddNodeCompute (kirschShader, {"Scene Pre-Process", "Scene"}); + //// kirsch + //auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); + //gBufferNode->AddNodeCompute(kirschShader, { "Scene Pre-Process", "Scene" }); + + // copy + auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); + gBufferNode->AddNodeCompute(pureCopyShader, { "Scene Pre-Process", "Scene" }); + auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp index 57a08d47..46126ae1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHMousePickSystem.cpp @@ -7,6 +7,7 @@ #include "Graphics/Buffers/SHVkBuffer.h" #include "Graphics/SHVkUtil.h" #include "Graphics/MiddleEnd/Interface/SHViewport.h" +//#include "Graphics/MiddleEnd/Interface/SHInstancedIntegerData.h" namespace SHADE { @@ -53,7 +54,7 @@ namespace SHADE // wait for the copy to be done afterCopyFence->Wait(true, std::numeric_limits::max()); - pickedEID = imageDataDstBuffer->GetDataFromMappedPointer(static_cast(viewportMousePos.y) * entityIDAttachment->GetWidth() + static_cast(viewportMousePos.x)); + pickedEID = imageDataDstBuffer->GetDataFromMappedPointer(static_cast(viewportMousePos.y) * entityIDAttachment->GetWidth() + static_cast(viewportMousePos.x)); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 30bbd363..8d9efe54 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -329,6 +329,8 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::Init(Handle device, Handle descPool) noexcept { + SHComponentManager::CreateComponentSparseSet(); + logicalDevice = device; uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); diff --git a/TempShaderFolder/PureCopyCs.glsl b/TempShaderFolder/PureCopyCs.glsl new file mode 100644 index 00000000..89da6dd9 --- /dev/null +++ b/TempShaderFolder/PureCopyCs.glsl @@ -0,0 +1,67 @@ +//#version 450 +// +//layout(local_size_x = 16, local_size_y = 16) in; +//layout(set = 4, binding = 0, rgba8) uniform image2D targetImage; +// +// +//void main() +//{ +// ivec2 imageSize = imageSize (targetImage); +// +// if (gl_GlobalInvocationID.x >= imageSize.x && gl_GlobalInvocationID.y >= imageSize.y) +// return; +// +// // load the image +// vec4 color = imageLoad (targetImage, ivec2 (gl_GlobalInvocationID)); +// +// // get the average +// float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; +// +// // store result into result image +// imageStore(targetImage, ivec2(gl_GlobalInvocationID), vec4(average, average, average, 1.0f)); +// +//} +// +// +// +// + +/* Start Header *****************************************************************/ + +/*! \file (e.g. kirsch.comp) + + \author William Zheng, william.zheng, 60001906. Brandon Mak, brandon.hao 390003920. + + \par william.zheng\@digipen.edu. brandon.hao\@digipen.edu. + + \date Sept 20, 2022 + + \brief Copyright (C) 20xx DigiPen Institute of Technology. + + Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. */ + + /* End Header *******************************************************************/ + +#version 450 + + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, rgba8) uniform image2D inputImage; +layout(set = 4, binding = 1, rgba8) uniform image2D targetImage; + + +void main() +{ + // convenient variables + ivec2 globalThread = ivec2(gl_GlobalInvocationID); + + vec3 color = imageLoad (inputImage, globalThread).rgb; + + // store result into result image + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1.0f)); + +} + + + + diff --git a/TempShaderFolder/PureCopyCs.spv b/TempShaderFolder/PureCopyCs.spv new file mode 100644 index 0000000000000000000000000000000000000000..bf967bbf80b801df07d30879ae29890b7e7b147b GIT binary patch literal 1264 zcmYk5TTj$b6oog;6bBFx5%6wDR8(;EL5+z~Uo_1mlMF`Ro6>2G_QEbd(~Td);dvzK;pHf>Ri*{Ur$8;!n=2B-C8@cPXw6zkS; zLNpuF1hQS>B*{wxYr-}0aGUOqPZiUX9c4HBBd4pX(I}3_<7o6HPG__DwEkISagmo< zJjv%-TIc5(x?W3{muYb}X$t}=+Vum~URI51Q5`46_aE~tnaEY2J=fc`h$9yomgiNP z)Ol47Kf8F>c4gD5sOHWO?6z!P&d%!LNitP0f&M~qbuyo34H>CAGp`DF1$>@+DA1Sp z`?_=RL)ms5pZJ16d>~7{Tf&w$#?Ja~d*<%j(kzJ!1)kZJuNUb!w4wZ-EF3_;;&}bj zK~H`--X{91vgCq)-}ubs^Ka-*P4qkZe?vAD$h9qt?{n?weo>bhmhEN}Cs+H>D?6e- zvvSZ|j!;#19o;Msl9w{?( X9SA&+p7_3yst)~9m-s(*^G^5=Amdbt literal 0 HcmV?d00001 diff --git a/TempShaderFolder/TestCubeFs.glsl b/TempShaderFolder/TestCubeFs.glsl index 18890c92..4dc6deca 100644 --- a/TempShaderFolder/TestCubeFs.glsl +++ b/TempShaderFolder/TestCubeFs.glsl @@ -23,6 +23,7 @@ layout(location = 2) flat in struct { int materialIndex; uint eid; + uint lightLayerIndex; } In2; //layout (set = 0, binding = ) @@ -35,6 +36,7 @@ layout (set = 3, binding = 0) buffer MaterialProperties // For materials layout(location = 0) out vec4 outColor; layout(location = 1) out uint outEntityID; +layout(location = 2) out uint lightLayerIndices; void main() { @@ -42,5 +44,6 @@ void main() MatProp.data[In2.materialIndex].color / MatProp.data[In2.materialIndex].alpha; outEntityID = In2.eid; + lightLayerIndices = In2.lightLayerIndex; //outColor = vec4 (1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv index bde6213644b38cb5e844a04ac20ad1ca3e43b62c..9955abe53ff6b413215a81ed14c71a2cae54e69d 100644 GIT binary patch delta 209 zcmaDO@JEoBnMs+Qfq{{Mi-DKHWg>4bBiF=gMMlSsGoLd`voWwUNH8!kFadE+W_m`6 zPhw?ik!M~?YQ^MwrbKC0pu8ixTxN1=F$2Tq`%H$6yzUGvUlUf`^{+K$iT{A2jn^du@n%S0#cgLy1J`o2M4Byo!jAdyHWSn6>Gm6kj1$XR}Xum`Jp-6&pWeox39w( zbAy2hXRm&&nqk-K@$!W=~iU_!5oP&8H|b`< zUJG{av%cXRG2CHgJr6o}@t-~i{g8B4-3>d_*L)sju}_xMPV_zaYQaaoDDG@=xoZ-y ze$AVHGs+4!_3}!voHF&y4(HEAuU{oJSR$kNI;6y7pU^Jq277Jcqzsk%Bp%(bm7VJv)A^xG4E$)PmI^|nP;@)Ch)UXvt=kcv4$(E1z zqQ5L^WJnhLT9o-vVyGnyj_f@vM0&mCQp-l~jnB0c&qK5;@!XNw`PR*n&d1EB{V&~Y zt>7|GzPPsTh^-dp%fA)HCm|oR=0Ey$HA*?cHN>I6696qRJqA+?n4W-n3ovs`%uI=y zY5Y4SOFD&jW5HpWjeOYH%|=dayrtRDu`#<1d8`lk?d_)JV=ak=jhsUP7aTC0ecNpM zz=Msv#MzyA=QG>zlrW1s^XA;KsHqmdT`&uOQ+xG|cxNzoIjB=OXG#c+eneVb`=sQk z;;9QvelTwdhC3n5w+aXQr0{O-mT=rL(AETs!BH2R@kDvKmfECl)_% za!NaA@g~IczHqS<4`vpzabC4%_*13N>OCt=ez4VdUOM?L{(^M!omBjcc6x$sLfRGW z);D|z=UmlJUi{Pr=05@3xbQXY#L;Vd%N&BS6MsWHHDD(m%zWCtZPyPqm@nMG#=D!0Q_lEme;@r`X8m%W+XUIW9;n$0h05Eyrc)f`s$oa0mMSLc;9YTZ7?QZ7-!)YikH&V_6+b(y>)*TP|(Y+Fr>gpQk?3nB_=7Q-ledfK%)_~~{Voa|o+P%E9zcbrP>$CF< zPhs?%PD_MySwEI1IrhUCy;lM{B)K8EBY7m5lPpOpl5I(+ejVEXD3PZM$~)Ea?rwQ! zt6FO|tF82V6jY-y4yyGq32JG08o=vrfFWud}#G+(pg2*Wt@KOr$G|>(RN%9zFD7VedG(my5c=uuVDKX#%XXAB%6Nf3n`kZjK3EohpOBjWA6jbQm(y5 zD@?;iY-Qa>*70!qB9>o;SE{TIHP^TKMoS# zmS}4MV>MkN(u+BlT27lE{8T&fv)XHI@!XO5_}WOK`a$BytuKw_IO8%ies*o$5zMnQ z!k8D2X$v^Ppqafx8Qx=Ce9K+DU<{h!A1)KTArWe?}2{F^T&D`SemQ-|#>opvf z!^j85?l5wK(MyM+gE60FdE7hTcfFgGk5v&1jGP5)XB=!eSI%Mjh%H85;@q9+^TauO zTsDh4({t{a)#Tal6Pty`RuH^<_G@`-IUK;`?)*e8gk(?#@3To&5O8H>kZNVNnm? zG-qVECr-u(Cm%L*Lk@TTuyhvZk7(yCa=^!CuH5;zq!Wvue%#j1S@eT=dJ7kvcx>hn zjPu&-g+HGAT)lT?lONmh@8_IR@gGR1|6pU%rnI{^!iSLep?31%rw(ksf3OkR)7pvS zUFq9QZi5s5SUYzDCmx$wboYFc>yFPK#_Wz6AA2sx=+mNf>gIg%zsP;y{sjpfa5(h$rG(yo5{EZf&M|Fg*y|jlpN_YZWAt)Qou~J2 zB*eqV&l~+xUVN((&WFPt*6g0mo$J%OFnF%Ex6<2d+mH>$a&>G<2WziwE5|ytyV~AK YCmue2YIAjzrSrb74s7`Ulyyn+A89?W<^TWy From d9584a0e39932b403e6ecde24854016309a2a143 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 14:32:00 +0800 Subject: [PATCH 468/793] Changed SHEditor.hpp to .h Handle editor camera update when interacting with viewport window only --- .../src/Application/SBApplication.cpp | 4 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 2 +- .../Inspector/SHEditorInspector.cpp | 12 +++-- .../EditorWindow/MenuBar/SHEditorMenuBar.cpp | 2 +- .../ViewportWindow/SHEditorViewport.cpp | 47 ++++++++++++++++++- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 2 +- SHADE_Engine/src/Editor/SHEditor.cpp | 2 +- .../src/Editor/{SHEditor.hpp => SHEditor.h} | 0 .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 +- 9 files changed, 60 insertions(+), 13 deletions(-) rename SHADE_Engine/src/Editor/{SHEditor.hpp => SHEditor.h} (100%) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 54dc0ccf..c6750707 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -4,7 +4,7 @@ //#define SHEDITOR #ifdef SHEDITOR -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" //#include "Scenes/SBEditorScene.h" #endif // SHEDITOR @@ -94,7 +94,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); - SHSystemManager::RegisterRoutine(); + //SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); #ifdef SHEDITOR diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index f2f8d927..fff0a188 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -6,7 +6,7 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" #include "SHHierarchyPanel.h" diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index ada5a35a..511f8642 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -1,6 +1,6 @@ #include "SHpch.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "SHEditorInspector.h" #include "ECS_Base/SHECSMacros.h" @@ -92,11 +92,15 @@ namespace SHADE DrawAddComponentButton(eid); DrawAddComponentButton(eid); DrawAddComponentButton(eid); - if(DrawAddComponentButton(eid)) + if (!SHComponentManager::HasComponent(eid)) { - if(SHComponentManager::GetComponent_s(eid) == nullptr) + if (ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data())) { - SHComponentManager::AddComponent(eid); + if (SHComponentManager::GetComponent_s(eid) == nullptr) + { + SHComponentManager::AddComponent(eid); + } + SHComponentManager::AddComponent(eid); } } ImGui::EndMenu(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp index c33f4fb6..50b878a8 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/MenuBar/SHEditorMenuBar.cpp @@ -3,7 +3,7 @@ //#==============================================================# //|| SHADE Includes || //#==============================================================# -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "SHEditorMenuBar.h" #include "Editor/IconsMaterialDesign.h" #include "Editor/Command/SHCommandManager.h" diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index f5170999..17bf6fa5 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -5,13 +5,15 @@ #include "ImGuizmo.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/IconsMaterialDesign.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h" #include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" #include "Graphics/Descriptors/SHVkDescriptorSetGroup.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include +#include "Camera/SHCameraSystem.h" + constexpr std::string_view windowName = "\xef\x80\x95 Viewport"; namespace SHADE @@ -25,6 +27,8 @@ namespace SHADE { SHEditorWindow::Init(); transformGizmo.Init(); + auto camSystem = SHSystemManager::GetSystem(); + camSystem->UpdateEditorCamera(0.016f); } void SHEditorViewport::Update() @@ -51,6 +55,24 @@ namespace SHADE ImGui::PushStyleColor(ImGuiCol_Text, ImGuiColors::green); ImGui::Text(ICON_FA_EYE); ImGui::PopStyleColor(); + + auto camSystem = SHSystemManager::GetSystem(); + camSystem->UpdateEditorCamera(0.016f); + } + if(ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) + { + if(ImGui::IsKeyReleased(ImGuiKey_Q)) + { + transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; + } + if(ImGui::IsKeyReleased(ImGuiKey_W)) + { + transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; + } + if(ImGui::IsKeyReleased(ImGuiKey_E)) + { + transformGizmo.operation = SHTransformGizmo::Operation::SCALE; + } } } ImGuizmo::SetRect(beginCursorPos.x , beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); @@ -77,6 +99,8 @@ namespace SHADE beginContentRegionAvailable = windowSize; } gfxSystem->PrepareResize(static_cast(beginContentRegionAvailable.x), static_cast(beginContentRegionAvailable.y)); + auto camSystem = SHSystemManager::GetSystem(); + camSystem->UpdateEditorCamera(0.016f); } void SHEditorViewport::OnPosChange() @@ -88,6 +112,7 @@ namespace SHADE { if(ImGui::BeginMenuBar()) { + ImGui::BeginDisabled(ImGui::IsWindowFocused() && ImGui::IsMouseDown(ImGuiMouseButton_Right)); bool const isTranslate = transformGizmo.operation == SHTransformGizmo::Operation::TRANSLATE; ImGui::BeginDisabled(isTranslate); if(isTranslate) @@ -97,6 +122,12 @@ namespace SHADE transformGizmo.operation = SHTransformGizmo::Operation::TRANSLATE; } ImGui::EndDisabled(); + if(ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Translate [Q]"); + ImGui::EndTooltip(); + } if(isTranslate) ImGui::PopStyleColor(); @@ -109,6 +140,12 @@ namespace SHADE transformGizmo.operation = SHTransformGizmo::Operation::ROTATE; } ImGui::EndDisabled(); + if(ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Rotate [W]"); + ImGui::EndTooltip(); + } if(isRotate) ImGui::PopStyleColor(); @@ -121,9 +158,15 @@ namespace SHADE transformGizmo.operation = SHTransformGizmo::Operation::SCALE; } ImGui::EndDisabled(); + if(ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + { + ImGui::BeginTooltip(); + ImGui::Text("Scale [E]"); + ImGui::EndTooltip(); + } if(isScale) ImGui::PopStyleColor(); - + ImGui::EndDisabled(); ImGui::EndMenuBar(); } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 3c984051..55e99ff9 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -3,7 +3,7 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "Editor/SHImGuiHelpers.hpp" #include #include diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 06fadfee..99125e65 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -21,7 +21,7 @@ #include "Graphics/MiddleEnd/Interface/SHViewport.h" #include "Graphics/MiddleEnd/Interface/SHRenderer.h" -#include "SHEditor.hpp" +#include "SHEditor.h" #include "SHEditorWidgets.hpp" #include "Math/Transform/SHTransformSystem.h" diff --git a/SHADE_Engine/src/Editor/SHEditor.hpp b/SHADE_Engine/src/Editor/SHEditor.h similarity index 100% rename from SHADE_Engine/src/Editor/SHEditor.hpp rename to SHADE_Engine/src/Editor/SHEditor.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 4280cafd..8744b083 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -17,7 +17,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Windowing/Surface/SHVkSurface.h" #include "Graphics/Swapchain/SHVkSwapchain.h" #include "Camera/SHCameraSystem.h" -#include "Editor/SHEditor.hpp" +#include "Editor/SHEditor.h" #include "ECS_Base/Managers/SHSystemManager.h" //#include "SHRenderer.h" #include "Graphics/Windowing/SHWindow.h" From b013d09f42273ae984ac0b33e7d3efe44b10feeb Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 15:31:23 +0800 Subject: [PATCH 469/793] Tooltips. editor tweaks --- .../Inspector/SHEditorComponentView.hpp | 47 ++++++++------- .../src/Editor/Gizmos/SHTransformGizmo.cpp | 3 + SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 58 ++++++++++--------- .../Math/Transform/SHTransformComponent.cpp | 7 ++- 4 files changed, 61 insertions(+), 54 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 7fa39d74..71a31bb8 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -51,8 +51,10 @@ namespace SHADE { if (!component) return; - const auto componentType = rttr::type::get(*component); + const auto componentType = rttr::type::get(); + ImGui::PushID(component->GetEID()); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); + ImGui::PopID(); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -61,6 +63,7 @@ namespace SHADE for (auto const& property : properties) { auto const& type = property.get_type(); + auto tooltip = property.get_metadata(META::tooltip); if (type.is_enumeration()) { @@ -75,29 +78,25 @@ namespace SHADE auto values = enumAlign.get_values(); auto it = std::next(values.begin(), idx); property.set_value(component, *it); - }); + }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type.is_arithmetic()) { if (type == rttr::type::get()) { - SHEditorWidgets::CheckBox(property.get_name().data(), [component, property] {return property.get_value(component).to_bool(); }, [component, property](bool const& result) {property.set_value(component, result); }); + SHEditorWidgets::CheckBox(property.get_name().data(), [component, property] {return property.get_value(component).to_bool(); }, [component, property](bool const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } - //else if (type == rttr::type::get()) - //{ - // - //} else if (type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get() || type == rttr::type::get()) { auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); if (metaMin && metaMax) { - SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderInt(property.get_name().data(), metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragInt(property.get_name().data(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }); + SHEditorWidgets::DragInt(property.get_name().data(), [component, property] {return property.get_value(component).to_int(); }, [component, property](int const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -106,11 +105,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U8, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U8, [component, property] {return property.get_value(component).to_uint8(); }, [component, property](uint8_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -119,11 +118,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U16, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U16, [component, property] {return property.get_value(component).to_uint16(); }, [component, property](uint16_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -132,11 +131,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMax.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U32, metaMin.template get_value(), metaMax.template get_value(), [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U32, [component, property] { return property.get_value(component).to_uint32(); }, [component, property](uint32_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -145,11 +144,11 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, "%zu"); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_U64, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string(), "%zu"); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu"); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_U64, [component, property] {return property.get_value(component).to_uint64(); }, [component, property](uint64_t const& result) {property.set_value(component, result); }, 0.1f, 0, 0, "%zu", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -163,11 +162,11 @@ namespace SHADE max = std::min(metaMax.template get_value(), FLT_MAX * 0.5f); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderFloat(property.get_name().data(), min, max, [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderFloat(property.get_name().data(), min, max, [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, "Test"); + SHEditorWidgets::DragFloat(property.get_name().data(), [component, property] {return property.get_value(component).to_float(); }, [component, property](float const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } else if (type == rttr::type::get()) @@ -176,25 +175,25 @@ namespace SHADE auto metaMax = property.get_metadata(META::max); if (metaMin.is_valid() && metaMax.is_valid()) { - SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }); + SHEditorWidgets::SliderScalar(property.get_name().data(), ImGuiDataType_Double, metaMin.template get_value(), metaMax.template get_value(), [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else { - SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, 0.1f); + SHEditorWidgets::DragScalar(property.get_name().data(), ImGuiDataType_Double, [component, property] {return property.get_value(component).to_double(); }, [component, property](double const& result) {property.set_value(component, result); }, 0.1f, {}, {}, "%.3f", tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }); + SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } diff --git a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp index 55e99ff9..e3bbc809 100644 --- a/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp +++ b/SHADE_Engine/src/Editor/Gizmos/SHTransformGizmo.cpp @@ -63,6 +63,9 @@ namespace SHADE if (selectedEntityTransformComponent == nullptr) return; + if(!selectedEntityTransformComponent->isActive) + return; + SHMatrix mat = selectedEntityTransformComponent->GetTRS(); useSnap = ImGui::IsKeyDown(ImGuiKey_LeftCtrl); if(useSnap) diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index b54a6799..26cac23e 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -174,15 +174,19 @@ namespace SHADE ImGui::SetColumnWidth(-1, 80.0f); ImGui::Text(label.c_str()); if (isHovered) - *isHovered = ImGui::IsItemHovered(); + *isHovered |= ImGui::IsItemHovered(); ImGui::NextColumn(); for (std::size_t i = 0; i < N; ++i) { ImGui::PushID(static_cast(i)); - ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); ImGui::SameLine(); + ImGui::TextUnformatted(componentLabels[i].c_str(), ImGui::FindRenderedTextEnd(componentLabels[i].c_str())); + if (isHovered) + *isHovered |= ImGui::IsItemHovered(); + ImGui::SameLine(); ImGui::SetNextItemWidth(80.0f); valueChanged |= ImGui::DragFloat("##v", values[i], speed, valueMin, valueMax, displayFormat, flags); - + if (isHovered) + *isHovered |= ImGui::IsItemHovered(); const ImVec2 min = ImGui::GetItemRectMin(); const ImVec2 max = ImGui::GetItemRectMax(); const float spacing = g.Style.FrameRounding; @@ -203,7 +207,7 @@ namespace SHADE } static bool DragVec2(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec2 values = get(); @@ -217,9 +221,9 @@ namespace SHADE } if (startRecording && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) startRecording = false; - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -230,11 +234,12 @@ namespace SHADE } static bool DragVec3(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); - bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags); + bool isHovered = false; + bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags, &isHovered); static bool startRecording = false; @@ -249,9 +254,9 @@ namespace SHADE { startRecording = false; } - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (isHovered) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -262,7 +267,7 @@ namespace SHADE } static bool DragVec4(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, float speed = 0.1f, const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); @@ -278,9 +283,9 @@ namespace SHADE { startRecording = false; } - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); @@ -297,7 +302,7 @@ namespace SHADE static void TextLabel(std::string_view const& text, bool sameLine = true) { const ImVec2 textSize = ImGui::CalcTextSize(text.data(), NULL, true); - if(textSize.x > 0.0f) + if (textSize.x > 0.0f) { ImGui::Text(text.data()); ImGui::SameLine(); @@ -310,32 +315,32 @@ namespace SHADE ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); - if (ImGui::Checkbox("##", &value)) + bool const changed = ImGui::Checkbox("##", &value); + if (changed) { SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), value, set)), false); - return true; } ImGui::PopID(); ImGui::EndGroup(); - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); ImGui::EndTooltip(); } } - return false; + return changed; } template - static bool RadioButton(std::vector const& label, std::vector const& listTypes, std::function get, std::function set ,std::string_view const& tooltip = {}) + static bool RadioButton(std::vector const& label, std::vector const& listTypes, std::function get, std::function set, std::string_view const& tooltip = {}) { T type = get(); ImGui::BeginGroup(); ImGui::PushID(label.data()); - TextLabel(label); + //TextLabel(label); for (size_t i = 0; i < listTypes.size(); i++) { if (ImGui::RadioButton(label[i].c_str(), type == listTypes[i])) @@ -366,12 +371,11 @@ namespace SHADE ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); - if (ImGui::InputText("##", &text, flag, callback, userData)) + bool const changed = ImGui::InputText("##", &text, flag, callback, userData); + if (changed) { if (ImGui::IsItemDeactivatedAfterEdit()) SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), text, set)), false); - - return true; } ImGui::PopID(); ImGui::EndGroup(); @@ -384,7 +388,7 @@ namespace SHADE ImGui::EndTooltip(); } } - return false; + return changed; } template @@ -442,9 +446,9 @@ namespace SHADE } ImGui::PopID(); ImGui::EndGroup(); - if(!tooltip.empty()) + if (!tooltip.empty()) { - if(ImGui::IsItemHovered()) + if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(tooltip.data()); diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index e56cbc8d..c6068f1a 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -14,6 +14,7 @@ #include "SHTransformComponent.h" // Project Headers #include "Math/SHMathHelpers.h" +#include "Reflection/SHReflectionMetadata.h" namespace SHADE { @@ -184,7 +185,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition ) - .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation) ) - .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale ); + .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition)(metadata(META::tooltip, "Translate")) + .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation))(metadata(META::tooltip, "Rotate")) + .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale)(metadata(META::tooltip, "Scale")); } \ No newline at end of file From 632df80d068e7cd1049ae3423a254cc1c3f4413e Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 26 Oct 2022 16:05:18 +0800 Subject: [PATCH 470/793] Refactored SHPrimitiveGenerator and added Sphere generation support --- .../MiddleEnd/Meshes/SHPrimitiveGenerator.cpp | 165 ++++++++++++++---- .../MiddleEnd/Meshes/SHPrimitiveGenerator.h | 65 +++++-- 2 files changed, 182 insertions(+), 48 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp index be181beb..6c708e58 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.cpp @@ -3,7 +3,7 @@ \author Tng Kah Wei, kahwei.tng, 390009620 \par email: kahwei.tng\@digipen.edu \date Aug 30, 2022 -\brief Contains definitions for all of the functions of the classes that deal +\brief Contains definitions for all of the functions of the classes that deal with storage and management of vertex and index buffers of meshes. Copyright (C) 2022 DigiPen Institute of Technology. @@ -18,50 +18,59 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Static Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + SHMeshData SHPrimitiveGenerator::cubeMesh; + SHMeshData SHPrimitiveGenerator::sphereMesh; + + /*-----------------------------------------------------------------------------------*/ + /* Primitive Generation Functions */ + /*-----------------------------------------------------------------------------------*/ SHMeshData SHPrimitiveGenerator::Cube() noexcept { SHMeshData mesh; - mesh.VertexPositions = + mesh.VertexPositions = { // front - SHVec3(-0.5f, -0.5f, 0.5f), - SHVec3( 0.5f, -0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), // back - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3(-0.5f, 0.5f, -0.5f), - SHVec3( 0.5f, 0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, 0.5f, -0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + SHVec3(0.5f, -0.5f, -0.5f), - // top + // top SHVec3(-0.5f, 0.5f, -0.5f), SHVec3(-0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, 0.5f), - SHVec3( 0.5f, 0.5f, -0.5f), - + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + // bottom - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, -0.5f), - SHVec3( 0.5f, -0.5f, 0.5f), - SHVec3(-0.5f, -0.5f, 0.5f), - + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(0.5f, -0.5f, -0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + // right - SHVec3(0.5f, -0.5f, -0.5f), - SHVec3(0.5f, 0.5f, -0.5f), - SHVec3(0.5f, 0.5f, 0.5f), - SHVec3(0.5f, -0.5f, 0.5f), - + SHVec3(0.5f, -0.5f, -0.5f), + SHVec3(0.5f, 0.5f, -0.5f), + SHVec3(0.5f, 0.5f, 0.5f), + SHVec3(0.5f, -0.5f, 0.5f), + // left - SHVec3(-0.5f, -0.5f, -0.5f), - SHVec3(-0.5f, -0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, 0.5f), - SHVec3(-0.5f, 0.5f, -0.5f) + SHVec3(-0.5f, -0.5f, -0.5f), + SHVec3(-0.5f, -0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, 0.5f), + SHVec3(-0.5f, 0.5f, -0.5f) }; - mesh.VertexTexCoords = + mesh.VertexTexCoords = { SHVec2(0.0f, 1.0f), SHVec2(1.0f, 1.0f), @@ -99,7 +108,7 @@ namespace SHADE SHVec2(0.0f, 0.0f) }; - mesh.VertexTangents = + mesh.VertexTangents = { // front SHVec3(1.0f, 0.0f, 0.0f), @@ -118,7 +127,7 @@ namespace SHADE SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), - + // bottom SHVec3(1.0f, 0.0f, 0.0f), SHVec3(1.0f, 0.0f, 0.0f), @@ -193,10 +202,93 @@ namespace SHADE Handle SHPrimitiveGenerator::Cube(SHMeshLibrary& meshLibrary) noexcept { - static SHMeshData meshData = Cube(); + if (cubeMesh.VertexPositions.empty()) + cubeMesh = Cube(); + return addMeshDataTo(cubeMesh, meshLibrary); + } + + Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept + { + if (cubeMesh.VertexPositions.empty()) + cubeMesh = Cube(); + return addMeshDataTo(cubeMesh, gfxSystem); + } + + SHADE::SHMeshData SHPrimitiveGenerator::Sphere() noexcept + { + SHMeshData meshData; + + const int LAT_SLICES = 8; + const int LONG_SLICES = 8; + float radius = 1; + for (int latNum = 0; latNum <= LAT_SLICES; ++latNum) + { + float theta = static_cast(latNum * std::numbers::pi / LAT_SLICES); + float sinTheta = sin(theta); + float cosTheta = cos(theta); + + for (int longNum = 0; longNum <= LONG_SLICES; ++longNum) + { + float phi = static_cast(longNum * 2 * std::numbers::pi / LONG_SLICES); + float sinPhi = sin(phi); + float cosPhi = cos(phi); + + const SHVec3 NORMAL = SHVec3(cosPhi * sinTheta, cosTheta, sinPhi * sinTheta); + meshData.VertexNormals.emplace_back(NORMAL); + meshData.VertexTangents.emplace_back(/* TODO */); + meshData.VertexTexCoords.emplace_back + ( + 1.0f - (longNum / static_cast(LONG_SLICES)), + 1.0f - (latNum / static_cast(LAT_SLICES)) + ); + meshData.VertexPositions.emplace_back(radius * NORMAL.x, radius * NORMAL.y, radius * NORMAL.z); + } + } + + for (int latNumber{}; latNumber < LAT_SLICES; latNumber++) + { + for (int longNumber{}; longNumber < LONG_SLICES; longNumber++) + { + const auto FIRST = (latNumber * (LONG_SLICES + 1)) + longNumber; + const auto SECOND = (FIRST + LONG_SLICES + 1); + + meshData.Indices.emplace_back(FIRST); + meshData.Indices.emplace_back(SECOND); + meshData.Indices.emplace_back(FIRST + 1); + + meshData.Indices.emplace_back(SECOND); + meshData.Indices.emplace_back(SECOND + 1); + meshData.Indices.emplace_back(FIRST + 1); + } + } + + return meshData; + } + + SHADE::Handle SHPrimitiveGenerator::Sphere(SHMeshLibrary& meshLibrary) noexcept + { + if (sphereMesh.VertexPositions.empty()) + sphereMesh = Sphere(); + + return addMeshDataTo(sphereMesh, meshLibrary); + } + + SHADE::Handle SHPrimitiveGenerator::Sphere(SHGraphicsSystem& gfxSystem) noexcept + { + if (sphereMesh.VertexPositions.empty()) + sphereMesh = Sphere(); + + return addMeshDataTo(sphereMesh, gfxSystem); + } + + /*-----------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------------*/ + SHADE::Handle SHPrimitiveGenerator::addMeshDataTo(const SHMeshData& meshData, SHMeshLibrary& meshLibrary) noexcept + { return meshLibrary.AddMesh ( - static_cast(meshData.VertexPositions.size()), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), @@ -206,17 +298,16 @@ namespace SHADE ); } - Handle SHPrimitiveGenerator::Cube(SHGraphicsSystem& gfxSystem) noexcept + SHADE::Handle SHPrimitiveGenerator::addMeshDataTo(const SHMeshData& meshData, SHGraphicsSystem& gfxSystem) noexcept { - static SHMeshData meshData = Cube(); return gfxSystem.AddMesh ( - static_cast(meshData.VertexPositions.size()), + static_cast(meshData.VertexPositions.size()), meshData.VertexPositions.data(), meshData.VertexTexCoords.data(), meshData.VertexTangents.data(), meshData.VertexNormals.data(), - static_cast(meshData.Indices.size()), + static_cast(meshData.Indices.size()), meshData.Indices.data() ); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h index dd059a29..ef4e26a6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Meshes/SHPrimitiveGenerator.h @@ -4,9 +4,9 @@ \par email: kahwei.tng\@digipen.edu \date Sep 18, 2022 \brief Contains the static class definition of SHPrimitiveGenerator. - + Copyright (C) 2022 DigiPen Institute of Technology. -Reproduction or disclosure of this file or its contents without the prior written consent +Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #pragma once @@ -29,12 +29,12 @@ namespace SHADE /*************************************************************************************/ /*! \brief - Static class that contains functions for generating 3D primitives. + Static class that contains functions for generating 3D primitives. */ /*************************************************************************************/ class SH_API SHPrimitiveGenerator { - public: + public: /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ @@ -42,7 +42,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Primitive Generation Functions */ - /*---------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ /***********************************************************************************/ /*! \brief @@ -52,20 +52,20 @@ namespace SHADE SHMeshData object containing vertex data for the cube. */ /***********************************************************************************/ - [[nodiscard]] static SHMeshData Cube() noexcept; + [[nodiscard]] static SHMeshData Cube() noexcept; /***********************************************************************************/ /*! \brief Produces a cube and constructs a SHMesh using the SHMeshLibrary provided. \param meshLibrary - Reference to the SHMeshLibrary to procude and store a cube mesh in. + Reference to the SHMeshLibrary to produce and store a cube mesh in. \return SHMesh object that points to the generated cube mesh in the SHMeshLibrary. */ /***********************************************************************************/ - [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; + [[nodiscard]] static Handle Cube(SHMeshLibrary& meshLibrary) noexcept; /***********************************************************************************/ /*! \brief @@ -78,12 +78,55 @@ namespace SHADE SHMesh object that points to the generated cube mesh in the SHGraphicsSystem. */ /***********************************************************************************/ - [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; + [[nodiscard]] static Handle Cube(SHGraphicsSystem& gfxSystem) noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and stores the data in a SHMeshData object. - private: + \return + SHMeshData object containing vertex data for the sphere. + */ + /***********************************************************************************/ + [[nodiscard]] static SHMeshData Sphere() noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and constructs a SHMesh using the SHMeshLibrary provided. + + \param meshLibrary + Reference to the SHMeshLibrary to produce and store a sphere mesh in. + + \return + SHMesh object that points to the generated sphere mesh in the SHMeshLibrary. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Sphere(SHMeshLibrary& meshLibrary) noexcept; + /***********************************************************************************/ + /*! + \brief + Produces a sphere and constructs a SHMesh using the SHGraphicsSystem provided. + + \param gfxSystem + Reference to the SHGraphicsSystem to produce and store a sphere mesh in. + + \return + SHMesh object that points to the generated sphere mesh in the SHGraphicsSystem. + */ + /***********************************************************************************/ + [[nodiscard]] static Handle Sphere(SHGraphicsSystem& gfxSystem) noexcept; + + private: /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] static SHMeshData genCubeData() noexcept; + static Handle addMeshDataTo(const SHMeshData& meshData, SHMeshLibrary& meshLibrary) noexcept; + static Handle addMeshDataTo(const SHMeshData& meshData, SHGraphicsSystem& gfxSystem) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + static SHMeshData cubeMesh; + static SHMeshData sphereMesh; }; } \ No newline at end of file From 550b8d85f0eee7f157da51803b35e9910d0f4b87 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 26 Oct 2022 16:05:50 +0800 Subject: [PATCH 471/793] Added SHDebugDrawSystem class --- .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 155 ++++++++++++++++++ .../MiddleEnd/Interface/SHDebugDrawSystem.h | 93 +++++++++++ .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 41 +++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 7 + .../MiddleEnd/Interface/SHGraphicsSystem.h | 10 +- TempShaderFolder/DebugDrawFs.glsl | 17 ++ TempShaderFolder/DebugDrawFs.spv | Bin 0 -> 664 bytes TempShaderFolder/DebugDrawVs.glsl | 24 +++ TempShaderFolder/DebugDrawVs.spv | Bin 0 -> 1488 bytes 9 files changed, 340 insertions(+), 7 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp create mode 100644 TempShaderFolder/DebugDrawFs.glsl create mode 100644 TempShaderFolder/DebugDrawFs.spv create mode 100644 TempShaderFolder/DebugDrawVs.glsl create mode 100644 TempShaderFolder/DebugDrawVs.spv diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp new file mode 100644 index 00000000..cd6dd7ab --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -0,0 +1,155 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of functions of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "SHDebugDrawSystem.h" +#include "../Meshes/SHMeshData.h" +#include "../Meshes/SHPrimitiveGenerator.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "SHGraphicsSystem.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "../../SHVkUtil.h" +#include "Graphics/MiddleEnd/Interface/SHViewport.h" +#include "Graphics/MiddleEnd/Interface/SHRenderer.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* DrawRoutine */ + /*---------------------------------------------------------------------------------*/ + SHDebugDrawSystem::DrawRoutine::DrawRoutine() + : SHSystemRoutine("Debug Draw") + {} + + void SHDebugDrawSystem::DrawRoutine::Execute(double dt) noexcept + { + auto gfxSys = SHSystemManager::GetSystem(); + if (gfxSys) + { + SHLOG_WARNING("[DebugDraw] Attempted to do debug draw without a graphics system."); + return; + } + + // Create the buffer if it doesn't exist or just update it + SHDebugDrawSystem* system = static_cast(GetSystem()); + const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size(); + SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer); + + // Reset for next frame + system->points.clear(); + } + + /*---------------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*---------------------------------------------------------------------------------*/ + void SHDebugDrawSystem::Init() + { + // Register function for subpass + const auto* GFX_SYSTEM = SHSystemManager::GetSystem(); + auto const& RENDERERS = GFX_SYSTEM->GetDefaultViewport()->GetRenderers(); + auto renderGraph = RENDERERS[SHGraphicsConstants::RenderGraphIndices::WORLD]->GetRenderGraph(); + auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw"); + subPass->AddExteriorDrawCalls([&](Handle& cmdBuffer) + { + cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); + cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0); + cmdBuffer->DrawArrays(static_cast(points.size()), 1, 0, 0); + }); + } + + void SHDebugDrawSystem::Exit() + { + + } + + /*---------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*---------------------------------------------------------------------------------*/ + void SHDebugDrawSystem::DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) + { + points.emplace_back(PointVertex{ startPt, color }); + points.emplace_back(PointVertex{ endPt, color }); + } + + void SHDebugDrawSystem::DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3) + { + DrawPoly(color, { pt1, pt2, pt3 }); + } + + void SHDebugDrawSystem::DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4) + { + DrawPoly(color, { pt1, pt2, pt3, pt4 }); + } + + void SHDebugDrawSystem::DrawPoly(const SHVec4& color, std::initializer_list pointList) + { + DrawPoly(color, pointList.begin(), pointList.end()); + } + + void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size) + { + static const SHVec3 EXTENTS = SHVec3 { 0.5f, 0.5f, 0.5f }; + static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos - EXTENTS }; + static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, 0.0f } }; + static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos + SHVec3 { 0.0f , -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, 0.0f } }; + static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + SHVec3 { 0.0f , EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, EXTENTS.z } }; + static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + EXTENTS }; + + const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size; + const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size; + const SHVec3 BOT_LEFT_FRONT = UNIT_BOT_LEFT_FRONT * size; + const SHVec3 BOT_RIGHT_FRONT = UNIT_BOT_RIGHT_FRONT * size; + const SHVec3 TOP_LEFT_BACK = UNIT_TOP_LEFT_BACK * size; + const SHVec3 TOP_RIGHT_BACK = UNIT_TOP_RIGHT_BACK * size; + const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size; + const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size; + + DrawPoly + ( + color, + { + // Bottom Square + BOT_LEFT_BACK , BOT_RIGHT_BACK, + BOT_RIGHT_BACK , BOT_RIGHT_FRONT, + BOT_RIGHT_FRONT, BOT_LEFT_FRONT, + BOT_LEFT_FRONT , BOT_LEFT_BACK, + // Middle Lines + TOP_LEFT_BACK , BOT_LEFT_BACK, + TOP_RIGHT_BACK , BOT_RIGHT_BACK, + TOP_RIGHT_FRONT, BOT_RIGHT_FRONT, + TOP_LEFT_FRONT , BOT_LEFT_FRONT, + // Top Square + TOP_LEFT_BACK , TOP_RIGHT_BACK, + TOP_RIGHT_BACK , TOP_RIGHT_FRONT, + TOP_RIGHT_FRONT, TOP_LEFT_FRONT, + TOP_LEFT_FRONT , TOP_LEFT_BACK + + } + ); + } + + void SHDebugDrawSystem::DrawSphere(const SHVec4& color, const SHVec3& pos, double radius) + { + if (spherePoints.empty()) + { + // Generate + const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere(); + for (const auto& idx : SPHERE.Indices) + { + spherePoints.emplace_back(SPHERE.VertexPositions[idx]); + } + } + DrawPoly(color, spherePoints.begin(), spherePoints.end()); + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h new file mode 100644 index 00000000..9344482a --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -0,0 +1,93 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of the SHDebugDrawSystem class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "SH_API.h" +#include "Math/Vector/SHVec2.h" +#include "Math/Vector/SHVec3.h" +#include "Math/Vector/SHVec4.h" +#include "ECS_Base/System/SHSystem.h" +#include "ECS_Base/System/SHSystemRoutine.h" +#include "Resource/SHHandle.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + class SHVkBuffer; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + \brief + Manages the Debug Draw system. + */ + /***********************************************************************************/ + class SH_API SHDebugDrawSystem : public SHSystem + { + public: + /*-------------------------------------------------------------------------------*/ + /* System Routines */ + /*-------------------------------------------------------------------------------*/ + class SH_API DrawRoutine final : public SHSystemRoutine + { + public: + DrawRoutine(); + virtual void Execute(double dt) noexcept override final; + }; + + /*-------------------------------------------------------------------------------*/ + /* SHSystem overrides */ + /*-------------------------------------------------------------------------------*/ + virtual void Init() override final; + virtual void Exit() override final; + + /*-------------------------------------------------------------------------------*/ + /* Draw Functions */ + /*-------------------------------------------------------------------------------*/ + void DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt); + void DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3); + void DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4); + void DrawPoly(const SHVec4& color, std::initializer_list pointList); + template + void DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd); + void DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size); + void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius); + + private: + /*-------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-------------------------------------------------------------------------------*/ + struct PointVertex + { + SHVec3 Position; + SHVec4 Color; + }; + /*-------------------------------------------------------------------------------*/ + /* Data Members */ + /*-------------------------------------------------------------------------------*/ + // CPU Buffers + std::vector points; + // GPU Buffers + Handle vertexBuffer; + // Cached Points for polygon drawing + std::vector spherePoints; + }; +} + +#include "SHDebugDrawSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp new file mode 100644 index 00000000..90c645e3 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file SHDebugDrawSystem.hpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 16, 2022 +\brief Contains the definition of template functions the SHDebugDrawSystem + class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +#include "SHDebugDrawSystem.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Template Functions */ + /*---------------------------------------------------------------------------------*/ + template + void SHADE::SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd) + { + // Ensure dereferenced type is SHVec3 + static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); + + const size_t POINTS_COUNT = pointListEnd - pointListBegin; + // Invalid polygon + if (POINTS_COUNT < 2) + { + SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly()."); + return; + } + + for (auto pointIter = pointListBegin + 1; pointIter != pointListEnd; ++pointIter) + { + points.emplace_back(PointVertex { *(pointIter - 1), color }); + points.emplace_back(PointVertex { *pointIter , color }); + } + } +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 9b984a4b..418e8260 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -127,15 +127,22 @@ namespace SHADE shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + shaderSourceLibrary.LoadShader(4, "DebugDrawVs.glsl", SH_SHADER_TYPE::VERTEX, true); + shaderSourceLibrary.LoadShader(5, "DebugDrawFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); + shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); + auto debugDrawVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); + auto debugDrawFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); cubeVS->Reflect(); cubeFS->Reflect(); greyscale->Reflect(); pureCopy->Reflect(); + debugDrawVS->Reflect(); + debugDrawFS->Reflect(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index ae93bd78..0ede74c6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -287,9 +287,8 @@ namespace SHADE #endif Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; - //SHRenderGraph const& GetRenderGraph(void) const noexcept; + Handle GetDebugDrawPipeline(void) const noexcept { return debugDrawPipeline; } - //Handle GetRenderPass() const { return renderPass; } private: @@ -329,10 +328,6 @@ namespace SHADE Handle worldViewport; // Whole screen std::vector> viewports; // Additional viewports - // Debug Renderers - Handle debugWorldRenderer; - Handle debugScreenRenderer; - // Temp renderers Handle worldRenderer; @@ -344,8 +339,9 @@ namespace SHADE SHShaderSourceLibrary shaderSourceLibrary; SHShaderModuleLibrary shaderModuleLibrary; - // Temp Materials + // Built-In Materials Handle defaultMaterial; + Handle debugDrawPipeline; Handle worldRenderGraph; diff --git a/TempShaderFolder/DebugDrawFs.glsl b/TempShaderFolder/DebugDrawFs.glsl new file mode 100644 index 00000000..266f8ad4 --- /dev/null +++ b/TempShaderFolder/DebugDrawFs.glsl @@ -0,0 +1,17 @@ +#version 450 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable +#extension GL_EXT_nonuniform_qualifier : require + +layout(location = 0) in struct +{ + vec4 vertColor; +} In; + + +layout(location = 0) out vec4 outColor; + +void main() +{ + outColor = In.vertColor; +} \ No newline at end of file diff --git a/TempShaderFolder/DebugDrawFs.spv b/TempShaderFolder/DebugDrawFs.spv new file mode 100644 index 0000000000000000000000000000000000000000..dd21ce44da7b58c2713eba6b923289359d901fb1 GIT binary patch literal 664 zcmY*W+e*Vg5FMM|Z0$`^-%79eFgs$wF0;Pb3wgupKqJzfrLc-N;R}ieKEBj#Tjcs;5c(UxSeG7s_+} zMd~iJ8lDb9clw4pRn{3lJt{x&Q{T*kXsO;)*E4gYBgAWr+mngyjMX#@Rh)cyT6xCT zYGxvIGAqqqS)E*G{Hd4DHU%XpHs4p0Quf9mO>P4(i0~{h7P|eeGUm2EuXOY$qK0$1 z!<1}P{WRF4Ef6(vj@2@cHW6G zYU}X$ij1R{nElD^12^D%IX=m86PSznEqH2K?;Nk^U3m{K_WJ@;f*)b0whd!_*0_R_ Sc^w$}Yh>`A#NViT0s8^rdQj8= literal 0 HcmV?d00001 diff --git a/TempShaderFolder/DebugDrawVs.glsl b/TempShaderFolder/DebugDrawVs.glsl new file mode 100644 index 00000000..ae11658d --- /dev/null +++ b/TempShaderFolder/DebugDrawVs.glsl @@ -0,0 +1,24 @@ +#version 450 +#extension GL_KHR_vulkan_glsl : enable + +layout(location = 0) in vec3 aVertexPos; +layout(location = 1) in vec4 aVertColor; + + +layout(location = 0) out struct +{ + vec4 vertColor; // location 0 + +} Out; + +layout(set = 2, binding = 0) uniform CameraData +{ + vec4 position; + mat4 vpMat; +} cameraData; + +void main() +{ + gl_Position = cameraData.vpMat * vec4 (aVertexPos, 1.0f); + Out.vertColor = aVertColor; +} \ No newline at end of file diff --git a/TempShaderFolder/DebugDrawVs.spv b/TempShaderFolder/DebugDrawVs.spv new file mode 100644 index 0000000000000000000000000000000000000000..73e83f692e5dbd2a53de8fcea413846f1461c009 GIT binary patch literal 1488 zcmZ9LZ)+1l5XRS}m)6#{*4jU6jY*^RPoeliMGzH9<@zF$mV$4O<8sKt^%9axP+$2K z{7QZ*-v~ax+uIPjVQyxgd3JVYc2lo)mW{b#R?WIOHg0X1nh;~wOrz9c@3MC?DF!F6 zUcZE~Vd^Cj&ZfCp+DrOg#Wu%Tm)w^eNuEjS`qiZWXv30D3VTu5?}xq5Q8F4ulj28~ zMw!jiXkf=_QrKAvZ)JgJ^CX)N772kEi)RL^bxmh{%cApi{52gH>36w89gaQzx^>#i&`aZe~ZPc2dN7lFnmHfY>z4=CMG1(mN~AZ%euxU!~*t zG%jLS3m9wU3z6NZxYRNmeTfTc_HRok3;V&CYwX%nFYxN-u`m|BdV8h`bcfk+EF2DZ z(VrHwgYr(w92MbA7_(z}?J;TsLwk(5fH4D)VS{lep(5Dui2I&9@>yqMfsr#PeaFFv zbNd>m2U=p}WgmG%pBee@$fqB0^5Zi*FrV+PZ0d%;Q^m+j-}}<^K|RFpNy7yvA3n1N zBOlxYi7~%E!atP7UTSK};*DYxdm>E?j9mCf6-NB2Z1Tb12^!Hv&*OSBX>EVHd`Y*JH+8_W< u@)B!H_9QI{^)Z)@guCWGKd1wIc+|$8=Mwt${1>vBkLTmV`KQX>O8x`b2XP(% literal 0 HcmV?d00001 From 1c099acccb403fd3bbfd842b9c7c275802b0784a Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 16:05:52 +0800 Subject: [PATCH 472/793] handle vec2/3/4 that contain values in radians --- .../Inspector/SHEditorComponentView.hpp | 8 ++--- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 32 ++++++++++++++++--- .../Math/Transform/SHTransformComponent.cpp | 6 ++-- .../src/Reflection/SHReflectionMetadata.h | 1 + 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 71a31bb8..046dba2f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -64,7 +64,7 @@ namespace SHADE { auto const& type = property.get_type(); auto tooltip = property.get_metadata(META::tooltip); - + bool const& isAngleInRad = property.get_metadata(META::angleInRad).is_valid() ? property.get_metadata(META::angleInRad).template get_value() : false; if (type.is_enumeration()) { auto enumAlign = type.get_enumeration(); @@ -185,15 +185,15 @@ namespace SHADE } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); + SHEditorWidgets::DragVec4(property.get_name().data(), { "X", "Y", "Z", "W" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec4 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); + SHEditorWidgets::DragVec3(property.get_name().data(), { "X", "Y", "Z" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec3 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } else if (type == rttr::type::get()) { - SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }, tooltip.is_valid() ? tooltip.template get_value() : std::string()); + SHEditorWidgets::DragVec2(property.get_name().data(), { "X", "Y" }, [component, property]() {return property.get_value(component).template convert(); }, [component, property](SHVec2 vec) {return property.set_value(component, vec); }, isAngleInRad, tooltip.is_valid() ? tooltip.template get_value() : std::string()); } } diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 26cac23e..60cd7a86 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -207,14 +207,22 @@ namespace SHADE } static bool DragVec2(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec2 values = get(); + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y)}; + } bool const changed = DragN(label, componentLabels, { &values.x, &values.y }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); if (!startRecording) startRecording = true; @@ -234,18 +242,24 @@ namespace SHADE } static bool DragVec3(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec3 values = get(); + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y), SHMath::RadiansToDegrees(values.z)}; + } bool isHovered = false; bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z }, speed, displayFormat, valueMin, valueMax, flags, &isHovered); - - static bool startRecording = false; if (changed) { SHVec3 old = get(); + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y), SHMath::DegreesToRadians(values.z)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(old, values, set)), startRecording); if (!startRecording) startRecording = true; @@ -267,14 +281,22 @@ namespace SHADE } static bool DragVec4(const std::string& label, std::vectorconst& componentLabels, std::function get, - std::function set, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, + std::function set, bool const& isAnAngleInRad = false, std::string_view const& tooltip = {}, float speed = 0.1f, const char* displayFormat = "%.3f", float valueMin = 0.0f, float valueMax = 0.0f, ImGuiSliderFlags flags = 0) { SHVec4 values = get(); + if(isAnAngleInRad) + { + values = {SHMath::RadiansToDegrees(values.x), SHMath::RadiansToDegrees(values.y), SHMath::RadiansToDegrees(values.z), SHMath::RadiansToDegrees(values.w)}; + } bool const changed = DragN(label, componentLabels, { &values.x, &values.y, &values.z, &values.w }, speed, displayFormat, valueMin, valueMax, flags); static bool startRecording = false; if (changed) { + if(isAnAngleInRad) + { + values = {SHMath::DegreesToRadians(values.x), SHMath::DegreesToRadians(values.y), SHMath::DegreesToRadians(values.z), SHMath::DegreesToRadians(values.w)}; + } SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), values, set)), startRecording); if (!startRecording) startRecording = true; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp index c6068f1a..43742855 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformComponent.cpp @@ -185,7 +185,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Transform Component") - .property("Translate" , &SHTransformComponent::GetLocalPosition , &SHTransformComponent::SetLocalPosition)(metadata(META::tooltip, "Translate")) - .property("Rotate" , &SHTransformComponent::GetLocalRotation , select_overload(&SHTransformComponent::SetLocalRotation))(metadata(META::tooltip, "Rotate")) - .property("Scale" , &SHTransformComponent::GetLocalScale , &SHTransformComponent::SetLocalScale)(metadata(META::tooltip, "Scale")); + .property("Translate" ,&SHTransformComponent::GetLocalPosition ,&SHTransformComponent::SetLocalPosition ) (metadata(META::tooltip, "Translate")) + .property("Rotate" ,&SHTransformComponent::GetLocalRotation ,select_overload(&SHTransformComponent::SetLocalRotation) ) (metadata(META::tooltip, "Rotate"), metadata(META::angleInRad, true)) + .property("Scale" ,&SHTransformComponent::GetLocalScale ,&SHTransformComponent::SetLocalScale ) (metadata(META::tooltip, "Scale")); } \ No newline at end of file diff --git a/SHADE_Engine/src/Reflection/SHReflectionMetadata.h b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h index 0cc6d8a5..b4dc009c 100644 --- a/SHADE_Engine/src/Reflection/SHReflectionMetadata.h +++ b/SHADE_Engine/src/Reflection/SHReflectionMetadata.h @@ -7,5 +7,6 @@ namespace SHADE constexpr const char* min = "MIN"; constexpr const char* max = "MAX"; constexpr const char* tooltip = "tooltip"; + constexpr const char* angleInRad = "angleInRad"; } } From 7c0bcd8a3e2f839ae4792123ce2ed0babfd55961 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 16:09:54 +0800 Subject: [PATCH 473/793] Delete UserLayout.ini @Xenosas1337 stop pushing this please --- Assets/Editor/Layouts/UserLayout.ini | 62 ---------------------------- 1 file changed, 62 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index e27f5cca..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,62 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=1920,1012 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,142 -Size=494,690 -Collapsed=0 -DockId=0x00000007,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=1649,48 -Size=271,1012 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=494,92 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=648,48 -Size=2519,1319 -Collapsed=0 -DockId=0x00000002,0 - -[Window][î‹ Viewport] -Pos=496,48 -Size=1151,1012 -Collapsed=0 -DockId=0x00000002,0 - -[Window][ Asset Browser] -Pos=0,834 -Size=494,226 -Collapsed=0 -DockId=0x00000008,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=494,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Split=Y Selected=0xE096E5AE - DockNode ID=0x00000007 Parent=0x00000004 SizeRef=494,690 Selected=0xE096E5AE - DockNode ID=0x00000008 Parent=0x00000004 SizeRef=494,226 Selected=0xB128252A - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1151,1036 CentralNode=1 Selected=0xB41284E7 - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - From 58491fcbffa9800095c32b03f9c3e8cc4d4304be Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 26 Oct 2022 16:17:22 +0800 Subject: [PATCH 474/793] Fixed physics bugs 1. Colliders are now properly deleted along with its component. 2. Forces and velocities are reset on stop. --- .../Components/SHColliderComponent.cpp | 33 ++-- .../Physics/Components/SHColliderComponent.h | 8 +- .../Components/SHRigidBodyComponent.cpp | 159 ++++++++++++++++-- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 91 ++++++---- 4 files changed, 223 insertions(+), 68 deletions(-) diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index c216bb83..75a00491 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -26,7 +26,6 @@ namespace SHADE SHColliderComponent::SHColliderComponent() noexcept : system { nullptr } - , colliders {} {} /*-----------------------------------------------------------------------------------*/ @@ -78,9 +77,15 @@ namespace SHADE SHBoundingBox* SHColliderComponent::AddBoundingBox(const SHVec3& halfExtents, const SHVec3& posOffset) noexcept { - const auto TYPE = SHCollider::Type::BOX; + if (!system) + { + SHLOG_ERROR("Physics system does not exist, unable to add Box Collider!") + return nullptr; + } - auto boxPair = std::make_pair(SHCollider{TYPE}, true); + static constexpr auto TYPE = SHCollider::Type::BOX; + + auto boxPair = std::make_pair(SHCollider{ TYPE }, true); auto& collider = colliders.emplace_back(boxPair).first; const auto* tf = SHComponentManager::GetComponent(GetEID()); @@ -88,12 +93,6 @@ namespace SHADE collider.SetPositionOffset(posOffset); collider.SetAsBoundingBox(tf->GetWorldScale() * halfExtents); - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to add Box Collider!") - return nullptr; - } - // Notify Physics System system->AddCollisionShape(GetEID(), &collider); @@ -102,7 +101,13 @@ namespace SHADE SHBoundingSphere* SHColliderComponent::AddBoundingSphere(float radius, const SHVec3& posOffset) noexcept { - const auto TYPE = SHCollider::Type::SPHERE; + if (!system) + { + SHLOG_ERROR("Physics system does not exist, unable to add Sphere Collider!") + return nullptr; + } + + static constexpr auto TYPE = SHCollider::Type::SPHERE; auto spherePair = std::make_pair(SHCollider{ TYPE }, true); auto& collider = colliders.emplace_back(spherePair).first; @@ -113,13 +118,7 @@ namespace SHADE const SHVec3 TF_WORLD_SCALE = tf->GetWorldScale(); const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - collider.SetAsBoundingSphere(MAX_SCALE * 0.5f); - - if (!system) - { - SHLOG_ERROR("Physics system does not exist, unable to add Sphere Collider!") - return nullptr; - } + collider.SetAsBoundingSphere(MAX_SCALE * 0.5f * radius); // Notify Physics System system->AddCollisionShape(GetEID(), &collider); diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index 22d5ceee..4ecd0e93 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -44,7 +44,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ using ColliderDirtyPair = std::pair; - using Colliders = std::vector; + using Colliders = std::vector; public: @@ -81,10 +81,10 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void OnCreate () override; - void OnDestroy () override; + void OnCreate () override; + void OnDestroy () override; - void RemoveCollider (int index); + void RemoveCollider (int index); SHBoundingBox* AddBoundingBox (const SHVec3& halfExtents = SHVec3::One, const SHVec3& posOffset = SHVec3::Zero) noexcept; SHBoundingSphere* AddBoundingSphere (float radius = 1.0f, const SHVec3& posOffset = SHVec3::Zero) noexcept; diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index 8327c3ec..b0172f64 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -28,6 +28,7 @@ namespace SHADE , flags { 0 } , dirtyFlags { 0 } , interpolate { true } + , rp3dBody { nullptr } , mass { 1.0f } , drag { 0.01f } , angularDrag { 0.01f } @@ -159,7 +160,13 @@ namespace SHADE void SHRigidBodyComponent::SetGravityEnabled(bool enableGravity) noexcept { - constexpr int FLAG_POS = 0; + static constexpr int FLAG_POS = 0; + + if (type != Type::DYNAMIC) + { + SHLOG_WARNING("Cannot enable gravity of a non-dynamic object {}", GetEID()) + return; + } dirtyFlags |= 1U << FLAG_POS; enableGravity ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -167,7 +174,13 @@ namespace SHADE void SHRigidBodyComponent::SetIsAllowedToSleep(bool isAllowedToSleep) noexcept { - constexpr int FLAG_POS = 1; + static constexpr int FLAG_POS = 1; + + if (type != Type::DYNAMIC) + { + SHLOG_WARNING("Cannot enable sleeping of a non-dynamic object {}", GetEID()) + return; + } dirtyFlags |= 1U << 1; isAllowedToSleep ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -175,7 +188,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezePositionX(bool freezePositionX) noexcept { - constexpr int FLAG_POS = 2; + static constexpr int FLAG_POS = 2; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 2; freezePositionX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -183,7 +202,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezePositionY(bool freezePositionY) noexcept { - constexpr int FLAG_POS = 3; + static constexpr int FLAG_POS = 3; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 2; freezePositionY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -191,7 +216,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezePositionZ(bool freezePositionZ) noexcept { - constexpr int FLAG_POS = 4; + static constexpr int FLAG_POS = 4; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set linear constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 2; freezePositionZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -199,7 +230,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezeRotationX(bool freezeRotationX) noexcept { - constexpr int FLAG_POS = 5; + static constexpr int FLAG_POS = 5; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 3; freezeRotationX ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -207,7 +244,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezeRotationY(bool freezeRotationY) noexcept { - constexpr int FLAG_POS = 6; + static constexpr int FLAG_POS = 6; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 3; freezeRotationY ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -215,7 +258,13 @@ namespace SHADE void SHRigidBodyComponent::SetFreezeRotationZ(bool freezeRotationZ) noexcept { - constexpr int FLAG_POS = 7; + static constexpr int FLAG_POS = 7; + + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set angular constraints of a static object {}", GetEID()) + return; + } dirtyFlags |= 1U << 3; freezeRotationZ ? flags |= (1U << FLAG_POS) : flags &= ~(1U << FLAG_POS); @@ -228,30 +277,60 @@ namespace SHADE void SHRigidBodyComponent::SetMass(float newMass) noexcept { + if (type != Type::DYNAMIC) + { + SHLOG_WARNING("Cannot set mass of a non-dynamic object {}", GetEID()) + return; + } + dirtyFlags |= 1U << 5; mass = newMass; } void SHRigidBodyComponent::SetDrag(float newDrag) noexcept { + if (type != Type::DYNAMIC) + { + SHLOG_WARNING("Cannot set drag of a non-dynamic object {}", GetEID()) + return; + } + dirtyFlags |= 1U << 6; drag = newDrag; } void SHRigidBodyComponent::SetAngularDrag(float newAngularDrag) noexcept { + if (type != Type::DYNAMIC) + { + SHLOG_WARNING("Cannot set angular drag of a non-dynamic object {}", GetEID()) + return; + } + dirtyFlags |= 1U << 7; angularDrag = newAngularDrag; } void SHRigidBodyComponent::SetLinearVelocity(const SHVec3& newLinearVelocity) noexcept { + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set linear velocity of a static object {}", GetEID()) + return; + } + dirtyFlags |= 1U << 8; linearVelocity = newLinearVelocity; } void SHRigidBodyComponent::SetAngularVelocity(const SHVec3& newAngularVelocity) noexcept { + if (type == Type::STATIC) + { + SHLOG_WARNING("Cannot set angular velocity of a static object {}", GetEID()) + return; + } + dirtyFlags |= 1U << 9; angularVelocity = newAngularVelocity; } @@ -262,42 +341,90 @@ namespace SHADE void SHRigidBodyComponent::AddForce(const SHVec3& force) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyWorldForceAtCenterOfMass(force); } void SHRigidBodyComponent::AddForceAtLocalPos(const SHVec3& force, const SHVec3& localPos) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyWorldForceAtLocalPosition(force, localPos); } void SHRigidBodyComponent::AddForceAtWorldPos(const SHVec3& force, const SHVec3& worldPos) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyWorldForceAtWorldPosition(force, worldPos); } void SHRigidBodyComponent::AddRelativeForce(const SHVec3& relativeForce) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyLocalForceAtCenterOfMass(relativeForce); } void SHRigidBodyComponent::AddRelativeForceAtLocalPos(const SHVec3& relativeForce, const SHVec3& localPos) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyLocalForceAtLocalPosition(relativeForce, localPos); } void SHRigidBodyComponent::AddRelativeForceAtWorldPos(const SHVec3& relativeForce, const SHVec3& worldPos) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyLocalForceAtWorldPosition(relativeForce, worldPos); } void SHRigidBodyComponent::AddTorque(const SHVec3& torque) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyWorldTorque(torque); } void SHRigidBodyComponent::AddRelativeTorque(const SHVec3& relativeTorque) const noexcept { - + if (rp3dBody == nullptr) + { + SHLOGV_ERROR("Entity {} is missing an rp3dBody!", GetEID()) + return; + } + + rp3dBody->applyLocalTorque(relativeTorque); } } // namespace SHADE diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index d4da329b..389e518f 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -16,6 +16,8 @@ // Project Headers #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.hpp" #include "Math/SHMathHelpers.h" #include "Scene/SHSceneManager.h" #include "Math/Transform/SHTransformComponent.h" @@ -205,23 +207,6 @@ namespace SHADE factory.destroyPhysicsWorld(world); } - //void SHPhysicsSystem::RemoveRigidBody(EntityID entityID) noexcept - //{ - // #ifdef _DEBUG - // SHLOG_INFO("Removing a Rigidbody from the Physics World.") - // #endif - - // auto* physicsObject = GetPhysicsObject(entityID); - // SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") - //} - - //void SHPhysicsSystem::RemoveCollider(EntityID entityID) noexcept - //{ - // #ifdef _DEBUG - // SHLOG_INFO("Removing a Collider from the Physics World.") - // #endif - //} - void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) { auto* physicsObject = GetPhysicsObject(entityID); @@ -238,24 +223,55 @@ namespace SHADE { auto* system = reinterpret_cast(GetSystem()); - // Update bodies and colliders if component is dirty - system->SyncRigidBodyComponents(SHComponentManager::GetDense()); - system->SyncColliderComponents(SHComponentManager::GetDense()); - // Sync transforms - for (auto& physicsObject : system->map | std::views::values) + for (auto& [entityID, physicsObject] : system->map) { // Ensure a valid physics Object if (physicsObject.rp3dBody == nullptr) continue; - const auto* TF = SHComponentManager::GetComponent(physicsObject.entityID); - if (TF->HasChanged()) + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + + // Clear all forces and velocities if editor is not in play + if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) { - physicsObject.SetPosition(TF->GetWorldPosition()); - physicsObject.SetOrientation(TF->GetWorldOrientation()); + if (rigidBodyComponent) + { + auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + rp3dRigidBody->setLinearVelocity(SHVec3::Zero); + rp3dRigidBody->setAngularVelocity(SHVec3::Zero); + } + } + + const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + if (transformComponent && transformComponent->HasChanged()) + { + const auto WORLD_POS = transformComponent->GetWorldPosition(); + const auto WORLD_ROT = transformComponent->GetWorldOrientation(); + + physicsObject.SetPosition(WORLD_POS); + physicsObject.SetOrientation(WORLD_ROT); + + if (rigidBodyComponent) + { + rigidBodyComponent->position = WORLD_POS; + rigidBodyComponent->orientation = WORLD_ROT; + } + + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + if (colliderComponent) + { + colliderComponent->position = WORLD_POS; + colliderComponent->orientation = WORLD_ROT; + } } } + + // Update bodies and colliders if component is dirty + system->SyncRigidBodyComponents(SHComponentManager::GetDense()); + system->SyncColliderComponents(SHComponentManager::GetDense()); } void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept @@ -431,9 +447,9 @@ namespace SHADE } // Convert RP3D Transform to SHADE - auto* tfComponent = SHComponentManager::GetComponent(entityID); - tfComponent->SetWorldPosition(rp3dPos); - tfComponent->SetWorldOrientation(rp3dRot); + auto* transformComponent = SHComponentManager::GetComponent(entityID); + transformComponent->SetWorldPosition(rp3dPos); + transformComponent->SetWorldOrientation(rp3dRot); // Cache transforms physicsObject.prevTransform = CURRENT_TF; @@ -480,6 +496,7 @@ namespace SHADE rp3d::Transform{ rigidBodyComponent->position, rigidBodyComponent->orientation } ); + rigidBodyComponent->rp3dBody = reinterpret_cast(physicsObject->rp3dBody); // Add collision shapes back into the body if (colliderComponent != nullptr) @@ -491,6 +508,8 @@ namespace SHADE if (ADDED_ID == COLLIDER_ID) { + SHASSERT(colliderComponent != nullptr, "Collider Component was not added to Entity " + std::to_string(ENTITY_ID) + "!"); + colliderComponent->position = transformComponent->GetWorldPosition(); colliderComponent->orientation = transformComponent->GetWorldOrientation(); @@ -530,7 +549,7 @@ namespace SHADE if (REMOVED_ID == RIGID_BODY_ID) { world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); - physicsObject->rp3dBody = nullptr; + physicsObject->rp3dBody = nullptr; auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); if (colliderComponent != nullptr) @@ -544,13 +563,23 @@ namespace SHADE for (auto& collider : colliderComponent->colliders | std::views::keys) physicsObject->AddCollider(&collider); } + + // Wake up all physics objects + for (auto& [entityID, object] : map) + { + if (SHComponentManager::HasComponent(entityID)) + reinterpret_cast(object.rp3dBody)->setIsSleeping(false); + } } if (REMOVED_ID == COLLIDER_ID) { // Remove all colliders for (uint32_t i = 0; i < physicsObject->rp3dBody->getNbColliders(); ++i) - physicsObject->rp3dBody->removeCollider(physicsObject->rp3dBody->getCollider(i)); + { + auto* collider = physicsObject->rp3dBody->getCollider(i); + physicsObject->rp3dBody->removeCollider(collider); + } } if (physicsObject->rp3dBody == nullptr) From 57027da80b966344746e7835219975a4e8128570 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Wed, 26 Oct 2022 16:27:58 +0800 Subject: [PATCH 475/793] Integrated into SBApplication and accounted for case where number of points to draw is 0. --- .../src/Application/SBApplication.cpp | 3 +++ .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 19 +++++++++++--- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 15 +++++------ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 25 +++++++++++++++++-- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 54dc0ccf..9b230296 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -31,6 +31,7 @@ #include "FRC/SHFramerateController.h" #include "AudioSystem/SHAudioSystem.h" #include "Camera/SHCameraSystem.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" // Components #include "Graphics/MiddleEnd/Interface/SHRenderable.h" @@ -69,6 +70,7 @@ namespace Sandbox SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); #ifdef SHEDITOR SDL_Init(SDL_INIT_VIDEO); @@ -90,6 +92,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); + SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index cd6dd7ab..7e82fb21 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -25,11 +25,11 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* DrawRoutine */ /*---------------------------------------------------------------------------------*/ - SHDebugDrawSystem::DrawRoutine::DrawRoutine() + SHDebugDrawSystem::ProcessPointsRoutine::ProcessPointsRoutine() : SHSystemRoutine("Debug Draw") {} - void SHDebugDrawSystem::DrawRoutine::Execute(double dt) noexcept + void SHDebugDrawSystem::ProcessPointsRoutine::Execute(double dt) noexcept { auto gfxSys = SHSystemManager::GetSystem(); if (gfxSys) @@ -40,8 +40,12 @@ namespace SHADE // Create the buffer if it doesn't exist or just update it SHDebugDrawSystem* system = static_cast(GetSystem()); + system->numPoints = system->points.size(); const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size(); - SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer); + if (DATA_SIZE > 0) + { + SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer); + } // Reset for next frame system->points.clear(); @@ -59,6 +63,10 @@ namespace SHADE auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw"); subPass->AddExteriorDrawCalls([&](Handle& cmdBuffer) { + // Don't draw if no points + if (numPoints <= 0) + return; + cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0); cmdBuffer->DrawArrays(static_cast(points.size()), 1, 0, 0); @@ -67,7 +75,10 @@ namespace SHADE void SHDebugDrawSystem::Exit() { - + if (vertexBuffer) + { + vertexBuffer.Free(); + } } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index 9344482a..cc3e728a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -21,14 +21,10 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystem.h" #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/SHHandle.h" +#include "Graphics/Buffers/SHVkBuffer.h" namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Forward Declarations */ - /*---------------------------------------------------------------------------------*/ - class SHVkBuffer; - /*---------------------------------------------------------------------------------*/ /* Type Definitions */ /*---------------------------------------------------------------------------------*/ @@ -44,10 +40,10 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ /* System Routines */ /*-------------------------------------------------------------------------------*/ - class SH_API DrawRoutine final : public SHSystemRoutine - { + class SH_API ProcessPointsRoutine final : public SHSystemRoutine + { public: - DrawRoutine(); + ProcessPointsRoutine(); virtual void Execute(double dt) noexcept override final; }; @@ -73,7 +69,7 @@ namespace SHADE /*-------------------------------------------------------------------------------*/ /* Type Definitions */ /*-------------------------------------------------------------------------------*/ - struct PointVertex + struct SH_API PointVertex { SHVec3 Position; SHVec4 Color; @@ -85,6 +81,7 @@ namespace SHADE std::vector points; // GPU Buffers Handle vertexBuffer; + uint32_t numPoints = 0; // Cached Points for polygon drawing std::vector spherePoints; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 418e8260..6bf52736 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -204,12 +204,15 @@ namespace SHADE auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); gBufferNode->AddNodeCompute(pureCopyShader, { "Scene Pre-Process", "Scene" }); + // Set up Debug Draw Pass + auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, { "G-Buffer" }); + auto debugDrawSubpass = debugDrawNode->AddSubpass("Debug Draw"); + debugDrawSubpass->AddColorOutput("Scene"); - auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors + auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"Debug Draw"}); // no predecessors auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); dummySubpass->AddInput("Scene"); - // Generate world render graph worldRenderGraph->Generate(); @@ -224,6 +227,24 @@ namespace SHADE defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferSubpass); + // Create debug draw pipeline + auto debugDrawVS = shaderModuleLibrary.GetShaderModule("DebugDrawVs.glsl"); + auto debugDrawFS = shaderModuleLibrary.GetShaderModule("DebugDrawFs.glsl"); + + auto debugDrawPipelineLayout = resourceManager.Create + ( + device, SHPipelineLayoutParams + { + .shaderModules = { debugDrawVS, debugDrawFS }, + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() + } + ); + debugDrawPipeline = resourceManager.Create(device, debugDrawPipelineLayout); + debugDrawPipeline->GetPipelineState().SetRasterizationState(SHRasterizationState + { + .polygonMode = vk::PolygonMode::eLine, + .cull_mode = vk::CullModeFlagBits::eNone + }); } void SHGraphicsSystem::InitMiddleEnd(void) noexcept From 12758878c5c5f9ddad6e79448dc1c7f0bbf56905 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 26 Oct 2022 16:55:28 +0800 Subject: [PATCH 476/793] Fixed bug with multiple collider removals --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 389e518f..832f9688 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -575,7 +575,9 @@ namespace SHADE if (REMOVED_ID == COLLIDER_ID) { // Remove all colliders - for (uint32_t i = 0; i < physicsObject->rp3dBody->getNbColliders(); ++i) + const int NUM_COLLIDERS = static_cast(physicsObject->rp3dBody->getNbColliders()); + + for (int i = NUM_COLLIDERS - 1; i >= 0; --i) { auto* collider = physicsObject->rp3dBody->getCollider(i); physicsObject->rp3dBody->removeCollider(collider); From 4eaa15d999e7191e6ef41fb21f0feafaa59ff918 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 26 Oct 2022 17:16:09 +0800 Subject: [PATCH 477/793] Added function to compile built in shaders --- .../Libraries/Compilers/SHShaderSourceCompiler.cpp | 13 +++++++++++++ .../Libraries/Compilers/SHShaderSourceCompiler.h | 2 ++ SHADE_Engine/src/Assets/SHAssetManager.h | 1 + 3 files changed, 16 insertions(+) diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp index 8cca46dc..85e69e31 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.cpp @@ -139,4 +139,17 @@ namespace SHADE return {}; } + + std::optional SHShaderSourceCompiler::CompileShaderFromString + (std::string const& string, AssetPath path, SH_SHADER_TYPE type) noexcept + { + auto const data = CompileShaderSourceToMemory(string, path.filename().string(), type); + + if (data == nullptr) + { + return{}; + } + + return CompileShaderSourceToBinary(path, *data); + } } diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h index b2b8bca3..9fb93924 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h @@ -24,5 +24,7 @@ namespace SHADE public: static std::optional LoadAndCompileShader(AssetPath path) noexcept; + static std::optional CompileShaderFromString + (std::string const& string, AssetPath path, SH_SHADER_TYPE type) noexcept; }; } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 0dc376d9..376467d8 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -82,6 +82,7 @@ namespace SHADE static std::vector GetAllDataOfType(AssetType type) noexcept; static std::vector GetAllRecordOfType(AssetType type) noexcept; + private: /**************************************************************************** * \brief Load resource data into memory From 19ceab84dfd169b7d2b8382533db426e8a2c785e Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 26 Oct 2022 18:35:41 +0800 Subject: [PATCH 478/793] Added events for adding and removing colliders --- SHADE_Engine/src/Events/SHEventDefines.h | 3 +++ SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 18 +++++++++++++++++- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 16 ++++++++++++++++ SHADE_Engine/src/Scene/SHSceneGraph.h | 6 +++++- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index fc9f41e1..804fbfec 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -11,3 +11,6 @@ constexpr SHEventIdentifier SH_ENTITY_CREATION_EVENT { 2 }; constexpr SHEventIdentifier SH_COMPONENT_ADDED_EVENT { 3 }; constexpr SHEventIdentifier SH_COMPONENT_REMOVED_EVENT { 4 }; constexpr SHEventIdentifier SH_SCENEGRAPH_CHANGE_PARENT_EVENT { 5 }; +constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_ADDED_EVENT { 6 }; +constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_REMOVED_EVENT { 7 }; + diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 832f9688..1c6e79d7 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -210,13 +210,29 @@ namespace SHADE void SHPhysicsSystem::AddCollisionShape(EntityID entityID, SHCollider* collider) { auto* physicsObject = GetPhysicsObject(entityID); - physicsObject->AddCollider(collider); + + const SHPhysicsColliderAddedEvent COLLIDER_ADDED_EVENT_DATA + { + .entityID = entityID + , .colliderType = collider->GetType() + , .colliderIndex = physicsObject->AddCollider(collider) + }; + + SHEventManager::BroadcastEvent(COLLIDER_ADDED_EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); } void SHPhysicsSystem::RemoveCollisionShape(EntityID entityID, int index) { auto* physicsObject = GetPhysicsObject(entityID); physicsObject->RemoveCollider(index); + + const SHPhysicsColliderRemovedEvent COLLIDER_REMOVED_EVENT_DATA + { + .entityID = entityID + , .colliderIndex = index + }; + + SHEventManager::BroadcastEvent(COLLIDER_REMOVED_EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); } void SHPhysicsSystem::PhysicsPreUpdate::Execute(double) noexcept diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 0af22e7a..a3c3bea1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -184,5 +184,21 @@ namespace SHADE SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); }; + /*-----------------------------------------------------------------------------------*/ + /* Event Data Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHPhysicsColliderAddedEvent + { + EntityID entityID; + SHCollider::Type colliderType; + int colliderIndex; + }; + + struct SHPhysicsColliderRemovedEvent + { + EntityID entityID; + int colliderIndex; + }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index a4cf45eb..b52fd1ff 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -158,9 +158,13 @@ namespace SHADE SHSceneNode* AllocateNode (EntityID entityID); void ReleaseNode (SHSceneNode* node) noexcept; - static void TraverseAndInvokePredicate (const SHSceneNode* node, const UnaryFunction& predicate); + static void TraverseAndInvokeFunction (const SHSceneNode* node, const UnaryFunction& function); }; + /*-----------------------------------------------------------------------------------*/ + /* Event Data Definitions */ + /*-----------------------------------------------------------------------------------*/ + struct SHSceneGraphChangeParentEvent { SHSceneNode* node; From 1018454f2e9f3dd2c2525fd0b4c51b42cac9ab59 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 20:21:47 +0800 Subject: [PATCH 479/793] Add Win32 MessageBox Add Prefab Manager --- Assets/Editor/Layouts/UserLayout.ini | 62 ------------------- .../Serialization/Prefab/SHPrefabManager.cpp | 56 +++++++++++++++++ .../Serialization/Prefab/SHPrefabManager.h | 28 +++++++++ SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp | 31 ++++++++++ SHADE_Engine/src/Tools/Dialog/SHWinDialog.h | 35 +++++++++++ 5 files changed, 150 insertions(+), 62 deletions(-) delete mode 100644 Assets/Editor/Layouts/UserLayout.ini create mode 100644 SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp create mode 100644 SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h create mode 100644 SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp create mode 100644 SHADE_Engine/src/Tools/Dialog/SHWinDialog.h diff --git a/Assets/Editor/Layouts/UserLayout.ini b/Assets/Editor/Layouts/UserLayout.ini deleted file mode 100644 index e27f5cca..00000000 --- a/Assets/Editor/Layouts/UserLayout.ini +++ /dev/null @@ -1,62 +0,0 @@ -[Window][MainStatusBar] -Pos=0,1060 -Size=1920,20 -Collapsed=0 - -[Window][SHEditorMenuBar] -Pos=0,48 -Size=1920,1012 -Collapsed=0 - -[Window][Hierarchy Panel] -Pos=0,142 -Size=494,690 -Collapsed=0 -DockId=0x00000007,0 - -[Window][Debug##Default] -Pos=60,60 -Size=400,400 -Collapsed=0 - -[Window][Inspector] -Pos=1649,48 -Size=271,1012 -Collapsed=0 -DockId=0x00000006,0 - -[Window][Profiler] -Pos=0,48 -Size=494,92 -Collapsed=0 -DockId=0x00000003,0 - -[Window][Viewport] -Pos=648,48 -Size=2519,1319 -Collapsed=0 -DockId=0x00000002,0 - -[Window][î‹ Viewport] -Pos=496,48 -Size=1151,1012 -Collapsed=0 -DockId=0x00000002,0 - -[Window][ Asset Browser] -Pos=0,834 -Size=494,226 -Collapsed=0 -DockId=0x00000008,0 - -[Docking][Data] -DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=8,79 Size=1920,1012 Split=X - DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1992,1036 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=494,1036 Split=Y Selected=0x1E6EB881 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,94 Selected=0x1E6EB881 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,940 Split=Y Selected=0xE096E5AE - DockNode ID=0x00000007 Parent=0x00000004 SizeRef=494,690 Selected=0xE096E5AE - DockNode ID=0x00000008 Parent=0x00000004 SizeRef=494,226 Selected=0xB128252A - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1151,1036 CentralNode=1 Selected=0xB41284E7 - DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=271,1036 Selected=0xE7039252 - diff --git a/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp new file mode 100644 index 00000000..8ab098b8 --- /dev/null +++ b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.cpp @@ -0,0 +1,56 @@ +#include "SHpch.h" +#include "SHPrefabManager.h" + +namespace SHADE +{ + SHPrefabManager::PrefabMap SHPrefabManager::prefabMap{}; + + void SHPrefabManager::AddPrefab(AssetID const& prefabAssetID) noexcept + { + prefabMap.insert({ prefabAssetID, {} }); + } + + void SHPrefabManager::RemovePrefab(AssetID const& prefabAssetID) noexcept + { + prefabMap.erase(prefabAssetID); + } + + void SHPrefabManager::ClearPrefab(AssetID const& prefabAssetID) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].clear(); + } + } + + void SHPrefabManager::UpdateAllPrefabEntities(AssetID const& prefabAssetID) noexcept + { + //Loop through all entities and deserialize new data + } + + void SHPrefabManager::AddEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].insert(eid); + } + } + + void SHPrefabManager::RemoveEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept + { + if (prefabMap.contains(prefabAssetID)) + { + prefabMap[prefabAssetID].erase(eid); + } + } + + void SHPrefabManager::Clear() noexcept + { + prefabMap.clear(); + } + + bool SHPrefabManager::Empty() noexcept + { + return prefabMap.empty(); + } +} diff --git a/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h new file mode 100644 index 00000000..37c317ed --- /dev/null +++ b/SHADE_Engine/src/Serialization/Prefab/SHPrefabManager.h @@ -0,0 +1,28 @@ +#pragma once + +#include "Assets/SHAssetMacros.h" +#include "ECS_Base/SHECSMacros.h" +#include +#include + + +namespace SHADE +{ + class SHPrefabManager + { + public: + using PrefabMap = std::unordered_map>; + + static void AddPrefab(AssetID const& prefabAssetID) noexcept; + static void RemovePrefab(AssetID const& prefabAssetID) noexcept; + static void ClearPrefab(AssetID const& prefabAssetID) noexcept; + static void UpdateAllPrefabEntities(AssetID const& prefabAssetID) noexcept; + static void AddEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept; + static void RemoveEntity(AssetID const& prefabAssetID, EntityID const& eid) noexcept; + static void Clear() noexcept; + static bool Empty() noexcept; + + private: + static PrefabMap prefabMap; + }; +} diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp new file mode 100644 index 00000000..a2900401 --- /dev/null +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp @@ -0,0 +1,31 @@ +#include "SHpch.h" +#include "SHWinDialog.h" +#include +#include + +namespace SHADE +{ + void SHWinDialog::DisplayMessageBox(MessageBoxType const& messageBoxType, std::string const& title, std::string const& text) + { + if(messageBoxType == MessageBoxType::MB_MAX) + return; + + UINT flags = MB_APPLMODAL | MB_SETFOREGROUND | MB_OK; + flags |= static_cast(messageBoxType); + + const std::wstring wTitle(title.begin(), title.end()); + const std::wstring wText(text.begin(), text.end()); + + MessageBox(GetDesktopWindow(), wText.data(), wTitle.data(), flags); + } + + std::vector SHWinDialog::DisplayOpenDialog(OpenSaveConfig const& openSaveConfig) + { + return {}; + } + + std::vector SHWinDialog::DisplaySaveAsDialog(OpenSaveConfig const& openSaveConfig) + { + return{}; + } +} diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h new file mode 100644 index 00000000..0c11f768 --- /dev/null +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h @@ -0,0 +1,35 @@ +#pragma once +#include +#include + +namespace SHADE +{ + //https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox + enum class MessageBoxType + { + MB_ERROR = 0x00000010L, + MB_QUESTION = 0x00000020L, + MB_WARNING = 0x00000030L, + MB_INFO = 0x00000040L, + MB_MAX = 0 + }; + + struct OpenSaveConfig + { + using Extension = std::string; + using Extensions = std::vector; + using FileTypeDesc = std::pair; + using FilterList = std::vector; + + std::string title = "Open"; + bool openFolders = false; + FilterList filterList{}; + }; + + struct SHWinDialog + { + static void DisplayMessageBox(MessageBoxType const& messageBoxType, std::string const& title, std::string const& text); + static std::vector DisplayOpenDialog(OpenSaveConfig const& openSaveConfig); + static std::vector DisplaySaveAsDialog(OpenSaveConfig const& openSaveConfig); + }; +} From 3518004266bdcce320934c1884a7a006e86bb0cc Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Wed, 26 Oct 2022 21:06:09 +0800 Subject: [PATCH 480/793] Add Open File DIalog (WIP) --- SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp | 40 +++++++++++++++++++ SHADE_Engine/src/Tools/Dialog/SHWinDialog.h | 1 + 2 files changed, 41 insertions(+) diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp index a2900401..bd13801a 100644 --- a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.cpp @@ -21,6 +21,46 @@ namespace SHADE std::vector SHWinDialog::DisplayOpenDialog(OpenSaveConfig const& openSaveConfig) { + const HWND hwnd = GetDesktopWindow(); + HRESULT hResult = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); + if(SUCCEEDED(hResult)) + { + IFileOpenDialog* pFileOpen; + + //Create Dialog object + hResult = CoCreateInstance(CLSID_FileOpenDialog, nullptr, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast(pFileOpen)); + + if(SUCCEEDED(hResult)) + { + //Show the open dialog box + hResult = pFileOpen->Show(hwnd); + + //Get file name from the dialoh box + if(SUCCEEDED(hResult)) + { + if(openSaveConfig.openMultiple) + { + IShellItemArray* pItemArray; + hResult = pFileOpen->GetResults(&pItemArray); + if(SUCCEEDED(hResult)) + { + + } + } + else + { + IShellItem* pItem; + hResult = pFileOpen->GetResult(&pItem); + if(SUCCEEDED(hResult)) + { + PWSTR pszFilePath; + hResult = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); + } + } + + } + } + } return {}; } diff --git a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h index 0c11f768..02fe07b9 100644 --- a/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h +++ b/SHADE_Engine/src/Tools/Dialog/SHWinDialog.h @@ -23,6 +23,7 @@ namespace SHADE std::string title = "Open"; bool openFolders = false; + bool openMultiple = false; FilterList filterList{}; }; From 6e9f54987f2ec25d0a04a35587447684881a766c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 26 Oct 2022 22:40:04 +0800 Subject: [PATCH 481/793] Prepared light global desc set layout data and render graph resources - Fixed material padding - Lighting desc sets now have a buffer at binding 0 to store light counts. - Added position, normals, albedo resources in render graph --- .../Graphics/MiddleEnd/Batching/SHBatch.cpp | 8 +- .../GlobalData/SHGraphicsGlobalData.cpp | 31 ++++---- .../MiddleEnd/Interface/SHGraphicsConstants.h | 32 ++------ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 40 ++++++++-- .../MiddleEnd/Interface/SHRenderable.cpp | 2 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 71 +++++++++++++----- .../MiddleEnd/Lights/SHLightingSubSystem.h | 19 ++++- TempShaderFolder/DeferredCompositeCs.glsl | 30 ++++++++ TempShaderFolder/DeferredCompositeCs.spv | Bin 0 -> 1716 bytes TempShaderFolder/TestCubeFs.glsl | 17 +++-- TempShaderFolder/TestCubeFs.spv | Bin 2300 -> 2536 bytes TempShaderFolder/TestCubeVs.glsl | 12 ++- TempShaderFolder/TestCubeVs.spv | Bin 2492 -> 2684 bytes 13 files changed, 175 insertions(+), 87 deletions(-) create mode 100644 TempShaderFolder/DeferredCompositeCs.glsl create mode 100644 TempShaderFolder/DeferredCompositeCs.spv diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp index 09fde60f..f5c51914 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Batching/SHBatch.cpp @@ -180,7 +180,8 @@ namespace SHADE { SHLOG_WARNING("[SHBatch] Entity with a missing SHRenderable found!"); } - propsCurrPtr += singleMatPropAlignedSize; + //propsCurrPtr += singleMatPropAlignedSize; + propsCurrPtr += singleMatPropSize; } // Transfer to GPU @@ -302,7 +303,7 @@ namespace SHADE { singleMatPropSize = SHADER_INFO->GetBytesRequired(); singleMatPropAlignedSize = device->PadSSBOSize(static_cast(singleMatPropSize)); - matPropTotalBytes = numTotalElements * singleMatPropAlignedSize; + matPropTotalBytes = numTotalElements * singleMatPropSize; if (matPropsDataSize < matPropTotalBytes) { matPropsData.reset(new char[matPropTotalBytes]); @@ -361,7 +362,8 @@ namespace SHADE { SHLOG_WARNING("[SHBatch] Entity with a missing SHRenderable found!"); } - propsCurrPtr += singleMatPropAlignedSize; + //propsCurrPtr += singleMatPropAlignedSize; + propsCurrPtr += singleMatPropSize; } } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index 0f1658f3..d5fb81bd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -47,36 +47,35 @@ namespace SHADE // For global data (generic data and textures) Handle staticGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::STATIC_GLOBALS,{ genericDataBinding, texturesBinding }); + std::vector lightBindings{}; - for (uint32_t i = 0; i < SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); ++i) + + // This is the binding we use to count the lights (binding 0) + lightBindings.push_back(SHVkDescriptorSetLayout::Binding + { + .Type = vk::DescriptorType::eUniformBufferDynamic, + .Stage = vk::ShaderStageFlagBits::eCompute, + .BindPoint = 0, + .DescriptorCount = 1, + + }); + + for (uint32_t i = 1; i <= SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); ++i) { lightBindings.push_back (SHVkDescriptorSetLayout::Binding { .Type = vk::DescriptorType::eStorageBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eFragment, + .Stage = vk::ShaderStageFlagBits::eCompute, .BindPoint = i, .DescriptorCount = 1, }); } - //SHVkDescriptorSetLayout::Binding pointLightBinding - //{ - // .Type = vk::DescriptorType::eStorageBufferDynamic, - // .Stage = vk::ShaderStageFlagBits::eFragment, - // .BindPoint = SHGraphicsConstants::DescriptorSetBindings::POINT_LIGHT_DATA, - // .DescriptorCount = 1, - //}; - //SHVkDescriptorSetLayout::Binding spotLightBinding - //{ - // .Type = vk::DescriptorType::eStorageBufferDynamic, - // .Stage = vk::ShaderStageFlagBits::eFragment, - // .BindPoint = SHGraphicsConstants::DescriptorSetBindings::SPOT_LIGHT_DATA, - // .DescriptorCount = 1, - //}; // For Dynamic global data (lights) Handle dynamicGlobalLayout = logicalDevice->CreateDescriptorSetLayout(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, lightBindings); + SHVkDescriptorSetLayout::Binding cameraDataBinding { .Type = vk::DescriptorType::eUniformBufferDynamic, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 4c3ba7f9..a39ec10e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -94,32 +94,14 @@ namespace SHADE /***************************************************************************/ static constexpr uint32_t IMAGE_AND_SAMPLERS_DATA = 1; - ///***************************************************************************/ - ///*! - // \brief - // DescriptorSet binding for directional lights. + /***************************************************************************/ + /*! + \brief + DescriptorSet binding for combined image sampler data. - //*/ - ///***************************************************************************/ - //static constexpr uint32_t DIRECTIONAL_LIGHT_DATA = 0; - - ///***************************************************************************/ - ///*! - // \brief - // DescriptorSet binding for directional lights. - - //*/ - ///***************************************************************************/ - //static constexpr uint32_t POINT_LIGHT_DATA = 1; - - ///***************************************************************************/ - ///*! - // \brief - // DescriptorSet binding for directional lights. - - //*/ - ///***************************************************************************/ - //static constexpr uint32_t SPOT_LIGHT_DATA = 2; + */ + /***************************************************************************/ + static constexpr uint32_t LIGHTING_COUNT = 0; /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 9b984a4b..dfa4e41e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -127,15 +127,20 @@ namespace SHADE shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + shaderSourceLibrary.LoadShader(4, "DeferredCompositeCs.glsl", SH_SHADER_TYPE::COMPUTE, true); + + shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); + auto deferredComposite = shaderModuleLibrary.GetShaderModule("DeferredCompositeCs.glsl"); cubeVS->Reflect(); cubeFS->Reflect(); greyscale->Reflect(); pureCopy->Reflect(); + deferredComposite->Reflect(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -176,26 +181,45 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Scene Pre-Process", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Position", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Normals", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Albedo", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); worldRenderGraph->AddResource("Light Layer Indices", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); + worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + + auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", + { + "Position", + "Entity ID", + "Light Layer Indices", + "Normals", + "Albedo", + "Depth Buffer", + "Scene" + }, + {}); // no predecessors - auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", { "Light Layer Indices", "Entity ID", "Depth Buffer", "Scene", "Scene Pre-Process"}, {}); // no predecessors auto gBufferSubpass = gBufferNode->AddSubpass("G-Buffer Write"); - gBufferSubpass->AddColorOutput("Scene Pre-Process"); + gBufferSubpass->AddColorOutput("Position"); gBufferSubpass->AddColorOutput("Entity ID"); gBufferSubpass->AddColorOutput("Light Layer Indices"); + gBufferSubpass->AddColorOutput("Normals"); + gBufferSubpass->AddColorOutput("Albedo"); gBufferSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); //// kirsch //auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - //gBufferNode->AddNodeCompute(kirschShader, { "Scene Pre-Process", "Scene" }); + //gBufferNode->AddNodeCompute(kirschShader, { "Position", "Scene" }); - // copy - auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); - gBufferNode->AddNodeCompute(pureCopyShader, { "Scene Pre-Process", "Scene" }); + //// copy + //auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); + //gBufferNode->AddNodeCompute(pureCopyShader, { "Position", "Scene" }); + + // deferred composite + auto deferredCompositeShader = shaderModuleLibrary.GetShaderModule("DeferredCompositeCs.glsl"); + gBufferNode->AddNodeCompute(deferredCompositeShader, { "Albedo", "Scene" }); auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp index 7c4d0bb9..c935194f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderable.cpp @@ -28,7 +28,7 @@ namespace SHADE material = {}; oldMaterial = {}; - lightLayer = 0; + lightLayer = 1; } void SHRenderable::OnDestroy() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 8d9efe54..a22fb662 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -76,8 +76,8 @@ namespace SHADE // boilerplate intermediateData = nullptr; - // initialize alignment - lightDataAlignmentSize = logicalDevice->PadSSBOSize(GetLightTypeSize(type)); + // Get data required for struct + lightDataSize = GetLightTypeSize(type); // So create some data! Expand(logicalDevice); @@ -94,7 +94,7 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::PerTypeData::Expand(Handle logicalDevice) noexcept { - if (lightDataAlignmentSize == 0) + if (lightDataSize == 0) { SHLOG_ERROR ("One of the types of lights have not been accounted for. Make sure lightDataAlignmentSize is not nullptr."); return; @@ -111,10 +111,12 @@ namespace SHADE numLights = 0; // Initialize the data for lights - intermediateData = std::make_unique(lightDataAlignmentSize * maxLights); + intermediateData = std::make_unique(lightDataSize * maxLights); + + lightDataAlignedSize = logicalDevice->PadSSBOSize(lightDataSize * maxLights); // We want to initialize 3 times the amount of data required. - dataBuffer = logicalDevice->CreateBuffer(maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + dataBuffer = logicalDevice->CreateBuffer(lightDataAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightDataAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); } else { @@ -122,24 +124,27 @@ namespace SHADE uint32_t const OLD_MAX_LIGHTS = maxLights; // before we increase the number of lights, create space to store old data. - std::unique_ptr oldData = std::make_unique(lightDataAlignmentSize * OLD_MAX_LIGHTS); + std::unique_ptr oldData = std::make_unique(lightDataSize * OLD_MAX_LIGHTS); // copy data over. - std::memcpy (oldData.get(), intermediateData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); + std::memcpy (oldData.get(), intermediateData.get(), lightDataSize * OLD_MAX_LIGHTS); // now we start to expand.... // double space for lights maxLights *= 2; + // calculate total + padding + lightDataAlignedSize = logicalDevice->PadSSBOSize(lightDataSize * maxLights); + // destroy old data and initialize container for double the amount of data. - intermediateData = std::make_unique(lightDataAlignmentSize * maxLights); + intermediateData = std::make_unique(lightDataSize * maxLights); // copy old data to new container - std::memcpy(intermediateData.get(), oldData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); + std::memcpy(intermediateData.get(), oldData.get(), lightDataSize * OLD_MAX_LIGHTS); // Resize the GPU buffer. TODO: Replace with Resize no copy here - dataBuffer->ResizeReplace(maxLights * lightDataAlignmentSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, oldData.get(), lightDataAlignmentSize * OLD_MAX_LIGHTS); + dataBuffer->ResizeReplace(maxLights * lightDataAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, oldData.get(), lightDataAlignedSize * OLD_MAX_LIGHTS); } @@ -187,7 +192,12 @@ namespace SHADE uint32_t SHLightingSubSystem::PerTypeData::GetAlignmentSize(void) const noexcept { - return lightDataAlignmentSize; + return lightDataAlignedSize; + } + + uint32_t SHLightingSubSystem::PerTypeData::GetDataSize(void) const noexcept + { + return lightDataSize; } uint32_t SHLightingSubSystem::PerTypeData::GetNumLights(void) const noexcept @@ -231,7 +241,7 @@ namespace SHADE // Now that the container is big enough, bind the new light // Get address of write location - void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignmentSize * numLights); + void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataSize * numLights); // Write the light data to address WriteLightToAddress(writeLocation, unboundLight); @@ -257,7 +267,7 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::PerTypeData::ModifyLight(SHLightComponent* lightComp) noexcept { - void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignmentSize * lightComp->GetIndexInBuffer()); + void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataSize * lightComp->GetIndexInBuffer()); WriteLightToAddress(writeLocation, lightComp); } @@ -266,7 +276,7 @@ namespace SHADE if (intermediateData) { // we want to write to the offset of the current frame - dataBuffer->WriteToMemory(intermediateData.get(), lightDataAlignmentSize * numLights, 0, lightDataAlignmentSize * maxLights * frameIndex); + dataBuffer->WriteToMemory(intermediateData.get(), lightDataSize * numLights, 0, lightDataSize * maxLights * frameIndex); } } @@ -287,12 +297,12 @@ namespace SHADE // We bind the buffer with the correct desc set binding lightingDataDescSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, - binding, + binding + 1, // we want to +1 here because the first binding is reserved for count { &buffer, 1 }, 0, - perTypeData[binding].GetAlignmentSize() * perTypeData[binding].GetMaxLights()); + perTypeData[binding].GetDataSize() * perTypeData[binding].GetMaxLights()); - lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, binding); + lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, binding + 1); // +1 here, same reason. see above } /***************************************************************************/ @@ -307,11 +317,13 @@ namespace SHADE { for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { - for (uint32_t j = 0; j < dynamicOffsets.size(); ++j) + dynamicOffsets[i][0] = i * lightCountsAlignedSize; + // Even if the first binding is a count, we want to account for that too + for (uint32_t j = 1; j < static_cast(dynamicOffsets.size()); ++j) { auto const& typeData = perTypeData[j]; { - dynamicOffsets[i][j] = j * typeData.GetAlignmentSize() * typeData.GetMaxLights(); + dynamicOffsets[i][j] = j * typeData.GetAlignmentSize(); } } } @@ -346,11 +358,23 @@ namespace SHADE // initialize all the data first. We add more lights here as we add more types. perTypeData[i].InitializeData(logicalDevice, static_cast(i)); UpdateDescSet(i); + + // no lights at first + lightCountsData[i] = 0; } + + lightCountsAlignedSize = sizeof (uint32_t) * NUM_LIGHT_TYPES; + lightCountsAlignedSize = logicalDevice->PadUBOSize(lightCountsAlignedSize); + + // Create the GPU buffer to hold light count + lightCountsBuffer = logicalDevice->CreateBuffer(lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, nullptr, lightCountsAlignedSize * SHGraphicsConstants::NUM_FRAME_BUFFERS, vk::BufferUsageFlagBits::eUniformBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT); + + lightingDataDescSet->ModifyWriteDescBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::LIGHTING_COUNT, {&lightCountsBuffer, 1}, 0, sizeof (uint32_t) * NUM_LIGHT_TYPES); + lightingDataDescSet->UpdateDescriptorSetBuffer(SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, SHGraphicsConstants::DescriptorSetBindings::LIGHTING_COUNT); for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { - dynamicOffsets[i].resize(NUM_LIGHT_TYPES); + dynamicOffsets[i].resize(NUM_LIGHT_TYPES + 1); // +1 for the count } } @@ -366,6 +390,8 @@ namespace SHADE /***************************************************************************/ void SHLightingSubSystem::Run(Handle cmdBuffer, uint32_t frameIndex) noexcept { + static uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); + auto& lightComps = SHComponentManager::GetDense(); bool expanded = false; for (auto& light : lightComps) @@ -377,6 +403,9 @@ namespace SHADE if (!light.GetBound()) { perTypeData[enumValue].AddLight(logicalDevice, &light, expanded); + + // add to light count + ++lightCountsData[enumValue]; } // if there was modification to the light data @@ -396,6 +425,8 @@ namespace SHADE data.WriteToGPU(frameIndex); } + lightCountsBuffer->WriteToMemory(lightCountsData.data(), lightCountsData.size() * sizeof (uint32_t), 0, lightCountsAlignedSize * frameIndex); + // If any of the buffers got expanded, the descriptor set is invalid because the expanded buffer // is a new buffer. If some expansion was detected, update descriptor sets. if (expanded) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h index e5336b4e..6c974730 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -17,7 +17,7 @@ namespace SHADE class SHVkCommandBuffer; // Represents how the data will be interpreted in GPU. we want to copy to a container of these before passing to GPU. - struct SHDirectionalLightData + struct SHDirectionalLightData { //! Direction of the light SHVec3 direction; @@ -53,8 +53,11 @@ namespace SHADE //! Capacity of the container. uint32_t maxLights; - //! SSBOs need to be aligned. This is to pad lighting structs - uint32_t lightDataAlignmentSize; + //! SSBOs need to be aligned. This is to pad descriptor offset + uint32_t lightDataAlignedSize; + + //! size needed to store 1 struct object + uint32_t lightDataSize; //! type of the light. Will be used later when we want to expand SH_LIGHT_TYPE lightType; @@ -87,6 +90,7 @@ namespace SHADE static uint32_t GetLightTypeSize (SH_LIGHT_TYPE type) noexcept; Handle GetDataBuffer (void) const noexcept; uint32_t GetAlignmentSize (void) const noexcept; + uint32_t GetDataSize (void) const noexcept; uint32_t GetNumLights (void) const noexcept; uint32_t GetMaxLights (void) const noexcept; }; @@ -105,6 +109,15 @@ namespace SHADE //! Container to store dynamic offsets for binding descriptor sets std::array, static_cast(SHGraphicsConstants::NUM_FRAME_BUFFERS)> dynamicOffsets; + //! holds the data that represents how many lights are in the scene + std::array(SH_LIGHT_TYPE::NUM_TYPES)> lightCountsData; + + //! GPU buffer to hold lightCountData + Handle lightCountsBuffer; + + //! For padding in the buffer + uint32_t lightCountsAlignedSize; + /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ diff --git a/TempShaderFolder/DeferredCompositeCs.glsl b/TempShaderFolder/DeferredCompositeCs.glsl new file mode 100644 index 00000000..354a8954 --- /dev/null +++ b/TempShaderFolder/DeferredCompositeCs.glsl @@ -0,0 +1,30 @@ +#version 450 + +struct DirectionalLightStruct +{ + vec3 direction; + uint isActive; + uint cullingMask; + vec4 diffuseColor; +}; + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, rgba8) uniform image2D inputImage; +layout(set = 4, binding = 1, rgba8) uniform image2D targetImage; + +layout(set = 1, binding = 0) buffer DirectionalLightData +{ + DirectionalLightStruct dLightData[]; +} DirLightData; + +void main() +{ + // convenient variables + ivec2 globalThread = ivec2(gl_GlobalInvocationID); + + vec3 color = imageLoad (inputImage, globalThread).rgb; + + // store result into result image + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1.0f)); + +} \ No newline at end of file diff --git a/TempShaderFolder/DeferredCompositeCs.spv b/TempShaderFolder/DeferredCompositeCs.spv new file mode 100644 index 0000000000000000000000000000000000000000..679dc135f5f556eb95565c51c1c9f1c2aca8821a GIT binary patch literal 1716 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 diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index 7b58d1cf..bac9444d 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -14,13 +14,14 @@ layout(location = 8) in uvec2 integerData; layout(location = 0) out struct { - vec4 vertColor; // location 0 + vec4 vertPos; // location 0 vec2 uv; // location = 1 + vec4 normal; // location = 2 } Out; // material stuff -layout(location = 2) out struct +layout(location = 3) out struct { int materialIndex; uint eid; @@ -36,10 +37,13 @@ layout(set = 2, binding = 0) uniform CameraData void main() { - Out.uv = aUV; + Out2.materialIndex = gl_InstanceIndex; Out2.eid = integerData[0]; Out2.lightLayerIndex = integerData[1]; + + Out.vertPos = worldTransform * vec4(aVertexPos, 1.0f); + Out.uv = aUV; + Out.normal = vec4 (aNormal, 1.0f); gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); - Out.vertColor = vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index 731e31d107fda1e44cdbef3c2445017205b6b841..9cf9d86def3a980db6b334d741cd492d99e8a0bc 100644 GIT binary patch literal 2684 zcmZ9OX>%Jz5QfLr;Uvz9$w3H4vI!U*4CEpZau^@7K|X>Ve^pIMi`lC6O0`;>B%ksZ z;3x5`_(B!$GrR3ZRM)Of zx7XR(>2%k6{n4m5&R-`{FNxErH;A*SpT{Q=yfYPEoc5FBL6y)DqgqQtXPnU)tfref zwU2xrWwB2-(?Rqq#K=r1oQvYYDVO?^`0$Us>t9D%!R8F^xO1G}m2wT`<-UhWZ!;a| zKJ7=ARc{XY_<(YjFW%=%KEUX?dYB@f6$Dx*Vm>v0qGi#x@ zszG)$^!U$VmJIeYpN@YQ3r-{S-5)4%^orDBAMfB_9>}hT_wd_AQu3@QrhDv0S+Pm3 z&;rLMHXO%!JWPd71wM5KT$kL7-{_T!UXzQO6pdkrg7FK7v!r$!N>x((K=m?pOAMF?)XBr-xAr&2`H6oRv*Y_`K(| zWU=&_W#Y^T@!O>@75s(LXZDCQ@9Cc90qE{@=WEln@3~d;Dz^K(Q zY_Q_|TF7U)tzYwsvo^%CUNwUMu6J-QzlZ4uB48bz$UgFN2YNgAp5KxH`5wU*%beE7mi+U=$xj~m z_`EL|ael$rOWgKfkxl%%;vYzJHZ{YaktPOCK78f_jQw!0N?7o(NfWdBKa$OP_;%jM zvdM4zZ^>rQH8ES#2(`3Jn|H>aD}DCTuX$-W;03qtK9kLP#Hbga`31Wn|8r@$Emf$~>hD*)t$LD(i zBmRRle2bHx?}zv;#ebG=1)Clezg6uLBUZ%gZdEpURwSH*&u(WhPArY+4ssO*PNoVoc+d5PVVa5fxj zWsV+5m}To3K0IohlYS&&mf$l-KT6ELY%q!MZ&C6r}h2U5;wmqpLh6Mdw7>E2^?^{&$jI9+w8~( vW7&OnWrJ1k^P5=4rhyKdR literal 2492 zcmZ9MX-^bE5QbY=78Su;@j?)96fab~56}f&MdR^x)7c$yl3{i;JD~W#cgLy1J`o2M4Byo!jAdyHWSn6>Gm6kj1$XR}Xum`Jp-6&pWeox39w( zbAy2hXRm&&nqk-K@$!W=~iU_!5oP&8H|b`< zUJG{av%cXRG2CHgJr6o}@t-~i{g8B4-3>d_*L)sju}_xMPV_zaYQaaoDDG@=xoZ-y ze$AVHGs+4!_3}!voHF&y4(HEAuU{oJSR$kNI;6y7pU^Jq277Jcqzsk%Bp%(bm7VJv)A^xG4E$)PmI^|nP;@)Ch)UXvt=kcv4$(E1z zqQ5L^WJnhLT9o-vVyGnyj_f@vM0&mCQp-l~jnB0c&qK5;@!XNw`PR*n&d1EB{V&~Y zt>7|GzPPsTh^-dp%fA)HCm|oR=0Ey$HA*?cHN>I6696qRJqA+?n4W-n3ovs`%uI=y zY5Y4SOFD&jW5HpWjeOYH%|=dayrtRDu`#<1d8`lk?d_)JV=ak=jhsUP7aTC0ecNpM zz=Msv#MzyA=QG>zlrW1s^XA;KsHqmdT`&uOQ+xG|cxNzoIjB=OXG#c+eneVb`=sQk z;;9QvelTwdhC3n5w+aXQr0{O-mT=rL(AETs!BH2R@kDvKmfECl)_% za!NaA@g~IczHqS<4`vpzabC4%_*13N>OCt=ez4VdUOM?L{(^M!omBjcc6x$sLfRGW z);D|z=UmlJUi{Pr=05@3xbQXY#L;Vd%N&BS6MsWHHDD(m%zWCtZPyPqm@nMG#=D!0Q_lEme;@r`X8m%W+XUIW9;n$0h05Eyrc)f`s$oa0mMSLc;9YTZ7?QZ7-!)YikH&V_6+b(y>)*TP|(Y+Fr> Date: Wed, 26 Oct 2022 23:07:01 +0800 Subject: [PATCH 482/793] Re-restructured compilers to be more self contained Loaders only load internal binary asset files --- Assets/Cube.003.shmesh.shmeta | 3 - Assets/Cube.012.shmesh.shmeta | 3 - .../RaccoonPreTexturedVer1_Base9.shtex.shmeta | 3 - .../Shaders}/KirschCs.glsl | 0 .../Shaders}/PureCopyCs.glsl | 0 .../Shaders}/TestCubeFs.glsl | 0 .../Shaders}/TestCubeVs.glsl | 0 SHADE_Application/src/Scenes/SBTestScene.cpp | 2 +- SHADE_Engine/SHAnimationAsset.h | 30 -- .../Libraries/Compilers/SHAssimpLibrary.cpp | 141 ---------- .../Libraries/Compilers/SHAssimpLibrary.h | 36 --- .../Libraries/Compilers/SHMeshCompiler.cpp | 216 ++++++++++++--- .../Libraries/Compilers/SHMeshCompiler.h | 19 +- .../Compilers/SHShaderSourceCompiler.h | 1 + .../Libraries/Compilers/SHTextureCompiler.cpp | 94 +++++++ .../Libraries/Compilers/SHTextureCompiler.h | 10 +- .../Libraries/Loaders/SHShaderSourceLoader.h | 2 +- .../Libraries/Loaders/SHTextureLoader.cpp | 160 +++-------- .../Libraries/Loaders/SHTextureLoader.h | 9 - .../Libraries/SHShaderSourceLibrary.cpp | 262 ------------------ .../Assets/Libraries/SHShaderSourceLibrary.h | 25 -- SHADE_Engine/src/Assets/SHAssetMacros.h | 16 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 74 +++-- SHADE_Engine/src/Assets/SHAssetManager.h | 9 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 20 +- TempShaderFolder/KirschCs.spv | Bin 5900 -> 0 bytes TempShaderFolder/PureCopyCs.spv | Bin 1264 -> 0 bytes .../ShaderDescriptorDefinitions.glsl | 11 - TempShaderFolder/TestCubeFs.spv | Bin 2300 -> 0 bytes TempShaderFolder/TestCubeVs.spv | Bin 2492 -> 0 bytes 30 files changed, 386 insertions(+), 760 deletions(-) delete mode 100644 Assets/Cube.003.shmesh.shmeta delete mode 100644 Assets/Cube.012.shmesh.shmeta delete mode 100644 Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta rename {TempShaderFolder => Assets/Shaders}/KirschCs.glsl (100%) rename {TempShaderFolder => Assets/Shaders}/PureCopyCs.glsl (100%) rename {TempShaderFolder => Assets/Shaders}/TestCubeFs.glsl (100%) rename {TempShaderFolder => Assets/Shaders}/TestCubeVs.glsl (100%) delete mode 100644 SHADE_Engine/SHAnimationAsset.h delete mode 100644 SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp delete mode 100644 SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h delete mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp delete mode 100644 SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h delete mode 100644 TempShaderFolder/KirschCs.spv delete mode 100644 TempShaderFolder/PureCopyCs.spv delete mode 100644 TempShaderFolder/ShaderDescriptorDefinitions.glsl delete mode 100644 TempShaderFolder/TestCubeFs.spv delete mode 100644 TempShaderFolder/TestCubeVs.spv diff --git a/Assets/Cube.003.shmesh.shmeta b/Assets/Cube.003.shmesh.shmeta deleted file mode 100644 index 207f3999..00000000 --- a/Assets/Cube.003.shmesh.shmeta +++ /dev/null @@ -1,3 +0,0 @@ -Name: Cube.003 -ID: 110152941 -Type: 6 diff --git a/Assets/Cube.012.shmesh.shmeta b/Assets/Cube.012.shmesh.shmeta deleted file mode 100644 index 3af04f93..00000000 --- a/Assets/Cube.012.shmesh.shmeta +++ /dev/null @@ -1,3 +0,0 @@ -Name: Cube.012 -ID: 107348815 -Type: 6 diff --git a/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta b/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta deleted file mode 100644 index 3905aa4f..00000000 --- a/Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta +++ /dev/null @@ -1,3 +0,0 @@ -Name: RaccoonPreTexturedVer1_Base9 -ID: 91918845 -Type: 4 diff --git a/TempShaderFolder/KirschCs.glsl b/Assets/Shaders/KirschCs.glsl similarity index 100% rename from TempShaderFolder/KirschCs.glsl rename to Assets/Shaders/KirschCs.glsl diff --git a/TempShaderFolder/PureCopyCs.glsl b/Assets/Shaders/PureCopyCs.glsl similarity index 100% rename from TempShaderFolder/PureCopyCs.glsl rename to Assets/Shaders/PureCopyCs.glsl diff --git a/TempShaderFolder/TestCubeFs.glsl b/Assets/Shaders/TestCubeFs.glsl similarity index 100% rename from TempShaderFolder/TestCubeFs.glsl rename to Assets/Shaders/TestCubeFs.glsl diff --git a/TempShaderFolder/TestCubeVs.glsl b/Assets/Shaders/TestCubeVs.glsl similarity index 100% rename from TempShaderFolder/TestCubeVs.glsl rename to Assets/Shaders/TestCubeVs.glsl diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index a06e68c2..de408cc9 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -53,7 +53,7 @@ namespace Sandbox if (asset.name == "Cube.012") handles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); break; - case AssetType::IMAGE: + case AssetType::TEXTURE: texHandles.emplace_back(SHResourceManager::LoadOrGet(asset.id)); break; } diff --git a/SHADE_Engine/SHAnimationAsset.h b/SHADE_Engine/SHAnimationAsset.h deleted file mode 100644 index d8d0ffb1..00000000 --- a/SHADE_Engine/SHAnimationAsset.h +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************//** - * \file SHAnimationAsset.h - * \author Loh Xiao Qi - * \date October 2022 - * \brief - * - * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. - *****************************************************************************/ -#pragma once - -#include -#include -#include "SH_API.power h" - -namespace SHADE -{ - struct SH_API SHAnimationAsset - { - std::string name; - - std::vector nodeChannels; - std::vector meshChannels; - std::vector morphMeshChannels; - - double duration; - double ticksPerSecond; - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp deleted file mode 100644 index f4be0b68..00000000 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************//** - * \file SHAssimpLibrary.cpp - * \author Loh Xiao Qi - * \date October 2022 - * \brief - * - * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. - *****************************************************************************/ -#include "SHpch.h" -#include "SHAssimpLibrary.h" -#include - -namespace SHADE -{ - Assimp::Importer SHAssimpLibrary::aiImporter; - - void SHAssimpLibrary::ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept - { - for (size_t i {0}; i < node.mNumMeshes; ++i) - { - aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; - meshes.push_back(ProcessMesh(*mesh)); - } - - for (size_t i{ 0 }; i < node.mNumChildren; ++i) - { - ProcessNode(*node.mChildren[i], scene, meshes); - } - } - - void SHAssimpLibrary::ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept - { - if (scene.HasAnimations()) - { - std::vector anims(scene.mNumAnimations); - for (auto i{0}; i < scene.mNumAnimations; ++i) - { - auto const& anim {*scene.mAnimations[i]}; - - anims[i].name = anim.mName.C_Str(); - - anims[i].duration = anim.mDuration; - anims[i].ticksPerSecond = anim.mTicksPerSecond; - - std::copy_n(anim.mChannels, anim.mNumChannels, anims[i].nodeChannels.data()); - std::copy_n(anim.mMeshChannels, anim.mNumMeshChannels, anims[i].meshChannels.data()); - std::copy_n(anim.mMorphMeshChannels, anim.mNumMorphMeshChannels, anims[i].morphMeshChannels.data()); - } - } - } - - SHMeshAsset* SHAssimpLibrary::ProcessMesh(aiMesh const& mesh) noexcept - { - SHMeshAsset* result = new SHMeshAsset(); - result->compiled = false; - result->changed = false; - - for (size_t i{0}; i < mesh.mNumVertices; ++i) - { - // Vertex position - SHVec3 vertex; - vertex.x = mesh.mVertices[i].x; - vertex.y = mesh.mVertices[i].y; - vertex.z = mesh.mVertices[i].z; - result->vertexPosition.push_back(vertex); - - // Tex coords - SHVec2 texCoord{0.f, 0.f}; - if (mesh.mTextureCoords[0]) - { - texCoord.x = mesh.mTextureCoords[0][i].x; - texCoord.y = mesh.mTextureCoords[0][i].y; - } - result->texCoords.push_back(texCoord); - - // Normals - SHVec3 normal{0.f, 0.f, 0.f}; - if (mesh.mNormals) - { - normal.x = mesh.mNormals[i].x; - normal.y = mesh.mNormals[i].y; - normal.z = mesh.mNormals[i].z; - } - result->vertexNormal.push_back(normal); - - // Tangent - SHVec3 tangent{0.f, 0.f, 0.f}; - if (mesh.mTangents) - { - tangent.x = mesh.mTangents[i].x; - tangent.y = mesh.mTangents[i].y; - tangent.z = mesh.mTangents[i].z; - } - result->vertexTangent.push_back(tangent); - } - - for (size_t i {0}; i < mesh.mNumFaces; ++i) - { - aiFace face = mesh.mFaces[i]; - for (size_t j{0}; j < face.mNumIndices; ++j) - { - result->indices.push_back(face.mIndices[j]); - } - } - - result->header.vertexCount = static_cast(result->vertexPosition.size()); - result->header.indexCount = static_cast(result->indices.size()); - result->header.name = mesh.mName.C_Str(); - - return result; - } - - void SHAssimpLibrary::LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept - { - const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), - aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons - | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping - | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) - | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master - | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible - | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing - | aiProcess_RemoveRedundantMaterials // remove redundant materials - | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors - | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs - ); - - if (!scene || !scene->HasMeshes()) - { - SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); - return; - } - - ExtractAnimations(*scene, anims); - - ProcessNode(*scene->mRootNode, *scene, meshes); - - aiImporter.FreeScene(); - } -} diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h deleted file mode 100644 index d5afde00..00000000 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHAssimpLibrary.h +++ /dev/null @@ -1,36 +0,0 @@ -/*************************************************************************//** - * \file SHAssimpLibrary.h - * \author Loh Xiao Qi - * \date October 2022 - * \brief - * - * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or - * disclosure of this file or its contents without the prior written consent - * of DigiPen Institute of Technology is prohibited. - *****************************************************************************/ - -#pragma once -#include -#include -#include -#include "Assets/SHAssetMacros.h" -#include "Assets/Asset Types/SHMeshAsset.h" -#include "Assets/Asset Types/SHAnimationAsset.h" - -namespace SHADE -{ - class SHAssimpLibrary - { - private: - using MeshVectorRef = std::vector&; - using AnimVectorRef = std::vector&; - - static Assimp::Importer aiImporter; - static void ProcessNode(aiNode const& node, aiScene const& scene,MeshVectorRef meshes) noexcept; - static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept; - static SHMeshAsset* ProcessMesh(aiMesh const& mesh) noexcept; - - public: - static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept; - }; -} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp index 335eb631..3962b851 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.cpp @@ -13,59 +13,189 @@ #include "SHpch.h" #include "SHMeshCompiler.h" #include "Graphics/MiddleEnd/Meshes/SHMeshData.h" +#include #include -std::string SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept +namespace SHADE { - std::string newPath{ path.parent_path().string() + '/'}; - newPath += asset.header.name + MESH_EXTENSION.data(); - std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; - if (!file.is_open()) - { - SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); - } + Assimp::Importer SHMeshCompiler::aiImporter; - file.write( - reinterpret_cast(&(asset.header.vertexCount)), - sizeof(uint32_t) - ); + void SHMeshCompiler::ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept + { + for (size_t i{ 0 }; i < node.mNumMeshes; ++i) + { + aiMesh* mesh = scene.mMeshes[node.mMeshes[i]]; + meshes.push_back(ProcessMesh(*mesh)); + } - file.write( - reinterpret_cast(&(asset.header.indexCount)), - sizeof(uint32_t) - ); + for (size_t i{ 0 }; i < node.mNumChildren; ++i) + { + ProcessNode(*node.mChildren[i], scene, meshes); + } + } - auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount}; - auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount}; + void SHMeshCompiler::ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept + { + if (scene.HasAnimations()) + { + std::vector anims(scene.mNumAnimations); + for (auto i{ 0 }; i < scene.mNumAnimations; ++i) + { + auto const& anim{ *scene.mAnimations[i] }; - file.write( - reinterpret_cast(asset.vertexPosition.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexTangent.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.vertexNormal.data()), - vertexVec3Byte - ); - - file.write( - reinterpret_cast(asset.texCoords.data()), - vertexVec2Byte - ); + anims[i].name = anim.mName.C_Str(); - file.write( - reinterpret_cast(asset.indices.data()), - sizeof(uint32_t) * asset.header.indexCount - ); + anims[i].duration = anim.mDuration; + anims[i].ticksPerSecond = anim.mTicksPerSecond; - file.close(); + std::copy_n(anim.mChannels, anim.mNumChannels, anims[i].nodeChannels.data()); + std::copy_n(anim.mMeshChannels, anim.mNumMeshChannels, anims[i].meshChannels.data()); + std::copy_n(anim.mMorphMeshChannels, anim.mNumMorphMeshChannels, anims[i].morphMeshChannels.data()); + } + } + } - return newPath; + SHMeshAsset* SHMeshCompiler::ProcessMesh(aiMesh const& mesh) noexcept + { + SHMeshAsset* result = new SHMeshAsset(); + result->compiled = false; + result->changed = false; + + for (size_t i{ 0 }; i < mesh.mNumVertices; ++i) + { + // Vertex position + SHVec3 vertex; + vertex.x = mesh.mVertices[i].x; + vertex.y = mesh.mVertices[i].y; + vertex.z = mesh.mVertices[i].z; + result->vertexPosition.push_back(vertex); + + // Tex coords + SHVec2 texCoord{ 0.f, 0.f }; + if (mesh.mTextureCoords[0]) + { + texCoord.x = mesh.mTextureCoords[0][i].x; + texCoord.y = mesh.mTextureCoords[0][i].y; + } + result->texCoords.push_back(texCoord); + + // Normals + SHVec3 normal{ 0.f, 0.f, 0.f }; + if (mesh.mNormals) + { + normal.x = mesh.mNormals[i].x; + normal.y = mesh.mNormals[i].y; + normal.z = mesh.mNormals[i].z; + } + result->vertexNormal.push_back(normal); + + // Tangent + SHVec3 tangent{ 0.f, 0.f, 0.f }; + if (mesh.mTangents) + { + tangent.x = mesh.mTangents[i].x; + tangent.y = mesh.mTangents[i].y; + tangent.z = mesh.mTangents[i].z; + } + result->vertexTangent.push_back(tangent); + } + + for (size_t i{ 0 }; i < mesh.mNumFaces; ++i) + { + aiFace face = mesh.mFaces[i]; + for (size_t j{ 0 }; j < face.mNumIndices; ++j) + { + result->indices.push_back(face.mIndices[j]); + } + } + + result->header.vertexCount = static_cast(result->vertexPosition.size()); + result->header.indexCount = static_cast(result->indices.size()); + result->header.name = mesh.mName.C_Str(); + + return result; + } + + void SHMeshCompiler::LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept + { + const aiScene* scene = aiImporter.ReadFile(path.string().c_str(), + aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons + | aiProcess_GenUVCoords // Convert any type of mapping to uv mapping + | aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...) + | aiProcess_FindInstances // search for instanced meshes and remove them by references to one master + | aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible + | aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing + | aiProcess_RemoveRedundantMaterials // remove redundant materials + | aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors + | aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs + ); + + if (!scene || !scene->HasMeshes()) + { + SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string()); + return; + } + + ExtractAnimations(*scene, anims); + + ProcessNode(*scene->mRootNode, *scene, meshes); + + aiImporter.FreeScene(); + } + + std::string SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept + { + std::string newPath{ path.parent_path().string() + '/' }; + newPath += asset.header.name + MESH_EXTENSION.data(); + + std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc }; + if (!file.is_open()) + { + SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string()); + } + + file.write( + reinterpret_cast(&(asset.header.vertexCount)), + sizeof(uint32_t) + ); + + file.write( + reinterpret_cast(&(asset.header.indexCount)), + sizeof(uint32_t) + ); + + auto const vertexVec3Byte{ sizeof(SHVec3) * asset.header.vertexCount }; + auto const vertexVec2Byte{ sizeof(SHVec2) * asset.header.vertexCount }; + + file.write( + reinterpret_cast(asset.vertexPosition.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.vertexTangent.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.vertexNormal.data()), + vertexVec3Byte + ); + + file.write( + reinterpret_cast(asset.texCoords.data()), + vertexVec2Byte + ); + + file.write( + reinterpret_cast(asset.indices.data()), + sizeof(uint32_t) * asset.header.indexCount + ); + + file.close(); + + return newPath; + } } diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h index 441c2297..0b873621 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHMeshCompiler.h @@ -12,6 +12,11 @@ *****************************************************************************/ #pragma once +#include +#include +#include + +#include "Assets/Asset Types/SHAnimationAsset.h" #include "Assets/Asset Types/SHMeshAsset.h" #include "Assets/SHAssetMacros.h" @@ -19,7 +24,17 @@ namespace SHADE { class SHMeshCompiler { - public: - static std::string CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; + + using MeshVectorRef = std::vector&; + using AnimVectorRef = std::vector&; + + static Assimp::Importer aiImporter; + static void ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept; + static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept; + static SHMeshAsset* ProcessMesh(aiMesh const& mesh) noexcept; + + public: + static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept; + static std::string CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h index 9fb93924..4872be59 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHShaderSourceCompiler.h @@ -17,6 +17,7 @@ namespace SHADE { class SHShaderSourceCompiler { + private: static std::string CompileShaderSourceToBinary(AssetPath path, SHShaderAsset const& data) noexcept; static SHShaderAsset const* CompileShaderSourceToMemory(std::string const& data, std::string const& name, SH_SHADER_TYPE type) noexcept; diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp index 49de6b5c..9c65f5b2 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.cpp @@ -17,6 +17,100 @@ namespace SHADE { + + std::string SHTextureCompiler::TinyDDSResultToString(tinyddsloader::Result value) + { + switch (value) + { + case tinyddsloader::Result::ErrorFileOpen: + return "File open err"; + case tinyddsloader::Result::ErrorRead: + return "File read err"; + case tinyddsloader::Result::ErrorMagicWord: + return "File header magic word err"; + case tinyddsloader::Result::ErrorSize: + return "File size err"; + case tinyddsloader::Result::ErrorVerify: + return "Pixel format err"; + case tinyddsloader::Result::ErrorNotSupported: + return "Unsupported format"; + case tinyddsloader::Result::ErrorInvalidData: + return "Invalid data"; + default: + return "Unknown"; + } + } + + vk::Format SHTextureCompiler::ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear) + { + switch (format) + { + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm_SRGB: + return isLinear ? vk::Format::eBc1RgbaUnormBlock : vk::Format::eBc1RgbaSrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm_SRGB: + return isLinear ? vk::Format::eBc2UnormBlock : vk::Format::eBc2SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm_SRGB: + return isLinear ? vk::Format::eBc3UnormBlock : vk::Format::eBc3SrgbBlock; + case tinyddsloader::DDSFile::DXGIFormat::BC5_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::BC5_SNorm: + return isLinear ? vk::Format::eBc5UnormBlock : vk::Format::eBc5SnormBlock; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm_SRGB: + return isLinear ? vk::Format::eR8G8B8A8Unorm : vk::Format::eR8G8B8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_SNorm: + return vk::Format::eR8G8B8A8Snorm; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8A8Srgb; + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm: + case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm_SRGB: + return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8Srgb; + default: + throw std::runtime_error("Unsupported DDS format."); + } + } + + void SHTextureCompiler::LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept + { + tinyddsloader::Result loadResult = tinyddsloader::Result::Success; + tinyddsloader::DDSFile file; + loadResult = file.Load(path.string().c_str()); + if (loadResult != tinyddsloader::Result::Success) + { + SHLOG_ERROR("Unable to load Texture file: {} at {}", TinyDDSResultToString(loadResult), path.string()); + } + + size_t totalBytes{ 0 }; + + std::vector mipOff(file.GetMipCount()); + + for (size_t i{ 0 }; i < file.GetMipCount(); ++i) + { + mipOff[i] = static_cast(totalBytes); + totalBytes += file.GetImageData(static_cast(i), 0)->m_memSlicePitch; + } + + SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; + std::memcpy(pixel, file.GetImageData()->m_mem, totalBytes); + //pixel = std::move(reinterpret_cast(file.GetDDSData())); + + asset.name = path.stem().string(); + asset.compiled = false; + asset.numBytes = static_cast(totalBytes); + asset.width = file.GetWidth(); + asset.height = file.GetHeight(); + asset.format = ddsLoaderToVkFormat(file.GetFormat(), true); + asset.mipOffsets = std::move(mipOff); + asset.pixelData = std::move(pixel); + } + + void SHTextureCompiler::LoadImageAsset(AssetPath path, SHTextureAsset& image) + { + LoadTinyDDS(path, image); + } std::string SHTextureCompiler::CompileTextureBinary(SHTextureAsset const& asset, AssetPath path) { std::string newPath{ path.string() }; diff --git a/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h index 52980084..3a7e7db7 100644 --- a/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h +++ b/SHADE_Engine/src/Assets/Libraries/Compilers/SHTextureCompiler.h @@ -11,14 +11,22 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #pragma once +#define TINYDDSLOADER_IMPLEMENTATION #include "Assets/Asset Types/SHTextureAsset.h" #include "Assets/SHAssetMacros.h" +#include "tinyddsloader.h" namespace SHADE { - struct SHTextureCompiler + class SHTextureCompiler { + private: + static std::string TinyDDSResultToString(tinyddsloader::Result value); + static vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); + static void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; + public: + static void LoadImageAsset(AssetPath paths, SHTextureAsset& image); static std::string CompileTextureBinary(SHTextureAsset const& asset, AssetPath path); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h index befdade5..905eb223 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHShaderSourceLoader.h @@ -15,7 +15,7 @@ namespace SHADE { - struct SHShaderSourceLoader : SHAssetLoader + struct SHShaderSourceLoader final : SHAssetLoader { SHAssetData* Load(AssetPath path) override; }; diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp index 8b986524..74c08230 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.cpp @@ -12,145 +12,47 @@ #include "SHpch.h" #include "SHTextureLoader.h" +#include + namespace SHADE { - std::string SHTextureLoader::TinyDDSResultToString(tinyddsloader::Result value) - { - switch (value) - { - case tinyddsloader::Result::ErrorFileOpen: - return "File open err"; - case tinyddsloader::Result::ErrorRead: - return "File read err"; - case tinyddsloader::Result::ErrorMagicWord: - return "File header magic word err"; - case tinyddsloader::Result::ErrorSize: - return "File size err"; - case tinyddsloader::Result::ErrorVerify: - return "Pixel format err"; - case tinyddsloader::Result::ErrorNotSupported: - return "Unsupported format"; - case tinyddsloader::Result::ErrorInvalidData: - return "Invalid data"; - default: - return "Unknown"; - } - } - vk::Format SHTextureLoader::ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear) - { - switch (format) - { - case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::BC1_UNorm_SRGB: - return isLinear ? vk::Format::eBc1RgbaUnormBlock : vk::Format::eBc1RgbaSrgbBlock; - case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::BC2_UNorm_SRGB: - return isLinear ? vk::Format::eBc2UnormBlock : vk::Format::eBc2SrgbBlock; - case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::BC3_UNorm_SRGB: - return isLinear ? vk::Format::eBc3UnormBlock : vk::Format::eBc3SrgbBlock; - case tinyddsloader::DDSFile::DXGIFormat::BC5_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::BC5_SNorm: - return isLinear ? vk::Format::eBc5UnormBlock : vk::Format::eBc5SnormBlock; - case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_UNorm_SRGB: - return isLinear ? vk::Format::eR8G8B8A8Unorm : vk::Format::eR8G8B8A8Srgb; - case tinyddsloader::DDSFile::DXGIFormat::R8G8B8A8_SNorm: - return vk::Format::eR8G8B8A8Snorm; - case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::B8G8R8A8_UNorm_SRGB: - return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8A8Srgb; - case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm: - case tinyddsloader::DDSFile::DXGIFormat::B8G8R8X8_UNorm_SRGB: - return isLinear ? vk::Format::eB8G8R8A8Unorm : vk::Format::eB8G8R8Srgb; - default: - throw std::runtime_error("Unsupported DDS format."); - } - } + void SHTextureLoader::LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept + { + std::ifstream file{ path.string(), std::ios::in | std::ios::binary }; + if (!file.is_open()) + { + SHLOG_ERROR("Error opening SHTexture file: {}", path.string()); + } - void SHTextureLoader::LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept - { - tinyddsloader::Result loadResult = tinyddsloader::Result::Success; - tinyddsloader::DDSFile file; - loadResult = file.Load(path.string().c_str()); - if (loadResult != tinyddsloader::Result::Success) - { - SHLOG_ERROR("Unable to load Texture file: {} at {}", TinyDDSResultToString(loadResult), path.string()); - } + auto const intBytes{ sizeof(uint32_t) }; + uint32_t mipCount; - size_t totalBytes{ 0 }; + file.read(reinterpret_cast(&asset.numBytes), intBytes); + file.read(reinterpret_cast(&asset.width), intBytes); + file.read(reinterpret_cast(&asset.height), intBytes); + file.read(reinterpret_cast(&asset.format), sizeof(SHTexture::TextureFormat)); - std::vector mipOff(file.GetMipCount()); + file.read(reinterpret_cast(&mipCount), intBytes); + std::vector mips(mipCount); + file.read(reinterpret_cast(mips.data()), intBytes * mipCount); - for (size_t i{0}; i < file.GetMipCount(); ++i) - { - mipOff[i] = static_cast(totalBytes); - totalBytes += file.GetImageData(static_cast(i), 0)->m_memSlicePitch; - } + auto pixel = new SHTexture::PixelChannel[asset.numBytes]; + file.read(reinterpret_cast(pixel), asset.numBytes); - SHTexture::PixelChannel* pixel = new SHTexture::PixelChannel[totalBytes]; - std::memcpy(pixel, file.GetImageData()->m_mem, totalBytes); - //pixel = std::move(reinterpret_cast(file.GetDDSData())); + asset.mipOffsets = std::move(mips); + asset.pixelData = std::move(pixel); - asset.name = path.stem().string(); - asset.compiled = false; - asset.numBytes = static_cast(totalBytes); - asset.width = file.GetWidth(); - asset.height = file.GetHeight(); - asset.format = ddsLoaderToVkFormat(file.GetFormat(), true); - asset.mipOffsets = std::move(mipOff); - asset.pixelData = std::move(pixel); - } + asset.compiled = true; + file.close(); + } - void SHTextureLoader::LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept - { - std::ifstream file{path.string(), std::ios::in | std::ios::binary}; - if (!file.is_open()) - { - SHLOG_ERROR("Error opening SHTexture file: {}", path.string()); - } + SHAssetData* SHTextureLoader::Load(AssetPath path) + { + auto result = new SHTextureAsset(); - auto const intBytes{ sizeof(uint32_t) }; - uint32_t mipCount; + LoadSHTexture(path, *result); - file.read(reinterpret_cast(&asset.numBytes), intBytes); - file.read(reinterpret_cast(&asset.width), intBytes); - file.read(reinterpret_cast(&asset.height), intBytes); - file.read(reinterpret_cast(&asset.format), sizeof(SHTexture::TextureFormat)); - - file.read(reinterpret_cast(&mipCount), intBytes); - std::vector mips(mipCount); - file.read(reinterpret_cast(mips.data()), intBytes * mipCount); - - auto pixel = new SHTexture::PixelChannel[asset.numBytes]; - file.read(reinterpret_cast(pixel), asset.numBytes); - - asset.mipOffsets = std::move(mips); - asset.pixelData = std::move( pixel ); - - asset.compiled = true; - file.close(); - } - - SHAssetData* SHTextureLoader::Load(AssetPath path) - { - auto result = new SHTextureAsset(); - - LoadImageAsset(path, *result); - - return result; - } - - void SHTextureLoader::LoadImageAsset(AssetPath path, SHTextureAsset& asset) - { - if (path.extension().string() == DDS_EXTENSION) - { - LoadTinyDDS(path, asset); - } - else if (path.extension().string() == TEXTURE_EXTENSION) - { - LoadSHTexture(path, asset); - } - } + return result; + } } diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h index 95dd7c9a..00b060ec 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHTextureLoader.h @@ -10,24 +10,15 @@ * of DigiPen Institute of Technology is prohibited. *****************************************************************************/ #pragma once -#define TINYDDSLOADER_IMPLEMENTATION #include "Assets/SHAssetMacros.h" #include "Assets/Asset Types/SHTextureAsset.h" -#include "tinyddsloader.h" #include "SHAssetLoader.h" namespace SHADE { class SHTextureLoader : public SHAssetLoader { - private: - std::string TinyDDSResultToString(tinyddsloader::Result value); - vk::Format ddsLoaderToVkFormat(tinyddsloader::DDSFile::DXGIFormat format, bool isLinear); - - void LoadTinyDDS(AssetPath path, SHTextureAsset& asset) noexcept; - public: - void LoadImageAsset(AssetPath paths, SHTextureAsset& image); void LoadSHTexture(AssetPath path, SHTextureAsset& asset) noexcept; SHAssetData* Load(AssetPath path) override; }; diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp deleted file mode 100644 index 8a5769d0..00000000 --- a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.cpp +++ /dev/null @@ -1,262 +0,0 @@ -#include "SHPch.h" -#include -#include -#include "SHShaderSourceLibrary.h" -#include "Tools/SHLogger.h" - -namespace SHADE -{ - - /***************************************************************************/ - /*! - - \brief - Private member function to compile a shader STRING source to binary and - returns a vector of 4 bytes. - - \param glslSource - The GLSL string source. - - \param type - Type of the shader: vertex, fragment, compute, etc. - - \param opLevel - Optimization level. - - \return - Returns a vector of the binary data. - - */ - /***************************************************************************/ - std::vector SHShaderSourceLibrary::CompileToBinary(std::string const& glslSource, char const* const spirvFilename, SH_SHADER_TYPE type, shaderc_optimization_level opLevel /*= shaderc_optimization_level_zero*/) - { - // shaderc compiler - shaderc::Compiler compiler; - shaderc::CompileOptions options; - - options.AddMacroDefinition("MY_DEFINE", "1"); - - // Set optimization levels - if (opLevel != shaderc_optimization_level_zero) - options.SetOptimizationLevel(opLevel); - - // Attempt to get the shaderc equivalent shader stage - shaderc_shader_kind shaderKind; - switch (type) - { - case SH_SHADER_TYPE::VERTEX: - shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; - break; - case SH_SHADER_TYPE::FRAGMENT: - shaderKind = shaderc_shader_kind::shaderc_glsl_fragment_shader; - break; - case SH_SHADER_TYPE::COMPUTE: - shaderKind = shaderc_shader_kind::shaderc_glsl_compute_shader; - break; - default: - shaderKind = shaderc_shader_kind::shaderc_glsl_vertex_shader; - break; - } - - // Compile the shader and get the result - shaderc::SpvCompilationResult compileResult = compiler.CompileGlslToSpv(glslSource, shaderKind, spirvFilename, options); - - if (compileResult.GetCompilationStatus() != shaderc_compilation_status_success) - { - SHLOG_ERROR("Shaderc failed to compile GLSL shader to binary | " + compileResult.GetErrorMessage()); - } - - return { compileResult.begin(), compileResult.end() }; - } - - /***************************************************************************/ - /*! - - \brief - TODO: Delete after file IO is implemented. Loads a shader from disk. - - \param filePath - file path to the shader in the asset directory. - - \return - Returns the data in the file in string form. - - */ - /***************************************************************************/ - std::string SHShaderSourceLibrary::GetStringFromFile(char const* filePath) noexcept - { - // Retrieve contents from filePath - // Ensure ifstream objects can throw exceptions - std::ifstream iFile; - iFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); - std::string fileContent = ""; - - try - { - // Open file - // Read file's buffer contents into streams - iFile.open(filePath); - std::stringstream fileStream; - fileStream << iFile.rdbuf(); - - fileContent = fileStream.str(); - - // Close file handler - iFile.close(); - } - catch (std::ifstream::failure e) - { - std::cerr << "File was not successfully read" << filePath << std::endl; - } - - return fileContent; - - } - - /***************************************************************************/ - /*! - - \brief - Load a shader into the library. - - \param filePath - file path to the shader in the asset directory. - - */ - /***************************************************************************/ - bool SHShaderSourceLibrary::LoadShader (uint32_t id, std::string glslFile, SH_SHADER_TYPE type, bool checkSpirvOutdated/* = true*/, bool recompileAnyway /*= false*/) noexcept - { - if (path.extension() != ".glsl") - { - SHLOG_ERROR("Shader is not GLSL file, failed to load shader. "); - return false; - } - - std::string spirvFilepath = path.replace_extension("spv").string(); - - SHShaderAsset newShaderData{}; - newShaderData.shaderType = type; - - // spirv file - std::ifstream spirvFile(spirvFilepath, std::ios::ate | std::ios::binary); - - // If we disable spirv validation, file is not checked - if (!recompileAnyway && - spirvFile.is_open() && - (checkSpirvOutdated ? (std::filesystem::last_write_time(spirvFilepath) > std::filesystem::last_write_time(fullGLSLPath)) : true)) - { - // Get file size of binary - uint32_t fileSize = static_cast(spirvFile.tellg()); - - // resize container to store binary - newShaderData.spirvBinary.resize(fileSize / sizeof(uint32_t)); - - // Read data from binary file to container - spirvFile.seekg(0); - spirvFile.read(reinterpret_cast(newShaderData.spirvBinary.data()), fileSize); - - // close file - spirvFile.close(); - - } - else - { - // Use glslc to generate spirv file - newShaderData.spirvBinary = CompileToBinary(GetStringFromFile(fullGLSLPath.c_str()), spirvFilepath.c_str(), type); - - std::ofstream binaryFile(spirvFilepath, std::ios::binary); - - if (binaryFile.is_open()) - { - // write all data to binary file - binaryFile.write(reinterpret_cast(newShaderData.spirvBinary.data()), newShaderData.spirvBinary.size() * sizeof(uint32_t)); - } - else - { - SHLOG_ERROR("Failed to modify spirv file. "); - return false; - } - } - - newShaderData.name = glslFile; - newShaderData.id = id; - - sourceLibrary.emplace_back(std::move(newShaderData)); - return true; - } - - /***************************************************************************/ - /*! - - \brief - Move ctor for shader data. - - \param rhs - The other shader data - - */ - /***************************************************************************/ - SHShaderAsset::SHShaderAsset(SHShaderAsset&& rhs) noexcept - : spirvBinary{ std::move(rhs.spirvBinary) } - , shaderType{ std::move(rhs.shaderType) } - , name{ std::move(rhs.name) } - , id{ std::move(rhs.id) } - { - - } - - /***************************************************************************/ - /*! - - \brief - Default ctor for shader data. Does nothing. - - */ - /***************************************************************************/ - SHShaderAsset::SHShaderAsset(void) noexcept - : spirvBinary{} - , shaderType{ SH_SHADER_TYPE::VERTEX } - , name{ } - , id{ } - - { - - } - - SHShaderAsset::SHShaderAsset(SHShaderAsset const& rhs) noexcept - : spirvBinary{ rhs.spirvBinary } - , shaderType{ rhs.shaderType } - , name{ rhs.name } - , id{ rhs.id } - { - - } - - SHShaderAsset& SHShaderAsset::operator=(SHShaderAsset const& rhs) noexcept - { - if (this == &rhs) - return *this; - - spirvBinary = rhs.spirvBinary; - shaderType = rhs.shaderType; - name = rhs.name; - id = rhs.id; - - - return *this; - } - - SHShaderAsset& SHShaderAsset::operator=(SHShaderAsset&& rhs) noexcept - { - if (this == &rhs) - return *this; - - spirvBinary = std::move(rhs.spirvBinary); - shaderType = std::move (rhs.shaderType); - name = std::move (rhs.name); - id = std::move (rhs.id); - - return *this; - } - -} \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h b/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h deleted file mode 100644 index cb4a3453..00000000 --- a/SHADE_Engine/src/Assets/Libraries/SHShaderSourceLibrary.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef SH_SHADER_SOURCE_LIBRARY_H -#define SH_SHADER_SOURCE_LIBRARY_H - -#include "Graphics/MiddleEnd/Shaders/SHShaderType.h" -#include "shaderc/shaderc.hpp" - -namespace SHADE -{ - class SHShaderSourceLibrary - { - private: - /*-----------------------------------------------------------------------*/ - /* PRIVATE MEMBER FUNCTIONS */ - /*-----------------------------------------------------------------------*/ - std::vector CompileToBinary(std::string const& glslSource, char const* const spirvFilename, SH_SHADER_TYPE type, shaderc_optimization_level opLevel = shaderc_optimization_level_zero); - - // TODO: Delete after file IO is implemented - std::string GetStringFromFile(char const* filePath) noexcept; - - public: - bool LoadShader (uint32_t id, std::string glslFile, SH_SHADER_TYPE type, bool checkSpirvOutdated = true, bool recompileAnyway = false) noexcept; - }; -} - -#endif diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 3b352d4e..1df4e30b 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -42,19 +42,11 @@ constexpr std::string_view ASSET_META_VER { "1.0" }; // Asset type enum enum class AssetType : AssetTypeMeta { - INVALID = 0, - AUDIO = 1, + INVALID, SHADER, SHADER_BUILT_IN, - MATERIAL, - IMAGE, - TEXTURE, - MESH, - SCRIPT, - SCENE, - PREFAB, - AUDIO_WAV, - DDS, + TEXTURE, + MESH, MAX_COUNT }; constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; @@ -95,14 +87,12 @@ constexpr std::string_view EXTENSIONS[] = { // EXTERNAL EXTENSIONS constexpr std::string_view GLSL_EXTENSION{ ".glsl" }; -constexpr std::string_view IMAGE_EXTENSION{ ".png" }; constexpr std::string_view DDS_EXTENSION{ ".dds" }; constexpr std::string_view FBX_EXTENSION{ ".fbx" }; constexpr std::string_view GLTF_EXTENSION{ ".gltf" }; constexpr std::string_view EXTERNALS[] = { GLSL_EXTENSION, - IMAGE_EXTENSION, DDS_EXTENSION, FBX_EXTENSION, GLTF_EXTENSION diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 3cd4c33c..e7a7a1b7 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -18,10 +18,9 @@ #include "Libraries/Loaders/SHTextureLoader.h" #include "Libraries/Loaders/SHShaderSourceLoader.h" - -#include "Libraries/Compilers/SHAssimpLibrary.h" #include "Libraries/Compilers/SHMeshCompiler.h" #include "Libraries/Compilers/SHTextureCompiler.h" +#include "Libraries/Compilers/SHShaderSourceCompiler.h" namespace SHADE { @@ -112,17 +111,10 @@ namespace SHADE switch(type) { - case AssetType::SCENE: - folder = "scenes/"; - break; - - case AssetType::PREFAB: - folder = "prefabs/"; - break; - - case AssetType::MATERIAL: - folder = "materials/"; - break; + case AssetType::SHADER: + case AssetType::SHADER_BUILT_IN: + folder = "Shaders/"; + break; default: folder = "/"; @@ -280,19 +272,55 @@ namespace SHADE return result; } - void SHAssetManager::InitLoaders() noexcept + void SHAssetManager::CompileAll() noexcept + { + std::vector paths; + + for (auto const& dir : std::filesystem::recursive_directory_iterator{ ASSET_ROOT }) + { + if (dir.is_regular_file()) + { + for (auto const& ext : EXTERNALS) + { + if (dir.path().extension().string() == ext.data()) + { + paths.push_back(dir.path()); + } + } + } + } + + for (auto const& path : paths) + { + auto const ext{ path.extension().string() }; + if (ext == GLSL_EXTENSION.data()) + { + SHShaderSourceCompiler::LoadAndCompileShader(path); + } + else if (ext == DDS_EXTENSION.data()) + { + auto image = new SHTextureAsset(); + SHTextureCompiler::LoadImageAsset(path, *image); + } + else if (ext == GLTF_EXTENSION.data() || ext == FBX_EXTENSION.data()) + { + std::vector meshes; + std::vector anims; + SHMeshCompiler::LoadFromFile(path, meshes, anims); + for (auto const& mesh : meshes) + { + SHMeshCompiler::CompileMeshBinary(*mesh, path); + } + } + } + } + + void SHAssetManager::InitLoaders() noexcept { - loaders[static_cast(AssetType::AUDIO)] = nullptr; loaders[static_cast(AssetType::SHADER)] = dynamic_cast(new SHShaderSourceLoader()); loaders[static_cast(AssetType::SHADER_BUILT_IN)] = loaders[static_cast(AssetType::SHADER)]; - loaders[static_cast(AssetType::MATERIAL)] = nullptr; - loaders[static_cast(AssetType::TEXTURE)] = dynamic_cast(new SHTextureLoader()); - loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); - loaders[static_cast(AssetType::SCRIPT)] = nullptr; - loaders[static_cast(AssetType::SCENE)] = nullptr; - loaders[static_cast(AssetType::PREFAB)] = nullptr; - loaders[static_cast(AssetType::AUDIO_WAV)] = nullptr; - loaders[static_cast(AssetType::DDS)] = nullptr; + loaders[static_cast(AssetType::TEXTURE)] = dynamic_cast(new SHTextureLoader()); + loaders[static_cast(AssetType::MESH)] = dynamic_cast(new SHMeshLoader()); } /**************************************************************************** diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 376467d8..6e5abfd1 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -84,20 +84,17 @@ namespace SHADE static std::vector GetAllRecordOfType(AssetType type) noexcept; private: - /**************************************************************************** - * \brief Load resource data into memory - ****************************************************************************/ + + static void InitLoaders() noexcept; static void LoadAllData() noexcept; - static SHAssetData* LoadData(SHAsset const& asset) noexcept; - inline static void BuildAssetCollection() noexcept; static bool IsRecognised(char const*) noexcept; static SHAsset CreateAssetFromPath(AssetPath path) noexcept; - static void InitLoaders() noexcept; + static void CompileAll() noexcept; static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 2847f5f3..6c8baa36 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -118,24 +118,8 @@ namespace SHADE graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - // TODO: This is VERY temporarily here until a more solid resource management system is implemented - shaderSourceLibrary.Init("../../TempShaderFolder/"); - - shaderSourceLibrary.LoadShader(0, "TestCubeVs.glsl", SH_SHADER_TYPE::VERTEX, true); - shaderSourceLibrary.LoadShader(1, "TestCubeFs.glsl", SH_SHADER_TYPE::FRAGMENT, true); - - shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true); - shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true); - - shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary); - auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl"); - auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl"); - auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); - cubeVS->Reflect(); - cubeFS->Reflect(); - greyscale->Reflect(); - pureCopy->Reflect(); + shaderModuleLibrary.ImportAllShaderSource(device); + shaderModuleLibrary.ReflectAllShaderModules(); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept diff --git a/TempShaderFolder/KirschCs.spv b/TempShaderFolder/KirschCs.spv deleted file mode 100644 index 1ae5408b12013ad40918e0477191c76630795dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5900 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 X9SA&+p7_3yst)~9m-s(*^G^5=Amdbt diff --git a/TempShaderFolder/ShaderDescriptorDefinitions.glsl b/TempShaderFolder/ShaderDescriptorDefinitions.glsl deleted file mode 100644 index c70a9f5b..00000000 --- a/TempShaderFolder/ShaderDescriptorDefinitions.glsl +++ /dev/null @@ -1,11 +0,0 @@ -#define SET_STATIC_GLOBALS 0 -#define SET_DYNAMIC_GLOBALS 1 -#define SET_HIGH_FREQUENCY_GLOBALS 2 - -#define BINDING_GENERIC_DATA 0 -#define BINDING_IMAGE_AND_SAMPLERS_DATA 1 -#define BINDING_LIGHTS_DATA 0 -#define BINDING_CAMERA_DATA 0 -#define BINDING_BATCHED_PER_INST_DATA 0 - - diff --git a/TempShaderFolder/TestCubeFs.spv b/TempShaderFolder/TestCubeFs.spv deleted file mode 100644 index 9955abe53ff6b413215a81ed14c71a2cae54e69d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2300 zcmZ9MT~icC6oy;(LjoE#MlljMi#_+KBF{BO_S zh)zk0kv}xGA_1|_ zDoR}(+K*j|;RDeX(buAfqK@dC?%<;$CDl}sG5;t)UEbYZ)cNUgG`6ESi*p-|_u_%g zqT%zGwx5sR^^r-XMM<3QPU2k~tt>B%;{GeenIaCYq{DQQx);N2KYBfh6ZgW|O!jH) z-Dl6bz0IgU8b#y$D6vuEQX36ircCa@lBUh8JDlWChRHBf zTS6L|kukYF%qN*u2PJl1{ArwTXT#A(oX47OL%S(Y-(PNOLSW3+-``>%cm;oE7bl~= zxPq~f=T<>=8j5j2T)AxK;)H}Y%N>;v0~=>R5jymAQQX%iy=E?B(4n3n@B4V6pr-C& zqgLw%$G+5;xZS8d|4?%~fqsIRJ19|vD%Ne}oU(;IbQ1V~;B4SY+yCN64Tawr< zb>Rn&ogC~4TT3##Kqnu2E$2|?LuWr=H+;TJk~!p`6>p>Hw6tr!5psc-wz_6e)`yKA z(Agt3lXK3?+zUCvez1Qgocv|4_2R8bEoMZ|Ur44md|J}^mgpIr`(KHZ3!MDu{J#$Q zzwvVL=iL&E7@?k3j}dRp%j87=PMmquFY(cNV_?`HiIb~p?|A!~W=1aF5{Eng3TcRU z^vi5M6)`X7{!pIG;i?F{qbiwCTg0C5!N&Z8@4V!;Xvg2ZCK-(Q3*vk?;eP~oczb+5 z;P^0~8zN>F;xen79{*K7%<7hid*Gq=Mal2iep?tgwKMBGqEI`w&?hmMy*Gb7JQ|h`{mZU7!d5$CB|6HRAt71de~l>;LHmt&83QTD-=O diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv deleted file mode 100644 index 731e31d107fda1e44cdbef3c2445017205b6b841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2492 zcmZ9MX-^bE5QbY=78Su;@j?)96fab~56}f&MdR^x)7c$yl3{i;JD~W#cgLy1J`o2M4Byo!jAdyHWSn6>Gm6kj1$XR}Xum`Jp-6&pWeox39w( zbAy2hXRm&&nqk-K@$!W=~iU_!5oP&8H|b`< zUJG{av%cXRG2CHgJr6o}@t-~i{g8B4-3>d_*L)sju}_xMPV_zaYQaaoDDG@=xoZ-y ze$AVHGs+4!_3}!voHF&y4(HEAuU{oJSR$kNI;6y7pU^Jq277Jcqzsk%Bp%(bm7VJv)A^xG4E$)PmI^|nP;@)Ch)UXvt=kcv4$(E1z zqQ5L^WJnhLT9o-vVyGnyj_f@vM0&mCQp-l~jnB0c&qK5;@!XNw`PR*n&d1EB{V&~Y zt>7|GzPPsTh^-dp%fA)HCm|oR=0Ey$HA*?cHN>I6696qRJqA+?n4W-n3ovs`%uI=y zY5Y4SOFD&jW5HpWjeOYH%|=dayrtRDu`#<1d8`lk?d_)JV=ak=jhsUP7aTC0ecNpM zz=Msv#MzyA=QG>zlrW1s^XA;KsHqmdT`&uOQ+xG|cxNzoIjB=OXG#c+eneVb`=sQk z;;9QvelTwdhC3n5w+aXQr0{O-mT=rL(AETs!BH2R@kDvKmfECl)_% za!NaA@g~IczHqS<4`vpzabC4%_*13N>OCt=ez4VdUOM?L{(^M!omBjcc6x$sLfRGW z);D|z=UmlJUi{Pr=05@3xbQXY#L;Vd%N&BS6MsWHHDD(m%zWCtZPyPqm@nMG#=D!0Q_lEme;@r`X8m%W+XUIW9;n$0h05Eyrc)f`s$oa0mMSLc;9YTZ7?QZ7-!)YikH&V_6+b(y>)*TP|(Y+Fr> Date: Thu, 27 Oct 2022 02:28:38 +0800 Subject: [PATCH 483/793] Lighting shader kind of done (still has bugs) --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 3 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 12 +++-- .../MiddleEnd/Lights/SHLightingSubSystem.h | 2 +- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 1 - TempShaderFolder/DeferredCompositeCs.glsl | 47 +++++++++++++++--- TempShaderFolder/DeferredCompositeCs.spv | Bin 1716 -> 3384 bytes TempShaderFolder/TestCubeFs.glsl | 2 +- TempShaderFolder/TestCubeVs.glsl | 2 +- TempShaderFolder/TestCubeVs.spv | Bin 2684 -> 3036 bytes 9 files changed, 54 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index dfa4e41e..58a86bcd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -219,7 +219,7 @@ namespace SHADE // deferred composite auto deferredCompositeShader = shaderModuleLibrary.GetShaderModule("DeferredCompositeCs.glsl"); - gBufferNode->AddNodeCompute(deferredCompositeShader, { "Albedo", "Scene" }); + gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Scene" }); auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors @@ -403,6 +403,7 @@ namespace SHADE // Force set the pipeline layout currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout(), SH_PIPELINE_TYPE::GRAPHICS); + currentCmdBuffer->ForceSetPipelineLayout(SHGraphicsGlobalData::GetDummyPipelineLayout(), SH_PIPELINE_TYPE::COMPUTE); // Bind all the buffers required for meshes for (auto& [buffer, bindingPoint] : MESH_DATA) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index a22fb662..6e8dd916 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -319,11 +319,12 @@ namespace SHADE { dynamicOffsets[i][0] = i * lightCountsAlignedSize; // Even if the first binding is a count, we want to account for that too - for (uint32_t j = 1; j < static_cast(dynamicOffsets.size()); ++j) + for (uint32_t j = 0; j < static_cast(SH_LIGHT_TYPE::NUM_TYPES); ++j) { auto const& typeData = perTypeData[j]; { - dynamicOffsets[i][j] = j * typeData.GetAlignmentSize(); + // +1 because 1st reserved for count + dynamicOffsets[i][j + 1] = i * typeData.GetAlignmentSize(); } } } @@ -376,6 +377,7 @@ namespace SHADE { dynamicOffsets[i].resize(NUM_LIGHT_TYPES + 1); // +1 for the count } + } /***************************************************************************/ @@ -425,7 +427,7 @@ namespace SHADE data.WriteToGPU(frameIndex); } - lightCountsBuffer->WriteToMemory(lightCountsData.data(), lightCountsData.size() * sizeof (uint32_t), 0, lightCountsAlignedSize * frameIndex); + lightCountsBuffer->WriteToMemory(lightCountsData.data(), static_cast(lightCountsData.size()) * sizeof (uint32_t), 0, lightCountsAlignedSize * frameIndex); // If any of the buffers got expanded, the descriptor set is invalid because the expanded buffer // is a new buffer. If some expansion was detected, update descriptor sets. @@ -442,8 +444,10 @@ namespace SHADE // so we do it anyway. #NoteToSelf: if at any point it affects performance, do a check before computing. ComputeDynamicOffsets(); + //cmdBuffer->ForceSetPipelineLayout() + // Bind descriptor set (We bind at an offset because the buffer holds NUM_FRAME_BUFFERS sets of data). - cmdBuffer->BindDescriptorSet(lightingDataDescSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, {dynamicOffsets[frameIndex]}); + cmdBuffer->BindDescriptorSet(lightingDataDescSet, SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, {dynamicOffsets[frameIndex]}); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h index 6c974730..efc6ddf6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -31,7 +31,7 @@ namespace SHADE uint32_t cullingMask; //! Diffuse color emitted by the light - SHVec4 diffuseColor; + alignas (16) SHVec4 diffuseColor; }; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index a5208fcf..678fc41b 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -53,7 +53,6 @@ namespace SHADE descSetGroups[i] = graphStorage->descriptorPool->Allocate(layouts, variableCounts); } - HandleResize(); } diff --git a/TempShaderFolder/DeferredCompositeCs.glsl b/TempShaderFolder/DeferredCompositeCs.glsl index 354a8954..c5e543db 100644 --- a/TempShaderFolder/DeferredCompositeCs.glsl +++ b/TempShaderFolder/DeferredCompositeCs.glsl @@ -9,22 +9,57 @@ struct DirectionalLightStruct }; layout(local_size_x = 16, local_size_y = 16) in; -layout(set = 4, binding = 0, rgba8) uniform image2D inputImage; -layout(set = 4, binding = 1, rgba8) uniform image2D targetImage; +layout(set = 4, binding = 0, rgba8) uniform image2D positions; +layout(set = 4, binding = 1, rgba8) uniform image2D normals; +layout(set = 4, binding = 2, rgba8) uniform image2D albedo; +layout(set = 4, binding = 3, rgba8) uniform image2D targetImage; -layout(set = 1, binding = 0) buffer DirectionalLightData +layout(set = 1, binding = 0) uniform LightCounts +{ + uint directionalLights; + uint pointLights; + uint spotLights; + +} lightCounts; + +layout(std430, set = 1, binding = 1) buffer DirectionalLightData { DirectionalLightStruct dLightData[]; } DirLightData; void main() -{ +{ // convenient variables ivec2 globalThread = ivec2(gl_GlobalInvocationID); - vec3 color = imageLoad (inputImage, globalThread).rgb; + // Get the diffuse color of the pixel + vec3 pixelDiffuse = imageLoad (albedo, globalThread).rgb; + + // Get position of fragment in world space + vec3 positionWorld = imageLoad (positions, globalThread).rgb; + + // normal of fragment + vec3 normalWorld = imageLoad(normals, globalThread).rgb; + normalWorld = normalize (normalWorld); + + vec3 fragColor = vec3 (0.0f); + + for (int i = 0; i < lightCounts.directionalLights; ++i) + { + // get normalized direction of light + vec3 dLightNormalized = vec3 (0.0f, 0.0f, 1.0f); + //vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); + + // Get diffuse strength + float diffuseStrength = max (0, dot (dLightNormalized, normalWorld)); + + //fragColor += vec3 (1.0f) * diffuseStrength.rrr * pixelDiffuse; + fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; + //fragColor += vec3 (dLightNormalized.rgb); + } // store result into result image - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1.0f)); + //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalWorld, 1.0f)); } \ No newline at end of file diff --git a/TempShaderFolder/DeferredCompositeCs.spv b/TempShaderFolder/DeferredCompositeCs.spv index 679dc135f5f556eb95565c51c1c9f1c2aca8821a..ffd0343f71e1704bba6f534f17d842cba15ac6cf 100644 GIT binary patch literal 3384 zcmZ9O`*Ku85XL8$O#(>>2qAbOZio^UjHuicxx_3k(S-zp;(a;UJ=q*NIcID4gi^~t z@DJa>2k{wvC`zre%I|k}I!@Fk2i{s7>xx;SSZ5l7re8A!~GVk(lO!fupgIHrZ8;^B^!IyP0Dc8(~!bAQShRn>Z< zSzlkTH*Pmu-EOmA{FKJcG|A#-JL$!(B6%7UHxa}oSu5RZhXEBug!L<`eMmJrX}%Su z4|jTT)Rw6}C(7PBX|rCs*0QI0D=LyaTdS4+F*hgKO@55iTC%;p*H?A+jk=d4qjW27 z>ypS{mEFzz37a3~y_5nK{aXn5zUR(LW_fQnN(YhTTiWOP<-TRv+r6l>nx}cM+&ALh zlT1pz;;unzlxM;<#McJn+wVyMd#z&77k<`$ z-_q#|o_>@5il6-dJpH!zQaz2%-KhUW(c@)2FVXj4S6B9MPyE3iYEco1E^Fau4bC?3 zFxL%n+E<>~;+ZQOi>TL$i?!XT6YK1wqgAIzCL?4vF=by)1T`Gj?BHgHoxoYmp; zZF@(g6IT_;e^+u$;LC#;yL-z|e{k$0o*9JwVbh=W8+pIoGd6zPpGjvfFAB$XYI^^$OV7R+k6jN{u$}yC;p`V zo{+2xMUB&v)F9sc3({F;FAYq0 zPEo|Zw&vCt=r~Z;+vPw`@?4cx+J~8(H}N% z5YEo{K)TIq)BDJ4{-*RH!R|Ja&SDlVNqVt-=&5j2U_bV*z<$ojo8nCq1Mpqe-Lju~ zvgqY6G5i)&llRMSAoqaHo8q@Ew5tc~vj^sr%du(uw2j8;Yaeae-KTH*`|Y1xFp;`^y4v9h-Q*kBQmRer7T+ z5Cgxio8c|ID!>C4^|(*+b5Hm!{~75E-X{N|5axePHZky)|8?o`fEDJi%EoW`-;loK zZSubv;igO1F;vwm>|e9ekV_KRh~fzu&N+WqUcMVX6^MbK(#wJSOyF*~Z@yQE zA$MI8pPlQzbk4P+eVdXGg$;po;Cmnt%lrFWz;Cnr!gKH}n;r4=@JOKEhM(7$o`VO! zssCBYuLN@8w=;e%eNM2LZ=@3kZ!zCWXU4z!Jl{!&Bi7~*$4swCa>q#aGt=({&i+jM zu^$U?O@aOR9t+`{VOH!vCAlR;-ky|f3w%$k>n>Z8vFG4f+z;=E&&IZZ-_FvJ&P@4E s;qG<>IF@mVbU5-D_k-t#B{!6rIXw~BPdxsb&{AFcr7r$|mF24NAM&9b*#H0l delta 778 zcmYjP%Sr=55bS*<@wK3+1S6XD{fdbi4}wT8N(?9}=*iQPgmp0{5;r#?{(z_X5>dg6 z|KQbwpCVYbnUzc^db+Bor+Ts`?jP-q}pn<+K37KGKfL* zz7tmNJip%KTyUY+_UoEV$bb~om6@F?K;fzd?Rqr~T21Ve_!ZQ%nT}KwOtsT!1Wo_c zd$@&`g8FGr8{6s|9kzKKt9BCjH{qcddb~3!MKxxPt34~%rCJtST*P_6?#t(}H*}sy z90sOEq~<+-M(X^*D8H4_3CYPXdhW6T6Okm&J-Wo}t$wBE81m znA5Ag{@7Wg>vD^gMk&jN09x2UK7qIbh&+{;Q_BIg7U!GTvvm%pI5J0P4MA-dJjb5| zc%GPvU~z;h$U69Q&Z|C@NgnB(0vKHRsv@*nkJ9^Zly0 Oh=zGF^PpcWd0L&ED1CCW3$Y z74#$dsr<((pWp0uxMEUW-Tm~_Gd(@MSEra>Y93W`#I+%+-T#wYS?V zlYF>xUPP$4U!g*PLtg2+s$0_zv$qC6B$wkQ}$p@0pBpZ^RWGJcVZ&vyrZB$iO ztKDyPI<5BI{$M=rPx5C;)KB6x>JQ^A8szbT3aq*#Q@l7GB>Tf@LQRb6T53Auh|XZu z-Q1zQ=kq9weX^Afqo*Op&UC`LC>|bisV|9lf6LqcS(FuQ&ft!n{rs|&t7%{EyPNd4 z(n;>qL1f!1RttTI(>&UZvUQ((Ar-eoqE=m=*#}XUcSjRp)qqjU{=st&wWOnL&nKK& z3B6Sfvg@J8zmKwH*vou6`Bf}9wa|CJqm84dY#s7=2mfeCb~U_*e^6}7KHn&&dvv3$ zNRlhGz_E#qCUG8*QlWE!Pn`kRCAZ^0!WdbMniX41;_-T1^yV;+DI&I?B!@BX#eA@+ z|B>{X--|LIS{G^oV~wp4+4K>dS`NndeJ)M@x6*^Dd@yFu_k6k=rO;ffe9r~h)P&D_ z9+NDW{uycF%m{Jj8lQ#FjN>zV_{{rsoSx%TA920|eEPGgn&>-=Gg*eg2SXc14j8o> zh7DGnUkUr!-qx=r#aWwTS+8orf8IMdue^Zi2O?lCok$-0atC_5_=4Y*&mvBrxg)im zRu*|pdHC38#i>g-B-{_5v+!99>I?mb175_c?j_mmLF|Td@cACWmdib@j}7_9g|k2V zz{lr(!HDwy0>L>9x>|0XMVxX%YR22E_+h% zyV5ffaQOJlHyCHWFWr!k4}V#j7&v@<<{ymvG^AG~&i#2C{uNo|HYNDiq~TIC`S^S< zV8lO{hEJS&Z%K0&n4PyF+xS~$tRZdvd?1@1T~Pi*=|-^WS@GM}EHPq5yy~`Pa|Yig z=iv8BY(YNX0(ta_I(MWw0~|g+-v}7-$E9t3rB6f2jO3c$4jym7;@p3Q@O|DCT9-a4 zVQyE2GP8WA%ssPyOBwiZh|f!(lQ5UeB6~1z=Oy59n8Vj4?7_UV2Rw6OB2cLKQP{MpXR1FR3k0f9$!}v!7jNTabNr};?u5Qzm zzAPahK5^#kFYQb0Qwe9op;qSZs)X6Mp5eozwngdd5@ruRbN7V=zV!zmj@|8sZ0>ek zFT`EHlu$E!5$lybxG9?$ccHf15-?Urzhv~~jszTGu@85(oK@N6fLqR2vcVA+vFV&O z`Q(6E&bn-Hgk?Eh-GOiGuH=q{z2VxswPbHd=r8qdO5lR8Dwpr>YYF{g7MMF~Z%E&h zz-KWd@W3puE!*;#HOsp%n>=bH4<4B1b!1x}-?-&c>n37>yrNgtsCHs delta 934 zcmZ8fO-lk%6ut8tlZt`FAj%Leis)3rYB^0SD9J(gA06accp`#}x6kq+r(p)>F^? zJdi=(1#LwpVB Date: Thu, 27 Oct 2022 02:46:38 +0800 Subject: [PATCH 484/793] Working abit more now. Error with device extension thingy. --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 4 ++-- TempShaderFolder/DeferredCompositeCs.glsl | 6 +++--- TempShaderFolder/DeferredCompositeCs.spv | Bin 3384 -> 3332 bytes TempShaderFolder/TestCubeVs.glsl | 3 ++- TempShaderFolder/TestCubeVs.spv | Bin 3036 -> 3296 bytes 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 58a86bcd..df884f57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -181,8 +181,8 @@ namespace SHADE // Initialize world render graph worldRenderGraph->Init(device, swapchain); - worldRenderGraph->AddResource("Position", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); - worldRenderGraph->AddResource("Normals", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("Position", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); + worldRenderGraph->AddResource("Normals", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); worldRenderGraph->AddResource("Albedo", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); diff --git a/TempShaderFolder/DeferredCompositeCs.glsl b/TempShaderFolder/DeferredCompositeCs.glsl index c5e543db..c0e42cea 100644 --- a/TempShaderFolder/DeferredCompositeCs.glsl +++ b/TempShaderFolder/DeferredCompositeCs.glsl @@ -40,7 +40,7 @@ void main() // normal of fragment vec3 normalWorld = imageLoad(normals, globalThread).rgb; - normalWorld = normalize (normalWorld); + //normalWorld = normalize (normalWorld); vec3 fragColor = vec3 (0.0f); @@ -59,7 +59,7 @@ void main() } // store result into result image - //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalWorld, 1.0f)); + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); + //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalWorld, 1.0f)); } \ No newline at end of file diff --git a/TempShaderFolder/DeferredCompositeCs.spv b/TempShaderFolder/DeferredCompositeCs.spv index ffd0343f71e1704bba6f534f17d842cba15ac6cf..a87b7548fb45981226d5a85fa1e4c3f4cf88dbd4 100644 GIT binary patch literal 3332 zcmZ9OZF5sq5XVoOCM|`6$fFO`lqyxJ^{GV^0Yi(S7-(uyd=9tCZF=Q4Hi7a* z_znCZeg;33qs}-sy3c-Tm*L-95W|Q%mFXlg^E~X*c8c+~}Ni<3gM}>MEYs z8(WQ~VcuC_TBX&1GKkxG@+8J@s^FLO+Ub6$=unnNF@IUPk0?hs&9ucU#ap%PQ$q#Y5mh9~850#yJ6YhEODBX@b z8G6N4rT4R8!sUnAASFRr|IHQfVZbhl_p-rWl#V=!w{UqV(|A#X+hafhDwv!s^?i{Z>**v}01HCz*x z7IKu`q^k+*_`CQ03zDDW(94RujcwGXt$Yyoy7{i+Ou4(l*GA(zs7Vg{?R-=hcFsZF zlBo-vdXr%-O#XkIdfWS{R-=0_8a|fyr1xhNLk-qCUqeIq;TqPWJQD14VdsqAHnK3+ z`@(e3zu5elYfE?@4Z3l@z87_4SJw>L^P{2{Md<9vMbSh-pOZ}O*pZ8NbclnUohaJT zv5$%Fs0QZAnIEwO3_BQk&5xX5Q=+=QIqq5=%$YpgBQH96INZ1S6!X|@z>XFCEDzte z-7QJRuPP$`C*l=ZkV4}|TCddq$0 z$)T3Ngz&eRoa`@u1L*@gJH_9&qFz0uUpk~O7Ify!_glPQE9mr`zX#Z_D<3r<7tM%% zmd^h3KCn$y$)4E%8%R9Bo|TLrZ*R(vc&9}8V!NT2@-8s)u@V+~QxB3=VOM@tGrb-ogy|ZjqTE-{#+X={w@=3;a*@ZCQLp#KC?= z96Ovknb&(FVldBX@v8x=sn2|~*F}8C>2qAbOZio^UjHuicxx_3k(S-zp;(a;UJ=q*NIcID4gi^~t z@DJa>2k{wvC`zre%I|k}I!@Fk2i{s7>xx;SSZ5l7re8A!~GVk(lO!fupgIHrZ8;^B^!IyP0Dc8(~!bAQShRn>Z< zSzlkTH*Pmu-EOmA{FKJcG|A#-JL$!(B6%7UHxa}oSu5RZhXEBug!L<`eMmJrX}%Su z4|jTT)Rw6}C(7PBX|rCs*0QI0D=LyaTdS4+F*hgKO@55iTC%;p*H?A+jk=d4qjW27 z>ypS{mEFzz37a3~y_5nK{aXn5zUR(LW_fQnN(YhTTiWOP<-TRv+r6l>nx}cM+&ALh zlT1pz;;unzlxM;<#McJn+wVyMd#z&77k<`$ z-_q#|o_>@5il6-dJpH!zQaz2%-KhUW(c@)2FVXj4S6B9MPyE3iYEco1E^Fau4bC?3 zFxL%n+E<>~;+ZQOi>TL$i?!XT6YK1wqgAIzCL?4vF=by)1T`Gj?BHgHoxoYmp; zZF@(g6IT_;e^+u$;LC#;yL-z|e{k$0o*9JwVbh=W8+pIoGd6zPpGjvfFAB$XYI^^$OV7R+k6jN{u$}yC;p`V zo{+2xMUB&v)F9sc3({F;FAYq0 zPEo|Zw&vCt=r~Z;+vPw`@?4cx+J~8(H}N% z5YEo{K)TIq)BDJ4{-*RH!R|Ja&SDlVNqVt-=&5j2U_bV*z<$ojo8nCq1Mpqe-Lju~ zvgqY6G5i)&llRMSAoqaHo8q@Ew5tc~vj^sr%du(uw2j8;Yaeae-KTH*`|Y1xFp;`^y4v9h-Q*kBQmRer7T+ z5Cgxio8c|ID!>C4^|(*+b5Hm!{~75E-X{N|5axePHZky)|8?o`fEDJi%EoW`-;loK zZSubv;igO1F;vwm>|e9ekV_KRh~fzu&N+WqUcMVX6^MbK(#wJSOyF*~Z@yQE zA$MI8pPlQzbk4P+eVdXGg$;po;Cmnt%lrFWz;Cnr!gKH}n;r4=@JOKEhM(7$o`VO! zssCBYuLN@8w=;e%eNM2LZ=@3kZ!zCWXU4z!Jl{!&Bi7~*$4swCa>q#aGt=({&i+jM zu^$U?O@aOR9t+`{VOH!vCAlR;-ky|f3w%$k>n>Z8vFG4f+z;=E&&IZZ-_FvJ&P@4E s;qG<>IF@mVbU5-D_k-t#B{!6rIXw~BPdxsb&{AFcr7r$|mF24NAM&9b*#H0l diff --git a/TempShaderFolder/TestCubeVs.glsl b/TempShaderFolder/TestCubeVs.glsl index dc8f0b98..49f107dd 100644 --- a/TempShaderFolder/TestCubeVs.glsl +++ b/TempShaderFolder/TestCubeVs.glsl @@ -44,6 +44,7 @@ void main() Out.vertPos = worldTransform * vec4(aVertexPos, 1.0f); Out.uv = aUV; - Out.normal.rgb = mat3 (transpose (inverse (worldTransform))) * aNormal.rgb; + Out.normal.rgb = mat3(transpose(inverse(worldTransform))) * aNormal.rgb; + Out.normal.rgb = normalize (Out.normal.rgb); gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/TempShaderFolder/TestCubeVs.spv b/TempShaderFolder/TestCubeVs.spv index 0dfd6cf270dcc59b66eab56b32b571b5f96caa4c..d8c3c3d072f76728073803b4f4baa5c981426184 100644 GIT binary patch delta 966 zcmZ9L&rVZO5XR@8{v*X2Nf!;2kSfvm4_7Ws3?y9`a6zOhYPGdq|4^%VO9CNb)$j;- z7OZ&$!V~x&F7zQ>n)v@quQ|a+RT#E zgX1Xb`5D)k?J35F+k=hq?r3i`PONMd>-n~8O4Coj4_vcGC05dB;7?qAX^;`N6ABfV z$;wB<{?2;5Cr?G}f4X{<_+QT72+y2W4qH?W@iwuE_MLHjcs zvX($D%NMP$GkcJ~uX1AU6mB7(nYwF2OYs|dW??4u#IXQJ{%v-?m=++oB_cUHtn3!z zyE=A+t3p#)R+`?A1^7ocWjE!Y93T#Dt zY|6t0)pMQ01l&$XZ>uH$LI|CyLkAb?y8c_WF?pG*m!oLzTAK$%x=r)vqeCTMY>5g^j4ARFMtfsdv&EAhV;U zKUBhS^{3LC;WHPZF^bU1v49gR~de2#NDi*pN@QA1u6S@}a`K{9A?XLW0$MrD)^unJ`G{@jf=2cQ<{mYm|u_n>}= zcGkR8a+&$g>{|yM)aS_Dg*(yDnmduBei59P{017fLAbN$Sl=8`y9DTu14ocK_X;2% z*4H?1057;l>NfyA Date: Thu, 27 Oct 2022 03:14:46 +0800 Subject: [PATCH 485/793] Colliders now use relative sizes --- SHADE_Application/src/Scenes/SBTestScene.cpp | 6 +- .../Inspector/SHEditorComponentView.hpp | 35 ++++-- SHADE_Engine/src/Math/Geometry/SHShape.cpp | 3 +- SHADE_Engine/src/Math/Geometry/SHShape.h | 4 +- .../Components/SHColliderComponent.cpp | 21 ++-- .../Physics/Components/SHColliderComponent.h | 3 +- SHADE_Engine/src/Physics/SHCollider.cpp | 85 ++++++++++--- SHADE_Engine/src/Physics/SHCollider.h | 55 +++++---- .../src/Physics/SHPhysicsMaterial.cpp | 104 ++++++++++++++++ SHADE_Engine/src/Physics/SHPhysicsMaterial.h | 113 ++++++++++++++++++ SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 6 +- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 6 +- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 10 +- SHADE_Engine/src/Scene/SHSceneGraph.h | 2 +- 14 files changed, 369 insertions(+), 84 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsMaterial.h diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index a06e68c2..d0d64c73 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -95,11 +95,7 @@ namespace Sandbox transform.SetWorldRotation(SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f), SHMath::GenerateRandomNumber(0.0f, 360.0f)); transform.SetWorldScale(TEST_OBJ_SCALE); - //if (const bool IS_EVEN = (y * NUM_ROWS + x) % 2; IS_EVEN) - collider.AddBoundingBox(SHVec3::One * 0.5f, SHVec3::Zero); - //else - // collider.AddBoundingSphere(0.5f, SHVec3::Zero); - + collider.AddBoundingBox(SHVec3::One, SHVec3::Zero); stressTestObjects.emplace_back(entity); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 7fa39d74..4645bf52 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -207,6 +207,10 @@ namespace SHADE { if (!component) return; + + // Get transform component for extrapolating relative sizes + auto* transformComponent = SHComponentManager::GetComponent(component->GetEID()); + const auto componentType = rttr::type::get(*component); SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); ImGui::SameLine(); @@ -221,28 +225,41 @@ namespace SHADE for (int i{}; i < size; ++i) { ImGui::PushID(i); - SHCollider& collider = component->GetCollider(i); + SHCollider* collider = &component->GetCollider(i); auto cursorPos = ImGui::GetCursorPos(); - if (collider.GetType() == SHCollider::Type::BOX) + if (collider->GetType() == SHCollider::Type::BOX) { SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - auto box = reinterpret_cast(collider.GetShape()); - SHEditorWidgets::DragVec3("Half Extents", { "X", "Y", "Z" }, [box] {return box->GetHalfExtents(); }, [box](SHVec3 const& vec) {box->SetHalfExtents(vec);}); + auto box = reinterpret_cast(collider->GetShape()); + SHEditorWidgets::DragVec3 + ( + "Half Extents", { "X", "Y", "Z" }, + [box, transformComponent] { return (transformComponent->GetWorldScale() * 2.0f) * box->GetHalfExtents(); }, + [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } - else if (collider.GetType() == SHCollider::Type::SPHERE) + else if (collider->GetType() == SHCollider::Type::SPHERE) { SHEditorWidgets::BeginPanel(std::format("{} Sphere Collider #{}", ICON_MD_CIRCLE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); - auto sphere = reinterpret_cast(collider.GetShape()); - SHEditorWidgets::DragFloat("Radius", [sphere] {return sphere->GetRadius(); }, [sphere](float const& value) {sphere->SetRadius(value);}); + auto sphere = reinterpret_cast(collider->GetShape()); + SHEditorWidgets::DragFloat + ( + "Radius", + [sphere, transformComponent] + { + const SHVec3& TF_WORLD_SCALE = transformComponent->GetWorldScale(); + const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); + return sphere->GetRadius() / MAX_SCALE; + }, + [collider](float const& value) { collider->SetBoundingSphere(value);}); } - else if (collider.GetType() == SHCollider::Type::CAPSULE) + else if (collider->GetType() == SHCollider::Type::CAPSULE) { } { SHEditorWidgets::BeginPanel("Offset", { ImGui::GetContentRegionAvail().x, 30.0f }); - SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider.GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider.SetPositionOffset(vec); }); + SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider->GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider->SetPositionOffset(vec); }); SHEditorWidgets::EndPanel(); } if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.cpp b/SHADE_Engine/src/Math/Geometry/SHShape.cpp index 3fc5775d..2f869029 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.cpp +++ b/SHADE_Engine/src/Math/Geometry/SHShape.cpp @@ -27,10 +27,9 @@ namespace SHADE /* Getter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - SHShape::Type SHShape::GetType() const + SHShape::Type SHShape::GetType() const noexcept { return type; } - } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Geometry/SHShape.h b/SHADE_Engine/src/Math/Geometry/SHShape.h index 18f54fe6..62198897 100644 --- a/SHADE_Engine/src/Math/Geometry/SHShape.h +++ b/SHADE_Engine/src/Math/Geometry/SHShape.h @@ -63,7 +63,7 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] Type GetType() const; + [[nodiscard]] Type GetType () const noexcept; /*---------------------------------------------------------------------------------*/ /* Function Members */ @@ -77,6 +77,6 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - Type type; + Type type; }; } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp index 75a00491..fb999847 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.cpp @@ -58,7 +58,7 @@ namespace SHADE if (index < 0 || static_cast(index) >= colliders.size()) throw std::invalid_argument("Out-of-range access!"); - return colliders[index].first; + return colliders[index]; } /*-----------------------------------------------------------------------------------*/ @@ -85,13 +85,11 @@ namespace SHADE static constexpr auto TYPE = SHCollider::Type::BOX; - auto boxPair = std::make_pair(SHCollider{ TYPE }, true); - auto& collider = colliders.emplace_back(boxPair).first; - - const auto* tf = SHComponentManager::GetComponent(GetEID()); + auto& collider = colliders.emplace_back(SHCollider{ GetEID(), TYPE }); + collider.entityID = GetEID(); collider.SetPositionOffset(posOffset); - collider.SetAsBoundingBox(tf->GetWorldScale() * halfExtents); + collider.SetBoundingBox(halfExtents); // Notify Physics System system->AddCollisionShape(GetEID(), &collider); @@ -109,16 +107,11 @@ namespace SHADE static constexpr auto TYPE = SHCollider::Type::SPHERE; - auto spherePair = std::make_pair(SHCollider{ TYPE }, true); - auto& collider = colliders.emplace_back(spherePair).first; - - const auto* tf = SHComponentManager::GetComponent(GetEID()); + auto& collider = colliders.emplace_back(SHCollider{ GetEID(), TYPE }); + collider.entityID = GetEID(); collider.SetPositionOffset(posOffset); - - const SHVec3 TF_WORLD_SCALE = tf->GetWorldScale(); - const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); - collider.SetAsBoundingSphere(MAX_SCALE * 0.5f * radius); + collider.SetBoundingSphere(radius); // Notify Physics System system->AddCollisionShape(GetEID(), &collider); diff --git a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h index 4ecd0e93..af726b51 100644 --- a/SHADE_Engine/src/Physics/Components/SHColliderComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHColliderComponent.h @@ -43,8 +43,7 @@ namespace SHADE /* Type Definitions */ /*---------------------------------------------------------------------------------*/ - using ColliderDirtyPair = std::pair; - using Colliders = std::vector; + using Colliders = std::vector; public: diff --git a/SHADE_Engine/src/Physics/SHCollider.cpp b/SHADE_Engine/src/Physics/SHCollider.cpp index f5899cfc..6e929a17 100644 --- a/SHADE_Engine/src/Physics/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/SHCollider.cpp @@ -15,6 +15,8 @@ // Project Headers #include "Math/Geometry/SHBoundingBox.h" #include "Math/Geometry/SHBoundingSphere.h" +#include "Math/Transform/SHTransformComponent.h" +#include "Math/SHMathHelpers.h" namespace SHADE { @@ -22,22 +24,24 @@ namespace SHADE /* Constructors & Destructor Definitions */ /*-----------------------------------------------------------------------------------*/ - SHCollider::SHCollider(Type colliderType) + SHCollider::SHCollider(EntityID eid, Type colliderType, const SHPhysicsMaterial& physicsMaterial) : type { colliderType } + , entityID { eid } , isTrigger { false } , dirty { true } , shape { nullptr } + , material { physicsMaterial } { switch (type) { case Type::BOX: { - SetAsBoundingBox(SHVec3::One); + shape = new SHBoundingBox{ SHVec3::Zero, SHVec3::One }; break; } case Type::SPHERE: { - SetAsBoundingSphere(1.0f); + shape = new SHBoundingSphere{ SHVec3::Zero, 0.5f }; break; } default: break; @@ -46,17 +50,21 @@ namespace SHADE SHCollider::SHCollider(const SHCollider& rhs) noexcept : type { rhs.type} + , entityID { rhs.entityID } , isTrigger { rhs.isTrigger } , dirty { true } , shape { rhs.shape } + , material { rhs.material } , positionOffset { rhs.positionOffset } {} SHCollider::SHCollider(SHCollider&& rhs) noexcept : type { rhs.type} + , entityID { rhs.entityID } , isTrigger { rhs.isTrigger } , dirty { true } , shape { rhs.shape } + , material { rhs.material } , positionOffset { rhs.positionOffset } {} @@ -75,9 +83,11 @@ namespace SHADE return *this; type = rhs.type; + entityID = rhs.entityID; isTrigger = rhs.isTrigger; dirty = true; shape = rhs.shape; + material = rhs.material; positionOffset = rhs.positionOffset; return *this; @@ -86,9 +96,11 @@ namespace SHADE SHCollider& SHCollider::operator=(SHCollider&& rhs) noexcept { type = rhs.type; + entityID = rhs.entityID; isTrigger = rhs.isTrigger; dirty = true; shape = rhs.shape; + material = rhs.material; positionOffset = rhs.positionOffset; return *this; @@ -115,19 +127,16 @@ namespace SHADE float SHCollider::GetFriction() const noexcept { - // TODO(Diren): Fix after implementing materials - return 0.0f; + return material.GetFriction(); } float SHCollider::GetBounciness() const noexcept { - // TODO(Diren): Fix after implementing materials - return 0.0f; + return material.GetBounciness(); } float SHCollider::GetDensity() const noexcept { - // TODO(Diren): Fix after implementing materials - return 0.0f; + return material.GetDensity(); } const SHVec3& SHCollider::GetPositionOffset() const noexcept @@ -145,22 +154,60 @@ namespace SHADE /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ - void SHCollider::SetAsBoundingBox(const SHVec3& halfExtents) + void SHCollider::SetBoundingBox(const SHVec3& halfExtents) { dirty = true; - type = Type::BOX; - delete shape; - shape = new SHBoundingBox{ positionOffset, halfExtents }; + // Set the half extents relative to transform + SHVec3 worldHalfExtents = halfExtents; + + const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + if (transformComponent != nullptr) + worldHalfExtents *= (transformComponent->GetWorldScale() * 0.5f); + + if (type == Type::BOX) + { + auto* box = reinterpret_cast(shape); + box->SetHalfExtents(worldHalfExtents); + } + else + { + type = Type::BOX; + + delete shape; + shape = new SHBoundingBox{ positionOffset, worldHalfExtents }; + } } - void SHCollider::SetAsBoundingSphere(float radius) + void SHCollider::SetBoundingSphere(float radius) { dirty = true; - type = Type::SPHERE; - delete shape; - shape = new SHBoundingSphere{ positionOffset, radius }; + // Set the radius relative to transform + float worldRadius = radius; + + const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + if (transformComponent != nullptr) + { + const SHVec3 TF_WORLD_SCALE = transformComponent->GetWorldScale(); + const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); + + worldRadius *= MAX_SCALE; + } + + if (type == Type::SPHERE) + { + auto* sphere = reinterpret_cast(shape); + sphere->SetRadius(worldRadius); + } + else + { + type = Type::SPHERE; + + delete shape; + shape = new SHBoundingSphere{ positionOffset, worldRadius }; + } + } void SHCollider::SetIsTrigger(bool trigger) noexcept @@ -172,16 +219,19 @@ namespace SHADE void SHCollider::SetFriction(float friction) noexcept { dirty = true; + material.SetFriction(friction); } void SHCollider::SetBounciness(float bounciness) noexcept { dirty = true; + material.SetBounciness(bounciness); } void SHCollider::SetDensity(float density) noexcept { dirty = true; + material.SetDensity(density); } void SHCollider::SetPositionOffset(const SHVec3& posOffset) noexcept @@ -205,5 +255,4 @@ RTTR_REGISTRATION registration::class_("Collider") .property("Position Offset", &SHCollider::GetPositionOffset, &SHCollider::SetPositionOffset); - // TODO(Diren): Add Physics Materials } \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h index 0e024f09..4fa483c9 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -13,8 +13,10 @@ #include // Project Headers +#include "ECS_Base/Entity/SHEntity.h" #include "Math/Geometry/SHShape.h" #include "Math/SHQuaternion.h" +#include "SHPhysicsMaterial.h" namespace SHADE { @@ -24,6 +26,15 @@ namespace SHADE class SH_API SHCollider { + private: + + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHColliderComponent; + friend class SHPhysicsObject; + public: /*---------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -40,7 +51,7 @@ namespace SHADE /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ - SHCollider (Type colliderType = Type::BOX); + SHCollider (EntityID eid, Type colliderType = Type::BOX, const SHPhysicsMaterial& physicsMaterial = SHPhysicsMaterial::DEFAULT); SHCollider (const SHCollider& rhs) noexcept; SHCollider (SHCollider&& rhs) noexcept; @@ -57,31 +68,33 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] bool HasChanged () const noexcept; + [[nodiscard]] bool HasChanged () const noexcept; - [[nodiscard]] bool IsTrigger () const noexcept; + [[nodiscard]] bool IsTrigger () const noexcept; - [[nodiscard]] Type GetType () const noexcept; + [[nodiscard]] Type GetType () const noexcept; - [[nodiscard]] float GetFriction () const noexcept; - [[nodiscard]] float GetBounciness () const noexcept; - [[nodiscard]] float GetDensity () const noexcept; + [[nodiscard]] float GetFriction () const noexcept; + [[nodiscard]] float GetBounciness () const noexcept; + [[nodiscard]] float GetDensity () const noexcept; + [[nodiscard]] const SHPhysicsMaterial& GetMaterial () const noexcept; - [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; + [[nodiscard]] const SHVec3& GetPositionOffset () const noexcept; - [[nodiscard]] SHShape* GetShape () noexcept; + [[nodiscard]] SHShape* GetShape () noexcept; /*---------------------------------------------------------------------------------*/ /* Setter Functions */ /*---------------------------------------------------------------------------------*/ - void SetAsBoundingBox (const SHVec3& halfExtents); - void SetAsBoundingSphere (float radius); + void SetBoundingBox (const SHVec3& halfExtents); + void SetBoundingSphere (float radius); - void SetIsTrigger (bool isTrigger) noexcept; - void SetFriction (float friction) noexcept; - void SetBounciness (float bounciness) noexcept; - void SetDensity (float density) noexcept; + void SetIsTrigger (bool isTrigger) noexcept; + void SetFriction (float friction) noexcept; + void SetBounciness (float bounciness) noexcept; + void SetDensity (float density) noexcept; + void SetMaterial (const SHPhysicsMaterial& newMaterial) noexcept; void SetPositionOffset (const SHVec3& positionOffset) noexcept; @@ -90,11 +103,13 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - Type type; - bool isTrigger; - bool dirty; - SHShape* shape; - SHVec3 positionOffset; + Type type; + EntityID entityID; // The entity this collider belongs to + bool isTrigger; + bool dirty; + SHShape* shape; + SHPhysicsMaterial material; + SHVec3 positionOffset; RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp b/SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp new file mode 100644 index 00000000..677e448f --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsMaterial.cpp @@ -0,0 +1,104 @@ +/**************************************************************************************** + * \file SHPhysicsMaterial.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for a Physics Material. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsMaterial.h" +// Project Headers +#include "Math/SHMathHelpers.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Data Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + const SHPhysicsMaterial SHPhysicsMaterial::DEFAULT { 0.4f, 0.0f, 1.0f }; + + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHPhysicsMaterial::SHPhysicsMaterial(float _friction, float _bounciness, float _density) noexcept + : friction { std::clamp(_friction, 0.0f, 1.0f) } + , bounciness{ std::clamp(_bounciness, 0.0f, 1.0f) } + , density { std::fabs(_density) } + {} + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHPhysicsMaterial::operator==(const SHPhysicsMaterial& rhs) const noexcept + { + return SHMath::CompareFloat(friction, rhs.friction) + && SHMath::CompareFloat(bounciness, rhs.bounciness) + && SHMath::CompareFloat(density, rhs.density); + } + + bool SHPhysicsMaterial::operator!=(const SHPhysicsMaterial& rhs) const noexcept + { + return !SHMath::CompareFloat(friction, rhs.friction) + || !SHMath::CompareFloat(bounciness, rhs.bounciness) + || !SHMath::CompareFloat(density, rhs.density); + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + float SHPhysicsMaterial::GetFriction() const noexcept + { + return friction; + } + + float SHPhysicsMaterial::GetBounciness() const noexcept + { + return bounciness; + } + + float SHPhysicsMaterial::GetDensity() const noexcept + { + return density; + } + + /*-----------------------------------------------------------------------------------*/ + /* Setter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + void SHPhysicsMaterial::SetFriction(float newFriction) noexcept + { + if (newFriction < 0.0f || newFriction > 1.0f) + { + SHLOG_WARNING("Clamping friction of Physics Material between [0,1].") + } + friction = std::clamp(newFriction, 0.0f, 1.0f); + } + + void SHPhysicsMaterial::SetBounciness(float newBounciness) noexcept + { + if (newBounciness < 0.0f || newBounciness > 1.0f) + { + SHLOG_WARNING("Clamping bounciness of Physics Material between [0,1].") + } + bounciness = std::clamp(newBounciness, 0.0f, 1.0f); + } + + void SHPhysicsMaterial::SetDensity(float newDensity) noexcept + { + if (newDensity < 0.0f) + { + SHLOG_WARNING("Setting negative density of Physics Material to positive.") + } + density = std::fabs(newDensity); + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsMaterial.h b/SHADE_Engine/src/Physics/SHPhysicsMaterial.h new file mode 100644 index 00000000..b3db1655 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsMaterial.h @@ -0,0 +1,113 @@ +/**************************************************************************************** + * \file SHPhysicsMaterial.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for a Physics Material. + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "SH_API.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + class SH_API SHPhysicsMaterial + { + public: + /*---------------------------------------------------------------------------------*/ + /* Static Data Members */ + /*---------------------------------------------------------------------------------*/ + + static const SHPhysicsMaterial DEFAULT; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsMaterial (const SHPhysicsMaterial&) noexcept = default; + SHPhysicsMaterial (SHPhysicsMaterial&&) noexcept = default; + ~SHPhysicsMaterial() = default; + + /** + * @brief Default constructor for a physics material. + * @param friction The friction of the material. Clamped between [0,1]. Defaults to 0.4. + * @param bounciness The bounciness of the material. Clamped between [0,1]. + * @param density The mass density of the material. Always made positive. + */ + SHPhysicsMaterial (float friction = 0.4f, float bounciness = 0.0f, float density = 1.0f) noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + SHPhysicsMaterial& operator= (const SHPhysicsMaterial&) noexcept = default; + SHPhysicsMaterial& operator= (SHPhysicsMaterial&&) noexcept = default; + + bool operator==(const SHPhysicsMaterial& rhs) const noexcept; + bool operator!=(const SHPhysicsMaterial& rhs) const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] float GetFriction () const noexcept; + [[nodiscard]] float GetBounciness () const noexcept; + [[nodiscard]] float GetDensity () const noexcept; + + /*---------------------------------------------------------------------------------*/ + /* Setter Functions */ + /*---------------------------------------------------------------------------------*/ + + /** + * @brief Sets the friction coefficient of the physics material. + * @param newFriction The friction value to set. Clamped between [0,1]. + */ + void SetFriction (float newFriction) noexcept; + + /** + * @brief Sets the bounciness factor of the physics material. + * @param newBounciness The bounciness value to set. Clamped between [0,1]. + */ + void SetBounciness (float newBounciness) noexcept; + + /** + * @brief Sets the mass density of the physics material. + * @param newDensity The density value to set. Always made positive. + */ + void SetDensity (float newDensity) noexcept; + + private: + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + /** + * @brief The friction coefficient of the physics object., clamped between [0,1].
    + * 0 means the object will never experience friction. + * 1 means the friction force against the object is equal to the applied force. + */ + float friction; + + /** + * @brief The bounciness factor of the physics object., clamped between [0,1].
    + * 0 means the object will never bounce. + * 1 means the object never loses energy on a bounce. + */ + float bounciness; + + /** + * @brief The density of the collider that determines the mass of the collision shape + * if it is automatically computed. Must be a positive number. + */ + float density; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 986ce503..4d4d8cd7 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -261,9 +261,9 @@ namespace SHADE void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept { int index = 0; - for (auto& [collider, dirty] : c->colliders) + for (auto& collider : c->colliders) { - if (!dirty) + if (!collider.dirty) continue; // Update offsets @@ -293,7 +293,7 @@ namespace SHADE default: break; } - dirty = false; + collider.dirty = false; ++index; } } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 1c6e79d7..c3cd5ebc 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -517,7 +517,7 @@ namespace SHADE // Add collision shapes back into the body if (colliderComponent != nullptr) { - for (auto& collider : colliderComponent->colliders | std::views::keys) + for (auto& collider : colliderComponent->colliders) physicsObject->AddCollider(&collider); } } @@ -538,7 +538,7 @@ namespace SHADE } // Add Collision Shapes - for (auto& collider : colliderComponent->colliders | std::views::keys) + for (auto& collider : colliderComponent->colliders) physicsObject->AddCollider(&collider); } } @@ -576,7 +576,7 @@ namespace SHADE rp3d::Transform{ colliderComponent->position, colliderComponent->orientation } ); - for (auto& collider : colliderComponent->colliders | std::views::keys) + for (auto& collider : colliderComponent->colliders) physicsObject->AddCollider(&collider); } diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 950fd6a0..df46b3fb 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -582,9 +582,9 @@ namespace SHADE ReleaseNode(node); } - void SHSceneGraph::Traverse (const UnaryFunction& predicate) const + void SHSceneGraph::Traverse (const UnaryFunction& function) const { - TraverseAndInvokePredicate(root, predicate); + TraverseAndInvokeFunction(root, function); } /*-----------------------------------------------------------------------------------*/ @@ -621,12 +621,12 @@ namespace SHADE delete node; } - void SHSceneGraph::TraverseAndInvokePredicate(const SHSceneNode* node, const UnaryFunction& predicate) + void SHSceneGraph::TraverseAndInvokeFunction(const SHSceneNode* node, const UnaryFunction& function) { for (auto* child : node->children) { - predicate(child); - TraverseAndInvokePredicate(child, predicate); + function(child); + TraverseAndInvokeFunction(child, function); } } diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.h b/SHADE_Engine/src/Scene/SHSceneGraph.h index b52fd1ff..45ab48e5 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.h +++ b/SHADE_Engine/src/Scene/SHSceneGraph.h @@ -142,7 +142,7 @@ namespace SHADE bool RemoveNode (SHSceneNode* nodeToRemove) noexcept; void Reset () noexcept; - void Traverse (const UnaryFunction& predicate) const; + void Traverse (const UnaryFunction& function) const; private: /*---------------------------------------------------------------------------------*/ From 75fd02c08a35e0d4f3145d671a9c7c00634ca86b Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 27 Oct 2022 03:35:32 +0800 Subject: [PATCH 486/793] small change to where forces are cleared (1 less comparison) --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 26 +++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index c3cd5ebc..44142aaf 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -246,21 +246,6 @@ namespace SHADE if (physicsObject.rp3dBody == nullptr) continue; - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); - - // Clear all forces and velocities if editor is not in play - if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) - { - if (rigidBodyComponent) - { - auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - rp3dRigidBody->setLinearVelocity(SHVec3::Zero); - rp3dRigidBody->setAngularVelocity(SHVec3::Zero); - } - } - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); if (transformComponent && transformComponent->HasChanged()) { @@ -270,10 +255,21 @@ namespace SHADE physicsObject.SetPosition(WORLD_POS); physicsObject.SetOrientation(WORLD_ROT); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); if (rigidBodyComponent) { rigidBodyComponent->position = WORLD_POS; rigidBodyComponent->orientation = WORLD_ROT; + + // Clear all forces and velocities if editor is stopped + if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) + { + auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + rp3dRigidBody->setLinearVelocity(SHVec3::Zero); + rp3dRigidBody->setAngularVelocity(SHVec3::Zero); + } } auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); From a854a50fb275eaad32248701ba5404cf78dcb26c Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Thu, 27 Oct 2022 09:22:42 +0800 Subject: [PATCH 487/793] Fix error from shader graph preventing compilation on main --- SHADE_Engine/src/Scene/SHSceneGraph.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Scene/SHSceneGraph.cpp b/SHADE_Engine/src/Scene/SHSceneGraph.cpp index 950fd6a0..574747ec 100644 --- a/SHADE_Engine/src/Scene/SHSceneGraph.cpp +++ b/SHADE_Engine/src/Scene/SHSceneGraph.cpp @@ -584,7 +584,7 @@ namespace SHADE void SHSceneGraph::Traverse (const UnaryFunction& predicate) const { - TraverseAndInvokePredicate(root, predicate); + TraverseAndInvokeFunction(root, predicate); } /*-----------------------------------------------------------------------------------*/ @@ -621,12 +621,12 @@ namespace SHADE delete node; } - void SHSceneGraph::TraverseAndInvokePredicate(const SHSceneNode* node, const UnaryFunction& predicate) + void SHSceneGraph::TraverseAndInvokeFunction (const SHSceneNode* node, const UnaryFunction& function) { for (auto* child : node->children) { - predicate(child); - TraverseAndInvokePredicate(child, predicate); + function(child); + TraverseAndInvokeFunction(child, function); } } From 012070ba6d3e5724816095c33a90c36ec0617c7b Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 27 Oct 2022 09:26:49 +0800 Subject: [PATCH 488/793] Added RTTR registration --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 67 +++++++++++++++++-- SHADE_Engine/src/Camera/SHCameraComponent.h | 15 ++++- .../Inspector/SHEditorInspector.cpp | 7 ++ 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index f2cb4ead..402175dd 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -146,6 +146,17 @@ namespace SHADE dirtyProj = true; } + void SHCameraComponent::SetIsPerspective(bool persp) noexcept + { + this->perspProj = persp; + dirtyProj = true; + } + + SHVec3 const& SHCameraComponent::GetPosition() const noexcept + { + return position; + } + float SHCameraComponent::GetYaw() const noexcept { return yaw; @@ -159,6 +170,27 @@ namespace SHADE { return roll; } + + float SHCameraComponent::GetWidth() const noexcept + { + return width; + } + + float SHCameraComponent::GetHeight() const noexcept + { + return height; + } + + float SHCameraComponent::GetNear() const noexcept + { + return zNear; + } + + float SHCameraComponent::GetFar() const noexcept + { + return zFar; + } + float SHCameraComponent::GetAspectRatio() const noexcept { return width/height; @@ -169,6 +201,11 @@ namespace SHADE return fov; } + bool SHCameraComponent::GetIsPerspective() const noexcept + { + return perspProj; + } + const SHMatrix& SHCameraComponent::GetViewMatrix() const noexcept { return viewMatrix; @@ -179,12 +216,32 @@ namespace SHADE return projMatrix; } - void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept - { - auto system = SHSystemManager::GetSystem(); - system->GetDirector(directorCameraIndex)->SetMainCamera(*this); - } + //void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept + //{ + // auto system = SHSystemManager::GetSystem(); + // system->GetDirector(directorCameraIndex)->SetMainCamera(*this); + //} +}//namespace SHADE + + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + + registration::class_("Camera Component") + .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) + .property("Pitch", &SHCameraComponent::GetPitch, &SHCameraComponent::SetPitch) + .property("Yaw", &SHCameraComponent::GetYaw, &SHCameraComponent::SetYaw) + .property("Roll", &SHCameraComponent::GetRoll, &SHCameraComponent::SetRoll) + .property("Width", &SHCameraComponent::GetWidth, &SHCameraComponent::SetWidth) + .property("Height", &SHCameraComponent::GetHeight, &SHCameraComponent::SetHeight) + .property("Near", &SHCameraComponent::GetNear, &SHCameraComponent::SetNear) + .property("Far", &SHCameraComponent::GetFar, &SHCameraComponent::SetFar) + .property("Perspective", &SHCameraComponent::GetIsPerspective, &SHCameraComponent::SetIsPerspective); + + } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index 1149b1e1..19ce4232 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "ECS_Base/Components/SHComponent.h" #include "Math/Vector/SHVec3.h" #include "Math/SHMatrix.h" @@ -57,20 +59,27 @@ namespace SHADE void SetNear(float znear) noexcept; void SetFar(float zfar) noexcept; void SetFOV(float fov) noexcept; + void SetIsPerspective(bool persp) noexcept; - + SHVec3 const& GetPosition() const noexcept; float GetYaw() const noexcept; float GetPitch() const noexcept; float GetRoll() const noexcept; + float GetWidth() const noexcept; + float GetHeight() const noexcept; + float GetNear() const noexcept; + float GetFar() const noexcept; + float GetAspectRatio() const noexcept; float GetFOV() const noexcept; + bool GetIsPerspective() const noexcept; const SHMatrix& GetViewMatrix() const noexcept; const SHMatrix& GetProjMatrix() const noexcept; - void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; + //void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; float movementSpeed; @@ -80,7 +89,7 @@ namespace SHADE - + RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index d9b235e5..42b516aa 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -20,6 +20,7 @@ #include "AudioSystem/SHAudioSystem.h" #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" +#include "Camera/SHCameraComponent.h" namespace SHADE { @@ -99,6 +100,10 @@ namespace SHADE { DrawComponent(rigidbodyComponent); } + if (auto cameraComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(cameraComponent); + } ImGui::Separator(); // Render Scripts SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -107,12 +112,14 @@ namespace SHADE if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { DrawAddComponentButton(eid); + DrawAddComponentButton(eid); // Components that require Transforms DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); + ImGui::EndMenu(); } From 2108d9e1f6a2e1758b6c0b36b73ede9709731d6d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 27 Oct 2022 10:12:30 +0800 Subject: [PATCH 489/793] Added triple buffering to SHDebugDrawSystem --- .../src/Application/SBApplication.cpp | 4 ++ SHADE_Application/src/Scenes/SBTestScene.cpp | 1 + .../MiddleEnd/Interface/SHDebugDrawSystem.cpp | 58 ++++++++++++++---- .../MiddleEnd/Interface/SHDebugDrawSystem.h | 29 ++++++--- .../MiddleEnd/Interface/SHDebugDrawSystem.hpp | 7 +++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 32 +++++++++- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 +- .../src/Graphics/Pipeline/SHVkPipeline.h | 3 +- TempShaderFolder/DebugDrawVs.glsl | 4 +- TempShaderFolder/DebugDrawVs.spv | Bin 1488 -> 1504 bytes 10 files changed, 114 insertions(+), 26 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 9b230296..29189d63 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -149,6 +149,10 @@ namespace Sandbox { SHFrameRateController::UpdateFRC(); SHInputManager::UpdateInput(SHFrameRateController::GetRawDeltaTime()); + + auto debugDraw = SHSystemManager::GetSystem(); + //debugDraw->DrawLine(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), SHVec3(-5.0f, 0.0f, 0.0f), SHVec3(5.0f, 0.0f, 0.0f)); + debugDraw->DrawCube(SHVec4(1.0f, 1.0f, 1.0f, 1.0f), {}, SHVec3(1.0f, 1.0f, 1.0f)); SHSceneManager::UpdateSceneManager(); #ifdef SHEDITOR if(editor->editorState == SHEditor::State::PLAY) diff --git a/SHADE_Application/src/Scenes/SBTestScene.cpp b/SHADE_Application/src/Scenes/SBTestScene.cpp index a06e68c2..4172dffd 100644 --- a/SHADE_Application/src/Scenes/SBTestScene.cpp +++ b/SHADE_Application/src/Scenes/SBTestScene.cpp @@ -17,6 +17,7 @@ #include "Assets/SHAssetManager.h" #include "Camera/SHCameraComponent.h" #include "Resource/SHResourceManager.h" +#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h" using namespace SHADE; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp index 7e82fb21..444e9b57 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.cpp @@ -11,6 +11,9 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #include "SHpch.h" #include "SHDebugDrawSystem.h" +// STL Includes +#include +// Project Includes #include "../Meshes/SHMeshData.h" #include "../Meshes/SHPrimitiveGenerator.h" #include "ECS_Base/Managers/SHSystemManager.h" @@ -26,25 +29,30 @@ namespace SHADE /* DrawRoutine */ /*---------------------------------------------------------------------------------*/ SHDebugDrawSystem::ProcessPointsRoutine::ProcessPointsRoutine() - : SHSystemRoutine("Debug Draw") - {} + : SHSystemRoutine("Debug Draw", true) + { + SystemFamily::GetID(); + } void SHDebugDrawSystem::ProcessPointsRoutine::Execute(double dt) noexcept { auto gfxSys = SHSystemManager::GetSystem(); - if (gfxSys) + if (!gfxSys) { SHLOG_WARNING("[DebugDraw] Attempted to do debug draw without a graphics system."); return; } + // Get current frame index + const uint32_t FRAME_IDX = gfxSys->GetCurrentFrameIndex(); + // Create the buffer if it doesn't exist or just update it SHDebugDrawSystem* system = static_cast(GetSystem()); - system->numPoints = system->points.size(); + system->numPoints[FRAME_IDX] = system->points.size(); const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size(); if (DATA_SIZE > 0) { - SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer); + system->vertexBuffers[FRAME_IDX]->WriteToMemory(system->points.data(), DATA_SIZE, 0, 0); } // Reset for next frame @@ -61,23 +69,45 @@ namespace SHADE auto const& RENDERERS = GFX_SYSTEM->GetDefaultViewport()->GetRenderers(); auto renderGraph = RENDERERS[SHGraphicsConstants::RenderGraphIndices::WORLD]->GetRenderGraph(); auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw"); - subPass->AddExteriorDrawCalls([&](Handle& cmdBuffer) + subPass->AddExteriorDrawCalls([this, GFX_SYSTEM](Handle& cmdBuffer) { + // Get Current frame index + const uint32_t FRAME_IDX = GFX_SYSTEM->GetCurrentFrameIndex(); + // Don't draw if no points - if (numPoints <= 0) + if (numPoints[FRAME_IDX] <= 0) return; cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline()); - cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0); - cmdBuffer->DrawArrays(static_cast(points.size()), 1, 0, 0); + cmdBuffer->BindVertexBuffer(0, vertexBuffers[FRAME_IDX], 0); + cmdBuffer->DrawArrays(numPoints[FRAME_IDX], 1, 0, 0); }); + + // Reset trackers + std::fill_n(numPoints.begin(), numPoints.size(), 0); + + // Allocate buffers + static constexpr uint32_t BUFFER_SIZE = MAX_POINTS * sizeof(PointVertex); + for (Handle& bufHandle : vertexBuffers) + { + bufHandle = GFX_SYSTEM->GetDevice()->CreateBuffer + ( + BUFFER_SIZE, + nullptr, + 0, + vk::BufferUsageFlagBits::eVertexBuffer, + VmaMemoryUsage::VMA_MEMORY_USAGE_AUTO, + VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT + ); + } } void SHDebugDrawSystem::Exit() { - if (vertexBuffer) + for (auto vertexBuffer : vertexBuffers) { - vertexBuffer.Free(); + if (vertexBuffer) + vertexBuffer.Free(); } } @@ -86,6 +116,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHDebugDrawSystem::DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt) { + if (points.size() > MAX_POINTS) + { + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; + } + points.emplace_back(PointVertex{ startPt, color }); points.emplace_back(PointVertex{ endPt, color }); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h index cc3e728a..2c6a6600 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h @@ -22,6 +22,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/SHHandle.h" #include "Graphics/Buffers/SHVkBuffer.h" +#include "SHGraphicsConstants.h" namespace SHADE { @@ -34,7 +35,7 @@ namespace SHADE Manages the Debug Draw system. */ /***********************************************************************************/ - class SH_API SHDebugDrawSystem : public SHSystem + class SH_API SHDebugDrawSystem final : public SHSystem { public: /*-------------------------------------------------------------------------------*/ @@ -66,22 +67,30 @@ namespace SHADE void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius); private: - /*-------------------------------------------------------------------------------*/ - /* Type Definitions */ - /*-------------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ struct SH_API PointVertex { - SHVec3 Position; + SHVec4 Position; SHVec4 Color; }; - /*-------------------------------------------------------------------------------*/ - /* Data Members */ - /*-------------------------------------------------------------------------------*/ + using TripleBuffer = std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS>; + using TripleUInt = std::array; + + /*---------------------------------------------------------------------------------*/ + /* Constants */ + /*---------------------------------------------------------------------------------*/ + static constexpr uint32_t MAX_POINTS = 100'000; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ // CPU Buffers std::vector points; // GPU Buffers - Handle vertexBuffer; - uint32_t numPoints = 0; + TripleBuffer vertexBuffers; + TripleUInt numPoints; // Cached Points for polygon drawing std::vector spherePoints; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp index 90c645e3..a913ecfd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHDebugDrawSystem.hpp @@ -24,6 +24,13 @@ namespace SHADE // Ensure dereferenced type is SHVec3 static_assert(std::is_same_v>, "Parameters to DrawPoly must be SHVec3."); + // Check if points exceeded max + if (points.size() > MAX_POINTS) + { + SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements."); + return; + } + const size_t POINTS_COUNT = pointListEnd - pointListBegin; // Invalid polygon if (POINTS_COUNT < 2) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6bf52736..e6c1cd27 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -37,6 +37,7 @@ of DigiPen Institute of Technology is prohibited. #include "Assets/Asset Types/SHTextureAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" +#include "Graphics/SHVkUtil.h" namespace SHADE { @@ -239,12 +240,41 @@ namespace SHADE .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() } ); - debugDrawPipeline = resourceManager.Create(device, debugDrawPipelineLayout); + debugDrawPipeline = resourceManager.Create(device, debugDrawPipelineLayout, nullptr, debugDrawNode->GetRenderpass(), debugDrawSubpass); debugDrawPipeline->GetPipelineState().SetRasterizationState(SHRasterizationState { .polygonMode = vk::PolygonMode::eLine, .cull_mode = vk::CullModeFlagBits::eNone }); + + SHVertexInputState debugDrawVertexInputState; + debugDrawVertexInputState.AddBinding(false, true, { SHVertexAttribute(SHAttribFormat::FLOAT_4D), SHVertexAttribute(SHAttribFormat::FLOAT_4D) }); + debugDrawPipeline->GetPipelineState().SetVertexInputState(debugDrawVertexInputState); + SHColorBlendState colorBlendState{}; + colorBlendState.logic_op_enable = VK_FALSE; + colorBlendState.logic_op = vk::LogicOp::eCopy; + + auto const& subpassColorReferences = debugDrawSubpass->GetColorAttachmentReferences(); + colorBlendState.attachments.reserve(subpassColorReferences.size()); + + for (auto& att : subpassColorReferences) + { + colorBlendState.attachments.push_back(vk::PipelineColorBlendAttachmentState + { + .blendEnable = SHVkUtil::IsBlendCompatible(debugDrawSubpass->GetFormatFromAttachmentReference(att.attachment)), + .srcColorBlendFactor = vk::BlendFactor::eSrcAlpha, + .dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha, + .colorBlendOp = vk::BlendOp::eAdd, + .srcAlphaBlendFactor = vk::BlendFactor::eOne, + .dstAlphaBlendFactor = vk::BlendFactor::eZero, + .alphaBlendOp = vk::BlendOp::eAdd, + .colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA, + } + ); + } + + debugDrawPipeline->GetPipelineState().SetColorBlenState(colorBlendState); + debugDrawPipeline->ConstructPipeline(); } void SHGraphicsSystem::InitMiddleEnd(void) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 0ede74c6..58f7cb6e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -288,7 +288,7 @@ namespace SHADE Handle GetMousePickSystem(void) const noexcept {return mousePickSystem;}; Handle GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;}; Handle GetDebugDrawPipeline(void) const noexcept { return debugDrawPipeline; } - + uint32_t GetCurrentFrameIndex(void) const noexcept { return renderContext.GetCurrentFrame(); } private: diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h index 7378cc48..7e313ed6 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.h @@ -47,12 +47,13 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* CTORS AND DTORS */ /*-----------------------------------------------------------------------*/ + //! For constructing a graphics pipeline SHVkPipeline (Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout, SHVkPipelineState const* const state, Handle const& renderpassHdl, Handle subpass) noexcept; - + //! For constructing a compute pipeline SHVkPipeline(Handle const& inLogicalDeviceHdl, Handle const& inPipelineLayout) noexcept; diff --git a/TempShaderFolder/DebugDrawVs.glsl b/TempShaderFolder/DebugDrawVs.glsl index ae11658d..cb0886d1 100644 --- a/TempShaderFolder/DebugDrawVs.glsl +++ b/TempShaderFolder/DebugDrawVs.glsl @@ -1,7 +1,7 @@ #version 450 #extension GL_KHR_vulkan_glsl : enable -layout(location = 0) in vec3 aVertexPos; +layout(location = 0) in vec4 aVertexPos; layout(location = 1) in vec4 aVertColor; @@ -19,6 +19,6 @@ layout(set = 2, binding = 0) uniform CameraData void main() { - gl_Position = cameraData.vpMat * vec4 (aVertexPos, 1.0f); + gl_Position = cameraData.vpMat * vec4 (aVertexPos.xyz, 1.0f); Out.vertColor = aVertColor; } \ No newline at end of file diff --git a/TempShaderFolder/DebugDrawVs.spv b/TempShaderFolder/DebugDrawVs.spv index 73e83f692e5dbd2a53de8fcea413846f1461c009..46a663cfdfb38bf67aa8e976cfc3262fe113b3e9 100644 GIT binary patch delta 446 zcmXw!J5Iw;5Jl&iBp^i*LKIH;1oH{zQ_>(IKva|g(a^96RuGl|@=7c=0z06kprS_N z9Ls*z(VMw*$8Y9i_%(ce>`x-1te+lInpAaKAI-=;1HM`HnetRt-|2Tv-?XVj+(s|T z_n+)6EegUha)M>JXmjmqIr#?n0G8mC+;|%zUasxmC$eV$l*kc`tsQb(Q}f^EWvh{A zF|O*~e4%|4e0Cly&68WLrtWc^4DO@fjNmqUJe{^ftfsfqidM7tj=_9u7wp$xL_9b9 syzyg;dys>s8#MPjfDx?16&soByJRPOj^PM8{|Rvko!?x~AETYaKNkcX=Kufz delta 430 zcmX|+O-=$)5QOU?;DQh$E{1J7xkTc|jc36lXyybSfp8JHfm;`@T$}jS z_;4nb?y9ct*Zoo1RbHP;ElKI-`7wl6wh5=zA>3b?f0*q<64LB5e4p6Y%PZ2oib}U% zg{!bmNE^9bIwB6>O=1AnZz6ZQwHdrj>;UOyVgEUqdyhen%quu|?ULx4HP13nqei{1 z5yXStV8bYTFD}=9x()p7N~QeCZqx|>nlG}?6Ar$9)C$B0=KifBx!-=*z5W|>T{{B_ p7=Sx8&ROXKQUx_|%LV2(&RNk-6EFs`K~r+yb?}?p^TTS_;1^fg9BTjo From dee4e9acbd94da1cafca320fecc45ad956347d89 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 27 Oct 2022 10:33:54 +0800 Subject: [PATCH 490/793] Fixed RTTR registration. Added back Camera Clamp --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 6 +++--- SHADE_Engine/src/Camera/SHCameraComponent.h | 8 ++++---- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 402175dd..31afe2ac 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -103,7 +103,7 @@ namespace SHADE } dirtyView = true; } - void SHCameraComponent::SetPosition(SHVec3& pos) noexcept + void SHCameraComponent::SetPosition(SHVec3 pos) noexcept { this->position = pos; if (SHComponentManager::HasComponent(GetEID())) @@ -152,7 +152,7 @@ namespace SHADE dirtyProj = true; } - SHVec3 const& SHCameraComponent::GetPosition() const noexcept + SHVec3 SHCameraComponent::GetPosition() const noexcept { return position; } @@ -233,7 +233,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Camera Component") - .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) + .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) .property("Pitch", &SHCameraComponent::GetPitch, &SHCameraComponent::SetPitch) .property("Yaw", &SHCameraComponent::GetYaw, &SHCameraComponent::SetYaw) .property("Roll", &SHCameraComponent::GetRoll, &SHCameraComponent::SetRoll) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index 19ce4232..f5e08af4 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -52,7 +52,7 @@ namespace SHADE void SetPositionY(float y) noexcept; void SetPositionZ(float z) noexcept; void SetPosition(float x, float y, float z) noexcept; - void SetPosition(SHVec3& pos) noexcept; + void SetPosition(SHVec3 pos) noexcept; void SetWidth(float width) noexcept; void SetHeight(float height) noexcept; @@ -62,7 +62,7 @@ namespace SHADE void SetIsPerspective(bool persp) noexcept; - SHVec3 const& GetPosition() const noexcept; + SHVec3 GetPosition() const noexcept; float GetYaw() const noexcept; float GetPitch() const noexcept; float GetRoll() const noexcept; @@ -84,12 +84,12 @@ namespace SHADE float movementSpeed; SHVec3 turnSpeed; - + RTTR_ENABLE() protected: - RTTR_ENABLE() + }; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 0d86c17a..609805f8 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -154,7 +154,7 @@ namespace SHADE SHVec3 view, right, UP; - //ClampCameraRotation(camera); + ClampCameraRotation(camera); GetCameraAxis(camera, view, right, UP); @@ -221,8 +221,8 @@ namespace SHADE SHVec3 up = { 0.0f,1.0f,0.0f }; + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - target =SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target += camera.position; ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); From b7b3ef08ab850b559c8afe491579d54d104a8bba Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Thu, 27 Oct 2022 11:31:11 +0800 Subject: [PATCH 491/793] Some lighting fixes --- .../Graphics/Devices/SHVkLogicalDevice.cpp | 5 +++-- TempShaderFolder/DeferredCompositeCs.glsl | 12 ++++-------- TempShaderFolder/DeferredCompositeCs.spv | Bin 3332 -> 3460 bytes TempShaderFolder/TestCubeFs.glsl | 2 -- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp index a6b415a9..6bf2e731 100644 --- a/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp +++ b/SHADE_Engine/src/Graphics/Devices/SHVkLogicalDevice.cpp @@ -186,9 +186,10 @@ namespace SHADE vk::PhysicalDeviceFeatures features{}; // ADD MORE FEATURES HERE IF NEEDED // point and lines fill mode - features.fillModeNonSolid = true; + features.fillModeNonSolid = VK_TRUE; features.samplerAnisotropy = VK_TRUE; - features.multiDrawIndirect = true; + features.multiDrawIndirect = VK_TRUE; + features.independentBlend = VK_TRUE; // for wide lines features.wideLines = true; diff --git a/TempShaderFolder/DeferredCompositeCs.glsl b/TempShaderFolder/DeferredCompositeCs.glsl index c0e42cea..c707901f 100644 --- a/TempShaderFolder/DeferredCompositeCs.glsl +++ b/TempShaderFolder/DeferredCompositeCs.glsl @@ -9,8 +9,8 @@ struct DirectionalLightStruct }; layout(local_size_x = 16, local_size_y = 16) in; -layout(set = 4, binding = 0, rgba8) uniform image2D positions; -layout(set = 4, binding = 1, rgba8) uniform image2D normals; +layout(set = 4, binding = 0, rgba32f) uniform image2D positions; +layout(set = 4, binding = 1, rgba32f) uniform image2D normals; layout(set = 4, binding = 2, rgba8) uniform image2D albedo; layout(set = 4, binding = 3, rgba8) uniform image2D targetImage; @@ -40,26 +40,22 @@ void main() // normal of fragment vec3 normalWorld = imageLoad(normals, globalThread).rgb; - //normalWorld = normalize (normalWorld); vec3 fragColor = vec3 (0.0f); for (int i = 0; i < lightCounts.directionalLights; ++i) { // get normalized direction of light - vec3 dLightNormalized = vec3 (0.0f, 0.0f, 1.0f); - //vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); + vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); // Get diffuse strength float diffuseStrength = max (0, dot (dLightNormalized, normalWorld)); - //fragColor += vec3 (1.0f) * diffuseStrength.rrr * pixelDiffuse; + // Calculate the fragment color fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; - //fragColor += vec3 (dLightNormalized.rgb); } // store result into result image imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); - //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalWorld, 1.0f)); } \ No newline at end of file diff --git a/TempShaderFolder/DeferredCompositeCs.spv b/TempShaderFolder/DeferredCompositeCs.spv index a87b7548fb45981226d5a85fa1e4c3f4cf88dbd4..455ab5483f63c9c8c37d786c435e1d7ca6138b50 100644 GIT binary patch literal 3460 zcmZvd>2e!I5XZ-de8hH)$;lBT#~cX>CO{GbA&0Sp;-Ewh&cQ9#(pp};-WAe11r#5` z2i|}O;Td=+3aFxr|8F#Hwp>iA)7}5>>0`QA9vNO7cW%fXax<>)24~I<3vq7Bjd@#?3Uz;$}PP#jPTF65}^f@=LN-y4Nl{ROC_4Us3K!<>;jOW|ThI z?!{4Cs_LBZwRO^F&70P;CwVI>k~~{m_4YA$LcE)NAE&Fy*4AEM*||6Bo)?eO&A6ST zkGZP!Zr)G0{5bEWB&g`$VhQIx!OnJjkveP z6E9cXRq=Y#*)CS{y{zb~f(efacHyb=EK0o#dB^mRJG^-}PqHFd3}*)YZf>xz;hM0t zl%wLt-HNcbzkAPjko*|$za?+BIvCS_?v0|i*D412v2*t8lT3ba>Pq^{VZ#66)YaNc zwE~^HQGZ9?*035Ckzk(-J7>_tz{31)3)4N{nfZe^@Ezn) zD{*~3VB|H7oM028n!Y*iS{=-pJlrEMI(azUXFi;A9x%%@E!q4m58t<8 zBjIjUocOoI$3*;i;A1nf_|yl+J^YzXxjuC2vwGXXPQUo0W4HT!Kg{Jh(Ghh`jSI43 zM?R)I)Ke7^^MrK$2zm^ARXXnm2H}6mSm0NK&VE?@S;^$Y|G54? zDqa;4>zFvY#X2r|ke41N-N|4lR{2mXZ$N%}<={(xboP-$j#J{~z@L~4LI1y)V8lEv z&cTZNWbPalx-34g$gASiVX=6JQ+jE365G6Fb`PC6HF08skq4dqvpjc#OicXm ziPHO?$KG^DvU5*wpkwQb_})zaPBQU$ zbM}w@#|Of8S#L@_X3wFvKZR7psexUe6wwDd`^VqGvR*x)pE;oO_sjg5FMqpCC*Dd) z=gk^HzovZDd|1Ty@{{ygary(huPWJ(xqyl7W6uVR-q+82W^V^NjrtUMNc@aL~4ZRF=en|ulamdGe5}$X%PP_&2mqmOd7XKB=<@m1#A8?ER znq+W@Q;uJij@{zFF8OTGssEg)9RIv@e84UK8hz*G z`vU(%eO?xSSH!`7MI1YvI+@pdB4RL4cJ}>%E$f~6R&R*-e#yZdd~S-sf0NI$_=h6y z-4y*TAM{Hi@{ya~Sn*mw)}6`c6^ ztc$=*zb~1$`&G5_?SCS|2YgyJfNh9~iyyy#_z;`j$7Z!ZkZiR-lKfa?wPSlI!k7L0 zRD|7T`&q!iIW}ATso`@G`PM_PUjz&s`bG8A- zX0Ro`9WZbX@54^=?Ia@X*2}k&>4o1M-Yyk^aSYp)3`QKovVaYXuPZWh%0=AAAN!7| PrM%QjUhMxU$`#SSUL_#7 literal 3332 zcmZ9OZF5sq5XVoOCM|`6$fFO`lqyxJ^{GV^0Yi(S7-(uyd=9tCZF=Q4Hi7a* z_znCZeg;33qs}-sy3c-Tm*L-95W|Q%mFXlg^E~X*c8c+~}Ni<3gM}>MEYs z8(WQ~VcuC_TBX&1GKkxG@+8J@s^FLO+Ub6$=unnNF@IUPk0?hs&9ucU#ap%PQ$q#Y5mh9~850#yJ6YhEODBX@b z8G6N4rT4R8!sUnAASFRr|IHQfVZbhl_p-rWl#V=!w{UqV(|A#X+hafhDwv!s^?i{Z>**v}01HCz*x z7IKu`q^k+*_`CQ03zDDW(94RujcwGXt$Yyoy7{i+Ou4(l*GA(zs7Vg{?R-=hcFsZF zlBo-vdXr%-O#XkIdfWS{R-=0_8a|fyr1xhNLk-qCUqeIq;TqPWJQD14VdsqAHnK3+ z`@(e3zu5elYfE?@4Z3l@z87_4SJw>L^P{2{Md<9vMbSh-pOZ}O*pZ8NbclnUohaJT zv5$%Fs0QZAnIEwO3_BQk&5xX5Q=+=QIqq5=%$YpgBQH96INZ1S6!X|@z>XFCEDzte z-7QJRuPP$`C*l=ZkV4}|TCddq$0 z$)T3Ngz&eRoa`@u1L*@gJH_9&qFz0uUpk~O7Ify!_glPQE9mr`zX#Z_D<3r<7tM%% zmd^h3KCn$y$)4E%8%R9Bo|TLrZ*R(vc&9}8V!NT2@-8s)u@V+~QxB3=VOM@tGrb-ogy|ZjqTE-{#+X={w@=3;a*@ZCQLp#KC?= z96Ovknb&(FVldBX@v8x=sn2|~*F}8C Date: Thu, 27 Oct 2022 12:32:06 +0800 Subject: [PATCH 492/793] Collider now will have it's sub collider list updated based on events --- .../Components/SHRigidBodyComponent.cpp | 3 + .../Physics/Components/SHRigidBodyComponent.h | 8 +- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 40 +++++++- SHADE_Engine/src/Scripting/SHScriptEngine.h | 5 + SHADE_Managed/src/Components/Collider.cxx | 99 ++++++++++++++----- SHADE_Managed/src/Components/Collider.hxx | 28 +++++- SHADE_Managed/src/Engine/ECS.cxx | 6 ++ SHADE_Managed/src/Scripts/ScriptStore.hxx | 4 +- TempScriptsFolder/PhysicsTest.cs | 36 +++++++ TempScriptsFolder/RaccoonShowcase.cs | 10 +- TempScriptsFolder/RaccoonSpin.cs | 9 +- 11 files changed, 202 insertions(+), 46 deletions(-) create mode 100644 TempScriptsFolder/PhysicsTest.cs diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp index b0172f64..c1969557 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.cpp @@ -10,6 +10,9 @@ #include +// External Dependencies +#include + // Primary Header #include "SHRigidBodyComponent.h" diff --git a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h index 78de84e7..3c5dd4f9 100644 --- a/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h +++ b/SHADE_Engine/src/Physics/Components/SHRigidBodyComponent.h @@ -10,7 +10,6 @@ #pragma once -#include #include // Project Headers @@ -23,6 +22,11 @@ // class SHPhysicsSystem; //} +namespace reactphysics3d +{ + class RigidBody; +} + namespace SHADE { /*-----------------------------------------------------------------------------------*/ @@ -153,7 +157,7 @@ namespace SHADE uint16_t dirtyFlags; bool interpolate; - rp3d::RigidBody* rp3dBody; + reactphysics3d::RigidBody* rp3dBody; float mass; float drag; diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 195d8ee3..3a2ea29f 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -24,6 +24,7 @@ of DigiPen Institute of Technology is prohibited. #include "Events/SHEvent.h" #include "Events/SHEventReceiver.h" #include "Events/SHEventManager.hpp" +#include "Physics/SHPhysicsSystem.h" namespace SHADE { @@ -60,7 +61,7 @@ namespace SHADE // Initialise the CSharp Engine csEngineInit(); - // Register entity creation events + // Register all events registerEvents(); } void SHScriptEngine::UnloadScriptAssembly() @@ -284,6 +285,20 @@ namespace SHADE return eventData->handle; } + SHEventHandle SHScriptEngine::onColliderAdded(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + csColliderOnListChanged(eventData->data->entityID); + return eventData->handle; + } + + SHEventHandle SHScriptEngine::onColliderRemoved(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + csColliderOnListChanged(eventData->data->entityID); + return eventData->handle; + } + /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------------*/ @@ -384,6 +399,12 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "DeserialiseScripts" ); + csColliderOnListChanged = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".Collider", + "OnColliderBoundChanged" + ); csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, @@ -411,8 +432,21 @@ namespace SHADE { std::make_shared>(this, &SHScriptEngine::onEntityDestroyed) }; - ReceiverPtr receiver = std::dynamic_pointer_cast(destroyedEventReceiver); - SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, receiver); + SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, std::dynamic_pointer_cast(destroyedEventReceiver)); + + // Register for collider added event + std::shared_ptr> addedColliderEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onColliderAdded) + }; + SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_ADDED_EVENT, std::dynamic_pointer_cast(addedColliderEventReceiver)); + + // Register for collider removed event + std::shared_ptr> removedColliderEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onColliderRemoved) + }; + SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_REMOVED_EVENT, std::dynamic_pointer_cast(removedColliderEventReceiver)); } void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index 137d978f..a909a334 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -218,6 +218,7 @@ namespace SHADE using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*); using CsScriptDeserialiseYamlFuncPtr = bool(*)(EntityID, const void*); using CsScriptEditorFuncPtr = void(*)(EntityID); + using CsEventRelayFuncPtr = void(*)(EntityID); /*-----------------------------------------------------------------------------*/ /* Constants */ @@ -250,6 +251,8 @@ namespace SHADE CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr; CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr; CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr; + // - Events + CsEventRelayFuncPtr csColliderOnListChanged = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; CsFuncPtr csEditorUndo = nullptr; @@ -259,6 +262,8 @@ namespace SHADE /* Event Handler Functions */ /*-----------------------------------------------------------------------------*/ SHEventHandle onEntityDestroyed(SHEventPtr eventPtr); + SHEventHandle onColliderAdded(SHEventPtr eventPtr); + SHEventHandle onColliderRemoved(SHEventPtr eventPtr); /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx index e09b7ead..7f41ad44 100644 --- a/SHADE_Managed/src/Components/Collider.cxx +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -134,7 +134,16 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Collider::Collider(Entity entity) : Component(entity) - {} + { + // Create lists if they don't exist + if (colliders == nullptr) + colliders = gcnew CollidersMap; + if (!colliders->ContainsKey(entity)) + colliders->Add(entity, gcnew WeakReferenceList()); + + // Store a weak reference + colliders[entity]->Add(gcnew System::WeakReference(this)); + } /*---------------------------------------------------------------------------------*/ /* Collider - Properties */ @@ -152,29 +161,7 @@ namespace SHADE // Populate the list if it hasn't been if (subColliderList == nullptr) { - subColliderList = gcnew System::Collections::Generic::List(); - for (const auto& collider : GetNativeComponent()->GetColliders()) - { - ColliderBound^ bound = nullptr; - switch (collider.first.GetType()) - { - case SHCollider::Type::BOX: - bound = gcnew BoxColliderBound(index, Owner.GetEntity()); - break; - case SHCollider::Type::SPHERE: - bound = gcnew SphereColliderBound(index, Owner.GetEntity()); - break; - case SHCollider::Type::CAPSULE: - // TODO - break; - default: - Debug::LogWarning("[Collider] An invalid Collider Type was detected. Skipping."); - break; - } - - // Add into list - subColliderList->Add(bound); - } + updateSubColliderList(); } // Check if valid @@ -189,4 +176,68 @@ namespace SHADE { return safe_cast(GetColliderBound(index)); } + + /*---------------------------------------------------------------------------------*/ + /* Event Handling Functions */ + /*---------------------------------------------------------------------------------*/ + void Collider::OnColliderBoundChanged(EntityID entity) + { + // Check if there are any colliders to update + if (colliders == nullptr || !colliders->ContainsKey(entity)) + return; + + // Update any colliders + System::Collections::Generic::List^ toRemove = gcnew System::Collections::Generic::List(); + WeakReferenceList^ collidersList = colliders[entity]; + for each (System::WeakReference^ wr in collidersList) + { + Collider^ collider = safe_cast(wr->Target); + // Update collider bounds + if (collider && collider->subColliderList != nullptr) + collider->updateSubColliderList(); + else + toRemove->Add(wr); + } + + // Sweep through and clear any invalid references while we're at it + for each (System::WeakReference ^ wr in toRemove) + { + collidersList->Remove(wr); + } + } + + void Collider::updateSubColliderList() + { + // Prepare the list + if (subColliderList) + subColliderList->Clear(); + else + subColliderList = gcnew System::Collections::Generic::List(); + + // Populate the list + int i = 0; + for (const auto& collider : GetNativeComponent()->GetColliders()) + { + ColliderBound^ bound = nullptr; + switch (collider.first.GetType()) + { + case SHCollider::Type::BOX: + bound = gcnew BoxColliderBound(i, Owner.GetEntity()); + break; + case SHCollider::Type::SPHERE: + bound = gcnew SphereColliderBound(i, Owner.GetEntity()); + break; + case SHCollider::Type::CAPSULE: + // TODO + break; + default: + Debug::LogWarning("[Collider] An invalid Collider Type was detected. Skipping."); + break; + } + ++i; + + // Add into list + subColliderList->Add(bound); + } + } } diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx index c85ee21c..8e63fc83 100644 --- a/SHADE_Managed/src/Components/Collider.hxx +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -136,7 +136,7 @@ namespace SHADE ///
    public ref class SphereColliderBound : public ColliderBound { - public: + public: /*-----------------------------------------------------------------------------*/ /* Properties */ /*-----------------------------------------------------------------------------*/ @@ -165,7 +165,7 @@ namespace SHADE /// bool Raycast(Ray ray, float maxDistance) override; - internal: + internal: /*-----------------------------------------------------------------------------*/ /* Constructors */ /*-----------------------------------------------------------------------------*/ @@ -220,11 +220,33 @@ namespace SHADE generic where T:ColliderBound T GetColliderBound(int index); + internal: + /*-----------------------------------------------------------------------------*/ + /* Event Handling Functions */ + /*-----------------------------------------------------------------------------*/ + static void OnColliderBoundChanged(EntityID entity); + private: + /*-----------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------*/ + using WeakReferenceList = System::Collections::Generic::List; + using CollidersMap = System::Collections::Generic::Dictionary; + + /*-----------------------------------------------------------------------------*/ + /* Static Data Members */ + /*-----------------------------------------------------------------------------*/ + static CollidersMap^ colliders; + /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ - System::Collections::Generic::List^ subColliderList; // TODO: Update elements in this list if the list on native collider changes + System::Collections::Generic::List^ subColliderList; + + /*-----------------------------------------------------------------------------*/ + /* Helper Functions */ + /*-----------------------------------------------------------------------------*/ + void updateSubColliderList(); }; } diff --git a/SHADE_Managed/src/Engine/ECS.cxx b/SHADE_Managed/src/Engine/ECS.cxx index 4d62f643..df67c788 100644 --- a/SHADE_Managed/src/Engine/ECS.cxx +++ b/SHADE_Managed/src/Engine/ECS.cxx @@ -22,6 +22,8 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "ECS_Base/Managers/SHEntityManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Physics\Components\SHColliderComponent.h" +#include "Physics\Components\SHRigidBodyComponent.h" #include "Scene/SHSceneManager.h" #include "Scene/SHSceneGraph.h" #include "Tools/SHLog.h" @@ -29,6 +31,8 @@ of DigiPen Institute of Technology is prohibited. #include "Utility/Convert.hxx" #include "Utility/Debug.hxx" #include "Components/Transform.hxx" +#include "Components\RigidBody.hxx" +#include "Components\Collider.hxx" namespace SHADE { @@ -242,6 +246,8 @@ namespace SHADE static ECS::ECS() { componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); + componentMap.Add(createComponentSet()); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.hxx b/SHADE_Managed/src/Scripts/ScriptStore.hxx index 4a9be721..9aa66fcd 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.hxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.hxx @@ -132,7 +132,7 @@ namespace SHADE /// Immutable list of references to scripts of the specified type. /// generic where T : ref class, Script - static System::Collections::Generic::IEnumerable ^ GetScripts(Entity entity); + static System::Collections::Generic::IEnumerable^ GetScripts(Entity entity); /// /// Retrieves an immutable list of all scripts attached to a specified Entity. /// @@ -295,4 +295,4 @@ namespace SHADE static System::Type^ getScriptType(System::String^ scriptName); static bool isEntityActive(Entity entity); }; -} // namespace PlushieAPI \ No newline at end of file +} diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs new file mode 100644 index 00000000..72e8a205 --- /dev/null +++ b/TempScriptsFolder/PhysicsTest.cs @@ -0,0 +1,36 @@ +using SHADE; +using System; + +public class PhysicsTest : Script +{ + [SerializeField] + [Tooltip("Force to apply when pressing Space.")] + private Vector3 Force = new Vector3(0.0f, 1.0f, 0.0f); + private RigidBody RigidBody; + private Collider Collider; + public PhysicsTest(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + RigidBody = GetComponent(); + if (RigidBody == null) + { + Debug.LogError("RigidBody is NULL!"); + } + Collider = GetComponent(); + if (Collider == null) + { + Debug.LogError("Collider is NULL!"); + } + + var subColider = Collider.ColliderBoundsCount; + Debug.Log($"There are {subColider} colliders."); + } + protected override void update() + { + if (Input.GetKeyUp(Input.KeyCode.Space)) + { + RigidBody.AddForce(Force); + } + } +} \ No newline at end of file diff --git a/TempScriptsFolder/RaccoonShowcase.cs b/TempScriptsFolder/RaccoonShowcase.cs index 4191a6e5..da0b89d2 100644 --- a/TempScriptsFolder/RaccoonShowcase.cs +++ b/TempScriptsFolder/RaccoonShowcase.cs @@ -12,7 +12,7 @@ public class RaccoonShowcase : Script //private int test = 5; [SerializeField] [Tooltip("Speed of the scaling in radians per second around each axis.")] - private Vector3 ScaleSpeed = new Vector3(1.0, 1.0, 0.0); + private Vector3 ScaleSpeed = Vector3.One; private Transform Transform; private double rotation = 0.0; private Vector3 scale = Vector3.Zero; @@ -31,9 +31,9 @@ public class RaccoonShowcase : Script } protected override void update() { - rotation += RotateSpeed * 0.16; - scale += ScaleSpeed * 0.16; - Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); - Transform.LocalScale = new Vector3(System.Math.Abs(System.Math.Sin(scale.x)) * originalScale, System.Math.Abs(System.Math.Cos(scale.y)) * originalScale, System.Math.Abs(System.Math.Sin(scale.z)) * originalScale); + //rotation += RotateSpeed * 0.16; + //scale += ScaleSpeed * 0.16; + //Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); + //Transform.LocalScale = new Vector3(System.Math.Abs(System.Math.Sin(scale.x)) * originalScale, System.Math.Abs(System.Math.Cos(scale.y)) * originalScale, System.Math.Abs(System.Math.Sin(scale.z)) * originalScale); } } \ No newline at end of file diff --git a/TempScriptsFolder/RaccoonSpin.cs b/TempScriptsFolder/RaccoonSpin.cs index 6bbd1462..c5420ffb 100644 --- a/TempScriptsFolder/RaccoonSpin.cs +++ b/TempScriptsFolder/RaccoonSpin.cs @@ -5,8 +5,8 @@ public class RaccoonSpin : Script { [SerializeField] [Tooltip("Speed of the rotation in radians per second.")] - private double RotateSpeed = 1.0; - private double rotation = 0.0; + private float RotateSpeed = 1.0f; + private float rotation = 0.0f; [SerializeField] private CallbackEvent testEvent; [SerializeField] @@ -22,9 +22,4 @@ public class RaccoonSpin : Script Debug.LogError("Transform is NULL!"); } } - protected override void update() - { - rotation += RotateSpeed * 0.16; - Transform.LocalRotation = new Vector3(0.0f, rotation, 0.0f); - } } \ No newline at end of file From 97432b866687da2a4b5e67a1d25704298b3b6782 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 27 Oct 2022 12:46:42 +0800 Subject: [PATCH 493/793] Accounted for updating collider storage when a collider is removed --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 21 +++++++++++++++++++ SHADE_Engine/src/Scripting/SHScriptEngine.h | 2 ++ SHADE_Managed/src/Components/Collider.cxx | 14 +++++++++++++ SHADE_Managed/src/Components/Collider.hxx | 11 ++++++++++ 4 files changed, 48 insertions(+) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 3a2ea29f..0a687601 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -299,6 +299,14 @@ namespace SHADE return eventData->handle; } + SHEventHandle SHScriptEngine::onColliderComponentRemoved(SHEventPtr eventPtr) + { + auto eventData = reinterpret_cast*>(eventPtr.get()); + if (eventData->data->removedComponentType == ComponentFamily::GetID()) + csColliderOnRemoved(eventData->data->eid); + return eventData->handle; + } + /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------------*/ @@ -405,6 +413,12 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".Collider", "OnColliderBoundChanged" ); + csColliderOnRemoved = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".Collider", + "OnColliderRemoved" + ); csEditorRenderScripts = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, @@ -447,6 +461,13 @@ namespace SHADE std::make_shared>(this, &SHScriptEngine::onColliderRemoved) }; SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_REMOVED_EVENT, std::dynamic_pointer_cast(removedColliderEventReceiver)); + + // Register for collider component removed event + std::shared_ptr> removedColliderComponentEventReceiver + { + std::make_shared>(this, &SHScriptEngine::onColliderComponentRemoved) + }; + SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast(removedColliderComponentEventReceiver)); } void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index a909a334..c38e3618 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -253,6 +253,7 @@ namespace SHADE CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr; // - Events CsEventRelayFuncPtr csColliderOnListChanged = nullptr; + CsEventRelayFuncPtr csColliderOnRemoved = nullptr; // - Editor CsScriptEditorFuncPtr csEditorRenderScripts = nullptr; CsFuncPtr csEditorUndo = nullptr; @@ -264,6 +265,7 @@ namespace SHADE SHEventHandle onEntityDestroyed(SHEventPtr eventPtr); SHEventHandle onColliderAdded(SHEventPtr eventPtr); SHEventHandle onColliderRemoved(SHEventPtr eventPtr); + SHEventHandle onColliderComponentRemoved(SHEventPtr eventPtr); /*-----------------------------------------------------------------------------*/ /* Helper Functions */ diff --git a/SHADE_Managed/src/Components/Collider.cxx b/SHADE_Managed/src/Components/Collider.cxx index 7f41ad44..6d2c2f01 100644 --- a/SHADE_Managed/src/Components/Collider.cxx +++ b/SHADE_Managed/src/Components/Collider.cxx @@ -180,8 +180,21 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Event Handling Functions */ /*---------------------------------------------------------------------------------*/ + void Collider::OnColliderRemoved(EntityID entity) + { + SAFE_NATIVE_CALL_BEGIN + // Check if there are any colliders to update + if (colliders == nullptr || !colliders->ContainsKey(entity)) + return; + + // Remove the key + colliders->Remove(entity); + SAFE_NATIVE_CALL_END("Collider.OnColliderRemoved") + } + void Collider::OnColliderBoundChanged(EntityID entity) { + SAFE_NATIVE_CALL_BEGIN // Check if there are any colliders to update if (colliders == nullptr || !colliders->ContainsKey(entity)) return; @@ -204,6 +217,7 @@ namespace SHADE { collidersList->Remove(wr); } + SAFE_NATIVE_CALL_END("Collider.OnColliderBoundChanged") } void Collider::updateSubColliderList() diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx index 8e63fc83..f827ab71 100644 --- a/SHADE_Managed/src/Components/Collider.hxx +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -224,6 +224,17 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ /* Event Handling Functions */ /*-----------------------------------------------------------------------------*/ + /// + /// To be called from native code when a collider has been removed. + /// + /// The entity which has it's collider removed. + static void OnColliderRemoved(EntityID entity); + /// + /// To be called from native code when a Collider bound has been removed. + /// + /// + /// The entity which has it's collider bounds changed. + /// static void OnColliderBoundChanged(EntityID entity); private: From b5a1d5ea88e61a91652e0cfdcff7263c2b427c96 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 27 Oct 2022 12:54:58 +0800 Subject: [PATCH 494/793] SP3-282 Restructured loaders and compilers Completed shader compiling and loading --- Assets/Cube.003.shmesh.shmeta | 3 + Assets/Cube.012.shmesh.shmeta | 3 + Assets/RaccoonBag_Color_Ver4.shtex | Bin 0 -> 1398192 bytes Assets/RaccoonBag_Color_Ver4.shtex.shmeta | 3 + .../RaccoonPreTexturedVer1_Base9.shtex.shmeta | 3 + .../Shaders/{KirschCs.glsl => Kirsch_CS.glsl} | 0 Assets/Shaders/Kirsch_CS.shshaderb | Bin 0 -> 5909 bytes Assets/Shaders/Kirsch_CS.shshaderb.shmeta | 3 + .../{PureCopyCs.glsl => PureCopy_CS.glsl} | 0 Assets/Shaders/PureCopy_CS.shshaderb | Bin 0 -> 1273 bytes Assets/Shaders/PureCopy_CS.shshaderb.shmeta | 3 + .../{TestCubeFs.glsl => TestCube_FS.glsl} | 0 Assets/Shaders/TestCube_FS.shshaderb | Bin 0 -> 2309 bytes Assets/Shaders/TestCube_FS.shshaderb.shmeta | 3 + .../{TestCubeVs.glsl => TestCube_VS.glsl} | 0 Assets/Shaders/TestCube_VS.shshaderb | Bin 0 -> 2501 bytes Assets/Shaders/TestCube_VS.shshaderb.shmeta | 3 + Assets/TD_Checker_Base_Color.shtex | Bin 0 -> 11184896 bytes Assets/TD_Checker_Base_Color.shtex.shmeta | 3 + .../src/Application/SBApplication.cpp | 11 +- SHADE_Application/src/Scenes/SBTestScene.cpp | 1 + .../src/Assets/Asset Types/SHShaderAsset.cpp | 61 ++++++++++ .../src/Assets/Asset Types/SHShaderAsset.h | 6 +- .../Libraries/Compilers/SHMeshCompiler.cpp | 4 +- .../Libraries/Compilers/SHMeshCompiler.h | 2 +- .../Compilers/SHShaderSourceCompiler.cpp | 15 ++- .../Compilers/SHShaderSourceCompiler.h | 4 +- .../Libraries/Compilers/SHTextureCompiler.cpp | 112 +++++++++--------- .../Libraries/Compilers/SHTextureCompiler.h | 5 +- .../Loaders/SHShaderSourceLoader.cpp | 7 +- .../Libraries/Loaders/SHShaderSourceLoader.h | 2 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 31 ++++- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 8 +- .../Shaders/SHShaderModuleLibrary.cpp | 7 +- 34 files changed, 212 insertions(+), 91 deletions(-) create mode 100644 Assets/Cube.003.shmesh.shmeta create mode 100644 Assets/Cube.012.shmesh.shmeta create mode 100644 Assets/RaccoonBag_Color_Ver4.shtex create mode 100644 Assets/RaccoonBag_Color_Ver4.shtex.shmeta create mode 100644 Assets/RaccoonPreTexturedVer1_Base9.shtex.shmeta rename Assets/Shaders/{KirschCs.glsl => Kirsch_CS.glsl} (100%) create mode 100644 Assets/Shaders/Kirsch_CS.shshaderb create mode 100644 Assets/Shaders/Kirsch_CS.shshaderb.shmeta rename Assets/Shaders/{PureCopyCs.glsl => PureCopy_CS.glsl} (100%) create mode 100644 Assets/Shaders/PureCopy_CS.shshaderb create mode 100644 Assets/Shaders/PureCopy_CS.shshaderb.shmeta rename Assets/Shaders/{TestCubeFs.glsl => TestCube_FS.glsl} (100%) create mode 100644 Assets/Shaders/TestCube_FS.shshaderb create mode 100644 Assets/Shaders/TestCube_FS.shshaderb.shmeta rename Assets/Shaders/{TestCubeVs.glsl => TestCube_VS.glsl} (100%) create mode 100644 Assets/Shaders/TestCube_VS.shshaderb create mode 100644 Assets/Shaders/TestCube_VS.shshaderb.shmeta create mode 100644 Assets/TD_Checker_Base_Color.shtex create mode 100644 Assets/TD_Checker_Base_Color.shtex.shmeta create mode 100644 SHADE_Engine/src/Assets/Asset Types/SHShaderAsset.cpp diff --git a/Assets/Cube.003.shmesh.shmeta b/Assets/Cube.003.shmesh.shmeta new file mode 100644 index 00000000..628ecd00 --- /dev/null +++ b/Assets/Cube.003.shmesh.shmeta @@ -0,0 +1,3 @@ +Name: Cube.003 +ID: 71245919 +Type: 4 diff --git a/Assets/Cube.012.shmesh.shmeta b/Assets/Cube.012.shmesh.shmeta new file mode 100644 index 00000000..56d2d0f5 --- /dev/null +++ b/Assets/Cube.012.shmesh.shmeta @@ -0,0 +1,3 @@ +Name: Cube.012 +ID: 80365422 +Type: 4 diff --git a/Assets/RaccoonBag_Color_Ver4.shtex b/Assets/RaccoonBag_Color_Ver4.shtex new file mode 100644 index 0000000000000000000000000000000000000000..effba95a24ad10ccc2cecb37531e81d2061b7bba GIT binary patch literal 1398192 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 ZGyw1Yqx`SW9`@2+nQZ5Ij7abLe*n!Gh{pf` literal 0 HcmV?d00001 diff --git a/Assets/Shaders/Kirsch_CS.shshaderb.shmeta b/Assets/Shaders/Kirsch_CS.shshaderb.shmeta new file mode 100644 index 00000000..61c735f3 --- /dev/null +++ b/Assets/Shaders/Kirsch_CS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: Kirsch_CS +ID: 19931255 +Type: 2 diff --git a/Assets/Shaders/PureCopyCs.glsl b/Assets/Shaders/PureCopy_CS.glsl similarity index 100% rename from Assets/Shaders/PureCopyCs.glsl rename to Assets/Shaders/PureCopy_CS.glsl diff --git a/Assets/Shaders/PureCopy_CS.shshaderb b/Assets/Shaders/PureCopy_CS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..9f1b0534b9e2c89fe180c1dc931e2f455964a012 GIT binary patch literal 1273 zcmYk5-A~hC6vhwRiUR~h1pKxW6&0Lbs4+3>jiy<$WDvb?O4rOLrCUZJG4aB`&A-S? zZ%llCFMUa0@^IesoTuljUF%QB+-bLVub3^^vaQ<73(7XECB|&U7M+cTUx)qEYTSSQ z<`t4PYda;Hb!h@w(w!uENnlmDCLV6X-SMenda|wTX20chR5cpL(P$J6zr^Wm7N1r> ziYzYjGKs|F{@M7;$13&mB*e3I2$&ZjyKhOeC@vIuW=FnWq~p+r^1HHd z0R6J#^-l*q`Qdn*=&#C>3;uoWGndc5t~)i+Z|naJ*-#+YmMp%{wXOR_U1nIan{}LA z%|oy3i2BURK}&sn_Q;{eJy~j?_wi774srI$JmlP$k9JQm`}GN**nz;e==~SE)6;<_ zV{Z121`vCz_w9R>>*o6_hHsu8*fHN4v*I&1-w^%>`Q%&^*yB(6?2!6!N6NxJ{cl9q zOYXYv{x@?d9r-o|w8TED6Y9cIhn?LK*cU!}zC|?0dY;|g7tp|u)H(0$fdCIU?1Fj8 z&m6>k{+{k(?K9V|z+59$WA~404xU3UW~P_N0&#Lt_lZD$cEEdjT5~d&+_Rb^kJmk~ dIeI))X6D)#cpg3RJt0*c`lT-Mf9mF)@E_-PRet~g literal 0 HcmV?d00001 diff --git a/Assets/Shaders/PureCopy_CS.shshaderb.shmeta b/Assets/Shaders/PureCopy_CS.shshaderb.shmeta new file mode 100644 index 00000000..8cb091d7 --- /dev/null +++ b/Assets/Shaders/PureCopy_CS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: PureCopy_CS +ID: 29659779 +Type: 2 diff --git a/Assets/Shaders/TestCubeFs.glsl b/Assets/Shaders/TestCube_FS.glsl similarity index 100% rename from Assets/Shaders/TestCubeFs.glsl rename to Assets/Shaders/TestCube_FS.glsl diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..863287f68b0fa46d45c3d7b3615c5490386b1ba1 GIT binary patch literal 2309 zcmZ9MU2_yg6owo2gBU~-Fa$-G4FMF;7-IMmK^Kx*QneH*LZNq4!)_;Ooy@MYvng`v zoj*vq@y=hx1yuPyGu?5ZQzz$~_nbbTJ$vNslqpW_=;ASBj+kk4!mO2$nKeg+n1cWP zX~|!E{*U;ynKE0OFQWBdo<{>a?q_b453|Un1N+LQJLb4)7Wccot=`f&A1tljTqg7< zrdDJi_DMyli$i;{OEG*T`doBXbYIjF&FBt3DpFESl^OG|0@UT*?M0nu52LXi#aW!& zXuKN_Y!(e){%ZUA_CPnHvC-DUwA)*c`lC@a&JPkBB`&qmz-7wh_AR-JINr~t{bVwzIyB@_?X_VVMZd#I z{%DvCGqok8p&1#I+gJG{v+AJ4X2qYx`DQj8t;Kn)={B^R^7Q@XrX~c&Z2kQW_JLRM zXLfNi+Knq18+mCJRHvaBr^S`aW-d-hXtUf=2{Ev71{9$~PjlkFHt98U7K0A;1bNTL z3k5ZG4;!^wH#qdAzQpb9=Dqm9W~DbVc@rDyN)i7{$(*MCg1oOH!w`uLPVC7(HP(vv zw4oQqe0f)z`FfhW{9t2E$g$#`y_eVZi{W<_i#OR4anRY%#X|dEUyx3|$BGvAvgmyR zh8=9C;zz$=`lJr;vJbGfh5rHluM_jMBEuIHk9v^LNTQ#%XkPw&*XVp3ZT;tG z319GgUS|hjpJ^M@;`o!VdV+pVp2uat@4V!X#nFjicU+r<{KdwcxkI^ z24#KN=mDKQQZqTvd6|15N7xVc3&P1?_F6CAn$%)O^n67!z2Vc6&bLI*;N1U8oLu1K zN9XrC6{y>~uReQ(VZ)s-a;w^Ew z^F~NRyrcij<_i(?V($0l$sEp$z&omv`Lsps2_J0CFZeD_%oT4B z@xGJ(VZ2pg;KXA$w?!cyHg-o}?CXvQ`=)$}f7fH+f&TRUd@qdr`269qdy?rB+XHQj t?;MQ!*z=Df>I-vX=Rb+S@#kHj2mgnX@eeiP|40Omf5+?Z^n&h){sW9z$CLm7 literal 0 HcmV?d00001 diff --git a/Assets/Shaders/TestCube_FS.shshaderb.shmeta b/Assets/Shaders/TestCube_FS.shshaderb.shmeta new file mode 100644 index 00000000..3a647313 --- /dev/null +++ b/Assets/Shaders/TestCube_FS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: TestCube_FS +ID: 18415057 +Type: 2 diff --git a/Assets/Shaders/TestCubeVs.glsl b/Assets/Shaders/TestCube_VS.glsl similarity index 100% rename from Assets/Shaders/TestCubeVs.glsl rename to Assets/Shaders/TestCube_VS.glsl diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..3d12507b9b6dac6ea9f270db7269266f4030a2b5 GIT binary patch literal 2501 zcmZ9M+foxj5Qawx0YOAX!2=?QiVETp#3LYJK%-!(+@_|I6}M{Hq&5qRSH6Nik5@jG zH&*$7vpcCRC)G9mcmLhfGu<2W>!@+7yKAb~m?Ng&44Su@$(%G@vKTX9%5JYz-&g0_ zX=Coe{2eIAO}Ash8PbnclI+7zedRm<07SJP6?R6?kD>kM>n6I40qVtPo2(P?8hCapO(%ln_lDfJ(~teXrs-z5qx#NlJk)- z2pb(Pca6f`&uP^j21&-IUfxM(-P5Ksdfl7tMzzhjo!Yn___Xr%xVH@BG}sN2HJe&l z%4Sw^;%^7Zj&9{jkTtWD6JN6(reQO7wZNw~XIHZK;Wxc(b|-w)Dc@=ow${R|hE5!v z$G0Cv9Ut#Se_7PXkgVFhAhE7QSBo1Q*;~F4>E)bDEeEYPHq}l%4^c0~b4O<9OEZZY z9}*k4KQ)uRjLSUP?Ap2`wvwAK`&JYixqQr;{b1wWAm#{D5r_Vc1GK>O7)&i-dIIJx zz|1i*GdX6a@%KqKbPDgrg2VDQ@?m55HgaO)ExipL8?#%H$M*rhf4eF9SQ}ztBWI7p z83zpK#D6w@;Lb)~;{2U>=ga@$NnsXu=FPcdR#VA+yI>ans`la=@y=lGGOSZLXHp1^ zJ|eBGeL^y-c6N>T-cxF*uUc$;bV@My~|9F2W8`3h(Dg| z~)x32R(0&G*h3*fU>AyetMEIl;^hd3+6{(pl7SRy*gB2R@kD z@-ec@s!9?UFa+yg5iUiS8Tl7W9`(<`Q(419Upf1VE#L>ac{WKCB}STg1;t>SZehAs&x1sGwLU$U%RnB-r85_p1_e_%p$9e2(kV$uTYQIc`YD?sMFfP7Y>2!7)1wCx z`o>e*lr&m7}ga45P4t6;7=$VB6yc37sEaf(B9ouqlqX(Y1lH2IVwz^0E zUPy>vmf)w)Ka>~Ws)Y05a0mLnE@5{4TZ7^G+FnX8)>aY5#`1M+NXJ&JZ8NtOYkMUd Y@$m6eo3G=wbY{fY0fzrqSr;Y$0Qhjc761SM literal 0 HcmV?d00001 diff --git a/Assets/Shaders/TestCube_VS.shshaderb.shmeta b/Assets/Shaders/TestCube_VS.shshaderb.shmeta new file mode 100644 index 00000000..23c5e30d --- /dev/null +++ b/Assets/Shaders/TestCube_VS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: TestCube_VS +ID: 29315909 +Type: 2 diff --git a/Assets/TD_Checker_Base_Color.shtex b/Assets/TD_Checker_Base_Color.shtex new file mode 100644 index 0000000000000000000000000000000000000000..c99ff515093549bd44dfe4b92bf310d8aeb2c2ca GIT binary patch literal 11184896 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� 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 Ql;=Ny+?GIB4<^cQA$1Gh@zo-0-q7mMBn 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

    o!CY~;AbagV1znp0RFMiTp_L;pd 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

    HXF|1Xf2q)Fm|d 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
    Z4^oPAYe$RsOY<+JDalmMwJ=-=- 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�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

    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[5]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -395,12 +480,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[5]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -417,7 +502,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; @@ -456,8 +541,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[6]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -476,12 +578,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[6]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -498,7 +600,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5, t6); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; @@ -538,8 +640,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[7]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -558,12 +677,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[7]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -580,7 +699,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; @@ -621,8 +740,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[8]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -641,12 +777,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[8]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -663,7 +799,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; @@ -705,8 +841,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[9]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -725,12 +878,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[9]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -747,7 +900,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; @@ -790,8 +943,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[10]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -810,12 +980,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[10]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action action) { targetAction = action; @@ -832,7 +1002,7 @@ namespace SHADE { targetAction.Invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { parameters[0] = t1; parameters[1] = t2; diff --git a/SHADE_CSharp/src/Events/CallbackAction.tt b/SHADE_CSharp/src/Events/CallbackAction.tt index fffd4251..34789b67 100644 --- a/SHADE_CSharp/src/Events/CallbackAction.tt +++ b/SHADE_CSharp/src/Events/CallbackAction.tt @@ -78,8 +78,25 @@ namespace SHADE ///
    public CallbackAction() {} /// - /// Constructs a CallbackAction that represents a call to the specified method on the - /// specified target. + /// Constructs a CallbackAction that represents a call to the specified static + /// method. + /// + /// Method to call. + /// + /// Thrown if a method that is not compatible with the target is specified. The method's + /// source type must match the target's type. + /// + public CallbackAction(MethodInfo method) + { + // No errors, assign + targetMethod = method; + + // Create storage for parameters for calling + parameters = new Object[<#=i#>]; + } + /// + /// Constructs a CallbackAction that represents a call to a specified member + /// method on the specified target. /// /// Object to call the method on. /// Method to call. @@ -98,12 +115,12 @@ namespace SHADE targetMethod = method; // Create storage for parameters for calling - parameters = new Object[1]; + parameters = new Object[<#=i#>]; } /// /// Constructs a Callback action based on an action. /// - /// + /// Action that wraps a function to be called. public CallbackAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action) { targetAction = action; @@ -120,7 +137,7 @@ namespace SHADE { targetAction.Invoke(<# for (int t = 1; t < i + 1; ++t) { #>t<#=t#><# if (t != i) { #>, <# } #><# } #>); } - else if (TargetObject != null && targetMethod != null) + else if (targetMethod != null) { <# for (int t = 0; t < i; ++t) {#>parameters[<#=t#>] = t<#=t+1#>; <# } #>_ = targetMethod.Invoke(TargetObject, parameters); diff --git a/SHADE_Managed/src/Components/Collider.hxx b/SHADE_Managed/src/Components/Collider.hxx index 1d1196f5..dc17ae7f 100644 --- a/SHADE_Managed/src/Components/Collider.hxx +++ b/SHADE_Managed/src/Components/Collider.hxx @@ -194,7 +194,7 @@ namespace SHADE /* Properties */ /*-----------------------------------------------------------------------------*/ /// - /// Total number of ColliderBounds in the Collider component. + /// Total number of ColliderShapes in the Collider component. /// property int CollisionShapeCount { diff --git a/TempScriptsFolder/PhysicsTest.cs b/TempScriptsFolder/PhysicsTest.cs index 6f9774c9..add5971d 100644 --- a/TempScriptsFolder/PhysicsTest.cs +++ b/TempScriptsFolder/PhysicsTest.cs @@ -28,7 +28,7 @@ public class PhysicsTest : Script Debug.LogError("Collider is NULL!"); } - var subColider = Collider.ColliderBoundsCount; + var subColider = Collider.CollisionShapeCount; Debug.Log($"There are {subColider} colliders."); } protected override void update() From 00d4d5d91053c2a1c87e1ba4697095658e3fdad8 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 30 Oct 2022 03:06:18 +0800 Subject: [PATCH 543/793] Removed code that accidentally calls delete on freed memory for asset loaders --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 96ea7d1a..9890d047 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -64,10 +64,10 @@ namespace SHADE void SHAssetManager::Exit() noexcept { - for (auto const& loader : loaders) - { - delete loader; - } + delete loaders[static_cast(AssetType::SHADER)]; + delete loaders[static_cast(AssetType::TEXTURE)]; + delete loaders[static_cast(AssetType::MESH)]; + delete loaders[static_cast(AssetType::SCENE)]; for (auto const& data : std::ranges::views::values(assetData)) { From 2ebcd3fd4704f726ca279835dd035a253feffa4a Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 30 Oct 2022 04:39:16 +0800 Subject: [PATCH 544/793] Filesystem builds directory tree of asset folder to show all files and subfolders --- SHADE_Engine/src/Assets/SHAsset.h | 1 - SHADE_Engine/src/Assets/SHAssetMacros.h | 4 +- SHADE_Engine/src/Assets/SHAssetManager.cpp | 26 +++--- SHADE_Engine/src/Assets/SHAssetManager.h | 8 +- SHADE_Engine/src/Filesystem/SHFileSystem.cpp | 93 +++++++++++--------- SHADE_Engine/src/Filesystem/SHFileSystem.h | 7 +- SHADE_Engine/src/Filesystem/SHFolder.cpp | 38 ++++++++ SHADE_Engine/src/Filesystem/SHFolder.h | 10 +-- 8 files changed, 113 insertions(+), 74 deletions(-) create mode 100644 SHADE_Engine/src/Filesystem/SHFolder.cpp diff --git a/SHADE_Engine/src/Assets/SHAsset.h b/SHADE_Engine/src/Assets/SHAsset.h index e8a0d629..a4e9847c 100644 --- a/SHADE_Engine/src/Assets/SHAsset.h +++ b/SHADE_Engine/src/Assets/SHAsset.h @@ -11,7 +11,6 @@ *****************************************************************************/ #pragma once -#include "Filesystem/SHFileSystem.h" #include "Assets/SHAssetMacros.h" #include "SH_API.h" diff --git a/SHADE_Engine/src/Assets/SHAssetMacros.h b/SHADE_Engine/src/Assets/SHAssetMacros.h index 4489e807..a21a9840 100644 --- a/SHADE_Engine/src/Assets/SHAssetMacros.h +++ b/SHADE_Engine/src/Assets/SHAssetMacros.h @@ -56,9 +56,11 @@ constexpr size_t TYPE_COUNT{ static_cast(AssetType::MAX_COUNT) }; //Directory #ifdef _PUBLISH -constexpr std::string_view ASSET_ROOT {"Assets"}; +constexpr std::string_view ASSET_ROOT{ "Assets" }; +constexpr std::string_view BUILT_IN_ASSET_ROOT {"Built_In"}; #else constexpr std::string_view ASSET_ROOT {"../../Assets"}; +constexpr std::string_view BUILT_IN_ASSET_ROOT{ "../../Built_In" }; #endif // INTERNAL ASSET PATHS diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 9890d047..658c80b0 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -23,8 +23,12 @@ #include "Libraries/Compilers/SHTextureCompiler.h" #include "Libraries/Compilers/SHShaderSourceCompiler.h" +#include "Filesystem/SHFileSystem.h" + namespace SHADE { + FolderPointer SHAssetManager::folderRoot{ nullptr }; + FMOD::System* SHAssetManager::audioSystem; std::unordered_map* SHAssetManager::audioSoundList; @@ -318,7 +322,7 @@ namespace SHADE return result; } - AssetID SHAssetManager::CompileAsset(AssetPath path) noexcept + AssetID SHAssetManager::CompileAsset(AssetPath const& path) noexcept { SHAsset newAsset { @@ -450,8 +454,8 @@ namespace SHADE void SHAssetManager::Load() noexcept { //CompileAll(); + BuildAssetCollection(); InitLoaders(); - BuildAssetCollection(); //LoadAllData(); } @@ -483,18 +487,8 @@ namespace SHADE return data; } - void SHAssetManager::BuildAssetCollection() noexcept - { - for (auto const& dir : std::filesystem::recursive_directory_iterator{ASSET_ROOT}) - { - if (dir.is_regular_file()) - { - if (dir.path().extension().string() == META_EXTENSION.data()) - { - auto asset = SHAssetMetaHandler::RetrieveMetaData(dir.path()); - assetCollection.insert({ asset.id, asset }); - } - } - } - } + void SHAssetManager::BuildAssetCollection() noexcept + { + SHFileSystem::BuildDirectory(ASSET_ROOT.data(), folderRoot, assetCollection); + } } diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index 22e92c7d..fea20332 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -10,10 +10,12 @@ ******************************************************************************/ #pragma once #include "tinyddsloader.h" + #include "SHAsset.h" #include "Asset Types/SHAssetData.h" #include "Assets/Libraries/Loaders/SHAssetLoader.h" -#include "Filesystem/SHFileSystem.h" + +#include "Filesystem/SHFolder.h" #include "SH_API.h" @@ -85,7 +87,7 @@ namespace SHADE static std::vector GetAllDataOfType(AssetType type) noexcept; static std::vector GetAllRecordOfType(AssetType type) noexcept; - static AssetID CompileAsset(AssetPath path) noexcept; + static AssetID CompileAsset(AssetPath const& path) noexcept; private: @@ -105,6 +107,8 @@ namespace SHADE //TODO use this function to create asset data internall at all calls to generate id //static AssetID CreateAsset(AssetName name, AssetType type) noexcept; + static FolderPointer folderRoot; + static FMOD::System* audioSystem; static std::unordered_map* audioSoundList; diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp index 8e3432ad..4c0971e6 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.cpp +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.cpp @@ -1,32 +1,22 @@ +/*************************************************************************//** + * \file SHFileSystem.cpp + * \author Loh Xiao Qi + * \date 30 October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ #include "SHpch.h" #include "SHFileSystem.h" -#include "fileapi.h" #include #include +#include "Assets/SHAssetMetaHandler.h" + namespace SHADE { - SHFolder::SHFolder(FolderName name) - :name{ name }, subFolders(0), folded{ false }, path{""} - { - } - - FolderPointer SHFileSystem::CreateNewFolderHere(FolderPointer parent, FolderName name) noexcept - { - for (auto const& folder : parent->subFolders) - { - if (name == folder->name) - { - SHLOG_ERROR("Unable to create subfolder {} at {} as it already exists", name, folder->name); - return nullptr; - } - } - - auto result = new SHFolder(name); - parent->subFolders.push_back(result); - - return result; - } bool SHFileSystem::DeleteFolder(FolderPointer location) noexcept { @@ -34,40 +24,59 @@ namespace SHADE return true; } - FolderPointer SHFileSystem::BuildDirectory(FolderPath path) noexcept + void SHFileSystem::BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept { std::queue folderQueue; - auto result = new SHFolder("root"); - folderQueue.push(result); + root = new SHFolder("root"); + root->path = path; + folderQueue.push(root); while (!folderQueue.empty()) { - auto folder = folderQueue.front(); + auto const folder = folderQueue.front(); folderQueue.pop(); - FolderCounter count = 0; + + std::vector assets; for (auto const& dirEntry : std::filesystem::directory_iterator(folder->path)) { + auto const& path = dirEntry.path(); if (!dirEntry.is_directory()) { - folder->files.emplace_back( - dirEntry.path().filename().string(), - dirEntry.path().string(), - dirEntry.path().extension().string() - ); - - continue; + if (path.extension().string() == META_EXTENSION) + { + //auto asset = SHAssetMetaHandler::RetrieveMetaData(path); + //assetCollection.insert({ asset.id, asset }); + assets.push_back(SHAssetMetaHandler::RetrieveMetaData(path)); + } + else + { + folder->files.emplace_back( + path.stem().string(), + path.string(), + path.extension().string(), + nullptr + ); + } + continue; } - std::string name = dirEntry.path().stem().string(); - - FolderPointer newFolder{ new SHFolder(name) }; - - folderQueue.push(newFolder); - folder->subFolders.push_back(newFolder); + auto newFolder{ folder->CreateSubFolderHere(path.stem().string()) }; + folderQueue.push(newFolder); } - } - return result; + for (auto const& asset : assets) + { + assetCollection.emplace(asset.id, asset); + for(auto& file : folder->files) + { + if (file.name == asset.name) + { + file.assetMeta = &assetCollection[asset.id]; + break; + } + } + } + } } } diff --git a/SHADE_Engine/src/Filesystem/SHFileSystem.h b/SHADE_Engine/src/Filesystem/SHFileSystem.h index b4f0b0a7..956d3916 100644 --- a/SHADE_Engine/src/Filesystem/SHFileSystem.h +++ b/SHADE_Engine/src/Filesystem/SHFileSystem.h @@ -11,6 +11,7 @@ #pragma once #include "SHFolder.h" +#include namespace SHADE { @@ -18,12 +19,10 @@ namespace SHADE class SHFileSystem { public: - static FolderPointer BuildDirectory(FolderPath path) noexcept; + static void BuildDirectory(FolderPath path, FolderPointer& root, std::unordered_map& assetCollection) noexcept; private: - static FolderPointer CreateNewFolderHere(FolderPointer parent, FolderName name) noexcept; static bool DeleteFolder(FolderPointer location) noexcept; - - friend class SHFolder; + }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Filesystem/SHFolder.cpp b/SHADE_Engine/src/Filesystem/SHFolder.cpp new file mode 100644 index 00000000..716eec4b --- /dev/null +++ b/SHADE_Engine/src/Filesystem/SHFolder.cpp @@ -0,0 +1,38 @@ +/*************************************************************************//** + * \file SHFolder.cpp + * \author Loh Xiao Qi + * \date 30 October 2022 + * \brief + * + * Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. + *****************************************************************************/ +#include "SHpch.h" +#include "SHFolder.h" + +namespace SHADE +{ + SHFolder::SHFolder(FolderName name) + :name{ name }, subFolders(0), folded{ false }, path{ "" } + { + } + + FolderPointer SHFolder::CreateSubFolderHere(FolderName name) + { + for (auto const& folder : subFolders) + { + if (name == folder->name) + { + SHLOG_ERROR("Unable to create subfolder {} at {} as it already exists", name, folder->name); + return nullptr; + } + } + + auto result = new SHFolder(name); + result->path = path + "/" + name; + subFolders.push_back(result); + + return result; + } +} diff --git a/SHADE_Engine/src/Filesystem/SHFolder.h b/SHADE_Engine/src/Filesystem/SHFolder.h index 86cdc008..54e95033 100644 --- a/SHADE_Engine/src/Filesystem/SHFolder.h +++ b/SHADE_Engine/src/Filesystem/SHFolder.h @@ -12,7 +12,7 @@ #include #include -#include "Assets/SHAssetMacros.h" +#include "Assets/SHAsset.h" namespace SHADE { @@ -27,15 +27,12 @@ namespace SHADE typedef std::string FileExt; typedef SHFolder* FolderPointer; - // Forward Declare - class SHFileSystem; - struct SHFile { FileName name; FilePath path; FileExt ext; - + SHAsset const* assetMeta; }; class SHFolder @@ -50,9 +47,6 @@ namespace SHADE bool folded; FolderPointer CreateSubFolderHere(FolderName name); - - private: FolderPath path; - friend class SHFileSystem; }; } From 087cbcabaf94400294c0cfbb1d00f9ed24ba8eda Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sun, 30 Oct 2022 04:41:24 +0800 Subject: [PATCH 545/793] Forgot function to actually retrieve root folder pointer hehe --- SHADE_Engine/src/Assets/SHAssetManager.cpp | 7 ++++++- SHADE_Engine/src/Assets/SHAssetManager.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index 658c80b0..682eb9ec 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -343,7 +343,12 @@ namespace SHADE return newAsset.id; } - bool SHAssetManager::IsRecognised(char const* ext) noexcept + FolderPointer SHAssetManager::GetRootFolder() noexcept + { + return folderRoot; + } + + bool SHAssetManager::IsRecognised(char const* ext) noexcept { for (auto const& e : EXTENSIONS) { diff --git a/SHADE_Engine/src/Assets/SHAssetManager.h b/SHADE_Engine/src/Assets/SHAssetManager.h index fea20332..64527e01 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.h +++ b/SHADE_Engine/src/Assets/SHAssetManager.h @@ -88,6 +88,8 @@ namespace SHADE static std::vector GetAllRecordOfType(AssetType type) noexcept; static AssetID CompileAsset(AssetPath const& path) noexcept; + + static FolderPointer GetRootFolder() noexcept; private: From 94f579e8e3345622c0936997b6eb0c356408373c Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 13:25:15 +0800 Subject: [PATCH 546/793] CompileAsset function from Asset manager is working --- .../src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 4983bd48..bc485b40 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -37,6 +37,7 @@ of DigiPen Institute of Technology is prohibited. #include "Assets/Asset Types/SHTextureAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" +#include "Assets/SHAssetManager.h" namespace SHADE { @@ -109,6 +110,7 @@ namespace SHADE transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl"); shaderModuleLibrary.ImportAllShaderSource(device); shaderModuleLibrary.ReflectAllShaderModules(); From fad9d37cd4ca683d27be892b26334046c62f64b5 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 14:17:36 +0800 Subject: [PATCH 547/793] Lighting data is now copied to CPU buffer and GPU buffer every frame Since lighting will be done in view space, the camera's constant movement will make it so that the light data is often changing. Keeping track of these changes for optimization might prove to be counter productive. Copying data every frame might just be more ideal. --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 2 + .../MiddleEnd/Interface/SHGraphicsSystem.h | 6 +- .../MiddleEnd/Lights/SHLightComponent.cpp | 82 +++++++++---------- .../MiddleEnd/Lights/SHLightComponent.h | 22 ++--- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 46 ++++++----- .../MiddleEnd/Lights/SHLightingSubSystem.h | 8 +- 6 files changed, 86 insertions(+), 80 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index bc485b40..5deb83a9 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -110,6 +110,8 @@ namespace SHADE transferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); graphicsTexCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_VS.glsl"); + SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl"); SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl"); shaderModuleLibrary.ImportAllShaderSource(device); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 0f9d602a..072a1d99 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -358,9 +358,9 @@ namespace SHADE Handle postOffscreenRender; Handle lightingSubSystem; - uint32_t resizeWidth; - uint32_t resizeHeight; - bool restoredFromMinimize = false; + uint32_t resizeWidth = 1; + uint32_t resizeHeight = 1; + bool restoredFromMinimize = false; }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp index fb8795fa..2ea6bc8b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.cpp @@ -9,9 +9,9 @@ namespace SHADE { lightData.Reset(); SetType(SH_LIGHT_TYPE::DIRECTIONAL); - indexInBuffer = std::numeric_limits::max(); + //indexInBuffer = std::numeric_limits::max(); isActive = true; - Unbind(); + //Unbind(); } @@ -23,28 +23,28 @@ namespace SHADE void SHLightComponent::SetPosition(SHVec3 const& position) noexcept { lightData.position = position; - MakeDirty(); + //MakeDirty(); } void SHLightComponent::SetType(SH_LIGHT_TYPE type) noexcept { lightData.type = type; - MakeDirty(); + //MakeDirty(); } void SHLightComponent::SetDirection(SHVec3 const& direction) noexcept { lightData.direction = direction; - MakeDirty(); + //MakeDirty(); } void SHLightComponent::SetColor(SHVec4 const& color) noexcept { lightData.color = color; - MakeDirty(); + //MakeDirty(); } void SHLightComponent::ModifyCullingMask(uint8_t layerIndex, bool value) noexcept @@ -54,7 +54,7 @@ namespace SHADE else lightData.cullingMask &= ~(1u << layerIndex); - MakeDirty(); + //MakeDirty(); } void SHLightComponent::SetCullingMask(uint32_t const& value) noexcept @@ -65,43 +65,43 @@ namespace SHADE void SHLightComponent::SetAllLayers(void) noexcept { lightData.cullingMask = std::numeric_limits::max(); - MakeDirty(); + //MakeDirty(); } void SHLightComponent::ClearAllLayers(void) noexcept { lightData.cullingMask = 0; - MakeDirty(); + //MakeDirty(); } - void SHLightComponent::MakeDirty(void) noexcept - { - dirty = true; - } + //void SHLightComponent::MakeDirty(void) noexcept + //{ + // dirty = true; + //} - void SHLightComponent::ClearDirtyFlag(void) noexcept - { - dirty = false; - } + //void SHLightComponent::ClearDirtyFlag(void) noexcept + //{ + // dirty = false; + //} - void SHLightComponent::Unbind(void) noexcept - { - bound = false; - MakeDirty(); - } - - void SHLightComponent::SetBound(uint32_t inIndexInBuffer) noexcept -{ - bound = true; - indexInBuffer = inIndexInBuffer; - } +// void SHLightComponent::Unbind(void) noexcept +// { +// bound = false; +// MakeDirty(); +// } +// +// void SHLightComponent::SetBound(uint32_t inIndexInBuffer) noexcept +//{ +// bound = true; +// indexInBuffer = inIndexInBuffer; +// } void SHLightComponent::SetStrength(float value) noexcept { lightData.strength = value; - MakeDirty(); + //MakeDirty(); } SHLightData const& SHLightComponent::GetLightData(void) const noexcept @@ -135,20 +135,20 @@ namespace SHADE } - bool SHLightComponent::IsDirty(void) const noexcept - { - return dirty; - } + //bool SHLightComponent::IsDirty(void) const noexcept + //{ + // return dirty; + //} - bool SHLightComponent::GetBound(void) const noexcept - { - return bound; - } + //bool SHLightComponent::GetBound(void) const noexcept + //{ + // return bound; + //} - uint32_t SHLightComponent::GetIndexInBuffer(void) const noexcept - { - return indexInBuffer; - } + //uint32_t SHLightComponent::GetIndexInBuffer(void) const noexcept + //{ + // return indexInBuffer; + //} float SHLightComponent::GetStrength(void) const noexcept { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h index 81eb80f5..6b35559c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightComponent.h @@ -17,13 +17,13 @@ namespace SHADE //! Since the lighting system is gonna be self contained and light weight, we store this //! so that we only write this to the CPU buffer when this light component change, we don't //! rewrite everything. However we still write to the GPU buffer when everything changes. - uint32_t indexInBuffer; + //uint32_t indexInBuffer; - //! If the light component changed some value we mark this true. - bool dirty; + ////! If the light component changed some value we mark this true. + //bool dirty; - //! If the light's data is already in the buffers, this will be set to true. - bool bound; + ////! If the light's data is already in the buffers, this will be set to true. + //bool bound; public: @@ -44,10 +44,10 @@ namespace SHADE void SetCullingMask (uint32_t const& value) noexcept; void SetAllLayers (void) noexcept; // serialized void ClearAllLayers (void) noexcept; // serialized - void MakeDirty (void) noexcept; - void ClearDirtyFlag (void) noexcept; - void Unbind (void) noexcept; - void SetBound (uint32_t inIndexInBuffer) noexcept; + //void MakeDirty (void) noexcept; + //void ClearDirtyFlag (void) noexcept; + //void Unbind (void) noexcept; + //void SetBound (uint32_t inIndexInBuffer) noexcept; void SetStrength (float value) noexcept; // serialized @@ -57,8 +57,8 @@ namespace SHADE SHVec3 const& GetDirection (void) const noexcept; // serialized SHVec4 const& GetColor (void) const noexcept; // serialized uint32_t const& GetCullingMask (void) const noexcept; // serialized - bool IsDirty (void) const noexcept; - bool GetBound (void) const noexcept; + //bool IsDirty (void) const noexcept; + //bool GetBound (void) const noexcept; uint32_t GetIndexInBuffer (void) const noexcept; float GetStrength (void) const noexcept; RTTR_ENABLE() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 5ca879c4..c4ba9fa1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -240,7 +240,7 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::PerTypeData::AddLight(Handle logicalDevice, SHLightComponent* unboundLight, bool expanded) noexcept + void SHLightingSubSystem::PerTypeData::AddLight(Handle logicalDevice, SHLightComponent* unboundLight, bool& expanded) noexcept { if (unboundLight) { @@ -262,7 +262,7 @@ namespace SHADE WriteLightToAddress(writeLocation, unboundLight); // Set the light component to be bound to that location - unboundLight->SetBound(numLights); + //unboundLight->SetBound(numLights); // Increase light count ++numLights; @@ -280,11 +280,11 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::PerTypeData::ModifyLight(SHLightComponent* lightComp) noexcept - { - void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignedSize * lightComp->GetIndexInBuffer()); - WriteLightToAddress(writeLocation, lightComp); - } + //void SHLightingSubSystem::PerTypeData::ModifyLight(SHLightComponent* lightComp) noexcept + //{ + // void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignedSize * lightComp->GetIndexInBuffer()); + // WriteLightToAddress(writeLocation, lightComp); + //} void SHLightingSubSystem::PerTypeData::WriteToGPU(uint32_t frameIndex) noexcept { @@ -406,7 +406,7 @@ namespace SHADE dynamicOffsets[i].resize(NUM_LIGHT_TYPES + 1); // +1 for the count } - numLightComponents = 0; + //numLightComponents = 0; } /***************************************************************************/ @@ -419,21 +419,25 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::Run(Handle cmdBuffer, uint32_t frameIndex) noexcept + void SHLightingSubSystem::Run(Handle cmdBuffer, /*SHMatrix const& viewMat,*/ uint32_t frameIndex) noexcept { static uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); auto& lightComps = SHComponentManager::GetDense(); bool expanded = false; - bool rewrite = false; - if (numLightComponents > lightComps.size()) - { - rewrite = true; - ResetNumLights(); - } + // First we reset the number of lights. We do this every frame so that we can count how many lights we have + ResetNumLights(); - numLightComponents = lightComps.size(); + //bool rewrite = false; + + //if (numLightComponents > lightComps.size()) + //{ + // rewrite = true; + // ResetNumLights(); + //} + + //numLightComponents = lightComps.size(); for (auto& light : lightComps) { @@ -441,22 +445,22 @@ namespace SHADE // First we want to make sure the light is already bound to the system. if it // isn't, we write it to the correct buffer. - if (!light.GetBound() || rewrite) + //if (!light.GetBound() || rewrite) { perTypeData[enumValue].AddLight(logicalDevice, &light, expanded); - //// add to light count + // add to light count //++lightCountsData[enumValue]; } // if there was modification to the light data - if (light.IsDirty()) + //if (light.IsDirty()) { // Write the data to the CPU - perTypeData[enumValue].ModifyLight(&light); + //perTypeData[enumValue].ModifyLight(&light); // Light is now updated in the container - light.ClearDirtyFlag(); + //light.ClearDirtyFlag(); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h index fb7aa2de..4a667ec5 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -102,8 +102,8 @@ namespace SHADE /*-----------------------------------------------------------------------*/ void InitializeData (Handle logicalDevice, SH_LIGHT_TYPE type) noexcept; void Expand (Handle logicalDevice) noexcept; - void AddLight (Handle logicalDevice, SHLightComponent* unboundLight, bool expanded) noexcept; - void ModifyLight (SHLightComponent* lightComp) noexcept; + void AddLight (Handle logicalDevice, SHLightComponent* unboundLight, bool& expanded) noexcept; + //void ModifyLight (SHLightComponent* lightComp) noexcept; void WriteToGPU (uint32_t frameIndex) noexcept; void ResetNumLights (void) noexcept; @@ -144,7 +144,7 @@ namespace SHADE //! Number of SHLightComponents recorded. If at the beginning of the run function the size returned by the dense //! set is less than the size recorded, rewrite all light components into the its respective buffers. If its more, //! don't do anything. - uint32_t numLightComponents; + //uint32_t numLightComponents; /*-----------------------------------------------------------------------*/ /* PRIVATE MEMBER FUNCTIONS */ @@ -159,7 +159,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void Init (Handle device, Handle descPool) noexcept; - void Run (Handle cmdBuffer, uint32_t frameIndex) noexcept; + void Run (Handle cmdBuffer, /*SHMatrix const& viewMat,*/ uint32_t frameIndex) noexcept; void Exit (void) noexcept; }; From dd8d9130718b4e240986dfa1ce033fb9ab87f679 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 30 Oct 2022 14:22:55 +0800 Subject: [PATCH 548/793] Add widget for drag drop read only field Editor tweaks --- .../src/Editor/DragDrop/SHDragDrop.hpp | 6 +- .../AssetBrowser/SHAssetBrowser.cpp | 2 +- .../HierarchyPanel/SHHierarchyPanel.cpp | 4 +- .../Inspector/SHEditorComponentView.h | 12 +++ .../Inspector/SHEditorComponentView.hpp | 85 +++++++++++++------ .../Inspector/SHEditorInspector.cpp | 31 +++++-- SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 32 +++++++ 7 files changed, 132 insertions(+), 40 deletions(-) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h diff --git a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp index f9849d78..ce0615e1 100644 --- a/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp +++ b/SHADE_Engine/src/Editor/DragDrop/SHDragDrop.hpp @@ -6,12 +6,12 @@ namespace SHADE { //TODO: Convert to RTTR? - constexpr auto DRAG_EID = "DragEID"; - constexpr auto DRAG_RESOURCE = "DragResource"; - struct SHDragDrop { + using DragDropTag = std::string_view; + static constexpr DragDropTag DRAG_EID = "DragEID"; + static constexpr DragDropTag DRAG_RESOURCE = "DragResource"; static bool BeginSource(ImGuiDragDropFlags const flags = 0); /** * \brief Ends the DragDrop Source. ONLY CALL IF BeginSource returns true diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index caad9b10..238ca085 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -65,7 +65,7 @@ namespace SHADE { auto id = asset.id; ImGui::Text("Moving Asset: %zu", id); - SHDragDrop::SetPayload(DRAG_RESOURCE, &id); + SHDragDrop::SetPayload(SHDragDrop::DRAG_RESOURCE, &id); SHDragDrop::EndSource(); } diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 6f65b734..eb0a7fea 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -167,12 +167,12 @@ namespace SHADE } } ImGui::Text(moveLabel.c_str()); - SHDragDrop::SetPayload>(DRAG_EID, &editor->selectedEntities); + SHDragDrop::SetPayload>(SHDragDrop::DRAG_EID, &editor->selectedEntities); SHDragDrop::EndSource(); } else if (SHDragDrop::BeginTarget()) //If Received DragDrop { - if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(DRAG_EID)) //If payload is valid + if (const std::vector* eidPayload = SHDragDrop::AcceptPayload>(SHDragDrop::DRAG_EID)) //If payload is valid { ParentSelectedEntities(eid); SHDragDrop::EndTarget(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h new file mode 100644 index 00000000..69f4c145 --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.h @@ -0,0 +1,12 @@ +#pragma once +#include "ECS_Base/Components/SHComponent.h" + +namespace SHADE +{ + template::value, bool> = true> + static void DrawContextMenu(T* component); + template, bool> = true> + static void DrawComponent(T* component); +} + +#include "SHEditorComponentView.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index c4dfd674..587ffc48 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -13,9 +13,11 @@ #include "Editor/IconsFontAwesome6.h" #include "ECS_Base/Components/SHComponent.h" #include "Editor/SHEditorWidgets.hpp" +#include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" #include "Physics/Components/SHColliderComponent.h" #include "Reflection/SHReflectionMetadata.h" +#include "Resource/SHResourceManager.h" namespace SHADE { @@ -23,16 +25,16 @@ namespace SHADE std::vector GetRTTREnumNames() { auto const rttrType = rttr::type::get(); - if(!rttrType.is_enumeration()) + if (!rttrType.is_enumeration()) return {}; auto const enumAlign = rttrType.get_enumeration(); auto const names = enumAlign.get_names(); std::vector result; - std::transform(names.begin(), names.end(), std::back_inserter(result), [](rttr::string_view const& name){return name.data();}); + std::transform(names.begin(), names.end(), std::back_inserter(result), [](rttr::string_view const& name) {return name.data(); }); return result; } - template::value, bool> = true> + template::value, bool>> static void DrawContextMenu(T* component) { if (!component) @@ -61,7 +63,7 @@ namespace SHADE ImGui::EndPopup(); } } - template, bool> = true> + template, bool>> static void DrawComponent(T* component) { if (!component) @@ -171,9 +173,9 @@ namespace SHADE auto metaMin = property.get_metadata(META::min); auto metaMax = property.get_metadata(META::max); float min{}, max{}; - if(metaMin.is_valid()) + if (metaMin.is_valid()) min = std::max(metaMin.template get_value(), -FLT_MAX * 0.5f); - if(metaMax.is_valid()) + if (metaMax.is_valid()) max = std::min(metaMax.template get_value(), FLT_MAX * 0.5f); if (metaMin.is_valid() && metaMax.is_valid()) { @@ -223,10 +225,10 @@ namespace SHADE return; // Get transform component for extrapolating relative sizes - auto* transformComponent = SHComponentManager::GetComponent(component->GetEID()); + auto* transformComponent = SHComponentManager::GetComponent_s(component->GetEID()); const auto componentType = rttr::type::get(*component); - SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -234,8 +236,8 @@ namespace SHADE auto& colliders = component->GetColliders(); int const size = static_cast(colliders.size()); - ImGui::BeginChild("Colliders", {0.0f, colliders.empty() ? 1.0f : 250.0f}, true); - std::optional colliderToDelete{std::nullopt}; + ImGui::BeginChild("Colliders", { 0.0f, colliders.empty() ? 1.0f : 250.0f }, true); + std::optional colliderToDelete{ std::nullopt }; for (int i{}; i < size; ++i) { ImGui::PushID(i); @@ -244,12 +246,12 @@ namespace SHADE if (collider->GetType() == SHCollider::Type::BOX) { - SHEditorWidgets::BeginPanel( std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + SHEditorWidgets::BeginPanel(std::format("{} Box Collider #{}", ICON_FA_CUBE, i).data(), { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); auto box = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragVec3 ( - "Half Extents", { "X", "Y", "Z" }, - [box, transformComponent] { return (transformComponent->GetWorldScale() * 2.0f) * box->GetHalfExtents(); }, + "Half Extents", { "X", "Y", "Z" }, + [box, transformComponent] { return (transformComponent->GetWorldScale() * 2.0f) * box->GetHalfExtents(); }, [collider](SHVec3 const& vec) { collider->SetBoundingBox(vec); }); } else if (collider->GetType() == SHCollider::Type::SPHERE) @@ -258,14 +260,14 @@ namespace SHADE auto sphere = reinterpret_cast(collider->GetShape()); SHEditorWidgets::DragFloat ( - "Radius", + "Radius", [sphere, transformComponent] { const SHVec3& TF_WORLD_SCALE = transformComponent->GetWorldScale(); const float MAX_SCALE = SHMath::Max({ TF_WORLD_SCALE.x, TF_WORLD_SCALE.y, TF_WORLD_SCALE.z }); return sphere->GetRadius() / MAX_SCALE; - }, - [collider](float const& value) { collider->SetBoundingSphere(value);}); + }, + [collider](float const& value) { collider->SetBoundingSphere(value); }); } else if (collider->GetType() == SHCollider::Type::CAPSULE) { @@ -276,14 +278,14 @@ namespace SHADE SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [&collider] {return collider->GetPositionOffset(); }, [&collider](SHVec3 const& vec) {collider->SetPositionOffset(vec); }); SHEditorWidgets::EndPanel(); } - if(ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) + if (ImGui::Button(std::format("{} Remove Collider #{}", ICON_MD_REMOVE, i).data())) { colliderToDelete = i; } SHEditorWidgets::EndPanel(); ImGui::PopID(); } - if(colliderToDelete.has_value()) + if (colliderToDelete.has_value()) { component->RemoveCollider(colliderToDelete.value()); } @@ -291,11 +293,11 @@ namespace SHADE if (ImGui::BeginMenu("Add Collider")) { - if(ImGui::Selectable("Box Collider")) + if (ImGui::Selectable("Box Collider")) { component->AddBoundingBox(); } - if(ImGui::Selectable("Sphere Collider")) + if (ImGui::Selectable("Sphere Collider")) { component->AddBoundingSphere(); } @@ -308,10 +310,10 @@ namespace SHADE template<> static void DrawComponent(SHLightComponent* component) { - if (!component) + if (!component) return; const auto componentType = rttr::type::get(*component); - SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); ImGui::SameLine(); if (ImGui::CollapsingHeader(componentType.get_name().data())) { @@ -319,19 +321,46 @@ namespace SHADE static auto const enumAlign = rttr::type::get().get_enumeration(); static std::vector list(GetRTTREnumNames()); - + SHEditorWidgets::ComboBox("Type", list, [component] {return static_cast(component->GetType()); }, [component](int const& idx) { component->SetType(static_cast(idx)); }); - SHEditorWidgets::DragVec3("Position", {"X", "Y", "Z"}, [component](){return component->GetPosition();}, [component](SHVec3 const& vec){component->SetPosition(vec);}); - SHEditorWidgets::DragVec3("Direction", {"X", "Y", "Z"}, [component](){return component->GetDirection();}, [component](SHVec3 const& vec){component->SetDirection(vec);}); - SHEditorWidgets::ColorPicker("Color", [component](){return component->GetColor();}, [component](SHVec4 const& rgba){component->SetColor(rgba);}); - SHEditorWidgets::DragFloat("Strength", [component](){return component->GetStrength();}, [component](float const& value){component->SetStrength(value);}); + SHEditorWidgets::DragVec3("Position", { "X", "Y", "Z" }, [component]() {return component->GetPosition(); }, [component](SHVec3 const& vec) {component->SetPosition(vec); }); + SHEditorWidgets::DragVec3("Direction", { "X", "Y", "Z" }, [component]() {return component->GetDirection(); }, [component](SHVec3 const& vec) {component->SetDirection(vec); }); + SHEditorWidgets::ColorPicker("Color", [component]() {return component->GetColor(); }, [component](SHVec4 const& rgba) {component->SetColor(rgba); }); + SHEditorWidgets::DragFloat("Strength", [component]() {return component->GetStrength(); }, [component](float const& value) {component->SetStrength(value); }); } else { DrawContextMenu(component); } } -} \ No newline at end of file + + template<> + static void DrawComponent(SHRenderable* component) + { + if (!component) + return; + const auto componentType = rttr::type::get(*component); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); + ImGui::SameLine(); + if (ImGui::CollapsingHeader(componentType.get_name().data())) + { + DrawContextMenu(component); + SHEditorWidgets::DragDropReadOnlyField("Mesh", "Mesh Asset", [component]() + { + Handle const& mesh = component->GetMesh(); + return SHResourceManager::GetAssetID(mesh).value_or(0); + }, + [component](AssetID const& id) + { + //component->SetMesh(SHResourceManager::LoadOrGet(id)); + }, SHDragDrop::DRAG_RESOURCE); + } + else + { + DrawContextMenu(component); + } + } +} diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 9a31da60..6309d805 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -10,17 +10,14 @@ #include "Editor/SHImGuiHelpers.hpp" #include "Editor/SHEditorWidgets.hpp" -#include "SHEditorComponentView.hpp" -#include "ECS_Base/UnitTesting/SHTestComponents.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Scripting/SHScriptEngine.h" #include "ECS_Base/Managers/SHSystemManager.h" -#include "ECS_Base/Managers/SHSystemManager.h" -#include "AudioSystem/SHAudioSystem.h" #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" #include "Camera/SHCameraComponent.h" +#include "SHEditorComponentView.h" namespace SHADE { @@ -30,8 +27,17 @@ namespace SHADE bool selected = false; if(!SHComponentManager::HasComponent(eid)) { - if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + const char* componentName = rttr::type::get().get_name().data(); + if(selected = ImGui::Selectable(std::format("Add {}", componentName).data()); selected) SHComponentManager::AddComponent(eid); + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Adds", componentName); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::green, "%s", componentName); ImGui::SameLine(); + ImGui::Text("to this entity", componentName); + ImGui::EndTooltip(); + } } return selected; } @@ -42,13 +48,26 @@ namespace SHADE bool selected = false; if (!SHComponentManager::HasComponent(eid)) { - if(selected = ImGui::Selectable(std::format("Add {}", rttr::type::get().get_name().data()).data()); selected) + const char* componentName = rttr::type::get().get_name().data(); + + if(selected = ImGui::Selectable(std::format("Add {}", componentName).data()); selected) { if(SHComponentManager::GetComponent_s(eid) == nullptr) SHComponentManager::AddComponent(eid); SHComponentManager::AddComponent(eid); } + if(ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("Adds", componentName); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::green, "%s", componentName); ImGui::SameLine(); + ImGui::Text("to this entity", componentName); + ImGui::Text("Adds"); ImGui::SameLine(); + ImGui::TextColored(ImGuiColors::red, "%s", rttr::type::get().get_name().data()); ImGui::SameLine(); + ImGui::Text("if the entity does not already have it"); + ImGui::EndTooltip(); + } } return selected; } diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 7a71c5f2..053348d7 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -22,6 +22,8 @@ #include #include +#include "DragDrop/SHDragDrop.hpp" + namespace SHADE { class SH_API SHEditorWidgets @@ -413,6 +415,36 @@ namespace SHADE return changed; } + template + static bool DragDropReadOnlyField(std::string const& label, std::string_view const& fieldVTextValue, std::function const& get, std::function const& set, SHDragDrop::DragDropTag const& dragDropTag, std::string_view const& tooltip = {}) + { + std::string text = fieldVTextValue.data(); + ImGui::BeginGroup(); + ImGui::PushID(label.data()); + TextLabel(label); + bool const changed = ImGui::InputText("##", &text, ImGuiInputTextFlags_ReadOnly, nullptr, nullptr); + if(SHDragDrop::BeginTarget()) + { + if(T* payload = SHDragDrop::AcceptPayload(dragDropTag)) + { + SHCommandManager::PerformCommand(std::reinterpret_pointer_cast(std::make_shared>(get(), *payload, set)), false); + SHDragDrop::EndTarget(); + } + } + ImGui::PopID(); + ImGui::EndGroup(); + if (!tooltip.empty()) + { + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text(tooltip.data()); + ImGui::EndTooltip(); + } + } + return changed; + } + template static bool DragScalar(const std::string& label, ImGuiDataType data_type, std::function get, std::function set, float speed = 1.0f, T p_min = T(), T p_max = T(), const char* displayFormat = "%.3f", std::string_view const& tooltip = {}, ImGuiSliderFlags flags = 0) From 605ff9710dd01586fc49801e8b23e86c6f76a1af Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 30 Oct 2022 14:37:30 +0800 Subject: [PATCH 549/793] Added Matrix * Vec4 --- SHADE_Engine/src/Math/SHMatrix.cpp | 2 +- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 4 +--- SHADE_Engine/src/Math/Vector/SHVec4.cpp | 12 +++++++++--- SHADE_Engine/src/Math/Vector/SHVec4.h | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/Math/SHMatrix.cpp b/SHADE_Engine/src/Math/SHMatrix.cpp index ec3951e2..5f082ae5 100644 --- a/SHADE_Engine/src/Math/SHMatrix.cpp +++ b/SHADE_Engine/src/Math/SHMatrix.cpp @@ -191,7 +191,7 @@ namespace SHADE SHVec4 SHMatrix::operator*(const SHVec4& rhs) const noexcept { - return SHVec4::Transform3D(rhs, *this); + return SHVec4::Transform(rhs, *this); } SHMatrix SHMatrix::operator*(float rhs) const noexcept diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index c3e3acf2..cbd8ca32 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -445,9 +445,7 @@ namespace SHADE { SHVec3 result; - const XMMATRIX TF = XMLoadFloat4x4(&transformMtx); - - XMStoreFloat3(&result, XMVector3TransformCoord(v, TF)); + XMStoreFloat3(&result, XMVector3TransformCoord(v, transformMtx)); return result; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.cpp b/SHADE_Engine/src/Math/Vector/SHVec4.cpp index 9857818a..88e7f5c9 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec4.cpp @@ -460,13 +460,19 @@ namespace SHADE return result; } + SHVec4 SHVec4::Transform(const SHVec4& v, const SHMatrix& transformMtx) noexcept + { + SHVec4 result; + + XMStoreFloat4(&result, XMVector4Transform(v, transformMtx)); + return result; + } + SHVec4 SHVec4::Transform3D(const SHVec4& v, const SHMatrix& transformMtx) noexcept { SHVec4 result; - const XMMATRIX TF = XMLoadFloat4x4(&transformMtx); - - XMStoreFloat4(&result, XMVector3TransformCoord(v, TF)); + XMStoreFloat4(&result, XMVector3TransformCoord(v, transformMtx)); return result; } } \ No newline at end of file diff --git a/SHADE_Engine/src/Math/Vector/SHVec4.h b/SHADE_Engine/src/Math/Vector/SHVec4.h index ce341bed..db8ef860 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec4.h +++ b/SHADE_Engine/src/Math/Vector/SHVec4.h @@ -134,6 +134,7 @@ namespace SHADE [[nodiscard]] static SHVec4 Project3D (const SHVec4& v, const SHVec4& u) noexcept; [[nodiscard]] static SHVec4 Reflect (const SHVec4& v, const SHVec4& normal) noexcept; [[nodiscard]] static SHVec4 Reflect3D (const SHVec4& v, const SHVec4& normal) noexcept; + [[nodiscard]] static SHVec4 Transform (const SHVec4& v, const SHMatrix& transformMtx) noexcept; [[nodiscard]] static SHVec4 Transform3D (const SHVec4& v, const SHMatrix& transformMtx) noexcept; }; From ca659e272b33c0a2cb1cd30c810582076b799ddf Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 30 Oct 2022 15:01:36 +0800 Subject: [PATCH 550/793] Designate keys for Copy/Paste of entities in hierarchy panel Change default brush for SHWindow so we don't flashbang everytime we run engine --- .../HierarchyPanel/SHHierarchyPanel.cpp | 34 +++++++++++++++++-- .../HierarchyPanel/SHHierarchyPanel.h | 3 +- .../src/Graphics/Windowing/SHWindow.h | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index dbe598ce..44369040 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -83,6 +83,23 @@ namespace SHADE editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); + + if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) + { + CopySelectedEntities(); + } + if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + PasteEntities(); + } + if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + const auto editor = SHSystemManager::GetSystem(); + if(editor->selectedEntities.size() == 1) + { + PasteEntities(editor->selectedEntities.back()); + } + } } ImGui::End(); } @@ -204,11 +221,11 @@ namespace SHADE } if(ImGui::Selectable("Copy")) { - SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + CopySelectedEntities(); } if(ImGui::Selectable("Paste")) { - SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard())); + PasteEntities(); skipFrame = true; ImGui::EndPopup(); if(isNodeOpen) @@ -217,7 +234,7 @@ namespace SHADE } if(ImGui::Selectable("Paste as Child")) { - SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), eid)); + PasteEntities(eid); skipFrame = true; } if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) @@ -345,6 +362,17 @@ namespace SHADE }); } + void SHHierarchyPanel::CopySelectedEntities() + { + const auto editor = SHSystemManager::GetSystem(); + SHClipboardUtilities::WriteToClipboard(SHSerialization::SerializeEntitiesToString(editor->selectedEntities)); + } + + void SHHierarchyPanel::PasteEntities(EntityID parentEID) + { + SetScrollTo(SHSerialization::DeserializeEntitiesFromString(SHClipboardUtilities::GetDataFromClipboard(), parentEID)); + } + void SHCreateEntityCommand::Execute() { EntityID newEID = SHEntityManager::CreateEntity(eid); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 8fae5d6d..58931058 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -30,7 +30,8 @@ namespace SHADE void CreateChildEntity(EntityID parentEID) const noexcept; void ParentSelectedEntities(EntityID parentEID) const noexcept; void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); - + void CopySelectedEntities(); + void PasteEntities(EntityID parentEID = MAX_EID); bool skipFrame = false; std::string filter; bool isAnyNodeSelected = false; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 8068c82e..8595ce4b 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -48,7 +48,7 @@ namespace SHADE //bool canFullscreen = true; - unsigned bgColor = WHITE_BRUSH; + unsigned bgColor = DKGRAY_BRUSH; //bool transparent = false; From 03c0d100140b214458077aa50cc9ca10cde705d7 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sun, 30 Oct 2022 15:10:39 +0800 Subject: [PATCH 551/793] Fixed bug where objects without transform causes a crash on reparenting --- SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index a2ab6880..c90e4431 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -263,6 +263,9 @@ namespace SHADE auto* node = EVENT_DATA->data->node; auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); + if (tf == nullptr) + return EVENT_DATA->handle; + // Recompute local transform and store localToWorld Matrix SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; From 13ad7d46c6fb1d5d1b8833d947cc32d35d30e49b Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 30 Oct 2022 15:19:42 +0800 Subject: [PATCH 552/793] Fix crash when entity w no transform being set as child of entity w transform Add select all --- .../HierarchyPanel/SHHierarchyPanel.cpp | 145 ++++++++++-------- .../HierarchyPanel/SHHierarchyPanel.h | 1 + .../src/Math/Transform/SHTransformSystem.cpp | 3 + 3 files changed, 86 insertions(+), 63 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 44369040..93232917 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -48,7 +48,7 @@ namespace SHADE if (Begin()) { - if(skipFrame) + if (skipFrame) { ImGui::End(); skipFrame = false; @@ -63,9 +63,9 @@ namespace SHADE for (const auto child : children) { - if(child) + if (child) RecursivelyDrawEntityNode(child); - if(skipFrame) + if (skipFrame) { ImGui::End(); return; @@ -77,29 +77,36 @@ namespace SHADE SHLOG_WARNING("Scene Graph root is null! Unable to render hierarchy.") } - if(ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) + if (ImGui::IsWindowHovered() && !SHDragDrop::hasDragDrop && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { - if(auto editor = SHSystemManager::GetSystem()) + if (auto editor = SHSystemManager::GetSystem()) editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - - if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) + if (ImGui::IsWindowFocused()) { - CopySelectedEntities(); - } - if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) - { - PasteEntities(); - } - if(ImGui::IsWindowFocused() && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) - { - const auto editor = SHSystemManager::GetSystem(); - if(editor->selectedEntities.size() == 1) + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A)) { - PasteEntities(editor->selectedEntities.back()); + SelectAllEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) + { + CopySelectedEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + PasteEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + const auto editor = SHSystemManager::GetSystem(); + if (editor->selectedEntities.size() == 1) + { + PasteEntities(editor->selectedEntities.back()); + } } } + } ImGui::End(); } @@ -111,7 +118,7 @@ namespace SHADE void SHHierarchyPanel::SetScrollTo(EntityID eid) { - if(eid == MAX_EID) + if (eid == MAX_EID) return; scrollTo = eid; } @@ -126,7 +133,7 @@ namespace SHADE auto size = ImGui::GetWindowSize(); auto g = ImGui::GetCurrentContext(); ImGui::SetCursorPosX(size.x - g->Style.FramePadding.x * 15.0f); - if(ImGui::SmallButton(ICON_MD_DESELECT)) + if (ImGui::SmallButton(ICON_MD_DESELECT)) { auto editor = SHSystemManager::GetSystem(); editor->selectedEntities.clear(); @@ -153,7 +160,7 @@ namespace SHADE ImRect SHHierarchyPanel::RecursivelyDrawEntityNode(SHSceneNode* const currentNode) { - if(currentNode == nullptr) + if (currentNode == nullptr) return {}; auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); @@ -161,7 +168,7 @@ namespace SHADE auto& children = currentNode->GetChildren(); EntityID eid = currentNode->GetEntityID(); - if(scrollTo != MAX_EID && eid == scrollTo) + if (scrollTo != MAX_EID && eid == scrollTo) { ImGui::SetScrollHereY(); scrollTo = MAX_EID; @@ -188,12 +195,12 @@ namespace SHADE if (SHDragDrop::BeginSource()) { std::string moveLabel = "Moving EID: "; - if(!isSelected) + if (!isSelected) editor->selectedEntities.push_back(eid); - for(int i = 0; i < static_cast(editor->selectedEntities.size()); ++i) + for (int i = 0; i < static_cast(editor->selectedEntities.size()); ++i) { moveLabel.append(std::to_string(editor->selectedEntities[i])); - if(i + 1 < static_cast(editor->selectedEntities.size())) + if (i + 1 < static_cast(editor->selectedEntities.size())) { moveLabel.append(", "); } @@ -212,43 +219,43 @@ namespace SHADE } //Context menu - if(ImGui::BeginPopupContextItem(std::to_string(eid).c_str())) + if (ImGui::BeginPopupContextItem(std::to_string(eid).c_str())) { - if(!isSelected) + if (!isSelected) { editor->selectedEntities.clear(); editor->selectedEntities.push_back(eid); } - if(ImGui::Selectable("Copy")) + if (ImGui::Selectable("Copy")) { CopySelectedEntities(); } - if(ImGui::Selectable("Paste")) + if (ImGui::Selectable("Paste")) { PasteEntities(); skipFrame = true; ImGui::EndPopup(); - if(isNodeOpen) + if (isNodeOpen) ImGui::TreePop(); return nodeRect; } - if(ImGui::Selectable("Paste as Child")) + if (ImGui::Selectable("Paste as Child")) { PasteEntities(eid); skipFrame = true; } - if(ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) + if (ImGui::Selectable(std::format("{} Delete", ICON_MD_DELETE).data())) { SHEntityManager::DestroyEntity(eid); } - - if((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) + + if ((currentNode->GetParent() != sceneGraph.GetRoot()) && ImGui::Selectable(std::format("{} Unparent Selected", ICON_MD_NORTH_WEST).data())) { ParentSelectedEntities(MAX_EID); } ImGui::EndPopup(); } - + //Handle node selection if (ImGui::IsItemHovered()) { @@ -256,11 +263,11 @@ namespace SHADE { if (!isSelected) { - if(ImGui::IsKeyDown(ImGuiKey_LeftShift)) + if (ImGui::IsKeyDown(ImGuiKey_LeftShift)) { - if(editor->selectedEntities.size() >= 1) + if (editor->selectedEntities.size() >= 1) { - SelectRangeOfEntities(editor->selectedEntities[0], eid); + SelectRangeOfEntities(editor->selectedEntities[0], eid); } else editor->selectedEntities.clear(); } @@ -318,12 +325,12 @@ namespace SHADE auto const editor = SHSystemManager::GetSystem(); SHEntityParentCommand::EntityParentData entityParentData; std::vector parentedEIDS; - for(auto const& eid : editor->selectedEntities) + for (auto const& eid : editor->selectedEntities) { - if(sceneGraph.GetChild(eid, parentEID) == nullptr) + if (sceneGraph.GetChild(eid, parentEID) == nullptr) { parentedEIDS.push_back(eid); - if(auto parent = sceneGraph.GetParent(eid)) + if (auto parent = sceneGraph.GetParent(eid)) entityParentData[eid].oldParentEID = parent->GetEntityID(); entityParentData[eid].newParentEID = parentEID; } @@ -338,28 +345,40 @@ namespace SHADE editor->selectedEntities.clear(); auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); sceneGraph.Traverse([&](SHSceneNode* nodePtr) - { - auto eid = nodePtr->GetEntityID(); - if(!startSelecting) { - if(eid == beginEID || eid == endEID) + auto eid = nodePtr->GetEntityID(); + if (!startSelecting) { - startSelecting = true; - editor->selectedEntities.push_back(eid); - } - } - else - { - if(!endSelecting) - { - editor->selectedEntities.push_back(eid); - if(eid == endEID || eid == beginEID) + if (eid == beginEID || eid == endEID) { - endSelecting = true; + startSelecting = true; + editor->selectedEntities.push_back(eid); } } - } - }); + else + { + if (!endSelecting) + { + editor->selectedEntities.push_back(eid); + if (eid == endEID || eid == beginEID) + { + endSelecting = true; + } + } + } + }); + } + + void SHHierarchyPanel::SelectAllEntities() + { + const auto editor = SHSystemManager::GetSystem(); + editor->selectedEntities.clear(); + auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); + sceneGraph.Traverse([&](SHSceneNode* nodePtr) + { + auto eid = nodePtr->GetEntityID(); + editor->selectedEntities.push_back(eid); + }); } void SHHierarchyPanel::CopySelectedEntities() @@ -376,7 +395,7 @@ namespace SHADE void SHCreateEntityCommand::Execute() { EntityID newEID = SHEntityManager::CreateEntity(eid); - if(eid == MAX_EID) + if (eid == MAX_EID) eid = newEID; } @@ -388,9 +407,9 @@ namespace SHADE void SHEntityParentCommand::Execute() { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for(auto const& eid : entities) + for (auto const& eid : entities) { - if(entityParentData[eid].newParentEID == MAX_EID) + if (entityParentData[eid].newParentEID == MAX_EID) sceneGraph.SetParent(eid, nullptr); else sceneGraph.SetParent(eid, entityParentData[eid].newParentEID); @@ -400,9 +419,9 @@ namespace SHADE void SHEntityParentCommand::Undo() { auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph(); - for(auto const& eid : entities) + for (auto const& eid : entities) { - if(entityParentData[eid].oldParentEID == MAX_EID) + if (entityParentData[eid].oldParentEID == MAX_EID) sceneGraph.SetParent(eid, nullptr); else sceneGraph.SetParent(eid, entityParentData[eid].oldParentEID); diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h index 58931058..9b26e9d6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.h @@ -30,6 +30,7 @@ namespace SHADE void CreateChildEntity(EntityID parentEID) const noexcept; void ParentSelectedEntities(EntityID parentEID) const noexcept; void SelectRangeOfEntities(EntityID beginEID, EntityID EndEID); + void SelectAllEntities(); void CopySelectedEntities(); void PasteEntities(EntityID parentEID = MAX_EID); bool skipFrame = false; diff --git a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp index a2ab6880..156a47cc 100644 --- a/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp +++ b/SHADE_Engine/src/Math/Transform/SHTransformSystem.cpp @@ -263,6 +263,9 @@ namespace SHADE auto* node = EVENT_DATA->data->node; auto* tf = SHComponentManager::GetComponent_s(node->GetEntityID()); + if(tf == nullptr) + return EVENT_DATA->handle; + // Recompute local transform and store localToWorld Matrix SHMatrix localToWorld = SHMatrix::Identity; SHMatrix worldToLocal = SHMatrix::Identity; From 4711a131eb875fcb43706834c42960189e6e4fcf Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 16:35:55 +0800 Subject: [PATCH 553/793] Shifted the lighting system run outside the viewport loop. - Since lighting is only calculated in the world render graph for now, this will do just fine - Renderer takes in a view and projection matrix and does the transpose of the multiplication in the renderer --- Assets/Shaders/TestCube_VS.glsl | 1 + Assets/Shaders/TestCube_VS.shshaderb | Bin 3305 -> 3385 bytes .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 16 ++++++++++--- .../MiddleEnd/Interface/SHRenderer.cpp | 17 ++++++++++---- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 8 ++++--- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 22 ++++++++++++------ .../MiddleEnd/Lights/SHLightingSubSystem.h | 8 ++++--- 7 files changed, 51 insertions(+), 21 deletions(-) diff --git a/Assets/Shaders/TestCube_VS.glsl b/Assets/Shaders/TestCube_VS.glsl index 49f107dd..44c6e956 100644 --- a/Assets/Shaders/TestCube_VS.glsl +++ b/Assets/Shaders/TestCube_VS.glsl @@ -33,6 +33,7 @@ layout(set = 2, binding = 0) uniform CameraData { vec4 position; mat4 vpMat; + mat4 viewMat; } cameraData; void main() diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb index 03e23af37451b6c4c0791110541c7b6e31d07bbe..2544abd58b576513f2e8185a0b84ef070e6a42fe 100644 GIT binary patch delta 105 zcmaDUxl@Xn!GL!o^CKo(); + { +#ifdef SHEDITOR + auto editorSystem = SHSystemManager::GetSystem(); + if (editorSystem->editorState != SHEditor::State::PLAY) + lightingSubSystem->Run(cameraSystem->GetEditorCamera()->GetViewMatrix(), frameIndex); + else + lightingSubSystem->Run(worldRenderer->GetCameraDirector()->GetViewMatrix(), frameIndex); +#else + lightingSubSystem->Run(worldRenderer->GetCameraDirector()->GetViewMatrix(), frameIndex); +#endif + } // For every viewport for (int vpIndex = 0; vpIndex < static_cast(viewports.size()); ++vpIndex) @@ -394,8 +405,7 @@ namespace SHADE currentCmdBuffer->BindIndexBuffer(buffer, 0); } - // Bind the descriptor set for lights - lightingSubSystem->Run(currentCmdBuffer, frameIndex); + lightingSubSystem->BindDescSet(currentCmdBuffer, frameIndex); // Bind textures auto textureDescSet = texLibrary.GetTextureDescriptorSetGroup(); @@ -419,7 +429,7 @@ namespace SHADE { auto editorSystem = SHSystemManager::GetSystem(); if (editorSystem->editorState != SHEditor::State::PLAY) - worldRenderer->UpdateDataAndBind(currentCmdBuffer, frameIndex, SHMatrix::Transpose(cameraSystem->GetEditorCamera()->GetProjMatrix() * cameraSystem->GetEditorCamera()->GetViewMatrix())); + worldRenderer->UpdateDataAndBind(currentCmdBuffer, frameIndex, cameraSystem->GetEditorCamera()->GetViewMatrix(), cameraSystem->GetEditorCamera()->GetProjMatrix()); else renderers[renIndex]->UpdateDataAndBind(currentCmdBuffer, frameIndex); } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 962130be..a44e0661 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -83,13 +83,14 @@ namespace SHADE { if (camera && cameraDirector) { - UpdateDataAndBind(cmdBuffer, frameIndex, SHMatrix::Transpose(cameraDirector->GetVPMatrix())); + //UpdateDataAndBind(cmdBuffer, frameIndex, SHMatrix::Transpose(cameraDirector->GetVPMatrix())); + UpdateDataAndBind(cmdBuffer, frameIndex, cameraDirector->GetViewMatrix(), cameraDirector->GetProjMatrix()); } } - void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix exteriorMatrix) noexcept + void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix viewMatrix, SHMatrix projMatrix) noexcept { - SetViewProjectionMatrix(exteriorMatrix); + SetViewProjectionMatrix(viewMatrix, projMatrix); //cpuCameraData.viewProjectionMatrix = camera->GetViewProjectionMatrix(); cameraBuffer->WriteToMemory(&cpuCameraData, sizeof(SHShaderCameraData), 0, cameraDataAlignedSize * frameIndex); @@ -103,10 +104,11 @@ namespace SHADE { } - void SHRenderer::SetViewProjectionMatrix(SHMatrix const& vpMatrix) noexcept + void SHRenderer::SetViewProjectionMatrix(SHMatrix viewMatrix, SHMatrix projMatrix) noexcept { //cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); - cpuCameraData.viewProjectionMatrix = vpMatrix; + cpuCameraData.viewProjectionMatrix = SHMatrix::Transpose(projMatrix * viewMatrix); + cpuCameraData.viewMatrix = viewMatrix; } Handle SHRenderer::GetRenderGraph(void) const noexcept @@ -119,4 +121,9 @@ namespace SHADE return commandBuffers[frameIndex]; } + Handle SHRenderer::GetCameraDirector(void) const noexcept + { + return cameraDirector; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index 87cf8ee9..b7c6718c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -46,6 +46,7 @@ namespace SHADE { SHVec4 cameraPosition; SHMatrix viewProjectionMatrix; + SHMatrix viewMatrix; }; /*---------------------------------------------------------------------------------*/ @@ -79,15 +80,16 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ void Draw(uint32_t frameIndex, Handle descPool) noexcept; void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept; - void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix exteriorMatrix) noexcept; + void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix viewMatrix, SHMatrix projMatrix) noexcept; void UpdateCameraDataToBuffer (void) noexcept; - void SetViewProjectionMatrix (SHMatrix const& vpMatrix) noexcept; + void SetViewProjectionMatrix (SHMatrix viewMatrix, SHMatrix projMatrix) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ /*-----------------------------------------------------------------------------*/ - Handle GetRenderGraph (void) const noexcept; + Handle GetRenderGraph (void) const noexcept; Handle GetCommandBuffer(uint32_t frameIndex) const noexcept; + Handle GetCameraDirector (void) const noexcept; private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index c4ba9fa1..ac7212bf 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -8,6 +8,7 @@ #include "SHLightComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "SHLightComponent.h" +#include "Math/Vector/SHVec4.h" namespace SHADE { @@ -31,7 +32,7 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::PerTypeData::WriteLightToAddress(void* address, SHLightComponent* lightComp) noexcept + void SHLightingSubSystem::PerTypeData::WriteLightToAddress(void* address, SHMatrix const& viewMat, SHLightComponent* lightComp) noexcept { auto const& lightData = lightComp->GetLightData(); switch (lightData.type) @@ -41,6 +42,7 @@ namespace SHADE SHDirectionalLightData* lightPtr = reinterpret_cast(address); lightPtr->cullingMask = lightData.cullingMask; + //lightPtr->direction = viewMat * SHVec4 (lightData.direction[0], lightData.direction[1], lightData.direction[2], 0.0f); lightPtr->direction = lightData.direction; lightPtr->diffuseColor = lightData.color; lightPtr->active = lightComp->isActive; @@ -240,7 +242,7 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::PerTypeData::AddLight(Handle logicalDevice, SHLightComponent* unboundLight, bool& expanded) noexcept + void SHLightingSubSystem::PerTypeData::AddLight(Handle logicalDevice, SHLightComponent* unboundLight, SHMatrix const& viewMat, bool& expanded) noexcept { if (unboundLight) { @@ -259,7 +261,7 @@ namespace SHADE void* writeLocation = reinterpret_cast(intermediateData.get()) + (lightDataAlignedSize * numLights); // Write the light data to address - WriteLightToAddress(writeLocation, unboundLight); + WriteLightToAddress(writeLocation, viewMat, unboundLight); // Set the light component to be bound to that location //unboundLight->SetBound(numLights); @@ -419,7 +421,7 @@ namespace SHADE */ /***************************************************************************/ - void SHLightingSubSystem::Run(Handle cmdBuffer, /*SHMatrix const& viewMat,*/ uint32_t frameIndex) noexcept + void SHLightingSubSystem::Run(SHMatrix const& viewMat, uint32_t frameIndex) noexcept { static uint32_t constexpr NUM_LIGHT_TYPES = SHUtilities::ToUnderlying(SH_LIGHT_TYPE::NUM_TYPES); @@ -447,7 +449,7 @@ namespace SHADE // isn't, we write it to the correct buffer. //if (!light.GetBound() || rewrite) { - perTypeData[enumValue].AddLight(logicalDevice, &light, expanded); + perTypeData[enumValue].AddLight(logicalDevice, &light, viewMat, expanded); // add to light count //++lightCountsData[enumValue]; @@ -492,8 +494,6 @@ namespace SHADE // so we do it anyway. #NoteToSelf: if at any point it affects performance, do a check before computing. ComputeDynamicOffsets(); - // Bind descriptor set (We bind at an offset because the buffer holds NUM_FRAME_BUFFERS sets of data). - cmdBuffer->BindDescriptorSet(lightingDataDescSet, SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, {dynamicOffsets[frameIndex]}); } @@ -509,4 +509,12 @@ namespace SHADE { } + + void SHLightingSubSystem::BindDescSet(Handle cmdBuffer, uint32_t frameIndex) noexcept + { + //Bind descriptor set(We bind at an offset because the buffer holds NUM_FRAME_BUFFERS sets of data). + cmdBuffer->BindDescriptorSet(lightingDataDescSet, SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::DYNAMIC_GLOBALS, { dynamicOffsets[frameIndex] }); + + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h index 4a667ec5..ae6caead 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.h @@ -95,14 +95,14 @@ namespace SHADE //! to the GPU that stores NUM_FRAME_BUFFERS copies. std::unique_ptr intermediateData; - void WriteLightToAddress (void* address, SHLightComponent* lightComp) noexcept; + void WriteLightToAddress (void* address, SHMatrix const& viewMat, SHLightComponent* lightComp) noexcept; public: /*-----------------------------------------------------------------------*/ /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void InitializeData (Handle logicalDevice, SH_LIGHT_TYPE type) noexcept; void Expand (Handle logicalDevice) noexcept; - void AddLight (Handle logicalDevice, SHLightComponent* unboundLight, bool& expanded) noexcept; + void AddLight (Handle logicalDevice, SHLightComponent* unboundLight, SHMatrix const& viewMat, bool& expanded) noexcept; //void ModifyLight (SHLightComponent* lightComp) noexcept; void WriteToGPU (uint32_t frameIndex) noexcept; void ResetNumLights (void) noexcept; @@ -159,8 +159,10 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void Init (Handle device, Handle descPool) noexcept; - void Run (Handle cmdBuffer, /*SHMatrix const& viewMat,*/ uint32_t frameIndex) noexcept; + void Run (SHMatrix const& viewMat, uint32_t frameIndex) noexcept; void Exit (void) noexcept; + void BindDescSet (Handle cmdBuffer, uint32_t frameIndex) noexcept; + }; } From 39b5ac0774081d9fb9336d6512a1a90b02eea1e7 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 16:52:40 +0800 Subject: [PATCH 554/793] LIGHTING NOW DONE IN VIEW SPACE --- Assets/Shaders/TestCube_VS.glsl | 15 ++++++++++++--- Assets/Shaders/TestCube_VS.shshaderb | Bin 3385 -> 3525 bytes .../MiddleEnd/Interface/SHRenderer.cpp | 2 +- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 7 +++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Assets/Shaders/TestCube_VS.glsl b/Assets/Shaders/TestCube_VS.glsl index 44c6e956..867b945f 100644 --- a/Assets/Shaders/TestCube_VS.glsl +++ b/Assets/Shaders/TestCube_VS.glsl @@ -38,14 +38,23 @@ layout(set = 2, binding = 0) uniform CameraData void main() { - Out2.materialIndex = gl_InstanceIndex; Out2.eid = integerData[0]; Out2.lightLayerIndex = integerData[1]; - Out.vertPos = worldTransform * vec4(aVertexPos, 1.0f); + // for transforming gBuffer position and normal data + mat4 modelViewMat = cameraData.viewMat * worldTransform; + + // gBuffer position will be in view space + Out.vertPos = modelViewMat * vec4(aVertexPos, 1.0f); + + // uvs for texturing in fragment shader Out.uv = aUV; - Out.normal.rgb = mat3(transpose(inverse(worldTransform))) * aNormal.rgb; + + // normals are also in view space + Out.normal.rgb = mat3(transpose(inverse(modelViewMat))) * aNormal.rgb; Out.normal.rgb = normalize (Out.normal.rgb); + + // clip space for rendering gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); } \ No newline at end of file diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb index 2544abd58b576513f2e8185a0b84ef070e6a42fe..b7e1294bb1b2fcbe7f31212c0662330feff59f48 100644 GIT binary patch literal 3525 zcmZ9MYj+c65XYb922!q4E-GTuqE)N)28beHY%#3{5^Sk=!lQZX;`OkG{=860JgiBAkv~1uZ zkpq6@C4L-u;bt`OpQJh>(+TJNU~phdePJ-%OWNL3KhCVl!8dkh37_Vwip%#7!`@~z zO}wb@TUhC;X&-_p@rQoA?j@d(n!6(V(Rkp8JAwcBo<}=U+gEk3c_TmeQd3#h92jRZ zo(4%UPJ3LFH8}O|PqF}pQS*Ktmi)_-`-Pa~XD*M&aX8qHy=b~Sjz{D#yL79LWlWr{xChI{q8%4|f*kW|EFg(!F z1NM_c{S3z2_M)L5r88>fv%f4He`IDqFIvgv1>NY`rwzrh`7KH2Y{@spyA{A8*U@ftg=Rm68vPdfA7?Lvlkh2R*w%{k$V&=84Qf<}DXx=84Q4 z&{GF8`KX6EaOe@oFzms&4Z{bF-WmoEmeo^EiK7d+L&p3nxBtut#Puz|iwAi7$HdKO-Lf z1?ivHO>Sz&{;Y0v;KV~_ufXuf_MC`={dwK!to|3olMmVQy(FIa=6^{%KIdgw*9}oi zBj@S&Mahf0!H~(dq?@?l^pD*_j|^e+n(mSa9rYtG=NS6ebKdM%B+rSEu}5YP!KmpS z-E|Q$$;p3HLj=xE%=dKj&FF}M%-w-+X#~ti% ziz8M;g#4*)Y^ec%{oG#w@z(5Oe)Rgg^G^*~LE<7u_upxv}B<*v&g4_TA=y zj2*SHgP)0-DOJOSyuXf!T8NFU&Fz7B z-Xi^_-mgU1f;Z*M+uRn>FZPFBruMq-ha&7b>o>{McXf`&vAH)QBH;VCMI& zc=O|b!2G@wk00NSA9i522j7b~KfbRa`3DiW_36hP1Ls(um^I)3Q;sobY^|oAc#B=^ z!6V`LaHt8pMV_Z-L`%HMLf94 zzltxu^-wZ4;I4xZk$nOR# literal 3385 zcmZ9NdwUaA5XMiNOOXPC$VEj=S}$m|Rs}?nOYJ2sh9=lj@5Dp0gw@R^PqGc*Uw#Gs zNPa5+@p*WEyE|ncPoH_t%scPQnKL^lbt}hRx=OQ)bI#4UqwcsHW{^AOW`#I6@2ctE zXzn(bCrNMl@|6`RCtN9I!g*PLtg>X_!x;Ujg!HdU-jQ6Ad?@)`vMG5WfmqVttoDDD zsH~_)v(sp`8qJMPcQooul4nuSiNZMO^ulq_O~Ppa??{0c#@*Kgesz9^kKvH8aHlBL{czVS0R_?dNV7B+K_%{*fB28w>Z12#3|=WSq9@0Mz!e=N>q z83rGW-7sRnsMRoZu_Tw6jt zgDvGbt^YOI$ApugJn*rZ3o!ir8WM}&;!jD(e@^~av~xB!!#}MZ zA2|82nJX~j;hvGO;Gflw&+30oI_F{Ad2dK3zr|mWPRv;`YuXWNspmTLfxVF1#L}-t z?Qp;|ZrQypo%8TfFE(=zc3$?o+ToIudf(GNBLRnx&AR~O%n!8JB*epC(vA-tJ~rde(JrcowLB~yiMuG-_CtC?bgp7 z>GbG=;(yX!OLcmd{Z7_%3}5CiyI-Vp25*{kupi_Yz2+?tN1qUC{Z%{X;3EdxOTh3y z%ysK6z2cqBNUka;JiY^qv;P&s8@(a4s{Mq7*EvLJ$$a?LLw) zBllE8P5Z|ZFqUB}(!uDBVV~p}eQN7Ab?y8^CmufjWyxR4i|;cDXTzaZX77rG`L~{7 z!=ttZ?bjsCAADx-O9_1I4>laT+jZ&O?U=q0cl}C2&E&$jm-pa?bbQ=}+HOg}SS|gU z(U;p2aD+u3?rJfs(uo1Ln6IUSBP@Kym^InNfLYACbZ~@aF>T#}_q8FpEg?5t`)&>C zn-cmUtRXM5^(F&ZjOPotWSJv?!T8~8`|MoP4}f+?qU!2 zg%iV~CU{^L_nmZ$EB4@f;dT~r@W3qYheBMj2S4U<)&qE8^x&cPuEa~2ZJXy_j+-6G zz9jiuG0gWP2^?^ni@x;Ydwwh%jAh>=lnzD@4f`#}sL$T>@6w5fkH7eyBiWn}$G+o0 SI={>F5_*FT??0V%P4XNphWKOv diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index a44e0661..655451ec 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -108,7 +108,7 @@ namespace SHADE { //cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); cpuCameraData.viewProjectionMatrix = SHMatrix::Transpose(projMatrix * viewMatrix); - cpuCameraData.viewMatrix = viewMatrix; + cpuCameraData.viewMatrix = SHMatrix::Transpose(viewMatrix); } Handle SHRenderer::GetRenderGraph(void) const noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index ac7212bf..35bcc72f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -9,6 +9,7 @@ #include "ECS_Base/Managers/SHComponentManager.h" #include "SHLightComponent.h" #include "Math/Vector/SHVec4.h" +#include "Math/SHMatrix.h" namespace SHADE { @@ -41,9 +42,11 @@ namespace SHADE { SHDirectionalLightData* lightPtr = reinterpret_cast(address); + SHVec4 transformedDir = viewMat * SHVec4(lightData.direction[0], lightData.direction[1], lightData.direction[2], 0.0f); + lightPtr->cullingMask = lightData.cullingMask; - //lightPtr->direction = viewMat * SHVec4 (lightData.direction[0], lightData.direction[1], lightData.direction[2], 0.0f); - lightPtr->direction = lightData.direction; + lightPtr->direction = SHVec3 (transformedDir.x, transformedDir.y, transformedDir.z); + //lightPtr->direction = lightData.direction; lightPtr->diffuseColor = lightData.color; lightPtr->active = lightComp->isActive; break; From 0aebc3053fc6094fbc90f7fbdd3c283aebda8c63 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 30 Oct 2022 18:26:49 +0800 Subject: [PATCH 555/793] Asset browser (currently only displays asset and can drag drop for setting of mesh. except setting mesh in inspector doesnt work) --- .../AssetBrowser/SHAssetBrowser.cpp | 154 +++++++++++++----- .../AssetBrowser/SHAssetBrowser.h | 13 +- SHADE_Engine/src/Editor/SHEditor.cpp | 2 +- 3 files changed, 128 insertions(+), 41 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp index 238ca085..8c71eb8f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.cpp @@ -4,14 +4,16 @@ #include "Editor/IconsMaterialDesign.h" #include "Editor/SHImGuiHelpers.hpp" #include +#include #include "Assets/SHAssetManager.h" +#include "Editor/IconsFontAwesome6.h" #include "Editor/DragDrop/SHDragDrop.hpp" namespace SHADE { SHAssetBrowser::SHAssetBrowser() - :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar) + :SHEditorWindow("\xee\x8b\x87 Asset Browser", ImGuiWindowFlags_MenuBar), rootFolder(SHAssetManager::GetRootFolder()), prevFolder(rootFolder), currentFolder(rootFolder) { } @@ -23,62 +25,140 @@ namespace SHADE void SHAssetBrowser::Update() { SHEditorWindow::Update(); - if(Begin()) + if (Begin()) { + RecursivelyDrawTree(rootFolder); DrawMenuBar(); - auto const& assets = SHAssetManager::GetAllAssets(); - if(ImGui::BeginTable("AssetBrowserTable", 3)) - { - ImGui::TableNextColumn(); - ImGui::TableHeader("Asset ID"); - ImGui::TableNextColumn(); - ImGui::TableHeader("Name"); - ImGui::TableNextColumn(); - ImGui::TableHeader("Type"); - for(SHAsset const& asset : assets) - { - DrawAsset(asset); - } - ImGui::EndTable(); - } + DrawCurrentFolder(); } ImGui::End(); } void SHAssetBrowser::DrawMenuBar() { - if(ImGui::BeginMenuBar()) + if (ImGui::BeginMenuBar()) { ImGui::EndMenuBar(); } } - void SHAssetBrowser::DrawAsset(SHAsset const& asset) + ImRect SHAssetBrowser::RecursivelyDrawTree(FolderPointer folder) { - ImGui::PushID(asset.id); - ImGui::BeginGroup(); + auto const& subFolders = folder->subFolders; + auto const& files = folder->files; + const bool isSelected = std::ranges::find(selectedFolders, folder) != selectedFolders.end(); + ImGuiTreeNodeFlags flags = (subFolders.empty() && files.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow; + if (isSelected) + flags |= ImGuiTreeNodeFlags_Selected; + if (folder == rootFolder) + flags |= ImGuiTreeNodeFlags_DefaultOpen; + + bool isOpen = ImGui::TreeNodeEx(folder, flags, "%s %s", ICON_MD_FOLDER, folder->name.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + if(ImGui::IsItemClicked()) + { + selectedFolders.clear(); + selectedFolders.push_back(folder); + } + if (isOpen) + { + const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark); + const float horizontalOffset = 0.0f; + ImDrawList* drawList = ImGui::GetWindowDrawList(); + ImVec2 vertLineStart = ImGui::GetCursorScreenPos(); + vertLineStart.x += horizontalOffset; + ImVec2 vertLineEnd = vertLineStart; + for (auto const& subFolder : subFolders) + { + const float horizontalLineSize = 8.0f; + const ImRect childRect = RecursivelyDrawTree(subFolder); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); + vertLineEnd.y = midPoint; + } + for (auto const& file : files) + { + const float horizontalLineSize = 25.0f; + const ImRect childRect = DrawFile(file); + const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f; + drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1); + vertLineEnd.y = midPoint; + } + drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1); + ImGui::TreePop(); + } + return nodeRect; + } - ImGui::TableNextColumn(); - ImGui::Selectable(std::format("{}", asset.id).data(), false, ImGuiSelectableFlags_SpanAllColumns); + void SHAssetBrowser::DrawCurrentFolder() + { + //auto const& subFolders = currentFolder->subFolders; + //ImVec2 initialCursorPos = ImGui::GetCursorPos(); + //ImVec2 initialRegionAvail = ImGui::GetContentRegionAvail(); + //int maxTiles = initialRegionAvail.x / tileWidth; + //float maxX = (maxTiles - 1)*tileWidth; + //ImVec2 tilePos = initialCursorPos; + //for (auto const& subFolder : subFolders) + //{ + // ImGui::SetCursorPos(tilePos); + // ImGui::BeginGroup(); + // ImGui::PushStyleVar(ImGuiStyleVar_ItemInnerSpacing, {0.0f, 0.0f}); + // ImGui::Button(ICON_MD_FOLDER, {tileWidth}); + // ImGui::Text(subFolder->name.data()); + // ImGui::PopStyleVar(); + // ImGui::EndGroup(); + // if(tilePos.x >= maxX) + // { + // tilePos.x = initialCursorPos.x; + // } + // else + // { + // ImGui::SameLine(); + // tilePos.x += tileWidth; + // } + //} + } + + ImRect SHAssetBrowser::DrawFile(SHFile const& file) noexcept + { + if (file.assetMeta == nullptr) + return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); + const bool isSelected = std::ranges::find(selectedAssets, file.assetMeta->id) != selectedAssets.end(); + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf; + if (isSelected) + flags |= ImGuiTreeNodeFlags_Selected; + std::string icon{}; + + switch(file.assetMeta->type) + { + case AssetType::INVALID: break; + case AssetType::SHADER: icon = ICON_FA_FILE_CODE; break; + case AssetType::SHADER_BUILT_IN: icon = ICON_FA_FILE_CODE; break; + case AssetType::TEXTURE: icon = ICON_FA_IMAGES; break; + case AssetType::MESH: icon = ICON_FA_CUBES; break; + case AssetType::SCENE: icon = ICON_MD_IMAGE; break; + case AssetType::PREFAB: icon = ICON_FA_BOX_OPEN; break; + case AssetType::MATERIAL: break; + case AssetType::MAX_COUNT: break; + default: ; + } + + ImGui::TreeNodeEx(file.assetMeta, flags, "%s %s", icon.data(), file.assetMeta->name.data()); + const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax()); if(SHDragDrop::BeginSource()) { - auto id = asset.id; - ImGui::Text("Moving Asset: %zu", id); + auto id = file.assetMeta->id; + ImGui::Text("Moving Asset: %s [%zu]", file.name.data(), file.assetMeta->id); SHDragDrop::SetPayload(SHDragDrop::DRAG_RESOURCE, &id); SHDragDrop::EndSource(); } - - ImGui::TableNextColumn(); - ImGui::Text("%s", asset.name.c_str()); - - ImGui::TableNextColumn(); - ImGui::Text("%s", "Type"); - - ImGui::EndGroup(); - ImGui::PopID(); - - - + if(ImGui::IsItemClicked()) + { + selectedAssets.clear(); + selectedAssets.push_back(file.assetMeta->id); + } + ImGui::TreePop(); + return nodeRect; } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h index 0e3053bc..d56fc029 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h +++ b/SHADE_Engine/src/Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h @@ -1,7 +1,9 @@ #pragma once +#include "imgui_internal.h" #include "Assets/SHAsset.h" #include "Editor/EditorWindow/SHEditorWindow.h" +#include "Filesystem/SHFolder.h" namespace SHADE { @@ -16,9 +18,14 @@ namespace SHADE void Refresh(); private: void DrawMenuBar(); - void DrawAsset(SHAsset const& asset); + ImRect RecursivelyDrawTree(FolderPointer folder); + void DrawCurrentFolder(); + ImRect DrawFile(SHFile const& file) noexcept; - float idColumnWidth, nameColumnWidth, typeColumnWidth; + FolderPointer rootFolder, prevFolder, currentFolder; + std::vector selectedFolders; + std::vector selectedAssets; + static constexpr float tileWidth = 50.0f; }; -} \ No newline at end of file +} diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 6ae94cdc..cf5056a5 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -175,7 +175,7 @@ namespace SHADE ImFontConfig icons_config{}; icons_config.MergeMode = true; icons_config.GlyphOffset.y = 5.f; constexpr ImWchar icon_ranges_fa[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; ImFont* UIFontFA = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/fa-solid-900.ttf", 20.f, &icons_config, icon_ranges_fa); //TODO: Change to config based assets path - constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_MD, 0 }; + constexpr ImWchar icon_ranges_md[] = { ICON_MIN_MD, ICON_MAX_16_MD, 0 }; ImFont* UIFontMD = io->Fonts->AddFontFromFileTTF("../../Assets/Editor/Fonts/MaterialIcons-Regular.ttf", 20.f, &icons_config, icon_ranges_md); //TODO: Change to config based assets path io->Fonts->Build(); } From 647182241efad86d80d5ec63df6a83ea4e0036f3 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 19:21:02 +0800 Subject: [PATCH 556/793] Fixed a buy with view space lighting calculations --- Assets/Shaders/DeferredComposite_CS.glsl | 6 +++--- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4665 -> 4665 bytes .../MiddleEnd/Interface/SHGraphicsConstants.h | 12 +++++++++++- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 3 ++- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 14 +++++--------- .../RenderGraph/SHRenderGraphNodeCompute.h | 10 +++++++++- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index c1caf0aa..5f586b9b 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -51,10 +51,10 @@ void main() vec3 pixelDiffuse = imageLoad (albedo, globalThread).rgb; // Get position of fragment in world space - vec3 positionWorld = imageLoad (positions, globalThread).rgb; + vec3 positionView = imageLoad (positions, globalThread).rgb; // normal of fragment - vec3 normalWorld = imageLoad(normals, globalThread).rgb; + vec3 normalView = imageLoad(normals, globalThread).rgb; vec3 fragColor = vec3 (0.0f); @@ -64,7 +64,7 @@ void main() vec3 dLightNormalized = normalize (DirLightData.dLightData[i].direction); // Get diffuse strength - float diffuseStrength = max (0, dot (dLightNormalized, normalWorld)); + float diffuseStrength = max (0, dot (dLightNormalized, normalView)); // Calculate the fragment color fragColor += DirLightData.dLightData[i].diffuseColor.rgb * diffuseStrength.rrr * pixelDiffuse; diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index 889de5fb344289c281264b054407d97c317a7fff..aaaa5207fc09134d01b8cdfec1bc483a63024116 100644 GIT binary patch delta 28 fcmdm~vQuS)FC%MMW@2y1f<<6Z#(hieG| delta 28 fcmdm~vQuS)FC%Mseo;=!2y1f<<6Z#(krN5q diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index a39ec10e..0257bf3b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -70,7 +70,17 @@ namespace SHADE */ /***************************************************************************/ static constexpr uint32_t RENDERGRAPH_RESOURCE = 4; - + /***************************************************************************/ + /*! + \brief + DescriptorSet Index for render graph node compute resources. For data + that we wish to pass to compute shaders in the render graph, this is + the set to use. Unlike the sets from 1 to 3, this set index does not have + hard coded bindings and is NOT part of the layouts included in the global + data. + */ + /***************************************************************************/ + static constexpr uint32_t RENDERGRAPH_NODE_COMPUTE_RESOURCE = 5; }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 35bcc72f..485f859f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -42,7 +42,8 @@ namespace SHADE { SHDirectionalLightData* lightPtr = reinterpret_cast(address); - SHVec4 transformedDir = viewMat * SHVec4(lightData.direction[0], lightData.direction[1], lightData.direction[2], 0.0f); + // #NoteToSelf: NEED TO TRANSPOSE HERE BECAUSE MULTIPLICATION IS ROW MAJOR. + SHVec4 transformedDir = SHMatrix::Transpose(viewMat) * SHVec4(lightData.direction[0], lightData.direction[1], lightData.direction[2], 0.0f); lightPtr->cullingMask = lightData.cullingMask; lightPtr->direction = SHVec3 (transformedDir.x, transformedDir.y, transformedDir.z); diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index 5323d706..6a9b1c31 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -42,16 +42,12 @@ namespace SHADE //Get the descriptor set layouts required to allocate. We only want the ones for allocate because //global descriptors are already bound in the main system. - auto const& layouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsAllocate(); - - //Variable counts for the descriptor sets (all should be 1). - std::vector variableCounts{ static_cast(layouts.size()) }; - std::fill(variableCounts.begin(), variableCounts.end(), 0); + auto const& layouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE]; // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { - descSetGroups[i] = graphStorage->descriptorPool->Allocate(layouts, variableCounts); + graphResourceDescSets[i] = graphStorage->descriptorPool->Allocate({layouts}, { 1 }); } HandleResize(); @@ -63,7 +59,7 @@ namespace SHADE cmdBuffer->BindPipeline(computePipeline); // bind descriptor sets - cmdBuffer->BindDescriptorSet(descSetGroups[frameIndex], SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, {}); + cmdBuffer->BindDescriptorSet(graphResourceDescSets[frameIndex], SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, {}); // dispatch compute cmdBuffer->ComputeDispatch(groupSizeX, groupSizeY, 1); @@ -89,8 +85,8 @@ namespace SHADE uint32_t imageIndex = (resources[i]->resourceTypeFlags & static_cast(SH_ATT_DESC_TYPE_FLAGS::COLOR_PRESENT)) ? frameIndex : 0; SHVkDescriptorSetGroup::viewSamplerLayout vsl = std::make_tuple(resources[i]->GetImageView(imageIndex), Handle{}, vk::ImageLayout::eGeneral); - descSetGroups[frameIndex]->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, { &vsl, 1 }); - descSetGroups[frameIndex]->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); + graphResourceDescSets[frameIndex]->ModifyWriteDescImage(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint, { &vsl, 1 }); + graphResourceDescSets[frameIndex]->UpdateDescriptorSetImages(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, binding.BindPoint); ++i; } } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h index 2cd3c948..d7c29f49 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -19,12 +19,15 @@ namespace SHADE class SHVkShaderModule; class SHVkCommandBuffer; + class SHRenderGraphNodeCompute { private: static constexpr uint32_t workGroupSizeX = 16; static constexpr uint32_t workGroupSizeY = 16; + using ExternalDescSetBindCommands = std::function)>; + //! To run the dispatch command Handle computePipeline; @@ -32,7 +35,12 @@ namespace SHADE Handle pipelineLayout; //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) - std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> descSetGroups; + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> graphResourceDescSets; + + //! Sometimes we want to bind descriptor sets for a compute resource (buffers, images, etc). This container + //! helps store functions that call those bind functions. The reason why we dont just have a handle to descriptor + //! sets here is because we dont know how we want to bind the sets (different set each frame, dynamic offsets, etc). + std::vector externalDescriptorSetBindCommands; //! vector of resources needed by the subpass compute std::vector> resources; From d3dc87accbcdaa7136facab61ddc93446784486c Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Sun, 30 Oct 2022 23:15:41 +0800 Subject: [PATCH 557/793] can assign mesh add bigobj option to command line till we find a better solution --- SHADE_Engine/premake5.lua | 2 +- .../Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp | 2 +- .../Editor/EditorWindow/Inspector/SHEditorComponentView.hpp | 6 ++++-- .../src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp | 1 + SHADE_Engine/src/Serialization/SHSerializationHelper.hpp | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index 18920194..bc1f6a03 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -8,7 +8,7 @@ project "SHADE_Engine" pchheader "SHpch.h" pchsource "%{prj.location}/src/SHpch.cpp" staticruntime "off" - + buildoptions{"/bigobj"} files { "%{prj.location}/src/**.h", diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 93232917..55d78421 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -133,7 +133,7 @@ namespace SHADE auto size = ImGui::GetWindowSize(); auto g = ImGui::GetCurrentContext(); ImGui::SetCursorPosX(size.x - g->Style.FramePadding.x * 15.0f); - if (ImGui::SmallButton(ICON_MD_DESELECT)) + if (ImGui::SmallButton(ICON_MD_CLEAR_ALL)) { auto editor = SHSystemManager::GetSystem(); editor->selectedEntities.clear(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 587ffc48..521e1213 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -348,14 +348,16 @@ namespace SHADE if (ImGui::CollapsingHeader(componentType.get_name().data())) { DrawContextMenu(component); - SHEditorWidgets::DragDropReadOnlyField("Mesh", "Mesh Asset", [component]() + Handle const& mesh = component->GetMesh(); + + SHEditorWidgets::DragDropReadOnlyField("Mesh", std::to_string(SHResourceManager::GetAssetID(mesh).value_or(0)).data(), [component]() { Handle const& mesh = component->GetMesh(); return SHResourceManager::GetAssetID(mesh).value_or(0); }, [component](AssetID const& id) { - //component->SetMesh(SHResourceManager::LoadOrGet(id)); + component->SetMesh(SHResourceManager::LoadOrGet(id)); }, SHDragDrop::DRAG_RESOURCE); } else diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 6309d805..c4a86785 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -136,6 +136,7 @@ namespace SHADE { DrawAddComponentButton(eid); DrawAddComponentButton(eid); + DrawAddComponentButton(eid); // Components that require Transforms diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index bcd378c5..a6f02249 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -239,6 +239,7 @@ namespace YAML YAML::convert::decode(colliderNode, rhs.GetCollider(numColliders++)); } } + return true; } }; From 997ce3011a836053440156696817f67c6c95c402 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Sun, 30 Oct 2022 23:15:52 +0800 Subject: [PATCH 558/793] Screw you SPIRV-Reflect and screw you GLSL - Pipeline layouts now have a parameter to decide if a binding with a buffer descriptor stores a dynamic type instead. - SHRenderGraphNodeCompute has catered for this as well through its ctor params --- .../Descriptors/SHVkDescriptorSetLayout.cpp | 12 ++++++ .../Descriptors/SHVkDescriptorSetLayout.h | 1 + .../MiddleEnd/PostProcessing/SHSSAO.cpp | 7 ++++ .../MiddleEnd/PostProcessing/SHSSAO.h | 15 +++++++ .../Pipeline/SHPipelineLayoutParams.h | 8 ++++ .../Graphics/Pipeline/SHVkPipelineLayout.cpp | 23 +++++++++++ .../Graphics/Pipeline/SHVkPipelineLayout.h | 3 ++ .../RenderGraph/SHRenderGraphNode.cpp | 4 +- .../Graphics/RenderGraph/SHRenderGraphNode.h | 2 +- .../RenderGraph/SHRenderGraphNodeCompute.cpp | 39 +++++++++++++++++-- .../RenderGraph/SHRenderGraphNodeCompute.h | 22 ++++++++--- 11 files changed, 123 insertions(+), 13 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp index 0943c489..4be8cc9e 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.cpp @@ -119,6 +119,18 @@ namespace SHADE return setIndex; } + uint32_t SHVkDescriptorSetLayout::GetNumDynamicOffsetsRequired(void) const noexcept + { + uint32_t numDynamicBindings = 0; + for (auto& binding : layoutDesc) + { + if (binding.Type == vk::DescriptorType::eUniformBufferDynamic || binding.Type == vk::DescriptorType::eStorageBufferDynamic) + ++numDynamicBindings; + } + + return numDynamicBindings; + } + SHVkDescriptorSetLayout& SHVkDescriptorSetLayout::operator=(SHVkDescriptorSetLayout&& rhs) noexcept { if (&rhs == this) diff --git a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h index 1639901d..caa3c057 100644 --- a/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h +++ b/SHADE_Engine/src/Graphics/Descriptors/SHVkDescriptorSetLayout.h @@ -99,6 +99,7 @@ namespace SHADE inline const vk::DescriptorSetLayout& GetVkHandle() const { return setLayout; } std::vector const& GetBindings (void) const noexcept; SetIndex GetSetIndex (void) const noexcept; + uint32_t GetNumDynamicOffsetsRequired (void) const noexcept; private: /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp new file mode 100644 index 00000000..fb5ae824 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp @@ -0,0 +1,7 @@ +#include "SHpch.h" +#include "SHSSAO.h" + +namespace SHADE +{ + +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h new file mode 100644 index 00000000..17df7200 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h @@ -0,0 +1,15 @@ +#pragma once + +#include "Resource/SHHandle.h" +#include "Graphics/SHVulkanIncludes.h" + +namespace SHADE +{ + + class SHSSAO + { + private: + + + }; +} diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h index d696e4a3..010bed0e 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHPipelineLayoutParams.h @@ -2,8 +2,10 @@ #define SH_PIPELINE_LAYOUT_PARAMS_H #include "Graphics/SHVulkanIncludes.h" +#include "Graphics/SHVulkanDefines.h" #include "Resource/SHHandle.h" #include "Graphics/Descriptors/SHVkDescriptorSetLayout.h" +#include namespace SHADE { @@ -24,6 +26,12 @@ namespace SHADE //! want to use the layout to initialize the pipeline layout but we do not //! want to use it for allocating descriptor sets. std::vector> const& globalDescSetLayouts = {}; + + //! Since both SPIRV-Reflect and GLSL don't provide ways to describe UBOs or + //! SSBOs as dynamic, we need to do it ourselves. This will store bindings + //! which we will use when parsing for descriptor set layouts. If a parsed + //! binding is in this container, we make that binding's descriptor dynamic. + std::unordered_set dynamicBufferBindings; }; struct SHPipelineLayoutParamsDummy diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp index 37d00795..47b2e010 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.cpp @@ -165,6 +165,28 @@ namespace SHADE newBinding.Stage = shaderModule->GetShaderStageFlagBits(); newBinding.Type = descBindingInfo.ConvertFromReflectDescType(reflectedBinding->descriptor_type); + // Here we want to check if a binding is supposed to be dynamic. If it is, make it dynamic. + if (newBinding.Type == vk::DescriptorType::eUniformBuffer || newBinding.Type == vk::DescriptorType::eStorageBuffer) + { + for (auto& bsHash : dynamicBufferBindings) + { + uint32_t set = static_cast(bsHash >> 32); + uint32_t binding = static_cast(bsHash & 0xFFFFFFFF); + if (set == CURRENT_SET && binding == newBinding.BindPoint) + { + switch (newBinding.Type) + { + case vk::DescriptorType::eUniformBuffer: + newBinding.Type = vk::DescriptorType::eUniformBufferDynamic; + break; + case vk::DescriptorType::eStorageBuffer: + newBinding.Type = vk::DescriptorType::eStorageBufferDynamic; + break; + } + } + } + } + // In reality, the check for variable descriptor sets do not exists in spirv-reflect. Fortunately, when a shader // defines a boundless descriptor binding in the shader, the information reflected makes the array dimensions // contain a 1 element of value 1. Knowing that having an array [1] doesn't make sense, we can use this to @@ -300,6 +322,7 @@ namespace SHADE , vkDescriptorSetLayoutsAllocate{} , descriptorSetLayoutsPipeline{} , vkDescriptorSetLayoutsPipeline{} + , dynamicBufferBindings{std::move (pipelineLayoutParams.dynamicBufferBindings)} { for (auto& mod : shaderModules) { diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h index b4298e00..e2af02a9 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipelineLayout.h @@ -29,6 +29,9 @@ namespace SHADE //! Push constant interface SHPushConstantInterface pushConstantInterface; + //! See SHPipelineLayoutParams for details + std::unordered_set dynamicBufferBindings; + //! Push constant ranges std::vector vkPcRanges; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp index aa9c7944..12f0e246 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.cpp @@ -263,7 +263,7 @@ namespace SHADE return subpass; } - Handle SHRenderGraphNode::AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, float numWorkGroupScale/* = 1.0f*/) noexcept + Handle SHRenderGraphNode::AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings, float numWorkGroupScale/* = 1.0f*/) noexcept { // Look for the required resources in the graph std::vector> nodeComputeResources{}; @@ -276,7 +276,7 @@ namespace SHADE } // Create the subpass compute with the resources - auto nodeCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, std::move(nodeComputeResources), nodeComputes.empty()); + auto nodeCompute = graphStorage->resourceManager->Create(graphStorage, computeShaderModule, std::move(nodeComputeResources), std::move (dynamicBufferBindings), nodeComputes.empty()); nodeComputes.push_back(nodeCompute); return nodeCompute; diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h index 16f3f914..695d1c31 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNode.h @@ -100,7 +100,7 @@ namespace SHADE /* PUBLIC MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ Handle AddSubpass(std::string subpassName) noexcept; - Handle AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, float numWorkGroupScale = 1.0f) noexcept; + Handle AddNodeCompute(Handle computeShaderModule, std::initializer_list resources, std::unordered_set&& dynamicBufferBindings = {}, float numWorkGroupScale = 1.0f) noexcept; void AddDummySubpassIfNeeded (void) noexcept; // TODO: RemoveSubpass() diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index 6a9b1c31..b5f6f7ab 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -13,7 +13,7 @@ namespace SHADE { - SHRenderGraphNodeCompute::SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, bool followingEndRP, float inNumWorkGroupScale/* = 1.0f*/) noexcept + SHRenderGraphNodeCompute::SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale/* = 1.0f*/) noexcept : computePipeline{} , pipelineLayout{} , resources{} @@ -21,11 +21,13 @@ namespace SHADE , groupSizeY{0} , followingEndRenderpass {followingEndRP} , numWorkGroupScale {std::clamp(inNumWorkGroupScale, 0.0f, 1.0f)} + , computeResource{} { SHPipelineLayoutParams pipelineLayoutParams { .shaderModules = {computeShaderModule}, - .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts() + .globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts(), + .dynamicBufferBindings = std::move(dynamicBufferBindings), }; // Create pipeline layout from parameters @@ -42,12 +44,31 @@ namespace SHADE //Get the descriptor set layouts required to allocate. We only want the ones for allocate because //global descriptors are already bound in the main system. - auto const& layouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE]; + auto const& graphResourceLayout = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE]; // Allocate descriptor sets to hold the images for reading (STORAGE_IMAGE) for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) { - graphResourceDescSets[i] = graphStorage->descriptorPool->Allocate({layouts}, { 1 }); + graphResourceDescSets[i] = graphStorage->descriptorPool->Allocate({graphResourceLayout}, { 1 }); + } + + + auto const& layouts = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline(); + + if (layouts.size() == SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE + 1) + { + // create compute resources + computeResource = graphStorage->resourceManager->Create(); + auto computeResourceLayout = layouts[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE]; + computeResource->descSet = graphStorage->descriptorPool->Allocate({ computeResourceLayout }, { 1 }); + + // Allocate for descriptor offsets + for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) + computeResource->dynamicOffsets[i].resize(computeResourceLayout->GetNumDynamicOffsetsRequired()); + + // 1st set all start at 0 + for (auto& index : computeResource->dynamicOffsets[0]) + index = 0; } HandleResize(); @@ -133,4 +154,14 @@ namespace SHADE } } + void SHRenderGraphNodeCompute::SetDynamicOffsets(std::span perFrameSizes) noexcept + { + for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i) + { + auto dynamicOffsets = computeResource->dynamicOffsets[i]; + for (uint32_t j = 0; j < perFrameSizes.size(); ++j) + dynamicOffsets[j] = perFrameSizes[j] * i; + } + } + } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h index d7c29f49..1101e276 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -22,11 +22,22 @@ namespace SHADE class SHRenderGraphNodeCompute { + private: + // Binding of set SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE + struct ComputeResource + { + //! Descriptor set (initialized by parent class) + Handle descSet {}; + + //! Dynamic offsets into these resources (initialized from the outside). + std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> dynamicOffsets {}; + }; + private: static constexpr uint32_t workGroupSizeX = 16; static constexpr uint32_t workGroupSizeY = 16; - using ExternalDescSetBindCommands = std::function)>; + using ExternalDescSetBindCommands = std::function, Handle)>; //! To run the dispatch command Handle computePipeline; @@ -37,10 +48,7 @@ namespace SHADE //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> graphResourceDescSets; - //! Sometimes we want to bind descriptor sets for a compute resource (buffers, images, etc). This container - //! helps store functions that call those bind functions. The reason why we dont just have a handle to descriptor - //! sets here is because we dont know how we want to bind the sets (different set each frame, dynamic offsets, etc). - std::vector externalDescriptorSetBindCommands; + Handle computeResource; //! vector of resources needed by the subpass compute std::vector> resources; @@ -58,11 +66,13 @@ namespace SHADE std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> memoryBarriers; public: - SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, bool followingEndRP, float inNumWorkGroupScale = 1.0f) noexcept; + SHRenderGraphNodeCompute(Handle graphStorage, Handle computeShaderModule, std::vector>&& subpassComputeResources, std::unordered_set&& dynamicBufferBindings, bool followingEndRP, float inNumWorkGroupScale = 1.0f) noexcept; void Execute (Handle cmdBuffer, uint32_t frameIndex) noexcept; void HandleResize (void) noexcept; + void SetDynamicOffsets (std::span perFrameSizes) noexcept; + friend class SHRenderGraph; friend class SHRenderGraphNode; }; From 7a6474eaf80e749caea7a892b2e572a1e97178f2 Mon Sep 17 00:00:00 2001 From: Glence Date: Sun, 30 Oct 2022 23:59:35 +0800 Subject: [PATCH 559/793] base class for playercontroller --- TempScriptsFolder/PlayerController.cs | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 TempScriptsFolder/PlayerController.cs diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs new file mode 100644 index 00000000..2e0123eb --- /dev/null +++ b/TempScriptsFolder/PlayerController.cs @@ -0,0 +1,52 @@ +using SHADE; +using System; + + +public class PlayerController : Script +{ + private RigidBody rb; + public float xAxisMove; + public float zAxisMove; + public float force = 800.0f; + + public PlayerController(GameObject gameObj) : base(gameObj) { } + + protected override void awake() + { + rb = GetComponent(); + if (rb == null) + { + Debug.LogError("RigidBody is NULL!"); + } + } + + protected override void update() + { + Move(); + + //float x = xAxisMove * force * (float)Time.DeltaTime; + //Debug.Log(x.ToString()); + } + + private void Move() + { + + if (Input.GetKey(Input.KeyCode.A)) + xAxisMove = -1; + else if (Input.GetKey(Input.KeyCode.D)) + xAxisMove = 1; + else + xAxisMove = 0; + + if (Input.GetKey(Input.KeyCode.W)) + zAxisMove = -1; + else if (Input.GetKey(Input.KeyCode.S)) + zAxisMove = 1; + else + zAxisMove = 0; + + if (rb != null) + rb.AddForce(new Vector3(xAxisMove * force * (float)Time.DeltaTime, 0.0f, zAxisMove * force * (float)Time.DeltaTime)); + } +} + From 94a57219da3f1d8ccc53b9dd463758cb029aaa49 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 31 Oct 2022 10:32:32 +0800 Subject: [PATCH 560/793] Created CPU and GPU data for SSAO Renderpass for SSAO not yet done (that's next) --- Assets/Shaders/SSAO_CS.glsl | 24 +++++++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 12 +++++ .../MiddleEnd/Interface/SHGraphicsSystem.h | 3 ++ .../MiddleEnd/PostProcessing/SHSSAO.cpp | 53 +++++++++++++++++++ .../MiddleEnd/PostProcessing/SHSSAO.h | 22 ++++++++ .../src/Graphics/Queues/SHVkQueue.cpp | 5 ++ SHADE_Engine/src/Graphics/Queues/SHVkQueue.h | 2 + .../RenderGraph/SHRenderGraphNodeCompute.cpp | 5 ++ .../RenderGraph/SHRenderGraphNodeCompute.h | 6 ++- 9 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 Assets/Shaders/SSAO_CS.glsl diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl new file mode 100644 index 00000000..3759c4b4 --- /dev/null +++ b/Assets/Shaders/SSAO_CS.glsl @@ -0,0 +1,24 @@ +#version 450 + +uint const NUM_SAMPLES = 64; +uint const NUM_ROTATIONS = 16; + +layout(local_size_x = 16, local_size_y = 16) in; +layout(set = 4, binding = 0, rgba32f) uniform image2D positions; +layout(set = 4, binding = 1, rgba32f) uniform image2D normals; +layout(set = 4, binding = 2, rgba32f) uniform image2D outputImage; + + +// SSAO data +layout(std430, set = 5, binding = 0) buffer SSAOData +{ + vec3 samples[NUM_SAMPLES]; + vec3 rotations[NUM_ROTATIONS]; + +} ssaoData; + +void main() +{ + // store result into result image + imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); +} \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index edf0be23..d062b4d6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -253,6 +253,18 @@ namespace SHADE lightingSubSystem = resourceManager.Create(); lightingSubSystem->Init(device, descPool); + + ssaoStorage = resourceManager.Create(); + + ssaoTransferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + ssaoTransferCmdBuffer->BeginRecording(); + + ssaoStorage->Init(device, ssaoTransferCmdBuffer); + + ssaoTransferCmdBuffer->EndRecording(); + graphicsQueue->SubmitCommandBuffer({ssaoTransferCmdBuffer}); + + graphicsQueue->WaitIdle(); } #ifdef SHEDITOR diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 072a1d99..9b95ebe4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -32,6 +32,7 @@ of DigiPen Institute of Technology is prohibited. #include "../Textures/SHVkSamplerCache.h" #include "Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h" #include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" +#include "Graphics/MiddleEnd/PostProcessing/SHSSAO.h" namespace SHADE { @@ -313,6 +314,7 @@ namespace SHADE Handle descPool; Handle graphicsCmdPool; Handle transferCmdBuffer; + Handle ssaoTransferCmdBuffer; Handle graphicsTexCmdBuffer; SHRenderContext renderContext; std::array, 2> graphSemaphores; @@ -357,6 +359,7 @@ namespace SHADE Handle mousePickSystem; Handle postOffscreenRender; Handle lightingSubSystem; + Handle ssaoStorage; uint32_t resizeWidth = 1; uint32_t resizeHeight = 1; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp index fb5ae824..f2894786 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp @@ -1,7 +1,60 @@ #include "SHpch.h" #include "SHSSAO.h" +#include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/Buffers/SHVkBuffer.h" +#include namespace SHADE { + void SHSSAO::Init(Handle logicalDevice, Handle cmdBuffer) noexcept + { + // create memory on CPU side + ssaoData = std::make_unique(); + + // Initialize a distribution to get values from 0 to 1 + std::uniform_real_distribution distrib{0.0f, 1.0f}; + + // generator for random number + std::default_random_engine generator; + + // generate samples + auto& samples = ssaoData->samples; + for (uint32_t i = 0; i < NUM_SAMPLES; ++i) + { + samples[i] = SHVec4 + { + distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + distrib(generator), // 0.0f - 1.0f so that sample space is a hemisphere + 0.0f + }; + + // This makes sure that most points are closer to fragment's position + float scale = 1.0f / static_cast(NUM_SAMPLES); + scale = std::lerp(0.1f, 1.0f, scale * scale); + samples[i] *= scale; + } + + // generate rotation vector + auto& rotationVectors = ssaoData->rotatationVectors; + for (uint32_t i = 0; i < NUM_ROTATION_VECTORS; ++i) + { + samples[i] = SHVec4 + { + distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f + 0.0f, // we want to rotate about the z axis in tangent space + 0.0f + }; + } + + // Get aligned size for buffer + uint32_t alignedSize = logicalDevice->PadSSBOSize(sizeof (SamplesAndKernel)); + + // Create buffer + ssaoDataBuffer = logicalDevice->CreateBuffer(alignedSize, ssaoData.get(), alignedSize, vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferDst, VMA_MEMORY_USAGE_AUTO, {}); + + ssaoDataBuffer->TransferToDeviceResource(cmdBuffer); + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h index 17df7200..32e8eb1a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h @@ -2,14 +2,36 @@ #include "Resource/SHHandle.h" #include "Graphics/SHVulkanIncludes.h" +#include "Math/Vector/SHVec4.h" namespace SHADE { + class SHVkBuffer; + class SHVkLogicalDevice; + class SHVkCommandBuffer; class SHSSAO { private: + static constexpr uint32_t NUM_SAMPLES = 64; + static constexpr uint32_t NUM_ROTATION_VECTORS = 16; + struct SamplesAndKernel + { + //! distances from a pixel we want to sample + std::array samples; + std::array rotatationVectors; + }; + + private: + //! Samples and kernel on CPU side + std::unique_ptr ssaoData; + + //! For passing SSAO samples and kernel to GPU + Handle ssaoDataBuffer; + + public: + void Init (Handle logicalDevice, Handle cmdBuffer) noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp index 828f2974..dcb3ff6a 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.cpp @@ -129,4 +129,9 @@ namespace SHADE return vkQueue; } + void SHVkQueue::WaitIdle(void) const noexcept + { + vkQueue.waitIdle(); + } + } \ No newline at end of file diff --git a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h index a647cb72..f27f3b0b 100644 --- a/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h +++ b/SHADE_Engine/src/Graphics/Queues/SHVkQueue.h @@ -50,6 +50,8 @@ namespace SHADE void SubmitCommandBuffer (std::initializer_list> cmdBuffers, std::initializer_list> signalSems = {}, std::initializer_list> waitSems = {}, vk::PipelineStageFlags waitDstStageMask = {}, Handle const& fence = {}) noexcept; vk::Result Present (Handle const& swapchain, std::initializer_list> waitSems, uint32_t frameIndex) noexcept; vk::Queue GetVkQueue() noexcept; + + void WaitIdle (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index b5f6f7ab..60d76c49 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -164,4 +164,9 @@ namespace SHADE } } + void SHRenderGraphNodeCompute::ModifyWriteDescBufferComputeResource(uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept + { + computeResource->descSet->ModifyWriteDescBuffer(set, binding, buffers, offset, range); + } + } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h index 1101e276..d61eda33 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.h @@ -18,6 +18,7 @@ namespace SHADE class SHRenderGraphResource; class SHVkShaderModule; class SHVkCommandBuffer; + class SHVkBuffer; class SHRenderGraphNodeCompute @@ -37,8 +38,6 @@ namespace SHADE static constexpr uint32_t workGroupSizeX = 16; static constexpr uint32_t workGroupSizeY = 16; - using ExternalDescSetBindCommands = std::function, Handle)>; - //! To run the dispatch command Handle computePipeline; @@ -48,6 +47,7 @@ namespace SHADE //! Descriptor set group to hold the images for reading (STORAGE_IMAGE) std::array, SHGraphicsConstants::NUM_FRAME_BUFFERS> graphResourceDescSets; + //! Compute resources Handle computeResource; //! vector of resources needed by the subpass compute @@ -73,6 +73,8 @@ namespace SHADE void SetDynamicOffsets (std::span perFrameSizes) noexcept; + void ModifyWriteDescBufferComputeResource (uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept; + friend class SHRenderGraph; friend class SHRenderGraphNode; }; From 5eaf2b55aaa0df47c7d76e8a48ccf408f23d776d Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 12:20:46 +0800 Subject: [PATCH 561/793] Added WIP Application class and adjustments to how ScriptStore destroys scripts (SpdLog errors) --- .../MiddleEnd/Interface/SHGraphicsSystem.h | 6 +- .../src/Graphics/Windowing/SHWindow.cpp | 2 +- .../src/Graphics/Windowing/SHWindow.h | 2 +- SHADE_Managed/src/Engine/Application.cxx | 100 ++++++++++++++++++ SHADE_Managed/src/Engine/Application.hxx | 77 ++++++++++++++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 10 +- 6 files changed, 191 insertions(+), 6 deletions(-) create mode 100644 SHADE_Managed/src/Engine/Application.cxx create mode 100644 SHADE_Managed/src/Engine/Application.hxx diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 0f9d602a..c5908db4 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -293,6 +293,10 @@ namespace SHADE //Handle GetRenderPass() const { return renderPass; } + /*-----------------------------------------------------------------------------*/ + /* Getters */ + /*-----------------------------------------------------------------------------*/ + SHWindow* GetWindow() noexcept { return window; } private: /*-----------------------------------------------------------------------------*/ @@ -320,7 +324,7 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - SHResourceHub resourceManager; + SHResourceHub resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHSamplerCache samplerCache; diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp index 7995e394..e0dbc1a4 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.cpp @@ -260,7 +260,7 @@ namespace SHADE return wndHWND; } - const WindowData SHWindow::GetWindowData() + const WindowData SHWindow::GetWindowData() const { return wndData; } diff --git a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h index 8595ce4b..11308d90 100644 --- a/SHADE_Engine/src/Graphics/Windowing/SHWindow.h +++ b/SHADE_Engine/src/Graphics/Windowing/SHWindow.h @@ -123,7 +123,7 @@ namespace SHADE HWND GetHWND(); - const WindowData GetWindowData(); + const WindowData GetWindowData() const; CALLBACKID RegisterWindowSizeCallback(WindowResizeCallbackFn); void UnregisterWindowSizeCallback(CALLBACKID const& callbackid); diff --git a/SHADE_Managed/src/Engine/Application.cxx b/SHADE_Managed/src/Engine/Application.cxx new file mode 100644 index 00000000..c4bce19f --- /dev/null +++ b/SHADE_Managed/src/Engine/Application.cxx @@ -0,0 +1,100 @@ +/************************************************************************************//*! +\file Application.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions in the static managed + Application class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Application.hxx" +// External Dependencies +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Editor/SHEditor.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/Windowing/SHWindow.h" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + bool Application::IsPlaying::get() + { + auto editor = SHSystemManager::GetSystem(); + if (editor) + return editor->editorState == SHEditor::State::PLAY + || + editor->editorState == SHEditor::State::PAUSE; + + return true; + } + bool Application::IsPaused::get() + { + auto editor = SHSystemManager::GetSystem(); + if (editor) + return editor->editorState == SHEditor::State::PAUSE; + + return false; + } + int Application::WindowWidth::get() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().first; + } + + throw gcnew System::InvalidOperationException("Unable to get current window width!"); + } + int Application::WindowHeight::get() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().second; + } + + throw gcnew System::InvalidOperationException("Unable to get current window height!"); + } + bool Application::IsFullscreen::get() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowData().isFullscreen; + } + + throw gcnew System::InvalidOperationException("Unable to get current window height!"); + } + /*void Application::IsFullscreen::set(bool value) + { + return Pls::Window::SetFullScreen(value); + }*/ + + /*---------------------------------------------------------------------------------*/ + /* Usage Functions */ + /*---------------------------------------------------------------------------------*/ + void Application::Quit() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + auto WND = gfxSystem->GetWindow(); + return WND->Close(); + } + + throw gcnew System::InvalidOperationException("Unable to quit!"); + } +} diff --git a/SHADE_Managed/src/Engine/Application.hxx b/SHADE_Managed/src/Engine/Application.hxx new file mode 100644 index 00000000..8629cf75 --- /dev/null +++ b/SHADE_Managed/src/Engine/Application.hxx @@ -0,0 +1,77 @@ +/************************************************************************************//*! +\file Application.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of a managed static Application class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Static class that contains useful properties for querying the state of the + /// engine. + /// + public ref class Application abstract sealed + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Whether or not the engine is playing. This will always be true on Publish. + /// On Debug/Release builds, this is true when the editor is in Play Mode. It + /// will also be true even if the editor is in Play Mode but is paused. + /// + static property bool IsPlaying + { + bool get(); + } + /// + /// Whether or not the engine is in a paused state where script updates and + /// physics are not in play. + /// + static property bool IsPaused + { + bool get(); + } + /// + /// Retrieves the designated width of the current window. + /// + static property int WindowWidth + { + int get(); + } + /// + /// Retrieves the designated height of the current window. + /// + static property int WindowHeight + { + int get(); + } + /// + /// Whether or not the application is currently in fullscreen mode or not. + /// + static property bool IsFullscreen + { + bool get(); + // TODO: once implemented on SHADE_Engine + //void set(bool value); + } + + /*-----------------------------------------------------------------------------*/ + /* Usage Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Marks the application to stop at the end of the current frame. + /// + static void Quit(); + }; +} diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index b6bc1815..1c732358 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -27,6 +27,7 @@ of DigiPen Institute of Technology is prohibited. #include "Script.hxx" #include "Engine/Entity.hxx" #include "Serialisation/ReflectionUtilities.hxx" +#include "Engine/Application.hxx" namespace SHADE { @@ -372,8 +373,11 @@ namespace SHADE // Clear the queue while (disposalQueue.Count > 0) { - Script^ script = disposalQueue.Dequeue(); - script->OnDestroy(); + Script^ script = disposalQueue.Dequeue(); + if (Application::IsPlaying) + { + script->OnDestroy(); + } auto entity = script->Owner.GetEntity(); auto scriptList = scripts[script->Owner.GetEntity()]; scriptList->Remove(script); @@ -388,7 +392,7 @@ namespace SHADE { SAFE_NATIVE_CALL_BEGIN // Run the deinit all scripts if needed - //if (Application::IsPlaying) + if (Application::IsPlaying) { Debug::Log("Running OnDestroy() for scripts."); for each (System::Collections::Generic::KeyValuePair entity in scripts) From 66529474cd8af126de5f08c4ec3afd4bed52ef79 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 14:51:50 +0800 Subject: [PATCH 562/793] Added Application class equivalent to SHADE_Managed --- SHADE_Engine/src/Editor/SHEditor.h | 4 +- .../Interface/SHGraphicsSystemInterface.cpp | 77 +++++++++++++++++++ .../Interface/SHGraphicsSystemInterface.h | 52 +++++++++++++ SHADE_Engine/src/Tools/SHLog.h | 2 +- SHADE_Managed/premake5.lua | 10 ++- SHADE_Managed/src/Engine/Application.cxx | 41 ++-------- 6 files changed, 147 insertions(+), 39 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index 34405390..624069db 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -15,7 +15,7 @@ #include "ECS_Base/System/SHSystemRoutine.h" #include "Resource/SHHandle.h" #include "EditorWindow/SHEditorWindow.h" -#include "Tools/SHLogger.h" +#include "Tools/SHLog.h" #include "Gizmos/SHTransformGizmo.h" @@ -76,7 +76,7 @@ namespace SHADE } else { - SHLOG_WARNING("Attempt to create duplicate of Editor window type") + SHLog::Warning("Attempt to create duplicate of Editor window type"); } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp new file mode 100644 index 00000000..1ad46e04 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.cpp @@ -0,0 +1,77 @@ +/************************************************************************************//*! +\file SHGraphicsSystemInterface.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions of the static + SHGraphicsSystemInterface class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "SHGraphicsSystemInterface.h" +// Project Includes +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" +#include "Graphics/Windowing/SHWindow.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*-----------------------------------------------------------------------------------*/ + uint32_t SHGraphicsSystemInterface::GetWindowWidth() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().first; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window width. Value of 0 returned instead."); + return 0; + } + + uint32_t SHGraphicsSystemInterface::GetWindowHeight() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowSize().second; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window height. Value of 0 returned instead."); + return 0; + } + + bool SHGraphicsSystemInterface::IsFullscreen() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + const auto WND = gfxSystem->GetWindow(); + return WND->GetWindowData().isFullscreen; + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to get window fullscreen status. Value of false returned instead."); + return false; + } + + void SHGraphicsSystemInterface::CloseWindow() + { + auto gfxSystem = SHSystemManager::GetSystem(); + if (gfxSystem) + { + auto WND = gfxSystem->GetWindow(); + return WND->Close(); + } + + SHLOG_WARNING("[SHGraphicsSystemInterface] Failed to close window."); + } +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h new file mode 100644 index 00000000..5bc77ed9 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h @@ -0,0 +1,52 @@ +/************************************************************************************//*! +\file SHGraphicsSystemInterface.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the SHGraphicsSystemInterface static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +namespace SHADE +{ + /// + /// Static class that wraps up certain functions in the SHGraphicsSystem so that + /// accessing it from SHADE_Managed would not cause issues due to C++20 features. + /// + class SH_API SHGraphicsSystemInterface final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + SHGraphicsSystemInterface() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*---------------------------------------------------------------------------------*/ + /// + /// Retrieves the current window width. + /// + /// The current window width. + static uint32_t GetWindowWidth(); + /// + /// Retrieves the current window height. + /// + /// The current window height. + static uint32_t GetWindowHeight(); + /// + /// Retrieves the current window fullscreen status. + /// + /// The current window fullscreen status.. + static bool IsFullscreen(); + /// + /// Closes the current window, and depending on the implementation, should also + /// close the application. + /// + static void CloseWindow(); + }; +} diff --git a/SHADE_Engine/src/Tools/SHLog.h b/SHADE_Engine/src/Tools/SHLog.h index 89dd9206..91117da6 100644 --- a/SHADE_Engine/src/Tools/SHLog.h +++ b/SHADE_Engine/src/Tools/SHLog.h @@ -9,7 +9,7 @@ Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ - +#pragma once // Standard Library #include // Project Headers diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 906511c1..b383f002 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -25,11 +25,16 @@ project "SHADE_Managed" includedirs { "%{prj.location}/src", + } + + externalincludedirs + { "%{IncludeDir.spdlog}/include", "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", "%{IncludeDir.yamlcpp}", + "%{IncludeDir.SDL}\\include", "%{IncludeDir.RTTR}/include", "%{IncludeDir.dotnet}\\include", "%{IncludeDir.reactphysics3d}\\include", @@ -38,13 +43,16 @@ project "SHADE_Managed" libdirs { - "%{IncludeDir.RTTR}/lib" + "%{IncludeDir.RTTR}/lib", + "%{IncludeDir.SDL}/lib" } links { "yaml-cpp", "imgui", + "SDL2.lib", + "SDL2main.lib", "SHADE_Engine", "SHADE_CSharp" } diff --git a/SHADE_Managed/src/Engine/Application.cxx b/SHADE_Managed/src/Engine/Application.cxx index c4bce19f..c19bafa6 100644 --- a/SHADE_Managed/src/Engine/Application.cxx +++ b/SHADE_Managed/src/Engine/Application.cxx @@ -19,8 +19,7 @@ of DigiPen Institute of Technology is prohibited. // External Dependencies #include "ECS_Base/Managers/SHSystemManager.h" #include "Editor/SHEditor.h" -#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h" -#include "Graphics/Windowing/SHWindow.h" +#include "Graphics/MiddleEnd/Interface/SHGraphicsSystemInterface.h" namespace SHADE { @@ -47,40 +46,19 @@ namespace SHADE } int Application::WindowWidth::get() { - auto gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem) - { - const auto WND = gfxSystem->GetWindow(); - return WND->GetWindowSize().first; - } - - throw gcnew System::InvalidOperationException("Unable to get current window width!"); + return SHGraphicsSystemInterface::GetWindowWidth(); } int Application::WindowHeight::get() { - auto gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem) - { - const auto WND = gfxSystem->GetWindow(); - return WND->GetWindowSize().second; - } - - throw gcnew System::InvalidOperationException("Unable to get current window height!"); + return SHGraphicsSystemInterface::GetWindowWidth(); } bool Application::IsFullscreen::get() { - auto gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem) - { - const auto WND = gfxSystem->GetWindow(); - return WND->GetWindowData().isFullscreen; - } - - throw gcnew System::InvalidOperationException("Unable to get current window height!"); + return SHGraphicsSystemInterface::IsFullscreen(); } /*void Application::IsFullscreen::set(bool value) { - return Pls::Window::SetFullScreen(value); + return SHGraphicsSystemInterface::SetFullscreen(value); }*/ /*---------------------------------------------------------------------------------*/ @@ -88,13 +66,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void Application::Quit() { - auto gfxSystem = SHSystemManager::GetSystem(); - if (gfxSystem) - { - auto WND = gfxSystem->GetWindow(); - return WND->Close(); - } - - throw gcnew System::InvalidOperationException("Unable to quit!"); + SHGraphicsSystemInterface::CloseWindow(); } } From ab46d0a96abcdab19a6ca08eb3f90160614d5c2f Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 31 Oct 2022 15:02:28 +0800 Subject: [PATCH 563/793] Decompose matrix WIP --- .../src/Camera/SHCameraArmComponent.cpp | 6 +- .../src/Camera/SHCameraArmComponent.h | 5 +- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 2 +- SHADE_Engine/src/Camera/SHCameraComponent.h | 2 +- SHADE_Engine/src/Camera/SHCameraDirector.cpp | 7 +- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 80 +++++++++++++++++-- SHADE_Engine/src/Camera/SHCameraSystem.h | 2 + 7 files changed, 84 insertions(+), 20 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp index 8cd856e6..3b4351fa 100644 --- a/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp @@ -7,15 +7,15 @@ namespace SHADE { SHCameraArmComponent::SHCameraArmComponent() - :pitch(0.0f), yaw(0.0f), armLength(1.0f),rtMatrix(), dirty(true) + :pitch(0.0f), yaw(0.0f), armLength(1.0f),offset(), dirty(true) { } - SHMatrix const& SHCameraArmComponent::GetMatrix() const noexcept + SHVec3 const& SHCameraArmComponent::GetOffset() const noexcept { - return rtMatrix; + return offset; } float SHCameraArmComponent::GetPitch() const noexcept diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.h b/SHADE_Engine/src/Camera/SHCameraArmComponent.h index 8a189434..e3636b70 100644 --- a/SHADE_Engine/src/Camera/SHCameraArmComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.h @@ -16,7 +16,7 @@ namespace SHADE float armLength; bool dirty; - SHMatrix rtMatrix; + SHVec3 offset; public: friend class SHCameraSystem; @@ -25,7 +25,8 @@ namespace SHADE //Getters - SHMatrix const& GetMatrix() const noexcept; + //SHMatrix const& GetMatrix() const noexcept; + SHVec3 const& GetOffset() const noexcept; float GetPitch() const noexcept; float GetYaw() const noexcept; float GetArmLength() const noexcept; diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 31afe2ac..ac451df5 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -13,7 +13,7 @@ namespace SHADE , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) , perspProj(true), dirtyView(true), dirtyProj(true) , viewMatrix(), projMatrix() - , position() + , position(), offset() { ComponentFamily::GetID(); } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index 846f4c2b..b778b8fa 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -33,7 +33,7 @@ namespace SHADE SHVec3 position; bool perspProj; - + SHVec3 offset; diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp index f1e98b71..98341098 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.cpp +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -49,12 +49,7 @@ namespace SHADE viewMatrix = camComponent->GetViewMatrix(); projMatrix = camComponent->GetProjMatrix(); } - SHCameraArmComponent* armComponent = SHComponentManager::GetComponent_s(mainCameraEID); - if (armComponent && camComponent) - { - SHMatrix tempView = armComponent->GetMatrix() * camComponent->GetViewMatrix(); - viewMatrix = tempView; - } + } void SHCameraDirector::SetMainCamera(SHCameraComponent& camera) noexcept diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 115d83bb..be34ecf0 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -6,6 +6,7 @@ #include "Math/Vector/SHVec2.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Transform/SHTransformComponent.h" +#include namespace SHADE @@ -60,6 +61,7 @@ namespace SHADE } UpdateCameraComponent(editorCamera); + } void SHCameraSystem::EditorCameraUpdate::Execute(double dt) noexcept { @@ -113,6 +115,8 @@ namespace SHADE //std::cout << "Camera position: " << camera.position.x << " " << camera.position.y << std::endl; system->UpdateCameraComponent(system->editorCamera); + + system->DecomposeViewMatrix(camera.viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position); } void SHCameraSystem::Init(void) @@ -142,11 +146,18 @@ namespace SHADE { if (pivot.dirty) { - pivot.rtMatrix = SHMatrix::RotateX(SHMath::DegreesToRadians(pivot.GetPitch())) - * SHMatrix::RotateY(SHMath::DegreesToRadians(pivot.GetYaw())) - * SHMatrix::Translate(SHVec3(0.0f , 0.0f, pivot.GetArmLength())); - pivot.rtMatrix = SHMatrix::Inverse(pivot.rtMatrix); + SHVec3 offset{ 0.0f,0.0f, pivot.GetArmLength() }; + offset = SHVec3::RotateX(offset, (pivot.GetPitch())); + offset = SHVec3::RotateY(offset, (pivot.GetYaw())); + + + //pivot.rtMatrix = SHMatrix::RotateX(SHMath::DegreesToRadians(pivot.GetPitch())) + // * SHMatrix::RotateY(SHMath::DegreesToRadians(pivot.GetYaw())) + // * SHMatrix::Translate(SHVec3(0.0f , 0.0f, pivot.GetArmLength())); + + pivot.offset = offset; + // pivot.rtMatrix = SHMatrix::Inverse(pivot.rtMatrix); } } @@ -168,6 +179,12 @@ namespace SHADE if (camera.dirtyView) { + camera.offset = SHVec3{ 0.0f }; + if (SHComponentManager::HasComponent(camera.GetEID())) + { + camera.offset = SHComponentManager::GetComponent(camera.GetEID())->GetOffset(); + } + SHVec3 view, right, UP; @@ -188,9 +205,12 @@ namespace SHADE camera.viewMatrix(2, 1) = view[1]; camera.viewMatrix(2, 2) = view[2]; - camera.viewMatrix(0, 3) = -right.Dot(camera.position); - camera.viewMatrix(1, 3) = -UP.Dot(camera.position); - camera.viewMatrix(2, 3) = -view.Dot(camera.position); + camera.viewMatrix(0, 3) = -right.Dot(camera.position + camera.offset); + camera.viewMatrix(1, 3) = -UP.Dot(camera.position + camera.offset); + camera.viewMatrix(2, 3) = -view.Dot(camera.position + camera.offset); + + + camera.dirtyView = false; } @@ -237,6 +257,13 @@ namespace SHADE SHVec3 target{ 0.0f,0.0f,-1.0f }; SHVec3 up = { 0.0f,1.0f,0.0f }; + if (SHComponentManager::HasComponent(camera.GetEID())) + { + auto arm = SHComponentManager::GetComponent(camera.GetEID()); + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch + arm->GetPitch())); + target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw + arm->GetYaw())); + } + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); @@ -310,6 +337,45 @@ namespace SHADE if (camera.roll < -clampVal) camera.SetRoll(-clampVal); + while (camera.yaw > 360) + camera.yaw -= 360; + while (camera.yaw < -360) + camera.yaw += 360; + + } + + void SHCameraSystem::SetMainCamera(EntityID eid, size_t directorIndex) noexcept + { + if (SHComponentManager::HasComponent(eid) && directorIndex < directorHandleList.size()) + directorHandleList[directorIndex]->SetMainCamera(*SHComponentManager::GetComponent(eid)); + else + { + SHLOG_WARNING("Set Main Camera warning: Entity does not have camera component or director does not exist.") + } + } + + void SHCameraSystem::DecomposeViewMatrix(SHMatrix& viewMatrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept + { + + float initPitch = pitch; + SHVec3 initPos = pos; + SHVec3 translate3, scale; + SHQuaternion quat; + + SHMatrix viewInverse = viewMatrix; + + viewInverse.Decompose(translate3, quat, scale); + yaw = 180+ SHMath::RadiansToDegrees(quat.ToEuler().y); + pitch = -SHMath::RadiansToDegrees(quat.ToEuler().x); + SHVec4 translate = (viewMatrix * SHVec4(0.0f, 0.0f, 0.0f,1.0f) ); + + //float forwardLengthXZ = sqrt(viewMatrix(0,2) * viewMatrix(0,2) + viewMatrix(2, 2) * viewMatrix(2, 2)); + //yaw = SHMath::RadiansToDegrees( atan2f(viewMatrix(2,0), viewMatrix(2, 2))); + //pitch = SHMath::RadiansToDegrees( atan2f(viewMatrix(2, 1), forwardLengthXZ )); + //roll = SHMath::RadiansToDegrees( atan2f(viewMatrix(0, 1), viewMatrix(0,0))); + + //std::cout << "Init yaw: " << initPitch<< " , yaw: " << pitch << std::endl; + std::cout << "Init pos: " << initPos.x << initPos.y<< initPos.z << " , pos: " << translate.x< Date: Mon, 31 Oct 2022 15:06:08 +0800 Subject: [PATCH 564/793] Added GetEntityByName to EntityManager --- .../src/ECS_Base/Managers/SHEntityManager.cpp | 11 ++++++++++- SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp index bbf8d400..6ce4f277 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.cpp @@ -213,5 +213,14 @@ namespace SHADE return SHSerialization::DeserializeEntityToSceneFromString(data); }*/ - + EntityID SHEntityManager::GetEntityByName(std::string const& name) noexcept + { + EntityID result = MAX_EID; + for (auto& entity : entityVec) + { + if (entity->name == name) + result = entity->GetEID(); + } + return result; + } } diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h index f32ab2c4..911748bd 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHEntityManager.h @@ -209,6 +209,8 @@ namespace SHADE //static EntityID DuplicateEntity(EntityID eid) noexcept; + static EntityID GetEntityByName(std::string const& name) noexcept; + protected: From b04565c9dcb557766f2b5be4095d0141df620265 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 15:07:10 +0800 Subject: [PATCH 565/793] Added implementation for scripts and component functions for scripts --- SHADE_Managed/src/Components/Component.cxx | 5 ++++ SHADE_Managed/src/Components/Component.hxx | 9 ++++++++ SHADE_Managed/src/Scripts/Script.cxx | 27 +++++++++++----------- SHADE_Managed/src/Scripts/Script.hxx | 9 ++++++++ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/SHADE_Managed/src/Components/Component.cxx b/SHADE_Managed/src/Components/Component.cxx index a6afc5cc..7f56fad3 100644 --- a/SHADE_Managed/src/Components/Component.cxx +++ b/SHADE_Managed/src/Components/Component.cxx @@ -67,6 +67,11 @@ namespace SHADE ScriptStore::RemoveScript(owner.GetEntity()); } + BaseComponent::operator bool(BaseComponent^ c) + { + return c != nullptr; + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Components/Component.hxx b/SHADE_Managed/src/Components/Component.hxx index 670e4e21..5ffa3952 100644 --- a/SHADE_Managed/src/Components/Component.hxx +++ b/SHADE_Managed/src/Components/Component.hxx @@ -101,6 +101,15 @@ namespace SHADE generic where T : ref class, Script void RemoveScript(); + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a component is null. + /// + /// Component to check. + static operator bool(BaseComponent^ c); + protected: /*-----------------------------------------------------------------------------*/ /* Constructors */ diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index ecd27325..d4004e03 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -18,6 +18,8 @@ of DigiPen Institute of Technology is prohibited. #include "Script.hxx" // Project Headers #include "Utility/Debug.hxx" +#include "ScriptStore.hxx" +#include "Engine/ECS.hxx" namespace SHADE { @@ -49,8 +51,7 @@ namespace SHADE generic void Script::RemoveComponent() { - throw gcnew System::NotImplementedException; - //ECS::RemoveComponent(owner.GetNativeEntity()); + owner.RemoveComponent(); } /*---------------------------------------------------------------------------------*/ @@ -59,37 +60,37 @@ namespace SHADE generic T Script::AddScript() { - throw gcnew System::NotImplementedException; - //return ScriptStore::AddScript(owner.GetEntity()); + return ScriptStore::AddScript(owner.GetEntity()); } generic T Script::GetScript() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScript(owner.GetEntity()); + return ScriptStore::GetScript(owner.GetEntity()); } generic T Script::GetScriptInChildren() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScriptInChildren(owner.GetEntity()); + return ScriptStore::GetScriptInChildren(owner.GetEntity()); } generic System::Collections::Generic::IEnumerable^ Script::GetScripts() { - throw gcnew System::NotImplementedException; - //return ScriptStore::GetScripts(owner.GetEntity()); + return ScriptStore::GetScripts(owner.GetEntity()); } generic void Script::RemoveScript() { - throw gcnew System::NotImplementedException; - //ScriptStore::RemoveScript(owner.GetEntity()); + ScriptStore::RemoveScript(owner.GetEntity()); } - + + Script::operator bool(Script^ s) + { + return s != nullptr; + } + /*---------------------------------------------------------------------------------*/ /* "All-time" Lifecycle Functions */ /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index cef9f4cd..bd336726 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -153,6 +153,15 @@ namespace SHADE generic where T : ref class, Script void RemoveScript(); + /*-----------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*-----------------------------------------------------------------------------*/ + /// + /// Implicit conversion operator to enable checking if a component is null. + /// + /// Component to check. + static operator bool(Script^ s); + internal: /*-----------------------------------------------------------------------------*/ /* "All-Time" Lifecycle Functions */ From 1d2b23d762d9aa6d30cb1ac92c88cf01c5f66e04 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 15:19:57 +0800 Subject: [PATCH 566/793] Fixed script deletion and OnDestroy never being called --- SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp index 5467fc56..a2981c06 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngineRoutines.cpp @@ -54,7 +54,7 @@ namespace SHADE /* System Routine Functions - FrameCleanUpRoutine */ /*-----------------------------------------------------------------------------------*/ SHScriptEngine::FrameCleanUpRoutine::FrameCleanUpRoutine() - : SHSystemRoutine("Script Engine Frame Clean Up", false) + : SHSystemRoutine("Script Engine Frame Clean Up", true) {} void SHScriptEngine::FrameCleanUpRoutine::Execute(double) noexcept { From f91b1f00ad887b08c228ced6693875691140cc08 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 15:28:28 +0800 Subject: [PATCH 567/793] Added implementation for GameObject.Find() --- SHADE_Managed/src/Engine/GameObject.cxx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index 8c78e399..c9a3cebc 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -19,6 +19,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS_Base/Managers/SHEntityManager.h" // Project Headers #include "ECS.hxx" +#include "Utility/Convert.hxx" #include "Scripts/ScriptStore.hxx" namespace SHADE @@ -39,7 +40,13 @@ namespace SHADE System::Nullable GameObject::Find(System::String ^ name) { // Search the GameObjectLibrary for an Entity with the specified name - throw gcnew System::NotImplementedException(); + const auto ENTITY_ID = SHEntityManager::GetEntityByName(Convert::ToNative(name)); + if (ENTITY_ID == MAX_EID) + { + return {}; + } + + return GameObject(ENTITY_ID); } /*---------------------------------------------------------------------------------*/ From 0e2b0177163d8f1d0cbec688a877874ec58a6476 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 31 Oct 2022 15:39:04 +0800 Subject: [PATCH 568/793] View matrix decomposition and set view matrix View matrix decomposition does not decompose roll yet but there isn't much use case --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 35 ++++++++++++++-------- SHADE_Engine/src/Camera/SHCameraSystem.h | 14 ++++----- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index be34ecf0..16f651e8 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -354,7 +354,7 @@ namespace SHADE } } - void SHCameraSystem::DecomposeViewMatrix(SHMatrix& viewMatrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept + void SHCameraSystem::DecomposeViewMatrix(SHMatrix const& viewMatrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept { float initPitch = pitch; @@ -362,20 +362,29 @@ namespace SHADE SHVec3 translate3, scale; SHQuaternion quat; - SHMatrix viewInverse = viewMatrix; + //SHMatrix viewInverse = viewMatrix; - viewInverse.Decompose(translate3, quat, scale); + viewMatrix.Decompose(translate3, quat, scale); yaw = 180+ SHMath::RadiansToDegrees(quat.ToEuler().y); pitch = -SHMath::RadiansToDegrees(quat.ToEuler().x); - SHVec4 translate = (viewMatrix * SHVec4(0.0f, 0.0f, 0.0f,1.0f) ); - - //float forwardLengthXZ = sqrt(viewMatrix(0,2) * viewMatrix(0,2) + viewMatrix(2, 2) * viewMatrix(2, 2)); - //yaw = SHMath::RadiansToDegrees( atan2f(viewMatrix(2,0), viewMatrix(2, 2))); - //pitch = SHMath::RadiansToDegrees( atan2f(viewMatrix(2, 1), forwardLengthXZ )); - //roll = SHMath::RadiansToDegrees( atan2f(viewMatrix(0, 1), viewMatrix(0,0))); - - //std::cout << "Init yaw: " << initPitch<< " , yaw: " << pitch << std::endl; - std::cout << "Init pos: " << initPos.x << initPos.y<< initPos.z << " , pos: " << translate.x< directorLibrary; std::vector directorHandleList; + + void UpdateCameraComponent(SHCameraComponent& camera) noexcept; + void UpdatePivotArmComponent(SHCameraArmComponent& pivot) noexcept; + + public: SHCameraSystem(void) = default; virtual ~SHCameraSystem(void) = default; @@ -55,13 +60,8 @@ namespace SHADE void ClampCameraRotation(SHCameraComponent& camera) noexcept; void UpdateEditorCamera(double dt) noexcept; void SetMainCamera(EntityID eid, size_t directorIndex) noexcept; - void DecomposeViewMatrix(SHMatrix& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept; - - protected: - - void UpdateCameraComponent(SHCameraComponent& camera) noexcept; - void UpdatePivotArmComponent(SHCameraArmComponent& pivot) noexcept; - + void DecomposeViewMatrix(SHMatrix const& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept; + void SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept; }; From b7abfde3104608844b94facca2ae9d44a869eef7 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 15:54:54 +0800 Subject: [PATCH 569/793] Added Collision and Trigger Events --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 209 ++++++++++++++++++- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 79 ++++--- SHADE_Engine/src/Physics/SHPhysicsUtils.cpp | 93 +++++++++ SHADE_Engine/src/Physics/SHPhysicsUtils.h | 116 ++++++++++ 4 files changed, 454 insertions(+), 43 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsUtils.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsUtils.h diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 03241dd4..00cd0ed1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -99,6 +99,16 @@ namespace SHADE return 0; } + const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetCollisionInfo() const noexcept + { + return collisionInfo; + } + + const SHPhysicsSystem::CollisionEvents& SHPhysicsSystem::GetTriggerInfo() const noexcept + { + return triggerInfo; + } + /*-----------------------------------------------------------------------------------*/ /* Setter Function Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -187,6 +197,7 @@ namespace SHADE settings.defaultBounciness = 0.0f; world = factory.createPhysicsWorld(settings); + world->setEventListener(this); // Set up solvers world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::SPLIT_IMPULSES); @@ -316,7 +327,63 @@ namespace SHADE { system->SyncTransforms(); - // TODO(Diren): Handle trigger messages for scripting + // TODO(Kah Wei): Take Collision & Trigger messages here + + system->ClearInvalidCollisions(); + } + } + + void SHPhysicsSystem::onContact(const CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) + { + auto contactPair = callbackData.getContactPair(i); + SHCollisionEvent newCollisionEvent = GenerateCollisionEvent(contactPair); + + // Find contact pair in container + auto existingEvent = std::ranges::find_if(collisionInfo.begin(), collisionInfo.end(), [&](const SHCollisionEvent& e) + { + const bool ENTITY_MATCH = e.value[0] == newCollisionEvent.value[0]; + const bool COLLIDERS_MATCH = e.value[1] == newCollisionEvent.value[1]; + return ENTITY_MATCH && COLLIDERS_MATCH; + }); + + if (existingEvent == collisionInfo.end()) + { + // Add new event + collisionInfo.emplace_back(newCollisionEvent); + } + else + { + existingEvent->collisionState = newCollisionEvent.collisionState; + } + } + } + + void SHPhysicsSystem::onTrigger(const rp3d::OverlapCallback::CallbackData& callbackData) + { + for (uint32_t i = 0; i < callbackData.getNbOverlappingPairs(); ++i) + { + auto contactPair = callbackData.getOverlappingPair(i); + SHCollisionEvent newTriggerEvent = GenerateCollisionEvent(contactPair); + + // Find contact pair in container + auto existingEvent = std::ranges::find_if(collisionInfo.begin(), collisionInfo.end(), [&](const SHCollisionEvent& e) + { + const bool ENTITY_MATCH = e.value[0] == newTriggerEvent.value[0]; + const bool COLLIDERS_MATCH = e.value[1] == newTriggerEvent.value[1]; + return ENTITY_MATCH && COLLIDERS_MATCH; + }); + + if (existingEvent == collisionInfo.end()) + { + // Add new event + triggerInfo.emplace_back(newTriggerEvent); + } + else + { + existingEvent->collisionState = newTriggerEvent.collisionState; + } } } @@ -468,6 +535,146 @@ namespace SHADE } } + void SHPhysicsSystem::ClearInvalidCollisions() noexcept + { + for (auto collisionInfoIter = collisionInfo.begin(); collisionInfoIter != collisionInfo.end();) + { + if (collisionInfoIter->GetCollisionState() == SHCollisionEvent::State::EXIT + || collisionInfoIter->GetCollisionState() == SHCollisionEvent::State::INVALID) + { + collisionInfoIter = collisionInfo.erase(collisionInfoIter); + } + else + { + ++collisionInfoIter; + } + } + + for (auto triggerInfoIter = triggerInfo.begin(); triggerInfoIter != triggerInfo.end();) + { + if (triggerInfoIter->GetCollisionState() == SHCollisionEvent::State::EXIT + || triggerInfoIter->GetCollisionState() == SHCollisionEvent::State::INVALID) + { + triggerInfoIter = triggerInfo.erase(triggerInfoIter); + } + else + { + ++triggerInfoIter; + } + } + } + + SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const rp3d::CollisionCallback::ContactPair& cp) noexcept + { + static const auto MATCH_COLLIDER = [](const SHPhysicsObject& physicsObject, const rp3d::Entity colliderID)->uint32_t + { + for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) + { + const auto* collider = physicsObject.rp3dBody->getCollider(i); + if (collider->getEntity() == colliderID) + return i; + } + + return std::numeric_limits::max(); + }; + + SHCollisionEvent cInfo; + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + for (auto& [entityID, physicsObject] : map) + { + // Match body 1 + if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) + { + cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); + + matched[SHCollisionEvent::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) + { + cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); + + matched[SHCollisionEvent::ENTITY_B] = true; + } + + if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) + return cInfo; + } + + return cInfo; + } + + SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const rp3d::OverlapCallback::OverlapPair& cp) noexcept + { + static const auto MATCH_COLLIDER = [](const SHPhysicsObject& physicsObject, const rp3d::Entity colliderID)->uint32_t + { + for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) + { + const auto* collider = physicsObject.rp3dBody->getCollider(i); + if (collider->getEntity() == colliderID) + return i; + } + + return std::numeric_limits::max(); + }; + + SHCollisionEvent cInfo; + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + + for (auto& [entityID, physicsObject] : map) + { + // Match body 1 + if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) + { + cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); + + matched[SHCollisionEvent::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) + { + cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); + + matched[SHCollisionEvent::ENTITY_B] = true; + } + + if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) + return cInfo; + } + + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + return cInfo; + } + + SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) { const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index a3c3bea1..8d043a7e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -23,7 +23,7 @@ #include "Math/Transform/SHTransformComponent.h" #include "Scene/SHSceneGraph.h" #include "SHPhysicsObject.h" - +#include "SHPhysicsUtils.h" namespace SHADE @@ -32,7 +32,8 @@ namespace SHADE /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ - class SH_API SHPhysicsSystem final : public SHSystem + class SH_API SHPhysicsSystem final : public SHSystem + , public rp3d::EventListener { public: /*---------------------------------------------------------------------------------*/ @@ -47,6 +48,8 @@ namespace SHADE bool sleepingEnabled; }; + using CollisionEvents = std::vector; + /*---------------------------------------------------------------------------------*/ /* Constructors & Destructor */ /*---------------------------------------------------------------------------------*/ @@ -57,13 +60,16 @@ namespace SHADE /* Getter Functions */ /*---------------------------------------------------------------------------------*/ - [[nodiscard]] double GetFixedDT () const noexcept; + [[nodiscard]] double GetFixedDT () const noexcept; - [[nodiscard]] bool IsSleepingEnabled () const noexcept; + [[nodiscard]] bool IsSleepingEnabled () const noexcept; - [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; - [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; - [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + [[nodiscard]] SHVec3 GetWorldGravity () const noexcept; + [[nodiscard]] uint16_t GetNumberVelocityIterations () const noexcept; + [[nodiscard]] uint16_t GetNumberPositionIterations () const noexcept; + + [[nodiscard]] const CollisionEvents& GetCollisionInfo () const noexcept; + [[nodiscard]] const CollisionEvents& GetTriggerInfo () const noexcept; /*---------------------------------------------------------------------------------*/ @@ -82,16 +88,14 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - void Init () override; - void Exit () override; + void Init () override; + void Exit () override; - //void AddRigidBody (EntityID entityID) noexcept; - //void AddCollider (EntityID entityID) noexcept; - //void RemoveRigidBody (EntityID entityID) noexcept; - //void RemoveCollider (EntityID entityID) noexcept; + void AddCollisionShape (EntityID entityID, SHCollider* collider); + void RemoveCollisionShape (EntityID entityID, int index); - void AddCollisionShape (EntityID entityID, SHCollider* collider); - void RemoveCollisionShape (EntityID entityID, int index); + void onContact (const rp3d::CollisionCallback::CallbackData& callbackData) override; + void onTrigger (const rp3d::OverlapCallback::CallbackData& callbackData) override; /*---------------------------------------------------------------------------------*/ /* System Routines */ @@ -156,49 +160,40 @@ namespace SHADE /* Data Members */ /*---------------------------------------------------------------------------------*/ - bool worldUpdated; + bool worldUpdated; - double interpolationFactor; - double fixedDT; - - rp3d::PhysicsWorld* world; - rp3d::PhysicsCommon factory; - - EntityObjectMap map; + double interpolationFactor; + double fixedDT; + rp3d::PhysicsWorld* world; + rp3d::PhysicsCommon factory; + EntityObjectMap map; + CollisionEvents collisionInfo; + CollisionEvents triggerInfo; /*---------------------------------------------------------------------------------*/ /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; - SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; - void DestroyPhysicsObject (EntityID entityID) noexcept; + + + SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; + SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; + void DestroyPhysicsObject (EntityID entityID) noexcept; void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; void SyncRigidBodyComponents (std::vector& denseArray) noexcept; void SyncColliderComponents (std::vector& denseArray) noexcept; void SyncTransforms () noexcept; + void ClearInvalidCollisions () noexcept; + + SHCollisionEvent GenerateCollisionEvent (const rp3d::CollisionCallback::ContactPair& cp) noexcept; + SHCollisionEvent GenerateCollisionEvent (const rp3d::OverlapCallback::OverlapPair& cp) noexcept; SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); }; - /*-----------------------------------------------------------------------------------*/ - /* Event Data Definitions */ - /*-----------------------------------------------------------------------------------*/ - - struct SHPhysicsColliderAddedEvent - { - EntityID entityID; - SHCollider::Type colliderType; - int colliderIndex; - }; - - struct SHPhysicsColliderRemovedEvent - { - EntityID entityID; - int colliderIndex; - }; + } // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp new file mode 100644 index 00000000..8d5bc956 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.cpp @@ -0,0 +1,93 @@ +/**************************************************************************************** + * \file SHPhysicsUtils.cpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for some Physics Utilities + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#include + +// Primary Header +#include "SHPhysicsUtils.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Constructors & Destructor Definitions */ + /*-----------------------------------------------------------------------------------*/ + + SHCollisionEvent::SHCollisionEvent() noexcept + : collisionState { State::INVALID } + { + ids[ENTITY_A] = MAX_EID; + ids[ENTITY_B] = MAX_EID; + ids[COLLIDER_A] = std::numeric_limits::max(); + ids[COLLIDER_B] = std::numeric_limits::max(); + } + + SHCollisionEvent::SHCollisionEvent(EntityID entityA, EntityID entityB) noexcept + : collisionState { State::INVALID } + { + ids[ENTITY_A] = entityA; + ids[ENTITY_B] = entityB; + ids[COLLIDER_A] = std::numeric_limits::max(); + ids[COLLIDER_B] = std::numeric_limits::max(); + } + + /*-----------------------------------------------------------------------------------*/ + /* Operator Overload Definitions */ + /*-----------------------------------------------------------------------------------*/ + + bool SHCollisionEvent::operator==(const SHCollisionEvent& rhs) const noexcept + { + return value[0] == rhs.value[0] && value[1] == rhs.value[1]; + } + + bool SHCollisionEvent::operator!=(const SHCollisionEvent& rhs) const noexcept + { + return value[0] != rhs.value[0] || value[1] != rhs.value[1]; + } + + /*-----------------------------------------------------------------------------------*/ + /* Getter Function Definitions */ + /*-----------------------------------------------------------------------------------*/ + + EntityID SHCollisionEvent::GetEntityA() const noexcept + { + return ids[ENTITY_A]; + } + + EntityID SHCollisionEvent::GetEntityB() const noexcept + { + return ids[ENTITY_B]; + } + + const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyA() const noexcept + { + return SHComponentManager::GetComponent_s(ids[ENTITY_A]); + } + + const SHRigidBodyComponent* SHCollisionEvent::GetRigidBodyB() const noexcept + { + return SHComponentManager::GetComponent_s(ids[ENTITY_B]); + } + + const SHCollider* SHCollisionEvent::GetColliderA() const noexcept + { + return &SHComponentManager::GetComponent(ids[ENTITY_A])->GetCollider(ids[COLLIDER_A]); + } + + const SHCollider* SHCollisionEvent::GetColliderB() const noexcept + { + return &SHComponentManager::GetComponent(ids[ENTITY_B])->GetCollider(ids[COLLIDER_B]); + } + + SHCollisionEvent::State SHCollisionEvent::GetCollisionState() const noexcept + { + return collisionState; + } + +} // namespace SHADE \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsUtils.h b/SHADE_Engine/src/Physics/SHPhysicsUtils.h new file mode 100644 index 00000000..57f9c6fc --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsUtils.h @@ -0,0 +1,116 @@ +/**************************************************************************************** + * \file SHPhysicsUtils.h + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Interface for some Physics Utilities + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +// Project Headers +#include "Components/SHColliderComponent.h" +#include "Components/SHRigidBodyComponent.h" + + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + + struct SHPhysicsColliderAddedEvent + { + EntityID entityID; + SHCollider::Type colliderType; + int colliderIndex; + }; + + struct SHPhysicsColliderRemovedEvent + { + EntityID entityID; + int colliderIndex; + }; + + class SH_API SHCollisionEvent + { + private: + /*---------------------------------------------------------------------------------*/ + /* Friends */ + /*---------------------------------------------------------------------------------*/ + + friend class SHPhysicsSystem; + + public: + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ + + enum class State + { + ENTER + , STAY + , EXIT + + , TOTAL + , INVALID = -1 + }; + + /*---------------------------------------------------------------------------------*/ + /* Constructors & Destructor */ + /*---------------------------------------------------------------------------------*/ + + SHCollisionEvent () noexcept; + SHCollisionEvent (EntityID entityA, EntityID entityB) noexcept; + + + SHCollisionEvent (const SHCollisionEvent& rhs) = default; + SHCollisionEvent (SHCollisionEvent&& rhs) = default; + ~SHCollisionEvent () = default; + + /*---------------------------------------------------------------------------------*/ + /* Operator Overloads */ + /*---------------------------------------------------------------------------------*/ + + bool operator== (const SHCollisionEvent& rhs) const noexcept; + bool operator!= (const SHCollisionEvent& rhs) const noexcept; + + SHCollisionEvent& operator= (const SHCollisionEvent& rhs) = default; + SHCollisionEvent& operator= (SHCollisionEvent&& rhs) = default; + + /*---------------------------------------------------------------------------------*/ + /* Getter Functions */ + /*---------------------------------------------------------------------------------*/ + + [[nodiscard]] EntityID GetEntityA () const noexcept; + [[nodiscard]] EntityID GetEntityB () const noexcept; + [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyA () const noexcept; + [[nodiscard]] const SHRigidBodyComponent* GetRigidBodyB () const noexcept; + [[nodiscard]] const SHCollider* GetColliderA () const noexcept; + [[nodiscard]] const SHCollider* GetColliderB () const noexcept; + [[nodiscard]] State GetCollisionState () const noexcept; + + private: + + static constexpr uint32_t ENTITY_A = 0; + static constexpr uint32_t ENTITY_B = 1; + static constexpr uint32_t COLLIDER_A = 2; + static constexpr uint32_t COLLIDER_B = 3; + + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ + + union + { + uint64_t value[2]; // EntityValue, ColliderIndexValue + uint32_t ids [4]; // EntityA, EntityB, ColliderIndexA, ColliderIndexB + }; + + State collisionState; + }; + + +} // namespace SHADE \ No newline at end of file From 3638828541701824556b34f9eab19602aee2e3ea Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 16:04:40 +0800 Subject: [PATCH 570/793] Fixed desync of rigid body velocities --- SHADE_Engine/src/Physics/SHCollider.h | 2 +- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 18 ++++-- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 67 +++++--------------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 2 - 4 files changed, 31 insertions(+), 58 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHCollider.h b/SHADE_Engine/src/Physics/SHCollider.h index f760ffd0..65e35698 100644 --- a/SHADE_Engine/src/Physics/SHCollider.h +++ b/SHADE_Engine/src/Physics/SHCollider.h @@ -96,7 +96,7 @@ namespace SHADE void SetDensity (float density) noexcept; void SetMaterial (const SHPhysicsMaterial& newMaterial) noexcept; - void SetPositionOffset (const SHVec3& positionOffset) noexcept; + void SetPositionOffset (const SHVec3& posOffset) noexcept; private: /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 4d4d8cd7..36836404 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -172,11 +172,15 @@ namespace SHADE { SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") - if (rb->dirtyFlags == 0) - return; - auto* rigidBody = reinterpret_cast(rp3dBody); + // Sync velocities + rb->linearVelocity = rigidBody->getLinearVelocity(); + rb->angularVelocity = rigidBody->getAngularVelocity(); + + if (rb->dirtyFlags == 0) + return; + const uint16_t RB_FLAGS = rb->dirtyFlags; for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) { @@ -266,8 +270,12 @@ namespace SHADE if (!collider.dirty) continue; - // Update offsets auto* rp3dCollider = rp3dBody->getCollider(index); + + // Update trigger flag + rp3dCollider->setIsTrigger(collider.IsTrigger()); + + // Update offsets rp3dCollider->setLocalToBodyTransform(rp3d::Transform(collider.GetPositionOffset(), SHQuaternion::Identity)); switch (collider.GetType()) @@ -293,6 +301,8 @@ namespace SHADE default: break; } + // TODO(Diren): Update Material + collider.dirty = false; ++index; } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 00cd0ed1..454759e4 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -281,6 +281,14 @@ namespace SHADE rp3dRigidBody->setLinearVelocity(SHVec3::Zero); rp3dRigidBody->setAngularVelocity(SHVec3::Zero); } + + const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; + system->SyncActiveStates(&physicsObject, COMPONENT_ACTIVE); + + if (!COMPONENT_ACTIVE) + continue; + + physicsObject.SyncRigidBody(rigidBodyComponent); } auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); @@ -288,13 +296,17 @@ namespace SHADE { colliderComponent->position = WORLD_POS; colliderComponent->orientation = WORLD_ROT; + + const bool COMPONENT_ACTIVE = colliderComponent->isActive; + system->SyncActiveStates(&physicsObject, COMPONENT_ACTIVE); + + if (!COMPONENT_ACTIVE) + continue; + + physicsObject.SyncColliders(colliderComponent); } } } - - // Update bodies and colliders if component is dirty - system->SyncRigidBodyComponents(SHComponentManager::GetDense()); - system->SyncColliderComponents(SHComponentManager::GetDense()); } void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept @@ -427,53 +439,6 @@ namespace SHADE physicsObject->rp3dBody->setIsActive(componentActive); } - - void SHPhysicsSystem::SyncRigidBodyComponents(std::vector& denseArray) noexcept - { - if (denseArray.empty()) - return; - - for (auto& comp : denseArray) - { - const EntityID ENTITY_ID = comp.GetEID(); - - // Get physicsObject - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - - // TODO(Diren): Check if active in hierarchy - const bool COMPONENT_ACTIVE = comp.isActive; - SyncActiveStates(physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject->SyncRigidBody(&comp); - } - } - - void SHPhysicsSystem::SyncColliderComponents(std::vector& denseArray) noexcept - { - if (denseArray.empty()) - return; - - for (auto& comp : denseArray) - { - const EntityID ENTITY_ID = comp.GetEID(); - - // Get physicsObject - auto* physicsObject = GetPhysicsObject(ENTITY_ID); - - // TODO(Diren): Check if active in hierarchy - const bool COMPONENT_ACTIVE = comp.isActive; - SyncActiveStates(physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject->SyncColliders(&comp); - } - } - void SHPhysicsSystem::SyncTransforms() noexcept { for (auto& [entityID, physicsObject] : map) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 8d043a7e..744615d1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -182,8 +182,6 @@ namespace SHADE void DestroyPhysicsObject (EntityID entityID) noexcept; void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; - void SyncRigidBodyComponents (std::vector& denseArray) noexcept; - void SyncColliderComponents (std::vector& denseArray) noexcept; void SyncTransforms () noexcept; void ClearInvalidCollisions () noexcept; From 2ffba202f764d3399cb6dfb49701d65d50e45d9f Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 16:29:29 +0800 Subject: [PATCH 571/793] Added proper implementation of IsActiveInHierarchy() --- SHADE_Managed/src/Engine/GameObject.cxx | 9 ++++++++- SHADE_Managed/src/Scripts/ScriptStore.cxx | 10 +++------- TempScriptsFolder/PrintWhenActive.cs | 11 +++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 TempScriptsFolder/PrintWhenActive.cs diff --git a/SHADE_Managed/src/Engine/GameObject.cxx b/SHADE_Managed/src/Engine/GameObject.cxx index c9a3cebc..55d53d68 100644 --- a/SHADE_Managed/src/Engine/GameObject.cxx +++ b/SHADE_Managed/src/Engine/GameObject.cxx @@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited. #include "ECS.hxx" #include "Utility/Convert.hxx" #include "Scripts/ScriptStore.hxx" +#include "Utility/Debug.hxx" namespace SHADE { @@ -63,7 +64,13 @@ namespace SHADE } bool GameObject::IsActiveInHierarchy::get() { - return true; // TODO: Update once we have an equivalent on the Entity object + auto node = SHSceneManager::GetCurrentSceneGraph().GetNode(GetEntity()); + if (!node) + { + Debug::LogWarning("Attempting to access a GameObject's ActiveInHierarchy state which does not exist. Assuming inactive."); + return false; + } + return node->IsActive(); } /*---------------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Scripts/ScriptStore.cxx b/SHADE_Managed/src/Scripts/ScriptStore.cxx index 1c732358..d7492fdc 100644 --- a/SHADE_Managed/src/Scripts/ScriptStore.cxx +++ b/SHADE_Managed/src/Scripts/ScriptStore.cxx @@ -667,14 +667,10 @@ namespace SHADE bool ScriptStore::isEntityActive(Entity entity) { - // Get native Entity - SHEntity* nativeEntity = SHEntityManager::GetEntityByID(entity); - - // Entity Validity Check - if (nativeEntity == nullptr) + // Invalid entity + if (!EntityUtils::IsValid(entity)) return false; - // Check active state - return nativeEntity->GetActive(); + return GameObject(entity).IsActiveInHierarchy; } } diff --git a/TempScriptsFolder/PrintWhenActive.cs b/TempScriptsFolder/PrintWhenActive.cs new file mode 100644 index 00000000..41afdd58 --- /dev/null +++ b/TempScriptsFolder/PrintWhenActive.cs @@ -0,0 +1,11 @@ +using SHADE; + +public class PrintWhenActive : Script +{ + public PrintWhenActive(GameObject gameObj) : base(gameObj) { } + + protected override void update() + { + Debug.Log("Active!"); + } +} \ No newline at end of file From 65013969a87bf9681321cd14ad687d5cfa798953 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 31 Oct 2022 16:39:06 +0800 Subject: [PATCH 572/793] Added Camera LookAt and CameraArmComponent works now --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 60 +++++++++++++++++++--- SHADE_Engine/src/Camera/SHCameraSystem.h | 2 +- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 16f651e8..a17a2132 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -182,7 +182,9 @@ namespace SHADE camera.offset = SHVec3{ 0.0f }; if (SHComponentManager::HasComponent(camera.GetEID())) { - camera.offset = SHComponentManager::GetComponent(camera.GetEID())->GetOffset(); + auto arm = SHComponentManager::GetComponent(camera.GetEID()); + camera.offset = arm->GetOffset(); + CameraLookAt(camera, camera.position); } SHVec3 view, right, UP; @@ -257,12 +259,7 @@ namespace SHADE SHVec3 target{ 0.0f,0.0f,-1.0f }; SHVec3 up = { 0.0f,1.0f,0.0f }; - if (SHComponentManager::HasComponent(camera.GetEID())) - { - auto arm = SHComponentManager::GetComponent(camera.GetEID()); - target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch + arm->GetPitch())); - target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw + arm->GetYaw())); - } + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); @@ -387,4 +384,53 @@ namespace SHADE DecomposeViewMatrix(viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position); camera.dirtyView = true; } + + void SHCameraSystem::CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept + { + + if (camera.position == target) + { + //lets off set it abit so the view is nt fked + target.z -= 0.0001f; + } + SHVec3 forward, right, upVec; + + SHVec3 up = { 0.0f,1.0f,0.0f }; + + + ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll)); + + //target = SHVec3::Normalise(target); + + SHVec3::RotateZ(up, camera.roll); + up = SHVec3::Normalise(up); + + + forward = target - (camera.position + camera.offset); forward = SHVec3::Normalise(forward); + right = SHVec3::Cross(forward, up); right = SHVec3::Normalise(right); + upVec = SHVec3::Cross(forward, right); + + + SHMatrix viewMtx; + viewMtx = SHMatrix::Identity; + viewMtx(0, 0) = right[0]; + viewMtx(0, 1) = right[1]; + viewMtx(0, 2) = right[2]; + + viewMtx(1, 0) = upVec[0]; + viewMtx(1, 1) = upVec[1]; + viewMtx(1, 2) = upVec[2]; + + viewMtx(2, 0) = forward[0]; + viewMtx(2, 1) = forward[1]; + viewMtx(2, 2) = forward[2]; + + viewMtx(0, 3) = -right.Dot(camera.position + camera.offset); + viewMtx(1, 3) = -upVec.Dot(camera.position + camera.offset); + viewMtx(2, 3) = -forward.Dot(camera.position + camera.offset); + + + SetCameraViewMatrix(camera, viewMtx); + } + } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 6f7e7d1f..98fd442f 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -62,7 +62,7 @@ namespace SHADE void SetMainCamera(EntityID eid, size_t directorIndex) noexcept; void DecomposeViewMatrix(SHMatrix const& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept; void SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept; - + void CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept; }; From 0ffd596734f4aa1960ee899fb0b21787c39e1d46 Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 31 Oct 2022 16:45:47 +0800 Subject: [PATCH 573/793] update player controller --- TempScriptsFolder/PlayerController.cs | 109 ++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 8 deletions(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 2e0123eb..0eb94d13 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -1,13 +1,37 @@ using SHADE; using System; +//in air controls? public class PlayerController : Script { + public enum RaccoonStates + { + IDILE, + WALKING, + RUNNING, + INAIR, + FALLING, + HOLDING, + CAUGHT, + TOTAL + } + private RigidBody rb; - public float xAxisMove; - public float zAxisMove; - public float force = 800.0f; + private float xAxisMove; + private float zAxisMove; + private RaccoonStates currentState = RaccoonStates.IDILE; + + public float maxMoveVel = 2.0f; + public float moveForce = 200.0f; + public float sprintMultiplier = 1.5f; + + public float jumpForce = 500.0f; + public float initialJumpForce = 100.0f; + public float maxJumpForce = 500.0f; + public float maxJumpTime = 500.0f; + private bool isJumping = false; + private bool isGrounded = false; public PlayerController(GameObject gameObj) : base(gameObj) { } @@ -18,14 +42,22 @@ public class PlayerController : Script { Debug.LogError("RigidBody is NULL!"); } + + RaccoonStates currentState = RaccoonStates.IDILE; } protected override void update() { - Move(); + currentState = RaccoonStates.IDILE; - //float x = xAxisMove * force * (float)Time.DeltaTime; - //Debug.Log(x.ToString()); + Move(); + Sprint(); + Jump(); + + if (rb != null && currentState == RaccoonStates.IDILE) + rb.LinearVelocity = new Vector3(0.0f, 0.0f, 0.0f); + + Debug.Log(currentState.ToString() + " x:" + rb.LinearVelocity.x.ToString() + " y:" + rb.LinearVelocity.y.ToString() + " z:" + rb.LinearVelocity.z.ToString()); } private void Move() @@ -45,8 +77,69 @@ public class PlayerController : Script else zAxisMove = 0; - if (rb != null) - rb.AddForce(new Vector3(xAxisMove * force * (float)Time.DeltaTime, 0.0f, zAxisMove * force * (float)Time.DeltaTime)); + if((Input.GetKey(Input.KeyCode.A) || Input.GetKey(Input.KeyCode.D) || Input.GetKey(Input.KeyCode.W) || Input.GetKey(Input.KeyCode.S)) && currentState != RaccoonStates.RUNNING) + currentState = RaccoonStates.WALKING; + + if (rb != null && currentState == RaccoonStates.WALKING) + { + if (rb.LinearVelocity.x <= maxMoveVel) + rb.AddForce(new Vector3(moveForce * xAxisMove * (float)Time.DeltaTime, 0.0f, 0.0f)); + else + { + Vector3 v = rb.LinearVelocity; + v.x = maxMoveVel; + rb.LinearVelocity = v; + } + + if (rb.LinearVelocity.z <= maxMoveVel) + rb.AddForce(new Vector3(0.0f, 0.0f, moveForce * zAxisMove * (float)Time.DeltaTime)); + else + { + Vector3 v = rb.LinearVelocity; + v.z = maxMoveVel; + rb.LinearVelocity = v; + } + } } + + private void Sprint() + { + //left shift not working for now and chang eto getkey down + if (Input.GetKey(Input.KeyCode.RightShift)) + { + if (currentState == RaccoonStates.WALKING && rb != null) + { + currentState = RaccoonStates.RUNNING; + rb.LinearVelocity *= sprintMultiplier; + } + } + + if (Input.GetKeyUp(Input.KeyCode.RightShift)) + { + if (currentState == RaccoonStates.RUNNING && rb != null) + { + currentState = RaccoonStates.WALKING; + rb.LinearVelocity /= sprintMultiplier; + } + } + } + + //press and hold jump + private void Jump() + { + if (currentState == RaccoonStates.WALKING || currentState == RaccoonStates.RUNNING || currentState == RaccoonStates.IDILE) + { + if (Input.GetKeyDown(Input.KeyCode.Space) && rb != null) + { + currentState = RaccoonStates.INAIR; + rb.AddForce(new Vector3(0.0f, jumpForce, 0.0f)); + } + } + + //collision check when grounded + + } + + } From f863f57466ad9887805f5e7357f7eb839afaed01 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 16:49:09 +0800 Subject: [PATCH 574/793] Triggers were being stored in the wrong container --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 211 +++++-------------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 22 +- SHADE_Engine/src/Physics/SHPhysicsSystem.hpp | 84 ++++++++ 3 files changed, 150 insertions(+), 167 deletions(-) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystem.hpp diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 454759e4..4939323e 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -257,7 +257,10 @@ namespace SHADE if (physicsObject.rp3dBody == nullptr) continue; - const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + const auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); + if (transformComponent && transformComponent->HasChanged()) { const auto WORLD_POS = transformComponent->GetWorldPosition(); @@ -266,46 +269,57 @@ namespace SHADE physicsObject.SetPosition(WORLD_POS); physicsObject.SetOrientation(WORLD_ROT); - auto* rigidBodyComponent = SHComponentManager::GetComponent_s(entityID); + // Sync physics component transforms + if (rigidBodyComponent) { rigidBodyComponent->position = WORLD_POS; rigidBodyComponent->orientation = WORLD_ROT; - - // Clear all forces and velocities if editor is stopped - if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) - { - auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); - rp3dRigidBody->resetForce(); - rp3dRigidBody->resetTorque(); - rp3dRigidBody->setLinearVelocity(SHVec3::Zero); - rp3dRigidBody->setAngularVelocity(SHVec3::Zero); - } - - const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; - system->SyncActiveStates(&physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject.SyncRigidBody(rigidBodyComponent); } - auto* colliderComponent = SHComponentManager::GetComponent_s(entityID); if (colliderComponent) { colliderComponent->position = WORLD_POS; colliderComponent->orientation = WORLD_ROT; - - const bool COMPONENT_ACTIVE = colliderComponent->isActive; - system->SyncActiveStates(&physicsObject, COMPONENT_ACTIVE); - - if (!COMPONENT_ACTIVE) - continue; - - physicsObject.SyncColliders(colliderComponent); } } + + // Sync rigid bodies + + if (rigidBodyComponent) + { + // Clear all forces and velocities if editor is stopped + if (SHSystemManager::GetSystem()->editorState == SHEditor::State::STOP) + { + auto* rp3dRigidBody = reinterpret_cast(physicsObject.rp3dBody); + rp3dRigidBody->resetForce(); + rp3dRigidBody->resetTorque(); + rp3dRigidBody->setLinearVelocity(SHVec3::Zero); + rp3dRigidBody->setAngularVelocity(SHVec3::Zero); + } + + // Sync active states + const bool COMPONENT_ACTIVE = rigidBodyComponent->isActive; + SyncActiveStates(physicsObject, COMPONENT_ACTIVE); + + if (!COMPONENT_ACTIVE) + continue; + + physicsObject.SyncRigidBody(rigidBodyComponent); + } + + // Sync colliders + + if (colliderComponent) + { + const bool COMPONENT_ACTIVE = colliderComponent->isActive; + SyncActiveStates(physicsObject, colliderComponent->isActive); + + if (!COMPONENT_ACTIVE) + continue; + + physicsObject.SyncColliders(colliderComponent); + } } } @@ -350,25 +364,20 @@ namespace SHADE for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) { auto contactPair = callbackData.getContactPair(i); - SHCollisionEvent newCollisionEvent = GenerateCollisionEvent(contactPair); + SHCollisionEvent newTriggerEvent = GenerateCollisionEvent(contactPair); // Find contact pair in container auto existingEvent = std::ranges::find_if(collisionInfo.begin(), collisionInfo.end(), [&](const SHCollisionEvent& e) { - const bool ENTITY_MATCH = e.value[0] == newCollisionEvent.value[0]; - const bool COLLIDERS_MATCH = e.value[1] == newCollisionEvent.value[1]; + const bool ENTITY_MATCH = e.value[0] == newTriggerEvent.value[0]; + const bool COLLIDERS_MATCH = e.value[1] == newTriggerEvent.value[1]; return ENTITY_MATCH && COLLIDERS_MATCH; }); if (existingEvent == collisionInfo.end()) - { - // Add new event - collisionInfo.emplace_back(newCollisionEvent); - } + collisionInfo.emplace_back(newTriggerEvent); else - { - existingEvent->collisionState = newCollisionEvent.collisionState; - } + existingEvent->collisionState = newTriggerEvent.collisionState; } } @@ -387,15 +396,10 @@ namespace SHADE return ENTITY_MATCH && COLLIDERS_MATCH; }); - if (existingEvent == collisionInfo.end()) - { - // Add new event + if (existingEvent == triggerInfo.end()) triggerInfo.emplace_back(newTriggerEvent); - } else - { existingEvent->collisionState = newTriggerEvent.collisionState; - } } } @@ -432,11 +436,11 @@ namespace SHADE map.erase(entityID); } - void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject* physicsObject, bool componentActive) noexcept + void SHPhysicsSystem::SyncActiveStates(SHPhysicsObject& physicsObject, bool componentActive) noexcept { - const bool RP3D_ACTIVE = physicsObject->rp3dBody->isActive(); + const bool RP3D_ACTIVE = physicsObject.rp3dBody->isActive(); if (RP3D_ACTIVE != componentActive) - physicsObject->rp3dBody->setIsActive(componentActive); + physicsObject.rp3dBody->setIsActive(componentActive); } void SHPhysicsSystem::SyncTransforms() noexcept @@ -529,117 +533,6 @@ namespace SHADE } } - SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const rp3d::CollisionCallback::ContactPair& cp) noexcept - { - static const auto MATCH_COLLIDER = [](const SHPhysicsObject& physicsObject, const rp3d::Entity colliderID)->uint32_t - { - for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) - { - const auto* collider = physicsObject.rp3dBody->getCollider(i); - if (collider->getEntity() == colliderID) - return i; - } - - return std::numeric_limits::max(); - }; - - SHCollisionEvent cInfo; - // Update collision state - cInfo.collisionState = static_cast(cp.getEventType()); - - // Match body and collider for collision event - const rp3d::Entity body1 = cp.getBody1()->getEntity(); - const rp3d::Entity body2 = cp.getBody2()->getEntity(); - const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); - const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); - - // Find and match both ids - bool matched[2] = { false, false }; - - for (auto& [entityID, physicsObject] : map) - { - // Match body 1 - if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) - { - cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); - - matched[SHCollisionEvent::ENTITY_A] = true; - } - - // Match body 2 - if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) - { - cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); - - matched[SHCollisionEvent::ENTITY_B] = true; - } - - if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) - return cInfo; - } - - return cInfo; - } - - SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const rp3d::OverlapCallback::OverlapPair& cp) noexcept - { - static const auto MATCH_COLLIDER = [](const SHPhysicsObject& physicsObject, const rp3d::Entity colliderID)->uint32_t - { - for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) - { - const auto* collider = physicsObject.rp3dBody->getCollider(i); - if (collider->getEntity() == colliderID) - return i; - } - - return std::numeric_limits::max(); - }; - - SHCollisionEvent cInfo; - - // Match body and collider for collision event - const rp3d::Entity body1 = cp.getBody1()->getEntity(); - const rp3d::Entity body2 = cp.getBody2()->getEntity(); - const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); - const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); - - // Find and match both ids - bool matched[2] = { false, false }; - - - for (auto& [entityID, physicsObject] : map) - { - // Match body 1 - if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) - { - cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); - - matched[SHCollisionEvent::ENTITY_A] = true; - } - - // Match body 2 - if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) - { - cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; - cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); - - matched[SHCollisionEvent::ENTITY_B] = true; - } - - if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) - return cInfo; - } - - // Update collision state - cInfo.collisionState = static_cast(cp.getEventType()); - - return cInfo; - } - - SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) { const auto& EVENT_DATA = reinterpret_cast*>(addComponentEvent.get()); diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 744615d1..01f633a8 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -28,6 +28,12 @@ namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Concepts */ + /*-----------------------------------------------------------------------------------*/ + + + /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ @@ -176,22 +182,22 @@ namespace SHADE /* Function Members */ /*---------------------------------------------------------------------------------*/ - SHPhysicsObject* EnsurePhysicsObject (EntityID entityID) noexcept; SHPhysicsObject* GetPhysicsObject (EntityID entityID) noexcept; void DestroyPhysicsObject (EntityID entityID) noexcept; - void SyncActiveStates (SHPhysicsObject* physicsObject, bool componentActive) noexcept; + static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; void SyncTransforms () noexcept; void ClearInvalidCollisions () noexcept; - SHCollisionEvent GenerateCollisionEvent (const rp3d::CollisionCallback::ContactPair& cp) noexcept; - SHCollisionEvent GenerateCollisionEvent (const rp3d::OverlapCallback::OverlapPair& cp) noexcept; - SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); + + template + || std::is_same_v>> + SHCollisionEvent GenerateCollisionEvent (const RP3DCollisionPair& cp) noexcept; }; +} // namespace SHADE - - -} // namespace SHADE \ No newline at end of file +#include "SHPhysicsSystem.hpp" \ No newline at end of file diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp new file mode 100644 index 00000000..02569d14 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.hpp @@ -0,0 +1,84 @@ +/**************************************************************************************** + * \file SHPhysicsSystem.hpp + * \author Diren D Bharwani, diren.dbharwani, 390002520 + * \brief Implementation for templated functions the Physics System + * + * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or + * disclosure of this file or its contents without the prior written consent + * of DigiPen Institute of Technology is prohibited. +****************************************************************************************/ + +#pragma once + +#include + +// Primary Header +#include "SHPhysicsSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Private Function Member Definitions */ + /*-----------------------------------------------------------------------------------*/ + + template + SHCollisionEvent SHPhysicsSystem::GenerateCollisionEvent(const RP3DCollisionPair& cp) noexcept + { + static const auto MATCH_COLLIDER = [] + ( + const SHPhysicsObject& physicsObject + , const rp3d::Entity colliderID + )->uint32_t + { + for (uint32_t i = 0; i < physicsObject.rp3dBody->getNbColliders(); ++i) + { + const auto* collider = physicsObject.rp3dBody->getCollider(i); + if (collider->getEntity() == colliderID) + return i; + } + + return std::numeric_limits::max(); + }; + + SHCollisionEvent cInfo; + + // Match body and collider for collision event + const rp3d::Entity body1 = cp.getBody1()->getEntity(); + const rp3d::Entity body2 = cp.getBody2()->getEntity(); + const rp3d::Entity collider1 = cp.getCollider1()->getEntity(); + const rp3d::Entity collider2 = cp.getCollider2()->getEntity(); + + // Find and match both ids + bool matched[2] = { false, false }; + + + for (auto& [entityID, physicsObject] : map) + { + // Match body 1 + if (matched[SHCollisionEvent::ENTITY_A] == false && physicsObject.rp3dBody->getEntity() == body1) + { + cInfo.ids[SHCollisionEvent::ENTITY_A] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_A] = MATCH_COLLIDER(physicsObject, collider1); + + matched[SHCollisionEvent::ENTITY_A] = true; + } + + // Match body 2 + if (matched[SHCollisionEvent::ENTITY_B] == false && physicsObject.rp3dBody->getEntity() == body2) + { + cInfo.ids[SHCollisionEvent::ENTITY_B] = entityID; + cInfo.ids[SHCollisionEvent::COLLIDER_B] = MATCH_COLLIDER(physicsObject, collider2); + + matched[SHCollisionEvent::ENTITY_B] = true; + } + + if (matched[SHCollisionEvent::ENTITY_A] == true && matched[SHCollisionEvent::ENTITY_B] == true) + return cInfo; + } + + // Update collision state + cInfo.collisionState = static_cast(cp.getEventType()); + + return cInfo; + } +} // namespace SHADE \ No newline at end of file From c6cc327141979a12b33c437dae2845351ef0808a Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 16:53:34 +0800 Subject: [PATCH 575/793] M dumb. --- SHADE_Engine/src/Physics/SHPhysicsObject.cpp | 148 +++++++++---------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp index 36836404..8b556409 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsObject.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsObject.cpp @@ -173,93 +173,93 @@ namespace SHADE SHASSERT(rp3dBody != nullptr, "ReactPhysics body does not exist!") auto* rigidBody = reinterpret_cast(rp3dBody); - - // Sync velocities - rb->linearVelocity = rigidBody->getLinearVelocity(); - rb->angularVelocity = rigidBody->getAngularVelocity(); - - if (rb->dirtyFlags == 0) - return; - - const uint16_t RB_FLAGS = rb->dirtyFlags; - for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) + if (rb->dirtyFlags != 0) { - // Check if current dirty flag has been set to true - if (RB_FLAGS & 1U << i) + const uint16_t RB_FLAGS = rb->dirtyFlags; + for (size_t i = 0; i < SHRigidBodyComponent::NUM_DIRTY_FLAGS; ++i) { - switch (i) + // Check if current dirty flag has been set to true + if (RB_FLAGS & 1U << i) { - case 0: // Gravity + switch (i) { - rigidBody->enableGravity(rb->IsGravityEnabled()); - break; - } - case 1: // Sleeping - { - rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); - break; - } - case 2: // Linear Constraints - { - const rp3d::Vector3 CONSTRAINTS + case 0: // Gravity { - rb->flags & 1U << 2 ? 0.0f : 1.0f, - rb->flags & 1U << 3 ? 0.0f : 1.0f, - rb->flags & 1U << 4 ? 0.0f : 1.0f - }; + rigidBody->enableGravity(rb->IsGravityEnabled()); + break; + } + case 1: // Sleeping + { + rigidBody->setIsAllowedToSleep(rb->IsAllowedToSleep()); + break; + } + case 2: // Linear Constraints + { + const rp3d::Vector3 CONSTRAINTS + { + rb->flags & 1U << 2 ? 0.0f : 1.0f, + rb->flags & 1U << 3 ? 0.0f : 1.0f, + rb->flags & 1U << 4 ? 0.0f : 1.0f + }; - rigidBody->setLinearLockAxisFactor(CONSTRAINTS); - break; - } - case 3: // Angular Constraints - { - const rp3d::Vector3 CONSTRAINTS + rigidBody->setLinearLockAxisFactor(CONSTRAINTS); + break; + } + case 3: // Angular Constraints { - rb->flags & 1U << 5 ? 0.0f : 1.0f, - rb->flags & 1U << 6 ? 0.0f : 1.0f, - rb->flags & 1U << 7 ? 0.0f : 1.0f - }; + const rp3d::Vector3 CONSTRAINTS + { + rb->flags & 1U << 5 ? 0.0f : 1.0f, + rb->flags & 1U << 6 ? 0.0f : 1.0f, + rb->flags & 1U << 7 ? 0.0f : 1.0f + }; - rigidBody->setAngularLockAxisFactor(CONSTRAINTS); - break; + rigidBody->setAngularLockAxisFactor(CONSTRAINTS); + break; + } + case 4: // Type + { + rigidBody->setType(static_cast(rb->GetType())); + break; + } + case 5: // Mass + { + rigidBody->setMass(rb->GetMass()); + break; + } + case 6: // Drag + { + rigidBody->setLinearDamping(rb->GetDrag()); + break; + } + case 7: // Angular Drag + { + rigidBody->setAngularDamping(rb->GetAngularDrag()); + break; + } + case 8: // Linear Velocity + { + rigidBody->setLinearVelocity(rb->GetLinearVelocity()); + break; + } + case 9: // Angular Velocity + { + rigidBody->setAngularVelocity(rb->GetAngularVelocity()); + break; + } + default: break; } - case 4: // Type - { - rigidBody->setType(static_cast(rb->GetType())); - break; - } - case 5: // Mass - { - rigidBody->setMass(rb->GetMass()); - break; - } - case 6: // Drag - { - rigidBody->setLinearDamping(rb->GetDrag()); - break; - } - case 7: // Angular Drag - { - rigidBody->setAngularDamping(rb->GetAngularDrag()); - break; - } - case 8: // Linear Velocity - { - rigidBody->setLinearVelocity(rb->GetLinearVelocity()); - break; - } - case 9: // Angular Velocity - { - rigidBody->setAngularVelocity(rb->GetAngularVelocity()); - break; - } - default: break; } } - } - rb->dirtyFlags = 0; + rb->dirtyFlags = 0; + } + else + { + rb->linearVelocity = rigidBody->getLinearVelocity(); + rb->angularVelocity = rigidBody->getAngularVelocity(); + } } void SHPhysicsObject::SyncColliders(SHColliderComponent* c) const noexcept From 883c5460bc78e9e32a7ef8f4621b862c6dc98872 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 31 Oct 2022 17:23:03 +0800 Subject: [PATCH 576/793] Added a boolean for CameraArm to lock and unlock camera look at --- SHADE_Engine/src/Camera/SHCameraArmComponent.cpp | 5 +++-- SHADE_Engine/src/Camera/SHCameraArmComponent.h | 4 ++-- SHADE_Engine/src/Camera/SHCameraDirector.h | 3 ++- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 7 ++++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp index 3b4351fa..9cb221ff 100644 --- a/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.cpp @@ -7,7 +7,7 @@ namespace SHADE { SHCameraArmComponent::SHCameraArmComponent() - :pitch(0.0f), yaw(0.0f), armLength(1.0f),offset(), dirty(true) + :pitch(0.0f), yaw(0.0f), armLength(1.0f),offset(), dirty(true), lookAtCameraOrigin(true) { } @@ -62,6 +62,7 @@ RTTR_REGISTRATION registration::class_("Camera Arm Component") .property("Arm Pitch", &SHCameraArmComponent::GetPitch, &SHCameraArmComponent::SetPitch) .property("Arm Yaw", &SHCameraArmComponent::GetYaw, &SHCameraArmComponent::SetYaw) - .property("Arm Length", &SHCameraArmComponent::GetArmLength, &SHCameraArmComponent::SetArmLength); + .property("Arm Length", &SHCameraArmComponent::GetArmLength, &SHCameraArmComponent::SetArmLength) + .property("Look At Camera Origin", &SHCameraArmComponent::lookAtCameraOrigin); } \ No newline at end of file diff --git a/SHADE_Engine/src/Camera/SHCameraArmComponent.h b/SHADE_Engine/src/Camera/SHCameraArmComponent.h index e3636b70..2b81a808 100644 --- a/SHADE_Engine/src/Camera/SHCameraArmComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraArmComponent.h @@ -22,8 +22,8 @@ namespace SHADE friend class SHCameraSystem; SHCameraArmComponent(); virtual ~SHCameraArmComponent() = default; - - + + bool lookAtCameraOrigin; //Getters //SHMatrix const& GetMatrix() const noexcept; SHVec3 const& GetOffset() const noexcept; diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h index 5d09788b..6d5404c5 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.h +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -21,6 +21,7 @@ namespace SHADE EntityID mainCameraEID; EntityID transitionCameraEID; + SHMatrix GetViewMatrix() const noexcept; SHMatrix GetProjMatrix() const noexcept; @@ -35,7 +36,7 @@ namespace SHADE protected: SHMatrix viewMatrix; SHMatrix projMatrix; - + }; typedef Handle DirectorHandle; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index a17a2132..d5bd414d 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -148,8 +148,8 @@ namespace SHADE { SHVec3 offset{ 0.0f,0.0f, pivot.GetArmLength() }; - offset = SHVec3::RotateX(offset, (pivot.GetPitch())); - offset = SHVec3::RotateY(offset, (pivot.GetYaw())); + offset = SHVec3::RotateX(offset, -(SHMath::DegreesToRadians(pivot.GetPitch()))); + offset = SHVec3::RotateY(offset, (SHMath::DegreesToRadians(pivot.GetYaw()))); //pivot.rtMatrix = SHMatrix::RotateX(SHMath::DegreesToRadians(pivot.GetPitch())) @@ -184,7 +184,8 @@ namespace SHADE { auto arm = SHComponentManager::GetComponent(camera.GetEID()); camera.offset = arm->GetOffset(); - CameraLookAt(camera, camera.position); + if(arm->lookAtCameraOrigin) + CameraLookAt(camera, camera.position); } SHVec3 view, right, UP; From a9c1bd7e7a4c92ed967719c5c87330ecdaea7ceb Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Mon, 31 Oct 2022 17:25:17 +0800 Subject: [PATCH 577/793] Added remove component broadcast to removeComponentOfEntity --- SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp index be78a146..75a86f37 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp @@ -40,6 +40,12 @@ namespace SHADE { comp->OnDestroy(); } + SHComponentRemovedEvent eventData; + eventData.eid = entityID; + eventData.removedComponentType = i; + + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); + } @@ -53,6 +59,7 @@ namespace SHADE //entityHandle.RemoveHandle(entityID); + } From dc20317a70837800ef53872004fe67614f0f96d3 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 17:25:31 +0800 Subject: [PATCH 578/793] M dumb again. --- SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 100 +++++++++---------- SHADE_Engine/src/Physics/SHPhysicsSystem.h | 4 +- 2 files changed, 50 insertions(+), 54 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index 4939323e..ac0eb792 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -363,21 +363,10 @@ namespace SHADE { for (uint32_t i = 0; i < callbackData.getNbContactPairs(); ++i) { - auto contactPair = callbackData.getContactPair(i); - SHCollisionEvent newTriggerEvent = GenerateCollisionEvent(contactPair); + const auto CONTACT_PAIR = callbackData.getContactPair(i); + const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(CONTACT_PAIR); - // Find contact pair in container - auto existingEvent = std::ranges::find_if(collisionInfo.begin(), collisionInfo.end(), [&](const SHCollisionEvent& e) - { - const bool ENTITY_MATCH = e.value[0] == newTriggerEvent.value[0]; - const bool COLLIDERS_MATCH = e.value[1] == newTriggerEvent.value[1]; - return ENTITY_MATCH && COLLIDERS_MATCH; - }); - - if (existingEvent == collisionInfo.end()) - collisionInfo.emplace_back(newTriggerEvent); - else - existingEvent->collisionState = newTriggerEvent.collisionState; + UpdateEventContainers(NEW_EVENT, collisionInfo); } } @@ -385,21 +374,10 @@ namespace SHADE { for (uint32_t i = 0; i < callbackData.getNbOverlappingPairs(); ++i) { - auto contactPair = callbackData.getOverlappingPair(i); - SHCollisionEvent newTriggerEvent = GenerateCollisionEvent(contactPair); + const auto& OVERLAP_PAIR = callbackData.getOverlappingPair(i); + const SHCollisionEvent NEW_EVENT = GenerateCollisionEvent(OVERLAP_PAIR); - // Find contact pair in container - auto existingEvent = std::ranges::find_if(collisionInfo.begin(), collisionInfo.end(), [&](const SHCollisionEvent& e) - { - const bool ENTITY_MATCH = e.value[0] == newTriggerEvent.value[0]; - const bool COLLIDERS_MATCH = e.value[1] == newTriggerEvent.value[1]; - return ENTITY_MATCH && COLLIDERS_MATCH; - }); - - if (existingEvent == triggerInfo.end()) - triggerInfo.emplace_back(newTriggerEvent); - else - existingEvent->collisionState = newTriggerEvent.collisionState; + UpdateEventContainers(NEW_EVENT, triggerInfo); } } @@ -495,42 +473,52 @@ namespace SHADE } // Convert RP3D Transform to SHADE - auto* transformComponent = SHComponentManager::GetComponent(entityID); - transformComponent->SetWorldPosition(rp3dPos); - transformComponent->SetWorldOrientation(rp3dRot); + auto* transformComponent = SHComponentManager::GetComponent_s(entityID); + + if (transformComponent != nullptr) + { + transformComponent->SetWorldPosition(rp3dPos); + transformComponent->SetWorldOrientation(rp3dRot); + } // Cache transforms physicsObject.prevTransform = CURRENT_TF; } } + void SHPhysicsSystem::UpdateEventContainers(const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept + { + const auto IT = std::ranges::find_if(container.begin(), container.end(), [&](const SHCollisionEvent& e) + { + const bool ENTITY_MATCH = e.value[0] == collisionEvent.value[0]; + const bool COLLIDERS_MATCH = e.value[1] == collisionEvent.value[1]; + return ENTITY_MATCH && COLLIDERS_MATCH; + }); + + if (IT == container.end()) + container.emplace_back(collisionEvent); + else + IT->collisionState = collisionEvent.collisionState; + } + void SHPhysicsSystem::ClearInvalidCollisions() noexcept { - for (auto collisionInfoIter = collisionInfo.begin(); collisionInfoIter != collisionInfo.end();) + static const auto CLEAR = [](CollisionEvents& container) { - if (collisionInfoIter->GetCollisionState() == SHCollisionEvent::State::EXIT - || collisionInfoIter->GetCollisionState() == SHCollisionEvent::State::INVALID) + for (auto eventIter = container.begin(); eventIter != container.end();) { - collisionInfoIter = collisionInfo.erase(collisionInfoIter); - } - else - { - ++collisionInfoIter; - } - } + const bool CLEAR_EVENT = eventIter->GetCollisionState() == SHCollisionEvent::State::EXIT + || eventIter->GetCollisionState() == SHCollisionEvent::State::INVALID; - for (auto triggerInfoIter = triggerInfo.begin(); triggerInfoIter != triggerInfo.end();) - { - if (triggerInfoIter->GetCollisionState() == SHCollisionEvent::State::EXIT - || triggerInfoIter->GetCollisionState() == SHCollisionEvent::State::INVALID) - { - triggerInfoIter = triggerInfo.erase(triggerInfoIter); + if (CLEAR_EVENT) + eventIter = container.erase(eventIter); + else + ++eventIter; } - else - { - ++triggerInfoIter; - } - } + }; + + CLEAR(collisionInfo); + CLEAR(triggerInfo); } SHEventHandle SHPhysicsSystem::AddPhysicsComponent(SHEventPtr addComponentEvent) @@ -621,6 +609,9 @@ namespace SHADE const EntityID ENTITY_ID = EVENT_DATA->data->eid; auto* physicsObject = GetPhysicsObject(ENTITY_ID); + auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); + SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") if (REMOVED_ID == RIGID_BODY_ID) @@ -628,7 +619,6 @@ namespace SHADE world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); physicsObject->rp3dBody = nullptr; - auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); if (colliderComponent != nullptr) { // Preserve colliders as a collision body @@ -659,6 +649,10 @@ namespace SHADE auto* collider = physicsObject->rp3dBody->getCollider(i); physicsObject->rp3dBody->removeCollider(collider); } + + // Check for a rigidbody component + if (rigidBodyComponent == nullptr) + physicsObject->rp3dBody = nullptr; } if (physicsObject->rp3dBody == nullptr) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/SHPhysicsSystem.h index 01f633a8..f564dc2d 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.h @@ -188,7 +188,9 @@ namespace SHADE static void SyncActiveStates (SHPhysicsObject& physicsObject, bool componentActive) noexcept; void SyncTransforms () noexcept; - void ClearInvalidCollisions () noexcept; + + static void UpdateEventContainers (const SHCollisionEvent& collisionEvent, CollisionEvents& container) noexcept; + void ClearInvalidCollisions () noexcept; SHEventHandle AddPhysicsComponent (SHEventPtr addComponentEvent); SHEventHandle RemovePhysicsComponent (SHEventPtr removeComponentEvent); From 797f4bfd75cdfbe1e126dad1a1a595df9322cfa2 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 17:35:52 +0800 Subject: [PATCH 579/793] Fixed shader changes --- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4665 -> 4665 bytes .../DeferredComposite_CS.shshaderb.shmeta | 2 +- Assets/Shaders/TestCube_FS.shshaderb | Bin 2545 -> 2545 bytes Assets/Shaders/TestCube_FS.shshaderb.shmeta | 2 +- Assets/Shaders/TestCube_VS.shshaderb | Bin 3305 -> 3305 bytes Assets/Shaders/TestCube_VS.shshaderb.shmeta | 2 +- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 15 +++------------ .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 +- 8 files changed, 7 insertions(+), 16 deletions(-) diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index 889de5fb344289c281264b054407d97c317a7fff..4326daf10db596d391072bcf50ec14f892c4b0e6 100644 GIT binary patch delta 10 Rcmdm~vQvdoVI!l35C9W90@wfm delta 10 Rcmdm~vQveTX(OYB5C9UT0=fVI diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb.shmeta b/Assets/Shaders/DeferredComposite_CS.shshaderb.shmeta index 8f18b04a..62c2a3fe 100644 --- a/Assets/Shaders/DeferredComposite_CS.shshaderb.shmeta +++ b/Assets/Shaders/DeferredComposite_CS.shshaderb.shmeta @@ -1,3 +1,3 @@ Name: DeferredComposite_CS -ID: 42814284 +ID: 45072428 Type: 2 diff --git a/Assets/Shaders/TestCube_FS.shshaderb b/Assets/Shaders/TestCube_FS.shshaderb index b0113dc7799a94fb1c40720187c05a9b26a2617c..95b4f62ae89c1bd3dc23f684757a7298c60833a3 100644 GIT binary patch delta 10 Rcmew;{85-uU?bxPP5>7&1H}LU delta 10 Rcmew;{85;ZaU6?1GWGF diff --git a/Assets/Shaders/TestCube_FS.shshaderb.shmeta b/Assets/Shaders/TestCube_FS.shshaderb.shmeta index 42f270af..fbe098b1 100644 --- a/Assets/Shaders/TestCube_FS.shshaderb.shmeta +++ b/Assets/Shaders/TestCube_FS.shshaderb.shmeta @@ -1,3 +1,3 @@ Name: TestCube_FS -ID: 37450402 +ID: 46377769 Type: 2 diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb index 03e23af37451b6c4c0791110541c7b6e31d07bbe..7a7b047a30087431f6c695dd50c78ecca6b992ca 100644 GIT binary patch delta 10 RcmaDU`BIXRaURequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); // Load Built In Shaders - static constexpr AssetID VS_DEFAULT = 41688429; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); - static constexpr AssetID FS_DEFAULT = 37450402; defaultFragShader = SHResourceManager::LoadOrGet(FS_DEFAULT); - static constexpr AssetID CS_PURE_COPY = 34987209; copyComputeShader = SHResourceManager::LoadOrGet(CS_PURE_COPY); + static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); + static constexpr AssetID FS_DEFAULT = 46377769; defaultFragShader = SHResourceManager::LoadOrGet(FS_DEFAULT); + static constexpr AssetID CS_COMPOSITE = 45072428; deferredCompositeShader = SHResourceManager::LoadOrGet(CS_COMPOSITE); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept @@ -183,16 +183,7 @@ namespace SHADE gBufferSubpass->AddColorOutput("Albedo"); gBufferSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - //// kirsch - //auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - //gBufferNode->AddNodeCompute(kirschShader, { "Position", "Scene" }); - - //// copy - //auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); - //gBufferNode->AddNodeCompute(pureCopyShader, { "Position", "Scene" }); - // deferred composite - auto deferredCompositeShader = shaderModuleLibrary.GetBuiltInShaderModule("DeferredComposite_CS"); gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "Scene" }); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 27c51dbe..3f899446 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -353,7 +353,7 @@ namespace SHADE // Built-In Shaders Handle defaultVertShader; Handle defaultFragShader; - Handle copyComputeShader; + Handle deferredCompositeShader; // Built-In Materials Handle defaultMaterial; From 5bb728663cab404fdc56aa3a27c027080127200c Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 17:47:38 +0800 Subject: [PATCH 580/793] Materials are now serializable and deserializable --- .../MiddleEnd/Materials/SHMaterialSpec.h | 36 ++++++ SHADE_Engine/src/Resource/SHResourceManager.h | 7 ++ .../src/Resource/SHResourceManager.hpp | 69 ++++++++++ .../Serialization/SHSerializationHelper.hpp | 118 ++++++------------ 4 files changed, 150 insertions(+), 80 deletions(-) create mode 100644 SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h new file mode 100644 index 00000000..338c34b2 --- /dev/null +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Materials/SHMaterialSpec.h @@ -0,0 +1,36 @@ +/************************************************************************************//*! +\file SHMaterialSpec.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the struct definition of SHMaterialSpec. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Standard Library +#include +#include +#include +// Project Includes +#include "Assets/SHAssetMacros.h" + +namespace SHADE +{ + /*************************************************************************************/ + /*! + \brief + Describes a Material's serialized properties. A representation of a material that is + independent of GPU resources. + */ + /*************************************************************************************/ + struct SHMaterialSpec + { + AssetID vertexShader; + AssetID fragShader; + std::string subpassName; + YAML::Node properties; + }; +} diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index cd014da8..c2ee547e 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -23,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" #include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" +#include "Graphics/MiddleEnd/Interface/SHMaterial.h" namespace SHADE { @@ -47,6 +48,12 @@ namespace SHADE { using AssetType = SHShaderAsset; }; + template<> + struct SHResourceLoader + { + using AssetType = std::string; + }; + /// /// Static class responsible for loading and caching runtime resources from their diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index badb301f..eef46241 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -13,6 +13,8 @@ of DigiPen Institute of Technology is prohibited. #pragma once // Primary Include #include "SHResourceManager.h" +// External Dependencies +#include // Project Includes #include "Assets/SHAssetManager.h" #include "Assets/Asset Types/SHAssetIncludes.h" @@ -21,6 +23,7 @@ of DigiPen Institute of Technology is prohibited. #include "Tools/SHLog.h" #include "Graphics/Shaders/SHVkShaderModule.h" #include "Graphics/Devices/SHVkLogicalDevice.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" namespace SHADE { @@ -179,7 +182,73 @@ namespace SHADE // Materials else if constexpr (std::is_same_v) { + // Get the data we need to construct + SHMaterialSpec matSpec = YAML::Node(assetData).as(); + // Load shaders + auto vertexShader = SHResourceManager::LoadOrGet(matSpec.vertexShader); + auto fragShader = SHResourceManager::LoadOrGet(matSpec.fragShader); + + // Ensure that both shaders are present + if (!(vertexShader && fragShader)) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as shaders failed to be loaded."); + return {}; + } + + // Grab subpass from worldRenderer + auto renderPass = gfxSystem->GetPrimaryRenderpass(); + if (!renderPass) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as RenderPass could not be found."); + return {}; + } + auto subPass = renderPass->GetSubpass(matSpec.subpassName); + if (!subPass) + { + SHLOG_ERROR("[SHResourceManager] Failed to load material as SubPass could not be found."); + return {}; + } + + // Create material + auto matHandle = gfxSystem->AddMaterial(vertexShader, fragShader, subPass); + + // Set properties for the material + Handle pipelineProperties = matHandle.GetShaderBlockInterface(); + for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) + { + const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); + const auto& PROP_NODE = matSpec.properties; + if (PROP_NODE) + { + const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); + const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); + switch (VARIABLE->type) + { + case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: + matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::INT: + matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: + matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: + matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: + matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + break; + case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: + default: + continue; + break; + } + } + } + + return matHandle; } } } diff --git a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp index 06d4227b..2179d1cf 100644 --- a/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp +++ b/SHADE_Engine/src/Serialization/SHSerializationHelper.hpp @@ -12,8 +12,11 @@ #include "Resource/SHResourceManager.h" #include "Graphics/MiddleEnd/Interface/SHRenderable.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "SHSerializationTools.h" #include "Physics/Components/SHColliderComponent.h" +#include "Graphics/MiddleEnd/Materials/SHMaterialSpec.h" +#include "Tools/SHLog.h" namespace YAML { @@ -310,88 +313,38 @@ namespace YAML return node; } - static bool decode(YAML::Node const& node, SHMaterial& rhs) - { - // Retrieve Shader Asset IDs - AssetID vertShaderId = 0; - AssetID fragShaderId = 0; - if (node[VERT_SHADER_YAML_TAG.data()]) - vertShaderId = node[VERT_SHADER_YAML_TAG.data()].as(); - if (node[FRAG_SHADER_YAML_TAG.data()]) - fragShaderId = node[FRAG_SHADER_YAML_TAG.data()].as(); + }; - // Ensure that both shaders are present - if (vertShaderId == 0 || fragShaderId == 0) - return false; // No pipeline + template<> + struct convert + { + static constexpr std::string_view VERT_SHADER_YAML_TAG = "VertexShader"; + static constexpr std::string_view FRAG_SHADER_YAML_TAG = "FragmentShader"; + static constexpr std::string_view SUBPASS_YAML_TAG = "SubPass"; + static constexpr std::string_view PROPS_YAML_TAG = "Properties"; - // Get Shader Modules - Handle vertexShader, fragShader; - vertexShader = SHResourceManager::LoadOrGet(vertShaderId); - fragShader = SHResourceManager::LoadOrGet(fragShaderId); + static bool decode(YAML::Node const& node, SHMaterialSpec& rhs) + { + // Retrieve Shader Asset IDs + if (!node[VERT_SHADER_YAML_TAG.data()]) + return false; + rhs.vertexShader = node[VERT_SHADER_YAML_TAG.data()].as(); + if (!node[FRAG_SHADER_YAML_TAG.data()]) + return false; + rhs.fragShader = node[FRAG_SHADER_YAML_TAG.data()].as(); - // Get Pipeline Library - if (node[SUBPASS_YAML_TAG.data()]) - { - auto gfxSystem = SHSystemManager::GetSystem(); - if (!gfxSystem) - return false; + // Retrieve Subpass + if (!node[SUBPASS_YAML_TAG.data()]) + return false; + rhs.subpassName = node[SUBPASS_YAML_TAG.data()].as(); - // Grab subpass from worldRenderer - auto renderPass = gfxSystem->GetPrimaryRenderpass(); - if (!renderPass) - return false; - auto subPass = renderPass->GetSubpass(node[SUBPASS_YAML_TAG.data()].as()); - if (!subPass) - return false; + // Retrieve + if (!node[PROPS_YAML_TAG.data()]) + return false; + rhs.properties = node[PROPS_YAML_TAG.data()]; - // Set Pipeline - rhs.SetPipeline(renderPass->GetOrCreatePipeline - ( - std::make_pair(vertexShader, fragShader), - subPass - )); - } - - if (node[PROPS_YAML_TAG.data()].IsDefined()) - { - // Loop through all properties - Handle pipelineProperties = rhs.GetShaderBlockInterface(); - const YAML::Node& PROPS_NODE = node[PROPS_YAML_TAG.data()]; - for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) - { - const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); - const auto& PROP_NODE = PROPS_NODE[PROP_NAME.data()]; - if (PROP_NODE) - { - const std::string& VAR_NAME = pipelineProperties->GetVariableName(i); - const SHShaderBlockInterface::Variable* VARIABLE = pipelineProperties->GetVariable(i); - switch (VARIABLE->type) - { - case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: - rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::INT: - rhs.SetProperty(VARIABLE->offset, PROP_NODE.as()); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec2(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec3(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: - rhs.SetProperty(VARIABLE->offset, SHSerializationTools::YAMLToVec4(PROP_NODE)); - break; - case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: - default: - continue; - break; - } - } - } - } - return true; - } + return true; + } }; template<> @@ -404,7 +357,7 @@ namespace YAML { YAML::Node node; node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMesh()).value_or(0); - node[MAT_YAML_TAG.data()] = 0; // TODO: Asset ID + node[MAT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetMaterial()->GetBaseMaterial()).value_or(0); return node; } static bool decode(YAML::Node const& node, SHRenderable& rhs) @@ -415,12 +368,17 @@ namespace YAML } if (node[MAT_YAML_TAG.data()].IsDefined()) { - // TODO: Convert Asset ID To Material HAndle // Temporarily, use default material auto gfxSystem = SHSystemManager::GetSystem(); if (!gfxSystem) return false; - rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(gfxSystem->GetDefaultMaterial())); + Handle baseMat = SHResourceManager::LoadOrGet(node[MAT_YAML_TAG.data()].as()); + if (!baseMat) + { + baseMat = gfxSystem->GetDefaultMaterial(); + SHLog::Warning("[SHSerializationHelper] Unable to load specified material. Falling back to default material."); + } + rhs.SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(baseMat)); } return true; } From a8cb36b46f705a9ad22f6166da92ed9925c84f25 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Mon, 31 Oct 2022 17:55:32 +0800 Subject: [PATCH 581/793] Fixed component removal bug on application close --- .../src/ECS_Base/Managers/SHComponentManager.cpp | 12 ++++++------ SHADE_Engine/src/Physics/SHPhysicsSystem.cpp | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp index 75a86f37..db0d733f 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHComponentManager.cpp @@ -39,13 +39,13 @@ namespace SHADE if (comp) { comp->OnDestroy(); + + SHComponentRemovedEvent eventData; + eventData.eid = entityID; + eventData.removedComponentType = i; + + SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); } - SHComponentRemovedEvent eventData; - eventData.eid = entityID; - eventData.removedComponentType = i; - - SHEventManager::BroadcastEvent(eventData, SH_COMPONENT_REMOVED_EVENT); - } diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp index ac0eb792..53db5453 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystem.cpp @@ -612,10 +612,17 @@ namespace SHADE auto* rigidBodyComponent = SHComponentManager::GetComponent_s(ENTITY_ID); auto* colliderComponent = SHComponentManager::GetComponent_s(ENTITY_ID); - SHASSERT(physicsObject != nullptr, "Physics object has been lost from the world!") + SHASSERT(physicsObject != nullptr, "Physics object " + std::to_string(ENTITY_ID) + " has been lost from the world!") if (REMOVED_ID == RIGID_BODY_ID) { + // Wake up all physics objects + for (auto& [entityID, object] : map) + { + if (SHComponentManager::HasComponent(entityID)) + reinterpret_cast(object.rp3dBody)->setIsSleeping(false); + } + world->destroyRigidBody(reinterpret_cast(physicsObject->rp3dBody)); physicsObject->rp3dBody = nullptr; @@ -630,13 +637,6 @@ namespace SHADE for (auto& collider : colliderComponent->colliders) physicsObject->AddCollider(&collider); } - - // Wake up all physics objects - for (auto& [entityID, object] : map) - { - if (SHComponentManager::HasComponent(entityID)) - reinterpret_cast(object.rp3dBody)->setIsSleeping(false); - } } if (REMOVED_ID == COLLIDER_ID) From 48f01e41642ad8852ff2a6cecfc48aef73212f47 Mon Sep 17 00:00:00 2001 From: Glence Date: Mon, 31 Oct 2022 18:05:36 +0800 Subject: [PATCH 582/793] camp vel --- TempScriptsFolder/PlayerController.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/TempScriptsFolder/PlayerController.cs b/TempScriptsFolder/PlayerController.cs index 0eb94d13..29ac9007 100644 --- a/TempScriptsFolder/PlayerController.cs +++ b/TempScriptsFolder/PlayerController.cs @@ -82,21 +82,28 @@ public class PlayerController : Script if (rb != null && currentState == RaccoonStates.WALKING) { - if (rb.LinearVelocity.x <= maxMoveVel) - rb.AddForce(new Vector3(moveForce * xAxisMove * (float)Time.DeltaTime, 0.0f, 0.0f)); + if (rb.LinearVelocity.x <= maxMoveVel || rb.LinearVelocity.x >= -maxMoveVel) + rb.AddForce(new Vector3(moveForce * xAxisMove, 0.0f, 0.0f)); else { Vector3 v = rb.LinearVelocity; - v.x = maxMoveVel; + if(v.x >= 0) + v.x = maxMoveVel; + else + v.x = -maxMoveVel; + rb.LinearVelocity = v; } - if (rb.LinearVelocity.z <= maxMoveVel) - rb.AddForce(new Vector3(0.0f, 0.0f, moveForce * zAxisMove * (float)Time.DeltaTime)); + if (rb.LinearVelocity.z <= maxMoveVel || rb.LinearVelocity.z >= -maxMoveVel) + rb.AddForce(new Vector3(0.0f, 0.0f, moveForce * zAxisMove )); else { Vector3 v = rb.LinearVelocity; - v.z = maxMoveVel; + if (v.z >= 0) + v.z = maxMoveVel; + else + v.z = -maxMoveVel; rb.LinearVelocity = v; } } From 2ca353a0b7c8dfe46dad7df1cacf5f0d7ccb03bc Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 18:18:06 +0800 Subject: [PATCH 583/793] Fixed compilation issues in SHResourceManager --- SHADE_Engine/src/Resource/SHResourceManager.h | 3 ++- SHADE_Engine/src/Resource/SHResourceManager.hpp | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Resource/SHResourceManager.h b/SHADE_Engine/src/Resource/SHResourceManager.h index c2ee547e..61689420 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.h +++ b/SHADE_Engine/src/Resource/SHResourceManager.h @@ -24,6 +24,7 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" #include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h" #include "Graphics/MiddleEnd/Interface/SHMaterial.h" +#include "Assets/Asset Types/SHMaterialAsset.h" namespace SHADE { @@ -51,7 +52,7 @@ namespace SHADE template<> struct SHResourceLoader { - using AssetType = std::string; + using AssetType = SHMaterialAsset; }; diff --git a/SHADE_Engine/src/Resource/SHResourceManager.hpp b/SHADE_Engine/src/Resource/SHResourceManager.hpp index eef46241..15834cdf 100644 --- a/SHADE_Engine/src/Resource/SHResourceManager.hpp +++ b/SHADE_Engine/src/Resource/SHResourceManager.hpp @@ -183,7 +183,7 @@ namespace SHADE else if constexpr (std::is_same_v) { // Get the data we need to construct - SHMaterialSpec matSpec = YAML::Node(assetData).as(); + SHMaterialSpec matSpec = YAML::Node(assetData.data).as(); // Load shaders auto vertexShader = SHResourceManager::LoadOrGet(matSpec.vertexShader); @@ -214,7 +214,7 @@ namespace SHADE auto matHandle = gfxSystem->AddMaterial(vertexShader, fragShader, subPass); // Set properties for the material - Handle pipelineProperties = matHandle.GetShaderBlockInterface(); + Handle pipelineProperties = matHandle->GetShaderBlockInterface(); for (int i = 0; i < static_cast(pipelineProperties->GetVariableCount()); ++i) { const std::string& PROP_NAME = pipelineProperties->GetVariableName(i); @@ -226,19 +226,19 @@ namespace SHADE switch (VARIABLE->type) { case SHADE::SHShaderBlockInterface::Variable::Type::FLOAT: - matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::INT: - matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR2: - matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR3: - matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::VECTOR4: - matHandle.SetProperty(VARIABLE->offset, PROP_NODE.as()); + matHandle->SetProperty(VARIABLE->offset, PROP_NODE.as()); break; case SHADE::SHShaderBlockInterface::Variable::Type::OTHER: default: From 2bd3b45ba0a105815aba0c589fc556d4ae66e21b Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 31 Oct 2022 20:49:28 +0800 Subject: [PATCH 584/793] SSAO sort of working --- Assets/Shaders/DeferredComposite_CS.glsl | 6 +- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 4665 -> 4801 bytes Assets/Shaders/SSAO_CS.glsl | 78 ++++++++++++++++-- Assets/Shaders/SSAO_CS.shshaderb | Bin 0 -> 6425 bytes Assets/Shaders/TestCube_VS.glsl | 5 +- Assets/Shaders/TestCube_VS.shshaderb | Bin 3525 -> 3689 bytes .../src/Graphics/Buffers/SHVkBuffer.cpp | 5 ++ .../src/Graphics/Buffers/SHVkBuffer.h | 3 +- .../GlobalData/SHGraphicsGlobalData.cpp | 2 +- .../MiddleEnd/Interface/SHGraphicsConstants.h | 1 + .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 73 +++++++++++----- .../MiddleEnd/Interface/SHRenderer.cpp | 6 +- .../Graphics/MiddleEnd/Interface/SHRenderer.h | 5 +- .../MiddleEnd/PostProcessing/SHSSAO.cpp | 7 +- .../MiddleEnd/PostProcessing/SHSSAO.h | 4 + .../RenderGraph/SHRenderGraphNodeCompute.cpp | 6 ++ .../Graphics/Shaders/SHShaderReflected.cpp | 10 +++ 17 files changed, 174 insertions(+), 37 deletions(-) create mode 100644 Assets/Shaders/SSAO_CS.shshaderb diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index 5f586b9b..4607363b 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -21,7 +21,8 @@ layout(set = 4, binding = 0, rgba32f) uniform image2D positions; layout(set = 4, binding = 1, rgba32f) uniform image2D normals; layout(set = 4, binding = 2, rgba8) uniform image2D albedo; layout(set = 4, binding = 3, r32ui) uniform uimage2D lightLayerData; -layout(set = 4, binding = 4, rgba8) uniform image2D targetImage; +layout(set = 4, binding = 4, rgba32f) uniform image2D ssaoImage; +layout(set = 4, binding = 5, rgba8) uniform image2D targetImage; layout(set = 1, binding = 0) uniform LightCounts { @@ -78,6 +79,7 @@ void main() } // store result into result image - imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); + //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); + imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgb, 1.0f)); } \ No newline at end of file diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index aaaa5207fc09134d01b8cdfec1bc483a63024116..d691c168b25040b5ef44acb3432711e65747ca18 100644 GIT binary patch delta 458 zcmYk2y-EX75Jo4P{V^+oh*?Qt5u;U7OHf2og;dd6ETV{&TI2z=u~4H?qbBQH$TqPN zd@#ZDExWJ-hna6??wz^!d-HcIa^@?RTG?p?W+e-4$v(fLy1VAtJ(b~baMimQoSzYU z=3AWXxJORULw3zgTQ-Q@g02_z2k|1*vU-d!_Q%PO-z*>Ra)HvCC~Klu@#9q8>`RBl zZ?FuxekU$Li_J7ff^Rs0huFJxN8fkVz{`Daj%EYH0VE2rKp*Rj_uslx}1*T4zr0v%9YKXJ-( NxA;3y{f}$f@DCT_Ft7js delta 321 zcmX|+y9&ZU5Jhh`F~Nu+qJb0^8Z9IumV$+)m9N^;zYq%>3*V0z|3gz*`b+kLcS7RA z;m+Kdo!NaiUUf%xiinS{JPXiZBai#TsT#V8Fd7*%)il^JfPpJDN8BV2sWp<;!{}rB z`p~CQqP-))sxP_C=u8SE%`c2K(t;U}mGROeNXGNHs8CNt?n}SaR&#)OMayWBWVBt diff --git a/Assets/Shaders/SSAO_CS.glsl b/Assets/Shaders/SSAO_CS.glsl index 3759c4b4..ac84cb81 100644 --- a/Assets/Shaders/SSAO_CS.glsl +++ b/Assets/Shaders/SSAO_CS.glsl @@ -1,7 +1,13 @@ #version 450 -uint const NUM_SAMPLES = 64; -uint const NUM_ROTATIONS = 16; +const uint NUM_SAMPLES = 64; +const uint NUM_ROTATIONS = 16; +const int ROTATION_KERNEL_W = 4; +const int ROTATION_KERNEL_H = 4; + +// can perhaps pass in as push constant. +const float RADIUS = 0.5f; +const float BIAS = 0.025f; layout(local_size_x = 16, local_size_y = 16) in; layout(set = 4, binding = 0, rgba32f) uniform image2D positions; @@ -12,13 +18,75 @@ layout(set = 4, binding = 2, rgba32f) uniform image2D outputImage; // SSAO data layout(std430, set = 5, binding = 0) buffer SSAOData { - vec3 samples[NUM_SAMPLES]; - vec3 rotations[NUM_ROTATIONS]; + vec4 samples[NUM_SAMPLES]; + vec4 rotations[NUM_ROTATIONS]; } ssaoData; +layout(set = 2, binding = 0) uniform CameraData +{ + vec4 position; + mat4 vpMat; + mat4 viewMat; + mat4 projMat; + +} cameraData; + +shared vec4 sharedRotations[NUM_ROTATIONS]; + void main() { + ivec2 size = imageSize (outputImage); + + // load rotations into shared memory + uint localThreadIndex = gl_LocalInvocationIndex; + if (localThreadIndex < NUM_ROTATIONS) + sharedRotations[localThreadIndex] = ssaoData.rotations[localThreadIndex]; + + barrier(); + + ivec2 globalThread = ivec2 (gl_GlobalInvocationID.xy); + + // load all the necessary variables + vec3 viewSpacePos = imageLoad (positions, globalThread).rgb; + vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb); + + // Get random vector + uint randomVecXIndex = globalThread.x % ROTATION_KERNEL_W; + uint randomVecYIndex = globalThread.y % ROTATION_KERNEL_H; + vec3 randomVec = (sharedRotations[randomVecYIndex * ROTATION_KERNEL_W + randomVecXIndex].rgb) * 2.0f - 1.0f; + + // Gram schmidt + vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec))); + vec3 bitangent = cross (tangent, viewSpaceNormal); + mat3 TBN = mat3 (tangent, bitangent, viewSpaceNormal); + + float occlusion = 0.0f; + for (int i = 0; i < NUM_SAMPLES; ++i) + { + // We want to get a position at an offset from the view space position. Offset scaled by radius. + vec3 samplePos = TBN * ssaoData.samples[i].rgb; + samplePos = viewSpacePos + samplePos * RADIUS; + + // Now we take that offset position and bring it to clip space + vec4 offsetPos = vec4 (samplePos, 1.0f); + offsetPos = cameraData.projMat * offsetPos; + + // then we do perspective division + offsetPos.xyz /= offsetPos.w; + + // and bring it from [-1, 1] to screen coordinates + offsetPos.xyz = ((offsetPos.xyz * 0.5f) + 0.5f); + offsetPos.xy *= vec2(size.xy); + + float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z; + + float rangeCheck = smoothstep (0.0f, 1.0f, RADIUS / abs (viewSpacePos.z - sampleDepth)); + occlusion += (sampleDepth >= samplePos.z + BIAS ? 1.0f : 0.0f) * rangeCheck; + } + + occlusion = (occlusion / float(NUM_SAMPLES)); + // store result into result image - imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); + imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), vec4(occlusion.rrr, 0.0f)); } \ No newline at end of file diff --git a/Assets/Shaders/SSAO_CS.shshaderb b/Assets/Shaders/SSAO_CS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..78fd5087a76621f421742ffd5f2b9fa21528e843 GIT binary patch literal 6425 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 PES|%D^#6}4r-T0kYfO5x literal 0 HcmV?d00001 diff --git a/Assets/Shaders/TestCube_VS.glsl b/Assets/Shaders/TestCube_VS.glsl index 867b945f..0e055395 100644 --- a/Assets/Shaders/TestCube_VS.glsl +++ b/Assets/Shaders/TestCube_VS.glsl @@ -34,6 +34,7 @@ layout(set = 2, binding = 0) uniform CameraData vec4 position; mat4 vpMat; mat4 viewMat; + mat4 projMat; } cameraData; void main() @@ -51,8 +52,10 @@ void main() // uvs for texturing in fragment shader Out.uv = aUV; + mat3 transposeInv = mat3 (transpose(inverse(modelViewMat))); + // normals are also in view space - Out.normal.rgb = mat3(transpose(inverse(modelViewMat))) * aNormal.rgb; + Out.normal.rgb = transposeInv * aNormal.rgb; Out.normal.rgb = normalize (Out.normal.rgb); // clip space for rendering diff --git a/Assets/Shaders/TestCube_VS.shshaderb b/Assets/Shaders/TestCube_VS.shshaderb index b7e1294bb1b2fcbe7f31212c0662330feff59f48..fb2965a83900e01b2591230c1de83828ad72c658 100644 GIT binary patch delta 1479 zcmYk6%T7~K6o&Wd$j3fl1pa#lC6j5odwH8ZHZHpywa1x(D zJTr&Bfnn^(IC0<;I5KhI6F4&Q|4z>)?B>r}>tFxcd+oK`e#`zD9x|mPCS37Ye!v*V zq|ITovpZB7To(OG=zV@ybB?+uX-+GO3$3=d8T@uWt-Ge6u-h&-J1wtMool{PC}F}- zT%PyZTjhpg*VGl)8XLuGd$ro`R(H_35sy#K>(sk-uPJuG)PwJ_>@-!ees-!+Z{4nU zy5(l2+E<9D8C6bgHyZo7q*&T!CH3hA=i*;4&Z;Ndeo~oPWo(>R{Qe*p{EENzxxt9Q z`KalImFb&(&WSjz)lq|v{w#+Nmk@Bd)H>f@ z_*?1$&5{5|%#>FIrn#%0i0=#1%!G+aZOnKd2v>xxa6;e$IoXE-1uPCj2WRWnf@bEV z|40lf+C{Y{3ujf2<=fqPIJ^53`P6Ym>d?VW>huZOr-H5HI*fE9;_b*v#`qygf@NpM zTXElV#4($aV4Hd--)?^J$`$d{uxJV$oUMB<-_{MwUo?TAas8@XdlY5J;B46o`L^uf z3~EuGodG&HW^h)vA)FD83Cv(jc1wV_ag!Nb5b;4p2s{Ci68qnSmi!xn9sXd})Q=ec%uILU2+1`yeo delta 1294 zcmYk5OKVe66ot>tqls-Ih|nMjl7~g1;=mUbF<7*wK4=r$##c3sF~(?`#PllCNx**) z@7$jtNM@oV@o#kQ%%PKl-@3U+a>8Qoz4l&b@3SxYo%xlXH{X-SKjBazW{hKIP13v@ z%{Pvep&KSk9Xg*EBSu_(tvA@McTCjGn3u$@POaP=RGS00`GF7?-a81Tt|;pS z6}@)X-DvMOClxVY8Jgs7blUx!?LD{NZ8Xu6^Uj6SN%hu=@^igv_@`Hi^oN?@B#?HM zjC$zIP0W8zeZ|SzI%&j(r#SiIBA`S@_o=P~<6_lIHOFD$$Je7hCl)meP`UB9nSwK1 z#l09*T}5>XUsI}cmUtt`WwDFIY}q^n>XISWO0vGMZj+tn0#3O}K4MzafU18Pk{t?=CQYcW|FVmCU?j$0p%)eQ+;m-9LB7hxc|000k52n z?$P{Ka~EIthz~U0-`RzzxR95hE3A~6LYrC#y6qlV1J{^B+p7R=ZNwCc?*r9}Uq-7f zZh8la)Nl(=S)C$}-^7ZuRaN}+APq7=GiI?5fOMKsI@O7@x<~j{r|)BRkMX6`d(jn* z3Pmn+aS{6jSfQSiBi;^pyTGRbx9xpNq)t2|(ir*-%GeQV{sVVlRH36mYuFuNtLpf+ z-}D2Y!`qvsQ=K@gYfR~;ANV5B1rHn=6^hgY&tTi&G&lzIz&!Rf5O3o*_-DZ}4BB{h1@ diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp index da4bc292..08481483 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.cpp @@ -64,6 +64,11 @@ namespace SHADE return bufferUsageFlags; } + uint32_t SHVkBuffer::GetSizeStored(void) const noexcept + { + return sizeStored; + } + /***************************************************************************/ /*! diff --git a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h index aeda7d18..eb24d161 100644 --- a/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h +++ b/SHADE_Engine/src/Graphics/Buffers/SHVkBuffer.h @@ -102,8 +102,9 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SETTERS AND GETTERS */ /*-----------------------------------------------------------------------*/ - vk::Buffer GetVkBuffer (void) const noexcept; + vk::Buffer GetVkBuffer (void) const noexcept; vk::BufferUsageFlags GetUsageBits(void) const noexcept; + uint32_t GetSizeStored (void) const noexcept; template T GetDataFromMappedPointer(uint32_t index) const noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp index d5fb81bd..9717889d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/GlobalData/SHGraphicsGlobalData.cpp @@ -79,7 +79,7 @@ namespace SHADE SHVkDescriptorSetLayout::Binding cameraDataBinding { .Type = vk::DescriptorType::eUniformBufferDynamic, - .Stage = vk::ShaderStageFlagBits::eVertex, + .Stage = vk::ShaderStageFlagBits::eVertex | vk::ShaderStageFlagBits::eCompute, .BindPoint = SHGraphicsConstants::DescriptorSetBindings::CAMERA_DATA, .DescriptorCount = 1, }; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 0257bf3b..0a67cd9f 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -129,6 +129,7 @@ namespace SHADE */ /***************************************************************************/ static constexpr uint32_t BATCHED_PER_INST_DATA = 0; + }; struct VertexBufferBindings diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index d062b4d6..2a59a5d1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -37,6 +37,7 @@ of DigiPen Institute of Technology is prohibited. #include "Assets/Asset Types/SHTextureAsset.h" #include "Graphics/MiddleEnd/Interface/SHMousePickSystem.h" #include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h" +#include "Graphics/RenderGraph/SHRenderGraphNodeCompute.h" #include "Assets/SHAssetManager.h" namespace SHADE @@ -113,6 +114,7 @@ namespace SHADE SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_VS.glsl"); SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl"); SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl"); + SHAssetManager::CompileAsset("../../Assets/Shaders/SSAO_CS.glsl"); shaderModuleLibrary.ImportAllShaderSource(device); shaderModuleLibrary.ReflectAllShaderModules(); @@ -154,57 +156,95 @@ namespace SHADE renderContextCmdPools[i] = renderContext.GetFrameData(i).cmdPoolHdls[0]; } + /*-----------------------------------------------------------------------*/ + /* SCENE RENDER GRAPH RESOURCES */ + /*-----------------------------------------------------------------------*/ // Initialize world render graph worldRenderGraph->Init(device, swapchain); worldRenderGraph->AddResource("Position", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); worldRenderGraph->AddResource("Normals", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); + //worldRenderGraph->AddResource("Tangents", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); worldRenderGraph->AddResource("Albedo", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); worldRenderGraph->AddResource("Depth Buffer", { SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint); worldRenderGraph->AddResource("Entity ID", { SH_ATT_DESC_TYPE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); worldRenderGraph->AddResource("Light Layer Indices", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc); worldRenderGraph->AddResource("Scene", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second); + worldRenderGraph->AddResource("SSAO", { SH_ATT_DESC_TYPE_FLAGS::COLOR, SH_ATT_DESC_TYPE_FLAGS::INPUT, SH_ATT_DESC_TYPE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); + /*-----------------------------------------------------------------------*/ + /* MAIN NODE */ + /*-----------------------------------------------------------------------*/ auto gBufferNode = worldRenderGraph->AddNode("G-Buffer", { "Position", "Entity ID", "Light Layer Indices", "Normals", + //"Tangents", "Albedo", "Depth Buffer", - "Scene" + "Scene", + "SSAO" }, {}); // no predecessors + /*-----------------------------------------------------------------------*/ + /* G-BUFFER SUBPASS INIT */ + /*-----------------------------------------------------------------------*/ auto gBufferSubpass = gBufferNode->AddSubpass("G-Buffer Write"); gBufferSubpass->AddColorOutput("Position"); gBufferSubpass->AddColorOutput("Entity ID"); gBufferSubpass->AddColorOutput("Light Layer Indices"); gBufferSubpass->AddColorOutput("Normals"); + //gBufferSubpass->AddColorOutput("Tangents"); gBufferSubpass->AddColorOutput("Albedo"); gBufferSubpass->AddDepthOutput("Depth Buffer", SH_ATT_DESC_TYPE_FLAGS::DEPTH_STENCIL); - //// kirsch - //auto kirschShader = shaderModuleLibrary.GetShaderModule("KirschCs.glsl"); - //gBufferNode->AddNodeCompute(kirschShader, { "Position", "Scene" }); + /*-----------------------------------------------------------------------*/ + /* SSAO PASS AND DATA INIT */ + /*-----------------------------------------------------------------------*/ + ssaoStorage = resourceManager.Create(); - //// copy - //auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl"); - //gBufferNode->AddNodeCompute(pureCopyShader, { "Position", "Scene" }); + ssaoTransferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); + ssaoTransferCmdBuffer->BeginRecording(); - // deferred composite + ssaoStorage->Init(device, ssaoTransferCmdBuffer); + + ssaoTransferCmdBuffer->EndRecording(); + graphicsQueue->SubmitCommandBuffer({ ssaoTransferCmdBuffer }); + + graphicsQueue->WaitIdle(); + + auto ssaoShader = shaderModuleLibrary.GetBuiltInShaderModule("SSAO_CS"); + Handle ssaoPass = gBufferNode->AddNodeCompute(ssaoShader, {"Position", "Normals", "SSAO"}); + auto ssaoDataBuffer = ssaoStorage->GetBuffer(); + ssaoPass->ModifyWriteDescBufferComputeResource(SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, SHSSAO::DESC_SET_BINDING, {&ssaoDataBuffer, 1}, 0, ssaoStorage->GetBuffer()->GetSizeStored()); + + + /*-----------------------------------------------------------------------*/ + /* DEFERRED COMPOSITE SUBPASS INIT */ + /*-----------------------------------------------------------------------*/ auto deferredCompositeShader = shaderModuleLibrary.GetBuiltInShaderModule("DeferredComposite_CS"); - gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "Scene" }); - + gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO", "Scene" }); + /*-----------------------------------------------------------------------*/ + /* DUMMY SUBPASS TO TRANSITION SCENE FOR PRESENT USAGE */ + /*-----------------------------------------------------------------------*/ + // Dummy to transition scene to be used for shader read auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass"); dummySubpass->AddInput("Scene"); - + /*-----------------------------------------------------------------------*/ + /* GENERATE RENDER GRAPH */ + /*-----------------------------------------------------------------------*/ // Generate world render graph worldRenderGraph->Generate(); + + /*-----------------------------------------------------------------------*/ + /* BIND RENDER GRAPH TO RENDERER */ + /*-----------------------------------------------------------------------*/ // Add world renderer to default viewport worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph); worldRenderer->SetCamera(worldCamera); @@ -254,17 +294,6 @@ namespace SHADE lightingSubSystem = resourceManager.Create(); lightingSubSystem->Init(device, descPool); - ssaoStorage = resourceManager.Create(); - - ssaoTransferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); - ssaoTransferCmdBuffer->BeginRecording(); - - ssaoStorage->Init(device, ssaoTransferCmdBuffer); - - ssaoTransferCmdBuffer->EndRecording(); - graphicsQueue->SubmitCommandBuffer({ssaoTransferCmdBuffer}); - - graphicsQueue->WaitIdle(); } #ifdef SHEDITOR diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp index 655451ec..d0deb30c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.cpp @@ -88,7 +88,7 @@ namespace SHADE } } - void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix viewMatrix, SHMatrix projMatrix) noexcept + void SHRenderer::UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix const& viewMatrix, SHMatrix const& projMatrix) noexcept { SetViewProjectionMatrix(viewMatrix, projMatrix); @@ -98,17 +98,19 @@ namespace SHADE std::array dynamicOffsets{ frameIndex * cameraDataAlignedSize }; cmdBuffer->BindDescriptorSet(cameraDescriptorSet, SH_PIPELINE_TYPE::GRAPHICS, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); + cmdBuffer->BindDescriptorSet(cameraDescriptorSet, SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS, std::span{ dynamicOffsets.data(), 1 }); } void SHRenderer::UpdateCameraDataToBuffer(void) noexcept { } - void SHRenderer::SetViewProjectionMatrix(SHMatrix viewMatrix, SHMatrix projMatrix) noexcept + void SHRenderer::SetViewProjectionMatrix(SHMatrix const& viewMatrix, SHMatrix const& projMatrix) noexcept { //cpuCameraData.viewProjectionMatrix = camera->GetViewMatrix() * camera->GetProjectionMatrix(); cpuCameraData.viewProjectionMatrix = SHMatrix::Transpose(projMatrix * viewMatrix); cpuCameraData.viewMatrix = SHMatrix::Transpose(viewMatrix); + cpuCameraData.projectionMatrix = SHMatrix::Transpose(projMatrix); } Handle SHRenderer::GetRenderGraph(void) const noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h index b7c6718c..140cf53b 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHRenderer.h @@ -47,6 +47,7 @@ namespace SHADE SHVec4 cameraPosition; SHMatrix viewProjectionMatrix; SHMatrix viewMatrix; + SHMatrix projectionMatrix; }; /*---------------------------------------------------------------------------------*/ @@ -80,9 +81,9 @@ namespace SHADE /*-----------------------------------------------------------------------------*/ void Draw(uint32_t frameIndex, Handle descPool) noexcept; void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex) noexcept; - void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix viewMatrix, SHMatrix projMatrix) noexcept; + void UpdateDataAndBind(Handle cmdBuffer, uint32_t frameIndex, SHMatrix const& viewMatrix, SHMatrix const& projMatrix) noexcept; void UpdateCameraDataToBuffer (void) noexcept; - void SetViewProjectionMatrix (SHMatrix viewMatrix, SHMatrix projMatrix) noexcept; + void SetViewProjectionMatrix (SHMatrix const& viewMatrix, SHMatrix const& projMatrix) noexcept; /*-----------------------------------------------------------------------------*/ /* Setters and Getters */ diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp index f2894786..c6aa1978 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.cpp @@ -39,7 +39,7 @@ namespace SHADE auto& rotationVectors = ssaoData->rotatationVectors; for (uint32_t i = 0; i < NUM_ROTATION_VECTORS; ++i) { - samples[i] = SHVec4 + rotationVectors[i] = SHVec4 { distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f distrib(generator) * 2.0f - 1.0f, // -1.0f - 1.0f @@ -57,4 +57,9 @@ namespace SHADE ssaoDataBuffer->TransferToDeviceResource(cmdBuffer); } + Handle SHSSAO::GetBuffer(void) const noexcept + { + return ssaoDataBuffer; + } + } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h index 32e8eb1a..040b4695 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/PostProcessing/SHSSAO.h @@ -12,6 +12,9 @@ namespace SHADE class SHSSAO { + public: + static constexpr uint32_t DESC_SET_BINDING = 0; + private: static constexpr uint32_t NUM_SAMPLES = 64; static constexpr uint32_t NUM_ROTATION_VECTORS = 16; @@ -33,5 +36,6 @@ namespace SHADE public: void Init (Handle logicalDevice, Handle cmdBuffer) noexcept; + Handle GetBuffer (void) const noexcept; }; } diff --git a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp index 60d76c49..2c471c83 100644 --- a/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp +++ b/SHADE_Engine/src/Graphics/RenderGraph/SHRenderGraphNodeCompute.cpp @@ -82,6 +82,11 @@ namespace SHADE // bind descriptor sets cmdBuffer->BindDescriptorSet(graphResourceDescSets[frameIndex], SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE, {}); + if (computeResource) + { + cmdBuffer->BindDescriptorSet(computeResource->descSet, SH_PIPELINE_TYPE::COMPUTE, SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_NODE_COMPUTE_RESOURCE, computeResource->dynamicOffsets[frameIndex]); + } + // dispatch compute cmdBuffer->ComputeDispatch(groupSizeX, groupSizeY, 1); @@ -167,6 +172,7 @@ namespace SHADE void SHRenderGraphNodeCompute::ModifyWriteDescBufferComputeResource(uint32_t set, uint32_t binding, std::span> const& buffers, uint32_t offset, uint32_t range) noexcept { computeResource->descSet->ModifyWriteDescBuffer(set, binding, buffers, offset, range); + computeResource->descSet->UpdateDescriptorSetBuffer(set, binding); } } diff --git a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp index f28561c5..96fa77ab 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/SHShaderReflected.cpp @@ -142,6 +142,16 @@ namespace SHADE case SpvOp::SpvOpTypeRuntimeArray: recurseForInfo(&member, interfaceHdl, member.offset, biggestAlignment, parentVarName + std::string(member.name) + "."); break; + case SpvOp::SpvOpTypeArray: + interfaceHdl->AddVariable(parentVarName + std::string (member.name), + SHShaderBlockInterface::Variable + ( + parentOffset + member.offset, + SHShaderBlockInterface::Variable::Type::OTHER + ) + ); + biggestAlignment = std::max(biggestAlignment, member.size); + break; } } }; From 441207260b9cfd0b50c3cd87cb89bd9aae2cefe7 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 31 Oct 2022 20:49:49 +0800 Subject: [PATCH 585/793] shmeta --- Assets/Shaders/SSAO_CS.shshaderb.shmeta | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Assets/Shaders/SSAO_CS.shshaderb.shmeta diff --git a/Assets/Shaders/SSAO_CS.shshaderb.shmeta b/Assets/Shaders/SSAO_CS.shshaderb.shmeta new file mode 100644 index 00000000..a5b5b739 --- /dev/null +++ b/Assets/Shaders/SSAO_CS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: SSAO_CS +ID: 48941934 +Type: 2 From ccbbdc6485819cfd1994fc9e18072697af8d6760 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 21:05:46 +0800 Subject: [PATCH 586/793] Added CollisionInfo and SHPhysicsSystemInterface --- .../src/Physics/SHPhysicsSystemInterface.cpp | 52 +++++++++++++++++ .../src/Physics/SHPhysicsSystemInterface.h | 42 ++++++++++++++ SHADE_Managed/src/Physics/CollisionInfo.hxx | 58 +++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp create mode 100644 SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h create mode 100644 SHADE_Managed/src/Physics/CollisionInfo.hxx diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp new file mode 100644 index 00000000..b36fa1fa --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp @@ -0,0 +1,52 @@ +/************************************************************************************//*! +\file SHPhysicsSystemInterface.cpp +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definitions of the functions of the static + SHPhysicsSystemInterface class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "SHPhysicsSystemInterface.h" +// Project Includes +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Physics/SHPhysicsSystem.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*-----------------------------------------------------------------------------------*/ + const std::vector& SHPhysicsSystemInterface::GetCollisionInfo() noexcept + { + static std::vector emptyVec; + + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetCollisionInfo(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get collision events. Empty vector returned instead."); + return emptyVec; + } + const std::vector& SHPhysicsSystemInterface::GetTriggerInfo() noexcept + { + static std::vector emptyVec; + + auto phySystem = SHSystemManager::GetSystem(); + if (phySystem) + { + return phySystem->GetTriggerInfo(); + } + + SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get trigger events. Empty vector returned instead."); + return emptyVec; + } +} diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h new file mode 100644 index 00000000..da164ee9 --- /dev/null +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h @@ -0,0 +1,42 @@ +/************************************************************************************//*! +\file SHPhysicsSystemInterface.h +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the SHGraphicsSystemInterface static class. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// STL Includes +#include +// Project Includes +#include "SHPhysicsUtils.h" + +namespace SHADE +{ + /*-----------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*-----------------------------------------------------------------------------------*/ + /// + /// Static class that wraps up certain functions in the SHPhysicsSystem so that + /// accessing it from SHADE_Managed would not cause issues due to C++20 features. + /// + class SH_API SHPhysicsSystemInterface final + { + public: + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + SHPhysicsSystemInterface() = delete; + + /*---------------------------------------------------------------------------------*/ + /* Static Usage Functions */ + /*---------------------------------------------------------------------------------*/ + [[nodiscard]] static const std::vector& GetCollisionInfo() noexcept; + [[nodiscard]] static const std::vector& GetTriggerInfo() noexcept; + }; +} diff --git a/SHADE_Managed/src/Physics/CollisionInfo.hxx b/SHADE_Managed/src/Physics/CollisionInfo.hxx new file mode 100644 index 00000000..a486b0d0 --- /dev/null +++ b/SHADE_Managed/src/Physics/CollisionInfo.hxx @@ -0,0 +1,58 @@ +/************************************************************************************//*! +\file CollisionInfo.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the managed CollisionInfo struct with the + definition of its properties and declaration of functions. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once +// Project Includes +#include "Engine/GameObject.hxx" +#include "Components/RigidBody.hxx" +#include "Components/Collider.hxx" + +namespace SHADE +{ + /// + /// Struct that describes a collision + /// + public value struct CollisionInfo + { + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// The GameObject whose collider you are colliding with. + /// + property GameObject GameObject; + /// + /// The Collider that you are colliding with. + /// + property Collider^ Collider + { + SHADE::Collider^ get(); + } + /// + /// The CollisionShape of the Collider that you are colliding with. + /// + property CollisionShape^ CollisionShape + { + SHADE::CollisionShape^ get(); + } + /// + /// The RigidBody that you are colliding with. + /// + property RigidBody^ RigidBody + { + SHADE::RigidBody^ get(); + } + }; +} From 27e71558ad129c9197013d167f6df97358cc9c83 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 21:26:12 +0800 Subject: [PATCH 587/793] SHPhysicsSystemInterface now uses a forward declaration for SHPhysicsUtils --- SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp | 1 + SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp index b36fa1fa..5343b9f1 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.cpp @@ -17,6 +17,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "ECS_Base/Managers/SHSystemManager.h" #include "Physics/SHPhysicsSystem.h" +#include "Physics/SHPhysicsUtils.h" namespace SHADE { diff --git a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h index da164ee9..b1960a6f 100644 --- a/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h +++ b/SHADE_Engine/src/Physics/SHPhysicsSystemInterface.h @@ -13,11 +13,14 @@ of DigiPen Institute of Technology is prohibited. // STL Includes #include -// Project Includes -#include "SHPhysicsUtils.h" namespace SHADE { + /*-----------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*-----------------------------------------------------------------------------------*/ + class SHCollisionEvent; + /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ /*-----------------------------------------------------------------------------------*/ From 40044cbbfe87fb34bb02c22207df8f04c71216cc Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 21:26:39 +0800 Subject: [PATCH 588/793] Added definitions for CollisionInfo properties --- SHADE_Managed/src/Physics/CollisionInfo.cxx | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 SHADE_Managed/src/Physics/CollisionInfo.cxx diff --git a/SHADE_Managed/src/Physics/CollisionInfo.cxx b/SHADE_Managed/src/Physics/CollisionInfo.cxx new file mode 100644 index 00000000..9048837f --- /dev/null +++ b/SHADE_Managed/src/Physics/CollisionInfo.cxx @@ -0,0 +1,34 @@ +/************************************************************************************//*! +\file CollisionInfo.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 31, 2022 +\brief Contains the definition of the functions of the managed CollisionInfo + struct. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#include "SHpch.h" +#include "CollisionInfo.hxx" + +namespace SHADE +{ + Collider^ CollisionInfo::Collider::get() + { + return GameObject.GetComponent(); + } + + CollisionShape^ CollisionInfo::CollisionShape::get() + { + throw gcnew System::NotImplementedException(); + } + + RigidBody^ CollisionInfo::RigidBody::get() + { + return GameObject.GetComponent(); + } +} From 60c2c9facbad1b5980e05049e49c79b4d1f25d69 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 21:31:33 +0800 Subject: [PATCH 589/793] Added collision and trigger event functions for Script --- SHADE_Managed/src/Physics/CollisionInfo.cxx | 2 + SHADE_Managed/src/Physics/CollisionInfo.hxx | 12 ++- SHADE_Managed/src/Scripts/Script.cxx | 54 +++++++++++++- SHADE_Managed/src/Scripts/Script.hxx | 83 ++++++++++++++++++++- 4 files changed, 147 insertions(+), 4 deletions(-) diff --git a/SHADE_Managed/src/Physics/CollisionInfo.cxx b/SHADE_Managed/src/Physics/CollisionInfo.cxx index 9048837f..135760db 100644 --- a/SHADE_Managed/src/Physics/CollisionInfo.cxx +++ b/SHADE_Managed/src/Physics/CollisionInfo.cxx @@ -14,6 +14,8 @@ of DigiPen Institute of Technology is prohibited. *//*************************************************************************************/ #include "SHpch.h" #include "CollisionInfo.hxx" +#include "Components/RigidBody.hxx" +#include "Components/Collider.hxx" namespace SHADE { diff --git a/SHADE_Managed/src/Physics/CollisionInfo.hxx b/SHADE_Managed/src/Physics/CollisionInfo.hxx index a486b0d0..40cb9ccc 100644 --- a/SHADE_Managed/src/Physics/CollisionInfo.hxx +++ b/SHADE_Managed/src/Physics/CollisionInfo.hxx @@ -15,11 +15,19 @@ of DigiPen Institute of Technology is prohibited. #pragma once // Project Includes #include "Engine/GameObject.hxx" -#include "Components/RigidBody.hxx" -#include "Components/Collider.hxx" namespace SHADE { + /*---------------------------------------------------------------------------------*/ + /* Forward Declarations */ + /*---------------------------------------------------------------------------------*/ + ref class RigidBody; + ref class Collider; + ref class CollisionShape; + + /*---------------------------------------------------------------------------------*/ + /* Type Definitions */ + /*---------------------------------------------------------------------------------*/ /// /// Struct that describes a collision /// diff --git a/SHADE_Managed/src/Scripts/Script.cxx b/SHADE_Managed/src/Scripts/Script.cxx index d4004e03..e476d69d 100644 --- a/SHADE_Managed/src/Scripts/Script.cxx +++ b/SHADE_Managed/src/Scripts/Script.cxx @@ -147,6 +147,48 @@ namespace SHADE SAFE_NATIVE_CALL_END(this) } + void Script::OnCollisionEnter(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionEnter(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnCollisionStay(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionStay(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnCollisionExit(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onCollisionExit(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerEnter(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerEnter(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerStay(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerStay(collision); + SAFE_NATIVE_CALL_END(this) + } + + void Script::OnTriggerExit(CollisionInfo collision) + { + SAFE_NATIVE_CALL_BEGIN + onTriggerExit(collision); + SAFE_NATIVE_CALL_END(this) + } + /*---------------------------------------------------------------------------------*/ /* Constructors */ /*---------------------------------------------------------------------------------*/ @@ -169,4 +211,14 @@ namespace SHADE void Script::update() {} void Script::lateUpdate() {} void Script::onDestroy() {} -}// namespace PlushieAPI + + /*---------------------------------------------------------------------------------*/ + /* Virtual Event Functions */ + /*---------------------------------------------------------------------------------*/ + void Script::onTriggerEnter(CollisionInfo) {} + void Script::onTriggerStay(CollisionInfo) {} + void Script::onTriggerExit(CollisionInfo) {} + void Script::onCollisionEnter(CollisionInfo) {} + void Script::onCollisionStay(CollisionInfo) {} + void Script::onCollisionExit(CollisionInfo) {} +} diff --git a/SHADE_Managed/src/Scripts/Script.hxx b/SHADE_Managed/src/Scripts/Script.hxx index bd336726..afeaa8a0 100644 --- a/SHADE_Managed/src/Scripts/Script.hxx +++ b/SHADE_Managed/src/Scripts/Script.hxx @@ -15,6 +15,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Engine/GameObject.hxx" +#include "Physics/CollisionInfo.hxx" namespace SHADE { @@ -213,6 +214,46 @@ namespace SHADE /// void OnDestroy(); + /*-----------------------------------------------------------------------------*/ + /* Event Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Used to call onCollisionEnter(). This should be called when a collision is + /// detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionEnter(CollisionInfo collision); + /// + /// Used to call onCollisionStay(). This should be called when a collision is + /// persistent between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionStay(CollisionInfo collision); + /// + /// Used to call onCollisionExit(). This should be called when a collision ends + /// between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnCollisionExit(CollisionInfo collision); + /// + /// Used to call onTriggerEnter(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerEnter(CollisionInfo collision); + /// + /// Used to call onTriggerStay(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerStay(CollisionInfo collision); + /// + /// Used to call onTriggerExit(). This should be called when a trigger-type + /// collision is detected between the attached GameObject and another GameObject. + /// + /// Information on the collision event. + void OnTriggerExit(CollisionInfo collision); + protected: /*-----------------------------------------------------------------------------*/ /* Constructors */ @@ -273,6 +314,46 @@ namespace SHADE ///
    virtual void onDestroy(); + /*-----------------------------------------------------------------------------*/ + /* Virtual Event Functions */ + /*-----------------------------------------------------------------------------*/ + /// + /// Called when the attached GameObject has a trigger Collider and collides with + /// another GameObject with a Collider in the first frame of collision. + /// + /// Information on the collision event. + virtual void onTriggerEnter(CollisionInfo info); + /// + /// Called when the attached GameObject has a trigger Collider and collides with + /// another GameObject with a Collider in subsequent frames of collision. + /// + /// Information on the collision event. + virtual void onTriggerStay(CollisionInfo info); + /// + /// Called when the attached GameObject has a trigger Collider and leaves a + /// collision with another GameObject with a Collider2D. + /// + /// Information on the collision event. + virtual void onTriggerExit(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and collides with + /// another GameObject with a Collider in the first frame of collision. + /// + /// Information on the collision event. + virtual void onCollisionEnter(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and collides with + /// another GameObject with a Collider in subsequent frames of collision. + /// + /// Information on the collision event. + virtual void onCollisionStay(CollisionInfo info); + /// + /// Called when the attached GameObject has a Collider and leaves a + /// collision with another GameObject with a Collider2D. + /// + /// Information on the collision event. + virtual void onCollisionExit(CollisionInfo info); + private: /*-----------------------------------------------------------------------------*/ /* Data Members */ @@ -280,4 +361,4 @@ namespace SHADE GameObject owner; }; -} // namespace PlushieAPI +} From f9810684ed33d2c29f89498a8274e7e04fdbeb22 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Mon, 31 Oct 2022 21:38:17 +0800 Subject: [PATCH 590/793] Added functions for execution of OnCollision*() and OnTrigger*() --- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 11 +- SHADE_Engine/src/Scripting/SHScriptEngine.h | 6 ++ SHADE_Managed/src/Scripts/ScriptStore.cxx | 100 ++++++++++++++++-- SHADE_Managed/src/Scripts/ScriptStore.hxx | 4 + 4 files changed, 109 insertions(+), 12 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 21ce7b82..4a73342e 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -80,7 +80,10 @@ namespace SHADE { csScriptsExecuteFixedUpdate(); } - + void SHScriptEngine::ExecuteCollisionFunctions() + { + csScriptsExecutePhysicsEvents(); + } void SHScriptEngine::Exit() { // Do not allow deinitialization if not initialised @@ -377,6 +380,12 @@ namespace SHADE DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", "ExecuteLateUpdate" ); + csScriptsExecutePhysicsEvents = dotNet.GetFunctionPtr + ( + DEFAULT_CSHARP_LIB_NAME, + DEFAULT_CSHARP_NAMESPACE + ".ScriptStore", + "ExecuteCollisionFunctions" + ); csScriptsFrameCleanUp = dotNet.GetFunctionPtr ( DEFAULT_CSHARP_LIB_NAME, diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.h b/SHADE_Engine/src/Scripting/SHScriptEngine.h index c38e3618..9ddd617a 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.h +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.h @@ -98,6 +98,11 @@ namespace SHADE ///

    x)`~^5AtE>koqm?w(Vn0l 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 Date: Thu, 15 Sep 2022 11:25:58 +0800 Subject: [PATCH 073/793] Fixed SHDotNetRuntime::IsLoaded() giving incorrect data and updated qualifiers and comment formats --- SHADE_Engine/src/Scripting/SHDotNetRuntime.h | 210 +++++++++++------- .../src/Scripting/SHDotNetRuntime.hpp | 2 +- 2 files changed, 135 insertions(+), 77 deletions(-) diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.h b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h index 2eb69788..efb9e54b 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.h +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.h @@ -23,26 +23,43 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /********************************************************************************//*! - @brief Class that encapsulates the state of the .NET Core Runtime lifecycle. - *//*********************************************************************************/ + /*************************************************************************************/ + /*! + + class SHDotNetRuntime + + \brief + Class that encapsulates the state of the .NET Core Runtime lifecycle. + + */ + /*************************************************************************************/ + class SHDotNetRuntime { public: - /*----------------------------------------------------------------------------------*/ - /* Constructors/Destructor */ - /*----------------------------------------------------------------------------------*/ - /****************************************************************************//*! - @brief Default constructor that immediately initializes the CoreCLR. + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + + \brief + Default constructor that immediately initializes the CoreCLR. - @param[in] autoInit - If true, loads the CoreCLR by calling Init(). - *//*****************************************************************************/ + \param autoInit + If true, loads the CoreCLR by calling Init(). + + */ + /***********************************************************************************/ SHDotNetRuntime(bool autoInit = true); - /****************************************************************************//*! - @brief Destructor that unloads the CoreCLR if it has not been unloaded - yet. - *//*****************************************************************************/ + /***********************************************************************************/ + /*! + + \brief + Destructor that unloads the CoreCLR if it has not been unloaded yet. + + */ + /***********************************************************************************/ ~SHDotNetRuntime(); // Disallow copy and moving @@ -52,58 +69,78 @@ namespace SHADE /*----------------------------------------------------------------------------------*/ /* Lifecycle Functions */ /*----------------------------------------------------------------------------------*/ - /****************************************************************************//*! - @brief Loads the CoreCLR and grabs pointers to bootstrapping functions and - kickstarts the CoreCLR. - - @throws SystemExitException - Thrown if there is a failure in loading the CLR and related functions. - *//*****************************************************************************/ - void Init(); - /****************************************************************************//*! - @brief Unloads the CoreCLR. + /***********************************************************************************/ + /*! + + \brief + Loads the CoreCLR and grabs pointers to bootstrapping functions and kickstarts the + CoreCLR. - @throws SystemExitException - Thrown if there is a failure in unloading the CLR. - *//*****************************************************************************/ + \throws std::runtime_error + Thrown if there is a failure in loading the CLR and related functions. + + */ + /***********************************************************************************/ + void Init(); + /***********************************************************************************/ + /*! + + \brief + Unloads the CoreCLR. + + \throws std::runtime_error + Thrown if there is a failure in unloading the CLR. + + */ + /***********************************************************************************/ void Exit(); /*----------------------------------------------------------------------------------*/ /* Usage Functions */ /*----------------------------------------------------------------------------------*/ - /****************************************************************************//*! - @brief Checks if the DotNetRuntime has successfully been initialised. + /***********************************************************************************/ + /*! + + \brief + Checks if the DotNetRuntime has successfully been initialised. - @return True if this DotNetRuntime has been initialised. - *//*****************************************************************************/ - inline bool IsLoaded() { return coreClr != nullptr; } - /****************************************************************************//*! - @brief Retrieves a function pointer from the a CLR assembly based on the - specified assembly, type and function names. + \return + True if this DotNetRuntime has been initialised. - @tparam FunctionType - Type of the function pointer that the specified function name will - provide. - - @params[in] assemblyName - Name of the CoreCLR assembly that contains the function. - @params[in] typeName - Name of the CoreCLR type in the assembly that contains the function. - Nested types are separated by a period(.). - @params[in] functionName - Name of the CoreCLR function to get a pointer to. + */ + /***********************************************************************************/ + inline bool IsLoaded() const noexcept { return initialised; } - @returns Pointer to the function in the assembly that was specified. - *//*****************************************************************************/ + /***********************************************************************************/ + /*! + + \brief + Retrieves a function pointer from the a CLR assembly based on the specified + assembly, type and function names. + + \tparam FunctionType + Type of the function pointer that the specified function name will provide. + \param assemblyName + Name of the CoreCLR assembly that contains the function. + \param typeName + Name of the CoreCLR type in the assembly that contains the function. Nested types + are separated by a period(.). + \param functionName + Name of the CoreCLR function to get a pointer to. + \return + Pointer to the function in the assembly that was specified. + + */ + /***********************************************************************************/ template FunctionType GetFunctionPtr(const std::string_view& assemblyName, const std::string_view& typeName, - const std::string_view& functionName); + const std::string_view& functionName) const; private: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + /* Data Members */ + /*---------------------------------------------------------------------------------*/ bool initialised = false; // References to CoreCLR key components HMODULE coreClr = nullptr; @@ -114,34 +151,55 @@ namespace SHADE coreclr_create_delegate_ptr createManagedDelegate = nullptr; coreclr_shutdown_ptr shutdownCoreClr = nullptr; - /*-----------------------------------------------------------------------------*/ - /* Helper Functions */ - /*-----------------------------------------------------------------------------*/ - /****************************************************************************//*! - @brief Retrieves a function pointer from the CoreCLR based on the specified - function name. + /*---------------------------------------------------------------------------------*/ + /* Helper Functions */ + /*---------------------------------------------------------------------------------*/ + /***********************************************************************************/ + /*! + + \brief + Retrieves a function pointer from the CoreCLR based on the specified + function name. + + \tparam FunctionType + Type of the function pointer that the specified function name will provide. + \param functionName + Name of the CoreCLR function to get a pointer to. + \return + Pointer to the function in the CoreCLR that was specified. - @tparam FunctionType - Type of the function pointer that the specified function name will - provide. - - @params[in] functionName - Name of the CoreCLR function to get a pointer to. - - @returns Pointer to the function in the CoreCLR that was specified. - *//*****************************************************************************/ + */ + /***********************************************************************************/ template FunctionType getCoreClrFunctionPtr(const std::string& functionName); - /****************************************************************************//*! - @brief Compiles a semicolon separated string of trusted platform assemblies by - searching the specified directory. + /***********************************************************************************/ + /*! + + \brief + Compiles a semicolon separated string of trusted platform assemblies by + searching the specified directory. + + \param directory + Path to the directory where the trusted platform assemblies reside. + \return + Semicolon separated string of trusted platform assemblies. - @params[in] directory - Path to the directory where the trusted platform assemblies reside. - - @returns Semicolon separated string of trusted platform assemblies. - *//*****************************************************************************/ + */ + /***********************************************************************************/ static std::string buildTpaList(const std::string& directory); + /***********************************************************************************/ + /*! + + \brief + Takes in a Win32 result code and throws an exception it if there is an error. + + \param errMsg + Error message to display if the resultCode is a failure code. + \param resultCode + Result code of the function to check. + + */ + /***********************************************************************************/ static void throwIfFailed(const std::string& errMsg, int resultCode); }; } diff --git a/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp b/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp index 3498bc63..ae8f28e5 100644 --- a/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp +++ b/SHADE_Engine/src/Scripting/SHDotNetRuntime.hpp @@ -20,7 +20,7 @@ namespace SHADE template FunctionType SHDotNetRuntime::GetFunctionPtr(const std::string_view & assemblyName, const std::string_view & typeName, - const std::string_view & functionName) + const std::string_view & functionName) const { FunctionType managedDelegate = nullptr; int result = createManagedDelegate From c48a467e574fc8f95d363125a2f3b2b076ede7a1 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 11:33:40 +0800 Subject: [PATCH 074/793] Disabled warnings for DLL export --- SHADE_Application/premake5.lua | 5 +++++ SHADE_Engine/premake5.lua | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua index 98e26a3e..60281236 100644 --- a/SHADE_Application/premake5.lua +++ b/SHADE_Application/premake5.lua @@ -47,6 +47,11 @@ project "SHADE_Application" "%{IncludeDir.SDL}/lib", } + disablewarnings + { + "4251" + } + warnings 'Extra' filter "configurations:Debug" diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index a8f37057..a954e8cd 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -63,6 +63,11 @@ project "SHADE_Engine" "shlwapi" } + disablewarnings + { + "4251" + } + defines { "_LIB", From 67290c03e74e6c4ce29e3c21e583d8039c677f6b Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 11:34:04 +0800 Subject: [PATCH 075/793] Updated vcxproj files --- SHADE_Application/SHADE_Application.vcxproj | 10 ++++++++-- SHADE_Engine/SHADE_Engine.vcxproj | 14 ++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj index b3490a70..23bb5e3e 100644 --- a/SHADE_Application/SHADE_Application.vcxproj +++ b/SHADE_Application/SHADE_Application.vcxproj @@ -59,8 +59,9 @@ Use SBpch.h Level4 + 4251;%(DisableSpecificWarnings) _DEBUG;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;%(AdditionalIncludeDirectories) + ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -71,6 +72,8 @@ Windows true + SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup @@ -79,8 +82,9 @@ Use SBpch.h Level4 + 4251;%(DisableSpecificWarnings) _RELEASE;%(PreprocessorDefinitions) - ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;%(AdditionalIncludeDirectories) + ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;include;..\Dependencies\SDL\include;%(AdditionalIncludeDirectories) Full true true @@ -94,6 +98,8 @@ Windows true true + SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + ..\Dependencies\spdlog\lib;..\Dependencies\SDL\lib;%(AdditionalLibraryDirectories) wWinMainCRTStartup diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 7ccf0e8e..ee207b03 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -59,8 +59,9 @@ Use SHpch.h Level4 + 4251;%(DisableSpecificWarnings) _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_DEBUG;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) EditAndContinue Disabled false @@ -71,8 +72,8 @@ Windows true - vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) + vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mtd.lib;librttr_core_d.lib;spdlogd.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Debug\SHADE_Engine.lib @@ -84,8 +85,9 @@ Use SHpch.h Level4 + 4251;%(DisableSpecificWarnings) _LIB;_GLFW_INCLUDE_NONE;MSDFGEN_USE_CPP11;NOMINMAX;SH_API_EXPORT;_RELEASE;%(PreprocessorDefinitions) - src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\ktx\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) + src;..\Dependencies\assimp\include;..\Dependencies\imgui;..\Dependencies\imguizmo;..\Dependencies\imnodes;..\Dependencies\msdf;..\Dependencies\msdf\msdfgen;..\Dependencies\spdlog\include;..\Dependencies\tracy;..\Dependencies\VMA\include;..\Dependencies\yamlcpp\include;..\Dependencies\SDL\include;..\Dependencies\RTTR\include;..\Dependencies\reactphysics3d\include;$(VULKAN_SDK)\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;%(AdditionalIncludeDirectories) Full true true @@ -99,8 +101,8 @@ Windows true true - vulkan-1.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) - libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) + vulkan-1.lib;SDL2.lib;SDL2main.lib;shaderc_shared.lib;shlwapi.lib;assimp-vc142-mt.lib;librttr_core.lib;spdlog.lib;%(AdditionalDependencies) + libs;$(VULKAN_SDK)\Lib;..\Dependencies\assimp\lib\Debug;..\Dependencies\assimp\lib\Release;..\Dependencies\RTTR\lib;..\Dependencies\SDL\lib;..\Dependencies\spdlog\lib;%(AdditionalLibraryDirectories) ..\bin\Release\SHADE_Engine.lib From e1fb74f7840b642a8043c0c284c8186c29a29302 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 11:55:22 +0800 Subject: [PATCH 076/793] SHADE_Engine now copies the SDL2.dll to the out directory --- SHADE_Engine/SHADE_Engine.vcxproj | 10 ++++++---- SHADE_Engine/SHADE_Engine.vcxproj.filters | 11 +++++++++-- SHADE_Engine/premake5.lua | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index 920dfd81..5818e4f5 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -77,7 +77,8 @@ ..\bin\Debug\SHADE_Engine.lib - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" +xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" @@ -106,7 +107,8 @@ ..\bin\Release\SHADE_Engine.lib - xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" + xcopy /s /r /y /q "$(SolutionDir)/Dependencies/spdlog/bin" "$(OutDir)" +xcopy /r /y /q "$(SolutionDir)/Dependencies/SDL/lib/SDL2.dll" "$(OutDir)" @@ -124,8 +126,8 @@ - + @@ -212,8 +214,8 @@ - + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index b2cc911f..a1022dc7 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -19,6 +19,9 @@ {DBC7D3B0-C769-FE86-B024-12DB9C6585D7} + + {80E7870B-ECF0-877C-756C-9E7CE174937C} + {8A8E2B37-7646-6D84-DF4D-46E0CB240875} @@ -159,6 +162,9 @@ Engine + + FRC + Filesystem @@ -387,7 +393,6 @@ Tools - @@ -411,6 +416,9 @@ Engine + + FRC + Filesystem @@ -592,6 +600,5 @@ Tools - \ No newline at end of file diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua index a954e8cd..2446e380 100644 --- a/SHADE_Engine/premake5.lua +++ b/SHADE_Engine/premake5.lua @@ -93,7 +93,8 @@ project "SHADE_Engine" postbuildcommands { - "xcopy /s /r /y /q \"%{IncludeDir.spdlog}/bin\" \"$(OutDir)\"" + "xcopy /s /r /y /q \"%{IncludeDir.spdlog}/bin\" \"$(OutDir)\"", + "xcopy /r /y /q \"%{IncludeDir.SDL}/lib/SDL2.dll\" \"$(OutDir)\"" } warnings 'Extra' From ddf6a7bee54c8adc4545ae78ef154d4a0145b74e Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Thu, 15 Sep 2022 12:06:09 +0800 Subject: [PATCH 077/793] SP3-108 Removed singleton instance from event manager and changed it to static class instead. WARNING: Might need to change back to singleton next time, I had to do it previously for some reason but I don't remember why --- SHADE_Engine/SHADE_Engine.vcxproj.filters | 4 +- SHADE_Engine/src/Events/SHEvent.h | 2 +- SHADE_Engine/src/Events/SHEventManager.cpp | 47 ++++--------------- SHADE_Engine/src/Events/SHEventManager.h | 52 ++++++++-------------- SHADE_Engine/src/Events/SHEventReceiver.h | 10 ++--- 5 files changed, 35 insertions(+), 80 deletions(-) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 5d627ce6..6b8bde7f 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -171,6 +171,9 @@ Events + + Events + Events @@ -405,7 +408,6 @@ Tools - diff --git a/SHADE_Engine/src/Events/SHEvent.h b/SHADE_Engine/src/Events/SHEvent.h index c6d5c97b..2ca6648e 100644 --- a/SHADE_Engine/src/Events/SHEvent.h +++ b/SHADE_Engine/src/Events/SHEvent.h @@ -16,7 +16,7 @@ namespace SHADE struct SHEvent { SHEventIdentifier type; - SHEventDataPtr data; + SHEventDataPtr dataPtr; SHEventHandle handle; }; } diff --git a/SHADE_Engine/src/Events/SHEventManager.cpp b/SHADE_Engine/src/Events/SHEventManager.cpp index 7798c944..2b4d15f1 100644 --- a/SHADE_Engine/src/Events/SHEventManager.cpp +++ b/SHADE_Engine/src/Events/SHEventManager.cpp @@ -12,47 +12,18 @@ namespace SHADE { - SHEventManager* SHEventManager::instance; + std::unordered_map SHEventManager::packageReceiverRegistry; + std::unordered_map SHEventManager::dataEventMap; - /**************************************************************************** - * \brief Ctor and Dtor. Dtor will delete instance of self stored at - * data member instance. - ****************************************************************************/ - SHEventManager::SHEventManager() - { + SHEventHandle SHEventManager::handleCounter{ 0 }; - } - - /**************************************************************************** - * \brief Exit function to terminate the manager properly and deallocate - * memory. - ****************************************************************************/ - void SHEventManager::Exit() - { - delete instance; - } - - /**************************************************************************** - * \brief Returns singleton instance of event manager in heap memory. If - * instance does not exist, one is created immediately. - ****************************************************************************/ - SHEventManager& SHEventManager::GetEventManagerInstance() - { - // Create instance of event manager and return - if (!instance) - { - instance = new SHEventManager(); - } - - return *instance; - } /**************************************************************************** * \brief Returns function pointer to entry point for events. ****************************************************************************/ EventManagerListener SHEventManager::GetListenerFunction() { - return &(instance->CatchEvent); + return &CatchEvent; } /**************************************************************************** @@ -66,7 +37,7 @@ namespace SHADE // Do something with the event - instance->Broadcast(event); + Broadcast(event); } /**************************************************************************** @@ -80,11 +51,11 @@ namespace SHADE ****************************************************************************/ void SHEventManager::SubscribeTo(SHEventIdentifier pkgType, ReceiverPtr receiver) { - SHEventManager::GetEventManagerInstance().RegisterReceiverToType(pkgType, receiver); + RegisterReceiverToType(pkgType, receiver); } template - T* SHEventManager::BroadcastData(T data, SHEventIdentifier eventType) + T* SHEventManager::BroadcastEvent(T data, SHEventIdentifier eventType) { SHEventDataPtr ptr = new std::byte[sizeof(data)]; @@ -133,10 +104,10 @@ namespace SHADE ResponseVec& receivers{ packageReceiverRegistry[event.type] }; for (auto& receiver : receivers) { - receiver->Receive(event.data); + receiver->Receive(event); } - //auto& funcs{ staticPackageReceiverRegistry[event.GetType()] }; + //auto& funcs{ ackageReceiverRegistry[event.GetType()] }; //for (auto func : funcs) //{ // func(event.GetData()); diff --git a/SHADE_Engine/src/Events/SHEventManager.h b/SHADE_Engine/src/Events/SHEventManager.h index 4f9b4350..35acd4de 100644 --- a/SHADE_Engine/src/Events/SHEventManager.h +++ b/SHADE_Engine/src/Events/SHEventManager.h @@ -3,21 +3,26 @@ * \author Loh Xiao Qi * \brief Class declaration for event manager. * - * \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction + * \copyright Copyright (c) 2022 Digipen Institute of Technology. Reproduction * or disclosure of this file or its contents without the prior written consent * of Digipen Institute of Technology is prohibited. ******************************************************************************/ -#ifndef SH_EVENT_MANAGER_H -#define SH_EVENT_MANAGER_H +#pragma once #include "SHEvent.h" #include "SHEventReceiver.h" #include #include +/****************************************************************************** + INSTRUCTIONS FOR USE: + On broadcaster side: + 1. +******************************************************************************/ + namespace SHADE { - using ResponseFunction = std::function; + using ResponseFunction = std::function; using ReceiverPtr = std::shared_ptr; using ResponseVec = std::vector; using StaticResponseVec = std::vector; @@ -27,29 +32,11 @@ namespace SHADE class SHEventManager { public: - /**************************************************************************** - * \brief Ctor and Dtor. Dtor will delete instance of self stored at - * data member instance. - ****************************************************************************/ - SHEventManager(); - - /**************************************************************************** - * \brief Returns singleton instance of event manager in heap memory. If - * instance does not exist, one is created immediately. - ****************************************************************************/ - static SHEventManager& GetEventManagerInstance(); - - /**************************************************************************** + /**************************************************************************** * \brief Returns function pointer to entry point for events. ****************************************************************************/ static EventManagerListener GetListenerFunction(); - /**************************************************************************** - * \brief Exit function to terminate the manager properly and deallocate - * memory. - ****************************************************************************/ - static void Exit(); - /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. * \param EventType - Templated type for every type of event @@ -67,19 +54,18 @@ namespace SHADE * \brief Links a function pointer from a subscriber to a particular * package type ****************************************************************************/ - void SubscribeTo(SHEventIdentifier, ReceiverPtr); + static void SubscribeTo(SHEventIdentifier, ReceiverPtr); template - T* BroadcastData(T data, SHEventIdentifier eventType); + static T* BroadcastEvent(T data, SHEventIdentifier eventType); + private: - // Singleton instance - static SHEventManager* instance; // Registry for broadcasters and subscribers - std::unordered_map packageReceiverRegistry; - std::unordered_map dataEventMap; + static std::unordered_map packageReceiverRegistry; + static std::unordered_map dataEventMap; - SHEventHandle handleCounter; + static SHEventHandle handleCounter; /**************************************************************************** * \param ListenerConstPtr - Const pointer to listener that sent event. @@ -88,7 +74,7 @@ namespace SHADE * \brief Broadcast event to all receivers that are subscribed to this * listener. ****************************************************************************/ - void Broadcast(SHEvent const&); + static void Broadcast(SHEvent const&); /**************************************************************************** * \param ReceiverPtr - Pointer to receiver @@ -97,9 +83,7 @@ namespace SHADE * \brief Registers receiver as a subscriber to listener in the registry. ****************************************************************************/ - void RegisterReceiverToType(SHEventIdentifier, ReceiverPtr); + static void RegisterReceiverToType(SHEventIdentifier, ReceiverPtr); }; } - -#endif // !SH_EVENTS_MANAGER_H diff --git a/SHADE_Engine/src/Events/SHEventReceiver.h b/SHADE_Engine/src/Events/SHEventReceiver.h index ab379901..f968e579 100644 --- a/SHADE_Engine/src/Events/SHEventReceiver.h +++ b/SHADE_Engine/src/Events/SHEventReceiver.h @@ -1,5 +1,4 @@ -#ifndef SH_EVENT_RECEIVER_H -#define SH_EVENT_RECEIVER_H +#pragma once #include "SHEvent.h" @@ -9,7 +8,7 @@ namespace SHADE { private: public: - virtual void Receive(SHEventDataPtr) = 0; + virtual void Receive(SHEvent) = 0; }; template @@ -17,7 +16,7 @@ namespace SHADE { private: T* object; - void(T::*callback)(SHEventDataPtr); + SHEventHandle(T::*callback)(SHEvent); public: SHEventReceiverSpec(T* obj, void(T::* cb)(SHEventDataPtr)) @@ -26,10 +25,9 @@ namespace SHADE } - void Receive(SHEventDataPtr evt) override + void Receive(SHEvent evt) override { (object->*callback)(evt); } }; } -#endif // !SH_EVENT_RECEIVER_H From a90c13744543c80005dada71c61ab7877938816e Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 15 Sep 2022 12:10:06 +0800 Subject: [PATCH 078/793] #comment Completed System Routine Added Unit Test version 1 --- .../src/Application/SBApplication.cpp | 5 +- SHADE_Engine/SHADE_Engine.vcxproj | 4 + SHADE_Engine/SHADE_Engine.vcxproj.filters | 4 + .../src/ECS_Base/Managers/SHSystemManager.cpp | 8 +- .../src/ECS_Base/Managers/SHSystemManager.h | 9 +- .../ECS_Base/System/SHFixedSystemRoutine.cpp | 3 +- .../src/ECS_Base/System/SHRoutineStats.h | 11 +- SHADE_Engine/src/ECS_Base/System/SHSystem.h | 39 ++-- .../src/ECS_Base/System/SHSystemRoutine.cpp | 2 + .../ECS_Base/UnitTesting/SHECSUnitTest.cpp | 181 ++++++++++++++++++ .../src/ECS_Base/UnitTesting/SHECSUnitTest.h | 22 +++ .../ECS_Base/UnitTesting/SHTestComponents.h | 30 +++ .../src/ECS_Base/UnitTesting/SHTestSystems.h | 40 ++++ 13 files changed, 318 insertions(+), 40 deletions(-) create mode 100644 SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp create mode 100644 SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.h create mode 100644 SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h create mode 100644 SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 184b9611..3577475d 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -1,5 +1,6 @@ #include "SBpch.h" #include "SBApplication.h" +#include "ECS_Base/UnitTesting/SHECSUnitTest.h" #ifdef SHEDITOR #include "Editor/SHEditor.h" @@ -23,11 +24,13 @@ namespace Sandbox { window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow); - + #ifdef SHEDITOR #else #endif + + } void SBApplication::Update(void) diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj index d84f3c05..2b2541bb 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj +++ b/SHADE_Engine/SHADE_Engine.vcxproj @@ -118,6 +118,9 @@ + + + @@ -204,6 +207,7 @@ + diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters index 8fc412c5..4f80a4f8 100644 --- a/SHADE_Engine/SHADE_Engine.vcxproj.filters +++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters @@ -388,6 +388,9 @@ + + + @@ -591,5 +594,6 @@ + \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp index acf7cba3..551233db 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.cpp @@ -34,7 +34,7 @@ namespace SHADE } } - void SHSystemManager::RunRoutines(bool editorPause) noexcept + void SHSystemManager::RunRoutines(bool editorPause, double deltaTime) noexcept { for (auto& routine : systemRoutineContainer) { @@ -43,7 +43,7 @@ namespace SHADE if (routine.get()->IsRunInEditorPause) { std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now(); - routine.get()->Execute(0.0); + routine.get()->Execute(deltaTime); std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now(); routine.get()->stats.executionTime = std::chrono::duration(end - start).count(); } @@ -51,7 +51,7 @@ namespace SHADE else { std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now(); - routine.get()->Execute(0.0); + routine.get()->Execute(deltaTime); std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now(); routine.get()->stats.executionTime = std::chrono::duration(end - start).count(); } @@ -61,6 +61,8 @@ namespace SHADE void SHSystemManager::Exit() noexcept { + systemRoutineContainer.clear(); + for (SystemContainer::reverse_iterator it = systemContainer.rbegin(); it != systemContainer.rend(); ++it) { (*it).second->Exit(); diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index 616a8db3..f97d98a2 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -55,7 +55,7 @@ namespace SHADE * none ***************************************************************************/ template - static std::enable_if_t, void> CreateSystem() + static std::enable_if_t, SystemID> CreateSystem() { SystemTypeID typeID = SystemFamily::GetID(); @@ -64,10 +64,12 @@ namespace SHADE while (systemContainer.find(id) != systemContainer.end()) { ++version; - SystemID id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; + id = ((SystemID)version << sizeof(SystemVersionID) * CHAR_BIT) + typeID; } systemContainer.emplace(id, std::make_unique()); + systemContainer[id].get()->systemID = id; + return id; } @@ -103,7 +105,7 @@ namespace SHADE ***************************************************************************/ static void Init() noexcept; - static void RunRoutines(bool editorPause) noexcept; + static void RunRoutines(bool editorPause, double deltaTime) noexcept; template static void RegisterRoutine(SystemVersionID version = 0) noexcept @@ -112,6 +114,7 @@ namespace SHADE if (system == nullptr) return; systemRoutineContainer.emplace_back(std::make_unique()); + systemRoutineContainer.back().get()->system = system; } diff --git a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp index 2c97bfb4..fa34a5cf 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp +++ b/SHADE_Engine/src/ECS_Base/System/SHFixedSystemRoutine.cpp @@ -1,10 +1,11 @@ +#include "SHpch.h" #include "SHFixedSystemRoutine.h" #include "../SHECSMacros.h" namespace SHADE { - void SHFixedSystemRoutine::Execute(double dt) + void SHFixedSystemRoutine::Execute(double dt) noexcept { accumulatedTime += dt; int counter = 0; diff --git a/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h b/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h index e294264a..513358ee 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h +++ b/SHADE_Engine/src/ECS_Base/System/SHRoutineStats.h @@ -15,13 +15,14 @@ namespace SHADE double executionTime; int numSteps{1}; - friend std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats); + //friend std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats); }; - std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats) - { - os << stats.name << ": Execution Time: " << stats.executionTime << " Number of steps: " << stats.numSteps << std::endl; - } + //std::ostream& operator<<(std::ostream& os, const SHRoutineStats& stats) + //{ + // os << stats.name << ": Execution Time: " << stats.executionTime << " Number of steps: " << stats.numSteps << std::endl; + // return os; + //} } \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystem.h b/SHADE_Engine/src/ECS_Base/System/SHSystem.h index a2964a91..19b16f72 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystem.h +++ b/SHADE_Engine/src/ECS_Base/System/SHSystem.h @@ -10,6 +10,8 @@ #pragma once +#include "../SHECSMacros.h" + namespace SHADE { @@ -17,12 +19,18 @@ namespace SHADE class SHSystem { + private: + SystemID systemID; + protected: /*!************************************************************************* * \brief * Protected default constructor for SHSytem class ***************************************************************************/ SHSystem()= default; + + + public: /*!************************************************************************* @@ -51,37 +59,14 @@ namespace SHADE ***************************************************************************/ virtual void Exit() = 0; + friend class SHSystemManager; + + inline SystemID GetSystemID(void) const noexcept { return systemID; } + inline SystemVersionID GetSystemVersion(void) const noexcept { return static_cast(systemID >> sizeof(SystemVersionID) * CHAR_BIT); } - protected: - }; - - - class SHTestSystem : public SHSystem - { - public: - - SHTestSystem() = default; - ~SHTestSystem() = default; - - int value{5}; - - void Init() - { - - } - - - - void Exit() - { - - } - }; - - } \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp index 83107c60..73157e8b 100644 --- a/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp +++ b/SHADE_Engine/src/ECS_Base/System/SHSystemRoutine.cpp @@ -1,5 +1,7 @@ +#include "SHpch.h" #include "SHSystemRoutine.h" + namespace SHADE { diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp new file mode 100644 index 00000000..c9d8477b --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.cpp @@ -0,0 +1,181 @@ +#include "SHpch.h" +#include "SHECSUnitTest.h" +#include "../Managers/SHComponentManager.h" +#include "../Managers/SHEntityManager.h" +#include "../Managers/SHSystemManager.h" +#include "SHTestComponents.h" +#include "SHTestSystems.h" +#include "Tools/SHLogger.h" + + + +namespace SHADE +{ + void SHECSUnitTest::TestAll(void) noexcept + { + TestBasicEntityCreate(); + TestEntityCreateTemplate(); + TestEntityDestroy(); + TestSystemRoutine(); + } + + + void SHECSUnitTest::TestBasicEntityCreate(void) noexcept + { + + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + + SHLOG_INFO("Test for add and remove component") + + EntityID id1 = SHEntityManager::CreateEntity(); + EntityID id2 = SHEntityManager::CreateEntity(); + EntityID id3 = SHEntityManager::CreateEntity(); + + + SHComponentManager::AddComponent(id1); + } + + + void SHECSUnitTest::TestEntityCreateTemplate(void) noexcept + { + std::cout << "\nTest2" << std::endl; + //Test entity Creation. + + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + + + + for (size_t i = 0; i < 10000; ++i) + { + switch (i % 3) + { + case 0: + { + SHEntityManager::CreateEntity(); + }break; + case 1: + { + SHEntityManager::CreateEntity(); + }break; + + case 2: + { + SHEntityManager::CreateEntity(); + }break; + default: + break; + } + + + } + + + auto& denseA = SHComponentManager::GetDense(); + auto& denseB = SHComponentManager::GetDense(); + auto& denseC = SHComponentManager::GetDense(); + + std::cout << "Test Entity Creation" << std::endl; + std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 10000) ? " Success" : " Failure") << std::endl; + std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3334) ? " Success" : " Failure") << std::endl; + std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3333) ? " Success" : " Failure") << std::endl; + std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 10000 ? " Success" : " Failure") << std::endl; + + SHEntityManager::DestroyAllEntity(); + std::cout << std::endl << "Test Destroy All Entity" << std::endl; + std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 0 ? " Success" : " Failure") << std::endl; + + + } + + + void SHECSUnitTest::TestEntityDestroy(void) noexcept + { + std::cout << "\nTest3" << std::endl; + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); + + + + for (size_t i = 0; i < 10000; ++i) + { + switch (i % 3) + { + case 0: + { + SHEntityManager::CreateEntity(); + }break; + case 1: + { + SHEntityManager::CreateEntity(); + }break; + + case 2: + { + SHEntityManager::CreateEntity(); + }break; + default: + break; + } + + + } + + SHEntityManager::DestroyEntity(5000); + SHEntityManager::DestroyEntity(5001); + + + + + auto& denseA = SHComponentManager::GetDense(); + auto& denseB = SHComponentManager::GetDense(); + auto& denseC = SHComponentManager::GetDense(); + + + std::cout << "Test Entity Deletion" << std::endl; + std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 9998) ? " Success" : " Failure") << std::endl; + std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3333) ? " Success" : " Failure") << std::endl; + std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3333) ? " Success" : " Failure") << std::endl; + std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 9998 ? " Success" : " Failure") << std::endl; + + + std::cout << std::endl << "Test Entity Recreation" << std::endl; + EntityID id = SHEntityManager::CreateEntity(); + std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 9998) ? " Success" : " Failure") << std::endl; + std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3333) ? " Success" : " Failure") << std::endl; + std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3334) ? " Success" : " Failure") << std::endl; + std::cout << "Entity ID: " << id << " EntityIndex: " << EntityHandleGenerator::GetIndex(id) << (EntityHandleGenerator::GetIndex(id) == 5001 ? " Success" : " Failure") << std::endl; + std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 9999 ? " Success" : " Failure") << std::endl; + + + SHEntityManager::DestroyAllEntity(); + std::cout << std::endl << "Check Destroy All Entity" << std::endl; + std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 0) ? " Success" : " Failure") << std::endl; + std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 0 ? " Success" : " Failure") << std::endl; + + } + + void SHECSUnitTest::TestSystemRoutine(void) noexcept + { + SHSystemManager::CreateSystem(); + SHSystemManager::CreateSystem(); + + + SHSystemManager::RegisterRoutine(1); + + SHSystemManager::RunRoutines(false, 1.0 / 120.0); + + SHSystemManager::Exit(); + } + + +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.h b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.h new file mode 100644 index 00000000..938ba865 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHECSUnitTest.h @@ -0,0 +1,22 @@ +#pragma once + +namespace SHADE +{ + class SHECSUnitTest + { + public: + SHECSUnitTest() = delete; + ~SHECSUnitTest() = delete; + + static void TestBasicEntityCreate(void) noexcept; + static void TestEntityCreateTemplate(void) noexcept; + static void TestEntityDestroy(void) noexcept; + static void TestSystemRoutine(void) noexcept; + + static void TestAll(void) noexcept; + + + + + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h new file mode 100644 index 00000000..e2e53d6b --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestComponents.h @@ -0,0 +1,30 @@ +#pragma once + +#include "../Components/SHComponent.h" + +namespace SHADE +{ + + class SHComponent_A :public SHComponent + { + public: + int value{}; + + }; + + + class SHComponent_B :public SHComponent + { + public: + float x{}; + float y{}; + float z{}; + }; + + class SHComponent_C :public SHComponent + { + public: + std::string value{}; + }; + +} \ No newline at end of file diff --git a/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h new file mode 100644 index 00000000..7231b323 --- /dev/null +++ b/SHADE_Engine/src/ECS_Base/UnitTesting/SHTestSystems.h @@ -0,0 +1,40 @@ +#pragma once + + +#include +#include "../System/SHSystem.h" +#include "../System/SHSystemRoutine.h" + +namespace SHADE +{ + + class SHTestSystem : public SHSystem + { + public: + SHTestSystem() {}; + ~SHTestSystem() {}; + + + + std::string test{ "Test system" }; + + void Init() {}; + void Exit() {}; + + class SHTestRoutine : public SHSystemRoutine + { + public: + SHTestRoutine() + :SHSystemRoutine("Test System Routine", false) {} + + + virtual void Execute(double dt) noexcept + { + + std::cout << GetName() << " System Version: " << GetSystem()->GetSystemVersion() << std::endl; + } + }; + + + }; +} \ No newline at end of file From f6ad22530ad641a13a3e7b23ab6ead82b7371ed9 Mon Sep 17 00:00:00 2001 From: Glence Date: Thu, 15 Sep 2022 12:10:45 +0800 Subject: [PATCH 079/793] fix dependencies.bat --- Dependencies.bat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dependencies.bat b/Dependencies.bat index f156b91c..d7730a50 100644 --- a/Dependencies.bat +++ b/Dependencies.bat @@ -16,11 +16,11 @@ echo "I - imnodes" echo "J - tracy" echo "K - RTTR" echo "L - yamlcpp" -echo "N - SDL" +echo "M - SDL" echo --------------------------------------------------- echo. -choice /C ABCDEFGHIJKLMNO /T 10 /D A +choice /C ABCDEFGHIJKLM /T 10 /D A set _e=%ERRORLEVEL% if %_e%==1 goto VMA @@ -35,7 +35,7 @@ if %_e%==9 goto imnodes if %_e%==10 goto tracy if %_e%==11 goto RTTR if %_e%==12 goto yamlcpp -if %_e%==14 goto SDL +if %_e%==13 goto SDL :VMA echo -----------------------VMA---------------------------- From 2714503efad797cd34a9b8cb1cb5874d786f3b23 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 15 Sep 2022 12:28:53 +0800 Subject: [PATCH 080/793] Fixed warnings --- SHADE_Managed/premake5.lua | 5 +++++ SHADE_Managed/src/Engine/EngineInterface.cxx | 22 +++++++++---------- SHADE_Managed/src/Engine/EngineInterface.hxx | 12 +++++----- SHADE_Managed/src/Math/Vector2.hxx | 16 +++++++------- SHADE_Managed/src/Math/Vector3.hxx | 20 ++++++++--------- .../Utility/DisposableAssemblyLoadContext.cxx | 2 +- 6 files changed, 41 insertions(+), 36 deletions(-) diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 42d0482f..092e92af 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -41,6 +41,11 @@ project "SHADE_Managed" "SHADE_Engine" } + disablewarnings + { + "4251" + } + defines { "NOMINMAX" diff --git a/SHADE_Managed/src/Engine/EngineInterface.cxx b/SHADE_Managed/src/Engine/EngineInterface.cxx index 27645342..2009b2e5 100644 --- a/SHADE_Managed/src/Engine/EngineInterface.cxx +++ b/SHADE_Managed/src/Engine/EngineInterface.cxx @@ -24,15 +24,6 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { - /*---------------------------------------------------------------------------------*/ - /* Constructor */ - /*---------------------------------------------------------------------------------*/ - static EngineInterface::EngineInterface() - { - exceptionHandler = gcnew System::UnhandledExceptionEventHandler(unhandledExceptionHandler); - managedLibPath = System::Reflection::Assembly::GetExecutingAssembly()->Location->Replace("SHADE_Managed.dll", ManagedLibraryName + ".dll"); - } - /*---------------------------------------------------------------------------------*/ /* Interop Static Functions */ /*---------------------------------------------------------------------------------*/ @@ -98,7 +89,16 @@ namespace SHADE System::AppDomain::CurrentDomain->UnhandledException -= exceptionHandler; SAFE_NATIVE_CALL_END_N("SHADE_Managed.EngineInterface") } - + + /*---------------------------------------------------------------------------------*/ + /* Constructor */ + /*---------------------------------------------------------------------------------*/ + static EngineInterface::EngineInterface() + { + exceptionHandler = gcnew System::UnhandledExceptionEventHandler(unhandledExceptionHandler); + managedLibPath = System::Reflection::Assembly::GetExecutingAssembly()->Location->Replace("SHADE_Managed.dll", ManagedLibraryName + ".dll"); + } + /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ @@ -127,7 +127,7 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Exception Handler Functions */ /*---------------------------------------------------------------------------------*/ - void EngineInterface::unhandledExceptionHandler(System::Object^ sender, System::UnhandledExceptionEventArgs^ e) + void EngineInterface::unhandledExceptionHandler(System::Object^, System::UnhandledExceptionEventArgs^ e) { std::ostringstream oss; oss << "[EngineInterface] Unhandled managed exception: " diff --git a/SHADE_Managed/src/Engine/EngineInterface.hxx b/SHADE_Managed/src/Engine/EngineInterface.hxx index 7bd5e010..4fd8f7b3 100644 --- a/SHADE_Managed/src/Engine/EngineInterface.hxx +++ b/SHADE_Managed/src/Engine/EngineInterface.hxx @@ -32,11 +32,6 @@ namespace SHADE /// Name of the Managed Library that contains the C# scripts written externally. /// literal System::String^ ManagedLibraryName = "SHADE_Scripting"; - - /*-----------------------------------------------------------------------------*/ - /* Constructor */ - /*-----------------------------------------------------------------------------*/ - static EngineInterface(); /*-----------------------------------------------------------------------------*/ /* Interop Static Functions */ @@ -68,7 +63,12 @@ namespace SHADE /// static void Exit(); - private: + private: + /*-----------------------------------------------------------------------------*/ + /* Constructor */ + /*-----------------------------------------------------------------------------*/ + static EngineInterface(); + /*-----------------------------------------------------------------------------*/ /* Data Members */ /*-----------------------------------------------------------------------------*/ diff --git a/SHADE_Managed/src/Math/Vector2.hxx b/SHADE_Managed/src/Math/Vector2.hxx index 26d4ae6a..69a6110f 100644 --- a/SHADE_Managed/src/Math/Vector2.hxx +++ b/SHADE_Managed/src/Math/Vector2.hxx @@ -33,37 +33,37 @@ namespace SHADE ///

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 z zgB25cMFPE6Y^4MCvto}+BI_kVQ`SrM>aR%jTQB8NkJi{@z|vQ(u|@~7?wIb}{~dYb zC(KzEt_ag(y|zm#VsC7nnDeNftA&Y=X{^Fo$ye2tm|p5Vk~xb^))%s6-TFLoUwF`t zN#}6djgF%SijCzl=`y9o+vxSBDvJ^FByg|_oa}4#4kQf0V3jO+1`BN7C>=$oOGk;R z2pBn3Noy^Ytv$P-Y-X`Bab__n6YEu17Ao^UAjA*Ha09q5X}tZ#J(Co6<1!P5k8x;bXm`qoMdnOmh4h)ETf0vaU8hhzEnPhhkh#kn9=RIe8GV6ETZddvmhxRCm z`sS(yO5tdOc3w+s5Zx^ab#ceD* zsAvFz2d`{$Li?j4TnL=oR`$XJ_>pXA>)bYV0oz)cBS^PPbVq&u4cj_B8=5=4=$75m zJc3SyMF9J(*E|R`dfoh@`ozhviZj%tOC^VY5uYg|QIMG>$2N(`DZ4Q*t9u?xu6(sl zk{v@-B>XJnoIK9P*zzwb5{A}g6M^1GsZ_on&lg2 zoy<|iL}S)-r7!BW*ClhEPM)$;b+TwOs(^M{cWxAkq&GPnHB_;<6juW0rU-Vd7H=MpouF!b`EoV9f;E~wv ziRtO0wC=BsEN{7)zGQn} z)Y;PB7rIMbpi7nUJr}0izi4mC{|oKymu|1oAiMR-o21Q^Ik5vbMbS0Yvt**6q$>+} z_NBaK7J6D+6H8%@^$48p=bd20a%BEFXhe3^N!8r}*6gseUX|P>+a#=Za+*j^WwQ&S z*SA(Gu?tip9|t=#Gdkxmdg=OfPUnNywxi=r9$l}D553r2DHI-etj1+c_7;D8W!!t7 z>~DOx`J2mI?s9fJY>{^FfCI?FXt;?W$!l2I3qrRaO!yjY^Bn673y z;&BouSDxiG8h$HNr~D(MVLX6s3xT39(^)vR9q-iU-Y>L9?BJmJ)pW8<>{?3&_1JM_ zyHKPD{k_shO^p>QBTbk5V{|hZ30_M;XI~3XFKHl^>j9Uw1S}O5s~n1IK{ z1ep2O?b6Uz1Ad%oL^7Bd>pvPp$QWB3)mQ#&<5J{&JLA9FvA< z5{=TkXOGiXhv;&st>m?gcXs58w1rUU#>ArY=*!q)PjoyKu$bzsoR(T&YmMtm{$6~X z$K{Ov5KHYW)(eV~eL-kgnV7#pDu9Wpg`hRzR4l_ac}&ClyN>7Z^|^=(BY_3|r0G|z z`eEYVXjnueRNqYsceg+X^jHu&fSsrJlDVvJ0CvH8#~9Q%fEC#zhJ3K}4CX~rZ*GhR z6HBJi(e^_I=*#VI(kYL?8bbuGp=o}0*AA<449i#yoMMdSLvBZ99W&|E>-bLuLDG-$ zvouiLR|odaRvnlcErDiX`rHorPxtjaE^kuwd=Gg?qh3xUA^UQuUk-b}mR`O+CqC(o z*ntaqNnLI=z+hRt$@I(S8G~Y}??-a#Qi|@qOQ}r41CgGpV1E(uLp8r9OcQCBBZH?L zJ-Ftm!AkaVY||=PiEO79Vp8Y{hy0RD9_n zIvRMKKTy5_tNK;(2j%)CU`#q#%^f3Bx8*;P{tOxu5SV#T@L;fff6$n;zgvD~W0hx9 zXzH4Z(s3ZoHeyti&T}JY@(Lg%hN~1@_PmBG+@&U8zvQb*-e7}gAa8?Jq4bZL(sNjcxy;qsOl4+s1$Ra2YHc%w9s z#+7fJe{#V3$s^PS%OmAm?!>CsJRkknY%G7#cbI;$t6>YT;Sz_Z2&ORmhlPUWf0@OG z(M;>S45JcDHOo=lMjlh7F)Lv9q9A-dDr|^C-Y7Qz%--gy#eSiht@hjitQ|&B`cyRF zkRf_ksc$N}P!3$`Lp1&N}azii4Uz%LC=AB-Z|`HQXh8x6WEcBg-`Pl&|S*Xt_k`( zYh5f8)5ywse2buXG#LMSmhj{0p&Ffr45o2UO42+}5Ty}J z=Wt1e)w94@Zrmo%vn#{lkxe{uIDG% zgt(VOs%M554&VJ|-9cHfGePE_K-m=5*Iv+vZ3}PAzT;ZiRrmv!PgDy-iexI^I`ccW zB3L|X!{X_MGyR9{Eh}Z(^O6VVaXgc27-OEXnPOo2&wIWVll)|Nx)BSN@w-*bwwWXS z2mK#8U#-T(9_fln=YFYYqHdJj2Vd#AZWjDO%&x?mKDGChGq7(N6ZVZwDS1OXCao4i z=v3L6{|wt%2O;$8gF3HY&(Fe@+<|Z3FT1Zhrj~^IYrQ1N8R>`@>*_&&vt`SVmddqZ z`yAfey0Rwe!SD?GznWAV6P;&~lS+-YmlcyN6Mx$)%h^*lryz2jZA(x`m84rFYPoTcjb9VOd)GuavqLrAH0dLU^tRw5MYw^b!HXDs%)H+l&s z47knBl;G4wi-83EO;X&*qZBtHQ(T4dU~7C*R&uG6l)BHqkX-wVl9lI<8Zx0n=oZOp z$5)Q*kk{T<9TJ;U0KX_m)zvL&=Y>GsgALSoywiJ=*fd4oEPh&Yr10wA3dPUdjckxS zz5~9CpZnTrd?>THG7%~=_5k(ZU#O=2X;Qh3oa}lA=7{L$OAyI2DYgr-EDKv`Ls^=v zB87Tbn`XR9o`mEqUpZZ`*!1#j3b3%%@xFtb1^17W@ClI z?6v;;1y9$45P06>O&yIW!gy9JgP2N(ij3R@7S^Wfk;anLEn-DxCgxSwCV6{KR0`Iy z*#_)4C5rHhZCh$!$An3qYAaLu=#Dgv2U=JuYK@fJ%ZN35mf)Q4$4#gDDQ9{7#~pel z9XENJu|nlnYk4n^seVaCf71CA%IzMmnt*4$9wl(LTEZ_$^#w5x7Uhf{h&eE}3DG4P zLkUcNTaN}UmkD4jAL`C@qV%(HwKDE^1xc{v#LDBJ?&jb}<@GB9n}2-_b2`=?1AAMAQW)FjBHjaB7WSsxd_$ z^ni%7lGahYosEeBN2x(}rUnjX=)9ekT=tSot_YJ=HL7V&KaCyyZK^#`rwTvFeMMh{ zDffjmN#lnx8T?T6@8E~ADe%L_!of^~L*e+D&8H|#@rq!G`0Ol@#Iqv?Q?OuojSw&( zwlT39iI1LvyyL;K`6&k@JjnT+-A$(RxBpiVf_`#vQ1WAIP3PO7lbAkpkKh zJxTY!UzKv981bByqYJR#VECj|jcc00H88J?MS`z&-396B6#!)JJFX&j_3W@{;HMa#_WD$lEFJhT=(ltw~o*RWNu_?zvg1s4VE z7i89@HoMixqMl}{`fL7}L!Ch!1uTUigXJBwua%KBioQhh3@_*{9DlD0~b;rW@5In>*EFM1CrDmnkaGRij^lIs~MLQen z#>72m9JyNVMhYU00E)f@0#GHFsk<|y{t0Rk50UA+Xs2#$ zudw5zN6GLZouS5#26<`fsXtIJ>gg!-lVf3>lYIPnnSb^kY=QmiM1>jy@!4)xyR2b2 zCC1SciK-Vq0okwck{P$$gT)nrrg2>;c@} z)gWYEWjAwluS%I042VuQFQ{@yzax*PUyu|1R#jcIl*)TXe4VGgv$R*Ny;HPzqV|r} zUY_={t02?YnEvMYQpv@-UvQ)_+Xu4T6b$w|St5CT_pJOD+^YU|3`z z<%oPS6X56zFoQlOk7P{xb)QTo?@rH6qkcKrgyQO4*ZDDMr2E8Bee_(NWsS_HUe+I+ znjY}(0`}}m7mz+QT;_Z=-$nD^~-jgK6_9%n2e^1gBO zGW1yXIs=Y4N@*u$N^^#@ugrimxK)`_zF=_wPR{ytZj>c`G3#1vBtY!!cVT7q8 zZF)R;U7_9H(3yR$M~gXy_;~jk=YvQXf540coJOCqVm%~`I|?6eh-X{fp^qQ~1M!81 z3&dtjXn}{5bD@OA8zsn?(AK=$$0e`byhd)Hz3kg-Nbj3jC4z}3W%!fEa^3~M!j0k# z7KDY#wYTn|&Kiw25cBsJ^j|>!&1To`<~_zOEr#i7M#aj^ZCV3@eGZ9YW8rZ$ZsoI2 z-u4Z%Ygh9gu3L9PtO&XUchxo3>`A3o%NbA3v7pT?gcFVB@RB_1HI$WsJQ>KFfwD7D zzYNqr1Lb6(0U2mu2FlGqc^PO>20A7K89>-e@Tp!v3&Ci(ih)yYSIxe;Mf$?irb2X2 z=%4_5fwIXkl=x~Bk=G@qpN)mvr1@|un)i5n=&R6vx_RIK&-);RNmHZYGTo@i@ZRp7YBx}Xrz+d^e@4IszS%oncM91Qf^J2+0f zUTq(QU=^zc&F}c^gMr+3n6kIE)Ed*9Ff$$~DwIDZGOLSNJ$8pov&{T6R=7hjI%-pa zK%q1$`au}Q$aaQi^&lCaRR({9HoQw`zOu8wOtVw9Ww!8JR4$EK z@6mzthsaTJC}GkNqhTOWEdsI=U`DS->C#mTe>{+PYON=bH=))Fm_C-qbH^Uf8$Ixef4gaU9}4_$te}J2CAFuum#CX6Nt(<_|4f_mq~8POJB+(`3JuDf8TqMM{u!)PK7$Q=tK;LAcdw~H zBItjee(rdOqGp~Rv@toE#vgih`L{J}pFfCWI@8>8zsz!=sAA1X?P-2Pfux@lv(T(0BtfIA^9_(h>>VRAI)H}O5UHQ& zmq`^>m2zZ_ufwiO+sHL!;%N`~cYdj+umh<(Tid%twIpD-rRzasgwB)}l&TioM;-dM z!1g};uhT`^sIpXeRCk5xzZ|Lb7qsJW$KN@E``O7;TStB>E%6-eNOBo>x4Id4)8AhH zfEvnKY^jdYk|C^pRc~hf&`^=lkqT1i4`EQkI4!L_I{!o=p z%1TV82K{eB+4jmGouv1ZBXoskjv%ML5u^fkYqi}LhE0vY`>YFKH4^B~S?w zG`f=C#o7}0I5e#rA4?iGb;(|p$#*JUlrBjsIeQ1CL=cVYE`Wzf)ber)I-y57T+dR2 zbc9ejk2B4@FiTgc8l2p1QT7y^nOKf1hdHToCteCO22Wzatb^YhNk3 zSGdW}r}jAiInB0@f1G&@@zDVawx>p^)&G9!me!Jtp=J-1t|4)v;%kkfJ{DkAbFFxH3 zfg85!TwEVfNRIY|`<^+Y2tDY##;*JEP^4m}?zm*?%RgMk2zxPqL-sl5OBc#Ma6210=k^utAse-XX)NbCzVOtV0=tD% z8Ar126Iop&EjI?&J%SgSTK5=r4>|q9PzD~#vVS09JXbfhrK)_55nm#d8vR@v_U{l; zp9<5{A%}oaIR3o!CbZYx?DZvr$E&CIgSfpkUeqAVSM1Y_!^H4acW22ZDAX2c|I(eN zacOfc8tmh;*xmx=t#?gC01L7xRc}h&g5|CAa)bU>k$1AMYTy!eg?C)sdn~+|Cbyal zVt|?fSP>YLLmngs6(RBK!CMNaZ1LAKLE zQ;~mLS~V4`C@Y+HaIl&jj;je-9Ut~1>7S~pm7i6|ulp>N+DNE1b6GsCY9h!~LQZ&os5Vem^ibrq(9|XJBlZXxK5LP{ z0jqwAtersPg5!r|C{95euEV+?VDdW{{x-%fW z`RYvpqk65ic#-6U%os|Mzj3ScP5>5+mPQ6P5qfvAqYu5 zwb@?0Naiyq8A~-$r__~C+(-J*)Q5G2m&ghU+bz{ow}{ZeBKfp_yyS7!8uep$@B=y+ zi`gr@Kdtq69}-!OdyVA}luKg;ji^>%&~8jhJoWWjj%Dx* zmdK*>oPy5b^U?0l zaeV%``|~_Lf7<<7%I9OIdXw14eLdD1LiC-aU!WbW1eUu^=U7VzVKEC4z{@8Y_+u!WhVwXQIBx z9&=}IZNR zMpfMO=*lDu$UBbd78#B@HOyDKWBUIqX%Ka0=x8gl`uW2&2hos$QWJbzOq=iR?K!W7mhR z@kI@vgz2E__*A#?U^CQqX1xdPx9kt(=`H&caL4)5LpkLi81-?g9VlOK#GjPv$A>Ko z#m6sW{o6}LHs9VrcRnm#hySBrNrxy2rH);ze8jH}J<<6r-7YtvzYzfs}NbcM0ZvOQDb zMyW8yjeFE-smw9D@R9faZ+0Q(hB`f&YN>ui|9<|p_6GX6nbDGdQ6m=2ZTXU;W~@-- z!my3r5L+N4xSw1)JLOc1Acv&})!slD@73mR=sYNg7iTWX5;K;3#Bk9SOJ$u&m+blf zyh{fCZ+FQ*RF@p4q47&RoeB6t(qO?S(%=uixWQHbdKo!ONGbUpv5Y8lkFB~t*1XU3 zY{V7=D~WgbPLz3&t4AiioP|Rdl!OMDlnKUWTa|vFh2P+VY9~$<;~})q{>e> z-sCX!Zz`I7e3X_WZhwWhN7IA3nRX*^Z`>;fPb^%#yE+GLjgHLz1i9zt3MKB1#SRUc z|83^w0>R$&Pg8BjuG#@w!=8tES14ULsr$dshtr#j(s4t(iJBxFtvIKToUTantbs10 zJAZ7*={|$Pk;f5@hW}#631Dgi0fkUpNtGrhAPgLcPjZ5k^#(N$nWg%Uyt9xPvX$qA z?B=k&Q_n)vek%y?bcII4qTMH*r1#6*4T6jVmRc-<#=P{l`Nd1GBk3&n&Oy9A+40xf z+@0+Bl9Tm_p4~a~M=F(Cbb=d)`HsF9Cx;NFVf}pZG-Aob6xxS5p=zZUv{V=V{Xn{I zdnP+}d{oO&h|ggVCHRx=de0AumOOzfZf#d4G#y>#5Gs~aVj)R$Isdt(3PDanpf~4d zIEbkz2#Ws9a5s*SuM$$pv8)mt`-v$xulquBi$tft5h#298D^bv?`$wY*yd()ZYV1{ zd(~Y{segpxv6uM`vo-R%D@V36U-UAVkJ~!Al>`wT7%~4n0`K2Nq-eQ7?+SFbK>Gwb zV^tv@*@!x)N}kW-pOQFKcThy;=Is$lnQX;6gCiGW9w|E@h`d~ba2KD-^ar0IE$bD6 zUUw#&$i=iEK#CyC6dfw_E%7Wt#1OL}iDOA*Dhrf6{PNQk+~T1@?%yVCOltFDOjc3! zGU0f3e_qI9>;8i2ZKk?EhlXOEUXIjWtfdSLAy0Pa3vwmA$0Jw5d$N-7em2;)96Zr! zxf(?tm+5JVH4k*hI=m$i#8Y_#=3no`6RMcZHbr9H>MxY8afcgb1f*MA* zIfy}U1Q^@&0PJ!UT6-bQOGG+P4FFW#{W3lr>QgO=MQCe><4PvY88D^HnyD^&3jg=3 zi$RwW2Ylez?9e}bF6rC_GC}bR5NP53hRf1cQF7)FS9+)lw<7%PXm2~}w#i&B)`uQV z9~Vre^mp;3EA=+4H)J@?vOlM7x^(lG^?TrQvMB*8j@_#cG}ZPlIkdol3B+&kl|3mO zOrzd{C{RZoWXI2)z#9S_Z+I|*U0)q^^nFIiZWJv5IymoUV5L@pgxILmT48D_TZ#c& z(WfSo6)O}%tePr>?^R2(_?x%HKZtU~(9N|;0l&+kFj^gN=XY*ZV{9Ykfz@5XE@F%iF zrqUW4wLUTaNCx`g<=;|%aDI^Lf4OrPDRnh_R=l<&>3JjBpHgrr~J&wiGv4n0W9 zJ@Lu=+=_rr`uKc@M!xCUn4u)~IWV;zPozE0I&$Lp_Ulhto-{nc-l zS7Lhf*RU-0+viWJbeE1$zqRre9l9=iG#tVIYz<;AXO#%ggyLNMr}B4S(NC1z z8sLE;*um}bc+3X8&qpox5Cz@^oUonLZ}Cx@y|aaKtRELOkymTB&6k{#_?aMab4w=VGSrRT-Bxsr>Di_j4&-sB}>GW&wmGU9p}0Xfs3B zWYqtX0+8{vvMmCP2I2S!fn7NE?Xuyk35pD%2kHP4ufZ0whW`rC&Ys5KW$wth(&3Vi zSTq`x4IuW~PfX=cxU?T}0uo>i-`k|T5AYg?-zw>{BB!VFzd{{JwN-v4)zDOa9;t}` zijMyWJZrd1@_;@qWCj*HG%D|@p(z==@J(X4qJt8*B8Vb`F5|pD!-ioMqDM~ z9*if6kipV|lZ-AM8qJBDe${E=c%Y~v@#}|3sr#_v%B!_#j`Sn1G`%ZSz;x4oUub|5 z)BY1zHdU|8{=?5sJnPRz{c6#N{ZwrJ+(v@~*5gGBsBkL(*>FGb3kQL%RrV)UJjm4b zUdX>cwC#hCXMd>qg8?_MOR$UrJn%&Eb40+VF!92vbXkIHrQZa~zFjoOX!wcB>f2<+ zBjjWf>f(~VIgHtXZHcg_rK&kGz`VIhXS5Dk2>+IwA$)1b)V9#dtzB3C^@$(7S{Ul; z3^gA@OSc7`&Wl4x)aWGPsZCWLS$6~PDow44eVR3YTi24J#C7*A!oGmHk25930Lc8YA` zCcf$}KKbcfmQxcjrs@jAW#7c&$?w$HV10?2sE@Oj?Ma1psK8kL(Fm?VNROuOVq)17 zeMw*JbI(dYU9?I}vSRr{xHXV?3>G7)?&FaDMEJAU>Q?U!s%O2#vR!n5o(3|rVsq!X zBF96+-hxe?#CumFxCrKySs}kFO3;3OfrP+LIyLbitIK(;?3nn(lcZcnP@PFG(ZaTx zz^nU75_^l{uqS>tNj^|>*pe6r5h+h-ZlRw~OB`1rKadBn8>r=>3QspJU5VLq5;w4% zbq*}A$7s4rC3k8LORD$n$EHn3&VM!Kt8G`}qx0zEZp@)OO7RaA4iP15dqXP!o?oUh z1@E?X7o!d}sr;+duk9d&Xu;UGnFp!-%L(dLqfl!FD1f?JrI-+m4i4FvxZu#AsWJyD zcorK4t6+Gh4I^7QlHtc8vav4br%cREv4hteiiDZ2e~;r2RCGdXve?6@vm_F?>PQ_j{iHy zZ*lycj=$gWvr2S+LmYpCt$G^n! zzvcKd9DkwX|IYDS9Dlpx?{WNr=Q{Os{BsVs>GTirYDdNw@zYDhrw*>bv?q|4P!2J<-7OoYy6?YBp zP27#Rn{a=jPyT}ccie}#E?f%NpE?*)51e2)haX_?tUGvcG#kf~Fu2617deZ%=J$7C zOX=V@jYU-%1T*HGPk9fZKFhbw>jKeS)t*5#`Je1m2{>eG5CF0^|1SdE4Df*fQvm)c08bU? ze-ht-`h7Hsbz_`w;gY?ls)8EEd;S_~*uDc?9C0_bb^NkiY%<_sFd|SA^z_O#H;>b(NRic_OsyA0|k@w|5W3e|^j2N@7Q}gCEy( zA1LHVKnV2`#3gtMr&vZzSv^wc!Bt{GA(j8V3OQj%PlClP_X3H}q->%^u0^g?L_XYlzhFyZ(zpCLpfiKZ;p}-eu zc$~oJXgDPB=^DOD;1e}GMc`vJe5=4&8lEHYC!9>E|6+mnX!tRK|69Y)2)tdxD+OMs z;Y|Xs*6=QYf2-m51^$JG4+#8_hV#I`o%d+CK;ZcrE)sZ#hD!vl)$llhzpmjLfiKnY z^#V`O@HBzX({M!K(HdSL@W~opEbtHwKPGTL4L>9BAz@<12dxzN0}XEy_#F-J68H@b zzc26x4IdEr4;s#6AL#s@h6@G$m4?R%{HTU21in|pR|&jO!_x$wrQvx3e@DYh1^$MH zpAq;94X+e_*j9zsp0blzFNbR1y&*+@j=%J ze4!4XD)8AF{+__6X?QF)Lpii&Q_bX=b)TN@0Z%pz;5T!Xz@Uk*5!=D>TN5u|<#r`` z{QN2;=$vhRYvTCpJs`GkmUiRot1o~<6#sFNAmnw6)NW8^U+06t2@|_;0vDxZ#97L0AyC7WjwwH{kZ-;n)a7~HKY_32 zx66T}IE(M!;MN0Y-=3Z7%8lOr35f>=oSEUr>GnzkQ!{AK{O} zKS=!l!hapVim-EmKgS=ycRo(?e~a($;s*2E?R?*c`zh{j+Z^LbiMC_Np#;i!JKA#nl~G z;w%1d$!a0f9Zv7|A7uD9{h$g;gq?Lgn_N6pBiEuKVQ$q3ce7ZGgci2CggKXZaVEkE z`W509bxg@#D4U-3$LC~kwHC>qYsN3*m6PnR@k8q(A-L5pZ7mWlLc-4`oS2XCmC7F@ zwXha7%1^>suO(B{?t+uQljBIYK9!PcNacUNR4Of7ysW&fNrR`HQ9-^IUT!HMEFqnh zl}Aq~FkCi%pHcrLRY37C6g%vm_hLA{qKWcW6-c4+?A=fi)z0^n5`2FVR2I3J1M`)>ZhuD8F^OOUHbmlsoxF%L;b2SxkBCWbiJOIDyVvS=DqCX zaf0MQ0|$hyy9(7IOEoe+yqIlO+N$EE8;mVu=-4IQNs2p1QL(=LVofSe9QeEHcy+{* zzLpzZ-rAW%Pf1wVdM-z?;agi54dYvw?5*ncRR%28Ia6X|LF6*6k3mCHD5MVC2kS0! zR=Dhrf?0(<^xs1El{t!KyD_ni3oiM6b`rWZm469!mG)cXN%~22d6j)kD*s#ptF4QI z*8IZcccql-^hkCWGFlaKQu@9L*`ILltkKYA5RB+RE*Em56$ccwohts)IDZ%66iMtE9xe1ibDu{Rk z)-2Yk@M}RPrGe7rXEMEvdcjAr`P1D-{Y0QZ*}3z$qcIwOC-sPDPXYymt#hZyMUItS zhPSFz|8fJrv}TtRqN;3V7fGCW_7k^}(8@lUFYbF5t8@pSP}Mi;capZs#w_vh`HgOu z)3~Q4QU;@J5sWh3!6>>FcJ@liz{)$o&D(DP!)4anG&0WzC1J^TK7(oCq4GK^_2NkS3zmAGT&Oh`b79MSWtup4*Ds<|OVL%R&kk zjBQEQXfi)%;erCL%?JyhDUqow}?!0kfTGe(euqFwHJs@W%yAH&>)TdiD!dd1${Wd&OH5 zo1c{Om&_s0RDRn%GUQ8Sl$0^-U+duK2@YGomf+ao(X)>Yt#Y{*cwKVJHGcWgOpm#o zd*fIk^ES-wlc+r%L;34OYiT3Tn%VnE6}dqcVg(@~+aI=`*unHnJa?DeSVzzLq(NPI zMu!DTpUBDK2J={Y=`o6fmi4{e&y~0->}D9Ba4{k%yhtxpfFTDqG_8Vl;GeC40 zr4|db+^TF%?Ea2SfT`e@C3C8zf0kLQBjm%$7>?CTP^qr0$e`Fu%LFhQc2Fg!IHO@B zAHn)hjD{8f?(XK;bv}x2Xqwy4HVecE!qm2E`{O|4RCcyVnd~?;GE^2SnKg#i_v21P zs*&muBgP3{T57}*r&L;>g|3~C&A?s&yUrga2($>g;ux-oqOZo}< zARSU6Atw-$Oot?>TCzWpn*hYRBL%PJ5=RQGrr_ksjJ{-y{Eo3)Ml~^uA{l{fcFW+t zYU>QT=n?Ww}I zMi)o63i@$i2uadx^F=o{bk2E~RCj(Ob=fekQrTQe)V{80y|jLR$o@*$p5=?(S>TQm zV{>b;fbv`kFV@!?-(t15zmfRo_uMW)4Vx2hv$DC>uBN-zID3|QuPJh|U0D!I4CH;K z*;v+FDC@@#&8ge%B0r4aHW{mT5127DaKS>ExRKmIqXL+rwCP0ZE8}q6IWE`Oy|Fu{ z^YTf^x@DSm%XAfiDLf)r|88W6edRD@M0~8rwTW#U!o(&CJTita6t_i;AaUK_q~b5g zjwG`CB{D!$q}~2d*=+^0*uTH336?F1LK-E3f`H+n{qSx<|4&Ow7=J*TO4{05Suj|- zq^?MQ;Ndhi&~!CbET)#I2T0#rw?JTBRw%2Pxgc+rMoyOfKPyyrZBB%%(<^+0ML$60 zU~E(3aU=#1eWdyxMSX-Uchbv)6$B8K>rl`R+Y=8DaHV=#L1Nq(dZvl#RmzJM1Q1MY zUt(C#@bs0n#97IdWeWX2q`e7z)W!M7pO6H@!mmO4V7EhrTDn$$o%aG}!q8b1Y% zk?eFJOq(~5r_tx`6~&rA6CuW#xVPY2u$dV4@U>{DIecwNySwoSTH0Z!!JRn+nmP9k zE~6jNVYX=I?4UfO*Nj_-RRK9nd?J0=jTG+0_(-_OShWGF(~?NC&oXT-DsKxjW_{J0 zI64+~4e^vzFtMEJG^bB|Vz8p2AGyVk4>}Et!IYufA(7sx7*y(pIu^`sk3g4PO1GiJ zP-HV&*x8uRl%*!whlib241#sGqcC4%J9SI67S$y4xA-2lwR0=wYxHaT(?yNi%m;Aw zw#?#>N}SDPE>cCDp;2e*)EXFup`jG7Q8-&7n7zuHhaXC?;iAf-2RxG!V)mode_U?d z4{imxzNfc~K3-`3wj+Y|Sj9P%LIwz~sWh?T`SiO1wCB`z^d z*BXt?;VByPl7HssoXGdZKkO&i82tKjaUa;@3p>w+lHn2zk-5uttr$e- zDKM0n?k!U}?W?tG2{x^cLAj#r8mz6f76qH0cfF{%(1u(<+}wiok3z1364SqdIRL z9A`50BIo)>m*Q~wNCZ3_D)ZbE3mRrGLj;WRb8Gc@Z@9o82Iib|d) z)pu(*m33Ua+2}Pn&P>>wP*rQ}SX8;uXDTVfj87|;6rTUo_m6cla@X>S@4P{k^9JVt zz&*9~6W`!O7%Z9*)y;5grlf4MOfT5*^9lwLw|AWGsu`EYYLRR_bTOl25sO64Tg7&fbDph(Y7Hrmsk4Z-XtXKP~jvA(9iL6%U(%Iz$BzQ(ukL@Vc_-xV>mI0)vX zmWK?KPi@#4$4Zo5auf{d3N4elvAx>36@f$RFlQ6BJhSl{w=kl~@y=Ensel~fGc+P< zL(O^<%4!!q{HmHZUM?$F&TZl$qm|be$FIjDzS4Lu_dR)9X>H?{I0v1ll}<~)y`7n# z5}z5{mxNCdDs%HmWH^-rR5C;giiNXdBVvS+2$+gzYl|qy8@vTwaYBr>YD2n{L2A#S zx|tyiBbdxoM$IA-3y_L zhqboGrbL}v0%9am{$Guh@f{3~ZAfoqv34e6fPL`X16hM&G|q4I5o5uv-_{<%&J*BFR^}IGnT?rQD=-pf2J0q9fQTxHtb8WE(K)dI18ZNSHo2zLWE_*)A zrMA51Y0G}j=8M+_PV_-Hwe4Fa;Q`Nwlef&Gy)%Vmll8}KilOGZwQByZ<)J&hXbNKt z|0T_cp7y>)-AL8BXA8m#w>t50re8V@c21mD9RCR`mYoyvoEEC6TN}Te&KXE=c~85? z-C$x2{>=FJnq-~mfI^2^4tX3r;!MW04_6HWbzSL4K?CYJtI+D-q)uyY3YkH@E%{e+>o&Q01E z>PXhmrni_#RiDL&Myo1gL#mq}{)~l4b0YfE{n9TVtkTbIF{zicf~aP`#`iV)<`w7p z8W*vrF>*e=a_$s-(Z-!E&8+pnp;~rR<{DfPr&@zIu}r*oZu|(?Ctu^aCQ89;pfGum ztHqqyg~_=&W1P!$972;=!6P;%rLZxFcg5TXSHzi1=^pWR^p8|fM(yYy@pkl&Yy(j{ z`bXfvA<_7d^OQJ=8Y}J9KI7ov&fLP-un6`OwR-GRgVn^R;l@aOV+i{(*-hNEj5sfg zjnw@JSLl$JWzn`WWG4OCh~UngLh)e%HbcD7SHlamUMks5(PVrp+uqpWVgQm)X=SPr z_dA!B*+2Zi!AM@pfw7U@kbZ9zB_<)J$JFUt({1}B>T}{-ZGQ?oHLT39q{|tCB#21~ zQ_#7PYJpkr$lJ&6t`;qL`Snj-QiVV6o$k&YJ5bHNF};j?39Lbp_G%MVb3jIRdg;3L za|3Xs;xK)U_{vk#X0i#J1d2xUh0Ey4Mb|sl@mJpJ$Vk=?-_S-nQINTd^UW zr6Bslmdp%XWTPI{couGx@v1~mKny+X~8$YJ>PZQb)o{OrUkyG`py%W9hzJ2A1! z^eQ7J8VzJ;V0LZ{6HL{nrdPohc*8cfU;Qe}4-IKsU>uzTG^}U|JHu7egBJHus_5*q zAh(R$;!b_G_UVT@QSD<#1WC*uG!BjrXMiDkB+gGf>Z^)+5*pr)|C z#`EQwSKQYl>nZr@<1ei-qXF*9_VEe>);Kx}mwEyf>qrl;^kx+XWCwOoh_6{zzZz^_ z=1|FG9_#0gy)rUo@NGl6h3w9;*-<>3-8utScB^pto~-|jMzBTPxpmmOL~CEu(7!U# z?%24P=2c6pg>P|Dw`3Y|X%3jfuW8+@aj12VUI$g1YXTLw{+ncDhg96U%ly(|#r|Ru zGg>*V+{}y2Pekmz-bRUErH*jy-@BVKe&IJd!en}ciW}SCn+Eo_U87H|fP67wXtRl8 z(M7|QRnrUxSZuRK#roRb&}LMXc-m=h3&ah?MX|knjei(uDE7nErhyRDT8iCmz@k_R z7p)%;2A!L}F*E{9Gz^W>!fy_ZLlvZmS8?4qj$_ZS{XG9)Yq>`nV&PaXiV zVpS}10b3Iz2gufzJ3r=?Zml>}azD~?HYuqLPa~P6-WwoNR|h%=KBk`ETpdtV8)>lh zgnX^=yyw{1sJc3Lv}-Wi){ezYfo;dg$TE~V9eu5UW{i)=p;d%UBOzRGHEWFcyGx9} zpW*e+le==PujzCgZS_LPh0^_yS2+dmwiqh2T8PTA0%fL+#xdSd&t?LvGi}y=m5|8n(B?~ z;bUm@7>uO^go$+iZ`h(_Rwak$(i6w>}neViq9fUofYi`ix|p^L@L>%#mD3MM`q z=xfv^nPv2$9J@~63kD?dH7+r;c{g!8grMza8*$a)LKP3#E$0(TJ#~6Gnyd?_hr_sq zow;EuZ)pYrXs4k(f8Ov9ReqzoTGoH_PxnC~m^6`9q%R^Ql#I7jbEpOz^EwD4$Sdad zR*K@EzuUV{GT3ur!IGy_+;!cP zR*5Dpjz3P{1f?VwIGuT`ql+Z_aQiXNiQLBYA9;#|z|MgoSiEX%19C?xs=PYsz{FZc z_sChU&cKDI%84x8ze1|S>~vEevy=F^J65ZRrhE$&q}j&@W=8Iveje66I(;h$yFnPY#f!ht#$ROP z@92vEbK-}mZ$dskznqReU#mJ5LJ67V3+{c|(6OsRtp=>Q_bKa&R=qwaFXFtE9*GDg z^DBT}QIGxrQ8km|R%VQLuN2=^>LI4oJG@dO4Y9TSu2R2?EF(O9x7hnzU)6B}T=T6P zJ}>O zZ0!?2gw)Q7jj$(n-yvVqLbj%y^xv6ev4AEWEs9_BE#J4rLhwC zM65Vmd35(#*eCWZY!M5DYUjmg2g{aDqn2&*rGC+@x|~aa-q?-ykY|0@_zj)ZYy5tn zEbL}!80qyKztxRg-~F}5Lt^D@3Z4_c4wsYza$-SK!G=pXCU+hdC}>z*?IYW7GEs!b zc({fgL)Ux`&-!j>e@(8P`5Mt?CJ=9wv#e_-=pOU!)i1zZWX&ZNlifZxJC$XXcCch+ z%7wGDfXe`MV1$5n8izjX|L$==wEB5mNie(I4e587z`BYwkuvmNbxYC1p`32+K{ez( z7rPBPm#m%Y7nZAB71iy&>egiS3(C}#?1+lwdZFEs#9TWO#tOZicKu3m zmN`7Bxl*iU-ae3+0zj4gu;vjSF+1%-Ku(^`@HG9<-12S(YO>)n;cRr3P`@& z580C^-}NY9RyDDi|3`r>k58OxcTF))8qM7v#74S}b^zyD-!i_Jp+RX9{2%9oX5!b+ z4MSHgMa)XWc|$k7B|$M=5r^m+gQfTyO&|HQrK!8?cvc-)Q6;U8*F;kj?Xh75rL|x( zr#d;C9zD6l$nQ>@Y{mmZHjO#jdmD)Rn5FtmQl;sjQjZRf@H?3Jg2^t+<{?(w%rXawXP?W#w<|W6>TLQtUTqMmqj)6h?Ot-b=jZ=8 zDI+T%w@y!J-G}MbBF@K-V6%sR4)^{i&ZfI@T9z7g!DoBm0PbjY8AQu+YzZ17aq5tH zNgIlke^`HM$}oQnK|aW8nUfhuxl|_(14rYutbLE#ENt0#X?ga>Rl$F%oR zk%lU(A$c2a9pu0Q-hi|)8ynR_pEZiD38cp;m8>>ztd6H;s&^18{+=~3<=kEmzPUuN zL)3HVt5Kdy351gg1;7`?1|v75SHUU0n7$b{t@C+j((qt%@1~veVQbf?XTruyY^)Q% z1o}c8F5636W_9TTne#_$&jX_qhS&R$DZx8Le_OK()G80B?r9-sX$Dn{`ydI=y*~XH zbc40Vd>>6F=}d)_X!l)QRKLth(e`SqHx5mK9qHK=Tu6&8Qk?T~i^P1)V@${)lfjuD z%sF*t`qha-u$r=$*5Gz^Yd0dOmg1wS$Tch~pv z-uOqD@}tG`N8x7u2N=KFu*Iru(lyTSQscpC&!f>7WZ&Z&DY1vrv%_3-Y!57AaB?#J zG0w$uvZKVg#5hy6i*P??-0gv7`b~fQ263?MqZK%sy0A3hY~l$Zb*1WYABdo{XfGb1 zs!q)13Ti?5gr>xdRy1_w`(8k^dR@5khrXr(0y`Rtwu0fx3SZL>Wv(*@he6pt^G|t` ze>TsKiI(M}WsK`X9v#a?$Cu7kVYX^eAKH0I69-%tL#=0;pd6#**y8tyntr;3fYixv zp&xy|Mv72ZrPVnfkR zL+-P-#+h7U?eUxIlELg2x0REZ7G|oAaEeO+)nuJfyNd|PK2Xf^3@x!E4YjTr1)1Wr zEQw-+Ax|7m$RiCmt_@n}Dbg&`DoBi1PEeuuBjc#6tASas2m(-AMdkVBUP4`zZo)=19IZZPJ<+HUP};CvS>Qaxbd(3NQr!K|szTU# zgMRgxv>hX;J+Y9$OzO6Dn4Bc?T_AF>Orm3YVd?0|GoDEysgIU~$mcX8A5wjZ*z~iSwhTp%to=QYhO*<6bNeL_cJUgF= zHPS;;UK$>Sq%P9iUKFA{)Fcf_e$L?Wmfu@6kaSzPVb8F`VEt}gLss@EFR`a^{+Y3f zm@bW#>(2p*?tD#p;mFAiChKJe0i7z|7fIF!dc-r3K!t~9aw_f>-Y=3`sO2lY09_;`lBPrrdrBwg6T7jk@fFkX5!Mtl&iJdZ;4`UnU+vlyHQ$WaP+p&PxX$73i!C2<8Hfdw7F$*R*S^!rNU2G_Iw+k6GSLkk_3(dnbwIqCN?|=4*UJ z4(7P>^qWl6%<%&ZKcFEB~TS zLcI+Z3(i+@xwD`=Ofuo@HoWyDfZ}kKqu@Ed`GcJB@G3{i&FM3bw`aN4fbl*zoo`LV z3{XndRh<_wNfpi>`r%aXilinkR#EIdXs#-@`v&w+$GySkAvLKm>;DsRJxh0D{cD`P zqj1BO=M~2;v2$JQf*Q1OS9lX#q;-2q5B@FJ&TZ9YM&&TbUPE)+n*Tnxv5+yDTFLn` zv#(&4+K}Ep-rN#l_2<;&Pzq;uoZge>EFj{hXlc{Py(e$Tp!$}ek7#c1odCx~s&IwxkaUpE21x%+l z#^qR4LwevXpyekJVSBXe!`_qn#jDl%Ct|fZq$p)OLKkl^10ye58d7Q@Os8r~HfLYG z@}fAwR71lr#k=^c4nB&Z%3ab80YrHJI>Zu^U~+J3xg ze;tg|{*R~fmJo=ns>`6hQ4B2G9G?FCH=5t=#a&H5AHg~5&g|#S zd04k4Ia}-Q{k0Q;UxV+NM}~=2UIA9w0$dhNHPjPeH{4FrxKnpqzT$o{QR$dScGelR+eQFx=|?A^R!yi6=Y;OK1n4eog&rN`1ri9k=2KO*E%X{ls6 z#&%7)Kw1CDJq0-{h@sfxpRw!c0~CBLFEs_x8r~ewi=Hapk2!h>@f>n$3UVd01mm0T(eW8x@flI~XJyU8|j(baMO-%~^ z$q|A!8;8)jZwJ97f8#EsK>+v8ZVD$0Ua(Q(gRJR4AIABbp%?`QG(?%w8DD`a!AM@2M9J z2Slm3amf;p`u>-@i?HGUWhV^q?y&P|wCwZ9<}60|VMw9S_kLvR#kF)L*uGZlW`tYi z&WqjaOO{76D#wK5JA=u|g(s&5&b6)c#i`yT6}z%VGAWd zJ?i4De;aWT&8LgH>JekgCjUPw5lDC>_uRFlssCkpy{vM~%=k`{2qv!>o%KIJEIph) zag4I=*bAWrnTnM4p*0O=E zUtY{97Sx3Cn2RHt3Ky$8j>gR_r*#Eic`i|TzRhfL=mb9=OpB;@r-$!_30bb;&?AYa z%J{=opvzkl@7os0Vu=)1&LkDFmnnEfYRmfcXaGY~_= zG)eWC0S=%-k;=vm6-15Cj#eImsc-4zZdv6}p2b0e;W_bqbj z!Ec{XsNbx=bFu~m0^4LBmssg%(~H#`4q-y&Fl-&BZ8`gbzhYj}#4){t1KR%K+(|{9 z`NZYU9Tun1DP}1k%9Dy>y7P4ObVqT)I~%WNya0B#9zTvPNqj(i-&3goyV%a7wEfCf|wNOwhSnt?W8`a%>Ob)IQ8gr_Yae%RR;c7q2m&D})$Y*p(uhx533w5lWGJFyiG z$n0k}V6Qg)x0{&0a<8Uet8Y&z>f~trU*W2bIKBZ{|6Mh@5qyXU)=lJ{^H5HSGW4Cc zQ1W1okX=%~f^KcrfA!8TQl zty!9V9vv$T9oPO(bQJxV>M!GcCgyuq!)R$?uSuWlM&mw+aH+%D5puSNoG(Mpdt&gW z?KC&)ielGP-QG;|#R^i@6`j$r^JqOjZeHtJbU5$Bu=AI!|C*>b8^;S$Ck^X7lyF6p z_IDmeo?l5fHbL0r3WJn1Noc<&nFSpI(#1+=_MSR}JJ)i%C+a*XejQIAcrz!VtA%vy z_&(vvM>jEWV!o)eLNPk~vckZRuF44zgVR;t#IJO=kEVswLPYi#PxC{6<>t}LVR+1( zqS&->ReSt6R8?X}5KZaziuS6FX0I_4)t-Y#^LB;HcE#_?RGD4gM%rn?C#Ib=jlO`w z$TBo3FpNd8W?>eGdMSaTy<3EIFy%j(*oyi zRyg#V8@uS}tPLlZiprtnqiUgqGgGz7{937{{0F$%{IDw<*@iaRtUCFd*<9Hxo4+K! znN52_xj^f#oT|X_7z_9JTgR&otICl^m<=C`WW-6cs7+HpW@o8&jhoPBrAz_Z*&z82 zrZDRHq0MXikz++}Jf`E=&!Sa{V#**R1nm-s5W^|P!4W8NOK>rl7ik7BYmHR3hJ7dQ z)^vL4$*CdiRG55TOz*}jLO6GYu-X#2X8BE?pj-7h!R6{cA?Nj)s?9aN6QA!4joVUv z^iD5N6WWz+9$6CAX>Q3!0Kl6}t!M&-sy5B(*R+l&F?m{TbIo)fV^~Z5SgWUL?3M7A zg!qR$)@Zu7+ipw)K#a~Kup1C72|Kr|@NP*btE9;lsue#fa5(n_J8%NuoIxeZbm{Nf zcPx)Ow`q2SZrtL6{E`kI#QMF2p5n<%-FZZUQKWt6uW_CyQh(X!EWkcz`~-%^Vnv_6 z+A_B@M89F$o8f{HbdSEoAq z1QY4p*a_zE_kxMtxv~9;6E{+~b0m<_IU&3+-KRlVJn+hk$sLjDuc5jz{T_j|mcB+4 z#cQ(u-@kA6Mm_h*+q7*h^DaY4{-zsIR_4OUDeon6!GeNX0J1{f{@e%GO*j=ABNz*2 z!o%u1%z{}sOv%iq*cFTPF#i87(vcq9<6W<*IH`O#$f_aRHOoG;Q4^9`n!`V-KfTK$=(KeK#;tLym|@+~&^WX6IXb{`aR^?f+h3swy8 z8{ZW^K1*Br5`&0CPfXQ37F?!sq@SO~hS*v(N)2jyzlgr{N_y=-`>;QakElsaq}8;> z-9SkC!%tb=jwGGTAj)QK7qFY1;$q!uv3Q=Xtsv+$l~cK7lcZCLEDCzTb_2o7xJW5) zt864aqNYQLw3}0ahX{>0&sNZKgc?aIyinFZWV_fXpR+aV|BamOY*(0d--s6q{gpQj zmM#MY+nUPx$<;YYd9dPHU7KQ*FMgmeYfY+{Ajb7-wxveNB;~LAg00kd^TWT3Np3qsuf|FuHL;2dAFweVHKSrlw2-_38^m4sM zCkfcb^a-UTdY|IPPu1LV3~G&!rJEm;WM$rXUelZbyH}1Kw9W#q$A?OfMxB+ha2P3* zRUug^mC;-Xu&sy^plO@F&YPXB5(z({{k;)>!zf{bHtU~6QkbvdFsq)VI2nAQy6Iit zEh}*I^p%qB=O#Ota?Z%M%}C5CE${MDQIw(;%Y%i$~HE6Ms_H;G(#N!DLXCKxB?-E;U8x&u!?_#Y9| z)IsUWwu`=NRPS;MXzJbhqpbfO(7%SX?O_jTMmN&u+zhoyBi#Dt5~$=3CWH=wa!yVz z3tYo<8s%Mk|MSpeVx z#Lz}lV~juIoHJ-zq`lDq&3c3O#g*EJPIYd`4?Aa%mO93ntj@-6O*D0kMN7;%Y8s}@ zDsRY_KBST?!BZzYoo2{EQln}IdYn7zJ{EP1sADl zP19Uh8$q)xHoz!SzL-7&g*>`fg2Tph?49zS3%swW;Rq_TPuhpPH+EHgC;g6>mQv~*M*s&qmOyW>$6+_X*xO# ze)=TtNn|*))audRi1di;NG+POZj#ejEYTuj{*=oV(4SiUnWjIpe1jWHg{9wx{AT?# zyGrmdF0TZ?eb6gG%RjnGu=WE=&<@s3Lf`Rx-<-LH<|YtjrDTz(WVDOrd#Q7)#Z zA}^;G(z1r7`x`*tQ#Y6XieK!)k{Qp{8OlSCr>W80{;X#9VOFEPBuc>Tzp5 z(P?>Od(&Fk^gT6U%nT3-h@WaRjiwfmjhW+0O|A#nTw`N>Pen^dX8oW1!_7`@tSwii z(SNwNv;;qVmdj&dfws-0gl$O0)W59%zPGvwbK9>x!raZ)c;WJ_b5sr3qX2$YJCR(;VviXB(-uCeHJH^aJ zT0h`GY^^!Rl8r5_keJt%cu^Xr{Qg!JpJSS~%*#ux>m$y4nEnjbc47!GJ92)tDLVaa zEbBRMcjoD}Nhc+y%`kO_nM;?5q2oyLYe&HnG`8;E%bszKkLI-mowdQTR%_INgU9f$ z*CS<{qIqw#_n)uLcIZ8Awz+S}{nll}sdi>>vzhv{F{q>a4Sz1J7d28(nOT>4b++_2 zJo#ab(>LUN6-?~PwHA#qmJVaGE|Q95(~G%PL1mk?1A%29sM)0Jlr+Ri@iEi|HdF%2 zAe%sHH0}*kCv!gf_4Bb_HPOLbguSFh{)^tVb$E!%nl#3MCyhrh0GCK5s&1i_ts6Twf+sdeOFE|_=l6-Ds3h($R9fLq zd13-J*FE$L)c&NEmA>ScYSmk(snryb%>MbdwxCST>bXy&GL8J$q@9>OntYx^f%G1u z)Vo_R^(IXRQ&P9?;(i>K$@Yrx9hr_<&S%=yr?c^aA?LH?&1QD!EDUkJr1q7HS6gA? zt3JM)_h*JfiyzCNM0b19B{;pk=f?E+N!i>b_BEYK0IJS^Qq<`iBGcbwH@?yE6v+if z>gt3xPUCj|)Ns3n8>Yp%<4qGsRy~HOte^G=zrE2w6{CKYj2J@jm-$=2N^CpqOW3)) zLcP#g5ay@z==xPMdVsA%0=D7kgb}}6;-dOh@7n;PYAkf_h2ugT&aLXkZ3_l49CEQ0 z6gxvx(GmJnBXIyUmZ_` zPI@ZGgq?%kc;=IkzpBTci*FjdAgf$@W_xvFkST zWTr})c`EywnI~hlNoJlpF!NOKBVGlN-6zaEb#(4$rc;@AGPa;(2I^?SSuIoAYSAE6 zO0Ac!qNO2;doJZ`l$6138?(7Cq$-_dUIS^n9S~$_SIYoNLlv_DZ^7Z56pf}%nMHRV z4V?!vA3F=w+10<(f8(0vIIdlF@4v%M5!4O)#OLvIVQ&1|;1jvQieDbZsESDT?lY@F#)_(>GvzI(9>#xHl2699C(tE@uwa{e2zuSG)y0@8) zj?Q-O53I(8J>kNz+4+G}P{uJ#ds8!clmsB;eaf)CX(4}=m6qh+@N1+TCHCY${qFfX z_Rnjt?s@88T?#LtL;vb>Do)Lhdc8og%t?VcAs*oZN(eT9fi8dr%K|=sO(?lfGm0!= zJAkLh$(O1rp=O*v1ECQIwijH%If-)Wyu7{O0^FifCpOCZ#Lfw)Oazb$5g%2(0TqLP+pYKY^2(o1emxzq<7vZz#{DjQTn!8*Vp)WBGGc^u<7(Q zZpPy_U3a^gB)s%obzC*yB9fx{_Lp!v1w0VDQ|IbpO+W7vFRtm|`Z;4g?BtDg;rzM1*n>M+>_o>t90y zK+Iv-1*bSV(@gpAe@zKGM5q{Wh8!j z&~e_3{Cd-JCs63Df7z@5Md;Zr?=hJl4~T^uwvUDziUp*HT4e|BpYAl<8#}A`zi@lQz&DMsDwzDGI3p3MKdrig z*5%F1&XdNyVe{xbUca5+Z$5Vi`^uNy$$~8WlJ^_T((xB_f zu=kKvfAgVQ`3d&M`%aq1VYkPF@;2;fOoOwyB$uiq zN_}Ijw|_!^9ql_M27jOa!)}HcR@1o2VA6;%s!0n4z*oZwbB>$E%r`oYp{S(t6g zN5Z0^dybR^jN#y~8IcZSQ=xy`iG{fmzDeQf>+%?8jY1uLl!u+=GHR_eNX`RK3A;*a zY(bMraUFOl%%q(<1SU=x{4gmhO2HXhEVY`3=s316C2sq zU>xZuH;C#?!7u)WzH8{gEf^g^q<>+8CI!rtG=YN{PlFE~W0PO^sf5eJEZ#$64ew85 z?Hl*TD(W>qTD38G-x4#2?7)V6#25W6_sQ;dl7 zCUeE_D5whd=PiukHJSVHijjDX#Jit?hT!v#4LQ5A{wIjWI_f>w{8qH=?a1c$*{?@h z-$$PCoR$Djl#pyvk)T((^HTD@0PSmR!bVU=iJ?RFY#4~MIf=@w@iMfau6jORl-LuvdI0bw z@GOf@q-sahcTyXbh^BtOj3QO1YICE$aAzoa=VH^}v-8F-d#UDvq9DozyFP5))7M$u znm#CRlhxl$-YKN+T0MiWv!4uj-=}~|Q&biYl`ovS(^luQ(h`ckM(?eaSDMNPo#(^8 z&`VkW<1d*h+t>6v`Uv;pm_4=9RgTy+L2pL<9O&^wn5}(Hx8e*rU4^`v_eC~;a|vSh z>zeEAB)86pb;?>@#rrbT5E2gjhj+7`=a9pMtfGIY?2}O5uIi?p^LXmdWS@DJZ3MhS zKev54uZ-uz_g`!p^LuWs5vphXmr^?oG)@XOa@$y=+E>k~&lKQPGcU0|-`xMgUd)|_ zVmeUxL02GhMx7iAcyJdm9}QgiA9YH2dv*M8Svkz|@j?i8gQL7?X`x~KPe)-Mw!hg9 znb{gLS?6_iHdMco&vwv$A?G6v;^91MNTv7FjY*U40zPfv!E$*unKM-=>Og<|H3=S&!>@>Pwq`h5bi8}8rFJfsl#+qj= zj5zzv2qw`KW8>~?{DRh~_B}PZa7IX~z((>@1uL{V;+x3cYB%5w@CO^KMG2!%squB% zbK%%t+14NfYzKeh2Lv_5hG>WpB#Blam|Y!0su>9GY%PjG$!g9t_V>o;9c!mjP@Ba1 zt3C);t&blZOne@=dYF>1p&{o!)h3u-6JqS+T9yOZC{IVMTFJGsZ)Usc1`KF!W6jNSx>RQxQ=x1SH_)P}V zk?sWZVsO_7-M~kr+_q28h;K z|F67&P``1$r}Ab%$3A-DYE4lj@qTXnE~hQC1G!sJipbZjSJ(J@S1|lSs^D=*-^JA! zErae0c&Hm#-sbgiO4`THXX)pmy>$IXqjwT`zn^1_jA-<0CkuPO_P%*QLjDbK)pv!2^wXQBFpzc~M`Nc~NUy z)TlqDU)(>B6*-O`=4qwVYNr2MS*SWQjqXCRx+JU(hY4JlOIKG;Eb-m)6*;K~&r*c~ z>eChG#I#zve)R;3v5h##Aq6~$V^FI|u4$uNf1LLtoU3UWPWf!%=IV+Rmn5oQm~$1f zPVA9f6s|f51<&NMy7JD0TqhaBToa_LZ47hq+C*}e8kf(!JORh3Ncmy&{=~lQys~E$ zi7kV>$b*k2{)8g-HHV;PXWpWqlG1g^PDXa9i}k*y3pGTzyWL(Gth%Dack?lL%_*yU ziA~jom78U>ylU9-Q&)2ytE->ff&GuhSYPByKmxn`oItz#Ay@yWJnW1`U*qZ*5$Rm; zF0_?a{#G^v)@r}+NlMORJ6tB_ZjYgF{bxUn4Z(h8dLtSi&3Pz0`JNomxGw%rcOkEz zW7MGnx$%EvW@%>1kMQ)H1ZSx# zk%sP(QllL$rJJgbIVJ36UVTA(nGNZuHfgj@o@rAa_eS~$2Ptj1g@TdNWTeQtZeVu_ zQYlv7{)XT5Z_%R|>i`-yY_(d#&UW)^683Lp1msL|Oo!j;MHwlSaj%1pNTXC^JA4F> zNc=FiKk8E*>16|5vJfMW!1z0^T9`+_IVx)EZ0PfJF$twk&Sd@PAFNViHKQd~8^*@0 zx!=_uC}IeZ%joojLo`0;p`l-hh4VszBhD!^qsY^us7F9t{|M=aDg+EoT*;M=$Z z4d?T$dM_G(>XjP*2bu9d)EocU42~41PR|dSha%R?xG$M~JCM?fbDq|nZ+@$7 zQnqHwYBH3)LJ2dSK`0iL6NygE@)rjn+oUFGldQ|>9 zZ7Wkg&$jXl=8lTFXLUUkaBBw*{^Llt6{K#*_L$F3DarcxK1dCH3U^!bjSH(FYW7_R z3j8@UVf@w1cqlpUgG>cKcJb2`^R4^OW867iEjik>$2eXT zgHuDa^1rrL*Y?z1(E`ShP2%DrP8mOrPuB2ck{YU1$C>$_X_pF*Fg2S*h4(eC8>lck z5q*v4O}1tT5Dd2@Mr+3ikwFR3?R(ws*Zv#PkbNI8Rqzovz}kZ)5(H@~r`=Np0~lGD zfOXZy~&>xP^51AF|Q97Ram*kNFh4@Bzb53YXO=)RycW7@`{qq8~J1X-Fe%M zk^9&12LY>UB=HrtN!Cew-Y^CK11n(G`m`Y&SEdXX!PSkR^L};Z3>N(7T$0vmvYpm* z!T-YE&+4__$6^b$xJN55D(1nt-i!D}U5mK2uKB+$;`FK>_dC#E8wSx>!n>F5c&g{J zeK~!j_p&|B&Zv+Ntts(H%qUo8{vcNFuHqW;rN)r@fu13Ce-A_IFVblP!E<#(+&H>8 zKidFi{Zc0`F^Z;|r5oPY=|$98-a$u(n9R>yY4A1f2Fm_T&y*nb$5UTfQ4EPVI>n^PVRBlO0?8URL|6LK02irrYJ2K_)W5B)2M-OPgzju++u zzF}w=!|=<3uQLorT{={8;X%1}L9B6Z@fMKpoI{zQ?Hr0FGP3|`^*a_5GBwUk|8;>7 zW46i6jDH)7ot4*F7NmtxZhrkksfamZNk77iF+8JT>OD;LMmsYHeE>_T#!_>dkh;Sl zrVqG5+Lpdst|v~2?$VXu9VTA->G=#hNF%07CIG)qznxenPrt_-oLT{0=IdeNeVu;i z<$o9b4*dT|zgN27|XZ5HlV`)s7 z9TR5Zvi@eF^7=v6k104@=P@ZW{r=Q=J~gY*|K3WBkgL5Sc#ULwsc9lQ>;MY#VJXJTKnpR_D!y^7BfhyD+F7shYM5$f zeoqNsI`^r2!tg39D;a<+JGxu;Lm?;27#fA)#D}@@?SYCv>hwwK61P5vBkSLvD1l}J z#VnR!#989SS#08bx}S+7sJoJwozou`ss#m0RNc3ytvtF&&o^ls$>|Jzk`mYItc2g0 z6cxsrDV|$W&@zg#J{|8NGguGD?mjLiK_%~3RpbwjqutIaUHY!`89y?!dVZMWrdlR_ z#Ortu(>gY?e*6!Sou>xfUe}jOolJoVQ#02t9|k>qq1U)HnDrm70HNzjFez|m0CZm$ zI+In{^8Bt99~zV?(!94-ZUyVU#^;%rME9^(l3KHMOdr96VlWl6RV&uvm(tgz1iI3gd}b&mzV?c!KexN0B&(wn4LPkYXU`HL#^KVZVr{AZ;WY zH>%i{{n9Y)w=<^*^Tq;dCl_%(idL?8j7^sBriB3Qj@>-g-H2D?V$KhWb(ljf&q`d0 zmFNAiVlwYYm2+d3C+JkQ`-k97O|Ga(5;>B$p_<>(=>~F%I0Ju>_0K0f;zWN?Sd%;s z?<~BE3Uy6!mAn?swprn-M^%=qlCEko6Ce{tK*@{WpkAsT6q?Ep_Bl*|v(Q%A!uB;V zR_PT2r+)|YPJEFA{&!y`L`#c}$DX^P60P73BgYP-O+*Vd8z^xEBaSzW96OADXXDsm zWG^5mSJ3Jod30LL7%Tb9pk2v-BiEA8j6MSu&$o&^$>fa<2(i9rk0#+gEVa{hUe&1lH+4v^R1iRP<>^1=j@=~-M zk_1V|r}(su2Wg4*X|E4ng?#M^o%z5?X33I_flQDszbwdMyzLWeZJ^U3AMesw{TlG6 z8o0ziREzJKba`T z(>@`jxa|{k+QxOsi-g>sxPu>+sVz}x0r&Fr5K-C_i*bEmTrpBor1r#YTpxX&{j@nT z2Um0A4*o)tMfOLBXw3;7i?t`7#y;VC1hY5a_}Dy-TJoOHz7=$Gk_pMIG9APXR?4VgbK*#fl6eY1 zWV)&~iy0-eq(}Gx3ctGtV3+_m^#BwL5bpsPB*29NI7Llc7_NmBPNQny^eo59A^tAJzj5{IUn2zW}Ko0IBd~ z<_Msg?SROcE37ZEZLehFUjm$KXCK`qOe|i&lZG?yl%l!C9IkTD=>Zs_*q8PI3>V<69)JS{hzOuAGg`i?9>J1M$?1R)EYP&-cE3+2L+VT2?Y2%jbR2(+%sHSPZ_4 z91a0<3Tgco;#76aD@-Qj>O7b!`Lo=)K9()KIRWB7Lj2?9^4)STP6nZ@&0u49`X=nY zVpN`$LJ+ui-jgDRG5C;~rEFXpjZssc55R3om8(|aYWNZbo@ji9z9(Btb2n$|-(n24 zP}pXN6TX~GsTa3Yarg6lTa`|sd~QC{;?3+jpd0W#0shegpf{;9f9U~OqBNd!0e3*< z3dLC315hczuLMwOkCX2X&liyICeK%-rk(BihRAn`=PQ=)9QoX`juv2&4bF1cp}%jz zN+=#)#4;UdaF=O!kr|`72NBmi3z1x5{66`i4vU%bXNTffqq+W%{y{54b%v>m+TW>MQ znJGO0QsB*;*cD&CV?3Xb)?W^uy++0Z21j# zsfYa!1qgeQ#a4_=UyD7}!(MK&z>JH@dx?jAmc>?#Oos_|()1LQ_YD?XeuKTl z!@k7B9&WJ}Bl9ytK_g~tWT4_$#37EeP^hWn4|u$YUD_C%oM4?^VAj81H`HV@!ONt; z%jBug4S9r@In-pLdB&{pmJ7)GH|Ou;@?|ay;PDOr-cN;6e8c%C#9nBixC}?;FN6mw zmYUu4FbZsU(>IbF3CTl51rlWJemmo_b7VuU-$)s_wL*KICO8tI{ZcbYDq+Ht2_=%b zf@~;5Pte%{InGS4srI(1%5UgUWx`4J%RINC|EP^)GNBlm5ro=$X|s~qyUV*toftcQ zCT%EY8uCv{BDr*?T0>p%O%qPq4|r)$anlx!TM3OgMdsGm6E>w5Dv^HqeDbG$L9B8L zAQ4!pv6s1b#FPSJVnmiRZ0fVTa`w07 zlpn;{0fww!_OWCwfUMk&VlSd#XT>H`;DmaqI5=f9DRo9k>J)Auy(|PHt&WXCB;I*RwK2Un8ii(=qLfN9vzk{hLe1AALE6=J5@&cxlT+qVz%}L} zG2Ro!&5C=gPs$-nf>I<%%3ETk9PjXuZXDQb>@n`r;NtlnROxDebu^3(4)03+F^}#p{}vqx@xg= zW?f;hw00?-(?<@fiTqFX< zd@_}@K3#qbJ#3ndQR>F{f_qEEK%}}pU33-U0fkqZ-Wacax&%5IoBm&9^-POSVPYK5 z4mzGkn6myi1+@J-*1zqf;#~FF&VALxpE2<_rpMe&a@5XtWCkeqM!J&nH7+N8rYkiP zNn3p*PjKdJ?e55(QMHF&t=`pj;66-rj`_W_#DP8OYvzQvz8Vbw%N;a)X7IBA z6R58NIkUY9WjR2`wfuB*Un4gng_89zQGjZD7UzS^DT|5%q+Q1iUEas!y{yaIBJa5-DQAh7Rguj~ephmhz@KvF*qq|S?3!Z2 zDYo_iy8DvxE1hKG8}KiEUST?v-G_Kt=9bVtF)ee8anS$2G}MuYWln(v6=?y|Y%|w} zT7Qpa?sCDqmpK!T{1EKS0?F;!ypULZ@PC9c&S1HT2iiNwp z74lYgc}L58M3;A&c2UFd+Jqmo2`^E?IX2<1;Mu5)^kvNg`1lv5rt+JX{JRNWMSo`%n-2RczQ$Z^g(|6DrcHMwPe&73IFhavaZUJChk@key~P@z?ekvdC`|?`y)T zScd|X$n`dH#mJ-w63ub8dDy?O*z)%pbdE*#2Av5fEe*P%N@uasNhZDlZ?@@=_Ih2F zO<#Ufx|t@N(jDQI?yuO}AtlAgoJ^?gbyL;dtMIzhu-W?6I29ojs9AA+jkiJz>@ZX} zj*X#kVHpb)F3fyvEMH4Sz-Y21ZkUy)YZ+J1OkO?9o8>EmwSt)i2ADaYstiswFnOHF zcO7{Qt!^xj4e{pX0h*WH{5WH2rc`ESuV)3oTzYlmv9W_{oHNV`%YHSSMYCL(=-+y} z(%OBxVpK_dkyN0BgN~V;96%6K?1)s(s*N2?)wIy0PiyL0G!*6p(6BMf7}2K2(A*15 z(<>gZ;Pf3-WvAj)^*HwRHU5?DE0yszzJ$ZA5D!G)=~1c7lO|A&-66jE5xnHS$m>97 z?Ka&{e$&7UOgIf3QGl}f9J4iGD@NvGi@n&x9&WMaH`oymdw_@iti@K0Oc|lJd(6`G zGTiev)XO^vZ^NFl$=bH|W9QEM;E@pRT-xTc+!q$2;O986bNLw_;$Sfq(vc~8gW2uq?>C!fjj$#pO4(UoL z%l^+MDvvqY@}hE3?yK&|`oGvo+LpgL31&daNU;c`Ot8uwX@9vf94Yip-Z*m;eN{+S z?5q9AaKqj_FCa_QUWPX?n+Bngp?)k&L#yPFgSSz90is#*>bxlPEMD^1?X}e`n~nU2 zAorPY2y(v73Znuan3h(I%zTTz)g$N87F&LUeZGf%u!sE;7j-F-Vq}6Adz**-uYa2= z%5Sg__ORbkfEwdYi>(-$Jd3^1!+z3Y%WtsXF@&JxzxJ@tu-J-`S!+Tat<`4so^7$^ zH`u@SurKnkhgxjK$Sknfi#_ZgT5S0Z_C+4{;U4xI*s!7Aijj#}?A;#r7ymN#mfv6> z?qPQ-K=r=QVk<^w0HL-4r_q3<*#RK)Zy`I5cmq?PB{og@O`3l(;ZWmlFU^QeQ!z46 znNa63ehl^{7F&LUeYXh*`%DjefW=mf%ylNzS;mjS9%HfPH`r&IaIlAY*e`B3)KH8} zl|fTQ7HNQwF_E2GuS351sUeR1Cb5BDVjC17;?$eIJYqB+hq5BmX&Ex*C$UI*b6 zWub?CqQzE>%ws0hS;mj4$aIS>zrkK;!omKLhn??Mgn-OdCe+!=kHJ3FV#{x^e`LbJ z9^zrQVH8M%fq=|0Ce-QR$6){S6H{;b4YrQHOvztSfa=|Bu@xi3Ym};YxuGQ+$lq9O z`3?3fCY-z%dD!T(D{sZf=l}%lSswPK7F&LUy~x8p%flXMu@xgDD->YQ_OOq%*zz0f zvpnqK9`*(d@sPJ-WRA1g^&a*|ADep1Z?JVTVCwyM1*qN&Ew*B0zG4X2!LU%B=Oc{> z)PX!A{>n|vBjQFA4jFFq5}V*ACL%s=vD02rF0|P4o1)z2VNda}3oN!`WUjW@J3Q=B z7F&LUJ;lTJd)V!mtbq)Qk@-HMwjw1O&ZBH%EnZ@;?J!i4-z3)8ORPfyqRRC)F~!K} zqzE!}c-X(N*zy}}ody}2{>;NZ&SEP@=C>AmlZSn-#g^Y-|IEXVde~pF8KEMIk-3ae zTam5WES%fzl~jCkm$z2c9N*=gNrf^jd=|H%1Q*rPc~8OR^ZVo^9}fwVGy$1H-1eAY zxxks-h@F==Y=4NRh@G9-o*O$^FRUG&*glkp zq_ID-*R$mycAjjb?^g5^tb2#tM>F+>E0-7H_N5NRI0-lX#mQv8*d{|->HyoA4?3|L zEVm@wR_PvP$IG~Ig^E#^hUkoicm1Rw=OMmJ`L5?{=KF*%_kx0)<>wXT+{^b{KHs?o zIVF5!`Of9Lf^Q*T#rXv}HH4qXHf+FEy#J1uvL6d09#4eq0KXs^@n&dCe#M z2Yl6hDZZcb{gUr2;$BJkKBO^{?~lM*_@cm{p0Gyb>vKIO~3ups9!@_37MeYk%Q z&Uo+(i8lg&8DACdlleWQ4tntYgYaXB_b%`g@lWCViGE41l6Y6*u9u%QA0qABaQ}+$ z1pG&-?9^il_;dK$@rULy)7E+aa{I`YmtSB2ef4**!hXh6*MGpkL3{g(2G{Mg?-0Ka z*nayL53Q>^0N1eLbtCHP4m_x?uB7hZk#%*4lnUk0QHSw&blu@c)Ro~FbL3HVb>Ax= zd-OO39#i*y{qXMx_UG7&${$u8XWeym$KyC*d?0w@giy6$6ZPk$u>RIX>Q0^%HLjY; z{G4)1U0tp5>d&clbw8?`avHCe)lId)GtWA^?i@;U=(%-u=hdBGS2wNh(4W-RT`>K^ z8PMw*zMJ^&;(M6yNxn9|SNQ(Hx0A0g^gH~Df}BVAUc9^@=in>pzkGM|Edq7`->i#h zYrYEHKb%Q=e6#r$13O?AeS&^=4)F&N{xa}eN#|YsC-7a$cO~J!=NkmqGKufh8N}f` z;o^dvefgbA8h7!%%vVdi8gTx?r~Z2u@duF4n^za)EFkR{i9djNAL8E*{+L)n&Lw=N zt#ilrp?$~p-D@oW3j6gRz>jIzv4i&+yRU#l{A2giZ?Av*%U3*f>;d{6raxnckI>%( z4;nkRhLx${+r`Uq}4IOpBsA0oK z4IedXgpD)mz=K4&(ou&FSvYPk?MInP`StUu{EzT^JztV<5#N)1Yxyqadx!56zFfv{ z5#P(W_keH8yU+jrFZbJ{_UR4I>*dYwJA$0U7C_UqG#{rHI&JnFe*Zrnmy^C;>cDQNOFZ%TYOq&`I)63IO6WuLv3sW zK@rbJ)2d7Cg(kKxjwO0(_oLr05tt0g>*b~r>BXZPS+28$3XI#x9J*BF1L->&QE}x~ z`|-{qR?O6q`FCft2*DSTZtQS-9Mk$+9lgYdA^sLPx%6I}cZK$uNuC}Vc0gF_tALsUB^P_^vJ|ueM>(eiBX;F`1D5MLx(gI6*0e@qGqk94G zFhEEABj-NvL1$!{co2VB*m?_-#vL#Paqekh((D4JpsfEv3#+v-1!euWT3E4#DJbi| z!NR6mn1ZtYi!7|f!W4uZ6AKG#JCR(fAkKd+tk%L5g#NdMG3*sjLEQhau&EZNpsYX7 z!WLSXg0lXP-Zk}QS{1H>vi>(LY?g&7DC=*xFs2d3Q&85w)WYg5OhM@XTUfJ&DJbiA zEG%Gp&{73u{nuL964*1+Q&84F-NM8+0#i`de~N{5SeSyc{wfO_ZE2+-^#3hvhmEHo z?tfTVk#-Wak%^amNA>0M{ZfI`%~G^*R^-^tM(l`i<+a7v472wK!-!bj`y0U*NP-~u z{>IZLkrjn5R;j_loJ&{y!M)@E%)~cJU1V%BL$n5V)_!>2-WCMmR0O{aG+hL#;IVk!yXPU+_33xGofl1B%hieX z>0R9K4ySIdAeHohm(avd-MU2X>=tR|FDRk0d9!z#1djdxAL8BwKFaFe|DUXc^$AE6 zip!`$W21uL5(w%HOyC)rAgx+)r=?n~Udxr4ii$cg3CZ+vkXG%rtySCFUc1~%TMe7V z0Fr>Hpsg0Qt!TA<;)sF^i`)F)pL1rCu-M!Cy1&=`^J4OxeLvsxJ>T5}E%(XAmbI?<+nR-CvfhKys0w|cIbuL+S|!@xRqt_}p_n(9PO>kGg982ZhcGw( zLr;=6Hx03PlRGx$_^xyI2#*hfd|mKi8jCn&YqAAu|#Q0nts z`r7YABWSCMjii@ZXw_n%Ri>=^JG3s{BA|s*2ZVvR{x&mwyOPWKTM~y7yUZ@2T|6LT zUz_&UsJ&jXSw0ujiDx>Jr*I)fng5(h|GkYW=?{{6LmBrnyNq_lF;rsmo|xAM@R|94 zw@?1f{v?=8Bqf6sFbc%1Fux4+bX&gcB@b$rMsnpI=7lzVXra6JqU1^z+J+bvqVRKU zjQ4ZL4NsJX+KRFzp)tFXEBBgAS`sF??ehW2A2rDlRQr}KZ(|%WKr@N#lh5^@!J(SL zzq5a3jipaVOTJNe*tMws(1`kc=CMnZTP8B>{F@0i9kxAHS>HEhZC6>gt(x>+X$mK8 z&v;n=f4gaV^cbu#ORy73LFD3J=3QwKclKG|2tqDLVs>AB=e6%fpM5)4@@{m^+h`^0 z5dUZGhRD@><-msU;-k%0Ive$b*t7Hga8(cg35rIf9!!Hg6qz_T)n3uyt##|4pZ`Wz zmg&L#gX;}I3()XJ=_}c)Ag{zMKfntTIbTI+tJ{{m$lh7Db#^qBo?kE7vYi{D|=$G2oLt=OK}NTSgs z8r@y!G9~(vP4vs9s3O>>(C-;P!3XR<3!e-4odLV-zi!CO;9B6Dh}DJN#1tU2VCU{o zT$*YVhk*?Wzd@h8G4nWmsWCSmjChj-NWYgBAjJqwz2D~La=)cnoBX%-3aZjPBMh}4 zFknn$s4fc{{Xj-jkkMp@N{_rzB4ovv7#Oio?PwUgUB=DW`;b09jBp}E(0CB>rpLpn z*Gl4-Me2UBnj+Sene_@6MLd4KGa(zcEQ|+pTmF%FH#7I zag>rCW|J1j2ic@0^GzJUXZx;2%g+e}YN$UHA0U-sebBz>7G=xFw724*)}5-pYS*F- zO4pMnT1XR>HZ9=*4Xr0Mw4R9On(gsJ0nGkLplMS(XVdnu)39ANpe5A+0B^H&s=Rv%}TOtd=*^;pLd~DW-k{+F@KhtH#U>N61uoWHC z3dkO%K}5dv+Ul7U!Q535MT#T!aUyFYbq`B#xly3KjjD}uY#lV{Xe!7z7b`7Ie=-f` z-2?;J{lt4ESeCC(922SgwfJ$3{lKDp!XJ?kVroR1L|ezF75*$>|o59V`8~`zJ3}XRG?>lh^i2UW$+)13QTwDoU%< z^hN~$$l;bDo0@zzap6XSV#?7d6kVD7zl z$>;w|yCiYhKPgSM%?Y6g*U)g`drWB^OLfn{n-Bqnq5x!Zif<|wp zK4Dfca*tu}wt47V45!{Giq!k@VAz`$_cu-akj|#pXlQ>zeCr+ew?Q7Qx2u-;zFtV_yh8#ZX!*gRMzKSGKT9G>fpr>+i^Vr~!}H>t^BtfWk>x}8Q8XOAI`ZXBf1$NzCY&6iCY zVZZ2tKc7#bT9nv^0*QXfn_cRxC!*0?sJjYieWKr04dWJu@Wd}cKF7GO8kbUl)2x{b zdkZ6Y#-;SvY5s(!>NapPi>@Hk(&Q5ut8I7MDknN^0|K?r!ZVX=NAznuORo7zV%ehe zE{b{!b$x+}!F)b51H85DxP`i@lh%A{+n0Ps>DQXlcg2S=dWnGzb-yqp+hpd~I~1iT z{_l9+p`&&QEoz`kW(kcYWA_p|&XlrUMwA~jixPswHqEJbhd%x{Oc_qor+5mZ+R*fR z{1Etr$QmBEP#>rHuO`o(+Fw!cTl)B?=CiKrmDNjq)#lR2X?}<(P5xQ?P3*>bcJf<^ zPpvW&D+2+K80!+)MKuR`_NGFE0DoVtc4?N=bT2vnwc$>je85oK`}0A^TiTRu^%2m# zh)xCJ7MWW>S)}SqFyTFexENhsZ2JsrNLDBnsl{1j|4Q-xZ9YvFQ z{2Jz31QxBX?*sBhL=hwPV%n$h&t70xgNKkv8Dg~?3g=P2{T2JH#`q9p%r~{_Ayw}* zpG;N_So0NRHu}`1$VJ^Uhsp*#_N|D!K$A#ax~Lf~7bisP-@YC^){X|p=2sUO(1+$a zf9C=js9=1$UNPDyZ5obV#!A<5aAk{lINp+KRWYkooV#-^*>jQ1 zO~SWjYE);h`2T6tk|i3@=8d=Zck7=8{Xv!XxjDw})&a3`lWGb97Ay~Z0tAx|fv2p+ zB~%0hwxA$7K7}9G$ibiUtAq69E8jtH%}MluEOFF#RQ)_@q55#bG&Z(x{b-y~^5oHy z?qIhb)W}I~H`?E%S45~%*I&E6-bdOueG3cVPz`$1e-d4olcw)0Eh|Q6AttT59>t$O zIB3h$w@Fz%hmH3P;CNSq6WMLHfj>XVk@HRE%~Vy|2D{!z{*?;8-W2&!*Vk3l{OU*` z&eg#hX-TdSx)q4a2E|^=_D>~)suu*I`Z4Vo88=uYN;@^?(%dVhGN^{z=R&IcjV0Z1 zvspP4XldBFa#fc+E1K0-rcSgC={GmG3npXuQH(3=A;g2M&OV9dvt5{TDPtF@H17=d zI7R$as2!1_&PlO+nwhL1Il-+le#7~W{(GJlWN{;14<}&Hy%)XrQoZ#&ZdRZyjO$8yR{dpfE*Q$zWSmu|J}P`iZ@P9rQ?$8p?%!_B0&li;^t zux#N$GQZOoeA#Ih)NQ>}NA#GDt)7l$K&&VSxk+Ec znrgEi@sqTs9Y3BC5q`=)>CX{EO;`}@&rAGcA$Tyj;vH6Ez5KQ|8gB;s55 z2Hj_OA8_B!TMN3-_1@yW1%;(Ql0qMV$b*NMv+4GBG}O_Ew2>khlMA;ZtF*)S*TJmG zC?8F_rumYD+3YvXM=+TM2&(+VZ1@qZm5Zo%zp|o&6*X&#zNC+nKKsnr=gi$R6TV*u z$&6U$v~5u!dgkl73B$ixk?aa5_YS`yn7p}YeByIa?~bGvsCJ-C{r&=Mg9R~CP%T#@G6OCF{WUVA~ zx-zT{ODJjx<1>~s*=d>xU^c}vB3;3ru^Im)Mu(lYs2!RO(cD@z?yfgk9I~hkMyfBv z!_b(KX=@K>!WyBqj8{1Gh5M5qGUih@hR1Kzw@UWIbgHUOj2D!s;*z#PKLd8S|77nHeZcoLU7Xj5gDd1Dg3wK zSRy#s6FgqQ&)ZqKn6m%ifBa?j*QER8Mw_m_ce)(}Qmp^S zo^)^I(;d<~-PU}%U-hJWI-gEtNy!Ni zTX#j#UdM)Fm2G0Z`tJpbxhlu2(Wnd&-zZhyMv(T$sNWQI^wFj-t!{0s>!PjJ1BAM9 z`6zt9DZ(a#iKN#OoafFUYMtQ4steRE;dM?Es{Qd%F&ih0ihKLbSD}A`SAP@*aaf@r zS)MOB$hLJ11|&7sH9>C@`W*E>>7H-);RFrwZAFRqqn?=&-8FJ+k`qurz1#IJ2r;_6 zBWX_b{#6)X*K2S=>=FpLtmk+Dtd=v#sJAb1OSZbHHO0BA8PsdlJSX~DdFE3Ykf`?` zns+znGT~OUQe@sQQ#IlSdtlxf=en0( zrlNaR(h)x$R6*y?yiXs!x9A2ewU6EXk9i2@yr5%DXV}>V_*^)@w(fg=ZS8^4k?}9} zKEKwQ^Xq>Gnd4`>-W4c&?BrqYWvBVy0qxdM`;@rt({1$094vYHTKk03gARC;;^F2N zDa?p>Flf`G^e*0)pkWI79a9u?)A!Wqv`^ootAsF_%R(MzLwC68h7IPgo0(3k22eAz z@BH6pwSbM=EaGRhh}kx2198Kt$Hhes@vqG+?mJa12aC&@vSIhcdAa~#za6s`kr!C> z`OD+K= z$o+FwL!Qv8YS`eSz0FIwdQ?6|dOjOnJrSF;Yd7q#Hs@fQ6FM_Fx2`ieU6Ye0it?%Z zTt2tS`dD|?7l>iBW}2)&%x6VnhTOTTjPWBJ++-Zm41JSvB|@&ZSbHTo?h>b2PkJjy z^2fjQ%>uZxwqsWr+zxomRGVkSE&dm-D%Mdlltq1cegUjzO{}5|4C#RS@N(WLG`Oz+ zrCW6o7QSD z=)qd!P!E>llHl*@EJUxftHs`$i}P(6LtDbwv|?$|%JTFg6}a+P{s`>N@1lQ%AKuX& zXz&YvRz9MH2n=tGq0rtaw0Zy2b%*PU^rQB?*BZV2nj&2*lj8$UQ-4inX5bI!a)P{n zk%ft!^Bzi4G5r97B)R@?;u82siI3}sC#1)m(ZCO` zC;e=j9wq*{PPhKk>;IOVPWVJq{C;e%Hiy>-!&zeY=5 zkzUdtnJ&irlO}$0^5)#hkS8)%6j7hE@Jgo0K7O*^u9X=8YxV#w|KZE8Shut&`!_qv z`S;ZYZ!Oh8+4n~`bFbBb?A1AKeE@sIoYforw|`kI0}q@81kyuJJKrlim5#V5jUG+* zbcwU9?05pMN>3_v+RBc^**dA*zxUGO055kzGdQEd%S+8XiE1R6mOHY%RAz>`9R~gJ=%fDCZLh-qVrkCS&fYQPHA-I!z5Zv?f2=1oH_%(?E<_57g z44okHxbjg*zy0za3^^um{Fd;_Br`6(*y`dEodk`bm<71cHOAgIwuD>1kOOlskHV6k zV8Uz$|Ncw{m+WklHq3%K|^CNhuEhKR+OKqhJ z7~Z>pGxjgwYuyDLo-g3})!O~o)z(xkctVTg3XJC+5Cs1b_Tvh#$lVGRUCcnZ7?r7E z=qRTPkaafAfS(AGlCGem8@yMem~%YyHM3=q?Ia;6He?5(*oTtX&CDtBe-B|*E8z_r z4T`7e+&Adbk4;p(Z$sv)K3#i>4=;y&A^_kMtqqd2Df)*WDQW76cyS(;B%XVN6jb?_WyV-N42Rt z^@MBX2Sf`DKgM|&$e!tX?}bwz7biyAT;I&+x=*>3f?Iy?TI=2NqjBo+An2ocK7`XomT|iSpT~vMvG|`8@(M4I{daGU?jE zFKYJySYx%jWRalc)9inO#z^NyhvC)Qn2r4=_nGNPNJCiLAFc;bx6>^s!r0WXeL2oOKwe`bqOYPoaRo#owjL3zVSGKI7CAya;k^8J{t3llj|2L3Ri=$rkLd#_NHxAv}b zV{-3hiHZ)ay5!bDb<0%!SH6b7@JeA$DiJH{v{}q##J`?D?Ac?Z=_xB38($szx<&qu zcroaW=&*3G0KHvjbzs7%8;*7jX}Ks#GE^qc9SmJQ7YN+YH=KT4WZ>-iG0q-_ocbI7 zjg>r;%Cl!D&l&}KZg!Apv@3PN(JkT^uiDd22e=8WZ~>M_D92t6Ka(7(sYFezWUMt;tnQTRB+VCm{W?^ffj9 zlw+tWEv6kVO%Is*r$YX$ArY$8p`|AFp7!_!Tn0oVhJTF;n{)GyP2U^@iPeAv<~uYs(Jz{MT+I$7`s7E-pnShj zDcWbX*l9N<%Cu9Z_QL>ko5>D0-2(eT{|5;SS{273IBGYm@b=KYd%HLCgFA!;FKcfH z-W*Z!W8Rx^X+wLh8F=F^NQq_GA0_ve#QEl89x|0gqILDzf51q5LOs@HulGZlEzyj&BvE9Py}I2;-# z)d+V3{VQV%L5wy*QG0dsx{W$0&uKe3l>B65VwRiwsQ8;1> zbUelWM~DvMndG!hhUjn?7R({97c5ZRZcH)|RUBSkNr6OsnRvST6+Qv~thwODsg7bG zVk%oasrAI;fDfQ}ve}ntn$%Hx96RVh^(r5JNy6e@S zb;Y2ssdtLQt*4$005Sb}hyDOrPiC=2)BmMMPC?7rjDjGg8TI|A#jLy@{;>0~g4JW_ ziR0{5l>U$1=ygRrtiN`l`2R&cw2sJpVZ0FhAN)njZI8EUYNqs5w|e_ zI7=1sd8JySR8Vqv#ZR`U>DNpGb7Z1h0TJP=Ou0|zsxHG}Ng%hANk`yukS`3q=4pTS z+eHCQrJjwGik6*&T4hb2EcIq5xtx}iC)M^rPEG#|GED3!J)4yIM@Y}fRqcI5;PPzQ zn&F~w9&~vsc-rqrV&QdaEjvKfa2I~cB(4>x(%ck;9`%N~&l9HL6E7Jv#n#AHvCYFO zQq|b6>DatOS6%;WcNn5;;>_e@CdFlmv2LzKQJLwN<`cEHybBoi&wp915yAmiMQ$Bu zOR|1^eAw8RvqSR<&2i`lUNY&tMccHr0Vry|j)&R!ldB&Psl#cy1dp?9|^2BZ3N zyo570`M7x%L(2q#bdbd~o!^YQmQqf+`1ra-CHj^}GHy6~XmWL#&c5Xl{)AVk*a!+X zVwtj=uBr^I9DrXSb-G^y&t`J93oVYzLfO{hazL5s6331+upF|o$e~{#Q_N}D*wn7K zRiNW^RUcxNKIwXk@^3+-Nu=O9Qo=&}A0p6rrVHAg>_juF@S%~W#w>U0C?S*oYZ_rk zFL4M4NwnoPE==D{*>X&-&XZuFL5L8Rt9s+NT1EHC)3L~qS5uE`tOB=SO`}B>JImZT z={pprwXkn_8qv*e<{I8G4Cz6r!(Enl@>*oHd6opd;LZJZ`x0LNbbJuA!4%jD$=<1# zTX>hMZoN{AgoEBvQeCukkWGb?J~ysucS z^HMmn*bBl5uQowX`x~$5jdh-(vah<&lpPet`O;5}`+tgY*5^yVhSIw+&W=BI@5ZyV z73bjv<(#2$jGtH_IGqolrtr>rUl-L$T$`K=Wx8!ovP)osx5FSmw=EUvy0luuSr6qY zS9K*J2JYzvb-J+npc&>~W88z3Zkfdr-*maAeRDW{2J%1T#!9pmO^aR8Rz--5eH$ROF`=sDEuNwkn z1oS1zK!lTL@zxs6Twc^AuhZ5nNCv&)51*F7g~!Z2i9@?S>NISLdCdZRR54E7`FM^_ zWWhT}Pc{s%v4REY3)P)EEU}yWAkRaLp8s2@oKbI+wS0TW+iYr|a3pVxPpC}J z{*u1}FQGcc8@ea4=!Nb{oSC1p^dojh=69=zfRZcJd99-@QCHur9iKoo;(6Q%jGa*| zS>0ZpBvuxFg8om85Eb(k@wP=cW)uVaywWx_!y09H8+G(W>W-5Ezzz(nZy^oC;c9Ht zk8YFC+tkr4R>>m&-AlP`!1Df#4FEW~zt-lXz_Gg;z|2o<@H!*u-wVJ~$gvdC(JY2a z8o0@SgxrnZzo8y$d)H{*Gi?;i#%%WPh{K2oKQ@AT!`>6wVga;EVL$7AxUs4CSwPy} za7$ck?5P>MfU#NW4WLonm1lihD$N_3kr#NW(c2+yTwTunYgccB*%o&7TT4<;7E3?D z2>lt1YJ$YjhWaNPoW>`kvvy`HqTajW3Er8jdi*?b+%(Uw(10LqvayHj2Gia98DC!` zA(IFPL8zg2L&2=GPLnlVK@J31^mU-D@qjy5aNIEqW*K#x2;vrw5)$c^sXmho`gxmFo4wL1mkf!m62r}qBzG)#b zsXd=MO@>u@92uQv5oaip$vbSd9gqkRJ zA#){CUekm+T4b9r?-H7-2IgBZbeLLkm~BO(Jj^p__DtG=u}QTdaf+?~uUAlih-~5I z75wd8fA(VP7sik+ljeK6$8^X9AkPYuI4A&fqHAFOk98M>7`v|lN<)toc&Ri(TN22H zl;)*%UxxniOYI162jyb_N**gk=vRF~o5G3@_LbW!L3S_Q2i9S6IJLIuFO=Lbf<$dK zMP+}XqVBNh(=r?OCxxY#nJ~+4iwK;ec=@*pTkOZk$RfHZA64iA-D=_!y&&(~|nPJKfWS+P66x-KG_$n%AZpD&}L;4`gvYcyN$-lM;e)^s0n zyjBfeY}P}1amto?Pl^^Zi#Nt(KKA{sU>gDa3@-!5wJGD+P?Thu~ZvdIOUQYxO zIPO0UH7Rp$v726`Xg<0`p#Se@8ZsM3+sC^$jg5T8M4Bb7=I}~o%0~Y)5uA$ql=ZmI zOUY5GdAca7H$wB!1N}1OPwgCC&kp%uE`3}wm;ybHg%9p$Pf+mMC%5UM*>Aq@QV*f==wu%yYL$yw(#O~q;O zDX~x4I~K17q^+?)9`vP7gu6_$=2#Iy|AMVNX_~j>A!LfwJ*ueqH=vE_{hG!MxR{HZ zohmL~e#6%^CQufDcb0u>4@Pk&jE`5rU*)fZhq1L!{;6!j_(V2RXKr3nOP#-XUHemA z#@jUYjp#<}VvW+z1hg z&ifS>k=CrF%MynrS4prXkQfAi)|YoWS|*C*{dW=-h%MVZ$CwIEF%>+c3ZD6~CF80^ zs^b%cHr1*B=+eV-hhd}+Acbl8iy0;4wRTWV0CV*)EQQ>0cM4J_&Y&&kaPmBR&X{96 zhPn!3;s2r*Qp~`kcJU!fz7EUCO)Do@XCQlu8Q;@wyBG#DSh=c^rU>H$+8l-t3vh@nFu5V{C)dJ>egZf=BjR&huIC8iCt>b-$PWurU#UL*``+@cu+ol zok^dx=^yAx570furdJ?(VDsr2coxod(s!hC>R)QL_;3R8#+bL*$E8~vaKo;6UW-Eh zZ%)zM>aD|icqN_l?WX_Qxm?ADI;}WJEPjUIgNe9V5#EL@Z-!>HuGu%?AT!Tj$|ow8twxLUK-f*K+REYx zI89eeRw%U>*A=+5&xV`*d6X^7*Mib;goy=cOYdKP>bAdAn7Yra49g`7T{?zvdOFok z={>A%K)OSd^DA<&WDG^YM90LOR;#(b7*p1m>j-f)go>Ir&g*NeGbeVM$GbVx#GbXm z4^E?T=7tn7x_q}$e0Nw>9z7U>+)VF{4l;^*zZ%L!=U&z#_>y_9 zkLGkXq!cvw&;-Bebi-=fufyQu0R*Q20K&D|!H3xk={O^Im+0GJFmZ%QVEImz5?@&u zx1OyIf$ENXXkD(V{fAnzcg(}%cD5)?|FCGb2n**ErdG{Vs#^wlp*i-}tntIvD8tP58N#MyGt>$D zN*lYM_&6!$o6g5+TQnPN!rC$bs~iS=;23n-`#_`V`lJ^vF8t* zkBu8`eKj_2ru99fIM6~HIKu`mwSgfU=-NOLFe!7o^|>}~j`eM@ar3NihK);F-xeF! zYJD^F71>trv2io4uhqsawZ4G$>494Pv%W3XS7Ciyt?wS|Yq!2i>)T*_-`$}a(u(Q`K+`ofuj|eS=?%pEP4Q+|D})>vE25)rpAcgl46*m>hn?SiGsc!7G-C#)hw_< zs(F^*u=@VbjrvPNHic9ECq~-}*x=li4G$uw@-3+@YTFAEsd4_}?O5^7o2o>bYMz%{;i{G+HFA zn7iIuk}D-Q0DG0yJ?$A7K?RXFjUnbLpDpW9xMfm6C{e7%|el-g6 zzpFO1&aXbD>pol^6X9G3dr}MhVkvhCnRY|bj;kqj{uyKdW06;zRQxJ%>>#J=pxpiKLz~$3tHL*{TG}3 z4VP%x_CQKSwLb-d`Jvihj&a|pa29Tq%X@z;%e(w+u4s@RdoSvk_hPK}rRcNSSjkJ# zHCgoIth0+c>P@MPT>Yv%F%Lp56Da}e=;NDrpZB+){@{tA&eKM3a5#CB)nBtP09b=k zo8Jaz4}dYdySw&X{D_-$uYQp{OP-BNe+|#oQSU=6Ie^S>O#IBe$v;Zl;gpaKq|JW& zBb=Aa1$e~6gbN{=t@}-FVF57r*P~(P8NXv0b0dtREuWt)vB6K0Kjs~4*rtAMxA>+8 z-mJa5s^#;O7pqX+kC30Irx|w``p*7CkHq%oC@$yBxxrX^UPUAgCOCySQYXF&64aQ! zwGum!gmg_K89ef{exZD+|cMy6_J zK6xw2v+dN1-j0D&N$95C%2>Ki?TDr)S8{jMp{|v6rFyG+P7 z>d@*lr*WR1O37u@Szm|GFl&ikAt`7n%~l$qk3=qb8PrH2ZQ6*bGwxxRA#(zD&!}Pd z;kz1*9FOPNTk_7W?P9qp z6=AQTE|cf_J=G5G)e%fmn*_x0ENW8hTJ%&Q z#~-_MwB&P~VR9&e&0$giG&``0t>tqDBgOs-Xq%n&qTxOT%;&UI_wbN=4WcjLRxB&e)JWBubKS?G_@Qw1JmD z^DgAs(Ug)$uDGXE#w#S%)Jo?&%DH0}>$pQ4cs9crh=;iw2}#2K;hhX?AS&meUu;DuyfspeFk@k9+qmK-G6NBC?!`__WwuKAv3L; z?7$Q;r+}VHCcwY{i-LdslPiX4?&6mx4IBeVam6*KW^Dn@SBN<@hZinr3h~J$)k~>% z9Nu}Hn^WgN4X*L-oXJ4r5}5dUh&|X45_Z?8?teMU_62f==-D&%?mgS7(H=@Y5eny@ zg+kqWS-Cj$=~(!_)@DigvA1cTHG8Vo>}b~P21?y~RY z*BMs9b<2as9n#+gdjqVo8%D*C$3;pk01>=g_y~13iNj-gfV_B`f36J6m401jL4cF? z=Q)TBPBX6|B&xKf1%iPaCdbdBG_u`rYe@l%v28Hf+kH&B!qPDG_iSz#I#2z*QpxsT!{ zwv<5Wy4in52R*+yznl0a`CY-_ux5(N%FK^XS+V}~`d8A+eK2Qf$UIv@|5>cVOSn&> zT(fuugnqr;bh9^DDa>TuF$oB`)8XIdaNq3T(g~3}w@HjePI7*I?ijeDBlQqoa+{K8 zkJ6PNrjgMqJ2P;_KLqwvsLFS9BZCSj=K$p#m4Gi^Iqic{r)`AQmzsZC{a!m5x>1)3 z|LH4qJ?5ob`55gAdV{SKgX0m#RO4X<(_n*S8f+yC0nB z8I2(CM8N{F^x2DVCjc#AFi#23%Xrx#nvNjMWY&C+8VNL)wpfZP=xa1 zP&m``=lQjHC9>u`5Ar@XcB6l0QtUiON(ro39~q8;OlDnOxLX!9KOKHhST zTYn_VBhqKd(&$;aX`nMx!EA52U7ZnY_gw1&6TaHIg4lhsE;@aIb%FU#wJzwLVe4{p zRc9C%SEQ41$k6C};zSmKI>GW50HrOLip+Vf*a_lXp;#IPP-?oY*FEr;San5j{?-L= z&15&nye<@8B9Y*i9V%H{URY-K z;M_^%c;P3?ln!&+4j-oFaXKA!bI}|M6oOE|sJ(hgcSD9Mg;PiYhb?6E*E%AlG=P)n z=qNORoLhoAfr{=d13G90thf?@`Ug2ntGOn^bTD*6FkU*LZ(;yplM%7*fExc+G=*WW z#JJ=~XC_WHEzMQU{FY&okEW-v63&xHY4BEZ&Cn(4NI)@~X}b>_dMVi-(82lM^K@$(1Jq+jMpO!>`RVtJ8cB0f>IHvSygJHR1n%F`oUp z$FtoiE(vc7XQEn}?4>P)K=FO=%t|y0OnEjkey!_7nyTBGSqaLgtutF8PH+?0j2Z@r zaom1kA%4NX&)3yB{U%t;2@Q!M;l)9j>g&!{Z7&!?0b0uS}CTz{-9cEo4Ig%6h)SMCg35;%c2u~*{9CvQatl>_Yd>Ic-|Ow}m*!TTa$ zD^%nUIZZFgjJdVCea)i$GWoh3=_xfRkO9v+g4axGH*Mam+3A=PD(YI_Ym*P8#Q*)0 z{uh@>0w(=)Id>u%<{u$gw(YcnMY z`9B=2qZuqt`a7HQgY_Lb(o^8m(Y!YBlqkuAi^ECCH}UfTwhcwm%wO=D912TBX zz!=Hm?cL|(q+fPRFgCxlCzq=$i66?XgwyYYUNO%T!+9T~4ZMVIjGvJlcTA#$x4f~> zMKTln`QJXPnB!X4>yRjwIX+FN!-bD8~CmJEx3R6nd^H*QKYUfoX~U=3*gVw%?5vN~Bqkw$J8Y;^0K9 z2_%BrBX<89Zi=s^%uv-BFeyqQ$D z0?Z6^(aZ5E$cej|sp!|(v(OZ)vmSE*B#s&RzCVd}IrK4c6Hgh|5h;=5++qGi9xQ0L zAakOGQClE9^Sw9L?ijmhnq5hS*@0f-j zPX4Y72{pb!@|};bz@lFDR-Hwe28=Y^@qLk+(gA*PQL_G6r|CwLt{lh+XCm!Uq0}$UV%gC)J1?H{Q-9Z{6l(+LPe2NfEAGez;NbCSB0sXCGmht#^E zA6mfav3^pya;F73WOPLG*mL`WEj!8r(UOh1SCjP|cWg2GnXB57>{)irHKaxJ$n=}1^GDkbt(D`YyyP% z_Le8!Vt@v|R0cA98x@9}woeH7_(d*n&Fw6>VP?l5Dat*-#=k?a+%xE$i4W%E{mi^# zHSBY}8a5*vH$6Gd_CzZ^Vbq6TrZqliXU~d`N#Xbu12_yoNRCInk9O%;Q@|UynW5l9 z24PuAVZUO8o*~$_qSCa2#&35bzSCANq2l)V#Y^(@k4b-VF$WnXImEs!sWQaPGujSew@K2xX!I~22ZWTF(v2>o)lEbXhKFSBt%F^ zA=3#V^U-9Ec^}#R(cOo{2a@RCB|UPG&th0iuK=?y8(Yb46ZGtZ3pg`?4^ogZr=gwW z5K1OoQaTsq7>xt@Iv7WBKs1QJC>r~`QE;0$Qm;>yjcF`Pc7}72>Y-gBM#i`r(-U}v z>g*atz>+JnWr1dXKj3%dTiAKzcRjx}KM^GI{Qf=qZF-5^()_X5CurM?5=cZ$AWwuJ z!DfAX;*87%!Av6(r>EcCLxuP`v&Gy29p;RoYfc03YY_23If1qKS4A-SG~D_PfDcgN zLbgt_{-nf^P~9~}i2=}ih8GnF8pgby9Tuvqb(+r5IgqJ3QDp&jfiMB?V%qHRq?}Qg#XMHa=DJX+QxqgWX)WD1#^K!QMcM@eSl;RiL zG7{@eTS{q*s{e*+zJZ#vSE_=)g_rkN>6wA=jZ_Dp_s@f1jFPDS^n!7Enqe;rbNT_~ zdy_AWHcF8%5UWPs$F7a1?b7%WY=K=T(pZfXxJ4x>RHx`sGewV@eV`z%B#kiif)SgT zha~dUVbRQVpzKC5?XE4@1Io2W>Pm|eyCo{r-sqh(Of*TTYERnr&cHO(mG-sqV6$uD z1HO$Dt)E2}9o1bt?|@&q^kS$T=2QE!r2K%b9#U&I0N$F1E0-DmuO zN?2rb?GT1`hQ0Q64I|pasSW7hZ$}`nAVp>9i;-4DvJI#HenNQ2TQks*+@hWj#m#^6 z8kPoJPV6+aF>vK&(V&!#vno37ET>6E3^b2ZU}o06cMby5{x4qCJ^ggyDr;NMubyMF z+y|a&@Uy5lS$H`Fr1}nL@n1N-!pU1_AlB5x9(cwaX45o4PLtLfaiKtbX47+tOY=&j zK)aF?PSN$Z`#Q}1_;B5irDy44N^rfbTl;pj?7O?=AI!BUCzPl^3`!Zev=oE`DgOLT3d#(;a*ME(Kgp9X z^&Y{2&h^@ahTk!_9xYXd9PqZY@asfMv`-R>oBgG1FB;N(zOvMR5bu|qaO5bbS;Awc zj(HR-ZRml_IaeSL(5n*huSLCS=IRA^`Gty-HehuNfpEo{RZLvHjl)aa<2DYw&)lPq zvT=Bc`-zPU=Hp6i9A4sDY#giEo}aFRrIp2aHW7)PTr4hz_Zu-cl48$9N5PGM*1JGG+T(I#pVOV7eW~O0xvW2 zJZPDZF_xKu|3M-(ye6hMdjFxZTI)J@Q%_94qHq$K=bxuSng?DCSIp5{XMR3HdhtU( zQ%vnV`%w(6EeM44);2GN)u7U+l%?)@~V@!jHj z_vuLxD_X9%S~VKf>rx6$-8?klG<{LUv!%X?=*9ArD0O_F#IUj3L*u_ul&H+OfApJo zi>~8iwF5d6g5)(qRyO;8AEYhlQ>oLGGW~d-VOUD6-@jN^ho!FY=_e;Nars6x}-af>uZ zG90&94nNBEm)_V(Mh%I1Q$^LReN!FU>rM3;ZTZXH+&1$y3$1(q1jpt&7rX^yhE7g5 zy~6S$q3ULZIA{2T?8mjA>Gm_serDLuHnOKz`1}pEuGqncZ13C8$0n*YMi}Pn`LO@L zp~>?q6_#FQ!^%t;HpEsbIMljonEk}~q*uA-?|lA}AZa|U{Pl16oQef3SPqQdTgYfW zu&>03yf1ijM1Z+$LNqPFtDlwqO}$xeS7qwWzVSm-9~Q?4FBcWG_k(N<;NoV!{Q$M0 z6EJ;fXE8md71whaWlb-jyl5sVel+P29xe?{?ekKf7GJ+Zz_#aM7u@5T4fD?Nnu?Z^ z)=f{W*f-wIELcJv(X=5h_Tbfo8#eAdu3vyQA{_(YftsAJ zTr=Kx(_bLU?6x1E>qsj#q~@zJ8vSVc^xl1Cry=*Ky4Xg~748Rx{WHQeg8hSD49B?b z{>eV1ZrSd z>z;@9luN6F3tkNbb^tH{+LnpMX%b(S+(FjN6-=1iqXY44^yS1jTi@xR$wMi{^*C5S z(kpN;`0zv%{xSK*#y}`}p9jq7mQiAc9dX?fIv=q&bz~#Y;DJ-G&+y)n573me` z`edi24X>T+#h>hjDBn~Z=u;l>ZeRG2ne!)euZFz^g1wZP#=2v#`6lA^&x#PRKWGkt z?1M(^`K*X1XyHL~oX-vTpb>8YF%KFM0Q?;^LMO;UBkqlUMubkA19NDXwT)+&rS{}j z=&%EcQ>y;^51dY$1G6)tI)Dz07~3AMTcAS^D$IegWSjX}9r)^JMa=$;h_sH_R9C-v zEY(#MKP9!7bBiiFnFYb2UJ%BFD)_)qz}Z1UnU;M+X}HeV1A7$nkW+wi&GQC}H3t)6 zxPFV%(ig8?tgn7(7wZhWSV!|Qtc+1_!2@g!u4-RtGq^hVvSy$$-EW^MXtapJ!DIBy zc<`8@9khd#CY0hJd7=x}2+OcB`-~GYLOc!j$^*;!p2qin zzSH=AjbD=A_xSymU%%4wKn=ezzl-^8C2S|ZxwsGK`zl}6AE?UzD=IE2HO{iC@;()P z`&Cu-H{JnN0|z;kRfF*iIb`UPv1R3fOZX-D-NEnY{MPZ?&F?S#2It2h(09LoMSc4g z7lKMk%W#&<+b17ZVXsTjr+ZYn>Ip% zV$oqzHw4#U(C9VvM<1)MO@#_DH3;hfN+Wf=T-6!`;!-zbV8iPlKOtAO60eZy9~;aJBE*-!VxRu$PyyW?eZ{)Y zNfm;fxvFoO^hEYx_CyzYWoI2cH0XLa^4qE9cY}uAEJ0o8>)@ZI4DSk}&mGn|MK9cx zJI0jj@M5Bsm*5IIhmh>)qTj*v+HM&|s#YPs=SqF%7nQyfK+B+H;FoxfYa%P3iGJYA zdWF&Ygm<@da!^TVH=%APJ6eMXYl>#XazS%JD6H2WAsQNIZiYy$(ThU;B7#%*>9!Hx z)?C#lIn$%Kq4(1z`(s++`S}%~Cl*2%Yf(hggAfFg3w3Tz+kKMXf}XN`wL}0GYt=IE zFI9=2fMikC`NJy%O)q2lr`~aaUlG6XKNC)}Sy!DC7+nG6n5U6=7dmBZT$_5Fh&gTFRfp-~?x7HnY=@n;wRCnDy7|j~^ZT;Eh?kq5 zqvsb76NQO>pW@KTe20I^;>=7c@A{)=FCX@8vtSq5!R^x}xzk)#DJ}S)scth`+wx*f zRv#N&NXrW{knXIF2g)~IZFIi5_i!JHInf>5D1kEl%rg&ze~Qr&P$XTz|YR(M;)~E^M^)p7%JeckKpz}3_^GSK=h4a~e;7ItV=Mk1UC!MPr ze>wXr-6AN@qh$Coz9Q;4P2yEaKWuIM}qZ za#eptgDh*ZA${GcoC7u`G=cW`Y~-)BqjFW(5K59<)z{@nwia|Gp}p%XHPT||ZjMHA(rM~ZJu3}5p1 zS~LaFo`)BgR#zB#4Ufb3CDz`!qQq#YZDMI%xHNG*jYd}*+JXO{Me!V zXZT@W-seS)8Sg(AY3EI?&_nah_+Pbtct36i3HXEc)!-Wq|D*K<@zvz2mRTRD#mzzN zf6AA>*|wlCmBKnIO?}A~eW58quG#}u6+b4m;$A>oabkFKMXPYSM5PfvQ}bbwHK>8t zH)Z1bd=oP)RpW<1X8&OY4+EfKG`KsR9!fxKMu(T8l}9AfBFhiE25AUyhj3dx`qlNp zinhr(0{$9Q0*MX3TgLBS5ft@i1Ck^t%Im>r3yPNY`%-0~TN3xs1B68fzIj0+5YIkOXeVwvB~fehk$zf=|IV|SX?nZf+QYz3!o9!5DWCgc!3pn_)L za#a&ejy=i|gb4)wrv!vEQ@BCRr$;^c(Z`Se=>%BZRZ$|(r5$_KX3Dmd8kMu@I zGc&gGUNHyWoN)clsMGjT{ku-%yA*Z(7XBp8bG^9$v|aHFQr8VDN*wBXWhY%HnDk6; zI#WZ}rd`052mvnMg41({rRUc8r-I#@+tgU11ijq!SoA;2lb&0FI)H0loa2_5snN4W zMEpkmITVJuos)t=njQ8^t62rPs&~(~1)%p27wmC!=rH3H!IFyXk?{ICHU=n+S9mRE zW0hOo^IAtU)04Q|w%9evjhkhuRX7DsH&$US)1vm~suoi+93kj`#9`)Vxw*UcOp*yS zj|+uqx5uD;pY_bE4YvT{bN@-}wNF6_nP_G=?7aixd7VIQsOQlZ%^T)@Wzjv5i(pwT z*ApnKzQ5}Uu77l%y1glu=575Q<2H}suSo3y8DQEg&#jN9Ix6aatrw&DZRQm*|9WVy zri+yh`_Cq`Y0heeMAEC3p?eh`RG)9*zSrBNMljD(6h#HS_YtpYF!)LS2K&MeoIV`* ztTcGF!&VV^rn+7xO5y7d(tu}@+oInUddp{!0^V=x7v>9gv$Z|sG0xl5MFycZk14;s8T zB6TM?O<(0y?%BWa@{1jwrBpLvq|p**_?Y- zdt9ZTPWF7!FTbav6NAG2KXFquxuokx13qoS!959on@^b99Lgu0ZW5BmSq<;)jG}NY z7XzA~+DkJ~ACyCRu4%`dqis7T@HOp7Z7%APBG%OA;;w#tot3*QQkzS=K7|gE+Fa4K zOY{hUTurj>^ND|BvP3*k(Yf^+@MTE*FgIra59oN92?^(CB$A(!yG@G3s|^R66AB}o zldDLYy+3HEf1f${d;dLMx0z~9&(R8DWlQ{peRbv9u{^-yAk8JFiIrXFnQy3TD&KI^ zC(A=xI!qO4gthgn zYMpke4{vi??$?sh!ed)q@*1xYT1~4`d&W8~Hwl+AtEqUvF=iGQK4oT+S2SkIo%N)) zWTrG4?kq*NpR1}BOX(dfM5ya*6|_%kDh(J(yM2R&Ja-wpt+SqFK>GG7-$d;qo*YE= z+dt}M8?|6_0I{C^Bc;@Vd_;ckz{nqU7dm+Ve2Z*UuVB##v)9`;4B0>YVp~TgCIWf} z#^eau9Ea>5UX#yJaX^ki#N<;qq)+TbPh~Wmp8u!Pa60~{iU$4+a8~|f(A=XllQDP_ z`4h7Nsb)YZ+8NpG_ob0??BE+9S>@bgz{5~Lk#O`Qro-+5cKtEvI=Cs7WUltpr)H(=NGn1aCb@Kn*S`;=le0yy$=7pAGH)YZKPJSQpdzzomZ#}=~`2}fHV8DQ)0p?$E$$-+b z0p)!P|7>XY---bP`VJVt--G|_M{s{db*HFU^4gK*fuTq7K1X|Q#r*^M`8~<6jo-)o z{!ZLvzMt^j%&!*rm-(GczJOEY^!zK9v!usgTE@GWQ>K8v{rWr30B4}%44TMMR`{Kp zcenA?PvQFhnqPtF(xVUJ0($}d6130Euc|}na9Q3ym>b*o7jk#5-KKjy@*^i#fO@^A z!y9CIFFM4R4$zX@>}Kv39c%2%93K9KyQQOvRg;;7h1Ff#FC7bfisG5C*gGdF?~{weHjC}cgB1i5uxgZX$HXmjcebEKSl06x>FfY01! z@fpXTVUn8jr7U@Nb-Z}&uI62W9Z) zO&>g_l7M0nugTn8jAJ(&**LIPT$lml7s8aah1@*l?1jUM&qH)I?FmttO5p zxz5BryVe%R%RBnivSfCxEs`^6oE36na;>wYk4)Oks|_#MI~nlArD8P7gqDkoA2kCJ zr*VU*#xg2zbS>_U)$VNGHE;5}6P?PYPugkf@(4+ILUUsM zO~O~N6TPNSv}7I%#s_uuxt8V>LO3*r%7VvrN%UwdpR?rmLdPty}z2cS{)*^aqX9%$WE4Kz{RmK$ZLL zuW!oI*{Ps7)L?y>wG0K9yjmliiO@bZxrf$(FM z^n)d63}%eZ4hTOc;c620o%?S_hbGTJVZfT3dGtXd%!v;E-L6;7V|cnS@+)JXGivU3 zLOYr$S>)DoH}?!F5`V`GfU-$fZpofVNqYm@2Cl>$ZAIb=K*ViVbd--KX>N0NUZeME zbj>?wi!=FK(cOQ|HuDN$W<;VBP5s&KYCZfkhtc|cvomGiuLkrx6XC2ucRx*S$Xr{! zvui5nJ;mQz6|UVQ&`B*}RN&;EQJwFq4Si`tWuhe2i4se$4%C|H59l(hyd>T?@62)K zezbyd{dp<7CozgefPi_3wRX1_saXTL&Eeb&2JTD1N9Z$SfRN(&45gwR4u*8S{RsMkFrNx*1Kb!g29F7X?EdB4Xn1 zrtNAzU?D(>GkPW4ELgd&ID5>BdA&kcI+g{PksHm>+AXx$x`o>?OIzJKY_*_Yv@b+&WEk{1rpl%&^(%Xa5JZ! zdQ_jl(wcow>|c=*DIdxA8$}oBYrGaH-`&LKStL*sFHypyy7zxi`@UYN>-DZPaQ0fe ziPN-w;@Du`Q+7-LSmv}ZE-8bIm>qA)dYRMSd$ms>_1bP&00M!D>ATGEXAd`-%A&J& zK(OuXpd(0Ib|7wcIz*^^XT;Zcn_Iur>u{#5spSl*h>z6B9YaBdd3sLo@9Io$-9#^6 zHg>uRVEhsz89!jsLHhH3@^#NITm3jdn>IC)mm{RqQpgSpdd#}N&ZL!W=}X;17O$ab zbn)*CFMGyoe0TYUEEP`ECtOhW@4#S_u9#pL)ncErK#?S@) zTRs59Zqcmq$O2BOSBRtBdMFzSDu`7Fy|o=-l-Q-7a49-c9qa(Ytu@|!d!Tv%vWrYW44n)xy$sT7tJV!`ty@2>trdwBNI;Vy zvRW0FDq3sr7;Du}%c7O}K40hDnIwq)eEa?5_xt#e%)RHH^?lywectE2o$*}mb_!z{ zQ(o^ZK`XPH=Fl5g?s{KE#2YSh>sDR=qMI4Hk6ZWYjYnYl6p@L)t zrK0Omqkl92=@>H@dIlL&-A2uo=e+H2)O#aBKO%^dn~+vFrNz3k<9olFj}>KJrPR;x)DkInL_cCU4F49MoZb* zZyyCn3`lJWM8tp^zem!|;mtL&M)lB~4|X?rUlm*=RQdhi6^Hzm|7Jpyn4g>c9VU=C zLk`(@gr48F`bTDJm{Dkby+UHqkw%MjBbZy?Lmny35yn4=_WU-uf0Jh#H-6*7HA21a zI9t0YgF?7IL|5eGfbaxD$P}1H&WfEb(yh&5?lyw-pr!`e~*}-2#q1zYOR3d67*5_6L<30tAHmy z0t;WJS5Xhq%$i1-{XgF=-*vsBaOONT?I6hEbjwY)l{esQR=0Y_ySpPi>a2)202`qq zRtioiRBAm6VmG-Xz7o3v#|>t#HO|#JtLk2yc?D*Cli)#KHDh_Z)se}q!V+#N5>Q4M zYsm)%6sBT=>z!_5j2Rs>Gg5E&QvycH0uL;j4XkqUy2#|QRo+W={>;;wyg^Y+PA0F5 zc%^I1gbbklTwA2>`57Oe!J51(^Br8~2cRHOTQLkDPVXumjx&nuU0e}(;~anj!d#1e zaYZ=yiiyO;Vv2K#@3weSz^WJRp?CCq_wktZY3L=GlX`vDP>V8QZ%tFd-#+4@Qw;Fs z0Cf)07Wm@Ut)20%mL=2{xEMT%dJ4u6BW5HD;?~&P0eqPW z!=|9n(PE;PoJ2VdeY`>@^K6{EMXNB8Rq>~7ac_rT`PW@=HLe zGi4*+;`}xuIe$C^WPiH1hzHX>|692tZUxOLpibq_gGz4RQzd|C56)}A%=P9-d~ z!{Swm7L8mn*OM(<^)ziDPri9Fp>hGECF23KZM+T~px7>YYM#6gWH0A>jg!nxgNlSc zNy3~DPeG5e;tFbM^4^~RwfgxL5!~v%#wn;ak!>`j<3Q^D`4!#t%A4ED6t;xwWltbU zidPcFBv9Mj-iced7oopfGo~t1*A{i6oibJ)5rnIDGxET_gNW437zQE@nCjm8!7ily zJCZxjbDH~>n;LIDi(l7k+9GO>pVrsVRNqnsj=W7Lc^tx{s3~#f|MdT0GqNymGji;| zvl;1*+`i}F;tS>7lw9@;`VpFSHhjh#rH0Qan6G?k5czb|)`ptaAm(|x5t7!pm0;8N zXmAWVoE%Wi!dw#{IKo_n6)z*AO4k6Qo`|k4d_!^wP?_BA9K(V~wCK#2QF=$c2~!j; z=V&5@)XVr0!uDc{tIYHFr&n*((yJSF5bKfz*G`^e&XGF8pqi$Ew` zL831!D!>yy&fq7xOq)6{&+%7TQbxpPN4%YDmtJ`%Kkf()Xt!?*=uIvHe0Q;kRtr_!B8@x7yUt7cTv_QwR@%D&Eb5}bu=dB`O- zqQnZh8-`+IlD9-d&ydWS)jAncV_MpgupV0ul^Q+XuahcL$V!=2I9wL!jN~1N|rV>9kD_=bBdW5-m zr;C7$!`aSu0*vOEu&^F-D~`8Tca9(q8b-(Bbj&E$fu5x;V@xl9)1#MNhey5sK^ZBL ze;bq$#QpuqPM<4U=n&#`I_|h_0j%7#R)+qqw?jI=%D>_mCeQ-iN&Q)6v>M`$zz}x~ zBCjLWK;^ppu%jL+KEB&Sc|VoSx#9GF-s6kwsC2{w_8`sSeq_ML>`jdtwg`Nl0#;oN#{DM}ek zO4R%I#O&i_5lXO-oQ1>&07szwF6g%=c3OVsPYkA=S$nZdTmE`~@>`lPCgr$!J?1#u z%KGol{2`fDxeA<2f$Rf()-;YNi4Uc+(I0@%2l64YGVd@jFK`%WoD__sJyet>lBcN1 znachc*_R%{kh6E#)VJTaJ=*l9>Cq%IUP#9FxpEE^x#^g@m8W6krY`?6vIWiA01NH5 z$*iQ=$sMI}BJ5V4N(JilC^dF~8atk^xlSY})3}GUGQN6e&b<=_XTl?Y*uabcX44tj~P&%S23KY)jb|L)nBWXUI@J>t%}FSOTLg?Jv>v z_qOCFOo8p3$X*nyNP1f+Qq+~l9E=-gW1H7FrDL85AOjcRxbT~Y>XMPg@xv|r5bn|O zZv>$F>YpH!hPZt$PW2vR8?O5*CczKN;{Q@>M)=Luca7{5`Z@m|=il%7x14|N{LAy- z0qb-j7c_6B$w+c~6>_1E(Xh2QSL+r%aOxe5cDk>QaZj7W9Rc7F!WRNkdVNeDY z2Z52`v=gS===UVkMFJ`1$_b}4*0s}rc@E%N1bM=1IAp?AY z7Ec4i3{Adm1{xgyZ+~RbE}DraZVN@cQ>w!&LiO5Hf20oKW2CVV z;w9PEFTCO(XR2b81Z@zzu7GUHnER=?c#PE=Jbx7L6`YYXmD~SfR^PJYN%5cI{$y`; zR*Xb=4*WfNBKh8!TYFUEFF^@RGeZ7+TcSt+T&SZ?RnV;%5lQE&W0*_jvg^qkncNYn zYrj!dywpVRy!k`gP9)s;;3+khbTr2W&+YtGv_`nY^71!)f;U>MZ;_e-nSO3x?a#g@I10 zP5oYG`t3AJNDpo*B@4WITkA8Y-guR)t+zn6UoS~Psk z@Xd?hfdx?FNWxKgrc^kwqhEYD3^G=7oYhTQ!~D{spxHQHf61xLx?A^Ltb+d2m|nX| zl}RE8O4YqQ;~}?hy&~P&p4i3VracWq)2|JTxNswytLs6_sAoQ~;ME)F_BPB2GXb{i zFeVD{LPtP77(h68`?D@JC~A7D^`?UY?AOltXFlshlxm}<;oB0+443FM>v91&4sEtk z?@7~4^LAd;nO1(O$7y~~5Aa4kC!7LyK2>{61BUQ$2S`+v_O8Oxw1 zb`>>^z|Y&G-fa`Zj>=siNaoxO8eM9!@lFV5-|E8tF#^4*> z4f8IDz2skJzO2_GW{nxtc$SUQEt)oja3(|CIy0f1%`=tvyvI&FPb3X=UF)CtiuUNF zCXs-9v3=c|cDKj?6D&|_SAB1C$R$Kd)_(zIj2*W7D0R8^3;sT4gxq9JtXDPl&LK=+ zs|?qws6blE!D^L_X^4L3JiC=T*_6;xezPFXeW5MaB3jJNlx6p_bKG=qvWpA_z{3FWr)%S|EZUE?Z!=qRQEYVmwssl~*Zx|(U~H%ip}|0$0Jt_sM($OjBJhKkS}aIi2i*$So>1+i zuHxyaCxt@PQ5-usUn(f@Jv_vOYxQK4bxMMaxyqsI*jqEV)JK-*-4Z3`?|J%eyt-2x zDx1-6+fe;kPRQHTP}3P{d%G&y|M{l0GXmf#${_jycuts4nEy1`G9DZFHS*oWHz8fr zb*(+{7san+m1~b8u!Oux@R!VQ**rY=?;Ip2V|X%8`x;k3x^)|89AY`2VgNnzU6HsA z>BoOT&Hh}rJq3~+4YAYkk6=wkJYkjjTRXLIy$z`~_0Ijz zCI40wJ3@c4I8MVD1J& z0T!Azy~iHjP(4FxjOn5+)42d>DqK&K2NoJurW;TK)xU*M4N`Na3@_so0gSy)B>o$Z%No@chzhks!Nnc3ZqwWQe@6R)~Tlpr1*$D1-;!UyUC?e-EQ4{sWuoEV#fHZj>a+7CE6%Sjqq>Kz;l)e8%Oe^2}6I z7M0M^N3pqUA9&t0vrJ#1yeim{ly3{kAustZKN72(U}5Rx(s4@kNlYg@c}_p6a5DAt zpPWDme(vNa{p1OBnU^hOApYTz;v$|@2oNh-E|pnjaw}t%WHCuZI5lkefDuo&GB}ts zsP>H8QF!ihM?Bf7Bs`hc`jNgQ8DUt2R!M13E>=(dCw_;1@4*Ui^M0Bd#xFm$_Q$n9 z;=@VYN@e^gLQwk2&|d1`cZp~+#}pQ2w~RAc5-Lzwd?YL)q34Zv-RA}wdGuO?r)Ul0 zCYYS0N+u^o5I_vHhZ{AH2iCCnO-^dv_ek|f<<@wBc0^K_j(P^dML%NZ&6N^jmT?L7)@Lp{(_e?MfIP91 z`uVkqx-(;y&kQxdU+>Su5HA0vka%B^y^ov0?+trM+)75C6t79#QZy8fB{K#fZ*i7{ zNIQVElj6woi-#i12OhZ&E@g;Gf#o#MrV%7Uw{+_R@=fG6_ydEM_i9(B_+Pp%Xzvs1 zI@h$Z7mrj{+*O}1;P+FXyd6PA;PvYB{{BCMI{LbG9kK?**sp7#|5koX)XcP$aGU+_ za1>n2)WjMLG90DJcQa=dQ)m@8q=6K=wGUH`RUijtHgyeZBTrVX18HPJ@sNx4_#udBxoK$}Gu!83iMg)YoJC6i>#>ZH{C2iAJU8K9xN=6Qa zOe0e*ON=I57v<54o zKtF$7c8-RCfsO2HG{@^T$Bkx=tMhXlW-n%%|HDaM#*7wmbq4p*9->9LgAV7f$6aR# zJ1lCae+yPN^qRN_2^UA(}@4?|%NthqPA^u)Pb8skzN^Qgd{)6#p>+a&RYO*7GEuAK|$@`D1#d3w_1wU;u2 z!61JDpI+rMjF!Qs+n?qtD+h}pbZSN`cAE!K5q<+l{rLXTbbk)tX%~26pr*U-$Cr1F zk&Vf5$TKP;=`jCp;wvF?*e3g7y@x;3xfN)%$Z4JsRB`D^K3|E=(I3+}dwtRFZRfWa z)BpTZQ1lY%Fk^1=roo}u_grrrKGbYZu;O(G#Npx`PQ=`oo1RwQMbEG_gq>3eS>l?| zZIfTmHWQJ5O5HS}r*(NmXYL}t%N3SFoMx*mJ<;rItq;fO&BPJSyDvn^r6-iT=QiCFCj;_FTpX{~5cq|{& zTvQ?WXz@j`MFiti%JoVaiPB{`S*v4L;XgBevmUX`pkbY2luK4=vY37~JBo&C z4geduQJ3+aK0Dk{ch(^@hR#0Gc)_O;W~c+Ssku@=%8n!05Y6%dR6NMmNzvnH_c2A0 zh}f(EJ-x5#pJKQuGnLsMm@4%h_%M#$zv~OPhNSD|?3Vv(O7<8Z{IVIO2|#adl6h5g z4aQec9#9#c`BIwA2SN7#3L6D&XSh4+CJvs_clIH5Qx2I4tuqpwDL8O5sEvNB;kI_v zT{d{ed9%yvu03SNxcm}=xlsf*mwbetF)Po(KSK8cgNX;I0|1)H$RvQ@YyFt1OL<2t zdlzBMIttO#Oh9Cvd%Am@AD}R_qI+nVIbtu^S0qNWC;yG)&4Y9CX!7Pmaycpr31t9b=6BFzI_KAG8TftQ85X*B}kD5{?=*3LE`No8?Ee-e1BN@;P8c7fnwZ3{wcxMxdZEY#K*J z(~}`R;vbymA5c&(AQMc$uZK)o-+Yl+&BRy8Ro-ZlKjKJYzPwABXU^b{|Gip!irkO; zDd)qzyG7;OI)4Je=a+RM}C}7#)7CY$mo?|Q!A}&|Cfvh@Nq>sr} zuI4#9V)Eb{Zw~Am3--xJnEEH1`Y})b85xZbpzA*Ff6SL+!4(R8#0XTCIz)l1^98cs zfqt7d_FvQ^dt2}9XB4v6k^M{XGk<=o!kr0EOcVS8{9F^ehA05c@n4+oIhI0&5EPo@ z_m*ICqp&A8C?JKUq?+c~sb+RNOes6NU@fpYpM0&NTbEc@&kJ2<1yO>T6|S$(fycVT z^F|hJVM0D4uSu0bH#0JYYMauh+Zn0XjJU${30jBJr^8K)f4T99UiYgM!1;iwjtqf) z_<^RE9H0rF8qCBmZ3R``@`N7ny?nRwuMP@|Wv}T5uvmkrw<-$BOKqNgu!43MZE&Om zFLIWY?ON}I=EH$#S9O=}`_a0`(^oYf)r5+A`_^d9^N~&2Xvy=Dwk$Ub?wmaP64;c; z)om4nfM5+G@brB9pTx-s?Aty?BC`td@R@GO#>jWuMiTCj=>8+4HJIBzFUA?2N7-#O zDXXNaXAtv+`~~X;Q`7v@mnX*_9_+QuB9En5+pv-7V|w%PTxnm7+_7sBABWi$T! zJMVmblN;IYQ{5%1uI*FEVZP-al@HBVPR8+MG)=0tY$aa|3L1Jk3}Q+ce0R>y#dC{7 zGjSa&t0sF^fu`s~sQ#YN%nCZxj}QCm!~1kyA42tgW{#bM^o*lsrYxksEPcBobYf_F zsGbmAJrx5gzn?bps%QEb6kO{sS|_$gHuS^bRzzv9)7}%U>zp}Ixv6sbI;>D;n{Oe+ z*yh`bYA|;uUmxbHyEIHM_oFMjHFywJ9M+YwWuFDu`Fand5aLvY^@iRBO+usk0wS9_8V-?xXjFez_-U*gP>Nd~p+fcJP%-v|Z zrOcc!WJb>%N(@R|*x%WMPI{RFMhFcb6iwf4KBt%IoA&N{O{tA>`^EnK__z7~ zDZu}K+`o_Z*gqo{H~pJm=-=gRd_n)r=kzjt+pT|ApZYc9i(t)pqTUE%QY?M^vB!>= zMo~QCMl_U@OIetVa9_=Y@%!eaM8buJTLv&!A% zLk}X}9Y*-x<`d9s%hg8ZRMXjT^(IYHqqmA_jkIm8YU;nbq3*R9v8tXodZxB3o$t4X zz12uWT5DGE(urSk*@V8mWhC!c*>6^Ea_PWfe23s2`cWSRFMSsu<`=l{VQ&*p^Ap!O zA$wz)Gh|a&i8F-j&u$gA;114*hnm4Ha#+ogGju9iO z?nM?cD!{0>Il>BySjrhK!OCj2Su2w}%{en#vI$EW3^STdpU2lUZ&2UeQKzTFA)G0R z^?lJA-Bck^9dBl2NtqyiX{X@Q)-}Mj6Reg0DX>tt8@*dA_z7=ot8h}SOnQ@d#{^JX z78Pelym^9flXt76R88JI%?V(a=n7bfGdI>57+82)fRciquI&^HxxpX)v@t`vmMW>n z*p86n;-Hu&jh>q7or_*~F50Zu`_+sd?y!@;hHbH-x=Jaxs?FR+)663@b4Ae13ve1( zJC)OnE(LG?oIWWK?l3Kn<~7qB=(WtIbp|G~;H`^=37N`K6!)jDk<(&6>03(rCQ0Er z1|$jQGk}h}tp6(yP94?nl?Q=SRqQGX2@l|dW?fAE>b0izE_eG*{HP;yc0j>Hv*5f} zvne7=uW;LTas(1ZW-mrbYsPKzcVU%^w{zsXCg}=GlnMQ!Uq8n`K0+DYO_B?{cBqO%{HWS;`k9X54ZzH&+OwmkrxmcSy|1zNC zEDz{DU=wS~lElQ*kdzoT3E zi6X6&G!#|--8R{Plw|qlFlTolq^jOms6r_#a+4LD*TBUd`1BvEFLh_{Lt^ zY^`uOoewcf&VLfmVuq*o{FMu3d1R3u?sv|!TWP^skQ%#}Jaf-)VgIW#u9Jv+#u3c# zq*Af*{qbZ4f^-fBzhCYmVjZ%q1U62zV=C<9CG-Y<`ZCV7J4z@ed4Wb69Ayh$bVx=B zy&jz$whg_^u@ax1+(k&T_Iu7&g@w;ZqNp6M^DcL*C2VSclqj;^_s*+OWIM^>*fsm- zkFjrd?PC;KY!Ms$4>1o!A~(beFabd2)3(b5&9E1Ma1hdSamK1kCx#VRi_pL;)3 zRtcG?TXVxciZ6%BX4`i+A2FQJrE9ML$Xi7Oj_n_DT(V+RIA@Tq75`CeZQukD3m!PS z6a$DLK0PQl1V-EZ2p)O))2q+S2RlrNRqg{dz1paCvsdOU#ey|X!HD1%-3h%g#RH#U z0nEzNxu6->4lz2Hy$*hEY0 z9~dBzIs42&;VSdMyl(I}93$1aBth|`GZQ!)Zt(xmowSdPG&lH<6;fiu-MY7KJTR!g zzrOfJ|Zlo!iuz=T3pR7mR}b|d1U_696c zT@jYv*#yPz{{#=@bG`I!uLfS&QSVlP53dxb`Fb9_TcvySHkq6HE+--RDKRl7^587F z?Nc;d5%0QTDDem2Y}qhBDGSrC8xza6^BaoyOuRgqEynsS?}^ojN=$}6vb@3_v9;@z zCNEsxh2*M`OyrN&c2i?W_t?%0i4_Az{klEHgU`m0YpDN?CGeRs6JQO*<^bMz+Bj)04|;bu^A+N%)9)xYFwLLh)&^P}jGz#W8O` z{FRh~Mz6OAw+o~9!|lTSx*hYRP}6_1J0LnKqBygZ@@l>8jAsdbyV;n+e!Nn;XhDr> z+~6N++99`{X(Kz{gMJhl@5hZNx1PLac+R^`j7{dOdy+dQPcsP8tF6_wo@}pThdE1< z+(i=Fw&mc~yGx_!j z>gTn-J*mMI)h_(l^z3J(d8_7pDxaU&zWM$(lR8S>ojKD>ZZut$eHvYLs7jcjuKu>D z>r#4}Pf|}w8c#>_N$My`we&NeRArNnrknXBb(37`rK;w?d@p6havArWUz`V?RMYjf z%bq2hlX}d&tgs-ymltaakn4O@5k;KlACgosVYuZpXh1qSoyN2PPHRu9lA^9D^Z={#mw8mbgzC?T7tJ&BA^|dR6jIx+s@Bfjm$jB~!84}(^i|{Ap%@MxE#*bRW z&y0pq23IOZX$s;8Cst@;Fy>3F5I%)sdnH;lV;HV9cu5sxOlZp3nag}0yDCUP^fAn;uHeS^DQJr{4q)c`yzo_0wt;p-~_!FtCU+L0^ zmMszB-mnv=A-Ci+>~vg3c01EMs}w~&o;7qXI%0MOfg|X7!-(0X&VqkI`I->jXHI+` z$1G}VBE)q|J(cmWc7aBopdEx+e@142t5u?fT)Sxg@j{6b|BzMbQhhWx*-W~3Y- zos{fxWODw5esx==6zb6t=qZAWc{63dTV~qR<=L5mO_yH4XjZTWi`V)RH(r)|(z-3J^rya#k zO0GQO>@p`lUv-lY%ZTp5jcl22ncNvr?G=G6+swvzL?PD zH2y1+oC)S48MJqbfJNs~s(?kq zNi77@M@@;b(sSF@746(kv$lk&x1hRJ9pS7r$@MOv1E4+~f!E@OY@L;K4l=RlwL4e& zx8Wl}RSJMImCE3JClq>y24X>rJSizhukRj!dJa6BnYgoSN0!TkQ)`oIhDb1ANTBNUI}uV?^7tL2)i038_!vWjz|)wN zs+zhBf&y-!bqz7$1kC!}ceTZIbC8qmw z{v~g8#FoUXnhy)GIe{Q}yPSVo`329@|js z?NrgjxEFw{H>!$6pJXSn*1rk8s_u!2_364wdqrZo3{*q0(-OH)Av;S z^bBh839NWul6C1Vm%BlDCq^>!bZn3cLg$G{<~QQ)I2I!4yk9IO8N>v;WY|guzHA96 zYI(netG=2KVDP9j3i6EbQWgReH8A;mVbCl7!9TP+=I_CqZ6&2~1RG_S_2ZO{3+NQ` zE!*mZa*Nco_=Ot*a1NCi|DNXTh>4kZ*W<2}qN3Qs?m!@lL2Fgy1)y6oPMy zamHRyZ8zMf1cZopd$m>sHpuw`%r798KyV{{V;X;7 zy+xg5P+R%Uj$i{axgy$o<{4;ALKacVT$JYF{d;B&C|&6+ zDZrcSd<=WLnywQ>3iPNvNlsBM_u|Zka9eHpGv4AOFKW}jmX~lxAC2`3P|brP`)5Ae zE&M+Dc?Ywq>0&#TeM^t|jg3z19K{(Q!auzzAh;7VXYd_J31gUf)GXBVt4Ze;c7{~A5>@kjqd1*|a)ODa(nFYsF zQBdwmm206K72o_@@k+>Lc>Tg?vx@K=UJ6jOc3*$OPW5GT?NmQN^0tyy(B zQ)ad=VYWGnT-GN)+wE_DadpX~bFDvMgDDa2;<^dZVOlyb==}q>vSX5iijw_{pd&=E zX-L;FhHJ?oP~3kv-Ut@ui>wd~aT%^WZHb*HNL*(8Z%C2247}uNS zpbMYE*$sD=tnsUD54mv9e1vDqTF*C8HYE6>*jAKm?{GRZ6njflA3T5v=Sg06Ie|2d z<#ktJh3R^GCv+n$+u9GzY4lWk8a=7kX>^}NOa3(4Vosy+K1+qwtDPl3(1JFqd~?1G z_S`qEy6GQlyJ;+y*w--Zk`x8Q5|5~+LbW4S7A&9-anhXp-nX(6Kw%6B!+x<7mxk)q^*_0FD6Ke*oV~@J z(^kKiO0M?Ta@vl1LnCvZQwpv>-k-QRy}3HUaP?ob?%~0-$2mbNC2s=&Zh#MgVNCEf z?6FJ3o}87t{S~8gHBwjn_3tsC#lf>hgp!}(uaCJ5@%3T~ z7Tq|^t@~5#I$3Adbjc~WJH=RjrN>Tn)8|ZLb>3oF z-o9?y7NM5(Qe}q;N~20he;<4D6$x7E7&{&ChPp;9J6%7A@h&>qwXd4*Yuxv{4sD;e zQ$rj6dPLU%pPpsgljYb+JfH`%>+2f$3>MjRq{xP=GGSQqM$Sgw(j8m%e3`nqCb}vN z-K&IC?UaQ~ddx=tZGm+B>QRVmW_%};QtQ8UpAE2jwGFWPtsuZE3MM2Wg4_@rU=@&e zRWSBtWt^YdXaqg?JNt@d_ww5amLRud-gh9O*>m#h5zuj*6Y&^1^2H{SEr z7!?>z!?U>KGp8WunW5dy#Gqu2VBSVR@4AnixuS8dF-&3ynjIwq^+DJ~O{*k&f5_dw zX?&)1FKjHXFLO(_b@k1MQU(fNvD#7NqVIZtM-O0n1BAB428nAz#(>%0*G(!~It(8q za~P4&m6HgMvDcEobzfao_-TVlb+Ysyml@!ot%AYw!&R)rq8p4=w-FO)7)h()Gk5zH z=!FRznrM-W3s4cHxXF2rdG*(xYj*Pslglg_D6dWK1qu>HZJEmgFN&Rk@O%gnIs2O5zqI&s-*#1Zx&5WE|5t$2*q!KE0!v?vtVCmT)DtNw2m zm|83Hwf4=|N`=9Q3eGEZ=2T*?$A)=x7PF4TT`+mQE5|siSEANm_tsI^KY;BQ^}`?p zvWcxkZA2QGG-AkN*Lzw76rOLTnC;^DCEh%3Vs`I3-AGbn!xAgMqBR^pHt4H2VfvhR zLi7<*sOa|udor*`>tKG}%&n@;{}E;ZJd54;Q+oF1l~XE`o;w6ShPONI+c3S!dsGC{ z_3lgP2PN#G=w5S`C4VuPkNxkvJao*}SN-SBlQKwPngj(K=9Y{dLTsQX_+mo1z8+vL zdnLoHna$QQ9+#4*REco$SLWeQ+>9B2!x$+W?eaPBe`{h#`GcC-xH`tVYN%^JxYoF{ zTO$g5hLKW7SAU&_TQK7zo4f>wMO&S1}~Gn4OV)eq)JB^M5n4XUD!y!o&g zxDEcS+i;OTMUBXW9&+f460&&rtlVaXHMLfMm~4?lJEk2Up^$B#GmMvz(@f}5I1z1p z$sPTi=8ZfwcfKq8mMx~fD;HUL(K+-t zyp*Gh_Cd~A@O@|RL0)tR8NN(jB%#?Ce7kFB$WrbXPpAf}S zt6;4%3f8s$#ob8*O%xnIVpF0uuSb%f4Y>Yz=kNxx)ZDkjvZyQxx^VZ+hF%>LLD`yH zt(-T!9(WGSH$xF(6qI8qtKK!Qq#CLe@QZo*jNuLnp_PXrr6IC18ahOpgA>ao8zr7A z6CR3zWGN#eJtrSIyEf4xkqehM^vX#-;e=sx{BrgWAXB&WOUOWh#%P z9UYw7x0%I&7t?ImeMB-T#FUZTvrTpHISa1l*-{&D;2K2npw}dkoGGA`<-jh-(RlJUiKv$Hh|EiOO-?eoeqGOMbTP2gIct7ke&v~f zoeiD|rmByIY-h^8by8WVy|^gZVt}U)8z~jeG!``=7@tUmYGX?9+sZd5v*c)?-7=A_ zy(I2*%rPbTkiCy|Hj_Km3j}P7No%P6wIqe{5y*xmAIw$$@=YG!U{oWY@|6>+yt*e*UrmF1&<8A}Y`CRAA2||zi9Tda?EC*lAL619 zX^rI86!al$VrRl{l#9IoU+P2P1AFL0x{OT|ibdpxK#~3bjS6&~zcO#c_K4~<#x)Kv z_+Q74NV3Ua9c8BYIrxqEUI6qZ9%5Y1e0I+0v16qW&*GB_dedBOjYSqzPc=0!4r!-yZZyXa0v<<8JUPW6O(IS#jO^ z#mJe?yB8V&rkY`j?7pG3;jNgWVT(d{{$G!GA@%j(2fjpq_W#3pIsE*=tY(+EYLYi| z-tCG1(s%Cx|J(1^cq;z)&EMGQh+i*aeqy7zM|`5e)=yqV9hCl!Uf5Zx={e!0mB*iY zHxkP9Jo5!s=rD6Y%>JZGPzVY?)uV84$cTQK`)#BjZHI(}O`xfQeso+fes8$Z^%Vo) zFQExi5BA3C=S&gAf&a03@NUW!Xv4)~`)~+gz&3!wC3GSnwNCT7n)2j|scbszdh!fv zsQryrd%QNe!tl#hgPdHcjRFR_j2~~V_+wVY{Oz(_=VbcvUE zpUA7-nzHYaPkO-StLc`77~Al?do(F){gqQqwap6M!REaW?Bzar_VTthU(Q}SIT2#< zM)5p*`LA7tq=3DA-=u%u^dB}uW!UkuFgHU#Sz#odn!JJxr`a7BaLwx!JMgB87=`_!$OaY%R zGWe7y7V{(-@Z8w8w&K`;IV-jEFXLZq|7~qx1v(^RbtrLylX{6CXUV)zKrUeS@X=UTr5$d?#ElOf)EeFo7 zHejp%Lr|p%_s(kD;5WXcU(2mOgeexWpr{TbagNfLzeLFBNh2?g<2d=OwTCQGY*?gD zne#b_t@W=OR1|vVn~b2V%rO5-tHGiJ1do-p^9$fCv7VnWI5vnX3yJAFm8eUFGL`?l z6J+u_yZu3RhaNVwXEZpu_<@nSb@31Lls}4ojdH=Ax~~BF(z}5C_@8Pd!F<~+T4$GA zVmamDo|C%ys9uwL!MtEny?Md`O|4|V)I6Fm!SwF?Ga7mCCp1#19P3ro28osCf+DB+ zIF3$7D^!=oh~k&+k2 zXZAbB|Gp_|PY8(>kBBrW8qz|m1sy`Gx`o-E6!KH@Ykh2=tIS*+VA=kF*tnkg2*BIG z1J`>ALAn2p?^+^@go!g;15*wN7xNc%`MJrq&i^TwY75y;a+bJ#nlUF%@I5gdf$q)S z^d^xFCw7)k>$jA1d&qgP^ZHA<0>T_$&_{}9pjD4^ZQQeo83@VTOnp)OpFHM<#wv*W ztqg>WUr?P^&J`uJEmU&;wBy`1N8%hmkl9MGAW@UZ`r9}6LjDkyeHVr59Vm(r}3 z`!*~DKFXhHkxHZ20T4<63OHgaM8$ zxr{5w`bcIhY#Iy4pZyC>U2I_X;{()ln|-%&l7;KV3ibn|47^(yjY!2KEkl-e94)O60@N!tv^4%|bJq=|b|Yrzkm7 zc~{V_2WHYO$$YZ=&@Cw%GL=oix0Jq_E^osM(QuIKDa~q!&49WvieBfIhs?ag-&y>h zMKwL__x|^szos%*cFxDIW6qN+LZCEbpDWnm)t{LFga&T74N=9g`~^D!VgUX9o6tlx zWx~qyB63iuRIQvu6>_s^A52jPFXPHyK$6M5C_&75zo2z`}1x{8b?w`}#`iaa2o2wJ#WZp8g zuf6blf3~uQ`h7v!X0vm}hTx~NRa2H}>_cqhE#|RuG9}o(EulM&VqFKat1f~+V*e$S zI&M^Wb8YZH3u^ojOsSnG7Qr4$YUhbVuv+89N}0C`Ct~{~mKrIpOkD5Go49rh?L~R^ zKp)=wvG8SYJ{CyC9`=VBUqU3l#NM^(KO+#jBdCXb2P4KQ^a|Ksb5L1`AWBFp5M!Nq zzD>MHiT(I`4iA{egG!Ri5H}O0m6c#@i=(V3xa9&PfJ8Z^L$DU{-fYw{Ja+D%NCKyk zIJW}5#+lK4=PA`HrJz@!0%$_PTQSoYNNWt z<~UV4*D2EWOp2nJ!A9c}^g`A~m@C3{gB$l75#mNx+885<{ZQl&Oj#?3{Rp^{p-T9* z%tZ4;Y(_7oD$1x^=)cwo*DYr@oY-@O*c{j3J%Wm$JXH8v!?t*A71WD}Q5%2}S(6d7zU1Hb^l(;a5G z8>n(ETYH+g-5kdvULrxi0?6~GUMkonm4kX+>^`!qOL*NSH!QB`0aria{F;U>k%)~z6 z^lsHYq^Wy^lUbnvthje(S;o?4S6I2%i62^dm;T ze~^yi$ZLrcF1oQE_=EDP2T(}LI%j`l)Gn`ae>EgUpXTx@yp##nWPG?!nJIVU>-OW- z`sn>sm=Vmaw+f(ART$GWC$c{Id{uJmTe8-0H!|(vw8`tj%A^`1<wI$bB9NFx+ z1nhBN4yR2X&?S=oX@Dej%rAP`?iaBr1Nh^7Ll*pNrs`&sZ!+nx$4*4PVeNP7^7cFb zY}GD@(D4KF04C<*Zz#THW5{dIJ_aQNT_c&sA)tn+hB&5S4css@#8Qh<4|h`wLMUd7 zC_(G@1+9O0EyuDW0YUaMK8TU#;}PcL2LHNOEJzyo^aaXy3Ib9SEJsM+H>mD@s)O?F zt484DhN)w=GwPYB*MI%8yFXfJ!P3ZH&93Jx$rviOCO*6e6^r8{F;~`C5$_*nB1<)q zc`2W3=-kJQpqtM9nKxu!sWyIhr*mJT54#e1=Ko5359r;?b1l7l6Q~Q_e=GiOHxmAH zhMTuvYX5=8W94K2tLQhzA(dALgV{S6%)8LIJq@PEezana#sgY)??+>I*Uus4oJ)p( zbEfO9vqwL-CU(((sIxz|aHg9qfzO;>Ara_#n`k)PK6e;2Hs6Cxbp5Z2AyCpr9W! z_E+Kgrt@7#JW-T??6H?l3#jZFB`iZ^9IQr|(c4*w!Li3_?#ByD&_KX?uL?Mvr<{yP zY+(n!roY{R|M8;53Dfqsye8aAzs>UGG)#NIN$u9Yx=2D=J-Rj{itr-y5Fj~P%nDM>vWy%)MJD8M?zXYFnC zgB-VLjx4NWm(&`TF?Ip4DkBrM4NStEUlQb%Vp&ep0taIc=)Y@aIHxlXL;P=|*gMb~ zF_nhP}1(MHM?bq;I)R_LIBH;(?Aiht28`51T2CK1^?>TdcQJ|V6%){k>5@2(xfnoP?gfh&EN#4%j#*W`go2)?qr2P7`*&%C(}KEHd)W z7yVzKD}oCE#I~(M%v4SHA{k?U>1Li9!W%{h^7xx-APjCyWMci>ex#dbisD1? z*qB-zN7t9p!1x^DGxOBN84!E1(@#d<0L;sC>MaKDYNij zf`IT)@EXQIQcR0KWsyLI8nTVdKmb10fVZP>f9eAqC2PV(rmWY8se#gYebXslzbV<= zNVrnhcUHMl^`2N>u3pB@^ZHn4IoCKG#QQ-kj7qf2u|ZsvVEpFdM5A6Vbqm{UhE723$LJJ$Qv{# z`+^D)-RX+>(aGgTUWIo`>LYqzG<;io>ihJzD3U(iO+U4moVsl*v0RCaL1LW5@}Yu` z4a);gSgaiQ;w{=%UJMhtfz|r$sKFb<;Sta*Gu|=r*S|wOCa`yEtC&atPb8{V=hlBv z2=lAyhc>1AvhEjCMKYs<8-nE2R`|&5kHN(JLfZW@?~3pl25hmu@Irzg@co6suXX;v zh_ajg8ifP21@*o@&7hvuNBhex0@SmT{oL=gxmYWbo9Pk)cDV+1<|+?;vLcinWU9%O zGqzl1e^T7^y?V+16L2?r_er8m{g=~pz)FJP7n}N>=H-kjocwG*C(}W0we}<1S};H6 ztn@<-ycWEf!vj3_bb*LJug7k{USgQ)C*i87H(1N>GNWJrckA!Xac2D;06nXaqJgLr zoJ}YEj=_ZK1;Qdgb=~zA6*mzpqJS)H-++S5M=A4uWTx}|oRp9U91KiFR`AxC!7srh zC`)D4O)SRmnkKC|JvL?BV7+>8?1Byp>^o#HUi;vev(CRqyty0e{6Ke7z&hV*Q!MM; z@A^}E=-qMemA@l%on5T@1)oUdyHz1;A|0_!S%6& z8#A53Ewq(2Uq+4|gEJod-}?ENkLt}=zA&n_-ATcyT5O6PRoV3?nf)nGFe{&SP{J^t z{=s-|)XtLk$tdeN9%gB!V31#$mGu@B;idga_Mdm{(!84&#-Ka$`ZGa?TKcW|x$}W9 zAIW~*-Oii-6?G>CBl-KwX1M=$e#SsAG@d%!ozx3}v@jm#r$AXM=NQVeHt2r;p!*MM z%GCcz=HlJ@zXgKJG9mt8!MDHQ8FPW{8q26)x)|~^XaCD~!!NsmRUSLY&c`ih zTl~_k6ovjXA3^`~HkSkUy}{5&f4t4#+^YPUi}$hKN{0yURi@u@TqjP5_vrk)`E%*O zzf*@c&Az6N*a7XSMbuKn3}Ws$_7EV#N#@33$>lIKqR`)@uh#4vvUJurY~km}+WCK) zEa|6|lk(-+7z;kXxfo{HxGS=d9%EH&r~2I`P*P5VS}1nA63c9!$o2am*8=5IbgMnq z)gI)!Qn|SB>dQ#F^MjwO3QN|V=AY=rlJ;y`&&ITdG2LhCd(q$4s4>O%?MP`n8oXeV zT@24yh(B?2koWmsd9^8$x70+;DFiUMFvxqK$?G)lN29jxAb+21gQ**?MI`?u^0WE* z-w*P)nOc`ip$kVKErn2ZZ{}OH(2$Ga_k96L3sZH+L_1Z7+phMv)0ABZ2`dc!LFkci z;j;!abfo>=^kPBC{qR8tg3i| z4ML+^WShEHV;RI)1~C?cxDWqKV~JNJ>W=TZ>fXgu!}rX$*h$9c%rF7pzLFDAI#ngi z8<7&%jX+e$LQCc7ukO87-KQ|2|h-> z%zS?6Zq$2G5~GuhT9)`O_!)yDhxb&=y0`^zbiJR5g^7AUQ7h(@6b0IAqs{7fxK5%ewQ4NLeJYb))@dfB1N9l*tkb-Smx6xQG@O;A zo3)Z*FePv$0&B?mvrg_!FjmpN`TGtZ?s)me3n72LEgPO zrOf$EI*Hh^;icG?2rX_3vfX5}O~_|6@eR-7N^Ac&IJ@T$d&l=t75WAP$VuM0eU*RN z)B0|_)c^3PVzxQWk5M;Li4a5fQfl_Z6ZoTmowEy}fd&T+hit=F!h268Qz*^_C~N&Q z)TlHFI%K$r?hB*(2u-EF}dC zG{-n@R8&+YntWGQ+tmjx2DEJW%#)b>T5OOi!3fWWTXW+4d@4+V- zWb7A2{t`czYa5e5a}nQ`IUlv=dVkr)yUe-wLsq1hQpH87e=uc5saBq|e`kS=92g&n zjj@|HCq(SANA_dT8G`kuP3vApfXswV+*4x9UJ*MPq=@Y&ZXZr6RFpOc>8vUYjvNG9 zWYG3=DEkl}cFR2CDTz^>g$q5ie>kZO)*dCk8Vzq22=U->How^GRS87hs|0Cl+d|SSmSiMCbdvY5BIyw&8ClBFL2K*2wo847hb7eZdVj?;76YyV7_}+Qwf8dfW&{nEy>foCD!HmS zQnLj!0<^guZCY~Olj#5J>vsBvGEYVKwgQTxdo_KwcV0#*N&gBE+&O!FI`b^AYWP%; zSm$m5YR+;^pO%5M;J^8fNYKjI+U<+BV5=qOiz1RbsU>{zGV&@_B;i3K2YX3jp1O?> ziRF@nk!!Ab*-Kapf)dgoQ~9;2>G6OOdTb>< zMhL`Cp+&(av4bDudfTS=^u6K(j0CF5E3Fo*+4|?*MNp}kf0Ip3DfiG5S#6zv*asHu zbEsiNYAb&UZJZY)eXm;pqV{zH8}>iRKSqgy#tEEaEX(3Ob&}nN0NqYdkfn+?s4MeZvInP4ZFB#|$GWm8uE#n7S z|ML1J{rnxztF%&`=2I!b@sgOJ%;>phuW2M5F`wojy^uhyyCky^}mJt`1Q@>61oAP6gG@w6qku1v0}m(Ce2v9}7^N;2wV zB&$Xu;iiA0vY5Ph=7F5?pq;+q#7wnn(SBF3G2mE1m!KZPOQ?n2AG9k7^J3qCBQ7UH zgQW~W=Ih_KklA@&0JZGd_>f|!>E&-(xfDY!!O zBfKY<=`7Dm((x}knOl}2INU6n@$~N9t*;DMcSSYUa4W!Cd%ur6nft^xY(M|c58eH2 zmF^ScVj7!Gmx%?p(7Ka%gs)!Zv!LCYPgSCZm`J*;ZT2Ay=lbtMHcr%7bWpMJ50dsG z`d9p;qngkjiOFT^Sty#mO+AWLUY*o1Ox;vDd87Z|7&)8#`A7pnyb}%dXOs-?01ji0 z^Quv9b1?wQ_FAx$pfFyf3eGQ0^qTYy!2g!P@^d=X9Wib2jYsyfPwjEN+>g>=3^{`P z{`x&2u0e)}x((uAi+M9)V{YK>L-VHAxJrV5!?-pU(YlGuQV11Oh=+oGNDwq*nBp%H z8gNZ)TGVS(aKD!9=KzbRs)o$?T;_Z#zpIfuoF)@sa@JR6kyNrKSNVO@-WH8*G<6LL zw+N?Y(hb8}HGH$FC0BVFC0Vk#-6Pl;M;Qz9diBkfb3O6X%_DLlbOQA@DZn)Q!+lhF zY{R)eGw>3^isUM1HRxI?t^BwytE;-~o5cIcRBpINkvvVT98C7kQ>IMi^CZ#%U9z%a zlre#eozA-nBgJivnX}5nIW}2S%FkDZylt$mNPe$G39_lw0z=fp+MA z&9#CRbM2uv4%o{p3}|DQxL(JVBd!@s#5%d(bd-+01Y9I#7Adny!2#(^w`Q$dvObWv zJY8~Sx)g7Li;J%WdgzbVYgGLUkmw=~v7;Hs{Yg=aZo5y7(>+COoZ!l-!cLw6dJlaK zHcI6eN?&6mqE#ShUX7Luy`~#Oy^2xpDt&_P}c#; zT_?qB$ayS@u_N*S8vc5?y-&zl5tnA>Zc=9q@S@cd(3OPKPCmE{TB&P@^Z@?kBi;45 zKW+l|2P>48w==o3I5xQD%wr{m{VyimBC*O%xD4ZoamCJ(vr3#LUoDcYKr~Z!-FLWk z9<6|kw%km#y58JwSV2b#+*%*-;P3a>r{fW|}DUIGg zu$N`_JzqQZ_kga57=ThV4Ee;5F-c5oAYV<+E=AvS9}ROgX%$L;p12dUqQdz>n#Y!5 zrc0ym$z!lZd(TOid*_xC;FcR%(k{;f((Zs3!KkCYLO)#ATBQqH`8On2x$ADq<2xh> zp_w|j%Bd*gQcRv8q-$bMuJRu?2d}NMBRRSg_VrC6b}0fX91`#@m_0-TNR5Y3bq#gB zbE=lJZvn2~siZLdQ66;J&idfPU3xDwFA9)0MXO+fnq!50588sc?r@39kAn_ZKTuj@g(zf3p)X1?|k!O46}&N@CLULfW8Bl?>wGOpCDoX5Cs9c6TRmm>BGBm5rS5r z*HvHR8dT!ERSnNEukV{1de_8*+n(*EKbKziO)w!0xLBl7ua?m2PIGxMSM^a0zFa1o z^WHO>kj%JExyt8%);%Y`ATgqwV*g8t>9GQ%^)-4%laU$sG55jRPi79T2q3IotQ1Sb zAz^3b*oySn(vGoelvsFX5^+q5A0GDlI!~{2y;)W1vvn2j*orF^#d$abzcPI`XU?&M zBgtpWU2hlHF_o(0Dfu9GjbV-e=DwzzOiw>Obc6e|yVQMw`(yJIfcstZV!^G=%@8g| zA5br|T)IJK<2mQ`%`>WltB_l28AI618WQkHu5z}iRNGDLdM4Fu@43o3CRJpa#43&|7WdY>jBjO+YSUq8l8!G#`-01c*G}&|R}na>tdNIXYHrLuS6kQI9-G z#3eJnhj{4{02f7LQJNUQfz}rkaQEY@8*z?12p8J zqnOPl*;Rbj{1Zk?6`yP8ttft*wiZK_*=JBJpVeME+H47295k$nvxQ~7^4&G-LyjL+ z4UpTxFbZasu^h)oav3|gVDur*lGE!GyLKBt zCm2v67{7ffjDHG)ouu(k>NWn$8UME!|5t)bi);W6e&l;t(Wo&Rh#-4YNb*7o~ ztcqT?I@j(r2q6+ffWlrPxa3!~rP1h78b(%;l`@nwS zSfL|*S6?3FYd(Clf}qnmV7X(yH05c#80b50_irQ26I9~7ycwzqE-`abUKt282 z_q?C;d2Pe&z4p31>sf0(>silj>G0L+1hOWn(NWj8E-V40@anDu&g!|V?>gj^*Q$Fh zcA_#OEP0WRW3C0adFl^je}Ny&^Y)!%B?U>(qtd)@_w5yq=UzBtWQhX9`0efB1MIG$ z;cp>R4_fQsoCi@&2zqnDxuQ2BW?VGDSO1>~pzr(Y`)ULPZL|+YukT7pe@;y-jF$V! zC#Qn#G!f$NWb_5x(t>x-NS;FJ!&km7qJ~>maVej%ks<$C)RAck|I6gkz<@k74!SV4fMW#bg2o8y zy5iS-e!luEar^%>{bh5OfB5Nh0F7~<`zAApxb@$nYrm%(9A=vN5!a&ry?(Cx*N^xA zXZn{j{wT+2BMZq4aXY|;k}Kp)DY2uqXfh-~WMWDVX2AV!EfTF_InLM)I&g+$Gh*w1 zHi~&74v|q7vb9Fn=5RyJ6uCFnhUH4;oHTsXE|MOFh{%ve`volf<+YdBbr^6I8y73I z+jDu}8XjOl$Khl5Fwsah+Z!-#l(lADN89(_C{-Qy?G%r|bHJAH<%npyW!FR~iS_~5 z*iH61_o+~>%;XV?XzUAt<$yb#>NAT(3?T$Xp)ShSP3@x7Th>ENaetWpv*&mq%Ig!` ze~OCZuJ)F#H+qsAN+dr%RR8QJWzqqGdg8Q1xbXWGq3V^K2fi%tyWl&eD7ac?Ncvn1V=8orSiurm7Pt(j(1wnUb z@e~@KoWalBquH~x!+>DM^zhUbsdHKP|i-XI<#ylkyx4iFd zULbuXqvbQKZ6RMGa>vwsRMvDA@2l=lJ+ZXvO3R~De8G~8hI0iAp>~)R7 zw~_npI}}Z?MuTtDSxhIn|#u=jh5g`6teytl5RQ1)cWY~dcK=*%|7zrq0ET*Kl&A2vgf z_0@?1KM4mYJ5`V6WYVx7K%1RIHTe#B%Eaity0bEqUCosDyHerM^w(om@)+DsUWlcf zqC_u@bXY9L_b@aVn)lZkO(S;*7=05$6z={rX9^A!{Vu-3HvwIDnyjRf^ygBfVnHd z)d9!JM0Pvwr3r5Ok1ihPVawrh{!HGX`Rq-s zLdU2On0|D&(_Am7x!Ry3Ecd4q(tsy-UE;mzUKPXQ@Jz?za92>q1`KI-xT#2c5@U6e zF&)@!KXtT0in&$}q>RU!=wewD8551gH<)up4^tfX9#e4J|6vW+HYQ4!9ntPTbtSoW zMDI8$1&gi|IsbLpbG?JwPJ>kMK+xg=yq@+$1;ZiVE0fgc&GsM{RH^U;>L5Vviq`gD z_zEyi-w5jWyWuLBY)$G;azSnA32N`zrxy0}g1w1v&Y5CYH`>-w&NSMemCyxm?>R3y z(+AWZa+U+{51fq61$eQ3xwy;v<@A37@1K@+;jsYko!v<;ytg!`U!Ha!XG;OrvU{^i+tXlk*wUFlX8g1z_gQDXaDdF(JN=c6PL*bE)@0i4&$#j_X|?A zQ5WaZen;=?SWLX*w(V$egLU^wMeS&CMXe`4#q2Rh^TTy$APyM}n5f6s-`SH-Js?_? zy<|7arMi1fgG5(O`*yo|UM5eN@L2v1BVa5})b)*|Z>dgDV}ah`As^TkPM=q7N6s-s zFTNiY%yTQag9?Ve--G1s-i6&&@+q5+6va;9N%ufu8BstRWxr}N0CpsG@+!8Qs3I3B zkoVqB#fH3p$(KSouDnhACO9SSw|aaq(VmrEq5Yk$K$0fS*C%dpw%{kgkSy}o02HXz zpsp8CaD*G}4pcj$jUqO6<_sJg(D-<9;lP+9w6Sw^Y;4ZQW`>hb>BLt=kaGUz-Y#(p zs^%_~{hV+0DshiHf@+3qHYh=9Z}UVRx@#E88=X3d9=o{Eu#Gz%ZJ^wL!dAg7CH5!h zC|c6Z!YS;)4l3_v=qG_l?BoGA>o$q(`35$)*HYe%r1HxaJs=nSm;%x?@xd`jVurLjeEm zC%2RX{PmrFZ`3&i!2j!Fnpg6^rW2&4>plc*3GK~?ZVhjFH{#hEZhx1vfKe3(I5okC zcK+j8;9ucG9j!Ae=blG`8)m~3xz0Y?L1&#SCjQ1InEC*0mh~cudEa+WWTT*Da(6zC z^m-z%BZs0~@;3hszRtn$$)Wn)u|aIG2TP~z`6%M~DBHo;uxC>^6_t>={|c>mJjV*k zZA7MBvCEULMr$f^-GZRFr~FXIN@QI(R971Dmo!3-v@88!^)xNch3_q4Wkf7v>S8Wn z)7S;sWUOsZ>#P>GzC&=F1IUD9i&+&n8=^G*=Nit?^jn?b6erZ^*THVXjir80c7AiT zGyhiT-i7#}`Yqnbv!Us`b+p^9QT+mW`w)%l%{`8Gdynd~;Vs#S=h<+3w)=!bi2BCfl$%6Fo+WcGt1uVZ1tB4?B(_NS%V9pjt4qK1km;sY0Yl9iUdZT`Pif3y)*FvLo6r+c^1cnNsQK96T z(nvZu&024dcnisd$r5KppIN13;OIBmiv-PI3f9iyw~XH=etYqIF2A(6iO2KodQM;x zKGNwn&=+Xcs&cgS_@KsSa+bvBY<%5`rSYBNg}d-!E}A`#`iD|~wjX?#Y0r{h=z3UK z`+@HIW>KHUGVOcOFt?lRTlr`%vCF>BvY}on4yGUjv;zoD!(7n?ugGm{YI027VW@H7 za%izvJi;`9HPXc%Z*U|F)}6?ajEC^_PH;ik{L({0BNfwP!QgPsOFB_b){0TMVLZ6G z*eD$?#(C=_2~%DZOV{YfcenoLO2L6m!1V1QXJT?%G6zI-bbZ9RQq9}k%Voa+=z-y8 zzIt2wt5p3uuQ^o&tosC`KlxQJ)JDvbGdY9;;Aj9;L(+IS4dIALE6NO7{NCH2F)axY zus@pyoZiA-JU~y-jC)&fdSTGHVbTRp@!WNO^{-?ufqMWn^A+Y(4Au{o-7%;u_qJTf zTOB#DRZja#7=!Euq!2auoa(du*0ag%1>R;&J0(o6)X&Eu`a~Q@cPCc7KT&1_1)#&N*T#GD|%ii&kogwRT?|gG@Ws*$Chg9WjaK| zB33qP?Fm@-YhR)>SfStPu*##nx3?@IV<wCs>KR+@&t2EDm>1Y9&8pmN z*PS3g?yt(QBw3i3)ycKQDitj|g$&G8`yeuOm_+xZ)*916^=Hh#J*ERD4~<7_D|ilbOfAJ9M!{x%hi;4#4#zU3vS(8Pk_;EE zlS#6ZU9~szacLVxTMT&_p(gzw?)M$kvf9+mXwwtUo+FOHF!4% zqd@9D!It+eKT7*(TC!Q1uA?fL#l?D~KW7aw7mG&khLk9~KiN(Q2xv*D{!WoW2>B8} z>KMm&;BDZ8vKgGFf{TO1BWSq^(Uy04^llZbZ}+y$=KY`GWeCtjtY|{f?Kr)i71;|h zZ?RyqBdDPpG4GIM{}3=8v>(Su5aVJ^`R%AanxjnLecNW<7M3Vu@*wjolny5RE9sf( zn$uNhr~A&Q4!M+pdMG(R!S4DS9uxDIlo?vtA=rLJig$VNZeoNrqx3FnDArxNFXASW zxk84Y+ab8k*YE*UKd%Bmq(B2zoj_W|y04X%8ARPB|F_r)VVoESH_AQ%fA|_!V!@xg zgOxdqcLuw-b?V(YF7{-wp&Zt>fVD#v9Kfa$^BQN;=x@2f(mn`bQlK?<_-|FSPi8+A zY@~oGz*?_a_p4(e)Kd)K=<6*k zDMB|{5P1;!m*<8&f#c~Vp(5s+FT2U*Z8_Y@)}SJ~Mu#F5S{h|MN35$BC!P|4D-x>8 ziaS^wadbC7Gjly1y$`C@5xmC}Xq|tro&8TJW-?QjO__0dN_k)%HM21W)><*v>6`5B zO^ztM`QHkRBTNZPXD`N)m1lUz>4$akj=Ok_q>f|f#}#Iief%I<8E=nR%f;`x+#`b& zAK_hor?_Rf$B$mn(kO6```3u#h+3piCdB-!hGYK0F?;f#zZyLBZ~o*u>}woG^7;MQ z3zDlHs4KZ*gAsQgv%e#)>wzJ zoMCpBvwJX>Ek$4j-tu)qUKMhUAs09;X2I*LjKBc+N$sOg3mn622JbbzX7E14Y6kCj zIL*zi!Qa_ikCs&AMa_xxI4C+)%4&zPAJZBbxnxXhWaQlpQ%Q2Q0&8HBOznTCb`?0c zT1@KH)*KpjcC>U_W8Z^pX`I;XU_H2#kdueisez~hgOD)gb!N4MPk0;`ryNJh1 z6}yOHkji@!yFKxKS{C;P)3bW#_A`%(-KEA%pK;#db~oM_PVVV@?Fe_pMbkH8P7Q6Q zGc@}Lb!VYz&fB7k?;`c{6W*37JgE^=X@OM9cRImIGsKtsEm*eT@A=-elz*c4!CuJu zXA&U#VVVN{Ix*sGBhT-|%hh(XN}KJsj$+~7Whx`^#Tf7M3s1ijQ0^NC$94K$R1&6= zF&%-^?^H+cZhyO6_z(2kr~$iAg@0fQb344GS>$!r&u3 zwmOf$Bf?RF$B-4hgZ`l|^KG06Y2tZSfK%!W{-z-pn1X;{a)5tA0p1#ArcoEbD9j*) zM(@{9*qukxskEv?zDhOf=vP&SQ`8*GI2;n+T~3j0=$Jzdr#Oug6DGhZPUu=aoCJLT z8D>lSF}1quVl+M)&VlJEzNq@Cd^86p!))fqxywnU%Sy+is>{9rKR4o24`e^$DesG4BdbGW^VbL4tXls?7fltHBVo!k z?BdO5nQVx+K{(lD68MIct&klbL1QZuvR;>xZ$`v=2l2LYA7^rBvYVM7G9wzYN)9S? z%-EyZ<#%Y|s&;cr$k6u#>8nl-q~oXT6^{VSGav)<&xsztWam(v01nV*O0vgLv3~^! zQI4nF92>fGc(R_JImR+Xs^fRvIZCo`QaUi=jQBx;5my(-_iG$+bqRDnp9$b&^9mNmAXk~&mabz#y8rjrP@}IRZqEEc38%w4~7rxsEEaI>-0LUYciMvjwrPzVL=SH z@VyYjz$K(u16bSrPw`@uEqyd8s_M$|uN7@+JdNuHe_bty$KYv1zk0H|kw@#Jfb|hx zp1`kS=>fsbrA4;gw-_%dS(A!OOTd{iPHF^`&06D8aGI}_h@#~1Hh-Vbl0?+zeZT&Z zCcN~H-sTA;N74gEhBPZWIVoP=A*OOb<54VIPpyPV5W8LYeW(zTD9gEPE_;xv%=gGK z&Jz8yANZ2-D`boI^S;we3(i|k@&8if3|kxQEz0R;GwnYswg*$0R>~FTk5NAX>8c_U z?H6~GL!kbItU4}p66fAiajb`#LbwEU0`W~)nb|8jE}P87`qUM>;k6*n1J& zH`q#rriLRH;kGx#D*cJ!7@mc#(rW66^RoKgABSS(flM^j?Zw_i^2z6Kdtj%^y0<7xYU+W&7q9`U}6h4%h{m1Q$S zEX*o6X0fwge=>&ky5TmnUSmD(4}LT2w-@kjU zzp1tUGG+*g(M7Rda=t~B)B`zBrgwtu?-$#oI>kB(3oE{=_cQ z$8Ps7M`bwvg#h>ZRFH@G1ZK61RIcE?4`sg1U93af{3F(LjxwC10cVTIb=P|98|3~z z-7FLv+I`u#KONRJbRsp`DnI1na9SIK(eN7G1D9U|4C^Qo@3n#s7eTo-&%O=m*$Wz1 z|GJle^vdd&k&c?Z-#Qr8V7tBkR!m6{@)uQ0Nog=?iJ z&Q+0Pn{rHJN5jQ;yUC%52BC#(*O3GA9cb+r;o6GFIJl>Wjfh$wM!Z2goE}z(io zocDnET-+W(0nEtUChexdwEM>K=i& zj!`M1(=r01$g2?`k|o76z1YQzvbXSvJ%I%Njzg2HlfJV0O(wKXu#z>UqVI4_3#2aP z#)mbE!k<|q(vph4nreE%`huwzu-;8IEwDaj!SxC#C6j8Jn`*jT3=Q7Huw%WvX}MR3 zo+u7hh{eE+>Q8}jtk4eDrp@y}`wjEK+k6A4#0drlpTYF~o=$P(^X?b?kiWcr{wS&W zG3L}~M-$N%e_ZOdPb1c)A10AZw5+BNLy@E${=rsAWpa-vH6JXMEqQ@A@3?J(Ct~f- zZ2yos92@P@yZ;@2CUz)}Sjn~JfRxPl_TDlFq-KH{;WpRDKtDr7Ao(@@xQ~9&i>k*4 zG9>T!0J&lD|Jr7Y7#wK*`DXyBzxS58!0Buj-K_;;9^?j5QSp)!s{;G5iyf5w7udzv5Wwv(ujPRErg;Es z>^Gn)n%CV_<$F`t24-Gg-VpJ8ZpANWzGn|)?wQH>@R^#Wcy*GHoWFqOf9b|}oJqIQ z$RAj?bPYpV)^R%cg4S^rleM9No%?YtgcYu}e`tDeW5lx~yN;n$9bCQRls83H#FS0@ z4p*^+DOQ5%uTzW`7Z{;&-gjRqa-0o1>-`GaSqOsI^oA5Z{zD|I$3K!h){gp2tXyU< zbI2!qI7QotSiv{Et3Da5;ZYE!wr~v|aJx$5lNWwDj~&Om==Wd+G2%PkVere1D+vhYjYs59q)^dtIBemQP#uk<4d z6$V^X?)L`PrGlHI)(&fa#)`fQZhGb0A%Bp!mLp-}K%sd-DfGQ&lUpi)7Ey*Zg4bZR4B* z{k*p|n5Qof^4@luK7Lv6z3q5C%wN#py=^d0>6>rg#rv*t-dp}m9l@6OudDH|>c``X z2mbJf6VSK&Yo6bk-SUOCrrjRw>GXV@F8yx%_L7?QftoEjPtf`c)ZO482)X&R!+U3Y zpr+lw(>93#%I~!O?Yn#Xtu{u;Z*6GLGCUisXZiJP3Di9MAIY~o>Ha0*>1*0|mn>{Y zh@JO)P}J(y;fCj-xzkG*5=|t1^CSS3N!AtZ#^c?Ch+ur4FX8D#mFWLn{?>9w>(9ErRQ~;McP2!+8_zud38;@DZ>|Q|Jg3$C0q53U1;!PgC+KhN8qqFsbY~Qaq z7*AiPdiVr?k=if&Iiu#9XBm6C%Dwox2difRI6I)Dw>(u8clsA_a^ab8%!^v@L{blR zGPQ6^aos^t{3M^20yDqj7B<$EEJFg8w^e>8(<*i$@@~Iu+K_U|Kb_q zWU!yX6@m-R%SAJq*O|-%#?gZ}L(P~y`OcusYkp=X2VCC|N=&$B zf5>VvNon5@2aBOpQtjCOK2j=~XV6yfe9Y@M9FrE{VjTN$lLr_UIxw`w4k7knMT}^5 z&Yf`mOw2*SknfBPHyt3{Efa()tEdt-3Z`jECb&d-cwEMxk~;a@&RE_+daQ;^=G#HR ziYfqGSygE!a4KlSEFDTE?$?kv(3$I<3EJgk&~#W(Zl=S0s)+BOjM}9%TI2M?p3b+> z^hNXdmfY3byXXi9rVHQSmA7uWsrf+2f#=!$o0;IYL|@j&XgvU7?mIkaTIWvE1Jg67 zxMfq_TA!!Z>~%oO$0}t9oNb!JEA^K51<%*<$HA#K?>lJ~6i~xGLdJgZPaC}ZfjS4r z!L+|5(^yF+`eSKS2&;#srmUvY!6lOV*6BotCdTLooL$~3TaDr%Ke>__bkVA#Jbe=N zYvLGdoqiW>5ESv0sLW+J8n z>86o&rCYWE9mVYu>;~QC_zM>s`Ch{R1Dd?C3qmVq#A35fIrZdIGr>=(j$>lkAC)l` z{F44Z!edA93#>jj*%`{MkdiYK+~MWtvJ@9jrh_}wy?Iza&Dvkz0@X2s;ByP6x;{() zpugf{CfIBcmI}76WFmkv{3`;fs}i(yhq6u6KQl;KoC)5pteIpHARe|*BXrMsW`vfh z!|dO(^W2W{qQKfAunr}E_SckRpfq=ZKU5($=i%krYo!W`y@I>CsUU5YQn8DIP`W9B zySkbRdjo$7rx|8Cqyyh#jpXFQ5R(|K>J|zE~=4hGl zLBxMLw*t3<{2))CqFBU?d7%CaGw6Q+dT^9J{Tc?(gbU*S#HV_WdL{j$Z9&Zahg8I< z>m{obZU7U#X&_;aJM=YW%DhPX35IzShBv=cAyiqL16Z$;(aeVkg=Q2i1??54e&6x* zM~>#?o00!X!qiO>j0QD@;=>~Ko8za*H4pzfx3SfwY&>m&)C1)p?J|D*^P5R7p+${b z?jR@oL2mXlfo;Xne9$RTUi$;@9SHC4X!9+sNOa z`77+b`fcnwd!83cJED|M8i-iKF@TOte>Xhy>vU4jbA>t5;A@@@e%2OBCM=3{wz!n08-899U+CVDO0RX|MEv@#NE5{ZM^wf8?n6 zw8n=w?R1gUqt#WE!m>Ux{PA6Uh@Z5wh}|ZVdfetMlv%V*xk<_U)}5p2y-2yV{WT+{ z23xo7Fz*}UwS|HPdznR@T?H+tpvlNSsxh;z3hdG-<$jlF zX~9g1mWbn~e?(=_*kEgw_x=34TEfvcz=xhP!8ZiFf8m}=HW_d8B&z473L@lfew#7n z#ZaU^C~~|lVN!^-lAgLVd3|X~{KA0c!MP)L4zuFYVUnS6KVOlQ{mo_x4c$6%c(WNw zw5I_gdLS5!SYyk(=*l#PDLMaYkOUtm+h+0*O0eZiVUVbJip@kMp0Z^>WH(%#AXR}? z)>a^B@!oPB?00g0u8b?y`4F(gurod0R$2UHTzEzTkG_FjGdb!zy*JAk*IhEWw|o*1NymVh+=uU5}E&A~z@ z|21SU`xa*dQqOl&uK^ZA-Lf0_;L`Yyy)DhA@ZoDt!K~&cJx|w_muC-U)AF=|R0#7k zJME!er7cyPF`$yWFh=qHx%x-0FLl1Jb-s_mBrN*}o}Kz1>v4Dz{U&+~&MbVZWJ9evE!}MBH>ahWMZN>pt?p^*QFh54|<{V=2JgLl>T^4T&3E7NGx ze6;5$@9c~Cbcp-uG(I_-fQ zs6IYknYnoiET6_$H`+V-SCe0M4D*0DlDgMyp4#qec@NY*;hclSjA0$9p-d>>zi=LU zK9s)Q6cR-}>$5$1geJGQOLFoD;E3SOXlkrCX1*8&k_c$6E()pyorSx426C`Wn;isa zUdVcSMi_h!PLP{A=2k}QKPBWR&K$|iEbM}3=W=JuCUufO`J>8W!arMO1204Vjm6L8 zD*fv_C92Kl%(_Tw0UlWkhS&#wq74a;9G|`rBQKH~o%faVLYDGeDY5@%Vcn@&hf|h1 zbHL}A5bk2kMhi9H>Uc)a{?1y{H0njq5bPgkFl&sV`MBHp$O+Is_Dl8rTh_}!DXxOI zS$DV4*&|V@=t_38?%X+cHlNHK^R_G&)`mOF(hWZbMC*3$$s1undcy9!?}!L!fT2LM za*L@ake+uaaVmFsAU~Ph>`ZcT#9Zf4#j&F-e+7s+G@@g&wJDnJUu63( z?#^TQ>2)7^5K-l0hpN7#=>1R^HMuX`d7mTbv1m6O7|srwDK;HVWC zZZ;2Z%T6KIakcXk`egdej<;PQiV7RsH-%C8W)I5!Kk_hX|21DbxcF~yI|x)?BLALg z|ANbbxV4@hl-^q&1BV=1bin$^4UR1v2YT=5TdmtP25G;X=Dmx4Ba9ai(Y7xl{xw(9 zzD%b7hY;}~V{HAxbau=hM8$KzgY}U1Ak>rQo(0!Z5k2d+(D3ZHCmU;y9Fyr}sq^zvraSkt3 z7C#YbPMVpWS!8BA`6s5D_ta?#q|1i6uOVKS73WG$Yct@qvK&%o7094&24-|sJr8?@ z^P8hNwBCaYNKg^`KXFdOGhdr${E$CV2p`9#FZo0p4WJ2*SOcz`COVZ|Apo4yar(S6 zfBr0X!gxQ+QpQOA?rSSxh^MVOgHniY|G_pb`1=65))nc&|ftAsZfU#s6;`ppEFIX{nzhqFIhpiY(j{9<)6xXkSzC#s=a z^NZJ$Lv!Pg)EThmw++n)Jo7vG+fIZy(u|(8E8f<3hPGLEt_N}~xo)6R1C%apkc-G> zPA4WOw27lhsBkQa)NHmpP~%up>{8E)_2zz!fg#VXNPXVBXcKEGN666NG zAAjIs`#1g#csghywS4+@-pnaCU+xU&`{{f~=3!sT_a4<`ip=t=99hIU%#W`M#vf-P2X+K{nOVV6N*~xPF%*c?^T?o!`4S~G(hD&bK5-o&5w0Lc&vhQ zTz;e38cdDS-Mzym)IYkv4XWpIrtod0pd^(KlbzQW3{gRTU`pSoV%Zt&!DFoE{Us%0 zXFq~$f2Nc_#Z5z-?dy8vJeHi}>Ym)cKRJy{!+UP+=k&;=`)+hqZ?n3j+ylt%ZTTf{ zldN0z?*y_*w6>jJdK9kN;oj>!yHB+KId4+Y-{GCh$sSH8gbZ9^!``v$BMxdNP{$5a z_Ro1=!&rxtk$Xi&H85v-i6jW_g@BapE95#Cx{%{qgTzmx#C@xIw4VULAhw?>gT(X` zU@F-9kq~Q81H4DO@E)z~(({-PR2HT=Wj~+n6Rg{hRyC~G37*?cRy1tgqLhbnELB|K zi8mFWnD^b!s|ivNA52B%!gZ$CSuWgts1HX>^*^U=;9%!-o%{LS9o?VLV#J}QN0O_C zTw^+#j~1>uKWw(w^vHMojh{^_ZZ=?%bqHCNV@Z!3g?<$}OtvfVQ)HZ+Qe?k|?1gu8 zQ_|aXIAA>_`iRcZ;V0nvye-cPkxazO3Bw;fS`%^hK&F8K4YdpJ4B^qslnHC;S;$dp zg*TdVPzXuJLsz;y$?1)lg?}dN$=K6O)6)$8z>aKrc;eJh*5?8u~+r;#+;!wRA!jN~2^D9B#t&L{3dYg}; zan(K{)ocn(NIh!mw?5(sbWEWdrqBdWp|x|WL-vi=0ZOrhQ-quh(t{XiX)OQzfd=Om zQwhmWk*u+D07ZVlXLnA~=S#}sR~Wgp#77sC{qI%v|ny?XiMJ0~4~g zglam&o=y?iPv;4(%1RHkGI~s$c`i(i)RyZ%A>(8K$H+?Z8Ut?&Izq8NH@i6xBqvdx zfd(!9S>BdosBl8^NmH=^^S0Cp0OBH1z_#CKeWo$kA4ApRbu{8|w0d2_E4XDs;`IKU z{XA@%L&mfrzePq-&$RDr)w6_pasz@*^-vfW+42R;E(qN984Ss17Jgce-2`M+BqL47pEdn3m z6uF#)f<852bj4Fi0Uyl@&tR7LXFQ192-srXaiOu56f=ILU#5V)3j{6gYd_9G+Nqdi zWdDmD9R8KBqGuYSRriS6wt=rsH)FXnK1oK>8jjeDra#0dcODzYnjEt+kkj1VnxoXs zPN_Yl+3iY*I|(f$xNX|MSNc@ayKvvt5pPS-$^RO(eJ^SnQ=uWw#}&ZoR;Gr}=aVye z2QYbKIK-(Y`6U*?x^HWqM4+)pWB^SfH)uGhsXd7GxLYPBdV~4;)kH>=T&iIor+( zv-iMhmHATxhqmq97CN*IzDE0Z_i?~*HjX~0%aTy0u}i2rVx5Ww1&41LQG83&iBQ3G zf`=8<(QP{MG~F;doK5yu*{_L%^?pJ1-FzD$x!g9=B6KKvN3fjYx%sjKEsW(Yz z4R&e^APLv^vK$HsSC4?^QaS|X&rhBV(K*b~<<{O^n29$6fR4ju%*QgvETi90V|7*BhjV^h`H2O zqSHafMu>bpdN9@C^mfgmaGtEMUH{B{yNS6dI9 zJA^p4VuWIE)fr%w!uL++$FPo;r8Vqkd&0?PR(0xuZB8~3dia=y>y`lUH=Yn0b9N|0*Jc(M4D=dC#tw4$O>9jEAomNLs`%jzBjX?9 zU3%)sxX+)s;nd=hE5Lt|-|U3}j9VtAOZ%FrH{YQeW5f_@|FFb3gGSOPE{N8=8%{^L z)!~irFyzKDG~UOb9)D=|ZK{!vDLm+v_@2HmmEVx4#SJq+cOM@CMzfdEMqky2%SOa{ z(fAJm+aQK5@x@50YTw=q@1PulngO?`1{N*zU$%I}n%IG^D}_IgToL<4!aV5E4xqLp&q@my0XVzMU5g2i-iqZc+$92hpm^x)-L03mY$Ihr+OnW zz)`u|2449T3){72;D(3W@6zn12G5kN46!SNOLiwesV-2@vD%dg>_ z6-l2|-#W0UhySizckrdfEL~SZ#E$bWKPW=1OkgpAJ51ui7%NwVxdmXQI4^u(bA3*NY#@^Qao2%T~Z$${_*5rB!Zs zeo8Q*u(Fx_d*yB3C-1$=d$_5|WTv_%WuYFbLmna<2&Mx5gFy1`6_VYmf; zHMGLWrI;_Qpp)^>4yR6$yT*k&TRm8v5N49=8VwQC#Bk*sS{2UtD+pfIKJf~Vgxij$ zhDUYv3tJ3!Js$<@o~%|_j@Sr2$v!k*8@1NUcc-HJ`pt25+<{8W)-`7B+SmU5Yt+c7 zW4tYQGe(A)zC;gCF|GCAg7EZlRqQ{nb?ictjXBy#zG8>AzM;2chbBKfe`iCVYtK*n zpKf4dO8f8PXCmbe)82DB`2m)A0|aB!v2=1cJ*hmH9$#U{--l66jT;iGeM0peVZuLZhmZyDGeCvw0AQr8QCu9oyv3k2@@@Q*WZaZ~UZi^2Q-W z@gp?tDXe**ESZ}l;=cJWnRui06u-TDy_d=TQfvayJivm}R zXcG8Po%dU}hWM#(zhN@F$l!D-arSRj>>_{aW_?JudAK)_d+$!=8mR+UCRH+Hz9e|e z`%WM|q@k4hD4e?46m_b0E222f159gaUw_^-D(ntY{^{mb#g|bV2Pe9Sz*3cTlok&N zPrp?#awjj)=&A56P+Z*ipM5MU%=dVG)Ttxt)GGSdW5SQGYbcNJG@GjisO9ah2`_kh z%nyx&xOpa1?0XJkb7w12!tPv{WN*tI>Vh-Dlu9RawJd2Y}_h^ZnA3J?w@kXbBF?#I}`Ap%&xm|Y^akCI@m*6Gd%_V@wfZr3#BSuRg?4pxKP#|=7rBm z&4Y}FDl?6e`xRd{U^jgRdB~fM zru6(NkYy7=*80%w2n*FDj5YhfNp89C!4CUZ zya_dj&|&Pz>ml*mLf-MOGpTZn`$fgMKKg>$@D!Oe=m80i zKjKBsjWov!--+E9#>x`AkBax{D7p}v0zLt4D|A|q*a5uWAymAE{*Nv6qC<2JRGe9R z4w9gd^}HbOJW)8Ji3|^n343Hn%VRRguhItDgW)y&u18@Ud*pO zsV~5@=hvYo5C-91gNJ6@Ap&4n98wj2)c!=w1}zf)z5&r24%wo!ph_ zO=uW7n)c1nzbnVnzHcN4!G`^1hP+wr~g21VNl( zPMA((;!wD|En$-K+~0OY*Zpmuoj}3V_zIBaZSHNVXFLfawcZ|diF!W1g79YUpmdb# z%wuqIab;$_yHE)p6H3+5mp@g~+tdx9swZCRv8QtIvRoa~$*M>um#4_BI#9+(~|VH+ktW@x zObYM5?T+ed_dRx(ur;+&E4?;i;p$xW*+KhsuA(dVYI29TbDP}pt+{gP6doXnLhJV} z^y=;cMpEQ(I>15kcXV)RMeHKYAdI{@=0vQg%xu*}YJrnsCVN|N;DM_J^S<|nbk86z z!qKXXq-r(mT6SwDIg?2D$zt#|?1=cz>{}!+ZH(QB>0a-!l;^oJHC7c?Jer=3RTdia z^5E_g^VOW@+&I%y)}I>me5p3s3D^b5%er#^!e zvsk{O1{Vy|)%Utv&mY&_*)Yjno$YxmiPO!Hx#n<_3KW)!tleb)>MWDow8An0cmr;r zb(p8;G672U)hrWr!K@MBrz_bCK8CGm<%*NY1Q;WV_N|{Aszp?MjjBzu!s!oIt5prP4;q#x7+8iHNVpI`#+coF4lXSes42XoJGss*k%-p z3=AWB$9n}v%q@;Jm_q<$-cA$GhDKX{O9}7egg0JUw1X4>(d{dX8u=wqW%D9c=HX7) z!iX6v;qxUu6B(JPFm zA$lo8?|@QtH|7baMyVl49k*(5yu_XTD=^Q7Gfaog!vK(HR@|oaaCr8PD5z= z)^a?jwp`iM;-!Qju%lJp#;c)e>VM0zP#TxAo#;@u_xIn2X8iTD!t(z&iWcU(Rb8zE zE`*7wqG2e6vmZUZZ|OVT((xw5@H*v$EJGRvelXNE}?d0(?>fu^qKA!2=^ zvE!Om5`JjD(DwIvkcp(b*K-)xUXM_5Z)U)OWs%{tPNs-KZT4!=Os6^pGxKr(s1>Ya zMWqLUN5*^V3zE~CE$xHRIRblBbYg{NwvaFo!F#{*G8;xg_-~AZD)=vq{eC+j*}-0C+_?1To(P| z?ZUP5ft}nj)cS{tuzkrCsGEJGs|5J$T12WH0lf#G92th(Dt>t?dAX>e1HW+JBEohl4SWHkXHd` ziyX zLdhR%$$g9nJk~e)<4Sa{|IWhV;E&J{x$>dLPD}ADkPrYSmopV&auE@T^UdwXLiIFG zquReuW7+QXugcRw;@8w75NvniAt-*%$k<>%;WhHlQjZVsdqU@Q1Y0GuRz8j$FOlGH zJvgy@q_?FXP)NwlAw>~1`0_~cN(BW2s3xmDzky1kl4~5xbiVK5X-675vDKP z9UZ8Hy2t#AKVjknok3gs?G+?S5rHs(SfgM;>9bAjAn*8%isaSLi2@d^8y;^{G3xj> zk$5QTZFvOr`Q`PErw@kivU9ElRwJWdDLu14eO4dhK(1rHOy{)Xz4b*(K=eW$qN5!< zSY%p9ALsPS5t*4q*a4Z0jsf1r(Y^>A&|3!FW5gJo)7c(1%4)}-Jkf>*pZ#0v9ZFVicAS&L+;CBi0 znwjCw@}KdBWQ%>^Q1MrjDx#@lqp8a{?hyzQwejd-a=(Tr)B^kgdH4uRAk|!eH)nyy zy_8CiJv29X#aQr^V*?DL*Lg`2qjQlM4Q&gjjtHlI#6IUtYhAc(ra8{7n)y;|OwsSc zby_EmSf!xXC~P9ebkm4#+39PN_*xVm=qdDGyCX4Tlq&t3h;x8v0qTR|l z|J=#ifY-f)mWFPPSPw1cA#9xqj(&`#5oQs8Aweeqlugq_@@8PDiUwDwf2<&Gr#KKa z-H~d-h5KH17T~yasUweU^Vc1~T`Z~K5|s%)>U_Owg)`rve`D$n7^3gXoQwC^s=1VE zLn_!w*IG`Kl?7DQ)W1H})P`wwA5(vPTYmB^_`7~qypszafi`yrmSk{xiE=Tco9v49 z#%RD#9r|o$06)HI2UpO|aO%8@+(7N~^VG$bJe`1Bjx`W&FLnmrI|((D4#MJXw3|A< z&O_B(t^|c)_@{JJh5gY^$7FvBX*f|<4Be{hkzSDv;XGHf-iR(bO-On$22)h_I4T8& z5Red$bNM-_=F+~0djl;SOO+EKV2ofm0R?^Dx1v&0Vqz8iQEDju|IRCnkqPW9J3amg)5FDc*Q;dbf<1F4yE%T8gmJG|9CR&7|j7 zlY6hlv8n=)(i1+)`x2B7I|tMl?za)$EXy};S;Pxh%ypV8yS6%JH0kJeJ%j|ThON9@DO)bSN_r`r5LT zgixwB@9RZT{GraFR1bccRsv%BCA2nL{VsE_kDz~TDr`+%F!b{%r>s=`Ke=>;pT~7m z%m)GM^U&})6|sYc&nb-$(n`#+Or5DNYrDy0V;aMeKI+G1C}B<5a}O?Ppu zx0lA$iCvHclHvyt|JVoGQ`b*6lPWu#dbsC}vQZaHkeHD zAUZwyp7EH_Esz~Wz(@x(j%80{AU&>xgD{X83N$vPlNF>#W*Q__0qs$Oc5JNB(}ZYz ziCNA8d+ao-G>caAQQNlKu<%}Jl%!|AM4Cz?b)H)d~ zbS>(`P`yAi5u+-Q*XB%6XosT7CcTJ^TIbApu$1>z?T-LOQ{cMZ4of|>%&dCO>O$xi zDG$<3Xr(5y=QJ9`lCzGAa(#%b##ERg`OB}XCGm%5weiJp3vNh^0D&zY8*Q%VApe{Y$L1Ak?c z6s?Y7Cx_!GJ{s0~?uZOo@7fJ!^_2ZadK0W9X0Xn}#f5d&y~sWnrqFTB2*K0{U*c!h z^Xsg-$#nDrs_0sEfcC@vgbWs>Ch*;q=OC^=R|V=u%hhBK*!hd7KXR38S8IEZm1l1x zU)b8&W4#^iRO76-3;67W2fDY&ga^{@Aa2EM75wyEYTD^_&aBlxUCZr}m^Q-tl+)Szy{HkeYzIHF?J_${0H;X_M zTm-ZUI9%Ig!<#5AL@9>YD2d9d07<7~>_maqoRjsBBKzC`a7CHsYMmUk5|pl`kZvvP zbGild$dM+h#39ZcAIV@mFMR~#IS-(<2trnK^>&rFh%nAC%WsOBA0n+}mEG$Vb62LM zpW>?9Ob%y&wN5&f?ixK_bn#veQU8DIBLE;>>*I2-@Voc=IND^Wa@NNMWG;;s*$DPY!zRs{6fW4=$McXOuYeV+|9E$WRqy6@u9`o;!zh-@~2V8RU8N6!B$ zg8(8kb_V@sYg(p+(-0AiKg@WGZHxSriqpNb}yiGV)?1^f1e@FUU z=gy|E=S3#{_)7AOUqdRF=y6aq7&35 zEQ#QI;;O0FmLn*Col0j(RD!3A(u+S3`}al3wP(u&e4~95YJPZK`cng(C}Dy4&94R) z*~6aX1N)(%r;Eq%YD^>7_1EB+rH|n!9bFFx=chBhvk%g&aPilf1-_a95u}AI@qR(N zZ5Dcz2F#%QR~|^;l!`DH4mVh?XV_Yo6f}}VEQ20w?IAQ-*a3TRwkFQZ$p)(E3U}A> zeSki|vF>JOI7p7JAUsK|!k@m`pg`W=>wzFJ9MpN6e-F~Uk4LI!U6wHc1&ZM_w{R4U z)IU%OhEWMGCdXx|mY?vWOWo2fOL)S#+`m#HUIAYvgnsn|hD^inGap;B>LPJTy)AF> zD1Os8{Ty3Of@+f4%p_oAsk7vAg~A`e%_&K~UnUHm$AIlzHj9n^ zGGaMUyGoyQ?mYrr`F-waA z)#lBC%ru${($F5ap<4?LokT;q2h9pS%CuRQJF;g7Uo&rRHQL5xrz|qcwk6_RhRosV8};2PR_f*HTg^h zQU??;koN6x$72RxoemRNFK-2hS?g251g>;6&RTu57o}3cR+e$0$u&S*AzwD*dW z;I;<<8=QotE&y`Cv!aVV(IuW}0-`hvd$%%S#v!(GZNWd^x6+niMBcKE&x_jenH zqPMcaCEQtVm3?x!nf6Qha0ee2J0Hy6M$%G}7@W@^`ajs(js&q?Tieyz+s)Q?DNp8_ z)1-Dvh;U(wPm0vrf!6!9ak|^3qdYBmWVySIz2VWWdgC~F5C-Bh7R|4i*P=8JJc1+Q zCs<0E4U;O(hS|OUI-6!ocO8y9cGsr)lmV&-3Ep~GH%ICf@~(#gxe<^XN@9b10jnb3|o z!P8?|4mSv3-u&Z^x#~s-&|is~n;lbpf;$M_7F39uKz~J#K#=xbQd$S!)51ptU_%4? znn$Rn8{1TKMsvsUB!>)5?_PRSoTayGMq%mQ&w_Kv(1Rbd^zwhwhbWZ9+3hZ;(Za-x zLO>AIpNokL;6%H=WCNsVCHOV+ium|_Dis?4v`=jZca@=yJF@WcWDDNmUCwc+>?^bd zt!XpYdJviD9k~WAKU4QH)LrJ*-DK)6>!4IOQOe$;INlUTcGT)_b!GRE#a%dt+f;AbH<^6u*fvrDIlOn{UMJJWPn}GU zkSY5mB76$oMw($TE^$%w4Jjk|K@mHVwubElC%v3)^2qT6ne zHjFPB3wK~@mSb&VHe{)^!%VbOY|pm~+6 z6QI^VJ9q2Qt&4ZAp&R*lMzbQ{*8Wy`zb*bmTR#4d^=znSTd02H+y|ZV0>IO5sx*~5 z=yKzyJLg@H^>T<9q1L;hmFF}${}GRE?&Y{{1(|*94G1NO*OT}CCNGuFE&)C~RR7wX zVU8Tr+5sMPx_X{H%GiQP?_)o0oRj34LEhPam5!%YkyWrrVVAiOp+2W+T@b?~7%(qA z;Nz&Yx4q6e1ygrSbqEv>WJTecUFk6d{@Bg1TkjHk*1uZm$z6lIi{ymFth)OryYeBH zPjksv7#8C^^d3JZh_&Bb1eNRMmt88V2fu|GO(wJxXYQ@umXlT7c{PR$4A^L0U%g0D zSWwfVhOl?vBb4j_CEn&Q)%4f><3~%tMHo1``hq0icM=Avqx1|_7fubU&c34N^5Ob7 z=49P?cwASM+*5-3Jh`Vdekj^`@A8So?c2-ywG){W@3Vf+vo2ul2R_Z4;a^53sB88# zYs<)@avnyFRM>>sRs2*H&AF6GV|-5%Z;mFokpay80uo-+nFL29^V z+G9-U{THrXoV==c(R}{m{5>OEZ;$??8y-Csd5S$H1$k>>{Eg6c#q&%K>kI$R?J!V& zjW=4__V+!y1Ug_n!|g@7-hSrupR@URUJg%h57cj--z%}Uw)L=DoG|rPh94Mm5hh%% zAKNV15(-8$5qntocgcGT?K}2jUGtB{SQp0mAz*!MfZF*EuAwN20~T7_-F|M{@XuVc z&9lpV^zVF2w`O=?_75cT2PZiD2;fZjUmmcwc{Xs1LwNeeVEya!%l(Npwc}b37>;kK z-h1J-HoW-c@bsM9h|;YWt&f8>FHm3D^C7z&wH{2ZY?#GulaSZ<_%QAn7Njzd*&6LN#9kpaWec&`Ep$ysa<` z1=vil+XD3&r`Lhj1BL*b-UVB60XE~`>cX}W*oMP`IrQScpI<9LZa(*lOGvutiCkG7 zdWU6L7CP!pen`h65KOebSiH8cQbEj*i3m#wd>J9NK0%H&W-*2UPKN;g`im|CI7gQ^AFrj&=DE?$m(g_{C(wVkc^`Xgqn++GcCj*@{4E=e^5#@@W zX>aMyt4D{{cKLb=MZ|;E8k?24?hwQ=a^`}fpT+fXWAL>)+`H(0QlRfmY0*-qe{<0d z*Y;*GZcm)UFTrE-Z()-NhvKhLuxof6Z_7vsBs(op>Siwk7wG|W^y3YJ#;bNK62vyB z!mNvlwJLK)Y#k}ShPXTUV2Z-Rbzi$bmt)$KG4$<`Ip|$o>~F^zbZ}$0e>Nb=>JH~> zE~jpb)IU4>eVCy>v_0k%we1@f!m-6Wz7sHpkz!xJiVK+chCn{{_-$!wELzCG+b_YY zd{Z6=>g)=`$qe}0cxrZ%LiuBUx=Rz}EQlhNxfvHQIYQR?zWD~wk#njVqHT!PgYBm7qPw$ zb6<1)=X3UB6LUIf_W##se~9&|e_3s~hG5fnfBfzg4sU;R5F)g}tJxgInRH|Kc$c4@ z&y|9pP62Iw$!*1RE>~?QF8w+_n%c0xWV&M_5vt!a2lLI|4YfCvHVnU!{r`h;m|x#gjnoze89USf5oMbqO-rJk7*Z2_OKY!UtmF{y3u>NVl?xqZd6G%^TvAhs5K zzPf{YWnzNAnFgcEE?!{}E6J2F7Phb!b`U9@i@~uw;xeU%sGESS>07GB_1kZMuDRsA z2t6%rVQ&bpJ@^D?Et$n_R@K_sy^HqnmzdML=wAL-@b^4_K343T{N5ewT{MB`qT&)y zX<45>eTw_^;@>`fdiCnnr&sTC-uRzGKwbTgyB}5=OM-5va7U*YwPutLebwA>BJ0~M zhgfe?_92Xyi3DU!?*3v={#46KR-hKATm=2m`memn5oGM9k5Ox#SY^2Rm+UH&Uy;Hj z^9jjt82yLcr#tzU>IAqETm314p-eXW1kPIpyDB4Pg-TxJT@8)dW$*dBG37d>yFKsf zGcg;?*ncx$;ybvg6F1(PJ&d6Lenv2vFS!xX=YWPu%>9~;i!~>EbKCa8t)(^0$V9`z zMe&?JF^cGUsHbI#{Y@E+k-(N8^omE=oaMDBfdd0Pin{QfINy{T0Tq=v1B2?dFeZTM{!2 z2?*YGp~TnUtBP84nD1{-Wo9=)hOp(an$}0HHCjUGLeXj36Dg>aG%9SytwHsqEuliG zq@17>YyJ)vvK1`)+8 zXaud=Ldgsl5eV)?Gue#N+i7ikPHlU7s%=lzwny<&NeF}hDmSfI+Zr#eYaFdnTP|9i z@8?~6CJAVJ`a92gp5H$Q&Fr<;UiZtp-un`OGgmoWf$6N9ZN#RDjiG~uaJg3f?OmDe z-QoJgi;3~@I;nN0Uuspa>Mvwy?23XQ?Q;?uzDO6v5M%fnCGi5Ie0tC*pV_1yCIwBA zQIm>j%J+tfkk<|RRjRPNNF=pzN~o1X(fvAlw_4;BB~mtB**wdzLka`t65qbTEN zlv|R`D7SSx0^3^V=dwr-7Yt@8I3kNwNEY2#vS13NXGyZ0HJGI^G1i$*TUw-N)W=65 zDpm}xx4N#u6*p}C4x=9hw_#-tu!v*q6o*%*!3%_Alb6ewptv`yN8XXCuUPyic02^^ zk2^HWscojNSx6a&de;D`S9M5gpi#A`rqdp9vK`<%37?!#fn6JyQM+M7tz zc-raUSCO4*3iaJTOFstdcwY6ro$H8H@gb*4PFd~fDt6~esvfN3DTzr{T%P-IPQHq} zkFH{2z6$jnUH+#|#fn@peYli%recv({z2t*Vb^zaQ*k!s%Mb-sY_K?^?P8YaQA2-L zuE>NGnJPM&*R&&Gtho6#DfC&j!;wI?m6LneurTxw;ZWR};6KS}>S*vCJt!~b+BQZv zTC9_|OH8U_TJFOMy3ue3R=$12xKqK!gB7&v3O;pI?#Pw%i+l57XxaUmcNEOa9ZLs- z^^Zyi6;#}wgZf^1IK=;Vf8L$e^YMAVY!u1R~VW-tcT&dxzFqG zWefyi8KcimXM7)`lzc@wu(&>#ehS5Dc5OvxF6JUBK}PX`H)TD~9grnAkNzkS7Ik}? z*=ISxW{FotHPt0Q^--ubjQ+rLgdE^xn=;*s>Io*k3Rc>Q2ezFf?bd{Mj7x~K)}&%;_}f3m1| z{wO@7ur7ES||?OpH^i3opRG z*a)0c!Dod*GFh6VJDd27X{RI`_n#2yDBy$D3!rhZ`WCSI*YHjPx(yZXoUmp4IAOKM zQB#3q@96HB_HnTO-1tm!OV=?i8?67bJ09Srpre3rL3{$?!j5Tfd6-tW2eo2f)avq> z)@D!CIuu;`M8@E~Ff)?h0*BjR|5{qsDCXe3p2`vqU{rz~H&A+e59*`MN}V(YE#b!0 z^n#f<>BpW9w{|8Cs*TSw9x>g#(4r-7E}MSDEC_XYc`1m0hL=J<(I%5Nb$O7f_?-4g zyFLgmeH4c@)@ItoFKq&e!`2H%;Rz+N!o5+eJJ=X_cIh3nQl2qUydVNfUgG!z{}PgF z+Q)*O<;SCSrQ4MskJgn1u1_5g?Q4zk;8Jou9=z+idv)D#VLc~P`3U$pyI|h>+)UbS ze=_pWT1bAGo;=jPMIXhx)UL1Qm+Y_cQ6bCn_g~Mgr77e_lb?%bx%1t6t6I%RX%IB% z)P<()IUP3dX;;x}+Gz!yib_yR#t3Kw+YMnZd ztS%D5!=>yZd4FEN$IqsYx<$s~qHo+I z_Q8GG_l>nhkZMJMo(S9$U}o=0!d+WXtUJ3W0 zq3FL>;D~*N*<7Xwa1#AU9)&yBH8e%=r8a-#C`Nx#L#Q%wX{=_m@n{Hl3bQM@WSHOx zL^`dpR4MG>u~pH)o_M8wQE7~8iAwBg-okENW-o=Ix4Am=GTJNcd!2EzZmV*wmJusq zoJa7K3plJTl|9aQcfP0|WN5WDH1@f$dhe>x@LCV0lcsg5LFZhZFUCD>dlRMV`fs>h zojcV%rE;OiQDbgeQ{M!z0%l%J6syT!bGumn`h#>r9wlH&4LZ zHV^JU5huV|d?vCoa`Pzkpi51pR`n8V3u)DE5K1+l;e`NQ|DfBYQzR=DmrimKRJ=ur zLmg%mcV5&qJwes^Z14Eui zk>{)1NJ_~?s{9__UYFJQ0za%A6eXk+k5QFNEe9iDE$jZwB#UNsRkJYJ7sXP=Pjs2m zyY!EL?$&AHV?YPy^!96=&c1`T3YS^6eU7eU-zrD8U;P`Ao%`*wr2ttLw9z)6ukhtB z+E#QGQ8G#_sPC?4!KTU@d8pmaVlLSz3K40?;;W*@NibFt+(LqFMdQfLvg3A3%v^O{ zOz-bt39AQbvjBMu;qb{|S?X+J83#Ozc8Swg)MM>J^p0)HLj7?tEl$q*RDqM$i(0EX zdmO{oo)XE{A@wk|ns%l7K2IU3?R~aaoz%h%?N=#AkP7BvyqPFcFQLd=xA$SUT1r{C z1~{G+w>T*RTu0`2k>;WWwAajvX zeZ~($>)!jqmllez(a5MB%&W&f43pIhnpK)WbY8aYIkv{>0~chCsa;%q7_XkXU_^ln zt@tJKIHBmF!+%4V;a^^5vJB)uT4wyPyJc+HF4_W|4OxBeaI)wzf|+9C9wMOi$-*h~ z!@$7pXGmMAJ#4=uwddho_adXiUG2_GIOv=Mpg?(q2i;lO@zT1QD${ZslAWmegD_!>-( z`w9=CbE<_(5Xro?#iuEpx~_(zF!Ceg8(lrt>HqmhpcCQ&_R(AuIwvTaEtrc@ll|gj z$5CIlV%eSA9fZf;`OF0EY*lR$QJP$hJ`mctTlVv+QH(aP*@|)!oA$pda+;}c?B^p` z6DvMjk!|M-N5~Y@LLr*3seb)cCldV|;i+rfE~VrHudquR2PELH!%sl36kxaa$w#ox zCNtSC)ks5hWN4$qUhe`Vw0H1Dy^dZ`J_lIZ0yM9iDu4<+FO@0e{H9FASsIxW%q?hQ zi)nnF5kb--m3~1grM4h`oe2W8O2r94$}Ch*2~8-56S8?RFyevLL|SGKI9AuyqhXm8 z^4uLx*Ux{8LrbtH#C z-}yc2O3KqFhV#AZdMB)Idq4oJtcyI0nBt3W-NT}KV$u&@KI`5Z@&tMkano8@$pAIt zQsGOq#}rRB7zbo4=JAHS>s$$kop7qr@4QcxcSz4vqtEQ__nUQu>mok0uG`EhV^I2d zUh0Ob;@Cscr6|4IS=Xj{kZn}7S6=DHH9Z?$K~}OJpSNEnGJE=;EE%7N+|E3x<*i@~ zmbXg%8>+Je3Y-Cz{ct;_7+>##x-B~Opuv7f6_x9!>=-!NU~7Y zGETGyWPw;cC<48_G_40#+9P^C!}5-C@|GTz_gDWYuRhm=onC1?ay~XCAVOlA&ymob z-pcB=rv7XfXAjOx*us(2mG2sbbiLO)TWGU1AzOlH3@}%6&N0nOwb_K!F?aOR3p6uiP*jVBAP^VZoj;$}C zQ-a!eXMTu~Gkporh1RC~WtrPOxf(`LctIv0hGF*3VCM^t`5|(-VCQ>_jF$cGMaKDl zj{Uvy!p_-ljzC0&ZoOzQgTte9;<=#_xJp{}sDH40 z^1VJ=dMO2zONKqAU#>Jd8fo%IAMMRl$(Y5@2-VlepP)0DPTfhPt%ekI^sS8ocfd(w zg?*X(1U3r>1Az7kkGYcdE9%2`Hz?=@A*&z!Z;xrcI=}^ooL^ZwAKKT?$QCeLU7_(f zn3Q29Iv>ZHe4Dv53pe*zQ`bMk`Y=-WQzL$?8|~dvVwB?SK3O14)0es_S+9{{#fO~o z`MhM0ER)TPaxuF@_&xhpWS_M z|M>1~-}v2R8%l3?<5}Y=S70+Y_TguQL3@kw3LWS&5^vC2+SWx;=Qq28EoHIh?Tv+f zx!3p>y+mIH#*&V)3fsG*R{ub#`&F;?ihn|1GGglHVSak{ia-dF&7 z+3y*@J8`O%Nr&i{PU+1hcM_ny@v`ycUb#i5{us0)cd#0mDo2k=!w2yxaai5T(JvY! zSfv7BH5^DUX)eTwMA}KSq*wVZxkt9->9Tpvsqpk&%g5_|sRuT};3pV^!EHItSzYCe zLJhw7>5C!_-uOuy1@C07W*%in#R|LSn+&Ejj?;(IbsGhLUIm7oqyCOj1mN8N}P7)KIHp3q^~z58b%`%QLt9fquN6;`%NV-ZyN0zk-Bhu+x+^* zn!g-~cov21<)+d8J6ZdP&}+4_LZHsD#HA6=5evD%=tEBouYh;_gfzT(<;D6}UaZ?c z#8pq5NU8{yy5q<38M*^(AzHWvbDQjLE_qzNCcbX9OCNpJ5Km;5xrX?L8%eYs`_LEC8!}pm4cznUIp!~F&j`j){JHc){31Mqfe-pG&j~t!%yUMy z1pMg3t)|f5kUHC&{;VKFUFof~FKVwv;4>;(^S4moUBmiMq9S&;{Tnu!S-95@?{m5+ zxCt-P#g?^U`x;Nkdd(jXqm>n*k&{C<&cwFc;hi2caA@f`0vs-fTE>#a*AU+6OOy~Q zB~%*shVXq8*uC`Wki9(;*pv9Yq@j#bG9;=Z5bF~&<5Cy8AI1ar3=;=k`%39&W8s!i zmJ6Xqkqci^b~lZ^<1ztZ0-Qwd791u~COk}{j4kE%_>CQx0QdPqil@> zzaaR+ch|_7y2aG%H~VUimW3`>Hw(dGH_d}3)Nlf7Aoe9>-J5tXH7!R?l*6HMzvslUS{=Mj(iJ*+*mC?E(qFh-gyzUH``-Tv3MF|##nAVd{i5;6-sofQ z+`pLd;0~C2KI6{!80$q*;QS(EL05F$p;q3P`_i{a^ici-Mc;psqayK5qudQ3fj`LX zzA_N2>Bh-F7bFzNr^W(hv$laH-L-(M#ss%90bQ_l-L3j9bRVw|MYG#^bn&;FKaQyh zp#e@^tADLiiYGoMrw>atQU@6lf8o0kA2H1+54#8GT#x2w*0_zDq4H}ezs4!QhVpAD zzb4er-$3GdA&LBS${}i}PzH`x`>~y&MEB{}{k`Pu4@mzp-+c17DB0xgXe!Bn z*Y6T<5|2Xk4pz3c84b12Nc6fpz2}#*ZBYdT!oCM=KCugGR93h157heJRV;brYe8_+ zz~=b)VI07uCTjwwZ|Mj#V0xDoKL#()^~?m;uw8VWB;gR~_1QshVjm&Xibvbs~m6G>xHeRZ(rYx&0$~$R??QId)rOMu;+{f?Z zv{&L_n68v$i$+kiE*9Eru-F{Tv&SiNWX3T;j}pit{44zqe+UsSUsmYKmTe~%F#qx} zZengx4TB#-LPHc^T7@xk7~kC6x&=&UyiUqR8*(dgaQ|qyEAa8t&wRgJKQ#5s=0o^- zeHJ~RSE8co^=8y=%Rba{oNGfg&}+1b!XMLYw7*WEQT*+SM}IrPA^F{d-;!ja**Yp3 z_=C}YFJCgZG}=!dtgjlyB*I|F0WG79A60sp6O~++t*C1ea{cneS;zqK-z*Z|C3kTY zU+_!q*X&pZS?A7HOc=^{a+G_$Qd5^-PkZlb({-EHR!=nWR{BQ0f{+?by<+%R=4GT7 z_WU$1chrgvakiqEx@Fx$J@-ZLTCcmBDQUdxS32aN@=YRDMr?>Kp)9jOe%nJe1byqI_`vosyY*B2NFBEZ$uBJoXb4=9Ht0`4QPP&y$kA z;*|7NDJjH4r3}g{&1b%7SV1FnLBq=VqLjn3<>)WE!YSuUDd(^-4v#FSU|2anXK;q& zz(S*@%Ie990Y|Fh94VDWE~TC*#r=fhgkQN!T80+$BTP{S3i?ZwGlVb?TYGtbEFo?^ zNR=IgSe6=!{v=ehuHtn<+HzgZlBR0Ro3cltlgDgL0$+tIt9cFP?VCc2J67#2;y zZPP0rB9<^i)`C9HbF-gsN*xltJ)CUJ<2EmioN$-0nD7VbnJWVx2hRxQOnsNvQ83ZI zqSXEXD+bp28QGoc=ei`euN_>#4S^kI^MyVLwZIC`n%@Ujc-QXF;5G6SEzPeR2n^98 zQei{~s1XvnTNW=n>>FKrmKnIC>K9?CsV$~HP!U>dil#o=qys7ozs@Nn>J*X~5wftvHWb*7I(T4v%Xg!;2ia6lz`1M7MMp6`*eZwO|23c*eI@y#m9yUoWqsnZM?|uG<0!&_Ib| zIj7cjus(6t0*0z7Hp6H7!2S$h&~KDSeZ1Bh_I0M_ zoq5H)#AlVIGdInX$v@MyuY>^nAYLNEKw!zSnYY#TgN5Z84L#~N*s}lwgpQc5^8;pv z(H7@8aX01S2HUNUb;^>&2;+w0KNh{bNo9Ylm*h6 z+qtrBfj-iTV4m{H;Vpys%H@~Ic_2={``-We!HZmm=mA)!m{BadQV^CyhH;m8q!~^x z%)oB22`Ztna0m23&xV*?U|-}78;@R8ip|0$qhm=I$HSs<(ku;kG>t~_xqxpZc;uoI zzAfToxWj}Pc(i0u(%ZAaE+OwUxnAy~5lP7x^zeOzktVqd5(rE?c4R-_!hU$L= z8MUsO+@<+ia~0~>M=nBT+tp!ub45F;dvf*Xs@AWMO!Mf{JxnBK3|>qPOFF!KlJ+tx z{^iGMzUDMz@udX=?D~=KPcznD>K=fY+0!z5R;m=3yWO}0g=E(TYwEd=A*M3!5XWs$ zl`g-_wd`04xGG)C%MKJ>vQs#Z?KgmkZ2fp~!Itl@S$u0jza(JfjXSrnbz(L=!&gp$ zHS3SoY>(FL5yCv5;D;p06=&S_`P^&`%_n7+@OO!ypDTm>T)$xJM{7s&H`~w86+wQk zTR?ngD+TfV>V3}h+g;A{2mSK=Xsw1JJil_E^L}ra^Zb54Psm$ouDNcrJfiEA^KklL zt>EBnOqq1xmHtNVN$k!P&9J}w?G1Vv{Wg?+O**~4#6>bfYuAs=g^2SH#^pl91qb7D zA>tMc#^pkbVh9nA@mkl`L(6*>ZD0gGIbLrtUT?^F zy&>cE#y>M&Z{)`7jof&>ksGf!{^#TMt4|%T)o*-qyd=)=jL6`4N!-!nC2>cL*XlQh zkC(g+jhDO)A1~MmddLJi46Qd=icllVSlKK3^vdo;PAUQkHVG?xfCR0q7~{^n`E^z{ zjP|r|_{x?9%f77n33{g)i!bpJxYEzh^|g!Gas17O3BC3TKR?%T{w}^K$j>EBl5Bw_ zTf&EEP|`I?x&@MMNsbM}I+ZF|r_MvSsO9UdQJV6~fU`zDvPSn0j=40SH6>e}F>>BE zIB)Wh73RFjgSUsAH+jf`HTr8by1)$ z<^ATmv!R@#E07x3I8fhQct(XrXf$J7=z->l~^3)xBE%+iNyYKS@r+pdI$2lO~6-l-YdANfZ`NdJ5n- z70u=kAW> z3T>_#MmbztBwZrY3_0#;t+#5mr^@}D-Z48}mkl+n@WhSA<`o__3GGdg;$kk$wOH9jeHV1zF|(Zr7^j2h`EO#L%%0lu$o3ls@8tf`C}(dKI_)l@;yQl*6`0@}OmmuWy^a<{dRtP3*>h= zZR*UwHrEDuM)Q!EBi~hGqM+><=f~P=*j0HVmV6>0eOx zT!wfZ6bP4HjPtzhMF|H{@|3&c@&7vql@3}P{sGJRSmwiW9}9QUc6Xl}>s^;Nq` zA{y?P9P~+QMj9s)G>MLOdb41VA$6_x?-|5L{t(d%DYqX| zu3A>KUDWzuo|L0IzZN1(I%ogq{e4U-}jJVx?pY%C3ccUhRQjPmjx0apa zkJ!Cx4l4VY(xN+Iq=qht!~q>w{)xYL)6c-7am{l&~$WL*f|W|zX=l7+ZL-Io7Aq+RNx zoj0^^Uo%BrujBDkhOb(5qDHd9(F!^wn<5$MPyv<;N-3wqWxK(&D9DrTqr4m1yVfGY zgu(Gn{CbQuHl%L_G3;#r7A@0$8}!1ph`f^?;i-TtqBl9h34k}^yk&;jlb+7v* zs-ABh5&&jI4oQF=#NewU6h~tib8y+f+o9~1a9|-aYOIWiT-a(CpH97}Og$AIfpG_J zhVaC>*dHIQmW#DU^TmF;lQ`9$QPr&q?nmiVHg}G-b~;v4tfF?LDXzf;+D)V`qFhbZ z1|Pf4<{6ZtxkB2N<*B85^|hzShbycOtpoZSfiumN*qL&M0FzZc1p5R?z}OS`UOs1llxo)>^&YKv0j}*vl)0W(e|e`sI3)s6h9D2#8GnJCcc=QrD`a4@)yNUD@++=o zXX*FWXL;f2>@vGEep94SCn1G8 z>0XOF9^+@lns4!_HjE*ogLb-WdKcfAtTCql{Z9oH&oTS1cS^C>SCWS%Gvefp4`UcP*Uw^Wh}M)c$b86&|B)K)TrcWsiD_O%%iMw(wb_ z?Ij|?l?=0axkvqo4~*Xk!NGRg@7G@eqWL%p4ivY>OAbU_J_n^EeYsjGX(_*X2HhVJ z%=G)RKr>B6c8uQFp@H9Ighz^lw& zyvl5kd(e1jc&MN);))j?DE7vyG$KmS9Y3C+M`Atk(V?~xm>?9#i?neF>fl9M*&~PX z40=l9C^K_t&)~lLo4{Us{0x4q6+u^`KBrAl z+h8Po*4j!VG1^?Wc7c{c7Bn1(HAdm-8j_v{Bwbo^V0slEX0R4;9hl)+WVGE)iL%t3 zyP+)XY={6ti4QPR_~X|!9G5sRW?$&n_nYoiXL9~)#N!rH1g3*{Trax`H5~gHl7JPf zUvadgClX7OP7d1_*N2eb8tcVTMK~~%9JPdSNM4-*{Q`-`Gw(C%JAYz{9n`HUbtR_d zTP^T^=~!!(-^I#b^`>6=8ut71DWqS<9Wc#71M;WAgSV{b!+{SaM^sW zFs`*$cwOHv z>$7H>1XaG|N3!zNUy>l;NeiRFMyx1T)DV$#KO^ z>pI*Sri#2eK1A}Ox5leR{48tJ|ACotlU1|D=kp zlCQ9klWr9GNTLcza-auQ>BlSesO(Z^nzPK2g>91^BE0C}aP(Qr4i9txfp*^?KJ`hB zvd2!9Lzb65%27Z4gG}a4`qT}of8`Bfpx@*&fi7Lm@+P@@VWSSuF!fPl+Vg{Y@&zo$ z?B(RuZr66I-ruw7u8=a|$EzkCK<{XVF15*zZWQ|SVupH!rhfW0D2+9&ofkie%Las= zV1>KXaXP)Z#7wT&jYRTJJPvK-v^CX|A{om4l9_e%q;6zfco_SIF*rrQ{G(tTtSZOzTY;UG4mYT)ug_ZVY9=TTRuFDG9q2OFH%GGie zYcOA*wxSegG90i^t6nxCh-hNcy3cFvv(H#-&_1hT_YZ2H!9#*r+)CXXy(Ladrt_vg zLv!UAP^S`zC2yijvfSa(MC}pgHjn#bz>u?YmJCB#2G?E89to=?Wcgi>N!_810>VPJ zJJ6lDCZx6CE(_Tqf2gKQl;CK_wCZR>s5()$O}t)#HcQGnC*{PD9VKO-b+}-;KWeSS zKmYM6`MYd(TQDez^=5POY2uqj2L~w3h6d9K=kEGBas}2#Y-F$lT3h_EdKdgg?v$6Q z)0E~upPLcpHP7;1 zl=2MNQ`{Qu`^vC5>vlJ&z)5QLusE~%YPUz-A~A(Mx(m$472*-Y24mf&&ZQ+PHY`KF zkosY9P9bLu6%yJgL#e5=KDD<%g3qY4`JMrc|9cLKIcEJrnL$~Ai^;m8%~k1AdabHn zV$nJZea90-p^r|-ix`5n*#G34_fgr{+f{0{Oo2Ia@_`&hjQ ziw|)$!p>0Nl!Kf-$i|gYIYPiIAMclG$-OHVNdo)Vj1L0K8YUTc-@}XA z_ZnSBof=2jvE~J(QEQ7QR`{xVawwXuf-HV=31aUxmzvFD6x%8bY@YfiiMTADv*S>- z*;8c}9#TtmK6EGK1Z{5gka&a8KZSkjIyh2LcB4btXQdX3Tl?!wVdznJwl|P)8SB5S z_aQF0LY<7%Fd^VDr5g46zvb{e4k)mcBj%y*Z9(oPtl_RHrCz05%@>1t^*T%JMD_eo zl(WLNNJMU#aza6mJPQXzox5MdkW;f;u?8L+IOq0Xp!nqs_#o1xPXjc#-Vl2Mj_Pbb zxD)Ev!sE7gqX8U6ht=fLUpd!YH*nM#k&u^pI`ZF;yg~TJ`WP3Tt@<#-3n)bCty@j{ zE#tCVUBv^gq}b0xxgHbJs^F?ZVlAyrDkc9j<-H0}q`Xl_<~*|gqiT6jAo@@(qOW;m zdI3&B0aGSjmqxFa92_P=YWltoJ1x&O``W<*bL)1HN33~-t&E$#@b}$#492%GYs03s zOD<(?odUIa&`e$IRwK`Ljw!yL6a$o}F6a2^Q^&3sbIG1i?}c7>G&w>%&h1p&&w@FK zG#yf-pm!RxlHWj#3ir7+aY%5XCj2=64m+FPRAW@^#)kF!98q_by=RaznnHyO_@^3AW&kXEdRvzjN z*19Kkg|-DJQkpAsbsdz`p%*3t=2g<7c*Ur!vPPMgW?ORi%D{+&XhnMn|^7lu;7kF7(eEt}dKs^tpt?b|{VB?an9!U?HH zrvsYQFAArp+%1jPcYzsgYdD(3HZ18*w-5|h_uv0=d_w!%pxqn6W?e>PtF17Ps;e)LpQFyY zXt2|tp#zz5q0ZW9D#!pAZuF5F`Vb8#SNq#KTg)!3+lx5o;9sGkQnPlq9(G#wtku0c zGk&O5yg!f`j90?38o0}=33Cm_{JxY69XnZ!* z8>w}NwnZkMCjIXd&A4Z?$P(;1UgS}e3yh=_7G@YA^iH}A)v~r|* z@DJ9GU~*2iX2GZWDQ4Srp@&`CkEcDmdJ}jT3;h#C(OqNHxtWKIN6*dtRMJVN!F0hk zcu-EAlJKc>Gj|z}oSV6W){ZdRu4dUg?G_6_LIp;fNho~|KiG-jM|8VZ@D=z1aFP8e z(V|}^#EIUJY6B)kle*I1;G@(Juo$X;sLKHJ=5x~{DA+zXodxNK|IC>`v&nk(ApJI* z=hUjvVhhc+iXN-E`sLo~F;}>AD}Xv0_!w1w`#0(Ulu@RbKqHmd)2q8x@%`@jIBS*Z z67}KfK^&AapxK#0z(cUtU7MY5qNdF%AmUcR^fV#o_|L9|dj7vP@V~SM)_44Gt$~um z|9A~t&(!NRAo|n)w+045%K!gxpyST}tu-)06b=3X9Kg2FSp(Mr?EY8Q07p1V&sdqZ z3fdz`VDUy53k;r#-DTSAnk06QLKhm6WjEGI!5I9$P%UDyB2mT|hmrL(u29u|L$=6YAVa@pyF} z)!8%I-PK>@DK6*^brhgOLV>e`nV&^!LNpVzKH#M{k_?$qr?IhAv?v*FxKc=1_=KksE!Pm^cKTA~d4`%5KSr9DE7_z>)jpZo|IcM4pR4@IKi=cF}k4&M7&xZ(tK^+6>LKFMDG) zoW@-$_-&2aSHirG*`tD;10aF^n04yUJ%TQNO!uR`S+BGzt#E=)PuLXg?D!Qaq_~lNP0@L1b zNTWst;ZAR-_QTM*yK{5s{5^55AnEROckV{v;m-td(NLcmIWYn?fwy(O5dSVJd1iKd zr+Z3m{9x#OWcF+|BeDm-TcJ*mc-!qLAldsl9!Jp8akm;6;=_rkCRw>Bd1|4nb*)e2 z@U@B3y1l(Ke2^cPdo$>%T@Esa7(=c39(^OAInc$~ib)qh-Qt`bpinPJR(|(N!L!tWBU2EOA6w0P2$f;!AL_OKAq<+GhHrhl3C6@Z^!>}Ndx0u0>TdKmH zZss?ADIXec@f+*Kk`Xevf6A51kBJ&jb>Y(Ak4j{yGj^dnQyA=g26z5d#v@$%I=0Vx zbuIL*=dzCJRa3l%brV_bK54i}*zmq#w3X%qzhc=D6Ten|X3NjX@?+qZE3rn{Gk=E4 z$=oWT=LEyPKGb^XGvLvwIn3owRSB}5nZ;OC=1B?L-QH#Q8RoOenYEco$y;jE9Q`hx z3qH`CiJ875QzxfS1pMiDq~|lM3(|j*otM0&no+M$w$vtX znM^2_-laF>DzCf*>lasxua{lwlnN%wcxrkB3b5fo@9kee8U)Ga-RNq?ieXy2CltTT zv@KakLd4ijV>fiaS$bfz_Vc5o&4!!2+{IvjP10cVui`W^&>JtxPWNXD#mPGNREIk` z@46rdec_Jj4H0(zZMjl~^0iG$O_v_%KC0B?Q;9NTpXY!NXU0-S%O-LOu*z<3GGz0Q7Y4r=@Uqh;Xa?+9mFC(xy+K z@c(9CI=hk0+3Gje3aKi`x{XP`wJKN(kPy_$$K5Y9PdD4@djQ?Q2;eFHDZ^cf)lm1xx zB>PQNZ}onA%Lx>uUnB4-`|W9owvXO#50>Zln{2i(esZ&2Y1+0d3=P8@LcWAASpS7e zXETjwGi6R@TbWroZk*j`W7We!;k;zY_bHpr@v8d2RPxcAjcXc@-fSsnv&oqi{B&?9 zYdL?&{G%=CU-{2(!N08FH1EwMIhX4@Lk&|dOdNZ_jWYDD%wcb+N)Ge-G&*ChDYFtG z{Y9WMUjT&vB>U$pQ~~?vBv}wu&nmnw2-2ndi0SCi5&Q%jA6_0b%lGu7+0gg*shR z>JpWq))nqaiE@ax0zL~{Rw~RiO!=JiZF1u5+_zErZ{sG;n}SJ~`MBG6hZfZ13vqKx zG1=MFj%S~G?E~TO&%^g<`u}_$MxvdZ{E3wPG8H?1c`EJU0x4+ zz<6r5c&gd7f+@5rHojr1b$Xy_b)w zk(HI+s58$q+V0nZE8{0vA6yrI&HA9(XupprBpNGOV%mv^`X0+YeWy;icUfr3X1*1z_EErO#M7Be@bzPNcdH_pqQ%DJ>Eh%}xf+^- zr5u&WOr7w`pmd*FpcRo&jqaq2E9sbX8GR>Tl2SXtA*aI4o5fkRRh zv#4GMLbR^JHC_8YLiQYdTrT2H^|}KckyrDK>>3G-pz0C5k^ZwX#|b_p!J15|y?Kw~ z!${uz`aa3dnGLBB(vrkz$t3M93L%mzj7;iEg*M&)GOhu^hY}ueq7!?=pY5-0Jv=X7 z)Ot9SC=5P2kE{1S`wGJ0g0Q`6Vz}nxaLp?7z~<7#f|%XntrJa^HQchJq5m)}3d3~g zK+tMl$LH`Th`Pu8^jGag2SZJ^n)bLL9P3j zau$j5N@|sVc=-|~WhXrD^D@V2kE8lZgt`5AM?mRPp=9c^XX+^`q{~-yrwc&u60>7= zv$yVmH2Xrz7*=FSzQ{Ow@W(dVTOO;Grkko_3h)>ScA zZl%H+H|}0XE-DGieF4IBpZj{mc(fGD{lTB=Z4>}3n3P|2g3iM~z_4#-F;p9`ZX32iUloZVtr;BP0CEol@Ye5qnj}&IINpT zl{F?`7H0WUlu1$61+Lq#(wsijy5qA=ndq1P+Yv(r$C=!}f~v^m9yww?p}@|mDX!|DPY#pAnw$^CdC&9EpkaPitH~fqa)jSg)845gOwEte_gU#z@xupej zvJL}8G&DJUB~p*W*Tws-!vGPX@0@*pE_0avelFjo9E|C&>wJsX&W+bu>4otJrTCx7 z&yS=wNWdcedsE3ya%OG@i36I*`)jCtWvnSdl|KxD zCtEQGZGa=9wVj&Vul|K`%>xnX+hsrz#v?HcYKZpDu#bz{fVz;^6im5Xx6G5>3|!ce zO&*u2gu$CEmNx1A=tW3IfVSAjSs&~JTTScP+| zDCMXZTv$u!o!bysHWgh%6x&m;&$RB7R2@YvrUNsSQ7b zxKGZh%@o?gD!NM`6^v)o2y^k{^q`REFpZe>1$oX<%>J5`^`7CwcI+yMj5_0~TN>WO z7aey&qF-McOWh-K7qs~@RWbV>7m1_d(gzJzIm2|-(LHJWMwolj(LGAv7b(txq(h>6 zQjY=`ZFzw)suuRI-_gk31z$j~A3-*57b$yUnNXswYpY!j*JlFYlJ*8;_QjPrhrpuv zD?;*yTBrCH#>=B<5pm}+@zV}?f}X^CFyFfPv?AeQzOgRGV4eJ_*#*Ltg;~_;?vNXx zI}1XcePJC8cZxH*KLem9&Hy}3$Tuf(%8?DZkN!(T(5R|ZJz#F~0^|2AoQ=<{4$=%5 zJ48&3PC0#frTO@&R4jj*;P6__)dzd0H?)ZFH|lSlQZ5QxFiDrl8Ha*Wa*ioP=uM8I zQeGCNIk%k}+qI*U1=L4>N_A9=k!jmcV{Lzg|2Ec?Qc3u2}k1q zG9&zgC{4(SZkulEiMH>N1oWtVJD&k8440;?bBtguU(0c$*{$LW$Jww*5!CW^8bqBd z4gPNkZiESbm-_h^gtW@cvS&`_z+CH(pU0k`DdRJmpTsG~qtpG1lEs-bJE!|QiZgyI zJt96z}CfaW%i>0?R8^Q|E4dxsmyUOdoX$UjaX3_Uri_#dNu~v=? zdk!#WW<%HrcS*+u)=U*x16?sPUZE%JtWawjSks-Gu9Jm}jV(ag~R zTm1!wQKmBgb#J;X|5bI~>~3hygO>X+Ub)rd@TdbW8Ng4({{ z4#62!rI`1%ucKhK0JJ*R%+-ArkF4OPpwzg{UNu708jT&ui1YL=Lsq6>{Ra0~x%}9*h@Rqq3O-cU^AO1{L(supG27 z%FWxL-frl!kRvGqGAt0sLd{AvKMT=VK5PcS)~=lxzb$GP!*o7&7{(4^0_#Z3WoFtt zXkFAkPJQKl0o4ZUGx53BHMOqz1=gC0pGh?ND{vTP$!oQ!haE2JJ1j@B6PVwFE%oK%4NJ@oh2Ml@{7tUj$S(fg;O`y& z4r-(C5t!k+Gd^o-S%)F)Wy4n#U&b{!kvH(4zBclL*v4V}x*U&Gi?O+#Zzdb@m$^4_ zHa2maCmgV$geDfaNL#6#2Nu)&ya=ub5WziAy=xA9TC~Y zdol0FaaSC0F>)i}Q^4hl2~%I>Oz5z+gqIUON9}lCj0IX(zfr)3wHr5C-~ zOuNYVa*kAKmt)qn+n4Z&)V(gQ%bGB{2zT5d>T~bOa|H_`+_A8gzYdQ0co8nfGQM!b z>5t#Z?MTNkq^Bkr(s0!Z8PjmpO`t`{%~Ij2rrt>F;0Q8y+Cf^~Ue4^>b0c^$*Htot z>8XHr(Zodw_dtA0qkT{;Jfk>sx}mC3+HkSf!PT-%DI^%O{#1}CkuRobi*VC@6+#cG zGMrra5Tp4m#$|&<)Y9x0y!an}!^uphXh`67m zvE=Fv7Pp#Qu-$F zF3c0c9fImOm42RRE}2DVc~79fNlz=bj^N!E(C%Moh~jsG%pLeq&OMqhecv(|G?f9O2_F6gt1qIcje z_N7e>kkAJ?^_rrtpc(BQ$DiSGUzMG9@CW}s%w}q5!HjF!laN-;%+0>7O zMTeyBkJsi>{)Gq?a8fG5i6Y3bOv1F;FQ2{qOL8oHww?zU!qu_{9fz>R>xGeCw2|~U zxol{YGM|@YB9@$7XxdwcPK(_r)Ayn8*v%Cd*ba@@HbN%A%x;ZZz4P>46#Ds&JMnLW z4kbSo{>mMeWein3-2m z-$}nV2(QPq83Ocax5uxxqhmJ+EnQaSj$dqdR~1evNE99D?n;yxkH0c%sV7^IsRx&W zIS+7k@(Ix2qey>>DPBBBs`Ef;(x3_s?+4$$~V7ac=Jc= z=6kbDYL7SbxM^QT>&5DNg!m=&YpV(=30#$}BV4I@vbFsBIFO%Ou{5fd#31WJcBIy8 zYbf=vERW0sbnR*yoVU_HX>;h(zlOE!dcBCo<9y+E0+P`d0^PY*F-_sG3 z>w`4YDQGRMhVY0~TMPY+Mq@uxwKWk(~OOQ zWZB6{CWp7*Y0D_ug4lkiDy8wXIf8Wp!0PvP43g3Za-=H~Uv%Vh9f|V`Y(r!efX=c8WPl%bryFRC;Io*L#N+_m&J}d06PJOPFxKAe3~|wc z&3c=?$~MF7Tpy^KbebniuSu4pDeG^ZW7NW$Y!Zkb)Ehwk3o=J)bmUIeu!$38>OYPb z1Xg5HnQ1Up&JL6XEyLAvhS`i-NyTJ#6b3}rEBg9OaAovyJe!S2!hQ8te=u{5x^XbO zx&e*>Q>JlWnIoUJk<{*O9IO(~5-N=!;H4Jk5&av{zSrKCaLnKt)hcy@E=;fhb(~We zLnVZ%O>4(w00a`HG~;CrxL;$#ke_K0Wz`?M>Jx& zHd5}(==W2tXeBjq0iNroat|b+>R#apw~4s4`!B# z*~M9c<5ml5$KXcfBt>`Yp}M_|r_Q|p2$8i~b!BdGEJ67V-~<}g2LRd+VA?NP*@3%x z@0X1tfQs+(4&WkPDgxI?0G9)_)PKmf_+<_b4D!APdGF|)K~Oc?{eUOO(lUOYG<1?| z`_)L_W`MJq@Fc1DU7U*Ao7dpCQH$2b8U{0p}QPg;l#dgpX z=RRi(l%GEKG5VO@a6hJYoTM~N0JC>M#>*Q;82msNfeOOGwstZT(tvuv(W zIC4Ko>AhynW;1|m<9A6JhWwNrb(7+@KWsME>muwvd?e8Vm2}HtZ7@Thbh*Y^RLhAkIUL<5>~wc%8kR85z>{ zEOe)_@Xz4g>8B|nYHvx;<(WT6MHG`i8p9+FCqMyzhhk%d@}j^1ZOE913?tQli9RmeI|nM5 zHEsb6++_NavUM5Q$$SzrXgV@aY>ONl6Xwrug56>!69DX?G%-0%zf4^Md3M;-a$KLp za?{?SVP~wl3orFtv;x{Q?lu~ODR3xd7Qku~rVq;Vnw7(0CY&5O%!HGZDQvX&gzA?z z80|~ha!6@3m*`mWoB`vFKKz9DSBsj zFA@p6CtFc?Y@s8s$m|oI>N!^0BN}wV?}XXvWy<4YxaI|OZ@8{5d5+9I54Sk)ujr@s zR<*EWPmw}Su+k-xzcB8T{G(JS(Ai<`X*jMi8?EEamaEo!MvbYNJ}%w%a*))c&Roe8 zn+bf4Tfid+1>g)XOHdb&WzJ){^H?Db$n9s&H&*;`Gufd1qIfdFdC7{3D~J(;e3c1YM4gGpz+)AQU$@X2`Jh8kukWraCRqeQ*}}RdhmHs;}v} zmqj9Vj92?%db7ss_SIf|%6AcN`Rtt>yfM4z#4&{~t_sUk4%-3p$+Rn6e9G>X-u+7V z?&pok#a=1yM=B{ibX?{oO<(4lQoA=bt5Cg+oWp6w?0?tZGxByvtUZnf@d+#BHHXQ2 za=FK}k2Gp@$Q?5NrAwIE+Et!)_*mnv-!V8F!>tQk#t-`p>sj6=y(9+Kaw+TS)Uv_K z7O)hv71}vg9>b3}v`$^Lgf)?<)n^c_kADYu&sLo5)0e}I>@AwXXLqJNTd}j0yGF3L zfR~@F{G}U2xkAn<5TQCoW#QG_%xmukHp@*Hb+uRm?ZZJHTZpkOi2EK3(xjRltcoaW zBU$V8`sG$GU4JP)j>0_p(9^1ya_KUpm@tyX1eB|4GJmwPqn5w4Q5KK!!$U25)WeKt z&Mba2oTHxyxE-URHgN{4;btT#s%$pjllnr^AJDwZh|}(S`c&cf<)GjIE^3fS7Eug; zY$F?1>ixnET!B9J%XSVzqwNMcR8q4+>)}9r%Uo78}ljO2VGj-7+ z$@WJ2d?JVGQZHc=S5(IEMFe-3dDO1Kkd?msm}qdR^_U}UfSCkqbc}kCs3+ub<>K+5 zUd-NHVkVIaVL5FkPZ5^n??o;zioD`6m0@RmKxMffvi_tIiG#7!3b&p^G156@leBGw z?0KKMjDjCy)?7)i{bJ?>$4CYlkSe=K)6TF*sU()Xz-iP>8Z`{PaHc}M4Z%hevQM8p z;L?uWF(muRGrvmFgAr<#K@L53_QF2CjM@&#tB4a^Jc+Re~+QaVot7DI<_% zr;@XXd39pDh~;d_}V<Mj$dR=nRi5+9?%j{%z1Kc z0^a;*wl$wzcW@5}kncNbe9ZqMKu@r}Org*3`4`={C)ED#9`;wvnr!Obw z`m)&ROK4+|F-cF5w_Nx-nJGs`!3>%DrfH5pVCIX`v9o)p;pbqQ@;syrxC z4@5P$N7j#sQ<*8D?-4}9r^!nPEZ~WR-?w^z@pq(9ZF$3$G$7Wx~cUznaZLe0PqR>b1 z`zAt=^aZl7Ksz|NZov2!TRE)K#7m*&d50Z=?CLZY2-89#m1Go*2ruk!;{InQ_(^ zd~V#WK-#5!EPi;aIC<3uB?ZXlG{u*GRC-2P@U)@RV$Oy1wI(cPe-2QbtmY4ueYI1z z>>`a+VjSC!D1L+FN6MvP#3rZ{SMaoLqI9-X{Tx6A^FnwPa_xDl;@2=s0=t%-mg88! zyAX;Qh6RiZ5YSRsqGd16g;3%mr?TAy@EH(7m(P``68=SC+p=No3-X~i?ZFRdXICkgubUL1aA}A=~qwOTj1KTfgwsyruWjwhnYDCeD&Z|4vzSV zd`Q1REMw#R8|Lqf+k`lsZ$8)!{C361p(l5~rzCL=s8KZA7rz8H{Vdb@n0PJvL~HI} z^zrP+&cBqWMBmIk^$_r7d6)3K0~GKmLQ8MdQr=}oBNrl>2X{xucSqZM;=6>{Kd}pJ zK;P<$T0yGp#^VGH-xE#+y@8T=4X8okZtKulOW#X{-nI^vFCVc{EPi^{b%*K6MnQ(H z!=ppSg`Qp6O3=2d$R7I^}Tg_fD&KCoh_;t|Akbue~_+$tBTiRm~Vy&rd1JsYfqFS4zMMkG#&T#kJnx1nm($n++mwdb;Q*(mosaD9wI8*(A#^e^l_onBM?V7H%c6iU91HXF|R)WDSw@f#FG)e@7O+!~8D7 zq9RlDn6SR_hJ?>k;Z48+Kip_PrVqO@R4!X3A~&3m`1*SPSkJlDY`?rg(VStn_BTTs3{1Ntu!`9W7SVt zyZQA$O|Xtjxr1-QD){E_#M}W`+tRScns?Ga;0ZJcsHL})v&5BWHpb@9hE}k=`Zjq9&Fg`00 zB2=q?nw(mrE>&A!Qs1wdx|`4QQSo=R+PLR#OBQ}-H7?OER5|>KwSmN1OAhX7%mkP= z2&Ac{9%O08+XyYJ=^h;{TWvoA1CMTFs>ituXFOmysye~A|}ij4s(mB@cvX6G6E z*UG?Vb(lr|lH(tdlF{s^`7u8+K2WbZtlz1Ut7m+{6d#G3+b@h;IoY&i38BH%arQuI zL{EYXRk~V7XsBYam)s{{$R7h3IIpU#HEykt@^{w?L-e{ROn!&O;aSo^HszaUy(fBE zhH)3nEa<8ibFtQZ!eRrGq$^x>$AxNpv}s>B-2?oybCkEsqsO}$l_GEXjN)KlzkYFn z@d1UsjWapJn+c6G6N$r2SG*rf&s%<0=&GvGGYUh#wCpd~*;RmBV+T+4gA{EBr z(_<5ZezrH$fuO<9S(dS$Kf1%5t4>4RU(WJ)%V(Ss=~e2&I@-=xY@drCRYN?5+RjV12D#_$J(2&_h>h+H!(o@pEackgONM*QvST zTJ9;N!^qt@*9B#vP?sq>inrY)0<*p-)U{V@5)8DLd5Q5XN0Z1G6odu4-KfB+vW(4 zBXyCjJYk+=tYTwh7z@jNZAg;4Us+7HIZ%~Jf5B|#V1>SNo^n;YaW*&u+>(t1#AKRQ zcj}vrPlUtosGExtMsGS`s=ic=C8ysZ*&%9&eUK0nIXMK}{OpLrUEGL;jF>jB#kOV}Z=^iq#=ET-+ z^%du5{NLpvGo1%Yr!n#7#AIN;6QM_Y=?fw>S4Eyu)DxS&<>K{1Vi(w888cd@y-;vI zm=)#Yb&Rl8qET)6dTq9Sy^7ZmJ^qp2ke)$s3(q z$9+W&OU<)nr}f4=U7nWKAPnW5|0ACGt=eh*POO17;rYtx*6-wr{nYdI*IK_*+O6MP z-nD+Gx!5Jhf9Gk|@AL|&Yo3D_TfeoPxH01So=@c0QnV-#&87OHdb&1L+HS?4Kn2U; z>00qQXj^L-2UlC;-l8ptfnEU7`7`@yFSnM&;(wB7_q$qnq1<@f9om9laku1lI!A$- zd1S){f4ts$O%3zp_1+$@WAR(9*Y9czrpW8*0HeEfOB_a8D&I=bTY0^+$LrSkDe_uA zJyP8~rbcOIUp{@h3{zYjlfcZDsvgioGGAXbN?S0RzL8$8(m%G-$7l;iSm_lieZ8IT z)fV)&()}u3_C2YmN?Y&+1T*zaROwIH=~rqCwpi(tRr>vQ`t<ENM)$URD~@tYgL{lEyUqQl=Cq;gWW~ zq%qC@E@_skn3`rSYMLDYDy)j!>t~kBc;l7CK;zMT>Go z8Oc<8@&My)m6vuBo;3+V`?@3uAxeU{X+I<(y33#P)V^Hb znex;g#_@>_raHPTgeb~B2YYJYrTHjUHFaH5@`aPe_UNT4U+wF~SNln6jU(Y%bD-Tg z@zzd)<*i-l(RDM=l@B3!!ehI>0l+)kVMmnH_JI2nlv|b4c4rp}owre7rbfAFmv-Qz!#@ zLU?V$^auySb0(pp5#=Ccka6#3n$Sy6PX^D(zj@{`RmSP>LT?)p8LN$=_;E*ChROXA zeY0D)S|NMOpCg1E{kc71(|IT6lDFHp12=mBB zmQ_1)x!E6E#f*Dp$iZ;F{gT7MIX319ZI*-6B%CJ`$MYNEycM14gA6v7tHf^& z=a;Gv*XF)Q+vZZlSKkchlMmJC{%MUqNc;G(aLznzo3C*n0nX|3x$|h|^UP-t0p}Z4 z;$h*e^h}UOO?Rc8(SK? zN;IfMOhioxJauose?D+M(0~aC)fP!N+bUS)|o(b<1a`7aX7;aO#ot1Nz$EivNd7jZ4>}W_ULSSyOk; zC6qz|k~$o#=<5hqlVN-xb;l|+LK>QD*UA~qGtD?_5W|9!j)2}8e}xLF^a0pIo;rbJ z#u70ETrP%?`Z|AX4?eF3HgmSvR?!q}AFYZzgMPxPWQ0(-&T8A`Z6Av|9^%q~zDdB? z0d_WTmsfT7w3j>PqQ^PF+XP*M%4`KEz*Ww6Tx5rk%C(r4QlGL13z@PJu@A|SfHJ{R zpF+i#epE}yCsp}y-kN>Y*PVe4pG=5m4LwM*E^c9J97Qbl5yqt80GiKP8a{3f+^~ma(uLgQOGomJJJ7iFBjJz6LJM0(SfHL zXF?BgQ%q-ZiiU=VIoS?`49wr5sPR{d`GvR3_UAR5)0T>>6i%q-9czJ3yszb1x4GPA z5mdt^$GcNFcepmdIi;T8Hg1* zP!bC`87|8#OBvp$2vCJv(jdBcBC-eL`PrBamvo{OyXb7bSVoMM`XZ4|5Cj+!hE;4l zw;yu&7BMM)e@ZHI>fc|%}Ly3Le%fDfFwZ6V8S_J&D3CebD>`I8H zs=lye`mDj|g|53;zj8;ZvG5L=*_b_M@82NZctE|r#C_*>yaoS;F}PT-+K#m*5&|fF zS|od>OAO}-4E2+LWI~Gu@8wIXZbcW3qefXM(||`QHaGKbQn`gLqm~L$JG+pT@{oMa zy=rDz-RQm{ocE05scq)ax;Ytrc*G%*#&P(?+H3WW(whep*tbmpju#ignsBfWXXr0! zBg)^Ya`r3u;sFIOaYl9$Ua^D+cvxCH{|y0fPaeRtAFT^i0d{B1K3UrBUKJct;|Y)M zBUEBQ^EC&sS>~9i%DpP|F$=`eYUdj4sgq28$Qo_ApD24r>fl=`5rp2k{ji5r2AY;it?-3~*60 zL4cA{e=S4SmD)sgJ&OPDvb->yT!;5ol@-3C*%gm=3YN<2q=wX+r9G&0@3{PlFj}|-l7Z) z6~&j9V5w3LrzKGA;r$SJ1~LpWqc0)JtdRiEh6bsT0M5z5h>Lt>XZXJcb{Q)Xhm`HY z5ms$@UxwJXtKECHNFba$QCqN{R|8?i__vO(KjerwW}p3SlmP~g~qHtTKxyi1Kend5>pOu zLLZs=kV&onNLC+o^V!}rm3Gp}fhD#k)4f$rP;z@9{AHrLY(rp)BSZb0U)``FxH1rK z&b1tK+SQ9N-mbp3{=>$iKEaUvcpGb=K;;VFY$si9<+#Fr9N(P-r(mjyqpTdnwNsBL zrK%Wirwp(%6j+a1!x-pa)gSz+p(PUDT`9<{L@f6&?3Fsx~VFiB=M#7rQ)qOdG$dBo@k(AUnOJ($I3XKcO2H z9y_*zi4;0laOqHE?Yk+N$Ep)D9CCg;k2O+^9@EC)_P~73VH5LacSw>l?iQ9&?jb$w z*wm@B`3elz6@FBjn}dxR-BsU}tlGRy>iy6^Uo2YY&Bn}PYe-D=FBex+PzNp}pQy7! zNfqM(3)Ovx_LA70tAO&_OF7U0+~zy<7P{Amst~o98KHOa;Zp7haso>gwmqOAwuy3D zFYHW(73U)S>10T(>QikJ3nGI4pi%?G05a&q<%?dEG4luB#;Pn=z=?v&Zr43Kn=;Me z+Dq*ceFpb+;m#cGrK*80?T@i)CoUxhx^RCDqI=()dwmh+%0B1nYUd_|h?yRJlLvds znBfd>&)KwNT>X`VfbR@UjVZ-zp;Yev9+XP>jmfP>@4GSuo;^f25;!M%`ghy92r~Bp z+WB7wO1@IKJ*G|C8i-aVzS8dMM-%(ao~hS2EIc36D(9Pt&KhmzmJD->{A8Nf$dA*! zTz<053G$O|dgZ5=IaYph%yZ=@*E~~xdYi@a)5jbkKY8X*`N=m2$WLE0Uw-rmG8Tw7Xh>R;xgZ#eAXC zzJh1yVJ#BBmJLO~wx;}Q%=Dh4u-YkmW;%yVz*xY^48@ud1T_0OZ^;Hvc&|2l&N%&n zM+)3B87x@t%`k7JWqUKt8|BBTI=wf`oG4G(Wjkb>uJv47xjyFliYvjDH#*lbm}?~0nOttJ@m!m@-sRfP zWpI7YwTo*XR~EB1kLwt&AzUu5Q@GCHI)`fvmn}!aK1wmuih>k(amp*tu&K(ts+VZg zp?_&ngpi3JpRbAKZ&fr4J?8uvoM)^&10#@;xHz+2kepG4!yRnXFF^s9qXwfR3)Awg zfKVbpNhlz{o~!lG(E57{xLhdvV6OZVzGo@Vmma9Yr1Yx_C*k9)PR%$=`+j5Sc;i7V zro%3W@if1-X#BT@=rxH8X1)dQ1eZTu>z}FhAIG=Gx$sd+0oC=-OcRKCKq3sHt6F=*Y}!mhD(V4R9m1V7X`yqD-rN{AoiA#|)*eN5|*I)nP& zcs@41`(xwr?sVomnGW-U#Gq67Rgn*jK&}KO3XQW=>LzVs)ku?%Pz$uI1f-JoS^fxS zy3l+QTi$mR3Nv2HhOmFCNc2|`IxJK-ugG3l6B&<`eqBxErd(q!r>CreABW+Y;kj4h zvOx+EIUPQw*pX;c?25i=$*ZV+N5&UKa*X9QP_L2k#aysH<4cJSJChv}YAZE|7@zQ` z70C@&2ImV@mSk{x(=&T;dJSf9h&C>RlQt?c6z#$#l?s=X9Eu*};EQ^QTQ%;j9%FHC z_gDl|V{xpiJBI;KgOC{XB8ANFBnJJN-}qyE+*q$55Gt`C|NaIAdElNbWAkQedxl4r z?KuVFE11l*bTaV8b<{z?oz4gV+~-oj#f{IAAbTg;6E;*~EXU(2+pHIu7KjW+JnrBQ zDmm}7%SPCg0d7=eoo-S75OxyzH!>oVHf(l0cQVYPv^Jrf63uYQ#Tmx1Ji-d4iUO)YfH zpW7i+)~vq9$L%shq+au6y}Cp9y@yS@OKj3ZQO|x4mJlZjJ~m!g`8eDc$F2XB7<5Ow z(iJ_9Wb-q8xT&rxDUcU_ZK=b>td6ihdRwGFqfW%7ncd#qf>R`o2RMKxB1#wtl*6vezK zJhuaXkc`V%MHlBrDhI}8xQx@$&$35uaF3xHs9xAZbyH$c^Ex$DKUjBkLv`AbhU&cy zYN&eY)r%q%2BrYEQcP#~vTXzMSIPtn%XWDZm?ulgdRaPgbXCTHHFmbH=uCI*GA z4^@dXEIp<-0s3=b+CLuTdI zgwOx483p|P;p{#&;U8w6U(vKVh^FV;^&62FW`QDbUfotR`c#C7;nCLzd-3m%X^c!{m#7kh7$YQLX9PR5Nl*O@U<|{PI?Tt+FDoLa1Jc zXjL?nJ0^(|UT_Rab5+th<4r5+RFZyZCp~W^9ZS+|JLw54iH7b|gcVvPim<8)w^dZs zCs?#RL#1mkx785bvnIS9rMx!nf-Jd3Y))GR%dWjh*occ@K;g4}vCf$`|eGDF{$hpgZf`D*Z5 z*l13)Gird=B`7-KTC~R90#Ar6*Gdk>4{ z&i{0x!oAs!VfKWtFRGA~=%8L7%E-lyes4mRi8BVR{&#dn-)2k!B3`}Jn9Q$dahBi< zcwWe{w*y%jH>yNVTaclPa=q8zwGbV*Cqy;Ycp{?l`)HWFetRIHop7EM53Z;1qO0FT+4&V z0}-T4M_4`Y-Dm~ql&(S#6$kV?u+aQKxnrzII#T4|zB5u?$hyJBz>OSIgds_0@oSMJ zagl)bq(;Q0-XNpQ&N@M56+~v%;#%)|ci(@MX^y#9`lnun)HJ)}OyHZMkCp5+i#;@d zH_y51syQ^NxID9o6U^aYh!j^37`f7lNdZMy>xV^on2#|J!Q)*Ku~q z)JFY3rNn=WbPFy2O5&~$mPci3wFpAz|D?y zG%)xarJ?@`3?^|Nc>oNi`t14B}z(+Vpp~n>5Sfy^nFibvUV~mZh+QTc1}YQgPwa+5kyno#Lnqs{^$-x zQ6){CD$-1yrr1prd^wH#gBo@SODDIqD%qBD+u*8HUn_=BXtqI>xQs>D(;my>=}zdn z9u`mVK6fITMAR`wto5b|7bFK0Houonr&M4tAZ`Vdwnf7#%5N_YW>qxaUhI$D&XC;> zXLGwN-U_TBLqencqi-(^oz$Jn`1p-PV#$fTj$j;5*jCEjQ5b(j!FF6hMPsq~nrv+f zwsIq|<%f>Ilyl=U{=tMN$O+RE6S6DcP@v7GR^tKwU_w^KaZ{n+y)5ZCpcEV~wdd?bP z@5Bx5!ZpE)OlN=fEdo(L$xR5ZLzGu=&8Bu!Y#}13E`ME2wno?HhXx^q_B(<;Ni9vp{uFMBbJ;{R{#_vG97v5k%=?o#994U%a04D6dEJD3YP5f*bq(hgS;)^H`A! zUK@T);M;>AJNy`Y+5dm*7;FP5M>PgNM#TxZ{SU|BU!al0kAW!k9)1jd&hdNt7`&0) zV+>y8vBwxpx$5v^VA10ec@vIG;wp(3JXr1A#Gui#G@DsYvQGchtk&rb&8*W8`NKLr z)9@Zr%kirp?qGSld0bIuxaVWfmCXlq?%d{5sOALCs zm5=VW8cen_x z+$H;U1qOidW?9lNoj(Bfi2ZVAIC}KU2?qN1{klO~aMb-e%%1M@>vI@1Jon%@K*W-S ziFR=oXdST1fQ0TeramF-Y9QdlfyO5d5XIFgl z`Tf!KPk4`1{~qK)_3tjfbEQ%Dt0Q&srDaF%;^mk3=;BCUk1p1#(yEK0jQ@TYlWVS9 z7hs}9IpBN*6XT7+Y2`zMxA-GBpxt# z@(*~an!NkKCjacQLpM1=d}h1J)9oe;!9|lT7~8r%LSPv)he=*kCE0%~z!*vOn0O2Q zPU8<@X^K^)RLwkuT8|6fsaA;ZmE6V5Y z*6P=)`RVJliG{d`DE<0XMn&V?W5Pc~`ThjGHMTofd#MeT2{?QI+`f&~1xmcqctd~q z*?zBpw5byhHK*BS8*hN1o7=yv88N>c$8t2`bD6D+v;zO0f_aM5}!+WCy`KZbo=wow?q;X6c2f9uX1M3b>DZrf*I#c|4U)^?vif{GxnmRh1nhiTOi5*1u#>(8b3M# zT@CRuZqzf^^)@rlQu`2_Fc&s2VKg5`-rNwQHS39Uv>C;B7%5b-)fr(60XQILau_SA$LwL%rDRf3_m z%U!&QJy_&cat|c!HKe@ARdh2ogN)-04c|yYbne!?bqd0j(WmL$_yn)z%@vR$uLjPIMU; zd{a{og74tNw6`$T-mLWYjy+s^pJY!+pAFsZO)uZGy;;VCI7LXS{@|%_PU$Z z^LJW~Js+5^=~Wu~z{5cJpDe!g7N_R#0X1~b2YJDK*n&0i5gVO8e_tNb-QM*1u((%p zJ`hx(d$qkk;4rPNIH0xN@J%n@6TX?o8Q;{@gW#KUnD*wT+6$T7-QLp=*WQP}?g`!Q z_NJHb+1>)eX!z)NoLHClwwVzLT?)@P+s9ZtvV<4g=p#Y_!v7Lw9@A%lB+= zuCeaCZ`dMobavN+jVSrd(+q3 zZl}H8>SRwygYdA!wfNpWJt3T0ZwJ(%+N|~qdBJ+S?c5^(**>#VIv>LBi2y4xXa?cw zszd_iU*f2Xoi^f;_h6Q@o7392d> z&9vXk`6?lDtpgeC#WB|$z|L;V2%rxPr||5E^ZG0iJ0!!)ko6Z;E)5ViTT`? zfgx1|Rw&kiGVLQ~ko*^lC-P(vwSy3-5Ml&Y{uA??)ZhE}{&C?a)~R+g&YD5WzTp~Zg>OkQh- zyjW6)6_@^w@iM|wIRw8N#%=M=dC>YJ+iGxnegQ#Ewc_PQ0{K7Mzrm^U=SHF4uhEMC zz68A}f=N$4eql~O$5I&*>7Gj~e#f|g-kFs(+8O8gS7bVVczkG>RI}z%=`(S8M@kIp z}zO*G#vAZ^+u62saP35O;*w{tr%H70H{F6$I`!DyRV;R;sk?& z3rgk^YPOit%$&X4o8>~Y8(Q&*dbe2KSbDb^4B`9caP$acOJxpmvl3lfRJ@&=c8I!d zXgKPHzNTCsF{HPM)(sj7ay{BBW-Yk`tgsNH&$-fgU;#e)j2t#*5#U$uSR{}pPtzJ{$@!w%rW=uA3L z<@Oxrt0-%Lli6xr{}YO~<=XHHhc;Yvg&6(A>)SFzLPL}Kwyc`BWHF=wp)^4_iz7|o(y9%2jKlkJ zfNLVxB(58|Zsod@YbMtZx#n{ja;{L z&Ei_X^&rCc{?e zmLr)dLU$k`f!#CC2kPK`Fe}b4=c|fE?57Tblq&3$o+my6b0vAQ>=CHiC2F@~)C({4 z!fqQe)+=#LK+MpHe9MupFxw{^uI`o}Ps_!^ix)}H5^5JUQGJkY%0nyUz)hM8Pui!C zWXCKSZW=vRyh)()@qqe@pu?}mSceVMq#g6$kmg7OmG$oxa^QAVGURoYes%zBQL!+? zJ<2Y?sXvnfXCvC~@r&W{nP?{jq8AaYDpOy*RJNN&`i;-gil(oOtKs44)5(54hZOZz zd#Mntudl`ljbt>+RF=^DWcSa1GneLIb$hzDu({DkSUB!WLfAy-G)XDSkWGq_9?&-=E`JpO=YCfnGwx~bLt z0}xWDygBs*3Mb0Uz;f|6!EK2Udh}0hh1oMP*r#sKt@3Ajs1HM7X7guMM%mV769-!Qp1t{i zrzsZ_fl}V44Rw1;g1wt!a&vm9Z|aSt_|9HArZhAdPY&J5WMhzr)jV8d|r5OpP9p>S-+&N=yBuR@6Sv7(gt(UE0@u_sK=fnF_|K1 z74qC&;j!9lJf9cd-DhTAs##{Mr*7}*q0FwWLiC)9H5#3($BVV6JQrBM_f!hjTMPwj zff~R&Fyr64GcF<{lO~9I;YA6FSDcH|S-`y_^tnu>oW+ce!@Pr@T(ESJnMk$LS%T>)LiPy9VVQKJBaHrF&$FOZY#*1P|LEx_{iG{Fv`sn7`XV~R>1pb9e*J0B zjLLHa`*QOqZnTC)QY%MMiIyhIvAxsN*w62NN32pvZSzN*z;K`f;iH&Y+tc-@9}Ajw zW2@Vw1)}3wUsCS;2Tofg)%WIRF*l(f9$a;JZ+2+&!F7-AuKRrImi?j>aDZ|u)ZwK# zb+(LHA*U0F-t$oI8;BxYfsxr=H1QFPf~*|#1eK|~?eAlMZMXehGI^HwV!64^pIJPX zqJ7l?j?({eDPQPchzr^5&L4?)fOngEjXS?Sqgi^_Pww7O&}&RWFV=*SBq-V0cq}o$ zouPJm7@ae~2H?hEL3u$i-2>Y{Xh!!B47Ms zm_N^=Q$6Q%RwVuvn>MiRTo4_{VxKi2I_`-vs2d}M=O?>v?@bai)tQ`*O&c2fsd5>V zGjWE%*gMM$%t0#gQzZVWk+wem6^u76{?~_mT%ctEE-o(5;X{f2*zaLHLP-3H4W6dV z%Jb`objYaok-PU~((-lA2x4{vGChrb0^vPbp^ctJpbO>iz^Z5YLkHB;ma3=yu=Ql8 z*8`;n$Gs}NCtG`nA$C|+6LKc~5Kj_$@cZ)TO8G-TW+F=#F;qH6`P+GuFgF}j%g8qKRYf)l^@I7(N>qMO zkNDHcjGsE66OyXuy8_Tx{MR(Ys_YQobgmlNBHu*kBN1Mi5uZd$B?M!Qbm?mOGm3tN zCLXo|tI;Z&qSbP`X`Xe6#w%njF9&+UE<5;RZ_f%E*PKuiLo1$03f?m5ErV@=_v;qC zwfbLJH^EwI+qnwnkrYsOb#!|%^AB6;AK8}X_}SSOU<9V8GW!9C{M*Se99+zPm+)gs zJ+ciqWd4yY{=7Exm1NfrD#G~u>Y(w-F!E1g43GsYsbG)s$uOp~_~M3GSLyp1m(}gGIZZRnz~ih2iL8J6{wjP9--H2U?tPgKx$yMBy@Hs z0ue`Yc;!5>ylxJB5*RLny|Nt1%PmDNG+nc=L372kWGkISQ~gyQ2*xp}In!Z$+Nnfs zsj{-iA5ivqRhBs{WgQfv>@`w$QL-%jOd$%8%3kNn6w^?uRPjVghELL$cKVvO5Z_#6 zk_5*<&KN^nZMOX4N_ECPFeXC3GO8hf6{y<2dTjwDF-lE+%fj2T1C3{Ntc}n)nDIm`)<051ws76F^bJzPxm_02pdyOQAzSgJz z6Q8AlP5%(k0k4tf(SU5CQ8!+JY@`LU!9AgMmJO{Efz~kst-%7VY>5Q|WleZcYxIrZ-qHPM^$U;A&^=kRdVBTDaxF$xU*)O$BEz;WjK4)4UVTOE^X%yC{a*c+zh*_p zC-m#*XLM@_bipep4^p#=xVp}5SX^Oemh5q4f zYV(MQd$kY4Mc{^PNsi9|7nC_fxy6qV1StM*RH_s`t@LD*crf~>qB<-m#Ml&X=SX{& zf7H(sgExrJ^rmsSRne1vcwZNqzx{W0;GasukWbMs%i?&V6A1+>%Hd{?w72>iHiB~| zR!2R#-pJ#kx8u|Nn|%6LUiU^%^tzLg7x?tAwMzb)-ja4GJZDS{= zbLI))8}c3I!vs7^ei(=WF6LThWid z=q;Qw0J?I$jlW|=0>6odxmSz#l~$D8IW|hP>AR`(f%*k!=ZR44h59fz{^)U0fa{26 z^^<_7(db(MJ<`z5Ut`O0vPr&N|7xAes9yPFA7%QTt0nY&bYR2uQ}Y}F=Uc}5Q^lC< z5h;b=hm6@ZdV|!%1VPlRb@xnp>_$Kd#{m`wlv=%DYHL*Sxnm71Ly6l6fh;kmRvmIw z--(MYGhofo?nkM?p+7F!#j#+l6SMxU-pC^|us;1u5n1}^m#S|5?lpXFc0Ygg5ow<> zn0A}T!!a+Gbi){i4(<4b!j+y#rG~d7HASQ=TebSLz{L{Ye6CD`+GM+Nts)chXxc5a zar9Bo#$!EAt;uzze`SK()GS@ZSrb@^{W-otz~_F44oL@n`bYK<`nAecRZ(jcv~fFR z$<}H=ZnpCUw90mRR1bH2Ws#pRIG9WA!)W;$K4gATGfG$bsQHLiN3fK%1`dZI zQ+|-)jXc(nMF|#-6pU||v5-j{10QJhVu z3027{9jZZmhXMAv*JurfEI=p+CYp^j4mZW5YU72IdrYy0A)^2Oqtq1J{&xBl1M6nZ z?~)J&V_rEKFqLpn&d80?8qR`P1Pzr(v+A79-V#Hr|CIux51O&QzOXD0I!>#vBTX%@ z`P|49y~moO-fy$CWQv}aoT6ua6T%#7&qVI-4tD?V?U8PE^++G#^v%<&PIE=W|#z|@%1gx;`ArLMG5Pbx5>Fgq->Qfk( zGlfH9TnR$q(YGcsuF&~u8238($Zm|gOz_YlFfJ5ogV^~bajwdj!nyB87OI34&NT(+ zhMrIxVG`N?7F>8_WLs|`+tr6gwp+T9?PRG+P%NHIc6~b(d)bH{^Yg@k%+L7`q~_MtAzs`_kR=WE!(Bckm`^lB63`%M14u&o`@QdyealBKJl1t2r#v>nHwmo zL@&XtAJ5j>GK-8w#?dT{Q)_H{wzCaLR0v$$nDlAk5Ak&^==AUW3aa-g`|pUj~I7a5J^$)xA5)|l)EHbl>2&%a=$vfOe$BDyW9xn zE}6W#O7|qNyH$5)8ONYBfK6&~~gsDQ3hFzcYpH;)>7_?oRDeiQp)Y z{sx2t8x>T7YND_d+aVLuz8Q#p>LQ&rkr(gn567xnmZvn;)kI4cNCSZ5>_LgD-(EEnoA0@-p38vFyONEqhuhPa7u2YzV zXe}ly*}tsqO27^*7Ipw`VDUF`1FH*Q7^8h}p_niM@C8dOzTii~1thT?e1Q`S@PP}A zSB~$o+iCZ2rWF=npxA<8)>zq-N6vNBpvAuct*Qm(5Q0{wPZufJeRy@)jvfn22Bim! zpb`}0w?6ca+W%jW+UzM*q&FOK3dJ8JGqb42B(mDqV-C&bP!zh{nt}1_C}dOG_9SCM zz?LkR?mjLps@7Kpi1(rDfH9Fa7^A6!pw3%E{Ugg{%36~+{x1gBt{65$tN#yq6%4-O z2I++u(~2j@Zg%4+V6cd?HVm`{yJhOoNA*=3=GMo1^zqRF4hP;i;t~wf=iY2HOg?=Z zjKv0@HttOw{d&E%pV_-x>p>fv zKc;pxU2!3yU!zoWkz!XW(EAkbfo~vz3H1vMxVR%mG@PXUIV~bgf5%Imra6@UKu)OCG&Q21`qFy`u{i z2jq?XS!S?SU0v6;ojFvINMv&+i(krzus6FFC02O&$#7s8E zwImnG)uR~hZMY)x>Z+>>0E;qS69OQ93EPPb^XF`wK|+EbVn0!9GF{|kEm9FAu2uU< z@aga}fuSNtZtCfikyehice%V*ag6>QZ=*` zfXJr{`s4DfdgHaR(K~`dj8FU8o5`v2(Vm!HAuZ%XsxG62obhwje%cKowbPs~d!LXL zMe6M#b{YkYBSA;2e~(rsA;fNbLJgZtB98@Oyo7L4kppnENQl1v|; z{ttUk+HUVj)9k{j?P#rRM;k4vra~^(b`)nj`mwbgAy_q-YHUYJFi4O@wj-HmsqLsm zj^paB?daX4XzSXZ+mUd8Hlw9Pp|)u2AVy2__1KS8g4&N_y83MBN%o_QtxZIb_rZIT z`c@<=-(gRZCs;YPC#ic?OKMMg$*KuPUGc)xJczH|Z>4WXQb^4#nNa#W*4CXIgaB*8w2W-IL8 z^m7qe$n6w}`?^|A(}x?s<& z!+WBWQoNsHZMu2C9of!yppaq`t5X>jRJ$`OCNbtwN9iRko>yH|?%ptL>&OmB!BN_M z6V(X4A%tOt{*@n|Ao}R$UZ%K#~4F=leeQdqD*E7L)pWFK2Y67O?p0 zD85+1loVkNtYm*Zmf(2oG4(Nw_(Pu~5VaTv3(m}diJYg8DOmx$CL+~^Vj1S{m^DyI zxFoa}9dzlN;};1MFWKbdbhKz@)?YKs5i;cF0M5*0B9E?DqaM0apyF;18J?!q^{m6| zVGb)Z4N(0Zdak*obQWy6IzY-inJN^=gc~9KfcJ(X%oQ)ZhSV z;<%vIu7#gcRXI51ajy)0VT}nJkRTkEt77R^2`W;<%u;Q)RZJEVB&c09OI8Uo)|RbQ z6T4fpWL5H+W7~=Db+b+^S;uK`aF9AkMlV4rZ?v!)8AB(EzZ@7dU!vppBWlvub#3x$ zK6Uhk`kS1F5qqJb99+?W7`~lB48(T0n9Bs|Qivq5X@}R6e_kBTM{8ZgqH4x$GS<9@ z5bZSlTu7ovdju_PnM$afLSE8EIZm_78dcyHzaEvNV$s<5^tCkh+ric1GMAs!0kpWy zRp-xEG&FD1#pv>E;TXGYC4yJP{gqi&(d%-3!-y18nahMbz6!+<4)(py0oCr-;JKb% zTa;9m@fIbBjsB7C{`oCDp#-sN_FxV&p^!ew;*>v2ytg~sC>8opz|~&>*`I(2q}MkS z>?s*0e)Vr<$foncCeR)THZuI#VS9a8oNS1Nmh`JcKJVbovza_L{F zgRUu{QvG}pQCuxZHL)ssR{|2M0kc|g(al--N(=udgD}q5&`EER7jK_gkuz8hka`sg zdl_d*6|M0?eyB1uR-a>KjR+~H@~5))A`ec`R(QJprLW-J{pu{@%i!0B=g1lHccf3R z%c`i-|LxcJ!L$ca1zD4{$GJ%N{xl0GII)jiKIi7DycL1iM`#o_2fDtXQncOVuF8o; z!Cs1nI3853RPBzOVWZkhvJ6pd!nQ7g@g)-)^`nNBkxO!=C5bm_#--8>_b1x@UT)Bs z2u$7REqN1+5}4ZIcW=5UAbo;oeH;)W7}-Y9x~h`D<3saDdWL6oR$i#TvH`#hFP=sI zxp8x_$iz#Uarj2G3cc#SEYIkwpJmN-BBWCio~;avPp^6ob&mZ${rdX_>e@0vqeats z6+GdU;e5*Tnv1_B9o`a7r(P(U!W$^8OHAz*Nss(Vr4Wi<3E&a1tlRX7zIs!q7afvK zA9(ZHlGTM1nX?L`8HtRn#zj;d%BjDK zuN6w8qu&`LX~il&fzSQP?3{7>m4C@HGx5Q?u&7qb!p*BLM}4TQTz_Adoa4G!m_;fZaTcAD9u%HWc6xYJ|E{WADfYV^7F z>Mhmo^&l&Sd}JyGoH4?waY7KQayD1HSIoWuwIzWn+Utxh={3puCDv@Q?XE!HYK;44 zp~1hB;BVE=<&>KBfmgRcUM)0q3jnXu-}dV7vwPiA#j9!5=+$3UV-N^0&k{Q_kKU^~ zIx9=Q0rr9l7|Cp+rJNE7#fg%cr*1=@%&@AK%+>gaV@bX#exjLQ4K ze|aOvvfzWmlJN6HFNgKrIQq_?W`%l1js+KdM$jGQdTRa~f_fB6z234h;45g%5X(V1 z3{k$}cd~E+uZm!Ul*p zAC5;fMRnl+-|>jfz7==;d+*95!cIHuW`M}wT4Uf46&@k z5y%iI3b@}>lo>N|U+z+mh1Q$cvzfJaFFJBSkE&Cbjmge zd0=gx$|nk2;+DFx6KM!$f6tOpQC|0FpGgWP4|*>9I8Dty**HBWI~bIm6gZ4#03i z`+>^YNdaShE$xdA%D0mCNz$v5gda@F-fwyKGwb>}uq&=CSk4d3(sixIeLtqcHD0J# z%hp07*odk73STEA5XA8Hs10v{P7hryElXetA^up#E~&njy=-)DsLVgrKL)OC{^*H5 z%ngbb=RxY!jP?|UhJ=^Y1Cf5S3c^c-Y;Xi~@H6vQZkGFsX{irK(>T`0V<5kHaP$@P zyIaY)BEGlqIfEZBP%oea$qha&`uZvX5jx8=X?AQ{-H$H^~ z2~?06G*()yx9OV_gBE-bm#3?ZGkK@4CLRrs!Y2yta|$$t&>i{4v-qDvIdfsNif3xi z5qqrhZ0HiGU~PgGiXWM!c!Y@#@^J1f&^eVFg*F!mNk9!rPYi0k&4Sr6jP%{t-uTP= zGkznVe}QSOGKn}5@)Kv}y#GUyTB^0net zBmA%eo|=8}FG0VDUlXssXRnE2)QFoHR>eM&RCwUj!Vs7;Z5Z8Pk?X3YxxboM6@J~5 zD~??E_;r>}2JtH(S3?ExIL5*S!d2{yKSR}3`Z~V=TUIRXV(`n2X`j%E-N$P62rIZb zQLBf};M3LR3QETH6olhean(aEu~}S5R^UI9Yo;Ink(OBFrW;zTbRSl01POy3 zLwc~u=uPzu+hFyHKZqnqKJjaA(9$;-kwqH$`F!`!`P-+AHIN__!wD%I@w{l zjpO*96`n(@N1qS+Ast%cd~?c~#{N^#MxdL(h&hNyanst$>Xs_M{3YT(wz-;)`G z{k)Fv)Ty~Je#FzcatNcbF<1(6+^NMfSr4Hi$&-9vHKdfd9@2_bTKJYBrEq!;&wykb zvIl|XLf*93M^$CcA*#fIa{#aLSkh|#sr~)29ofvLp-dU|n82IVj_j()n4$4uYUT?d zA&6}RYJBex%xDX|X{nPWRpusgA-M3|t1MhsVeEKE4H2x23j4vXrcl#P!9A93aP+E9 zhRqf66-RuX#@`|OSvo}cQ2SNG#@b_8!?k^hT#GNAFa6qSF|(i1d@F>^q-M)LTCFr| zT^t<$;Ukbw{6!gcqJmt)h9^Aef$<+=7;z9ieo5Zu-%cOfXY+5vJDeDaggc#n z^bbb{^car8{7!;R@5Osa$}!j-t8S@s$AS_fClGDCGY9Pos_BYbIT1Rha^BYRuq;bd zP!@K_(!te?5(iq&MHIG~?$@*b@;A_2*&DL6c$<`+pyI4Y-XhwC!V?=V@J3utqx@6n z48+ZGvp<~hX%DDFyCs*fvji~kyT2b9^dA&7?5d?D>%;r=?!C#g_>X`1!)d6$cVURu zykW1tDi$A3x2CS@`lsKyX9HhbPot?ZW(;?>N3$+RkK58S8>)7SegW}Kl+d; zyGtnWE&|B6R7Laqi~F_Mo?HWlu9{kzuV7A)ZwMkwqJ1IYt-_zvqiT@ESz9L3 z*%6P4=;$5)ZR@`$wbCi)Dg@3MwHHDO)Owlib1pQt-JFD>BItBb8?xko@3MoSfOU(( zx}^dA?s6OR-hehp^BnO%GbdIR%?hA`@08uIUy6zg?=B2IO<3|=z6N$}uFYpJt?e(% z>mdRQB}<2^?ua1?Ss6Sgtt3kJ(*$8ot;|Z6E|Ahg$fz||^UCZeHT0I}$XG$4hpt5o zbNy5EE{C>esi;|N%(5$5DHSzq5z+X*^{UbT*FjpUh7At;d z(N522#QzFnOOxxcplV%Lc~UlK)BcLRnVj=f>2v2HtwM?}8&0(P_tkROVLV==aMN?X zvd_Hw6rwnZs0smHUvJ|X%Cnw0`6)D>o|2q6#&4gJNxM&}@c49m1buG>Sa%Y?>uL82 zesOEDnxAc4AA1|W_qp*ZOP7s0n_^}ya_0+;OnPAL`@!q!_H1@THb)9>t`Z3g70Bl3 zGIpGcc!i?p@g;vG)FoeH{RxD+cxE#s<6Mm|4dzS3jn{r5-I+VMp*f)W_L)w;NETxf zZT6Ob@AF`9_U6ro-+Fvqxvu_w%60W)MFJ@(Bh~@)ej-Q5(3=XyC-5!w?`+%32S zu!(_rGGJkBtkYk799S}sC|wmDH2)8oj!5Oez$=qZy=>i+ZN5STr=BHbaL7&(+e<))6!M?ig4S`} zUyyS~vsJk(jzhqUkE~Mk_I>Sv=*3y4xHIxc16iZ{-}7%zG$7&CBM=l*S9(gWZ2C{+ zihO_9nc=A}Mu$VaJ=88%<6y$J#Xl(u{1{@ZEAHF?CbVI9M@vo#P6@K_`Reu^*KF|9 zCL&JKEWBRzY}U>%@REUFti_Q=>mMx>EbJ7#Dgg_v&$QpsGA43GmbawY8zBz6urjtl zR_JC+E}Z5!#jlU9(!XS}d6vrX`xh^ne$48B`_F3hcYO{P9UO@524KxnH_~o#@D!bV zQB;@xpeyc;PDn6E_T=a>nFm;%ws>S-WZQjXnv|>(|)e_`jx75rLI|jFHhJ$uVGyos^@7rvLFLukq zA{38r6D(-cYHAp4LU9V@#7%!pkrQzKxIp-R9jqU7vAP|$hFA&4WyGscB=g$Gr_N86t(I&v0`SF3$`W8fU4y zzQ|(uwDA)@7haz*zhewhS)nxkG%r(VXsMLQ3RG3svx`tzn!?~u|Rvn zPNH2H-vx8&?6e2~a<2ts>l4IFyv8c~q+RwI%05YNGD9Il(whT3Bk1 zkeS)vs6xF+W)@6jt>3Q?mmIlLMWo!SbvU)6-D#~`IX9BUo9;G>@lCcdE#8}~Ko+{R z5&45(|HSyI;1adOt#yFoFVE{)B!+q;VtbVvbASpkwc1!ulf^tX!mr2*RvUfCC{}ix z5EP@?c}6ILGtpc(#_0%k`Q2~M(ER9qIq^!g_(V#XH~96p8DUPyjNU&}d{B)UFmA-k zN_u;~>Mix0CHy2?-|_hG2+)inKj(|g;T&V;W71rC3E1?_=8H-!Md($5wSc2SZ1n*d zN*@A~$!ywqM1Uc@r6()8pKN=Q;#FMMmabLKrk>fFMi$?pac#nj!d%9bmZ8%p4Q4U=fZtj7$0C+0Aw%gGsfB zgIeZSEwk6Bg)*n&*?H^(OGPj=W*a`6mdc`10nUv5Kea%Uwau7BLBE~_?o5e%dg9(v z0-xYkj|HvJ*1agxSe2YkGg0=LzvnaRojsN5;QTwoFfjaiMz9Yy7omdX&XAeA+!-{T z%bhbZm`M!UHyLDD@)gFXcBeO0Memb|W2^=}(dn~#Ooo~jS%qhmF86Y93ox>o5k~=v zvAHZ5L?;GI-;8R*krHDRqR7UtCCKX6sUck_fQxWydq$QYXOXpN(Q#rI#8b_zAlt zIQn#lh}!DN?9LDxaqnZT7@Prx#nP+oK~IhfD*6lE@`ez^SM4cbKVEWF?cjn(nutc z;akhOcY%k98zS5%%T4&ya>HdOjJFb8#)Wo*XrBviT)NLQ(emUToj)({KMABev!}qQ zy4WXo`k|O3A^=@&{E?$`sks7_FxpqD)&En?%hkp@!UXW5{_pZU)mN^{or6^>UljdBN%p8v894fDV1y!`eLII-*h5Cf!$kecL-mt`kfzffpBbE8l`NB3tDvw)H zS%4m)!*oU_9EY08I9VA7?v8IPv}6xyc#&o0654(HSBIe8--0whBJKV+n|7Boov!B` zj@$gj`zoD|`LWhto$QGCi(~Nu+#k(jDaGui*L`NRg8Y%mh~=&I9f$R{DWl2u>~tsYj=Q15(k@9LuiTpI2?I+XZX7VKNf^oejd0I z3jIQPC{YjlgJ;Xb2|W0xcKBmo_rg_t>5GD<)*HE!1&3PEflLmhsCw4lF*^{;p+VKZ z?T4G6@}hl>v^_<@k%9ii^tM2RB!QORW&j@DWqCZn_Q+0iONvf_7IX!HuD!Q!c z`l5;Em`46mtf>!PB!j!q-OR7s6Aa=(_vT<`Su}%RXb5HM1J2L3Airvbe4S#i_-03#I;QPT?WO=|Sz}~radVJVUG3F>msI!Bcw=-G%&V}}kR@dBNC1Q~NM zHt%soy*+MT<5MiTL5l7bRkx7wrBy(1Qy7CE2+yxSM*CM&=7sq(gm?(!q;@Fb>X*TN zjl!BgpaHNm7U}5l=VUP;rW)3Ye>pVpaBDCk!*Y3(6mUdn6~nuLgwX*J;u|YgOO-MI z=>qg%k-3KDMh*rbI+ATQu3=|D9^}AlF8ly-xSdLld{Xg(qtIJDhx_Iw^W^(vs50`% ziHv*^GEoU`dkatflx0r+6nA114TT_fgs|FXKGR}zYcHh3%*gksKlNpw*S<-|@+D*t z*h1xhl~nkmauJ@uhk&ugJdLNI{?`QD>yZ?BMeTRDuKD*14H9}$$mw_pW@@V_jp{OO z^5PMsA6+V!{HYX!s&c{Ks0$9A|M%vcT7?#0DWiJoei_v^^HH8MoQHV^V->;JEnFDe z%yTXjG$gbf=|eKyk9e=_I+2+^T(+0mpzUGaFM@fw%#&i^d#@43B}G;xiwnrin*5%2 z^cXi*%xz9iHFs{RxpC@uZ~dt7BsQ%J;w`O!Fsm}9q!r^yWo0`O#cpBGe1t+AKMp3His2~ZCoShEjA0uSJuFWXqa z$V1*f`}lM+>Bd0|z8(0tceTVROS$PihqbhiiPi`O%>mpBk8vwo&f}UiP_`U8w6BJ} z!T4=SZ^M+UBg5BRO*TPL227W);Y?@>x-WV5-4{m14CW_m6wzJ#Htdfp`dgJqN4 z8@Ic*oF{t?s&1|jx8T`0qvsmy_4LQezhur)*$;C_E>dqD7Atoo-ruX<__O2c_U9$+uvHC%DIpix2hCb(49&hTXryhS22{9G=v3zeS|ck9B*zPPu@ z5Q&x_Hv`Rj^#a$S(!Of$pc~vYm(dC4H<3J;;a_qp(Qi=WQ#!_7x-r1K1)pj3dYd_t zE(#NApm`%n!ZOMb^u1>;t)q;#20RPm-*Uhzbt7Moe$Yb@h$8dS3K<^3BaD2rNcc(U z8xclt|BCB}jqZ|9wIv6#a>FOt=|F$|r2Q-OVRCtQc;vFkvaaP@DP?4tJ@8^=o5k75 zvb0_1hjMbc69y*pe*7flU}w^rn5s-FlEaJ+vJM|Kw$y3iHdETql1~lkPrwe{DMY5d zzv+Lk4z!}Z;r~xgW7q z=)1m{|J$%k`vbI>%Mi{&fuMsTNDsN8<#43%-qxy}9sVyw>dfhR1I-ZO6yAzyXKuI< z$!K^Gub!~edQqN{0$eQi=##;lmoNDpReqQHHM#h>|22MdKZb_O%?E#Sv^2^4+0anK zd8a@A^SLpW@J_${7nq+=kI~g|*S>7RRT-g#wz$1xEJ+PvB1*pv^AWWKJ84h_#OUr0|g+ z4+7why5cu-)VE^`n~hf6;uE=$6{*tI5ACFYk&FAn0vOQ4I<1@#9x@v4sLqO<#<3Sw zl*K0~GKj42rn6#kRM6=?;GOIUpKQ(q2T5VL7s<>DZjjl|(PT3GiBUW30b}|wx)^ar z-|5%T-7kV3*D`08+!>qA2{pp)Mn|F687YV^E6R#IXZv%Pa=I~;@#*ntXv7VC0&bPZ zRgFXB*ih?-p62RgZPET{-LQlEqtk~uJle_*E1KbZqim9bFRuyFuoI@zW3`#C{_5VN zyDDATI7Xe&U7XP$fO+|m@bI*8 zG1oS7JgXd@#&)eq+Kle)@wDt7*dEKl@+`Xd@6pcOSZ!_s?ugyQJ(6c&sh3W->`XMs zuf(O{Z$}e@!n0C+8yKz-cj&D*lW`c^vgAfZUCB2`ntqTKO2F{4~#7Q}M?;HYY4=nu6* z(#sS)!-C?~IS^m!2xz`8i+B(n4HuM#yGV=-@wrB8O@h(3*E$`xi)iHm3WCp5FZk9r za~OOS!4DvxxK289R1GctS>}V2CP$X1t9v0&zQ>CTDF(JJC8r^t=Z5OX$9z+#NVd2yzbduGS4fe6xW#WcdW(nByVl;~Q~u!=FH2{(xA@@H7SHpv{Iz$F zr<{97-^oVgE!!LceQKL$t8GrC$ByiJU-kLn18Sq!SD&pl!4tPP`gUHxQ~Aq&TU2Ln z^y}`nDXd>faSL__8%8rjO!0&9q`Sc?mz6iUqh>@EF$N-GYH=c;wl!#$vs zVf9g=lpmmoq`5~8dVEmUqW%hL6r5Heo)`7zdX5`I+HUKDTafq8|A023Z_e$?E!%p) z*XeSERn*H$^LO3JBvwi(6C}gq6r4rGZ+8ez3o<&#ylj<>My!ZwrpWwol8h5}N0vf4 zlX=;XfN%%P%7j6$^2O$q2n&9WSuk1Q0_mEexD0u@_kpd8 zre0%N5h)?#9RkL{3=xcKq_C-q&F`p|mDb+P4K)8GJ4RG+;W4}~@xc#eYxg`vnvUtH zF15y)MA_MSh^D#BBj%eX@9) zN4PG!cJbSR9C9WXze@BW1d0Lo+u^c6#oK+_!>~$QSunIYcWCnfJ${J;#;zmsQK+Ja z_Le*-^I0l@M|D$c{vMDlXxzG`GH5)%MX=~ZP}XaQg}vol)8Z2<`gZ3PXh+o@kLu3d zXDbb<_MrRIa9L)&Vu&q~>ne6({?$x`771k~*Lmb`y>&^~Q+0iLfeh{LN_#*d_rCC$ zkg+vXu}vGz+5k8)6k|Yxz0J9U`;5puqB1aj)v?Fz%Bs?{b1;l9`%6^TyB^R!ccEYb)W5^b8e{xKB>}+#W*&y{{gXk5T*}quxs?Bp}MbQ1pqGGs4 zTad>+r8W(>x7trkgckkz*P>KzC31L@u&5YJll>L5_g6YAm1xmLD(lyYJ+Rw#?0)4? z>DU3QLx$O`I&|m-%OPZgs>7xm_o;&|N}}6w=ma$(C*OOmFqMFZN}k49A8vlnl>wwt zB#5@)a-flS;ITnj55&NyfT86|_d33UKs3oGlNTh3*t?=z(6;b^dkeRc5#z&Rb5d_j z)#;j4Vc?IAgTMh;P$GJc5Qspe%e*#4^SNHvjU}ju`pS4V@H~lUmLn@XOrE(};R1PP zXTch8MK6FWmW>b@XKsXLpT>WdaWmU=h%R{0jI^eJ9d7LEbZLCYc47cMAK;7I~RumKliC%{~-Q=G>3=wB^V&jY$tRGE! zUyzBIW(?aFjOVu2Xe)zjT^F`oy|&tTb;Wy3S(cY6@-TH5$qNZ#w>N%|gu{3;ne0i1 zN8o%n;%nI0P}5AwX-4k0ns#4nwZp1BCN0}Kso|aFDxWo^_iKTaXsbqtiokKwf;B?0 z3*KqgD)crSc7RMf!03FOHj%w^1s93_N(r%6_}!O3(v1o$?2+y36jLV$vj?JCsW_J+ z@so?R@W($LgtLlwFSt0K%k7Zc#$>lL+4<&)*)ogPp!S+dM@P+ASxjc$(9E0H%dGar zepB=t{mAH*Md!7`arpcvisP^y=7P!p{rvB;ISzrCa2!mMFHo6ow z-Pn%bB+ID~_GpAHuU?3Xe0lpWOR@n%k3cajZBcedjh`B_3yPQ~k>D z((15(`kXVjfZajd=Ojk|uUl~J^UkNA&$5@YL>ngG)3~~m_ei0;J5qX}p@DZtc(^%{ zQc62k7@y;$3jD0RKy|0cy9j$0oGaH-s4eo*&!ybkr6k!sw zMYeK5XS;8QOFU|zxb_O%h8M=ec7)RgZfS4cJ{+?&>;yve(fLyJTSj}qcHjuwrZv7v zx6Kz=DA5OUcW6;T`x$jV?VcBTOBSC>Z>v7hAtrr}Z>;M0yWATy&SsHtvJ@tG%FZ8BttOa%AGa ztBMt7`v4VKBXvT%5l)AtBywY}-Vj4acJt%Ri2Q?p>WN zXfUTqM*-Mt2C+(jXW-)#zzCMU@W0bExZHm;6qCxMBa}hr1Hb7tLeoN*oa=4(R64vJ zp0U!mV9c{uKV`-q;DbnRHku`2`}hG&xZJ{=anVl!+-)}VhQh-V)){=WGKU1M+-z2t zD2AZ$|G+c>8u|~}if{r?O|bz1CB1Zt7_nd>QCQaq-yW2>@Je0?W#etQ9lqe0!6WWwPy1AW^Henwx!aKRBZ5LGm$4fQERsnpE|8rDzFldScRI2jcz|<| z7{Rp|y`{);JMM#kn!Dgo{}FbS(Pg1Np5tk*)RQ@I{$Po3HcuELoVvsZEEzBic6c>pX=(Y$6kTFD=D1Y6V2N-K?jx6A91y0nt(>;!?`SXPRG* z%OG{1-6jiJi$XwacmV8U_{2HwDZ6iLtXyTK<|lGi7(c26rA)xhahVoO2GAzW6cJ|g zeVLfqFSf~VoZQHDOg(SZB5VdP|67MCttOUJM^HC%NDJ1!q3z$5N{fKAEUuG7J+>h6^R>hh}vRuTR z!INK{JAR`@xZfHif;GzvHlZWAC;;N0Uw5nyc9*RHYWO0awjMbsHIXhnS*C)P? zocoPU?2;ysw0P;S*BSn_#qNo>sCl*?uURE=!~^{Z+f<`MijU>h-*UL&P^H%N2em5L ztKd@mcwPS%9O{7KDGInfQZEptH4yU@HFPfxPig3$6RxJWcDFh+#rw&~mt57;)&R7< zG}AE$YR3{B*IPsxd2_F;dQHZS=P6VwSuugvRR=?L01#Z6&h#S_xx)ii&WX`gyrEL`Awy{Upvg zFdN@eOQzC^fcx`IpmWBTT>o#6&uUbr(wRW$MOu@@`Z#)YneFwD=Bi~=zJhD`H>p|l$ zDN(WH3yCGq&r5ql$p_-OFVcQ|QjOPrX!&_Z_an0lT>C?Jj#UsY71!RY{eDYMw|qazedx}? z-iia>*j-uPSVW@QcN`tn9{bk4jFv9$GIs-tESMU-DPn`rCse0091t!WzUS6$2^w#N zVzni+p!Ge0cx_1_Hfv8HR%@dA9vF6z(7)67!uMbXaZE@oZ|}s$lFkc=mNLR5XRc4R=b?7d8?XF};XJA{i*3ex}G+Z@9tH@)|(AUgR;+#IWaHg4Fbnyrz&mNlW zIL0NE$u{$Lieo}EMF!ZS$+eTIc<5Xo&GtDg;)m8ud^R*iEFUzWL=sqKS zbt9Id&{4^_7j$Rwa0Rg!7b!@+IKQF$I;{!HEd$mv9sUf*a9;gPq0x4zFS`fJXb8 zZ?A;8AgZpniW(TO5(*c!=XY-q60;u^q}Di42)^oDz$ir-$J1P%=uTlGLBb*ki!_Cj zktsvKptfKkX-&=cXPy>U3MzVBHwn(uV?B&{lY8`7#!KeIB0y)B2V;Td#GAauIC zw3I zq*M=a2o&QL`Z`Z{?^uFs)Pd;>h)C&Rs3-ecvY4X)luo*kx1nokxR$?j!jqd0D9r$o z$t7{WKdZ>t??Z(=UEf@Pc87mr$KpAeX>){wDJ<2hr7$Q*mMX0JAsi5)^xZq;Y#hSa zHjUi&&bGCVVgu}AY_dAk;YHIlaBx2&miWcn8@laD*%ocvZjI?PDI`2;4YMaj%@PS4 zp?5YW-7hVwH+H~DLj(*KNZj4+_?pAuU;8f{XTK9P-qn88Iy4NmMQPz9)@nWAt% z_P?*W$UX((d^%7R$sqwo>)mKH8(YmcG3BV*2{^sP-+Wi4x5Gd7RA$TDxG&N#5Z#ir ze3YfuY;FcPF-~1-$ZjrDuExoj)nJ`_)CW2)|CU=Psd71igKq>3Ji=_ulpc(jIPEbE zHs~!L)Zg_!s_)9VcrV`+gv7SVR)U-rA2-mfzv=)ya7-~;ea(^W{5Sc(pZ{HIH)%x< ztH@VyZl5bHl>`pe11NMS`vh;4A@E zGc7pyw%-lw5n%y`jO#s!qIJWP*jq3+4=2T$z%9wD1EQ0YA8>!EHHzX|$e39Ya?dOx zp0KuZq}SMn^Y2h>W{DJ=Ao_Hr(eD0{%Z27JHsgF4Z{0b{c4ODOwT+iLFGZLeuRVyS z^x`US^l)i-98!RZIJFeJ|3Uudlkte9Cozy{x9*irXpJ*D>WKh)k5 z@nqN;z@?%L3YP*}<4zDNIug<7F7yDyCk8fYb{qN9M{#3$l5O0D(~muh;(6Ly z16=m+i{MENxxVzdu4lnk9Jye6%&-@%QoJ6XVg77*W}p1zs`P@*w~a4giz{b^5N+!Y zdqgocc;y_MrxEOF=qCl!F6L)<{y)Sl}S*vOmL5B6DSStjv;R)jI1Zntfq8XYdlF77XcHCyD3QzSzPI-Ebbw-xL)+Mg-8F1 z*7%rO+yjw83@e<^oZ+d9B-M>UGKzeW^(43E}U zmPpJqf{bofn35iwT4ZiHQyCBCS-V9vBI44cKs8&lpODH+ zPV)A&f{(xr3mN#M5DqUsQ&m2XKvrinR6e|+0AQJfY6sic@RT$cS?II2tWC)^`t)1w zqF1YLD~g;crDL}ZtB>7Q;%UBZq#nDiG<~9q&qN?BZnlfCmEFSW1@XofBM51*I=z_ zB_#ke4i`J=H@s7c5F)BD>*Q>3oyi4;p;PlRx+dluo6QxVpu)qsRTiD!gVCvwCeSus zf_b3L8+Tg$#@0TuFOo~iv63qaAtj~GlTvlHm58NKv8=^O!mwt9NULkIvplW|DB4~t z88A^6v1Wa25wo(0rWcjQ7BMS}#>N&^CO&5?&{NQIyQeLVX10{k&WIi)P6^@XQJ$)G zDqjNH%IPKb)f03ro~Qa->uixZJx!W8lL|a7J>SsEUulJ*H%}iSl_lEM{xfC*Oj?2a z(L;I5J>j7cA2XvLfpp5BJpM!`8Z*n~;vGu_mlLsV-$Mu1`KrC;;o|7+$oXPV2d6 zWwoq7Da8cqcS`lZdQ574SStKc^rLLcK*nbM*U@?oTp?mK#Kr+d^cF2HF@J+>G<7vT zewh*;D~GQ-?c&kcH24g-vU4P&G^jg3h%pi;cFe8^ZD^5Nsh#`=61a^-= zry*v~VC1+x*mi$Cn+7^CfL2OGea}XkjupgHwKA2!xzXLRmh)H zJlKKSg?@DXm*Ef z<+l(Pr&XBw`TK)7yJ+c>vv-H8+qy;8>3V5-w)`0*tDif*)w-%GDM&>)50h`}BAx45 zubAmH`*F;y3sjp+(rpe^m``q1(t4bRa5(I=8q+T==1KI?DqJHZ5Q*kp(q$kvu0Cx2 zgkF6I8d)maA=>6Ne}V@LmcqWg)Kb(IMe@WBRREq^B3b4yL~tPXQN#G_R2_%Su-P1q z{|8IKiSK+xj-%VN?`8qu%J|J=e5A*3C%fIgvCZ4E-z-V>K!AFG*$Y#heLFz1QR`76 zTz1n^Ukg^QXh!=`tK|MHm8)w8j=xAlb?MGBT+V<7n{VT_z~j2JY(_-pxY*-bW@EK* z$hJ$rA6GI?72)AlE;Vk6`8Fpe#Sc;YNLzV`X)@hhy7kdXOSA5}IwE}tO?)t8|tf=2p5zpD$C#UZ{ghMZ>^*UG0p9;+^J@T~H4fq&?Xc-i^Ny~6wm**B@7_CG zA!2gYD%7&eo;&TI)~P_tayEuKYa{G^PY+LGXNwv4W;0tho}4%P=LKJ;ci$2EQ9-U- zRB>1&3`uU(?oBW)TH|j1M!N$`&PLn>=Odc%hD&62ee!3JOmRL_tTm0`V@FLTTO}*; zACeJ!t46UVk9N<|8fUAQtFUJ3zCOGs+FfTyzJ$G0T~mtGp`)gh9N7F!D<=eNb|kO4 zW~_ArZVAwHNrkG1`^Cq@htb>;l8gq&-y9f`TjSkNamerpFhTwai;fE|*l z!4^$`|$Xs|^io6qdM2KqU$@ZSPBS^LbuOXvo&E>eN(lX(8>G%wXuO-_*u`L1- zI74&?V>6xn#QZJU8uOyGtqKgx6i`3aW|G!}61cl%aKoXh$O#Qgv&Tn@umI1Yf3inZ z3k`?Pixlx`LS&qLk~B1fKbq5UsC3DRguN=dM{Ryx`_=YE1B0=ElftsLf*Ysx-FoTl zU_3CP>Jz+GOWdU~dWW}2D5m<@O`wA}v9WF{jokz~c+=R}O_k$Y6K=MP_-ViqD*uI( z=tUW6JIpap%QgV(wGo^;i!O$wwm2KQuZa`}nUYX!hSS@iUr_38n22Y(ukgegD6bN6STXSm;sdU{!lAA7@^azp z+J$?1)?u`yt=vTb?Hr!#qI>&`B6ju!?YC{HOJ`5;_N?N`gOErmk^s0m zeJv$)<{GU@xP2a1dE~S}hsQp2-q`#SZ}a?-f!O>~-phF(%d;}^IsjZv!r(xBW~tTB zdtk7TitbI3uL4PrY;LX@Di?(^fF<`C*Jx&4I0Or9LwxN8xD)~7Gf(r5HpgTxW7^>(PGrSQ4K-$L=r*M zBQi9xKxYlLA|LpW;6T`sG2eJ0`2`HnA8}M*qlJFYZ;Rincpk>h@{8^M9jIczM|J+; z<|YuPhP&>?oI(JiE2YPdf%@rUC-THk#Lwu%WioQuk)^gf65BT>q8023^TkkTEiVJY z#n^||BQhQuNSla4hJMOgWLsR_ZG@v*m+}KAB+15zmMq?rhjujj(huYl3dC%m$K1qz z+{#U6z5?nU?aGc6#r33_w^&&sKG@n^TZ(y3`Ht~domKF2a2&RCPO|u;0aA_cc z&u>30*4qk__wFHFBEDTOOVKKh`c)g^uHw9gWu;l+JaZpPzk=YY!yoPXdI{cGe%n7= z(m46hCX$wK>`oSc;-ss_wq)@e@{*=Mdhs6R6SR9xIqM#u_NsZI-*%(0$9yCp&A+bV z%bi55PPBgAqGugjbhx5N|Fjqa1IsjR&FbkTdVea6^R= zs-lI8-H|yV}P%W0yx{@I-G5_hTjhYX+<&hbu=OJA_Iak43FZTzgt`R?Et$+>3*$l+yb0g z_7VVx9_+DGPp^GoPWbsq7+BhUiWV20r_j6_qGCHN0hX;vaz93`};b4z) zAKV>?mX&1%@MJ*qBBI6D#Yh5BIz8h*X}I9jpaD8NvWA-o04GVJIKf%x)lPve2`NmLa14Mqc{VW_B{{K(Ixn*8?K zBtGu2Ht>u;(9&OcPp{AyEaGz~(DF7?x3cyngYtb{}`b^`_t0^b{Mh77m+?|Ui_X;}sbvBV_axlT| z%xqA$@D@O6C1%}GjzCS5gu+czW}z_aDyxQ zHyFMtr>8jXE-?$}P~v80=c0ISm*|m5_4qAL*KY2E{~=+aBPSSskMKoC{q9D5A>{pn zzqsVP30WZQhr77RH=F0vb>+i)1lOm_e7aWVOd=Y%%tv`Qdf@9AWH+!4U8`457eX6)#y~BwIkfvl4N}a3^o&-Cjdh*YhP-PQ&vAGE! z|7HwJn$+kEnBS39BOngf%bU$#t5e$w(8CYTAU&41l)^l&;6dI`Yt#tL4|v+(JIz$; zy;oJ6=cL=5W}b<2wLZ=LmZF*F#8sPIDw*aSc5|QKpqg8rYHrCf%^i<+04=k9T%+G% zw6~mKjcGVEnXB5NYrZy6Xp!ba4R{+S!InHAtQvgtw-hz*jO=F0Z3T-bC(8ikVvG!A zyggpIIjx03N#IoPsxm5#}v@ggQQt;UJUtY%PBmWtC3Tk_Go=A)-kjiRW2`4~AQaE_ zq)@e@dhpksnR)q72GM6;J`gz2YTX`0vsGKwPb@s@bbKBn?USk&M-Ipv?jV?*Y}ryA z#fwxGYIaUjcG;kSo#vKBsoA+O5W64{?Qog`V?yx>i>+VF^zcKbC&JVE9xu1@lA4|) zL7kG#9c8v+9)RRvZoo*~y&F_FKtJFgbX#D|tdG)rUzYu2X|U}p^_i^C75h_0jw{P15vvlLIt7QtGbPI=aM*)?30XFmICQpI5cq^7p&b6Qy`GG1 zF1UbRx1Y&eliE`+nI&!+ufo(WI;sW!>n(R@ox=l$6IV;`l-*I$P@7+W6U=H2jFkHFWU(ga^qqwpD9?O`x1 z35jRE57*fqOJ`;W1Se+3GKH>FM*1$(6( zpU?XP{5U8-#0S9xx>0yYeu%#@-ap`-wq1#F{I+fLjl5SSkp_^j=HU%Jfs>WlW7y^~q^-{2E z8uHiI^r|b10=qWqyEX^in{5w1xaeP<1th|oFaE^#=;-WgQ@bS4We#t?F7Xy|vM=uE znCuo{^}CM+>_||-!yG_ymaATn|M{t zN!}{ItQdnKCfP(WDcyy?jy)`uQ`#kTnh@05y-$*xY&e=B57YvBEPB+!75v)^uY) z2LA5e5PmF#wzh0769{YlSm|DHC2TYM1E{Dg*RG2h2@1sui;5Q!Bc$HYjXM@1rsoGo z1@Xd~D+gsIzQd4g-KXi$h#$KG9ku)A64o|hk)F~^IymO(bh3){by zot5|*apTooA&@(P_{sC(5X#Log4iOdBA7M*)GqNLB?Js74oj&mTa3JkRK0FXtZ=+~ zvdXvD&?lq#Onw`kdewGyfHnz4e5jSPSU6ZRl5ZyYB-W!*oV;AJN6M|qc%DPLpLq)G z>U&S6{ERGsqr|N%+Ac*(+4jGLxg%aw-^~+%P+O|l+{VC=ktI3u&1_axvA{ThqB{TG#cy*qHv6FIoLiCl9aZ#?xoA{da`osAbRrYbXE70bI>Rcl*G z#tMh2O$3-I{0N|7=+0Q-L%gJP&-2aa&&ss*48qL^49$GzMj23_#Y@3`^sq7$2q(WA zFD>KA3Ia3gz-)#RKX;on#zdDg>y{+B_n;VDT_xeJl-#ynh7-$?wY6TMsS8t0d4zeP za~>2gP_-hKQE-|;MLNylOficD>F=~z)BDJ3!wJ=#?5i0d_iN?=Oq61b`SRH^h~YM` zFqUnWPvAGqluJPQMa^x#LO+$EI2vVWo?KeCK#~A-LC|+mGUHdJQqAQBdVOlCqAELDaa*9O(QBcZm5u+irh&n%QF`1ep~&rVG*W(uFOlef`WV z&K-Kca#Yo9alc{HQ0tU=6;gW;Wsf-@UXpiky zb{~_SB5#Dn3|TE~B}Lf$>Krw`qx+bqx3N|6uHHm*!hcGbiEs}F8%d-gZjs?jfM5j4 z?z1B2!0*ql_rs$;T`B75@wjx-hd*2Mc}+Hg)|8OUzSv(*=7WVYC$vIwX(_$us{9kK z>J`X&f=t2qgj(qE^PtjzvRxi63MB}@>Wp9RA>x*9Y&GYn>U>Cbpyw=VgK^nmT_kR8 zN~F-D>+7RE*M+a5CkWKgKSxGu{FS`8H))MO;YDp1E>~Y%zgsK9mEPbit!P>iPaV5~ z8ic-sJ&4|>RZ2=FDIQ7jkTOG3W{@&hQs#zo+DKf0V|7XADB@P|fB%gdu{@Z8OnXN3 z`l2jznQR36+~7C6kHd%fQ)NE}%|uE$pM4H)aPCB)a24(xn`W?~bmK4Ed9XQy#-I1_ z2AV9VN0|A7KrR)rm52}lTjFv|q&JZ~^86-n?F#l1%hOyOLhUSbk;id^;O9hRds$?M9 zQD0L%X&J1)70D>oFAB1Au`dZ#tk+gK<#x`h*d(`et9?7O{x7MS14NNCSkd}T*&ZjG z*>i;`Ln5qgfNd;i%iIGB44k^XDT!woQt#yIP@i`bifq+H2T~eyJ{L83z?G6iNp2(z z#bMY79I{8~BohuNtvdHM*o_8CE5Ue^Bzs?As4Ur5$jtLhV_+td#az0Ae8iD>OBP8r z3AFeh6g$2uy{0aecd%b-Z{SBNZCqqEs-BJqCH3k-C*77Orld zJ-{C8=agWxB>pb^f2DVO^eoy7X0E*C-JhSzQjJ=#)_%+G9#+)$V~Y7jKsrDQf}q23*;A` zG1uENSvJ)IBMbbMkuNnTW5mPqI}`5%I*t?m?Ev|KLy@q#t*^iWl$+_b*Hx2)lk40#z`OHZfSC(9hLCGF z_Th7b-IS-=QS@ye@^&t|5Um_^f_tOFws@Gi`)`>m;N>&q3|Zecm-(6Dn7`co9y`&z zy$sN0_>p&q@OtIngVd&!vsoH#mJ6l`dbym;+j(~KA*3FG$D&D(n;O zBN$(h8*|nBW2Xh<61%#;_b)T)FQGfk6SCnR@y;N@T)oI1;(5D=OAM2jB&F26RxX41 zxEIL?OkS-%{Z&HHT=AMZnoTEjnnT9rrBoX*cIp+|IevhEf+AlVbO=44(-Fb?W4gO319G;hZu1RI}CnZ^Zwbb1CCEbZ%S zX~oC3^OC%^<5O2|W0`OtIZz6Z?Pg4+LV*l0XONtz6IfkGEb6^^98PC>;t~@6!hcYm zugIr0;`18+>QVFwo95ZCOS5aWrYlnKx!9nGcn3k;T`ZR^aVy^t$>)BBBSP1aX6hA| zzT<1HakP|*y4+eLl0c&J@P{oi`PbNy1Pm=GeEwbLqEpqe#EM)?3C;v6d6De6&G1n1 z*@NFgDG}|!BB|@{4T!d|l`OuF_GMQMJxNZOElH#2Q`|Nq)*JnM-tuXpTLLiiAP2Hx z)kfsK0tZE>7QLqv^~wEs)1nfXNiHgZUbp6Yyb_Ry`$uwdTV*HPVXfNkBlPc4JsE_)-=J=}XS|KKpPUcETXHE1ST@b9<_y{n_? zGZl>AheEmZ53iYuf3J`f<~oWBvh?TYUgOPRd`USg>j@Yq*os*d+d&&RO1VYeicU5# z=mlpe@)4VFgc_Rd`CzIvBR8+t_{3sh2>GM!ptN~+KZDIwlZz9RAg&8hjW#5zc$zC0 z!?rmZ6z7d$M=CnF?|uXo+%6|@#mAx(tQ&b}R;E!w$O)EfPq6M?$VBrpk4$%HL2A?t zbS`@-7+>8f(H8LAu&yV^vje*hF*Nd$N_?sDgC{D>iDY24BbwSCK>lJqxvAXg{R8e&rm;9CTYi%Y#m?(XWT1>q6+HQenL?a~6|$0!JO z;+rGy&b`)9mNz^oP`6z&5Dir_fO+KE)}qGL0)Je;L!!sgX92|zvH29tj?cUY9H5ls zs+2@*&9U;hxRms+?vZKxY>5;!UeO+0 zi;>JLiu4v2)H$88!Suiz>u==-;uq%{j@Zgv8lr_?BtL}`rAKCrpI${ zn`MKpSTFmu?|Fo;`oTF2vYIuQSdBin3;TL51+@7cg!f@rxXc-< z!Jxa+ypXp{KdL1;7Iv3Ui~Y%7+z!9c+R{1pQtVc@E3uFhr6_&uQ_|4=*;7(yspN>W zbZgnG93-1Rm-o)t)Isv&Uh(r@%Kue!9~TDjJ{X_(qSyG^8;>~r#@C1#a<%9kvQCiJ zVeFrZFOYc!UcLvY15*q}&- zMHAz~|3lo1o1@+5g#TNw=+PQM{j$`{Y8humPxuNvrfW?yY*3w5azWJdo>q<`4Sv&R zb0@1IX=|laeD;TuCd>>;`(HaPnfPyByf2b7DG}jzOFlus)Aik>>f^3U)pfVZ z6A>jDRkx7U*o>iJZMT1|`X0VezN568>gn?;SGY2rO8^a}zLowhho9d=)4zRotvTM7 zuka;naa8OPhe@}s(nG^#&%N=ul4!Gqr?n@Vs76d`zf`STHQX9Jt8C$oQ?OXz@v8D(1iepI) z+&=Std-Ug_G3{LAp*Q#elDq3ENHLnIkaRtMzZ`SE#AnPl|I7X|n8s7q_8vhP5zign zlaEhUs7fzhDt6LJVJ6e3gndKX;(FYZM1Xh$&5P~HJzpI0L#enPPU($@D`ax7HMd+t2aWBk?fKom1hTha;lVZud&rSO42V$luZTII z7%GKW@CdyxoO20hg4X*7&>=?N_$m14XJ$UekjSyP*j%$GLmaI-$>xta?=37K7jh%T zNCLBS@Kcqs-Q9S4K#3KPcZJ0Dd^rhm{ z9p;Bb|F&tJFecl0WSzwTI?XRnPdpssZ)U?vXYs9gI)QCh*K=vHjjr9~)?$9zu_DJTUwW z7zV0UT{O^g@cgntQtNTov#wsESg+S}_5|G97ydr+XE`7sm<>EdWKinoqX;4}M@beB zcuk?ljl%S({*%fSUdA5%$s`$Lt|<`)^f0>y{vBP}5a|cLTw%?9Ryr)!7E9@uWCXA3 zYVl22+Uz@LB8&#SE8J;Hy07`xu1QuUQ$U!>NM3+Ax_{9-)`CPQ@eJXM*W{R&aMbPZ z;en}o2L^K92voeK?>HQRpp%?Iot=pyckhg{>(YU;*_?dX!qJxoV~6!b)W`-3+ohKPz0vD89E|Mqzi? zUZ>G5h?N?;2SoB{#hRxYu)jA4yCzzfO1NY`N-*QMq;kwl@$z8q034`KRC*4ThR>p; zbsB$2C?&zdcIiPiEvboi7G$e=&coqX&KnhPDG@|9;3JgkkGJ8@EeiM%|OHf@_QS?ymk`Z)i;jlo(8{V9kwUs$F4bPWU-heJ_{0XD$yVZq_DANGv&Wj{wP(Ujx4bfF0tGD`+@khV zs%xaW#n;_2sgtOpVvkjH@HLs6x}7pLE3XEtY%FV_nTodrm-a!m2y+1NTD9|8;boea zKn?heR(dxiS$x|rG;=%6Q+M?w6IZdxD-aGBzp?fJpy|PnWMduNGje0YJK0R+Y16#OA;hS^)EFu8LhUI~}{kFFwoO)$2Zs_Vh$5 z%@H&jEzL5|;b})DP02-Uv6E=j&rv{J9inwA0Li&ebJCBDE;Z8Jj+Ydv$mD5PWd02> zYCX-ihvgk;OA5EK9 zKb{+`OCV|V8+*OcuX`dR%)>i+a8(nlG>2pwNqh!103o+gYu?VA&pqyc04Q2?9X}w4 zApr$Gz?9Mn?#x+eJRfk=X7&rR6FkVqBnr#An#N1_yR^ppg|JuwGk~EFH@{C~H1#-- zl!Jp6eD^oKuQlGl3j^Nof)2clcMKB4+ol=8{cwxlx=?%J(*4yhDhvX0(}gOUuld2U zM;Lm=rtmo!fsBDac5pj311Fhh*p1X=8Zj>@26z5G2hNLs7xYl?PGt`7B4NiTID4tt z2WRwovOx)A61G^qncwAs$}JqB$cg6X+ojV5G--CIS0}Ft7qwP#Cbj~z9p=xGNeCO8 zSs3*n=Mmhu#qQ)9a%D|73f4`F`97dieI57T^Af-idAD@8Z+v z7H@O^BCz_O4XkpDbh{Jyd$C?c4_4ld^1Oaw$V+}oGMQobv3H5)gu!}Pf5 zOZX0MKcTMCAv|<(yr3q;?RCWq11Jy2N$`^}^4RXe2;rVKDX`u+hTZ&mTxCa5)KZ*_e>KV4C6U5^=zXej?!I z>QQwq!?Fd;RIH6jfcV+J z&?{aE5((J7R=a;GdjL9fT6|cljR#d5Eg%ntVDBJ4YXk0=?%W5KeD_FLWyt_Yg7Jzu z_Ii7)Z0cV=Cs*h0>BfBu|Il+b)imGPJw=s#W^)~adAJ+G$O*F7cKA^W?ogMjmQzU`QmYt5D&csl!x8agPUwkdn9 zC3k$PfG}d~I@kwy?)5opbFFVpWr3z-P6YJ9xM+D1hOn%qAFDoTKqNmo z)d{W-6`~9W^>}011+;-)-NM~A-$OCzEA|LcQt4w*BBy}0m@J;PMOG&~gj=-IF*Vn{ zZlOli3x6te@NEL>5UNEq`R`Mm7S7n(t8FW98J=zBeM@D)5G!wm>mFwgwo}5MgO`T? zvpINw+`lphTJ#>KKQj;K!28tUePUHKAW{^a>da0Pp(6HynwE!5%9PZkZ0a*95DaQo zpj6eYBACNKwON-U1?D!EK;oH|p^RRRJ-VM7SsDQ4Z$j zTYMGm#9igAk+mcTJ{5a!E7w3p2j`HECnj)TCyU?QkU5R_mC4k|PIO&qPq$1WJCR)| zK49Ndr&1^{#ak7abad>#^D5BIJ#Kut_=r9ZUV&u)V(h*b?mbS-rYBWmnIa422xVgT zrT7}qJ4~JPvOXr$4B=Hj5-pn?9OrHKx*Xo<^%JsqlfYhHJ655sDtCnZ|JoES_$V;s zNLsM!8)}hWl-rBbhb#Rhi)!I4p%0Nb^UM^HSe7Od_d+B-2^BXBbrxmd7S9_?rW75> z*GO@DEz!GbRd?HKU5;qoge33~Q9QZ%hm$sN&^K3@$G$&5F4`vmA4nJPjerd)d~$&HLuE;+N9;R(~> z```{R0Kw@NouNh-GCmBn{T;k(o@rCV1@A!NB&wVJt9v>pIhN$pzk}PKaD@L00x01s z4G$7ZO1NLy=Ki2`e;bI!c5^*0M`0I?qE_i6O8YV`@7B2PG+nqG zUh;lc&Y>3{Db=fmLW^kW0@YgM%goUvUuuRPNknV=9!5#bU_Rl*;S=t;L6$Y z!j@lvUlj>hZ7g*r9wrOpbueBT6LXSq-F1mQhVXgP|53`LRzs>Ps-PyRd=Of^uj5D%%T*4_tCZY>9?Wy6 z(gSOK`abG~k3f`pt;9Ax;k0jpkKY;A2R@Q}H48fXX+0KtTB0M#n%j=EzS`9D&m-M6 z-*X(Oxkx3JiDPdfo&wg3@Mw)&y!WnI2Zk3Z!A?bjxw9Zc>)qM76h>n}kFL!Qh^Fk{ z_yqsGqAle+M%3s57|b8X6@l7b{oofMfD3DJy1r*M#{{*C*I~f#v5L)4KM;+~Ff5$S z=3DQG#34)&yuw)kR8gA~4ob2(#NiWZ#}2E|jK7#>vZ&STwKIUzCuY`&RoHjuVDm0r zI1q6si%)ow4F{qH3@E}aYHXRay|&0<K%@_5ynyHYkOeH0^~u;Kfq&bDU@505Z?KVj^5QW|v^F-qk;5 znoR9NJ0(=)UA>*`W{+PW9RdiUMRfKFa#zuk1F1+Bub^Y-89P~yG+GKUhYu^`X08zw z-H1t+G%&|zl*q7{Ah8rDajyI*SCtAXQnfKzJVi}elT-R0YqD#$e??oJEDrr>5^_X0 zQhEFhTo2)7aUlh(HX2>Y;-OLnwd={^EMD1qMQEiJh*o)jcF2v@BC3kZWC$wqyO}mB zBD2MwEywjy3Mu9w>#@SWo+>gk!HrX9cj=?{TRt2g70Djl_oyl5LXa=uQl-pWsX2}Q zHxN`96DY&q8hu2R6Tfb_t8Yl*)0ZFTfDKWJpd}BNHOLf1*Dp|gOwlf^N^0}60TW)i zZi8j>6{7jMd9tF)TEkOyqd^o3WqI5P{?5F7fIg=PCOmH2=k>qwqAapk#3+r=0zALbCWY zO2Rp-rd+(A-fG8Ur*|6w_cNHueBe3X_Hx(=zLG>MA z6~LmZoyp?$bUQY9Dy~F4LcD)DpgihQU z{MPn>0dHhyP^;M)$k`NhZzT4bD+`aG_$TM)|AK*Ipp17rt?5fjD~Q?|s#qI{?%f;A zX$6{wPulR=zKt8c3g>V5dUsn>>xQl+5mDqS#nV#c{Xjf-uvO4don`BD3(JV)eThe@ z4DAN(z9xBjM^jNbpfL1G6UA|Da=$>oT3vF5gJM_NV$aqF(!MTfG)`)N8w2 zSrF+I9-lfRAF56{=~Nh5x$4jt1c0QcL2(Wx>B`dzS-%kLY}}CE?X z>N#rz@nIf(_k~BvN~~{-MEWj8fTa+}e(zEF3~K;<-h8~qb8Rx%$Y;o<6IOaH+K(8N zME!+p)+j?w4XTaTbgw>D!p=TR_kSH!B+Ovcm@3w>f{cl{(rQdrv06f}7Rjt39mlcm zrpO0sG=pR`TBA5fNRQ}~#2NgOMX~!IE>e9zW;PM)W^gQE&Q-z;M*XHbJA8t%LV#&g z-WR~3h|`>ZfI$lrA!SRLI=k__)9o@Kd$@D$Q|>vtT;=i08F~B09NX5tc9};veM4K% z*=3Gt>tegytw)tpca7pjDUE^NSg%+>BDs*uPen`hH51<9aLCx91z;t-hD(_E)Pcb| z4B^|BRO!ZjWu3Am;#ZxjE?JvUl<)(HPKC~jT`?Br`ximak>)w%Mlc-DCWSH3W=_z* z#nEa@$5m)lRSD}-Z~%BLbfcBZ`Q_nNWGTFY~-%@rWA{nluylShpR&8yoZME9hg@9WoK@vbAfC5UD;8M>pRpZhmfM$N* z=iEC!OK zK!u8uF-u%^>F~)`*65Pu(JBW~C0|X_b=b4YQ(s6i)NE6cY1)^@K5_-t08#vBq=jG0 z4Ak}ujqui?q0ukE00oUEJ?B_U^7`di(Nbw?$f-5&JvZy)UyUdCo~ z&#N+1Wh-~8W2dkJ&Mz5L!le^^#iPat4DVN-hL2pHWv^9w>n4^*FG7CQPoUy>0S`G; z&??-zsGn$_7PN3ZsV|_t3NwZ$TEpL1cfP|@SK?p3Uoo$X&+yl8>HNV5fBellcZE1@ z>V#!_Ad?+TgXf?;6U`XTg~xwW;|NjZb_(={;0W%&esPh%e&Ei>=1d*1^D(LA+)71U zG#pY92Wbud*^LkNsW@P9fxrI8)z*L3=TI0qQmqbZm8Ea-)MfeVW;pOZ!NmpSoZ?0u z9+Ak3bAxY(*|`A%83ZD?Svp>o0{6?90XVG2jv%S@QN%2eep+P{(`N6g022A z>t=X&;K9xB+@jfX>hCCrvdvr)=x>sj?X-$6Y2L9kUkuw0&*}I`78*}eqg(ir(ENIn z9wUVhvr)0xUX`ew9ck<-MTo+phCr2quj5;Z%%6epH!glH+|b|u0O#j|3c*Bmw63qN z5=D^#2f|gmKw=GjG0`M+&V^-vs39qRxDo7as~$BWR$WG0bd~rj!IO)&h0i8TG|DGC z`Tp&ABqXv|vfm0S8+L7vFKy9^mNoS)Mru%9>34&sLe)D`BNf!pM@S5jixvCtCGCiHU)}QB? zfG+vo&wI@|P=>1(;47FvUD%vuZf6JGtJ;8S-Aji3Sy0 z{4Uum|DncR)F_u-;aRrS0@p3-s)&H=w8OyF1BBH!EGq5XrF%sDjn|f>3y1n$)OeRo zIUChYbOTV+L}Hm;q$cTxo7T$NAYF5vDc59fe%wsZjPj?9=iS2U5+24O@N(OT3WBA`|;rEn!6(*QB8aizeEC%MHdmsNlG z8@Amj5L}Igdkybf8bkyx9?}L#&>op-I>?CtX0j#R_4VSjOReHdCV5M{mSnFK7o}*M zch;TPooY$9BH!ccj?cd>0&ouX6nEXkY*;=PA{_QkT#iv@5WEX!s^ zMrgT~@MyjeLSoTyi1hkSN5){OPrCi)$iPb}a>hT7=$Ws!2gdyagp0Bq7T^Bu3BS3| zhe3CCb@*VGac@KXF&0yGqAtW8YA%+U6cmH-ajyl&trO~lSReBWN*hwYA?xEUfbZod5!0|R)Rt1 zPfde-qc?B?9xE?7XYs>{d#9#x3$l_{k+j52EJF=n;H(dn0Svvma@WYcU-&OV4r@K+ z$_jByD?(V|jcQs~sN(2V!!)UDQ@7vZBW(Xv)4D&UPw*u|sJ2?vv}VWZwOWr~mdK1# z66-`QtgW2%%% zhea~^rwZX@)NYcj9)gq-o_bOAg4o8X+XlS+ui=gV2pwFzZ4q%T2|^Me+z(zt8igV! ze$X-8vG#t=Z8!@@^yk1A%_uM3HLss%eR^8r$8!9kx;2Ei350!<#0vbgI0MN|ICW>6 zk8Xb#Wu7k_&TTa4jFqD*239(6*%Sv@30z*f%lK7;H<|qm6!MX7w6vNcSxOJGx z1(rRE%d)uG!_JNyzWQ5;$gg2&l>^^4qxQFx=fRG!Q*)x=IJj19l^@9Y)K~OLx z97j!8L?Gk^=OH!-qJL?v1RF=zL0;v+VA0Ewzy1XShEY#-ft^%RyBr zL=JdGv_In~QKa~~eE9AdpPUE<$(;h@aPfa*`m-(Fq|hX8EL%lne53fPVFBPDZdU)s z6hc~0kMzT>zH!&nv{!sxVbEz_cM2@Mv-~9w6w`X>YRjm>TiP=JOz~knSfU0JB=)tU zZPLvDp4y$PKUo%b+9~U&fge+-5SFSq(?swqwX&qvB3~Ub2Rnk(n#E*PLM2J3q(gd< zrHc!te}$H1hY$vM&ICia)n}+wF+WF@P&jnA-EUOVRweT)9~WgdLUM$dnIrTtmma=y zob+(PDG)Fsd6a;{(5ZA+-nl+2b02tQef(^i@E-wRYx5hzlWNaKoPb|gc*>|5$3R#( zqvmKHyv3)7m>yPe2yd+RX>nW^M8ha z$q$KMlSP;s$L$54()i*N#LX#wEwJD1FO@*#=0@3dmI(Hr*tBzy4AEEKDnHJ<;&Tme z@qFUxND}_m6Bml43^arQSr$4`N{iMCS?$sutxA(v-+<8#AZWaw$3RY#8=iU)uBsIa_DB13VB9Omm&Q^b8YHL+oB?4h z9C@=#c=8nuc6fwCdGh!E_y|1t+jSx+OAEdFs0yIVnDgtea%3Fg4Gw=v&O>}38m5zg_2rty@rMf4E&6H2u$dcO|3Kg%Z5Zh?0+PXRJf0CENuhjhLBai z2O`B*?@?ynYHgw28m6#Q$MgNfFzchU?DR#X4<$Y6`co#BLgx)#_2&lUBB39)FTZf8 znECm`=cI*(u1U*B%-8(VWe-#3Ix3DFdhO6qjlkLl^hAsu4 zg{$0js){2rJdS^T=b>CMrk365t=DA^P(fq`tHcGc$(~v+q;-2T4YROkNS7r`eP1?I z))DHTVbwQ8M9^RTiD9jx_T0m2+w{p1>Wlpo-=D_Ub7jILc6)zyt=-Pa-@BbBt#+(& zMD!H_&>q7^6YmNz{G$0*xiTL{cg`J-<3q_Yx`c$|LFs+1(nfFtnF{-(W6Y7FvV3p7&WEn^IdG4oHF%4=zLq#Zg^ z$w`f{E#mtSZYTSC_u zG}ANhMY^?b&-=l4yW>Y&-~ZOU|NK3f_cx_j@4SDKrF-9qeAAlue~`ec(fhwplHPA3 zfho7<{T|43dVep)W!`rJ7e|=#!{EovxlWp5_+MBvKSwvIhhWY8BANNgsR3N6yAZs- z&&%R#-}PnIJ1BsXxuhRWA|Ohd17IEm^ji^Ajl# zlx3^M)DP#(joikr|kKv5q|s& zy_)8hVZ2vTY?K$XFaB~;T3YGULN>o~@zj&}VN=ZVn4kK?rAd?o!lm6oPe(sTa7stN ztWXZ7)XBVgd4jGyb-GQT-GZ>g^0eQv+zvJsMuXeYcrE8LC2{b{3tWQ_jMQEHau-rxjFiCm6KLcgqhwZt+ukUymY5glc0YUsO}*VXpFbX zOX)hJMud502nc?tW7*HCjTRcdZ%g+WwOqoi_?i{wa~*9L3GjmZ&Ox)JLxa~Y z*_O4>P!c_m2jnh#MaUPO@eBpEYJXnxNkX}7-lcU&PO*}_yBvIOv#PgJhw1w$3CXT4bNSuVgCykQcNa;%w~`tvq{f8I~K_uzS@fpUbx~VJrCA> zt5UddGXx%IX;4gAd;=Ajd{0`{w|$_SdmqUC{a;HDVUhBDHlq@_zYEvX4}P4JwziDH zT7KILwywnYthlWX6t!Ns!kYd>q(`5I%k94y>za|&0Kxo&XGpbo`B9@RJj#t=?VN_K zXS_4K;bjg`f3ps>s*gtCaMME&b;lE6%Q`Fjw!2Q+J=$vbIjddqj;YoO(IoqucDvr3 zKW*3ysP)6!op)%v;&Xwn#&(Fl8U1{Y2m1LuKPqUqmq&ZHziT=pYDW{L5r|wi9#Jan zbFT+pMb?7C7P?wE5RT?7mnO|PjsMhYd=5VrO(gNS%Qa0AypE4#P5=2$p5~s_h=M8lf zmIVZ=G&jLitFzjb>$`9sQms=hnK$V{>GKgpFfvwaTS^BsRf?3gXRJ@XCHi-+hxyTW zQ>OAkp4CYr4`yk`GRp0Hiv1@pTdkGU&_riw=8k0EZoZf(6u!_b>3W&)>(9`a6yXj* z^20hL9fvavm4{+=r6@+y#~TH}h3O;`A{HkA0L$-{_OIuVU!kS@;1<@ZtWW=Q=&ZF? z2jA3y@HIc$J%p;3&oP843}N5pS9P8E4N!aE_+@$)H=%L2P!@^BDKvLjYk(rAOp=?4 zPv#w@7l~7>RWQNR;*)n1XS>u&ErG3=$^8HE0c-vb-N9wx^KbXRun(*)kzQ+9n{D;~ z7U@4YD^2}L#1-^^H2pvK&BYT=2z>w?=-JmDyh=KFwAI0VP)Qn0?8Uj`msWSm`mpu2 z;$WZiNwij?IUkDA{(hEyHxF8y4{&JaS)E{ie>mT--&$Dq>PL^UJH2snIXt z`>jveRM`>6+jqVGNXyoE@0F)$-hJ}ffim6~U=Pc9Pvv`8Ur~9{uqW<8%aQ43Q?W8K z?YKy^Hj=eOGo&B(5-D!=|9Oc9*d6`W67`uAJtZS`A7xGq>6}oG%*jD)k=0+ zeKnbR3^z5VzW5XvM+bJ7xZjE96!H-h=OeDM)<@m^tQjn0YsBwr3dZN{I&0c7T zNKRgJr<}3#`F0{F^{(#z+M3L=Z-MoZ`p_4r|59^E1gD4PDVkTq&zhs84`JI)kOZSwt2%}7Pz;ER{ zoDb4)f4kukG@O6=nH!&;@>DOxG)Tt*cL_9NpVy0|9nlk@otvz7ZkBdp+yVpu4heIy z%&OmWPop27U{Sk90FU}_^GrY9;YTgE>ciF6CwtHLen+OJ5AL%H|56HHMq%2Lyi{9J zEBh|V79AL}ACzpciG1n~D|>}x53{m=BiWn>k}c`+^he31Ps$)0Lu|3$KG;E{B)@0TAarufkm5juY{XEFBw?{XuE zPCX4i(@oFN zRWX$_-a&8-Gv{0@bH6$XMz-*eGLn!?)H*3ui=eZ~ybtc8UuMqGROu_W0-2^OL*B#V zyV8s^F?NezPvwN4!ZWQJ~^7uql-xIBGn4|wd3#jx&U9%~Y#B;3v5O?m~ zluPE+l8uypPtU6KwmG@C%}1;@H9qQl_uP;7Q~3Y4aF>9hclxV9(Y2St)V})hc6tOE7BxBDZ?-H=!=wm`W8OT zXGBqpt-$5x7U83aM;E}5O<}{@CG5t1&W=V$P#ikWl3nqHzPu7$tHcqkFasl2sdDaz z!mX7JT58EGWr~Z1@&F`iS87hsvAPHPs(YK2f>eh=`%5TFKeWe2YY!YsXPM~hcd_IU zz3SI(>`fydQ zxHhCgy^Gt!RYSX_g>-r9l-yo<9yno>3d2c8#YrEzPu~F&7Vh`naD zZ^gv|N0bQmzNkN4dT{<=Ro+`LK*7WuY%%mTQ>EhuM*sp?tSh7sGKj%?rnxY`p&qMc zU+qdv5XAzoxuqN#zUVBhb#SJtSH9E?z8v)l;#q6V31@UhH~M@2G!aDsXSTJNg>q&c zPM3wJ=KYJgGisXuDyr%m;&NJjo3ARA8+E^65_HG?yO5#f|V=}2{BC)j3gp~FcD5gN7N;>QJo2#rj*cKWt*vsEL5%cLF6H#iG4b?bI z?&sx%4qdFbH?tx0lCSjx7Mx&D%Z}Q^r)7pcEoJt!hzj>C3I8Fsrz!sO2iNt=-2LHW z?aS?z9A&GlHM>*>3wIJj5g>F}coyzl!?W`Fc46iTO% z1cpugeeDdIieB(%^;eLjCAW8Nklsr`++d-MNzQlE&__EeWrb?*=aN5Gg#T%7nUhWG zPt~*+8H4#L;mB>g0Dce@tC6jRXAhNA=&^FV0bE=p{faB5`Wumgigs&z^0F+WG~yCc&^*n5GCn`T1UYL&vz?yFOIq`vJq_y69vI~Jt+cFRBiKlDw`2pclQf3RSS z0UQ$Q{$@6jKtU)|T`bQ>`NId>=1)-DFtYBk7}RK5uYlV3XHA*yku`hg57M_FY=NAM zA#^N`nV24~2}5C$vlSEa6mEnMAXK##``9gzNgoQ-&H6i{IHrEQp2J3*sBtLBk+Il1 zW3|*2S%ppOa#p=#J#uV?w#egFMPg=qI50Ff@rwL7B-PR|aj8?5$tvH@akSaI*6oj+ zt$uM6N@;@Gb|Q3N{%hH-e8%p0_0B zAe|{n%Vo4s+8mrB&u8!)?&=PnDlaGU;;%y4XVO$ai4;P{_ESem5u6N);41dMGvFNh zo~B2xd@Cny<+;Vu5g6$t)E0VCyl9(PlQEuhm+JA?mn2 z*LVTJ7sPeH_y*{*)I9g_CPbkZ{97nGeW+L}@G!PpUh@Mv6U9$JurvYM{Umgn;LwFy zc~1zwe65{2$I?qf|4YjOpu4|rVj9-Rf5TE$M~)VyHbihE#XsO2S*wLO9x6Acy=I@3 z^D}jW37_cqiF(aubsIG`rG>f}m8&CT`snselcA7&2BB5wpX?X=f@E+cWm0N#T9HqV zGwm-9*`Vj8O5K%f&hOTp2}Fq7x=x@6l+Z`GfF76U8sSID{;bSRsXF?b%fuC(czOeI z-Uve)Rxy+GIRZeB*$s3Cb5kexpFtF&IwvzHE>|o^D+07~AwX9Yyvr#lGqpjz*+`>M zSMhn&(t37?H8-izR{ytw#}Zyi}eg&A8>{nk6SSwC9a7VZYjrq-TOgQp<|v zM?z9;ldnQioFLkZBaIg_hF3@Wd5g~&&cQ8ivk9Y7`pw*rk<-M#pr|M;>T^MaQkoKI zj9xK7g}L_oAD|thb_1o7c@N*NH5P+M*)AwfCY2$dnRo#X9cGD+-z7`3Q1O+VSLC;LL*h+e0nD}YM)dT+CxLkzHB*i8D}i&}g-}Ie zrSwilHHa}Vn8~5e_+%ExD~Ge5UaRX`T~Mu;xsc9>a{Kf)-d|P|UvEGF5NSDCwX{7` zd*j=FEH3&0GUjk~z7PS~Tz}l!M|lsm9yS_#1HGX_eJfH?`g?<{t>&wA3a~xY*6NG2syoVgGn-KB^rWmaM1a6myJyNqLr2LYh^L(j#9TR zw#o1~XJPX7`X|v5Ds5SCanM^|v`#;c4VGX(txgV}J|UfyV1az`1o?9;g7C!AW^BSF zNgpzyYA`?k34`H51zp_ELg`$glE*){n0s_=!c(*y{8Z}2<ykan7a))WPRYa?&Pr})Zh8B?+br> zRbPS=UVT-T1MnI8z?2xtyz_6PH!Z63=iSM~ZnlxTtR}h06@I^)0NESSOy0ze8>z|y zT_Lzd2qoxOaTu}K5H^hnk!<-<_+RP3~c&+`n{9ntYgQn}?274ZT?OX-KK~pQ5WG(8P zW!*^(gNk-*Ta5)^NgV2!S#)MmVku50Tg~QJSC&U34C4j%b$WHlDF2e&x{3xL_I71; zOJa318xsR~z>Ckux|y+}2C?ia)VhYg2D}*kix0J$=Vp7%ZF=`=?K~(y_2sjgtQuN8 zvn_~x$Jb&L_NZ?UGgkZ5xb=2UMT@PYi(+28EXzkZmLCrpoJId*qiNp8`GNl#nFmgj z%l@0+u8H5}af@@q!e8NaJ#Nrbj=K`?!_CRmJPC0J1bqG99Cwvs)RXw_A&$Eqcn_wK zcz6Dm9*JN}{@RDjf?y}*ehei?lL_@^e z<`$@T%!KD7 ze?5LL?WS~LWXm1yzi$3NzN?RKY&^V=+~mGTAHOL+LLZe*{Ej{vLY4NV|F6JVP??VbzfDm2`LwUEHvOzza37HqH+YiQ9nlVSB@12_R< zw}`KVtv+LQdPVe7;=QgOQW3p6-4iW)mA(?h$xU2JpE0c^dV!k+j~OF8C86?MVpz9< z`s|JT@YJW?VIjGflX$e6s(Y(1OOw}pi$^7BKYjP$OY zeMq2T`!L(fX`z{4@!hiVP}f6|353lwt0Bb9<36#nac;k3ZCH4w< z@C9SF!WSL!>%=4F_pSX@Z|#PH_E46DKKnU6gRzCf8qL^prx;tB`8dnI%v)L-Whs-> zZ_OEN;a=-!z|jl3RMWFSREG^wSNo$+q(O*qZ4o~S3pp|`7JFq&j?vX7cY%x1MUGxP zXxWc*x=cLqp4B`Jl4Zbv_0zIByH4ZYlZ@doX6~1a)$fl^Yo)DFz2E$j%fyST+$RbqOuQN*;`O}7xW&!)(t=UcikcA6)yUvo3V}(vHd4Okw)=>((cfwvShP*o9?9; zIltg^^xV~@!9w%%<@?jz=6!mN@i#-S^X+8}e;01ePVOo@oUYx0} zML&L(xyN*!1~!sjx=Y&^p9y3fy9+jb$&@|8^u%#W9C;I-YLC#6uIR$-#8A_fMul)g zS;W=3o0@(4!M$IewQ z#cqEUvvU9`$?Ve6_wtQ-FcL-aYz0lqP2K#`AN!PZ;*QWxVZp%%%Ufv_AXTENY z^NSt-VVo{K&coI%Wy@P=P1{=^3Prvd##nju_&?B^ti|$!%jk#^-N|2sivjbDuZ0Oa zStYsIupqp_suxqyu$&53&b?eKDp$@;)4zJ6juUL@REg+O1 zK*M)_$28vLj%H-R;} zf1=B(VLjCo7cqj|QZMZ!j zIDBf5B}@7-C5VP+)LttO-J^}Wr(1QtM)QHFAj6FnUJ~#cUuvwFte=uRiM+rWT=O+8 zRnZbmA8x&wG;}-BGgZR``D_K(iIDtziGTI#>0{;2KsZRMlKGO_Y$wP`Mnb*%#7^M4 zg=gl_OHs3cEYDhTw&9JQ2NX7TqAb+tH8nP}AgXGL?MK(VVQo0}nFlv4Ra^ZxwcIKntXeO=YMib9DqlTY;Zpv+!FSUF z&NuwCw@wK--}KKuFvaie3OJMH&d%_Xg^pk`e{m?fj-bSm(1($k|L{g`ZS_WOc-0vgYjmYZiTiH*q_5lK>JYeV{Xy+In6N$u>n5~gMq zVR61N_X8%2hO2QsJyUMJgtV=jso-=xRs|u0_{KQ3hqjw>j|BGpNuL~(n2nGM?a?LGN>It!`42|WbRfV4v3aYDkW|!zRSG1{gX@nWRlq93Z z3)0fbi3@QPdnRuZmSK!e-R!9wBs|YNW57;%CxB;KP9tl(bvNN zv6?Hqx(N*t*mu$M9EtaY!pidm7xuF9Znao>)fOx7I$^q9C4Z(1E006SV&zS#CB?ie zl#+eff4q*8wBhn+u*JL^NFRdzjJ0265~-G}2)sJN3YBw(D1%ZcH+;?f+rq)d#H2?E z#!UenWQq4EI_NxPg3GtMXVuCyAGQm`&7BUef*YL!Bm5at z=&idf1OJfVsxJ59fBA@N7DzUE%vR7k{wkc|woIa^40RiSjn(nvLn~spuwtF%ra@tc zW^GYc+bv|`sm!_k{R;E#8X66r8NgT2%3a=-O*OlNC*d8#?&dSWBF{=E-s&3cFQ69HL~$Ie@C9O7QF7o)da;Qf?Mn3X)g8ripmcY6#HcWQ z+eL*&W>9Xp|Hj@#@CPv6q?VyU$^QP z@>eaHMHdOug*gmtRJ3}a|8`>3quTLaUfLX8=va(NJPybg`alT~Ax^J3C%f~v%Vdg0 zdjS{Un~&M1A=v_BxV6bf^|DxsZ!50?c^ftJ!1Lm;-N_F2=i=1Fe+(XIVn)qW$*3nh zv;1fHr;07og3~BuV8pxtFMTceI%x+QRY1mCuvel+RKh4XYFt!pcE0{PUE2ON|WqskX=byM{x~tO9zf(+GO88(#!74-@0lpz@ zO9CD9lP}L`OTVdxys1A{rK7OGMoz=Vhpzi-+k%&vzB$qs8$ONrl6TMiPi=yBbmVj2 zjh5u%#qH9r4(?Jb^htcI)aG!5yojP(P}(ByU&i69^q-cT1zBAv;KEg0bMokx6d zsuBBT!rJ^%x%!C@h&QOwoT(=)PfbQvEVG5SVneWJwwjqONZ*gBJj__==)^?L@-7n-Q9 zd;+fMiNXwl)j`~Trb~?_TdoxqS^lCo)Ek{LiR=NB zJz%m2qBrEGytVh*O83Zi<{*wmK=BfolImIx(ng zHc~9y?J({Zo6B(0u@sKU^by2XNah_=CC8spQ%4cHQW9P=B7H8tcYR~L#kY_$4CptJfS90H{gUS#a`zj?}#H}B=>Mg$$zUKw(xUK$Uw)w|x z#gVRT#Wg*+YWV?;tR|ut$^L6x;1tzT*?5oqn{u-8Qkd#qD%zN8m?(C<@<*X0HPf?a z=h=AbMvC_7WM4eBMcvG0S$cRng>1?}$9i$I-s^gX;-yr1Rhtxq0m@K_aC$iMXlK}X z=hOrEP6VVBchLcC`ah7tn%oBc5eg{2h5<6twtI$-H)P% zShPVf!K<>>Jtb#bP8V;KM%l+DC5fxd=|rT!AWc&XU|}&_;}83)B3HL+p`hnmlF3)3 z5wpuva;DYHv8iTG3%S%#ULfL$A>Ic+Bp;K!6K_~EH98ENzee+nmP8nGUDNlW}A z#c#CbzOxR;4P|P`4H`G-y$)`W{m!`|xZzP+uy6ytM)%KhwwXc*tH`CSTMe@if~CmD zaC@X$T3Bw~5oQV7`gN@|l_iuEzQ0uA@oCG_(j?uCb;R7ZAN0iOPh|1P(x)X(d?JHK zJ&;j4r6$I^Y^Fpu6o}3l*TUU4X6s4Wi+rhyFN+ zrfzYQk_!Mj*72K#cMv=tlzyzl^?1a%Vz;bxzLCGf+@UAH4P)R>@Ej8(dAOB_wGG_r zVOyzLxP8!-SlO{cA#F!ZUSt3=7I166$H<@8jyO=l7c*~`UYI@Rze~IXd(6g33lUkl z{_$jL+~B-E<6gnw78v&3?^0olTBAJE@WbGQYXX)^)x zWY|&P0(&-mE37$qjPE_$UNl2T+AB?RK6`XxubFVkL zG`Ay`70kn<>7raj(CT`=8UCO%egmMU%~HHIdxJv*#@dhi&&yHg>)eC!Y2>~laOti2 zr&05~bcYfHjPPH0j9!$fMpKZmuWQm~F(cz*!C4T5ZnOZ-;kS(6G2#wyp$smq+Bns9 zEo^gMTo2>XYr!>%AM|AS$XIZ?WQEB}Ozz1zg^c;*B;#hu$nVJ*A{hfDBOn=uJe|Xn zafPe(xop02l#c;+$Hn-})3GkysQEch(*1!(_@_KlA>C(w<%xZoVO){)j_as4CN}@P zpHVZ7Oc9~DRTFM?M9W}#W7+`;tAqYy{_+ExA$^wcy(^o&W`~jA9?zBv>~OH=9!A;a zUAd)fC4MgN)YL?sWxDGz?uX5*3ai6yMzv>PvqS=)xcq<e*}w&7gJ)%n*YIuLs;HV@R@`4?qjSz099QIj8 z3Hj$^Z{`?ROnTv2Ju{?8Kj~647B?;*j+}hz4z?w9;V`W~5FB86ft=_)z1vrlOpGim zen~rl2#%5`!JMJYvKksf;P2qa`i|$-TykU!L3ZF14rkNq0H7ZJ;2U4f#}<5L&&yc@ zh@`2#I^#1VADAU7jO~um$Om@IjQg6odM=hr+V(2Ef`-T?87M8}Mk>M6@{>)Rfm}4^ zd3p72^27cN2TAF6(!Ewvx{gL*mBR2sN@b9gVVAngO3ETB%T8KlB|))O@XrY}WX9Su zI$Mi8S>d+a(=co3$><+zbJ`hMhhz+hwWZq`8HZ#HbT-)O>7>)Tw1qW-o#-G@-3>e= zvwgxLet{}-!-4GFj>e3hm#mJ)EP3(ehW*(Y9gVp?FXFn9>XWRSz1be^Z zR3R4P=%k4(r(6VhaKrSJ_w>YY>m4Nld3T_-sq?>pRVQZv1!6)^5yo| z4RHl14*T7X@RG7LqT7+a78ftcV=GxiU!iHO8CO(k%0CMwAYbmWm9yl>92D_aCj2r~ zPd)TY()74J;~K&(=@E~vtR0N`asiA!)u-p0=gzW=ovYjNo46>gtW@`b_PHPvO~>3K zA)S+X|GW}rEzNg$vU1V7H`W$q@|a~k_UAFfdK|!Gy7f4aM~C&8Z4xZoiBh+65U`3r zgG6^K-@kmIpi>lyX)lLA1%sf4cpfCrIn3JfamhyziO7Uxnx4u?Kbc7nOoM*Hf#Fue zjuNqkHmE_5Mr7Z3Q5i0OTqx#-MyRsOg=uyidnGYY73r5_t&L;*Ibahb*5dDF<40%> zBnf07rky_$XH3x?6aOJ18aHDlxxq6%!nJ82*hg$}JBl5@*=eAJLk-zg{|vFJ!c zOy3z1-&Zg*)fn36>~2+&9|^HdSo=+Cfc>%d#Q%UVjC|safxENtWsC<}@O;b9`(rS% zp$Btkt!ZB>6fnXtFtoRpAPP@08(?Cg+T7f{4V;YEZX?PF$#CP>2(AW)#=xO5ws>x6 zJQyh3*#I`q#tm#{xWyrl&TYvJ9p3SSa)Td&oYBVOdF^M=KGowI{X3Oy(oIqvTWr->R97g+jh?3_VhOEp@8$5&YG8P|$}LTjj> zzCe;G3!_tpb)uS?$ud|<}L;J__%XIVD&hmUhM1ds2Cl?C1E4GJfYUGFNF zL|6cY;k~b_dT9X(Vj@f4{vvN$E?QjQBBzCdJZhTN;ZFw4%>gy zvkw-Eo_%56e^-~EY^lr77p-nsX5U94fA)Qx59<>*^=jCMWadP7ZiuMTr`PpWus_#U zus>B4>`$;2?DOirtzVzGzel;g?wUgFz1I2Pbn6f0A!+H-LasKBM^jfDdPWxA&0ivE2=qq%SyeWjcXZ&Oxb5$2ej{7#k8JTiQVTzO;MpuJ|Bc`s$@$ z3QUC;W;sGXl~qAm4(9r1bmrag=CmWRxFgh_U{f-n4AyTz4R)Yl>*t7NZpt&>p~ z7Ht!y3anAfHCyy&sKWTGS^%$my(KragrdIU>kSwi9u%^DvG|=biaxD~g1v4A&XlyH z4PdR7PNb#ss&;9`s6C&0wAnv^W_Mif70JBtMYc2Jll9DCgYdZCp{!=~MiYD75jco! z5y?uiC0Nqmq5H%u@RYtr9D5IuI_N%RKV53Gh~B@$4U?&Ri?*y!Z{mrRx+ZD8sx?sh zma$?r&lf~9PWP9tUvP%7nF#nje5E(1?Yz2-v$(<|e2Gbz@6wHn<9g{O9u})oUfN;& z;)hJU=$oGYlWkYBdB<~bm9@M74*F( zAHQ7XDJlL8o)DAtN2q;>6yIOJY))F5{EN6oiO5+Wt$-8nx%#~wlR)_wab?JR)HV9| z{6t*cYxLV#>#d77j?dT0f15`*9j>?R-`Di7>3ZXkU(O|2`Qcj5ZfiIu??%H>lqeGe zOxHaWj}Vl{It%0+v&wHn3T>C)(zkr|ca;BqZ}~_1mY;ZNc@xDL9e07#eU7_t%&l42 zF`}o6=qj=>SDgpwvKMNf0hg4#q#bP;HIMLOhK9l#ag)ZD;xb;;Bkz8w0ou{vi35BSkBR_EQuld;;hP!f2(+4>!Qtxg_&rS+Oq!7tEL z$+_$=+5iz)Mu1%}zr`S)LN5q3Uy!IOu)3qS7tKvNmU^(=jMY=~td@=+X#Gxb@N29d z{T1C)|K8Wl(agd}4X)GtFW(-YujUJ98@rY1je8`DvVREArNAXUs2 z!`-uAWK#5O|F(fz#U7{R7m~pb$a^OZxIM;0F@*5pm{WbMOZ$dK&vR0s(kho~&SU&G zrW-LTbSu;tU^fGUTUt_riM_;LeS}WujFG>-QQp$nk|Ge>;<=@1FlMo|3#pLySJG^}LFlK_h++34k*dR6qRqIZcb z(`@dHn{c_beiedsRIHAmUv<-F(V()mtd_@)e+VuX(J1Qg9Ur*I6YEO%IU9Y>nAaH- zEiGp&dWd!mq}h#`vo9MzC(~Qd;3;VJIJY_R+vP2VT8o}bII6}n!Y>W*n0Nk02~20n z(=$AYHKWUGHiS-MYLE9u%l0S6>Y_fgre{bsdPrWUm3GYuu4GO#FNwiZSa%zZN0LM1NZ_VM&{Zw1^`1Ha!_U6Bzy`%cw$~Eoh(ystr>;7 z#u|x9P~y)Ha7Mj3G@{M zeR%(ZxZ)<=j9yJXw^TZ!Z(hoHmt&oYoRiX_LOycHD6#d7SYu4lzY;-5Q@`*G_N$*@ z#E%t>{uTN+S^+A#0ritEekyfLL>cmUPzHIG>LSWZ!VpO?bA~+2dO;t%g?uR3Vyw;u zKM}XPpf%KA2uC#ELi=z|F~Ki(I_74`7pThd7l%5~sS-J6nyRONmJ~2F3?;l<-XX>{>FP8P>kJl*|+4;kGt1$b$2%yoXQq8B=h2wH%;VfL;msBmqfk6aZh@->9{%|U>b+PeXRATtF*+x45# z2gG7JB?W@d@}~ax2H}q3^e0C>O`pwSUb6+M*N+)fxx`6`=8Wgle)DqR5+CR!n={?& zIaEO-Bg~ok>OuRdP(7fZ1QFaQdq<>t_HDH1gnOfwm5`eyd;yK;dhDE%tN4g$L)U1N zA&6r5kyl0W`qU9|-F!b3h_=U!OqwXY6vNJl>pYSL1-jM0F|T5iXN!JKq4{21PJ(dP zaluIha#I;{YoYHC@NvI+XOBsemmAd)O_D?r#EqO@{a)7)vAT8`eg&_Ir^JxoP3K%>6Fg(3C)YKYT4`_MQ^$t>H;R{WS`unLju-sW?y4Kri*~-rx zwkKWBld#5?!sN#fQi@hZ$=%`&q2i)*RaENBoSz~3t-Gwm*GWtmekCx1hx;P_Q8!%j}FtryRvKKbB0#0G7~C&B_>L0+@xx-h`A}w0l}v%rp5^;*A#X8^_4ME< z-e%ix&fp;4Zk9LvmuG}ra*4}{Ues+iQ*?n-hw-~cR$r_T!rJv!?>cj(f$Hnk4Al6j zQmo6(c22I1c%Sf~?iAjCm2pQ#7La`4C&r2rg!4wt0gi+4z8~TbOg}h`n$pz66nYch zM+)Z9*27-e1^d#2OLX#JT`)a(ZukKH&i}%j$Molh_hUs6!XDW42XyZmSNz zU&s;3MaHd-1Ix{dN=`R*BBw|^oj+6@wS2!!o3Y}OZ`ai|ld-krq$L`C=A5CP=pDDf zuAXX~C{@Og;WNudp_67_K0>u~rU7^^PjYj@wbbcJuJ=UmlH&D3u6D*>DWn}8f3q5- z;nqPoXE$D7&=S9v4MbnE;pK$8#uzJJ<1A+!XE++#TtIM@KFLKV}l%-M^!_EpwO9#YoGM$2nT0odLVqNBlMv(y7otm(rT9G zMJ0;H#m)F@Ob=B3qu;wB5c&}tTC5u~YJR|AzjtGoeMe)b+Ku&-#u(oi>^8H(!T1VC1 zhFJ&4*`_yD)dg{-t{h4R+4QgLKvu{z;Xiy{(-_9fT4gU3N9 zK|ZyscL|>-q|zB=c;U@?oxXNfikT=hoNL^hWOZa;>7FylE7GxhQ+E}o$GwzL^ zag-<4jit|eHoDi@PL8MZQ~nAT@)wE->gv^U^Mj?nuW#em{yQRA5C<=a$AfAnB3-=^QeRPk>( zvOzXOm&XJ*E#Gh9vP%I*jXE{5s`eez&>1HjFjrw$wI|$G*mEBSUjZzFke;9+fieN_ z6!#GUuVh`%uHqXb!u$IfD>`|BB{zVBAQZ~*L<9F6hNCSE&HALpuhea7=!l^fV?)Q~ z93H*U=I8B*U|Vk9Aehg~YLu6@vGMp$9kh!O(fLO0QG5a9Sh+S}?_ak%O@o1K#(rFl zF;w;QQ3M5nl9_42(Kf2fI~>*Bn&t?7K-+68Xh?qm6d>QQ@PO=8x7vXfoHYCtBht+Y zW-$b@NP7XXa!w%@Y43gS$|bYb{(uI(bBvlgzHBzAumMs#IhGkF{+^_OD2RJV%#CSv@$ z2Y7(_j!~AsgqWMFp`=(IhlN%C%v);4da%mLj?laDyU8(X&gZY^WtlpUF#H#=n_*$< zJ$<}UGfqE@La|(LZpeTIsfUTFhwJp7W|u!qBkcR&h4N>z-rWz%08D>Yct1msP@eUF z{mWlY?u>6eU_)>;<5KifpoyZsR}F7Vd=0Z|SBO8(^S6)rvuLHyF)#k14?X7fuCvd2 zz0KA_6g&7G@MVv-{Xu~d%g7gS^o4k{oVckihEMgZfSl4BcDm!bYetXS+E7tq$ z^dnAhHmOHK?(uyf6M-oWp*+~<#96E_8xD2;9X@m6P?+4Z(bS*5&|7SxCwg&GJ->~+ zP{I6B@}e!AIJMF|%NvAj=kQdEDC{*`6WK(F)(YWX6s(V_)-7E z*sLv9%>|V6>4_z>#WHx>BQND4Tya%=~Gu&_mbr`66@V|7!tb6a&mV|BQp zFp)twnyMoirzT^%4sCWO@DGlInfB7bJU4=y%gs<$g_$v4^r~W>m25ZMSHMT?WEUFZ{nF#y7?7na85HD_CG4i_ zjTJ&7dR`P7!&AE53XJV}@x;{Y-{m2C-qEG4!O_0xdB>v77rdT?6Zk!z-^rz|My&%# z;gULRp|D4{sB2%)XA&2T1p^W{iJI#1@@Jgcs$^)Dl;xF*br(Q(XBA@#5dHtyjKGm;Y2=_P>f!!@CK#Zg!#?mQBNTkeAm5HJr-%$PlXVKZ5+}==$W<#*)+cqSq{_727458{viDE4hDH45bn6{o9q*~E3|&;_-~&9icy)C?aOC*sN`!iih2 zzFzqqW4<9OP0VpN4Hf7u(dsaiK}%OCkrQ6qOKM7`4@$AfgNP z13j#QC51!*=he&W32JD5Y8KT|w?NF8UweyhXcte96}x&Y-?Tc!9M1Y;>#VoV`D<{K zA#I3sWVPCKqBL}zfWg|7Ohe;#?P^PFGV1u>ztMt$Evh*qEv;;27vUqHC#h^DvQuCo z#VUW@q90gID?SG19et0#!XiYY@d~pG$0nFSi7Mo2DxiCyeZHMPn<2xJw`5VA>2p$& z>0XrCR8~AWxKS42wSbBExFPs*S#fc&e(g1kLAa7XeBztr+Ec9;&IEM{?;=1B5R+Br zHA~4Rzw1uGH(W=B8PMq z<-3bnC%g^~LT-V7M!)%nn#SQTU&;s4Fp{-XBcrtTU+rL0k&`|GhM0cAz@wDIPU3)Tu`ih+gDUAJIE|tQlzf#~H(z&5G7uGfh8 zXX<&F^Yu)!0qak1g?M!Q(|jDQM|RO7?p-xdM+Vdeovtr)%sGz43Qg z8Hy7=p8(X>fXV)O2R$1BsFA8`e9zwa_lmSqIw2(zFQ}<}_SG9@4x$wpGBy`&qZ8_bzkZX%C+pMEiysAZ zJuWRmZH)vcJmSH(2PkT+Oi$FeI-8n5scFgvsxvSeP_IIS1?`EkHaPlexD6^xpHv&6bmgp~NlyvZ0t<9mzF zIi&3$>9#xLFH60i=E|jvOy~*(u(BvJsp{v}i?uMf>KFXnJv3gx1JvgR^>Nj?4HT%+ z-^?bq?))_ppIm4>FqPaKz{-c{D!L_VeRR@Qb!cPqDKu{>I2oOME?fGkYV_H6LcOzd z@mz8qxTOIfl436q+lR-o>;}J?v7@YbaZ51-JBLR&;Rx*}O7PFX0dohd%b6xC_5f$# zC3F-TBYI&5Hzf<(R69jY!{pFGOHrMH5ly+-CU_@T9n(`aK8T7DRFmgqR79r$r8@-+ z&?Aplz}|?lhd7ZdH?s-$lhNQ=Ssp9yh~~5B;V0{1|%5(OJ&qm2L`s1re>o_^J+2ZMhRykU(DS1Dul}O==2++q%?0bPj&{ z-Y75qG&tOkjJNJ=5Lh5=BrBpzkxG5)2>pw`rIoFQy2vW$w8uc6CsBN=^rPjvLCprc z*{2fXAkh!wRw#N6?$jk$+kksHlv(!61OTwkm~QEol(DHu@F}oD8_$%$$(we_bc;lo}4q##=R zKAgsX9;sM|WpKIqzBu6)Bv$0^L1KkqT#dxU(%j4G_kIO76z|%n-&e1*BW z0#t3j$-zMYT<&AVibG0!Mhuj$503DboMY6A8yWGlKbzmkS@G-nQLl|fpSd{QsP*$^ zpQNv=^M22%D5uQnq(&=Gg-5GSO{IyAmj`_{$7G{sFwaa=TeGjN(sP*~tX8)~w83yI zwWMCP4-+L1v7{Sj6^*|I7VFvOUYl@B}dvzx<$>g z%Vs{~U`RMdDoT1*He-Sw%7AXiji5^@9%SKxw%$VGMn>BQ+`(m(?Q#TXddQYjr~gcvc%3s(bM;e+ zeo5rN_#<*_uyt1|{if@-TkKuM$p}Y@E6`}QeH0VvPE!efQ&F`(o+XMbiEBHXU~nfx z_zLBe6fb@6kJkGA#C%;iN}ppVQA<6;A2Tg+D#n8D+|UW~gHh<#L`Rb&I6}=Ow>eFd zL@V@T4y%;d$iWQJqy5`I^o$;9rH-9xoi&7qu~E$&I%3p_5J+y<3;A)d+xbsea>^9^Q`(CITNK{$Z!k#1Jh$Yqy~XdShd;F%|fE$$&aPC z8i267v=?uP01ht)Sghh!79CRd+Cy&QwQiCryeHJ?{>GV_)r=3svD`siZ614=^+ca8 z)ghZRIR)azR^U^@AMMcu-gexRnRe1&fqT>NaMPJ{n%VnuT`bdC{*RDzStg+##As!G z@8|qf<2+23>SDk6hW-+(dd0SyHdIK=ma>Vl))=f{# z<`}KJ^IA)DhM21^kCAH0Vs^#W}(e<8KI`a!l{Rd$Syt;FdkEH*LBJ*-%mwHrg@?T6kH;GvE$Suoq9;xLxa!Ep)xr`#HZj zN5KsaFrs^CITxeIdZ>q~4raDCd#j~)vM%V@GrD(Xo7bauj5*Z1Etl)w9oLo#$AkYv z%;t<>veRsqkSEfu9=BU%vZGeWj#|}c%dB0rx_V?~geM?;o8G^cO7U{2WAMJKi)Yc} z>QC5OZ{jnqq?UQZm@6aXi!aMl{&Z^+TTRD2sE6IRVcFVdG9t&&-}dYTTc+1N;=fc) zL;BT}ebk!h)}fkSE=u+LC^bopMQLTvg#fz1a0MoM(fva~W1Tm1zK3WiR>N7XPw^FF7v7|<);Oc}q6aDX$FZg$U0XCN?6xtWOI$1B< zaHV=3+gDkUsC2W@-HTTwQRjAbxkY^tgo2HmJ~OG=f0ngQG}I35R}@`IU0L~as^|~W zjGvX%OXUq4rB#~#(RzHc!oZ)rWuBlMBPXaQM<1HDwO<#g5OA)gzeISC=0Xm15}nFb z-KWMOW^d~%#){}7SC>?YKPA6*+od_de&KOosi4&$U(kJ43lWCf`*`8UWB^-v^ew~V ztwrD=9Z?jf;5)bBf0!_y64uhrT3>&4N5w(74KMtfE+)fX+CbnRt%3Pfeb@)Rkp{ib zF8kl_!`uI3A0`~V55|#w2-&X&W5n2t5o0g5lrxBn_sT+x_Lsj>ZSORj$C%>&+sWT@ zYd+_hc4$TMOpPrGZe%VX>?(uQI4?1&m0FoLt|24tn zM$?zP7D9Pqdt`>O?!#gBmWf-R0U*$c@l;_~eV)?*x=yZ3KEqJ251$~9e7Qb6Uhe+I zU1XfuHYg)8CU;L_eM<)C0=sQuE8ZnIN6bKs*nC27o5wR4;e%-4?S)P^nnd%`4rH}Z zO?+ajIQgkRm!GO|0W?qJ9o#}TH3cMBb&l{Mi{$4R`I#y|r)gF*CqGc`)5D}cq#BK{ z^Pzr|%bT^ygRoY$ouwS9#W&W*2U(;5D13WtbR^|3k|L(Vd1~iK+1Pu;?4~J_MT|#o zpfCBA@?|mB$QO%eA~Gh1=~e=vjlrL1Wd7QZo_NMXeA1f85E+ObVHk>ye@(;wgGme( z^VMw>?ON3(?$^!obwrMr(>ha0k*B2^ftCj-Lq=_0Ujv7y8|do+Xp_%Kdvt|z2!vOF zr)1qUf9VFCB1>uG=II6+ji-{|+vWRmRhNsW2cCR1?<}Q3j8r2{PVN7i;5d4WPIo_> zC3JxaKV@$Uh%&3Pzj&ImlhNJY@Endj zv6Lsi3y(Y3!>S9PDE4eEnwhDjMWrJ;+VBkRU%J&BcMV(v$Jxd9~6Yo zm!BE(GgW?0iXNy6k5FwR`nt2>5?FF4mG5o16-KA0zRI|_EiqajffEH!%VJ3k(cYIp zw0onAMtWjP^V(+>)bpZ>xJTal+=8b)JT)DRjAJNRixC}`bD`R@OIBfIWhE-zVe-|t z2#2C+e|VIgo!OA@>D^{dY-@}!A53x58OEGi0P!{@LydphY}HKYSdNJ?#C;nC(DaM*q<)2oW(8d#%pK-B=lgq^9ff2 z*67DvM+>q2E;r-ECMtT($!Il-yrC^Hg?RLABap`*4J5RaE}{MIAwv7in|0$Mw3C|9 zPQN-tX!DH_+UXZAq5TGDCJ61p>OoKjm`W4cr`Um2+PP|AG`{Xw_^__F*nwr-O|k>u z!ZvAI23<_CH4xzP3u87Q zqRp3u|G_RDN30)YjNj^&F&3A}hmB`(C{|T;NcY_x*EnSbY~rVM`R(duh-pw0{VpK} z#kZ+bom3BgiJO)J@nm8Z;Qi~jb;i=JoVuW~QXJn^w+CB4DwdnaIWD4v3ms9U#6}z2 zkusP*>U8cw)Fum9eF1um4Hg7GM(rJTD9=#xw0nwZNMfs9{bx8gZy@n`Tt`Y=@Y{e` z7~mH8!{Xj;{@lpp(e8})K{5iwH-YH~iv)R$jDXBW>wCrRfj6Wm{QSNf3w(rEZ1|p& zS&#PRzt>w>2>!pc;Z}Qt-ubHVV}>eTs$yNFvF_7xvCDr?&BDy>S3&iaQbV%vRTTZx z<&;~C4AetDUMefi4Oy^H7>LMxv)VQ7lPr8YU!R)p%g3d655yJ>vSi^D#FLemQ5!ep=(5g+*6U+UsE$%;J`3~H+cgF2``&ZI{o0r@XVQ=NR)?vc}LkIl1xb>z3v zeVLI#X8o2bT$i%%WpSHh8~F27cOmp~n>@p9GOsc;cG!KMzd7;@f4`NcOBejj;SPeg zvzia@SQT$7#RFXUc-v6*0Eu7J1PBdfsQ0=Ka^!342{B9fCW0|v{R>-M$yHP60<@<# z8m9!3Rm~A`nOJS8b*TLDwY5kbvxT$lj>MBN@HHz|$H9uP4*Vi$=b>%1z4EZeNMMLO zbcZ*#s)DKh?dO(cl<~Va@Qf8Hrgb^tv4?$-nwC&UMX`nk7YK|d(aRJ-aHYX|h<^ch zmLu|3fkzg_PJs#y9>SmpTwIu|z7j|gFmWMcJyR*ML#u3;csS6&b zfzbi+nDjPM#(AJP6(zcS6#_)rh!0m>S@YAz=#Bd#Jj$ z5zK(k-%Mlz#-Cr)LgW`z!<~!<00{h!vV31I9d4Dr0ree@YAeQshr#yL zg?`G(B=MruxjHMSIfG>QhcD?@AMi>o?W=BGind4(yN-m)HY}X(PB@5_j63858e}(U zX%x}RCJfcc4YLI31BN+Sn4?qZH1dr>Ol}z=#_fZNGm?dEIbx(ah@HbjmF*r(DLm@M z9Jz&J6u%1{>M|bX%gmThmzK%G!pGWHol8CtP=T5NV+(5|H96_I5r#&A`lZe+qoN}O z3m+r1d2CSH{g(MxU&6}}tj;ir!@alKvEb@%4|z8+Cf7*PLS9av5Sg|bCXEc#xYZr2 zTkH2v2#;zW3X4T#FTU;Ji7;PQcOW->t1%uVUUSg!cO-`D(4_J@YjsBAPt9Xhk#5NZ z>D)-l^)oGSkT*4twG2Ni3YXhyPfmyL;RE*X4(KAGG_}KPrsLyK?D{Tz>BX+^mb3ao zZWMp$7#-lU4^0ez^YsXuyLoz;zeo6k!GC?6zYbn$ZIIAq{szA!~gVd$4QN4jXgQ;z&Z0pGftwlI3xvmO zH$h%Ao!l*0D*_9MON-QcQsur1igk$)hpY=Y_oS5JX`Ty&Xe}2AnJ-y-b{7YKs;jtu zjc^&as`rAR<%;XKY2tLPdc}QoX;r13<56}Z0X$8sruU*M=+v}?PUuzlJR&%wPl^_O zA66i$BLuJ(K2+pP^&uw0B1Rd+UXb!-LwpMH%#(Hm!Zs&bu6;$r#M+#UU78ge)7!r4 zyks(bocdj=kXEj#LY}q+=_S_L?Jb_T$0L+pc&GWKP=?|f$r7;yj!~d2dlCAISHXqC z=K=t6)($IA)=x#UaBj9nV@9%YJc1?g&<-!LJAb35{7AOyJ+Z%Or>(wEi4yPEjVM;f zxs4GS0tH+KsVcWs$-)b`)q&dCOhWdD!PWziiTN$x*1@_`;Z1vHwh_QIMkv#s+0D0g zSDtU@^~_xD-;LJ6%w{e?!CgOu;`=i{#FX&IT(7Zy-P1PE{_5_ERWdYe z4_TY)ukNZ?g<7yv_%IoCvYf_`(Y>h;bypPVT%j(x!Oaf?vEd%swV5kv(qlZBv9kiP zm09SM#UUn+I45tO4gK;QGO2hEO=N`}vW3U?TW@FSD3S;d1MY?s8KJJt?1QSs6p^@8 z%+Sls%H=r`L%f-9R*y!7LfDr$&v@(@nEC{v%^Z^jQ#853cr3S(AnmPh=HzboeG)d%teGd(5|YX~}Cw z;hwAWVI3B*DB+!%!g;o0vvSn&G}%I35vQhmqH{-9B?|X6%pK{;VgQ_3$7$xF+xLRfflYXyBWw12En$COZ^ekUlQLjA^^PM(Ms%0bl)6`Cuq zI0psASH?zth9zF;iaL%ekyO0U{EWWQ9U3@#ywF=>1fvs?P~hpicbyDF{EsiTdL zROcrTq(^uTPQjqIFPA_i@1|Fi+7C+9OFDWpa9C>j-dJ{0z0VUKPcWjr{v6gyJ}ZFa z@K8w}%0uF1wg3@@^!4WOH9_NDIf!r5(kwD>fTQHwWc&ozYlrwAhso)xuz)}Yr_T)g zWdkblSKK&B97&&Fpgx6J>~CH=DHK~;z#rVFrNup>f`$I;8Ik#+${UL!fqwZnr1EPI zKI&thSV#pyP=feUm2D-@xOcsl{4~#QaKlO~@Hdww9u!^D3K0d#4f3#d z&1)d=&GR}iohrMJLM6CPWK6Q~7bx1Z1Jw|DSncEowu<0d%f7hC@_lksmA_)C?#kQ( zH7V6Jp&Aw*tzpoaFAZ#21iE@wLAos*ecE-K+;~4Cr2?ANntN%Fco8J550IvnYG)O@ ztUR#Pb>h$|EO16x7Y$ukq|R;qZ75uy3s3-Vs3oDzN2@_}$aF3rg{%={CbsULos7J= z78a$gj8BbKX#U1l$QjLOd{DaWEU-}duueS>UIEG~=d0vAfwEk3M5c@OkLEe5R*KP_ z35r?Kt$l*5P)6fxdgOA|!792D-GI{6@8N7oL?4(<7?E5Juj_?E{KH zzmUPtRZk2oLU^T;FBpA}=0sGG;NCW@ss%Nn(q1rmu=OAm4(=cih9`t}m(?l?uEk$U_q0~cRJgtYsZ~6j93Droo$ur!pYBBmdSM8)UA_ugrR^x;Sa>=L;&?NdY@by>y~2Y>CDbvK?ZMK2 z2xaMAP$N1+gI8)A_6jIU3u1ENyjV$DwfEg%v@HiWmXRmQJA<*yJ?atYvHp!(BhPwt zX_U0+`y>ds{7e%MfJjZ6ViZG)Bev`!vV)qAIQ#b_D9fzq^YGI?7By0O_@4AG`D|6i z^i$FrvmD*M?^(TsELJzMOTot-hzg@H*3`T)nKF zqFMUIZ88`}lZdOTOAj)%<$99Q;oYcSOT82sNyxsb!0#;2302;dlhRry!b>SG_8coq zjiY?oqz9>+XGl$hfLv5SVzYAqf?}=(iOWN!XIX2L?!Q$6IijJ5qTsN(&g8Q!`$hBx z)myj%5TFIXu%)ot z7IF>jL(YBBbUnYKbhBPf5jMzp z61iJgee4Hvtqo0l59VgcVmU3N5TPzPC?p(C^7=fvjrLbWn%(2=lD^|@XQDz4Mu~~x z<~(=!`_$={bKv1`0@yEdwkV?``gozf^Dn6nxuam4rntuY(y(H}nQnpD5uK*CeKIy( znwNNL|DpH*Mj`zA3feDW%Ec+(S<^Mr6lJ;~C^#orI<3S4UZj7KN8sdhl-DsLL8y@q z{f$%n`5CGLj=+^mW;dQJJT{g<#_G&J( zV(h~efi8)Iu|>@wbBK+ng8cxXL#tWs6^6)OS)fT^86Ij$5K1e@D&0o3W-nW%D5j$B z3PN=9pGH^`aAxPI-7SJ%MUR^A2Mp~ivQFcP()tx$9=Fm?jTy+>NL~n(#X_^_Y4|g5 zOlhqn>p-08Ub>oV!$w&rIJDCiV_$dmOy6QWQn(G4rq(NCUDeWN5qHVwcJ`t`dR^Va z%t{zG)Th>RD3$%Mp7SXUU_3@93mZPy)WOuxF*AtwJjB8iY`U0yAyFp>)#D}9-N$QW zGq06|g($x)@u*9`bb-IDpP)=U5>|PL7tNxWlmZ2q8AGpdfgeYPRqoy$bhJZRz`QA*75M=u0mS?uP08;O2k^m@C;Y56)Z3c zs)~)_W--rY#_(Vn&s98E@m#}m4bQba*IM39BrPFnkL5+-8qe5|t@bo$Bu++4VQmJz zQ7_&Ki8k%CKC1YP3ZOy@wx!yE?adw|{inrDQvSW)bX!~|eAO$Y#i9S5MsoamECGYu zb>*g}NdtfMXi$;!3r#jh7g0!tt2RRv{+VuyFJ4ihB z+3kAx;avBhjy*{a0-Fu9`%8%3*;U>@z+=7BQE~(U}Qvl_K&$| zU_8mfhf&B)6h^;15EQQn97u2I=0WSEONm+W2T>@L24b~23HS8C5?4jsNHOa!YpXdWz<1`9~)RLX=38|<# zL%7tfz702izS>`MiLAv-Wce2-it$k}lhbKOBG|>JA5XQvXkYQW>CuUo|bE69Yf2=0o<+C81L6kvX-qxmgCrb*moN79P(h&Xd`{V2mCz!qNP~bgGKs zX)MdBA5!4VEKYDla-Se2yD22z+#rQOxihve+{n?>(bEG)yMp7HU^JP(ff%h%k8}wq zO{-YT6BXi?CiphZE4f)=eML2s*I#-O)Tu%c%6JeDfSvZa^|DaneN#Ui5ziun5fy&f&8 z`igq&t>cdoOM|l+4h}c=9_Y)l>c2mfeQtA_&y3PG1TWf7om<}5Lp_UMAVv3noFc{Bk3jlO;Y zs|>IS@Ree^!oFi5S}5jxC!n?;gyYI6hks^7DECVROXJ$ug;L+x?LggM~(l zW!Fk#EI-Ia`4M@7ysNnn+3~+*v~YGvsykRcZP~L(%)qEWiuX(@U(E{945zSIzQ%tgtdayefuIOaR|(^ zVm}w;8M~sWE_TInma~$bX@hp_$u`upOJE07UM%K)Po>J($h=w3yrMpW#J`mNl>=QS z?D152Mw6Jm3y7UmL1gyua#zfEznmx7!jZIH|4%~`otF_JyF>bkf89jvhMb;bn6b*^e{?C1@tdS3L0}qN z_wUzrH^Mct+p6hB0Up`&fdupEEOLjO=~cnjceAR!FxCT=K{U|GZZ1ki2aK7(Agnk~MJj?Cp@gK?!{XG6PxuKuOKgUfFN4e=q2zr6MOY-z= z8js@%cohx-(5b&DQ-<^dVc+#|KuJKDZBcW$6W$4OC83u+E2WzlDzMu5yVgp}$nZ(g zN8^a9M1f}5irEEbRNF=EnBgi`SAUcu`i;k4sA{||b4;WNP6y2e*+2)Phj3w2TLfte z>X(d=oO3Etp_&g9PV{-WeU9RF*h}qUz2_FD5L)Xfyn1o1k3{TQ1TkoFrA@`+JsYUU zvJ-WcW#Qws6?rmVR~ZfnQ_8t6z)t;aW?f~(gR3C=RbiDTv_6g`TiXvnqWNK0hFzt4 zj?&=8k5+*QGy@g34+pln)R_3O930Kl1Uu~$#>o&e?w!mqzp9I+5M8X4=awe44Xa1} zH>HuEv))$qtb8z(FQ4QF-yXX7_m#9?tBTZo1v~TzUX~!_WZ^o#EN8-H(+)4P>`&_| zC!xFq)MK$$S2=k$+(BpBY>^ezacF+WD#iY?jcy;byo}%$^*!AT=}&mL#1Imt&kl7h zo<}YFBbr&L-!lZ3ZX-ujp~3XY`H;qh#(82=*`Hqc;BDkH9O-zZR@K zD|`|9Z?CHgs+V95h1Id?uWRKNtbNpj1TLNC*W zN;H9oDO4u0@p3Xqn}V_M>p7v=nV-se$UcY$^>R1rpUhv#{v3w*tcq!8r&+enyiDae zk?LI3APaN>MJ6tW--*d`CW}oyG*O1lXtH&$HUypOj369sZ^vERLWxo>Elf^YU7j zW!mT_+K+vl_PY-9(R@p3H~EiP^ZohPtSy+Xp@UnO<3=SXnKCrRru@<}D5vaGAFF(E8f+73*uEtgnmp`s!k_OUF_R>}Qnq zKP<3$JJSp7XM8IQ?0Od1zn}{fS4&BHg*|xK3X2`N!fqO{!uGu+rOFDMO{sc?EjVn2 zJs>2qeXt4qcArdj-}{BuFr|G#6DrgB`%O9h76NQ7;&k) z!bEmS%d!6)F|jWmmS_nf)`*H74re+#;oj`uwNg}%y}Em?TZ8ydlYQI=P;=i;=*J$%)9euAP5bzh zslh7mvR>FshSg+{V>%zgK|O4217g(Ng`!Y3DivplUIjn+`&MPI9q3a-o(!__3snl; ziE+2UWqMRtApfWaMQ)Yv2VtN+JONUAC3V|km7)-fM+OXI_6MW;F)`tAa!l%=B#{z- zuUSs-CCVioTD;$@d*oFZ&y*kGRvINHPOfNv``cvUWl_@z(u^kf)4156WTS3&Z2qMO zIT_aUTtuR@MSbU0dNF~)?KzVqfj?y+Zj)m-2&P%sCL(6wzC+!p7c#64yDCqEhbfxeo&*SeHKHw-fLaz9!6>TO=3@q!sP(=4`@wRDu!rMMEZ4{>NEvct*$->uP z(Yi`%#Racdd4~AEcwOaszie#5uH+TOzDfWvE}?r1#RsUqLQWgyo1q?h!?}jPI{1NL`*P z|P56c;R$lwwl! z#}pT=k(4S@YUL~aR2z&1me}TUGZt8GJZ|2`&;)KX?K_s!Ez>BtL%PTH?gD)s&JY&d zQS9E&qsoH2%iM?A#qy>q^@geo?ygC_sggIfsW&yB$SV#Ei{e&fMIA z4`WEV*zDWP)px9vEX}hKgEmPU>?UcEQQ$~J+@3Z`JLm^}b)*$;Z=0kIq|#p)XgZZ1 zH%a}{XY9PRD2B|nV&Any_q$2gOwU(0NxjVh$f@s3wL%@855Xslc9fpjc)pKLI?}No z;rgj7Kqw?hn^=MMYM%RClzyJ!K1)ezs=f!U#aMoK>cU}W)mkxFZvZxFQgYC_Ltuj^ zU8vKPdXgf^Ruh|(lVDHAd_wIWE9A`cYL~ulQQNsfKB-Qw_Uob-^^DwYNK{+4mI4W7 z;N6o%(I)#*%Clk*=vKrsw81f{$KpPPRNcc^gWG`YJMdUz#Tujm!<|N>RCTd%lQex3L@6-8@gz=I*=me#_uOJqZgEovyD5`M zS>mRAK1TXB7v6n-otyHOn^Hl_H{6u%Zb}s?7r80VxG5GXmYecNH)Sy?m$)ha<)$nl zCFG{W+?3^{%yd(h=@eT}g)je1H}RWpVzbPaFMpDoSnVe2P1l!yteaRNi7si z!F#i%NK%~}DtM!#a!CH%E`p@>sL?t@jTEjEb?vjO+@?AgKC1Te&TJvqfDBeT!z1cN zGW0c}#%vkeuL&6AJ=XvAg=Wi`fv-lEO zB?GdkbNattV77=aqV(v{v}60fzQk;~XyEIAUC^&%Uo%@S9{Bn-ULTswT&QX0Z8k_t zCfT|01NEfNpy##U&@M@5_)z_q&Y&l@UxwxB4DYL3bOxEzev^|zhHfnhb&1YHPX^@C zOEA@vzo@C?ktw?49Lh^m3nDDhPtYg_&PA z<`W;gITOSM%w9S^-?OfsoLYTmkSo)k$37;~=-I`tPD&jPaODGxb+ zly8D~nRISx1ONzUHvE4R1XMPi6gJ#G^~?xC>?u6`7an@P2PtgE=*xrBDWh>Jzrs%5 z&P(~GTiN=Xw_V)6QoebP=9;nN&;`(^$fx8>vt<~m8oj{jBHD<0Vy-O8d4yv%cykE3 z^9`@T?ms1itV=1xnO$JE6r@X#)lCUElff-lXG$X(z|&p+pQ*3u9J+idCY=MQb#r{G z&Xh_v2-jkZ`Xgd>xwZ^<7xtrEP3@<7YtM)9B?(?!#w7>fXdu8@^Ab?uSH zh%UY1@^qZ(uv>OnzOAC9k*j`5fv)!Z8>0O#@-|k6%fCtUrjAOZgzUcvVT~%g__$cG z2VO1iEcU5v+&~3mjU}Q==yz70;dgErOpKXrYflXRu%vgl-5RjBmf|+AZM*WW*UDL~ zD)ZX-;L?tuGyOS1`mP-FdqL)KPr$igKUz{1KUkP{KPYx-BRxxAgLh^JL6H5YZnKYku5pY&i1f1{wBj`L?vQ08ObJp-74S|s% zWmAyechpu(SE`#UHPdwcGIx*q8?SWZF&5NB{u5Gfx_K~|$g94uGabDLP-aWq*YIHb z+P8%E1)au{GPg6%ttem6BwV>T7sKkIOrQS9xiUktRgeuWIKT7VT{>T?kwSzWLq0x} zZ*uoIx9*bc_s~Z1?(2@B+A~M`AUWja{W6{Q=JZ=Moww=te&^P`@?MZ)zZno8qSBt< z>rBqAy^=>z29>7ENawk8Kt%#nPk6x!)Ru0wwD_u2b#n(vQ47gMIq1Rl&1DrCXo1@$ zW>F8p8k&tML%K?JtS&`Lkf0_q0`k4QrnO{LU(D{`>qiFmS~Bb+gI;a91gCU;Tp0Jp zadUClHs+pp9wq?ZCTY36kMpo@~?_~hhX1RB4Sr-(3K!_X1mNmfBNAA-$d3s6h zcAv`VDNirBPXY>3)kb-=Z5c(i+$~b!ny>Hsg!a*m#qjb6^0+zL z;0mL%MVc8IVmZgZ|0U`U7p{x*y=$fR`@vGFNPL8ojg+TDEukGKc=Cu$RU_>$Wxx7o zZi+a=l~!ka^cxh(e~)^ebj!ZGm0CXD)1@eQDUZXst3urdO)z4@G9ZnTA;l{077r%EA0AFi-9Qd0{%{~R z|LX_+&P6p^a3OW7^V`z=;c0^8V8hxH+=V@$HGE37-BA~)EC@?no`O1VMr*#98>le? zTQN?kj>>|>i&kl?wSC_P>}>i@teDG7w4pL9c6luu0EdAUOW5w_6$-ytq7F^++wTPs zBM5iAn`M@x?%s@H;8V@a6di!?5h$>i=k-2#4+$EDY_zu?y8~t0Nw8C{E-Cg9d@8wK z6$RP)w3^J|@??)J4gA83VhLn~<=bN&+i6YgNZH-tYLFxDvNQ0x6(a=qeDUyQR4SNPYs)3KP zRQfVIW`((SkYsQQy+ur2WsMH=LC<#xw+QfEuC!)V4RWA#QoJ}QM$?-uJ0`2E=VpG= zyp28|yDqn0B$eRr;CjoBcBdM4mB=-}0lsk?-WeVht@K2OtAiRL z*iwRe>;sLF+`jbXc(q@SCqLCWq)@f7U;0{oA5C|Aj#M_2%5r2JQk=Yd-TVb4JyTBs zR_Rt%@1_+=HXgs{K1wm_8uwoMu6`}qoxe`v{wa4LZ$*tf`>|0nm~-|BDl_D0GeY{5 zuTIsU4pS548ePTMA{4rSvF!{Gl^oeBN55%9+S^_%hSQNpMWn4Mw1FB?J+BWEp`(0? z>SgxNFt-uq)`GP(#RJQ-LGWTSzF{rkzsfydo#CFZob2yPW+4YV!bP^uC_&!y)p`46 z5I3tRMW>inQvO)VpPnjzm`kX-rFW!DryaLm#Oj|S zL3h>)0&+E>?d)$-MN^0P8X3o8jZD@mgX$k3&wDJp@P1f&vH?w!Nhg54@Y7T-Ma#nG zn9aemkCIk%3(yi4d1$&mu}fzS&6W{0EqjdRdpUvzYJ1`=3pYg+dz$R@faQin1DlZQQd)*zpirn`H^1G zUv$40>MAy?NKANeVI(c8qDAW`A>~^WuM_zU(SB_1NE!%YdY*FN4tdpQC`H+G3--1SHtt(* ztlK@r_+fm)Hg0mbY1|g^#%=|w`=5ckp?xD=9)pd;xF~r-$s&f5`8Hi$`?I$Lh7?IUBcB@uVl(a_+yMdwcG2 zM1i!o9J{08&1|;OhV_{Rz|4F!)5<>(Y!SQG#Wg*Jv_&&$MCz=fY=z>5i}S}NBEV+< z^VqYB{LTetZ(G(!qa(g}8mKXNqHqH8sSLYM`rDQf7^_AC-lt41GMy4d*xoX;z8bFVU&MhE3$ku*eOk|icBIgKK;9HbPeW#NN zpIQAf^@DjELjOhe$2X)nyjOrsaYE1{-ebjMkI^XF@bpXfsJF`)DCAXGY^z zO}?gjS3Acobh{oJ{H>}XxM!%mwg^G*I)#WvuR4vWu&)fHBa;! zJyuD!**>=Fl{1-@QqkA-z+cEH zakSU2iv&q%AOlIf57$+sMRA(P2?_&{YvEeFWnPX-_z|6stm~^G@w3AVHYdP)XPV~~hknNiZT~SwgMtC{oTgm7Q;xScfxL(Y27SFO3N6L8+wm`oqYH>vBDw;>2k-TLD;WMYcBg5Ojw*NuL3X6gwWD)QNZ2 zq0UikYK)s2-S5kOp{AfJ$0)8%Y)tP<+AmA?lp(44K_9_v8IqcmV&(~4RzqwphW`~> zJC@MFL$Irsy{cGULtU)Fdp97?#O+F-nZX0qGR5d|K&n(}-qlg`&(gkka7RdJIE*6g z-I_wOKW*Bv+@!Aah>GZB&3K@6{q}vY5ok)hScjYsv?Ld}UG)`-?xg~^ z4C*wob?X=X@dh-2)=3rWP@^C_`#0Hrh*C~HAQQC{krx37)mDAw$gy?}d!1ScBgJ<9 zMyq6n6Byb>rgn$DXCP&eEUbJSo(s!2GB`HQnU#?^&$690(j74ZQ`c7M#Z(MAd;f?G zPo1wUJQB}JFd3p>4!vp*a}JJ5|}d~FlQb?V7m73LbA;~E_Q2HGK%@nnKY}mrI$u%v80|bMGx~+Vd1r<$z#iO>mi&|33wKDMC6~+d z5&hWpSGON`@m4C=gE5kR(2Fx|y!1mx4yN@*;T)l;VuKSkx-V=jwDehN>9=X=4I?An zdcG6mBy(h%&IC?NmAHPoE)kaui1^s*F99al6Y`C9Q*!*3%jBeSWxrLL$nnR{*62&f zz4UrL5E!st`^dd3!~(ECJ=2Ghj>$Lzi2MlckfW;U`q~FT&&ufBEpUER7&=7HB@2J^ z7ioKB$oRo7f`yBAx5fv0?7DnRt1d|L!2CUn$ij(Is(l7tRum4uBkj60fDL7|qI& zoYnol4i5eH`os_yS~RgakoI-Y`*N;M9X?Vd9AUPEynGqO0q9CjHqeygQZyyLzxE1E z8MH^9uCA^W7z&>P8F__}kt;KNU#{FXH7=u5rD;jmECL~exc*{ua{|zwZNV5(^%A@K zd|e6U=&Frz?%8=D&t>)m5XhoD29^7<8susrKrqK7mZVaj=L=32?{kDt{P`LN%ZfG2 zCZEzf48&Y$`Tk_!ZMP`4Nm@Bdl3n+ zzuzu&jmCw^!bKqAy@Bqm$QbEc;+S^s0k~x0MZ946h{mZK-}nmOFk*}fq0?U1&YiRn zLal%?=aRN-$)f4mAOBI7j?wsA671@?Q&r_qqNM(SRIO}-Rt9e^=f``%wGeZr^SuRr zyNy_O^acw1YW?;nLj3Sn-aIPWoz-tYT}2UoJa|F93W-ZRJY8eB61U2s)ak+AqAA;C z;r;Hr<1ObW(s~;i@w`obXZALA!;jJ;H4XDfmNt7R+q>T zl#>xMAP7VCc&X&xm$huH4I2oz1~47JNb+mU*)Cj7Z(ZydDJ^BA;qs>XtKO7Z_BkjF z*#!LHG$bIb`N{9nLux|6W;C+w;ROAmq@HWVV3cdzb$VRIoD6wj@H`1)^_)^enYr=0n0Kw9rn-svWZ00o*2C$fF1Mqc7rB=A3rTZ*o-TyHQNGZ8D@K6@~P7D8?02<;4S}O^iGgbF^6UJ>B}ic_p3;j z;oUMFIPrzb_U_{so3@9g!c=`}TQ>GYOrDvVe!d2ud#;WyBZR=9WF6y0Y2yUfS7->< zv#v%=*6D+d$3gR0;>+k!$|QFmLfxznM~W;69}hLiEhXLbIx{bP%4hmSL6?1u3?0a$8kdhWa9bW3dfA|A+1h z%ypK>+cJog9XE{&;`l$hAG76UgP)inknk5-^bZH^AQbNvm}+fr8&sAk6a^)GRwOZF zc%-aZ=G9DgP{68p2)VetlqI=Xhu-nqgY}AxXjB>=k?^*8%dF&PhNUw6*}-_Tw|>SM zk?iE0ti%a&u;4I3tlhE}^faDH!~o^lAQvVn`qbY-y{W$(E(*ONeNaD9sL z3WH=~E75O})0|3WH;=Mf$j-kU5oAUNyJ5gM4-m#ml}nth_Gm|D0Bff#v$Q?zm!Grb zXOfBW-Pft14Tn6IecwWwCYG+t{^>d=A2%FP>OaBZWce?$B#0oJy;^RNKI_~(-^jCk zG&A+ld*nxLyyuTx`wZY$$)GK^CUyxJ0=hNjJDwOvd%3+%9e0Xs82*y$BvTa%N4X?m z7=d{~vdwIf0mC#xd#RgGm=(wb{`a<#8zvfcw%ep@`r(l zGJ69_J9=L>y*pzI)|d_dnues!xP2`6y*%FDWPy66+E|mHyV&2wfgu5h8lh|%jQC93 z-}KPT%0~UxXhLr333%K6SaAH4Nv`q)U?Xfnvm{_|aAu+u_|`bHRb|_RU4FwX{nXxK zz3`S<`iAiorC`%$_Wpy=mzYeJ&lQzHilYn;*-gA~N zyVi7;qfB;5((l_DwlF3%OXCFW@U34un6=sTki#=8T^{jf1PDC`Wb+K2O}lCKN3bH*!=() zF`n9xo^?jKbf52_Y5cIwB)kK2Efa0raiEcIZAA;`{=DGc^Ea zmUp)HoB$*{(zx6X(~i%KkuM+xoK67(aqDodaco=zP_#RXwUGVLfblSW$-@TZCO-r9 z^qK$3U|e|0(FQ}S<)(TPe(XQ$#kg5c){w(`aC52$Pc!UTKKyeM?j-&HEv_qMXH_PM z({JlRhUP0<`#k2`Xe~4=8jhOkdQQX_-Sc^}Re3=~HFgKT6+(HQ#Cvn?Nfg22vx$W? zC(bLpjNAK+$L_lQ_NloZVDDYNow+dtufzKb)W^+JgxN7YHh>S0TY2-rVe@(-Db!^DSiLUzY$&C6IVh^WA zee+v=qb`VgCUazBynd_rt+hsztrRgydXtA z&51$=YASAw-6z<%`i8*t95b6r!5q9#y+zNe*|J|JY5|R8C!}e*U4G{wobuK)j3Fn> znjPbrk<$a{+Y)($_85&L$RAy?W~mYVCv=Y;SOamx4wA8AO;0Zg3^OAo<7(Qkrl#34 zW)as#PpE0kL|YfjKC}$jr>CXz28~(U8rj4NB@!?Kc$|J4W)Y1ofGaN}Ifn9P+S7i3 znb-J$?;l3fznI6FNDODM-5f7Mcz(fECcQYqX7Kz$ogl#2|DKBSw=elFkIjrxh*5O9s% zr5{qoTCF|BetQ@ExxYdOPIC*KL4n#PQr8vm?)2jksOeo&524l+PCYvGN`KXBXB>jw zM@xX-f(QGcH-C2@^nx=`?<$;f*XPO7P>JPY1g5RRXnLDX7P_iN(2A2)?~RwDmiT+5 zU5=Tw8*eWv&-DnHe4iA(V(;Nbuh=`~MuMCFU#(bK1E;3efDx^vjIUY;J>z(pg8H7Z z-1qK+lDy9TJlVUOrd#%U7u!|Y+dyg4q>=Z5ZCV7``L^5ZjXAC5I|LgFvNOSU^@8oV z`CGl9yMKr5zBN%JI}dgJN67ALNC*2Ny9ND`-QJ$h1TF>H$yrXX(OyzC`f!IXOn-BHjxR3p@>NSGk&PgG->W3tDd>?juYRVz__`w9= zW6w|f;Nt@v)BEkn8d;EHOCYGNRwAE#y&r1(AKNAqdXgZJrGawGAvaw7^(;dnSSxzX8m_PR+$H$Tw*{`$Ljjx)x!XxUJQL7(rurVxj2}D$FfVxM z5RzF4lEKCMUX5h_E~}B1Yc!4;fMs4Xn)Wk#hp^0zU>TjcXE*7GkW8GX0M7mTVHs9+ z07CrVqnR{vNue4ENX4M)WZI5~WL&%gKI?~L zQib*uYZUW$KRAX6D1x+ps&P#9J%VBuf?@)KVx*D)x-Xh~i+ly}Xyj6V+9BYXUkvd4 z_5MEKdE`|Wcqn-q%ksrL!7PLb*Q*b-Kh0=bE^I|vr~ZPchmj4I@C%Ajq!-7!Kd)Of`?0FfctAJn6c5b4YX63-Dx3K6nfS^$FF2RQy=vJISXozlBAMQH@p<1Q=Xi-W<7>B!nfom7 z!K$fy@yug1;_Mp3z#;q+zIct^cHc_(a0iFf`yR5s-Qn5vQy(}hO_@Q5yZ8za+a7sY zI(W9m3B&p(1A-zk@vu%^bJ)oLe!{?!PaZEoMzEK-zw`xD2Qt-^ui4w(`kr_7rugnm zCu?|S+<$7^bgVKQFH`-pq4oRA!nx+^UJOg^*5T7rPPo6e1!X{AMMh54njb}WA2O$3C28{CA>kjL2-QlQSbVC8pZwa#5=v~ zJpgTFsAdA1kH!;clLC`BGTOP_gPz{G!u+@?sAcKqquq%jdEK3ioGpCp0?)E3Eo_S( z^HJnEyH>AneQ!|7d3p7-nzN1xMiUv456q$4&E^p(;}Kk{=hAV)-4O@bJ(qBslIb7L zLnKTdtQ7l`-qs}Q>yaD`81i6K&J(l!tfu6u08nQFq?U8q&pxK=bpk-(!l6i(AfQBH zsl!4jSUU2Qa9Pt17!9To+?0$r?eN>%{YH?v>Rh??E4X+~@#X)t?sv6jym5G*&!YDH zyjuD)u!9&QxpI{6jTNXh0XE3Gx2T_E1|us(R6G83#8l)ESy}r4V^`_VD^1JC#G)2` zwK+tEb;kR z-dLGZf36Zvt#z2dZ0@4Q-U_~?f4i)6h45Xv-SWmkmF?Zv!`y58O24l)!9{pA-(zF< z`7r>za+r30(4lGpGciqC)L7C?ahCmLNj=x5_{v-nB%lm5gB)x>XRuyRlcA|%&2N^Q z3XcD6a#My47DN<+a118Vi&noNXi{QyX_p2!dqeBKaj?RWSFqvwfr)`W=0Kav;jP!; zB#l9~k|)0SBY-N+qhF|b?{!Eo8()<6v8c+_IQEzj>#f4n4&%*+Tk^CX(y7Md2s2D) zRy`jqT}b3Nww<5v0=oA4tME#nO@O!r4u`fUZZaO9Us6lpw-=V;eVLF0*~<=PD=;40 z6ts2xIODOAIfpndfYRleU@IGpKLMdFanQo}zO*{y^z2i|XLy#5l)FjX-8A$Q%Q&rr zpHq>nKlfb2ZV#(pr0lYmZ!0M<*HzVv6j~Q2eD|DZg!P7CzO~MrxZZTmkJrH=X&h=Dr$tSN?79lK6 zVi+V;Vu<#sgg2v2rnpURZGA8EL>RoDi92(*@i?)a1kph($lb=BR4{Ra*|58w36T^p zOh)~?Ef@O!L{MPT$-B?PzueZ=?oqkx>7?!!;FCj~cN%K1k9HTpC(SgY-8uFqe{MXw zJ5!$JMNaE(FDY`HWo}ow9nm*4yq&FYX8Chl{kdSOcx!hNax-`Av|c*8ta=&Pt@id- zHHtxEbX(smGAG8VuzYXsHa(hp>=+m6TL;F=<4oUXTz7Yb2O-Aak{E?^sd|QUn5%=w zKGh(AB;T;jxUO3?(Y%)K<$^Be_;_&Es0kHH$LajCF5%mZF;jLp|Z8 z4xTe^lsB&<`P=8YsDtjpcXy;r|^i8q^g%33;jEw$_K+K>m51jC*$1wj?n<)Xks z-|H9@nVaIZaRg?1nCk+$$fzgA*(P&NJdf!Bh&pmxK^G~I1?Cv0_lg)A8RU%KE_?m4 zozd>h=!qC#|Is&#b31xpmVBAyqo!y# zQ+nQjT19wJG|=BN7&rUducahB@Ww2=v1AQ>u0~pGPp!tsGOaEa@huB(l8f|>MxpFP zT5KOQ9v>BQz=px-0RoqFV1gSmX1yi;iZ(+Ph*ww<%PtK0-U=TR@~In7f@TTY{}82< zb2xV4S2TP=(8)TXe!2MT?~05R6~Bc^tMoMyvZ5e-OVG=B(+2TDO?Jx&9IP(=FvJv0 zN;F6&sF=ij+M&^;+lKO2REX+z-6*&)IU+wDTz^~E6i;}9_GT?O6;lDR8TNMZwK_Ka zK@I{M=sz!8rEmwJUOeNayM2M=Tmia{uS6iZ!^c!BaV%k2N4(mn!~vfNA?}cL5bf}jJ`$`WA zqx(h~jo;xrRdpBEmqk5dG7MFV+!`ODIR}y)*+WyR}$MaVBWGMny6zD@0@pHm zkTnv(4$qgJbDgZyo2%oEo%5W@t}Hub1Qb4z)a1?X9#1}>V+~V{t2w9T+Q>jV+XaDp z)D75h$X;K^^$AI_?CK7+kSCJLt(*{JFe=_o za05`kC`8rGov!q+jqihK;L#U%gfk@OBIklVp;9HW4Dr$}eR$SiaZNm82^bLAPf9pD zRYD^rutkT*iiA+ViPUR??S>HZEvyYAm43OKeo4^VYY`uMkiYpP+{FSFUFeo@PoT@& zx43=1MPKRW_qY){($x$ZcY+Jxaq47uU7~696o5mn4$wvZ==r1SBKNZ-F2h2Y0Pvbw z@*b?nfGB5dfq3~?VloT>yetiP>qFjcp~{TNo0`@S`L@{#f91xU_k@03#CQm?#$b(d ztQ_@3GZQ&8h8?ubS*$2=nG7XvT*#1B{z_slL>}`&cs?fA^1i6vX{W0wml;hD@PSN< zhQx}I84-?m`(!f6**3Ts8sYA_da?;}(+E|Cv#ugUWufXptiAcUk9HSFqRN&=YPIE5J zS_{szu|r(QsbDc$KTFv7``JDe!`6Z3hO2FVOi-f?^{oPoKz5j-)6`8urn-a#%T8Fb z4*r!i8ntr;b_t_V7=nx!PCDlHbIk5n%;^_BMmYZ0xZTG9V{*YbV26yM(4WZx}T^`KT+3~*X5 zPU_&xNYgf1zAu*HWixZHgkDC|$KGs}ZesYNyEClP?PNG=sE_s1-5T166_E5xU3ot+ z)QNoO-d4`n(wReNz9qom@?zJ|t+V*QQCwL=*WprV3!IOMUxszUOg$m%oqr>*Y_<2a|57Ke1zgM7KU6$E?bQc@Y9uu6RQStZeTKSh+cI zmb&T#!TIPJ9{xHNr*PyEFK|1++FS;@XL}p1IzVZHpMVxEZLG%TBvrZ8dyM`bBlkeM z-o%;e{r7dHMMspa{qHA^tkbmL;0&v)br!rUN+%amEnWzEX*)={`eaxG$--|m0exKw z6f57LXhTe=x2jnktgng{=W#|OpPI&F+Eb*sN=}D>x)q;AZ^_<)F9Uo_xW-U8Ik*l@ z*x2PY_?1|QUx`{Mn#IsZpX?C&Nc)yxs@O2nA!Dj@)Ku_0{Vf0~vJmW-Xs+L`%~QX@ z*ORq~_(y~xOZL3XcnRYQZij;tG+(Q@il4aMRnL^5cUi9Yh?#hgSbv1~i0|N@F6BL< zN&tFU%6kMJ*fuGr59Ndpb0ATJDF#wt-6l1P_OK01_uGLbru`fzBlKu!gys~uY=Yp# zok$K#CW#HbM(})$NHsnNhU{1Rk=W68@Zb57_%5p(KN2-a3P1;psLhC`d`ZaIU+fb3 zG64%wO(JzSXF2gDT!>Tyv7uWNk?M+`& zrwG@45w>38S)gXYiS4c61GcR}YCH|LDrXptqI!Ypfinv)A05IV0GGU=re?`@X*3n` zmYAXM|9|Ygd0dmn*Ef72L{UhuSdCkyMiGlk)K;`8QbEBcEm+&SB$X=2A}9hv;?lZ+ zK$WJp_E)=a)^1w6ub{26D&huGTTrWrOA}*VTa~)-e$UKYAyE6=_j^Cj=lSFPyy0_k zW;t`_%yP|~Idf(%5XJeT9PF@Odx~d>mL@d{&x+O$TcNRzqNbMfwg4UX_A^^W`{T%y zPX?9%Nc$13Q(>&42Ej~+S?U-#b9&3(7J7!|t7|+am^JaKX4q zH^<;*ahJXOt?Uf7W=E`kPE8eC~RSlbx>Y~A34;r=zwfsxOS z_X@Y&8UE}O?XmNGYiv7t)sH|68}pmI5=UyJ@G*6AE}3P@-#d*V=kbxHXnDeZ=iQt= z40#?_@$CWg+x7GMyVTKQpmm5P$GJlN<*_+jyvJW3rk1LGFd&%F^HPhqU zhZo%Gz`X~}?)v2jj5AVaDQhexP~I58{-opp45ZtPLZ;;P$n3=`CA^^9RY*t&*!ju5 zcBvy24Ct;H;;QV|k%Uj8=qS(L2@mE#w_d{9me0>BTfHy#<{*FEvJRz1=y05|^#lxr zHOhl{3(=!!+|kj?6V|L?Q!!wY#0C-Q8U*jF7L7`q`_T&?rPd%X);k=?v?ZnJjkGJ40`TW2A*9QV;}l**6N94ZRLz?O!{an?dG?d!!0$6nM&EDS@LFdJpGR(d02(~%rF*uSUVj!m*kj$ zV?52sIWSq3^Xh0wl&1s~!G{^j;IA5o_$Yt10l-*u9N#cS&S{mP6)=@jtUSicJ0wYV zYTswHoa#3z%^J0rAIqW&m#dq7OTc6e9;o=$yO9#L=63>kfa=W*nh#x)%~g0xsg$S} zzi(K$N&PgBM;ODYq_|Z)j_{AbzZ-P)mvL4be)VP!&!Kz{y64>sx5sFcy0Xl=mI5=N zh+~{a%5pph@gUc9R5`l6sVs^86#YFCXg9J1F{&>aG*yE|urU+aYXUxHtZ4M*fC#?; z7A}I|F1Typrl%3l8H5F7aJKcU8Fa-R5O~1RXnlDer@%fK)Qmiflk}j4#y{-G)5ny7 zRs+Jy@az%vQ84p9JVy~ng(|^=_?AMUg)V{=$Z8!7YR-V9Hk!zzJE2Tj2ZNI2zxDIL z0D8?|j*AdUlGa-91{dlbxKk&>rfNo@)bNK8Az3QgPB+Hy-6a5qNz@6jvP2stzhY-n1O9>wa`YR>j|^FIO}j);~h- zreXRA0p+}K^yZ41^M4=&eftD@FL1O^6VCOR08f+*F(Yk&(ERdP^?XL*u%DIS@vO@p z6~}+xMR`?L)E^Gm&eH@eqBJXUf{@P1P0GXI3FR zKoX4gV9CdoK=9-Gb=Ee%A`2e1pidyrTio>Q;6^CO^ zqmunj6VCORGK4h%Pd$-xJZuh_MDT=J#r!ACenUBjdvOvnbjbqn%E$ zChI^@h2yYxOM7^l0!u4u{?;F*h`-Sp!yvS={$U-8lBh=k2mLV}Y}h}+gy2S(zrL>h zH^L6&*pY<2v^Dlxbjv1OJ7Kv8js|j2|LlMSY^XyXT`1K=q;h)6eZt&xg8b1BVowRy z`h6u*SL_%M70h^ch)TJ4(*5ia-`2fG7i>6aTNgK0<4c2;_JXaqnnTLgm^_xYgT4^c zVXIwR+(N~6ZGXWI$7<@4_<$#*GurUTCNIfK_RnG1N)v1>$rD(lTG&CV$+(P!&$XCx zaM$J96TVWR)E^==ECS@nx*|F}=2@B>B3U2A9^oQ2ECp!EF$9yRGrmxQ2@RgF32cxc!uX5*Mx7AFydgRGq=h+Jbwo=ud!8u z5qV2PCs@#84-mo?V<$Yn1d-S;gkFzOJi_zKz|l4`7_`;MTh4UJ-$4l5rC1R3-)ZUB zcB6HtRnDoRy+~(=aGzhC?R;1+05NCr57}Y4D;)nc5Ea8hDa_g>+~=6Hlf1=w z2eIN*Q%rbH1MwEl?qT#G{;$E`4&U))4o|BVn6lF+cXybxea>zwC?(4dP2CF-$TI3m zS(xQs^vrDy=$ZHJP)(&^^!Kpb6WbB|F@jm;iY8+9>g>cLpGBl?H`)*d7j1Wxm5nvs z32HjlX!4d5KJotz|dEKi7XP>JWl&SOfkU?D%J@iz*1K zw&(fb)q?b_v!7eWv~3+wN9j1J3n~#%Y`}nnmQRYFUitnTZH!*RF(g~ll@f1DS6EFg zk(rH>{RC#Vqa? z^wd{&w!`g>i1W$n0*}VhiQT+zpT;n5vY@UM@0+DA(xF)Pu`K31RZj4T;{3x@Rl{*s znkq`%vBXaQO*5=X-UV$@0}{ytGb*8=dvv={8bqGAUBd1StFof(KGgf0@D(J_S}XOh_`-`Tj^O4xgE;0 zS#(<=l!P=OV~fRrL-Of322GU@wIPknmAD1QK5pqP945B};WQ=G7|0dday(Dle!wTw zZByqE`f!$eApS!bwUZ&Gvp3Y3-}azU6Q-A}B=!&Qapqs zhtmh_2Ejzu!LWr& zutxPTyP^$;Lp-jOdRRJbf!Tp%-^MBkjmE!uh&_*JTR4m{V3Jj1r!6DC4$h^W526)m z>wzsAoOQ(I5WB*!NU*)Av0#1<^Nx<6?1h_iJZoS|80BAMj4yl0)>VUhH#Mjxx_BV7R8*0{O02>X>ZyntW;{$clAzz$nMW3b@F&LVrXzZub z*aVGBF*ZC^zX1V5<0uL)P<>1qGhkxmQf)@ePE`&E%K1OG~&-{aX3EYTjM5QrWk ziWw-1S&+(#=?zAQ+bUT(mm_=o0!o0uKyaT({&4>{1sABcL*KSj^&$TA zvb_rzFWV;JQrM-ky@xPN0nll6^?-LabO!cl&N08QS10xu>zlRTv8LKeQVb3J(B19F z7}~7;kiyY6_#SEkj4o*+z)lAcNTGuA!FC59EyCVAdGPf^ntpW6+J%f9_SsPp>NirSQ9v zp{ynKWQVgiaJj5kl2x4(5}!36nsdAYhd4SuG0JV?8yy1^}Vlz>sm{&O;NRMC~fTF5_}`O+^E=k*_dl@ z7e#tIY#ex7FFM;Zi2HPkX|Noz%U0vOlY)$LL^bX$^|nl>q;$$`;~m!1Ftyxe?T<>r zDhXONrxzkMm&4_B=y%4%S8DMAl=u?Zl!ZZOFQ@Hli3!i@z+$?FS=v(?=Sk=q@d~;9 z+{UZHHMr>4JF_3Id9!p)TKlZW7_ZLwngGnfn=27!JqPW#5z?@=59u{!9#7vnM!fYR z)GuW)#;a>CTMMLimirAh4?_qj%)mz?@#&+8&feB2II(LP(OF{+g|i1adqA0=TcR^I z@3QVS;_3vEiRDctJ-%&Rf*bC3SUea z5E%Iudf+F20mW4sw09ZBs72BrU6#{3g02Q_rAd-4l~~6AT4IoYEVc$x(yU`t>Ygq1 zp7lV{?<=)X0uNq(j3?d~aNkjQGasjtjj(HGzZLR8%=q&3T@X4TE#S3c^21{4OZbPy zbBUqkOpwvP7%N_=42*?%WAVGN!WdG#@D7)};7G#7KRJKz#MG132?F5ATic*Q4uX9@ z334m5kp%X?esw?jNKbXLdP7cec+>2Ru-?FYs<*WlrD}k?NC#y59r#8P1QJIhMmJ&D zyhgodtPi9w?1w6BT!Tmprh{7qoxVtn`yYKt*umlz_sIW=y|K4IMGkagmtjckz(VE7fevRE#YxzB2vZI` z4QAmF_?}TRt9CGG3izB;RvqQx(14nO7ZdOfk5`>;6>bvYG5^4SUf}a|X3#MO%yp%m z*&wfc4W*?527o`+t2~O7t^s%Pq{oruB>d$LG8zTn&-Kq{4$~h7MfCz17Q-lhw99}C z&a>eKxwjMtssmbDl%Y%xgpS(8`it4GC(9wG8WCrqMuv*m1bNj&Dq^P`SmD$WOY455 zdNpIc5d(d047!^}RmZ|&KuwW5**tpN{&@i`|Ihp94jco?`TGRgJad%ND_5d)=z$~0 zZ$%IEwX%LY5ga+mR()h1g^GR|i%{M#7s3XJ`en6yzq~p6-}|M73*e$(s$Kn3eF^>Y zSx^z3a%2MXbMKUXn{i7VDhdj4v)`+TMEPTG-zhJ)bV|a;Lzw9Bys`9sS!%QDUItD2 zo(#sQj6B?lG-%WqeMcUzdbCxzNre9szlm{ZQt@-JnT2P z^*mnbf-%@dh^a#t1Q4Ar#_9A1A?&7@&MD)8qX?G_1Xi^4LcZ6ESvDCqbs0MM%d|3R zO&(rIgP}ZdaiNjDGBhAY$OFSRM#zE1?A2P2l0=F9eZ&}EGuqA>O8y9nww(+2w*!S+ zchiX%LPa`!C$1TolUEx{&Ic)1zTl*iKUNmMhuf}3`P&Eo73JR$9pYFBz2-jqWk}_Y z-VipULyj-R_YU?u&yF}8vF33deRULb;T5^ymWujUv%LCa47RAAktRir7XNj1En3O?}^WlYjW-pI6zE&pc03aS(_pt3?W)O zLX2DC!%q_yoqy3f+6a4HA1IG`d4a?oU~fr#v_Xl}3;)qft_pdMRS1NMHNM@9`Ayc* zWDjr~3SjH zr(bbUo#otW2ia0y(?DE^iFEixrD~KADce;^wAEOQe>1W9<*J``{nsNs?hlIcFK+23 zbTbgt)+j}8Q^G=gSH%355-DdJN=^h3g3lr614?M0Yzh%v;HDv;>cT|O9bA%oZPbb$ zg$ZyEDtWfjPz&4NL(o|pYMi)w$mmmND0qu;04{k&8uRO|u%fQAKhcSgjjPdNE=7Xt zaJ&tUr{K%IRk^GqtEn_78qi;@6VZ*W;nWNKslvKaO~0`NWAFFmdW~G4l4~ZpHV_IM zp3}+u5=B&e4_5&Z@Q#qDs|UbKSmaUlgeNId9##TdAY3C&iUx!znYDrZ(kUP7DO-AcLv={@{ogT9>Qd#`LQxK zvztWSXkBIXT;{?+M~!1ErPEDVS}6U?j=oil*9lbtQz0muk<-W!>&Ps=Y`%bXI^8i7+TSR9>@Mcm1-7q_Ix^m!Ng+uCS zb%p@2e$5S^_cRQhRiKVhl(u9cyqNdNftbb3ml4x|YJm(C1K~oW-cU}}GZUiF&vGCH z0rSs@JA@}Oo)L@Z_y zv+89Eq|S|OP#DNH6d;?aKrEH;({$4&-b~^ca4?%ub|7uCQ`giHnZ4f-8I5{A!El+) zTzk=1t08kzFK0+5mX}6-t@NKrplLd&yaL*8AcM*%r8zB@zOR=7>rhyQ@-KO78ax7blSjuErwNQa&G9omCSNu1$r>;u492R9b07wjPjOCe z?}9OTCEXU4WW@3XAyiLtZXd!&Ay8=T;|PHpClac#5(`4#&>DDo{0dQ?B>6Ntm`430 z+}N(CBru_fp`KQi#LPoTBw%&yw~_F{235FzGdzZx;~4u!Mh(Wry-o7+K;(l4VfGb} zLWxKWH4yqm4Bq*`ay)zCCb^&i&vE$48ig{&CuthMIi1=Ab-yQnW6cXzH2S{G-8rGZ z4!HDE;K7YAG65sVn3x16v4L8R(Z5on6vL$M z#V}2(#={h5(m&;jlQZzXD$iHPdvL#&u+Ym;9Wj-z!J^J4mQKNcQTf%GzJR4aJgZqPxc znUF8NcqT~0CZd7jndpElF|6>5WFTSk`!?0>)bK0|gX0EHn=R`JyMszt45(g#57rUtyAjRkz<5F186FsHs7nwD3y#lJ z8E}YLa~+bZn(Ha%_$Jk9#j#g$e5*L#R2(b0W3y@jqlZ*FgbBq}MNVE;83PVkHjt>R^ANzZ+OEtT=_|XFLZHuYZi?*Yr~j z5O$NjiGH$RMSqXtxI=OLRmV%BKf)XrH=U`dHI+M`SWA?WfkinnBJ-3a;}yq1#i8MN zCtw+J5OyZ|)x=?K%mFX}tCASloz(xNJ&X)sN>Umg308A<|YIQp8E+m&J z{mDLfB;-UDCOEF|vFF||nwqPONKJm3#y=W%Q9GAl$fxZ>wfO5sq+Q);oOJ@8at{8w#4h`cHusU0{TD7Cf^0}Uvycs8Vuk)L@3 zIOx#oXW_#rU4zk?Mr5*o!&2X@egomKLLP@E^e-uCf>>|XK94Z*0^#is^yB&vGrh2? zLr@n0im}P$w*`Krf#0Os$K#H}PY(^D^b(5nv`}CMa%DM9Bum2(?hm~2QEU88A0?nY z#s@*KQkq=7%Gm$X<-JLCqW1_a|4i>=u-p5*v=ddyIpmvFms4^dcF0f`lvskXBc-A7 zsMN6o0la;v9bj>(%0mh{?{h*7QLSK}7s=zJdWy%!JDsLoK58k0kj#E~Zv3p+u9B$oarO+Y2?M9*dMzgZ%+n z5#>JFAP@TIi{1UA_%8Yt*Gsjpf_OVP{9b`WRnaizKt&TeOIQ3?Ek%&Lir!Dhy{MM8 zWLxIyhubOgnI=TiIFbTi`H2NSHJ%mMhwOq8R*`Bsf?#i@$qTx@Y8-RtbrR62_Oul6>V>5Y`F7HAO z4~ElfDw;&YuU*=SN_7h~vyQiIZ$gD}8QOaxt2t)BC)P+8R!}Up-=!^RiVEykIv>aQ zje%5MOdMV}sWt-sqkb>4_A8=9Ybnv)t=q4n>3p$!d$aU-^`X{h(gpSk|A#ifsbmAZ z7sev3ZGd~ycFttd8h4_(>#dFGap9Pt|6f}C;>(cS;x|U+0TM2e5vB`NW6b1tGX5{6 ztsCtxC_Y3(3}g7WE6QJ`LRDc3yM=H}0zUxAFD$?i78RoUgn2CR;7lUA97H;}BH)h> z!S~^IBdCQGUYZ6xB-QzSMVZKlPvCK4DRGM12S@vtM*BnLtPC=i>BhbxWttYeD#DJP^rd)?SK|hm>A2%7dzjfdf(g+FM1K z)k>;@j5%j$b!W_R5Qz4yF$yi?nmw#C0s~G06Lj|CxrFC$3@bNboV*7Q)=4n!m18KJ zMm>l-F~0-C{?$bOgMbJlZL{f5;J{${u)3Vn!w4J$lZzOFzvB4?I2h)JY4Z@Dg$1Ii zwsn6)oGKY{iw21C46B4Bd77#}!W=Ng5z~Qdd_aDsj^7b3#uG*4g)%nmH|)6L8Gg92 zWxT4tcB~;OK=MiomAovMe#3?qo-p(@5@O%|Cw;`Q@_bN8-zBE8Q7Uh_h-q6L2Ctm^ z5JwlL?1!~;5sH=zCkn=vE-Us9L=iuYU>zRnhEAuo!8{>5orC8YrR>`~< zwWa-t(Q>Nap)@#$a*l{8R`UfQjST;3%D%pywSiw9QlTx>>ltLTFq^H>77gf8ej8c1 zNu9yt5yo(^-Zl9x<#B}XGGz}0fAF_9VV`iEWkM$GWU{UaxWuW^-Ucmt+L*8_^C2*` ztAC)RF{-r;lGv_6-rRnj=daPPW7ISkkncrMgIYjC(h5EFE}cPG0JR68-o$fO;z)ca zH{sBlopI!5*UdVV!VlH9H|IwyF~|+k*O3wmvI4{(VTir~vCI%X0DJJR_lw)3cLO%2 z78#7#s}7^rwz5a>!DIgd0sE&E+u9!8@tqI1N3SLa+529FgNY#j4SV$Kz*X$g-z7Kf z(O(6W^T;To#UA~A^cu29-%2>JNACir$R2$wpq%$Ok5%tw6b}0xB=}Ezbe<;QV@lJ? z9{n%EhdufqfatKVIFXsVJ-X^w#0z`$(L@FI=pKN~@|^029QtEK<+`v(zr;MP?9q|v zErts_^zxFY`B{oBkR6f8w-gJcz2#(wp3E|Ug?Eb`x~si_>F3QT$EY*}PnhapkG>n> z0TN56(Gx!qBkEh*qXU^l9sL zboft)u^{^B$U+TPCfcWwPqcrvoc9p+ULYpSfM3pALmr!Y06bCtI8mmGf{RS-CPS>C z_L1|>kW3$<9n3s?v0(xa;mdj1*dj*aCe$SoBf)vNaQQC|mm$MOc#t6$=!F#gLOX`7 z-R%nAM8VI^12)!rd;*}uOiawdVWtDf1EH>Q{%htRHu4Sh4t(YoTwzS2vwIMS?m!&I zb{PNzPU!D|7~`X1bSL)5FcpNph=fSOH*RsAAsgxUFshgzi304IfP-bxGgyCNE(x7P zd9B>Y@*+L1=J=%vbbbjg$EESIxj#l<%?*rmPdeH zXfKbHby)vtLaF})?-s&$!ha1A3L1?aRiZkFj!33c!*RH)5pKlQA|0}%(weRVLNAW1 z(vTp5G{J%9c@b_Xzcr!n zL4(h_YZ$O$*MlpWsm|xphQg|@Y?dDuno7Qvr`eQy`gbfn{B)X`AQN63?4kz7KOEiI_9s@4plwKaxJ z;M?(3(n=d)vS}~5C|pwlf#=X)XKS_+gT2zXnzWjQJx%{9Xl$RqLLcbFGkH z@v0hkmY_Lk82AEsEA)IBXp{|=#@gesz-0WoCw5Gy?Owi~rdm&Sao`9=Oe=XH%H}s3 z(NR7)0P8r94cIp0E#eElQsVdjGoIuLI}p(P+6D%>JYj*GhL#q2Vm8Xlnq1QW?0Kzd*&kU_`?qcnlAYrYl9%^Wibpo{1W)od=h^`XIV1M$c~Wh{K(+*we$< z7lV)$LorIuU@08Y{=4OT+D}H%WLFSfz@vH(xv`-aHLF6DoJab9crFkddHr}I8$5ip z&0)ctfrCoLl|7E{a33i39F(1UH;q-A-X$0nOf)K(v9OyGa07`DcNYEz;NkrtO|*ty zYpC>HW7t8wW$^m>@hViG0zW_{g_3wV`1th)3pc61wRuOKxfd^xZCg2n+1~Y0njj?dlFT@^7 zfU?q<%y!f$LzEArpco-Fq3^I{d@OXFM|G`*fm^h#4vjJ5bLv%oO97(&D>0e%gA0~> z#fW>5;`}QuYRoY+;Fk0LLajTNkPeM5c|8Q2%b&6IV;L$3cg z&00+r3Wgl_(!REGKcqtMeNOKz0XDh*r-j}REU;3}zZ-0jpjztq1D%-d57@Lhgy=&? zsG@Az>4fj&w;q7c$P?k>Wz){1ILHP0{am!(W3=+{jb))bW`Kz~4T!{K(3VzOv{2g>nGL;uE<`RTbQJJif3XkOpggy=jf^hMJDj7~| zH!je#vD2{~P0!^mcissD3QX9-c=L0QTX3|f9f)kY!! zncmGamGcjRJ(i(k3T4$IpOMM9P5V7)6TfnV-)=bBbrtI4UscP*cEVzX8eGqf*E>by_`Rta>q_0PW;k1@2GB~04{B~2 zXz(hFf=h70^6{^>#{7dim^iWtt-oD|OkQG{DD`tY+;0i@CBmKKVo1TKmJ9K_gYuUn z>Mi%67khBeZm7_p0^5wlXf^n1;d`6=>d~bx!Fjvf9-`a=D7Pkj@*Ef#99!N$us)Iy zya=HV2o=|{$Ew5swhMx}loc%qmS7e|pC-C;-jC$5skQL%chmb6)>Wb;ecO{66CARica%0)N4wWe9EytL}R{*{U$3US5;F3RW7s0TZAJ;xjsjxgg zN?2>uuOcyKjrEWKuu5($&zS+49?L;T`Fk@U)5CQGYtKD^(0sF73MzI2wKnDumZ|EF zNR8!bF_x~!Xho{FgDP|ER~+9f4r)&pmB$=Sn`oh{zXu-VpS_YYw7a$9>+wD z40l(Yh&jYo(&tbk2)Kr2EzU{@+AEr-sKy{nk=ch*ywg-$Q5JKP*83G@rt4sn%k0Pr zGCP8r@Z5wCGCS7DSSOp0;c2KS!y)eL=1U;F4`n%m=Qk94H~b|PyJId^>^5Cyy(bJ< zp_ieAVlp~vKXeCa%vLpEm?2*!`Br{SzUxdze-)eSkkQvd_(i+zfo|a^RT+>fn%o3* zI^DjF1qO2A90jSt^9%B)1B+i=`Q+HM&?Q6H*g5a;qX604p7)0~L2NRhV*Ydo-oyiIm-R;_z}&gWa?ZM8G)F$@*h{6zBOH$43f0!-f90GE&-cd|g9{xIBfo)rTh zH7(VPV-_7hY%4#;QyL$?PgznD-X4QX&|Aa;AwLcU8B#=*I__dL!ceK&a6)V)KXxa4 zAHP@tK7hA}OU$B!DURgF`&_j4yUDXCS^Wm3Nc-WE^GJR}E%!r0IgjK=R-HQh#}tMC zT077%k0k=w$M!@;EoTI?fl4h>;G(yJ(ZlT(6#NDcX7b}U7SSR#<7k9ZGcx&c2s})F>;eaZNPY~2)7p*dsaU*5ByDr~!ku@*sIG7b`SF$a!2Yrx z$ZNZsJk90DeTcIJVba}8ju6zX7xKWn@EiQdRn9*N{#cHV9Lme}z92up zER_)19wg>4zhX{e^5sz`AhY~2oT?JlU6G^ZlLzAbGMEV5?R`L2B(kV^hr0jmzpZ1S;fK`nCYj@&SQV+)_;N&LtA2-Z&# z!ncHQ1>!B!O1J#Oe%|8T&_~~8s^~{B1Yp(UvTx+y!B(ss9i)a@`7j&Z58+d6<49H~ zV@Ix^I)Di5kU^R?YhM8>?UuP2JK7KgLD$boiX36=cpmQm%GmKR;e#jA+3JtN^MBmf zk)0hP)-t%Jm9(zK$o9_sBp$C_ z3$8&EYFc11W5@3~7V7FY#*Sf*FECKL)_dIEF^bbrr?Qk9RglOB+#zq`6SReDCq}=+ zrMfYx2Qf^O>Jn=Jll~J|9LEO*aBdDb!@^DKGaQfU6A_Nxz}EJTa~U4&9VtiXYPh{) zjU5-O_?KO+3BOt!?!Vio1gF)lcY-z+g=78Xeo~R(wGO6DeYUM-K-skGPlwOrgF!VWQgWI zexQ4I1SeUzt`~dxcD)bHRd6Ba`YxEn@ zSAa+Me4F$(c$gzoahMfH7{@!oqWxKDeNly|bRmy`xsJ$1&K)7<3^H0gPdcz%4}{ob zWR#SQ7AeEbI1D=afeL+%;<$<$WSJaQ92IaNh0Bz1J}CaflyEIWiYax@Z>e95Z(2L_ zQ)CqxOo`mBB9VC%%b~?8a+7|Ll4obdaSa7x>>N`ZJD5XQMM6c6mHbPj9^2C35hagT zt%5sx1lAxe7L3#{$v!Fy=aDDdlQ4WnVFP5c;{t7NVjF_PpBi|e%6NoDza98~UPeFUd*aZ^epom4(++?p+Z#x2da_-_ur zIu(HLr%R#N@NZEiKVRI*x_#0bUkzQgNXLx*ON{wtmY;E!8D9^^&0HQW9AJNSHA>Iy zt#r)ZYIttw%GcO*7E3b{O=q~rkE&3Zp^!dQUbPabu#ilEC+i6~9w$d%IG%#Tf~^`p z96bjgMh$f;pffaSErzIKJaiC56$Wh~;&xyMXDN*c?AErNa^lBj--^SP|$%{l@nyJ4YWgk#)$4fhnEXy z22UOM)Lc1?&M+H7Di?J#6dve1V#U(>c46@1Xi#xDzCa#nDBSw>o^4|$_NLH9cN+?= zA8&PRy{UB};pxL{H4MkB!Vk)Zh#(HZIMo&qNvyV=iFw!5$cK&yo8Q9>@mQE_4>v_NL)o|<0A z_%tk(^0)K_UB6EmJyXC349@%$>ZzanJ|@oz^G+y5(1C^Nf~x~(qY%WP5m<7ro)~Nz z2oZ>eL7D|}D0~fFGh?3yBLFJzHe%wsX5P}7iT9Po{0Ccny)0K-q!e5M-OsKOop$iF@TI{-MhvP{|I~170 z0?{ZGh#Njy&v!HMo;WTb)SeH6k=wDw8eEwlF&i4#;60pdNQSA-lI|_A9wYX`ff&}b zsqo{D4cerl6ZRU_JOsd90y|QSy%*%^hn;~Gz7^phuw!8_1dklauuOiTfVjyKL6?Dv zmst*k@c<3qbVlEdF~@`>W|$z(a7j}C7PMT5Q2)#!A?is#hA@&I^)cLy4Nr|~J#*7B z872p-vUwcI#Hs}5o(VjY6Sl_l0ngEAH}8|#acq5W#%>x0Hd8Td_bM=S!t5YM<;55` zpxskx1NUr;WIQqQau-917;fw6elP`}Tmw zJ`#O~w(oJf#+{?aIz#kcSfErz#^Z2;}mhXFV{3aKE^;)ZY>wjl65m7;7Dr+;FwtSlbZoQ|YEZ zp)gws%i_4e0h>`i)y7&oFxMJ$%BZ4f4ITu3qI?dJ4N8?ZQCDyME`CWxae=0^F>-SVAeu1(z*PC5yObrv%Zf^=)bK{Dcior@y~gETMtOkxib zmh-5tupv;4spD>Rr9~Pz)Nm+*NDuh66wwO~(m%5Z2p=R{kQrH{GZ2$6UMaIa5d}d8 z`uVJ2r*R*4;6X@3TJi()6#Qoi?>FdIG0E$#49{doILr#net)s>K$xS)faxjfNEUw` zrNzb-jYA0tSU4BxWUK0L#y;69eg7H3Sami^dJL{be7^!}GG2I1|(6dlkHEr+SQ987Sj<_DUY?SY=iq1bE=hNxOsL`GI*Rx2K zV>5djYzuS-+mgU2TO3TdQ_!Usghknw8060%H63oOPl>^NxgZw*mSiMF$mu!Rph1oT zIyp&>7uO5N>t71Td&R=BsaiO`Y7ma13vd{0kD`K8dKheRn&w7uNVPuzpWcgrq6)WO zPU#;=|AvP*mr@Asmc&AWjI`F!sKXL>WWCYpUXgC)FTf2PC|LorC_w27P`Uz?t^lPg zKHh(Fx#Xn%uKOGY+^9T-nN_{H zot|nh_gcF}=)?~P+Mjsq2K$uO*X&bYb#H>QecQWKeQS!5oNCbiIrB${!4v4JErmII zDk!*G))o2`(&R24E-m-Ar^DH7prs6Jd@=BXJBH|PSu0VSeqFZPqJehO*V%zXA z`|^LGM58k(&1#dPrAj{B;LbmP$2@G_1=0OS6z4S2n}++s3nF#=jcC(Xx{#gZHR6uYEdUpwl4?KfAk<0#j9ba zD^vD1pr7;b%vQ9JyU9LFr-_p${R79%G9ZEiuxS7o}sLIOANeZAFmX>dPY*wTi&V$;VWSZ%#1g;$jQFH0Aao zC->?tYVT^G`&>lAkZta=Fv&7IcUgpFiN;8j4K!msQ~-as$47@>SmcX4-aT>~#u?W5 z78`9|)e+A|R0fATY-=_m#(wKvPR`YR+~OMB#)%e5R@!Q$iz3SkGm^-vcdH0oB+Leb_N_vh zB*r8D$OC8ea~pJ8&v6W|j0DC1|M&ml8i;rVpAW@PCt&8o+`m%5R|Nb(z;6XC7tmLv z`*RXc*C^l~0fR)mQiZ7^T=83?c)C0R*9!QNfZGJzC*V;5F9;|_^YnKLI6%N)0iy(* zEuclfJOS4V_>O>|2v{iK9s#>f=lR%$UlQfe2sl8%2mv1w`~?X(Tfl~CoX!pbw+Q&9 zfbR(Stbj`eOcHRifTIK)Bw#lI+Y5MMD$l1*z$yX17w{ti|0Cd10h0urCSZhs14Q|Q z1^ip&V-WsBqF%n8%=4Wl+C5dk%iK zD&R^1UlVYO;B$}g9}@7KfbAaTeD@Y`xPTD?#tOJxz_kK?D&P(Qj|g~4K;OqW-F^ZN z7jUeA2?AyaxLm;J1bjunjRF=5SS8?50j~(y?s1;qodOOQ@BslQ378?^Y60I8uu#Aq z0v;0Zf`IL&aQa;Z>@VPb0!|X}2?0|DTrS}A0)8OimjeDM;2r_%1UxO^p90ZTVa!0kZ0vM1$blr8lyZrHj6+^* zU8TU`S35EP80D}ucX83yVY;cE3NUr^z&hSkdQ^cV&NC{BvrPFuM>XJE|OjN zMf*wD+W5Wi=JaVnK))WsucYrU{GvZd!`sA%wee3DeuY1i@GJQz3qLKx=(o5{`uDeT zet4`T<%xLF@1(WDuh4%@_-U<8zqP+=S$&CqE-{jlW#@#e0jJr8qqWUw5!|`6}C_ z&udfOJ#FH%+r(G5iT_#n75-1|X`O#v8~h_}{0(i>xAEKC_|LZSUufh1vyJ~+8~+XA zSL#dZ!}(SGUc#@G$GeT+w~b#T{L1^GYvUg-{7U}}7Jj9_7=)j+*z}8S6Q3dcV!W1C z3x98pE^QQk(&f^xvQ50bO}w{`msd$2DE$6Bxine$dkKGr@au&CHR10g{Dr~~6)F2Q zv`H`Z<@t&6T+#@?Qr}&LU(7R-t_}Wh;aB*ZBK*qu6D#~m{bvY2tOnUHTlkgotQUTz z{Kdi_An@(N-(UDO{W$+he6a8j7V*i#uh3sD{5lc;rSSI?{yO0g6n<}iPJfW_2MhmQ z!fz6OWjsz6e%fQ8U$*co<7eCPa%~&@jl!?cuM~cze>DidQa@6E&L57UuwPsHZO6B^ z<5S!ByX|<;c6@5v|8*jNAx}uNX3dVvN=#6y5B~Us#Q0RejJT}$xKzO={8^R+_?3WJ zvnPvbg&fCdOORGnEj~O;tRzW+leWPT`b6cTq}`W!AkSBgKE8%b#J% z92JE8GZV8cnJMu?(3v&MniiLuGAAuDfnh4KR1jTS;v$h;(j_FOCR!4uPz3bFzZp;R znDmUq%sB8zKK%o@X&oJq`XIe``UeI{V*wE?4Z#yQP?BZ>F2yqd2utA@1X_df=V?(6@a4*F(6Hn~IBum`v)Wmy`mVU7dXSeZF4c#NfT9#xarY9+AQfz8E zB6L}nI7>>rZjLoBGl9j$QYEC#X~A1a?T1n#+)5QLVq$sq^Wq~xTa4I*#H2WDszn!{ zo~9(##iyocSu+{0vDCJ4ng5<%(05OsV&Qd4EVShBqV68;is$VA8x^9Hl4-G`CK6Jz zGE(E>6Xz$US#+ z(PGU^W6cyBX^>(cn=-}7xIjE_S68oS?Y})?>d#8QO)y6)GK0J zDv9@e_eLfD+Q!d#vK2<`{J6BZIf)7XRi(DYyKSXXel7L-kD6<#{Z@EN{kN%ScWmG% zEJ=%-k5?llEya?8k>IJsOkGlXrcUV>N_?CpadC>pt^2!UfsU*5{4cX};r+LmqjLYF z9{&sat=@M_a%N&&g4=5^DdUx{Uq2nlxA^1JXT>dwOA*7OD|~Dyjb0cFr(j&sMI>g$ zXQpJd3=fiSJPjKYQsc6+++uZc79F1o+~dPDGvk(sdKF0wDR|X0X8mdsDLX6ev=iCGzVr77WLF)ytZ@XK;OPsT|ZQi`OP z=1W=lzX~Gl)bjXI`N{f;`U*W%R)VyC?}3NPjguR!f;s{co4$BZa0V%i z{G>0SIFfUfIHF5w2~vL|x};~KFp`f+rlp6%`{JSSk-{G?{1b$KG9aaSOoTr!;B-Ku zZ^lD;llVw<=Ht=f$-qOhG6`nHYc?L@HAldefE1pKhv?+tq4Y1}8Hnc{;eQX1`1}A5 zR#s7+j;?1Z)S~K)OrBMASziBC1Bz;U6JXkm3u_& z_-SmT+Tg#T(l9AT@wC8fm-D0#9o4{36R)4SbDrq;VQ2oZOssxu2%V$FAof?$=ItNE zlwBMc??-+q;k%nbs`3M?lK#`A4M~k)VUnhPZQ{Bi<7fZs5!vsJ?gQ?5ge-%HUeSJm`^=udUM8LHJ3#L6(T6PHat9fDQM(+tjFMAQU?p`_1mE-@9xvSHSd>`tHDx)4_X{Ko3+Ui19pQPSY3`(D{OJ@?@Fhfc=z z+f*N_8T(V_j!CSPa{uF{@pX;9!X0X^mLEjjg!3w2mLne+&z=y zUth56qi&9eo(~-A-90_c*ei{0laRvh8xZ!H*W}E*n-12j8@P4vjHFkFhHN;z?C-=+ zA3wV2%?-LQA8*>eV{^c|hoet;Njdtm>wi}Fdu(!`{KMr-U8Z;GI{wJACrAJCdQbDU z-ogKoe(CznGewI&d@AnN4|mRuLvK9U*>BC9vT3?L>&Dndb$ru1CF7@Ui3@ek@&RwY zZJ(n}>!^Ku@TL0}ba~XUZQq7dk&msQ)v{*m;&oTs6!Yu*KtW+1sy_SYh1LEmD&}`GrF(6k zQ1+z$n!&sCx!&gWe+ORpbMLqhhxS~*;Flj)MWihANNdu(J+0Rg>jy7L(($j0##&de ze5u>Gz4OL=TX1yMJKhr`qmz93Jve}!=$R} z1+R5E`Rm#-VUIM9+uW4CD0;x@FFH{#)7(3CbH@WF-;Z_=h?}-5xA)wVKUY~7+9QVS ze{g;HJ1Xy8547L1-d?%?_o>ByAOAYS#!{nd0QB z?>(9Fb-~y>`!9%GhT$>1_dO4FPn-Vv?6aQ~^gI9C^$p*jJb%3VrJs^UWUv1A{s)E> zZh!IUr#-zB{``5;+~$#Y%$+u;YtiAbs*pj8li$2=UVX(EfBl$}FaYH_`RAtEDN z{bQrYSHu=bEC82)MwAfn>D}he$}4x>wpI`Pk#H%Cu?W)8$IGJYlo*Ee$nxu zeo<4}8^4G7bSuC1A79OdS(iGemIaKrHSK!)MW3uMmNu*M^%K5Ku@2S`$(#O>=6s)O zDeS48r)C%0=dP~PoO*33%!255&5j`F#~^SzL< zw*t4^SiQ(J;hn+{PKIWcUYfY{wb_;zq(H~`-n(^tcvRCbsVZA#p@*t*=^w8?RvuS2`;)putB#%-Q5cte zVckz}?CCQ1V96S~Py`Lo#Xjn(9q$b6_GhPY#>@LZ`f$n*VCo@i%+znRxBD;L`_I zbx7%6)2`R8i{Cx)`R1as^mE?5xA93d?32>4occxAhJ^lle8FqOem~eT{?W|edT#t; z;uC{@*>|Mfpj*F9+_$EGmwP@t;QvF=^OAL?W#*_i(kkx#VeP1j@qv}kFZsOxQKq;}2rqeK z^}*MNOsMbmd-jH*p;zXGE-|j0u<7?D51qc*?~ROK8qV*pQvLeDnx9gogcIK!ne<_r z_r~|$iG0CQIpz5q(|1_*{9INzJ}tg}`koozjda}Vk{b7Dd9TA;UjFXwNf+On{Cm@p z1uNn^41Ram(YO0idr6vtpJtAocK@Oi!SC-5edL`3IYZvL`hjI@_d3}^m{LNZjggaW4nL5 z?uy}_pQaC3I`ojux_)hTNSE&q>(?6g&tL9!vj6KOY_|N`p(#Bf2YGdrJiOGBhw4tr zqkRvlUHiMGb{zt+9?)YwFjDgD_<-cu$sl=kdQ9^2c~bK7O_5Z-R!OB^DXH#Qi;wiY zE47zDm)dK#N$orDmpXKAkUHFXN$Su=<>B3>hljUT@8R8Tf=9=0W{-~DGdw!>SnbiN z$9j)WJ&Qa#^{Vygbk{i#pSwD?^XVPX&c~0&5t91sn7K6fNYeUeJfyJkGB%1~w|V?8 zl~nac2o+&ITj9=QE7~;tPlfas4{6wf^=%AR0^A+Lu;N)9UkUT@SuETlQpX|nETprr z^y!d8hhm-E`Zo(0N?Lc!G13^Uty3Y3l5|R|?m58BfS=qJxECTO6&xi3a}3;B2unb` z6%uVKLivw4x_yii|9>+77LJut_61kB4>*jgukD;gMcL z(Pku~eG*W2v?iL6o*4Q8ti`tiw;6Qub02}2VXCrZO0+tN?*>xRYa z$gkkhnqhMI6a$6D$7e}Xr%cob!%gtsQBjdoCmAO^5)p~Kzy<-Y2^jk`-_MmE;Q90raJYbB0!|h%S-`~tt`^X{ z9oK)X7yd5=EEcd@K)Zm_IG&$IK%IcY1ytynE^+?84CeTi0@?+T=skwhQS$F0{DA@n3uq9~Bw(_Div_=nh5t1HzZ6iRTPOT>0i_U8 z9|8sn7%ZScK$Cz9os2gAwZgwqz+wR#1iU7olKv644+OoGE)6Stc;=^AEZ9?;ghjkH zK3SKPlA5T4S~(#llkI2G7(qWJK0~~q#x!hxWLh(jR+nT=V=6nQmgnfu>t$Fi!_uu5 z03Fi}@Cb!YLgK=dc$QOKLIO6kgdL9*o;gRCnv!LKRv}%Nnw~aC(2HE07*Cq)`Ow(9 zk(0(lf5v!*LSCqRSqkJ6pPZ7Kpc4!yiVPl0%u2UrB487=&-f6FfJvP z_N_#AD6dQJ!F0At_++ZFtSqX)gv7KIu^T5bKHN*<%7+(Jnn?8u&3u-HGh&<%#!&qz zY}z~!Z(T3sx9H;BTEUpr$}3Gl^+4smL^wfZ8=Y`meNYG^^ zCQ>n^$Dqg8r>CJ(S*!e$A1W`ZV0>o!JTRV-lEJGyB7J@w_;)oe>W_Bo+&EzDgT83L z1Y`t#^gLbM!t|5`S33~jq-by3f51OsqZV7Y^hBla((8~yYAxDubCHuGl=pzWFX%ID z*2MgnnwmHVin7^DP>orM3#^H0s11m@yf;%@ShEnI_=&uG)=GF1Hg!;06rE+wK#vr8 zqgB$lB3u`jN}D4~h$LEWP9}Re`v5IlE9$rFllB$%zoz83*bR~C9)A7z))4*wbvip04rb)A;Bw_mmyM*)8 z7b^L*@Y||bl2TZ~hk`CqM_~OuYsviC>8aQVqmG2$xG*u5-Y8KQx-4vrQH7)>S{9{e z&eJ788Sm~#?Xf~B@oia7OV`b|CMAL0|A)Lcfs3;G{>KM%LELaj$+RAEVNk$vN0jFQ zK?MaF0Tt6?9bgn@rWsI7O|*@&lFG_ahMSjpvr9V}CWKASz#}?L1%9=;fEqcd=zrnjjW)qprFzN zgNe`1<<3gzo(r&5Lda1fG_Lmt;d{++-5;poGknC0x&PT`p^pBcUYV3o!aDz}^W#n? zQ)4$)hy>P~8#@~CZ2=hOkBzwhAg>z(Fsw5A$!h~Jto!@PZw|n>1mI^o_=kTk0L!)i zMm7j;*TjW;4tTXUuP2Ggr0@rHXnWz1?;SV5WHyAe45D+b%raF4;NRDgJoE~pt2WTS znxtu062G45o-urWcC7z7+6LCU%0uBBn0{Kx`j-)HzJRFI-#pY`kF-oNvpbqDB?9{nSaMzG--Fx)x723N`-+t%z9}srl!1D(UzTiS-NchlU!$(Az zBS(&kijEm=88dd=_z4py#ZHc!0$bc#LgKWf`RjwkQKYljsq*{f%~|0;Ae_^IbZl}z{rQ!-kHQQg!qrU z1JM`=u4u3-256E%CV`^hb1vgE-51wP9AMhYVW4j?)g_a^CEd(e(yfdoeVnnR^#St6 z0C{tOyd^*``!#u=57aF0_0deY-8aj7e#9updw=|l7s_!R06*JCSu7U(V7N}qp!>i* zO!qSVovD}UL8h%tlV?&q6VqU(p-dH~QA}f*rZKfL&1RazbTQLBrbSFknU*niF|A-) z#k6rIl~)tfPnmwrRO;Wu_;;oUnVM4gzK&@aQ!~@?Ok2&((^94`rd3RO$9>9AG>e|V**k1i@2y+Yn*n~LCyQqtj4@WTqYM7WfcxbpHi{WjT@1?!GDu}y~+ zNTk_fWzu9?04tF=wabQ;&q|;(U@g=RG>doLDP9pE(o6AunDlr+2ZbPgxH9YGfjZWY zr;ubwEd}Px+s0SNDDcXz9@bXfb8(a zCwnTv4^$z@E?ki==W|-5m+W-vJhC@1l(gTUp9ogsWo3$=)8S_{__PTAuQ22XIrtN0 zQbZUGr|29ENug6rDX@xN4nJ{VJKdY0UK^B3G>n>A@Od=+)y}4N*UU6Hjc@|fTBcsf zPbaxN*H+EAk*R48$7fp0)GPTJ9G|H?7q^vhBhzN4VO9!{w&Uf0ey#2KIjn_PI=IGP z4pg3klV|AuDL$UR!_|Hn4^PjHKZ|tRi#PTx;^B@&A=q37>0Tymw~H2UOn(e!oUebf z|IGTZZhAmB<_kkTS+E2D_vNEH(1lKgFjSg!@r4E?O^B|7ZKFgcqpJp$1CXr=k7yF+I6U5)HOj zK)>YyKe{1pvIuvcmbYV5`}#0$A?U!dpaOb;XwZg!p?<0uBo2^co50b;zodM5#qz?_ zUFZw{^Qrz87J(kDu}%w#}JS^qtdJN&`d2H@vdYXcw z&Vlt-h$1dH?k4Pz;Zr?u7T8|YCZLq3C8g)P^jy-pPE0>7DK$CU*(RE9w@(70AS@=1 zYZjSK--%+$Lz?NF2M;L7qw^+HUu43S=yF+cIdKJK*h+gF*|@|{OP%Sqic+UoDQho$ zwm7w}rzaLi@%TCFJ=6VR!esybPz?M3@}qYeA&u<^4KyCZGpDW?SY~YW7 z__c7>R{p^9;#vI|HLNrFe(-Gd+5E`(%KytnFY;c!cHI?MUUl^~HP>FZ{`wnk+)#Vd z&9`j4^|sqL-Erq#ci(gGeRcOg@Zjc$wmiJ`kw+hU{D~*G)j#$0GtWNvujdA$-mcjg7Rvs#e*zs~>vb^8Bp|Nqm1 z=$YkWLG=GT{{g)p_HwfSGq)pa+Y9~=^ngKY^&hz>@=sLuU`W>m`F=VCo!yU&Z_Llx z<<}SkKL@wd|Mv+({T5x)&(se-6E_q-%TE~UpK|Ii4-9{Hx%Gt#HTgc%C$Zh7j|2Vq z)8@T&4u+mzFqxFabe}7q6K`U%d!_hEcDV}-Hl7s_9E#v55K_tKtaET7v>2%9U5n~y}!QVpo zTMmD)M`?N%{yu@f{qPqW1ZzL=mkxhr@Q0U-hr1=HsS5sXhrj3G?^F0Y0Drw9tOfq? zX@_!-mk)PMqs6@w1b{1FAgIsq8PABK9XM~t{a^HD3_tu61J4+l#L2&yg8T|o44nG| zDXd3bOzohKX+6_Mrb{4&XjrwgiqIxlGr=bvlVE+2uBC7f7j2p?p3_1O$+KbIl&;c3 z(mx$y%mY?+0Nxsan+-S-!tZ4~2X>~W0d6(OlK_Vnk^YNd{VfG>m;t8(Rv0INGz+lB zAjj}I0rF~t9OG{_$g=@AGnV#v8O!{I*?jp$`z;2X2H0xAXn&~zWBzIlSfp>jvq0Wt zz*uiu3>fnlTI@?7?M*S@nSk>Q7|Ww70M{~}0VRs|)Eh9`+ibv?pH>6L^utOheLUrf z`HwYVjGt$~7{A7VG5%J@=ugal6XR4^AxHUM#&ck$Iuo#|l+u&fY`|DYt&FV@AM;bq zcsghk=@~G}n+zE3+iSoXfJ5!lzgc20GuD9drrBk{GXU2b@N~cp28`v=V!&7*gO~X9 z<0`e;fH6NQ28{l388G_0)_}2oG#D`YYnK6I`J0yd(!>5sG2r=tQy6EN=EIslxSKJS zFZ!=S4?o9*`B`PasJ|uvqm9O^mgTrYjrGgIwkEKfpWM4 z`3i)>v-`MS?$LL3+J=ihV>sH&af4>mA=AQV?#n>05AG!4;EvR;Q`$eX zwZYL43fD19V11G(X_4_|JY28E{R)?`3HK6cm#_VBs1H{x=}8IFNcQ;j;WH9syo}a8Cg-(4#VM*ecK$v^U`Z8C`+l&_>j?Oz3N?hx!ZO zb4`Kqad!%Lc(7)mMe=Gd9PQaCV3}-fZPUa3EP579_V5@U_xS1gD&*o7sGs(=uw|j& z+LM<-d-H&WWny3GOySVmv`a_jCUX>+9`)DQOJa#oTWrrR>=mmxzgUk0^~k*>x2WZ9 zcMta$*Hup2g?CNV9zB>68o+|J?Iyz zyL5gdP`*smO&io@)K_N67q%@NO>xww_uM#y+yPun$JZWZ-$)}0nT(&&NB-lHNwgel z+ti;>z4o<>LNW3nmoC}gVw=KrOCUeEe_a8&##U(5g)y)`;1g^zyd2M?14eWld2zoM z$2qKvGQ1pTaNk@JeIVM2IiU;r`2HW9P5ASD<$=4ASX-z(uvOv?D2*TgG+r6yI0vEJ zqQB)hhrKuU_EaCGT}HVvUfc0*1mvsjc!#^E=u0ef^cCi=1U}1mf%wbit}ph7bm16W ztUtYn=Yo>NJwNe%&-G<6zkBzA-MfTN?ASdxy5l(=yN8Ab4-OtP6i-K*Ok;-5#p97c z@nj@YI04D&1Tj@s(Y&?;V>9D(7+V;3WE{)56XO)dof%shcVV2vIGAxBqQWh~b_y^Q60U@K#}UTRuR9(NM+;>knf* zgt5XnoUy!*8Oqqq@?nfEjE6IhWjum$0^lkZ{w=zy(T+cX>aRXyqL&2+&v20gOjIsUU z)yx?0aq-&481GT>YGI6PN_g#MJe#1&%NUxkxLO%!Fg9II^+B!+1~bMr1H3{R%XPpo z#<(Vdm%^CtQs6$E@fs4FynX0Aa}aj`7M6EloWS@T##Y818O!y{PK@(d-kGtBaTmtb zjDs21GVaP)o^S2OxQ^xB8P_xJ!MKrePZ^(aFUBp5Lm7J+_hu~DW&1Fe>#}_ro7Ry3 z`!Nn>d@f^!aeu}Z#$k*T7@x=3%6K5-JjUlUb}=5rxSH``#K> zhcIqt9L~6f@leKI#={t!sww}&8HX|+!B}A&!Pvq$l5qm#k&La3M={Q09L3nhIGS+{ z7QvTx@hcTYQ*vwdE9Lrc^ zoWeMPaSr1|#-)st7*{b)W?aj7I^#OVGZ@!1p2@h8aVq0x#l^_nT!({&u469ynt~Yu`m*E0^{2}mR3 zj*R7gOBcq?Ebq#=g>eXDFXQfvO;?aVLK%lL?#ozV+>fz^aeu}Mj0ZBdG9JvhlyMZ} zD#lY7*D_Wa*D+3FT+etZ<0i&IJfYgfxFh4ejJq&yW!#l<@RgL`5XNDQyE8U39>_SB z@f5~Z#!DIJF@}w8ak&_GWL(X-3*%bGT^ZLg4q;r+xI5!U#se8QGoHe@g>ev1@VtyW z$_d|9l;19lLm78vtS}B?Y+>A;aRTFkjIE5PFfL^r#1qCU#$6fLFb-k7iE($vTNw{z z+`xDW<7UP|JfUo1+?BDHafqC7UQPKO$T*bo6vk%8K?;>uEaR?>Qy7OZ&XMsMm&*9V zD1McU&$vd$XS_+qXS`L$H&gru8J}^JjL&$N3?D_|_sZ~$TV;60!Pij!gDez2jB!`S zX2v0mV`cd96h1|UXPhI$GcJ|kV<~)B;|~^N_hgw8>F0Zlf=m+-z9Mh z;k^>45pI>(N;tTN^51b4;V{Mn8Jij7>I+^4aCeIruIb<<_oZo<7x{E&i>t(V;W=Zx zaE*khgDHi>JpjD$&K$2&4o^@0!25kzAKqi*h3nmT;k`OuxVA!+Fzzhi1z&e5D4ycS zORfpwIext4N~OniDdS~=;)*z4c>j+Vt^?tP>)v?bIzL_>JwKEVuFBz6#_1NbowzQE zS1GKK;)Sc9c-cTRUgf;Lfol_ZE#-K4${#PP0l{9m@M2 ztRK<5SBY}07kGX_-iKiQh=!d(dEbNe1o3nX3>VgyXwa5P5WItLlb&Ic_fc415KB4M zn`n@xad@mh(Xe+pk1^IGlxOJ}PygfYHeFbcqG6{~#&s2(Y%t$%bFU+q@ zAM05(AQ>L(8)BJ0);qLEhR6Dc{*(E~dKe9>KT^L3yo_?`53HBbU@bRmNFDWM>-w;s zqJ2^y)>q6QcMD(*rZ-RQ^ zM!)zluE!cNwkspX_J#FI=8K-DnW2{(wl~a&w7Xp7GhNRo?PK`r1wB8KuKN+&C!WiZ z^&HzNV%aXRy&{(BW4pz23G@TDV`Kd(5c&4mh3(sDC$@7V#`f-yseQe~!k~-%gzqPyi~N+R_gmyAI&*>{$WKXn`!nX#Xb0Kv%crzUzVm?W zO4Hj7*_EZ+Np__f?7;H#rAv0r)a{mb$?~H9cACM?a+o{#dUQ%ZS+75oKE8i}E}6cs zKg9HX^^MX`()&9~-)ApAgNU^^5&j$dHxG=sXooCWvLju$ll-5m*F#Fjs>>;zbS_;S zm$99;pANQISwktEY`y+aI==Qq=_KpPk{cA{etwL>~AT(S-L(-4^R0>`_Vdl`vzSU zp3XobNBT{!uabV*+GKm1t)IiB@K(Jaq3}siCye?N4f)6P=jrW&(w`O(-x?sFtJe?G zFMCb27xm$(D7pyKnJ(lIrZay&jHjyT^3CtbLs&2HlIz5>Kb7n9Q54POx{dBDXm$li=9xSnwx<3`3C7&kNikZ}v+&lr0df6Ul)JEi{!<50#g zFjg4vU~FOhHRA-va$ms8_&t{AF@BY?i*XaEMqg{&l$%uZf2aq zSdQyCj2l^A%J>t;F3w+9##Jo;h;a?$Zy0Z4`~~B!jNf70!1y`FO^jb-yo>RtjQ29$ z%(#{D6O4oJB!7IzIE?WvjLnQ&7{@YxiE#?!4;be#{+@9u#>ag#qt!!+Zl&)dz1UDIV`VXx!ebx#JH5@a^JCr z?d{I;DwfOpi%p#0(JZfFc?Dy+uO7yD6U(%6%UfA~E92n1seI-#-pb)a8Hcf4j?*=4Pc+NT zET_>L&iAu?49jC#Ud34MJI66jVfi}7^{dF9-i+nGvc@=v!(Yp|lyR1f&*_h4T*dMg zj8j-XoN*1yOBg4xd>G?RET>g7$RFbySzg8AM=@?-c{$@I##bYXdJ>w?E_c7kZ zc&o&$zdz%>EYD%w!tw!(TUk!43Bct3Xe!Ht@1^`+#W;-d!;H<0mobiId^ck+r*|IX z6qYYyY*|hE!x`tWyohlr<5w70F@A$_4dZ&on;17R-pcr0#tn?$V%*C14P@NJ^2Lnh zI{uH0cd`6+#$LuRGY-Cw^0S4p!uSrxCeH8qjAL1TC*u^x7c*|)@Z%Wgu>3N{%H@<^ z0^?GaU&pwGv`Fy6)T0>)t+{{qH)S)RwZk>%qVx3c_R#-VlOua%5*ID714A#Mo@ylQZ&WLfX!-(anP8t8w06CrA z#Tb+yT;(*zm#f@TzQT}STrwcu2EJ>^r-$}wa20?q+NZ(O#1iBBHNO9dF50&#f>mybaa|ep8L{siGOeTGf1?~v z?E7Om4$5`la^6p)eIPu&Oc$-E;By#8T%g-aa=AMx*J}!O`$_K04`F-`$*6A$tTGv~ zJl!nyx%7HT@#U_Yl>1I}liXL&C6@C5T7SXXBGbe58hon3hzp_2{BfY%KR%v6HioBn z2_lEm^OZN@621Hgm%J`JeD={kjjvtOzNPOyjkNz{l%sxZw{+3Ew%oSZ+w!(Sbu5XU!F?Aa~zm^U;UwT0P?g7%CUd+l_%}{`<}a^a{?}X{HEGN|Bd-I z@{ReWef?!%1zoiN?z4yX3$Q<-9>#~M1xYO96E4;5A&gIz(M8y!_YZ_C^m!cZ_xsZ4 zXyQE|r%!81^xhEdjd&K|P7>~k;rC?8wFDUlb~R4>KI13v8h_jxAP?5Xr{zSNIYGLF zK9C)~{JGu$>{Dmz`R@_uu6*|^%^0D|fG6B~sd>^PTUCSH+Bf+VJ^XOB;9KplbBuBf znqUYIAH8~b;~d&E3~!Xlj9uy{9j38ectC z$EXK&N`2_A4)7OH4NzQr@5_rYp6kD6VjIFp1T>TH6wQ;Qd3r!+mJTD@x<*&y_+-dK&l))bSF~R z8@Jz$w61gPy-4fd{QN$FgI=sds(gRV{YV=-%zHr4k|7Twt?m7Xpw&SQn-RCfu6qb+ z=nJ#AAWgWU-@`~7H+?N=^RWlF3jFAjN02r@VtEuP*deIt&KDm;TzkXik0TBJEb$4X zb(eO05~-_br=ayuUb78xqj{JpZ|{gJ1+D$~M?o!7Nl&3XVf+Jv=KW@R8gXc5uAnWY zFAHk5oc|2+TeemSYWd_dLF=}SeHQu6>IOlTwZ92!Sw2(LhrA&V3Yt)Tis;6L|HAOz zi=P#={+pi9BR2K33z`@7hM<-$gBk??oMnPq!afu<;irffkY8I~Eoj}7y95RQyomg| z+!{e$&EE-He`4ZG$Zy_rgP@jc_XwKsYut9^yMk{LG<45Tg4V5``ZDsXKf6g#)9*hC zTKC$NSCC&nzgEz?$My)?*ckh&2!Gr4f?A?m1g(4hyhfovBT3M_m&*jL?tYt~rubI{ z4b9jqsCQcL*D!otSe&5M%>{ziE?F;V=+DmxYMJph;hK)GWB8WGqXcb!Hd|2deX9hm zc5D{3UU^T@+J7Ao6w2`pjHlc z=~;Jaf;M-z30iHwj_9aug0`IdDan6s71VYA;J1W7rcDzx;k{x(>*Ci7YPo%zprN}z z5!8B4tDs8%K}{I1ws(S{jfV;aZF&6~K}{XkO%8LF-=e2g654_C1}gkyNM=j7qoip*Mc_pK0*9%&;JnPH{UTu(7I`h1g+kE znV_yq?i954qZb7Aj@>P2-MUsmtu5V}Mf%Im7u3>ml%S#4#tE9xX_lZZRSO06{#Yug zYetoz)pgeh8oK{BK`m3Z2qb8$DD)44Hs1ESp!MoU zf_lIGPEgnKKLyPTJ}GG3P2E05d#rs23hKJSENG}{lAxBQ(*Uj2S*Y0{4P-Vg1}d;i*_@%P1Cs5lEw#=rmamksMPeu+QVGVQNjH750m z6{EKF?HH`?_~g&V0k?NjJEVU4#PV5B#P_sJ@@mU^s&5?bJoAf!@8kPzPrvZJpw8;6 z|2{mo<-o7;za1EOLAT4gs&92@bY1&kWBlB=VCN<#RPE__|4-ARbJcCno#TqU`n&k@ z2PZ!B!h%pWa5N#ShcV3 zl0Ir&LG=eut6kM^H=g^;N0xr-n7R$2p-Ts=iThvdcK0>?)lu8GToM#~I=-xA=lk*h zid3T>+p#^W!zeY`_RZ?%0Y~HSopjEEyo7Vryz?*Hxc;N=>gA8Dim*K~Kz$_lzBkir zdaLW2JLm1_JwR;@9y2wj>u5FZ`%yo>*>8Y)XNKqG!!M0cueh@1xeW(T#^2g4{jIx3 z4^{hiUy-ucb2Q$Ovom=6dl#siW@R4z<=i1^!2 zP~EdT@@V?3Vd}>2;k%SgeblZ$cDyB}+er14ZOdcx(=SvD=T1DYw)+ruV#LBzRlQo{ z-x<_2ye2bLT~blLI_uV!c=At}I`x+6zi+MYtUmJ9q4QfW3RTbjY~F}tKMYV`-SgzD zzc1{eKB$#`IePtIb<(7`lixH9Q#cTZHS>Y|4@VV8s+Ncyy_=H4)QRt2)a|7rMco_}ab@@M zA?oKVHas`)#)0ac_gr%Kkmz6Hmz-SFN=ch9?G)b0}s&Z`|7sjj`GDz?Ts zR^7Jcv9u+Nrl^CK-T3vAaBut{1LMYgF>9(i;0DjCy+!A$Va3<&`+dVWwRqX`L-*bs zuQt@(;GL2(Ssjt{=$}2mnWDZpsl&o=c1%{^dgr&6Uk(gZAMX*dF6)B{>WeRo%&N$k ztY%+bb8E!-E~w}s_>>|aq5p(f1A0pXS}*C z=jxXCHjh^C4Qc%Nfh(t|A1!))fBi#>ddJ~K;d!6OtCPHUUDfNUVDb^Bf{UJxa?AA`P>iBc+`*p;=(Q4QEH!eJsHCavB zF~8OM+C=qW{{CL!?+#NR$cq0=`F?^rfB&`lYck{1UUz?b`o#QL^~*2J>tecF)Rym( zH#Ya(7r$lUuRRMxhpWB67~88VW`z1-Yv{n;>L2k}y+8Z%S+=3-kSD5Bs}^-qiyTjV z8a;Z5+WpYv-B0Y8q@Jk0wBX7CW;H+c`?m__{u)p9Z;V>A?EX>dQzxlw<9}&+XzxgM z+mQa=o%JKt;zi$7tiQmbZp?n^cc&7qn%>KBuYcAXANfOmw+pY()NR|l?6`ekYy6|n zzdNYRtg5$!gr{~ZG^>lF9(e8CZl~jCbRG2b^y~@hRpp&qEk8|BCztK^es{-kb#48I zr>=T$qT00e0#o_S@#=-2^uM=8o1|Vdaz&5O1>@AiLHSRv_-Kmy!{ImPhd$U{Jsx~_ zfy)fv5LfbXb?l3A>Xy}!?~a=orFQuBuRCI|9HRadtlabVds9^FCod;=GR3OjFUcG6 z`c0$M??(M=#CMmCRNr>2Ysy#_rg}?z{X0J6LiNX6S5&@}cO-u1-0Dv*FFq0P{BFs4 zhsRA)mtLVB2z`FE+BdZ5MMuqKb>Q{enoF~e$6p$G!}<2>Cx9L0;kJ#Z;%_%;oiEQB zr-t3vr^C--6S*BtRA=P{U%91=rVh#8xaZaJQ`K&k#Gc-#V%5U)KfiKXlBQ0qn0!gs z!Z`KY^In*L^|bNomfcSW-Tcl(bxwnA zN2oC?l75)hBT@~@=o_p=q^XNO{Jeim)hsoo_{$ZGt;y<;_tSs<^pP}m`)8{P;#Wti zeIMO^bn#P)`pvQr3zbD<)Rc%v5BzjRq`L8!(+7*vG_}`7dsn^q$_%w(%bb(;yQip+ zZO*;op(Uf#kN)Vj;*Ix`)Rv5d9chh`>OH$EFPrU2Q2X?6+0ilie05{W2d~@SOiFdOEx*k*1gS&t1>e>*aPQR|>`orhXR_8x*?7PfARrO`t z9#hw))46|0SMz?DboB#{6xI7c_kG)JGt`RTQ?{M#Jz9P1qs>>J|4N!_TekJoqWaV}kn2 zg0Ck#-%3{(9PIw^EgjR;?pq%E;PWeHsV^>gvxn<*iyHFs-ach-C#&ZU{qdIbqTvH=Jc`IC9UGZhQdS`?>>fuEDeXS?r#{}=|@Nnu7^{dLYt7bnjM-BP8@RY?qM;-m= z?pHd0pQzqEXy3X~rP1oD&0p2*>k_9PcE1)q{%C@Fru7)5y03%YIjMcM_Jw76PoC7STXVtC{WqV~#z!?| z|7-b4?P+&q_2Y|AYJ)#bgx{0ez(pq>jEXp^RWv#_JlFlCw)55G#g6?av~G8ubM5?H zC$yj64Z5xTl@r=c-(S+{nawA(Y1bXUXvF#x+Mu^Ch2Im})u}x`+L&`f^R~Vbv_S)Y zUCiX?Mx4-E8rPoFrRNE4{S8`LyxYqpQYyFNseq0-R zI&9Phw;tElkNYydZ1r)i)1R;W_=D}ZmT~^xXV=a-u6@vX*Q}ID$F<$nWeF3N5F>T@Z zmbpKzJEoNnY~B)7eoUKnU1^uZ1;@03n-k&pm{vFF&1*(R9n(6@zU=5H{efQ>1i#0$ z-Qz-Uz47;>T6F2s0r!1zRO@j6o;e@AepLH1bl$JSo;<42de~9zbmNUZMqhPQb2oHv z-Qzl{J-PhHZZ9o9sqZBU<#9!IrfVRvtM z?P#l}P1<)^=1;BKCt;Qwf<9^0;!eXv>eW{5(F03+z3_OecK5YGha2x`)n?T{=Kc58 zt=bDWH*SxpXw|~5&WGPttzYM=*G(C%+BdH}ecA0(TeZ5)>w;#D1i83cwa#IA)j^$G zwS+Z6Cp#THq7BZtXzuVIj%Wuvtxn8sKBBD(in;ljSB_|J{N55A{=^Y&{p5cwee|v) zTGQsLwQ1KK(R%E>vv=@{Bid7sjNkKh$q}u*GU)Yp<{!~!47j-Bqv=Pq8%`y@=^cMW z+y3p0HRfSQw63e}F0bl)M02g}wz#Fk5p6);{{DIU4{L8tN?Lm4`@>p()7lYRK02%o zD0{7c*=vWj_<;|Gq&{_6t9566H1+<&T4Qrf+{~LmUb?n_>Dt5Ez>=Ve_g#8eI~qQB z$?y4xwFhTSxhf;`uvRpr+rp-4hqZ4TuWOh;?y#0n5VZW*(8JosC&!dN)9xqnXH z+D?bH6VZ|5iw+;sem=LkVbRZrw1%{F;V$4rbi_h}1T2Av3hbDtLZ$BcwoFYVKQd~tuts;Bm8x2+tQ|H8xjw0nEEoELQO zKJD%YuCLD8xKI0PRP7b@*X`5#gstrzwsxO(<>%+0cir-R+6vFKYdbskX+dL8SZ^rW zr}c=a%)MaIKJD$#PCod;+#pyJ-Ua?$aJ`{Nvj7QTw!U zmWzMR8M;p!k@E0)mVqD_*FLQ}H0YJ%T>yJeg?dkUwFibjbL@{pUaj`-pOzl_-K+J^ zTQ{%s97P$&+m-&Y6CC1@VT2TUhS92z17`}iDcioEMMf?~VzSG?9fCEA0`4!@OK#^yq_@nVNUK3(0F_!28TSfj@fpasg z*{K7{34qh_D9{$68J`Vd5pkR316n=S`P1%1nMw+kCrRn z;d;m-jHx)`?c#+5^R&Gy4e&JH3!ku4eD}YaNz%qq&jfp|+S!I;HkggC1 z@bIEIlLBhtBZM(Spo)BZnSz=201)LQ`6pzhe<+iXjm6yxe91OZS;t620i`(c{~AM zm12V|hoLaP#1?7jcd@2`eZqIr8^-)D#}OPeBzjn%|JhF-XQjJPFCIhr6vFUC#msS| zpvmNWoQ^nIOewRI=3&2@GCM7uXi_Fo!3KU(5@Ni{^Orc?Tqy;%JN&TQw#<$dRs@EB zP$6OJAv!g|S_;Fxt!&)bn4&TqIQ0t2-3oGWxDa3Ntlj>RETt0EUmA={%-%EpUamKe1m-&4^Y8yXd z6_Aw)^k+_=3FG9P>6jLN&bkOc(dX$o&|4%E3uV(%=Okt>^vRPKWMn226mbQHP&0F< z&q+>AoFnz5rOtuTl`hniJ})ghl~Y2TIXx?5US`tt+_coJY(uyi^U~6M!sO}HDp8~>H( zdvK`t@r$5=LaRr=@4wFScR#0)fgzBUhZoqTaUCcc5#0?H1+| z4o?}XrVgB&90r2R7p?^QrM4k_>2v#nifrhH4EDnW8HVRT`^6lg&{Lbw)zI^KQKE01Yxx9v3#^xCRq9yp74>E|PsLPig^=DWu zj0xg|FD7QRX$DspF`0vS)2pD<#f}9SAU2I0NtQwHQw|d+J>yWC{2jen(2U*rFr6$8gqoC6ftORze^caBl_OIiUJ*~(xfrh6e6uA!ePcR{BQ`r*sT zoMn|D!waz62DQw-jIiC~6EAV%?3}J58%(I63?&aHW_~P~mO0^$#*c?F^;*n&mdktq zE-ZycBPfikEEn?)w+-DY<`~%fBVe&9*Y24(zJTYP9*PfnD1=)valvQ21;c!Cznf_* zvBT7gCkAEkxjg}d*GC1uB{SJQl(O9eHzUv~h{+^dA|^9MPKPv1U>N}{5!i5JNEp8B zjWZ%J+%&j>QNEP&K`jyImA;7BUwLf#Zh1qC{fO+t+~pJx)Cjeem3HYylc=3&ey+V3 zrl4@wmM_LD(V7enmDL9FKOJV=MMbuvOejhmi-n~&M-fht#A8WN=7M@k^W|f;c;Dl$ z;1CYma!MCsiuB8%KQ`Qz7M3~1JQfv0dfDKOBxe~_a8CdRxyePh#=;I5TpeXj-#i=Q z!o3!J z<~USxB)~-P!zqO3(7zd_T$MR~8^lg^m6A9NdZk*bFdZ8?@KheJ2EB!IKeR(#=ZwV!N z4r8S^;XIi><5I@nJ|wSTT+KKze~m1MuZ$J`2$Y*yo^XovjhFgP6Q0UgIfvq>Fs|*= zzP>BDe4E!&{OcL#ts}gNarG61w=!0)CEOtK?SywQu4nunW9yA1-^JLqfp81sx*G_$ zN_-#T(08bQcxwp{V%&Ti;bDwhHW7}J@;eBRXI%Fn;RJ~vCTx}Qw-U}{Y+~$UobU+A zs~IghKZ?=7{KgOZ3jU;y#BXN4 z*VA3_>%)k@m-)(R;=kLS_@*~Gz4bjs_*eOUCY1S>@qGlpZwCsmFu(Q$>A8{lv65d# z_AF-oR_0gtCOvU{(7%-V2@g~FJ?D}BYUbDf)LW#xg~M-ResenMxtAZTt7m>*53>I+ zwx^l-mcHb-0oZxNwO59}ozne+!<%-pAKs;W-O`i7hcVx}uAi`HXE5)bs=_?bOOe=YM{o+AAw4!@Q8&2N)`e&KW* znQv_(JFn)Ql3mPKPLck{*q>hJH-1Wb*0TQKx5y9PH5C47GRLGazkU$q%hsO+vCMZV zl&=$9j#lQI?j=1b-6(u1^R4|T{9vvp)y&WPmF&47g2HcNeoF)Sp_=_u&wR^kq~|*3 zH!(l-KH_)mOnO?F-@K3N$v13&EAty~B)|O}Md3r6xZO>p`c}>5Xl8zG3)y)t>rY^Q z!XIR3P%qMx!~B{q#E&7i$tCsQOLo4>{937}7uge6MuM%(Z;mE=7IV6d%+K3N`WJCM z-^F}yH}d~46G=}i^ObQ_jw`wThrLbtRURUH&Xet$`QFWx->7p*Pag9d-=cH}aJ{Nx ze)GK){yes`mig5yDPPUZua|lzlb+tZz}C!s>my`;6W5;>=3C~H{tj&CUgjt4C;Jb} z7goGO`D$VR?~Eqf@xR~~`dFE7T1$3rIG_E) zd~bj9^Y%`}uaf*lq~|Vv)T)O0mgh*%<6Kedn4h3ge!u5*8<=leK=rvl`*RobmG$K3 zyJdTq;n!2TmvFlaeV6=`H;?%1S&y0drby~PSMs=%!2EN)`4;9YzfrpPa{IM1zwsFHUt_Qyfe?`3|=k7U0LANm2=oe)IfyY?mhX6A>^B7ZJ36F-Id)$vr09gh&dl=;dl8xN-^hO1Uh0|et)g`0{c1Dw8(*Y+^&dj|TbXbDf&96L`-iX($^N`wC|{p)xmcL5 zyh!$#xSpgizy4KfryF@*Q7ZW_5&snHsb+q{on&Ws*0YKE-k#(K`F%U}%(s3`=}LYR z^IN)*yD};3-=p&Jg-%j z6aRiL-vkbymrnc?&TkI$6S$quVtdX+8gJ?#=1-r(;DX zWWrBe;&xWLkn10dRk_;;3d?Nyj<)PlTbT>Fq#M@t+GIGuWO6X=9LB@ZhDuuq?yVOV zm*C+ASB!3Uj4i*glp+h|N|7_fUd(%ruq@^X$#t0{?8UZA74tAN1&oY>BOMV@s4d1* z>U3A&l4oRyOigTghuC1>Tg1f=%2_E8`2s6l?j`M6$xhSF^4(?# zA0x6G#ZiqOzzpCYx-246e1s(M6ao20PX&Df0Wh4R4CDRTaCr`clCOmNi#r9n*TW+@ z3M64K=FgmraGg8`BWrO$UBc8v{fdJ~SR4LRKjYf9XpFc9jZQ#s=>7q}qoe#~So0zy z^@h6y7QImeD8h0AL>vER$&vdRSjaJ0z~}e|Wf3gFgCi~u4~)`=k(4oKM(WIYnTg`aTO7*IzC{av zDAF9P(EyCk4*yg!Dd0=4qPge2K?Dm?N|B!&?59{}{rYB`*DRJC;z?NMZ z9D#H?pe~zX`0*5)iN(7hqNYndQA#-0i}1)u_@n?ab|rz8Pw&G6h8`YVapdtp3t72Z zA5KN%)uY9T!3hUe(WQpqCm3hp?2y}IGgm+}SQ+AUz=rw571Muj7{Ur3`}7>+twEMWNuNewlIQdGr4gDNTVz$}3Z zl#`1LVMhsq{(&F83UG5VYNQ4s62!#(jc+$O{~%|TpnnuYl2F~yP`~yFmHTh{1PsoT zJ}ktu?C_`#71>0~WoyJpX@fJ2MQ|L%4oX26ls$zZ_sYHmnR*{0`VKg6Cnhn}IQ5=W zAGL8$ox3HB9H|enFe`%j4%FoKr$0hDY)|97Flrc_@#RTVBu@+>ZonWI50^3xXJUAK z1O{E0Pa2{@^^K3mQAyee6-}66m_1;<6K%_XlED`K|9S!xVTxPJi%EG8ysZ? zwPV=o{E8}(ioL?Dt0ER?1Qs1zvLTClOSAZVIT!}KNa~}?WAI287&p8qQa{HWx7ab< zv)BQLx(g~R6gV!$jN;0&vI=N$0)|Jyp<7`SoCyPkQ9>>J7cQa>!e_MnGz!f3GhEmd zuaL>IPc@bVp1vr;T5l)}=mw>~#32T}&nS-(hv#y|aSai{KZkk*)P-lC;BXj)g&ShL zD*>gbM-PX`ivMG!_}m8EX5y(XRLkRpF+XsQ6+(FQ-1s~O28aPoT0rBP=;p#HFFYnL z!!gnB5`&^IFcdOWT&aGUPp`1TmqF?`^?+1fP=VqHa&!aotL<&!=rOh1EjRw ztlFvy%PQdj-~Uopb@lCM^*_y~u(imSO>sK#pRy<#56!Nlpc{yh4G{(u(O-{~ZPktU z)GHyxYP|Ip#Z1wtkm>;9* zp}?2T9zHIzUyPF^IEv53D|t$|8JXd-1(=0tBsJE*HqlnLowHCZ7=+cz@E=m(mr#ZZRKM4~ub@CX1rh=SRI@mL)5fmKx-FtByoLDO|hmXvMR$Lq>`U&V#q3HC= ztYAkRN>L{LK~cw#8a^jxW}5J7mFcfyT=A+Emz2)PkKtG0z;f{$TK7lZa8D|LZQOZ zqWrzVzB`jCc=Av8we*-?-2P1js=Y;TRxl6dGEi%c@PzY!;>adEm$3aEmHuQMfr{xdoWZTegHV+7qrqAc21 z4Ub8A;MRt8%X%oRKf@^8UaFN2J*z^Da}7BNQ~36JE$qR0eppNkm*6w;2^}WqZ@y3% zhU$ZHL^3pX!=so=gs2vz4R6#V!m&jDPALs=_#eYlLnkd~h{bBLop6alkl}Gy2$sveynkZz^fKkN%47V4L&7vO)s+fk+4jKD*x8^3f&92)c>c&|sGkk~ zlMP=%<5L+^_!&{Z!8uU5=;3IVgi{hIDEVjT*uW~vn9mBVDs9}=p7nm_hEL~tIFH>5 z?1PZzDPr)}hjMI*XK-Dc9JE(Z|AEgaeeq-+-nxhffu`VnVc@(bFyR1y{WtH=b7MS} zFn;p7AtD#-s^Y^vFq!kee}|`^;5k{FSwxrvOl1o7iE6$Pu4+y|>&+w!_EQOm_uEvGs++3)v zwkoihqD27*o2TszM52Ie{Y4jq2aT;yYQtXt2U4To_|`q82^o zd%jl6v!`dl<8|=BEsAvz(q37^od;GRIYA+SjaknRRA8=DW_YOAQDHB(+n{rVmP|{{ zKAu=}7R743HwPQ==F1ls@4?zt3U_4Onc&pSSeY03V#7@v?O?alzZeNO$zrghq%l3eEfHAqg-3uK zPz6{^iKnu_*P{sy@Gl1Ri2YD%KV-Z}$G3AL8$%>kM@o(#_1BdHHv2Tln?LcK6x=u4 z9d-|{Kg+=shg)B0Sh*%!Mg0+Ru;9mtyDS+uUg0F=0IxfkX6fV$bfkD6h;JoJhHKwt z)^@$*7st;@J_&yExkz}7{6jB6&@(GMBcnmLQ~{5UoyjFK7*!v(?d-imvt`~~L|t&J zxRN?Lu8Iby6CVo&TR~KaOdB|2aa+^`!IfO@jPLF5)S5E^Im43YTU>P(#a?%_+*) z=zaZ#C~cTfP<`gK&5+|Im}A^t@xlBYrwAKNWi>B2S{MM21F_>l!GyXv#(z0TP8 zVSnx$jf}k&bcmw2;>HTIcd>Ep3yh5prqy@{$wN8UV7t8-&b&bEMPtM)B^*LY93^ho zjWyX9dTc=Gv9RC)Zl#*cF7>%k@4o$qg7(W(M1!W*PISE^6m3jsMW^T?$tMEJ^70s_ zmlzhO{1ia+e8w6fszvx5eklkRA%~<}Mqet1yF}0^D*+`gqH!u`OQ^|IeeL? zqO!>Dgwfu2XtXG1Ss}dj$^r@Mhh21zD~6+RAnxY;_d=xxn5Dv__xRo>zexyd5E}-k1$hYJw@m&C=8$cv$|oy#$5qB{?Iwdj?C;VE5fx8 z*c+Fv62`r9G*?K>LIBMJXbe2xT!i(+6*Dh8H7zxJA-5HAB#8%D5jzU{$D$;93jr^K zaJ3a;tgtY>lIIHzVJSH(u%bdR0vaxjm6(BBun=BM_DZ2w5qqqWs3kWs36JI}Dr9My z2kPSlp3eIhvpGCjIvR>q^nFFpzC~|=^MJDt&1*1!TcNP{lHp9I!;S|jXX2T#|HaCb zUkr0~GuJ52NMRXg*I38=#w$Y=^EE%cIzkPR6^|+#SIm{rR*N#=NT)Y2ak|bz@uoOmCK8K^L~-Ry z*I_onR%{bkPozH#jn>!fMKAMrRaG=cI5}VGDK$q-m6cJ2!*jT|RaTbhcIU4!w^I__ z=|EH`96y;l+89+1cCyf6`KZL{hOR3{h7zsbfp^1nVZ-N|0gWBbQ_w3`M86BOrlN3V zbyNtP*##{XD!@tIUyG6Om+W58n3aG{SS_liLk zdDPPNdL>&RZQK{lfVZ!RV@smw{vWJy*em^`a}0BC=|5Rkh5~{i&R6Kl%5wcVjUp^n zSQs>voaiI;B8QH}Sd?%`47L@h%sD-X3V}oycZL+H*YP{z&*08b04LoopZPe0Ph z!##$BrBRxYi8GkVirQeLD@0RHJ67 zR#Wh>wCsffJIOYqz?nQiH*$tNnnX~XlVC1v$NgJEn^-P;k|0Vwfj)!M* z51tH%fd~qS#!a!bCEU|S65yUTa(RFUbYUrCRSOJ5rP^jfG@p#{twiAT*idHz)%dD~ z95Ha*^dIfdlwon`rk(5t@B=a%AZ;hB{vpng(PW&EoH3jJD%#Iv;QZxG*(?+@e=z}p z)1kI9QLb1dZ3MXd4f9ES$m0yN+rTva3#UD$?c3gVnsp}Y=^h{xHkj-VG4rGGJg}2# ztI*#x>dxCYh9`G_Z$SnOcR@65EhX@Ut| zF0Q3OrGy(xxB(HhM9fdnIynP^_E`ZhvDBmBP=)tp=>Gs2lqigBT$%wg#cxvsBkL+f zMSu#b?^y&G$uVK_z{wh8W>S{U6jxY_oj63rTm_hnopM{Qv1*DNG7(dzD&t7(A6k?X zBo>f;+IJGIA+Qiw^j|38bbRY>b}1gMvlaRFum6*zg>T!h<$qtf{L&UR=Wh(4RM2t% zOPNnD6DNVFinPi9-zEP)=m0i?Z>Hr8!Z=j;-_4z=4=BJV8(>!icG;+8XkL&}fX^!9 z?3PyB;FzFnhlUt21<=67&5^8$Sig+{V2{7pUPYSQ=xjf*m=3iG8^C}C%fQ&WEx4E& z<1ARBucQQqgt-?zziG@doVEo18E1yZOzH6>Ljug=XGHOhm1a^1Q*J+3Qb!%wxB7?i z?^^w36rcMh8bV;f4evkNZ&)n!S7{tG+EX=?7o`HtWMwm9oy$0NIiotPf=Re;2rCHf zn6KDod4GnSKxkW~TGslQPu!m!9A44@uz8L;K5aN_(NEbIJbRZtlK zjAb-dtOtWK4lGJGP^tfMpFl4qS?49fn^`^tU+-;IC2IOO4fD1cP= z&e-afQ2#tcMn*c6dBdp)Dw;do)?BBm=n&lN)3c^#fwIi{HZeA` z@rPdWdeDCpFW}N=|L`W?5=ri7ap0|_c$c6y3xGMB$Aigw?Mcbb9`dS}NYxq>C~K>$ zt2KMl?VUZzy*i{j3nAUP5>D`%8y>&G9fcZL*pQNR4??jkp@*R20(iC<>Nd&=onTa)gMP$QHwW>~1QjQ!LOhAweej@KK>yN;6%Z)P=K#+& zv5-&}k41@H-AFF5AHaLpkE6UiMD~693Cbw~m2HOLuEypK#WdUohnw2RF zDzeIG7NxkfMImjCE)x%a>teGEJqWK9;ah%G%JFSOiKl5fNuwYy<5nfl_fN-fVCup% zKF5!sepZiOp-|ppn2BoVh-)JZoJY9sTMg1OuLz0=96Z{u24$J=0jh30Lr7QN%j~?w zy9xb0Y-P^6)rh4f-UB-fE@q*|NT>!(JkwGOfy?qHPaw!)>=lGeEL;>cBC%`a%mLpD zktRf5*Wi?kYf*+&dezC*2v)QWm16~_4=h-Kj{VE9|MpURY3gOUOT~3jIBus$-gOf4 zc-*5Mp;AKvfbBtH%O`S0>SW3>z(m7JQSt!}O*4593=nGtNWUFj=d3$@mH2rVu`z|< zv6s4(uD%RL#`{rR`uY<5B1=7gFC0zchsjxQWWnUD8INRcvw9d9!qy0WwaoI6mey${ zzl53<@anln0ahcb5HsE(ioeE-6ZPHx#Xf?2Rq~Dtc``fjYSr(^>O1G7p~r9ay;nbwmIL+Q{#M+RJXLF zh;RH~G`DWt;DbppI*C(Q@5YVwRjlEX@!6e_h@Y0Y`Zgr4t$8ATdG#dmA|`Hxk{eZt z-^avHL&;Ao64$#SG2)3|-nu2e9G%~|QAS^q%N>y9au+nY)Co;4bwiU&9ns`cS0uUI z8BH#9M_m?V(8K@}hd4LARI&|?Khsegx9IMQ%d8H55l-ZD$hOqp#I2&(o6KMDcWP?d z-@i{i5|`@01Naa#6uxMN!sl(vye*&Md)8;dizZ5Jbc_#CiN8bgx-y6)e}GY|lCp@0 zF`wSOAymDhA@gLB*AlIM};wzt=MN9`CTg(b)jG_z=S4i==q4_Q@7APu4!^;dAr;KEJy3 zeqDa>cvG^@y85wUU!2WPx1T=Q=J)h?%5W?&-1{DxttKZk{6U1QtVhCc|U&CEu&% zKj12D0Bkk$NVl5)d@y4WtbK7uZx9KTNnV^}UGo9$H_C+(=1ighipLvSTnBy31-fYu zNivo0^f*yu>e;N#|JXipFadu6 zcpNZqpKmr{+bSQAEoLh-#H>KSOKo6iKC8ru4X_B7Y58-F|9x;xyfn46pz7!>_j>+Q z5O3lOaE}o+0=*G%XEXei`p6iMe(8alk(&+f$H7T(pHJUmkXRg6Cia%^D{hoetY%P_0LcQqbuD{%b@<6aD>8p68&q1WsEIlXwqtea1$?x11zsg z=}i0k-)tW2?R`7^;wN7m4F4hd=kM{)Y4acd@gM)Y|MTGBCr3wrc=T6)v!{=9@JRqZ z2f+~H3`5UQ<$P|yLeDRy`3!r`GUfSfrXI%o=Cr&d*teF}Qy3|)KW%>Z=)r_z9?9`w zcb>THKRhlbN(ITmJ0ZpV=xiNwaKaCh&#M`=>~QH;QDCS>oJMLMCdlk!1_yjj6-JGl zz*pS#=HOqDLfywx&9Dhx8MqdQ@F;bG7eIkQ1Kf02@XJ%036{W zNq!&!l7^oqwPebJNdV;S+iEZr3I#BdR1GL}p8mfG)-7)jPq}AOk{UNa^Z|>Y1OjW* z{R9Vy5qwTMTaPxMd~HMT8Nx%9oG+O29XB{UqV#MrDc}wcq8-3?DAFtB;f~jhMytNj z>&Qj~6kX;3chU(`63$pXb|9qWx5|7B3?~a)QK&zeEQVkM;4o~_uO?`bm|RC9W$L?_ z(DipmI&&zuAraL@hduN~XO!KA!qcHWJh(nSlZ~tP%s_zRvgs7U$&Dv5srxma>zXP0 zm{bP8(P}H|m=5D54RhZvVN$dCp0+A*O@ZJ>Ma}claP-w%&=V?d3z6WH>#(0g!QzI! zvil~07z2g~vkc@yXWGLBd+y1vjL2CBhe6n?b%zJ=)$kp_R?sde8SD#_KG8Gs4A(1| zigF~0{d_hbKt9X)D>8yI!rb5zxf~RhG?}V>yo9Ev7LA6>fT&-5_4aHC4*^+O?>5)4 zt|Iyd1T19g-R84{2kkq}uXxYJn+=?a1#(Hsm(Yb{6kDDwD4!*`Plo3&aRDzNk9Zj?U+ih(E#gR)NXjRQWnO1H zzHwevkE~#=Sg+}sMLh(z8cJV%E>?no17&qgpHD-KX&z5mAZL(RuzWt4GW;v-Y2wsz z(Fl|P0=(;NVWf3>N=Ft&7RO!7{A$Mtlnx>8&?wGhaK#Gbsc)F=vYH35X2=zfT;6{x z?nF+@RxS8jMff%h1O@ex9t71ul&~I%Gh7!!d4}WBHA_M)7}b*(H%RgrjRI4aiy$fn zt-z9W#+!&h8pp81v9(z*%P1X!t$QdUL&-@mH=KY4|C;y3eZATgQI!=j+m)8O17ozJ zr@ZNV%~H9z%T34b0dS3s(l7)#mmo@jx6UMCAQ?z_oKjmV-1R6m2DbQ_?0&IHVnph| zD|ve*xSrV^02_Dip(l_oAjJEr52vV1XDCne5rfBiTZDAC6B{CyIl2F8u zJ59Emj44#H2?WDb#T)n>OyCWsa#eAH!L&CQaFyH-NY1JR!TBdJ7Xj?_PC;^W}MJ9 zmG5;BnCmT=$p~YsjTBnQvQpfzaT9|%5lY`9(GT&mu0$fi-a!ahT+~dlP;ApPCB9#R zD|x;p*T!j*_~7OR#D_HAot=5#;d`&cIl+r2W@1S~RB(`xlM?QH*4MI7PA_1J=2nsk z;7eTHSALRjD7imdw$dmIMiOR+?pPzBs5vGgil2#);%8(_w#@hGjbo4X08-b?y{(5k zBV@QIN=SXc&E;Kec zj^tz9b#iaau*KtTt!PEBMAj$zCl-2GCSS{b#ixGSn3=Z2@`e2k-}3Rm??eEP4k0nD zTq4&&EHuJMq0oFxu!q*=of@rm{d0*YwgM}9W98d#<%JmvDVGt8q`!%Mpdh*yQSpw& zZRqbvcG>b0S>(q^E}b56c8WYmramH$kV98v(Wi?bBYLXaQ3A0!cdp1j$lRRR{I`-(aeaq8XG>QI<{|QTw zF-B+yOyvh^B$ygjY|(Nisqg(qGmKtB0dfx+Cg5ZMi_()!pKwco>noRFb~Tx2p}R@i zbyeDbdvcd(7Wu76j0(=vM>mIo;dJ6geQkj*rYB`XwWXZ(;Y>2`Z@YzoI(dVqH_%S= z#Jw(7srzsHyn;r|3trK$(M53qBxWO=2j&+5t4DvHiuzq1GtW%s7or!IuIgiOmU5Ad?ZgLQb)N2jF$9z3eT(vz8X>B z`Z8PDeD?@Xq+-ae57an8YDzXG(=l(O@RJsI^q)!;Es<6pYCN?MMV4;ELP!gdlr|m# zmr39_q?5LHb_{aL87Cg9h=4OCQe^=UWKq<{p|-%ltB;L?-R<4a8#uW=A09)p4e%C4 zACuGyVPB{hg+YtYI)AKlj1U z9Ckv=STW%?^pG+Ke;|B)+y=9k=L0nQ65EEV`iZTUHLC#N5~|$Ev+AU+ta}}^*aVZ2 zwro)1y6W?IS6=U+6-M<@v5}VNHKnNOu3FAMHm5HoCK6^bi#(h4_ibRdIe5sn9REy9 zmn8*ZEEE+iurvGm+0LF)&yb$oS8~WFHCH>O=lp`ZgUnHIva&yZD7%X4Tw)|H4uMG{ z$8eU|m_zMN29RGi8YSCQfAo4V9gi5NPKB*^w&k?K)lwhC*j=h+}D6Y2Y@eQAiE@| z$G*TJRc2p)G(%)Baw^E2rh_(_*!2em!%0F|Vu+rJzJyQ-uA-um5#>GZ8Qx4NAPa^! zt6?3Q!HPxWXrKoajuF;Tn~)zylRbbx}j@t+$>v1vdlHL~3c+cJz8Vf!3nICwvLRR3K(LF|AP+8#|fmBhkGP+=nDtl_) znFiv^H$AW&2spNMg~^2WYC)=8HVm+)j%R$qYc!*$v(tKWbSyKk)%^Lp`&$opf6(_x zCY|4$L->fu@U9rTAg#8jbC2;Fpq%B2uA<4(EVIbkgP@ls{;tRsneLWD@n@*&ij!f_ zm1QCNDG>||7M%A$)b`X?H`yjRv}~KRWlHDOyHh=u$%>Q?JdHs7H?dYvAQ`Io49R6i z6I(O|q32e!nuB~#UaJI}4cBF(wSd_Q!2bnvn`7z>^8Yb*O9#J#-_+qH=eV*Br|cM$ zOS3I;n-M5+>epIqgpp;_sf)dvV>pd7Ccg<)NB-}d4{>{}sVRA3kcu@;PJ?61Z5CvB z(yA{EmHktDOq6}neUlg>^0EZTJ?UF4zeRu1w0xF8ImrUC{8L>{(i(*%)Um#Zz!8ZI zc>_I(Mrv-9yz&>fs?(EG%YE$5hyA=#IW4K+&N$|fjIDcYtv)XSfD7DHEK}3@#R06i z)Uv<);#NgsQl+>JLxob37QfAt*jvd!R;=;e;FkVW9@Yj!s@1)4-lvmBhEvpmd@@A0 zb%7#UMsn8YJXI)0bdaU1s7xp7X2L=OK?QF(7RM<%csY8NnuE1G2%ctyr3HOsCcPJ^ z`^zKW4DtC22OBsYWq-Lc(@#Ppq;mghTLHC=OMiR1BBF8n>_F4GrgiMHm+Z(bQ~W*b zSXW~2$XciU7>sadfj!7)qiOVFy?0|$vbZ~f+L*$i3MfWc{N+^xXiDr5v6uKU8a&3@ z<0Ub>aT*H2x3cs+lvq`)i-6*Z?ENoo($rDV48U@n^C zyI5JD@f{F)5A80;7d9nCZq3-;unG>5de!Eb*XQa zA_eOlN+<1`8IMy|z^HEo=gd+b?`f|EJPrZujg zSa4cQ7ZVQ~6FrP$amCVxN4o1^O&<(Q20pkheiE>FWlddQz7oLG~7R5c1-kFT1fh9RyzqZ&fUXg>BJbwl$fot?B05))d*b#_ORZ&Wc_@U0aErDu+qi(ypd?}^QR`R%$SKU96aM{5>8A=~UFh^LT;@?J!wmOIp)btHIA z<1U`k+6o7fJVC-Us{P)%2oHGLKQ@I@&*>mH65o3%y?p`IY|v|%vjPkFwL#g~HT5&e zPfnCd%~g2($Ci1U$O!@+4w&0P1HpX#wfMP)8>+O3rIgcJ`mi%?YHELv6 z1$>Nym!x>3;wVE$o);Z_9>Kv+$XUDwAag^!V!swoRIf~qs(Cm=SAQ=ki+zN0s|-e% z7zzm7n_Q>8)K?r-31)t9Ep=-ZBf9!KXKjL?OfjgJK(FJ^|6On5Td;!@^MLvkDmfm=b@<1c7+sQ4&=?xLCv zDf4Lb>e4dsY*5;C|@LazEyJIi=R zBCU)uKxyATDo@+OOJSw=Vnnp)g%bWuE|Bn(8kasllPclJ2nd(Gb=AECCTXa>pyikkH3<5J zCViI`OEUyjlWIe~O$J=j62Pv<9JzE8AB>IzlhT9*^^s^wQ1n)ZNm{`qi0@SkNIW)^ zrWv51BWSb9U}iL7dZ3oF5wr6Q14hI)t)=XW z;eR2ZEMDEEybK|LyH}1wB?8(E(BMKeu%dPaj}%j*&Paah$W-~)1X6fas~S~if2$xoY<@ayaAoT^R1-px>k#cQCB z4H`zp5Xn!7OzTxR{Vpv z-L+XACy>nKDx$mc$+opbu1YnU9N+!mvQI$B&C_f8GXx}2rWP3M1sLn~y!}oa)wb6g z*s%*gapzpga#lVRyozx5Ju~QzBY{5I9&Yh`)Q+F?HxN@LqQDERewKn~Y;qiWGwp5Klyoouo^wg9X=tLW!G9j*v z%ZXpnaVaYEYfv$t1=;|&{4ouDNhmRy6!P3^N+^aD14;!c4gV*K5zHg!xR)C$@DS!6ms5Yt_=kQ>Sj&skVWt@k%jbXMj~u1vHfH19gevJxx9xI zsG)<3E=;TA*)smc$Xo+#l3C!R4nAK^g$(kjsqn2s%)&DdXhh zR>Ok0&^ei3K-qSseFUY7y0@}j)lkdb0a%xu7D2eagRZ4A15U)C&N~!x?JJEThFq78 zGDo$wTx*c&DT=rY)cQq@ss+VINx&#(7>>AX8#(HwJEkM{9+0Zm6@IfX+7U?kLyC)B z_+~@F3O5_Cv`K4@X;q{=>*J-HRwXTetE7B&GuhLGjg=5zDS?emCL?KruhZy44Nd^@ zlGSd6bnqW~&(R1;DEe9l$p^|J#|$iTjL0k;3CKXA%%$UmQ~zPN*Kf`G!xLk8ItNH1 zjfJ`@bMe9wbd9Ab)G@{QQ#Pz7*>rw|)D%X*rb6Ha4>VQh{SyXgk$0TPNt!g`!tC7- zi6m1JMGkX}skH_nH5c*(H9G;Uqvk@>bZ#xq;W0Nkn#EOBw}GiD@j^?4m!Vr)$mCeY zRS^=6IA_^V~ zGN|d)Xi+BFGWTnM!f_japVpvs0l`zbB1lPZjjmn=mr1#oswRw7K}t%B`r&7Yq~M;5Bij1QPl@E z9I5^V&tq&Etk2q@%WilyArp#p(O?8|rgu*YK$mzea9Z~Y)tw4XP476)JIyd$t(rw_Rl~`~Ez`<0 zhntla)18I5^sf3Kc&o6@GhOzwvP_@?)d!m?x|!EBtcSFPGFul>5~G6F5*cg;o4b)) z891`5>&!X;rvC;KdbiXFfn5@eZi0+woFgIHhlbc$(UJ}B#@^v>b)`%m|GcAsD{C*cF-7Qiw-OH0^q%ZcYm z6ThruIXL0K37xd1KRt*k+Cx0iw}-rQKcHW3>OXG3EriVnI zJ0|9^VjXU79gxgl0tam|tmbB;TZ9jk(B7#Wk}fQzDCjJUD+Ld(F#KuFBBiV0mrAAZ z9o%6L@Z|v>EGdXk-aU~pghe&Y$NYg;Td`%QcEk*95F zT6gLRtE+1QY1-cYJ4;*J2x<2oTH5WckaquTuN%{L{>IbpgmS;wwY2qE?wemayx7L0 zd!80?dGxoIhWEc5zsKIwwb;h)V{apt`x`H}5!3cPZ8f&L?`^C{cn43s-H7w%eaA1B z`&&<2H+ZKS=AT2eevbq_y=ZSba;qDf*460#Qb>lT`+a-sVmfSZI_X#Mtb4|z?tGMF zY-mRR+>k*#+ia(Q-oC%@X&ah`Q13i7ly+{j&{4mA&wC4GH0@<5w7M>ZUbgRrq2185 zUN;t!TD@-C+^VE~f7*WdjhEY6-5@ZeJ@)YjKY7}g(|7ewNPCEjRbG2Fr0zQ^-~g|E z;M{{z^fc7grzck5erj!>M&@4IBr>Pd_QR*%#D=Ezk~TkPq28>$6^3DBRnm@=?#qNb z?zXo>S2tEQ?X`nm{X}cMZa;qRX&ah08hXO&nh%JoN~;_7F_ zvk$I#=4o3Y?VjTfZuW9p&h?<7r>!C;wK4}-*AsUf6HF~n`-O8a77tH*;*DTPJ#8I?$HJj6hv}r%v{$j;w?8FuUUl1F zM+#~h-Z6Cwu1cZfetXl$5$Jo`cB~lE9yxu0zL$$#S`BFdeei&k>qqogW!U<|_SXr0 zB<*FCgBw!o<#~H22$u~_J5A6RVR_nb@5BkVs%dd-ZwmvQ4pK;#7MokWPimc>w;%fW zKpIIJ-bxJAdcZ=1S$ikpW=%T|h1O+d8yvTHwmogb(jt4WtqP=hdneF+Bcvs?)3jg5 zQC$=0zwWkwu@|6g+N&s1HiVmBjnW=l+AFWMdRq{G^{V}iPk&4vO&iBjAImVj8ox?m zd18RICQHq$ar>J%qLvm{&<*MHtBdwGz6h*tXxcE!+I3;=;p_IJC~GY(Qg2<58qV8~ zBK0)wEMmSceK~v8ejG)+rNt4wEkk@ZYu^i8b|<7gj*F|MMOm<+6{jg#EG>@1$I|1o zQTuU#zM*Nj^5;yoCTrg4sQn}gF-sdIX?HYj5~tCch{MUSy%(9^(juwWgr1Xm`(83K zp0*drcgM;_M%&Or5StNqO`9gT%dDM_+fNhRH7!o9HJN|Y^Y+s?wKQ#(G$*4q%bU}* zscKVOVa{#oT0fh%MVpElcPt|^!J5p3*{k+`WCBZzgj|;qm<`+eF5IxzNLoK~%Btub z{aJg{2?+(*)9!iqp`3c!mXFHqjhN=;uu6w=4i6I5)3&`FR$5QH?~4RhOHbSPNrH*w zX}IpXbc1X>n$52#3w*>9nx4euO0L z&9T7w2%-B?0=7p9H4{dl+8PQ3HuQ>10tl4}d?Z|yht%6I_&qlNJ2}23>j~klU zV7x3Gspyv?Z{0S?Zc8t-G){3CRMH}H_TNqrI(874F=-cB%_gvDd9RDZLB1K}44=*}_eFpO%=P%wxk;y5X`?0~ia7AIZ=b66^p4vx6u zuozsWUd}pC#yhx<#GVtDALOEtjEK;cG4OB)k7qVMwLy^dR-W`Lc)&MFtKHG?0<%v6 zpg9AeCe{K$n<*^bpjLllPG0&AUGw&Fn!(^l1SP{-)7iTi9m#i2sH90Xqw{(ddjoqo zXXo{0{00ha$xX;QSk^P1_>eBB7DL_O#(+vdkSPrlN4$+5AVCUMADz&BcX%+Q)+7tzMSY&anG(kYni}5@so&ATK zPw#K<9Nd3w@1o}@zV6|{5FE&AW0-K(PvFm$HJlN|mjTf)RAT#_s`xEGRazyish7&- z;uYpE?n*o48o6d2s$##uJ~k1JLuDxJcP6fei0&oog|oIZXbQaJQ00QIe?);*10qf+ znZ*-tOHh+Kx|BIy;u9(iPTFvEJV(kUB1*WE;)avNf?|13Q-=o1A}<>NmlQUCJumID zPv?L_fu1Jq(I`7oMmDKeOIa_IQ#I{3BVSNU(;+hgc(u?W#pSdc)k<}di0SgYSDH8* zjs$OdP=Mv+l)1yulQ@p<^*i(@Fea1rD&)wCdD>F^olP`VaAmG7vj`B71HAYczQp)=W(fPFy&U|z{ z0|R9_#R|>GgSXJZ_KZC#JnR5{5tCD%D6OKNu1YpUg1QHJ)9Kt`HBZM%sk}o)o;?ci z6wpoYVt{Ca!}9#8dz2J>MPC#btC^McZAIp>k?s`O|Ju1oBCEC*x!5;NDI=rh@N#IH zZevXW;EW+2AQ+{8Nz4vri=;NfTYoZQRx*)ss&rLK|JJ7tWsyvaY=fyRZWJy`Hxv3= zEv|IV^j1s$Km<6S%g}<=oi&q9sYyN7kf~G4GA15m5*sCa{U``;Bb+ma_9uKrHP06Y zwyn&_ZWu!5amg(#E^=UV^$*xz6$O(6ty#z!%3h_OP}*$)B~{6qY(Ch$zq)aMYqfoQ zb?rfWZEgE@``&|%du^P`tZqE`^t1a9?rl}5LM0U{z+2z^bnU@s_u3zC-@e_(IpSt} z^V8M!_Gjy>+n;{A{^@6*V)1c-V+(@3Wr^X{RjWp|@&@kQ+xl$l{=GZxJNGs=iSTOs z&i2|G5Z+wf`fLrk8)i2UX{Zm0wDe`=w}+}Pb%y6%>~AcpeIfIZev_3YK0fr}tI5`R z#t@k`1ym(nn7OEV)l6%uYi4bAc(jbpu_daijXYB-7w0YlZU7E-$26+}G-YIoLyY@m zaS7-^z;$sMY(Oeoxy{aqT5Z|JIwfBxd5PHOwde(SEBRF)zE1j}0+Qe%rTGkT?&+4~ zZ<-#4+qVOXV@O3c{MYS4BApETY4;5%lE4Cc z-$ZM8O}w^2-||wKlpXJTwcCAztI46k0E^S=hh^_Q`^<~c$sK0T!X1#^J^DE9M-tg} z13E=X=n3=MJKTKw^>fh#mE6G7+B0I)w-8l6=as)!^Dd+!Jh63`i@w>_I;9_r&CZV) z-C)pY^DdGY6AS=z#7R+gl;uz-l)@cLksNS!$4E$^;n^F6erPpsHO+<4`$acKX>0vD zZR668%eG?WcDuIr?XQ(b58U`d;E}Fq^?!-!6qBfE{d^R7Q-f zct<@6#lQ`ty*H1S(A`rN0m9%7HkrSW%DCPl>%IX-rzAOOm>_n`@~os?P_Zc^#;-=aEh)5>8G8X~Cy7X0Zbu*AXscIgk)mZ|~!Gt~} z5Iu811)IQW*%~!+ zD7CcM2YBCBc7^R^4!22c3@K5l!H0gI$*6^gu(9t(RoQ;8gc(R)@96X;6X-9>O`l5zu%oe+k(f_l-D3&X zbV)00MB>z;c%t>5jL*>~W`KBY+wej&gK;BHv81lgC@F%Nj}-8Vu>f^&;{KlBQv|pCJ!z&t?r3u|D^ zLjV^#_Txs9OaVq&@^5>mk;HR%{FlR{V3B-RjQ29J3LI-?MP4+k4fmq4jT&nqVu?x;pUWlkozXr5k^p##E>`!7RI$=d6V5-{Z+NTJu@I}0ZPJ7ncu@yL z7N_#qjO^c>{}VRQaw*NEq|Fcw#YXpZkj%TURh(RT>Sf(8q7}FovS*WFh7eINOdu`n zohR~1Cbj4kZGIOUSp($sl9A<5^(;IeYvz^%{9wEt+ za2v?r0e~$;0-wZ-Im@{;wx#V=m)f{2V_FBjvC3G043q22V=X6t(h^RFVgW3culpld z8jtw)(E~YsesLm?8-G_Wt8`-|FoZyD;RY`U?}ec8o!7ENgCUEr=yXIZS&Y`!Nto1IU~6Z8@f&W2oj*J`FG z*slOZyN2z)Y6&KABo$qN{1hPiOSQyHk#o^{1q2z{l2Uj9l3wI;M7`uC$ST*GJX8CV z=^l`L`V5_L3|_C8PRG+$b5GYfMZlGNp&h2RLi6x?K82AA)C{fi z*gB#M$W|EJMVPW^5ku~AycKl_xWrXJHYjmX8kqf9fEXzPwpDZm2ii2Nr|i!fKE#bP zM1>c95mRsLS}n<|x<>v@CYBOETep<@r8RV)Q`S5%k`acaP#E+U$YEQ@6Llk>6MWgv zW`J2so#(8k^4#$lwBam2?ZUmO8>nCtw3e?7$Wtt5s;6k{T#|gP;RNS$CyR{=eSShn zh8!##+>EM}QLWSCYfEJ4;;?3@%dq-JS|HmLA$Xk{OwHBvWONKzK0K%^YH_aO*zh1z z1OSG`DwoHlsK2&E@73;~pAU{rmnWeBPFL@spk~K-tZ3`BRFoj5{AGLcAVdro<8f}} zWKEF~g}71&;GOn;_YAJh08_R3DIU z&}=+7wl2G2DB9FEU>RCAce$p)YA)ORxQ*t^ zUeEUC(XMW#>Mh7#0LO^%{`k0Tv-JXg@KdtRdjb1PeljQ&I;O9eXdvd@rSkq37E@Ii zaGBIBE^<3m&yyk0^dYpkACS#{wV5GQ72s-ASW?oDYgu-JcUYH5~E5`dq%qikcmH^7$rbfMTNbAk>_+m z3s*r)9^45vGMoh1dmtvDYOy+yV~!N1x(*5)EuM7l2WS33X)MlRCm8&PXfbnA*^01q z=YRUMpEKs||M=hkzWkNow-x^>&mY^(krn)SM7AkNu&ia>wj3rVZ0>V9hvMf-?hK}F zP1k^EmdqFo20$l+G=wPTJe@IrU6RZ|0+tu=_V~WhSeyb=ySWy{yl=s#1fh5$s%~c6 z$F?UJ=rx;7SUH>-e2ndE2ZgX#NFrE7Sl~4~C1|tPZlA0Ig?(=O6M{4H6ijiV1A5!U zRueFU=9tMfDx@J8Q5REMw05g$5yE6a6a=N6tOQd&SDPy&N-U`z%!*1k^PqxH-ZHW0^TSzLqKXu_q(%*sDk^?zHp$?eTx^(1xT)6?pkr|?sIDJj_ zOKg;2RF+CgA~h^KzVz)f<8s11zK!|;Rf|btxd|{47pbC8 zC{$ESMa8U?3X*bM5*2^kGL%A|G}t3#Xv`BQXHlSW3sFNHP9DVOfx9y-DDpUfkjOuj zDuy)6&Ja}VCC|vbgaFPPj^(O`Bb`V%wmu!xN~aim*6f95u$|g0NT4A5dpHjhYh(=^ zQ*Z-AdP5J!({D%sVl4gU4>=S!sbL)>r;~tS9%9qAFgl#9 z#E|sXvCwq64B}xYZR&Jm zb;6sFO<&=tNQ>~9`PXvVP#owh@sd{m-7}N6^M2eUrdsW#(?Mpwn2fhQq_u5Ei^5exc%(2Tq_vv}2CK+aYtx&UwEesX|Ma4P7V* zZ9f$TVVBDN>+j>={}TVU{+E9*``BOoulo1&|FXaToBsWO{%`$jER3mSJ4#HR z(5)a@PCC5U_PmSjEEfHKnBse$DoecfM-5u+lplr}2dUO=*-|02Vy9+lBWT!lRfUUZ z#S|qx)9B5r@&_F>I6k(}i+9oS@$hRrn4t9sv&|#Xl*EU|VB)C^{bkY6^ka4|vd^-P zVMV2R>#05eimnO8(oOryf53BCAXKTW^wWpbszIMy$HtqnTZ7Vf#^;-;A8I#WNKuWd zCPQHfY{QBQWQc8=#Po7eh)1X;SXMT}ny!0cX8==dt*4ACYoXpIxYj!iFRS2408qI7 zwUXJog8Ak(!(gF!tJJFQ!0m`a2Ld>2o1N~F_%eI!>6jrj(8=tB$B~DRwpTGcO~+wG zOC3P=Qg|I)4GP`Gz2GjKHBE66Yl8q6k%0@vjK&(f%G%|AHVK2^##4Je7Qdz2bwnhb zYWjs?QxZVcH0sL^Ln3ol4y=^}+eg<>OUsvi0~dn#Y9Uo7Ny1ayEa@Y3By>6n4sZG1 zYv%!ux?fdXdVkr_fFZO9{}%r=@p84U0>GR+>M{oB@BHLOkSeOmG4-sqd9s9i%K#962TNq1z!+!>@(yUdSLcj;F>-?FNW>D5*e>5Hb7n zxX^-ypMTEBqw}*P81@hjy&w}5ioS>z(D4x$wN4uxF>JaQKvT*R0gV?Uc~i{`ASAgK z@Z~xVm^P>qJoE*yQ!?4xCmcewz%46SLq`NjvXWT;NFBeVz?m$jP-6&MSR^wNFovA`lBLK2jpnYlBAQ2Hn}<}3GE)TQunl+>XjsU%8| zUo}NKvxlA95g;U;e#IckH9b3GOnQ@Rmj7b@H z6}l3StZOl@Po> zeQ_&K0crHK1C94^@l$|6Irv%A0s<8}wQypq|CS699P#8iU7Rt`(jj^aobb5vbRMLE zAXP{zVg-staKKL9fG1}B7jpE#_S?U*zpJ(nr;O!4|4RRa|NfKxV?u@$h7pGM?=;0E zZ%X;);JJZ&cB$tE)+h;~yG8+3=#Vq`{F6nKwxi{Nj*1ECU|X>3zz*jc!5ciLRo5%imcrI_x({+rDv&hRMg|W68U_f+n!s`?@ z5Kq-@&nLdR<`v?(2LLQ=C9JymbOd(~a9jW+cse5Df>GH80bq!w)wvP{G^BbJ_ENjX z6C`W94$_)3A7F^)H;vBb>(jKE z0x<#6_+W~hH*oA>jg8L7U~O>>ayViPK?ZpqZa~Xxo%PNgo9X5G?XkVYeTaCu7l|ii z1xy^kWB<7-b z%e=quVciUh=4N3HZZ4aXC$j6mxGb!`4(+ zILo@Z%xepvNdcm#f^-*WN8@23+Y)bLgEM|f}=o`S-zQZMD_z?(V?IHZIdzHDF`YkR#b${Ll&FkN$2tA*6#kVsL2;| zc6Kf3mx>&`JLv+G^<4GL+SVaOD@ozhprDX=Pz)k7)Jd^T#Rkj$S+_Tyy`_<9Fgb;9 z=y(Rhiw=vv(bQ3b?MN`8{U1f5FqB$L82H7Bl zshzR%Z)tkKjEuW^vzGlWqHGhTRH`(d<%x$I(gr*Hs(~KzTjAH0rZ#q^y}m_i5ouNf zzoOg~@HfER!I5dONtH*$u=?l^k^0npbdOi5JG>{15>{d8r{^PTbZp92BZ#jgv0@=m z?#3PzdYW>*fwwU&=X0WJi^F4Q$C5ttP99aFdT@p)yz;~nUsRF=eJv@fHt&`hyYygi z*56hA!Y__v>JH~)ov!psK=pUa`@W~am$OqkUAeZtiwj)|f4GO1WN_Gsg%b@*Md_SI zScSJBwp420OhsS|*Hu^AzZ~9dw_%59^F{W-(cPxJ0Z9-HrK%b*ED1x74XyDjO&mMY za$7=V(s{J=AiUf{Ul=N~EcXK(pl~5Yh z3L5=#=gIc&FLh~z`B|QZ1EcwFS{{9sof%bM>8Ehcn*p6In?G$~iF>$xfA2au3;%O2 zicDjSowAj4`T~J&wXP(Tz)jQc^kRDedptDTfnJTPkxX@kOM;-HCtyGmOiGC{0{i0p zbo`R095bf3WoD@N)S#OTV}DZ;`J{PQm8tZL*`$ZZ{5gw|75>G#ktsxC(WS!xLONMF41UJudAWf3+MzqV*M8 zzC>`uWTAke42vVzwV3%i4tT^tui3^J(k~BTo$Rn!Wy=#e}+jJwKuIY#@fNQ@ndh4xa$96wK|Chp^sjsMIR!y$+!~ zdi4BpJA))mpb6yJ;k6w2)9u43ok`H4TL$thj#NTreoY)w zFdEqyN?9JQ$B1aDJ0Y{B-|SRAnrIrzs4Q_8t$-ZcpCpans%#u1KESENnvf7bc~1h- z*hEM>bNTq;W$_dvbY}rVQ@nE#k?EbT2|C(8NDt+o-syTsUcU+UpdP|BOi)~Al9MyT z0ubt33xmlPMd)%wD~BW{$-?nawk`I#uFL9~n&F{cEDl3;n?Gh4>QK70`!8;N`|Wq? z=TT%v>wMz|C4D;RI*-acm`&UhGOLIboypLElo%%<5C_~wCz4BQTzAiTvVkn?p#Z$S z$rGX|8(;7o6oK4A5jkjjw#Q%K@T!W|Y1Yf_>M1|@`YeME;1 zZ4oM6r=wrO<<3}kDYN-sw>p1)9Ys*O(`o*+c|9wg_Y&&Iwnm2C?_)F4g#kuyIlwdq ze^xoMZmpO($@dG^;L5k(VsAiSZ%??Tdj(EC*@~+^k?*fP+{9}fMQ9`z8Y%tQI;O=4 z7nWw)Nm?(K38`MH$9LyBJRLvwe=SL#A5QW^0n4$YB&lk@El2HLlA%8>Jx~;OpL;NP z&~!T5$!@eTmrq9K*{H1KAsvC2WUA*1dI;~3^dM2apE{dQwx90qY>O$ICB$-$BS6Pz zZ*%LL&98T!e62Ig*i{^o+}exV{o|9Cw~H|pF6!W@8;9_}#EJR#IUgN^3FiTnBdXMX zGN_x4r0Qf$T{K2{)h0x0c`DEDjNLo-cXOif!Al1hi129Ih)p@KNK!-IS-&r*^Oidg z))1Vh(BUemHX(d5(*AFsW?}X&rn?#?bG~gg zzv*A#Ko1Nv_TsJB0;hnGQJ4^T^-a#_{2K$t6vR$Z(tJlUT5&*PK@J#^l8NxNvy zOP)>lFkd^*4t5^x9Q>_FSWfep6J@K<@_Hd5`i)NQlGMCJ5YycVmoNL%{r(&p--iKt zb2=XOL7A8EOG*!3KOCTXv+i$yv)!M)nvW+~L@h2SV7|XR+uM1>*Z*+Jqde}5!~T58 zML}FRs)UA5z^k`7KgH#n$1ooVOmZ0itz2!KdpP(Espm*-8n!Ajjb*G1o{Sx`Cz*y) zn&1l0;e@GZF!Vrx+*Sap;)3|rp=R{TFq_SDY*Y(CDk+O4@7?l?Ce91=q2;DBG0xjw zG+%a)2C!uCI)wjbGHUW=S55a1DL>MO&YLesh&nnH7}!bn90q^z7&fRO*go=*&(H6m zj?eKTByV!jqK#H}DW;l-nxQ|%B>;j`fmmUjnr3j|goxVGDb)8aA=HEPnO7`2_$>!2 zP+EvawM=#PDh?p7z3iUsvx~YeMl^I4D$6__aa1AEE2|kNR*r69+H7DY72Az|#%xNM zP@{2|kqgQ69L59wki*oV`oe1)wmHU^W`S+{Edy2Tw$$d_@eYJmgrxFCe7=i}TBEUH zRQzqK1MDcUu>eSC>P%YO^fK9+=(etarTb6SnMIP5j*BFQk_o5Phwy$x&p8V=I-e+4 zf4#MJxN-Q2aPUUwPMUbf5QSf9%;*@k z+Hp40KGrjBd1>Y=>`>b#plN!BH$`JM?sPivR6s$HFaTl7r=Id@8#cD(vw^(Q+~i+; z;+0M2%aiCqLJ}{e%0iI3khAB2*d%{bAY^XjE(=hIStS}P4_p_8#yb9jf4}pJGM|(% zaM$CTI!3`Vi4eVTbpFy9NL=jy-$h&cr!x?BQLW$N5{HF46@ca51qT8 zY=2`HzZ3X^6Q!*3ipv<~S7Mln90R&pzecVmQGc}&p+n?iScZ$nbA!#y+i7?in zOQpT2>rEfFTPb$xf%NW!_bOZ?_;!M0{lS3FAPWcBMQPkvMVZz|%^EyK$zuuLt=S5=f%PldN4o*dv&;>xU6FWIUsirt2@CSQPdF9xd5OO9% z4&NC@Mxy=k$@~Ftw;4_1H`G1HhjobrGjZjCl2;K37}>y84jzPDh6%5orJ8V&Hhbe4 z?v{*4JGibu-vT&7ZY6sjM~YyCGO|Y%dRz$|ELBJ2S>G0ssiFowAURoSKG!nnCl_30 zFiZ1#PJ$Ya^?MVW!yzUPtgkAxa25uU!`|8Th(g29?21NxwG5}ri(i5!)|@vx`aD22 zLi}{>h+R1V*X(TMo z+J0+9&U4PVF@mBO!o%crv%{N-88@D6#PC(=_>ePsWC`k7(|)A&0GNO*23~YgWk?nw5-% zo}ppQFsp%nXw&+ejXNl5L&qTYRtYzmTx}dCliHD}2N_2ri6*K;47TkaYv7KqtIB#} zTw{@kkn_Vj(IzSK5(PONawZ#796i%JoFzqb(xd2^Z^6u<<+tNxuX~M!iy0yKhPm-s zjU>oxMJwqgvk7=5y9WKeYZjJp|x5JN0%bhMoaHvnIqnBXlg!Qcbyb?~Xq9 z-}d^#&kr#Uuvy^&ohtUqz+ToV+vPiCiX+5HkkAOq95^)hxCx0-{n?1VMhD!Wu?n6U zjNhmrqP&X3Mfd@y(3P2pfbfYOq4aF=qI=)bO$d?9?*Oe1crw9_KB0;uK%E#P&HG=S z-6v{mDz5!s_j;FLV*87*4Z6zsyTAxrrA7N-RTQif#h?#DZ#j-QFvhy_C}tl!1ZwR=(H_84QDF>;hDIz}=-Q))8HF zGWDc5eK*af3e9nFM2n5HKZSS+lrD^ARih3FF70N%MAz+n2R+azZg~$XxBO1DY?h1b zMk1Z|4>k{WwjS-=^Kcxc0uMKz-rr^ck-kcJncFa4ti!$oOk`|GNwa5o5@(b|O3M<= zrs3R-xrP98@I#e(A)o|fFsY<~u1&ws&EQO>Cv3QSZC{} zOPRENn$CDq=+1eDXF?l7Om}xcrhSIS?-ua6Z1v7|SG7P9^aha-T#1+7nAPzijz6$h z=*vsuSvT1ScJpLXod;i)V14_#NP9CIR^U!w&LNTxLQ{# z1=izVJ-c%IXK&A)*A_HPXA*6f9O?g7Szd4-dS7CvTy0gQKA!LJ7c8Sy?L}Q-+fG<| zwf?%iTgwXq0}Tv77Oq{~b)DrUIN6TNX4-2jB|OhGFWe526xCIlFwW6BK&w~t1fdLh zo@j(t(B3kQV$|G<^__@K>d>gkWt~^Aahd*_)kUo7h$gZ$nGgSEoGfVFZ19gtMexow zNsQ5X^%H}^8+YOT8$1#S;{u~6)7WQlG(K=qk%#&&k!kWl(48#od==T(eYUJ$;fp4coU{b2;J*d5jG)b)x-kg2s89M zn8g-&MmaaV@1`j@aeCF4APOD$eR*glkMhYN4P_5*Q2_ zz!zsQC=vn-TBc4y=1Hc0S{_gPEuR(R=d!mN23%1pB}bf-;A0Y`*QDJ$@0?z0zUiNg zpm@Q+!SJIAP!*RnMeiO;Ihg$@p2G$q)N;FtUIT*z<#^a?eoH+y3!iVq4Lu5|+ubq( z4=~;IkUwS*B6#yU4U3&rbVDaaF~?an9|}OPZ1f~-aZIi2mJvgHr5q#y)qw;JXj#zy z`jGuv(S6}K%JN(6qMi!*D?V@Exklz0B0|h1FZD;IL!Q0^%$3GV)6s6lRsslOMOHu@ zB0&1!r2m^n>!&U4*7cikR>ekNRw{oJ9?}ni`sh8FgmhqCY7UJn0pK7m9(8Ts?!gEG z8o&yD663*&`IVpt+!Cg}KzMv&qIQgxM&qY^O@_pS^DqKJ;dDh7JcEsF>udA6RRMN` z6Z>t=RI_x#_B#HsYOMUUb+GyL>-z_MYn5h>m2c-iZQXme^JshP@%FyAVR^!2X~C^W z_cxyu3TBNPcV;}RT+X%{^yoy$%SLDr4JmUWZl1X5axA4b_h00AvePxq4QFj$7&nW< zV(fEab9B6iReIKvLdqN_+j3VVPh|Vzl4RugdB1l$Zopj22*wS;MK*&(CeZAo8TiiB z2!tnuZQ9#wQl;U)-;Tb;d*ix{Xy-wxK1Z&KV%dDIpje=MCB>xnzYvNEF24hc>B9Jj zwm$wGe_PNxuG_bAQMz7++t{7aIkZQ+#2uDIyMYWj5egbBro}^E1Y)I*M|^rFt)9L( zW9X<|7`Kmj@?e^BmbEVt7?NCH8X5r$1dSK#^3E}yppaiN*noaZyrxw;^O`)?th z5-b}M&L>^)N?_sa#7l|`VV40TPEdTcuO8GvNOFzK*bDCG)nAH=7^0|5w$6fh53We_H+cpLnJfpt!W5;#1W3WVbOzBs-tNxXJTVE zn#PrEA+U~1V=P0sPU6$1iUXCrufvN4rNT}XYt11CUg^K>!mfr_m4s&>Ovh(ie6d_Z zMsU%Tuo0)YGu8@$WHW25bWhQcH^wOS$v62HO+Ix)AQ4*e>Qt*qvo^Sksw$s(YwF~_ zWvFsfI-rX%*j12#_i8INVK`*7*hq=iAzmi1AjtR8*Tw7wUsIZP`jx}7q(jA+iC9pHC_`E&L>;WQ%W5lX(W4t&|_+_?V5E&rn4 zuAF6KLqPVphW&Cp%H^^Ki}+n8!wTT+^Zp1&3*v_W4zVK$5+*r?0F5D9dZ$drysu+p z!=B>`&i(7Z#wa0nX0UZ2QcEAtC%|%TQvuR5q>1CV3~ES{0|X5C=&J8B-{K|9m_0GALuC+i3M>@MNdjzDBQ+9Z;}$FE38JUOOFCA>p!71j;h z5oGe_Y}P-6&8a^#PN~Xq)9^$*mRim7jFmSU)mfQw&^k}UG~|oHSuYQ$q8eIy)M3}XcC|oZX$3@mHjf3@Fs)Uq^*9rHW zM-);b+zV}B@)adL!f;LCBn~euYy`1i!CnGwozCYI8a=r@r%3AT#rvZ?_}l%)CZ=Eb zG>*lb(Z_jlo%8tmwILS@>td^8vHdvpu;bW&GRK;K`F?8Pf!Yl)*f^*Zzb5D zRgTC{7(RTlEQ* zt=8}n!;PGa$NhPi{_4-BgM&V%AzX?lUJ2s2J#sr!Q~4zI_Y6js3SB&f203h_mwYnPb$)bn)+OswnI-Nwf1MnU?OyV{^8Y}_;ne-u^$q zGv9cloY7|cU{Hh)8Ndqz_cMS;#x5DZ#w9}Ss`V=%#Y09>jL|>WDo9UBMAn@)t~o{> zO@a_LJvYqA_nF@lxFyb%%*q@>=JL{Ljgd!fcfy)g%bt`>mpm3UWQl+B`D1W@iN&-F zJcMBJKMwvOfVE`M7g8$*ET3-wW|g#)l*_H!KDfJ zd>4f|aOJUsqX1zw#(YUZRB4?ch`UW%n3$3#($O^apoB)){(j&x_a5kYQ&&OjN2*Eh zfmKkWqEeVKf{(WHLNN$T@IvAX@r%tW}c!+W5RFIp{bi(@@EjI}gA zCj_3pz@tZGk|@R*d_!;{+IImaPytg|xKBD?>*Dk_2v1)Vrom>~6B2}$9|2!rYjbWvEdGb({IZmQlQz3Wl}7>Eh_{r_ME1HCf48MkY;BNCm(XVHfW z#7qiigJUAGhyWHNE2fetr8f_FRjQhLM(i^5WkV7WPqQj&n!U~W)w@bF7L`U1iy;a< z-g_21TSgm0#;t_8kgk}TRs9!p;t=db7v{zRUk7rUoiW}&RVtjaGukb~^W*DW-mR5b z{$y4V3>+HDb{ktaZUhi~oD9ZXu1DRX*~^+yTlP)vB?93{8I=!pw9vlhgHa%dsLs{$ zCA5`SDJ{wLG2{J--#+&x4PP{j6}`1e#>4jYFaoX~>=RdpcG~gOcq>5xPGhGqO-=>Z92*)9>g8efe z`o!=Vwy?$(Qp41Nx=K>URfy!|&fS{!bb`&c#JNOI6)_{Pg*|Qbb%gO7mzTbJdp30W zdAG?xu~0j(w}WuG+dQA2wC^;(;;oo)+sQDSG12C#C8eskZ=q#^PC9VQ`684$zRTD$ zu~B{$PGhyituNtxQ95u;&c`cqpX>2YIOeV>672Xw9_9LQ6)No>H;(*w0lj5{)e}4J zjPlcqFdS+@c~1*a0_y_@5lSSSZO!+nYIxPQAcL%%j#qwj&S1QBY1fqzb5N5{!;5YN`e zOt*a0q*M#-j@T4l-H~;yG2?>fnBxr|=%2czt9X}vGknEP@RASSvUd({_#Bv-Um}by zqZ9aj&$(PVI5i#l*LNMdS!YHU@ISil1q#JQ!?{+IsdmipU`3S-qG(!N8^<3>MNuM* zioy)kWw?Cm&Kbivn8;I63xT@U5V#b+;H*#fs=Fam>kWQK%e>EWoC`y?^bDsa~=^5Z45AUG4rD|?CWc!VJAggbN(4-WRi z(jlA(_(8{lbQ=0lH;89GmVVvzl%ADIz4j6s1Od&*l3?}d8|N|r0G zd*m0mIiY8W1wE4ZDuzRRdK2DTatfZ50w=DEi7=+&y-ltWtHoq}qO)i?%(|;0g#xZX zAooMX3AWsaZM=l{lFtD-VZ%HirQxm6Sb<5{HX~S*`yK2&R-QaV+^f$KUbnNhLXs+> zs%U$~DPb5^O$dyai|{xhB(Z)%r0ncL`mnuWc$sYCNV$BNi<4z(=_h~jmrH;0$A9{- zmjCF_{_tP_!Jq&Bzxh4B23!3eEaWV$ML2U$T=UaJI30VDWmR50Ojs+3NRr3-&05$oN?Xk41i()onic+A51I7t0aa85ZTb(+I zUJz%V%Sa)2-O~?Q7AlF?k^&H!GVgVAA};bt1);7lgJfqoI2K%6ECs$!sF~;Cl!QeT zy?~Y^u`#3wktKoquTtWyHyupK*oXUDPj~hX6r4p=L^6Da;3Lp`bBvJ?DD>W$jv!s! z{hcBS*W`vuKq@qmYE);oLY|UA)kg_>;KMk4Q}0k+5v84aWwc3krNAltA?9 zDj#4w0F2EkrPB8DyINieY(Tuhe*6O{imkA&j6ah#6DM9|Zfi!uXdeku35w46#|3#h)^uxjI9#Ux)#O(M(wPa4Q{FX7L4ZC#led%HYZjg-6UMR~Z(^0nCe(%vIL-Ym& zqNo}tr1r*uLc2{S5L8{1bZW|!n!gRR!+Y%1tmwJmw$(+T9$A=Ns?N9q3GXZU*<+YS`8)qP_?`dy-8inKO>74O$G;a2d~Saj+6`2-e{(99wQnh>)B&8`{qW zXaI^-we=N}gQTG5rpYR8pv`G|DjPy~0*quC6$M<^PD9dg=c|3L0XTluR4P-byif{~ zJG0HgxZ>qkc(F>R4;iWVV>+q8Y!P>P#KF7@nw4vsi_bWll;l3Bu3cC;GU94z%}IeJ zmKg)SkxcP8XncV^Xqa>9czGi48ao&AZ^f($_-2Bxj4(w~#q?J(@t+c5=o=#6QhamW z$$JlC)nM&n)CCds9;H+Th1j4>NR|o;xDQ=H_tS;Qhb$I?VZH)uwx(;R;C$632!qd> zEvd9%#@7tF?fVn0ptvx3iR&UKohIeQ$;;V77#A+U{KKjCJJKviuhcC*Ehp%Uy6Z1=s4$ zSZ5+F!EI8;fXQA>^e`#r6CtAhlcoHBf3c+h`^zQ$-@jYZ|NYgH{_o!}>HmJR^l<43 zdjHprr7s#wUpAKBHI{zx|JLj;^Yp@nP5+Ww9js@ zBM@VJ3Z#AZ3195N17`%*K4ZnZjEW>_`oM^%GEYkXaC12}wR<-3M`$gif&juc3ehKy z?gG#j{F}EJz6+j3%P7XQ%z3Mdm_;#Hw#nqm$R&WH&x z1kNRF^37$OhA=WZQ`vn)SLF)_T|5T{FKDL1t&=Cd$h+4^rKvzX(w|6tjMiD~41e*t z*PlYCI@`YhrQU9x_Is~(N5cyi81rEl1`z*RAiNf&cI3s=Jq*EFmxc5NR20Nm9?|J< zhKpdmSHdfZ7Awq<3 zt$@V$mI&qLB1S4HvY1#JC7co6%TSD-T4W)?w8%n|X_19Q(;^GWCPfw#PKzuc9i}Kw z)bT(FnC|$b-=$C&(B;P@pvg8^#jsz`M!iWAd&c@9p|}(-GV5bjB#5M1>Zre zO4J4j%?ac$d?zul?w&BwrSkcRQ<(WMJ>!uf!l4h^+2DI!SX@}_k_$9KaC?_)jKp{p zbR_Emyg~HqHZu3Mdb7RDF!KA8J}fgtb(fiFLY|)hf(8&b*zB;d%@_EFcag6J%h9G# zYxDW91R7ADPw(F7zJ80sNMsBb3Q$ian*00r(^M=QnwXVEs+GN6C@h@;j6(XX&x{vM z9JV_L{wH(pM&*&4{;YZn@YwAA;?1c5gL6nF?1qxf~7JJ0ZmwNWJ(L>9J5 z&;q(R+ktEBxB=x}O~OdfrSYrf`&gYX_{?SEI z2|l>|_yPY5>M->cG^nbH##qq(lPeHlJI0#AqYe-7s=7RrffG^G(kf!burj4cqPnxr zY}f)8M|$mJu>H}wJfBBTzv@EZD-Ay?3NZE=R591KSwiog|&I+`3s~oUEHI1&SsFsk75n3v0J~evO)J<(7 z9LoaAJTxz-^3t5KE-nzk^ddDKU$5ied1=|;1J6SDb-N%&m}37dODa~6`I&2`&`x`2 z2p8hnX&Rj^RaKqcT5_k4qp zA+KSuF2ny}75=em-UUs+q!$mXdJ$^o9g$Z+cv5{n$7W>;xjTzKW;L_n*vhx9g3?S2 zL+;YQopU;eipMf;uEfqryLeicYM)$$PntDr*{tgiY(Cz7eovO%v+?UAF1CBSds|Nq zxR$`zs5hdzzPI)0@v}#g)EnYqIwU>%J1aE&Ud!Bjyu$)VXI!iBAqzIXxO6^P`$TpT zCu^TjPuRS_&!XM_jCqeY`Ehc_hf49WVP8~~pKd>WBAb%w@pMF$DqPJ$*J!FTmlje4 zt1bE}QH;zA3ksle% zgP!V!t%MFV0K^u(H8h5k`71Q01sAlX1r{_Fsd$CvV&Mf%#zGa%x;dMwhDej5qJoao ze|pyPA5cd4;q!z90rKmm}D!;Z$n=!^;hs@3@bHDYJo1N-$=*1ESYiei``AaERT=q1`Vy;mTT5b=p}%J64nwET&nOW zS^bK97bLmi8IMkU;iIfjyZ9l4s1kgc2ovD^k51GMUYTV)B#Nri{yBx-9t!+ob^1%` z*^O@!{4YzA-7jMn-nk(LSEC+FBD`I=B_pAs?VK=Uvxs{r+fWJ-0>;uYR|wjD439OS zBTC1yE3{y=XOFK)MroxA3EORzmki1%M!$uV9B-kiASoMQ(jw{PPpZ|*vb1gxXi8Mn z;SRx}=wu{HaxNx9O^(KzNTXtodka*=r>a^P_~lESB>F#SW!j|~R9-8UZJTBx<7xLzLxW%=|G2LXe+=Kne~|CHzy=^-PY!(< zysYO@yob>AYCJsWZU7Km__St2+{80a>DCIs@ydq1G~?HVSO~JQ zBj`fa(8tB_l^&#G@^EEx_05rHGWa&?r zmY4o)>Ccz`EzU&$-O_))^j|FfS4-EHZYHD=O)i%9yX;YD86CnW^8u9vM{(sB z6tD^*%a<2nb+n<0;RXZ%u;K8n+2|A0oSD?&#)oihfsi!mQfSnCWg}5K9Cg_#=f1p3 zHR7!e`0)Dhyrwu5jO02IrL!c_^WW$w_F*jt(_w~~tcsH2aOAHjVLp*aD=thvV-Yqw zAcFx^w5%g2>xiL!vPh(+aWAfgSb8L&a=Z-^a^oZc&$6_!lQ@N6&SSxj%5SFV?Gbr}?M zT|M?_7u?m~Hx0uYHIziC^8e7ox?+kBF29BD$XMIQW~%mN7S+p4&HV(w>wE_Qs*?X7fxRPW|tY^^zd-^@bK{PsF86ah(hvG>GMEDJKC=epc%y2TP~b+v=UQZ6h)#b z=!iAlnYk`as?=>Qg&k?mN#0bReMws|4dvx)kmcEkW+)q+DWFXsV92=yAna8_QCTMi zAtf&E;aYik1d|6(c}A5nB-gh^G*)KCv%uR~Q4s=-6G;5#7?+BMkjjc|Q)QWXwI&mR zG-VmOR9=E7Syb|NF9(Oab2;nCD>~)m**O5Wr|Q!xN8nir@i3-`C2p_EdBj?4j{cTV zNyOy?2V*UdZ~~1Ig%)c0nYRZDwYG8d5u531J7P0I{>Qmi>Zpf34ZhVSua%wYF~_$^ z-y=Q=pR0^1^rB0@aU#M`b*SU7T?+z^pMQHX=<~P-&wvKsI)0{Zb^LaZI{97p@oolx zSwr8+2aI{$Hxf-i8sOI+R!ZqRceP`_IoRU+fR~CL+7f) ziGnZQIiCjsRSkk*w?JFBgDZ>p-}OfQlEDh8%;^PXdH>|MzZHTIbK51*M*qRj19Xj0 z3h~i5Q9g9N#m~#o6%S}NYX6$uO3y;wpF$%xw0WkZPlpNi$o$Hn5Bk`j;k_c&IiLR^h;F zq5)LM!}`nH4T#7nus0ar{R)+FTr$41yiC7J`}qxj%FgHAK>QS2@YjFS8@&_iJRZDX z;qBRdxGA$BxDi^=8Qf^31)MYKwhLdg2w0EoQE2)ql8dEg;1$1@^rZ;+6{jLP1AOX$ z1ZSw+62Ef=RnW^-@3c?P($@K@q`XaLV-|+(tpC>(*w)4ML^do?8eS6ibc)dvME(^e zLQFIhj?v8QNEL-dHq!X`VP)(2Iw3hv493 zfO{Lo)5A$ww2`ex)zC)gADG@mOGAT-TB}CZ!p% zd~E=rvXZ04*9MbHI{K+6uEODWm==Vv4(2q632D&u-(HBQWc-tRJQk( znI}Ry*md7Mmbl_-WXd}!dc0VwNB9Wb@}hM6Y&XlNI^R2-@EA!ct-^{5 zb3#7>M-ivDrO8@LPMukQ-N0f(*Pq;5rJWglMb5jdGXh#^*BC4xf(RRb$TN{#km|{E zp@HKBV=6D7U{^g%gb>b|T^^`Qgyn&%KnwOU?!LBPJxt}$AI0qqhTYQ(tcI3}^OA0V zQ`0O7U~kY1(Lb|~_wUnBuvGd9A0V%F+QUr8kG$0I&FUFWjb(`a_jvUUHy7>Gg&qnd zNtAhM3f_T}2};rcHFia**z==*ABRl9x*k_Ia*C}7F?tuKM$QJzLxs2Vbw;EJk3MyU zGxG>2#oxj`*xB9R+}Ymibi2Mpdm$|3f9a=jL4eR*Rwk3f5AEqhhcG!AsZo%a(5R!s zrzQ2s0C90gZU#)Ac|s^P_#9GCIf8T-zeb*FNX1~g)#p#we_CICzQ6KhYyDt%W&is< zG|YgXkdT@G2CKqChyZB%Ky6W=VyJ=F&f!W~uz^Q6+tnr)9^AaitZ$n}Nj#bEcPIhd zTxRK%g0kUFtA19!{tMWvL`^*80_cZ1W|&c@^GcelIS(BV%%g&u$UDf9_}Pns}k zWXQ;oR8AQ3vVX*ofz&H-@BMF>^doSYE4 zvcPmjfO~_H&GZJ5_cs_E6R3bU37?=Uv$YIw=O&bEauZ^7iPaVOW_xdQYkhlv0qZ*E zY-8uy>iWUv_UhL2wROC;Ix1Q>|IjKHpKjns`wtIp-GUDA2><2&VX=$Eha`3Z7T)rL zw<#-lSY=f*naruU|EekmjtuKOfAcN?cU=AUIbIX{2xlN@nY=?C6lbCqZo>UBJnBrG zP56eo9K~N%0CGB57VYwvNLtDVla|^C3g}r+EYfsttW9|!4T55{6SNauZQ}~9q^Beo zqbh@{5@2d4#aHbnL%tJs?1emG^ebo+Dh=8W6>1^VS;MKRKTM#~u=F_I5 zvaXF+dG2QW+4|n<&eL5;uZP9r4)*bg4d7g-A`~S|pebV!FBv8(YFmnT`jPy4)bEZ7 zf*fTMQSx-Ptx@i3)wd!eUY#=amjJ6YEzjzeq_tFPn|lSE8l3AP0)QZUnbH^;3%Q?s zI#68ODfS0L+~vX(mN=umVeFq}gyr63xfZ`Fc-r~`ZwIaa&S zV=*ZR%_s&xhILrAx9nH^ZF;YpE~ij>Kz{BLciCI@=ERN85+81M?JnGG%TzL*vNRz~ zRh`L#vc**n%N5#GUKMn{JWm(FkZmGJoK+|krU)Dxw$4t%3F}ZM0AA!-&R*bKEf{Py z>5@1ZL5qO(N>)?IrAHrsk@qLmNFiU!@$8wo!Lw3XkP}58!Yi@9RT00a>vqZk{pzbY zHhQum2V>pX|4K?WeQ;Ubdus z^;?)qCBDG#=(XPFBEYfJ8A^nDfcU_5kVHQJL7)*7YcWwf#Ug}U*ERpzhN&DdN0}_T z0;MYDG6r3M{ir<}oJ1s1A#zI-ePgH(*OqSjcf*=TFK@U2i+-l)lCD&+S~z5~*9%*; zW5*^AuEsPNS~9KmE>fmy?8@d&=8(>OSL?P)u@MGRfm3oq0-v#%M#51XvGumLXHJgR zUx$}3MC99A%>4;@Q+6`OAWdb4gVUz#BPs4U?bOV$vA8(LI&G7bO=ngsXIb1P{G?Oe+QiYZjT1;P_d%ajzmw`l=O?#c! zz4Tu3;1N0_fyR-~kFf2}3PT^vb{J6fh;zle^ z9`u<9U^+z8!G?rCC@wLs{gr3mt-~;LvkmiM_~uc}!tR@s&EfH=DU0cd{fNN>%c=_h z;eq|MKhqoZf(<2NyDTJH@fCp2VVE-MW~r~>m8}vupklH-A!)dpiM#MnvjZN)^iL65R4Owm;vmZ*A@WX?J~r2XIO?aZ@xoD;AFn zjL|4^N|DJiir8VH6(N~4lm^Slqmd{NPjo~>Te|%c{{tY_12%m9)9Ja_YSJKDC?;p* zqouM~`n!75UdjPCF-24$iG*8|2W!c$KF-7<)G{7TDK20l-=ooVq&8D)eQ-Rapv8E1 zSHBM^FN(ab9JAsu2epoIqlZ%&cZ+RU9C(iY=*Yy5?`?|3J;iWFIX&fb99czhn~Uoxzn=ueUM zZ}89PJdQB$Ii}Ad<9!OqiommNJ#x6yjuMnVDMPe)tJ~GR7L%iavnX7TK;#9S`4%`1 zqK)eK5NA<7x471bbhIwAi4EwS7kmjA8bYCSFD=gm;r;uo!GMF1W*~lIEW^))0vE1j z(|HLZR-QG(u=4ElL6}UL3ve$D%y|c7t2%4h5qpIeNIOMg>nzs2E3IuwQyo9Kry_{) z6GyfnBP_0->a)vE_`=%U#QE4IheQ4fj7qO2dAT)7I+1Fg#dY!C)9P4&7cvg5TnF1_)_;d|yahHh1O`mD8x<|I*- z4jgq#9E@5<2;jg5oIPF3x+e7MNzn*9%;9l2Nj;7FuL0aDlV~4F#0n)!U8CxdsPUZb zHdE4RZ^QM#K#y+f7J?uJ9U{7Qr@C{P66qzhLhuo4kw&+O^`t3IK$4FM2qs4xsrtfr zWx$`corcQM*(0*lt29gzRne_A*$)9XvX(b)j%28fv_==0#<>dEiA)@3%PC}Q^T}R) zPNXKr0@KixF2y;f(yMK*;tr}3l*RJ%z&>ukJ_+U zQd#5r6gD?S5oA6^1npIZV;as4oiU^VOFar&aNEDCsoN~y{; z%Tb$eDBucmgi`z*ZDMiSWiwm%^1w{0YscdIqPu8|lI=B>r8(IsLN^bV`SQz3Dc_+Q zHKd9-tdvgvsecDhS9kD`6El)ivZG6J#En6&ZUXmW=wYSCset8dW2zKJW)L-vf;d$i zP}n|mVVNvwN}VEo`*iA0F{7dfKI>QK>(d;})!=(BD- zL5|QUGd|&2(ZyH$c0djes=T7!#TtN8#L7Rm_%ssvoEB6hTt)3>Z zpq&V6_vHoNtzgO-*Q!1Ff{%2X`N#eT*xaR{RM+qG5$+H0dlkp0&JMu zyyh9>tR)T6s9$KO7_w%(kUy*=u@R_Bp22l)?_vyuAo_Su5y1j>#G$}&G@Q)2P~V$m zQCtWj`aB8Vx5=Dr$m|-l`mry#;WQXM?6JBKMRoELfH8I_6#Ma|j!GM~TyHzkT(q=g z)WL}B!Y9u8thq**s9~pQ-|8$M7iWmJPCDefwln7ccF~TrT`V%bwUWU?@kPNqUm%dF zkQVU7L|pl`qG+N{hqO+C=tq%+#<9{HdZSxHg&Usr@xof`1vUjMIGDMlH$9aCe;*-I z|GNhmedsEoWfEA0l#^)_FN*4@8=-KA6l*Tdu6a^I0m@`S7`TI#ue^;EidYxdkX==< zgD6=H|C=>gg^Cc|uqtk_V--=Iz=xN~3rr_*s}=Zsc2HPmV_ybI5yILVF2S+62#vk) zIeR5#I{pbU;6GzVr3L>awNU{5famslA^`M^wm~q(j)hL>eAJO+cFFJ_GpW^|&_^@O zp|;O1nIT6ag_{xVRinV=~zh*_Sg6J_YPnVHi}gq>BRIod*`>Ij6ML& zjJdPOj9Eh*5Hfu*p6B1TMvmSfew@)MY)cnoLK!J_^hOCaErzQBT|@~;3X-yHp=Lqo zElT+3ecTbk9pI!W8U(W5h{Xsu!soOo{|m)}6|uTN#lxFitQ62C$XuA?(nRw>8;F*r z!r_}v21)}ve{5coNCttBWoev65Z54Nh&kI0f70Uhmxt>NIw$U3w<|iMZ~@Q`Ic_Y- zIdD-CRA$jA~#MxV7bJ_gI)$k^FBbB@s} z3ivB&C8?lGq4sXcT#4AZE;ul!G15(GTM?qw2AlMku1zIw-nhapxK4|!MjoaiQKJ=5 znQ`HG)w@&@`?6d?uV7b(#{Uo;G~z%1G1mC%yg4l9xdmEE#BK!DCT#}V_nmGNgehvS zFbS7bMzE4h^#ojb0+kPE{OVtm4MIQZWQRThW!73%k8NH9^OX`jEONdR9^yM#S>-i4 zOEyCTCf~2uS%zAEcPIxA^w98NXV3BmqXRsw%-FY(N&J?q8 ziE(4wo+K=~mol>snxOoF-kqKk&Krx{XmtUsFy@SJXf6_)- zX3!p zd_U%e-&&R1;C6_H(d2uqPv%z|a66Fg0ZCt3q3snx z#Yq7mJB5i0qA%tRKnFr+HJQqsX(cwJaz6)nSlssY4 z`IkfZ2J*jZqC>Gq#oZ~52Jp0280TVfN4v7QN4e^p%UWf!!K0#6%yG*wMK)@L?|QaL zNB(hQ`-mTh+^svhK*V4OM53VB%+tNWOri!Bszf=dE@kaw9jN!?tMHTsjBdk-*$G~g z!CZN;b=VBE%Z+#ynb*eti9($^CN^sIUOB|PNz$=?SHU* zw=@TfwsKrjP=Cfg^;;tGbEOVajiCi(JB6KqL{GQga7$N;WfNeH93kcko~t+o>7><} zy!smc&6EDnvYTo%HU-aTF=Uh8dKu324t%USL?~iplJ>&}q@OmgQ802VFBey6#Xx1* z9}(pe@33_Ll0Akn=-Mq{XVkd1_6n1K)-NQSB<$Ji7MQO<(*`GWRKW?1$=5-P+#})W zONm~cvrFFe#%QtuWy?jCRMJB-{-k71P$saXrUEH0hA+{=jb_TWq{G63Ce-m*nGJGW z?xf+u8$FLK#xE(#%2MwOIkwyMbrx;OK%AwThzR(K)A}h$3lo@Nt~QHlFPubtCvzwv z%9MoD_dGO3&wJlO2J|3^y5-&F<*$t1dtAB39nb5H&WHM94pxp3IpCt~Pj>Z^4*oz_ zKmYLEWQ2#)vn9b$hA?7K*pKl-F=A5h!Y|3g1yvdZW8u!n)!LI`tnv9@L?g9}z$=rJ zi!(@n#Jj01D?Dh{*iFv?xO!d~Y9>EB;Ek%;xI>d%8=3>NJvK}Q@Fq-H#3$4rjaeOJ z;;cjRB$z-}w6^JM*=k9HlYm%m!mVZUD{28d0z0i~-iTl9{B-CW&@L_s9C8YLsUXUq zFN+%)0KySqs~d3fSA6o&kp@3j3I~vptj0<_>!*Fr7$j+}vYhJ}`sW{JRPh+z9AoZ( zPlv>Zbm-8|KU}Jn6&3|BSHUac$cC0eFSJkr29CRrq0;q+T&jBVS}0vTpx!x%S#y`c zNmv!{Iuc$#Ix1_rw^mc$}WpR|Q#lmWvy$IFD`z68_G%cT4jTcBX73h_&WsNy7N5RQ)j_rxA zy3b{?{n6G?bQ_x~a1pgO4V8+}Vg>*O^#?eTIXBt5s9kAz~EB=J5i~%-%+u_qp1;MJ2GS*S>%ugb!c0 z0r;$9ua3NRT$n8ncKLR!;1ISCZx=_-Kf^m{LUz)J9j^1#>|4W&vm=Daw#gpe^&&_0 zB9Jy{f~Wbm2ec(~s1{^hqu#I+6r;6Vy5S@Uda^AFVJwN^l;O^XyCAt9#{Tm+K)bXeyz>VtP6fSCWK zxG|+4&MSzN<_sqUtBilJuO<|)W8bBS}m{&@b@V$i_mXdaUbc*zM*xdB70()`E z25Bu*T^I}6Lk(pYOtq#blbuzU8Lu;zR&oVg$p5X9zHm-U=9^+GH1^`Hi7RC-w*9EPS_;t2H#= z(&wDH56AD^G>CwTu%Vx{(UgNHW^7w980MTqbI&>in^q|%Pb(m&H{#x-J%L1q4l)@Fr zkj7|X*Wr{GT{>-o@BOuHwZv9{)<(d#8JsN=ohlnv)0X`38ZRA&gwZY#wYMOCpnR0~fJCPJh8p$N()7(x>w}Phj zN+J7gIiPUtp(I0pS~__y$%~&^*HTZeby=TtvForkMj>!_lEIr1xK~+A$F90Nn$TE^ z@^cEK-z?r zjIigNnGDx=@4Cs+14--|(=B;Yn(ICH*Nz<9ievGMckphV{1`hmRT?UTkibFdylru$gqE$hsmz z>tkh0034Lt{dX|B!Qb85lTs=|Q4~8syO{Xn?uMrF8U^>^?7Z0Py?NAnI_OSD<>>gl zv%S9GK~m>OoY9Qlm23U-&G~5Dl8vh=PM6iy!rbMug02#XxC!c*pSRE8&Hz)G9;#wb zL3L8?2bSiRE8)~1;OE2_dqv;W=5oia`C^|J$*kNXi&i(IDP7o8WWe)nO|KU3V>jAI zyflqz*DBthoeuH!`uu$SU}>qu`x0k|W#=rQ4Iy8bdi}R>sD=q`>8zAVUxG329@y78ik zPBYP9z*F5Mh}eIO4aNrZSAvAB5w#Gw>UC+KTKux{W<7lBSWUAFAzaap+lzc=WZe%fH*gx*3F&;gn>5Z>i`(8=WGqgWM7w+$U?k7vZ5@{9NYLh) zyLWN4561-j4BM{$X|m;VIAuenpu0(eqsJz@`T!~z?cVLyLs%YZaKj(WQy==SRO8RM z`+zKGBf%96_K9_vCwjep@0mS2q5CzOz%=X=1t$+fgkw46zHVy?DlopoJlixoP9encyiGt{Ruwm*~^e5~P7_u|OuBAc@<*tBH57 z2etf4@=(ijg3--X>4A9?J2)*-fJI5$QiM8W22d(`^NPPB9)BmAl;G?*5NAO)&{{N1 z&k`y~ke{spYLI6bFS(n_nZFuprZosep)IvxC1t`QV}}wcg!0AN#(JKjWAum2uDVPBMssfTg| z3*)K%J?xAoaKL1O{0OJ%mVtVfBMU@gl%;ZdAgcpitLZ)s4=v3H4yi2+IF48*Azb4! zC75##&rv|lO(NW0Ire+fEZ$pFH^Cs>8uxTHt=Ey3!wWbMcL|8jyGN$^&D4@V{n;wKCe zCp!~ceUb!7v;_9lOM`T$gH?`Bu&%5Sk2k{s4|c$UFnbw6-Y};%`v#i8(PVjE&vnVm z{o8I;4K?iISy?Q`vN~0Jz|9z)fz~dX_d?a4fDGMBHfy@mgfE6MhWzEh`B-9G1f*j7 zfR|-f{drHpYc&n1)p-I(^B|2lusi3NBsoq4RGgx9deuGa^F@!xK=ax7{NYlXhMjKX6bvIGBB&EP2jKDdQ*~b8&gN)SL&nIRgnWa!`m)_`Jq0B4)tf8r#CS zRd4~9Zjfiy!3cx|8xA0iORO{K2(;l?hpH+m7?qsn$+hE6OmB7`IThT5umGa@{1=a* z>b!-A$DQBX`vNur<%hE)?0n_OYUASc)N+k9)_Ax|we>M$-aK52-;sPI&0cc0Dan#J z6Ij^l{f#?28_}x3X^zbg@rLykx|3Dc$~g$L`rD@9Al+rdhN@2WZraety(2vI@!<;K zC_y%j-gzyKkc`Pg$xm8;Fp9 z_yEN-mJEa$EV8&c>=`{-O@uc=_XL>hkj%E9$v4rzitU5}bge-${1>puyHSWrJR4W> zFYAX|;5sO$8^IuzcVsEpMGb)d^5w&&Bmv-S+rHUEpygRTX|_nzz?aIF%iqNFvP5Rh z6tpH~p1^-?6IU`IxQ+Ji|IWI{gq$vv|`q8rFvw-@(_>eOl_CWJ%FU zD5X}ntEul`ip&b_?n4oTs>Xhqbt=LkL@o1KH(xsn9Yg6_SI3FsPk9JBBQQ(R31x!D zU;3VrX`wK46CC2CeSqe825$8(+8TWE5QYh!F!AZc-~&f3k-9gSi|z2UofLv#^DJ)R z)kBko^q9HR3(J)?#6P(7ab&79j`$b93hG8^*zOR}tR?4z6fdT`7)ynzuNfPpcT-`} zAjN`=>jyq(%L@lK!Ur&^BNkPw-C10?4ZRsd;dauhsBHF+q?$_1_ps~CKm2|$JU6lP za4CF%9|R|dV=+qwv`AvK_F3E5fVBiouu&KYLDtg#wS`^4DG3*HKw@Nano@kIiD`E- zc#C;^ym5$yoM#XEiE$+oKDvBGgTL+;n$fAI3`MBXrMBmklM*KbikfwvdLpzb`Z8e` zO1r*GUv;_RJhWP}kJbe2L1{#1$pQc#j zvAp>ETb);uD|;RTH<3@xi1Y4DG1E_VTk4;i9(2{V!iYJEO{1S6P?i z+UP6z@B;Dz+UzpeeN0uV+-*E;GwTjeCvGls9!GjGrzY-%rK!Z~I-o~hy&pTw+r-m+ z+LKeAeXi_oZmQ*JYF#U${8njY)~S|CVAW7IxR0P?IDn)y)~ODJMIxylTgh=$sAs}U zTQfSOA^d0h z`rMKZ-YHb-2i`#R#1}7LF1>1ZzFd$WDrv1St-T@^a}R$25Tv4#hjw8iBF9BQ>@1G; zn!Q-qu7pI4S>O7e!7U{>|wrr#g$T)FXmllS0Yn#dv5Usq0N5STcK`E8VEaq+6Qg3zZD?P^PYx};~R{Sd{ z^3(^CQWb@O#eB<$QWcE=IVo{9EfuC)28F>+DU1da8P%{c0YYddVDK`tvvZ7)D(wz7{TLBCzae#ke>qY<7Zh$2APv!OA`IC}vJm-sXzG&3UW@OH&Fq!PL?NCTj#Aj)Jilp}J`m9)G-5{*t(t2#lSJivg5&;f48!+h7mb z#>)>Vr0CdQbg+qLGfO>_1p>2fE$IH52Cf#wb z5V#suLsn{n&pfD5C;(N1@mlJdS(bJyD9tFnFp(*z#d3C9$FqsUM6<&gx?PHkvtgyI zy`TiD#3T7!ZRdXl^qOq24iothCPIWnipUpM_|>CF;Yjn^=qYZMzXpaNAEIsv$&lTS za=!DwW*BK^D8aHHk|m8Y>UO%T;5S&o=a8R#4RKWumw-hP>RJkWjFsVsVs-bqZF{UT zQ<*5lZCfE`$#)}Xr{_!xP4m4qpqXd*3H(*0C{r6CNjauy%b0t~rUQckN~Iv|oT5?D zbTwXx+QoCJR6X`Zn-U3LNdj1GHlgVzY>)A(lO7&!0&+Eb88Hr!km}U(9cLo0Ulak% z40b9A_S{>{Off5YZvu5S4Pa+&UH3pPB}v;J;WmNbDj}n>%1lRD1Hm;;Rig!Ae%1Nl zQLA{#XVZl?&3|^`9}vRZ09bfA&wcqz=*<5BLn)%VW3&!kI$cdP$=N{i&o02i z&L*6=w_s|}*LQu78N9$~*qCA0fH6wFqWW&n5GFGTgz3t2AKPR@-FmoG&owQwX+UnH zq~;MgK@4kA#5Aaeght8IK{ESqP-Rxq1Ynq=Ha!>cZNY5Tz=r2+G>oGQyisAyJFsYE z3*;G17zHX)XM2P|>QDFN1Z3UqdoXX{MfsO6Lr&_iiuCA&%R@)p8UeMA@sxN%XY22A zQ>bi{+Ws=Fznoua(TH~$PG}}J$`0V@Q%u|EuDdFy`kl04r!Q-#)+Xg1E?XBxMKHO)!2H z&12Vs5j!+N(&edYDT5A3t15f&J)chPkdn2y^P zbn#ZFj(!!#^}L-RE^Kd?bfF7*)+?c}SON3qX0t5HQVxBGOfACbFcno^BOq zV24d}?pY~PHMv%uLDH)R$xb#@dHnI~b!S$o_-sr zgo?9!t)K~FPV8yI7RiFkTm9lfm1u7iP?b?zb?QZ?ZC3G;l%SlPCM$7oXszEp#aSmE zHT8B=P*CbSytC8iF^<=?Hm7JVw(AMA)J$Q177&Yx5^Fmg@y?OKq-3Ut?ejdw#Isbq z3gRx;RxMbNYRxn)_-KarB|DWVyXrFgt1;5&F_DOr3K?-d4Tzpizm60fTtJ-JEi@jJ zLj|Sn%~n~X#`S5X1d8dofJc0_z>rfrg1qE>a=R$xFw0rXp+*#`AIIlk@_ivx=?LYtF$DjW6?->F>DSZytk+`i~IylBPs-7@8FZ=Vd zkfhsbQJSRdRhmMRN>&SDf75&f_DVl_t0yl&KliMNhFHrB!CMM~IV;BNj9G#QD+us2 z;oStbfl5tYdcDBC*t`n~9-D%CJm{bHvL3pOfj=1>W{JH%9zN(xn1s+X7If@65%)DK ziPUrW5!KQT;h&q2O+znd1#M+b0X!TJvLY6nE-ezy{_=thl9r`Vje=U7rRgBDBrZ!0 z$r9Nv?H2DnP_pu#w|VXRH$Xic4Ssa)A)p5mT*>963SsE0V~-M zPXsD~Yb$5iZ@%*+#c;VKPlzua$RE#RAO%8tFc=OTOTWxTemgws!VCW7_2B0>r)R^_ z`0sF0=i=?V_aFYA{H9WWTKqeNG-YtY&U?mCaPJ5(g>2Nw9cjqBFrmox^+{ti+499O zclpA78!4e0KPG*-=>jc)a}MvqB%dY%91i7)`*_Y~Ml`!0L+nTi7RA>fBxXP*J@p_= zLf1vm7!OJp8Xp;6^9k9|KY~3wv<%rd?jQh|X>CAC>rQ7mT;gtOhl7!}U>x8@_Ry9a zl9EalOod=r3|xf}z>{<18`TSSnup^shcbg<0G$)E9Vb-V5y1zKIl_*3RJellaSndo z{lnvQZegLuY9aPC;ZSbAxM(zkFeH%;MG2w?hNxN^j|b_ZZUci7f(J^s8=6_clP!%g zw%kPox2HyYY!kPcBxos|&c=StN#l)YnFG)B;5tb~xI?n8z&H*t63!-aFiK2u0i%5| z7L(2cYPak%Q3H{NGEUiwe4Q)3c@^9Fr5xHxJ*GVY;r)PT$If|eKoGzVQ8J{4 z#fkHhsesrrIMnE^hz@trJI4@g1VvqBS}JYHzCckZMO_AlKe#4fL_dN*5s~wBX#YYXIxBvWc@urO;xeZD#7iZ+UE26QpANobz5o2pALqu(jj> z3iIb$`lc&2sPXI3@WV4MiTv_a2flosHvqhN?ZV;((L zAJom6ES>&@Mii0QgyH~7pSDeDrO`I?EAC)1S{T-{n<*{&3< z10Xh0pJm-#ve5$0O1x!RgznIdPMhC@CC;RF*N8?uz%)0wfO%o;wt~~W_qM|Og@~x? zcWBw5ady0enGI-#re~c#T z_{zAV0bc>@jrfw<4&pyDz66$E0bjrQ&HrcrYg!-N*`z!jGK{tgT`g!?BB<@RlUyhq z!kl%i0W0AOZhdv2`YKKG$DGv)f>ZksBH6P`i|)RMjR#bQva)q)smwD;>StjhH9e;I zuKH=<=$^uL8~)w>9@1nd!xTHQJ{p`35Di=&1t?q9NZbxiSQ}*Lkwo-TU5X;Wi#Bcr zJX04htmd9zXtVKQVP*L4c?BnFw9L?8D$n|`7YcH7Q{fixBJ`<~th-m45Hl6Ts8q5= z3Mcf%4}+4=U+qcQ^}-QbY+y;hU2KTUhP$odwdv0CG6cD`8K}(W(d^%*3f-tQtpOKg zrb8rm+o^4f0+opYA6O%%u?K42@#yIP)22%flCHJssxhYs`e&y5as|;9)1=MhXPWvz zU`_)@<5c~$AhhLb5o;tW(V|DORM^N_Epzp`d8^GUYq$7#XY1CjTX$~VG9{x1Zq8#0 z<*&Y>gQjEBrrn~aGOk5o+arGS_FqW_$2gj(y9j<{=oWRvX}uZcT2c?PO?K2o3tXAG zm4AAU+I2U1#Gi3y?YzZHFaNDURpvov)VH@7=q%_|3-J>f-&oEB6+EfB$#) z7w@dx`~6p6uigK8ZT*`WBi5~*Z}Ipy41qh)I$+h!oMXjiwmw9iWTf+sot2v6K(Cdj zy3o5ww!zza)V9yH1i74GM)|NTAeFlKbl-Uqwj=`7;~$U$U=dWrUnQ&=#HQBEmA{k`sH#x{P)BeHSC4{7RM8f=sO@b4-suND*ig0tmGpgp= zkER{*zf5fNmw2}2Azs3$lLxZ z3WX%0jOCiu&q0{kGg-&tHsP*U53fB=24e)zg9)1S*~-S}f}wd3E+QOrn5ngf@<3#DN*;(C`m zLh9Gpor*&n{rBC|3q%1#D{8vL`4}ooyAUcktEZ2V9h_-~ozAXnO*+;;p@~J9ATLSr z6OQ|CHvL!4Tp{DKFxLQa*5$alOF0_f1Y^^b4UX zUH@?G*tM5Sy*iWAO9dHjJ>U4iNznB>b}O+ZK~E z)6}-W#-zA}-^04u!DYl1=XD@V9M7?eI>s?QwwiiMM0--oNG+zMh}8AhX}@rks643v z1}>v>op%-}mIo@HXp|`n1AI)zo$a0N^<=T*O2=^trFNEo)lqR$Y9j-n(F@vX&bFt% zRt5 zLIl_opnEfpk$9Y~Du+%k+fZ01T4f)T+n(nbA^^+ME?%>=Gt>$=%ddPHMliri-kp%g zMOkDJ_o=XQ9pbfBhtDY?H3Nj@*f6r%I79U{`4Tw}F`78C1OV*Ba0*;FK}Cc_Q@bi7 ze3dPZBGweCGG0|-TT_^SiURU$jhJlOgncF3PCy1Yw5ga~Rr)oM;R5DUHIhc2Mq?gu zn|$Ze-pou@`q~Yp>og^@_xnLF=ziO9MF2f)tZePAiyr7(%Sj~e?#?t*Q*HvRkF9w(!?@2Fpo7l+Fy*`*kIVYvObdF*w{z{V z*P(JUT(H$Bs~lKF*T-4tn=-fJZ_;GVRD1$j(lBmkKxajyp8kotX)4qz(s9p@Tn$-n z+ZrS!*EtXHzV{D)m6N>FM*aiwYbY5nq1{?sq;*F_zf|*fKPTjUN^^`J^C>_(h2N-z#YHD9oH*hC6Ndk+F(6I1DLtN=* zW^5W~b$2B4BzIO2kj+NaBw-pSq%`CC<&%)xOyc&jSt*M7QNYHuT(-sZMr=+ycW}^k zR%a^bUesoWm@t1bIaj5(oSo3Oc!Q*vH;VhJSX^Z0JmRWM3jXq^;LHMVHDSFBHL%MS zYAr-fEsXULMP9?oFMwaY5s?xMQE#2&91_o0ci(_$0zdEJly!f9^XWQfD3rIIu{pgV z$Kp}94%`op9(ulk#-TY5mgRx5SkBVKH&3l`1GEG0q8p(&+?%YtC%qWFQkkrxvFcm_ zl{Qg&^Ypwl%gyWP3BZydbS7;ckpS%QtS z3&S{gmI1?()mlJKHdkDJF<81=)A0#sFhY5foKRW!^~DfxY{0Jrg-OONpuvR*yJRa> z+S(;4LM_N_)nZya=kN zZ{zy#?O-y}TeS=D)d5?<%dIy$EBpOko9+@2T5T-!fxj?G2~mQ0u&&@GjwS|#dMHO= zSp4{dg!!$YAZsj1PBan{Lj%l2rpk{JqJyXl!c1u}Zl{Iz@D`q?L!db^n|$I72l`xc zv8811GK^&+$>ek%%1EfcSSqHIV!~G{%M_+v!w!*7OM5_NsDl|v^!J=8j-seiP(@O<-1DCM`=zTDbE{>Y|?GQCv40yUj{SwMwhxQc~jK zk=UL3?KB@Epu(OQiPwm_RGAS(Hi_9d6rH9bWjSHyl0_fdLHCWs zMXR4?Ks56R;(QGjV%ay9EZ4CPfPl?a?vu9g_f}SAz|Z(2l~2i4!mc z4o5r-yTJkyGWHI_Y4k=%EdaJ#>s%Nggq5+@HbA0C^JXx`73_I|l~sz7wC$kr*BVvU zR}vu=H(u~(w^l@{j2I074@U)FFn#SM)Z^2ydvZymw`T=U05x9t!_iTTnDHYg>wI=J1{=>R9bV9bYf?r;^id%PsVI^L#M z(djxH9Z51KEVSWiXu^N$O_OPS)PDl=f(~K&RHV}_dpm-Z?S4xItN~j`S8l%}*S@TL zLre6cFlZG4K_KXAP5ic*rg{)85qi>aB3^uQ%N?H(Tf(#4 zTy(gd5t@$81u5gZHR_A~o@q|3|4JCGia`ZE*@vK;*lM8J2u2js99Nhbc~_lR_pV4| zyd|JFK%&G1UE-!9!&X2-XeJf#fWJ(KU-6~%a*<{$LhISZa7cnS*~aLuq~_qXm@S#f z$mB@$8r=nd zV+~CJ`$5h+@5!nu?c*l=860B3LEdP76dQA`$yhZs9PBYeVJ|G$xZ-$l+B+ym2V8dK zmdF8h0#}ahX}eQAg=3YWf$JVdPcIM#fufG(9V6}{z>V^QV3rmQ!HM>ReDJOU9j zg-TRqPTsmqrvF@KsnQBWL=+{I-bMh-7P42k15IJ$b$|%z6P)!NsFCr2nj4r%3-Tju zH1)z%yJe9PGMUuMY=rE~eMt z+I;eC<=LMOYVFiO=^ai0&GeSm{_>U*5&n_hmFTD6c7_0e@c+7qJ@o%0?Cw4Kv0{%$D{8 z6JacLP{V-R_($#VHbl}9c`oH6kiuo`h8c$tDFazJzf?HRilIRmtKhQ4M{ekgk6?~4 zLSYOTdWPVP-?G|(6AhFjt11u(F8zH#R zUu3`;gcwRk##H)B2+_*~76op2@^E~1o(LjCSR#W+h#-+%H9#dHPG&lBPWmMrp->bw z!`^ivum_TuAZw+SqR4lfttF)*qskO^1xo+0t=l;04(Q1X?H-Ol+f)w)X?Q^n0+gSF1_A z!3mbT0*!|NWs5ow-*ax?rAbG%at7Sn8FryYOG%&)q%AG*-4Xcj;{XX;CFsy#u3{dU z4%j@wV8Uyj3NOreUJh}5{s)9r#>4J~HW#2z>Iu9D-yPt^P&`x$>l%gg+yR2o@NMJ7 z2LJm^)`|rvrYKiz zA&X@Ikn!+sfIRGTxv4`91@>Bi!@hnUzz^TiAYXx4`c$ApJ`BGA#D&f;bEp=u-ahya zCg)@t^8Hg#IrvnCQug_wIAAG#=z-BblBl3KO@#T@g#aoSEhO-ILpeS}+e`^>E~rp6{LqB^Cvc zj6-63XB;()D+q*4XGjG}&RURabS(R2d}0t$0#sY3g8i9IE4>^HN>OHwd=9?8|739f zJ%j~ad(295$!_I=&tYC&g%N! z-p(^PEv|l#yJV~T&!4TE&~c4a+d4b!j>`AGZHrC8M~lcv~ck;+^KTnrYn%9gOwP10S@uw z_|H+ez};j6Jx?3Nz=;_h1A^^Qw&~Ios%}NJ$AR&{LwUe+HT&eUfS&w1Bj0U@Z(a4&M+c z`jT>q%)u3L7bhlZTAJajZK4h-?xBVBK^g)3p|~#Tt|R&20^XyvvZ^%=Kw9D+%>7#NZfC7?UyhF1u*vqI=)^`UsI;!YUpt)ns_FSk{aR{!j$~INam^Hbo zW>=D{bI|9)DkeE=`iD4ev(pzDOVlFe+{KDuPW%^8*E$-VzjlKsuJg<43NI5P$%}C(FU3^CCZ*6; ztGN64Z|(&9cUngwG(%Ip)>5zkc4-Jl)5gl;)j759-`pwgJgzh_Cskk|@sME(OB?ItMT4?~JKUv>nSJ z#OipgRv?Ad=F(8At%&$lnTBd)Wj{X}i_5||vGW<51+?W*wRO|3tmbqoHiE2PU^n3P z287R}!XENV*%Gmz;ITQJKgSsyWWymIMI(&R60p_->*i8*j6*$b4;u=!mkwEky^Xj& zEZ_x#DU%*ySOK@!9Z@pdL0)JV0aIrxWY`6N=Cj8Xie#;WkMy{YpY5?8?oc_mG4*6q z5|8^>tUflQ80kQ22!%|asxV0kiqJ=mUh2ST?92#^)SC*8uEQ1@6SH>(aEwMWbP{94 zeDhWxDlLseF19~qr;o|9Xma}u?yXzz1EAyMT=zBbjbEX8@PNVC>h{#{ud)!RMd>!K z^pAP#t+D2~SezVRT3a|`dJC5~Fa!3>A?QJ%pHp}?jbL(CEY9vmTU7X_KzjD}GDw9{r_|;+FPW+H5gjR;N2+-;)G1W*%k4Qkl0y@h(3{X= zY%KVGa6^}F{_SkPkp$nO8!0}swn~L^(nV=o21PQr-{K(T&#lfP0{(JMujh3Zaj}wF zZ|54SBZ&=kzPJTbbzr2;jbi<$&Aok{VphY_-+KA7Xd_BGm}u#5i>38q=}*PdrWScC z1@O`iRGWoj9oLrAqEpI=x~Dj4V63a*C9uAL^@K2`bWCXLJa@gOrwy4R@b=tHrbK4K zB{L^j8v9%pz23ku%iBBq=}g-+ww1*dkutLjHdnLQnjG)wznq|Dyt5gd6SuTSV!IBD zHF5v7@M0{4)gBzyZi!V9WL-Rdj0>2>-~0_!ShBzozP`MDo0l?iXrcd?Wsw()6Aw15 zWntpY;U3;o^zk}7#5#)qfTj6guqex_8%@+FSxU|oGmTQKRoBTENPcAvWeezw)&U|8 zbIn#kViy2*;MA4KN!c-Jfx+zpA%w8NzlBg3_YbjwL<$O{j2SFHb`}whj(es-P}^ZA zfHXrbO^KILv{iYk!y2IyKcE4S?b7TMOuAZ@x5AU6Kcgs2aGJ+u33(Xp3u$utm@S`B zN+sD)a4(}HArJsy0DFem{a8lsqXz|tq%#oAT@23=4@pLdt%J)-v?aN&3loPjU8y## zQ0smK?O8+sG{w>1AUIHsH5=v#B**z7snA3rotU)KlG$b^ub`zl-M)YeY2hXw3~lFq zBf}L9RLniQ5hDg6gawPLt%38|wxYt;sF=ZpZvk^wr=|5OJb+yxPk00X;)qv03=~CK z;GEtQlv@+cPk_L|1g@!RnD|)J8k@mYm1Z~G0W;wOIIJ=fyp{}eCcTP1v<4G+U#o<| z4LtA2)-n;_QuP6*N@G6Ik}ZohTTGH);X#`)a(RJ61Q2{t!sI)LqwZQ?rZiO3U%q5UzW27VK@R|kO~iP0*#d!bdf4sHz`Xzj zHc-IGr1!ulnkp7zV}$vZT-*&a;!U=tsBkojq|lmh7ZUk4XAU# zAcwNM`o-wo_j$~~1fUFmWnzR0+1+y~nO2Oq%4Mr8ghZ;!;98Y*~^OYyP=qR>q&dkntroj*4kiHX07qt zS~FigAVa&y4_sB^5x4>ZpP37TSbEU!S`T(iOGu=ceWP5f+Jm+W1M%TxAYe%a{|gq;ZHEl$V_X1SIiOa4chNKc|mBIvr|y{8yn zT_147l?Zrpo3547zlNUhaA{4Yaizh7(r|=$S|fb(&LwX>A>Eh2HdaUzRv&SB!5g-M z>!*FbKh66Ohi~yP5}k|qVxK&^!c-`6I5d}lvleSAN!=VGuMA}`N|@>PaZ17>9N@mF zl1YUfeUI6a6uv3K3IrL7H5bh{)MHPuifk_Cj3#S1V{CO zPD2-OxJZbt54(6SPM?nDXtEZzK@+u5K9w?pBF=(dbjoqtCK~3TZc>iPAW0|K;7e@2*{;s9Bp^afx;+;#V*IK80PDe8U3jZV=3geP3 zV-2(9M^OU2J!=ByeY?BjjiNRUq`cFvEmB_h^jLt9paTu;XGv6;vm%tSH?ouv=T;kx zZRw#OK!rlrPOD&Cd`>r;g*Cp%fm_z2p`cjjLj(0ayjAkaqKQ3O1d;@0?FbE*@>r$+ zMj=tpf*#N|U~rJq|Eq`;FWG_EBfG06k7FW5|&n0&fBTrC5oDr za~#kdL0*xfreH?*x5~A+FeaWZ$>`-IJo(n*t0O!*Bbx(Eh$h+GQyyr7VvFDK0R@QV z&M>s2s7vND!aN;PJwNOBHn6tJtReCWf*&J7500}SkfduQ{m5r2{o@&qzxbOSG>E0x zZStHEj)w^lD@fYQaIOqhCfgdo#SYX105Sev` zD3%&1+XSW!iIMZCBNa_jz7rKt#NTWUj+~wo7S0+}hML|YucpEf;?202h5pviOvWV% z>tpZ~!H;n2D+=bVQb#kJ3I0Hx#7R0M=S09{q&P*j${=M07=nTpSyipB(uNK#ZzPvY z37%>st5^a~R;tA8LZX(Di3>7Z(mqC4<(tq0@LkRGJ{q!S^^&fXq4^bhZR)_wN3ENf zuQX+5bLswrw2_g{N;S8LQnXCO8tH(HWgt90xK;WRQPJg0{i-$W{FdM|Qxd{ZpQNgT zjx|e~HCUrRaAT%pWkbevaO+hqqe~>lc(XmF#KO0-x}t~`aOV0p6E=o`DUCFsq3Zxu zl*VSLD}|cCt`zx1xGSwp2b?2?Ds?Hwo66O}Zz}akBWP- zvI7v3Q$ZB55LfXv)>MG#@)>$ijJcTD#H&N+cwB83ecMvQ7XA_UoR6-z<5WlqI?W*T z4HA0chq&JOaY?$Pq)`<+RXuMXlwLX8b<(ox9>3N&R@dMzlvMAI$2^FhRyzSGZGh4r zjda-l!zCG{nOF=+Vph&gkf8Ea3o8wANZS?EEvc%kHe~)4>t+0@a#y z=dH$b!%>Psu?mMlubz@kfc#%|?A@8bWBO-}t^5A{% zctERu)S{kcGrjm&rs)}?_n^oEwjo~f115AqP(4+S*hV$!O?R%oJ{3h&$RD-7ADp}n z&qf!;K5R@bbJivH3HGCF_D&CeUedQIzOnBxB+RhOJ)zj5$Y{2rWL|HB722-#k@Hd5 z$<0P!-0DP8ieQV>_b0v&`hWzpU}a)T%7L#{tPP=2p%xP%k3{S%f8WA<>*kX7KEThC z4t;urQBg7tw8S(TQEi*&Brln9-~HZf+Z$B-uLmV<9FeeUS=0v?Xc0EnuE3J*90M4? z>a12E$ZRzVf!PqlcBD#Wd*U8#=AC?3<610^mY#{rq_QL^J{uFJEy!U=2C)eIp?bD>4=rVkDRe5YIDy(B)W7(srdrI_4!Z@g{dapTLCQ z@&wo(iey`4$mF7vgPmEqB{8hn-0?eC2MYOCJBT|;RT1?G$%Sukm4WNPzC1-DPbNxU z1j;&VL^3%wOcy^MwXg@fbZ%_52{rB82VtKHG`g%OD;w=qafT__TMza7F$o3Q4z@+0 zcCidS4k&JH$K)5*!bmN@B5}wn#KVR_0)ATH(;smkQ~Xy{aHREqpH7KNLGSG~9lD-usUpk?(lmaV<=$rTs*0dGJQ|qCAyLkBriWf_oE?&YRxi(`; z!gD`5cberfx=PPncnYyFbK_8=)IVzdba-}}Bm@O|r7ZhrN2edOmGJtvJweABW#{ev z&N7T=u5K{#aaaYeqn6RehPu*{*_FbO+?Js+4*y&H`4<2FJ^sDNzyBWp{s;W~-|+AM z#=rjxu@IN>Z<{d@zx%g;;GchGfB%jBE$r`Y`}>XkU9-Qsn#(OmT#v#A2b!)%It3FR zzDt*Ud+9?%>N68|^4z;3ygLGiAjY+n$mt&Mz1>2U155?>BbHH4z6`OW{nq4577 z_V@p^zyFv0{SWr{|FOUSul=pVuPHgOa0~BwNCo+gam8__xlq;3D+JqJ{cRdgS3)*R zMg3{%v_d3#@ze78sFu{?k7zlPPCI88<$3Ztrjw)#yEOD2y$ky&G))aGqBZ1A(@Kur)u> zArfQel_mbOQd3?dr5>p6f^gJ>x2}%QQVMTQTpx$vnkfHDf zC2TuC1KUM8!tPE7V=-jQPO*Y$7c_X_(hkTI9-4R^g^)8)G73+);XnOQAnP1EFuiSu z27e-5CE@|TW+}q;p z<3&f=;5yyn*;ynwv53x23s;~AA@C+TK#7h(g{gzu6F%+GUR(ziYKA825nL_r#3fWZ zgdz)rVD|VV+%Fk$68}7#YD0MdrM-VD38B}s}Cw9*8)!_V<|~~0=41RH;l?1T=bNJ zFT5qe+AA^>3D+wLbNB}>slbtKt&-Ll`V|?NR(bA5ayTq(rL3+!mtQ4-D}pBv(ww_u&F+KHSNgbr9;h)Wp-VJsZP(L{nVs=uu$ z(VVAjY;jWA)+-f+M28RBW-hCg%$-e{O{~NgAv{4Can3*=H?sPnQ``u%yT<8+k&m+S zK4E0~-bMGE2DW+yqo&rb6$0WCF%{~N;#h{VtF$@9?BD<=nH(}9@;N)mz#w!Vt}kb| zIKrLb=?9w{#XF9T!m-6VeItZ9upC`C={8f2z9A)i_;8Z@LG%l3$`ik&>pXGg<`C zs;)v^uou&x!QVziBLst;Pnn>V!OAKQ{ekWRKu5r>y}ukXe7w4TCU|P4EkNKzlo8G8 zKXj`&8Y9>qVy;M!7$2im zN*aiRg#(^{aUsD}Wai>62tHBK>l%=exjb-=nM zJ!mOz|2kuJ!a*^}O&KeW17Uvsy=$}?&(*Jv}p=?-6g&8$)sn}~AzmHwasDWZ$ zL*~pYO@~USHaOs)S8k{2U}lMRAx*bezxRh9wH|myeo&y1BJfNXF4w4lc;B5m%d#pZ z>nkUZvO}8CE*J<(Tkr?(G(9Bh+67dh%OsH`A(~W;-mNtwTv88oCLq&$QF221`wv&B z%W|=@5}Mbo%wOIyi#Ao(1@MxdSs4YX#qIE>#Z^vO?m#5@lM)oTv;*S)xEfbo0tuAtK&?jm3&Ao!q||Q$E*rV8M{_W z)EE`up$HdP6|>mL%Br8N1T|4iv2qb*PPC=?vWrH;dX6Cm*5G3#8t=Ekuh8#>>_*f& z8f8nV{2)-GO$s(*pH{6#e{(~+86&jv?vtOMaN*g22G1AAL75Pf9VD;f#sea<_9tA; z0m1tZc|L1A>mT>IA*xi3n!L2Vi{-acVih;J*+3Z!Y>X!BTuox-yg%`#&y%+08tT4m zNAsMOlaopR1dC}?rlT_(ZWv0#P+gZvpv}A6!*gn<`W|5%P^F0M`KPv^aIU#VT){PN znG6nx=T#K^v?{$}reI1k`$y7iQ}z~C&7{aN+#B!`m{1K@UZ+twwJKFQLBXkRX{q?_ z%`cwsZ+!E`&EKlU^P+r>N8;U%$^f5uCGQ7p*=cvd9qZtb$D4y-a-@aQzl2OU#z1hy zYWKg^EVU79Zd%p!eZN7h6q}Aj9bo2T4}61ZM|uGS%inA~`Q7h+e{W;`oBMaZ`f6=; z`R>Zf>hkZ3r7!UOnh3E%J1xFgGDvu0{0qiO9R21u|LeVfDfZdozW!adzyAg{TmHM- z`KoijbFc9}-1%s9ipK>;=fgg)tHl#3PZ@X8A|`Xk1{cMy{k9wxlW0lqD1i>*9BL;J z&Zip7`xs))Jlm<-zVZ;De?WBCq3*HNMx9I(3(2wPO6 z6-Hwo`AtDeRjGVLp`-R=xzcM+NG56f{Sg%3<*Mb6KgfuSUZm1s5$ z0n*0tgj~101{}Y~F^YFPWo}l+P^@*+C;$vCJdNR$4Q1HJcOZbnp9>XX|Tt zK&BDY?a|O?a;`GX2^?#|^+%0YawWS`oOc(e=UO-5XOLu8Ga)G1V#(-YL;xYnxNWTE z!c%K-f@PD`YsHj#99`re@{xpqm584AoGWpGOY~6`38fhT2uG-(R6^?5#F9$B7S45v z04>PsJ9uOhTEp>_J^5rGItp50s;@NX&&MLFy{0g`f7HN0RCvDXSpIcDF+hpVeLP;h z_Zr61o}3NG!B8Mi1s5~$xj19M5rJdx;%J{?u7O6!UH8LhA@e;hs(&tc`II`QB6=>L zYjO^SvQT8$Znrv=3keBVaj*(4amwg(;=YeXlkpNR;QD4(h8QF+S2pEf}W zu|TaoQz;%Y?r6jf|ih%+yO;K1hN_$;jlQy`b?~l~`D!6Bo zt#%=a`;)i*?fyH+TAkR2CTsdb^GYIO{c4NE*O#slpDgXBatQ`Dd%ejQsg!Th6)2ey zFG5k8tj$wd!^=|=eHxE6bRGi`tI2Fd;^bnD#B1K?(AhA}(3gJV{*+=aWC#R8e2x{& zpKR-FqmH^t)}}~JFUBY~O1UWzk)(yJxu^$7F@z}%>SDHqCl^sz z=^KSzqvImb_Q{C$*eQG?DpWIJ2Sp(xZf_Yq=8MD~JgX;q&gai}ii6gk=_`9sT2A|% z(2#A5*EKQG!0N7@HzNYF{c0$Muqajgmmdm!a*q!0aSMjc1y3(h9=gvyC2DQ4N0$f=i4QZTdodIFD=f*LQnZIxyWK*)=W(8ez zRKXV8kyw_(D{y9O0%^6RpO(i(3NRp6BaBl0^H*7Dvlf<+lm5__X{1L8~W8iU#ajcums1aHJkQ?w5veK%-F>CPT~?t!1tY43Lpd*fGcInIM^P zWS>-04=gXl7MlCbFILPiN!%|Mf52x<;kbP~#94@O@eOtWUwZnDCoT&O!?7XSQ=LgQ z_|h!(9?+$R{|dT=SmP|zE$O^POE4Y$+!e4HU-T`q(hnrEVAep!Z`yzagfw)stk@Gt zFry)!r63dy?8sAGon}l5e*~ixb_zqpRqNAyWrEDuyM-%wU;*7F=XHKWb9iv9*H8&r z)9a}r0~b)MT_K5&Mr(Kaz(l(>7{cEWM|8%E4PA^_V9%i8<;SAXJMyD5~xz7U47`uIS(6YhkXemZ+pamB+B_sS&_#lH%dU3Ji zZ}2Jumu5IJ019H;nidL!m?2|cz>o?f`5N*U&mdWgra29Ky)F?GHOgAY4qD*X;1Q`NLD5^k?PmP&$(ojKp^? z-a%Znd5(HXi%HpfL&+o|&@rAE6VjGGGDs3w-#I@J5StYa4)v)T-l<47X$zA9mf$%Z zV)}{?5p@j)4T5JC-UCbds?s^?#6x@xw|1^yg@P3nH37W_B>`6EoDK<5#3)9Cp&S+Q zFHj7zb%+PCuz*-JK4ny{D4JkBfW^|n=ubz^f}!(zA)5s&HMOlUBUaFv9}Pm#+5e1y zWx@9Q6&_f!Ti#t>{t8*)M9*?q+QU!UWQ4LI1B)fATfT~V8duWFc4)}tz`c4}$sTNE z-h&W@)Ye(Cbe$RKAN)0!FszPW@pltjT-HQD4j{Jj?^y(;K=|vW0f`!V-_2`XI5UhCsr8#W^>09gYDRTIF_xuM-pf%mU48n7VQaLUw0xUxxvrXhN4g1?4I zWU1+sIMNWPu={1G!aTUmXJd4VC(N^4p4)Fj6yuvdZ(L~C*Wzw*R*Le#mXrToisvh(&-VDE9_vN*~4XdHSZXYU;j8h&RPtb zaF*&7aOVJ92%Kmh;=y>^y3*$c&CejejJ8)}n8pNLUjwG(s_&V(U1X4z-PaIrO*uxP z-ysrpR^zWVyOmjO0{y_fOg=qh(i@X8T^0uK~KCWNLnfO2dt{1$hF z_D2P7S`Lms6d!ORV4i~@7=3{cuCAJXj@zQ}Hh`0EANSAj52hTv6JTv4v^oTn7?R=K zgp~qEZpGl7?*nRAIC?9J9n`>kLokhC@u9Pf-ghd-BPdk7BL^2R1X;jE#bgY!?D!aB zgBCBYppbpk(lBmfLzCOFHom2O89MK?T8buEEeUjYd8NfgzYt5B5RIy?PgzQXw-cPD z&0Xjt?w$-zPJjddALjmq`&C$Y;Fdm77YfZp)_2>_3r71vZZAgBk!PcW7epLSHPxy&C`Akf85cPC&L% z!*tj6pHQ>e1k0ab2n;5#%&4%_7Rfv{9pVSgk=$gX+-Mlo=0uqJZVb3Sg!F3TZZ4qj z;8XTMuFer&wdDZgbV5uwugNQR!uw&nVONgJi}4r}Eiy!mIQn!d_b0MNg~e&y+1}Y+ z=U$f^haic$imiG#m1a3=2u@;_Z{W(pl57wz1-4sO z8qC`3YEyzX?*rk-uGPUf!k`;+3N-v9O{~HQHIpm4EYP8lQF5C?1wy7uih~WbDWQNJjT!P<82NHQ zJ*zuni!xLt0Cb2#4r8#zkf#_-lIAJKUc(iR?DH;ebeM!AG%wK1D{VG@+Pwk zQUoKOX}sR4^z*ZY0`SrVgu|ZRx&uK=x7!3wK-;G^?75}48HiEkWMy6*tfbj|3o(Tr zn(7(!o~7W0?$xktvIYS?^$gLQpE5-$SfO1Isn)N~pQYY?W!&+m&-ZFI94VNsnW?!61bOFmx^aVN&p^D6E$CFC4Yf0&A|3tYPQ4sR28Pidq`2`%cA%JM2brM5 z@T=v-6puvaJ;8AWaPf2n0)uz~#TS$2G0TQXNKEbxNEHk)Yl=$$u=_en3JEJ*cc z9J6Xezyh2^5*mHY8Ws7$Q&Y-wu0u)$Q}NH@5&5Y|G$4Ga+KvGM$OwLNHy?vC+ADFy z%-9H1yR^#9y%KCio?h+;u>q-yLgyFzBCvtL9Gl>hV+8I^4iucE5dVrU2VSs(b|ZSJ zi&88cPl62jA(JtVGx}2lFmF+3RjE9{;h8Kb?tQp1fYW}sT=aW#c&;Ub#n$Bn zFYq91bo#d6R9q0~BF`@Sq)>MVhK3ig4gwoan`(8Tq&lbKu*Al$kDG`D9E5bxi3N0| z-hCxgI#Mji?MSw0DxIHN*?trDVespK-JyA63ag`2pPkS=}Vjt zWID(`Z;5NNu2cqQ3Y_b9$~3GpE^EyLv_5 zB^-o;%(JqFUAgl?DzQB(@|$?#o=3T2WFymDsd;wD>9oWL5O(baJO!+dee&g@jiie* zStB?KO_T+KYl*$uDaR%3m0L2YqJpnd8q1%RNn5pANkAUz_zocT1`RcjU|tB4G3h~d z(khs72nrN-CkNTFSf)Lg`~|k0xM(GtUTR2Q*9Hzp3CAcl=f~RKLl^_!n`A{|0!+#G zlfeU&!Yq$0L7d10z{0c#h>-yE6d#9ex0awe>UK#>YXP)!SGUqiu_cat&=hupXd^+X z0U6@?upDFP>O*#EL3vxXb&I2IK`})$Rtj6Y3;~E2(vmncF#oE7pfFYz7t=+yNN~;r2#qU{-=qU!Lzaex-@r}R z2#wAKq4~-@+7xZIab#92V{n)tgP|5?t!~LP1!>%q>HJ$Mb=*)&2Gh`GY%y+0F70w! zW3l5Yjl}|?kEzH|lbZ{=3LbJ4OoPWQbW<8p``zV`3?*IwyNts!1s+o(=@btxdy!_A z!DhIwu=Vt1-FK}Y!|pzAP=mu7edJ7VQKs1ab{AF@o6?Lp6KTUVVBMK}hrm;aJxANj z4J#wtr=KlF1TwWwt@Msgv%et&R*KdptT~TVC_z!ewvSvMcZ2acV8bS!$db#SFT}Tqx#cY2tqN zMh0_Su@ba$n-s?-rWmd>4g!ypDg|;(ytw6!X-b; zG4W?>3KafRjrqyR^uSH;$EUDI2zzIBu{P0TSk_`^XB<#n^l5jp2i;4ILI5P}=6ls_ zZ&o@2ZYLv&VgsAEg|xLaqxrXGQ<;!zrOMNxIdMhDEK7rPoW@c0_g&kT5qzTlfA-$A zxy>U<7rmeLD-e(s1Z@dgZP~Krdngc;dCe^d%FChL42lFvSRlX#Kv`^!&u>4^lS?h{ z0)n#KJri+z#vcr>QWL^m-r(e0R(jn7DjB@IuPlaY9Ji$#<{D_sIf zg78WywXk4$Xdz4o)eJ=`g&v1%WovbJ8*g-z&iqjPdx#TqDE_7Cs!8Lj3dt7ksf@8{ zXrlT)9J@2uS3Bx;O`xbM2_n?j`q$<=f{sv49 zk3k|qf4DRK6S33Vs{&^G0SNET^uOd)K|>YW7t4LXFaVn#O$HaZ;uq80nio?fipdP; z6nGBQ+Idx?@+`iv4v=>3PN$7@goF92 z^!GLCh%z|2dNYQKQdwUtOpcQVh;PaiVh|pN^g0= z<&r57ZGeL2v>i4ztTqwyc3HS`^e)Q{`$9F)LLq7GWmlxn4iHN{bsjkB->mB=N= z+Yz|9FZn_^utQ%H*^q`t&mW zL*?ZT`TI<)!%O>kEb}$seLZ@?2&E`@nq1NK!NTQ1O zVdUcU_=VzCTa7_9el~@ zZ7G4NmDGi{tZt!cMOY1&#MWT7;6ZLxmhNyJ-I?-rZk>zLgv$wdZLS~%=Rel#ZAB7{ z9(voA&gxlLt!p~c!v>sBQFu-cr?ejm+1?`Unz-hV*Y)a~WFrI)vWHhg6?rM!#cfBZ z4L_Ze>7E?H8vIj>W8+35NX*2Y+Hm;MiX}8rP9K>Q29>^$AsHNy;yvxyQ3i(+Z*%`G ztim-gyE)8ADFSl0;aLCy>r-eVCJ8~MbV1FA(`^J8HJqdl01hy*ESWDafkZ!{{y#7A zijER3kFM>A9jD|niJ);rI1OXrmS3Oi<3>3I6=LhhgV|pC{fM zqHjCv-eXybRdq4chyf5vc!_}Zz{2~-xInO2z2ht3 zQ7Uft5D0p7jDv)^V|pWH&=JZ9a}1_|id7YWsRa2;XO9d`|5sl{yJ%mI2EZdKptHgj zu5-?ZBoebka(6-u7pg9lh!R~j2Y95{C6zvPUI(Z*|6IfGo% zmp7fcyk8@3Mu|LJ3Y||67HheE$oMJ6NiX*)vXFFFoM-Ru=%jXPy~w<|^fE~^|9vKn zx4yujC*@hvjRfIo;ZY56NSvW~9v+j2w`{2~ z$Jv(llUBGlag+(LW>e4#1}(kQ(=sBAv&|G8;k%3r*=R{k+_&^(&1`^7keQ@1=eeK- zl}}kEIvGbllR^*4(^MK-EQs+uqb!(Ir4_YaCK|p@Y^h!095-uI6|b810u%8kv=kbr zC>2P`!y#3BUItRd9*&D1c+jrhZu`z{D2Ae-I0p|0#y_BhI`hI=GclS31rB)bE-eddAA69z{Pz1<0Dj zXIAcLN<|}ZIKUB_9x5gG4K&%$&3J0-Xx0sc^oAz6Uc_FmJ0^ZpxDcFzQz8hBGs>Dm z#>LWHR{oajRZf-t>W`^*rOtg!td;Oi?%Eu&9LA}8s4Wl{gv&p{6k~wB8lo7&zxs$s z>9G`%Ggwy-faQ50tExkvTSJRrg%j6dCjX3|eqGYw<{ueN1>Kk4^3W-Ek(ng&=eM{# zyZD=9z_kodW`Uanf(RudIAGB^9vo8?ciy2Ygj^O@{e_wy9#_D>aEHdfpWi1egDD@O zPl5hc?DTkv1L>g(-e73pC5O9;euKosI7Pei1<~$wgldy1 zhZ7VFV2a>!W4rxxs6jvA9c@HZE48TQbydj>c>~R$!V%vqdwaX--ORy<-LOCY-!{Zo)#N@qZeT&Tq$aHm}-B-MdU`F<2t;N@?r#Iv<7e5*IX#MCWZ&PwXZ*B-sYo;O~+THn|^*xB7)ebw3P9jvbJ zrczHPzPLTS!W!jSWkWheHQ_n6MV$Y#l;FMeq-CWDFL<9L>_d*PEMixq_~fGOmU?nv zQ=IU88j2$=O{*r#D(hK=@C2bqMbNxbxYaR;&HR@||VeWuWH@@(mNgM|OcnQdUACO`H@*Bmm8F z5lEZ&VR*Ige3^W&%7X25p#jwpr3+6Z#?s-+Y%cwSV@<|kC5SpHV0WVuP@26fUN*X~ zI>^=iaQra6uhDAB}R$=65P?fA!>PEJXq#S+<}-7e(Y~tjBfr4+u6j zM_P`SIbCxY?Gsn|LH96-L})Q)`Y{N-36vRm+l~zq0{N6cGO6T01`x&tD}#7d=+DU| zOm4%gwedvnhVWMM&KMW#G!~-=k2aG`9sP>!51XJdNJZcZD?bbJE# zT|p`(Dy`w(SRF4X?M_6Obzb&X-loUmc)?P0qE~@H1;XSl z%vcTlPj{z$mZNV~o*u4$H9c&tTjpv2)tycGvJ`bpX9pO93&7@BDwql4QJz9mX)OX7 z2Cn3zk8+-j-o|acnWB-_gUqDnKo^uMWF#f`z_NsrBBP1ZF2Ws8>bWtJ7zjeLJqko# z+;>R&IF>OPs@whx5K^|HD>oEs6X^Jra}$ML7OQJ*^KlC9XzSUL%E5|?rfpg7d=Fo0 z-~xzKZU`|FeG()ovCC!LFaitBEfB5rjU!QQO+)})KfJxGQ%*}ktZXJnw4p``6f0?{ zRxcDaI9N{ko{l@}kRTS5D~iWM7l~@7wK8?H=^C`rj|-}zXj2sT8}u@O8=iv-VdgAR zp}gh{w4ldTG=q^iXCIe7Du9=RZ#mGp$lI+CD~NgM5e7b$BjJR7sL zWQ2z$Pf(X{y+Opaw?PVYT=B2cR5}7%NSZP1pUmh^4{E!e7LpZbVPrxX2Am3RV(>nD zhgzQLz6r9T7C@bBUYIL5UD>J;^eI#!jR!r5)@1XdqfW3Yglo7^Li5I+!^4$pGc@n2 zT4-9j%kjoZ@dhM2Lwt%J7&oMEvKI&(**FYlM@)hv#8cDQH$Fk=P|+CisC$ii;4U5a z8Fiv@G?*M+@@0qc3=yAe@J39J&A^k)0Kl-CNq0W^}?u2zcY>4;$P{{PB?&?lYhu8gZ{&I7uoTXitp> zHv7WkBV|?Tj6wrx1BEpv!`aV9iU2dRN03P}Tg1oML^YL=cnf6`sg+w^YIwZk14?|1 z!1${0olPPTFlU#%Ay#xgP5z4ej@pSdGtdi$_JStTuqz{+)Dh$v>yn#OHV*~M4WAL+ zmny%-S48WqEkIU~#7h#j`)FW}geX-k3gWaQmi{^gbZSXMC+$k+u1Y%`@QR)|LmZ@q zBe#5su%J(Uy!gf2Z}6>D2>Zb=2m`daEOhL`o!t+$3y}i6+lB=uF+Ou)(Wnb9P{Q~U z_=1!)v1RH3Y~oVE zz)+)Nm#iCYImL_(o2vdh_38{l6jO9g$cD(rQgWuw)l{xvN^9D3I#E@J;Ca_~)ODB(?>PWv{%SP%|ld#Vl9=>eO9A78$r)wO>|g@ zrza)C!zQKNf7N56U!_=4hM-;g{FfjyCO2QnBtMa*cMahxYrF_*q3;ty;>l(gbwoTD z^~3gNclkaZgu+3y9x`WpjMPo;0NNU%9vUjI#McO?dR$F9)LwMNW}sLffl7u$vt!O3 zbXmi+Hn#NSVQyt(VhgPX*a58N;3O89t}yw)NeecUY-HxKITtG3Afc;RfAJcgsVQhN z)s*p>9P0!IKW}Gd6%)6@4yoOy5|vV|=&$9>3UR9$1S(kFxV+147eq97OHO;OYS{R0 zU8_5)-wC9KjbP2Uyxb6=7<};c+KZ=8zj?gY{rbtnFTY&vJb1LS(s}SycN|d}8wj^S zan-D1zTt)K+FGamLRS@DL^^!KcZ4*$SR$1O3iZBRS||wdnU8l`BJPFoy=^USAdpU4m}zeb|I9!V?jontOE-i=KME{{=2 z_~QpyBp4f83J%BkCRp-~-yE6$CJy{J@s!rVk~fi}ENwkp?Y{Wt(bwNR`1F6RofYUXy2p)1@3||>RzLLEroK*SJ zGnq_jD8l1Xk8c-%GTAB&A0^gUzcqvjMb-CLiDlDIH8AQ5uV?2LbNwg02|XAooqz!J zdZnsz%MDCAhuUn-SY@&54s)WH8f(k&`SUQR1272M38KCeBJr!6l+ToxaK zn)M>MJ5_G_73FfsjS=ZQ=bAr|UA+VY`GwY9ECBlyqZ6ML3HpuBeL{q$<3-RTCCWDQ zm%OIbRf@ESCFqEYN3=Rqplsb0LuK zM;&~#L6Qax0bRY97GR0U%;z_uBu9oBp0MqBRIYi<4It6fAX-QN1M2|$`l9_>KM07frd;zSID-@X+s3~P^odPH#V z5%%$#zN`cysOzR!Qw*FoS=KTb$If-5VE`iR42^qzSc~`qF{VzgM>M9KMFeu-Q@}Ie z9y4_~x`OFT>_3>Z!Ek!Z(SpH`r)oGyr0Rahx^H@stEo|8P%bJd zDW}9jGiFIQk`63Ic6E{pWm`xgsW2E=NM&z-g^84wr<~AG;xj=-?t^04as~Tuf(A%+ z4-_~(M-O_gslG4=@K$A>O$w#`;r{e2fktw5EeD{K*_Awnl{jJ81^Y`Tp7HH?KL^Mt zZkfKsn{~EHzCq%)N&YTcIH3pYs&?UqQ~c=;e7#i_nRHDnWf#OJyZu$gnKVt0@f12u zu~R!uB3Hm#7p2Y4Qj%&#DsHnfI+n!|qRyr>2HDtqfCNH4rOk)t@fub+gFVRwELW(p zF(g6^w+Wev`f=$-aBk-2x^lv{ZR<)6?GC8GpPvAeb9!^Q88|+{Njy)8dB|RY?3gJs zD%s+7{TX4(05PlO4#RnKWsga2=#t&?zklb>WII51m*a&T-k4c{D-XMYs1qrn6r?S% zEotM6hsj;_c{@cYEsf3>Izw5`xGS$|k1pDUf-<4SEkJX@T{$$$j>@46Crb2@GPe}4 z;|elJC@sKnO{2b)Ao22TFqpma0aZ z(s`(S^Wioi*t-5Lo-PZF_hx%^7}lJfIxq97_G@W12`u32ctKUyxJN-k`}BgIQp|N~ zGJ!7$9OdIY6F7LBXYxjRBnWY%*h1-;Oj__`GHJsZ*7-UdDGUT)g_AIdVCvU{wpGQ@v6}^SDuuV=IHS@ z91T1b_YQXv#Dt`lM5y&~{QqgC-XMv1&1X5GrLs!@6R-A;)H0lC@-86H6T1=WXLQ8d zklw0UO}uW6JyMtlcC2cLb^r@j4Xq9~i&VFh87c4JP_Y7er9+97<&M&Tll~P(@{H-2 z2!7JKm#nuOvz8eB<%g=8CXSe{XXegq-wS(Mr5W-%S6;TiAY0}{)04#m8l?!yNn$a^ zYV8@yZF_f9?1u;XOBxEBP!dg4L!WX^ zz!=$s@I^*z>q*dNgfplPh6t0%$>2Q!S+dya5sL0F-Oj7Ml@}Xb#Ej{#t^Xq3v-LOB zl$1WOxY&X#aK+s4#*z+Em2@OhoB2=*ON?;D6_JKD)Mq(dHJ|G!MjF=eF`5w^r_fjP z#4mLtuNWix{ZR-39RNg~+Oa%i013p70Io3cLbklZ^4WpHW@&YLiNO zj)W#MeC#5jql#WYv!q-8r^tuq1+xqAe_?0A6{=$roXtzchs%re7PVU7(pu-zXxm{+ zgfz3+AMk8%l~IxeC0bG7j1^vXItQ!2Zmn#tcMi6;4|di&Qg+GKI&?pJa?3L;#Wl{= zy|c02+dEiW-{|Vn(wiBK4MUBeGaFCDF(v)c6mfsRm13)Yttp~!px#?Vi!QS0QU;tZ z-M^ep?hB%6%|*n^gr1mR?JkCLfwBs%Am%x9efBGJ<0?fDpS3o&J1ZLpc)D$OW%pMi zc=`Sd35hyIODLNz-0I??1Z(^mqx>wbZ}s+8Ha3Ls3QkjWeDW1)6wArlf?eKRfnj1+ zN@n^2RSX~{F@>mZ!*ouiWt77nTyv%WO)o=)4{_Y#Y2Z8AQWja2E}jgWF1D8)~1eOkdoGO5(!oPdAp zm+Fd=c&_i5X2Uwq7-GtM+g{5p^(WJ0a4xOA*-WnHDNB!}1DOnwz?bYr< zZ~f)g!TM@tifdnDkvl(ZZ*{j3sjj=TvHj~NKt9-8*?rmF6FAfElKtZZk4+52 z>!Jqi{lU(dapy0O&J;Zl!8rDjd3dbfkL3H+Xn?Cr)5D<^y36FSoY^qtXzxMdwGYNq z`M#3K_xiIq5Cs}kx!V0{9U;@!uwiWcDt%}L0bg#l>e@_)mM{N?hovAxft(&R z@hYi2Dnrtx!vy?%fKILeSD5+WW0*mQK17QtR}fcCE>qaZGtlHPG}V5z?$HKR`AeK* zVfPyy<26>@aMM=>AZEa@cL4@Fxo0mV!0N}NbPw&wBXi037ZmW~K7~ z=zR0Q67WM4yu>$F;^9Lpfgdb!I=b{$^rt0yOGvb~_{&<;pH|XaL?V9j>Z!lNti!LG zqk~QnCm~?6sZfx?cxXiY9v$PYGy3<6z?j^3(nU~0FECPvcv*_xo~*=j?SfcJ*{yT1 zv9k5@)yhk-#XY=ky|TM1tFlyC7id@)c=53~&QCV?UwrY+*EW^%Q>OciFCN%y#z$X# zVKdy3UrHxg;#H{r@QG3jvY%8X{wpT_E0la%k@(2oXh!e&X&^mvq6~>3l?c9n7&*lu zNCw6eG7?IYQo2HZ5qDdYj~Xvutv4>GI0m!YcN_4h){ln|8@L@kZpaJQO8OYEVL^%; z9{ji9%s(O&h7HY7eCTh(NGZdyA{mAk{cV_u84IqSGF{DEKNlC*te|ppaSfI8rn-tk ztGbTL<%+vYhl}W-^UE)FtEt>XSWk=alpbGm^z~-`*cE6YOOfXtZG$X=+535YZSUZx z?ru-{lRr{JKC-e7ioPXg2VXypL5T9F8E)uT4LL1wH0qCdhftZw5 zI(x5HHkPq)-hcg-y`eRD{PkCwaPZX=?it9!FC+zF=J6w@f7W6fFi#nyJ9zx);KlkL zTMH$%g;L3{o|H<~wHS-0YMJyboK*%Xbmp&nP^9#$eZQIJq#{CY2Do0qr$Hvxyt#@G zU9k}+4H|#IvmVv$Q=1wpSpcY;owpz5-s3tX-uHwGsspv!^sujtxv%T}{ z!OjmWJ?=fb>pLoP(sB^xuaDbe=WWmBrC76)`tOhW7j$zugKUFiPAG~s)=F-q-7T>b zc6N4PN$PZW==7M_Jvkzx1}k(jo590zv8HzS_SSQ>SR-yg)poW-|7GKF*r6zfDVPmL zc$btkuzhk;GV~-M!>)ONo&NwcytlsfN-Z%w@M{V7jRqoyA;_5|uU*3F63HicCLB3JVfcQCS9v0>a&X(2 zfz9>*t;XYx?oZtf!DG^$tU>>lm!=;06ydeuGkFFi*cFIdRrj~XJDnejq|6>+BJON& z?oi)WYw^Jk-Idj@8qXA;If&&_>?QOq*jFT}r^+$j>O#y5;gI$U(Li6Rx5y-{4jG$e zWm1@(~$GLLR* zP8)&)B&e1?1zX#81JH<9XKsxTB>#Lkp*mj-alXXv_IA4~dj~(S>~5`Zz3d&V^bWea zyW6|AjKhk^amC^XD=)TR?H%lP_g>*+@7JAl5mgj_wS}{h)q|f_cGt-@bcIX%I^P!F z9t@w8omkF-C0Hm$_g_`jk}Bp!osmYG&444UpQI^mT(tjriRU|x%S0hZIZDocx)Tp} z3T@dAMyt+bgxBsgRR2xJQc<;POjX5vY!!LcV+4gHE`0XH4M$YbLX`($O;HfxXK+0{ z>%)n^f4pqu7)hb`YY%&i|>1K$#<~$E(3H!9%a>N6=bmIP4?_hwV7? zAO;5?z17t$UidW0E-;FsY{$;4T8cxhn#7IO>t>N{hDppsEIkF?y@d9GTRH`MW6--H zD{s7ljL3hS)kmQTM?83CJ18H4sfjLAKC(82Rak=`g$FSy9xo;b=AlK!gAD*L;;LZC z6`O>{V0H=l{A$!Z(_+fB*R?@pF8~GW*M(W$?zDESL#T#ne`x%nM8w&UU&Kj4rSy({@+Ie6DFPd ztz)k>7n+@->C!={R0kXZ#)8eEQyoOB2D_j?--E)roL?}$zR8J=P`wKefraY8Uv>_3Bq4h)Fxjq+j;?|2|wu09Ad+a zE!736k$pN@q&jtVr9UE^jn8Es(dIurX@N)mcbhffKYF`Y5cPt*EPch7R2X?#whY8U zEQt)J64?Kf{ZExkT7%(Pdw%%VS<)$g^C0Jy!d&`I&JrdeZGt%D%hW;)HVmiTBsgY z1YRg#_6KG@_{h{4eb+zf*mNZk1VfVCePb}0yP=!G2vNXbfBRRGc7&kDv;G?T++)12 zSXgiSWpmYoV*>QFVi{JR*5nCHHF>PZ{E+>p?E60OhU4tCKk82aB%hzhgYE79c-U&b z9>MAWr5}Rw%4BkQ)$-Dg;ebo{i?SX?31hN0q3z_xIE%QY@IZ(HQve&ZK!nV8DX|1* z#I6CF)=HWH9H7OR(4JW2M<&VdG?UZ-9_l(fS$e7G!W?S%A2D8_$H%Ea#)NhX$Dd*> zR*Xo7%rX!b)|iw=g6jNm=N=Bne;nZ%8^YE;(AMDJDIw+nDQ99Jx6o-(FrON`_T&?L zczjHXQI($_k~XnGiOw#>+>^wJ5e5@rml-yY@GN%gM43%8N_v@#93+5gG`os+(x7(5 z+MvoX@!|>|+mlB+OSyt--2@D!0)@g>D(yJE91Z??DNDkpO#5=2O1!;dWo^>Y8`f7H zVwLT3DltZKB>qw(8&2!>m&}m>FMfA4ym$qS%YM#vi%oo-MAU|7t}l3aCnAW7@jh9J zD3L&cKy#hT>CC)rNrWEAz~pirL4U*;>Sa=N=#W2{;PF`W@UFcBBOq>M$$Eo*k7a_v zMGmb#H2f(}qC}n`fD`3g3Cp7n$nMyRc-z*1xf;_}N7Gx<03)x%wI^%99g|~ybJwq^ zUj=}bZp8W&R?SdY=)bByODC1Z!mDP{LggypS(=sILlkTOc>D*pkr`|d7`@nO`CE)& zBP>Ftue%Lk-?aoa3Wir8!WJy{=sx1*z$KM@z_(_oO=&l(b?62LqauhVYmg4x8i(JC z#9)DuQ3SH{{>dx*pU6bt@pWTr2ChovX`wt`*kE115v` zewM}*xDGoOx&ZT}3j>z|`e2C(H{-+zW7lvWfyXM+65~LM6=AUn$9`#hcZqdtE6R~X z)#ekUNk#U&1_&a%k7cVkSVc!VKMK97YY9@?U>;c=VbgpEA<_Vo(kixZSqV-z3J^`x zeg4Zn#6OH&P;!NRCFP8J;zcMSdsa}!Z!-uS=dGcAR?p{1%4i%8#R-exm|vbr5pM|{ zxxBZMFjK1c7@rw5*vcGkuBqZJR^+1-3#E3Hu|1#chV! z6*PU3Z^t7gj0=%ek=^Gl-mdPT)NER;Cd{0Bs!0Y5mlk@XwI~u+#y0_cX#>eRtlU9R zD{Cd&9}GLf#1>-LX$9xX)jfD_S|efH6) zyK(y_|Fc^7W2P4EI_d3hP(-Tnsm#Dp8VVZ{RX#9(1z-K$>83g5|D}E0vRC`WeAb=Csj#)?D@=OTxy;%1Y4tjQ_j9*IW01oA5vX ztW_M*^0UuAV-_veB8~xQC)Y47w$oB9@&OTk$2wxoUJfbaV~4hb8`=`j_i{P!Q}_QwgExUyJH_%(mK==qa3zP-upGvqRJTUysxMOR-3DPpJsEEtv^}At z%?c{KR=zdUG>+F3+Ch$b!St;V|`P>&}s__2&(| zfJBTL<5wuYU{nnQ#Mv@QszgrQxXZL;6YwFFhwVsNd`Qt#8A~*_qG_vxNulf!9%~<2 z+FWKRWh&-V(t$>0i8o<=x2@LA=3qjs)J%Y*qLOPMb5D*`iPI%~J!^c{(rcEyPaZzt z$X`ub$-YV=(xcw2)#QV5Cefq>my=b_1iK>uRK=2tx!1G*^(>;Jk|idyS~)(=m%-g= z1hJm~BB&+M8|ulxX?C-9|1H`cd)EG2LE_DbbZ ztr889U<+6vWRmHK1WqLyXon;Y-wg$pv*;V2YQ3yzy_MD=SG-Vo4NoTzAj%_4_Zo=- zAR!#jRpQC@G&XeuMlE0|4!l)Cnc~gZguqvg$jGMIQpL(%Bd3;LYzqG!qKyxwZi(km zn}ZuG`7WykI47C#!6KPn1Aj*>NK-vhuQb%e8OroXOb~4~6^Qf`n=mCs3}vO%ARZMO z%|5Zjn)pBb$)HR+P6YgA_{lZQA)3T`XKD-2#(LM@nN+X30<5mHiDt~&zAR)DG6!}Y zt8{7Q;R?&;X9i{SQ}7tziI&aKwZPc5(R1?_GOJDuo13mpD)Ebi%msw3W@4&bKVjtc zkPxOr$Bz42xNowxM}7|>PvyR4V+|5smxi`tS-};Csz@PX{68MVs=c9n{%UMS2+DpN zy?KNW1UT=zMeSV5y_?Q1j|b!SyQ4>Vpe72&=fP05HW=cbz*H5H^Y;7m;cEW~4|58( z;KXxIYZ6QBn9B~6^f+W)LNc5TlImJk9%!*9MXGNteRtpLe_!Op6&)xB@a!;-KV=yD zvwd_q;j7eu3O4G?=^2`}RvWy{IJKLZ&n1E`MlzZ{Z=TI&7tikBpTe*9{BYVn9~@1_ z)A7j+4$SBGk3E3I{qw1i>-|R$9z1S-kC+SAr6W)WmiEG1gM~sO2OAJNw?U}$QKqQT zVag*lB>Hn4ug?0X;|WfTdm3Xho-N|EO$sLafL0V4U4DA?t9Bo5&^oVdz-mTfOMt4G zNQG=BF_3iHX$w*2MH*AMv=r1aSkvUlln2BYv&#t%hFm`gQ&ksUraJth@F2c79wu7H z(^%KrEHcHICJoUfFWfS&zlL(5au0s|`ZeS3UbO!Jnc#jY&hH|@e*fXl^w00^my*#U zc+chK;5arVja-bu>%P0MP&f_aeR4U`5in6eP^_wLz)D~kVI=Eto_@)fiP(%QyYhJw3JLUU8YWbBSI08`ISE8%X#ord7GBF21wT#xr0abQmP91DIwr2 zhKm)*j}I;APGF}rf*ER5BEibd$sX>LbywGM6{qK?k8A{YcQ$)sSJ^uoOxMsaR1LU8 zj3-yivdy8zY(uf&hV0xerp6$ks5#BN248s1#Z465#mmD(ClB-h7We&~X`JB_X>qvi zq@RSsj5zL0t!>Z&*}jrq34q4^90Z?Q5Qq|4<-|u99mRIKKZubQ!IPi|19`zM05la6 zlOnch;QbSfd2q-%Yx_ssAwuOg&rfvRPF6>uBmOd^$lQ}X-;zXm9K~c=NigP(Vs!M- zBn>>mtEIAz-0y~&xs(~9Il)=@S&Jp8?e>Q>D#+|X2$;Rc@|_G$2RL2UM7AusNmFg3oIlw(?0J{PWw|3EI#Z&+oayu`GNGl$&$wlz#vpm(})uEB8`}M5LSKy z&hc1BXUz!C9UrpV%tHVZ4F??{4zHq%v}Hg^J??~z|8h*6I3ZZ^X-nE{A9#9b-Dunu z13|L)Q4NmMdDTD!uM49Dv!>H5Jj{OL7AvVD+!)s6IJk7&2@2DmwaR?D;wW?ly5oS8 z7#VVZYMJ(SgMIPALlz^QQA_kfXhE z%f>D?-MjyOq1^P^olN1$HvmbC-)Q474E6zRBp9 zzl7URW;K2P z_uu@uJTQxAvc-fRxOlXZv0k26?1$>SLO@ACmy%&sbMH3bK`NUk!TP=N1weBO^S{-^ zY)2wRa!#nvq?JVp!I|E_jmd+S&2tLFDm7E3Vs2K!*DL?l>`S(fY2`Y(|GbZDsq_;T;W9bq zKRAGbf&-L3C41-6t=XF)4(Iw;0T$!pDC3YroZ#crYT#5t(L%fcdkNcle?kLDq)hm} z!nDCX5!@p*3{112tPA`YPg?l*ZUfP|W$07{Cx?HaQW>VI4gBt{gM-@9xB|upjOPr) z+KrIQp6-wvYqdh|bx&XmCw8$uywPM;SQFUz&Ve73!ItsLqA8kfb#6v}Wl1RBaES|Z zrvjwf^y;Slx&{$0LBhZHVNBK8qoxw(&U9SSVGZiE2IfvU9Ev%ofca{~eMy=SsI*xb zKhO>(()ft0M5GZk;K?Sks5ZjA(PdoaoM`QBkmFF*a>HiIdC)Drhsk+29fi2Fb69rY6%9CgQ`bpx<#YN#lv)cguy(QV|M(Oo=qY1$b7F>2@taFz#3W7X*;29B3DZ^7^J=yI0bZ{_i=CHDXT zyRy~uCjr&4GPsPB0LnJ+jYq>Pv?zQ;pl2WZZRY(}hH(uxkuW|xCjAyZ?xV)^qJK0v z85}8)Fz^V-S#a+v0MBU;!3ognCEhaOIVl0>@q+9b=ZG$Icq~bL24WKqIw#D>$Z9L< ziG!k!qp-6IO&Cm9{PbBm5Doxi<0K8!fsnW_d&vQq5K7P+c*H&vkbWM_&f?Ky3ysL0 zTBS7@lXZA>Rmnw0NxIw6K9t>oYuvVyV9!LQMBPN()BPsXbN8CMTgNIU~kF5R5#Pict$xvT(A?~Np9RZZmg}q0b{kX*X`}` zaan5$uc+hk3~Tm#n$4RMm=ckpZsCBJPsX>tR4fWha#48>At}W0A$SX_gL&<&E%S1) zxw5`>(CZ+6?j9rZqNmS4zc0|=S2VYWmxm!{+qsh_8UY}}T!j<1*s_Zu~kj4?xc=vR~p+z1=|#?RTf%_b+yJr)O;epS|4e~1e@)2b{GE-ubnj_pzBx90fs*sev)we5H1R>3Qe zVEgZ;aN*%o3&~!=bi@+5JRCN9;^@<`GKDR}uiiDvg+00{l``2g)ctZycG#p{W&8(s z5_9nuNY1B6_uf5x@<_LX!SR9kuM$ku`G9+72rf4s_E-3pTK-%Zm!ZGY#JnED&-RZu z@HQMiHZ2+he{bP=7yf;vAthqjbvRE z6b|UEqa**>Xktt(4bLY=4FkBahTZrgGZvyuh z;%q(mGI&|_#zQ!R;>i>#26|*W?z@z<0`G`oD-R!pR@?CRNa77!IS^^$`q4-ORb!C)d*V%<4yAw$sjj8e|41-EPHZ>GQ``eTnh%ANv8*vcTOxxAB{#juLx#84WwGXu__5xT_R}`2rfy%PC^q?J zo6n@+xroVL;+e**jvBm>ixmemNHPD3)ch0H6m$8otrB%%>Y_*pGRw$5dD$V!!A5YT z=ZV42W5OGOXcmkcg^Cv!^;NOD=2yl|yUCpTx93+snO`02S$hu-F@}|hA4)g1UW_mcM3Rwm1kE|4q`0BsCgWK=ONyKiK^aRN7$JDBXb*u-gz3ckaP638MF9g zhUGF#7+=hV5V^h4#mkIB&Iw14MVJ>GAk&R`^y{*0LUcQ3A+xBM@KR5hn4jo zU&SWR4hL^9V=iLk?{2TJNaiK=bl_%+<%KG#f3S zA0CaTS@w?z!M@RD0c3}LD)hYhq7%Ai0er^BxA20P^~~C`vxS<7?Y{DAV^8vtx!OND zgc2MpBRX%l!|=OA8VYQ``JGXL-u3TwstRFB@Mq99L4uo|-ea%Gt}mvKW6jjL4|%%T>joZL*D?q~idI4y3Iwsl9^Me>#1cV% z2qj)^t@B+ufdg&8sgufoYytUvb7f^i`+%N|<%cKMk`jCC8+eN@v|v(4=wWB2^W(}( z1f|y&c7$s%erG80^ZM56_Rrl_t{A|OylGi1qm+U&E?k8+e$gjY911+666+$5ud5_^ zd}1Y3UD@5#Jp7BM@tNg$P0M3V7hE8G3R7uK;mN}I2#2FF5O|0K5J^X@=t2e>!4301 zHqv+f74oA})o3zi)&0=qZ)z*jQ?lmeh{t)jJg6Pv2IVG%yw5fp!NN zVw#<;IXB!F2x;XkrszgcNZprlv3Tf9#~3rbuU5O=4!fuHk_<*OsaxA~V(-foCN@u9P4b}$#Y%I5JCs0P)U8CArF8?5 zy$nv>gv4Gd$#RL!G{nR|;e;hZ6Z=vW5ClIoq5ldFcx6}b5 ztevApZ_QL`c=RGlajU7M>MaVPHU?AaMmKj@$Il^uGRPwag292*2*jJd=0NLd9G)KX zZCIy!j$x`q-)=5{>t@byCZaPEM&18s>ky{ZWtfrW$P#|MI7~!XA3sV8B_Z$^O2WOT zy5y`>5(TT;#F2lY&F^d4JT0~PeNCH+vSPdc@Y0TLM3)fxDNM~RnSRPdMqhl`5F0>C z)1lQhKuyG>2GwyphgA!f2KgpekeQ%)BcfamFqr-fr(lyA9{HM`wVK~Q$K`WfkDy&t zJ?$$n-io}_{TQkiyZ}I9(sJHHu>p8bvzx2|vb(wlzAJ(-yeSCZ6+jr?6oeuK{eRwY z4F4!VpoCE0h%h?EHp$%)W@I6sVbyaLIHed%$ep_*3t(Hen8Kn9i^v%RmC(u07OEWP z<${>bHcEALzq6Zg#$Pq9zz{$GywRlx$uqsnm({piI)HPK$UIG}?#Vep>x3LR>|3x2 zl8|vbM$%z1W43S_u~ykl2eD>a3D<+ZRCCsx5>K>*+SqDLa~DZCQl2zl;HrnoF*5i%5k?WG>t0WL zVOj%Y5jlpLVP^}u$^MpzG!BSycj@$6fhOq&ojNvk+cP9^C@t^XX$jZ>cahrM1)MO> zvA-x@^&Ek9VYPzsM9c^EQ{F((3+XsHF!i(q=D;7uJ) zEoom6Oi4!2g`+{$b~RllJXxaxB%CENDb=(fTXnXEZrK-S6z5wbJV>LWNL~s+`pHN8 zgl|?U60>EjEcq6FisUL{XFP=GmwcMyE-4`LaeF#DM%`zB@Ii9JX=Ic_0@F%-BnxSFu;!#vfy-I|2BVX4 zEAMwPyjLNUjb)g`CFNR7uA}frpwSl^7LJ@O!CA#tmLwFWEaVn=9^{iZ<7xk-6$+5r z10h+qlF|b0W^+s1JZu(yLG6&2R^4#K6p-^VUwY($V=VE79C{6L@&qunm^fT#oYuYn ztVsKhvqKzpLxb#?Hezh2*$M2ZsZ3dU47~?@U{F@H|)PwjBX(%Sp$CuoBsf?Uo78g|G)VAdHCCE-&_6+c(xI? z#4~Ct{fLIQq+8P%vYa#Df!7!*3(JjHB3OGcd(F_3l;=8-OR@&rYY8Z*a!`8cP%Z;xFmje6RF}7in6N zW^EDbUuc9uC#u`H)6x>H`V!<3XoD~LRk!ik>(_T$T#EQBg+FWEd8oxjLDpLNo@rPB z-{iT99~`&vHV^DIQ%L$pXE=lk9)?F_Jgfu^A&>${kZ*W^1TWgB!||KLq0n|XM{9{+ z2&NaM!qZ1Wh-f<|$aH(N`qwYJpl*afnKpanO{2;0?AW4ru>)In8U_XxQ6lz1>R+@| z(un_ub__DU?<$b`ZV*l2=9DKGZbG7j!%}Dnr1OaE-N#Ke9Vp+$b^Zfx*fuH`i9kp~=+ z>WzCB8f+wMhLd7&Fiuil48Axd=ML0a+trR*DmJy6Wa7o!guvX=IVS)p~U|zY!Q%i)tXt9Lxyb!X5 z_XVUNPZH1s%r}ZPL5^q>w~ylb${c?kEMOyw=2(FgoQRLM7qIOlOQMhldwE;z{xG;) zg?Hi6mMoRZ;!xRO@y9mN%6j1btvIqtMP)vq#&aLfk*Oum$ZE#1m03gHhwSkl!Nnf( z_D`3(Y;F*Mmee4I#hcKBgUY&s9f)-&P*kYk6KWX}ELH& ze)CyNrOaj941lG$K{Aqt!fuvQ&IIdnN*W6_Ao~c`z*}5xh+H<#E~($qW>_qUtwur# z^j#w9~34*szq&_`C;q=;dU8&zd@)9*;e+DaKP2=!+Yq%1?zg8}Jfh zQ-YKvj->Mk zu1cd#+9QFI1+3*{srnpBQe>>famidUJhcuCW}*>d@{&NYN5WbHNs+NKA*V^!v&#$k zvbHdp3K$;sy^#ImN%)W;*M4~nn*p9ag3sJa$ z49b^QVQPW>>S$$@b7eKx3}^{g33b$IQ9!1{1>dHU{%5u2@BE5<5q>=My&{O z*;Ev1wBf1pZCl#8o+27#qUDMXI(j{$8#!l`xW(T-HEn(uX9Vm-EJ<-v!d`0PZ(+`O z@FGbjic~b{F~|$lTi+fGWpC@6OT(8h*dVIRgHUKgMYQ5^>KmdH1pPM?5hjsF5mv$l+#ThQ6M;IadaP1myfMh8b1@TwHw|5A?l zIM!skN?VidL1n934tlcHHd$7wLp@4$waWzqwUuJ?4X(2iClc#BTy~1Sv!Rsn3tOis z94(dFwu%#yp+Bt#4J=7s{IvXq<5=Q`Q1-GPLMQq`;^DAc$nv7jSOAwVD-{C_M;~xk zC=Y*m7b!N%w-5SLiQUHr zwAP0CviHJs1fJ9N2TRf{Kqilc^v?SIS!jwb$D4-?a><5OPpRq=e)NFSUKx?vQh_%k z&fg5LcKaq}N-AecexOfUWb)h``aO+`9fuWwPjc}53c^HgUB2wk)R|8CkK#o2`+#W{y;Y(J^* zm9p`Sm4}6tubvd)Zsa$m_9j{q4YgR-4huhd4^aEEJxKh2Op(wX9;UW>FX4L#BC)E>6YhqjL_Lp-DCx+;!9?XE>{2;OH*XI(dmO zyt0j);-t1uH;HijcMTg7)k$W<&jC`8l(dRlmIGN1yBK^e$^TZcvT^cu1cRnjV}PUS zOh@2EVuNF=c8Fb@e{wjTy}H;NucDa_UG`Whoe1u)-8k55b;ABfk+&PytAhz}Cw%Cz=u2v(A_t_N&6nLk>B-)4h-H^wIjG|-(gvO;tF~h3rA~>85j&L*r(MeSnNez(C z;f0~hD;{>>C~1+hD}h-?E(-MvmlsrQ42{Nuuckl&m~C1Nvvt(B76f4NbzX;mFmDlp z`>x3kB8S1NQmN3XL6FLG6SU595I*4P4P>m@l|yOw_si*Q^QwcJV6$vRkRS|X@ z?|pCXu=Y8Orss!4+i0X;zPCfYduOcP2uxIceg^`#HG}{$#C$4|pdJXCSH6+TO8xgo zec4iez?oa2B4v3Fo8{hI(hC6oCzrTXa254WA({>(?St9MlpEx1edId831Vc?X+(g8 zOnrE+f>-%}T;4S2w$(vqLx{9IxXVU-94sIh=m{D z(AHyE#h$)0Ivw_3K>vA*XOviBiVLCo$P>s{#XzX?U}O5~8uzKvzSj#k;YH`OW6BXj z8MSBz$N8x!DpZhQmN?`ADh(wRZ`BNA5||XukJ_lM+0LdsE^H?qPbaUfF%E>f#a$w+ zTo4y!pX64%0LzrJfKQHci9bo$gxrSc9pQWXas~lW@GJT2BYpyv^Tr*(&~XFn`rsR_ z^q@xRQQQDv7mGP6_)N??iXbcNU ztOxD0LwVnd88BZl;@e<)Hk=N5Q{qX(q^3t`vkCv8mIxMXFf*?JQBE4ueK?=Qjkt%{r#fT&9NMiXd z9W8nb8T$hpm^(#Y>C;b>w`|~i#ANN}n#wg(R#CcU;;{aiBK>ZlD=lBMJ86@G$Q0TF zS+dlev0b+tCu4_yeeVixL+8SZC|0P^GToDz<<}KN+)M;o=9wtlPfyxGxdr3b-_;Y0 zQ-Q1H^OffKgy!}1qj6(s_np}y{*}FP_GZyW}hrW4uK?#M$&czlM^*c`&wT5%t z_j~uLPNTNIC`3oAG~O^h?Sm^|Jxy1jT}dZu;e&s~86;cw8pp{l0tc^@qolm~N64Hx zr>`Jk<>yYi?qcU06Lj`*Je)*YB4lvsg&&{fD6e4%Uc|XTB1T{}f0`u{(SB3%nokak z&TnBURh|f7uz%YuzWIxj_~zO)_<-e}eHwOB`&S zEsUU`Ay?AG=~h~32Cq2;^7riUPKY*)T_*VKO2Gf?e0F1@|AfzOkSEn1$#GM7RNoI# zwan{7f5T*XjW6y5Arj#C0TQDluqjt;&QwEb&VSPaN>^Xbnet2=yQPr$q-vxFcEVowIfLEQt+~gPG7!g2vp9c_~-Eo)eTSEnU z=P=s>)>P+4ecJsh3ok_c*uQ#l^%JYYJ0X-d+~_b&vYG+ajM?Eg+Y0D*GrKN37zZ06 z&J%QS=1Pn-T{is0iV9bEZLU~Xi{kE+FV4mHY<9{)h!dBzBR*U^NP>yxO2h8Pt6nFv zsu4;Lz|cVM<<|IcM?xqLh$9a`?xU_eBq|Q~ngP}dSB@Odlra~iLbgZ(Ozs|7i!ig5 zZdC@EKxd5$8KGGCY7&FDWz*-2>LyZ(E=oa+^N3oNvsBhQED%W9vsL|JZ2J*sIm{mY z^NPn6a=LDm(?6jG4x)g!9LrH6vkMnZz2wMC0w<9AWy#?;HYOOUjX zfjMLT0VeGo6cJV$KG2cW3pYBFTIL!QdgPGIU6rgkq-T)mtJt-$_@oBDogvI~6Ft&3 zjAIHZ${jbe~)w~O@v2iHJj+Dz4sFhvXag`F@DPN2y>A_M9s84Z> z@~^&HkdtFALyqcP&!XYb!jGL9T1&N>3*V1TnL31|8ctvIM?#3z}{ zH$V+Udyym^JteR-K17{c$U>jq3a!J0U*9|?1o6!zqg8q!&OVe#?A^F;z#Tgbrd2#B~9!7$)wgT;b>`L|CDpzW-ai=R4f^SH# zTBS7Amsi=70O@~Zl?6+G^_n6Tgd(tznM>3Ee~{yt2#fm@k$FNvDjp=f^-~abY`>DQ z8FD_-G$>kMSBV?L^TwA85Nz!#*5=9!_)`o`+O8Z`;oKq)Fo+?A62;})Y)`O>Ml3LL z`d16!p=x`i<8>7Wti@Rgw!eiiioH}KGC72fNCcH6=_#6?H=f=INhUxLLnM1{PuLn3 zMk1M&Sk=J0p-CN!DN+*jL{`43gy|t~%r>h}sGl-Aa|@`Qoowi$E^rjthJ+7u9%`6& z0U;<@Q8`l65plqqG`9<7zeO2Jrs7kqkfd?5yc8tR&A~Ba*cOF!CYP6lCT1ez*EgDO z+pnd=8?Fh3sI(9wrq#A%GA3}?PNNFx3k*G)uRaA@1(?e9vUxb=3y>vzBDsuDP0aB5 z%}3(X=}pK7R_^OXa6(!w0?0BcF)Xf?lI+>*{vam)!qH=?@*?sc0fMd~D)J}Z1EuL? z;=9Ew)0nb=!BpE(=Tf~bfS_?>Dk#qpmf)w(p5A2Mp^pCgwdgRq*zDrT^!4j=3`p*V z;7zjoV&~w~UQ|Ux|JKUi*S(&3B>-S1GF5&39QLOQik0*t$x=l>9h`_p`TNDG{gubq z+8227g!<;2bJaqR@WCfvC-byZBj4IB!I1U0(5|*!$!xX`XYcT`M48=aM%C<%q)G)s|B@ZW z`}>>3JcYRu1$amBy&t_*AR^7KLdPMhLvRrH{0gMp%pgKBKwyZ%44EeUFx1iQMuH8O zX^qt?A5^sjk}$h9F-`%nN)9KmRvWLfejNMWNWH01&USupAG|xldy@|i^kRga@z^2* zi!J8M$&w0w6AvXD;*6-7lDOr|ZKb-%&^jhL&S8yQxNe2&`i%>P`s3cBcKnr%s_jE z0{AHp{kaYGPdp^ZAa`&-r`v9^zKF>10= zvNpY;FqitSio0kXx)HnaUE_`aR?#VgPjMcstOO|O$#aXHfIM1<(as#C9~>jTDJR=W zh0#q?k7E}29G`-Ap`vo(&UpP(vgo}^(`X=;lER|=kCPSE z1P}m@uK|hd&qD~7l%oebk+?=*$PBCz-2SwkXaIs7Yh2YP3qT+p+4$4S`vfB``5WDq z(-Li};LBn67R%Xd3Qj6WW0mtXRH!}C%n^Y2 z0mK2RD(bzKTR=ci4oj_zP{~P2O3k5#kFqGra*V`AsGWxjaRHM!kO48qC7WVa7A__W z1>^#O+^(3)b5U{t1o}~E9%je4nd10<9raMk%O8Mgv4l{SaQZfZAI0&dr>@gCg zjJTQnmps_!#TZ4xD%rc8+Z`5KTESRnlESTsbXPA(cs(% zdI;}3L=u&q+XD~bl?!04+7FMrUG657aqgKgkiyt-3fqSZv>lEdhFDZ^&sH!=BXD{I zhsTc%_<4jlrTma{G-RVkY=d4zz8d%L@u@tVUSQ*R*T*V_cRk!8Zs9sVZ}qVH{DRy@ zK#q1NAUPofO_m`R94XA!gTiG4*tceMC*+|jFDND@WrZi-VMJ&quMDVTId4gK8Nj6x zdK?u2eCgLnKijctN`^(DLo(=l5@$H}9ssi>Ibcu9%Am6DVrBphEP%Rl%;B`y*PlLJ zDHgmll#7*W5MgDNa;&sR)vZFu-0}e_q+;V1HotWQTA+7|uT|vEMP?L_@GP>-F*@ft zt=XIKfQf~ex0w36Y(=AU3eFi6t5h>I zTW;(!S!?{{)%h<@wV<~`{-p@gJ!BOz*- zR)CagKU4Cb{-5V`FA`@Uuk`$Rjtp5I*#bkeUU>hZj|U*)<|cd09${Mg4z4_mDimGv z!kSVqG9^knru@;;M%+R0a>SRMTfQJ*xS7H&&=4m)j7s84?`;6jDXj%5>kOVtF~++S{fr;4rUP#`;NAN2GI zh&~M4KE{E4oYPNXe|~H?T{of?ETlhhzYW-vyM~NHMYxjl2&KRDUJQYU<)S)S z&NU8*C~6zO`ZE_=Q}?#mo-d+>{n@y*s?``H9E`iTZVc6`s1=kI>Qeuqg_Yh_P)!z<|1ync`KqhYjxp)`ZLfl)}T2e5|^fSmzMP$ z=iE=T&P!{3@fG(Pu_9kfut*Z7jbI*oSYSzpmg*L!cB)G=6fQZol4H7w%;J8>f#L?i zb)Kk$X=gau9K7!zD@RmXK*S~{fqwy5S_>LPKHnlTql*944ekFtPwqkGCLDT7pu9fvv7^Qp z9x^0pgLiNN&eGHw!fva}4f;^LgQrwB5H^3%nDwog#bF5rd9}swbY`(AlD=O} zJ%EY(Gb6-D)%kE}HH@J0k{$RJ4_tSByqV84+939=4D~E^!qylWIvGpi`!O0`!P{C% zF>LW9$KvZY#k~hIB6>+gMD{5XA{H8c&l5kiJCj!cr(43vwiLLKqNC*6XrWPwR7+R* z;;A#@<$9=KL@q$!QaM#7h~{ygiwz>D2`SE#YqXP>^jt19e$9Qiq@o>d|9u#iHB=Jt z{u+i&t}_DMbrK6wUb5#nep5+#9#0UXwsC?W!WBDmq{ZE0!3j(6g3J*-uiJQ{({fm= zSn{eJ6mKTWH5Qv*iDE03F=OPGpw?lm3-Ee(z2Ussi>u~TSs$Y6a~BG<8W zr;u>hi_nPaOmdS2g$f(-noUv|x`mf5$O^%J2!nV_%D@Q$SJRwHMBJdC=C^lR(LF3h z)^d|FGRHd@ox$FkF`#_oRSRfcQ9(rBX?(#AUEJ1jP@=;wk`@GbcIz$>B(9qTuiX?{ zcvFaL4P+^BlDiEXcWh1QPc}T?(V(=)?C1dumMn3)bczNeb>+vIqjH-hA>L)u#d?fF z$Ss}tEgDV4+4Ds7L>8zED@)6LC4A`MlfiqJ6t;B_IgfX~5Ab*Jh zgxlfy0J7m{{f1qD`-0$tRALRlDkE1WD<`)MMD6&?MLB+gc+I4{YXuc&VGh1T+-ZW- zX;utcR0;-74u$(#*feD!V#Ov$SF9p0A@hY$_r#DDp?I>xaL>aeC0joBK12>HzD*@y zB+@vSP^ceivJ$JC>Gkzmgl45mv=sU(5>zEI7313Fq;$!scXNoTntnnpU6OhI%5fK= zs2zH-U}^O1tT^z(N-Bll2xI0CL~%oO4sagG=F>w)=a9E?#M8a|0mqz9P3O5mb)xPW_yIQ=HRmMjt+00JwurHlq(877?E}xyW1=o0Pf4_ESN= zl)HFHVxbG`N19MCS5;CE;dJ_$fRYezCvVTk6cTERl+LPM#hm@547vkJJ2A+75H zPo{`~qoT(DnO;aN>^jI-B$yI4#uuCG)0IhILuVI9P;Bl7L#PZ9spHTc{#=jeZ{a+P zqT|CCS2N(|*8U^;e8f-4Ubpt2$oG@*{k4359ljrarS-qklyD~^7zuF>N7N`l=Mu9L zkJz4$;;nBr`6LtD!$cj;3h^x+Inr=kUJ18MqhE$8W8Y~;HYH$drF_}Y6JTH}2r)Gs z2BjorAuwsU)v{Sx)~GEkkOD)fkI|Wpp}ttvh~|_oj&HX%M(A~;U7+SQV-J@>-mZkEsax%#Xh|}@8iLQNfg;K%p}uf_a`mzDTayKdT9>wJ@%5?25+zc zqdH=}*=@YiAayz7zApt-_AIx8@GTM9L7|RmUYXLM!{n z=1G%?_#)GCTUmimT3y>BL zBc2A(lq}bkU?terRgte)glcJII<%EqhQP-Lfj67sWUq+JbAy-ewB5jPO*J09MSU*A zsEK8(Rj1NmC#}#@VO22S3k<{U9MuEBIBN$GSSJ)b#$~C!PL-WZkRv9iFbR?aPqg-O z9ET0Bj7h{>DTHIMVR1NT0FKnr06)O(V5Za~7CelFP~?aNqBEdKwm<;nis2x}(rA`O z6U*d-vgEYDU@Gwpls5)m~wn;z^80QYiA%GF}PMR5oteiCvCQVAtvAmwcO_6cnV~Z&CDIGR5mnVQ5BlX z##;pO6O9}!1G*jF>1OAN5T%x!2oYG7lq(J|q(5)WeN?;Ll8x7ifFYk?%PFLiV#vKS zR2aq+R2zKwi5{6`D zz+Z{i+#~L62e#yDP9R`ZtPN`{!?nRtHJXeYSlv17fV;n4->)2%K*d5bejgZiWXy93 z$s(3Wm?0j4U4h|fF*G3NiVWsD)Rq*tTq;Yr`D%&x*JCA+Ta#dE#E%UZ7B7~7vF7Y$6Eja_@Q(ie-At6a9&cKIIN ziXHCR#LW4h$9&6zi{avkupCJ_!^Xo71m8U;=hO`-m=+ z%IKoZ(p3w*M6gQ;b-bsZlKc$cx;v@I5zdjh$*f-C&~|WSr^?uXaL_fAZ{~&%gxkMD zW(TT19%sdEa^~U>9%hi1k;8@LnqYkf}7Ls1g25?>DmFlMbL^-)Z z?;$t=1iTKDVfw0(A224E*Zf}W6pqSBI!z}tLVy4DR|j7`X^J-BhP&_Vi1JH;=N7I48zYV8nejxD-L6qE zI-od5;x(cC@D(vE5L}_Wlrv~G@@SD(icf0U$#-Vf+}QYO^WM8DPsW6qhOzGCFMsHe zZ-wkG`d=C0Z87a%J%SQ-MvNdO8gP12;&CjN=QME{E+bI6et@J1nZ#W)5g^Ezi-A*S zK;`!YloVA?mg9duG60hO5SG3kfZVuE#=}hBX%&dsN*Tl9iI@we~19N0_q} z46&!_D_9x|1L*a-XdH8=AmH{X-F-umWh9BKqEbd-*% zrdAk{R$5FIq5?z>wb+g{vhcsA}R^N+<)Ci^^@G_?nKcBxAmkdBI00 zi~Tmcg;#i-j5%|$T6LHHDx^P3St4TZ-V4?!Aqi*edQoo^@PG}wuI`=&DRZk-aheEE zRu-AAYkg&UHNrvE^{rF(FN(+4HQrmW?atoWWcV8L0y>f8-Q%ctaR(Knrj!=s{V_XAMz-ZUAo0v+iN( ziShjirzE4uv5R&$--T5D9-LncVdG&7P%5*E(8fOpY_OfIH^)V2lrH!wPa*$$)IBWaUcS#|ovr zm4Ga=o_TdLzN1D(tS{alEx8N;gJo-_FYvhlmFLKxe<|v;iaF(7!}0hnF3rjH2dtJ7 zNx5l5%k9&Q@|#X4S(6Ar(CgR+^VZfZ6L~sl&x}MUE};Tau)M@VG`46HXh91x$)#8a zk6NNryv$w%;ok?I4qluuK5_RMTGav-kYc@JwsY0rK;R0rwLeGY$1^_iFi?>)oXSPW zifq(ZmjnXRn(zdYaHIJuG!GfiEb$xf*9&-mQ5UMGVg&8UxSwn)(jjszFlWMIVpmcv z^d$JJ99s1|t6_k$k!Ts52_3@jIg|%rao?~g2wN$v5CU0UCwl?QDfBWLI=JIcf_*ejt$epFb3wfZ)Z6&Q(0)jZN zYbA1Xg3I+&IAQgB7yYBb$>7K&8?~Eb^gwNp77EwVto`CXm(Y`z_!*D5tX`@~U7{HB zIu#wcWY6_g?`9x3jg%l{Gj>Q4T9a3h*xbStpm&1pSRhP4XR;WlWn=wC*l^uDEYvO$ zzhW`u>$!sYam=C0^9w{g-8j^nAr@&{QL|`R@6Ex{WIP?8%-Wp`(3OV#j={X61dXFJ z=`E0%bqDhCDbt=Uya2E9YYn-2ZKZi>UsHE+j8#h9x_pV~hzdk3DxN8M=y5A!QL7yQ z@StiS9Vd1rdR<16T?sD^3$ZvDVgrXA!cFuU&H6h&N>e(5&%b+7z|@XxAP*3OiK%|X5g{V z>Fn}&Fh*$)p^yxW`1oTyc{@ctj1U)NAjnd8;<;GU8beV2JJU9T$-EY4q1Uew4js2g zCDkz!y~0ZHts_W_jg5g|(qX|UKY4@3&i#Z9vsx}O#Tn~j?Jt`y7EtYrH)R4!K(_BW zb|Tc%%L{VA>5f7gVjO4~4W;cO^-1kWeTEdyEhesJx`BDACX}cFu5@|F7ZdIvc16c6 zxX+v2_lR;hZM}wj=<6lK;Sxei`r>AYE1)w8*cGX-pyla;s^@>n`nubY2~R?KkX|J1 z=yEz6!}VB>r1hfmqT2&#$*D$%AfiHi8dBO%lC0r=^vF0AZx-hS6MLIr z>YM~sKe##W362_D*rI{bxeYcOFZ!5j-&3CR`Qi&)iC7y?q+es`F(`&SN-GRlSv^@q zcQP4I7(VcO#!_=5<;V-X=YuJ=`^I<#xL3jkAM6IG(}4V{nqW?JO%K z0h$O&BMBSFoBw`aSH1Md?gX8FsjjZBuCA`Gu7-2K2!=FyhV!abs{!BI z74rsq2a-+;43gWgUC!r|t@ZVbaSNUawrHb~_4D`K)UN**52|16K7I7?;pWB{t=b7f z|2R(P_B)`+dk=Em>@*nxR!U5nDByWyC;DPU}7S5_b z*q^qxKpV=sw+)zgeWX_3LW0{gTW+3(6w@&H=vF&Nt z)Iv2WpujCFmknLrOXB;*v{Xa;5tUNZbFEiGZse44WUEOZB3#`6%=*r5jBwg_Ym7ErQjc5?CvM@qnm(0lt9A6~H7Al6D;tlKl2b9x*H&j`&fJ%NjI3ykFz z1Kfa+nQ@?HSiktv!A{|+ViB|@?H`eN9;z~UOFm$P6vEXgd}FaXs4 ze#K2EXAFT{ec<&3+TtV~*5)!V3G-b3OK3Ip-ceLre}I8IzADdyp`lr?29l7l*jd{b z9m1mb@+fqZJ%Elkx`Iu=0&T5f?N*?i2UCW5Ih;J!k&Ho5ckFF*AwuChi;ML$ScG{~ zRe%1BYXAt{OW6%XxZQ!EWkig!;G7sFVq5Y~qSAUWLlYQVj)_Ovc$L+r!3mhwiP(P-2b=01%Fl2gwbF@Zdaj7{hc;hPCS8UbfR+^_R_g9oHnCX z-tSGZqoOTA7s7y%LLA__7hJ246o-{y;h$d4X+S@b?C`f5C$b9*O7jnGA1vA8ir zR^{#(Hfb74@3by~6;O?fP}y=6A!dsxfk$Xz&51IWS`s2A=YoqR2SGOAIMPYoImCVp ze~lFyfsuF6J!Vf)g$q@EtW$?(Rx%FMCGe4 z)#MO@Bjx~C(qF-Q9XehndKVq(W)9hYQ1CK=5_xQE0l6**3hA{ZJJpCv_2@ef35m_J z`nT_VsgBvvh@?#v2BL)48lea~Ss+KN1Z9wRP$4woUsTZ1_=h>a^FJH~qv$qJ}cK@9l#>Rn{T(G}#fZaDmYGuVf- zKyoljS8%|x^vJ=gaa?3?*FQ+;#rkkwS;r2Bt;fZ7=y?pJJxOB>!fnY7h`k1u(yu)P}B7P(i z#>1v;72m^#cfj@W{%j}fle`*Ik_^LH?Tr1!z$K|8y` zJx)WY4I}apTV&DF#-2RBt+^+Ut!E1w%*t4kB{cIvfl=A19B!rv z6JWrQ7bMlarjFpMh|nNyY{Q=^R*`-pO)R*T8`jV&cK5Y4?C*`$ZOP5eWa4Bslp$BV z{?nTOqBAd)F6m$eW(ZQ8t!s@%B{AW}PuPH$E-FF;TfR+(EFo>Dy547U1Yu(;ggJKZ zP?WfMQty=u|3X)}mXA!14BgY@n=(=o@+;M00tJJfJa-{=btz_mT^dR_JMoM+4s_54 z%E!%>5&|bi^Idgjfo7OYOI=bAlLFMl3rl-ig#8WdS-p_5VcDP@@g@gc)wOM9B?~`T zLrg3PPxB3WP&?!Dw{s^(VoTG|dc_Q3%ZhXXJx<6gu14Xi3Y+xshLZi#q3}7RJda z8I2Eiv~+w5XyzHMVRVo#VU~x2IEwBJakCKsvTl^Kd$fKjt6@dMT3NY7i|%I96y@Zm z*@tA)qw+Tl2oL4)p1q69$%1R_OXeZr@XaS*~=G}EO zEw_5j7a^7qa8sZY0(#E%MM_x`7xFSwAN``eR(?8uzjK01#WQQi@wd{YjKrwH+hkLMRV1I8Lkw2z?2z$j7DR`ZGlZAl8|W0k&sqQkIFpdL|0ZrUgSUb za{I6Cy%+m!jB~ z41Tb4h(TY$(3Jv)(Lj3f(C?tO>m#rnY%haF9bsA+J>2h~M~i|kA=}5>2i`khIealF z!Gz~7&QjjWl9=pW|AJ0dB4XJdmMXXK6D1c$P-0+?ffB_y8$FHdAOp@3ruHBk$V9$C zCoGl^-4@l?D;Gp=p)HD$Xz}pH5J#DkK|uHc$r3m+7l06S^+L|^TDdjpUe3nXxVFN1 zYGqmwwiLTUcX8~MhRkAdFh1J(F3-M=LVwfMuCas5!1F$L5qiGhO}S<1Q(zv9=W=ny z_aRlKdB6|@8qrbB;L#+gZo#`_#t@$q zDHFmTaa+(Im?1io{{MG9M#SrcYrqAc`TiyBggn6)WT+^#W>~WAe^4`qs$|P*+OMq( zTrq4m>KOV4R0_e~XrQueYoO4mIPKU4uo=av@&!Qze<$QR0G zR+B6#N5YV?h=`#OW^ediPRNiQ7Y)RGZBdpgx|tI7mcl7DT z5rIje@9N7SVP|glJAzn|MZ-d!$ms$@V!51;?Zn8ehhQb9XP9V~Fz-|j)ICJLNr?05oqac@;yDJ<_r*e+Tk&7`pC6cFNS^Lrrm z%sL$Jg%=`54g2}^z)nUJ0Vmow^Sp=kkN0Q4;sY|Vb&Ygoq`*EDs!~TfheE3O+cBHO zkil=R7$fw)L}rJ|p}~rSy0pp6tx$!)uyfXr9zYKkHf@o6H_W`$y}5zMpD|m+$e}?J zWN@^DkeUKg>+8=VfPJ?56mLUOZW;>YgZKz5!<0`*(KlSM;qDP#R><;EMp>zReA$On zuX0X+T;jKOWZsrqzRtI;OZ!*lZir=a%Cl2$zTUn~oei-wvpvWvpD>tm*y#wkvA*@41*c%0BkDLWyzd7b6=RiRWTZD2O__%wP zqfxdrfS*_}abX#nkDRC@APsjbJxND61ubRq-wUN!K;B$XFr`3t_xD4wDmW|yhiFyx z3`;bIg~uKdwlwVwXzpe5s?RG8B5!^731g*aZ|p~Tln35(gQXcO#5)*#U_J}2afB@w zC|PbnH`vM7_vTBh>#*e|rJ~OmEWAZU1oGPg0-M4wUY#0TlWjJ+6P1RBQ?Uct?@+9G zYu;$(jR9M9Zc+55sM&);?-xUhgmtdVXV>SrSaJ-*FP_%?uyfh({v5Nc8r%5a?{7C5 zvd_NBe^!J`3-~9*^DA_<1hfxzA|rD>Rc-DFU5WiJiL>TRG^Z>qLs}ru^v7~H!~h3O zoa8w>UU}ho4!eJSCJFN_P;H_;A0yeRPC9 zE+#3XjiR%4JG>TyNjMBfgdv6RiZiaHv8Xis{`e9@VcWY2=?A4=J)Q`EtAZ(DG#jxSC|cumGowPh@$_VLN~$%~zEfm;P}ne7?NwAl2xWilC) zTGA8DV(*(Ns9W))_<|HKfk zE6|XIt*Cift2F8lvH1E!cO|PW*a3SNP#J&NT&mTa5D#%P033RS<*@P5$sct_Qk#Kt z=RfeJkW&~(xMs{>6avBr&zH=j2<}C(w^60ziiTQv&qqe0r9Ce@q$6cmcn@+bd!Yj= zE^HK3aWfT0^?w`G8J1CsSSt>AABWip5-2@C$rdSE3r>r#KJd0L-LR9=Y_arlJsZfoN;!pi3o| z@K?T(c(z2KGD@6t&N$rcxJ&6EnV2@g6@X`kBtlZlNZ^I_uXkR?vkI$}1PhC%gpf8$ zsc=2h8+K}k$l1Tl2!S5i7K;ZMV<1;3&@em0rR+<$fNOu9Sv1-{F5ITBY(bUe4*W1}uNqhpvl zrjaJ^3Rk$R{X0^`*dQHbFi8Q+{9t=eoNOh7zC_!AIc(5Zw&^7vLz ztAb+Nql;nx86IH!*$zLG`Emzx!B276$E{8Q6zsPJj+cc>8nx39tg^-uV1uZ8+3p8B zsoc<%wN8oP|cmVlCPmDNBs+YkiJwrVp352#4;a0-@KJ zn2n<@mf2*BW?ii=oYzW^7o+EsD`uI%}Z>ABdn;gCD;u|>fZu|rtG@m4mR()_@Ssv{@O*2b0vZR1%WJwxU zuk_nBv~uKUscu$LDAmdm_@&E!pjg?7rKkec1dEO&#f2y$TAY<5oE>@k^)Y%T*|a0`!$7V{G$suv_xRyh?+RL!*WthRWl z6b595z5q}?KoAQ3qE;AHufjnpE`vmy&!{XW1I`aiZURX~xzJ;l=SWCrw2->X;PHKD zI^d;Hw{Ta}n16T$%bz4@iip7*t-&h_VjKyK2z&x1;w1TTbF%M`N zH1z`6GHBwy7$)5UG_$*Ci_y#jS_VyXV(H7x(&|yR!15)Y#sR=$+ya0*A+-$o0_1V| zAmjA29<_mzdc6O% z&hUX+(H=`&{olxA?rr1gQw=9bKS8@}Zm<=hXsZ~IVe_Hs$V)MYWLO0CEJm@Ax&_dF zoJ+YC@x5JWdjJz?%g;Y?a)hD#h!i=@oS|xW-fVo3sTsZke1aJV~~zc$aPfZ zZ%73aGM7@M%0R+8a=Zggu8o|er2ebyY*78~o z$8bhLt!}PQ5nFVIZKVwT;Psc`qC}*E&)6M#FW7J3CVGGN&ANJvDr-nVpLv)dFb!fS*s&w@Y07=3yWcRt>%L>=k%}cZp9WsS z*cZySPQP!zI>!6TQprD1&Spg!tQAuYn{rl+u%^T74rEN4`c+vf&hkpiZayqceN>uS z+S=xqrDeY^OMU3A;YQtLKp#FBzxWtzv)*HfmJ1wmKx%$Jm|b^<#}fK^pZ>Jy;qo%5NOw10s($5?hhu8;vSgmu+wA-}nNz`zbA74L{LxGPfUD0qR+nK#n36E1R_a+^08r zYYWjn<@Q#v?~%O<9|-=TUR!b>WJ$Qvbd`o%iwf?n?b= zaMK_1$MgR93f6bxSO1PLso?MK_^LA)@fSDNxChLiFZ(mZz*?zqg;x6luWF+36lml9wbM;a%|0dfiKaf$vQO~tCaOGX3DhSodJp023wm$f+F9Az zpu!TJ%`wZZpyLh7@6$qlfARaYlHVTuKCJ{DdO7gPbUGOCLu9GAs+-;}AteDT`Q9Gk z_9|!F5}Xkb(*415Xf4kpn4)4TPpqBGHInq5M^-C!oZqll>{xzw!;u;eJiG0qSM8nc zllE>6-a22eZEmbR+ze}juX;GBemBP2x6E`%u+ZfZh}f!!U(sTwU%o~~#D|?!ylrsT ztdFQ{VfA%9Y7Lxm)&9rP`yX67!K&8jwHgn?x3$L?LX0beVGmn$THRhqnsSA9!LZ{lirSu)&h%96{Q z+=PEtS!tNJOOkoAgk&)n|EE}egT`9aSD|S_ZEba_D?sto0!+fU=2@DQ2&EV3xe7uR z76GC^tp-gYQC{}B(w&7@VicDsL6Brw8?xLxn9utMg-WIUapraP^rb zbP?E$YE<@(BU|d}njA{$QA1X$eRbCF(YBB!@mf=wf@cXPP}<~1ra_ur;>|qTJ_F?K z;V?x=z2M?B^+?3kv^cRlbMSF0gnpr%gsO`RVe*QHXD*FyLUB@8qC;2;HlNslIiYLD zA$VLy-zZZjG7TM9f6KslI_AOW4xA&uTfOmo)SpA#@fL)>1ynYwa_bVCF7?^dtyWx4 z8OAIQF$=_&17m^i?1W&9-DP9CgRwks3XLF%# zRLVBYC{j*D<3M#-3>~Hk0e!jUzTPRG*}&s)|EM+ZA%-70dG*2l87)4j3yU~jbMc*Q zIlU7)O09_Kr;}y_!#+5N=Nx~#16|As7!< zXicf}e%6io8Y~MMye(eeXxscApi&R@K-qBRtfmP9zOfa?u%Ee>*748rk?~5dg*u?3I@pC+h^t} z>kAKSOB=}y16{eHQ?lAcJ2gd(5n;$?mvr15kIvl$nDdN7J%RY%-+1Fa?-SWI9~>Edw}DI+I-nj;6Eu8p)sSqt zmfrlTlhzw?k>T<#$L?e=2!yTLz2?dGtLN<#(ik5`Z5mUA6Ohz?`K-Omh&IP8uyc6y zH~T=DA*O5qv6`}N9+ONi=5R^I!6aRf?n{)l2_dqdD-;Kq)xy#Qi>Y&wC_3~+^@3!& zMr%5oG)g6|3w^FMIaD|ruiD2)xZKjNeGbzdL1ls(tf0%0wFpi(E3)vYs2wT_sc?h4v3HVQSMl-UV+Y2%i#KlcVl6ogk}QcIDl0 zQi1k%{^x%8a$K_)ENRvZO%QXMtT8skODm|Xos4I=$Z@ZE{9Sv0|Kx8+?NwnlnGHw< zYaX1e)}~jrwR13IK*89N=1%_16^ERXYvgea%*mnRos&_HrGzZuGt9B5R$9&aG(wK? zz8)Or_%>FvZucx8*?34_N3auUg|+&+OVau8Ay3dRThwG=`3{o`6AOzaOMv+un0!{! z=+HpAeEV%o6OIXGeI~FezWm7zzU?%LOtX+e(aMz<0ht{`T|Z+Ea~AL5-bcl#7 zwz8QE5RJ)v7@X`zUs6R8Tk`h7ZV^cW4~1T}_u8-82Rm()(+O;67qIz(w1`tQ;Q`Dfe>m$a?@+QK`9wC=?$c0=Ejk&lzCPa)1;&{PWMH;Xc8ey@Dcpm!+E4@hlk?>G z25;&}AB>F9(X0exqpst3+$SNLjw&XHjB9cTq#trQ-qCwdi{J@a6c1b^xo!0HCRf?G zMFW!J;k_aBk`Y-TJdS1Fm}(aISaH>9eVgPsK79R(Eb?zAHd0}1(jt}!uB|Q<2q&`W zl!*k=)YUw!%UCg$4piqdVahL?Yy6pCMc>Y|l@?my@y=>(eKa19FUGZXnEtlz{TY>n z@wB$j$JN@OBVZ_l+07fhbDW(&SjW05qq>EU1R2*Q+3eBb@yWB-FZOqLUhW=y2BdzO zs5{}#GbfBxjsWE#8+4aTSwud{#BjYk>t>P%BzWHDai313%1Y=2_T?^5f~7})D1XN1 zliA6l9CHMV4;qTH;1up>jFRCWnX@=2XRsIHXi19UZ)PLwtgXcG*4X~W?B89?6&41CbXNgG73ff9y@=)spX0S}vdJLdPgtWX&KN5tp&lNP7 zw-H7uOBe|aNjDSPXKX06q{wu~M)B+nE^<=5op4orAeiWx!;WYcW}8Ad3Lf3Y`A7XJ zwWaD}3Y%pLu$ee3fhlsfB%S4%mt@6CPQfb0&Q+WB61!a)rDeyY&m3|QTpVr+C0eIK zUyLhm?8}^|EGQ(p_FN-+@?uJ7h*+>tQl{u#t%2mm$~ijQb}1m!zuToUKwj0qH#kMY z_th2SWs5;Uhiq13@oZau|07{BwmXIKudQ(?kGGX(6jC)TVYpLG)6%_fRvQYeYY$)4 zJ|cJL#~)W~_dmiaArsl%I*gsz54I8M!u(wQmCM#4)PmC&2Rr+(ciXGAwJ}ipbG^3q za*sIvdFy^_{PcdShcMA=U8HoYl$YquV>hZS{EX%|D#M@*fF|Y?Ccw1B!5-Y zi@;WK0xUThDN+o{0CF{ZfSeU%kx(*Ir(&y3R$UDpVJVq@L0rVWQhIYbV%I4oUwPAL zjT=A7V%LD}uDx?|jKfT(p8Xx^u(l zS`mFHhFL<42-MMB26-W!L>y&MNm&x!R&@A*kJSg_);d*atLAzLO#2Li)07@YVgI>1 zg4qWX7*mDaQkD-s4FVTO>%}Vo_Unbg{_yN z>yGb?K=QS5n4S%13QzXog|o zw|1RNo~|F6TY{H}umGj?4R8S`vdvmdVkY%R?@GDau|qyXSCA<0T1VJInRnpFl{a;k z35RWUN*q!0YyO%A$F zw`gt#54yE6QOa2-GNPdo3A-X9&C+4;kDJl+VpHm6b|wJja$=Ga?qOsTpA^U`jZbTF zB{*7%m5B3#|BU~Q1`o7u*eK{d#Xtzf&~mM8*f*4x^;|1F7{QYi8y2DHr%*=$tYXzy zX=x7i(K^9_k(Cll9DWA@vH^QTg(3j4eU>t|sHvW~R&VIKrSbT1y zW3hU;JO;}a&*Hky^;t=i+k~JfaLXpDb+I-U(LzgQ^|9fVwSzP^%a6fV|F49eSO!Z5 zOnF>6K(%Lbh%;Pq!N=N+#~V#<`2;Ao)$v6{W%f7ylv`r&#ix#DCHm9uqt z)W@w1tDtI$Aq757q1nt#`CQ8A5ts58TL4e-;AbW;pJ~rmBt2V}t$(s!+kzjCkP3Q% zF7s^4kOqwlg=B>C{C5WiH+4Iqv1&uoM<|p=YifBWsXRwW4tCSX1Us*fPYz$!=`14x zelWxG1wX%Xj44w!tH^%RI3ZtRxvSiL;?c<0#9~ zw24uwRcm?EQBmI1`e=715Fn3&9&7DUKuG|5xxXSWEBlUv=peg4=}i0WEOJ|u>7s*B zAvU#sA{*T$N*f+3NfhlwAp!CQy(ej~RPjNr1WKaT*f`1TTT07_E4VUI-h$`GH6neZ z1Sic+)upA>wpe)lyC`ZgNsFqPVNF4*x!W?o8~?t!iN0VFjK1I+U=W80EDt9Nfj;adMa*rNaP2`yErv%Sxw@f} z^#X#P_fN6}NQY;1I92yuD}_Y!Dv1iFj=nk1Ubb9)7NqtKo&tZyM?~PXYiC6>93pG- zXLtE$weZIWN3O=(kq=vgPy`9KQF$g37EKl@PFRkZOFTw|%+Uh*e3H!WVr zfs2}*Sx}us(NA|#9#01suz&6Bz*Pjy(!u-ietup|0E;d-Z+kT zmS`R4GG)#G_~UPFzrzclSce4Bs?Kk}Dr14sq>jQ zJ&9#BV*3bQ_UJZcXmEWanZg@nY_}D@R`IWhq6^F%jymx?69kH|uvAE5^D$vFQKIgS zxRafZa9*n7m!&mBo^O6Xp8m|FXi)6rk&a0PayTMoJ&1+;9eN?v94_lcs3b?Bcf|)n zPu7J}T+Zo92y!N4O+AqEZNQQ)!`L|#BPpbxB|0F7vc`cZz36YF6vGh#8y|DnKr^%iNaAjDp;bAPdYq)UQE|OaaRjN zRLWBH^uM5&0U{*OVb;4*Hc6>LmG(V!Jevf;GdAKLJmgR+7^FI+A6@)Q7)I5#(uU~_ zi;0-+2Sc;)SeOmY@OdHL3z;)+My>r_I0=>_r2eS{UMg-)XDr1ikfL;=?GF%Aar$A` zZW?(^-bC^vJS|ntOfu^ZR@g~KKFbFy1Ur)TR+Vk94D=J&L-FF3K{P%h!O9tFe>a*i z_MtO7<`?O2>8JrPbm1J4pyIF(wAHAyUiQR?Xg!u+j1m9(;01%0Z14M)+_ZrG7YBcZ zGbNY++$q{q=00KP>LNE8C?<%ptP%tlE(@(qaUoS4WkiMG5xomrx+xTpetq&{|HaAQ zs!*YvW_!B+cDq1M!tdv-xg>;pE@Cw5J3I8Vf$tBru~JlJl>j&{5t(mKhO*B0%p;aE z*#{1JoPMEOc^%GnJGtS~9*~>R2e;osJ1IX-VTTNksCS=9#c)g#`qcihz4Q8H``Lc` z^l1C!yJNtvOW%~!!P5+`&B~z1mfohrBfBaZ3M-&*&Hh!W2b}vi6C9G)*oCL?_|0`{ zb?e?eX8mUs-nz?M;L#Uv_E4<02g}z#dDlnR0*u-%zIHk+D61X}ayqUK1F%F~kHkw+ zjyim=x8&Uv%quA=GoRZ`Sl`&mJ-?{|@W3vNyZ+!d*J$dE%hr>N7*3)OxTBPftGOJ_ zI>Y(*e90EGDtIplI|pY$bp*+BTZrVr)i5a)601t%9O43puAC?i+3Q#qYHqkxfHR1A z8x_i0fm@+jIXH5lN$D#EL+CAclg%z$d4nQ9Sx{O#@Ue59EE|;OvApP)I_W_Iz)gd< z)sNb*cw_QZR)*92eD7BAga=F36w#SR#LiIxqFO2Sd2Q2Am{36#fTD(5#T1IBZE1k2 ztxAwiCs0FJ9=6UwS5Jr$hK<98mh{2nq<1D z^S_QpKq50Uap{(N53zo6?GXhz^;m z1_7`VC46FS2QGX@9oOmd@#_NH#VP@dhB?d1(sHE2hR&31FGF6k!;CxY+dXzT(>EjV zx)9_WH8PhpX*o%Q+Ud|#b;q6UWQ@Ih()-VpNCAWn8BQWi^i$fQFFOAOYvI7}EnF&& z8}mgeDr0F!zOcnPL?ukPw{f~d4@vGmdE*m9l7s2Gmrs*mfx1t=vfZ6b`c*Nrm7yu! zM9(QkD5K-5zTLXDvYD5-$QKrR&e(Wqz^6|*;zJrDDbtAcmz+T=znjGL3666@P(p~; zy;LuLIgjTdGE=2o>tIX^6um#N#NqIkEkTa^@3@o+SDl9D8X-WS#;h4{fS7s16VyHS z)h3F%1cdgT4Ri*SfzFBOdrd@ffLtyP5w-M8EhVkm`oJLAslqRUg@j*Hsi{>LbvI!d zb`TAtgAN8362Oq50S-$5at1P5kzTfjDM?IcG-@}X9}7)6Q-bZ9O~OP&j&{W%ULvsb zg;5!q;0x+Sa2l3vO6D}oK}p;g={syi#XHlSi=%Sh<{N_gDRR;@_RvN#TCPT+Zdh8> zEmZZyJw;w+8-byY^iew+5kx^2r%wbYvhVw`0pa5U^!zs;B$SgbQi+JXx~uZCHl)PX zQwS%fYFC(w;j`$m-G07kuWpEQ{$agj$@uw_5( zPc=X?VM(PYf5qmb^{cD(>NaKK@EAwOwe0686c<2EQct&ESWx4oQ@J-=N3XPjHi+#w8m2jBO8-D4!JUA%$4BZwXhV}lVOHz z+&F`yA#|AFSC7l0_r%v9yv09U4_EQC3VonIM4J`4cLJH=tx(rzwe^1#VMoR81l~H# z*ff-&70|tu)1?>zEa41avr714a6V#eGSJEoaLFy1t&^Akagw_#6E?3=Tk~3iB?%+u zS)XniC?-2C#&t~JQgpBA?zfEH7Uy`lx43pw>#o@@BGrDO{o9pJmiheiT&YO4bs69c z1m(!B+1U-w`#h+AdOy9z39abLqO24*7zwRX&b`Ylnvbt>pieWo4{tf!OI)OTBZNO; z{GGUb#17Gvi3c^3D>_DyCix(8iDpJ!PF6k)mh%?b$%m0?T#quP-fKj@=oHn_sv_`; zy1IZ`QdN%@V{cEC9@TtIaTI_>d70_0gi@lf?NL{k7Hl9stKG%v=QFE?Kdyq_;`QTQ zC{x^0Z0&rI6?_D6jD|tP^(;P(MFp;Jp6o642Nord71UGFd&5+QZqK&7UOFUFb{>ardVTwi92?L>rj2 z{&9`y@UrDi?s3@J8Pn(?28BUnRZx3l zl_<(KRe}S9ra#N5W8(p9V}{GlX(A&J#4L{y5eL+wcvAIL1IGC|$ z%I25{N%x~Dvl3rmtD#vCdVho{uGRn8xtj3ZZZ9c+x1=Br-K7MVu8Jb{23U?j5ZSV# zNaGuYGOU8p_*M&CR2FzUMTzVh^bi88KDtQJT$x!ZfN4A6F&K3 z_nPcQ8%BNisK;_e(w>8<>3cAUqK_Ev4_0~*VAFv-s)Ct~w>wlM)-(ovT-Y5ZWL<$5 zlG!@OT*gB{O+HB?o`bxUS-+Zf*WP`_S2ck6pm)lRIPYufC2BkcGMXX!{IrDVLE%lKx9{m7+(HR~=;<>j=`kW~Dm4(GktOIOi zaVx^oVlyafK`ab0Tq#)wTuSCao`@w^JL*VFLCpXmXYyVUdyMFv6RZozICQ`2;Gq}Z z0Y!RUA4)-1@47qpbb@5&SFMfK7aLzb{E`f43u{~kMZP9OC^)(|NKLD4T*>Dx%Jcyb z9n{4|#o=I1%3~*#1!wd0iU@5A(hH$-v8FexYp@g{4R8Z6Qy&~a3mYx>`1kFBC7~jB zVWOGihuHcI=NA2pg>PC{IH4I#hW#Vl=7yQ;%C5?0Fmi`s_h)PO>HkO26RV?N-cYh3 zGdQVC4aj5SxAloIKDXlnR!I~Nk7DUb`PvZi3jHmV&>tpXDH&m08=4sea3Kf#(i9jn(Uy+2Y#k8X&r6v z{B`^Ji-YHCJ;?76D@04$JdIceT0?vnqZB!MK4Xno94eryl)2kJLx>rwe8T=BLg9{^ z4D1+Jgs2&xf>$A8D@F;!V?0Tt%BK#EF|s#8P@+D_Y^=AU?r@3`N2_s1RH@hgMjY#p zzHUE!^6<&t+M_QXf3f!X>n9s)+fUkGtv&qWtL@#d9)I~{r;P{d?vA7mx;wFu?T6zt z_-aP@)|$re&|h4w@(P%aN({-vvO`rU%mo|0+>9_mAsZFxZoE2 zLuWeLy~aT~EQu0XMbA66F518xj;dm($kCDqX}RyvVsgL1Q~B74jjpeBrV_7MOkNvk zufRnD223-3&^SqvmaD7h0x(ZL1R1~KLy6R;MYEL0T+iQ~v zc+3#|b`$R&ezU%y0C?5GnCJ>sSu>Yri-*sFOdJ*%L;cG+y4 zT7B?;?@rE-@Qg3wxPD46z;}omk6QykpI4YUN@WAIk#{>)%2z7ooJA$dnNcz1X+7+id!!R#g}7wvy7@SZy$sMJUy`U;BU3YIwqqo zzJ$Up>h*{osZv`l2KD;aG6DCpGlEZpT;0iD!p`Nvnl_mZP;JhuGhcuGV5NUG znC}5usv|z4s<&Tob%Al*rm&ZbGBFYb__dE#!8ZXClIcO1Njkisq-ZHuhV$|D86S95 z4JRPQN4*zg1u~d3(pd-h=DePi!yx8g@44!0&AK7!!&KkJ?c@vCz)epn8yJ1p z@W(60|A+@Ar2h^B62V?(F#ee|&zg36ml6fipH|Xr5g-HRDO6hM_aIkAL;rHxmE%!O z$iH;nb>IiVz=;X%qV#_{xf0m_S_;KYR}%&2M2wP}5X92{>BI1{YXtkW!j#pTdb#omJ6I>per%Ixlsh=W&MIPG(UBzl^tXV0-7z| z@~UZ6gKMO{bZX!PvkW#)gly?>x!tqJs}qp|gLz^>@ts+j<;L7Tx1iHg4P`T8ilKeCb9 zlrlT!EvL(yk1+3UIbD`A%bqT8KJv2y89?k`mOWkGeE7Q`FGC}GJs;q>@dMRVJ&JyT zJv$%Bz}7@gw*Q|UJiG3r=Ss0vH}W^~<62rQ)LXgp&kH>JJse!u+JJdQ&5PA zAP72bVx|WirueP|z`_z?GF0E;&7g2<69W=QEJs9+K}x$I01UCXy5N{pFT-AH>t1Ye zWi1o+oWk(?jzp30R(S9aYIzR$B05LUpMzt@Z$1Q%<1Bz@>fFJ~Avn?jg_BFSYkO1V z@VEr{)gQO$uOU7QW?-{3^G!XEhvb9Wd_wmN&zD-9ALZxiI{&W#Je**(RFbV+W%mqW z?@Baw*;R*~`W5b4!WiZz6SpEcOVq9c0|f)WZS%Uis*9_JpZ3r2k`d6^kZV0?NFq4| zn}F>6CtzLSznz^o(F@G1oqYwWVGI6-TqD^~?EuvbDZG6Bm?O>uS)Qj%VZZ zIb(*e_h^?TY1Xf1ved7`edJLc9LCYOZCF15gv>gXDP!u&`^4&Rs)(4g(vlv40z zRQzT=-=MO8Zrlp+5n4lA*={X=Fc%;QX%KyoDGYpn=TN;5zjK))Sb z?;s~f5ogRgKAqsl=LIz4+C^NFTp$#BW?*l}&bk@qcEC{XBM4bx=#IjbC|xD(mKziS z85UODCbpHiy_{21O%#;&~B|<)vgGOXw6iOQur7Xi!|m zgHd!bR*J?%xTU0P`L>E(E0kE4_af06dXNolfAp>}u#)EI$XK$m<7Z73B+SGvL@p!P z#FHoyI0?h_Lu0cSqsu;Q!Aco}C4cDk^mcTwnM@_rV6b;CDy#ZXM#)5s3Kc06XM!kf zN|X_zoI`CFDxa)3*<5@0Ajf6-_2^rPB=gOBf_0$~kNxz(O8)x#3^hr3!zXFJ-l7qq zB>jKYhw}ZpYf@Y#U1Kh&Su3a8J0~v=`8qP+5k1|0#dqZW!r%Z#`>Cka7TkmR-}{9q zMu9>0)(qQ^`Rx5*e%Y+ABVZj#QI@y1hD@1(U_}=2wk6F!o)V^7EZqG9tM0rhs0lvs zARwA=P>xEx6pu#JG__N@s99Hn#b2Ve@vXTgO8E)W)c~)ljV?Sm!1)00Iz@NDKH_ov z;PuWuy*bd=e@zI{o#PD$)U;dp1{4TLYT!3?-LoQLWM(rUh4V3W&&N_-#}u1R$J1u& z*xRsC6wPIT~aG@KPNSYiGpan{F4KHRgBm#>f9ufDA`mTu<0qI&syN+{4>>y(iFt`HPe!GJB}nE7 z>?Mlkd&jLsOifjgvN5W*)#DHVFaP3}3ZGU>R2$jfCfus<|#pflMLnh-D_+sY>e&G##l;>M{QTSNdSB-;;*m? zwq2v~9VQh7qDXFK&OBqXfX;xlqRu8||FQ|hfdoFvW_%_Sboz)lpDnBgniu-YL!5?- zfE4;B@|u+)t~0@+h-w*mV3Q@hDZYBY;SP-686d*+K`n}v7&pq;jahS$~MQQ5XiUKK#&el3yZ-C?SI3fl~)7C&`2=EQIk&CYq(ibIp=`x@iM8 z2J+5V3eH&`O<7Hw5#<#PP!_JzN#*tl$YvY&Y(3>@yCB5)g^p%CLdHanuEQFh@rlAcEDP1=ria76=k}$u-B84-B>yG^1jSF+t2wW8~Ac1o4bJm9IFdQbr3F_eke-IG%f)g8P7QfVB6Mt2HP;-A3nq7gdd#RCRTMsZWrWW ziUEwxpUK=(&a#_qHq@d3M(%lWK}h=`?348?^fA#z6!!&~)si(vQ2XYo;bxLJMK0np zoK?)NjF8|#ZIH>h3gqaGme$c#n*YVf@lQA;w>8()E!%+!F&wk70g>7mc)RlBAd-28 z%s{%B(wJi<3?Qyw2z4GUn$mPgPhh86(u@*)t`PtTNLW$NGptJs#w=4HQI^MKWNW$) zil;pLDTwG}_ew%-(4M`-yE|->JH0tVei)EdeVfwAN03GnD-Mez583)s=i|zFga->o z@{W&F$Rd5q6PMT5a&HJhN%*T-7mT)K(^wLN6SAWhw!W#I z$q&*|XP)+!T>{ecX(kkf)D9~XQ6;R|yIE!u8)GC~_GZw#(OFm05Z*IAQX8So0hS3J zg5f_%B0j)D452MnJWPZM#63dRMRSi(rU=(h zEf5my8ZzOsKraC%8IMaFXA~FN&*WD)u+ud+7r!*)<07(xRwfpVzJ7_7QVy+o>pG`$ zIC~}w$`k-05oH>dfqqYBg95XyYv`&J#n*WFu3uJMILFYDvU%La7N!fnwIEd}*!VwP zhQogq>3BWXl z`6q=VfMW13^%p^Vdbjir@d|uesvRHk4=VPPtx3CuDr$ z?XDzWwCFBUI4;Lr+)={?av{DJI+~aSDasFjI&U`O8#2L!t)Ee*ZEf+w9*TK7zE)7O z#mGK=-tPUlBBu-TYp*l!3~~BIzggbigYj3C__ZIgXPrM~ZyB-!VNR~p!{p=2;W>Ai z^|eEGSRT8^?@j!cvjWY+gAglw4E!erDL9U`I*QUq?RWxPt!7#i@3Y1~uC#BUen|F@ zy+P+f(ZD$|yP?l6AoC*`GfW)t}<%dLf zJhu->Mv%%H-Q3F?i-yFCEy6qAmnG#)$;bvg4?BLC%gE(W zX?vtP274VFMJ(*AGq|j2%2hNG3GEt(Ji(WO$U`2^uPA`eZFQjF~i+Ns)_i3W`<+H$(3?~5Npxji{ z;WM)MaSOXFG9FEqNg3u*nPp|1)8oq}0aMw2fFO=6@hfKX;(MB{LCqxtqTO*Jq&I}E z`;DMo{^1W`0(y6G;KKoy){-#}EX6{2G?4a0EW#JiTxZSs81f!sN!KJt`~9FN+sZFJ zL<9CCQXXBo;#Tu~IL6tV)vEoerWMxFcYqTcWmW^`Aps}$!NIuo9%t&sPcxt`|FML0i?>~m`C-VKa5fZ+Xgl72uO1@Xa_t*0Mr|`Wk-=Bx?XY#!kzIWxj z6~5c@y&k^z54BraxoA8adWI%wY;alN<8@?6(e}!*_|7ZVxtOR`H-(M*F zw{Js&Htge}wOXgUN^L6x&_wJDn5r@a8SPvS1N1N?^VM2(Ku zXE?;cWkQ^?Q{EurnAoME+u)1m0@$iiQ)Z?d6GTgMFk6PxttmnvNHa7P^JB+N6)3{* z*6CpO3}TZyo7lAf6POS`u_%iTw8?TxiZH`MOPPTbhSs3>6hKHO*C{s&699H;iH()^ zVF}5%CdPixhA}|JA_vuGbHxrX(%O5&O zJk{vSXq&>{!;x`-6XTI#gQXPUm4zz%=t!}jq8NjnDhpeQxGWnF{25!Y$x=dScx5c) z9~o#kYtj3Q1YFUR1~JI3AYd)h^!Kj;v94~g47>o~IMAYGrGtfuC#_Pz+zbN@`!;4x zV3=VPWWfH0Gd|3_9Zj-^^Ycw?knk+G>`?1aUZU~&BFP}hbBk~(SC~CBA!kKNnbpN9 zn!r<4N&|t%W=$%(Sn=uW-h#0&sS{+I!NwMrNpY3a7EOjT<9aiQOAozIt{IBRETt{$9!^i`+}l_!!Btli&_|B#6+UF3+F{M6r1p zINKI!Hxih1M-vn^*rYW@^pj#@`A$-T1>8=hv?k@I9Zbcg!?_fCD7NLnjJp!P3fpVc8%+(n(x?WgHG${68WA!8#lMdwk0rn0Tv35wLYi+_<=!15MV~K`~vzwF;M@Z1d#<1aoqpMH5B&#EZ7SJsT`pQVkGf#)O9wV_0O?4!M|r6-ZFt3VXM`G zqA0Rf4lm^BH$DiLtZ?R`*?OLisgh>eIlE1{Y|Y5VEQopz#$KeeV7ElAN#OnaYZ#C= zR9lPsRlE(xk}Tbc(-th`5*^a2@b`kEbog-S{B3kIX>G%zv@9;-pfk=}WDS>}oLILl z=eMk?(oKq=f8J`Z!VJPSo5tq|KqSjJwQ^_y7X53cj$1}Kk9=#Xt1G(V%U(ja5|MTx z3yO2yDH<~;Vyy#ZX-68`hikFbB0{cU8o5=6^|_$Do8w~|U4%x8IJ;yzDIQ*&z`Kr9 zF_W!Q)X|Bgn#f$PH{9t-CA`yNlg;}bTD4|Fj=DIjBkgVo;Qm-AA0 zo+frK>RBE9ui}+C?&zClz!@UE{wH{ZLuYP!D;zn5_Mx=_tp_=#{Z}ICZ_!dnw$KU4 z4v0YJ8mg{A1sN)Nw+c~(z{N&d3Zf?&T)`}ouHqvaiPk$R)2xoZut8plbzzcf(7NV` z1A$-$gyagQ*d*m@XSM>>njH*c*mG9<75sDOD5(~x5=O=~Ymw(VjYAD_YHPJk;Xeb! zba6HfgmdGlVr_QbV86gOu<*n4&YAdXVXda|P!2@cxU->C8j6i{7~9fhKS2r2x}tWHbFlAp|9(A2SCd{-2>QL$B`t;#_Swh_J70+x6_E;ivvGP{R5^ zYUK>->d#5zayJyU@K+)1Gq4qYzbpMNVH0lIiiI^d#9@%=66_c<%ug_Mj!t48y37|CRj&xK@7yVNnx3i9Au&j z&R9X|&Tmj3$2S5c=o?x)Xgx70O(u|*nPOqHBzveie%lJ&S3y&Py*DAvqoDg2hP@0R zzj;_zKMcNBeVD6C{?pk{D_A!2y?%cpyEF8>C0P(pERknC=n0AHXQe{3=zsXFM(_Ry zkrXn?B1)TCIbs{Rx5fIUHmMKvn-~yXl14JufaMBnDLHqHw!0*M#SzuKz4+!t>%{VH8a$DC7mgZ;{kixrQ|_ z>uQD(?%UGI#J1V4Z3PuKHrVT6#yeFE0@Wd#t_&R0xAT*n?ytwl{W-NT@2}32&=NKb z^v=KRcYpq#_H^tZg!yM?@Xt_|Xq~o)%3)ItBrcc(6=#Llhd3px5Rx--N?z}ZU}UK> zbV`wB_thL4==fR*Qxaq)pVD|hZ+=YKLJTyut7f8;c^BUt?74sSP=#||5OQvBH^`l zcE~?4AjX1Keb8(GEgWNIU`kK16su(pu?Q&UUZr`O1VrN^VLTDzPF3K>TFO$C)n3T=^JrEnOd((vGNKYb(JtkH*n-KVRxAMW zV=+|H!SfPk-NKG|FuUB5dBsT<_OtjcBCDt;sQCn~`l@hl7IRY{Imu-+<_baO4lBTR z`?thlmdi0jb67i9fgugNk<4%$C0R0mtx$5{LHTIF1W}f0ji)_{I5zMjDegw8yD&H1 zVoQrKk|09|CxH%hF;I|1O%@Qv;{eM6zBk(7-9=PleV-*kRc)D`lLY^Eyfa3V6duDWU z1LiaP!cb(TxCO>!i&EgxwW0GZ+n*|<;E1L_g|&o(Nh1zN*0&x6LQPMwdgCQ+3zAP1 zO_anducSx|+vRGy31G8i?;QACb`hQG6B+G{Kt@k6pK=UE#<3Hq%z`IpN@1^IhiG~j z#KF^`sxUb*$CxK_hl}XPc1b`~g3HQGBD5|bB8wEMsHuUB3f@Pa+cp-M=`cuH*=vD! zmX#SSN-d0N>MRt`W}A;lwE0NZVOfh~!C5AIF{D+Uw92^380EPel`;m`Gqk|wJ$N{ zXwkd3AJq-bJ6HYT4}m*+WAZ$lc64czDX*8>#H=be+SHXu{f+cJ1d!pQEQP=FWn-Cb zw1~s1{h1_3C*ODzfgWs7OgU}&3OfN~e;=gFxfIc5x3aVZf3Y{%*d%9SR!@7;l$5Z_ zh!=-kRwE3X7F5hNP7q4OF@NwWI;6J{Y!{BIZoswuCQ65g zP$R5j_~v;Gy%-MC%{prE;OhR2|KA(K!Gf~*3Qx*-r)n4-Z1e^ll)#M&RM0-hZONG* zTqZ{SRZz)s&4L%1RRmQ?>Q%dVsJv0UZ&-{^yK#f)m;Ppx1Xl%F!(c#c1b+R9f)YUQ z*c|1Ticg!pxh^ljD`Jpq3_@@AS533rrgWa}i!w`in5Ys2B$rb$WPx$_QsWM4G#e zbY-BVDMXw!*>{3{?^A!Mn-5nbAAoH>6D^cIz8t^b9u7G&h>$CO%q%B)j#`8kFY_hc z&rv=kp-UN^Rx0lD)hGMC&DfRx z(N+@`;}w?7<)l&XXXzYDO4?+~ji(f0;|fT)5h{!%!wWi!+b9twtqZ82A$pyBi5f_q zCIEmM2AxfH%d)l&VrV{8hS?zw^osGaqTXgSWLRejKs6|7+G;Oo7}PH|it|QYIi$CA zg@;QEN@@(_rCJ7v1+7Ly8(Oc5lqonw6}h zBlr?HGMa20F8^QUeOFy1E_hMvAs2oNrv#g=B(3P5R(D2kJ^mBj$(Eath}2NfjLbF< zwF;z|Do$>J771(82QP)IU$v=8mE)fv0 zkC|%-PcFx!4|HS2{0)6j=@F-x@Y9T_1?*pSklL6GJVJi+Ad&(l=hGJxCD_ixaGKhk zv5%If@yeX;I5fsS8u5>)_lwQUAN(C*`=`9)mRz!&{BHHe^AV13Vtt})e8qyUR{?Pp zq=G3f*Nqqdm>DpkBAqJ?^$E|E0H=E7fMDLsX}z)Nlas5S4wO@v0r)d%-y zt5`lMY{I6V>t(hcRnk^!ML6Jr)ds}P;2i5Sf8&o!pOi7MdsYv8PFHH?D*I)}B%)93 zPGE1?z5P`l7F(5FDYnG3nn-3*mj>U;VF6_c zUbJahBL?0NA^I3xrl|&g zciER?crqBa9a}iD!0O1W4fmSum(SX}doT9exJGraxpR2*xA36>1Xoke^d4nPS0?;& z&5__G#npLSec+>+kdzi#NR}5_A6Q<*qVY*1;}f~*h&(Y#I?FX$)7hjUoK-~PRkVua zuqMS{wU3W*v8-MD99L<{c7d`qb(W%~qf*_H$b99QTV%OrV;X~htX(wfD>b`k81sQl zTNpeynx$GWkVNYMD)cmM!Ml+)vxw^CoqJ6u%<2}b1Yk&SSB2Nx`JemU%W=(aLD4Zf zG{P}N1&$Ii(+VnA@y_<(=E1$@@ptY0{gb~PwO57bg!7RK-aI&2t>I$d+BsM>pkRDS zryc&x6~{E{-!QCnR0H#GsCeh(kztY?9O=Q>5YzB~cz^6b@J#_@7SsyU!4)%Nzc87W>StQ99Q z5ofWh~c%QXT6W&1bq)XLP4oUG~^m?DZ-kE+AR( z_euz-ql<|m2#d`t+vWK0%{l4I56 zK5k=XfrO;g{tAnlD3)bKLl$}gL9 z{2A8O+W+E9D^m-%W%lj-Ui0Wxd;i73Uw2;a9>>YPLPLE#-dU}!kH*9C#kjVPTcKO` z{tRHkqS}Vf-PPKk<0kL%CI;?wV7dpFDg0Vt+Tr2iPWx zq{+MP?1aKDC%jbd0O=q}GKt8!D=L(T?|OIE%_J2_^}Ky>dnI%OJ9;++hJYJ7k-wa z6W;Be;aQGCCuAkk22L)oug*$AQ<|a7q;<5t^VjX?FAkn#`)vn~cD+rb=c_Nz7xkYk zkT)x4!d4{X^7Yv3s7X?4LFF$$vC&+;yEXdtCpMa^SJJ35EuQF;pccZX`jhHIvp!}7 zFKA4mK>T`%Ep4#c;c*x*fw0=b+ic693C5U)N9twZIhUbxEB7ydo{2ZZ6 z^zZqEzYwjEQ3Mg3uChIB3#Q{i5A$@$2MtlWy4e8^A@Q&nAy%PJk<`6JL>oIcS_rSa z8;@I0K;yNw+QIH$YtMIf!Wr%gULpMo0P*K*{(01*jIe?dgfuGpNFFRj831EZsi*-a z7m;H&Urd5>lzH0BW-c&rI5)#Dz+ucVNgQ4C4|JNYxX+o2v^T z2EUImqyeV7Hi&6V92l@A$NVLIWIIbAgTCF@e2*eV9vZ1&p#2ZXa3=|Q zfUnd-IEI%kkUb|M{89Fe#!gHYmKM@!t)QE`OIAypLQQp3u}HC{ht zi^e*Kq>=EZG%Z;k*LeN#2ALk$cwIsuhq%V;hZfg3uiFb6+u#2v@VHsn!Uy2szYmi% z)<1@coLnH~@S#ajIiy*+M@d0VJZ=|L-_%j(aci?q{Vs#d3YPV-Bn!0i(8Z`0VnDC| zz!=cq4KC=5T3`R+F}~U!yV*XmNPd`KDlec2MiGSokK3K;s52~u>zP~9fU&-`k>xy! zo6eF`9CGO?GHGUnQ)hHB>|>sFf9Css5#xj!NeS(c3Qm)gQt1@`^;sce4d!}T&&njP zxFfC7g_RuV@tr@Zx-jq3HR;Z2?dsHCx@L?rsHdvk1X^@{=I?<*E;gR;*~|~|i!(|6 zf4&rfc8v*pG3xiAj388u9D_DYXSV}#ZwvZ&O2ySMO)Qm&x>+SDgya^)HzAQdCGCMkIA;frK zgjY)bS%+^<{-Ptb-Rr@s!#Rg_%5$E=Qo~dL+PnVc7a8$5`&<&)4F1o#x8{R!=LqB_ z!*NRla@KI7`4GC!5E+S;3!pNG2;_GdlpY+3Gypdg983(@VR$003w|~nA8U>E-TLY4 zgBLr8yX`uTpZFa<`O?M9XFJCru$1F(6oPg%@Y!-ZfbHX*7ca;LgjPm#!xd)*g0nbf zI9)K1(1W-a;%OC6_Pl4ZCD3dDujG6yj{OV6MThdHF$+%kp<1!R@+qd-e6b7v}KtkLxks<;7lC597i% zbHM;a5$dyTsk5B#kZm^mwGNy+v4a}UM&b=%PmXgMS-W^+ou3Pa5!ulQN?~#@lb4_c zisj-M1x{akA>#~|HA=9ovZ8Si+sNh)v>qgQ)VRCipff$(lJ?6`c6e9&7NQ=6TYI;O z2Zk2RpT>GnzADhCI4B+Z#)1x)&p(bNw=i(y4_iMM=(Y*mNA?fdqa{#n7w!P}Pj;ST zg*q6&7u1M*J3eW@ z-1_0g!S3M?$D$jRC~3RxXRn`Unh-2+*pLo7qdQWnY~3h%{X!#})6hU!Ax31Fz9+5Y zlkJliJLoEmRq0@PLX4KrG9Sb8#icXJ%@`>zvDE782Z#HI&kt!1f{;bP7-*=FV$m!i zewqkb-N71Xl)+75P8m!Cxe^3qq5j)8zU|J0v*zj>t-OW%L%dZJ&I% zrRyBwl`L_$c0L|7U%T-%1g+$@bOyJ`68M&CJaWLqmJWNektLzwYsh)C=sJijr% zhF69WR*IqXSaFPxveL>QUcxvVEEa*T&jx4sypZ$A%ritr*fuBfNgZp=s*t4p>V!(|w!A<>+mtkFb=ATuPH@?p7Of4`{= zZ(w4c59__0x8z!|Q<$Zi==q#dKqYOQ^Qp013zD`J{Jz3hATji!VyYbYef!lhUM~O> zHXd$lKH1#d_`3CQv%xbrJKw8a;sA3DTWV)cvrBEPuTR=AY`;GF?(o&=!QqM6;MU&M z{&IYHz+1l%!4i?8cJ`t6m;U+r6mit{rh|TOSZnglovn2^SX}gPT6Aw)KZCQzI%=)| zeKsDghPES|YCmBktVq){yS)dTKd#^&ig&@Tq}b;JX2sZ{c=X8~nF6zA=oIHw^Z5td z_3c6H5PL38fy>M2k+Xo(W zaAbU3t|16%SdK$Wp&^A6T4F<*l{l6Xj)#u>A*Wt8QODnebpR8ugUO|8}&%y(M$u`XZ>kI_Tl3R zQ5;WN2hqYXm>ozFQj|c-M-TqP-tCjtF^b7Q5L1}-^z?dkrAg6<69pqxhNs#;QTFr{ zD-rJK<7ZL_i_Lg~N29E!vl9BK@oS?5l*%xG38@5w9JGK3VAT+!w3bm2z#?dHrMfG$ zwQ6Wr*TcI)`%^Wv-r(I`p{-X#!=dzDq1~^BHW|OaE42TvhBhR3@ZTa1NyqdXlnyEB znBoeO{#zazW>6J0EZ291hS%0hph4raDVPW&os|V))UmQn#2Ua;IzR!67do6tBFW&~ zcd)8IDzaD{2lK`Z!k*{fSQ%x}tErS=v}VZ47NO#w%|OCq3axQyOQcI^qao5y#Y@O( z;VKMekDeFgGx3mNESO~TBkghJR^$wyHN{6gd(jIB3%Cu;QD}z93nqEtVLz^2;N1u$ z*Wl`sBA>`;VomX^q!r?ci7~VeT%egF;KQ&s8_cieco$DZ2>20b7{!As z6yxEMGKM00Wcp87`4QiV_Ixa&@Ym-t*=c8XdObh?3U@3mMHqZ-jesz-LNZ6($5-?C zUyMOk0)lGu;g_-8F!Yt_5zMrMYw$@sCLKaz4KN;VJWhZpE{YD+^$#CD+}zYQH*Vw~ zlJ(y=Ko*f1un(m@MW@v{-V%~GF`;_*N3HjRp9hmZUJgb?yo+^yt-nUs*$?~+&DgZV z=`|kh<2g$F)TLuzTd!^0JchTFR@ORjtduIKll5q=)?`V%j(KSyy;2EvHg0w{pkR1O zQIoWV{C_uYzG6vhGDxNTfIRu)i$`C?LlU|PdTlB>KY*H`YE0H!XtIbXn;RQBvZ!=X zAr{kRP&`fC38$xl;hq zc&EdWCm(3N!$`h}2ZcodhfgCMNemGE%Ma{oO{`OVqjr0Q<@HsId(Z9O_^iL`vJ@bW z`-mziJN`$lFL{6LqF?*^5w}~;Hu*_GXc*TL&pH(&4FQfF@? zsl#@@zO9|T$4MQw^A*}L#3FGI9Bszc|Eq4;H?dcS+Fyme586*NOEW-W|i>5`y#R20SZkr$-^(AD*ivg0nT%3%;1`VRoW&-Ea4|7B{qiu{gl3@T2tvfu$!>3`y<%@ym!4cyC#Ab~C0q*FThq;XAd4{_G zf-YXKHRY7o>?!hmbH7Q_(AHmH6@g$=5|HKjAOtMM&54*WQF7C4UDk%+81+)?mKHMY zEa+s0(s*<-?F?XdzIfi5o?#@Lv<#l+M-yw}tlvA8BkgQ#oqh2<(pJhAb=)u(sI?0P zi@_=dENnswC_XI*b9jC*7z&GVL!HZ%^kR+gPG0V7m5Lh0&bLP;tQ@iK|F6edMOf%G z4sm`yHLaa2<#U!-+%a{{+A1uiYXTO8=hMy^SrMzf+*rZ#Kb>=0YYA<^@=ir@!p;qo z$Bs-I|GoBKZ#LJy{^@@2PjLQ`mV90TNc;~fN>s6qity(20$D}O5*}P8O-8ej{mQdq z|7HS10bYyNz5}XqciQikk2=~kzQ#F;;mkb=^qnp)B?vY8lzrURU&0{80E?r>yw*9x zJ(UMuc{XM?eGjqW=82cAw>H;}ZX)NX?SGzhXbUl4;MV~}(s6(ar-OtoKU|XOon1N} zmRC9+_gnXSpJONna>=7E0%!m{_`FtJZy6jwSlBS&CtZPu=a(Y#rr-YQ&D!Tb{Z}^U^qtH2?1JU6$gHIkDjk%wsd+K{wrX1pn zn!FbXrhebAA-K^sFoUUWIQ)PGn%8uICA5Du#fFsgZOmn3-i6tTh0g{T=7yW;h2g&Xw zJmo-epD9SWuvy9Bx~mho6xUi2*&5szWyTA4dqa6_7XrNvTMW|38a7_f^EOzUk`Q8T zW@1hafBhTyf7-YrBQY|9fw=QjK9~+J2Jo^MJ1(0_#35`#DxoozgY_?ug3#3#fviG= zdf5ta*7L{%VBoVIjESrQ(NWI^U0UKa z;&TfE(B}X?q&9~PQE=ihLzZKxf3cQztv0K1>5Bo{*+;B~y?uM8i+;okWnk-X&x8iZ z!#{`o&`~Xge7+>)^E*QxEeUyaXUNkfAy4lNdA=m%`7MyM@l_tZ?DIt`VLGhj@X2fZ z_uIGE%{LpH4<9}L;>nj^ecjnUd)D3Q?e^Q}dq4fN(i!?Nus2!ayhcn?Hi}r~38$q^ zNU9ptEJPjQ5nk3O)Id3CG?xga2aU!({)3^mReLdqDnyM0S^>n_sMo=Z1~4>W83Piw zqQD6oZ|&l7zY(mG+0qX1+5#SHgG~dvKeVC_HV#x{P!%Up5P8%Pv?}^IHwC0qo4+5g z5f3OwQ1dSkB@0^iU@Dr20>*!JPy)If8b7cCec+|}#ASk3;oJsHy%h;9W8-G`D_Egv z-^|h>aghGZJ@-Rn`U3>B6UWOzh8vIkVkHgqHkxYRDaJv9g!BRb;rKM`WEpq$c7J-) zg+I*>9D(l4Q+eJAlt`K_u#y!ssTMO7in1?R=c~C(fn=m5Wgo((2sxP@2H~CI|I6LG zuD5j@+oJ0?p8^LmH^G>ME_M<}5uHVml*JW^^P#aFum9bxC;pIty=5sQR4V&=nA{^BCt_1%pksUz1y%ZUb-BSDT`r-b4S> zq{YB@iTCtDIGxzuq_y~h{A=&=iJ-}bWOo_k{O<@##ROp}k5A!!g@xJe3X&049M^;- z*N*@p1U;YA=(PX#qV;m{a`bZY3IQ=F3P+P=O3xSW-pAvYKBBtm>}7O*dKdqF{ksRh z?@m5UUg7x0)Jd)3kU~`>*~D{VRC%tRWE}2A)I7(U9j!VmWtDq0;AJl^VIUY_a8##; zm6Y$sFH&ni6)I8_LnO6!>C@6p+<*@Kix{HfVjE|2`5ca*9;eYY)s`hCC(s8{-C)G@ zVz0Yo_tVKC;$geopa~3afaZzEYjIpM@rU)n0EONvW%Z|mluie=k!h+N>x2MdH0sm0 z(4FD5377KT`y*0f)+Ps68hjrf%jj&n305jrbdY8)D%7}Jka0V@F_&LX5z>s&Q*5GE zsN^O>z{nX!`(hezezAoRfSuI%HM`SN_@mRt6{G_U^flsQQWo>9>Q26AN5IY<8w313%$Qip}X*F63j9kuHw*GI@;6*XCP2I1Sju+K%md)hC z;9o?6ic5_Sv*(IXo4Itn_}rz#{Nr!2a=a=iIb*Upn^_+uY>sfJZ;L@kWCO8`U$Uh9 z9H|E$Jw4{JjeJ{hJ3{g5eANTMW$bfdtv~6V9>c*ac3y+wDjd_nT_{0ComXivO!&v7 zXx2T3G(o96JM}v&#!>S!v&XlPg-Ldz3k^b`%(zYCZ&|n4wAm?8tZC_Q> zvs&2lsaatqP5=MkI(;i?d$YL7WzDbD8)B9e_{`s&k}^8~f>p_yvK%7p@wGE#JI!2GbA z&eT1B1{Q?DKR$l56yK80iIceztAT&9TABV@uWoGXb_f3r?JRz}5w^L$-?Sz-!G3Wg z>{~7O4WM~XY#wmCM`rBzW$SCQZ37g!+sp&w{x|{Ww=>`ja7sK6OlF42knwe)X%^Vp zCAS=%rX{6w1_M=`r>1mz^2>EJ63y)ZNlEhqayw9WV+Uqosh{P?;!v~cLp{Q?GG|V9OvrgVqu{f-55aHXNt-HR8|FPB*}s%Z`NHAxH?w&bItjRwN{?_IbYt zqc-4W#rZpL%KQtpbAt67#6jrGgd92uG#XscqHX4`u}s#lpbB}ZAPM#?OiR~!uwAwh z%;m5t1oC=03imdIY2f9^hdwr!^f>^s454TAa`zZ>;fvD_=Zhk(5h8+q@!gKlGjCYb3+~W8*Un~`B z0AxdwUrr`&CvZXqLyEb?=nw%ij=pA`$@r&I{%TVjqm(!HXsWRd?R79eb#EMJMs^wj zcEvN7w!5MGq_;C;zO%$`hnGDV>b<9Tce}DL7^{WT8 z>+sk8-}y4rI(&nZ2Jkgb279A(SlHnNg}ol`R>;MdwlH0~(CzUK&UAQ4x&LINMY}wt zfSKgKT9!vPSb-i;@~Vl;{ID?CIH8AL?+2CLw3G(x09W6?sy*<7yASD^B5Am7u- zBYX||^7>+Uf<3*jq3ldjCt_W-m2S#MaC(8bse-Mz&EU$3T|%1Y-`22BeNN>ZrFqTF zLvM4QOWRFUnqN6bZ(hj^y)?d0=yJw5Hh8AQ6z2Yv3-kE;l!1`_(LHb{cvJ@z_RM?i zj=}5Mo>=$w<$suVvj*noH4<`U=hk8pb$hv@+ZcT>qYMz=fb#V z)jB?xPbWPT=%CMPex$60gx7kry}6E-%^@NT@c^Fs+I%c!+3F$j6*53N{0tIa8CEzW zkVgd+*xEG!?=+y?s^2IFv5EjjwhCstr;C~Tw&bs0D7&KA+^7XZ; zO>tIrE{+k|J~t(=)MXL+#u0>Bpr)i42?<5)~Go7uepL!=M{i?=s8hzjC8g0{l_XP2G@Rr{A%@I6bFL1!m zaC%3P-AT8gYNSr$=a(9uEJ5x_M+v$8DS*=a0m zzJF!e^BHB$n=db0^ECCY!I`nG^M|5n&BL)Oiwx1aVl2758DX|WF`J#H}DT8BVIy*TPf76RmAv$ zoW+)1ZuAIUa16ivYevCJj;3CDkv+Sya^e}bA2t8Uc5iByhNP_0%X{|_MG6p>R_)Kr zdtX^tsX55=Fm^P&sO|xe9pcifB|mb*%U@eZ2U~mV`|F2@JLT8)Nf**ZXgYm9~ zEJzU{Lz@T6t#R)k*Vt0Pu5=C;MtBgR33IA^%Y%48z?P0Nz(#l`Trl=&XA@2qD*&2gh-gcn&Ez`ziaWldWVMYq(_MHfO8(j}&D>wr=kabwjTL@k_r z3|#^}-Cn{C62ye0HBUEcND^UAD}C?yGWuEFLAP|<@}`Z~1W(H%XoP4r==JalC)Pc3 zsr7|>v%Co6*G}GG+g4%XWfK?J4`YL7=GJqt*JR(NWh*y_eODmXSoRNy$qbZSg9tHZ z(c!#pPEJTb7OAZqW;Q<>j*fC8_hEIvGO4g|lqD57-Z-eFw?5W>*`!*GfkrJ4Oi8la zu9QbI&YGccVA4Zj1lfk*7fL|ljS({>;BK4O*Y3_v44@Oc*Qs`a!c=5V$f2g`G_?L% zE998ekT(&Cyg$YrCS+pQ$W3ogJ)l-2&PIYG27+O>Fg!Qa)-$|yKDvZ^Ka_;itbHS? z^)=$bxv!JU0R>07DeH*lOD+>mHOLKF_KAzZxjg>Rzr4PTt6m^G^B7qHKWWaTkMOvI z*kkFg0EdLODHPD|JjED7CkL!;{}cz%Sx;67S?q;!zIvAMY=nw4coZ$*SrK)=fQNEG zkEqk>m}Ue1hGR0!ZEw17uHjByVu=bFtOk1VK&9%GBodi;8RU9_~z-6eIxU9fk}Sw=ty>v8x%$k+8=64~Tdt8#6P) zQ1@id=MgOHX1-Lc$DxK$bB8Lx>A}fwRnt;4(EFHb5{<027UEIV#?NJw3~mh+g(To6 zf`JYlc5s}BMBf{C3%x2!<;1SYYI@dT3EH$i&5zSedfV#8$5 zRUdIqgg$mihhehs^fs#*$mzUTDF#JgzBFQCHnh@H>KhxbQ z2Hs{Fg&3|};Z>j4nq!#)f>_a{!wn;oMv#kVToIKVCvnp*+db|s`yaRxs=d25-eg;I zyt8lkj}Ktcg6lcLVB_inC6otF%SV^Z(R-V0idW<4Hb@1*h-uH9K{Qt&DX`Tn6k-?E zumE5(F)jn#*>U)TNaAeJ8}oIgfl;-&91Q>5`?#Uif-$3O%-S?@aWSKsttT*)6FW`| zZS@Q}5d(wk*G7Pyp+SM8-v7~VX=AvsbI9xgKASOK`G7o?mp*lV9yj8KEEZj8U3g8> zBn1^TJzeXli5o=}9^jedZXn5F;+7NR$_2J|MoEwO=0D# zO0n{x4(1U1X*jS4@U5CUl{47ZVfW^$DvVnY3u&5WpiyfIbnEa%g~luIG76T$2nkJW z3JvJ|f{&Z!s!+wan!&4DW5f}z_Di=iUVW&ANDEMf1(%~XE*nGr8MnmzX24LFGyx(? zTDN3uqMf**T)JGqRb+t}@#WzvQ&(-Nw9p?^7|~Ho zXG6LaAV(ML#}IW4Dr=Xe98na~Ye! zx4ahi+6by00h&=u)r@t@v`N%Bpz{7(hvq1}wchOw5oJ@6JMq#bZW({=1R zdGh%kst^TZyJeuMb1hJ{_pn-NrLfZQ-s)doUD*2_VrhhDtD{-8fsK@eM?3F#TP)kg zK43K|{}3W@>4Tw5apyT=jADYxu7gV5`+9?wke)9Vk|Ai{+UeoOWKJjU-s~nEl&@MV zuqNQOS`2k~kJuS3?h7bx9oVe}RAb~cxR~m|L)YeR81(zSFaLmlqINOvMQ3ZuM{VGz zI#e|K%b8%_z~_Tk{SK~PZRp`tskE}14DtL}37}qMmTRMv$(R$o7SMykKu#EMv;ka$ zK!L!BV7r;fXk0Gkm*8tBC0yYjL33}9zEdTQJf`Ei>vX2F zIf7<_ab>(vbd!b|+>v0JwsRPkNN*~r?(0F}l9iDREFbGiII1D3TG0cHEtxYNbx2F(<4+aqV&Lk$*Y`!S|(A3ko_Oq(u{jU3x8_Hzg$sz4erw_^PH-@R`f0OCG{#9aaTzK`g8P=dHg^jXb(- znHYC+F7HwzMiCl{xTq+Be|&p|64|~g>t1GTvs;LvhHVZaZK@xVKvoD=^04vlsS01$MK$OuM!8Tqs5FMm19Dfvur9?uWAG$)ssy0 zA7s0bXE75z3xnUrQ&tHmei$5_D+!SbSOysYO(DnI@K*>0i8)dBSQ8{%mAe@wxoN;e zXp`%j8-B98|9qXi3FpW~$zpE`Ok+NicsjbNx%OD$E*tu?vHScn4*oWeaPo23#I%xF zvLpXYex$5w=E=iD*)e8vV~x(`P+&9)ZYVnvTmSGTHOi?QK58p1@{dHPGawPo1tnUj z^HE(Ee&X4FU2@eiX|JG^iA677@m~9N2Ud1wyAS~t%qd6UfeIRidD+}>_`#mBf9(PEvd2$e56rcq?3>$@iH z<;Nw*A)cbrLscFuu6#g7BX}P|av*tns~k}yn_H}N@r$&yR{UP*Xz5%GqwAZ390prq zP5x&ro6hei!z(Ow?|K)Aalyzer7U@F`BB1)k*cHjD)MJd;8lz ztRHT5+Lwq=7>BAOnvQfTi4~0RQM~I9adG_$E*`KiBd?F3xLotLX=#E%>Ae4%-oo_m zQj{ZBdwq?2a5&uTou!4s=>uFumP+xhWjMVOrTmtJlgWG9)JyH$sG=7e2&@@Qn}4Sx z-Ne|^U~JKws$*9=tlhLJpLL}}b~_D~vx;#tcz9cf$^SmLdYs&!!+`8k^LY5XV&Qu7 z-#ske{D1rC@D?=L++SDYEa4Ubm#=haW@C>jB9^>iTU+gEYj3rAMhKBg#Qegc!&FF` zojBGx!j3bI-|xD|iaWZuCBkf$q?r_#qo!B`&K@235#o)^wCEuTi=FTIKp1A{`w=Qr zT7f94k^_N&R6YcN1~@a1czoh{Z;A(mP;JGpaush(`n)H?%M1VUA0}nFL&kv8+UHXH zk||w0xOIKeLwwbR%kI1W7~x*IrNE835ge27>?-1$zr!WCv;Gh=&jq%9tGefT4qus8 z2qfjDFVBUIkPkX3&wqOk_LY#g%CMiFj-{}tRQ}LQxNle9Rh0Y$pV{$)d-s0Jov40& z6Tj{=wzSgjKS;m6O21N#`@c_Ve`vRU(snC)sg@D<6sMPbJhby}na_&88y6Sz3Z(>@ zU5s`A?C1jV>aG!N9Y-Hm-Az0jk#h79b@z-H_<;Y}C3X1r>$6k-xxgQU@ww{K^?QV) zjLtg%Xb%T_Mmm%UiPb@n;qw8YkN&>Apx+(+1cpxAZhw5HG-Jst^kD#xI@}~dK|qb+ zW^n*c!=K6-Q-J}~j~p{^1%UeFfega4uyfv>LJPAaLtO0?Jr~yjzE?c&U-V`*F|*gv zc9*pW$Cr(rFJ{lJP~sr|TwL1s?mbw4u(|bz)o&g@{@v==-+aBf`iF1sJy`wy*4OKs zU*G%Y>)+r1t;r_GzK+smw`XSpHf;nBX8-u>;BodpBBeIJ-VBx;D$HI z+r38aOiUU{Xl-yoz+1YKVAi8<@A&kM$vhR|y5ItP^!Gi)SL0q^f(Y)-kOrC)G3t@8 z=Ym5zk1qz1j(SmJJiNH(SVmU*Ixc`VBoLvN_|M+iW7apaLD~?a{Ab~&aMj(|-8tBOwza;uXR%Xs6Ko@UjEac)T?SN=Mn_%7HH>#tb+s2eWxuR zF$F&x!=&F8*T6&U^+oRqgw@9I@~RJ31oLw+nlq}3&~}3j?N^nBt4^oAZx_dp?%FS~ zbiaQt=F%hXT}TRwM{wAEf_=%+g)Y^bsIL8*s{6lLps6M_ffM*|t8VYBafpQ^L{@n63A z-O=y9R%g>k0x0p<1gt+s_pUz>VEoL1?jHQbviKvdYG%9M;+SwT6{?w+4F5($VMz`^76jVv;b zV4hO7j-m*hJvoHG%s7UsO32za0TfwHLjzFT11zF8tE#UlAXbX={f4PFf))x_4dE5P zr=aayA%c@9>R5|!6M|qhTyT8X+k=0)#-vQBi1Pk;#J3BKAn9YO>RJfTH%{>{+Cr?DL)n@&&7)8RYS;@_;6G0p~zwHw@Y>ZP~o%7fwg#qih`u=rg7 zK_-U8f}itbi{w$2luFm~9jva6$Zeu&dI^6E6(Ietdfb1FcaSj?^q9>EVrvhGULKna zoRx>_rrE(292x-J0=eVHhI_3|;{dkYYwi2^0j+SY{eb)KviJ^$0S3?!>s@t^uljgs z7H@6-!0XDLD{LqciHuOMl?R~BEJbr4UFZ%%j>J$|}knyQ?Iexvy zMB7qTI~w2PK{IZ(qYFSce!hqw#Pij1wyn!6Dj@#m^G#A6`pAq@*s{C^*RjwS9hBZ4 zAjs6k#b$rB?3x^&m*@{(z6ABUy$`)aT6m}7g4mdLkvkl6e8XR!N!0}fF9RyZW(1cl z-%xErXNo$urD~=Cps*THba=D+LJe%&3(qP8t3Gf9EQ0Jpn;YPMuM8uyP|?~0fhMDd z)H~nO8NS*`AVxO|bpZtyt>Nh7GE}{0#Gy_8{I;y}T;SYrVK?2}I5r4#^UsEx!_y61 zm7td{XaS#S-n8%tjkuM3A4(d4gYcrWa&3| zi=p{I(s=Wj;|Kt<2~1zU{GxLxPTnCRT{;-g6cXAl=yWfmT$P9;%J8hv@N;va(n-5- zCZZtp&&YkL9(LalKw!yPwDIMlj!m9i!za(W0V6M3;p7P!R=%q{yS}_SvI`y+(~E61O=c7sHUpvBkDq{#imcJK_SO7Tbp~HL49S5bZR6d8 ztFsdtKB^DcVPHgnhwyvGhA1A-pr_#lUYWxa6azYoVZ&!PzjR;KlmbPUfcLVo5mY&P zBflT@ah-naWwW$;@hv#$AL1@RRXC;8i_$2CDN>9BmI{f#B9TV3vGy9+x@j;>$5FcL zI|$~6GjQ4eVu9wV`52Lhm5wd&TeEvv-Oy^1k<1gU3^ai#AT38NVeR)sF0D$k^`BdU zXx|KAj?@@euz2*t1t|(Z4}wwxIng!)8U%encXM3{Trg0YSKp;O%+oJ09c=Z0+{hgh z)dGOPVm(V3p(??L1j8p*0f?>;61{UmF2)60ohr@ADmjcUSA8)hgWD0KtpfyuvhufI zbg-*6F;00A$q*H;o!IK)wYck?oIUHG>;YF!!7>3XW_Vy`!umqm-=kW`5u#i+(XxBl zpKSKdk70ZRq|x!nJxFO0)sX=#rkj-fm9^BA-3n@{VqnLE>)!j;CdjPAy00;^@*=%$ zEvoVDuUO0dESi^^Xa}Voa&-Fm%wFU?zVNA)G+JqUv_WycrAxO{<;meW+mK{=RpTJx z7rHVzYYK2RJ%I>~+kU=?Wr6-Q1e?_Z)YWI~JOAUE3Sdv8rg=D>yw*?@&TW80A2+r_ z6l@@xYF8!Z5`C&FaGgpM=GsAE(=WPVcLUjZmeJh#7zM;!)LK!%cEYu^r4<}J;k;y; zcy;hjJJQb%sW8jMdd;obBqo=|DB?QKE64R(dJcS?fpaJa!M zAm9F`iD?1pz`CPu1PExh}wAjF&QMg=~?syFi`x(y&JVNgfSh#Q*2>4fKVD>pAIK2 zRu5!wm+uUld30y;MuJ(tpcp-B!i0q#74&MQg8D(L0f5x!x5I}^1(y>$ zM8ldrwM!Lx*q^c#*%jRQ6C4A03bxXEpzdjG3M49jmP$5qTxPzT(eW=RQ(m;9HRQe+q_!7Qk%OXxqtdZ2gvPC%J!3NM-y0f&x zp3?^Bp&82N^<~3#^dY(treMg;1&bj^pQ?pRw!BTn^k`a)60=c?^9)kG8ra0db*2 z0sn4KdYAl7M%?-Ujh!|?CP10Mm)^W;@HK#8)ErsR>QxurVrVA#I^E<^pyIIo(4_zt zSvn(4p%|hp>n<^!-PbdinGX~rK#0SP^m;hz(?{YG?haSixc!V@pa>1Xp6-j=Gg#vf z;R;OK6APX6aN6Iq4Y_J5_+$1B+yfxAy;Gg&Z-TY)=r$D;!l;(k%^u$PJ%i_)H(KRj zU8g$JKv{ORBQjlGkMRQOqkSYmxL1Q-fJ5g6+Z|%z`X`@kTtwej=FwlwAt{^YDPhV zTnsvaB=r0xn`utRDBI2EtrY;akFf22c%Xn3TBNd1$Ho@MM8Vn6eBwrdhRItA%xdy# zF8#te2jY@D!*{3cH=#XF5o9o=*Pfr&VUa!uHO(!jsC9ub9jS^<$Y)4utf<+`+EM@z zDTOCtrvBL2VyS`Yr?GBolA*V8;w|xbjkSq*um-Z8LUo1O$wZG$SUY zXp9VgXhaITDb8bCHjURo5MpT`o@4mXlSFym0|@K1w8CYcxwcC1gYz(E&w?c@EEn@k z&{r4ZEJ&YnDC-OKf8fz=u$!wSXOyHUZlmd@QuD^wloH7@X&9unKB?f`s^x%0=e?e$ z9T&`7wZhWPBWR-utu`N|2BF$C{S$>uvdmF1So^uB0MaW3(x;QFYI^77abi7)!lM%1ni< zS57F@J6_MP#B`zmn!@55P07_a>NOQIEpH7@bd}m8;o-{5O^|0GP_06SXHBvC1qjq3 zH{#hK74ltXF>sq7v1<2EbD>g`p5t{sPvARLO44FKSB+2XLZZ5Ze8*^AYwc9u)#7>V zSqyFif;W!vmNw44mN1_=xVM7rBivZFJ{YxOK0t`yK3s@&U(C;I>_r*K90Xxvbd^&? ztR2D+R=&$PK;xl>y$8|#JiP0;%)uM8RD*JWtAFybGmbZ70OzCD&^<)LjiIzjy7fU4 zB~4uwTWkMqvEY#Z`)`=2uwY=1D#K>QE#y`0S!_q&MAEsaHC5P5mYI@iQgU=*kIrXf z7@STa?$8VkLr-9mO1+_->QFn-l=Sp?T$oPrVMj(sFES3#auVrLs;2gYyR4J{ZE>}1(W#uOg9(px3Iv;wodW45cG~`NHBJXaC0qT* z_y(7=wXMk5PuslNj8Y@Koz*mudiIuVTgN+zYL&X%I03iE`*x)s4(L)5q93uhL?lcl z6&r`V^?w!9*7bHf&N79Evu>6$W2`tIL(^rZOE#!7e!BHpL$GTnVrdKtiBiw}wb_~{ zQKV0SafqoH-CGO4;M7L>XZmrCWv^zOVHWtfK09^L*}}Q$V7%6TGnrgHysMjHxKYu? zes44!56>q!gT1_~jmTXb$o=6i8uJs(wpD%j;fBh%I&l7hm4A2l!|^4K)zsocY^T@S zrx&Bu0k#v07V+@lBed_!Kk^x{%aeP zPXi;OHGu9}l40in$=U%C_ql%winzyUr`Z*bg!l_^42U_B@86DpWh4plS4J|q4&s!j zxMQNhx^ZmGn39ck9bSp@GXJn0I4GA%&CHs&6yhjE_R3?YX&0~~yg z?J80ozZ*NdKOD-9c(DVnF&G7+=yx;l8szDI@B1aHj2lJCq~+a!>omlq1Qr-J^2{wH zS;jYuof_z$s*`?~@Zomk($BmQXGS=&5GPQskFjhba)%ZPeCmh-imf{~_Q$7qb!2oU zXmMB(Etx-FyL&ojaX6`lx7Mk`9;IL_aq0$_Zo92G?RhY(>i4K(ZDXAkZg&JFxjIkB z4Ki%HEC!U~$QbWa$6+UPmKh_^4hsALJ@51R&3!(v_xb$i_qkT}XY|>y`9*y`H8Nx8 zlT+gKDj#|rKXI)O?}WJGW5K0$8kM|~{!Wqie0WAHG9#8ukJGzT_^TpXOU5_vPQiv> zWqgAMe|L`bakmn)oUa;ShoE)X zZqhfvNgjH*!0al*6!%9FI<6v;U9(t>LYZhZyseVv@EpNiQ6#Y5x&E#-h2tKIV-j9$ATt$*cl&K?jJ}D&UURYCRnEx@!Ni-3r5 z2MdTAJep8Xl7iWWDFmS&@zg6LJGR(clsT(Rf#^c}J9o2gO&6vIsbV=oX7oU5c;#@f zGUU{2d&mH$!jTCfE4ia=V^6>O?mk?5S4aYcNaP|nc03UY5xj`~aBuzU3Iou#5IMaw z|FmmjxN^q41L#XV-elv)a|E;`68!DqCEDNP0b6L>(%r4C6pj&?uq~F}`0`8rxx@cI zxs#O^+JV`^>1q5_ClIrp{=sL%$pAeQxXUqqsy;G?gCDafm@!#8*eEgxq{VOJ%(?g5 z#8t6XwL;)9LfLZ)XO~zg?+O@j?GNtv;*tYo3WDH_1cnI*o18fk82}dc>Fd>XKj`Mp zobnn`V;2PArhce;6ZWcYyV<-G1rb!)%49uHrWg$zxz9yaWPk;e+2_-O>9b}a`+-Nn zhy)FWeb6PZUX2hS^>h;H&I;{sy7#(Y-TVE$uTTVRE89h02KDdbR^kFLCjs7$O+3Sg zux-NGtWm%h21^a#U#n$tVGa}7sA`!%!9m?^V!rkvud;`6q?ur0OW{OU4{tajGnzlXTf0*wX2z^Vw##$BAF?_NmK@HQb$V%X(n zT=)(txGh51kPXaFVZxa~0c%}Ckg48Clv_iLTu{*DDVz$fIdjMIM20;FrEqiSyBAgY zqTy+5;;ITmXqQWxuwqC?FeI&=AB9?w3A}Jc38&E8{9p&?3oe^$8GWUzO=F{y2egemY z0`+_($-qUgWesW_*@PsKor&lZM$7SWCQRD}6Znw=>6n(E(ZJIM-8yEQBEv|(v6G6+ z5Ts~qn&cAg&e>kayrhj`EV8PBJXf$|kL5!)#saENVxAq5)<^d221BhYos4B^i7=S| zepek)dQACS@Migkiy*AJWE+{8FmF}WyN!8qah8|`Kc}hKG)Xv!a9Z^nX;nmI&8<9! zs0MTf*M!$=+z7ETu&_k_8TNdXe}*{mjE12ORS=2{n!`I0_Aa12C2-cHlNN$ z>^d&fjA23xu1_PxZzR{CqIa~~HI$5Ip)$4x@A{+RfDvn)(+vBVzCFvwNZ@pU6vPQ6 zW-qDdXOJ@{w$38G_6z!ck{2k`Tm(6h?2kE{vxH&mJnhvR#urkX&o9v2m-L3Ko}E(QnYwC z&w-j#yKTVrHb{pV1p_f5lZL4qh>n5FA^V`{ffhvQLBp$Po^nyGTNkIUo*>&V*`}?c zjh8z>+hP#c3@C7QWmghx9G=sK?DmQfl-4K6M4Vg2Qwn88^pDQ(KEU&9dRPK0XZ zoL@1EWy=Bb>P(#m<*gr75Pgb{7^=DuP@vh=l4^VC|M~QTq6*m=PJ~|jq2aUr=oBpwrZD5U}5ngmr-I>&Z1fYl| zA#W*T4cS)Dq)8IbHU=k{Q-ilD0z3)tB?nRVrbdfDx^k&eBN ztr~8IVtb72yTJ0vWlxRqCfV~KT0Uev_6^~CS5Y1vEN zu*7<8FPhg*=XkZ|Q+gdn%3y~ed<=;b1lYCXTfnKMa*Qn%?2wieZal}GAq{~Oa~?T7 zemz!r9JrU@&;udf+Gocjn4)kul2fS@bN;IPpv_kacO!AhZ=JtPMrGdxo%h;+lS{ z6auWG@RKLSkX0ieeMyxCwd33kcO)@m9Z%}oJS!k}i0u5K+EkxQpjCzdwaudqZT&Hf zD)128%}vD{gd_y%^TCT@#+blerXg~$0F?S!9X-?~%_%dCe#Qt!K9PezIlZE_czKD% zW7CTFlZ6p40 zy|a-ItJEfA(&$j=gl$A{#)>+FnVbq*%%cYEBZ#n_#G}#0-lT+V=c)#ppp1Am$#554 zzPE-s33lDSNQKr>3Qudr5OBM_>{rX7S-_&zG4R^HNadP2vaG6swbA9Shn8Nv`K^F< z#ClwrC5UrtK_AmlEOT8D=ersxGoaLCB^ZOa^G%ES^TKr2ZvxVE|)xDBx)2^-{_^4up}v z;!U4>hB613tjQicxzj2QHSH99~gCxPY8gSb3%n( z%>oCcDbukw9A{0ZZaFexa0sWam~|AOWyx5xnB#Ekl|of)t{AyxWtno=F zX)m5xOq}ZgN)p4^uI=UM=Fs*jgxQ6&9Q3r~nQ7_Gq`Whoivu(rWeMCTPT~gw<7Dwj zn!v<%UP2qPG3IkYtCX3R25N;)D`n0il}BYY0(3i{_LG%ostOnC|{toDqB zA1;VbsGRW-2J#V4-kc9&now&?C$IV_;(J-P@xE2;D2YM6Y%)9dCDkzF$Vw5e_qPv! zu&a;HaPdM4tx0)`GoA5psFIEwifXD*G+Q+Rrj}NKBg2ozN6EMsC`K4zn`xw8DqLY; z>ws5rzG<9QQ(O@fk$~g9E-V|I5Ri>L1j&=J)5E@@AtTK-WooJg8!~VPpYJ+*Ts@gb zdQX$LsigObcnlp-Jh)2PT~AL4PUSfBH&TU+KRz7pnG$3Y75c-Dj0^rlI){=T%Ci6` z_%>qn4yjbTj1dPeeu<-60RKf@Y2emE!5RfeHc<)B1w5fHZb;(mig6hN7x5kN!TMpy zB_bmx3v^fnUp&>GOq{B_`!cai9CL9G3??|D1%`JpBM|CG5P1ig^t{I(S@B$H6gB$wrC163@zs44wFVG<)4 zORRfL+El}Mv8nK)%p19~RPM2c1E?@sprWJ=06R$+F=LAI{6`?WcmfMF<@@DU#=ZkI zzS4Hoj>EYn^?jq~I2D*-KRw+pBvfyU1C~8`t(UGB^qEB0!tn?j^9d9z1j{5s3m?Au z9saggFTcWj0Q|z+jh281X%U-sWudCPnLkp*O6PnfXk|gqzs0+6O#e}yEyxMKR(t11 zRr-U;IV(jLU)52@Uy!)p<5IjwO`T~&IH)e<4_T_9-XB>djCh1k$=7(jj~WTmVXfyw zo>qDlj)D9ls5is+htCco9nW-nVjjB7+qhyLx?ems2!cWMh(70o;i~1W>aj8_jSV`^ ztDxqdRnIu0lAdw2YE=oVQG2=#h56Q}l|9F=Rd}S}Ev^N+9Oy-NkX?0F<+o!%((=tA z4GeebRJkh$%hlZntyOG`u~ha}VSpGQm$x%0j44eQ4{a3&;gL?+O7ZDIX~zX;&v@w*Qwc5tv|pSZ$opAXVEc^L51 zYk?%k)BbB6YpwpMCruW%J|L34YA~S%W@Q2@Zh=ug;^pN5jW%TB^leZ>g%gbpbJ5J7 zW>uwvh_73#ukkJ={Lr!+Zk&*`187>A@bR^X3p;?=?CwHrKdF?FY8sn(3}Zt?`W@QKlIpG8`a~JDr|1cl3}yDQ^6>EWa&3` z%0M@FD?!M5HhXP#MgtSmEqdIEAK2M|vnz+>-Wa_UlZl+o%{lA>c*^YN9!Alui;-mK5VQKIIb=PI z3ZK)(tomnl5N3RT?9tS2@JHI07+s11B$HJqEGkUppUH(ey4kvmVlxc%ORL)&+%$bz z)cWsyIA@T|=jq?3C;#>Hdt$Z~ch&cfLs_xcd??DKbCNeNOw4m|W~pAdBO~RDH(iqY zr9>!T3Xi`MPR^g8!1#R}K#XNPUqd*)pDHVv{4=y2?ml1NfKLN9P^)JagN?^R{4}=< z=>9s|p**h6vC{n_>EdDJGbuWCUR6#R_y?{2c(Jm&icmAFb_%uD7RlKJx9n~J1rO3t zNtv<4*fRNy=f}!Ic0p;X+b-BEl*8xbK(Yp#Flf31k~pqP@v^kR1;MA+WgoGesOm3T z#)QZ9zlMd`>m(DMDpWjRuXk;_BNGEr&S3|jnrk6LM{%oqD&+Elh z^~w>tkS9)ux{+MWMwWt5kQ(<9jxiKF1!IUd!5q(Q4p!%5vjtMY7!`qI67Y>-s#UTD znT#}^zL3%mlCi#eo555ffs2her@` zMSFl7g4%R~p_LoQV%hQUoYfQB>cxs_RyPq-(D^@~f9}XbF-~)JF<7xU3;Zg=3SpAg z>&MZN4UkVRF+WRY3T>T!iC^OE5UMFH8SrCe%~|xLu)x!I=X|=GN3%MDa?8aGYi94Pa_=4RJ8&7rdF$KhOL6pj-jIJexO-G(q%9sNdlf9fpGC{c)39Q5#>=-09@e9Lr>d415)HMJScWCvm*7u+kC*84A*s#Y=>_A) zV{Z~ye3j+>*t(D{y~skCv`gLA9QuSQxv%kHD=a{mJF!ST_RUxvC zVnrTY4?O|`IF+n0qsvvRx9EI<%SHqUm%}<`z|Kxk*m7P1x6p zfT-lp0*Z47(PdA@Glr!g@hye~V0E|dyV3Cas%TIt#2>cREklyjlw`El9Y?pkN#1^XgAFYwZl;4J4uS=JG|)}W?V^L1fz z8uk%p!@zw3DVy2&CwgsVhQ-OX1{HxcP7pL(^av(iemo4gdd#T$!u0_j?o3XhHS#2c z+M`Zk!lgRNkwi7RVp=#7z90zCucb#DZ-y}MGRkGN_ak1VY^Axg)_#e1*e$YxMPYE} zTYkC3j=o&Ff4_V0<&r`m0>oDY$^qnUOL0UFYwH6pq>MWR`TRh~t}rO}^qd~zrcB;^ z^#E_Zce^iNK9BH@t%J=!k6*rga_8mCuh7oRGzVV3e1|LMS;_7bZt$+Uhw?Zbzg$`l zoW3Sbmg|{p3-1!o#v!%;@@3w4G&+MAFAe@|d>-AM#=xj9lHDz6mXF6>4oIG`3tbmC z2Fg(@s(&`gfBo)ejQ#Ei+RK1Hq+Y4Z$&|`ix+3 zdeumJk!_;#^Da*@08%5a?DxW~$SLN_-+oQalji$8dWz?*GltM^Ti_ zW2kt^Fzu=sA#wq+#~$`}54K_dc-|j;_amM~hJVAx$Je~HlEqFT6#N4{_4O%rR-AhN zYSB|7QVK*I@h4&wcM7CJGmo_uZv519r=zD-<)oZBvIwh@#Z7@$HDFXEb%7OZ?J#&y zpN7n{Fe>>{92TWR^h$&K$2Io!ofssB^N9mT8@DcEtKkXGsE#_| zkNE*wbeB#6`=)>?bRWZgI`5Dewg&;#zzPiBlJYXoVtA7*hs6h1+qItJ*}f~={fa+7l>L>!Nd%=dOV;*&|{Yk{p1r!k{I}z8C&y8}B zP^G><+k+fo%hY5YL4Xgi>@J+dfZ$f4=_bttZ>hwmutvG+k?elyLTf zHNobHbgj>B;53hs6>hgC^Z+>vMOdX3fe1f?R-9#_(GwN**ue{6e)b=NF zv&d`H;m9)3sPtlsO6+Wkx#JvE736$MlBHXvhsmU94p8Y*4#u~QRv;6bP2+r;;6QSk z-zs>4Y36m8YGEkm!KaI4%&z zOXz8tD}d1Om-^>;t{E;r+SE{m{m@xz`R5u!uOzQiD}lSI9@0&Fj3r>*KR3;H34fv! zWznIeL475HcLi3c?zF6o<3w=&{^W^B-qT45kreo=|Vf@0by4O8tMRRe;E#nLxs8(1{KpQe!|}~vojm; zDVHv%am^z~YODS^jRuc60*)E(E*S!GPW3!g!@`%XEm36Qln9_CvbhDs6m?zTHo@VNesxMe9rMEUg8+~_8xR*W#h7H`YFa$nf^NQ#v=yTT zBbK$C+MMzX2ELw|L)L02@d-fA5{quDt`um97N zFuHZgQV#azTO6aEo)j4_2=4u-1B%o<;G;0p@3w7V-5SSyR;<*Dk9`80p3O-9YZ>#})+i{poNATKBX z**kqRY;9nH;1Nd+O%b_)0ziAZSq2U<0ld;OZ=>Y}`Zh9i0|#gbuOn<5vXWl~p4efBTq;<}QX<$KFIuawC@J6`oWiRV`JH9uYw^%(pjF&;7AGW04LJxz#5uc6351#n>tZC#z72LQy^GgNryc*yt3t_gX zoWLIwo!@xAd4Q>)%!k;oQiBN<4k0!a2@&0Xp#nUFMf|%niml*l8yW2R98NENP}ryCdQHoVha!c zA9|#@{B$v86xnY7dN8m_4OPqW_g))GV)~0603%ZM?T5R#&^$cD)g{AB3X;^9!OKZl zjg7h(*&da&h7lh1WVo${MdlRT@i$(njTzQU8}DXzabPu$i8`@VPzdksZ$18g``IRk zJB0Hr1fPMgJ_A3p;VkqBY8pG%s3G@kd*{zLpGQ4Z5JemDi{s?#xECo>7W#Z3WF(4xzs&e-~VpwFc-W&wdaal4Pk8b!ovqr$|SkLge3o>lfWoD+Y8%nojjtAtLtvbj+sknS#9p{cUIYGZ8I`8bWD5`+3xj-iBZevt7ICrT;tYB?1_8j59c5Aq zK*8ayoe4xZf)~p9UBN%G83VfmIha;(6P;#2{l1$nt7&zgj0DiTf|JO>WB`GTR!h)y z(*Z+asW4}-&K2yVMQa8^Xp<)ZAzWf)SViF4yo9yEqfcwF8~uHeAZVSFmm*0atZ2-L zk1oOU8j;^nOBsQ?UqG+gpw-mLo*Dtmr-}v<07<#5Zbi8OmgI?6jt` znBcs4%MhpUL|9G?{^xv@$}|jPfiD(hcC_ZXYkf(yN`-*0iYv&Ip<63zWVHx?Ku)EF zgVnRr8Z(Yafo=n;-~ljC=sJBO(c-k_ zDz5{dyb(HuywRv)gO}c6nZV=On2pot&SaD*#*rPAE02d9i7TjiY1~3hHLFUF>eMdN z({0B)jUe7o7HK+zG;D?=1xP*$3-2-VJ+QUybTw@U1(j0Mtcsguf-Ab*fCD!B!*@L& zv1~eG$N*T#hGV=lUX33Ht#HcM zgqXqex*`ZBTz_nYMyysG%lpg~jwo?H=z1TOnLfn=G>Zxi_5p?O6n(82KH&KL8qj!K zfy+`Gp{h+QG*xT5LPZ15BL#&faaGfls9Hx_xf1LzA3s|YCmi373Td;f% zYy5|vbNb}$=fyLIM9q7_IT_blL1W1dc-WXa=VKAKqSK5*j!x3DeMa^#IW;gNV?N+& zd1-cH zHPPTy3*@Zx&+t$7cUeZX!(z;I4BC{(BM%vz(vCzS!D>(XB3KUKSlNZkZs`|XeaHC; zdC6T7`C_sw9iMQ<8YsBgFS-3*dQji7yJTMCwDJn0Hr^ei6yo3?HErNB9h2Jw&G0w= zescZ|_T@MRhlAt#XmtFsGmR(WYOshs0j)O{JLXtLf2epzJF8}UR>N^tA1}KnJy^hc zhvw9`0&*RnV?|8gQ@H0)4gdE*V=wne#O@zxUXS0@dWJ$%3BbftL(1Gpw;g+$Gw~;siF3BjHm}VjEH1 z(7aasq0KU*hw<5?#WCMTyJ4IY=yH(jbveU8xEW2>Mz2mAV(m*>@0`MHBtb;-$)qkK zDmBxivk@r6oE*u-IFanw>rW}1HAbcJy0c761_%+=F!b*A+cQ?360G1X1t4+9CJLR#e9>lPAVi*5zEze7kXtm=%|@9+M75USh3^#cE9yVl;1~5O?1`@1I=| zdYO7N_@>!bQ5Ww4aEP_;brF0Qb1{De1;(`Yi^cIPP}Y^12?NDLmM~QKhly_a;fNgN z04WN|EE-24D1JKmU;`FuWWutL^r$i^nZ>B z&NVC7^_7EGX2jZSI!IfNK!CPe!e%Nh<#`-7gT(_tJAL!^i^^mHQH+t#B1g7* z#*AwoTZWLduHwv}tT7(pCHe#joCH>5r;4)y6tb3dXqigaPX>|z4Nki3;YQSSa|XYa z9X^x|fFg*EElR&0yB zb->-Jb<39l#GynW>JkwU#-wvs-6BTOeHbVB7*R%4{ak5PJ>&Y6)yTSGEg!#!j7_~v zvVwy?)wdWT%3e;dg`*>!srU3!kBjAs^4J{a<&y}jRjlk4z!Kh!B#`z0m(tHnc4#gi z$)zJSgU#m@YZ-0b;Onc|O!8u&jPv}(T0>Z8KIXOQUEpyy5HJsSPouF*Y5d`7Zj@27 z|E`u|0!e0;>VAv8tZYhS`z784GM^fEQiV^gCm8!6%9&LVG;d>^C8gu_y>QFQGGFt$ z?!G(=E5Htf8_^t)T(|0paM-wFn!zk2iV&(HNvR5XLYLHLzk9)Q`>E7V*NpTD{Y{C8P$hwJPHpeRttoa4f-I=>oUTsplIqD=A z|05Xul^aTYgO&L+tpY|(9GeWXAz(!f3;mEt+s`EgcidvmbI5$+Nr&GRyJ-Qj#zxB= z+JCW=NtA?l0_)Q(i}IPTf~O=8#N63jv|ybak{P=bs6a-==p%D~W$8b^_{3XGKOrPJ zVn<$$5bA9;HQ8F-0QC`5k^dJ_pmL)(D4@R@g+%T~@|Mg@;xfg3yx6{6Yun$`C-9+& z)OukfzeebL<#S8v4dMrF5r-i-1S@c1Q6!4M!I z7knaVxWi?HUhB}e+=SHPzdzu;1Ao@@n4Kf&G7YZV zWme{p8%#{{Lizyic1YxePk&M)qzLG01}mi%6w)8}5YV{tYs!afQv+Uefx~Q4Sl}NE zrclk=g0+T!T94_Y@BZeUq8d1M4bcd-u(}mKz!)V!HnJLtp$oIIod5qpx6rn2EvJVO zBG)tuvL@w@63-U^PQU;751K~0CwTYZtwIqna>Bg@Pee%llz86~UqiwVQsM(kJpFha zX{i2{CE_8_sEx$0E%EAlbOqU_f7V*RwZxOr@O{)@YyHj=FA(y1@*R$NQFg8MdrN$6 z-(LNjtmI?H|7XcRWQpGyvTz^qE(z#{VT)AnlT!B$U8H)aE}>%K{T^@YzW3@Q+{1_O zm59dfd$-`Uf>&`;s`tx7SZ@q3FpFWNBBdRwA*m4SmQB=EAds;VR5GGKQG%VYBGCK+ z|6sxqG`my;3=%vZ{0Rc~Fen#_^AJ~GyhUiuhmZnRsJ0vnMAibf|ME{|SFpLS>N)U2 zr?K{jR{@!#w+^rpzBX$GhnVSI7xyNtR|1mr5HQAetF{XRfOKWdcMeUF-Dbr%fsIYB z7r(E?HbJ_DMm&-!{vd134$;bFVT-uD?Qh>p3~LG56hBJs)e-==wx z!fdhp*WKTCSw(CVa8OBAx_l@BlL&(0khg&%U-g*B>l73TE(I)-2I@k8o-^&$dDO1W z=zY0VYm15()Q?9D2uy2eaLien&vwvAZ9cIIjzeiT=(KdmWfybepV>k(&j9XcpQ3@4Y1Asz_0F!8Wsj8tR7Bwzr;`@eULyilUOe-}eQl%j6d z@DsM0+_q+05(6K%DE5cmOIL06XO@18FcH9859ikB*!)9`;u;0FRJge{1lxRU!9#b93d0kGxm6?sgGG-I zmYxh@{Y2D*;rRsHcf`(tR)@D|ho^n4wr9MpB~`_O2WiuW*M8shgirgxYqeo-M{{RA zya)iXg8WuwfgdJs5P29e4ry*xe8adc20NGFM3D=;3(A*#fi6LaEMo$`9-}|R7`Ch- z4(<4tJ|r-PUE}rS@f(gMVpAY`%BX*GJwXOSzaT<3V%*|4`g9i~ikD+A2!+Zkd!Auw z!8IpCfdR#UhZ9cizkf5lEXtGq=Xj(8O@m16`Vb^ktMs}@iXgFx^C8zln)G0&HDBlP zL**VK_xJ=dMO`x{!1X0ytx@oi5jHmHo{2l*=*S6AWKJ)x&v1u`od?~S9Q{Lg8TpNgd(XDFkiNaM@$CD}?Vayhk5PAL zmz)p&2jIiq)*%{oaNAo40I2HExAr%lqJ{Oxip;puda`}E1K6!60KDEpFr&lmjqjhW z@3;28-$!`VEugUp&^y~ZPxjH$*7L2ML+jP{4$@m&KOmuX@DwqS)a3g2=*d3X+ixW` zzV&qX*(Sp2wH|K)!}Z6A*r?`q{wka{o~>^`UukWwKVScjnC`cBf&9LTI+i~^-BJ?T zT*to~iuVT^;mq-HAD_mbhr9cSsrrxG2U{zx_5JMw66nePE}9^TQHwO(Vci`Zh2gML z!gPxTw0KqQ4#V0e(Ijw!uoU1@~E#YwJzZxO>R7<>p2!+28|%JmVtrsH9_FB zfOwg0IE*%Q4wE-m0|`NAIJpV8hCNoRF?|xHEU_J5A@r?DWWV5Lw6vs!uLfX@F#40n zA2)F`52Aw*@CQllU^$b8sQ#=Z5ynT`s6gmgVX#QQ+s zYJo0ZF7n+KHa@M34>2Cl_}YK#tiJf$m%zXCW%tYFFQ9ZmocPP`)1XAx6P{B9G=Is2 z9cw5qYGzHPCR(;r4=Ak86&AFwN>>O`0Z5G0&5T<@%`$n-}neO5Hry%Aw;5Ktpja93dCC)zwreP%N~@E zHUDdx0^)kR6A%=4Vilub zr;{>4qM}fu&f=GI$fGJj8H1A(<;xadocMWEDX=LCqO2Qev6qMz;vmF;&t6bn@{zJl z6bW*}=?)?sH%V<))p;o>TjOQ2*v}I~(=}%>yUo+(-ZjETI zTLK8^f;heGv^R#=IF#bl@-yicwk*=_ZAI+BI(3c>7v^9!kvNoOctiivu)j3qVWUSQsCQD%Qwoa~De7?rvYM$*(CM+OxNVwB1mr{0fE-V+L)Oh1FE_5hICGN0!vnaO zz*>HE(fydF8hyfa0$FX5QjIXN3}gM3v1c2>>@GiUW1FP?&NjBXTH}~Tu%22>5-swy zTKa5KS%@r(;OOHj*Ym7QBOH~{^5sm|yExx*9ZMDL1B6Z^$F}lODzU~+#sR4NISe7U zx=Q7XLK(WhQJ{}aAW%(%6C|!cIcW?Rk|&1(vChrm#rxxr_1O zLR2tCtGwBqUUjtdazWNSEl@7Uk!S`EO+B8mn0Ozy&z>>lCP8BTaw@~!H%+jQ&%%~` zM}<;OK~@?J`fKnIyo~ZN^^w|DDU7anAb62CIjc5#2}D(BIT6!x$Qb&`1IQ6vZTM6I z+$*Zuy2&!2NC^Z*pt58CiTI>2EISIouhrTrfxrwgC9oAUA`dpq&c_m$~qt$H$fcy!eJM<)%dvq?sT7+|Lfj4WbbGGN}Zs+jsY zUCdW4m%%(v#Uj>FEG-;~wcxH7i%HcqrIr~{AfB)>RnSwYuu#(AjEaLw5F7PQduO;? zOdAT2m96kW_g>cm!<1CGm{e52w8|)exheWM1@d(vEA^--WRotz5lt#M`kaQN{K;x zD_+zzo@O#BQmsd6TuEw4!ICA?^*i?71f$A(7Aee3tSt zW2q!HlAAazj##ZN96s3jSgpdccRzT{W`L%pIHDQUmpW<_C{+k3KJTrPdzxDNxl~Q$ zfonnMc6uL4=Ss3yXs_dySr|7aIuNY(?c9I%FkR^sAPPyTR;5CxuGqo=YA{#C<|`Qs z8$En;5t{;o2Jpr@HaA#?!Uz(B_8wynxO-{>dSasiEjpyX!n(N_0bv*gaCR~40p2|# zGAd>)XCb!9a%yMITNSi5{U7Q!>#RA1iU@1fPgld&L>97OlJwbiVQUKN4ekk(Ld9KT zlbg)|rmRUV>ls2^ zv(miU0Vk97>CX-A|<-jU*`EY(} zisl{-F<1kX?j!sKemJGTi^}*NRrQ-}H$_m4X&8Tj;k+B!M!0Iqge6?DGi4=~<4GUw zL$_0$%tBDc3^3<#RiMUh)4{uFWkgF)A=4Rx>=R!^nbi%wD#rei42e@ocPh_H64|p% z9h7otquaxE4nRq2AH)c@TU#_vX?@0?&>5kUUQ`I_I!XM6DV!W>P>2gtu_G;WT0HT0D7O979mzKp|+6uJvUx9fV~Pj@&Cz7ZXl8 zClx-<3uypj(oKffF#gvEzy`?W6(Q*wLA}&}>o5sXqC&ZO+cCL39=!z>;ayl!BGLVG zM#e|HAg;yInKQ>`67HPjB=4SNZ}LDi@H^sHV9sM3D$5Qz8owXnAQ#U8^2nltIM>cI z0ZSaBmt)`OoZ9Ice7b<rYytEIBPtP`*tZ&uZfW zr)uzs>3VbaLu(Xexvq&fR%M*9zUe*05lafLw!zkpT3Vs}_8Ba6IAwJ&otj83K37{E zQ3HWt)uAF2%7YQur12`OpbS0~?GwRfBpHV(a}YFrVZ9_*-W1b`;Wi*VGwxsjVB5V;w8E?Fe{E5Zc>0p-0#<@ej18we%sM zI_Tgs=?e7%-Ng>Z`-d@Hz33N5{o&>PZ+`#s{vYo9srXcnOvz@$*wDcrrPICx{H1tj5tRUrEH1^ii!iDkA10ri zV)6;<<)gPuN_rJP5hYmXOidBM#EmQS7;a>}4;?&{;`76(4TmMr`x78plo{8;?l2vO zRQ!Rig%YNG*{9KsTqbCytX&WAxcl1wqN)%Qswf>1b=A29(iu)&7yWc7YUxbXzF`NsmBOLhz_9m24c@?VkbngLE)dkjzaSR5= zD@C}@45l&c5M2|m1rH$cxYvwDth@S>0RwqA6==cp-wIXN16g>W5o8Hw1Tg)Ck`|J$M zK1Vw~vtKNB7I8YhxVZS`;_BjW7XP&PV)51D-xj~n`)f$P=X+xJ-fgnyRL|0UfRv^7 zoMHf2nCEydSJ{Xu8|EaG%-+VW!t)x0^wf^3;m+qJUK+1IrlY*Ct4KkO`A1j&7?C}; z<0QDu-_MzxUDD8#5TCYJISk?Kzr)%ihihfP01Mx1PcMDlG563$7mvVOJMq;$V?rBw z2z0;_xXHkGw6ap3GF1|=x^PmzIDSoO_6h4SqMA>jPr$6E1bCVAFAUL_Up>&pN2DD6 z?(0bW-PcOQHAjEi^V5Ret9;f!L7Da{pErVCcVz+BdExjP$rt?-zrmK~R_YGS0*;gU z&f6plB#l5gkhyw7v{?jNn-eBFlekp1Om3wjeZ=e-ecbdXfaohcr|a$2XRFWdUXMq2 z4dvARA_HWw`*@ALL8ogi{)~=I!AN&fxK+nu?J|rS|!0FQ-f5g*tm(+An8sj@0 zL2l@hRUywsF32o)T6%TxJ-{XNgsvjke1Jn(pWZ5&0IMk8NQ(?9!->JyLXb`y?^K*p zk21TeV0yVSF?ch&+=qYo0C5D-X>5kkX&P*?Ji}tmnizZo6u{3y zyJwV8Zp2)^>K+^-;Lygi?Z;N2AZQpB!7Vy|xsjfN&Hvf8=`J?l+>4XO6x_3buU^TcWT&B+uWHaX*qRwDq zVn<08?bni5GDJ#d*$PT58GU043ntn;qoifA6jAF0Nv2T2MR}8Ppq5c?1pSWDWHkrXOJ0z3G4d4e%|)_>dEVA z)$?Z8R3FOr>05=G5J<=r>ffht5Ae`|I`aAhlGZOSwg+Hb-XNO@DozPud|^|Mdo+az z@`?RK;&Wh6fS34-Puy0dh4A1bY&IV@-tb9q!_mE zgyyz9w)QZtm&Yt-9$a2^Gn0wTWMnR6VXJY1n>A-+Ib3L!-96{a8ST|9ea$#;mwW75 z1~ET4KJO9NsoXI#sF7MjYQis5bC0m8@>%K{S!`n}bpxqSk1rIcVKpy~dwnGChQm1d>;*z`YNR1@1FMj}XDHCM2=~ADat& zogjRDQ-Oar7hpId!{PTg6nJplSb&r=2>8|13or0`aQ)?%^GT&5^NFP*^T}mJ<`T?` z%q5u>nM*V)GM8*BGM{i(WDe;V^r(kJXa)*7JIA9WuqN0h8xjYh#x$ET1{BNoL7}`g z8bJ|M9)%}>;2t3s)xqnlA?^qw=hFhiIH|~Bs7xydO$_&n|7jKrpYpq{)&2m&jG&%i z52IRn;(=9YuNH|{a6_9a3RJH8GP*1{^z*%K&T(XnO?(SG&&17nEIVT;z_P(Wq~|#B z1NGi%6P|PnC(jRmQRA1VSJ!LD?Er+j$DsWz0&|tk;R}vUC_pYTbwWN#_-|SMQ%^sbXOy zNMoLqK`4Z$m$c)ML8K#7>kdS4Y%!-1JHfeqD~eDxqZxzs3p;Z;eg_?QPG{z|a{Jy` zGwMyY<#GnLNmFRf$;?G=L3D^}8`(TKn_zgHAzay!_nBD5tGQ*++d?Au_;W^J^Q;k6 zWn;`{k6~VF@&)P^+y5r)pEh7$)hs(;={NM@X+s}UMTh6zxI+qKoqX5ty|0di+#G^M zEwfN&C1+Y~x%CjN6rsvwWZoJI;G+L68nc3P+Oh(3n$nwddi3rV%~gfxG+7mDXx6QA zVhb$|$uQ-s89L5g{J0Z8UW(3YaN6ux@1a&tKJ1`99gbLU>R%MiIv7b7H?5fQ6^d%e`WNLtqk~!P&+1GS3CsGP6WlB{SawR`3XmV-87n8HDCrw#kdTRf`Z z8n2fs9^yH@QiB57#fKO5dBhnN=VhK_FKnMWqH-7=L;28^YC++qMg=~l9yWA zS$Glixs*C#?$-#;3m*$?;9&3|kzn$`iikcUTn$uDMWzZ!FqMiy1&eR1_Ro$kjt8%= zVPoVN8w1Jbwy_8=!(4SYTR#C#UO=2>=j=G;0V~j)|N0C@y;l1Ie~K%ZM$K`LH=!ml zaq6BWAEJq<2??|06bdFHw7YUN9L|M&ulcAl9zbLPyMGiT16IYShoP|M*7 z7?qOF$utJ}Qwj?h3O&=ncN3;5dk-P(thFg1enw^c5&TsO&8^REfZOEl}yJ%`sLp z&y_NX4BkL*vhXl6G~-XfSjJenCr%j>3y*3we}vtU8zbfM60+K2ax8qJ3lB+?17_WG zTk_(xd{R!2(t6y}=<=q}QCdOqe;gh$S^|u|i0_E~KkWe!6bfW^c1T&<(A!YfFK!U*Balpdfk>6$)mjzE z_gNHWafo6MLZo|F!We8MnX8IzC2SK?kH#nWNl~kCqT8p`Q{;lY<9C@P>o< znb#Mgq*Js}>5CoyJtHjxAgI1=l=V057#Qs9-P#vHzymr%BctxSfX>1b=0TxR z6Euf5$wNiWQ6!Dq!Vm%5UU)nR2Hd1Ls*KB+kQ8@|tR|S}nH3>+D8Y3O8<03+oCB z7vEq<^Xin15toLL$`pkV7=A))!^D&S21_jpaXrQnU!^=3A)37uzJRRfP12LFub1-#F&Ovt^$+%Jk%^69hr{r&M{-5Jdpv)^6{H~53cpggCJpu2 zYDz%^6_U=Qz$L%q}pI8|p z`40`j=b4cpTEt|F?6Y;d80G3FazM7j(bq~pkJPOJ7)t%m3Qkg^ge#>ObE5Z7;}Hp2 z0I+U|*u@uD!IqNn3tlD;ODQ0T5VzcrJKdIx#|k8>qnndbwrVTmwkH}?_KAKiFLB%S zgMuei=ew+?UeT!U$_3kl!oZB^`95!X0p8ceeHKceO1mjvR(S=o3(M`Kp>4_3V%^kU z<2J6_S%OTu>VZZgZvr`!MYd#TV>EI1US~_Vkb!5>a2~%?BB1j&E*`#Z=(d-SlQ-`( zNg&%6kps}!b;8RA3tJxC#M#J?I;zJ1<{u&(R`f_Ct0zaiBBK;-s-^1@{@l-S@>J(} zEto$=T^C9fux}D{_&E|l`FtOb-t`ed~3c?Y|Gj6Mivam&mEp8)$ z{gxLlxDq$hnxo;Sd4dSqf;~PllD}x9^hhS8JV_SNC4^A21enU%`_Mu6RV{0VOlmB6 z%$A8o-{ws_wzNdSjErbWekEF$Z!Oz4VU}oJ8Nu>EV!a0z^jxzbG|l+Ou14R`Po*Lv z6Ax|2~yFa<}(BIZh>U-5t*T)Lu3 zCu|W)^kPZ#(===h3_1i=MC_UYUM2wwejkE!O&nS+M{&|=Fj89J$F0hXY5z`VQKGs% z#ql;2wbP{8aBpM^XO={B%kA;g3=p^%(`{Mbz;=!@c0BS6i@uB-&1W1OUyfTW(cnmp zG=$dmOpV3{kFWn`^~&_KP>*Jy6%hLvg0C;kjmyrnv61natt@_HF;ekiN(GCnS21Sa zB8D-mLPIV+ffi|oINOqyI7CqFz4BQqi@m^#88?f972!N3qmG)`++j@SHV6DpC^i(zW0nuuVe@09oKj19l#py* zqAS(q4JO4}@QNRwfs;!C7vnOgur%u@-Y6u~myE$3r)#k#Y^6bzU?|e~gsk5tUa>0K z_+f@{mdL-{>Kz|zMu^jN?YL0-pd*Ky?X!4tBKsf@GZ3~;<#Strq<90b?S$J~?Ewo~ zOqeX+q$Yh9fRU=_`;5LL>XorqmchjBfHG_`wi|LGE2;b$krBE80)!t_(ZM1vF%t0E z-)YjK!i~|fr&Qqy0JkrD=3Tw0tagFo++;H7oq?LzdLf3)OcbKFJXo^us5g`ZVc&q$ zwT%{l1KUOnvRU8)s74Q5QLDQ(q%FIW4hV;uhdbezlEI40Bqy8&;Lex|!ag4BkeNkeX>dmt zo|CxbFw4`Xf-)7p*iBfN-53ZQA24tDRvHQ&>nOmTpDIBaXJ)X}U47|#`-4lh{MEC4 ztNmdbZkafl#2pkpIIpe6bzJGA)GJR{sOIf31BV!} zv~SOFDtdh3A9934tc;U2#yLk;C0aQg*lve$X#fM z9;Y0_IvEelOPC1|iifKhVc>3$jp~O*8W&}!cAXp!hbR=%WQn)i8ZH!1OgVS&EbQ1R z?aox4(;`hqK9}prC!@=!Q5l}&c=Jk8Nw#r zvy;R@(qMEEp=F=rO}6MmOmsUT>3Kh!bhcIu@q$)i7o@dA}83*g=Ct4`@{k^v;O5x3Lj`)_=`~0Xr^y<0uzIvw z*?>?$<)hI$*c4G^5`?)CQ(=f^6Y!piT7hifkqkV|hX<$KE#44viZLAlT1Y)UQYac| zOF%MFrfWwe^hvv-M~vqy6*T(8MGI+DqM21+l%1AcTvVbj zqS(0OgBf^1ow&Sf-JgUmnHu+#(wFMYp_4gst$QT=jEL!&9P{<@dJE+ox_KLHEu#Tr z4X&HF9CbhInyq@{yq{Uz z<7jfLP3^)q$g4wgmzeEtEzdyRtng|vl8ZG@u1kp06lcn8S4o=9q^;S69`h}`XRj{` zwoNn=Ar;~UBYyG$oc*^1=h-76ms(@lsB%-y{MwwH%ggn(=FUo6w5JXK*h`hi#=-XU_vIa7Q3OdZf0{MOrR%Eg*A4i)WQi1?*ab zXP)ln?Wt)2B&O)_x|QyD(wcK~3e48ZK(Pw?wkEJ2re>0S8{N05Y2q@m`-_kdTkFs{ zCE!L2`3CC^oz5W6Mik@ImLWJGbuJJ0h=tHsDp?qqMM6NeCvIY4$aRUm0S4jwb_(8 zCvYu(VRpXGa1LQi(Q`2jT*q z!54N}03u&EQBk54v0E6KsB8!BGl9hiLGsu~hQ(lj2@j0~NJ3rQ>n`a)o;A@AyiT`d5Z zz+_u}{kl!H`Cd9Ll7kD|>b=-#4>D?lCO2b6>6xkY`V}SJ=WTTfc{I#$A>2q1=@enM z)d!}z8?H%w4uy>`(325;%91m9{$U#YrL@tD~uI z4)@ABvaP;dV^D-W-Xt%KjZ_hPxHf-Oaujkj`r4(8Zl&X1u&NC#SU;+mqKGTRh$vCP z1m?aFBc%9Ji9(1)A=@GHm5d@j@GW!etE-l%g@CaLURJF@6|HgMl$v@>l&F|wa*Lhi z;94IO;CJAFgX(5wKyJ{$6?RTqK+H78vua&=*Kj}S2!kC%8-+x~??gi^v~JNtmoZLL z@}DH6%Pwo9PzFXxoS>zI=ZCRiXb`eke`24|sD4O^BKsZ_MLexhw!jf1BBnbQSss11 zAUi&b=`h>E?L_(ffC8rDG(AjXN!V44Az&dEZFQ!+;casvwLNuPZx@p-djafU-FSxsmn zYn#|J^ufX1@7D00Tx-5*9Yc`aQ-&qoURw6wGecr4Jc9??sy(v|C5wHV-p%H3XT9^! zG4P{m)wa>mpuyFORo*d=M@;5P*@D&?u(hC-GN!lT!OY2Xl(Zzu?!eH<)teB_RV`6S z$PSL7Vy(c`fvo{DEo6ae;Ilp5H@WyC_G>RwDZQE|f)w?oy18E8CJnDg#+l>JsK2fROISzYVo9~2uP)84i6P3w@yK?s3ZFW`jQ!C; zaV0%DZbSrk>hvo@Z-dlJ-8&KN1t7jsdh zqfTO5yNJzwiMl86L&8x|Vw<&`mdB?rQ$@u4FXJ(~v{>9cVHWYdnGrMHVfs3@#M)Cl zCINz#EOs>4Ty>gRzzwsOEgdI)2v={KgwRg{g>W?iG9?6>S`C)SDxCFoZ$@l@Mu zsog07uxUm*(J@EZ@b<8b&988{TMVZ2#)t|0H0#G_R?`hHo|K%Ibq6J0l4{>OUG#r+g?ycMz8~75E8u2zZ*N&ZsU_QB z5IXqODZK>F*Z>y3PF$0`lA4x>o> z3eZf$;^N-KOOsA1Cub#S;G}zgF-0Z50E8qg^i(Ps65;}lQmg0JtXi|?qCDT-X{Ee~6K6D@eu!x;a!RthJ>~~Fu_iPnAAmMZj_BAfyTEMAI!Ezz*n>8Qm#pjSl zC_2e|P6c|3PO%jD$v?$XxToS2OCg_%Q!EQL)smt7niQ>;&b1QpJ*E~A1xEhhKwbWB zVAOy)Jo>Hy57Yl>l?g~pl87nkX zn{vThS|}RQ)r>h9t<1;02y2ueHjrufN(oR;(WbK#M@!=TwUnveuF4?JB&SYiURbEb zP6S)fw>d*8>(u!cJWYZc>_oW?L1ovj*El43DImtwJbcR~Xish9>aMlx89GK`jPpS; z<;%vxSh3bslTbPc7=`Dz4s5{os!}ZM?%CAax4FMOHV(3{TD@lNx{KFea_ME=d->Qn z!}laxVrvY*5&^!f>oR%7w9t(ZZTZYf@d~Tgb*)|(Rmo~4QQ@+#)j=DJS6H*IYfT$1 zkP>zG+I2Lg;8Rz#z@s~M4D=!REc$HO+U`^h#nbDM!lMlu%Rn#E#NU*Eu*?BdW zUHlP+aiC|d{1qo?SQJM#yX0CH8^H(rv3Xrdludlm6QC9u-a52% z(`F(uJT%<9ZB%~s4sP8s$X|ok*r!cf<)%IU2;%*#*UQmv&*l*p>)+aAf8^kBd*AkL zefZD<^+QzNVmPO#pC|}=HBWwK+e=f%u%;sn|1Wu^7ML|xB)rIr5y|!f!2r8UJDcf# z&dzU!$ktc?TKAk6*l@L6ws3Nhs3kg1uW7Mf@G4Lp9vJi0Nxj@10?gXGwE>gL0m9H$ zD_kp@1?0(solU-oZmEboEqG)B`;JNY6)$><5_U*~^Jat<0%i;2^LR~o4DTFI0dPpB z)XEoK+l=vnOih^q!swR*Mq%}O{I^9n>Ue)y&Qaxp&xu~ZjShrbwRs3nvWz)*lch3y zG+MZtR)JGDdpSUtf3?*VhH)nvCMx);x57c62W^~WR9dxIZZt5wQ!qyImCL5H9P6yV zu?=ud>^;{aB+&Fxiznhqn3hu69N*qB!FD<`P0ylJ1fQz|2kn&GA6-K~RS^qqCg$f) zv)AhG)%gE=WTc$?}&y!{LTUMwUV$S>ak@BRIbKtbdC5k3;3&&rh&9P*PJ zm5lO!N5OYr$h2bHDi#ulO5kli1>5URnbKwB4zgChFN{=`uH#P=toT+7{FE-~-8ih| zkcNgtfbjt5R7@O1`eJ;T%`S>aBVIn`n2mP}=5Tf|j%+c=sf)4s0zZW}n_}e?mk{+m z1dm1>3rzmhVTar>l&=t*?g%8-g8CV;9q2p2MuWP#4kr0W22U?Q8tcTycYjxYzkDz< zBaO2}`(}gGlChwwi&Bi};*IgSns_4XPFBDg2<5e~jB3v@T&$2g+gi~PB4(L}rqoud z_zv%s*!cy!s+cc;WBsi|oiqZ^o)rtSTlTL>9qRszwC`^qVwAM~;pkD|rJxISq!qqvjsxK};Cm44BxBqk+^bXq$L{>_3KX1CTaq_cp{Ny_ zpc*T>B+3e&BkpQvCZ?9V6kM&!Nyj#RD^jry+>i1Fs3H-bg^aZ(C|zXfCMX8QmPF2N z^~F(y3)@m~MDdf1<|JYe3&^mYi@rBNN%2#S1;NY)xH zDcpo$5lHTFmx7pGR83(f-`hq_N}nv;QrBS>IrEo7i7OYBmmvqfPW3rgZ(<6NZmaL|_7LOw2o8CnO~f4Aq!)__+!D}=uEs05#;5RJ zPE3Sl@VYCMO&-l{kGr?k)A!&7k%V3eoE9TdW{qqN(?t;}ad8HVu4gN)>|8WXuMBd9 z<+2g-C6+L9ypq5>+%|6hW&|`l$?^P@ff3$Ovx^_DbT(dLxh0|ogH03E)bQ^+?#jDC^dLYf z*{t#HfRBKhPCme-5-l5jAJxI8V9Y+W-O<*?2)Vl4zsvBDx79=)u# z-MJMTVPlRui;I%btw%~{W14`v1YS%99Z^Cjt*UWMvrH<<8ZFhegw3|-&vryrS4`V z?}2(9Mx%0Go}q;UjsnF~3G*l%8l)M9n)mY{+X}t>kuOSmg+xk6F0OPlZ_BnF`7OP@ z`6ALQCoj6l=TE~q3E{T#1q58#vMZwu4cklatlDdq-r>@=&7+I-ce;Tq`oK6(oX6+t z4czk2OTFSa-mi8YpRUi;rBog_HQ~WEl}B8)dcHV4-ar}r0|z5sRdK-bg<*uK;e~w< zi@;bcNrJ?{PB4a0dJsqFs^$5-*MTPRh>v?gJg=6QM!ww0%fo*S8q$eWNa;i~V$|07 zoe6dk>4NT!iJyO7BT3@TBN)L^zLeiZ|GoU-+Wdk1HPyNLrn&M=)jR{)Zi_bUa(jYn z`LJ-hzuRHS%rlFF& zC&hcQxcr45U_Tz=!f#jHT+;;7RpO>* z)9k>)9DFSV5M|NItC+StabvSKYC|LLv$?eiEO;uy#m&k)H#g)IaJ3pw(Qhq}=Z8k} z9&7LZh7u#@3TKtQA6!g)V5JuCI2KxDw%gPN3nfNpxM!4+rxJ`hB9T{hP%5xPBLocG za^3u|&(QRmp9JsBclm;S7+91le3#1&vP{!DR7p^gTs4EC&I%hPx zfd?BRQbx>#pgY-6GWr+7s2r7EMnqW*3b2cXOxO^`Kk!I`;}K;eU&x}~n8r$20^V6I zMnM+ZYBV~^I+1oQm_u7F9>M87Z0+ghOcL^yV#k;pdY8qLh~VIOpck&;8Xbcr7UhWQ zk!tfMJd%;dKg@h5u!78%?6>(odQT$B^C{<;3nfD`_~fVamPDuqL{ri4_5eqT&KmsK z;eM1nDAdQBrHUEf^-P!WNAP$+&~7?ai-!+3R^ZXFh53m~;XgQAI$T_S#q*C$PdPW? zjfK^S&j6oJz=Mjlv9M#bzx&d{^Ph*u^RzL#!B@u6BE${4z0f!S5WPSY@qw%RL^bFA z^ZYiPW^XKXHVXMZ>?im>m!?K`jSlYGh&@c}0n+m%N{JKSOW4` zs&t^ur&1j-Jnsl-Gl?<6S86E8;dAF2YL^cxg8N)a9LfZxP?%4R&soe$mW{@vMCx$a z?t(rnfYsZTh1kLTM)U`rh23Co-k8PS^wUuoo~vIAAEbb8!)Q=x)+5^Z#=?tn;=Yn( zb5MiE#4meMP)%z?!GMy{g%@WL&TIy%2i>DU8}G+4Lw2#@-dTh7r##i?F7`!86S*1b zupNPTct@b)q`=kjjN}z7li{+?RK+8!t2>$e-9K4WgIV(EcFZK+U6DPe+rCez?`?MP#{lpwJ+=b=&6fDS~(;}M;HaVhV ziE;JS(=yprO|NIOCAiLD!q>{22JR=B!6!I$a%nOT3k8fH43LZcP`)?MH$L1d=BiSt zx~d)SM`<6nn6(Nf57bqAp>iLM3DEQ1JBP_+@OGvz6XVP1g(3>^C}np_G_HwLY&?j4 zYV3@PC)0ka`YJIsJo+k%icdQ2!*z$Nn$IMmd;$-SyLWp%ec(DYkBv_eBQcG2TE__z zPlIN9iRUXO%JU*4+{T`Qv03a&^62pPB!+atX$SE_5i zUT#;(<66^fdDa~@v@PC=z}}74MmPat8(UPg4Hso@E>W%xkAb<#itw&2|aGp#0>LT$k#fvy3SKY*&Zf|Iant7}&S3qQ4fdSdV)>O=*BF0whZn=EY= z#R6Ky19S&x>W62f8$_PtAp=`dUk`yr3GEQIQMa2ON1`aWh9 z!(4sITMN=|DHoAUU?oJ;ZiTm3xiY+(qwHFuwgJY07diN%R>5<~aF%sgEbnYA$Bs;4 zDC>jm4MmwL+V2TeQSB3zsan!@1<@#oGLu;1uR6v;wn<%f3Gb4lW{|bpzV0Ol+i%Zc zF^08KQ;I5bS^1a^R#M9-#$+rVZ~iJ-367onDZ;+QpmX@>`EZ{d`4nBT65k;{Rw4F-f{!aIY|#}VLe{y-6G z0=A8&l!pNL-KRsjuz?rbF1Bf}c<@DO0j&4iHh>RSV|KAwQ7I$#tLbnWTUaduMEP32 zJHL8Gs;OEYTBJ31*gA~%gv;$h-E)Hm%`Pbo`{JI5bkGizTuwv4=xC4OtmmNT9||d( z1IMIuj*x%AatK}TvYQN|SnG#{5T4;9PLcVfxz&cvLnnC1^j@)T^}hFPiRUrc z=E{{3)bbKa&Twe<)t9W9G?sCNgB%CIO1S;Lm56WoRkjf>35%^eMV(coW@7m|-(9l9 z8ZAL><@*tw3qUpbReD1p%>nY_zcWECtrN?4D!N0390+T@s28Kr>RPDoGG08C6V z4MdUcot8jS1qO5qKQzJG`pUidif}t(V^a#YeJm1f`yxfnu0`*L9$s=^sRr<*d9Q55 zF#TPI%pP0do$Pmc%L`OjLNL@`mfLE-??`bu-UE3_zIZ`VDY2rfv#~-qFC{#lWTgv=qdnWVY#v>)!JzD! zzo3Yh;5Y3U80_oa+BdQy{5~`?n#!D@Q5t#<`K zT~OTG(|Z*jkk$kFeXbtBXf;?9`9D9mhzBN}Lq)f^N(qOX4kPByY(KGOk*<7*{|YB| zrAB-R4ZfU;n>K>_PNi~99P2R86!scDmWMU@n~w+Zz0K&kO@758bZx%d>hhm*|JK$V(r-5z4lUn@Ms8>Z^a!MZ~v z0Ao)Iq@lG)(W6^aT(=}ZWt52~X!#FYA0FU!ZDgdboUjybsY~tY@*#$g;iYw-CMvk~ zqG@O^nzVeREuVw}8{>nZhZ_Eie%j58FudDNr9?~WO?S&!6U!h}U>m#Oj(W#BCK9~p zt{)~=ucrqWZoF%{%R_3CM zvP$7ACM^CZ%W<@3jXN)0ZHsaFb^bTzD;vip0RL_Y(;s}5X#D&dD=VS-@fGg7L0P&4 z13$*}55F={{cgsukF}?1%Rwtq4dhs>{1vvVX{!@!8#&fGe}(O9I$OOF(uB&5Y6trq z$(rgoTF&V!~<5M;L!v&}f0>hkVg%emLk^19tJxD|cb zD*@QPwgnmLiU7AdG3eqNnt(0e+JY=<-9`Z}l@zp5G|S#;0<+2Bxy`jxD6i*cjbzmF zv~SOrptZweCbTZYLwF|~n$ozFesJ&5S zas)>E99UE$P7+ab_*&bI%j2ybSb8UxE&|p>Dmcp7Ay$szY%Tb+kNwup2um zM!nFNnIT7`D=Q}4d4C0mEW=cx-Y(N ztk04giPA*BHJ5LmSi9(Jgp=lK@AY@sfA=M-8`3~?{Zf&jgX9_|^mj-L_l1x_L7YR; zohrf$^woD!x;n&VP;`KR5hZLbSp!#*uQPXn!5b8B3>@2v#9ih1R`L zGW#>g<=uU<>cFVk7`GNyw7dHFh=4fIaxFDq*Ik(aJ@-k^tC}FVBS6qqXd6YW{n1O9 zA!~)y(}q!$HqjbO@f0hn*A@Bt$mYY1zyvq^W_64CKM{g`_s6`My`v#xMq1;U*>X%2 zd9yQ*V=~x_OD|c#I#el6%&gE3d#hIql^_T^!=7~Ee!v{GJ!}y5hxb5b()A>yhF6#7 zf{~KKEuNY@eBgN~XZ(DacN zur8XPvK>riA|C55j{uKdFWTct=tqCEeo%+WM8*c;20)H} z$-eGs5F#rxg34rRTOF@%C(nLG+c#6T#I_XvcL1C+TF2xC>*xcgTAE8KP5b01`Vh)) zC73)VI!9upFc-!T$YC8AqSoMf4-WaYt_{BRa?#o7tEnr44HG5}86rAGClbL-(hWxz zwp#PlAP6=hD+Ma?qTLfRV#<`q;H|wdUoDbwI=hngcLYCRY4qFd>-^P~=gVzbVu9Z= zPH$mn)R~0HK$KSJAWJbpP&ArIfvl1Fh{?0Oz$0LF`4eUf5D`(=sv+DY z!-}c4BCjDP+LGgP-^B3^dMg|l%@Ai4``AubT<=(ZrOf`7StM|1fq9H4=g3K29l>>? z)R?vyEKWt-fu3K0s~t>ChuzgqnJ$FOUANH|25>#o4$rHt#Pk?0#*k?`)TpkUZF7jn zbMA5WL`K%Bw#|r;AKesbx*4@PUb~kH(HxU!)Q|Srl7#ov1=ZLE9pbJB%x*%+BI?(1 z))2m@dUvw;Azy@IR_GpFxzLzfi5Z52?YPj_!SzSoKSk7V#GZv(CVzAfdKU+HI>5yt z(_8^@fXD5_QOO!|5Iu7vV5|W7LX9fRQ{IGE6TYEhz#BdO5d{-5Mc?@$d^SYGs!40 z(L*<$3KIlXwac2+({HgSEY_yvtB$Tj0bRvA8U%G5UZijM{2VR>npVODPum=mz=s({ z#OVoUKisS=N^u=$1xw}wNQXa@iaXU-*JhEQK?gc%V`LnkS>2#DEw>77UYa0Od`u(0 zV+~KHbbF#sA6I)))A2@Dd+~vc^HQojn3{~uf0b^0;XNFRGMvTBYn(8l*V?l38ky7d zY((a=@@g!tD6@MW&f_(n=#*FQ#$N{)^j;RHQvP}Q)fsFVFGN(iZ{B1(IB+O&D<(_n zjMkyo0tpJa0>Fc-i<6JCM_Fd_fC%v}1eFijZKw>@6W*b1S&NR=6z6+I6zm93|8A+- zY&uy(fHRfolO8D;Gh=JsMe#x%0`3s7Dn|Ho&V03u6 zcg2dX6%r%qf}$LZBMgVj!r&aL&DCe<5)MxwT+747D&D&zg%~tz#d6dHYPAWrVCM7? z_DW!|k5RW9%lGchRP93aL!~b0Qqx5gxO~rYqqPG-tOe$TYt3-K?{B z1x>yDCHLRv#_jH#jd7wriWVRSu$xUl5iYPg?iDP5Awj2V=E*3QIJm{KMYxW>m&N*8u|Ebc6UJpf*}?scws!LxcY zUWlW>uhWh3?nA5B@vvO3XY8YuqCqr~3kTL-A2x#vYp~B{a>R$EU_xg9Ae06qwqgbm z3I5)O3&;GsLvI#HMJYRgI1sp(j7^L-?XGgl0*$6w5+~O3XBq#Ca2`=<>4ihI1Dxk^ zMxPiq4RAHKoAyM5u}Rn@-i6=gUJ6C7<3Np}VB?2zT(fG`#ZdS(-WH-W;od`iMhjtv z63Vb$?GIqceT5Ll>Qx?w6<23`1Hro+Ar73{c>PToN{|Quuy9dJSoL1MMX-2hRcl{n{waU2v>LB{HJ2#oRt;Q-3*^C4PFg19JxMi3W;7oK|N=E_HlY4oA} z>J2FvLm9rpINsf^cU?o+6~kKj8DpryQmlL)y_{)ml%QIOsntNtjp=fu1Z%j)fCNRS zS61KxJ;jK3E2kTBbh8rTW-UUem`3G?!I7moZKq2HqGxK#P!J*>C^u9pi==h*Lx>8A zN3sQv3MRjC7G)7r2S$5qga-xWEfE=xqTT}DqUE53>BX`Xo!tmKI$JyhU=+b}6bPuD z?p_QPyJA-?Y#ot{WdRwmY$$5D<&(->ak>9Gis+2}Sg`uxH9ZW;v;uuda8#U{*$7+} zqquLJHyhIc$>ZT*WP_Bk3x>=CJ=WQ{9tm)4iSI+E@D0IpTopW&an_)M#Y?38%_$^l zIU2Iz^)wCJCm7#;CrwcfmbOlc1+$76BqnhyCLW)%D?=F^m;p-rtQCk*y{+?qGP^pvOBTL3D$0fUp805 z|F3C}9Eb3-Jj}eE#a4wg=Aa|aQQkyMkelNs5~mfpA)0t8ptn3*)|cfnXzT$cXv|TU z23pYA*G6V!r#?f({oZ?Df zrHHc{*8r&#UoOpZ;o5- zWS}jHFCd7>;2RDw1jsjR7P%0*)|-wn!Z~E1B)yN3I6(mjMZ{kg@5s$=++m^*=hR%i z9)<@rB3&PEw0F3;QlBfFX{y zjflLP}Vs8XdCV9Y1t{GuFG!7ByC~ z^8z=2DW}x&PasmdEGI!1csblb5tJfrM3U4*9Ihs7G!9gN6dKXqY7JVgXt`v_(JCT4 zLEn=-t%8B{mjc)Y0-i)X(_*kj)DKrHD?}uVq20tX*#ObIsB02si{6!}gvk*5vYW-j zm^w@g2bzS4wG4HD=fLzW3|m%7ix_R}j@tg2(2lr>ReHP(1R2XM!jA>zWZ9u5ZS2P9 z5UW(?UXLTR8;(^>KeI~<;S6JZhJJa*R$%#C3f4_G2z+4T5U!p`A!81-P|)wP`n1uS zmUaVa*svx3YgkDO>AAizT#MkpqH|`Q|EaD@wx1ul5UC+{h(Jv_%oAim! zrVFqOv8gJ8p@>)7Cu_J;g)>NMjoe3T2Gz$@CRjSrkSns+R^p&`NPJfe(<2xXYtm6T zj$Wk#^A4wsQe_*M#gD$Jm(3{1vVJ)dQYdyNF1FS4jRpAsOU?$>P2{(>5eXfcM9K!K z$&)>8t+1_KSXMLoz^Q8DldiHlR3;uU5#wnH2W-h&h!RJ%kgG5VLODP?mVl@BQ^1Qg zvs>^EX09v;N;DM=SZNs&GFHnEN9=0~mIgxb6F<#}q>_k_pVCM>^aY1t1T?K9z~P3o z%pqB(B_wAw)Uo=z4^pHZ^1~`Xb{`CAi_A=p_pcE5i@c+}!Yv1V)VeD#7l^A^iA*pw zRD9w+WE_;@yjB7LAM3DUK*4^&@~a^5$$lk`=v?tVn4R(jvNkSV3~&HHUj+>uk4bgO zlRk&4mW&oVqe^nAA^C9gA(MQ~n{TgaAtq;1rc^LG*?9PF$_*dVIqG>uuREnmDnoNr z;X7Vo#efc27R;eTe>nOyrFx3}9ZEQIY-ku$oC-?xR|_HHSjQ<%Iw8%D&?w^Y7H@Vy zu-5TX2>ytWLns!Vc5y|?#XA%DCi!fTP3npE7ovpjYH3Q8IYgXi2eL{Li}(toCv$F5 zgUkuH9HPkgmS=1?Q6xy&x;cGX^?2NCkx`N?>rAL0(B9-~2x^w;v{@$}#nvOyo^*Bz zR7WFH)<_-*K7}Mey}Wdk!EEDJG|;l5oRZBvUGp6RG5MS>>_$GLrIMS#Y%xuF824r9 zRa)yD;MtePeut$44q;WkM^(fSdzBBvs)XfCmu>Do-J?rQ2pNWh7{V@yfri0V(1*1G zu6#nYH1cCr__Rm;5ON@Xi~g_1L! zPSkUA^*J?wS`QUV`fx3H(<>mDkwInvZr3oFq|rZ|1ngXV=M$rx<7J^&rm~zhk=)IP zQ%ZLe!yvl6YWGtmKBh;XUzK-Klyies%oG;kuFOqO?F;L8W4@=nyeQQ|Sh&S1;8+t! z0H-YE=1H|;g(?25P|4`X>WOdGsCXR)6;76Lg4^e!!bxQ`clV16D{z1o$B&aGuLPi1 z#ZE+8K`)NEbVhS1~&Ro0&oPZ7OkF+g!JEZh2aoN+!{qeC8~q< zCFtyM|jIJF_a=LX}QTNET7y_8sa75-2Rbh>u(FUSu8P`j%1S^|-<(c{no*aY` zM}4MEl8VMILygWzrEn|Z;Oj0|$I$^o`B?Vu2$WjzKs_<_`wCLu(bUxy)HBuKabGcN zNlL3QQ&Mn}7R+X*0t)XMTUP@NrCtg{vSA9#gwAfnO^?5AS0z6%ddB;OgG9CZ1@f9mqY^Eh!gme4rZE>`?<5bu*3YZ?%oHgQD+im$(TKh5~5)5=?Ot zE%|Y`N74*`%84yhji`dNQSij8=syeJJ1yh{lnSmN(U#{jw~o+y?N}|b<%#I>)6ptC z2~JeAh;e`$zzoeo1)2#{x01Sv704C5EJHWD`GFbr_uIq;x)I;wL*T$}twJlaI1Q)R zjH>|4hKPY#7Hx#ob+9B$usIumSxxh(&b4z`Hfty7vYsX(NB$uK3eSZhp8eD|%m6X* z=u#I|vZWa~M&A@gld@JIAW<(O$ml&DZ_|i(inFfy|L6ehaSQdFt#16W+Iu&uZ11`1LeZo`Z!FGb?9_XT*{PNLBGVOV`wk$7hvMk^}@ZGv79i4aBAk*LzJ3CYMfI(a1G$)Q6NLniq$R22O7%|&- z;fW$R4nnUo0$rY;gtbRjM6Ic;m*kZs0~0Yv;@Dsb5VxWxcV)2`yQ~S-3dljLVr&|H z2P;d?lK9m@7p5Ik$W2%U7sNG`kT8oo<<=28j;U@f%Pt7UCLiZXC}SN_5tcFUyjYUb zu^HG7T*i}bb3$hj2scOYerAIKG+UvD;|xD{MY0*v{uQ72^o1Lb?C3ydzfFye^f9*_ z*lw%IFj2kv|3~Olju0t)VnbvL;)zLJY7l|s5YZzmrdx0AL?K(Qxk7WTXmiHp+ zR0$MDYn_yMYsaN4=-Shi3Nay?O#>~GK>@4}n2QGxIH?Znxk@CGR(`1*&xUAS3PIwL zBZkIwP_oyJlR;vohZ|R%KtTI?VfCot>xnEogHReIHQ*98*%QvOTA=LMu zoQ7opaqJC6O9fi=2^I9P+j!1$f<1=s&vX@M67BX!2g(iD;(cikqbvmq`$joGidZ-z zJdf6aG&&g}zod}{i8Hmya6cc{ASJ+uzVBFe)sgco&Oo~%DgB%9uC)NSE!hwYOvC#T)o<* zj;BeS(S&+JkidQzvK)J5$1h|(HuJQ)$@|Cz>DME|eaa+()U5l3*h}LA?#++HBcD2r9 zCfk*;b{?6%6A#x@Db5c|;%1v-#Ww5=rnn!c1yPyjl{+T62~8f{8M2urynd>N)Y$eohcsgzgt|%gPE4EBjhL0ztrwsv$74T-DWl4aat$D< zvDh6P(+++D=i!0mIOR;EeLOi724!N}pVBL7c0U=@f#OPp3$${-)6)|Pdqf!F@!^gU z8Lz$DVf>|e%$LIcSjGKWUOkud#!r4fEI0tWAIk*pB9#$z?7;l|Yy%NG+_FE3$HEuJ zO11jRN`1VsQjbL%D;W%e+$bI*q9!4wep`xWs2Wm6FVmt>r!~5nB;{pykeDtqSh%!@ zQqw!lST!=JkSBIXBPU;Je^`vYRLi;&Xk(Q+*Ad{J@Jbd(@t;aZbs|Qt8?lb-Ftp!u z^nm)Z^XL#k5xWd7iZ#z(-0fQ*s;gL*n=W`{us$Q_&`7g%Sdwp|A`BG%u&kz}tbAeV z=tjQwD~uN=7w_Rtr}yEYFUYAg*y6}I9wm@KFgQ8otF;W^C2pP2hm7m-#iEE8V1Veh zGdK9{w*eI=vJy$4HCR=47llY%8@0(9pjoTn&Sq_%&t5gh)~y7K0@etrxMr@A8xSly zgbS^XfgKWLa3?K{^3aqJwR&R$@#v@8#8b9Q&?tGfRj3W)G4|@p+Hf5XH+5VQ0s{D0 z=2KFI9Ww~&JJ*ocrx+xvDF)T)F?oEdIh7VCzQE|2sf>X3Az^gB1a$GBJZqyPut-kA z@(Ry3iFzd*#|Oz0QRsSRXAzR@YL0Q9+06pb#mdpt#IX@S3l3TsWe!gL@-#A5lv-tJ zA?CuUaBH+=KBU-AqGk9&0XW8qs*PX+Yw5U}2L% zDb0=@;m;QB4QokjEqWi^9pWPxqmM{X+}G1PIxw_N7BAx>m6KWWE{s36iZLO*_wqCn zJ~CQ~frnNdF)Lm3&}l-;Bh>Wu+6Y2SSRL!E|d1^!=L>ig-c@`&$*uhRqs4j9L z*14)A6eZJy8pg+bCVlQHZyG|pkW^b?RKqo*KWQ!-hLqeo|P{0}Ey~E(c{#hKqG=(xybpd%Sm|I52o5z#N0Otvb06#8Pk0S*l z$i)Xa(RQyetm6RI)|nN!T<9qcrX{T&M#&O=xD~Jfq(6yPG%dr;MJun(XpC6rGXaQn zxnKqOWXpTk{zf+Pl+&QUF5a@3ieXBh!=2j5G84Z0pjX8eLmfCnm#v?lohgR z=B{|;`yu@hW!*08;E;>xt3NvxMAtjln77^Y77V97JXa191#VX&UuOd+pcBLBeSIBB zgihA*xRw*ltJn}b{&1S9pM9}X4Oc9fayr_^DZtfnm<}pbVRX7A{Sbr$AtkS7PUCqp z9B}xMTbxZXker;HJ#-@vDkDJR?81DkTKn+W2sUIx6I=Uxr9mw62$fr%8-X1TdDG>Y z@?^EbI5{(X%@?vxC0s(v#SmqOVGRS*2$3})V~l(s+B10o5N94k$(A$lm(^vQPI#MYWHZ{iM zANr5<)@LISP+hSy)Nt?;G&77d`y@$IE9*Qc4KEO7g-ouI62dL`kH~Qq0q}=qHC2=X z&WYCcaQez391J)@!9e++I=Vfk378xYKc+B_;3pQDs21f)6RjYs?bkC?4C2)jQ&UtF zZO_CzZ)8lvWfZE*2%e*Ye}dC9bgGK>qlhqsZ3(VCR0!};BCe|(>!{D*y_y+V<)BFi zpiql)12P$s!1Fiy&lws8GZ9u2(JlzjsfVIhm~OrFL&~usv`vs*s-$;c97g8;f4FDg-W%;sFosj z-74>D*`UV2hxlpl4K!P0BPwt)5A~Oj&X#U1uiq6-;z+qSiznC+`OldHv9YnRviy-L zKL7Ui@zqSKu*_ zwR#LQ|ZF|6oSIZ2wC@a7JGh<%EX8y!{Mh| zoZlQzl34@3w4HItgRvDgwMtrr#G$w81oAUwcwV0AW0 z`#RY(wPW2xG*MW?`QcD8(G?sPyokwv!#*Ip3#9` zy!)p!JBD2xK!{@s&p>}(3XVawGDO3VANoQ_nHz9l>2bAKFSv(^~ zyMnJv_cS*1eh-tC>O9UT*00-Cn;(W=ZK1(2ZU_aVMp&M|O%gjsZ$Z!dr0))j6hzC_BN;4cNMy2*r(G}roy!=+Z z5Me9=1Btw*V2iko2Xg;*$@6VPl0^+i(xI)Pn6 zQu>n`oLr=792bshL7jlzR9JhP%2HbQmD26{tfnne3T5gF@udM|ZoVW2%LF9gK@)p@ z)mab3FH z9s>4IIU$Ue4+qK}IXZ(FVYzRj2L-Z>d4cTYvyu)Bw)rFSb|%Z?YzOD!|zhFm)&@qCz@P zf?_E#(ZV#llu6qHOnMr(DBN^nI}Rq`3jA;m>GC6a1R=FJv1>U3fa1+<#YU1d@8H*ep zWio`PQkud(t0{@aLY2Xu2;(=8!>VY-MR$NrMC1(4^stHhf^wSO??x=Lo$O#-BlSt>l%$pn`=S7{4DSIa=g7(VMnsTJ=>a>LaO zR&FeH;u!~$G~27C>u0Or<52NoO3Y+G*D@xSSO6or6iWB3Qcan%)#+VRa%3=MD>&(~ zYE`-^s=*Q6QZNgur4b1-o41>B^tmJiGU{hwl2Ix|DVSajQHtyc(d-xmSh5VB0nL{D z)5oS;ta6SEEGhdg$V}`~#RY5p61&r3g;(od#g;pq@Z;Tz3bsnvmBW!i;rI8uAa}Ym zsx{1XQLTuukUqL1XmfmOj#r_9SyU6BLvId+eD$U4_pM*o5qcY}jqRP*$(DrcDE|#8 z6HPKVMQoBPy>$-=Rg_kHl3|Ps8q)L-phbw^CZ@`hjnY<3!y0z>YIiYcY9$hf`I3b# zCossum0O3Sv#n*)g1_%LTRKu)-s7X?4QX@koJOI6w2Z`R&@=#RtL}vx1okb^;Lwd_ z?8g*jDf)@9AA)u|R%(@=bj}n%Q>|7Sn~(6eY7JWU%)yXi0xHvDW{r3-I5lBq;Z59y zIO5-UV8OtJN9wt2#!Ogj3r3&CO{3s4l2qJ?Kx50fib)E8k(99)IJl*Uo+J*un4@O{ zvg?+D=~DC1>|hS$`#MrWY00Ba;I7q4Pp#c-M8mw77=ZSn z!p6b{#eo^R_N-WWL2*<<0#i>}L1+b-)H!QO)(`;BlI(u)66Q+?pe_0iOhePM8K@lY zrVFg3lU2+=ih|?9g%k{dw1>}(*!i3n6m-!9R+?WyXqN~n9e(*1O<=OWvWXxP)#JfX zOaP_zj!dQ{eDvXR2?pIt7Nso?@jgt|#+Hn~)k)!=ZtFyGr#UEKh(M4knPv8nTWwP5 zJdm$VC*4#fIp-(=jJd%6Gy^&aPE=d2pBtKgJd;9dw#9vJhblW@9W?DU_8#IN#dXpy z(&C*SefTc&!xWjp&9f8aB7z}G;ZUt^clH#Xs2KFg6QHJP#FkN)2abaR&07Ez$#C$1 z75$LdWSwJzp<%+=NfKW_nk5OY-)gN(Uo)A;!)S}^otB-RO(7v|k_NIlF*{WxWB*{g zT2|0Q@c5iDKyJB?X1i8MbT*AtW{+8SNu3QQik;L$=mB|S-loL2dYMR&AQ6aGe4FxL z)1!7}S%Bg49x=}ZI_F$CwZD+4nYSg@PSDZnZLmpbS8y@r{f5{ zStDH&R^Xl`w;h9Xcr!3W4tH{z3|ZWUzmCEZV02q>2j9AOh8nLCC9-lT`-ww@Lm-|wc;il&$RGKFASfzt!CQMu5%$%;C2*IO=O55D{ZUC z4l8wAAl<|1UE(BjV_~i9Ut(u4mOkIqPC~L13D?%9bUBsy+G09)qlGOrwI~w{kh#S@3O$+-BFk7Y3g9lB)e4-4fzBX<-DlZ(H(*}=89REl@ry666=ca_wE_)IJ z7jXKXIlQD{qBUTU@xZ&BtUA>umY z&3G!TB&-W~M67r|#J1+)0`ja#vWZE3wN0#iu4CT02VurJYh#5h2r|l0`&B?*)4(Uz zu_1)C>Z>;7Rb8-@>k0~JPaG00nOF+Nd9)qI4aV8EYdXX9>=c{=iUzkp8O?t~?oG@? zkcAer9^06jF6VrtK%K=!oKl^BRI@nZnwea{n$RfK8soyt?u!TM8YGELEGkW-wDSqT zn>Rvjk0jdQ97(h@JL}x`qKYeQwm934XkfsJE&9?k+O=gJ4n360gkmL&itnanWvlG-I5dbq?y-^AoR zK8d#8;qHiliB@%W@G`6Z8iBN};@Ad}g&|=(;Nd)98`tDITAK}*8Qg6QnsHsn6ppr) z1yq~C?XQLqdYNld%sH0f*CWN*z8(+CTGcR)?68Yk?X;f5-|<_5=dvA`$kHiG0yZJ? z*?J4|x1&p|JX9h~O!HC-mj)BM5IC!_^1)9pI1*q_Aw84s8<=mf_Pe11sB9tH(#0*D z)=TJ)yX<{MzHq34E83S9ynQiL{{2TUo&9lv+fX>#Mbe?KCBm+|^Ee8WV5+h!fxL10 zzBu!#8)UZ1nc6&c2X=I6a4_kb)4VzDceama$OgCq3!Xfd9~s$?yGL;<#P21w9PG5WbI5;w zenEaAHi}KL{&GWpx0qrMtT0G0zar7upK`NaeA2-7m2gk?Od|TV9T?5sTkt z=;W~t>sTAEWtjlVkVXI$F6^q!tX(q<^KpUrSnqXC2c>L_hO6@|Xn-AsGD;s57ul$^ z4A2WT)`;UA1D`39oB87El<{T^U`)j(tzp=0{AyAebZvXRD6T@%SRev9y~%PIff90> zlg30QvN%y}tGiO%EH=l^m1=EE&2Xr0-MII?7R54~Km%zn?Uuqi=7yZzyvA3fnP}vy zp6#3ac$F$s2Q;AwYnGglf(uDH9u=y$X9-W6P(Hc|;&j%iU&6{j$pa9(j`#o&6mBeu zby&V)k4HmL(HA#;*Qe3Gn_7`n_PMry8VKF69Tx?KI3@URAg@d^M~4t3n@LkUsEYD3 z+8+pWr6#ndro>W3d_JRBExNtC<4ty}=NWgt;Q` zO?NzacJ<&7hH(;sl&Iv;mXeuR!)(O+4B-|!fjx%8F;li{QTCMZ=w!6eS~^VYdPN5s zjrgMc0X#U$skKEr4#C4kE~>N<8<=dBJbsZb0;6icM_>D zP@E}o7-^bc6hZ;?n7~;oM#hztc`8GX%YKMt7r&?C*wIQy>tsUCV3uK5Nu^9jN3j9z zya_8psr7X)k(aQdH@A)hdG^Qz2<57{HbPj_Z-J*9B5Pe46XbS7OigDV+rV9F&z{Z( zr8e!Ht}c><)x6uWtAW~e<9b~%hGGRcZ&fe~!Q+{fYAqRq_YfsAn%vGoaFtkl%$>m1 z%Bt)+7-R+9J~R{V&DdTHKnR1#ax(Qtf_ z1;qo?Ez7`6;Pzb)1;dt5O~IMI0kpy>VUFA~L;bONQQI?xCWT@o5(1+&KL-8g%;T(E zLeB|-6Gl63Q%*bpi5=yEj}o3}SErdanCJ=H_b{?8l0NFA?%P5;nVbMEEvz4_2g(tX zG-;@^V@%4Y0lW?(uc|<@&zIo>U5vGE@$_`6*jepNqdGUASxoc~)j=#?qEopfN}bln zvZ=l{iH6)D3uN+20t6OuVepXD1R+J^9yJ;Q1wnXX%_k;slbg|g?DcR_ZsV(s0iwVu zKv^4AV2AUQCig`gm&XhozJEY#9rr%VlySSTU1y{Lmx8->!IJ#v@LKH0v-O?dVA^CWN+-+!opbvPOW z5@nq6`l2xbIyNRUZrjb@bQrxEty?`e8Ljn{0P$ihJuY%iZ$pX`IRnVA8w(m6Hs5>E zMQ+0p)K6ck)QJl(0_=0dZ7d}l<}}2ID}pJg{xB+Ow(AAIjN@WgA+^z?Q|1C}uT7+Y zV&qkREQ?ELxxe4qc0r_0Mpph{D6Y~pJDW2$6xVDo)BsA2rD7!ftTMapi5Yo zc@ml4-*Ccl3ZlGDFq_I6x=P`dy@VCg`;Hg`|6066kkxyEk$u^0SGbB0dbSO6MVC9sU7_UB!BY!KE2 z3RX73Iae71!J{jzjK>wC!!M3Dzs63oqaCgF#sLbA7}06hTm*4jni5f6n#`TJNFW@G z)DxlGYEKa%IU&fEKEUvh7Tt7LUqBqyRv3Z((gK83H_%BX*eZKXg3emeMRu zvgwhB&Or-_&e_a$*Pm6`4mWlv5|v$j+4}XXap}@o2$gn8f?!DXj9tU7r&bUpqlM^b zmtnLitK?dcsoY|i!8n&R^%|x&NjWg!a8btfpH!ITBvNs8Tcq@k9dv)1>B#OOR!A*f6AB(`{B&R(pdT$&7FFIIV# z7v@~b&8!mF4fU9)jg%R)1k3tRY{$`$X>=z+QV!ekUhR;jA(hAVEn4F?Vy zkT{91!Rw>tB5d*~l)E;CI>e8RUPj9=DXm)GrRlYrUhUEsGks~4e<{@^Y|E9` zU`TAb#8i=`n9PSC=wh}Gs3K^Jq4>yY#N4Ch4;BP1DFZm619zfy;i}r?0kiA+;_D)R z?__bDu*{X4mrpCFM3X42^{4FGOq_1;=on;4C*-6|ruNV*!eYiq@-%D|;S9~ND#mB0 zltFpl)g)G9%fXADbCJlvTvDEoZ+YWzh>_B&LLNKwI%8mMq&EWhDBY{qT)d|6e7ENC zRj`LY`}8ZHfWP_1Y4Z2$mcHfpH2tWhS5;1z{KqYQ!?5Q6*ww#O^B?}y*;4MjKiB*R z@6z=CA89)GfVOwuQ?>k)EPdt6ti08~Y8UM{m=PdM$g)A7$4_RkX&|D3tVKWClb zKTrB8|8wK#m40{Jt8~5D()S+H@3&am(cO*Lt%-7XSo&`J>*)LmOW*JEZTud#^tbHq zckS=v_V>s3_lz$n9_QHKr`g|U+usZ9Z~ zuH92w+a67S+S2!1|G#AEoWXn4(l?B1`2!{|zdonwFMZ7DZ}>m%>d$JvllP9^xvwg{ zeLC@D@GF{swf)_1e-GH-S^Im${@!SRZ??Y)aJk29PH z<=o#JzNzisc8j)mqowbCtEO+V^!|5g`W8zMzgg2)eMHA|_}!Ym)$;QO&&{{{t^6O_ z{9E-FEq|M9&)^?%@ZX{N_geZkEAQ}jf8X`@M!)xKc{e`!4{G`j%isSYP2X+l{9kGM zK1*NuWlewD(z#D*`aw(Ia=)hCc;9fFrXP0o-)m`Gk5(D{Z&`l+PR)PR()(}M^kbI( zy1{$g(yQ*!d?(Lt__n5Vj~f3yrfDbN?)`z~JHpuCBd+{^YW_U3&{vTU9XX#sA`JCq8Vd+&*(DdCdeY&Rav-D$U zYWfqFzW*#uf7+ElThr%!L+No-ho6BssseZAdCN;>uh7WcyKCHZoDt{W{0( ztnBYI{6F^L>GDrv+a*aBc;XqY^IbFlulzkLzv05mFRWfTapCxd`!6iyzts7u&WAcT zU3le%*Isz=!YeNPQ0IM}Z#@5s{QGk6$i1uc*7IL`{_D?w-T612|I39poPT@g-JSW| z`ME-FS?+>dXYRt>@?0^uBKO?fMY*nAcdnFMnOl`xom-Pzn_HK=IJZ7`N$%3zWw{Nx z%X3%cHs+p}dw%Z9Tu*LOt~b}0+nnpqZOL7g8_2yN_rly@ZfkB^ZYVdLdr@wCZX`FF z+mYLu+m*XI_u||&x!t)vxxKkx$?ePS&y{myx$#^jSItf2CUXaJwcNG2gSn~PbZ#bB z&&}pulAFsla`U-`+@ajz+>zYT+;zEQxtHdy&%G>n+OogQ{W$lX+&6RI%6&cece%gM z{X^~_bC2e}m;2}3cXRjUK9>7r?%TPK=N`}fTkiY0|IGa`_mkWgau4U;ntNOB?YVd4 zU-yJ>CF`#Xm_ zr#dG)4|G;KtDP_Iyt;FH=Sb(l&TBiL*?CUqjh(OPd{yU7oi}v8=k!N%uRs0X)8BUb zUz~nt?!MFiFNkDq?$=_?B5!h3SnLZy&jcK)(|&s|lxE%ytB_ve1G z@T>XTbGLNf;@OZkkmSEU(|)-8(~=n(X_jsF&zn}Ab-1hilz;xvi=O;@zi{95S-FzYi|6?Q~vk^4h?_MyG|;Fo{#AHVh0=@;Gk;NyS!%Fn%g=gm_;ckitS zE7$#S?7zPI$?9(n?Rmn}9-2CHe0<|mfAp{CKIzq;$j@B8&>zx-*-F*9|FMRT@uUz@VyWjPsn z55IWhXaDS7s~);=L+)!Yy5U7%{KPZL_kZNh$L~0Q*?sTb`Fn5t&}W|d_78vH%^x_e z_@o=3xbOCd&iVKS-#Pm|zwy%g%AXlLaP^-(r~H36c2B(Trk;lno%xclJmK#A12;eS zyw88{H(&Xlm;Cab?>qDD-}=Z~);{=wN8kF%vyQC$VeYA~x%J6!dgjef`Nm!6Ui+)v z8>gT2yHl0dK4H)Jw;zAe!GmMvsb_y_RrQtIa%12Br#GHCb?og=c-H@Y{7JvI>%OP{ z>&G9utvdXj_y6oaeBhqne(8-L{P82t`Rdp}_m`jkgO`5pRn@@<|MTkd?OXrmMR#tP z&)xmDZ?3xQ!JfB2@`5kE@k<-0@B8c@|L5ah_}sPMsrCN&p_z64H%|Va`#-S%%Z=_c z`u^@Yr?1^N*zu>IeCfGgz2YTL9RAau)0Uri-r4v3dj6bGcHVhl*Lz=C&p-LWi4VTz zTjjrb$`8NxD>r}gp%sOj@4xMiTfg|1Kfm$4FaBTW-ch=I&xhatf2KZkZ~o;U_^0>1 z_anc5&Ntt8`tLvRp83nReEuK){O|++`{@^c<&2j<p%NP_kHwBmu~<5BSZf(dDmwrcisIbUp@2A=f80M?N@#IqI17A_^ggU z|F;*MzJC98XY~BV_x3-s<$-$V`fncC{>H=S zeERe)XW#X~XPj18dEpax+;jPdK2|*Y!?(ZgnmaB!W8KRAA*>TH1KXC3BM_+!%wvWE|^vlW@PQK&cpRxb`ty^jXUpYMU zycb;i*>^vD%@-b;IQx++AG`cZmyEpo?stCd&3Aq6S3h(6mhb%J&Q;I;{)a#OTOa+< zU#)umdq@7{ZFgMo#P#=o==EoQ@vm3x`r7D6CLdZ>x^CjVA9z9ezSEv{VDB3)sz3LV zd(OV&k6v@mUp(uPCtmaF@1537nb5QPS-XMAj`vib4D*Z=xEuG#sQ zZ|WI((r-QViGjO5`q|%l^m{-0)I*Q|?KwktzH95t-hJn5x?le0&pi9)-+0l_e)I+B zEqiF>bF+^hd0o%<$~(UJ?$Xn~edi@#yz}N~zv&e(f8vX8e%7x&^PRar_{xvEZ~OgE zt$*jeyei*+`#Z{q-+9lUeB;r7`TP5S z@aP3E|Jq+vZ~xer|McB^_x|Hs`umEXK3K2)*X*HpA6$Le_pW(vzU#?nojrZ&vw!vn z>-!(M{j9wof63_VKdq`BeEi>k@Z7uJ_tDjFU3l%Ye{wDSQcYdRL=%XKh_UKoh@LNxR z!|HKFMjQ3-udajeBejl`0ndJ^`n3N|CoCZ zxTucqZ+uY^vG-n95y3*UAY#Flt~4ovbzRs6R+inB1pzhoZfr4@7^4__jJ@{~Ycz@# zTd>3!jWKG}SYr8q&&=Gr3+j{S_x}E$&--3Ho}E5(X6DQ}XXeiBSCE*|;BIbO;nvu$ zi^oOwPN-V3W*w&*m9Cn7ntrWv>bx@Tt?q80yThFwPsVF~@*|e6n`L)<@s!$)Ppxb- z@a>)!>u)t(`)9u27Pqlg7aKM?PFT}4p3=P z*P?2vzxKrR*gP#H+FYp1^?Ed7;Jc@Hf7^fP?YrT#@-KGIJ9+B0_mr`_9cC@aiQTiY zgKp)j9`na`EW3JslM}DEI!-#du5x7mN9u}(XF)&tT}l7E;-O6cs(qf8a8mt#&}=w3 zN|k*%xWIc}>AP;zk8D*eA2+Vvp1M<1gZu98lRE!iw*QqYhCU4=-D;>uc$Z)3R?p?< z`id@974vt-c#X}QnYeE1*_f?g)I9R+=lExj4u84w(4&iUul#*~kHflE)9PCHrsL zA zTC%+yw%js@JkL+-={+`RX!fT5Nf8CFPgc5n>)ffWr(R7PS8%g?)w%1-IZfMk+?@B# zWYz9*LH(UdIv9NF9`>u@HNIj+*KYG8Q%bIm9dY1wZrtdTiD8Y7_>3O#%xV5ND=Tik zKDWkq^%Swc_VJ2*^HpME!R46T)3qXRh4vcpI%V&U5ZPLJ+h*?VhG^*8w|EBK9_(rm=0S$;d4=9^#EIH~U#bhq2k z?6-Zlrs=Lf>oej=d&ihRhxmlN*tpJd$K%CSm$W(MHznh3)7dot+YdTqXS^`3Wbb`J zC9bb>ba-&+Wa&-Ar()f85Zas=CuYFb5F=qDVGG*NsmF*nd zubg>lv--g&?lfqa{cWS>4F)#+zMMzBuQd-NNSM~k;7u8lY+gN2* zn5A;{KAmbfdA_SYbo!2(;dh4Cx)~JiQ_yNghv{FO=(zJ`Ip0oy2Kbd5H=#?k?}1Lb zs1ltMY7OubPtzV**`Rocw_HLdB&8LOS&c|CGD z(buh6Sa_n-Fqgb0O}@ITtnsvIW7jP?EgBW>Y8f=}P4mHJySP59KiKVuA)8w*IR4yy z?YHec4oq8Me(_tv;B~zlTE1#?J)^$!?Ch42J%?mGsg)V{^~J25>yt-BZtF3!W|<0~ zHBLM;d|BqG+}RDg<@}geYUtY^j}F`5zQ-^zU_^T1Yai47nXiq830u?p{*gVXM6_3G zJD;ceG9%X~`qfBJN?y}a)AQi{ffou^=ziI&)$S_UBzcXX=%5^dtT?8%CEytKX7=LcTK?EcO-`gZlv^xk?LIeRlzk^WOzypL z;`A_qHeF9Ab(mmFyN7ZY0Yy03AH~&1d@%EMFmS6g9?sPZp%DdlMr|kIE zzQWKuKHZx=s-(R0XRk%y{-Jp`@Zp`?9{0{qdU$_|_nHTL`{{pwyrbINW9QDkS!9^^ zZguIn_pK_|eO+(p<$t;zUi2z!UB8zh_Z3e^jy?2Ov(DolSBVdL@};BmW-QKj%t(`(2kSPJVN>!!KQ~?Rh@9aO&dCH_kPF{`0Rr+F!q1KCR$U^6E?5 zE0APp3IQ zd^_g+!8!M;99XqJ{N&;zGtg5fjz6hV?nI_Tz$yRq2|v|6f8dPU&Jw4)&Rst%`%U^x z_iin}sN;Hn_QEbJ=B|m=&im{4CUcIAy7}eHV|x~#Svz9U+-g1xm*l?wrm1P`{A%{u zUv=N@_4Q|GpDyrhH+hH<~P2G^%q+qu?q{gn&f5+_bS~zRxmMMjM z#@?*I_v(N?`yaNQzmMj>E@jV-smC3^`*Z!)s`2v@XS9A?*#5dY&3UI!!8eaww;Y)g zS>`kC&AleOiFO4$_FwA$^W{N*waLD5vsdM$gvIf7qF#G0zgK;6<=2B>e&6l*fnhh+ zt~{3FUnV1~nd$UT=8?Vs(-{1)Zcp6GJ#OxT@Al)~<0sDhwe#7D6Lec{`u^M}a>f}y*EZP`D&P72 zm+XY-3YQ;tP2Jz~<&u{zA0J*kFQkQMlRlC0i*EmI3LQDS%=2TPt?YWS_JKF)5&4VT zwcPGB?MUspi}OadaH$jgcGqyFs>ByFo>hKvFJx8cgz8@>_^oowj4>~iX zdZkrAet*khe z*G7*lNa-*u=UmHYjf}HPzG&7ldFFz#ll(kpJxrM0Ja%Bf7B7dF%}4EPzU(@t)Hg0&_B3sDzp*MO?yL0$H>du%p77aQ4@@4I`q0FV^|vy`gc(M8}|sSAVAax~K7;{NKH9Oq$Uv$y4*{Qj=1P1})gTVz0yHgLeD9ja$~nIF_lg zAR?o|`{t*YSD7$ud*-cUm43QX`HNNizHbp!rH+r&kmaMYl8;`lY&Ue^yLD$WzCL03 zvB{HV@xgOzKU&>k?b}lWssxt)Gki$W9=-mBMyPN@=j*RP~<^w`})X5IXy+TZ>9zU_TKbbgn(Cyh&wF$8G3T=?$v)T3us zw;$o78hNRIvmcC`Cl48Z>CYbzn=UozU3TM=TXz~(e>ysMRgVJw$!eP_X0PeD)OO=f8YBx|HLbyE`@x3$3uU zq5H;qAzjY-yY)8y^TXfQ?ys1Y(zDU(4X1{lE}!|OW@qw~()NWk|Fa!D=l)qy)9Ne7 zp1T~<57#jddN$*J((-nTv~!kLyf&$I?)4qZZeG0KaNfBqlN`5&wH&c=_}<@kxH-(+ z-(XgQ?Ul8IHYopkx^r;IxP7X^x>qlJmj3gd2hT2S?K$@R_+!-!^LuI2Rvmbo_-g1B z-HAV{+x3e~Ds8y(x>Dz)X=N%r?`TvW57Sp3aB-mO&bKLpGdh*LbGApR3&H0qjDNel z?AEk)TUWjAwrRfM+U^sVzTfkzYwOE~UjlFR%esE4!kIN^JNIsO#q;}~g$m!}1wBXY z&)3v!yye-}UYid)o!K?#s~vlnS8^?}W0Bf^QkkRWuWZ^_?tW7b)9{H2sbN(PY8tHB zmh9Gf$aU3ByK93>&p)T!^XOvb7K1mApImy|)<%o>-&uZd$AvaI4kx~?qpLIS=dEEgv?f%(H{f zD;h}9lQ}^xo{msrv!xMjQaHGamx6see4}bd4g)m+CCQX9x)}E)A?oni3 z*zI|{`;FzQ&X?yDEIWHR{rsh8|M=_g4{B??@@8$yq@b$OjNE+tgo?JHNg@`>`w3Gu00ot38Xn|CH(a6GNKvv@$^tBTF9oS45Me}0o= z1*^97-rTvC`<4o$x9{!O@xU&_+J`&FDi`eEyshN6+vPJio?Gzy#o!L#oXcKc>RPiJ zmg_ag{*qL#>X+J%<0_;N>N0dtpH+7%o+&rm@%=Yt73*9+b6B+Tai!S-6U!_;*U;{- zRDJ0~?_MOv_aCK8Ia$ZxJ=mC5`nPu%>J6EEzU9rzSBLgV`MLY4S37T*rtf?7s@C>> z{sT8mzj*1=(tAtJ&K}`&`Ox9W8-GQg-JSAe#h&;SzpbTz4%y`0<8pG$QH)NKBIPx9Eh&ZcvD(W$q+PnFM}v%6ey$tERg z?u@f<=5b_K$9+9!^ZDZ3^sj%txUa(S z>yNgVyLO}Tg!AVvJh^bYTk6l7UpBfr);M}!&7c0>*{rW=L-wuO+k>+wmFaW$eWgL> zUpVJdnb-*=@#>Y)^McMXW7pJd-Yj4AyPH>*zqe<%A7s4JM{IV zdsBXScID*vTO-SFT{j|p(O9?X6X(}I)BRA@o-tRPD(5^ipVvH6ec`^YAg=w^yVdK@ z-&$ZlcHG=C_2&2fTCuwJ2DjJOR(qdZa5uYu|Mvz%{R=9;8$b1_xMD42fbp89U`z|18@dH!ZDc2$9xB3oVY3r0N`aCM< z;Ml5aeV_CjLEcY~_IKFy&>TDXS(?sscZ;VlzV$k^ZF2otSu-8-+SXdU=bwt>rtNZG zU6|Wx(<2|t)7mK?+fQ)aojK+rRCmj&^2~zVeiOsi)&V_noy~RQ=O(h z=Bu5ZRA1}frmY+f13>&qN9TxqAFbW2bxUhcS$wp&^E!{6;{AHTEQj42_r&I`TB+;MaqRpaP3EsI>$vsx ziOTCvPEtSW9~tz_P%-_A-%pu`Dt`X7PgVclRZb-i8q5bTXRAid^DYRU?sm8Ia>dpo zd+LoFH&`{LZfc+1ef_iV&F^Ela;1h_WW(~_Bh)VS+!l6G)c<+sd_~o~v0gD#*Co#U zVr$IVpPwD6dHB(@_(z9Ue);#6xfjF*!1+*daDmD^BgxTrTOB#W_OOP+wrz=@vBQuPx+p? z_jcH*)oFXa+SKRmrp1n3){OHR*{Xii4ecCiJZab>sI`Mvwk5=TYfI0x{O3c1#(F39 z-;{mwbwR|rTX!qHf&t)W!MJJb=T_~$ZJJZLZ}QB?$L&^4F6q=isIHH}!K;SfVb_Wk z$EQTj?=~WKb;-Eg*9XE9PmUh#bEMIHr)L8;S6unccQxi-|20-o?@gpvpMu21uTJO2 zTn@bzSu5)Gh+e}A+~y>ns(-<4+LUT-=kAVfwENzy(s@_%2aI_7N3ibDT0_VzV^&O_ zhi_HydrpoHtIITv9aP0n*K+R4+&eS&ge+e+t6uWnDJ@+7I=ScOgZybr4!kW)ymI%E zQ}sQ!_EuP#|EAfLv3`EDHjOanH{Gc}S>t85yFnfMzRezbU6;1?$cR4A{)};K|02X^ z$PUMK8<$jF{CJArsW!8lzRjTdZ+B==`;y}>7)u20>+RsU>U!yuhaQxgHhhzPWX1@Xt73PhOjw!pyt!%k|!JX?jTWW4_=R|O$Z?hXV9N3_F zJ&$tV*L|q@y7rnIhwA9JKCjyDujAET%zs~HW3v^NEn%~2bm~*R`a4gjnmeWstu^#c zxKDV{%?>kK6?8oD#dP0tFL(L{{Mo6?gmL9M9q^6rTp~*6J)l-X`-PvG+Fkv@yKU{& zc3$!O$9c}VxViQDwBOrQvHQ7c+OIR6SI=1K^2qC5Gq=7coD##sn&i0*Q{MfmN#mwZ zYqZGO;@WaoVWZ}61_rryDLdG0aQ$bkHV^s1{rT|)9__zfYhEzzz~F@6URWCTUYBvb z%~#p8o$C+j8QC(k){~5^i(dzhn0!5FWRGo;pH(PRbNHFW#<`<1m*sS8ID2TRydQ@h z{qe0~kNbx75djlTKCcUnuV>y*+d9E8DEp7Tsb0|~^iO@-C9WS?CMms!pQh!SN}nc>$Clf@cBP4 z4?4VHesJl>>jS$+{2ef+=|R;`tpmDNO0aYbz1zZn>gNq&pQJ{`wJDJjpS7n;ukDu{ zV_qKkJlglW-BH7<-|o3@#Kk_hJKXE5jJeS}`Qe0wWfM2{e=w_Uzvlmx9AFCUqh9Ng zeyd%*Q8!-<-hO-InLmHAEWdKM)8>A^y}Oe3>yDJxcZOE5f7GnI&!2acmHzm4QLl#s zpK0!S+`e=F;iU5q)_70(UEgo-+iE)=zd3vE*t>a#MepNEuYO&(a;twX53ToV(cx|{ z`>o4*s<`733m1mBsFQ1=mx%9=fIj{eYeE-vxoc;qZ?`j`^_08mp z*Sh@Dp>Xi?JvTNlp8E6i#^JbvEyGoAY{L8?&%Uc-Da(y+jVC8o9r)Ic5|P7-?h%%6M+f=jT1t z4$~{#8ZhI`RQ;4u-~2JP+lyDR<5LF1gg{HOq{z);-7>zP@?Y9&1hCSN(qNQRkIUM%P}^ z=7Gnuthgb|xBIE`UN%3x#Ml4n(&2Bv`*z>FZ?+z`aH3g>K!qEm)<#Rq1T?mDO>i|zd3e)p8;3*&2RgV=Kqd8 zDZ1|*k58?-b^V_+66eLYFMQnEIZb{2n*yJmN4B^=`m9Xk6w}_D+5#8=x?kGA;L&QhWOGzGXY6Y~3_bk?#@Zqo4PO zy8QUwk8gMWb>2kXgo$T=_Px2~%#6rB*==0?e!o+BLUcm*FI^vAuJE$w{?x}UUoHum zxA<_MCY~*BFN%*G8EX3b*z+>8FLqt|S^Ap;wc9PukC^7Pz2)M$wU4;87@4>0ZE&3u zD&_FX&t`nFD&*daud63?c3S0^;MHK}w#iFgoUcCQ%%JaoTvch`NQYace;7D!K%V*B z-TJk*KU=+{cUX-Zoz5QmZM=TOsGGx1dQ|)&J0$I7g-YLAHl`lalseY@%8tCS0Mq>E zZ_dA;`Db#}h+bFQ*Q>bGC48HGSJ!159v!V;e$vv>*EZDckWw(R<++?$vyF|Ob!_&c zlV^GOO=>&rb|T)t_1zfse#;&N0|Zx*a?({IC%4|{Lx829Vh0l`rtHoX6%&c(!z zjSW{P200#Yeg8M}^yy<C%=LI7M{+4)ly1H=NgF}wfqla$2-#%3lbR{1KfJryJ ze)ml3HKWO;SDFQb7L{^<0bsw~!OLs67`E`dZ51UY>(y?2aUsS&G zQ;YBSt@5c;C1}+0Ax@W%CT9&CYF9bq%({0!T26c&zwAkqN44h$zg^p5bzqeNr-p?8 zS^D&o$w}7(noZNbRNZ^!k=s)>yJ6dyW*e_QSa50o=2u7WmkV6-d7Z}<6PJYP9Xfs8 zbKf`@?`w0v_^O?|`@5)Su{*z7bg%Hu=lus)ZF{R`_G)kU(^aN~t|{qvH*ojZ(aK+L z&KlCU-`~|j@ArQDB(BSR!IFLcoa9G!alyAkbIpSd(r9HzzbhVTEf;HI{H|;#Mq@Uf0qa7BmemAOVjjw+7&hsuey?#&Q zgyfnlyIdW7sFkU()tBdYhB}rS{dnV!yK|OS2pv{$qkBXDb6rCIG4^)5f9>xddZx@; zacaZrMw#VL4^7^w`LfWy^pk-OU;t&J0F@Qh%UBdu9U9@c8Q`f%bKSuge z_#F$VuBcJw7o=~A-CJz?Wu*|20$ygcL0|Md=3bM`z6ws#P4W8Rg}LJik)NNCH_3+yWaEE&ja7Dm$Km^=x6ukd?!d(UJA1nHQFx*}UKZN|Lz8XMdxW5I)Ns=<7 z0V=p}Bb@5f8&C)CFGT<6!rcMxbE5zCa5sm06EM|xG9VQ0zmT5#GY(KgQMpVBJKq0U zaJNJFkD~u|a67~O9Wc>rJRlJ6-;tjBzdxV>+zUkie+GAFxUY)-PlwwL?p?q%o~8l9 z;eL(u)c-VQs-gWqi2k?0jec-ED*B&j>IC-+V2VE$;1Bm*q^JJx3jm!R=ZgLx26soe zFNyw7gB#=8aT_p=r>TG*aQ}_;)Sh@iEt~$&hPyq&PmBIff!hV{b-+~KL_jdye8U?IHUE!@{!c`l zCWyZrxCCGfpc~x3B0cp-A3$BW=ZO9v3b!xZ7e)UMg1ZIWTY-t5QvluJevb6i|DT%w zKZ*WNMx17dzZRJ2Jpm8|_d}$o{vQBn2=_Ol|3|>x1@50k{~O_UhkGw@MZk1G1l(`` zW&Zzw{HeYgKx4#T3Ty`$4N$@T3&N>By#aOLo?UGIpBMeFM|g9DZw99NP6mX+{S@h` zKR-49Pm2E6A&xWRuK^}{jRyq6{Q&8y|N8?P!2Px8|Igs=4EHtB|LJhM!Mz)}0$>^- z9PWRRp8Ee&^Z%IW|0Kk5Lj0A$6n`whAMW3fp8CHppdQ@wME?(iyCd8MqW{z2ZVC5x z;BtVefF5waKzeG=r{@0|(f=ukfvLQSfMB>EAwAJkn*WPM|4Z}#hUkA2;&>qb ze&9-g8GuN*-zzHH+bL?<+u2pKucD}DZ&$gBy}hE2yWeD1FK5 z_Fk0Uv#NasN?*RF{Xv!<+=M+*lS{GpG)pN;fyI?G=^bV|ABSDDh`?mqK`D z#lRUnei{6xa9j5%#V8xM5-x?E6i%)Zc8XF~cL_VVD@*RYXZ(Eh27#A~^YRCTJ73_N z0zVeG%yXWuw!l(4sw@3f!CzJURl{F({MEo;P5jluUv2!=!Czhc)x%$X{58N|SNz#2 zN+?Q#KK2R+g`=VZa;bw8zg{@Ct5J+r98}oZjkZGrO4^mOD{WWCuDo4kyV`b2J5Rf= zb^{rq?Mjp^WnbE%Oc_VVvSrJaE03oFo{D%X;i)X1D&naso@(N$UhLtgtF8abr?bV6 zTE(8)|MJxNm#6N(JoWzbQ(r;tFJ*5}ujSIKx6>?v35A$t9%hiLhq9-{OA z=Al0N-#nPHRjO94R*kxmdQIvtshf&-Px0>f7xLHr&*ZOHum1n?Y4E>%6qq@c0c8NS z0W_1U1Ih#H14;m@0?GpF0!jmF0xAL;0_*@)0FHn<0Q#!|r~qgHC<&+rC1G{5=|vqQvIYlO7*0=Vl`(#btZtc zz<}yc0O^GR5PQm_g`We$0H*-00N(=)fIk5B0Sf{B0M`MX0DAz#0dD{$0Am2%0EYlg z0N(-<0k;8F0bc;30p|d%0h<6BfWH7`0aF0o0Y3s-0KNkZ0{jlB3s?Z?1GozC1?&P0 z1-u57222110geKi0agH#0e1m40doPp0G9yXfNg*wfWHA10n-5yfYShXz&d~t@F$=l zU=d&dpb*dnun#Z-@D5-H7!6PX4gwkjmH;$>TYxHnS%98^vj8u^M!;ae6M!RNG9VOi z0?-_=8lVT<2h;(41?Ua90_XtP3CIP!0uUz}4+sPt0XPGe19X620W|<~0C9kefOdeb zfGogsKn1`wKsewhfE!>fARX`!&;alapg-VeKxe>Sz-NHBfNE$#H9JSeY~b0zF~Bjv z=Yh`yw*hVgycu{ium#ux{1o^pa5>;|z*B*z0`~y!0elkpBydaMmcVO(*8ryhrvX0z zegIq#xE}D=z+VIR1?~%c4fq;xN8paYyMcED4+9Fzp8-At>;dcnydHQxunE`%{0R6Fa3kPGz>9$w1FM16z&C(z0Q&*^ z0q+Oi4?GfhB=CFS_rS#Ex&oAdfq=?@D1axx3@8H#0k{HE0kr`M03SdOpcEhg&=jBr zR0qTY+5$2GC6U8efIr{|fD>RTAPMjbp!ky?Qo1YgzyDVr&)PNruhz%x&da}<#_5v( zIme?W6s6O^@kQOm>G$|w!ln4Mb`kwY36GrrY5B$KBFbC2T91dHLc;aIHrJsuUK&yYZ82y`$f}(n|dH_ve+P-`z#pJ8zLz#9zgJ^Y{k*4i<69 zKcWv$>&bre0REfDfA;46d$c!@>Ph}8`hkb~v>W@S051X^#P2P@0pd6HBTEQOeHSGB zslS57Z|b8E@tgVumL>L3U%<-39-@Dk_)YYO^@lw~e^|oULv({xggrznnoIPA;WsSg z?5T|3uoklC0%!%x5qsw2H>ZL^L9~TMi#qvn zc)q|J1U?|}Wr6PrtVrbLR2JA(;I0BE2y7O3lE8Ta?-2O7z&8bcDRAW^p1-TWT?I}M z*eviQffov#C-4@5cL>}`+?#OxNyV<1Vv6I!KVRU>0^bz)p1>~!UM23OQfPU-$_QLp z;MxK!1$GtKN8kW~Lj;Z$I6+{oz-ED650_*093|W{1rqKNxjjMg}gz#7DnyuOPmmO1C!pmQ^a9Eu_riakeP6CVa}Bu0+)3=q;J> zceZ#qTX?WSsSMK4{iFDt9?wOmbG7Pl_W_@XXPpj5_Z=vh&8%NnIZ z3CS!A6svUBDid=vQC_wVpA61MRD3^+0*Zxb;Gb^JsVz@W7T$nlfVr@9QiMg+XgigF4Y0KIY;8J1jxT)&Lku0+pSSnJ{Mmh~{QC4F<0=CmD3fE`^rvZvm6*2uh>Mr?Hp5>o zSMU@mE7?C)XRxV08!v3=dT33VMyXeLx!gY`DM`vil*|3oEg$!{7(ecxL?celiRvTr z0iVh);?KL#;*o?81sFZl3`r3voy;%s#W`uf;40hY@Wx^0tN-9hk)_r1jvW(t1c#PobqqrjymbD1B`F^_DD+%o? z4Z_VzE8cj}h5K9UV&hih!+CQ3iuhY_eYps-^_MQCmlGAuU!9eyM;GL>VB2&>DNDU2 z>ec$g3bS;rJvg!{sEEH!&5QZl)VxSJJQ@T8{*h#B#zoWHw%}vwKWs^cCi}xiASw9+ z6oxK;Uaw_8QV=cdke-4;NvHASba5ddR%kwA_ z-cF4#Q=so`*0EyYoGFu_BdSm=JjwE(%5SIU;h!!)`CroW@K2=o^87emygb#$EPRW_ z8d{W|2rtS^iqYE|ZY|ih-8SJ^MIn9IjE`dRXf?H9y)cNea$cVMkVKnbobj3y=f7#S-L z?jag{Q#7SHcfw7If{8ve%Dg)F^~d2OZoBI2r%;dzMeZ=BMZvAh#Fx!7Q%zchf?ZLM zFm+%AGYN6gPoZFB|=;w8$o3klhTPsm#n~$`;FBQr|un51G@)&rlVV=WOwH*81|_Y8dd$nxr&n0cbDe zTIg|9E2bI&>rF(@%vAhTWMwAP_N+q3^h>=_$$z9ms)1UVqDayh3>5CK1lf|(ln_@l zk`1P8@}mdejwY28ZOX#OY>g(PnFd!-7o)SYr;7-8 zftL$3etb_?nVx0IB;{M9WTksux#F!4aID zlU!I0p%19(V}i-N>rh#DcXvf!(UDD%z6m%Ov&R_e+bC#sx`~b7I+;ejuMzp5Bs5OjE7S zGNv<}h-Q=9z~&Ft1K#XWV|5`;Ne=uL+y!kCgEdi~nXSiH zK?~y2N8+el!g@?ReAI>32t|q@J^9g!L=7ccfUmsPp1OD{E5lT;Am?Iixr^4C= z?BStMbjA_dE`Uye5rnZ}(**<17e|{r@u^6|kUgEm!a*LLX#Er+o%lGD;~8M|12vWS z2wyr@7nv_nCN3DV99tNs-yoM!r^(<82Hcz#(qbi36#QSu)}KIBJO`U9QJ5EQEh#mv z9|mGBFzi`*2lee z7w5>tREf%*PdaPyL&-TLI!)=qrywJcTpq39240;kBS{auJc$mb3@xM=i5n>?8;gnc zCXc7d$bco6a%0m8r z`jX_uAGO-7(P!XZUy09QPLerY>Iq3eq?N(8gV>r}jEIzDBBM5VkSmEn%@wjDFO2(* zMY(+Bh(Rm}%j5D0qJ1fvj6}A^YfWVM6mle@KyE400eapH$m$v`k4bVnt!Ch%Le3IV z6lUwPKz0jEJq=ss@tZAZz{sB2G(bM0DI+zj7(9xUn`yH0ryQG%)x83vV?rY%SR(uf zy+YZ}y$$9Omu!m9W8UqgQy9UaJ{77^6r~vTI~%?hgFZ=cAMgQ`C(SF)$4FV@HR1EO zXfDp!^e$eaG}b?;FIGR2ezEKrvpAcejT(h1IhoOlN-~=;k5C*2J+UkW5taODERi3! zO2Ew6@`ZC_ZX*x5J?r0hl-vIPEr?&zhump8l4Kfg(n1jrLeJB8rztOK{D^Pjak0-? z%cLE3J9Qh1<7{ze!?vScM@2`x&O!U0)D8+O>j;U61_)EWz!!uf;|^8KM$nYHL+C9u zl88%i#gipfGKE0S$+xT{D^%JDhx7&!!>A_DB-$II!tt>3ZL3I&hq)0ecz{!%;(7Tcs$m^6fk+%7r5ws}^*V_OxHCE2c+FQ*@6MI{;Z ziI@YFzqKKv5-gn7(8m4H;(mUlsdp5=`w`8BhZNvv>*?;^kL;H^mK2jiPX1wlHJQ7J z1uT1_o?&q+b(AVrI!=Q6__=Eh2Gj+ap#e5!aBpfDq&60b@`Nw7m-6wq$*5o1j%EGI zHZJRi5r$EZj~G*|qT>{nM5yJM7Fk9;mT}gfBuY^{i!KQ=gAulXEH)Rknp_2pA8b72 zf~FKFn>_L43aqziEo`vDk9R$FHB(2>LmDGiTc+$&8k=xQG{K0%#t!BX%_NFLk4-$x zV9b9vQ?eV=d3m@-mDnvw8xlGwJ=`1A#h33BCw6sv#NO)F$rOiq= zD^u__R7_~AQYF(zV}{@kGXUxOO3+2fol>~qiJ%ROXCwbgA+Asnghd8)mFz}VIa!V; zjRTkdi1Z)Ai;9TO&WV(#EC+~+Nc=>~ox;hG1bu+fQ7){ni&B#ewoaX%jKOLIzp}D< zTRB*2B1=D@X^WPA?yh~E-I!A$(E}n3iLs?nu0!84#q6_?hQLNDqya_)F^wd7ffjI>mn_V*Lwzje_n{qv z*8pO%s25ld)!CvSs)KPw+gy^4nT}#n_VsGztnDxBNh}(&kVq%x&oxGCxuTs?u+S*2 z;UvRBX=i!~WhX^U5ET>YHI_8qQ!w_V7@4L@9R#}rMkdBnYtam}m)lFNmM|WYWwan6 z=v*v7%zjeKkW(hac`?_ifk-NabNiZnR3;gUCWbF(3nD5jNYt0J7v5D&ZG_cYPkh@= zSn7B@j3ccZ$yvyZ*SlB=ke5ip43!rK@I8$!%d(_$MM$3CLLZ~bFaZvjI2gGhgR=22 zm5n{a%p?dfDcr1sH6PSOJd8;Iv3;F_g0kq)2xWkWgcYg1Hs-@m>!~~$>z52n5?bx( zWRGNzrFJuaHma=}wxEXsHe+V=(Ii?Fnj{lrTN-Helr2cXaFUK&^C(!WOTijo2EUVX zK)YdCrTQmh(o;IZ6;ztA%uT;7I-2=ZoMkZAH>pUo9(w@T z(4u(A!&(rzAsk7am61)~UcnjJ(6B&=!0f^LWue(lN)P)__%m72m50*A=5A-R#OQ47 zv&2F*O52POUmY5$#_Dg*5(0);i%C{xg@Lz0)DT8f#FzL2+Rxg7wHc?TGPGoHVP&JA zcoDpUl)v7{vnM0IJl^Eh2KPNEa%ONaw`59S;Nn|EsLW+6R2R4*LQrT@8GW68Aj%TDFC zOSCfs3kqwVG0QA1!wQ&AGBoKZ&%*b&C=*H6lzvNjkQ*oUaH!6z@X~%fzD$hrEuf)M zsupxK`m!;aM_f`;{wTe$n~VJ|C6iy^PuxaYOl?hRR2qaB);UCAux+S%n9pJ}4Elju zt4qvE>7pcgnvM~&r?V^bCD{VzR@uBt@)>P{vt^Sa!p(95)*F*e@_>t!L-B0$#doBWbcwQAOW4w_l=*NTfayc5 zp=~Xyh#W5Xa?w!m9bvVRcfXK^e|ny5cHGXvPH!SNDOYqoh)1?T4dd%<yI#j2|TnmLZkdejC=COQf{Dex36F%gQV0)n~nC$3!Y#Cx}NLi!| zwmwKgNRbepj_=8d6%$@)pH(=7oA!t00S~u4_N}&NmXX|#$e_r60SE*F+vclu#R%XG z2a&D$aCr^e3AF#kr2&hyzbx|sf9%>}#>(zav~hp}y4Yl-9E1g(6e@&Zzd&h80u!Y9 z%|**da|8I)=c!ZatOpswjW7Z@O1;dt7J8?tp-aV z(Mzf@-)kU&)dkyHE=7nrd znMh;Fg+QFcH*Y8lMi<^FX(N+S`41}tU=X_hqdNIa$5!%k@C7B`9RlnE#W z*1&WFBLo&Q{fo^l&N9h*gnViB%ar#Ar85sz`;*6$jBdt3!abVzO=RSBkEIrsa zrmc2UHsg6LKPjEajcH{{ED9_T|4F4}U^7~G@zkr?>A$E19y_r=COIJLE2QaJWOMKBg2zO`7Sek{G48&#g|i-E5) zixF4{TN9*wgbM2+swx*Hg-ex`Dk1q7O$YJ|1GN+`rISKF@F#*KV}ntwxz_$=nvdvR z+kO{>6CpGKKtZ;!kQoW{NT*3x(l#u6m>kNi%iJx6(=itEVWrrFLzm7gVyN6PWqS(Lv&PDPA)sqMZq72r(!?P8f*;*!!pt|M`V!fX zuhT4lzRwOo`YE zrtwOu8+%y$u=yzs8f=3>9#Xo3M$w{knscE?Sfhn5-7|}NS5OgEr_&TDLY|*gWw}L+ z`6w+K^o0~b%rAN)iQ0q}MF)KftVF!U1iqE#fwyO{A16&cR^K=?Z8%87#ud^Yn0H2| zN1_gNhgpZ6sKD{J&;$=m04Ng7_6pK+tJxB8tnSlFo z1}Esp29q)>GCEdNjZ;_dA08f!7nh5LN6XxSDT^$B8n1L#0h10C!MQOebn;0^GCR`) zF|Q#srej8AG74sy`QVO>iKVh*V#4GZCDEMxZTSP81jJ%&B#KfPJvQO&^c{^9Uk?v? z#DoQ?Fd>Ch2w`7J$o={5mTeO`|I<@LWD!aXdhj$lMk+U%ZJF^}C=`+Mxgw&t1_zpm zLxUDD7}^XArXt&@i{Q5stCWkQ47lMCY?B%#Bw$vQ7$4LUHn*6%AlM5#g(O$GT25{_V`VziMxDm^P*sY&Mt2vkPwUU5;#hO?V#OP+7dK)B?*oVPSwKA)4RGhi!5 ztOu8Ge~(tVl1Un!(5?ga9PUI z3Jj6WGnyf6oMhyh!GK|Mg*k(9OKVs7gWfbAiL-nd7nFrGuOS1Uc&zhHS~|fJKS+pq z!QXPk30p>YY1-3Br)INo;+EMspCz~hHN!e-<(RzSC@~$_Nm~lzx*03kNX#msN#Jf4Sk3gSttkl_tZ5c*ka#+4>Nz2ZLe{8@`L(O%|t|{D+HNT zKOCiHYiNc(B{kFH$N5*Bkt_)*MyT;vujKDu!j8`U?G0TH4CkZl~WRS4(BdQ>`W+k(};smkwuO$`ikk|*~JB-j=WWcnM z`xnEC@oRsGO{~a|Hno*lG|}czizSOjJ!ut6O$w|95Klgs2-X_KU;s(00mL#$@fqwm zFAWxG=rj`8m=SWPoG{FU!7juVYFR8}Eu(3MW`v|8!F^PtU>&=q$n>=unJhc*eb0I4d7%}MDsb$XeP5S?xC85;HXGkc4$xw-|;Jlm43sPZULh9cbp(ojrkz^*1 zPsn-FNRdcE{Ry(67wLU$Y4+ki5%32ZG@Odu&G`!Vp>W#;P~sDkpBP>WA^))PhZ9G5 z%NR=p>>8}xY?2qbZY`HX3N1}KB0Z@skWW&`N+Kcz$a&C?6b%mz4kprA;SnO39%*xE z5=WqIlCyS+gX&h}0g_UCP*kQ#=xyM$?6;&>p)hPkN-7@gAyRm;05NWh`P#}MRA*~O zDqcMduynlv`c;uY)Jrbs6A`5J(%c5cFo~frihLP`hJf)3%W{McubX6~F@{SNliXQY zA0Um&_GihTG^0cvTRWN60(^ngIU0vH0u`-?Mf^c>-Xq{FLglt#3sR@B(nqRs5>F|H zo;93mZVeOua&_cYgBpP+)@nL~mO@8&`G_HT+p5(Ssb_{RnKXKZA`CBZ_~D%+dgxpm zv`E=>7eZ<+txh~x!Q91(Md?sm+x=1W8(V}qbFgv-xt_#oQAHYegP{XScKR3-S-WTg zUt>USa4)?XlzKhIy^Kc zTovmtpGV{2-BbbUZlMtYp%K9`ydqZrs2;&sMTI*qC@3&m9UB>`MmAwE$#8#vRYXK& ztU5FzCYJdY^N&*b%kngjE}Ib2a6vc9T^d=R*BMky0HV7#$ ztI)f#(QzQRShznOuI>@wFVzn})kVh)Pbd3J!(G&a{6%kKCiIMxZgjKFFD^pWEi4dY z88I-ZIXP_7i(#k^jO`s2DEz}BgE5Xk|IniK4_77dT%yq}7})-S=p@!cUQf{}n1`Sh z3lRQsVX>j;SGCIDKN6IQ5#@w~Lh5dToCG%gM3W3dNTzp0q*@gh8$#m&m&6f;$w^ba zX#XPKN5>8PL&KwRB0MsJO%aJc&g z%s<|MPlmHmE9Hw=V4p1OAoMRr1W$+m68-R|+ASU7kQ#aU_ z3+5Xg>#vFqC^jqP{ELRmv*W{XKBBG6O4Kiw@mj`=B8ySRwjQyn=-|L29Gj<)4MhjU z^azX>?V$xDTout9jRC6)jS|dD?$@}8Aara@NFW*{SURy%nM+9ZmgZ!!!EBR{+=J?% zxCnphIotZife*4#h=O3YrpdyCMLlKaq>he^WJ8s=hc7+WQmqWpHe7C;s81*wBe*vB zCu><~M4WZ~u?dfm7zX7>{vTV{xIbl~E*9U0|6405uMeT>FpT0b{15JB)80_@tU4?P z2g`YJ6vWHN7HVK{Bo>)iUR%jOCNvm~0&A#T0p9-5Fj^18u(YtnN9l^ArJg6m)E(;S@CX7fmVd zf(&%-L8>hCg4+$p6>R1BB(hFZmB>8Nik*xgxsG~ukItMkw-Wn++KXcjlZB5JXC+>{Rg0B{4!DTJMdz&RUS zZ$NJ8#cy2KM{@}m_K~lg52hKjsFQpWh~*`;S0J5-Nyd3l-WQ@gDIQLP$`RF&S!3kb zAP%L_CpX5sF_uixEbBfF?QGDj#ze-e+aNLb3KJqu*it1r_?QU zYMm!x&EYKdW5rN?$Xfib^|4qm6+jeSrW(h(%>S|O)Nd9GYWP2hUySd#frn8x3Ke^| z1H1~XlUN+vVh3YtrKC4)(W`>f*`(*K6%>=xu)9Y%y}TurIA?;g5RM7TZ;?UMFjI@Ld)z%>lI@{%=>QHKVvC9&|0h!iv?C^G1%<`MkSr;^ zB^jg3bo0kOJ9-^1H^3t`9C8l5f*TstI|Mt+7$}fN*sB}D$YfD^DY5vlbH&7a{Bho% zx><}mk`pl4iGRp;Mp~%3?10+i8&Nlg2#mE1}1$b$fSD{CNqtw7T0X@dsJ>8Z82CQ8S%RXAI#)26RSf2xXypA*A!-E2KNLDKI6 zHAmb&Lg%ZP4wIZ|Rs@9l$C86EWlww5yo=I? z+_Ys7XUrzq-hEMv~SBbD~ax*QA50yv{KUP zI7|ZUBeJr{Y;lZ7RL%ulE}i%)eY zAatv}C4cQBSkJjv`4@6i?NrjSHJ=Nfgq2 zwy7q|QI-$rnH}CI36R3Ww^h{WX#1`A!)o}K6J&EI`rbJ zJ5JMml0Jgh(t^*XYH>$7|WkSPJY6zf2c+bxs? z(P44~L1*b6C-%A)T{vPi6&bz?Sa77_%jn713!9Y$3>@n)9i|Z*N%Z0cqb`XB@*)+F z!-o(J*pk8*(`+0T!hw5XhOo&Iw@zhiaxtF76l3Kwdj<(A>`+BfiKVfUuOmXkC+$s) zMmBzNQ5Bthl;jzlPQ&q!Y`!8<-*AGmQds;VQEd%ANs^L|xR@6ojVIY@B4WeBA!cC1 zT&sj}jvYS2{wB_AK`O_pLVCIgXPk}Viy8PoNQL}F4(M2+Z0G*U&dzN+bm+ibG$&!0f!59mLwv|&Ke ze!0KA7{N(=ii8iy^`bo9BZ*i`$%@9$Wbo9|2p9XH3Y_(Dqw$A#HE>$bqHqd9fsrT> z7mHv+hnWe3phrvg!f5_tJW~RgjLoZ~fQZ4HiWYWeG6A)gmkBSN<;Kx1_JfziZ9ru) z?)lQm-(r>Dk3fF(hdWNBe`GS^zZKa~5uKFS!RL2iu_LrxCRYZ5rIdA264hwIqO;)c zshXS|cih0QH6>X*D8!A|)Z(6+nQlOAX38XH#55rBvJ7a6QX{-#?q62Y?HW%+% zD(Ns+1`am4mzDe73Hbyui>FA!ZKHB{yec{Z`#8Rm>JO%4(Lj+ERiU}dhK5kDxIV<> zDv6PRb0CT!w}J+gS_G;2MS515L40D<+yt$Z95 zhhlLDpLh$@Imb$OdXLvyjvQawu2<0VrZ**J8a@(<){jqx$r*5R;SMP}UO~rx#jyd9 z36@_C)5>sp5_=U6abr=Q^&|m?IJ$yKL*#{-jgtaIT=lz&uCuDsX!I4zbV6|w22G_mP8B4?> zlcH9(fqyjTP>IhH!7&fmI|aC4MoSBrpbKgAw3T2(6zNcobex-x$FPSn5%6^IMI;c) zFAVo29Y{(rwU|pk7I&q;?M1QfiWr=3rVC@Rtg@`yc(#?R#q_Bzn#>Z$VjzTQpT%j<8fxvIPx%+^H<8x1-`MF^keoOy%xjt) zi8#~`+>=_KLszesR1=a+NMpv? zB2W~@09fhJb?kLllmycyyo^@6m(}h^Qb`h|dK@^#2~mEStFZ!d6Xj1YPZ_`gp)F;x zH!83!P%-pEJ*x`8tIflV>w-{^;%|3AcO%h*%q3JoVn|+|o>+g_b!L=@rRP5~( z-5(*Hn^L1W)KWfPKbj5#I;?!$q`pjK|EvFvB`;2@Y6VVc zTELW__(>sRbBg~U+7OeMa14IX&>-O~iu7~XE1WGVy!HT9fWHyxtL%o`VUmzus0y5K zlOj*AfpQ*i%b=JZLms5F;A$4E5*TFQxKO~!oBG3sO-RitCJ)e5FUplLn%Ufq(BTz) z+E+lGsVr(sfF7S&;@dC(A9HU4S7R3ckDptq+oqIOCO67nZX1ctb5kLbt3uXpt0GBd z$=0>+#Mp%x>kK2?*vZb=vhT#$2E(=Q{61%S?#3*?|M&ZU{r?Z2-uH8!vwzO{oc%mJ z9pvbSE)B$vVXDad8YBzMX}SSf`6uaTLoap)6gXOWVG@?jnrP!o{3Gpj3O&6>M$1s^ z`})fC+V{*nvJN7)_o<+V*(o2mR+lW&lQ{AtJ76!8+~EUhh69&O$*?vZ`T6<*$)TMh zr}smUz8WU!;^qeGnTV=28K}a0&>!R&iBCLCpXl?^^a3W`d;vMrL7sSCSF~qMz>!w? z@LrtvB0Fkeos#b!A$A&)I!~4^WZtl1PJR>Z!2ZazpGA#I_i4wj3QP5gBj-7Ynt}*} zdB<$HJcnE&X849i3q`~IFItz}4N>Hbl?s$&}(Q^o5<0^JrwHtHE5R7)Gi0J6^ZN7?~CswhjydV(rPb)vplZh>2 z26IVdN)WNRF#ULjAQs;cS^Y-!sfTPmg7l?n&!5#-aKg;V$Q%kAR7<_O$jTk*mx`AI zfqgPCg$WR17cLq4wpT%75lbf4cuuq5tfLpIS8&8~DB3mTd8b_N!&@@a7_fZ#u06;k zVxtlL`;YdtR-jmtsPa6dT2Da~AJcmf3g1017MO3$Wo^^aa(u$bsZA0h_(uc`Q_Hqi zOlrn|X>ejWlM${N{3W&^U$pg-)x!{(+}4UFg!k`6RY|)VymvypFm`9mGkJnfI{A~W zJ7O*pEg)X(Kvv*9#eEOj@H)mrxu6HyX>eNqss7MEnb~Nt&!9nre4uOC*9S&YY|@+w z&3iDDiI^thlTo^8<@hFXe`8NSLaaBdUlJkeWO_FplmaOf;@wP)p@Ti5w5hNF!v?}v z%%Iio1-IYilPW-a(WHaRZ=$G6P7y&L2yW~n>z&5^ZGMkEaR3)=b4Oq?-e5fY-S&&l zf$$DoDky9}5-(VAr7DFU+T^`{Fe5_@Us)J*QlV?X8dB(Rk}LP<;TEV|C`p4$o0__!LK4WhhcayN&W~0@<19AP4dHAQe0YKv3KGqKv#%YfKycJPsV$-h zY$^caPl_VkpF{SUCBc*}8DH{R1U*2|MbN@C-k-PjFrK8F3Rq)E@`&iOT)M-FO4OeQ z2JxfrpeH1D@MYwHStD=eFPMsnZwPZNdYQ^PFuLJ4oV)1-EjpdxVhtyhZ1@rgFI=os zL$j2QZpG0I^t0&@JOq)9^MRFB@uGMdOK1i7e0qvj(Lg%rNRQ?;bwKBJxqZLy+ovUg z+SAFMX)J9x{}KYMSJ3-md%>kMM6QE<*e~#p_7fuc5mQkQ8n(M|UZrzqAHBYhsP^^x zUA$Ms-$e6+lcIlm`{Up+4{W*_*NEmR!DL@!+ z(UJlEH&~v^Cto|uB11dUK+s)G><8%G_AxPVK!WOT(Tw;bw%bhOY3+drtR(BV55&Ha z9^~GVAZZj>KFUO6@mzc=yB36OS>zjyL>uB168HdHH{g^X=ydYX_UrHb(I5O%9bjx< zuMp89r_(pz^%ugUN{n_XNbQJd9}~%HChh;i2$ZU3Dq6Y}_szr?x5v9z;E~bHm{>l= z_L9sy!_Bc;i!{;j=R5tZ?^-p?Khh%bpt(Zf^@(dG@V6t#KROZ46U9f$^5|p$xS=b^ zG;<(+bgvhvYkI0#2GcLFpe(85wi*Tv}nh4_%BfdxZ~2jnx%OF$9e@c_w@tpMa+ zb8`MPpPr@n$xO{-ar%EAAAVw+CymNG=)cxJQTn`mfjgd^tWuD=tKEr2`=)$b53F0j zt%U6EWGsVih_Y_583|4?5W`TI02H^wv2qLklK!Qx&jE9te0|n9zC>KQ)WB|Z(dP?WUb=je8QAb zB-7{@xM{?6dPt|Qf?&la*++CwD!(pYbpDI!;3@ysi9veEdOuwr)~X4Znjkesbk3HJ zK&611spm`P*~w^ucj8DK*e!q554Q1&%x{AdilWD2`VSxz%vqUz$WjCJ;h<0Zjpt%N8g;^0_1;FQSfN@2dV~`{3sL>Pw)?A9tV7=hm_V$}_VRZ?nE(eqO%m2|2y})_7 z5gToT-asSYMyQc5{DB7$v2A8BrnR(!eJ&}W2-A>w4HKLdqc<{p`_`xP3E#}uv&nGi zsId_VosXyEe`s3BO=^6>hnkan6xks*Q9IB+C5ea8d(yEWa|?CpF%vooL2fpoT|Z(S z#zkaQsGD<_Q4d%w+QH;<{D3rAn@ojyk^!h?ZYGL@>$~FyWFvS-zvcq(^T-dd1D6u> z54?cCU_V!6!JYO6xF3+qIq--6Y6Ex4w@gchHNadHmXixufZ9M9ZQ$#QVFP->7(EBI zhi`$!^c#pG(#Y&T#5=&R8{2Kzs&!PGw$bfk+ABN6#>IE+)H$I`SGF6mS4L*u@?!_r?I@#@=O+D2&=SHyml3cf(6{0;^sMBTQ0wM37!||B9 zux64Y^J^5K%V6%Y&L22RNG_+*wolMEfT1zz`H;hhL<^8lih`~t8b_?X@G}o?vfz3Z zPWQ2aC0XwyU5mJwD3~D0>IHIyuRFq&ep-GC>#@Q%j(SD>FmQI0Gzsj_n>d#m!VBiEa}<>d@?T4xzl!#cpIUA zks5q$fzLa@unumT((Uilxu-8kJpa+XwnBW9|Bw-x=>=p%Ao#%U=z~q@q*y1-zDl>qiOnRMsbMI2;{#ka8|%SuQL0WRBw!(x8E0pc12 zQT^J6h3xMIJucoarrQ_wFFT_2^Lc>wMkYE}O7@CqZ%u^z#^79F3Y-q?hw^~Z;f$aR zbwt@x2y|YmU z-=YhHcBb(=59!8gP5z@93?9|?c;Q#II=IV z5m}`BrhJ4&D`Of$rGjAxDP?^9Ul*R(n~Y*zVVLk0&r620j-p{izww{X&T4z5I%Q6F zPmmD>Uv16eduQmmEM5348;Ei+=#hWN8<=#1ZB3vayhX3{%LllI&Ia$#|E+6rB3>81 zc*6SM^`O6=9@M$ll}pe#-xN)qJzYA*9*s7VFriFV@acwMl4%C|x+IF(OLYCW_Wr$m27I@C>dFtu8E$VCKV3_%2w+`xQdV@~8QUjaYG}v}Z2yye zh-W%G4G60V+V27Vz5m~Qk(os2AL7Hed_dO#DmVyV?D zjr!9dNPkKn27#h=ay*EfAAqTmY;xL3TprVtGw}wrJDiabH2~F9b=hP+(eB`Gi1?+M zZ^MBO<#)o+rISz1kx2l0o|R7F5Va>Z2}b$J_WeS+H&B}(H*pt&_EHVQ`UM_Vi?s^ojY2isnVe9 zS*!qp(jXdK7jL8T@t^xaq7P7a;A#+Z5DLEYC1$^#|Ays0DVf}x3Ug9*#V?(Y4>49a+Um(Fvd$h+3v^dB)eYatZNA-CJDR6))wvIY8P0-m=;FhdYvSSl z9415Yx)Yr}UH;Pk6x#&SH;?S3hebH1oyqn3ux!s1v{5+h$QV771>FI$J<*N8>D`kM zeVD^Y@lFX1rQ)T(f#aw>eo61~r0Z}QaGDWBnF&XK`T0ufP&`iw+EvVOeVbzE2j*n> ziD7okmW+((*>V;-JNFD_pYBC~>O-%)*0=HPJd?N~6tV@TynK6Q(r+R`{CcG|VvKL^ z9CBqgeVBRg9Qdpu0&@b$H-E6Ue?n&H8&L%f=H#3ecSp@R?>ks)jP&lRZ$yln(bJ)1 zOixdf8SS59_XCjc8PI)Gq|R{vz4MyEE4M)0H|OIc&f>wo0-h(Zzg*nA3}>>) z<}2b!Gdf=oS`#7oPaj(=(FNPNr3<-l=HN6qIAs)=trZJRbY&0@%#A|_hRo3*V}HpW zIw$q_jJ)GLjvm>3j~ zqG6UqeEx1;mHCnn`}2JK^}YBz`_yKD)+S6V(i^Emy?ILF;$X#z_JF9qV9JF2goxy( z^wstQ+tS&VWcruP;fT-Q&7O$wTe5RO&|Obr^DKJ(WU{pSw*xrtfzCajI)H1vpaTjA zAN7>gch)UPvWym}bc+|@x6WUxHEA{&+0Q3Rmo7pW*cWF9zUKrwb@ZT?FWqPSpVrd` z$h-%@dYZUj`k#E25n;lrK6gTMNSBU(ikB`a9pF~|0^M9!SUwEF;I5K1QKCBk$bd2z z&PC8AF1P~%R25`~;c_6$F<4K6jUmvNCF^#i)uAmLU(V!HU}Qa@7m*p4E9h>6QK+H6 zd>SoJyKV)Z(vE{}{fhg`(!(ag^b?~?2Xy4%l%a8vA?tWN=B7k|8@2ZCoBpC*k%@_3sSHjg1R4u&xVVXFrhH5Bjh6gNS{Sjo)*iO`pzxKXRl2 zA_7-y`Y6SFV83UNL ze_!w%^4vIo{e2;~`lbefIUExYgg;=jG58xE1ApKF3s8CkQJeuE1oJcGUMu#MA)UR( z+2kr;U68kaS zomh=Tf12>%5p*u$>{~eOh|rHuAg>jozk$?WVuN1W6a#Gt_kgEg>pySZNtEfs-_tTm z4EU`DQ20B*HYRfVCs*GdEt|w3AxJKV>zqL8N6{5R(IWSch=4w+-}R@l)}Nfbv;lCf zMgi$7lE+Bye!fsQiFq2FJAo1}BKZ1!T@W5vw zp`Fscrv8xkP1$RdOwOS}ryJx8lS10hiGn@9#!MlCN+g9X5K0>48mmu44&QkXF=zGX zZ{9=fS$+AN_aHS^Kj^ylV6tah4n1x-vyw$R-r^}P8T|J44b1cL_Vs6fV7}HLHe1j? zFqi}fFn`Pbf?aa>%X@&CT zUhg&RS)lTU^Qo|Xi2c^amVMiZ_(J2&SpJsfAVQtkeo>N6{u3-fg2<)6S%Y=+5^+>t z$g~Or>>C(~f$D}eVdApA82)!&iLRi(NA`lqBG^Gn7GIr_&KfyiNbVxgT7-D$8R;zQ z3CJKKVE=osv<|hAq_L*?rZv)9f_HRS*dnr3RE&&VydMQ04}hK6)RelUzart{obS91 zhxv5wy$JlPB1)m@qS$3EZ_VJmhNG8)S(Gc@?MrdLz9O3Obq6ubDP*XaPEkF^Hw@9I zLd0;!YYI8;E(4XN0wjYmcZm z^g2&(g)sH4>*hB8PldWKB(e<`Ukk225%C{A-}CoK@#(}5ojqmd3TAGpcy!YAean_s zoc~j_Pt)1$^?K@V@%vJWecx@M==OFa#U-ydQT+UJGe!RwTPQZu{6^9B=~jw|9&e)< z_UCqrlkV@JxcHBq6o*ypqUd>JH^nJe_E6k$VK2oC8D$jL-DjAVx{vZ7ZZphI+)w%4 z*BL(Sa)9zrFETt8caZYq%Ne@1J4E@B#~AL7JWToX`xx#HJwo}R+ZkF19i@DBDZ`%{ z9Hac|l?+FC{!aN?#SG^-AE*4KB8K;@PEdaD7=~$I7+x53lA7B;XIQoODazlz!*D>i z)097Rj^PLIa>_qVVt8l~!x2{)x;ver@8>ERzMjl5=m^7(CTHpUPN58&3}*OtBg1)r zF?6kaj@lcP%y4rt!!s8d9=AVF-!E^&uGlF5;p$yw?WLWP{hBs?m zq4xTAVt8Q+L+1kwYmH>iKVMl!5Xz_8a^hGTCr9O`hB+G`!j@bMsqX+Jak?K;Do zm2XjdHxvvv<}&QDoMFWUhQ+28)Lvk9hFb#}dbeXZB8}mJ;S68SW?1=GhE)$UtaOv% zo!1P1w!KaL?cvSvV{?XM;~9SF!?5dUhAS2@yuN|qm!k}=D;S!+W%$tc4)u4d7sLL| z7`ntVT$91Db|J%Qvl-s`g`wwuhS8T9CO>7EYW4^9H`bkD135!YB*T(!3`6@fJT#7B z(_)76HZZ(d&|l8bJd)wzE(~+C8Cs2IIDIZdw3cDdGKQi@(8EQT< zl-k{=;n>z>_%)E>%~lM5>B=y@FT=`ehRbI%th0jQysZr19%C4BonhfqhO5v68qOXE zh6lVD{??e`+|~?xb!F(4#qi849z|HS7T>O?{ne-tIx7>|m zeTI9QF)WT|nAwA&cQ(WF5e)lGXZU&v!+xatsl2I|_m~{)+se;= zh$<5Yz>p;}`1IQLd~Y4iI6Y%;}F%X0(sb`Qrt*iLSD!gV;V z_wi_)_rAe+#`}kNqM8lBVf$L&uHRx1Uftfg zfgdglFYs5i#mmmVH0gOR4VSu%tUGUcD)!p6-fd}*6f9k{{p8q~{&>OA_u^ikbVC}>kXZz!p4FgQmTP5MG9oJSX@-D=6vquf9HlYy9re^k? zAC`|NmUzUjwHSkIxwOr)`8W!@;@)$DmQKNUTVA~D>d*&IIIH|AH>NMHcfhRCh@>%C zS^HtwlQ}A!jR$$xcwd0?FFuz^i_>tb{jFth8>sMfrQ%bcP1Etrqf>?HB_nX<-f8j4 zf92tX;`{erkM4tKjvcsufA&;7t6$9p6Mjs^I|^b~PG2_`2gaWt(>bXRj(naG?z%vY zt6wQ?>g7HV4_?!>=gQl|aC+}%Yns*{jUSl3TabBRB!2i;M2ua}&bZm?RcB5OnvT(y z4K{@_b@3OU(%@}}r{VEe_uP8*cr+fcx%jUkO(){`;##|!6y)IF{QNq`ubPCfM-Ef; zD9Oj=eP!;o{72#m#TP$6xtxp5$9d*A96JOncRt~4ed8Bjzp0eoV(x}cV>^iPbR`-=XaO%3}!}m7r zg%trm$2uJ7gI9;Fn=vxBCw5)(JoHMviCA6o<8L0%6LHB;kS z+@(tgW1lte+|n1$#7A?g6}PKXfaL`{YqUL}#LCCAtZ_}#@nYZ6Z^|!@!#!Wjf7b5x z0-S7868kA@2KF!RG}`0DRP24;qvMdmAMyAJ$JVJ*mf(HMf~Gz>JQFuAjeghe{A66& zFMHH!ml^ojY5$i2D~hr2u0=}eiz0k8^4O2V%ctPnz9TN)8af*%9Cki5@s}aEWZTjW zwH~J6=6x5nX=yPUhffGU`D2%29KWT0$){xtamKRIncdvg_~}+x>3zz?Jdj6Gtb8wFIvBjjny5Z)Pqo!Y8JP>Q}RyUXPS$Jz$w_|N~ z72`{WB!>MTYnvcUEPKrnz45}UeIGt;j=!AaC(u~^>eASa9&ZnCwGG9;9-wi z<+kb9A1ls3SF9@W!_9xHD%tthINZF$4|^Z(8IJR&dzJ3qHXEm|?J0!boQo$#{5n4D z&NMu;!;=|@%opR}IsxwE{>aC7_wK(wfA$cZ5qN$_qr86jN}a8FueUG8bLTx?=CE-d zcFJ{*o-pP|+yR-SoV!zmYnFd3kdB&(KK3P}yCcgNvLp!!eQu z$@q`G4x4&~&BTLDECR;;QiPwXcRh}e9E-QL?fR^ZOobbsE;uY*KM(4uRY3i*McBFC zfyIx{jl*Ad94|aRb{w9)yJBC5w==NH`)%olN}ch{-=&u?&s&Jq$GRV>`6wAHO@D8& z@)w9tofd(k^A_RvlQ-1(eZ_2C_jGmx%auvkY~RmO+`WAsv>1Coe4aHGFIX43L4Iv4F0HBD z?t!P_iwzC>(ahL;;>DKYCgcgvVY%0p*C}^S#_&86UrwvG?|X3jJ|D z@}m(f=et3OEfqvq$LHmk`c88DsTp%G{?+hwh^U>PKoZdkM-YO+Gy3SUzVbxY4@HQL z0|56jOA4M(GCse+`Zek?9(10i+#xT_a9%`H$lPi8JPe}YlQ2zrs4iLioU`_I5=5** zpOJ!yG+R3!5=3OqwDIERE3}Bvhc7LB$L(#}Z1JuIZ>#S>!4*hh^o`!cFQS}Ui{3T96m@2`xPiq4xG`)`<^Vty-mK8fkJ*Sb%K z!;K=Nhibjw@KX$*n!Y1>YWUum)5cFbKV@j+9hZZM8YBM~Ko7d2VS+2Fe z0BSv{_u@Ola>-5KO)nGQf3^^R>0_zZy zyyk0X&&2vAA~997R~*fX6qFb7Xi*vEMMPpcsVV#s(=YO3y%Xn;#qa4h1O!%@jm&e5JD;#l#S`@^w>V-d$3j!KRSjxvsjqvjLyr<`Lc z#}bZejyW8a9OWEk91%y&NA4fTGL9u2i#Xrlyj7EL>x6AxW63BIF@iM;;81R z;;7`P;3(s0&k=E~c+dUkSjMr0V-ZI+#~hAIjtY))jxvsjqvjp+zk*{q$5M_Z9E&)r zIp%Owaa3@WbChwk=ZH9J-tzD`mUArSSi-T0qncw5M-@jUM+HYYM;S+Zj)DEag~YghiZJbIjqWGD0Qi6&&RpWkzVvdBjoklE=#k z%Q;`hvD64lIA6q3ZG<_TS8-Gtp@Q>rjxr;(=R7h(%?lo1BP{298OKs1Ea7~S5vn<# zV}vTsD~(XWdASkFIB#!+i1Q+9c>l1%2+KKNW`w1j7qNu%MMkLRyofoRR~ey_^CBuZ zFE>IN=S8&VyoiYN8s5H(SiyM_%Q-J%8RtbT<$Q?|7I9ugHRnal;k<|{&Wotzyod_U zizw&3h%(NLXwP{O5$Cn2>lMf$W}48PK3RfCg#`X%p?W>{JJY*$ z7R+WfQ*1X)6;5n1&HJk?OIX(K(@WPGt%R1RN-JWo^c2ie?>$0YGKC+`hr$0);n&Qp z=hHWK7t$Z9Z+P^{6t2j>c;Cql7nV6Sws2Ud5;mQjYufNymS7PvZm83VSix*e)wf%s z(}n6s`osU`!Wiox-Ivu%5`rt9k2m$`CoIfS@3?!ut58uk($u1ImQdQDvHK3YPQsk0 zwsjpl_ZI$q@?JLQb(~OZ$$-)IUSta0r+!LVJ2+nG>mLss^4tge&SSMPr$@aHdt{#*{h9LeKC5+j~I~g6S?mj%=4}AGgmLB#|Gd|}o8Vp|f&U>w$i`l>`afg}_coWT>oKgSaN9=eJ!n!(p=h(`&*!7E zgaG=a2&X@pHfy{qUKrWF@?6Q1hJtsuXNO$|W(vQTom=-lDM>J&w<+t3Tb!`TJ+gX8 zW+UOw8c$QN#l3~mFa3gRj7|}%f4Y9~aa0$_#Z5&>)2?sh-wdj<#qiSZmBX9o*7JX#Tm1^|o{Eg`Z<~94dkC3r4qX|4S|vpPDy!YuK1Eno^Y!#81!=-M^%j$hRvALS z`1!5w9Ox~yyt=_8X?b5kRVhKzN$n)mTCmCd&^auq?B?D%w>z58^K=v{y|aG0U~YF| z+JzbqXE-Da>e*JxbzjnikouZK7wmcq*C$P^wLdaja8gR(e~?h~eCi|Tq0z$adsTN8 zkLoPQ<|b?#K3*j}y56&G<^E~H(S0@A?Ht})Fx@g@g<@SlLD9jgw9n^oVa>v@_?$h_D32jc4ZOka{Ba94xx&6!FdV-bmw`R_#V}$LGdrh8wyPME# z!S&8bF{#2WTjA%nCwdD*z3Lx7zPz@eWRKuBZ+6oN>z;zin>wmOlXPLTZO^u2J^BiF z99w%oNDC95IbT}SGQG1f;Z*0htsA5W=4)bGZrs;fsM>6UW3vqb!kCG&$G3~(h3vy$ zQAq{>p`^?Awts;?}hlTu{_-E$^(V) zz^$En)BP^O{*;3Cza32zOkOoRe|3Ad(B$LTgbwcQ1(U2x=Qcc53AJTEC7Jm57K%)3 zE7p!`E;L%Yd(0b$u0q2(%RYxMN*Cs;+m?A(mo8^w_jhO(y*7k?{w)P zn8bT2B27{SFU^~9lYae#O7l8^6)%?K&-8aF9vhzrRpp-*B_HRk{m3=jD7I z{4i5+TXx{{m4a4+MZxUuryeB^Cise-P1(ji)Y1W&kAU_#?3kLXlrL- zSB<78FFnc>io(^Fo!pdye}kzW9m3LuIj5el-B7cIFlxZ&f+cs7g_Bi$GtOwdgmxZ- z=9Df>6z=rC(&KK=Y{6_ni;{X~T?NlF^Tc*r`v|Andz;<;1o?3A_@ngBnZg+R7E;eK zN+I~bh5m84myi*#M~Ib22?yVJzXGi2n!=PbaZleJQwdTtlaUIUy|6O-)v~PC zD#4yU8mvYV6Emrb^+R>t0A%v%>sLLN|Ewtd){L1LPX~(gz=rlU3IqOxrcC4w=ZUGQ z2IiZ!@f!T1_szUlpLdJ)#d&R!7w5G_p3S$c(7I>*AuZ4B>E>ttzg{0Onyx~|>jj4K z|M&F*mOf1(oA-Gprd!SPM=j0=i73iXL@|63#rZ1{+jI&}w}bs4?{`xqC(I z8eCj=eGeZ&#BGY7ryRfaToBQ2`{JmU>WaN0p0=`j_o{S(AmY1ueV@4u@ZBpSi8qO> zh-`gF+>iOEU{3dkj%+TXC{Nuw4_n{STi2oMJNu$!-U~(#<=fPC`O5N1Q^>G_w@>#( z+{?_xzuNw^Xs%%S%JN-*9Y=J*@=;eldu7t~8qqzP@#K|TiR6QJetBqm;nMaaX6_N) zKk*GN`t7Nw_Wi0!-mR`#tkKpFUS72RZL%gcWTYUv?~WgW|Mj)+B{#DQ{`ldD&c9oY zHlzDpwc%}Rw*39ZihJ7iGM4}EdA`pe^VP5}N9Tn^RBg8JK>XtHc)a-h zmeqv?3qHGs-l*MhN%N0aHV@xiFT|^oDgSl%5y~}Ievd-$AUT*5PO)UT1Hsks@r)NXfPm6qS z5mxzmYNttkO$VJj-zssDW>vg>)9tqRC+k)vMfr&cNfPJjMHJ;IqJcbFJ)6Pn8# zR}n?Iiuga1uc)U)6y+=;6^d?M_5WJlqCX;v`643X`_Dxz<9b6x7JhKJA!>vq^&q^U zp+?9b>vXQPi$*xQaDZ#%c#U8;@qJdp7LBm%%sKxje`tgb-5km#j?aY(pEbWOXz^Sa z+F^L}ZMn~d0mu72?)KAj;pgoce&f$S7cNdop3uzvg%F%PAbUvg3*pAFJ86-9UI@2u z)_A>W@e9G)^zO>BXI}_TTm7uQn7n`udRA1)C_cp zUU~DSP~Z2hrc%x~@55nHh1s(e={vfP7*LD7qhaZHGPVKiX3-~Cs>iO}-z`~Eh*?nz` zJWhNRiety#Sm^diXnUr!@AF=tgv_F6*JWEj3Bx8@wDGa{ER0|N@w#imXJM@WHPicR zJ`0HphX&03^jUZ#On%@C>ljyymM>es{EJYhYtqwdAHE2R$n0(dm0yL+MTBgtV)wm|mn*xy2sIs*zPDR!U;KX0_SefkWMIF(1&`+3 zO2_JM>QxISH^vu#7_`>ykP5#ZeKP0Zqbywf=j{BK6FcL`xus)<7RKWNUdYF$s2l#} zOt<=QVH1|$P5rP{7LMaP6xUz%s5|!RxB6P)oH*>2(I+CqD+71)AG736u7Jz09aOYU zcE!`o+bdq0b;dm_4=7%JIUXmU-n?LAephT)f0zXx&=r?$T$s7!d{?ZRxgmCSQE&WX zza5@qH+RCO!`~(BuWyS_?M zcU`q5880pT>ve<0Dm*5%W0MzGTj9`$9uxC54tP#jMDPl$KDb|tS#y@H&%$#p>YtU} z%EXZ#?r$CJQnB^sww0saW@1~_mjzVSki40?Kf%?@>fxNqr0ymm~*4WF9g+n z>Z~JJCbwEoP(E)!DZz@yX&VU2-o$MrSad0D6T#B!zMBckEvjuHSdw7=8$tD1c1}q( z@ak5=mq#AhMo`h>m+b`QeP`|gu zy~+rmGvX3O_1ISX2wz@*D@FT$wdp#yCU!PO`%9(=$a~qR{uE31-=e5$(C#2H*EHTi zvEp8BI=(9p{*hvi{3}Jp$=-*Fy$ZXF6gBS@M+lE5{z9>&%;_lMRV9TK%j^D0v8Zb- z-H#$`ypy8+u3Gf`lIF=|ii%?|DHe6;M$a+jjN4C9nNg3PUn+Y$ouVS>4Mmk_cY2Pg zWY<25kU#VslhR}g#j zrfYm-iY489QIy%vqgXcYD8-_$?YXL_?NwbEcAZF3F5gbE^v*+yW&K^x(eQ7y zqNu7ph@vujCB>5V7bvRbX6K1L*)xBNWs{RAs?Cci7A5YXD4+X;nXhxdKpiE4JgQwI_H*7wP%PS# z%`jmeMRmnK#Ewbvy8ppe3qg-|1QO%`fnJ2$>I+Z9vb3CQSR7) zV(GHx6pQM{P^?&<$jn{X`7Mol6y?h+exxXGvVx*w%x@GmM~+ZbnOvb*6!3_my4y#J ziXk?1pKHbRA1JDdeHp(*pr~A+qzL+fqC7vBVtE`p*QKsMi`jd(oT6&?7K$YWhbhW^ zE>X0<{DAR8-cc-bw7f^sTejSdqRgj0MYJx2qROi+Mdgp(D3-tPLs8Rt7{$_cQz*(l z7E@Fx)=`uX-%YW6!%2$Dn>Q$ym^@|X9$zSG{43M_fg0>V(O`cWkpp?UhAT~aPS_H9 zHv3(b)3W=a-fedLRn_EcXw0>j1;f;PLmR9pSk)ltQRsyw%X=T}^fh!&hi8c`_k0O` z_k2D|*Vy15v&Mei*vbL_W)i!1$Y)3Falv)Xu^Bb+@8?{f=N*^g{PGVMkIeW1N1v(t zq}trup_7i(TJHRt6YhU(SklVmrJ?oumK~gt;*7T)EZ_IKr4K&$=DAPZs=nAZy-kZ& z{ai5~FsNc`v=6S{{_F_3jW0g8J7xUR?3y^>Sd+OIfA_|ciPHJrZ|dXnjTc8}9d^Zb zoBC}!rFO;3U4B3O^K36XWxRchYe{u*qqPmjP21{=uh>>`IkMPLt7nI_CFr$jPLlK+*o~SQ|vfl*#@gcp16wZa`ocfUij8eALeYS>W^Xf zdCNzF93QFsdBxYGe)!Owlg;v{p9($f6xa07yw9NWtq$F zrM5rd0h3o+hsgtQ*s#h4LteZJt@icJxZblJ@s$oixvhIO#Gg*q{_!UA#$Br2YJGH^ zJ^tD_W8H`#Gwh{SwD213g+n*QkGyIhidCbYWUPDG6uYkf#r*BZ=D1e2|KZ+;1nhZw ztY1(2rnszl!@WXDDE{JjqjjGep*ZBhs)T^wWVpKL6q6KrZLFGGIxeHPFE%|nW7}lM z=GeXF)|!KsG{#es-PcYZ{yLQ9Pjl@1rS;ddu}*lG-}0=D+nV6MiPf(^@u`QW{OsOw z*sc)VHpo3sv86G7HnERs*g1b}=Nsa_aY1{$d&x)l@x`^U;?2m0H+o|nCiwk4yL&i} zJMm^z!@yss4Ng?|q@%-G^mZMjv1`YM+dLHMUD)$w(UCOAs|YT6R_5S-t*Pn~kh2z;g6L&rCFWH`|S1>~D(Leu>F zj=pmv2%D`R(#{dp!mqvRY_8ba97|J1IRBXKgRk|D-H_=Nio@I|1$>%c8CS2ibe3aj z440!Bem`XBn&zjxap%jGXW7-Li-(P!(4$`CcDVNIHcytW^~AO7xE=}b9Dzp!towDw z!CKgFVxGI=SqQFI-*Vv1Q=WKpgLe_rceKauxOrh>zX;s6*RgSlm0Dr<>^=?Fgtf(W z2hQ|$4voMY-a9H>(j#zk@x|Vjm73v%pY5D7Hz@F`9`Ambe5E;FJ>71oa&k+&V}AZ? zpBAlgzRBEiPC-@h)0sQgN=H<|^-OM54X>z;-TU5~D=&<~;~a`Q-tQEEFU~5AOxkLL z*DmV1y4U)qcuA4_kM@C)_;rFxHvUjeT(fv$!hvQr@$p(`e|tBy9lkc)?U2X(R@iN3 z$j74{p9pTwf!<|38x%j}k6%O9i=4kV~(Rjx013zDqL}Qix9E+)kB5`(P*!x{| z8{@OpTdv-i5RDhi`#8$MA^;a_)V+VPZGk<8HjTdgE&{h++(r7dT!9;3Z8BnT#t-<@ zju{umCpE^o4|bsRz?yhkwTtD0Oq*hh?dex+d$z}S(1NYaO``DSN&6EzR7BvrlQu|) zerSe!C2k76|2zh_4~=U2>;B5Pq|q<(Ki4bpdE1do-zC<>EBd>C44>N)_wP7(;Njv# zJnH@N~UAyBU!6vr@YQ*3vX3@|0 zv~P)<_59uObx{OfR1n>6{mLf19(Bgmrxb<-Z0L-urn%TGew>Kk=KAgQUJ{05x9uG| z=}jblUauf(@SUDGVUfLg#i{Oi)8(NhBP+V&Z7#0!94dFl<)%Sbeyd*(d;E6b((vO6 z`08M5tIr=|@U*%Id*v4O!~>**=REW4ftBmdezFa(h2QV%c4W$9XC=EQ-SE2Y zMNUa$d*FKh3DY{sUWNw0&UN`=VprU5)y}KO{;G+`DJ4rSi`rs0_ij__FO9`x*M8QF z9UOvZ91c1EseK||XO(&<#48q`3o5GTm==${FZrxI(6k%wu*6JpV`VpNneTGR z99#JLMQL~JSTp9NazhA?2zGlp^mBK-`-jBHcVFZ1vBV`9O7 zL%KA>148;*?v4z{lbc7L-7e{X3yvM_es78r_fPCHLbA6TzW(F6W_hQY;HB?OSClrZ z#r1<6H}96xwPUZIcyiCsw^LX9;?=HKn^m}k;t}o51`bzs!=Lt7dvI`FEWUCkIq&-X zMBKagH1r`a9*?y=Zn<+n1H5B_^_g}hJ#qe=xfjb#67Z~|D<>wjbip-mZU4o&UleZN zQ&VH3vBTQij~cd)#qD>v`#Jp7 z5qrO=mr~0k3}<;YI(f7;oWnCZFYy2O^#RgXxwyeGg&oQaY4oeli1 z3bYH}?J|023+B~f!KEDDl^eaQ4Da-xU~!>E-|&Cocd*Ju@jb80oUEyNImd5;`kte2 zEdB2pJlW{{-FP15@w?2if}=9``|0|-80jZxb$=JMdV@1k1O44Y?3d}iFW37`+z>y+ zhpfqv-wGh&ul}PSt{U9PHaeqsMt1b=ld={JcEm>szm3Bt?}%Tb-}>Pb|Mefy4lyeS zHzn|Xu#p{O``h&1AJzLU`XSoa5105WKIA?l6SaxjY?Cu`g~LD9q5RYObI}6r2a;A; zpbVg$K%H(|pk+XR0bPG=f#UzNK$C&GKes@sKyAT^N9D+|>1wFO!Tv;wFU$nT8> z+6|Qb&H|13V1d>H9RsrYXo1E7orObEX;xBn8R(6T6gk^UQ8l1&pe;bRfhJa#qES_( zXctgjM=1&gs@*_}(tx%Al>_Z=C`B5ek3jx@QWOT%8OY6FiXwpufhGaX04fIh73kw~ zaJNQ^?0=S`4!fktdY=@1JqF?bE=8$8g+PyvgPRjlG#ls`&{Lq7KrhZok@B(>6#$u4 zKpd)DqWLu}QU98jsHCAK+6D9x$i>GJo$&@j(Cw6DC!3* zGy^EMrWMMqWra$Bb~d#_V?(UaUWFAp15_o#3e^INkG4XoKzTr;fMx(~0y+$o4c}>) z4|D?PIgm+vE93xF6UZN^BTyz#z$h!U2I$f(D|7>>#cV6o3TQCUa3K4oR>%qHGmyzL zE7Sp~6HxnKzz?9t>#R^XPy&z&=o!#!prz}r&}N{$Ku3UPlv<$$K%0Sf1FhI#h1LNb z0y+is0O%Qz#YPAd$OEW0kQ^u&s0`>V&^@51KslQrjzAMPgTFxKK$n4@1APXv+G2&A zfocHN0g?kX2Wk)08R#O=BcM+}X1_rifjoff0r>%4E3-nkfqL(=Lj8cs?m@l+t$PD` z45ayFg*c{m%-0% zpkvm8U*`c6URj}|pg7|`g5RKTV&fv>8eQ+9h`%v0a>M7-ZJvDkP)zh-L`e6f?(prl zzHm*rPYQhV#gIwP%MnC5*z6kQoNlgZqaCQ;=Z^o4=!B*k%(Fl(J$sWL6^yJcb zufEyDp6o5$Fb;M_GcUOu$=-t*9DHPEaKoa#H7bJxk-qSm!~7&KdbAMQV^kO1`^x1h z>Aeto2s}AX=o=mz@0Ac9M*P+onGwTxhGt!fJ>;zKHj28H8krG8dm}Tlc<%~kWRC|6 zH;S(3w>Gp#!%!NSDQOr9U`BL5bE`~%pD4%BUIMW=*wBpnr#3K)r~XYaG^6&4z)Z8i z8u`LUA<3osqz%uKK$w*G$|Ye!UjnJ29B{LN{j&1uMd+meHVgV=+^i8H$&B6@53)(db_#Ezu%oTkCKN4dj!l*>#uBe3gnVXlJ z;w6V$NMX_)%!+7UQ!|oNZhTEdp@)!sZ!(~Z-Lwc&5^smbA<#dp1Hq?Tw-O0 ztia65-#ka+W`*4HZIN554RQ;#MsBfA8pnz%WuBExP^Ea#GmdcoHgrd#K@Oe}5q(}_ zT?tvYu+UU0H&vQIhIq=PNOso@RXu2f?DDNqCHOLq61sL_P>?5Z_xilV&K%jLS|B@! zi=Dr9j>Og+*#=r6TYt+6iyU*6r>z;XePs#pkRnxegk}O==KkpO5)T{X0pWQ-cpmYV z$RkjSJpA1?t`*K@63~Noxz-x+vAj}_nTo`erVaFDsSKf%nsDFKE|xZZUQ)*v)ybcW z>ZHy=bpmIhI+AI~RpVSywcMf19twlR*$g?yI^MnvDW; zFJcaIC3f_AeRmRvO2{F(a*nOaMrjS{kl0p2wvu0wdAV7c3B=9Q-3+Q&>w}aL0T|7?Yy*_W?2I5S@(fUiu zre4?*dkbVQS&J++78RAsOjRaIh$o3p{$`|xnf=NNNc$ch$G}aLSAtnEF$2HIdwpKt zjl>ShEch+em{+h8CHlP)m4v~Wd?*WQ?vFk%akWCOAZu5UwJXTl)xWC7p#tPh>Onk| z(?IYS>H#gEspd%462=*XxL^9b#M2ge=2t_WsqV-#-VJ#Mx*|_WRm4g?$cUC9Hz-4{ zP==gY8L~7*mSBg}Rf&@+a%xc}$DaJAWf009=!&XP7pwY1oOC)uMSnv*CHjKK4eZ#* zBGeivXD`byeV(~x_G#KOOhDg2y@=)RA#LT|VJy=FbRKuF&r7O893VWyxX^l~q&k7r zEAT_!6QOh<4fjKzmqeSRXcA`~A8-Hnqd6`)bls2YgK!28JB2=$8^uvgs zj%LX571Y1;*3_&mm@nsH5j*<4fjiO(GWH9>4G`cL0>6ykQ9a;aNkjEOH5ez|wMKRa zK}Y0+E`>IsBnP1rK(c)-o%%e}$xs%dENIIj$Xk&MZ7NWA?na-N*qK6ourV_!=k*}4 zvRU~6gl+*95&OZ=XMQC$^SNtj=5f%<%rW2EOd4-zM&3UHDkgSF-AuJNBYgfqSm@>9 z81j%0;MTw$)K&ekB%an#C#+07<1I}*1EnUO5;GH4%Rojnp5|t>{9BkJi)5}B1al?Ry#slc07dL4`2%5oV+LIWJv$P6Gte~_Hl{fs_iz{!zcRN8x@%+O9dBhL zO|`aBk49(%P!aVHdZO?i!FvSnKz2s&L3bF~hwzR3VD-_K>U>X6GpPFz?|2(jF%IrV z9uFCEfXUU62Y-z0NE|C6$G|>PM@fd%TqWwT-clL#x8i|XQ-8o+zOfmU9X&e|Cn<6Y ztc;vut7z;hY;$Z>)=JjK+91tj=<82`wDUOW^Rz#b3;hu)7c(i9i>n3bNNY3KKr1s> ziPVg?eMA>Y#v_`)PG-m{bsV%clTgldgk}S2xZnD`WSb@07O#YI*#_oFprxX0E^V z0Gh@9G~`L%8rqS-oQY$qHOR#ZIr`gaY%8EWAn8BI`avZN5Nf{=q3hf~eO_W`2I+Mn z`K0u$3jMIVj!1g2Dk@om&=DZlLy)d*=4jh12ecy92}uK;skyua@`1dAG!uLJyuMor zjJ@8!vO=%&rD)_`OChsLL)P%~Lwn>v{o5b4Z zDKO82P#>TZ+^s&(%0AQSo(^Wn0rXTQkU{A>gl+(RqHaJ}gE{)f9Q2BwJzDytQ8nIDxQzE*niwUOFyM`#I926aQiHa0^@-wxHuf!@$RaYuA? zQEpepv;^p659qI_TAO>sTbX+VTAF)E%+0G*h`LB>uGs_MyVwh5fyd8~C-ukB4vVuj zOSek&$I47r2Kyy|svi~eSZYT2*FX)48Dj7Cc>^~jkMj-vkx*S_A$1Kjm%2*Kq*PbY z^jJzg;-ylLKntk{nCsGGF10@h;{c#y9;P8r!Z5TWajS&fBvN~*X>wg3*2Z3T1mX+y zg!n`H73aHlP-AeYvtS^xLF_uCj?Uh2?D}}aK3T>}c+xAlZD0Og@m^sk0?`4L(QY{>$@#YRi<ELGeaJ94A?`)_DDQHhVmQGHwG%#wxPympl9{$ zNUE8kYOyXk&MGH4Z5LxrSYI2)3i4YBH3q66@gQvhj3FvPzm}L40X^jLGv@W(u|B>v z^zmV=83g zrb>lfxosIA`{aZDPY7KD3Z~=bBmx##d%AzA~lbb%~1wgyRk2 zcp(>w3|T8holq0WOeLrjP{R{UzWThx)`ZMMXvaH6QVCiFl*;Yu^Aedkl1Vz7T9?D9 zLT;|~gmsPvui{K)cmEG{?*boZRqg$+XEI49_eqpB1Tobx&7ee?OO{MOpf-uv0lzO23X+Lvi9h^Edch_s(skSXz`yVR3j6JE!F zOACbO!gJZ{Ib#~1f3GqumGotmO{Gas?J_ZsleV7eGo4K*m(I*2Pg?6eDgT+Pvp(6? zD_g&sLJ2cQV=k4L?8z#qS;Lt4i;VmvZi`$z`rI$?6^1e%n&rt0P;O4=lTBS~&CPM$ zyNjfEwkJEG``ml{vaO#b)K9{-P(RI_)XpP4)`Py5qTVv5t%^~HyUP;ZeigFcuBozL zYKrXFK3VpQ)ysZft<+^Eq{nHwn{OlU=Xp{OUFYUretC3U=bQha-}>?Y(tJr7znMdu@q!(eAJ4nSvAk1+QfER*=@o@|5~p0VHJm#vMWnl==r z4OL0)Ry6oP)Yh-zN@+a9lf%v=A6(d=O#1Wuc+<+6k3qC|ou^D|nw*)Gt{a*#Fb;jA zwl8!M`I4LK8=X{5nMS2*CuOd43+Aokn759L70bA$>a;0G%4FzVPfksE@}^5mK-My$ zZuhVBbI5*wzU&WUZHrZmQ7W-5R$yDi*4XWAi#mtALPy)wt+R{d z>|q_dSJFN!r0;xBo`SZRcc>nu-to-u?oB8_Cmkrp1`{d3ZWPWKds>_|OYEp8q5G?y zu16b7Ewsy}*)Mxlh2&QqWB(e7BuLAoBAGN&E79Qz5>Abm%!Qsz?e--4bNjtPxd>f^ zffm1#=hv$*mwL*sp0cZ_?CP6x7EouaEmIwtQA^6S`Xc z`fB|7WiLwp(59l@tW!ompX_Kr8Q4X~&&Te>UIb$&T z&(=!%H~P|+TtAxd8d?9NuKVqZR=1%u>Hk%q+IECJ=(C;__R>b4wRsSfY16b%zng87 zWwc4wDPy$Dmg=_8`eISwSmIMuq{`Plo&SJrZ1eO9=(Xfe87Dw?48=IoCwozBuZ)|bt>s#e z($m-!Qk!C}g?iEZGhpqzT8;iEtIb4)w2kg*IM+F4Qrvy6;vpak=)-v!J{7L&12gE~`YBRiMkzX)QioHnl>gw%5zl z)=4roHc_UcM@OGB*41^D7S>e~*j0>;z~)!-x1Kx(C7-kT6_iOEpGRJ>#)8<+9qygU57n1)s%5{6BZy>=cg?V%hD0|?mv5SIW%nE z&G+J-^tpNC=rdbq&_1WjIB$wnrpuFMnDkX>IM4~OJh$j%8^pYh4wmdKJ{OI>4tp5sK*9rR1uHO!*WtH|PMK6wx2emSY+d%)cX0Cv`?aWNW3KRh1?ezl*<#jg2h5r+ zmJg$IcU8&2L8Rr-kfdFDf--rW@5hyI`bf&;s8DX65tIo>-SxY9Iv!i$#$%>`uOL6l zrSIqv`@=%g{sQ@-Yrw-rlr`(IxZMUN)!oc{sZ)EoOP)W*2mbgp9J*cY^nQ0!|7bV4 z`bs@&_)ti0g);g+^NkTBKY`mGlLpC?ZT$;`6Z%D8Jeb=h((Tr-9xateM~dV=+V!>M z>7qf#wUlA+u_1W{TK+5j&Qf75gF3(*A3uU0*~^dQg&`e#`Qf|w5!O>(i}E#n%Eyc3 zaNbf0|a@i6{S=?N`~)*NRSRqF>cAPg&j6 zH!mdd`5|e2QNNio^U2;R#c~SYQ?|nFgGiWm)EJh=6!|q+C27JvvmhkbX;>{M>Wj*y z3q#Up;v+xya>Is|?(A%EcL!wLViv^89%>m&?tA zrLvW|-__)ICGCW9RfcsM*Zni; zay^voFM={@!=H{71MW^=44jLOf&BKTpc}f|@5hDfX%ERGP}ZIil&zi#xM?`j(9;o; ze#k$D4Z5+W;Pd0%T`qTzRHE;r==&-e-_1^fA=AIPF?Ol+tR+6^iJT2G-;FqZe(Zd_ zocZ{u4RG4hB7Rr9R4N%G>-eiL6_TGpc6>~G!d=&&Wv^$n6QAE){h@`}HGHi<5gGVI zNZy3*ds*wGmWkGve0TEN=Px&Aj8o5Bill`;Xc6x(BrTauA*s8Fd`@e8+TOJe>Nt#j z$AM?q*a9+P^1|DG-{@UChNs^j`V{&VT5aMd%wBHTe0_e*UKz%e71*K7cxzIbOlm(^ zCbb?UlVS(TByX1FY~-qQV&;8utAF&HiY2o-Bx|k;$!_yb((RMI$t5zmy*xa*wJbcD zHPgu`@o17h)WpS_zwWtc2s1C!xUeO2Z__ep<||eQ1ZB;Gd_S6hC8kXLe!b2j=_F4} zd6pX&rI_P<4qX8G+fC4oahu;yp{@VDpAX5ykiY&1-RMVre(d-8-p%-|u{R_epzy2u zZTcCHt&k?xWP*LneuS+R>q{zA`_=bP^Nz2Pw>z9 zC+OFGSO2z<{1VFAME!EE9yjt{;~)FM7en$E^n|`oZDGuPN}0=OTT%BLZVt&VmzI1v z5Y~KuFg`Q)puU-PSG5s&6=Ab7uH&mOuz!A}H2j(2vT$^;oNpf!9=JUu``r;Z-(T5O^5YN7z+xZ4_jTrO8tUZ(v%X@_(p2qvo2arD=mG6e$b@AlO{xF`} z8Yp{4w~f=(j!xZeXJ1aM?#p3()bQPqoC!7mhIHzB+pZGUwxeNnTYG;<7OOk?6qL>Q zfikD;iAUQ*ARhb&W%54%T}EFsK67#S{hRi#_KN}1T*Lk_Y!_8#j>4IQ2N+{PBbqKP zcXYnWuR-#4d!2&3;MK0AjA#%I^SD#A1Po*C%a8L`sv4C;chvrj5PkB(nfID0Fx_9Zeq)+&)*r%L+AA(`&R|Sa8gqL9?OZBt#>NK~$w54u$(W%K-6lT` z$)QlcrpL77LL+|^w?|wW^|@aTgwZtS#bfs)RhYE`Ruz+GKa!Toh+Y5a*}>Z0&qC7h zhRuVZOq%c~gJt4(xBG9I=P{n0$ar=lec!|u>@*V#WukXx80(N-2jHyB;*pl{hXz~2 zP3>od4~(4^j_g_*?i&ipFm#=HCwYh;!Cmkt_!ImE{V;wCgwe7H#^Y5NNp-ARs<*mt z)cMlJ0_uMys5iHo8M1a>z(!xM7(6E~#iZ5~~Y0zYvnUpy==IHwIy|E69RN%JcqIUmZ-C;YNkA0`cx!)E<=emQ#pCxnk3t_{!JRTr)woERRHnna&k zAMSabIT*Cfr6VX)?+7P^6T%7Mgm97<&aC5h(`Re>Gv+EaHZ;xvWw1~GiF)#H`i-j7 zAfBo22tH#B>GSJVV+Y3O$&OJ*0_c*9O68*AsB{mGk@Hhy(f`%#&8(GyKZm4xgt@SZ zU-dwgI$2Fy8N<8A@~(V8k{5=yrT+8%Y5t-s(tFTX?`7>?^uvDH`APEpJ3c=F+4+(8 zLoy%AuEPdo=ckwF&-(lXWap>hgOIF*vhnz3kK(Drj$72?_GvI~@5k?Z(B?O79rMfH zL8WpK{%e?H1omJ|4$EZLe~Q=#Y4qPl>S!VBLC_8tPe9hRF>j3*703-xwl4Z*Z*q}| zvouy__lRm3;vK@)zCXIS;VqlKpiI5V_v7+GuvyQCviT5@)eri-x3oYWg|d6q1G4ke zSXLnCKv_S2+1Q3{ep>qidPCQ~AP+QMjH^|?89G?q&~HJRe8~@I#wqm4#JTq~BJjP#*p&z$WiDdu zO6Hx|hHDF0b}f*5vgu$9ta5o>fjr{U5tK$)-f7RV2??$mb1V4z zyeA?(yw7LDv9?;urRSgmS#xlKT<6{ylr>+2eysf(n+9_O&emk@^$Al>)Ulza0`ZP; zbzbc}*sHWHsM~%}#=R#fQ%CTpww|Cny3x6-4JZ&d`5Kf-YrdbOBXaaGbLEuX1E=eD za%6$Tplq8A%36N;ess)Cog@yUr}Lk?cGEDYK)!kmI>DWD@XOw>GExi=A&G`Bo?6 z(c^a4u(PALvL1qN%B_i9Q7%{Ps*+2vw?+c^{PX$lO7_G*um1ctU!99&Oh0D6_7RkDf-QG3gj}#ZxaZ*F{beQ(fv-8 zm+BQs6v%Wad&VOuYx}o0Jiog)zKFbFEu;yXSfa|+M|4C7@jwl4+q4E{t&c%J-W1M} zQAaD#qvlLnq9|_Mh`WL@dG?%|UDqcsw~nss+ckUE>&eGj@-%za$JFJ)h%~G%kZ(hG zy0ipk(vs)LzJoR2rqOpy+Zbl;nemb8p{@dX9vX4+1!avd-;egiPKWuzddHQ^aVho^ zU<00j4LGo;pospioBnQk#H{Jm4r8Ctu}5pU^sGm3K^y;U^EN1JJ*O;nEP`JhkNBT^ zDNj-lPMHg<1iMptg_{?@1rTt^v0X&1L&HhVAz ztI_3Aba@rJyiyvr+TCwn9d|6G#&gbdoYcK-G(_CQ8LN@ze<3Z~&|QDA`4g0>J9&P* znGu;u{`mHmBy4?W&lqJ`%X`hfF+JO6&U8klVyipTsq=+a)<#CEr16Ud@>A#@_uimP z{lt&p*Y9q|3HREwoYQo@a|HcH|6a)$G}2nlI!9EJeY7iRkBiqY+r2B*ly{W!u99*0 zR;O+M!rIkcfdbkkMA!tW3yx?JB-_2nakD=GomoMjpl9afX9Y3^YIR|QGP*507R>Xzk2U!r)1Fli z5GMUhfovF}3|+iInZ)P$vExbl0o6OY|3~9N|0JGeJ^<~>ew$A=AzHx-L z_(5zTs<(cDeuEnSMxGemRA%IH&(RLljViCt{jxudO^@BjksIH}*dOsr+7fh~i^DH_ zx;D95`;O6lp4oQOlP-`GUL9>We%Y&LKjdTP^yW~p-5G%Om-3z(Vb4yrxYf@@c_Zh~ z)E2`0G?J>5zBkDiDEfE%JwX{gqx0B2f9@P%n6nIF&N76jdEszwokq`nV27n&=ZsoW zxJ<`J5#9IC+RL8{WGU3+-sP9QB@tN?V|@+XT+_;ajIFe9vuC54@rqf)3yyhrRZ9F_ z>fGO$3%dCHvRAMBGN)j7sM-5m%|y=qzdAlslQw76<5lF7ITJ>lk-<92u+~-=;ta+= zY@P&V9UIX8^88udQH>2OiVX}M5@XNOz345o2F1LfwU{-iBG#b7b`7c$dqhiVquo<9 zfi>Onq<5Uu@65HxylL!Jj*XRRTZ3;jb}hyWI&bVf zBrNwq#@?lCm$>WNWx(C6C)qh_{xdtq8N*r#?O-Q!HLXMF-`>N*5@rv<6DFPLfW6#U z3-kFgdsXJCHJ>upHjMqdrztF7hNAEBtu^fH8DvbKVm;8MU7!63s@Lb_MNlTax^7CC z?EG5O?vK;d#SOxfa^v!USZa*NUX?Lt*(gWcF*STPkAY z@8Qtg7L+}apzqi1ed2B7S`(l2{O*p6BY#hhQ%Z;D~(SrC>tq4E#hH>DUK zAioFIX5EIZJYiv24puk5L!bNQKp39;LH1y! zDkXDTST0@?mJt`;FMDH)WGsCIyL1NB$~jGK#OVF$yXs_Isuueu_qW8ua^2~ee`SKn z55H{p2j#~4X!yF-0Jp=B+OtbG9ex+A`(Y zxGXFeLTMMDU$*8){$PYgZR(yDDFFaaj6H zoP1|MR(+T62VF#bs$T=~k#Bz4^fRdl=MakNYgiMA6-ss&x>;9fa(ml!oIOJQ<2@C_ zq;rt_+pZ4FRZuKs%ib@0*}l~EI;Jnx`6YF|kbW|8OIR+rH7rRJmbBuo{b$gf@u$z9 z*`K?@oR=Re8z@Oe680>FY0qwNuBlJ$XoR8`Yht)Q?~GhqHY-`-18J>*@dNyM2B6lp>izJ*aGF z4XQOHz26GU{ZKf2w#z5Gz4VD`^D1TD2xsnxJ(;;HBvS{m_fm%Ct<=95I=eqC--QNU z+5)l}%d)0V7*kijAC?;+qbJS17an`u*+)%%C?sxu_5&yqw%?gA_xi$n#UUy7j}r%kM=kPdo}iw z@yy36SFkf>$lNMo#=5pn6ieSv!tx8q#G_|N$t$(51l-M-MAv`FN1uOtH_Vaf;23wq zG>JL4Jhxotj-bni3*~6~t|s)x0kO#F`Uc~t#7n#rGJ8(7jjN50xYaHEGIgfV=4-wj z2&ef#dux6rET4ePJqAv1s{A|X5f@Ls>{ztNQcJB97*L4 zD5`GS2k?!hyXY?%YpDDA(9EoVzFp-zpgHPBTL{XuJ;DdVx%KD3dkD8zT4LzC*Ll|) z+4@0Td$}=|@cHrdY>Ljg)1`@$c%;$HW1077h~tpoh2;&CM&ikL({UtrpcnBo0+kor zZ^@Va@mTvJ{hQCeXvSJQjgGQ&DoxKW?4D+v#$MpJ!txTd+Qd)&;~9H?NKgJV`Ujui zz&&3&cF?k-Pi!tOl&?YqF1-QS*o|y`i=*GxL8k7Ta*i1JlO=^R;=<~4zw8g=tu2$a zw5?^a2{P_gpAJS>+P*NapQqo+aOc$+&aIstv3cp2*-9f7Ep8m7>0xZshu;UFUiGi% zVW?B3gN1x&xp9A*XScYx)Sq7tgw3|IcKTe_X}<|sTR8oUvwa8M$!niKYoo%piEbE2 zTh;TE_IzBK-dB_~W4HU5#|+aK(8nff3gv33xx{{FKsMjTSy=WOzYJw{m|ylv+1uO~H0H8QWPsXTwvypmV zg0+8S4lIwos;kiFvZ)`E=LT58q z+MhA#Oes&2R_>N<*;OqkW49d3yjIVpl&UV%K6IoCn6}J#G&nf*HY;}s!(n|nz2Bc4eOW9y&K*RyH;e!ADmpzhJ8+w#}~?L&;l3M zFMHD%pLx%S*>SA5!e#9(BTu7uo@al2q3l1uPn(jo`7~~JX$vNNh&uiDwG%1t%i9m`nZaAP}mG-3axKj${I(6e+K^eWB9}YkM zc)a^d<$iRj)5$}*^L4HrMo%l0sZj3RKKY>X!H`tgcjn9fFrMm`R&ypjVeSTW{do`J zhoD6!4yR|(9YJ@}>htIJqzsvIqWlJy6w2e!HjP8yLwV|XB6TZ?qYKnMP=2;O>a!V8 zze|6<90*T-`QPK!G4F0&!g;ULxHE;j6LZ!y+M8L2pzmsN>k!$!wJAGKNt{_I-H@^6 zn7S4*^7+eX1C^vz-S{q*FM|^5#{2VSjUyK(J2vpgO_;sjg)T~*T`2FIUnslX8g@X| zac)ZYTGRivV(Yl7P%ek;xl=74?9)68x=TQ|wuRhWFlpPFjj!=Dg>oentI}_xUJe&a z(2af5em_Tt!_=rEzGTV`ekpw67FdjBU94# zLlXyTlM@o-bmKT>drC6psHX$?GlaMCu>xWr$rObwIr9ZfhzRkRYa==~k-0lAV zIqd&G%I^Qy`$+VhPMSNAvbKzIy2mzx{df%bQx(cF-ztZaY8n z%bu<&duON(UvGl3dp5QF*<0E;SSUY-c4=D8*mkLr-^J|>bt4`6+%E^h=saj}DdX*6 zTwX(|G^}QA106fAy`1q8YkA$(X_H6jyMbR9$_tPk=TK+z-Bho+Hko*dHlSqgy`hc! zWs~Q$+m{RF%TRVb*)N;>DZT6bc6@W!s`=jb8zhk~ln0?*W9;_^Wzv@C$D6`kxRk|| zmOT5lriJeqdbdzsfy}(xq_5b>@8WjcSo;or?w9>xY&&E>Gi&We_qTALjP7-&Kdu?p zz0TO0>96(7P~z`}av{{~;`PgBJ(uydITNh5U3A&lR`e2S?0c_J&U?R5c9?L?FI3O* z%**|P`%S<4*#sOf7gEs~QV zd*>YStKJN_p*MZ9z1t6)Ir);i+t0j{`w+^wqnUeK9;~r>@0YzVl*<>`*S~&noUCFk zzI^AXb;rA)NG@P*klSmm`ek1B93VTNRgao9v;Vi1`xu!6chz7U8)x6+mp$A$Q=HD; z^lRDy<=Mko?Na)nPcQ?*St`2 zdXfAZnmOL)MNmd(;7{`Wc~zcNUBP%_f`=Xlb-vRydN1zKp+)inbe)ScAe(kZ|9DuD ztbzRdp@MGcRi7Vomjrqycb5cpFWSgCB`9OwLz(R5h7H2!$HdWO*7OH#AIUzI!$}Ji zo51%+(ErSR%vnvpyQUd?&~>=o3AL(US7%lJF4U=R=-_-g5QgXe_nEWdtO3_E2e025 zycN)Ut3uuynJK^7HG?_Re$0>R1sjMv79P=#Fp+dvH4Kuc~XD)&Uuk6+>LvtAyN<>-$3+;J@clC&q8HZ39JpC`#D$_uBVR=*x+?vEcI3QPNttK zlD|ON`)T}gZaqZXj;5XYYV(dFxe!_~N%MxZ=ere$rFcZwhV%Stc*f3!KVz>ow9$l@ zfNb^-(Em(~afYVJ>`UNQv8sfbm+2i+Y1ZYkX`$ZrK2sz=gm!3LCjL?*@51dx7r#FD z%lqRrlwhE1{cQIKOPxHs_g}lkJ!<+fSl*6T6D!+t5%poKN;<@tZW>Secrc zoSrmPH(+j$jMp@J2Up0!spI6}_G9JX*oWj`FDAK`LLcZI%5Q$eQgW!*nHQF4)|Q#h z-J8X@zwhrw@>}Ta$>f#J6$UF9m+Rhuyk}!LucQ4tV}Y^%D3W8Ki#3d!2M66G;Kyqz zmlo`WC&rpMmwJHRf3D}*nLmu~a~Ute)l1T=d+Au$4YUy~S>Dt#nHoEreL*dIhnc|d zJz+CMH)i({u_Ekr8Amlwv2`OTYr6>gvA+i}+pf7Kv=-|)gR$)JEb?l9 z`qjfESzjzo%qM$^)6SFl%?-OZz|P(DJN2%+w|yF0*Qt%Zo+!zg#qt+uw@Z^>_73HD zbG##iW!Z=>HQ!m|?*m4^b8w3EG#1O)h2s zxqe*wk1v*r=3?nIVfjAXCC}ZAt67UO_o}wA=gZsyaF0xC{W|M*cT?Z*vh_VlIu}&P zg4Eq|T>IDL@Yr_NsJ~7>ey6kX@?32}v=4Ml!kjgm&2O!Z%;t{&!zH@wFw%6WBu_7v zC!jqhO^j=JE<6{WOWt$4w`v-Cq;~JURr(tm++7gGK5eXK+D4+RrH#~Ko353_S=_G( zt)6D{%`bav%4E&R0rcYsivM;Wb5>RLIek>JvsnHWGV2*e#}^s-LEHvhoci1^2g2+h z<~LgG*duXav0M!0+bo0bu0Ia=r9bw`reECY&L8fN9cg47dCR?u*y4M-i{;C_@9gQW zz4&CaCzU%#XL5(wO!90dd6v_;TCTcwHq3tRSd=~8>`ydf(JJ~P>hZ>6c^$gX#7i1e zRRK4z20M3qls$v&8^p$4b1!ws?73UY`bP`;Z?WbvD+o@9jhrt1mlewin~Nnp!=}|Q zmxMhDPp7SI<4g=~?)XphTYr%Lww9vVe?nX(Rk}yh*$i9ClIow-$>pCZmaDHRmO1!W zdfzgpG_eM{l&ynz_aHbrQQ61J(~Q^n&Ov`KMyt{>)%uGLq54K%6NOHIr}k`wEff9E&pK$TDaKEDNttbcaAn7vac?;g)O{rx9wc4|vxTwNFAzO=35(snG& zxSz37T`PK)@jd-jy2SX$5BjVQ{hhV-Wz+K6Z}7X6-?a5=5BMsisQIB-qJ3N{xE`6! z+oo?7%XUcpJ_^?DPyF6~64>!e52oc6#giFRVh>>ts_t_girRU8+}p2=yMJexyMKe$ zFU<|YX?>XY@1Uvo?oPa|)Z1tw?_=M3(w>j4J4n~vZg)C4dqbJ6M?&{z`llFns%M$c zLD_XuzZ{rrU=QIAa?Q)M`R4X9$kmiXZUw`9bF-%1)KT3(j2?*DJ;ZfKl*#nemt=bT z&CIF3h#hsC?N40Y?xkDubiS41cPJ^(>6GVm%5!?tlyu!8?^KEdHz!<8&}~Y_i{8!Nt(wh`WC6c>3VlDD9}`MBFH$WN$h!&M&T>95s;8gyB64XcBF{Ph zd*EvbpOx#h529SvewEFmWgisFtx)bA`zZS{JU^^E!t@q9Da=vPJ}@>dt%k?<$`WM^NF|3~qZ6h`DrA^Iz5h0w-uHP|O$p~Xv*|TukiFm5p6ki_eF}eRpIHOJxW6xn~TqdvhjoqWLe{FVtj)yXj)m9GH20fBXx(d{~|UfG#SHZ{#;D; za&wgTo3#gQ8cjj%TUUd9*^Gnj?+;|ZyXHWCD;Ub&*7Y_`+X_DT*v*U;oGeqZ`OP)2}ud}EY$6_bzX93m`t@$c04CnCxw7|+zTkZ2y{!3Y{_EP==(<_b?Codo zXIU&{_Y~^=^xgvh9us@tx6WyI&6l2=_@l$^=e~~wp;n%+ECZl<{<*smTY{5E(PFerV^F=+$T+-v?#unqRKtj2d@GG!EX$ zy%%ar;cp6OO7(ZZ>!yUU19JE8*3!5>j~rQM+-Kgzn1a8SyO`7QSE72CII?xb`$|O4 zf`+IgUjg^k@BH}Ah&&Btb+=c|ogUrftJVSfk~;FduG@?|^qks0`@3I~&S5AUN8JJ3 zC(RkXNwk4UoSC7Y)ZaBU;|HzN-i!*F!Je%d?Ae+Tn=CUJOXbRqF-l#7>KNulF~$$~ zmYHzNHC!#{JUFjf%NVcrZ9BuM)3b!_6|4)C%h+yvMlsv&Z+ti+7x4Swy7t^S*Yr)QH&PEoUZ* z(TEv;JAdmM|7jESp+o9|jWM6)oe-@F&(6!mLXr1G(l59HOcs3&MLw97K zYn$?}k)m{XC^TSo4C-8_%`U}Gag{WruBJ>sEz#C3*bqM>4Z9-pDd?8Ntq$?;M&ujN_p^DR`8mv-F=gkBUc{3K`g~vC_5BwjQt+!$eQL{0 z=Y96KZ}c6gcG2IAe-hf|-mw$@9iQwOTZSifvzZfc9(7`DCUb*^+8rBBJq7T>~^ENiU$>lPc zJef?MOs4)#X52Bk$(->X2(AkR_vU*#Ry5`Jr|4z#_?X=cj1i* z$(U|*4*hVM3m2JNCiijAn*Qyp9Ou@S$SF`(7wyZ>B|QJM&yUf0_m;-%4xwIor|xrp z8K>~gow_T`E>g3mZ2OlBu_>?G%ciX5+(6$^cK~OIW2a(Yp0`gwTB&S5T4nc6n6W0~ z3+h2`f3CU9T+c{xw!Ov9iRup2v!3;&cg#NH?a}-(V~5c)%eIr14JGm==nt+A?<E#YnjP$t`b_e%ryF=Odj{Hc8bV9kd ztNl-m`w8yNTMIVlV>uhkywX3X^J?@C^lGh}8FFa!4)hwn|J8hp0ePeSG;#17TbXg` zu|w4ZRf%j`KD@X@E`kooejD@Y{m`LxtPz;q_d}5ZZrMwO>8t9Qv%EXMOn%CDZeLJh z`|CsW9>Ctvq}b;|le}v}w#3}{u!cHuIOCGm8$wfK+d@;l&xLZc`h@k9P(O$2J+6ba z=O1CudsJ+1XP>9BDOg(>_bBLi&**>({G$t6bv%wPXfZlq$m)Qx%wf61pY|TOzrTjI zjGf1vJ*KUi^T(R+oU^Y>1?)c=)AuqDuEk$%w>?E{#=}j8jRv=d_Bl3~wzfnLhjR7E z*XFbN{bim%@E`d39nb65{rmB>;it`0mnMHr+ZnZ~?5mA@9pKo0T$`&@r;=wMEqRy4l=!NMAIOzGxzS(Zsjy_>N(> z)a|2fW%a^4Hiq-OXN~0TPNzK?^|DJnsn@1H_nc+Ri2G(`Ymik z=J#&5+E!Y}{ezV|S;0>7`zOvmnNYuaHkY}O-uqm~wSJMUb_}O+HS@ggkcu;=lBbi% zQ@!tF?9$46%{|0J+;WPpQGYrPuG_!tjJl;Ytn}`!*VIps@k4uAt#goR%u(y5G+B~} zxHty%`9bK3jm+^@^Er7hB9zMqL=!c+grCwP3@R+!n_oUE! z^jnjttCN~);(_&orcqnrH@{yZ--Wtq6N>*{o+n6abzVD;{G7ck(5d0&5TZbrh~R_8+WMch?Tw=<`$S)Zk! zPO*m3&VJoi=Dw7z(H&F$Hq>aqhDzBjtYhv!ZhoHi-j$7huQwrt{f=`g8V_}ADtdP+ z>7Uv%y02}Y`r~&caxj$DM`q1CwLfvpBK%CoDWmtenR>i6)Ts5vv}ZH-jWbqXoSXZa zF^{gB57)_5&O}e;O!QRxWc@vy8q(|SU%`6YG}*s>s_f6b6Z^Afm_1*s&#gVt?g`Dd z{}caKBI}?BT-oi*Pubr~qzTIUv3fxFSD~Aj8)tv-s@mvVd#AaUJt{+PD&&j=bl3-W zT(ScGG3X>G+j-G}%!>|SUNoC|(e&WF$k^=g-EKT?#@yWFlh=;y`oU^JGY9q`XxXU!q3$5og;LAWv&)!E zw2H3l>9bxwxNblFjTgNygmrN{PdAnkea{xYdlwoNXTo3rum!+xFLo+c#EC|mo}G}_>lTpLVl7}NjSyE}8`+Q9D{bq7y+nfjvsjeYV! z(r^H2m}$q337ZC8C$njoO&azm4Ks6TFwfX0JAt+_p>;NGV1MQtrzmf48TY^jGj~ zS!p`WI>{K$hHyt}+3G?mevJ3{Y+%{?{rx+zNkAg}UIwUhHvKc@GX~T#>pW1)cm-(U zU_983-M7-?w;P>*3!~vR4yCaLGM4v;dB1nbc)4VINS5AIAjfP8%Yhp?zqguwzw|Bj z`?wECqcrKzu-eb-`}N%R#v-ZEZ{p4fe?A)jdcJle^>uX#&nMY%uM)1*lhWHk^~9fz zr+|3$Y=5Nk8wE5 z;T(sH9j;R1)V z-1pCM_;>f7MNWRf<;#6>``$BMxpz9e)ZujwZ*_Q&!$%xG?(k`cuRDC-VZDn#=I{iE zXFKe4c!k589Jac2?r`!84*%dVbh=G!*+*BhnG6M&fyIXw>x~$;ZqJ@a`=wJ&{F%pF%BCYe#GHv4wDYIIK0K-gAN~e z_=3ZX!%(Y@zsBKAhfNMob9k1+PKTE|{G7u(9rinX#NiHyyB)snaKz#J4x_GKPInk{ znAIzo6uR`+?S%y7yeW;}zOPBCb|UV7}zMS55!G48j! z@Yd?h@hj)f4g2PK)M1yyl*9E7?{(pCbTYSS>R*rRU3!efzvbEQat;T|{I2=k9c`(O z6F01B=Stzujw6~5ZSU-q%R?<4=PgNgtUIM+)548&<#Q^ZzM-Rg)0u6Z8#>fUPFJ`2 zon7lY@FZO-EnK%@tqakel}&)TvLzS8N$Xa1;fWaLE;w^;{3Q2E3CoEcsT0<8cAVMK zy?#yCI`y}7%|#t^rAlxbeLEq!k6|yrbLGs1ElW>Ya+>*qG2v4;bf(tK+mz~P?OL{` zy<`6Bwr)ALaA`+s{)X=Ej&-R8Yq~pDrnQ>pGXD>kG$*5i7!cfy)=?I*11UT>b^a+h&Atz)Be_`H!# zam#FPK}Tmts>9~S+XaieR zg0@tf3|iS{xAD@ucP`ShenV-twJ%q z4-_u#?C3}?+$i^1PEPU`lAGQ0X#`|$=TaIWtz9Htu(+e`6CHcGf4bnLb$D&-L>J^e zB-RbzZarwR7rHLYv-+9>rQQ3 ze}TNOu4`6p@~I~Le#%?8F-dtXT=$7J-CgU}qEwdBsMejgel9l6Wo>IxXqBbNogGV7 zoX>ZX-fd#qkW&U*N6Wyvke`1Ex1>7fwa^)`XsoUbNt_wCKPuQ@|WEh#)y@~be zLY|ztraQHvt@Dg^pQIIY#<}36^$R*yY&h?{j_x?BfON_0g=ef=Z8T8(!i_6ClKN>h z9twhUoLXl8^zolGjZ0H)ydtS>X_;&%ey4T1x=*10Af?&&B*R8g$2+=LsYYG5lDbO) z@R}nu9;Y8&=#$#zXrF8AYLr1cj#4^WR;moEbo(Q;P^91)2-?^U34T zs3ceW{O8q?x$D}OCfBSp>67OQTRYd!?dZS$>_S*{WV9` zoh+nguSA2#yVjU5{&cvdZOwXmOPAjwA80woS6bz!DJNeh`83n~RClMX2;Fj%=>_z| zMNZLNTF|}b6CJIak|?{CD(fRH5bd}q&3UwZ+rylneX5>iemLIIae*qy_V^m)9|p8+ z>qSeG9V=DO87*$K@@90sRnVyDZtJG5UKblaF(~1sjr`M)SH)dI#;L;}jQ=ye{ypi>)&v zo6Nhi(&K)eMLBCavd>Pj{jbT`jK}-ucdezOqVv|#8~-WKWtm*>?~Qr$L`}2nXO?V8 zB{!tzW0UDDpg5DZ0woP^Dv8t?J=C!_sd+}|`@9o!_3VD-iOkll2UN<{v+t^8qWG}B z4;|iNhbY8xxYccIM_uk_bh0+t*4<(C4}NwPES`UATQVnKuCbURHgyIc{j_45Z8thKekderg4_ekA_^{X`xZ70iUW3|3PU3Ab! zD?CH%waTtJ;3Vr!&a`ycd^#r^BG(zOH|4)18*q}m;W9)M7;Uw`|pTZ<8|}T|8jJk%#?^Pmi%}dR!nHt zZ>UZE_uysjZ>Ed4-o^WWial*MJ%^Gur3K5&Ogep^^8Y03{Re-cyuSkXm;KoM`rf?M z=1aC7W>Nk7`E2-qhTGe1e*fS4JU?C8`jPKGaE8r~=4GzFEd0;ao92}^KZaIWoX?B? zPx4dCN&m9x>ygq@XB#q3*>aob>b1uGKK|oNTeCs_Qy5?HUkoox<-Zoge=6CzKyg{{ zzxw`Yhb`~8!(N9`R}cJUs)^2*b06~G&P4y|pM6!sKmGe}Ps;yFgl#KUws)*LZ}pn< zFX&vmt}A&V2CWUB_~gb-7un>@oi~5M!V^whbkfPEEI#$LCGpc+mbRX8=Cb7hv*&E?@;FI(ozU$J=k zZRtJAHDB6ea6A5gc*hHOG}y;`{lENu>(uP>X z%(yW5r(%Pd3M-%OcETJnuW-GdR>~v0;rxHfR|428YcK zlMZ_wCMH;aX(va=TRA$`V!y*oot1khI`>+O&CWeB$;u7Rz0YBKigoXsYBAAZk;|J+ z`g*5Z?4MyVKGR~xVb6Y6j!t&&?mY=7CudprUWfe-haC3pZ=bV3VBhC3d4Q80_B-r3 z(7In2A}r_ehJ;qb)YivDkQw z#l(j!_8x1o=QxXfAGX+kyhWMku*bPyVzJM;XD)N@PEIeda>ilbLMumI`uknE^*edU zVe@I$U*j1Thn83zh+FJC(YY^j^2rvXi!BbE>SPyBLpDB#0~>9 zT9joLn;i~0>|1W#8$as&o#o^+E%rDZa2Rc|?#ZPVn_Der9441ox$z8(iMaE3y2bv4 z#lAM@zR6;GmBpz0j$Zd&ne6v$aN&|JT(`x{Nfw9JTTHn4ht9Tg&&Swwu?d+MAnY zU;gs_Xx#hqm%>zit}dPtPySz&QOdJW!^7hx4c7BBn0l9H1Nf-p2f&M1m~Y0t2h2d~ zNAXcIS@{9*Bz|6UF}&j86SzhfUQxGlY=l>w%jT>t@QUA=#GYe##R2F+c*UjlB2U04 zz^%}3c*Qsc{sz3_HCp)mHcT)0l?LpN@crP*=^_WiE0*s^n&B0Xg<9d8!P&EHnj670 z9G?JJ97dY)lLYUBHp35quS0WqZw6f0$Zta69tSr-H^D0&emHAA@QNRS9)WKLuW7RR z)(f^CA+iJa1Xy|`t8(yBaNW^dD+QkfPdkQmf1milwNNd*;uX+Lc*WrfJY0Q?Ko1FyL0!=xWx@eOD@yyB@JAoNfvkw#p~yiPWV1h_eu7^D}E2!2Cw*| z`J@wm2wZvs^#ncv4k@WS_}+=+C%j_EBGL(;1pjc7&42Wf+;J*t{sHv_{Q7C6Q+bf9 z2uyuz20I|F=jcn(b0c%`69qpGEr3UF%12J;+u)nQiWcgO`T-X~dRL|5gry=E!z-?V zdg0N{ayXNFtxM=2OKX`J*Ua`ST5E8*!&fzt3p;OukUH-f964DN~p&>ncjl5?p`1Lz;H zC1KOh4{mLvyl|&~lIbgKoQ>ckkjWEp!Ai;!KZNml6|Y~#Idpi%dm(kF zkCV#tM6QFUpA-6Q!z-S>+U6DgxBS-e^nLQvHMSh-&*gygsjGxlJO#QF-XQ#g@OOfT zTtJ?{E3Sdk@QQz6KSBmx@w6`LCwFNmeg{%_#p{#Se;>F5YQT@;PcB5)!7F~ao9~5h z1~)@`PlDp)^{k)4D?SbNz|$wo(;KYL9|B*7dU03$J#-7aV(Jt0d+>_yLA&4;8$OBd zfLHt!^e(*OkD&6$h#&kbq}z7O0DY5LP(*{6jM9dGa-Tlijh#nR7EKj9VYp%{Dv*a|IzSG?;Q_KCqO zJ`Z)mE4~i(z$?D%+~r!4KSHM80gt_o^y5cy7`hW)@s`h$Z}5HKg3r+w;N#$9&=C9( z*!6k73qA>64`tvLAMYhE;1&M})$se!8F2hoz6D-!3UnO2V#zl08D8-Ns2yH$@CNc4 zeh93)(Wbcp{1&ts_kQp-XdArZcWxs6@QOc%9)wr?HS`308l3Y*8&5O%nDUgx5O~wg zmhS_Xe2MSEzhe1qd>6dpHYoCA@&x<|R12@z*vEIlD{j1_}AAN)0>cjYTS_f5X{@$m-#4ZZ*M^`x;r9p+9|doNR>LbUe~7Yx zSG)ka4qoxfhtUi0z2IArj^8riYmZVcxM#rgen6hXEB*x>W@QQ1p=#z{UjT?O}{2usgo+54Vinl{?c*So+ z33$Z;C<(9FwS#&!K;wLRW*s&}?|cn&*ihz5yKGZPSne-~A=^8F$6^eno!= zuQ>Td@)=(7x6o#I#j;;pcf~^?b#DZdkm^ar174yma97*_^}{PZ0}a9tfiqsFAJnkm zQBWFQu@`y+UNQa(-vzIjhHCg76UCXYLh#tUWF=(AncxF&Se-Bc#(odsry2YsvH`Go94wI*l+0pj~364OTkYt z;jU5t;J5(lliBdt z1f>Pi-^;=tD61g-9Wuoyp+)eD??7k6D_(%{A_=efRj3CZTNig)+jL^Dl$)kn9-F0{ z)nIw-m2&xX&&>C+Ey@d!j{g-uvp;Dj9!2bpawojv`;g`XwnsS%GII^^3P|Tfz2Hvh zKKv_AJHV4cc*V8QZum5~=|E53fX5~&PaovTyYSc}<)K6Dw_}r(^AEN0C&A9cY~Cip zgBz`X?33~~Wa@B}Crgg-OuN7yDZk|&AdM4Sq!b@*Dc2oq^9TE+q>i&?hmDfo7kB9aZ-ulDV6&9398Xz4O`e1A&h?}g9^0kVLpqO8 zyat+syW%!zvHAyJnol{xE6!NJcfu=T%ak5?#ot4w{(!eEbngYf2k9NCif=%@_*X1C zf%1aK?kQh^G@aORrT9e31$V_HGyt!79kd%>aVzvD{Lms#ZaCS!3oKkr{^O3#Q$ByH zZG%0hdGg~W)ZJ(B5B?x-{bM(k6Hd2$9NY*s;79SYR!pyFCZy#9LOWxwHcrLUEUhzWcYM*Q@G;~#Tv0X!UP#$B=a$J8r$#Y3Rg@QvV=kK4M`3%>J&tsC+r2JFzE_sUYg;$J2+u#*fLU+O|w*8cEhgVzy4Z^ z_rk})^M6Zuz$d}Spd`HFN8j+|VtB>1&^CC*6~Cjr;1w@})V&8h?)RjbKC~HJ@}}(z z;^145x@W+_KiIx+2;7o!dH~%1C-R4Q`oZ=;lMnDo@N#GvUhzHXU3kU0e?f0NPx`^X zzeAbA%U|g$-z6RD4h}(@SBjhdMjghz2b}*N`J#TnZfK*rgH0dU{BH&ygf#2`SS2A- zucF{As0aUw??Juriide2*$&?b-WLiPeLDcY13ielVyYm-PYh%C122No@IBzdaLBwX z4qgjs9acPmdmA(OQ9KL^^P7~7;JDNM^%lz;nuMSm9pt(;@vmF2!g? zNEX8@o&hD`6W|q_+^vMW;^grmc@ti-$??tLMRg$#pHUWI4R@&5!Z(2X zPYFpQd?R@DRMNorHiPd$i*Q%Gby`T4!z&Iz8{ri%nI4iY@IBxGGpQT!jo>2(Q3uoy zxad&o0KDQZXarty&k@|E@d9=R@R}Iufmi&3;}uJfw0;y{gw#(OEIf+*;oB8Ic63M% z#$E9Os2N`IOHdrX51cqBB<=8uw?RpG#W}~2et5-upgwrTXQ2n-6<>p%fL9#~J=he6R78H0gyp$2%xFF|wQ`@s18 zkhH=pUJ13sE4~0-44(#{SrC%z;1x?3l5g;eo1q8c75@(HfLHwG3Dg02#os|0c*Wuq zX_LREt${b6Wc5iO_yAOcyW(x9k%#b#eb54U#rh?r6TSib7bpd<_~AIZ3tsV5=q7l@ z6to?_2mHh7A)|{j;HO%t)9Ma>cNz5zegHglx%JZsegJ73myd?z_mJw$40!Ze)?M)i z=v~4pejh4-iFm-w$DDugjkSUi&@CiusVF)~6t<|?ZU>{^`JK&eQ$X~)L{t$}6D?SG;f>#`I z?vkVqchgRBPlFBXUH*XAr|f(Cz@I74cuev1PlTis|BBn7E%1tWKzG6`KIq&Bz&D}$ za96x!BXts9@w3owc*QS48Fra98{xv>je?2zo^00k8SI9VhgH4@25U z6kmgO;74&xFYN+eaT+uN-w1Ai!mna;1`qfGdLCY}3z`Y9csVo&UhyI4J^(gvwRx!c zAhZZSif3%2?Z7K`KpWu|zYJ}G?+1SgX*w1EbOUu8cg2Dmi3>go-ta|NUf^5M6Synh za5G~9c*TFcg*=2;4Bra9#_#-qhe9>*iVLBc@Nw`N$h2{A|J!W(8^Lclz8|db!w>!& zz^^DzS@eT%IX(kEdbKMTJG|oQ(Er!o*?`A6=KuaC zNi#{SMztE04y|p_mr+HKG6>Qa1XZclnrf@5rtN4`g3#Gj1jQhTDkkrfG))GnW@#BK zYg57wifq*ywkoJK2!giG=leX*-?IPxpYuQG?77a%bzIli=bO9tb3gaX@BTgaOkQRd zUcAgH_rpg~G3Da$Cpiz`#bZzi?}OK(FkXBbMe*Wir~@w^)W#mii=$Bw-U}BXT`M-B zKD_uY8t@^nH(};_@-JQ-hP-$WoQ`~WanVzp@A2YM8|X7$yacVpi&vrwyjX_X@Z#;L z123*Y-S{y46Y9l_e??{o`w`yQPCxMCPUOXlKOi4o9R54@HQoc$o~A!|H=KpEj(+&z zGwdnKlQ4giod*iw9%Q{9e|B$kGzwEkeBcFgDPC+qalCj(2Qh;W!Q=m6zXtKat;nO; zfFoWcHa_BgWB4K(j2CM+lZWwQ9OdK1_fR2T{2MC5i^E=G?(jbNBMRfq%j{Vc#fvl0 zM!c9r-FR_U7xRS|7ouHw@dh-Yhw~WR=N0;l7vDh>@ZwH16))cNDsADz@ZmW7R32_e ztMKB^H&{#6hx~%BiQ&b4(RRFe80y7~$0OD8!P&_5G0#5Og0k@932(C2c=1t`j~Aaq zv+!aMD#nXPy~SMNz3@b&_X@-nXcgsR$=j>}UR;Sb;>CK@g^$90x_Q>)#eKJO54@Oz z%qIu%`iJ_+jTa{;m_xic3;FP3&ille>ccCM@`iXX3Q#Uy{~`Ur2jPkxcKih422?@0 z`0VGbJ6?>VPQ2KYWUcW@IPeSl_9;Kt2XntFV!wUZdzv$r_|sg8IR%A#Dn35~{w;2TJF#JzrG zjwl!RM+JBfoP$(Hya)Ly7i&-nJ_>iEm3VQ6NiiY3xDeIi1JKK7GHR{GBlmVZJTk@c za6np$X`{XyhEW$@9N90$bmPS-XeYh^K7iDw_y*cVx%eS+e?|0Wo?|a1IC|8Q{ zP%g%i7cYK*^6+9Wnua$SDdr4h%^|!B6;UqUgv#(CI3UyRgBz}LdFCf?7s1I`o+Wqmt zjD1tAcyq%m_p^Nf9yG|VIL=UOW%2!Hctz>IC33NPUaJUervv zIN-n(vk@=mqBvfhgSO+v+fgrGtVFKQi7{AmkUc*^`0~N_SloO@=y8V-&z$*va5d6> z!!USgipkAE_ksmL9?39Z?paA9OIQoDzhhp~eDP|?* z;@PMcFU~-1c(Dw1;)AgN2~Ir2>yX+B!a+H<_rQh|nG@nr{NSV%o(Jq}IO1gT1HJ(E z&$a8j;hjk9n}ivs*yU09VIJ}H1?BMRv*{~72KSkqV!c=6hQp@Vxy1_?AoV8zKSSCJ zNqEy#yF3JUpJVSYb8d<`_B{Ib3ULLirxCBTABBfqObp?@FocTn;>|NsOetQx3stHd z-g60iNv}!az*)}xz~g^y_rV8OAoWc=@Uj%XAHeH$csAOI7iXb3-VgU6)i?eWb2v&e z7V(d>$v@N)yHOur+<{zQGG2J-<@U86*p4)}G5Gi#yWBfB#XLIC?q?Xjf^@GqOd^lk zfeWu7KjXz>l!q68gQnp_Fn2yV8SjIiIz9;>DI#tt55uVo>^cQ-qwME^b}SoZ!VC6vvC-pakA5NilDuUc7k7QpWxj?|Z|ekq0lHh`e}lIm*Ka;fiI< zwLIL2O7S9pjKu`;;vp!E7gMk1xqx@Wwb#%ed=x&9G`DfM8(HgBnqrn9y+;v%e?i-+ zFAl$!KI6qBkgJz@fT`CrKd&)|u&#_X<9QT?-{0WG>Wz#GWl>+;gGS=Tj1{Z_-VG-N z89VFfgTCL`eGqeh>%<{E;U+s)eK3Hga;?~m{CM&As01H}Su34bf?2naD<~KLj4JWs zpj){f?}07lPXFPLx7qhKx2Kp3kmkn^Gw)#Dd2K5;%5$x_0mbn#xM`I=_89C%3ChKy zJNX(f9R_%-*13+|zR_yC-EpWO!^%&cHuC>JlgpJyLlT!d!f#p_WqJ_xURfEbX6 zM?REdD)3(TGHS+)6W7pZym&6!f){6@?Ras4Q!d{1h+Q6nbHeOda!vr&qFvM%e_hL1 zzTq4KKdU3R<4rw%N4a>>9brE4;;m>dUaUZ+c=1K2JPsE(rkHZd#W77h+wkIY6vYSO zHO(m|CJ+5BD{os^5OKh8e+mY>&x36zBwzd+e|^F)f7*+!r7epvhz zxdI=6^EU7`Ui7px&v@}0RDn0YBPO3=jb5fctVgw!iwipFGhVz7#qr`nFVYXZ2Ojnk zed}YrU@x-HLNBM7hmnW!FubhG&U=2i3}sU;_8~7`+>P?^<`r@&nuZr=zRH~A#aSqb z7jHx%d=PH^6FKyC<^(Q}Gk27W7rn-L052A!ZoGI4>cNNLsju7l#0LxCaP|v)0PUiV z*s+CY;&+@epzBS>g?GcL$cq<;yv6+E#T!r|UVIi6AL7LaP%d6P_;cn3FQ$HJdpFGZ ziZN5}h8LnBUOc9kIK+#$q6j_)kNU>x1I+6qw@_XHr+r6`#f!h$#U96t52HSO7>+S~ z=Fks}3x0sCGYLF!?^H9Aa&ZUB!HajMPzNu*otkR=c=02o@+92ZFV&jEBuwY`N=qqs zLw$B(NFHuL5qu0T=W}ZHoY^C7oS63yto7UfkrA$KdVb>^4I% z)thQMsUv=Xy7A&G$1vA;v1EKIKQPW5!Ybs(i!Y#Ic=5Dj882Qu9~I!m8<8I$gioNA zcyaKAR8xr;vr#kN3u}(Uv)`jIjy6&*&OV;Cz>7=JPJ95~fp+1=;U};bdpKi2kAxSO zpUArW`2Z7yD^5zaUXO?2<48ZhB>oP0sV|N_nf1bp^HCvQ45DJZxD}P*#dpvud;(VG z5;v?%6fT*VYSvILK8D)x;)kdcpM=e)um-&UABCl-G5?eYVGQZaAoijj%EjpEj2AB+ zl1ChKcJjb3Wc>^V+=&MK$oqb9H_F0`L(fb#qw!)Z^5MlcGz~94kLKdVuTcr!oRw;3 zoNeFB59j6E@e_diPhw4}BVIe1*u#sJQy3dQ3}2nfI^xCM=diALF?nvP*^U>>&SRW- z@wx)$#0<6g34SC#30IxZKE;bKT*w;X#g1w886Sta7tv?DSc_KT#UrNEC%kwHYQ~E< zp^bQP*v0e>?}b;P1YUe(2J?>>55I)@$H(E*Gnr>T4cWe!qiuMx z*#j|ds|M&uU>>YOQ z^1%!5c47lwRbl%e{OyDE^I7s0EPTiwmwyfU_R&+2QPk$X5qyjQ8C^$ z)2~+I5+8z3A^o0$cwdxQqFlTmwc*2XJ?g-Ve_PM|kSj~8!6d3fHA`Q!=OGC1dOg)T8;9UYTdBjfL0I?~`iJ+!H<5le zNlbl@^`=~GNU)Z8@sRh4F}yetHRFBoYNX$b6hB5ADHn4;U~l8aum4KE!iyQ($yazc z^rO^%^a0L8ZoGIU8i^NcP!3-F5>3O44}VCE;>FKUDPDB%Am8D|`%xGlh9i6IwG%H! zQOd;)r~@x1Q8!*3^D%n_FK$D9c(E4^NFQpk`V(RgFTRN;;Kdy%51)k3e`>Eq9NzgE z{ii$x|ALC};t~DQOetRc09D{cUwWE};>89O!;1+N$BR>3X=XdV04_#~AMu)uG}BAD z*oFqUhFUDhOfw$5I1_pCe)!ow+z+3Gg9fIVS$J_JD#nZVqaZ#EH=qz+d=;(1ix=%n zpYh`5s0%N)qiy&Yym`MgD{e!u1?hb%v3O9L*-0I-1f^ySwRkIj7(N82@1JJv@c_JF zaGDuSxgXwwe0Z_`fHZzLYpBI1@kRI;Y#d4*@j?y#ivjZFTRXIc=3G{#wSLnnN!EHj(8uu#hYe2@M6XBtRr4*MSb`vTzx{C zarNg}32!-(7{iN&xoKts-Ve_`g*oK?w*cIQblx+kGDf6z3BbRiJnDt zz~fLhUYvq*@Zu7bj}O4G%HN=UxNtIKrd+%p72|{O8B~TBhfE>H@M0kfb>qWu#W}{8EWw|{9wGe2xa5NWhe(9gmILQ7f(1Z z%}m3KVN{G4pF}J1G58{?z>66L>=C>;0!8uSN2n7oet~-M;t!|~FOEN-c^=3b!Q?dJ z884P!#Qr5Ggy5yqi66@Sa4FJjH}T4gi4)4j708bl_bp@};l+`t94}svD)HhIGtx{1 zFXmmsUd9)|%VyC≈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 literal 1371136 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%0AS296p8GJnhhbV3G)DK)M7wo#-(udn@bMkhA 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